From 7316be3dd0e6c0647cc21385eb20940f169e8fae Mon Sep 17 00:00:00 2001 From: masayume <1936714878@qq.com> Date: Sat, 20 Nov 2021 14:24:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6ocr=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdparty/hgOCR/include/api/StopWatch.h | 34 + 3rdparty/hgOCR/include/api/apitypes.h | 33 + 3rdparty/hgOCR/include/api/baseapi.cpp | 2892 +++ 3rdparty/hgOCR/include/api/baseapi.h | 922 + 3rdparty/hgOCR/include/api/capi.cpp | 826 + 3rdparty/hgOCR/include/api/capi.h | 409 + 3rdparty/hgOCR/include/api/config_auto.h | 9 + 3rdparty/hgOCR/include/api/pdfrenderer.cpp | 1265 + 3rdparty/hgOCR/include/api/renderer.cpp | 283 + 3rdparty/hgOCR/include/api/renderer.h | 271 + 3rdparty/hgOCR/include/api/tesseractmain.cpp | 546 + 3rdparty/hgOCR/include/ccmain/adaptions.cpp | 126 + 3rdparty/hgOCR/include/ccmain/applybox.cpp | 814 + 3rdparty/hgOCR/include/ccmain/control.cpp | 2077 ++ 3rdparty/hgOCR/include/ccmain/control.h | 44 + .../hgOCR/include/ccmain/cube_control.cpp | 440 + .../include/ccmain/cube_reco_context.cpp | 184 + .../hgOCR/include/ccmain/cube_reco_context.h | 157 + .../hgOCR/include/ccmain/cubeclassifier.cpp | 134 + .../hgOCR/include/ccmain/cubeclassifier.h | 81 + 3rdparty/hgOCR/include/ccmain/docqual.cpp | 1013 + 3rdparty/hgOCR/include/ccmain/docqual.h | 35 + .../hgOCR/include/ccmain/equationdetect.cpp | 1550 ++ .../hgOCR/include/ccmain/equationdetect.h | 278 + 3rdparty/hgOCR/include/ccmain/fixspace.cpp | 876 + 3rdparty/hgOCR/include/ccmain/fixspace.h | 31 + 3rdparty/hgOCR/include/ccmain/fixxht.cpp | 216 + .../include/ccmain/ltrresultiterator.cpp | 390 + .../hgOCR/include/ccmain/ltrresultiterator.h | 218 + 3rdparty/hgOCR/include/ccmain/mathfix.h | 38 + .../hgOCR/include/ccmain/mutableiterator.h | 64 + 3rdparty/hgOCR/include/ccmain/osdetect.cpp | 585 + 3rdparty/hgOCR/include/ccmain/osdetect.h | 138 + 3rdparty/hgOCR/include/ccmain/output.cpp | 450 + 3rdparty/hgOCR/include/ccmain/output.h | 33 + .../hgOCR/include/ccmain/pageiterator.cpp | 631 + 3rdparty/hgOCR/include/ccmain/pageiterator.h | 364 + 3rdparty/hgOCR/include/ccmain/pagesegmain.cpp | 434 + 3rdparty/hgOCR/include/ccmain/pagewalk.cpp | 43 + 3rdparty/hgOCR/include/ccmain/par_control.cpp | 69 + 3rdparty/hgOCR/include/ccmain/paragraphs.cpp | 2625 +++ 3rdparty/hgOCR/include/ccmain/paragraphs.h | 108 + .../include/ccmain/paragraphs_internal.h | 312 + 3rdparty/hgOCR/include/ccmain/paramsd.cpp | 370 + 3rdparty/hgOCR/include/ccmain/paramsd.h | 126 + 3rdparty/hgOCR/include/ccmain/pgedit.cpp | 1005 + 3rdparty/hgOCR/include/ccmain/pgedit.h | 87 + .../hgOCR/include/ccmain/recogtraining.cpp | 233 + 3rdparty/hgOCR/include/ccmain/reject.cpp | 798 + 3rdparty/hgOCR/include/ccmain/reject.h | 34 + .../hgOCR/include/ccmain/resultiterator.cpp | 683 + .../hgOCR/include/ccmain/resultiterator.h | 244 + 3rdparty/hgOCR/include/ccmain/superscript.cpp | 619 + 3rdparty/hgOCR/include/ccmain/tessbox.cpp | 82 + 3rdparty/hgOCR/include/ccmain/tessbox.h | 28 + 3rdparty/hgOCR/include/ccmain/tessedit.cpp | 501 + 3rdparty/hgOCR/include/ccmain/tessedit.h | 29 + .../ccmain/tesseract_cube_combiner.cpp | 305 + .../include/ccmain/tesseract_cube_combiner.h | 93 + .../hgOCR/include/ccmain/tesseractclass.cpp | 769 + .../hgOCR/include/ccmain/tesseractclass.h | 1220 + 3rdparty/hgOCR/include/ccmain/tessvars.cpp | 24 + 3rdparty/hgOCR/include/ccmain/tessvars.h | 27 + 3rdparty/hgOCR/include/ccmain/tfacepp.cpp | 330 + 3rdparty/hgOCR/include/ccmain/thresholder.cpp | 334 + 3rdparty/hgOCR/include/ccmain/thresholder.h | 189 + 3rdparty/hgOCR/include/ccmain/vcsversion.h | 2 + 3rdparty/hgOCR/include/ccmain/werdit.cpp | 59 + 3rdparty/hgOCR/include/ccmain/werdit.h | 27 + 3rdparty/hgOCR/include/ccstruct/blamer.cpp | 603 + 3rdparty/hgOCR/include/ccstruct/blamer.h | 333 + 3rdparty/hgOCR/include/ccstruct/blckerr.h | 29 + 3rdparty/hgOCR/include/ccstruct/blobbox.cpp | 1093 + 3rdparty/hgOCR/include/ccstruct/blobbox.h | 847 + 3rdparty/hgOCR/include/ccstruct/blobs.cpp | 1027 + 3rdparty/hgOCR/include/ccstruct/blobs.h | 449 + 3rdparty/hgOCR/include/ccstruct/blread.cpp | 71 + 3rdparty/hgOCR/include/ccstruct/blread.h | 33 + 3rdparty/hgOCR/include/ccstruct/boxread.cpp | 235 + 3rdparty/hgOCR/include/ccstruct/boxread.h | 85 + 3rdparty/hgOCR/include/ccstruct/boxword.cpp | 203 + 3rdparty/hgOCR/include/ccstruct/boxword.h | 101 + 3rdparty/hgOCR/include/ccstruct/ccstruct.cpp | 36 + 3rdparty/hgOCR/include/ccstruct/ccstruct.h | 44 + 3rdparty/hgOCR/include/ccstruct/coutln.cpp | 1075 + 3rdparty/hgOCR/include/ccstruct/coutln.h | 291 + 3rdparty/hgOCR/include/ccstruct/crakedge.h | 37 + .../hgOCR/include/ccstruct/detlinefit.cpp | 295 + 3rdparty/hgOCR/include/ccstruct/detlinefit.h | 164 + 3rdparty/hgOCR/include/ccstruct/dppoint.cpp | 98 + 3rdparty/hgOCR/include/ccstruct/dppoint.h | 102 + 3rdparty/hgOCR/include/ccstruct/fontinfo.cpp | 262 + 3rdparty/hgOCR/include/ccstruct/fontinfo.h | 191 + 3rdparty/hgOCR/include/ccstruct/genblob.cpp | 38 + 3rdparty/hgOCR/include/ccstruct/genblob.h | 27 + 3rdparty/hgOCR/include/ccstruct/hpdsizes.h | 17 + 3rdparty/hgOCR/include/ccstruct/imagedata.cpp | 699 + 3rdparty/hgOCR/include/ccstruct/imagedata.h | 379 + 3rdparty/hgOCR/include/ccstruct/ipoints.h | 484 + 3rdparty/hgOCR/include/ccstruct/linlsq.cpp | 259 + 3rdparty/hgOCR/include/ccstruct/linlsq.h | 134 + 3rdparty/hgOCR/include/ccstruct/matrix.cpp | 159 + 3rdparty/hgOCR/include/ccstruct/matrix.h | 635 + 3rdparty/hgOCR/include/ccstruct/mod128.cpp | 88 + 3rdparty/hgOCR/include/ccstruct/mod128.h | 84 + 3rdparty/hgOCR/include/ccstruct/normalis.cpp | 573 + 3rdparty/hgOCR/include/ccstruct/normalis.h | 317 + 3rdparty/hgOCR/include/ccstruct/ocrblock.cpp | 519 + 3rdparty/hgOCR/include/ccstruct/ocrblock.h | 237 + 3rdparty/hgOCR/include/ccstruct/ocrpara.cpp | 100 + 3rdparty/hgOCR/include/ccstruct/ocrpara.h | 191 + 3rdparty/hgOCR/include/ccstruct/ocrrow.cpp | 243 + 3rdparty/hgOCR/include/ccstruct/ocrrow.h | 165 + 3rdparty/hgOCR/include/ccstruct/otsuthr.cpp | 216 + 3rdparty/hgOCR/include/ccstruct/otsuthr.h | 56 + 3rdparty/hgOCR/include/ccstruct/pageres.cpp | 1690 ++ 3rdparty/hgOCR/include/ccstruct/pageres.h | 776 + .../ccstruct/params_training_featdef.cpp | 40 + .../ccstruct/params_training_featdef.h | 149 + 3rdparty/hgOCR/include/ccstruct/pdblock.cpp | 378 + 3rdparty/hgOCR/include/ccstruct/pdblock.h | 175 + 3rdparty/hgOCR/include/ccstruct/points.cpp | 145 + 3rdparty/hgOCR/include/ccstruct/points.h | 323 + 3rdparty/hgOCR/include/ccstruct/polyaprx.cpp | 584 + 3rdparty/hgOCR/include/ccstruct/polyaprx.h | 44 + 3rdparty/hgOCR/include/ccstruct/polyblk.cpp | 421 + 3rdparty/hgOCR/include/ccstruct/polyblk.h | 113 + .../hgOCR/include/ccstruct/publictypes.cpp | 40 + 3rdparty/hgOCR/include/ccstruct/publictypes.h | 271 + 3rdparty/hgOCR/include/ccstruct/quadlsq.cpp | 143 + 3rdparty/hgOCR/include/ccstruct/quadlsq.h | 67 + 3rdparty/hgOCR/include/ccstruct/quadratc.h | 63 + 3rdparty/hgOCR/include/ccstruct/quspline.cpp | 425 + 3rdparty/hgOCR/include/ccstruct/quspline.h | 99 + 3rdparty/hgOCR/include/ccstruct/ratngs.cpp | 837 + 3rdparty/hgOCR/include/ccstruct/ratngs.h | 643 + 3rdparty/hgOCR/include/ccstruct/rect.cpp | 263 + 3rdparty/hgOCR/include/ccstruct/rect.h | 484 + 3rdparty/hgOCR/include/ccstruct/rejctmap.cpp | 521 + 3rdparty/hgOCR/include/ccstruct/rejctmap.h | 276 + 3rdparty/hgOCR/include/ccstruct/seam.cpp | 280 + 3rdparty/hgOCR/include/ccstruct/seam.h | 203 + 3rdparty/hgOCR/include/ccstruct/split.cpp | 330 + 3rdparty/hgOCR/include/ccstruct/split.h | 120 + 3rdparty/hgOCR/include/ccstruct/statistc.cpp | 782 + 3rdparty/hgOCR/include/ccstruct/statistc.h | 169 + 3rdparty/hgOCR/include/ccstruct/stepblob.cpp | 547 + 3rdparty/hgOCR/include/ccstruct/stepblob.h | 131 + 3rdparty/hgOCR/include/ccstruct/vecfuncs.cpp | 63 + 3rdparty/hgOCR/include/ccstruct/vecfuncs.h | 78 + 3rdparty/hgOCR/include/ccstruct/werd.cpp | 600 + 3rdparty/hgOCR/include/ccstruct/werd.h | 199 + 3rdparty/hgOCR/include/ccutil/ambigs.cpp | 398 + 3rdparty/hgOCR/include/ccutil/ambigs.h | 229 + 3rdparty/hgOCR/include/ccutil/basedir.cpp | 45 + 3rdparty/hgOCR/include/ccutil/basedir.h | 31 + 3rdparty/hgOCR/include/ccutil/bits16.cpp | 29 + 3rdparty/hgOCR/include/ccutil/bits16.h | 61 + 3rdparty/hgOCR/include/ccutil/bitvector.cpp | 269 + 3rdparty/hgOCR/include/ccutil/bitvector.h | 143 + 3rdparty/hgOCR/include/ccutil/ccutil.cpp | 67 + 3rdparty/hgOCR/include/ccutil/ccutil.h | 97 + 3rdparty/hgOCR/include/ccutil/clst.cpp | 509 + 3rdparty/hgOCR/include/ccutil/clst.h | 931 + 3rdparty/hgOCR/include/ccutil/doubleptr.h | 93 + 3rdparty/hgOCR/include/ccutil/elst.cpp | 457 + 3rdparty/hgOCR/include/ccutil/elst.h | 988 + 3rdparty/hgOCR/include/ccutil/elst2.cpp | 482 + 3rdparty/hgOCR/include/ccutil/elst2.h | 989 + 3rdparty/hgOCR/include/ccutil/errcode.cpp | 91 + 3rdparty/hgOCR/include/ccutil/errcode.h | 103 + 3rdparty/hgOCR/include/ccutil/fileerr.h | 34 + 3rdparty/hgOCR/include/ccutil/genericheap.h | 237 + 3rdparty/hgOCR/include/ccutil/genericvector.h | 1109 + .../hgOCR/include/ccutil/gettimeofday.cpp | 32 + 3rdparty/hgOCR/include/ccutil/gettimeofday.h | 31 + 3rdparty/hgOCR/include/ccutil/globaloc.cpp | 94 + 3rdparty/hgOCR/include/ccutil/globaloc.h | 39 + 3rdparty/hgOCR/include/ccutil/hashfn.h | 80 + 3rdparty/hgOCR/include/ccutil/helpers.h | 203 + 3rdparty/hgOCR/include/ccutil/host.h | 82 + .../hgOCR/include/ccutil/indexmapbidi.cpp | 250 + 3rdparty/hgOCR/include/ccutil/indexmapbidi.h | 180 + 3rdparty/hgOCR/include/ccutil/kdpair.h | 189 + 3rdparty/hgOCR/include/ccutil/lsterr.h | 43 + 3rdparty/hgOCR/include/ccutil/mainblk.cpp | 110 + 3rdparty/hgOCR/include/ccutil/memry.cpp | 61 + 3rdparty/hgOCR/include/ccutil/memry.h | 43 + 3rdparty/hgOCR/include/ccutil/ndminx.h | 31 + 3rdparty/hgOCR/include/ccutil/nwmain.h | 175 + 3rdparty/hgOCR/include/ccutil/object_cache.h | 125 + 3rdparty/hgOCR/include/ccutil/ocrclass.h | 167 + 3rdparty/hgOCR/include/ccutil/params.cpp | 224 + 3rdparty/hgOCR/include/ccutil/params.h | 325 + 3rdparty/hgOCR/include/ccutil/platform.h | 94 + 3rdparty/hgOCR/include/ccutil/qrsequence.h | 80 + 3rdparty/hgOCR/include/ccutil/scanutils.cpp | 579 + 3rdparty/hgOCR/include/ccutil/scanutils.h | 67 + 3rdparty/hgOCR/include/ccutil/serialis.cpp | 145 + 3rdparty/hgOCR/include/ccutil/serialis.h | 99 + 3rdparty/hgOCR/include/ccutil/sorthelper.h | 108 + 3rdparty/hgOCR/include/ccutil/stderr.h | 26 + 3rdparty/hgOCR/include/ccutil/strngs.cpp | 510 + 3rdparty/hgOCR/include/ccutil/strngs.h | 174 + 3rdparty/hgOCR/include/ccutil/tesscallback.h | 9721 ++++++++ .../hgOCR/include/ccutil/tessdatamanager.cpp | 280 + .../hgOCR/include/ccutil/tessdatamanager.h | 299 + 3rdparty/hgOCR/include/ccutil/tprintf.cpp | 71 + 3rdparty/hgOCR/include/ccutil/tprintf.h | 36 + 3rdparty/hgOCR/include/ccutil/unichar.cpp | 225 + 3rdparty/hgOCR/include/ccutil/unichar.h | 165 + 3rdparty/hgOCR/include/ccutil/unicharmap.cpp | 172 + 3rdparty/hgOCR/include/ccutil/unicharmap.h | 82 + 3rdparty/hgOCR/include/ccutil/unicharset.cpp | 1086 + 3rdparty/hgOCR/include/ccutil/unicharset.h | 985 + 3rdparty/hgOCR/include/ccutil/unicity_table.h | 208 + 3rdparty/hgOCR/include/ccutil/unicodes.cpp | 57 + 3rdparty/hgOCR/include/ccutil/unicodes.h | 39 + .../hgOCR/include/ccutil/universalambigs.cpp | 19021 ++++++++++++++++ .../hgOCR/include/ccutil/universalambigs.h | 26 + 3rdparty/hgOCR/leptonica/adaptmap.c | 2947 +++ 3rdparty/hgOCR/leptonica/affine.c | 1622 ++ 3rdparty/hgOCR/leptonica/affinecompose.c | 662 + 3rdparty/hgOCR/leptonica/allheaders.h | 2741 +++ 3rdparty/hgOCR/leptonica/alltypes.h | 66 + 3rdparty/hgOCR/leptonica/array.h | 158 + 3rdparty/hgOCR/leptonica/arrayaccess.c | 364 + 3rdparty/hgOCR/leptonica/arrayaccess.h | 270 + 3rdparty/hgOCR/leptonica/bardecode.c | 1033 + 3rdparty/hgOCR/leptonica/baseline.c | 596 + 3rdparty/hgOCR/leptonica/bbuffer.c | 482 + 3rdparty/hgOCR/leptonica/bbuffer.h | 60 + 3rdparty/hgOCR/leptonica/bilateral.c | 810 + 3rdparty/hgOCR/leptonica/bilateral.h | 136 + 3rdparty/hgOCR/leptonica/bilinear.c | 910 + 3rdparty/hgOCR/leptonica/binarize.c | 1013 + 3rdparty/hgOCR/leptonica/binexpand.c | 303 + 3rdparty/hgOCR/leptonica/binreduce.c | 407 + 3rdparty/hgOCR/leptonica/blend.c | 2293 ++ 3rdparty/hgOCR/leptonica/bmf.c | 874 + 3rdparty/hgOCR/leptonica/bmf.h | 64 + 3rdparty/hgOCR/leptonica/bmfdata.h | 636 + 3rdparty/hgOCR/leptonica/bmp.h | 124 + 3rdparty/hgOCR/leptonica/bmpio.c | 602 + 3rdparty/hgOCR/leptonica/bmpiostub.c | 68 + 3rdparty/hgOCR/leptonica/bootnumgen1.c | 304 + 3rdparty/hgOCR/leptonica/bootnumgen2.c | 287 + 3rdparty/hgOCR/leptonica/bootnumgen3.c | 364 + 3rdparty/hgOCR/leptonica/bootnumgen4.c | 819 + 3rdparty/hgOCR/leptonica/boxbasic.c | 2352 ++ 3rdparty/hgOCR/leptonica/boxfunc1.c | 2733 +++ 3rdparty/hgOCR/leptonica/boxfunc2.c | 1928 ++ 3rdparty/hgOCR/leptonica/boxfunc3.c | 1626 ++ 3rdparty/hgOCR/leptonica/boxfunc4.c | 1423 ++ 3rdparty/hgOCR/leptonica/boxfunc5.c | 2192 ++ 3rdparty/hgOCR/leptonica/bytearray.c | 637 + 3rdparty/hgOCR/leptonica/ccbord.c | 2617 +++ 3rdparty/hgOCR/leptonica/ccbord.h | 121 + 3rdparty/hgOCR/leptonica/ccthin.c | 472 + 3rdparty/hgOCR/leptonica/classapp.c | 1048 + 3rdparty/hgOCR/leptonica/colorcontent.c | 1891 ++ 3rdparty/hgOCR/leptonica/coloring.c | 1046 + 3rdparty/hgOCR/leptonica/colormap.c | 2303 ++ 3rdparty/hgOCR/leptonica/colormorph.c | 125 + 3rdparty/hgOCR/leptonica/colorquant1.c | 4155 ++++ 3rdparty/hgOCR/leptonica/colorquant2.c | 1674 ++ 3rdparty/hgOCR/leptonica/colorseg.c | 654 + 3rdparty/hgOCR/leptonica/colorspace.c | 2414 ++ 3rdparty/hgOCR/leptonica/compare.c | 3604 +++ 3rdparty/hgOCR/leptonica/config_auto.h | 9 + 3rdparty/hgOCR/leptonica/conncomp.c | 1242 + 3rdparty/hgOCR/leptonica/convertfiles.c | 146 + 3rdparty/hgOCR/leptonica/convolve.c | 2576 +++ 3rdparty/hgOCR/leptonica/correlscore.c | 879 + 3rdparty/hgOCR/leptonica/dewarp.h | 191 + 3rdparty/hgOCR/leptonica/dewarp1.c | 1697 ++ 3rdparty/hgOCR/leptonica/dewarp2.c | 1912 ++ 3rdparty/hgOCR/leptonica/dewarp3.c | 1012 + 3rdparty/hgOCR/leptonica/dewarp4.c | 1172 + 3rdparty/hgOCR/leptonica/dnabasic.c | 1682 ++ 3rdparty/hgOCR/leptonica/dnafunc1.c | 404 + 3rdparty/hgOCR/leptonica/dnahash.c | 589 + 3rdparty/hgOCR/leptonica/dwacomb.2.c | 295 + 3rdparty/hgOCR/leptonica/dwacomblow.2.c | 4966 ++++ 3rdparty/hgOCR/leptonica/edge.c | 644 + 3rdparty/hgOCR/leptonica/encoding.c | 649 + 3rdparty/hgOCR/leptonica/endianness.h | 11 + 3rdparty/hgOCR/leptonica/enhance.c | 2353 ++ 3rdparty/hgOCR/leptonica/environ.h | 554 + 3rdparty/hgOCR/leptonica/fhmtauto.c | 817 + 3rdparty/hgOCR/leptonica/fhmtgen.1.c | 177 + 3rdparty/hgOCR/leptonica/fhmtgenlow.1.c | 445 + 3rdparty/hgOCR/leptonica/finditalic.c | 239 + 3rdparty/hgOCR/leptonica/flipdetect.c | 1130 + 3rdparty/hgOCR/leptonica/fliphmtgen.c | 352 + 3rdparty/hgOCR/leptonica/fmorphauto.c | 874 + 3rdparty/hgOCR/leptonica/fmorphgen.1.c | 277 + 3rdparty/hgOCR/leptonica/fmorphgenlow.1.c | 5862 +++++ 3rdparty/hgOCR/leptonica/fpix1.c | 2339 ++ 3rdparty/hgOCR/leptonica/fpix2.c | 2467 ++ 3rdparty/hgOCR/leptonica/gifio.c | 675 + 3rdparty/hgOCR/leptonica/gifiostub.c | 72 + 3rdparty/hgOCR/leptonica/gplot.c | 957 + 3rdparty/hgOCR/leptonica/gplot.h | 95 + 3rdparty/hgOCR/leptonica/graphics.c | 2900 +++ 3rdparty/hgOCR/leptonica/graymorph.c | 1372 ++ 3rdparty/hgOCR/leptonica/grayquant.c | 2908 +++ 3rdparty/hgOCR/leptonica/heap.c | 545 + 3rdparty/hgOCR/leptonica/heap.h | 87 + 3rdparty/hgOCR/leptonica/imageio.h | 238 + 3rdparty/hgOCR/leptonica/include/crc32.h | 441 + 3rdparty/hgOCR/leptonica/include/deflate.h | 349 + 3rdparty/hgOCR/leptonica/include/gzguts.h | 218 + 3rdparty/hgOCR/leptonica/include/inffast.h | 11 + 3rdparty/hgOCR/leptonica/include/inffixed.h | 94 + 3rdparty/hgOCR/leptonica/include/inflate.h | 125 + 3rdparty/hgOCR/leptonica/include/inftrees.h | 62 + 3rdparty/hgOCR/leptonica/include/trees.h | 128 + 3rdparty/hgOCR/leptonica/include/zconf.h | 534 + 3rdparty/hgOCR/leptonica/include/zlib.h | 1912 ++ 3rdparty/hgOCR/leptonica/include/zutil.h | 271 + 3rdparty/hgOCR/leptonica/jbclass.c | 2576 +++ 3rdparty/hgOCR/leptonica/jbclass.h | 142 + 3rdparty/hgOCR/leptonica/jp2kheader.c | 312 + 3rdparty/hgOCR/leptonica/jp2kheaderstub.c | 71 + 3rdparty/hgOCR/leptonica/jp2kio.c | 949 + 3rdparty/hgOCR/leptonica/jp2kiostub.c | 98 + 3rdparty/hgOCR/leptonica/jpegio.c | 1321 ++ 3rdparty/hgOCR/leptonica/jpegiostub.c | 151 + 3rdparty/hgOCR/leptonica/kernel.c | 1284 ++ 3rdparty/hgOCR/leptonica/leptwin.c | 368 + 3rdparty/hgOCR/leptonica/leptwin.h | 45 + 3rdparty/hgOCR/leptonica/libversions.c | 204 + 3rdparty/hgOCR/leptonica/list.c | 812 + 3rdparty/hgOCR/leptonica/list.h | 90 + 3rdparty/hgOCR/leptonica/map.c | 260 + 3rdparty/hgOCR/leptonica/maze.c | 906 + 3rdparty/hgOCR/leptonica/morph.c | 1822 ++ 3rdparty/hgOCR/leptonica/morph.h | 248 + 3rdparty/hgOCR/leptonica/morphapp.c | 1633 ++ 3rdparty/hgOCR/leptonica/morphdwa.c | 1596 ++ 3rdparty/hgOCR/leptonica/morphseq.c | 1244 + 3rdparty/hgOCR/leptonica/numabasic.c | 2023 ++ 3rdparty/hgOCR/leptonica/numafunc1.c | 3488 +++ 3rdparty/hgOCR/leptonica/numafunc2.c | 3139 +++ 3rdparty/hgOCR/leptonica/pageseg.c | 2360 ++ 3rdparty/hgOCR/leptonica/paintcmap.c | 761 + 3rdparty/hgOCR/leptonica/parseprotos.c | 975 + 3rdparty/hgOCR/leptonica/partify.c | 312 + 3rdparty/hgOCR/leptonica/partition.c | 659 + 3rdparty/hgOCR/leptonica/pdfio1.c | 2252 ++ 3rdparty/hgOCR/leptonica/pdfio1stub.c | 305 + 3rdparty/hgOCR/leptonica/pdfio2.c | 2560 +++ 3rdparty/hgOCR/leptonica/pdfio2stub.c | 168 + 3rdparty/hgOCR/leptonica/pix.h | 1341 ++ 3rdparty/hgOCR/leptonica/pix1.c | 1877 ++ 3rdparty/hgOCR/leptonica/pix2.c | 3390 +++ 3rdparty/hgOCR/leptonica/pix3.c | 3507 +++ 3rdparty/hgOCR/leptonica/pix4.c | 3437 +++ 3rdparty/hgOCR/leptonica/pix5.c | 3153 +++ 3rdparty/hgOCR/leptonica/pixabasic.c | 3243 +++ 3rdparty/hgOCR/leptonica/pixacc.c | 354 + 3rdparty/hgOCR/leptonica/pixafunc1.c | 2972 +++ 3rdparty/hgOCR/leptonica/pixafunc2.c | 2768 +++ 3rdparty/hgOCR/leptonica/pixalloc.c | 532 + 3rdparty/hgOCR/leptonica/pixarith.c | 1531 ++ 3rdparty/hgOCR/leptonica/pixcomp.c | 2452 ++ 3rdparty/hgOCR/leptonica/pixconv.c | 4260 ++++ 3rdparty/hgOCR/leptonica/pixlabel.c | 633 + 3rdparty/hgOCR/leptonica/pixtiling.c | 421 + 3rdparty/hgOCR/leptonica/pngio.c | 2119 ++ 3rdparty/hgOCR/leptonica/pngiostub.c | 143 + 3rdparty/hgOCR/leptonica/pnmio.c | 1474 ++ 3rdparty/hgOCR/leptonica/pnmiostub.c | 116 + 3rdparty/hgOCR/leptonica/projective.c | 923 + 3rdparty/hgOCR/leptonica/psio1.c | 1073 + 3rdparty/hgOCR/leptonica/psio1stub.c | 133 + 3rdparty/hgOCR/leptonica/psio2.c | 2041 ++ 3rdparty/hgOCR/leptonica/psio2stub.c | 156 + 3rdparty/hgOCR/leptonica/ptabasic.c | 1551 ++ 3rdparty/hgOCR/leptonica/ptafunc1.c | 2665 +++ 3rdparty/hgOCR/leptonica/ptafunc2.c | 756 + 3rdparty/hgOCR/leptonica/ptra.c | 1006 + 3rdparty/hgOCR/leptonica/ptra.h | 95 + 3rdparty/hgOCR/leptonica/quadtree.c | 697 + 3rdparty/hgOCR/leptonica/queue.c | 323 + 3rdparty/hgOCR/leptonica/queue.h | 77 + 3rdparty/hgOCR/leptonica/rank.c | 540 + 3rdparty/hgOCR/leptonica/rbtree.c | 899 + 3rdparty/hgOCR/leptonica/rbtree.h | 91 + 3rdparty/hgOCR/leptonica/readbarcode.c | 1494 ++ 3rdparty/hgOCR/leptonica/readbarcode.h | 239 + 3rdparty/hgOCR/leptonica/readfile.c | 1627 ++ 3rdparty/hgOCR/leptonica/recog.h | 264 + 3rdparty/hgOCR/leptonica/recogbasic.c | 1228 + 3rdparty/hgOCR/leptonica/recogdid.c | 1074 + 3rdparty/hgOCR/leptonica/recogident.c | 1882 ++ 3rdparty/hgOCR/leptonica/recogtrain.c | 2478 ++ 3rdparty/hgOCR/leptonica/regutils.c | 882 + 3rdparty/hgOCR/leptonica/regutils.h | 141 + 3rdparty/hgOCR/leptonica/rop.c | 516 + 3rdparty/hgOCR/leptonica/roplow.c | 2479 ++ 3rdparty/hgOCR/leptonica/rotate.c | 596 + 3rdparty/hgOCR/leptonica/rotateam.c | 1128 + 3rdparty/hgOCR/leptonica/rotateorth.c | 712 + 3rdparty/hgOCR/leptonica/rotateshear.c | 494 + 3rdparty/hgOCR/leptonica/runlength.c | 811 + 3rdparty/hgOCR/leptonica/sarray1.c | 1965 ++ 3rdparty/hgOCR/leptonica/sarray2.c | 726 + 3rdparty/hgOCR/leptonica/scale1.c | 3730 +++ 3rdparty/hgOCR/leptonica/scale2.c | 2320 ++ 3rdparty/hgOCR/leptonica/seedfill.c | 3454 +++ 3rdparty/hgOCR/leptonica/sel1.c | 2376 ++ 3rdparty/hgOCR/leptonica/sel2.c | 845 + 3rdparty/hgOCR/leptonica/selgen.c | 984 + 3rdparty/hgOCR/leptonica/shear.c | 850 + 3rdparty/hgOCR/leptonica/skew.c | 1243 + 3rdparty/hgOCR/leptonica/spixio.c | 493 + 3rdparty/hgOCR/leptonica/stack.c | 289 + 3rdparty/hgOCR/leptonica/stack.h | 70 + 3rdparty/hgOCR/leptonica/stringcode.c | 804 + 3rdparty/hgOCR/leptonica/stringcode.h | 61 + 3rdparty/hgOCR/leptonica/strokes.c | 435 + 3rdparty/hgOCR/leptonica/sudoku.c | 881 + 3rdparty/hgOCR/leptonica/sudoku.h | 77 + 3rdparty/hgOCR/leptonica/textops.c | 1125 + 3rdparty/hgOCR/leptonica/tiffio.c | 2843 +++ 3rdparty/hgOCR/leptonica/tiffiostub.c | 242 + 3rdparty/hgOCR/leptonica/utils1.c | 1266 + 3rdparty/hgOCR/leptonica/utils2.c | 3364 +++ 3rdparty/hgOCR/leptonica/warper.c | 1390 ++ 3rdparty/hgOCR/leptonica/watershed.c | 1130 + 3rdparty/hgOCR/leptonica/watershed.h | 64 + 3rdparty/hgOCR/leptonica/webpanimio.c | 273 + 3rdparty/hgOCR/leptonica/webpanimiostub.c | 71 + 3rdparty/hgOCR/leptonica/webpio.c | 417 + 3rdparty/hgOCR/leptonica/webpiostub.c | 99 + 3rdparty/hgOCR/leptonica/writefile.c | 1409 ++ 3rdparty/hgOCR/leptonica/zlibmem.c | 282 + 3rdparty/hgOCR/leptonica/zlibmemstub.c | 59 + 3rdparty/hgOCR/x86/staticlib/debug/HG_OCR.lib | Bin 0 -> 42146502 bytes .../hgOCR/x86/staticlib/debug/leptonica.lib | Bin 0 -> 7319276 bytes 3rdparty/hgOCR/x86/staticlib/debug/zlib.lib | Bin 0 -> 226576 bytes .../hgOCR/x86/staticlib/release/HG_OCR.lib | Bin 0 -> 9858108 bytes .../hgOCR/x86/staticlib/release/leptonica.lib | Bin 0 -> 5033188 bytes 3rdparty/hgOCR/x86/staticlib/release/zlib.lib | Bin 0 -> 111802 bytes huagao/CMakeLists.txt | 2 +- huagao/Device/GScanO1003399.cpp | 13 +- huagao/Device/GScanO1003399.h | 2 - huagao/Device/GScanO400.cpp | 138 +- huagao/Device/ImageMatQueue.cpp | 52 +- huagao/ImageProcess/ImageProcess_Public.cpp | 7 +- huagao/hg_ocr.cpp | 511 + huagao/hg_ocr.h | 43 + huagao/huagaods.cpp | 136 +- huagao/huagaotwds.rc | Bin 48940 -> 48940 bytes huagao/stdafx.h | Bin 18276 -> 18276 bytes 457 files changed, 350567 insertions(+), 181 deletions(-) create mode 100644 3rdparty/hgOCR/include/api/StopWatch.h create mode 100644 3rdparty/hgOCR/include/api/apitypes.h create mode 100644 3rdparty/hgOCR/include/api/baseapi.cpp create mode 100644 3rdparty/hgOCR/include/api/baseapi.h create mode 100644 3rdparty/hgOCR/include/api/capi.cpp create mode 100644 3rdparty/hgOCR/include/api/capi.h create mode 100644 3rdparty/hgOCR/include/api/config_auto.h create mode 100644 3rdparty/hgOCR/include/api/pdfrenderer.cpp create mode 100644 3rdparty/hgOCR/include/api/renderer.cpp create mode 100644 3rdparty/hgOCR/include/api/renderer.h create mode 100644 3rdparty/hgOCR/include/api/tesseractmain.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/adaptions.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/applybox.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/control.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/control.h create mode 100644 3rdparty/hgOCR/include/ccmain/cube_control.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/cube_reco_context.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/cube_reco_context.h create mode 100644 3rdparty/hgOCR/include/ccmain/cubeclassifier.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/cubeclassifier.h create mode 100644 3rdparty/hgOCR/include/ccmain/docqual.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/docqual.h create mode 100644 3rdparty/hgOCR/include/ccmain/equationdetect.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/equationdetect.h create mode 100644 3rdparty/hgOCR/include/ccmain/fixspace.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/fixspace.h create mode 100644 3rdparty/hgOCR/include/ccmain/fixxht.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/ltrresultiterator.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/ltrresultiterator.h create mode 100644 3rdparty/hgOCR/include/ccmain/mathfix.h create mode 100644 3rdparty/hgOCR/include/ccmain/mutableiterator.h create mode 100644 3rdparty/hgOCR/include/ccmain/osdetect.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/osdetect.h create mode 100644 3rdparty/hgOCR/include/ccmain/output.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/output.h create mode 100644 3rdparty/hgOCR/include/ccmain/pageiterator.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/pageiterator.h create mode 100644 3rdparty/hgOCR/include/ccmain/pagesegmain.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/pagewalk.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/par_control.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/paragraphs.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/paragraphs.h create mode 100644 3rdparty/hgOCR/include/ccmain/paragraphs_internal.h create mode 100644 3rdparty/hgOCR/include/ccmain/paramsd.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/paramsd.h create mode 100644 3rdparty/hgOCR/include/ccmain/pgedit.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/pgedit.h create mode 100644 3rdparty/hgOCR/include/ccmain/recogtraining.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/reject.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/reject.h create mode 100644 3rdparty/hgOCR/include/ccmain/resultiterator.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/resultiterator.h create mode 100644 3rdparty/hgOCR/include/ccmain/superscript.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tessbox.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tessbox.h create mode 100644 3rdparty/hgOCR/include/ccmain/tessedit.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tessedit.h create mode 100644 3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.h create mode 100644 3rdparty/hgOCR/include/ccmain/tesseractclass.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tesseractclass.h create mode 100644 3rdparty/hgOCR/include/ccmain/tessvars.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/tessvars.h create mode 100644 3rdparty/hgOCR/include/ccmain/tfacepp.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/thresholder.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/thresholder.h create mode 100644 3rdparty/hgOCR/include/ccmain/vcsversion.h create mode 100644 3rdparty/hgOCR/include/ccmain/werdit.cpp create mode 100644 3rdparty/hgOCR/include/ccmain/werdit.h create mode 100644 3rdparty/hgOCR/include/ccstruct/blamer.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/blamer.h create mode 100644 3rdparty/hgOCR/include/ccstruct/blckerr.h create mode 100644 3rdparty/hgOCR/include/ccstruct/blobbox.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/blobbox.h create mode 100644 3rdparty/hgOCR/include/ccstruct/blobs.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/blobs.h create mode 100644 3rdparty/hgOCR/include/ccstruct/blread.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/blread.h create mode 100644 3rdparty/hgOCR/include/ccstruct/boxread.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/boxread.h create mode 100644 3rdparty/hgOCR/include/ccstruct/boxword.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/boxword.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ccstruct.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/ccstruct.h create mode 100644 3rdparty/hgOCR/include/ccstruct/coutln.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/coutln.h create mode 100644 3rdparty/hgOCR/include/ccstruct/crakedge.h create mode 100644 3rdparty/hgOCR/include/ccstruct/detlinefit.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/detlinefit.h create mode 100644 3rdparty/hgOCR/include/ccstruct/dppoint.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/dppoint.h create mode 100644 3rdparty/hgOCR/include/ccstruct/fontinfo.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/fontinfo.h create mode 100644 3rdparty/hgOCR/include/ccstruct/genblob.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/genblob.h create mode 100644 3rdparty/hgOCR/include/ccstruct/hpdsizes.h create mode 100644 3rdparty/hgOCR/include/ccstruct/imagedata.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/imagedata.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ipoints.h create mode 100644 3rdparty/hgOCR/include/ccstruct/linlsq.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/linlsq.h create mode 100644 3rdparty/hgOCR/include/ccstruct/matrix.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/matrix.h create mode 100644 3rdparty/hgOCR/include/ccstruct/mod128.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/mod128.h create mode 100644 3rdparty/hgOCR/include/ccstruct/normalis.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/normalis.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrblock.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrblock.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrpara.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrpara.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrrow.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/ocrrow.h create mode 100644 3rdparty/hgOCR/include/ccstruct/otsuthr.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/otsuthr.h create mode 100644 3rdparty/hgOCR/include/ccstruct/pageres.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/pageres.h create mode 100644 3rdparty/hgOCR/include/ccstruct/params_training_featdef.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/params_training_featdef.h create mode 100644 3rdparty/hgOCR/include/ccstruct/pdblock.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/pdblock.h create mode 100644 3rdparty/hgOCR/include/ccstruct/points.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/points.h create mode 100644 3rdparty/hgOCR/include/ccstruct/polyaprx.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/polyaprx.h create mode 100644 3rdparty/hgOCR/include/ccstruct/polyblk.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/polyblk.h create mode 100644 3rdparty/hgOCR/include/ccstruct/publictypes.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/publictypes.h create mode 100644 3rdparty/hgOCR/include/ccstruct/quadlsq.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/quadlsq.h create mode 100644 3rdparty/hgOCR/include/ccstruct/quadratc.h create mode 100644 3rdparty/hgOCR/include/ccstruct/quspline.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/quspline.h create mode 100644 3rdparty/hgOCR/include/ccstruct/ratngs.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/ratngs.h create mode 100644 3rdparty/hgOCR/include/ccstruct/rect.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/rect.h create mode 100644 3rdparty/hgOCR/include/ccstruct/rejctmap.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/rejctmap.h create mode 100644 3rdparty/hgOCR/include/ccstruct/seam.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/seam.h create mode 100644 3rdparty/hgOCR/include/ccstruct/split.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/split.h create mode 100644 3rdparty/hgOCR/include/ccstruct/statistc.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/statistc.h create mode 100644 3rdparty/hgOCR/include/ccstruct/stepblob.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/stepblob.h create mode 100644 3rdparty/hgOCR/include/ccstruct/vecfuncs.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/vecfuncs.h create mode 100644 3rdparty/hgOCR/include/ccstruct/werd.cpp create mode 100644 3rdparty/hgOCR/include/ccstruct/werd.h create mode 100644 3rdparty/hgOCR/include/ccutil/ambigs.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/ambigs.h create mode 100644 3rdparty/hgOCR/include/ccutil/basedir.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/basedir.h create mode 100644 3rdparty/hgOCR/include/ccutil/bits16.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/bits16.h create mode 100644 3rdparty/hgOCR/include/ccutil/bitvector.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/bitvector.h create mode 100644 3rdparty/hgOCR/include/ccutil/ccutil.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/ccutil.h create mode 100644 3rdparty/hgOCR/include/ccutil/clst.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/clst.h create mode 100644 3rdparty/hgOCR/include/ccutil/doubleptr.h create mode 100644 3rdparty/hgOCR/include/ccutil/elst.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/elst.h create mode 100644 3rdparty/hgOCR/include/ccutil/elst2.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/elst2.h create mode 100644 3rdparty/hgOCR/include/ccutil/errcode.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/errcode.h create mode 100644 3rdparty/hgOCR/include/ccutil/fileerr.h create mode 100644 3rdparty/hgOCR/include/ccutil/genericheap.h create mode 100644 3rdparty/hgOCR/include/ccutil/genericvector.h create mode 100644 3rdparty/hgOCR/include/ccutil/gettimeofday.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/gettimeofday.h create mode 100644 3rdparty/hgOCR/include/ccutil/globaloc.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/globaloc.h create mode 100644 3rdparty/hgOCR/include/ccutil/hashfn.h create mode 100644 3rdparty/hgOCR/include/ccutil/helpers.h create mode 100644 3rdparty/hgOCR/include/ccutil/host.h create mode 100644 3rdparty/hgOCR/include/ccutil/indexmapbidi.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/indexmapbidi.h create mode 100644 3rdparty/hgOCR/include/ccutil/kdpair.h create mode 100644 3rdparty/hgOCR/include/ccutil/lsterr.h create mode 100644 3rdparty/hgOCR/include/ccutil/mainblk.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/memry.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/memry.h create mode 100644 3rdparty/hgOCR/include/ccutil/ndminx.h create mode 100644 3rdparty/hgOCR/include/ccutil/nwmain.h create mode 100644 3rdparty/hgOCR/include/ccutil/object_cache.h create mode 100644 3rdparty/hgOCR/include/ccutil/ocrclass.h create mode 100644 3rdparty/hgOCR/include/ccutil/params.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/params.h create mode 100644 3rdparty/hgOCR/include/ccutil/platform.h create mode 100644 3rdparty/hgOCR/include/ccutil/qrsequence.h create mode 100644 3rdparty/hgOCR/include/ccutil/scanutils.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/scanutils.h create mode 100644 3rdparty/hgOCR/include/ccutil/serialis.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/serialis.h create mode 100644 3rdparty/hgOCR/include/ccutil/sorthelper.h create mode 100644 3rdparty/hgOCR/include/ccutil/stderr.h create mode 100644 3rdparty/hgOCR/include/ccutil/strngs.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/strngs.h create mode 100644 3rdparty/hgOCR/include/ccutil/tesscallback.h create mode 100644 3rdparty/hgOCR/include/ccutil/tessdatamanager.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/tessdatamanager.h create mode 100644 3rdparty/hgOCR/include/ccutil/tprintf.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/tprintf.h create mode 100644 3rdparty/hgOCR/include/ccutil/unichar.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/unichar.h create mode 100644 3rdparty/hgOCR/include/ccutil/unicharmap.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/unicharmap.h create mode 100644 3rdparty/hgOCR/include/ccutil/unicharset.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/unicharset.h create mode 100644 3rdparty/hgOCR/include/ccutil/unicity_table.h create mode 100644 3rdparty/hgOCR/include/ccutil/unicodes.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/unicodes.h create mode 100644 3rdparty/hgOCR/include/ccutil/universalambigs.cpp create mode 100644 3rdparty/hgOCR/include/ccutil/universalambigs.h create mode 100644 3rdparty/hgOCR/leptonica/adaptmap.c create mode 100644 3rdparty/hgOCR/leptonica/affine.c create mode 100644 3rdparty/hgOCR/leptonica/affinecompose.c create mode 100644 3rdparty/hgOCR/leptonica/allheaders.h create mode 100644 3rdparty/hgOCR/leptonica/alltypes.h create mode 100644 3rdparty/hgOCR/leptonica/array.h create mode 100644 3rdparty/hgOCR/leptonica/arrayaccess.c create mode 100644 3rdparty/hgOCR/leptonica/arrayaccess.h create mode 100644 3rdparty/hgOCR/leptonica/bardecode.c create mode 100644 3rdparty/hgOCR/leptonica/baseline.c create mode 100644 3rdparty/hgOCR/leptonica/bbuffer.c create mode 100644 3rdparty/hgOCR/leptonica/bbuffer.h create mode 100644 3rdparty/hgOCR/leptonica/bilateral.c create mode 100644 3rdparty/hgOCR/leptonica/bilateral.h create mode 100644 3rdparty/hgOCR/leptonica/bilinear.c create mode 100644 3rdparty/hgOCR/leptonica/binarize.c create mode 100644 3rdparty/hgOCR/leptonica/binexpand.c create mode 100644 3rdparty/hgOCR/leptonica/binreduce.c create mode 100644 3rdparty/hgOCR/leptonica/blend.c create mode 100644 3rdparty/hgOCR/leptonica/bmf.c create mode 100644 3rdparty/hgOCR/leptonica/bmf.h create mode 100644 3rdparty/hgOCR/leptonica/bmfdata.h create mode 100644 3rdparty/hgOCR/leptonica/bmp.h create mode 100644 3rdparty/hgOCR/leptonica/bmpio.c create mode 100644 3rdparty/hgOCR/leptonica/bmpiostub.c create mode 100644 3rdparty/hgOCR/leptonica/bootnumgen1.c create mode 100644 3rdparty/hgOCR/leptonica/bootnumgen2.c create mode 100644 3rdparty/hgOCR/leptonica/bootnumgen3.c create mode 100644 3rdparty/hgOCR/leptonica/bootnumgen4.c create mode 100644 3rdparty/hgOCR/leptonica/boxbasic.c create mode 100644 3rdparty/hgOCR/leptonica/boxfunc1.c create mode 100644 3rdparty/hgOCR/leptonica/boxfunc2.c create mode 100644 3rdparty/hgOCR/leptonica/boxfunc3.c create mode 100644 3rdparty/hgOCR/leptonica/boxfunc4.c create mode 100644 3rdparty/hgOCR/leptonica/boxfunc5.c create mode 100644 3rdparty/hgOCR/leptonica/bytearray.c create mode 100644 3rdparty/hgOCR/leptonica/ccbord.c create mode 100644 3rdparty/hgOCR/leptonica/ccbord.h create mode 100644 3rdparty/hgOCR/leptonica/ccthin.c create mode 100644 3rdparty/hgOCR/leptonica/classapp.c create mode 100644 3rdparty/hgOCR/leptonica/colorcontent.c create mode 100644 3rdparty/hgOCR/leptonica/coloring.c create mode 100644 3rdparty/hgOCR/leptonica/colormap.c create mode 100644 3rdparty/hgOCR/leptonica/colormorph.c create mode 100644 3rdparty/hgOCR/leptonica/colorquant1.c create mode 100644 3rdparty/hgOCR/leptonica/colorquant2.c create mode 100644 3rdparty/hgOCR/leptonica/colorseg.c create mode 100644 3rdparty/hgOCR/leptonica/colorspace.c create mode 100644 3rdparty/hgOCR/leptonica/compare.c create mode 100644 3rdparty/hgOCR/leptonica/config_auto.h create mode 100644 3rdparty/hgOCR/leptonica/conncomp.c create mode 100644 3rdparty/hgOCR/leptonica/convertfiles.c create mode 100644 3rdparty/hgOCR/leptonica/convolve.c create mode 100644 3rdparty/hgOCR/leptonica/correlscore.c create mode 100644 3rdparty/hgOCR/leptonica/dewarp.h create mode 100644 3rdparty/hgOCR/leptonica/dewarp1.c create mode 100644 3rdparty/hgOCR/leptonica/dewarp2.c create mode 100644 3rdparty/hgOCR/leptonica/dewarp3.c create mode 100644 3rdparty/hgOCR/leptonica/dewarp4.c create mode 100644 3rdparty/hgOCR/leptonica/dnabasic.c create mode 100644 3rdparty/hgOCR/leptonica/dnafunc1.c create mode 100644 3rdparty/hgOCR/leptonica/dnahash.c create mode 100644 3rdparty/hgOCR/leptonica/dwacomb.2.c create mode 100644 3rdparty/hgOCR/leptonica/dwacomblow.2.c create mode 100644 3rdparty/hgOCR/leptonica/edge.c create mode 100644 3rdparty/hgOCR/leptonica/encoding.c create mode 100644 3rdparty/hgOCR/leptonica/endianness.h create mode 100644 3rdparty/hgOCR/leptonica/enhance.c create mode 100644 3rdparty/hgOCR/leptonica/environ.h create mode 100644 3rdparty/hgOCR/leptonica/fhmtauto.c create mode 100644 3rdparty/hgOCR/leptonica/fhmtgen.1.c create mode 100644 3rdparty/hgOCR/leptonica/fhmtgenlow.1.c create mode 100644 3rdparty/hgOCR/leptonica/finditalic.c create mode 100644 3rdparty/hgOCR/leptonica/flipdetect.c create mode 100644 3rdparty/hgOCR/leptonica/fliphmtgen.c create mode 100644 3rdparty/hgOCR/leptonica/fmorphauto.c create mode 100644 3rdparty/hgOCR/leptonica/fmorphgen.1.c create mode 100644 3rdparty/hgOCR/leptonica/fmorphgenlow.1.c create mode 100644 3rdparty/hgOCR/leptonica/fpix1.c create mode 100644 3rdparty/hgOCR/leptonica/fpix2.c create mode 100644 3rdparty/hgOCR/leptonica/gifio.c create mode 100644 3rdparty/hgOCR/leptonica/gifiostub.c create mode 100644 3rdparty/hgOCR/leptonica/gplot.c create mode 100644 3rdparty/hgOCR/leptonica/gplot.h create mode 100644 3rdparty/hgOCR/leptonica/graphics.c create mode 100644 3rdparty/hgOCR/leptonica/graymorph.c create mode 100644 3rdparty/hgOCR/leptonica/grayquant.c create mode 100644 3rdparty/hgOCR/leptonica/heap.c create mode 100644 3rdparty/hgOCR/leptonica/heap.h create mode 100644 3rdparty/hgOCR/leptonica/imageio.h create mode 100644 3rdparty/hgOCR/leptonica/include/crc32.h create mode 100644 3rdparty/hgOCR/leptonica/include/deflate.h create mode 100644 3rdparty/hgOCR/leptonica/include/gzguts.h create mode 100644 3rdparty/hgOCR/leptonica/include/inffast.h create mode 100644 3rdparty/hgOCR/leptonica/include/inffixed.h create mode 100644 3rdparty/hgOCR/leptonica/include/inflate.h create mode 100644 3rdparty/hgOCR/leptonica/include/inftrees.h create mode 100644 3rdparty/hgOCR/leptonica/include/trees.h create mode 100644 3rdparty/hgOCR/leptonica/include/zconf.h create mode 100644 3rdparty/hgOCR/leptonica/include/zlib.h create mode 100644 3rdparty/hgOCR/leptonica/include/zutil.h create mode 100644 3rdparty/hgOCR/leptonica/jbclass.c create mode 100644 3rdparty/hgOCR/leptonica/jbclass.h create mode 100644 3rdparty/hgOCR/leptonica/jp2kheader.c create mode 100644 3rdparty/hgOCR/leptonica/jp2kheaderstub.c create mode 100644 3rdparty/hgOCR/leptonica/jp2kio.c create mode 100644 3rdparty/hgOCR/leptonica/jp2kiostub.c create mode 100644 3rdparty/hgOCR/leptonica/jpegio.c create mode 100644 3rdparty/hgOCR/leptonica/jpegiostub.c create mode 100644 3rdparty/hgOCR/leptonica/kernel.c create mode 100644 3rdparty/hgOCR/leptonica/leptwin.c create mode 100644 3rdparty/hgOCR/leptonica/leptwin.h create mode 100644 3rdparty/hgOCR/leptonica/libversions.c create mode 100644 3rdparty/hgOCR/leptonica/list.c create mode 100644 3rdparty/hgOCR/leptonica/list.h create mode 100644 3rdparty/hgOCR/leptonica/map.c create mode 100644 3rdparty/hgOCR/leptonica/maze.c create mode 100644 3rdparty/hgOCR/leptonica/morph.c create mode 100644 3rdparty/hgOCR/leptonica/morph.h create mode 100644 3rdparty/hgOCR/leptonica/morphapp.c create mode 100644 3rdparty/hgOCR/leptonica/morphdwa.c create mode 100644 3rdparty/hgOCR/leptonica/morphseq.c create mode 100644 3rdparty/hgOCR/leptonica/numabasic.c create mode 100644 3rdparty/hgOCR/leptonica/numafunc1.c create mode 100644 3rdparty/hgOCR/leptonica/numafunc2.c create mode 100644 3rdparty/hgOCR/leptonica/pageseg.c create mode 100644 3rdparty/hgOCR/leptonica/paintcmap.c create mode 100644 3rdparty/hgOCR/leptonica/parseprotos.c create mode 100644 3rdparty/hgOCR/leptonica/partify.c create mode 100644 3rdparty/hgOCR/leptonica/partition.c create mode 100644 3rdparty/hgOCR/leptonica/pdfio1.c create mode 100644 3rdparty/hgOCR/leptonica/pdfio1stub.c create mode 100644 3rdparty/hgOCR/leptonica/pdfio2.c create mode 100644 3rdparty/hgOCR/leptonica/pdfio2stub.c create mode 100644 3rdparty/hgOCR/leptonica/pix.h create mode 100644 3rdparty/hgOCR/leptonica/pix1.c create mode 100644 3rdparty/hgOCR/leptonica/pix2.c create mode 100644 3rdparty/hgOCR/leptonica/pix3.c create mode 100644 3rdparty/hgOCR/leptonica/pix4.c create mode 100644 3rdparty/hgOCR/leptonica/pix5.c create mode 100644 3rdparty/hgOCR/leptonica/pixabasic.c create mode 100644 3rdparty/hgOCR/leptonica/pixacc.c create mode 100644 3rdparty/hgOCR/leptonica/pixafunc1.c create mode 100644 3rdparty/hgOCR/leptonica/pixafunc2.c create mode 100644 3rdparty/hgOCR/leptonica/pixalloc.c create mode 100644 3rdparty/hgOCR/leptonica/pixarith.c create mode 100644 3rdparty/hgOCR/leptonica/pixcomp.c create mode 100644 3rdparty/hgOCR/leptonica/pixconv.c create mode 100644 3rdparty/hgOCR/leptonica/pixlabel.c create mode 100644 3rdparty/hgOCR/leptonica/pixtiling.c create mode 100644 3rdparty/hgOCR/leptonica/pngio.c create mode 100644 3rdparty/hgOCR/leptonica/pngiostub.c create mode 100644 3rdparty/hgOCR/leptonica/pnmio.c create mode 100644 3rdparty/hgOCR/leptonica/pnmiostub.c create mode 100644 3rdparty/hgOCR/leptonica/projective.c create mode 100644 3rdparty/hgOCR/leptonica/psio1.c create mode 100644 3rdparty/hgOCR/leptonica/psio1stub.c create mode 100644 3rdparty/hgOCR/leptonica/psio2.c create mode 100644 3rdparty/hgOCR/leptonica/psio2stub.c create mode 100644 3rdparty/hgOCR/leptonica/ptabasic.c create mode 100644 3rdparty/hgOCR/leptonica/ptafunc1.c create mode 100644 3rdparty/hgOCR/leptonica/ptafunc2.c create mode 100644 3rdparty/hgOCR/leptonica/ptra.c create mode 100644 3rdparty/hgOCR/leptonica/ptra.h create mode 100644 3rdparty/hgOCR/leptonica/quadtree.c create mode 100644 3rdparty/hgOCR/leptonica/queue.c create mode 100644 3rdparty/hgOCR/leptonica/queue.h create mode 100644 3rdparty/hgOCR/leptonica/rank.c create mode 100644 3rdparty/hgOCR/leptonica/rbtree.c create mode 100644 3rdparty/hgOCR/leptonica/rbtree.h create mode 100644 3rdparty/hgOCR/leptonica/readbarcode.c create mode 100644 3rdparty/hgOCR/leptonica/readbarcode.h create mode 100644 3rdparty/hgOCR/leptonica/readfile.c create mode 100644 3rdparty/hgOCR/leptonica/recog.h create mode 100644 3rdparty/hgOCR/leptonica/recogbasic.c create mode 100644 3rdparty/hgOCR/leptonica/recogdid.c create mode 100644 3rdparty/hgOCR/leptonica/recogident.c create mode 100644 3rdparty/hgOCR/leptonica/recogtrain.c create mode 100644 3rdparty/hgOCR/leptonica/regutils.c create mode 100644 3rdparty/hgOCR/leptonica/regutils.h create mode 100644 3rdparty/hgOCR/leptonica/rop.c create mode 100644 3rdparty/hgOCR/leptonica/roplow.c create mode 100644 3rdparty/hgOCR/leptonica/rotate.c create mode 100644 3rdparty/hgOCR/leptonica/rotateam.c create mode 100644 3rdparty/hgOCR/leptonica/rotateorth.c create mode 100644 3rdparty/hgOCR/leptonica/rotateshear.c create mode 100644 3rdparty/hgOCR/leptonica/runlength.c create mode 100644 3rdparty/hgOCR/leptonica/sarray1.c create mode 100644 3rdparty/hgOCR/leptonica/sarray2.c create mode 100644 3rdparty/hgOCR/leptonica/scale1.c create mode 100644 3rdparty/hgOCR/leptonica/scale2.c create mode 100644 3rdparty/hgOCR/leptonica/seedfill.c create mode 100644 3rdparty/hgOCR/leptonica/sel1.c create mode 100644 3rdparty/hgOCR/leptonica/sel2.c create mode 100644 3rdparty/hgOCR/leptonica/selgen.c create mode 100644 3rdparty/hgOCR/leptonica/shear.c create mode 100644 3rdparty/hgOCR/leptonica/skew.c create mode 100644 3rdparty/hgOCR/leptonica/spixio.c create mode 100644 3rdparty/hgOCR/leptonica/stack.c create mode 100644 3rdparty/hgOCR/leptonica/stack.h create mode 100644 3rdparty/hgOCR/leptonica/stringcode.c create mode 100644 3rdparty/hgOCR/leptonica/stringcode.h create mode 100644 3rdparty/hgOCR/leptonica/strokes.c create mode 100644 3rdparty/hgOCR/leptonica/sudoku.c create mode 100644 3rdparty/hgOCR/leptonica/sudoku.h create mode 100644 3rdparty/hgOCR/leptonica/textops.c create mode 100644 3rdparty/hgOCR/leptonica/tiffio.c create mode 100644 3rdparty/hgOCR/leptonica/tiffiostub.c create mode 100644 3rdparty/hgOCR/leptonica/utils1.c create mode 100644 3rdparty/hgOCR/leptonica/utils2.c create mode 100644 3rdparty/hgOCR/leptonica/warper.c create mode 100644 3rdparty/hgOCR/leptonica/watershed.c create mode 100644 3rdparty/hgOCR/leptonica/watershed.h create mode 100644 3rdparty/hgOCR/leptonica/webpanimio.c create mode 100644 3rdparty/hgOCR/leptonica/webpanimiostub.c create mode 100644 3rdparty/hgOCR/leptonica/webpio.c create mode 100644 3rdparty/hgOCR/leptonica/webpiostub.c create mode 100644 3rdparty/hgOCR/leptonica/writefile.c create mode 100644 3rdparty/hgOCR/leptonica/zlibmem.c create mode 100644 3rdparty/hgOCR/leptonica/zlibmemstub.c create mode 100644 3rdparty/hgOCR/x86/staticlib/debug/HG_OCR.lib create mode 100644 3rdparty/hgOCR/x86/staticlib/debug/leptonica.lib create mode 100644 3rdparty/hgOCR/x86/staticlib/debug/zlib.lib create mode 100644 3rdparty/hgOCR/x86/staticlib/release/HG_OCR.lib create mode 100644 3rdparty/hgOCR/x86/staticlib/release/leptonica.lib create mode 100644 3rdparty/hgOCR/x86/staticlib/release/zlib.lib create mode 100644 huagao/hg_ocr.cpp create mode 100644 huagao/hg_ocr.h diff --git a/3rdparty/hgOCR/include/api/StopWatch.h b/3rdparty/hgOCR/include/api/StopWatch.h new file mode 100644 index 00000000..afa4ee97 --- /dev/null +++ b/3rdparty/hgOCR/include/api/StopWatch.h @@ -0,0 +1,34 @@ +#pragma once +#include + +class StopWatch +{ +public: + StopWatch() { + _start = std::chrono::steady_clock::now(); + } + + void reset() { + _start = std::chrono::steady_clock::now(); + } + + double elapsed_s() { + return std::chrono::duration(std::chrono::steady_clock::now() - _start).count(); + } + + double elapsed_ms() { + return std::chrono::duration(std::chrono::steady_clock::now() - _start).count(); + } + + double elapsed_us() { + return std::chrono::duration(std::chrono::steady_clock::now() - _start).count(); + } + + double elapsed_ns() { + return std::chrono::duration(std::chrono::steady_clock::now() - _start).count(); + } + +private: + std::chrono::steady_clock::time_point _start; +}; + diff --git a/3rdparty/hgOCR/include/api/apitypes.h b/3rdparty/hgOCR/include/api/apitypes.h new file mode 100644 index 00000000..2cb38add --- /dev/null +++ b/3rdparty/hgOCR/include/api/apitypes.h @@ -0,0 +1,33 @@ +/////////////////////////////////////////////////////////////////////// +// File: apitypes.h +// Description: Types used in both the API and internally +// Author: Ray Smith +// Created: Wed Mar 03 09:22:53 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_API_APITYPES_H__ +#define TESSERACT_API_APITYPES_H__ + +#include "publictypes.h" + +// The types used by the API and Page/ResultIterator can be found in: +// ccstruct/publictypes.h +// ccmain/resultiterator.h +// ccmain/pageiterator.h +// API interfaces and API users should be sure to include this file, rather +// than the lower-level one, and lower-level code should be sure to include +// only the lower-level file. + +#endif // TESSERACT_API_APITYPES_H__ diff --git a/3rdparty/hgOCR/include/api/baseapi.cpp b/3rdparty/hgOCR/include/api/baseapi.cpp new file mode 100644 index 00000000..5cce5618 --- /dev/null +++ b/3rdparty/hgOCR/include/api/baseapi.cpp @@ -0,0 +1,2892 @@ +/********************************************************************** + * File: baseapi.cpp + * Description: Simple API for calling tesseract. + * Author: Ray Smith + * Created: Fri Oct 06 15:35:01 PDT 2006 + * + * (C) Copyright 2006, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#ifdef __linux__ +#include +#endif + +#if defined(_WIN32) +#ifdef _MSC_VER +#include "vcsversion.h" +#include "mathfix.h" +#elif MINGW +// workaround for stdlib.h with -std=c++11 for _splitpath and _MAX_FNAME +#undef __STRICT_ANSI__ +#endif // _MSC_VER +#include +#include +#else +#include +#include +#include +#endif // _WIN32 + +#include +#include +#include +#include + +#include "allheaders.h" + +#include "baseapi.h" +#include "blobclass.h" +#include "resultiterator.h" +#include "mutableiterator.h" +#include "thresholder.h" +#include "tesseractclass.h" +#include "pageres.h" +#include "paragraphs.h" +#include "tessvars.h" +#include "control.h" +#include "dict.h" +#include "pgedit.h" +#include "paramsd.h" +#include "output.h" +#include "globaloc.h" +#include "globals.h" +#include "edgblob.h" +#include "equationdetect.h" +#include "tessbox.h" +#include "makerow.h" +#include "otsuthr.h" +#include "osdetect.h" +#include "params.h" +#include "renderer.h" +#include "strngs.h" +#include "openclwrapper.h" + +BOOL_VAR(stream_filelist, FALSE, "Stream a filelist from stdin"); + +namespace tesseract { + + /** Minimum sensible image size to be worth running tesseract. */ + const int kMinRectSize = 10; + /** Character returned when Tesseract couldn't recognize as anything. */ + const char kTesseractReject = '~'; + /** Character used by UNLV error counter as a reject. */ + const char kUNLVReject = '~'; + /** Character used by UNLV as a suspect marker. */ + const char kUNLVSuspect = '^'; + /** + * Filename used for input image file, from which to derive a name to search + * for a possible UNLV zone file, if none is specified by SetInputName. + */ + const char* kInputFile = "noname.tif"; + /** + * Temp file used for storing current parameters before applying retry values. + */ + const char* kOldVarsFile = "failed_vars.txt"; + /** Max string length of an int. */ + const int kMaxIntSize = 22; + /** + * Minimum believable resolution. Used as a default if there is no other + * information, as it is safer to under-estimate than over-estimate. + */ + const int kMinCredibleResolution = 70; + /** Maximum believable resolution. */ + const int kMaxCredibleResolution = 2400; + + TessBaseAPI::TessBaseAPI() + : tesseract_(NULL), + osd_tesseract_(NULL), + equ_detect_(NULL), + // Thresholder is initialized to NULL here, but will be set before use by: + // A constructor of a derived API, SetThresholder(), or + // created implicitly when used in InternalSetImage. + thresholder_(NULL), + paragraph_models_(NULL), + block_list_(NULL), + page_res_(NULL), + input_file_(NULL), + output_file_(NULL), + datapath_(NULL), + language_(NULL), + last_oem_requested_(OEM_DEFAULT), + recognition_done_(false), + truth_cb_(NULL), + rect_left_(0), rect_top_(0), rect_width_(0), rect_height_(0), + image_width_(0), image_height_(0) { + unknown_title_ = ""; + } + + TessBaseAPI::~TessBaseAPI() { + End(); + } + + /** + * Returns the version identifier as a static string. Do not delete. + */ + const char* TessBaseAPI::Version() { +#if defined(GIT_REV) && (defined(DEBUG) || defined(_DEBUG)) + return GIT_REV; +#else + return TESSERACT_VERSION_STR; +#endif + } + + /** + * If compiled with OpenCL AND an available OpenCL + * device is deemed faster than serial code, then + * "device" is populated with the cl_device_id + * and returns sizeof(cl_device_id) + * otherwise *device=NULL and returns 0. + */ +#ifdef USE_OPENCL +#if USE_DEVICE_SELECTION +#include "opencl_device_selection.h" +#endif +#endif + size_t TessBaseAPI::getOpenCLDevice(void **data) { +#ifdef USE_OPENCL +#if USE_DEVICE_SELECTION + ds_device device = OpenclDevice::getDeviceSelection(); + if (device.type == DS_DEVICE_OPENCL_DEVICE) { + *data = reinterpret_cast(new cl_device_id); + memcpy(*data, &device.oclDeviceID, sizeof(cl_device_id)); + return sizeof(cl_device_id); + } +#endif +#endif + + *data = NULL; + return 0; + } + + /** + * Writes the thresholded image to stderr as a PBM file on receipt of a + * SIGSEGV, SIGFPE, or SIGBUS signal. (Linux/Unix only). + */ + void TessBaseAPI::CatchSignals() { +#ifdef __linux__ + struct sigaction action; + memset(&action, 0, sizeof(action)); + action.sa_handler = &signal_exit; + action.sa_flags = SA_RESETHAND; + sigaction(SIGSEGV, &action, NULL); + sigaction(SIGFPE, &action, NULL); + sigaction(SIGBUS, &action, NULL); +#else + // Warn API users that an implementation is needed. + tprintf("CatchSignals has no non-linux implementation!\n"); +#endif + } + + /** + * Set the name of the input file. Needed only for training and + * loading a UNLV zone file. + */ + void TessBaseAPI::SetInputName(const char* name) { + if (input_file_ == NULL) + input_file_ = new STRING(name); + else + *input_file_ = name; + } + + /** Set the name of the output files. Needed only for debugging. */ + void TessBaseAPI::SetOutputName(const char* name) { + if (output_file_ == NULL) + output_file_ = new STRING(name); + else + *output_file_ = name; + } + + bool TessBaseAPI::SetVariable(const char* name, const char* value) { + if (tesseract_ == NULL) tesseract_ = new Tesseract; + return ParamUtils::SetParam(name, value, SET_PARAM_CONSTRAINT_NON_INIT_ONLY, + tesseract_->params()); + } + + bool TessBaseAPI::SetDebugVariable(const char* name, const char* value) { + if (tesseract_ == NULL) tesseract_ = new Tesseract; + return ParamUtils::SetParam(name, value, SET_PARAM_CONSTRAINT_DEBUG_ONLY, + tesseract_->params()); + } + + bool TessBaseAPI::GetIntVariable(const char *name, int *value) const { + IntParam *p = ParamUtils::FindParam( + name, GlobalParams()->int_params, tesseract_->params()->int_params); + if (p == NULL) return false; + *value = (inT32)(*p); + return true; + } + + bool TessBaseAPI::GetBoolVariable(const char *name, bool *value) const { + BoolParam *p = ParamUtils::FindParam( + name, GlobalParams()->bool_params, tesseract_->params()->bool_params); + if (p == NULL) return false; + *value = (BOOL8)(*p); + return true; + } + + const char *TessBaseAPI::GetStringVariable(const char *name) const { + StringParam *p = ParamUtils::FindParam( + name, GlobalParams()->string_params, tesseract_->params()->string_params); + return (p != NULL) ? p->string() : NULL; + } + + bool TessBaseAPI::GetDoubleVariable(const char *name, double *value) const { + DoubleParam *p = ParamUtils::FindParam( + name, GlobalParams()->double_params, tesseract_->params()->double_params); + if (p == NULL) return false; + *value = (double)(*p); + return true; + } + + /** Get value of named variable as a string, if it exists. */ + bool TessBaseAPI::GetVariableAsString(const char *name, STRING *val) { + return ParamUtils::GetParamAsString(name, tesseract_->params(), val); + } + + /** Print Tesseract parameters to the given file. */ + void TessBaseAPI::PrintVariables(FILE *fp) const { + ParamUtils::PrintParams(fp, tesseract_->params()); + } + + /** + * The datapath must be the name of the data directory (no ending /) or + * some other file in which the data directory resides (for instance argv[0].) + * The language is (usually) an ISO 639-3 string or NULL will default to eng. + * If numeric_mode is true, then only digits and Roman numerals will + * be returned. + * @return: 0 on success and -1 on initialization failure. + */ + int TessBaseAPI::Init(const char* datapath, const char* language, + OcrEngineMode oem, char **configs, int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_non_debug_params) { + PERF_COUNT_START("TessBaseAPI::Init") + // Default language is "eng". + if (language == NULL) language = "eng"; + // If the datapath, OcrEngineMode or the language have changed - start again. + // Note that the language_ field stores the last requested language that was + // initialized successfully, while tesseract_->lang stores the language + // actually used. They differ only if the requested language was NULL, in + // which case tesseract_->lang is set to the Tesseract default ("eng"). + if (tesseract_ != NULL && + (datapath_ == NULL || language_ == NULL || + *datapath_ != datapath || last_oem_requested_ != oem || + (*language_ != language && tesseract_->lang != language))) { + delete tesseract_; + tesseract_ = NULL; + } + // PERF_COUNT_SUB("delete tesseract_") +#ifdef USE_OPENCL + OpenclDevice od; + od.InitEnv(); +#endif + PERF_COUNT_SUB("OD::InitEnv()") + bool reset_classifier = true; + if (tesseract_ == NULL) { + reset_classifier = false; + tesseract_ = new Tesseract; + if (tesseract_->init_tesseract( + datapath, output_file_ != NULL ? output_file_->string() : NULL, + language, oem, configs, configs_size, vars_vec, vars_values, + set_only_non_debug_params) != 0) { + return -1; + } + } + PERF_COUNT_SUB("update tesseract_") + // Update datapath and language requested for the last valid initialization. + if (datapath_ == NULL) + datapath_ = new STRING(datapath); + else + *datapath_ = datapath; + if ((strcmp(datapath_->string(), "") == 0) && + (strcmp(tesseract_->datadir.string(), "") != 0)) + *datapath_ = tesseract_->datadir; + + if (language_ == NULL) + language_ = new STRING(language); + else + *language_ = language; + last_oem_requested_ = oem; + // PERF_COUNT_SUB("update last_oem_requested_") + // For same language and datapath, just reset the adaptive classifier. + if (reset_classifier) { + tesseract_->ResetAdaptiveClassifier(); + PERF_COUNT_SUB("tesseract_->ResetAdaptiveClassifier()") + } + PERF_COUNT_END + return 0; + } + + /** + * Returns the languages string used in the last valid initialization. + * If the last initialization specified "deu+hin" then that will be + * returned. If hin loaded eng automatically as well, then that will + * not be included in this list. To find the languages actually + * loaded use GetLoadedLanguagesAsVector. + * The returned string should NOT be deleted. + */ + const char* TessBaseAPI::GetInitLanguagesAsString() const { + return (language_ == NULL || language_->string() == NULL) ? + "" : language_->string(); + } + + /** + * Returns the loaded languages in the vector of STRINGs. + * Includes all languages loaded by the last Init, including those loaded + * as dependencies of other loaded languages. + */ + void TessBaseAPI::GetLoadedLanguagesAsVector( + GenericVector* langs) const { + langs->clear(); + if (tesseract_ != NULL) { + langs->push_back(tesseract_->lang); + int num_subs = tesseract_->num_sub_langs(); + for (int i = 0; i < num_subs; ++i) + langs->push_back(tesseract_->get_sub_lang(i)->lang); + } + } + + /** + * Returns the available languages in the vector of STRINGs. + */ + void TessBaseAPI::GetAvailableLanguagesAsVector( + GenericVector* langs) const { + langs->clear(); + if (tesseract_ != NULL) { +#ifdef _WIN32 + STRING pattern = tesseract_->datadir + "/*." + kTrainedDataSuffix; + char fname[_MAX_FNAME]; + WIN32_FIND_DATA data; + BOOL result = TRUE; + HANDLE handle = FindFirstFile(pattern.string(), &data); + if (handle != INVALID_HANDLE_VALUE) { + for (; result; result = FindNextFile(handle, &data)) { + _splitpath(data.cFileName, NULL, NULL, fname, NULL); + langs->push_back(STRING(fname)); + } + FindClose(handle); + } +#else // _WIN32 + DIR *dir; + struct dirent *dirent; + char *dot; + + STRING extension = STRING(".") + kTrainedDataSuffix; + + dir = opendir(tesseract_->datadir.string()); + if (dir != NULL) { + while ((dirent = readdir(dir))) { + // Skip '.', '..', and hidden files + if (dirent->d_name[0] != '.') { + if (strstr(dirent->d_name, extension.string()) != NULL) { + dot = strrchr(dirent->d_name, '.'); + // This ensures that .traineddata is at the end of the file name + if (strncmp(dot, extension.string(), + strlen(extension.string())) == 0) { + *dot = '\0'; + langs->push_back(STRING(dirent->d_name)); + } + } + } + } + closedir(dir); + } +#endif + } + } + + /** + * Init only the lang model component of Tesseract. The only functions + * that work after this init are SetVariable and IsValidWord. + * WARNING: temporary! This function will be removed from here and placed + * in a separate API at some future time. + */ + int TessBaseAPI::InitLangMod(const char* datapath, const char* language) { + if (tesseract_ == NULL) + tesseract_ = new Tesseract; + else + ParamUtils::ResetToDefaults(tesseract_->params()); + return tesseract_->init_tesseract_lm(datapath, NULL, language); + } + + /** + * Init only for page layout analysis. Use only for calls to SetImage and + * AnalysePage. Calls that attempt recognition will generate an error. + */ + void TessBaseAPI::InitForAnalysePage() { + if (tesseract_ == NULL) { + tesseract_ = new Tesseract; + tesseract_->InitAdaptiveClassifier(false); + } + } + + /** + * Read a "config" file containing a set of parameter name, value pairs. + * Searches the standard places: tessdata/configs, tessdata/tessconfigs + * and also accepts a relative or absolute path name. + */ + void TessBaseAPI::ReadConfigFile(const char* filename) { + tesseract_->read_config_file(filename, SET_PARAM_CONSTRAINT_NON_INIT_ONLY); + } + + /** Same as above, but only set debug params from the given config file. */ + void TessBaseAPI::ReadDebugConfigFile(const char* filename) { + tesseract_->read_config_file(filename, SET_PARAM_CONSTRAINT_DEBUG_ONLY); + } + + /** + * Set the current page segmentation mode. Defaults to PSM_AUTO. + * The mode is stored as an IntParam so it can also be modified by + * ReadConfigFile or SetVariable("tessedit_pageseg_mode", mode as string). + */ + void TessBaseAPI::SetPageSegMode(PageSegMode mode) { + if (tesseract_ == NULL) + tesseract_ = new Tesseract; + tesseract_->tessedit_pageseg_mode.set_value(mode); + } + + /** Return the current page segmentation mode. */ + PageSegMode TessBaseAPI::GetPageSegMode() const { + if (tesseract_ == NULL) + return PSM_SINGLE_BLOCK; + return static_cast( + static_cast(tesseract_->tessedit_pageseg_mode)); + } + + /** + * Recognize a rectangle from an image and return the result as a string. + * May be called many times for a single Init. + * Currently has no error checking. + * Greyscale of 8 and color of 24 or 32 bits per pixel may be given. + * Palette color images will not work properly and must be converted to + * 24 bit. + * Binary images of 1 bit per pixel may also be given but they must be + * byte packed with the MSB of the first byte being the first pixel, and a + * one pixel is WHITE. For binary images set bytes_per_pixel=0. + * The recognized text is returned as a char* which is coded + * as UTF8 and must be freed with the delete [] operator. + */ + char* TessBaseAPI::TesseractRect(const unsigned char* imagedata, + int bytes_per_pixel, + int bytes_per_line, + int left, int top, + int width, int height) { + if (tesseract_ == NULL || width < kMinRectSize || height < kMinRectSize) + return NULL; // Nothing worth doing. + + // Since this original api didn't give the exact size of the image, + // we have to invent a reasonable value. + int bits_per_pixel = bytes_per_pixel == 0 ? 1 : bytes_per_pixel * 8; + SetImage(imagedata, bytes_per_line * 8 / bits_per_pixel, height + top, + bytes_per_pixel, bytes_per_line); + SetRectangle(left, top, width, height); + + return GetUTF8Text(); + } + + /** + * Call between pages or documents etc to free up memory and forget + * adaptive data. + */ + void TessBaseAPI::ClearAdaptiveClassifier() { + if (tesseract_ == NULL) + return; + tesseract_->ResetAdaptiveClassifier(); + tesseract_->ResetDocumentDictionary(); + } + + /** + * Provide an image for Tesseract to recognize. Format is as + * TesseractRect above. Copies the image buffer and converts to Pix. + * SetImage clears all recognition results, and sets the rectangle to the + * full image, so it may be followed immediately by a GetUTF8Text, and it + * will automatically perform recognition. + */ + void TessBaseAPI::SetImage(const unsigned char* imagedata, + int width, int height, + int bytes_per_pixel, int bytes_per_line) { + if (InternalSetImage()) { + thresholder_->SetImage(imagedata, width, height, + bytes_per_pixel, bytes_per_line); + SetInputImage(thresholder_->GetPixRect()); + } + } + + void TessBaseAPI::SetSourceResolution(int ppi) { + if (thresholder_) + thresholder_->SetSourceYResolution(ppi); + else + tprintf("Please call SetImage before SetSourceResolution.\n"); + } + + /** + * Provide an image for Tesseract to recognize. As with SetImage above, + * Tesseract takes its own copy of the image, so it need not persist until + * after Recognize. + * Pix vs raw, which to use? + * Use Pix where possible. Tesseract uses Pix as its internal representation + * and it is therefore more efficient to provide a Pix directly. + */ + void TessBaseAPI::SetImage(Pix* pix) { + if (InternalSetImage()) { + thresholder_->SetImage(pix); + SetInputImage(thresholder_->GetPixRect()); + } + } + + /** + * Restrict recognition to a sub-rectangle of the image. Call after SetImage. + * Each SetRectangle clears the recogntion results so multiple rectangles + * can be recognized with the same image. + */ + void TessBaseAPI::SetRectangle(int left, int top, int width, int height) { + if (thresholder_ == NULL) + return; + thresholder_->SetRectangle(left, top, width, height); + ClearResults(); + } + + /** + * ONLY available after SetImage if you have Leptonica installed. + * Get a copy of the internal thresholded image from Tesseract. + */ + Pix* TessBaseAPI::GetThresholdedImage() { + if (tesseract_ == NULL || thresholder_ == NULL) + return NULL; + if (tesseract_->pix_binary() == NULL) + Threshold(tesseract_->mutable_pix_binary()); + return pixClone(tesseract_->pix_binary()); + } + + /** + * Get the result of page layout analysis as a leptonica-style + * Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + */ + Boxa* TessBaseAPI::GetRegions(Pixa** pixa) { + return GetComponentImages(RIL_BLOCK, false, pixa, NULL); + } + + /** + * Get the textlines as a leptonica-style Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + * If blockids is not NULL, the block-id of each line is also returned as an + * array of one element per line. delete [] after use. + * If paraids is not NULL, the paragraph-id of each line within its block is + * also returned as an array of one element per line. delete [] after use. + */ + Boxa* TessBaseAPI::GetTextlines(const bool raw_image, const int raw_padding, + Pixa** pixa, int** blockids, int** paraids) { + return GetComponentImages(RIL_TEXTLINE, true, raw_image, raw_padding, + pixa, blockids, paraids); + } + + /** + * Get textlines and strips of image regions as a leptonica-style Boxa, Pixa + * pair, in reading order. Enables downstream handling of non-rectangular + * regions. + * Can be called before or after Recognize. + * If blockids is not NULL, the block-id of each line is also returned as an + * array of one element per line. delete [] after use. + */ + Boxa* TessBaseAPI::GetStrips(Pixa** pixa, int** blockids) { + return GetComponentImages(RIL_TEXTLINE, false, pixa, blockids); + } + + /** + * Get the words as a leptonica-style + * Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + */ + Boxa* TessBaseAPI::GetWords(Pixa** pixa) { + return GetComponentImages(RIL_WORD, true, pixa, NULL); + } + + /** + * Gets the individual connected (text) components (created + * after pages segmentation step, but before recognition) + * as a leptonica-style Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + */ + Boxa* TessBaseAPI::GetConnectedComponents(Pixa** pixa) { + return GetComponentImages(RIL_SYMBOL, true, pixa, NULL); + } + + /** + * Get the given level kind of components (block, textline, word etc.) as a + * leptonica-style Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + * If blockids is not NULL, the block-id of each component is also returned + * as an array of one element per component. delete [] after use. + * If text_only is true, then only text components are returned. + */ + Boxa* TessBaseAPI::GetComponentImages(PageIteratorLevel level, + bool text_only, bool raw_image, + const int raw_padding, + Pixa** pixa, int** blockids, + int** paraids) { + PageIterator* page_it = GetIterator(); + if (page_it == NULL) + page_it = AnalyseLayout(); + if (page_it == NULL) + return NULL; // Failed. + + // Count the components to get a size for the arrays. + int component_count = 0; + int left, top, right, bottom; + + TessResultCallback* get_bbox = NULL; + if (raw_image) { + // Get bounding box in original raw image with padding. + get_bbox = NewPermanentTessCallback(page_it, &PageIterator::BoundingBox, + level, raw_padding, + &left, &top, &right, &bottom); + } + else { + // Get bounding box from binarized imaged. Note that this could be + // differently scaled from the original image. + get_bbox = NewPermanentTessCallback(page_it, + &PageIterator::BoundingBoxInternal, + level, &left, &top, &right, &bottom); + } + do { + if (get_bbox->Run() && + (!text_only || PTIsTextType(page_it->BlockType()))) + ++component_count; + } while (page_it->Next(level)); + + Boxa* boxa = boxaCreate(component_count); + if (pixa != NULL) + *pixa = pixaCreate(component_count); + if (blockids != NULL) + *blockids = new int[component_count]; + if (paraids != NULL) + *paraids = new int[component_count]; + + int blockid = 0; + int paraid = 0; + int component_index = 0; + page_it->Begin(); + do { + if (get_bbox->Run() && + (!text_only || PTIsTextType(page_it->BlockType()))) { + Box* lbox = boxCreate(left, top, right - left, bottom - top); + boxaAddBox(boxa, lbox, L_INSERT); + if (pixa != NULL) { + Pix* pix = NULL; + if (raw_image) { + pix = page_it->GetImage(level, raw_padding, GetInputImage(), &left, + &top); + } + else { + pix = page_it->GetBinaryImage(level); + } + pixaAddPix(*pixa, pix, L_INSERT); + pixaAddBox(*pixa, lbox, L_CLONE); + } + if (paraids != NULL) { + (*paraids)[component_index] = paraid; + if (page_it->IsAtFinalElement(RIL_PARA, level)) + ++paraid; + } + if (blockids != NULL) { + (*blockids)[component_index] = blockid; + if (page_it->IsAtFinalElement(RIL_BLOCK, level)) { + ++blockid; + paraid = 0; + } + } + ++component_index; + } + } while (page_it->Next(level)); + delete page_it; + delete get_bbox; + return boxa; + } + + int TessBaseAPI::GetThresholdedImageScaleFactor() const { + if (thresholder_ == NULL) { + return 0; + } + return thresholder_->GetScaleFactor(); + } + + /** Dump the internal binary image to a PGM file. */ + void TessBaseAPI::DumpPGM(const char* filename) { + if (tesseract_ == NULL) + return; + FILE *fp = fopen(filename, "wb"); + Pix* pix = tesseract_->pix_binary(); + int width = pixGetWidth(pix); + int height = pixGetHeight(pix); + l_uint32* data = pixGetData(pix); + fprintf(fp, "P5 %d %d 255\n", width, height); + for (int y = 0; y < height; ++y, data += pixGetWpl(pix)) { + for (int x = 0; x < width; ++x) { + uinT8 b = GET_DATA_BIT(data, x) ? 0 : 255; + fwrite(&b, 1, 1, fp); + } + } + fclose(fp); + } + +#ifndef NO_CUBE_BUILD + /** + * Placeholder for call to Cube and test that the input data is correct. + * reskew is the direction of baselines in the skewed image in + * normalized (cos theta, sin theta) form, so (0.866, 0.5) would represent + * a 30 degree anticlockwise skew. + */ + int CubeAPITest(Boxa* boxa_blocks, Pixa* pixa_blocks, + Boxa* boxa_words, Pixa* pixa_words, + const FCOORD& reskew, Pix* page_pix, + PAGE_RES* page_res) { + int block_count = boxaGetCount(boxa_blocks); + ASSERT_HOST(block_count == pixaGetCount(pixa_blocks)); + // Write each block to the current directory as junk_write_display.nnn.png. + for (int i = 0; i < block_count; ++i) { + Pix* pix = pixaGetPix(pixa_blocks, i, L_CLONE); + pixDisplayWrite(pix, 1); + } + int word_count = boxaGetCount(boxa_words); + ASSERT_HOST(word_count == pixaGetCount(pixa_words)); + int pr_word = 0; + PAGE_RES_IT page_res_it(page_res); + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward(), ++pr_word) { + WERD_RES *word = page_res_it.word(); + WERD_CHOICE* choice = word->best_choice; + // Write the first 100 words to files names wordims/.tif. + if (pr_word < 100) { + STRING filename("wordims/"); + if (choice != NULL) { + filename += choice->unichar_string(); + } + else { + char numbuf[32]; + filename += "unclassified"; + snprintf(numbuf, 32, "%03d", pr_word); + filename += numbuf; + } + filename += ".tif"; + Pix* pix = pixaGetPix(pixa_words, pr_word, L_CLONE); + pixWrite(filename.string(), pix, IFF_TIFF_G4); + } + } + ASSERT_HOST(pr_word == word_count); + return 0; + } +#endif // NO_CUBE_BUILD + + /** + * Runs page layout analysis in the mode set by SetPageSegMode. + * May optionally be called prior to Recognize to get access to just + * the page layout results. Returns an iterator to the results. + * If merge_similar_words is true, words are combined where suitable for use + * with a line recognizer. Use if you want to use AnalyseLayout to find the + * textlines, and then want to process textline fragments with an external + * line recognizer. + * Returns NULL on error or an empty page. + * The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + PageIterator* TessBaseAPI::AnalyseLayout() { return AnalyseLayout(false); } + + PageIterator* TessBaseAPI::AnalyseLayout(bool merge_similar_words) { + if (FindLines() == 0) { + if (block_list_->empty()) + return NULL; // The page was empty. + page_res_ = new PAGE_RES(merge_similar_words, block_list_, NULL); + DetectParagraphs(false); + return new PageIterator( + page_res_, tesseract_, thresholder_->GetScaleFactor(), + thresholder_->GetScaledYResolution(), + rect_left_, rect_top_, rect_width_, rect_height_); + } + return NULL; + } + + int TessBaseAPI::AnalyseLayout1() + { + return FindLines(); + } + + /** + * Recognize the tesseract global image and return the result as Tesseract + * internal structures. + */ + int TessBaseAPI::Recognize(ETEXT_DESC* monitor) { + if (tesseract_ == NULL) + return -1; + if (FindLines() != 0) + return -1; + delete page_res_; +#if 1 + if (block_list_->empty()) { + page_res_ = new PAGE_RES(false, block_list_, + &tesseract_->prev_word_best_choice_); + //return 0; // Empty page. + } +#endif + + tesseract_->SetBlackAndWhitelist(); + recognition_done_ = true; + if (tesseract_->tessedit_resegment_from_line_boxes) { + page_res_ = tesseract_->ApplyBoxes(*input_file_, true, block_list_); + } + else if (tesseract_->tessedit_resegment_from_boxes) { + page_res_ = tesseract_->ApplyBoxes(*input_file_, false, block_list_); + } + else { + // TODO(rays) LSTM here. + page_res_ = new PAGE_RES(false, + block_list_, &tesseract_->prev_word_best_choice_); + } + if (page_res_ == NULL) { + return -1; + } + if (tesseract_->tessedit_make_boxes_from_boxes) { + tesseract_->CorrectClassifyWords(page_res_); + return 0; + } + + if (truth_cb_ != NULL) { + tesseract_->wordrec_run_blamer.set_value(true); + PageIterator *page_it = new PageIterator( + page_res_, tesseract_, thresholder_->GetScaleFactor(), + thresholder_->GetScaledYResolution(), + rect_left_, rect_top_, rect_width_, rect_height_); + truth_cb_->Run(tesseract_->getDict().getUnicharset(), + image_height_, page_it, this->tesseract()->pix_grey()); + delete page_it; + } + + int result = 0; + if (tesseract_->interactive_display_mode) { +#ifndef GRAPHICS_DISABLED + tesseract_->pgeditor_main(rect_width_, rect_height_, page_res_); +#endif // GRAPHICS_DISABLED + // The page_res is invalid after an interactive session, so cleanup + // in a way that lets us continue to the next page without crashing. + delete page_res_; + page_res_ = NULL; + return -1; + } + else if (tesseract_->tessedit_train_from_boxes) { + STRING fontname; + ExtractFontName(*output_file_, &fontname); + tesseract_->ApplyBoxTraining(fontname, page_res_); + } + else if (tesseract_->tessedit_ambigs_training) { + FILE *training_output_file = tesseract_->init_recog_training(*input_file_); + // OCR the page segmented into words by tesseract. + tesseract_->recog_training_segmented( + *input_file_, page_res_, monitor, training_output_file); + fclose(training_output_file); + } + else { + // Now run the main recognition. + bool wait_for_text = true; + GetBoolVariable("paragraph_text_based", &wait_for_text); + if (!wait_for_text) DetectParagraphs(false); + if (tesseract_->recog_all_words(page_res_, monitor, NULL, NULL, 0)) { + if (wait_for_text) DetectParagraphs(true); + } + else { + result = -1; + } + } + return result; + } + + /** Tests the chopper by exhaustively running chop_one_blob. */ + int TessBaseAPI::RecognizeForChopTest(ETEXT_DESC* monitor) { + if (tesseract_ == NULL) + return -1; + if (thresholder_ == NULL || thresholder_->IsEmpty()) { + tprintf("Please call SetImage before attempting recognition."); + return -1; + } + if (page_res_ != NULL) + ClearResults(); + if (FindLines() != 0) + return -1; + // Additional conditions under which chopper test cannot be run + if (tesseract_->interactive_display_mode) return -1; + + recognition_done_ = true; + + page_res_ = new PAGE_RES(false, block_list_, + &(tesseract_->prev_word_best_choice_)); + + PAGE_RES_IT page_res_it(page_res_); + + while (page_res_it.word() != NULL) { + WERD_RES *word_res = page_res_it.word(); + GenericVector boxes; + tesseract_->MaximallyChopWord(boxes, page_res_it.block()->block, + page_res_it.row()->row, word_res); + page_res_it.forward(); + } + return 0; + } + + // Takes ownership of the input pix. + void TessBaseAPI::SetInputImage(Pix* pix) { tesseract_->set_pix_original(pix); } + + Pix* TessBaseAPI::GetInputImage() { return tesseract_->pix_original(); } + + const char * TessBaseAPI::GetInputName() { + if (input_file_) + return input_file_->c_str(); + return NULL; + } + + const char * TessBaseAPI::GetDatapath() { + return tesseract_->datadir.c_str(); + } + + int TessBaseAPI::GetSourceYResolution() { + return thresholder_->GetSourceYResolution(); + } + + // If flist exists, get data from there. Otherwise get data from buf. + // Seems convoluted, but is the easiest way I know of to meet multiple + // goals. Support streaming from stdin, and also work on platforms + // lacking fmemopen. + bool TessBaseAPI::ProcessPagesFileList(FILE *flist, + STRING *buf, + const char* retry_config, + int timeout_millisec, + TessResultRenderer* renderer, + int tessedit_page_number) { + if (!flist && !buf) return false; + int page = (tessedit_page_number >= 0) ? tessedit_page_number : 0; + char pagename[MAX_PATH]; + + GenericVector lines; + if (!flist) { + buf->split('\n', &lines); + if (lines.empty()) return false; + } + + // Skip to the requested page number. + for (int i = 0; i < page; i++) { + if (flist) { + if (fgets(pagename, sizeof(pagename), flist) == NULL) break; + } + } + + // Begin producing output + if (renderer && !renderer->BeginDocument(unknown_title_)) { + return false; + } + + // Loop over all pages - or just the requested one + while (true) { + if (flist) { + if (fgets(pagename, sizeof(pagename), flist) == NULL) break; + } + else { + if (page >= lines.size()) break; + snprintf(pagename, sizeof(pagename), "%s", lines[page].c_str()); + } + chomp_string(pagename); + Pix *pix = pixRead(pagename); + if (pix == NULL) { + tprintf("Image file %s cannot be read!\n", pagename); + return false; + } + tprintf("Page %d : %s\n", page, pagename); + bool r = ProcessPage(pix, page, pagename, retry_config, + timeout_millisec, renderer, nullptr, 0); + pixDestroy(&pix); + if (!r) return false; + if (tessedit_page_number >= 0) break; + ++page; + } + + // Finish producing output + if (renderer && !renderer->EndDocument()) { + return false; + } + return true; + } + + bool TessBaseAPI::ProcessPagesMultipageTiff(const l_uint8 *data, + size_t size, + const char* filename, + const char* retry_config, + int timeout_millisec, + TessResultRenderer* renderer, + int tessedit_page_number) { +#ifndef ANDROID_BUILD + Pix *pix = NULL; + int page = (tessedit_page_number >= 0) ? tessedit_page_number : 0; + size_t offset = 0; + for (; ; ++page) { + if (tessedit_page_number >= 0) + page = tessedit_page_number; + pix = (data) ? pixReadMemFromMultipageTiff(data, size, &offset) + : pixReadFromMultipageTiff(filename, &offset); + if (pix == NULL) break; + tprintf("Page %d\n", page + 1); + char page_str[kMaxIntSize]; + snprintf(page_str, kMaxIntSize - 1, "%d", page); + SetVariable("applybox_page", page_str); + bool r = ProcessPage(pix, page, filename, retry_config, + timeout_millisec, renderer, nullptr, 0); + pixDestroy(&pix); + if (!r) return false; + if (tessedit_page_number >= 0) break; + if (!offset) break; + } + return true; +#else + return false; +#endif + } + + // Master ProcessPages calls ProcessPagesInternal and then does any post- + // processing required due to being in a training mode. + bool TessBaseAPI::ProcessPages(const char* filename, const char* retry_config, + int timeout_millisec, + TessResultRenderer* renderer) { + bool result = + ProcessPagesInternal(filename, retry_config, timeout_millisec, renderer); + if (result) { + if (tesseract_->tessedit_train_from_boxes && + !tesseract_->WriteTRFile(*output_file_)) { + tprintf("Write of TR file failed: %s\n", output_file_->string()); + return false; + } + } + return result; + } + + // In the ideal scenario, Tesseract will start working on data as soon + // as it can. For example, if you steam a filelist through stdin, we + // should start the OCR process as soon as the first filename is + // available. This is particularly useful when hooking Tesseract up to + // slow hardware such as a book scanning machine. + // + // Unfortunately there are tradeoffs. You can't seek on stdin. That + // makes automatic detection of datatype (TIFF? filelist? PNG?) + // impractical. So we support a command line flag to explicitly + // identify the scenario that really matters: filelists on + // stdin. We'll still do our best if the user likes pipes. + bool TessBaseAPI::ProcessPagesInternal(const char* filename, + const char* retry_config, + int timeout_millisec, + TessResultRenderer* renderer) { + PERF_COUNT_START("ProcessPages") + bool stdInput = !strcmp(filename, "stdin") || !strcmp(filename, "-"); + if (stdInput) { +#ifdef WIN32 + if (_setmode(_fileno(stdin), _O_BINARY) == -1) + tprintf("ERROR: cin to binary: %s", strerror(errno)); +#endif // WIN32 + } + + if (stream_filelist) { + return ProcessPagesFileList(stdin, NULL, retry_config, + timeout_millisec, renderer, + tesseract_->tessedit_page_number); + } + + // At this point we are officially in autodection territory. + // That means any data in stdin must be buffered, to make it + // seekable. + std::string buf; + const l_uint8 *data = NULL; + if (stdInput) { + buf.assign((std::istreambuf_iterator(std::cin)), + (std::istreambuf_iterator())); + data = reinterpret_cast(buf.data()); + } + + // Here is our autodetection + int format; + int r = (stdInput) ? + findFileFormatBuffer(data, &format) : + findFileFormat(filename, &format); + + // Maybe we have a filelist + if (r != 0 || format == IFF_UNKNOWN) { + STRING s; + if (stdInput) { + s = buf.c_str(); + } + else { + std::ifstream t(filename); + std::string u((std::istreambuf_iterator(t)), + std::istreambuf_iterator()); + s = u.c_str(); + } + return ProcessPagesFileList(NULL, &s, retry_config, + timeout_millisec, renderer, + tesseract_->tessedit_page_number); + } + + // Maybe we have a TIFF which is potentially multipage + bool tiff = (format == IFF_TIFF || format == IFF_TIFF_PACKBITS || + format == IFF_TIFF_RLE || format == IFF_TIFF_G3 || + format == IFF_TIFF_G4 || format == IFF_TIFF_LZW || + format == IFF_TIFF_ZIP); + + // Fail early if we can, before producing any output + Pix *pix = NULL; + if (!tiff) { + pix = (stdInput) ? pixReadMem(data, buf.size()) : pixRead(filename); + if (pix == NULL) { + return false; + } + } + + // Begin the output + if (renderer && !renderer->BeginDocument(unknown_title_)) { + pixDestroy(&pix); + return false; + } + + // Produce output + r = (tiff) ? + ProcessPagesMultipageTiff(data, buf.size(), filename, retry_config, + timeout_millisec, renderer, + tesseract_->tessedit_page_number) : + ProcessPage(pix, 0, filename, retry_config, + timeout_millisec, renderer, nullptr, 0); + + // Clean up memory as needed + pixDestroy(&pix); + + // End the output + if (!r || (renderer && !renderer->EndDocument())) { + return false; + } + PERF_COUNT_END + return true; + } + + bool TessBaseAPI::ProcessPage(Pix* pix, int page_index, const char* filename, + const char* retry_config, int timeout_millisec, + TessResultRenderer* renderer, + const char* jpgdata, int len) { + PERF_COUNT_START("ProcessPage") + SetInputName(filename); + SetImage(pix); + bool failed = false; + + if (tesseract_->tessedit_pageseg_mode == PSM_AUTO_ONLY) { + // Disabled character recognition + PageIterator* it = AnalyseLayout(); + + if (it == NULL) { + failed = true; + } + else { + delete it; + } + } + else if (tesseract_->tessedit_pageseg_mode == PSM_OSD_ONLY) { + failed = FindLines() != 0; + } + else if (timeout_millisec > 0) { + // Running with a timeout. + ETEXT_DESC monitor; + monitor.cancel = NULL; + monitor.cancel_this = NULL; + monitor.set_deadline_msecs(timeout_millisec); + + // Now run the main recognition. + failed = Recognize(&monitor) < 0; + } + else { + // Normal layout and character recognition with no timeout. + failed = Recognize(NULL) < 0; + } + + if (tesseract_->tessedit_write_images) { +#ifndef ANDROID_BUILD + Pix* page_pix = GetThresholdedImage(); + pixWrite("tessinput.tif", page_pix, IFF_TIFF_G4); +#endif // ANDROID_BUILD + } + + if (failed && retry_config != NULL && retry_config[0] != '\0') { + // Save current config variables before switching modes. + FILE* fp = fopen(kOldVarsFile, "wb"); + PrintVariables(fp); + fclose(fp); + // Switch to alternate mode for retry. + ReadConfigFile(retry_config); + SetImage(pix); + Recognize(NULL); + // Restore saved config variables. + ReadConfigFile(kOldVarsFile); + } + + if (renderer && !failed) { + failed = !renderer->AddImage(this, jpgdata, len); + } + + PERF_COUNT_END + return !failed; + } + + /** + * Get a left-to-right iterator to the results of LayoutAnalysis and/or + * Recognize. The returned iterator must be deleted after use. + */ + LTRResultIterator* TessBaseAPI::GetLTRIterator() { + if (tesseract_ == NULL || page_res_ == NULL) + return NULL; + return new LTRResultIterator( + page_res_, tesseract_, + thresholder_->GetScaleFactor(), thresholder_->GetScaledYResolution(), + rect_left_, rect_top_, rect_width_, rect_height_); + } + + /** + * Get a reading-order iterator to the results of LayoutAnalysis and/or + * Recognize. The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + ResultIterator* TessBaseAPI::GetIterator() { + if (tesseract_ == NULL || page_res_ == NULL) + return NULL; + return ResultIterator::StartOfParagraph(LTRResultIterator( + page_res_, tesseract_, + thresholder_->GetScaleFactor(), thresholder_->GetScaledYResolution(), + rect_left_, rect_top_, rect_width_, rect_height_)); + } + + /** + * Get a mutable iterator to the results of LayoutAnalysis and/or Recognize. + * The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + MutableIterator* TessBaseAPI::GetMutableIterator() { + if (tesseract_ == NULL || page_res_ == NULL) + return NULL; + return new MutableIterator(page_res_, tesseract_, + thresholder_->GetScaleFactor(), + thresholder_->GetScaledYResolution(), + rect_left_, rect_top_, rect_width_, rect_height_); + } + + /** Make a text string from the internal data structures. */ + char* TessBaseAPI::GetUTF8Text() { + if (tesseract_ == NULL || + (!recognition_done_ && Recognize(NULL) < 0)) + return NULL; + STRING text(""); + ResultIterator *it = GetIterator(); + do { + if (it->Empty(RIL_PARA)) continue; + char *para_text = it->GetUTF8Text(RIL_PARA); + text += para_text; + delete[]para_text; + } while (it->Next(RIL_PARA)); + char* result = new char[text.length() + 1]; + strncpy(result, text.string(), text.length() + 1); + delete it; + return result; + } + + /** + * Gets the block orientation at the current iterator position. + */ + static tesseract::Orientation GetBlockTextOrientation(const PageIterator *it) { + tesseract::Orientation orientation; + tesseract::WritingDirection writing_direction; + tesseract::TextlineOrder textline_order; + float deskew_angle; + it->Orientation(&orientation, &writing_direction, &textline_order, + &deskew_angle); + return orientation; + } + + /** + * Fits a line to the baseline at the given level, and appends its coefficients + * to the hOCR string. + * NOTE: The hOCR spec is unclear on how to specify baseline coefficients for + * rotated textlines. For this reason, on textlines that are not upright, this + * method currently only inserts a 'textangle' property to indicate the rotation + * direction and does not add any baseline information to the hocr string. + */ + static void AddBaselineCoordsTohOCR(const PageIterator *it, + PageIteratorLevel level, + STRING* hocr_str) { + tesseract::Orientation orientation = GetBlockTextOrientation(it); + if (orientation != ORIENTATION_PAGE_UP) { + hocr_str->add_str_int("; textangle ", 360 - orientation * 90); + return; + } + + int left, top, right, bottom; + it->BoundingBox(level, &left, &top, &right, &bottom); + + // Try to get the baseline coordinates at this level. + int x1, y1, x2, y2; + if (!it->Baseline(level, &x1, &y1, &x2, &y2)) + return; + // Following the description of this field of the hOCR spec, we convert the + // baseline coordinates so that "the bottom left of the bounding box is the + // origin". + x1 -= left; + x2 -= left; + y1 -= bottom; + y2 -= bottom; + + // Now fit a line through the points so we can extract coefficients for the + // equation: y = p1 x + p0 + double p1 = 0; + double p0 = 0; + if (x1 == x2) { + // Problem computing the polynomial coefficients. + return; + } + p1 = (y2 - y1) / static_cast(x2 - x1); + p0 = y1 - static_cast(p1 * x1); + + hocr_str->add_str_double("; baseline ", round(p1 * 1000.0) / 1000.0); + hocr_str->add_str_double(" ", round(p0 * 1000.0) / 1000.0); + } + + static void AddIdTohOCR(STRING* hocr_str, const std::string base, int num1, + int num2) { + const size_t BUFSIZE = 64; + char id_buffer[BUFSIZE]; + if (num2 >= 0) { + snprintf(id_buffer, BUFSIZE - 1, "%s_%d_%d", base.c_str(), num1, num2); + } + else { + snprintf(id_buffer, BUFSIZE - 1, "%s_%d", base.c_str(), num1); + } + id_buffer[BUFSIZE - 1] = '\0'; + *hocr_str += " id='"; + *hocr_str += id_buffer; + *hocr_str += "'"; + } + + static void AddBoxTohOCR(const ResultIterator* it, PageIteratorLevel level, + STRING* hocr_str) { + int left, top, right, bottom; + it->BoundingBox(level, &left, &top, &right, &bottom); + // This is the only place we use double quotes instead of single quotes, + // but it may too late to change for consistency + hocr_str->add_str_int(" title=\"bbox ", left); + hocr_str->add_str_int(" ", top); + hocr_str->add_str_int(" ", right); + hocr_str->add_str_int(" ", bottom); + // Add baseline coordinates & heights for textlines only. + if (level == RIL_TEXTLINE) { + AddBaselineCoordsTohOCR(it, level, hocr_str); + // add custom height measures + float row_height, descenders, ascenders; // row attributes + it->RowAttributes(&row_height, &descenders, &ascenders); + // TODO(rays): Do we want to limit these to a single decimal place? + hocr_str->add_str_double("; x_size ", row_height); + hocr_str->add_str_double("; x_descenders ", descenders * -1); + hocr_str->add_str_double("; x_ascenders ", ascenders); + } + *hocr_str += "\">"; + } + + static void AddBoxToTSV(const PageIterator* it, PageIteratorLevel level, + STRING* hocr_str) { + int left, top, right, bottom; + it->BoundingBox(level, &left, &top, &right, &bottom); + hocr_str->add_str_int("\t", left); + hocr_str->add_str_int("\t", top); + hocr_str->add_str_int("\t", right - left); + hocr_str->add_str_int("\t", bottom - top); + } + + /** + * Make a HTML-formatted string with hOCR markup from the internal + * data structures. + * page_number is 0-based but will appear in the output as 1-based. + * Image name/input_file_ can be set by SetInputName before calling + * GetHOCRText + * STL removed from original patch submission and refactored by rays. + */ + char* TessBaseAPI::GetHOCRText(int page_number) { + return GetHOCRText(NULL, page_number); + } + + /** + * Make a HTML-formatted string with hOCR markup from the internal + * data structures. + * page_number is 0-based but will appear in the output as 1-based. + * Image name/input_file_ can be set by SetInputName before calling + * GetHOCRText + * STL removed from original patch submission and refactored by rays. + */ + char* TessBaseAPI::GetHOCRText(ETEXT_DESC* monitor, int page_number) { + if (tesseract_ == NULL || (page_res_ == NULL && Recognize(monitor) < 0)) + return NULL; + + int lcnt = 1, bcnt = 1, pcnt = 1, wcnt = 1; + int page_id = page_number + 1; // hOCR uses 1-based page numbers. + bool para_is_ltr = true; // Default direction is LTR + const char* paragraph_lang = NULL; + bool font_info = false; + GetBoolVariable("hocr_font_info", &font_info); + + STRING hocr_str(""); + + if (input_file_ == NULL) + SetInputName(NULL); + +#ifdef _WIN32 + // convert input name from ANSI encoding to utf-8 + int str16_len = + MultiByteToWideChar(CP_ACP, 0, input_file_->string(), -1, NULL, 0); + wchar_t *uni16_str = new WCHAR[str16_len]; + str16_len = MultiByteToWideChar(CP_ACP, 0, input_file_->string(), -1, + uni16_str, str16_len); + int utf8_len = WideCharToMultiByte(CP_UTF8, 0, uni16_str, str16_len, NULL, 0, + NULL, NULL); + char *utf8_str = new char[utf8_len]; + WideCharToMultiByte(CP_UTF8, 0, uni16_str, str16_len, utf8_str, + utf8_len, NULL, NULL); + *input_file_ = utf8_str; + delete[] uni16_str; + delete[] utf8_str; +#endif + + hocr_str += "
string()); + } + else { + hocr_str += "unknown"; + } + hocr_str.add_str_int("\"; bbox ", rect_left_); + hocr_str.add_str_int(" ", rect_top_); + hocr_str.add_str_int(" ", rect_width_); + hocr_str.add_str_int(" ", rect_height_); + hocr_str.add_str_int("; ppageno ", page_number); + hocr_str += "'>\n"; + + ResultIterator *res_it = GetIterator(); + while (!res_it->Empty(RIL_BLOCK)) { + if (res_it->Empty(RIL_WORD)) { + res_it->Next(RIL_WORD); + continue; + } + + // Open any new block/paragraph/textline. + if (res_it->IsAtBeginningOf(RIL_BLOCK)) { + para_is_ltr = true; // reset to default direction + hocr_str += "
IsAtBeginningOf(RIL_PARA)) { + hocr_str += "\n

ParagraphIsLtr(); + if (!para_is_ltr) { + hocr_str += " dir='rtl'"; + } + AddIdTohOCR(&hocr_str, "par", page_id, pcnt); + paragraph_lang = res_it->WordRecognitionLanguage(); + if (paragraph_lang) { + hocr_str += " lang='"; + hocr_str += paragraph_lang; + hocr_str += "'"; + } + AddBoxTohOCR(res_it, RIL_PARA, &hocr_str); + } + if (res_it->IsAtBeginningOf(RIL_TEXTLINE)) { + hocr_str += "\n BoundingBox(RIL_WORD, &left, &top, &right, &bottom); + font_name = res_it->WordFontAttributes(&bold, &italic, &underlined, + &monospace, &serif, &smallcaps, + &pointsize, &font_id); + hocr_str.add_str_int(" title='bbox ", left); + hocr_str.add_str_int(" ", top); + hocr_str.add_str_int(" ", right); + hocr_str.add_str_int(" ", bottom); + hocr_str.add_str_int("; x_wconf ", res_it->Confidence(RIL_WORD)); + if (font_info) { + if (font_name) { + hocr_str += "; x_font "; + hocr_str += HOcrEscape(font_name); + } + hocr_str.add_str_int("; x_fsize ", pointsize); + } + hocr_str += "'"; + const char* lang = res_it->WordRecognitionLanguage(); + if (lang && (!paragraph_lang || strcmp(lang, paragraph_lang))) { + hocr_str += " lang='"; + hocr_str += lang; + hocr_str += "'"; + } + switch (res_it->WordDirection()) { + // Only emit direction if different from current paragraph direction + case DIR_LEFT_TO_RIGHT: + if (!para_is_ltr) hocr_str += " dir='ltr'"; + break; + case DIR_RIGHT_TO_LEFT: + if (para_is_ltr) hocr_str += " dir='rtl'"; + break; + case DIR_MIX: + case DIR_NEUTRAL: + default: // Do nothing. + break; + } + hocr_str += ">"; + bool last_word_in_line = res_it->IsAtFinalElement(RIL_TEXTLINE, RIL_WORD); + bool last_word_in_para = res_it->IsAtFinalElement(RIL_PARA, RIL_WORD); + bool last_word_in_block = res_it->IsAtFinalElement(RIL_BLOCK, RIL_WORD); + if (bold) hocr_str += ""; + if (italic) hocr_str += ""; + do { + const char *grapheme = res_it->GetUTF8Text(RIL_SYMBOL); + if (grapheme && grapheme[0] != 0) { + hocr_str += HOcrEscape(grapheme); + } + delete[]grapheme; + res_it->Next(RIL_SYMBOL); + } while (!res_it->Empty(RIL_BLOCK) && !res_it->IsAtBeginningOf(RIL_WORD)); + if (italic) hocr_str += ""; + if (bold) hocr_str += ""; + hocr_str += " "; + wcnt++; + // Close any ending block/paragraph/textline. + if (last_word_in_line) { + hocr_str += "\n "; + lcnt++; + } + if (last_word_in_para) { + hocr_str += "\n

\n"; + pcnt++; + para_is_ltr = true; // back to default direction + } + if (last_word_in_block) { + hocr_str += "
\n"; + bcnt++; + } + } + hocr_str += "
\n"; + + char *ret = new char[hocr_str.length() + 1]; + strcpy(ret, hocr_str.string()); + delete res_it; + return ret; + } + + /** + * Make a TSV-formatted string from the internal data structures. + * page_number is 0-based but will appear in the output as 1-based. + */ + char* TessBaseAPI::GetTSVText(int page_number) { + if (tesseract_ == NULL || (page_res_ == NULL && Recognize(NULL) < 0)) + return NULL; + + int lcnt = 1, bcnt = 1, pcnt = 1, wcnt = 1; + int page_id = page_number + 1; // we use 1-based page numbers. + + STRING tsv_str(""); + + int page_num = page_id, block_num = 0, par_num = 0, line_num = 0, + word_num = 0; + + tsv_str.add_str_int("1\t", page_num); // level 1 - page + tsv_str.add_str_int("\t", block_num); + tsv_str.add_str_int("\t", par_num); + tsv_str.add_str_int("\t", line_num); + tsv_str.add_str_int("\t", word_num); + tsv_str.add_str_int("\t", rect_left_); + tsv_str.add_str_int("\t", rect_top_); + tsv_str.add_str_int("\t", rect_width_); + tsv_str.add_str_int("\t", rect_height_); + tsv_str += "\t-1\t\n"; + + ResultIterator* res_it = GetIterator(); + while (!res_it->Empty(RIL_BLOCK)) { + if (res_it->Empty(RIL_WORD)) { + res_it->Next(RIL_WORD); + continue; + } + + // Add rows for any new block/paragraph/textline. + if (res_it->IsAtBeginningOf(RIL_BLOCK)) { + block_num++, par_num = 0, line_num = 0, word_num = 0; + tsv_str.add_str_int("2\t", page_num); // level 2 - block + tsv_str.add_str_int("\t", block_num); + tsv_str.add_str_int("\t", par_num); + tsv_str.add_str_int("\t", line_num); + tsv_str.add_str_int("\t", word_num); + AddBoxToTSV(res_it, RIL_BLOCK, &tsv_str); + tsv_str += "\t-1\t\n"; // end of row for block + } + if (res_it->IsAtBeginningOf(RIL_PARA)) { + par_num++, line_num = 0, word_num = 0; + tsv_str.add_str_int("3\t", page_num); // level 3 - paragraph + tsv_str.add_str_int("\t", block_num); + tsv_str.add_str_int("\t", par_num); + tsv_str.add_str_int("\t", line_num); + tsv_str.add_str_int("\t", word_num); + AddBoxToTSV(res_it, RIL_PARA, &tsv_str); + tsv_str += "\t-1\t\n"; // end of row for para + } + if (res_it->IsAtBeginningOf(RIL_TEXTLINE)) { + line_num++, word_num = 0; + tsv_str.add_str_int("4\t", page_num); // level 4 - line + tsv_str.add_str_int("\t", block_num); + tsv_str.add_str_int("\t", par_num); + tsv_str.add_str_int("\t", line_num); + tsv_str.add_str_int("\t", word_num); + AddBoxToTSV(res_it, RIL_TEXTLINE, &tsv_str); + tsv_str += "\t-1\t\n"; // end of row for line + } + + // Now, process the word... + int left, top, right, bottom; + bool bold, italic, underlined, monospace, serif, smallcaps; + int pointsize, font_id; + const char* font_name; + res_it->BoundingBox(RIL_WORD, &left, &top, &right, &bottom); + font_name = + res_it->WordFontAttributes(&bold, &italic, &underlined, &monospace, + &serif, &smallcaps, &pointsize, &font_id); + word_num++; + tsv_str.add_str_int("5\t", page_num); // level 5 - word + tsv_str.add_str_int("\t", block_num); + tsv_str.add_str_int("\t", par_num); + tsv_str.add_str_int("\t", line_num); + tsv_str.add_str_int("\t", word_num); + tsv_str.add_str_int("\t", left); + tsv_str.add_str_int("\t", top); + tsv_str.add_str_int("\t", right - left); + tsv_str.add_str_int("\t", bottom - top); + tsv_str.add_str_int("\t", res_it->Confidence(RIL_WORD)); + tsv_str += "\t"; + + // Increment counts if at end of block/paragraph/textline. + if (res_it->IsAtFinalElement(RIL_TEXTLINE, RIL_WORD)) lcnt++; + if (res_it->IsAtFinalElement(RIL_PARA, RIL_WORD)) pcnt++; + if (res_it->IsAtFinalElement(RIL_BLOCK, RIL_WORD)) bcnt++; + + do { + tsv_str += res_it->GetUTF8Text(RIL_SYMBOL); + res_it->Next(RIL_SYMBOL); + } while (!res_it->Empty(RIL_BLOCK) && !res_it->IsAtBeginningOf(RIL_WORD)); + tsv_str += "\n"; // end of row + wcnt++; + } + + char* ret = new char[tsv_str.length() + 1]; + strcpy(ret, tsv_str.string()); + delete res_it; + return ret; + } + + /** The 5 numbers output for each box (the usual 4 and a page number.) */ + const int kNumbersPerBlob = 5; + /** + * The number of bytes taken by each number. Since we use inT16 for ICOORD, + * assume only 5 digits max. + */ + const int kBytesPerNumber = 5; + /** + * Multiplier for max expected textlength assumes (kBytesPerNumber + space) + * * kNumbersPerBlob plus the newline. Add to this the + * original UTF8 characters, and one kMaxBytesPerLine for safety. + */ + const int kBytesPerBoxFileLine = (kBytesPerNumber + 1) * kNumbersPerBlob + 1; + /** Max bytes in the decimal representation of inT64. */ + const int kBytesPer64BitNumber = 20; + /** + * A maximal single box could occupy kNumbersPerBlob numbers at + * kBytesPer64BitNumber digits (if someone sneaks in a 64 bit value) and a + * space plus the newline and the maximum length of a UNICHAR. + * Test against this on each iteration for safety. + */ + const int kMaxBytesPerLine = kNumbersPerBlob * (kBytesPer64BitNumber + 1) + 1 + + UNICHAR_LEN; + + /** + * The recognized text is returned as a char* which is coded + * as a UTF8 box file and must be freed with the delete [] operator. + * page_number is a 0-base page index that will appear in the box file. + */ + char* TessBaseAPI::GetBoxText(int page_number) { + if (tesseract_ == NULL || + (!recognition_done_ && Recognize(NULL) < 0)) + return NULL; + int blob_count; + int utf8_length = TextLength(&blob_count); + int total_length = blob_count * kBytesPerBoxFileLine + utf8_length + + kMaxBytesPerLine; + char* result = new char[total_length]; + result[0] = '\0'; + int output_length = 0; + LTRResultIterator* it = GetLTRIterator(); + do { + int left, top, right, bottom; + if (it->BoundingBox(RIL_SYMBOL, &left, &top, &right, &bottom)) { + char* text = it->GetUTF8Text(RIL_SYMBOL); + // Tesseract uses space for recognition failure. Fix to a reject + // character, kTesseractReject so we don't create illegal box files. + for (int i = 0; text[i] != '\0'; ++i) { + if (text[i] == ' ') + text[i] = kTesseractReject; + } + snprintf(result + output_length, total_length - output_length, + "%s %d %d %d %d %d\n", + text, left, image_height_ - bottom, + right, image_height_ - top, page_number); + output_length += strlen(result + output_length); + delete[] text; + // Just in case... + if (output_length + kMaxBytesPerLine > total_length) + break; + } + } while (it->Next(RIL_SYMBOL)); + delete it; + return result; + } + + /** + * Conversion table for non-latin characters. + * Maps characters out of the latin set into the latin set. + * TODO(rays) incorporate this translation into unicharset. + */ + const int kUniChs[] = { + 0x20ac, 0x201c, 0x201d, 0x2018, 0x2019, 0x2022, 0x2014, 0 + }; + /** Latin chars corresponding to the unicode chars above. */ + const int kLatinChs[] = { + 0x00a2, 0x0022, 0x0022, 0x0027, 0x0027, 0x00b7, 0x002d, 0 + }; + + /** + * The recognized text is returned as a char* which is coded + * as UNLV format Latin-1 with specific reject and suspect codes + * and must be freed with the delete [] operator. + */ + char* TessBaseAPI::GetUNLVText() { + if (tesseract_ == NULL || + (!recognition_done_ && Recognize(NULL) < 0)) + return NULL; + bool tilde_crunch_written = false; + bool last_char_was_newline = true; + bool last_char_was_tilde = false; + + int total_length = TextLength(NULL); + PAGE_RES_IT page_res_it(page_res_); + char* result = new char[total_length]; + char* ptr = result; + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD_RES *word = page_res_it.word(); + // Process the current word. + if (word->unlv_crunch_mode != CR_NONE) { + if (word->unlv_crunch_mode != CR_DELETE && + (!tilde_crunch_written || + (word->unlv_crunch_mode == CR_KEEP_SPACE && + word->word->space() > 0 && + !word->word->flag(W_FUZZY_NON) && + !word->word->flag(W_FUZZY_SP)))) { + if (!word->word->flag(W_BOL) && + word->word->space() > 0 && + !word->word->flag(W_FUZZY_NON) && + !word->word->flag(W_FUZZY_SP)) { + /* Write a space to separate from preceding good text */ + *ptr++ = ' '; + last_char_was_tilde = false; + } + if (!last_char_was_tilde) { + // Write a reject char. + last_char_was_tilde = true; + *ptr++ = kUNLVReject; + tilde_crunch_written = true; + last_char_was_newline = false; + } + } + } + else { + // NORMAL PROCESSING of non tilde crunched words. + tilde_crunch_written = false; + tesseract_->set_unlv_suspects(word); + const char* wordstr = word->best_choice->unichar_string().string(); + const STRING& lengths = word->best_choice->unichar_lengths(); + int length = lengths.length(); + int i = 0; + int offset = 0; + + if (last_char_was_tilde && + word->word->space() == 0 && wordstr[offset] == ' ') { + // Prevent adjacent tilde across words - we know that adjacent tildes + // within words have been removed. + // Skip the first character. + offset = lengths[i++]; + } + if (i < length && wordstr[offset] != 0) { + if (!last_char_was_newline) + *ptr++ = ' '; + else + last_char_was_newline = false; + for (; i < length; offset += lengths[i++]) { + if (wordstr[offset] == ' ' || + wordstr[offset] == kTesseractReject) { + *ptr++ = kUNLVReject; + last_char_was_tilde = true; + } + else { + if (word->reject_map[i].rejected()) + *ptr++ = kUNLVSuspect; + UNICHAR ch(wordstr + offset, lengths[i]); + int uni_ch = ch.first_uni(); + for (int j = 0; kUniChs[j] != 0; ++j) { + if (kUniChs[j] == uni_ch) { + uni_ch = kLatinChs[j]; + break; + } + } + if (uni_ch <= 0xff) { + *ptr++ = static_cast(uni_ch); + last_char_was_tilde = false; + } + else { + *ptr++ = kUNLVReject; + last_char_was_tilde = true; + } + } + } + } + } + if (word->word->flag(W_EOL) && !last_char_was_newline) { + /* Add a new line output */ + *ptr++ = '\n'; + tilde_crunch_written = false; + last_char_was_newline = true; + last_char_was_tilde = false; + } + } + *ptr++ = '\n'; + *ptr = '\0'; + return result; + } + + /** + * Detect the orientation of the input image and apparent script (alphabet). + * orient_deg is the detected clockwise rotation of the input image in degrees (0, 90, 180, 270) + * orient_conf is the confidence (15.0 is reasonably confident) + * script_name is an ASCII string, the name of the script, e.g. "Latin" + * script_conf is confidence level in the script + * Returns true on success and writes values to each parameter as an output + */ + bool TessBaseAPI::DetectOrientationScript(int* orient_deg, float* orient_conf, const char** script_name, float* script_conf) { + OSResults osr; + + bool osd = DetectOS(&osr); + if (!osd) { + return false; + } + + int orient_id = osr.best_result.orientation_id; + int script_id = osr.get_best_script(orient_id); + if (orient_conf) + *orient_conf = osr.best_result.oconfidence; + if (orient_deg) + *orient_deg = orient_id * 90; // convert quadrant to degrees + + if (script_name) { + const char* script = + osr.unicharset->get_script_from_script_id(script_id); + + *script_name = script; + } + + if (script_conf) + *script_conf = osr.best_result.sconfidence; + + return true; + } + + /** + * The recognized text is returned as a char* which is coded + * as UTF8 and must be freed with the delete [] operator. + * page_number is a 0-based page index that will appear in the osd file. + */ + char* TessBaseAPI::GetOsdText(int page_number) { + int orient_deg; + float orient_conf; + const char* script_name; + float script_conf; + + if (!DetectOrientationScript(&orient_deg, &orient_conf, &script_name, &script_conf)) + return NULL; + + // clockwise rotation needed to make the page upright + int rotate = OrientationIdToValue(orient_deg / 90); + + const int kOsdBufsize = 255; + char* osd_buf = new char[kOsdBufsize]; + snprintf(osd_buf, kOsdBufsize, + "Page number: %d\n" + "Orientation in degrees: %d\n" + "Rotate: %d\n" + "Orientation confidence: %.2f\n" + "Script: %s\n" + "Script confidence: %.2f\n", + page_number, orient_deg, rotate, orient_conf, script_name, + script_conf); + + return osd_buf; + } + + /** Returns the average word confidence for Tesseract page result. */ + int TessBaseAPI::MeanTextConf() { + int* conf = AllWordConfidences(); + if (!conf) return 0; + int sum = 0; + int *pt = conf; + while (*pt >= 0) sum += *pt++; + if (pt != conf) sum /= pt - conf; + delete[] conf; + return sum; + } + + /** Returns an array of all word confidences, terminated by -1. */ + int* TessBaseAPI::AllWordConfidences() { + if (tesseract_ == NULL || + (!recognition_done_ && Recognize(NULL) < 0)) + return NULL; + int n_word = 0; + PAGE_RES_IT res_it(page_res_); + for (res_it.restart_page(); res_it.word() != NULL; res_it.forward()) + n_word++; + + int* conf = new int[n_word + 1]; + n_word = 0; + for (res_it.restart_page(); res_it.word() != NULL; res_it.forward()) { + WERD_RES *word = res_it.word(); + WERD_CHOICE* choice = word->best_choice; + int w_conf = static_cast(100 + 5 * choice->certainty()); + // This is the eq for converting Tesseract confidence to 1..100 + if (w_conf < 0) w_conf = 0; + if (w_conf > 100) w_conf = 100; + conf[n_word++] = w_conf; + } + conf[n_word] = -1; + return conf; + } + + /** + * Applies the given word to the adaptive classifier if possible. + * The word must be SPACE-DELIMITED UTF-8 - l i k e t h i s , so it can + * tell the boundaries of the graphemes. + * Assumes that SetImage/SetRectangle have been used to set the image + * to the given word. The mode arg should be PSM_SINGLE_WORD or + * PSM_CIRCLE_WORD, as that will be used to control layout analysis. + * The currently set PageSegMode is preserved. + * Returns false if adaption was not possible for some reason. + */ + bool TessBaseAPI::AdaptToWordStr(PageSegMode mode, const char* wordstr) { + int debug = 0; + GetIntVariable("applybox_debug", &debug); + bool success = true; + PageSegMode current_psm = GetPageSegMode(); + SetPageSegMode(mode); + SetVariable("classify_enable_learning", "0"); + char* text = GetUTF8Text(); + if (debug) { + tprintf("Trying to adapt \"%s\" to \"%s\"\n", text, wordstr); + } + if (text != NULL) { + PAGE_RES_IT it(page_res_); + WERD_RES* word_res = it.word(); + if (word_res != NULL) { + word_res->word->set_text(wordstr); + } + else { + success = false; + } + // Check to see if text matches wordstr. + int w = 0; + int t = 0; + for (t = 0; text[t] != '\0'; ++t) { + if (text[t] == '\n' || text[t] == ' ') + continue; + while (wordstr[w] != '\0' && wordstr[w] == ' ') + ++w; + if (text[t] != wordstr[w]) + break; + ++w; + } + if (text[t] != '\0' || wordstr[w] != '\0') { + // No match. + delete page_res_; + GenericVector boxes; + page_res_ = tesseract_->SetupApplyBoxes(boxes, block_list_); + tesseract_->ReSegmentByClassification(page_res_); + tesseract_->TidyUp(page_res_); + PAGE_RES_IT pr_it(page_res_); + if (pr_it.word() == NULL) + success = false; + else + word_res = pr_it.word(); + } + else { + word_res->BestChoiceToCorrectText(); + } + if (success) { + tesseract_->EnableLearning = true; + tesseract_->LearnWord(NULL, word_res); + } + delete[] text; + } + else { + success = false; + } + SetPageSegMode(current_psm); + return success; + } + + /** + * Free up recognition results and any stored image data, without actually + * freeing any recognition data that would be time-consuming to reload. + * Afterwards, you must call SetImage or TesseractRect before doing + * any Recognize or Get* operation. + */ + void TessBaseAPI::Clear() { + if (thresholder_ != NULL) + thresholder_->Clear(); + ClearResults(); + if (tesseract_ != NULL) SetInputImage(NULL); + } + + /** + * Close down tesseract and free up all memory. End() is equivalent to + * destructing and reconstructing your TessBaseAPI. + * Once End() has been used, none of the other API functions may be used + * other than Init and anything declared above it in the class definition. + */ + void TessBaseAPI::End() { + Clear(); + delete thresholder_; + thresholder_ = NULL; + delete page_res_; + page_res_ = NULL; + delete block_list_; + block_list_ = NULL; + if (paragraph_models_ != NULL) { + paragraph_models_->delete_data_pointers(); + delete paragraph_models_; + paragraph_models_ = NULL; + } + if (osd_tesseract_ == tesseract_) + osd_tesseract_ = NULL; + delete tesseract_; + tesseract_ = NULL; + delete osd_tesseract_; + osd_tesseract_ = NULL; + delete equ_detect_; + equ_detect_ = NULL; + delete input_file_; + input_file_ = NULL; + delete output_file_; + output_file_ = NULL; + delete datapath_; + datapath_ = NULL; + delete language_; + language_ = NULL; + } + + // Clear any library-level memory caches. + // There are a variety of expensive-to-load constant data structures (mostly + // language dictionaries) that are cached globally -- surviving the Init() + // and End() of individual TessBaseAPI's. This function allows the clearing + // of these caches. + void TessBaseAPI::ClearPersistentCache() { + Dict::GlobalDawgCache()->DeleteUnusedDawgs(); + } + + /** + * Check whether a word is valid according to Tesseract's language model + * returns 0 if the word is invalid, non-zero if valid + */ + int TessBaseAPI::IsValidWord(const char *word) { + return tesseract_->getDict().valid_word(word); + } + // Returns true if utf8_character is defined in the UniCharset. + bool TessBaseAPI::IsValidCharacter(const char *utf8_character) { + return tesseract_->unicharset.contains_unichar(utf8_character); + } + + + // TODO(rays) Obsolete this function and replace with a more aptly named + // function that returns image coordinates rather than tesseract coordinates. + bool TessBaseAPI::GetTextDirection(int* out_offset, float* out_slope) { + PageIterator* it = AnalyseLayout(); + if (it == NULL) { + return false; + } + int x1, x2, y1, y2; + it->Baseline(RIL_TEXTLINE, &x1, &y1, &x2, &y2); + // Calculate offset and slope (NOTE: Kind of ugly) + if (x2 <= x1) x2 = x1 + 1; + // Convert the point pair to slope/offset of the baseline (in image coords.) + *out_slope = static_cast(y2 - y1) / (x2 - x1); + *out_offset = static_cast(y1 - *out_slope * x1); + // Get the y-coord of the baseline at the left and right edges of the + // textline's bounding box. + int left, top, right, bottom; + if (!it->BoundingBox(RIL_TEXTLINE, &left, &top, &right, &bottom)) { + delete it; + return false; + } + int left_y = IntCastRounded(*out_slope * left + *out_offset); + int right_y = IntCastRounded(*out_slope * right + *out_offset); + // Shift the baseline down so it passes through the nearest bottom-corner + // of the textline's bounding box. This is the difference between the y + // at the lowest (max) edge of the box and the actual box bottom. + *out_offset += bottom - MAX(left_y, right_y); + // Switch back to bottom-up tesseract coordinates. Requires negation of + // the slope and height - offset for the offset. + *out_slope = -*out_slope; + *out_offset = rect_height_ - *out_offset; + delete it; + + return true; + } + + /** Sets Dict::letter_is_okay_ function to point to the given function. */ + void TessBaseAPI::SetDictFunc(DictFunc f) { + if (tesseract_ != NULL) { + tesseract_->getDict().letter_is_okay_ = f; + } + } + + /** + * Sets Dict::probability_in_context_ function to point to the given + * function. + * + * @param f A single function that returns the probability of the current + * "character" (in general a utf-8 string), given the context of a previous + * utf-8 string. + */ + void TessBaseAPI::SetProbabilityInContextFunc(ProbabilityInContextFunc f) { + if (tesseract_ != NULL) { + tesseract_->getDict().probability_in_context_ = f; + // Set it for the sublangs too. + int num_subs = tesseract_->num_sub_langs(); + for (int i = 0; i < num_subs; ++i) { + tesseract_->get_sub_lang(i)->getDict().probability_in_context_ = f; + } + } + } + + /** Sets Wordrec::fill_lattice_ function to point to the given function. */ + void TessBaseAPI::SetFillLatticeFunc(FillLatticeFunc f) { + if (tesseract_ != NULL) tesseract_->fill_lattice_ = f; + } + + /** Common code for setting the image. */ + bool TessBaseAPI::InternalSetImage() { + if (tesseract_ == NULL) { + tprintf("Please call Init before attempting to set an image."); + return false; + } + if (thresholder_ == NULL) + thresholder_ = new ImageThresholder; + ClearResults(); + return true; + } + + /** + * Run the thresholder to make the thresholded image, returned in pix, + * which must not be NULL. *pix must be initialized to NULL, or point + * to an existing pixDestroyable Pix. + * The usual argument to Threshold is Tesseract::mutable_pix_binary(). + */ + void TessBaseAPI::Threshold(Pix** pix) { + ASSERT_HOST(pix != NULL); + if (*pix != NULL) + pixDestroy(pix); + // Zero resolution messes up the algorithms, so make sure it is credible. + int y_res = thresholder_->GetScaledYResolution(); + if (y_res < kMinCredibleResolution || y_res > kMaxCredibleResolution) { + // Use the minimum default resolution, as it is safer to under-estimate + // than over-estimate resolution. + tprintf("Warning. Invalid resolution %d dpi. Using %d instead.\n", + y_res, kMinCredibleResolution); + thresholder_->SetSourceYResolution(kMinCredibleResolution); + } + PageSegMode pageseg_mode = + static_cast( + static_cast(tesseract_->tessedit_pageseg_mode)); + thresholder_->ThresholdToPix(pageseg_mode, pix); + thresholder_->GetImageSizes(&rect_left_, &rect_top_, + &rect_width_, &rect_height_, + &image_width_, &image_height_); + if (!thresholder_->IsBinary()) { + tesseract_->set_pix_thresholds(thresholder_->GetPixRectThresholds()); + tesseract_->set_pix_grey(thresholder_->GetPixRectGrey()); + } + else { + tesseract_->set_pix_thresholds(NULL); + tesseract_->set_pix_grey(NULL); + } + // Set the internal resolution that is used for layout parameters from the + // estimated resolution, rather than the image resolution, which may be + // fabricated, but we will use the image resolution, if there is one, to + // report output point sizes. + int estimated_res = ClipToRange(thresholder_->GetScaledEstimatedResolution(), + kMinCredibleResolution, + kMaxCredibleResolution); + if (estimated_res != thresholder_->GetScaledEstimatedResolution()) { + tprintf("Estimated resolution %d out of range! Corrected to %d\n", + thresholder_->GetScaledEstimatedResolution(), estimated_res); + } + tesseract_->set_source_resolution(estimated_res); + SavePixForCrash(estimated_res, *pix); + } + + /** Find lines from the image making the BLOCK_LIST. */ + int TessBaseAPI::FindLines() { + if (thresholder_ == NULL || thresholder_->IsEmpty()) { + tprintf("Please call SetImage before attempting recognition."); + return -1; + } + if (recognition_done_) + ClearResults(); + if (!block_list_->empty()) { + return 0; + } + if (tesseract_ == NULL) { + tesseract_ = new Tesseract; + tesseract_->InitAdaptiveClassifier(false); + } + if (tesseract_->pix_binary() == NULL) + Threshold(tesseract_->mutable_pix_binary()); + if (tesseract_->ImageWidth() > MAX_INT16 || + tesseract_->ImageHeight() > MAX_INT16) { + tprintf("Image too large: (%d, %d)\n", + tesseract_->ImageWidth(), tesseract_->ImageHeight()); + return -1; + } + + tesseract_->PrepareForPageseg(); + + if (tesseract_->textord_equation_detect) { + if (equ_detect_ == NULL && datapath_ != NULL) { + equ_detect_ = new EquationDetect(datapath_->string(), NULL); + } + tesseract_->SetEquationDetect(equ_detect_); + } + + Tesseract* osd_tess = osd_tesseract_; + OSResults osr; + if (PSM_OSD_ENABLED(tesseract_->tessedit_pageseg_mode) && osd_tess == NULL) { + if (strcmp(language_->string(), "osd") == 0) { + osd_tess = tesseract_; + } + else { + osd_tesseract_ = new Tesseract; + if (osd_tesseract_->init_tesseract( + datapath_->string(), NULL, "osd", OEM_TESSERACT_ONLY, + NULL, 0, NULL, NULL, false) == 0) { + osd_tess = osd_tesseract_; + osd_tesseract_->set_source_resolution( + thresholder_->GetSourceYResolution()); + } + else { + tprintf("Warning: Auto orientation and script detection requested," + " but osd language failed to load\n"); + delete osd_tesseract_; + osd_tesseract_ = NULL; + } + } + } + + if (tesseract_->SegmentPage(input_file_, block_list_, osd_tess, &osr) < 0) + return -1; + // If Devanagari is being recognized, we use different images for page seg + // and for OCR. + tesseract_->PrepareForTessOCR(block_list_, osd_tess, &osr); + return osr.best_result.orientation_id; + return 0; + } + + /** Delete the pageres and clear the block list ready for a new page. */ + void TessBaseAPI::ClearResults() { + if (tesseract_ != NULL) { + tesseract_->Clear(); + } + if (page_res_ != NULL) { + delete page_res_; + page_res_ = NULL; + } + recognition_done_ = false; + if (block_list_ == NULL) + block_list_ = new BLOCK_LIST; + else + block_list_->clear(); + if (paragraph_models_ != NULL) { + paragraph_models_->delete_data_pointers(); + delete paragraph_models_; + paragraph_models_ = NULL; + } + SavePixForCrash(0, NULL); + } + + /** + * Return the length of the output text string, as UTF8, assuming + * liberally two spacing marks after each word (as paragraphs end with two + * newlines), and assuming a single character reject marker for each rejected + * character. + * Also return the number of recognized blobs in blob_count. + */ + int TessBaseAPI::TextLength(int* blob_count) { + if (tesseract_ == NULL || page_res_ == NULL) + return 0; + + PAGE_RES_IT page_res_it(page_res_); + int total_length = 2; + int total_blobs = 0; + // Iterate over the data structures to extract the recognition result. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD_RES *word = page_res_it.word(); + WERD_CHOICE* choice = word->best_choice; + if (choice != NULL) { + total_blobs += choice->length() + 2; + total_length += choice->unichar_string().length() + 2; + for (int i = 0; i < word->reject_map.length(); ++i) { + if (word->reject_map[i].rejected()) + ++total_length; + } + } + } + if (blob_count != NULL) + *blob_count = total_blobs; + return total_length; + } + + /** + * Estimates the Orientation And Script of the image. + * Returns true if the image was processed successfully. + */ + bool TessBaseAPI::DetectOS(OSResults* osr) { + if (tesseract_ == NULL) + return false; + ClearResults(); + if (tesseract_->pix_binary() == NULL) + Threshold(tesseract_->mutable_pix_binary()); + if (input_file_ == NULL) + input_file_ = new STRING(kInputFile); + return orientation_and_script_detection(*input_file_, osr, tesseract_); + } + + void TessBaseAPI::set_min_orientation_margin(double margin) { + tesseract_->min_orientation_margin.set_value(margin); + } + + /** + * Return text orientation of each block as determined in an earlier page layout + * analysis operation. Orientation is returned as the number of ccw 90-degree + * rotations (in [0..3]) required to make the text in the block upright + * (readable). Note that this may not necessary be the block orientation + * preferred for recognition (such as the case of vertical CJK text). + * + * Also returns whether the text in the block is believed to have vertical + * writing direction (when in an upright page orientation). + * + * The returned array is of length equal to the number of text blocks, which may + * be less than the total number of blocks. The ordering is intended to be + * consistent with GetTextLines(). + */ + void TessBaseAPI::GetBlockTextOrientations(int** block_orientation, + bool** vertical_writing) { + delete[] * block_orientation; + *block_orientation = NULL; + delete[] * vertical_writing; + *vertical_writing = NULL; + BLOCK_IT block_it(block_list_); + + block_it.move_to_first(); + int num_blocks = 0; + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { + if (!block_it.data()->poly_block()->IsText()) { + continue; + } + ++num_blocks; + } + if (!num_blocks) { + tprintf("WARNING: Found no blocks\n"); + return; + } + *block_orientation = new int[num_blocks]; + *vertical_writing = new bool[num_blocks]; + block_it.move_to_first(); + int i = 0; + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); + block_it.forward()) { + if (!block_it.data()->poly_block()->IsText()) { + continue; + } + FCOORD re_rotation = block_it.data()->re_rotation(); + float re_theta = re_rotation.angle(); + FCOORD classify_rotation = block_it.data()->classify_rotation(); + float classify_theta = classify_rotation.angle(); + double rot_theta = -(re_theta - classify_theta) * 2.0 / PI; + if (rot_theta < 0) rot_theta += 4; + int num_rotations = static_cast(rot_theta + 0.5); + (*block_orientation)[i] = num_rotations; + // The classify_rotation is non-zero only if the text has vertical + // writing direction. + (*vertical_writing)[i] = classify_rotation.y() != 0.0f; + ++i; + } + } + + // ____________________________________________________________________________ + // Ocropus add-ons. + + /** Find lines from the image making the BLOCK_LIST. */ + BLOCK_LIST* TessBaseAPI::FindLinesCreateBlockList() { + FindLines(); + BLOCK_LIST* result = block_list_; + block_list_ = NULL; + return result; + } + + /** + * Delete a block list. + * This is to keep BLOCK_LIST pointer opaque + * and let go of including the other headers. + */ + void TessBaseAPI::DeleteBlockList(BLOCK_LIST *block_list) { + delete block_list; + } + + + ROW *TessBaseAPI::MakeTessOCRRow(float baseline, + float xheight, + float descender, + float ascender) { + inT32 xstarts[] = { -32000 }; + double quad_coeffs[] = { 0, 0, baseline }; + return new ROW(1, + xstarts, + quad_coeffs, + xheight, + ascender - (baseline + xheight), + descender - baseline, + 0, + 0); + } + + /** Creates a TBLOB* from the whole pix. */ + TBLOB *TessBaseAPI::MakeTBLOB(Pix *pix) { + int width = pixGetWidth(pix); + int height = pixGetHeight(pix); + BLOCK block("a character", TRUE, 0, 0, 0, 0, width, height); + + // Create C_BLOBs from the page + extract_edges(pix, &block); + + // Merge all C_BLOBs + C_BLOB_LIST *list = block.blob_list(); + C_BLOB_IT c_blob_it(list); + if (c_blob_it.empty()) + return NULL; + // Move all the outlines to the first blob. + C_OUTLINE_IT ol_it(c_blob_it.data()->out_list()); + for (c_blob_it.forward(); + !c_blob_it.at_first(); + c_blob_it.forward()) { + C_BLOB *c_blob = c_blob_it.data(); + ol_it.add_list_after(c_blob->out_list()); + } + // Convert the first blob to the output TBLOB. + return TBLOB::PolygonalCopy(false, c_blob_it.data()); + } + + /** + * This method baseline normalizes a TBLOB in-place. The input row is used + * for normalization. The denorm is an optional parameter in which the + * normalization-antidote is returned. + */ + void TessBaseAPI::NormalizeTBLOB(TBLOB *tblob, ROW *row, bool numeric_mode) { + TBOX box = tblob->bounding_box(); + float x_center = (box.left() + box.right()) / 2.0f; + float baseline = row->base_line(x_center); + float scale = kBlnXHeight / row->x_height(); + tblob->Normalize(NULL, NULL, NULL, x_center, baseline, scale, scale, + 0.0f, static_cast(kBlnBaselineOffset), false, NULL); + } + + /** + * Return a TBLOB * from the whole pix. + * To be freed later with delete. + */ + TBLOB *make_tesseract_blob(float baseline, float xheight, + float descender, float ascender, + bool numeric_mode, Pix* pix) { + TBLOB *tblob = TessBaseAPI::MakeTBLOB(pix); + + // Normalize TBLOB + ROW *row = + TessBaseAPI::MakeTessOCRRow(baseline, xheight, descender, ascender); + TessBaseAPI::NormalizeTBLOB(tblob, row, numeric_mode); + delete row; + return tblob; + } + + /** + * Adapt to recognize the current image as the given character. + * The image must be preloaded into pix_binary_ and be just an image + * of a single character. + */ + void TessBaseAPI::AdaptToCharacter(const char *unichar_repr, + int length, + float baseline, + float xheight, + float descender, + float ascender) { + UNICHAR_ID id = tesseract_->unicharset.unichar_to_id(unichar_repr, length); + TBLOB *blob = make_tesseract_blob(baseline, xheight, descender, ascender, + tesseract_->classify_bln_numeric_mode, + tesseract_->pix_binary()); + float threshold; + float best_rating = -100; + + + // Classify to get a raw choice. + BLOB_CHOICE_LIST choices; + tesseract_->AdaptiveClassifier(blob, &choices); + BLOB_CHOICE_IT choice_it; + choice_it.set_to_list(&choices); + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list(); + choice_it.forward()) { + if (choice_it.data()->rating() > best_rating) { + best_rating = choice_it.data()->rating(); + } + } + + threshold = tesseract_->matcher_good_threshold; + + if (blob->outlines) + tesseract_->AdaptToChar(blob, id, kUnknownFontinfoId, threshold, + tesseract_->AdaptedTemplates); + delete blob; + } + + + PAGE_RES* TessBaseAPI::RecognitionPass1(BLOCK_LIST* block_list) { + PAGE_RES *page_res = new PAGE_RES(false, block_list, + &(tesseract_->prev_word_best_choice_)); + tesseract_->recog_all_words(page_res, NULL, NULL, NULL, 1); + return page_res; + } + + PAGE_RES* TessBaseAPI::RecognitionPass2(BLOCK_LIST* block_list, + PAGE_RES* pass1_result) { + if (!pass1_result) + pass1_result = new PAGE_RES(false, block_list, + &(tesseract_->prev_word_best_choice_)); + tesseract_->recog_all_words(pass1_result, NULL, NULL, NULL, 2); + return pass1_result; + } + + void TessBaseAPI::DetectParagraphs(bool after_text_recognition) { + int debug_level = 0; + GetIntVariable("paragraph_debug_level", &debug_level); + if (paragraph_models_ == NULL) + paragraph_models_ = new GenericVector; + MutableIterator *result_it = GetMutableIterator(); + do { // Detect paragraphs for this block + GenericVector models; + ::tesseract::DetectParagraphs(debug_level, after_text_recognition, + result_it, &models); + *paragraph_models_ += models; + } while (result_it->Next(RIL_BLOCK)); + delete result_it; + } + + struct TESS_CHAR : ELIST_LINK { + char *unicode_repr; + int length; // of unicode_repr + float cost; + TBOX box; + + TESS_CHAR(float _cost, const char *repr, int len = -1) : cost(_cost) { + length = (len == -1 ? strlen(repr) : len); + unicode_repr = new char[length + 1]; + strncpy(unicode_repr, repr, length); + } + + TESS_CHAR() { // Satisfies ELISTIZE. + } + ~TESS_CHAR() { + delete[] unicode_repr; + } + }; + + ELISTIZEH(TESS_CHAR) + ELISTIZE(TESS_CHAR) + + static void add_space(TESS_CHAR_IT* it) { + TESS_CHAR *t = new TESS_CHAR(0, " "); + it->add_after_then_move(t); + } + + + static float rating_to_cost(float rating) { + rating = 100 + rating; + // cuddled that to save from coverage profiler + // (I have never seen ratings worse than -100, + // but the check won't hurt) + if (rating < 0) rating = 0; + return rating; + } + + /** + * Extract the OCR results, costs (penalty points for uncertainty), + * and the bounding boxes of the characters. + */ + static void extract_result(TESS_CHAR_IT* out, + PAGE_RES* page_res) { + PAGE_RES_IT page_res_it(page_res); + int word_count = 0; + while (page_res_it.word() != NULL) { + WERD_RES *word = page_res_it.word(); + const char *str = word->best_choice->unichar_string().string(); + const char *len = word->best_choice->unichar_lengths().string(); + TBOX real_rect = word->word->bounding_box(); + + if (word_count) + add_space(out); + int n = strlen(len); + for (int i = 0; i < n; i++) { + TESS_CHAR *tc = new TESS_CHAR(rating_to_cost(word->best_choice->rating()), + str, *len); + tc->box = real_rect.intersection(word->box_word->BlobBox(i)); + out->add_after_then_move(tc); + str += *len; + len++; + } + page_res_it.forward(); + word_count++; + } + } + + /** + * Extract the OCR results, costs (penalty points for uncertainty), + * and the bounding boxes of the characters. + */ + int TessBaseAPI::TesseractExtractResult(char** text, + int** lengths, + float** costs, + int** x0, + int** y0, + int** x1, + int** y1, + PAGE_RES* page_res) { + TESS_CHAR_LIST tess_chars; + TESS_CHAR_IT tess_chars_it(&tess_chars); + extract_result(&tess_chars_it, page_res); + tess_chars_it.move_to_first(); + int n = tess_chars.length(); + int text_len = 0; + *lengths = new int[n]; + *costs = new float[n]; + *x0 = new int[n]; + *y0 = new int[n]; + *x1 = new int[n]; + *y1 = new int[n]; + int i = 0; + for (tess_chars_it.mark_cycle_pt(); + !tess_chars_it.cycled_list(); + tess_chars_it.forward(), i++) { + TESS_CHAR *tc = tess_chars_it.data(); + text_len += (*lengths)[i] = tc->length; + (*costs)[i] = tc->cost; + (*x0)[i] = tc->box.left(); + (*y0)[i] = tc->box.bottom(); + (*x1)[i] = tc->box.right(); + (*y1)[i] = tc->box.top(); + } + char *p = *text = new char[text_len]; + + tess_chars_it.move_to_first(); + for (tess_chars_it.mark_cycle_pt(); + !tess_chars_it.cycled_list(); + tess_chars_it.forward()) { + TESS_CHAR *tc = tess_chars_it.data(); + strncpy(p, tc->unicode_repr, tc->length); + p += tc->length; + } + return n; + } + + /** This method returns the features associated with the input blob. */ + // The resulting features are returned in int_features, which must be + // of size MAX_NUM_INT_FEATURES. The number of features is returned in + // num_features (or 0 if there was a failure). + // On return feature_outline_index is filled with an index of the outline + // corresponding to each feature in int_features. + // TODO(rays) Fix the caller to out outline_counts instead. + void TessBaseAPI::GetFeaturesForBlob(TBLOB* blob, + INT_FEATURE_STRUCT* int_features, + int* num_features, + int* feature_outline_index) { + GenericVector outline_counts; + GenericVector bl_features; + GenericVector cn_features; + INT_FX_RESULT_STRUCT fx_info; + tesseract_->ExtractFeatures(*blob, false, &bl_features, + &cn_features, &fx_info, &outline_counts); + if (cn_features.empty() || cn_features.size() > MAX_NUM_INT_FEATURES) { + *num_features = 0; + return; // Feature extraction failed. + } + *num_features = cn_features.size(); + memcpy(int_features, &cn_features[0], *num_features * sizeof(cn_features[0])); + // TODO(rays) Pass outline_counts back and simplify the calling code. + if (feature_outline_index != NULL) { + int f = 0; + for (int i = 0; i < outline_counts.size(); ++i) { + while (f < outline_counts[i]) + feature_outline_index[f++] = i; + } + } + } + + // This method returns the row to which a box of specified dimensions would + // belong. If no good match is found, it returns NULL. + ROW* TessBaseAPI::FindRowForBox(BLOCK_LIST* blocks, + int left, int top, int right, int bottom) { + TBOX box(left, bottom, right, top); + BLOCK_IT b_it(blocks); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + BLOCK* block = b_it.data(); + if (!box.major_overlap(block->bounding_box())) + continue; + ROW_IT r_it(block->row_list()); + for (r_it.mark_cycle_pt(); !r_it.cycled_list(); r_it.forward()) { + ROW* row = r_it.data(); + if (!box.major_overlap(row->bounding_box())) + continue; + WERD_IT w_it(row->word_list()); + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + WERD* word = w_it.data(); + if (box.major_overlap(word->bounding_box())) + return row; + } + } + } + return NULL; + } + + /** Method to run adaptive classifier on a blob. */ + void TessBaseAPI::RunAdaptiveClassifier(TBLOB* blob, + int num_max_matches, + int* unichar_ids, + float* ratings, + int* num_matches_returned) { + BLOB_CHOICE_LIST* choices = new BLOB_CHOICE_LIST; + tesseract_->AdaptiveClassifier(blob, choices); + BLOB_CHOICE_IT choices_it(choices); + int& index = *num_matches_returned; + index = 0; + for (choices_it.mark_cycle_pt(); + !choices_it.cycled_list() && index < num_max_matches; + choices_it.forward()) { + BLOB_CHOICE* choice = choices_it.data(); + unichar_ids[index] = choice->unichar_id(); + ratings[index] = choice->rating(); + ++index; + } + *num_matches_returned = index; + delete choices; + } + + /** This method returns the string form of the specified unichar. */ + const char* TessBaseAPI::GetUnichar(int unichar_id) { + return tesseract_->unicharset.id_to_unichar(unichar_id); + } + + /** Return the pointer to the i-th dawg loaded into tesseract_ object. */ + const Dawg *TessBaseAPI::GetDawg(int i) const { + if (tesseract_ == NULL || i >= NumDawgs()) return NULL; + return tesseract_->getDict().GetDawg(i); + } + + /** Return the number of dawgs loaded into tesseract_ object. */ + int TessBaseAPI::NumDawgs() const { + return tesseract_ == NULL ? 0 : tesseract_->getDict().NumDawgs(); + } + +#ifndef NO_CUBE_BUILD + /** Return a pointer to underlying CubeRecoContext object if present. */ + CubeRecoContext *TessBaseAPI::GetCubeRecoContext() const { + return (tesseract_ == NULL) ? NULL : tesseract_->GetCubeRecoContext(); + } +#endif // NO_CUBE_BUILD + + /** Escape a char string - remove <>&"' with HTML codes. */ + STRING HOcrEscape(const char* text) { + STRING ret; + const char *ptr; + for (ptr = text; *ptr; ptr++) { + switch (*ptr) { + case '<': ret += "<"; break; + case '>': ret += ">"; break; + case '&': ret += "&"; break; + case '"': ret += """; break; + case '\'': ret += "'"; break; + default: ret += *ptr; + } + } + return ret; + } + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/api/baseapi.h b/3rdparty/hgOCR/include/api/baseapi.h new file mode 100644 index 00000000..da283cfe --- /dev/null +++ b/3rdparty/hgOCR/include/api/baseapi.h @@ -0,0 +1,922 @@ +/////////////////////////////////////////////////////////////////////// +// File: baseapi.h +// Description: Simple API for calling tesseract. +// Author: Ray Smith +// Created: Fri Oct 06 15:35:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_API_BASEAPI_H__ +#define TESSERACT_API_BASEAPI_H__ + +#define TESSERACT_VERSION_STR "3.05.02" +#define TESSERACT_VERSION 0x030502 +#define MAKE_VERSION(major, minor, patch) (((major) << 16) | ((minor) << 8) | \ + (patch)) + +#include +// To avoid collision with other typenames include the ABSOLUTE MINIMUM +// complexity of includes here. Use forward declarations wherever possible +// and hide includes of complex types in baseapi.cpp. +#include "platform.h" +#include "apitypes.h" +#include "thresholder.h" +#include "unichar.h" +#include "tesscallback.h" +#include "publictypes.h" +#include "pageiterator.h" +#include "resultiterator.h" + +template class GenericVector; +class PAGE_RES; +class PAGE_RES_IT; +class ParagraphModel; +struct BlamerBundle; +class BLOCK_LIST; +class DENORM; +class MATRIX; +class ROW; +class STRING; +class WERD; +struct Pix; +struct Box; +struct Pixa; +struct Boxa; +class ETEXT_DESC; +struct OSResults; +class TBOX; +class UNICHARSET; +class WERD_CHOICE_LIST; + +struct INT_FEATURE_STRUCT; +typedef INT_FEATURE_STRUCT *INT_FEATURE; +struct TBLOB; + +namespace tesseract { + +#ifndef NO_CUBE_BUILD + class CubeRecoContext; +#endif // NO_CUBE_BUILD + class Dawg; + class Dict; + class EquationDetect; + class PageIterator; + class LTRResultIterator; + class ResultIterator; + class MutableIterator; + class TessResultRenderer; + class Tesseract; + class Trie; + class Wordrec; + + typedef int (Dict::*DictFunc)(void* void_dawg_args, + UNICHAR_ID unichar_id, bool word_end) const; + typedef double (Dict::*ProbabilityInContextFunc)(const char* lang, + const char* context, + int context_bytes, + const char* character, + int character_bytes); + typedef float (Dict::*ParamsModelClassifyFunc)( + const char *lang, void *path); + typedef void (Wordrec::*FillLatticeFunc)(const MATRIX &ratings, + const WERD_CHOICE_LIST &best_choices, + const UNICHARSET &unicharset, + BlamerBundle *blamer_bundle); + typedef TessCallback4 + TruthCallback; + + /** + * Base class for all tesseract APIs. + * Specific classes can add ability to work on different inputs or produce + * different outputs. + * This class is mostly an interface layer on top of the Tesseract instance + * class to hide the data types so that users of this class don't have to + * include any other Tesseract headers. + */ + class TESS_API TessBaseAPI { + public: + TessBaseAPI(); + virtual ~TessBaseAPI(); + + /** + * Returns the version identifier as a static string. Do not delete. + */ + static const char* Version(); + + /** + * If compiled with OpenCL AND an available OpenCL + * device is deemed faster than serial code, then + * "device" is populated with the cl_device_id + * and returns sizeof(cl_device_id) + * otherwise *device=NULL and returns 0. + */ + static size_t getOpenCLDevice(void **device); + + /** + * Writes the thresholded image to stderr as a PBM file on receipt of a + * SIGSEGV, SIGFPE, or SIGBUS signal. (Linux/Unix only). + */ + static void CatchSignals(); + + /** + * Set the name of the input file. Needed for training and + * reading a UNLV zone file, and for searchable PDF output. + */ + void SetInputName(const char* name); + /** + * These functions are required for searchable PDF output. + * We need our hands on the input file so that we can include + * it in the PDF without transcoding. If that is not possible, + * we need the original image. Finally, resolution metadata + * is stored in the PDF so we need that as well. + */ + const char* GetInputName(); + // Takes ownership of the input pix. + void SetInputImage(Pix *pix); + Pix* GetInputImage(); + int GetSourceYResolution(); + const char* GetDatapath(); + + /** Set the name of the bonus output files. Needed only for debugging. */ + void SetOutputName(const char* name); + + /** + * Set the value of an internal "parameter." + * Supply the name of the parameter and the value as a string, just as + * you would in a config file. + * Returns false if the name lookup failed. + * Eg SetVariable("tessedit_char_blacklist", "xyz"); to ignore x, y and z. + * Or SetVariable("classify_bln_numeric_mode", "1"); to set numeric-only mode. + * SetVariable may be used before Init, but settings will revert to + * defaults on End(). + * + * Note: Must be called after Init(). Only works for non-init variables + * (init variables should be passed to Init()). + */ + bool SetVariable(const char* name, const char* value); + bool SetDebugVariable(const char* name, const char* value); + + /** + * Returns true if the parameter was found among Tesseract parameters. + * Fills in value with the value of the parameter. + */ + bool GetIntVariable(const char *name, int *value) const; + bool GetBoolVariable(const char *name, bool *value) const; + bool GetDoubleVariable(const char *name, double *value) const; + + /** + * Returns the pointer to the string that represents the value of the + * parameter if it was found among Tesseract parameters. + */ + const char *GetStringVariable(const char *name) const; + + /** + * Print Tesseract parameters to the given file. + */ + void PrintVariables(FILE *fp) const; + + /** + * Get value of named variable as a string, if it exists. + */ + bool GetVariableAsString(const char *name, STRING *val); + + /** + * Instances are now mostly thread-safe and totally independent, + * but some global parameters remain. Basically it is safe to use multiple + * TessBaseAPIs in different threads in parallel, UNLESS: + * you use SetVariable on some of the Params in classify and textord. + * If you do, then the effect will be to change it for all your instances. + * + * Start tesseract. Returns zero on success and -1 on failure. + * NOTE that the only members that may be called before Init are those + * listed above here in the class definition. + * + * The datapath must be the name of the parent directory of tessdata and + * must end in / . Any name after the last / will be stripped. + * The language is (usually) an ISO 639-3 string or NULL will default to eng. + * It is entirely safe (and eventually will be efficient too) to call + * Init multiple times on the same instance to change language, or just + * to reset the classifier. + * The language may be a string of the form [~][+[~]]* indicating + * that multiple languages are to be loaded. Eg hin+eng will load Hindi and + * English. Languages may specify internally that they want to be loaded + * with one or more other languages, so the ~ sign is available to override + * that. Eg if hin were set to load eng by default, then hin+~eng would force + * loading only hin. The number of loaded languages is limited only by + * memory, with the caveat that loading additional languages will impact + * both speed and accuracy, as there is more work to do to decide on the + * applicable language, and there is more chance of hallucinating incorrect + * words. + * WARNING: On changing languages, all Tesseract parameters are reset + * back to their default values. (Which may vary between languages.) + * If you have a rare need to set a Variable that controls + * initialization for a second call to Init you should explicitly + * call End() and then use SetVariable before Init. This is only a very + * rare use case, since there are very few uses that require any parameters + * to be set before Init. + * + * If set_only_non_debug_params is true, only params that do not contain + * "debug" in the name will be set. + */ + int Init(const char* datapath, const char* language, OcrEngineMode mode, + char **configs, int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_non_debug_params); + int Init(const char* datapath, const char* language, OcrEngineMode oem) { + return Init(datapath, language, oem, NULL, 0, NULL, NULL, false); + } + int Init(const char* datapath, const char* language) { + return Init(datapath, language, OEM_DEFAULT, NULL, 0, NULL, NULL, false); + } + + /** + * Returns the languages string used in the last valid initialization. + * If the last initialization specified "deu+hin" then that will be + * returned. If hin loaded eng automatically as well, then that will + * not be included in this list. To find the languages actually + * loaded use GetLoadedLanguagesAsVector. + * The returned string should NOT be deleted. + */ + const char* GetInitLanguagesAsString() const; + + /** + * Returns the loaded languages in the vector of STRINGs. + * Includes all languages loaded by the last Init, including those loaded + * as dependencies of other loaded languages. + */ + void GetLoadedLanguagesAsVector(GenericVector* langs) const; + + /** + * Returns the available languages in the vector of STRINGs. + */ + void GetAvailableLanguagesAsVector(GenericVector* langs) const; + + /** + * Init only the lang model component of Tesseract. The only functions + * that work after this init are SetVariable and IsValidWord. + * WARNING: temporary! This function will be removed from here and placed + * in a separate API at some future time. + */ + int InitLangMod(const char* datapath, const char* language); + + /** + * Init only for page layout analysis. Use only for calls to SetImage and + * AnalysePage. Calls that attempt recognition will generate an error. + */ + void InitForAnalysePage(); + + /** + * Read a "config" file containing a set of param, value pairs. + * Searches the standard places: tessdata/configs, tessdata/tessconfigs + * and also accepts a relative or absolute path name. + * Note: only non-init params will be set (init params are set by Init()). + */ + void ReadConfigFile(const char* filename); + /** Same as above, but only set debug params from the given config file. */ + void ReadDebugConfigFile(const char* filename); + + /** + * Set the current page segmentation mode. Defaults to PSM_SINGLE_BLOCK. + * The mode is stored as an IntParam so it can also be modified by + * ReadConfigFile or SetVariable("tessedit_pageseg_mode", mode as string). + */ + void SetPageSegMode(PageSegMode mode); + + /** Return the current page segmentation mode. */ + PageSegMode GetPageSegMode() const; + + /** + * Recognize a rectangle from an image and return the result as a string. + * May be called many times for a single Init. + * Currently has no error checking. + * Greyscale of 8 and color of 24 or 32 bits per pixel may be given. + * Palette color images will not work properly and must be converted to + * 24 bit. + * Binary images of 1 bit per pixel may also be given but they must be + * byte packed with the MSB of the first byte being the first pixel, and a + * 1 represents WHITE. For binary images set bytes_per_pixel=0. + * The recognized text is returned as a char* which is coded + * as UTF8 and must be freed with the delete [] operator. + * + * Note that TesseractRect is the simplified convenience interface. + * For advanced uses, use SetImage, (optionally) SetRectangle, Recognize, + * and one or more of the Get*Text functions below. + */ + char* TesseractRect(const unsigned char* imagedata, + int bytes_per_pixel, int bytes_per_line, + int left, int top, int width, int height); + + /** + * Call between pages or documents etc to free up memory and forget + * adaptive data. + */ + void ClearAdaptiveClassifier(); + + /** + * @defgroup AdvancedAPI Advanced API + * The following methods break TesseractRect into pieces, so you can + * get hold of the thresholded image, get the text in different formats, + * get bounding boxes, confidences etc. + */ + /* @{ */ + + /** + * Provide an image for Tesseract to recognize. Format is as + * TesseractRect above. Copies the image buffer and converts to Pix. + * SetImage clears all recognition results, and sets the rectangle to the + * full image, so it may be followed immediately by a GetUTF8Text, and it + * will automatically perform recognition. + */ + void SetImage(const unsigned char* imagedata, int width, int height, + int bytes_per_pixel, int bytes_per_line); + + /** + * Provide an image for Tesseract to recognize. As with SetImage above, + * Tesseract takes its own copy of the image, so it need not persist until + * after Recognize. + * Pix vs raw, which to use? + * Use Pix where possible. Tesseract uses Pix as its internal representation + * and it is therefore more efficient to provide a Pix directly. + */ + void SetImage(Pix* pix); + + /** + * Set the resolution of the source image in pixels per inch so font size + * information can be calculated in results. Call this after SetImage(). + */ + void SetSourceResolution(int ppi); + + /** + * Restrict recognition to a sub-rectangle of the image. Call after SetImage. + * Each SetRectangle clears the recogntion results so multiple rectangles + * can be recognized with the same image. + */ + void SetRectangle(int left, int top, int width, int height); + + /** + * In extreme cases only, usually with a subclass of Thresholder, it + * is possible to provide a different Thresholder. The Thresholder may + * be preloaded with an image, settings etc, or they may be set after. + * Note that Tesseract takes ownership of the Thresholder and will + * delete it when it it is replaced or the API is destructed. + */ + void SetThresholder(ImageThresholder* thresholder) { + delete thresholder_; + thresholder_ = thresholder; + ClearResults(); + } + + /** + * Get a copy of the internal thresholded image from Tesseract. + * Caller takes ownership of the Pix and must pixDestroy it. + * May be called any time after SetImage, or after TesseractRect. + */ + Pix* GetThresholdedImage(); + + /** + * Get the result of page layout analysis as a leptonica-style + * Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + */ + Boxa* GetRegions(Pixa** pixa); + + /** + * Get the textlines as a leptonica-style + * Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + * If raw_image is true, then extract from the original image instead of the + * thresholded image and pad by raw_padding pixels. + * If blockids is not NULL, the block-id of each line is also returned as an + * array of one element per line. delete [] after use. + * If paraids is not NULL, the paragraph-id of each line within its block is + * also returned as an array of one element per line. delete [] after use. + */ + Boxa* GetTextlines(const bool raw_image, const int raw_padding, + Pixa** pixa, int** blockids, int** paraids); + /* + Helper method to extract from the thresholded image. (most common usage) + */ + Boxa* GetTextlines(Pixa** pixa, int** blockids) { + return GetTextlines(false, 0, pixa, blockids, NULL); + } + + /** + * Get textlines and strips of image regions as a leptonica-style Boxa, Pixa + * pair, in reading order. Enables downstream handling of non-rectangular + * regions. + * Can be called before or after Recognize. + * If blockids is not NULL, the block-id of each line is also returned as an + * array of one element per line. delete [] after use. + */ + Boxa* GetStrips(Pixa** pixa, int** blockids); + + /** + * Get the words as a leptonica-style + * Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + */ + Boxa* GetWords(Pixa** pixa); + + /** + * Gets the individual connected (text) components (created + * after pages segmentation step, but before recognition) + * as a leptonica-style Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + * Note: the caller is responsible for calling boxaDestroy() + * on the returned Boxa array and pixaDestroy() on cc array. + */ + Boxa* GetConnectedComponents(Pixa** cc); + + /** + * Get the given level kind of components (block, textline, word etc.) as a + * leptonica-style Boxa, Pixa pair, in reading order. + * Can be called before or after Recognize. + * If blockids is not NULL, the block-id of each component is also returned + * as an array of one element per component. delete [] after use. + * If blockids is not NULL, the paragraph-id of each component with its block + * is also returned as an array of one element per component. delete [] after + * use. + * If raw_image is true, then portions of the original image are extracted + * instead of the thresholded image and padded with raw_padding. + * If text_only is true, then only text components are returned. + */ + Boxa* GetComponentImages(const PageIteratorLevel level, + const bool text_only, const bool raw_image, + const int raw_padding, + Pixa** pixa, int** blockids, int** paraids); + // Helper function to get binary images with no padding (most common usage). + Boxa* GetComponentImages(const PageIteratorLevel level, + const bool text_only, + Pixa** pixa, int** blockids) { + return GetComponentImages(level, text_only, false, 0, pixa, blockids, NULL); + } + + /** + * Returns the scale factor of the thresholded image that would be returned by + * GetThresholdedImage() and the various GetX() methods that call + * GetComponentImages(). + * Returns 0 if no thresholder has been set. + */ + int GetThresholdedImageScaleFactor() const; + + /** + * Dump the internal binary image to a PGM file. + * @deprecated Use GetThresholdedImage and write the image using pixWrite + * instead if possible. + */ + void DumpPGM(const char* filename); + + /** + * Runs page layout analysis in the mode set by SetPageSegMode. + * May optionally be called prior to Recognize to get access to just + * the page layout results. Returns an iterator to the results. + * If merge_similar_words is true, words are combined where suitable for use + * with a line recognizer. Use if you want to use AnalyseLayout to find the + * textlines, and then want to process textline fragments with an external + * line recognizer. + * Returns NULL on error or an empty page. + * The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + PageIterator* AnalyseLayout(); + PageIterator* AnalyseLayout(bool merge_similar_words); + int AnalyseLayout1(); + + /** + * Recognize the image from SetAndThresholdImage, generating Tesseract + * internal structures. Returns 0 on success. + * Optional. The Get*Text functions below will call Recognize if needed. + * After Recognize, the output is kept internally until the next SetImage. + */ + int Recognize(ETEXT_DESC* monitor); + + /** + * Methods to retrieve information after SetAndThresholdImage(), + * Recognize() or TesseractRect(). (Recognize is called implicitly if needed.) + */ + + /** Variant on Recognize used for testing chopper. */ + int RecognizeForChopTest(ETEXT_DESC* monitor); + + /** + * Turns images into symbolic text. + * + * filename can point to a single image, a multi-page TIFF, + * or a plain text list of image filenames. + * + * retry_config is useful for debugging. If not NULL, you can fall + * back to an alternate configuration if a page fails for some + * reason. + * + * timeout_millisec terminates processing if any single page + * takes too long. Set to 0 for unlimited time. + * + * renderer is responible for creating the output. For example, + * use the TessTextRenderer if you want plaintext output, or + * the TessPDFRender to produce searchable PDF. + * + * If tessedit_page_number is non-negative, will only process that + * single page. Works for multi-page tiff file, or filelist. + * + * Returns true if successful, false on error. + */ + bool ProcessPages(const char* filename, const char* retry_config, + int timeout_millisec, TessResultRenderer* renderer); + // Does the real work of ProcessPages. + bool ProcessPagesInternal(const char* filename, const char* retry_config, + int timeout_millisec, TessResultRenderer* renderer); + + /** + * Turn a single image into symbolic text. + * + * The pix is the image processed. filename and page_index are + * metadata used by side-effect processes, such as reading a box + * file or formatting as hOCR. + * + * See ProcessPages for desciptions of other parameters. + */ + bool ProcessPage(Pix* pix, int page_index, const char* filename, + const char* retry_config, int timeout_millisec, + TessResultRenderer* renderer, + const char* jpgdata, int len); + + /** + * Get a reading-order iterator to the results of LayoutAnalysis and/or + * Recognize. The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + ResultIterator* GetIterator(); + + /** + * Get a mutable iterator to the results of LayoutAnalysis and/or Recognize. + * The returned iterator must be deleted after use. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + */ + MutableIterator* GetMutableIterator(); + + /** + * The recognized text is returned as a char* which is coded + * as UTF8 and must be freed with the delete [] operator. + */ + char* GetUTF8Text(); + + /** + * Make a HTML-formatted string with hOCR markup from the internal + * data structures. + * page_number is 0-based but will appear in the output as 1-based. + * monitor can be used to + * cancel the recognition + * receive progress callbacks + */ + char* GetHOCRText(ETEXT_DESC* monitor, int page_number); + + /** + * Make a HTML-formatted string with hOCR markup from the internal + * data structures. + * page_number is 0-based but will appear in the output as 1-based. + */ + char* GetHOCRText(int page_number); + + /** + * Make a TSV-formatted string from the internal data structures. + * page_number is 0-based but will appear in the output as 1-based. + */ + char* GetTSVText(int page_number); + + /** + * The recognized text is returned as a char* which is coded in the same + * format as a box file used in training. Returned string must be freed with + * the delete [] operator. + * Constructs coordinates in the original image - not just the rectangle. + * page_number is a 0-based page index that will appear in the box file. + */ + char* GetBoxText(int page_number); + + /** + * The recognized text is returned as a char* which is coded + * as UNLV format Latin-1 with specific reject and suspect codes + * and must be freed with the delete [] operator. + */ + char* GetUNLVText(); + + /** + * Detect the orientation of the input image and apparent script (alphabet). + * orient_deg is the detected clockwise rotation of the input image in degrees (0, 90, 180, 270) + * orient_conf is the confidence (15.0 is reasonably confident) + * script_name is an ASCII string, the name of the script, e.g. "Latin" + * script_conf is confidence level in the script + * Returns true on success and writes values to each parameter as an output + */ + bool DetectOrientationScript(int* orient_deg, float* orient_conf, const char** script_name, float* script_conf); + + /** + * The recognized text is returned as a char* which is coded + * as UTF8 and must be freed with the delete [] operator. + * page_number is a 0-based page index that will appear in the osd file. + */ + char* GetOsdText(int page_number); + + /** Returns the (average) confidence value between 0 and 100. */ + int MeanTextConf(); + /** + * Returns all word confidences (between 0 and 100) in an array, terminated + * by -1. The calling function must delete [] after use. + * The number of confidences should correspond to the number of space- + * delimited words in GetUTF8Text. + */ + int* AllWordConfidences(); + + /** + * Applies the given word to the adaptive classifier if possible. + * The word must be SPACE-DELIMITED UTF-8 - l i k e t h i s , so it can + * tell the boundaries of the graphemes. + * Assumes that SetImage/SetRectangle have been used to set the image + * to the given word. The mode arg should be PSM_SINGLE_WORD or + * PSM_CIRCLE_WORD, as that will be used to control layout analysis. + * The currently set PageSegMode is preserved. + * Returns false if adaption was not possible for some reason. + */ + bool AdaptToWordStr(PageSegMode mode, const char* wordstr); + + /** + * Free up recognition results and any stored image data, without actually + * freeing any recognition data that would be time-consuming to reload. + * Afterwards, you must call SetImage or TesseractRect before doing + * any Recognize or Get* operation. + */ + void Clear(); + + /** + * Close down tesseract and free up all memory. End() is equivalent to + * destructing and reconstructing your TessBaseAPI. + * Once End() has been used, none of the other API functions may be used + * other than Init and anything declared above it in the class definition. + */ + void End(); + + /** + * Clear any library-level memory caches. + * There are a variety of expensive-to-load constant data structures (mostly + * language dictionaries) that are cached globally -- surviving the Init() + * and End() of individual TessBaseAPI's. This function allows the clearing + * of these caches. + **/ + static void ClearPersistentCache(); + + /** + * Check whether a word is valid according to Tesseract's language model + * @return 0 if the word is invalid, non-zero if valid. + * @warning temporary! This function will be removed from here and placed + * in a separate API at some future time. + */ + int IsValidWord(const char *word); + // Returns true if utf8_character is defined in the UniCharset. + bool IsValidCharacter(const char *utf8_character); + + + bool GetTextDirection(int* out_offset, float* out_slope); + + /** Sets Dict::letter_is_okay_ function to point to the given function. */ + void SetDictFunc(DictFunc f); + + /** Sets Dict::probability_in_context_ function to point to the given + * function. + */ + void SetProbabilityInContextFunc(ProbabilityInContextFunc f); + + /** Sets Wordrec::fill_lattice_ function to point to the given function. */ + void SetFillLatticeFunc(FillLatticeFunc f); + + /** + * Estimates the Orientation And Script of the image. + * @return true if the image was processed successfully. + */ + bool DetectOS(OSResults*); + + /** This method returns the features associated with the input image. */ + void GetFeaturesForBlob(TBLOB* blob, INT_FEATURE_STRUCT* int_features, + int* num_features, int* feature_outline_index); + + /** + * This method returns the row to which a box of specified dimensions would + * belong. If no good match is found, it returns NULL. + */ + static ROW* FindRowForBox(BLOCK_LIST* blocks, int left, int top, + int right, int bottom); + + /** + * Method to run adaptive classifier on a blob. + * It returns at max num_max_matches results. + */ + void RunAdaptiveClassifier(TBLOB* blob, + int num_max_matches, + int* unichar_ids, + float* ratings, + int* num_matches_returned); + + /** This method returns the string form of the specified unichar. */ + const char* GetUnichar(int unichar_id); + + /** Return the pointer to the i-th dawg loaded into tesseract_ object. */ + const Dawg *GetDawg(int i) const; + + /** Return the number of dawgs loaded into tesseract_ object. */ + int NumDawgs() const; + + /** Returns a ROW object created from the input row specification. */ + static ROW *MakeTessOCRRow(float baseline, float xheight, + float descender, float ascender); + + /** Returns a TBLOB corresponding to the entire input image. */ + static TBLOB *MakeTBLOB(Pix *pix); + + /** + * This method baseline normalizes a TBLOB in-place. The input row is used + * for normalization. The denorm is an optional parameter in which the + * normalization-antidote is returned. + */ + static void NormalizeTBLOB(TBLOB *tblob, ROW *row, bool numeric_mode); + + Tesseract* tesseract() const { return tesseract_; } + + OcrEngineMode oem() const { return last_oem_requested_; } + + void InitTruthCallback(TruthCallback *cb) { truth_cb_ = cb; } + +#ifndef NO_CUBE_BUILD + /** Return a pointer to underlying CubeRecoContext object if present. */ + CubeRecoContext *GetCubeRecoContext() const; +#endif // NO_CUBE_BUILD + + void set_min_orientation_margin(double margin); + + /** + * Return text orientation of each block as determined by an earlier run + * of layout analysis. + */ + void GetBlockTextOrientations(int** block_orientation, + bool** vertical_writing); + + /** Find lines from the image making the BLOCK_LIST. */ + BLOCK_LIST* FindLinesCreateBlockList(); + + /** + * Delete a block list. + * This is to keep BLOCK_LIST pointer opaque + * and let go of including the other headers. + */ + static void DeleteBlockList(BLOCK_LIST* block_list); + /* @} */ + + protected: + + /** Common code for setting the image. Returns true if Init has been called. */ + TESS_LOCAL bool InternalSetImage(); + + /** + * Run the thresholder to make the thresholded image. If pix is not NULL, + * the source is thresholded to pix instead of the internal IMAGE. + */ + TESS_LOCAL virtual void Threshold(Pix** pix); + + /** + * Find lines from the image making the BLOCK_LIST. + * @return 0 on success. + */ + TESS_LOCAL int FindLines(); + + /** Delete the pageres and block list ready for a new page. */ + void ClearResults(); + + /** + * Return an LTR Result Iterator -- used only for training, as we really want + * to ignore all BiDi smarts at that point. + * delete once you're done with it. + */ + TESS_LOCAL LTRResultIterator* GetLTRIterator(); + + /** + * Return the length of the output text string, as UTF8, assuming + * one newline per line and one per block, with a terminator, + * and assuming a single character reject marker for each rejected character. + * Also return the number of recognized blobs in blob_count. + */ + TESS_LOCAL int TextLength(int* blob_count); + + /** @defgroup ocropusAddOns ocropus add-ons */ + /* @{ */ + + /** + * Adapt to recognize the current image as the given character. + * The image must be preloaded and be just an image of a single character. + */ + TESS_LOCAL void AdaptToCharacter(const char *unichar_repr, + int length, + float baseline, + float xheight, + float descender, + float ascender); + + /** Recognize text doing one pass only, using settings for a given pass. */ + TESS_LOCAL PAGE_RES* RecognitionPass1(BLOCK_LIST* block_list); + TESS_LOCAL PAGE_RES* RecognitionPass2(BLOCK_LIST* block_list, + PAGE_RES* pass1_result); + + //// paragraphs.cpp //////////////////////////////////////////////////// + TESS_LOCAL void DetectParagraphs(bool after_text_recognition); + + /** + * Extract the OCR results, costs (penalty points for uncertainty), + * and the bounding boxes of the characters. + */ + TESS_LOCAL static int TesseractExtractResult(char** text, + int** lengths, + float** costs, + int** x0, + int** y0, + int** x1, + int** y1, + PAGE_RES* page_res); + + TESS_LOCAL const PAGE_RES* GetPageRes() const { return page_res_; } + /* @} */ + + + protected: + Tesseract* tesseract_; ///< The underlying data object. + Tesseract* osd_tesseract_; ///< For orientation & script detection. + EquationDetect* equ_detect_; ///* paragraph_models_; + BLOCK_LIST* block_list_; ///< The page layout. + PAGE_RES* page_res_; ///< The page-level data. + STRING* input_file_; ///< Name used by training code. + STRING* output_file_; ///< Name used by debug code. + STRING* datapath_; ///< Current location of tessdata. + STRING* language_; ///< Last initialized language. + OcrEngineMode last_oem_requested_; ///< Last ocr language mode requested. + bool recognition_done_; ///< page_res_ contains recognition data. + TruthCallback *truth_cb_; /// fxn for setting truth_* in WERD_RES + + /** + * @defgroup ThresholderParams Thresholder Parameters + * Parameters saved from the Thresholder. Needed to rebuild coordinates. + */ + /* @{ */ + int rect_left_; + int rect_top_; + int rect_width_; + int rect_height_; + int image_width_; + int image_height_; + /* @} */ + + private: + // A list of image filenames gets special consideration + bool ProcessPagesFileList(FILE *fp, + STRING *buf, + const char* retry_config, int timeout_millisec, + TessResultRenderer* renderer, + int tessedit_page_number); + // TIFF supports multipage so gets special consideration. + bool ProcessPagesMultipageTiff(const unsigned char *data, + size_t size, + const char* filename, + const char* retry_config, + int timeout_millisec, + TessResultRenderer* renderer, + int tessedit_page_number); + // There's currently no way to pass a document title from the + // Tesseract command line, and we have multiple places that choose + // to set the title to an empty string. Using a single named + // variable will hopefully reduce confusion if the situation changes + // in the future. + const char *unknown_title_; + }; // class TessBaseAPI. + + /** Escape a char string - remove &<>"' with HTML codes. */ + STRING HOcrEscape(const char* text); +} // namespace tesseract. + +#endif // TESSERACT_API_BASEAPI_H__ diff --git a/3rdparty/hgOCR/include/api/capi.cpp b/3rdparty/hgOCR/include/api/capi.cpp new file mode 100644 index 00000000..5cc108e7 --- /dev/null +++ b/3rdparty/hgOCR/include/api/capi.cpp @@ -0,0 +1,826 @@ +/////////////////////////////////////////////////////////////////////// +// File: capi.cpp +// Description: C-API TessBaseAPI +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESS_CAPI_INCLUDE_BASEAPI +# define TESS_CAPI_INCLUDE_BASEAPI +#endif +#include "capi.h" +#include "genericvector.h" +#include "strngs.h" + +TESS_API const char* TESS_CALL TessVersion() +{ + return TessBaseAPI::Version(); +} + +TESS_API void TESS_CALL TessDeleteText(char* text) +{ + delete[] text; +} + +TESS_API void TESS_CALL TessDeleteTextArray(char** arr) +{ + for (char** pos = arr; *pos != NULL; ++pos) + delete[] * pos; + delete[] arr; +} + +TESS_API void TESS_CALL TessDeleteIntArray(int* arr) +{ + delete[] arr; +} + +TESS_API void TESS_CALL TessDeleteBlockList(BLOCK_LIST* block_list) +{ + TessBaseAPI::DeleteBlockList(block_list); +} + +TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase) +{ + return new TessTextRenderer(outputbase); +} + +TESS_API TessResultRenderer* TESS_CALL TessHOcrRendererCreate(const char* outputbase) +{ + return new TessHOcrRenderer(outputbase); +} + +TESS_API TessResultRenderer* TESS_CALL TessHOcrRendererCreate2(const char* outputbase, BOOL font_info) +{ + return new TessHOcrRenderer(outputbase, font_info); +} + +TESS_API TessResultRenderer* TESS_CALL TessPDFRendererCreate(const char* outputbase, const char* datadir) +{ + return new TessPDFRenderer(outputbase, datadir, false); +} + +TESS_API TessResultRenderer* TESS_CALL TessPDFRendererCreateTextonly(const char* outputbase, const char* datadir, + BOOL textonly) +{ + return new TessPDFRenderer(outputbase, datadir, textonly); +} + +TESS_API TessResultRenderer* TESS_CALL TessUnlvRendererCreate(const char* outputbase) +{ + return new TessUnlvRenderer(outputbase); +} + +TESS_API TessResultRenderer* TESS_CALL TessBoxTextRendererCreate(const char* outputbase) +{ + return new TessBoxTextRenderer(outputbase); +} + +TESS_API void TESS_CALL TessDeleteResultRenderer(TessResultRenderer* renderer) +{ + delete renderer; +} + +TESS_API void TESS_CALL TessResultRendererInsert(TessResultRenderer* renderer, TessResultRenderer* next) +{ + renderer->insert(next); +} + +TESS_API TessResultRenderer* TESS_CALL TessResultRendererNext(TessResultRenderer* renderer) +{ + return renderer->next(); +} + +TESS_API BOOL TESS_CALL TessResultRendererBeginDocument(TessResultRenderer* renderer, const char* title) +{ + return renderer->BeginDocument(title); +} + +TESS_API BOOL TESS_CALL TessResultRendererAddImage(TessResultRenderer* renderer, TessBaseAPI* api) +{ + return renderer->AddImage(api, nullptr, 0); +} + +TESS_API BOOL TESS_CALL TessResultRendererEndDocument(TessResultRenderer* renderer) +{ + return renderer->EndDocument(); +} + +TESS_API const char* TESS_CALL TessResultRendererExtention(TessResultRenderer* renderer) +{ + return renderer->file_extension(); +} + +TESS_API const char* TESS_CALL TessResultRendererTitle(TessResultRenderer* renderer) +{ + return renderer->title(); +} + +TESS_API int TESS_CALL TessResultRendererImageNum(TessResultRenderer* renderer) +{ + return renderer->imagenum(); +} + +TESS_API TessBaseAPI* TESS_CALL TessBaseAPICreate() +{ + return new TessBaseAPI; +} + +TESS_API void TESS_CALL TessBaseAPIDelete(TessBaseAPI* handle) +{ + delete handle; +} + +TESS_API size_t TESS_CALL TessBaseAPIGetOpenCLDevice(TessBaseAPI* handle, void **device) +{ + return handle->getOpenCLDevice(device); +} + +TESS_API void TESS_CALL TessBaseAPISetInputName(TessBaseAPI* handle, const char* name) +{ + handle->SetInputName(name); +} + +TESS_API const char* TESS_CALL TessBaseAPIGetInputName(TessBaseAPI* handle) +{ + return handle->GetInputName(); +} + +TESS_API void TESS_CALL TessBaseAPISetInputImage(TessBaseAPI* handle, Pix* pix) +{ + handle->SetInputImage(pix); +} + +TESS_API Pix* TESS_CALL TessBaseAPIGetInputImage(TessBaseAPI* handle) +{ + return handle->GetInputImage(); +} + +TESS_API int TESS_CALL TessBaseAPIGetSourceYResolution(TessBaseAPI* handle) +{ + return handle->GetSourceYResolution(); +} + +TESS_API const char* TESS_CALL TessBaseAPIGetDatapath(TessBaseAPI* handle) +{ + return handle->GetDatapath(); +} + +TESS_API void TESS_CALL TessBaseAPISetOutputName(TessBaseAPI* handle, const char* name) +{ + handle->SetOutputName(name); +} + +TESS_API BOOL TESS_CALL TessBaseAPISetVariable(TessBaseAPI* handle, const char* name, const char* value) +{ + return handle->SetVariable(name, value) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessBaseAPISetDebugVariable(TessBaseAPI* handle, const char* name, const char* value) +{ + return handle->SetVariable(name, value) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessBaseAPIGetIntVariable(const TessBaseAPI* handle, const char* name, int* value) +{ + return handle->GetIntVariable(name, value) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessBaseAPIGetBoolVariable(const TessBaseAPI* handle, const char* name, BOOL* value) +{ + bool boolValue; + if (handle->GetBoolVariable(name, &boolValue)) + { + *value = boolValue ? TRUE : FALSE; + return TRUE; + } + else + { + return FALSE; + } +} + +TESS_API BOOL TESS_CALL TessBaseAPIGetDoubleVariable(const TessBaseAPI* handle, const char* name, double* value) +{ + return handle->GetDoubleVariable(name, value) ? TRUE : FALSE; +} + +TESS_API const char* TESS_CALL TessBaseAPIGetStringVariable(const TessBaseAPI* handle, const char* name) +{ + return handle->GetStringVariable(name); +} + +TESS_API void TESS_CALL TessBaseAPIPrintVariables(const TessBaseAPI* handle, FILE* fp) +{ + handle->PrintVariables(fp); +} + +TESS_API BOOL TESS_CALL TessBaseAPIPrintVariablesToFile(const TessBaseAPI* handle, const char* filename) +{ + FILE* fp = fopen(filename, "w"); + if (fp != NULL) + { + handle->PrintVariables(fp); + fclose(fp); + return TRUE; + } + return FALSE; +} + +TESS_API BOOL TESS_CALL TessBaseAPIGetVariableAsString(TessBaseAPI* handle, const char* name, STRING* val) +{ + return handle->GetVariableAsString(name, val) ? TRUE : FALSE; +} + +TESS_API int TESS_CALL TessBaseAPIInit4(TessBaseAPI* handle, const char* datapath, const char* language, + TessOcrEngineMode mode, char** configs, int configs_size, + char** vars_vec, char** vars_values, size_t vars_vec_size, + BOOL set_only_non_debug_params) +{ + GenericVector varNames; + GenericVector varValues; + if (vars_vec != NULL && vars_values != NULL) { + for (size_t i = 0; i < vars_vec_size; i++) { + varNames.push_back(STRING(vars_vec[i])); + varValues.push_back(STRING(vars_values[i])); + } + } + + return handle->Init(datapath, language, mode, configs, configs_size, &varNames, &varValues, set_only_non_debug_params); +} + + +TESS_API int TESS_CALL TessBaseAPIInit1(TessBaseAPI* handle, const char* datapath, const char* language, TessOcrEngineMode oem, + char** configs, int configs_size) +{ + return handle->Init(datapath, language, oem, configs, configs_size, NULL, NULL, false); +} + +TESS_API int TESS_CALL TessBaseAPIInit2(TessBaseAPI* handle, const char* datapath, const char* language, TessOcrEngineMode oem) +{ + return handle->Init(datapath, language, oem); +} + +TESS_API int TESS_CALL TessBaseAPIInit3(TessBaseAPI* handle, const char* datapath, const char* language) +{ + return handle->Init(datapath, language); +} + +TESS_API const char* TESS_CALL TessBaseAPIGetInitLanguagesAsString(const TessBaseAPI* handle) +{ + return handle->GetInitLanguagesAsString(); +} + +TESS_API char** TESS_CALL TessBaseAPIGetLoadedLanguagesAsVector(const TessBaseAPI* handle) +{ + GenericVector languages; + handle->GetLoadedLanguagesAsVector(&languages); + char** arr = new char*[languages.size() + 1]; + for (int index = 0; index < languages.size(); ++index) + arr[index] = languages[index].strdup(); + arr[languages.size()] = NULL; + return arr; +} + +TESS_API char** TESS_CALL TessBaseAPIGetAvailableLanguagesAsVector(const TessBaseAPI* handle) +{ + GenericVector languages; + handle->GetAvailableLanguagesAsVector(&languages); + char** arr = new char*[languages.size() + 1]; + for (int index = 0; index < languages.size(); ++index) + arr[index] = languages[index].strdup(); + arr[languages.size()] = NULL; + return arr; +} + +TESS_API int TESS_CALL TessBaseAPIInitLangMod(TessBaseAPI* handle, const char* datapath, const char* language) +{ + return handle->InitLangMod(datapath, language); +} + +TESS_API void TESS_CALL TessBaseAPIInitForAnalysePage(TessBaseAPI* handle) +{ + handle->InitForAnalysePage(); +} + +TESS_API void TESS_CALL TessBaseAPIReadConfigFile(TessBaseAPI* handle, const char* filename) +{ + handle->ReadConfigFile(filename); +} + +TESS_API void TESS_CALL TessBaseAPIReadDebugConfigFile(TessBaseAPI* handle, const char* filename) +{ + handle->ReadDebugConfigFile(filename); +} + +TESS_API void TESS_CALL TessBaseAPISetPageSegMode(TessBaseAPI* handle, TessPageSegMode mode) +{ + handle->SetPageSegMode(mode); +} + +TESS_API TessPageSegMode TESS_CALL TessBaseAPIGetPageSegMode(const TessBaseAPI* handle) +{ + return handle->GetPageSegMode(); +} + +TESS_API char* TESS_CALL TessBaseAPIRect(TessBaseAPI* handle, const unsigned char* imagedata, + int bytes_per_pixel, int bytes_per_line, + int left, int top, int width, int height) +{ + return handle->TesseractRect(imagedata, bytes_per_pixel, bytes_per_line, left, top, width, height); +} + +TESS_API void TESS_CALL TessBaseAPIClearAdaptiveClassifier(TessBaseAPI* handle) +{ + handle->ClearAdaptiveClassifier(); +} + +TESS_API void TESS_CALL TessBaseAPISetImage(TessBaseAPI* handle, const unsigned char* imagedata, int width, int height, + int bytes_per_pixel, int bytes_per_line) +{ + handle->SetImage(imagedata, width, height, bytes_per_pixel, bytes_per_line); +} + +TESS_API void TESS_CALL TessBaseAPISetImage2(TessBaseAPI* handle, struct Pix* pix) +{ + return handle->SetImage(pix); +} + +TESS_API void TESS_CALL TessBaseAPISetSourceResolution(TessBaseAPI* handle, int ppi) +{ + handle->SetSourceResolution(ppi); +} + +TESS_API void TESS_CALL TessBaseAPISetRectangle(TessBaseAPI* handle, int left, int top, int width, int height) +{ + handle->SetRectangle(left, top, width, height); +} + +TESS_API void TESS_CALL TessBaseAPISetThresholder(TessBaseAPI* handle, TessImageThresholder* thresholder) +{ + handle->SetThresholder(thresholder); +} + +TESS_API struct Pix* TESS_CALL TessBaseAPIGetThresholdedImage(TessBaseAPI* handle) +{ + return handle->GetThresholdedImage(); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetRegions(TessBaseAPI* handle, struct Pixa** pixa) +{ + return handle->GetRegions(pixa); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetTextlines(TessBaseAPI* handle, struct Pixa** pixa, int** blockids) +{ + return handle->GetTextlines(pixa, blockids); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetTextlines1(TessBaseAPI* handle, const BOOL raw_image, const int raw_padding, + struct Pixa** pixa, int** blockids, int** paraids) +{ + return handle->GetTextlines(raw_image, raw_padding, pixa, blockids, paraids); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetStrips(TessBaseAPI* handle, struct Pixa** pixa, int** blockids) +{ + return handle->GetStrips(pixa, blockids); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetWords(TessBaseAPI* handle, struct Pixa** pixa) +{ + return handle->GetWords(pixa); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetConnectedComponents(TessBaseAPI* handle, struct Pixa** cc) +{ + return handle->GetConnectedComponents(cc); +} + +TESS_API struct Boxa* TESS_CALL TessBaseAPIGetComponentImages(TessBaseAPI* handle, TessPageIteratorLevel level, BOOL text_only, struct Pixa** pixa, int** blockids) +{ + return handle->GetComponentImages(level, text_only != FALSE, pixa, blockids); +} + +TESS_API struct Boxa* +TESS_CALL TessBaseAPIGetComponentImages1(TessBaseAPI* handle, const TessPageIteratorLevel level, const BOOL text_only, + const BOOL raw_image, const int raw_padding, + struct Pixa** pixa, int** blockids, int** paraids) +{ + return handle->GetComponentImages(level, text_only != FALSE, raw_image, raw_padding, pixa, blockids, paraids); +} + +TESS_API int TESS_CALL TessBaseAPIGetThresholdedImageScaleFactor(const TessBaseAPI* handle) +{ + return handle->GetThresholdedImageScaleFactor(); +} + +TESS_API void TESS_CALL TessBaseAPIDumpPGM(TessBaseAPI* handle, const char* filename) +{ + handle->DumpPGM(filename); +} + +TESS_API TessPageIterator* TESS_CALL TessBaseAPIAnalyseLayout(TessBaseAPI* handle) +{ + return handle->AnalyseLayout(); +} + +TESS_API int TESS_CALL TessBaseAPIRecognize(TessBaseAPI* handle, ETEXT_DESC* monitor) +{ + return handle->Recognize(monitor); +} + +TESS_API int TESS_CALL TessBaseAPIRecognizeForChopTest(TessBaseAPI* handle, ETEXT_DESC* monitor) +{ + return handle->RecognizeForChopTest(monitor); +} + +TESS_API BOOL TESS_CALL TessBaseAPIProcessPages(TessBaseAPI* handle, const char* filename, const char* retry_config, + int timeout_millisec, TessResultRenderer* renderer) +{ + if (handle->ProcessPages(filename, retry_config, timeout_millisec, renderer)) + return TRUE; + else + return FALSE; +} + +TESS_API BOOL TESS_CALL TessBaseAPIProcessPage(TessBaseAPI* handle, struct Pix* pix, int page_index, const char* filename, + const char* retry_config, int timeout_millisec, TessResultRenderer* renderer) +{ + if (handle->ProcessPage(pix, page_index, filename, retry_config, timeout_millisec, renderer, nullptr, 0)) + return TRUE; + else + return FALSE; +} + +TESS_API TessResultIterator* TESS_CALL TessBaseAPIGetIterator(TessBaseAPI* handle) +{ + return handle->GetIterator(); +} + +TESS_API TessMutableIterator* TESS_CALL TessBaseAPIGetMutableIterator(TessBaseAPI* handle) +{ + return handle->GetMutableIterator(); +} + +TESS_API char* TESS_CALL TessBaseAPIGetUTF8Text(TessBaseAPI* handle) +{ + return handle->GetUTF8Text(); +} + +TESS_API char* TESS_CALL TessBaseAPIGetHOCRText(TessBaseAPI* handle, int page_number) +{ + return handle->GetHOCRText(NULL, page_number); +} + +TESS_API char* TESS_CALL TessBaseAPIGetBoxText(TessBaseAPI* handle, int page_number) +{ + return handle->GetBoxText(page_number); +} + +TESS_API char* TESS_CALL TessBaseAPIGetUNLVText(TessBaseAPI* handle) +{ + return handle->GetUNLVText(); +} + +TESS_API int TESS_CALL TessBaseAPIMeanTextConf(TessBaseAPI* handle) +{ + return handle->MeanTextConf(); +} + +TESS_API int* TESS_CALL TessBaseAPIAllWordConfidences(TessBaseAPI* handle) +{ + return handle->AllWordConfidences(); +} + +TESS_API BOOL TESS_CALL TessBaseAPIAdaptToWordStr(TessBaseAPI* handle, TessPageSegMode mode, const char* wordstr) +{ + return handle->AdaptToWordStr(mode, wordstr) ? TRUE : FALSE; +} + +TESS_API void TESS_CALL TessBaseAPIClear(TessBaseAPI* handle) +{ + handle->Clear(); +} + +TESS_API void TESS_CALL TessBaseAPIEnd(TessBaseAPI* handle) +{ + handle->End(); +} + +TESS_API int TESS_CALL TessBaseAPIIsValidWord(TessBaseAPI* handle, const char* word) +{ + return handle->IsValidWord(word); +} + +TESS_API BOOL TESS_CALL TessBaseAPIGetTextDirection(TessBaseAPI* handle, int* out_offset, float* out_slope) +{ + return handle->GetTextDirection(out_offset, out_slope) ? TRUE : FALSE; +} + +TESS_API void TESS_CALL TessBaseAPISetDictFunc(TessBaseAPI* handle, TessDictFunc f) +{ + handle->SetDictFunc(f); +} + +TESS_API void TESS_CALL TessBaseAPIClearPersistentCache(TessBaseAPI* handle) +{ + handle->ClearPersistentCache(); +} + +TESS_API void TESS_CALL TessBaseAPISetProbabilityInContextFunc(TessBaseAPI* handle, TessProbabilityInContextFunc f) +{ + handle->SetProbabilityInContextFunc(f); +} + +TESS_API BOOL TESS_CALL TessBaseAPIDetectOS(TessBaseAPI* handle, OSResults* results) +{ + return FALSE; // Unsafe ABI, return FALSE always +} + +TESS_API BOOL TESS_CALL TessBaseAPIDetectOrientationScript(TessBaseAPI* handle, + int* orient_deg, float* orient_conf, const char** script_name, float* script_conf) +{ + bool success; + success = handle->DetectOrientationScript(orient_deg, orient_conf, script_name, script_conf); + return (BOOL)success; +} + + +TESS_API void TESS_CALL TessBaseAPIGetFeaturesForBlob(TessBaseAPI* handle, TBLOB* blob, INT_FEATURE_STRUCT* int_features, + int* num_features, int* FeatureOutlineIndex) +{ + handle->GetFeaturesForBlob(blob, int_features, num_features, FeatureOutlineIndex); +} + +TESS_API ROW* TESS_CALL TessFindRowForBox(BLOCK_LIST* blocks, int left, int top, int right, int bottom) +{ + return TessBaseAPI::FindRowForBox(blocks, left, top, right, bottom); +} + +TESS_API void TESS_CALL TessBaseAPIRunAdaptiveClassifier(TessBaseAPI* handle, TBLOB* blob, int num_max_matches, + int* unichar_ids, float* ratings, int* num_matches_returned) +{ + handle->RunAdaptiveClassifier(blob, num_max_matches, unichar_ids, ratings, num_matches_returned); +} + +TESS_API const char* TESS_CALL TessBaseAPIGetUnichar(TessBaseAPI* handle, int unichar_id) +{ + return handle->GetUnichar(unichar_id); +} + +TESS_API const TessDawg* TESS_CALL TessBaseAPIGetDawg(const TessBaseAPI* handle, int i) +{ + return handle->GetDawg(i); +} + +TESS_API int TESS_CALL TessBaseAPINumDawgs(const TessBaseAPI* handle) +{ + return handle->NumDawgs(); +} + +TESS_API ROW* TESS_CALL TessMakeTessOCRRow(float baseline, float xheight, float descender, float ascender) +{ + return TessBaseAPI::MakeTessOCRRow(baseline, xheight, descender, ascender); +} + +TESS_API TBLOB* TESS_CALL TessMakeTBLOB(struct Pix* pix) +{ + return TessBaseAPI::MakeTBLOB(pix); +} + +TESS_API void TESS_CALL TessNormalizeTBLOB(TBLOB* tblob, ROW* row, BOOL numeric_mode) +{ + TessBaseAPI::NormalizeTBLOB(tblob, row, numeric_mode != FALSE); +} + +TESS_API TessOcrEngineMode TESS_CALL TessBaseAPIOem(const TessBaseAPI* handle) +{ + return handle->oem(); +} + +TESS_API void TESS_CALL TessBaseAPIInitTruthCallback(TessBaseAPI* handle, TessTruthCallback* cb) +{ + handle->InitTruthCallback(cb); +} + +#ifndef NO_CUBE_BUILD +TESS_API TessCubeRecoContext* TESS_CALL TessBaseAPIGetCubeRecoContext(const TessBaseAPI* handle) +{ + return handle->GetCubeRecoContext(); +} +#endif // NO_CUBE_BUILD + +TESS_API void TESS_CALL TessBaseAPISetMinOrientationMargin(TessBaseAPI* handle, double margin) +{ + handle->set_min_orientation_margin(margin); +} + +TESS_API void TESS_CALL TessBaseGetBlockTextOrientations(TessBaseAPI* handle, int** block_orientation, bool** vertical_writing) +{ + handle->GetBlockTextOrientations(block_orientation, vertical_writing); +} + +TESS_API BLOCK_LIST* TESS_CALL TessBaseAPIFindLinesCreateBlockList(TessBaseAPI* handle) +{ + return handle->FindLinesCreateBlockList(); +} + +TESS_API void TESS_CALL TessPageIteratorDelete(TessPageIterator* handle) +{ + delete handle; +} + +TESS_API TessPageIterator* TESS_CALL TessPageIteratorCopy(const TessPageIterator* handle) +{ + return new TessPageIterator(*handle); +} + +TESS_API void TESS_CALL TessPageIteratorBegin(TessPageIterator* handle) +{ + handle->Begin(); +} + +TESS_API BOOL TESS_CALL TessPageIteratorNext(TessPageIterator* handle, TessPageIteratorLevel level) +{ + return handle->Next(level) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessPageIteratorIsAtBeginningOf(const TessPageIterator* handle, TessPageIteratorLevel level) +{ + return handle->IsAtBeginningOf(level) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessPageIteratorIsAtFinalElement(const TessPageIterator* handle, TessPageIteratorLevel level, + TessPageIteratorLevel element) +{ + return handle->IsAtFinalElement(level, element) ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessPageIteratorBoundingBox(const TessPageIterator* handle, TessPageIteratorLevel level, + int* left, int* top, int* right, int* bottom) +{ + return handle->BoundingBox(level, left, top, right, bottom) ? TRUE : FALSE; +} + +TESS_API TessPolyBlockType TESS_CALL TessPageIteratorBlockType(const TessPageIterator* handle) +{ + return handle->BlockType(); +} + +TESS_API struct Pix* TESS_CALL TessPageIteratorGetBinaryImage(const TessPageIterator* handle, TessPageIteratorLevel level) +{ + return handle->GetBinaryImage(level); +} + +TESS_API struct Pix* TESS_CALL TessPageIteratorGetImage(const TessPageIterator* handle, TessPageIteratorLevel level, int padding, + struct Pix* original_image, int* left, int* top) +{ + return handle->GetImage(level, padding, original_image, left, top); +} + +TESS_API BOOL TESS_CALL TessPageIteratorBaseline(const TessPageIterator* handle, TessPageIteratorLevel level, + int* x1, int* y1, int* x2, int* y2) +{ + return handle->Baseline(level, x1, y1, x2, y2) ? TRUE : FALSE; +} + +TESS_API void TESS_CALL TessPageIteratorOrientation(TessPageIterator* handle, TessOrientation* orientation, + TessWritingDirection* writing_direction, TessTextlineOrder* textline_order, + float* deskew_angle) +{ + handle->Orientation(orientation, writing_direction, textline_order, deskew_angle); +} + +TESS_API void TESS_CALL TessPageIteratorParagraphInfo(TessPageIterator* handle, TessParagraphJustification* justification, + BOOL *is_list_item, BOOL *is_crown, int *first_line_indent) +{ + bool bool_is_list_item, bool_is_crown; + handle->ParagraphInfo(justification, &bool_is_list_item, &bool_is_crown, first_line_indent); + if (is_list_item) + *is_list_item = bool_is_list_item ? TRUE : FALSE; + if (is_crown) + *is_crown = bool_is_crown ? TRUE : FALSE; +} + + +TESS_API void TESS_CALL TessResultIteratorDelete(TessResultIterator* handle) +{ + delete handle; +} + +TESS_API TessResultIterator* TESS_CALL TessResultIteratorCopy(const TessResultIterator* handle) +{ + return new TessResultIterator(*handle); +} + +TESS_API TessPageIterator* TESS_CALL TessResultIteratorGetPageIterator(TessResultIterator* handle) +{ + return handle; +} + +TESS_API const TessPageIterator* TESS_CALL TessResultIteratorGetPageIteratorConst(const TessResultIterator* handle) +{ + return handle; +} + +TESS_API TessChoiceIterator* TESS_CALL TessResultIteratorGetChoiceIterator(const TessResultIterator* handle) +{ + return new TessChoiceIterator(*handle); +} + +TESS_API BOOL TESS_CALL TessResultIteratorNext(TessResultIterator* handle, TessPageIteratorLevel level) +{ + return handle->Next(level); +} + +TESS_API char* TESS_CALL TessResultIteratorGetUTF8Text(const TessResultIterator* handle, TessPageIteratorLevel level) +{ + return handle->GetUTF8Text(level); +} + +TESS_API float TESS_CALL TessResultIteratorConfidence(const TessResultIterator* handle, TessPageIteratorLevel level) +{ + return handle->Confidence(level); +} + +TESS_API const char* TESS_CALL TessResultIteratorWordRecognitionLanguage(const TessResultIterator* handle) +{ + return handle->WordRecognitionLanguage(); +} + +TESS_API const char* TESS_CALL TessResultIteratorWordFontAttributes(const TessResultIterator* handle, BOOL* is_bold, BOOL* is_italic, + BOOL* is_underlined, BOOL* is_monospace, BOOL* is_serif, + BOOL* is_smallcaps, int* pointsize, int* font_id) +{ + bool bool_is_bold, bool_is_italic, bool_is_underlined, bool_is_monospace, bool_is_serif, bool_is_smallcaps; + const char* ret = handle->WordFontAttributes(&bool_is_bold, &bool_is_italic, &bool_is_underlined, &bool_is_monospace, &bool_is_serif, + &bool_is_smallcaps, pointsize, font_id); + if (is_bold) + *is_bold = bool_is_bold ? TRUE : FALSE; + if (is_italic) + *is_italic = bool_is_italic ? TRUE : FALSE; + if (is_underlined) + *is_underlined = bool_is_underlined ? TRUE : FALSE; + if (is_monospace) + *is_monospace = bool_is_monospace ? TRUE : FALSE; + if (is_serif) + *is_serif = bool_is_serif ? TRUE : FALSE; + if (is_smallcaps) + *is_smallcaps = bool_is_smallcaps ? TRUE : FALSE; + return ret; +} + +TESS_API BOOL TESS_CALL TessResultIteratorWordIsFromDictionary(const TessResultIterator* handle) +{ + return handle->WordIsFromDictionary() ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessResultIteratorWordIsNumeric(const TessResultIterator* handle) +{ + return handle->WordIsNumeric() ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsSuperscript(const TessResultIterator* handle) +{ + return handle->SymbolIsSuperscript() ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsSubscript(const TessResultIterator* handle) +{ + return handle->SymbolIsSubscript() ? TRUE : FALSE; +} + +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsDropcap(const TessResultIterator* handle) +{ + return handle->SymbolIsDropcap() ? TRUE : FALSE; +} + +TESS_API void TESS_CALL TessChoiceIteratorDelete(TessChoiceIterator* handle) +{ + delete handle; +} + +TESS_API BOOL TESS_CALL TessChoiceIteratorNext(TessChoiceIterator* handle) +{ + return handle->Next(); +} + +TESS_API const char* TESS_CALL TessChoiceIteratorGetUTF8Text(const TessChoiceIterator* handle) +{ + return handle->GetUTF8Text(); +} + +TESS_API float TESS_CALL TessChoiceIteratorConfidence(const TessChoiceIterator* handle) +{ + return handle->Confidence(); +} diff --git a/3rdparty/hgOCR/include/api/capi.h b/3rdparty/hgOCR/include/api/capi.h new file mode 100644 index 00000000..c0aa7611 --- /dev/null +++ b/3rdparty/hgOCR/include/api/capi.h @@ -0,0 +1,409 @@ +/////////////////////////////////////////////////////////////////////// +// File: capi.h +// Description: C-API TessBaseAPI +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef API_CAPI_H_ +#define API_CAPI_H_ + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +# include "baseapi.h" +# include "pageiterator.h" +# include "resultiterator.h" +# include "renderer.h" +#else +# include "platform.h" +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef TESS_CALL +# if defined(WIN32) +# define TESS_CALL __cdecl +# else +# define TESS_CALL +# endif +#endif + +#ifndef BOOL +# define BOOL int +# define TRUE 1 +# define FALSE 0 +#endif + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +typedef tesseract::TessResultRenderer TessResultRenderer; +typedef tesseract::TessTextRenderer TessTextRenderer; +typedef tesseract::TessHOcrRenderer TessHOcrRenderer; +typedef tesseract::TessPDFRenderer TessPDFRenderer; +typedef tesseract::TessUnlvRenderer TessUnlvRenderer; +typedef tesseract::TessBoxTextRenderer TessBoxTextRenderer; +typedef tesseract::TessBaseAPI TessBaseAPI; +typedef tesseract::PageIterator TessPageIterator; +typedef tesseract::ResultIterator TessResultIterator; +typedef tesseract::MutableIterator TessMutableIterator; +typedef tesseract::ChoiceIterator TessChoiceIterator; +typedef tesseract::OcrEngineMode TessOcrEngineMode; +typedef tesseract::PageSegMode TessPageSegMode; +typedef tesseract::ImageThresholder TessImageThresholder; +typedef tesseract::PageIteratorLevel TessPageIteratorLevel; +typedef tesseract::DictFunc TessDictFunc; +typedef tesseract::ProbabilityInContextFunc TessProbabilityInContextFunc; +// typedef tesseract::ParamsModelClassifyFunc TessParamsModelClassifyFunc; +typedef tesseract::FillLatticeFunc TessFillLatticeFunc; +typedef tesseract::Dawg TessDawg; +typedef tesseract::TruthCallback TessTruthCallback; +#ifndef NO_CUBE_BUILD +typedef tesseract::CubeRecoContext TessCubeRecoContext; +#endif // NO_CUBE_BUILD +typedef tesseract::Orientation TessOrientation; +typedef tesseract::ParagraphJustification TessParagraphJustification; +typedef tesseract::WritingDirection TessWritingDirection; +typedef tesseract::TextlineOrder TessTextlineOrder; +typedef PolyBlockType TessPolyBlockType; +#else +typedef struct TessResultRenderer TessResultRenderer; +typedef struct TessTextRenderer TessTextRenderer; +typedef struct TessHOcrRenderer TessHOcrRenderer; +typedef struct TessPDFRenderer TessPDFRenderer; +typedef struct TessUnlvRenderer TessUnlvRenderer; +typedef struct TessBoxTextRenderer TessBoxTextRenderer; +typedef struct TessBaseAPI TessBaseAPI; +typedef struct TessPageIterator TessPageIterator; +typedef struct TessResultIterator TessResultIterator; +typedef struct TessMutableIterator TessMutableIterator; +typedef struct TessChoiceIterator TessChoiceIterator; +typedef enum TessOcrEngineMode { OEM_TESSERACT_ONLY, OEM_CUBE_ONLY, OEM_TESSERACT_CUBE_COMBINED, OEM_DEFAULT } TessOcrEngineMode; +typedef enum TessPageSegMode { PSM_OSD_ONLY, PSM_AUTO_OSD, PSM_AUTO_ONLY, PSM_AUTO, PSM_SINGLE_COLUMN, PSM_SINGLE_BLOCK_VERT_TEXT, + PSM_SINGLE_BLOCK, PSM_SINGLE_LINE, PSM_SINGLE_WORD, PSM_CIRCLE_WORD, PSM_SINGLE_CHAR, PSM_SPARSE_TEXT, + PSM_SPARSE_TEXT_OSD, PSM_COUNT } TessPageSegMode; +typedef enum TessPageIteratorLevel { RIL_BLOCK, RIL_PARA, RIL_TEXTLINE, RIL_WORD, RIL_SYMBOL} TessPageIteratorLevel; +typedef enum TessPolyBlockType { PT_UNKNOWN, PT_FLOWING_TEXT, PT_HEADING_TEXT, PT_PULLOUT_TEXT, PT_EQUATION, PT_INLINE_EQUATION, + PT_TABLE, PT_VERTICAL_TEXT, PT_CAPTION_TEXT, PT_FLOWING_IMAGE, PT_HEADING_IMAGE, + PT_PULLOUT_IMAGE, PT_HORZ_LINE, PT_VERT_LINE, PT_NOISE, PT_COUNT } TessPolyBlockType; +typedef enum TessOrientation { ORIENTATION_PAGE_UP, ORIENTATION_PAGE_RIGHT, ORIENTATION_PAGE_DOWN, ORIENTATION_PAGE_LEFT } TessOrientation; +typedef enum TessParagraphJustification { JUSTIFICATION_UNKNOWN, JUSTIFICATION_LEFT, JUSTIFICATION_CENTER, JUSTIFICATION_RIGHT } TessParagraphJustification; +typedef enum TessWritingDirection { WRITING_DIRECTION_LEFT_TO_RIGHT, WRITING_DIRECTION_RIGHT_TO_LEFT, WRITING_DIRECTION_TOP_TO_BOTTOM } TessWritingDirection; +typedef enum TessTextlineOrder { TEXTLINE_ORDER_LEFT_TO_RIGHT, TEXTLINE_ORDER_RIGHT_TO_LEFT, TEXTLINE_ORDER_TOP_TO_BOTTOM } TessTextlineOrder; +typedef struct ETEXT_DESC ETEXT_DESC; +#endif + +struct Pix; +struct Boxa; +struct Pixa; + +/* General free functions */ + +TESS_API const char* + TESS_CALL TessVersion(); +TESS_API void TESS_CALL TessDeleteText(char* text); +TESS_API void TESS_CALL TessDeleteTextArray(char** arr); +TESS_API void TESS_CALL TessDeleteIntArray(int* arr); +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API void TESS_CALL TessDeleteBlockList(BLOCK_LIST* block_list); +#endif + +/* Renderer API */ +TESS_API TessResultRenderer* TESS_CALL TessTextRendererCreate(const char* outputbase); +TESS_API TessResultRenderer* TESS_CALL TessHOcrRendererCreate(const char* outputbase); +TESS_API TessResultRenderer* TESS_CALL TessHOcrRendererCreate2(const char* outputbase, BOOL font_info); +TESS_API TessResultRenderer* TESS_CALL TessPDFRendererCreate(const char* outputbase, const char* datadir); +TESS_API TessResultRenderer* TESS_CALL TessPDFRendererCreateTextonly(const char* outputbase, const char* datadir, + BOOL textonly); +TESS_API TessResultRenderer* TESS_CALL TessUnlvRendererCreate(const char* outputbase); +TESS_API TessResultRenderer* TESS_CALL TessBoxTextRendererCreate(const char* outputbase); + +TESS_API void TESS_CALL TessDeleteResultRenderer(TessResultRenderer* renderer); +TESS_API void TESS_CALL TessResultRendererInsert(TessResultRenderer* renderer, TessResultRenderer* next); +TESS_API TessResultRenderer* + TESS_CALL TessResultRendererNext(TessResultRenderer* renderer); +TESS_API BOOL TESS_CALL TessResultRendererBeginDocument(TessResultRenderer* renderer, const char* title); +TESS_API BOOL TESS_CALL TessResultRendererAddImage(TessResultRenderer* renderer, TessBaseAPI* api); +TESS_API BOOL TESS_CALL TessResultRendererEndDocument(TessResultRenderer* renderer); + +TESS_API const char* TESS_CALL TessResultRendererExtention(TessResultRenderer* renderer); +TESS_API const char* TESS_CALL TessResultRendererTitle(TessResultRenderer* renderer); +TESS_API int TESS_CALL TessResultRendererImageNum(TessResultRenderer* renderer); + +/* Base API */ + +TESS_API TessBaseAPI* + TESS_CALL TessBaseAPICreate(); +TESS_API void TESS_CALL TessBaseAPIDelete(TessBaseAPI* handle); + +TESS_API size_t TESS_CALL TessBaseAPIGetOpenCLDevice(TessBaseAPI* handle, void **device); + +TESS_API void TESS_CALL TessBaseAPISetInputName( TessBaseAPI* handle, const char* name); +TESS_API const char* TESS_CALL TessBaseAPIGetInputName(TessBaseAPI* handle); + +TESS_API void TESS_CALL TessBaseAPISetInputImage(TessBaseAPI* handle, struct Pix* pix); +TESS_API struct Pix* TESS_CALL TessBaseAPIGetInputImage(TessBaseAPI* handle); + +TESS_API int TESS_CALL TessBaseAPIGetSourceYResolution(TessBaseAPI* handle); +TESS_API const char* TESS_CALL TessBaseAPIGetDatapath(TessBaseAPI* handle); + +TESS_API void TESS_CALL TessBaseAPISetOutputName(TessBaseAPI* handle, const char* name); + +TESS_API BOOL TESS_CALL TessBaseAPISetVariable(TessBaseAPI* handle, const char* name, const char* value); +TESS_API BOOL TESS_CALL TessBaseAPISetDebugVariable(TessBaseAPI* handle, const char* name, const char* value); + +TESS_API BOOL TESS_CALL TessBaseAPIGetIntVariable( const TessBaseAPI* handle, const char* name, int* value); +TESS_API BOOL TESS_CALL TessBaseAPIGetBoolVariable( const TessBaseAPI* handle, const char* name, BOOL* value); +TESS_API BOOL TESS_CALL TessBaseAPIGetDoubleVariable(const TessBaseAPI* handle, const char* name, double* value); +TESS_API const char* + TESS_CALL TessBaseAPIGetStringVariable(const TessBaseAPI* handle, const char* name); + +TESS_API void TESS_CALL TessBaseAPIPrintVariables( const TessBaseAPI* handle, FILE* fp); +TESS_API BOOL TESS_CALL TessBaseAPIPrintVariablesToFile(const TessBaseAPI* handle, const char* filename); +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API BOOL TESS_CALL TessBaseAPIGetVariableAsString(TessBaseAPI* handle, const char* name, STRING* val); +#endif + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API int TESS_CALL TessBaseAPIInit(TessBaseAPI* handle, const char* datapath, const char* language, + TessOcrEngineMode mode, char** configs, int configs_size, + const STRING* vars_vec, size_t vars_vec_size, + const STRING* vars_values, size_t vars_values_size, BOOL set_only_init_params); +#endif +TESS_API int TESS_CALL TessBaseAPIInit1(TessBaseAPI* handle, const char* datapath, const char* language, TessOcrEngineMode oem, + char** configs, int configs_size); +TESS_API int TESS_CALL TessBaseAPIInit2(TessBaseAPI* handle, const char* datapath, const char* language, TessOcrEngineMode oem); +TESS_API int TESS_CALL TessBaseAPIInit3(TessBaseAPI* handle, const char* datapath, const char* language); + +TESS_API int TESS_CALL TessBaseAPIInit4(TessBaseAPI* handle, const char* datapath, const char* language, TessOcrEngineMode mode, + char** configs, int configs_size, + char** vars_vec, char** vars_values, size_t vars_vec_size, + BOOL set_only_non_debug_params); + +TESS_API const char* + TESS_CALL TessBaseAPIGetInitLanguagesAsString(const TessBaseAPI* handle); +TESS_API char** + TESS_CALL TessBaseAPIGetLoadedLanguagesAsVector(const TessBaseAPI* handle); +TESS_API char** + TESS_CALL TessBaseAPIGetAvailableLanguagesAsVector(const TessBaseAPI* handle); + +TESS_API int TESS_CALL TessBaseAPIInitLangMod(TessBaseAPI* handle, const char* datapath, const char* language); +TESS_API void TESS_CALL TessBaseAPIInitForAnalysePage(TessBaseAPI* handle); + +TESS_API void TESS_CALL TessBaseAPIReadConfigFile(TessBaseAPI* handle, const char* filename); +TESS_API void TESS_CALL TessBaseAPIReadDebugConfigFile(TessBaseAPI* handle, const char* filename); + +TESS_API void TESS_CALL TessBaseAPISetPageSegMode(TessBaseAPI* handle, TessPageSegMode mode); +TESS_API TessPageSegMode + TESS_CALL TessBaseAPIGetPageSegMode(const TessBaseAPI* handle); + +TESS_API char* TESS_CALL TessBaseAPIRect(TessBaseAPI* handle, const unsigned char* imagedata, + int bytes_per_pixel, int bytes_per_line, + int left, int top, int width, int height); + +TESS_API void TESS_CALL TessBaseAPIClearAdaptiveClassifier(TessBaseAPI* handle); + +TESS_API void TESS_CALL TessBaseAPISetImage(TessBaseAPI* handle, const unsigned char* imagedata, int width, int height, + int bytes_per_pixel, int bytes_per_line); +TESS_API void TESS_CALL TessBaseAPISetImage2(TessBaseAPI* handle, struct Pix* pix); + +TESS_API void TESS_CALL TessBaseAPISetSourceResolution(TessBaseAPI* handle, int ppi); + +TESS_API void TESS_CALL TessBaseAPISetRectangle(TessBaseAPI* handle, int left, int top, int width, int height); + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API void TESS_CALL TessBaseAPISetThresholder(TessBaseAPI* handle, TessImageThresholder* thresholder); +#endif + +TESS_API struct Pix* + TESS_CALL TessBaseAPIGetThresholdedImage( TessBaseAPI* handle); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetRegions( TessBaseAPI* handle, struct Pixa** pixa); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetTextlines( TessBaseAPI* handle, struct Pixa** pixa, int** blockids); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetTextlines1( TessBaseAPI* handle, const BOOL raw_image, const int raw_padding, + struct Pixa** pixa, int** blockids, int** paraids); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetStrips( TessBaseAPI* handle, struct Pixa** pixa, int** blockids); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetWords( TessBaseAPI* handle, struct Pixa** pixa); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetConnectedComponents(TessBaseAPI* handle, struct Pixa** cc); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetComponentImages( TessBaseAPI* handle, const TessPageIteratorLevel level, const BOOL text_only, + struct Pixa** pixa, int** blockids); +TESS_API struct Boxa* + TESS_CALL TessBaseAPIGetComponentImages1( TessBaseAPI* handle, const TessPageIteratorLevel level, const BOOL text_only, + const BOOL raw_image, const int raw_padding, + struct Pixa** pixa, int** blockids, int** paraids); + +TESS_API int TESS_CALL TessBaseAPIGetThresholdedImageScaleFactor(const TessBaseAPI* handle); + +TESS_API void TESS_CALL TessBaseAPIDumpPGM(TessBaseAPI* handle, const char* filename); + +TESS_API TessPageIterator* + TESS_CALL TessBaseAPIAnalyseLayout(TessBaseAPI* handle); + +TESS_API int TESS_CALL TessBaseAPIRecognize(TessBaseAPI* handle, ETEXT_DESC* monitor); +TESS_API int TESS_CALL TessBaseAPIRecognizeForChopTest(TessBaseAPI* handle, ETEXT_DESC* monitor); +TESS_API BOOL TESS_CALL TessBaseAPIProcessPages(TessBaseAPI* handle, const char* filename, const char* retry_config, + int timeout_millisec, TessResultRenderer* renderer); +TESS_API BOOL TESS_CALL TessBaseAPIProcessPage(TessBaseAPI* handle, struct Pix* pix, int page_index, const char* filename, + const char* retry_config, int timeout_millisec, TessResultRenderer* renderer); + +TESS_API TessResultIterator* + TESS_CALL TessBaseAPIGetIterator(TessBaseAPI* handle); +TESS_API TessMutableIterator* + TESS_CALL TessBaseAPIGetMutableIterator(TessBaseAPI* handle); + +TESS_API char* TESS_CALL TessBaseAPIGetUTF8Text(TessBaseAPI* handle); +TESS_API char* TESS_CALL TessBaseAPIGetHOCRText(TessBaseAPI* handle, int page_number); +TESS_API char* TESS_CALL TessBaseAPIGetBoxText(TessBaseAPI* handle, int page_number); +TESS_API char* TESS_CALL TessBaseAPIGetUNLVText(TessBaseAPI* handle); +TESS_API int TESS_CALL TessBaseAPIMeanTextConf(TessBaseAPI* handle); +TESS_API int* TESS_CALL TessBaseAPIAllWordConfidences(TessBaseAPI* handle); +TESS_API BOOL TESS_CALL TessBaseAPIAdaptToWordStr(TessBaseAPI* handle, TessPageSegMode mode, const char* wordstr); + +TESS_API void TESS_CALL TessBaseAPIClear(TessBaseAPI* handle); +TESS_API void TESS_CALL TessBaseAPIEnd(TessBaseAPI* handle); + +TESS_API int TESS_CALL TessBaseAPIIsValidWord(TessBaseAPI* handle, const char* word); +TESS_API BOOL TESS_CALL TessBaseAPIGetTextDirection(TessBaseAPI* handle, int* out_offset, float* out_slope); + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API void TESS_CALL TessBaseAPISetDictFunc(TessBaseAPI* handle, TessDictFunc f); +TESS_API void TESS_CALL TessBaseAPIClearPersistentCache(TessBaseAPI* handle); +TESS_API void TESS_CALL TessBaseAPISetProbabilityInContextFunc(TessBaseAPI* handle, TessProbabilityInContextFunc f); + +TESS_API void TESS_CALL TessBaseAPISetFillLatticeFunc(TessBaseAPI* handle, TessFillLatticeFunc f); + +// Deprecated, no longer working +TESS_API BOOL TESS_CALL TessBaseAPIDetectOS(TessBaseAPI* handle, OSResults* results); + +// Call TessDeleteText(*best_script_name) to free memory allocated by this function +TESS_API BOOL TESS_CALL TessBaseAPIDetectOrientationScript(TessBaseAPI* handle, + int* orient_deg, float* orient_conf, const char **script_name, float* script_conf); + +TESS_API void TESS_CALL TessBaseAPIGetFeaturesForBlob(TessBaseAPI* handle, TBLOB* blob, INT_FEATURE_STRUCT* int_features, + int* num_features, int* FeatureOutlineIndex); + +TESS_API ROW* TESS_CALL TessFindRowForBox(BLOCK_LIST* blocks, int left, int top, int right, int bottom); +TESS_API void TESS_CALL TessBaseAPIRunAdaptiveClassifier(TessBaseAPI* handle, TBLOB* blob, int num_max_matches, + int* unichar_ids, float* ratings, int* num_matches_returned); +#endif + +TESS_API const char* + TESS_CALL TessBaseAPIGetUnichar(TessBaseAPI* handle, int unichar_id); + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API const TessDawg* + TESS_CALL TessBaseAPIGetDawg(const TessBaseAPI* handle, int i); +TESS_API int TESS_CALL TessBaseAPINumDawgs(const TessBaseAPI* handle); +#endif + +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API ROW* TESS_CALL TessMakeTessOCRRow(float baseline, float xheight, float descender, float ascender); +TESS_API TBLOB* + TESS_CALL TessMakeTBLOB(Pix* pix); +TESS_API void TESS_CALL TessNormalizeTBLOB(TBLOB* tblob, ROW* row, BOOL numeric_mode); + +TESS_API TessOcrEngineMode + TESS_CALL TessBaseAPIOem(const TessBaseAPI* handle); +TESS_API void TESS_CALL TessBaseAPIInitTruthCallback(TessBaseAPI* handle, TessTruthCallback* cb); + +#ifndef NO_CUBE_BUILD +TESS_API TessCubeRecoContext* + TESS_CALL TessBaseAPIGetCubeRecoContext(const TessBaseAPI* handle); +#endif // NO_CUBE_BUILD +#endif + +TESS_API void TESS_CALL TessBaseAPISetMinOrientationMargin(TessBaseAPI* handle, double margin); +#ifdef TESS_CAPI_INCLUDE_BASEAPI +TESS_API void TESS_CALL TessBaseGetBlockTextOrientations(TessBaseAPI* handle, int** block_orientation, BOOL** vertical_writing); + +TESS_API BLOCK_LIST* + TESS_CALL TessBaseAPIFindLinesCreateBlockList(TessBaseAPI* handle); +#endif + +/* Page iterator */ + +TESS_API void TESS_CALL TessPageIteratorDelete(TessPageIterator* handle); +TESS_API TessPageIterator* + TESS_CALL TessPageIteratorCopy(const TessPageIterator* handle); + +TESS_API void TESS_CALL TessPageIteratorBegin(TessPageIterator* handle); +TESS_API BOOL TESS_CALL TessPageIteratorNext(TessPageIterator* handle, TessPageIteratorLevel level); +TESS_API BOOL TESS_CALL TessPageIteratorIsAtBeginningOf(const TessPageIterator* handle, TessPageIteratorLevel level); +TESS_API BOOL TESS_CALL TessPageIteratorIsAtFinalElement(const TessPageIterator* handle, TessPageIteratorLevel level, + TessPageIteratorLevel element); + +TESS_API BOOL TESS_CALL TessPageIteratorBoundingBox(const TessPageIterator* handle, TessPageIteratorLevel level, + int* left, int* top, int* right, int* bottom); +TESS_API TessPolyBlockType + TESS_CALL TessPageIteratorBlockType(const TessPageIterator* handle); + +TESS_API struct Pix* + TESS_CALL TessPageIteratorGetBinaryImage(const TessPageIterator* handle, TessPageIteratorLevel level); +TESS_API struct Pix* + TESS_CALL TessPageIteratorGetImage(const TessPageIterator* handle, TessPageIteratorLevel level, int padding, + struct Pix* original_image, int* left, int* top); + +TESS_API BOOL TESS_CALL TessPageIteratorBaseline(const TessPageIterator* handle, TessPageIteratorLevel level, + int* x1, int* y1, int* x2, int* y2); + +TESS_API void TESS_CALL TessPageIteratorOrientation(TessPageIterator* handle, TessOrientation* orientation, + TessWritingDirection* writing_direction, TessTextlineOrder* textline_order, + float* deskew_angle); + +TESS_API void TESS_CALL TessPageIteratorParagraphInfo(TessPageIterator* handle, TessParagraphJustification* justification, + BOOL *is_list_item, BOOL *is_crown, int *first_line_indent); + +/* Result iterator */ + +TESS_API void TESS_CALL TessResultIteratorDelete(TessResultIterator* handle); +TESS_API TessResultIterator* + TESS_CALL TessResultIteratorCopy(const TessResultIterator* handle); +TESS_API TessPageIterator* + TESS_CALL TessResultIteratorGetPageIterator(TessResultIterator* handle); +TESS_API const TessPageIterator* + TESS_CALL TessResultIteratorGetPageIteratorConst(const TessResultIterator* handle); +TESS_API TessChoiceIterator* + TESS_CALL TessResultIteratorGetChoiceIterator(const TessResultIterator* handle); + +TESS_API BOOL TESS_CALL TessResultIteratorNext(TessResultIterator* handle, TessPageIteratorLevel level); +TESS_API char* TESS_CALL TessResultIteratorGetUTF8Text(const TessResultIterator* handle, TessPageIteratorLevel level); +TESS_API float TESS_CALL TessResultIteratorConfidence(const TessResultIterator* handle, TessPageIteratorLevel level); +TESS_API const char* + TESS_CALL TessResultIteratorWordRecognitionLanguage(const TessResultIterator* handle); +TESS_API const char* + TESS_CALL TessResultIteratorWordFontAttributes(const TessResultIterator* handle, BOOL* is_bold, BOOL* is_italic, + BOOL* is_underlined, BOOL* is_monospace, BOOL* is_serif, + BOOL* is_smallcaps, int* pointsize, int* font_id); + +TESS_API BOOL TESS_CALL TessResultIteratorWordIsFromDictionary(const TessResultIterator* handle); +TESS_API BOOL TESS_CALL TessResultIteratorWordIsNumeric(const TessResultIterator* handle); +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsSuperscript(const TessResultIterator* handle); +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsSubscript(const TessResultIterator* handle); +TESS_API BOOL TESS_CALL TessResultIteratorSymbolIsDropcap(const TessResultIterator* handle); + +TESS_API void TESS_CALL TessChoiceIteratorDelete(TessChoiceIterator* handle); +TESS_API BOOL TESS_CALL TessChoiceIteratorNext(TessChoiceIterator* handle); +TESS_API const char* TESS_CALL TessChoiceIteratorGetUTF8Text(const TessChoiceIterator* handle); +TESS_API float TESS_CALL TessChoiceIteratorConfidence(const TessChoiceIterator* handle); + +#ifdef __cplusplus +} +#endif + +#endif // API_CAPI_H_ diff --git a/3rdparty/hgOCR/include/api/config_auto.h b/3rdparty/hgOCR/include/api/config_auto.h new file mode 100644 index 00000000..41df404d --- /dev/null +++ b/3rdparty/hgOCR/include/api/config_auto.h @@ -0,0 +1,9 @@ +#define HAVE_LIBJPEG 1 +#define HAVE_LIBTIFF 1 +#define HAVE_LIBPNG 1 +#define HAVE_LIBZ 1 +#define HAVE_LIBGIF 1 +#define HAVE_LIBUNGIF 0 +#define HAVE_LIBWEBP 1 +#define HAVE_LIBJP2K 1 +#define LIBJP2K_HEADER \ No newline at end of file diff --git a/3rdparty/hgOCR/include/api/pdfrenderer.cpp b/3rdparty/hgOCR/include/api/pdfrenderer.cpp new file mode 100644 index 00000000..01337203 --- /dev/null +++ b/3rdparty/hgOCR/include/api/pdfrenderer.cpp @@ -0,0 +1,1265 @@ +/////////////////////////////////////////////////////////////////////// +// File: pdfrenderer.cpp +// Description: PDF rendering interface to inject into TessBaseAPI +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "allheaders.h" +#include "baseapi.h" +#include "math.h" +#include "renderer.h" +#include "strngs.h" +#include "tprintf.h" + +#ifdef _MSC_VER +#include "mathfix.h" +#endif + +/* + +Design notes from Ken Sharp, with light editing. + +We think one solution is a font with a single glyph (.notdef) and a +CIDToGIDMap which maps all the CIDs to 0. That map would then be +stored as a stream in the PDF file, and when flate compressed should +be pretty small. The font, of course, will be approximately the same +size as the one you currently use. + +I'm working on such a font now, the CIDToGIDMap is trivial, you just +create a stream object which contains 128k bytes (2 bytes per possible +CID and your CIDs range from 0 to 65535) and where you currently have +"/CIDToGIDMap /Identity" you would have "/CIDToGIDMap 0 R". + +Note that if, in future, you were to use a different (ie not 2 byte) +CMap for character codes you could trivially extend the CIDToGIDMap. + +The following is an explanation of how some of the font stuff works, +this may be too simple for you in which case please accept my +apologies, its hard to know how much knowledge someone has. You can +skip all this anyway, its just for information. + +The font embedded in a PDF file is usually intended just to be +rendered, but extensions allow for at least some ability to locate (or +copy) text from a document. This isn't something which was an original +goal of the PDF format, but its been retro-fitted, presumably due to +popular demand. + +To do this reliably the PDF file must contain a ToUnicode CMap, a +device for mapping character codes to Unicode code points. If one of +these is present, then this will be used to convert the character +codes into Unicode values. If its not present then the reader will +fall back through a series of heuristics to try and guess the +result. This is, as you would expect, prone to failure. + +This doesn't concern you of course, since you always write a ToUnicode +CMap, so because you are writing the text in text rendering mode 3 it +would seem that you don't really need to worry about this, but in the +PDF spec you cannot have an isolated ToUnicode CMap, it has to be +attached to a font, so in order to get even copy/paste to work you +need to define a font. + +This is what leads to problems, tools like pdfwrite assume that they +are going to be able to (or even have to) modify the font entries, so +they require that the font being embedded be valid, and to be honest +the font Tesseract embeds isn't valid (for this purpose). + + +To see why lets look at how text is specified in a PDF file: + +(Test) Tj + +Now that looks like text but actually it isn't. Each of those bytes is +a 'character code'. When it comes to rendering the text a complex +sequence of events takes place, which converts the character code into +'something' which the font understands. Its entirely possible via +character mappings to have that text render as 'Sftu' + +For simple fonts (PostScript type 1), we use the character code as the +index into an Encoding array (256 elements), each element of which is +a glyph name, so this gives us a glyph name. We then consult the +CharStrings dictionary in the font, that's a complex object which +contains pairs of keys and values, you can use the key to retrieve a +given value. So we have a glyph name, we then use that as the key to +the dictionary and retrieve the associated value. For a type 1 font, +the value is a glyph program that describes how to draw the glyph. + +For CIDFonts, its a little more complicated. Because CIDFonts can be +large, using a glyph name as the key is unreasonable (it would also +lead to unfeasibly large Encoding arrays), so instead we use a 'CID' +as the key. CIDs are just numbers. + +But.... We don't use the character code as the CID. What we do is use +a CMap to convert the character code into a CID. We then use the CID +to key the CharStrings dictionary and proceed as before. So the 'CMap' +is the equivalent of the Encoding array, but its a more compact and +flexible representation. + +Note that you have to use the CMap just to find out how many bytes +constitute a character code, and it can be variable. For example you +can say if the first byte is 0x00->0x7f then its just one byte, if its +0x80->0xf0 then its 2 bytes and if its 0xf0->0xff then its 3 bytes. I +have seen CMaps defining character codes up to 5 bytes wide. + +Now that's fine for 'PostScript' CIDFonts, but its not sufficient for +TrueType CIDFonts. The thing is that TrueType fonts are accessed using +a Glyph ID (GID) (and the LOCA table) which may well not be anything +like the CID. So for this case PDF includes a CIDToGIDMap. That maps +the CIDs to GIDs, and we can then use the GID to get the glyph +description from the GLYF table of the font. + +So for a TrueType CIDFont, character-code->CID->GID->glyf-program. + +Looking at the PDF file I was supplied with we see that it contains +text like : + +<0x0075> Tj + +So we start by taking the character code (117) and look it up in the +CMap. Well you don't supply a CMap, you just use the Identity-H one +which is predefined. So character code 117 maps to CID 117. Then we +use the CIDToGIDMap, again you don't supply one, you just use the +predefined 'Identity' map. So CID 117 maps to GID 117. But the font we +were supplied with only contains 116 glyphs. + +Now for Latin that's not a huge problem, you can just supply a bigger +font. But for more complex languages that *is* going to be more of a +problem. Either you need to supply a font which contains glyphs for +all the possible CID->GID mappings, or we need to think laterally. + +Our solution using a TrueType CIDFont is to intervene at the +CIDToGIDMap stage and convert all the CIDs to GID 0. Then we have a +font with just one glyph, the .notdef glyph at GID 0. This is what I'm +looking into now. + +It would also be possible to have a 'PostScript' (ie type 1 outlines) +CIDFont which contained 1 glyph, and a CMap which mapped all character +codes to CID 0. The effect would be the same. + +Its possible (I haven't checked) that the PostScript CIDFont and +associated CMap would be smaller than the TrueType font and associated +CIDToGIDMap. + +--- in a followup --- + +OK there is a small problem there, if I use GID 0 then Acrobat gets +upset about it and complains it cannot extract the font. If I set the +CIDToGIDMap so that all the entries are 1 instead, it's happy. Totally +mad...... + +*/ + +namespace tesseract { + + // Use for PDF object fragments. Must be large enough + // to hold a colormap with 256 colors in the verbose + // PDF representation. + static const int kBasicBufSize = 2048; + + // If the font is 10 pts, nominal character width is 5 pts + static const int kCharWidth = 2; + + // Used for memory allocation. A codepoint must take no more than this + // many bytes, when written in the PDF way. e.g. "<0063>" for the + // letter 'c' + static const int kMaxBytesPerCodepoint = 20; + + /********************************************************************** + * PDF Renderer interface implementation + **********************************************************************/ + + TessPDFRenderer::TessPDFRenderer(const char *outputbase, const char *datadir) + : TessResultRenderer(outputbase, "pdf") { + TessPDFRenderer(outputbase, datadir, false); + } + + TessPDFRenderer::TessPDFRenderer(const char *outputbase, const char *datadir, + bool textonly) + : TessResultRenderer(outputbase, "pdf") { + obj_ = 0; + datadir_ = datadir; + textonly_ = textonly; + offsets_.push_back(0); + } + + void TessPDFRenderer::AppendPDFObjectDIY(size_t objectsize) { + offsets_.push_back(objectsize + offsets_.back()); + obj_++; + } + + void TessPDFRenderer::AppendPDFObject(const char *data) { + AppendPDFObjectDIY(strlen(data)); + AppendString((const char *)data); + } + + // Helper function to prevent us from accidentally writing + // scientific notation to an HOCR or PDF file. Besides, three + // decimal points are all you really need. + double prec(double x) { + double kPrecision = 1000.0; + double a = round(x * kPrecision) / kPrecision; + if (a == -0) + return 0; + return a; + } + + long dist2(int x1, int y1, int x2, int y2) { + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); + } + + // Viewers like evince can get really confused during copy-paste when + // the baseline wanders around. So I've decided to project every word + // onto the (straight) line baseline. All numbers are in the native + // PDF coordinate system, which has the origin in the bottom left and + // the unit is points, which is 1/72 inch. Tesseract reports baselines + // left-to-right no matter what the reading order is. We need the + // word baseline in reading order, so we do that conversion here. Returns + // the word's baseline origin and length. + void GetWordBaseline(int writing_direction, int ppi, int height, + int word_x1, int word_y1, int word_x2, int word_y2, + int line_x1, int line_y1, int line_x2, int line_y2, + double *x0, double *y0, double *length) { + if (writing_direction == WRITING_DIRECTION_RIGHT_TO_LEFT) { + Swap(&word_x1, &word_x2); + Swap(&word_y1, &word_y2); + } + double word_length; + double x, y; + { + int px = word_x1; + int py = word_y1; + double l2 = dist2(line_x1, line_y1, line_x2, line_y2); + if (l2 == 0) { + x = line_x1; + y = line_y1; + } + else { + double t = ((px - line_x2) * (line_x2 - line_x1) + + (py - line_y2) * (line_y2 - line_y1)) / l2; + x = line_x2 + t * (line_x2 - line_x1); + y = line_y2 + t * (line_y2 - line_y1); + } + word_length = sqrt(static_cast(dist2(word_x1, word_y1, + word_x2, word_y2))); + word_length = word_length * 72.0 / ppi; + x = x * 72 / ppi; + y = height - (y * 72.0 / ppi); + } + *x0 = x; + *y0 = y; + *length = word_length; + } + + // Compute coefficients for an affine matrix describing the rotation + // of the text. If the text is right-to-left such as Arabic or Hebrew, + // we reflect over the Y-axis. This matrix will set the coordinate + // system for placing text in the PDF file. + // + // RTL + // [ x' ] = [ a b ][ x ] = [-1 0 ] [ cos sin ][ x ] + // [ y' ] [ c d ][ y ] [ 0 1 ] [-sin cos ][ y ] + void AffineMatrix(int writing_direction, + int line_x1, int line_y1, int line_x2, int line_y2, + double *a, double *b, double *c, double *d) { + double theta = atan2(static_cast(line_y1 - line_y2), + static_cast(line_x2 - line_x1)); + *a = cos(theta); + *b = sin(theta); + *c = -sin(theta); + *d = cos(theta); + switch (writing_direction) { + case WRITING_DIRECTION_RIGHT_TO_LEFT: + *a = -*a; + *b = -*b; + break; + case WRITING_DIRECTION_TOP_TO_BOTTOM: + // TODO(jbreiden) Consider using the vertical PDF writing mode. + break; + default: + break; + } + } + + // There are some really awkward PDF viewers in the wild, such as + // 'Preview' which ships with the Mac. They do a better job with text + // selection and highlighting when given perfectly flat baseline + // instead of very slightly tilted. We clip small tilts to appease + // these viewers. I chose this threshold large enough to absorb noise, + // but small enough that lines probably won't cross each other if the + // whole page is tilted at almost exactly the clipping threshold. + void ClipBaseline(int ppi, int x1, int y1, int x2, int y2, + int *line_x1, int *line_y1, + int *line_x2, int *line_y2) { + *line_x1 = x1; + *line_y1 = y1; + *line_x2 = x2; + *line_y2 = y2; + double rise = abs(y2 - y1) * 72 / ppi; + double run = abs(x2 - x1) * 72 / ppi; + if (rise < 2.0 && 2.0 < run) + *line_y1 = *line_y2 = (y1 + y2) / 2; + } + + bool CodepointToUtf16be(int code, char utf16[kMaxBytesPerCodepoint]) { + if ((code > 0xD7FF && code < 0xE000) || code > 0x10FFFF) { + tprintf("Dropping invalid codepoint %d\n", code); + return false; + } + if (code < 0x10000) { + snprintf(utf16, kMaxBytesPerCodepoint, "%04X", code); + } + else { + int a = code - 0x010000; + int high_surrogate = (0x03FF & (a >> 10)) + 0xD800; + int low_surrogate = (0x03FF & a) + 0xDC00; + snprintf(utf16, kMaxBytesPerCodepoint, + "%04X%04X", high_surrogate, low_surrogate); + } + return true; + } + + char* TessPDFRenderer::GetPDFTextObjects(TessBaseAPI* api, + double width, double height) { + STRING pdf_str(""); + double ppi = api->GetSourceYResolution(); + + // These initial conditions are all arbitrary and will be overwritten + double old_x = 0.0, old_y = 0.0; + int old_fontsize = 0; + tesseract::WritingDirection old_writing_direction = + WRITING_DIRECTION_LEFT_TO_RIGHT; + bool new_block = true; + int fontsize = 0; + double a = 1; + double b = 0; + double c = 0; + double d = 1; + + // TODO(jbreiden) This marries the text and image together. + // Slightly cleaner from an abstraction standpoint if this were to + // live inside a separate text object. + pdf_str += "q "; + pdf_str.add_str_double("", prec(width)); + pdf_str += " 0 0 "; + pdf_str.add_str_double("", prec(height)); + pdf_str += " 0 0 cm"; + if (!textonly_) { + pdf_str += " /Im1 Do"; + } + pdf_str += " Q\n"; + + int line_x1 = 0; + int line_y1 = 0; + int line_x2 = 0; + int line_y2 = 0; + + ResultIterator *res_it = api->GetIterator(); + while (!res_it->Empty(RIL_BLOCK)) { + if (res_it->IsAtBeginningOf(RIL_BLOCK)) { + pdf_str += "BT\n3 Tr"; // Begin text object, use invisible ink + old_fontsize = 0; // Every block will declare its fontsize + new_block = true; // Every block will declare its affine matrix + } + + if (res_it->IsAtBeginningOf(RIL_TEXTLINE)) { + int x1, y1, x2, y2; + res_it->Baseline(RIL_TEXTLINE, &x1, &y1, &x2, &y2); + ClipBaseline(ppi, x1, y1, x2, y2, &line_x1, &line_y1, &line_x2, &line_y2); + } + + if (res_it->Empty(RIL_WORD)) { + res_it->Next(RIL_WORD); + continue; + } + + // Writing direction changes at a per-word granularity + tesseract::WritingDirection writing_direction; + { + tesseract::Orientation orientation; + tesseract::TextlineOrder textline_order; + float deskew_angle; + res_it->Orientation(&orientation, &writing_direction, + &textline_order, &deskew_angle); + if (writing_direction != WRITING_DIRECTION_TOP_TO_BOTTOM) { + switch (res_it->WordDirection()) { + case DIR_LEFT_TO_RIGHT: + writing_direction = WRITING_DIRECTION_LEFT_TO_RIGHT; + break; + case DIR_RIGHT_TO_LEFT: + writing_direction = WRITING_DIRECTION_RIGHT_TO_LEFT; + break; + default: + writing_direction = old_writing_direction; + } + } + } + + // Where is word origin and how long is it? + double x, y, word_length; + { + int word_x1, word_y1, word_x2, word_y2; + res_it->Baseline(RIL_WORD, &word_x1, &word_y1, &word_x2, &word_y2); + GetWordBaseline(writing_direction, ppi, height, + word_x1, word_y1, word_x2, word_y2, + line_x1, line_y1, line_x2, line_y2, + &x, &y, &word_length); + } + + if (writing_direction != old_writing_direction || new_block) { + AffineMatrix(writing_direction, + line_x1, line_y1, line_x2, line_y2, &a, &b, &c, &d); + pdf_str.add_str_double(" ", prec(a)); // . This affine matrix + pdf_str.add_str_double(" ", prec(b)); // . sets the coordinate + pdf_str.add_str_double(" ", prec(c)); // . system for all + pdf_str.add_str_double(" ", prec(d)); // . text that follows. + pdf_str.add_str_double(" ", prec(x)); // . + pdf_str.add_str_double(" ", prec(y)); // . + pdf_str += (" Tm "); // Place cursor absolutely + new_block = false; + } + else { + double dx = x - old_x; + double dy = y - old_y; + pdf_str.add_str_double(" ", prec(dx * a + dy * b)); + pdf_str.add_str_double(" ", prec(dx * c + dy * d)); + pdf_str += (" Td "); // Relative moveto + } + old_x = x; + old_y = y; + old_writing_direction = writing_direction; + + // Adjust font size on a per word granularity. Pay attention to + // fontsize, old_fontsize, and pdf_str. We've found that for + // in Arabic, Tesseract will happily return a fontsize of zero, + // so we make up a default number to protect ourselves. + { + bool bold, italic, underlined, monospace, serif, smallcaps; + int font_id; + res_it->WordFontAttributes(&bold, &italic, &underlined, &monospace, + &serif, &smallcaps, &fontsize, &font_id); + const int kDefaultFontsize = 8; + if (fontsize <= 0) + fontsize = kDefaultFontsize; + if (fontsize != old_fontsize) { + char textfont[20]; + snprintf(textfont, sizeof(textfont), "/f-0-0 %d Tf ", fontsize); + pdf_str += textfont; + old_fontsize = fontsize; + } + } + + bool last_word_in_line = res_it->IsAtFinalElement(RIL_TEXTLINE, RIL_WORD); + bool last_word_in_block = res_it->IsAtFinalElement(RIL_BLOCK, RIL_WORD); + STRING pdf_word(""); + int pdf_word_len = 0; + do { + const char *grapheme = res_it->GetUTF8Text(RIL_SYMBOL); + if (grapheme && grapheme[0] != '\0') { + GenericVector unicodes; + UNICHAR::UTF8ToUnicode(grapheme, &unicodes); + char utf16[kMaxBytesPerCodepoint]; + for (int i = 0; i < unicodes.length(); i++) { + int code = unicodes[i]; + if (CodepointToUtf16be(code, utf16)) { + pdf_word += utf16; + pdf_word_len++; + } + } + } + delete[]grapheme; + res_it->Next(RIL_SYMBOL); + } while (!res_it->Empty(RIL_BLOCK) && !res_it->IsAtBeginningOf(RIL_WORD)); + if (word_length > 0 && pdf_word_len > 0 && fontsize > 0) { + double h_stretch = + kCharWidth * prec(100.0 * word_length / (fontsize * pdf_word_len)); + pdf_str.add_str_double("", h_stretch); + pdf_str += " Tz"; // horizontal stretch + pdf_str += " [ <"; + pdf_str += pdf_word; // UTF-16BE representation + pdf_str += "> ] TJ"; // show the text + } + if (last_word_in_line) { + pdf_str += " \n"; + } + if (last_word_in_block) { + pdf_str += "ET\n"; // end the text object + } + } + char *ret = new char[pdf_str.length() + 1]; + strcpy(ret, pdf_str.string()); + delete res_it; + return ret; + } + + bool TessPDFRenderer::BeginDocumentHandler() { + char buf[kBasicBufSize]; + size_t n; + + n = snprintf(buf, sizeof(buf), + "%%PDF-1.5\n" + "%%%c%c%c%c\n", + 0xDE, 0xAD, 0xBE, 0xEB); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + // CATALOG + n = snprintf(buf, sizeof(buf), + "1 0 obj\n" + "<<\n" + " /Type /Catalog\n" + " /Pages %ld 0 R\n" + ">>\n" + "endobj\n", + 2L); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + // We are reserving object #2 for the /Pages + // object, which I am going to create and write + // at the end of the PDF file. + AppendPDFObject(""); + + // TYPE0 FONT + n = snprintf(buf, sizeof(buf), + "3 0 obj\n" + "<<\n" + " /BaseFont /GlyphLessFont\n" + " /DescendantFonts [ %ld 0 R ]\n" + " /Encoding /Identity-H\n" + " /Subtype /Type0\n" + " /ToUnicode %ld 0 R\n" + " /Type /Font\n" + ">>\n" + "endobj\n", + 4L, // CIDFontType2 font + 6L // ToUnicode + ); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + // CIDFONTTYPE2 + n = snprintf(buf, sizeof(buf), + "4 0 obj\n" + "<<\n" + " /BaseFont /GlyphLessFont\n" + " /CIDToGIDMap %ld 0 R\n" + " /CIDSystemInfo\n" + " <<\n" + " /Ordering (Identity)\n" + " /Registry (Adobe)\n" + " /Supplement 0\n" + " >>\n" + " /FontDescriptor %ld 0 R\n" + " /Subtype /CIDFontType2\n" + " /Type /Font\n" + " /DW %d\n" + ">>\n" + "endobj\n", + 5L, // CIDToGIDMap + 7L, // Font descriptor + 1000 / kCharWidth); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + // CIDTOGIDMAP + const int kCIDToGIDMapSize = 2 * (1 << 16); + unsigned char *cidtogidmap = new unsigned char[kCIDToGIDMapSize]; + for (int i = 0; i < kCIDToGIDMapSize; i++) { + cidtogidmap[i] = (i % 2) ? 1 : 0; + } + size_t len; + unsigned char *comp = + zlibCompress(cidtogidmap, kCIDToGIDMapSize, &len); + + unsigned char aaa[210]; + memcpy(aaa, comp, 210); + delete[] cidtogidmap; + n = snprintf(buf, sizeof(buf), + "5 0 obj\n" + "<<\n" + " /Length %lu /Filter /FlateDecode\n" + ">>\n" + "stream\n", + (unsigned long)len); + if (n >= sizeof(buf)) { + lept_free(comp); + return false; + } + AppendString(buf); + long objsize = strlen(buf); + AppendData(reinterpret_cast(comp), len); + objsize += len; + lept_free(comp); + const char *endstream_endobj = + "endstream\n" + "endobj\n"; + AppendString(endstream_endobj); + objsize += strlen(endstream_endobj); + AppendPDFObjectDIY(objsize); + + const char *stream = + "/CIDInit /ProcSet findresource begin\n" + "12 dict begin\n" + "begincmap\n" + "/CIDSystemInfo\n" + "<<\n" + " /Registry (Adobe)\n" + " /Ordering (UCS)\n" + " /Supplement 0\n" + ">> def\n" + "/CMapName /Adobe-Identify-UCS def\n" + "/CMapType 2 def\n" + "1 begincodespacerange\n" + "<0000> \n" + "endcodespacerange\n" + "1 beginbfrange\n" + "<0000> <0000>\n" + "endbfrange\n" + "endcmap\n" + "CMapName currentdict /CMap defineresource pop\n" + "end\n" + "end\n"; + + // TOUNICODE + n = snprintf(buf, sizeof(buf), + "6 0 obj\n" + "<< /Length %lu >>\n" + "stream\n" + "%s" + "endstream\n" + "endobj\n", (unsigned long)strlen(stream), stream); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + // FONT DESCRIPTOR + n = snprintf(buf, sizeof(buf), + "7 0 obj\n" + "<<\n" + " /Ascent %d\n" + " /CapHeight %d\n" + " /Descent -1\n" // Spec says must be negative + " /Flags 5\n" // FixedPitch + Symbolic + " /FontBBox [ 0 0 %d %d ]\n" + " /FontFile2 %ld 0 R\n" + " /FontName /GlyphLessFont\n" + " /ItalicAngle 0\n" + " /StemV 80\n" + " /Type /FontDescriptor\n" + ">>\n" + "endobj\n", + 1000, + 1000, + 1000 / kCharWidth, + 1000, + 8L // Font data + ); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + + n = snprintf(buf, sizeof(buf), "%s/pdf.ttf", datadir_); + if (n >= sizeof(buf)) return false; + FILE *fp = fopen("tessdata/pdf.ttf", "rb"); + if (!fp) { + tprintf("Can not open file \"%s\"!\n", buf); + return false; + } + fseek(fp, 0, SEEK_END); + long int size = ftell(fp); + fseek(fp, 0, SEEK_SET); + char *buffer = new char[size]; + if (fread(buffer, 1, size, fp) != size) { + fclose(fp); + delete[] buffer; + return false; + } + fclose(fp); + // FONTFILE2 + n = snprintf(buf, sizeof(buf), + "8 0 obj\n" + "<<\n" + " /Length %ld\n" + " /Length1 %ld\n" + ">>\n" + "stream\n", size, size); + if (n >= sizeof(buf)) { + delete[] buffer; + return false; + } + AppendString(buf); + objsize = strlen(buf); + AppendData(buffer, size); + delete[] buffer; + objsize += size; + AppendString(endstream_endobj); + objsize += strlen(endstream_endobj); + AppendPDFObjectDIY(objsize); + return true; + } + + bool TessPDFRenderer::imageToPDFObj(Pix *pix, + char *filename, + long int objnum, + char **pdf_object, + long int *pdf_object_size) { + size_t n; + char b0[kBasicBufSize]; + char b1[kBasicBufSize]; + char b2[kBasicBufSize]; + if (!pdf_object_size || !pdf_object) + return false; + *pdf_object = NULL; + *pdf_object_size = 0; + if (!filename) + return false; + + L_Compressed_Data *cid = NULL; + const int kJpegQuality = 85; + + int format, sad; + findFileFormat(filename, &format); + if (pixGetSpp(pix) == 4 && format == IFF_PNG) { + Pix *p1 = pixAlphaBlendUniform(pix, 0xffffff00); + sad = pixGenerateCIData(p1, L_FLATE_ENCODE, 0, 0, &cid); + pixDestroy(&p1); + } + else { + sad = l_generateCIDataForPdf(filename, pix, kJpegQuality, &cid); + } + + if (sad || !cid) { + l_CIDataDestroy(&cid); + return false; + } + + const char *group4 = ""; + const char *filter; + switch (cid->type) { + case L_FLATE_ENCODE: + filter = "/FlateDecode"; + break; + case L_JPEG_ENCODE: + filter = "/DCTDecode"; + break; + case L_G4_ENCODE: + filter = "/CCITTFaxDecode"; + group4 = " /K -1\n"; + break; + case L_JP2K_ENCODE: + filter = "/JPXDecode"; + break; + default: + l_CIDataDestroy(&cid); + return false; + } + + // Maybe someday we will accept RGBA but today is not that day. + // It requires creating an /SMask for the alpha channel. + // http://stackoverflow.com/questions/14220221 + const char *colorspace; + if (cid->ncolors > 0) { + n = snprintf(b0, sizeof(b0), + " /ColorSpace [ /Indexed /DeviceRGB %d %s ]\n", + cid->ncolors - 1, cid->cmapdatahex); + if (n >= sizeof(b0)) { + l_CIDataDestroy(&cid); + return false; + } + colorspace = b0; + } + else { + switch (cid->spp) { + case 1: + colorspace = " /ColorSpace /DeviceGray\n"; + break; + case 3: + colorspace = " /ColorSpace /DeviceRGB\n"; + break; + default: + l_CIDataDestroy(&cid); + return false; + } + } + + int predictor = (cid->predictor) ? 14 : 1; + + // IMAGE + n = snprintf(b1, sizeof(b1), + "%ld 0 obj\n" + "<<\n" + " /Length %ld\n" + " /Subtype /Image\n", + objnum, (unsigned long)cid->nbytescomp); + if (n >= sizeof(b1)) { + l_CIDataDestroy(&cid); + return false; + } + + n = snprintf(b2, sizeof(b2), + " /Width %d\n" + " /Height %d\n" + " /BitsPerComponent %d\n" + " /Filter %s\n" + " /DecodeParms\n" + " <<\n" + " /Predictor %d\n" + " /Colors %d\n" + "%s" + " /Columns %d\n" + " /BitsPerComponent %d\n" + " >>\n" + ">>\n" + "stream\n", + cid->w, cid->h, cid->bps, filter, predictor, cid->spp, + group4, cid->w, cid->bps); + if (n >= sizeof(b2)) { + l_CIDataDestroy(&cid); + return false; + } + + const char *b3 = + "endstream\n" + "endobj\n"; + + size_t b1_len = strlen(b1); + size_t b2_len = strlen(b2); + size_t b3_len = strlen(b3); + size_t colorspace_len = strlen(colorspace); + + *pdf_object_size = + b1_len + colorspace_len + b2_len + cid->nbytescomp + b3_len; + *pdf_object = new char[*pdf_object_size]; + + char *p = *pdf_object; + memcpy(p, b1, b1_len); + p += b1_len; + memcpy(p, colorspace, colorspace_len); + p += colorspace_len; + memcpy(p, b2, b2_len); + p += b2_len; + memcpy(p, cid->datacomp, cid->nbytescomp); + p += cid->nbytescomp; + memcpy(p, b3, b3_len); + l_CIDataDestroy(&cid); + return true; + } + + bool TessPDFRenderer::imageToPDFObj(const char* jpgdata, int len, long int objnum, + char **pdf_object, long int *pdf_object_size) + { + size_t n; + char b0[kBasicBufSize]; + char b1[kBasicBufSize]; + char b2[kBasicBufSize]; + if (!pdf_object_size || !pdf_object) + return false; + *pdf_object = NULL; + *pdf_object_size = 0; + + L_Compressed_Data *cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); + char* data = const_cast(jpgdata); + cid->w = 1653; + cid->h = 2338; + cid->res = 200; + cid->bps = 8; + cid->type = L_JPEG_ENCODE; + cid->nbytescomp = len; + cid->datacomp = reinterpret_cast(data); + cid->spp = 1; + + if (!cid) + { + l_CIDataDestroy(&cid); + return false; + } + + const char *group4 = ""; + const char *filter; + switch (cid->type) { + case L_FLATE_ENCODE: + filter = "/FlateDecode"; + break; + case L_JPEG_ENCODE: + filter = "/DCTDecode"; + break; + case L_G4_ENCODE: + filter = "/CCITTFaxDecode"; + group4 = " /K -1\n"; + break; + case L_JP2K_ENCODE: + filter = "/JPXDecode"; + break; + default: + l_CIDataDestroy(&cid); + return false; + } + + // Maybe someday we will accept RGBA but today is not that day. + // It requires creating an /SMask for the alpha channel. + // http://stackoverflow.com/questions/14220221 + const char *colorspace; + if (cid->ncolors > 0) { + n = snprintf(b0, sizeof(b0), + " /ColorSpace [ /Indexed /DeviceRGB %d %s ]\n", + cid->ncolors - 1, cid->cmapdatahex); + if (n >= sizeof(b0)) { + l_CIDataDestroy(&cid); + return false; + } + colorspace = b0; + } + else { + switch (cid->spp) { + case 1: + colorspace = " /ColorSpace /DeviceGray\n"; + break; + case 3: + colorspace = " /ColorSpace /DeviceRGB\n"; + break; + default: + l_CIDataDestroy(&cid); + return false; + } + } + + int predictor = (cid->predictor) ? 14 : 1; + + // IMAGE + n = snprintf(b1, sizeof(b1), + "%ld 0 obj\n" + "<<\n" + " /Length %ld\n" + " /Subtype /Image\n", + objnum, (unsigned long)cid->nbytescomp); + if (n >= sizeof(b1)) { + l_CIDataDestroy(&cid); + return false; + } + + n = snprintf(b2, sizeof(b2), + " /Width %d\n" + " /Height %d\n" + " /BitsPerComponent %d\n" + " /Filter %s\n" + " /DecodeParms\n" + " <<\n" + " /Predictor %d\n" + " /Colors %d\n" + "%s" + " /Columns %d\n" + " /BitsPerComponent %d\n" + " >>\n" + ">>\n" + "stream\n", + cid->w, cid->h, cid->bps, filter, predictor, cid->spp, + group4, cid->w, cid->bps); + if (n >= sizeof(b2)) { + l_CIDataDestroy(&cid); + return false; + } + + const char *b3 = + "endstream\n" + "endobj\n"; + + size_t b1_len = strlen(b1); + size_t b2_len = strlen(b2); + size_t b3_len = strlen(b3); + size_t colorspace_len = strlen(colorspace); + + *pdf_object_size = + b1_len + colorspace_len + b2_len + cid->nbytescomp + b3_len; + *pdf_object = new char[*pdf_object_size]; + + char *p = *pdf_object; + memcpy(p, b1, b1_len); + p += b1_len; + memcpy(p, colorspace, colorspace_len); + p += colorspace_len; + memcpy(p, b2, b2_len); + p += b2_len; + memcpy(p, cid->datacomp, cid->nbytescomp); + p += cid->nbytescomp; + memcpy(p, b3, b3_len); + l_CIDataDestroy(&cid); + return true; + } + + bool TessPDFRenderer::AddImageHandler(TessBaseAPI* api) { + size_t n; + char buf[kBasicBufSize]; + char buf2[kBasicBufSize]; + Pix *pix = api->GetInputImage(); + char *filename = (char *)api->GetInputName(); + int ppi = api->GetSourceYResolution(); + if (!pix || ppi <= 0) + return false; + double width = pixGetWidth(pix) * 72.0 / ppi; + double height = pixGetHeight(pix) * 72.0 / ppi; + + snprintf(buf2, sizeof(buf2), "/XObject << /Im1 %ld 0 R >>\n", obj_ + 2); + const char *xobject = (textonly_) ? "" : buf2; + + // PAGE + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Type /Page\n" + " /Parent %ld 0 R\n" + " /MediaBox [0 0 %.2f %.2f]\n" + " /Contents %ld 0 R\n" + " /Resources\n" + " <<\n" + " %s" + " /ProcSet [ /PDF /Text /ImageB /ImageI /ImageC ]\n" + " /Font << /f-0-0 %ld 0 R >>\n" + " >>\n" + ">>\n" + "endobj\n", + obj_, + 2L, // Pages object + width, height, + obj_ + 1, // Contents object + xobject, // Image object + 3L); // Type0 Font + if (n >= sizeof(buf)) return false; + pages_.push_back(obj_); + AppendPDFObject(buf); + + // CONTENTS + char* pdftext = GetPDFTextObjects(api, width, height); + long pdftext_len = strlen(pdftext); + unsigned char *pdftext_casted = reinterpret_cast(pdftext); + size_t len; + unsigned char *comp_pdftext = + zlibCompress(pdftext_casted, pdftext_len, &len); + long comp_pdftext_len = len; + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Length %ld /Filter /FlateDecode\n" + ">>\n" + "stream\n", obj_, comp_pdftext_len); + if (n >= sizeof(buf)) { + delete[] pdftext; + lept_free(comp_pdftext); + return false; + } + AppendString(buf); + long objsize = strlen(buf); + AppendData(reinterpret_cast(comp_pdftext), comp_pdftext_len); + objsize += comp_pdftext_len; + lept_free(comp_pdftext); + delete[] pdftext; + const char *b2 = + "endstream\n" + "endobj\n"; + AppendString(b2); + objsize += strlen(b2); + AppendPDFObjectDIY(objsize); + + if (!textonly_) { + char *pdf_object = NULL; + if (!imageToPDFObj(pix, filename, obj_, &pdf_object, &objsize)) { + return false; + } + AppendData(pdf_object, objsize); + AppendPDFObjectDIY(objsize); + delete[] pdf_object; + } + return true; + } + + bool TessPDFRenderer::AddImageHandler(TessBaseAPI * api, const char * jpgdata, int length) + { + size_t n; + char buf[kBasicBufSize]; + char buf2[kBasicBufSize]; + Pix *pix = api->GetInputImage(); + char *filename = (char *)api->GetInputName(); + int ppi = api->GetSourceYResolution(); + if (!pix || ppi <= 0) + return false; + double width = pixGetWidth(pix) * 72.0 / ppi; + double height = pixGetHeight(pix) * 72.0 / ppi; + + snprintf(buf2, sizeof(buf2), "/XObject << /Im1 %ld 0 R >>\n", obj_ + 2); + const char *xobject = (textonly_) ? "" : buf2; + + // PAGE + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Type /Page\n" + " /Parent %ld 0 R\n" + " /MediaBox [0 0 %.2f %.2f]\n" + " /Contents %ld 0 R\n" + " /Resources\n" + " <<\n" + " %s" + " /ProcSet [ /PDF /Text /ImageB /ImageI /ImageC ]\n" + " /Font << /f-0-0 %ld 0 R >>\n" + " >>\n" + ">>\n" + "endobj\n", + obj_, + 2L, // Pages object + width, height, + obj_ + 1, // Contents object + xobject, // Image object + 3L); // Type0 Font + if (n >= sizeof(buf)) return false; + pages_.push_back(obj_); + AppendPDFObject(buf); + + // CONTENTS + char* pdftext = GetPDFTextObjects(api, width, height); + long pdftext_len = strlen(pdftext); + unsigned char *pdftext_casted = reinterpret_cast(pdftext); + size_t len; + unsigned char *comp_pdftext = + zlibCompress(pdftext_casted, pdftext_len, &len); + long comp_pdftext_len = len; + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Length %ld /Filter /FlateDecode\n" + ">>\n" + "stream\n", obj_, comp_pdftext_len); + if (n >= sizeof(buf)) { + delete[] pdftext; + lept_free(comp_pdftext); + return false; + } + AppendString(buf); + long objsize = strlen(buf); + AppendData(reinterpret_cast(comp_pdftext), comp_pdftext_len); + objsize += comp_pdftext_len; + lept_free(comp_pdftext); + delete[] pdftext; + const char *b2 = + "endstream\n" + "endobj\n"; + AppendString(b2); + objsize += strlen(b2); + AppendPDFObjectDIY(objsize); + + if (!textonly_) { + char *pdf_object = NULL; + if (!imageToPDFObj(jpgdata, length, obj_, &pdf_object, &objsize)) { + return false; + } + AppendData(pdf_object, objsize); + AppendPDFObjectDIY(objsize); + delete[] pdf_object; + } + return true; + } + + bool TessPDFRenderer::EndDocumentHandler() { + size_t n; + char buf[kBasicBufSize]; + + // We reserved the /Pages object number early, so that the /Page + // objects could refer to their parent. We finally have enough + // information to go fill it in. Using lower level calls to manipulate + // the offset record in two spots, because we are placing objects + // out of order in the file. + + // PAGES + const long int kPagesObjectNumber = 2; + offsets_[kPagesObjectNumber] = offsets_.back(); // manipulation #1 + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Type /Pages\n" + " /Kids [ ", kPagesObjectNumber); + if (n >= sizeof(buf)) return false; + AppendString(buf); + size_t pages_objsize = strlen(buf); + for (size_t i = 0; i < pages_.size(); i++) { + n = snprintf(buf, sizeof(buf), + "%ld 0 R ", pages_[i]); + if (n >= sizeof(buf)) return false; + AppendString(buf); + pages_objsize += strlen(buf); + } + n = snprintf(buf, sizeof(buf), + "]\n" + " /Count %d\n" + ">>\n" + "endobj\n", pages_.size()); + if (n >= sizeof(buf)) return false; + AppendString(buf); + pages_objsize += strlen(buf); + offsets_.back() += pages_objsize; // manipulation #2 + + // INFO + STRING utf16_title = "FEFF"; // byte_order_marker + GenericVector unicodes; + UNICHAR::UTF8ToUnicode(title(), &unicodes); + char utf16[kMaxBytesPerCodepoint]; + for (int i = 0; i < unicodes.length(); i++) { + int code = unicodes[i]; + if (CodepointToUtf16be(code, utf16)) { + utf16_title += utf16; + } + } + + char* datestr = l_getFormattedDate(); + n = snprintf(buf, sizeof(buf), + "%ld 0 obj\n" + "<<\n" + " /Producer (Tesseract %s)\n" + " /CreationDate (D:%s)\n" + " /Title <%s>\n" + ">>\n" + "endobj\n", + obj_, TESSERACT_VERSION_STR, datestr, utf16_title.c_str()); + lept_free(datestr); + if (n >= sizeof(buf)) return false; + AppendPDFObject(buf); + n = snprintf(buf, sizeof(buf), + "xref\n" + "0 %ld\n" + "0000000000 65535 f \n", obj_); + if (n >= sizeof(buf)) return false; + AppendString(buf); + for (int i = 1; i < obj_; i++) { + n = snprintf(buf, sizeof(buf), "%010ld 00000 n \n", offsets_[i]); + if (n >= sizeof(buf)) return false; + AppendString(buf); + } + n = snprintf(buf, sizeof(buf), + "trailer\n" + "<<\n" + " /Size %ld\n" + " /Root %ld 0 R\n" + " /Info %ld 0 R\n" + ">>\n" + "startxref\n" + "%ld\n" + "%%%%EOF\n", + obj_, + 1L, // catalog + obj_ - 1, // info + offsets_.back()); + if (n >= sizeof(buf)) return false; + AppendString(buf); + return true; + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/api/renderer.cpp b/3rdparty/hgOCR/include/api/renderer.cpp new file mode 100644 index 00000000..1f6d3e22 --- /dev/null +++ b/3rdparty/hgOCR/include/api/renderer.cpp @@ -0,0 +1,283 @@ +/////////////////////////////////////////////////////////////////////// +// File: renderer.cpp +// Description: Rendering interface to inject into TessBaseAPI +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include +#include "baseapi.h" +#include "genericvector.h" +#include "renderer.h" + +namespace tesseract { + + /********************************************************************** + * Base Renderer interface implementation + **********************************************************************/ + TessResultRenderer::TessResultRenderer(const char *outputbase, + const char* extension) + : file_extension_(extension), + title_(""), imagenum_(-1), + fout_(stdout), + next_(NULL), + happy_(true) { + if (strcmp(outputbase, "-") && strcmp(outputbase, "stdout")) { + STRING outfile = STRING(outputbase) + STRING(".") + STRING(file_extension_); + fout_ = fopen(outfile.string(), "wb"); + if (fout_ == NULL) { + happy_ = false; + } + } + } + + TessResultRenderer::~TessResultRenderer() { + if (fout_ != NULL) { + if (fout_ != stdout) + fclose(fout_); + else + clearerr(fout_); + } + delete next_; + } + + void TessResultRenderer::insert(TessResultRenderer* next) { + if (next == NULL) return; + + TessResultRenderer* remainder = next_; + next_ = next; + if (remainder) { + while (next->next_ != NULL) { + next = next->next_; + } + next->next_ = remainder; + } + } + + bool TessResultRenderer::BeginDocument(const char* title) { + if (!happy_) return false; + title_ = title; + imagenum_ = -1; + bool ok = BeginDocumentHandler(); + if (next_) { + ok = next_->BeginDocument(title) && ok; + } + return ok; + } + + bool TessResultRenderer::AddImage(TessBaseAPI* api, const char* jpgdata, int len) { + if (!happy_) return false; + ++imagenum_; + bool ok = AddImageHandler(api, jpgdata, len); + if (next_) { + ok = next_->AddImage(api, jpgdata, len) && ok; + } + return ok; + } + + bool TessResultRenderer::EndDocument() { + if (!happy_) return false; + bool ok = EndDocumentHandler(); + if (next_) { + ok = next_->EndDocument() && ok; + } + return ok; + } + + void TessResultRenderer::AppendString(const char* s) { + AppendData(s, strlen(s)); + } + + void TessResultRenderer::AppendData(const char* s, int len) { + int n = fwrite(s, 1, len, fout_); + if (n != len) happy_ = false; + } + + bool TessResultRenderer::BeginDocumentHandler() { + return happy_; + } + + bool TessResultRenderer::EndDocumentHandler() { + return happy_; + } + + + /********************************************************************** + * UTF8 Text Renderer interface implementation + **********************************************************************/ + TessTextRenderer::TessTextRenderer(const char *outputbase) + : TessResultRenderer(outputbase, "txt") { + } + + bool TessTextRenderer::AddImageHandler(TessBaseAPI* api) { + char* utf8 = api->GetUTF8Text(); + if (utf8 == NULL) { + return false; + } + + AppendString(utf8); + delete[] utf8; + + bool pageBreak = false; + api->GetBoolVariable("include_page_breaks", &pageBreak); + const char* pageSeparator = api->GetStringVariable("page_separator"); + if (pageBreak) { + AppendString(pageSeparator); + } + + return true; + } + + /********************************************************************** + * HOcr Text Renderer interface implementation + **********************************************************************/ + TessHOcrRenderer::TessHOcrRenderer(const char *outputbase) + : TessResultRenderer(outputbase, "hocr") { + font_info_ = false; + } + + TessHOcrRenderer::TessHOcrRenderer(const char *outputbase, bool font_info) + : TessResultRenderer(outputbase, "hocr") { + font_info_ = font_info; + } + + bool TessHOcrRenderer::BeginDocumentHandler() { + AppendString( + "\n" + "\n" + "\n \n "); + AppendString(title()); + AppendString( + "\n" + "\n" + " \n" + " \n" + "\n\n"); + + return true; + } + + bool TessHOcrRenderer::EndDocumentHandler() { + AppendString(" \n\n"); + + return true; + } + + bool TessHOcrRenderer::AddImageHandler(TessBaseAPI* api) { + char* hocr = api->GetHOCRText(imagenum()); + if (hocr == NULL) return false; + + AppendString(hocr); + delete[] hocr; + + return true; + } + + /********************************************************************** + * TSV Text Renderer interface implementation + **********************************************************************/ + TessTsvRenderer::TessTsvRenderer(const char* outputbase) + : TessResultRenderer(outputbase, "tsv") { + font_info_ = false; + } + + TessTsvRenderer::TessTsvRenderer(const char* outputbase, bool font_info) + : TessResultRenderer(outputbase, "tsv") { + font_info_ = font_info; + } + + bool TessTsvRenderer::BeginDocumentHandler() { + // Output TSV column headings + AppendString( + "level\tpage_num\tblock_num\tpar_num\tline_num\tword_" + "num\tleft\ttop\twidth\theight\tconf\ttext\n"); + return true; + } + + bool TessTsvRenderer::EndDocumentHandler() { return true; } + + bool TessTsvRenderer::AddImageHandler(TessBaseAPI* api) { + char* tsv = api->GetTSVText(imagenum()); + if (tsv == NULL) return false; + + AppendString(tsv); + delete[] tsv; + + return true; + } + + /********************************************************************** + * UNLV Text Renderer interface implementation + **********************************************************************/ + TessUnlvRenderer::TessUnlvRenderer(const char *outputbase) + : TessResultRenderer(outputbase, "unlv") { + } + + bool TessUnlvRenderer::AddImageHandler(TessBaseAPI* api) { + char* unlv = api->GetUNLVText(); + if (unlv == NULL) return false; + + AppendString(unlv); + delete[] unlv; + + return true; + } + + /********************************************************************** + * BoxText Renderer interface implementation + **********************************************************************/ + TessBoxTextRenderer::TessBoxTextRenderer(const char *outputbase) + : TessResultRenderer(outputbase, "box") { + } + + bool TessBoxTextRenderer::AddImageHandler(TessBaseAPI* api) { + char* text = api->GetBoxText(imagenum()); + if (text == NULL) return false; + + AppendString(text); + delete[] text; + + return true; + } + + /********************************************************************** + * Osd Text Renderer interface implementation + **********************************************************************/ + TessOsdRenderer::TessOsdRenderer(const char* outputbase) + : TessResultRenderer(outputbase, "osd") {} + + bool TessOsdRenderer::AddImageHandler(TessBaseAPI* api) { + char* osd = api->GetOsdText(imagenum()); + if (osd == NULL) return false; + + AppendString(osd); + delete[] osd; + + return true; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/api/renderer.h b/3rdparty/hgOCR/include/api/renderer.h new file mode 100644 index 00000000..c3b4af2b --- /dev/null +++ b/3rdparty/hgOCR/include/api/renderer.h @@ -0,0 +1,271 @@ +/////////////////////////////////////////////////////////////////////// +// File: renderer.h +// Description: Rendering interface to inject into TessBaseAPI +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_API_RENDERER_H_ +#define TESSERACT_API_RENDERER_H_ + +// To avoid collision with other typenames include the ABSOLUTE MINIMUM +// complexity of includes here. Use forward declarations wherever possible +// and hide includes of complex types in baseapi.cpp. +#include "genericvector.h" +#include "platform.h" +#include "publictypes.h" + +namespace tesseract { + + class TessBaseAPI; + + /** + * Interface for rendering tesseract results into a document, such as text, + * HOCR or pdf. This class is abstract. Specific classes handle individual + * formats. This interface is then used to inject the renderer class into + * tesseract when processing images. + * + * For simplicity implementing this with tesesract version 3.01, + * the renderer contains document state that is cleared from document + * to document just as the TessBaseAPI is. This way the base API can just + * delegate its rendering functionality to injected renderers, and the + * renderers can manage the associated state needed for the specific formats + * in addition to the heuristics for producing it. + */ + class TESS_API TessResultRenderer { + public: + virtual ~TessResultRenderer(); + + // Takes ownership of pointer so must be new'd instance. + // Renderers aren't ordered, but appends the sequences of next parameter + // and existing next(). The renderers should be unique across both lists. + void insert(TessResultRenderer* next); + + // Returns the next renderer or NULL. + TessResultRenderer* next() { return next_; } + + /** + * Starts a new document with the given title. + * This clears the contents of the output data. + * Title should use UTF-8 encoding. + */ + bool BeginDocument(const char* title); + + /** + * Adds the recognized text from the source image to the current document. + * Invalid if BeginDocument not yet called. + * + * Note that this API is a bit weird but is designed to fit into the + * current TessBaseAPI implementation where the api has lots of state + * information that we might want to add in. + */ + bool AddImage(TessBaseAPI * api, const char * jpgdata, int len); + + /** + * Finishes the document and finalizes the output data + * Invalid if BeginDocument not yet called. + */ + bool EndDocument(); + + const char* file_extension() const { return file_extension_; } + const char* title() const { return title_.c_str(); } + + /** + * Returns the index of the last image given to AddImage + * (i.e. images are incremented whether the image succeeded or not) + * + * This is always defined. It means either the number of the + * current image, the last image ended, or in the completed document + * depending on when in the document lifecycle you are looking at it. + * Will return -1 if a document was never started. + */ + int imagenum() const { return imagenum_; } + + protected: + /** + * Called by concrete classes. + * + * outputbase is the name of the output file excluding + * extension. For example, "/path/to/chocolate-chip-cookie-recipe" + * + * extension indicates the file extension to be used for output + * files. For example "pdf" will produce a .pdf file, and "hocr" + * will produce .hocr files. + */ + TessResultRenderer(const char *outputbase, + const char* extension); + + // Hook for specialized handling in BeginDocument() + virtual bool BeginDocumentHandler(); + + // This must be overriden to render the OCR'd results + virtual bool AddImageHandler(TessBaseAPI* api) = 0; + + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) = 0; + + // Hook for specialized handling in EndDocument() + virtual bool EndDocumentHandler(); + + // Renderers can call this to append '\0' terminated strings into + // the output string returned by GetOutput. + // This method will grow the output buffer if needed. + void AppendString(const char* s); + + // Renderers can call this to append binary byte sequences into + // the output string returned by GetOutput. Note that s is not necessarily + // '\0' terminated (and can contain '\0' within it). + // This method will grow the output buffer if needed. + void AppendData(const char* s, int len); + + private: + const char* file_extension_; // standard extension for generated output + STRING title_; // title of document being renderered + int imagenum_; // index of last image added + + FILE* fout_; // output file pointer + TessResultRenderer* next_; // Can link multiple renderers together + bool happy_; // I get grumpy when the disk fills up, etc. + }; + + /** + * Renders tesseract output into a plain UTF-8 text string + */ + class TESS_API TessTextRenderer : public TessResultRenderer { + public: + explicit TessTextRenderer(const char *outputbase); + + protected: + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + }; + + /** + * Renders tesseract output into an hocr text string + */ + class TESS_API TessHOcrRenderer : public TessResultRenderer { + public: + explicit TessHOcrRenderer(const char *outputbase, bool font_info); + explicit TessHOcrRenderer(const char *outputbase); + + protected: + virtual bool BeginDocumentHandler(); + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + virtual bool EndDocumentHandler(); + + private: + bool font_info_; // whether to print font information + }; + + /** + * Renders Tesseract output into a TSV string + */ + class TESS_API TessTsvRenderer : public TessResultRenderer { + public: + explicit TessTsvRenderer(const char* outputbase, bool font_info); + explicit TessTsvRenderer(const char* outputbase); + + protected: + virtual bool BeginDocumentHandler(); + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + virtual bool EndDocumentHandler(); + + private: + bool font_info_; // whether to print font information + }; + + /** + * Renders tesseract output into searchable PDF + */ + class TESS_API TessPDFRenderer : public TessResultRenderer { + public: + // datadir is the location of the TESSDATA. We need it because + // we load a custom PDF font from this location. + TessPDFRenderer(const char* outputbase, const char* datadir); + TessPDFRenderer(const char* outputbase, const char* datadir, bool textonly); + + protected: + + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len); + + virtual bool BeginDocumentHandler(); + + virtual bool AddImageHandler(TessBaseAPI* api); + + virtual bool EndDocumentHandler(); + + private: + // We don't want to have every image in memory at once, + // so we store some metadata as we go along producing + // PDFs one page at a time. At the end, that metadata is + // used to make everything that isn't easily handled in a + // streaming fashion. + long int obj_; // counter for PDF objects + GenericVector offsets_; // offset of every PDF object in bytes + GenericVector pages_; // object number for every /Page object + const char *datadir_; // where to find the custom font + bool textonly_; // skip images if set + // Bookkeeping only. DIY = Do It Yourself. + void AppendPDFObjectDIY(size_t objectsize); + // Bookkeeping + emit data. + void AppendPDFObject(const char *data); + // Create the /Contents object for an entire page. + char* GetPDFTextObjects(TessBaseAPI* api, double width, double height); + // Turn an image into a PDF object. Only transcode if we have to. + static bool imageToPDFObj(Pix *pix, char *filename, long int objnum, + char **pdf_object, long int *pdf_object_size); + static bool imageToPDFObj(const char* jpgdata, int len, long int objnum, + char **pdf_object, long int *pdf_object_size); + }; + + + /** + * Renders tesseract output into a plain UTF-8 text string + */ + class TESS_API TessUnlvRenderer : public TessResultRenderer { + public: + explicit TessUnlvRenderer(const char *outputbase); + + protected: + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + }; + + /** + * Renders tesseract output into a plain UTF-8 text string + */ + class TESS_API TessBoxTextRenderer : public TessResultRenderer { + public: + explicit TessBoxTextRenderer(const char *outputbase); + + protected: + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + }; + + /** + * Renders tesseract output into an osd text string + */ + class TESS_API TessOsdRenderer : public TessResultRenderer { + public: + explicit TessOsdRenderer(const char* outputbase); + + protected: + virtual bool AddImageHandler(TessBaseAPI* api); + virtual bool AddImageHandler(TessBaseAPI* api, const char* jpgdata, int len) { return false; } + }; + +} // namespace tesseract. + +#endif // TESSERACT_API_RENDERER_H_ diff --git a/3rdparty/hgOCR/include/api/tesseractmain.cpp b/3rdparty/hgOCR/include/api/tesseractmain.cpp new file mode 100644 index 00000000..e320ef37 --- /dev/null +++ b/3rdparty/hgOCR/include/api/tesseractmain.cpp @@ -0,0 +1,546 @@ +/********************************************************************** +* File: tessedit.cpp (Formerly tessedit.c) +* Description: Main program for merge of tess and editor. +* Author: Ray Smith +* Created: Tue Jan 07 15:21:46 GMT 1992 +* +* (C) Copyright 1992, Hewlett-Packard Ltd. +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** http://www.apache.org/licenses/LICENSE-2.0 +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +* +**********************************************************************/ + +// Include automatically generated configuration file if running autoconf +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include + +#include "allheaders.h" +#include "baseapi.h" +#include "basedir.h" +#include "dict.h" +#include "openclwrapper.h" +#include "osdetect.h" +#include "renderer.h" +#include "strngs.h" +#include "tprintf.h" +#include "StopWatch.h" + +#if defined(HAVE_TIFFIO_H) && defined(_WIN32) + +#include + +static void Win32WarningHandler(const char* module, const char* fmt, + va_list ap) { + if (module != NULL) { + fprintf(stderr, "%s: ", module); + } + fprintf(stderr, "Warning, "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, ".\n"); +} + +#endif /* HAVE_TIFFIO_H && _WIN32 */ + +void PrintVersionInfo() { + char* versionStrP; + + printf("tesseract %s\n", tesseract::TessBaseAPI::Version()); + + versionStrP = getLeptonicaVersion(); + printf(" %s\n", versionStrP); + lept_free(versionStrP); + + versionStrP = getImagelibVersions(); + printf(" %s\n", versionStrP); + lept_free(versionStrP); + +#ifdef USE_OPENCL + cl_platform_id platform[4]; + cl_uint num_platforms; + + printf(" OpenCL info:\n"); + if (clGetPlatformIDs(4, platform, &num_platforms) == CL_SUCCESS) { + printf(" Found %u platform(s).\n", num_platforms); + for (unsigned n = 0; n < num_platforms; n++) { + char info[256]; + if (clGetPlatformInfo(platform[n], CL_PLATFORM_NAME, 256, info, 0) == + CL_SUCCESS) { + printf(" Platform %u name: %s.\n", n + 1, info); + } + if (clGetPlatformInfo(platform[n], CL_PLATFORM_VERSION, 256, info, 0) == + CL_SUCCESS) { + printf(" Version: %s.\n", info); + } + cl_device_id devices[2]; + cl_uint num_devices; + if (clGetDeviceIDs(platform[n], CL_DEVICE_TYPE_ALL, 2, devices, + &num_devices) == CL_SUCCESS) { + printf(" Found %u device(s).\n", num_devices); + for (unsigned i = 0; i < num_devices; ++i) { + if (clGetDeviceInfo(devices[i], CL_DEVICE_NAME, 256, info, 0) == + CL_SUCCESS) { + printf(" Device %u name: %s.\n", i + 1, info); + } + } + } + } + } +#endif +} + +void PrintUsage(const char* program) { + printf( + "Usage:\n" + " %s --help | --help-psm | --help-oem | --version\n" + " %s --list-langs [--tessdata-dir PATH]\n" + " %s --print-parameters [options...] [configfile...]\n" + " %s imagename|stdin outputbase|stdout [options...] [configfile...]\n", + program, program, program, program); +} + +void PrintHelpForPSM() { + const char* msg = + "Page segmentation modes:\n" + " 0 Orientation and script detection (OSD) only.\n" + " 1 Automatic page segmentation with OSD.\n" + " 2 Automatic page segmentation, but no OSD, or OCR.\n" + " 3 Fully automatic page segmentation, but no OSD. (Default)\n" + " 4 Assume a single column of text of variable sizes.\n" + " 5 Assume a single uniform block of vertically aligned text.\n" + " 6 Assume a single uniform block of text.\n" + " 7 Treat the image as a single text line.\n" + " 8 Treat the image as a single word.\n" + " 9 Treat the image as a single word in a circle.\n" + " 10 Treat the image as a single character.\n" + " 11 Sparse text. Find as much text as possible in no" + " particular order.\n" + " 12 Sparse text with OSD.\n" + " 13 Raw line. Treat the image as a single text line,\n" + "\t\t\tbypassing hacks that are Tesseract-specific.\n"; + + printf("%s", msg); +} + +void PrintHelpForOEM() { + const char* msg = + "OCR Engine modes:\n" + " 0 Original Tesseract only.\n" + " 1 Cube only.\n" + " 2 Tesseract + cube.\n" + " 3 Default, based on what is available.\n"; + + printf("%s", msg); +} + +void PrintHelpMessage(const char* program) { + PrintUsage(program); + + const char* ocr_options = + "OCR options:\n" + " --tessdata-dir PATH Specify the location of tessdata path.\n" + " --user-words PATH Specify the location of user words file.\n" + " --user-patterns PATH Specify the location of user patterns file.\n" + " -l LANG[+LANG] Specify language(s) used for OCR.\n" + " -c VAR=VALUE Set value for config variables.\n" + " Multiple -c arguments are allowed.\n" + " --psm NUM Specify page segmentation mode.\n" + " --oem NUM Specify OCR Engine mode.\n" + "NOTE: These options must occur before any configfile.\n"; + + printf("\n%s\n", ocr_options); + PrintHelpForPSM(); + PrintHelpForOEM(); + + const char* single_options = + "Single options:\n" + " -h, --help Show this help message.\n" + " --help-psm Show page segmentation modes.\n" + " --help-oem Show OCR Engine modes.\n" + " -v, --version Show version information.\n" + " --list-langs List available languages for tesseract engine.\n" + " --print-parameters Print tesseract parameters to stdout.\n"; + + printf("\n%s", single_options); +} + +void SetVariablesFromCLArgs(tesseract::TessBaseAPI* api, int argc, + char** argv) { + char opt1[256], opt2[255]; + for (int i = 0; i < argc; i++) { + if (strcmp(argv[i], "-c") == 0 && i + 1 < argc) { + strncpy(opt1, argv[i + 1], 255); + opt1[255] = '\0'; + char* p = strchr(opt1, '='); + if (!p) { + fprintf(stderr, "Missing = in configvar assignment\n"); + exit(1); + } + *p = 0; + strncpy(opt2, strchr(argv[i + 1], '=') + 1, 255); + opt2[254] = 0; + ++i; + + if (!api->SetVariable(opt1, opt2)) { + fprintf(stderr, "Could not set option: %s=%s\n", opt1, opt2); + } + } + } +} + +void PrintLangsList(tesseract::TessBaseAPI* api) { + GenericVector languages; + api->GetAvailableLanguagesAsVector(&languages); + printf("List of available languages (%d):\n", languages.size()); + for (int index = 0; index < languages.size(); ++index) { + STRING& string = languages[index]; + printf("%s\n", string.string()); + } + api->End(); +} + +void PrintBanner() { + tprintf("Tesseract Open Source OCR Engine v%s with Leptonica\n", + tesseract::TessBaseAPI::Version()); +} + +/** + * We have 2 possible sources of pagesegmode: a config file and + * the command line. For backwards compatibility reasons, the + * default in tesseract is tesseract::PSM_SINGLE_BLOCK, but the + * default for this program is tesseract::PSM_AUTO. We will let + * the config file take priority, so the command-line default + * can take priority over the tesseract default, so we use the + * value from the command line only if the retrieved mode + * is still tesseract::PSM_SINGLE_BLOCK, indicating no change + * in any config file. Therefore the only way to force + * tesseract::PSM_SINGLE_BLOCK is from the command line. + * It would be simpler if we could set the value before Init, + * but that doesn't work. + */ +void FixPageSegMode(tesseract::TessBaseAPI* api, + tesseract::PageSegMode pagesegmode) { + if (api->GetPageSegMode() == tesseract::PSM_SINGLE_BLOCK) + api->SetPageSegMode(pagesegmode); +} + +// NOTE: arg_i is used here to avoid ugly *i so many times in this function +void ParseArgs(const int argc, char** argv, const char** lang, + const char** image, const char** outputbase, + const char** datapath, bool* list_langs, bool* print_parameters, + GenericVector* vars_vec, + GenericVector* vars_values, int* arg_i, + tesseract::PageSegMode* pagesegmode, + tesseract::OcrEngineMode* enginemode) { + if (argc == 1) { + PrintHelpMessage(argv[0]); + exit(0); + } + + if (argc == 2) { + if ((strcmp(argv[1], "-h") == 0) || (strcmp(argv[1], "--help") == 0)) { + PrintHelpMessage(argv[0]); + exit(0); + } + if ((strcmp(argv[1], "--help-psm") == 0)) { + PrintHelpForPSM(); + exit(0); + } + if ((strcmp(argv[1], "--help-oem") == 0)) { + PrintHelpForOEM(); + exit(0); + } + if ((strcmp(argv[1], "-v") == 0) || (strcmp(argv[1], "--version") == 0)) { + PrintVersionInfo(); + exit(0); + } + } + + bool noocr = false; + int i = 1; + while (i < argc && (*outputbase == NULL || argv[i][0] == '-')) { + if (strcmp(argv[i], "-l") == 0 && i + 1 < argc) { + *lang = argv[i + 1]; + ++i; + } + else if (strcmp(argv[i], "--tessdata-dir") == 0 && i + 1 < argc) { + *datapath = argv[i + 1]; + ++i; + } + else if (strcmp(argv[i], "--user-words") == 0 && i + 1 < argc) { + vars_vec->push_back("user_words_file"); + vars_values->push_back(argv[i + 1]); + ++i; + } + else if (strcmp(argv[i], "--user-patterns") == 0 && i + 1 < argc) { + vars_vec->push_back("user_patterns_file"); + vars_values->push_back(argv[i + 1]); + ++i; + } + else if (strcmp(argv[i], "--list-langs") == 0) { + noocr = true; + *list_langs = true; + } + else if (strcmp(argv[i], "-psm") == 0 && i + 1 < argc) { + // The parameter -psm is deprecated and was replaced by --psm. + // It is still supported for compatibility reasons. + *pagesegmode = static_cast(atoi(argv[i + 1])); + ++i; + } + else if (strcmp(argv[i], "--psm") == 0 && i + 1 < argc) { + *pagesegmode = static_cast(atoi(argv[i + 1])); + ++i; + } + else if (strcmp(argv[i], "--oem") == 0 && i + 1 < argc) { + *enginemode = static_cast(atoi(argv[i + 1])); + ++i; + } + else if (strcmp(argv[i], "--print-parameters") == 0) { + noocr = true; + *print_parameters = true; + } + else if (strcmp(argv[i], "-c") == 0 && i + 1 < argc) { + // handled properly after api init + ++i; + } + else if (*image == NULL) { + *image = argv[i]; + } + else if (*outputbase == NULL) { + *outputbase = argv[i]; + } + ++i; + } + + *arg_i = i; + + if (argc == 2 && strcmp(argv[1], "--list-langs") == 0) { + *list_langs = true; + noocr = true; + } + + if (*outputbase == NULL && noocr == false) { + PrintHelpMessage(argv[0]); + exit(1); + } +} + +void PreloadRenderers( + tesseract::TessBaseAPI* api, + tesseract::PointerVector* renderers, + tesseract::PageSegMode pagesegmode, const char* outputbase) { + if (pagesegmode == tesseract::PSM_OSD_ONLY) { + renderers->push_back(new tesseract::TessOsdRenderer(outputbase)); + } + else { + bool b; + api->GetBoolVariable("tessedit_create_hocr", &b); + if (b) { + bool font_info; + api->GetBoolVariable("hocr_font_info", &font_info); + renderers->push_back( + new tesseract::TessHOcrRenderer(outputbase, font_info)); + } + + api->GetBoolVariable("tessedit_create_tsv", &b); + if (b) { + bool font_info; + api->GetBoolVariable("hocr_font_info", &font_info); + renderers->push_back( + new tesseract::TessTsvRenderer(outputbase, font_info)); + } + + api->GetBoolVariable("tessedit_create_pdf", &b); + if (b) { + bool textonly; + api->GetBoolVariable("textonly_pdf", &textonly); + renderers->push_back(new tesseract::TessPDFRenderer( + outputbase, api->GetDatapath(), textonly)); + } + + api->GetBoolVariable("tessedit_write_unlv", &b); + if (b) { + renderers->push_back(new tesseract::TessUnlvRenderer(outputbase)); + } + + api->GetBoolVariable("tessedit_create_boxfile", &b); + if (b) { + renderers->push_back(new tesseract::TessBoxTextRenderer(outputbase)); + } + + api->GetBoolVariable("tessedit_create_txt", &b); + if (b || renderers->empty()) { + renderers->push_back(new tesseract::TessTextRenderer(outputbase)); + } + } + + if (!renderers->empty()) { + // Since the PointerVector auto-deletes, null-out the renderers that are + // added to the root, and leave the root in the vector. + for (int r = 1; r < renderers->size(); ++r) { + (*renderers)[0]->insert((*renderers)[r]); + (*renderers)[r] = NULL; + } + } +} + +/********************************************************************** + * main() + * + **********************************************************************/ + +int main(int argc, char** argv) { + const char* lang = "osd"; + const char* image = NULL; + const char* outputbase = NULL; + const char* datapath = NULL; + bool list_langs = false; + bool print_parameters = false; + int arg_i = 1; + tesseract::PageSegMode pagesegmode = tesseract::PSM_AUTO_OSD; + tesseract::OcrEngineMode enginemode = tesseract::OEM_DEFAULT; + /* main() calls functions like ParseArgs which call exit(). + * This results in memory leaks if vars_vec and vars_values are + * declared as auto variables (destructor is not called then). */ + static GenericVector vars_vec; + static GenericVector vars_values; + +#ifdef NDEBUG + // Disable debugging and informational messages from Leptonica. + setMsgSeverity(L_SEVERITY_ERROR); +#endif + +#if defined(HAVE_TIFFIO_H) && defined(_WIN32) + /* Show libtiff warnings on console (not in GUI). */ + TIFFSetWarningHandler(Win32WarningHandler); +#endif /* HAVE_TIFFIO_H && _WIN32 */ + + ParseArgs(argc, argv, &lang, &image, &outputbase, &datapath, &list_langs, + &print_parameters, &vars_vec, &vars_values, &arg_i, &pagesegmode, + &enginemode); + + bool banner = false; + if (outputbase != NULL && strcmp(outputbase, "-") && + strcmp(outputbase, "stdout")) { + banner = true; + } + + PERF_COUNT_START("Tesseract:main") + + // Call GlobalDawgCache here to create the global DawgCache object before + // the TessBaseAPI object. This fixes the order of destructor calls: + // first TessBaseAPI must be destructed, DawgCache must be the last object. + tesseract::Dict::GlobalDawgCache(); + + // Avoid memory leak caused by auto variable when exit() is called. + static tesseract::TessBaseAPI api; + + api.SetOutputName(outputbase); + + int init_failed = api.Init(datapath, lang, enginemode, &(argv[arg_i]), + argc - arg_i, &vars_vec, &vars_values, false); + if (init_failed) { + fprintf(stderr, "Could not initialize tesseract.\n"); + getchar(); + return EXIT_FAILURE; + } + + SetVariablesFromCLArgs(&api, argc, argv); + + if (list_langs) { + PrintLangsList(&api); + getchar(); + return EXIT_SUCCESS; + } + + if (print_parameters) { + FILE* fout = stdout; + fprintf(stdout, "Tesseract parameters:\n"); + api.PrintVariables(fout); + api.End(); + getchar(); + return EXIT_SUCCESS; + } + + FixPageSegMode(&api, pagesegmode); + + if (pagesegmode == tesseract::PSM_AUTO_OSD) { + int ret_val = EXIT_SUCCESS; + + Pix* pixs = pixRead(image); + if (!pixs) { + fprintf(stderr, "Cannot open input file: %s\n", image); + getchar(); + return 2; + } + + api.SetImage(pixs); + + tesseract::Orientation orientation; + tesseract::WritingDirection direction; + tesseract::TextlineOrder order; + float deskew_angle; + + tesseract::PageIterator* it = api.AnalyseLayout(); + if (it) { + + StopWatch timer; + timer.reset(); + it->Orientation(&orientation, &direction, &order, &deskew_angle); + + tprintf( + "Orientation: %d\nWritingDirection: %d\nTextlineOrder: %d\n" + "Deskew angle: %.4f\n time: %.4f\n img: %s", + orientation, direction, order, deskew_angle, timer.elapsed_s(), image); + getchar(); + } + else { + ret_val = EXIT_FAILURE; + } + + delete it; + + pixDestroy(&pixs); + return ret_val; + } + + // set in_training_mode to true when using one of these configs: + // ambigs.train, box.train, box.train.stderr, linebox, rebox + bool b = false; + bool in_training_mode = + (api.GetBoolVariable("tessedit_ambigs_training", &b) && b) || + (api.GetBoolVariable("tessedit_resegment_from_boxes", &b) && b) || + (api.GetBoolVariable("tessedit_make_boxes_from_boxes", &b) && b); + + // Avoid memory leak caused by auto variable when exit() is called. + static tesseract::PointerVector renderers; + + if (in_training_mode) { + renderers.push_back(NULL); + } + else { + PreloadRenderers(&api, &renderers, pagesegmode, outputbase); + } + + if (!renderers.empty()) { + if (banner) PrintBanner(); + bool succeed = api.ProcessPages(image, NULL, 0, renderers[0]); + if (!succeed) { + fprintf(stderr, "Error during processing.\n"); + return EXIT_FAILURE; + } + } + + PERF_COUNT_END + + return EXIT_SUCCESS; +} diff --git a/3rdparty/hgOCR/include/ccmain/adaptions.cpp b/3rdparty/hgOCR/include/ccmain/adaptions.cpp new file mode 100644 index 00000000..23794736 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/adaptions.cpp @@ -0,0 +1,126 @@ +/********************************************************************** + * File: adaptions.cpp (Formerly adaptions.c) + * Description: Functions used to adapt to blobs already confidently + * identified + * Author: Chris Newton + * Created: Thu Oct 7 10:17:28 BST 1993 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#pragma warning(disable:4305) // int/float warnings +#endif + +#ifdef __UNIX__ +#include +#endif +#include +#include +#include "tessbox.h" +#include "tessvars.h" +#include "memry.h" +#include "reject.h" +#include "control.h" +#include "stopper.h" +#include "tesseractclass.h" + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +namespace tesseract { + BOOL8 Tesseract::word_adaptable( //should we adapt? + WERD_RES *word, + uinT16 mode) { + if (tessedit_adaption_debug) { + tprintf("Running word_adaptable() for %s rating %.4f certainty %.4f\n", + word->best_choice == NULL ? "" : + word->best_choice->unichar_string().string(), + word->best_choice->rating(), word->best_choice->certainty()); + } + + BOOL8 status = FALSE; + BITS16 flags(mode); + + enum MODES + { + ADAPTABLE_WERD, + ACCEPTABLE_WERD, + CHECK_DAWGS, + CHECK_SPACES, + CHECK_ONE_ELL_CONFLICT, + CHECK_AMBIG_WERD + }; + + /* + 0: NO adaption + */ + if (mode == 0) { + if (tessedit_adaption_debug) tprintf("adaption disabled\n"); + return FALSE; + } + + if (flags.bit(ADAPTABLE_WERD)) { + status |= word->tess_would_adapt; // result of Classify::AdaptableWord() + if (tessedit_adaption_debug && !status) { + tprintf("tess_would_adapt bit is false\n"); + } + } + + if (flags.bit(ACCEPTABLE_WERD)) { + status |= word->tess_accepted; + if (tessedit_adaption_debug && !status) { + tprintf("tess_accepted bit is false\n"); + } + } + + if (!status) { // If not set then + return FALSE; // ignore other checks + } + + if (flags.bit(CHECK_DAWGS) && + (word->best_choice->permuter() != SYSTEM_DAWG_PERM) && + (word->best_choice->permuter() != FREQ_DAWG_PERM) && + (word->best_choice->permuter() != USER_DAWG_PERM) && + (word->best_choice->permuter() != NUMBER_PERM)) { + if (tessedit_adaption_debug) tprintf("word not in dawgs\n"); + return FALSE; + } + + if (flags.bit(CHECK_ONE_ELL_CONFLICT) && one_ell_conflict(word, FALSE)) { + if (tessedit_adaption_debug) tprintf("word has ell conflict\n"); + return FALSE; + } + + if (flags.bit(CHECK_SPACES) && + (strchr(word->best_choice->unichar_string().string(), ' ') != NULL)) { + if (tessedit_adaption_debug) tprintf("word contains spaces\n"); + return FALSE; + } + + if (flags.bit(CHECK_AMBIG_WERD) && + word->best_choice->dangerous_ambig_found()) { + if (tessedit_adaption_debug) tprintf("word is ambiguous\n"); + return FALSE; + } + + if (tessedit_adaption_debug) { + tprintf("returning status %d\n", status); + } + return status; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/applybox.cpp b/3rdparty/hgOCR/include/ccmain/applybox.cpp new file mode 100644 index 00000000..a211200e --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/applybox.cpp @@ -0,0 +1,814 @@ +/********************************************************************** + * File: applybox.cpp (Formerly applybox.c) + * Description: Re segment rows according to box file data + * Author: Phil Cheatle + * Created: Wed Nov 24 09:11:23 GMT 1993 + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + +#include +#include +#ifdef __UNIX__ +#include +#include +#endif +#include "allheaders.h" +#include "boxread.h" +#include "chopper.h" +#include "pageres.h" +#include "unichar.h" +#include "unicharset.h" +#include "tesseractclass.h" +#include "genericvector.h" + + /** Max number of blobs to classify together in FindSegmentation. */ +const int kMaxGroupSize = 4; +/// Max fraction of median allowed as deviation in xheight before switching +/// to median. +const double kMaxXHeightDeviationFraction = 0.125; + +/** + * The box file is assumed to contain box definitions, one per line, of the + * following format for blob-level boxes: + * @verbatim + * + * @endverbatim + * and for word/line-level boxes: + * @verbatim + * WordStr # + * @endverbatim + * NOTES: + * The boxes use tesseract coordinates, i.e. 0,0 is at BOTTOM-LEFT. + * + * is 0-based, and the page number is used for multipage input (tiff). + * + * In the blob-level form, each line represents a recognizable unit, which may + * be several UTF-8 bytes, but there is a bounding box around each recognizable + * unit, and no classifier is needed to train in this mode (bootstrapping.) + * + * In the word/line-level form, the line begins with the literal "WordStr", and + * the bounding box bounds either a whole line or a whole word. The recognizable + * units in the word/line are listed after the # at the end of the line and + * are space delimited, ignoring any original spaces on the line. + * Eg. + * @verbatim + * word -> #w o r d + * multi word line -> #m u l t i w o r d l i n e + * @endverbatim + * The recognizable units must be space-delimited in order to allow multiple + * unicodes to be used for a single recognizable unit, eg Hindi. + * + * In this mode, the classifier must have been pre-trained with the desired + * character set, or it will not be able to find the character segmentations. + */ + +namespace tesseract { + + static void clear_any_old_text(BLOCK_LIST *block_list) { + BLOCK_IT block_it(block_list); + for (block_it.mark_cycle_pt(); + !block_it.cycled_list(); block_it.forward()) { + ROW_IT row_it(block_it.data()->row_list()); + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + WERD_IT word_it(row_it.data()->word_list()); + for (word_it.mark_cycle_pt(); + !word_it.cycled_list(); word_it.forward()) { + word_it.data()->set_text(""); + } + } + } + } + + // Applies the box file based on the image name fname, and resegments + // the words in the block_list (page), with: + // blob-mode: one blob per line in the box file, words as input. + // word/line-mode: one blob per space-delimited unit after the #, and one word + // per line in the box file. (See comment above for box file format.) + // If find_segmentation is true, (word/line mode) then the classifier is used + // to re-segment words/lines to match the space-delimited truth string for + // each box. In this case, the input box may be for a word or even a whole + // text line, and the output words will contain multiple blobs corresponding + // to the space-delimited input string. + // With find_segmentation false, no classifier is needed, but the chopper + // can still be used to correctly segment touching characters with the help + // of the input boxes. + // In the returned PAGE_RES, the WERD_RES are setup as they would be returned + // from normal classification, ie. with a word, chopped_word, rebuild_word, + // seam_array, denorm, box_word, and best_state, but NO best_choice or + // raw_choice, as they would require a UNICHARSET, which we aim to avoid. + // Instead, the correct_text member of WERD_RES is set, and this may be later + // converted to a best_choice using CorrectClassifyWords. CorrectClassifyWords + // is not required before calling ApplyBoxTraining. + PAGE_RES* Tesseract::ApplyBoxes(const STRING& fname, + bool find_segmentation, + BLOCK_LIST *block_list) { + GenericVector boxes; + GenericVector texts, full_texts; + if (!ReadAllBoxes(applybox_page, true, fname, &boxes, &texts, &full_texts, + NULL)) { + return NULL; // Can't do it. + } + + int box_count = boxes.size(); + int box_failures = 0; + // Add an empty everything to the end. + boxes.push_back(TBOX()); + texts.push_back(STRING()); + full_texts.push_back(STRING()); + + // In word mode, we use the boxes to make a word for each box, but + // in blob mode we use the existing words and maximally chop them first. + PAGE_RES* page_res = find_segmentation ? + NULL : SetupApplyBoxes(boxes, block_list); + clear_any_old_text(block_list); + + for (int i = 0; i < boxes.size() - 1; i++) { + bool foundit = false; + if (page_res != NULL) { + if (i == 0) { + foundit = ResegmentCharBox(page_res, NULL, boxes[i], boxes[i + 1], + full_texts[i].string()); + } + else { + foundit = ResegmentCharBox(page_res, &boxes[i - 1], boxes[i], + boxes[i + 1], full_texts[i].string()); + } + } + else { + foundit = ResegmentWordBox(block_list, boxes[i], boxes[i + 1], + texts[i].string()); + } + if (!foundit) { + box_failures++; + ReportFailedBox(i, boxes[i], texts[i].string(), + "FAILURE! Couldn't find a matching blob"); + } + } + + if (page_res == NULL) { + // In word/line mode, we now maximally chop all the words and resegment + // them with the classifier. + page_res = SetupApplyBoxes(boxes, block_list); + ReSegmentByClassification(page_res); + } + if (applybox_debug > 0) { + tprintf("APPLY_BOXES:\n"); + tprintf(" Boxes read from boxfile: %6d\n", box_count); + if (box_failures > 0) + tprintf(" Boxes failed resegmentation: %6d\n", box_failures); + } + TidyUp(page_res); + return page_res; + } + + // Helper computes median xheight in the image. + static double MedianXHeight(BLOCK_LIST *block_list) { + BLOCK_IT block_it(block_list); + STATS xheights(0, block_it.data()->bounding_box().height()); + for (block_it.mark_cycle_pt(); + !block_it.cycled_list(); block_it.forward()) { + ROW_IT row_it(block_it.data()->row_list()); + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + xheights.add(IntCastRounded(row_it.data()->x_height()), 1); + } + } + return xheights.median(); + } + + /// Any row xheight that is significantly different from the median is set + /// to the median. + void Tesseract::PreenXHeights(BLOCK_LIST *block_list) { + double median_xheight = MedianXHeight(block_list); + double max_deviation = kMaxXHeightDeviationFraction * median_xheight; + // Strip all fuzzy space markers to simplify the PAGE_RES. + BLOCK_IT b_it(block_list); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + BLOCK* block = b_it.data(); + ROW_IT r_it(block->row_list()); + for (r_it.mark_cycle_pt(); !r_it.cycled_list(); r_it.forward()) { + ROW* row = r_it.data(); + float diff = fabs(row->x_height() - median_xheight); + if (diff > max_deviation) { + if (applybox_debug) { + tprintf("row xheight=%g, but median xheight = %g\n", + row->x_height(), median_xheight); + } + row->set_x_height(static_cast(median_xheight)); + } + } + } + } + + /// Builds a PAGE_RES from the block_list in the way required for ApplyBoxes: + /// All fuzzy spaces are removed, and all the words are maximally chopped. + PAGE_RES* Tesseract::SetupApplyBoxes(const GenericVector& boxes, + BLOCK_LIST *block_list) { + PreenXHeights(block_list); + // Strip all fuzzy space markers to simplify the PAGE_RES. + BLOCK_IT b_it(block_list); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + BLOCK* block = b_it.data(); + ROW_IT r_it(block->row_list()); + for (r_it.mark_cycle_pt(); !r_it.cycled_list(); r_it.forward()) { + ROW* row = r_it.data(); + WERD_IT w_it(row->word_list()); + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + WERD* word = w_it.data(); + if (word->cblob_list()->empty()) { + delete w_it.extract(); + } + else { + word->set_flag(W_FUZZY_SP, false); + word->set_flag(W_FUZZY_NON, false); + } + } + } + } + PAGE_RES* page_res = new PAGE_RES(false, block_list, NULL); + PAGE_RES_IT pr_it(page_res); + WERD_RES* word_res; + while ((word_res = pr_it.word()) != NULL) { + MaximallyChopWord(boxes, pr_it.block()->block, + pr_it.row()->row, word_res); + pr_it.forward(); + } + return page_res; + } + + /// Tests the chopper by exhaustively running chop_one_blob. + /// The word_res will contain filled chopped_word, seam_array, denorm, + /// box_word and best_state for the maximally chopped word. + void Tesseract::MaximallyChopWord(const GenericVector& boxes, + BLOCK* block, ROW* row, + WERD_RES* word_res) { + if (!word_res->SetupForRecognition(unicharset, this, BestPix(), + tessedit_ocr_engine_mode, NULL, + classify_bln_numeric_mode, + textord_use_cjk_fp_model, + poly_allow_detailed_fx, + row, block)) { + word_res->CloneChoppedToRebuild(); + return; + } + if (chop_debug) { + tprintf("Maximally chopping word at:"); + word_res->word->bounding_box().print(); + } + GenericVector blob_choices; + ASSERT_HOST(!word_res->chopped_word->blobs.empty()); + float rating = static_cast(MAX_INT8); + for (int i = 0; i < word_res->chopped_word->NumBlobs(); ++i) { + // The rating and certainty are not quite arbitrary. Since + // select_blob_to_chop uses the worst certainty to choose, they all have + // to be different, so starting with MAX_INT8, subtract 1/8 for each blob + // in here, and then divide by e each time they are chopped, which + // should guarantee a set of unequal values for the whole tree of blobs + // produced, however much chopping is required. The chops are thus only + // limited by the ability of the chopper to find suitable chop points, + // and not by the value of the certainties. + BLOB_CHOICE* choice = + new BLOB_CHOICE(0, rating, -rating, -1, 0.0f, 0.0f, 0.0f, BCC_FAKE); + blob_choices.push_back(choice); + rating -= 0.125f; + } + const double e = exp(1.0); // The base of natural logs. + int blob_number; + int right_chop_index = 0; + if (!assume_fixed_pitch_char_segment) { + // We only chop if the language is not fixed pitch like CJK. + SEAM* seam = NULL; + while ((seam = chop_one_blob(boxes, blob_choices, word_res, + &blob_number)) != NULL) { + word_res->InsertSeam(blob_number, seam); + BLOB_CHOICE* left_choice = blob_choices[blob_number]; + rating = left_choice->rating() / e; + left_choice->set_rating(rating); + left_choice->set_certainty(-rating); + // combine confidence w/ serial # + BLOB_CHOICE* right_choice = new BLOB_CHOICE(++right_chop_index, + rating - 0.125f, -rating, -1, + 0.0f, 0.0f, 0.0f, BCC_FAKE); + blob_choices.insert(right_choice, blob_number + 1); + } + } + word_res->CloneChoppedToRebuild(); + word_res->FakeClassifyWord(blob_choices.size(), &blob_choices[0]); + } + + /// Helper to compute the dispute resolution metric. + /// Disputed blob resolution. The aim is to give the blob to the most + /// appropriate boxfile box. Most of the time it is obvious, but if + /// two boxfile boxes overlap significantly it is not. If a small boxfile + /// box takes most of the blob, and a large boxfile box does too, then + /// we want the small boxfile box to get it, but if the small box + /// is much smaller than the blob, we don't want it to get it. + /// Details of the disputed blob resolution: + /// Given a box with area A, and a blob with area B, with overlap area C, + /// then the miss metric is (A-C)(B-C)/(AB) and the box with minimum + /// miss metric gets the blob. + static double BoxMissMetric(const TBOX& box1, const TBOX& box2) { + int overlap_area = box1.intersection(box2).area(); + double miss_metric = box1.area() - overlap_area; + miss_metric /= box1.area(); + miss_metric *= box2.area() - overlap_area; + miss_metric /= box2.area(); + return miss_metric; + } + + /// Gather consecutive blobs that match the given box into the best_state + /// and corresponding correct_text. + /// + /// Fights over which box owns which blobs are settled by pre-chopping and + /// applying the blobs to box or next_box with the least non-overlap. + /// @return false if the box was in error, which can only be caused by + /// failing to find an appropriate blob for a box. + /// + /// This means that occasionally, blobs may be incorrectly segmented if the + /// chopper fails to find a suitable chop point. + bool Tesseract::ResegmentCharBox(PAGE_RES* page_res, const TBOX *prev_box, + const TBOX& box, const TBOX& next_box, + const char* correct_text) { + if (applybox_debug > 1) { + tprintf("\nAPPLY_BOX: in ResegmentCharBox() for %s\n", correct_text); + } + PAGE_RES_IT page_res_it(page_res); + WERD_RES* word_res; + for (word_res = page_res_it.word(); word_res != NULL; + word_res = page_res_it.forward()) { + if (!word_res->box_word->bounding_box().major_overlap(box)) + continue; + if (applybox_debug > 1) { + tprintf("Checking word box:"); + word_res->box_word->bounding_box().print(); + } + int word_len = word_res->box_word->length(); + for (int i = 0; i < word_len; ++i) { + TBOX char_box = TBOX(); + int blob_count = 0; + for (blob_count = 0; i + blob_count < word_len; ++blob_count) { + TBOX blob_box = word_res->box_word->BlobBox(i + blob_count); + if (!blob_box.major_overlap(box)) + break; + if (word_res->correct_text[i + blob_count].length() > 0) + break; // Blob is claimed already. + double current_box_miss_metric = BoxMissMetric(blob_box, box); + double next_box_miss_metric = BoxMissMetric(blob_box, next_box); + if (applybox_debug > 2) { + tprintf("Checking blob:"); + blob_box.print(); + tprintf("Current miss metric = %g, next = %g\n", + current_box_miss_metric, next_box_miss_metric); + } + if (current_box_miss_metric > next_box_miss_metric) + break; // Blob is a better match for next box. + char_box += blob_box; + } + if (blob_count > 0) { + if (applybox_debug > 1) { + tprintf("Index [%d, %d) seem good.\n", i, i + blob_count); + } + if (!char_box.almost_equal(box, 3) && + (box.x_gap(next_box) < -3 || + (prev_box != NULL && prev_box->x_gap(box) < -3))) { + return false; + } + // We refine just the box_word, best_state and correct_text here. + // The rebuild_word is made in TidyUp. + // blob_count blobs are put together to match the box. Merge the + // box_word boxes, save the blob_count in the state and the text. + word_res->box_word->MergeBoxes(i, i + blob_count); + word_res->best_state[i] = blob_count; + word_res->correct_text[i] = correct_text; + if (applybox_debug > 2) { + tprintf("%d Blobs match: blob box:", blob_count); + word_res->box_word->BlobBox(i).print(); + tprintf("Matches box:"); + box.print(); + tprintf("With next box:"); + next_box.print(); + } + // Eliminated best_state and correct_text entries for the consumed + // blobs. + for (int j = 1; j < blob_count; ++j) { + word_res->best_state.remove(i + 1); + word_res->correct_text.remove(i + 1); + } + // Assume that no box spans multiple source words, so we are done with + // this box. + if (applybox_debug > 1) { + tprintf("Best state = "); + for (int j = 0; j < word_res->best_state.size(); ++j) { + tprintf("%d ", word_res->best_state[j]); + } + tprintf("\n"); + tprintf("Correct text = [[ "); + for (int j = 0; j < word_res->correct_text.size(); ++j) { + tprintf("%s ", word_res->correct_text[j].string()); + } + tprintf("]]\n"); + } + return true; + } + } + } + if (applybox_debug > 0) { + tprintf("FAIL!\n"); + } + return false; // Failure. + } + + /// Consume all source blobs that strongly overlap the given box, + /// putting them into a new word, with the correct_text label. + /// Fights over which box owns which blobs are settled by + /// applying the blobs to box or next_box with the least non-overlap. + /// @return false if the box was in error, which can only be caused by + /// failing to find an overlapping blob for a box. + bool Tesseract::ResegmentWordBox(BLOCK_LIST *block_list, + const TBOX& box, const TBOX& next_box, + const char* correct_text) { + if (applybox_debug > 1) { + tprintf("\nAPPLY_BOX: in ResegmentWordBox() for %s\n", correct_text); + } + WERD* new_word = NULL; + BLOCK_IT b_it(block_list); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + BLOCK* block = b_it.data(); + if (!box.major_overlap(block->bounding_box())) + continue; + ROW_IT r_it(block->row_list()); + for (r_it.mark_cycle_pt(); !r_it.cycled_list(); r_it.forward()) { + ROW* row = r_it.data(); + if (!box.major_overlap(row->bounding_box())) + continue; + WERD_IT w_it(row->word_list()); + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + WERD* word = w_it.data(); + if (applybox_debug > 2) { + tprintf("Checking word:"); + word->bounding_box().print(); + } + if (word->text() != NULL && word->text()[0] != '\0') + continue; // Ignore words that are already done. + if (!box.major_overlap(word->bounding_box())) + continue; + C_BLOB_IT blob_it(word->cblob_list()); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); + blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + TBOX blob_box = blob->bounding_box(); + if (!blob_box.major_overlap(box)) + continue; + double current_box_miss_metric = BoxMissMetric(blob_box, box); + double next_box_miss_metric = BoxMissMetric(blob_box, next_box); + if (applybox_debug > 2) { + tprintf("Checking blob:"); + blob_box.print(); + tprintf("Current miss metric = %g, next = %g\n", + current_box_miss_metric, next_box_miss_metric); + } + if (current_box_miss_metric > next_box_miss_metric) + continue; // Blob is a better match for next box. + if (applybox_debug > 2) { + tprintf("Blob match: blob:"); + blob_box.print(); + tprintf("Matches box:"); + box.print(); + tprintf("With next box:"); + next_box.print(); + } + if (new_word == NULL) { + // Make a new word with a single blob. + new_word = word->shallow_copy(); + new_word->set_text(correct_text); + w_it.add_to_end(new_word); + } + C_BLOB_IT new_blob_it(new_word->cblob_list()); + new_blob_it.add_to_end(blob_it.extract()); + } + } + } + } + if (new_word == NULL && applybox_debug > 0) tprintf("FAIL!\n"); + return new_word != NULL; + } + + /// Resegments the words by running the classifier in an attempt to find the + /// correct segmentation that produces the required string. + void Tesseract::ReSegmentByClassification(PAGE_RES* page_res) { + PAGE_RES_IT pr_it(page_res); + WERD_RES* word_res; + for (; (word_res = pr_it.word()) != NULL; pr_it.forward()) { + WERD* word = word_res->word; + if (word->text() == NULL || word->text()[0] == '\0') + continue; // Ignore words that have no text. + // Convert the correct text to a vector of UNICHAR_ID + GenericVector target_text; + if (!ConvertStringToUnichars(word->text(), &target_text)) { + tprintf("APPLY_BOX: FAILURE: can't find class_id for '%s'\n", + word->text()); + pr_it.DeleteCurrentWord(); + continue; + } + if (!FindSegmentation(target_text, word_res)) { + tprintf("APPLY_BOX: FAILURE: can't find segmentation for '%s'\n", + word->text()); + pr_it.DeleteCurrentWord(); + continue; + } + } + } + + /// Converts the space-delimited string of utf8 text to a vector of UNICHAR_ID. + /// @return false if an invalid UNICHAR_ID is encountered. + bool Tesseract::ConvertStringToUnichars(const char* utf8, + GenericVector* class_ids) { + for (int step = 0; *utf8 != '\0'; utf8 += step) { + const char* next_space = strchr(utf8, ' '); + if (next_space == NULL) + next_space = utf8 + strlen(utf8); + step = next_space - utf8; + UNICHAR_ID class_id = unicharset.unichar_to_id(utf8, step); + if (class_id == INVALID_UNICHAR_ID) { + return false; + } + while (utf8[step] == ' ') + ++step; + class_ids->push_back(class_id); + } + return true; + } + + /// Resegments the word to achieve the target_text from the classifier. + /// Returns false if the re-segmentation fails. + /// Uses brute-force combination of up to #kMaxGroupSize adjacent blobs, and + /// applies a full search on the classifier results to find the best classified + /// segmentation. As a compromise to obtain better recall, 1-1 ambiguity + /// substitutions ARE used. + bool Tesseract::FindSegmentation(const GenericVector& target_text, + WERD_RES* word_res) { + // Classify all required combinations of blobs and save results in choices. + int word_length = word_res->box_word->length(); + GenericVector* choices = + new GenericVector[word_length]; + for (int i = 0; i < word_length; ++i) { + for (int j = 1; j <= kMaxGroupSize && i + j <= word_length; ++j) { + BLOB_CHOICE_LIST* match_result = classify_piece( + word_res->seam_array, i, i + j - 1, "Applybox", + word_res->chopped_word, word_res->blamer_bundle); + if (applybox_debug > 2) { + tprintf("%d+%d:", i, j); + print_ratings_list("Segment:", match_result, unicharset); + } + choices[i].push_back(match_result); + } + } + // Search the segmentation graph for the target text. Must be an exact + // match. Using wildcards makes it difficult to find the correct + // segmentation even when it is there. + word_res->best_state.clear(); + GenericVector search_segmentation; + float best_rating = 0.0f; + SearchForText(choices, 0, word_length, target_text, 0, 0.0f, + &search_segmentation, &best_rating, &word_res->best_state); + for (int i = 0; i < word_length; ++i) + choices[i].delete_data_pointers(); + delete[] choices; + if (word_res->best_state.empty()) { + // Build the original segmentation and if it is the same length as the + // truth, assume it will do. + int blob_count = 1; + for (int s = 0; s < word_res->seam_array.size(); ++s) { + SEAM* seam = word_res->seam_array[s]; + if (!seam->HasAnySplits()) { + word_res->best_state.push_back(blob_count); + blob_count = 1; + } + else { + ++blob_count; + } + } + word_res->best_state.push_back(blob_count); + if (word_res->best_state.size() != target_text.size()) { + word_res->best_state.clear(); // No good. Original segmentation bad size. + return false; + } + } + word_res->correct_text.clear(); + for (int i = 0; i < target_text.size(); ++i) { + word_res->correct_text.push_back( + STRING(unicharset.id_to_unichar(target_text[i]))); + } + return true; + } + + /// Recursive helper to find a match to the target_text (from text_index + /// position) in the choices (from choices_pos position). + /// @param choices is an array of GenericVectors, of length choices_length, + /// with each element representing a starting position in the word, and the + /// #GenericVector holding classification results for a sequence of consecutive + /// blobs, with index 0 being a single blob, index 1 being 2 blobs etc. + /// @param choices_pos + /// @param choices_length + /// @param target_text + /// @param text_index + /// @param rating + /// @param segmentation + /// @param best_rating + /// @param best_segmentation + void Tesseract::SearchForText(const GenericVector* choices, + int choices_pos, int choices_length, + const GenericVector& target_text, + int text_index, + float rating, GenericVector* segmentation, + float* best_rating, + GenericVector* best_segmentation) { + const UnicharAmbigsVector& table = getDict().getUnicharAmbigs().dang_ambigs(); + for (int length = 1; length <= choices[choices_pos].size(); ++length) { + // Rating of matching choice or worst choice if no match. + float choice_rating = 0.0f; + // Find the corresponding best BLOB_CHOICE. + BLOB_CHOICE_IT choice_it(choices[choices_pos][length - 1]); + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list(); + choice_it.forward()) { + BLOB_CHOICE* choice = choice_it.data(); + choice_rating = choice->rating(); + UNICHAR_ID class_id = choice->unichar_id(); + if (class_id == target_text[text_index]) { + break; + } + // Search ambigs table. + if (class_id < table.size() && table[class_id] != NULL) { + AmbigSpec_IT spec_it(table[class_id]); + for (spec_it.mark_cycle_pt(); !spec_it.cycled_list(); + spec_it.forward()) { + const AmbigSpec *ambig_spec = spec_it.data(); + // We'll only do 1-1. + if (ambig_spec->wrong_ngram[1] == INVALID_UNICHAR_ID && + ambig_spec->correct_ngram_id == target_text[text_index]) + break; + } + if (!spec_it.cycled_list()) + break; // Found an ambig. + } + } + if (choice_it.cycled_list()) + continue; // No match. + segmentation->push_back(length); + if (choices_pos + length == choices_length && + text_index + 1 == target_text.size()) { + // This is a complete match. If the rating is good record a new best. + if (applybox_debug > 2) { + tprintf("Complete match, rating = %g, best=%g, seglength=%d, best=%d\n", + rating + choice_rating, *best_rating, segmentation->size(), + best_segmentation->size()); + } + if (best_segmentation->empty() || rating + choice_rating < *best_rating) { + *best_segmentation = *segmentation; + *best_rating = rating + choice_rating; + } + } + else if (choices_pos + length < choices_length && + text_index + 1 < target_text.size()) { + if (applybox_debug > 3) { + tprintf("Match found for %d=%s:%s, at %d+%d, recursing...\n", + target_text[text_index], + unicharset.id_to_unichar(target_text[text_index]), + choice_it.data()->unichar_id() == target_text[text_index] + ? "Match" : "Ambig", + choices_pos, length); + } + SearchForText(choices, choices_pos + length, choices_length, target_text, + text_index + 1, rating + choice_rating, segmentation, + best_rating, best_segmentation); + if (applybox_debug > 3) { + tprintf("End recursion for %d=%s\n", target_text[text_index], + unicharset.id_to_unichar(target_text[text_index])); + } + } + segmentation->truncate(segmentation->size() - 1); + } + } + + /// - Counts up the labelled words and the blobs within. + /// - Deletes all unused or emptied words, counting the unused ones. + /// - Resets W_BOL and W_EOL flags correctly. + /// - Builds the rebuild_word and rebuilds the box_word and the best_choice. + void Tesseract::TidyUp(PAGE_RES* page_res) { + int ok_blob_count = 0; + int bad_blob_count = 0; + int ok_word_count = 0; + int unlabelled_words = 0; + PAGE_RES_IT pr_it(page_res); + WERD_RES* word_res; + for (; (word_res = pr_it.word()) != NULL; pr_it.forward()) { + int ok_in_word = 0; + int blob_count = word_res->correct_text.size(); + WERD_CHOICE* word_choice = new WERD_CHOICE(word_res->uch_set, blob_count); + word_choice->set_permuter(TOP_CHOICE_PERM); + for (int c = 0; c < blob_count; ++c) { + if (word_res->correct_text[c].length() > 0) { + ++ok_in_word; + } + // Since we only need a fake word_res->best_choice, the actual + // unichar_ids do not matter. Which is fortunate, since TidyUp() + // can be called while training Tesseract, at the stage where + // unicharset is not meaningful yet. + word_choice->append_unichar_id_space_allocated( + INVALID_UNICHAR_ID, word_res->best_state[c], 1.0f, -1.0f); + } + if (ok_in_word > 0) { + ok_blob_count += ok_in_word; + bad_blob_count += word_res->correct_text.size() - ok_in_word; + word_res->LogNewRawChoice(word_choice); + word_res->LogNewCookedChoice(1, false, word_choice); + } + else { + ++unlabelled_words; + if (applybox_debug > 0) { + tprintf("APPLY_BOXES: Unlabelled word at :"); + word_res->word->bounding_box().print(); + } + pr_it.DeleteCurrentWord(); + delete word_choice; + } + } + pr_it.restart_page(); + for (; (word_res = pr_it.word()) != NULL; pr_it.forward()) { + // Denormalize back to a BoxWord. + word_res->RebuildBestState(); + word_res->SetupBoxWord(); + word_res->word->set_flag(W_BOL, pr_it.prev_row() != pr_it.row()); + word_res->word->set_flag(W_EOL, pr_it.next_row() != pr_it.row()); + } + if (applybox_debug > 0) { + tprintf(" Found %d good blobs.\n", ok_blob_count); + if (bad_blob_count > 0) { + tprintf(" Leaving %d unlabelled blobs in %d words.\n", + bad_blob_count, ok_word_count); + } + if (unlabelled_words > 0) + tprintf(" %d remaining unlabelled words deleted.\n", unlabelled_words); + } + } + + /** Logs a bad box by line in the box file and box coords.*/ + void Tesseract::ReportFailedBox(int boxfile_lineno, TBOX box, + const char *box_ch, const char *err_msg) { + tprintf("APPLY_BOXES: boxfile line %d/%s ((%d,%d),(%d,%d)): %s\n", + boxfile_lineno + 1, box_ch, + box.left(), box.bottom(), box.right(), box.top(), err_msg); + } + + /** Creates a fake best_choice entry in each WERD_RES with the correct text.*/ + void Tesseract::CorrectClassifyWords(PAGE_RES* page_res) { + PAGE_RES_IT pr_it(page_res); + for (WERD_RES *word_res = pr_it.word(); word_res != NULL; + word_res = pr_it.forward()) { + WERD_CHOICE* choice = new WERD_CHOICE(word_res->uch_set, + word_res->correct_text.size()); + for (int i = 0; i < word_res->correct_text.size(); ++i) { + // The part before the first space is the real ground truth, and the + // rest is the bounding box location and page number. + GenericVector tokens; + word_res->correct_text[i].split(' ', &tokens); + UNICHAR_ID char_id = unicharset.unichar_to_id(tokens[0].string()); + choice->append_unichar_id_space_allocated(char_id, + word_res->best_state[i], + 0.0f, 0.0f); + } + word_res->ClearWordChoices(); + word_res->LogNewRawChoice(choice); + word_res->LogNewCookedChoice(1, false, choice); + } + } + + /// Calls #LearnWord to extract features for labelled blobs within each word. + /// Features are stored in an internal buffer. + void Tesseract::ApplyBoxTraining(const STRING& fontname, PAGE_RES* page_res) { + PAGE_RES_IT pr_it(page_res); + int word_count = 0; + for (WERD_RES *word_res = pr_it.word(); word_res != NULL; + word_res = pr_it.forward()) { + LearnWord(fontname.string(), word_res); + ++word_count; + } + tprintf("Generated training data for %d words\n", word_count); + } + + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/control.cpp b/3rdparty/hgOCR/include/ccmain/control.cpp new file mode 100644 index 00000000..0cd8f35f --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/control.cpp @@ -0,0 +1,2077 @@ +/****************************************************************** + * File: control.cpp (Formerly control.c) + * Description: Module-independent matcher controller. + * Author: Ray Smith + * Created: Thu Apr 23 11:09:58 BST 1992 + * ReHacked: Tue Sep 22 08:42:49 BST 1992 Phil Cheatle + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include +#include +#ifdef __UNIX__ +#include +#include +#include +#endif +#include +#include "ocrclass.h" +#include "werdit.h" +#include "drawfx.h" +#include "tessbox.h" +#include "tessvars.h" +#include "pgedit.h" +#include "reject.h" +#include "fixspace.h" +#include "docqual.h" +#include "control.h" +#include "output.h" +#include "callcpp.h" +#include "globals.h" +#include "sorthelper.h" +#include "tesseractclass.h" + +#define MIN_FONT_ROW_COUNT 8 +#define MAX_XHEIGHT_DIFF 3 + +const char* const kBackUpConfigFile = "tempconfigdata.config"; +// Min believable x-height for any text when refitting as a fraction of +// original x-height +const double kMinRefitXHeightFraction = 0.5; + + +/** + * Make a word from the selected blobs and run Tess on them. + * + * @param page_res recognise blobs + * @param selection_box within this box + */ +namespace tesseract { + void Tesseract::recog_pseudo_word(PAGE_RES* page_res, + TBOX &selection_box) { + PAGE_RES_IT* it = make_pseudo_word(page_res, selection_box); + if (it != NULL) { + recog_interactive(it); + it->DeleteCurrentWord(); + delete it; + } + } + + /** + * Recognize a single word in interactive mode. + * + * @param pr_it the page results iterator + */ + BOOL8 Tesseract::recog_interactive(PAGE_RES_IT* pr_it) { + inT16 char_qual; + inT16 good_char_qual; + + WordData word_data(*pr_it); + SetupWordPassN(2, &word_data); + classify_word_and_language(2, pr_it, &word_data); + if (tessedit_debug_quality_metrics) { + WERD_RES* word_res = pr_it->word(); + word_char_quality(word_res, pr_it->row()->row, &char_qual, &good_char_qual); + tprintf("\n%d chars; word_blob_quality: %d; outline_errs: %d; " + "char_quality: %d; good_char_quality: %d\n", + word_res->reject_map.length(), + word_blob_quality(word_res, pr_it->row()->row), + word_outline_errs(word_res), char_qual, good_char_qual); + } + return TRUE; + } + + // Helper function to check for a target word and handle it appropriately. + // Inspired by Jetsoft's requirement to process only single words on pass2 + // and beyond. + // If word_config is not null: + // If the word_box and target_word_box overlap, read the word_config file + // else reset to previous config data. + // return true. + // else + // If the word_box and target_word_box overlap or pass <= 1, return true. + // Note that this function uses a fixed temporary file for storing the previous + // configs, so it is neither thread-safe, nor process-safe, but the assumption + // is that it will only be used for one debug window at a time. + // + // Since this function is used for debugging (and not to change OCR results) + // set only debug params from the word config file. + bool Tesseract::ProcessTargetWord(const TBOX& word_box, + const TBOX& target_word_box, + const char* word_config, + int pass) { + if (word_config != NULL) { + if (word_box.major_overlap(target_word_box)) { + if (backup_config_file_ == NULL) { + backup_config_file_ = kBackUpConfigFile; + FILE* config_fp = fopen(backup_config_file_, "wb"); + ParamUtils::PrintParams(config_fp, params()); + fclose(config_fp); + ParamUtils::ReadParamsFile(word_config, + SET_PARAM_CONSTRAINT_DEBUG_ONLY, + params()); + } + } + else { + if (backup_config_file_ != NULL) { + ParamUtils::ReadParamsFile(backup_config_file_, + SET_PARAM_CONSTRAINT_DEBUG_ONLY, + params()); + backup_config_file_ = NULL; + } + } + } + else if (pass > 1 && !word_box.major_overlap(target_word_box)) { + return false; + } + return true; + } + + /** If tesseract is to be run, sets the words up ready for it. */ + void Tesseract::SetupAllWordsPassN(int pass_n, + const TBOX* target_word_box, + const char* word_config, + PAGE_RES* page_res, + GenericVector* words) { + // Prepare all the words. + PAGE_RES_IT page_res_it(page_res); + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + if (target_word_box == NULL || + ProcessTargetWord(page_res_it.word()->word->bounding_box(), + *target_word_box, word_config, 1)) { + words->push_back(WordData(page_res_it)); + } + } + // Setup all the words for recognition with polygonal approximation. + for (int w = 0; w < words->size(); ++w) { + SetupWordPassN(pass_n, &(*words)[w]); + if (w > 0) (*words)[w].prev_word = &(*words)[w - 1]; + } + } + + // Sets up the single word ready for whichever engine is to be run. + void Tesseract::SetupWordPassN(int pass_n, WordData* word) { + if (pass_n == 1 || !word->word->done) { + if (pass_n == 1) { + word->word->SetupForRecognition(unicharset, this, BestPix(), + tessedit_ocr_engine_mode, NULL, + classify_bln_numeric_mode, + textord_use_cjk_fp_model, + poly_allow_detailed_fx, + word->row, word->block); + } + else if (pass_n == 2) { + // TODO(rays) Should we do this on pass1 too? + word->word->caps_height = 0.0; + if (word->word->x_height == 0.0f) + word->word->x_height = word->row->x_height(); + } + word->lang_words.truncate(0); + for (int s = 0; s <= sub_langs_.size(); ++s) { + // The sub_langs_.size() entry is for the master language. + Tesseract* lang_t = s < sub_langs_.size() ? sub_langs_[s] : this; + WERD_RES* word_res = new WERD_RES; + word_res->InitForRetryRecognition(*word->word); + word->lang_words.push_back(word_res); + // Cube doesn't get setup for pass2. + if (pass_n == 1 || lang_t->tessedit_ocr_engine_mode != OEM_CUBE_ONLY) { + word_res->SetupForRecognition( + lang_t->unicharset, lang_t, BestPix(), + lang_t->tessedit_ocr_engine_mode, NULL, + lang_t->classify_bln_numeric_mode, + lang_t->textord_use_cjk_fp_model, + lang_t->poly_allow_detailed_fx, word->row, word->block); + } + } + } + } + + // Runs word recognition on all the words. + bool Tesseract::RecogAllWordsPassN(int pass_n, ETEXT_DESC* monitor, + PAGE_RES_IT* pr_it, + GenericVector* words) { + // TODO(rays) Before this loop can be parallelized (it would yield a massive + // speed-up) all remaining member globals need to be converted to local/heap + // (eg set_pass1 and set_pass2) and an intermediate adaption pass needs to be + // added. The results will be significantly different with adaption on, and + // deterioration will need investigation. + pr_it->restart_page(); + for (int w = 0; w < words->size(); ++w) { + WordData* word = &(*words)[w]; + if (w > 0) word->prev_word = &(*words)[w - 1]; + if (monitor != NULL) { + monitor->ocr_alive = TRUE; + if (pass_n == 1) { + monitor->progress = 70 * w / words->size(); + if (monitor->progress_callback != NULL) { + TBOX box = pr_it->word()->word->bounding_box(); + (*monitor->progress_callback)(monitor->progress, box.left(), + box.right(), box.top(), box.bottom()); + } + } + else { + monitor->progress = 70 + 30 * w / words->size(); + if (monitor->progress_callback != NULL) { + (*monitor->progress_callback)(monitor->progress, 0, 0, 0, 0); + } + } + if (monitor->deadline_exceeded() || + (monitor->cancel != NULL && (*monitor->cancel)(monitor->cancel_this, + words->size()))) { + // Timeout. Fake out the rest of the words. + for (; w < words->size(); ++w) { + (*words)[w].word->SetupFake(unicharset); + } + return false; + } + } + if (word->word->tess_failed) { + int s; + for (s = 0; s < word->lang_words.size() && + word->lang_words[s]->tess_failed; ++s) { + } + // If all are failed, skip it. Image words are skipped by this test. + if (s > word->lang_words.size()) continue; + } + // Sync pr_it with the wth WordData. + while (pr_it->word() != NULL && pr_it->word() != word->word) + pr_it->forward(); + ASSERT_HOST(pr_it->word() != NULL); + bool make_next_word_fuzzy = false; + if (ReassignDiacritics(pass_n, pr_it, &make_next_word_fuzzy)) { + // Needs to be setup again to see the new outlines in the chopped_word. + SetupWordPassN(pass_n, word); + } + + classify_word_and_language(pass_n, pr_it, word); + if (tessedit_dump_choices || debug_noise_removal) { + tprintf("Pass%d: %s [%s]\n", pass_n, + word->word->best_choice->unichar_string().string(), + word->word->best_choice->debug_string().string()); + } + pr_it->forward(); + if (make_next_word_fuzzy && pr_it->word() != NULL) { + pr_it->MakeCurrentWordFuzzy(); + } + } + return true; + } + + /** + * recog_all_words() + * + * Walk the page_res, recognizing all the words. + * If monitor is not null, it is used as a progress monitor/timeout/cancel. + * If dopasses is 0, all recognition passes are run, + * 1 just pass 1, 2 passes2 and higher. + * If target_word_box is not null, special things are done to words that + * overlap the target_word_box: + * if word_config is not null, the word config file is read for just the + * target word(s), otherwise, on pass 2 and beyond ONLY the target words + * are processed (Jetsoft modification.) + * Returns false if we cancelled prematurely. + * + * @param page_res page structure + * @param monitor progress monitor + * @param word_config word_config file + * @param target_word_box specifies just to extract a rectangle + * @param dopasses 0 - all, 1 just pass 1, 2 passes 2 and higher + */ + + bool Tesseract::recog_all_words(PAGE_RES* page_res, + ETEXT_DESC* monitor, + const TBOX* target_word_box, + const char* word_config, + int dopasses) { + PAGE_RES_IT page_res_it(page_res); + + if (tessedit_minimal_rej_pass1) { + tessedit_test_adaption.set_value(TRUE); + tessedit_minimal_rejection.set_value(TRUE); + } + + if (dopasses == 0 || dopasses == 1) { + page_res_it.restart_page(); + // ****************** Pass 1 ******************* + + // If the adaptive classifier is full switch to one we prepared earlier, + // ie on the previous page. If the current adaptive classifier is non-empty, + // prepare a backup starting at this page, in case it fills up. Do all this + // independently for each language. + if (AdaptiveClassifierIsFull()) { + SwitchAdaptiveClassifier(); + } + else if (!AdaptiveClassifierIsEmpty()) { + StartBackupAdaptiveClassifier(); + } + // Now check the sub-langs as well. + for (int i = 0; i < sub_langs_.size(); ++i) { + if (sub_langs_[i]->AdaptiveClassifierIsFull()) { + sub_langs_[i]->SwitchAdaptiveClassifier(); + } + else if (!sub_langs_[i]->AdaptiveClassifierIsEmpty()) { + sub_langs_[i]->StartBackupAdaptiveClassifier(); + } + } + // Set up all words ready for recognition, so that if parallelism is on + // all the input and output classes are ready to run the classifier. + GenericVector words; + SetupAllWordsPassN(1, target_word_box, word_config, page_res, &words); + if (tessedit_parallelize) { + PrerecAllWordsPar(words); + } + + stats_.word_count = words.size(); + + stats_.dict_words = 0; + stats_.doc_blob_quality = 0; + stats_.doc_outline_errs = 0; + stats_.doc_char_quality = 0; + stats_.good_char_count = 0; + stats_.doc_good_char_quality = 0; + + most_recently_used_ = this; + // Run pass 1 word recognition. + if (!RecogAllWordsPassN(1, monitor, &page_res_it, &words)) return false; + // Pass 1 post-processing. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + if (page_res_it.word()->word->flag(W_REP_CHAR)) { + fix_rep_char(&page_res_it); + continue; + } + + // Count dict words. + if (page_res_it.word()->best_choice->permuter() == USER_DAWG_PERM) + ++(stats_.dict_words); + + // Update misadaption log (we only need to do it on pass 1, since + // adaption only happens on this pass). + if (page_res_it.word()->blamer_bundle != NULL && + page_res_it.word()->blamer_bundle->misadaption_debug().length() > 0) { + page_res->misadaption_log.push_back( + page_res_it.word()->blamer_bundle->misadaption_debug()); + } + } + } + + if (dopasses == 1) return true; + + // ****************** Pass 2 ******************* + if (tessedit_tess_adaption_mode != 0x0 && !tessedit_test_adaption && + AnyTessLang()) { + page_res_it.restart_page(); + GenericVector words; + SetupAllWordsPassN(2, target_word_box, word_config, page_res, &words); + if (tessedit_parallelize) { + PrerecAllWordsPar(words); + } + most_recently_used_ = this; + // Run pass 2 word recognition. + if (!RecogAllWordsPassN(2, monitor, &page_res_it, &words)) return false; + } + + // The next passes can only be run if tesseract has been used, as cube + // doesn't set all the necessary outputs in WERD_RES. + if (AnyTessLang()) { + // ****************** Pass 3 ******************* + // Fix fuzzy spaces. + set_global_loc_code(LOC_FUZZY_SPACE); + + if (!tessedit_test_adaption && tessedit_fix_fuzzy_spaces + && !tessedit_word_for_word && !right_to_left()) + fix_fuzzy_spaces(monitor, stats_.word_count, page_res); + + // ****************** Pass 4 ******************* + if (tessedit_enable_dict_correction) dictionary_correction_pass(page_res); + if (tessedit_enable_bigram_correction) bigram_correction_pass(page_res); + + // ****************** Pass 5,6 ******************* + rejection_passes(page_res, monitor, target_word_box, word_config); + +#ifndef NO_CUBE_BUILD + // ****************** Pass 7 ******************* + // Cube combiner. + // If cube is loaded and its combiner is present, run it. + if (tessedit_ocr_engine_mode == OEM_TESSERACT_CUBE_COMBINED) { + run_cube_combiner(page_res); + } +#endif + + // ****************** Pass 8 ******************* + font_recognition_pass(page_res); + + // ****************** Pass 9 ******************* + // Check the correctness of the final results. + blamer_pass(page_res); + script_pos_pass(page_res); + } + + // Write results pass. + set_global_loc_code(LOC_WRITE_RESULTS); + // This is now redundant, but retained commented so show how to obtain + // bounding boxes and style information. + + // changed by jetsoft + // needed for dll to output memory structure + if ((dopasses == 0 || dopasses == 2) && (monitor || tessedit_write_unlv)) + output_pass(page_res_it, target_word_box); + // end jetsoft + PageSegMode pageseg_mode = static_cast( + static_cast(tessedit_pageseg_mode)); + textord_.CleanupSingleRowResult(pageseg_mode, page_res); + + // Remove empty words, as these mess up the result iterators. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD_RES* word = page_res_it.word(); + if (word->best_choice == NULL || word->best_choice->length() == 0) + page_res_it.DeleteCurrentWord(); + } + + if (monitor != NULL) { + monitor->progress = 100; + } + return true; + } + + void Tesseract::bigram_correction_pass(PAGE_RES *page_res) { + PAGE_RES_IT word_it(page_res); + + WERD_RES *w_prev = NULL; + WERD_RES *w = word_it.word(); + while (1) { + w_prev = w; + while (word_it.forward() != NULL && + (!word_it.word() || word_it.word()->part_of_combo)) { + // advance word_it, skipping over parts of combos + } + if (!word_it.word()) break; + w = word_it.word(); + if (!w || !w_prev || w->uch_set != w_prev->uch_set) { + continue; + } + if (w_prev->word->flag(W_REP_CHAR) || w->word->flag(W_REP_CHAR)) { + if (tessedit_bigram_debug) { + tprintf("Skipping because one of the words is W_REP_CHAR\n"); + } + continue; + } + // Two words sharing the same language model, excellent! + GenericVector overrides_word1; + GenericVector overrides_word2; + + STRING orig_w1_str = w_prev->best_choice->unichar_string(); + STRING orig_w2_str = w->best_choice->unichar_string(); + WERD_CHOICE prev_best(w->uch_set); + { + int w1start, w1end; + w_prev->best_choice->GetNonSuperscriptSpan(&w1start, &w1end); + prev_best = w_prev->best_choice->shallow_copy(w1start, w1end); + } + WERD_CHOICE this_best(w->uch_set); + { + int w2start, w2end; + w->best_choice->GetNonSuperscriptSpan(&w2start, &w2end); + this_best = w->best_choice->shallow_copy(w2start, w2end); + } + + if (w->tesseract->getDict().valid_bigram(prev_best, this_best)) { + if (tessedit_bigram_debug) { + tprintf("Top choice \"%s %s\" verified by bigram model.\n", + orig_w1_str.string(), orig_w2_str.string()); + } + continue; + } + if (tessedit_bigram_debug > 2) { + tprintf("Examining alt choices for \"%s %s\".\n", + orig_w1_str.string(), orig_w2_str.string()); + } + if (tessedit_bigram_debug > 1) { + if (!w_prev->best_choices.singleton()) { + w_prev->PrintBestChoices(); + } + if (!w->best_choices.singleton()) { + w->PrintBestChoices(); + } + } + float best_rating = 0.0; + int best_idx = 0; + WERD_CHOICE_IT prev_it(&w_prev->best_choices); + for (prev_it.mark_cycle_pt(); !prev_it.cycled_list(); prev_it.forward()) { + WERD_CHOICE *p1 = prev_it.data(); + WERD_CHOICE strip1(w->uch_set); + { + int p1start, p1end; + p1->GetNonSuperscriptSpan(&p1start, &p1end); + strip1 = p1->shallow_copy(p1start, p1end); + } + WERD_CHOICE_IT w_it(&w->best_choices); + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + WERD_CHOICE *p2 = w_it.data(); + WERD_CHOICE strip2(w->uch_set); + { + int p2start, p2end; + p2->GetNonSuperscriptSpan(&p2start, &p2end); + strip2 = p2->shallow_copy(p2start, p2end); + } + if (w->tesseract->getDict().valid_bigram(strip1, strip2)) { + overrides_word1.push_back(p1); + overrides_word2.push_back(p2); + if (overrides_word1.size() == 1 || + p1->rating() + p2->rating() < best_rating) { + best_rating = p1->rating() + p2->rating(); + best_idx = overrides_word1.size() - 1; + } + } + } + } + if (!overrides_word1.empty()) { + // Excellent, we have some bigram matches. + if (EqualIgnoringCaseAndTerminalPunct(*w_prev->best_choice, + *overrides_word1[best_idx]) && + EqualIgnoringCaseAndTerminalPunct(*w->best_choice, + *overrides_word2[best_idx])) { + if (tessedit_bigram_debug > 1) { + tprintf("Top choice \"%s %s\" verified (sans case) by bigram " + "model.\n", orig_w1_str.string(), orig_w2_str.string()); + } + continue; + } + STRING new_w1_str = overrides_word1[best_idx]->unichar_string(); + STRING new_w2_str = overrides_word2[best_idx]->unichar_string(); + if (new_w1_str != orig_w1_str) { + w_prev->ReplaceBestChoice(overrides_word1[best_idx]); + } + if (new_w2_str != orig_w2_str) { + w->ReplaceBestChoice(overrides_word2[best_idx]); + } + if (tessedit_bigram_debug > 0) { + STRING choices_description; + int num_bigram_choices + = overrides_word1.size() * overrides_word2.size(); + if (num_bigram_choices == 1) { + choices_description = "This was the unique bigram choice."; + } + else { + if (tessedit_bigram_debug > 1) { + STRING bigrams_list; + const int kMaxChoicesToPrint = 20; + for (int i = 0; i < overrides_word1.size() && + i < kMaxChoicesToPrint; i++) { + if (i > 0) { bigrams_list += ", "; } + WERD_CHOICE *p1 = overrides_word1[i]; + WERD_CHOICE *p2 = overrides_word2[i]; + bigrams_list += p1->unichar_string() + " " + p2->unichar_string(); + if (i == kMaxChoicesToPrint) { + bigrams_list += " ..."; + } + } + choices_description = "There were many choices: {"; + choices_description += bigrams_list; + choices_description += "}"; + } + else { + choices_description.add_str_int("There were ", num_bigram_choices); + choices_description += " compatible bigrams."; + } + } + tprintf("Replaced \"%s %s\" with \"%s %s\" with bigram model. %s\n", + orig_w1_str.string(), orig_w2_str.string(), + new_w1_str.string(), new_w2_str.string(), + choices_description.string()); + } + } + } + } + + void Tesseract::rejection_passes(PAGE_RES* page_res, + ETEXT_DESC* monitor, + const TBOX* target_word_box, + const char* word_config) { + PAGE_RES_IT page_res_it(page_res); + // ****************** Pass 5 ******************* + // Gather statistics on rejects. + int word_index = 0; + while (!tessedit_test_adaption && page_res_it.word() != NULL) { + set_global_loc_code(LOC_MM_ADAPT); + WERD_RES* word = page_res_it.word(); + word_index++; + if (monitor != NULL) { + monitor->ocr_alive = TRUE; + monitor->progress = 95 + 5 * word_index / stats_.word_count; + } + if (word->rebuild_word == NULL) { + // Word was not processed by tesseract. + page_res_it.forward(); + continue; + } + check_debug_pt(word, 70); + + // changed by jetsoft + // specific to its needs to extract one word when need + if (target_word_box && + !ProcessTargetWord(word->word->bounding_box(), + *target_word_box, word_config, 4)) { + page_res_it.forward(); + continue; + } + // end jetsoft + + page_res_it.rej_stat_word(); + int chars_in_word = word->reject_map.length(); + int rejects_in_word = word->reject_map.reject_count(); + + int blob_quality = word_blob_quality(word, page_res_it.row()->row); + stats_.doc_blob_quality += blob_quality; + int outline_errs = word_outline_errs(word); + stats_.doc_outline_errs += outline_errs; + inT16 all_char_quality; + inT16 accepted_all_char_quality; + word_char_quality(word, page_res_it.row()->row, + &all_char_quality, &accepted_all_char_quality); + stats_.doc_char_quality += all_char_quality; + uinT8 permuter_type = word->best_choice->permuter(); + if ((permuter_type == SYSTEM_DAWG_PERM) || + (permuter_type == FREQ_DAWG_PERM) || + (permuter_type == USER_DAWG_PERM)) { + stats_.good_char_count += chars_in_word - rejects_in_word; + stats_.doc_good_char_quality += accepted_all_char_quality; + } + check_debug_pt(word, 80); + if (tessedit_reject_bad_qual_wds && + (blob_quality == 0) && (outline_errs >= chars_in_word)) + word->reject_map.rej_word_bad_quality(); + check_debug_pt(word, 90); + page_res_it.forward(); + } + + if (tessedit_debug_quality_metrics) { + tprintf + ("QUALITY: num_chs= %d num_rejs= %d %5.3f blob_qual= %d %5.3f" + " outline_errs= %d %5.3f char_qual= %d %5.3f good_ch_qual= %d %5.3f\n", + page_res->char_count, page_res->rej_count, + page_res->rej_count / static_cast(page_res->char_count), + stats_.doc_blob_quality, + stats_.doc_blob_quality / static_cast(page_res->char_count), + stats_.doc_outline_errs, + stats_.doc_outline_errs / static_cast(page_res->char_count), + stats_.doc_char_quality, + stats_.doc_char_quality / static_cast(page_res->char_count), + stats_.doc_good_char_quality, + (stats_.good_char_count > 0) ? + (stats_.doc_good_char_quality / + static_cast(stats_.good_char_count)) : 0.0); + } + BOOL8 good_quality_doc = + ((page_res->rej_count / static_cast(page_res->char_count)) <= + quality_rej_pc) && + (stats_.doc_blob_quality / static_cast(page_res->char_count) >= + quality_blob_pc) && + (stats_.doc_outline_errs / static_cast(page_res->char_count) <= + quality_outline_pc) && + (stats_.doc_char_quality / static_cast(page_res->char_count) >= + quality_char_pc); + + // ****************** Pass 6 ******************* + // Do whole document or whole block rejection pass + if (!tessedit_test_adaption) { + set_global_loc_code(LOC_DOC_BLK_REJ); + quality_based_rejection(page_res_it, good_quality_doc); + } + } + + void Tesseract::blamer_pass(PAGE_RES* page_res) { + if (!wordrec_run_blamer) return; + PAGE_RES_IT page_res_it(page_res); + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD_RES *word = page_res_it.word(); + BlamerBundle::LastChanceBlame(wordrec_debug_blamer, word); + page_res->blame_reasons[word->blamer_bundle->incorrect_result_reason()]++; + } + tprintf("Blame reasons:\n"); + for (int bl = 0; bl < IRR_NUM_REASONS; ++bl) { + tprintf("%s %d\n", BlamerBundle::IncorrectReasonName( + static_cast(bl)), + page_res->blame_reasons[bl]); + } + if (page_res->misadaption_log.length() > 0) { + tprintf("Misadaption log:\n"); + for (int i = 0; i < page_res->misadaption_log.length(); ++i) { + tprintf("%s\n", page_res->misadaption_log[i].string()); + } + } + } + + // Sets script positions and detects smallcaps on all output words. + void Tesseract::script_pos_pass(PAGE_RES* page_res) { + PAGE_RES_IT page_res_it(page_res); + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD_RES* word = page_res_it.word(); + if (word->word->flag(W_REP_CHAR)) { + page_res_it.forward(); + continue; + } + float x_height = page_res_it.block()->block->x_height(); + float word_x_height = word->x_height; + if (word_x_height < word->best_choice->min_x_height() || + word_x_height > word->best_choice->max_x_height()) { + word_x_height = (word->best_choice->min_x_height() + + word->best_choice->max_x_height()) / 2.0f; + } + // Test for small caps. Word capheight must be close to block xheight, + // and word must contain no lower case letters, and at least one upper case. + double small_cap_xheight = x_height * kXHeightCapRatio; + double small_cap_delta = (x_height - small_cap_xheight) / 2.0; + if (word->uch_set->script_has_xheight() && + small_cap_xheight - small_cap_delta <= word_x_height && + word_x_height <= small_cap_xheight + small_cap_delta) { + // Scan for upper/lower. + int num_upper = 0; + int num_lower = 0; + for (int i = 0; i < word->best_choice->length(); ++i) { + if (word->uch_set->get_isupper(word->best_choice->unichar_id(i))) + ++num_upper; + else if (word->uch_set->get_islower(word->best_choice->unichar_id(i))) + ++num_lower; + } + if (num_upper > 0 && num_lower == 0) + word->small_caps = true; + } + word->SetScriptPositions(); + } + } + + // Factored helper considers the indexed word and updates all the pointed + // values. + static void EvaluateWord(const PointerVector& words, int index, + float* rating, float* certainty, bool* bad, + bool* valid_permuter, int* right, int* next_left) { + *right = -MAX_INT32; + *next_left = MAX_INT32; + if (index < words.size()) { + WERD_CHOICE* choice = words[index]->best_choice; + if (choice == NULL) { + *bad = true; + } + else { + *rating += choice->rating(); + *certainty = MIN(*certainty, choice->certainty()); + if (!Dict::valid_word_permuter(choice->permuter(), false)) + *valid_permuter = false; + } + *right = words[index]->word->bounding_box().right(); + if (index + 1 < words.size()) + *next_left = words[index + 1]->word->bounding_box().left(); + } + else { + *valid_permuter = false; + *bad = true; + } + } + + // Helper chooses the best combination of words, transferring good ones from + // new_words to best_words. To win, a new word must have (better rating and + // certainty) or (better permuter status and rating within rating ratio and + // certainty within certainty margin) than current best. + // All the new_words are consumed (moved to best_words or deleted.) + // The return value is the number of new_words used minus the number of + // best_words that remain in the output. + static int SelectBestWords(double rating_ratio, + double certainty_margin, + bool debug, + PointerVector* new_words, + PointerVector* best_words) { + // Process the smallest groups of words that have an overlapping word + // boundary at the end. + GenericVector out_words; + // Index into each word vector (best, new). + int b = 0, n = 0; + int num_best = 0, num_new = 0; + while (b < best_words->size() || n < new_words->size()) { + // Start of the current run in each. + int start_b = b, start_n = n; + // Rating of the current run in each. + float b_rating = 0.0f, n_rating = 0.0f; + // Certainty of the current run in each. + float b_certainty = 0.0f, n_certainty = 0.0f; + // True if any word is missing its best choice. + bool b_bad = false, n_bad = false; + // True if all words have a valid permuter. + bool b_valid_permuter = true, n_valid_permuter = true; + + while (b < best_words->size() || n < new_words->size()) { + int b_right = -MAX_INT32; + int next_b_left = MAX_INT32; + EvaluateWord(*best_words, b, &b_rating, &b_certainty, &b_bad, + &b_valid_permuter, &b_right, &next_b_left); + int n_right = -MAX_INT32; + int next_n_left = MAX_INT32; + EvaluateWord(*new_words, n, &n_rating, &n_certainty, &n_bad, + &n_valid_permuter, &n_right, &next_n_left); + if (MAX(b_right, n_right) < MIN(next_b_left, next_n_left)) { + // The word breaks overlap. [start_b,b] and [start_n, n] match. + break; + } + // Keep searching for the matching word break. + if ((b_right < n_right && b < best_words->size()) || + n == new_words->size()) + ++b; + else + ++n; + } + bool new_better = false; + if (!n_bad && (b_bad || (n_certainty > b_certainty && + n_rating < b_rating) || + (!b_valid_permuter && n_valid_permuter && + n_rating < b_rating * rating_ratio && + n_certainty > b_certainty - certainty_margin))) { + // New is better. + for (int i = start_n; i <= n; ++i) { + out_words.push_back((*new_words)[i]); + (*new_words)[i] = NULL; + ++num_new; + } + new_better = true; + } + else if (!b_bad) { + // Current best is better. + for (int i = start_b; i <= b; ++i) { + out_words.push_back((*best_words)[i]); + (*best_words)[i] = NULL; + ++num_best; + } + } + int end_b = b < best_words->size() ? b + 1 : b; + int end_n = n < new_words->size() ? n + 1 : n; + if (debug) { + tprintf("%d new words %s than %d old words: r: %g v %g c: %g v %g" + " valid dict: %d v %d\n", + end_n - start_n, new_better ? "better" : "worse", + end_b - start_b, n_rating, b_rating, + n_certainty, b_certainty, n_valid_permuter, b_valid_permuter); + } + // Move on to the next group. + b = end_b; + n = end_n; + } + // Transfer from out_words to best_words. + best_words->clear(); + for (int i = 0; i < out_words.size(); ++i) + best_words->push_back(out_words[i]); + return num_new - num_best; + } + + // Helper to recognize the word using the given (language-specific) tesseract. + // Returns positive if this recognizer found more new best words than the + // number kept from best_words. + int Tesseract::RetryWithLanguage(const WordData& word_data, + WordRecognizer recognizer, + WERD_RES** in_word, + PointerVector* best_words) { + bool debug = classify_debug_level || cube_debug_level; + if (debug) { + tprintf("Trying word using lang %s, oem %d\n", + lang.string(), static_cast(tessedit_ocr_engine_mode)); + } + // Run the recognizer on the word. + PointerVector new_words; + (this->*recognizer)(word_data, in_word, &new_words); + if (new_words.empty()) { + // Transfer input word to new_words, as the classifier must have put + // the result back in the input. + new_words.push_back(*in_word); + *in_word = NULL; + } + if (debug) { + for (int i = 0; i < new_words.size(); ++i) + new_words[i]->DebugTopChoice("Lang result"); + } + // Initial version is a bit of a hack based on better certainty and rating + // (to reduce false positives from cube) or a dictionary vs non-dictionary + // word. + return SelectBestWords(classify_max_rating_ratio, + classify_max_certainty_margin, + debug, &new_words, best_words); + } + + // Helper returns true if all the words are acceptable. + static bool WordsAcceptable(const PointerVector& words) { + for (int w = 0; w < words.size(); ++w) { + if (words[w]->tess_failed || !words[w]->tess_accepted) return false; + } + return true; + } + + // Moves good-looking "noise"/diacritics from the reject list to the main + // blob list on the current word. Returns true if anything was done, and + // sets make_next_word_fuzzy if blob(s) were added to the end of the word. + bool Tesseract::ReassignDiacritics(int pass, PAGE_RES_IT* pr_it, + bool* make_next_word_fuzzy) { + *make_next_word_fuzzy = false; + WERD* real_word = pr_it->word()->word; + if (real_word->rej_cblob_list()->empty() || + real_word->cblob_list()->empty() || + real_word->rej_cblob_list()->length() > noise_maxperword) + return false; + real_word->rej_cblob_list()->sort(&C_BLOB::SortByXMiddle); + // Get the noise outlines into a vector with matching bool map. + GenericVector outlines; + real_word->GetNoiseOutlines(&outlines); + GenericVector word_wanted; + GenericVector overlapped_any_blob; + GenericVector target_blobs; + AssignDiacriticsToOverlappingBlobs(outlines, pass, real_word, pr_it, + &word_wanted, &overlapped_any_blob, + &target_blobs); + // Filter the outlines that overlapped any blob and put them into the word + // now. This simplifies the remaining task and also makes it more accurate + // as it has more completed blobs to work on. + GenericVector wanted; + GenericVector wanted_blobs; + GenericVector wanted_outlines; + int num_overlapped = 0; + int num_overlapped_used = 0; + for (int i = 0; i < overlapped_any_blob.size(); ++i) { + if (overlapped_any_blob[i]) { + ++num_overlapped; + if (word_wanted[i]) ++num_overlapped_used; + wanted.push_back(word_wanted[i]); + wanted_blobs.push_back(target_blobs[i]); + wanted_outlines.push_back(outlines[i]); + outlines[i] = NULL; + } + } + real_word->AddSelectedOutlines(wanted, wanted_blobs, wanted_outlines, NULL); + AssignDiacriticsToNewBlobs(outlines, pass, real_word, pr_it, &word_wanted, + &target_blobs); + int non_overlapped = 0; + int non_overlapped_used = 0; + for (int i = 0; i < word_wanted.size(); ++i) { + if (word_wanted[i]) ++non_overlapped_used; + if (outlines[i] != NULL) ++non_overlapped_used; + } + if (debug_noise_removal) { + tprintf("Used %d/%d overlapped %d/%d non-overlaped diacritics on word:", + num_overlapped_used, num_overlapped, non_overlapped_used, + non_overlapped); + real_word->bounding_box().print(); + } + // Now we have decided which outlines we want, put them into the real_word. + if (real_word->AddSelectedOutlines(word_wanted, target_blobs, outlines, + make_next_word_fuzzy)) { + pr_it->MakeCurrentWordFuzzy(); + } + // TODO(rays) Parts of combos have a deep copy of the real word, and need + // to have their noise outlines moved/assigned in the same way!! + return num_overlapped_used != 0 || non_overlapped_used != 0; + } + + // Attempts to put noise/diacritic outlines into the blobs that they overlap. + // Input: a set of noisy outlines that probably belong to the real_word. + // Output: word_wanted indicates which outlines are to be assigned to a blob, + // target_blobs indicates which to assign to, and overlapped_any_blob is + // true for all outlines that overlapped a blob. + void Tesseract::AssignDiacriticsToOverlappingBlobs( + const GenericVector& outlines, int pass, WERD* real_word, + PAGE_RES_IT* pr_it, GenericVector* word_wanted, + GenericVector* overlapped_any_blob, + GenericVector* target_blobs) { + GenericVector blob_wanted; + word_wanted->init_to_size(outlines.size(), false); + overlapped_any_blob->init_to_size(outlines.size(), false); + target_blobs->init_to_size(outlines.size(), NULL); + // For each real blob, find the outlines that seriously overlap it. + // A single blob could be several merged characters, so there can be quite + // a few outlines overlapping, and the full engine needs to be used to chop + // and join to get a sensible result. + C_BLOB_IT blob_it(real_word->cblob_list()); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + TBOX blob_box = blob->bounding_box(); + blob_wanted.init_to_size(outlines.size(), false); + int num_blob_outlines = 0; + for (int i = 0; i < outlines.size(); ++i) { + if (blob_box.major_x_overlap(outlines[i]->bounding_box()) && + !(*word_wanted)[i]) { + blob_wanted[i] = true; + (*overlapped_any_blob)[i] = true; + ++num_blob_outlines; + } + } + if (debug_noise_removal) { + tprintf("%d noise outlines overlap blob at:", num_blob_outlines); + blob_box.print(); + } + // If any outlines overlap the blob, and not too many, classify the blob + // (using the full engine, languages and all), and choose the maximal + // combination of outlines that doesn't hurt the end-result classification + // by too much. Mark them as wanted. + if (0 < num_blob_outlines && num_blob_outlines < noise_maxperblob) { + if (SelectGoodDiacriticOutlines(pass, noise_cert_basechar, pr_it, blob, + outlines, num_blob_outlines, + &blob_wanted)) { + for (int i = 0; i < blob_wanted.size(); ++i) { + if (blob_wanted[i]) { + // Claim the outline and record where it is going. + (*word_wanted)[i] = true; + (*target_blobs)[i] = blob; + } + } + } + } + } + } + + // Attempts to assign non-overlapping outlines to their nearest blobs or + // make new blobs out of them. + void Tesseract::AssignDiacriticsToNewBlobs( + const GenericVector& outlines, int pass, WERD* real_word, + PAGE_RES_IT* pr_it, GenericVector* word_wanted, + GenericVector* target_blobs) { + GenericVector blob_wanted; + word_wanted->init_to_size(outlines.size(), false); + target_blobs->init_to_size(outlines.size(), NULL); + // Check for outlines that need to be turned into stand-alone blobs. + for (int i = 0; i < outlines.size(); ++i) { + if (outlines[i] == NULL) continue; + // Get a set of adjacent outlines that don't overlap any existing blob. + blob_wanted.init_to_size(outlines.size(), false); + int num_blob_outlines = 0; + TBOX total_ol_box(outlines[i]->bounding_box()); + while (i < outlines.size() && outlines[i] != NULL) { + blob_wanted[i] = true; + total_ol_box += outlines[i]->bounding_box(); + ++i; + ++num_blob_outlines; + } + // Find the insertion point. + C_BLOB_IT blob_it(real_word->cblob_list()); + while (!blob_it.at_last() && + blob_it.data_relative(1)->bounding_box().left() <= + total_ol_box.left()) { + blob_it.forward(); + } + // Choose which combination of them we actually want and where to put + // them. + if (debug_noise_removal) + tprintf("Num blobless outlines = %d\n", num_blob_outlines); + C_BLOB* left_blob = blob_it.data(); + TBOX left_box = left_blob->bounding_box(); + C_BLOB* right_blob = blob_it.at_last() ? NULL : blob_it.data_relative(1); + if ((left_box.x_overlap(total_ol_box) || right_blob == NULL || + !right_blob->bounding_box().x_overlap(total_ol_box)) && + SelectGoodDiacriticOutlines(pass, noise_cert_disjoint, pr_it, left_blob, + outlines, num_blob_outlines, + &blob_wanted)) { + if (debug_noise_removal) tprintf("Added to left blob\n"); + for (int j = 0; j < blob_wanted.size(); ++j) { + if (blob_wanted[j]) { + (*word_wanted)[j] = true; + (*target_blobs)[j] = left_blob; + } + } + } + else if (right_blob != NULL && + (!left_box.x_overlap(total_ol_box) || + right_blob->bounding_box().x_overlap(total_ol_box)) && + SelectGoodDiacriticOutlines(pass, noise_cert_disjoint, pr_it, + right_blob, outlines, + num_blob_outlines, &blob_wanted)) { + if (debug_noise_removal) tprintf("Added to right blob\n"); + for (int j = 0; j < blob_wanted.size(); ++j) { + if (blob_wanted[j]) { + (*word_wanted)[j] = true; + (*target_blobs)[j] = right_blob; + } + } + } + else if (SelectGoodDiacriticOutlines(pass, noise_cert_punc, pr_it, NULL, + outlines, num_blob_outlines, + &blob_wanted)) { + if (debug_noise_removal) tprintf("Fitted between blobs\n"); + for (int j = 0; j < blob_wanted.size(); ++j) { + if (blob_wanted[j]) { + (*word_wanted)[j] = true; + (*target_blobs)[j] = NULL; + } + } + } + } + } + + // Starting with ok_outlines set to indicate which outlines overlap the blob, + // chooses the optimal set (approximately) and returns true if any outlines + // are desired, in which case ok_outlines indicates which ones. + bool Tesseract::SelectGoodDiacriticOutlines( + int pass, float certainty_threshold, PAGE_RES_IT* pr_it, C_BLOB* blob, + const GenericVector& outlines, int num_outlines, + GenericVector* ok_outlines) { + STRING best_str; + float target_cert = certainty_threshold; + if (blob != NULL) { + float target_c2; + target_cert = ClassifyBlobAsWord(pass, pr_it, blob, &best_str, &target_c2); + if (debug_noise_removal) { + tprintf("No Noise blob classified as %s=%g(%g) at:", best_str.string(), + target_cert, target_c2); + blob->bounding_box().print(); + } + target_cert -= (target_cert - certainty_threshold) * noise_cert_factor; + } + GenericVector test_outlines = *ok_outlines; + // Start with all the outlines in. + STRING all_str; + GenericVector best_outlines = *ok_outlines; + float best_cert = ClassifyBlobPlusOutlines(test_outlines, outlines, pass, + pr_it, blob, &all_str); + if (debug_noise_removal) { + TBOX ol_box; + for (int i = 0; i < test_outlines.size(); ++i) { + if (test_outlines[i]) ol_box += outlines[i]->bounding_box(); + } + tprintf("All Noise blob classified as %s=%g, delta=%g at:", + all_str.string(), best_cert, best_cert - target_cert); + ol_box.print(); + } + // Iteratively zero out the bit that improves the certainty the most, until + // we get past the threshold, have zero bits, or fail to improve. + int best_index = 0; // To zero out. + while (num_outlines > 1 && best_index >= 0 && + (blob == NULL || best_cert < target_cert || blob != NULL)) { + // Find the best bit to zero out. + best_index = -1; + for (int i = 0; i < outlines.size(); ++i) { + if (test_outlines[i]) { + test_outlines[i] = false; + STRING str; + float cert = ClassifyBlobPlusOutlines(test_outlines, outlines, pass, + pr_it, blob, &str); + if (debug_noise_removal) { + TBOX ol_box; + for (int j = 0; j < outlines.size(); ++j) { + if (test_outlines[j]) ol_box += outlines[j]->bounding_box(); + tprintf("%d", test_outlines[j]); + } + tprintf(" blob classified as %s=%g, delta=%g) at:", str.string(), + cert, cert - target_cert); + ol_box.print(); + } + if (cert > best_cert) { + best_cert = cert; + best_index = i; + best_outlines = test_outlines; + } + test_outlines[i] = true; + } + } + if (best_index >= 0) { + test_outlines[best_index] = false; + --num_outlines; + } + } + if (best_cert >= target_cert) { + // Save the best combination. + *ok_outlines = best_outlines; + if (debug_noise_removal) { + tprintf("%s noise combination ", blob ? "Adding" : "New"); + for (int i = 0; i < best_outlines.size(); ++i) { + tprintf("%d", best_outlines[i]); + } + tprintf(" yields certainty %g, beating target of %g\n", best_cert, + target_cert); + } + return true; + } + return false; + } + + // Classifies the given blob plus the outlines flagged by ok_outlines, undoes + // the inclusion of the outlines, and returns the certainty of the raw choice. + float Tesseract::ClassifyBlobPlusOutlines( + const GenericVector& ok_outlines, + const GenericVector& outlines, int pass_n, PAGE_RES_IT* pr_it, + C_BLOB* blob, STRING* best_str) { + C_OUTLINE_IT ol_it; + C_OUTLINE* first_to_keep = NULL; + if (blob != NULL) { + // Add the required outlines to the blob. + ol_it.set_to_list(blob->out_list()); + first_to_keep = ol_it.data(); + } + for (int i = 0; i < ok_outlines.size(); ++i) { + if (ok_outlines[i]) { + // This outline is to be added. + if (blob == NULL) { + blob = new C_BLOB(outlines[i]); + ol_it.set_to_list(blob->out_list()); + } + else { + ol_it.add_before_stay_put(outlines[i]); + } + } + } + float c2; + float cert = ClassifyBlobAsWord(pass_n, pr_it, blob, best_str, &c2); + ol_it.move_to_first(); + if (first_to_keep == NULL) { + // We created blob. Empty its outlines and delete it. + for (; !ol_it.empty(); ol_it.forward()) ol_it.extract(); + delete blob; + cert = -c2; + } + else { + // Remove the outlines that we put in. + for (; ol_it.data() != first_to_keep; ol_it.forward()) { + ol_it.extract(); + } + } + return cert; + } + + // Classifies the given blob (part of word_data->word->word) as an individual + // word, using languages, chopper etc, returning only the certainty of the + // best raw choice, and undoing all the work done to fake out the word. + float Tesseract::ClassifyBlobAsWord(int pass_n, PAGE_RES_IT* pr_it, + C_BLOB* blob, STRING* best_str, float* c2) { + WERD* real_word = pr_it->word()->word; + WERD* word = real_word->ConstructFromSingleBlob( + real_word->flag(W_BOL), real_word->flag(W_EOL), C_BLOB::deep_copy(blob)); + WERD_RES* word_res = pr_it->InsertSimpleCloneWord(*pr_it->word(), word); + // Get a new iterator that points to the new word. + PAGE_RES_IT it(pr_it->page_res); + while (it.word() != word_res && it.word() != NULL) it.forward(); + ASSERT_HOST(it.word() == word_res); + WordData wd(it); + // Force full initialization. + SetupWordPassN(1, &wd); + classify_word_and_language(pass_n, &it, &wd); + if (debug_noise_removal) { + tprintf("word xheight=%g, row=%g, range=[%g,%g]\n", word_res->x_height, + wd.row->x_height(), wd.word->raw_choice->min_x_height(), + wd.word->raw_choice->max_x_height()); + } + float cert = wd.word->raw_choice->certainty(); + float rat = wd.word->raw_choice->rating(); + *c2 = rat > 0.0f ? cert * cert / rat : 0.0f; + *best_str = wd.word->raw_choice->unichar_string(); + it.DeleteCurrentWord(); + pr_it->ResetWordIterator(); + return cert; + } + + // Generic function for classifying a word. Can be used either for pass1 or + // pass2 according to the function passed to recognizer. + // word_data holds the word to be recognized, and its block and row, and + // pr_it points to the word as well, in case we are running LSTM and it wants + // to output multiple words. + // Recognizes in the current language, and if successful that is all. + // If recognition was not successful, tries all available languages until + // it gets a successful result or runs out of languages. Keeps the best result. + void Tesseract::classify_word_and_language(int pass_n, PAGE_RES_IT* pr_it, + WordData* word_data) { + WordRecognizer recognizer = pass_n == 1 ? &Tesseract::classify_word_pass1 + : &Tesseract::classify_word_pass2; + // Best result so far. + PointerVector best_words; + // Points to the best result. May be word or in lang_words. + WERD_RES* word = word_data->word; + clock_t start_t = clock(); + if (classify_debug_level || cube_debug_level) { + tprintf("%s word with lang %s at:", + word->done ? "Already done" : "Processing", + most_recently_used_->lang.string()); + word->word->bounding_box().print(); + } + if (word->done) { + // If done on pass1, leave it as-is. + if (!word->tess_failed) + most_recently_used_ = word->tesseract; + return; + } + int sub = sub_langs_.size(); + if (most_recently_used_ != this) { + // Get the index of the most_recently_used_. + for (sub = 0; sub < sub_langs_.size() && + most_recently_used_ != sub_langs_[sub]; ++sub) { + } + } + most_recently_used_->RetryWithLanguage( + *word_data, recognizer, &word_data->lang_words[sub], &best_words); + Tesseract* best_lang_tess = most_recently_used_; + if (!WordsAcceptable(best_words)) { + // Try all the other languages to see if they are any better. + if (most_recently_used_ != this && + this->RetryWithLanguage(*word_data, recognizer, + &word_data->lang_words[sub_langs_.size()], + &best_words) > 0) { + best_lang_tess = this; + } + for (int i = 0; !WordsAcceptable(best_words) && i < sub_langs_.size(); + ++i) { + if (most_recently_used_ != sub_langs_[i] && + sub_langs_[i]->RetryWithLanguage(*word_data, recognizer, + &word_data->lang_words[i], + &best_words) > 0) { + best_lang_tess = sub_langs_[i]; + } + } + } + most_recently_used_ = best_lang_tess; + if (!best_words.empty()) { + if (best_words.size() == 1 && !best_words[0]->combination) { + // Move the best single result to the main word. + word_data->word->ConsumeWordResults(best_words[0]); + } + else { + // Words came from LSTM, and must be moved to the PAGE_RES properly. + word_data->word = best_words.back(); + pr_it->ReplaceCurrentWord(&best_words); + } + ASSERT_HOST(word_data->word->box_word != NULL); + } + else { + tprintf("no best words!!\n"); + } + clock_t ocr_t = clock(); + if (tessedit_timing_debug) { + tprintf("%s (ocr took %.2f sec)\n", + word->best_choice->unichar_string().string(), + static_cast(ocr_t - start_t) / CLOCKS_PER_SEC); + } + } + + /** + * classify_word_pass1 + * + * Baseline normalize the word and pass it to Tess. + */ + + void Tesseract::classify_word_pass1(const WordData& word_data, + WERD_RES** in_word, + PointerVector* out_words) { + ROW* row = word_data.row; + BLOCK* block = word_data.block; + prev_word_best_choice_ = word_data.prev_word != NULL + ? word_data.prev_word->word->best_choice : NULL; +#ifndef NO_CUBE_BUILD + // If we only intend to run cube - run it and return. + if (tessedit_ocr_engine_mode == OEM_CUBE_ONLY) { + cube_word_pass1(block, row, *in_word); + return; + } +#endif + WERD_RES* word = *in_word; + match_word_pass_n(1, word, row, block); + if (!word->tess_failed && !word->word->flag(W_REP_CHAR)) { + word->tess_would_adapt = AdaptableWord(word); + bool adapt_ok = word_adaptable(word, tessedit_tess_adaption_mode); + + if (adapt_ok) { + // Send word to adaptive classifier for training. + word->BestChoiceToCorrectText(); + LearnWord(NULL, word); + // Mark misadaptions if running blamer. + if (word->blamer_bundle != NULL) { + word->blamer_bundle->SetMisAdaptionDebug(word->best_choice, + wordrec_debug_blamer); + } + } + + if (tessedit_enable_doc_dict && !word->IsAmbiguous()) + tess_add_doc_word(word->best_choice); + } + } + + // Helper to report the result of the xheight fix. + void Tesseract::ReportXhtFixResult(bool accept_new_word, float new_x_ht, + WERD_RES* word, WERD_RES* new_word) { + tprintf("New XHT Match:%s = %s ", + word->best_choice->unichar_string().string(), + word->best_choice->debug_string().string()); + word->reject_map.print(debug_fp); + tprintf(" -> %s = %s ", + new_word->best_choice->unichar_string().string(), + new_word->best_choice->debug_string().string()); + new_word->reject_map.print(debug_fp); + tprintf(" %s->%s %s %s\n", + word->guessed_x_ht ? "GUESS" : "CERT", + new_word->guessed_x_ht ? "GUESS" : "CERT", + new_x_ht > 0.1 ? "STILL DOUBT" : "OK", + accept_new_word ? "ACCEPTED" : ""); + } + + // Run the x-height fix-up, based on min/max top/bottom information in + // unicharset. + // Returns true if the word was changed. + // See the comment in fixxht.cpp for a description of the overall process. + bool Tesseract::TrainedXheightFix(WERD_RES *word, BLOCK* block, ROW *row) { + int original_misfits = CountMisfitTops(word); + if (original_misfits == 0) + return false; + float baseline_shift = 0.0f; + float new_x_ht = ComputeCompatibleXheight(word, &baseline_shift); + if (baseline_shift != 0.0f) { + // Try the shift on its own first. + if (!TestNewNormalization(original_misfits, baseline_shift, word->x_height, + word, block, row)) + return false; + original_misfits = CountMisfitTops(word); + if (original_misfits > 0) { + float new_baseline_shift; + // Now recompute the new x_height. + new_x_ht = ComputeCompatibleXheight(word, &new_baseline_shift); + if (new_x_ht >= kMinRefitXHeightFraction * word->x_height) { + // No test of return value here, as we are definitely making a change + // to the word by shifting the baseline. + TestNewNormalization(original_misfits, baseline_shift, new_x_ht, + word, block, row); + } + } + return true; + } + else if (new_x_ht >= kMinRefitXHeightFraction * word->x_height) { + return TestNewNormalization(original_misfits, 0.0f, new_x_ht, + word, block, row); + } + else { + return false; + } + } + + // Runs recognition with the test baseline shift and x-height and returns true + // if there was an improvement in recognition result. + bool Tesseract::TestNewNormalization(int original_misfits, + float baseline_shift, float new_x_ht, + WERD_RES *word, BLOCK* block, ROW *row) { + bool accept_new_x_ht = false; + WERD_RES new_x_ht_word(word->word); + if (word->blamer_bundle != NULL) { + new_x_ht_word.blamer_bundle = new BlamerBundle(); + new_x_ht_word.blamer_bundle->CopyTruth(*(word->blamer_bundle)); + } + new_x_ht_word.x_height = new_x_ht; + new_x_ht_word.baseline_shift = baseline_shift; + new_x_ht_word.caps_height = 0.0; + new_x_ht_word.SetupForRecognition( + unicharset, this, BestPix(), tessedit_ocr_engine_mode, NULL, + classify_bln_numeric_mode, textord_use_cjk_fp_model, + poly_allow_detailed_fx, row, block); + match_word_pass_n(2, &new_x_ht_word, row, block); + if (!new_x_ht_word.tess_failed) { + int new_misfits = CountMisfitTops(&new_x_ht_word); + if (debug_x_ht_level >= 1) { + tprintf("Old misfits=%d with x-height %f, new=%d with x-height %f\n", + original_misfits, word->x_height, + new_misfits, new_x_ht); + tprintf("Old rating= %f, certainty=%f, new=%f, %f\n", + word->best_choice->rating(), word->best_choice->certainty(), + new_x_ht_word.best_choice->rating(), + new_x_ht_word.best_choice->certainty()); + } + // The misfits must improve and either the rating or certainty. + accept_new_x_ht = new_misfits < original_misfits && + (new_x_ht_word.best_choice->certainty() > + word->best_choice->certainty() || + new_x_ht_word.best_choice->rating() < + word->best_choice->rating()); + if (debug_x_ht_level >= 1) { + ReportXhtFixResult(accept_new_x_ht, new_x_ht, word, &new_x_ht_word); + } + } + if (accept_new_x_ht) { + word->ConsumeWordResults(&new_x_ht_word); + return true; + } + return false; + } + + /** + * classify_word_pass2 + * + * Control what to do with the word in pass 2 + */ + + void Tesseract::classify_word_pass2(const WordData& word_data, + WERD_RES** in_word, + PointerVector* out_words) { + // Return if we do not want to run Tesseract. + if (tessedit_ocr_engine_mode != OEM_TESSERACT_ONLY && + tessedit_ocr_engine_mode != OEM_TESSERACT_CUBE_COMBINED && + word_data.word->best_choice != NULL) + return; + if (tessedit_ocr_engine_mode == OEM_CUBE_ONLY) { + return; + } + ROW* row = word_data.row; + BLOCK* block = word_data.block; + WERD_RES* word = *in_word; + prev_word_best_choice_ = word_data.prev_word != NULL + ? word_data.prev_word->word->best_choice : NULL; + + set_global_subloc_code(SUBLOC_NORM); + check_debug_pt(word, 30); + if (!word->done) { + word->caps_height = 0.0; + if (word->x_height == 0.0f) + word->x_height = row->x_height(); + match_word_pass_n(2, word, row, block); + check_debug_pt(word, 40); + } + + SubAndSuperscriptFix(word); + + if (!word->tess_failed && !word->word->flag(W_REP_CHAR)) { + if (unicharset.top_bottom_useful() && unicharset.script_has_xheight() && + block->classify_rotation().y() == 0.0f) { + // Use the tops and bottoms since they are available. + TrainedXheightFix(word, block, row); + } + + set_global_subloc_code(SUBLOC_NORM); + } +#ifndef GRAPHICS_DISABLED + if (tessedit_display_outwords) { + if (fx_win == NULL) + create_fx_win(); + clear_fx_win(); + word->rebuild_word->plot(fx_win); + TBOX wbox = word->rebuild_word->bounding_box(); + fx_win->ZoomToRectangle(wbox.left(), wbox.top(), + wbox.right(), wbox.bottom()); + ScrollView::Update(); + } +#endif + set_global_subloc_code(SUBLOC_NORM); + check_debug_pt(word, 50); + } + + + /** + * match_word_pass2 + * + * Baseline normalize the word and pass it to Tess. + */ + + void Tesseract::match_word_pass_n(int pass_n, WERD_RES *word, + ROW *row, BLOCK* block) { + if (word->tess_failed) return; + tess_segment_pass_n(pass_n, word); + + if (!word->tess_failed) { + if (!word->word->flag(W_REP_CHAR)) { + word->fix_quotes(); + if (tessedit_fix_hyphens) + word->fix_hyphens(); + /* Don't trust fix_quotes! - though I think I've fixed the bug */ + if (word->best_choice->length() != word->box_word->length()) { + tprintf("POST FIX_QUOTES FAIL String:\"%s\"; Strlen=%d;" + " #Blobs=%d\n", + word->best_choice->debug_string().string(), + word->best_choice->length(), + word->box_word->length()); + + } + word->tess_accepted = tess_acceptable_word(word); + + // Also sets word->done flag + make_reject_map(word, row, pass_n); + } + } + set_word_fonts(word); + + ASSERT_HOST(word->raw_choice != NULL); + } + + // Helper to return the best rated BLOB_CHOICE in the whole word that matches + // the given char_id, or NULL if none can be found. + static BLOB_CHOICE* FindBestMatchingChoice(UNICHAR_ID char_id, + WERD_RES* word_res) { + // Find the corresponding best BLOB_CHOICE from any position in the word_res. + BLOB_CHOICE* best_choice = NULL; + for (int i = 0; i < word_res->best_choice->length(); ++i) { + BLOB_CHOICE* choice = FindMatchingChoice(char_id, + word_res->GetBlobChoices(i)); + if (choice != NULL) { + if (best_choice == NULL || choice->rating() < best_choice->rating()) + best_choice = choice; + } + } + return best_choice; + } + + // Helper to insert blob_choice in each location in the leader word if there is + // no matching BLOB_CHOICE there already, and correct any incorrect results + // in the best_choice. + static void CorrectRepcharChoices(BLOB_CHOICE* blob_choice, + WERD_RES* word_res) { + WERD_CHOICE* word = word_res->best_choice; + for (int i = 0; i < word_res->best_choice->length(); ++i) { + BLOB_CHOICE* choice = FindMatchingChoice(blob_choice->unichar_id(), + word_res->GetBlobChoices(i)); + if (choice == NULL) { + BLOB_CHOICE_IT choice_it(word_res->GetBlobChoices(i)); + choice_it.add_before_stay_put(new BLOB_CHOICE(*blob_choice)); + } + } + // Correct any incorrect results in word. + for (int i = 0; i < word->length(); ++i) { + if (word->unichar_id(i) != blob_choice->unichar_id()) + word->set_unichar_id(blob_choice->unichar_id(), i); + } + } + + /** + * fix_rep_char() + * The word is a repeated char. (Leader.) Find the repeated char character. + * Create the appropriate single-word or multi-word sequence according to + * the size of spaces in between blobs, and correct the classifications + * where some of the characters disagree with the majority. + */ + void Tesseract::fix_rep_char(PAGE_RES_IT* page_res_it) { + WERD_RES *word_res = page_res_it->word(); + const WERD_CHOICE &word = *(word_res->best_choice); + + // Find the frequency of each unique character in the word. + SortHelper rep_ch(word.length()); + for (int i = 0; i < word.length(); ++i) { + rep_ch.Add(word.unichar_id(i), 1); + } + + // Find the most frequent result. + UNICHAR_ID maxch_id = INVALID_UNICHAR_ID; // most common char + int max_count = rep_ch.MaxCount(&maxch_id); + // Find the best exemplar of a classifier result for maxch_id. + BLOB_CHOICE* best_choice = FindBestMatchingChoice(maxch_id, word_res); + if (best_choice == NULL) { + tprintf("Failed to find a choice for %s, occurring %d times\n", + word_res->uch_set->debug_str(maxch_id).string(), max_count); + return; + } + word_res->done = TRUE; + + // Measure the mean space. + int gap_count = 0; + WERD* werd = word_res->word; + C_BLOB_IT blob_it(werd->cblob_list()); + C_BLOB* prev_blob = blob_it.data(); + for (blob_it.forward(); !blob_it.at_first(); blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + int gap = blob->bounding_box().left(); + gap -= prev_blob->bounding_box().right(); + ++gap_count; + prev_blob = blob; + } + // Just correct existing classification. + CorrectRepcharChoices(best_choice, word_res); + word_res->reject_map.initialise(word.length()); + } + + ACCEPTABLE_WERD_TYPE Tesseract::acceptable_word_string( + const UNICHARSET& char_set, const char *s, const char *lengths) { + int i = 0; + int offset = 0; + int leading_punct_count; + int upper_count = 0; + int hyphen_pos = -1; + ACCEPTABLE_WERD_TYPE word_type = AC_UNACCEPTABLE; + + if (strlen(lengths) > 20) + return word_type; + + /* Single Leading punctuation char*/ + + if (s[offset] != '\0' && STRING(chs_leading_punct).contains(s[offset])) + offset += lengths[i++]; + leading_punct_count = i; + + /* Initial cap */ + while (s[offset] != '\0' && char_set.get_isupper(s + offset, lengths[i])) { + offset += lengths[i++]; + upper_count++; + } + if (upper_count > 1) { + word_type = AC_UPPER_CASE; + } + else { + /* Lower case word, possibly with an initial cap */ + while (s[offset] != '\0' && char_set.get_islower(s + offset, lengths[i])) { + offset += lengths[i++]; + } + if (i - leading_punct_count < quality_min_initial_alphas_reqd) + goto not_a_word; + /* + Allow a single hyphen in a lower case word + - don't trust upper case - I've seen several cases of "H" -> "I-I" + */ + if (lengths[i] == 1 && s[offset] == '-') { + hyphen_pos = i; + offset += lengths[i++]; + if (s[offset] != '\0') { + while ((s[offset] != '\0') && + char_set.get_islower(s + offset, lengths[i])) { + offset += lengths[i++]; + } + if (i < hyphen_pos + 3) + goto not_a_word; + } + } + else { + /* Allow "'s" in NON hyphenated lower case words */ + if (lengths[i] == 1 && (s[offset] == '\'') && + lengths[i + 1] == 1 && (s[offset + lengths[i]] == 's')) { + offset += lengths[i++]; + offset += lengths[i++]; + } + } + if (upper_count > 0) + word_type = AC_INITIAL_CAP; + else + word_type = AC_LOWER_CASE; + } + + /* Up to two different, constrained trailing punctuation chars */ + if (lengths[i] == 1 && s[offset] != '\0' && + STRING(chs_trailing_punct1).contains(s[offset])) + offset += lengths[i++]; + if (lengths[i] == 1 && s[offset] != '\0' && i > 0 && + s[offset - lengths[i - 1]] != s[offset] && + STRING(chs_trailing_punct2).contains(s[offset])) + offset += lengths[i++]; + + if (s[offset] != '\0') + word_type = AC_UNACCEPTABLE; + + not_a_word: + + if (word_type == AC_UNACCEPTABLE) { + /* Look for abbreviation string */ + i = 0; + offset = 0; + if (s[0] != '\0' && char_set.get_isupper(s, lengths[0])) { + word_type = AC_UC_ABBREV; + while (s[offset] != '\0' && + char_set.get_isupper(s + offset, lengths[i]) && + lengths[i + 1] == 1 && s[offset + lengths[i]] == '.') { + offset += lengths[i++]; + offset += lengths[i++]; + } + } + else if (s[0] != '\0' && char_set.get_islower(s, lengths[0])) { + word_type = AC_LC_ABBREV; + while (s[offset] != '\0' && + char_set.get_islower(s + offset, lengths[i]) && + lengths[i + 1] == 1 && s[offset + lengths[i]] == '.') { + offset += lengths[i++]; + offset += lengths[i++]; + } + } + if (s[offset] != '\0') + word_type = AC_UNACCEPTABLE; + } + + return word_type; + } + + BOOL8 Tesseract::check_debug_pt(WERD_RES *word, int location) { + BOOL8 show_map_detail = FALSE; + inT16 i; + + if (!test_pt) + return FALSE; + + tessedit_rejection_debug.set_value(FALSE); + debug_x_ht_level.set_value(0); + + if (word->word->bounding_box().contains(FCOORD(test_pt_x, test_pt_y))) { + if (location < 0) + return TRUE; // For breakpoint use + tessedit_rejection_debug.set_value(TRUE); + debug_x_ht_level.set_value(2); + tprintf("\n\nTESTWD::"); + switch (location) { + case 0: + tprintf("classify_word_pass1 start\n"); + word->word->print(); + break; + case 10: + tprintf("make_reject_map: initial map"); + break; + case 20: + tprintf("make_reject_map: after NN"); + break; + case 30: + tprintf("classify_word_pass2 - START"); + break; + case 40: + tprintf("classify_word_pass2 - Pre Xht"); + break; + case 50: + tprintf("classify_word_pass2 - END"); + show_map_detail = TRUE; + break; + case 60: + tprintf("fixspace"); + break; + case 70: + tprintf("MM pass START"); + break; + case 80: + tprintf("MM pass END"); + break; + case 90: + tprintf("After Poor quality rejection"); + break; + case 100: + tprintf("unrej_good_quality_words - START"); + break; + case 110: + tprintf("unrej_good_quality_words - END"); + break; + case 120: + tprintf("Write results pass"); + show_map_detail = TRUE; + break; + } + if (word->best_choice != NULL) { + tprintf(" \"%s\" ", word->best_choice->unichar_string().string()); + word->reject_map.print(debug_fp); + tprintf("\n"); + if (show_map_detail) { + tprintf("\"%s\"\n", word->best_choice->unichar_string().string()); + for (i = 0; word->best_choice->unichar_string()[i] != '\0'; i++) { + tprintf("**** \"%c\" ****\n", word->best_choice->unichar_string()[i]); + word->reject_map[i].full_print(debug_fp); + } + } + } + else { + tprintf("null best choice\n"); + } + tprintf("Tess Accepted: %s\n", word->tess_accepted ? "TRUE" : "FALSE"); + tprintf("Done flag: %s\n\n", word->done ? "TRUE" : "FALSE"); + return TRUE; + } + else { + return FALSE; + } + } + + /** + * find_modal_font + * + * Find the modal font and remove from the stats. + */ + static void find_modal_font( //good chars in word + STATS *fonts, //font stats + inT16 *font_out, //output font + inT8 *font_count //output count + ) { + inT16 font; //font index + inT32 count; //pile couat + + if (fonts->get_total() > 0) { + font = (inT16)fonts->mode(); + *font_out = font; + count = fonts->pile_count(font); + *font_count = count < MAX_INT8 ? count : MAX_INT8; + fonts->add(font, -*font_count); + } + else { + *font_out = -1; + *font_count = 0; + } + } + + /** + * set_word_fonts + * + * Get the fonts for the word. + */ + void Tesseract::set_word_fonts(WERD_RES *word) { + // Don't try to set the word fonts for a cube word, as the configs + // will be meaningless. + if (word->chopped_word == NULL) return; + ASSERT_HOST(word->best_choice != NULL); + + int fontinfo_size = get_fontinfo_table().size(); + if (fontinfo_size == 0) return; + GenericVector font_total_score; + font_total_score.init_to_size(fontinfo_size, 0); + + word->italic = 0; + word->bold = 0; + // Compute the font scores for the word + if (tessedit_debug_fonts) { + tprintf("Examining fonts in %s\n", + word->best_choice->debug_string().string()); + } + for (int b = 0; b < word->best_choice->length(); ++b) { + BLOB_CHOICE* choice = word->GetBlobChoice(b); + if (choice == NULL) continue; + const GenericVector& fonts = choice->fonts(); + for (int f = 0; f < fonts.size(); ++f) { + int fontinfo_id = fonts[f].fontinfo_id; + if (0 <= fontinfo_id && fontinfo_id < fontinfo_size) { + font_total_score[fontinfo_id] += fonts[f].score; + } + } + } + // Find the top and 2nd choice for the word. + int score1 = 0, score2 = 0; + inT16 font_id1 = -1, font_id2 = -1; + for (int f = 0; f < fontinfo_size; ++f) { + if (tessedit_debug_fonts && font_total_score[f] > 0) { + tprintf("Font %s, total score = %d\n", + fontinfo_table_.get(f).name, font_total_score[f]); + } + if (font_total_score[f] > score1) { + score2 = score1; + font_id2 = font_id1; + score1 = font_total_score[f]; + font_id1 = f; + } + else if (font_total_score[f] > score2) { + score2 = font_total_score[f]; + font_id2 = f; + } + } + word->fontinfo = font_id1 >= 0 ? &fontinfo_table_.get(font_id1) : NULL; + word->fontinfo2 = font_id2 >= 0 ? &fontinfo_table_.get(font_id2) : NULL; + // Each score has a limit of MAX_UINT16, so divide by that to get the number + // of "votes" for that font, ie number of perfect scores. + word->fontinfo_id_count = ClipToRange(score1 / MAX_UINT16, 1, MAX_INT8); + word->fontinfo_id2_count = ClipToRange(score2 / MAX_UINT16, 0, MAX_INT8); + if (score1 > 0) { + FontInfo fi = fontinfo_table_.get(font_id1); + if (tessedit_debug_fonts) { + if (word->fontinfo_id2_count > 0) { + tprintf("Word modal font=%s, score=%d, 2nd choice %s/%d\n", + fi.name, word->fontinfo_id_count, + fontinfo_table_.get(font_id2).name, + word->fontinfo_id2_count); + } + else { + tprintf("Word modal font=%s, score=%d. No 2nd choice\n", + fi.name, word->fontinfo_id_count); + } + } + word->italic = (fi.is_italic() ? 1 : -1) * word->fontinfo_id_count; + word->bold = (fi.is_bold() ? 1 : -1) * word->fontinfo_id_count; + } + } + + + /** + * font_recognition_pass + * + * Smooth the fonts for the document. + */ + + void Tesseract::font_recognition_pass(PAGE_RES* page_res) { + PAGE_RES_IT page_res_it(page_res); + WERD_RES *word; // current word + STATS doc_fonts(0, font_table_size_); // font counters + + // Gather font id statistics. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + word = page_res_it.word(); + if (word->fontinfo != NULL) { + doc_fonts.add(word->fontinfo->universal_id, word->fontinfo_id_count); + } + if (word->fontinfo2 != NULL) { + doc_fonts.add(word->fontinfo2->universal_id, word->fontinfo_id2_count); + } + } + inT16 doc_font; // modal font + inT8 doc_font_count; // modal font + find_modal_font(&doc_fonts, &doc_font, &doc_font_count); + if (doc_font_count == 0) + return; + // Get the modal font pointer. + const FontInfo* modal_font = NULL; + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + word = page_res_it.word(); + if (word->fontinfo != NULL && word->fontinfo->universal_id == doc_font) { + modal_font = word->fontinfo; + break; + } + if (word->fontinfo2 != NULL && word->fontinfo2->universal_id == doc_font) { + modal_font = word->fontinfo2; + break; + } + } + ASSERT_HOST(modal_font != NULL); + + // Assign modal font to weak words. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + word = page_res_it.word(); + int length = word->best_choice->length(); + + int count = word->fontinfo_id_count; + if (!(count == length || (length > 3 && count >= length * 3 / 4))) { + word->fontinfo = modal_font; + // Counts only get 1 as it came from the doc. + word->fontinfo_id_count = 1; + word->italic = modal_font->is_italic() ? 1 : -1; + word->bold = modal_font->is_bold() ? 1 : -1; + } + } + } + + // If a word has multiple alternates check if the best choice is in the + // dictionary. If not, replace it with an alternate that exists in the + // dictionary. + void Tesseract::dictionary_correction_pass(PAGE_RES *page_res) { + PAGE_RES_IT word_it(page_res); + for (WERD_RES* word = word_it.word(); word != NULL; + word = word_it.forward()) { + if (word->best_choices.singleton()) + continue; // There are no alternates. + + WERD_CHOICE* best = word->best_choice; + if (word->tesseract->getDict().valid_word(*best) != 0) + continue; // The best choice is in the dictionary. + + WERD_CHOICE_IT choice_it(&word->best_choices); + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list(); + choice_it.forward()) { + WERD_CHOICE* alternate = choice_it.data(); + if (word->tesseract->getDict().valid_word(*alternate)) { + // The alternate choice is in the dictionary. + if (tessedit_bigram_debug) { + tprintf("Dictionary correction replaces best choice '%s' with '%s'\n", + best->unichar_string().string(), + alternate->unichar_string().string()); + } + // Replace the 'best' choice with a better choice. + word->ReplaceBestChoice(alternate); + break; + } + } + } + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/control.h b/3rdparty/hgOCR/include/ccmain/control.h new file mode 100644 index 00000000..f8a6599a --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/control.h @@ -0,0 +1,44 @@ +/********************************************************************** + * File: control.h (Formerly control.h) + * Description: Module-independent matcher controller. + * Author: Ray Smith + * Created: Thu Apr 23 11:09:58 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + /** + * @file control.h + * Module-independent matcher controller. + */ + +#ifndef CONTROL_H +#define CONTROL_H + +#include "params.h" +#include "ocrblock.h" +#include "ratngs.h" +#include "statistc.h" +#include "pageres.h" + +enum ACCEPTABLE_WERD_TYPE +{ + AC_UNACCEPTABLE, ///< Unacceptable word + AC_LOWER_CASE, ///< ALL lower case + AC_UPPER_CASE, ///< ALL upper case + AC_INITIAL_CAP, ///< ALL but initial lc + AC_LC_ABBREV, ///< a.b.c. + AC_UC_ABBREV ///< A.B.C. +}; + +#endif diff --git a/3rdparty/hgOCR/include/ccmain/cube_control.cpp b/3rdparty/hgOCR/include/ccmain/cube_control.cpp new file mode 100644 index 00000000..ac9e50b5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/cube_control.cpp @@ -0,0 +1,440 @@ +/****************************************************************** + * File: cube_control.cpp + * Description: Tesseract class methods for invoking cube convolutional + * neural network word recognizer. + * Author: Raquel Romano + * Created: September 2009 + * + * (C) Copyright 2009, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + **********************************************************************/ + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "allheaders.h" + +#include "cube_object.h" +#include "cube_reco_context.h" +#include "tesseractclass.h" +#include "tesseract_cube_combiner.h" + +namespace tesseract { + + /** + * @name convert_prob_to_tess_certainty + * + * Normalize a probability in the range [0.0, 1.0] to a tesseract + * certainty in the range [-20.0, 0.0] + */ + static float convert_prob_to_tess_certainty(float prob) { + return (prob - 1.0) * 20.0; + } + + /** + * @name char_box_to_tbox + * + * Create a TBOX from a character bounding box. If nonzero, the + * x_offset accounts for any additional padding of the word box that + * should be taken into account. + * + */ + TBOX char_box_to_tbox(Box* char_box, TBOX word_box, int x_offset) { + l_int32 left; + l_int32 top; + l_int32 width; + l_int32 height; + l_int32 right; + l_int32 bottom; + + boxGetGeometry(char_box, &left, &top, &width, &height); + left += word_box.left() - x_offset; + right = left + width; + top = word_box.bottom() + word_box.height() - top; + bottom = top - height; + return TBOX(left, bottom, right, top); + } + + /** + * @name extract_cube_state + * + * Extract CharSamp objects and character bounding boxes from the + * CubeObject's state. The caller should free both structres. + * + */ + bool Tesseract::extract_cube_state(CubeObject* cube_obj, + int* num_chars, + Boxa** char_boxes, + CharSamp*** char_samples) { + if (!cube_obj) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (extract_cube_state): Invalid cube object " + "passed to extract_cube_state\n"); + } + return false; + } + + // Note that the CubeObject accessors return either the deslanted or + // regular objects search object or beam search object, whichever + // was used in the last call to Recognize() + CubeSearchObject* cube_search_obj = cube_obj->SrchObj(); + if (!cube_search_obj) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (Extract_cube_state): Could not retrieve " + "cube's search object in extract_cube_state.\n"); + } + return false; + } + BeamSearch *beam_search_obj = cube_obj->BeamObj(); + if (!beam_search_obj) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (Extract_cube_state): Could not retrieve " + "cube's beam search object in extract_cube_state.\n"); + } + return false; + } + + // Get the character samples and bounding boxes by backtracking + // through the beam search path + int best_node_index = beam_search_obj->BestPresortedNodeIndex(); + *char_samples = beam_search_obj->BackTrack( + cube_search_obj, best_node_index, num_chars, NULL, char_boxes); + if (!*char_samples) + return false; + return true; + } + + /** + * @name create_cube_box_word + * + * Fill the given BoxWord with boxes from character bounding + * boxes. The char_boxes have local coordinates w.r.t. the + * word bounding box, i.e., the left-most character bbox of each word + * has (0,0) left-top coord, but the BoxWord must be defined in page + * coordinates. + */ + bool Tesseract::create_cube_box_word(Boxa *char_boxes, + int num_chars, + TBOX word_box, + BoxWord* box_word) { + if (!box_word) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (create_cube_box_word): Invalid box_word.\n"); + } + return false; + } + + // Find the x-coordinate of left-most char_box, which could be + // nonzero if the word image was padded before recognition took place. + int x_offset = -1; + for (int i = 0; i < num_chars; ++i) { + Box* char_box = boxaGetBox(char_boxes, i, L_CLONE); + if (x_offset < 0 || char_box->x < x_offset) { + x_offset = char_box->x; + } + boxDestroy(&char_box); + } + + for (int i = 0; i < num_chars; ++i) { + Box* char_box = boxaGetBox(char_boxes, i, L_CLONE); + TBOX tbox = char_box_to_tbox(char_box, word_box, x_offset); + boxDestroy(&char_box); + box_word->InsertBox(i, tbox); + } + return true; + } + + /** + * @name init_cube_objects + * + * Instantiates Tesseract object's CubeRecoContext and TesseractCubeCombiner. + * Returns false if cube context could not be created or if load_combiner is + * true, but the combiner could not be loaded. + */ + bool Tesseract::init_cube_objects(bool load_combiner, + TessdataManager *tessdata_manager) { + ASSERT_HOST(cube_cntxt_ == NULL); + ASSERT_HOST(tess_cube_combiner_ == NULL); + + // Create the cube context object + cube_cntxt_ = CubeRecoContext::Create(this, tessdata_manager, &unicharset); + if (cube_cntxt_ == NULL) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (Tesseract::init_cube_objects()): Failed to " + "instantiate CubeRecoContext\n"); + } + return false; + } + + // Create the combiner object and load the combiner net for target languages. + if (load_combiner) { + tess_cube_combiner_ = new tesseract::TesseractCubeCombiner(cube_cntxt_); + if (!tess_cube_combiner_->LoadCombinerNet()) { + delete cube_cntxt_; + cube_cntxt_ = NULL; + delete tess_cube_combiner_; + tess_cube_combiner_ = NULL; + if (cube_debug_level > 0) + tprintf("Cube ERROR (Failed to instantiate TesseractCubeCombiner\n"); + return false; + } + } + return true; + } + + /** + * @name run_cube_combiner + * + * Iterates through tesseract's results and calls cube on each word, + * combining the results with the existing tesseract result. + */ + void Tesseract::run_cube_combiner(PAGE_RES *page_res) { + if (page_res == NULL || tess_cube_combiner_ == NULL) + return; + PAGE_RES_IT page_res_it(page_res); + // Iterate through the word results and call cube on each word. + for (page_res_it.restart_page(); page_res_it.word() != NULL; + page_res_it.forward()) { + BLOCK* block = page_res_it.block()->block; + if (block->poly_block() != NULL && !block->poly_block()->IsText()) + continue; // Don't deal with non-text blocks. + WERD_RES* word = page_res_it.word(); + // Skip cube entirely if tesseract's certainty is greater than threshold. + int combiner_run_thresh = convert_prob_to_tess_certainty( + cube_cntxt_->Params()->CombinerRunThresh()); + if (word->best_choice->certainty() >= combiner_run_thresh) { + continue; + } + // Use the same language as Tesseract used for the word. + Tesseract* lang_tess = word->tesseract; + + // Setup a trial WERD_RES in which to classify with cube. + WERD_RES cube_word; + cube_word.InitForRetryRecognition(*word); + cube_word.SetupForRecognition(lang_tess->unicharset, this, BestPix(), + OEM_CUBE_ONLY, + NULL, false, false, false, + page_res_it.row()->row, + page_res_it.block()->block); + CubeObject *cube_obj = lang_tess->cube_recognize_word( + page_res_it.block()->block, &cube_word); + if (cube_obj != NULL) + lang_tess->cube_combine_word(cube_obj, &cube_word, word); + delete cube_obj; + } + } + + /** + * @name cube_word_pass1 + * + * Recognizes a single word using (only) cube. Compatible with + * Tesseract's classify_word_pass1/classify_word_pass2. + */ + void Tesseract::cube_word_pass1(BLOCK* block, ROW *row, WERD_RES *word) { + CubeObject *cube_obj = cube_recognize_word(block, word); + delete cube_obj; + } + + /** + * @name cube_recognize_word + * + * Cube recognizer to recognize a single word as with classify_word_pass1 + * but also returns the cube object in case the combiner is needed. + */ + CubeObject* Tesseract::cube_recognize_word(BLOCK* block, WERD_RES* word) { + if (!cube_binary_ || !cube_cntxt_) { + if (cube_debug_level > 0 && !cube_binary_) + tprintf("Tesseract::run_cube(): NULL binary image.\n"); + word->SetupFake(unicharset); + return NULL; + } + TBOX word_box = word->word->bounding_box(); + if (block != NULL && (block->re_rotation().x() != 1.0f || + block->re_rotation().y() != 0.0f)) { + // TODO(rays) We have to rotate the bounding box to get the true coords. + // This will be achieved in the future via DENORM. + // In the mean time, cube can't process this word. + if (cube_debug_level > 0) { + tprintf("Cube can't process rotated word at:"); + word_box.print(); + } + word->SetupFake(unicharset); + return NULL; + } + CubeObject* cube_obj = new tesseract::CubeObject( + cube_cntxt_, cube_binary_, word_box.left(), + pixGetHeight(cube_binary_) - word_box.top(), + word_box.width(), word_box.height()); + if (!cube_recognize(cube_obj, block, word)) { + delete cube_obj; + return NULL; + } + return cube_obj; + } + + /** + * @name cube_combine_word + * + * Combines the cube and tesseract results for a single word, leaving the + * result in tess_word. + */ + void Tesseract::cube_combine_word(CubeObject* cube_obj, WERD_RES* cube_word, + WERD_RES* tess_word) { + float combiner_prob = tess_cube_combiner_->CombineResults(tess_word, + cube_obj); + // If combiner probability is greater than tess/cube combiner + // classifier threshold, i.e. tesseract wins, then just return the + // tesseract result unchanged, as the combiner knows nothing about how + // correct the answer is. If cube and tesseract agree, then improve the + // scores before returning. + WERD_CHOICE* tess_best = tess_word->best_choice; + WERD_CHOICE* cube_best = cube_word->best_choice; + if (cube_debug_level || classify_debug_level) { + tprintf("Combiner prob = %g vs threshold %g\n", + combiner_prob, cube_cntxt_->Params()->CombinerClassifierThresh()); + } + if (combiner_prob >= + cube_cntxt_->Params()->CombinerClassifierThresh()) { + if (tess_best->unichar_string() == cube_best->unichar_string()) { + // Cube and tess agree, so improve the scores. + tess_best->set_rating(tess_best->rating() / 2); + tess_best->set_certainty(tess_best->certainty() / 2); + } + return; + } + // Cube wins. + // It is better for the language combiner to have all tesseract scores, + // so put them in the cube result. + cube_best->set_rating(tess_best->rating()); + cube_best->set_certainty(tess_best->certainty()); + if (cube_debug_level || classify_debug_level) { + tprintf("Cube INFO: tesseract result replaced by cube: %s -> %s\n", + tess_best->unichar_string().string(), + cube_best->unichar_string().string()); + } + tess_word->ConsumeWordResults(cube_word); + } + + /** + * @name cube_recognize + * + * Call cube on the current word, and write the result to word. + * Sets up a fake result and returns false if something goes wrong. + */ + bool Tesseract::cube_recognize(CubeObject *cube_obj, BLOCK* block, + WERD_RES *word) { + // Run cube + WordAltList *cube_alt_list = cube_obj->RecognizeWord(); + if (!cube_alt_list || cube_alt_list->AltCount() <= 0) { + if (cube_debug_level > 0) { + tprintf("Cube returned nothing for word at:"); + word->word->bounding_box().print(); + } + word->SetupFake(unicharset); + return false; + } + + // Get cube's best result and its probability, mapped to tesseract's + // certainty range + char_32 *cube_best_32 = cube_alt_list->Alt(0); + double cube_prob = CubeUtils::Cost2Prob(cube_alt_list->AltCost(0)); + float cube_certainty = convert_prob_to_tess_certainty(cube_prob); + string cube_best_str; + CubeUtils::UTF32ToUTF8(cube_best_32, &cube_best_str); + + // Retrieve Cube's character bounding boxes and CharSamples, + // corresponding to the most recent call to RecognizeWord(). + Boxa *char_boxes = NULL; + CharSamp **char_samples = NULL;; + int num_chars; + if (!extract_cube_state(cube_obj, &num_chars, &char_boxes, &char_samples) + && cube_debug_level > 0) { + tprintf("Cube WARNING (Tesseract::cube_recognize): Cannot extract " + "cube state.\n"); + word->SetupFake(unicharset); + return false; + } + + // Convert cube's character bounding boxes to a BoxWord. + BoxWord cube_box_word; + TBOX tess_word_box = word->word->bounding_box(); + if (word->denorm.block() != NULL) + tess_word_box.rotate(word->denorm.block()->re_rotation()); + bool box_word_success = create_cube_box_word(char_boxes, num_chars, + tess_word_box, + &cube_box_word); + boxaDestroy(&char_boxes); + if (!box_word_success) { + if (cube_debug_level > 0) { + tprintf("Cube WARNING (Tesseract::cube_recognize): Could not " + "create cube BoxWord\n"); + } + word->SetupFake(unicharset); + return false; + } + + // Fill tesseract result's fields with cube results + fill_werd_res(cube_box_word, cube_best_str.c_str(), word); + + // Create cube's best choice. + BLOB_CHOICE** choices = new BLOB_CHOICE*[num_chars]; + for (int i = 0; i < num_chars; ++i) { + UNICHAR_ID uch_id = + cube_cntxt_->CharacterSet()->UnicharID(char_samples[i]->StrLabel()); + choices[i] = new BLOB_CHOICE(uch_id, -cube_certainty, cube_certainty, + -1, 0.0f, 0.0f, 0.0f, BCC_STATIC_CLASSIFIER); + } + word->FakeClassifyWord(num_chars, choices); + // within a word, cube recognizes the word in reading order. + word->best_choice->set_unichars_in_script_order(true); + delete[] choices; + delete[] char_samples; + + // Some sanity checks + ASSERT_HOST(word->best_choice->length() == word->reject_map.length()); + + if (cube_debug_level || classify_debug_level) { + tprintf("Cube result: %s r=%g, c=%g\n", + word->best_choice->unichar_string().string(), + word->best_choice->rating(), + word->best_choice->certainty()); + } + return true; + } + + /** + * @name fill_werd_res + * + * Fill Tesseract's word result fields with cube's. + * + */ + void Tesseract::fill_werd_res(const BoxWord& cube_box_word, + const char* cube_best_str, + WERD_RES* tess_werd_res) { + delete tess_werd_res->box_word; + tess_werd_res->box_word = new BoxWord(cube_box_word); + tess_werd_res->box_word->ClipToOriginalWord(tess_werd_res->denorm.block(), + tess_werd_res->word); + // Fill text and remaining fields + tess_werd_res->word->set_text(cube_best_str); + tess_werd_res->tess_failed = FALSE; + tess_werd_res->tess_accepted = tess_acceptable_word(tess_werd_res); + // There is no output word, so we can' call AdaptableWord, but then I don't + // think we need to. Fudge the result with accepted. + tess_werd_res->tess_would_adapt = tess_werd_res->tess_accepted; + + // Set word to done, i.e., ignore all of tesseract's tests for rejection + tess_werd_res->done = tess_werd_res->tess_accepted; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/cube_reco_context.cpp b/3rdparty/hgOCR/include/ccmain/cube_reco_context.cpp new file mode 100644 index 00000000..c9ce4896 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/cube_reco_context.cpp @@ -0,0 +1,184 @@ +/********************************************************************** + * File: cube_reco_context.cpp + * Description: Implementation of the Cube Recognition Context Class + * Author: Ahmad Abdulkader + * Created: 2007 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include + +#include "cube_reco_context.h" + +#include "classifier_factory.h" +#include "cube_tuning_params.h" +#include "dict.h" +#include "feature_bmp.h" +#include "tessdatamanager.h" +#include "tesseractclass.h" +#include "tess_lang_model.h" + +namespace tesseract { + + /** + * Instantiate a CubeRecoContext object using a Tesseract object. + * CubeRecoContext will not take ownership of tess_obj, but will + * record the pointer to it and will make use of various Tesseract + * components (language model, flags, etc). Thus the caller should + * keep tess_obj alive so long as the instantiated CubeRecoContext is used. + */ + CubeRecoContext::CubeRecoContext(Tesseract *tess_obj) { + tess_obj_ = tess_obj; + lang_ = ""; + loaded_ = false; + lang_mod_ = NULL; + params_ = NULL; + char_classifier_ = NULL; + char_set_ = NULL; + word_size_model_ = NULL; + char_bigrams_ = NULL; + word_unigrams_ = NULL; + noisy_input_ = false; + size_normalization_ = false; + } + + CubeRecoContext::~CubeRecoContext() { + delete char_classifier_; + char_classifier_ = NULL; + + delete word_size_model_; + word_size_model_ = NULL; + + delete char_set_; + char_set_ = NULL; + + delete char_bigrams_; + char_bigrams_ = NULL; + + delete word_unigrams_; + word_unigrams_ = NULL; + + delete lang_mod_; + lang_mod_ = NULL; + + delete params_; + params_ = NULL; + } + + /** + * Returns the path of the data files by looking up the TESSDATA_PREFIX + * environment variable and appending a "tessdata" directory to it + */ + bool CubeRecoContext::GetDataFilePath(string *path) const { + *path = tess_obj_->datadir.string(); + return true; + } + + /** + * The object initialization function that loads all the necessary + * components of a RecoContext. TessdataManager is used to load the + * data from [lang].traineddata file. If TESSDATA_CUBE_UNICHARSET + * component is present, Cube will be instantiated with the unicharset + * specified in this component and the corresponding dictionary + * (TESSDATA_CUBE_SYSTEM_DAWG), and will map Cube's unicharset to + * Tesseract's. Otherwise, TessdataManager will assume that Cube will + * be using Tesseract's unicharset and dawgs, and will load the + * unicharset from the TESSDATA_UNICHARSET component and will load the + * dawgs from TESSDATA_*_DAWG components. + */ + bool CubeRecoContext::Load(TessdataManager *tessdata_manager, + UNICHARSET *tess_unicharset) { + ASSERT_HOST(tess_obj_ != NULL); + tess_unicharset_ = tess_unicharset; + string data_file_path; + + // Get the data file path. + if (GetDataFilePath(&data_file_path) == false) { + fprintf(stderr, "Unable to get data file path\n"); + return false; + } + + // Get the language from the Tesseract object. + lang_ = tess_obj_->lang.string(); + + // Create the char set. + if ((char_set_ = + CharSet::Create(tessdata_manager, tess_unicharset)) == NULL) { + fprintf(stderr, "Cube ERROR (CubeRecoContext::Load): unable to load " + "CharSet\n"); + return false; + } + // Create the language model. + string lm_file_name = data_file_path + lang_ + ".cube.lm"; + string lm_params; + if (!CubeUtils::ReadFileToString(lm_file_name, &lm_params)) { + fprintf(stderr, "Cube ERROR (CubeRecoContext::Load): unable to read cube " + "language model params from %s\n", lm_file_name.c_str()); + return false; + } + lang_mod_ = new TessLangModel(lm_params, data_file_path, + tess_obj_->getDict().load_system_dawg, + tessdata_manager, this); + + // Create the optional char bigrams object. + char_bigrams_ = CharBigrams::Create(data_file_path, lang_); + + // Create the optional word unigrams object. + word_unigrams_ = WordUnigrams::Create(data_file_path, lang_); + + // Create the optional size model. + word_size_model_ = WordSizeModel::Create(data_file_path, lang_, + char_set_, Contextual()); + + // Load tuning params. + params_ = CubeTuningParams::Create(data_file_path, lang_); + if (params_ == NULL) { + fprintf(stderr, "Cube ERROR (CubeRecoContext::Load): unable to read " + "CubeTuningParams from %s\n", data_file_path.c_str()); + return false; + } + + // Create the char classifier. + char_classifier_ = CharClassifierFactory::Create(data_file_path, lang_, + lang_mod_, char_set_, + params_); + if (char_classifier_ == NULL) { + fprintf(stderr, "Cube ERROR (CubeRecoContext::Load): unable to load " + "CharClassifierFactory object from %s\n", data_file_path.c_str()); + return false; + } + + loaded_ = true; + + return true; + } + + /** Creates a CubeRecoContext object using a tesseract object */ + CubeRecoContext * CubeRecoContext::Create(Tesseract *tess_obj, + TessdataManager *tessdata_manager, + UNICHARSET *tess_unicharset) { + // create the object + CubeRecoContext *cntxt = new CubeRecoContext(tess_obj); + // load the necessary components + if (cntxt->Load(tessdata_manager, tess_unicharset) == false) { + fprintf(stderr, "Cube ERROR (CubeRecoContext::Create): unable to init " + "CubeRecoContext object\n"); + delete cntxt; + return NULL; + } + // success + return cntxt; + } +} // tesseract} diff --git a/3rdparty/hgOCR/include/ccmain/cube_reco_context.h b/3rdparty/hgOCR/include/ccmain/cube_reco_context.h new file mode 100644 index 00000000..120585a8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/cube_reco_context.h @@ -0,0 +1,157 @@ +/********************************************************************** + * File: cube_reco_context.h + * Description: Declaration of the Cube Recognition Context Class + * Author: Ahmad Abdulkader + * Created: 2007 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // The CubeRecoContext class abstracts the Cube OCR Engine. Typically a process + // (or a thread) would create one CubeRecoContext object per language. + // The CubeRecoContext object also provides methods to get and set the + // different attribues of the Cube OCR Engine. + +#ifndef CUBE_RECO_CONTEXT_H +#define CUBE_RECO_CONTEXT_H + +#include +#include "neural_net.h" +#include "lang_model.h" +#include "classifier_base.h" +#include "feature_base.h" +#include "char_set.h" +#include "word_size_model.h" +#include "char_bigrams.h" +#include "word_unigrams.h" + +namespace tesseract { + + class Tesseract; + class TessdataManager; + + class CubeRecoContext { + public: + // Reading order enum type + enum ReadOrder { + L2R, + R2L + }; + + // Instantiate using a Tesseract object + CubeRecoContext(Tesseract *tess_obj); + + ~CubeRecoContext(); + + // accessor functions + inline const string & Lang() const { return lang_; } + inline CharSet *CharacterSet() const { return char_set_; } + const UNICHARSET *TessUnicharset() const { return tess_unicharset_; } + inline CharClassifier *Classifier() const { return char_classifier_; } + inline WordSizeModel *SizeModel() const { return word_size_model_; } + inline CharBigrams *Bigrams() const { return char_bigrams_; } + inline WordUnigrams *WordUnigramsObj() const { return word_unigrams_; } + inline TuningParams *Params() const { return params_; } + inline LangModel *LangMod() const { return lang_mod_; } + + // the reading order of the language + inline ReadOrder ReadingOrder() const { + return ((lang_ == "ara") ? R2L : L2R); + } + + // does the language support case + inline bool HasCase() const { + return (lang_ != "ara" && lang_ != "hin"); + } + + inline bool Cursive() const { + return (lang_ == "ara"); + } + + inline bool HasItalics() const { + return (lang_ != "ara" && lang_ != "hin"); + } + + inline bool Contextual() const { + return (lang_ == "ara"); + } + + // RecoContext runtime flags accessor functions + inline bool SizeNormalization() const { return size_normalization_; } + inline bool NoisyInput() const { return noisy_input_; } + inline bool OOD() const { return lang_mod_->OOD(); } + inline bool Numeric() const { return lang_mod_->Numeric(); } + inline bool WordList() const { return lang_mod_->WordList(); } + inline bool Punc() const { return lang_mod_->Punc(); } + inline bool CaseSensitive() const { + return char_classifier_->CaseSensitive(); + } + + inline void SetSizeNormalization(bool size_normalization) { + size_normalization_ = size_normalization; + } + inline void SetNoisyInput(bool noisy_input) { + noisy_input_ = noisy_input; + } + inline void SetOOD(bool ood_enabled) { + lang_mod_->SetOOD(ood_enabled); + } + inline void SetNumeric(bool numeric_enabled) { + lang_mod_->SetNumeric(numeric_enabled); + } + inline void SetWordList(bool word_list_enabled) { + lang_mod_->SetWordList(word_list_enabled); + } + inline void SetPunc(bool punc_enabled) { + lang_mod_->SetPunc(punc_enabled); + } + inline void SetCaseSensitive(bool case_sensitive) { + char_classifier_->SetCaseSensitive(case_sensitive); + } + inline tesseract::Tesseract *TesseractObject() const { + return tess_obj_; + } + + // Returns the path of the data files + bool GetDataFilePath(string *path) const; + // Creates a CubeRecoContext object using a tesseract object. Data + // files are loaded via the tessdata_manager, and the tesseract + // unicharset is provided in order to map Cube's unicharset to + // Tesseract's in the case where the two unicharsets differ. + static CubeRecoContext *Create(Tesseract *tess_obj, + TessdataManager *tessdata_manager, + UNICHARSET *tess_unicharset); + + private: + bool loaded_; + string lang_; + CharSet *char_set_; + UNICHARSET *tess_unicharset_; + WordSizeModel *word_size_model_; + CharClassifier *char_classifier_; + CharBigrams *char_bigrams_; + WordUnigrams *word_unigrams_; + TuningParams *params_; + LangModel *lang_mod_; + Tesseract *tess_obj_; // CubeRecoContext does not own this pointer + bool size_normalization_; + bool noisy_input_; + + // Loads and initialized all the necessary components of a + // CubeRecoContext. See .cpp for more details. + bool Load(TessdataManager *tessdata_manager, + UNICHARSET *tess_unicharset); + }; +} + +#endif // CUBE_RECO_CONTEXT_H diff --git a/3rdparty/hgOCR/include/ccmain/cubeclassifier.cpp b/3rdparty/hgOCR/include/ccmain/cubeclassifier.cpp new file mode 100644 index 00000000..9bf28778 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/cubeclassifier.cpp @@ -0,0 +1,134 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: cubeclassifier.cpp +// Description: Cube implementation of a ShapeClassifier. +// Author: Ray Smith +// Created: Wed Nov 23 10:39:45 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "cubeclassifier.h" + +#include "char_altlist.h" +#include "char_set.h" +#include "cube_object.h" +#include "cube_reco_context.h" +#include "tessclassifier.h" +#include "tesseractclass.h" +#include "trainingsample.h" +#include "unicharset.h" + +namespace tesseract { + + CubeClassifier::CubeClassifier(tesseract::Tesseract* tesseract) + : cube_cntxt_(tesseract->GetCubeRecoContext()), + shape_table_(*tesseract->shape_table()) { + } + CubeClassifier::~CubeClassifier() { + } + + /// Classifies the given [training] sample, writing to results. + /// See ShapeClassifier for a full description. + int CubeClassifier::UnicharClassifySample( + const TrainingSample& sample, Pix* page_pix, int debug, + UNICHAR_ID keep_this, GenericVector* results) { + results->clear(); + if (page_pix == NULL) return 0; + + ASSERT_HOST(cube_cntxt_ != NULL); + const TBOX& char_box = sample.bounding_box(); + CubeObject* cube_obj = new tesseract::CubeObject( + cube_cntxt_, page_pix, char_box.left(), + pixGetHeight(page_pix) - char_box.top(), + char_box.width(), char_box.height()); + CharAltList* alt_list = cube_obj->RecognizeChar(); + if (alt_list != NULL) { + alt_list->Sort(); + CharSet* char_set = cube_cntxt_->CharacterSet(); + for (int i = 0; i < alt_list->AltCount(); ++i) { + // Convert cube representation to a shape_id. + int alt_id = alt_list->Alt(i); + int unichar_id = char_set->UnicharID(char_set->ClassString(alt_id)); + if (unichar_id >= 0) + results->push_back(UnicharRating(unichar_id, alt_list->AltProb(i))); + } + delete alt_list; + } + delete cube_obj; + return results->size(); + } + + /** Provides access to the ShapeTable that this classifier works with. */ + const ShapeTable* CubeClassifier::GetShapeTable() const { + return &shape_table_; + } + + CubeTessClassifier::CubeTessClassifier(tesseract::Tesseract* tesseract) + : cube_cntxt_(tesseract->GetCubeRecoContext()), + shape_table_(*tesseract->shape_table()), + pruner_(new TessClassifier(true, tesseract)) { + } + CubeTessClassifier::~CubeTessClassifier() { + delete pruner_; + } + + /// Classifies the given [training] sample, writing to results. + /// See ShapeClassifier for a full description. + int CubeTessClassifier::UnicharClassifySample( + const TrainingSample& sample, Pix* page_pix, int debug, + UNICHAR_ID keep_this, GenericVector* results) { + int num_results = pruner_->UnicharClassifySample(sample, page_pix, debug, + keep_this, results); + if (page_pix == NULL) return num_results; + + ASSERT_HOST(cube_cntxt_ != NULL); + const TBOX& char_box = sample.bounding_box(); + CubeObject* cube_obj = new tesseract::CubeObject( + cube_cntxt_, page_pix, char_box.left(), + pixGetHeight(page_pix) - char_box.top(), + char_box.width(), char_box.height()); + CharAltList* alt_list = cube_obj->RecognizeChar(); + CharSet* char_set = cube_cntxt_->CharacterSet(); + if (alt_list != NULL) { + for (int r = 0; r < num_results; ++r) { + // Get the best cube probability of the unichar in the result. + double best_prob = 0.0; + for (int i = 0; i < alt_list->AltCount(); ++i) { + int alt_id = alt_list->Alt(i); + int unichar_id = char_set->UnicharID(char_set->ClassString(alt_id)); + if (unichar_id == (*results)[r].unichar_id && + alt_list->AltProb(i) > best_prob) { + best_prob = alt_list->AltProb(i); + } + } + (*results)[r].rating = best_prob; + } + delete alt_list; + // Re-sort by rating. + results->sort(&UnicharRating::SortDescendingRating); + } + delete cube_obj; + return results->size(); + } + + /** Provides access to the ShapeTable that this classifier works with. */ + const ShapeTable* CubeTessClassifier::GetShapeTable() const { + return &shape_table_; + } + +} // namespace tesseract + + + diff --git a/3rdparty/hgOCR/include/ccmain/cubeclassifier.h b/3rdparty/hgOCR/include/ccmain/cubeclassifier.h new file mode 100644 index 00000000..81667acd --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/cubeclassifier.h @@ -0,0 +1,81 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: cubeclassifier.h +// Description: Cube implementation of a ShapeClassifier. +// Author: Ray Smith +// Created: Wed Nov 23 10:36:32 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef THIRD_PARTY_TESSERACT_CCMAIN_CUBECLASSIFIER_H_ +#define THIRD_PARTY_TESSERACT_CCMAIN_CUBECLASSIFIER_H_ + +#include "shapeclassifier.h" +#include "platform.h" + +namespace tesseract { + + class Classify; + class CubeRecoContext; + class ShapeTable; + class TessClassifier; + class Tesseract; + class TrainingSample; + struct UnicharRating; + + // Cube implementation of a ShapeClassifier. + class TESS_API CubeClassifier : public ShapeClassifier { + public: + explicit CubeClassifier(Tesseract* tesseract); + virtual ~CubeClassifier(); + + // Classifies the given [training] sample, writing to results. + // See ShapeClassifier for a full description. + virtual int UnicharClassifySample(const TrainingSample& sample, Pix* page_pix, + int debug, UNICHAR_ID keep_this, + GenericVector* results); + // Provides access to the ShapeTable that this classifier works with. + virtual const ShapeTable* GetShapeTable() const; + + private: + // Cube objects. + CubeRecoContext* cube_cntxt_; + const ShapeTable& shape_table_; + }; + + // Combination of Tesseract class pruner with scoring by cube. + class TESS_API CubeTessClassifier : public ShapeClassifier { + public: + explicit CubeTessClassifier(Tesseract* tesseract); + virtual ~CubeTessClassifier(); + + // Classifies the given [training] sample, writing to results. + // See ShapeClassifier for a full description. + virtual int UnicharClassifySample(const TrainingSample& sample, Pix* page_pix, + int debug, UNICHAR_ID keep_this, + GenericVector* results); + // Provides access to the ShapeTable that this classifier works with. + virtual const ShapeTable* GetShapeTable() const; + + private: + // Cube objects. + CubeRecoContext* cube_cntxt_; + const ShapeTable& shape_table_; + TessClassifier* pruner_; + }; + +} // namespace tesseract + +#endif /* THIRD_PARTY_TESSERACT_CCMAIN_CUBECLASSIFIER_H_ */ diff --git a/3rdparty/hgOCR/include/ccmain/docqual.cpp b/3rdparty/hgOCR/include/ccmain/docqual.cpp new file mode 100644 index 00000000..e6244b9e --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/docqual.cpp @@ -0,0 +1,1013 @@ +/****************************************************************** + * File: docqual.cpp (Formerly docqual.c) + * Description: Document Quality Metrics + * Author: Phil Cheatle + * Created: Mon May 9 11:27:28 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + +#include +#include "docqual.h" +#include "reject.h" +#include "tesscallback.h" +#include "tessvars.h" +#include "globals.h" +#include "tesseractclass.h" + +namespace tesseract { + + // A little class to provide the callbacks as we have no pre-bound args. + struct DocQualCallbacks { + explicit DocQualCallbacks(WERD_RES* word0) + : word(word0), match_count(0), accepted_match_count(0) {} + + void CountMatchingBlobs(int index) { + ++match_count; + } + + void CountAcceptedBlobs(int index) { + if (word->reject_map[index].accepted()) + ++accepted_match_count; + ++match_count; + } + + void AcceptIfGoodQuality(int index) { + if (word->reject_map[index].accept_if_good_quality()) + word->reject_map[index].setrej_quality_accept(); + } + + WERD_RES* word; + inT16 match_count; + inT16 accepted_match_count; + }; + + /************************************************************************* + * word_blob_quality() + * How many blobs in the box_word are identical to those of the inword? + * ASSUME blobs in both initial word and box_word are in ascending order of + * left hand blob edge. + *************************************************************************/ + inT16 Tesseract::word_blob_quality(WERD_RES *word, ROW *row) { + if (word->bln_boxes == NULL || + word->rebuild_word == NULL || word->rebuild_word->blobs.empty()) + return 0; + + DocQualCallbacks cb(word); + word->bln_boxes->ProcessMatchedBlobs( + *word->rebuild_word, + NewPermanentTessCallback(&cb, &DocQualCallbacks::CountMatchingBlobs)); + return cb.match_count; + } + + inT16 Tesseract::word_outline_errs(WERD_RES *word) { + inT16 i = 0; + inT16 err_count = 0; + + if (word->rebuild_word != NULL) { + for (int b = 0; b < word->rebuild_word->NumBlobs(); ++b) { + TBLOB* blob = word->rebuild_word->blobs[b]; + err_count += count_outline_errs(word->best_choice->unichar_string()[i], + blob->NumOutlines()); + i++; + } + } + return err_count; + } + + /************************************************************************* + * word_char_quality() + * Combination of blob quality and outline quality - how many good chars are + * there? - I.e chars which pass the blob AND outline tests. + *************************************************************************/ + void Tesseract::word_char_quality(WERD_RES *word, + ROW *row, + inT16 *match_count, + inT16 *accepted_match_count) { + if (word->bln_boxes == NULL || word->rebuild_word == NULL || + word->rebuild_word->blobs.empty()) { + *match_count = 0; + *accepted_match_count = 0; + return; + } + + DocQualCallbacks cb(word); + word->bln_boxes->ProcessMatchedBlobs( + *word->rebuild_word, + NewPermanentTessCallback(&cb, &DocQualCallbacks::CountAcceptedBlobs)); + *match_count = cb.match_count; + *accepted_match_count = cb.accepted_match_count; + } + + /************************************************************************* + * unrej_good_chs() + * Unreject POTENTIAL rejects if the blob passes the blob and outline checks + *************************************************************************/ + void Tesseract::unrej_good_chs(WERD_RES *word, ROW *row) { + if (word->bln_boxes == NULL || + word->rebuild_word == NULL || word->rebuild_word->blobs.empty()) + return; + + DocQualCallbacks cb(word); + word->bln_boxes->ProcessMatchedBlobs( + *word->rebuild_word, + NewPermanentTessCallback(&cb, &DocQualCallbacks::AcceptIfGoodQuality)); + } + + inT16 Tesseract::count_outline_errs(char c, inT16 outline_count) { + int expected_outline_count; + + if (STRING(outlines_odd).contains(c)) + return 0; // Don't use this char + else if (STRING(outlines_2).contains(c)) + expected_outline_count = 2; + else + expected_outline_count = 1; + return abs(outline_count - expected_outline_count); + } + + void Tesseract::quality_based_rejection(PAGE_RES_IT &page_res_it, + BOOL8 good_quality_doc) { + if ((tessedit_good_quality_unrej && good_quality_doc)) + unrej_good_quality_words(page_res_it); + doc_and_block_rejection(page_res_it, good_quality_doc); + if (unlv_tilde_crunching) { + tilde_crunch(page_res_it); + tilde_delete(page_res_it); + } + } + + /************************************************************************* + * unrej_good_quality_words() + * Accept potential rejects in words which pass the following checks: + * - Contains a potential reject + * - Word looks like a sensible alpha word. + * - Word segmentation is the same as the original image + * - All characters have the expected number of outlines + * NOTE - the rejection counts are recalculated after unrejection + * - CAN'T do it in a single pass without a bit of fiddling + * - keep it simple but inefficient + *************************************************************************/ + void Tesseract::unrej_good_quality_words( //unreject potential + PAGE_RES_IT &page_res_it) { + WERD_RES *word; + ROW_RES *current_row; + BLOCK_RES *current_block; + int i; + + page_res_it.restart_page(); + while (page_res_it.word() != NULL) { + check_debug_pt(page_res_it.word(), 100); + if (bland_unrej) { + word = page_res_it.word(); + for (i = 0; i < word->reject_map.length(); i++) { + if (word->reject_map[i].accept_if_good_quality()) + word->reject_map[i].setrej_quality_accept(); + } + page_res_it.forward(); + } + else if ((page_res_it.row()->char_count > 0) && + ((page_res_it.row()->rej_count / + (float)page_res_it.row()->char_count) <= + quality_rowrej_pc)) { + word = page_res_it.word(); + if (word->reject_map.quality_recoverable_rejects() && + (tessedit_unrej_any_wd || + acceptable_word_string(*word->uch_set, + word->best_choice->unichar_string().string(), + word->best_choice->unichar_lengths().string()) + != AC_UNACCEPTABLE)) { + unrej_good_chs(word, page_res_it.row()->row); + } + page_res_it.forward(); + } + else { + /* Skip to end of dodgy row */ + current_row = page_res_it.row(); + while ((page_res_it.word() != NULL) && + (page_res_it.row() == current_row)) + page_res_it.forward(); + } + check_debug_pt(page_res_it.word(), 110); + } + page_res_it.restart_page(); + page_res_it.page_res->char_count = 0; + page_res_it.page_res->rej_count = 0; + current_block = NULL; + current_row = NULL; + while (page_res_it.word() != NULL) { + if (current_block != page_res_it.block()) { + current_block = page_res_it.block(); + current_block->char_count = 0; + current_block->rej_count = 0; + } + if (current_row != page_res_it.row()) { + current_row = page_res_it.row(); + current_row->char_count = 0; + current_row->rej_count = 0; + current_row->whole_word_rej_count = 0; + } + page_res_it.rej_stat_word(); + page_res_it.forward(); + } + } + + + /************************************************************************* + * doc_and_block_rejection() + * + * If the page has too many rejects - reject all of it. + * If any block has too many rejects - reject all words in the block + *************************************************************************/ + + void Tesseract::doc_and_block_rejection( //reject big chunks + PAGE_RES_IT &page_res_it, + BOOL8 good_quality_doc) { + inT16 block_no = 0; + inT16 row_no = 0; + BLOCK_RES *current_block; + ROW_RES *current_row; + + BOOL8 rej_word; + BOOL8 prev_word_rejected; + inT16 char_quality = 0; + inT16 accepted_char_quality; + + if (page_res_it.page_res->rej_count * 100.0 / + page_res_it.page_res->char_count > tessedit_reject_doc_percent) { + reject_whole_page(page_res_it); + if (tessedit_debug_doc_rejection) { + tprintf("REJECT ALL #chars: %d #Rejects: %d; \n", + page_res_it.page_res->char_count, + page_res_it.page_res->rej_count); + } + } + else { + if (tessedit_debug_doc_rejection) { + tprintf("NO PAGE REJECTION #chars: %d # Rejects: %d; \n", + page_res_it.page_res->char_count, + page_res_it.page_res->rej_count); + } + + /* Walk blocks testing for block rejection */ + + page_res_it.restart_page(); + WERD_RES* word; + while ((word = page_res_it.word()) != NULL) { + current_block = page_res_it.block(); + block_no = current_block->block->index(); + if (current_block->char_count > 0 && + (current_block->rej_count * 100.0 / current_block->char_count) > + tessedit_reject_block_percent) { + if (tessedit_debug_block_rejection) { + tprintf("REJECTING BLOCK %d #chars: %d; #Rejects: %d\n", + block_no, current_block->char_count, + current_block->rej_count); + } + prev_word_rejected = FALSE; + while ((word = page_res_it.word()) != NULL && + (page_res_it.block() == current_block)) { + if (tessedit_preserve_blk_rej_perfect_wds) { + rej_word = word->reject_map.reject_count() > 0 || + word->reject_map.length() < tessedit_preserve_min_wd_len; + if (rej_word && tessedit_dont_blkrej_good_wds && + word->reject_map.length() >= tessedit_preserve_min_wd_len && + acceptable_word_string( + *word->uch_set, + word->best_choice->unichar_string().string(), + word->best_choice->unichar_lengths().string()) != + AC_UNACCEPTABLE) { + word_char_quality(word, page_res_it.row()->row, + &char_quality, + &accepted_char_quality); + rej_word = char_quality != word->reject_map.length(); + } + } + else { + rej_word = TRUE; + } + if (rej_word) { + /* + Reject spacing if both current and prev words are rejected. + NOTE - this is NOT restricted to FUZZY spaces. - When tried this + generated more space errors. + */ + if (tessedit_use_reject_spaces && + prev_word_rejected && + page_res_it.prev_row() == page_res_it.row() && + word->word->space() == 1) + word->reject_spaces = TRUE; + word->reject_map.rej_word_block_rej(); + } + prev_word_rejected = rej_word; + page_res_it.forward(); + } + } + else { + if (tessedit_debug_block_rejection) { + tprintf("NOT REJECTING BLOCK %d #chars: %d # Rejects: %d; \n", + block_no, page_res_it.block()->char_count, + page_res_it.block()->rej_count); + } + + /* Walk rows in block testing for row rejection */ + row_no = 0; + while (page_res_it.word() != NULL && + page_res_it.block() == current_block) { + current_row = page_res_it.row(); + row_no++; + /* Reject whole row if: + fraction of chars on row which are rejected exceed a limit AND + fraction rejects which occur in WHOLE WERD rejects is LESS THAN a + limit + */ + if (current_row->char_count > 0 && + (current_row->rej_count * 100.0 / current_row->char_count) > + tessedit_reject_row_percent && + (current_row->whole_word_rej_count * 100.0 / + current_row->rej_count) < + tessedit_whole_wd_rej_row_percent) { + if (tessedit_debug_block_rejection) { + tprintf("REJECTING ROW %d #chars: %d; #Rejects: %d\n", + row_no, current_row->char_count, + current_row->rej_count); + } + prev_word_rejected = FALSE; + while ((word = page_res_it.word()) != NULL && + page_res_it.row() == current_row) { + /* Preserve words on good docs unless they are mostly rejected*/ + if (!tessedit_row_rej_good_docs && good_quality_doc) { + rej_word = word->reject_map.reject_count() / + static_cast(word->reject_map.length()) > + tessedit_good_doc_still_rowrej_wd; + } + else if (tessedit_preserve_row_rej_perfect_wds) { + /* Preserve perfect words anyway */ + rej_word = word->reject_map.reject_count() > 0 || + word->reject_map.length() < tessedit_preserve_min_wd_len; + if (rej_word && tessedit_dont_rowrej_good_wds && + word->reject_map.length() >= tessedit_preserve_min_wd_len && + acceptable_word_string(*word->uch_set, + word->best_choice->unichar_string().string(), + word->best_choice->unichar_lengths().string()) != + AC_UNACCEPTABLE) { + word_char_quality(word, page_res_it.row()->row, + &char_quality, + &accepted_char_quality); + rej_word = char_quality != word->reject_map.length(); + } + } + else { + rej_word = TRUE; + } + if (rej_word) { + /* + Reject spacing if both current and prev words are rejected. + NOTE - this is NOT restricted to FUZZY spaces. - When tried + this generated more space errors. + */ + if (tessedit_use_reject_spaces && + prev_word_rejected && + page_res_it.prev_row() == page_res_it.row() && + word->word->space() == 1) + word->reject_spaces = TRUE; + word->reject_map.rej_word_row_rej(); + } + prev_word_rejected = rej_word; + page_res_it.forward(); + } + } + else { + if (tessedit_debug_block_rejection) { + tprintf("NOT REJECTING ROW %d #chars: %d # Rejects: %d; \n", + row_no, current_row->char_count, current_row->rej_count); + } + while (page_res_it.word() != NULL && + page_res_it.row() == current_row) + page_res_it.forward(); + } + } + } + } + } + } + +} // namespace tesseract + +/************************************************************************* + * reject_whole_page() + * Don't believe any of it - set the reject map to 00..00 in all words + * + *************************************************************************/ + +void reject_whole_page(PAGE_RES_IT &page_res_it) { + page_res_it.restart_page(); + while (page_res_it.word() != NULL) { + page_res_it.word()->reject_map.rej_word_doc_rej(); + page_res_it.forward(); + } + //whole page is rejected + page_res_it.page_res->rejected = TRUE; +} + +namespace tesseract { + void Tesseract::tilde_crunch(PAGE_RES_IT &page_res_it) { + WERD_RES *word; + GARBAGE_LEVEL garbage_level; + PAGE_RES_IT copy_it; + BOOL8 prev_potential_marked = FALSE; + BOOL8 found_terrible_word = FALSE; + BOOL8 ok_dict_word; + + page_res_it.restart_page(); + while (page_res_it.word() != NULL) { + POLY_BLOCK* pb = page_res_it.block()->block->poly_block(); + if (pb != NULL && !pb->IsText()) { + page_res_it.forward(); + continue; + } + word = page_res_it.word(); + + if (crunch_early_convert_bad_unlv_chs) + convert_bad_unlv_chs(word); + + if (crunch_early_merge_tess_fails) + word->merge_tess_fails(); + + if (word->reject_map.accept_count() != 0) { + found_terrible_word = FALSE; + //Forget earlier potential crunches + prev_potential_marked = FALSE; + } + else { + ok_dict_word = safe_dict_word(word); + garbage_level = garbage_word(word, ok_dict_word); + + if ((garbage_level != G_NEVER_CRUNCH) && + (terrible_word_crunch(word, garbage_level))) { + if (crunch_debug > 0) { + tprintf("T CRUNCHING: \"%s\"\n", + word->best_choice->unichar_string().string()); + } + word->unlv_crunch_mode = CR_KEEP_SPACE; + if (prev_potential_marked) { + while (copy_it.word() != word) { + if (crunch_debug > 0) { + tprintf("P1 CRUNCHING: \"%s\"\n", + copy_it.word()->best_choice->unichar_string().string()); + } + copy_it.word()->unlv_crunch_mode = CR_KEEP_SPACE; + copy_it.forward(); + } + prev_potential_marked = FALSE; + } + found_terrible_word = TRUE; + } + else if ((garbage_level != G_NEVER_CRUNCH) && + (potential_word_crunch(word, + garbage_level, ok_dict_word))) { + if (found_terrible_word) { + if (crunch_debug > 0) { + tprintf("P2 CRUNCHING: \"%s\"\n", + word->best_choice->unichar_string().string()); + } + word->unlv_crunch_mode = CR_KEEP_SPACE; + } + else if (!prev_potential_marked) { + copy_it = page_res_it; + prev_potential_marked = TRUE; + if (crunch_debug > 1) { + tprintf("P3 CRUNCHING: \"%s\"\n", + word->best_choice->unichar_string().string()); + } + } + } + else { + found_terrible_word = FALSE; + //Forget earlier potential crunches + prev_potential_marked = FALSE; + if (crunch_debug > 2) { + tprintf("NO CRUNCH: \"%s\"\n", + word->best_choice->unichar_string().string()); + } + } + } + page_res_it.forward(); + } + } + + + BOOL8 Tesseract::terrible_word_crunch(WERD_RES *word, + GARBAGE_LEVEL garbage_level) { + float rating_per_ch; + int adjusted_len; + int crunch_mode = 0; + + if ((word->best_choice->unichar_string().length() == 0) || + (strspn(word->best_choice->unichar_string().string(), " ") == + word->best_choice->unichar_string().length())) + crunch_mode = 1; + else { + adjusted_len = word->reject_map.length(); + if (adjusted_len > crunch_rating_max) + adjusted_len = crunch_rating_max; + rating_per_ch = word->best_choice->rating() / adjusted_len; + + if (rating_per_ch > crunch_terrible_rating) + crunch_mode = 2; + else if (crunch_terrible_garbage && (garbage_level == G_TERRIBLE)) + crunch_mode = 3; + else if ((word->best_choice->certainty() < crunch_poor_garbage_cert) && + (garbage_level != G_OK)) + crunch_mode = 4; + else if ((rating_per_ch > crunch_poor_garbage_rate) && + (garbage_level != G_OK)) + crunch_mode = 5; + } + if (crunch_mode > 0) { + if (crunch_debug > 2) { + tprintf("Terrible_word_crunch (%d) on \"%s\"\n", + crunch_mode, word->best_choice->unichar_string().string()); + } + return TRUE; + } + else + return FALSE; + } + + BOOL8 Tesseract::potential_word_crunch(WERD_RES *word, + GARBAGE_LEVEL garbage_level, + BOOL8 ok_dict_word) { + float rating_per_ch; + int adjusted_len; + const char *str = word->best_choice->unichar_string().string(); + const char *lengths = word->best_choice->unichar_lengths().string(); + BOOL8 word_crunchable; + int poor_indicator_count = 0; + + word_crunchable = !crunch_leave_accept_strings || + word->reject_map.length() < 3 || + (acceptable_word_string(*word->uch_set, + str, lengths) == AC_UNACCEPTABLE && + !ok_dict_word); + + adjusted_len = word->reject_map.length(); + if (adjusted_len > 10) + adjusted_len = 10; + rating_per_ch = word->best_choice->rating() / adjusted_len; + + if (rating_per_ch > crunch_pot_poor_rate) { + if (crunch_debug > 2) { + tprintf("Potential poor rating on \"%s\"\n", + word->best_choice->unichar_string().string()); + } + poor_indicator_count++; + } + + if (word_crunchable && + word->best_choice->certainty() < crunch_pot_poor_cert) { + if (crunch_debug > 2) { + tprintf("Potential poor cert on \"%s\"\n", + word->best_choice->unichar_string().string()); + } + poor_indicator_count++; + } + + if (garbage_level != G_OK) { + if (crunch_debug > 2) { + tprintf("Potential garbage on \"%s\"\n", + word->best_choice->unichar_string().string()); + } + poor_indicator_count++; + } + return poor_indicator_count >= crunch_pot_indicators; + } + + void Tesseract::tilde_delete(PAGE_RES_IT &page_res_it) { + WERD_RES *word; + PAGE_RES_IT copy_it; + BOOL8 deleting_from_bol = FALSE; + BOOL8 marked_delete_point = FALSE; + inT16 debug_delete_mode; + CRUNCH_MODE delete_mode; + inT16 x_debug_delete_mode; + CRUNCH_MODE x_delete_mode; + + page_res_it.restart_page(); + while (page_res_it.word() != NULL) { + word = page_res_it.word(); + + delete_mode = word_deletable(word, debug_delete_mode); + if (delete_mode != CR_NONE) { + if (word->word->flag(W_BOL) || deleting_from_bol) { + if (crunch_debug > 0) { + tprintf("BOL CRUNCH DELETING(%d): \"%s\"\n", + debug_delete_mode, + word->best_choice->unichar_string().string()); + } + word->unlv_crunch_mode = delete_mode; + deleting_from_bol = TRUE; + } + else if (word->word->flag(W_EOL)) { + if (marked_delete_point) { + while (copy_it.word() != word) { + x_delete_mode = word_deletable(copy_it.word(), + x_debug_delete_mode); + if (crunch_debug > 0) { + tprintf("EOL CRUNCH DELETING(%d): \"%s\"\n", + x_debug_delete_mode, + copy_it.word()->best_choice->unichar_string().string()); + } + copy_it.word()->unlv_crunch_mode = x_delete_mode; + copy_it.forward(); + } + } + if (crunch_debug > 0) { + tprintf("EOL CRUNCH DELETING(%d): \"%s\"\n", + debug_delete_mode, + word->best_choice->unichar_string().string()); + } + word->unlv_crunch_mode = delete_mode; + deleting_from_bol = FALSE; + marked_delete_point = FALSE; + } + else { + if (!marked_delete_point) { + copy_it = page_res_it; + marked_delete_point = TRUE; + } + } + } + else { + deleting_from_bol = FALSE; + //Forget earlier potential crunches + marked_delete_point = FALSE; + } + /* + The following step has been left till now as the tess fails are used to + determine if the word is deletable. + */ + if (!crunch_early_merge_tess_fails) + word->merge_tess_fails(); + page_res_it.forward(); + } + } + + + void Tesseract::convert_bad_unlv_chs(WERD_RES *word_res) { + int i; + UNICHAR_ID unichar_dash = word_res->uch_set->unichar_to_id("-"); + UNICHAR_ID unichar_space = word_res->uch_set->unichar_to_id(" "); + UNICHAR_ID unichar_tilde = word_res->uch_set->unichar_to_id("~"); + UNICHAR_ID unichar_pow = word_res->uch_set->unichar_to_id("^"); + for (i = 0; i < word_res->reject_map.length(); ++i) { + if (word_res->best_choice->unichar_id(i) == unichar_tilde) { + word_res->best_choice->set_unichar_id(unichar_dash, i); + if (word_res->reject_map[i].accepted()) + word_res->reject_map[i].setrej_unlv_rej(); + } + if (word_res->best_choice->unichar_id(i) == unichar_pow) { + word_res->best_choice->set_unichar_id(unichar_space, i); + if (word_res->reject_map[i].accepted()) + word_res->reject_map[i].setrej_unlv_rej(); + } + } + } + + GARBAGE_LEVEL Tesseract::garbage_word(WERD_RES *word, BOOL8 ok_dict_word) { + enum STATES + { + JUNK, + FIRST_UPPER, + FIRST_LOWER, + FIRST_NUM, + SUBSEQUENT_UPPER, + SUBSEQUENT_LOWER, + SUBSEQUENT_NUM + }; + const char *str = word->best_choice->unichar_string().string(); + const char *lengths = word->best_choice->unichar_lengths().string(); + STATES state = JUNK; + int len = 0; + int isolated_digits = 0; + int isolated_alphas = 0; + int bad_char_count = 0; + int tess_rejs = 0; + int dodgy_chars = 0; + int ok_chars; + UNICHAR_ID last_char = -1; + int alpha_repetition_count = 0; + int longest_alpha_repetition_count = 0; + int longest_lower_run_len = 0; + int lower_string_count = 0; + int longest_upper_run_len = 0; + int upper_string_count = 0; + int total_alpha_count = 0; + int total_digit_count = 0; + + for (; *str != '\0'; str += *(lengths++)) { + len++; + if (word->uch_set->get_isupper(str, *lengths)) { + total_alpha_count++; + switch (state) { + case SUBSEQUENT_UPPER: + case FIRST_UPPER: + state = SUBSEQUENT_UPPER; + upper_string_count++; + if (longest_upper_run_len < upper_string_count) + longest_upper_run_len = upper_string_count; + if (last_char == word->uch_set->unichar_to_id(str, *lengths)) { + alpha_repetition_count++; + if (longest_alpha_repetition_count < alpha_repetition_count) { + longest_alpha_repetition_count = alpha_repetition_count; + } + } + else { + last_char = word->uch_set->unichar_to_id(str, *lengths); + alpha_repetition_count = 1; + } + break; + case FIRST_NUM: + isolated_digits++; + default: + state = FIRST_UPPER; + last_char = word->uch_set->unichar_to_id(str, *lengths); + alpha_repetition_count = 1; + upper_string_count = 1; + break; + } + } + else if (word->uch_set->get_islower(str, *lengths)) { + total_alpha_count++; + switch (state) { + case SUBSEQUENT_LOWER: + case FIRST_LOWER: + state = SUBSEQUENT_LOWER; + lower_string_count++; + if (longest_lower_run_len < lower_string_count) + longest_lower_run_len = lower_string_count; + if (last_char == word->uch_set->unichar_to_id(str, *lengths)) { + alpha_repetition_count++; + if (longest_alpha_repetition_count < alpha_repetition_count) { + longest_alpha_repetition_count = alpha_repetition_count; + } + } + else { + last_char = word->uch_set->unichar_to_id(str, *lengths); + alpha_repetition_count = 1; + } + break; + case FIRST_NUM: + isolated_digits++; + default: + state = FIRST_LOWER; + last_char = word->uch_set->unichar_to_id(str, *lengths); + alpha_repetition_count = 1; + lower_string_count = 1; + break; + } + } + else if (word->uch_set->get_isdigit(str, *lengths)) { + total_digit_count++; + switch (state) { + case FIRST_NUM: + state = SUBSEQUENT_NUM; + case SUBSEQUENT_NUM: + break; + case FIRST_UPPER: + case FIRST_LOWER: + isolated_alphas++; + default: + state = FIRST_NUM; + break; + } + } + else { + if (*lengths == 1 && *str == ' ') + tess_rejs++; + else + bad_char_count++; + switch (state) { + case FIRST_NUM: + isolated_digits++; + break; + case FIRST_UPPER: + case FIRST_LOWER: + isolated_alphas++; + default: + break; + } + state = JUNK; + } + } + + switch (state) { + case FIRST_NUM: + isolated_digits++; + break; + case FIRST_UPPER: + case FIRST_LOWER: + isolated_alphas++; + default: + break; + } + + if (crunch_include_numerals) { + total_alpha_count += total_digit_count - isolated_digits; + } + + if (crunch_leave_ok_strings && len >= 4 && + 2 * (total_alpha_count - isolated_alphas) > len && + longest_alpha_repetition_count < crunch_long_repetitions) { + if ((crunch_accept_ok && + acceptable_word_string(*word->uch_set, str, lengths) != + AC_UNACCEPTABLE) || + longest_lower_run_len > crunch_leave_lc_strings || + longest_upper_run_len > crunch_leave_uc_strings) + return G_NEVER_CRUNCH; + } + if (word->reject_map.length() > 1 && + strpbrk(str, " ") == NULL && + (word->best_choice->permuter() == SYSTEM_DAWG_PERM || + word->best_choice->permuter() == FREQ_DAWG_PERM || + word->best_choice->permuter() == USER_DAWG_PERM || + word->best_choice->permuter() == NUMBER_PERM || + acceptable_word_string(*word->uch_set, str, lengths) != + AC_UNACCEPTABLE || ok_dict_word)) + return G_OK; + + ok_chars = len - bad_char_count - isolated_digits - + isolated_alphas - tess_rejs; + + if (crunch_debug > 3) { + tprintf("garbage_word: \"%s\"\n", + word->best_choice->unichar_string().string()); + tprintf("LEN: %d bad: %d iso_N: %d iso_A: %d rej: %d\n", + len, + bad_char_count, isolated_digits, isolated_alphas, tess_rejs); + } + if (bad_char_count == 0 && + tess_rejs == 0 && + (len > isolated_digits + isolated_alphas || len <= 2)) + return G_OK; + + if (tess_rejs > ok_chars || + (tess_rejs > 0 && (bad_char_count + tess_rejs) * 2 > len)) + return G_TERRIBLE; + + if (len > 4) { + dodgy_chars = 2 * tess_rejs + bad_char_count + isolated_digits + + isolated_alphas; + if (dodgy_chars > 5 || (dodgy_chars / (float)len) > 0.5) + return G_DODGY; + else + return G_OK; + } + else { + dodgy_chars = 2 * tess_rejs + bad_char_count; + if ((len == 4 && dodgy_chars > 2) || + (len == 3 && dodgy_chars > 2) || dodgy_chars >= len) + return G_DODGY; + else + return G_OK; + } + } + + + /************************************************************************* + * word_deletable() + * DELETE WERDS AT ENDS OF ROWS IF + * Word is crunched && + * ( string length = 0 OR + * > 50% of chars are "|" (before merging) OR + * certainty < -10 OR + * rating /char > 60 OR + * TOP of word is more than 0.5 xht BELOW baseline OR + * BOTTOM of word is more than 0.5 xht ABOVE xht OR + * length of word < 3xht OR + * height of word < 0.7 xht OR + * height of word > 3.0 xht OR + * >75% of the outline BBs have longest dimension < 0.5xht + *************************************************************************/ + + CRUNCH_MODE Tesseract::word_deletable(WERD_RES *word, inT16 &delete_mode) { + int word_len = word->reject_map.length(); + float rating_per_ch; + TBOX box; //BB of word + + if (word->unlv_crunch_mode == CR_NONE) { + delete_mode = 0; + return CR_NONE; + } + + if (word_len == 0) { + delete_mode = 1; + return CR_DELETE; + } + + if (word->rebuild_word != NULL) { + // Cube leaves rebuild_word NULL. + box = word->rebuild_word->bounding_box(); + if (box.height() < crunch_del_min_ht * kBlnXHeight) { + delete_mode = 4; + return CR_DELETE; + } + + if (noise_outlines(word->rebuild_word)) { + delete_mode = 5; + return CR_DELETE; + } + } + + if ((failure_count(word) * 1.5) > word_len) { + delete_mode = 2; + return CR_LOOSE_SPACE; + } + + if (word->best_choice->certainty() < crunch_del_cert) { + delete_mode = 7; + return CR_LOOSE_SPACE; + } + + rating_per_ch = word->best_choice->rating() / word_len; + + if (rating_per_ch > crunch_del_rating) { + delete_mode = 8; + return CR_LOOSE_SPACE; + } + + if (box.top() < kBlnBaselineOffset - crunch_del_low_word * kBlnXHeight) { + delete_mode = 9; + return CR_LOOSE_SPACE; + } + + if (box.bottom() > + kBlnBaselineOffset + crunch_del_high_word * kBlnXHeight) { + delete_mode = 10; + return CR_LOOSE_SPACE; + } + + if (box.height() > crunch_del_max_ht * kBlnXHeight) { + delete_mode = 11; + return CR_LOOSE_SPACE; + } + + if (box.width() < crunch_del_min_width * kBlnXHeight) { + delete_mode = 3; + return CR_LOOSE_SPACE; + } + + delete_mode = 0; + return CR_NONE; + } + + inT16 Tesseract::failure_count(WERD_RES *word) { + const char *str = word->best_choice->unichar_string().string(); + int tess_rejs = 0; + + for (; *str != '\0'; str++) { + if (*str == ' ') + tess_rejs++; + } + return tess_rejs; + } + + + BOOL8 Tesseract::noise_outlines(TWERD *word) { + TBOX box; // BB of outline + inT16 outline_count = 0; + inT16 small_outline_count = 0; + inT16 max_dimension; + float small_limit = kBlnXHeight * crunch_small_outlines_size; + + for (int b = 0; b < word->NumBlobs(); ++b) { + TBLOB* blob = word->blobs[b]; + for (TESSLINE* ol = blob->outlines; ol != NULL; ol = ol->next) { + outline_count++; + box = ol->bounding_box(); + if (box.height() > box.width()) + max_dimension = box.height(); + else + max_dimension = box.width(); + if (max_dimension < small_limit) + small_outline_count++; + } + } + return small_outline_count >= outline_count; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/docqual.h b/3rdparty/hgOCR/include/ccmain/docqual.h new file mode 100644 index 00000000..f2df9b24 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/docqual.h @@ -0,0 +1,35 @@ +/****************************************************************** + * File: docqual.h (Formerly docqual.h) + * Description: Document Quality Metrics + * Author: Phil Cheatle + * Created: Mon May 9 11:27:28 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef DOCQUAL_H +#define DOCQUAL_H + +#include "control.h" + +enum GARBAGE_LEVEL +{ + G_NEVER_CRUNCH, + G_OK, + G_DODGY, + G_TERRIBLE +}; + +inT16 word_blob_quality(WERD_RES *word, ROW *row); +void reject_whole_page(PAGE_RES_IT &page_res_it); +#endif diff --git a/3rdparty/hgOCR/include/ccmain/equationdetect.cpp b/3rdparty/hgOCR/include/ccmain/equationdetect.cpp new file mode 100644 index 00000000..c165bb3c --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/equationdetect.cpp @@ -0,0 +1,1550 @@ +/////////////////////////////////////////////////////////////////////// +// File: equationdetect.cpp +// Description: Helper classes to detect equations. +// Author: Zongyi (Joe) Liu (joeliu@google.com) +// Created: Fri Aug 31 11:13:01 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#include +#include +#endif + +#ifdef __MINGW32__ +#include +#endif + +#include + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "equationdetect.h" + +#include "bbgrid.h" +#include "classify.h" +#include "colpartition.h" +#include "colpartitiongrid.h" +#include "colpartitionset.h" +#include "helpers.h" +#include "ratngs.h" +#include "tesseractclass.h" + +// Config variables. +BOOL_VAR(equationdetect_save_bi_image, false, "Save input bi image"); +BOOL_VAR(equationdetect_save_spt_image, false, "Save special character image"); +BOOL_VAR(equationdetect_save_seed_image, false, "Save the seed image"); +BOOL_VAR(equationdetect_save_merged_image, false, "Save the merged image"); + +namespace tesseract { + + /////////////////////////////////////////////////////////////////////////// + // Utility ColParition sort functions. + /////////////////////////////////////////////////////////////////////////// + static int SortCPByTopReverse(const void* p1, const void* p2) { + const ColPartition* cp1 = *reinterpret_cast(p1); + const ColPartition* cp2 = *reinterpret_cast(p2); + ASSERT_HOST(cp1 != NULL && cp2 != NULL); + const TBOX &box1(cp1->bounding_box()), &box2(cp2->bounding_box()); + return box2.top() - box1.top(); + } + + static int SortCPByBottom(const void* p1, const void* p2) { + const ColPartition* cp1 = *reinterpret_cast(p1); + const ColPartition* cp2 = *reinterpret_cast(p2); + ASSERT_HOST(cp1 != NULL && cp2 != NULL); + const TBOX &box1(cp1->bounding_box()), &box2(cp2->bounding_box()); + return box1.bottom() - box2.bottom(); + } + + static int SortCPByHeight(const void* p1, const void* p2) { + const ColPartition* cp1 = *reinterpret_cast(p1); + const ColPartition* cp2 = *reinterpret_cast(p2); + ASSERT_HOST(cp1 != NULL && cp2 != NULL); + const TBOX &box1(cp1->bounding_box()), &box2(cp2->bounding_box()); + return box1.height() - box2.height(); + } + + // TODO(joeliu): we may want to parameterize these constants. + const float kMathDigitDensityTh1 = 0.25; + const float kMathDigitDensityTh2 = 0.1; + const float kMathItalicDensityTh = 0.5; + const float kUnclearDensityTh = 0.25; + const int kSeedBlobsCountTh = 10; + const int kLeftIndentAlignmentCountTh = 1; + + // Returns true if PolyBlockType is of text type or equation type. + inline bool IsTextOrEquationType(PolyBlockType type) { + return PTIsTextType(type) || type == PT_EQUATION; + } + + inline bool IsLeftIndented(const EquationDetect::IndentType type) { + return type == EquationDetect::LEFT_INDENT || + type == EquationDetect::BOTH_INDENT; + } + + inline bool IsRightIndented(const EquationDetect::IndentType type) { + return type == EquationDetect::RIGHT_INDENT || + type == EquationDetect::BOTH_INDENT; + } + + EquationDetect::EquationDetect(const char* equ_datapath, + const char* equ_name) { + const char* default_name = "equ"; + if (equ_name == NULL) { + equ_name = default_name; + } + lang_tesseract_ = NULL; + resolution_ = 0; + page_count_ = 0; + + if (equ_tesseract_.init_tesseract(equ_datapath, equ_name, + OEM_TESSERACT_ONLY)) { + tprintf("Warning: equation region detection requested," + " but %s failed to load from %s\n", equ_name, equ_datapath); + } + + cps_super_bbox_ = NULL; + } + + EquationDetect::~EquationDetect() { + delete(cps_super_bbox_); + } + + void EquationDetect::SetLangTesseract(Tesseract* lang_tesseract) { + lang_tesseract_ = lang_tesseract; + } + + void EquationDetect::SetResolution(const int resolution) { + resolution_ = resolution; + } + + int EquationDetect::LabelSpecialText(TO_BLOCK* to_block) { + if (to_block == NULL) { + tprintf("Warning: input to_block is NULL!\n"); + return -1; + } + + GenericVector blob_lists; + blob_lists.push_back(&(to_block->blobs)); + blob_lists.push_back(&(to_block->large_blobs)); + for (int i = 0; i < blob_lists.size(); ++i) { + BLOBNBOX_IT bbox_it(blob_lists[i]); + for (bbox_it.mark_cycle_pt(); !bbox_it.cycled_list(); + bbox_it.forward()) { + bbox_it.data()->set_special_text_type(BSTT_NONE); + } + } + + return 0; + } + + void EquationDetect::IdentifySpecialText( + BLOBNBOX *blobnbox, const int height_th) { + ASSERT_HOST(blobnbox != NULL); + if (blobnbox->bounding_box().height() < height_th && height_th > 0) { + // For small blob, we simply set to BSTT_NONE. + blobnbox->set_special_text_type(BSTT_NONE); + return; + } + + BLOB_CHOICE_LIST ratings_equ, ratings_lang; + C_BLOB* blob = blobnbox->cblob(); + // TODO(joeliu/rays) Fix this. We may have to normalize separately for + // each classifier here, as they may require different PolygonalCopy. + TBLOB* tblob = TBLOB::PolygonalCopy(false, blob); + const TBOX& box = tblob->bounding_box(); + + // Normalize the blob. Set the origin to the place we want to be the + // bottom-middle, and scaling is to make the height the x-height. + float scaling = static_cast(kBlnXHeight) / box.height(); + float x_orig = (box.left() + box.right()) / 2.0f, y_orig = box.bottom(); + TBLOB* normed_blob = new TBLOB(*tblob); + normed_blob->Normalize(NULL, NULL, NULL, x_orig, y_orig, scaling, scaling, + 0.0f, static_cast(kBlnBaselineOffset), + false, NULL); + equ_tesseract_.AdaptiveClassifier(normed_blob, &ratings_equ); + lang_tesseract_->AdaptiveClassifier(normed_blob, &ratings_lang); + delete normed_blob; + delete tblob; + + // Get the best choice from ratings_lang and rating_equ. As the choice in the + // list has already been sorted by the certainty, we simply use the first + // choice. + BLOB_CHOICE *lang_choice = NULL, *equ_choice = NULL; + if (ratings_lang.length() > 0) { + BLOB_CHOICE_IT choice_it(&ratings_lang); + lang_choice = choice_it.data(); + } + if (ratings_equ.length() > 0) { + BLOB_CHOICE_IT choice_it(&ratings_equ); + equ_choice = choice_it.data(); + } + + float lang_score = lang_choice ? lang_choice->certainty() : -FLT_MAX; + float equ_score = equ_choice ? equ_choice->certainty() : -FLT_MAX; + + const float kConfScoreTh = -5.0f, kConfDiffTh = 1.8; + // The scores here are negative, so the max/min == fabs(min/max). + // float ratio = fmax(lang_score, equ_score) / fmin(lang_score, equ_score); + float diff = fabs(lang_score - equ_score); + BlobSpecialTextType type = BSTT_NONE; + + // Classification. + if (fmax(lang_score, equ_score) < kConfScoreTh) { + // If both score are very small, then mark it as unclear. + type = BSTT_UNCLEAR; + } + else if (diff > kConfDiffTh && equ_score > lang_score) { + // If equ_score is significantly higher, then we classify this character as + // math symbol. + type = BSTT_MATH; + } + else if (lang_choice) { + // For other cases: lang_score is similar or significantly higher. + type = EstimateTypeForUnichar( + lang_tesseract_->unicharset, lang_choice->unichar_id()); + } + + if (type == BSTT_NONE && lang_tesseract_->get_fontinfo_table().get( + lang_choice->fontinfo_id()).is_italic()) { + // For text symbol, we still check if it is italic. + blobnbox->set_special_text_type(BSTT_ITALIC); + } + else { + blobnbox->set_special_text_type(type); + } + } + + BlobSpecialTextType EquationDetect::EstimateTypeForUnichar( + const UNICHARSET& unicharset, const UNICHAR_ID id) const { + STRING s = unicharset.id_to_unichar(id); + if (unicharset.get_isalpha(id)) { + return BSTT_NONE; + } + + if (unicharset.get_ispunctuation(id)) { + // Exclude some special texts that are likely to be confused as math symbol. + static GenericVector ids_to_exclude; + if (ids_to_exclude.empty()) { + static const STRING kCharsToEx[] = { "'", "`", "\"", "\\", ",", ".", + "", "", "", "", "", "", "" }; + int i = 0; + while (kCharsToEx[i] != "") { + ids_to_exclude.push_back( + unicharset.unichar_to_id(kCharsToEx[i++].string())); + } + ids_to_exclude.sort(); + } + return ids_to_exclude.bool_binary_search(id) ? BSTT_NONE : BSTT_MATH; + } + + // Check if it is digit. In addition to the isdigit attribute, we also check + // if this character belongs to those likely to be confused with a digit. + static const STRING kDigitsChars = "|"; + if (unicharset.get_isdigit(id) || + (s.length() == 1 && kDigitsChars.contains(s[0]))) { + return BSTT_DIGIT; + } + else { + return BSTT_MATH; + } + } + + void EquationDetect::IdentifySpecialText() { + // Set configuration for Tesseract::AdaptiveClassifier. + equ_tesseract_.tess_cn_matching.set_value(true); // turn it on + equ_tesseract_.tess_bn_matching.set_value(false); + + // Set the multiplier to zero for lang_tesseract_ to improve the accuracy. + int classify_class_pruner = lang_tesseract_->classify_class_pruner_multiplier; + int classify_integer_matcher = + lang_tesseract_->classify_integer_matcher_multiplier; + lang_tesseract_->classify_class_pruner_multiplier.set_value(0); + lang_tesseract_->classify_integer_matcher_multiplier.set_value(0); + + ColPartitionGridSearch gsearch(part_grid_); + ColPartition *part = NULL; + gsearch.StartFullSearch(); + while ((part = gsearch.NextFullSearch()) != NULL) { + if (!IsTextOrEquationType(part->type())) { + continue; + } + IdentifyBlobsToSkip(part); + BLOBNBOX_C_IT bbox_it(part->boxes()); + // Compute the height threshold. + GenericVector blob_heights; + for (bbox_it.mark_cycle_pt(); !bbox_it.cycled_list(); + bbox_it.forward()) { + if (bbox_it.data()->special_text_type() != BSTT_SKIP) { + blob_heights.push_back(bbox_it.data()->bounding_box().height()); + } + } + blob_heights.sort(); + int height_th = blob_heights[blob_heights.size() / 2] / 3 * 2; + for (bbox_it.mark_cycle_pt(); !bbox_it.cycled_list(); + bbox_it.forward()) { + if (bbox_it.data()->special_text_type() != BSTT_SKIP) { + IdentifySpecialText(bbox_it.data(), height_th); + } + } + } + + // Set the multiplier values back. + lang_tesseract_->classify_class_pruner_multiplier.set_value( + classify_class_pruner); + lang_tesseract_->classify_integer_matcher_multiplier.set_value( + classify_integer_matcher); + + if (equationdetect_save_spt_image) { // For debug. + STRING outfile; + GetOutputTiffName("_spt", &outfile); + PaintSpecialTexts(outfile); + } + } + + void EquationDetect::IdentifyBlobsToSkip(ColPartition* part) { + ASSERT_HOST(part); + BLOBNBOX_C_IT blob_it(part->boxes()); + + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + // At this moment, no blob should have been joined. + ASSERT_HOST(!blob_it.data()->joined_to_prev()); + } + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + BLOBNBOX* blob = blob_it.data(); + if (blob->joined_to_prev() || blob->special_text_type() == BSTT_SKIP) { + continue; + } + TBOX blob_box = blob->bounding_box(); + + // Search if any blob can be merged into blob. If found, then we mark all + // these blobs as BSTT_SKIP. + BLOBNBOX_C_IT blob_it2 = blob_it; + bool found = false; + while (!blob_it2.at_last()) { + BLOBNBOX* nextblob = blob_it2.forward(); + const TBOX& nextblob_box = nextblob->bounding_box(); + if (nextblob_box.left() >= blob_box.right()) { + break; + } + const float kWidthR = 0.4, kHeightR = 0.3; + bool xoverlap = blob_box.major_x_overlap(nextblob_box), + yoverlap = blob_box.y_overlap(nextblob_box); + float widthR = static_cast( + MIN(nextblob_box.width(), blob_box.width())) / + MAX(nextblob_box.width(), blob_box.width()); + float heightR = static_cast( + MIN(nextblob_box.height(), blob_box.height())) / + MAX(nextblob_box.height(), blob_box.height()); + + if (xoverlap && yoverlap && widthR > kWidthR && heightR > kHeightR) { + // Found one, set nextblob type and recompute blob_box. + found = true; + nextblob->set_special_text_type(BSTT_SKIP); + blob_box += nextblob_box; + } + } + if (found) { + blob->set_special_text_type(BSTT_SKIP); + } + } + } + + int EquationDetect::FindEquationParts( + ColPartitionGrid* part_grid, ColPartitionSet** best_columns) { + if (!lang_tesseract_) { + tprintf("Warning: lang_tesseract_ is NULL!\n"); + return -1; + } + if (!part_grid || !best_columns) { + tprintf("part_grid/best_columns is NULL!!\n"); + return -1; + } + cp_seeds_.clear(); + part_grid_ = part_grid; + best_columns_ = best_columns; + resolution_ = lang_tesseract_->source_resolution(); + STRING outfile; + page_count_++; + + if (equationdetect_save_bi_image) { + GetOutputTiffName("_bi", &outfile); + pixWrite(outfile.string(), lang_tesseract_->pix_binary(), IFF_TIFF_G4); + } + + // Pass 0: Compute special text type for blobs. + IdentifySpecialText(); + + // Pass 1: Merge parts by overlap. + MergePartsByLocation(); + + // Pass 2: compute the math blob density and find the seed partition. + IdentifySeedParts(); + // We still need separate seed into block seed and inline seed partition. + IdentifyInlineParts(); + + if (equationdetect_save_seed_image) { + GetOutputTiffName("_seed", &outfile); + PaintColParts(outfile); + } + + // Pass 3: expand block equation seeds. + while (!cp_seeds_.empty()) { + GenericVector seeds_expanded; + for (int i = 0; i < cp_seeds_.size(); ++i) { + if (ExpandSeed(cp_seeds_[i])) { + // If this seed is expanded, then we add it into seeds_expanded. Note + // this seed has been removed from part_grid_ if it is expanded. + seeds_expanded.push_back(cp_seeds_[i]); + } + } + // Add seeds_expanded back into part_grid_ and reset cp_seeds_. + for (int i = 0; i < seeds_expanded.size(); ++i) { + InsertPartAfterAbsorb(seeds_expanded[i]); + } + cp_seeds_ = seeds_expanded; + } + + // Pass 4: find math block satellite text partitions and merge them. + ProcessMathBlockSatelliteParts(); + + if (equationdetect_save_merged_image) { // For debug. + GetOutputTiffName("_merged", &outfile); + PaintColParts(outfile); + } + + return 0; + } + + void EquationDetect::MergePartsByLocation() { + while (true) { + ColPartition* part = NULL; + // partitions that have been updated. + GenericVector parts_updated; + ColPartitionGridSearch gsearch(part_grid_); + gsearch.StartFullSearch(); + while ((part = gsearch.NextFullSearch()) != NULL) { + if (!IsTextOrEquationType(part->type())) { + continue; + } + GenericVector parts_to_merge; + SearchByOverlap(part, &parts_to_merge); + if (parts_to_merge.empty()) { + continue; + } + + // Merge parts_to_merge with part, and remove them from part_grid_. + part_grid_->RemoveBBox(part); + for (int i = 0; i < parts_to_merge.size(); ++i) { + ASSERT_HOST(parts_to_merge[i] != NULL && parts_to_merge[i] != part); + part->Absorb(parts_to_merge[i], NULL); + } + gsearch.RepositionIterator(); + + parts_updated.push_back(part); + } + + if (parts_updated.empty()) { // Exit the loop + break; + } + + // Re-insert parts_updated into part_grid_. + for (int i = 0; i < parts_updated.size(); ++i) { + InsertPartAfterAbsorb(parts_updated[i]); + } + } + } + + void EquationDetect::SearchByOverlap( + ColPartition* seed, + GenericVector* parts_overlap) { + ASSERT_HOST(seed != NULL && parts_overlap != NULL); + if (!IsTextOrEquationType(seed->type())) { + return; + } + ColPartitionGridSearch search(part_grid_); + const TBOX& seed_box(seed->bounding_box()); + const int kRadNeighborCells = 30; + search.StartRadSearch((seed_box.left() + seed_box.right()) / 2, + (seed_box.top() + seed_box.bottom()) / 2, + kRadNeighborCells); + search.SetUniqueMode(true); + + // Search iteratively. + ColPartition *part; + GenericVector parts; + const float kLargeOverlapTh = 0.95; + const float kEquXOverlap = 0.4, kEquYOverlap = 0.5; + while ((part = search.NextRadSearch()) != NULL) { + if (part == seed || !IsTextOrEquationType(part->type())) { + continue; + } + const TBOX& part_box(part->bounding_box()); + bool merge = false; + + float x_overlap_fraction = part_box.x_overlap_fraction(seed_box), + y_overlap_fraction = part_box.y_overlap_fraction(seed_box); + + // If part is large overlapped with seed, then set merge to true. + if (x_overlap_fraction >= kLargeOverlapTh && + y_overlap_fraction >= kLargeOverlapTh) { + merge = true; + } + else if (seed->type() == PT_EQUATION && + IsTextOrEquationType(part->type())) { + if ((x_overlap_fraction > kEquXOverlap && y_overlap_fraction > 0.0) || + (x_overlap_fraction > 0.0 && y_overlap_fraction > kEquYOverlap)) { + merge = true; + } + } + + if (merge) { // Remove the part from search and put it into parts. + search.RemoveBBox(); + parts_overlap->push_back(part); + } + } + } + + void EquationDetect::InsertPartAfterAbsorb(ColPartition* part) { + ASSERT_HOST(part); + + // Before insert part back into part_grid_, we will need re-compute some + // of its attributes such as first_column_, last_column_. However, we still + // want to preserve its type. + BlobTextFlowType flow_type = part->flow(); + PolyBlockType part_type = part->type(); + BlobRegionType blob_type = part->blob_type(); + + // Call SetPartitionType to re-compute the attributes of part. + const TBOX& part_box(part->bounding_box()); + int grid_x, grid_y; + part_grid_->GridCoords( + part_box.left(), part_box.bottom(), &grid_x, &grid_y); + part->SetPartitionType(resolution_, best_columns_[grid_y]); + + // Reset the types back. + part->set_type(part_type); + part->set_blob_type(blob_type); + part->set_flow(flow_type); + part->SetBlobTypes(); + + // Insert into part_grid_. + part_grid_->InsertBBox(true, true, part); + } + + void EquationDetect::IdentifySeedParts() { + ColPartitionGridSearch gsearch(part_grid_); + ColPartition *part = NULL; + gsearch.StartFullSearch(); + + GenericVector seeds1, seeds2; + // The left coordinates of indented text partitions. + GenericVector indented_texts_left; + // The foreground density of text partitions. + GenericVector texts_foreground_density; + while ((part = gsearch.NextFullSearch()) != NULL) { + if (!IsTextOrEquationType(part->type())) { + continue; + } + part->ComputeSpecialBlobsDensity(); + bool blobs_check = CheckSeedBlobsCount(part); + const int kTextBlobsTh = 20; + + if (CheckSeedDensity(kMathDigitDensityTh1, kMathDigitDensityTh2, part) && + blobs_check) { + // Passed high density threshold test, save into seeds1. + seeds1.push_back(part); + } + else { + IndentType indent = IsIndented(part); + if (IsLeftIndented(indent) && blobs_check && + CheckSeedDensity(kMathDigitDensityTh2, kMathDigitDensityTh2, part)) { + // Passed low density threshold test and is indented, save into seeds2. + seeds2.push_back(part); + } + else if (!IsRightIndented(indent) && + part->boxes_count() > kTextBlobsTh) { + // This is likely to be a text part, save the features. + const TBOX&box = part->bounding_box(); + if (IsLeftIndented(indent)) { + indented_texts_left.push_back(box.left()); + } + texts_foreground_density.push_back(ComputeForegroundDensity(box)); + } + } + } + + // Sort the features collected from text regions. + indented_texts_left.sort(); + texts_foreground_density.sort(); + float foreground_density_th = 0.15; // Default value. + if (!texts_foreground_density.empty()) { + // Use the median of the texts_foreground_density. + foreground_density_th = 0.8 * texts_foreground_density[ + texts_foreground_density.size() / 2]; + } + + for (int i = 0; i < seeds1.size(); ++i) { + const TBOX& box = seeds1[i]->bounding_box(); + if (CheckSeedFgDensity(foreground_density_th, seeds1[i]) && + !(IsLeftIndented(IsIndented(seeds1[i])) && + CountAlignment(indented_texts_left, box.left()) >= + kLeftIndentAlignmentCountTh)) { + // Mark as PT_EQUATION type. + seeds1[i]->set_type(PT_EQUATION); + cp_seeds_.push_back(seeds1[i]); + } + else { // Mark as PT_INLINE_EQUATION type. + seeds1[i]->set_type(PT_INLINE_EQUATION); + } + } + + for (int i = 0; i < seeds2.size(); ++i) { + if (CheckForSeed2(indented_texts_left, foreground_density_th, seeds2[i])) { + seeds2[i]->set_type(PT_EQUATION); + cp_seeds_.push_back(seeds2[i]); + } + } + } + + float EquationDetect::ComputeForegroundDensity(const TBOX& tbox) { + Pix *pix_bi = lang_tesseract_->pix_binary(); + int pix_height = pixGetHeight(pix_bi); + Box* box = boxCreate(tbox.left(), pix_height - tbox.top(), + tbox.width(), tbox.height()); + Pix *pix_sub = pixClipRectangle(pix_bi, box, NULL); + l_float32 fract; + pixForegroundFraction(pix_sub, &fract); + pixDestroy(&pix_sub); + boxDestroy(&box); + + return fract; + } + + bool EquationDetect::CheckSeedFgDensity(const float density_th, + ColPartition* part) { + ASSERT_HOST(part); + + // Split part horizontall, and check for each sub part. + GenericVector sub_boxes; + SplitCPHorLite(part, &sub_boxes); + float parts_passed = 0.0; + for (int i = 0; i < sub_boxes.size(); ++i) { + float density = ComputeForegroundDensity(sub_boxes[i]); + if (density < density_th) { + parts_passed++; + } + } + + // If most sub parts passed, then we return true. + const float kSeedPartRatioTh = 0.3; + bool retval = (parts_passed / sub_boxes.size() >= kSeedPartRatioTh); + + return retval; + } + + void EquationDetect::SplitCPHor(ColPartition* part, + GenericVector* parts_splitted) { + ASSERT_HOST(part && parts_splitted); + if (part->median_width() == 0 || part->boxes_count() == 0) { + return; + } + + // Make a copy of part, and reset parts_splitted. + ColPartition* right_part = part->CopyButDontOwnBlobs(); + parts_splitted->delete_data_pointers(); + parts_splitted->clear(); + + const double kThreshold = part->median_width() * 3.0; + bool found_split = true; + while (found_split) { + found_split = false; + BLOBNBOX_C_IT box_it(right_part->boxes()); + // Blobs are sorted left side first. If blobs overlap, + // the previous blob may have a "more right" right side. + // Account for this by always keeping the largest "right" + // so far. + int previous_right = MIN_INT32; + + // Look for the next split in the partition. + for (box_it.mark_cycle_pt(); !box_it.cycled_list(); box_it.forward()) { + const TBOX& box = box_it.data()->bounding_box(); + if (previous_right != MIN_INT32 && + box.left() - previous_right > kThreshold) { + // We have a split position. Split the partition in two pieces. + // Insert the left piece in the grid and keep processing the right. + int mid_x = (box.left() + previous_right) / 2; + ColPartition* left_part = right_part; + right_part = left_part->SplitAt(mid_x); + + parts_splitted->push_back(left_part); + left_part->ComputeSpecialBlobsDensity(); + found_split = true; + break; + } + + // The right side of the previous blobs. + previous_right = MAX(previous_right, box.right()); + } + } + + // Add the last piece. + right_part->ComputeSpecialBlobsDensity(); + parts_splitted->push_back(right_part); + } + + void EquationDetect::SplitCPHorLite(ColPartition* part, + GenericVector* splitted_boxes) { + ASSERT_HOST(part && splitted_boxes); + splitted_boxes->clear(); + if (part->median_width() == 0) { + return; + } + + const double kThreshold = part->median_width() * 3.0; + + // Blobs are sorted left side first. If blobs overlap, + // the previous blob may have a "more right" right side. + // Account for this by always keeping the largest "right" + // so far. + TBOX union_box; + int previous_right = MIN_INT32; + BLOBNBOX_C_IT box_it(part->boxes()); + for (box_it.mark_cycle_pt(); !box_it.cycled_list(); box_it.forward()) { + const TBOX& box = box_it.data()->bounding_box(); + if (previous_right != MIN_INT32 && + box.left() - previous_right > kThreshold) { + // We have a split position. + splitted_boxes->push_back(union_box); + previous_right = MIN_INT32; + } + if (previous_right == MIN_INT32) { + union_box = box; + } + else { + union_box += box; + } + // The right side of the previous blobs. + previous_right = MAX(previous_right, box.right()); + } + + // Add the last piece. + if (previous_right != MIN_INT32) { + splitted_boxes->push_back(union_box); + } + } + + bool EquationDetect::CheckForSeed2( + const GenericVector& indented_texts_left, + const float foreground_density_th, + ColPartition* part) { + ASSERT_HOST(part); + const TBOX& box = part->bounding_box(); + + // Check if it is aligned with any indented_texts_left. + if (!indented_texts_left.empty() && + CountAlignment(indented_texts_left, box.left()) >= + kLeftIndentAlignmentCountTh) { + return false; + } + + // Check the foreground density. + if (ComputeForegroundDensity(box) > foreground_density_th) { + return false; + } + + return true; + } + + int EquationDetect::CountAlignment( + const GenericVector& sorted_vec, const int val) const { + if (sorted_vec.empty()) { + return 0; + } + const int kDistTh = static_cast(roundf(0.03 * resolution_)); + int pos = sorted_vec.binary_search(val), count = 0; + + // Search left side. + int index = pos; + while (index >= 0 && abs(val - sorted_vec[index--]) < kDistTh) { + count++; + } + + // Search right side. + index = pos + 1; + while (index < sorted_vec.size() && sorted_vec[index++] - val < kDistTh) { + count++; + } + + return count; + } + + void EquationDetect::IdentifyInlineParts() { + ComputeCPsSuperBBox(); + IdentifyInlinePartsHorizontal(); + int textparts_linespacing = EstimateTextPartLineSpacing(); + IdentifyInlinePartsVertical(true, textparts_linespacing); + IdentifyInlinePartsVertical(false, textparts_linespacing); + } + + void EquationDetect::ComputeCPsSuperBBox() { + ColPartitionGridSearch gsearch(part_grid_); + ColPartition *part = NULL; + gsearch.StartFullSearch(); + if (cps_super_bbox_) { + delete cps_super_bbox_; + } + cps_super_bbox_ = new TBOX(); + while ((part = gsearch.NextFullSearch()) != NULL) { + (*cps_super_bbox_) += part->bounding_box(); + } + } + + void EquationDetect::IdentifyInlinePartsHorizontal() { + ASSERT_HOST(cps_super_bbox_); + GenericVector new_seeds; + const int kMarginDiffTh = IntCastRounded( + 0.5 * lang_tesseract_->source_resolution()); + const int kGapTh = static_cast(roundf( + 1.0 * lang_tesseract_->source_resolution())); + ColPartitionGridSearch search(part_grid_); + search.SetUniqueMode(true); + // The center x coordinate of the cp_super_bbox_. + int cps_cx = cps_super_bbox_->left() + cps_super_bbox_->width() / 2; + for (int i = 0; i < cp_seeds_.size(); ++i) { + ColPartition* part = cp_seeds_[i]; + const TBOX& part_box(part->bounding_box()); + int left_margin = part_box.left() - cps_super_bbox_->left(), + right_margin = cps_super_bbox_->right() - part_box.right(); + bool right_to_left; + if (left_margin + kMarginDiffTh < right_margin && + left_margin < kMarginDiffTh) { + // part is left aligned, so we search if it has any right neighbor. + search.StartSideSearch( + part_box.right(), part_box.top(), part_box.bottom()); + right_to_left = false; + } + else if (left_margin > cps_cx) { + // part locates on the right half on image, so search if it has any left + // neighbor. + search.StartSideSearch( + part_box.left(), part_box.top(), part_box.bottom()); + right_to_left = true; + } + else { // part is not an inline equation. + new_seeds.push_back(part); + continue; + } + ColPartition* neighbor = NULL; + bool side_neighbor_found = false; + while ((neighbor = search.NextSideSearch(right_to_left)) != NULL) { + const TBOX& neighbor_box(neighbor->bounding_box()); + if (!IsTextOrEquationType(neighbor->type()) || + part_box.x_gap(neighbor_box) > kGapTh || + !part_box.major_y_overlap(neighbor_box) || + part_box.major_x_overlap(neighbor_box)) { + continue; + } + // We have found one. Set the side_neighbor_found flag. + side_neighbor_found = true; + break; + } + if (!side_neighbor_found) { // Mark part as PT_INLINE_EQUATION. + part->set_type(PT_INLINE_EQUATION); + } + else { + // Check the geometric feature of neighbor. + const TBOX& neighbor_box(neighbor->bounding_box()); + if (neighbor_box.width() > part_box.width() && + neighbor->type() != PT_EQUATION) { // Mark as PT_INLINE_EQUATION. + part->set_type(PT_INLINE_EQUATION); + } + else { // part is not an inline equation type. + new_seeds.push_back(part); + } + } + } + + // Reset the cp_seeds_ using the new_seeds. + cp_seeds_ = new_seeds; + } + + int EquationDetect::EstimateTextPartLineSpacing() { + ColPartitionGridSearch gsearch(part_grid_); + + // Get the y gap between text partitions; + ColPartition *current = NULL, *prev = NULL; + gsearch.StartFullSearch(); + GenericVector ygaps; + while ((current = gsearch.NextFullSearch()) != NULL) { + if (!PTIsTextType(current->type())) { + continue; + } + if (prev != NULL) { + const TBOX ¤t_box = current->bounding_box(); + const TBOX &prev_box = prev->bounding_box(); + // prev and current should be x major overlap and non y overlap. + if (current_box.major_x_overlap(prev_box) && + !current_box.y_overlap(prev_box)) { + int gap = current_box.y_gap(prev_box); + if (gap < MIN(current_box.height(), prev_box.height())) { + // The gap should be smaller than the height of the bounding boxes. + ygaps.push_back(gap); + } + } + } + prev = current; + } + + if (ygaps.size() < 8) { // We do not have enough data. + return -1; + } + + // Compute the line spacing from ygaps: use the mean of the first half. + ygaps.sort(); + int spacing = 0, count; + for (count = 0; count < ygaps.size() / 2; count++) { + spacing += ygaps[count]; + } + return spacing / count; + } + + void EquationDetect::IdentifyInlinePartsVertical( + const bool top_to_bottom, const int textparts_linespacing) { + if (cp_seeds_.empty()) { + return; + } + + // Sort cp_seeds_. + if (top_to_bottom) { // From top to bottom. + cp_seeds_.sort(&SortCPByTopReverse); + } + else { // From bottom to top. + cp_seeds_.sort(&SortCPByBottom); + } + + GenericVector new_seeds; + for (int i = 0; i < cp_seeds_.size(); ++i) { + ColPartition* part = cp_seeds_[i]; + // If we sort cp_seeds_ from top to bottom, then for each cp_seeds_, we look + // for its top neighbors, so that if two/more inline regions are connected + // to each other, then we will identify the top one, and then use it to + // identify the bottom one. + if (IsInline(!top_to_bottom, textparts_linespacing, part)) { + part->set_type(PT_INLINE_EQUATION); + } + else { + new_seeds.push_back(part); + } + } + cp_seeds_ = new_seeds; + } + + bool EquationDetect::IsInline(const bool search_bottom, + const int textparts_linespacing, + ColPartition* part) { + ASSERT_HOST(part != NULL); + // Look for its nearest vertical neighbor that hardly overlaps in y but + // largely overlaps in x. + ColPartitionGridSearch search(part_grid_); + ColPartition *neighbor = NULL; + const TBOX& part_box(part->bounding_box()); + const float kYGapRatioTh = 1.0; + + if (search_bottom) { + search.StartVerticalSearch(part_box.left(), part_box.right(), + part_box.bottom()); + } + else { + search.StartVerticalSearch(part_box.left(), part_box.right(), + part_box.top()); + } + search.SetUniqueMode(true); + while ((neighbor = search.NextVerticalSearch(search_bottom)) != NULL) { + const TBOX& neighbor_box(neighbor->bounding_box()); + if (part_box.y_gap(neighbor_box) > kYGapRatioTh * + MIN(part_box.height(), neighbor_box.height())) { + // Finished searching. + break; + } + if (!PTIsTextType(neighbor->type())) { + continue; + } + + // Check if neighbor and part is inline similar. + const float kHeightRatioTh = 0.5; + const int kYGapTh = textparts_linespacing > 0 ? + textparts_linespacing + static_cast(roundf(0.02 * resolution_)) : + static_cast(roundf(0.05 * resolution_)); // Default value. + if (part_box.x_overlap(neighbor_box) && // Location feature. + part_box.y_gap(neighbor_box) <= kYGapTh && // Line spacing. + // Geo feature. + static_cast(MIN(part_box.height(), neighbor_box.height())) / + MAX(part_box.height(), neighbor_box.height()) > kHeightRatioTh) { + return true; + } + } + + return false; + } + + bool EquationDetect::CheckSeedBlobsCount(ColPartition* part) { + if (!part) { + return false; + } + const int kSeedMathBlobsCount = 2; + const int kSeedMathDigitBlobsCount = 5; + + int blobs = part->boxes_count(), + math_blobs = part->SpecialBlobsCount(BSTT_MATH), + digit_blobs = part->SpecialBlobsCount(BSTT_DIGIT); + if (blobs < kSeedBlobsCountTh || math_blobs <= kSeedMathBlobsCount || + math_blobs + digit_blobs <= kSeedMathDigitBlobsCount) { + return false; + } + + return true; + } + + bool EquationDetect::CheckSeedDensity( + const float math_density_high, + const float math_density_low, + const ColPartition* part) const { + ASSERT_HOST(part); + float math_digit_density = part->SpecialBlobsDensity(BSTT_MATH) + + part->SpecialBlobsDensity(BSTT_DIGIT); + float italic_density = part->SpecialBlobsDensity(BSTT_ITALIC); + if (math_digit_density > math_density_high) { + return true; + } + if (math_digit_density + italic_density > kMathItalicDensityTh && + math_digit_density > math_density_low) { + return true; + } + + return false; + } + + EquationDetect::IndentType EquationDetect::IsIndented(ColPartition* part) { + ASSERT_HOST(part); + + ColPartitionGridSearch search(part_grid_); + ColPartition *neighbor = NULL; + const TBOX& part_box(part->bounding_box()); + const int kXGapTh = static_cast(roundf(0.5 * resolution_)); + const int kRadiusTh = static_cast(roundf(3.0 * resolution_)); + const int kYGapTh = static_cast(roundf(0.5 * resolution_)); + + // Here we use a simple approximation algorithm: from the center of part, We + // perform the radius search, and check if we can find a neighboring parition + // that locates on the top/bottom left of part. + search.StartRadSearch((part_box.left() + part_box.right()) / 2, + (part_box.top() + part_box.bottom()) / 2, kRadiusTh); + search.SetUniqueMode(true); + bool left_indented = false, right_indented = false; + while ((neighbor = search.NextRadSearch()) != NULL && + (!left_indented || !right_indented)) { + if (neighbor == part) { + continue; + } + const TBOX& neighbor_box(neighbor->bounding_box()); + + if (part_box.major_y_overlap(neighbor_box) && + part_box.x_gap(neighbor_box) < kXGapTh) { + // When this happens, it is likely part is a fragment of an + // over-segmented colpartition. So we return false. + return NO_INDENT; + } + + if (!IsTextOrEquationType(neighbor->type())) { + continue; + } + + // The neighbor should be above/below part, and overlap in x direction. + if (!part_box.x_overlap(neighbor_box) || part_box.y_overlap(neighbor_box)) { + continue; + } + + if (part_box.y_gap(neighbor_box) < kYGapTh) { + int left_gap = part_box.left() - neighbor_box.left(); + int right_gap = neighbor_box.right() - part_box.right(); + if (left_gap > kXGapTh) { + left_indented = true; + } + if (right_gap > kXGapTh) { + right_indented = true; + } + } + } + + if (left_indented && right_indented) { + return BOTH_INDENT; + } + if (left_indented) { + return LEFT_INDENT; + } + if (right_indented) { + return RIGHT_INDENT; + } + return NO_INDENT; + } + + bool EquationDetect::ExpandSeed(ColPartition* seed) { + if (seed == NULL || // This seed has been absorbed by other seeds. + seed->IsVerticalType()) { // We skip vertical type right now. + return false; + } + + // Expand in four directions. + GenericVector parts_to_merge; + ExpandSeedHorizontal(true, seed, &parts_to_merge); + ExpandSeedHorizontal(false, seed, &parts_to_merge); + ExpandSeedVertical(true, seed, &parts_to_merge); + ExpandSeedVertical(false, seed, &parts_to_merge); + SearchByOverlap(seed, &parts_to_merge); + + if (parts_to_merge.empty()) { // We don't find any partition to merge. + return false; + } + + // Merge all partitions in parts_to_merge with seed. We first remove seed + // from part_grid_ as its bounding box is going to expand. Then we add it + // back after it aborbs all parts_to_merge parititions. + part_grid_->RemoveBBox(seed); + for (int i = 0; i < parts_to_merge.size(); ++i) { + ColPartition* part = parts_to_merge[i]; + if (part->type() == PT_EQUATION) { + // If part is in cp_seeds_, then we mark it as NULL so that we won't + // process it again. + for (int j = 0; j < cp_seeds_.size(); ++j) { + if (part == cp_seeds_[j]) { + cp_seeds_[j] = NULL; + break; + } + } + } + + // part has already been removed from part_grid_ in function + // ExpandSeedHorizontal/ExpandSeedVertical. + seed->Absorb(part, NULL); + } + + return true; + } + + void EquationDetect::ExpandSeedHorizontal( + const bool search_left, + ColPartition* seed, + GenericVector* parts_to_merge) { + ASSERT_HOST(seed != NULL && parts_to_merge != NULL); + const float kYOverlapTh = 0.6; + const int kXGapTh = static_cast(roundf(0.2 * resolution_)); + + ColPartitionGridSearch search(part_grid_); + const TBOX& seed_box(seed->bounding_box()); + int x = search_left ? seed_box.left() : seed_box.right(); + search.StartSideSearch(x, seed_box.bottom(), seed_box.top()); + search.SetUniqueMode(true); + + // Search iteratively. + ColPartition *part = NULL; + while ((part = search.NextSideSearch(search_left)) != NULL) { + if (part == seed) { + continue; + } + const TBOX& part_box(part->bounding_box()); + if (part_box.x_gap(seed_box) > kXGapTh) { // Out of scope. + break; + } + + // Check part location. + if ((part_box.left() >= seed_box.left() && search_left) || + (part_box.right() <= seed_box.right() && !search_left)) { + continue; + } + + if (part->type() != PT_EQUATION) { // Non-equation type. + // Skip PT_LINLINE_EQUATION and non text type. + if (part->type() == PT_INLINE_EQUATION || + (!IsTextOrEquationType(part->type()) && + part->blob_type() != BRT_HLINE)) { + continue; + } + // For other types, it should be the near small neighbor of seed. + if (!IsNearSmallNeighbor(seed_box, part_box) || + !CheckSeedNeighborDensity(part)) { + continue; + } + } + else { // Equation type, check the y overlap. + if (part_box.y_overlap_fraction(seed_box) < kYOverlapTh && + seed_box.y_overlap_fraction(part_box) < kYOverlapTh) { + continue; + } + } + + // Passed the check, delete it from search and add into parts_to_merge. + search.RemoveBBox(); + parts_to_merge->push_back(part); + } + } + + void EquationDetect::ExpandSeedVertical( + const bool search_bottom, + ColPartition* seed, + GenericVector* parts_to_merge) { + ASSERT_HOST(seed != NULL && parts_to_merge != NULL && + cps_super_bbox_ != NULL); + const float kXOverlapTh = 0.4; + const int kYGapTh = static_cast(roundf(0.2 * resolution_)); + + ColPartitionGridSearch search(part_grid_); + const TBOX& seed_box(seed->bounding_box()); + int y = search_bottom ? seed_box.bottom() : seed_box.top(); + search.StartVerticalSearch( + cps_super_bbox_->left(), cps_super_bbox_->right(), y); + search.SetUniqueMode(true); + + // Search iteratively. + ColPartition *part = NULL; + GenericVector parts; + int skipped_min_top = INT_MAX, skipped_max_bottom = -1; + while ((part = search.NextVerticalSearch(search_bottom)) != NULL) { + if (part == seed) { + continue; + } + const TBOX& part_box(part->bounding_box()); + + if (part_box.y_gap(seed_box) > kYGapTh) { // Out of scope. + break; + } + + // Check part location. + if ((part_box.bottom() >= seed_box.bottom() && search_bottom) || + (part_box.top() <= seed_box.top() && !search_bottom)) { + continue; + } + + bool skip_part = false; + if (part->type() != PT_EQUATION) { // Non-equation type. + // Skip PT_LINLINE_EQUATION and non text type. + if (part->type() == PT_INLINE_EQUATION || + (!IsTextOrEquationType(part->type()) && + part->blob_type() != BRT_HLINE)) { + skip_part = true; + } + else if (!IsNearSmallNeighbor(seed_box, part_box) || + !CheckSeedNeighborDensity(part)) { + // For other types, it should be the near small neighbor of seed. + skip_part = true; + } + } + else { // Equation type, check the x overlap. + if (part_box.x_overlap_fraction(seed_box) < kXOverlapTh && + seed_box.x_overlap_fraction(part_box) < kXOverlapTh) { + skip_part = true; + } + } + if (skip_part) { + if (part->type() != PT_EQUATION) { + if (skipped_min_top > part_box.top()) { + skipped_min_top = part_box.top(); + } + if (skipped_max_bottom < part_box.bottom()) { + skipped_max_bottom = part_box.bottom(); + } + } + } + else { + parts.push_back(part); + } + } + + // For every part in parts, we need verify it is not above skipped_min_top + // when search top, or not below skipped_max_bottom when search bottom. I.e., + // we will skip a part if it looks like: + // search bottom | search top + // seed: ****************** | part: ********** + // skipped: xxx | skipped: xxx + // part: ********** | seed: *********** + for (int i = 0; i < parts.size(); i++) { + const TBOX& part_box(parts[i]->bounding_box()); + if ((search_bottom && part_box.top() <= skipped_max_bottom) || + (!search_bottom && part_box.bottom() >= skipped_min_top)) { + continue; + } + // Add parts[i] into parts_to_merge, and delete it from part_grid_. + parts_to_merge->push_back(parts[i]); + part_grid_->RemoveBBox(parts[i]); + } + } + + bool EquationDetect::IsNearSmallNeighbor(const TBOX& seed_box, + const TBOX& part_box) const { + const int kXGapTh = static_cast(roundf(0.25 * resolution_)); + const int kYGapTh = static_cast(roundf(0.05 * resolution_)); + + // Check geometric feature. + if (part_box.height() > seed_box.height() || + part_box.width() > seed_box.width()) { + return false; + } + + // Check overlap and distance. + if ((!part_box.major_x_overlap(seed_box) || + part_box.y_gap(seed_box) > kYGapTh) && + (!part_box.major_y_overlap(seed_box) || + part_box.x_gap(seed_box) > kXGapTh)) { + return false; + } + + return true; + } + + bool EquationDetect::CheckSeedNeighborDensity(const ColPartition* part) const { + ASSERT_HOST(part); + if (part->boxes_count() < kSeedBlobsCountTh) { + // Too few blobs, skip the check. + return true; + } + + // We check the math blobs density and the unclear blobs density. + if (part->SpecialBlobsDensity(BSTT_MATH) + + part->SpecialBlobsDensity(BSTT_DIGIT) > kMathDigitDensityTh1 || + part->SpecialBlobsDensity(BSTT_UNCLEAR) > kUnclearDensityTh) { + return true; + } + + return false; + } + + void EquationDetect::ProcessMathBlockSatelliteParts() { + // Iterate over part_grid_, and find all parts that are text type but not + // equation type. + ColPartition *part = NULL; + GenericVector text_parts; + ColPartitionGridSearch gsearch(part_grid_); + gsearch.StartFullSearch(); + while ((part = gsearch.NextFullSearch()) != NULL) { + if (part->type() == PT_FLOWING_TEXT || part->type() == PT_HEADING_TEXT) { + text_parts.push_back(part); + } + } + if (text_parts.empty()) { + return; + } + + // Compute the medium height of the text_parts. + text_parts.sort(&SortCPByHeight); + const TBOX& text_box = text_parts[text_parts.size() / 2]->bounding_box(); + int med_height = text_box.height(); + if (text_parts.size() % 2 == 0 && text_parts.size() > 1) { + const TBOX& text_box = + text_parts[text_parts.size() / 2 - 1]->bounding_box(); + med_height = static_cast(roundf( + 0.5 * (text_box.height() + med_height))); + } + + // Iterate every text_parts and check if it is a math block satellite. + for (int i = 0; i < text_parts.size(); ++i) { + const TBOX& text_box(text_parts[i]->bounding_box()); + if (text_box.height() > med_height) { + continue; + } + GenericVector math_blocks; + if (!IsMathBlockSatellite(text_parts[i], &math_blocks)) { + continue; + } + + // Found. merge text_parts[i] with math_blocks. + part_grid_->RemoveBBox(text_parts[i]); + text_parts[i]->set_type(PT_EQUATION); + for (int j = 0; j < math_blocks.size(); ++j) { + part_grid_->RemoveBBox(math_blocks[j]); + text_parts[i]->Absorb(math_blocks[j], NULL); + } + InsertPartAfterAbsorb(text_parts[i]); + } + } + + bool EquationDetect::IsMathBlockSatellite( + ColPartition* part, GenericVector* math_blocks) { + ASSERT_HOST(part != NULL && math_blocks != NULL); + math_blocks->clear(); + const TBOX& part_box(part->bounding_box()); + // Find the top/bottom nearest neighbor of part. + ColPartition *neighbors[2]; + int y_gaps[2] = { INT_MAX, INT_MAX }; + // The horizontal boundary of the neighbors. + int neighbors_left = INT_MAX, neighbors_right = 0; + for (int i = 0; i < 2; ++i) { + neighbors[i] = SearchNNVertical(i != 0, part); + if (neighbors[i]) { + const TBOX& neighbor_box = neighbors[i]->bounding_box(); + y_gaps[i] = neighbor_box.y_gap(part_box); + if (neighbor_box.left() < neighbors_left) { + neighbors_left = neighbor_box.left(); + } + if (neighbor_box.right() > neighbors_right) { + neighbors_right = neighbor_box.right(); + } + } + } + if (neighbors[0] == neighbors[1]) { + // This happens when part is inside neighbor. + neighbors[1] = NULL; + y_gaps[1] = INT_MAX; + } + + // Check if part is within [neighbors_left, neighbors_right]. + if (part_box.left() < neighbors_left || part_box.right() > neighbors_right) { + return false; + } + + // Get the index of the near one in neighbors. + int index = y_gaps[0] < y_gaps[1] ? 0 : 1; + + // Check the near one. + if (IsNearMathNeighbor(y_gaps[index], neighbors[index])) { + math_blocks->push_back(neighbors[index]); + } + else { + // If the near one failed the check, then we skip checking the far one. + return false; + } + + // Check the far one. + index = 1 - index; + if (IsNearMathNeighbor(y_gaps[index], neighbors[index])) { + math_blocks->push_back(neighbors[index]); + } + + return true; + } + + ColPartition* EquationDetect::SearchNNVertical( + const bool search_bottom, const ColPartition* part) { + ASSERT_HOST(part); + ColPartition *nearest_neighbor = NULL, *neighbor = NULL; + const int kYGapTh = static_cast(roundf(resolution_ * 0.5)); + + ColPartitionGridSearch search(part_grid_); + search.SetUniqueMode(true); + const TBOX& part_box(part->bounding_box()); + int y = search_bottom ? part_box.bottom() : part_box.top(); + search.StartVerticalSearch(part_box.left(), part_box.right(), y); + int min_y_gap = INT_MAX; + while ((neighbor = search.NextVerticalSearch(search_bottom)) != NULL) { + if (neighbor == part || !IsTextOrEquationType(neighbor->type())) { + continue; + } + const TBOX& neighbor_box(neighbor->bounding_box()); + int y_gap = neighbor_box.y_gap(part_box); + if (y_gap > kYGapTh) { // Out of scope. + break; + } + if (!neighbor_box.major_x_overlap(part_box) || + (search_bottom && neighbor_box.bottom() > part_box.bottom()) || + (!search_bottom && neighbor_box.top() < part_box.top())) { + continue; + } + if (y_gap < min_y_gap) { + min_y_gap = y_gap; + nearest_neighbor = neighbor; + } + } + + return nearest_neighbor; + } + + bool EquationDetect::IsNearMathNeighbor( + const int y_gap, const ColPartition *neighbor) const { + if (!neighbor) { + return false; + } + const int kYGapTh = static_cast(roundf(resolution_ * 0.1)); + return neighbor->type() == PT_EQUATION && y_gap <= kYGapTh; + } + + void EquationDetect::GetOutputTiffName(const char* name, + STRING* image_name) const { + ASSERT_HOST(image_name && name); + char page[50]; + snprintf(page, sizeof(page), "%04d", page_count_); + *image_name = STRING(lang_tesseract_->imagebasename) + page + name + ".tif"; + } + + void EquationDetect::PaintSpecialTexts(const STRING& outfile) const { + Pix *pix = NULL, *pixBi = lang_tesseract_->pix_binary(); + pix = pixConvertTo32(pixBi); + ColPartitionGridSearch gsearch(part_grid_); + ColPartition* part = NULL; + gsearch.StartFullSearch(); + while ((part = gsearch.NextFullSearch()) != NULL) { + BLOBNBOX_C_IT blob_it(part->boxes()); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + RenderSpecialText(pix, blob_it.data()); + } + } + + pixWrite(outfile.string(), pix, IFF_TIFF_LZW); + pixDestroy(&pix); + } + + void EquationDetect::PaintColParts(const STRING& outfile) const { + Pix *pix = pixConvertTo32(lang_tesseract_->BestPix()); + ColPartitionGridSearch gsearch(part_grid_); + gsearch.StartFullSearch(); + ColPartition* part = NULL; + while ((part = gsearch.NextFullSearch()) != NULL) { + const TBOX& tbox = part->bounding_box(); + Box *box = boxCreate(tbox.left(), pixGetHeight(pix) - tbox.top(), + tbox.width(), tbox.height()); + if (part->type() == PT_EQUATION) { + pixRenderBoxArb(pix, box, 5, 255, 0, 0); + } + else if (part->type() == PT_INLINE_EQUATION) { + pixRenderBoxArb(pix, box, 5, 0, 255, 0); + } + else { + pixRenderBoxArb(pix, box, 5, 0, 0, 255); + } + boxDestroy(&box); + } + + pixWrite(outfile.string(), pix, IFF_TIFF_LZW); + pixDestroy(&pix); + } + + void EquationDetect::PrintSpecialBlobsDensity(const ColPartition* part) const { + ASSERT_HOST(part); + TBOX box(part->bounding_box()); + int h = pixGetHeight(lang_tesseract_->BestPix()); + tprintf("Printing special blobs density values for ColParition (t=%d,b=%d) ", + h - box.top(), h - box.bottom()); + box.print(); + tprintf("blobs count = %d, density = ", part->boxes_count()); + for (int i = 0; i < BSTT_COUNT; ++i) { + BlobSpecialTextType type = static_cast(i); + tprintf("%d:%f ", i, part->SpecialBlobsDensity(type)); + } + tprintf("\n"); + } + +}; // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/equationdetect.h b/3rdparty/hgOCR/include/ccmain/equationdetect.h new file mode 100644 index 00000000..6ffac15e --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/equationdetect.h @@ -0,0 +1,278 @@ +/////////////////////////////////////////////////////////////////////// +// File: equationdetect.h +// Description: The equation detection class that inherits equationdetectbase. +// Author: Zongyi (Joe) Liu (joeliu@google.com) +// Created: Fri Aug 31 11:13:01 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_EQUATIONDETECT_H__ +#define TESSERACT_CCMAIN_EQUATIONDETECT_H__ + +#include "blobbox.h" +#include "equationdetectbase.h" +#include "genericvector.h" +#include "tesseractclass.h" +#include "unichar.h" + +class BLOBNBOX; +class BLOB_CHOICE; +class BLOB_CHOICE_LIST; +class TO_BLOCK_LIST; +class TBOX; +class UNICHARSET; + +namespace tesseract { + + class Tesseract; + class ColPartition; + class ColPartitionGrid; + class ColPartitionSet; + + class EquationDetect : public EquationDetectBase { + public: + EquationDetect(const char* equ_datapath, + const char* equ_language); + ~EquationDetect(); + + enum IndentType { + NO_INDENT, + LEFT_INDENT, + RIGHT_INDENT, + BOTH_INDENT, + INDENT_TYPE_COUNT + }; + + // Reset the lang_tesseract_ pointer. This function should be called before we + // do any detector work. + void SetLangTesseract(Tesseract* lang_tesseract); + + // Iterate over the blobs inside to_block, and set the blobs that we want to + // process to BSTT_NONE. (By default, they should be BSTT_SKIP). The function + // returns 0 upon success. + int LabelSpecialText(TO_BLOCK* to_block); + + // Find possible equation partitions from part_grid. Should be called + // after the special_text_type of blobs are set. + // It returns 0 upon success. + int FindEquationParts(ColPartitionGrid* part_grid, + ColPartitionSet** best_columns); + + // Reset the resolution of the processing image. TEST only function. + void SetResolution(const int resolution); + + protected: + // Identify the special text type for one blob, and update its field. When + // height_th is set (> 0), we will label the blob as BSTT_NONE if its height + // is less than height_th. + void IdentifySpecialText(BLOBNBOX *blob, const int height_th); + + // Estimate the type for one unichar. + BlobSpecialTextType EstimateTypeForUnichar( + const UNICHARSET& unicharset, const UNICHAR_ID id) const; + + // Compute special text type for each blobs in part_grid_. + void IdentifySpecialText(); + + // Identify blobs that we want to skip during special blob type + // classification. + void IdentifyBlobsToSkip(ColPartition* part); + + // The ColPartitions in part_grid_ maybe over-segmented, particularly in the + // block equation regions. So we like to identify these partitions and merge + // them before we do the searching. + void MergePartsByLocation(); + + // Staring from the seed center, we do radius search. And for partitions that + // have large overlaps with seed, we remove them from part_grid_ and add into + // parts_overlap. Note: this function may update the part_grid_, so if the + // caller is also running ColPartitionGridSearch, use the RepositionIterator + // to continue. + void SearchByOverlap(ColPartition* seed, + GenericVector* parts_overlap); + + // Insert part back into part_grid_, after it absorbs some other parts. + void InsertPartAfterAbsorb(ColPartition* part); + + // Identify the colparitions in part_grid_, label them as PT_EQUATION, and + // save them into cp_seeds_. + void IdentifySeedParts(); + + // Check the blobs count for a seed region candidate. + bool CheckSeedBlobsCount(ColPartition* part); + + // Compute the foreground pixel density for a tbox area. + float ComputeForegroundDensity(const TBOX& tbox); + + // Check if part from seed2 label: with low math density and left indented. We + // are using two checks: + // 1. If its left is aligned with any coordinates in indented_texts_left, + // which we assume have been sorted. + // 2. If its foreground density is over foreground_density_th. + bool CheckForSeed2( + const GenericVector& indented_texts_left, + const float foreground_density_th, + ColPartition* part); + + // Count the number of values in sorted_vec that is close to val, used to + // check if a partition is aligned with text partitions. + int CountAlignment( + const GenericVector& sorted_vec, const int val) const; + + // Check for a seed candidate using the foreground pixel density. And we + // return true if the density is below a certain threshold, because characters + // in equation regions usually are apart with more white spaces. + bool CheckSeedFgDensity(const float density_th, ColPartition* part); + + // A light version of SplitCPHor: instead of really doing the part split, we + // simply compute the union bounding box of each splitted part. + void SplitCPHorLite(ColPartition* part, GenericVector* splitted_boxes); + + // Split the part (horizontally), and save the splitted result into + // parts_splitted. Note that it is caller's responsibility to release the + // memory owns by parts_splitted. On the other hand, the part is unchanged + // during this process and still owns the blobs, so do NOT call DeleteBoxes + // when freeing the colpartitions in parts_splitted. + void SplitCPHor(ColPartition* part, + GenericVector* parts_splitted); + + // Check the density for a seed candidate (part) using its math density and + // italic density, returns true if the check passed. + bool CheckSeedDensity(const float math_density_high, + const float math_density_low, + const ColPartition* part) const; + + // Check if part is indented. + IndentType IsIndented(ColPartition* part); + + // Identify inline partitions from cp_seeds_, and re-label them. + void IdentifyInlineParts(); + + // Comute the super bounding box for all colpartitions inside part_grid_. + void ComputeCPsSuperBBox(); + + // Identify inline partitions from cp_seeds_ using the horizontal search. + void IdentifyInlinePartsHorizontal(); + + // Estimate the line spacing between two text partitions. Returns -1 if not + // enough data. + int EstimateTextPartLineSpacing(); + + // Identify inline partitions from cp_seeds_ using vertical search. + void IdentifyInlinePartsVertical(const bool top_to_bottom, + const int textPartsLineSpacing); + + // Check if part is an inline equation zone. This should be called after we + // identified the seed regions. + bool IsInline(const bool search_bottom, + const int textPartsLineSpacing, + ColPartition* part); + + // For a given seed partition, we search the part_grid_ and see if there is + // any partition can be merged with it. It returns true if the seed has been + // expanded. + bool ExpandSeed(ColPartition* seed); + + // Starting from the seed position, we search the part_grid_ + // horizontally/vertically, find all parititions that can be + // merged with seed, remove them from part_grid_, and put them into + // parts_to_merge. + void ExpandSeedHorizontal(const bool search_left, + ColPartition* seed, + GenericVector* parts_to_merge); + void ExpandSeedVertical(const bool search_bottom, + ColPartition* seed, + GenericVector* parts_to_merge); + + // Check if a part_box is the small neighbor of seed_box. + bool IsNearSmallNeighbor(const TBOX& seed_box, + const TBOX& part_box) const; + + // Perform the density check for part, which we assume is nearing a seed + // partition. It returns true if the check passed. + bool CheckSeedNeighborDensity(const ColPartition* part) const; + + // After identify the math blocks, we do one more scanning on all text + // partitions, and check if any of them is the satellite of: + // math blocks: here a p is the satellite of q if: + // 1. q is the nearest vertical neighbor of p, and + // 2. y_gap(p, q) is less than a threshold, and + // 3. x_overlap(p, q) is over a threshold. + // Note that p can be the satellites of two blocks: its top neighbor and + // bottom neighbor. + void ProcessMathBlockSatelliteParts(); + + // Check if part is the satellite of one/two math blocks. If it is, we return + // true, and save the blocks into math_blocks. + bool IsMathBlockSatellite( + ColPartition* part, GenericVector* math_blocks); + + // Search the nearest neighbor of part in one vertical direction as defined in + // search_bottom. It returns the neighbor found that major x overlap with it, + // or NULL when not found. + ColPartition* SearchNNVertical(const bool search_bottom, + const ColPartition* part); + + // Check if the neighbor with vertical distance of y_gap is a near and math + // block partition. + bool IsNearMathNeighbor(const int y_gap, const ColPartition *neighbor) const; + + // Generate the tiff file name for output/debug file. + void GetOutputTiffName(const char* name, STRING* image_name) const; + + // Debugger function that renders ColPartitions on the input image, where: + // parts labeled as PT_EQUATION will be painted in red, PT_INLINE_EQUATION + // will be painted in green, and other parts will be painted in blue. + void PaintColParts(const STRING& outfile) const; + + // Debugger function that renders the blobs in part_grid_ over the input + // image. + void PaintSpecialTexts(const STRING& outfile) const; + + // Debugger function that print the math blobs density values for a + // ColPartition object. + void PrintSpecialBlobsDensity(const ColPartition* part) const; + + // The tesseract engine intialized from equation training data. + Tesseract equ_tesseract_; + + // The tesseract engine used for OCR. This pointer is passed in by the caller, + // so do NOT destroy it in this class. + Tesseract* lang_tesseract_; + + // The ColPartitionGrid that we are processing. This pointer is passed in from + // the caller, so do NOT destroy it in the class. + ColPartitionGrid* part_grid_; + + // A simple array of pointers to the best assigned column division at + // each grid y coordinate. This pointer is passed in from the caller, so do + // NOT destroy it in the class. + ColPartitionSet** best_columns_; + + // The super bounding box of all cps in the part_grid_. + TBOX* cps_super_bbox_; + + // The seed ColPartition for equation region. + GenericVector cp_seeds_; + + // The resolution (dpi) of the processing image. + int resolution_; + + // The number of pages we have processed. + int page_count_; + }; + +} // namespace tesseract + +#endif // TESSERACT_CCMAIN_EQUATIONDETECT_H_ diff --git a/3rdparty/hgOCR/include/ccmain/fixspace.cpp b/3rdparty/hgOCR/include/ccmain/fixspace.cpp new file mode 100644 index 00000000..2bcf3d2f --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/fixspace.cpp @@ -0,0 +1,876 @@ +/****************************************************************** + * File: fixspace.cpp (Formerly fixspace.c) + * Description: Implements a pass over the page res, exploring the alternative + * spacing possibilities, trying to use context to improve the + * word spacing +* Author: Phil Cheatle +* Created: Thu Oct 21 11:38:43 BST 1993 +* +* (C) Copyright 1993, Hewlett-Packard Ltd. +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** http://www.apache.org/licenses/LICENSE-2.0 +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +* +**********************************************************************/ + +#include +#include "reject.h" +#include "statistc.h" +#include "control.h" +#include "fixspace.h" +#include "genblob.h" +#include "tessvars.h" +#include "tessbox.h" +#include "globals.h" +#include "tesseractclass.h" + +#define PERFECT_WERDS 999 +#define MAXSPACING 128 /*max expected spacing in pix */ + +namespace tesseract { + + /** + * @name fix_fuzzy_spaces() + * Walk over the page finding sequences of words joined by fuzzy spaces. Extract + * them as a sublist, process the sublist to find the optimal arrangement of + * spaces then replace the sublist in the ROW_RES. + * + * @param monitor progress monitor + * @param word_count count of words in doc + * @param[out] page_res + */ + void Tesseract::fix_fuzzy_spaces(ETEXT_DESC *monitor, + inT32 word_count, + PAGE_RES *page_res) { + BLOCK_RES_IT block_res_it; + ROW_RES_IT row_res_it; + WERD_RES_IT word_res_it_from; + WERD_RES_IT word_res_it_to; + WERD_RES *word_res; + WERD_RES_LIST fuzzy_space_words; + inT16 new_length; + BOOL8 prevent_null_wd_fixsp; // DON'T process blobless wds + inT32 word_index; // current word + + block_res_it.set_to_list(&page_res->block_res_list); + word_index = 0; + for (block_res_it.mark_cycle_pt(); !block_res_it.cycled_list(); + block_res_it.forward()) { + row_res_it.set_to_list(&block_res_it.data()->row_res_list); + for (row_res_it.mark_cycle_pt(); !row_res_it.cycled_list(); + row_res_it.forward()) { + word_res_it_from.set_to_list(&row_res_it.data()->word_res_list); + while (!word_res_it_from.at_last()) { + word_res = word_res_it_from.data(); + while (!word_res_it_from.at_last() && + !(word_res->combination || + word_res_it_from.data_relative(1)->word->flag(W_FUZZY_NON) || + word_res_it_from.data_relative(1)->word->flag(W_FUZZY_SP))) { + fix_sp_fp_word(word_res_it_from, row_res_it.data()->row, + block_res_it.data()->block); + word_res = word_res_it_from.forward(); + word_index++; + if (monitor != NULL) { + monitor->ocr_alive = TRUE; + monitor->progress = 90 + 5 * word_index / word_count; + if (monitor->deadline_exceeded() || + (monitor->cancel != NULL && + (*monitor->cancel)(monitor->cancel_this, stats_.dict_words))) + return; + } + } + + if (!word_res_it_from.at_last()) { + word_res_it_to = word_res_it_from; + prevent_null_wd_fixsp = + word_res->word->cblob_list()->empty(); + if (check_debug_pt(word_res, 60)) + debug_fix_space_level.set_value(10); + word_res_it_to.forward(); + word_index++; + if (monitor != NULL) { + monitor->ocr_alive = TRUE; + monitor->progress = 90 + 5 * word_index / word_count; + if (monitor->deadline_exceeded() || + (monitor->cancel != NULL && + (*monitor->cancel)(monitor->cancel_this, stats_.dict_words))) + return; + } + while (!word_res_it_to.at_last() && + (word_res_it_to.data_relative(1)->word->flag(W_FUZZY_NON) || + word_res_it_to.data_relative(1)->word->flag(W_FUZZY_SP))) { + if (check_debug_pt(word_res, 60)) + debug_fix_space_level.set_value(10); + if (word_res->word->cblob_list()->empty()) + prevent_null_wd_fixsp = TRUE; + word_res = word_res_it_to.forward(); + } + if (check_debug_pt(word_res, 60)) + debug_fix_space_level.set_value(10); + if (word_res->word->cblob_list()->empty()) + prevent_null_wd_fixsp = TRUE; + if (prevent_null_wd_fixsp) { + word_res_it_from = word_res_it_to; + } + else { + fuzzy_space_words.assign_to_sublist(&word_res_it_from, + &word_res_it_to); + fix_fuzzy_space_list(fuzzy_space_words, + row_res_it.data()->row, + block_res_it.data()->block); + new_length = fuzzy_space_words.length(); + word_res_it_from.add_list_before(&fuzzy_space_words); + for (; + !word_res_it_from.at_last() && new_length > 0; + new_length--) { + word_res_it_from.forward(); + } + } + if (test_pt) + debug_fix_space_level.set_value(0); + } + fix_sp_fp_word(word_res_it_from, row_res_it.data()->row, + block_res_it.data()->block); + // Last word in row + } + } + } + } + + void Tesseract::fix_fuzzy_space_list(WERD_RES_LIST &best_perm, + ROW *row, + BLOCK* block) { + inT16 best_score; + WERD_RES_LIST current_perm; + inT16 current_score; + BOOL8 improved = FALSE; + + best_score = eval_word_spacing(best_perm); // default score + dump_words(best_perm, best_score, 1, improved); + + if (best_score != PERFECT_WERDS) + initialise_search(best_perm, current_perm); + + while ((best_score != PERFECT_WERDS) && !current_perm.empty()) { + match_current_words(current_perm, row, block); + current_score = eval_word_spacing(current_perm); + dump_words(current_perm, current_score, 2, improved); + if (current_score > best_score) { + best_perm.clear(); + best_perm.deep_copy(¤t_perm, &WERD_RES::deep_copy); + best_score = current_score; + improved = TRUE; + } + if (current_score < PERFECT_WERDS) + transform_to_next_perm(current_perm); + } + dump_words(best_perm, best_score, 3, improved); + } + +} // namespace tesseract + +void initialise_search(WERD_RES_LIST &src_list, WERD_RES_LIST &new_list) { + WERD_RES_IT src_it(&src_list); + WERD_RES_IT new_it(&new_list); + WERD_RES *src_wd; + WERD_RES *new_wd; + + for (src_it.mark_cycle_pt(); !src_it.cycled_list(); src_it.forward()) { + src_wd = src_it.data(); + if (!src_wd->combination) { + new_wd = WERD_RES::deep_copy(src_wd); + new_wd->combination = FALSE; + new_wd->part_of_combo = FALSE; + new_it.add_after_then_move(new_wd); + } + } +} + + +namespace tesseract { + void Tesseract::match_current_words(WERD_RES_LIST &words, ROW *row, + BLOCK* block) { + WERD_RES_IT word_it(&words); + WERD_RES *word; + // Since we are not using PAGE_RES to iterate over words, we need to update + // prev_word_best_choice_ before calling classify_word_pass2(). + prev_word_best_choice_ = NULL; + for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) { + word = word_it.data(); + if ((!word->part_of_combo) && (word->box_word == NULL)) { + WordData word_data(block, row, word); + SetupWordPassN(2, &word_data); + classify_word_and_language(2, NULL, &word_data); + } + prev_word_best_choice_ = word->best_choice; + } + } + + /** + * @name eval_word_spacing() + * The basic measure is the number of characters in contextually confirmed + * words. (I.e the word is done) + * If all words are contextually confirmed the evaluation is deemed perfect. + * + * Some fiddles are done to handle "1"s as these are VERY frequent causes of + * fuzzy spaces. The problem with the basic measure is that "561 63" would score + * the same as "56163", though given our knowledge that the space is fuzzy, and + * that there is a "1" next to the fuzzy space, we need to ensure that "56163" + * is preferred. + * + * The solution is to NOT COUNT the score of any word which has a digit at one + * end and a "1Il" as the character the other side of the space. + * + * Conversly, any character next to a "1" within a word is counted as a positive + * score. Thus "561 63" would score 4 (3 chars in a numeric word plus 1 side of + * the "1" joined). "56163" would score 7 - all chars in a numeric word + 2 + * sides of a "1" joined. + * + * The joined 1 rule is applied to any word REGARDLESS of contextual + * confirmation. Thus "PS7a71 3/7a" scores 1 (neither word is contexutally + * confirmed. The only score is from the joined 1. "PS7a713/7a" scores 2. + * + */ + inT16 Tesseract::eval_word_spacing(WERD_RES_LIST &word_res_list) { + WERD_RES_IT word_res_it(&word_res_list); + inT16 total_score = 0; + inT16 word_count = 0; + inT16 done_word_count = 0; + inT16 word_len; + inT16 i; + inT16 offset; + WERD_RES *word; // current word + inT16 prev_word_score = 0; + BOOL8 prev_word_done = FALSE; + BOOL8 prev_char_1 = FALSE; // prev ch a "1/I/l"? + BOOL8 prev_char_digit = FALSE; // prev ch 2..9 or 0 + BOOL8 current_char_1 = FALSE; + BOOL8 current_word_ok_so_far; + STRING punct_chars = "!\"`',.:;"; + BOOL8 prev_char_punct = FALSE; + BOOL8 current_char_punct = FALSE; + BOOL8 word_done = FALSE; + + do { + word = word_res_it.data(); + word_done = fixspace_thinks_word_done(word); + word_count++; + if (word->tess_failed) { + total_score += prev_word_score; + if (prev_word_done) + done_word_count++; + prev_word_score = 0; + prev_char_1 = FALSE; + prev_char_digit = FALSE; + prev_word_done = FALSE; + } + else { + /* + Can we add the prev word score and potentially count this word? + Yes IF it didn't end in a 1 when the first char of this word is a digit + AND it didn't end in a digit when the first char of this word is a 1 + */ + word_len = word->reject_map.length(); + current_word_ok_so_far = FALSE; + if (!((prev_char_1 && digit_or_numeric_punct(word, 0)) || + (prev_char_digit && ( + (word_done && + word->best_choice->unichar_lengths().string()[0] == 1 && + word->best_choice->unichar_string()[0] == '1') || + (!word_done && STRING(conflict_set_I_l_1).contains( + word->best_choice->unichar_string()[0])))))) { + total_score += prev_word_score; + if (prev_word_done) + done_word_count++; + current_word_ok_so_far = word_done; + } + + if (current_word_ok_so_far) { + prev_word_done = TRUE; + prev_word_score = word_len; + } + else { + prev_word_done = FALSE; + prev_word_score = 0; + } + + /* Add 1 to total score for every joined 1 regardless of context and + rejtn */ + for (i = 0, prev_char_1 = FALSE; i < word_len; i++) { + current_char_1 = word->best_choice->unichar_string()[i] == '1'; + if (prev_char_1 || (current_char_1 && (i > 0))) + total_score++; + prev_char_1 = current_char_1; + } + + /* Add 1 to total score for every joined punctuation regardless of context + and rejtn */ + if (tessedit_prefer_joined_punct) { + for (i = 0, offset = 0, prev_char_punct = FALSE; i < word_len; + offset += word->best_choice->unichar_lengths()[i++]) { + current_char_punct = + punct_chars.contains(word->best_choice->unichar_string()[offset]); + if (prev_char_punct || (current_char_punct && i > 0)) + total_score++; + prev_char_punct = current_char_punct; + } + } + prev_char_digit = digit_or_numeric_punct(word, word_len - 1); + for (i = 0, offset = 0; i < word_len - 1; + offset += word->best_choice->unichar_lengths()[i++]); + prev_char_1 = + ((word_done && (word->best_choice->unichar_string()[offset] == '1')) + || (!word_done && STRING(conflict_set_I_l_1).contains( + word->best_choice->unichar_string()[offset]))); + } + /* Find next word */ + do { + word_res_it.forward(); + } while (word_res_it.data()->part_of_combo); + } while (!word_res_it.at_first()); + total_score += prev_word_score; + if (prev_word_done) + done_word_count++; + if (done_word_count == word_count) + return PERFECT_WERDS; + else + return total_score; + } + + BOOL8 Tesseract::digit_or_numeric_punct(WERD_RES *word, int char_position) { + int i; + int offset; + + for (i = 0, offset = 0; i < char_position; + offset += word->best_choice->unichar_lengths()[i++]); + return ( + word->uch_set->get_isdigit( + word->best_choice->unichar_string().string() + offset, + word->best_choice->unichar_lengths()[i]) || + (word->best_choice->permuter() == NUMBER_PERM && + STRING(numeric_punctuation).contains( + word->best_choice->unichar_string().string()[offset]))); + } + +} // namespace tesseract + + +/** + * @name transform_to_next_perm() + * Examines the current word list to find the smallest word gap size. Then walks + * the word list closing any gaps of this size by either inserted new + * combination words, or extending existing ones. + * + * The routine COULD be limited to stop it building words longer than N blobs. + * + * If there are no more gaps then it DELETES the entire list and returns the + * empty list to cause termination. + */ +void transform_to_next_perm(WERD_RES_LIST &words) { + WERD_RES_IT word_it(&words); + WERD_RES_IT prev_word_it(&words); + WERD_RES *word; + WERD_RES *prev_word; + WERD_RES *combo; + WERD *copy_word; + inT16 prev_right = -MAX_INT16; + TBOX box; + inT16 gap; + inT16 min_gap = MAX_INT16; + + for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) { + word = word_it.data(); + if (!word->part_of_combo) { + box = word->word->bounding_box(); + if (prev_right > -MAX_INT16) { + gap = box.left() - prev_right; + if (gap < min_gap) + min_gap = gap; + } + prev_right = box.right(); + } + } + if (min_gap < MAX_INT16) { + prev_right = -MAX_INT16; // back to start + word_it.set_to_list(&words); + // Note: we can't use cycle_pt due to inserted combos at start of list. + for (; (prev_right == -MAX_INT16) || !word_it.at_first(); + word_it.forward()) { + word = word_it.data(); + if (!word->part_of_combo) { + box = word->word->bounding_box(); + if (prev_right > -MAX_INT16) { + gap = box.left() - prev_right; + if (gap <= min_gap) { + prev_word = prev_word_it.data(); + if (prev_word->combination) { + combo = prev_word; + } + else { + /* Make a new combination and insert before + * the first word being joined. */ + copy_word = new WERD; + *copy_word = *(prev_word->word); + // deep copy + combo = new WERD_RES(copy_word); + combo->combination = TRUE; + combo->x_height = prev_word->x_height; + prev_word->part_of_combo = TRUE; + prev_word_it.add_before_then_move(combo); + } + combo->word->set_flag(W_EOL, word->word->flag(W_EOL)); + if (word->combination) { + combo->word->join_on(word->word); + // Move blobs to combo + // old combo no longer needed + delete word_it.extract(); + } + else { + // Copy current wd to combo + combo->copy_on(word); + word->part_of_combo = TRUE; + } + combo->done = FALSE; + combo->ClearResults(); + } + else { + prev_word_it = word_it; // catch up + } + } + prev_right = box.right(); + } + } + } + else { + words.clear(); // signal termination + } +} + +namespace tesseract { + void Tesseract::dump_words(WERD_RES_LIST &perm, inT16 score, + inT16 mode, BOOL8 improved) { + WERD_RES_IT word_res_it(&perm); + + if (debug_fix_space_level > 0) { + if (mode == 1) { + stats_.dump_words_str = ""; + for (word_res_it.mark_cycle_pt(); !word_res_it.cycled_list(); + word_res_it.forward()) { + if (!word_res_it.data()->part_of_combo) { + stats_.dump_words_str += + word_res_it.data()->best_choice->unichar_string(); + stats_.dump_words_str += ' '; + } + } + } + + if (debug_fix_space_level > 1) { + switch (mode) { + case 1: + tprintf("EXTRACTED (%d): \"", score); + break; + case 2: + tprintf("TESTED (%d): \"", score); + break; + case 3: + tprintf("RETURNED (%d): \"", score); + break; + } + + for (word_res_it.mark_cycle_pt(); !word_res_it.cycled_list(); + word_res_it.forward()) { + if (!word_res_it.data()->part_of_combo) { + tprintf("%s/%1d ", + word_res_it.data()->best_choice->unichar_string().string(), + (int)word_res_it.data()->best_choice->permuter()); + } + } + tprintf("\"\n"); + } + else if (improved) { + tprintf("FIX SPACING \"%s\" => \"", stats_.dump_words_str.string()); + for (word_res_it.mark_cycle_pt(); !word_res_it.cycled_list(); + word_res_it.forward()) { + if (!word_res_it.data()->part_of_combo) { + tprintf("%s/%1d ", + word_res_it.data()->best_choice->unichar_string().string(), + (int)word_res_it.data()->best_choice->permuter()); + } + } + tprintf("\"\n"); + } + } + } + + BOOL8 Tesseract::fixspace_thinks_word_done(WERD_RES *word) { + if (word->done) + return TRUE; + + /* + Use all the standard pass 2 conditions for mode 5 in set_done() in + reject.c BUT DON'T REJECT IF THE WERD IS AMBIGUOUS - FOR SPACING WE DON'T + CARE WHETHER WE HAVE of/at on/an etc. + */ + if (fixsp_done_mode > 0 && + (word->tess_accepted || + (fixsp_done_mode == 2 && word->reject_map.reject_count() == 0) || + fixsp_done_mode == 3) && + (strchr(word->best_choice->unichar_string().string(), ' ') == NULL) && + ((word->best_choice->permuter() == SYSTEM_DAWG_PERM) || + (word->best_choice->permuter() == FREQ_DAWG_PERM) || + (word->best_choice->permuter() == USER_DAWG_PERM) || + (word->best_choice->permuter() == NUMBER_PERM))) { + return TRUE; + } + else { + return FALSE; + } + } + + + /** + * @name fix_sp_fp_word() + * Test the current word to see if it can be split by deleting noise blobs. If + * so, do the business. + * Return with the iterator pointing to the same place if the word is unchanged, + * or the last of the replacement words. + */ + void Tesseract::fix_sp_fp_word(WERD_RES_IT &word_res_it, ROW *row, + BLOCK* block) { + WERD_RES *word_res; + WERD_RES_LIST sub_word_list; + WERD_RES_IT sub_word_list_it(&sub_word_list); + inT16 blob_index; + inT16 new_length; + float junk; + + word_res = word_res_it.data(); + if (word_res->word->flag(W_REP_CHAR) || + word_res->combination || + word_res->part_of_combo || + !word_res->word->flag(W_DONT_CHOP)) + return; + + blob_index = worst_noise_blob(word_res, &junk); + if (blob_index < 0) + return; + + if (debug_fix_space_level > 1) { + tprintf("FP fixspace working on \"%s\"\n", + word_res->best_choice->unichar_string().string()); + } + word_res->word->rej_cblob_list()->sort(c_blob_comparator); + sub_word_list_it.add_after_stay_put(word_res_it.extract()); + fix_noisy_space_list(sub_word_list, row, block); + new_length = sub_word_list.length(); + word_res_it.add_list_before(&sub_word_list); + for (; !word_res_it.at_last() && new_length > 1; new_length--) { + word_res_it.forward(); + } + } + + void Tesseract::fix_noisy_space_list(WERD_RES_LIST &best_perm, ROW *row, + BLOCK* block) { + inT16 best_score; + WERD_RES_IT best_perm_it(&best_perm); + WERD_RES_LIST current_perm; + WERD_RES_IT current_perm_it(¤t_perm); + WERD_RES *old_word_res; + inT16 current_score; + BOOL8 improved = FALSE; + + best_score = fp_eval_word_spacing(best_perm); // default score + + dump_words(best_perm, best_score, 1, improved); + + old_word_res = best_perm_it.data(); + // Even deep_copy doesn't copy the underlying WERD unless its combination + // flag is true!. + old_word_res->combination = TRUE; // Kludge to force deep copy + current_perm_it.add_to_end(WERD_RES::deep_copy(old_word_res)); + old_word_res->combination = FALSE; // Undo kludge + + break_noisiest_blob_word(current_perm); + + while (best_score != PERFECT_WERDS && !current_perm.empty()) { + match_current_words(current_perm, row, block); + current_score = fp_eval_word_spacing(current_perm); + dump_words(current_perm, current_score, 2, improved); + if (current_score > best_score) { + best_perm.clear(); + best_perm.deep_copy(¤t_perm, &WERD_RES::deep_copy); + best_score = current_score; + improved = TRUE; + } + if (current_score < PERFECT_WERDS) { + break_noisiest_blob_word(current_perm); + } + } + dump_words(best_perm, best_score, 3, improved); + } + + + /** + * break_noisiest_blob_word() + * Find the word with the blob which looks like the worst noise. + * Break the word into two, deleting the noise blob. + */ + void Tesseract::break_noisiest_blob_word(WERD_RES_LIST &words) { + WERD_RES_IT word_it(&words); + WERD_RES_IT worst_word_it; + float worst_noise_score = 9999; + int worst_blob_index = -1; // Noisiest blob of noisiest wd + int blob_index; // of wds noisiest blob + float noise_score; // of wds noisiest blob + WERD_RES *word_res; + C_BLOB_IT blob_it; + C_BLOB_IT rej_cblob_it; + C_BLOB_LIST new_blob_list; + C_BLOB_IT new_blob_it; + C_BLOB_IT new_rej_cblob_it; + WERD *new_word; + inT16 start_of_noise_blob; + inT16 i; + + for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) { + blob_index = worst_noise_blob(word_it.data(), &noise_score); + if (blob_index > -1 && worst_noise_score > noise_score) { + worst_noise_score = noise_score; + worst_blob_index = blob_index; + worst_word_it = word_it; + } + } + if (worst_blob_index < 0) { + words.clear(); // signal termination + return; + } + + /* Now split the worst_word_it */ + + word_res = worst_word_it.data(); + + /* Move blobs before noise blob to a new bloblist */ + + new_blob_it.set_to_list(&new_blob_list); + blob_it.set_to_list(word_res->word->cblob_list()); + for (i = 0; i < worst_blob_index; i++, blob_it.forward()) { + new_blob_it.add_after_then_move(blob_it.extract()); + } + start_of_noise_blob = blob_it.data()->bounding_box().left(); + delete blob_it.extract(); // throw out noise blob + + new_word = new WERD(&new_blob_list, word_res->word); + new_word->set_flag(W_EOL, FALSE); + word_res->word->set_flag(W_BOL, FALSE); + word_res->word->set_blanks(1); // After break + + new_rej_cblob_it.set_to_list(new_word->rej_cblob_list()); + rej_cblob_it.set_to_list(word_res->word->rej_cblob_list()); + for (; + (!rej_cblob_it.empty() && + (rej_cblob_it.data()->bounding_box().left() < start_of_noise_blob)); + rej_cblob_it.forward()) { + new_rej_cblob_it.add_after_then_move(rej_cblob_it.extract()); + } + + WERD_RES* new_word_res = new WERD_RES(new_word); + new_word_res->combination = TRUE; + worst_word_it.add_before_then_move(new_word_res); + + word_res->ClearResults(); + } + + inT16 Tesseract::worst_noise_blob(WERD_RES *word_res, + float *worst_noise_score) { + float noise_score[512]; + int i; + int min_noise_blob; // 1st contender + int max_noise_blob; // last contender + int non_noise_count; + int worst_noise_blob; // Worst blob + float small_limit = kBlnXHeight * fixsp_small_outlines_size; + float non_noise_limit = kBlnXHeight * 0.8; + + if (word_res->rebuild_word == NULL) + return -1; // Can't handle cube words. + + // Normalised. + int blob_count = word_res->box_word->length(); + ASSERT_HOST(blob_count <= 512); + if (blob_count < 5) + return -1; // too short to split + + /* Get the noise scores for all blobs */ + +#ifndef SECURE_NAMES + if (debug_fix_space_level > 5) + tprintf("FP fixspace Noise metrics for \"%s\": ", + word_res->best_choice->unichar_string().string()); +#endif + + for (i = 0; i < blob_count && i < word_res->rebuild_word->NumBlobs(); i++) { + TBLOB* blob = word_res->rebuild_word->blobs[i]; + if (word_res->reject_map[i].accepted()) + noise_score[i] = non_noise_limit; + else + noise_score[i] = blob_noise_score(blob); + + if (debug_fix_space_level > 5) + tprintf("%1.1f ", noise_score[i]); + } + if (debug_fix_space_level > 5) + tprintf("\n"); + + /* Now find the worst one which is far enough away from the end of the word */ + + non_noise_count = 0; + for (i = 0; i < blob_count && non_noise_count < fixsp_non_noise_limit; i++) { + if (noise_score[i] >= non_noise_limit) { + non_noise_count++; + } + } + if (non_noise_count < fixsp_non_noise_limit) + return -1; + + min_noise_blob = i; + + non_noise_count = 0; + for (i = blob_count - 1; i >= 0 && non_noise_count < fixsp_non_noise_limit; + i--) { + if (noise_score[i] >= non_noise_limit) { + non_noise_count++; + } + } + if (non_noise_count < fixsp_non_noise_limit) + return -1; + + max_noise_blob = i; + + if (min_noise_blob > max_noise_blob) + return -1; + + *worst_noise_score = small_limit; + worst_noise_blob = -1; + for (i = min_noise_blob; i <= max_noise_blob; i++) { + if (noise_score[i] < *worst_noise_score) { + worst_noise_blob = i; + *worst_noise_score = noise_score[i]; + } + } + return worst_noise_blob; + } + + float Tesseract::blob_noise_score(TBLOB *blob) { + TBOX box; // BB of outline + inT16 outline_count = 0; + inT16 max_dimension; + inT16 largest_outline_dimension = 0; + + for (TESSLINE* ol = blob->outlines; ol != NULL; ol = ol->next) { + outline_count++; + box = ol->bounding_box(); + if (box.height() > box.width()) { + max_dimension = box.height(); + } + else { + max_dimension = box.width(); + } + + if (largest_outline_dimension < max_dimension) + largest_outline_dimension = max_dimension; + } + + if (outline_count > 5) { + // penalise LOTS of blobs + largest_outline_dimension *= 2; + } + + box = blob->bounding_box(); + if (box.bottom() > kBlnBaselineOffset * 4 || + box.top() < kBlnBaselineOffset / 2) { + // Lax blob is if high or low + largest_outline_dimension /= 2; + } + + return largest_outline_dimension; + } +} // namespace tesseract + +void fixspace_dbg(WERD_RES *word) { + TBOX box = word->word->bounding_box(); + BOOL8 show_map_detail = FALSE; + inT16 i; + + box.print(); + tprintf(" \"%s\" ", word->best_choice->unichar_string().string()); + tprintf("Blob count: %d (word); %d/%d (rebuild word)\n", + word->word->cblob_list()->length(), + word->rebuild_word->NumBlobs(), + word->box_word->length()); + word->reject_map.print(debug_fp); + tprintf("\n"); + if (show_map_detail) { + tprintf("\"%s\"\n", word->best_choice->unichar_string().string()); + for (i = 0; word->best_choice->unichar_string()[i] != '\0'; i++) { + tprintf("**** \"%c\" ****\n", word->best_choice->unichar_string()[i]); + word->reject_map[i].full_print(debug_fp); + } + } + + tprintf("Tess Accepted: %s\n", word->tess_accepted ? "TRUE" : "FALSE"); + tprintf("Done flag: %s\n\n", word->done ? "TRUE" : "FALSE"); +} + + +/** + * fp_eval_word_spacing() + * Evaluation function for fixed pitch word lists. + * + * Basically, count the number of "nice" characters - those which are in tess + * acceptable words or in dict words and are not rejected. + * Penalise any potential noise chars + */ +namespace tesseract { + inT16 Tesseract::fp_eval_word_spacing(WERD_RES_LIST &word_res_list) { + WERD_RES_IT word_it(&word_res_list); + WERD_RES *word; + inT16 score = 0; + inT16 i; + float small_limit = kBlnXHeight * fixsp_small_outlines_size; + + for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) { + word = word_it.data(); + if (word->rebuild_word == NULL) + continue; // Can't handle cube words. + if (word->done || + word->tess_accepted || + word->best_choice->permuter() == SYSTEM_DAWG_PERM || + word->best_choice->permuter() == FREQ_DAWG_PERM || + word->best_choice->permuter() == USER_DAWG_PERM || + safe_dict_word(word) > 0) { + int num_blobs = word->rebuild_word->NumBlobs(); + UNICHAR_ID space = word->uch_set->unichar_to_id(" "); + for (i = 0; i < word->best_choice->length() && i < num_blobs; ++i) { + TBLOB* blob = word->rebuild_word->blobs[i]; + if (word->best_choice->unichar_id(i) == space || + blob_noise_score(blob) < small_limit) { + score -= 1; // penalise possibly erroneous non-space + } + else if (word->reject_map[i].accepted()) { + score++; + } + } + } + } + if (score < 0) + score = 0; + return score; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/fixspace.h b/3rdparty/hgOCR/include/ccmain/fixspace.h new file mode 100644 index 00000000..48f2d4fc --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/fixspace.h @@ -0,0 +1,31 @@ +/****************************************************************** + * File: fixspace.h (Formerly fixspace.h) + * Description: Implements a pass over the page res, exploring the alternative + * spacing possibilities, trying to use context to improve the + word spacing +* Author: Phil Cheatle +* Created: Thu Oct 21 11:38:43 BST 1993 +* +* (C) Copyright 1993, Hewlett-Packard Ltd. +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** http://www.apache.org/licenses/LICENSE-2.0 +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +* +**********************************************************************/ + +#ifndef FIXSPACE_H +#define FIXSPACE_H + +#include "pageres.h" +#include "params.h" + +void initialise_search(WERD_RES_LIST &src_list, WERD_RES_LIST &new_list); +void transform_to_next_perm(WERD_RES_LIST &words); +void fixspace_dbg(WERD_RES *word); +#endif diff --git a/3rdparty/hgOCR/include/ccmain/fixxht.cpp b/3rdparty/hgOCR/include/ccmain/fixxht.cpp new file mode 100644 index 00000000..658680ef --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/fixxht.cpp @@ -0,0 +1,216 @@ +/********************************************************************** + * File: fixxht.cpp (Formerly fixxht.c) + * Description: Improve x_ht and look out for case inconsistencies + * Author: Phil Cheatle + * Created: Thu Aug 5 14:11:08 BST 1993 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include "params.h" +#include "float2int.h" +#include "tesseractclass.h" + +namespace tesseract { + + // Fixxht overview. + // Premise: Initial estimate of x-height is adequate most of the time, but + // occasionally it is incorrect. Most notable causes of failure are: + // 1. Small caps, where the top of the caps is the same as the body text + // xheight. For small caps words the xheight needs to be reduced to correctly + // recognize the caps in the small caps word. + // 2. All xheight lines, such as summer. Here the initial estimate will have + // guessed that the blob tops are caps and will have placed the xheight too low. + // 3. Noise/logos beside words, or changes in font size on a line. Such + // things can blow the statistics and cause an incorrect estimate. + // 4. Incorrect baseline. Can happen when 2 columns are incorrectly merged. + // In this case the x-height is often still correct. + // + // Algorithm. + // Compare the vertical position (top only) of alphnumerics in a word with + // the range of positions in training data (in the unicharset). + // See CountMisfitTops. If any characters disagree sufficiently with the + // initial xheight estimate, then recalculate the xheight, re-run OCR on + // the word, and if the number of vertical misfits goes down, along with + // either the word rating or certainty, then keep the new xheight. + // The new xheight is calculated as follows:ComputeCompatibleXHeight + // For each alphanumeric character that has a vertically misplaced top + // (a misfit), yet its bottom is within the acceptable range (ie it is not + // likely a sub-or super-script) calculate the range of acceptable xheight + // positions from its range of tops, and give each value in the range a + // number of votes equal to the distance of its top from its acceptance range. + // The x-height position with the median of the votes becomes the new + // x-height. This assumes that most characters will be correctly recognized + // even if the x-height is incorrect. This is not a terrible assumption, but + // it is not great. An improvement would be to use a classifier that does + // not care about vertical position or scaling at all. + // Separately collect stats on shifted baselines and apply the same logic to + // computing a best-fit shift to fix the error. If the baseline needs to be + // shifted, but the x-height is OK, returns the original x-height along with + // the baseline shift to indicate that recognition needs to re-run. + + // If the max-min top of a unicharset char is bigger than kMaxCharTopRange + // then the char top cannot be used to judge misfits or suggest a new top. + const int kMaxCharTopRange = 48; + + // Returns the number of misfit blob tops in this word. + int Tesseract::CountMisfitTops(WERD_RES *word_res) { + int bad_blobs = 0; + int num_blobs = word_res->rebuild_word->NumBlobs(); + for (int blob_id = 0; blob_id < num_blobs; ++blob_id) { + TBLOB* blob = word_res->rebuild_word->blobs[blob_id]; + UNICHAR_ID class_id = word_res->best_choice->unichar_id(blob_id); + if (unicharset.get_isalpha(class_id) || unicharset.get_isdigit(class_id)) { + int top = blob->bounding_box().top(); + if (top >= INT_FEAT_RANGE) + top = INT_FEAT_RANGE - 1; + int min_bottom, max_bottom, min_top, max_top; + unicharset.get_top_bottom(class_id, &min_bottom, &max_bottom, + &min_top, &max_top); + if (max_top - min_top > kMaxCharTopRange) + continue; + bool bad = top < min_top - x_ht_acceptance_tolerance || + top > max_top + x_ht_acceptance_tolerance; + if (bad) + ++bad_blobs; + if (debug_x_ht_level >= 1) { + tprintf("Class %s is %s with top %d vs limits of %d->%d, +/-%d\n", + unicharset.id_to_unichar(class_id), + bad ? "Misfit" : "OK", top, min_top, max_top, + static_cast(x_ht_acceptance_tolerance)); + } + } + } + return bad_blobs; + } + + // Returns a new x-height maximally compatible with the result in word_res. + // See comment above for overall algorithm. + float Tesseract::ComputeCompatibleXheight(WERD_RES *word_res, + float* baseline_shift) { + STATS top_stats(0, MAX_UINT8); + STATS shift_stats(-MAX_UINT8, MAX_UINT8); + int bottom_shift = 0; + int num_blobs = word_res->rebuild_word->NumBlobs(); + do { + top_stats.clear(); + shift_stats.clear(); + for (int blob_id = 0; blob_id < num_blobs; ++blob_id) { + TBLOB* blob = word_res->rebuild_word->blobs[blob_id]; + UNICHAR_ID class_id = word_res->best_choice->unichar_id(blob_id); + if (unicharset.get_isalpha(class_id) || + unicharset.get_isdigit(class_id)) { + int top = blob->bounding_box().top() + bottom_shift; + // Clip the top to the limit of normalized feature space. + if (top >= INT_FEAT_RANGE) + top = INT_FEAT_RANGE - 1; + int bottom = blob->bounding_box().bottom() + bottom_shift; + int min_bottom, max_bottom, min_top, max_top; + unicharset.get_top_bottom(class_id, &min_bottom, &max_bottom, + &min_top, &max_top); + // Chars with a wild top range would mess up the result so ignore them. + if (max_top - min_top > kMaxCharTopRange) + continue; + int misfit_dist = MAX((min_top - x_ht_acceptance_tolerance) - top, + top - (max_top + x_ht_acceptance_tolerance)); + int height = top - kBlnBaselineOffset; + if (debug_x_ht_level >= 2) { + tprintf("Class %s: height=%d, bottom=%d,%d top=%d,%d, actual=%d,%d: ", + unicharset.id_to_unichar(class_id), + height, min_bottom, max_bottom, min_top, max_top, + bottom, top); + } + // Use only chars that fit in the expected bottom range, and where + // the range of tops is sensibly near the xheight. + if (min_bottom <= bottom + x_ht_acceptance_tolerance && + bottom - x_ht_acceptance_tolerance <= max_bottom && + min_top > kBlnBaselineOffset && + max_top - kBlnBaselineOffset >= kBlnXHeight && + misfit_dist > 0) { + // Compute the x-height position using proportionality between the + // actual height and expected height. + int min_xht = DivRounded(height * kBlnXHeight, + max_top - kBlnBaselineOffset); + int max_xht = DivRounded(height * kBlnXHeight, + min_top - kBlnBaselineOffset); + if (debug_x_ht_level >= 2) { + tprintf(" xht range min=%d, max=%d\n", min_xht, max_xht); + } + // The range of expected heights gets a vote equal to the distance + // of the actual top from the expected top. + for (int y = min_xht; y <= max_xht; ++y) + top_stats.add(y, misfit_dist); + } + else if ((min_bottom > bottom + x_ht_acceptance_tolerance || + bottom - x_ht_acceptance_tolerance > max_bottom) && + bottom_shift == 0) { + // Get the range of required bottom shift. + int min_shift = min_bottom - bottom; + int max_shift = max_bottom - bottom; + if (debug_x_ht_level >= 2) { + tprintf(" bottom shift min=%d, max=%d\n", min_shift, max_shift); + } + // The range of expected shifts gets a vote equal to the min distance + // of the actual bottom from the expected bottom, spread over the + // range of its acceptance. + int misfit_weight = abs(min_shift); + if (max_shift > min_shift) + misfit_weight /= max_shift - min_shift; + for (int y = min_shift; y <= max_shift; ++y) + shift_stats.add(y, misfit_weight); + } + else { + if (bottom_shift == 0) { + // Things with bottoms that are already ok need to say so, on the + // 1st iteration only. + shift_stats.add(0, kBlnBaselineOffset); + } + if (debug_x_ht_level >= 2) { + tprintf(" already OK\n"); + } + } + } + } + if (shift_stats.get_total() > top_stats.get_total()) { + bottom_shift = IntCastRounded(shift_stats.median()); + if (debug_x_ht_level >= 2) { + tprintf("Applying bottom shift=%d\n", bottom_shift); + } + } + } while (bottom_shift != 0 && + top_stats.get_total() < shift_stats.get_total()); + // Baseline shift is opposite sign to the bottom shift. + *baseline_shift = -bottom_shift / word_res->denorm.y_scale(); + if (debug_x_ht_level >= 2) { + tprintf("baseline shift=%g\n", *baseline_shift); + } + if (top_stats.get_total() == 0) + return bottom_shift != 0 ? word_res->x_height : 0.0f; + // The new xheight is just the median vote, which is then scaled out + // of BLN space back to pixel space to get the x-height in pixel space. + float new_xht = top_stats.median(); + if (debug_x_ht_level >= 2) { + tprintf("Median xht=%f\n", new_xht); + tprintf("Mode20:A: New x-height = %f (norm), %f (orig)\n", + new_xht, new_xht / word_res->denorm.y_scale()); + } + // The xheight must change by at least x_ht_min_change to be used. + if (fabs(new_xht - kBlnXHeight) >= x_ht_min_change) + return new_xht / word_res->denorm.y_scale(); + else + return bottom_shift != 0 ? word_res->x_height : 0.0f; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/ltrresultiterator.cpp b/3rdparty/hgOCR/include/ccmain/ltrresultiterator.cpp new file mode 100644 index 00000000..f2e59b99 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/ltrresultiterator.cpp @@ -0,0 +1,390 @@ +/////////////////////////////////////////////////////////////////////// +// File: ltrresultiterator.cpp +// Description: Iterator for tesseract results in strict left-to-right +// order that avoids using tesseract internal data structures. +// Author: Ray Smith +// Created: Fri Feb 26 14:32:09 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "ltrresultiterator.h" + +#include "allheaders.h" +#include "pageres.h" +#include "strngs.h" +#include "tesseractclass.h" + +namespace tesseract { + + LTRResultIterator::LTRResultIterator(PAGE_RES* page_res, Tesseract* tesseract, + int scale, int scaled_yres, + int rect_left, int rect_top, + int rect_width, int rect_height) + : PageIterator(page_res, tesseract, scale, scaled_yres, + rect_left, rect_top, rect_width, rect_height), + line_separator_("\n"), + paragraph_separator_("\n") { + } + + LTRResultIterator::~LTRResultIterator() { + } + + // Returns the null terminated UTF-8 encoded text string for the current + // object at the given level. Use delete [] to free after use. + char* LTRResultIterator::GetUTF8Text(PageIteratorLevel level) const { + if (it_->word() == NULL) return NULL; // Already at the end! + STRING text; + PAGE_RES_IT res_it(*it_); + WERD_CHOICE* best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + if (level == RIL_SYMBOL) { + text = res_it.word()->BestUTF8(blob_index_, false); + } + else if (level == RIL_WORD) { + text = best_choice->unichar_string(); + } + else { + bool eol = false; // end of line? + bool eop = false; // end of paragraph? + do { // for each paragraph in a block + do { // for each text line in a paragraph + do { // for each word in a text line + best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + text += best_choice->unichar_string(); + text += " "; + res_it.forward(); + eol = res_it.row() != res_it.prev_row(); + } while (!eol); + text.truncate_at(text.length() - 1); + text += line_separator_; + eop = res_it.block() != res_it.prev_block() || + res_it.row()->row->para() != res_it.prev_row()->row->para(); + } while (level != RIL_TEXTLINE && !eop); + if (eop) text += paragraph_separator_; + } while (level == RIL_BLOCK && res_it.block() == res_it.prev_block()); + } + int length = text.length() + 1; + char* result = new char[length]; + strncpy(result, text.string(), length); + return result; + } + + // Set the string inserted at the end of each text line. "\n" by default. + void LTRResultIterator::SetLineSeparator(const char *new_line) { + line_separator_ = new_line; + } + + // Set the string inserted at the end of each paragraph. "\n" by default. + void LTRResultIterator::SetParagraphSeparator(const char *new_para) { + paragraph_separator_ = new_para; + } + + // Returns the mean confidence of the current object at the given level. + // The number should be interpreted as a percent probability. (0.0f-100.0f) + float LTRResultIterator::Confidence(PageIteratorLevel level) const { + if (it_->word() == NULL) return 0.0f; // Already at the end! + float mean_certainty = 0.0f; + int certainty_count = 0; + PAGE_RES_IT res_it(*it_); + WERD_CHOICE* best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + switch (level) { + case RIL_BLOCK: + do { + best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + mean_certainty += best_choice->certainty(); + ++certainty_count; + res_it.forward(); + } while (res_it.block() == res_it.prev_block()); + break; + case RIL_PARA: + do { + best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + mean_certainty += best_choice->certainty(); + ++certainty_count; + res_it.forward(); + } while (res_it.block() == res_it.prev_block() && + res_it.row()->row->para() == res_it.prev_row()->row->para()); + break; + case RIL_TEXTLINE: + do { + best_choice = res_it.word()->best_choice; + ASSERT_HOST(best_choice != NULL); + mean_certainty += best_choice->certainty(); + ++certainty_count; + res_it.forward(); + } while (res_it.row() == res_it.prev_row()); + break; + case RIL_WORD: + mean_certainty += best_choice->certainty(); + ++certainty_count; + break; + case RIL_SYMBOL: + mean_certainty += best_choice->certainty(blob_index_); + ++certainty_count; + } + if (certainty_count > 0) { + mean_certainty /= certainty_count; + float confidence = 100 + 5 * mean_certainty; + if (confidence < 0.0f) confidence = 0.0f; + if (confidence > 100.0f) confidence = 100.0f; + return confidence; + } + return 0.0f; + } + + void LTRResultIterator::RowAttributes(float* row_height, float* descenders, + float* ascenders) const { + *row_height = it_->row()->row->x_height() + it_->row()->row->ascenders() - + it_->row()->row->descenders(); + *descenders = it_->row()->row->descenders(); + *ascenders = it_->row()->row->ascenders(); + } + + // Returns the font attributes of the current word. If iterating at a higher + // level object than words, eg textlines, then this will return the + // attributes of the first word in that textline. + // The actual return value is a string representing a font name. It points + // to an internal table and SHOULD NOT BE DELETED. Lifespan is the same as + // the iterator itself, ie rendered invalid by various members of + // TessBaseAPI, including Init, SetImage, End or deleting the TessBaseAPI. + // Pointsize is returned in printers points (1/72 inch.) + const char* LTRResultIterator::WordFontAttributes(bool* is_bold, + bool* is_italic, + bool* is_underlined, + bool* is_monospace, + bool* is_serif, + bool* is_smallcaps, + int* pointsize, + int* font_id) const { + if (it_->word() == NULL) return NULL; // Already at the end! + if (it_->word()->fontinfo == NULL) { + *font_id = -1; + return NULL; // No font information. + } + const FontInfo& font_info = *it_->word()->fontinfo; + *font_id = font_info.universal_id; + *is_bold = font_info.is_bold(); + *is_italic = font_info.is_italic(); + *is_underlined = false; // TODO(rays) fix this! + *is_monospace = font_info.is_fixed_pitch(); + *is_serif = font_info.is_serif(); + *is_smallcaps = it_->word()->small_caps; + float row_height = it_->row()->row->x_height() + + it_->row()->row->ascenders() - it_->row()->row->descenders(); + // Convert from pixels to printers points. + *pointsize = scaled_yres_ > 0 + ? static_cast(row_height * kPointsPerInch / scaled_yres_ + 0.5) + : 0; + + return font_info.name; + } + + // Returns the name of the language used to recognize this word. + const char* LTRResultIterator::WordRecognitionLanguage() const { + if (it_->word() == NULL || it_->word()->tesseract == NULL) return NULL; + return it_->word()->tesseract->lang.string(); + } + + // Return the overall directionality of this word. + StrongScriptDirection LTRResultIterator::WordDirection() const { + if (it_->word() == NULL) return DIR_NEUTRAL; + bool has_rtl = it_->word()->AnyRtlCharsInWord(); + bool has_ltr = it_->word()->AnyLtrCharsInWord(); + if (has_rtl && !has_ltr) + return DIR_RIGHT_TO_LEFT; + if (has_ltr && !has_rtl) + return DIR_LEFT_TO_RIGHT; + if (!has_ltr && !has_rtl) + return DIR_NEUTRAL; + return DIR_MIX; + } + + // Returns true if the current word was found in a dictionary. + bool LTRResultIterator::WordIsFromDictionary() const { + if (it_->word() == NULL) return false; // Already at the end! + int permuter = it_->word()->best_choice->permuter(); + return permuter == SYSTEM_DAWG_PERM || permuter == FREQ_DAWG_PERM || + permuter == USER_DAWG_PERM; + } + + // Returns true if the current word is numeric. + bool LTRResultIterator::WordIsNumeric() const { + if (it_->word() == NULL) return false; // Already at the end! + int permuter = it_->word()->best_choice->permuter(); + return permuter == NUMBER_PERM; + } + + // Returns true if the word contains blamer information. + bool LTRResultIterator::HasBlamerInfo() const { + return it_->word() != NULL && it_->word()->blamer_bundle != NULL && + it_->word()->blamer_bundle->HasDebugInfo(); + } + + // Returns the pointer to ParamsTrainingBundle stored in the BlamerBundle + // of the current word. + const void *LTRResultIterator::GetParamsTrainingBundle() const { + return (it_->word() != NULL && it_->word()->blamer_bundle != NULL) ? + &(it_->word()->blamer_bundle->params_training_bundle()) : NULL; + } + + // Returns the pointer to the string with blamer information for this word. + // Assumes that the word's blamer_bundle is not NULL. + const char *LTRResultIterator::GetBlamerDebug() const { + return it_->word()->blamer_bundle->debug().string(); + } + + // Returns the pointer to the string with misadaption information for this word. + // Assumes that the word's blamer_bundle is not NULL. + const char *LTRResultIterator::GetBlamerMisadaptionDebug() const { + return it_->word()->blamer_bundle->misadaption_debug().string(); + } + + // Returns true if a truth string was recorded for the current word. + bool LTRResultIterator::HasTruthString() const { + if (it_->word() == NULL) return false; // Already at the end! + if (it_->word()->blamer_bundle == NULL || + it_->word()->blamer_bundle->NoTruth()) { + return false; // no truth information for this word + } + return true; + } + + // Returns true if the given string is equivalent to the truth string for + // the current word. + bool LTRResultIterator::EquivalentToTruth(const char *str) const { + if (!HasTruthString()) return false; + ASSERT_HOST(it_->word()->uch_set != NULL); + WERD_CHOICE str_wd(str, *(it_->word()->uch_set)); + return it_->word()->blamer_bundle->ChoiceIsCorrect(&str_wd); + } + + // Returns the null terminated UTF-8 encoded truth string for the current word. + // Use delete [] to free after use. + char* LTRResultIterator::WordTruthUTF8Text() const { + if (!HasTruthString()) return NULL; + STRING truth_text = it_->word()->blamer_bundle->TruthString(); + int length = truth_text.length() + 1; + char* result = new char[length]; + strncpy(result, truth_text.string(), length); + return result; + } + + // Returns the null terminated UTF-8 encoded normalized OCR string for the + // current word. Use delete [] to free after use. + char* LTRResultIterator::WordNormedUTF8Text() const { + if (it_->word() == NULL) return NULL; // Already at the end! + STRING ocr_text; + WERD_CHOICE* best_choice = it_->word()->best_choice; + const UNICHARSET *unicharset = it_->word()->uch_set; + ASSERT_HOST(best_choice != NULL); + for (int i = 0; i < best_choice->length(); ++i) { + ocr_text += unicharset->get_normed_unichar(best_choice->unichar_id(i)); + } + int length = ocr_text.length() + 1; + char* result = new char[length]; + strncpy(result, ocr_text.string(), length); + return result; + } + + // Returns a pointer to serialized choice lattice. + // Fills lattice_size with the number of bytes in lattice data. + const char *LTRResultIterator::WordLattice(int *lattice_size) const { + if (it_->word() == NULL) return NULL; // Already at the end! + if (it_->word()->blamer_bundle == NULL) return NULL; + *lattice_size = it_->word()->blamer_bundle->lattice_size(); + return it_->word()->blamer_bundle->lattice_data(); + } + + // Returns true if the current symbol is a superscript. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool LTRResultIterator::SymbolIsSuperscript() const { + if (cblob_it_ == NULL && it_->word() != NULL) + return it_->word()->best_choice->BlobPosition(blob_index_) == + SP_SUPERSCRIPT; + return false; + } + + // Returns true if the current symbol is a subscript. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool LTRResultIterator::SymbolIsSubscript() const { + if (cblob_it_ == NULL && it_->word() != NULL) + return it_->word()->best_choice->BlobPosition(blob_index_) == SP_SUBSCRIPT; + return false; + } + + // Returns true if the current symbol is a dropcap. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool LTRResultIterator::SymbolIsDropcap() const { + if (cblob_it_ == NULL && it_->word() != NULL) + return it_->word()->best_choice->BlobPosition(blob_index_) == SP_DROPCAP; + return false; + } + + ChoiceIterator::ChoiceIterator(const LTRResultIterator& result_it) { + ASSERT_HOST(result_it.it_->word() != NULL); + word_res_ = result_it.it_->word(); + BLOB_CHOICE_LIST* choices = NULL; + if (word_res_->ratings != NULL) + choices = word_res_->GetBlobChoices(result_it.blob_index_); + if (choices != NULL && !choices->empty()) { + choice_it_ = new BLOB_CHOICE_IT(choices); + choice_it_->mark_cycle_pt(); + } + else { + choice_it_ = NULL; + } + } + + ChoiceIterator::~ChoiceIterator() { + delete choice_it_; + } + + // Moves to the next choice for the symbol and returns false if there + // are none left. + bool ChoiceIterator::Next() { + if (choice_it_ == NULL) + return false; + choice_it_->forward(); + return !choice_it_->cycled_list(); + } + + // Returns the null terminated UTF-8 encoded text string for the current + // choice. Do NOT use delete [] to free after use. + const char* ChoiceIterator::GetUTF8Text() const { + if (choice_it_ == NULL) + return NULL; + UNICHAR_ID id = choice_it_->data()->unichar_id(); + return word_res_->uch_set->id_to_unichar_ext(id); + } + + // Returns the confidence of the current choice. + // The number should be interpreted as a percent probability. (0.0f-100.0f) + float ChoiceIterator::Confidence() const { + if (choice_it_ == NULL) + return 0.0f; + float confidence = 100 + 5 * choice_it_->data()->certainty(); + if (confidence < 0.0f) confidence = 0.0f; + if (confidence > 100.0f) confidence = 100.0f; + return confidence; + } + + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccmain/ltrresultiterator.h b/3rdparty/hgOCR/include/ccmain/ltrresultiterator.h new file mode 100644 index 00000000..28d0e56f --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/ltrresultiterator.h @@ -0,0 +1,218 @@ +/////////////////////////////////////////////////////////////////////// +// File: ltrresultiterator.h +// Description: Iterator for tesseract results in strict left-to-right +// order that avoids using tesseract internal data structures. +// Author: Ray Smith +// Created: Fri Feb 26 11:01:06 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__ +#define TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__ + +#include "platform.h" +#include "pageiterator.h" +#include "unichar.h" + +class BLOB_CHOICE_IT; +class WERD_RES; + +namespace tesseract { + + class Tesseract; + + // Class to iterate over tesseract results, providing access to all levels + // of the page hierarchy, without including any tesseract headers or having + // to handle any tesseract structures. + // WARNING! This class points to data held within the TessBaseAPI class, and + // therefore can only be used while the TessBaseAPI class still exists and + // has not been subjected to a call of Init, SetImage, Recognize, Clear, End + // DetectOS, or anything else that changes the internal PAGE_RES. + // See apitypes.h for the definition of PageIteratorLevel. + // See also base class PageIterator, which contains the bulk of the interface. + // LTRResultIterator adds text-specific methods for access to OCR output. + + class TESS_API LTRResultIterator : public PageIterator { + friend class ChoiceIterator; + public: + // page_res and tesseract come directly from the BaseAPI. + // The rectangle parameters are copied indirectly from the Thresholder, + // via the BaseAPI. They represent the coordinates of some rectangle in an + // original image (in top-left-origin coordinates) and therefore the top-left + // needs to be added to any output boxes in order to specify coordinates + // in the original image. See TessBaseAPI::SetRectangle. + // The scale and scaled_yres are in case the Thresholder scaled the image + // rectangle prior to thresholding. Any coordinates in tesseract's image + // must be divided by scale before adding (rect_left, rect_top). + // The scaled_yres indicates the effective resolution of the binary image + // that tesseract has been given by the Thresholder. + // After the constructor, Begin has already been called. + LTRResultIterator(PAGE_RES* page_res, Tesseract* tesseract, + int scale, int scaled_yres, + int rect_left, int rect_top, + int rect_width, int rect_height); + virtual ~LTRResultIterator(); + + // LTRResultIterators may be copied! This makes it possible to iterate over + // all the objects at a lower level, while maintaining an iterator to + // objects at a higher level. These constructors DO NOT CALL Begin, so + // iterations will continue from the location of src. + // TODO: For now the copy constructor and operator= only need the base class + // versions, but if new data members are added, don't forget to add them! + + // ============= Moving around within the page ============. + + // See PageIterator. + + // ============= Accessing data ==============. + + // Returns the null terminated UTF-8 encoded text string for the current + // object at the given level. Use delete [] to free after use. + char* GetUTF8Text(PageIteratorLevel level) const; + + // Set the string inserted at the end of each text line. "\n" by default. + void SetLineSeparator(const char *new_line); + + // Set the string inserted at the end of each paragraph. "\n" by default. + void SetParagraphSeparator(const char *new_para); + + // Returns the mean confidence of the current object at the given level. + // The number should be interpreted as a percent probability. (0.0f-100.0f) + float Confidence(PageIteratorLevel level) const; + + // Returns the attributes of the current row. + void RowAttributes(float* row_height, float* descenders, + float* ascenders) const; + + // ============= Functions that refer to words only ============. + + // Returns the font attributes of the current word. If iterating at a higher + // level object than words, eg textlines, then this will return the + // attributes of the first word in that textline. + // The actual return value is a string representing a font name. It points + // to an internal table and SHOULD NOT BE DELETED. Lifespan is the same as + // the iterator itself, ie rendered invalid by various members of + // TessBaseAPI, including Init, SetImage, End or deleting the TessBaseAPI. + // Pointsize is returned in printers points (1/72 inch.) + const char* WordFontAttributes(bool* is_bold, + bool* is_italic, + bool* is_underlined, + bool* is_monospace, + bool* is_serif, + bool* is_smallcaps, + int* pointsize, + int* font_id) const; + + // Return the name of the language used to recognize this word. + // On error, NULL. Do not delete this pointer. + const char* WordRecognitionLanguage() const; + + // Return the overall directionality of this word. + StrongScriptDirection WordDirection() const; + + // Returns true if the current word was found in a dictionary. + bool WordIsFromDictionary() const; + + // Returns true if the current word is numeric. + bool WordIsNumeric() const; + + // Returns true if the word contains blamer information. + bool HasBlamerInfo() const; + + // Returns the pointer to ParamsTrainingBundle stored in the BlamerBundle + // of the current word. + const void *GetParamsTrainingBundle() const; + + // Returns a pointer to the string with blamer information for this word. + // Assumes that the word's blamer_bundle is not NULL. + const char *GetBlamerDebug() const; + + // Returns a pointer to the string with misadaption information for this word. + // Assumes that the word's blamer_bundle is not NULL. + const char *GetBlamerMisadaptionDebug() const; + + // Returns true if a truth string was recorded for the current word. + bool HasTruthString() const; + + // Returns true if the given string is equivalent to the truth string for + // the current word. + bool EquivalentToTruth(const char *str) const; + + // Returns a null terminated UTF-8 encoded truth string for the current word. + // Use delete [] to free after use. + char* WordTruthUTF8Text() const; + + // Returns a null terminated UTF-8 encoded normalized OCR string for the + // current word. Use delete [] to free after use. + char* WordNormedUTF8Text() const; + + // Returns a pointer to serialized choice lattice. + // Fills lattice_size with the number of bytes in lattice data. + const char *WordLattice(int *lattice_size) const; + + // ============= Functions that refer to symbols only ============. + + // Returns true if the current symbol is a superscript. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool SymbolIsSuperscript() const; + // Returns true if the current symbol is a subscript. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool SymbolIsSubscript() const; + // Returns true if the current symbol is a dropcap. + // If iterating at a higher level object than symbols, eg words, then + // this will return the attributes of the first symbol in that word. + bool SymbolIsDropcap() const; + + protected: + const char *line_separator_; + const char *paragraph_separator_; + }; + + // Class to iterate over the classifier choices for a single RIL_SYMBOL. + class ChoiceIterator { + public: + // Construction is from a LTRResultIterator that points to the symbol of + // interest. The ChoiceIterator allows a one-shot iteration over the + // choices for this symbol and after that is is useless. + explicit ChoiceIterator(const LTRResultIterator& result_it); + ~ChoiceIterator(); + + // Moves to the next choice for the symbol and returns false if there + // are none left. + bool Next(); + + // ============= Accessing data ==============. + + // Returns the null terminated UTF-8 encoded text string for the current + // choice. + // NOTE: Unlike LTRResultIterator::GetUTF8Text, the return points to an + // internal structure and should NOT be delete[]ed to free after use. + const char* GetUTF8Text() const; + + // Returns the confidence of the current choice. + // The number should be interpreted as a percent probability. (0.0f-100.0f) + float Confidence() const; + + private: + // Pointer to the WERD_RES object owned by the API. + WERD_RES* word_res_; + // Iterator over the blob choices. + BLOB_CHOICE_IT* choice_it_; + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__ diff --git a/3rdparty/hgOCR/include/ccmain/mathfix.h b/3rdparty/hgOCR/include/ccmain/mathfix.h new file mode 100644 index 00000000..1b575987 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/mathfix.h @@ -0,0 +1,38 @@ +/////////////////////////////////////////////////////////////////////// +// File: mathfix.h +// Description: Implement missing math functions +// Author: zdenop +// Created: Fri Feb 03 06:45:06 CET 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef VS2008_INCLUDE_MATHFIX_H_ +#define VS2008_INCLUDE_MATHFIXT_H_ + +#ifndef _MSC_VER +#error "Use this header only with Microsoft Visual C++ compilers!" +#endif + +#include +#include // for _isnan(), _finite() on VC++ + +#if _MSC_VER < 1800 +#define isnan(x) _isnan(x) +#define isinf(x) (!_finite(x)) +#define fmax max //VC++ does not implement all the provisions of C99 Standard +#define round(x) roundf(x) +inline float roundf(float num) { return num > 0 ? floorf(num + 0.5f) : ceilf(num - 0.5f); } +#endif + +#endif // VS2008_INCLUDE_MATHFIXT_H_ diff --git a/3rdparty/hgOCR/include/ccmain/mutableiterator.h b/3rdparty/hgOCR/include/ccmain/mutableiterator.h new file mode 100644 index 00000000..f018fbc4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/mutableiterator.h @@ -0,0 +1,64 @@ +/////////////////////////////////////////////////////////////////////// +// File: mutableiterator.h +// Description: Iterator for tesseract results providing access to +// both high-level API and Tesseract internal data structures. +// Author: David Eger +// Created: Thu Feb 24 19:01:06 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_MUTABLEITERATOR_H__ +#define TESSERACT_CCMAIN_MUTABLEITERATOR_H__ + +#include "resultiterator.h" + +class BLOB_CHOICE_IT; + +namespace tesseract { + + class Tesseract; + + // Class to iterate over tesseract results, providing access to all levels + // of the page hierarchy, without including any tesseract headers or having + // to handle any tesseract structures. + // WARNING! This class points to data held within the TessBaseAPI class, and + // therefore can only be used while the TessBaseAPI class still exists and + // has not been subjected to a call of Init, SetImage, Recognize, Clear, End + // DetectOS, or anything else that changes the internal PAGE_RES. + // See apitypes.h for the definition of PageIteratorLevel. + // See also base class PageIterator, which contains the bulk of the interface. + // ResultIterator adds text-specific methods for access to OCR output. + // MutableIterator adds access to internal data structures. + + class MutableIterator : public ResultIterator { + public: + // See argument descriptions in ResultIterator() + MutableIterator(PAGE_RES* page_res, Tesseract* tesseract, + int scale, int scaled_yres, + int rect_left, int rect_top, + int rect_width, int rect_height) + : ResultIterator( + LTRResultIterator(page_res, tesseract, scale, scaled_yres, rect_left, + rect_top, rect_width, rect_height)) {} + virtual ~MutableIterator() {} + + // See PageIterator and ResultIterator for most calls. + + // Return access to Tesseract internals. + const PAGE_RES_IT *PageResIt() const { return it_; } + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_MUTABLEITERATOR_H__ diff --git a/3rdparty/hgOCR/include/ccmain/osdetect.cpp b/3rdparty/hgOCR/include/ccmain/osdetect.cpp new file mode 100644 index 00000000..f0c27654 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/osdetect.cpp @@ -0,0 +1,585 @@ +/////////////////////////////////////////////////////////////////////// +// File: osdetect.cpp +// Description: Orientation and script detection. +// Author: Samuel Charron +// Ranjith Unnikrishnan +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "osdetect.h" + +#include "blobbox.h" +#include "blread.h" +#include "colfind.h" +#include "fontinfo.h" +#include "imagefind.h" +#include "linefind.h" +#include "oldlist.h" +#include "qrsequence.h" +#include "ratngs.h" +#include "strngs.h" +#include "tabvector.h" +#include "tesseractclass.h" +#include "textord.h" + +const int kMinCharactersToTry = 20; +const int kMaxCharactersToTry = 5 * kMinCharactersToTry; + +const float kSizeRatioToReject = 2.0; +const int kMinAcceptableBlobHeight = 10; + +const float kScriptAcceptRatio = 1.3; + +const float kHanRatioInKorean = 0.7; +const float kHanRatioInJapanese = 0.3; + +const float kNonAmbiguousMargin = 1.0; + +// General scripts +static const char* han_script = "Han"; +static const char* latin_script = "Latin"; +static const char* katakana_script = "Katakana"; +static const char* hiragana_script = "Hiragana"; +static const char* hangul_script = "Hangul"; + +// Pseudo-scripts Name +const char* ScriptDetector::korean_script_ = "Korean"; +const char* ScriptDetector::japanese_script_ = "Japanese"; +const char* ScriptDetector::fraktur_script_ = "Fraktur"; + +// Minimum believable resolution. +const int kMinCredibleResolution = 70; + +void OSResults::update_best_orientation() { + float first = orientations[0]; + float second = orientations[1]; + best_result.orientation_id = 0; + if (orientations[0] < orientations[1]) { + first = orientations[1]; + second = orientations[0]; + best_result.orientation_id = 1; + } + for (int i = 2; i < 4; ++i) { + if (orientations[i] > first) { + second = first; + first = orientations[i]; + best_result.orientation_id = i; + } + else if (orientations[i] > second) { + second = orientations[i]; + } + } + // Store difference of top two orientation scores. + best_result.oconfidence = first - second; +} + +void OSResults::set_best_orientation(int orientation_id) { + best_result.orientation_id = orientation_id; + best_result.oconfidence = 0; +} + +void OSResults::update_best_script(int orientation) { + // We skip index 0 to ignore the "Common" script. + float first = scripts_na[orientation][1]; + float second = scripts_na[orientation][2]; + best_result.script_id = 1; + if (scripts_na[orientation][1] < scripts_na[orientation][2]) { + first = scripts_na[orientation][2]; + second = scripts_na[orientation][1]; + best_result.script_id = 2; + } + for (int i = 3; i < kMaxNumberOfScripts; ++i) { + if (scripts_na[orientation][i] > first) { + best_result.script_id = i; + second = first; + first = scripts_na[orientation][i]; + } + else if (scripts_na[orientation][i] > second) { + second = scripts_na[orientation][i]; + } + } + best_result.sconfidence = + (first / second - 1.0) / (kScriptAcceptRatio - 1.0); +} + +int OSResults::get_best_script(int orientation_id) const { + int max_id = -1; + for (int j = 0; j < kMaxNumberOfScripts; ++j) { + const char *script = unicharset->get_script_from_script_id(j); + if (strcmp(script, "Common") && strcmp(script, "NULL")) { + if (max_id == -1 || + scripts_na[orientation_id][j] > scripts_na[orientation_id][max_id]) + max_id = j; + } + } + return max_id; +} + +// Print the script scores for all possible orientations. +void OSResults::print_scores(void) const { + for (int i = 0; i < 4; ++i) { + tprintf("Orientation id #%d", i); + print_scores(i); + } +} + +// Print the script scores for the given candidate orientation. +void OSResults::print_scores(int orientation_id) const { + for (int j = 0; j < kMaxNumberOfScripts; ++j) { + if (scripts_na[orientation_id][j]) { + tprintf("%12s\t: %f\n", unicharset->get_script_from_script_id(j), + scripts_na[orientation_id][j]); + } + } +} + +// Accumulate scores with given OSResults instance and update the best script. +void OSResults::accumulate(const OSResults& osr) { + for (int i = 0; i < 4; ++i) { + orientations[i] += osr.orientations[i]; + for (int j = 0; j < kMaxNumberOfScripts; ++j) + scripts_na[i][j] += osr.scripts_na[i][j]; + } + unicharset = osr.unicharset; + update_best_orientation(); + update_best_script(best_result.orientation_id); +} + +// Detect and erase horizontal/vertical lines and picture regions from the +// image, so that non-text blobs are removed from consideration. +void remove_nontext_regions(tesseract::Tesseract *tess, BLOCK_LIST *blocks, + TO_BLOCK_LIST *to_blocks) { + Pix *pix = tess->pix_binary(); + ASSERT_HOST(pix != NULL); + int vertical_x = 0; + int vertical_y = 1; + tesseract::TabVector_LIST v_lines; + tesseract::TabVector_LIST h_lines; + int resolution; + if (kMinCredibleResolution > pixGetXRes(pix)) { + resolution = kMinCredibleResolution; + tprintf("Warning. Invalid resolution %d dpi. Using %d instead.\n", + pixGetXRes(pix), resolution); + } + else { + resolution = pixGetXRes(pix); + } + + tesseract::LineFinder::FindAndRemoveLines(resolution, false, pix, + &vertical_x, &vertical_y, + NULL, &v_lines, &h_lines); + Pix* im_pix = tesseract::ImageFind::FindImages(pix); + if (im_pix != NULL) { + pixSubtract(pix, pix, im_pix); + pixDestroy(&im_pix); + } + tess->mutable_textord()->find_components(tess->pix_binary(), + blocks, to_blocks); +} + +// Find connected components in the page and process a subset until finished or +// a stopping criterion is met. +// Returns the number of blobs used in making the estimate. 0 implies failure. +int orientation_and_script_detection(STRING& filename, + OSResults* osr, + tesseract::Tesseract* tess) { + STRING name = filename; //truncated name + const char *lastdot; //of name + TBOX page_box; + + lastdot = strrchr(name.string(), '.'); + if (lastdot != NULL) + name[lastdot - name.string()] = '\0'; + + ASSERT_HOST(tess->pix_binary() != NULL) + int width = pixGetWidth(tess->pix_binary()); + int height = pixGetHeight(tess->pix_binary()); + + BLOCK_LIST blocks; + if (!read_unlv_file(name, width, height, &blocks)) + FullPageBlock(width, height, &blocks); + + // Try to remove non-text regions from consideration. + TO_BLOCK_LIST land_blocks, port_blocks; + remove_nontext_regions(tess, &blocks, &port_blocks); + + if (port_blocks.empty()) { + // page segmentation did not succeed, so we need to find_components first. + tess->mutable_textord()->find_components(tess->pix_binary(), + &blocks, &port_blocks); + } + else { + page_box.set_left(0); + page_box.set_bottom(0); + page_box.set_right(width); + page_box.set_top(height); + // Filter_blobs sets up the TO_BLOCKs the same as find_components does. + tess->mutable_textord()->filter_blobs(page_box.topright(), + &port_blocks, true); + } + + return os_detect(&port_blocks, osr, tess); +} + +// Filter and sample the blobs. +// Returns a non-zero number of blobs if the page was successfully processed, or +// zero if the page had too few characters to be reliable +int os_detect(TO_BLOCK_LIST* port_blocks, OSResults* osr, + tesseract::Tesseract* tess) { + int blobs_total = 0; + TO_BLOCK_IT block_it; + block_it.set_to_list(port_blocks); + + BLOBNBOX_CLIST filtered_list; + BLOBNBOX_C_IT filtered_it(&filtered_list); + + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); + block_it.forward()) { + TO_BLOCK* to_block = block_it.data(); + if (to_block->block->poly_block() && + !to_block->block->poly_block()->IsText()) continue; + BLOBNBOX_IT bbox_it; + bbox_it.set_to_list(&to_block->blobs); + for (bbox_it.mark_cycle_pt(); !bbox_it.cycled_list(); + bbox_it.forward()) { + BLOBNBOX* bbox = bbox_it.data(); + C_BLOB* blob = bbox->cblob(); + TBOX box = blob->bounding_box(); + ++blobs_total; + + float y_x = fabs((box.height() * 1.0) / box.width()); + float x_y = 1.0f / y_x; + // Select a >= 1.0 ratio + float ratio = x_y > y_x ? x_y : y_x; + // Blob is ambiguous + if (ratio > kSizeRatioToReject) continue; + if (box.height() < kMinAcceptableBlobHeight) continue; + filtered_it.add_to_end(bbox); + } + } + return os_detect_blobs(NULL, &filtered_list, osr, tess); +} + +// Detect orientation and script from a list of blobs. +// Returns a non-zero number of blobs if the list was successfully processed, or +// zero if the list had too few characters to be reliable. +// If allowed_scripts is non-null and non-empty, it is a list of scripts that +// constrains both orientation and script detection to consider only scripts +// from the list. +int os_detect_blobs(const GenericVector* allowed_scripts, + BLOBNBOX_CLIST* blob_list, OSResults* osr, + tesseract::Tesseract* tess) { + OSResults osr_; + if (osr == NULL) + osr = &osr_; + + osr->unicharset = &tess->unicharset; + OrientationDetector o(allowed_scripts, osr); + ScriptDetector s(allowed_scripts, osr, tess); + + BLOBNBOX_C_IT filtered_it(blob_list); + int real_max = MIN(filtered_it.length(), kMaxCharactersToTry); + // tprintf("Total blobs found = %d\n", blobs_total); + // tprintf("Number of blobs post-filtering = %d\n", filtered_it.length()); + // tprintf("Number of blobs to try = %d\n", real_max); + + // If there are too few characters, skip this page entirely. + if (real_max < kMinCharactersToTry / 2) { + tprintf("Too few characters. Skipping this page\n"); + return 0; + } + + BLOBNBOX** blobs = new BLOBNBOX*[filtered_it.length()]; + int number_of_blobs = 0; + for (filtered_it.mark_cycle_pt(); !filtered_it.cycled_list(); + filtered_it.forward()) { + blobs[number_of_blobs++] = (BLOBNBOX*)filtered_it.data(); + } + QRSequenceGenerator sequence(number_of_blobs); + int num_blobs_evaluated = 0; + for (int i = 0; i < real_max; ++i) { + if (os_detect_blob(blobs[sequence.GetVal()], &o, &s, osr, tess) + && i > kMinCharactersToTry) { + break; + } + ++num_blobs_evaluated; + } + delete[] blobs; + + // Make sure the best_result is up-to-date + int orientation = o.get_orientation(); + osr->update_best_script(orientation); + return num_blobs_evaluated; +} + +// Processes a single blob to estimate script and orientation. +// Return true if estimate of orientation and script satisfies stopping +// criteria. +bool os_detect_blob(BLOBNBOX* bbox, OrientationDetector* o, + ScriptDetector* s, OSResults* osr, + tesseract::Tesseract* tess) { + tess->tess_cn_matching.set_value(true); // turn it on + tess->tess_bn_matching.set_value(false); + C_BLOB* blob = bbox->cblob(); + TBLOB* tblob = TBLOB::PolygonalCopy(tess->poly_allow_detailed_fx, blob); + TBOX box = tblob->bounding_box(); + FCOORD current_rotation(1.0f, 0.0f); + FCOORD rotation90(0.0f, 1.0f); + BLOB_CHOICE_LIST ratings[4]; + // Test the 4 orientations + for (int i = 0; i < 4; ++i) { + // Normalize the blob. Set the origin to the place we want to be the + // bottom-middle after rotation. + // Scaling is to make the rotated height the x-height. + float scaling = static_cast(kBlnXHeight) / box.height(); + float x_origin = (box.left() + box.right()) / 2.0f; + float y_origin = (box.bottom() + box.top()) / 2.0f; + if (i == 0 || i == 2) { + // Rotation is 0 or 180. + y_origin = i == 0 ? box.bottom() : box.top(); + } + else { + // Rotation is 90 or 270. + scaling = static_cast(kBlnXHeight) / box.width(); + x_origin = i == 1 ? box.left() : box.right(); + } + TBLOB* rotated_blob = new TBLOB(*tblob); + rotated_blob->Normalize(NULL, ¤t_rotation, NULL, + x_origin, y_origin, scaling, scaling, + 0.0f, static_cast(kBlnBaselineOffset), + false, NULL); + tess->AdaptiveClassifier(rotated_blob, ratings + i); + delete rotated_blob; + current_rotation.rotate(rotation90); + } + delete tblob; + + bool stop = o->detect_blob(ratings); + s->detect_blob(ratings); + int orientation = o->get_orientation(); + stop = s->must_stop(orientation) && stop; + return stop; +} + + +OrientationDetector::OrientationDetector( + const GenericVector* allowed_scripts, OSResults* osr) { + osr_ = osr; + allowed_scripts_ = allowed_scripts; +} + +// Score the given blob and return true if it is now sure of the orientation +// after adding this block. +bool OrientationDetector::detect_blob(BLOB_CHOICE_LIST* scores) { + float blob_o_score[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + float total_blob_o_score = 0.0f; + + for (int i = 0; i < 4; ++i) { + BLOB_CHOICE_IT choice_it(scores + i); + if (!choice_it.empty()) { + BLOB_CHOICE* choice = NULL; + if (allowed_scripts_ != NULL && !allowed_scripts_->empty()) { + // Find the top choice in an allowed script. + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list() && + choice == NULL; choice_it.forward()) { + int choice_script = choice_it.data()->script_id(); + int s = 0; + for (s = 0; s < allowed_scripts_->size(); ++s) { + if ((*allowed_scripts_)[s] == choice_script) { + choice = choice_it.data(); + break; + } + } + } + } + else { + choice = choice_it.data(); + } + if (choice != NULL) { + // The certainty score ranges between [-20,0]. This is converted here to + // [0,1], with 1 indicating best match. + blob_o_score[i] = 1 + 0.05 * choice->certainty(); + total_blob_o_score += blob_o_score[i]; + } + } + } + if (total_blob_o_score == 0.0) return false; + // Fill in any blanks with the worst score of the others. This is better than + // picking an arbitrary probability for it and way better than -inf. + float worst_score = 0.0f; + int num_good_scores = 0; + for (int i = 0; i < 4; ++i) { + if (blob_o_score[i] > 0.0f) { + ++num_good_scores; + if (worst_score == 0.0f || blob_o_score[i] < worst_score) + worst_score = blob_o_score[i]; + } + } + if (num_good_scores == 1) { + // Lower worst if there is only one. + worst_score /= 2.0f; + } + for (int i = 0; i < 4; ++i) { + if (blob_o_score[i] == 0.0f) { + blob_o_score[i] = worst_score; + total_blob_o_score += worst_score; + } + } + // Normalize the orientation scores for the blob and use them to + // update the aggregated orientation score. + for (int i = 0; total_blob_o_score != 0 && i < 4; ++i) { + osr_->orientations[i] += log(blob_o_score[i] / total_blob_o_score); + } + + // TODO(ranjith) Add an early exit test, based on min_orientation_margin, + // as used in pagesegmain.cpp. + return false; +} + +int OrientationDetector::get_orientation() { + osr_->update_best_orientation(); + return osr_->best_result.orientation_id; +} + + +ScriptDetector::ScriptDetector(const GenericVector* allowed_scripts, + OSResults* osr, tesseract::Tesseract* tess) { + osr_ = osr; + tess_ = tess; + allowed_scripts_ = allowed_scripts; + katakana_id_ = tess_->unicharset.add_script(katakana_script); + hiragana_id_ = tess_->unicharset.add_script(hiragana_script); + han_id_ = tess_->unicharset.add_script(han_script); + hangul_id_ = tess_->unicharset.add_script(hangul_script); + japanese_id_ = tess_->unicharset.add_script(japanese_script_); + korean_id_ = tess_->unicharset.add_script(korean_script_); + latin_id_ = tess_->unicharset.add_script(latin_script); + fraktur_id_ = tess_->unicharset.add_script(fraktur_script_); +} + + +// Score the given blob and return true if it is now sure of the script after +// adding this blob. +void ScriptDetector::detect_blob(BLOB_CHOICE_LIST* scores) { + bool done[kMaxNumberOfScripts]; + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < kMaxNumberOfScripts; ++j) + done[j] = false; + + BLOB_CHOICE_IT choice_it; + choice_it.set_to_list(scores + i); + + float prev_score = -1; + int script_count = 0; + int prev_id = -1; + int prev_fontinfo_id = -1; + const char* prev_unichar = ""; + const char* unichar = ""; + + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list(); + choice_it.forward()) { + BLOB_CHOICE* choice = choice_it.data(); + int id = choice->script_id(); + if (allowed_scripts_ != NULL && !allowed_scripts_->empty()) { + // Check that the choice is in an allowed script. + int s = 0; + for (s = 0; s < allowed_scripts_->size(); ++s) { + if ((*allowed_scripts_)[s] == id) break; + } + if (s == allowed_scripts_->size()) continue; // Not found in list. + } + // Script already processed before. + if (done[id]) continue; + done[id] = true; + + unichar = tess_->unicharset.id_to_unichar(choice->unichar_id()); + // Save data from the first match + if (prev_score < 0) { + prev_score = -choice->certainty(); + script_count = 1; + prev_id = id; + prev_unichar = unichar; + prev_fontinfo_id = choice->fontinfo_id(); + } + else if (-choice->certainty() < prev_score + kNonAmbiguousMargin) { + ++script_count; + } + + if (strlen(prev_unichar) == 1) + if (unichar[0] >= '0' && unichar[0] <= '9') + break; + + // if script_count is >= 2, character is ambiguous, skip other matches + // since they are useless. + if (script_count >= 2) + break; + } + // Character is non ambiguous + if (script_count == 1) { + // Update the score of the winning script + osr_->scripts_na[i][prev_id] += 1.0; + + // Workaround for Fraktur + if (prev_id == latin_id_) { + if (prev_fontinfo_id >= 0) { + const tesseract::FontInfo &fi = + tess_->get_fontinfo_table().get(prev_fontinfo_id); + //printf("Font: %s i:%i b:%i f:%i s:%i k:%i (%s)\n", fi.name, + // fi.is_italic(), fi.is_bold(), fi.is_fixed_pitch(), + // fi.is_serif(), fi.is_fraktur(), + // prev_unichar); + if (fi.is_fraktur()) { + osr_->scripts_na[i][prev_id] -= 1.0; + osr_->scripts_na[i][fraktur_id_] += 1.0; + } + } + } + + // Update Japanese / Korean pseudo-scripts + if (prev_id == katakana_id_) + osr_->scripts_na[i][japanese_id_] += 1.0; + if (prev_id == hiragana_id_) + osr_->scripts_na[i][japanese_id_] += 1.0; + if (prev_id == hangul_id_) + osr_->scripts_na[i][korean_id_] += 1.0; + if (prev_id == han_id_) { + osr_->scripts_na[i][korean_id_] += kHanRatioInKorean; + osr_->scripts_na[i][japanese_id_] += kHanRatioInJapanese; + } + } + } // iterate over each orientation +} + +bool ScriptDetector::must_stop(int orientation) { + osr_->update_best_script(orientation); + return osr_->best_result.sconfidence > 1; +} + +// Helper method to convert an orientation index to its value in degrees. +// The value represents the amount of clockwise rotation in degrees that must be +// applied for the text to be upright (readable). +int OrientationIdToValue(const int& id) { + switch (id) { + case 0: + return 0; + case 1: + return 270; + case 2: + return 180; + case 3: + return 90; + default: + return -1; + } +} diff --git a/3rdparty/hgOCR/include/ccmain/osdetect.h b/3rdparty/hgOCR/include/ccmain/osdetect.h new file mode 100644 index 00000000..f68853a7 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/osdetect.h @@ -0,0 +1,138 @@ +/////////////////////////////////////////////////////////////////////// +// File: osdetect.h +// Description: Orientation and script detection. +// Author: Samuel Charron +// Ranjith Unnikrishnan +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_OSDETECT_H__ +#define TESSERACT_CCMAIN_OSDETECT_H__ + +#include "strngs.h" +#include "unicharset.h" + +class TO_BLOCK_LIST; +class BLOBNBOX; +class BLOB_CHOICE_LIST; +class BLOBNBOX_CLIST; + +namespace tesseract { + class Tesseract; +} + +// Max number of scripts in ICU + "NULL" + Japanese and Korean + Fraktur +const int kMaxNumberOfScripts = 116 + 1 + 2 + 1; + +struct OSBestResult { + OSBestResult() : orientation_id(0), script_id(0), sconfidence(0.0), + oconfidence(0.0) {} + int orientation_id; + int script_id; + float sconfidence; + float oconfidence; +}; + +struct OSResults { + OSResults() : unicharset(NULL) { + for (int i = 0; i < 4; ++i) { + for (int j = 0; j < kMaxNumberOfScripts; ++j) + scripts_na[i][j] = 0; + orientations[i] = 0; + } + } + void update_best_orientation(); + // Set the estimate of the orientation to the given id. + void set_best_orientation(int orientation_id); + // Update/Compute the best estimate of the script assuming the given + // orientation id. + void update_best_script(int orientation_id); + // Return the index of the script with the highest score for this orientation. + TESS_API int get_best_script(int orientation_id) const; + // Accumulate scores with given OSResults instance and update the best script. + void accumulate(const OSResults& osr); + + // Print statistics. + void print_scores(void) const; + void print_scores(int orientation_id) const; + + // Array holding scores for each orientation id [0,3]. + // Orientation ids [0..3] map to [0, 270, 180, 90] degree orientations of the + // page respectively, where the values refer to the amount of clockwise + // rotation to be applied to the page for the text to be upright and readable. + float orientations[4]; + // Script confidence scores for each of 4 possible orientations. + float scripts_na[4][kMaxNumberOfScripts]; + + UNICHARSET* unicharset; + OSBestResult best_result; +}; + +class OrientationDetector { +public: + OrientationDetector(const GenericVector* allowed_scripts, + OSResults* results); + bool detect_blob(BLOB_CHOICE_LIST* scores); + int get_orientation(); +private: + OSResults* osr_; + const GenericVector* allowed_scripts_; +}; + +class ScriptDetector { +public: + ScriptDetector(const GenericVector* allowed_scripts, + OSResults* osr, tesseract::Tesseract* tess); + void detect_blob(BLOB_CHOICE_LIST* scores); + bool must_stop(int orientation); +private: + OSResults* osr_; + static const char* korean_script_; + static const char* japanese_script_; + static const char* fraktur_script_; + int korean_id_; + int japanese_id_; + int katakana_id_; + int hiragana_id_; + int han_id_; + int hangul_id_; + int latin_id_; + int fraktur_id_; + tesseract::Tesseract* tess_; + const GenericVector* allowed_scripts_; +}; + +int orientation_and_script_detection(STRING& filename, + OSResults*, + tesseract::Tesseract*); + +int os_detect(TO_BLOCK_LIST* port_blocks, + OSResults* osr, + tesseract::Tesseract* tess); + +int os_detect_blobs(const GenericVector* allowed_scripts, + BLOBNBOX_CLIST* blob_list, + OSResults* osr, + tesseract::Tesseract* tess); + +bool os_detect_blob(BLOBNBOX* bbox, OrientationDetector* o, + ScriptDetector* s, OSResults*, + tesseract::Tesseract* tess); + +// Helper method to convert an orientation index to its value in degrees. +// The value represents the amount of clockwise rotation in degrees that must be +// applied for the text to be upright (readable). +TESS_API int OrientationIdToValue(const int& id); + +#endif // TESSERACT_CCMAIN_OSDETECT_H__ diff --git a/3rdparty/hgOCR/include/ccmain/output.cpp b/3rdparty/hgOCR/include/ccmain/output.cpp new file mode 100644 index 00000000..5f203cb2 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/output.cpp @@ -0,0 +1,450 @@ +/****************************************************************** + * File: output.cpp (Formerly output.c) + * Description: Output pass + * Author: Phil Cheatle + * Created: Thu Aug 4 10:56:08 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + +#include +#include +#ifdef __UNIX__ +#include +#include +#include +#endif +#include "helpers.h" +#include "tessvars.h" +#include "control.h" +#include "reject.h" +#include "docqual.h" +#include "output.h" +#include "globals.h" +#include "tesseractclass.h" + +#define EPAPER_EXT ".ep" +#define PAGE_YSIZE 3508 +#define CTRL_INSET '\024' //dc4=text inset +#define CTRL_FONT '\016' //so=font change +#define CTRL_DEFAULT '\017' //si=default font +#define CTRL_SHIFT '\022' //dc2=x shift +#define CTRL_TAB '\011' //tab +#define CTRL_NEWLINE '\012' //newline +#define CTRL_HARDLINE '\015' //cr + + /********************************************************************** + * pixels_to_pts + * + * Convert an integer number of pixels to the nearest integer + * number of points. + **********************************************************************/ + +inT32 pixels_to_pts( //convert coords + inT32 pixels, + inT32 pix_res //resolution +) { + float pts; //converted value + + pts = pixels * 72.0 / pix_res; + return (inT32)(pts + 0.5); //round it +} + +namespace tesseract { + void Tesseract::output_pass( //Tess output pass //send to api + PAGE_RES_IT &page_res_it, + const TBOX *target_word_box) { + BLOCK_RES *block_of_last_word; + BOOL8 force_eol; //During output + BLOCK *nextblock; //block of next word + WERD *nextword; //next word + + page_res_it.restart_page(); + block_of_last_word = NULL; + while (page_res_it.word() != NULL) { + check_debug_pt(page_res_it.word(), 120); + + if (target_word_box) { + TBOX current_word_box = page_res_it.word()->word->bounding_box(); + FCOORD center_pt( + (current_word_box.right() + current_word_box.left()) / 2, + (current_word_box.bottom() + current_word_box.top()) / 2); + if (!target_word_box->contains(center_pt)) { + page_res_it.forward(); + continue; + } + } + if (tessedit_write_block_separators && + block_of_last_word != page_res_it.block()) { + block_of_last_word = page_res_it.block(); + } + + force_eol = (tessedit_write_block_separators && + (page_res_it.block() != page_res_it.next_block())) || + (page_res_it.next_word() == NULL); + + if (page_res_it.next_word() != NULL) + nextword = page_res_it.next_word()->word; + else + nextword = NULL; + if (page_res_it.next_block() != NULL) + nextblock = page_res_it.next_block()->block; + else + nextblock = NULL; + //regardless of tilde crunching + write_results(page_res_it, + determine_newline_type(page_res_it.word()->word, + page_res_it.block()->block, + nextword, nextblock), force_eol); + page_res_it.forward(); + } + } + + + /************************************************************************* + * write_results() + * + * All recognition and rejection has now been done. Generate the following: + * .txt file - giving the final best choices with NO highlighting + * .raw file - giving the tesseract top choice output for each word + * .map file - showing how the .txt file has been rejected in the .ep file + * epchoice list - a list of one element per word, containing the text for the + * epaper. Reject strings are inserted. + * inset list - a list of bounding boxes of reject insets - indexed by the + * reject strings in the epchoice text. + *************************************************************************/ + void Tesseract::write_results(PAGE_RES_IT &page_res_it, + char newline_type, // type of newline + BOOL8 force_eol) { // override tilde crunch? + WERD_RES *word = page_res_it.word(); + const UNICHARSET &uchset = *word->uch_set; + int i; + BOOL8 need_reject = FALSE; + UNICHAR_ID space = uchset.unichar_to_id(" "); + + if ((word->unlv_crunch_mode != CR_NONE || + word->best_choice->length() == 0) && + !tessedit_zero_kelvin_rejection && !tessedit_word_for_word) { + if ((word->unlv_crunch_mode != CR_DELETE) && + (!stats_.tilde_crunch_written || + ((word->unlv_crunch_mode == CR_KEEP_SPACE) && + (word->word->space() > 0) && + !word->word->flag(W_FUZZY_NON) && + !word->word->flag(W_FUZZY_SP)))) { + if (!word->word->flag(W_BOL) && + (word->word->space() > 0) && + !word->word->flag(W_FUZZY_NON) && + !word->word->flag(W_FUZZY_SP)) { + stats_.last_char_was_tilde = false; + } + need_reject = TRUE; + } + if ((need_reject && !stats_.last_char_was_tilde) || + (force_eol && stats_.write_results_empty_block)) { + /* Write a reject char - mark as rejected unless zero_rejection mode */ + stats_.last_char_was_tilde = TRUE; + stats_.tilde_crunch_written = true; + stats_.last_char_was_newline = false; + stats_.write_results_empty_block = false; + } + + if ((word->word->flag(W_EOL) && !stats_.last_char_was_newline) || force_eol) { + stats_.tilde_crunch_written = false; + stats_.last_char_was_newline = true; + stats_.last_char_was_tilde = false; + } + + if (force_eol) + stats_.write_results_empty_block = true; + return; + } + + /* NORMAL PROCESSING of non tilde crunched words */ + + stats_.tilde_crunch_written = false; + if (newline_type) + stats_.last_char_was_newline = true; + else + stats_.last_char_was_newline = false; + stats_.write_results_empty_block = force_eol; // about to write a real word + + if (unlv_tilde_crunching && + stats_.last_char_was_tilde && + (word->word->space() == 0) && + !(word->word->flag(W_REP_CHAR) && tessedit_write_rep_codes) && + (word->best_choice->unichar_id(0) == space)) { + /* Prevent adjacent tilde across words - we know that adjacent tildes within + words have been removed */ + word->MergeAdjacentBlobs(0); + } + if (newline_type || + (word->word->flag(W_REP_CHAR) && tessedit_write_rep_codes)) + stats_.last_char_was_tilde = false; + else { + if (word->reject_map.length() > 0) { + if (word->best_choice->unichar_id(word->reject_map.length() - 1) == space) + stats_.last_char_was_tilde = true; + else + stats_.last_char_was_tilde = false; + } + else if (word->word->space() > 0) + stats_.last_char_was_tilde = false; + /* else it is unchanged as there are no output chars */ + } + + ASSERT_HOST(word->best_choice->length() == word->reject_map.length()); + + set_unlv_suspects(word); + check_debug_pt(word, 120); + if (tessedit_rejection_debug) { + tprintf("Dict word: \"%s\": %d\n", + word->best_choice->debug_string().string(), + dict_word(*(word->best_choice))); + } + if (!word->word->flag(W_REP_CHAR) || !tessedit_write_rep_codes) { + if (tessedit_zero_rejection) { + /* OVERRIDE ALL REJECTION MECHANISMS - ONLY REJECT TESS FAILURES */ + for (i = 0; i < word->best_choice->length(); ++i) { + if (word->reject_map[i].rejected()) + word->reject_map[i].setrej_minimal_rej_accept(); + } + } + if (tessedit_minimal_rejection) { + /* OVERRIDE ALL REJECTION MECHANISMS - ONLY REJECT TESS FAILURES */ + for (i = 0; i < word->best_choice->length(); ++i) { + if ((word->best_choice->unichar_id(i) != space) && + word->reject_map[i].rejected()) + word->reject_map[i].setrej_minimal_rej_accept(); + } + } + } + } +} // namespace tesseract + +/********************************************************************** + * determine_newline_type + * + * Find whether we have a wrapping or hard newline. + * Return FALSE if not at end of line. + **********************************************************************/ + +char determine_newline_type( //test line ends + WERD *word, //word to do + BLOCK *block, //current block + WERD *next_word, //next word + BLOCK *next_block //block of next word +) { + inT16 end_gap; //to right edge + inT16 width; //of next word + TBOX word_box; //bounding + TBOX next_box; //next word + TBOX block_box; //block bounding + + if (!word->flag(W_EOL)) + return FALSE; //not end of line + if (next_word == NULL || next_block == NULL || block != next_block) + return CTRL_NEWLINE; + if (next_word->space() > 0) + return CTRL_HARDLINE; //it is tabbed + word_box = word->bounding_box(); + next_box = next_word->bounding_box(); + block_box = block->bounding_box(); + //gap to eol + end_gap = block_box.right() - word_box.right(); + end_gap -= (inT32)block->space(); + width = next_box.right() - next_box.left(); + // tprintf("end_gap=%d-%d=%d, width=%d-%d=%d, nl=%d\n", + // block_box.right(),word_box.right(),end_gap, + // next_box.right(),next_box.left(),width, + // end_gap>width ? CTRL_HARDLINE : CTRL_NEWLINE); + return end_gap > width ? CTRL_HARDLINE : CTRL_NEWLINE; +} + +/************************************************************************* + * get_rep_char() + * Return the first accepted character from the repetition string. This is the + * character which is repeated - as determined earlier by fix_rep_char() + *************************************************************************/ +namespace tesseract { + UNICHAR_ID Tesseract::get_rep_char(WERD_RES *word) { // what char is repeated? + int i; + for (i = 0; ((i < word->reject_map.length()) && + (word->reject_map[i].rejected())); ++i); + + if (i < word->reject_map.length()) { + return word->best_choice->unichar_id(i); + } + else { + return word->uch_set->unichar_to_id(unrecognised_char.string()); + } + } + + /************************************************************************* + * SUSPECT LEVELS + * + * 0 - don't reject ANYTHING + * 1,2 - partial rejection + * 3 - BEST + * + * NOTE: to reject JUST tess failures in the .map file set suspect_level 3 and + * tessedit_minimal_rejection. + *************************************************************************/ + void Tesseract::set_unlv_suspects(WERD_RES *word_res) { + int len = word_res->reject_map.length(); + const WERD_CHOICE &word = *(word_res->best_choice); + const UNICHARSET &uchset = *word.unicharset(); + int i; + float rating_per_ch; + + if (suspect_level == 0) { + for (i = 0; i < len; i++) { + if (word_res->reject_map[i].rejected()) + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + return; + } + + if (suspect_level >= 3) + return; //Use defaults + + /* NOW FOR LEVELS 1 and 2 Find some stuff to unreject*/ + + if (safe_dict_word(word_res) && + (count_alphas(word) > suspect_short_words)) { + /* Unreject alphas in dictionary words */ + for (i = 0; i < len; ++i) { + if (word_res->reject_map[i].rejected() && + uchset.get_isalpha(word.unichar_id(i))) + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + } + + rating_per_ch = word.rating() / word_res->reject_map.length(); + + if (rating_per_ch >= suspect_rating_per_ch) + return; // Don't touch bad ratings + + if ((word_res->tess_accepted) || (rating_per_ch < suspect_accept_rating)) { + /* Unreject any Tess Acceptable word - but NOT tess reject chs*/ + for (i = 0; i < len; ++i) { + if (word_res->reject_map[i].rejected() && + (!uchset.eq(word.unichar_id(i), " "))) + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + } + + for (i = 0; i < len; i++) { + if (word_res->reject_map[i].rejected()) { + if (word_res->reject_map[i].flag(R_DOC_REJ)) + word_res->reject_map[i].setrej_minimal_rej_accept(); + if (word_res->reject_map[i].flag(R_BLOCK_REJ)) + word_res->reject_map[i].setrej_minimal_rej_accept(); + if (word_res->reject_map[i].flag(R_ROW_REJ)) + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + } + + if (suspect_level == 2) + return; + + if (!suspect_constrain_1Il || + (word_res->reject_map.length() <= suspect_short_words)) { + for (i = 0; i < len; i++) { + if (word_res->reject_map[i].rejected()) { + if ((word_res->reject_map[i].flag(R_1IL_CONFLICT) || + word_res->reject_map[i].flag(R_POSTNN_1IL))) + word_res->reject_map[i].setrej_minimal_rej_accept(); + + if (!suspect_constrain_1Il && + word_res->reject_map[i].flag(R_MM_REJECT)) + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + } + } + + if (acceptable_word_string(*word_res->uch_set, + word.unichar_string().string(), + word.unichar_lengths().string()) != + AC_UNACCEPTABLE || + acceptable_number_string(word.unichar_string().string(), + word.unichar_lengths().string())) { + if (word_res->reject_map.length() > suspect_short_words) { + for (i = 0; i < len; i++) { + if (word_res->reject_map[i].rejected() && + (!word_res->reject_map[i].perm_rejected() || + word_res->reject_map[i].flag(R_1IL_CONFLICT) || + word_res->reject_map[i].flag(R_POSTNN_1IL) || + word_res->reject_map[i].flag(R_MM_REJECT))) { + word_res->reject_map[i].setrej_minimal_rej_accept(); + } + } + } + } + } + + inT16 Tesseract::count_alphas(const WERD_CHOICE &word) { + int count = 0; + for (int i = 0; i < word.length(); ++i) { + if (word.unicharset()->get_isalpha(word.unichar_id(i))) + count++; + } + return count; + } + + + inT16 Tesseract::count_alphanums(const WERD_CHOICE &word) { + int count = 0; + for (int i = 0; i < word.length(); ++i) { + if (word.unicharset()->get_isalpha(word.unichar_id(i)) || + word.unicharset()->get_isdigit(word.unichar_id(i))) + count++; + } + return count; + } + + + BOOL8 Tesseract::acceptable_number_string(const char *s, + const char *lengths) { + BOOL8 prev_digit = FALSE; + + if (*lengths == 1 && *s == '(') + s++; + + if (*lengths == 1 && + ((*s == '$') || (*s == '.') || (*s == '+') || (*s == '-'))) + s++; + + for (; *s != '\0'; s += *(lengths++)) { + if (unicharset.get_isdigit(s, *lengths)) + prev_digit = TRUE; + else if (prev_digit && + (*lengths == 1 && ((*s == '.') || (*s == ',') || (*s == '-')))) + prev_digit = FALSE; + else if (prev_digit && *lengths == 1 && + (*(s + *lengths) == '\0') && ((*s == '%') || (*s == ')'))) + return TRUE; + else if (prev_digit && + *lengths == 1 && (*s == '%') && + (*(lengths + 1) == 1 && *(s + *lengths) == ')') && + (*(s + *lengths + *(lengths + 1)) == '\0')) + return TRUE; + else + return FALSE; + } + return TRUE; + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/output.h b/3rdparty/hgOCR/include/ccmain/output.h new file mode 100644 index 00000000..513e0b26 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/output.h @@ -0,0 +1,33 @@ +/****************************************************************** + * File: output.h (Formerly output.h) + * Description: Output pass + * Author: Phil Cheatle + * Created: Thu Aug 4 10:56:08 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef OUTPUT_H +#define OUTPUT_H + +#include "params.h" + //#include "epapconv.h" +#include "pageres.h" + +/** test line ends */ +char determine_newline_type(WERD *word, ///< word to do + BLOCK *block, ///< current block + WERD *next_word, ///< next word + BLOCK *next_block ///< block of next word +); +#endif diff --git a/3rdparty/hgOCR/include/ccmain/pageiterator.cpp b/3rdparty/hgOCR/include/ccmain/pageiterator.cpp new file mode 100644 index 00000000..338adffc --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pageiterator.cpp @@ -0,0 +1,631 @@ +/////////////////////////////////////////////////////////////////////// +// File: pageiterator.cpp +// Description: Iterator for tesseract page structure that avoids using +// tesseract internal data structures. +// Author: Ray Smith +// Created: Fri Feb 26 14:32:09 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "pageiterator.h" +#include "allheaders.h" +#include "helpers.h" +#include "pageres.h" +#include "tesseractclass.h" + +namespace tesseract { + + PageIterator::PageIterator(PAGE_RES* page_res, Tesseract* tesseract, int scale, + int scaled_yres, int rect_left, int rect_top, + int rect_width, int rect_height) + : page_res_(page_res), + tesseract_(tesseract), + word_(NULL), + word_length_(0), + blob_index_(0), + cblob_it_(NULL), + include_upper_dots_(false), + include_lower_dots_(false), + scale_(scale), + scaled_yres_(scaled_yres), + rect_left_(rect_left), + rect_top_(rect_top), + rect_width_(rect_width), + rect_height_(rect_height) { + it_ = new PAGE_RES_IT(page_res); + PageIterator::Begin(); + } + + PageIterator::~PageIterator() { + delete it_; + delete cblob_it_; + } + + /** + * PageIterators may be copied! This makes it possible to iterate over + * all the objects at a lower level, while maintaining an iterator to + * objects at a higher level. + */ + PageIterator::PageIterator(const PageIterator& src) + : page_res_(src.page_res_), + tesseract_(src.tesseract_), + word_(NULL), + word_length_(src.word_length_), + blob_index_(src.blob_index_), + cblob_it_(NULL), + include_upper_dots_(src.include_upper_dots_), + include_lower_dots_(src.include_lower_dots_), + scale_(src.scale_), + scaled_yres_(src.scaled_yres_), + rect_left_(src.rect_left_), + rect_top_(src.rect_top_), + rect_width_(src.rect_width_), + rect_height_(src.rect_height_) { + it_ = new PAGE_RES_IT(*src.it_); + BeginWord(src.blob_index_); + } + + const PageIterator& PageIterator::operator=(const PageIterator& src) { + page_res_ = src.page_res_; + tesseract_ = src.tesseract_; + include_upper_dots_ = src.include_upper_dots_; + include_lower_dots_ = src.include_lower_dots_; + scale_ = src.scale_; + scaled_yres_ = src.scaled_yres_; + rect_left_ = src.rect_left_; + rect_top_ = src.rect_top_; + rect_width_ = src.rect_width_; + rect_height_ = src.rect_height_; + delete it_; + it_ = new PAGE_RES_IT(*src.it_); + BeginWord(src.blob_index_); + return *this; + } + + bool PageIterator::PositionedAtSameWord(const PAGE_RES_IT* other) const { + return (it_ == NULL && it_ == other) || + ((other != NULL) && (it_ != NULL) && (*it_ == *other)); + } + + // ============= Moving around within the page ============. + + /** Resets the iterator to point to the start of the page. */ + void PageIterator::Begin() { + it_->restart_page_with_empties(); + BeginWord(0); + } + + void PageIterator::RestartParagraph() { + if (it_->block() == NULL) return; // At end of the document. + PAGE_RES_IT para(page_res_); + PAGE_RES_IT next_para(para); + next_para.forward_paragraph(); + while (next_para.cmp(*it_) <= 0) { + para = next_para; + next_para.forward_paragraph(); + } + *it_ = para; + BeginWord(0); + } + + bool PageIterator::IsWithinFirstTextlineOfParagraph() const { + PageIterator p_start(*this); + p_start.RestartParagraph(); + return p_start.it_->row() == it_->row(); + } + + void PageIterator::RestartRow() { + it_->restart_row(); + BeginWord(0); + } + + /** + * Moves to the start of the next object at the given level in the + * page hierarchy, and returns false if the end of the page was reached. + * NOTE (CHANGED!) that ALL PageIteratorLevel level values will visit each + * non-text block at least once. + * Think of non text blocks as containing a single para, with at least one + * line, with a single imaginary word, containing a single symbol. + * The bounding boxes mark out any polygonal nature of the block, and + * PTIsTextType(BLockType()) is false for non-text blocks. + * Calls to Next with different levels may be freely intermixed. + * This function iterates words in right-to-left scripts correctly, if + * the appropriate language has been loaded into Tesseract. + */ + bool PageIterator::Next(PageIteratorLevel level) { + if (it_->block() == NULL) return false; // Already at the end! + if (it_->word() == NULL) + level = RIL_BLOCK; + + switch (level) { + case RIL_BLOCK: + it_->forward_block(); + break; + case RIL_PARA: + it_->forward_paragraph(); + break; + case RIL_TEXTLINE: + for (it_->forward_with_empties(); it_->row() == it_->prev_row(); + it_->forward_with_empties()); + break; + case RIL_WORD: + it_->forward_with_empties(); + break; + case RIL_SYMBOL: + if (cblob_it_ != NULL) + cblob_it_->forward(); + ++blob_index_; + if (blob_index_ >= word_length_) + it_->forward_with_empties(); + else + return true; + break; + } + BeginWord(0); + return it_->block() != NULL; + } + + /** + * Returns true if the iterator is at the start of an object at the given + * level. Possible uses include determining if a call to Next(RIL_WORD) + * moved to the start of a RIL_PARA. + */ + bool PageIterator::IsAtBeginningOf(PageIteratorLevel level) const { + if (it_->block() == NULL) return false; // Already at the end! + if (it_->word() == NULL) return true; // In an image block. + switch (level) { + case RIL_BLOCK: + return blob_index_ == 0 && it_->block() != it_->prev_block(); + case RIL_PARA: + return blob_index_ == 0 && + (it_->block() != it_->prev_block() || + it_->row()->row->para() != it_->prev_row()->row->para()); + case RIL_TEXTLINE: + return blob_index_ == 0 && it_->row() != it_->prev_row(); + case RIL_WORD: + return blob_index_ == 0; + case RIL_SYMBOL: + return true; + } + return false; + } + + /** + * Returns whether the iterator is positioned at the last element in a + * given level. (e.g. the last word in a line, the last line in a block) + */ + bool PageIterator::IsAtFinalElement(PageIteratorLevel level, + PageIteratorLevel element) const { + if (Empty(element)) return true; // Already at the end! + // The result is true if we step forward by element and find we are + // at the the end of the page or at beginning of *all* levels in: + // [level, element). + // When there is more than one level difference between element and level, + // we could for instance move forward one symbol and still be at the first + // word on a line, so we also have to be at the first symbol in a word. + PageIterator next(*this); + next.Next(element); + if (next.Empty(element)) return true; // Reached the end of the page. + while (element > level) { + element = static_cast(element - 1); + if (!next.IsAtBeginningOf(element)) + return false; + } + return true; + } + + /** + * Returns whether this iterator is positioned + * before other: -1 + * equal to other: 0 + * after other: 1 + */ + int PageIterator::Cmp(const PageIterator &other) const { + int word_cmp = it_->cmp(*other.it_); + if (word_cmp != 0) + return word_cmp; + if (blob_index_ < other.blob_index_) + return -1; + if (blob_index_ == other.blob_index_) + return 0; + return 1; + } + + // ============= Accessing data ==============. + // Coordinate system: + // Integer coordinates are at the cracks between the pixels. + // The top-left corner of the top-left pixel in the image is at (0,0). + // The bottom-right corner of the bottom-right pixel in the image is at + // (width, height). + // Every bounding box goes from the top-left of the top-left contained + // pixel to the bottom-right of the bottom-right contained pixel, so + // the bounding box of the single top-left pixel in the image is: + // (0,0)->(1,1). + // If an image rectangle has been set in the API, then returned coordinates + // relate to the original (full) image, rather than the rectangle. + + /** + * Returns the bounding rectangle of the current object at the given level in + * the coordinates of the working image that is pix_binary(). + * See comment on coordinate system above. + * Returns false if there is no such object at the current position. + */ + bool PageIterator::BoundingBoxInternal(PageIteratorLevel level, + int* left, int* top, + int* right, int* bottom) const { + if (Empty(level)) + return false; + TBOX box; + PARA *para = NULL; + switch (level) { + case RIL_BLOCK: + box = it_->block()->block->restricted_bounding_box(include_upper_dots_, + include_lower_dots_); + break; + case RIL_PARA: + para = it_->row()->row->para(); + // explicit fall-through. + case RIL_TEXTLINE: + box = it_->row()->row->restricted_bounding_box(include_upper_dots_, + include_lower_dots_); + break; + case RIL_WORD: + box = it_->word()->word->restricted_bounding_box(include_upper_dots_, + include_lower_dots_); + break; + case RIL_SYMBOL: + if (cblob_it_ == NULL) + box = it_->word()->box_word->BlobBox(blob_index_); + else + box = cblob_it_->data()->bounding_box(); + } + if (level == RIL_PARA) { + PageIterator other = *this; + other.Begin(); + do { + if (other.it_->block() && + other.it_->block()->block == it_->block()->block && + other.it_->row() && other.it_->row()->row && + other.it_->row()->row->para() == para) { + box = box.bounding_union(other.it_->row()->row->bounding_box()); + } + } while (other.Next(RIL_TEXTLINE)); + } + if (level != RIL_SYMBOL || cblob_it_ != NULL) + box.rotate(it_->block()->block->re_rotation()); + // Now we have a box in tesseract coordinates relative to the image rectangle, + // we have to convert the coords to a top-down system. + const int pix_height = pixGetHeight(tesseract_->pix_binary()); + const int pix_width = pixGetWidth(tesseract_->pix_binary()); + *left = ClipToRange(static_cast(box.left()), 0, pix_width); + *top = ClipToRange(pix_height - box.top(), 0, pix_height); + *right = ClipToRange(static_cast(box.right()), *left, pix_width); + *bottom = ClipToRange(pix_height - box.bottom(), *top, pix_height); + return true; + } + + /** + * Returns the bounding rectangle of the current object at the given level in + * coordinates of the original image. + * See comment on coordinate system above. + * Returns false if there is no such object at the current position. + */ + bool PageIterator::BoundingBox(PageIteratorLevel level, + int* left, int* top, + int* right, int* bottom) const { + return BoundingBox(level, 0, left, top, right, bottom); + } + + bool PageIterator::BoundingBox(PageIteratorLevel level, const int padding, + int* left, int* top, + int* right, int* bottom) const { + if (!BoundingBoxInternal(level, left, top, right, bottom)) + return false; + // Convert to the coordinate system of the original image. + *left = ClipToRange(*left / scale_ + rect_left_ - padding, + rect_left_, rect_left_ + rect_width_); + *top = ClipToRange(*top / scale_ + rect_top_ - padding, + rect_top_, rect_top_ + rect_height_); + *right = ClipToRange((*right + scale_ - 1) / scale_ + rect_left_ + padding, + *left, rect_left_ + rect_width_); + *bottom = ClipToRange((*bottom + scale_ - 1) / scale_ + rect_top_ + padding, + *top, rect_top_ + rect_height_); + return true; + } + + /** Return that there is no such object at a given level. */ + bool PageIterator::Empty(PageIteratorLevel level) const { + if (it_->block() == NULL) return true; // Already at the end! + if (it_->word() == NULL && level != RIL_BLOCK) return true; // image block + if (level == RIL_SYMBOL && blob_index_ >= word_length_) + return true; // Zero length word, or already at the end of it. + return false; + } + + /** Returns the type of the current block. See apitypes.h for PolyBlockType. */ + PolyBlockType PageIterator::BlockType() const { + if (it_->block() == NULL || it_->block()->block == NULL) + return PT_UNKNOWN; // Already at the end! + if (it_->block()->block->poly_block() == NULL) + return PT_FLOWING_TEXT; // No layout analysis used - assume text. + return it_->block()->block->poly_block()->isA(); + } + + /** Returns the polygon outline of the current block. The returned Pta must + * be ptaDestroy-ed after use. */ + Pta* PageIterator::BlockPolygon() const { + if (it_->block() == NULL || it_->block()->block == NULL) + return NULL; // Already at the end! + if (it_->block()->block->poly_block() == NULL) + return NULL; // No layout analysis used - no polygon. + ICOORDELT_IT it(it_->block()->block->poly_block()->points()); + Pta* pta = ptaCreate(it.length()); + int num_pts = 0; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward(), ++num_pts) { + ICOORD* pt = it.data(); + // Convert to top-down coords within the input image. + float x = static_cast(pt->x()) / scale_ + rect_left_; + float y = rect_top_ + rect_height_ - static_cast(pt->y()) / scale_; + ptaAddPt(pta, x, y); + } + return pta; + } + + /** + * Returns a binary image of the current object at the given level. + * The position and size match the return from BoundingBoxInternal, and so this + * could be upscaled with respect to the original input image. + * Use pixDestroy to delete the image after use. + * The following methods are used to generate the images: + * RIL_BLOCK: mask the page image with the block polygon. + * RIL_TEXTLINE: Clip the rectangle of the line box from the page image. + * TODO(rays) fix this to generate and use a line polygon. + * RIL_WORD: Clip the rectangle of the word box from the page image. + * RIL_SYMBOL: Render the symbol outline to an image for cblobs (prior + * to recognition) or the bounding box otherwise. + * A reconstruction of the original image (using xor to check for double + * representation) should be reasonably accurate, + * apart from removed noise, at the block level. Below the block level, the + * reconstruction will be missing images and line separators. + * At the symbol level, kerned characters will be invade the bounding box + * if rendered after recognition, making an xor reconstruction inaccurate, but + * an or construction better. Before recognition, symbol-level reconstruction + * should be good, even with xor, since the images come from the connected + * components. + */ + Pix* PageIterator::GetBinaryImage(PageIteratorLevel level) const { + int left, top, right, bottom; + if (!BoundingBoxInternal(level, &left, &top, &right, &bottom)) + return NULL; + if (level == RIL_SYMBOL && cblob_it_ != NULL && + cblob_it_->data()->area() != 0) + return cblob_it_->data()->render(); + Box* box = boxCreate(left, top, right - left, bottom - top); + Pix* pix = pixClipRectangle(tesseract_->pix_binary(), box, NULL); + boxDestroy(&box); + if (level == RIL_BLOCK || level == RIL_PARA) { + // Clip to the block polygon as well. + TBOX mask_box; + Pix* mask = it_->block()->block->render_mask(&mask_box); + int mask_x = left - mask_box.left(); + int mask_y = top - (tesseract_->ImageHeight() - mask_box.top()); + // AND the mask and pix, putting the result in pix. + pixRasterop(pix, MAX(0, -mask_x), MAX(0, -mask_y), pixGetWidth(pix), + pixGetHeight(pix), PIX_SRC & PIX_DST, mask, MAX(0, mask_x), + MAX(0, mask_y)); + pixDestroy(&mask); + } + return pix; + } + + /** + * Returns an image of the current object at the given level in greyscale + * if available in the input. To guarantee a binary image use BinaryImage. + * NOTE that in order to give the best possible image, the bounds are + * expanded slightly over the binary connected component, by the supplied + * padding, so the top-left position of the returned image is returned + * in (left,top). These will most likely not match the coordinates + * returned by BoundingBox. + * If you do not supply an original image, you will get a binary one. + * Use pixDestroy to delete the image after use. + */ + Pix* PageIterator::GetImage(PageIteratorLevel level, int padding, + Pix* original_img, + int* left, int* top) const { + int right, bottom; + if (!BoundingBox(level, left, top, &right, &bottom)) + return NULL; + if (original_img == NULL) + return GetBinaryImage(level); + + // Expand the box. + *left = MAX(*left - padding, 0); + *top = MAX(*top - padding, 0); + right = MIN(right + padding, rect_width_); + bottom = MIN(bottom + padding, rect_height_); + Box* box = boxCreate(*left, *top, right - *left, bottom - *top); + Pix* grey_pix = pixClipRectangle(original_img, box, NULL); + boxDestroy(&box); + if (level == RIL_BLOCK || level == RIL_PARA) { + // Clip to the block polygon as well. + TBOX mask_box; + Pix* mask = it_->block()->block->render_mask(&mask_box); + // Copy the mask registered correctly into an image the size of grey_pix. + int mask_x = *left - mask_box.left(); + int mask_y = *top - (pixGetHeight(original_img) - mask_box.top()); + int width = pixGetWidth(grey_pix); + int height = pixGetHeight(grey_pix); + Pix* resized_mask = pixCreate(width, height, 1); + pixRasterop(resized_mask, MAX(0, -mask_x), MAX(0, -mask_y), width, height, + PIX_SRC, mask, MAX(0, mask_x), MAX(0, mask_y)); + pixDestroy(&mask); + pixDilateBrick(resized_mask, resized_mask, 2 * padding + 1, + 2 * padding + 1); + pixInvert(resized_mask, resized_mask); + pixSetMasked(grey_pix, resized_mask, MAX_UINT32); + pixDestroy(&resized_mask); + } + return grey_pix; + } + + /** + * Returns the baseline of the current object at the given level. + * The baseline is the line that passes through (x1, y1) and (x2, y2). + * WARNING: with vertical text, baselines may be vertical! + */ + bool PageIterator::Baseline(PageIteratorLevel level, + int* x1, int* y1, int* x2, int* y2) const { + if (it_->word() == NULL) return false; // Already at the end! + ROW* row = it_->row()->row; + WERD* word = it_->word()->word; + TBOX box = (level == RIL_WORD || level == RIL_SYMBOL) + ? word->bounding_box() + : row->bounding_box(); + int left = box.left(); + ICOORD startpt(left, static_cast(row->base_line(left) + 0.5)); + int right = box.right(); + ICOORD endpt(right, static_cast(row->base_line(right) + 0.5)); + // Rotate to image coordinates and convert to global image coords. + startpt.rotate(it_->block()->block->re_rotation()); + endpt.rotate(it_->block()->block->re_rotation()); + *x1 = startpt.x() / scale_ + rect_left_; + *y1 = (rect_height_ - startpt.y()) / scale_ + rect_top_; + *x2 = endpt.x() / scale_ + rect_left_; + *y2 = (rect_height_ - endpt.y()) / scale_ + rect_top_; + return true; + } + + void PageIterator::Orientation(tesseract::Orientation *orientation, + tesseract::WritingDirection *writing_direction, + tesseract::TextlineOrder *textline_order, + float *deskew_angle) const { + BLOCK* block = it_->block()->block; + + // Orientation + FCOORD up_in_image(0.0, 1.0); + up_in_image.unrotate(block->classify_rotation()); + up_in_image.rotate(block->re_rotation()); + + if (up_in_image.x() == 0.0F) { + if (up_in_image.y() > 0.0F) { + *orientation = ORIENTATION_PAGE_UP; + } + else { + *orientation = ORIENTATION_PAGE_DOWN; + } + } + else if (up_in_image.x() > 0.0F) { + *orientation = ORIENTATION_PAGE_RIGHT; + } + else { + *orientation = ORIENTATION_PAGE_LEFT; + } + + return; + // Writing direction + bool is_vertical_text = (block->classify_rotation().x() == 0.0); + bool right_to_left = block->right_to_left(); + *writing_direction = + is_vertical_text + ? WRITING_DIRECTION_TOP_TO_BOTTOM + : (right_to_left + ? WRITING_DIRECTION_RIGHT_TO_LEFT + : WRITING_DIRECTION_LEFT_TO_RIGHT); + + // Textline Order + bool is_mongolian = false; // TODO(eger): fix me + *textline_order = is_vertical_text + ? (is_mongolian + ? TEXTLINE_ORDER_LEFT_TO_RIGHT + : TEXTLINE_ORDER_RIGHT_TO_LEFT) + : TEXTLINE_ORDER_TOP_TO_BOTTOM; + + // Deskew angle + FCOORD skew = block->skew(); // true horizontal for textlines + *deskew_angle = -skew.angle(); + } + + void PageIterator::ParagraphInfo(tesseract::ParagraphJustification *just, + bool *is_list_item, + bool *is_crown, + int *first_line_indent) const { + *just = tesseract::JUSTIFICATION_UNKNOWN; + if (!it_->row() || !it_->row()->row || !it_->row()->row->para() || + !it_->row()->row->para()->model) + return; + + PARA *para = it_->row()->row->para(); + *is_list_item = para->is_list_item; + *is_crown = para->is_very_first_or_continuation; + *first_line_indent = para->model->first_indent() - + para->model->body_indent(); + *just = para->model->justification(); + } + + /** + * Sets up the internal data for iterating the blobs of a new word, then + * moves the iterator to the given offset. + */ + void PageIterator::BeginWord(int offset) { + WERD_RES* word_res = it_->word(); + if (word_res == NULL) { + // This is a non-text block, so there is no word. + word_length_ = 0; + blob_index_ = 0; + word_ = NULL; + return; + } + if (word_res->best_choice != NULL) { + // Recognition has been done, so we are using the box_word, which + // is already baseline denormalized. + word_length_ = word_res->best_choice->length(); + if (word_res->box_word != NULL) { + if (word_res->box_word->length() != word_length_) { + tprintf("Corrupted word! best_choice[len=%d] = %s, box_word[len=%d]: ", + word_length_, word_res->best_choice->unichar_string().string(), + word_res->box_word->length()); + word_res->box_word->bounding_box().print(); + } + ASSERT_HOST(word_res->box_word->length() == word_length_); + } + word_ = NULL; + // We will be iterating the box_word. + delete cblob_it_; + cblob_it_ = NULL; + } + else { + // No recognition yet, so a "symbol" is a cblob. + word_ = word_res->word; + ASSERT_HOST(word_->cblob_list() != NULL); + word_length_ = word_->cblob_list()->length(); + if (cblob_it_ == NULL) cblob_it_ = new C_BLOB_IT; + cblob_it_->set_to_list(word_->cblob_list()); + } + for (blob_index_ = 0; blob_index_ < offset; ++blob_index_) { + if (cblob_it_ != NULL) + cblob_it_->forward(); + } + } + + bool PageIterator::SetWordBlamerBundle(BlamerBundle *blamer_bundle) { + if (it_->word() != NULL) { + it_->word()->blamer_bundle = blamer_bundle; + return true; + } + else { + return false; + } + } + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccmain/pageiterator.h b/3rdparty/hgOCR/include/ccmain/pageiterator.h new file mode 100644 index 00000000..6d19e783 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pageiterator.h @@ -0,0 +1,364 @@ +/////////////////////////////////////////////////////////////////////// +// File: pageiterator.h +// Description: Iterator for tesseract page structure that avoids using +// tesseract internal data structures. +// Author: Ray Smith +// Created: Fri Feb 26 11:01:06 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_PAGEITERATOR_H__ +#define TESSERACT_CCMAIN_PAGEITERATOR_H__ + +#include "publictypes.h" +#include "platform.h" + +struct BlamerBundle; +class C_BLOB_IT; +class PAGE_RES; +class PAGE_RES_IT; +class WERD; +struct Pix; +struct Pta; + +namespace tesseract { + + class Tesseract; + + /** + * Class to iterate over tesseract page structure, providing access to all + * levels of the page hierarchy, without including any tesseract headers or + * having to handle any tesseract structures. + * WARNING! This class points to data held within the TessBaseAPI class, and + * therefore can only be used while the TessBaseAPI class still exists and + * has not been subjected to a call of Init, SetImage, Recognize, Clear, End + * DetectOS, or anything else that changes the internal PAGE_RES. + * See apitypes.h for the definition of PageIteratorLevel. + * See also ResultIterator, derived from PageIterator, which adds in the + * ability to access OCR output with text-specific methods. + */ + + class TESS_API PageIterator { + public: + /** + * page_res and tesseract come directly from the BaseAPI. + * The rectangle parameters are copied indirectly from the Thresholder, + * via the BaseAPI. They represent the coordinates of some rectangle in an + * original image (in top-left-origin coordinates) and therefore the top-left + * needs to be added to any output boxes in order to specify coordinates + * in the original image. See TessBaseAPI::SetRectangle. + * The scale and scaled_yres are in case the Thresholder scaled the image + * rectangle prior to thresholding. Any coordinates in tesseract's image + * must be divided by scale before adding (rect_left, rect_top). + * The scaled_yres indicates the effective resolution of the binary image + * that tesseract has been given by the Thresholder. + * After the constructor, Begin has already been called. + */ + PageIterator(PAGE_RES* page_res, Tesseract* tesseract, + int scale, int scaled_yres, + int rect_left, int rect_top, + int rect_width, int rect_height); + virtual ~PageIterator(); + + /** + * Page/ResultIterators may be copied! This makes it possible to iterate over + * all the objects at a lower level, while maintaining an iterator to + * objects at a higher level. These constructors DO NOT CALL Begin, so + * iterations will continue from the location of src. + */ + PageIterator(const PageIterator& src); + const PageIterator& operator=(const PageIterator& src); + + /** Are we positioned at the same location as other? */ + bool PositionedAtSameWord(const PAGE_RES_IT* other) const; + + // ============= Moving around within the page ============. + + /** + * Moves the iterator to point to the start of the page to begin an + * iteration. + */ + virtual void Begin(); + + /** + * Moves the iterator to the beginning of the paragraph. + * This class implements this functionality by moving it to the zero indexed + * blob of the first (leftmost) word on the first row of the paragraph. + */ + virtual void RestartParagraph(); + + /** + * Return whether this iterator points anywhere in the first textline of a + * paragraph. + */ + bool IsWithinFirstTextlineOfParagraph() const; + + /** + * Moves the iterator to the beginning of the text line. + * This class implements this functionality by moving it to the zero indexed + * blob of the first (leftmost) word of the row. + */ + virtual void RestartRow(); + + /** + * Moves to the start of the next object at the given level in the + * page hierarchy, and returns false if the end of the page was reached. + * NOTE that RIL_SYMBOL will skip non-text blocks, but all other + * PageIteratorLevel level values will visit each non-text block once. + * Think of non text blocks as containing a single para, with a single line, + * with a single imaginary word. + * Calls to Next with different levels may be freely intermixed. + * This function iterates words in right-to-left scripts correctly, if + * the appropriate language has been loaded into Tesseract. + */ + virtual bool Next(PageIteratorLevel level); + + /** + * Returns true if the iterator is at the start of an object at the given + * level. + * + * For instance, suppose an iterator it is pointed to the first symbol of the + * first word of the third line of the second paragraph of the first block in + * a page, then: + * it.IsAtBeginningOf(RIL_BLOCK) = false + * it.IsAtBeginningOf(RIL_PARA) = false + * it.IsAtBeginningOf(RIL_TEXTLINE) = true + * it.IsAtBeginningOf(RIL_WORD) = true + * it.IsAtBeginningOf(RIL_SYMBOL) = true + */ + virtual bool IsAtBeginningOf(PageIteratorLevel level) const; + + /** + * Returns whether the iterator is positioned at the last element in a + * given level. (e.g. the last word in a line, the last line in a block) + * + * Here's some two-paragraph example + * text. It starts off innocuously + * enough but quickly turns bizarre. + * The author inserts a cornucopia + * of words to guard against confused + * references. + * + * Now take an iterator it pointed to the start of "bizarre." + * it.IsAtFinalElement(RIL_PARA, RIL_SYMBOL) = false + * it.IsAtFinalElement(RIL_PARA, RIL_WORD) = true + * it.IsAtFinalElement(RIL_BLOCK, RIL_WORD) = false + */ + virtual bool IsAtFinalElement(PageIteratorLevel level, + PageIteratorLevel element) const; + + /** + * Returns whether this iterator is positioned + * before other: -1 + * equal to other: 0 + * after other: 1 + */ + int Cmp(const PageIterator &other) const; + + // ============= Accessing data ==============. + // Coordinate system: + // Integer coordinates are at the cracks between the pixels. + // The top-left corner of the top-left pixel in the image is at (0,0). + // The bottom-right corner of the bottom-right pixel in the image is at + // (width, height). + // Every bounding box goes from the top-left of the top-left contained + // pixel to the bottom-right of the bottom-right contained pixel, so + // the bounding box of the single top-left pixel in the image is: + // (0,0)->(1,1). + // If an image rectangle has been set in the API, then returned coordinates + // relate to the original (full) image, rather than the rectangle. + + /** + * Controls what to include in a bounding box. Bounding boxes of all levels + * between RIL_WORD and RIL_BLOCK can include or exclude potential diacritics. + * Between layout analysis and recognition, it isn't known where all + * diacritics belong, so this control is used to include or exclude some + * diacritics that are above or below the main body of the word. In most cases + * where the placement is obvious, and after recognition, it doesn't make as + * much difference, as the diacritics will already be included in the word. + */ + void SetBoundingBoxComponents(bool include_upper_dots, + bool include_lower_dots) { + include_upper_dots_ = include_upper_dots; + include_lower_dots_ = include_lower_dots; + } + + /** + * Returns the bounding rectangle of the current object at the given level. + * See comment on coordinate system above. + * Returns false if there is no such object at the current position. + * The returned bounding box is guaranteed to match the size and position + * of the image returned by GetBinaryImage, but may clip foreground pixels + * from a grey image. The padding argument to GetImage can be used to expand + * the image to include more foreground pixels. See GetImage below. + */ + bool BoundingBox(PageIteratorLevel level, + int* left, int* top, int* right, int* bottom) const; + bool BoundingBox(PageIteratorLevel level, const int padding, + int* left, int* top, int* right, int* bottom) const; + /** + * Returns the bounding rectangle of the object in a coordinate system of the + * working image rectangle having its origin at (rect_left_, rect_top_) with + * respect to the original image and is scaled by a factor scale_. + */ + bool BoundingBoxInternal(PageIteratorLevel level, + int* left, int* top, int* right, int* bottom) const; + + /** Returns whether there is no object of a given level. */ + bool Empty(PageIteratorLevel level) const; + + /** + * Returns the type of the current block. See apitypes.h for + * PolyBlockType. + */ + PolyBlockType BlockType() const; + + /** + * Returns the polygon outline of the current block. The returned Pta must + * be ptaDestroy-ed after use. Note that the returned Pta lists the vertices + * of the polygon, and the last edge is the line segment between the last + * point and the first point. NULL will be returned if the iterator is + * at the end of the document or layout analysis was not used. + */ + Pta* BlockPolygon() const; + + /** + * Returns a binary image of the current object at the given level. + * The position and size match the return from BoundingBoxInternal, and so + * this could be upscaled with respect to the original input image. + * Use pixDestroy to delete the image after use. + */ + Pix* GetBinaryImage(PageIteratorLevel level) const; + + /** + * Returns an image of the current object at the given level in greyscale + * if available in the input. To guarantee a binary image use BinaryImage. + * NOTE that in order to give the best possible image, the bounds are + * expanded slightly over the binary connected component, by the supplied + * padding, so the top-left position of the returned image is returned + * in (left,top). These will most likely not match the coordinates + * returned by BoundingBox. + * If you do not supply an original image, you will get a binary one. + * Use pixDestroy to delete the image after use. + */ + Pix* GetImage(PageIteratorLevel level, int padding, Pix* original_img, + int* left, int* top) const; + + /** + * Returns the baseline of the current object at the given level. + * The baseline is the line that passes through (x1, y1) and (x2, y2). + * WARNING: with vertical text, baselines may be vertical! + * Returns false if there is no baseline at the current position. + */ + bool Baseline(PageIteratorLevel level, + int* x1, int* y1, int* x2, int* y2) const; + + /** + * Returns orientation for the block the iterator points to. + * orientation, writing_direction, textline_order: see publictypes.h + * deskew_angle: after rotating the block so the text orientation is + * upright, how many radians does one have to rotate the + * block anti-clockwise for it to be level? + * -Pi/4 <= deskew_angle <= Pi/4 + */ + void Orientation(tesseract::Orientation *orientation, + tesseract::WritingDirection *writing_direction, + tesseract::TextlineOrder *textline_order, + float *deskew_angle) const; + + /** + * Returns information about the current paragraph, if available. + * + * justification - + * LEFT if ragged right, or fully justified and script is left-to-right. + * RIGHT if ragged left, or fully justified and script is right-to-left. + * unknown if it looks like source code or we have very few lines. + * is_list_item - + * true if we believe this is a member of an ordered or unordered list. + * is_crown - + * true if the first line of the paragraph is aligned with the other + * lines of the paragraph even though subsequent paragraphs have first + * line indents. This typically indicates that this is the continuation + * of a previous paragraph or that it is the very first paragraph in + * the chapter. + * first_line_indent - + * For LEFT aligned paragraphs, the first text line of paragraphs of + * this kind are indented this many pixels from the left edge of the + * rest of the paragraph. + * for RIGHT aligned paragraphs, the first text line of paragraphs of + * this kind are indented this many pixels from the right edge of the + * rest of the paragraph. + * NOTE 1: This value may be negative. + * NOTE 2: if *is_crown == true, the first line of this paragraph is + * actually flush, and first_line_indent is set to the "common" + * first_line_indent for subsequent paragraphs in this block + * of text. + */ + void ParagraphInfo(tesseract::ParagraphJustification *justification, + bool *is_list_item, + bool *is_crown, + int *first_line_indent) const; + + // If the current WERD_RES (it_->word()) is not NULL, sets the BlamerBundle + // of the current word to the given pointer (takes ownership of the pointer) + // and returns true. + // Can only be used when iterating on the word level. + bool SetWordBlamerBundle(BlamerBundle *blamer_bundle); + + protected: + /** + * Sets up the internal data for iterating the blobs of a new word, then + * moves the iterator to the given offset. + */ + TESS_LOCAL void BeginWord(int offset); + + /** Pointer to the page_res owned by the API. */ + PAGE_RES* page_res_; + /** Pointer to the Tesseract object owned by the API. */ + Tesseract* tesseract_; + /** + * The iterator to the page_res_. Owned by this ResultIterator. + * A pointer just to avoid dragging in Tesseract includes. + */ + PAGE_RES_IT* it_; + /** + * The current input WERD being iterated. If there is an output from OCR, + * then word_ is NULL. Owned by the API + */ + WERD* word_; + /** The length of the current word_. */ + int word_length_; + /** The current blob index within the word. */ + int blob_index_; + /** + * Iterator to the blobs within the word. If NULL, then we are iterating + * OCR results in the box_word. + * Owned by this ResultIterator. + */ + C_BLOB_IT* cblob_it_; + /** Control over what to include in bounding boxes. */ + bool include_upper_dots_; + bool include_lower_dots_; + /** Parameters saved from the Thresholder. Needed to rebuild coordinates.*/ + int scale_; + int scaled_yres_; + int rect_left_; + int rect_top_; + int rect_width_; + int rect_height_; + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_PAGEITERATOR_H__ diff --git a/3rdparty/hgOCR/include/ccmain/pagesegmain.cpp b/3rdparty/hgOCR/include/ccmain/pagesegmain.cpp new file mode 100644 index 00000000..94242048 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pagesegmain.cpp @@ -0,0 +1,434 @@ +/********************************************************************** + * File: pagesegmain.cpp + * Description: Top-level page segmenter for Tesseract. + * Author: Ray Smith + * Created: Thu Sep 25 17:12:01 PDT 2008 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _WIN32 +#ifndef unlink +#include +#endif +#else +#include +#endif // _WIN32 +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "allheaders.h" +#include "blobbox.h" +#include "blread.h" +#include "colfind.h" +#include "equationdetect.h" +#include "imagefind.h" +#include "linefind.h" +#include "makerow.h" +#include "osdetect.h" +#include "tabvector.h" +#include "tesseractclass.h" +#include "tessvars.h" +#include "textord.h" +#include "tordmain.h" +#include "wordseg.h" + +namespace tesseract { + + // Max erosions to perform in removing an enclosing circle. + const int kMaxCircleErosions = 8; + + // Helper to remove an enclosing circle from an image. + // If there isn't one, then the image will most likely get badly mangled. + // The returned pix must be pixDestroyed after use. NULL may be returned + // if the image doesn't meet the trivial conditions that it uses to determine + // success. + static Pix* RemoveEnclosingCircle(Pix* pixs) { + Pix* pixsi = pixInvert(NULL, pixs); + Pix* pixc = pixCreateTemplate(pixs); + pixSetOrClearBorder(pixc, 1, 1, 1, 1, PIX_SET); + pixSeedfillBinary(pixc, pixc, pixsi, 4); + pixInvert(pixc, pixc); + pixDestroy(&pixsi); + Pix* pixt = pixAnd(NULL, pixs, pixc); + l_int32 max_count; + pixCountConnComp(pixt, 8, &max_count); + // The count has to go up before we start looking for the minimum. + l_int32 min_count = MAX_INT32; + Pix* pixout = NULL; + for (int i = 1; i < kMaxCircleErosions; i++) { + pixDestroy(&pixt); + pixErodeBrick(pixc, pixc, 3, 3); + pixt = pixAnd(NULL, pixs, pixc); + l_int32 count; + pixCountConnComp(pixt, 8, &count); + if (i == 1 || count > max_count) { + max_count = count; + min_count = count; + } + else if (i > 1 && count < min_count) { + min_count = count; + pixDestroy(&pixout); + pixout = pixCopy(NULL, pixt); // Save the best. + } + else if (count >= min_count) { + break; // We have passed by the best. + } + } + pixDestroy(&pixt); + pixDestroy(&pixc); + return pixout; + } + + /** + * Segment the page according to the current value of tessedit_pageseg_mode. + * pix_binary_ is used as the source image and should not be NULL. + * On return the blocks list owns all the constructed page layout. + */ + int Tesseract::SegmentPage(const STRING* input_file, BLOCK_LIST* blocks, + Tesseract* osd_tess, OSResults* osr) { + ASSERT_HOST(pix_binary_ != NULL); + int width = pixGetWidth(pix_binary_); + int height = pixGetHeight(pix_binary_); + // Get page segmentation mode. + PageSegMode pageseg_mode = static_cast( + static_cast(tessedit_pageseg_mode)); + // If a UNLV zone file can be found, use that instead of segmentation. + if (!PSM_COL_FIND_ENABLED(pageseg_mode) && + input_file != NULL && input_file->length() > 0) { + STRING name = *input_file; + const char* lastdot = strrchr(name.string(), '.'); + if (lastdot != NULL) + name[lastdot - name.string()] = '\0'; + read_unlv_file(name, width, height, blocks); + } + if (blocks->empty()) { + // No UNLV file present. Work according to the PageSegMode. + // First make a single block covering the whole image. + BLOCK_IT block_it(blocks); + BLOCK* block = new BLOCK("", TRUE, 0, 0, 0, 0, width, height); + block->set_right_to_left(right_to_left()); + block_it.add_to_end(block); + } + else { + // UNLV file present. Use PSM_SINGLE_BLOCK. + pageseg_mode = PSM_SINGLE_BLOCK; + } + // The diacritic_blobs holds noise blobs that may be diacritics. They + // are separated out on areas of the image that seem noisy and short-circuit + // the layout process, going straight from the initial partition creation + // right through to after word segmentation, where they are added to the + // rej_cblobs list of the most appropriate word. From there classification + // will determine whether they are used. + BLOBNBOX_LIST diacritic_blobs; + int auto_page_seg_ret_val = 0; + TO_BLOCK_LIST to_blocks; + if (PSM_OSD_ENABLED(pageseg_mode) || PSM_BLOCK_FIND_ENABLED(pageseg_mode) || + PSM_SPARSE(pageseg_mode)) { + auto_page_seg_ret_val = AutoPageSeg( + pageseg_mode, blocks, &to_blocks, + enable_noise_removal ? &diacritic_blobs : NULL, osd_tess, osr); + if (pageseg_mode == PSM_OSD_ONLY) + return auto_page_seg_ret_val; + // To create blobs from the image region bounds uncomment this line: + // to_blocks.clear(); // Uncomment to go back to the old mode. + } + else { + deskew_ = FCOORD(1.0f, 0.0f); + reskew_ = FCOORD(1.0f, 0.0f); + if (pageseg_mode == PSM_CIRCLE_WORD) { + Pix* pixcleaned = RemoveEnclosingCircle(pix_binary_); + if (pixcleaned != NULL) { + pixDestroy(&pix_binary_); + pix_binary_ = pixcleaned; + } + } + } + + if (auto_page_seg_ret_val < 0) { + return -1; + } + + if (blocks->empty()) { + if (textord_debug_tabfind) + tprintf("Empty page\n"); + return 0; // AutoPageSeg found an empty page. + } + bool splitting = + pageseg_devanagari_split_strategy != ShiroRekhaSplitter::NO_SPLIT; + bool cjk_mode = textord_use_cjk_fp_model; + + textord_.TextordPage(pageseg_mode, reskew_, width, height, pix_binary_, + pix_thresholds_, pix_grey_, splitting || cjk_mode, + &diacritic_blobs, blocks, &to_blocks); + return auto_page_seg_ret_val; + } + + // Helper writes a grey image to a file for use by scrollviewer. + // Normally for speed we don't display the image in the layout debug windows. + // If textord_debug_images is true, we draw the image as a background to some + // of the debug windows. printable determines whether these + // images are optimized for printing instead of screen display. + static void WriteDebugBackgroundImage(bool printable, Pix* pix_binary) { + Pix* grey_pix = pixCreate(pixGetWidth(pix_binary), + pixGetHeight(pix_binary), 8); + // Printable images are light grey on white, but for screen display + // they are black on dark grey so the other colors show up well. + if (printable) { + pixSetAll(grey_pix); + pixSetMasked(grey_pix, pix_binary, 192); + } + else { + pixSetAllArbitrary(grey_pix, 64); + pixSetMasked(grey_pix, pix_binary, 0); + } + AlignedBlob::IncrementDebugPix(); + pixWrite(AlignedBlob::textord_debug_pix().string(), grey_pix, IFF_PNG); + pixDestroy(&grey_pix); + } + + /** + * Auto page segmentation. Divide the page image into blocks of uniform + * text linespacing and images. + * + * Resolution (in ppi) is derived from the input image. + * + * The output goes in the blocks list with corresponding TO_BLOCKs in the + * to_blocks list. + * + * If !PSM_COL_FIND_ENABLED(pageseg_mode), then no attempt is made to divide + * the image into columns, but multiple blocks are still made if the text is + * of non-uniform linespacing. + * + * If diacritic_blobs is non-null, then diacritics/noise blobs, that would + * confuse layout anaylsis by causing textline overlap, are placed there, + * with the expectation that they will be reassigned to words later and + * noise/diacriticness determined via classification. + * + * If osd (orientation and script detection) is true then that is performed + * as well. If only_osd is true, then only orientation and script detection is + * performed. If osd is desired, (osd or only_osd) then osr_tess must be + * another Tesseract that was initialized especially for osd, and the results + * will be output into osr (orientation and script result). + */ + int Tesseract::AutoPageSeg(PageSegMode pageseg_mode, BLOCK_LIST* blocks, + TO_BLOCK_LIST* to_blocks, + BLOBNBOX_LIST* diacritic_blobs, Tesseract* osd_tess, + OSResults* osr) { + if (textord_debug_images) { + WriteDebugBackgroundImage(textord_debug_printable, pix_binary_); + } + Pix* photomask_pix = NULL; + Pix* musicmask_pix = NULL; + // The blocks made by the ColumnFinder. Moved to blocks before return. + BLOCK_LIST found_blocks; + TO_BLOCK_LIST temp_blocks; + + ColumnFinder* finder = SetupPageSegAndDetectOrientation( + pageseg_mode, blocks, osd_tess, osr, &temp_blocks, &photomask_pix, + &musicmask_pix); + int result = 0; + if (finder != NULL) { + TO_BLOCK_IT to_block_it(&temp_blocks); + TO_BLOCK* to_block = to_block_it.data(); + if (musicmask_pix != NULL) { + // TODO(rays) pass the musicmask_pix into FindBlocks and mark music + // blocks separately. For now combine with photomask_pix. + pixOr(photomask_pix, photomask_pix, musicmask_pix); + } + if (equ_detect_) { + finder->SetEquationDetect(equ_detect_); + } + /* бǶʶ + result = finder->FindBlocks( + pageseg_mode, scaled_color_, scaled_factor_, to_block, photomask_pix, + pix_thresholds_, pix_grey_, &found_blocks, diacritic_blobs, to_blocks); + if (result >= 0) + finder->GetDeskewVectors(&deskew_, &reskew_); + */ + delete finder; + } + pixDestroy(&photomask_pix); + pixDestroy(&musicmask_pix); + if (result < 0) return result; + + blocks->clear(); + BLOCK_IT block_it(blocks); + // Move the found blocks to the input/output blocks. + block_it.add_list_after(&found_blocks); + + if (textord_debug_images) { + // The debug image is no longer needed so delete it. + unlink(AlignedBlob::textord_debug_pix().string()); + } + return result; + } + + // Helper adds all the scripts from sid_set converted to ids from osd_set to + // allowed_ids. + static void AddAllScriptsConverted(const UNICHARSET& sid_set, + const UNICHARSET& osd_set, + GenericVector* allowed_ids) { + for (int i = 0; i < sid_set.get_script_table_size(); ++i) { + if (i != sid_set.null_sid()) { + const char* script = sid_set.get_script_from_script_id(i); + allowed_ids->push_back(osd_set.get_script_id_from_name(script)); + } + } + } + + /** + * Sets up auto page segmentation, determines the orientation, and corrects it. + * Somewhat arbitrary chunk of functionality, factored out of AutoPageSeg to + * facilitate testing. + * photo_mask_pix is a pointer to a NULL pointer that will be filled on return + * with the leptonica photo mask, which must be pixDestroyed by the caller. + * to_blocks is an empty list that will be filled with (usually a single) + * block that is used during layout analysis. This ugly API is required + * because of the possibility of a unlv zone file. + * TODO(rays) clean this up. + * See AutoPageSeg for other arguments. + * The returned ColumnFinder must be deleted after use. + */ + ColumnFinder* Tesseract::SetupPageSegAndDetectOrientation( + PageSegMode pageseg_mode, BLOCK_LIST* blocks, Tesseract* osd_tess, + OSResults* osr, TO_BLOCK_LIST* to_blocks, Pix** photo_mask_pix, + Pix** music_mask_pix) { + int vertical_x = 0; + int vertical_y = 1; + TabVector_LIST v_lines; + TabVector_LIST h_lines; + ICOORD bleft(0, 0); + + ASSERT_HOST(pix_binary_ != NULL); + if (tessedit_dump_pageseg_images) { + pixWrite("tessinput.png", pix_binary_, IFF_PNG); + } + // Leptonica is used to find the rule/separator lines in the input. + LineFinder::FindAndRemoveLines(source_resolution_, + textord_tabfind_show_vlines, pix_binary_, + &vertical_x, &vertical_y, music_mask_pix, + &v_lines, &h_lines); + if (tessedit_dump_pageseg_images) + pixWrite("tessnolines.png", pix_binary_, IFF_PNG); + // Leptonica is used to find a mask of the photo regions in the input. + *photo_mask_pix = ImageFind::FindImages(pix_binary_); + if (tessedit_dump_pageseg_images) + pixWrite("tessnoimages.png", pix_binary_, IFF_PNG); + if (!PSM_COL_FIND_ENABLED(pageseg_mode)) v_lines.clear(); + + // The rest of the algorithm uses the usual connected components. + textord_.find_components(pix_binary_, blocks, to_blocks); + + TO_BLOCK_IT to_block_it(to_blocks); + // There must be exactly one input block. + // TODO(rays) handle new textline finding with a UNLV zone file. + ASSERT_HOST(to_blocks->singleton()); + TO_BLOCK* to_block = to_block_it.data(); + TBOX blkbox = to_block->block->bounding_box(); + ColumnFinder* finder = NULL; + + if (to_block->line_size >= 2) { + finder = new ColumnFinder(static_cast(to_block->line_size), + blkbox.botleft(), blkbox.topright(), + source_resolution_, textord_use_cjk_fp_model, + textord_tabfind_aligned_gap_fraction, + &v_lines, &h_lines, vertical_x, vertical_y); + + finder->SetupAndFilterNoise(pageseg_mode, *photo_mask_pix, to_block); + + if (equ_detect_) { + equ_detect_->LabelSpecialText(to_block); + } + + BLOBNBOX_CLIST osd_blobs; + // osd_orientation is the number of 90 degree rotations to make the + // characters upright. (See osdetect.h for precise definition.) + // We want the text lines horizontal, (vertical text indicates vertical + // textlines) which may conflict (eg vertically written CJK). + int osd_orientation = 0; + bool vertical_text = textord_tabfind_force_vertical_text || + pageseg_mode == PSM_SINGLE_BLOCK_VERT_TEXT; + if (!vertical_text && textord_tabfind_vertical_text && + PSM_ORIENTATION_ENABLED(pageseg_mode)) { + vertical_text = + finder->IsVerticallyAlignedText(textord_tabfind_vertical_text_ratio, + to_block, &osd_blobs); + } + if (PSM_OSD_ENABLED(pageseg_mode) && osd_tess != NULL && osr != NULL) { + GenericVector osd_scripts; + if (osd_tess != this) { + // We are running osd as part of layout analysis, so constrain the + // scripts to those allowed by *this. + AddAllScriptsConverted(unicharset, osd_tess->unicharset, &osd_scripts); + for (int s = 0; s < sub_langs_.size(); ++s) { + AddAllScriptsConverted(sub_langs_[s]->unicharset, + osd_tess->unicharset, &osd_scripts); + } + } + os_detect_blobs(&osd_scripts, &osd_blobs, osr, osd_tess); + if (pageseg_mode == PSM_OSD_ONLY) { + delete finder; + return NULL; + } + osd_orientation = osr->best_result.orientation_id; + double osd_score = osr->orientations[osd_orientation]; + double osd_margin = min_orientation_margin * 2; + for (int i = 0; i < 4; ++i) { + if (i != osd_orientation && + osd_score - osr->orientations[i] < osd_margin) { + osd_margin = osd_score - osr->orientations[i]; + } + } + int best_script_id = osr->best_result.script_id; + const char* best_script_str = + osd_tess->unicharset.get_script_from_script_id(best_script_id); + bool cjk = best_script_id == osd_tess->unicharset.han_sid() || + best_script_id == osd_tess->unicharset.hiragana_sid() || + best_script_id == osd_tess->unicharset.katakana_sid() || + strcmp("Japanese", best_script_str) == 0 || + strcmp("Korean", best_script_str) == 0 || + strcmp("Hangul", best_script_str) == 0; + if (cjk) { + finder->set_cjk_script(true); + } + if (osd_margin < min_orientation_margin) { + // The margin is weak. + if (!cjk && !vertical_text && osd_orientation == 2) { + // upside down latin text is improbable with such a weak margin. + tprintf("OSD: Weak margin (%.2f), horiz textlines, not CJK: " + "Don't rotate.\n", osd_margin); + osd_orientation = 0; + } + else { + tprintf( + "OSD: Weak margin (%.2f) for %d blob text block, " + "but using orientation anyway: %d\n", + osd_margin, osd_blobs.length(), osd_orientation); + } + } + } + osd_blobs.shallow_clear(); + finder->CorrectOrientation(to_block, vertical_text, osd_orientation); + } + + return finder; + } + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccmain/pagewalk.cpp b/3rdparty/hgOCR/include/ccmain/pagewalk.cpp new file mode 100644 index 00000000..b3439f4d --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pagewalk.cpp @@ -0,0 +1,43 @@ +/********************************************************************** + * File: pagewalk.cpp (Formerly walkers.c) + * Description: Block list processors + * Author: Phil Cheatle + * Created: Thu Oct 10 16:25:24 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "pageres.h" +#include "tesseractclass.h" + +namespace tesseract { + /** + * @name process_selected_words() + * + * Walk the current block list applying the specified word processor function + * to each word that overlaps the selection_box. + */ + void Tesseract::process_selected_words( + PAGE_RES* page_res, // blocks to check + TBOX & selection_box, + BOOL8(tesseract::Tesseract::*word_processor)(PAGE_RES_IT* pr_it)) { + for (PAGE_RES_IT page_res_it(page_res); page_res_it.word() != NULL; + page_res_it.forward()) { + WERD* word = page_res_it.word()->word; + if (word->bounding_box().overlap(selection_box)) { + if (!(this->*word_processor)(&page_res_it)) + return; + } + } + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/par_control.cpp b/3rdparty/hgOCR/include/ccmain/par_control.cpp new file mode 100644 index 00000000..c6a22b7a --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/par_control.cpp @@ -0,0 +1,69 @@ +/////////////////////////////////////////////////////////////////////// +// File: par_control.cpp +// Description: Control code for parallel implementation. +// Author: Ray Smith +// Created: Mon Nov 04 13:23:15 PST 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "tesseractclass.h" + +namespace tesseract { + + struct BlobData { + BlobData() : blob(NULL), choices(NULL) {} + BlobData(int index, Tesseract* tess, const WERD_RES& word) + : blob(word.chopped_word->blobs[index]), + tesseract(tess), + choices(&(*word.ratings)(index, index)) {} + + TBLOB* blob; + Tesseract* tesseract; + BLOB_CHOICE_LIST** choices; + }; + + void Tesseract::PrerecAllWordsPar(const GenericVector& words) { + // Prepare all the blobs. + GenericVector blobs; + for (int w = 0; w < words.size(); ++w) { + if (words[w].word->ratings != NULL && + words[w].word->ratings->get(0, 0) == NULL) { + for (int s = 0; s < words[w].lang_words.size(); ++s) { + Tesseract* sub = s < sub_langs_.size() ? sub_langs_[s] : this; + const WERD_RES& word = *words[w].lang_words[s]; + for (int b = 0; b < word.chopped_word->NumBlobs(); ++b) { + blobs.push_back(BlobData(b, sub, word)); + } + } + } + } + // Pre-classify all the blobs. + if (tessedit_parallelize > 1) { + for (int b = 0; b < blobs.size(); ++b) { + *blobs[b].choices = + blobs[b].tesseract->classify_blob(blobs[b].blob, "par", White, NULL); + } + } + else { + // TODO(AMD) parallelize this. + for (int b = 0; b < blobs.size(); ++b) { + *blobs[b].choices = + blobs[b].tesseract->classify_blob(blobs[b].blob, "par", White, NULL); + } + } + } + +} // namespace tesseract. + + diff --git a/3rdparty/hgOCR/include/ccmain/paragraphs.cpp b/3rdparty/hgOCR/include/ccmain/paragraphs.cpp new file mode 100644 index 00000000..9875ae8e --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/paragraphs.cpp @@ -0,0 +1,2625 @@ +/********************************************************************** + * File: paragraphs.cpp + * Description: Paragraph detection for tesseract. + * Author: David Eger + * Created: 25 February 2011 + * + * (C) Copyright 2011, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ +#ifdef _MSC_VER +#define __func__ __FUNCTION__ +#endif + +#include + +#include "genericvector.h" +#include "helpers.h" +#include "mutableiterator.h" +#include "ocrpara.h" +#include "pageres.h" +#include "paragraphs.h" +#include "paragraphs_internal.h" +#include "publictypes.h" +#include "ratngs.h" +#include "rect.h" +#include "statistc.h" +#include "strngs.h" +#include "tprintf.h" +#include "unicharset.h" +#include "unicodes.h" + +namespace tesseract { + + // Special "weak" ParagraphModels. + const ParagraphModel *kCrownLeft + = reinterpret_cast(0xDEAD111F); + const ParagraphModel *kCrownRight + = reinterpret_cast(0xDEAD888F); + + // Given the width of a typical space between words, what is the threshold + // by which by which we think left and right alignments for paragraphs + // can vary and still be aligned. + static int Epsilon(int space_pix) { + return space_pix * 4 / 5; + } + + static bool AcceptableRowArgs( + int debug_level, int min_num_rows, const char *function_name, + const GenericVector *rows, + int row_start, int row_end) { + if (row_start < 0 || row_end > rows->size() || row_start > row_end) { + tprintf("Invalid arguments rows[%d, %d) while rows is of size %d.\n", + row_start, row_end, rows->size()); + return false; + } + if (row_end - row_start < min_num_rows) { + if (debug_level > 1) { + tprintf("# Too few rows[%d, %d) for %s.\n", + row_start, row_end, function_name); + } + return false; + } + return true; + } + + // =============================== Debug Code ================================ + + // Convert an integer to a decimal string. + static STRING StrOf(int num) { + char buffer[30]; + snprintf(buffer, sizeof(buffer), "%d", num); + return STRING(buffer); + } + + // Given a row-major matrix of unicode text and a column separator, print + // a formatted table. For ASCII, we get good column alignment. + static void PrintTable(const GenericVector > &rows, + const STRING &colsep) { + GenericVector max_col_widths; + for (int r = 0; r < rows.size(); r++) { + int num_columns = rows[r].size(); + for (int c = 0; c < num_columns; c++) { + int num_unicodes = 0; + for (int i = 0; i < rows[r][c].size(); i++) { + if ((rows[r][c][i] & 0xC0) != 0x80) num_unicodes++; + } + if (c >= max_col_widths.size()) { + max_col_widths.push_back(num_unicodes); + } + else { + if (num_unicodes > max_col_widths[c]) + max_col_widths[c] = num_unicodes; + } + } + } + + GenericVector col_width_patterns; + for (int c = 0; c < max_col_widths.size(); c++) { + col_width_patterns.push_back( + STRING("%-") + StrOf(max_col_widths[c]) + "s"); + } + + for (int r = 0; r < rows.size(); r++) { + for (int c = 0; c < rows[r].size(); c++) { + if (c > 0) + tprintf("%s", colsep.string()); + tprintf(col_width_patterns[c].string(), rows[r][c].string()); + } + tprintf("\n"); + } + } + + STRING RtlEmbed(const STRING &word, bool rtlify) { + if (rtlify) + return STRING(kRLE) + word + STRING(kPDF); + return word; + } + + // Print the current thoughts of the paragraph detector. + static void PrintDetectorState(const ParagraphTheory &theory, + const GenericVector &rows) { + GenericVector > output; + output.push_back(GenericVector()); + output.back().push_back("#row"); + output.back().push_back("space"); + output.back().push_back(".."); + output.back().push_back("lword[widthSEL]"); + output.back().push_back("rword[widthSEL]"); + RowScratchRegisters::AppendDebugHeaderFields(&output.back()); + output.back().push_back("text"); + + for (int i = 0; i < rows.size(); i++) { + output.push_back(GenericVector()); + GenericVector &row = output.back(); + const RowInfo& ri = *rows[i].ri_; + row.push_back(StrOf(i)); + row.push_back(StrOf(ri.average_interword_space)); + row.push_back(ri.has_leaders ? ".." : " "); + row.push_back(RtlEmbed(ri.lword_text, !ri.ltr) + + "[" + StrOf(ri.lword_box.width()) + + (ri.lword_likely_starts_idea ? "S" : "s") + + (ri.lword_likely_ends_idea ? "E" : "e") + + (ri.lword_indicates_list_item ? "L" : "l") + + "]"); + row.push_back(RtlEmbed(ri.rword_text, !ri.ltr) + + "[" + StrOf(ri.rword_box.width()) + + (ri.rword_likely_starts_idea ? "S" : "s") + + (ri.rword_likely_ends_idea ? "E" : "e") + + (ri.rword_indicates_list_item ? "L" : "l") + + "]"); + rows[i].AppendDebugInfo(theory, &row); + row.push_back(RtlEmbed(ri.text, !ri.ltr)); + } + PrintTable(output, " "); + + tprintf("Active Paragraph Models:\n"); + for (int m = 0; m < theory.models().size(); m++) { + tprintf(" %d: %s\n", m + 1, theory.models()[m]->ToString().string()); + } + } + + static void DebugDump( + bool should_print, + const STRING &phase, + const ParagraphTheory &theory, + const GenericVector &rows) { + if (!should_print) + return; + tprintf("# %s\n", phase.string()); + PrintDetectorState(theory, rows); + } + + // Print out the text for rows[row_start, row_end) + static void PrintRowRange(const GenericVector &rows, + int row_start, int row_end) { + tprintf("======================================\n"); + for (int row = row_start; row < row_end; row++) { + tprintf("%s\n", rows[row].ri_->text.string()); + } + tprintf("======================================\n"); + } + + // ============= Brain Dead Language Model (ASCII Version) =================== + + bool IsLatinLetter(int ch) { + return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'); + } + + bool IsDigitLike(int ch) { + return ch == 'o' || ch == 'O' || ch == 'l' || ch == 'I'; + } + + bool IsOpeningPunct(int ch) { + return strchr("'\"({[", ch) != NULL; + } + + bool IsTerminalPunct(int ch) { + return strchr(":'\".?!]})", ch) != NULL; + } + + // Return a pointer after consuming as much text as qualifies as roman numeral. + const char *SkipChars(const char *str, const char *toskip) { + while (*str != '\0' && strchr(toskip, *str)) { str++; } + return str; + } + + const char *SkipChars(const char *str, bool(*skip)(int)) { + while (*str != '\0' && skip(*str)) { str++; } + return str; + } + + const char *SkipOne(const char *str, const char *toskip) { + if (*str != '\0' && strchr(toskip, *str)) return str + 1; + return str; + } + + // Return whether it is very likely that this is a numeral marker that could + // start a list item. Some examples include: + // A I iii. VI (2) 3.5. [C-4] + bool LikelyListNumeral(const STRING &word) { + const char *kRomans = "ivxlmdIVXLMD"; + const char *kDigits = "012345789"; + const char *kOpen = "[{("; + const char *kSep = ":;-.,"; + const char *kClose = "]})"; + + int num_segments = 0; + const char *pos = word.string(); + while (*pos != '\0' && num_segments < 3) { + // skip up to two open parens. + const char *numeral_start = SkipOne(SkipOne(pos, kOpen), kOpen); + const char *numeral_end = SkipChars(numeral_start, kRomans); + if (numeral_end != numeral_start) { + // Got Roman Numeral. Great. + } + else { + numeral_end = SkipChars(numeral_start, kDigits); + if (numeral_end == numeral_start) { + // If there's a single latin letter, we can use that. + numeral_end = SkipChars(numeral_start, IsLatinLetter); + if (numeral_end - numeral_start != 1) + break; + } + } + // We got some sort of numeral. + num_segments++; + // Skip any trailing parens or punctuation. + pos = SkipChars(SkipChars(numeral_end, kClose), kSep); + if (pos == numeral_end) + break; + } + return *pos == '\0'; + } + + bool LikelyListMark(const STRING &word) { + const char *kListMarks = "0Oo*.,+."; + return word.size() == 1 && strchr(kListMarks, word[0]) != NULL; + } + + bool AsciiLikelyListItem(const STRING &word) { + return LikelyListMark(word) || LikelyListNumeral(word); + } + + // ========== Brain Dead Language Model (Tesseract Version) ================ + + // Return the first Unicode Codepoint from werd[pos]. + int UnicodeFor(const UNICHARSET *u, const WERD_CHOICE *werd, int pos) { + if (!u || !werd || pos > werd->length()) + return 0; + return UNICHAR(u->id_to_unichar(werd->unichar_id(pos)), -1).first_uni(); + } + + // A useful helper class for finding the first j >= i so that word[j] + // does not have given character type. + class UnicodeSpanSkipper { + public: + UnicodeSpanSkipper(const UNICHARSET *unicharset, const WERD_CHOICE *word) + : u_(unicharset), word_(word) { + wordlen_ = word->length(); + } + + // Given an input position, return the first position >= pos not punc. + int SkipPunc(int pos); + // Given an input position, return the first position >= pos not digit. + int SkipDigits(int pos); + // Given an input position, return the first position >= pos not roman. + int SkipRomans(int pos); + // Given an input position, return the first position >= pos not alpha. + int SkipAlpha(int pos); + + private: + const UNICHARSET *u_; + const WERD_CHOICE *word_; + int wordlen_; + }; + + int UnicodeSpanSkipper::SkipPunc(int pos) { + while (pos < wordlen_ && u_->get_ispunctuation(word_->unichar_id(pos))) pos++; + return pos; + } + + int UnicodeSpanSkipper::SkipDigits(int pos) { + while (pos < wordlen_ && (u_->get_isdigit(word_->unichar_id(pos)) || + IsDigitLike(UnicodeFor(u_, word_, pos)))) pos++; + return pos; + } + + int UnicodeSpanSkipper::SkipRomans(int pos) { + const char *kRomans = "ivxlmdIVXLMD"; + while (pos < wordlen_) { + int ch = UnicodeFor(u_, word_, pos); + if (ch >= 0xF0 || strchr(kRomans, ch) == 0) break; + pos++; + } + return pos; + } + + int UnicodeSpanSkipper::SkipAlpha(int pos) { + while (pos < wordlen_ && u_->get_isalpha(word_->unichar_id(pos))) pos++; + return pos; + } + + bool LikelyListMarkUnicode(int ch) { + if (ch < 0x80) { + STRING single_ch; + single_ch += ch; + return LikelyListMark(single_ch); + } + switch (ch) { + // TODO(eger) expand this list of unicodes as needed. + case 0x00B0: // degree sign + case 0x2022: // bullet + case 0x25E6: // white bullet + case 0x00B7: // middle dot + case 0x25A1: // white square + case 0x25A0: // black square + case 0x25AA: // black small square + case 0x2B1D: // black very small square + case 0x25BA: // black right-pointing pointer + case 0x25CF: // black circle + case 0x25CB: // white circle + return true; + default: + break; // fall through + } + return false; + } + + // Return whether it is very likely that this is a numeral marker that could + // start a list item. Some examples include: + // A I iii. VI (2) 3.5. [C-4] + bool UniLikelyListItem(const UNICHARSET *u, const WERD_CHOICE *werd) { + if (werd->length() == 1 && LikelyListMarkUnicode(UnicodeFor(u, werd, 0))) + return true; + + UnicodeSpanSkipper m(u, werd); + int num_segments = 0; + int pos = 0; + while (pos < werd->length() && num_segments < 3) { + int numeral_start = m.SkipPunc(pos); + if (numeral_start > pos + 1) break; + int numeral_end = m.SkipRomans(numeral_start); + if (numeral_end == numeral_start) { + numeral_end = m.SkipDigits(numeral_start); + if (numeral_end == numeral_start) { + // If there's a single latin letter, we can use that. + numeral_end = m.SkipAlpha(numeral_start); + if (numeral_end - numeral_start != 1) + break; + } + } + // We got some sort of numeral. + num_segments++; + // Skip any trailing punctuation. + pos = m.SkipPunc(numeral_end); + if (pos == numeral_end) + break; + } + return pos == werd->length(); + } + + // ========= Brain Dead Language Model (combined entry points) ================ + + // Given the leftmost word of a line either as a Tesseract unicharset + werd + // or a utf8 string, set the following attributes for it: + // is_list - this word might be a list number or bullet. + // starts_idea - this word is likely to start a sentence. + // ends_idea - this word is likely to end a sentence. + void LeftWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, + const STRING &utf8, + bool *is_list, bool *starts_idea, bool *ends_idea) { + *is_list = false; + *starts_idea = false; + *ends_idea = false; + if (utf8.size() == 0 || (werd != NULL && werd->length() == 0)) { // Empty + *ends_idea = true; + return; + } + + if (unicharset && werd) { // We have a proper werd and unicharset so use it. + if (UniLikelyListItem(unicharset, werd)) { + *is_list = true; + *starts_idea = true; + *ends_idea = true; + } + if (unicharset->get_isupper(werd->unichar_id(0))) { + *starts_idea = true; + } + if (unicharset->get_ispunctuation(werd->unichar_id(0))) { + *starts_idea = true; + *ends_idea = true; + } + } + else { // Assume utf8 is mostly ASCII + if (AsciiLikelyListItem(utf8)) { + *is_list = true; + *starts_idea = true; + } + int start_letter = utf8[0]; + if (IsOpeningPunct(start_letter)) { + *starts_idea = true; + } + if (IsTerminalPunct(start_letter)) { + *ends_idea = true; + } + if (start_letter >= 'A' && start_letter <= 'Z') { + *starts_idea = true; + } + } + } + + // Given the rightmost word of a line either as a Tesseract unicharset + werd + // or a utf8 string, set the following attributes for it: + // is_list - this word might be a list number or bullet. + // starts_idea - this word is likely to start a sentence. + // ends_idea - this word is likely to end a sentence. + void RightWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, + const STRING &utf8, + bool *is_list, bool *starts_idea, bool *ends_idea) { + *is_list = false; + *starts_idea = false; + *ends_idea = false; + if (utf8.size() == 0 || (werd != NULL && werd->length() == 0)) { // Empty + *ends_idea = true; + return; + } + + if (unicharset && werd) { // We have a proper werd and unicharset so use it. + if (UniLikelyListItem(unicharset, werd)) { + *is_list = true; + *starts_idea = true; + } + UNICHAR_ID last_letter = werd->unichar_id(werd->length() - 1); + if (unicharset->get_ispunctuation(last_letter)) { + *ends_idea = true; + } + } + else { // Assume utf8 is mostly ASCII + if (AsciiLikelyListItem(utf8)) { + *is_list = true; + *starts_idea = true; + } + int last_letter = utf8[utf8.size() - 1]; + if (IsOpeningPunct(last_letter) || IsTerminalPunct(last_letter)) { + *ends_idea = true; + } + } + } + + // =============== Implementation of RowScratchRegisters ===================== + /* static */ + void RowScratchRegisters::AppendDebugHeaderFields( + GenericVector *header) { + header->push_back("[lmarg,lind;rind,rmarg]"); + header->push_back("model"); + } + + void RowScratchRegisters::AppendDebugInfo(const ParagraphTheory &theory, + GenericVector *dbg) const { + char s[30]; + snprintf(s, sizeof(s), "[%3d,%3d;%3d,%3d]", + lmargin_, lindent_, rindent_, rmargin_); + dbg->push_back(s); + STRING model_string; + model_string += static_cast(GetLineType()); + model_string += ":"; + + int model_numbers = 0; + for (int h = 0; h < hypotheses_.size(); h++) { + if (hypotheses_[h].model == NULL) + continue; + if (model_numbers > 0) + model_string += ","; + if (StrongModel(hypotheses_[h].model)) { + model_string += StrOf(1 + theory.IndexOf(hypotheses_[h].model)); + } + else if (hypotheses_[h].model == kCrownLeft) { + model_string += "CrL"; + } + else if (hypotheses_[h].model == kCrownRight) { + model_string += "CrR"; + } + model_numbers++; + } + if (model_numbers == 0) + model_string += "0"; + + dbg->push_back(model_string); + } + + void RowScratchRegisters::Init(const RowInfo &row) { + ri_ = &row; + lmargin_ = 0; + lindent_ = row.pix_ldistance; + rmargin_ = 0; + rindent_ = row.pix_rdistance; + } + + LineType RowScratchRegisters::GetLineType() const { + if (hypotheses_.empty()) + return LT_UNKNOWN; + bool has_start = false; + bool has_body = false; + for (int i = 0; i < hypotheses_.size(); i++) { + switch (hypotheses_[i].ty) { + case LT_START: has_start = true; break; + case LT_BODY: has_body = true; break; + default: + tprintf("Encountered bad value in hypothesis list: %c\n", + hypotheses_[i].ty); + break; + } + } + if (has_start && has_body) + return LT_MULTIPLE; + return has_start ? LT_START : LT_BODY; + } + + LineType RowScratchRegisters::GetLineType(const ParagraphModel *model) const { + if (hypotheses_.empty()) + return LT_UNKNOWN; + bool has_start = false; + bool has_body = false; + for (int i = 0; i < hypotheses_.size(); i++) { + if (hypotheses_[i].model != model) + continue; + switch (hypotheses_[i].ty) { + case LT_START: has_start = true; break; + case LT_BODY: has_body = true; break; + default: + tprintf("Encountered bad value in hypothesis list: %c\n", + hypotheses_[i].ty); + break; + } + } + if (has_start && has_body) + return LT_MULTIPLE; + return has_start ? LT_START : LT_BODY; + } + + void RowScratchRegisters::SetStartLine() { + LineType current_lt = GetLineType(); + if (current_lt != LT_UNKNOWN && current_lt != LT_START) { + tprintf("Trying to set a line to be START when it's already BODY.\n"); + } + if (current_lt == LT_UNKNOWN || current_lt == LT_BODY) { + hypotheses_.push_back_new(LineHypothesis(LT_START, NULL)); + } + } + + void RowScratchRegisters::SetBodyLine() { + LineType current_lt = GetLineType(); + if (current_lt != LT_UNKNOWN && current_lt != LT_BODY) { + tprintf("Trying to set a line to be BODY when it's already START.\n"); + } + if (current_lt == LT_UNKNOWN || current_lt == LT_START) { + hypotheses_.push_back_new(LineHypothesis(LT_BODY, NULL)); + } + } + + void RowScratchRegisters::AddStartLine(const ParagraphModel *model) { + hypotheses_.push_back_new(LineHypothesis(LT_START, model)); + int old_idx = hypotheses_.get_index(LineHypothesis(LT_START, NULL)); + if (old_idx >= 0) + hypotheses_.remove(old_idx); + } + + void RowScratchRegisters::AddBodyLine(const ParagraphModel *model) { + hypotheses_.push_back_new(LineHypothesis(LT_BODY, model)); + int old_idx = hypotheses_.get_index(LineHypothesis(LT_BODY, NULL)); + if (old_idx >= 0) + hypotheses_.remove(old_idx); + } + + void RowScratchRegisters::StartHypotheses(SetOfModels *models) const { + for (int h = 0; h < hypotheses_.size(); h++) { + if (hypotheses_[h].ty == LT_START && StrongModel(hypotheses_[h].model)) + models->push_back_new(hypotheses_[h].model); + } + } + + void RowScratchRegisters::StrongHypotheses(SetOfModels *models) const { + for (int h = 0; h < hypotheses_.size(); h++) { + if (StrongModel(hypotheses_[h].model)) + models->push_back_new(hypotheses_[h].model); + } + } + + void RowScratchRegisters::NonNullHypotheses(SetOfModels *models) const { + for (int h = 0; h < hypotheses_.size(); h++) { + if (hypotheses_[h].model != NULL) + models->push_back_new(hypotheses_[h].model); + } + } + + const ParagraphModel *RowScratchRegisters::UniqueStartHypothesis() const { + if (hypotheses_.size() != 1 || hypotheses_[0].ty != LT_START) + return NULL; + return hypotheses_[0].model; + } + + const ParagraphModel *RowScratchRegisters::UniqueBodyHypothesis() const { + if (hypotheses_.size() != 1 || hypotheses_[0].ty != LT_BODY) + return NULL; + return hypotheses_[0].model; + } + + // Discard any hypotheses whose model is not in the given list. + void RowScratchRegisters::DiscardNonMatchingHypotheses( + const SetOfModels &models) { + if (models.empty()) + return; + for (int h = hypotheses_.size() - 1; h >= 0; h--) { + if (!models.contains(hypotheses_[h].model)) { + hypotheses_.remove(h); + } + } + } + + // ============ Geometry based Paragraph Detection Algorithm ================= + + struct Cluster { + Cluster() : center(0), count(0) {} + Cluster(int cen, int num) : center(cen), count(num) {} + + int center; // The center of the cluster. + int count; // The number of entries within the cluster. + }; + + class SimpleClusterer { + public: + explicit SimpleClusterer(int max_cluster_width) + : max_cluster_width_(max_cluster_width) {} + void Add(int value) { values_.push_back(value); } + int size() const { return values_.size(); } + void GetClusters(GenericVector *clusters); + + private: + int max_cluster_width_; + GenericVectorEqEq values_; + }; + + // Return the index of the cluster closest to value. + int ClosestCluster(const GenericVector &clusters, int value) { + int best_index = 0; + for (int i = 0; i < clusters.size(); i++) { + if (abs(value - clusters[i].center) < + abs(value - clusters[best_index].center)) + best_index = i; + } + return best_index; + } + + void SimpleClusterer::GetClusters(GenericVector *clusters) { + clusters->clear(); + values_.sort(); + for (int i = 0; i < values_.size();) { + int orig_i = i; + int lo = values_[i]; + int hi = lo; + while (++i < values_.size() && values_[i] <= lo + max_cluster_width_) { + hi = values_[i]; + } + clusters->push_back(Cluster((hi + lo) / 2, i - orig_i)); + } + } + + // Calculate left- and right-indent tab stop values seen in + // rows[row_start, row_end) given a tolerance of tolerance. + void CalculateTabStops(GenericVector *rows, + int row_start, int row_end, + int tolerance, + GenericVector *left_tabs, + GenericVector *right_tabs) { + if (!AcceptableRowArgs(0, 1, __func__, rows, row_start, row_end)) + return; + // First pass: toss all left and right indents into clusterers. + SimpleClusterer initial_lefts(tolerance); + SimpleClusterer initial_rights(tolerance); + GenericVector initial_left_tabs; + GenericVector initial_right_tabs; + for (int i = row_start; i < row_end; i++) { + initial_lefts.Add((*rows)[i].lindent_); + initial_rights.Add((*rows)[i].rindent_); + } + initial_lefts.GetClusters(&initial_left_tabs); + initial_rights.GetClusters(&initial_right_tabs); + + // Second pass: cluster only lines that are not "stray" + // An example of a stray line is a page number -- a line whose start + // and end tab-stops are far outside the typical start and end tab-stops + // for the block. + // Put another way, we only cluster data from lines whose start or end + // tab stop is frequent. + SimpleClusterer lefts(tolerance); + SimpleClusterer rights(tolerance); + + // Outlier elimination. We might want to switch this to test outlier-ness + // based on how strange a position an outlier is in instead of or in addition + // to how rare it is. These outliers get re-added if we end up having too + // few tab stops, to work with, however. + int infrequent_enough_to_ignore = 0; + if (row_end - row_start >= 8) infrequent_enough_to_ignore = 1; + if (row_end - row_start >= 20) infrequent_enough_to_ignore = 2; + + for (int i = row_start; i < row_end; i++) { + int lidx = ClosestCluster(initial_left_tabs, (*rows)[i].lindent_); + int ridx = ClosestCluster(initial_right_tabs, (*rows)[i].rindent_); + if (initial_left_tabs[lidx].count > infrequent_enough_to_ignore || + initial_right_tabs[ridx].count > infrequent_enough_to_ignore) { + lefts.Add((*rows)[i].lindent_); + rights.Add((*rows)[i].rindent_); + } + } + lefts.GetClusters(left_tabs); + rights.GetClusters(right_tabs); + + if ((left_tabs->size() == 1 && right_tabs->size() >= 4) || + (right_tabs->size() == 1 && left_tabs->size() >= 4)) { + // One side is really ragged, and the other only has one tab stop, + // so those "insignificant outliers" are probably important, actually. + // This often happens on a page of an index. Add back in the ones + // we omitted in the first pass. + for (int i = row_start; i < row_end; i++) { + int lidx = ClosestCluster(initial_left_tabs, (*rows)[i].lindent_); + int ridx = ClosestCluster(initial_right_tabs, (*rows)[i].rindent_); + if (!(initial_left_tabs[lidx].count > infrequent_enough_to_ignore || + initial_right_tabs[ridx].count > infrequent_enough_to_ignore)) { + lefts.Add((*rows)[i].lindent_); + rights.Add((*rows)[i].rindent_); + } + } + } + lefts.GetClusters(left_tabs); + rights.GetClusters(right_tabs); + + // If one side is almost a two-indent aligned side, and the other clearly + // isn't, try to prune out the least frequent tab stop from that side. + if (left_tabs->size() == 3 && right_tabs->size() >= 4) { + int to_prune = -1; + for (int i = left_tabs->size() - 1; i >= 0; i--) { + if (to_prune < 0 || + (*left_tabs)[i].count < (*left_tabs)[to_prune].count) { + to_prune = i; + } + } + if (to_prune >= 0 && + (*left_tabs)[to_prune].count <= infrequent_enough_to_ignore) { + left_tabs->remove(to_prune); + } + } + if (right_tabs->size() == 3 && left_tabs->size() >= 4) { + int to_prune = -1; + for (int i = right_tabs->size() - 1; i >= 0; i--) { + if (to_prune < 0 || + (*right_tabs)[i].count < (*right_tabs)[to_prune].count) { + to_prune = i; + } + } + if (to_prune >= 0 && + (*right_tabs)[to_prune].count <= infrequent_enough_to_ignore) { + right_tabs->remove(to_prune); + } + } + } + + // Given a paragraph model mark rows[row_start, row_end) as said model + // start or body lines. + // + // Case 1: model->first_indent_ != model->body_indent_ + // Differentiating the paragraph start lines from the paragraph body lines in + // this case is easy, we just see how far each line is indented. + // + // Case 2: model->first_indent_ == model->body_indent_ + // Here, we find end-of-paragraph lines by looking for "short lines." + // What constitutes a "short line" changes depending on whether the text + // ragged-right[left] or fully justified (aligned left and right). + // + // Case 2a: Ragged Right (or Left) text. (eop_threshold == 0) + // We have a new paragraph it the first word would have at the end + // of the previous line. + // + // Case 2b: Fully Justified. (eop_threshold > 0) + // We mark a line as short (end of paragraph) if the offside indent + // is greater than eop_threshold. + void MarkRowsWithModel(GenericVector *rows, + int row_start, int row_end, + const ParagraphModel *model, + bool ltr, + int eop_threshold) { + if (!AcceptableRowArgs(0, 0, __func__, rows, row_start, row_end)) + return; + for (int row = row_start; row < row_end; row++) { + bool valid_first = ValidFirstLine(rows, row, model); + bool valid_body = ValidBodyLine(rows, row, model); + if (valid_first && !valid_body) { + (*rows)[row].AddStartLine(model); + } + else if (valid_body && !valid_first) { + (*rows)[row].AddBodyLine(model); + } + else if (valid_body && valid_first) { + bool after_eop = (row == row_start); + if (row > row_start) { + if (eop_threshold > 0) { + if (model->justification() == JUSTIFICATION_LEFT) { + after_eop = (*rows)[row - 1].rindent_ > eop_threshold; + } + else { + after_eop = (*rows)[row - 1].lindent_ > eop_threshold; + } + } + else { + after_eop = FirstWordWouldHaveFit((*rows)[row - 1], (*rows)[row], + model->justification()); + } + } + if (after_eop) { + (*rows)[row].AddStartLine(model); + } + else { + (*rows)[row].AddBodyLine(model); + } + } + else { + // Do nothing. Stray row. + } + } + } + + // GeometricClassifierState holds all of the information we'll use while + // trying to determine a paragraph model for the text lines in a block of + // text: + // + the rows under consideration [row_start, row_end) + // + the common left- and right-indent tab stops + // + does the block start out left-to-right or right-to-left + // Further, this struct holds the data we amass for the (single) ParagraphModel + // we'll assign to the text lines (assuming we get that far). + struct GeometricClassifierState { + GeometricClassifierState(int dbg_level, + GenericVector *r, + int r_start, int r_end) + : debug_level(dbg_level), rows(r), row_start(r_start), row_end(r_end), + margin(0) { + tolerance = InterwordSpace(*r, r_start, r_end); + CalculateTabStops(r, r_start, r_end, tolerance, + &left_tabs, &right_tabs); + if (debug_level >= 3) { + tprintf("Geometry: TabStop cluster tolerance = %d; " + "%d left tabs; %d right tabs\n", + tolerance, left_tabs.size(), right_tabs.size()); + } + ltr = (*r)[r_start].ri_->ltr; + } + + void AssumeLeftJustification() { + just = tesseract::JUSTIFICATION_LEFT; + margin = (*rows)[row_start].lmargin_; + } + + void AssumeRightJustification() { + just = tesseract::JUSTIFICATION_RIGHT; + margin = (*rows)[row_start].rmargin_; + } + + // Align tabs are the tab stops the text is aligned to. + const GenericVector &AlignTabs() const { + if (just == tesseract::JUSTIFICATION_RIGHT) return right_tabs; + return left_tabs; + } + + // Offside tabs are the tab stops opposite the tabs used to align the text. + // + // Note that for a left-to-right text which is aligned to the right such as + // this function comment, the offside tabs are the horizontal tab stops + // marking the beginning of ("Note", "this" and "marking"). + const GenericVector &OffsideTabs() const { + if (just == tesseract::JUSTIFICATION_RIGHT) return left_tabs; + return right_tabs; + } + + // Return whether the i'th row extends from the leftmost left tab stop + // to the right most right tab stop. + bool IsFullRow(int i) const { + return ClosestCluster(left_tabs, (*rows)[i].lindent_) == 0 && + ClosestCluster(right_tabs, (*rows)[i].rindent_) == 0; + } + + int AlignsideTabIndex(int row_idx) const { + return ClosestCluster(AlignTabs(), (*rows)[row_idx].AlignsideIndent(just)); + } + + // Given what we know about the paragraph justification (just), would the + // first word of row_b have fit at the end of row_a? + bool FirstWordWouldHaveFit(int row_a, int row_b) { + return ::tesseract::FirstWordWouldHaveFit( + (*rows)[row_a], (*rows)[row_b], just); + } + + void PrintRows() const { PrintRowRange(*rows, row_start, row_end); } + + void Fail(int min_debug_level, const char *why) const { + if (debug_level < min_debug_level) return; + tprintf("# %s\n", why); + PrintRows(); + } + + ParagraphModel Model() const { + return ParagraphModel(just, margin, first_indent, body_indent, tolerance); + } + + // We print out messages with a debug level at least as great as debug_level. + int debug_level; + + // The Geometric Classifier was asked to find a single paragraph model + // to fit the text rows (*rows)[row_start, row_end) + GenericVector *rows; + int row_start; + int row_end; + + // The amount by which we expect the text edge can vary and still be aligned. + int tolerance; + + // Is the script in this text block left-to-right? + // HORRIBLE ROUGH APPROXIMATION. TODO(eger): Improve + bool ltr; + + // These left and right tab stops were determined to be the common tab + // stops for the given text. + GenericVector left_tabs; + GenericVector right_tabs; + + // These are parameters we must determine to create a ParagraphModel. + tesseract::ParagraphJustification just; + int margin; + int first_indent; + int body_indent; + + // eop_threshold > 0 if the text is fully justified. See MarkRowsWithModel() + int eop_threshold; + }; + + // Given a section of text where strong textual clues did not help identifying + // paragraph breaks, and for which the left and right indents have exactly + // three tab stops between them, attempt to find the paragraph breaks based + // solely on the outline of the text and whether the script is left-to-right. + // + // Algorithm Detail: + // The selected rows are in the form of a rectangle except + // for some number of "short lines" of the same length: + // + // (A1) xxxxxxxxxxxxx (B1) xxxxxxxxxxxx + // xxxxxxxxxxx xxxxxxxxxx # A "short" line. + // xxxxxxxxxxxxx xxxxxxxxxxxx + // xxxxxxxxxxxxx xxxxxxxxxxxx + // + // We have a slightly different situation if the only short + // line is at the end of the excerpt. + // + // (A2) xxxxxxxxxxxxx (B2) xxxxxxxxxxxx + // xxxxxxxxxxxxx xxxxxxxxxxxx + // xxxxxxxxxxxxx xxxxxxxxxxxx + // xxxxxxxxxxx xxxxxxxxxx # A "short" line. + // + // We'll interpret these as follows based on the reasoning in the comment for + // GeometricClassify(): + // [script direction: first indent, body indent] + // (A1) LtR: 2,0 RtL: 0,0 (B1) LtR: 0,0 RtL: 2,0 + // (A2) LtR: 2,0 RtL: CrR (B2) LtR: CrL RtL: 2,0 + void GeometricClassifyThreeTabStopTextBlock( + int debug_level, + GeometricClassifierState &s, + ParagraphTheory *theory) { + int num_rows = s.row_end - s.row_start; + int num_full_rows = 0; + int last_row_full = 0; + for (int i = s.row_start; i < s.row_end; i++) { + if (s.IsFullRow(i)) { + num_full_rows++; + if (i == s.row_end - 1) last_row_full++; + } + } + + if (num_full_rows < 0.7 * num_rows) { + s.Fail(1, "Not enough full lines to know which lines start paras."); + return; + } + + // eop_threshold gets set if we're fully justified; see MarkRowsWithModel() + s.eop_threshold = 0; + + if (s.ltr) { + s.AssumeLeftJustification(); + } + else { + s.AssumeRightJustification(); + } + + if (debug_level > 0) { + tprintf("# Not enough variety for clear outline classification. " + "Guessing these are %s aligned based on script.\n", + s.ltr ? "left" : "right"); + s.PrintRows(); + } + + if (s.AlignTabs().size() == 2) { // case A1 or A2 + s.first_indent = s.AlignTabs()[1].center; + s.body_indent = s.AlignTabs()[0].center; + } + else { // case B1 or B2 + if (num_rows - 1 == num_full_rows - last_row_full) { + // case B2 + const ParagraphModel *model = s.ltr ? kCrownLeft : kCrownRight; + (*s.rows)[s.row_start].AddStartLine(model); + for (int i = s.row_start + 1; i < s.row_end; i++) { + (*s.rows)[i].AddBodyLine(model); + } + return; + } + else { + // case B1 + s.first_indent = s.body_indent = s.AlignTabs()[0].center; + s.eop_threshold = (s.OffsideTabs()[0].center + + s.OffsideTabs()[1].center) / 2; + } + } + const ParagraphModel *model = theory->AddModel(s.Model()); + MarkRowsWithModel(s.rows, s.row_start, s.row_end, model, + s.ltr, s.eop_threshold); + return; + } + + // This function is called if strong textual clues were not available, but + // the caller hopes that the paragraph breaks will be super obvious just + // by the outline of the text. + // + // The particularly difficult case is figuring out what's going on if you + // don't have enough short paragraph end lines to tell us what's going on. + // + // For instance, let's say you have the following outline: + // + // (A1) xxxxxxxxxxxxxxxxxxxxxx + // xxxxxxxxxxxxxxxxxxxx + // xxxxxxxxxxxxxxxxxxxxxx + // xxxxxxxxxxxxxxxxxxxxxx + // + // Even if we know that the text is left-to-right and so will probably be + // left-aligned, both of the following are possible texts: + // + // (A1a) 1. Here our list item + // with two full lines. + // 2. Here a second item. + // 3. Here our third one. + // + // (A1b) so ends paragraph one. + // Here starts another + // paragraph we want to + // read. This continues + // + // These examples are obvious from the text and should have been caught + // by the StrongEvidenceClassify pass. However, for languages where we don't + // have capital letters to go on (e.g. Hebrew, Arabic, Hindi, Chinese), + // it's worth guessing that (A1b) is the correct interpretation if there are + // far more "full" lines than "short" lines. + void GeometricClassify(int debug_level, + GenericVector *rows, + int row_start, int row_end, + ParagraphTheory *theory) { + if (!AcceptableRowArgs(debug_level, 4, __func__, rows, row_start, row_end)) + return; + if (debug_level > 1) { + tprintf("###############################################\n"); + tprintf("##### GeometricClassify( rows[%d:%d) ) ####\n", + row_start, row_end); + tprintf("###############################################\n"); + } + RecomputeMarginsAndClearHypotheses(rows, row_start, row_end, 10); + + GeometricClassifierState s(debug_level, rows, row_start, row_end); + if (s.left_tabs.size() > 2 && s.right_tabs.size() > 2) { + s.Fail(2, "Too much variety for simple outline classification."); + return; + } + if (s.left_tabs.size() <= 1 && s.right_tabs.size() <= 1) { + s.Fail(1, "Not enough variety for simple outline classification."); + return; + } + if (s.left_tabs.size() + s.right_tabs.size() == 3) { + GeometricClassifyThreeTabStopTextBlock(debug_level, s, theory); + return; + } + + // At this point, we know that one side has at least two tab stops, and the + // other side has one or two tab stops. + // Left to determine: + // (1) Which is the body indent and which is the first line indent? + // (2) Is the text fully justified? + + // If one side happens to have three or more tab stops, assume that side + // is opposite of the aligned side. + if (s.right_tabs.size() > 2) { + s.AssumeLeftJustification(); + } + else if (s.left_tabs.size() > 2) { + s.AssumeRightJustification(); + } + else if (s.ltr) { // guess based on script direction + s.AssumeLeftJustification(); + } + else { + s.AssumeRightJustification(); + } + + if (s.AlignTabs().size() == 2) { + // For each tab stop on the aligned side, how many of them appear + // to be paragraph start lines? [first lines] + int firsts[2] = { 0, 0 }; + // Count the first line as a likely paragraph start line. + firsts[s.AlignsideTabIndex(s.row_start)]++; + // For each line, if the first word would have fit on the previous + // line count it as a likely paragraph start line. + bool jam_packed = true; + for (int i = s.row_start + 1; i < s.row_end; i++) { + if (s.FirstWordWouldHaveFit(i - 1, i)) { + firsts[s.AlignsideTabIndex(i)]++; + jam_packed = false; + } + } + // Make an extra accounting for the last line of the paragraph just + // in case it's the only short line in the block. That is, take its + // first word as typical and see if this looks like the *last* line + // of a paragraph. If so, mark the *other* indent as probably a first. + if (jam_packed && s.FirstWordWouldHaveFit(s.row_end - 1, s.row_end - 1)) { + firsts[1 - s.AlignsideTabIndex(s.row_end - 1)]++; + } + + int percent0firsts, percent1firsts; + percent0firsts = (100 * firsts[0]) / s.AlignTabs()[0].count; + percent1firsts = (100 * firsts[1]) / s.AlignTabs()[1].count; + + // TODO(eger): Tune these constants if necessary. + if ((percent0firsts < 20 && 30 < percent1firsts) || + percent0firsts + 30 < percent1firsts) { + s.first_indent = s.AlignTabs()[1].center; + s.body_indent = s.AlignTabs()[0].center; + } + else if ((percent1firsts < 20 && 30 < percent0firsts) || + percent1firsts + 30 < percent0firsts) { + s.first_indent = s.AlignTabs()[0].center; + s.body_indent = s.AlignTabs()[1].center; + } + else { + // Ambiguous! Probably lineated (poetry) + if (debug_level > 1) { + tprintf("# Cannot determine %s indent likely to start paragraphs.\n", + s.just == tesseract::JUSTIFICATION_LEFT ? "left" : "right"); + tprintf("# Indent of %d looks like a first line %d%% of the time.\n", + s.AlignTabs()[0].center, percent0firsts); + tprintf("# Indent of %d looks like a first line %d%% of the time.\n", + s.AlignTabs()[1].center, percent1firsts); + s.PrintRows(); + } + return; + } + } + else { + // There's only one tab stop for the "aligned to" side. + s.first_indent = s.body_indent = s.AlignTabs()[0].center; + } + + // At this point, we have our model. + const ParagraphModel *model = theory->AddModel(s.Model()); + + // Now all we have to do is figure out if the text is fully justified or not. + // eop_threshold: default to fully justified unless we see evidence below. + // See description on MarkRowsWithModel() + s.eop_threshold = + (s.OffsideTabs()[0].center + s.OffsideTabs()[1].center) / 2; + // If the text is not fully justified, re-set the eop_threshold to 0. + if (s.AlignTabs().size() == 2) { + // Paragraphs with a paragraph-start indent. + for (int i = s.row_start; i < s.row_end - 1; i++) { + if (ValidFirstLine(s.rows, i + 1, model) && + !NearlyEqual(s.OffsideTabs()[0].center, + (*s.rows)[i].OffsideIndent(s.just), s.tolerance)) { + // We found a non-end-of-paragraph short line: not fully justified. + s.eop_threshold = 0; + break; + } + } + } + else { + // Paragraphs with no paragraph-start indent. + for (int i = s.row_start; i < s.row_end - 1; i++) { + if (!s.FirstWordWouldHaveFit(i, i + 1) && + !NearlyEqual(s.OffsideTabs()[0].center, + (*s.rows)[i].OffsideIndent(s.just), s.tolerance)) { + // We found a non-end-of-paragraph short line: not fully justified. + s.eop_threshold = 0; + break; + } + } + } + MarkRowsWithModel(rows, row_start, row_end, model, s.ltr, s.eop_threshold); + } + + // =============== Implementation of ParagraphTheory ===================== + + const ParagraphModel *ParagraphTheory::AddModel(const ParagraphModel &model) { + for (int i = 0; i < models_->size(); i++) { + if ((*models_)[i]->Comparable(model)) + return (*models_)[i]; + } + ParagraphModel *m = new ParagraphModel(model); + models_->push_back(m); + models_we_added_.push_back_new(m); + return m; + } + + void ParagraphTheory::DiscardUnusedModels(const SetOfModels &used_models) { + for (int i = models_->size() - 1; i >= 0; i--) { + ParagraphModel *m = (*models_)[i]; + if (!used_models.contains(m) && models_we_added_.contains(m)) { + models_->remove(i); + models_we_added_.remove(models_we_added_.get_index(m)); + delete m; + } + } + } + + // Examine rows[start, end) and try to determine if an existing non-centered + // paragraph model would fit them perfectly. If so, return a pointer to it. + // If not, return NULL. + const ParagraphModel *ParagraphTheory::Fits( + const GenericVector *rows, int start, int end) const { + for (int m = 0; m < models_->size(); m++) { + const ParagraphModel *model = (*models_)[m]; + if (model->justification() != JUSTIFICATION_CENTER && + RowsFitModel(rows, start, end, model)) + return model; + } + return NULL; + } + + void ParagraphTheory::NonCenteredModels(SetOfModels *models) { + for (int m = 0; m < models_->size(); m++) { + const ParagraphModel *model = (*models_)[m]; + if (model->justification() != JUSTIFICATION_CENTER) + models->push_back_new(model); + } + } + + int ParagraphTheory::IndexOf(const ParagraphModel *model) const { + for (int i = 0; i < models_->size(); i++) { + if ((*models_)[i] == model) + return i; + } + return -1; + } + + bool ValidFirstLine(const GenericVector *rows, + int row, const ParagraphModel *model) { + if (!StrongModel(model)) { + tprintf("ValidFirstLine() should only be called with strong models!\n"); + } + return StrongModel(model) && + model->ValidFirstLine( + (*rows)[row].lmargin_, (*rows)[row].lindent_, + (*rows)[row].rindent_, (*rows)[row].rmargin_); + } + + bool ValidBodyLine(const GenericVector *rows, + int row, const ParagraphModel *model) { + if (!StrongModel(model)) { + tprintf("ValidBodyLine() should only be called with strong models!\n"); + } + return StrongModel(model) && + model->ValidBodyLine( + (*rows)[row].lmargin_, (*rows)[row].lindent_, + (*rows)[row].rindent_, (*rows)[row].rmargin_); + } + + bool CrownCompatible(const GenericVector *rows, + int a, int b, const ParagraphModel *model) { + if (model != kCrownRight && model != kCrownLeft) { + tprintf("CrownCompatible() should only be called with crown models!\n"); + return false; + } + RowScratchRegisters &row_a = (*rows)[a]; + RowScratchRegisters &row_b = (*rows)[b]; + if (model == kCrownRight) { + return NearlyEqual(row_a.rindent_ + row_a.rmargin_, + row_b.rindent_ + row_b.rmargin_, + Epsilon(row_a.ri_->average_interword_space)); + } + return NearlyEqual(row_a.lindent_ + row_a.lmargin_, + row_b.lindent_ + row_b.lmargin_, + Epsilon(row_a.ri_->average_interword_space)); + } + + + // =============== Implementation of ParagraphModelSmearer ==================== + + ParagraphModelSmearer::ParagraphModelSmearer( + GenericVector *rows, + int row_start, int row_end, ParagraphTheory *theory) + : theory_(theory), rows_(rows), row_start_(row_start), + row_end_(row_end) { + if (!AcceptableRowArgs(0, 0, __func__, rows, row_start, row_end)) { + row_start_ = 0; + row_end_ = 0; + return; + } + SetOfModels no_models; + for (int row = row_start - 1; row <= row_end; row++) { + open_models_.push_back(no_models); + } + } + + // see paragraphs_internal.h + void ParagraphModelSmearer::CalculateOpenModels(int row_start, int row_end) { + SetOfModels no_models; + if (row_start < row_start_) row_start = row_start_; + if (row_end > row_end_) row_end = row_end_; + + for (int row = (row_start > 0) ? row_start - 1 : row_start; row < row_end; + row++) { + if ((*rows_)[row].ri_->num_words == 0) { + OpenModels(row + 1) = no_models; + } + else { + SetOfModels &opened = OpenModels(row); + (*rows_)[row].StartHypotheses(&opened); + + // Which models survive the transition from row to row + 1? + SetOfModels still_open; + for (int m = 0; m < opened.size(); m++) { + if (ValidFirstLine(rows_, row, opened[m]) || + ValidBodyLine(rows_, row, opened[m])) { + // This is basic filtering; we check likely paragraph starty-ness down + // below in Smear() -- you know, whether the first word would have fit + // and such. + still_open.push_back_new(opened[m]); + } + } + OpenModels(row + 1) = still_open; + } + } + } + + // see paragraphs_internal.h + void ParagraphModelSmearer::Smear() { + CalculateOpenModels(row_start_, row_end_); + + // For each row which we're unsure about (that is, it is LT_UNKNOWN or + // we have multiple LT_START hypotheses), see if there's a model that + // was recently used (an "open" model) which might model it well. + for (int i = row_start_; i < row_end_; i++) { + RowScratchRegisters &row = (*rows_)[i]; + if (row.ri_->num_words == 0) + continue; + + // Step One: + // Figure out if there are "open" models which are left-alined or + // right-aligned. This is important for determining whether the + // "first" word in a row would fit at the "end" of the previous row. + bool left_align_open = false; + bool right_align_open = false; + for (int m = 0; m < OpenModels(i).size(); m++) { + switch (OpenModels(i)[m]->justification()) { + case JUSTIFICATION_LEFT: left_align_open = true; break; + case JUSTIFICATION_RIGHT: right_align_open = true; break; + default: left_align_open = right_align_open = true; + } + } + // Step Two: + // Use that knowledge to figure out if this row is likely to + // start a paragraph. + bool likely_start; + if (i == 0) { + likely_start = true; + } + else { + if ((left_align_open && right_align_open) || + (!left_align_open && !right_align_open)) { + likely_start = LikelyParagraphStart((*rows_)[i - 1], row, + JUSTIFICATION_LEFT) || + LikelyParagraphStart((*rows_)[i - 1], row, + JUSTIFICATION_RIGHT); + } + else if (left_align_open) { + likely_start = LikelyParagraphStart((*rows_)[i - 1], row, + JUSTIFICATION_LEFT); + } + else { + likely_start = LikelyParagraphStart((*rows_)[i - 1], row, + JUSTIFICATION_RIGHT); + } + } + + // Step Three: + // If this text line seems like an obvious first line of an + // open model, or an obvious continuation of an existing + // modelled paragraph, mark it up. + if (likely_start) { + // Add Start Hypotheses for all Open models that fit. + for (int m = 0; m < OpenModels(i).size(); m++) { + if (ValidFirstLine(rows_, i, OpenModels(i)[m])) { + row.AddStartLine(OpenModels(i)[m]); + } + } + } + else { + // Add relevant body line hypotheses. + SetOfModels last_line_models; + if (i > 0) { + (*rows_)[i - 1].StrongHypotheses(&last_line_models); + } + else { + theory_->NonCenteredModels(&last_line_models); + } + for (int m = 0; m < last_line_models.size(); m++) { + const ParagraphModel *model = last_line_models[m]; + if (ValidBodyLine(rows_, i, model)) + row.AddBodyLine(model); + } + } + + // Step Four: + // If we're still quite unsure about this line, go through all + // models in our theory and see if this row could be the start + // of any of our models. + if (row.GetLineType() == LT_UNKNOWN || + (row.GetLineType() == LT_START && !row.UniqueStartHypothesis())) { + SetOfModels all_models; + theory_->NonCenteredModels(&all_models); + for (int m = 0; m < all_models.size(); m++) { + if (ValidFirstLine(rows_, i, all_models[m])) { + row.AddStartLine(all_models[m]); + } + } + } + // Step Five: + // Since we may have updated the hypotheses about this row, we need + // to recalculate the Open models for the rest of rows[i + 1, row_end) + if (row.GetLineType() != LT_UNKNOWN) { + CalculateOpenModels(i + 1, row_end_); + } + } + } + + // ================ Main Paragraph Detection Algorithm ======================= + + // Find out what ParagraphModels are actually used, and discard any + // that are not. + void DiscardUnusedModels(const GenericVector &rows, + ParagraphTheory *theory) { + SetOfModels used_models; + for (int i = 0; i < rows.size(); i++) { + rows[i].StrongHypotheses(&used_models); + } + theory->DiscardUnusedModels(used_models); + } + + // DowngradeWeakestToCrowns: + // Forget any flush-{left, right} models unless we see two or more + // of them in sequence. + // + // In pass 3, we start to classify even flush-left paragraphs (paragraphs + // where the first line and body indent are the same) as having proper Models. + // This is generally dangerous, since if you start imagining that flush-left + // is a typical paragraph model when it is not, it will lead you to chop normal + // indented paragraphs in the middle whenever a sentence happens to start on a + // new line (see "This" above). What to do? + // What we do is to take any paragraph which is flush left and is not + // preceded by another paragraph of the same model and convert it to a "Crown" + // paragraph. This is a weak pseudo-ParagraphModel which is a placeholder + // for later. It means that the paragraph is flush, but it would be desirable + // to mark it as the same model as following text if it fits. This downgrade + // FlushLeft -> CrownLeft -> Model of following paragraph. Means that we + // avoid making flush left Paragraph Models whenever we see a top-of-the-page + // half-of-a-paragraph. and instead we mark it the same as normal body text. + // + // Implementation: + // + // Comb backwards through the row scratch registers, and turn any + // sequences of body lines of equivalent type abutted against the beginning + // or a body or start line of a different type into a crown paragraph. + void DowngradeWeakestToCrowns(int debug_level, + ParagraphTheory *theory, + GenericVector *rows) { + int start; + for (int end = rows->size(); end > 0; end = start) { + // Search back for a body line of a unique type. + const ParagraphModel *model = NULL; + while (end > 0 && + (model = (*rows)[end - 1].UniqueBodyHypothesis()) == NULL) { + end--; + } + if (end == 0) break; + start = end - 1; + while (start >= 0 && (*rows)[start].UniqueBodyHypothesis() == model) { + start--; // walk back to the first line that is not the same body type. + } + if (start >= 0 && (*rows)[start].UniqueStartHypothesis() == model && + StrongModel(model) && + NearlyEqual(model->first_indent(), model->body_indent(), + model->tolerance())) { + start--; + } + start++; + // Now rows[start, end) is a sequence of unique body hypotheses of model. + if (StrongModel(model) && model->justification() == JUSTIFICATION_CENTER) + continue; + if (!StrongModel(model)) { + while (start > 0 && + CrownCompatible(rows, start - 1, start, model)) + start--; + } + if (start == 0 || + (!StrongModel(model)) || + (StrongModel(model) && !ValidFirstLine(rows, start - 1, model))) { + // crownify rows[start, end) + const ParagraphModel *crown_model = model; + if (StrongModel(model)) { + if (model->justification() == JUSTIFICATION_LEFT) + crown_model = kCrownLeft; + else + crown_model = kCrownRight; + } + (*rows)[start].SetUnknown(); + (*rows)[start].AddStartLine(crown_model); + for (int row = start + 1; row < end; row++) { + (*rows)[row].SetUnknown(); + (*rows)[row].AddBodyLine(crown_model); + } + } + } + DiscardUnusedModels(*rows, theory); + } + + + // Clear all hypotheses about lines [start, end) and reset margins. + // + // The empty space between the left of a row and the block boundary (and + // similarly for the right) is split into two pieces: margin and indent. + // In initial processing, we assume the block is tight and the margin for + // all lines is set to zero. However, if our first pass does not yield + // models for everything, it may be due to an inset paragraph like a + // block-quote. In that case, we make a second pass over that unmarked + // section of the page and reset the "margin" portion of the empty space + // to the common amount of space at the ends of the lines under consid- + // eration. This would be equivalent to percentile set to 0. However, + // sometimes we have a single character sticking out in the right margin + // of a text block (like the 'r' in 'for' on line 3 above), and we can + // really just ignore it as an outlier. To express this, we allow the + // user to specify the percentile (0..100) of indent values to use as + // the common margin for each row in the run of rows[start, end). + void RecomputeMarginsAndClearHypotheses( + GenericVector *rows, int start, int end, + int percentile) { + if (!AcceptableRowArgs(0, 0, __func__, rows, start, end)) + return; + + int lmin, lmax, rmin, rmax; + lmin = lmax = (*rows)[start].lmargin_ + (*rows)[start].lindent_; + rmin = rmax = (*rows)[start].rmargin_ + (*rows)[start].rindent_; + for (int i = start; i < end; i++) { + RowScratchRegisters &sr = (*rows)[i]; + sr.SetUnknown(); + if (sr.ri_->num_words == 0) + continue; + UpdateRange(sr.lmargin_ + sr.lindent_, &lmin, &lmax); + UpdateRange(sr.rmargin_ + sr.rindent_, &rmin, &rmax); + } + STATS lefts(lmin, lmax + 1); + STATS rights(rmin, rmax + 1); + for (int i = start; i < end; i++) { + RowScratchRegisters &sr = (*rows)[i]; + if (sr.ri_->num_words == 0) + continue; + lefts.add(sr.lmargin_ + sr.lindent_, 1); + rights.add(sr.rmargin_ + sr.rindent_, 1); + } + int ignorable_left = lefts.ile(ClipToRange(percentile, 0, 100) / 100.0); + int ignorable_right = rights.ile(ClipToRange(percentile, 0, 100) / 100.0); + for (int i = start; i < end; i++) { + RowScratchRegisters &sr = (*rows)[i]; + int ldelta = ignorable_left - sr.lmargin_; + sr.lmargin_ += ldelta; + sr.lindent_ -= ldelta; + int rdelta = ignorable_right - sr.rmargin_; + sr.rmargin_ += rdelta; + sr.rindent_ -= rdelta; + } + } + + // Return the median inter-word space in rows[row_start, row_end). + int InterwordSpace(const GenericVector &rows, + int row_start, int row_end) { + if (row_end < row_start + 1) return 1; + int word_height = (rows[row_start].ri_->lword_box.height() + + rows[row_end - 1].ri_->lword_box.height()) / 2; + int word_width = (rows[row_start].ri_->lword_box.width() + + rows[row_end - 1].ri_->lword_box.width()) / 2; + STATS spacing_widths(0, 5 + word_width); + for (int i = row_start; i < row_end; i++) { + if (rows[i].ri_->num_words > 1) { + spacing_widths.add(rows[i].ri_->average_interword_space, 1); + } + } + int minimum_reasonable_space = word_height / 3; + if (minimum_reasonable_space < 2) + minimum_reasonable_space = 2; + int median = spacing_widths.median(); + return (median > minimum_reasonable_space) + ? median : minimum_reasonable_space; + } + + // Return whether the first word on the after line can fit in the space at + // the end of the before line (knowing which way the text is aligned and read). + bool FirstWordWouldHaveFit(const RowScratchRegisters &before, + const RowScratchRegisters &after, + tesseract::ParagraphJustification justification) { + if (before.ri_->num_words == 0 || after.ri_->num_words == 0) + return true; + + if (justification == JUSTIFICATION_UNKNOWN) { + tprintf("Don't call FirstWordWouldHaveFit(r, s, JUSTIFICATION_UNKNOWN).\n"); + } + int available_space; + if (justification == JUSTIFICATION_CENTER) { + available_space = before.lindent_ + before.rindent_; + } + else { + available_space = before.OffsideIndent(justification); + } + available_space -= before.ri_->average_interword_space; + + if (before.ri_->ltr) + return after.ri_->lword_box.width() < available_space; + return after.ri_->rword_box.width() < available_space; + } + + // Return whether the first word on the after line can fit in the space at + // the end of the before line (not knowing which way the text goes) in a left + // or right alignemnt. + bool FirstWordWouldHaveFit(const RowScratchRegisters &before, + const RowScratchRegisters &after) { + if (before.ri_->num_words == 0 || after.ri_->num_words == 0) + return true; + + int available_space = before.lindent_; + if (before.rindent_ > available_space) + available_space = before.rindent_; + available_space -= before.ri_->average_interword_space; + + if (before.ri_->ltr) + return after.ri_->lword_box.width() < available_space; + return after.ri_->rword_box.width() < available_space; + } + + bool TextSupportsBreak(const RowScratchRegisters &before, + const RowScratchRegisters &after) { + if (before.ri_->ltr) { + return before.ri_->rword_likely_ends_idea && + after.ri_->lword_likely_starts_idea; + } + else { + return before.ri_->lword_likely_ends_idea && + after.ri_->rword_likely_starts_idea; + } + } + + bool LikelyParagraphStart(const RowScratchRegisters &before, + const RowScratchRegisters &after) { + return before.ri_->num_words == 0 || + (FirstWordWouldHaveFit(before, after) && + TextSupportsBreak(before, after)); + } + + bool LikelyParagraphStart(const RowScratchRegisters &before, + const RowScratchRegisters &after, + tesseract::ParagraphJustification j) { + return before.ri_->num_words == 0 || + (FirstWordWouldHaveFit(before, after, j) && + TextSupportsBreak(before, after)); + } + + // Examine rows[start, end) and try to determine what sort of ParagraphModel + // would fit them as a single paragraph. + // If we can't produce a unique model justification_ = JUSTIFICATION_UNKNOWN. + // If the rows given could be a consistent start to a paragraph, set *consistent + // true. + ParagraphModel InternalParagraphModelByOutline( + const GenericVector *rows, + int start, int end, int tolerance, bool *consistent) { + int ltr_line_count = 0; + for (int i = start; i < end; i++) { + ltr_line_count += static_cast((*rows)[i].ri_->ltr); + } + bool ltr = (ltr_line_count >= (end - start) / 2); + + *consistent = true; + if (!AcceptableRowArgs(0, 2, __func__, rows, start, end)) + return ParagraphModel(); + + // Ensure the caller only passed us a region with a common rmargin and + // lmargin. + int lmargin = (*rows)[start].lmargin_; + int rmargin = (*rows)[start].rmargin_; + int lmin, lmax, rmin, rmax, cmin, cmax; + lmin = lmax = (*rows)[start + 1].lindent_; + rmin = rmax = (*rows)[start + 1].rindent_; + cmin = cmax = 0; + for (int i = start + 1; i < end; i++) { + if ((*rows)[i].lmargin_ != lmargin || (*rows)[i].rmargin_ != rmargin) { + tprintf("Margins don't match! Software error.\n"); + *consistent = false; + return ParagraphModel(); + } + UpdateRange((*rows)[i].lindent_, &lmin, &lmax); + UpdateRange((*rows)[i].rindent_, &rmin, &rmax); + UpdateRange((*rows)[i].rindent_ - (*rows)[i].lindent_, &cmin, &cmax); + } + int ldiff = lmax - lmin; + int rdiff = rmax - rmin; + int cdiff = cmax - cmin; + if (rdiff > tolerance && ldiff > tolerance) { + if (cdiff < tolerance * 2) { + if (end - start < 3) + return ParagraphModel(); + return ParagraphModel(JUSTIFICATION_CENTER, 0, 0, 0, tolerance); + } + *consistent = false; + return ParagraphModel(); + } + if (end - start < 3) // Don't return a model for two line paras. + return ParagraphModel(); + + // These booleans keep us from saying something is aligned left when the body + // left variance is too large. + bool body_admits_left_alignment = ldiff < tolerance; + bool body_admits_right_alignment = rdiff < tolerance; + + ParagraphModel left_model = + ParagraphModel(JUSTIFICATION_LEFT, lmargin, (*rows)[start].lindent_, + (lmin + lmax) / 2, tolerance); + ParagraphModel right_model = + ParagraphModel(JUSTIFICATION_RIGHT, rmargin, (*rows)[start].rindent_, + (rmin + rmax) / 2, tolerance); + + // These booleans keep us from having an indent on the "wrong side" for the + // first line. + bool text_admits_left_alignment = ltr || left_model.is_flush(); + bool text_admits_right_alignment = !ltr || right_model.is_flush(); + + // At least one of the edges is less than tolerance in variance. + // If the other is obviously ragged, it can't be the one aligned to. + // [Note the last line is included in this raggedness.] + if (tolerance < rdiff) { + if (body_admits_left_alignment && text_admits_left_alignment) + return left_model; + *consistent = false; + return ParagraphModel(); + } + if (tolerance < ldiff) { + if (body_admits_right_alignment && text_admits_right_alignment) + return right_model; + *consistent = false; + return ParagraphModel(); + } + + // At this point, we know the body text doesn't vary much on either side. + + // If the first line juts out oddly in one direction or the other, + // that likely indicates the side aligned to. + int first_left = (*rows)[start].lindent_; + int first_right = (*rows)[start].rindent_; + + if (ltr && body_admits_left_alignment && + (first_left < lmin || first_left > lmax)) + return left_model; + if (!ltr && body_admits_right_alignment && + (first_right < rmin || first_right > rmax)) + return right_model; + + *consistent = false; + return ParagraphModel(); + } + + // Examine rows[start, end) and try to determine what sort of ParagraphModel + // would fit them as a single paragraph. If nothing fits, + // justification_ = JUSTIFICATION_UNKNOWN and print the paragraph to debug + // output if we're debugging. + ParagraphModel ParagraphModelByOutline( + int debug_level, + const GenericVector *rows, + int start, int end, int tolerance) { + bool unused_consistent; + ParagraphModel retval = InternalParagraphModelByOutline( + rows, start, end, tolerance, &unused_consistent); + if (debug_level >= 2 && retval.justification() == JUSTIFICATION_UNKNOWN) { + tprintf("Could not determine a model for this paragraph:\n"); + PrintRowRange(*rows, start, end); + } + return retval; + } + + // Do rows[start, end) form a single instance of the given paragraph model? + bool RowsFitModel(const GenericVector *rows, + int start, int end, const ParagraphModel *model) { + if (!AcceptableRowArgs(0, 1, __func__, rows, start, end)) + return false; + if (!ValidFirstLine(rows, start, model)) return false; + for (int i = start + 1; i < end; i++) { + if (!ValidBodyLine(rows, i, model)) return false; + } + return true; + } + + // Examine rows[row_start, row_end) as an independent section of text, + // and mark rows that are exceptionally clear as start-of-paragraph + // and paragraph-body lines. + // + // We presume that any lines surrounding rows[row_start, row_end) may + // have wildly different paragraph models, so we don't key any data off + // of those lines. + // + // We only take the very strongest signals, as we don't want to get + // confused and marking up centered text, poetry, or source code as + // clearly part of a typical paragraph. + void MarkStrongEvidence(GenericVector *rows, + int row_start, int row_end) { + // Record patently obvious body text. + for (int i = row_start + 1; i < row_end; i++) { + const RowScratchRegisters &prev = (*rows)[i - 1]; + RowScratchRegisters &curr = (*rows)[i]; + tesseract::ParagraphJustification typical_justification = + prev.ri_->ltr ? JUSTIFICATION_LEFT : JUSTIFICATION_RIGHT; + if (!curr.ri_->rword_likely_starts_idea && + !curr.ri_->lword_likely_starts_idea && + !FirstWordWouldHaveFit(prev, curr, typical_justification)) { + curr.SetBodyLine(); + } + } + + // Record patently obvious start paragraph lines. + // + // It's an extremely good signal of the start of a paragraph that + // the first word would have fit on the end of the previous line. + // However, applying just that signal would have us mark random + // start lines of lineated text (poetry and source code) and some + // centered headings as paragraph start lines. Therefore, we use + // a second qualification for a paragraph start: Not only should + // the first word of this line have fit on the previous line, + // but also, this line should go full to the right of the block, + // disallowing a subsequent word from having fit on this line. + + // First row: + { + RowScratchRegisters &curr = (*rows)[row_start]; + RowScratchRegisters &next = (*rows)[row_start + 1]; + tesseract::ParagraphJustification j = + curr.ri_->ltr ? JUSTIFICATION_LEFT : JUSTIFICATION_RIGHT; + if (curr.GetLineType() == LT_UNKNOWN && + !FirstWordWouldHaveFit(curr, next, j) && + (curr.ri_->lword_likely_starts_idea || + curr.ri_->rword_likely_starts_idea)) { + curr.SetStartLine(); + } + } + // Middle rows + for (int i = row_start + 1; i < row_end - 1; i++) { + RowScratchRegisters &prev = (*rows)[i - 1]; + RowScratchRegisters &curr = (*rows)[i]; + RowScratchRegisters &next = (*rows)[i + 1]; + tesseract::ParagraphJustification j = + curr.ri_->ltr ? JUSTIFICATION_LEFT : JUSTIFICATION_RIGHT; + if (curr.GetLineType() == LT_UNKNOWN && + !FirstWordWouldHaveFit(curr, next, j) && + LikelyParagraphStart(prev, curr, j)) { + curr.SetStartLine(); + } + } + // Last row + { // the short circuit at the top means we have at least two lines. + RowScratchRegisters &prev = (*rows)[row_end - 2]; + RowScratchRegisters &curr = (*rows)[row_end - 1]; + tesseract::ParagraphJustification j = + curr.ri_->ltr ? JUSTIFICATION_LEFT : JUSTIFICATION_RIGHT; + if (curr.GetLineType() == LT_UNKNOWN && + !FirstWordWouldHaveFit(curr, curr, j) && + LikelyParagraphStart(prev, curr, j)) { + curr.SetStartLine(); + } + } + } + + // Look for sequences of a start line followed by some body lines in + // rows[row_start, row_end) and create ParagraphModels for them if + // they seem coherent. + void ModelStrongEvidence(int debug_level, + GenericVector *rows, + int row_start, int row_end, + bool allow_flush_models, + ParagraphTheory *theory) { + if (!AcceptableRowArgs(debug_level, 2, __func__, rows, row_start, row_end)) + return; + + int start = row_start; + while (start < row_end) { + while (start < row_end && (*rows)[start].GetLineType() != LT_START) + start++; + if (start >= row_end - 1) + break; + + int tolerance = Epsilon((*rows)[start + 1].ri_->average_interword_space); + int end = start; + ParagraphModel last_model; + bool next_consistent; + do { + ++end; + // rows[row, end) was consistent. + // If rows[row, end + 1) is not consistent, + // just model rows[row, end) + if (end < row_end - 1) { + RowScratchRegisters &next = (*rows)[end]; + LineType lt = next.GetLineType(); + next_consistent = lt == LT_BODY || + (lt == LT_UNKNOWN && + !FirstWordWouldHaveFit((*rows)[end - 1], (*rows)[end])); + } + else { + next_consistent = false; + } + if (next_consistent) { + ParagraphModel next_model = InternalParagraphModelByOutline( + rows, start, end + 1, tolerance, &next_consistent); + if (((*rows)[start].ri_->ltr && + last_model.justification() == JUSTIFICATION_LEFT && + next_model.justification() != JUSTIFICATION_LEFT) || + (!(*rows)[start].ri_->ltr && + last_model.justification() == JUSTIFICATION_RIGHT && + next_model.justification() != JUSTIFICATION_RIGHT)) { + next_consistent = false; + } + last_model = next_model; + } + else { + next_consistent = false; + } + } while (next_consistent && end < row_end); + // At this point, rows[start, end) looked like it could have been a + // single paragraph. If we can make a good ParagraphModel for it, + // do so and mark this sequence with that model. + if (end > start + 1) { + // emit a new paragraph if we have more than one line. + const ParagraphModel *model = NULL; + ParagraphModel new_model = ParagraphModelByOutline( + debug_level, rows, start, end, + Epsilon(InterwordSpace(*rows, start, end))); + if (new_model.justification() == JUSTIFICATION_UNKNOWN) { + // couldn't create a good model, oh well. + } + else if (new_model.is_flush()) { + if (end == start + 2) { + // It's very likely we just got two paragraph starts in a row. + end = start + 1; + } + else if (start == row_start) { + // Mark this as a Crown. + if (new_model.justification() == JUSTIFICATION_LEFT) { + model = kCrownLeft; + } + else { + model = kCrownRight; + } + } + else if (allow_flush_models) { + model = theory->AddModel(new_model); + } + } + else { + model = theory->AddModel(new_model); + } + if (model) { + (*rows)[start].AddStartLine(model); + for (int i = start + 1; i < end; i++) { + (*rows)[i].AddBodyLine(model); + } + } + } + start = end; + } + } + + // We examine rows[row_start, row_end) and do the following: + // (1) Clear all existing hypotheses for the rows being considered. + // (2) Mark up any rows as exceptionally likely to be paragraph starts + // or paragraph body lines as such using both geometric and textual + // clues. + // (3) Form models for any sequence of start + continuation lines. + // (4) Smear the paragraph models to cover surrounding text. + void StrongEvidenceClassify(int debug_level, + GenericVector *rows, + int row_start, int row_end, + ParagraphTheory *theory) { + if (!AcceptableRowArgs(debug_level, 2, __func__, rows, row_start, row_end)) + return; + + if (debug_level > 1) { + tprintf("#############################################\n"); + tprintf("# StrongEvidenceClassify( rows[%d:%d) )\n", row_start, row_end); + tprintf("#############################################\n"); + } + + RecomputeMarginsAndClearHypotheses(rows, row_start, row_end, 10); + MarkStrongEvidence(rows, row_start, row_end); + + DebugDump(debug_level > 2, "Initial strong signals.", *theory, *rows); + + // Create paragraph models. + ModelStrongEvidence(debug_level, rows, row_start, row_end, false, theory); + + DebugDump(debug_level > 2, "Unsmeared hypotheses.s.", *theory, *rows); + + // At this point, some rows are marked up as paragraphs with model numbers, + // and some rows are marked up as either LT_START or LT_BODY. Now let's + // smear any good paragraph hypotheses forward and backward. + ParagraphModelSmearer smearer(rows, row_start, row_end, theory); + smearer.Smear(); + } + + void SeparateSimpleLeaderLines(GenericVector *rows, + int row_start, int row_end, + ParagraphTheory *theory) { + for (int i = row_start + 1; i < row_end - 1; i++) { + if ((*rows)[i - 1].ri_->has_leaders && + (*rows)[i].ri_->has_leaders && + (*rows)[i + 1].ri_->has_leaders) { + const ParagraphModel *model = theory->AddModel( + ParagraphModel(JUSTIFICATION_UNKNOWN, 0, 0, 0, 0)); + (*rows)[i].AddStartLine(model); + } + } + } + + // Collect sequences of unique hypotheses in row registers and create proper + // paragraphs for them, referencing the paragraphs in row_owners. + void ConvertHypothesizedModelRunsToParagraphs( + int debug_level, + const GenericVector &rows, + GenericVector *row_owners, + ParagraphTheory *theory) { + int end = rows.size(); + int start; + for (; end > 0; end = start) { + start = end - 1; + const ParagraphModel *model = NULL; + // TODO(eger): Be smarter about dealing with multiple hypotheses. + bool single_line_paragraph = false; + SetOfModels models; + rows[start].NonNullHypotheses(&models); + if (!models.empty()) { + model = models[0]; + if (rows[start].GetLineType(model) != LT_BODY) + single_line_paragraph = true; + } + if (model && !single_line_paragraph) { + // walk back looking for more body lines and then a start line. + while (--start > 0 && rows[start].GetLineType(model) == LT_BODY) { + // do nothing + } + if (start < 0 || rows[start].GetLineType(model) != LT_START) { + model = NULL; + } + } + if (model == NULL) { + continue; + } + // rows[start, end) should be a paragraph. + PARA *p = new PARA(); + if (model == kCrownLeft || model == kCrownRight) { + p->is_very_first_or_continuation = true; + // Crown paragraph. + // If we can find an existing ParagraphModel that fits, use it, + // else create a new one. + for (int row = end; row < rows.size(); row++) { + if ((*row_owners)[row] && + (ValidBodyLine(&rows, start, (*row_owners)[row]->model) && + (start == 0 || + ValidFirstLine(&rows, start, (*row_owners)[row]->model)))) { + model = (*row_owners)[row]->model; + break; + } + } + if (model == kCrownLeft) { + // No subsequent model fits, so cons one up. + model = theory->AddModel(ParagraphModel( + JUSTIFICATION_LEFT, rows[start].lmargin_ + rows[start].lindent_, + 0, 0, Epsilon(rows[start].ri_->average_interword_space))); + } + else if (model == kCrownRight) { + // No subsequent model fits, so cons one up. + model = theory->AddModel(ParagraphModel( + JUSTIFICATION_RIGHT, rows[start].rmargin_ + rows[start].rmargin_, + 0, 0, Epsilon(rows[start].ri_->average_interword_space))); + } + } + rows[start].SetUnknown(); + rows[start].AddStartLine(model); + for (int i = start + 1; i < end; i++) { + rows[i].SetUnknown(); + rows[i].AddBodyLine(model); + } + p->model = model; + p->has_drop_cap = rows[start].ri_->has_drop_cap; + p->is_list_item = + model->justification() == JUSTIFICATION_RIGHT + ? rows[start].ri_->rword_indicates_list_item + : rows[start].ri_->lword_indicates_list_item; + for (int row = start; row < end; row++) { + if ((*row_owners)[row] != NULL) { + tprintf("Memory leak! ConvertHypothesizeModelRunsToParagraphs() called " + "more than once!\n"); + delete (*row_owners)[row]; + } + (*row_owners)[row] = p; + } + } + } + + struct Interval { + Interval() : begin(0), end(0) {} + Interval(int b, int e) : begin(b), end(e) {} + + int begin; + int end; + }; + + // Return whether rows[row] appears to be stranded, meaning that the evidence + // for this row is very weak due to context. For instance, two lines of source + // code may happen to be indented at the same tab vector as body text starts, + // leading us to think they are two start-of-paragraph lines. This is not + // optimal. However, we also don't want to mark a sequence of short dialog + // as "weak," so our heuristic is: + // (1) If a line is surrounded by lines of unknown type, it's weak. + // (2) If two lines in a row are start lines for a given paragraph type, but + // after that the same paragraph type does not continue, they're weak. + bool RowIsStranded(const GenericVector &rows, int row) { + SetOfModels row_models; + rows[row].StrongHypotheses(&row_models); + + for (int m = 0; m < row_models.size(); m++) { + bool all_starts = rows[row].GetLineType(); + int run_length = 1; + bool continues = true; + for (int i = row - 1; i >= 0 && continues; i--) { + SetOfModels models; + rows[i].NonNullHypotheses(&models); + switch (rows[i].GetLineType(row_models[m])) { + case LT_START: run_length++; break; + case LT_MULTIPLE: // explicit fall-through + case LT_BODY: run_length++; all_starts = false; break; + case LT_UNKNOWN: // explicit fall-through + default: continues = false; + } + } + continues = true; + for (int i = row + 1; i < rows.size() && continues; i++) { + SetOfModels models; + rows[i].NonNullHypotheses(&models); + switch (rows[i].GetLineType(row_models[m])) { + case LT_START: run_length++; break; + case LT_MULTIPLE: // explicit fall-through + case LT_BODY: run_length++; all_starts = false; break; + case LT_UNKNOWN: // explicit fall-through + default: continues = false; + } + } + if (run_length > 2 || (!all_starts && run_length > 1)) return false; + } + return true; + } + + // Go through rows[row_start, row_end) and gather up sequences that need better + // classification. + // + Sequences of non-empty rows without hypotheses. + // + Crown paragraphs not immediately followed by a strongly modeled line. + // + Single line paragraphs surrounded by text that doesn't match the + // model. + void LeftoverSegments(const GenericVector &rows, + GenericVector *to_fix, + int row_start, int row_end) { + to_fix->clear(); + for (int i = row_start; i < row_end; i++) { + bool needs_fixing = false; + + SetOfModels models; + SetOfModels models_w_crowns; + rows[i].StrongHypotheses(&models); + rows[i].NonNullHypotheses(&models_w_crowns); + if (models.empty() && !models_w_crowns.empty()) { + // Crown paragraph. Is it followed by a modeled line? + for (int end = i + 1; end < rows.size(); end++) { + SetOfModels end_models; + SetOfModels strong_end_models; + rows[end].NonNullHypotheses(&end_models); + rows[end].StrongHypotheses(&strong_end_models); + if (end_models.empty()) { + needs_fixing = true; + break; + } + else if (!strong_end_models.empty()) { + needs_fixing = false; + break; + } + } + } + else if (models.empty() && rows[i].ri_->num_words > 0) { + // No models at all. + needs_fixing = true; + } + + if (!needs_fixing && !models.empty()) { + needs_fixing = RowIsStranded(rows, i); + } + + if (needs_fixing) { + if (!to_fix->empty() && to_fix->back().end == i - 1) + to_fix->back().end = i; + else + to_fix->push_back(Interval(i, i)); + } + } + // Convert inclusive intervals to half-open intervals. + for (int i = 0; i < to_fix->size(); i++) { + (*to_fix)[i].end = (*to_fix)[i].end + 1; + } + } + + // Given a set of row_owners pointing to PARAs or NULL (no paragraph known), + // normalize each row_owner to point to an actual PARA, and output the + // paragraphs in order onto paragraphs. + void CanonicalizeDetectionResults( + GenericVector *row_owners, + PARA_LIST *paragraphs) { + GenericVector &rows = *row_owners; + paragraphs->clear(); + PARA_IT out(paragraphs); + PARA *formerly_null = NULL; + for (int i = 0; i < rows.size(); i++) { + if (rows[i] == NULL) { + if (i == 0 || rows[i - 1] != formerly_null) { + rows[i] = formerly_null = new PARA(); + } + else { + rows[i] = formerly_null; + continue; + } + } + else if (i > 0 && rows[i - 1] == rows[i]) { + continue; + } + out.add_after_then_move(rows[i]); + } + } + + // Main entry point for Paragraph Detection Algorithm. + // + // Given a set of equally spaced textlines (described by row_infos), + // Split them into paragraphs. + // + // Output: + // row_owners - one pointer for each row, to the paragraph it belongs to. + // paragraphs - this is the actual list of PARA objects. + // models - the list of paragraph models referenced by the PARA objects. + // caller is responsible for deleting the models. + void DetectParagraphs(int debug_level, + GenericVector *row_infos, + GenericVector *row_owners, + PARA_LIST *paragraphs, + GenericVector *models) { + GenericVector rows; + ParagraphTheory theory(models); + + // Initialize row_owners to be a bunch of NULL pointers. + row_owners->init_to_size(row_infos->size(), NULL); + + // Set up row scratch registers for the main algorithm. + rows.init_to_size(row_infos->size(), RowScratchRegisters()); + for (int i = 0; i < row_infos->size(); i++) { + rows[i].Init((*row_infos)[i]); + } + + // Pass 1: + // Detect sequences of lines that all contain leader dots (.....) + // These are likely Tables of Contents. If there are three text lines in + // a row with leader dots, it's pretty safe to say the middle one should + // be a paragraph of its own. + SeparateSimpleLeaderLines(&rows, 0, rows.size(), &theory); + + DebugDump(debug_level > 1, "End of Pass 1", theory, rows); + + GenericVector leftovers; + LeftoverSegments(rows, &leftovers, 0, rows.size()); + for (int i = 0; i < leftovers.size(); i++) { + // Pass 2a: + // Find any strongly evidenced start-of-paragraph lines. If they're + // followed by two lines that look like body lines, make a paragraph + // model for that and see if that model applies throughout the text + // (that is, "smear" it). + StrongEvidenceClassify(debug_level, &rows, + leftovers[i].begin, leftovers[i].end, &theory); + + // Pass 2b: + // If we had any luck in pass 2a, we got part of the page and didn't + // know how to classify a few runs of rows. Take the segments that + // didn't find a model and reprocess them individually. + GenericVector leftovers2; + LeftoverSegments(rows, &leftovers2, leftovers[i].begin, leftovers[i].end); + bool pass2a_was_useful = leftovers2.size() > 1 || + (leftovers2.size() == 1 && + (leftovers2[0].begin != 0 || leftovers2[0].end != rows.size())); + if (pass2a_was_useful) { + for (int j = 0; j < leftovers2.size(); j++) { + StrongEvidenceClassify(debug_level, &rows, + leftovers2[j].begin, leftovers2[j].end, + &theory); + } + } + } + + DebugDump(debug_level > 1, "End of Pass 2", theory, rows); + + // Pass 3: + // These are the dregs for which we didn't have enough strong textual + // and geometric clues to form matching models for. Let's see if + // the geometric clues are simple enough that we could just use those. + LeftoverSegments(rows, &leftovers, 0, rows.size()); + for (int i = 0; i < leftovers.size(); i++) { + GeometricClassify(debug_level, &rows, + leftovers[i].begin, leftovers[i].end, &theory); + } + + // Undo any flush models for which there's little evidence. + DowngradeWeakestToCrowns(debug_level, &theory, &rows); + + DebugDump(debug_level > 1, "End of Pass 3", theory, rows); + + // Pass 4: + // Take everything that's still not marked up well and clear all markings. + LeftoverSegments(rows, &leftovers, 0, rows.size()); + for (int i = 0; i < leftovers.size(); i++) { + for (int j = leftovers[i].begin; j < leftovers[i].end; j++) { + rows[j].SetUnknown(); + } + } + + DebugDump(debug_level > 1, "End of Pass 4", theory, rows); + + // Convert all of the unique hypothesis runs to PARAs. + ConvertHypothesizedModelRunsToParagraphs(debug_level, rows, row_owners, + &theory); + + DebugDump(debug_level > 0, "Final Paragraph Segmentation", theory, rows); + + // Finally, clean up any dangling NULL row paragraph parents. + CanonicalizeDetectionResults(row_owners, paragraphs); + } + + // ============ Code interfacing with the rest of Tesseract ================== + + void InitializeTextAndBoxesPreRecognition(const MutableIterator &it, + RowInfo *info) { + // Set up text, lword_text, and rword_text (mostly for debug printing). + STRING fake_text; + PageIterator pit(static_cast(it)); + bool first_word = true; + if (!pit.Empty(RIL_WORD)) { + do { + fake_text += "x"; + if (first_word) info->lword_text += "x"; + info->rword_text += "x"; + if (pit.IsAtFinalElement(RIL_WORD, RIL_SYMBOL) && + !pit.IsAtFinalElement(RIL_TEXTLINE, RIL_SYMBOL)) { + fake_text += " "; + info->rword_text = ""; + first_word = false; + } + } while (!pit.IsAtFinalElement(RIL_TEXTLINE, RIL_SYMBOL) && + pit.Next(RIL_SYMBOL)); + } + if (fake_text.size() == 0) return; + + int lspaces = info->pix_ldistance / info->average_interword_space; + for (int i = 0; i < lspaces; i++) { + info->text += ' '; + } + info->text += fake_text; + + // Set up lword_box, rword_box, and num_words. + PAGE_RES_IT page_res_it = *it.PageResIt(); + WERD_RES *word_res = page_res_it.restart_row(); + ROW_RES *this_row = page_res_it.row(); + + WERD_RES *lword = NULL; + WERD_RES *rword = NULL; + info->num_words = 0; + do { + if (word_res) { + if (!lword) lword = word_res; + if (rword != word_res) info->num_words++; + rword = word_res; + } + word_res = page_res_it.forward(); + } while (page_res_it.row() == this_row); + + if (lword) info->lword_box = lword->word->bounding_box(); + if (rword) info->rword_box = rword->word->bounding_box(); + } + + + // Given a Tesseract Iterator pointing to a text line, fill in the paragraph + // detector RowInfo with all relevant information from the row. + void InitializeRowInfo(bool after_recognition, + const MutableIterator &it, + RowInfo *info) { + if (it.PageResIt()->row() != NULL) { + ROW *row = it.PageResIt()->row()->row; + info->pix_ldistance = row->lmargin(); + info->pix_rdistance = row->rmargin(); + info->average_interword_space = + row->space() > 0 ? row->space() : MAX(row->x_height(), 1); + info->pix_xheight = row->x_height(); + info->has_leaders = false; + info->has_drop_cap = row->has_drop_cap(); + info->ltr = true; // set below depending on word scripts + } + else { + info->pix_ldistance = info->pix_rdistance = 0; + info->average_interword_space = 1; + info->pix_xheight = 1.0; + info->has_leaders = false; + info->has_drop_cap = false; + info->ltr = true; + } + + info->num_words = 0; + info->lword_indicates_list_item = false; + info->lword_likely_starts_idea = false; + info->lword_likely_ends_idea = false; + info->rword_indicates_list_item = false; + info->rword_likely_starts_idea = false; + info->rword_likely_ends_idea = false; + info->has_leaders = false; + info->ltr = 1; + + if (!after_recognition) { + InitializeTextAndBoxesPreRecognition(it, info); + return; + } + info->text = ""; + char *text = it.GetUTF8Text(RIL_TEXTLINE); + int trailing_ws_idx = strlen(text); // strip trailing space + while (trailing_ws_idx > 0 && + // isspace() only takes ASCII + ((text[trailing_ws_idx - 1] & 0x80) == 0) && + isspace(text[trailing_ws_idx - 1])) + trailing_ws_idx--; + if (trailing_ws_idx > 0) { + int lspaces = info->pix_ldistance / info->average_interword_space; + for (int i = 0; i < lspaces; i++) + info->text += ' '; + for (int i = 0; i < trailing_ws_idx; i++) + info->text += text[i]; + } + delete[]text; + + if (info->text.size() == 0) { + return; + } + + PAGE_RES_IT page_res_it = *it.PageResIt(); + GenericVector werds; + WERD_RES *word_res = page_res_it.restart_row(); + ROW_RES *this_row = page_res_it.row(); + int num_leaders = 0; + int ltr = 0; + int rtl = 0; + do { + if (word_res && word_res->best_choice->unichar_string().length() > 0) { + werds.push_back(word_res); + ltr += word_res->AnyLtrCharsInWord() ? 1 : 0; + rtl += word_res->AnyRtlCharsInWord() ? 1 : 0; + if (word_res->word->flag(W_REP_CHAR)) num_leaders++; + } + word_res = page_res_it.forward(); + } while (page_res_it.row() == this_row); + info->ltr = ltr >= rtl; + info->has_leaders = num_leaders > 3; + info->num_words = werds.size(); + if (!werds.empty()) { + WERD_RES *lword = werds[0], *rword = werds[werds.size() - 1]; + info->lword_text = lword->best_choice->unichar_string().string(); + info->rword_text = rword->best_choice->unichar_string().string(); + info->lword_box = lword->word->bounding_box(); + info->rword_box = rword->word->bounding_box(); + LeftWordAttributes(lword->uch_set, lword->best_choice, + info->lword_text, + &info->lword_indicates_list_item, + &info->lword_likely_starts_idea, + &info->lword_likely_ends_idea); + RightWordAttributes(rword->uch_set, rword->best_choice, + info->rword_text, + &info->rword_indicates_list_item, + &info->rword_likely_starts_idea, + &info->rword_likely_ends_idea); + } + } + + // This is called after rows have been identified and words are recognized. + // Much of this could be implemented before word recognition, but text helps + // to identify bulleted lists and gives good signals for sentence boundaries. + void DetectParagraphs(int debug_level, + bool after_text_recognition, + const MutableIterator *block_start, + GenericVector *models) { + // Clear out any preconceived notions. + if (block_start->Empty(RIL_TEXTLINE)) { + return; + } + BLOCK *block = block_start->PageResIt()->block()->block; + block->para_list()->clear(); + bool is_image_block = block->poly_block() && !block->poly_block()->IsText(); + + // Convert the Tesseract structures to RowInfos + // for the paragraph detection algorithm. + MutableIterator row(*block_start); + if (row.Empty(RIL_TEXTLINE)) + return; // end of input already. + + GenericVector row_infos; + do { + if (!row.PageResIt()->row()) + continue; // empty row. + row.PageResIt()->row()->row->set_para(NULL); + row_infos.push_back(RowInfo()); + RowInfo &ri = row_infos.back(); + InitializeRowInfo(after_text_recognition, row, &ri); + } while (!row.IsAtFinalElement(RIL_BLOCK, RIL_TEXTLINE) && + row.Next(RIL_TEXTLINE)); + + // If we're called before text recognition, we might not have + // tight block bounding boxes, so trim by the minimum on each side. + if (!row_infos.empty()) { + int min_lmargin = row_infos[0].pix_ldistance; + int min_rmargin = row_infos[0].pix_rdistance; + for (int i = 1; i < row_infos.size(); i++) { + if (row_infos[i].pix_ldistance < min_lmargin) + min_lmargin = row_infos[i].pix_ldistance; + if (row_infos[i].pix_rdistance < min_rmargin) + min_rmargin = row_infos[i].pix_rdistance; + } + if (min_lmargin > 0 || min_rmargin > 0) { + for (int i = 0; i < row_infos.size(); i++) { + row_infos[i].pix_ldistance -= min_lmargin; + row_infos[i].pix_rdistance -= min_rmargin; + } + } + } + + // Run the paragraph detection algorithm. + GenericVector row_owners; + GenericVector the_paragraphs; + if (!is_image_block) { + DetectParagraphs(debug_level, &row_infos, &row_owners, block->para_list(), + models); + } + else { + row_owners.init_to_size(row_infos.size(), NULL); + CanonicalizeDetectionResults(&row_owners, block->para_list()); + } + + // Now stitch in the row_owners into the rows. + row = *block_start; + for (int i = 0; i < row_owners.size(); i++) { + while (!row.PageResIt()->row()) + row.Next(RIL_TEXTLINE); + row.PageResIt()->row()->row->set_para(row_owners[i]); + row.Next(RIL_TEXTLINE); + } + } + +} // namespace diff --git a/3rdparty/hgOCR/include/ccmain/paragraphs.h b/3rdparty/hgOCR/include/ccmain/paragraphs.h new file mode 100644 index 00000000..f022b731 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/paragraphs.h @@ -0,0 +1,108 @@ +/********************************************************************** + * File: paragraphs.h + * Description: Paragraph Detection data structures. + * Author: David Eger + * Created: 25 February 2011 + * + * (C) Copyright 2011, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCMAIN_PARAGRAPHS_H_ +#define TESSERACT_CCMAIN_PARAGRAPHS_H_ + +#include "rect.h" +#include "ocrpara.h" +#include "genericvector.h" +#include "strngs.h" + + +class WERD; +class UNICHARSET; + +namespace tesseract { + + class MutableIterator; + + // This structure captures all information needed about a text line for the + // purposes of paragraph detection. It is meant to be exceedingly light-weight + // so that we can easily test paragraph detection independent of the rest of + // Tesseract. + class RowInfo { + public: + // Constant data derived from Tesseract output. + STRING text; // the full UTF-8 text of the line. + bool ltr; // whether the majority of the text is left-to-right + // TODO(eger) make this more fine-grained. + + bool has_leaders; // does the line contain leader dots (.....)? + bool has_drop_cap; // does the line have a drop cap? + int pix_ldistance; // distance to the left pblock boundary in pixels + int pix_rdistance; // distance to the right pblock boundary in pixels + float pix_xheight; // guessed xheight for the line + int average_interword_space; // average space between words in pixels. + + int num_words; + TBOX lword_box; // in normalized (horiz text rows) space + TBOX rword_box; // in normalized (horiz text rows) space + + STRING lword_text; // the UTF-8 text of the leftmost werd + STRING rword_text; // the UTF-8 text of the rightmost werd + + // The text of a paragraph typically starts with the start of an idea and + // ends with the end of an idea. Here we define paragraph as something that + // may have a first line indent and a body indent which may be different. + // Typical words that start an idea are: + // 1. Words in western scripts that start with + // a capital letter, for example "The" + // 2. Bulleted or numbered list items, for + // example "2." + // Typical words which end an idea are words ending in punctuation marks. In + // this vocabulary, each list item is represented as a paragraph. + bool lword_indicates_list_item; + bool lword_likely_starts_idea; + bool lword_likely_ends_idea; + + bool rword_indicates_list_item; + bool rword_likely_starts_idea; + bool rword_likely_ends_idea; + }; + + // Main entry point for Paragraph Detection Algorithm. + // + // Given a set of equally spaced textlines (described by row_infos), + // Split them into paragraphs. See http://goto/paragraphstalk + // + // Output: + // row_owners - one pointer for each row, to the paragraph it belongs to. + // paragraphs - this is the actual list of PARA objects. + // models - the list of paragraph models referenced by the PARA objects. + // caller is responsible for deleting the models. + void DetectParagraphs(int debug_level, + GenericVector *row_infos, + GenericVector *row_owners, + PARA_LIST *paragraphs, + GenericVector *models); + + // Given a MutableIterator to the start of a block, run DetectParagraphs on + // that block and commit the results to the underlying ROW and BLOCK structs, + // saving the ParagraphModels in models. Caller owns the models. + // We use unicharset during the function to answer questions such as "is the + // first letter of this word upper case?" + void DetectParagraphs(int debug_level, + bool after_text_recognition, + const MutableIterator *block_start, + GenericVector *models); + +} // namespace + +#endif // TESSERACT_CCMAIN_PARAGRAPHS_H_ diff --git a/3rdparty/hgOCR/include/ccmain/paragraphs_internal.h b/3rdparty/hgOCR/include/ccmain/paragraphs_internal.h new file mode 100644 index 00000000..83db2e2b --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/paragraphs_internal.h @@ -0,0 +1,312 @@ +/********************************************************************** + * File: paragraphs.h + * Description: Paragraph Detection internal data structures. + * Author: David Eger + * Created: 11 March 2011 + * + * (C) Copyright 2011, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCMAIN_PARAGRAPHS_INTERNAL_H_ +#define TESSERACT_CCMAIN_PARAGRAPHS_INTERNAL_H_ + +#include "paragraphs.h" +#ifdef _MSC_VER +#include +#else +#include "strings.h" +#endif + + // NO CODE OUTSIDE OF paragraphs.cpp AND TESTS SHOULD NEED TO ACCESS + // DATA STRUCTURES OR FUNCTIONS IN THIS FILE. + +class WERD_CHOICE; + +namespace tesseract { + + // Return whether the given word is likely to be a list item start word. + bool AsciiLikelyListItem(const STRING &word); + + // Return the first Unicode Codepoint from werd[pos]. + int UnicodeFor(const UNICHARSET *u, const WERD_CHOICE *werd, int pos); + + // Set right word attributes given either a unicharset and werd or a utf8 + // string. + void RightWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, + const STRING &utf8, + bool *is_list, bool *starts_idea, bool *ends_idea); + + // Set left word attributes given either a unicharset and werd or a utf8 string. + void LeftWordAttributes(const UNICHARSET *unicharset, const WERD_CHOICE *werd, + const STRING &utf8, + bool *is_list, bool *starts_idea, bool *ends_idea); + + enum LineType { + LT_START = 'S', // First line of a paragraph. + LT_BODY = 'C', // Continuation line of a paragraph. + LT_UNKNOWN = 'U', // No clues. + LT_MULTIPLE = 'M', // Matches for both LT_START and LT_BODY. + }; + + // The first paragraph in a page of body text is often un-indented. + // This is a typographic convention which is common to indicate either that: + // (1) The paragraph is the continuation of a previous paragraph, or + // (2) The paragraph is the first paragraph in a chapter. + // + // I refer to such paragraphs as "crown"s, and the output of the paragraph + // detection algorithm attempts to give them the same paragraph model as + // the rest of the body text. + // + // Nonetheless, while building hypotheses, it is useful to mark the lines + // of crown paragraphs temporarily as crowns, either aligned left or right. + extern const ParagraphModel *kCrownLeft; + extern const ParagraphModel *kCrownRight; + + inline bool StrongModel(const ParagraphModel *model) { + return model != NULL && model != kCrownLeft && model != kCrownRight; + } + + struct LineHypothesis { + LineHypothesis() : ty(LT_UNKNOWN), model(NULL) {} + LineHypothesis(LineType line_type, const ParagraphModel *m) + : ty(line_type), model(m) {} + LineHypothesis(const LineHypothesis &other) + : ty(other.ty), model(other.model) {} + + bool operator==(const LineHypothesis &other) const { + return ty == other.ty && model == other.model; + } + + LineType ty; + const ParagraphModel *model; + }; + + class ParagraphTheory; // Forward Declaration + + typedef GenericVectorEqEq SetOfModels; + + // Row Scratch Registers are data generated by the paragraph detection + // algorithm based on a RowInfo input. + class RowScratchRegisters { + public: + // We presume row will outlive us. + void Init(const RowInfo &row); + + LineType GetLineType() const; + + LineType GetLineType(const ParagraphModel *model) const; + + // Mark this as a start line type, sans model. This is useful for the + // initial marking of probable body lines or paragraph start lines. + void SetStartLine(); + + // Mark this as a body line type, sans model. This is useful for the + // initial marking of probably body lines or paragraph start lines. + void SetBodyLine(); + + // Record that this row fits as a paragraph start line in the given model, + void AddStartLine(const ParagraphModel *model); + // Record that this row fits as a paragraph body line in the given model, + void AddBodyLine(const ParagraphModel *model); + + // Clear all hypotheses about this line. + void SetUnknown() { hypotheses_.truncate(0); } + + // Append all hypotheses of strong models that match this row as a start. + void StartHypotheses(SetOfModels *models) const; + + // Append all hypotheses of strong models matching this row. + void StrongHypotheses(SetOfModels *models) const; + + // Append all hypotheses for this row. + void NonNullHypotheses(SetOfModels *models) const; + + // Discard any hypotheses whose model is not in the given list. + void DiscardNonMatchingHypotheses(const SetOfModels &models); + + // If we have only one hypothesis and that is that this line is a paragraph + // start line of a certain model, return that model. Else return NULL. + const ParagraphModel *UniqueStartHypothesis() const; + + // If we have only one hypothesis and that is that this line is a paragraph + // body line of a certain model, return that model. Else return NULL. + const ParagraphModel *UniqueBodyHypothesis() const; + + // Return the indentation for the side opposite of the aligned side. + int OffsideIndent(tesseract::ParagraphJustification just) const { + switch (just) { + case tesseract::JUSTIFICATION_RIGHT: return lindent_; + case tesseract::JUSTIFICATION_LEFT: return rindent_; + default: return lindent_ > rindent_ ? lindent_ : rindent_; + } + } + + // Return the indentation for the side the text is aligned to. + int AlignsideIndent(tesseract::ParagraphJustification just) const { + switch (just) { + case tesseract::JUSTIFICATION_RIGHT: return rindent_; + case tesseract::JUSTIFICATION_LEFT: return lindent_; + default: return lindent_ > rindent_ ? lindent_ : rindent_; + } + } + + // Append header fields to a vector of row headings. + static void AppendDebugHeaderFields(GenericVector *header); + + // Append data for this row to a vector of debug strings. + void AppendDebugInfo(const ParagraphTheory &theory, + GenericVector *dbg) const; + + const RowInfo *ri_; + + // These four constants form a horizontal box model for the white space + // on the edges of each line. At each point in the algorithm, the following + // shall hold: + // ri_->pix_ldistance = lmargin_ + lindent_ + // ri_->pix_rdistance = rindent_ + rmargin_ + int lmargin_; + int lindent_; + int rindent_; + int rmargin_; + + private: + // Hypotheses of either LT_START or LT_BODY + GenericVectorEqEq hypotheses_; + }; + + // A collection of convenience functions for wrapping the set of + // Paragraph Models we believe correctly model the paragraphs in the image. + class ParagraphTheory { + public: + // We presume models will outlive us, and that models will take ownership + // of any ParagraphModel *'s we add. + explicit ParagraphTheory(GenericVector *models) + : models_(models) {} + GenericVector &models() { return *models_; } + const GenericVector &models() const { return *models_; } + + // Return an existing model if one that is Comparable() can be found. + // Else, allocate a new copy of model to save and return a pointer to it. + const ParagraphModel *AddModel(const ParagraphModel &model); + + // Discard any models we've made that are not in the list of used models. + void DiscardUnusedModels(const SetOfModels &used_models); + + // Return the set of all non-centered models. + void NonCenteredModels(SetOfModels *models); + + // If any of the non-centered paragraph models we know about fit + // rows[start, end), return it. Else NULL. + const ParagraphModel *Fits(const GenericVector *rows, + int start, int end) const; + + int IndexOf(const ParagraphModel *model) const; + + private: + GenericVector *models_; + GenericVectorEqEq models_we_added_; + }; + + bool ValidFirstLine(const GenericVector *rows, + int row, const ParagraphModel *model); + bool ValidBodyLine(const GenericVector *rows, + int row, const ParagraphModel *model); + bool CrownCompatible(const GenericVector *rows, + int a, int b, const ParagraphModel *model); + + // A class for smearing Paragraph Model hypotheses to surrounding rows. + // The idea here is that StrongEvidenceClassify first marks only exceedingly + // obvious start and body rows and constructs models of them. Thereafter, + // we may have left over unmarked lines (mostly end-of-paragraph lines) which + // were too short to have much confidence about, but which fit the models we've + // constructed perfectly and which we ought to mark. This class is used to + // "smear" our models over the text. + class ParagraphModelSmearer { + public: + ParagraphModelSmearer(GenericVector *rows, + int row_start, int row_end, + ParagraphTheory *theory); + + // Smear forward paragraph models from existing row markings to subsequent + // text lines if they fit, and mark any thereafter still unmodeled rows + // with any model in the theory that fits them. + void Smear(); + + private: + // Record in open_models_ for rows [start_row, end_row) the list of models + // currently open at each row. + // A model is still open in a row if some previous row has said model as a + // start hypothesis, and all rows since (including this row) would fit as + // either a body or start line in that model. + void CalculateOpenModels(int row_start, int row_end); + + SetOfModels &OpenModels(int row) { + return open_models_[row - row_start_ + 1]; + } + + ParagraphTheory *theory_; + GenericVector *rows_; + int row_start_; + int row_end_; + + // open_models_ corresponds to rows[start_row_ - 1, end_row_] + // + // open_models_: Contains models which there was an active (open) paragraph + // as of the previous line and for which the left and right + // indents admit the possibility that this text line continues + // to fit the same model. + // TODO(eger): Think about whether we can get rid of "Open" models and just + // use the current hypotheses on RowScratchRegisters. + GenericVector open_models_; + }; + + // Clear all hypotheses about lines [start, end) and reset the margins to the + // percentile (0..100) value of the left and right row edges for this run of + // rows. + void RecomputeMarginsAndClearHypotheses( + GenericVector *rows, int start, int end, + int percentile); + + // Return the median inter-word space in rows[row_start, row_end). + int InterwordSpace(const GenericVector &rows, + int row_start, int row_end); + + // Return whether the first word on the after line can fit in the space at + // the end of the before line (knowing which way the text is aligned and read). + bool FirstWordWouldHaveFit(const RowScratchRegisters &before, + const RowScratchRegisters &after, + tesseract::ParagraphJustification justification); + + // Return whether the first word on the after line can fit in the space at + // the end of the before line (not knowing the text alignment). + bool FirstWordWouldHaveFit(const RowScratchRegisters &before, + const RowScratchRegisters &after); + + // Do rows[start, end) form a single instance of the given paragraph model? + bool RowsFitModel(const GenericVector *rows, + int start, int end, const ParagraphModel *model); + + // Do the text and geometry of two rows support a paragraph break between them? + bool LikelyParagraphStart(const RowScratchRegisters &before, + const RowScratchRegisters &after, + tesseract::ParagraphJustification j); + + // Given a set of row_owners pointing to PARAs or NULL (no paragraph known), + // normalize each row_owner to point to an actual PARA, and output the + // paragraphs in order onto paragraphs. + void CanonicalizeDetectionResults( + GenericVector *row_owners, + PARA_LIST *paragraphs); + +} // namespace +#endif // TESSERACT_CCMAIN_PARAGRAPHS_INTERNAL_H_ diff --git a/3rdparty/hgOCR/include/ccmain/paramsd.cpp b/3rdparty/hgOCR/include/ccmain/paramsd.cpp new file mode 100644 index 00000000..90d6bb9c --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/paramsd.cpp @@ -0,0 +1,370 @@ +/////////////////////////////////////////////////////////////////////// +// File: paramsd.cpp +// Description: Tesseract parameter Editor +// Author: Joern Wanke +// Created: Wed Jul 18 10:05:01 PDT 2007 +// +// (C) Copyright 2007, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// +// +// The parameters editor is used to edit all the parameters used within +// tesseract from the ui. +#ifdef _WIN32 +#else +#include +#include +#endif + +#include + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#ifndef GRAPHICS_DISABLED +#include "paramsd.h" + + +#include "params.h" +#include "scrollview.h" +#include "svmnode.h" + + +#define VARDIR "configs/" /*parameters files */ +#define MAX_ITEMS_IN_SUBMENU 30 + +// The following variables should remain static globals, since they +// are used by debug editor, which uses a single Tesseract instance. +// +// Contains the mappings from unique VC ids to their actual pointers. +static std::map vcMap; +static int nrParams = 0; +static int writeCommands[2]; + +ELISTIZE(ParamContent) + +// Constructors for the various ParamTypes. +ParamContent::ParamContent(tesseract::StringParam* it) { + my_id_ = nrParams; + nrParams++; + param_type_ = VT_STRING; + sIt = it; + vcMap[my_id_] = this; +} +// Constructors for the various ParamTypes. +ParamContent::ParamContent(tesseract::IntParam* it) { + my_id_ = nrParams; + nrParams++; + param_type_ = VT_INTEGER; + iIt = it; + vcMap[my_id_] = this; +} +// Constructors for the various ParamTypes. +ParamContent::ParamContent(tesseract::BoolParam* it) { + my_id_ = nrParams; + nrParams++; + param_type_ = VT_BOOLEAN; + bIt = it; + vcMap[my_id_] = this; +} +// Constructors for the various ParamTypes. +ParamContent::ParamContent(tesseract::DoubleParam* it) { + my_id_ = nrParams; + nrParams++; + param_type_ = VT_DOUBLE; + dIt = it; + vcMap[my_id_] = this; +} + +// Gets a VC object identified by its ID. +ParamContent* ParamContent::GetParamContentById(int id) { + return vcMap[id]; +} + +// Copy the first N words from the source string to the target string. +// Words are delimited by "_". +void ParamsEditor::GetFirstWords( + const char *s, // source string + int n, // number of words + char *t // target string +) { + int full_length = strlen(s); + int reqd_len = 0; // No. of chars requird + const char *next_word = s; + + while ((n > 0) && reqd_len < full_length) { + reqd_len += strcspn(next_word, "_") + 1; + next_word += reqd_len; + n--; + } + strncpy(t, s, reqd_len); + t[reqd_len] = '\0'; // ensure null terminal +} + +// Getter for the name. +const char* ParamContent::GetName() const { + if (param_type_ == VT_INTEGER) { return iIt->name_str(); } + else if (param_type_ == VT_BOOLEAN) { return bIt->name_str(); } + else if (param_type_ == VT_DOUBLE) { return dIt->name_str(); } + else if (param_type_ == VT_STRING) { return sIt->name_str(); } + else + return "ERROR: ParamContent::GetName()"; +} + +// Getter for the description. +const char* ParamContent::GetDescription() const { + if (param_type_ == VT_INTEGER) { return iIt->info_str(); } + else if (param_type_ == VT_BOOLEAN) { return bIt->info_str(); } + else if (param_type_ == VT_DOUBLE) { return dIt->info_str(); } + else if (param_type_ == VT_STRING) { return sIt->info_str(); } + else return NULL; +} + +// Getter for the value. +STRING ParamContent::GetValue() const { + STRING result; + if (param_type_ == VT_INTEGER) { + result.add_str_int("", *iIt); + } + else if (param_type_ == VT_BOOLEAN) { + result.add_str_int("", *bIt); + } + else if (param_type_ == VT_DOUBLE) { + result.add_str_double("", *dIt); + } + else if (param_type_ == VT_STRING) { + if (((STRING) * (sIt)).string() != NULL) { + result = sIt->string(); + } + else { + result = "Null"; + } + } + return result; +} + +// Setter for the value. +void ParamContent::SetValue(const char* val) { + // TODO (wanke) Test if the values actually are properly converted. + // (Quickly visible impacts?) + changed_ = TRUE; + if (param_type_ == VT_INTEGER) { + iIt->set_value(atoi(val)); + } + else if (param_type_ == VT_BOOLEAN) { + bIt->set_value(atoi(val)); + } + else if (param_type_ == VT_DOUBLE) { + dIt->set_value(strtod(val, NULL)); + } + else if (param_type_ == VT_STRING) { + sIt->set_value(val); + } +} + +// Gets the up to the first 3 prefixes from s (split by _). +// For example, tesseract_foo_bar will be split into tesseract,foo and bar. +void ParamsEditor::GetPrefixes(const char* s, STRING* level_one, + STRING* level_two, + STRING* level_three) { + char* p = new char[1024]; + GetFirstWords(s, 1, p); + *level_one = p; + GetFirstWords(s, 2, p); + *level_two = p; + GetFirstWords(s, 3, p); + *level_three = p; + delete[] p; +} + +// Compare two VC objects by their name. +int ParamContent::Compare(const void* v1, const void* v2) { + const ParamContent* one = + *reinterpret_cast(v1); + const ParamContent* two = + *reinterpret_cast(v2); + return strcmp(one->GetName(), two->GetName()); +} + +// Find all editable parameters used within tesseract and create a +// SVMenuNode tree from it. +// TODO (wanke): This is actually sort of hackish. +SVMenuNode* ParamsEditor::BuildListOfAllLeaves(tesseract::Tesseract *tess) { + SVMenuNode* mr = new SVMenuNode(); + ParamContent_LIST vclist; + ParamContent_IT vc_it(&vclist); + // Amount counts the number of entries for a specific char*. + // TODO(rays) get rid of the use of std::map. + std::map amount; + + // Add all parameters to a list. + int v, i; + int num_iterations = (tess->params() == NULL) ? 1 : 2; + for (v = 0; v < num_iterations; ++v) { + tesseract::ParamsVectors *vec = (v == 0) ? GlobalParams() : tess->params(); + for (i = 0; i < vec->int_params.size(); ++i) { + vc_it.add_after_then_move(new ParamContent(vec->int_params[i])); + } + for (i = 0; i < vec->bool_params.size(); ++i) { + vc_it.add_after_then_move(new ParamContent(vec->bool_params[i])); + } + for (i = 0; i < vec->string_params.size(); ++i) { + vc_it.add_after_then_move(new ParamContent(vec->string_params[i])); + } + for (i = 0; i < vec->double_params.size(); ++i) { + vc_it.add_after_then_move(new ParamContent(vec->double_params[i])); + } + } + + // Count the # of entries starting with a specific prefix. + for (vc_it.mark_cycle_pt(); !vc_it.cycled_list(); vc_it.forward()) { + ParamContent* vc = vc_it.data(); + STRING tag; + STRING tag2; + STRING tag3; + + GetPrefixes(vc->GetName(), &tag, &tag2, &tag3); + amount[tag.string()]++; + amount[tag2.string()]++; + amount[tag3.string()]++; + } + + vclist.sort(ParamContent::Compare); // Sort the list alphabetically. + + SVMenuNode* other = mr->AddChild("OTHER"); + + // go through the list again and this time create the menu structure. + vc_it.move_to_first(); + for (vc_it.mark_cycle_pt(); !vc_it.cycled_list(); vc_it.forward()) { + ParamContent* vc = vc_it.data(); + STRING tag; + STRING tag2; + STRING tag3; + GetPrefixes(vc->GetName(), &tag, &tag2, &tag3); + + if (amount[tag.string()] == 1) { + other->AddChild(vc->GetName(), vc->GetId(), vc->GetValue().string(), + vc->GetDescription()); + } + else { // More than one would use this submenu -> create submenu. + SVMenuNode* sv = mr->AddChild(tag.string()); + if ((amount[tag.string()] <= MAX_ITEMS_IN_SUBMENU) || + (amount[tag2.string()] <= 1)) { + sv->AddChild(vc->GetName(), vc->GetId(), + vc->GetValue().string(), vc->GetDescription()); + } + else { // Make subsubmenus. + SVMenuNode* sv2 = sv->AddChild(tag2.string()); + sv2->AddChild(vc->GetName(), vc->GetId(), + vc->GetValue().string(), vc->GetDescription()); + } + } + } + return mr; +} + +// Event listener. Waits for SVET_POPUP events and processes them. +void ParamsEditor::Notify(const SVEvent* sve) { + if (sve->type == SVET_POPUP) { // only catch SVET_POPUP! + char* param = sve->parameter; + if (sve->command_id == writeCommands[0]) { + WriteParams(param, false); + } + else if (sve->command_id == writeCommands[1]) { + WriteParams(param, true); + } + else { + ParamContent* vc = ParamContent::GetParamContentById( + sve->command_id); + vc->SetValue(param); + sv_window_->AddMessage("Setting %s to %s", + vc->GetName(), vc->GetValue().string()); + } + } +} + +// Integrate the parameters editor as popupmenu into the existing scrollview +// window (usually the pg editor). If sv == null, create a new empty +// empty window and attach the parameters editor to that window (ugly). +ParamsEditor::ParamsEditor(tesseract::Tesseract* tess, + ScrollView* sv) { + if (sv == NULL) { + const char* name = "ParamEditorMAIN"; + sv = new ScrollView(name, 1, 1, 200, 200, 300, 200); + } + + sv_window_ = sv; + + //Only one event handler per window. + //sv->AddEventHandler((SVEventHandler*) this); + + SVMenuNode* svMenuRoot = BuildListOfAllLeaves(tess); + + STRING paramfile; + paramfile = tess->datadir; + paramfile += VARDIR; // parameters dir + paramfile += "edited"; // actual name + + SVMenuNode* std_menu = svMenuRoot->AddChild("Build Config File"); + + writeCommands[0] = nrParams + 1; + std_menu->AddChild("All Parameters", writeCommands[0], + paramfile.string(), "Config file name?"); + + writeCommands[1] = nrParams + 2; + std_menu->AddChild("changed_ Parameters Only", writeCommands[1], + paramfile.string(), "Config file name?"); + + svMenuRoot->BuildMenu(sv, false); +} + + +// Write all (changed_) parameters to a config file. +void ParamsEditor::WriteParams(char *filename, + bool changes_only) { + FILE *fp; // input file + char msg_str[255]; + // if file exists + if ((fp = fopen(filename, "rb")) != NULL) { + fclose(fp); + sprintf(msg_str, "Overwrite file " "%s" "? (Y/N)", filename); + int a = sv_window_->ShowYesNoDialog(msg_str); + if (a == 'n') { + return; + } // don't write + } + + + fp = fopen(filename, "wb"); // can we write to it? + if (fp == NULL) { + sv_window_->AddMessage( + "Can't write to file " + "%s" + "", + filename); + return; + } + + for (std::map::iterator iter = vcMap.begin(); + iter != vcMap.end(); + ++iter) { + ParamContent* cur = iter->second; + if (!changes_only || cur->HasChanged()) { + fprintf(fp, "%-25s %-12s # %s\n", + cur->GetName(), cur->GetValue().string(), cur->GetDescription()); + } + } + fclose(fp); +} +#endif diff --git a/3rdparty/hgOCR/include/ccmain/paramsd.h b/3rdparty/hgOCR/include/ccmain/paramsd.h new file mode 100644 index 00000000..1fb23473 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/paramsd.h @@ -0,0 +1,126 @@ +/////////////////////////////////////////////////////////////////////// +// File: paramsd.cpp +// Description: Tesseract parameter editor +// Author: Joern Wanke +// Created: Wed Jul 18 10:05:01 PDT 2007 +// +// (C) Copyright 2007, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// +// +// Tesseract parameter editor is used to edit all the parameters used +// within tesseract from the ui. +#ifndef GRAPHICS_DISABLED +#ifndef VARABLED_H +#define VARABLED_H + +#include "elst.h" +#ifndef NO_CUBE_BUILD +#include "scrollview.h" +#endif +#include "params.h" +#include "tesseractclass.h" + +class SVMenuNode; + +// A list of all possible parameter types used. +enum ParamType { + VT_INTEGER, + VT_BOOLEAN, + VT_STRING, + VT_DOUBLE +}; + +// A rather hackish helper structure which can take any kind of parameter input +// (defined by ParamType) and do a couple of common operations on them, like +// comparisond or getting its value. It is used in the context of the +// ParamsEditor as a bridge from the internal tesseract parameters to the +// ones displayed by the ScrollView server. +class ParamContent : public ELIST_LINK { +public: + // Compare two VC objects by their name. + static int Compare(const void* v1, const void* v2); + + // Gets a VC object identified by its ID. + static ParamContent* GetParamContentById(int id); + + // Constructors for the various ParamTypes. + ParamContent() { + } + explicit ParamContent(tesseract::StringParam* it); + explicit ParamContent(tesseract::IntParam* it); + explicit ParamContent(tesseract::BoolParam* it); + explicit ParamContent(tesseract::DoubleParam* it); + + + // Getters and Setters. + void SetValue(const char* val); + STRING GetValue() const; + const char* GetName() const; + const char* GetDescription() const; + + int GetId() { return my_id_; } + bool HasChanged() { return changed_; } + +private: + // The unique ID of this VC object. + int my_id_; + // Whether the parameter was changed_ and thus needs to be rewritten. + bool changed_; + // The actual ParamType of this VC object. + ParamType param_type_; + + tesseract::StringParam* sIt; + tesseract::IntParam* iIt; + tesseract::BoolParam* bIt; + tesseract::DoubleParam* dIt; +}; + +ELISTIZEH(ParamContent) + +// The parameters editor enables the user to edit all the parameters used within +// tesseract. It can be invoked on its own, but is supposed to be invoked by +// the program editor. +class ParamsEditor : public SVEventHandler { +public: + // Integrate the parameters editor as popupmenu into the existing scrollview + // window (usually the pg editor). If sv == null, create a new empty + // empty window and attach the parameter editor to that window (ugly). + explicit ParamsEditor(tesseract::Tesseract*, ScrollView* sv = NULL); + + // Event listener. Waits for SVET_POPUP events and processes them. + void Notify(const SVEvent* sve); + +private: + // Gets the up to the first 3 prefixes from s (split by _). + // For example, tesseract_foo_bar will be split into tesseract,foo and bar. + void GetPrefixes(const char* s, STRING* level_one, + STRING* level_two, STRING* level_three); + + // Gets the first n words (split by _) and puts them in t. + // For example, tesseract_foo_bar with N=2 will yield tesseract_foo_. + void GetFirstWords(const char *s, // source string + int n, // number of words + char *t); // target string + +// Find all editable parameters used within tesseract and create a +// SVMenuNode tree from it. + SVMenuNode *BuildListOfAllLeaves(tesseract::Tesseract *tess); + + // Write all (changed_) parameters to a config file. + void WriteParams(char* filename, bool changes_only); + + ScrollView* sv_window_; +}; + +#endif +#endif diff --git a/3rdparty/hgOCR/include/ccmain/pgedit.cpp b/3rdparty/hgOCR/include/ccmain/pgedit.cpp new file mode 100644 index 00000000..79ab21f3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pgedit.cpp @@ -0,0 +1,1005 @@ +/********************************************************************** + * File: pgedit.cpp (Formerly pgeditor.c) + * Description: Page structure file editor + * Author: Phil Cheatle + * Created: Thu Oct 10 16:25:24 BST 1991 + * + *(C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0(the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http:// www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "pgedit.h" + +#include +#include + +#include "blread.h" +#include "control.h" +#include "paramsd.h" +#include "pageres.h" +#include "tordmain.h" +#include "scrollview.h" +#include "svmnode.h" +#include "statistc.h" +#include "tesseractclass.h" +#include "werdit.h" + +#ifndef GRAPHICS_DISABLED +#define ASC_HEIGHT (2 * kBlnBaselineOffset + kBlnXHeight) +#define X_HEIGHT (kBlnBaselineOffset + kBlnXHeight) +#define BL_HEIGHT kBlnBaselineOffset +#define DESC_HEIGHT 0 +#define MAXSPACING 128 /*max expected spacing in pix */ + +const ERRCODE EMPTYBLOCKLIST = "No blocks to edit"; + +enum CMD_EVENTS +{ + NULL_CMD_EVENT, + CHANGE_DISP_CMD_EVENT, + DUMP_WERD_CMD_EVENT, + SHOW_POINT_CMD_EVENT, + SHOW_BLN_WERD_CMD_EVENT, + DEBUG_WERD_CMD_EVENT, + BLAMER_CMD_EVENT, + BOUNDING_BOX_CMD_EVENT, + CORRECT_TEXT_CMD_EVENT, + POLYGONAL_CMD_EVENT, + BL_NORM_CMD_EVENT, + BITMAP_CMD_EVENT, + IMAGE_CMD_EVENT, + BLOCKS_CMD_EVENT, + BASELINES_CMD_EVENT, + UNIFORM_DISP_CMD_EVENT, + REFRESH_CMD_EVENT, + QUIT_CMD_EVENT, + RECOG_WERDS, + RECOG_PSEUDO, + SHOW_BLOB_FEATURES, + SHOW_SUBSCRIPT_CMD_EVENT, + SHOW_SUPERSCRIPT_CMD_EVENT, + SHOW_ITALIC_CMD_EVENT, + SHOW_BOLD_CMD_EVENT, + SHOW_UNDERLINE_CMD_EVENT, + SHOW_FIXEDPITCH_CMD_EVENT, + SHOW_SERIF_CMD_EVENT, + SHOW_SMALLCAPS_CMD_EVENT, + SHOW_DROPCAPS_CMD_EVENT, +}; + +enum ColorationMode { + CM_RAINBOW, + CM_SUBSCRIPT, + CM_SUPERSCRIPT, + CM_ITALIC, + CM_BOLD, + CM_UNDERLINE, + CM_FIXEDPITCH, + CM_SERIF, + CM_SMALLCAPS, + CM_DROPCAPS +}; + +/* + * + * Some global data + * + */ + +ScrollView* image_win; +ParamsEditor* pe; +bool stillRunning = false; + +#ifdef __UNIX__ +FILE *debug_window = NULL; // opened on demand +#endif +ScrollView* bln_word_window = NULL; // baseline norm words + +CMD_EVENTS mode = CHANGE_DISP_CMD_EVENT; // selected words op + +bool recog_done = false; // recog_all_words was called + +// These variables should remain global, since they are only used for the +// debug mode (in which only a single Tesseract thread/instance will be exist). +BITS16 word_display_mode; +static ColorationMode color_mode = CM_RAINBOW; +BOOL8 display_image = FALSE; +BOOL8 display_blocks = FALSE; +BOOL8 display_baselines = FALSE; + +PAGE_RES *current_page_res = NULL; + +STRING_VAR(editor_image_win_name, "EditorImage", + "Editor image window name"); +INT_VAR(editor_image_xpos, 590, "Editor image X Pos"); +INT_VAR(editor_image_ypos, 10, "Editor image Y Pos"); +INT_VAR(editor_image_menuheight, 50, "Add to image height for menu bar"); +INT_VAR(editor_image_word_bb_color, ScrollView::BLUE, + "Word bounding box colour"); +INT_VAR(editor_image_blob_bb_color, ScrollView::YELLOW, + "Blob bounding box colour"); +INT_VAR(editor_image_text_color, ScrollView::WHITE, + "Correct text colour"); + +STRING_VAR(editor_dbwin_name, "EditorDBWin", + "Editor debug window name"); +INT_VAR(editor_dbwin_xpos, 50, "Editor debug window X Pos"); +INT_VAR(editor_dbwin_ypos, 500, "Editor debug window Y Pos"); +INT_VAR(editor_dbwin_height, 24, "Editor debug window height"); +INT_VAR(editor_dbwin_width, 80, "Editor debug window width"); + +STRING_VAR(editor_word_name, "BlnWords", "BL normalized word window"); +INT_VAR(editor_word_xpos, 60, "Word window X Pos"); +INT_VAR(editor_word_ypos, 510, "Word window Y Pos"); +INT_VAR(editor_word_height, 240, "Word window height"); +INT_VAR(editor_word_width, 655, "Word window width"); + +STRING_VAR(editor_debug_config_file, "", "Config file to apply to single words"); + +class BlnEventHandler : public SVEventHandler { +public: + void Notify(const SVEvent* sv_event) { + if (sv_event->type == SVET_DESTROY) + bln_word_window = NULL; + else if (sv_event->type == SVET_CLICK) + show_point(current_page_res, sv_event->x, sv_event->y); + } +}; + +/** + * bln_word_window_handle() + * + * @return a WINDOW for the word window, creating it if necessary + */ +ScrollView* bln_word_window_handle() { // return handle + // not opened yet + if (bln_word_window == NULL) { + pgeditor_msg("Creating BLN word window..."); + bln_word_window = new ScrollView(editor_word_name.string(), + editor_word_xpos, editor_word_ypos, editor_word_width, + editor_word_height, 4000, 4000, true); + BlnEventHandler* a = new BlnEventHandler(); + bln_word_window->AddEventHandler(a); + pgeditor_msg("Creating BLN word window...Done"); + } + return bln_word_window; +} + +/** + * build_image_window() + * + * Destroy the existing image window if there is one. Work out how big the + * new window needs to be. Create it and re-display. + */ + +void build_image_window(int width, int height) { + delete image_win; + image_win = new ScrollView(editor_image_win_name.string(), + editor_image_xpos, editor_image_ypos, + width + 1, + height + editor_image_menuheight + 1, + width, + height, + true); +} + +/** + * display_bln_lines() + * + * Display normalized baseline, x-height, ascender limit and descender limit + */ + +void display_bln_lines(ScrollView* window, + ScrollView::Color colour, + float scale_factor, + float y_offset, + float minx, + float maxx) { + window->Pen(colour); + window->Line(minx, y_offset + scale_factor * DESC_HEIGHT, + maxx, y_offset + scale_factor * DESC_HEIGHT); + window->Line(minx, y_offset + scale_factor * BL_HEIGHT, + maxx, y_offset + scale_factor * BL_HEIGHT); + window->Line(minx, y_offset + scale_factor * X_HEIGHT, + maxx, y_offset + scale_factor * X_HEIGHT); + window->Line(minx, y_offset + scale_factor * ASC_HEIGHT, + maxx, y_offset + scale_factor * ASC_HEIGHT); +} + +/** + * notify() + * + * Event handler that processes incoming events, either forwarding + * them to process_cmd_win_event or process_image_event. + * + */ + +void PGEventHandler::Notify(const SVEvent* event) { + char myval = '0'; + if (event->type == SVET_POPUP) { + pe->Notify(event); + } // These are handled by ParamsEditor + else if (event->type == SVET_EXIT) { stillRunning = false; } + else if (event->type == SVET_MENU) { + if (strcmp(event->parameter, "true") == 0) { myval = 'T'; } + else if (strcmp(event->parameter, "false") == 0) { myval = 'F'; } + tess_->process_cmd_win_event(event->command_id, &myval); + } + else { + tess_->process_image_event(*event); + } +} + +/** + * build_menu() + * + * Construct the menu tree used by the command window + */ +namespace tesseract { + SVMenuNode *Tesseract::build_menu_new() { + SVMenuNode* parent_menu; + SVMenuNode* root_menu_item = new SVMenuNode(); + + SVMenuNode* modes_menu_item = root_menu_item->AddChild("MODES"); + + modes_menu_item->AddChild("Change Display", CHANGE_DISP_CMD_EVENT); + modes_menu_item->AddChild("Dump Word", DUMP_WERD_CMD_EVENT); + modes_menu_item->AddChild("Show Point", SHOW_POINT_CMD_EVENT); + modes_menu_item->AddChild("Show BL Norm Word", SHOW_BLN_WERD_CMD_EVENT); + modes_menu_item->AddChild("Config Words", DEBUG_WERD_CMD_EVENT); + modes_menu_item->AddChild("Recog Words", RECOG_WERDS); + modes_menu_item->AddChild("Recog Blobs", RECOG_PSEUDO); + modes_menu_item->AddChild("Show Blob Features", SHOW_BLOB_FEATURES); + + parent_menu = root_menu_item->AddChild("DISPLAY"); + + parent_menu->AddChild("Blamer", BLAMER_CMD_EVENT, FALSE); + parent_menu->AddChild("Bounding Boxes", BOUNDING_BOX_CMD_EVENT, FALSE); + parent_menu->AddChild("Correct Text", CORRECT_TEXT_CMD_EVENT, FALSE); + parent_menu->AddChild("Polygonal Approx", POLYGONAL_CMD_EVENT, FALSE); + parent_menu->AddChild("Baseline Normalized", BL_NORM_CMD_EVENT, FALSE); + parent_menu->AddChild("Edge Steps", BITMAP_CMD_EVENT, TRUE); + parent_menu->AddChild("Subscripts", SHOW_SUBSCRIPT_CMD_EVENT); + parent_menu->AddChild("Superscripts", SHOW_SUPERSCRIPT_CMD_EVENT); + parent_menu->AddChild("Italics", SHOW_ITALIC_CMD_EVENT); + parent_menu->AddChild("Bold", SHOW_BOLD_CMD_EVENT); + parent_menu->AddChild("Underline", SHOW_UNDERLINE_CMD_EVENT); + parent_menu->AddChild("FixedPitch", SHOW_FIXEDPITCH_CMD_EVENT); + parent_menu->AddChild("Serifs", SHOW_SERIF_CMD_EVENT); + parent_menu->AddChild("SmallCaps", SHOW_SMALLCAPS_CMD_EVENT); + parent_menu->AddChild("DropCaps", SHOW_DROPCAPS_CMD_EVENT); + + + parent_menu = root_menu_item->AddChild("OTHER"); + + parent_menu->AddChild("Quit", QUIT_CMD_EVENT); + parent_menu->AddChild("Show Image", IMAGE_CMD_EVENT, FALSE); + parent_menu->AddChild("ShowBlock Outlines", BLOCKS_CMD_EVENT, FALSE); + parent_menu->AddChild("Show Baselines", BASELINES_CMD_EVENT, FALSE); + parent_menu->AddChild("Uniform Display", UNIFORM_DISP_CMD_EVENT); + parent_menu->AddChild("Refresh Display", REFRESH_CMD_EVENT); + + return root_menu_item; + } + + /** + * do_re_display() + * + * Redisplay page + */ + void Tesseract::do_re_display( + BOOL8(tesseract::Tesseract::*word_painter)(PAGE_RES_IT* pr_it)) { + int block_count = 1; + + image_win->Clear(); + if (display_image != 0) { + image_win->Image(pix_binary_, 0, 0); + } + + image_win->Brush(ScrollView::NONE); + PAGE_RES_IT pr_it(current_page_res); + for (WERD_RES* word = pr_it.word(); word != NULL; word = pr_it.forward()) { + (this->*word_painter)(&pr_it); + if (display_baselines && pr_it.row() != pr_it.prev_row()) + pr_it.row()->row->plot_baseline(image_win, ScrollView::GREEN); + if (display_blocks && pr_it.block() != pr_it.prev_block()) + pr_it.block()->block->plot(image_win, block_count++, ScrollView::RED); + } + image_win->Update(); + } + + /** + * pgeditor_main() + * + * Top level editor operation: + * Setup a new window and an according event handler + * + */ + + void Tesseract::pgeditor_main(int width, int height, PAGE_RES *page_res) { + current_page_res = page_res; + if (current_page_res->block_res_list.empty()) + return; + + recog_done = false; + stillRunning = true; + + build_image_window(width, height); + word_display_mode.turn_on_bit(DF_EDGE_STEP); + do_re_display(&tesseract::Tesseract::word_set_display); +#ifndef GRAPHICS_DISABLED + pe = new ParamsEditor(this, image_win); +#endif + PGEventHandler pgEventHandler(this); + + image_win->AddEventHandler(&pgEventHandler); + image_win->AddMessageBox(); + + SVMenuNode* svMenuRoot = build_menu_new(); + + svMenuRoot->BuildMenu(image_win); + image_win->SetVisible(true); + + image_win->AwaitEvent(SVET_DESTROY); + image_win->AddEventHandler(NULL); + } +} // namespace tesseract + + +/** + * pgeditor_msg() + * + * Display a message - in the command window if there is one, or to stdout + */ + +void pgeditor_msg( // message display + const char *msg) { + image_win->AddMessage(msg); +} + +/** + * pgeditor_show_point() + * + * Display the coordinates of a point in the command window + */ + +void pgeditor_show_point( // display coords + SVEvent *event) { + image_win->AddMessage("Pointing at(%d, %d)", event->x, event->y); +} + +/** + * process_cmd_win_event() + * + * Process a command returned from the command window + * (Just call the appropriate command handler) + */ + +namespace tesseract { + BOOL8 Tesseract::process_cmd_win_event( // UI command semantics + inT32 cmd_event, // which menu item? + char *new_value // any prompt data + ) { + char msg[160]; + BOOL8 exit = FALSE; + + color_mode = CM_RAINBOW; + + // Run recognition on the full page if needed. + switch (cmd_event) { + case BLAMER_CMD_EVENT: + case SHOW_SUBSCRIPT_CMD_EVENT: + case SHOW_SUPERSCRIPT_CMD_EVENT: + case SHOW_ITALIC_CMD_EVENT: + case SHOW_BOLD_CMD_EVENT: + case SHOW_UNDERLINE_CMD_EVENT: + case SHOW_FIXEDPITCH_CMD_EVENT: + case SHOW_SERIF_CMD_EVENT: + case SHOW_SMALLCAPS_CMD_EVENT: + case SHOW_DROPCAPS_CMD_EVENT: + if (!recog_done) { + recog_all_words(current_page_res, NULL, NULL, NULL, 0); + recog_done = true; + } + break; + default: + break; + } + + switch (cmd_event) { + case NULL_CMD_EVENT: + break; + + case CHANGE_DISP_CMD_EVENT: + case DUMP_WERD_CMD_EVENT: + case SHOW_POINT_CMD_EVENT: + case SHOW_BLN_WERD_CMD_EVENT: + case RECOG_WERDS: + case RECOG_PSEUDO: + case SHOW_BLOB_FEATURES: + mode = (CMD_EVENTS)cmd_event; + break; + case DEBUG_WERD_CMD_EVENT: + mode = DEBUG_WERD_CMD_EVENT; + word_config_ = image_win->ShowInputDialog("Config File Name"); + break; + case BOUNDING_BOX_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_BOX); + else + word_display_mode.turn_off_bit(DF_BOX); + mode = CHANGE_DISP_CMD_EVENT; + break; + case BLAMER_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_BLAMER); + else + word_display_mode.turn_off_bit(DF_BLAMER); + do_re_display(&tesseract::Tesseract::word_display); + mode = CHANGE_DISP_CMD_EVENT; + break; + case CORRECT_TEXT_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_TEXT); + else + word_display_mode.turn_off_bit(DF_TEXT); + mode = CHANGE_DISP_CMD_EVENT; + break; + case POLYGONAL_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_POLYGONAL); + else + word_display_mode.turn_off_bit(DF_POLYGONAL); + mode = CHANGE_DISP_CMD_EVENT; + break; + case BL_NORM_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_BN_POLYGONAL); + else + word_display_mode.turn_off_bit(DF_BN_POLYGONAL); + mode = CHANGE_DISP_CMD_EVENT; + break; + case BITMAP_CMD_EVENT: + if (new_value[0] == 'T') + word_display_mode.turn_on_bit(DF_EDGE_STEP); + else + word_display_mode.turn_off_bit(DF_EDGE_STEP); + mode = CHANGE_DISP_CMD_EVENT; + break; + case UNIFORM_DISP_CMD_EVENT: + do_re_display(&tesseract::Tesseract::word_set_display); + break; + case IMAGE_CMD_EVENT: + display_image = (new_value[0] == 'T'); + do_re_display(&tesseract::Tesseract::word_display); + break; + case BLOCKS_CMD_EVENT: + display_blocks = (new_value[0] == 'T'); + do_re_display(&tesseract::Tesseract::word_display); + break; + case BASELINES_CMD_EVENT: + display_baselines = (new_value[0] == 'T'); + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_SUBSCRIPT_CMD_EVENT: + color_mode = CM_SUBSCRIPT; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_SUPERSCRIPT_CMD_EVENT: + color_mode = CM_SUPERSCRIPT; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_ITALIC_CMD_EVENT: + color_mode = CM_ITALIC; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_BOLD_CMD_EVENT: + color_mode = CM_BOLD; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_UNDERLINE_CMD_EVENT: + color_mode = CM_UNDERLINE; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_FIXEDPITCH_CMD_EVENT: + color_mode = CM_FIXEDPITCH; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_SERIF_CMD_EVENT: + color_mode = CM_SERIF; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_SMALLCAPS_CMD_EVENT: + color_mode = CM_SMALLCAPS; + do_re_display(&tesseract::Tesseract::word_display); + break; + case SHOW_DROPCAPS_CMD_EVENT: + color_mode = CM_DROPCAPS; + do_re_display(&tesseract::Tesseract::word_display); + break; + case REFRESH_CMD_EVENT: + do_re_display(&tesseract::Tesseract::word_display); + break; + case QUIT_CMD_EVENT: + exit = TRUE; + ScrollView::Exit(); + break; + + default: + sprintf(msg, "Unrecognised event " INT32FORMAT "(%s)", + cmd_event, new_value); + image_win->AddMessage(msg); + break; + } + return exit; + } + + + /** + * process_image_event() + * + * User has done something in the image window - mouse down or up. Work out + * what it is and do something with it. + * If DOWN - just remember where it was. + * If UP - for each word in the selected area do the operation defined by + * the current mode. + */ + void Tesseract::process_image_event( // action in image win + const SVEvent &event) { + // The following variable should remain static, since it is used by + // debug editor, which uses a single Tesseract instance. + static ICOORD down; + ICOORD up; + TBOX selection_box; + char msg[80]; + + switch (event.type) { + + case SVET_SELECTION: + if (event.type == SVET_SELECTION) { + down.set_x(event.x + event.x_size); + down.set_y(event.y + event.y_size); + if (mode == SHOW_POINT_CMD_EVENT) + show_point(current_page_res, event.x, event.y); + } + + up.set_x(event.x); + up.set_y(event.y); + + selection_box = TBOX(down, up); + + switch (mode) { + case CHANGE_DISP_CMD_EVENT: + process_selected_words( + current_page_res, + selection_box, + &tesseract::Tesseract::word_blank_and_set_display); + break; + case DUMP_WERD_CMD_EVENT: + process_selected_words(current_page_res, + selection_box, + &tesseract::Tesseract::word_dumper); + break; + case SHOW_BLN_WERD_CMD_EVENT: + process_selected_words(current_page_res, + selection_box, + &tesseract::Tesseract::word_bln_display); + break; + case DEBUG_WERD_CMD_EVENT: + debug_word(current_page_res, selection_box); + break; + case SHOW_POINT_CMD_EVENT: + break; // ignore up event + + case RECOG_WERDS: + image_win->AddMessage("Recogging selected words"); + this->process_selected_words(current_page_res, + selection_box, + &Tesseract::recog_interactive); + break; + case RECOG_PSEUDO: + image_win->AddMessage("Recogging selected blobs"); + recog_pseudo_word(current_page_res, selection_box); + break; + case SHOW_BLOB_FEATURES: + blob_feature_display(current_page_res, selection_box); + break; + + default: + sprintf(msg, "Mode %d not yet implemented", mode); + image_win->AddMessage(msg); + break; + } + default: + break; + } + } + + /** + * debug_word + * + * Process the whole image, but load word_config_ for the selected word(s). + */ + void Tesseract::debug_word(PAGE_RES* page_res, const TBOX &selection_box) { + ResetAdaptiveClassifier(); + recog_all_words(page_res, NULL, &selection_box, word_config_.string(), 0); + } +} // namespace tesseract + + +/** + * show_point() + * + * Show coords of point, blob bounding box, word bounding box and offset from + * row baseline + */ + +void show_point(PAGE_RES* page_res, float x, float y) { + FCOORD pt(x, y); + PAGE_RES_IT pr_it(page_res); + + const int kBufsize = 512; + char msg[kBufsize]; + char *msg_ptr = msg; + + msg_ptr += sprintf(msg_ptr, "Pt:(%0.3f, %0.3f) ", x, y); + + for (WERD_RES* word = pr_it.word(); word != NULL; word = pr_it.forward()) { + if (pr_it.row() != pr_it.prev_row() && + pr_it.row()->row->bounding_box().contains(pt)) { + msg_ptr += sprintf(msg_ptr, "BL(x)=%0.3f ", + pr_it.row()->row->base_line(x)); + } + if (word->word->bounding_box().contains(pt)) { + TBOX box = word->word->bounding_box(); + msg_ptr += sprintf(msg_ptr, "Wd(%d, %d)/(%d, %d) ", + box.left(), box.bottom(), + box.right(), box.top()); + C_BLOB_IT cblob_it(word->word->cblob_list()); + for (cblob_it.mark_cycle_pt(); + !cblob_it.cycled_list(); + cblob_it.forward()) { + C_BLOB* cblob = cblob_it.data(); + box = cblob->bounding_box(); + if (box.contains(pt)) { + msg_ptr += sprintf(msg_ptr, + "CBlb(%d, %d)/(%d, %d) ", + box.left(), box.bottom(), + box.right(), box.top()); + } + } + } + } + image_win->AddMessage(msg); +} + + +/********************************************************************** + * WERD PROCESSOR FUNCTIONS + * ======================== + * + * These routines are invoked by one or more of: + * process_all_words() + * process_selected_words() + * or + * process_all_words_it() + * process_selected_words_it() + * for each word to be processed + **********************************************************************/ + + /** + * word_blank_and_set_display() Word processor + * + * Blank display of word then redisplay word according to current display mode + * settings + */ +#endif // GRAPHICS_DISABLED +namespace tesseract { +#ifndef GRAPHICS_DISABLED + BOOL8 Tesseract::word_blank_and_set_display(PAGE_RES_IT* pr_it) { + pr_it->word()->word->bounding_box().plot(image_win, ScrollView::BLACK, + ScrollView::BLACK); + return word_set_display(pr_it); + } + + + /** + * word_bln_display() + * + * Normalize word and display in word window + */ + BOOL8 Tesseract::word_bln_display(PAGE_RES_IT* pr_it) { + WERD_RES* word_res = pr_it->word(); + if (word_res->chopped_word == NULL) { + // Setup word normalization parameters. + word_res->SetupForRecognition(unicharset, this, BestPix(), + tessedit_ocr_engine_mode, NULL, + classify_bln_numeric_mode, + textord_use_cjk_fp_model, + poly_allow_detailed_fx, + pr_it->row()->row, pr_it->block()->block); + } + bln_word_window_handle()->Clear(); + display_bln_lines(bln_word_window_handle(), ScrollView::CYAN, + 1.0, 0.0f, -1000.0f, 1000.0f); + C_BLOB_IT it(word_res->word->cblob_list()); + ScrollView::Color color = WERD::NextColor(ScrollView::BLACK); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot_normed(word_res->denorm, color, ScrollView::BROWN, + bln_word_window_handle()); + color = WERD::NextColor(color); + } + bln_word_window_handle()->Update(); + return TRUE; + } + + + + /** + * word_display() Word Processor + * + * Display a word according to its display modes + */ + BOOL8 Tesseract::word_display(PAGE_RES_IT* pr_it) { + WERD_RES* word_res = pr_it->word(); + WERD* word = word_res->word; + TBOX word_bb; // word bounding box + int word_height; // ht of word BB + BOOL8 displayed_something = FALSE; + float shift; // from bot left + C_BLOB_IT c_it; // cblob iterator + + if (color_mode != CM_RAINBOW && word_res->box_word != NULL) { + BoxWord* box_word = word_res->box_word; + WERD_CHOICE* best_choice = word_res->best_choice; + int length = box_word->length(); + if (word_res->fontinfo == NULL) return false; + const FontInfo& font_info = *word_res->fontinfo; + for (int i = 0; i < length; ++i) { + ScrollView::Color color = ScrollView::GREEN; + switch (color_mode) { + case CM_SUBSCRIPT: + if (best_choice->BlobPosition(i) == SP_SUBSCRIPT) + color = ScrollView::RED; + break; + case CM_SUPERSCRIPT: + if (best_choice->BlobPosition(i) == SP_SUPERSCRIPT) + color = ScrollView::RED; + break; + case CM_ITALIC: + if (font_info.is_italic()) + color = ScrollView::RED; + break; + case CM_BOLD: + if (font_info.is_bold()) + color = ScrollView::RED; + break; + case CM_FIXEDPITCH: + if (font_info.is_fixed_pitch()) + color = ScrollView::RED; + break; + case CM_SERIF: + if (font_info.is_serif()) + color = ScrollView::RED; + break; + case CM_SMALLCAPS: + if (word_res->small_caps) + color = ScrollView::RED; + break; + case CM_DROPCAPS: + if (best_choice->BlobPosition(i) == SP_DROPCAP) + color = ScrollView::RED; + break; + // TODO(rays) underline is currently completely unsupported. + case CM_UNDERLINE: + default: + break; + } + image_win->Pen(color); + TBOX box = box_word->BlobBox(i); + image_win->Rectangle(box.left(), box.bottom(), box.right(), box.top()); + } + return true; + } + /* + Note the double coercions of(COLOUR)((inT32)editor_image_word_bb_color) + etc. are to keep the compiler happy. + */ + // display bounding box + if (word->display_flag(DF_BOX)) { + word->bounding_box().plot(image_win, + (ScrollView::Color)((inT32) + editor_image_word_bb_color), + (ScrollView::Color)((inT32) + editor_image_word_bb_color)); + + ScrollView::Color c = (ScrollView::Color) + ((inT32)editor_image_blob_bb_color); + image_win->Pen(c); + c_it.set_to_list(word->cblob_list()); + for (c_it.mark_cycle_pt(); !c_it.cycled_list(); c_it.forward()) + c_it.data()->bounding_box().plot(image_win); + displayed_something = TRUE; + } + + // display edge steps + if (word->display_flag(DF_EDGE_STEP)) { // edgesteps available + word->plot(image_win); // rainbow colors + displayed_something = TRUE; + } + + // display poly approx + if (word->display_flag(DF_POLYGONAL)) { + // need to convert + TWERD* tword = TWERD::PolygonalCopy(poly_allow_detailed_fx, word); + tword->plot(image_win); + delete tword; + displayed_something = TRUE; + } + + // Display correct text and blamer information. + STRING text; + STRING blame; + if (word->display_flag(DF_TEXT) && word->text() != NULL) { + text = word->text(); + } + if (word->display_flag(DF_BLAMER) && + !(word_res->blamer_bundle != NULL && + word_res->blamer_bundle->incorrect_result_reason() == IRR_CORRECT)) { + text = ""; + const BlamerBundle *blamer_bundle = word_res->blamer_bundle; + if (blamer_bundle == NULL) { + text += "NULL"; + } + else { + text = blamer_bundle->TruthString(); + } + text += " -> "; + STRING best_choice_str; + if (word_res->best_choice == NULL) { + best_choice_str = "NULL"; + } + else { + word_res->best_choice->string_and_lengths(&best_choice_str, NULL); + } + text += best_choice_str; + IncorrectResultReason reason = (blamer_bundle == NULL) ? + IRR_PAGE_LAYOUT : blamer_bundle->incorrect_result_reason(); + ASSERT_HOST(reason < IRR_NUM_REASONS) + blame += " ["; + blame += BlamerBundle::IncorrectReasonName(reason); + blame += "]"; + } + if (text.length() > 0) { + word_bb = word->bounding_box(); + image_win->Pen(ScrollView::RED); + word_height = word_bb.height(); + int text_height = 0.50 * word_height; + if (text_height > 20) text_height = 20; + image_win->TextAttributes("Arial", text_height, false, false, false); + shift = (word_height < word_bb.width()) ? 0.25 * word_height : 0.0f; + image_win->Text(word_bb.left() + shift, + word_bb.bottom() + 0.25 * word_height, text.string()); + if (blame.length() > 0) { + image_win->Text(word_bb.left() + shift, + word_bb.bottom() + 0.25 * word_height - text_height, + blame.string()); + } + + displayed_something = TRUE; + } + + if (!displayed_something) // display BBox anyway + word->bounding_box().plot(image_win, + (ScrollView::Color)((inT32)editor_image_word_bb_color), + (ScrollView::Color)((inT32) + editor_image_word_bb_color)); + return TRUE; + } +#endif // GRAPHICS_DISABLED + + /** + * word_dumper() + * + * Dump members to the debug window + */ + BOOL8 Tesseract::word_dumper(PAGE_RES_IT* pr_it) { + if (pr_it->block()->block != NULL) { + tprintf("\nBlock data...\n"); + pr_it->block()->block->print(NULL, FALSE); + } + tprintf("\nRow data...\n"); + pr_it->row()->row->print(NULL); + tprintf("\nWord data...\n"); + WERD_RES* word_res = pr_it->word(); + word_res->word->print(); + if (word_res->blamer_bundle != NULL && wordrec_debug_blamer && + word_res->blamer_bundle->incorrect_result_reason() != IRR_CORRECT) { + tprintf("Current blamer debug: %s\n", + word_res->blamer_bundle->debug().string()); + } + return TRUE; + } + +#ifndef GRAPHICS_DISABLED + /** + * word_set_display() Word processor + * + * Display word according to current display mode settings + */ + BOOL8 Tesseract::word_set_display(PAGE_RES_IT* pr_it) { + WERD* word = pr_it->word()->word; + word->set_display_flag(DF_BOX, word_display_mode.bit(DF_BOX)); + word->set_display_flag(DF_TEXT, word_display_mode.bit(DF_TEXT)); + word->set_display_flag(DF_POLYGONAL, word_display_mode.bit(DF_POLYGONAL)); + word->set_display_flag(DF_EDGE_STEP, word_display_mode.bit(DF_EDGE_STEP)); + word->set_display_flag(DF_BN_POLYGONAL, + word_display_mode.bit(DF_BN_POLYGONAL)); + word->set_display_flag(DF_BLAMER, word_display_mode.bit(DF_BLAMER)); + return word_display(pr_it); + } + + // page_res is non-const because the iterator doesn't know if you are going + // to change the items it points to! Really a const here though. + void Tesseract::blob_feature_display(PAGE_RES* page_res, + const TBOX& selection_box) { + PAGE_RES_IT* it = make_pseudo_word(page_res, selection_box); + if (it != NULL) { + WERD_RES* word_res = it->word(); + word_res->x_height = it->row()->row->x_height(); + word_res->SetupForRecognition(unicharset, this, BestPix(), + tessedit_ocr_engine_mode, NULL, + classify_bln_numeric_mode, + textord_use_cjk_fp_model, + poly_allow_detailed_fx, + it->row()->row, it->block()->block); + TWERD* bln_word = word_res->chopped_word; + TBLOB* bln_blob = bln_word->blobs[0]; + INT_FX_RESULT_STRUCT fx_info; + GenericVector bl_features; + GenericVector cn_features; + Classify::ExtractFeatures(*bln_blob, classify_nonlinear_norm, &bl_features, + &cn_features, &fx_info, NULL); + // Display baseline features. + ScrollView* bl_win = CreateFeatureSpaceWindow("BL Features", 512, 0); + ClearFeatureSpaceWindow(baseline, bl_win); + for (int f = 0; f < bl_features.size(); ++f) + RenderIntFeature(bl_win, &bl_features[f], ScrollView::GREEN); + bl_win->Update(); + // Display cn features. + ScrollView* cn_win = CreateFeatureSpaceWindow("CN Features", 512, 0); + ClearFeatureSpaceWindow(character, cn_win); + for (int f = 0; f < cn_features.size(); ++f) + RenderIntFeature(cn_win, &cn_features[f], ScrollView::GREEN); + cn_win->Update(); + + it->DeleteCurrentWord(); + delete it; + } + } + + +#endif // GRAPHICS_DISABLED + +} // namespace tesseract + + + diff --git a/3rdparty/hgOCR/include/ccmain/pgedit.h b/3rdparty/hgOCR/include/ccmain/pgedit.h new file mode 100644 index 00000000..56497820 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/pgedit.h @@ -0,0 +1,87 @@ +/////////////////////////////////////////////////////////////////////// +// File: pgedit.h +// Description: Page structure file editor +// Author: Joern Wanke +// Created: Wed Jul 18 10:05:01 PDT 2007 +// +// (C) Copyright 2007, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef PGEDIT_H +#define PGEDIT_H + +#include "ocrblock.h" +#include "ocrrow.h" +#include "werd.h" +#include "rect.h" +#include "params.h" +#include "tesseractclass.h" + +class ScrollView; +class SVMenuNode; +struct SVEvent; + +// A small event handler class to process incoming events to +// this window. +class PGEventHandler : public SVEventHandler { +public: + PGEventHandler(tesseract::Tesseract* tess) : tess_(tess) { + } + void Notify(const SVEvent* sve); +private: + tesseract::Tesseract* tess_; +}; + +extern BLOCK_LIST *current_block_list; +extern STRING_VAR_H(editor_image_win_name, "EditorImage", + "Editor image window name"); +extern INT_VAR_H(editor_image_xpos, 590, "Editor image X Pos"); +extern INT_VAR_H(editor_image_ypos, 10, "Editor image Y Pos"); +extern INT_VAR_H(editor_image_height, 680, "Editor image height"); +extern INT_VAR_H(editor_image_width, 655, "Editor image width"); +extern INT_VAR_H(editor_image_word_bb_color, BLUE, + "Word bounding box colour"); +extern INT_VAR_H(editor_image_blob_bb_color, YELLOW, + "Blob bounding box colour"); +extern INT_VAR_H(editor_image_text_color, WHITE, "Correct text colour"); +extern STRING_VAR_H(editor_dbwin_name, "EditorDBWin", + "Editor debug window name"); +extern INT_VAR_H(editor_dbwin_xpos, 50, "Editor debug window X Pos"); +extern INT_VAR_H(editor_dbwin_ypos, 500, "Editor debug window Y Pos"); +extern INT_VAR_H(editor_dbwin_height, 24, "Editor debug window height"); +extern INT_VAR_H(editor_dbwin_width, 80, "Editor debug window width"); +extern STRING_VAR_H(editor_word_name, "BlnWords", + "BL normalised word window"); +extern INT_VAR_H(editor_word_xpos, 60, "Word window X Pos"); +extern INT_VAR_H(editor_word_ypos, 510, "Word window Y Pos"); +extern INT_VAR_H(editor_word_height, 240, "Word window height"); +extern INT_VAR_H(editor_word_width, 655, "Word window width"); +extern double_VAR_H(editor_smd_scale_factor, 1.0, "Scaling for smd image"); + +ScrollView* bln_word_window_handle(); //return handle +void build_image_window(int width, int height); +void display_bln_lines(ScrollView window, + ScrollView::Color colour, + float scale_factor, + float y_offset, + float minx, + float maxx); +//function to call +void pgeditor_msg( //message display + const char *msg); +void pgeditor_show_point( //display coords + SVEvent *event); +//put bln word in box +void show_point(PAGE_RES* page_res, float x, float y); + +#endif diff --git a/3rdparty/hgOCR/include/ccmain/recogtraining.cpp b/3rdparty/hgOCR/include/ccmain/recogtraining.cpp new file mode 100644 index 00000000..f40893f0 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/recogtraining.cpp @@ -0,0 +1,233 @@ +/////////////////////////////////////////////////////////////////////// +// File: recogtraining.cpp +// Description: Functions for ambiguity and parameter training. +// Author: Daria Antonova +// Created: Mon Aug 13 11:26:43 PDT 2009 +// +// (C) Copyright 2009, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "tesseractclass.h" + +#include "boxread.h" +#include "control.h" +#include "cutil.h" +#include "host.h" +#include "ratngs.h" +#include "reject.h" +#include "stopper.h" + +namespace tesseract { + + const inT16 kMaxBoxEdgeDiff = 2; + + // Sets flags necessary for recognition in the training mode. + // Opens and returns the pointer to the output file. + FILE *Tesseract::init_recog_training(const STRING &fname) { + if (tessedit_ambigs_training) { + tessedit_tess_adaption_mode.set_value(0); // turn off adaption + tessedit_enable_doc_dict.set_value(0); // turn off document dictionary + // Explore all segmentations. + getDict().stopper_no_acceptable_choices.set_value(1); + } + + STRING output_fname = fname; + const char *lastdot = strrchr(output_fname.string(), '.'); + if (lastdot != NULL) output_fname[lastdot - output_fname.string()] = '\0'; + output_fname += ".txt"; + FILE *output_file = open_file(output_fname.string(), "a+"); + return output_file; + } + + // Copies the bounding box from page_res_it->word() to the given TBOX. + bool read_t(PAGE_RES_IT *page_res_it, TBOX *tbox) { + while (page_res_it->block() != NULL && page_res_it->word() == NULL) + page_res_it->forward(); + + if (page_res_it->word() != NULL) { + *tbox = page_res_it->word()->word->bounding_box(); + + // If tbox->left() is negative, the training image has vertical text and + // all the coordinates of bounding boxes of page_res are rotated by 90 + // degrees in a counterclockwise direction. We need to rotate the TBOX back + // in order to compare with the TBOXes of box files. + if (tbox->left() < 0) { + tbox->rotate(FCOORD(0.0, -1.0)); + } + + return true; + } + else { + return false; + } + } + + // This function takes tif/box pair of files and runs recognition on the image, + // while making sure that the word bounds that tesseract identified roughly + // match to those specified by the input box file. For each word (ngram in a + // single bounding box from the input box file) it outputs the ocred result, + // the correct label, rating and certainty. + void Tesseract::recog_training_segmented(const STRING &fname, + PAGE_RES *page_res, + volatile ETEXT_DESC *monitor, + FILE *output_file) { + STRING box_fname = fname; + const char *lastdot = strrchr(box_fname.string(), '.'); + if (lastdot != NULL) box_fname[lastdot - box_fname.string()] = '\0'; + box_fname += ".box"; + // ReadNextBox() will close box_file + FILE *box_file = open_file(box_fname.string(), "r"); + + PAGE_RES_IT page_res_it; + page_res_it.page_res = page_res; + page_res_it.restart_page(); + STRING label; + + // Process all the words on this page. + TBOX tbox; // tesseract-identified box + TBOX bbox; // box from the box file + bool keep_going; + int line_number = 0; + int examined_words = 0; + do { + keep_going = read_t(&page_res_it, &tbox); + keep_going &= ReadNextBox(applybox_page, &line_number, box_file, &label, + &bbox); + // Align bottom left points of the TBOXes. + while (keep_going && + !NearlyEqual(tbox.bottom(), bbox.bottom(), kMaxBoxEdgeDiff)) { + if (bbox.bottom() < tbox.bottom()) { + page_res_it.forward(); + keep_going = read_t(&page_res_it, &tbox); + } + else { + keep_going = ReadNextBox(applybox_page, &line_number, box_file, &label, + &bbox); + } + } + while (keep_going && + !NearlyEqual(tbox.left(), bbox.left(), kMaxBoxEdgeDiff)) { + if (bbox.left() > tbox.left()) { + page_res_it.forward(); + keep_going = read_t(&page_res_it, &tbox); + } + else { + keep_going = ReadNextBox(applybox_page, &line_number, box_file, &label, + &bbox); + } + } + // OCR the word if top right points of the TBOXes are similar. + if (keep_going && + NearlyEqual(tbox.right(), bbox.right(), kMaxBoxEdgeDiff) && + NearlyEqual(tbox.top(), bbox.top(), kMaxBoxEdgeDiff)) { + ambigs_classify_and_output(label.string(), &page_res_it, output_file); + examined_words++; + } + page_res_it.forward(); + } while (keep_going); + + // Set up scripts on all of the words that did not get sent to + // ambigs_classify_and_output. They all should have, but if all the + // werd_res's don't get uch_sets, tesseract will crash when you try + // to iterate over them. :-( + int total_words = 0; + for (page_res_it.restart_page(); page_res_it.block() != NULL; + page_res_it.forward()) { + if (page_res_it.word()) { + if (page_res_it.word()->uch_set == NULL) + page_res_it.word()->SetupFake(unicharset); + total_words++; + } + } + if (examined_words < 0.85 * total_words) { + tprintf("TODO(antonova): clean up recog_training_segmented; " + " It examined only a small fraction of the ambigs image.\n"); + } + tprintf("recog_training_segmented: examined %d / %d words.\n", + examined_words, total_words); + } + + // Helper prints the given set of blob choices. + static void PrintPath(int length, const BLOB_CHOICE** blob_choices, + const UNICHARSET& unicharset, + const char *label, FILE *output_file) { + float rating = 0.0f; + float certainty = 0.0f; + for (int i = 0; i < length; ++i) { + const BLOB_CHOICE* blob_choice = blob_choices[i]; + fprintf(output_file, "%s", + unicharset.id_to_unichar(blob_choice->unichar_id())); + rating += blob_choice->rating(); + if (certainty > blob_choice->certainty()) + certainty = blob_choice->certainty(); + } + fprintf(output_file, "\t%s\t%.4f\t%.4f\n", + label, rating, certainty); + } + + // Helper recursively prints all paths through the ratings matrix, starting + // at column col. + static void PrintMatrixPaths(int col, int dim, + const MATRIX& ratings, + int length, const BLOB_CHOICE** blob_choices, + const UNICHARSET& unicharset, + const char *label, FILE *output_file) { + for (int row = col; row < dim && row - col < ratings.bandwidth(); ++row) { + if (ratings.get(col, row) != NOT_CLASSIFIED) { + BLOB_CHOICE_IT bc_it(ratings.get(col, row)); + for (bc_it.mark_cycle_pt(); !bc_it.cycled_list(); bc_it.forward()) { + blob_choices[length] = bc_it.data(); + if (row + 1 < dim) { + PrintMatrixPaths(row + 1, dim, ratings, length + 1, blob_choices, + unicharset, label, output_file); + } + else { + PrintPath(length + 1, blob_choices, unicharset, label, output_file); + } + } + } + } + } + + // Runs classify_word_pass1() on the current word. Outputs Tesseract's + // raw choice as a result of the classification. For words labeled with a + // single unichar also outputs all alternatives from blob_choices of the + // best choice. + void Tesseract::ambigs_classify_and_output(const char *label, + PAGE_RES_IT* pr_it, + FILE *output_file) { + // Classify word. + fflush(stdout); + WordData word_data(*pr_it); + SetupWordPassN(1, &word_data); + classify_word_and_language(1, pr_it, &word_data); + WERD_RES* werd_res = word_data.word; + WERD_CHOICE *best_choice = werd_res->best_choice; + ASSERT_HOST(best_choice != NULL); + + // Compute the number of unichars in the label. + GenericVector encoding; + if (!unicharset.encode_string(label, true, &encoding, NULL, NULL)) { + tprintf("Not outputting illegal unichar %s\n", label); + return; + } + + // Dump all paths through the ratings matrix (which is normally small). + int dim = werd_res->ratings->dimension(); + const BLOB_CHOICE** blob_choices = new const BLOB_CHOICE*[dim]; + PrintMatrixPaths(0, dim, *werd_res->ratings, 0, blob_choices, + unicharset, label, output_file); + delete[] blob_choices; + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/reject.cpp b/3rdparty/hgOCR/include/ccmain/reject.cpp new file mode 100644 index 00000000..b2599438 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/reject.cpp @@ -0,0 +1,798 @@ +/********************************************************************** + * File: reject.cpp (Formerly reject.c) + * Description: Rejection functions used in tessedit + * Author: Phil Cheatle + * Created: Wed Sep 23 16:50:21 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#pragma warning(disable:4305) // int/float warnings +#endif + +#include "tessvars.h" +#ifdef __UNIX__ +#include +#include +#endif +#include "scanutils.h" +#include +#include +#include "genericvector.h" +#include "reject.h" +#include "control.h" +#include "docqual.h" +#include "globaloc.h" // For err_exit. +#include "globals.h" +#include "helpers.h" + +#include "tesseractclass.h" + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +CLISTIZEH(STRING) CLISTIZE(STRING) + +/************************************************************************* + * set_done() + * + * Set the done flag based on the word acceptability criteria + *************************************************************************/ + + namespace tesseract { + void Tesseract::set_done(WERD_RES *word, inT16 pass) { + word->done = word->tess_accepted && + (strchr(word->best_choice->unichar_string().string(), ' ') == NULL); + bool word_is_ambig = word->best_choice->dangerous_ambig_found(); + bool word_from_dict = word->best_choice->permuter() == SYSTEM_DAWG_PERM || + word->best_choice->permuter() == FREQ_DAWG_PERM || + word->best_choice->permuter() == USER_DAWG_PERM; + if (word->done && (pass == 1) && (!word_from_dict || word_is_ambig) && + one_ell_conflict(word, FALSE)) { + if (tessedit_rejection_debug) tprintf("one_ell_conflict detected\n"); + word->done = FALSE; + } + if (word->done && ((!word_from_dict && + word->best_choice->permuter() != NUMBER_PERM) || word_is_ambig)) { + if (tessedit_rejection_debug) tprintf("non-dict or ambig word detected\n"); + word->done = FALSE; + } + if (tessedit_rejection_debug) { + tprintf("set_done(): done=%d\n", word->done); + word->best_choice->print(""); + } + } + + + /************************************************************************* + * make_reject_map() + * + * Sets the done flag to indicate whether the resylt is acceptable. + * + * Sets a reject map for the word. + *************************************************************************/ + void Tesseract::make_reject_map(WERD_RES *word, ROW *row, inT16 pass) { + int i; + int offset; + + flip_0O(word); + check_debug_pt(word, -1); // For trap only + set_done(word, pass); // Set acceptance + word->reject_map.initialise(word->best_choice->unichar_lengths().length()); + reject_blanks(word); + /* + 0: Rays original heuristic - the baseline + */ + if (tessedit_reject_mode == 0) { + if (!word->done) + reject_poor_matches(word); + } + else if (tessedit_reject_mode == 5) { + /* + 5: Reject I/1/l from words where there is no strong contextual confirmation; + the whole of any unacceptable words (incl PERM rej of dubious 1/I/ls); + and the whole of any words which are very small + */ + if (kBlnXHeight / word->denorm.y_scale() <= min_sane_x_ht_pixels) { + word->reject_map.rej_word_small_xht(); + } + else { + one_ell_conflict(word, TRUE); + /* + Originally the code here just used the done flag. Now I have duplicated + and unpacked the conditions for setting the done flag so that each + mechanism can be turned on or off independently. This works WITHOUT + affecting the done flag setting. + */ + if (rej_use_tess_accepted && !word->tess_accepted) + word->reject_map.rej_word_not_tess_accepted(); + + if (rej_use_tess_blanks && + (strchr(word->best_choice->unichar_string().string(), ' ') != NULL)) + word->reject_map.rej_word_contains_blanks(); + + WERD_CHOICE* best_choice = word->best_choice; + if (rej_use_good_perm) { + if ((best_choice->permuter() == SYSTEM_DAWG_PERM || + best_choice->permuter() == FREQ_DAWG_PERM || + best_choice->permuter() == USER_DAWG_PERM) && + (!rej_use_sensible_wd || + acceptable_word_string(*word->uch_set, + best_choice->unichar_string().string(), + best_choice->unichar_lengths().string()) != + AC_UNACCEPTABLE)) { + // PASSED TEST + } + else if (best_choice->permuter() == NUMBER_PERM) { + if (rej_alphas_in_number_perm) { + for (i = 0, offset = 0; + best_choice->unichar_string()[offset] != '\0'; + offset += best_choice->unichar_lengths()[i++]) { + if (word->reject_map[i].accepted() && + word->uch_set->get_isalpha( + best_choice->unichar_string().string() + offset, + best_choice->unichar_lengths()[i])) + word->reject_map[i].setrej_bad_permuter(); + // rej alpha + } + } + } + else { + word->reject_map.rej_word_bad_permuter(); + } + } + /* Ambig word rejection was here once !!*/ + } + } + else { + tprintf("BAD tessedit_reject_mode\n"); + err_exit(); + } + + if (tessedit_image_border > -1) + reject_edge_blobs(word); + + check_debug_pt(word, 10); + if (tessedit_rejection_debug) { + tprintf("Permuter Type = %d\n", word->best_choice->permuter()); + tprintf("Certainty: %f Rating: %f\n", + word->best_choice->certainty(), word->best_choice->rating()); + tprintf("Dict word: %d\n", dict_word(*(word->best_choice))); + } + + flip_hyphens(word); + check_debug_pt(word, 20); + } +} // namespace tesseract + + +void reject_blanks(WERD_RES *word) { + inT16 i; + inT16 offset; + + for (i = 0, offset = 0; word->best_choice->unichar_string()[offset] != '\0'; + offset += word->best_choice->unichar_lengths()[i], i += 1) { + if (word->best_choice->unichar_string()[offset] == ' ') + //rej unrecognised blobs + word->reject_map[i].setrej_tess_failure(); + } +} + +namespace tesseract { + void Tesseract::reject_I_1_L(WERD_RES *word) { + inT16 i; + inT16 offset; + + for (i = 0, offset = 0; word->best_choice->unichar_string()[offset] != '\0'; + offset += word->best_choice->unichar_lengths()[i], i += 1) { + if (STRING(conflict_set_I_l_1). + contains(word->best_choice->unichar_string()[offset])) { + //rej 1Il conflict + word->reject_map[i].setrej_1Il_conflict(); + } + } + } +} // namespace tesseract + + +void reject_poor_matches(WERD_RES *word) { + float threshold = compute_reject_threshold(word->best_choice); + for (int i = 0; i < word->best_choice->length(); ++i) { + if (word->best_choice->unichar_id(i) == UNICHAR_SPACE) + word->reject_map[i].setrej_tess_failure(); + else if (word->best_choice->certainty(i) < threshold) + word->reject_map[i].setrej_poor_match(); + } +} + + +/********************************************************************** + * compute_reject_threshold + * + * Set a rejection threshold for this word. + * Initially this is a trivial function which looks for the largest + * gap in the certainty value. + **********************************************************************/ + +float compute_reject_threshold(WERD_CHOICE* word) { + float threshold; // rejection threshold + float bestgap = 0.0f; // biggest gap + float gapstart; // bottom of gap + // super iterator + BLOB_CHOICE_IT choice_it; // real iterator + + int blob_count = word->length(); + GenericVector ratings; + ratings.resize_no_init(blob_count); + for (int i = 0; i < blob_count; ++i) { + ratings[i] = word->certainty(i); + } + ratings.sort(); + gapstart = ratings[0] - 1; // all reject if none better + if (blob_count >= 3) { + for (int index = 0; index < blob_count - 1; index++) { + if (ratings[index + 1] - ratings[index] > bestgap) { + bestgap = ratings[index + 1] - ratings[index]; + // find biggest + gapstart = ratings[index]; + } + } + } + threshold = gapstart + bestgap / 2; + + return threshold; +} + + +/************************************************************************* + * reject_edge_blobs() + * + * If the word is perilously close to the edge of the image, reject those blobs + * in the word which are too close to the edge as they could be clipped. + *************************************************************************/ +namespace tesseract { + void Tesseract::reject_edge_blobs(WERD_RES *word) { + TBOX word_box = word->word->bounding_box(); + // Use the box_word as it is already denormed back to image coordinates. + int blobcount = word->box_word->length(); + + if (word_box.left() < tessedit_image_border || + word_box.bottom() < tessedit_image_border || + word_box.right() + tessedit_image_border > ImageWidth() - 1 || + word_box.top() + tessedit_image_border > ImageHeight() - 1) { + ASSERT_HOST(word->reject_map.length() == blobcount); + for (int blobindex = 0; blobindex < blobcount; blobindex++) { + TBOX blob_box = word->box_word->BlobBox(blobindex); + if (blob_box.left() < tessedit_image_border || + blob_box.bottom() < tessedit_image_border || + blob_box.right() + tessedit_image_border > ImageWidth() - 1 || + blob_box.top() + tessedit_image_border > ImageHeight() - 1) { + word->reject_map[blobindex].setrej_edge_char(); + // Close to edge + } + } + } + } + + /********************************************************************** + * one_ell_conflict() + * + * Identify words where there is a potential I/l/1 error. + * - A bundle of contextual heuristics! + **********************************************************************/ + BOOL8 Tesseract::one_ell_conflict(WERD_RES *word_res, BOOL8 update_map) { + const char *word; + const char *lengths; + inT16 word_len; //its length + inT16 first_alphanum_index_; + inT16 first_alphanum_offset_; + inT16 i; + inT16 offset; + BOOL8 non_conflict_set_char; //non conf set a/n? + BOOL8 conflict = FALSE; + BOOL8 allow_1s; + ACCEPTABLE_WERD_TYPE word_type; + BOOL8 dict_perm_type; + BOOL8 dict_word_ok; + int dict_word_type; + + word = word_res->best_choice->unichar_string().string(); + lengths = word_res->best_choice->unichar_lengths().string(); + word_len = strlen(lengths); + /* + If there are no occurrences of the conflict set characters then the word + is OK. + */ + if (strpbrk(word, conflict_set_I_l_1.string()) == NULL) + return FALSE; + + /* + There is a conflict if there are NO other (confirmed) alphanumerics apart + from those in the conflict set. + */ + + for (i = 0, offset = 0, non_conflict_set_char = FALSE; + (i < word_len) && !non_conflict_set_char; offset += lengths[i++]) + non_conflict_set_char = + (word_res->uch_set->get_isalpha(word + offset, lengths[i]) || + word_res->uch_set->get_isdigit(word + offset, lengths[i])) && + !STRING(conflict_set_I_l_1).contains(word[offset]); + if (!non_conflict_set_char) { + if (update_map) + reject_I_1_L(word_res); + return TRUE; + } + + /* + If the word is accepted by a dawg permuter, and the first alpha character + is "I" or "l", check to see if the alternative is also a dawg word. If it + is, then there is a potential error otherwise the word is ok. + */ + + dict_perm_type = (word_res->best_choice->permuter() == SYSTEM_DAWG_PERM) || + (word_res->best_choice->permuter() == USER_DAWG_PERM) || + (rej_trust_doc_dawg && + (word_res->best_choice->permuter() == DOC_DAWG_PERM)) || + (word_res->best_choice->permuter() == FREQ_DAWG_PERM); + dict_word_type = dict_word(*(word_res->best_choice)); + dict_word_ok = (dict_word_type > 0) && + (rej_trust_doc_dawg || (dict_word_type != DOC_DAWG_PERM)); + + if ((rej_1Il_use_dict_word && dict_word_ok) || + (rej_1Il_trust_permuter_type && dict_perm_type) || + (dict_perm_type && dict_word_ok)) { + first_alphanum_index_ = first_alphanum_index(word, lengths); + first_alphanum_offset_ = first_alphanum_offset(word, lengths); + if (lengths[first_alphanum_index_] == 1 && + word[first_alphanum_offset_] == 'I') { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'l'; + if (safe_dict_word(word_res) > 0) { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'I'; + if (update_map) + word_res->reject_map[first_alphanum_index_]. + setrej_1Il_conflict(); + return TRUE; + } + else { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'I'; + return FALSE; + } + } + + if (lengths[first_alphanum_index_] == 1 && + word[first_alphanum_offset_] == 'l') { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'I'; + if (safe_dict_word(word_res) > 0) { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'l'; + if (update_map) + word_res->reject_map[first_alphanum_index_]. + setrej_1Il_conflict(); + return TRUE; + } + else { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'l'; + return FALSE; + } + } + return FALSE; + } + + /* + NEW 1Il code. The old code relied on permuter types too much. In fact, + tess will use TOP_CHOICE permute for good things like "palette". + In this code the string is examined independently to see if it looks like + a well formed word. + */ + + /* + REGARDLESS OF PERMUTER, see if flipping a leading I/l generates a + dictionary word. + */ + first_alphanum_index_ = first_alphanum_index(word, lengths); + first_alphanum_offset_ = first_alphanum_offset(word, lengths); + if (lengths[first_alphanum_index_] == 1 && + word[first_alphanum_offset_] == 'l') { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'I'; + if (safe_dict_word(word_res) > 0) + return FALSE; + else + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'l'; + } + else if (lengths[first_alphanum_index_] == 1 && + word[first_alphanum_offset_] == 'I') { + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'l'; + if (safe_dict_word(word_res) > 0) + return FALSE; + else + word_res->best_choice->unichar_string()[first_alphanum_offset_] = 'I'; + } + /* + For strings containing digits: + If there are no alphas OR the numeric permuter liked the word, + reject any non 1 conflict chs + Else reject all conflict chs + */ + if (word_contains_non_1_digit(word, lengths)) { + allow_1s = (alpha_count(word, lengths) == 0) || + (word_res->best_choice->permuter() == NUMBER_PERM); + + inT16 offset; + conflict = FALSE; + for (i = 0, offset = 0; word[offset] != '\0'; + offset += word_res->best_choice->unichar_lengths()[i++]) { + if ((!allow_1s || (word[offset] != '1')) && + STRING(conflict_set_I_l_1).contains(word[offset])) { + if (update_map) + word_res->reject_map[i].setrej_1Il_conflict(); + conflict = TRUE; + } + } + return conflict; + } + /* + For anything else. See if it conforms to an acceptable word type. If so, + treat accordingly. + */ + word_type = acceptable_word_string(*word_res->uch_set, word, lengths); + if ((word_type == AC_LOWER_CASE) || (word_type == AC_INITIAL_CAP)) { + first_alphanum_index_ = first_alphanum_index(word, lengths); + first_alphanum_offset_ = first_alphanum_offset(word, lengths); + if (STRING(conflict_set_I_l_1).contains(word[first_alphanum_offset_])) { + if (update_map) + word_res->reject_map[first_alphanum_index_]. + setrej_1Il_conflict(); + return TRUE; + } + else + return FALSE; + } + else if (word_type == AC_UPPER_CASE) { + return FALSE; + } + else { + if (update_map) + reject_I_1_L(word_res); + return TRUE; + } + } + + + inT16 Tesseract::first_alphanum_index(const char *word, + const char *word_lengths) { + inT16 i; + inT16 offset; + + for (i = 0, offset = 0; word[offset] != '\0'; offset += word_lengths[i++]) { + if (unicharset.get_isalpha(word + offset, word_lengths[i]) || + unicharset.get_isdigit(word + offset, word_lengths[i])) + return i; + } + return -1; + } + + inT16 Tesseract::first_alphanum_offset(const char *word, + const char *word_lengths) { + inT16 i; + inT16 offset; + + for (i = 0, offset = 0; word[offset] != '\0'; offset += word_lengths[i++]) { + if (unicharset.get_isalpha(word + offset, word_lengths[i]) || + unicharset.get_isdigit(word + offset, word_lengths[i])) + return offset; + } + return -1; + } + + inT16 Tesseract::alpha_count(const char *word, + const char *word_lengths) { + inT16 i; + inT16 offset; + inT16 count = 0; + + for (i = 0, offset = 0; word[offset] != '\0'; offset += word_lengths[i++]) { + if (unicharset.get_isalpha(word + offset, word_lengths[i])) + count++; + } + return count; + } + + + BOOL8 Tesseract::word_contains_non_1_digit(const char *word, + const char *word_lengths) { + inT16 i; + inT16 offset; + + for (i = 0, offset = 0; word[offset] != '\0'; offset += word_lengths[i++]) { + if (unicharset.get_isdigit(word + offset, word_lengths[i]) && + (word_lengths[i] != 1 || word[offset] != '1')) + return TRUE; + } + return FALSE; + } + + /************************************************************************* + * dont_allow_1Il() + * Don't unreject LONE accepted 1Il conflict set chars + *************************************************************************/ + void Tesseract::dont_allow_1Il(WERD_RES *word) { + int i = 0; + int offset; + int word_len = word->reject_map.length(); + const char *s = word->best_choice->unichar_string().string(); + const char *lengths = word->best_choice->unichar_lengths().string(); + BOOL8 accepted_1Il = FALSE; + + for (i = 0, offset = 0; i < word_len; + offset += word->best_choice->unichar_lengths()[i++]) { + if (word->reject_map[i].accepted()) { + if (STRING(conflict_set_I_l_1).contains(s[offset])) { + accepted_1Il = TRUE; + } + else { + if (word->uch_set->get_isalpha(s + offset, lengths[i]) || + word->uch_set->get_isdigit(s + offset, lengths[i])) + return; // >=1 non 1Il ch accepted + } + } + } + if (!accepted_1Il) + return; //Nothing to worry about + + for (i = 0, offset = 0; i < word_len; + offset += word->best_choice->unichar_lengths()[i++]) { + if (STRING(conflict_set_I_l_1).contains(s[offset]) && + word->reject_map[i].accepted()) + word->reject_map[i].setrej_postNN_1Il(); + } + } + + + inT16 Tesseract::count_alphanums(WERD_RES *word_res) { + int count = 0; + const WERD_CHOICE *best_choice = word_res->best_choice; + for (int i = 0; i < word_res->reject_map.length(); ++i) { + if ((word_res->reject_map[i].accepted()) && + (word_res->uch_set->get_isalpha(best_choice->unichar_id(i)) || + word_res->uch_set->get_isdigit(best_choice->unichar_id(i)))) { + count++; + } + } + return count; + } + + + // reject all if most rejected. + void Tesseract::reject_mostly_rejects(WERD_RES *word) { + /* Reject the whole of the word if the fraction of rejects exceeds a limit */ + + if ((float)word->reject_map.reject_count() / word->reject_map.length() >= + rej_whole_of_mostly_reject_word_fract) + word->reject_map.rej_word_mostly_rej(); + } + + + BOOL8 Tesseract::repeated_nonalphanum_wd(WERD_RES *word, ROW *row) { + inT16 char_quality; + inT16 accepted_char_quality; + + if (word->best_choice->unichar_lengths().length() <= 1) + return FALSE; + + if (!STRING(ok_repeated_ch_non_alphanum_wds). + contains(word->best_choice->unichar_string()[0])) + return FALSE; + + UNICHAR_ID uch_id = word->best_choice->unichar_id(0); + for (int i = 1; i < word->best_choice->length(); ++i) { + if (word->best_choice->unichar_id(i) != uch_id) return FALSE; + } + + word_char_quality(word, row, &char_quality, &accepted_char_quality); + + if ((word->best_choice->unichar_lengths().length() == char_quality) && + (char_quality == accepted_char_quality)) + return TRUE; + else + return FALSE; + } + + inT16 Tesseract::safe_dict_word(const WERD_RES *werd_res) { + const WERD_CHOICE &word = *werd_res->best_choice; + int dict_word_type = werd_res->tesseract->dict_word(word); + return dict_word_type == DOC_DAWG_PERM ? 0 : dict_word_type; + } + + // Note: After running this function word_res->ratings + // might not contain the right BLOB_CHOICE corresponding to each character + // in word_res->best_choice. + void Tesseract::flip_hyphens(WERD_RES *word_res) { + WERD_CHOICE *best_choice = word_res->best_choice; + int i; + int prev_right = -9999; + int next_left; + TBOX out_box; + float aspect_ratio; + + if (tessedit_lower_flip_hyphen <= 1) + return; + + int num_blobs = word_res->rebuild_word->NumBlobs(); + UNICHAR_ID unichar_dash = word_res->uch_set->unichar_to_id("-"); + for (i = 0; i < best_choice->length() && i < num_blobs; ++i) { + TBLOB* blob = word_res->rebuild_word->blobs[i]; + out_box = blob->bounding_box(); + if (i + 1 == num_blobs) + next_left = 9999; + else + next_left = word_res->rebuild_word->blobs[i + 1]->bounding_box().left(); + // Don't touch small or touching blobs - it is too dangerous. + if ((out_box.width() > 8 * word_res->denorm.x_scale()) && + (out_box.left() > prev_right) && (out_box.right() < next_left)) { + aspect_ratio = out_box.width() / (float)out_box.height(); + if (word_res->uch_set->eq(best_choice->unichar_id(i), ".")) { + if (aspect_ratio >= tessedit_upper_flip_hyphen && + word_res->uch_set->contains_unichar_id(unichar_dash) && + word_res->uch_set->get_enabled(unichar_dash)) { + /* Certain HYPHEN */ + best_choice->set_unichar_id(unichar_dash, i); + if (word_res->reject_map[i].rejected()) + word_res->reject_map[i].setrej_hyphen_accept(); + } + if ((aspect_ratio > tessedit_lower_flip_hyphen) && + word_res->reject_map[i].accepted()) + //Suspected HYPHEN + word_res->reject_map[i].setrej_hyphen(); + } + else if (best_choice->unichar_id(i) == unichar_dash) { + if ((aspect_ratio >= tessedit_upper_flip_hyphen) && + (word_res->reject_map[i].rejected())) + word_res->reject_map[i].setrej_hyphen_accept(); + //Certain HYPHEN + + if ((aspect_ratio <= tessedit_lower_flip_hyphen) && + (word_res->reject_map[i].accepted())) + //Suspected HYPHEN + word_res->reject_map[i].setrej_hyphen(); + } + } + prev_right = out_box.right(); + } + } + + // Note: After running this function word_res->ratings + // might not contain the right BLOB_CHOICE corresponding to each character + // in word_res->best_choice. + void Tesseract::flip_0O(WERD_RES *word_res) { + WERD_CHOICE *best_choice = word_res->best_choice; + int i; + TBOX out_box; + + if (!tessedit_flip_0O) + return; + + int num_blobs = word_res->rebuild_word->NumBlobs(); + for (i = 0; i < best_choice->length() && i < num_blobs; ++i) { + TBLOB* blob = word_res->rebuild_word->blobs[i]; + if (word_res->uch_set->get_isupper(best_choice->unichar_id(i)) || + word_res->uch_set->get_isdigit(best_choice->unichar_id(i))) { + out_box = blob->bounding_box(); + if ((out_box.top() < kBlnBaselineOffset + kBlnXHeight) || + (out_box.bottom() > kBlnBaselineOffset + kBlnXHeight / 4)) + return; //Beware words with sub/superscripts + } + } + UNICHAR_ID unichar_0 = word_res->uch_set->unichar_to_id("0"); + UNICHAR_ID unichar_O = word_res->uch_set->unichar_to_id("O"); + if (unichar_0 == INVALID_UNICHAR_ID || + !word_res->uch_set->get_enabled(unichar_0) || + unichar_O == INVALID_UNICHAR_ID || + !word_res->uch_set->get_enabled(unichar_O)) { + return; // 0 or O are not present/enabled in unicharset + } + for (i = 1; i < best_choice->length(); ++i) { + if (best_choice->unichar_id(i) == unichar_0 || + best_choice->unichar_id(i) == unichar_O) { + /* A0A */ + if ((i + 1) < best_choice->length() && + non_O_upper(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + non_O_upper(*word_res->uch_set, best_choice->unichar_id(i + 1))) { + best_choice->set_unichar_id(unichar_O, i); + } + /* A00A */ + if (non_O_upper(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (i + 1) < best_choice->length() && + (best_choice->unichar_id(i + 1) == unichar_0 || + best_choice->unichar_id(i + 1) == unichar_O) && + (i + 2) < best_choice->length() && + non_O_upper(*word_res->uch_set, best_choice->unichar_id(i + 2))) { + best_choice->set_unichar_id(unichar_O, i); + i++; + } + /* AA0 */ + if ((i > 1) && + non_O_upper(*word_res->uch_set, best_choice->unichar_id(i - 2)) && + non_O_upper(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (((i + 1) < best_choice->length() && + !word_res->uch_set->get_isdigit(best_choice->unichar_id(i + 1)) && + !word_res->uch_set->eq(best_choice->unichar_id(i + 1), "l") && + !word_res->uch_set->eq(best_choice->unichar_id(i + 1), "I")) || + (i == best_choice->length() - 1))) { + best_choice->set_unichar_id(unichar_O, i); + } + /* 9O9 */ + if (non_0_digit(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (i + 1) < best_choice->length() && + non_0_digit(*word_res->uch_set, best_choice->unichar_id(i + 1))) { + best_choice->set_unichar_id(unichar_0, i); + } + /* 9OOO */ + if (non_0_digit(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (i + 2) < best_choice->length() && + (best_choice->unichar_id(i + 1) == unichar_0 || + best_choice->unichar_id(i + 1) == unichar_O) && + (best_choice->unichar_id(i + 2) == unichar_0 || + best_choice->unichar_id(i + 2) == unichar_O)) { + best_choice->set_unichar_id(unichar_0, i); + best_choice->set_unichar_id(unichar_0, i + 1); + best_choice->set_unichar_id(unichar_0, i + 2); + i += 2; + } + /* 9OO */ + if (non_0_digit(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (i + 2) < best_choice->length() && + (best_choice->unichar_id(i + 1) == unichar_0 || + best_choice->unichar_id(i + 1) == unichar_O) && + !word_res->uch_set->get_isupper(best_choice->unichar_id(i + 2))) { + best_choice->set_unichar_id(unichar_0, i); + best_choice->set_unichar_id(unichar_0, i + 1); + i++; + } + /* 9O */ + if (non_0_digit(*word_res->uch_set, best_choice->unichar_id(i - 1)) && + (i + 1) < best_choice->length() && + !word_res->uch_set->get_isupper(best_choice->unichar_id(i + 1))) { + best_choice->set_unichar_id(unichar_0, i); + } + /* 9[.,]OOO.. */ + if ((i > 1) && + (word_res->uch_set->eq(best_choice->unichar_id(i - 1), ".") || + word_res->uch_set->eq(best_choice->unichar_id(i - 1), ",")) && + (word_res->uch_set->get_isdigit(best_choice->unichar_id(i - 2)) || + best_choice->unichar_id(i - 2) == unichar_O)) { + if (best_choice->unichar_id(i - 2) == unichar_O) { + best_choice->set_unichar_id(unichar_0, i - 2); + } + while (i < best_choice->length() && + (best_choice->unichar_id(i) == unichar_O || + best_choice->unichar_id(i) == unichar_0)) { + best_choice->set_unichar_id(unichar_0, i); + i++; + } + i--; + } + } + } + } + + BOOL8 Tesseract::non_O_upper(const UNICHARSET& ch_set, UNICHAR_ID unichar_id) { + return ch_set.get_isupper(unichar_id) && !ch_set.eq(unichar_id, "O"); + } + + BOOL8 Tesseract::non_0_digit(const UNICHARSET& ch_set, UNICHAR_ID unichar_id) { + return ch_set.get_isdigit(unichar_id) && !ch_set.eq(unichar_id, "0"); + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/reject.h b/3rdparty/hgOCR/include/ccmain/reject.h new file mode 100644 index 00000000..cffb262c --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/reject.h @@ -0,0 +1,34 @@ +/********************************************************************** + * File: reject.h (Formerly reject.h) + * Description: Rejection functions used in tessedit + * Author: Phil Cheatle + * Created: Wed Sep 23 16:50:21 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef REJECT_H +#define REJECT_H + +#include "params.h" +#include "pageres.h" + +void reject_blanks(WERD_RES *word); +void reject_poor_matches(WERD_RES *word); +float compute_reject_threshold(WERD_CHOICE* word); +BOOL8 word_contains_non_1_digit(const char *word, const char *word_lengths); +void dont_allow_1Il(WERD_RES *word); +void flip_hyphens(WERD_RES *word); +void flip_0O(WERD_RES *word); +BOOL8 non_0_digit(const char* str, int length); +#endif diff --git a/3rdparty/hgOCR/include/ccmain/resultiterator.cpp b/3rdparty/hgOCR/include/ccmain/resultiterator.cpp new file mode 100644 index 00000000..105cc78a --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/resultiterator.cpp @@ -0,0 +1,683 @@ +/////////////////////////////////////////////////////////////////////// +// File: resultiterator.cpp +// Description: Iterator for tesseract results that is capable of +// iterating in proper reading order over Bi Directional +// (e.g. mixed Hebrew and English) text. +// Author: David Eger +// Created: Fri May 27 13:58:06 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "resultiterator.h" + +#include "allheaders.h" +#include "pageres.h" +#include "strngs.h" +#include "tesseractclass.h" +#include "unicharset.h" +#include "unicodes.h" + +namespace tesseract { + + ResultIterator::ResultIterator(const LTRResultIterator &resit) + : LTRResultIterator(resit) { + in_minor_direction_ = false; + at_beginning_of_minor_run_ = false; + preserve_interword_spaces_ = false; + + BoolParam *p = ParamUtils::FindParam( + "preserve_interword_spaces", GlobalParams()->bool_params, + tesseract_->params()->bool_params); + if (p != NULL) preserve_interword_spaces_ = (bool)(*p); + + current_paragraph_is_ltr_ = CurrentParagraphIsLtr(); + MoveToLogicalStartOfTextline(); + } + + ResultIterator *ResultIterator::StartOfParagraph( + const LTRResultIterator &resit) { + return new ResultIterator(resit); + } + + bool ResultIterator::ParagraphIsLtr() const { + return current_paragraph_is_ltr_; + } + + bool ResultIterator::CurrentParagraphIsLtr() const { + if (!it_->word()) + return true; // doesn't matter. + LTRResultIterator it(*this); + it.RestartParagraph(); + // Try to figure out the ltr-ness of the paragraph. The rules below + // make more sense in the context of a difficult paragraph example. + // Here we denote {ltr characters, RTL CHARACTERS}: + // + // "don't go in there!" DAIS EH + // EHT OTNI DEPMUJ FELSMIH NEHT DNA + // .GNIDLIUB GNINRUB + // + // On the first line, the left-most word is LTR and the rightmost word + // is RTL. Thus, we are better off taking the majority direction for + // the whole paragraph contents. So instead of "the leftmost word is LTR" + // indicating an LTR paragraph, we use a heuristic about what RTL paragraphs + // would not do: Typically an RTL paragraph would *not* start with an LTR + // word. So our heuristics are as follows: + // + // (1) If the first text line has an RTL word in the left-most position + // it is RTL. + // (2) If the first text line has an LTR word in the right-most position + // it is LTR. + // (3) If neither of the above is true, take the majority count for the + // paragraph -- if there are more rtl words, it is RTL. If there + // are more LTR words, it's LTR. + bool leftmost_rtl = it.WordDirection() == DIR_RIGHT_TO_LEFT; + bool rightmost_ltr = it.WordDirection() == DIR_LEFT_TO_RIGHT; + int num_ltr, num_rtl; + num_rtl = leftmost_rtl ? 1 : 0; + num_ltr = (it.WordDirection() == DIR_LEFT_TO_RIGHT) ? 1 : 0; + for (it.Next(RIL_WORD); + !it.Empty(RIL_WORD) && !it.IsAtBeginningOf(RIL_TEXTLINE); + it.Next(RIL_WORD)) { + StrongScriptDirection dir = it.WordDirection(); + rightmost_ltr = (dir == DIR_LEFT_TO_RIGHT); + num_rtl += (dir == DIR_RIGHT_TO_LEFT) ? 1 : 0; + num_ltr += rightmost_ltr ? 1 : 0; + } + if (leftmost_rtl) + return false; + if (rightmost_ltr) + return true; + // First line is ambiguous. Take statistics on the whole paragraph. + if (!it.Empty(RIL_WORD) && !it.IsAtBeginningOf(RIL_PARA)) do { + StrongScriptDirection dir = it.WordDirection(); + num_rtl += (dir == DIR_RIGHT_TO_LEFT) ? 1 : 0; + num_ltr += (dir == DIR_LEFT_TO_RIGHT) ? 1 : 0; + } while (it.Next(RIL_WORD) && !it.IsAtBeginningOf(RIL_PARA)); + return num_ltr >= num_rtl; + } + + const int ResultIterator::kMinorRunStart = -1; + const int ResultIterator::kMinorRunEnd = -2; + const int ResultIterator::kComplexWord = -3; + + void ResultIterator::CalculateBlobOrder( + GenericVector *blob_indices) const { + bool context_is_ltr = current_paragraph_is_ltr_ ^ in_minor_direction_; + blob_indices->clear(); + if (Empty(RIL_WORD)) return; + if (context_is_ltr || it_->word()->UnicharsInReadingOrder()) { + // Easy! just return the blobs in order; + for (int i = 0; i < word_length_; i++) + blob_indices->push_back(i); + return; + } + + // The blobs are in left-to-right order, but the current reading context + // is right-to-left. + const int U_LTR = UNICHARSET::U_LEFT_TO_RIGHT; + const int U_RTL = UNICHARSET::U_RIGHT_TO_LEFT; + const int U_EURO_NUM = UNICHARSET::U_EUROPEAN_NUMBER; + const int U_EURO_NUM_SEP = UNICHARSET::U_EUROPEAN_NUMBER_SEPARATOR; + const int U_EURO_NUM_TERM = UNICHARSET::U_EUROPEAN_NUMBER_TERMINATOR; + const int U_COMMON_NUM_SEP = UNICHARSET::U_COMMON_NUMBER_SEPARATOR; + const int U_OTHER_NEUTRAL = UNICHARSET::U_OTHER_NEUTRAL; + + // Step 1: Scan for and mark European Number sequences + // [:ET:]*[:EN:]+(([:ES:]|[:CS:])?[:EN:]+)*[:ET:]* + GenericVector letter_types; + for (int i = 0; i < word_length_; i++) { + letter_types.push_back(it_->word()->SymbolDirection(i)); + } + // Convert a single separtor sandwiched between two EN's into an EN. + for (int i = 0; i + 2 < word_length_; i++) { + if (letter_types[i] == U_EURO_NUM && letter_types[i + 2] == U_EURO_NUM && + (letter_types[i + 1] == U_EURO_NUM_SEP || + letter_types[i + 1] == U_COMMON_NUM_SEP)) { + letter_types[i + 1] = U_EURO_NUM; + } + } + // Scan for sequences of European Number Terminators around ENs and convert + // them to ENs. + for (int i = 0; i < word_length_; i++) { + if (letter_types[i] == U_EURO_NUM_TERM) { + int j = i + 1; + while (j < word_length_ && letter_types[j] == U_EURO_NUM_TERM) { j++; } + if (j < word_length_ && letter_types[j] == U_EURO_NUM) { + // The sequence [i..j] should be converted to all European Numbers. + for (int k = i; k < j; k++) letter_types[k] = U_EURO_NUM; + } + j = i - 1; + while (j > -1 && letter_types[j] == U_EURO_NUM_TERM) { j--; } + if (j > -1 && letter_types[j] == U_EURO_NUM) { + // The sequence [j..i] should be converted to all European Numbers. + for (int k = j; k <= i; k++) letter_types[k] = U_EURO_NUM; + } + } + } + // Step 2: Convert all remaining types to either L or R. + // Sequences ([:L:]|[:EN:])+ (([:CS:]|[:ON:])+ ([:L:]|[:EN:])+)* -> L. + // All other are R. + for (int i = 0; i < word_length_;) { + int ti = letter_types[i]; + if (ti == U_LTR || ti == U_EURO_NUM) { + // Left to right sequence; scan to the end of it. + int last_good = i; + for (int j = i + 1; j < word_length_; j++) { + int tj = letter_types[j]; + if (tj == U_LTR || tj == U_EURO_NUM) { + last_good = j; + } + else if (tj == U_COMMON_NUM_SEP || tj == U_OTHER_NEUTRAL) { + // do nothing. + } + else { + break; + } + } + // [i..last_good] is the L sequence + for (int k = i; k <= last_good; k++) letter_types[k] = U_LTR; + i = last_good + 1; + } + else { + letter_types[i] = U_RTL; + i++; + } + } + + // At this point, letter_types is entirely U_LTR or U_RTL. + for (int i = word_length_ - 1; i >= 0;) { + if (letter_types[i] == U_RTL) { + blob_indices->push_back(i); + i--; + } + else { + // left to right sequence. scan to the beginning. + int j = i - 1; + for (; j >= 0 && letter_types[j] != U_RTL; j--) {} // pass + // Now (j, i] is LTR + for (int k = j + 1; k <= i; k++) blob_indices->push_back(k); + i = j; + } + } + ASSERT_HOST(blob_indices->size() == word_length_); + } + + static void PrintScriptDirs(const GenericVector &dirs) { + for (int i = 0; i < dirs.size(); i++) { + switch (dirs[i]) { + case DIR_NEUTRAL: tprintf("N "); break; + case DIR_LEFT_TO_RIGHT: tprintf("L "); break; + case DIR_RIGHT_TO_LEFT: tprintf("R "); break; + case DIR_MIX: tprintf("Z "); break; + default: tprintf("? "); break; + } + } + tprintf("\n"); + } + + void ResultIterator::CalculateTextlineOrder( + bool paragraph_is_ltr, + const LTRResultIterator &resit, + GenericVectorEqEq *word_indices) const { + GenericVector directions; + CalculateTextlineOrder(paragraph_is_ltr, resit, &directions, word_indices); + } + + void ResultIterator::CalculateTextlineOrder( + bool paragraph_is_ltr, + const LTRResultIterator &resit, + GenericVector *dirs_arg, + GenericVectorEqEq *word_indices) const { + GenericVector dirs; + GenericVector *directions; + directions = (dirs_arg != NULL) ? dirs_arg : &dirs; + directions->truncate(0); + + // A LTRResultIterator goes strictly left-to-right word order. + LTRResultIterator ltr_it(resit); + ltr_it.RestartRow(); + if (ltr_it.Empty(RIL_WORD)) return; + do { + directions->push_back(ltr_it.WordDirection()); + } while (ltr_it.Next(RIL_WORD) && !ltr_it.IsAtBeginningOf(RIL_TEXTLINE)); + + word_indices->truncate(0); + CalculateTextlineOrder(paragraph_is_ltr, *directions, word_indices); + } + + void ResultIterator::CalculateTextlineOrder( + bool paragraph_is_ltr, + const GenericVector &word_dirs, + GenericVectorEqEq *reading_order) { + reading_order->truncate(0); + if (word_dirs.size() == 0) return; + + // Take all of the runs of minor direction words and insert them + // in reverse order. + int minor_direction, major_direction, major_step, start, end; + if (paragraph_is_ltr) { + start = 0; + end = word_dirs.size(); + major_step = 1; + major_direction = DIR_LEFT_TO_RIGHT; + minor_direction = DIR_RIGHT_TO_LEFT; + } + else { + start = word_dirs.size() - 1; + end = -1; + major_step = -1; + major_direction = DIR_RIGHT_TO_LEFT; + minor_direction = DIR_LEFT_TO_RIGHT; + // Special rule: if there are neutral words at the right most side + // of a line adjacent to a left-to-right word in the middle of the + // line, we interpret the end of the line as a single LTR sequence. + if (word_dirs[start] == DIR_NEUTRAL) { + int neutral_end = start; + while (neutral_end > 0 && word_dirs[neutral_end] == DIR_NEUTRAL) { + neutral_end--; + } + if (neutral_end >= 0 && word_dirs[neutral_end] == DIR_LEFT_TO_RIGHT) { + // LTR followed by neutrals. + // Scan for the beginning of the minor left-to-right run. + int left = neutral_end; + for (int i = left; i >= 0 && word_dirs[i] != DIR_RIGHT_TO_LEFT; i--) { + if (word_dirs[i] == DIR_LEFT_TO_RIGHT) left = i; + } + reading_order->push_back(kMinorRunStart); + for (int i = left; i < word_dirs.size(); i++) { + reading_order->push_back(i); + if (word_dirs[i] == DIR_MIX) reading_order->push_back(kComplexWord); + } + reading_order->push_back(kMinorRunEnd); + start = left - 1; + } + } + } + for (int i = start; i != end;) { + if (word_dirs[i] == minor_direction) { + int j = i; + while (j != end && word_dirs[j] != major_direction) + j += major_step; + if (j == end) j -= major_step; + while (j != i && word_dirs[j] != minor_direction) + j -= major_step; + // [j..i] is a minor direction run. + reading_order->push_back(kMinorRunStart); + for (int k = j; k != i; k -= major_step) { + reading_order->push_back(k); + } + reading_order->push_back(i); + reading_order->push_back(kMinorRunEnd); + i = j + major_step; + } + else { + reading_order->push_back(i); + if (word_dirs[i] == DIR_MIX) reading_order->push_back(kComplexWord); + i += major_step; + } + } + } + + int ResultIterator::LTRWordIndex() const { + int this_word_index = 0; + LTRResultIterator textline(*this); + textline.RestartRow(); + while (!textline.PositionedAtSameWord(it_)) { + this_word_index++; + textline.Next(RIL_WORD); + } + return this_word_index; + } + + void ResultIterator::MoveToLogicalStartOfWord() { + if (word_length_ == 0) { + BeginWord(0); + return; + } + GenericVector blob_order; + CalculateBlobOrder(&blob_order); + if (blob_order.size() == 0 || blob_order[0] == 0) return; + BeginWord(blob_order[0]); + } + + bool ResultIterator::IsAtFinalSymbolOfWord() const { + if (!it_->word()) return true; + GenericVector blob_order; + CalculateBlobOrder(&blob_order); + return blob_order.size() == 0 || blob_order.back() == blob_index_; + } + + bool ResultIterator::IsAtFirstSymbolOfWord() const { + if (!it_->word()) return true; + GenericVector blob_order; + CalculateBlobOrder(&blob_order); + return blob_order.size() == 0 || blob_order[0] == blob_index_; + } + + void ResultIterator::AppendSuffixMarks(STRING *text) const { + if (!it_->word()) return; + bool reading_direction_is_ltr = + current_paragraph_is_ltr_ ^ in_minor_direction_; + // scan forward to see what meta-information the word ordering algorithm + // left us. + // If this word is at the *end* of a minor run, insert the other + // direction's mark; else if this was a complex word, insert the + // current reading order's mark. + GenericVectorEqEq textline_order; + CalculateTextlineOrder(current_paragraph_is_ltr_, + *this, &textline_order); + int this_word_index = LTRWordIndex(); + int i = textline_order.get_index(this_word_index); + if (i < 0) return; + + int last_non_word_mark = 0; + for (i++; i < textline_order.size() && textline_order[i] < 0; i++) { + last_non_word_mark = textline_order[i]; + } + if (last_non_word_mark == kComplexWord) { + *text += reading_direction_is_ltr ? kLRM : kRLM; + } + else if (last_non_word_mark == kMinorRunEnd) { + if (current_paragraph_is_ltr_) { + *text += kLRM; + } + else { + *text += kRLM; + } + } + } + + void ResultIterator::MoveToLogicalStartOfTextline() { + GenericVectorEqEq word_indices; + RestartRow(); + CalculateTextlineOrder(current_paragraph_is_ltr_, + dynamic_cast(*this), + &word_indices); + int i = 0; + for (; i < word_indices.size() && word_indices[i] < 0; i++) { + if (word_indices[i] == kMinorRunStart) in_minor_direction_ = true; + else if (word_indices[i] == kMinorRunEnd) in_minor_direction_ = false; + } + if (in_minor_direction_) at_beginning_of_minor_run_ = true; + if (i >= word_indices.size()) return; + int first_word_index = word_indices[i]; + for (int j = 0; j < first_word_index; j++) { + PageIterator::Next(RIL_WORD); + } + MoveToLogicalStartOfWord(); + } + + void ResultIterator::Begin() { + LTRResultIterator::Begin(); + current_paragraph_is_ltr_ = CurrentParagraphIsLtr(); + in_minor_direction_ = false; + at_beginning_of_minor_run_ = false; + MoveToLogicalStartOfTextline(); + } + + bool ResultIterator::Next(PageIteratorLevel level) { + if (it_->block() == NULL) return false; // already at end! + switch (level) { + case RIL_BLOCK: // explicit fall-through + case RIL_PARA: // explicit fall-through + case RIL_TEXTLINE: + if (!PageIterator::Next(level)) return false; + if (IsWithinFirstTextlineOfParagraph()) { + // if we've advanced to a new paragraph, + // recalculate current_paragraph_is_ltr_ + current_paragraph_is_ltr_ = CurrentParagraphIsLtr(); + } + in_minor_direction_ = false; + MoveToLogicalStartOfTextline(); + return it_->block() != NULL; + case RIL_SYMBOL: + { + GenericVector blob_order; + CalculateBlobOrder(&blob_order); + int next_blob = 0; + while (next_blob < blob_order.size() && + blob_index_ != blob_order[next_blob]) + next_blob++; + next_blob++; + if (next_blob < blob_order.size()) { + // we're in the same word; simply advance one blob. + BeginWord(blob_order[next_blob]); + at_beginning_of_minor_run_ = false; + return true; + } + level = RIL_WORD; // we've fallen through to the next word. + } + case RIL_WORD: // explicit fall-through. + { + if (it_->word() == NULL) return Next(RIL_BLOCK); + GenericVectorEqEq word_indices; + int this_word_index = LTRWordIndex(); + CalculateTextlineOrder(current_paragraph_is_ltr_, + *this, + &word_indices); + int final_real_index = word_indices.size() - 1; + while (final_real_index > 0 && word_indices[final_real_index] < 0) + final_real_index--; + for (int i = 0; i < final_real_index; i++) { + if (word_indices[i] == this_word_index) { + int j = i + 1; + for (; j < final_real_index && word_indices[j] < 0; j++) { + if (word_indices[j] == kMinorRunStart) in_minor_direction_ = true; + if (word_indices[j] == kMinorRunEnd) in_minor_direction_ = false; + } + at_beginning_of_minor_run_ = (word_indices[j - 1] == kMinorRunStart); + // awesome, we move to word_indices[j] + if (BidiDebug(3)) { + tprintf("Next(RIL_WORD): %d -> %d\n", + this_word_index, word_indices[j]); + } + PageIterator::RestartRow(); + for (int k = 0; k < word_indices[j]; k++) { + PageIterator::Next(RIL_WORD); + } + MoveToLogicalStartOfWord(); + return true; + } + } + if (BidiDebug(3)) { + tprintf("Next(RIL_WORD): %d -> EOL\n", this_word_index); + } + // we're going off the end of the text line. + return Next(RIL_TEXTLINE); + } + } + ASSERT_HOST(false); // shouldn't happen. + return false; + } + + bool ResultIterator::IsAtBeginningOf(PageIteratorLevel level) const { + if (it_->block() == NULL) return false; // Already at the end! + if (it_->word() == NULL) return true; // In an image block. + if (level == RIL_SYMBOL) return true; // Always at beginning of a symbol. + + bool at_word_start = IsAtFirstSymbolOfWord(); + if (level == RIL_WORD) return at_word_start; + + ResultIterator line_start(*this); + // move to the first word in the line... + line_start.MoveToLogicalStartOfTextline(); + + bool at_textline_start = at_word_start && *line_start.it_ == *it_; + if (level == RIL_TEXTLINE) return at_textline_start; + + // now we move to the left-most word... + line_start.RestartRow(); + bool at_block_start = at_textline_start && + line_start.it_->block() != line_start.it_->prev_block(); + if (level == RIL_BLOCK) return at_block_start; + + bool at_para_start = at_block_start || + (at_textline_start && + line_start.it_->row()->row->para() != + line_start.it_->prev_row()->row->para()); + if (level == RIL_PARA) return at_para_start; + + ASSERT_HOST(false); // shouldn't happen. + return false; + } + + /** + * NOTE! This is an exact copy of PageIterator::IsAtFinalElement with the + * change that the variable next is now a ResultIterator instead of a + * PageIterator. + */ + bool ResultIterator::IsAtFinalElement(PageIteratorLevel level, + PageIteratorLevel element) const { + if (Empty(element)) return true; // Already at the end! + // The result is true if we step forward by element and find we are + // at the the end of the page or at beginning of *all* levels in: + // [level, element). + // When there is more than one level difference between element and level, + // we could for instance move forward one symbol and still be at the first + // word on a line, so we also have to be at the first symbol in a word. + ResultIterator next(*this); + next.Next(element); + if (next.Empty(element)) return true; // Reached the end of the page. + while (element > level) { + element = static_cast(element - 1); + if (!next.IsAtBeginningOf(element)) + return false; + } + return true; + } + + /** + * Returns the null terminated UTF-8 encoded text string for the current + * object at the given level. Use delete [] to free after use. + */ + char* ResultIterator::GetUTF8Text(PageIteratorLevel level) const { + if (it_->word() == NULL) return NULL; // Already at the end! + STRING text; + switch (level) { + case RIL_BLOCK: + { + ResultIterator pp(*this); + do { + pp.AppendUTF8ParagraphText(&text); + } while (pp.Next(RIL_PARA) && pp.it_->block() == it_->block()); + } + break; + case RIL_PARA: + AppendUTF8ParagraphText(&text); + break; + case RIL_TEXTLINE: + { + ResultIterator it(*this); + it.MoveToLogicalStartOfTextline(); + it.IterateAndAppendUTF8TextlineText(&text); + } + break; + case RIL_WORD: + AppendUTF8WordText(&text); + break; + case RIL_SYMBOL: + { + bool reading_direction_is_ltr = + current_paragraph_is_ltr_ ^ in_minor_direction_; + if (at_beginning_of_minor_run_) { + text += reading_direction_is_ltr ? kLRM : kRLM; + } + text = it_->word()->BestUTF8(blob_index_, !reading_direction_is_ltr); + if (IsAtFinalSymbolOfWord()) AppendSuffixMarks(&text); + } + break; + } + int length = text.length() + 1; + char* result = new char[length]; + strncpy(result, text.string(), length); + return result; + } + + void ResultIterator::AppendUTF8WordText(STRING *text) const { + if (!it_->word()) return; + ASSERT_HOST(it_->word()->best_choice != NULL); + bool reading_direction_is_ltr = + current_paragraph_is_ltr_ ^ in_minor_direction_; + if (at_beginning_of_minor_run_) { + *text += reading_direction_is_ltr ? kLRM : kRLM; + } + + GenericVector blob_order; + CalculateBlobOrder(&blob_order); + for (int i = 0; i < blob_order.size(); i++) { + *text += it_->word()->BestUTF8(blob_order[i], !reading_direction_is_ltr); + } + AppendSuffixMarks(text); + } + + void ResultIterator::IterateAndAppendUTF8TextlineText(STRING *text) { + if (Empty(RIL_WORD)) { + Next(RIL_WORD); + return; + } + if (BidiDebug(1)) { + GenericVectorEqEq textline_order; + GenericVector dirs; + CalculateTextlineOrder(current_paragraph_is_ltr_, + *this, &dirs, &textline_order); + tprintf("Strong Script dirs [%p/P=%s]: ", it_->row(), + current_paragraph_is_ltr_ ? "ltr" : "rtl"); + PrintScriptDirs(dirs); + tprintf("Logical textline order [%p/P=%s]: ", it_->row(), + current_paragraph_is_ltr_ ? "ltr" : "rtl"); + for (int i = 0; i < textline_order.size(); i++) { + tprintf("%d ", textline_order[i]); + } + tprintf("\n"); + } + + int words_appended = 0; + do { + int numSpaces = preserve_interword_spaces_ ? it_->word()->word->space() + : (words_appended > 0); + for (int i = 0; i < numSpaces; ++i) { + *text += " "; + } + AppendUTF8WordText(text); + words_appended++; + } while (Next(RIL_WORD) && !IsAtBeginningOf(RIL_TEXTLINE)); + if (BidiDebug(1)) { + tprintf("%d words printed\n", words_appended); + } + *text += line_separator_; + // If we just finished a paragraph, add an extra newline. + if (it_->block() == NULL || IsAtBeginningOf(RIL_PARA)) + *text += paragraph_separator_; + } + + void ResultIterator::AppendUTF8ParagraphText(STRING *text) const { + ResultIterator it(*this); + it.RestartParagraph(); + it.MoveToLogicalStartOfTextline(); + if (it.Empty(RIL_WORD)) return; + do { + it.IterateAndAppendUTF8TextlineText(text); + } while (it.it_->block() != NULL && !it.IsAtBeginningOf(RIL_PARA)); + } + + bool ResultIterator::BidiDebug(int min_level) const { + int debug_level = 1; + IntParam *p = ParamUtils::FindParam( + "bidi_debug", GlobalParams()->int_params, + tesseract_->params()->int_params); + if (p != NULL) debug_level = (inT32)(*p); + return debug_level >= min_level; + } + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccmain/resultiterator.h b/3rdparty/hgOCR/include/ccmain/resultiterator.h new file mode 100644 index 00000000..296d4e45 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/resultiterator.h @@ -0,0 +1,244 @@ +/////////////////////////////////////////////////////////////////////// +// File: resultiterator.h +// Description: Iterator for tesseract results that is capable of +// iterating in proper reading order over Bi Directional +// (e.g. mixed Hebrew and English) text. +// Author: David Eger +// Created: Fri May 27 13:58:06 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_RESULT_ITERATOR_H__ +#define TESSERACT_CCMAIN_RESULT_ITERATOR_H__ + +#include "platform.h" +#include "ltrresultiterator.h" + +template class GenericVector; +template class GenericVectorEqEq; +class BLOB_CHOICE_IT; +class WERD_RES; +class STRING; + +namespace tesseract { + + class Tesseract; + + class TESS_API ResultIterator : public LTRResultIterator { + public: + static ResultIterator *StartOfParagraph(const LTRResultIterator &resit); + + /** + * ResultIterator is copy constructible! + * The default copy constructor works just fine for us. + */ + virtual ~ResultIterator() {} + + // ============= Moving around within the page ============. + /** + * Moves the iterator to point to the start of the page to begin + * an iteration. + */ + virtual void Begin(); + + /** + * Moves to the start of the next object at the given level in the + * page hierarchy in the appropriate reading order and returns false if + * the end of the page was reached. + * NOTE that RIL_SYMBOL will skip non-text blocks, but all other + * PageIteratorLevel level values will visit each non-text block once. + * Think of non text blocks as containing a single para, with a single line, + * with a single imaginary word. + * Calls to Next with different levels may be freely intermixed. + * This function iterates words in right-to-left scripts correctly, if + * the appropriate language has been loaded into Tesseract. + */ + virtual bool Next(PageIteratorLevel level); + + /** + * IsAtBeginningOf() returns whether we're at the logical beginning of the + * given level. (as opposed to ResultIterator's left-to-right top-to-bottom + * order). Otherwise, this acts the same as PageIterator::IsAtBeginningOf(). + * For a full description, see pageiterator.h + */ + virtual bool IsAtBeginningOf(PageIteratorLevel level) const; + + /** + * Implement PageIterator's IsAtFinalElement correctly in a BiDi context. + * For instance, IsAtFinalElement(RIL_PARA, RIL_WORD) returns whether we + * point at the last word in a paragraph. See PageIterator for full comment. + */ + virtual bool IsAtFinalElement(PageIteratorLevel level, + PageIteratorLevel element) const; + + // ============= Accessing data ==============. + + /** + * Returns the null terminated UTF-8 encoded text string for the current + * object at the given level. Use delete [] to free after use. + */ + virtual char* GetUTF8Text(PageIteratorLevel level) const; + + /** + * Return whether the current paragraph's dominant reading direction + * is left-to-right (as opposed to right-to-left). + */ + bool ParagraphIsLtr() const; + + // ============= Exposed only for testing =============. + + /** + * Yields the reading order as a sequence of indices and (optional) + * meta-marks for a set of words (given left-to-right). + * The meta marks are passed as negative values: + * kMinorRunStart Start of minor direction text. + * kMinorRunEnd End of minor direction text. + * kComplexWord The next indexed word contains both left-to-right and + * right-to-left characters and was treated as neutral. + * + * For example, suppose we have five words in a text line, + * indexed [0,1,2,3,4] from the leftmost side of the text line. + * The following are all believable reading_orders: + * + * Left-to-Right (in ltr paragraph): + * { 0, 1, 2, 3, 4 } + * Left-to-Right (in rtl paragraph): + * { kMinorRunStart, 0, 1, 2, 3, 4, kMinorRunEnd } + * Right-to-Left (in rtl paragraph): + * { 4, 3, 2, 1, 0 } + * Left-to-Right except for an RTL phrase in words 2, 3 in an ltr paragraph: + * { 0, 1, kMinorRunStart, 3, 2, kMinorRunEnd, 4 } + */ + static void CalculateTextlineOrder( + bool paragraph_is_ltr, + const GenericVector &word_dirs, + GenericVectorEqEq *reading_order); + + static const int kMinorRunStart; + static const int kMinorRunEnd; + static const int kComplexWord; + + protected: + /** + * We presume the data associated with the given iterator will outlive us. + * NB: This is private because it does something that is non-obvious: + * it resets to the beginning of the paragraph instead of staying wherever + * resit might have pointed. + */ + TESS_LOCAL explicit ResultIterator(const LTRResultIterator &resit); + + private: + /** + * Calculates the current paragraph's dominant writing direction. + * Typically, members should use current_paragraph_ltr_ instead. + */ + bool CurrentParagraphIsLtr() const; + + /** + * Returns word indices as measured from resit->RestartRow() = index 0 + * for the reading order of words within a textline given an iterator + * into the middle of the text line. + * In addition to non-negative word indices, the following negative values + * may be inserted: + * kMinorRunStart Start of minor direction text. + * kMinorRunEnd End of minor direction text. + * kComplexWord The previous word contains both left-to-right and + * right-to-left characters and was treated as neutral. + */ + void CalculateTextlineOrder(bool paragraph_is_ltr, + const LTRResultIterator &resit, + GenericVectorEqEq *indices) const; + /** Same as above, but the caller's ssd gets filled in if ssd != NULL. */ + void CalculateTextlineOrder(bool paragraph_is_ltr, + const LTRResultIterator &resit, + GenericVector *ssd, + GenericVectorEqEq *indices) const; + + /** + * What is the index of the current word in a strict left-to-right reading + * of the row? + */ + int LTRWordIndex() const; + + /** + * Given an iterator pointing at a word, returns the logical reading order + * of blob indices for the word. + */ + void CalculateBlobOrder(GenericVector *blob_indices) const; + + /** Precondition: current_paragraph_is_ltr_ is set. */ + void MoveToLogicalStartOfTextline(); + + /** + * Precondition: current_paragraph_is_ltr_ and in_minor_direction_ + * are set. + */ + void MoveToLogicalStartOfWord(); + + /** Are we pointing at the final (reading order) symbol of the word? */ + bool IsAtFinalSymbolOfWord() const; + + /** Are we pointing at the first (reading order) symbol of the word? */ + bool IsAtFirstSymbolOfWord() const; + + /** + * Append any extra marks that should be appended to this word when printed. + * Mostly, these are Unicode BiDi control characters. + */ + void AppendSuffixMarks(STRING *text) const; + + /** Appends the current word in reading order to the given buffer.*/ + void AppendUTF8WordText(STRING *text) const; + + /** + * Appends the text of the current text line, *assuming this iterator is + * positioned at the beginning of the text line* This function + * updates the iterator to point to the first position past the text line. + * Each textline is terminated in a single newline character. + * If the textline ends a paragraph, it gets a second terminal newline. + */ + void IterateAndAppendUTF8TextlineText(STRING *text); + + /** + * Appends the text of the current paragraph in reading order + * to the given buffer. + * Each textline is terminated in a single newline character, and the + * paragraph gets an extra newline at the end. + */ + void AppendUTF8ParagraphText(STRING *text) const; + + /** Returns whether the bidi_debug flag is set to at least min_level. */ + bool BidiDebug(int min_level) const; + + bool current_paragraph_is_ltr_; + + /** + * Is the currently pointed-at character at the beginning of + * a minor-direction run? + */ + bool at_beginning_of_minor_run_; + + /** Is the currently pointed-at character in a minor-direction sequence? */ + bool in_minor_direction_; + + /** + * Should detected inter-word spaces be preserved, or "compressed" to a single + * space character (default behavior). + */ + bool preserve_interword_spaces_; + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_RESULT_ITERATOR_H__ diff --git a/3rdparty/hgOCR/include/ccmain/superscript.cpp b/3rdparty/hgOCR/include/ccmain/superscript.cpp new file mode 100644 index 00000000..85442744 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/superscript.cpp @@ -0,0 +1,619 @@ +/****************************************************************** + * File: superscript.cpp + * Description: Correction pass to fix superscripts and subscripts. + * Author: David Eger + * Created: Mon Mar 12 14:05:00 PDT 2012 + * + * (C) Copyright 2012, Google, Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "normalis.h" +#include "tesseractclass.h" + +static int LeadingUnicharsToChopped(WERD_RES *word, int num_unichars) { + int num_chopped = 0; + for (int i = 0; i < num_unichars; i++) + num_chopped += word->best_state[i]; + return num_chopped; +} + +static int TrailingUnicharsToChopped(WERD_RES *word, int num_unichars) { + int num_chopped = 0; + for (int i = 0; i < num_unichars; i++) + num_chopped += word->best_state[word->best_state.size() - 1 - i]; + return num_chopped; +} + + +namespace tesseract { + + /** + * Given a recognized blob, see if a contiguous collection of sub-pieces + * (chopped blobs) starting at its left might qualify as being a subscript + * or superscript letter based only on y position. Also do this for the + * right side. + */ + void YOutlierPieces(WERD_RES *word, int rebuilt_blob_index, + int super_y_bottom, int sub_y_top, + ScriptPos *leading_pos, int *num_leading_outliers, + ScriptPos *trailing_pos, int *num_trailing_outliers) { + ScriptPos sp_unused1, sp_unused2; + int unused1, unused2; + if (!leading_pos) leading_pos = &sp_unused1; + if (!num_leading_outliers) num_leading_outliers = &unused1; + if (!trailing_pos) trailing_pos = &sp_unused2; + if (!num_trailing_outliers) num_trailing_outliers = &unused2; + + *num_leading_outliers = *num_trailing_outliers = 0; + *leading_pos = *trailing_pos = SP_NORMAL; + + int chopped_start = LeadingUnicharsToChopped(word, rebuilt_blob_index); + int num_chopped_pieces = word->best_state[rebuilt_blob_index]; + ScriptPos last_pos = SP_NORMAL; + int trailing_outliers = 0; + for (int i = 0; i < num_chopped_pieces; i++) { + TBOX box = word->chopped_word->blobs[chopped_start + i]->bounding_box(); + ScriptPos pos = SP_NORMAL; + if (box.bottom() >= super_y_bottom) { + pos = SP_SUPERSCRIPT; + } + else if (box.top() <= sub_y_top) { + pos = SP_SUBSCRIPT; + } + if (pos == SP_NORMAL) { + if (trailing_outliers == i) { + *num_leading_outliers = trailing_outliers; + *leading_pos = last_pos; + } + trailing_outliers = 0; + } + else { + if (pos == last_pos) { + trailing_outliers++; + } + else { + trailing_outliers = 1; + } + } + last_pos = pos; + } + *num_trailing_outliers = trailing_outliers; + *trailing_pos = last_pos; + } + + /** + * Attempt to split off any high (or low) bits at the ends of the word with poor + * certainty and recognize them separately. If the certainty gets much better + * and other sanity checks pass, acccept. + * + * This superscript fix is meant to be called in the second pass of recognition + * when we have tried once and already have a preliminary answer for word. + * + * @return Whether we modified the given word. + */ + bool Tesseract::SubAndSuperscriptFix(WERD_RES *word) { + if (word->tess_failed || word->word->flag(W_REP_CHAR) || + !word->best_choice) { + return false; + } + int num_leading, num_trailing; + ScriptPos sp_leading, sp_trailing; + float leading_certainty, trailing_certainty; + float avg_certainty, unlikely_threshold; + + // Calculate the number of whole suspicious characters at the edges. + GetSubAndSuperscriptCandidates( + word, &num_leading, &sp_leading, &leading_certainty, + &num_trailing, &sp_trailing, &trailing_certainty, + &avg_certainty, &unlikely_threshold); + + const char *leading_pos = sp_leading == SP_SUBSCRIPT ? "sub" : "super"; + const char *trailing_pos = sp_trailing == SP_SUBSCRIPT ? "sub" : "super"; + + int num_blobs = word->best_choice->length(); + + // Calculate the remainder (partial characters) at the edges. + // This accounts for us having classified the best version of + // a word as [speaker?'] when it was instead [speaker.^{21}] + // (that is we accidentally thought the 2 was attached to the period). + int num_remainder_leading = 0, num_remainder_trailing = 0; + if (num_leading + num_trailing < num_blobs && unlikely_threshold < 0.0) { + int super_y_bottom = + kBlnBaselineOffset + kBlnXHeight * superscript_min_y_bottom; + int sub_y_top = + kBlnBaselineOffset + kBlnXHeight * subscript_max_y_top; + int last_word_char = num_blobs - 1 - num_trailing; + float last_char_certainty = word->best_choice->certainty(last_word_char); + if (word->best_choice->unichar_id(last_word_char) != 0 && + last_char_certainty <= unlikely_threshold) { + ScriptPos rpos; + YOutlierPieces(word, last_word_char, super_y_bottom, sub_y_top, + NULL, NULL, &rpos, &num_remainder_trailing); + if (num_trailing > 0 && rpos != sp_trailing) num_remainder_trailing = 0; + if (num_remainder_trailing > 0 && + last_char_certainty < trailing_certainty) { + trailing_certainty = last_char_certainty; + } + } + bool another_blob_available = (num_remainder_trailing == 0) || + num_leading + num_trailing + 1 < num_blobs; + int first_char_certainty = word->best_choice->certainty(num_leading); + if (another_blob_available && + word->best_choice->unichar_id(num_leading) != 0 && + first_char_certainty <= unlikely_threshold) { + ScriptPos lpos; + YOutlierPieces(word, num_leading, super_y_bottom, sub_y_top, + &lpos, &num_remainder_leading, NULL, NULL); + if (num_leading > 0 && lpos != sp_leading) num_remainder_leading = 0; + if (num_remainder_leading > 0 && + first_char_certainty < leading_certainty) { + leading_certainty = first_char_certainty; + } + } + } + + // If nothing to do, bail now. + if (num_leading + num_trailing + + num_remainder_leading + num_remainder_trailing == 0) { + return false; + } + + if (superscript_debug >= 1) { + tprintf("Candidate for superscript detection: %s (", + word->best_choice->unichar_string().string()); + if (num_leading || num_remainder_leading) { + tprintf("%d.%d %s-leading ", num_leading, num_remainder_leading, + leading_pos); + } + if (num_trailing || num_remainder_trailing) { + tprintf("%d.%d %s-trailing ", num_trailing, num_remainder_trailing, + trailing_pos); + } + tprintf(")\n"); + } + if (superscript_debug >= 3) { + word->best_choice->print(); + } + if (superscript_debug >= 2) { + tprintf(" Certainties -- Average: %.2f Unlikely thresh: %.2f ", + avg_certainty, unlikely_threshold); + if (num_leading) + tprintf("Orig. leading (min): %.2f ", leading_certainty); + if (num_trailing) + tprintf("Orig. trailing (min): %.2f ", trailing_certainty); + tprintf("\n"); + } + + // We've now calculated the number of rebuilt blobs we want to carve off. + // However, split_word() works from TBLOBs in chopped_word, so we need to + // convert to those. + int num_chopped_leading = + LeadingUnicharsToChopped(word, num_leading) + num_remainder_leading; + int num_chopped_trailing = + TrailingUnicharsToChopped(word, num_trailing) + num_remainder_trailing; + + int retry_leading = 0; + int retry_trailing = 0; + bool is_good = false; + WERD_RES *revised = TrySuperscriptSplits( + num_chopped_leading, leading_certainty, sp_leading, + num_chopped_trailing, trailing_certainty, sp_trailing, + word, &is_good, &retry_leading, &retry_trailing); + if (is_good) { + word->ConsumeWordResults(revised); + } + else if (retry_leading || retry_trailing) { + int retry_chopped_leading = + LeadingUnicharsToChopped(revised, retry_leading); + int retry_chopped_trailing = + TrailingUnicharsToChopped(revised, retry_trailing); + WERD_RES *revised2 = TrySuperscriptSplits( + retry_chopped_leading, leading_certainty, sp_leading, + retry_chopped_trailing, trailing_certainty, sp_trailing, + revised, &is_good, &retry_leading, &retry_trailing); + if (is_good) { + word->ConsumeWordResults(revised2); + } + delete revised2; + } + delete revised; + return is_good; + } + + /** + * Determine how many characters (rebuilt blobs) on each end of a given word + * might plausibly be superscripts so SubAndSuperscriptFix can try to + * re-recognize them. Even if we find no whole blobs at either end, + * we will set *unlikely_threshold to a certainty that might be used to + * select "bad enough" outlier characters. If *unlikely_threshold is set to 0, + * though, there's really no hope. + * + * @param[in] word The word to examine. + * @param[out] num_rebuilt_leading the number of rebuilt blobs at the start + * of the word which are all up or down and + * seem badly classified. + * @param[out] leading_pos "super" or "sub" (for debugging) + * @param[out] leading_certainty the worst certainty in the leading blobs. + * @param[out] num_rebuilt_trailing the number of rebuilt blobs at the end + * of the word which are all up or down and + * seem badly classified. + * @param[out] trailing_pos "super" or "sub" (for debugging) + * @param[out] trailing_certainty the worst certainty in the trailing blobs. + * @param[out] avg_certainty the average certainty of "normal" blobs in + * the word. + * @param[out] unlikely_threshold the threshold (on certainty) we used to + * select "bad enough" outlier characters. + */ + void Tesseract::GetSubAndSuperscriptCandidates(const WERD_RES *word, + int *num_rebuilt_leading, + ScriptPos *leading_pos, + float *leading_certainty, + int *num_rebuilt_trailing, + ScriptPos *trailing_pos, + float *trailing_certainty, + float *avg_certainty, + float *unlikely_threshold) { + *avg_certainty = *unlikely_threshold = 0.0f; + *num_rebuilt_leading = *num_rebuilt_trailing = 0; + *leading_certainty = *trailing_certainty = 0.0f; + + int super_y_bottom = + kBlnBaselineOffset + kBlnXHeight * superscript_min_y_bottom; + int sub_y_top = + kBlnBaselineOffset + kBlnXHeight * subscript_max_y_top; + + // Step one: Get an average certainty for "normally placed" characters. + + // Counts here are of blobs in the rebuild_word / unichars in best_choice. + *leading_pos = *trailing_pos = SP_NORMAL; + int leading_outliers = 0; + int trailing_outliers = 0; + int num_normal = 0; + float normal_certainty_total = 0.0f; + float worst_normal_certainty = 0.0f; + ScriptPos last_pos = SP_NORMAL; + int num_blobs = word->rebuild_word->NumBlobs(); + for (int b = 0; b < num_blobs; ++b) { + TBOX box = word->rebuild_word->blobs[b]->bounding_box(); + ScriptPos pos = SP_NORMAL; + if (box.bottom() >= super_y_bottom) { + pos = SP_SUPERSCRIPT; + } + else if (box.top() <= sub_y_top) { + pos = SP_SUBSCRIPT; + } + if (pos == SP_NORMAL) { + if (word->best_choice->unichar_id(b) != 0) { + float char_certainty = word->best_choice->certainty(b); + if (char_certainty < worst_normal_certainty) { + worst_normal_certainty = char_certainty; + } + num_normal++; + normal_certainty_total += char_certainty; + } + if (trailing_outliers == b) { + leading_outliers = trailing_outliers; + *leading_pos = last_pos; + } + trailing_outliers = 0; + } + else { + if (last_pos == pos) { + trailing_outliers++; + } + else { + trailing_outliers = 1; + } + } + last_pos = pos; + } + *trailing_pos = last_pos; + if (num_normal >= 3) { // throw out the worst as an outlier. + num_normal--; + normal_certainty_total -= worst_normal_certainty; + } + if (num_normal > 0) { + *avg_certainty = normal_certainty_total / num_normal; + *unlikely_threshold = superscript_worse_certainty * (*avg_certainty); + } + if (num_normal == 0 || + (leading_outliers == 0 && trailing_outliers == 0)) { + return; + } + + // Step two: Try to split off bits of the word that are both outliers + // and have much lower certainty than average + // Calculate num_leading and leading_certainty. + for (*leading_certainty = 0.0f, *num_rebuilt_leading = 0; + *num_rebuilt_leading < leading_outliers; + (*num_rebuilt_leading)++) { + float char_certainty = word->best_choice->certainty(*num_rebuilt_leading); + if (char_certainty > *unlikely_threshold) { + break; + } + if (char_certainty < *leading_certainty) { + *leading_certainty = char_certainty; + } + } + + // Calculate num_trailing and trailing_certainty. + for (*trailing_certainty = 0.0f, *num_rebuilt_trailing = 0; + *num_rebuilt_trailing < trailing_outliers; + (*num_rebuilt_trailing)++) { + int blob_idx = num_blobs - 1 - *num_rebuilt_trailing; + float char_certainty = word->best_choice->certainty(blob_idx); + if (char_certainty > *unlikely_threshold) { + break; + } + if (char_certainty < *trailing_certainty) { + *trailing_certainty = char_certainty; + } + } + } + + + /** + * Try splitting off the given number of (chopped) blobs from the front and + * back of the given word and recognizing the pieces. + * + * @param[in] num_chopped_leading how many chopped blobs from the left + * end of the word to chop off and try recognizing as a + * superscript (or subscript) + * @param[in] leading_certainty the (minimum) certainty had by the + * characters in the original leading section. + * @param[in] leading_pos "super" or "sub" (for debugging) + * @param[in] num_chopped_trailing how many chopped blobs from the right + * end of the word to chop off and try recognizing as a + * superscript (or subscript) + * @param[in] trailing_certainty the (minimum) certainty had by the + * characters in the original trailing section. + * @param[in] trailing_pos "super" or "sub" (for debugging) + * @param[in] word the word to try to chop up. + * @param[out] is_good do we believe our result? + * @param[out] retry_rebuild_leading, retry_rebuild_trailing + * If non-zero, and !is_good, then the caller may have luck trying + * to split the returned word with this number of (rebuilt) leading + * and trailing blobs / unichars. + * @return A word which is the result of re-recognizing as asked. + */ + WERD_RES *Tesseract::TrySuperscriptSplits( + int num_chopped_leading, float leading_certainty, ScriptPos leading_pos, + int num_chopped_trailing, float trailing_certainty, + ScriptPos trailing_pos, + WERD_RES *word, + bool *is_good, + int *retry_rebuild_leading, int *retry_rebuild_trailing) { + int num_chopped = word->chopped_word->NumBlobs(); + + *retry_rebuild_leading = *retry_rebuild_trailing = 0; + + // Chop apart the word into up to three pieces. + + BlamerBundle *bb0 = NULL; + BlamerBundle *bb1 = NULL; + WERD_RES *prefix = NULL; + WERD_RES *core = NULL; + WERD_RES *suffix = NULL; + if (num_chopped_leading > 0) { + prefix = new WERD_RES(*word); + split_word(prefix, num_chopped_leading, &core, &bb0); + } + else { + core = new WERD_RES(*word); + } + + if (num_chopped_trailing > 0) { + int split_pt = num_chopped - num_chopped_trailing - num_chopped_leading; + split_word(core, split_pt, &suffix, &bb1); + } + + // Recognize the pieces in turn. + int saved_cp_multiplier = classify_class_pruner_multiplier; + int saved_im_multiplier = classify_integer_matcher_multiplier; + if (prefix) { + // Turn off Tesseract's y-position penalties for the leading superscript. + classify_class_pruner_multiplier.set_value(0); + classify_integer_matcher_multiplier.set_value(0); + + // Adjust our expectations about the baseline for this prefix. + if (superscript_debug >= 3) { + tprintf(" recognizing first %d chopped blobs\n", num_chopped_leading); + } + recog_word_recursive(prefix); + if (superscript_debug >= 2) { + tprintf(" The leading bits look like %s %s\n", + ScriptPosToString(leading_pos), + prefix->best_choice->unichar_string().string()); + } + + // Restore the normal y-position penalties. + classify_class_pruner_multiplier.set_value(saved_cp_multiplier); + classify_integer_matcher_multiplier.set_value(saved_im_multiplier); + } + + if (superscript_debug >= 3) { + tprintf(" recognizing middle %d chopped blobs\n", + num_chopped - num_chopped_leading - num_chopped_trailing); + } + + if (suffix) { + // Turn off Tesseract's y-position penalties for the trailing superscript. + classify_class_pruner_multiplier.set_value(0); + classify_integer_matcher_multiplier.set_value(0); + + if (superscript_debug >= 3) { + tprintf(" recognizing last %d chopped blobs\n", num_chopped_trailing); + } + recog_word_recursive(suffix); + if (superscript_debug >= 2) { + tprintf(" The trailing bits look like %s %s\n", + ScriptPosToString(trailing_pos), + suffix->best_choice->unichar_string().string()); + } + + // Restore the normal y-position penalties. + classify_class_pruner_multiplier.set_value(saved_cp_multiplier); + classify_integer_matcher_multiplier.set_value(saved_im_multiplier); + } + + // Evaluate whether we think the results are believably better + // than what we already had. + bool good_prefix = !prefix || BelievableSuperscript( + superscript_debug >= 1, *prefix, + superscript_bettered_certainty * leading_certainty, + retry_rebuild_leading, NULL); + bool good_suffix = !suffix || BelievableSuperscript( + superscript_debug >= 1, *suffix, + superscript_bettered_certainty * trailing_certainty, + NULL, retry_rebuild_trailing); + + *is_good = good_prefix && good_suffix; + if (!*is_good && !*retry_rebuild_leading && !*retry_rebuild_trailing) { + // None of it is any good. Quit now. + delete core; + delete prefix; + delete suffix; + return NULL; + } + recog_word_recursive(core); + + // Now paste the results together into core. + if (suffix) { + suffix->SetAllScriptPositions(trailing_pos); + join_words(core, suffix, bb1); + } + if (prefix) { + prefix->SetAllScriptPositions(leading_pos); + join_words(prefix, core, bb0); + core = prefix; + prefix = NULL; + } + + if (superscript_debug >= 1) { + tprintf("%s superscript fix: %s\n", *is_good ? "ACCEPT" : "REJECT", + core->best_choice->unichar_string().string()); + } + return core; + } + + + /** + * Return whether this is believable superscript or subscript text. + * + * We insist that: + * + there are no punctuation marks. + * + there are no italics. + * + no normal-sized character is smaller than superscript_scaledown_ratio + * of what it ought to be, and + * + each character is at least as certain as certainty_threshold. + * + * @param[in] debug If true, spew debug output + * @param[in] word The word whose best_choice we're evaluating + * @param[in] certainty_threshold If any of the characters have less + * certainty than this, reject. + * @param[out] left_ok How many left-side characters were ok? + * @param[out] right_ok How many right-side characters were ok? + * @return Whether the complete best choice is believable as a superscript. + */ + bool Tesseract::BelievableSuperscript(bool debug, + const WERD_RES &word, + float certainty_threshold, + int *left_ok, + int *right_ok) const { + int initial_ok_run_count = 0; + int ok_run_count = 0; + float worst_certainty = 0.0f; + const WERD_CHOICE &wc = *word.best_choice; + + const UnicityTable& fontinfo_table = get_fontinfo_table(); + for (int i = 0; i < wc.length(); i++) { + TBLOB *blob = word.rebuild_word->blobs[i]; + UNICHAR_ID unichar_id = wc.unichar_id(i); + float char_certainty = wc.certainty(i); + bool bad_certainty = char_certainty < certainty_threshold; + bool is_punc = wc.unicharset()->get_ispunctuation(unichar_id); + bool is_italic = word.fontinfo && word.fontinfo->is_italic(); + BLOB_CHOICE *choice = word.GetBlobChoice(i); + if (choice && fontinfo_table.size() > 0) { + // Get better information from the specific choice, if available. + int font_id1 = choice->fontinfo_id(); + bool font1_is_italic = font_id1 >= 0 + ? fontinfo_table.get(font_id1).is_italic() : false; + int font_id2 = choice->fontinfo_id2(); + is_italic = font1_is_italic && + (font_id2 < 0 || fontinfo_table.get(font_id2).is_italic()); + } + + float height_fraction = 1.0f; + float char_height = blob->bounding_box().height(); + float normal_height = char_height; + if (wc.unicharset()->top_bottom_useful()) { + int min_bot, max_bot, min_top, max_top; + wc.unicharset()->get_top_bottom(unichar_id, + &min_bot, &max_bot, + &min_top, &max_top); + float hi_height = max_top - max_bot; + float lo_height = min_top - min_bot; + normal_height = (hi_height + lo_height) / 2; + if (normal_height >= kBlnXHeight) { + // Only ding characters that we have decent information for because + // they're supposed to be normal sized, not tiny specks or dashes. + height_fraction = char_height / normal_height; + } + } + bool bad_height = height_fraction < superscript_scaledown_ratio; + + if (debug) { + if (is_italic) { + tprintf(" Rejecting: superscript is italic.\n"); + } + if (is_punc) { + tprintf(" Rejecting: punctuation present.\n"); + } + const char *char_str = wc.unicharset()->id_to_unichar(unichar_id); + if (bad_certainty) { + tprintf(" Rejecting: don't believe character %s with certainty %.2f " + "which is less than threshold %.2f\n", char_str, + char_certainty, certainty_threshold); + } + if (bad_height) { + tprintf(" Rejecting: character %s seems too small @ %.2f versus " + "expected %.2f\n", char_str, char_height, normal_height); + } + } + if (bad_certainty || bad_height || is_punc || is_italic) { + if (ok_run_count == i) { + initial_ok_run_count = ok_run_count; + } + ok_run_count = 0; + } + else { + ok_run_count++; + } + if (char_certainty < worst_certainty) { + worst_certainty = char_certainty; + } + } + bool all_ok = ok_run_count == wc.length(); + if (all_ok && debug) { + tprintf(" Accept: worst revised certainty is %.2f\n", worst_certainty); + } + if (!all_ok) { + if (left_ok) *left_ok = initial_ok_run_count; + if (right_ok) *right_ok = ok_run_count; + } + return all_ok; + } + + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/tessbox.cpp b/3rdparty/hgOCR/include/ccmain/tessbox.cpp new file mode 100644 index 00000000..c5e5b886 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessbox.cpp @@ -0,0 +1,82 @@ +/********************************************************************** + * File: tessbox.cpp (Formerly tessbox.c) + * Description: Black boxed Tess for developing a resaljet. + * Author: Ray Smith + * Created: Thu Apr 23 11:03:36 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + +#include "mfoutline.h" +#include "tessbox.h" +#include "tesseractclass.h" + +#define EXTERN + + /** + * @name tess_segment_pass_n + * + * Segment a word using the pass_n conditions of the tess segmenter. + * @param pass_n pass number + * @param word word to do + */ + +namespace tesseract { + void Tesseract::tess_segment_pass_n(int pass_n, WERD_RES *word) { + int saved_enable_assoc = 0; + int saved_chop_enable = 0; + + if (word->word->flag(W_DONT_CHOP)) { + saved_enable_assoc = wordrec_enable_assoc; + saved_chop_enable = chop_enable; + wordrec_enable_assoc.set_value(0); + chop_enable.set_value(0); + } + if (pass_n == 1) + set_pass1(); + else + set_pass2(); + recog_word(word); + if (word->best_choice == NULL) + word->SetupFake(*word->uch_set); + if (word->word->flag(W_DONT_CHOP)) { + wordrec_enable_assoc.set_value(saved_enable_assoc); + chop_enable.set_value(saved_chop_enable); + } + } + + /** + * @name tess_acceptable_word + * + * @return true if the word is regarded as "good enough". + * @param word_choice after context + * @param raw_choice before context + */ + bool Tesseract::tess_acceptable_word(WERD_RES* word) { + return getDict().AcceptableResult(word); + } + + + /** + * @name tess_add_doc_word + * + * Add the given word to the document dictionary + */ + void Tesseract::tess_add_doc_word(WERD_CHOICE *word_choice) { + getDict().add_document_word(*word_choice); + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/tessbox.h b/3rdparty/hgOCR/include/ccmain/tessbox.h new file mode 100644 index 00000000..a96cbceb --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessbox.h @@ -0,0 +1,28 @@ +/********************************************************************** + * File: tessbox.h (Formerly tessbox.h) + * Description: Black boxed Tess for developing a resaljet. + * Author: Ray Smith + * Created: Thu Apr 23 11:03:36 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSBOX_H +#define TESSBOX_H + +#include "ratngs.h" +#include "tesseractclass.h" + + // TODO(ocr-team): Delete this along with other empty header files. + +#endif diff --git a/3rdparty/hgOCR/include/ccmain/tessedit.cpp b/3rdparty/hgOCR/include/ccmain/tessedit.cpp new file mode 100644 index 00000000..e0483c17 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessedit.cpp @@ -0,0 +1,501 @@ +/********************************************************************** + * File: tessedit.cpp (Formerly tessedit.c) + * Description: (Previously) Main program for merge of tess and editor. + * Now just code to load the language model and various + * engine-specific data files. + * Author: Ray Smith + * Created: Tue Jan 07 15:21:46 GMT 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "stderr.h" +#include "basedir.h" +#include "tessvars.h" +#include "control.h" +#include "reject.h" +#include "pageres.h" +#include "nwmain.h" +#include "pgedit.h" +#include "tprintf.h" +#include "tessedit.h" +#include "stopper.h" +#include "intmatcher.h" +#include "chop.h" +#include "efio.h" +#include "danerror.h" +#include "globals.h" +#include "tesseractclass.h" +#include "params.h" + +#define VARDIR "configs/" /*variables files */ + // config under api +#define API_CONFIG "configs/api_config" + +ETEXT_DESC *global_monitor = NULL; // progress monitor + +namespace tesseract { + + // Read a "config" file containing a set of variable, value pairs. + // Searches the standard places: tessdata/configs, tessdata/tessconfigs + // and also accepts a relative or absolute path name. + void Tesseract::read_config_file(const char *filename, + SetParamConstraint constraint) { + STRING path = datadir; + path += "configs/"; + path += filename; + FILE* fp; + if ((fp = fopen(path.string(), "rb")) != NULL) { + fclose(fp); + } + else { + path = datadir; + path += "tessconfigs/"; + path += filename; + if ((fp = fopen(path.string(), "rb")) != NULL) { + fclose(fp); + } + else { + path = filename; + } + } + ParamUtils::ReadParamsFile(path.string(), constraint, this->params()); + } + + // Returns false if a unicharset file for the specified language was not found + // or was invalid. + // This function initializes TessdataManager. After TessdataManager is + // no longer needed, TessdataManager::End() should be called. + // + // This function sets tessedit_oem_mode to the given OcrEngineMode oem, unless + // it is OEM_DEFAULT, in which case the value of the variable will be obtained + // from the language-specific config file (stored in [lang].traineddata), from + // the config files specified on the command line or left as the default + // OEM_TESSERACT_ONLY if none of the configs specify this variable. + bool Tesseract::init_tesseract_lang_data( + const char *arg0, const char *textbase, const char *language, + OcrEngineMode oem, char **configs, int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_non_debug_params) { + // Set the basename, compute the data directory. + main_setup(arg0, textbase); + + // Set the language data path prefix + lang = language != NULL ? language : "eng"; + language_data_path_prefix = datadir; + language_data_path_prefix += lang; + language_data_path_prefix += "."; + + // Initialize TessdataManager. + //STRING tessdata_path = language_data_path_prefix + kTrainedDataSuffix; + STRING tessdata_path = arg0; + if (!tessdata_manager.Init(tessdata_path.string(), + tessdata_manager_debug_level)) { + return false; + } + + // If a language specific config file (lang.config) exists, load it in. + if (tessdata_manager.SeekToStart(TESSDATA_LANG_CONFIG)) { + ParamUtils::ReadParamsFromFp( + tessdata_manager.GetDataFilePtr(), + tessdata_manager.GetEndOffset(TESSDATA_LANG_CONFIG), + SET_PARAM_CONSTRAINT_NONE, this->params()); + if (tessdata_manager_debug_level) { + tprintf("Loaded language config file\n"); + } + } + + SetParamConstraint set_params_constraint = set_only_non_debug_params ? + SET_PARAM_CONSTRAINT_NON_DEBUG_ONLY : SET_PARAM_CONSTRAINT_NONE; + // Load tesseract variables from config files. This is done after loading + // language-specific variables from [lang].traineddata file, so that custom + // config files can override values in [lang].traineddata file. + for (int i = 0; i < configs_size; ++i) { + read_config_file(configs[i], set_params_constraint); + } + + // Set params specified in vars_vec (done after setting params from config + // files, so that params in vars_vec can override those from files). + if (vars_vec != NULL && vars_values != NULL) { + for (int i = 0; i < vars_vec->size(); ++i) { + if (!ParamUtils::SetParam((*vars_vec)[i].string(), + (*vars_values)[i].string(), + set_params_constraint, this->params())) { + tprintf("Error setting param %s\n", (*vars_vec)[i].string()); + exit(1); + } + } + } + + if (((STRING &)tessedit_write_params_to_file).length() > 0) { + FILE *params_file = fopen(tessedit_write_params_to_file.string(), "wb"); + if (params_file != NULL) { + ParamUtils::PrintParams(params_file, this->params()); + fclose(params_file); + if (tessdata_manager_debug_level > 0) { + tprintf("Wrote parameters to %s\n", + tessedit_write_params_to_file.string()); + } + } + else { + tprintf("Failed to open %s for writing params.\n", + tessedit_write_params_to_file.string()); + } + } + + // Determine which ocr engine(s) should be loaded and used for recognition. + if (oem != OEM_DEFAULT) tessedit_ocr_engine_mode.set_value(oem); + if (tessdata_manager_debug_level) { + tprintf("Loading Tesseract/Cube with tessedit_ocr_engine_mode %d\n", + static_cast(tessedit_ocr_engine_mode)); + } + + // If we are only loading the config file (and so not planning on doing any + // recognition) then there's nothing else do here. + if (tessedit_init_config_only) { + if (tessdata_manager_debug_level) { + tprintf("Returning after loading config file\n"); + } + return true; + } + + // Load the unicharset + if (!tessdata_manager.SeekToStart(TESSDATA_UNICHARSET) || + !unicharset.load_from_file(tessdata_manager.GetDataFilePtr())) { + return false; + } + if (unicharset.size() > MAX_NUM_CLASSES) { + tprintf("Error: Size of unicharset is greater than MAX_NUM_CLASSES\n"); + return false; + } + if (tessdata_manager_debug_level) tprintf("Loaded unicharset\n"); + right_to_left_ = unicharset.major_right_to_left(); + + // Setup initial unichar ambigs table and read universal ambigs. + UNICHARSET encoder_unicharset; + encoder_unicharset.CopyFrom(unicharset); + unichar_ambigs.InitUnicharAmbigs(unicharset, use_ambigs_for_adaption); + unichar_ambigs.LoadUniversal(encoder_unicharset, &unicharset); + + if (!tessedit_ambigs_training && + tessdata_manager.SeekToStart(TESSDATA_AMBIGS)) { + TFile ambigs_file; + ambigs_file.Open(tessdata_manager.GetDataFilePtr(), + tessdata_manager.GetEndOffset(TESSDATA_AMBIGS) + 1); + unichar_ambigs.LoadUnicharAmbigs( + encoder_unicharset, + &ambigs_file, + ambigs_debug_level, use_ambigs_for_adaption, &unicharset); + if (tessdata_manager_debug_level) tprintf("Loaded ambigs\n"); + } + + // The various OcrEngineMode settings (see publictypes.h) determine which + // engine-specific data files need to be loaded. Currently everything needs + // the base tesseract data, which supplies other useful information, but + // alternative engines, such as cube and LSTM are optional. +#ifndef NO_CUBE_BUILD + if (tessedit_ocr_engine_mode == OEM_CUBE_ONLY) { + ASSERT_HOST(init_cube_objects(false, &tessdata_manager)); + if (tessdata_manager_debug_level) + tprintf("Loaded Cube w/out combiner\n"); + } + else if (tessedit_ocr_engine_mode == OEM_TESSERACT_CUBE_COMBINED) { + ASSERT_HOST(init_cube_objects(true, &tessdata_manager)); + if (tessdata_manager_debug_level) + tprintf("Loaded Cube with combiner\n"); + } +#endif + // Init ParamsModel. + // Load pass1 and pass2 weights (for now these two sets are the same, but in + // the future separate sets of weights can be generated). + for (int p = ParamsModel::PTRAIN_PASS1; + p < ParamsModel::PTRAIN_NUM_PASSES; ++p) { + language_model_->getParamsModel().SetPass( + static_cast(p)); + if (tessdata_manager.SeekToStart(TESSDATA_PARAMS_MODEL)) { + if (!language_model_->getParamsModel().LoadFromFp( + lang.string(), tessdata_manager.GetDataFilePtr(), + tessdata_manager.GetEndOffset(TESSDATA_PARAMS_MODEL))) { + return false; + } + } + } + if (tessdata_manager_debug_level) language_model_->getParamsModel().Print(); + + return true; + } + + // Helper returns true if the given string is in the vector of strings. + static bool IsStrInList(const STRING& str, + const GenericVector& str_list) { + for (int i = 0; i < str_list.size(); ++i) { + if (str_list[i] == str) + return true; + } + return false; + } + + // Parse a string of the form [~][+[~]]*. + // Langs with no prefix get appended to to_load, provided they + // are not in there already. + // Langs with ~ prefix get appended to not_to_load, provided they are not in + // there already. + void Tesseract::ParseLanguageString(const char* lang_str, + GenericVector* to_load, + GenericVector* not_to_load) { + STRING remains(lang_str); + while (remains.length() > 0) { + // Find the start of the lang code and which vector to add to. + const char* start = remains.string(); + while (*start == '+') + ++start; + GenericVector* target = to_load; + if (*start == '~') { + target = not_to_load; + ++start; + } + // Find the index of the end of the lang code in string start. + int end = strlen(start); + const char* plus = strchr(start, '+'); + if (plus != NULL && plus - start < end) + end = plus - start; + STRING lang_code(start); + lang_code.truncate_at(end); + STRING next(start + end); + remains = next; + // Check whether lang_code is already in the target vector and add. + if (!IsStrInList(lang_code, *target)) { + if (tessdata_manager_debug_level) + tprintf("Adding language '%s' to list\n", lang_code.string()); + target->push_back(lang_code); + } + } + } + + // Initialize for potentially a set of languages defined by the language + // string and recursively any additional languages required by any language + // traineddata file (via tessedit_load_sublangs in its config) that is loaded. + // See init_tesseract_internal for args. + int Tesseract::init_tesseract( + const char *arg0, const char *textbase, const char *language, + OcrEngineMode oem, char **configs, int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_non_debug_params) { + GenericVector langs_to_load; + GenericVector langs_not_to_load; + ParseLanguageString(language, &langs_to_load, &langs_not_to_load); + + sub_langs_.delete_data_pointers(); + sub_langs_.clear(); + // Find the first loadable lang and load into this. + // Add any languages that this language requires + bool loaded_primary = false; + // Load the rest into sub_langs_. + for (int lang_index = 0; lang_index < langs_to_load.size(); ++lang_index) { + if (!IsStrInList(langs_to_load[lang_index], langs_not_to_load)) { + const char *lang_str = langs_to_load[lang_index].string(); + Tesseract *tess_to_init; + if (!loaded_primary) { + tess_to_init = this; + } + else { + tess_to_init = new Tesseract; + } + + int result = tess_to_init->init_tesseract_internal( + arg0, textbase, lang_str, oem, configs, configs_size, + vars_vec, vars_values, set_only_non_debug_params); + + if (!loaded_primary) { + if (result < 0) { + tprintf("Failed loading language '%s'\n", lang_str); + } + else { + if (tessdata_manager_debug_level) + tprintf("Loaded language '%s' as main language\n", lang_str); + ParseLanguageString(tess_to_init->tessedit_load_sublangs.string(), + &langs_to_load, &langs_not_to_load); + loaded_primary = true; + } + } + else { + if (result < 0) { + tprintf("Failed loading language '%s'\n", lang_str); + delete tess_to_init; + } + else { + if (tessdata_manager_debug_level) + tprintf("Loaded language '%s' as secondary language\n", lang_str); + sub_langs_.push_back(tess_to_init); + // Add any languages that this language requires + ParseLanguageString(tess_to_init->tessedit_load_sublangs.string(), + &langs_to_load, &langs_not_to_load); + } + } + } + } + if (!loaded_primary) { + tprintf("Tesseract couldn't load any languages!\n"); + return -1; // Couldn't load any language! + } + if (!sub_langs_.empty()) { + // In multilingual mode word ratings have to be directly comparable, + // so use the same language model weights for all languages: + // use the primary language's params model if + // tessedit_use_primary_params_model is set, + // otherwise use default language model weights. + if (tessedit_use_primary_params_model) { + for (int s = 0; s < sub_langs_.size(); ++s) { + sub_langs_[s]->language_model_->getParamsModel().Copy( + this->language_model_->getParamsModel()); + } + tprintf("Using params model of the primary language\n"); + if (tessdata_manager_debug_level) { + this->language_model_->getParamsModel().Print(); + } + } + else { + this->language_model_->getParamsModel().Clear(); + for (int s = 0; s < sub_langs_.size(); ++s) { + sub_langs_[s]->language_model_->getParamsModel().Clear(); + } + if (tessdata_manager_debug_level) + tprintf("Using default language params\n"); + } + } + + SetupUniversalFontIds(); + return 0; + } + + // Common initialization for a single language. + // arg0 is the datapath for the tessdata directory, which could be the + // path of the tessdata directory with no trailing /, or (if tessdata + // lives in the same directory as the executable, the path of the executable, + // hence the name arg0. + // textbase is an optional output file basename (used only for training) + // language is the language code to load. + // oem controls which engine(s) will operate on the image + // configs (argv) is an array of config filenames to load variables from. + // May be NULL. + // configs_size (argc) is the number of elements in configs. + // vars_vec is an optional vector of variables to set. + // vars_values is an optional corresponding vector of values for the variables + // in vars_vec. + // If set_only_init_params is true, then only the initialization variables + // will be set. + int Tesseract::init_tesseract_internal( + const char *arg0, const char *textbase, const char *language, + OcrEngineMode oem, char **configs, int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_non_debug_params) { + if (!init_tesseract_lang_data(arg0, textbase, language, oem, configs, + configs_size, vars_vec, vars_values, + set_only_non_debug_params)) { + return -1; + } + if (tessedit_init_config_only) { + tessdata_manager.End(); + return 0; + } + // If only Cube will be used, skip loading Tesseract classifier's + // pre-trained templates. + bool init_tesseract_classifier = + (tessedit_ocr_engine_mode == OEM_TESSERACT_ONLY || + tessedit_ocr_engine_mode == OEM_TESSERACT_CUBE_COMBINED); + // If only Cube will be used and if it has its own Unicharset, + // skip initializing permuter and loading Tesseract Dawgs. + bool init_dict = + !(tessedit_ocr_engine_mode == OEM_CUBE_ONLY && + tessdata_manager.SeekToStart(TESSDATA_CUBE_UNICHARSET)); + program_editup(textbase, init_tesseract_classifier, init_dict); + tessdata_manager.End(); + return 0; //Normal exit + } + + // Helper builds the all_fonts table by adding new fonts from new_fonts. + static void CollectFonts(const UnicityTable& new_fonts, + UnicityTable* all_fonts) { + for (int i = 0; i < new_fonts.size(); ++i) { + // UnicityTable uniques as we go. + all_fonts->push_back(new_fonts.get(i)); + } + } + + // Helper assigns an id to lang_fonts using the index in all_fonts table. + static void AssignIds(const UnicityTable& all_fonts, + UnicityTable* lang_fonts) { + for (int i = 0; i < lang_fonts->size(); ++i) { + int index = all_fonts.get_id(lang_fonts->get(i)); + lang_fonts->get_mutable(i)->universal_id = index; + } + } + + // Set the universal_id member of each font to be unique among all + // instances of the same font loaded. + void Tesseract::SetupUniversalFontIds() { + // Note that we can get away with bitwise copying FontInfo in + // all_fonts, as it is a temporary structure and we avoid setting the + // delete callback. + UnicityTable all_fonts; + all_fonts.set_compare_callback(NewPermanentTessCallback(CompareFontInfo)); + + // Create the universal ID table. + CollectFonts(get_fontinfo_table(), &all_fonts); + for (int i = 0; i < sub_langs_.size(); ++i) { + CollectFonts(sub_langs_[i]->get_fontinfo_table(), &all_fonts); + } + // Assign ids from the table to each font table. + AssignIds(all_fonts, &get_fontinfo_table()); + for (int i = 0; i < sub_langs_.size(); ++i) { + AssignIds(all_fonts, &sub_langs_[i]->get_fontinfo_table()); + } + font_table_size_ = all_fonts.size(); + } + + // init the LM component + int Tesseract::init_tesseract_lm(const char *arg0, + const char *textbase, + const char *language) { + if (!init_tesseract_lang_data(arg0, textbase, language, OEM_TESSERACT_ONLY, + NULL, 0, NULL, NULL, false)) + return -1; + getDict().SetupForLoad(Dict::GlobalDawgCache()); + getDict().Load(tessdata_manager.GetDataFileName().string(), lang); + getDict().FinishLoad(); + tessdata_manager.End(); + return 0; + } + + void Tesseract::end_tesseract() { + end_recog(); + } + + /* Define command type identifiers */ + + enum CMD_EVENTS + { + ACTION_1_CMD_EVENT, + RECOG_WERDS, + RECOG_PSEUDO, + ACTION_2_CMD_EVENT + }; +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/tessedit.h b/3rdparty/hgOCR/include/ccmain/tessedit.h new file mode 100644 index 00000000..b4b85e43 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessedit.h @@ -0,0 +1,29 @@ +/********************************************************************** + * File: tessedit.h (Formerly tessedit.h) + * Description: Main program for merge of tess and editor. + * Author: Ray Smith + * Created: Tue Jan 07 15:21:46 GMT 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSEDIT_H +#define TESSEDIT_H + +#include "blobs.h" +#include "pgedit.h" + + //progress monitor +extern ETEXT_DESC *global_monitor; + +#endif diff --git a/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.cpp b/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.cpp new file mode 100644 index 00000000..3e8db47d --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.cpp @@ -0,0 +1,305 @@ +/********************************************************************** + * File: tesseract_cube_combiner.h + * Description: Declaration of the Tesseract & Cube results combiner Class + * Author: Ahmad Abdulkader + * Created: 2008 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // The TesseractCubeCombiner class provides the functionality of combining + // the recognition results of Tesseract and Cube at the word level + +#include +#include + +#include "tesseract_cube_combiner.h" + +#include "cube_object.h" +#include "cube_reco_context.h" +#include "cube_utils.h" +#include "neural_net.h" +#include "tesseractclass.h" +#include "word_altlist.h" + +namespace tesseract { + + TesseractCubeCombiner::TesseractCubeCombiner(CubeRecoContext *cube_cntxt) { + cube_cntxt_ = cube_cntxt; + combiner_net_ = NULL; + } + + TesseractCubeCombiner::~TesseractCubeCombiner() { + if (combiner_net_ != NULL) { + delete combiner_net_; + combiner_net_ = NULL; + } + } + + bool TesseractCubeCombiner::LoadCombinerNet() { + ASSERT_HOST(cube_cntxt_); + // Compute the path of the combiner net + string data_path; + cube_cntxt_->GetDataFilePath(&data_path); + string net_file_name = data_path + cube_cntxt_->Lang() + + ".tesseract_cube.nn"; + + // Return false if file does not exist + FILE *fp = fopen(net_file_name.c_str(), "rb"); + if (fp == NULL) + return false; + else + fclose(fp); + + // Load and validate net + combiner_net_ = NeuralNet::FromFile(net_file_name); + if (combiner_net_ == NULL) { + tprintf("Could not read combiner net file %s", net_file_name.c_str()); + return false; + } + else if (combiner_net_->out_cnt() != 2) { + tprintf("Invalid combiner net file %s! Output count != 2\n", + net_file_name.c_str()); + delete combiner_net_; + combiner_net_ = NULL; + return false; + } + return true; + } + + // Normalize a UTF-8 string. Converts the UTF-8 string to UTF32 and optionally + // strips punc and/or normalizes case and then converts back + string TesseractCubeCombiner::NormalizeString(const string &str, + bool remove_punc, + bool norm_case) { + // convert to UTF32 + string_32 str32; + CubeUtils::UTF8ToUTF32(str.c_str(), &str32); + // strip punc and normalize + string_32 new_str32; + for (int idx = 0; idx < str32.length(); idx++) { + // if no punc removal is required or not a punctuation character + if (!remove_punc || iswpunct(str32[idx]) == 0) { + char_32 norm_char = str32[idx]; + // normalize case if required + if (norm_case && iswalpha(norm_char)) { + norm_char = towlower(norm_char); + } + new_str32.push_back(norm_char); + } + } + // convert back to UTF8 + string new_str; + CubeUtils::UTF32ToUTF8(new_str32.c_str(), &new_str); + return new_str; + } + + // Compares 2 strings optionally ignoring punctuation + int TesseractCubeCombiner::CompareStrings(const string &str1, + const string &str2, + bool ignore_punc, + bool ignore_case) { + if (!ignore_punc && !ignore_case) { + return str1.compare(str2); + } + string norm_str1 = NormalizeString(str1, ignore_punc, ignore_case); + string norm_str2 = NormalizeString(str2, ignore_punc, ignore_case); + return norm_str1.compare(norm_str2); + } + + // Check if a string is a valid Tess dict word or not + bool TesseractCubeCombiner::ValidWord(const string &str) { + return (cube_cntxt_->TesseractObject()->getDict().valid_word(str.c_str()) + > 0); + } + + // Public method for computing the combiner features. The agreement + // output parameter will be true if both answers are identical, + // and false otherwise. + bool TesseractCubeCombiner::ComputeCombinerFeatures(const string &tess_str, + int tess_confidence, + CubeObject *cube_obj, + WordAltList *cube_alt_list, + vector *features, + bool *agreement) { + features->clear(); + *agreement = false; + if (cube_alt_list == NULL || cube_alt_list->AltCount() <= 0) + return false; + + // Get Cube's best string; return false if empty + char_32 *cube_best_str32 = cube_alt_list->Alt(0); + if (cube_best_str32 == NULL || CubeUtils::StrLen(cube_best_str32) < 1) + return false; + string cube_best_str; + int cube_best_cost = cube_alt_list->AltCost(0); + int cube_best_bigram_cost = 0; + bool cube_best_bigram_cost_valid = true; + if (cube_cntxt_->Bigrams()) + cube_best_bigram_cost = cube_cntxt_->Bigrams()-> + Cost(cube_best_str32, cube_cntxt_->CharacterSet()); + else + cube_best_bigram_cost_valid = false; + CubeUtils::UTF32ToUTF8(cube_best_str32, &cube_best_str); + + // Get Tesseract's UTF32 string + string_32 tess_str32; + CubeUtils::UTF8ToUTF32(tess_str.c_str(), &tess_str32); + + // Compute agreement flag + *agreement = (tess_str.compare(cube_best_str) == 0); + + // Get Cube's second best string; if empty, return false + char_32 *cube_next_best_str32; + string cube_next_best_str; + int cube_next_best_cost = WORST_COST; + if (cube_alt_list->AltCount() > 1) { + cube_next_best_str32 = cube_alt_list->Alt(1); + if (cube_next_best_str32 == NULL || + CubeUtils::StrLen(cube_next_best_str32) == 0) { + return false; + } + cube_next_best_cost = cube_alt_list->AltCost(1); + CubeUtils::UTF32ToUTF8(cube_next_best_str32, &cube_next_best_str); + } + // Rank of Tesseract's top result in Cube's alternate list + int tess_rank = 0; + for (tess_rank = 0; tess_rank < cube_alt_list->AltCount(); tess_rank++) { + string alt_str; + CubeUtils::UTF32ToUTF8(cube_alt_list->Alt(tess_rank), &alt_str); + if (alt_str == tess_str) + break; + } + + // Cube's cost for tesseract's result. Note that this modifies the + // state of cube_obj, including its alternate list by calling RecognizeWord() + int tess_cost = cube_obj->WordCost(tess_str.c_str()); + // Cube's bigram cost of Tesseract's string + int tess_bigram_cost = 0; + int tess_bigram_cost_valid = true; + if (cube_cntxt_->Bigrams()) + tess_bigram_cost = cube_cntxt_->Bigrams()-> + Cost(tess_str32.c_str(), cube_cntxt_->CharacterSet()); + else + tess_bigram_cost_valid = false; + + // Tesseract confidence + features->push_back(tess_confidence); + // Cube cost of Tesseract string + features->push_back(tess_cost); + // Cube Rank of Tesseract string + features->push_back(tess_rank); + // length of Tesseract OCR string + features->push_back(tess_str.length()); + // Tesseract OCR string in dictionary + features->push_back(ValidWord(tess_str)); + if (tess_bigram_cost_valid) { + // bigram cost of Tesseract string + features->push_back(tess_bigram_cost); + } + // Cube tess_cost of Cube best string + features->push_back(cube_best_cost); + // Cube tess_cost of Cube next best string + features->push_back(cube_next_best_cost); + // length of Cube string + features->push_back(cube_best_str.length()); + // Cube string in dictionary + features->push_back(ValidWord(cube_best_str)); + if (cube_best_bigram_cost_valid) { + // bigram cost of Cube string + features->push_back(cube_best_bigram_cost); + } + // case-insensitive string comparison, including punctuation + int compare_nocase_punc = CompareStrings(cube_best_str, + tess_str, false, true); + features->push_back(compare_nocase_punc == 0); + // case-sensitive string comparison, ignoring punctuation + int compare_case_nopunc = CompareStrings(cube_best_str, + tess_str, true, false); + features->push_back(compare_case_nopunc == 0); + // case-insensitive string comparison, ignoring punctuation + int compare_nocase_nopunc = CompareStrings(cube_best_str, + tess_str, true, true); + features->push_back(compare_nocase_nopunc == 0); + return true; + } + + // The CubeObject parameter is used for 2 purposes: 1) to retrieve + // cube's alt list, and 2) to compute cube's word cost for the + // tesseract result. The call to CubeObject::WordCost() modifies + // the object's alternate list, so previous state will be lost. + float TesseractCubeCombiner::CombineResults(WERD_RES *tess_res, + CubeObject *cube_obj) { + // If no combiner is loaded or the cube object is undefined, + // tesseract wins with probability 1.0 + if (combiner_net_ == NULL || cube_obj == NULL) { + tprintf("Cube WARNING (TesseractCubeCombiner::CombineResults): " + "Cube objects not initialized; defaulting to Tesseract\n"); + return 1.0; + } + + // Retrieve the alternate list from the CubeObject's current state. + // If the alt list empty, tesseract wins with probability 1.0 + WordAltList *cube_alt_list = cube_obj->AlternateList(); + if (cube_alt_list == NULL) + cube_alt_list = cube_obj->RecognizeWord(); + if (cube_alt_list == NULL || cube_alt_list->AltCount() <= 0) { + tprintf("Cube WARNING (TesseractCubeCombiner::CombineResults): " + "Cube returned no results; defaulting to Tesseract\n"); + return 1.0; + } + return CombineResults(tess_res, cube_obj, cube_alt_list); + } + + // The alt_list parameter is expected to have been extracted from the + // CubeObject that recognized the word to be combined. The cube_obj + // parameter passed may be either same instance or a separate instance to + // be used only by the combiner. In both cases, its alternate + // list will be modified by an internal call to RecognizeWord(). + float TesseractCubeCombiner::CombineResults(WERD_RES *tess_res, + CubeObject *cube_obj, + WordAltList *cube_alt_list) { + // If no combiner is loaded or the cube object is undefined, or the + // alt list is empty, tesseract wins with probability 1.0 + if (combiner_net_ == NULL || cube_obj == NULL || + cube_alt_list == NULL || cube_alt_list->AltCount() <= 0) { + tprintf("Cube WARNING (TesseractCubeCombiner::CombineResults): " + "Cube result cannot be retrieved; defaulting to Tesseract\n"); + return 1.0; + } + + // Tesseract result string, tesseract confidence, and cost of + // tesseract result according to cube + string tess_str = tess_res->best_choice->unichar_string().string(); + // Map certainty [-20.0, 0.0] to confidence [0, 100] + int tess_confidence = MIN(100, MAX(1, static_cast( + 100 + (5 * tess_res->best_choice->certainty())))); + + // Compute the combiner features. If feature computation fails or + // answers are identical, tesseract wins with probability 1.0 + vector features; + bool agreement; + bool combiner_success = ComputeCombinerFeatures(tess_str, tess_confidence, + cube_obj, cube_alt_list, + &features, &agreement); + if (!combiner_success || agreement) + return 1.0; + + // Classify combiner feature vector and return output (probability + // of tesseract class). + double net_out[2]; + if (!combiner_net_->FeedForward(&features[0], net_out)) + return 1.0; + return net_out[1]; + } +} diff --git a/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.h b/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.h new file mode 100644 index 00000000..c157d57b --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tesseract_cube_combiner.h @@ -0,0 +1,93 @@ +/********************************************************************** + * File: tesseract_cube_combiner.h + * Description: Declaration of the Tesseract & Cube results combiner Class + * Author: Ahmad Abdulkader + * Created: 2008 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // The TesseractCubeCombiner class provides the functionality of combining + // the recognition results of Tesseract and Cube at the word level + +#ifndef TESSERACT_CCMAIN_TESSERACT_CUBE_COMBINER_H +#define TESSERACT_CCMAIN_TESSERACT_CUBE_COMBINER_H + +#include +#include +#include "pageres.h" + +namespace tesseract { + + class CubeObject; + class NeuralNet; + class CubeRecoContext; + class WordAltList; + + class TesseractCubeCombiner { + public: + explicit TesseractCubeCombiner(CubeRecoContext *cube_cntxt); + virtual ~TesseractCubeCombiner(); + + // There are 2 public methods for combining the results of tesseract + // and cube. Both return the probability that the Tesseract result is + // correct. The difference between the two interfaces is in how the + // passed-in CubeObject is used. + + // The CubeObject parameter is used for 2 purposes: 1) to retrieve + // cube's alt list, and 2) to compute cube's word cost for the + // tesseract result. Both uses may modify the state of the + // CubeObject (including the BeamSearch state) with a call to + // RecognizeWord(). + float CombineResults(WERD_RES *tess_res, CubeObject *cube_obj); + + // The alt_list parameter is expected to have been extracted from the + // CubeObject that recognized the word to be combined. The cube_obj + // parameter passed in is a separate instance to be used only by + // the combiner. + float CombineResults(WERD_RES *tess_res, CubeObject *cube_obj, + WordAltList *alt_list); + + // Public method for computing the combiner features. The agreement + // output parameter will be true if both answers are identical, + // false otherwise. Modifies the cube_alt_list, so no assumptions + // should be made about its state upon return. + bool ComputeCombinerFeatures(const std::string &tess_res, + int tess_confidence, + CubeObject *cube_obj, + WordAltList *cube_alt_list, + std::vector *features, + bool *agreement); + + // Is the word valid according to Tesseract's language model + bool ValidWord(const std::string &str); + + // Loads the combiner neural network from file, using cube_cntxt_ + // to find path. + bool LoadCombinerNet(); + private: + // Normalize a UTF-8 string. Converts the UTF-8 string to UTF32 and optionally + // strips punc and/or normalizes case and then converts back + std::string NormalizeString(const std::string &str, bool remove_punc, bool norm_case); + + // Compares 2 strings after optionally normalizing them and or stripping + // punctuation + int CompareStrings(const std::string &str1, const std::string &str2, bool ignore_punc, + bool norm_case); + + NeuralNet *combiner_net_; // pointer to the combiner NeuralNet object + CubeRecoContext *cube_cntxt_; // used for language ID and data paths + }; +} + +#endif // TESSERACT_CCMAIN_TESSERACT_CUBE_COMBINER_H diff --git a/3rdparty/hgOCR/include/ccmain/tesseractclass.cpp b/3rdparty/hgOCR/include/ccmain/tesseractclass.cpp new file mode 100644 index 00000000..457471bb --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tesseractclass.cpp @@ -0,0 +1,769 @@ +/////////////////////////////////////////////////////////////////////// +// File: tesseractclass.cpp +// Description: The Tesseract class. It holds/owns everything needed +// to run Tesseract on a single language, and also a set of +// sub-Tesseracts to run sub-languages. For thread safety, *every* +// variable that was previously global or static (except for +// constant data, and some visual debugging flags) has been moved +// in here, directly, or indirectly. +// This makes it safe to run multiple Tesseracts in different +// threads in parallel, and keeps the different language +// instances separate. +// Some global functions remain, but they are isolated re-entrant +// functions that operate on their arguments. Functions that work +// on variable data have been moved to an appropriate class based +// mostly on the directory hierarchy. For more information see +// slide 6 of "2ArchitectureAndDataStructures" in +// https://drive.google.com/file/d/0B7l10Bj_LprhbUlIUFlCdGtDYkE/edit?usp=sharing +// Some global data and related functions still exist in the +// training-related code, but they don't interfere with normal +// recognition operation. +// Author: Ray Smith +// Created: Fri Mar 07 08:17:01 PST 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "tesseractclass.h" + +#include "allheaders.h" +#ifndef NO_CUBE_BUILD +#include "cube_reco_context.h" +#endif +#include "edgblob.h" +#include "equationdetect.h" +#include "globals.h" +#ifndef NO_CUBE_BUILD +#include "tesseract_cube_combiner.h" +#endif + +namespace tesseract { + + Tesseract::Tesseract() + : BOOL_MEMBER(tessedit_resegment_from_boxes, false, + "Take segmentation and labeling from box file", + this->params()), + BOOL_MEMBER(tessedit_resegment_from_line_boxes, false, + "Conversion of word/line box file to char box file", + this->params()), + BOOL_MEMBER(tessedit_train_from_boxes, false, + "Generate training data from boxed chars", this->params()), + BOOL_MEMBER(tessedit_make_boxes_from_boxes, false, + "Generate more boxes from boxed chars", this->params()), + BOOL_MEMBER(tessedit_dump_pageseg_images, false, + "Dump intermediate images made during page segmentation", + this->params()), + // The default for pageseg_mode is the old behaviour, so as not to + // upset anything that relies on that. + INT_MEMBER( + tessedit_pageseg_mode, PSM_SINGLE_BLOCK, + "Page seg mode: 0=osd only, 1=auto+osd, 2=auto, 3=col, 4=block," + " 5=line, 6=word, 7=char" + " (Values from PageSegMode enum in publictypes.h)", + this->params()), + INT_INIT_MEMBER(tessedit_ocr_engine_mode, tesseract::OEM_TESSERACT_ONLY, + "Which OCR engine(s) to run (Tesseract, Cube, both)." + " Defaults to loading and running only Tesseract" + " (no Cube,no combiner)." + " Values from OcrEngineMode enum in tesseractclass.h)", + this->params()), + STRING_MEMBER(tessedit_char_blacklist, "", + "Blacklist of chars not to recognize", this->params()), + STRING_MEMBER(tessedit_char_whitelist, "", + "Whitelist of chars to recognize", this->params()), + STRING_MEMBER(tessedit_char_unblacklist, "", + "List of chars to override tessedit_char_blacklist", + this->params()), + BOOL_MEMBER(tessedit_ambigs_training, false, + "Perform training for ambiguities", this->params()), + INT_MEMBER(pageseg_devanagari_split_strategy, + tesseract::ShiroRekhaSplitter::NO_SPLIT, + "Whether to use the top-line splitting process for Devanagari " + "documents while performing page-segmentation.", + this->params()), + INT_MEMBER(ocr_devanagari_split_strategy, + tesseract::ShiroRekhaSplitter::NO_SPLIT, + "Whether to use the top-line splitting process for Devanagari " + "documents while performing ocr.", + this->params()), + STRING_MEMBER(tessedit_write_params_to_file, "", + "Write all parameters to the given file.", this->params()), + BOOL_MEMBER(tessedit_adaption_debug, false, + "Generate and print debug" + " information for adaption", + this->params()), + INT_MEMBER(bidi_debug, 0, "Debug level for BiDi", this->params()), + INT_MEMBER(applybox_debug, 1, "Debug level", this->params()), + INT_MEMBER(applybox_page, 0, "Page number to apply boxes from", + this->params()), + STRING_MEMBER(applybox_exposure_pattern, ".exp", + "Exposure value follows" + " this pattern in the image filename. The name of the image" + " files are expected to be in the form" + " [lang].[fontname].exp[num].tif", + this->params()), + BOOL_MEMBER(applybox_learn_chars_and_char_frags_mode, false, + "Learn both character fragments (as is done in the" + " special low exposure mode) as well as unfragmented" + " characters.", + this->params()), + BOOL_MEMBER(applybox_learn_ngrams_mode, false, + "Each bounding box" + " is assumed to contain ngrams. Only learn the ngrams" + " whose outlines overlap horizontally.", + this->params()), + BOOL_MEMBER(tessedit_display_outwords, false, "Draw output words", + this->params()), + BOOL_MEMBER(tessedit_dump_choices, false, "Dump char choices", + this->params()), + BOOL_MEMBER(tessedit_timing_debug, false, "Print timing stats", + this->params()), + BOOL_MEMBER(tessedit_fix_fuzzy_spaces, true, + "Try to improve fuzzy spaces", this->params()), + BOOL_MEMBER(tessedit_unrej_any_wd, false, + "Don't bother with word plausibility", this->params()), + BOOL_MEMBER(tessedit_fix_hyphens, true, "Crunch double hyphens?", + this->params()), + BOOL_MEMBER(tessedit_redo_xheight, true, "Check/Correct x-height", + this->params()), + BOOL_MEMBER(tessedit_enable_doc_dict, true, + "Add words to the document dictionary", this->params()), + BOOL_MEMBER(tessedit_debug_fonts, false, "Output font info per char", + this->params()), + BOOL_MEMBER(tessedit_debug_block_rejection, false, "Block and Row stats", + this->params()), + BOOL_MEMBER(tessedit_enable_bigram_correction, true, + "Enable correction based on the word bigram dictionary.", + this->params()), + BOOL_MEMBER(tessedit_enable_dict_correction, false, + "Enable single word correction based on the dictionary.", + this->params()), + INT_MEMBER(tessedit_bigram_debug, 0, + "Amount of debug output for bigram correction.", + this->params()), + BOOL_MEMBER(enable_noise_removal, true, + "Remove and conditionally reassign small outlines when they" + " confuse layout analysis, determining diacritics vs noise", + this->params()), + INT_MEMBER(debug_noise_removal, 0, "Debug reassignment of small outlines", + this->params()), + // Worst (min) certainty, for which a diacritic is allowed to make the + // base + // character worse and still be included. + double_MEMBER(noise_cert_basechar, -8.0, + "Hingepoint for base char certainty", this->params()), + // Worst (min) certainty, for which a non-overlapping diacritic is allowed + // to make the base character worse and still be included. + double_MEMBER(noise_cert_disjoint, -1.0, + "Hingepoint for disjoint certainty", this->params()), + // Worst (min) certainty, for which a diacritic is allowed to make a new + // stand-alone blob. + double_MEMBER(noise_cert_punc, -3.0, + "Threshold for new punc char certainty", this->params()), + // Factor of certainty margin for adding diacritics to not count as worse. + double_MEMBER(noise_cert_factor, 0.375, + "Scaling on certainty diff from Hingepoint", + this->params()), + INT_MEMBER(noise_maxperblob, 8, "Max diacritics to apply to a blob", + this->params()), + INT_MEMBER(noise_maxperword, 16, "Max diacritics to apply to a word", + this->params()), + INT_MEMBER(debug_x_ht_level, 0, "Reestimate debug", this->params()), + BOOL_MEMBER(debug_acceptable_wds, false, "Dump word pass/fail chk", + this->params()), + STRING_MEMBER(chs_leading_punct, "('`\"", "Leading punctuation", + this->params()), + STRING_MEMBER(chs_trailing_punct1, ").,;:?!", "1st Trailing punctuation", + this->params()), + STRING_MEMBER(chs_trailing_punct2, ")'`\"", "2nd Trailing punctuation", + this->params()), + double_MEMBER(quality_rej_pc, 0.08, + "good_quality_doc lte rejection limit", this->params()), + double_MEMBER(quality_blob_pc, 0.0, + "good_quality_doc gte good blobs limit", this->params()), + double_MEMBER(quality_outline_pc, 1.0, + "good_quality_doc lte outline error limit", this->params()), + double_MEMBER(quality_char_pc, 0.95, + "good_quality_doc gte good char limit", this->params()), + INT_MEMBER(quality_min_initial_alphas_reqd, 2, "alphas in a good word", + this->params()), + INT_MEMBER(tessedit_tess_adaption_mode, 0x27, + "Adaptation decision algorithm for tess", this->params()), + BOOL_MEMBER(tessedit_minimal_rej_pass1, false, + "Do minimal rejection on pass 1 output", this->params()), + BOOL_MEMBER(tessedit_test_adaption, false, "Test adaption criteria", + this->params()), + BOOL_MEMBER(tessedit_matcher_log, false, "Log matcher activity", + this->params()), + INT_MEMBER(tessedit_test_adaption_mode, 3, + "Adaptation decision algorithm for tess", this->params()), + BOOL_MEMBER(test_pt, false, "Test for point", this->params()), + double_MEMBER(test_pt_x, 99999.99, "xcoord", this->params()), + double_MEMBER(test_pt_y, 99999.99, "ycoord", this->params()), + INT_MEMBER(paragraph_debug_level, 0, "Print paragraph debug info.", + this->params()), + BOOL_MEMBER(paragraph_text_based, true, + "Run paragraph detection on the post-text-recognition " + "(more accurate)", + this->params()), + INT_MEMBER(cube_debug_level, 0, "Print cube debug info.", this->params()), + STRING_MEMBER(outlines_odd, "%| ", "Non standard number of outlines", + this->params()), + STRING_MEMBER(outlines_2, "ij!?%\":;", "Non standard number of outlines", + this->params()), + BOOL_MEMBER(docqual_excuse_outline_errs, false, + "Allow outline errs in unrejection?", this->params()), + BOOL_MEMBER(tessedit_good_quality_unrej, true, + "Reduce rejection on good docs", this->params()), + BOOL_MEMBER(tessedit_use_reject_spaces, true, "Reject spaces?", + this->params()), + double_MEMBER(tessedit_reject_doc_percent, 65.00, + "%rej allowed before rej whole doc", this->params()), + double_MEMBER(tessedit_reject_block_percent, 45.00, + "%rej allowed before rej whole block", this->params()), + double_MEMBER(tessedit_reject_row_percent, 40.00, + "%rej allowed before rej whole row", this->params()), + double_MEMBER(tessedit_whole_wd_rej_row_percent, 70.00, + "Number of row rejects in whole word rejects" + "which prevents whole row rejection", + this->params()), + BOOL_MEMBER(tessedit_preserve_blk_rej_perfect_wds, true, + "Only rej partially rejected words in block rejection", + this->params()), + BOOL_MEMBER(tessedit_preserve_row_rej_perfect_wds, true, + "Only rej partially rejected words in row rejection", + this->params()), + BOOL_MEMBER(tessedit_dont_blkrej_good_wds, false, + "Use word segmentation quality metric", this->params()), + BOOL_MEMBER(tessedit_dont_rowrej_good_wds, false, + "Use word segmentation quality metric", this->params()), + INT_MEMBER(tessedit_preserve_min_wd_len, 2, + "Only preserve wds longer than this", this->params()), + BOOL_MEMBER(tessedit_row_rej_good_docs, true, + "Apply row rejection to good docs", this->params()), + double_MEMBER(tessedit_good_doc_still_rowrej_wd, 1.1, + "rej good doc wd if more than this fraction rejected", + this->params()), + BOOL_MEMBER(tessedit_reject_bad_qual_wds, true, + "Reject all bad quality wds", this->params()), + BOOL_MEMBER(tessedit_debug_doc_rejection, false, "Page stats", + this->params()), + BOOL_MEMBER(tessedit_debug_quality_metrics, false, + "Output data to debug file", this->params()), + BOOL_MEMBER(bland_unrej, false, "unrej potential with no chekcs", + this->params()), + double_MEMBER(quality_rowrej_pc, 1.1, + "good_quality_doc gte good char limit", this->params()), + BOOL_MEMBER(unlv_tilde_crunching, true, + "Mark v.bad words for tilde crunch", this->params()), + BOOL_MEMBER(hocr_font_info, false, "Add font info to hocr output", + this->params()), + BOOL_MEMBER(crunch_early_merge_tess_fails, true, "Before word crunch?", + this->params()), + BOOL_MEMBER(crunch_early_convert_bad_unlv_chs, false, + "Take out ~^ early?", this->params()), + double_MEMBER(crunch_terrible_rating, 80.0, "crunch rating lt this", + this->params()), + BOOL_MEMBER(crunch_terrible_garbage, true, "As it says", this->params()), + double_MEMBER(crunch_poor_garbage_cert, -9.0, + "crunch garbage cert lt this", this->params()), + double_MEMBER(crunch_poor_garbage_rate, 60, + "crunch garbage rating lt this", this->params()), + double_MEMBER(crunch_pot_poor_rate, 40, "POTENTIAL crunch rating lt this", + this->params()), + double_MEMBER(crunch_pot_poor_cert, -8.0, "POTENTIAL crunch cert lt this", + this->params()), + BOOL_MEMBER(crunch_pot_garbage, true, "POTENTIAL crunch garbage", + this->params()), + double_MEMBER(crunch_del_rating, 60, "POTENTIAL crunch rating lt this", + this->params()), + double_MEMBER(crunch_del_cert, -10.0, "POTENTIAL crunch cert lt this", + this->params()), + double_MEMBER(crunch_del_min_ht, 0.7, "Del if word ht lt xht x this", + this->params()), + double_MEMBER(crunch_del_max_ht, 3.0, "Del if word ht gt xht x this", + this->params()), + double_MEMBER(crunch_del_min_width, 3.0, + "Del if word width lt xht x this", this->params()), + double_MEMBER(crunch_del_high_word, 1.5, + "Del if word gt xht x this above bl", this->params()), + double_MEMBER(crunch_del_low_word, 0.5, + "Del if word gt xht x this below bl", this->params()), + double_MEMBER(crunch_small_outlines_size, 0.6, "Small if lt xht x this", + this->params()), + INT_MEMBER(crunch_rating_max, 10, "For adj length in rating per ch", + this->params()), + INT_MEMBER(crunch_pot_indicators, 1, + "How many potential indicators needed", this->params()), + BOOL_MEMBER(crunch_leave_ok_strings, true, "Don't touch sensible strings", + this->params()), + BOOL_MEMBER(crunch_accept_ok, true, "Use acceptability in okstring", + this->params()), + BOOL_MEMBER(crunch_leave_accept_strings, false, + "Don't pot crunch sensible strings", this->params()), + BOOL_MEMBER(crunch_include_numerals, false, "Fiddle alpha figures", + this->params()), + INT_MEMBER(crunch_leave_lc_strings, 4, + "Don't crunch words with long lower case strings", + this->params()), + INT_MEMBER(crunch_leave_uc_strings, 4, + "Don't crunch words with long lower case strings", + this->params()), + INT_MEMBER(crunch_long_repetitions, 3, + "Crunch words with long repetitions", this->params()), + INT_MEMBER(crunch_debug, 0, "As it says", this->params()), + INT_MEMBER(fixsp_non_noise_limit, 1, + "How many non-noise blbs either side?", this->params()), + double_MEMBER(fixsp_small_outlines_size, 0.28, "Small if lt xht x this", + this->params()), + BOOL_MEMBER(tessedit_prefer_joined_punct, false, + "Reward punctation joins", this->params()), + INT_MEMBER(fixsp_done_mode, 1, "What constitues done for spacing", + this->params()), + INT_MEMBER(debug_fix_space_level, 0, "Contextual fixspace debug", + this->params()), + STRING_MEMBER(numeric_punctuation, ".,", + "Punct. chs expected WITHIN numbers", this->params()), + INT_MEMBER(x_ht_acceptance_tolerance, 8, + "Max allowed deviation of blob top outside of font data", + this->params()), + INT_MEMBER(x_ht_min_change, 8, + "Min change in xht before actually trying it", this->params()), + INT_MEMBER(superscript_debug, 0, + "Debug level for sub & superscript fixer", this->params()), + double_MEMBER( + superscript_worse_certainty, 2.0, + "How many times worse " + "certainty does a superscript position glyph need to be for " + "us to try classifying it as a char with a different " + "baseline?", + this->params()), + double_MEMBER( + superscript_bettered_certainty, 0.97, + "What reduction in " + "badness do we think sufficient to choose a superscript " + "over what we'd thought. For example, a value of 0.6 means " + "we want to reduce badness of certainty by at least 40%", + this->params()), + double_MEMBER(superscript_scaledown_ratio, 0.4, + "A superscript scaled down more than this is unbelievably " + "small. For example, 0.3 means we expect the font size to " + "be no smaller than 30% of the text line font size.", + this->params()), + double_MEMBER(subscript_max_y_top, 0.5, + "Maximum top of a character measured as a multiple of " + "x-height above the baseline for us to reconsider whether " + "it's a subscript.", + this->params()), + double_MEMBER(superscript_min_y_bottom, 0.3, + "Minimum bottom of a character measured as a multiple of " + "x-height above the baseline for us to reconsider whether " + "it's a superscript.", + this->params()), + BOOL_MEMBER(tessedit_write_block_separators, false, + "Write block separators in output", this->params()), + BOOL_MEMBER(tessedit_write_rep_codes, false, "Write repetition char code", + this->params()), + BOOL_MEMBER(tessedit_write_unlv, false, "Write .unlv output file", + this->params()), + BOOL_MEMBER(tessedit_create_txt, false, "Write .txt output file", + this->params()), + BOOL_MEMBER(tessedit_create_hocr, false, "Write .html hOCR output file", + this->params()), + BOOL_MEMBER(tessedit_create_tsv, false, "Write .tsv output file", + this->params()), + BOOL_MEMBER(tessedit_create_pdf, false, "Write .pdf output file", + this->params()), + BOOL_MEMBER(textonly_pdf, false, "Create PDF with only one invisible text layer", + this->params()), + STRING_MEMBER(unrecognised_char, "|", + "Output char for unidentified blobs", this->params()), + INT_MEMBER(suspect_level, 99, "Suspect marker level", this->params()), + INT_MEMBER(suspect_space_level, 100, + "Min suspect level for rejecting spaces", this->params()), + INT_MEMBER(suspect_short_words, 2, + "Don't suspect dict wds longer than this", this->params()), + BOOL_MEMBER(suspect_constrain_1Il, false, "UNLV keep 1Il chars rejected", + this->params()), + double_MEMBER(suspect_rating_per_ch, 999.9, + "Don't touch bad rating limit", this->params()), + double_MEMBER(suspect_accept_rating, -999.9, "Accept good rating limit", + this->params()), + BOOL_MEMBER(tessedit_minimal_rejection, false, + "Only reject tess failures", this->params()), + BOOL_MEMBER(tessedit_zero_rejection, false, "Don't reject ANYTHING", + this->params()), + BOOL_MEMBER(tessedit_word_for_word, false, + "Make output have exactly one word per WERD", this->params()), + BOOL_MEMBER(tessedit_zero_kelvin_rejection, false, + "Don't reject ANYTHING AT ALL", this->params()), + BOOL_MEMBER(tessedit_consistent_reps, true, + "Force all rep chars the same", this->params()), + INT_MEMBER(tessedit_reject_mode, 0, "Rejection algorithm", + this->params()), + BOOL_MEMBER(tessedit_rejection_debug, false, "Adaption debug", + this->params()), + BOOL_MEMBER(tessedit_flip_0O, true, "Contextual 0O O0 flips", + this->params()), + double_MEMBER(tessedit_lower_flip_hyphen, 1.5, + "Aspect ratio dot/hyphen test", this->params()), + double_MEMBER(tessedit_upper_flip_hyphen, 1.8, + "Aspect ratio dot/hyphen test", this->params()), + BOOL_MEMBER(rej_trust_doc_dawg, false, + "Use DOC dawg in 11l conf. detector", this->params()), + BOOL_MEMBER(rej_1Il_use_dict_word, false, "Use dictword test", + this->params()), + BOOL_MEMBER(rej_1Il_trust_permuter_type, true, "Don't double check", + this->params()), + BOOL_MEMBER(rej_use_tess_accepted, true, "Individual rejection control", + this->params()), + BOOL_MEMBER(rej_use_tess_blanks, true, "Individual rejection control", + this->params()), + BOOL_MEMBER(rej_use_good_perm, true, "Individual rejection control", + this->params()), + BOOL_MEMBER(rej_use_sensible_wd, false, "Extend permuter check", + this->params()), + BOOL_MEMBER(rej_alphas_in_number_perm, false, "Extend permuter check", + this->params()), + double_MEMBER(rej_whole_of_mostly_reject_word_fract, 0.85, + "if >this fract", this->params()), + INT_MEMBER(tessedit_image_border, 2, "Rej blbs near image edge limit", + this->params()), + STRING_MEMBER(ok_repeated_ch_non_alphanum_wds, "-?*\075", + "Allow NN to unrej", this->params()), + STRING_MEMBER(conflict_set_I_l_1, "Il1[]", "Il1 conflict set", + this->params()), + INT_MEMBER(min_sane_x_ht_pixels, 8, "Reject any x-ht lt or eq than this", + this->params()), + BOOL_MEMBER(tessedit_create_boxfile, false, "Output text with boxes", + this->params()), + INT_MEMBER(tessedit_page_number, -1, + "-1 -> All pages" + " , else specifc page to process", + this->params()), + BOOL_MEMBER(tessedit_write_images, false, + "Capture the image from the IPE", this->params()), + BOOL_MEMBER(interactive_display_mode, false, "Run interactively?", + this->params()), + STRING_MEMBER(file_type, ".tif", "Filename extension", this->params()), + BOOL_MEMBER(tessedit_override_permuter, true, "According to dict_word", + this->params()), + INT_MEMBER(tessdata_manager_debug_level, 0, + "Debug level for" + " TessdataManager functions.", + this->params()), + STRING_MEMBER(tessedit_load_sublangs, "", + "List of languages to load with this one", this->params()), + BOOL_MEMBER(tessedit_use_primary_params_model, false, + "In multilingual mode use params model of the" + " primary language", + this->params()), + double_MEMBER(min_orientation_margin, 7.0, + "Min acceptable orientation margin", this->params()), + BOOL_MEMBER(textord_tabfind_show_vlines, false, "Debug line finding", + this->params()), + BOOL_MEMBER(textord_use_cjk_fp_model, FALSE, "Use CJK fixed pitch model", + this->params()), + BOOL_MEMBER(poly_allow_detailed_fx, false, + "Allow feature extractors to see the original outline", + this->params()), + BOOL_INIT_MEMBER(tessedit_init_config_only, false, + "Only initialize with the config file. Useful if the " + "instance is not going to be used for OCR but say only " + "for layout analysis.", + this->params()), + BOOL_MEMBER(textord_equation_detect, false, "Turn on equation detector", + this->params()), + BOOL_MEMBER(textord_tabfind_vertical_text, true, + "Enable vertical detection", this->params()), + BOOL_MEMBER(textord_tabfind_force_vertical_text, false, + "Force using vertical text page mode", this->params()), + double_MEMBER( + textord_tabfind_vertical_text_ratio, 0.5, + "Fraction of textlines deemed vertical to use vertical page " + "mode", + this->params()), + double_MEMBER( + textord_tabfind_aligned_gap_fraction, 0.75, + "Fraction of height used as a minimum gap for aligned blobs.", + this->params()), + INT_MEMBER(tessedit_parallelize, 0, "Run in parallel where possible", + this->params()), + BOOL_MEMBER(preserve_interword_spaces, false, + "Preserve multiple interword spaces", this->params()), + BOOL_MEMBER(include_page_breaks, FALSE, + "Include page separator string in output text after each " + "image/page.", + this->params()), + STRING_MEMBER(page_separator, "\f", + "Page separator (default is form feed control character)", + this->params()), + + // The following parameters were deprecated and removed from their + // original + // locations. The parameters are temporarily kept here to give Tesseract + // users a chance to updated their [lang].traineddata and config files + // without introducing failures during Tesseract initialization. + // TODO(ocr-team): remove these parameters from the code once we are + // reasonably sure that Tesseract users have updated their data files. + // + // BEGIN DEPRECATED PARAMETERS + BOOL_MEMBER(textord_tabfind_vertical_horizontal_mix, true, + "find horizontal lines such as headers in vertical page mode", + this->params()), + INT_MEMBER(tessedit_ok_mode, 5, "Acceptance decision algorithm", + this->params()), + BOOL_INIT_MEMBER(load_fixed_length_dawgs, true, + "Load fixed length dawgs" + " (e.g. for non-space delimited languages)", + this->params()), + INT_MEMBER(segment_debug, 0, "Debug the whole segmentation process", + this->params()), + BOOL_MEMBER(permute_debug, 0, "Debug char permutation process", + this->params()), + double_MEMBER(bestrate_pruning_factor, 2.0, + "Multiplying factor of" + " current best rate to prune other hypotheses", + this->params()), + BOOL_MEMBER(permute_script_word, 0, + "Turn on word script consistency permuter", this->params()), + BOOL_MEMBER(segment_segcost_rating, 0, + "incorporate segmentation cost in word rating?", + this->params()), + double_MEMBER(segment_reward_script, 0.95, + "Score multipler for script consistency within a word. " + "Being a 'reward' factor, it should be <= 1. " + "Smaller value implies bigger reward.", + this->params()), + BOOL_MEMBER(permute_fixed_length_dawg, 0, + "Turn on fixed-length phrasebook search permuter", + this->params()), + BOOL_MEMBER(permute_chartype_word, 0, + "Turn on character type (property) consistency permuter", + this->params()), + double_MEMBER(segment_reward_chartype, 0.97, + "Score multipler for char type consistency within a word. ", + this->params()), + double_MEMBER(segment_reward_ngram_best_choice, 0.99, + "Score multipler for ngram permuter's best choice" + " (only used in the Han script path).", + this->params()), + BOOL_MEMBER(ngram_permuter_activated, false, + "Activate character-level n-gram-based permuter", + this->params()), + BOOL_MEMBER(permute_only_top, false, "Run only the top choice permuter", + this->params()), + INT_MEMBER(language_model_fixed_length_choices_depth, 3, + "Depth of blob choice lists to explore" + " when fixed length dawgs are on", + this->params()), + BOOL_MEMBER(use_new_state_cost, FALSE, + "use new state cost heuristics for segmentation state" + " evaluation", + this->params()), + double_MEMBER(heuristic_segcost_rating_base, 1.25, + "base factor for adding segmentation cost into word rating." + "It's a multiplying factor, the larger the value above 1, " + "the bigger the effect of segmentation cost.", + this->params()), + double_MEMBER(heuristic_weight_rating, 1.0, + "weight associated with char rating in combined cost of" + "state", + this->params()), + double_MEMBER(heuristic_weight_width, 1000.0, + "weight associated with width evidence in combined cost of" + " state", + this->params()), + double_MEMBER(heuristic_weight_seamcut, 0.0, + "weight associated with seam cut in combined cost of state", + this->params()), + double_MEMBER(heuristic_max_char_wh_ratio, 2.0, + "max char width-to-height ratio allowed in segmentation", + this->params()), + BOOL_MEMBER(enable_new_segsearch, true, + "Enable new segmentation search path.", this->params()), + double_MEMBER(segsearch_max_fixed_pitch_char_wh_ratio, 2.0, + "Maximum character width-to-height ratio for" + " fixed-pitch fonts", + this->params()), + // END DEPRECATED PARAMETERS + + backup_config_file_(NULL), + pix_binary_(NULL), + cube_binary_(NULL), + pix_grey_(NULL), + pix_original_(NULL), + pix_thresholds_(NULL), + source_resolution_(0), + textord_(this), + right_to_left_(false), + scaled_color_(NULL), + scaled_factor_(-1), + deskew_(1.0f, 0.0f), + reskew_(1.0f, 0.0f), + most_recently_used_(this), + font_table_size_(0), +#ifndef NO_CUBE_BUILD + cube_cntxt_(NULL), + tess_cube_combiner_(NULL), +#endif + equ_detect_(NULL) { + } + + Tesseract::~Tesseract() { + Clear(); + pixDestroy(&pix_original_); + end_tesseract(); + sub_langs_.delete_data_pointers(); +#ifndef NO_CUBE_BUILD + // Delete cube objects. + if (cube_cntxt_ != NULL) { + delete cube_cntxt_; + cube_cntxt_ = NULL; + } + if (tess_cube_combiner_ != NULL) { + delete tess_cube_combiner_; + tess_cube_combiner_ = NULL; + } +#endif + } + + void Tesseract::Clear() { + pixDestroy(&pix_binary_); + pixDestroy(&cube_binary_); + pixDestroy(&pix_grey_); + pixDestroy(&pix_thresholds_); + pixDestroy(&scaled_color_); + deskew_ = FCOORD(1.0f, 0.0f); + reskew_ = FCOORD(1.0f, 0.0f); + splitter_.Clear(); + scaled_factor_ = -1; + for (int i = 0; i < sub_langs_.size(); ++i) + sub_langs_[i]->Clear(); + } + + void Tesseract::SetEquationDetect(EquationDetect* detector) { + equ_detect_ = detector; + equ_detect_->SetLangTesseract(this); + } + + // Clear all memory of adaption for this and all subclassifiers. + void Tesseract::ResetAdaptiveClassifier() { + ResetAdaptiveClassifierInternal(); + for (int i = 0; i < sub_langs_.size(); ++i) { + sub_langs_[i]->ResetAdaptiveClassifierInternal(); + } + } + + // Clear the document dictionary for this and all subclassifiers. + void Tesseract::ResetDocumentDictionary() { + getDict().ResetDocumentDictionary(); + for (int i = 0; i < sub_langs_.size(); ++i) { + sub_langs_[i]->getDict().ResetDocumentDictionary(); + } + } + + void Tesseract::SetBlackAndWhitelist() { + // Set the white and blacklists (if any) + unicharset.set_black_and_whitelist(tessedit_char_blacklist.string(), + tessedit_char_whitelist.string(), + tessedit_char_unblacklist.string()); + // Black and white lists should apply to all loaded classifiers. + for (int i = 0; i < sub_langs_.size(); ++i) { + sub_langs_[i]->unicharset.set_black_and_whitelist( + tessedit_char_blacklist.string(), tessedit_char_whitelist.string(), + tessedit_char_unblacklist.string()); + } + } + + // Perform steps to prepare underlying binary image/other data structures for + // page segmentation. + void Tesseract::PrepareForPageseg() { + textord_.set_use_cjk_fp_model(textord_use_cjk_fp_model); + pixDestroy(&cube_binary_); + cube_binary_ = pixClone(pix_binary()); + // Find the max splitter strategy over all langs. + ShiroRekhaSplitter::SplitStrategy max_pageseg_strategy = + static_cast( + static_cast(pageseg_devanagari_split_strategy)); + for (int i = 0; i < sub_langs_.size(); ++i) { + ShiroRekhaSplitter::SplitStrategy pageseg_strategy = + static_cast( + static_cast(sub_langs_[i]->pageseg_devanagari_split_strategy)); + if (pageseg_strategy > max_pageseg_strategy) + max_pageseg_strategy = pageseg_strategy; + // Clone the cube image to all the sub langs too. + pixDestroy(&sub_langs_[i]->cube_binary_); + sub_langs_[i]->cube_binary_ = pixClone(pix_binary()); + pixDestroy(&sub_langs_[i]->pix_binary_); + sub_langs_[i]->pix_binary_ = pixClone(pix_binary()); + } + // Perform shiro-rekha (top-line) splitting and replace the current image by + // the newly splitted image. + splitter_.set_orig_pix(pix_binary()); + splitter_.set_pageseg_split_strategy(max_pageseg_strategy); + if (splitter_.Split(true)) { + ASSERT_HOST(splitter_.splitted_image()); + pixDestroy(&pix_binary_); + pix_binary_ = pixClone(splitter_.splitted_image()); + } + } + + // Perform steps to prepare underlying binary image/other data structures for + // OCR. The current segmentation is required by this method. + // Note that this method resets pix_binary_ to the original binarized image, + // which may be different from the image actually used for OCR depending on the + // value of devanagari_ocr_split_strategy. + void Tesseract::PrepareForTessOCR(BLOCK_LIST* block_list, + Tesseract* osd_tess, OSResults* osr) { + // Find the max splitter strategy over all langs. + ShiroRekhaSplitter::SplitStrategy max_ocr_strategy = + static_cast( + static_cast(ocr_devanagari_split_strategy)); + for (int i = 0; i < sub_langs_.size(); ++i) { + ShiroRekhaSplitter::SplitStrategy ocr_strategy = + static_cast( + static_cast(sub_langs_[i]->ocr_devanagari_split_strategy)); + if (ocr_strategy > max_ocr_strategy) + max_ocr_strategy = ocr_strategy; + } + // Utilize the segmentation information available. + splitter_.set_segmentation_block_list(block_list); + splitter_.set_ocr_split_strategy(max_ocr_strategy); + // Run the splitter for OCR + bool split_for_ocr = splitter_.Split(false); + // Restore pix_binary to the binarized original pix for future reference. + ASSERT_HOST(splitter_.orig_pix()); + pixDestroy(&pix_binary_); + pix_binary_ = pixClone(splitter_.orig_pix()); + // If the pageseg and ocr strategies are different, refresh the block list + // (from the last SegmentImage call) with blobs from the real image to be used + // for OCR. + if (splitter_.HasDifferentSplitStrategies()) { + BLOCK block("", TRUE, 0, 0, 0, 0, pixGetWidth(pix_binary_), + pixGetHeight(pix_binary_)); + Pix* pix_for_ocr = split_for_ocr ? splitter_.splitted_image() : + splitter_.orig_pix(); + extract_edges(pix_for_ocr, &block); + splitter_.RefreshSegmentationWithNewBlobs(block.blob_list()); + } + // The splitter isn't needed any more after this, so save memory by clearing. + splitter_.Clear(); + } + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/tesseractclass.h b/3rdparty/hgOCR/include/ccmain/tesseractclass.h new file mode 100644 index 00000000..3355d107 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tesseractclass.h @@ -0,0 +1,1220 @@ +/////////////////////////////////////////////////////////////////////// +// File: tesseractclass.h +// Description: The Tesseract class. It holds/owns everything needed +// to run Tesseract on a single language, and also a set of +// sub-Tesseracts to run sub-languages. For thread safety, *every* +// global variable goes in here, directly, or indirectly. +// This makes it safe to run multiple Tesseracts in different +// threads in parallel, and keeps the different language +// instances separate. +// Author: Ray Smith +// Created: Fri Mar 07 08:17:01 PST 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_TESSERACTCLASS_H__ +#define TESSERACT_CCMAIN_TESSERACTCLASS_H__ + +#include "allheaders.h" +#include "control.h" +#include "docqual.h" +#include "devanagari_processing.h" +#include "genericvector.h" +#include "params.h" +#include "ocrclass.h" +#include "textord.h" +#include "wordrec.h" + +class BLOB_CHOICE_LIST_CLIST; +class BLOCK_LIST; +struct OSResults; +class PAGE_RES; +class PAGE_RES_IT; +struct Pix; +class ROW; +class SVMenuNode; +class TBOX; +class TO_BLOCK_LIST; +class WERD; +class WERD_CHOICE; +class WERD_RES; + + +// Top-level class for all tesseract global instance data. +// This class either holds or points to all data used by an instance +// of Tesseract, including the memory allocator. When this is +// complete, Tesseract will be thread-safe. UNTIL THEN, IT IS NOT! +// +// NOTE to developers: Do not create cyclic dependencies through this class! +// The directory dependency tree must remain a tree! The keep this clean, +// lower-level code (eg in ccutil, the bottom level) must never need to +// know about the content of a higher-level directory. +// The following scheme will grant the easiest access to lower-level +// global members without creating a cyclic dependency: +// +// Class Hierarchy (^ = inheritance): +// +// CCUtil (ccutil/ccutil.h) +// ^ Members include: UNICHARSET +// CUtil (cutil/cutil_class.h) +// ^ Members include: TBLOB*, TEXTBLOCK* +// CCStruct (ccstruct/ccstruct.h) +// ^ Members include: Image +// Classify (classify/classify.h) +// ^ Members include: Dict +// WordRec (wordrec/wordrec.h) +// ^ Members include: WERD*, DENORM* +// Tesseract (ccmain/tesseractclass.h) +// Members include: Pix*, CubeRecoContext*, +// TesseractCubeCombiner* +// +// Other important classes: +// +// TessBaseAPI (api/baseapi.h) +// Members include: BLOCK_LIST*, PAGE_RES*, +// Tesseract*, ImageThresholder* +// Dict (dict/dict.h) +// Members include: Image* (private) +// +// NOTE: that each level contains members that correspond to global +// data that is defined (and used) at that level, not necessarily where +// the type is defined so for instance: +// BOOL_VAR_H(textord_show_blobs, false, "Display unsorted blobs"); +// goes inside the Textord class, not the cc_util class. + +namespace tesseract { + + class ColumnFinder; +#ifndef NO_CUBE_BUILD + class CharSamp; + class CubeLineObject; + class CubeObject; + class CubeRecoContext; +#endif + class EquationDetect; + class Tesseract; +#ifndef NO_CUBE_BUILD + class TesseractCubeCombiner; +#endif + + // A collection of various variables for statistics and debugging. + struct TesseractStats { + TesseractStats() + : adaption_word_number(0), + doc_blob_quality(0), + doc_outline_errs(0), + doc_char_quality(0), + good_char_count(0), + doc_good_char_quality(0), + word_count(0), + dict_words(0), + tilde_crunch_written(false), + last_char_was_newline(true), + last_char_was_tilde(false), + write_results_empty_block(true) {} + + inT32 adaption_word_number; + inT16 doc_blob_quality; + inT16 doc_outline_errs; + inT16 doc_char_quality; + inT16 good_char_count; + inT16 doc_good_char_quality; + inT32 word_count; // count of word in the document + inT32 dict_words; // number of dicitionary words in the document + STRING dump_words_str; // accumulator used by dump_words() + // Flags used by write_results() + bool tilde_crunch_written; + bool last_char_was_newline; + bool last_char_was_tilde; + bool write_results_empty_block; + }; + + // Struct to hold all the pointers to relevant data for processing a word. + struct WordData { + WordData() : word(NULL), row(NULL), block(NULL), prev_word(NULL) {} + explicit WordData(const PAGE_RES_IT& page_res_it) + : word(page_res_it.word()), row(page_res_it.row()->row), + block(page_res_it.block()->block), prev_word(NULL) {} + WordData(BLOCK* block_in, ROW* row_in, WERD_RES* word_res) + : word(word_res), row(row_in), block(block_in), prev_word(NULL) {} + + WERD_RES* word; + ROW* row; + BLOCK* block; + WordData* prev_word; + PointerVector lang_words; + }; + + // Definition of a Tesseract WordRecognizer. The WordData provides the context + // of row/block, in_word holds an initialized, possibly pre-classified word, + // that the recognizer may or may not consume (but if so it sets *in_word=NULL) + // and produces one or more output words in out_words, which may be the + // consumed in_word, or may be generated independently. + // This api allows both a conventional tesseract classifier to work, or a + // line-level classifier that generates multiple words from a merged input. + typedef void (Tesseract::*WordRecognizer)(const WordData& word_data, + WERD_RES** in_word, + PointerVector* out_words); + + class Tesseract : public Wordrec { + public: + Tesseract(); + ~Tesseract(); + + // Clear as much used memory as possible without resetting the adaptive + // classifier or losing any other classifier data. + void Clear(); + // Clear all memory of adaption for this and all subclassifiers. + void ResetAdaptiveClassifier(); + // Clear the document dictionary for this and all subclassifiers. + void ResetDocumentDictionary(); + + // Set the equation detector. + void SetEquationDetect(EquationDetect* detector); + + // Simple accessors. + const FCOORD& reskew() const { + return reskew_; + } + // Destroy any existing pix and return a pointer to the pointer. + Pix** mutable_pix_binary() { + pixDestroy(&pix_binary_); + return &pix_binary_; + } + Pix* pix_binary() const { + return pix_binary_; + } + Pix* pix_grey() const { + return pix_grey_; + } + void set_pix_grey(Pix* grey_pix) { + pixDestroy(&pix_grey_); + pix_grey_ = grey_pix; + } + Pix* pix_original() const { return pix_original_; } + // Takes ownership of the given original_pix. + void set_pix_original(Pix* original_pix) { + pixDestroy(&pix_original_); + pix_original_ = original_pix; + } + // Returns a pointer to a Pix representing the best available (original) image + // of the page. Can be of any bit depth, but never color-mapped, as that has + // always been dealt with. Note that in grey and color, 0 is black and 255 is + // white. If the input was binary, then black is 1 and white is 0. + // To tell the difference pixGetDepth() will return 32, 8 or 1. + // In any case, the return value is a borrowed Pix, and should not be + // deleted or pixDestroyed. + Pix* BestPix() const { return pix_original_; } + void set_pix_thresholds(Pix* thresholds) { + pixDestroy(&pix_thresholds_); + pix_thresholds_ = thresholds; + } + int source_resolution() const { + return source_resolution_; + } + void set_source_resolution(int ppi) { + source_resolution_ = ppi; + } + int ImageWidth() const { + return pixGetWidth(pix_binary_); + } + int ImageHeight() const { + return pixGetHeight(pix_binary_); + } + Pix* scaled_color() const { + return scaled_color_; + } + int scaled_factor() const { + return scaled_factor_; + } + void SetScaledColor(int factor, Pix* color) { + scaled_factor_ = factor; + scaled_color_ = color; + } + const Textord& textord() const { + return textord_; + } + Textord* mutable_textord() { + return &textord_; + } + + bool right_to_left() const { + return right_to_left_; + } + int num_sub_langs() const { + return sub_langs_.size(); + } + Tesseract* get_sub_lang(int index) const { + return sub_langs_[index]; + } + // Returns true if any language uses Tesseract (as opposed to cube). + bool AnyTessLang() const { + if (tessedit_ocr_engine_mode != OEM_CUBE_ONLY) return true; + for (int i = 0; i < sub_langs_.size(); ++i) { + if (sub_langs_[i]->tessedit_ocr_engine_mode != OEM_CUBE_ONLY) + return true; + } + return false; + } + + void SetBlackAndWhitelist(); + + // Perform steps to prepare underlying binary image/other data structures for + // page segmentation. Uses the strategy specified in the global variable + // pageseg_devanagari_split_strategy for perform splitting while preparing for + // page segmentation. + void PrepareForPageseg(); + + // Perform steps to prepare underlying binary image/other data structures for + // Tesseract OCR. The current segmentation is required by this method. + // Uses the strategy specified in the global variable + // ocr_devanagari_split_strategy for performing splitting while preparing for + // Tesseract ocr. + void PrepareForTessOCR(BLOCK_LIST* block_list, + Tesseract* osd_tess, OSResults* osr); + + int SegmentPage(const STRING* input_file, BLOCK_LIST* blocks, + Tesseract* osd_tess, OSResults* osr); + void SetupWordScripts(BLOCK_LIST* blocks); + int AutoPageSeg(PageSegMode pageseg_mode, BLOCK_LIST* blocks, + TO_BLOCK_LIST* to_blocks, BLOBNBOX_LIST* diacritic_blobs, + Tesseract* osd_tess, OSResults* osr); + ColumnFinder* SetupPageSegAndDetectOrientation( + PageSegMode pageseg_mode, BLOCK_LIST* blocks, Tesseract* osd_tess, + OSResults* osr, TO_BLOCK_LIST* to_blocks, Pix** photo_mask_pix, + Pix** music_mask_pix); + // par_control.cpp + void PrerecAllWordsPar(const GenericVector& words); + + //// control.h ///////////////////////////////////////////////////////// + bool ProcessTargetWord(const TBOX& word_box, const TBOX& target_word_box, + const char* word_config, int pass); + // Sets up the words ready for whichever engine is to be run + void SetupAllWordsPassN(int pass_n, + const TBOX* target_word_box, + const char* word_config, + PAGE_RES* page_res, + GenericVector* words); + // Sets up the single word ready for whichever engine is to be run. + void SetupWordPassN(int pass_n, WordData* word); + // Runs word recognition on all the words. + bool RecogAllWordsPassN(int pass_n, ETEXT_DESC* monitor, + PAGE_RES_IT* pr_it, + GenericVector* words); + bool recog_all_words(PAGE_RES* page_res, + ETEXT_DESC* monitor, + const TBOX* target_word_box, + const char* word_config, + int dopasses); + void rejection_passes(PAGE_RES* page_res, + ETEXT_DESC* monitor, + const TBOX* target_word_box, + const char* word_config); + void bigram_correction_pass(PAGE_RES *page_res); + void blamer_pass(PAGE_RES* page_res); + // Sets script positions and detects smallcaps on all output words. + void script_pos_pass(PAGE_RES* page_res); + // Helper to recognize the word using the given (language-specific) tesseract. + // Returns positive if this recognizer found more new best words than the + // number kept from best_words. + int RetryWithLanguage(const WordData& word_data, + WordRecognizer recognizer, + WERD_RES** in_word, + PointerVector* best_words); + // Moves good-looking "noise"/diacritics from the reject list to the main + // blob list on the current word. Returns true if anything was done, and + // sets make_next_word_fuzzy if blob(s) were added to the end of the word. + bool ReassignDiacritics(int pass, PAGE_RES_IT* pr_it, + bool* make_next_word_fuzzy); + // Attempts to put noise/diacritic outlines into the blobs that they overlap. + // Input: a set of noisy outlines that probably belong to the real_word. + // Output: outlines that overlapped blobs are set to NULL and put back into + // the word, either in the blobs or in the reject list. + void AssignDiacriticsToOverlappingBlobs( + const GenericVector& outlines, int pass, WERD* real_word, + PAGE_RES_IT* pr_it, GenericVector* word_wanted, + GenericVector* overlapped_any_blob, + GenericVector* target_blobs); + // Attempts to assign non-overlapping outlines to their nearest blobs or + // make new blobs out of them. + void AssignDiacriticsToNewBlobs(const GenericVector& outlines, + int pass, WERD* real_word, PAGE_RES_IT* pr_it, + GenericVector* word_wanted, + GenericVector* target_blobs); + // Starting with ok_outlines set to indicate which outlines overlap the blob, + // chooses the optimal set (approximately) and returns true if any outlines + // are desired, in which case ok_outlines indicates which ones. + bool SelectGoodDiacriticOutlines(int pass, float certainty_threshold, + PAGE_RES_IT* pr_it, C_BLOB* blob, + const GenericVector& outlines, + int num_outlines, + GenericVector* ok_outlines); + // Classifies the given blob plus the outlines flagged by ok_outlines, undoes + // the inclusion of the outlines, and returns the certainty of the raw choice. + float ClassifyBlobPlusOutlines(const GenericVector& ok_outlines, + const GenericVector& outlines, + int pass_n, PAGE_RES_IT* pr_it, C_BLOB* blob, + STRING* best_str); + // Classifies the given blob (part of word_data->word->word) as an individual + // word, using languages, chopper etc, returning only the certainty of the + // best raw choice, and undoing all the work done to fake out the word. + float ClassifyBlobAsWord(int pass_n, PAGE_RES_IT* pr_it, C_BLOB* blob, + STRING* best_str, float* c2); + void classify_word_and_language(int pass_n, PAGE_RES_IT* pr_it, + WordData* word_data); + void classify_word_pass1(const WordData& word_data, + WERD_RES** in_word, + PointerVector* out_words); + void recog_pseudo_word(PAGE_RES* page_res, // blocks to check + TBOX &selection_box); + + void fix_rep_char(PAGE_RES_IT* page_res_it); + + ACCEPTABLE_WERD_TYPE acceptable_word_string(const UNICHARSET& char_set, + const char *s, + const char *lengths); + void match_word_pass_n(int pass_n, WERD_RES *word, ROW *row, BLOCK* block); + void classify_word_pass2(const WordData& word_data, + WERD_RES** in_word, + PointerVector* out_words); + void ReportXhtFixResult(bool accept_new_word, float new_x_ht, + WERD_RES* word, WERD_RES* new_word); + bool RunOldFixXht(WERD_RES *word, BLOCK* block, ROW *row); + bool TrainedXheightFix(WERD_RES *word, BLOCK* block, ROW *row); + // Runs recognition with the test baseline shift and x-height and returns true + // if there was an improvement in recognition result. + bool TestNewNormalization(int original_misfits, float baseline_shift, + float new_x_ht, WERD_RES *word, BLOCK* block, + ROW *row); + BOOL8 recog_interactive(PAGE_RES_IT* pr_it); + + // Set fonts of this word. + void set_word_fonts(WERD_RES *word); + void font_recognition_pass(PAGE_RES* page_res); + void dictionary_correction_pass(PAGE_RES* page_res); + BOOL8 check_debug_pt(WERD_RES *word, int location); + + //// superscript.cpp //////////////////////////////////////////////////// + bool SubAndSuperscriptFix(WERD_RES *word_res); + void GetSubAndSuperscriptCandidates(const WERD_RES *word, + int *num_rebuilt_leading, + ScriptPos *leading_pos, + float *leading_certainty, + int *num_rebuilt_trailing, + ScriptPos *trailing_pos, + float *trailing_certainty, + float *avg_certainty, + float *unlikely_threshold); + WERD_RES *TrySuperscriptSplits(int num_chopped_leading, + float leading_certainty, + ScriptPos leading_pos, + int num_chopped_trailing, + float trailing_certainty, + ScriptPos trailing_pos, + WERD_RES *word, + bool *is_good, + int *retry_leading, + int *retry_trailing); + bool BelievableSuperscript(bool debug, + const WERD_RES &word, + float certainty_threshold, + int *left_ok, + int *right_ok) const; + + //// cube_control.cpp /////////////////////////////////////////////////// +#ifndef NO_CUBE_BUILD + bool init_cube_objects(bool load_combiner, + TessdataManager *tessdata_manager); + // Iterates through tesseract's results and calls cube on each word, + // combining the results with the existing tesseract result. + void run_cube_combiner(PAGE_RES *page_res); + // Recognizes a single word using (only) cube. Compatible with + // Tesseract's classify_word_pass1/classify_word_pass2. + void cube_word_pass1(BLOCK* block, ROW *row, WERD_RES *word); + // Cube recognizer to recognize a single word as with classify_word_pass1 + // but also returns the cube object in case the combiner is needed. + CubeObject* cube_recognize_word(BLOCK* block, WERD_RES* word); + // Combines the cube and tesseract results for a single word, leaving the + // result in tess_word. + void cube_combine_word(CubeObject* cube_obj, WERD_RES* cube_word, + WERD_RES* tess_word); + // Call cube on the current word, and write the result to word. + // Sets up a fake result and returns false if something goes wrong. + bool cube_recognize(CubeObject *cube_obj, BLOCK* block, WERD_RES *word); + void fill_werd_res(const BoxWord& cube_box_word, + const char* cube_best_str, + WERD_RES* tess_werd_res); + bool extract_cube_state(CubeObject* cube_obj, int* num_chars, + Boxa** char_boxes, CharSamp*** char_samples); + bool create_cube_box_word(Boxa *char_boxes, int num_chars, + TBOX word_box, BoxWord* box_word); +#endif + //// output.h ////////////////////////////////////////////////////////// + + void output_pass(PAGE_RES_IT &page_res_it, const TBOX *target_word_box); + void write_results(PAGE_RES_IT &page_res_it, // full info + char newline_type, // type of newline + BOOL8 force_eol // override tilde crunch? + ); + void set_unlv_suspects(WERD_RES *word); + UNICHAR_ID get_rep_char(WERD_RES *word); // what char is repeated? + BOOL8 acceptable_number_string(const char *s, + const char *lengths); + inT16 count_alphanums(const WERD_CHOICE &word); + inT16 count_alphas(const WERD_CHOICE &word); + //// tessedit.h //////////////////////////////////////////////////////// + void read_config_file(const char *filename, SetParamConstraint constraint); + // Initialize for potentially a set of languages defined by the language + // string and recursively any additional languages required by any language + // traineddata file (via tessedit_load_sublangs in its config) that is loaded. + // See init_tesseract_internal for args. + int init_tesseract(const char *arg0, + const char *textbase, + const char *language, + OcrEngineMode oem, + char **configs, + int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_init_params); + int init_tesseract(const char *datapath, + const char *language, + OcrEngineMode oem) { + return init_tesseract(datapath, NULL, language, oem, + NULL, 0, NULL, NULL, false); + } + // Common initialization for a single language. + // arg0 is the datapath for the tessdata directory, which could be the + // path of the tessdata directory with no trailing /, or (if tessdata + // lives in the same directory as the executable, the path of the executable, + // hence the name arg0. + // textbase is an optional output file basename (used only for training) + // language is the language code to load. + // oem controls which engine(s) will operate on the image + // configs (argv) is an array of config filenames to load variables from. + // May be NULL. + // configs_size (argc) is the number of elements in configs. + // vars_vec is an optional vector of variables to set. + // vars_values is an optional corresponding vector of values for the variables + // in vars_vec. + // If set_only_init_params is true, then only the initialization variables + // will be set. + int init_tesseract_internal(const char *arg0, + const char *textbase, + const char *language, + OcrEngineMode oem, + char **configs, + int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_init_params); + + // Set the universal_id member of each font to be unique among all + // instances of the same font loaded. + void SetupUniversalFontIds(); + + int init_tesseract_lm(const char *arg0, + const char *textbase, + const char *language); + + void recognize_page(STRING& image_name); + void end_tesseract(); + + bool init_tesseract_lang_data(const char *arg0, + const char *textbase, + const char *language, + OcrEngineMode oem, + char **configs, + int configs_size, + const GenericVector *vars_vec, + const GenericVector *vars_values, + bool set_only_init_params); + + void ParseLanguageString(const char* lang_str, + GenericVector* to_load, + GenericVector* not_to_load); + + //// pgedit.h ////////////////////////////////////////////////////////// + SVMenuNode *build_menu_new(); +#ifndef GRAPHICS_DISABLED + void pgeditor_main(int width, int height, PAGE_RES* page_res); +#endif // GRAPHICS_DISABLED + void process_image_event( // action in image win + const SVEvent &event); + BOOL8 process_cmd_win_event( // UI command semantics + inT32 cmd_event, // which menu item? + char *new_value // any prompt data + ); + void debug_word(PAGE_RES* page_res, const TBOX &selection_box); + void do_re_display( + BOOL8(tesseract::Tesseract::*word_painter)(PAGE_RES_IT* pr_it)); + BOOL8 word_display(PAGE_RES_IT* pr_it); + BOOL8 word_bln_display(PAGE_RES_IT* pr_it); + BOOL8 word_blank_and_set_display(PAGE_RES_IT* pr_its); + BOOL8 word_set_display(PAGE_RES_IT* pr_it); + // #ifndef GRAPHICS_DISABLED + BOOL8 word_dumper(PAGE_RES_IT* pr_it); + // #endif // GRAPHICS_DISABLED + void blob_feature_display(PAGE_RES* page_res, const TBOX& selection_box); + //// reject.h ////////////////////////////////////////////////////////// + // make rej map for word + void make_reject_map(WERD_RES *word, ROW *row, inT16 pass); + BOOL8 one_ell_conflict(WERD_RES *word_res, BOOL8 update_map); + inT16 first_alphanum_index(const char *word, + const char *word_lengths); + inT16 first_alphanum_offset(const char *word, + const char *word_lengths); + inT16 alpha_count(const char *word, + const char *word_lengths); + BOOL8 word_contains_non_1_digit(const char *word, + const char *word_lengths); + void dont_allow_1Il(WERD_RES *word); + inT16 count_alphanums( //how many alphanums + WERD_RES *word); + void flip_0O(WERD_RES *word); + BOOL8 non_0_digit(const UNICHARSET& ch_set, UNICHAR_ID unichar_id); + BOOL8 non_O_upper(const UNICHARSET& ch_set, UNICHAR_ID unichar_id); + BOOL8 repeated_nonalphanum_wd(WERD_RES *word, ROW *row); + void nn_match_word( //Match a word + WERD_RES *word, + ROW *row); + void nn_recover_rejects(WERD_RES *word, ROW *row); + void set_done( //set done flag + WERD_RES *word, + inT16 pass); + inT16 safe_dict_word(const WERD_RES *werd_res); // is best_choice in dict? + void flip_hyphens(WERD_RES *word); + void reject_I_1_L(WERD_RES *word); + void reject_edge_blobs(WERD_RES *word); + void reject_mostly_rejects(WERD_RES *word); + //// adaptions.h /////////////////////////////////////////////////////// + BOOL8 word_adaptable( //should we adapt? + WERD_RES *word, + uinT16 mode); + + //// tfacepp.cpp /////////////////////////////////////////////////////// + void recog_word_recursive(WERD_RES* word); + void recog_word(WERD_RES *word); + void split_and_recog_word(WERD_RES* word); + void split_word(WERD_RES *word, + int split_pt, + WERD_RES **right_piece, + BlamerBundle **orig_blamer_bundle) const; + void join_words(WERD_RES *word, + WERD_RES *word2, + BlamerBundle *orig_bb) const; + //// fixspace.cpp /////////////////////////////////////////////////////// + BOOL8 digit_or_numeric_punct(WERD_RES *word, int char_position); + inT16 eval_word_spacing(WERD_RES_LIST &word_res_list); + void match_current_words(WERD_RES_LIST &words, ROW *row, BLOCK* block); + inT16 fp_eval_word_spacing(WERD_RES_LIST &word_res_list); + void fix_noisy_space_list(WERD_RES_LIST &best_perm, ROW *row, BLOCK* block); + void fix_fuzzy_space_list(WERD_RES_LIST &best_perm, ROW *row, BLOCK* block); + void fix_sp_fp_word(WERD_RES_IT &word_res_it, ROW *row, BLOCK* block); + void fix_fuzzy_spaces( //find fuzzy words + ETEXT_DESC *monitor, //progress monitor + inT32 word_count, //count of words in doc + PAGE_RES *page_res); + void dump_words(WERD_RES_LIST &perm, inT16 score, + inT16 mode, BOOL8 improved); + BOOL8 fixspace_thinks_word_done(WERD_RES *word); + inT16 worst_noise_blob(WERD_RES *word_res, float *worst_noise_score); + float blob_noise_score(TBLOB *blob); + void break_noisiest_blob_word(WERD_RES_LIST &words); + //// docqual.cpp //////////////////////////////////////////////////////// + GARBAGE_LEVEL garbage_word(WERD_RES *word, BOOL8 ok_dict_word); + BOOL8 potential_word_crunch(WERD_RES *word, + GARBAGE_LEVEL garbage_level, + BOOL8 ok_dict_word); + void tilde_crunch(PAGE_RES_IT &page_res_it); + void unrej_good_quality_words( //unreject potential + PAGE_RES_IT &page_res_it); + void doc_and_block_rejection( //reject big chunks + PAGE_RES_IT &page_res_it, + BOOL8 good_quality_doc); + void quality_based_rejection(PAGE_RES_IT &page_res_it, + BOOL8 good_quality_doc); + void convert_bad_unlv_chs(WERD_RES *word_res); + void tilde_delete(PAGE_RES_IT &page_res_it); + inT16 word_blob_quality(WERD_RES *word, ROW *row); + void word_char_quality(WERD_RES *word, ROW *row, inT16 *match_count, + inT16 *accepted_match_count); + void unrej_good_chs(WERD_RES *word, ROW *row); + inT16 count_outline_errs(char c, inT16 outline_count); + inT16 word_outline_errs(WERD_RES *word); + BOOL8 terrible_word_crunch(WERD_RES *word, GARBAGE_LEVEL garbage_level); + CRUNCH_MODE word_deletable(WERD_RES *word, inT16 &delete_mode); + inT16 failure_count(WERD_RES *word); + BOOL8 noise_outlines(TWERD *word); + //// pagewalk.cpp /////////////////////////////////////////////////////// + void + process_selected_words( + PAGE_RES* page_res, // blocks to check + //function to call + TBOX & selection_box, + BOOL8(tesseract::Tesseract::*word_processor)(PAGE_RES_IT* pr_it)); + //// tessbox.cpp /////////////////////////////////////////////////////// + void tess_add_doc_word( //test acceptability + WERD_CHOICE *word_choice //after context + ); + void tess_segment_pass_n(int pass_n, WERD_RES *word); + bool tess_acceptable_word(WERD_RES *word); + + //// applybox.cpp ////////////////////////////////////////////////////// + // Applies the box file based on the image name fname, and resegments + // the words in the block_list (page), with: + // blob-mode: one blob per line in the box file, words as input. + // word/line-mode: one blob per space-delimited unit after the #, and one word + // per line in the box file. (See comment above for box file format.) + // If find_segmentation is true, (word/line mode) then the classifier is used + // to re-segment words/lines to match the space-delimited truth string for + // each box. In this case, the input box may be for a word or even a whole + // text line, and the output words will contain multiple blobs corresponding + // to the space-delimited input string. + // With find_segmentation false, no classifier is needed, but the chopper + // can still be used to correctly segment touching characters with the help + // of the input boxes. + // In the returned PAGE_RES, the WERD_RES are setup as they would be returned + // from normal classification, ie. with a word, chopped_word, rebuild_word, + // seam_array, denorm, box_word, and best_state, but NO best_choice or + // raw_choice, as they would require a UNICHARSET, which we aim to avoid. + // Instead, the correct_text member of WERD_RES is set, and this may be later + // converted to a best_choice using CorrectClassifyWords. CorrectClassifyWords + // is not required before calling ApplyBoxTraining. + PAGE_RES* ApplyBoxes(const STRING& fname, bool find_segmentation, + BLOCK_LIST *block_list); + + // Any row xheight that is significantly different from the median is set + // to the median. + void PreenXHeights(BLOCK_LIST *block_list); + + // Builds a PAGE_RES from the block_list in the way required for ApplyBoxes: + // All fuzzy spaces are removed, and all the words are maximally chopped. + PAGE_RES* SetupApplyBoxes(const GenericVector& boxes, + BLOCK_LIST *block_list); + // Tests the chopper by exhaustively running chop_one_blob. + // The word_res will contain filled chopped_word, seam_array, denorm, + // box_word and best_state for the maximally chopped word. + void MaximallyChopWord(const GenericVector& boxes, + BLOCK* block, ROW* row, WERD_RES* word_res); + // Gather consecutive blobs that match the given box into the best_state + // and corresponding correct_text. + // Fights over which box owns which blobs are settled by pre-chopping and + // applying the blobs to box or next_box with the least non-overlap. + // Returns false if the box was in error, which can only be caused by + // failing to find an appropriate blob for a box. + // This means that occasionally, blobs may be incorrectly segmented if the + // chopper fails to find a suitable chop point. + bool ResegmentCharBox(PAGE_RES* page_res, const TBOX *prev_box, + const TBOX& box, const TBOX& next_box, + const char* correct_text); + // Consume all source blobs that strongly overlap the given box, + // putting them into a new word, with the correct_text label. + // Fights over which box owns which blobs are settled by + // applying the blobs to box or next_box with the least non-overlap. + // Returns false if the box was in error, which can only be caused by + // failing to find an overlapping blob for a box. + bool ResegmentWordBox(BLOCK_LIST *block_list, + const TBOX& box, const TBOX& next_box, + const char* correct_text); + // Resegments the words by running the classifier in an attempt to find the + // correct segmentation that produces the required string. + void ReSegmentByClassification(PAGE_RES* page_res); + // Converts the space-delimited string of utf8 text to a vector of UNICHAR_ID. + // Returns false if an invalid UNICHAR_ID is encountered. + bool ConvertStringToUnichars(const char* utf8, + GenericVector* class_ids); + // Resegments the word to achieve the target_text from the classifier. + // Returns false if the re-segmentation fails. + // Uses brute-force combination of up to kMaxGroupSize adjacent blobs, and + // applies a full search on the classifier results to find the best classified + // segmentation. As a compromise to obtain better recall, 1-1 ambigiguity + // substitutions ARE used. + bool FindSegmentation(const GenericVector& target_text, + WERD_RES* word_res); + // Recursive helper to find a match to the target_text (from text_index + // position) in the choices (from choices_pos position). + // Choices is an array of GenericVectors, of length choices_length, with each + // element representing a starting position in the word, and the + // GenericVector holding classification results for a sequence of consecutive + // blobs, with index 0 being a single blob, index 1 being 2 blobs etc. + void SearchForText(const GenericVector* choices, + int choices_pos, int choices_length, + const GenericVector& target_text, + int text_index, + float rating, GenericVector* segmentation, + float* best_rating, GenericVector* best_segmentation); + // Counts up the labelled words and the blobs within. + // Deletes all unused or emptied words, counting the unused ones. + // Resets W_BOL and W_EOL flags correctly. + // Builds the rebuild_word and rebuilds the box_word. + void TidyUp(PAGE_RES* page_res); + // Logs a bad box by line in the box file and box coords. + void ReportFailedBox(int boxfile_lineno, TBOX box, const char *box_ch, + const char *err_msg); + // Creates a fake best_choice entry in each WERD_RES with the correct text. + void CorrectClassifyWords(PAGE_RES* page_res); + // Call LearnWord to extract features for labelled blobs within each word. + // Features are stored in an internal buffer. + void ApplyBoxTraining(const STRING& fontname, PAGE_RES* page_res); + + //// fixxht.cpp /////////////////////////////////////////////////////// + // Returns the number of misfit blob tops in this word. + int CountMisfitTops(WERD_RES *word_res); + // Returns a new x-height in pixels (original image coords) that is + // maximally compatible with the result in word_res. + // Returns 0.0f if no x-height is found that is better than the current + // estimate. + float ComputeCompatibleXheight(WERD_RES *word_res, float* baseline_shift); + //// Data members /////////////////////////////////////////////////////// + // TODO(ocr-team): Find and remove obsolete parameters. + BOOL_VAR_H(tessedit_resegment_from_boxes, false, + "Take segmentation and labeling from box file"); + BOOL_VAR_H(tessedit_resegment_from_line_boxes, false, + "Conversion of word/line box file to char box file"); + BOOL_VAR_H(tessedit_train_from_boxes, false, + "Generate training data from boxed chars"); + BOOL_VAR_H(tessedit_make_boxes_from_boxes, false, + "Generate more boxes from boxed chars"); + BOOL_VAR_H(tessedit_dump_pageseg_images, false, + "Dump intermediate images made during page segmentation"); + INT_VAR_H(tessedit_pageseg_mode, PSM_SINGLE_BLOCK, + "Page seg mode: 0=osd only, 1=auto+osd, 2=auto, 3=col, 4=block," + " 5=line, 6=word, 7=char" + " (Values from PageSegMode enum in publictypes.h)"); + INT_VAR_H(tessedit_ocr_engine_mode, tesseract::OEM_TESSERACT_ONLY, + "Which OCR engine(s) to run (Tesseract, Cube, both). Defaults" + " to loading and running only Tesseract (no Cube, no combiner)." + " (Values from OcrEngineMode enum in tesseractclass.h)"); + STRING_VAR_H(tessedit_char_blacklist, "", + "Blacklist of chars not to recognize"); + STRING_VAR_H(tessedit_char_whitelist, "", + "Whitelist of chars to recognize"); + STRING_VAR_H(tessedit_char_unblacklist, "", + "List of chars to override tessedit_char_blacklist"); + BOOL_VAR_H(tessedit_ambigs_training, false, + "Perform training for ambiguities"); + INT_VAR_H(pageseg_devanagari_split_strategy, + tesseract::ShiroRekhaSplitter::NO_SPLIT, + "Whether to use the top-line splitting process for Devanagari " + "documents while performing page-segmentation."); + INT_VAR_H(ocr_devanagari_split_strategy, + tesseract::ShiroRekhaSplitter::NO_SPLIT, + "Whether to use the top-line splitting process for Devanagari " + "documents while performing ocr."); + STRING_VAR_H(tessedit_write_params_to_file, "", + "Write all parameters to the given file."); + BOOL_VAR_H(tessedit_adaption_debug, false, + "Generate and print debug information for adaption"); + INT_VAR_H(bidi_debug, 0, "Debug level for BiDi"); + INT_VAR_H(applybox_debug, 1, "Debug level"); + INT_VAR_H(applybox_page, 0, "Page number to apply boxes from"); + STRING_VAR_H(applybox_exposure_pattern, ".exp", + "Exposure value follows this pattern in the image" + " filename. The name of the image files are expected" + " to be in the form [lang].[fontname].exp[num].tif"); + BOOL_VAR_H(applybox_learn_chars_and_char_frags_mode, false, + "Learn both character fragments (as is done in the" + " special low exposure mode) as well as unfragmented" + " characters."); + BOOL_VAR_H(applybox_learn_ngrams_mode, false, + "Each bounding box is assumed to contain ngrams. Only" + " learn the ngrams whose outlines overlap horizontally."); + BOOL_VAR_H(tessedit_display_outwords, false, "Draw output words"); + BOOL_VAR_H(tessedit_dump_choices, false, "Dump char choices"); + BOOL_VAR_H(tessedit_timing_debug, false, "Print timing stats"); + BOOL_VAR_H(tessedit_fix_fuzzy_spaces, true, + "Try to improve fuzzy spaces"); + BOOL_VAR_H(tessedit_unrej_any_wd, false, + "Don't bother with word plausibility"); + BOOL_VAR_H(tessedit_fix_hyphens, true, "Crunch double hyphens?"); + BOOL_VAR_H(tessedit_redo_xheight, true, "Check/Correct x-height"); + BOOL_VAR_H(tessedit_enable_doc_dict, true, + "Add words to the document dictionary"); + BOOL_VAR_H(tessedit_debug_fonts, false, "Output font info per char"); + BOOL_VAR_H(tessedit_debug_block_rejection, false, "Block and Row stats"); + BOOL_VAR_H(tessedit_enable_bigram_correction, true, + "Enable correction based on the word bigram dictionary."); + BOOL_VAR_H(tessedit_enable_dict_correction, false, + "Enable single word correction based on the dictionary."); + INT_VAR_H(tessedit_bigram_debug, 0, "Amount of debug output for bigram " + "correction."); + BOOL_VAR_H(enable_noise_removal, true, + "Remove and conditionally reassign small outlines when they" + " confuse layout analysis, determining diacritics vs noise"); + INT_VAR_H(debug_noise_removal, 0, "Debug reassignment of small outlines"); + // Worst (min) certainty, for which a diacritic is allowed to make the base + // character worse and still be included. + double_VAR_H(noise_cert_basechar, -8.0, "Hingepoint for base char certainty"); + // Worst (min) certainty, for which a non-overlapping diacritic is allowed to + // make the base character worse and still be included. + double_VAR_H(noise_cert_disjoint, -2.5, "Hingepoint for disjoint certainty"); + // Worst (min) certainty, for which a diacritic is allowed to make a new + // stand-alone blob. + double_VAR_H(noise_cert_punc, -2.5, "Threshold for new punc char certainty"); + // Factor of certainty margin for adding diacritics to not count as worse. + double_VAR_H(noise_cert_factor, 0.375, + "Scaling on certainty diff from Hingepoint"); + INT_VAR_H(noise_maxperblob, 8, "Max diacritics to apply to a blob"); + INT_VAR_H(noise_maxperword, 16, "Max diacritics to apply to a word"); + INT_VAR_H(debug_x_ht_level, 0, "Reestimate debug"); + BOOL_VAR_H(debug_acceptable_wds, false, "Dump word pass/fail chk"); + STRING_VAR_H(chs_leading_punct, "('`\"", "Leading punctuation"); + STRING_VAR_H(chs_trailing_punct1, ").,;:?!", "1st Trailing punctuation"); + STRING_VAR_H(chs_trailing_punct2, ")'`\"", "2nd Trailing punctuation"); + double_VAR_H(quality_rej_pc, 0.08, "good_quality_doc lte rejection limit"); + double_VAR_H(quality_blob_pc, 0.0, "good_quality_doc gte good blobs limit"); + double_VAR_H(quality_outline_pc, 1.0, + "good_quality_doc lte outline error limit"); + double_VAR_H(quality_char_pc, 0.95, "good_quality_doc gte good char limit"); + INT_VAR_H(quality_min_initial_alphas_reqd, 2, "alphas in a good word"); + INT_VAR_H(tessedit_tess_adaption_mode, 0x27, + "Adaptation decision algorithm for tess"); + BOOL_VAR_H(tessedit_minimal_rej_pass1, false, + "Do minimal rejection on pass 1 output"); + BOOL_VAR_H(tessedit_test_adaption, false, "Test adaption criteria"); + BOOL_VAR_H(tessedit_matcher_log, false, "Log matcher activity"); + INT_VAR_H(tessedit_test_adaption_mode, 3, + "Adaptation decision algorithm for tess"); + BOOL_VAR_H(test_pt, false, "Test for point"); + double_VAR_H(test_pt_x, 99999.99, "xcoord"); + double_VAR_H(test_pt_y, 99999.99, "ycoord"); + INT_VAR_H(paragraph_debug_level, 0, "Print paragraph debug info."); + BOOL_VAR_H(paragraph_text_based, true, + "Run paragraph detection on the post-text-recognition " + "(more accurate)"); + INT_VAR_H(cube_debug_level, 1, "Print cube debug info."); + STRING_VAR_H(outlines_odd, "%| ", "Non standard number of outlines"); + STRING_VAR_H(outlines_2, "ij!?%\":;", "Non standard number of outlines"); + BOOL_VAR_H(docqual_excuse_outline_errs, false, + "Allow outline errs in unrejection?"); + BOOL_VAR_H(tessedit_good_quality_unrej, true, + "Reduce rejection on good docs"); + BOOL_VAR_H(tessedit_use_reject_spaces, true, "Reject spaces?"); + double_VAR_H(tessedit_reject_doc_percent, 65.00, + "%rej allowed before rej whole doc"); + double_VAR_H(tessedit_reject_block_percent, 45.00, + "%rej allowed before rej whole block"); + double_VAR_H(tessedit_reject_row_percent, 40.00, + "%rej allowed before rej whole row"); + double_VAR_H(tessedit_whole_wd_rej_row_percent, 70.00, + "Number of row rejects in whole word rejects" + "which prevents whole row rejection"); + BOOL_VAR_H(tessedit_preserve_blk_rej_perfect_wds, true, + "Only rej partially rejected words in block rejection"); + BOOL_VAR_H(tessedit_preserve_row_rej_perfect_wds, true, + "Only rej partially rejected words in row rejection"); + BOOL_VAR_H(tessedit_dont_blkrej_good_wds, false, + "Use word segmentation quality metric"); + BOOL_VAR_H(tessedit_dont_rowrej_good_wds, false, + "Use word segmentation quality metric"); + INT_VAR_H(tessedit_preserve_min_wd_len, 2, + "Only preserve wds longer than this"); + BOOL_VAR_H(tessedit_row_rej_good_docs, true, + "Apply row rejection to good docs"); + double_VAR_H(tessedit_good_doc_still_rowrej_wd, 1.1, + "rej good doc wd if more than this fraction rejected"); + BOOL_VAR_H(tessedit_reject_bad_qual_wds, true, + "Reject all bad quality wds"); + BOOL_VAR_H(tessedit_debug_doc_rejection, false, "Page stats"); + BOOL_VAR_H(tessedit_debug_quality_metrics, false, + "Output data to debug file"); + BOOL_VAR_H(bland_unrej, false, "unrej potential with no chekcs"); + double_VAR_H(quality_rowrej_pc, 1.1, + "good_quality_doc gte good char limit"); + BOOL_VAR_H(unlv_tilde_crunching, true, + "Mark v.bad words for tilde crunch"); + BOOL_VAR_H(hocr_font_info, false, + "Add font info to hocr output"); + BOOL_VAR_H(crunch_early_merge_tess_fails, true, "Before word crunch?"); + BOOL_VAR_H(crunch_early_convert_bad_unlv_chs, false, "Take out ~^ early?"); + double_VAR_H(crunch_terrible_rating, 80.0, "crunch rating lt this"); + BOOL_VAR_H(crunch_terrible_garbage, true, "As it says"); + double_VAR_H(crunch_poor_garbage_cert, -9.0, + "crunch garbage cert lt this"); + double_VAR_H(crunch_poor_garbage_rate, 60, "crunch garbage rating lt this"); + double_VAR_H(crunch_pot_poor_rate, 40, "POTENTIAL crunch rating lt this"); + double_VAR_H(crunch_pot_poor_cert, -8.0, "POTENTIAL crunch cert lt this"); + BOOL_VAR_H(crunch_pot_garbage, true, "POTENTIAL crunch garbage"); + double_VAR_H(crunch_del_rating, 60, "POTENTIAL crunch rating lt this"); + double_VAR_H(crunch_del_cert, -10.0, "POTENTIAL crunch cert lt this"); + double_VAR_H(crunch_del_min_ht, 0.7, "Del if word ht lt xht x this"); + double_VAR_H(crunch_del_max_ht, 3.0, "Del if word ht gt xht x this"); + double_VAR_H(crunch_del_min_width, 3.0, "Del if word width lt xht x this"); + double_VAR_H(crunch_del_high_word, 1.5, + "Del if word gt xht x this above bl"); + double_VAR_H(crunch_del_low_word, 0.5, "Del if word gt xht x this below bl"); + double_VAR_H(crunch_small_outlines_size, 0.6, "Small if lt xht x this"); + INT_VAR_H(crunch_rating_max, 10, "For adj length in rating per ch"); + INT_VAR_H(crunch_pot_indicators, 1, "How many potential indicators needed"); + BOOL_VAR_H(crunch_leave_ok_strings, true, "Don't touch sensible strings"); + BOOL_VAR_H(crunch_accept_ok, true, "Use acceptability in okstring"); + BOOL_VAR_H(crunch_leave_accept_strings, false, + "Don't pot crunch sensible strings"); + BOOL_VAR_H(crunch_include_numerals, false, "Fiddle alpha figures"); + INT_VAR_H(crunch_leave_lc_strings, 4, + "Don't crunch words with long lower case strings"); + INT_VAR_H(crunch_leave_uc_strings, 4, + "Don't crunch words with long lower case strings"); + INT_VAR_H(crunch_long_repetitions, 3, "Crunch words with long repetitions"); + INT_VAR_H(crunch_debug, 0, "As it says"); + INT_VAR_H(fixsp_non_noise_limit, 1, + "How many non-noise blbs either side?"); + double_VAR_H(fixsp_small_outlines_size, 0.28, "Small if lt xht x this"); + BOOL_VAR_H(tessedit_prefer_joined_punct, false, "Reward punctation joins"); + INT_VAR_H(fixsp_done_mode, 1, "What constitues done for spacing"); + INT_VAR_H(debug_fix_space_level, 0, "Contextual fixspace debug"); + STRING_VAR_H(numeric_punctuation, ".,", + "Punct. chs expected WITHIN numbers"); + INT_VAR_H(x_ht_acceptance_tolerance, 8, + "Max allowed deviation of blob top outside of font data"); + INT_VAR_H(x_ht_min_change, 8, "Min change in xht before actually trying it"); + INT_VAR_H(superscript_debug, 0, "Debug level for sub & superscript fixer"); + double_VAR_H(superscript_worse_certainty, 2.0, "How many times worse " + "certainty does a superscript position glyph need to be for us " + "to try classifying it as a char with a different baseline?"); + double_VAR_H(superscript_bettered_certainty, 0.97, "What reduction in " + "badness do we think sufficient to choose a superscript over " + "what we'd thought. For example, a value of 0.6 means we want " + "to reduce badness of certainty by 40%"); + double_VAR_H(superscript_scaledown_ratio, 0.4, + "A superscript scaled down more than this is unbelievably " + "small. For example, 0.3 means we expect the font size to " + "be no smaller than 30% of the text line font size."); + double_VAR_H(subscript_max_y_top, 0.5, + "Maximum top of a character measured as a multiple of x-height " + "above the baseline for us to reconsider whether it's a " + "subscript."); + double_VAR_H(superscript_min_y_bottom, 0.3, + "Minimum bottom of a character measured as a multiple of " + "x-height above the baseline for us to reconsider whether it's " + "a superscript."); + BOOL_VAR_H(tessedit_write_block_separators, false, + "Write block separators in output"); + BOOL_VAR_H(tessedit_write_rep_codes, false, + "Write repetition char code"); + BOOL_VAR_H(tessedit_write_unlv, false, "Write .unlv output file"); + BOOL_VAR_H(tessedit_create_txt, false, "Write .txt output file"); + BOOL_VAR_H(tessedit_create_hocr, false, "Write .html hOCR output file"); + BOOL_VAR_H(tessedit_create_tsv, false, "Write .tsv output file"); + BOOL_VAR_H(tessedit_create_pdf, false, "Write .pdf output file"); + BOOL_VAR_H(textonly_pdf, false, "Create PDF with only one invisible text layer"); + STRING_VAR_H(unrecognised_char, "|", + "Output char for unidentified blobs"); + INT_VAR_H(suspect_level, 99, "Suspect marker level"); + INT_VAR_H(suspect_space_level, 100, + "Min suspect level for rejecting spaces"); + INT_VAR_H(suspect_short_words, 2, "Don't Suspect dict wds longer than this"); + BOOL_VAR_H(suspect_constrain_1Il, false, "UNLV keep 1Il chars rejected"); + double_VAR_H(suspect_rating_per_ch, 999.9, "Don't touch bad rating limit"); + double_VAR_H(suspect_accept_rating, -999.9, "Accept good rating limit"); + BOOL_VAR_H(tessedit_minimal_rejection, false, "Only reject tess failures"); + BOOL_VAR_H(tessedit_zero_rejection, false, "Don't reject ANYTHING"); + BOOL_VAR_H(tessedit_word_for_word, false, + "Make output have exactly one word per WERD"); + BOOL_VAR_H(tessedit_zero_kelvin_rejection, false, + "Don't reject ANYTHING AT ALL"); + BOOL_VAR_H(tessedit_consistent_reps, true, "Force all rep chars the same"); + INT_VAR_H(tessedit_reject_mode, 0, "Rejection algorithm"); + BOOL_VAR_H(tessedit_rejection_debug, false, "Adaption debug"); + BOOL_VAR_H(tessedit_flip_0O, true, "Contextual 0O O0 flips"); + double_VAR_H(tessedit_lower_flip_hyphen, 1.5, + "Aspect ratio dot/hyphen test"); + double_VAR_H(tessedit_upper_flip_hyphen, 1.8, + "Aspect ratio dot/hyphen test"); + BOOL_VAR_H(rej_trust_doc_dawg, false, "Use DOC dawg in 11l conf. detector"); + BOOL_VAR_H(rej_1Il_use_dict_word, false, "Use dictword test"); + BOOL_VAR_H(rej_1Il_trust_permuter_type, true, "Don't double check"); + BOOL_VAR_H(rej_use_tess_accepted, true, "Individual rejection control"); + BOOL_VAR_H(rej_use_tess_blanks, true, "Individual rejection control"); + BOOL_VAR_H(rej_use_good_perm, true, "Individual rejection control"); + BOOL_VAR_H(rej_use_sensible_wd, false, "Extend permuter check"); + BOOL_VAR_H(rej_alphas_in_number_perm, false, "Extend permuter check"); + double_VAR_H(rej_whole_of_mostly_reject_word_fract, 0.85, "if >this fract"); + INT_VAR_H(tessedit_image_border, 2, "Rej blbs near image edge limit"); + STRING_VAR_H(ok_repeated_ch_non_alphanum_wds, "-?*\075", + "Allow NN to unrej"); + STRING_VAR_H(conflict_set_I_l_1, "Il1[]", "Il1 conflict set"); + INT_VAR_H(min_sane_x_ht_pixels, 8, "Reject any x-ht lt or eq than this"); + BOOL_VAR_H(tessedit_create_boxfile, false, "Output text with boxes"); + INT_VAR_H(tessedit_page_number, -1, + "-1 -> All pages, else specifc page to process"); + BOOL_VAR_H(tessedit_write_images, false, "Capture the image from the IPE"); + BOOL_VAR_H(interactive_display_mode, false, "Run interactively?"); + STRING_VAR_H(file_type, ".tif", "Filename extension"); + BOOL_VAR_H(tessedit_override_permuter, true, "According to dict_word"); + INT_VAR_H(tessdata_manager_debug_level, 0, + "Debug level for TessdataManager functions."); + STRING_VAR_H(tessedit_load_sublangs, "", + "List of languages to load with this one"); + BOOL_VAR_H(tessedit_use_primary_params_model, false, + "In multilingual mode use params model of the primary language"); + // Min acceptable orientation margin (difference in scores between top and 2nd + // choice in OSResults::orientations) to believe the page orientation. + double_VAR_H(min_orientation_margin, 7.0, + "Min acceptable orientation margin"); + BOOL_VAR_H(textord_tabfind_show_vlines, false, "Debug line finding"); + BOOL_VAR_H(textord_use_cjk_fp_model, FALSE, "Use CJK fixed pitch model"); + BOOL_VAR_H(poly_allow_detailed_fx, false, + "Allow feature extractors to see the original outline"); + BOOL_VAR_H(tessedit_init_config_only, false, + "Only initialize with the config file. Useful if the instance is " + "not going to be used for OCR but say only for layout analysis."); + BOOL_VAR_H(textord_equation_detect, false, "Turn on equation detector"); + BOOL_VAR_H(textord_tabfind_vertical_text, true, "Enable vertical detection"); + BOOL_VAR_H(textord_tabfind_force_vertical_text, false, + "Force using vertical text page mode"); + double_VAR_H(textord_tabfind_vertical_text_ratio, 0.5, + "Fraction of textlines deemed vertical to use vertical page " + "mode"); + double_VAR_H(textord_tabfind_aligned_gap_fraction, 0.75, + "Fraction of height used as a minimum gap for aligned blobs."); + INT_VAR_H(tessedit_parallelize, 0, "Run in parallel where possible"); + BOOL_VAR_H(preserve_interword_spaces, false, + "Preserve multiple interword spaces"); + BOOL_VAR_H(include_page_breaks, false, + "Include page separator string in output text after each " + "image/page."); + STRING_VAR_H(page_separator, "\f", + "Page separator (default is form feed control character)"); + + // The following parameters were deprecated and removed from their original + // locations. The parameters are temporarily kept here to give Tesseract + // users a chance to updated their [lang].traineddata and config files + // without introducing failures during Tesseract initialization. + // TODO(ocr-team): remove these parameters from the code once we are + // reasonably sure that Tesseract users have updated their data files. + // + // BEGIN DEPRECATED PARAMETERS + BOOL_VAR_H(textord_tabfind_vertical_horizontal_mix, true, + "find horizontal lines such as headers in vertical page mode"); + INT_VAR_H(tessedit_ok_mode, 5, "Acceptance decision algorithm"); + BOOL_VAR_H(load_fixed_length_dawgs, true, "Load fixed length" + " dawgs (e.g. for non-space delimited languages)"); + INT_VAR_H(segment_debug, 0, "Debug the whole segmentation process"); + BOOL_VAR_H(permute_debug, 0, "char permutation debug"); + double_VAR_H(bestrate_pruning_factor, 2.0, "Multiplying factor of" + " current best rate to prune other hypotheses"); + BOOL_VAR_H(permute_script_word, 0, + "Turn on word script consistency permuter"); + BOOL_VAR_H(segment_segcost_rating, 0, + "incorporate segmentation cost in word rating?"); + double_VAR_H(segment_reward_script, 0.95, + "Score multipler for script consistency within a word. " + "Being a 'reward' factor, it should be <= 1. " + "Smaller value implies bigger reward."); + BOOL_VAR_H(permute_fixed_length_dawg, 0, + "Turn on fixed-length phrasebook search permuter"); + BOOL_VAR_H(permute_chartype_word, 0, + "Turn on character type (property) consistency permuter"); + double_VAR_H(segment_reward_chartype, 0.97, + "Score multipler for char type consistency within a word. "); + double_VAR_H(segment_reward_ngram_best_choice, 0.99, + "Score multipler for ngram permuter's best choice" + " (only used in the Han script path)."); + BOOL_VAR_H(ngram_permuter_activated, false, + "Activate character-level n-gram-based permuter"); + BOOL_VAR_H(permute_only_top, false, "Run only the top choice permuter"); + INT_VAR_H(language_model_fixed_length_choices_depth, 3, + "Depth of blob choice lists to explore" + " when fixed length dawgs are on"); + BOOL_VAR_H(use_new_state_cost, FALSE, + "use new state cost heuristics for segmentation state evaluation"); + double_VAR_H(heuristic_segcost_rating_base, 1.25, + "base factor for adding segmentation cost into word rating." + "It's a multiplying factor, the larger the value above 1, " + "the bigger the effect of segmentation cost."); + double_VAR_H(heuristic_weight_rating, 1, + "weight associated with char rating in combined cost of state"); + double_VAR_H(heuristic_weight_width, 1000.0, + "weight associated with width evidence in combined cost of" + " state"); + double_VAR_H(heuristic_weight_seamcut, 0, + "weight associated with seam cut in combined cost of state"); + double_VAR_H(heuristic_max_char_wh_ratio, 2.0, + "max char width-to-height ratio allowed in segmentation"); + BOOL_VAR_H(enable_new_segsearch, false, + "Enable new segmentation search path."); + double_VAR_H(segsearch_max_fixed_pitch_char_wh_ratio, 2.0, + "Maximum character width-to-height ratio for" + "fixed pitch fonts"); + // END DEPRECATED PARAMETERS + + //// ambigsrecog.cpp ///////////////////////////////////////////////////////// + FILE *init_recog_training(const STRING &fname); + void recog_training_segmented(const STRING &fname, + PAGE_RES *page_res, + volatile ETEXT_DESC *monitor, + FILE *output_file); + void ambigs_classify_and_output(const char *label, + PAGE_RES_IT* pr_it, + FILE *output_file); + +#ifndef NO_CUBE_BUILD + inline CubeRecoContext *GetCubeRecoContext() { return cube_cntxt_; } +#endif + + private: + // The filename of a backup config file. If not null, then we currently + // have a temporary debug config file loaded, and backup_config_file_ + // will be loaded, and set to null when debug is complete. + const char* backup_config_file_; + // The filename of a config file to read when processing a debug word. + STRING word_config_; + // Image used for input to layout analysis and tesseract recognition. + // May be modified by the ShiroRekhaSplitter to eliminate the top-line. + Pix* pix_binary_; + // Unmodified image used for input to cube. Always valid. + Pix* cube_binary_; + // Grey-level input image if the input was not binary, otherwise NULL. + Pix* pix_grey_; + // Original input image. Color if the input was color. + Pix* pix_original_; + // Thresholds that were used to generate the thresholded image from grey. + Pix* pix_thresholds_; + // Input image resolution after any scaling. The resolution is not well + // transmitted by operations on Pix, so we keep an independent record here. + int source_resolution_; + // The shiro-rekha splitter object which is used to split top-lines in + // Devanagari words to provide a better word and grapheme segmentation. + ShiroRekhaSplitter splitter_; + // Page segmentation/layout + Textord textord_; + // True if the primary language uses right_to_left reading order. + bool right_to_left_; + Pix* scaled_color_; + int scaled_factor_; + FCOORD deskew_; + FCOORD reskew_; + TesseractStats stats_; + // Sub-languages to be tried in addition to this. + GenericVector sub_langs_; + // Most recently used Tesseract out of this and sub_langs_. The default + // language for the next word. + Tesseract* most_recently_used_; + // The size of the font table, ie max possible font id + 1. + int font_table_size_; +#ifndef NO_CUBE_BUILD + // Cube objects. + CubeRecoContext* cube_cntxt_; + TesseractCubeCombiner *tess_cube_combiner_; +#endif + // Equation detector. Note: this pointer is NOT owned by the class. + EquationDetect* equ_detect_; + }; + +} // namespace tesseract + + +#endif // TESSERACT_CCMAIN_TESSERACTCLASS_H__ diff --git a/3rdparty/hgOCR/include/ccmain/tessvars.cpp b/3rdparty/hgOCR/include/ccmain/tessvars.cpp new file mode 100644 index 00000000..db9a1b5b --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessvars.cpp @@ -0,0 +1,24 @@ +/********************************************************************** + * File: tessvars.cpp (Formerly tessvars.c) + * Description: Variables and other globals for tessedit. + * Author: Ray Smith + * Created: Mon Apr 13 13:13:23 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include + +#include "tessvars.h" + +FILE *debug_fp = stderr; // write debug stuff here diff --git a/3rdparty/hgOCR/include/ccmain/tessvars.h b/3rdparty/hgOCR/include/ccmain/tessvars.h new file mode 100644 index 00000000..326efef5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tessvars.h @@ -0,0 +1,27 @@ +/********************************************************************** + * File: tessvars.h (Formerly tessvars.h) + * Description: Variables and other globals for tessedit. + * Author: Ray Smith + * Created: Mon Apr 13 13:13:23 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSVARS_H +#define TESSVARS_H + +#include + + +extern FILE *debug_fp; // write debug stuff here +#endif diff --git a/3rdparty/hgOCR/include/ccmain/tfacepp.cpp b/3rdparty/hgOCR/include/ccmain/tfacepp.cpp new file mode 100644 index 00000000..c7cb53c7 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/tfacepp.cpp @@ -0,0 +1,330 @@ +/********************************************************************** + * File: tfacepp.cpp (Formerly tface++.c) + * Description: C++ side of the C/C++ Tess/Editor interface. + * Author: Ray Smith + * Created: Thu Apr 23 15:39:23 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#pragma warning(disable:4305) // int/float warnings +#pragma warning(disable:4800) // int/bool warnings +#endif + +#include + +#include "blamer.h" +#include "errcode.h" +#include "ratngs.h" +#include "reject.h" +#include "tesseractclass.h" +#include "werd.h" + +#define MAX_UNDIVIDED_LENGTH 24 + + + + /********************************************************************** + * recog_word + * + * Convert the word to tess form and pass it to the tess segmenter. + * Convert the output back to editor form. + **********************************************************************/ +namespace tesseract { + void Tesseract::recog_word(WERD_RES *word) { + if (wordrec_skip_no_truth_words && (word->blamer_bundle == NULL || + word->blamer_bundle->incorrect_result_reason() == IRR_NO_TRUTH)) { + if (classify_debug_level) tprintf("No truth for word - skipping\n"); + word->tess_failed = true; + return; + } + ASSERT_HOST(!word->chopped_word->blobs.empty()); + recog_word_recursive(word); + word->SetupBoxWord(); + if (word->best_choice->length() != word->box_word->length()) { + tprintf("recog_word ASSERT FAIL String:\"%s\"; " + "Strlen=%d; #Blobs=%d\n", + word->best_choice->debug_string().string(), + word->best_choice->length(), word->box_word->length()); + } + ASSERT_HOST(word->best_choice->length() == word->box_word->length()); + // Check that the ratings matrix size matches the sum of all the + // segmentation states. + if (!word->StatesAllValid()) { + tprintf("Not all words have valid states relative to ratings matrix!!"); + word->DebugWordChoices(true, NULL); + ASSERT_HOST(word->StatesAllValid()); + } + if (tessedit_override_permuter) { + /* Override the permuter type if a straight dictionary check disagrees. */ + uinT8 perm_type = word->best_choice->permuter(); + if ((perm_type != SYSTEM_DAWG_PERM) && + (perm_type != FREQ_DAWG_PERM) && (perm_type != USER_DAWG_PERM)) { + uinT8 real_dict_perm_type = dict_word(*word->best_choice); + if (((real_dict_perm_type == SYSTEM_DAWG_PERM) || + (real_dict_perm_type == FREQ_DAWG_PERM) || + (real_dict_perm_type == USER_DAWG_PERM)) && + (alpha_count(word->best_choice->unichar_string().string(), + word->best_choice->unichar_lengths().string()) > 0)) { + word->best_choice->set_permuter(real_dict_perm_type); // use dict perm + } + } + if (tessedit_rejection_debug && + perm_type != word->best_choice->permuter()) { + tprintf("Permuter Type Flipped from %d to %d\n", + perm_type, word->best_choice->permuter()); + } + } + // Factored out from control.cpp + ASSERT_HOST((word->best_choice == NULL) == (word->raw_choice == NULL)); + if (word->best_choice == NULL || word->best_choice->length() == 0 || + static_cast(strspn(word->best_choice->unichar_string().string(), + " ")) == word->best_choice->length()) { + word->tess_failed = true; + word->reject_map.initialise(word->box_word->length()); + word->reject_map.rej_word_tess_failure(); + } + else { + word->tess_failed = false; + } + } + + + /********************************************************************** + * recog_word_recursive + * + * Convert the word to tess form and pass it to the tess segmenter. + * Convert the output back to editor form. + **********************************************************************/ + void Tesseract::recog_word_recursive(WERD_RES *word) { + int word_length = word->chopped_word->NumBlobs(); // no of blobs + if (word_length > MAX_UNDIVIDED_LENGTH) { + return split_and_recog_word(word); + } + cc_recog(word); + word_length = word->rebuild_word->NumBlobs(); // No of blobs in output. + + // Do sanity checks and minor fixes on best_choice. + if (word->best_choice->length() > word_length) { + word->best_choice->make_bad(); // should never happen + tprintf("recog_word: Discarded long string \"%s\"" + " (%d characters vs %d blobs)\n", + word->best_choice->unichar_string().string(), + word->best_choice->length(), word_length); + tprintf("Word is at:"); + word->word->bounding_box().print(); + } + if (word->best_choice->length() < word_length) { + UNICHAR_ID space_id = unicharset.unichar_to_id(" "); + while (word->best_choice->length() < word_length) { + word->best_choice->append_unichar_id(space_id, 1, 0.0, + word->best_choice->certainty()); + } + } + } + + + /********************************************************************** + * split_and_recog_word + * + * Split the word into 2 smaller pieces at the largest gap. + * Recognize the pieces and stick the results back together. + **********************************************************************/ + void Tesseract::split_and_recog_word(WERD_RES *word) { + // Find the biggest blob gap in the chopped_word. + int bestgap = -MAX_INT32; + int split_index = 0; + for (int b = 1; b < word->chopped_word->NumBlobs(); ++b) { + TBOX prev_box = word->chopped_word->blobs[b - 1]->bounding_box(); + TBOX blob_box = word->chopped_word->blobs[b]->bounding_box(); + int gap = blob_box.left() - prev_box.right(); + if (gap > bestgap) { + bestgap = gap; + split_index = b; + } + } + ASSERT_HOST(split_index > 0); + + WERD_RES *word2 = NULL; + BlamerBundle *orig_bb = NULL; + split_word(word, split_index, &word2, &orig_bb); + + // Recognize the first part of the word. + recog_word_recursive(word); + // Recognize the second part of the word. + recog_word_recursive(word2); + + join_words(word, word2, orig_bb); + } + + + /********************************************************************** + * split_word + * + * Split a given WERD_RES in place into two smaller words for recognition. + * split_pt is the index of the first blob to go in the second word. + * The underlying word is left alone, only the TWERD (and subsequent data) + * are split up. orig_blamer_bundle is set to the original blamer bundle, + * and will now be owned by the caller. New blamer bundles are forged for the + * two pieces. + **********************************************************************/ + void Tesseract::split_word(WERD_RES *word, + int split_pt, + WERD_RES **right_piece, + BlamerBundle **orig_blamer_bundle) const { + ASSERT_HOST(split_pt > 0 && split_pt < word->chopped_word->NumBlobs()); + + // Save a copy of the blamer bundle so we can try to reconstruct it below. + BlamerBundle *orig_bb = + word->blamer_bundle ? new BlamerBundle(*word->blamer_bundle) : NULL; + + WERD_RES *word2 = new WERD_RES(*word); + + // blow away the copied chopped_word, as we want to work with + // the blobs from the input chopped_word so seam_arrays can be merged. + TWERD *chopped = word->chopped_word; + TWERD *chopped2 = new TWERD; + chopped2->blobs.reserve(chopped->NumBlobs() - split_pt); + for (int i = split_pt; i < chopped->NumBlobs(); ++i) { + chopped2->blobs.push_back(chopped->blobs[i]); + } + chopped->blobs.truncate(split_pt); + word->chopped_word = NULL; + delete word2->chopped_word; + word2->chopped_word = NULL; + + const UNICHARSET &unicharset = *word->uch_set; + word->ClearResults(); + word2->ClearResults(); + word->chopped_word = chopped; + word2->chopped_word = chopped2; + word->SetupBasicsFromChoppedWord(unicharset); + word2->SetupBasicsFromChoppedWord(unicharset); + + // Try to adjust the blamer bundle. + if (orig_bb != NULL) { + // TODO(rays) Looks like a leak to me. + // orig_bb should take, rather than copy. + word->blamer_bundle = new BlamerBundle(); + word2->blamer_bundle = new BlamerBundle(); + orig_bb->SplitBundle(chopped->blobs.back()->bounding_box().right(), + word2->chopped_word->blobs[0]->bounding_box().left(), + wordrec_debug_blamer, + word->blamer_bundle, word2->blamer_bundle); + } + + *right_piece = word2; + *orig_blamer_bundle = orig_bb; + } + + + /********************************************************************** + * join_words + * + * The opposite of split_word(): + * join word2 (including any recognized data / seam array / etc) + * onto the right of word and then delete word2. + * Also, if orig_bb is provided, stitch it back into word. + **********************************************************************/ + void Tesseract::join_words(WERD_RES *word, + WERD_RES *word2, + BlamerBundle *orig_bb) const { + TBOX prev_box = word->chopped_word->blobs.back()->bounding_box(); + TBOX blob_box = word2->chopped_word->blobs[0]->bounding_box(); + // Tack the word2 outputs onto the end of the word outputs. + word->chopped_word->blobs += word2->chopped_word->blobs; + word->rebuild_word->blobs += word2->rebuild_word->blobs; + word2->chopped_word->blobs.clear(); + word2->rebuild_word->blobs.clear(); + TPOINT split_pt; + split_pt.x = (prev_box.right() + blob_box.left()) / 2; + split_pt.y = (prev_box.top() + prev_box.bottom() + + blob_box.top() + blob_box.bottom()) / 4; + // Move the word2 seams onto the end of the word1 seam_array. + // Since the seam list is one element short, an empty seam marking the + // end of the last blob in the first word is needed first. + word->seam_array.push_back(new SEAM(0.0f, split_pt)); + word->seam_array += word2->seam_array; + word2->seam_array.truncate(0); + // Fix widths and gaps. + word->blob_widths += word2->blob_widths; + word->blob_gaps += word2->blob_gaps; + // Fix the ratings matrix. + int rat1 = word->ratings->dimension(); + int rat2 = word2->ratings->dimension(); + word->ratings->AttachOnCorner(word2->ratings); + ASSERT_HOST(word->ratings->dimension() == rat1 + rat2); + word->best_state += word2->best_state; + // Append the word choices. + *word->raw_choice += *word2->raw_choice; + + // How many alt choices from each should we try to get? + const int kAltsPerPiece = 2; + // When do we start throwing away extra alt choices? + const int kTooManyAltChoices = 100; + + // Construct the cartesian product of the best_choices of word(1) and word2. + WERD_CHOICE_LIST joined_choices; + WERD_CHOICE_IT jc_it(&joined_choices); + WERD_CHOICE_IT bc1_it(&word->best_choices); + WERD_CHOICE_IT bc2_it(&word2->best_choices); + int num_word1_choices = word->best_choices.length(); + int total_joined_choices = num_word1_choices; + // Nota Bene: For the main loop here, we operate only on the 2nd and greater + // word2 choices, and put them in the joined_choices list. The 1st word2 + // choice gets added to the original word1 choices in-place after we have + // finished with them. + int bc2_index = 1; + for (bc2_it.forward(); !bc2_it.at_first(); bc2_it.forward(), ++bc2_index) { + if (total_joined_choices >= kTooManyAltChoices && + bc2_index > kAltsPerPiece) + break; + int bc1_index = 0; + for (bc1_it.move_to_first(); bc1_index < num_word1_choices; + ++bc1_index, bc1_it.forward()) { + if (total_joined_choices >= kTooManyAltChoices && + bc1_index > kAltsPerPiece) + break; + WERD_CHOICE *wc = new WERD_CHOICE(*bc1_it.data()); + *wc += *bc2_it.data(); + jc_it.add_after_then_move(wc); + ++total_joined_choices; + } + } + // Now that we've filled in as many alternates as we want, paste the best + // choice for word2 onto the original word alt_choices. + bc1_it.move_to_first(); + bc2_it.move_to_first(); + for (bc1_it.mark_cycle_pt(); !bc1_it.cycled_list(); bc1_it.forward()) { + *bc1_it.data() += *bc2_it.data(); + } + bc1_it.move_to_last(); + bc1_it.add_list_after(&joined_choices); + + // Restore the pointer to original blamer bundle and combine blamer + // information recorded in the splits. + if (orig_bb != NULL) { + orig_bb->JoinBlames(*word->blamer_bundle, *word2->blamer_bundle, + wordrec_debug_blamer); + delete word->blamer_bundle; + word->blamer_bundle = orig_bb; + } + word->SetupBoxWord(); + word->reject_map.initialise(word->box_word->length()); + delete word2; + } + + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccmain/thresholder.cpp b/3rdparty/hgOCR/include/ccmain/thresholder.cpp new file mode 100644 index 00000000..2156875d --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/thresholder.cpp @@ -0,0 +1,334 @@ +/////////////////////////////////////////////////////////////////////// +// File: thresholder.cpp +// Description: Base API for thresolding images in tesseract. +// Author: Ray Smith +// Created: Mon May 12 11:28:15 PDT 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "allheaders.h" + +#include "thresholder.h" + +#include + +#include "otsuthr.h" + +#include "openclwrapper.h" + +namespace tesseract { + + ImageThresholder::ImageThresholder() + : pix_(NULL), + image_width_(0), image_height_(0), + pix_channels_(0), pix_wpl_(0), + scale_(1), yres_(300), estimated_res_(300) { + SetRectangle(0, 0, 0, 0); + } + + ImageThresholder::~ImageThresholder() { + Clear(); + } + + // Destroy the Pix if there is one, freeing memory. + void ImageThresholder::Clear() { + pixDestroy(&pix_); + } + + // Return true if no image has been set. + bool ImageThresholder::IsEmpty() const { + return pix_ == NULL; + } + + // SetImage makes a copy of all the image data, so it may be deleted + // immediately after this call. + // Greyscale of 8 and color of 24 or 32 bits per pixel may be given. + // Palette color images will not work properly and must be converted to + // 24 bit. + // Binary images of 1 bit per pixel may also be given but they must be + // byte packed with the MSB of the first byte being the first pixel, and a + // one pixel is WHITE. For binary images set bytes_per_pixel=0. + void ImageThresholder::SetImage(const unsigned char* imagedata, + int width, int height, + int bytes_per_pixel, int bytes_per_line) { + int bpp = bytes_per_pixel * 8; + if (bpp == 0) bpp = 1; + Pix* pix = pixCreate(width, height, bpp == 24 ? 32 : bpp); + l_uint32* data = pixGetData(pix); + int wpl = pixGetWpl(pix); + switch (bpp) { + case 1: + for (int y = 0; y < height; ++y, data += wpl, imagedata += bytes_per_line) { + for (int x = 0; x < width; ++x) { + if (imagedata[x / 8] & (0x80 >> (x % 8))) + CLEAR_DATA_BIT(data, x); + else + SET_DATA_BIT(data, x); + } + } + break; + + case 8: + // Greyscale just copies the bytes in the right order. + for (int y = 0; y < height; ++y, data += wpl, imagedata += bytes_per_line) { + for (int x = 0; x < width; ++x) + SET_DATA_BYTE(data, x, imagedata[x]); + } + break; + + case 24: + // Put the colors in the correct places in the line buffer. + for (int y = 0; y < height; ++y, imagedata += bytes_per_line) { + for (int x = 0; x < width; ++x, ++data) { + SET_DATA_BYTE(data, COLOR_RED, imagedata[3 * x]); + SET_DATA_BYTE(data, COLOR_GREEN, imagedata[3 * x + 1]); + SET_DATA_BYTE(data, COLOR_BLUE, imagedata[3 * x + 2]); + } + } + break; + + case 32: + // Maintain byte order consistency across different endianness. + for (int y = 0; y < height; ++y, imagedata += bytes_per_line, data += wpl) { + for (int x = 0; x < width; ++x) { + data[x] = (imagedata[x * 4] << 24) | (imagedata[x * 4 + 1] << 16) | + (imagedata[x * 4 + 2] << 8) | imagedata[x * 4 + 3]; + } + } + break; + + default: + tprintf("Cannot convert RAW image to Pix with bpp = %d\n", bpp); + } + pixSetYRes(pix, 300); + SetImage(pix); + pixDestroy(&pix); + } + + // Store the coordinates of the rectangle to process for later use. + // Doesn't actually do any thresholding. + void ImageThresholder::SetRectangle(int left, int top, int width, int height) { + rect_left_ = left; + rect_top_ = top; + rect_width_ = width; + rect_height_ = height; + } + + // Get enough parameters to be able to rebuild bounding boxes in the + // original image (not just within the rectangle). + // Left and top are enough with top-down coordinates, but + // the height of the rectangle and the image are needed for bottom-up. + void ImageThresholder::GetImageSizes(int* left, int* top, + int* width, int* height, + int* imagewidth, int* imageheight) { + *left = rect_left_; + *top = rect_top_; + *width = rect_width_; + *height = rect_height_; + *imagewidth = image_width_; + *imageheight = image_height_; + } + + // Pix vs raw, which to use? Pix is the preferred input for efficiency, + // since raw buffers are copied. + // SetImage for Pix clones its input, so the source pix may be pixDestroyed + // immediately after, but may not go away until after the Thresholder has + // finished with it. + void ImageThresholder::SetImage(const Pix* pix) { + if (pix_ != NULL) + pixDestroy(&pix_); + Pix* src = const_cast(pix); + int depth; + pixGetDimensions(src, &image_width_, &image_height_, &depth); + // Convert the image as necessary so it is one of binary, plain RGB, or + // 8 bit with no colormap. Guarantee that we always end up with our own copy, + // not just a clone of the input. + if (pixGetColormap(src)) { + Pix* tmp = pixRemoveColormap(src, REMOVE_CMAP_BASED_ON_SRC); + depth = pixGetDepth(tmp); + if (depth > 1 && depth < 8) { + pix_ = pixConvertTo8(tmp, false); + pixDestroy(&tmp); + } + else { + pix_ = tmp; + } + } + else if (depth > 1 && depth < 8) { + pix_ = pixConvertTo8(src, false); + } + else { + pix_ = pixCopy(NULL, src); + } + depth = pixGetDepth(pix_); + pix_channels_ = depth / 8; + pix_wpl_ = pixGetWpl(pix_); + scale_ = 1; + estimated_res_ = yres_ = pixGetYRes(pix_); + Init(); + } + + // Threshold the source image as efficiently as possible to the output Pix. + // Creates a Pix and sets pix to point to the resulting pointer. + // Caller must use pixDestroy to free the created Pix. + void ImageThresholder::ThresholdToPix(PageSegMode pageseg_mode, Pix** pix) { + if (pix_channels_ == 0) { + // We have a binary image, but it still has to be copied, as this API + // allows the caller to modify the output. + Pix* original = GetPixRect(); + *pix = pixCopy(NULL, original); + pixDestroy(&original); + } + else { + OtsuThresholdRectToPix(pix_, pix); + } + } + + // Gets a pix that contains an 8 bit threshold value at each pixel. The + // returned pix may be an integer reduction of the binary image such that + // the scale factor may be inferred from the ratio of the sizes, even down + // to the extreme of a 1x1 pixel thresholds image. + // Ideally the 8 bit threshold should be the exact threshold used to generate + // the binary image in ThresholdToPix, but this is not a hard constraint. + // Returns NULL if the input is binary. PixDestroy after use. + Pix* ImageThresholder::GetPixRectThresholds() { + if (IsBinary()) return NULL; + Pix* pix_grey = GetPixRectGrey(); + int width = pixGetWidth(pix_grey); + int height = pixGetHeight(pix_grey); + int* thresholds; + int* hi_values; + OtsuThreshold(pix_grey, 0, 0, width, height, &thresholds, &hi_values); + pixDestroy(&pix_grey); + Pix* pix_thresholds = pixCreate(width, height, 8); + int threshold = thresholds[0] > 0 ? thresholds[0] : 128; + pixSetAllArbitrary(pix_thresholds, threshold); + delete[] thresholds; + delete[] hi_values; + return pix_thresholds; + } + + // Common initialization shared between SetImage methods. + void ImageThresholder::Init() { + SetRectangle(0, 0, image_width_, image_height_); + } + + // Get a clone/copy of the source image rectangle. + // The returned Pix must be pixDestroyed. + // This function will be used in the future by the page layout analysis, and + // the layout analysis that uses it will only be available with Leptonica, + // so there is no raw equivalent. + Pix* ImageThresholder::GetPixRect() { + if (IsFullImage()) { + // Just clone the whole thing. + return pixClone(pix_); + } + else { + // Crop to the given rectangle. + Box* box = boxCreate(rect_left_, rect_top_, rect_width_, rect_height_); + Pix* cropped = pixClipRectangle(pix_, box, NULL); + boxDestroy(&box); + return cropped; + } + } + + // Get a clone/copy of the source image rectangle, reduced to greyscale, + // and at the same resolution as the output binary. + // The returned Pix must be pixDestroyed. + // Provided to the classifier to extract features from the greyscale image. + Pix* ImageThresholder::GetPixRectGrey() { + Pix* pix = GetPixRect(); // May have to be reduced to grey. + int depth = pixGetDepth(pix); + if (depth != 8) { + Pix* result = depth < 8 ? pixConvertTo8(pix, false) + : pixConvertRGBToLuminance(pix); + pixDestroy(&pix); + return result; + } + return pix; + } + + // Otsu thresholds the rectangle, taking the rectangle from *this. + void ImageThresholder::OtsuThresholdRectToPix(Pix* src_pix, + Pix** out_pix) const { + PERF_COUNT_START("OtsuThresholdRectToPix") + int* thresholds; + int* hi_values; + + int num_channels = OtsuThreshold(src_pix, rect_left_, rect_top_, rect_width_, + rect_height_, &thresholds, &hi_values); + // only use opencl if compiled w/ OpenCL and selected device is opencl +#ifdef USE_OPENCL + OpenclDevice od; + if ((num_channels == 4 || num_channels == 1) && + od.selectedDeviceIsOpenCL() && rect_top_ == 0 && rect_left_ == 0) { + od.ThresholdRectToPixOCL((unsigned char*)pixGetData(src_pix), num_channels, + pixGetWpl(src_pix) * 4, thresholds, hi_values, + out_pix /*pix_OCL*/, rect_height_, rect_width_, + rect_top_, rect_left_); + } + else { +#endif + ThresholdRectToPix(src_pix, num_channels, thresholds, hi_values, out_pix); +#ifdef USE_OPENCL + } +#endif + delete[] thresholds; + delete[] hi_values; + + PERF_COUNT_END + } + + /// Threshold the rectangle, taking everything except the src_pix + /// from the class, using thresholds/hi_values to the output pix. + /// NOTE that num_channels is the size of the thresholds and hi_values + // arrays and also the bytes per pixel in src_pix. + void ImageThresholder::ThresholdRectToPix(Pix* src_pix, + int num_channels, + const int* thresholds, + const int* hi_values, + Pix** pix) const { + PERF_COUNT_START("ThresholdRectToPix") + *pix = pixCreate(rect_width_, rect_height_, 1); + uinT32* pixdata = pixGetData(*pix); + int wpl = pixGetWpl(*pix); + int src_wpl = pixGetWpl(src_pix); + uinT32* srcdata = pixGetData(src_pix); + for (int y = 0; y < rect_height_; ++y) { + const uinT32* linedata = srcdata + (y + rect_top_) * src_wpl; + uinT32* pixline = pixdata + y * wpl; + for (int x = 0; x < rect_width_; ++x) { + bool white_result = true; + for (int ch = 0; ch < num_channels; ++ch) { + int pixel = GET_DATA_BYTE(const_cast( + reinterpret_cast(linedata)), + (x + rect_left_) * num_channels + ch); + if (hi_values[ch] >= 0 && + (pixel > thresholds[ch]) == (hi_values[ch] == 0)) { + white_result = false; + break; + } + } + if (white_result) + CLEAR_DATA_BIT(pixline, x); + else + SET_DATA_BIT(pixline, x); + } + } + + PERF_COUNT_END + } + +} // namespace tesseract. + diff --git a/3rdparty/hgOCR/include/ccmain/thresholder.h b/3rdparty/hgOCR/include/ccmain/thresholder.h new file mode 100644 index 00000000..fc8bc0d8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/thresholder.h @@ -0,0 +1,189 @@ +/////////////////////////////////////////////////////////////////////// +// File: thresholder.h +// Description: Base API for thresolding images in tesseract. +// Author: Ray Smith +// Created: Mon May 12 11:00:15 PDT 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_THRESHOLDER_H__ +#define TESSERACT_CCMAIN_THRESHOLDER_H__ + +#include "platform.h" +#include "publictypes.h" + +struct Pix; + +namespace tesseract { + + /// Base class for all tesseract image thresholding classes. + /// Specific classes can add new thresholding methods by + /// overriding ThresholdToPix. + /// Each instance deals with a single image, but the design is intended to + /// be useful for multiple calls to SetRectangle and ThresholdTo* if + /// desired. + class TESS_API ImageThresholder { + public: + ImageThresholder(); + virtual ~ImageThresholder(); + + /// Destroy the Pix if there is one, freeing memory. + virtual void Clear(); + + /// Return true if no image has been set. + bool IsEmpty() const; + + /// SetImage makes a copy of all the image data, so it may be deleted + /// immediately after this call. + /// Greyscale of 8 and color of 24 or 32 bits per pixel may be given. + /// Palette color images will not work properly and must be converted to + /// 24 bit. + /// Binary images of 1 bit per pixel may also be given but they must be + /// byte packed with the MSB of the first byte being the first pixel, and a + /// one pixel is WHITE. For binary images set bytes_per_pixel=0. + void SetImage(const unsigned char* imagedata, int width, int height, + int bytes_per_pixel, int bytes_per_line); + + /// Store the coordinates of the rectangle to process for later use. + /// Doesn't actually do any thresholding. + void SetRectangle(int left, int top, int width, int height); + + /// Get enough parameters to be able to rebuild bounding boxes in the + /// original image (not just within the rectangle). + /// Left and top are enough with top-down coordinates, but + /// the height of the rectangle and the image are needed for bottom-up. + virtual void GetImageSizes(int* left, int* top, int* width, int* height, + int* imagewidth, int* imageheight); + + /// Return true if the source image is color. + bool IsColor() const { + return pix_channels_ >= 3; + } + + /// Returns true if the source image is binary. + bool IsBinary() const { + return pix_channels_ == 0; + } + + int GetScaleFactor() const { + return scale_; + } + + // Set the resolution of the source image in pixels per inch. + // This should be called right after SetImage(), and will let us return + // appropriate font sizes for the text. + void SetSourceYResolution(int ppi) { + yres_ = ppi; + estimated_res_ = ppi; + } + int GetSourceYResolution() const { + return yres_; + } + int GetScaledYResolution() const { + return scale_ * yres_; + } + // Set the resolution of the source image in pixels per inch, as estimated + // by the thresholder from the text size found during thresholding. + // This value will be used to set internal size thresholds during recognition + // and will not influence the output "point size." The default value is + // the same as the source resolution. (yres_) + void SetEstimatedResolution(int ppi) { + estimated_res_ = ppi; + } + // Returns the estimated resolution, including any active scaling. + // This value will be used to set internal size thresholds during recognition. + int GetScaledEstimatedResolution() const { + return scale_ * estimated_res_; + } + + /// Pix vs raw, which to use? Pix is the preferred input for efficiency, + /// since raw buffers are copied. + /// SetImage for Pix clones its input, so the source pix may be pixDestroyed + /// immediately after, but may not go away until after the Thresholder has + /// finished with it. + void SetImage(const Pix* pix); + + /// Threshold the source image as efficiently as possible to the output Pix. + /// Creates a Pix and sets pix to point to the resulting pointer. + /// Caller must use pixDestroy to free the created Pix. + virtual void ThresholdToPix(PageSegMode pageseg_mode, Pix** pix); + + // Gets a pix that contains an 8 bit threshold value at each pixel. The + // returned pix may be an integer reduction of the binary image such that + // the scale factor may be inferred from the ratio of the sizes, even down + // to the extreme of a 1x1 pixel thresholds image. + // Ideally the 8 bit threshold should be the exact threshold used to generate + // the binary image in ThresholdToPix, but this is not a hard constraint. + // Returns NULL if the input is binary. PixDestroy after use. + virtual Pix* GetPixRectThresholds(); + + /// Get a clone/copy of the source image rectangle. + /// The returned Pix must be pixDestroyed. + /// This function will be used in the future by the page layout analysis, and + /// the layout analysis that uses it will only be available with Leptonica, + /// so there is no raw equivalent. + Pix* GetPixRect(); + + // Get a clone/copy of the source image rectangle, reduced to greyscale, + // and at the same resolution as the output binary. + // The returned Pix must be pixDestroyed. + // Provided to the classifier to extract features from the greyscale image. + virtual Pix* GetPixRectGrey(); + + protected: + // ---------------------------------------------------------------------- + // Utility functions that may be useful components for other thresholders. + + /// Common initialization shared between SetImage methods. + virtual void Init(); + + /// Return true if we are processing the full image. + bool IsFullImage() const { + return rect_left_ == 0 && rect_top_ == 0 && + rect_width_ == image_width_ && rect_height_ == image_height_; + } + + // Otsu thresholds the rectangle, taking the rectangle from *this. + void OtsuThresholdRectToPix(Pix* src_pix, Pix** out_pix) const; + + /// Threshold the rectangle, taking everything except the src_pix + /// from the class, using thresholds/hi_values to the output pix. + /// NOTE that num_channels is the size of the thresholds and hi_values + // arrays and also the bytes per pixel in src_pix. + void ThresholdRectToPix(Pix* src_pix, int num_channels, + const int* thresholds, const int* hi_values, + Pix** pix) const; + + protected: + /// Clone or other copy of the source Pix. + /// The pix will always be PixDestroy()ed on destruction of the class. + Pix* pix_; + + int image_width_; //< Width of source pix_. + int image_height_; //< Height of source pix_. + int pix_channels_; //< Number of 8-bit channels in pix_. + int pix_wpl_; //< Words per line of pix_. + // Limits of image rectangle to be processed. + int scale_; //< Scale factor from original image. + int yres_; //< y pixels/inch in source image. + int estimated_res_; //< Resolution estimate from text size. + int rect_left_; + int rect_top_; + int rect_width_; + int rect_height_; + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_THRESHOLDER_H__ diff --git a/3rdparty/hgOCR/include/ccmain/vcsversion.h b/3rdparty/hgOCR/include/ccmain/vcsversion.h new file mode 100644 index 00000000..d6207330 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/vcsversion.h @@ -0,0 +1,2 @@ +#define GIT_REV "3.05.00dev" + diff --git a/3rdparty/hgOCR/include/ccmain/werdit.cpp b/3rdparty/hgOCR/include/ccmain/werdit.cpp new file mode 100644 index 00000000..c212b703 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/werdit.cpp @@ -0,0 +1,59 @@ +/********************************************************************** + * File: werdit.cpp (Formerly wordit.c) + * Description: An iterator for passing over all the words in a document. + * Author: Ray Smith + * Created: Mon Apr 27 08:51:22 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "werdit.h" + + /********************************************************************** + * make_pseudo_word + * + * Make all the blobs inside a selection into a single word. + * The returned PAGE_RES_IT* it points to the new word. After use, call + * it->DeleteCurrentWord() to delete the fake word, and then + * delete it to get rid of the iterator itself. + **********************************************************************/ + +PAGE_RES_IT* make_pseudo_word(PAGE_RES* page_res, const TBOX& selection_box) { + PAGE_RES_IT pr_it(page_res); + C_BLOB_LIST new_blobs; // list of gathered blobs + C_BLOB_IT new_blob_it = &new_blobs; // iterator + + for (WERD_RES* word_res = pr_it.word(); word_res != NULL; + word_res = pr_it.forward()) { + WERD* word = word_res->word; + if (word->bounding_box().overlap(selection_box)) { + C_BLOB_IT blob_it(word->cblob_list()); + for (blob_it.mark_cycle_pt(); + !blob_it.cycled_list(); blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + if (blob->bounding_box().overlap(selection_box)) { + new_blob_it.add_after_then_move(C_BLOB::deep_copy(blob)); + } + } + if (!new_blobs.empty()) { + WERD* pseudo_word = new WERD(&new_blobs, 1, NULL); + word_res = pr_it.InsertSimpleCloneWord(*word_res, pseudo_word); + PAGE_RES_IT* it = new PAGE_RES_IT(page_res); + while (it->word() != word_res && it->word() != NULL) it->forward(); + ASSERT_HOST(it->word() == word_res); + return it; + } + } + } + return NULL; +} diff --git a/3rdparty/hgOCR/include/ccmain/werdit.h b/3rdparty/hgOCR/include/ccmain/werdit.h new file mode 100644 index 00000000..5ffc9997 --- /dev/null +++ b/3rdparty/hgOCR/include/ccmain/werdit.h @@ -0,0 +1,27 @@ +/********************************************************************** + * File: wordit.c + * Description: An iterator for passing over all the words in a document. + * Author: Ray Smith + * Created: Mon Apr 27 08:51:22 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef WERDIT_H +#define WERDIT_H + +#include "pageres.h" + +PAGE_RES_IT* make_pseudo_word(PAGE_RES* page_res, const TBOX& selection_box); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/blamer.cpp b/3rdparty/hgOCR/include/ccstruct/blamer.cpp new file mode 100644 index 00000000..0120b19b --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blamer.cpp @@ -0,0 +1,603 @@ +/////////////////////////////////////////////////////////////////////// +// File: blamer.cpp +// Description: Module allowing precise error causes to be allocated. +// Author: Rike Antonova +// Refactored: Ray Smith +// Created: Mon Feb 04 14:37:01 PST 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "blamer.h" +#include "blobs.h" +#include "matrix.h" +#include "normalis.h" +#include "pageres.h" + +// Names for each value of IncorrectResultReason enum. Keep in sync. +const char kBlameCorrect[] = "corr"; +const char kBlameClassifier[] = "cl"; +const char kBlameChopper[] = "chop"; +const char kBlameClassLMTradeoff[] = "cl/LM"; +const char kBlamePageLayout[] = "pglt"; +const char kBlameSegsearchHeur[] = "ss_heur"; +const char kBlameSegsearchPP[] = "ss_pp"; +const char kBlameClassOldLMTradeoff[] = "cl/old_LM"; +const char kBlameAdaption[] = "adapt"; +const char kBlameNoTruthSplit[] = "no_tr_spl"; +const char kBlameNoTruth[] = "no_tr"; +const char kBlameUnknown[] = "unkn"; + +const char * const kIncorrectResultReasonNames[] = { + kBlameCorrect, + kBlameClassifier, + kBlameChopper, + kBlameClassLMTradeoff, + kBlamePageLayout, + kBlameSegsearchHeur, + kBlameSegsearchPP, + kBlameClassOldLMTradeoff, + kBlameAdaption, + kBlameNoTruthSplit, + kBlameNoTruth, + kBlameUnknown +}; + +const char *BlamerBundle::IncorrectReasonName(IncorrectResultReason irr) { + return kIncorrectResultReasonNames[irr]; +} + +const char *BlamerBundle::IncorrectReason() const { + return kIncorrectResultReasonNames[incorrect_result_reason_]; +} + +// Functions to setup the blamer. +// Whole word string, whole word bounding box. +void BlamerBundle::SetWordTruth(const UNICHARSET& unicharset, + const char* truth_str, const TBOX& word_box) { + truth_word_.InsertBox(0, word_box); + truth_has_char_boxes_ = false; + // Encode the string as UNICHAR_IDs. + GenericVector encoding; + GenericVector lengths; + unicharset.encode_string(truth_str, false, &encoding, &lengths, NULL); + int total_length = 0; + for (int i = 0; i < encoding.size(); total_length += lengths[i++]) { + STRING uch(truth_str + total_length); + uch.truncate_at(lengths[i] - total_length); + UNICHAR_ID id = encoding[i]; + if (id != INVALID_UNICHAR_ID) uch = unicharset.get_normed_unichar(id); + truth_text_.push_back(uch); + } +} + +// Single "character" string, "character" bounding box. +// May be called multiple times to indicate the characters in a word. +void BlamerBundle::SetSymbolTruth(const UNICHARSET& unicharset, + const char* char_str, const TBOX& char_box) { + STRING symbol_str(char_str); + UNICHAR_ID id = unicharset.unichar_to_id(char_str); + if (id != INVALID_UNICHAR_ID) { + STRING normed_uch(unicharset.get_normed_unichar(id)); + if (normed_uch.length() > 0) symbol_str = normed_uch; + } + int length = truth_word_.length(); + truth_text_.push_back(symbol_str); + truth_word_.InsertBox(length, char_box); + if (length == 0) + truth_has_char_boxes_ = true; + else if (truth_word_.BlobBox(length - 1) == char_box) + truth_has_char_boxes_ = false; +} + +// Marks that there is something wrong with the truth text, like it contains +// reject characters. +void BlamerBundle::SetRejectedTruth() { + incorrect_result_reason_ = IRR_NO_TRUTH; + truth_has_char_boxes_ = false; +} + +// Returns true if the provided word_choice is correct. +bool BlamerBundle::ChoiceIsCorrect(const WERD_CHOICE* word_choice) const { + if (word_choice == NULL) return false; + const UNICHARSET* uni_set = word_choice->unicharset(); + STRING normed_choice_str; + for (int i = 0; i < word_choice->length(); ++i) { + normed_choice_str += + uni_set->get_normed_unichar(word_choice->unichar_id(i)); + } + STRING truth_str = TruthString(); + return truth_str == normed_choice_str; +} + +void BlamerBundle::FillDebugString(const STRING &msg, + const WERD_CHOICE *choice, + STRING *debug) { + (*debug) += "Truth "; + for (int i = 0; i < this->truth_text_.length(); ++i) { + (*debug) += this->truth_text_[i]; + } + if (!this->truth_has_char_boxes_) (*debug) += " (no char boxes)"; + if (choice != NULL) { + (*debug) += " Choice "; + STRING choice_str; + choice->string_and_lengths(&choice_str, NULL); + (*debug) += choice_str; + } + if (msg.length() > 0) { + (*debug) += "\n"; + (*debug) += msg; + } + (*debug) += "\n"; +} + +// Sets up the norm_truth_word from truth_word using the given DENORM. +void BlamerBundle::SetupNormTruthWord(const DENORM& denorm) { + // TODO(rays) Is this the last use of denorm in WERD_RES and can it go? + norm_box_tolerance_ = kBlamerBoxTolerance * denorm.x_scale(); + TPOINT topleft; + TPOINT botright; + TPOINT norm_topleft; + TPOINT norm_botright; + for (int b = 0; b < truth_word_.length(); ++b) { + const TBOX &box = truth_word_.BlobBox(b); + topleft.x = box.left(); + topleft.y = box.top(); + botright.x = box.right(); + botright.y = box.bottom(); + denorm.NormTransform(NULL, topleft, &norm_topleft); + denorm.NormTransform(NULL, botright, &norm_botright); + TBOX norm_box(norm_topleft.x, norm_botright.y, + norm_botright.x, norm_topleft.y); + norm_truth_word_.InsertBox(b, norm_box); + } +} + +// Splits *this into two pieces in bundle1 and bundle2 (preallocated, empty +// bundles) where the right edge/ of the left-hand word is word1_right, +// and the left edge of the right-hand word is word2_left. +void BlamerBundle::SplitBundle(int word1_right, int word2_left, bool debug, + BlamerBundle* bundle1, + BlamerBundle* bundle2) const { + STRING debug_str; + // Find truth boxes that correspond to the split in the blobs. + int b; + int begin2_truth_index = -1; + if (incorrect_result_reason_ != IRR_NO_TRUTH && + truth_has_char_boxes_) { + debug_str = "Looking for truth split at"; + debug_str.add_str_int(" end1_x ", word1_right); + debug_str.add_str_int(" begin2_x ", word2_left); + debug_str += "\nnorm_truth_word boxes:\n"; + if (norm_truth_word_.length() > 1) { + norm_truth_word_.BlobBox(0).print_to_str(&debug_str); + for (b = 1; b < norm_truth_word_.length(); ++b) { + norm_truth_word_.BlobBox(b).print_to_str(&debug_str); + if ((abs(word1_right - norm_truth_word_.BlobBox(b - 1).right()) < + norm_box_tolerance_) && + (abs(word2_left - norm_truth_word_.BlobBox(b).left()) < + norm_box_tolerance_)) { + begin2_truth_index = b; + debug_str += "Split found"; + break; + } + } + debug_str += '\n'; + } + } + // Populate truth information in word and word2 with the first and second + // part of the original truth. + if (begin2_truth_index > 0) { + bundle1->truth_has_char_boxes_ = true; + bundle1->norm_box_tolerance_ = norm_box_tolerance_; + bundle2->truth_has_char_boxes_ = true; + bundle2->norm_box_tolerance_ = norm_box_tolerance_; + BlamerBundle *curr_bb = bundle1; + for (b = 0; b < norm_truth_word_.length(); ++b) { + if (b == begin2_truth_index) curr_bb = bundle2; + curr_bb->norm_truth_word_.InsertBox(b, norm_truth_word_.BlobBox(b)); + curr_bb->truth_word_.InsertBox(b, truth_word_.BlobBox(b)); + curr_bb->truth_text_.push_back(truth_text_[b]); + } + } + else if (incorrect_result_reason_ == IRR_NO_TRUTH) { + bundle1->incorrect_result_reason_ = IRR_NO_TRUTH; + bundle2->incorrect_result_reason_ = IRR_NO_TRUTH; + } + else { + debug_str += "Truth split not found"; + debug_str += truth_has_char_boxes_ ? + "\n" : " (no truth char boxes)\n"; + bundle1->SetBlame(IRR_NO_TRUTH_SPLIT, debug_str, NULL, debug); + bundle2->SetBlame(IRR_NO_TRUTH_SPLIT, debug_str, NULL, debug); + } +} + +// "Joins" the blames from bundle1 and bundle2 into *this. +void BlamerBundle::JoinBlames(const BlamerBundle& bundle1, + const BlamerBundle& bundle2, bool debug) { + STRING debug_str; + IncorrectResultReason irr = incorrect_result_reason_; + if (irr != IRR_NO_TRUTH_SPLIT) debug_str = ""; + if (bundle1.incorrect_result_reason_ != IRR_CORRECT && + bundle1.incorrect_result_reason_ != IRR_NO_TRUTH && + bundle1.incorrect_result_reason_ != IRR_NO_TRUTH_SPLIT) { + debug_str += "Blame from part 1: "; + debug_str += bundle1.debug_; + irr = bundle1.incorrect_result_reason_; + } + if (bundle2.incorrect_result_reason_ != IRR_CORRECT && + bundle2.incorrect_result_reason_ != IRR_NO_TRUTH && + bundle2.incorrect_result_reason_ != IRR_NO_TRUTH_SPLIT) { + debug_str += "Blame from part 2: "; + debug_str += bundle2.debug_; + if (irr == IRR_CORRECT) { + irr = bundle2.incorrect_result_reason_; + } + else if (irr != bundle2.incorrect_result_reason_) { + irr = IRR_UNKNOWN; + } + } + incorrect_result_reason_ = irr; + if (irr != IRR_CORRECT && irr != IRR_NO_TRUTH) { + SetBlame(irr, debug_str, NULL, debug); + } +} + +// If a blob with the same bounding box as one of the truth character +// bounding boxes is not classified as the corresponding truth character +// blames character classifier for incorrect answer. +void BlamerBundle::BlameClassifier(const UNICHARSET& unicharset, + const TBOX& blob_box, + const BLOB_CHOICE_LIST& choices, + bool debug) { + if (!truth_has_char_boxes_ || + incorrect_result_reason_ != IRR_CORRECT) + return; // Nothing to do here. + + for (int b = 0; b < norm_truth_word_.length(); ++b) { + const TBOX &truth_box = norm_truth_word_.BlobBox(b); + // Note that we are more strict on the bounding box boundaries here + // than in other places (chopper, segmentation search), since we do + // not have the ability to check the previous and next bounding box. + if (blob_box.x_almost_equal(truth_box, norm_box_tolerance_ / 2)) { + bool found = false; + bool incorrect_adapted = false; + UNICHAR_ID incorrect_adapted_id = INVALID_UNICHAR_ID; + const char *truth_str = truth_text_[b].string(); + // We promise not to modify the list or its contents, using a + // const BLOB_CHOICE* below. + BLOB_CHOICE_IT choices_it(const_cast(&choices)); + for (choices_it.mark_cycle_pt(); !choices_it.cycled_list(); + choices_it.forward()) { + const BLOB_CHOICE* choice = choices_it.data(); + if (strcmp(truth_str, unicharset.get_normed_unichar( + choice->unichar_id())) == 0) { + found = true; + break; + } + else if (choice->IsAdapted()) { + incorrect_adapted = true; + incorrect_adapted_id = choice->unichar_id(); + } + } // end choices_it for loop + if (!found) { + STRING debug_str = "unichar "; + debug_str += truth_str; + debug_str += " not found in classification list"; + SetBlame(IRR_CLASSIFIER, debug_str, NULL, debug); + } + else if (incorrect_adapted) { + STRING debug_str = "better rating for adapted "; + debug_str += unicharset.id_to_unichar(incorrect_adapted_id); + debug_str += " than for correct "; + debug_str += truth_str; + SetBlame(IRR_ADAPTION, debug_str, NULL, debug); + } + break; + } + } // end iterating over blamer_bundle->norm_truth_word +} + +// Checks whether chops were made at all the character bounding box +// boundaries in word->truth_word. If not - blames the chopper for an +// incorrect answer. +void BlamerBundle::SetChopperBlame(const WERD_RES* word, bool debug) { + if (NoTruth() || !truth_has_char_boxes_ || + word->chopped_word->blobs.empty()) { + return; + } + STRING debug_str; + bool missing_chop = false; + int num_blobs = word->chopped_word->blobs.size(); + int box_index = 0; + int blob_index = 0; + inT16 truth_x = -1; + while (box_index < truth_word_.length() && blob_index < num_blobs) { + truth_x = norm_truth_word_.BlobBox(box_index).right(); + TBLOB * curr_blob = word->chopped_word->blobs[blob_index]; + if (curr_blob->bounding_box().right() < truth_x - norm_box_tolerance_) { + ++blob_index; + continue; // encountered an extra chop, keep looking + } + else if (curr_blob->bounding_box().right() > + truth_x + norm_box_tolerance_) { + missing_chop = true; + break; + } + else { + ++blob_index; + } + } + if (missing_chop || box_index < norm_truth_word_.length()) { + STRING debug_str; + if (missing_chop) { + debug_str.add_str_int("Detected missing chop (tolerance=", + norm_box_tolerance_); + debug_str += ") at Bounding Box="; + TBLOB * curr_blob = word->chopped_word->blobs[blob_index]; + curr_blob->bounding_box().print_to_str(&debug_str); + debug_str.add_str_int("\nNo chop for truth at x=", truth_x); + } + else { + debug_str.add_str_int("Missing chops for last ", + norm_truth_word_.length() - box_index); + debug_str += " truth box(es)"; + } + debug_str += "\nMaximally chopped word boxes:\n"; + for (blob_index = 0; blob_index < num_blobs; ++blob_index) { + TBLOB * curr_blob = word->chopped_word->blobs[blob_index]; + curr_blob->bounding_box().print_to_str(&debug_str); + debug_str += '\n'; + } + debug_str += "Truth bounding boxes:\n"; + for (box_index = 0; box_index < norm_truth_word_.length(); ++box_index) { + norm_truth_word_.BlobBox(box_index).print_to_str(&debug_str); + debug_str += '\n'; + } + SetBlame(IRR_CHOPPER, debug_str, word->best_choice, debug); + } +} + +// Blames the classifier or the language model if, after running only the +// chopper, best_choice is incorrect and no blame has been yet set. +// Blames the classifier if best_choice is classifier's top choice and is a +// dictionary word (i.e. language model could not have helped). +// Otherwise, blames the language model (formerly permuter word adjustment). +void BlamerBundle::BlameClassifierOrLangModel( + const WERD_RES* word, + const UNICHARSET& unicharset, bool valid_permuter, bool debug) { + if (valid_permuter) { + // Find out whether best choice is a top choice. + best_choice_is_dict_and_top_choice_ = true; + for (int i = 0; i < word->best_choice->length(); ++i) { + BLOB_CHOICE_IT blob_choice_it(word->GetBlobChoices(i)); + ASSERT_HOST(!blob_choice_it.empty()); + BLOB_CHOICE *first_choice = NULL; + for (blob_choice_it.mark_cycle_pt(); !blob_choice_it.cycled_list(); + blob_choice_it.forward()) { // find first non-fragment choice + if (!(unicharset.get_fragment(blob_choice_it.data()->unichar_id()))) { + first_choice = blob_choice_it.data(); + break; + } + } + ASSERT_HOST(first_choice != NULL); + if (first_choice->unichar_id() != word->best_choice->unichar_id(i)) { + best_choice_is_dict_and_top_choice_ = false; + break; + } + } + } + STRING debug_str; + if (best_choice_is_dict_and_top_choice_) { + debug_str = "Best choice is: incorrect, top choice, dictionary word"; + debug_str += " with permuter "; + debug_str += word->best_choice->permuter_name(); + } + else { + debug_str = "Classifier/Old LM tradeoff is to blame"; + } + SetBlame(best_choice_is_dict_and_top_choice_ ? IRR_CLASSIFIER + : IRR_CLASS_OLD_LM_TRADEOFF, + debug_str, word->best_choice, debug); +} + +// Sets up the correct_segmentation_* to mark the correct bounding boxes. +void BlamerBundle::SetupCorrectSegmentation(const TWERD* word, bool debug) { + params_training_bundle_.StartHypothesisList(); + if (incorrect_result_reason_ != IRR_CORRECT || !truth_has_char_boxes_) + return; // Nothing to do here. + + STRING debug_str; + debug_str += "Blamer computing correct_segmentation_cols\n"; + int curr_box_col = 0; + int next_box_col = 0; + int num_blobs = word->NumBlobs(); + if (num_blobs == 0) return; // No blobs to play with. + int blob_index = 0; + inT16 next_box_x = word->blobs[blob_index]->bounding_box().right(); + for (int truth_idx = 0; blob_index < num_blobs && + truth_idx < norm_truth_word_.length(); + ++blob_index) { + ++next_box_col; + inT16 curr_box_x = next_box_x; + if (blob_index + 1 < num_blobs) + next_box_x = word->blobs[blob_index + 1]->bounding_box().right(); + inT16 truth_x = norm_truth_word_.BlobBox(truth_idx).right(); + debug_str.add_str_int("Box x coord vs. truth: ", curr_box_x); + debug_str.add_str_int(" ", truth_x); + debug_str += "\n"; + if (curr_box_x > (truth_x + norm_box_tolerance_)) { + break; // failed to find a matching box + } + else if (curr_box_x >= truth_x - norm_box_tolerance_ && // matched + (blob_index + 1 >= num_blobs || // next box can't be included + next_box_x > truth_x + norm_box_tolerance_)) { + correct_segmentation_cols_.push_back(curr_box_col); + correct_segmentation_rows_.push_back(next_box_col - 1); + ++truth_idx; + debug_str.add_str_int("col=", curr_box_col); + debug_str.add_str_int(" row=", next_box_col - 1); + debug_str += "\n"; + curr_box_col = next_box_col; + } + } + if (blob_index < num_blobs || // trailing blobs + correct_segmentation_cols_.length() != norm_truth_word_.length()) { + debug_str.add_str_int("Blamer failed to find correct segmentation" + " (tolerance=", norm_box_tolerance_); + if (blob_index >= num_blobs) debug_str += " blob == NULL"; + debug_str += ")\n"; + debug_str.add_str_int(" path length ", correct_segmentation_cols_.length()); + debug_str.add_str_int(" vs. truth ", norm_truth_word_.length()); + debug_str += "\n"; + SetBlame(IRR_UNKNOWN, debug_str, NULL, debug); + correct_segmentation_cols_.clear(); + correct_segmentation_rows_.clear(); + } +} + +// Returns true if a guided segmentation search is needed. +bool BlamerBundle::GuidedSegsearchNeeded(const WERD_CHOICE *best_choice) const { + return incorrect_result_reason_ == IRR_CORRECT && + !segsearch_is_looking_for_blame_ && + truth_has_char_boxes_ && + !ChoiceIsCorrect(best_choice); +} + +// Setup ready to guide the segmentation search to the correct segmentation. +// The callback pp_cb is used to avoid a cyclic dependency. +// It calls into LMPainPoints::GenerateForBlamer by pre-binding the +// WERD_RES, and the LMPainPoints itself. +// pp_cb must be a permanent callback, and should be deleted by the caller. +void BlamerBundle::InitForSegSearch(const WERD_CHOICE *best_choice, + MATRIX* ratings, UNICHAR_ID wildcard_id, + bool debug, STRING *debug_str, + TessResultCallback2* cb) { + segsearch_is_looking_for_blame_ = true; + if (debug) { + tprintf("segsearch starting to look for blame\n"); + } + // Fill pain points for any unclassifed blob corresponding to the + // correct segmentation state. + *debug_str += "Correct segmentation:\n"; + for (int idx = 0; idx < correct_segmentation_cols_.length(); ++idx) { + debug_str->add_str_int("col=", correct_segmentation_cols_[idx]); + debug_str->add_str_int(" row=", correct_segmentation_rows_[idx]); + *debug_str += "\n"; + if (!ratings->Classified(correct_segmentation_cols_[idx], + correct_segmentation_rows_[idx], + wildcard_id) && + !cb->Run(correct_segmentation_cols_[idx], + correct_segmentation_rows_[idx])) { + segsearch_is_looking_for_blame_ = false; + *debug_str += "\nFailed to insert pain point\n"; + SetBlame(IRR_SEGSEARCH_HEUR, *debug_str, best_choice, debug); + break; + } + } // end for blamer_bundle->correct_segmentation_cols/rows +} +// Returns true if the guided segsearch is in progress. +bool BlamerBundle::GuidedSegsearchStillGoing() const { + return segsearch_is_looking_for_blame_; +} + +// The segmentation search has ended. Sets the blame appropriately. +void BlamerBundle::FinishSegSearch(const WERD_CHOICE *best_choice, + bool debug, STRING *debug_str) { + // If we are still looking for blame (i.e. best_choice is incorrect, but a + // path representing the correct segmentation could be constructed), we can + // blame segmentation search pain point prioritization if the rating of the + // path corresponding to the correct segmentation is better than that of + // best_choice (i.e. language model would have done the correct thing, but + // because of poor pain point prioritization the correct segmentation was + // never explored). Otherwise we blame the tradeoff between the language model + // and the classifier, since even after exploring the path corresponding to + // the correct segmentation incorrect best_choice would have been chosen. + // One special case when we blame the classifier instead is when best choice + // is incorrect, but it is a dictionary word and it classifier's top choice. + if (segsearch_is_looking_for_blame_) { + segsearch_is_looking_for_blame_ = false; + if (best_choice_is_dict_and_top_choice_) { + *debug_str = "Best choice is: incorrect, top choice, dictionary word"; + *debug_str += " with permuter "; + *debug_str += best_choice->permuter_name(); + SetBlame(IRR_CLASSIFIER, *debug_str, best_choice, debug); + } + else if (best_correctly_segmented_rating_ < + best_choice->rating()) { + *debug_str += "Correct segmentation state was not explored"; + SetBlame(IRR_SEGSEARCH_PP, *debug_str, best_choice, debug); + } + else { + if (best_correctly_segmented_rating_ >= + WERD_CHOICE::kBadRating) { + *debug_str += "Correct segmentation paths were pruned by LM\n"; + } + else { + debug_str->add_str_double("Best correct segmentation rating ", + best_correctly_segmented_rating_); + debug_str->add_str_double(" vs. best choice rating ", + best_choice->rating()); + } + SetBlame(IRR_CLASS_LM_TRADEOFF, *debug_str, best_choice, debug); + } + } +} + +// If the bundle is null or still does not indicate the correct result, +// fix it and use some backup reason for the blame. +void BlamerBundle::LastChanceBlame(bool debug, WERD_RES* word) { + if (word->blamer_bundle == NULL) { + word->blamer_bundle = new BlamerBundle(); + word->blamer_bundle->SetBlame(IRR_PAGE_LAYOUT, "LastChanceBlame", + word->best_choice, debug); + } + else if (word->blamer_bundle->incorrect_result_reason_ == IRR_NO_TRUTH) { + word->blamer_bundle->SetBlame(IRR_NO_TRUTH, "Rejected truth", + word->best_choice, debug); + } + else { + bool correct = word->blamer_bundle->ChoiceIsCorrect(word->best_choice); + IncorrectResultReason irr = word->blamer_bundle->incorrect_result_reason_; + if (irr == IRR_CORRECT && !correct) { + STRING debug_str = "Choice is incorrect after recognition"; + word->blamer_bundle->SetBlame(IRR_UNKNOWN, debug_str, word->best_choice, + debug); + } + else if (irr != IRR_CORRECT && correct) { + if (debug) { + tprintf("Corrected %s\n", word->blamer_bundle->debug_.string()); + } + word->blamer_bundle->incorrect_result_reason_ = IRR_CORRECT; + word->blamer_bundle->debug_ = ""; + } + } +} + +// Sets the misadaption debug if this word is incorrect, as this word is +// being adapted to. +void BlamerBundle::SetMisAdaptionDebug(const WERD_CHOICE *best_choice, + bool debug) { + if (incorrect_result_reason_ != IRR_NO_TRUTH && + !ChoiceIsCorrect(best_choice)) { + misadaption_debug_ = "misadapt to word ("; + misadaption_debug_ += best_choice->permuter_name(); + misadaption_debug_ += "): "; + FillDebugString("", best_choice, &misadaption_debug_); + if (debug) { + tprintf("%s\n", misadaption_debug_.string()); + } + } +} + diff --git a/3rdparty/hgOCR/include/ccstruct/blamer.h b/3rdparty/hgOCR/include/ccstruct/blamer.h new file mode 100644 index 00000000..8b33b7f5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blamer.h @@ -0,0 +1,333 @@ +/////////////////////////////////////////////////////////////////////// +// File: blamer.h +// Description: Module allowing precise error causes to be allocated. +// Author: Rike Antonova +// Refactored: Ray Smith +// Created: Mon Feb 04 14:37:01 PST 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCSTRUCT_BLAMER_H_ +#define TESSERACT_CCSTRUCT_BLAMER_H_ + +#include +#include "boxword.h" +#include "genericvector.h" +#include "matrix.h" +#include "params_training_featdef.h" +#include "ratngs.h" +#include "strngs.h" +#include "tesscallback.h" + +static const inT16 kBlamerBoxTolerance = 5; + +// Enum for expressing the source of error. +// Note: Please update kIncorrectResultReasonNames when modifying this enum. +enum IncorrectResultReason { + // The text recorded in best choice == truth text + IRR_CORRECT, + // Either: Top choice is incorrect and is a dictionary word (language model + // is unlikely to help correct such errors, so blame the classifier). + // Or: the correct unichar was not included in shortlist produced by the + // classifier at all. + IRR_CLASSIFIER, + // Chopper have not found one or more splits that correspond to the correct + // character bounding boxes recorded in BlamerBundle::truth_word. + IRR_CHOPPER, + // Classifier did include correct unichars for each blob in the correct + // segmentation, however its rating could have been too bad to allow the + // language model to pull out the correct choice. On the other hand the + // strength of the language model might have been too weak to favor the + // correct answer, this we call this case a classifier-language model + // tradeoff error. + IRR_CLASS_LM_TRADEOFF, + // Page layout failed to produce the correct bounding box. Blame page layout + // if the truth was not found for the word, which implies that the bounding + // box of the word was incorrect (no truth word had a similar bounding box). + IRR_PAGE_LAYOUT, + // SegSearch heuristic prevented one or more blobs from the correct + // segmentation state to be classified (e.g. the blob was too wide). + IRR_SEGSEARCH_HEUR, + // The correct segmentaiton state was not explored because of poor SegSearch + // pain point prioritization. We blame SegSearch pain point prioritization + // if the best rating of a choice constructed from correct segmentation is + // better than that of the best choice (i.e. if we got to explore the correct + // segmentation state, language model would have picked the correct choice). + IRR_SEGSEARCH_PP, + // Same as IRR_CLASS_LM_TRADEOFF, but used when we only run chopper on a word, + // and thus use the old language model (permuters). + // TODO(antonova): integrate the new language mode with chopper + IRR_CLASS_OLD_LM_TRADEOFF, + // If there is an incorrect adaptive template match with a better score than + // a correct one (either pre-trained or adapted), mark this as adaption error. + IRR_ADAPTION, + // split_and_recog_word() failed to find a suitable split in truth. + IRR_NO_TRUTH_SPLIT, + // Truth is not available for this word (e.g. when words in corrected content + // file are turned into ~~~~ because an appropriate alignment was not found. + IRR_NO_TRUTH, + // The text recorded in best choice != truth text, but none of the above + // reasons are set. + IRR_UNKNOWN, + + IRR_NUM_REASONS +}; + +// Blamer-related information to determine the source of errors. +struct BlamerBundle { + static const char *IncorrectReasonName(IncorrectResultReason irr); + BlamerBundle() : truth_has_char_boxes_(false), + incorrect_result_reason_(IRR_CORRECT), + lattice_data_(NULL) { + ClearResults(); + } + BlamerBundle(const BlamerBundle &other) { + this->CopyTruth(other); + this->CopyResults(other); + } + ~BlamerBundle() { delete[] lattice_data_; } + + // Accessors. + STRING TruthString() const { + STRING truth_str; + for (int i = 0; i < truth_text_.length(); ++i) + truth_str += truth_text_[i]; + return truth_str; + } + IncorrectResultReason incorrect_result_reason() const { + return incorrect_result_reason_; + } + bool NoTruth() const { + return incorrect_result_reason_ == IRR_NO_TRUTH || + incorrect_result_reason_ == IRR_PAGE_LAYOUT; + } + bool HasDebugInfo() const { + return debug_.length() > 0 || misadaption_debug_.length() > 0; + } + const STRING& debug() const { + return debug_; + } + const STRING& misadaption_debug() const { + return misadaption_debug_; + } + void UpdateBestRating(float rating) { + if (rating < best_correctly_segmented_rating_) + best_correctly_segmented_rating_ = rating; + } + int correct_segmentation_length() const { + return correct_segmentation_cols_.length(); + } + // Returns true if the given ratings matrix col,row position is included + // in the correct segmentation path at the given index. + bool MatrixPositionCorrect(int index, const MATRIX_COORD& coord) { + return correct_segmentation_cols_[index] == coord.col && + correct_segmentation_rows_[index] == coord.row; + } + void set_best_choice_is_dict_and_top_choice(bool value) { + best_choice_is_dict_and_top_choice_ = value; + } + const char* lattice_data() const { + return lattice_data_; + } + int lattice_size() const { + return lattice_size_; // size of lattice_data in bytes + } + void set_lattice_data(const char* data, int size) { + lattice_size_ = size; + delete[] lattice_data_; + lattice_data_ = new char[lattice_size_]; + memcpy(lattice_data_, data, lattice_size_); + } + const tesseract::ParamsTrainingBundle& params_training_bundle() const { + return params_training_bundle_; + } + // Adds a new ParamsTrainingHypothesis to the current hypothesis list. + void AddHypothesis(const tesseract::ParamsTrainingHypothesis& hypo) { + params_training_bundle_.AddHypothesis(hypo); + } + + // Functions to setup the blamer. + // Whole word string, whole word bounding box. + void SetWordTruth(const UNICHARSET& unicharset, + const char* truth_str, const TBOX& word_box); + // Single "character" string, "character" bounding box. + // May be called multiple times to indicate the characters in a word. + void SetSymbolTruth(const UNICHARSET& unicharset, + const char* char_str, const TBOX& char_box); + // Marks that there is something wrong with the truth text, like it contains + // reject characters. + void SetRejectedTruth(); + + // Returns true if the provided word_choice is correct. + bool ChoiceIsCorrect(const WERD_CHOICE* word_choice) const; + + void ClearResults() { + norm_truth_word_.DeleteAllBoxes(); + norm_box_tolerance_ = 0; + if (!NoTruth()) incorrect_result_reason_ = IRR_CORRECT; + debug_ = ""; + segsearch_is_looking_for_blame_ = false; + best_correctly_segmented_rating_ = WERD_CHOICE::kBadRating; + correct_segmentation_cols_.clear(); + correct_segmentation_rows_.clear(); + best_choice_is_dict_and_top_choice_ = false; + delete[] lattice_data_; + lattice_data_ = NULL; + lattice_size_ = 0; + } + void CopyTruth(const BlamerBundle &other) { + truth_has_char_boxes_ = other.truth_has_char_boxes_; + truth_word_ = other.truth_word_; + truth_text_ = other.truth_text_; + incorrect_result_reason_ = + (other.NoTruth() ? other.incorrect_result_reason_ : IRR_CORRECT); + } + void CopyResults(const BlamerBundle &other) { + norm_truth_word_ = other.norm_truth_word_; + norm_box_tolerance_ = other.norm_box_tolerance_; + incorrect_result_reason_ = other.incorrect_result_reason_; + segsearch_is_looking_for_blame_ = other.segsearch_is_looking_for_blame_; + best_correctly_segmented_rating_ = other.best_correctly_segmented_rating_; + correct_segmentation_cols_ = other.correct_segmentation_cols_; + correct_segmentation_rows_ = other.correct_segmentation_rows_; + best_choice_is_dict_and_top_choice_ = + other.best_choice_is_dict_and_top_choice_; + if (other.lattice_data_ != NULL) { + lattice_data_ = new char[other.lattice_size_]; + memcpy(lattice_data_, other.lattice_data_, other.lattice_size_); + lattice_size_ = other.lattice_size_; + } + else { + lattice_data_ = NULL; + } + } + const char *IncorrectReason() const; + + // Appends choice and truth details to the given debug string. + void FillDebugString(const STRING &msg, const WERD_CHOICE *choice, + STRING *debug); + + // Sets up the norm_truth_word from truth_word using the given DENORM. + void SetupNormTruthWord(const DENORM& denorm); + + // Splits *this into two pieces in bundle1 and bundle2 (preallocated, empty + // bundles) where the right edge/ of the left-hand word is word1_right, + // and the left edge of the right-hand word is word2_left. + void SplitBundle(int word1_right, int word2_left, bool debug, + BlamerBundle* bundle1, BlamerBundle* bundle2) const; + // "Joins" the blames from bundle1 and bundle2 into *this. + void JoinBlames(const BlamerBundle& bundle1, const BlamerBundle& bundle2, + bool debug); + + // If a blob with the same bounding box as one of the truth character + // bounding boxes is not classified as the corresponding truth character + // blames character classifier for incorrect answer. + void BlameClassifier(const UNICHARSET& unicharset, + const TBOX& blob_box, + const BLOB_CHOICE_LIST& choices, + bool debug); + + + // Checks whether chops were made at all the character bounding box + // boundaries in word->truth_word. If not - blames the chopper for an + // incorrect answer. + void SetChopperBlame(const WERD_RES* word, bool debug); + // Blames the classifier or the language model if, after running only the + // chopper, best_choice is incorrect and no blame has been yet set. + // Blames the classifier if best_choice is classifier's top choice and is a + // dictionary word (i.e. language model could not have helped). + // Otherwise, blames the language model (formerly permuter word adjustment). + void BlameClassifierOrLangModel( + const WERD_RES* word, + const UNICHARSET& unicharset, bool valid_permuter, bool debug); + // Sets up the correct_segmentation_* to mark the correct bounding boxes. + void SetupCorrectSegmentation(const TWERD* word, bool debug); + + // Returns true if a guided segmentation search is needed. + bool GuidedSegsearchNeeded(const WERD_CHOICE *best_choice) const; + // Setup ready to guide the segmentation search to the correct segmentation. + // The callback pp_cb is used to avoid a cyclic dependency. + // It calls into LMPainPoints::GenerateForBlamer by pre-binding the + // WERD_RES, and the LMPainPoints itself. + // pp_cb must be a permanent callback, and should be deleted by the caller. + void InitForSegSearch(const WERD_CHOICE *best_choice, + MATRIX* ratings, UNICHAR_ID wildcard_id, + bool debug, STRING *debug_str, + TessResultCallback2* pp_cb); + // Returns true if the guided segsearch is in progress. + bool GuidedSegsearchStillGoing() const; + // The segmentation search has ended. Sets the blame appropriately. + void FinishSegSearch(const WERD_CHOICE *best_choice, + bool debug, STRING *debug_str); + + // If the bundle is null or still does not indicate the correct result, + // fix it and use some backup reason for the blame. + static void LastChanceBlame(bool debug, WERD_RES* word); + + // Sets the misadaption debug if this word is incorrect, as this word is + // being adapted to. + void SetMisAdaptionDebug(const WERD_CHOICE *best_choice, bool debug); + +private: + void SetBlame(IncorrectResultReason irr, const STRING &msg, + const WERD_CHOICE *choice, bool debug) { + incorrect_result_reason_ = irr; + debug_ = IncorrectReason(); + debug_ += " to blame: "; + FillDebugString(msg, choice, &debug_); + if (debug) tprintf("SetBlame(): %s", debug_.string()); + } + +private: + // Set to true when bounding boxes for individual unichars are recorded. + bool truth_has_char_boxes_; + // The true_word (in the original image coordinate space) contains ground + // truth bounding boxes for this WERD_RES. + tesseract::BoxWord truth_word_; + // Same as above, but in normalized coordinates + // (filled in by WERD_RES::SetupForRecognition()). + tesseract::BoxWord norm_truth_word_; + // Tolerance for bounding box comparisons in normalized space. + int norm_box_tolerance_; + // Contains ground truth unichar for each of the bounding boxes in truth_word. + GenericVector truth_text_; + // The reason for incorrect OCR result. + IncorrectResultReason incorrect_result_reason_; + // Debug text associated with the blame. + STRING debug_; + // Misadaption debug information (filled in if this word was misadapted to). + STRING misadaption_debug_; + // Variables used by the segmentation search when looking for the blame. + // Set to true while segmentation search is continued after the usual + // termination condition in order to look for the blame. + bool segsearch_is_looking_for_blame_; + // Best rating for correctly segmented path + // (set and used by SegSearch when looking for blame). + float best_correctly_segmented_rating_; + // Vectors populated by SegSearch to indicate column and row indices that + // correspond to blobs with correct bounding boxes. + GenericVector correct_segmentation_cols_; + GenericVector correct_segmentation_rows_; + // Set to true if best choice is a dictionary word and + // classifier's top choice. + bool best_choice_is_dict_and_top_choice_; + // Serialized segmentation search lattice. + char *lattice_data_; + int lattice_size_; // size of lattice_data in bytes + // Information about hypotheses (paths) explored by the segmentation search. + tesseract::ParamsTrainingBundle params_training_bundle_; +}; + + +#endif // TESSERACT_CCSTRUCT_BLAMER_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/blckerr.h b/3rdparty/hgOCR/include/ccstruct/blckerr.h new file mode 100644 index 00000000..e3061639 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blckerr.h @@ -0,0 +1,29 @@ +/********************************************************************** + * File: blckerr.h (Formerly blockerr.h) + * Description: Error codes for the page block classes. + * Author: Ray Smith + * Created: Tue Mar 19 17:43:30 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef BLCKERR_H +#define BLCKERR_H + +#include "errcode.h" + +const ERRCODE BADBLOCKLINE = "Y coordinate in block out of bounds"; +const ERRCODE LOSTBLOCKLINE = "Can't find rectangle for line"; +const ERRCODE ILLEGAL_GRADIENT = "Gradient wrong side of edge step!"; +const ERRCODE WRONG_WORD = "Word doesn't have blobs of that type"; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/blobbox.cpp b/3rdparty/hgOCR/include/ccstruct/blobbox.cpp new file mode 100644 index 00000000..734d28a9 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blobbox.cpp @@ -0,0 +1,1093 @@ +/********************************************************************** + * File: blobbox.cpp (Formerly blobnbox.c) + * Description: Code for the textord blob class. + * Author: Ray Smith + * Created: Thu Jul 30 09:08:51 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "blobbox.h" +#include "allheaders.h" +#include "blobs.h" +#include "helpers.h" +#include "normalis.h" + +#define PROJECTION_MARGIN 10 //arbitrary +#define EXTERN + +ELISTIZE(BLOBNBOX) +ELIST2IZE(TO_ROW) +ELISTIZE(TO_BLOCK) + +// Up to 30 degrees is allowed for rotations of diacritic blobs. +const double kCosSmallAngle = 0.866; +// Min aspect ratio for a joined word to indicate an obvious flow direction. +const double kDefiniteAspectRatio = 2.0; +// Multiple of short length in perimeter to make a joined word. +const double kComplexShapePerimeterRatio = 1.5; +// Min multiple of linesize for medium-sized blobs in ReFilterBlobs. +const double kMinMediumSizeRatio = 0.25; +// Max multiple of linesize for medium-sized blobs in ReFilterBlobs. +const double kMaxMediumSizeRatio = 4.0; + +// Rotates the box and the underlying blob. +void BLOBNBOX::rotate(FCOORD rotation) { + cblob_ptr->rotate(rotation); + rotate_box(rotation); + compute_bounding_box(); +} + +// Reflect the box in the y-axis, leaving the underlying blob untouched. +void BLOBNBOX::reflect_box_in_y_axis() { + int left = -box.right(); + box.set_right(-box.left()); + box.set_left(left); +} + +// Rotates the box by the angle given by rotation. +// If the blob is a diacritic, then only small rotations for skew +// correction can be applied. +void BLOBNBOX::rotate_box(FCOORD rotation) { + if (IsDiacritic()) { + ASSERT_HOST(rotation.x() >= kCosSmallAngle) + ICOORD top_pt((box.left() + box.right()) / 2, base_char_top_); + ICOORD bottom_pt(top_pt.x(), base_char_bottom_); + top_pt.rotate(rotation); + base_char_top_ = top_pt.y(); + bottom_pt.rotate(rotation); + base_char_bottom_ = bottom_pt.y(); + box.rotate(rotation); + } + else { + box.rotate(rotation); + set_diacritic_box(box); + } +} + +/********************************************************************** + * BLOBNBOX::merge + * + * Merge this blob with the given blob, which should be after this. + **********************************************************************/ +void BLOBNBOX::merge( //merge blobs + BLOBNBOX *nextblob //blob to join with +) { + box += nextblob->box; //merge boxes + set_diacritic_box(box); + nextblob->joined = TRUE; +} + + +// Merge this with other, taking the outlines from other. +// Other is not deleted, but left for the caller to handle. +void BLOBNBOX::really_merge(BLOBNBOX* other) { + if (cblob_ptr != NULL && other->cblob_ptr != NULL) { + C_OUTLINE_IT ol_it(cblob_ptr->out_list()); + ol_it.add_list_after(other->cblob_ptr->out_list()); + } + compute_bounding_box(); +} + + +/********************************************************************** + * BLOBNBOX::chop + * + * Chop this blob into equal sized pieces using the x height as a guide. + * The blob is not actually chopped. Instead, fake blobs are inserted + * with the relevant bounding boxes. + **********************************************************************/ + +void BLOBNBOX::chop( //chop blobs + BLOBNBOX_IT *start_it, //location of this + BLOBNBOX_IT *end_it, //iterator + FCOORD rotation, //for landscape + float xheight //of line +) { + inT16 blobcount; //no of blobs + BLOBNBOX *newblob; //fake blob + BLOBNBOX *blob; //current blob + inT16 blobindex; //number of chop + inT16 leftx; //left edge of blob + float blobwidth; //width of each + float rightx; //right edge to scan + float ymin, ymax; //limits of new blob + float test_ymin, test_ymax; //limits of part blob + ICOORD bl, tr; //corners of box + BLOBNBOX_IT blob_it; //blob iterator + + //get no of chops + blobcount = (inT16)floor(box.width() / xheight); + if (blobcount > 1 && cblob_ptr != NULL) { + //width of each + blobwidth = (float)(box.width() + 1) / blobcount; + for (blobindex = blobcount - 1, rightx = box.right(); + blobindex >= 0; blobindex--, rightx -= blobwidth) { + ymin = (float)MAX_INT32; + ymax = (float)-MAX_INT32; + blob_it = *start_it; + do { + blob = blob_it.data(); + find_cblob_vlimits(blob->cblob_ptr, rightx - blobwidth, + rightx, + /*rotation, */ test_ymin, test_ymax); + blob_it.forward(); + UpdateRange(test_ymin, test_ymax, &ymin, &ymax); + } while (blob != end_it->data()); + if (ymin < ymax) { + leftx = (inT16)floor(rightx - blobwidth); + if (leftx < box.left()) + leftx = box.left(); //clip to real box + bl = ICOORD(leftx, (inT16)floor(ymin)); + tr = ICOORD((inT16)ceil(rightx), (inT16)ceil(ymax)); + if (blobindex == 0) + box = TBOX(bl, tr); //change box + else { + newblob = new BLOBNBOX; + //box is all it has + newblob->box = TBOX(bl, tr); + //stay on current + newblob->base_char_top_ = tr.y(); + newblob->base_char_bottom_ = bl.y(); + end_it->add_after_stay_put(newblob); + } + } + } + } +} + +// Returns the box gaps between this and its neighbours_ in an array +// indexed by BlobNeighbourDir. +void BLOBNBOX::NeighbourGaps(int gaps[BND_COUNT]) const { + for (int dir = 0; dir < BND_COUNT; ++dir) { + gaps[dir] = MAX_INT16; + BLOBNBOX* neighbour = neighbours_[dir]; + if (neighbour != NULL) { + const TBOX& n_box = neighbour->bounding_box(); + if (dir == BND_LEFT || dir == BND_RIGHT) { + gaps[dir] = box.x_gap(n_box); + } + else { + gaps[dir] = box.y_gap(n_box); + } + } + } +} +// Returns the min and max horizontal and vertical gaps (from NeighbourGaps) +// modified so that if the max exceeds the max dimension of the blob, and +// the min is less, the max is replaced with the min. +// The objective is to catch cases where there is only a single neighbour +// and avoid reporting the other gap as a ridiculously large number +void BLOBNBOX::MinMaxGapsClipped(int* h_min, int* h_max, + int* v_min, int* v_max) const { + int max_dimension = MAX(box.width(), box.height()); + int gaps[BND_COUNT]; + NeighbourGaps(gaps); + *h_min = MIN(gaps[BND_LEFT], gaps[BND_RIGHT]); + *h_max = MAX(gaps[BND_LEFT], gaps[BND_RIGHT]); + if (*h_max > max_dimension && *h_min < max_dimension) *h_max = *h_min; + *v_min = MIN(gaps[BND_ABOVE], gaps[BND_BELOW]); + *v_max = MAX(gaps[BND_ABOVE], gaps[BND_BELOW]); + if (*v_max > max_dimension && *v_min < max_dimension) *v_max = *v_min; +} + +// NULLs out any neighbours that are DeletableNoise to remove references. +void BLOBNBOX::CleanNeighbours() { + for (int dir = 0; dir < BND_COUNT; ++dir) { + BLOBNBOX* neighbour = neighbours_[dir]; + if (neighbour != NULL && neighbour->DeletableNoise()) { + neighbours_[dir] = NULL; + good_stroke_neighbours_[dir] = false; + } + } +} + +// Returns positive if there is at least one side neighbour that has a similar +// stroke width and is not on the other side of a rule line. +int BLOBNBOX::GoodTextBlob() const { + int score = 0; + for (int dir = 0; dir < BND_COUNT; ++dir) { + BlobNeighbourDir bnd = static_cast(dir); + if (good_stroke_neighbour(bnd)) + ++score; + } + return score; +} + +// Returns the number of side neighbours that are of type BRT_NOISE. +int BLOBNBOX::NoisyNeighbours() const { + int count = 0; + for (int dir = 0; dir < BND_COUNT; ++dir) { + BlobNeighbourDir bnd = static_cast(dir); + BLOBNBOX* blob = neighbour(bnd); + if (blob != NULL && blob->region_type() == BRT_NOISE) + ++count; + } + return count; +} + +// Returns true, and sets vert_possible/horz_possible if the blob has some +// feature that makes it individually appear to flow one way. +// eg if it has a high aspect ratio, yet has a complex shape, such as a +// joined word in Latin, Arabic, or Hindi, rather than being a -, I, l, 1 etc. +bool BLOBNBOX::DefiniteIndividualFlow() { + if (cblob() == NULL) return false; + int box_perimeter = 2 * (box.height() + box.width()); + if (box.width() > box.height() * kDefiniteAspectRatio) { + // Attempt to distinguish a wide joined word from a dash. + // If it is a dash, then its perimeter is approximately + // 2 * (box width + stroke width), but more if the outline is noisy, + // so perimeter - 2*(box width + stroke width) should be close to zero. + // A complex shape such as a joined word should have a much larger value. + int perimeter = cblob()->perimeter(); + if (vert_stroke_width() > 0 || perimeter <= 0) + perimeter -= 2 * vert_stroke_width(); + else + perimeter -= 4 * cblob()->area() / perimeter; + perimeter -= 2 * box.width(); + // Use a multiple of the box perimeter as a threshold. + if (perimeter > kComplexShapePerimeterRatio * box_perimeter) { + set_vert_possible(false); + set_horz_possible(true); + return true; + } + } + if (box.height() > box.width() * kDefiniteAspectRatio) { + // As above, but for a putative vertical word vs a I/1/l. + int perimeter = cblob()->perimeter(); + if (horz_stroke_width() > 0 || perimeter <= 0) + perimeter -= 2 * horz_stroke_width(); + else + perimeter -= 4 * cblob()->area() / perimeter; + perimeter -= 2 * box.height(); + if (perimeter > kComplexShapePerimeterRatio * box_perimeter) { + set_vert_possible(true); + set_horz_possible(false); + return true; + } + } + return false; +} + +// Returns true if there is no tabstop violation in merging this and other. +bool BLOBNBOX::ConfirmNoTabViolation(const BLOBNBOX& other) const { + if (box.left() < other.box.left() && box.left() < other.left_rule_) + return false; + if (other.box.left() < box.left() && other.box.left() < left_rule_) + return false; + if (box.right() > other.box.right() && box.right() > other.right_rule_) + return false; + if (other.box.right() > box.right() && other.box.right() > right_rule_) + return false; + return true; +} + +// Returns true if other has a similar stroke width to this. +bool BLOBNBOX::MatchingStrokeWidth(const BLOBNBOX& other, + double fractional_tolerance, + double constant_tolerance) const { + // The perimeter-based width is used as a backup in case there is + // no information in the blob. + double p_width = area_stroke_width(); + double n_p_width = other.area_stroke_width(); + float h_tolerance = horz_stroke_width_ * fractional_tolerance + + constant_tolerance; + float v_tolerance = vert_stroke_width_ * fractional_tolerance + + constant_tolerance; + double p_tolerance = p_width * fractional_tolerance + + constant_tolerance; + bool h_zero = horz_stroke_width_ == 0.0f || other.horz_stroke_width_ == 0.0f; + bool v_zero = vert_stroke_width_ == 0.0f || other.vert_stroke_width_ == 0.0f; + bool h_ok = !h_zero && NearlyEqual(horz_stroke_width_, + other.horz_stroke_width_, h_tolerance); + bool v_ok = !v_zero && NearlyEqual(vert_stroke_width_, + other.vert_stroke_width_, v_tolerance); + bool p_ok = h_zero && v_zero && NearlyEqual(p_width, n_p_width, p_tolerance); + // For a match, at least one of the horizontal and vertical widths + // must match, and the other one must either match or be zero. + // Only if both are zero will we look at the perimeter metric. + return p_ok || ((v_ok || h_ok) && (h_ok || h_zero) && (v_ok || v_zero)); +} + +// Returns a bounding box of the outline contained within the +// given horizontal range. +TBOX BLOBNBOX::BoundsWithinLimits(int left, int right) { + FCOORD no_rotation(1.0f, 0.0f); + float top = box.top(); + float bottom = box.bottom(); + if (cblob_ptr != NULL) { + find_cblob_limits(cblob_ptr, static_cast(left), + static_cast(right), no_rotation, + bottom, top); + } + + if (top < bottom) { + top = box.top(); + bottom = box.bottom(); + } + FCOORD bot_left(left, bottom); + FCOORD top_right(right, top); + TBOX shrunken_box(bot_left); + TBOX shrunken_box2(top_right); + shrunken_box += shrunken_box2; + return shrunken_box; +} + +// Estimates and stores the baseline position based on the shape of the +// outline. +void BLOBNBOX::EstimateBaselinePosition() { + baseline_y_ = box.bottom(); // The default. + if (cblob_ptr == NULL) return; + baseline_y_ = cblob_ptr->EstimateBaselinePosition(); +} + +// Helper to call CleanNeighbours on all blobs on the list. +void BLOBNBOX::CleanNeighbours(BLOBNBOX_LIST* blobs) { + BLOBNBOX_IT blob_it(blobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + blob_it.data()->CleanNeighbours(); + } +} + +// Helper to delete all the deletable blobs on the list. +void BLOBNBOX::DeleteNoiseBlobs(BLOBNBOX_LIST* blobs) { + BLOBNBOX_IT blob_it(blobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + BLOBNBOX* blob = blob_it.data(); + if (blob->DeletableNoise()) { + delete blob->cblob(); + delete blob_it.extract(); + } + } +} + +// Helper to compute edge offsets for all the blobs on the list. +// See coutln.h for an explanation of edge offsets. +void BLOBNBOX::ComputeEdgeOffsets(Pix* thresholds, Pix* grey, + BLOBNBOX_LIST* blobs) { + int grey_height = 0; + int thr_height = 0; + int scale_factor = 1; + if (thresholds != NULL && grey != NULL) { + grey_height = pixGetHeight(grey); + thr_height = pixGetHeight(thresholds); + scale_factor = + IntCastRounded(static_cast(grey_height) / thr_height); + } + BLOBNBOX_IT blob_it(blobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + BLOBNBOX* blob = blob_it.data(); + if (blob->cblob() != NULL) { + // Get the threshold that applies to this blob. + l_uint32 threshold = 128; + if (thresholds != NULL && grey != NULL) { + const TBOX& box = blob->cblob()->bounding_box(); + // Transform the coordinates if required. + TPOINT pt((box.left() + box.right()) / 2, + (box.top() + box.bottom()) / 2); + pixGetPixel(thresholds, pt.x / scale_factor, + thr_height - 1 - pt.y / scale_factor, &threshold); + } + blob->cblob()->ComputeEdgeOffsets(threshold, grey); + } + } +} + + +#ifndef GRAPHICS_DISABLED +// Helper to draw all the blobs on the list in the given body_colour, +// with child outlines in the child_colour. +void BLOBNBOX::PlotBlobs(BLOBNBOX_LIST* list, + ScrollView::Color body_colour, + ScrollView::Color child_colour, + ScrollView* win) { + BLOBNBOX_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot(win, body_colour, child_colour); + } +} + +// Helper to draw only DeletableNoise blobs (unowned, BRT_NOISE) on the +// given list in the given body_colour, with child outlines in the +// child_colour. +void BLOBNBOX::PlotNoiseBlobs(BLOBNBOX_LIST* list, + ScrollView::Color body_colour, + ScrollView::Color child_colour, + ScrollView* win) { + BLOBNBOX_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + BLOBNBOX* blob = it.data(); + if (blob->DeletableNoise()) + blob->plot(win, body_colour, child_colour); + } +} + +ScrollView::Color BLOBNBOX::TextlineColor(BlobRegionType region_type, + BlobTextFlowType flow_type) { + switch (region_type) { + case BRT_HLINE: + return ScrollView::BROWN; + case BRT_VLINE: + return ScrollView::DARK_GREEN; + case BRT_RECTIMAGE: + return ScrollView::RED; + case BRT_POLYIMAGE: + return ScrollView::ORANGE; + case BRT_UNKNOWN: + return flow_type == BTFT_NONTEXT ? ScrollView::CYAN : ScrollView::WHITE; + case BRT_VERT_TEXT: + if (flow_type == BTFT_STRONG_CHAIN || flow_type == BTFT_TEXT_ON_IMAGE) + return ScrollView::GREEN; + if (flow_type == BTFT_CHAIN) + return ScrollView::LIME_GREEN; + return ScrollView::YELLOW; + case BRT_TEXT: + if (flow_type == BTFT_STRONG_CHAIN) + return ScrollView::BLUE; + if (flow_type == BTFT_TEXT_ON_IMAGE) + return ScrollView::LIGHT_BLUE; + if (flow_type == BTFT_CHAIN) + return ScrollView::MEDIUM_BLUE; + if (flow_type == BTFT_LEADER) + return ScrollView::WHEAT; + if (flow_type == BTFT_NONTEXT) + return ScrollView::PINK; + return ScrollView::MAGENTA; + default: + return ScrollView::GREY; + } +} + +// Keep in sync with BlobRegionType. +ScrollView::Color BLOBNBOX::BoxColor() const { + return TextlineColor(region_type_, flow_); +} + +void BLOBNBOX::plot(ScrollView* window, // window to draw in + ScrollView::Color blob_colour, // for outer bits + ScrollView::Color child_colour) { // for holes + if (cblob_ptr != NULL) + cblob_ptr->plot(window, blob_colour, child_colour); +} +#endif +/********************************************************************** + * find_cblob_limits + * + * Scan the outlines of the cblob to locate the y min and max + * between the given x limits. + **********************************************************************/ + +void find_cblob_limits( //get y limits + C_BLOB *blob, //blob to search + float leftx, //x limits + float rightx, + FCOORD rotation, //for landscape + float &ymin, //output y limits + float &ymax) { + inT16 stepindex; //current point + ICOORD pos; //current coords + ICOORD vec; //rotated step + C_OUTLINE *outline; //current outline + //outlines + C_OUTLINE_IT out_it = blob->out_list(); + + ymin = (float)MAX_INT32; + ymax = (float)-MAX_INT32; + for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) { + outline = out_it.data(); + pos = outline->start_pos(); //get coords + pos.rotate(rotation); + for (stepindex = 0; stepindex < outline->pathlength(); stepindex++) { + //inside + if (pos.x() >= leftx && pos.x() <= rightx) { + UpdateRange(pos.y(), &ymin, &ymax); + } + vec = outline->step(stepindex); + vec.rotate(rotation); + pos += vec; //move to next + } + } +} + + +/********************************************************************** + * find_cblob_vlimits + * + * Scan the outlines of the cblob to locate the y min and max + * between the given x limits. + **********************************************************************/ + +void find_cblob_vlimits( //get y limits + C_BLOB *blob, //blob to search + float leftx, //x limits + float rightx, + float &ymin, //output y limits + float &ymax) { + inT16 stepindex; //current point + ICOORD pos; //current coords + ICOORD vec; //rotated step + C_OUTLINE *outline; //current outline + //outlines + C_OUTLINE_IT out_it = blob->out_list(); + + ymin = (float)MAX_INT32; + ymax = (float)-MAX_INT32; + for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) { + outline = out_it.data(); + pos = outline->start_pos(); //get coords + for (stepindex = 0; stepindex < outline->pathlength(); stepindex++) { + //inside + if (pos.x() >= leftx && pos.x() <= rightx) { + UpdateRange(pos.y(), &ymin, &ymax); + } + vec = outline->step(stepindex); + pos += vec; //move to next + } + } +} + + +/********************************************************************** + * find_cblob_hlimits + * + * Scan the outlines of the cblob to locate the x min and max + * between the given y limits. + **********************************************************************/ + +void find_cblob_hlimits( //get x limits + C_BLOB *blob, //blob to search + float bottomy, //y limits + float topy, + float &xmin, //output x limits + float &xmax) { + inT16 stepindex; //current point + ICOORD pos; //current coords + ICOORD vec; //rotated step + C_OUTLINE *outline; //current outline + //outlines + C_OUTLINE_IT out_it = blob->out_list(); + + xmin = (float)MAX_INT32; + xmax = (float)-MAX_INT32; + for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) { + outline = out_it.data(); + pos = outline->start_pos(); //get coords + for (stepindex = 0; stepindex < outline->pathlength(); stepindex++) { + //inside + if (pos.y() >= bottomy && pos.y() <= topy) { + UpdateRange(pos.x(), &xmin, &xmax); + } + vec = outline->step(stepindex); + pos += vec; //move to next + } + } +} + +/********************************************************************** + * crotate_cblob + * + * Rotate the copy by the given vector and return a C_BLOB. + **********************************************************************/ + +C_BLOB *crotate_cblob( //rotate it + C_BLOB *blob, //blob to search + FCOORD rotation //for landscape +) { + C_OUTLINE_LIST out_list; //output outlines + //input outlines + C_OUTLINE_IT in_it = blob->out_list(); + //output outlines + C_OUTLINE_IT out_it = &out_list; + + for (in_it.mark_cycle_pt(); !in_it.cycled_list(); in_it.forward()) { + out_it.add_after_then_move(new C_OUTLINE(in_it.data(), rotation)); + } + return new C_BLOB(&out_list); +} + + +/********************************************************************** + * box_next + * + * Compute the bounding box of this blob with merging of x overlaps + * but no pre-chopping. + * Then move the iterator on to the start of the next blob. + **********************************************************************/ + +TBOX box_next( //get bounding box + BLOBNBOX_IT *it //iterator to blobds +) { + BLOBNBOX *blob; //current blob + TBOX result; //total box + + blob = it->data(); + result = blob->bounding_box(); + do { + it->forward(); + blob = it->data(); + if (blob->cblob() == NULL) + //was pre-chopped + result += blob->bounding_box(); + } + //until next real blob + while ((blob->cblob() == NULL) || blob->joined_to_prev()); + return result; +} + + +/********************************************************************** + * box_next_pre_chopped + * + * Compute the bounding box of this blob with merging of x overlaps + * but WITH pre-chopping. + * Then move the iterator on to the start of the next pre-chopped blob. + **********************************************************************/ + +TBOX box_next_pre_chopped( //get bounding box + BLOBNBOX_IT *it //iterator to blobds +) { + BLOBNBOX *blob; //current blob + TBOX result; //total box + + blob = it->data(); + result = blob->bounding_box(); + do { + it->forward(); + blob = it->data(); + } + //until next real blob + while (blob->joined_to_prev()); + return result; +} + + +/********************************************************************** + * TO_ROW::TO_ROW + * + * Constructor to make a row from a blob. + **********************************************************************/ + +TO_ROW::TO_ROW( //constructor + BLOBNBOX * blob, //first blob + float top, //corrected top + float bottom, //of row + float row_size //ideal +) { + clear(); + y_min = bottom; + y_max = top; + initial_y_min = bottom; + + float diff; //in size + BLOBNBOX_IT it = &blobs; //list of blobs + + it.add_to_end(blob); + diff = top - bottom - row_size; + if (diff > 0) { + y_max -= diff / 2; + y_min += diff / 2; + } + //very small object + else if ((top - bottom) * 3 < row_size) { + diff = row_size / 3 + bottom - top; + y_max += diff / 2; + y_min -= diff / 2; + } +} + +void TO_ROW::print() const { + tprintf("pitch=%d, fp=%g, fps=%g, fpns=%g, prs=%g, prns=%g," + " spacing=%g xh=%g y_origin=%g xev=%d, asc=%g, desc=%g," + " body=%g, minsp=%d maxnsp=%d, thr=%d kern=%g sp=%g\n", + pitch_decision, fixed_pitch, fp_space, fp_nonsp, pr_space, pr_nonsp, + spacing, xheight, y_origin, xheight_evidence, ascrise, descdrop, + body_size, min_space, max_nonspace, space_threshold, kern_size, + space_size); +} + +/********************************************************************** + * TO_ROW:add_blob + * + * Add the blob to the end of the row. + **********************************************************************/ + +void TO_ROW::add_blob( //constructor + BLOBNBOX *blob, //first blob + float top, //corrected top + float bottom, //of row + float row_size //ideal +) { + float allowed; //allowed expansion + float available; //expansion + BLOBNBOX_IT it = &blobs; //list of blobs + + it.add_to_end(blob); + allowed = row_size + y_min - y_max; + if (allowed > 0) { + available = top > y_max ? top - y_max : 0; + if (bottom < y_min) + //total available + available += y_min - bottom; + if (available > 0) { + available += available; //do it gradually + if (available < allowed) + available = allowed; + if (bottom < y_min) + y_min -= (y_min - bottom) * allowed / available; + if (top > y_max) + y_max += (top - y_max) * allowed / available; + } + } +} + + +/********************************************************************** + * TO_ROW:insert_blob + * + * Add the blob to the row in the correct position. + **********************************************************************/ + +void TO_ROW::insert_blob( //constructor + BLOBNBOX *blob //first blob +) { + BLOBNBOX_IT it = &blobs; //list of blobs + + if (it.empty()) + it.add_before_then_move(blob); + else { + it.mark_cycle_pt(); + while (!it.cycled_list() + && it.data()->bounding_box().left() <= + blob->bounding_box().left()) + it.forward(); + if (it.cycled_list()) + it.add_to_end(blob); + else + it.add_before_stay_put(blob); + } +} + + +/********************************************************************** + * TO_ROW::compute_vertical_projection + * + * Compute the vertical projection of a TO_ROW from its blobs. + **********************************************************************/ + +void TO_ROW::compute_vertical_projection() { //project whole row + TBOX row_box; //bound of row + BLOBNBOX *blob; //current blob + TBOX blob_box; //bounding box + BLOBNBOX_IT blob_it = blob_list(); + + if (blob_it.empty()) + return; + row_box = blob_it.data()->bounding_box(); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) + row_box += blob_it.data()->bounding_box(); + + projection.set_range(row_box.left() - PROJECTION_MARGIN, + row_box.right() + PROJECTION_MARGIN); + projection_left = row_box.left() - PROJECTION_MARGIN; + projection_right = row_box.right() + PROJECTION_MARGIN; + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + blob = blob_it.data(); + if (blob->cblob() != NULL) + vertical_cblob_projection(blob->cblob(), &projection); + } +} + + +/********************************************************************** + * TO_ROW::clear + * + * Zero out all scalar members. + **********************************************************************/ +void TO_ROW::clear() { + all_caps = 0; + used_dm_model = 0; + projection_left = 0; + projection_right = 0; + pitch_decision = PITCH_DUNNO; + fixed_pitch = 0.0; + fp_space = 0.0; + fp_nonsp = 0.0; + pr_space = 0.0; + pr_nonsp = 0.0; + spacing = 0.0; + xheight = 0.0; + xheight_evidence = 0; + body_size = 0.0; + ascrise = 0.0; + descdrop = 0.0; + min_space = 0; + max_nonspace = 0; + space_threshold = 0; + kern_size = 0.0; + space_size = 0.0; + y_min = 0.0; + y_max = 0.0; + initial_y_min = 0.0; + m = 0.0; + c = 0.0; + error = 0.0; + para_c = 0.0; + para_error = 0.0; + y_origin = 0.0; + credibility = 0.0; + num_repeated_sets_ = -1; +} + + +/********************************************************************** + * vertical_cblob_projection + * + * Compute the vertical projection of a cblob from its outlines + * and add to the given STATS. + **********************************************************************/ + +void vertical_cblob_projection( //project outlines + C_BLOB *blob, //blob to project + STATS *stats //output +) { + //outlines of blob + C_OUTLINE_IT out_it = blob->out_list(); + + for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) { + vertical_coutline_projection(out_it.data(), stats); + } +} + + +/********************************************************************** + * vertical_coutline_projection + * + * Compute the vertical projection of a outline from its outlines + * and add to the given STATS. + **********************************************************************/ + +void vertical_coutline_projection( //project outlines + C_OUTLINE *outline, //outline to project + STATS *stats //output +) { + ICOORD pos; //current point + ICOORD step; //edge step + inT32 length; //of outline + inT16 stepindex; //current step + C_OUTLINE_IT out_it = outline->child(); + + pos = outline->start_pos(); + length = outline->pathlength(); + for (stepindex = 0; stepindex < length; stepindex++) { + step = outline->step(stepindex); + if (step.x() > 0) { + stats->add(pos.x(), -pos.y()); + } + else if (step.x() < 0) { + stats->add(pos.x() - 1, pos.y()); + } + pos += step; + } + + for (out_it.mark_cycle_pt(); !out_it.cycled_list(); out_it.forward()) { + vertical_coutline_projection(out_it.data(), stats); + } +} + + +/********************************************************************** + * TO_BLOCK::TO_BLOCK + * + * Constructor to make a TO_BLOCK from a real block. + **********************************************************************/ + +TO_BLOCK::TO_BLOCK( //make a block + BLOCK *src_block //real block +) { + clear(); + block = src_block; +} + +static void clear_blobnboxes(BLOBNBOX_LIST* boxes) { + BLOBNBOX_IT it = boxes; + // A BLOBNBOX generally doesn't own its blobs, so if they do, you + // have to delete them explicitly. + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + BLOBNBOX* box = it.data(); + if (box->cblob() != NULL) + delete box->cblob(); + } +} + +/********************************************************************** + * TO_BLOCK::clear + * + * Zero out all scalar members. + **********************************************************************/ +void TO_BLOCK::clear() { + block = NULL; + pitch_decision = PITCH_DUNNO; + line_spacing = 0.0; + line_size = 0.0; + max_blob_size = 0.0; + baseline_offset = 0.0; + xheight = 0.0; + fixed_pitch = 0.0; + kern_size = 0.0; + space_size = 0.0; + min_space = 0; + max_nonspace = 0; + fp_space = 0.0; + fp_nonsp = 0.0; + pr_space = 0.0; + pr_nonsp = 0.0; + key_row = NULL; +} + + +TO_BLOCK::~TO_BLOCK() { + // Any residual BLOBNBOXes at this stage own their blobs, so delete them. + clear_blobnboxes(&blobs); + clear_blobnboxes(&underlines); + clear_blobnboxes(&noise_blobs); + clear_blobnboxes(&small_blobs); + clear_blobnboxes(&large_blobs); +} + +// Helper function to divide the input blobs over noise, small, medium +// and large lists. Blobs small in height and (small in width or large in width) +// go in the noise list. Dash (-) candidates go in the small list, and +// medium and large are by height. +// SIDE-EFFECT: reset all blobs to initial state by calling Init(). +static void SizeFilterBlobs(int min_height, int max_height, + BLOBNBOX_LIST* src_list, + BLOBNBOX_LIST* noise_list, + BLOBNBOX_LIST* small_list, + BLOBNBOX_LIST* medium_list, + BLOBNBOX_LIST* large_list) { + BLOBNBOX_IT noise_it(noise_list); + BLOBNBOX_IT small_it(small_list); + BLOBNBOX_IT medium_it(medium_list); + BLOBNBOX_IT large_it(large_list); + for (BLOBNBOX_IT src_it(src_list); !src_it.empty(); src_it.forward()) { + BLOBNBOX* blob = src_it.extract(); + blob->ReInit(); + int width = blob->bounding_box().width(); + int height = blob->bounding_box().height(); + if (height < min_height && + (width < min_height || width > max_height)) + noise_it.add_after_then_move(blob); + else if (height > max_height) + large_it.add_after_then_move(blob); + else if (height < min_height) + small_it.add_after_then_move(blob); + else + medium_it.add_after_then_move(blob); + } +} + +// Reorganize the blob lists with a different definition of small, medium +// and large, compared to the original definition. +// Height is still the primary filter key, but medium width blobs of small +// height become small, and very wide blobs of small height stay noise, along +// with small dot-shaped blobs. +void TO_BLOCK::ReSetAndReFilterBlobs() { + int min_height = IntCastRounded(kMinMediumSizeRatio * line_size); + int max_height = IntCastRounded(kMaxMediumSizeRatio * line_size); + BLOBNBOX_LIST noise_list; + BLOBNBOX_LIST small_list; + BLOBNBOX_LIST medium_list; + BLOBNBOX_LIST large_list; + SizeFilterBlobs(min_height, max_height, &blobs, + &noise_list, &small_list, &medium_list, &large_list); + SizeFilterBlobs(min_height, max_height, &large_blobs, + &noise_list, &small_list, &medium_list, &large_list); + SizeFilterBlobs(min_height, max_height, &small_blobs, + &noise_list, &small_list, &medium_list, &large_list); + SizeFilterBlobs(min_height, max_height, &noise_blobs, + &noise_list, &small_list, &medium_list, &large_list); + BLOBNBOX_IT blob_it(&blobs); + blob_it.add_list_after(&medium_list); + blob_it.set_to_list(&large_blobs); + blob_it.add_list_after(&large_list); + blob_it.set_to_list(&small_blobs); + blob_it.add_list_after(&small_list); + blob_it.set_to_list(&noise_blobs); + blob_it.add_list_after(&noise_list); +} + +// Deletes noise blobs from all lists where not owned by a ColPartition. +void TO_BLOCK::DeleteUnownedNoise() { + BLOBNBOX::CleanNeighbours(&blobs); + BLOBNBOX::CleanNeighbours(&small_blobs); + BLOBNBOX::CleanNeighbours(&noise_blobs); + BLOBNBOX::CleanNeighbours(&large_blobs); + BLOBNBOX::DeleteNoiseBlobs(&blobs); + BLOBNBOX::DeleteNoiseBlobs(&small_blobs); + BLOBNBOX::DeleteNoiseBlobs(&noise_blobs); + BLOBNBOX::DeleteNoiseBlobs(&large_blobs); +} + +// Computes and stores the edge offsets on each blob for use in feature +// extraction, using greyscale if the supplied grey and thresholds pixes +// are 8-bit or otherwise (if NULL or not 8 bit) the original binary +// edge step outlines. +// Thresholds must either be the same size as grey or an integer down-scale +// of grey. +// See coutln.h for an explanation of edge offsets. +void TO_BLOCK::ComputeEdgeOffsets(Pix* thresholds, Pix* grey) { + BLOBNBOX::ComputeEdgeOffsets(thresholds, grey, &blobs); + BLOBNBOX::ComputeEdgeOffsets(thresholds, grey, &small_blobs); + BLOBNBOX::ComputeEdgeOffsets(thresholds, grey, &noise_blobs); +} + +#ifndef GRAPHICS_DISABLED +// Draw the noise blobs from all lists in red. +void TO_BLOCK::plot_noise_blobs(ScrollView* win) { + BLOBNBOX::PlotNoiseBlobs(&noise_blobs, ScrollView::RED, ScrollView::RED, win); + BLOBNBOX::PlotNoiseBlobs(&small_blobs, ScrollView::RED, ScrollView::RED, win); + BLOBNBOX::PlotNoiseBlobs(&large_blobs, ScrollView::RED, ScrollView::RED, win); + BLOBNBOX::PlotNoiseBlobs(&blobs, ScrollView::RED, ScrollView::RED, win); +} + +// Draw the blobs on the various lists in the block in different colors. +void TO_BLOCK::plot_graded_blobs(ScrollView* win) { + BLOBNBOX::PlotBlobs(&noise_blobs, ScrollView::CORAL, ScrollView::BLUE, win); + BLOBNBOX::PlotBlobs(&small_blobs, ScrollView::GOLDENROD, ScrollView::YELLOW, + win); + BLOBNBOX::PlotBlobs(&large_blobs, ScrollView::DARK_GREEN, ScrollView::YELLOW, + win); + BLOBNBOX::PlotBlobs(&blobs, ScrollView::WHITE, ScrollView::BROWN, win); +} + +/********************************************************************** + * plot_blob_list + * + * Draw a list of blobs. + **********************************************************************/ + +void plot_blob_list(ScrollView* win, // window to draw in + BLOBNBOX_LIST *list, // blob list + ScrollView::Color body_colour, // colour to draw + ScrollView::Color child_colour) { // colour of child + BLOBNBOX_IT it = list; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot(win, body_colour, child_colour); + } +} +#endif // GRAPHICS_DISABLED diff --git a/3rdparty/hgOCR/include/ccstruct/blobbox.h b/3rdparty/hgOCR/include/ccstruct/blobbox.h new file mode 100644 index 00000000..22771eeb --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blobbox.h @@ -0,0 +1,847 @@ +/********************************************************************** + * File: blobbox.h (Formerly blobnbox.h) + * Description: Code for the textord blob class. + * Author: Ray Smith + * Created: Thu Jul 30 09:08:51 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef BLOBBOX_H +#define BLOBBOX_H + +#include "clst.h" +#include "elst2.h" +#include "werd.h" +#include "ocrblock.h" +#include "statistc.h" + +enum PITCH_TYPE +{ + PITCH_DUNNO, // insufficient data + PITCH_DEF_FIXED, // definitely fixed + PITCH_MAYBE_FIXED, // could be + PITCH_DEF_PROP, + PITCH_MAYBE_PROP, + PITCH_CORR_FIXED, + PITCH_CORR_PROP +}; + +// The possible tab-stop types of each side of a BLOBNBOX. +// The ordering is important, as it is used for deleting dead-ends in the +// search. ALIGNED, CONFIRMED and VLINE should remain greater than the +// non-aligned, unset, or deleted members. +enum TabType { + TT_NONE, // Not a tab. + TT_DELETED, // Not a tab after detailed analysis. + TT_MAYBE_RAGGED, // Initial designation of a tab-stop candidate. + TT_MAYBE_ALIGNED, // Initial designation of a tab-stop candidate. + TT_CONFIRMED, // Aligned with neighbours. + TT_VLINE // Detected as a vertical line. +}; + +// The possible region types of a BLOBNBOX. +// Note: keep all the text types > BRT_UNKNOWN and all the image types less. +// Keep in sync with kBlobTypes in colpartition.cpp and BoxColor, and the +// *Type static functions below. +enum BlobRegionType { + BRT_NOISE, // Neither text nor image. + BRT_HLINE, // Horizontal separator line. + BRT_VLINE, // Vertical separator line. + BRT_RECTIMAGE, // Rectangular image. + BRT_POLYIMAGE, // Non-rectangular image. + BRT_UNKNOWN, // Not determined yet. + BRT_VERT_TEXT, // Vertical alignment, not necessarily vertically oriented. + BRT_TEXT, // Convincing text. + + BRT_COUNT // Number of possibilities. +}; + +// enum for elements of arrays that refer to neighbours. +// NOTE: keep in this order, so ^2 can be used to flip direction. +enum BlobNeighbourDir { + BND_LEFT, + BND_BELOW, + BND_RIGHT, + BND_ABOVE, + BND_COUNT +}; + +// enum for special type of text characters, such as math symbol or italic. +enum BlobSpecialTextType { + BSTT_NONE, // No special. + BSTT_ITALIC, // Italic style. + BSTT_DIGIT, // Digit symbols. + BSTT_MATH, // Mathmatical symobls (not including digit). + BSTT_UNCLEAR, // Characters with low recognition rate. + BSTT_SKIP, // Characters that we skip labeling (usually too small). + BSTT_COUNT +}; + +inline BlobNeighbourDir DirOtherWay(BlobNeighbourDir dir) { + return static_cast(dir ^ 2); +} + +// BlobTextFlowType indicates the quality of neighbouring information +// related to a chain of connected components, either horizontally or +// vertically. Also used by ColPartition for the collection of blobs +// within, which should all have the same value in most cases. +enum BlobTextFlowType { + BTFT_NONE, // No text flow set yet. + BTFT_NONTEXT, // Flow too poor to be likely text. + BTFT_NEIGHBOURS, // Neighbours support flow in this direction. + BTFT_CHAIN, // There is a weak chain of text in this direction. + BTFT_STRONG_CHAIN, // There is a strong chain of text in this direction. + BTFT_TEXT_ON_IMAGE, // There is a strong chain of text on an image. + BTFT_LEADER, // Leader dots/dashes etc. + BTFT_COUNT +}; + +// Returns true if type1 dominates type2 in a merge. Mostly determined by the +// ordering of the enum, LEADER is weak and dominates nothing. +// The function is anti-symmetric (t1 > t2) === !(t2 > t1), except that +// this cannot be true if t1 == t2, so the result is undefined. +inline bool DominatesInMerge(BlobTextFlowType type1, BlobTextFlowType type2) { + // LEADER always loses. + if (type1 == BTFT_LEADER) return false; + if (type2 == BTFT_LEADER) return true; + // With those out of the way, the ordering of the enum determines the result. + return type1 >= type2; +} + +namespace tesseract { + class ColPartition; +} + +class BLOBNBOX; +ELISTIZEH(BLOBNBOX) +class BLOBNBOX :public ELIST_LINK +{ +public: + BLOBNBOX() { + ConstructionInit(); + } + explicit BLOBNBOX(C_BLOB *srcblob) { + box = srcblob->bounding_box(); + ConstructionInit(); + cblob_ptr = srcblob; + area = static_cast(srcblob->area()); + } + ~BLOBNBOX() { + if (owns_cblob_) delete cblob_ptr; + } + static BLOBNBOX* RealBlob(C_OUTLINE* outline) { + C_BLOB* blob = new C_BLOB(outline); + return new BLOBNBOX(blob); + } + + // Rotates the box and the underlying blob. + void rotate(FCOORD rotation); + + // Methods that act on the box without touching the underlying blob. + // Reflect the box in the y-axis, leaving the underlying blob untouched. + void reflect_box_in_y_axis(); + // Rotates the box by the angle given by rotation. + // If the blob is a diacritic, then only small rotations for skew + // correction can be applied. + void rotate_box(FCOORD rotation); + // Moves just the box by the given vector. + void translate_box(ICOORD v) { + if (IsDiacritic()) { + box.move(v); + base_char_top_ += v.y(); + base_char_bottom_ += v.y(); + } + else { + box.move(v); + set_diacritic_box(box); + } + } + void merge(BLOBNBOX *nextblob); + void really_merge(BLOBNBOX* other); + void chop( // fake chop blob + BLOBNBOX_IT *start_it, // location of this + BLOBNBOX_IT *blob_it, // iterator + FCOORD rotation, // for landscape + float xheight); // line height + + void NeighbourGaps(int gaps[BND_COUNT]) const; + void MinMaxGapsClipped(int* h_min, int* h_max, + int* v_min, int* v_max) const; + void CleanNeighbours(); + // Returns positive if there is at least one side neighbour that has a + // similar stroke width and is not on the other side of a rule line. + int GoodTextBlob() const; + // Returns the number of side neighbours that are of type BRT_NOISE. + int NoisyNeighbours() const; + + // Returns true if the blob is noise and has no owner. + bool DeletableNoise() const { + return owner() == NULL && region_type() == BRT_NOISE; + } + + // Returns true, and sets vert_possible/horz_possible if the blob has some + // feature that makes it individually appear to flow one way. + // eg if it has a high aspect ratio, yet has a complex shape, such as a + // joined word in Latin, Arabic, or Hindi, rather than being a -, I, l, 1. + bool DefiniteIndividualFlow(); + + // Returns true if there is no tabstop violation in merging this and other. + bool ConfirmNoTabViolation(const BLOBNBOX& other) const; + + // Returns true if other has a similar stroke width to this. + bool MatchingStrokeWidth(const BLOBNBOX& other, + double fractional_tolerance, + double constant_tolerance) const; + + // Returns a bounding box of the outline contained within the + // given horizontal range. + TBOX BoundsWithinLimits(int left, int right); + + // Estimates and stores the baseline position based on the shape of the + // outline. + void EstimateBaselinePosition(); + + // Simple accessors. + const TBOX& bounding_box() const { + return box; + } + // Set the bounding box. Use with caution. + // Normally use compute_bounding_box instead. + void set_bounding_box(const TBOX& new_box) { + box = new_box; + base_char_top_ = box.top(); + base_char_bottom_ = box.bottom(); + } + void compute_bounding_box() { + box = cblob_ptr->bounding_box(); + base_char_top_ = box.top(); + base_char_bottom_ = box.bottom(); + baseline_y_ = box.bottom(); + } + const TBOX& reduced_box() const { + return red_box; + } + void set_reduced_box(TBOX new_box) { + red_box = new_box; + reduced = TRUE; + } + inT32 enclosed_area() const { + return area; + } + bool joined_to_prev() const { + return joined != 0; + } + bool red_box_set() const { + return reduced != 0; + } + int repeated_set() const { + return repeated_set_; + } + void set_repeated_set(int set_id) { + repeated_set_ = set_id; + } + C_BLOB *cblob() const { + return cblob_ptr; + } + TabType left_tab_type() const { + return left_tab_type_; + } + void set_left_tab_type(TabType new_type) { + left_tab_type_ = new_type; + } + TabType right_tab_type() const { + return right_tab_type_; + } + void set_right_tab_type(TabType new_type) { + right_tab_type_ = new_type; + } + BlobRegionType region_type() const { + return region_type_; + } + void set_region_type(BlobRegionType new_type) { + region_type_ = new_type; + } + BlobSpecialTextType special_text_type() const { + return spt_type_; + } + void set_special_text_type(BlobSpecialTextType new_type) { + spt_type_ = new_type; + } + BlobTextFlowType flow() const { + return flow_; + } + void set_flow(BlobTextFlowType value) { + flow_ = value; + } + bool vert_possible() const { + return vert_possible_; + } + void set_vert_possible(bool value) { + vert_possible_ = value; + } + bool horz_possible() const { + return horz_possible_; + } + void set_horz_possible(bool value) { + horz_possible_ = value; + } + int left_rule() const { + return left_rule_; + } + void set_left_rule(int new_left) { + left_rule_ = new_left; + } + int right_rule() const { + return right_rule_; + } + void set_right_rule(int new_right) { + right_rule_ = new_right; + } + int left_crossing_rule() const { + return left_crossing_rule_; + } + void set_left_crossing_rule(int new_left) { + left_crossing_rule_ = new_left; + } + int right_crossing_rule() const { + return right_crossing_rule_; + } + void set_right_crossing_rule(int new_right) { + right_crossing_rule_ = new_right; + } + float horz_stroke_width() const { + return horz_stroke_width_; + } + void set_horz_stroke_width(float width) { + horz_stroke_width_ = width; + } + float vert_stroke_width() const { + return vert_stroke_width_; + } + void set_vert_stroke_width(float width) { + vert_stroke_width_ = width; + } + float area_stroke_width() const { + return area_stroke_width_; + } + tesseract::ColPartition* owner() const { + return owner_; + } + void set_owner(tesseract::ColPartition* new_owner) { + owner_ = new_owner; + } + bool leader_on_left() const { + return leader_on_left_; + } + void set_leader_on_left(bool flag) { + leader_on_left_ = flag; + } + bool leader_on_right() const { + return leader_on_right_; + } + void set_leader_on_right(bool flag) { + leader_on_right_ = flag; + } + BLOBNBOX* neighbour(BlobNeighbourDir n) const { + return neighbours_[n]; + } + bool good_stroke_neighbour(BlobNeighbourDir n) const { + return good_stroke_neighbours_[n]; + } + void set_neighbour(BlobNeighbourDir n, BLOBNBOX* neighbour, bool good) { + neighbours_[n] = neighbour; + good_stroke_neighbours_[n] = good; + } + bool IsDiacritic() const { + return base_char_top_ != box.top() || base_char_bottom_ != box.bottom(); + } + int base_char_top() const { + return base_char_top_; + } + int base_char_bottom() const { + return base_char_bottom_; + } + int baseline_position() const { + return baseline_y_; + } + int line_crossings() const { + return line_crossings_; + } + void set_line_crossings(int value) { + line_crossings_ = value; + } + void set_diacritic_box(const TBOX& diacritic_box) { + base_char_top_ = diacritic_box.top(); + base_char_bottom_ = diacritic_box.bottom(); + } + BLOBNBOX* base_char_blob() const { + return base_char_blob_; + } + void set_base_char_blob(BLOBNBOX* blob) { + base_char_blob_ = blob; + } + void set_owns_cblob(bool value) { owns_cblob_ = value; } + + bool UniquelyVertical() const { + return vert_possible_ && !horz_possible_; + } + bool UniquelyHorizontal() const { + return horz_possible_ && !vert_possible_; + } + + // Returns true if the region type is text. + static bool IsTextType(BlobRegionType type) { + return type == BRT_TEXT || type == BRT_VERT_TEXT; + } + // Returns true if the region type is image. + static bool IsImageType(BlobRegionType type) { + return type == BRT_RECTIMAGE || type == BRT_POLYIMAGE; + } + // Returns true if the region type is line. + static bool IsLineType(BlobRegionType type) { + return type == BRT_HLINE || type == BRT_VLINE; + } + // Returns true if the region type cannot be merged. + static bool UnMergeableType(BlobRegionType type) { + return IsLineType(type) || IsImageType(type); + } + // Helper to call CleanNeighbours on all blobs on the list. + static void CleanNeighbours(BLOBNBOX_LIST* blobs); + // Helper to delete all the deletable blobs on the list. + static void DeleteNoiseBlobs(BLOBNBOX_LIST* blobs); + // Helper to compute edge offsets for all the blobs on the list. + // See coutln.h for an explanation of edge offsets. + static void ComputeEdgeOffsets(Pix* thresholds, Pix* grey, + BLOBNBOX_LIST* blobs); + +#ifndef GRAPHICS_DISABLED + // Helper to draw all the blobs on the list in the given body_colour, + // with child outlines in the child_colour. + static void PlotBlobs(BLOBNBOX_LIST* list, + ScrollView::Color body_colour, + ScrollView::Color child_colour, + ScrollView* win); + // Helper to draw only DeletableNoise blobs (unowned, BRT_NOISE) on the + // given list in the given body_colour, with child outlines in the + // child_colour. + static void PlotNoiseBlobs(BLOBNBOX_LIST* list, + ScrollView::Color body_colour, + ScrollView::Color child_colour, + ScrollView* win); + + static ScrollView::Color TextlineColor(BlobRegionType region_type, + BlobTextFlowType flow_type); + + // Keep in sync with BlobRegionType. + ScrollView::Color BoxColor() const; + + void plot(ScrollView* window, // window to draw in + ScrollView::Color blob_colour, // for outer bits + ScrollView::Color child_colour); // for holes +#endif + + // Initializes the bulk of the members to default values for use at + // construction time. + void ConstructionInit() { + cblob_ptr = NULL; + owns_cblob_ = false; + area = 0; + area_stroke_width_ = 0.0f; + horz_stroke_width_ = 0.0f; + vert_stroke_width_ = 0.0f; + ReInit(); + } + // Initializes members set by StrokeWidth and beyond, without discarding + // stored area and strokewidth values, which are expensive to calculate. + void ReInit() { + joined = false; + reduced = false; + repeated_set_ = 0; + left_tab_type_ = TT_NONE; + right_tab_type_ = TT_NONE; + region_type_ = BRT_UNKNOWN; + flow_ = BTFT_NONE; + spt_type_ = BSTT_SKIP; + left_rule_ = 0; + right_rule_ = 0; + left_crossing_rule_ = 0; + right_crossing_rule_ = 0; + if (area_stroke_width_ == 0.0f && area > 0 && cblob() != NULL) + area_stroke_width_ = 2.0f * area / cblob()->perimeter(); + owner_ = NULL; + base_char_top_ = box.top(); + base_char_bottom_ = box.bottom(); + baseline_y_ = box.bottom(); + line_crossings_ = 0; + base_char_blob_ = NULL; + horz_possible_ = false; + vert_possible_ = false; + leader_on_left_ = false; + leader_on_right_ = false; + ClearNeighbours(); + } + + void ClearNeighbours() { + for (int n = 0; n < BND_COUNT; ++n) { + neighbours_[n] = NULL; + good_stroke_neighbours_[n] = false; + } + } + +private: + C_BLOB *cblob_ptr; // edgestep blob + TBOX box; // bounding box + TBOX red_box; // bounding box + int area : 30; // enclosed area + int joined : 1; // joined to prev + int reduced : 1; // reduced box set + int repeated_set_; // id of the set of repeated blobs + TabType left_tab_type_; // Indicates tab-stop assessment + TabType right_tab_type_; // Indicates tab-stop assessment + BlobRegionType region_type_; // Type of region this blob belongs to + BlobTextFlowType flow_; // Quality of text flow. + inT16 left_rule_; // x-coord of nearest but not crossing rule line + inT16 right_rule_; // x-coord of nearest but not crossing rule line + inT16 left_crossing_rule_; // x-coord of nearest or crossing rule line + inT16 right_crossing_rule_; // x-coord of nearest or crossing rule line + inT16 base_char_top_; // y-coord of top/bottom of diacritic base, + inT16 base_char_bottom_; // if it exists else top/bottom of this blob. + inT16 baseline_y_; // Estimate of baseline position. + int line_crossings_; // Number of line intersections touched. + BLOBNBOX* base_char_blob_; // The blob that was the base char. + float horz_stroke_width_; // Median horizontal stroke width + float vert_stroke_width_; // Median vertical stroke width + float area_stroke_width_; // Stroke width from area/perimeter ratio. + tesseract::ColPartition* owner_; // Who will delete me when I am not needed + BlobSpecialTextType spt_type_; // Special text type. + BLOBNBOX* neighbours_[BND_COUNT]; + bool good_stroke_neighbours_[BND_COUNT]; + bool horz_possible_; // Could be part of horizontal flow. + bool vert_possible_; // Could be part of vertical flow. + bool leader_on_left_; // There is a leader to the left. + bool leader_on_right_; // There is a leader to the right. + // Iff true, then the destructor should delete the cblob_ptr. + // TODO(rays) migrate all uses to correctly setting this flag instead of + // deleting the C_BLOB before deleting the BLOBNBOX. + bool owns_cblob_; +}; + +class TO_ROW : public ELIST2_LINK +{ +public: + static const int kErrorWeight = 3; + + TO_ROW() { + clear(); + } //empty + TO_ROW( //constructor + BLOBNBOX *blob, //from first blob + float top, //of row //target height + float bottom, + float row_size); + + void print() const; + float max_y() const { //access function + return y_max; + } + float min_y() const { + return y_min; + } + float mean_y() const { + return (y_min + y_max) / 2.0f; + } + float initial_min_y() const { + return initial_y_min; + } + float line_m() const { //access to line fit + return m; + } + float line_c() const { + return c; + } + float line_error() const { + return error; + } + float parallel_c() const { + return para_c; + } + float parallel_error() const { + return para_error; + } + float believability() const { //baseline goodness + return credibility; + } + float intercept() const { //real parallel_c + return y_origin; + } + void add_blob( //put in row + BLOBNBOX *blob, //blob to add + float top, //of row //target height + float bottom, + float row_size); + void insert_blob( //put in row in order + BLOBNBOX *blob); + + BLOBNBOX_LIST *blob_list() { //get list + return &blobs; + } + + void set_line( //set line spec + float new_m, //line to set + float new_c, + float new_error) { + m = new_m; + c = new_c; + error = new_error; + } + void set_parallel_line( //set fixed gradient line + float gradient, //page gradient + float new_c, + float new_error) { + para_c = new_c; + para_error = new_error; + credibility = + (float)(blobs.length() - kErrorWeight * new_error); + y_origin = (float)(new_c / sqrt(1 + gradient * gradient)); + //real intercept + } + void set_limits( //set min,max + float new_min, //bottom and + float new_max) { //top of row + y_min = new_min; + y_max = new_max; + } + void compute_vertical_projection(); + //get projection + + bool rep_chars_marked() const { + return num_repeated_sets_ != -1; + } + void clear_rep_chars_marked() { + num_repeated_sets_ = -1; + } + int num_repeated_sets() const { + return num_repeated_sets_; + } + void set_num_repeated_sets(int num_sets) { + num_repeated_sets_ = num_sets; + } + + // true when dead + BOOL8 merged; + BOOL8 all_caps; // had no ascenders + BOOL8 used_dm_model; // in guessing pitch + inT16 projection_left; // start of projection + inT16 projection_right; // start of projection + PITCH_TYPE pitch_decision; // how strong is decision + float fixed_pitch; // pitch or 0 + float fp_space; // sp if fixed pitch + float fp_nonsp; // nonsp if fixed pitch + float pr_space; // sp if prop + float pr_nonsp; // non sp if prop + float spacing; // to "next" row + float xheight; // of line + int xheight_evidence; // number of blobs of height xheight + float ascrise; // ascenders + float descdrop; // descenders + float body_size; // of CJK characters. Assumed to be + // xheight+ascrise for non-CJK text. + inT32 min_space; // min size for real space + inT32 max_nonspace; // max size of non-space + inT32 space_threshold; // space vs nonspace + float kern_size; // average non-space + float space_size; // average space + WERD_LIST rep_words; // repeated chars + ICOORDELT_LIST char_cells; // fixed pitch cells + QSPLINE baseline; // curved baseline + STATS projection; // vertical projection + +private: + void clear(); // clear all values to reasonable defaults + + BLOBNBOX_LIST blobs; //blobs in row + float y_min; //coords + float y_max; + float initial_y_min; + float m, c; //line spec + float error; //line error + float para_c; //constrained fit + float para_error; + float y_origin; //rotated para_c; + float credibility; //baseline believability + int num_repeated_sets_; // number of sets of repeated blobs + // set to -1 if we have not searched + // for repeated blobs in this row yet +}; + +ELIST2IZEH(TO_ROW) +class TO_BLOCK :public ELIST_LINK +{ +public: + TO_BLOCK() : pitch_decision(PITCH_DUNNO) { + clear(); + } //empty + TO_BLOCK( //constructor + BLOCK *src_block); //real block + ~TO_BLOCK(); + + void clear(); // clear all scalar members. + + TO_ROW_LIST *get_rows() { //access function + return &row_list; + } + + // Rotate all the blobnbox lists and the underlying block. Then update the + // median size statistic from the blobs list. + void rotate(const FCOORD& rotation) { + BLOBNBOX_LIST* blobnbox_list[] = { &blobs, &underlines, &noise_blobs, + &small_blobs, &large_blobs, NULL }; + for (BLOBNBOX_LIST** list = blobnbox_list; *list != NULL; ++list) { + BLOBNBOX_IT it(*list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->rotate(rotation); + } + } + // Rotate the block + ASSERT_HOST(block->poly_block() != NULL); + block->rotate(rotation); + // Update the median size statistic from the blobs list. + STATS widths(0, block->bounding_box().width()); + STATS heights(0, block->bounding_box().height()); + BLOBNBOX_IT blob_it(&blobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + widths.add(blob_it.data()->bounding_box().width(), 1); + heights.add(blob_it.data()->bounding_box().height(), 1); + } + block->set_median_size(static_cast(widths.median() + 0.5), + static_cast(heights.median() + 0.5)); + } + + void print_rows() { //debug info + TO_ROW_IT row_it = &row_list; + TO_ROW *row; + + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); + row_it.forward()) { + row = row_it.data(); + tprintf("Row range (%g,%g), para_c=%g, blobcount=" INT32FORMAT + "\n", row->min_y(), row->max_y(), row->parallel_c(), + row->blob_list()->length()); + } + } + + // Reorganizes the blob lists with a different definition of small, medium + // and large, compared to the original definition. + // Height is still the primary filter key, but medium width blobs of small + // height become medium, and very wide blobs of small height stay small. + void ReSetAndReFilterBlobs(); + + // Deletes noise blobs from all lists where not owned by a ColPartition. + void DeleteUnownedNoise(); + + // Computes and stores the edge offsets on each blob for use in feature + // extraction, using greyscale if the supplied grey and thresholds pixes + // are 8-bit or otherwise (if NULL or not 8 bit) the original binary + // edge step outlines. + // Thresholds must either be the same size as grey or an integer down-scale + // of grey. + // See coutln.h for an explanation of edge offsets. + void ComputeEdgeOffsets(Pix* thresholds, Pix* grey); + +#ifndef GRAPHICS_DISABLED + // Draw the noise blobs from all lists in red. + void plot_noise_blobs(ScrollView* to_win); + // Draw the blobs on on the various lists in the block in different colors. + void plot_graded_blobs(ScrollView* to_win); +#endif + + BLOBNBOX_LIST blobs; //medium size + BLOBNBOX_LIST underlines; //underline blobs + BLOBNBOX_LIST noise_blobs; //very small + BLOBNBOX_LIST small_blobs; //fairly small + BLOBNBOX_LIST large_blobs; //big blobs + BLOCK *block; //real block + PITCH_TYPE pitch_decision; //how strong is decision + float line_spacing; //estimate + // line_size is a lower-bound estimate of the font size in pixels of + // the text in the block (with ascenders and descenders), being a small + // (1.25) multiple of the median height of filtered blobs. + // In most cases the font size will be bigger, but it will be closer + // if the text is allcaps, or in a no-x-height script. + float line_size; //estimate + float max_blob_size; //line assignment limit + float baseline_offset; //phase shift + float xheight; //median blob size + float fixed_pitch; //pitch or 0 + float kern_size; //average non-space + float space_size; //average space + inT32 min_space; //min definite space + inT32 max_nonspace; //max definite + float fp_space; //sp if fixed pitch + float fp_nonsp; //nonsp if fixed pitch + float pr_space; //sp if prop + float pr_nonsp; //non sp if prop + TO_ROW *key_row; //starting row + +private: + TO_ROW_LIST row_list; //temporary rows +}; + +ELISTIZEH(TO_BLOCK) +extern double_VAR_H(textord_error_weight, 3, + "Weighting for error in believability"); +void find_cblob_limits( //get y limits + C_BLOB *blob, //blob to search + float leftx, //x limits + float rightx, + FCOORD rotation, //for landscape + float &ymin, //output y limits + float &ymax); +void find_cblob_vlimits( //get y limits + C_BLOB *blob, //blob to search + float leftx, //x limits + float rightx, + float &ymin, //output y limits + float &ymax); +void find_cblob_hlimits( //get x limits + C_BLOB *blob, //blob to search + float bottomy, //y limits + float topy, + float &xmin, //output x limits + float &xymax); +C_BLOB *crotate_cblob( //rotate it + C_BLOB *blob, //blob to search + FCOORD rotation //for landscape +); +TBOX box_next( //get bounding box + BLOBNBOX_IT *it //iterator to blobds +); +TBOX box_next_pre_chopped( //get bounding box + BLOBNBOX_IT *it //iterator to blobds +); +void vertical_cblob_projection( //project outlines + C_BLOB *blob, //blob to project + STATS *stats //output +); +void vertical_coutline_projection( //project outlines + C_OUTLINE *outline, //outline to project + STATS *stats //output +); +#ifndef GRAPHICS_DISABLED +void plot_blob_list(ScrollView* win, // window to draw in + BLOBNBOX_LIST *list, // blob list + ScrollView::Color body_colour, // colour to draw + ScrollView::Color child_colour); // colour of child +#endif // GRAPHICS_DISABLED +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/blobs.cpp b/3rdparty/hgOCR/include/ccstruct/blobs.cpp new file mode 100644 index 00000000..bab74075 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blobs.cpp @@ -0,0 +1,1027 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: blobs.c (Formerly blobs.c) + * Description: Blob definition + * Author: Mark Seaman, OCR Technology + * Created: Fri Oct 27 15:39:52 1989 + * Modified: Thu Mar 28 15:33:26 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1989, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ + + /*---------------------------------------------------------------------- + I n c l u d e s + ----------------------------------------------------------------------*/ + // Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "blobs.h" +#include "ccstruct.h" +#include "clst.h" +#include "cutil.h" +#include "emalloc.h" +#include "helpers.h" +#include "linlsq.h" +#include "ndminx.h" +#include "normalis.h" +#include "ocrblock.h" +#include "ocrrow.h" +#include "points.h" +#include "polyaprx.h" +#include "structures.h" +#include "werd.h" + +using tesseract::CCStruct; + +// A Vector representing the "vertical" direction when measuring the +// divisiblity of blobs into multiple blobs just by separating outlines. +// See divisible_blob below for the use. +const TPOINT kDivisibleVerticalUpright(0, 1); +// A vector representing the "vertical" direction for italic text for use +// when separating outlines. Using it actually deteriorates final accuracy, +// so it is only used for ApplyBoxes chopping to get a better segmentation. +const TPOINT kDivisibleVerticalItalic(1, 5); + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ + +CLISTIZE(EDGEPT); + +// Returns true when the two line segments cross each other. +// (Moved from outlines.cpp). +// Finds where the projected lines would cross and then checks to see if the +// point of intersection lies on both of the line segments. If it does +// then these two segments cross. +/* static */ +bool TPOINT::IsCrossed(const TPOINT& a0, const TPOINT& a1, const TPOINT& b0, + const TPOINT& b1) { + int b0a1xb0b1, b0b1xb0a0; + int a1b1xa1a0, a1a0xa1b0; + + TPOINT b0a1, b0a0, a1b1, b0b1, a1a0; + + b0a1.x = a1.x - b0.x; + b0a0.x = a0.x - b0.x; + a1b1.x = b1.x - a1.x; + b0b1.x = b1.x - b0.x; + a1a0.x = a0.x - a1.x; + b0a1.y = a1.y - b0.y; + b0a0.y = a0.y - b0.y; + a1b1.y = b1.y - a1.y; + b0b1.y = b1.y - b0.y; + a1a0.y = a0.y - a1.y; + + b0a1xb0b1 = CROSS(b0a1, b0b1); + b0b1xb0a0 = CROSS(b0b1, b0a0); + a1b1xa1a0 = CROSS(a1b1, a1a0); + // For clarity, we want CROSS(a1a0,a1b0) here but we have b0a1 instead of a1b0 + // so use -CROSS(a1b0,b0a1) instead, which is the same. + a1a0xa1b0 = -CROSS(a1a0, b0a1); + + return ((b0a1xb0b1 > 0 && b0b1xb0a0 > 0) || + (b0a1xb0b1 < 0 && b0b1xb0a0 < 0)) && + ((a1b1xa1a0 > 0 && a1a0xa1b0 > 0) || (a1b1xa1a0 < 0 && a1a0xa1b0 < 0)); +} + +// Consume the circular list of EDGEPTs to make a TESSLINE. +TESSLINE* TESSLINE::BuildFromOutlineList(EDGEPT* outline) { + TESSLINE* result = new TESSLINE; + result->loop = outline; + if (outline->src_outline != NULL) { + // ASSUMPTION: This function is only ever called from ApproximateOutline + // and therefore either all points have a src_outline or all do not. + // Just as SetupFromPos sets the vectors from the vertices, setup the + // step_count members to indicate the (positive) number of original + // C_OUTLINE steps to the next vertex. + EDGEPT* pt = outline; + do { + pt->step_count = pt->next->start_step - pt->start_step; + if (pt->step_count < 0) + pt->step_count += pt->src_outline->pathlength(); + pt = pt->next; + } while (pt != outline); + } + result->SetupFromPos(); + return result; +} + +// Copies the data and the outline, but leaves next untouched. +void TESSLINE::CopyFrom(const TESSLINE& src) { + Clear(); + topleft = src.topleft; + botright = src.botright; + start = src.start; + is_hole = src.is_hole; + if (src.loop != NULL) { + EDGEPT* prevpt = NULL; + EDGEPT* newpt = NULL; + EDGEPT* srcpt = src.loop; + do { + newpt = new EDGEPT(*srcpt); + if (prevpt == NULL) { + loop = newpt; + } + else { + newpt->prev = prevpt; + prevpt->next = newpt; + } + prevpt = newpt; + srcpt = srcpt->next; + } while (srcpt != src.loop); + loop->prev = newpt; + newpt->next = loop; + } +} + +// Deletes owned data. +void TESSLINE::Clear() { + if (loop == NULL) + return; + + EDGEPT* this_edge = loop; + do { + EDGEPT* next_edge = this_edge->next; + delete this_edge; + this_edge = next_edge; + } while (this_edge != loop); + loop = NULL; +} + +// Normalize in-place using the DENORM. +void TESSLINE::Normalize(const DENORM& denorm) { + EDGEPT* pt = loop; + do { + denorm.LocalNormTransform(pt->pos, &pt->pos); + pt = pt->next; + } while (pt != loop); + SetupFromPos(); +} + +// Rotates by the given rotation in place. +void TESSLINE::Rotate(const FCOORD rot) { + EDGEPT* pt = loop; + do { + int tmp = static_cast(floor(pt->pos.x * rot.x() - + pt->pos.y * rot.y() + 0.5)); + pt->pos.y = static_cast(floor(pt->pos.y * rot.x() + + pt->pos.x * rot.y() + 0.5)); + pt->pos.x = tmp; + pt = pt->next; + } while (pt != loop); + SetupFromPos(); +} + +// Moves by the given vec in place. +void TESSLINE::Move(const ICOORD vec) { + EDGEPT* pt = loop; + do { + pt->pos.x += vec.x(); + pt->pos.y += vec.y(); + pt = pt->next; + } while (pt != loop); + SetupFromPos(); +} + +// Scales by the given factor in place. +void TESSLINE::Scale(float factor) { + EDGEPT* pt = loop; + do { + pt->pos.x = static_cast(floor(pt->pos.x * factor + 0.5)); + pt->pos.y = static_cast(floor(pt->pos.y * factor + 0.5)); + pt = pt->next; + } while (pt != loop); + SetupFromPos(); +} + +// Sets up the start and vec members of the loop from the pos members. +void TESSLINE::SetupFromPos() { + EDGEPT* pt = loop; + do { + pt->vec.x = pt->next->pos.x - pt->pos.x; + pt->vec.y = pt->next->pos.y - pt->pos.y; + pt = pt->next; + } while (pt != loop); + start = pt->pos; + ComputeBoundingBox(); +} + +// Recomputes the bounding box from the points in the loop. +void TESSLINE::ComputeBoundingBox() { + int minx = MAX_INT32; + int miny = MAX_INT32; + int maxx = -MAX_INT32; + int maxy = -MAX_INT32; + + // Find boundaries. + start = loop->pos; + EDGEPT* this_edge = loop; + do { + if (!this_edge->IsHidden() || !this_edge->prev->IsHidden()) { + if (this_edge->pos.x < minx) + minx = this_edge->pos.x; + if (this_edge->pos.y < miny) + miny = this_edge->pos.y; + if (this_edge->pos.x > maxx) + maxx = this_edge->pos.x; + if (this_edge->pos.y > maxy) + maxy = this_edge->pos.y; + } + this_edge = this_edge->next; + } while (this_edge != loop); + // Reset bounds. + topleft.x = minx; + topleft.y = maxy; + botright.x = maxx; + botright.y = miny; +} + +// Computes the min and max cross product of the outline points with the +// given vec and returns the results in min_xp and max_xp. Geometrically +// this is the left and right edge of the outline perpendicular to the +// given direction, but to get the distance units correct, you would +// have to divide by the modulus of vec. +void TESSLINE::MinMaxCrossProduct(const TPOINT vec, + int* min_xp, int* max_xp) const { + *min_xp = MAX_INT32; + *max_xp = MIN_INT32; + EDGEPT* this_edge = loop; + do { + if (!this_edge->IsHidden() || !this_edge->prev->IsHidden()) { + int product = CROSS(this_edge->pos, vec); + UpdateRange(product, min_xp, max_xp); + } + this_edge = this_edge->next; + } while (this_edge != loop); +} + +TBOX TESSLINE::bounding_box() const { + return TBOX(topleft.x, botright.y, botright.x, topleft.y); +} + +#ifndef GRAPHICS_DISABLED +void TESSLINE::plot(ScrollView* window, ScrollView::Color color, + ScrollView::Color child_color) { + if (is_hole) + window->Pen(child_color); + else + window->Pen(color); + window->SetCursor(start.x, start.y); + EDGEPT* pt = loop; + do { + bool prev_hidden = pt->IsHidden(); + pt = pt->next; + if (prev_hidden) + window->SetCursor(pt->pos.x, pt->pos.y); + else + window->DrawTo(pt->pos.x, pt->pos.y); + } while (pt != loop); +} +#endif // GRAPHICS_DISABLED + +// Returns the first non-hidden EDGEPT that has a different src_outline to +// its predecessor, or, if all the same, the lowest indexed point. +EDGEPT* TESSLINE::FindBestStartPt() const { + EDGEPT* best_start = loop; + int best_step = loop->start_step; + // Iterate the polygon. + EDGEPT* pt = loop; + do { + if (pt->IsHidden()) continue; + if (pt->prev->IsHidden() || pt->prev->src_outline != pt->src_outline) + return pt; // Qualifies as the best. + if (pt->start_step < best_step) { + best_step = pt->start_step; + best_start = pt; + } + } while ((pt = pt->next) != loop); + return best_start; +} + +// Iterate the given list of outlines, converting to TESSLINE by polygonal +// approximation and recursively any children, returning the current tail +// of the resulting list of TESSLINEs. +static TESSLINE** ApproximateOutlineList(bool allow_detailed_fx, + C_OUTLINE_LIST* outlines, + bool children, + TESSLINE** tail) { + C_OUTLINE_IT ol_it(outlines); + for (ol_it.mark_cycle_pt(); !ol_it.cycled_list(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.data(); + if (outline->pathlength() > 0) { + TESSLINE* tessline = ApproximateOutline(allow_detailed_fx, outline); + tessline->is_hole = children; + *tail = tessline; + tail = &tessline->next; + } + if (!outline->child()->empty()) { + tail = ApproximateOutlineList(allow_detailed_fx, outline->child(), true, + tail); + } + } + return tail; +} + +// Factory to build a TBLOB from a C_BLOB with polygonal approximation along +// the way. If allow_detailed_fx is true, the EDGEPTs in the returned TBLOB +// contain pointers to the input C_OUTLINEs that enable higher-resolution +// feature extraction that does not use the polygonal approximation. +TBLOB* TBLOB::PolygonalCopy(bool allow_detailed_fx, C_BLOB* src) { + TBLOB* tblob = new TBLOB; + ApproximateOutlineList(allow_detailed_fx, src->out_list(), false, + &tblob->outlines); + return tblob; +} + +// Factory builds a blob with no outlines, but copies the other member data. +TBLOB* TBLOB::ShallowCopy(const TBLOB& src) { + TBLOB* blob = new TBLOB; + blob->denorm_ = src.denorm_; + return blob; +} + +// Normalizes the blob for classification only if needed. +// (Normally this means a non-zero classify rotation.) +// If no Normalization is needed, then NULL is returned, and the input blob +// can be used directly. Otherwise a new TBLOB is returned which must be +// deleted after use. +TBLOB* TBLOB::ClassifyNormalizeIfNeeded() const { + TBLOB* rotated_blob = NULL; + // If necessary, copy the blob and rotate it. The rotation is always + // +/- 90 degrees, as 180 was already taken care of. + if (denorm_.block() != NULL && + denorm_.block()->classify_rotation().y() != 0.0) { + TBOX box = bounding_box(); + int x_middle = (box.left() + box.right()) / 2; + int y_middle = (box.top() + box.bottom()) / 2; + rotated_blob = new TBLOB(*this); + const FCOORD& rotation = denorm_.block()->classify_rotation(); + // Move the rotated blob back to the same y-position so that we + // can still distinguish similar glyphs with differeny y-position. + float target_y = kBlnBaselineOffset + + (rotation.y() > 0 ? x_middle - box.left() : box.right() - x_middle); + rotated_blob->Normalize(NULL, &rotation, &denorm_, x_middle, y_middle, + 1.0f, 1.0f, 0.0f, target_y, + denorm_.inverse(), denorm_.pix()); + } + return rotated_blob; +} + +// Copies the data and the outline, but leaves next untouched. +void TBLOB::CopyFrom(const TBLOB& src) { + Clear(); + TESSLINE* prev_outline = NULL; + for (TESSLINE* srcline = src.outlines; srcline != NULL; + srcline = srcline->next) { + TESSLINE* new_outline = new TESSLINE(*srcline); + if (outlines == NULL) + outlines = new_outline; + else + prev_outline->next = new_outline; + prev_outline = new_outline; + } + denorm_ = src.denorm_; +} + +// Deletes owned data. +void TBLOB::Clear() { + for (TESSLINE* next_outline = NULL; outlines != NULL; + outlines = next_outline) { + next_outline = outlines->next; + delete outlines; + } +} + +// Sets up the built-in DENORM and normalizes the blob in-place. +// For parameters see DENORM::SetupNormalization, plus the inverse flag for +// this blob and the Pix for the full image. +void TBLOB::Normalize(const BLOCK* block, + const FCOORD* rotation, + const DENORM* predecessor, + float x_origin, float y_origin, + float x_scale, float y_scale, + float final_xshift, float final_yshift, + bool inverse, Pix* pix) { + denorm_.SetupNormalization(block, rotation, predecessor, x_origin, y_origin, + x_scale, y_scale, final_xshift, final_yshift); + denorm_.set_inverse(inverse); + denorm_.set_pix(pix); + // TODO(rays) outline->Normalize is more accurate, but breaks tests due + // the changes it makes. Reinstate this code with a retraining. + // The reason this change is troublesome is that it normalizes for the + // baseline value computed independently at each x-coord. If the baseline + // is not horizontal, this introduces shear into the normalized blob, which + // is useful on the rare occasions that the baseline is really curved, but + // the baselines need to be stabilized the rest of the time. +#if 0 + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + outline->Normalize(denorm_); + } +#else + denorm_.LocalNormBlob(this); +#endif +} + +// Rotates by the given rotation in place. +void TBLOB::Rotate(const FCOORD rotation) { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + outline->Rotate(rotation); + } +} + +// Moves by the given vec in place. +void TBLOB::Move(const ICOORD vec) { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + outline->Move(vec); + } +} + +// Scales by the given factor in place. +void TBLOB::Scale(float factor) { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + outline->Scale(factor); + } +} + +// Recomputes the bounding boxes of the outlines. +void TBLOB::ComputeBoundingBoxes() { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + outline->ComputeBoundingBox(); + } +} + +// Returns the number of outlines. +int TBLOB::NumOutlines() const { + int result = 0; + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) + ++result; + return result; +} + +/********************************************************************** + * TBLOB::bounding_box() + * + * Compute the bounding_box of a compound blob, defined to be the + * bounding box of the union of all top-level outlines in the blob. + **********************************************************************/ +TBOX TBLOB::bounding_box() const { + if (outlines == NULL) + return TBOX(0, 0, 0, 0); + TESSLINE *outline = outlines; + TBOX box = outline->bounding_box(); + for (outline = outline->next; outline != NULL; outline = outline->next) { + box += outline->bounding_box(); + } + return box; +} + +// Finds and deletes any duplicate outlines in this blob, without deleting +// their EDGEPTs. +void TBLOB::EliminateDuplicateOutlines() { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) { + TESSLINE* last_outline = outline; + for (TESSLINE* other_outline = outline->next; other_outline != NULL; + last_outline = other_outline, other_outline = other_outline->next) { + if (outline->SameBox(*other_outline)) { + last_outline->next = other_outline->next; + // This doesn't leak - the outlines share the EDGEPTs. + other_outline->loop = NULL; + delete other_outline; + other_outline = last_outline; + // If it is part of a cut, then it can't be a hole any more. + outline->is_hole = false; + } + } + } +} + +// Swaps the outlines of *this and next if needed to keep the centers in +// increasing x. +void TBLOB::CorrectBlobOrder(TBLOB* next) { + TBOX box = bounding_box(); + TBOX next_box = next->bounding_box(); + if (box.x_middle() > next_box.x_middle()) { + Swap(&outlines, &next->outlines); + } +} + +#ifndef GRAPHICS_DISABLED +void TBLOB::plot(ScrollView* window, ScrollView::Color color, + ScrollView::Color child_color) { + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) + outline->plot(window, color, child_color); +} +#endif // GRAPHICS_DISABLED + +// Computes the center of mass and second moments for the old baseline and +// 2nd moment normalizations. Returns the outline length. +// The input denorm should be the normalizations that have been applied from +// the image to the current state of this TBLOB. +int TBLOB::ComputeMoments(FCOORD* center, FCOORD* second_moments) const { + // Compute 1st and 2nd moments of the original outline. + LLSQ accumulator; + TBOX box = bounding_box(); + // Iterate the outlines, accumulating edges relative the box.botleft(). + CollectEdges(box, NULL, &accumulator, NULL, NULL); + *center = accumulator.mean_point() + box.botleft(); + // The 2nd moments are just the standard deviation of the point positions. + double x2nd = sqrt(accumulator.x_variance()); + double y2nd = sqrt(accumulator.y_variance()); + if (x2nd < 1.0) x2nd = 1.0; + if (y2nd < 1.0) y2nd = 1.0; + second_moments->set_x(x2nd); + second_moments->set_y(y2nd); + return accumulator.count(); +} + +// Computes the precise bounding box of the coords that are generated by +// GetEdgeCoords. This may be different from the bounding box of the polygon. +void TBLOB::GetPreciseBoundingBox(TBOX* precise_box) const { + TBOX box = bounding_box(); + *precise_box = TBOX(); + CollectEdges(box, precise_box, NULL, NULL, NULL); + precise_box->move(box.botleft()); +} + +// Adds edges to the given vectors. +// For all the edge steps in all the outlines, or polygonal approximation +// where there are no edge steps, collects the steps into x_coords/y_coords. +// x_coords is a collection of the x-coords of vertical edges for each +// y-coord starting at box.bottom(). +// y_coords is a collection of the y-coords of horizontal edges for each +// x-coord starting at box.left(). +// Eg x_coords[0] is a collection of the x-coords of edges at y=bottom. +// Eg x_coords[1] is a collection of the x-coords of edges at y=bottom + 1. +void TBLOB::GetEdgeCoords(const TBOX& box, + GenericVector >* x_coords, + GenericVector >* y_coords) const { + GenericVector empty; + x_coords->init_to_size(box.height(), empty); + y_coords->init_to_size(box.width(), empty); + CollectEdges(box, NULL, NULL, x_coords, y_coords); + // Sort the output vectors. + for (int i = 0; i < x_coords->size(); ++i) + (*x_coords)[i].sort(); + for (int i = 0; i < y_coords->size(); ++i) + (*y_coords)[i].sort(); +} + +// Accumulates the segment between pt1 and pt2 in the LLSQ, quantizing over +// the integer coordinate grid to properly weight long vectors. +static void SegmentLLSQ(const FCOORD& pt1, const FCOORD& pt2, + LLSQ* accumulator) { + FCOORD step(pt2); + step -= pt1; + int xstart = IntCastRounded(MIN(pt1.x(), pt2.x())); + int xend = IntCastRounded(MAX(pt1.x(), pt2.x())); + int ystart = IntCastRounded(MIN(pt1.y(), pt2.y())); + int yend = IntCastRounded(MAX(pt1.y(), pt2.y())); + if (xstart == xend && ystart == yend) return; // Nothing to do. + double weight = step.length() / (xend - xstart + yend - ystart); + // Compute and save the y-position at the middle of each x-step. + for (int x = xstart; x < xend; ++x) { + double y = pt1.y() + step.y() * (x + 0.5 - pt1.x()) / step.x(); + accumulator->add(x + 0.5, y, weight); + } + // Compute and save the x-position at the middle of each y-step. + for (int y = ystart; y < yend; ++y) { + double x = pt1.x() + step.x() * (y + 0.5 - pt1.y()) / step.y(); + accumulator->add(x, y + 0.5, weight); + } +} + +// Adds any edges from a single segment of outline between pt1 and pt2 to +// the x_coords, y_coords vectors. pt1 and pt2 should be relative to the +// bottom-left of the bounding box, hence indices to x_coords, y_coords +// are clipped to ([0,x_limit], [0,y_limit]). +// See GetEdgeCoords above for a description of x_coords, y_coords. +static void SegmentCoords(const FCOORD& pt1, const FCOORD& pt2, + int x_limit, int y_limit, + GenericVector >* x_coords, + GenericVector >* y_coords) { + FCOORD step(pt2); + step -= pt1; + int start = ClipToRange(IntCastRounded(MIN(pt1.x(), pt2.x())), 0, x_limit); + int end = ClipToRange(IntCastRounded(MAX(pt1.x(), pt2.x())), 0, x_limit); + for (int x = start; x < end; ++x) { + int y = IntCastRounded(pt1.y() + step.y() * (x + 0.5 - pt1.x()) / step.x()); + (*y_coords)[x].push_back(y); + } + start = ClipToRange(IntCastRounded(MIN(pt1.y(), pt2.y())), 0, y_limit); + end = ClipToRange(IntCastRounded(MAX(pt1.y(), pt2.y())), 0, y_limit); + for (int y = start; y < end; ++y) { + int x = IntCastRounded(pt1.x() + step.x() * (y + 0.5 - pt1.y()) / step.y()); + (*x_coords)[y].push_back(x); + } +} + +// Adds any edges from a single segment of outline between pt1 and pt2 to +// the bbox such that it guarantees to contain anything produced by +// SegmentCoords. +static void SegmentBBox(const FCOORD& pt1, const FCOORD& pt2, TBOX* bbox) { + FCOORD step(pt2); + step -= pt1; + int x1 = IntCastRounded(MIN(pt1.x(), pt2.x())); + int x2 = IntCastRounded(MAX(pt1.x(), pt2.x())); + if (x2 > x1) { + int y1 = IntCastRounded(pt1.y() + step.y() * (x1 + 0.5 - pt1.x()) / + step.x()); + int y2 = IntCastRounded(pt1.y() + step.y() * (x2 - 0.5 - pt1.x()) / + step.x()); + TBOX point(x1, MIN(y1, y2), x2, MAX(y1, y2)); + *bbox += point; + } + int y1 = IntCastRounded(MIN(pt1.y(), pt2.y())); + int y2 = IntCastRounded(MAX(pt1.y(), pt2.y())); + if (y2 > y1) { + int x1 = IntCastRounded(pt1.x() + step.x() * (y1 + 0.5 - pt1.y()) / + step.y()); + int x2 = IntCastRounded(pt1.x() + step.x() * (y2 - 0.5 - pt1.y()) / + step.y()); + TBOX point(MIN(x1, x2), y1, MAX(x1, x2), y2); + *bbox += point; + } +} + +// Collects edges into the given bounding box, LLSQ accumulator and/or x_coords, +// y_coords vectors. +// For a description of x_coords/y_coords, see GetEdgeCoords above. +// Startpt to lastpt, inclusive, MUST have the same src_outline member, +// which may be NULL. The vector from lastpt to its next is included in +// the accumulation. Hidden edges should be excluded by the caller. +// The input denorm should be the normalizations that have been applied from +// the image to the current state of the TBLOB from which startpt, lastpt come. +// box is the bounding box of the blob from which the EDGEPTs are taken and +// indices into x_coords, y_coords are offset by box.botleft(). +static void CollectEdgesOfRun(const EDGEPT* startpt, const EDGEPT* lastpt, + const DENORM& denorm, const TBOX& box, + TBOX* bounding_box, + LLSQ* accumulator, + GenericVector > *x_coords, + GenericVector > *y_coords) { + const C_OUTLINE* outline = startpt->src_outline; + int x_limit = box.width() - 1; + int y_limit = box.height() - 1; + if (outline != NULL) { + // Use higher-resolution edge points stored on the outline. + // The outline coordinates may not match the binary image because of the + // rotation for vertical text lines, but the root_denorm IS the matching + // start of the DENORM chain. + const DENORM* root_denorm = denorm.RootDenorm(); + int step_length = outline->pathlength(); + int start_index = startpt->start_step; + // Note that if this run straddles the wrap-around point of the outline, + // that lastpt->start_step may have a lower index than startpt->start_step, + // and we want to use an end_index that allows us to use a positive + // increment, so we add step_length if necessary, but that may be beyond the + // bounds of the outline steps/ due to wrap-around, so we use % step_length + // everywhere, except for start_index. + int end_index = lastpt->start_step + lastpt->step_count; + if (end_index <= start_index) + end_index += step_length; + // pos is the integer coordinates of the binary image steps. + ICOORD pos = outline->position_at_index(start_index); + FCOORD origin(box.left(), box.bottom()); + // f_pos is a floating-point version of pos that offers improved edge + // positioning using greyscale information or smoothing of edge steps. + FCOORD f_pos = outline->sub_pixel_pos_at_index(pos, start_index); + // pos_normed is f_pos after the appropriate normalization, and relative + // to origin. + // prev_normed is the previous value of pos_normed. + FCOORD prev_normed; + denorm.NormTransform(root_denorm, f_pos, &prev_normed); + prev_normed -= origin; + for (int index = start_index; index < end_index; ++index) { + ICOORD step = outline->step(index % step_length); + // Only use the point if its edge strength is positive. This excludes + // points that don't provide useful information, eg + // ___________ + // |___________ + // The vertical step provides only noisy, damaging information, as even + // with a greyscale image, the positioning of the edge there may be a + // fictitious extrapolation, so previous processing has eliminated it. + if (outline->edge_strength_at_index(index % step_length) > 0) { + FCOORD f_pos = outline->sub_pixel_pos_at_index(pos, + index % step_length); + FCOORD pos_normed; + denorm.NormTransform(root_denorm, f_pos, &pos_normed); + pos_normed -= origin; + // Accumulate the information that is selected by the caller. + if (bounding_box != NULL) { + SegmentBBox(pos_normed, prev_normed, bounding_box); + } + if (accumulator != NULL) { + SegmentLLSQ(pos_normed, prev_normed, accumulator); + } + if (x_coords != NULL && y_coords != NULL) { + SegmentCoords(pos_normed, prev_normed, x_limit, y_limit, + x_coords, y_coords); + } + prev_normed = pos_normed; + } + pos += step; + } + } + else { + // There is no outline, so we are forced to use the polygonal approximation. + const EDGEPT* endpt = lastpt->next; + const EDGEPT* pt = startpt; + do { + FCOORD next_pos(pt->next->pos.x - box.left(), + pt->next->pos.y - box.bottom()); + FCOORD pos(pt->pos.x - box.left(), pt->pos.y - box.bottom()); + if (bounding_box != NULL) { + SegmentBBox(next_pos, pos, bounding_box); + } + if (accumulator != NULL) { + SegmentLLSQ(next_pos, pos, accumulator); + } + if (x_coords != NULL && y_coords != NULL) { + SegmentCoords(next_pos, pos, x_limit, y_limit, x_coords, y_coords); + } + } while ((pt = pt->next) != endpt); + } +} + +// For all the edge steps in all the outlines, or polygonal approximation +// where there are no edge steps, collects the steps into the bounding_box, +// llsq and/or the x_coords/y_coords. Both are used in different kinds of +// normalization. +// For a description of x_coords, y_coords, see GetEdgeCoords above. +void TBLOB::CollectEdges(const TBOX& box, + TBOX* bounding_box, LLSQ* llsq, + GenericVector >* x_coords, + GenericVector >* y_coords) const { + // Iterate the outlines. + for (const TESSLINE* ol = outlines; ol != NULL; ol = ol->next) { + // Iterate the polygon. + EDGEPT* loop_pt = ol->FindBestStartPt(); + EDGEPT* pt = loop_pt; + if (pt == NULL) continue; + do { + if (pt->IsHidden()) continue; + // Find a run of equal src_outline. + EDGEPT* last_pt = pt; + do { + last_pt = last_pt->next; + } while (last_pt != loop_pt && !last_pt->IsHidden() && + last_pt->src_outline == pt->src_outline); + last_pt = last_pt->prev; + CollectEdgesOfRun(pt, last_pt, denorm_, box, + bounding_box, llsq, x_coords, y_coords); + pt = last_pt; + } while ((pt = pt->next) != loop_pt); + } +} + +// Factory to build a TWERD from a (C_BLOB) WERD, with polygonal +// approximation along the way. +TWERD* TWERD::PolygonalCopy(bool allow_detailed_fx, WERD* src) { + TWERD* tessword = new TWERD; + tessword->latin_script = src->flag(W_SCRIPT_IS_LATIN); + C_BLOB_IT b_it(src->cblob_list()); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + C_BLOB* blob = b_it.data(); + TBLOB* tblob = TBLOB::PolygonalCopy(allow_detailed_fx, blob); + tessword->blobs.push_back(tblob); + } + return tessword; +} + +// Baseline normalizes the blobs in-place, recording the normalization in the +// DENORMs in the blobs. +void TWERD::BLNormalize(const BLOCK* block, const ROW* row, Pix* pix, + bool inverse, float x_height, float baseline_shift, + bool numeric_mode, tesseract::OcrEngineMode hint, + const TBOX* norm_box, + DENORM* word_denorm) { + TBOX word_box = bounding_box(); + if (norm_box != NULL) word_box = *norm_box; + float word_middle = (word_box.left() + word_box.right()) / 2.0f; + float input_y_offset = 0.0f; + float final_y_offset = static_cast(kBlnBaselineOffset); + float scale = kBlnXHeight / x_height; + if (hint == tesseract::OEM_CUBE_ONLY || row == NULL) { + word_middle = word_box.left(); + input_y_offset = word_box.bottom(); + final_y_offset = 0.0f; + if (hint == tesseract::OEM_CUBE_ONLY) + scale = 1.0f; + } + else { + input_y_offset = row->base_line(word_middle) + baseline_shift; + } + for (int b = 0; b < blobs.size(); ++b) { + TBLOB* blob = blobs[b]; + TBOX blob_box = blob->bounding_box(); + float mid_x = (blob_box.left() + blob_box.right()) / 2.0f; + float baseline = input_y_offset; + float blob_scale = scale; + if (numeric_mode) { + baseline = blob_box.bottom(); + blob_scale = ClipToRange(kBlnXHeight * 4.0f / (3 * blob_box.height()), + scale, scale * 1.5f); + } + else if (row != NULL && hint != tesseract::OEM_CUBE_ONLY) { + baseline = row->base_line(mid_x) + baseline_shift; + } + // The image will be 8-bit grey if the input was grey or color. Note that in + // a grey image 0 is black and 255 is white. If the input was binary, then + // the pix will be binary and 0 is white, with 1 being black. + // To tell the difference pixGetDepth() will return 8 or 1. + // The inverse flag will be true iff the word has been determined to be + // white on black, and is independent of whether the pix is 8 bit or 1 bit. + blob->Normalize(block, NULL, NULL, word_middle, baseline, blob_scale, + blob_scale, 0.0f, final_y_offset, inverse, pix); + } + if (word_denorm != NULL) { + word_denorm->SetupNormalization(block, NULL, NULL, word_middle, + input_y_offset, scale, scale, + 0.0f, final_y_offset); + word_denorm->set_inverse(inverse); + word_denorm->set_pix(pix); + } +} + +// Copies the data and the blobs, but leaves next untouched. +void TWERD::CopyFrom(const TWERD& src) { + Clear(); + latin_script = src.latin_script; + for (int b = 0; b < src.blobs.size(); ++b) { + TBLOB* new_blob = new TBLOB(*src.blobs[b]); + blobs.push_back(new_blob); + } +} + +// Deletes owned data. +void TWERD::Clear() { + blobs.delete_data_pointers(); + blobs.clear(); +} + +// Recomputes the bounding boxes of the blobs. +void TWERD::ComputeBoundingBoxes() { + for (int b = 0; b < blobs.size(); ++b) { + blobs[b]->ComputeBoundingBoxes(); + } +} + +TBOX TWERD::bounding_box() const { + TBOX result; + for (int b = 0; b < blobs.size(); ++b) { + TBOX box = blobs[b]->bounding_box(); + result += box; + } + return result; +} + +// Merges the blobs from start to end, not including end, and deletes +// the blobs between start and end. +void TWERD::MergeBlobs(int start, int end) { + if (start >= blobs.size() - 1) return; // Nothing to do. + TESSLINE* outline = blobs[start]->outlines; + for (int i = start + 1; i < end && i < blobs.size(); ++i) { + TBLOB* next_blob = blobs[i]; + // Take the outlines from the next blob. + if (outline == NULL) { + blobs[start]->outlines = next_blob->outlines; + outline = blobs[start]->outlines; + } + else { + while (outline->next != NULL) + outline = outline->next; + outline->next = next_blob->outlines; + next_blob->outlines = NULL; + } + // Delete the next blob and move on. + delete next_blob; + blobs[i] = NULL; + } + // Remove dead blobs from the vector. + for (int i = start + 1; i < end && start + 1 < blobs.size(); ++i) { + blobs.remove(start + 1); + } +} + +#ifndef GRAPHICS_DISABLED +void TWERD::plot(ScrollView* window) { + ScrollView::Color color = WERD::NextColor(ScrollView::BLACK); + for (int b = 0; b < blobs.size(); ++b) { + blobs[b]->plot(window, color, ScrollView::BROWN); + color = WERD::NextColor(color); + } +} +#endif // GRAPHICS_DISABLED + +/********************************************************************** + * divisible_blob + * + * Returns true if the blob contains multiple outlines than can be + * separated using divide_blobs. Sets the location to be used in the + * call to divide_blobs. + **********************************************************************/ +bool divisible_blob(TBLOB *blob, bool italic_blob, TPOINT* location) { + if (blob->outlines == NULL || blob->outlines->next == NULL) + return false; // Need at least 2 outlines for it to be possible. + int max_gap = 0; + TPOINT vertical = italic_blob ? kDivisibleVerticalItalic + : kDivisibleVerticalUpright; + for (TESSLINE* outline1 = blob->outlines; outline1 != NULL; + outline1 = outline1->next) { + if (outline1->is_hole) + continue; // Holes do not count as separable. + TPOINT mid_pt1( + static_cast((outline1->topleft.x + outline1->botright.x) / 2), + static_cast((outline1->topleft.y + outline1->botright.y) / 2)); + int mid_prod1 = CROSS(mid_pt1, vertical); + int min_prod1, max_prod1; + outline1->MinMaxCrossProduct(vertical, &min_prod1, &max_prod1); + for (TESSLINE* outline2 = outline1->next; outline2 != NULL; + outline2 = outline2->next) { + if (outline2->is_hole) + continue; // Holes do not count as separable. + TPOINT mid_pt2( + static_cast((outline2->topleft.x + outline2->botright.x) / 2), + static_cast((outline2->topleft.y + outline2->botright.y) / 2)); + int mid_prod2 = CROSS(mid_pt2, vertical); + int min_prod2, max_prod2; + outline2->MinMaxCrossProduct(vertical, &min_prod2, &max_prod2); + int mid_gap = abs(mid_prod2 - mid_prod1); + int overlap = MIN(max_prod1, max_prod2) - MAX(min_prod1, min_prod2); + if (mid_gap - overlap / 4 > max_gap) { + max_gap = mid_gap - overlap / 4; + *location = mid_pt1; + *location += mid_pt2; + *location /= 2; + } + } + } + // Use the y component of the vertical vector as an approximation to its + // length. + return max_gap > vertical.y; +} + +/********************************************************************** + * divide_blobs + * + * Create two blobs by grouping the outlines in the appropriate blob. + * The outlines that are beyond the location point are moved to the + * other blob. The ones whose x location is less than that point are + * retained in the original blob. + **********************************************************************/ +void divide_blobs(TBLOB *blob, TBLOB *other_blob, bool italic_blob, + const TPOINT& location) { + TPOINT vertical = italic_blob ? kDivisibleVerticalItalic + : kDivisibleVerticalUpright; + TESSLINE *outline1 = NULL; + TESSLINE *outline2 = NULL; + + TESSLINE *outline = blob->outlines; + blob->outlines = NULL; + int location_prod = CROSS(location, vertical); + + while (outline != NULL) { + TPOINT mid_pt( + static_cast((outline->topleft.x + outline->botright.x) / 2), + static_cast((outline->topleft.y + outline->botright.y) / 2)); + int mid_prod = CROSS(mid_pt, vertical); + if (mid_prod < location_prod) { + // Outline is in left blob. + if (outline1) + outline1->next = outline; + else + blob->outlines = outline; + outline1 = outline; + } + else { + // Outline is in right blob. + if (outline2) + outline2->next = outline; + else + other_blob->outlines = outline; + outline2 = outline; + } + outline = outline->next; + } + + if (outline1) + outline1->next = NULL; + if (outline2) + outline2->next = NULL; +} diff --git a/3rdparty/hgOCR/include/ccstruct/blobs.h b/3rdparty/hgOCR/include/ccstruct/blobs.h new file mode 100644 index 00000000..0119b47d --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blobs.h @@ -0,0 +1,449 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: blobs.h (Formerly blobs.h) + * Description: Blob definition + * Author: Mark Seaman, OCR Technology + * Created: Fri Oct 27 15:39:52 1989 + * Modified: Thu Mar 28 15:33:38 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1989, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ + +#ifndef BLOBS_H +#define BLOBS_H + +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "clst.h" +#include "normalis.h" +#include "publictypes.h" +#include "rect.h" +#include "vecfuncs.h" + +class BLOCK; +class C_BLOB; +class C_OUTLINE; +class LLSQ; +class ROW; +class WERD; + +/*---------------------------------------------------------------------- + T y p e s +----------------------------------------------------------------------*/ +#define EDGEPTFLAGS 4 /*concavity,length etc. */ + +struct TPOINT { + TPOINT(): x(0), y(0) {} + TPOINT(inT16 vx, inT16 vy) : x(vx), y(vy) {} + TPOINT(const ICOORD &ic) : x(ic.x()), y(ic.y()) {} + + void operator+=(const TPOINT& other) { + x += other.x; + y += other.y; + } + void operator/=(int divisor) { + x /= divisor; + y /= divisor; + } + bool operator==(const TPOINT& other) const { + return x == other.x && y == other.y; + } + // Returns true when the two line segments cross each other. + // (Moved from outlines.cpp). + static bool IsCrossed(const TPOINT& a0, const TPOINT& a1, const TPOINT& b0, + const TPOINT& b1); + + inT16 x; // absolute x coord. + inT16 y; // absolute y coord. +}; +typedef TPOINT VECTOR; // structure for coordinates. + +struct EDGEPT { + EDGEPT() + : next(NULL), prev(NULL), src_outline(NULL), start_step(0), step_count(0) { + memset(flags, 0, EDGEPTFLAGS * sizeof(flags[0])); + } + EDGEPT(const EDGEPT& src) : next(NULL), prev(NULL) { + CopyFrom(src); + } + EDGEPT& operator=(const EDGEPT& src) { + CopyFrom(src); + return *this; + } + // Copies the data elements, but leaves the pointers untouched. + void CopyFrom(const EDGEPT& src) { + pos = src.pos; + vec = src.vec; + memcpy(flags, src.flags, EDGEPTFLAGS * sizeof(flags[0])); + src_outline = src.src_outline; + start_step = src.start_step; + step_count = src.step_count; + } + // Returns the squared distance between the points, with the x-component + // weighted by x_factor. + int WeightedDistance(const EDGEPT& other, int x_factor) const { + int x_dist = pos.x - other.pos.x; + int y_dist = pos.y - other.pos.y; + return x_dist * x_dist * x_factor + y_dist * y_dist; + } + // Returns true if the positions are equal. + bool EqualPos(const EDGEPT& other) const { return pos == other.pos; } + // Returns the bounding box of the outline segment from *this to *end. + // Ignores hidden edge flags. + TBOX SegmentBox(const EDGEPT* end) const { + TBOX box(pos.x, pos.y, pos.x, pos.y); + const EDGEPT* pt = this; + do { + pt = pt->next; + if (pt->pos.x < box.left()) box.set_left(pt->pos.x); + if (pt->pos.x > box.right()) box.set_right(pt->pos.x); + if (pt->pos.y < box.bottom()) box.set_bottom(pt->pos.y); + if (pt->pos.y > box.top()) box.set_top(pt->pos.y); + } while (pt != end && pt != this); + return box; + } + // Returns the area of the outline segment from *this to *end. + // Ignores hidden edge flags. + int SegmentArea(const EDGEPT* end) const { + int area = 0; + const EDGEPT* pt = this->next; + do { + TPOINT origin_vec(pt->pos.x - pos.x, pt->pos.y - pos.y); + area += CROSS(origin_vec, pt->vec); + pt = pt->next; + } while (pt != end && pt != this); + return area; + } + // Returns true if the number of points in the outline segment from *this to + // *end is less that min_points and false if we get back to *this first. + // Ignores hidden edge flags. + bool ShortNonCircularSegment(int min_points, const EDGEPT* end) const { + int count = 0; + const EDGEPT* pt = this; + do { + if (pt == end) return true; + pt = pt->next; + ++count; + } while (pt != this && count <= min_points); + return false; + } + + // Accessors to hide or reveal a cut edge from feature extractors. + void Hide() { + flags[0] = true; + } + void Reveal() { + flags[0] = false; + } + bool IsHidden() const { + return flags[0] != 0; + } + void MarkChop() { + flags[2] = true; + } + bool IsChopPt() const { + return flags[2] != 0; + } + + TPOINT pos; // position + VECTOR vec; // vector to next point + // TODO(rays) Remove flags and replace with + // is_hidden, runlength, dir, and fixed. The only use + // of the flags other than is_hidden is in polyaprx.cpp. + char flags[EDGEPTFLAGS]; // concavity, length etc + EDGEPT* next; // anticlockwise element + EDGEPT* prev; // clockwise element + C_OUTLINE* src_outline; // Outline it came from. + // The following fields are not used if src_outline is NULL. + int start_step; // Location of pos in src_outline. + int step_count; // Number of steps used (may wrap around). +}; + +// For use in chop and findseam to keep a list of which EDGEPTs were inserted. +CLISTIZEH(EDGEPT); + +struct TESSLINE { + TESSLINE() : is_hole(false), loop(NULL), next(NULL) {} + TESSLINE(const TESSLINE& src) : loop(NULL), next(NULL) { + CopyFrom(src); + } + ~TESSLINE() { + Clear(); + } + TESSLINE& operator=(const TESSLINE& src) { + CopyFrom(src); + return *this; + } + // Consume the circular list of EDGEPTs to make a TESSLINE. + static TESSLINE* BuildFromOutlineList(EDGEPT* outline); + // Copies the data and the outline, but leaves next untouched. + void CopyFrom(const TESSLINE& src); + // Deletes owned data. + void Clear(); + // Normalize in-place using the DENORM. + void Normalize(const DENORM& denorm); + // Rotates by the given rotation in place. + void Rotate(const FCOORD rotation); + // Moves by the given vec in place. + void Move(const ICOORD vec); + // Scales by the given factor in place. + void Scale(float factor); + // Sets up the start and vec members of the loop from the pos members. + void SetupFromPos(); + // Recomputes the bounding box from the points in the loop. + void ComputeBoundingBox(); + // Computes the min and max cross product of the outline points with the + // given vec and returns the results in min_xp and max_xp. Geometrically + // this is the left and right edge of the outline perpendicular to the + // given direction, but to get the distance units correct, you would + // have to divide by the modulus of vec. + void MinMaxCrossProduct(const TPOINT vec, int* min_xp, int* max_xp) const; + + TBOX bounding_box() const; + // Returns true if *this and other have equal bounding boxes. + bool SameBox(const TESSLINE& other) const { + return topleft == other.topleft && botright == other.botright; + } + // Returns true if the given line segment crosses any outline of this blob. + bool SegmentCrosses(const TPOINT& pt1, const TPOINT& pt2) const { + if (Contains(pt1) && Contains(pt2)) { + EDGEPT* pt = loop; + do { + if (TPOINT::IsCrossed(pt1, pt2, pt->pos, pt->next->pos)) return true; + pt = pt->next; + } while (pt != loop); + } + return false; + } + // Returns true if the point is contained within the outline box. + bool Contains(const TPOINT& pt) const { + return topleft.x <= pt.x && pt.x <= botright.x && + botright.y <= pt.y && pt.y <= topleft.y; + } + + #ifndef GRAPHICS_DISABLED + void plot(ScrollView* window, ScrollView::Color color, + ScrollView::Color child_color); + #endif // GRAPHICS_DISABLED + + // Returns the first outline point that has a different src_outline to its + // predecessor, or, if all the same, the lowest indexed point. + EDGEPT* FindBestStartPt() const; + + + int BBArea() const { + return (botright.x - topleft.x) * (topleft.y - botright.y); + } + + TPOINT topleft; // Top left of loop. + TPOINT botright; // Bottom right of loop. + TPOINT start; // Start of loop. + bool is_hole; // True if this is a hole/child outline. + EDGEPT *loop; // Edgeloop. + TESSLINE *next; // Next outline in blob. +}; // Outline structure. + +struct TBLOB { + TBLOB() : outlines(NULL) {} + TBLOB(const TBLOB& src) : outlines(NULL) { + CopyFrom(src); + } + ~TBLOB() { + Clear(); + } + TBLOB& operator=(const TBLOB& src) { + CopyFrom(src); + return *this; + } + // Factory to build a TBLOB from a C_BLOB with polygonal approximation along + // the way. If allow_detailed_fx is true, the EDGEPTs in the returned TBLOB + // contain pointers to the input C_OUTLINEs that enable higher-resolution + // feature extraction that does not use the polygonal approximation. + static TBLOB* PolygonalCopy(bool allow_detailed_fx, C_BLOB* src); + // Factory builds a blob with no outlines, but copies the other member data. + static TBLOB* ShallowCopy(const TBLOB& src); + // Normalizes the blob for classification only if needed. + // (Normally this means a non-zero classify rotation.) + // If no Normalization is needed, then NULL is returned, and the input blob + // can be used directly. Otherwise a new TBLOB is returned which must be + // deleted after use. + TBLOB* ClassifyNormalizeIfNeeded() const; + + // Copies the data and the outlines, but leaves next untouched. + void CopyFrom(const TBLOB& src); + // Deletes owned data. + void Clear(); + // Sets up the built-in DENORM and normalizes the blob in-place. + // For parameters see DENORM::SetupNormalization, plus the inverse flag for + // this blob and the Pix for the full image. + void Normalize(const BLOCK* block, + const FCOORD* rotation, + const DENORM* predecessor, + float x_origin, float y_origin, + float x_scale, float y_scale, + float final_xshift, float final_yshift, + bool inverse, Pix* pix); + // Rotates by the given rotation in place. + void Rotate(const FCOORD rotation); + // Moves by the given vec in place. + void Move(const ICOORD vec); + // Scales by the given factor in place. + void Scale(float factor); + // Recomputes the bounding boxes of the outlines. + void ComputeBoundingBoxes(); + + // Returns the number of outlines. + int NumOutlines() const; + + TBOX bounding_box() const; + + // Returns true if the given line segment crosses any outline of this blob. + bool SegmentCrossesOutline(const TPOINT& pt1, const TPOINT& pt2) const { + for (const TESSLINE* outline = outlines; outline != NULL; + outline = outline->next) { + if (outline->SegmentCrosses(pt1, pt2)) return true; + } + return false; + } + // Returns true if the point is contained within any of the outline boxes. + bool Contains(const TPOINT& pt) const { + for (const TESSLINE* outline = outlines; outline != NULL; + outline = outline->next) { + if (outline->Contains(pt)) return true; + } + return false; + } + + // Finds and deletes any duplicate outlines in this blob, without deleting + // their EDGEPTs. + void EliminateDuplicateOutlines(); + + // Swaps the outlines of *this and next if needed to keep the centers in + // increasing x. + void CorrectBlobOrder(TBLOB* next); + + const DENORM& denorm() const { + return denorm_; + } + + #ifndef GRAPHICS_DISABLED + void plot(ScrollView* window, ScrollView::Color color, + ScrollView::Color child_color); + #endif // GRAPHICS_DISABLED + + int BBArea() const { + int total_area = 0; + for (TESSLINE* outline = outlines; outline != NULL; outline = outline->next) + total_area += outline->BBArea(); + return total_area; + } + + // Computes the center of mass and second moments for the old baseline and + // 2nd moment normalizations. Returns the outline length. + // The input denorm should be the normalizations that have been applied from + // the image to the current state of this TBLOB. + int ComputeMoments(FCOORD* center, FCOORD* second_moments) const; + // Computes the precise bounding box of the coords that are generated by + // GetEdgeCoords. This may be different from the bounding box of the polygon. + void GetPreciseBoundingBox(TBOX* precise_box) const; + // Adds edges to the given vectors. + // For all the edge steps in all the outlines, or polygonal approximation + // where there are no edge steps, collects the steps into x_coords/y_coords. + // x_coords is a collection of the x-coords of vertical edges for each + // y-coord starting at box.bottom(). + // y_coords is a collection of the y-coords of horizontal edges for each + // x-coord starting at box.left(). + // Eg x_coords[0] is a collection of the x-coords of edges at y=bottom. + // Eg x_coords[1] is a collection of the x-coords of edges at y=bottom + 1. + void GetEdgeCoords(const TBOX& box, + GenericVector >* x_coords, + GenericVector >* y_coords) const; + + TESSLINE *outlines; // List of outlines in blob. + + private: // TODO(rays) Someday the data members will be private too. + // For all the edge steps in all the outlines, or polygonal approximation + // where there are no edge steps, collects the steps into the bounding_box, + // llsq and/or the x_coords/y_coords. Both are used in different kinds of + // normalization. + // For a description of x_coords, y_coords, see GetEdgeCoords above. + void CollectEdges(const TBOX& box, + TBOX* bounding_box, LLSQ* llsq, + GenericVector >* x_coords, + GenericVector >* y_coords) const; + + private: + // DENORM indicating the transformations that this blob has undergone so far. + DENORM denorm_; +}; // Blob structure. + +struct TWERD { + TWERD() : latin_script(false) {} + TWERD(const TWERD& src) { + CopyFrom(src); + } + ~TWERD() { + Clear(); + } + TWERD& operator=(const TWERD& src) { + CopyFrom(src); + return *this; + } + // Factory to build a TWERD from a (C_BLOB) WERD, with polygonal + // approximation along the way. + static TWERD* PolygonalCopy(bool allow_detailed_fx, WERD* src); + // Baseline normalizes the blobs in-place, recording the normalization in the + // DENORMs in the blobs. + void BLNormalize(const BLOCK* block, const ROW* row, Pix* pix, bool inverse, + float x_height, float baseline_shift, bool numeric_mode, + tesseract::OcrEngineMode hint, + const TBOX* norm_box, + DENORM* word_denorm); + // Copies the data and the blobs, but leaves next untouched. + void CopyFrom(const TWERD& src); + // Deletes owned data. + void Clear(); + // Recomputes the bounding boxes of the blobs. + void ComputeBoundingBoxes(); + + // Returns the number of blobs in the word. + int NumBlobs() const { + return blobs.size(); + } + TBOX bounding_box() const; + + // Merges the blobs from start to end, not including end, and deletes + // the blobs between start and end. + void MergeBlobs(int start, int end); + + void plot(ScrollView* window); + + GenericVector blobs; // Blobs in word. + bool latin_script; // This word is in a latin-based script. +}; + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ +// TODO(rays) Make divisible_blob and divide_blobs members of TBLOB. +bool divisible_blob(TBLOB *blob, bool italic_blob, TPOINT* location); + +void divide_blobs(TBLOB *blob, TBLOB *other_blob, bool italic_blob, + const TPOINT& location); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/blread.cpp b/3rdparty/hgOCR/include/ccstruct/blread.cpp new file mode 100644 index 00000000..3b4d824e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blread.cpp @@ -0,0 +1,71 @@ +/********************************************************************** + * File: blread.cpp (Formerly pdread.c) + * Description: Friend function of BLOCK to read the uscan pd file. + * Author: Ray Smith + * Created: Mon Mar 18 14:39:00 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#ifdef __UNIX__ +#include +#endif +#include "scanutils.h" +#include "fileerr.h" +#include "blread.h" + +#define UNLV_EXT ".uzn" // unlv zone file + +/********************************************************************** + * read_unlv_file + * + * Read a whole unlv zone file to make a list of blocks. + **********************************************************************/ + +bool read_unlv_file( //print list of sides + STRING name, //basename of file + inT32 xsize, //image size + inT32 ysize, //image size + BLOCK_LIST *blocks //output list + ) { + FILE *pdfp; //file pointer + BLOCK *block; //current block + int x; //current top-down coords + int y; + int width; //of current block + int height; + BLOCK_IT block_it = blocks; //block iterator + + name += UNLV_EXT; //add extension + if ((pdfp = fopen (name.string (), "rb")) == NULL) { + return false; //didn't read one + } else { + while (tfscanf(pdfp, "%d %d %d %d %*s", &x, &y, &width, &height) >= 4) { + //make rect block + block = new BLOCK (name.string (), TRUE, 0, 0, + (inT16) x, (inT16) (ysize - y - height), + (inT16) (x + width), (inT16) (ysize - y)); + //on end of list + block_it.add_to_end (block); + } + fclose(pdfp); + } + return true; +} + +void FullPageBlock(int width, int height, BLOCK_LIST *blocks) { + BLOCK_IT block_it(blocks); + BLOCK* block = new BLOCK("", TRUE, 0, 0, 0, 0, width, height); + block_it.add_to_end(block); +} diff --git a/3rdparty/hgOCR/include/ccstruct/blread.h b/3rdparty/hgOCR/include/ccstruct/blread.h new file mode 100644 index 00000000..3969d002 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/blread.h @@ -0,0 +1,33 @@ +/********************************************************************** + * File: blread.h (Formerly pdread.h) + * Description: Friend function of BLOCK to read the uscan pd file. + * Author: Ray Smith + * Created: Mon Mar 18 14:39:00 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef BLREAD_H +#define BLREAD_H + +#include "params.h" +#include "ocrblock.h" + +bool read_unlv_file( //print list of sides + STRING name, //basename of file + inT32 xsize, //image size + inT32 ysize, //image size + BLOCK_LIST *blocks //output list + ); +void FullPageBlock(int width, int height, BLOCK_LIST *blocks); +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/boxread.cpp b/3rdparty/hgOCR/include/ccstruct/boxread.cpp new file mode 100644 index 00000000..d6ceebb4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/boxread.cpp @@ -0,0 +1,235 @@ +/********************************************************************** + * File: boxread.cpp + * Description: Read data from a box file. + * Author: Ray Smith + * Created: Fri Aug 24 17:47:23 PDT 2007 + * + * (C) Copyright 2007, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "boxread.h" +#include + +#include "fileerr.h" +#include "rect.h" +#include "strngs.h" +#include "tprintf.h" +#include "unichar.h" + +// Special char code used to identify multi-blob labels. +static const char* kMultiBlobLabelCode = "WordStr"; + +// Open the boxfile based on the given image filename. +FILE* OpenBoxFile(const STRING& fname) { + STRING filename = BoxFileName(fname); + FILE* box_file = NULL; + if (!(box_file = fopen(filename.string(), "rb"))) { + CANTOPENFILE.error("read_next_box", TESSEXIT, "Can't open box file %s", + filename.string()); + } + return box_file; +} + +// Reads all boxes from the given filename. +// Reads a specific target_page number if >= 0, or all pages otherwise. +// Skips blanks if skip_blanks is true. +// The UTF-8 label of the box is put in texts, and the full box definition as +// a string is put in box_texts, with the corresponding page number in pages. +// Each of the output vectors is optional (may be NULL). +// Returns false if no boxes are found. +bool ReadAllBoxes(int target_page, bool skip_blanks, const STRING& filename, + GenericVector* boxes, + GenericVector* texts, + GenericVector* box_texts, + GenericVector* pages) { + GenericVector box_data; + if (!tesseract::LoadDataFromFile(BoxFileName(filename), &box_data)) + return false; + // Convert the array of bytes to a string, so it can be used by the parser. + box_data.push_back('\0'); + return ReadMemBoxes(target_page, skip_blanks, &box_data[0], boxes, texts, + box_texts, pages); +} + +// Reads all boxes from the string. Otherwise, as ReadAllBoxes. +bool ReadMemBoxes(int target_page, bool skip_blanks, const char* box_data, + GenericVector* boxes, + GenericVector* texts, + GenericVector* box_texts, + GenericVector* pages) { + STRING box_str(box_data); + GenericVector lines; + box_str.split('\n', &lines); + if (lines.empty()) return false; + int num_boxes = 0; + for (int i = 0; i < lines.size(); ++i) { + int page = 0; + STRING utf8_str; + TBOX box; + if (!ParseBoxFileStr(lines[i].string(), &page, &utf8_str, &box)) { + continue; + } + if (skip_blanks && (utf8_str == " " || utf8_str == "\t")) continue; + if (target_page >= 0 && page != target_page) continue; + if (boxes != NULL) boxes->push_back(box); + if (texts != NULL) texts->push_back(utf8_str); + if (box_texts != NULL) { + STRING full_text; + MakeBoxFileStr(utf8_str.string(), box, target_page, &full_text); + box_texts->push_back(full_text); + } + if (pages != NULL) pages->push_back(page); + ++num_boxes; + } + return num_boxes > 0; +} + +// Returns the box file name corresponding to the given image_filename. +STRING BoxFileName(const STRING& image_filename) { + STRING box_filename = image_filename; + const char *lastdot = strrchr(box_filename.string(), '.'); + if (lastdot != NULL) + box_filename.truncate_at(lastdot - box_filename.string()); + + box_filename += ".box"; + return box_filename; +} + +// TODO(rays) convert all uses of ReadNextBox to use the new ReadAllBoxes. +// Box files are used ONLY DURING TRAINING, but by both processes of +// creating tr files with tesseract, and unicharset_extractor. +// ReadNextBox factors out the code to interpret a line of a box +// file so that applybox and unicharset_extractor interpret the same way. +// This function returns the next valid box file utf8 string and coords +// and returns true, or false on eof (and closes the file). +// It ignores the utf8 file signature ByteOrderMark (U+FEFF=EF BB BF), checks +// for valid utf-8 and allows space or tab between fields. +// utf8_str is set with the unichar string, and bounding box with the box. +// If there are page numbers in the file, it reads them all. +bool ReadNextBox(int *line_number, FILE* box_file, + STRING* utf8_str, TBOX* bounding_box) { + return ReadNextBox(-1, line_number, box_file, utf8_str, bounding_box); +} + +// As ReadNextBox above, but get a specific page number. (0-based) +// Use -1 to read any page number. Files without page number all +// read as if they are page 0. +bool ReadNextBox(int target_page, int *line_number, FILE* box_file, + STRING* utf8_str, TBOX* bounding_box) { + int page = 0; + char buff[kBoxReadBufSize]; // boxfile read buffer + char *buffptr = buff; + + while (fgets(buff, sizeof(buff) - 1, box_file)) { + (*line_number)++; + + buffptr = buff; + const unsigned char *ubuf = reinterpret_cast(buffptr); + if (ubuf[0] == 0xef && ubuf[1] == 0xbb && ubuf[2] == 0xbf) + buffptr += 3; // Skip unicode file designation. + // Check for blank lines in box file + if (*buffptr == '\n' || *buffptr == '\0') continue; + // Skip blank boxes. + if (*buffptr == ' ' || *buffptr == '\t') continue; + if (*buffptr != '\0') { + if (!ParseBoxFileStr(buffptr, &page, utf8_str, bounding_box)) { + tprintf("Box file format error on line %i; ignored\n", *line_number); + continue; + } + if (target_page >= 0 && target_page != page) + continue; // Not on the appropriate page. + return true; // Successfully read a box. + } + } + fclose(box_file); + return false; // EOF +} + +// Parses the given box file string into a page_number, utf8_str, and +// bounding_box. Returns true on a successful parse. +// The box file is assumed to contain box definitions, one per line, of the +// following format for blob-level boxes: +// +// and for word/line-level boxes: +// WordStr # +// See applyybox.cpp for more information. +bool ParseBoxFileStr(const char* boxfile_str, int* page_number, + STRING* utf8_str, TBOX* bounding_box) { + *bounding_box = TBOX(); // Initialize it to empty. + *utf8_str = ""; + char uch[kBoxReadBufSize]; + const char *buffptr = boxfile_str; + // Read the unichar without messing up on Tibetan. + // According to issue 253 the utf-8 surrogates 85 and A0 are treated + // as whitespace by sscanf, so it is more reliable to just find + // ascii space and tab. + int uch_len = 0; + // Skip unicode file designation, if present. + const unsigned char *ubuf = reinterpret_cast(buffptr); + if (ubuf[0] == 0xef && ubuf[1] == 0xbb && ubuf[2] == 0xbf) + buffptr += 3; + // Allow a single blank as the UTF-8 string. Check for empty string and + // then blindly eat the first character. + if (*buffptr == '\0') return false; + do { + uch[uch_len++] = *buffptr++; + } while (*buffptr != '\0' && *buffptr != ' ' && *buffptr != '\t' && + uch_len < kBoxReadBufSize - 1); + uch[uch_len] = '\0'; + if (*buffptr != '\0') ++buffptr; + int x_min, y_min, x_max, y_max; + *page_number = 0; + int count = sscanf(buffptr, "%d %d %d %d %d", + &x_min, &y_min, &x_max, &y_max, page_number); + if (count != 5 && count != 4) { + tprintf("Bad box coordinates in boxfile string! %s\n", ubuf); + return false; + } + // Test for long space-delimited string label. + if (strcmp(uch, kMultiBlobLabelCode) == 0 && + (buffptr = strchr(buffptr, '#')) != NULL) { + strncpy(uch, buffptr + 1, kBoxReadBufSize - 1); + uch[kBoxReadBufSize - 1] = '\0'; // Prevent buffer overrun. + chomp_string(uch); + uch_len = strlen(uch); + } + // Validate UTF8 by making unichars with it. + int used = 0; + while (used < uch_len) { + UNICHAR ch(uch + used, uch_len - used); + int new_used = ch.utf8_len(); + if (new_used == 0) { + tprintf("Bad UTF-8 str %s starts with 0x%02x at col %d\n", + uch + used, uch[used], used + 1); + return false; + } + used += new_used; + } + *utf8_str = uch; + if (x_min > x_max) Swap(&x_min, &x_max); + if (y_min > y_max) Swap(&y_min, &y_max); + bounding_box->set_to_given_coords(x_min, y_min, x_max, y_max); + return true; // Successfully read a box. +} + +// Creates a box file string from a unichar string, TBOX and page number. +void MakeBoxFileStr(const char* unichar_str, const TBOX& box, int page_num, + STRING* box_str) { + *box_str = unichar_str; + box_str->add_str_int(" ", box.left()); + box_str->add_str_int(" ", box.bottom()); + box_str->add_str_int(" ", box.right()); + box_str->add_str_int(" ", box.top()); + box_str->add_str_int(" ", page_num); +} + diff --git a/3rdparty/hgOCR/include/ccstruct/boxread.h b/3rdparty/hgOCR/include/ccstruct/boxread.h new file mode 100644 index 00000000..f12853df --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/boxread.h @@ -0,0 +1,85 @@ +/********************************************************************** + * File: boxread.cpp + * Description: Read data from a box file. + * Author: Ray Smith + * Created: Fri Aug 24 17:47:23 PDT 2007 + * + * (C) Copyright 2007, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCUTIL_BOXREAD_H__ +#define TESSERACT_CCUTIL_BOXREAD_H__ + +#include +#include "genericvector.h" +#include "strngs.h" + +class STRING; +class TBOX; + +// Size of buffer used to read a line from a box file. +const int kBoxReadBufSize = 1024; + +// Open the boxfile based on the given image filename. +// Returns NULL if the box file cannot be opened. +FILE* OpenBoxFile(const STRING& fname); + +// Reads all boxes from the given filename. +// Reads a specific target_page number if >= 0, or all pages otherwise. +// Skips blanks if skip_blanks is true. +// The UTF-8 label of the box is put in texts, and the full box definition as +// a string is put in box_texts, with the corresponding page number in pages. +// Each of the output vectors is optional (may be NULL). +// Returns false if no boxes are found. +bool ReadAllBoxes(int target_page, bool skip_blanks, const STRING& filename, + GenericVector* boxes, + GenericVector* texts, + GenericVector* box_texts, + GenericVector* pages); + +// Reads all boxes from the string. Otherwise, as ReadAllBoxes. +bool ReadMemBoxes(int target_page, bool skip_blanks, const char* box_data, + GenericVector* boxes, + GenericVector* texts, + GenericVector* box_texts, + GenericVector* pages); + +// Returns the box file name corresponding to the given image_filename. +STRING BoxFileName(const STRING& image_filename); + +// ReadNextBox factors out the code to interpret a line of a box +// file so that applybox and unicharset_extractor interpret the same way. +// This function returns the next valid box file utf8 string and coords +// and returns true, or false on eof (and closes the file). +// It ignores the utf8 file signature ByteOrderMark (U+FEFF=EF BB BF), checks +// for valid utf-8 and allows space or tab between fields. +// utf8_str is set with the unichar string, and bounding box with the box. +// If there are page numbers in the file, it reads them all. +bool ReadNextBox(int *line_number, FILE* box_file, + STRING* utf8_str, TBOX* bounding_box); +// As ReadNextBox above, but get a specific page number. (0-based) +// Use -1 to read any page number. Files without page number all +// read as if they are page 0. +bool ReadNextBox(int target_page, int *line_number, FILE* box_file, + STRING* utf8_str, TBOX* bounding_box); + +// Parses the given box file string into a page_number, utf8_str, and +// bounding_box. Returns true on a successful parse. +bool ParseBoxFileStr(const char* boxfile_str, int* page_number, + STRING* utf8_str, TBOX* bounding_box); + +// Creates a box file string from a unichar string, TBOX and page number. +void MakeBoxFileStr(const char* unichar_str, const TBOX& box, int page_num, + STRING* box_str); + +#endif // TESSERACT_CCUTIL_BOXREAD_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/boxword.cpp b/3rdparty/hgOCR/include/ccstruct/boxword.cpp new file mode 100644 index 00000000..9b1ce33e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/boxword.cpp @@ -0,0 +1,203 @@ +/////////////////////////////////////////////////////////////////////// +// File: boxword.h +// Description: Class to represent the bounding boxes of the output. +// Author: Ray Smith +// Created: Tue May 25 14:18:14 PDT 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "blobs.h" +#include "boxword.h" +#include "normalis.h" +#include "ocrblock.h" +#include "pageres.h" + +namespace tesseract { + +// Clip output boxes to input blob boxes for bounds that are within this +// tolerance. Otherwise, the blob may be chopped and we have to just use +// the word bounding box. +const int kBoxClipTolerance = 2; + +BoxWord::BoxWord() : length_(0) { +} + +BoxWord::BoxWord(const BoxWord& src) { + CopyFrom(src); +} + +BoxWord::~BoxWord() { +} + +BoxWord& BoxWord::operator=(const BoxWord& src) { + CopyFrom(src); + return *this; +} + +void BoxWord::CopyFrom(const BoxWord& src) { + bbox_ = src.bbox_; + length_ = src.length_; + boxes_.clear(); + boxes_.reserve(length_); + for (int i = 0; i < length_; ++i) + boxes_.push_back(src.boxes_[i]); +} + +// Factory to build a BoxWord from a TWERD using the DENORMs on each blob to +// switch back to original image coordinates. +BoxWord* BoxWord::CopyFromNormalized(TWERD* tessword) { + BoxWord* boxword = new BoxWord(); + // Count the blobs. + boxword->length_ = tessword->NumBlobs(); + // Allocate memory. + boxword->boxes_.reserve(boxword->length_); + + for (int b = 0; b < boxword->length_; ++b) { + TBLOB* tblob = tessword->blobs[b]; + TBOX blob_box; + for (TESSLINE* outline = tblob->outlines; outline != NULL; + outline = outline->next) { + EDGEPT* edgept = outline->loop; + // Iterate over the edges. + do { + if (!edgept->IsHidden() || !edgept->prev->IsHidden()) { + ICOORD pos(edgept->pos.x, edgept->pos.y); + TPOINT denormed; + tblob->denorm().DenormTransform(NULL, edgept->pos, &denormed); + pos.set_x(denormed.x); + pos.set_y(denormed.y); + TBOX pt_box(pos, pos); + blob_box += pt_box; + } + edgept = edgept->next; + } while (edgept != outline->loop); + } + boxword->boxes_.push_back(blob_box); + } + boxword->ComputeBoundingBox(); + return boxword; +} + +// Clean up the bounding boxes from the polygonal approximation by +// expanding slightly, then clipping to the blobs from the original_word +// that overlap. If not null, the block provides the inverse rotation. +void BoxWord::ClipToOriginalWord(const BLOCK* block, WERD* original_word) { + for (int i = 0; i < length_; ++i) { + TBOX box = boxes_[i]; + // Expand by a single pixel, as the poly approximation error is 1 pixel. + box = TBOX(box.left() - 1, box.bottom() - 1, + box.right() + 1, box.top() + 1); + // Now find the original box that matches. + TBOX original_box; + C_BLOB_IT b_it(original_word->cblob_list()); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + TBOX blob_box = b_it.data()->bounding_box(); + if (block != NULL) + blob_box.rotate(block->re_rotation()); + if (blob_box.major_overlap(box)) { + original_box += blob_box; + } + } + if (!original_box.null_box()) { + if (NearlyEqual(original_box.left(), box.left(), kBoxClipTolerance)) + box.set_left(original_box.left()); + if (NearlyEqual(original_box.right(), box.right(), + kBoxClipTolerance)) + box.set_right(original_box.right()); + if (NearlyEqual(original_box.top(), box.top(), kBoxClipTolerance)) + box.set_top(original_box.top()); + if (NearlyEqual(original_box.bottom(), box.bottom(), + kBoxClipTolerance)) + box.set_bottom(original_box.bottom()); + } + original_box = original_word->bounding_box(); + if (block != NULL) + original_box.rotate(block->re_rotation()); + boxes_[i] = box.intersection(original_box); + } + ComputeBoundingBox(); +} + +// Merges the boxes from start to end, not including end, and deletes +// the boxes between start and end. +void BoxWord::MergeBoxes(int start, int end) { + start = ClipToRange(start, 0, length_); + end = ClipToRange(end, 0, length_); + if (end <= start + 1) + return; + for (int i = start + 1; i < end; ++i) { + boxes_[start] += boxes_[i]; + } + int shrinkage = end - 1 - start; + length_ -= shrinkage; + for (int i = start + 1; i < length_; ++i) + boxes_[i] = boxes_[i + shrinkage]; + boxes_.truncate(length_); +} + +// Inserts a new box before the given index. +// Recomputes the bounding box. +void BoxWord::InsertBox(int index, const TBOX& box) { + if (index < length_) + boxes_.insert(box, index); + else + boxes_.push_back(box); + length_ = boxes_.size(); + ComputeBoundingBox(); +} + +// Changes the box at the given index to the new box. +// Recomputes the bounding box. +void BoxWord::ChangeBox(int index, const TBOX& box) { + boxes_[index] = box; + ComputeBoundingBox(); +} + +// Deletes the box with the given index, and shuffles up the rest. +// Recomputes the bounding box. +void BoxWord::DeleteBox(int index) { + ASSERT_HOST(0 <= index && index < length_); + boxes_.remove(index); + --length_; + ComputeBoundingBox(); +} + +// Deletes all the boxes stored in BoxWord. +void BoxWord::DeleteAllBoxes() { + length_ = 0; + boxes_.clear(); + bbox_ = TBOX(); +} + +// Computes the bounding box of the word. +void BoxWord::ComputeBoundingBox() { + bbox_ = TBOX(); + for (int i = 0; i < length_; ++i) + bbox_ += boxes_[i]; +} + +// This and other putatively are the same, so call the (permanent) callback +// for each blob index where the bounding boxes match. +// The callback is deleted on completion. +void BoxWord::ProcessMatchedBlobs(const TWERD& other, + TessCallback1* cb) const { + for (int i = 0; i < length_ && i < other.NumBlobs(); ++i) { + TBOX blob_box = other.blobs[i]->bounding_box(); + if (blob_box == boxes_[i]) + cb->Run(i); + } + delete cb; +} + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccstruct/boxword.h b/3rdparty/hgOCR/include/ccstruct/boxword.h new file mode 100644 index 00000000..c1fab068 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/boxword.h @@ -0,0 +1,101 @@ +/////////////////////////////////////////////////////////////////////// +// File: boxword.h +// Description: Class to represent the bounding boxes of the output. +// Author: Ray Smith +// Created: Tue May 25 14:18:14 PDT 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CSTRUCT_BOXWORD_H__ +#define TESSERACT_CSTRUCT_BOXWORD_H__ + +#include "genericvector.h" +#include "rect.h" +#include "unichar.h" + +class BLOCK; +class DENORM; +struct TWERD; +class UNICHARSET; +class WERD; +class WERD_CHOICE; +class WERD_RES; + +namespace tesseract { + +// Class to hold an array of bounding boxes for an output word and +// the bounding box of the whole word. +class BoxWord { + public: + BoxWord(); + explicit BoxWord(const BoxWord& src); + ~BoxWord(); + + BoxWord& operator=(const BoxWord& src); + + void CopyFrom(const BoxWord& src); + + // Factory to build a BoxWord from a TWERD using the DENORMs on each blob to + // switch back to original image coordinates. + static BoxWord* CopyFromNormalized(TWERD* tessword); + + // Clean up the bounding boxes from the polygonal approximation by + // expanding slightly, then clipping to the blobs from the original_word + // that overlap. If not null, the block provides the inverse rotation. + void ClipToOriginalWord(const BLOCK* block, WERD* original_word); + + // Merges the boxes from start to end, not including end, and deletes + // the boxes between start and end. + void MergeBoxes(int start, int end); + + // Inserts a new box before the given index. + // Recomputes the bounding box. + void InsertBox(int index, const TBOX& box); + + // Changes the box at the given index to the new box. + // Recomputes the bounding box. + void ChangeBox(int index, const TBOX& box); + + // Deletes the box with the given index, and shuffles up the rest. + // Recomputes the bounding box. + void DeleteBox(int index); + + // Deletes all the boxes stored in BoxWord. + void DeleteAllBoxes(); + + // This and other putatively are the same, so call the (permanent) callback + // for each blob index where the bounding boxes match. + // The callback is deleted on completion. + void ProcessMatchedBlobs(const TWERD& other, TessCallback1* cb) const; + + const TBOX& bounding_box() const { + return bbox_; + } + int length() const { return length_; } + const TBOX& BlobBox(int index) const { + return boxes_[index]; + } + + private: + void ComputeBoundingBox(); + + TBOX bbox_; + int length_; + GenericVector boxes_; +}; + +} // namespace tesseract. + + +#endif // TESSERACT_CSTRUCT_BOXWORD_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/ccstruct.cpp b/3rdparty/hgOCR/include/ccstruct/ccstruct.cpp new file mode 100644 index 00000000..d030f507 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ccstruct.cpp @@ -0,0 +1,36 @@ +/////////////////////////////////////////////////////////////////////// +// File: ccstruct.cpp +// Description: ccstruct class. +// Author: Samuel Charron +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "ccstruct.h" + +namespace tesseract { + +// APPROXIMATIONS of the fractions of the character cell taken by +// the descenders, ascenders, and x-height. +const double CCStruct::kDescenderFraction = 0.25; +const double CCStruct::kXHeightFraction = 0.5; +const double CCStruct::kAscenderFraction = 0.25; +const double CCStruct::kXHeightCapRatio = CCStruct::kXHeightFraction / + (CCStruct::kXHeightFraction + CCStruct::kAscenderFraction); + +CCStruct::CCStruct() {} + +CCStruct::~CCStruct() { +} + +} diff --git a/3rdparty/hgOCR/include/ccstruct/ccstruct.h b/3rdparty/hgOCR/include/ccstruct/ccstruct.h new file mode 100644 index 00000000..3f92122d --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ccstruct.h @@ -0,0 +1,44 @@ +/////////////////////////////////////////////////////////////////////// +// File: ccstruct.h +// Description: ccstruct class. +// Author: Samuel Charron +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCSTRUCT_CCSTRUCT_H__ +#define TESSERACT_CCSTRUCT_CCSTRUCT_H__ + +#include "cutil.h" + +namespace tesseract { +class CCStruct : public CUtil { + public: + CCStruct(); + ~CCStruct(); + + // Globally accessible constants. + // APPROXIMATIONS of the fractions of the character cell taken by + // the descenders, ascenders, and x-height. + static const double kDescenderFraction; // = 0.25; + static const double kXHeightFraction; // = 0.5; + static const double kAscenderFraction; // = 0.25; + // Derived value giving the x-height as a fraction of cap-height. + static const double kXHeightCapRatio; // = XHeight/(XHeight + Ascender). +}; + +class Tesseract; +} // namespace tesseract + + +#endif // TESSERACT_CCSTRUCT_CCSTRUCT_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/coutln.cpp b/3rdparty/hgOCR/include/ccstruct/coutln.cpp new file mode 100644 index 00000000..5b8792a9 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/coutln.cpp @@ -0,0 +1,1075 @@ +/********************************************************************** + * File: coutln.c (Formerly coutline.c) + * Description: Code for the C_OUTLINE class. + * Author: Ray Smith + * Created: Mon Oct 07 16:01:57 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#ifdef __UNIX__ +#include +#endif + +#include "coutln.h" + +#include "allheaders.h" +#include "blobs.h" +#include "normalis.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +ELISTIZE (C_OUTLINE) +ICOORD C_OUTLINE::step_coords[4] = { + ICOORD (-1, 0), ICOORD (0, -1), ICOORD (1, 0), ICOORD (0, 1) +}; + +/** + * @name C_OUTLINE::C_OUTLINE + * + * Constructor to build a C_OUTLINE from a CRACKEDGE LOOP. + * @param startpt outline to convert + * @param bot_left bounding box + * @param top_right bounding box + * @param length length of loop + */ + +C_OUTLINE::C_OUTLINE(CRACKEDGE* startpt, ICOORD bot_left, ICOORD top_right, + inT16 length) + : box(bot_left, top_right), start(startpt->pos), offsets(NULL) { + inT16 stepindex; //index to step + CRACKEDGE *edgept; //current point + + stepcount = length; //no of steps + if (length == 0) { + steps = NULL; + return; + } + //get memory + steps = (uinT8 *) alloc_mem (step_mem()); + memset(steps, 0, step_mem()); + edgept = startpt; + + for (stepindex = 0; stepindex < length; stepindex++) { + //set compact step + set_step (stepindex, edgept->stepdir); + edgept = edgept->next; + } +} + +/** + * @name C_OUTLINE::C_OUTLINE + * + * Constructor to build a C_OUTLINE from a C_OUTLINE_FRAG. + */ +C_OUTLINE::C_OUTLINE ( +//constructor + //steps to copy +ICOORD startpt, DIR128 * new_steps, +inT16 length //length of loop +):start (startpt), offsets(NULL) { + inT8 dirdiff; //direction difference + DIR128 prevdir; //previous direction + DIR128 dir; //current direction + DIR128 lastdir; //dir of last step + TBOX new_box; //easy bounding + inT16 stepindex; //index to step + inT16 srcindex; //source steps + ICOORD pos; //current position + + pos = startpt; + stepcount = length; // No. of steps. + ASSERT_HOST(length >= 0); + steps = reinterpret_cast(alloc_mem(step_mem())); // Get memory. + memset(steps, 0, step_mem()); + + lastdir = new_steps[length - 1]; + prevdir = lastdir; + for (stepindex = 0, srcindex = 0; srcindex < length; + stepindex++, srcindex++) { + new_box = TBOX (pos, pos); + box += new_box; + //copy steps + dir = new_steps[srcindex]; + set_step(stepindex, dir); + dirdiff = dir - prevdir; + pos += step (stepindex); + if ((dirdiff == 64 || dirdiff == -64) && stepindex > 0) { + stepindex -= 2; //cancel there-and-back + prevdir = stepindex >= 0 ? step_dir (stepindex) : lastdir; + } + else + prevdir = dir; + } + ASSERT_HOST (pos.x () == startpt.x () && pos.y () == startpt.y ()); + do { + dirdiff = step_dir (stepindex - 1) - step_dir (0); + if (dirdiff == 64 || dirdiff == -64) { + start += step (0); + stepindex -= 2; //cancel there-and-back + for (int i = 0; i < stepindex; ++i) + set_step(i, step_dir(i + 1)); + } + } + while (stepindex > 1 && (dirdiff == 64 || dirdiff == -64)); + stepcount = stepindex; + ASSERT_HOST (stepcount >= 4); +} + +/** + * @name C_OUTLINE::C_OUTLINE + * + * Constructor to build a C_OUTLINE from a rotation of a C_OUTLINE. + * @param srcline outline to rotate + * @param rotation rotate to coord + */ + +C_OUTLINE::C_OUTLINE(C_OUTLINE* srcline, FCOORD rotation) : offsets(NULL) { + TBOX new_box; //easy bounding + inT16 stepindex; //index to step + inT16 dirdiff; //direction change + ICOORD pos; //current position + ICOORD prevpos; //previous dest point + + ICOORD destpos; //destination point + inT16 destindex; //index to step + DIR128 dir; //coded direction + uinT8 new_step; + + stepcount = srcline->stepcount * 2; + if (stepcount == 0) { + steps = NULL; + box = srcline->box; + box.rotate(rotation); + return; + } + //get memory + steps = (uinT8 *) alloc_mem (step_mem()); + memset(steps, 0, step_mem()); + + for (int iteration = 0; iteration < 2; ++iteration) { + DIR128 round1 = iteration == 0 ? 32 : 0; + DIR128 round2 = iteration != 0 ? 32 : 0; + pos = srcline->start; + prevpos = pos; + prevpos.rotate (rotation); + start = prevpos; + box = TBOX (start, start); + destindex = 0; + for (stepindex = 0; stepindex < srcline->stepcount; stepindex++) { + pos += srcline->step (stepindex); + destpos = pos; + destpos.rotate (rotation); + // tprintf("%i %i %i %i ", destpos.x(), destpos.y(), pos.x(), pos.y()); + while (destpos.x () != prevpos.x () || destpos.y () != prevpos.y ()) { + dir = DIR128 (FCOORD (destpos - prevpos)); + dir += 64; //turn to step style + new_step = dir.get_dir (); + // tprintf(" %i\n", new_step); + if (new_step & 31) { + set_step(destindex++, dir + round1); + prevpos += step(destindex - 1); + if (destindex < 2 + || ((dirdiff = + step_dir (destindex - 1) - step_dir (destindex - 2)) != + -64 && dirdiff != 64)) { + set_step(destindex++, dir + round2); + prevpos += step(destindex - 1); + } else { + prevpos -= step(destindex - 1); + destindex--; + prevpos -= step(destindex - 1); + set_step(destindex - 1, dir + round2); + prevpos += step(destindex - 1); + } + } + else { + set_step(destindex++, dir); + prevpos += step(destindex - 1); + } + while (destindex >= 2 && + ((dirdiff = + step_dir (destindex - 1) - step_dir (destindex - 2)) == -64 || + dirdiff == 64)) { + prevpos -= step(destindex - 1); + prevpos -= step(destindex - 2); + destindex -= 2; // Forget u turn + } + //ASSERT_HOST(prevpos.x() == destpos.x() && prevpos.y() == destpos.y()); + new_box = TBOX (destpos, destpos); + box += new_box; + } + } + ASSERT_HOST (destpos.x () == start.x () && destpos.y () == start.y ()); + dirdiff = step_dir (destindex - 1) - step_dir (0); + while ((dirdiff == 64 || dirdiff == -64) && destindex > 1) { + start += step (0); + destindex -= 2; + for (int i = 0; i < destindex; ++i) + set_step(i, step_dir(i + 1)); + dirdiff = step_dir (destindex - 1) - step_dir (0); + } + if (destindex >= 4) + break; + } + ASSERT_HOST(destindex <= stepcount); + stepcount = destindex; + destpos = start; + for (stepindex = 0; stepindex < stepcount; stepindex++) { + destpos += step (stepindex); + } + ASSERT_HOST (destpos.x () == start.x () && destpos.y () == start.y ()); +} + +// Build a fake outline, given just a bounding box and append to the list. +void C_OUTLINE::FakeOutline(const TBOX& box, C_OUTLINE_LIST* outlines) { + C_OUTLINE_IT ol_it(outlines); + // Make a C_OUTLINE from the bounds. This is a bit of a hack, + // as there is no outline, just a bounding box, but it works nicely. + CRACKEDGE start; + start.pos = box.topleft(); + C_OUTLINE* outline = new C_OUTLINE(&start, box.topleft(), box.botright(), 0); + ol_it.add_to_end(outline); +} + +/** + * @name C_OUTLINE::area + * + * Compute the area of the outline. + */ + +inT32 C_OUTLINE::area() const { + int stepindex; //current step + inT32 total_steps; //steps to do + inT32 total; //total area + ICOORD pos; //position of point + ICOORD next_step; //step to next pix + // We aren't going to modify the list, or its contents, but there is + // no const iterator. + C_OUTLINE_IT it(const_cast(&children)); + + pos = start_pos (); + total_steps = pathlength (); + total = 0; + for (stepindex = 0; stepindex < total_steps; stepindex++) { + //all intersected + next_step = step (stepindex); + if (next_step.x () < 0) + total += pos.y (); + else if (next_step.x () > 0) + total -= pos.y (); + pos += next_step; + } + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + total += it.data ()->area ();//add areas of children + + return total; +} + +/** + * @name C_OUTLINE::perimeter + * + * Compute the perimeter of the outline and its first level children. + */ + +inT32 C_OUTLINE::perimeter() const { + inT32 total_steps; // Return value. + // We aren't going to modify the list, or its contents, but there is + // no const iterator. + C_OUTLINE_IT it(const_cast(&children)); + + total_steps = pathlength(); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) + total_steps += it.data()->pathlength(); // Add perimeters of children. + + return total_steps; +} + +/** + * @name C_OUTLINE::outer_area + * + * Compute the area of the outline. + */ + +inT32 C_OUTLINE::outer_area() const { + int stepindex; //current step + inT32 total_steps; //steps to do + inT32 total; //total area + ICOORD pos; //position of point + ICOORD next_step; //step to next pix + + pos = start_pos (); + total_steps = pathlength (); + if (total_steps == 0) + return box.area(); + total = 0; + for (stepindex = 0; stepindex < total_steps; stepindex++) { + //all intersected + next_step = step (stepindex); + if (next_step.x () < 0) + total += pos.y (); + else if (next_step.x () > 0) + total -= pos.y (); + pos += next_step; + } + + return total; +} + +/** + * @name C_OUTLINE::count_transitions + * + * Compute the number of x and y maxes and mins in the outline. + * @param threshold winding number on size + */ + +inT32 C_OUTLINE::count_transitions(inT32 threshold) { + BOOL8 first_was_max_x; //what was first + BOOL8 first_was_max_y; + BOOL8 looking_for_max_x; //what is next + BOOL8 looking_for_min_x; + BOOL8 looking_for_max_y; //what is next + BOOL8 looking_for_min_y; + int stepindex; //current step + inT32 total_steps; //steps to do + //current limits + inT32 max_x, min_x, max_y, min_y; + inT32 initial_x, initial_y; //initial limits + inT32 total; //total changes + ICOORD pos; //position of point + ICOORD next_step; //step to next pix + + pos = start_pos (); + total_steps = pathlength (); + total = 0; + max_x = min_x = pos.x (); + max_y = min_y = pos.y (); + looking_for_max_x = TRUE; + looking_for_min_x = TRUE; + looking_for_max_y = TRUE; + looking_for_min_y = TRUE; + first_was_max_x = FALSE; + first_was_max_y = FALSE; + initial_x = pos.x (); + initial_y = pos.y (); //stop uninit warning + for (stepindex = 0; stepindex < total_steps; stepindex++) { + //all intersected + next_step = step (stepindex); + pos += next_step; + if (next_step.x () < 0) { + if (looking_for_max_x && pos.x () < min_x) + min_x = pos.x (); + if (looking_for_min_x && max_x - pos.x () > threshold) { + if (looking_for_max_x) { + initial_x = max_x; + first_was_max_x = FALSE; + } + total++; + looking_for_max_x = TRUE; + looking_for_min_x = FALSE; + min_x = pos.x (); //reset min + } + } + else if (next_step.x () > 0) { + if (looking_for_min_x && pos.x () > max_x) + max_x = pos.x (); + if (looking_for_max_x && pos.x () - min_x > threshold) { + if (looking_for_min_x) { + initial_x = min_x; //remember first min + first_was_max_x = TRUE; + } + total++; + looking_for_max_x = FALSE; + looking_for_min_x = TRUE; + max_x = pos.x (); + } + } + else if (next_step.y () < 0) { + if (looking_for_max_y && pos.y () < min_y) + min_y = pos.y (); + if (looking_for_min_y && max_y - pos.y () > threshold) { + if (looking_for_max_y) { + initial_y = max_y; //remember first max + first_was_max_y = FALSE; + } + total++; + looking_for_max_y = TRUE; + looking_for_min_y = FALSE; + min_y = pos.y (); //reset min + } + } + else { + if (looking_for_min_y && pos.y () > max_y) + max_y = pos.y (); + if (looking_for_max_y && pos.y () - min_y > threshold) { + if (looking_for_min_y) { + initial_y = min_y; //remember first min + first_was_max_y = TRUE; + } + total++; + looking_for_max_y = FALSE; + looking_for_min_y = TRUE; + max_y = pos.y (); + } + } + + } + if (first_was_max_x && looking_for_min_x) { + if (max_x - initial_x > threshold) + total++; + else + total--; + } + else if (!first_was_max_x && looking_for_max_x) { + if (initial_x - min_x > threshold) + total++; + else + total--; + } + if (first_was_max_y && looking_for_min_y) { + if (max_y - initial_y > threshold) + total++; + else + total--; + } + else if (!first_was_max_y && looking_for_max_y) { + if (initial_y - min_y > threshold) + total++; + else + total--; + } + + return total; +} + +/** + * @name C_OUTLINE::operator< + * + * @return TRUE if the left operand is inside the right one. + * @param other other outline + */ + +BOOL8 +C_OUTLINE::operator<(const C_OUTLINE& other) const { + inT16 count = 0; //winding count + ICOORD pos; //position of point + inT32 stepindex; //index to cstep + + if (!box.overlap (other.box)) + return FALSE; //can't be contained + if (stepcount == 0) + return other.box.contains(this->box); + + pos = start; + for (stepindex = 0; stepindex < stepcount + && (count = other.winding_number (pos)) == INTERSECTING; stepindex++) + pos += step (stepindex); //try all points + if (count == INTERSECTING) { + //all intersected + pos = other.start; + for (stepindex = 0; stepindex < other.stepcount + && (count = winding_number (pos)) == INTERSECTING; stepindex++) + //try other way round + pos += other.step (stepindex); + return count == INTERSECTING || count == 0; + } + return count != 0; +} + +/** + * @name C_OUTLINE::winding_number + * + * @return the winding number of the outline around the given point. + * @param point point to wind around + */ + +inT16 C_OUTLINE::winding_number(ICOORD point) const { + inT16 stepindex; //index to cstep + inT16 count; //winding count + ICOORD vec; //to current point + ICOORD stepvec; //step vector + inT32 cross; //cross product + + vec = start - point; //vector to it + count = 0; + for (stepindex = 0; stepindex < stepcount; stepindex++) { + stepvec = step (stepindex); //get the step + //crossing the line + if (vec.y () <= 0 && vec.y () + stepvec.y () > 0) { + cross = vec * stepvec; //cross product + if (cross > 0) + count++; //crossing right half + else if (cross == 0) + return INTERSECTING; //going through point + } + else if (vec.y () > 0 && vec.y () + stepvec.y () <= 0) { + cross = vec * stepvec; + if (cross < 0) + count--; //crossing back + else if (cross == 0) + return INTERSECTING; //illegal + } + vec += stepvec; //sum vectors + } + return count; //winding number +} + +/** + * C_OUTLINE::turn_direction + * + * @return the sum direction delta of the outline. + */ + +inT16 C_OUTLINE::turn_direction() const { //winding number + DIR128 prevdir; //previous direction + DIR128 dir; //current direction + inT16 stepindex; //index to cstep + inT8 dirdiff; //direction difference + inT16 count; //winding count + + if (stepcount == 0) + return 128; + count = 0; + prevdir = step_dir (stepcount - 1); + for (stepindex = 0; stepindex < stepcount; stepindex++) { + dir = step_dir (stepindex); + dirdiff = dir - prevdir; + ASSERT_HOST (dirdiff == 0 || dirdiff == 32 || dirdiff == -32); + count += dirdiff; + prevdir = dir; + } + ASSERT_HOST (count == 128 || count == -128); + return count; //winding number +} + +/** + * @name C_OUTLINE::reverse + * + * Reverse the direction of an outline. + */ + +void C_OUTLINE::reverse() { //reverse drection + DIR128 halfturn = MODULUS / 2; //amount to shift + DIR128 stepdir; //direction of step + inT16 stepindex; //index to cstep + inT16 farindex; //index to other side + inT16 halfsteps; //half of stepcount + + halfsteps = (stepcount + 1) / 2; + for (stepindex = 0; stepindex < halfsteps; stepindex++) { + farindex = stepcount - stepindex - 1; + stepdir = step_dir (stepindex); + set_step (stepindex, step_dir (farindex) + halfturn); + set_step (farindex, stepdir + halfturn); + } +} + +/** + * @name C_OUTLINE::move + * + * Move C_OUTLINE by vector + * @param vec vector to reposition OUTLINE by + */ + +void C_OUTLINE::move(const ICOORD vec) { + C_OUTLINE_IT it(&children); // iterator + + box.move (vec); + start += vec; + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + it.data ()->move (vec); // move child outlines +} + +/** + * Returns true if *this and its children are legally nested. + * The outer area of a child should have the opposite sign to the + * parent. If not, it means we have discarded an outline in between + * (probably due to excessive length). + */ +bool C_OUTLINE::IsLegallyNested() const { + if (stepcount == 0) return true; + int64_t parent_area = outer_area(); + // We aren't going to modify the list, or its contents, but there is + // no const iterator. + C_OUTLINE_IT child_it(const_cast(&children)); + for (child_it.mark_cycle_pt(); !child_it.cycled_list(); child_it.forward()) { + const C_OUTLINE* child = child_it.data(); + if (child->outer_area() * parent_area > 0 || !child->IsLegallyNested()) + return false; + } + return true; +} + +/** + * If this outline is smaller than the given min_size, delete this and + * remove from its list, via *it, after checking that *it points to this. + * Otherwise, if any children of this are too small, delete them. + * On entry, *it must be an iterator pointing to this. If this gets deleted + * then this is extracted from *it, so an iteration can continue. + * @param min_size minimum size for outline + * @param it outline iterator + */ +void C_OUTLINE::RemoveSmallRecursive(int min_size, C_OUTLINE_IT* it) { + if (box.width() < min_size || box.height() < min_size) { + ASSERT_HOST(this == it->data()); + delete it->extract(); // Too small so get rid of it and any children. + } else if (!children.empty()) { + // Search the children of this, deleting any that are too small. + C_OUTLINE_IT child_it(&children); + for (child_it.mark_cycle_pt(); !child_it.cycled_list(); + child_it.forward()) { + C_OUTLINE* child = child_it.data(); + child->RemoveSmallRecursive(min_size, &child_it); + } + } +} + +// Factored out helpers below are used only by ComputeEdgeOffsets to operate +// on data from an 8-bit Pix, and assume that any input x and/or y are already +// constrained to be legal Pix coordinates. + +/** + * Helper computes the local 2-D gradient (dx, dy) from the 2x2 cell centered + * on the given (x,y). If the cell would go outside the image, it is padded + * with white. + */ +static void ComputeGradient(const l_uint32* data, int wpl, + int x, int y, int width, int height, + ICOORD* gradient) { + const l_uint32* line = data + y * wpl; + int pix_x_y = + x < width && y < height + ? GET_DATA_BYTE( + const_cast(reinterpret_cast(line)), x) + : 255; + int pix_x_prevy = + x < width && y > 0 + ? GET_DATA_BYTE( + const_cast(reinterpret_cast(line - wpl)), x) + : 255; + int pix_prevx_prevy = + x > 0 && y > 0 + ? GET_DATA_BYTE( + const_cast(reinterpret_cast(line - wpl)), + x - 1) + : 255; + int pix_prevx_y = + x > 0 && y < height + ? GET_DATA_BYTE( + const_cast(reinterpret_cast(line)), x - 1) + : 255; + gradient->set_x(pix_x_y + pix_x_prevy - (pix_prevx_y + pix_prevx_prevy)); + gradient->set_y(pix_x_prevy + pix_prevx_prevy - (pix_x_y + pix_prevx_y)); +} + +/** + * Helper evaluates a vertical difference, (x,y) - (x,y-1), returning true if + * the difference, matches diff_sign and updating the best_diff, best_sum, + * best_y if a new max. + */ +static bool EvaluateVerticalDiff(const l_uint32* data, int wpl, int diff_sign, + int x, int y, int height, + int* best_diff, int* best_sum, int* best_y) { + if (y <= 0 || y >= height) + return false; + const l_uint32* line = data + y * wpl; + int pixel1 = GET_DATA_BYTE( + const_cast(reinterpret_cast(line - wpl)), x); + int pixel2 = + GET_DATA_BYTE(const_cast(reinterpret_cast(line)), x); + int diff = (pixel2 - pixel1) * diff_sign; + if (diff > *best_diff) { + *best_diff = diff; + *best_sum = pixel1 + pixel2; + *best_y = y; + } + return diff > 0; +} + +/** + * Helper evaluates a horizontal difference, (x,y) - (x-1,y), where y is implied + * by the input image line, returning true if the difference matches diff_sign + * and updating the best_diff, best_sum, best_x if a new max. + */ +static bool EvaluateHorizontalDiff(const l_uint32* line, int diff_sign, + int x, int width, + int* best_diff, int* best_sum, int* best_x) { + if (x <= 0 || x >= width) + return false; + int pixel1 = GET_DATA_BYTE( + const_cast(reinterpret_cast(line)), x - 1); + int pixel2 = + GET_DATA_BYTE(const_cast(reinterpret_cast(line)), x); + int diff = (pixel2 - pixel1) * diff_sign; + if (diff > *best_diff) { + *best_diff = diff; + *best_sum = pixel1 + pixel2; + *best_x = x; + } + return diff > 0; +} + +/** + * Adds sub-pixel resolution EdgeOffsets for the outline if the supplied + * pix is 8-bit. Does nothing otherwise. + * Operation: Consider the following near-horizontal line: + * @verbatim + * _________ + * |________ + * |________ + * @endverbatim + * At *every* position along this line, the gradient direction will be close + * to vertical. Extrapoaltion/interpolation of the position of the threshold + * that was used to binarize the image gives a more precise vertical position + * for each horizontal step, and the conflict in step direction and gradient + * direction can be used to ignore the vertical steps. + */ +void C_OUTLINE::ComputeEdgeOffsets(int threshold, Pix* pix) { + if (pixGetDepth(pix) != 8) return; + const l_uint32* data = pixGetData(pix); + int wpl = pixGetWpl(pix); + int width = pixGetWidth(pix); + int height = pixGetHeight(pix); + bool negative = flag(COUT_INVERSE); + delete [] offsets; + offsets = new EdgeOffset[stepcount]; + ICOORD pos = start; + ICOORD prev_gradient; + ComputeGradient(data, wpl, pos.x(), height - pos.y(), width, height, + &prev_gradient); + for (int s = 0; s < stepcount; ++s) { + ICOORD step_vec = step(s); + TPOINT pt1(pos); + pos += step_vec; + TPOINT pt2(pos); + ICOORD next_gradient; + ComputeGradient(data, wpl, pos.x(), height - pos.y(), width, height, + &next_gradient); + // Use the sum of the prev and next as the working gradient. + ICOORD gradient = prev_gradient + next_gradient; + // best_diff will be manipulated to be always positive. + int best_diff = 0; + // offset will be the extrapolation of the location of the greyscale + // threshold from the edge with the largest difference, relative to the + // location of the binary edge. + int offset = 0; + if (pt1.y == pt2.y && abs(gradient.y()) * 2 >= abs(gradient.x())) { + // Horizontal step. diff_sign == 1 indicates black above. + int diff_sign = (pt1.x > pt2.x) == negative ? 1 : -1; + int x = MIN(pt1.x, pt2.x); + int y = height - pt1.y; + int best_sum = 0; + int best_y = y; + EvaluateVerticalDiff(data, wpl, diff_sign, x, y, height, + &best_diff, &best_sum, &best_y); + // Find the strongest edge. + int test_y = y; + do { + ++test_y; + } while (EvaluateVerticalDiff(data, wpl, diff_sign, x, test_y, height, + &best_diff, &best_sum, &best_y)); + test_y = y; + do { + --test_y; + } while (EvaluateVerticalDiff(data, wpl, diff_sign, x, test_y, height, + &best_diff, &best_sum, &best_y)); + offset = diff_sign * (best_sum / 2 - threshold) + + (y - best_y) * best_diff; + } else if (pt1.x == pt2.x && abs(gradient.x()) * 2 >= abs(gradient.y())) { + // Vertical step. diff_sign == 1 indicates black on the left. + int diff_sign = (pt1.y > pt2.y) == negative ? 1 : -1; + int x = pt1.x; + int y = height - MAX(pt1.y, pt2.y); + const l_uint32* line = pixGetData(pix) + y * wpl; + int best_sum = 0; + int best_x = x; + EvaluateHorizontalDiff(line, diff_sign, x, width, + &best_diff, &best_sum, &best_x); + // Find the strongest edge. + int test_x = x; + do { + ++test_x; + } while (EvaluateHorizontalDiff(line, diff_sign, test_x, width, + &best_diff, &best_sum, &best_x)); + test_x = x; + do { + --test_x; + } while (EvaluateHorizontalDiff(line, diff_sign, test_x, width, + &best_diff, &best_sum, &best_x)); + offset = diff_sign * (threshold - best_sum / 2) + + (best_x - x) * best_diff; + } + offsets[s].offset_numerator = + static_cast(ClipToRange(offset, -MAX_INT8, MAX_INT8)); + offsets[s].pixel_diff = static_cast(ClipToRange(best_diff, 0 , + MAX_UINT8)); + if (negative) gradient = -gradient; + // Compute gradient angle quantized to 256 directions, rotated by 64 (pi/2) + // to convert from gradient direction to edge direction. + offsets[s].direction = + Modulo(FCOORD::binary_angle_plus_pi(gradient.angle()) + 64, 256); + prev_gradient = next_gradient; + } +} + +/** + * Adds sub-pixel resolution EdgeOffsets for the outline using only + * a binary image source. + * + * Runs a sliding window of 5 edge steps over the outline, maintaining a count + * of the number of steps in each of the 4 directions in the window, and a + * sum of the x or y position of each step (as appropriate to its direction.) + * Ignores single-count steps EXCEPT the sharp U-turn and smoothes out the + * perpendicular direction. Eg + * @verbatim + * ___ ___ Chain code from the left: + * |___ ___ ___| 222122212223221232223000 + * |___| |_| Corresponding counts of each direction: + * 0 00000000000000000123 + * 1 11121111001111100000 + * 2 44434443443333343321 + * 3 00000001111111112111 + * Count of direction at center 41434143413313143313 + * Step gets used? YNYYYNYYYNYYNYNYYYyY (y= U-turn exception) + * Path redrawn showing only the used points: + * ___ ___ + * ___ ___ ___| + * ___ _ + * @endverbatim + * Sub-pixel edge position cannot be shown well with ASCII-art, but each + * horizontal step's y position is the mean of the y positions of the steps + * in the same direction in the sliding window, which makes a much smoother + * outline, without losing important detail. + */ +void C_OUTLINE::ComputeBinaryOffsets() { + delete [] offsets; + offsets = new EdgeOffset[stepcount]; + // Count of the number of steps in each direction in the sliding window. + int dir_counts[4]; + // Sum of the positions (y for a horizontal step, x for vertical) in each + // direction in the sliding window. + int pos_totals[4]; + memset(dir_counts, 0, sizeof(dir_counts)); + memset(pos_totals, 0, sizeof(pos_totals)); + ICOORD pos = start; + ICOORD tail_pos = pos; + // tail_pos is the trailing position, with the next point to be lost from + // the window. + tail_pos -= step(stepcount - 1); + tail_pos -= step(stepcount - 2); + // head_pos is the leading position, with the next point to be added to the + // window. + ICOORD head_pos = tail_pos; + // Set up the initial window with 4 points in [-2, 2) + for (int s = -2; s < 2; ++s) { + increment_step(s, 1, &head_pos, dir_counts, pos_totals); + } + for (int s = 0; s < stepcount; pos += step(s++)) { + // At step s, s in in the middle of [s-2, s+2]. + increment_step(s + 2, 1, &head_pos, dir_counts, pos_totals); + int dir_index = chain_code(s); + ICOORD step_vec = step(s); + int best_diff = 0; + int offset = 0; + // Use only steps that have a count of >=2 OR the strong U-turn with a + // single d and 2 at d-1 and 2 at d+1 (mod 4). + if (dir_counts[dir_index] >= 2 || (dir_counts[dir_index] == 1 && + dir_counts[Modulo(dir_index - 1, 4)] == 2 && + dir_counts[Modulo(dir_index + 1, 4)] == 2)) { + // Valid step direction. + best_diff = dir_counts[dir_index]; + int edge_pos = step_vec.x() == 0 ? pos.x() : pos.y(); + // The offset proposes that the actual step should be positioned at + // the mean position of the steps in the window of the same direction. + // See ASCII art above. + offset = pos_totals[dir_index] - best_diff * edge_pos; + } + offsets[s].offset_numerator = + static_cast(ClipToRange(offset, -MAX_INT8, MAX_INT8)); + offsets[s].pixel_diff = static_cast(ClipToRange(best_diff, 0 , + MAX_UINT8)); + // The direction is just the vector from start to end of the window. + FCOORD direction(head_pos.x() - tail_pos.x(), head_pos.y() - tail_pos.y()); + offsets[s].direction = direction.to_direction(); + increment_step(s - 2, -1, &tail_pos, dir_counts, pos_totals); + } +} + +/** + * Renders the outline to the given pix, with left and top being + * the coords of the upper-left corner of the pix. + */ +void C_OUTLINE::render(int left, int top, Pix* pix) const { + ICOORD pos = start; + for (int stepindex = 0; stepindex < stepcount; ++stepindex) { + ICOORD next_step = step(stepindex); + if (next_step.y() < 0) { + pixRasterop(pix, 0, top - pos.y(), pos.x() - left, 1, + PIX_NOT(PIX_DST), NULL, 0, 0); + } else if (next_step.y() > 0) { + pixRasterop(pix, 0, top - pos.y() - 1, pos.x() - left, 1, + PIX_NOT(PIX_DST), NULL, 0, 0); + } + pos += next_step; + } +} + +/** + * Renders just the outline to the given pix (no fill), with left and top + * being the coords of the upper-left corner of the pix. + * @param left coord + * @param top coord + * @param pix the pix to outline + */ +void C_OUTLINE::render_outline(int left, int top, Pix* pix) const { + ICOORD pos = start; + for (int stepindex = 0; stepindex < stepcount; ++stepindex) { + ICOORD next_step = step(stepindex); + if (next_step.y() < 0) { + pixSetPixel(pix, pos.x() - left, top - pos.y(), 1); + } else if (next_step.y() > 0) { + pixSetPixel(pix, pos.x() - left - 1, top - pos.y() - 1, 1); + } else if (next_step.x() < 0) { + pixSetPixel(pix, pos.x() - left - 1, top - pos.y(), 1); + } else if (next_step.x() > 0) { + pixSetPixel(pix, pos.x() - left, top - pos.y() - 1, 1); + } + pos += next_step; + } +} + +/** + * @name C_OUTLINE::plot + * + * Draw the outline in the given colour. + * @param window window to draw in + * @param colour colour to draw in + */ + +#ifndef GRAPHICS_DISABLED +void C_OUTLINE::plot(ScrollView* window, ScrollView::Color colour) const { + inT16 stepindex; // index to cstep + ICOORD pos; // current position + DIR128 stepdir; // direction of step + + pos = start; // current position + window->Pen(colour); + if (stepcount == 0) { + window->Rectangle(box.left(), box.top(), box.right(), box.bottom()); + return; + } + window->SetCursor(pos.x(), pos.y()); + + stepindex = 0; + while (stepindex < stepcount) { + pos += step(stepindex); // step to next + stepdir = step_dir(stepindex); + stepindex++; // count steps + // merge straight lines + while (stepindex < stepcount && + stepdir.get_dir() == step_dir(stepindex).get_dir()) { + pos += step(stepindex); + stepindex++; + } + window->DrawTo(pos.x(), pos.y()); + } +} + +/** + * Draws the outline in the given colour, normalized using the given denorm, + * making use of sub-pixel accurate information if available. + */ +void C_OUTLINE::plot_normed(const DENORM& denorm, ScrollView::Color colour, + ScrollView* window) const { + window->Pen(colour); + if (stepcount == 0) { + window->Rectangle(box.left(), box.top(), box.right(), box.bottom()); + return; + } + const DENORM* root_denorm = denorm.RootDenorm(); + ICOORD pos = start; // current position + FCOORD f_pos = sub_pixel_pos_at_index(pos, 0); + FCOORD pos_normed; + denorm.NormTransform(root_denorm, f_pos, &pos_normed); + window->SetCursor(IntCastRounded(pos_normed.x()), + IntCastRounded(pos_normed.y())); + for (int s = 0; s < stepcount; pos += step(s++)) { + int edge_weight = edge_strength_at_index(s); + if (edge_weight == 0) { + // This point has conflicting gradient and step direction, so ignore it. + continue; + } + FCOORD f_pos = sub_pixel_pos_at_index(pos, s); + FCOORD pos_normed; + denorm.NormTransform(root_denorm, f_pos, &pos_normed); + window->DrawTo(IntCastRounded(pos_normed.x()), + IntCastRounded(pos_normed.y())); + } +} +#endif + +/** + * @name C_OUTLINE::operator= + * + * Assignment - deep copy data + * @param source assign from this + */ + +C_OUTLINE& C_OUTLINE::operator=(const C_OUTLINE& source) { + box = source.box; + start = source.start; + if (steps != NULL) + free_mem(steps); + stepcount = source.stepcount; + steps = (uinT8 *) alloc_mem (step_mem()); + memmove (steps, source.steps, step_mem()); + if (!children.empty ()) + children.clear (); + children.deep_copy(&source.children, &deep_copy); + delete [] offsets; + if (source.offsets != NULL) { + offsets = new EdgeOffset[stepcount]; + memcpy(offsets, source.offsets, stepcount * sizeof(*offsets)); + } else { + offsets = NULL; + } + return *this; +} + +/** + * Helper for ComputeBinaryOffsets. Increments pos, dir_counts, pos_totals + * by the step, increment, and vertical step ? x : y position * increment + * at step s Mod stepcount respectively. Used to add or subtract the + * direction and position to/from accumulators of a small neighbourhood. + */ +void C_OUTLINE::increment_step(int s, int increment, ICOORD* pos, + int* dir_counts, int* pos_totals) const { + int step_index = Modulo(s, stepcount); + int dir_index = chain_code(step_index); + dir_counts[dir_index] += increment; + ICOORD step_vec = step(step_index); + if (step_vec.x() == 0) + pos_totals[dir_index] += pos->x() * increment; + else + pos_totals[dir_index] += pos->y() * increment; + *pos += step_vec; +} + +ICOORD C_OUTLINE::chain_step(int chaindir) { + return step_coords[chaindir % 4]; +} diff --git a/3rdparty/hgOCR/include/ccstruct/coutln.h b/3rdparty/hgOCR/include/ccstruct/coutln.h new file mode 100644 index 00000000..fd0b6736 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/coutln.h @@ -0,0 +1,291 @@ +/********************************************************************** + * File: coutln.c (Formerly: coutline.c) + * Description: Code for the C_OUTLINE class. + * Author: Ray Smith + * Created: Mon Oct 07 16:01:57 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef COUTLN_H +#define COUTLN_H + +#include "crakedge.h" +#include "mod128.h" +#include "bits16.h" +#include "rect.h" +#include "blckerr.h" +#include "scrollview.h" + +class DENORM; + +#define INTERSECTING MAX_INT16//no winding number + + //mask to get step +#define STEP_MASK 3 + +enum C_OUTLINE_FLAGS +{ + COUT_INVERSE //White on black blob +}; + +// Simple struct to hold the 3 values needed to compute a more precise edge +// position and direction. The offset_numerator is the difference between the +// grey threshold and the mean pixel value. pixel_diff is the difference between +// the pixels in the edge. Consider the following row of pixels: p1 p2 p3 p4 p5 +// Say the image was thresholded at threshold t, making p1, p2, p3 black +// and p4, p5 white (p1, p2, p3 < t, and p4, p5 >= t), but suppose that +// max(p[i+1] - p[i]) is p3 - p2. Then the extrapolated position of the edge, +// based on the maximum gradient, is at the crack between p2 and p3 plus the +// offset (t - (p2+p3)/2)/(p3 - p2). We store the pixel difference p3-p2 +// denominator in pixel_diff and the offset numerator, relative to the original +// binary edge (t - (p2+p3)/2) - (p3 -p2) in offset_numerator. +// The sign of offset_numerator and pixel_diff are manipulated to ensure +// that the pixel_diff, which will be used as a weight, is always positive. +// The direction stores the quantized feature direction for the given step +// computed from the edge gradient. (Using binary_angle_plus_pi.) +// If the pixel_diff is zero, it means that the direction of the gradient +// is in conflict with the step direction, so this step is to be ignored. +struct EdgeOffset { + inT8 offset_numerator; + uinT8 pixel_diff; + uinT8 direction; +}; + +class DLLSYM C_OUTLINE; //forward declaration +struct Pix; + +ELISTIZEH (C_OUTLINE) +class DLLSYM C_OUTLINE:public ELIST_LINK { + public: + C_OUTLINE() { //empty constructor + steps = NULL; + offsets = NULL; + } + C_OUTLINE( //constructor + CRACKEDGE *startpt, //from edge detector + ICOORD bot_left, //bounding box //length of loop + ICOORD top_right, + inT16 length); + C_OUTLINE(ICOORD startpt, //start of loop + DIR128 *new_steps, //steps in loop + inT16 length); //length of loop + //outline to copy + C_OUTLINE(C_OUTLINE *srcline, FCOORD rotation); //and rotate + + // Build a fake outline, given just a bounding box and append to the list. + static void FakeOutline(const TBOX& box, C_OUTLINE_LIST* outlines); + + ~C_OUTLINE () { //destructor + if (steps != NULL) + free_mem(steps); + steps = NULL; + delete [] offsets; + } + + BOOL8 flag( //test flag + C_OUTLINE_FLAGS mask) const { //flag to test + return flags.bit (mask); + } + void set_flag( //set flag value + C_OUTLINE_FLAGS mask, //flag to test + BOOL8 value) { //value to set + flags.set_bit (mask, value); + } + + C_OUTLINE_LIST *child() { //get child list + return &children; + } + + //access function + const TBOX &bounding_box() const { + return box; + } + void set_step( //set a step + inT16 stepindex, //index of step + inT8 stepdir) { //chain code + int shift = stepindex%4 * 2; + uinT8 mask = 3 << shift; + steps[stepindex/4] = ((stepdir << shift) & mask) | + (steps[stepindex/4] & ~mask); + //squeeze 4 into byte + } + void set_step( //set a step + inT16 stepindex, //index of step + DIR128 stepdir) { //direction + //clean it + inT8 chaindir = stepdir.get_dir() >> (DIRBITS - 2); + //difference + set_step(stepindex, chaindir); + //squeeze 4 into byte + } + + inT32 pathlength() const { //get path length + return stepcount; + } + // Return step at a given index as a DIR128. + DIR128 step_dir(int index) const { + return DIR128((inT16)(((steps[index/4] >> (index%4 * 2)) & STEP_MASK) << + (DIRBITS - 2))); + } + // Return the step vector for the given outline position. + ICOORD step(int index) const { // index of step + return step_coords[chain_code(index)]; + } + // get start position + const ICOORD &start_pos() const { + return start; + } + // Returns the position at the given index on the outline. + // NOT to be used lightly, as it has to iterate the outline to find out. + ICOORD position_at_index(int index) const { + ICOORD pos = start; + for (int i = 0; i < index; ++i) + pos += step(i); + return pos; + } + // Returns the sub-pixel accurate position given the integer position pos + // at the given index on the outline. pos may be a return value of + // position_at_index, or computed by repeatedly adding step to the + // start_pos() in the usual way. + FCOORD sub_pixel_pos_at_index(const ICOORD& pos, int index) const { + const ICOORD& step_to_next(step(index)); + FCOORD f_pos(pos.x() + step_to_next.x() / 2.0f, + pos.y() + step_to_next.y() / 2.0f); + if (offsets != NULL && offsets[index].pixel_diff > 0) { + float offset = offsets[index].offset_numerator; + offset /= offsets[index].pixel_diff; + if (step_to_next.x() != 0) + f_pos.set_y(f_pos.y() + offset); + else + f_pos.set_x(f_pos.x() + offset); + } + return f_pos; + } + // Returns the step direction for the given index or -1 if there is none. + int direction_at_index(int index) const { + if (offsets != NULL && offsets[index].pixel_diff > 0) + return offsets[index].direction; + return -1; + } + // Returns the edge strength for the given index. + // If there are no recorded edge strengths, returns 1 (assuming the image + // is binary). Returns 0 if the gradient direction conflicts with the + // step direction, indicating that this position could be skipped. + int edge_strength_at_index(int index) const { + if (offsets != NULL) + return offsets[index].pixel_diff; + return 1; + } + // Return the step as a chain code (0-3) related to the standard feature + // direction of binary_angle_plus_pi by: + // chain_code * 64 = feature direction. + int chain_code(int index) const { // index of step + return (steps[index / 4] >> (index % 4 * 2)) & STEP_MASK; + } + + inT32 area() const; // Returns area of self and 1st level children. + inT32 perimeter() const; // Total perimeter of self and 1st level children. + inT32 outer_area() const; // Returns area of self only. + inT32 count_transitions( //count maxima + inT32 threshold); //size threshold + + BOOL8 operator< ( //containment test + const C_OUTLINE & other) const; + BOOL8 operator> ( //containment test + C_OUTLINE & other) const + { + return other < *this; //use the < to do it + } + inT16 winding_number( //get winding number + ICOORD testpt) const; //around this point + //get direction + inT16 turn_direction() const; + void reverse(); //reverse direction + + void move( // reposition outline + const ICOORD vec); // by vector + + // Returns true if *this and its children are legally nested. + // The outer area of a child should have the opposite sign to the + // parent. If not, it means we have discarded an outline in between + // (probably due to excessive length). + bool IsLegallyNested() const; + + // If this outline is smaller than the given min_size, delete this and + // remove from its list, via *it, after checking that *it points to this. + // Otherwise, if any children of this are too small, delete them. + // On entry, *it must be an iterator pointing to this. If this gets deleted + // then this is extracted from *it, so an iteration can continue. + void RemoveSmallRecursive(int min_size, C_OUTLINE_IT* it); + + // Adds sub-pixel resolution EdgeOffsets for the outline if the supplied + // pix is 8-bit. Does nothing otherwise. + void ComputeEdgeOffsets(int threshold, Pix* pix); + // Adds sub-pixel resolution EdgeOffsets for the outline using only + // a binary image source. + void ComputeBinaryOffsets(); + + // Renders the outline to the given pix, with left and top being + // the coords of the upper-left corner of the pix. + void render(int left, int top, Pix* pix) const; + + // Renders just the outline to the given pix (no fill), with left and top + // being the coords of the upper-left corner of the pix. + void render_outline(int left, int top, Pix* pix) const; + + #ifndef GRAPHICS_DISABLED + void plot( //draw one + ScrollView* window, //window to draw in + ScrollView::Color colour) const; //colour to draw it + // Draws the outline in the given colour, normalized using the given denorm, + // making use of sub-pixel accurate information if available. + void plot_normed(const DENORM& denorm, ScrollView::Color colour, + ScrollView* window) const; + #endif // GRAPHICS_DISABLED + + C_OUTLINE& operator=(const C_OUTLINE& source); + + static C_OUTLINE* deep_copy(const C_OUTLINE* src) { + C_OUTLINE* outline = new C_OUTLINE; + *outline = *src; + return outline; + } + + static ICOORD chain_step(int chaindir); + + // The maximum length of any outline. The stepcount is stored as 16 bits, + // but it is probably not a good idea to increase this constant by much + // and switch to 32 bits, as it plays an important role in keeping huge + // outlines invisible, which prevents bad speed behavior. + static const int kMaxOutlineLength = 16000; + + private: + // Helper for ComputeBinaryOffsets. Increments pos, dir_counts, pos_totals + // by the step, increment, and vertical step ? x : y position * increment + // at step s Mod stepcount respectively. Used to add or subtract the + // direction and position to/from accumulators of a small neighbourhood. + void increment_step(int s, int increment, ICOORD* pos, int* dir_counts, + int* pos_totals) const; + int step_mem() const { return (stepcount+3) / 4; } + + TBOX box; // bounding box + ICOORD start; // start coord + inT16 stepcount; // no of steps + BITS16 flags; // flags about outline + uinT8 *steps; // step array + EdgeOffset* offsets; // Higher precision edge. + C_OUTLINE_LIST children; // child elements + static ICOORD step_coords[4]; +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/crakedge.h b/3rdparty/hgOCR/include/ccstruct/crakedge.h new file mode 100644 index 00000000..37729b41 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/crakedge.h @@ -0,0 +1,37 @@ +/********************************************************************** + * File: crakedge.h (Formerly: crkedge.h) + * Description: Sturctures for the Crack following edge detector. + * Author: Ray Smith + * Created: Fri Mar 22 16:06:38 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef CRAKEDGE_H +#define CRAKEDGE_H + +#include "points.h" +#include "mod128.h" + +class CRACKEDGE { + public: + CRACKEDGE() {} + + ICOORD pos; /*position of crack */ + inT8 stepx; //edge step + inT8 stepy; + inT8 stepdir; //chaincode + CRACKEDGE *prev; /*previous point */ + CRACKEDGE *next; /*next point */ +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/detlinefit.cpp b/3rdparty/hgOCR/include/ccstruct/detlinefit.cpp new file mode 100644 index 00000000..2540925f --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/detlinefit.cpp @@ -0,0 +1,295 @@ +/////////////////////////////////////////////////////////////////////// +// File: detlinefit.cpp +// Description: Deterministic least median squares line fitting. +// Author: Ray Smith +// Created: Thu Feb 28 14:45:01 PDT 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "detlinefit.h" +#include "statistc.h" +#include "ndminx.h" +#include "tprintf.h" + +namespace tesseract { + +// The number of points to consider at each end. +const int kNumEndPoints = 3; +// The minimum number of points at which to switch to number of points +// for badly fitted lines. +// To ensure a sensible error metric, kMinPointsForErrorCount should be at +// least kMaxRealDistance / (1 - %ile) where %ile is the fractile used in +// ComputeUpperQuartileError. +const int kMinPointsForErrorCount = 16; +// The maximum real distance to use before switching to number of +// mis-fitted points, which will get square-rooted for true distance. +const int kMaxRealDistance = 2.0; + +DetLineFit::DetLineFit() : square_length_(0.0) { +} + +DetLineFit::~DetLineFit() { +} + +// Delete all Added points. +void DetLineFit::Clear() { + pts_.clear(); + distances_.clear(); +} + +// Add a new point. Takes a copy - the pt doesn't need to stay in scope. +void DetLineFit::Add(const ICOORD& pt) { + pts_.push_back(PointWidth(pt, 0)); +} +// Associates a half-width with the given point if a point overlaps the +// previous point by more than half the width, and its distance is further +// than the previous point, then the more distant point is ignored in the +// distance calculation. Useful for ignoring i dots and other diacritics. +void DetLineFit::Add(const ICOORD& pt, int halfwidth) { + pts_.push_back(PointWidth(pt, halfwidth)); +} + +// Fits a line to the points, ignoring the skip_first initial points and the +// skip_last final points, returning the fitted line as a pair of points, +// and the upper quartile error. +double DetLineFit::Fit(int skip_first, int skip_last, + ICOORD* pt1, ICOORD* pt2) { + // Do something sensible with no points. + if (pts_.empty()) { + pt1->set_x(0); + pt1->set_y(0); + *pt2 = *pt1; + return 0.0; + } + // Count the points and find the first and last kNumEndPoints. + int pt_count = pts_.size(); + ICOORD* starts[kNumEndPoints]; + if (skip_first >= pt_count) skip_first = pt_count - 1; + int start_count = 0; + int end_i = MIN(skip_first + kNumEndPoints, pt_count); + for (int i = skip_first; i < end_i; ++i) { + starts[start_count++] = &pts_[i].pt; + } + ICOORD* ends[kNumEndPoints]; + if (skip_last >= pt_count) skip_last = pt_count - 1; + int end_count = 0; + end_i = MAX(0, pt_count - kNumEndPoints - skip_last); + for (int i = pt_count - 1 - skip_last; i >= end_i; --i) { + ends[end_count++] = &pts_[i].pt; + } + // 1 or 2 points need special treatment. + if (pt_count <= 2) { + *pt1 = *starts[0]; + if (pt_count > 1) + *pt2 = *ends[0]; + else + *pt2 = *pt1; + return 0.0; + } + // Although with between 2 and 2*kNumEndPoints-1 points, there will be + // overlap in the starts, ends sets, this is OK and taken care of by the + // if (*start != *end) test below, which also tests for equal input points. + double best_uq = -1.0; + // Iterate each pair of points and find the best fitting line. + for (int i = 0; i < start_count; ++i) { + ICOORD* start = starts[i]; + for (int j = 0; j < end_count; ++j) { + ICOORD* end = ends[j]; + if (*start != *end) { + ComputeDistances(*start, *end); + // Compute the upper quartile error from the line. + double dist = EvaluateLineFit(); + if (dist < best_uq || best_uq < 0.0) { + best_uq = dist; + *pt1 = *start; + *pt2 = *end; + } + } + } + } + // Finally compute the square root to return the true distance. + return best_uq > 0.0 ? sqrt(best_uq) : best_uq; +} + +// Constrained fit with a supplied direction vector. Finds the best line_pt, +// that is one of the supplied points having the median cross product with +// direction, ignoring points that have a cross product outside of the range +// [min_dist, max_dist]. Returns the resulting error metric using the same +// reduced set of points. +// *Makes use of floating point arithmetic* +double DetLineFit::ConstrainedFit(const FCOORD& direction, + double min_dist, double max_dist, + bool debug, ICOORD* line_pt) { + ComputeConstrainedDistances(direction, min_dist, max_dist); + // Do something sensible with no points or computed distances. + if (pts_.empty() || distances_.empty()) { + line_pt->set_x(0); + line_pt->set_y(0); + return 0.0; + } + int median_index = distances_.choose_nth_item(distances_.size() / 2); + *line_pt = distances_[median_index].data; + if (debug) { + tprintf("Constrained fit to dir %g, %g = %d, %d :%d distances:\n", + direction.x(), direction.y(), + line_pt->x(), line_pt->y(), distances_.size()); + for (int i = 0; i < distances_.size(); ++i) { + tprintf("%d: %d, %d -> %g\n", i, distances_[i].data.x(), + distances_[i].data.y(), distances_[i].key); + } + tprintf("Result = %d\n", median_index); + } + // Center distances on the fitted point. + double dist_origin = direction * *line_pt; + for (int i = 0; i < distances_.size(); ++i) { + distances_[i].key -= dist_origin; + } + return sqrt(EvaluateLineFit()); +} + +// Returns true if there were enough points at the last call to Fit or +// ConstrainedFit for the fitted points to be used on a badly fitted line. +bool DetLineFit::SufficientPointsForIndependentFit() const { + return distances_.size() >= kMinPointsForErrorCount; +} + +// Backwards compatible fit returning a gradient and constant. +// Deprecated. Prefer Fit(ICOORD*, ICOORD*) where possible, but use this +// function in preference to the LMS class. +double DetLineFit::Fit(float* m, float* c) { + ICOORD start, end; + double error = Fit(&start, &end); + if (end.x() != start.x()) { + *m = static_cast(end.y() - start.y()) / (end.x() - start.x()); + *c = start.y() - *m * start.x(); + } else { + *m = 0.0f; + *c = 0.0f; + } + return error; +} + +// Backwards compatible constrained fit with a supplied gradient. +// Deprecated. Use ConstrainedFit(const FCOORD& direction) where possible +// to avoid potential difficulties with infinite gradients. +double DetLineFit::ConstrainedFit(double m, float* c) { + // Do something sensible with no points. + if (pts_.empty()) { + *c = 0.0f; + return 0.0; + } + double cos = 1.0 / sqrt(1.0 + m * m); + FCOORD direction(cos, m * cos); + ICOORD line_pt; + double error = ConstrainedFit(direction, -MAX_FLOAT32, MAX_FLOAT32, false, + &line_pt); + *c = line_pt.y() - line_pt.x() * m; + return error; +} + +// Computes and returns the squared evaluation metric for a line fit. +double DetLineFit::EvaluateLineFit() { + // Compute the upper quartile error from the line. + double dist = ComputeUpperQuartileError(); + if (distances_.size() >= kMinPointsForErrorCount && + dist > kMaxRealDistance * kMaxRealDistance) { + // Use the number of mis-fitted points as the error metric, as this + // gives a better measure of fit for badly fitted lines where more + // than a quarter are badly fitted. + double threshold = kMaxRealDistance * sqrt(square_length_); + dist = NumberOfMisfittedPoints(threshold); + } + return dist; +} + +// Computes the absolute error distances of the points from the line, +// and returns the squared upper-quartile error distance. +double DetLineFit::ComputeUpperQuartileError() { + int num_errors = distances_.size(); + if (num_errors == 0) return 0.0; + // Get the absolute values of the errors. + for (int i = 0; i < num_errors; ++i) { + if (distances_[i].key < 0) distances_[i].key = -distances_[i].key; + } + // Now get the upper quartile distance. + int index = distances_.choose_nth_item(3 * num_errors / 4); + double dist = distances_[index].key; + // The true distance is the square root of the dist squared / square_length. + // Don't bother with the square root. Just return the square distance. + return square_length_ > 0.0 ? dist * dist / square_length_ : 0.0; +} + +// Returns the number of sample points that have an error more than threshold. +int DetLineFit::NumberOfMisfittedPoints(double threshold) const { + int num_misfits = 0; + int num_dists = distances_.size(); + // Get the absolute values of the errors. + for (int i = 0; i < num_dists; ++i) { + if (distances_[i].key > threshold) + ++num_misfits; + } + return num_misfits; +} + +// Computes all the cross product distances of the points from the line, +// storing the actual (signed) cross products in distances. +// Ignores distances of points that are further away than the previous point, +// and overlaps the previous point by at least half. +void DetLineFit::ComputeDistances(const ICOORD& start, const ICOORD& end) { + distances_.truncate(0); + ICOORD line_vector = end; + line_vector -= start; + square_length_ = line_vector.sqlength(); + int line_length = IntCastRounded(sqrt(square_length_)); + // Compute the distance of each point from the line. + int prev_abs_dist = 0; + int prev_dot = 0; + for (int i = 0; i < pts_.size(); ++i) { + ICOORD pt_vector = pts_[i].pt; + pt_vector -= start; + int dot = line_vector % pt_vector; + // Compute |line_vector||pt_vector|sin(angle between) + int dist = line_vector * pt_vector; + int abs_dist = dist < 0 ? -dist : dist; + if (abs_dist > prev_abs_dist && i > 0) { + // Ignore this point if it overlaps the previous one. + int separation = abs(dot - prev_dot); + if (separation < line_length * pts_[i].halfwidth || + separation < line_length * pts_[i - 1].halfwidth) + continue; + } + distances_.push_back(DistPointPair(dist, pts_[i].pt)); + prev_abs_dist = abs_dist; + prev_dot = dot; + } +} + +// Computes all the cross product distances of the points perpendicular to +// the given direction, ignoring distances outside of the give distance range, +// storing the actual (signed) cross products in distances_. +void DetLineFit::ComputeConstrainedDistances(const FCOORD& direction, + double min_dist, double max_dist) { + distances_.truncate(0); + square_length_ = direction.sqlength(); + // Compute the distance of each point from the line. + for (int i = 0; i < pts_.size(); ++i) { + FCOORD pt_vector = pts_[i].pt; + // Compute |line_vector||pt_vector|sin(angle between) + double dist = direction * pt_vector; + if (min_dist <= dist && dist <= max_dist) + distances_.push_back(DistPointPair(dist, pts_[i].pt)); + } +} + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccstruct/detlinefit.h b/3rdparty/hgOCR/include/ccstruct/detlinefit.h new file mode 100644 index 00000000..12afbb79 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/detlinefit.h @@ -0,0 +1,164 @@ +/////////////////////////////////////////////////////////////////////// +// File: detlinefit.h +// Description: Deterministic least upper-quartile squares line fitting. +// Author: Ray Smith +// Created: Thu Feb 28 14:35:01 PDT 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCSTRUCT_DETLINEFIT_H_ +#define TESSERACT_CCSTRUCT_DETLINEFIT_H_ + +#include "genericvector.h" +#include "kdpair.h" +#include "points.h" + +namespace tesseract { + +// This class fits a line to a set of ICOORD points. +// There is no restriction on the direction of the line, as it +// uses a vector method, ie no concern over infinite gradients. +// The fitted line has the least upper quartile of squares of perpendicular +// distances of all source points from the line, subject to the constraint +// that the line is made from one of the pairs of [{p1,p2,p3},{pn-2, pn-1, pn}] +// i.e. the 9 combinations of one of the first 3 and last 3 points. +// A fundamental assumption of this algorithm is that one of the first 3 and +// one of the last 3 points are near the best line fit. +// The points must be Added in line order for the algorithm to work properly. +// No floating point calculations are needed* to make an accurate fit, +// and no random numbers are needed** so the algorithm is deterministic, +// architecture-stable, and compiler-stable as well as stable to minor +// changes in the input. +// *A single floating point division is used to compute each line's distance. +// This is unlikely to result in choice of a different line, but if it does, +// it would be easy to replace with a 64 bit integer calculation. +// **Random numbers are used in the nth_item function, but the worst +// non-determinism that can result is picking a different result among equals, +// and that wouldn't make any difference to the end-result distance, so the +// randomness does not affect the determinism of the algorithm. The random +// numbers are only there to guarantee average linear time. +// Fitting time is linear, but with a high constant, as it tries 9 different +// lines and computes the distance of all points each time. +// This class is aimed at replacing the LLSQ (linear least squares) and +// LMS (least median of squares) classes that are currently used for most +// of the line fitting in Tesseract. +class DetLineFit { + public: + DetLineFit(); + ~DetLineFit(); + + // Delete all Added points. + void Clear(); + + // Adds a new point. Takes a copy - the pt doesn't need to stay in scope. + // Add must be called on points in sequence along the line. + void Add(const ICOORD& pt); + // Associates a half-width with the given point if a point overlaps the + // previous point by more than half the width, and its distance is further + // than the previous point, then the more distant point is ignored in the + // distance calculation. Useful for ignoring i dots and other diacritics. + void Add(const ICOORD& pt, int halfwidth); + + // Fits a line to the points, returning the fitted line as a pair of + // points, and the upper quartile error. + double Fit(ICOORD* pt1, ICOORD* pt2) { + return Fit(0, 0, pt1, pt2); + } + // Fits a line to the points, ignoring the skip_first initial points and the + // skip_last final points, returning the fitted line as a pair of points, + // and the upper quartile error. + double Fit(int skip_first, int skip_last, ICOORD* pt1, ICOORD* pt2); + + // Constrained fit with a supplied direction vector. Finds the best line_pt, + // that is one of the supplied points having the median cross product with + // direction, ignoring points that have a cross product outside of the range + // [min_dist, max_dist]. Returns the resulting error metric using the same + // reduced set of points. + // *Makes use of floating point arithmetic* + double ConstrainedFit(const FCOORD& direction, + double min_dist, double max_dist, + bool debug, ICOORD* line_pt); + + // Returns true if there were enough points at the last call to Fit or + // ConstrainedFit for the fitted points to be used on a badly fitted line. + bool SufficientPointsForIndependentFit() const; + + // Backwards compatible fit returning a gradient and constant. + // Deprecated. Prefer Fit(ICOORD*, ICOORD*) where possible, but use this + // function in preference to the LMS class. + double Fit(float* m, float* c); + + // Backwards compatible constrained fit with a supplied gradient. + // Deprecated. Use ConstrainedFit(const FCOORD& direction) where possible + // to avoid potential difficulties with infinite gradients. + double ConstrainedFit(double m, float* c); + + private: + // Simple struct to hold an ICOORD point and a halfwidth representing half + // the "width" (supposedly approximately parallel to the direction of the + // line) of each point, such that distant points can be discarded when they + // overlap nearer points. (Think i dot and other diacritics or noise.) + struct PointWidth { + PointWidth() : pt(ICOORD(0, 0)), halfwidth(0) {} + PointWidth(const ICOORD& pt0, int halfwidth0) + : pt(pt0), halfwidth(halfwidth0) {} + + ICOORD pt; + int halfwidth; + }; + // Type holds the distance of each point from the fitted line and the point + // itself. Use of double allows integer distances from ICOORDs to be stored + // exactly, and also the floating point results from ConstrainedFit. + typedef KDPairInc DistPointPair; + + // Computes and returns the squared evaluation metric for a line fit. + double EvaluateLineFit(); + + // Computes the absolute values of the precomputed distances_, + // and returns the squared upper-quartile error distance. + double ComputeUpperQuartileError(); + + // Returns the number of sample points that have an error more than threshold. + int NumberOfMisfittedPoints(double threshold) const; + + // Computes all the cross product distances of the points from the line, + // storing the actual (signed) cross products in distances_. + // Ignores distances of points that are further away than the previous point, + // and overlaps the previous point by at least half. + void ComputeDistances(const ICOORD& start, const ICOORD& end); + + // Computes all the cross product distances of the points perpendicular to + // the given direction, ignoring distances outside of the give distance range, + // storing the actual (signed) cross products in distances_. + void ComputeConstrainedDistances(const FCOORD& direction, + double min_dist, double max_dist); + + // Stores all the source points in the order they were given and their + // halfwidths, if any. + GenericVector pts_; + // Stores the computed perpendicular distances of (some of) the pts_ from a + // given vector (assuming it goes through the origin, making it a line). + // Since the distances may be a subset of the input points, and get + // re-ordered by the nth_item function, the original point is stored + // along side the distance. + GenericVector distances_; // Distances of points. + // The squared length of the vector used to compute distances_. + double square_length_; +}; + +} // namespace tesseract. + +#endif // TESSERACT_CCSTRUCT_DETLINEFIT_H_ + + diff --git a/3rdparty/hgOCR/include/ccstruct/dppoint.cpp b/3rdparty/hgOCR/include/ccstruct/dppoint.cpp new file mode 100644 index 00000000..7325c9cb --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/dppoint.cpp @@ -0,0 +1,98 @@ +/********************************************************************** + * File: dppoint.cpp + * Description: Simple generic dynamic programming class. + * Author: Ray Smith + * Created: Wed Mar 25 19:08:01 PDT 2009 + * + * (C) Copyright 2009, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "dppoint.h" +#include "tprintf.h" + +namespace tesseract { + +// Solve the dynamic programming problem for the given array of points, with +// the given size and cost function. +// Steps backwards are limited to being between min_step and max_step +// inclusive. +// The return value is the tail of the best path. +DPPoint* DPPoint::Solve(int min_step, int max_step, bool debug, + CostFunc cost_func, int size, DPPoint* points) { + if (size <= 0 || max_step < min_step || min_step >= size) + return NULL; // Degenerate, but not necessarily an error. + ASSERT_HOST(min_step > 0); // Infinite loop possible if this is not true. + if (debug) + tprintf("min = %d, max=%d\n", + min_step, max_step); + // Evaluate the total cost at each point. + for (int i = 0; i < size; ++i) { + for (int offset = min_step; offset <= max_step; ++offset) { + DPPoint* prev = offset <= i ? points + i - offset : NULL; + inT64 new_cost = (points[i].*cost_func)(prev); + if (points[i].best_prev_ != NULL && offset > min_step * 2 && + new_cost > points[i].total_cost_) + break; // Find only the first minimum if going over twice the min. + } + points[i].total_cost_ += points[i].local_cost_; + if (debug) { + tprintf("At point %d, local cost=%d, total_cost=%d, steps=%d\n", + i, points[i].local_cost_, points[i].total_cost_, + points[i].total_steps_); + } + } + // Now find the end of the best path and return it. + int best_cost = points[size - 1].total_cost_; + int best_end = size - 1; + for (int end = best_end - 1; end >= size - min_step; --end) { + int cost = points[end].total_cost_; + if (cost < best_cost) { + best_cost = cost; + best_end = end; + } + } + return points + best_end; +} + +// A CostFunc that takes the variance of step into account in the cost. +inT64 DPPoint::CostWithVariance(const DPPoint* prev) { + if (prev == NULL || prev == this) { + UpdateIfBetter(0, 1, NULL, 0, 0, 0); + return 0; + } + + int delta = this - prev; + inT32 n = prev->n_ + 1; + inT32 sig_x = prev->sig_x_ + delta; + inT64 sig_xsq = prev->sig_xsq_ + delta * delta; + inT64 cost = (sig_xsq - sig_x * sig_x / n) / n; + cost += prev->total_cost_; + UpdateIfBetter(cost, prev->total_steps_ + 1, prev, n, sig_x, sig_xsq); + return cost; +} + +// Update the other members if the cost is lower. +void DPPoint::UpdateIfBetter(inT64 cost, inT32 steps, const DPPoint* prev, + inT32 n, inT32 sig_x, inT64 sig_xsq) { + if (cost < total_cost_) { + total_cost_ = cost; + total_steps_ = steps; + best_prev_ = prev; + n_ = n; + sig_x_ = sig_x; + sig_xsq_ = sig_xsq; + } +} + +} // namespace tesseract. + diff --git a/3rdparty/hgOCR/include/ccstruct/dppoint.h b/3rdparty/hgOCR/include/ccstruct/dppoint.h new file mode 100644 index 00000000..fd87bb91 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/dppoint.h @@ -0,0 +1,102 @@ +/********************************************************************** + * File: dppoint.h + * Description: Simple generic dynamic programming class. + * Author: Ray Smith + * Created: Wed Mar 25 18:57:01 PDT 2009 + * + * (C) Copyright 2009, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCSTRUCT_DPPOINT_H__ +#define TESSERACT_CCSTRUCT_DPPOINT_H__ + +#include "host.h" + +namespace tesseract { + +// A simple class to provide a dynamic programming solution to a class of +// 1st-order problems in which the cost is dependent only on the current +// step and the best cost to that step, with a possible special case +// of using the variance of the steps, and only the top choice is required. +// Useful for problems such as finding the optimal cut points in a fixed-pitch +// (vertical or horizontal) situation. +// Skeletal Example: +// DPPoint* array = new DPPoint[width]; +// for (int i = 0; i < width; i++) { +// array[i].AddLocalCost(cost_at_i) +// } +// DPPoint* best_end = DPPoint::Solve(..., array); +// while (best_end != NULL) { +// int cut_index = best_end - array; +// best_end = best_end->best_prev(); +// } +// delete [] array; +class DPPoint { + public: + // The cost function evaluates the total cost at this (excluding this's + // local_cost) and if it beats this's total_cost, then + // replace the appropriate values in this. + typedef inT64 (DPPoint::*CostFunc)(const DPPoint* prev); + + DPPoint() + : local_cost_(0), total_cost_(MAX_INT32), total_steps_(1), best_prev_(NULL), + n_(0), sig_x_(0), sig_xsq_(0) { + } + + // Solve the dynamic programming problem for the given array of points, with + // the given size and cost function. + // Steps backwards are limited to being between min_step and max_step + // inclusive. + // The return value is the tail of the best path. + static DPPoint* Solve(int min_step, int max_step, bool debug, + CostFunc cost_func, int size, DPPoint* points); + + // A CostFunc that takes the variance of step into account in the cost. + inT64 CostWithVariance(const DPPoint* prev); + + // Accessors. + int total_cost() const { + return total_cost_; + } + int Pathlength() const { + return total_steps_; + } + const DPPoint* best_prev() const { + return best_prev_; + } + void AddLocalCost(int new_cost) { + local_cost_ += new_cost; + } + + private: + // Code common to different cost functions. + + // Update the other members if the cost is lower. + void UpdateIfBetter(inT64 cost, inT32 steps, const DPPoint* prev, + inT32 n, inT32 sig_x, inT64 sig_xsq); + + inT32 local_cost_; // Cost of this point on its own. + inT32 total_cost_; // Sum of all costs in best path to here. + // During cost calculations local_cost is excluded. + inT32 total_steps_; // Number of steps in best path to here. + const DPPoint* best_prev_; // Pointer to prev point in best path from here. + // Information for computing the variance part of the cost. + inT32 n_; // Number of steps in best path to here for variance. + inT32 sig_x_; // Sum of step sizes for computing variance. + inT64 sig_xsq_; // Sum of squares of steps for computing variance. +}; + +} // namespace tesseract. + +#endif // TESSERACT_CCSTRUCT_DPPOINT_H__ + diff --git a/3rdparty/hgOCR/include/ccstruct/fontinfo.cpp b/3rdparty/hgOCR/include/ccstruct/fontinfo.cpp new file mode 100644 index 00000000..536ac280 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/fontinfo.cpp @@ -0,0 +1,262 @@ +/////////////////////////////////////////////////////////////////////// +// File: fontinfo.cpp +// Description: Font information classes abstracted from intproto.h/cpp. +// Author: rays@google.com (Ray Smith) +// Created: Wed May 18 10:39:01 PDT 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "fontinfo.h" +#include "bitvector.h" +#include "unicity_table.h" + +namespace tesseract { + +// Writes to the given file. Returns false in case of error. +bool FontInfo::Serialize(FILE* fp) const { + if (!write_info(fp, *this)) return false; + if (!write_spacing_info(fp, *this)) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool FontInfo::DeSerialize(bool swap, FILE* fp) { + if (!read_info(fp, this, swap)) return false; + if (!read_spacing_info(fp, this, swap)) return false; + return true; +} + +FontInfoTable::FontInfoTable() { + set_compare_callback(NewPermanentTessCallback(CompareFontInfo)); + set_clear_callback(NewPermanentTessCallback(FontInfoDeleteCallback)); +} + +FontInfoTable::~FontInfoTable() { +} + +// Writes to the given file. Returns false in case of error. +bool FontInfoTable::Serialize(FILE* fp) const { + return this->SerializeClasses(fp); +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool FontInfoTable::DeSerialize(bool swap, FILE* fp) { + truncate(0); + return this->DeSerializeClasses(swap, fp); +} + +// Returns true if the given set of fonts includes one with the same +// properties as font_id. +bool FontInfoTable::SetContainsFontProperties( + int font_id, const GenericVector& font_set) const { + uinT32 properties = get(font_id).properties; + for (int f = 0; f < font_set.size(); ++f) { + if (get(font_set[f].fontinfo_id).properties == properties) + return true; + } + return false; +} + +// Returns true if the given set of fonts includes multiple properties. +bool FontInfoTable::SetContainsMultipleFontProperties( + const GenericVector& font_set) const { + if (font_set.empty()) return false; + int first_font = font_set[0].fontinfo_id; + uinT32 properties = get(first_font).properties; + for (int f = 1; f < font_set.size(); ++f) { + if (get(font_set[f].fontinfo_id).properties != properties) + return true; + } + return false; +} + +// Moves any non-empty FontSpacingInfo entries from other to this. +void FontInfoTable::MoveSpacingInfoFrom(FontInfoTable* other) { + set_compare_callback(NewPermanentTessCallback(CompareFontInfo)); + set_clear_callback(NewPermanentTessCallback(FontInfoDeleteCallback)); + for (int i = 0; i < other->size(); ++i) { + GenericVector* spacing_vec = other->get(i).spacing_vec; + if (spacing_vec != NULL) { + int target_index = get_index(other->get(i)); + if (target_index < 0) { + // Bit copy the FontInfo and steal all the pointers. + push_back(other->get(i)); + other->get(i).name = NULL; + } else { + delete [] get(target_index).spacing_vec; + get(target_index).spacing_vec = other->get(i).spacing_vec; + } + other->get(i).spacing_vec = NULL; + } + } +} + +// Moves this to the target unicity table. +void FontInfoTable::MoveTo(UnicityTable* target) { + target->clear(); + target->set_compare_callback(NewPermanentTessCallback(CompareFontInfo)); + target->set_clear_callback(NewPermanentTessCallback(FontInfoDeleteCallback)); + for (int i = 0; i < size(); ++i) { + // Bit copy the FontInfo and steal all the pointers. + target->push_back(get(i)); + get(i).name = NULL; + get(i).spacing_vec = NULL; + } +} + + +// Compare FontInfo structures. +bool CompareFontInfo(const FontInfo& fi1, const FontInfo& fi2) { + // The font properties are required to be the same for two font with the same + // name, so there is no need to test them. + // Consequently, querying the table with only its font name as information is + // enough to retrieve its properties. + return strcmp(fi1.name, fi2.name) == 0; +} +// Compare FontSet structures. +bool CompareFontSet(const FontSet& fs1, const FontSet& fs2) { + if (fs1.size != fs2.size) + return false; + for (int i = 0; i < fs1.size; ++i) { + if (fs1.configs[i] != fs2.configs[i]) + return false; + } + return true; +} + +// Callbacks for GenericVector. +void FontInfoDeleteCallback(FontInfo f) { + if (f.spacing_vec != NULL) { + f.spacing_vec->delete_data_pointers(); + delete f.spacing_vec; + } + delete[] f.name; +} +void FontSetDeleteCallback(FontSet fs) { + delete[] fs.configs; +} + +/*---------------------------------------------------------------------------*/ +// Callbacks used by UnicityTable to read/write FontInfo/FontSet structures. +bool read_info(FILE* f, FontInfo* fi, bool swap) { + inT32 size; + if (fread(&size, sizeof(size), 1, f) != 1) return false; + if (swap) + Reverse32(&size); + char* font_name = new char[size + 1]; + fi->name = font_name; + if (static_cast(fread(font_name, sizeof(*font_name), size, f)) != size) + return false; + font_name[size] = '\0'; + if (fread(&fi->properties, sizeof(fi->properties), 1, f) != 1) return false; + if (swap) + Reverse32(&fi->properties); + return true; +} + +bool write_info(FILE* f, const FontInfo& fi) { + inT32 size = strlen(fi.name); + if (fwrite(&size, sizeof(size), 1, f) != 1) return false; + if (static_cast(fwrite(fi.name, sizeof(*fi.name), size, f)) != size) + return false; + if (fwrite(&fi.properties, sizeof(fi.properties), 1, f) != 1) return false; + return true; +} + +bool read_spacing_info(FILE *f, FontInfo* fi, bool swap) { + inT32 vec_size, kern_size; + if (fread(&vec_size, sizeof(vec_size), 1, f) != 1) return false; + if (swap) Reverse32(&vec_size); + ASSERT_HOST(vec_size >= 0); + if (vec_size == 0) return true; + fi->init_spacing(vec_size); + for (int i = 0; i < vec_size; ++i) { + FontSpacingInfo *fs = new FontSpacingInfo(); + if (fread(&fs->x_gap_before, sizeof(fs->x_gap_before), 1, f) != 1 || + fread(&fs->x_gap_after, sizeof(fs->x_gap_after), 1, f) != 1 || + fread(&kern_size, sizeof(kern_size), 1, f) != 1) { + delete fs; + return false; + } + if (swap) { + ReverseN(&(fs->x_gap_before), sizeof(fs->x_gap_before)); + ReverseN(&(fs->x_gap_after), sizeof(fs->x_gap_after)); + Reverse32(&kern_size); + } + if (kern_size < 0) { // indication of a NULL entry in fi->spacing_vec + delete fs; + continue; + } + if (kern_size > 0 && (!fs->kerned_unichar_ids.DeSerialize(swap, f) || + !fs->kerned_x_gaps.DeSerialize(swap, f))) { + delete fs; + return false; + } + fi->add_spacing(i, fs); + } + return true; +} + +bool write_spacing_info(FILE* f, const FontInfo& fi) { + inT32 vec_size = (fi.spacing_vec == NULL) ? 0 : fi.spacing_vec->size(); + if (fwrite(&vec_size, sizeof(vec_size), 1, f) != 1) return false; + inT16 x_gap_invalid = -1; + for (int i = 0; i < vec_size; ++i) { + FontSpacingInfo *fs = fi.spacing_vec->get(i); + inT32 kern_size = (fs == NULL) ? -1 : fs->kerned_x_gaps.size(); + if (fs == NULL) { + // Valid to have the identical fwrites. Writing invalid x-gaps. + if (fwrite(&(x_gap_invalid), sizeof(x_gap_invalid), 1, f) != 1 || + fwrite(&(x_gap_invalid), sizeof(x_gap_invalid), 1, f) != 1 || + fwrite(&kern_size, sizeof(kern_size), 1, f) != 1) { + return false; + } + } else { + if (fwrite(&(fs->x_gap_before), sizeof(fs->x_gap_before), 1, f) != 1 || + fwrite(&(fs->x_gap_after), sizeof(fs->x_gap_after), 1, f) != 1 || + fwrite(&kern_size, sizeof(kern_size), 1, f) != 1) { + return false; + } + } + if (kern_size > 0 && (!fs->kerned_unichar_ids.Serialize(f) || + !fs->kerned_x_gaps.Serialize(f))) { + return false; + } + } + return true; +} + +bool read_set(FILE* f, FontSet* fs, bool swap) { + if (fread(&fs->size, sizeof(fs->size), 1, f) != 1) return false; + if (swap) + Reverse32(&fs->size); + fs->configs = new int32_t[fs->size]; + for (int i = 0; i < fs->size; ++i) { + if (fread(&fs->configs[i], sizeof(fs->configs[i]), 1, f) != 1) return false; + if (swap) + Reverse32(&fs->configs[i]); + } + return true; +} + +bool write_set(FILE* f, const FontSet& fs) { + if (fwrite(&fs.size, sizeof(fs.size), 1, f) != 1) return false; + for (int i = 0; i < fs.size; ++i) { + if (fwrite(&fs.configs[i], sizeof(fs.configs[i]), 1, f) != 1) return false; + } + return true; +} + +} // namespace tesseract. + diff --git a/3rdparty/hgOCR/include/ccstruct/fontinfo.h b/3rdparty/hgOCR/include/ccstruct/fontinfo.h new file mode 100644 index 00000000..597a179c --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/fontinfo.h @@ -0,0 +1,191 @@ +/////////////////////////////////////////////////////////////////////// +// File: fontinfo.h +// Description: Font information classes abstracted from intproto.h/cpp. +// Author: rays@google.com (Ray Smith) +// Created: Tue May 17 17:08:01 PDT 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + + +#ifndef TESSERACT_CCSTRUCT_FONTINFO_H_ +#define TESSERACT_CCSTRUCT_FONTINFO_H_ + +#include "genericvector.h" +#include "host.h" +#include "unichar.h" + +#include + +template class UnicityTable; + +namespace tesseract { + +class BitVector; + +// Simple struct to hold a font and a score. The scores come from the low-level +// integer matcher, so they are in the uinT16 range. Fonts are an index to +// fontinfo_table. +// These get copied around a lot, so best to keep them small. +struct ScoredFont { + ScoredFont() : fontinfo_id(-1), score(0) {} + ScoredFont(int font_id, uinT16 classifier_score) + : fontinfo_id(font_id), score(classifier_score) {} + + // Index into fontinfo table, but inside the classifier, may be a shapetable + // index. + inT32 fontinfo_id; + // Raw score from the low-level classifier. + uinT16 score; +}; + +// Struct for information about spacing between characters in a particular font. +struct FontSpacingInfo { + inT16 x_gap_before; + inT16 x_gap_after; + GenericVector kerned_unichar_ids; + GenericVector kerned_x_gaps; +}; + +/* + * font_properties contains properties about boldness, italicness, fixed pitch, + * serif, fraktur + */ +struct FontInfo { + FontInfo() : name(NULL), properties(0), universal_id(0), spacing_vec(NULL) {} + ~FontInfo() {} + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + // Reserves unicharset_size spots in spacing_vec. + void init_spacing(int unicharset_size) { + spacing_vec = new GenericVector(); + spacing_vec->init_to_size(unicharset_size, NULL); + } + // Adds the given pointer to FontSpacingInfo to spacing_vec member + // (FontInfo class takes ownership of the pointer). + // Note: init_spacing should be called before calling this function. + void add_spacing(UNICHAR_ID uch_id, FontSpacingInfo *spacing_info) { + ASSERT_HOST(spacing_vec != NULL && spacing_vec->size() > uch_id); + (*spacing_vec)[uch_id] = spacing_info; + } + + // Returns the pointer to FontSpacingInfo for the given UNICHAR_ID. + const FontSpacingInfo *get_spacing(UNICHAR_ID uch_id) const { + return (spacing_vec == NULL || spacing_vec->size() <= uch_id) ? + NULL : (*spacing_vec)[uch_id]; + } + + // Fills spacing with the value of the x gap expected between the two given + // UNICHAR_IDs. Returns true on success. + bool get_spacing(UNICHAR_ID prev_uch_id, + UNICHAR_ID uch_id, + int *spacing) const { + const FontSpacingInfo *prev_fsi = this->get_spacing(prev_uch_id); + const FontSpacingInfo *fsi = this->get_spacing(uch_id); + if (prev_fsi == NULL || fsi == NULL) return false; + int i = 0; + for (; i < prev_fsi->kerned_unichar_ids.size(); ++i) { + if (prev_fsi->kerned_unichar_ids[i] == uch_id) break; + } + if (i < prev_fsi->kerned_unichar_ids.size()) { + *spacing = prev_fsi->kerned_x_gaps[i]; + } else { + *spacing = prev_fsi->x_gap_after + fsi->x_gap_before; + } + return true; + } + + bool is_italic() const { return properties & 1; } + bool is_bold() const { return (properties & 2) != 0; } + bool is_fixed_pitch() const { return (properties & 4) != 0; } + bool is_serif() const { return (properties & 8) != 0; } + bool is_fraktur() const { return (properties & 16) != 0; } + + char* name; + uinT32 properties; + // The universal_id is a field reserved for the initialization process + // to assign a unique id number to all fonts loaded for the current + // combination of languages. This id will then be returned by + // ResultIterator::WordFontAttributes. + inT32 universal_id; + // Horizontal spacing between characters (indexed by UNICHAR_ID). + GenericVector *spacing_vec; +}; + +// Every class (character) owns a FontSet that represents all the fonts that can +// render this character. +// Since almost all the characters from the same script share the same set of +// fonts, the sets are shared over multiple classes (see +// Classify::fontset_table_). Thus, a class only store an id to a set. +// Because some fonts cannot render just one character of a set, there are a +// lot of FontSet that differ only by one font. Rather than storing directly +// the FontInfo in the FontSet structure, it's better to share FontInfos among +// FontSets (Classify::fontinfo_table_). +struct FontSet { + int32_t size; + int32_t* configs; // FontInfo ids +}; + +// Class that adds a bit of functionality on top of GenericVector to +// implement a table of FontInfo that replaces UniCityTable. +// TODO(rays) change all references once all existing traineddata files +// are replaced. +class FontInfoTable : public GenericVector { + public: + FontInfoTable(); + ~FontInfoTable(); + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + // Returns true if the given set of fonts includes one with the same + // properties as font_id. + bool SetContainsFontProperties( + int font_id, const GenericVector& font_set) const; + // Returns true if the given set of fonts includes multiple properties. + bool SetContainsMultipleFontProperties( + const GenericVector& font_set) const; + + // Moves any non-empty FontSpacingInfo entries from other to this. + void MoveSpacingInfoFrom(FontInfoTable* other); + // Moves this to the target unicity table. + void MoveTo(UnicityTable* target); +}; + +// Compare FontInfo structures. +bool CompareFontInfo(const FontInfo& fi1, const FontInfo& fi2); +// Compare FontSet structures. +bool CompareFontSet(const FontSet& fs1, const FontSet& fs2); +// Deletion callbacks for GenericVector. +void FontInfoDeleteCallback(FontInfo f); +void FontSetDeleteCallback(FontSet fs); + +// Callbacks used by UnicityTable to read/write FontInfo/FontSet structures. +bool read_info(FILE* f, FontInfo* fi, bool swap); +bool write_info(FILE* f, const FontInfo& fi); +bool read_spacing_info(FILE *f, FontInfo* fi, bool swap); +bool write_spacing_info(FILE* f, const FontInfo& fi); +bool read_set(FILE* f, FontSet* fs, bool swap); +bool write_set(FILE* f, const FontSet& fs); + +} // namespace tesseract. + +#endif /* THIRD_PARTY_TESSERACT_CCSTRUCT_FONTINFO_H_ */ diff --git a/3rdparty/hgOCR/include/ccstruct/genblob.cpp b/3rdparty/hgOCR/include/ccstruct/genblob.cpp new file mode 100644 index 00000000..03ae60b9 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/genblob.cpp @@ -0,0 +1,38 @@ +/********************************************************************** + * File: genblob.cpp (Formerly gblob.c) + * Description: Generic Blob processing routines + * Author: Phil Cheatle + * Created: Mon Nov 25 10:53:26 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "genblob.h" +#include "stepblob.h" + +/********************************************************************** + * c_blob_comparator() + * + * Blob comparator used to sort a blob list so that blobs are in increasing + * order of left edge. + **********************************************************************/ + +int c_blob_comparator( // sort blobs + const void *blob1p, // ptr to ptr to blob1 + const void *blob2p // ptr to ptr to blob2 + ) { + C_BLOB *blob1 = *(C_BLOB **) blob1p; + C_BLOB *blob2 = *(C_BLOB **) blob2p; + + return blob1->bounding_box ().left () - blob2->bounding_box ().left (); +} diff --git a/3rdparty/hgOCR/include/ccstruct/genblob.h b/3rdparty/hgOCR/include/ccstruct/genblob.h new file mode 100644 index 00000000..2fb55a1a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/genblob.h @@ -0,0 +1,27 @@ +/********************************************************************** + * File: genblob.h (Formerly gblob.h) + * Description: Generic Blob processing routines + * Author: Phil Cheatle + * Created: Mon Nov 25 10:53:26 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef GENBLOB_H +#define GENBLOB_H + +// Sort function to sort blobs by ascending left edge. +int c_blob_comparator(const void *blob1p, // ptr to ptr to blob1 + const void *blob2p); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/hpdsizes.h b/3rdparty/hgOCR/include/ccstruct/hpdsizes.h new file mode 100644 index 00000000..f4d886a0 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/hpdsizes.h @@ -0,0 +1,17 @@ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef HPDSIZES_H +#define HPDSIZES_H + +#define NUM_TEXT_ATTR 10 +#define NUM_BLOCK_ATTR 7 +#define MAXLENGTH 128 +#define NUM_BACKGROUNDS 8 +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/imagedata.cpp b/3rdparty/hgOCR/include/ccstruct/imagedata.cpp new file mode 100644 index 00000000..7abac133 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/imagedata.cpp @@ -0,0 +1,699 @@ +/////////////////////////////////////////////////////////////////////// +// File: imagedata.h +// Description: Class to hold information about a single multi-page tiff +// training file and its corresponding boxes or text file. +// Author: Ray Smith +// Created: Tue May 28 08:56:06 PST 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////// + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "imagedata.h" + +#include "allheaders.h" +#include "boxread.h" +#include "callcpp.h" +#include "helpers.h" +#include "tprintf.h" + +#if defined(__MINGW32__) +# include +#elif __cplusplus > 199711L // in C++11 +# include +#endif + +// Number of documents to read ahead while training. Doesn't need to be very +// large. +const int kMaxReadAhead = 8; + +namespace tesseract { + +WordFeature::WordFeature() : x_(0), y_(0), dir_(0) { +} + +WordFeature::WordFeature(const FCOORD& fcoord, uinT8 dir) + : x_(IntCastRounded(fcoord.x())), + y_(ClipToRange(IntCastRounded(fcoord.y()), 0, MAX_UINT8)), + dir_(dir) { +} + +// Computes the maximum x and y value in the features. +void WordFeature::ComputeSize(const GenericVector& features, + int* max_x, int* max_y) { + *max_x = 0; + *max_y = 0; + for (int f = 0; f < features.size(); ++f) { + if (features[f].x_ > *max_x) *max_x = features[f].x_; + if (features[f].y_ > *max_y) *max_y = features[f].y_; + } +} + +// Draws the features in the given window. +void WordFeature::Draw(const GenericVector& features, + ScrollView* window) { +#ifndef GRAPHICS_DISABLED + for (int f = 0; f < features.size(); ++f) { + FCOORD pos(features[f].x_, features[f].y_); + FCOORD dir; + dir.from_direction(features[f].dir_); + dir *= 8.0f; + window->SetCursor(IntCastRounded(pos.x() - dir.x()), + IntCastRounded(pos.y() - dir.y())); + window->DrawTo(IntCastRounded(pos.x() + dir.x()), + IntCastRounded(pos.y() + dir.y())); + } +#endif +} + +// Writes to the given file. Returns false in case of error. +bool WordFeature::Serialize(FILE* fp) const { + if (fwrite(&x_, sizeof(x_), 1, fp) != 1) return false; + if (fwrite(&y_, sizeof(y_), 1, fp) != 1) return false; + if (fwrite(&dir_, sizeof(dir_), 1, fp) != 1) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool WordFeature::DeSerialize(bool swap, FILE* fp) { + if (fread(&x_, sizeof(x_), 1, fp) != 1) return false; + if (swap) ReverseN(&x_, sizeof(x_)); + if (fread(&y_, sizeof(y_), 1, fp) != 1) return false; + if (fread(&dir_, sizeof(dir_), 1, fp) != 1) return false; + return true; +} + +void FloatWordFeature::FromWordFeatures( + const GenericVector& word_features, + GenericVector* float_features) { + for (int i = 0; i < word_features.size(); ++i) { + FloatWordFeature f; + f.x = word_features[i].x(); + f.y = word_features[i].y(); + f.dir = word_features[i].dir(); + f.x_bucket = 0; // Will set it later. + float_features->push_back(f); + } +} + +// Sort function to sort first by x-bucket, then by y. +/* static */ +int FloatWordFeature::SortByXBucket(const void* v1, const void* v2) { + const FloatWordFeature* f1 = reinterpret_cast(v1); + const FloatWordFeature* f2 = reinterpret_cast(v2); + int x_diff = f1->x_bucket - f2->x_bucket; + if (x_diff == 0) return f1->y - f2->y; + return x_diff; +} + +ImageData::ImageData() : page_number_(-1), vertical_text_(false) { +} +// Takes ownership of the pix and destroys it. +ImageData::ImageData(bool vertical, Pix* pix) + : page_number_(0), vertical_text_(vertical) { + SetPix(pix); +} +ImageData::~ImageData() { +} + +// Builds and returns an ImageData from the basic data. Note that imagedata, +// truth_text, and box_text are all the actual file data, NOT filenames. +ImageData* ImageData::Build(const char* name, int page_number, const char* lang, + const char* imagedata, int imagedatasize, + const char* truth_text, const char* box_text) { + ImageData* image_data = new ImageData(); + image_data->imagefilename_ = name; + image_data->page_number_ = page_number; + image_data->language_ = lang; + // Save the imagedata. + image_data->image_data_.resize_no_init(imagedatasize); + memcpy(&image_data->image_data_[0], imagedata, imagedatasize); + if (!image_data->AddBoxes(box_text)) { + if (truth_text == NULL || truth_text[0] == '\0') { + tprintf("Error: No text corresponding to page %d from image %s!\n", + page_number, name); + delete image_data; + return NULL; + } + image_data->transcription_ = truth_text; + // If we have no boxes, the transcription is in the 0th box_texts_. + image_data->box_texts_.push_back(truth_text); + // We will create a box for the whole image on PreScale, to save unpacking + // the image now. + } else if (truth_text != NULL && truth_text[0] != '\0' && + image_data->transcription_ != truth_text) { + // Save the truth text as it is present and disagrees with the box text. + image_data->transcription_ = truth_text; + } + return image_data; +} + +// Writes to the given file. Returns false in case of error. +bool ImageData::Serialize(TFile* fp) const { + if (!imagefilename_.Serialize(fp)) return false; + if (fp->FWrite(&page_number_, sizeof(page_number_), 1) != 1) return false; + if (!image_data_.Serialize(fp)) return false; + if (!transcription_.Serialize(fp)) return false; + // WARNING: Will not work across different endian machines. + if (!boxes_.Serialize(fp)) return false; + if (!box_texts_.SerializeClasses(fp)) return false; + inT8 vertical = vertical_text_; + if (fp->FWrite(&vertical, sizeof(vertical), 1) != 1) return false; + return true; +} + +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool ImageData::DeSerialize(bool swap, TFile* fp) { + if (!imagefilename_.DeSerialize(swap, fp)) return false; + if (fp->FRead(&page_number_, sizeof(page_number_), 1) != 1) return false; + if (swap) ReverseN(&page_number_, sizeof(page_number_)); + if (!image_data_.DeSerialize(swap, fp)) return false; + if (!transcription_.DeSerialize(swap, fp)) return false; + // WARNING: Will not work across different endian machines. + if (!boxes_.DeSerialize(swap, fp)) return false; + if (!box_texts_.DeSerializeClasses(swap, fp)) return false; + inT8 vertical = 0; + if (fp->FRead(&vertical, sizeof(vertical), 1) != 1) return false; + vertical_text_ = vertical != 0; + return true; +} + +// As DeSerialize, but only seeks past the data - hence a static method. +bool ImageData::SkipDeSerialize(bool swap, TFile* fp) { + if (!STRING::SkipDeSerialize(swap, fp)) return false; + inT32 page_number; + if (fp->FRead(&page_number, sizeof(page_number), 1) != 1) return false; + if (!GenericVector::SkipDeSerialize(swap, fp)) return false; + if (!STRING::SkipDeSerialize(swap, fp)) return false; + if (!GenericVector::SkipDeSerialize(swap, fp)) return false; + if (!GenericVector::SkipDeSerializeClasses(swap, fp)) return false; + inT8 vertical = 0; + return fp->FRead(&vertical, sizeof(vertical), 1) == 1; +} + +// Saves the given Pix as a PNG-encoded string and destroys it. +void ImageData::SetPix(Pix* pix) { + SetPixInternal(pix, &image_data_); +} + +// Returns the Pix image for *this. Must be pixDestroyed after use. +Pix* ImageData::GetPix() const { + return GetPixInternal(image_data_); +} + +// Gets anything and everything with a non-NULL pointer, prescaled to a +// given target_height (if 0, then the original image height), and aligned. +// Also returns (if not NULL) the width and height of the scaled image. +// The return value is the scaled Pix, which must be pixDestroyed after use, +// and scale_factor (if not NULL) is set to the scale factor that was applied +// to the image to achieve the target_height. +Pix* ImageData::PreScale(int target_height, int max_height, float* scale_factor, + int* scaled_width, int* scaled_height, + GenericVector* boxes) const { + int input_width = 0; + int input_height = 0; + Pix* src_pix = GetPix(); + ASSERT_HOST(src_pix != NULL); + input_width = pixGetWidth(src_pix); + input_height = pixGetHeight(src_pix); + if (target_height == 0) { + target_height = MIN(input_height, max_height); + } + float im_factor = static_cast(target_height) / input_height; + if (scaled_width != NULL) + *scaled_width = IntCastRounded(im_factor * input_width); + if (scaled_height != NULL) + *scaled_height = target_height; + // Get the scaled image. + Pix* pix = pixScale(src_pix, im_factor, im_factor); + if (pix == NULL) { + tprintf("Scaling pix of size %d, %d by factor %g made null pix!!\n", + input_width, input_height, im_factor); + } + if (scaled_width != NULL) *scaled_width = pixGetWidth(pix); + if (scaled_height != NULL) *scaled_height = pixGetHeight(pix); + pixDestroy(&src_pix); + if (boxes != NULL) { + // Get the boxes. + boxes->truncate(0); + for (int b = 0; b < boxes_.size(); ++b) { + TBOX box = boxes_[b]; + box.scale(im_factor); + boxes->push_back(box); + } + if (boxes->empty()) { + // Make a single box for the whole image. + TBOX box(0, 0, im_factor * input_width, target_height); + boxes->push_back(box); + } + } + if (scale_factor != NULL) *scale_factor = im_factor; + return pix; +} + +int ImageData::MemoryUsed() const { + return image_data_.size(); +} + +// Draws the data in a new window. +void ImageData::Display() const { +#ifndef GRAPHICS_DISABLED + const int kTextSize = 64; + // Draw the image. + Pix* pix = GetPix(); + if (pix == NULL) return; + int width = pixGetWidth(pix); + int height = pixGetHeight(pix); + ScrollView* win = new ScrollView("Imagedata", 100, 100, + 2 * (width + 2 * kTextSize), + 2 * (height + 4 * kTextSize), + width + 10, height + 3 * kTextSize, true); + win->Image(pix, 0, height - 1); + pixDestroy(&pix); + // Draw the boxes. + win->Pen(ScrollView::RED); + win->Brush(ScrollView::NONE); + int text_size = kTextSize; + if (!boxes_.empty() && boxes_[0].height() * 2 < text_size) + text_size = boxes_[0].height() * 2; + win->TextAttributes("Arial", text_size, false, false, false); + if (!boxes_.empty()) { + for (int b = 0; b < boxes_.size(); ++b) { + boxes_[b].plot(win); + win->Text(boxes_[b].left(), height + kTextSize, box_texts_[b].string()); + } + } else { + // The full transcription. + win->Pen(ScrollView::CYAN); + win->Text(0, height + kTextSize * 2, transcription_.string()); + } + win->Update(); + window_wait(win); +#endif +} + +// Adds the supplied boxes and transcriptions that correspond to the correct +// page number. +void ImageData::AddBoxes(const GenericVector& boxes, + const GenericVector& texts, + const GenericVector& box_pages) { + // Copy the boxes and make the transcription. + for (int i = 0; i < box_pages.size(); ++i) { + if (page_number_ >= 0 && box_pages[i] != page_number_) continue; + transcription_ += texts[i]; + boxes_.push_back(boxes[i]); + box_texts_.push_back(texts[i]); + } +} + +// Saves the given Pix as a PNG-encoded string and destroys it. +void ImageData::SetPixInternal(Pix* pix, GenericVector* image_data) { + l_uint8* data; + size_t size; + pixWriteMem(&data, &size, pix, IFF_PNG); + pixDestroy(&pix); + image_data->resize_no_init(size); + memcpy(&(*image_data)[0], data, size); + free(data); +} + +// Returns the Pix image for the image_data. Must be pixDestroyed after use. +Pix* ImageData::GetPixInternal(const GenericVector& image_data) { + Pix* pix = NULL; + if (!image_data.empty()) { + // Convert the array to an image. + const unsigned char* u_data = + reinterpret_cast(&image_data[0]); + pix = pixReadMem(u_data, image_data.size()); + } + return pix; +} + +// Parses the text string as a box file and adds any discovered boxes that +// match the page number. Returns false on error. +bool ImageData::AddBoxes(const char* box_text) { + if (box_text != NULL && box_text[0] != '\0') { + GenericVector boxes; + GenericVector texts; + GenericVector box_pages; + if (ReadMemBoxes(page_number_, false, box_text, &boxes, + &texts, NULL, &box_pages)) { + AddBoxes(boxes, texts, box_pages); + return true; + } else { + tprintf("Error: No boxes for page %d from image %s!\n", + page_number_, imagefilename_.string()); + } + } + return false; +} + +// Thread function to call ReCachePages. +void* ReCachePagesFunc(void* data) { + DocumentData* document_data = reinterpret_cast(data); + document_data->ReCachePages(); + return NULL; +} + +DocumentData::DocumentData(const STRING& name) + : document_name_(name), + pages_offset_(-1), + total_pages_(-1), + memory_used_(0), + max_memory_(0), + reader_(NULL) {} + +DocumentData::~DocumentData() { + SVAutoLock lock_p(&pages_mutex_); + SVAutoLock lock_g(&general_mutex_); +} + +// Reads all the pages in the given lstmf filename to the cache. The reader +// is used to read the file. +bool DocumentData::LoadDocument(const char* filename, const char* lang, + int start_page, inT64 max_memory, + FileReader reader) { + SetDocument(filename, lang, max_memory, reader); + pages_offset_ = start_page; + return ReCachePages(); +} + +// Sets up the document, without actually loading it. +void DocumentData::SetDocument(const char* filename, const char* lang, + inT64 max_memory, FileReader reader) { + SVAutoLock lock_p(&pages_mutex_); + SVAutoLock lock(&general_mutex_); + document_name_ = filename; + lang_ = lang; + pages_offset_ = -1; + max_memory_ = max_memory; + reader_ = reader; +} + +// Writes all the pages to the given filename. Returns false on error. +bool DocumentData::SaveDocument(const char* filename, FileWriter writer) { + SVAutoLock lock(&pages_mutex_); + TFile fp; + fp.OpenWrite(NULL); + if (!pages_.Serialize(&fp) || !fp.CloseWrite(filename, writer)) { + tprintf("Serialize failed: %s\n", filename); + return false; + } + return true; +} +bool DocumentData::SaveToBuffer(GenericVector* buffer) { + SVAutoLock lock(&pages_mutex_); + TFile fp; + fp.OpenWrite(buffer); + return pages_.Serialize(&fp); +} + +// Adds the given page data to this document, counting up memory. +void DocumentData::AddPageToDocument(ImageData* page) { + SVAutoLock lock(&pages_mutex_); + pages_.push_back(page); + set_memory_used(memory_used() + page->MemoryUsed()); +} + +// If the given index is not currently loaded, loads it using a separate +// thread. +void DocumentData::LoadPageInBackground(int index) { + ImageData* page = NULL; + if (IsPageAvailable(index, &page)) return; + SVAutoLock lock(&pages_mutex_); + if (pages_offset_ == index) return; + pages_offset_ = index; + pages_.clear(); + #ifndef GRAPHICS_DISABLED + SVSync::StartThread(ReCachePagesFunc, this); + #endif // GRAPHICS_DISABLED +} + +// Returns a pointer to the page with the given index, modulo the total +// number of pages. Blocks until the background load is completed. +const ImageData* DocumentData::GetPage(int index) { + ImageData* page = NULL; + while (!IsPageAvailable(index, &page)) { + // If there is no background load scheduled, schedule one now. + pages_mutex_.Lock(); + bool needs_loading = pages_offset_ != index; + pages_mutex_.Unlock(); + if (needs_loading) LoadPageInBackground(index); + // We can't directly load the page, or the background load will delete it + // while the caller is using it, so give it a chance to work. +#if __cplusplus > 199711L && !defined(__MINGW32__) + std::this_thread::sleep_for(std::chrono::seconds(1)); +#elif _WIN32 // MSVS + Sleep(1000); +#else + sleep(1); +#endif + } + return page; +} + +// Returns true if the requested page is available, and provides a pointer, +// which may be NULL if the document is empty. May block, even though it +// doesn't guarantee to return true. +bool DocumentData::IsPageAvailable(int index, ImageData** page) { + SVAutoLock lock(&pages_mutex_); + int num_pages = NumPages(); + if (num_pages == 0 || index < 0) { + *page = NULL; // Empty Document. + return true; + } + if (num_pages > 0) { + index = Modulo(index, num_pages); + if (pages_offset_ <= index && index < pages_offset_ + pages_.size()) { + *page = pages_[index - pages_offset_]; // Page is available already. + return true; + } + } + return false; +} + +// Removes all pages from memory and frees the memory, but does not forget +// the document metadata. +inT64 DocumentData::UnCache() { + SVAutoLock lock(&pages_mutex_); + inT64 memory_saved = memory_used(); + pages_.clear(); + pages_offset_ = -1; + set_total_pages(-1); + set_memory_used(0); + tprintf("Unloaded document %s, saving %d memory\n", document_name_.string(), + memory_saved); + return memory_saved; +} + +// Locks the pages_mutex_ and Loads as many pages can fit in max_memory_ +// starting at index pages_offset_. +bool DocumentData::ReCachePages() { + SVAutoLock lock(&pages_mutex_); + // Read the file. + set_total_pages(0); + set_memory_used(0); + int loaded_pages = 0; + pages_.truncate(0); + TFile fp; + if (!fp.Open(document_name_, reader_) || + !PointerVector::DeSerializeSize(false, &fp, &loaded_pages) || + loaded_pages <= 0) { + tprintf("Deserialize header failed: %s\n", document_name_.string()); + return false; + } + pages_offset_ %= loaded_pages; + // Skip pages before the first one we want, and load the rest until max + // memory and skip the rest after that. + int page; + for (page = 0; page < loaded_pages; ++page) { + if (page < pages_offset_ || + (max_memory_ > 0 && memory_used() > max_memory_)) { + if (!PointerVector::DeSerializeSkip(false, &fp)) break; + } else { + if (!pages_.DeSerializeElement(false, &fp)) break; + ImageData* image_data = pages_.back(); + if (image_data->imagefilename().length() == 0) { + image_data->set_imagefilename(document_name_); + image_data->set_page_number(page); + } + image_data->set_language(lang_); + set_memory_used(memory_used() + image_data->MemoryUsed()); + } + } + if (page < loaded_pages) { + tprintf("Deserialize failed: %s read %d/%d pages\n", + document_name_.string(), page, loaded_pages); + pages_.truncate(0); + } else { + tprintf("Loaded %d/%d pages (%d-%d) of document %s\n", pages_.size(), + loaded_pages, pages_offset_, pages_offset_ + pages_.size(), + document_name_.string()); + } + set_total_pages(loaded_pages); + return !pages_.empty(); +} + +// A collection of DocumentData that knows roughly how much memory it is using. +DocumentCache::DocumentCache(inT64 max_memory) + : num_pages_per_doc_(0), max_memory_(max_memory) {} +DocumentCache::~DocumentCache() {} + +// Adds all the documents in the list of filenames, counting memory. +// The reader is used to read the files. +bool DocumentCache::LoadDocuments(const GenericVector& filenames, + const char* lang, + CachingStrategy cache_strategy, + FileReader reader) { + cache_strategy_ = cache_strategy; + inT64 fair_share_memory = 0; + // In the round-robin case, each DocumentData handles restricting its content + // to its fair share of memory. In the sequential case, DocumentCache + // determines which DocumentDatas are held entirely in memory. + if (cache_strategy_ == CS_ROUND_ROBIN) + fair_share_memory = max_memory_ / filenames.size(); + for (int arg = 0; arg < filenames.size(); ++arg) { + STRING filename = filenames[arg]; + DocumentData* document = new DocumentData(filename); + document->SetDocument(filename.string(), lang, fair_share_memory, reader); + AddToCache(document); + } + if (!documents_.empty()) { + // Try to get the first page now to verify the list of filenames. + if (GetPageBySerial(0) != NULL) return true; + tprintf("Load of page 0 failed!\n"); + } + return false; +} + +// Adds document to the cache. +bool DocumentCache::AddToCache(DocumentData* data) { + inT64 new_memory = data->memory_used(); + documents_.push_back(data); + return true; +} + +// Finds and returns a document by name. +DocumentData* DocumentCache::FindDocument(const STRING& document_name) const { + for (int i = 0; i < documents_.size(); ++i) { + if (documents_[i]->document_name() == document_name) + return documents_[i]; + } + return NULL; +} + +// Returns the total number of pages in an epoch. For CS_ROUND_ROBIN cache +// strategy, could take a long time. +int DocumentCache::TotalPages() { + if (cache_strategy_ == CS_SEQUENTIAL) { + // In sequential mode, we assume each doc has the same number of pages + // whether it is true or not. + if (num_pages_per_doc_ == 0) GetPageSequential(0); + return num_pages_per_doc_ * documents_.size(); + } + int total_pages = 0; + int num_docs = documents_.size(); + for (int d = 0; d < num_docs; ++d) { + // We have to load a page to make NumPages() valid. + documents_[d]->GetPage(0); + total_pages += documents_[d]->NumPages(); + } + return total_pages; +} + +// Returns a page by serial number, selecting them in a round-robin fashion +// from all the documents. Highly disk-intensive, but doesn't need samples +// to be shuffled between files to begin with. +const ImageData* DocumentCache::GetPageRoundRobin(int serial) { + int num_docs = documents_.size(); + int doc_index = serial % num_docs; + const ImageData* doc = documents_[doc_index]->GetPage(serial / num_docs); + for (int offset = 1; offset <= kMaxReadAhead && offset < num_docs; ++offset) { + doc_index = (serial + offset) % num_docs; + int page = (serial + offset) / num_docs; + documents_[doc_index]->LoadPageInBackground(page); + } + return doc; +} + +// Returns a page by serial number, selecting them in sequence from each file. +// Requires the samples to be shuffled between the files to give a random or +// uniform distribution of data. Less disk-intensive than GetPageRoundRobin. +const ImageData* DocumentCache::GetPageSequential(int serial) { + int num_docs = documents_.size(); + ASSERT_HOST(num_docs > 0); + if (num_pages_per_doc_ == 0) { + // Use the pages in the first doc as the number of pages in each doc. + documents_[0]->GetPage(0); + num_pages_per_doc_ = documents_[0]->NumPages(); + if (num_pages_per_doc_ == 0) { + tprintf("First document cannot be empty!!\n"); + ASSERT_HOST(num_pages_per_doc_ > 0); + } + // Get rid of zero now if we don't need it. + if (serial / num_pages_per_doc_ % num_docs > 0) documents_[0]->UnCache(); + } + int doc_index = serial / num_pages_per_doc_ % num_docs; + const ImageData* doc = + documents_[doc_index]->GetPage(serial % num_pages_per_doc_); + // Count up total memory. Background loading makes it more complicated to + // keep a running count. + inT64 total_memory = 0; + for (int d = 0; d < num_docs; ++d) { + total_memory += documents_[d]->memory_used(); + } + if (total_memory >= max_memory_) { + // Find something to un-cache. + // If there are more than 3 in front, then serial is from the back reader + // of a pair of readers. If we un-cache from in-front-2 to 2-ahead, then + // we create a hole between them and then un-caching the backmost occupied + // will work for both. + int num_in_front = CountNeighbourDocs(doc_index, 1); + for (int offset = num_in_front - 2; + offset > 1 && total_memory >= max_memory_; --offset) { + int next_index = (doc_index + offset) % num_docs; + total_memory -= documents_[next_index]->UnCache(); + } + // If that didn't work, the best solution is to un-cache from the back. If + // we take away the document that a 2nd reader is using, it will put it + // back and make a hole between. + int num_behind = CountNeighbourDocs(doc_index, -1); + for (int offset = num_behind; offset < 0 && total_memory >= max_memory_; + ++offset) { + int next_index = (doc_index + offset + num_docs) % num_docs; + total_memory -= documents_[next_index]->UnCache(); + } + } + int next_index = (doc_index + 1) % num_docs; + if (!documents_[next_index]->IsCached() && total_memory < max_memory_) { + documents_[next_index]->LoadPageInBackground(0); + } + return doc; +} + +// Helper counts the number of adjacent cached neighbours of index looking in +// direction dir, ie index+dir, index+2*dir etc. +int DocumentCache::CountNeighbourDocs(int index, int dir) { + int num_docs = documents_.size(); + for (int offset = dir; abs(offset) < num_docs; offset += dir) { + int offset_index = (index + offset + num_docs) % num_docs; + if (!documents_[offset_index]->IsCached()) return offset - dir; + } + return num_docs; +} + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccstruct/imagedata.h b/3rdparty/hgOCR/include/ccstruct/imagedata.h new file mode 100644 index 00000000..ae672293 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/imagedata.h @@ -0,0 +1,379 @@ +/////////////////////////////////////////////////////////////////////// +// File: imagedata.h +// Description: Class to hold information about a single image and its +// corresponding boxes or text file. +// Author: Ray Smith +// Created: Mon Jul 22 14:17:06 PDT 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_IMAGE_IMAGEDATA_H_ +#define TESSERACT_IMAGE_IMAGEDATA_H_ + + +#include "genericvector.h" +#include "normalis.h" +#include "rect.h" +#include "strngs.h" +#include "svutil.h" + +struct Pix; + +namespace tesseract { + +// Amount of padding to apply in output pixels in feature mode. +const int kFeaturePadding = 2; +// Number of pixels to pad around text boxes. +const int kImagePadding = 4; + +// Enum to determine the caching and data sequencing strategy. +enum CachingStrategy { + // Reads all of one file before moving on to the next. Requires samples to be + // shuffled across files. Uses the count of samples in the first file as + // the count in all the files to achieve high-speed random access. As a + // consequence, if subsequent files are smaller, they get entries used more + // than once, and if subsequent files are larger, some entries are not used. + // Best for larger data sets that don't fit in memory. + CS_SEQUENTIAL, + // Reads one sample from each file in rotation. Does not require shuffled + // samples, but is extremely disk-intensive. Samples in smaller files also + // get used more often than samples in larger files. + // Best for smaller data sets that mostly fit in memory. + CS_ROUND_ROBIN, +}; + +class WordFeature { + public: + WordFeature(); + WordFeature(const FCOORD& fcoord, uinT8 dir); + + // Computes the maximum x and y value in the features. + static void ComputeSize(const GenericVector& features, + int* max_x, int* max_y); + // Draws the features in the given window. + static void Draw(const GenericVector& features, + ScrollView* window); + + // Accessors. + int x() const { return x_; } + int y() const { return y_; } + int dir() const { return dir_; } + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + private: + inT16 x_; + uinT8 y_; + uinT8 dir_; +}; + +// A floating-point version of WordFeature, used as an intermediate during +// scaling. +struct FloatWordFeature { + static void FromWordFeatures(const GenericVector& word_features, + GenericVector* float_features); + // Sort function to sort first by x-bucket, then by y. + static int SortByXBucket(const void*, const void*); + + float x; + float y; + float dir; + int x_bucket; +}; + +// Class to hold information on a single image: +// Filename, cached image as a Pix*, character boxes, text transcription. +// The text transcription is the ground truth UTF-8 text for the image. +// Character boxes are optional and indicate the desired segmentation of +// the text into recognition units. +class ImageData { + public: + ImageData(); + // Takes ownership of the pix. + ImageData(bool vertical, Pix* pix); + ~ImageData(); + + // Builds and returns an ImageData from the basic data. Note that imagedata, + // truth_text, and box_text are all the actual file data, NOT filenames. + static ImageData* Build(const char* name, int page_number, const char* lang, + const char* imagedata, int imagedatasize, + const char* truth_text, const char* box_text); + + // Writes to the given file. Returns false in case of error. + bool Serialize(TFile* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, TFile* fp); + // As DeSerialize, but only seeks past the data - hence a static method. + static bool SkipDeSerialize(bool swap, tesseract::TFile* fp); + + // Other accessors. + const STRING& imagefilename() const { + return imagefilename_; + } + void set_imagefilename(const STRING& name) { + imagefilename_ = name; + } + int page_number() const { + return page_number_; + } + void set_page_number(int num) { + page_number_ = num; + } + const GenericVector& image_data() const { + return image_data_; + } + const STRING& language() const { + return language_; + } + void set_language(const STRING& lang) { + language_ = lang; + } + const STRING& transcription() const { + return transcription_; + } + const GenericVector& boxes() const { + return boxes_; + } + const GenericVector& box_texts() const { + return box_texts_; + } + const STRING& box_text(int index) const { + return box_texts_[index]; + } + // Saves the given Pix as a PNG-encoded string and destroys it. + void SetPix(Pix* pix); + // Returns the Pix image for *this. Must be pixDestroyed after use. + Pix* GetPix() const; + // Gets anything and everything with a non-NULL pointer, prescaled to a + // given target_height (if 0, then the original image height), and aligned. + // Also returns (if not NULL) the width and height of the scaled image. + // The return value is the scaled Pix, which must be pixDestroyed after use, + // and scale_factor (if not NULL) is set to the scale factor that was applied + // to the image to achieve the target_height. + Pix* PreScale(int target_height, int max_height, float* scale_factor, + int* scaled_width, int* scaled_height, + GenericVector* boxes) const; + + int MemoryUsed() const; + + // Draws the data in a new window. + void Display() const; + + // Adds the supplied boxes and transcriptions that correspond to the correct + // page number. + void AddBoxes(const GenericVector& boxes, + const GenericVector& texts, + const GenericVector& box_pages); + + private: + // Saves the given Pix as a PNG-encoded string and destroys it. + static void SetPixInternal(Pix* pix, GenericVector* image_data); + // Returns the Pix image for the image_data. Must be pixDestroyed after use. + static Pix* GetPixInternal(const GenericVector& image_data); + // Parses the text string as a box file and adds any discovered boxes that + // match the page number. Returns false on error. + bool AddBoxes(const char* box_text); + + private: + STRING imagefilename_; // File to read image from. + inT32 page_number_; // Page number if multi-page tif or -1. + GenericVector image_data_; // PNG file data. + STRING language_; // Language code for image. + STRING transcription_; // UTF-8 ground truth of image. + GenericVector boxes_; // If non-empty boxes of the image. + GenericVector box_texts_; // String for text in each box. + bool vertical_text_; // Image has been rotated from vertical. +}; + +// A collection of ImageData that knows roughly how much memory it is using. +class DocumentData { + friend void* ReCachePagesFunc(void* data); + + public: + explicit DocumentData(const STRING& name); + ~DocumentData(); + + // Reads all the pages in the given lstmf filename to the cache. The reader + // is used to read the file. + bool LoadDocument(const char* filename, const char* lang, int start_page, + inT64 max_memory, FileReader reader); + // Sets up the document, without actually loading it. + void SetDocument(const char* filename, const char* lang, inT64 max_memory, + FileReader reader); + // Writes all the pages to the given filename. Returns false on error. + bool SaveDocument(const char* filename, FileWriter writer); + bool SaveToBuffer(GenericVector* buffer); + + // Adds the given page data to this document, counting up memory. + void AddPageToDocument(ImageData* page); + + const STRING& document_name() const { + SVAutoLock lock(&general_mutex_); + return document_name_; + } + int NumPages() const { + SVAutoLock lock(&general_mutex_); + return total_pages_; + } + inT64 memory_used() const { + SVAutoLock lock(&general_mutex_); + return memory_used_; + } + // If the given index is not currently loaded, loads it using a separate + // thread. Note: there are 4 cases: + // Document uncached: IsCached() returns false, total_pages_ < 0. + // Required page is available: IsPageAvailable returns true. In this case, + // total_pages_ > 0 and + // pages_offset_ <= index%total_pages_ <= pages_offset_+pages_.size() + // Pages are loaded, but the required one is not. + // The requested page is being loaded by LoadPageInBackground. In this case, + // index == pages_offset_. Once the loading starts, the pages lock is held + // until it completes, at which point IsPageAvailable will unblock and return + // true. + void LoadPageInBackground(int index); + // Returns a pointer to the page with the given index, modulo the total + // number of pages. Blocks until the background load is completed. + const ImageData* GetPage(int index); + // Returns true if the requested page is available, and provides a pointer, + // which may be NULL if the document is empty. May block, even though it + // doesn't guarantee to return true. + bool IsPageAvailable(int index, ImageData** page); + // Takes ownership of the given page index. The page is made NULL in *this. + ImageData* TakePage(int index) { + SVAutoLock lock(&pages_mutex_); + ImageData* page = pages_[index]; + pages_[index] = NULL; + return page; + } + // Returns true if the document is currently loaded or in the process of + // loading. + bool IsCached() const { return NumPages() >= 0; } + // Removes all pages from memory and frees the memory, but does not forget + // the document metadata. Returns the memory saved. + inT64 UnCache(); + + private: + // Sets the value of total_pages_ behind a mutex. + void set_total_pages(int total) { + SVAutoLock lock(&general_mutex_); + total_pages_ = total; + } + void set_memory_used(inT64 memory_used) { + SVAutoLock lock(&general_mutex_); + memory_used_ = memory_used; + } + // Locks the pages_mutex_ and Loads as many pages can fit in max_memory_ + // starting at index pages_offset_. + bool ReCachePages(); + + private: + // A name for this document. + STRING document_name_; + // The language of this document. + STRING lang_; + // A group of pages that corresponds in some loose way to a document. + PointerVector pages_; + // Page number of the first index in pages_. + int pages_offset_; + // Total number of pages in document (may exceed size of pages_.) + int total_pages_; + // Total of all pix sizes in the document. + inT64 memory_used_; + // Max memory to use at any time. + inT64 max_memory_; + // Saved reader from LoadDocument to allow re-caching. + FileReader reader_; + // Mutex that protects pages_ and pages_offset_ against multiple parallel + // loads, and provides a wait for page. + SVMutex pages_mutex_; + // Mutex that protects other data members that callers want to access without + // waiting for a load operation. + mutable SVMutex general_mutex_; +}; + +// A collection of DocumentData that knows roughly how much memory it is using. +// Note that while it supports background read-ahead, it assumes that a single +// thread is accessing documents, ie it is not safe for multiple threads to +// access different documents in parallel, as one may de-cache the other's +// content. +class DocumentCache { + public: + explicit DocumentCache(inT64 max_memory); + ~DocumentCache(); + + // Deletes all existing documents from the cache. + void Clear() { + documents_.clear(); + num_pages_per_doc_ = 0; + } + // Adds all the documents in the list of filenames, counting memory. + // The reader is used to read the files. + bool LoadDocuments(const GenericVector& filenames, const char* lang, + CachingStrategy cache_strategy, FileReader reader); + + // Adds document to the cache. + bool AddToCache(DocumentData* data); + + // Finds and returns a document by name. + DocumentData* FindDocument(const STRING& document_name) const; + + // Returns a page by serial number using the current cache_strategy_ to + // determine the mapping from serial number to page. + const ImageData* GetPageBySerial(int serial) { + if (cache_strategy_ == CS_SEQUENTIAL) + return GetPageSequential(serial); + else + return GetPageRoundRobin(serial); + } + + const PointerVector& documents() const { + return documents_; + } + // Returns the total number of pages in an epoch. For CS_ROUND_ROBIN cache + // strategy, could take a long time. + int TotalPages(); + + private: + // Returns a page by serial number, selecting them in a round-robin fashion + // from all the documents. Highly disk-intensive, but doesn't need samples + // to be shuffled between files to begin with. + const ImageData* GetPageRoundRobin(int serial); + // Returns a page by serial number, selecting them in sequence from each file. + // Requires the samples to be shuffled between the files to give a random or + // uniform distribution of data. Less disk-intensive than GetPageRoundRobin. + const ImageData* GetPageSequential(int serial); + + // Helper counts the number of adjacent cached neighbour documents_ of index + // looking in direction dir, ie index+dir, index+2*dir etc. + int CountNeighbourDocs(int index, int dir); + + // A group of pages that corresponds in some loose way to a document. + PointerVector documents_; + // Strategy to use for caching and serializing data samples. + CachingStrategy cache_strategy_; + // Number of pages in the first document, used as a divisor in + // GetPageSequential to determine the document index. + int num_pages_per_doc_; + // Max memory allowed in this cache. + inT64 max_memory_; +}; + +} // namespace tesseract + + +#endif // TESSERACT_IMAGE_IMAGEDATA_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/ipoints.h b/3rdparty/hgOCR/include/ccstruct/ipoints.h new file mode 100644 index 00000000..0be7635d --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ipoints.h @@ -0,0 +1,484 @@ +/********************************************************************** + * File: ipoints.h (Formerly icoords.h) + * Description: Inline functions for coords.h. + * Author: Ray Smith + * Created: Fri Jun 21 15:14:21 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef IPOINTS_H +#define IPOINTS_H + +#include + +/********************************************************************** + * operator! + * + * Rotate an ICOORD 90 degrees anticlockwise. + **********************************************************************/ + +inline ICOORD +operator! ( //rotate 90 deg anti +const ICOORD & src //thing to rotate +) { + ICOORD result; //output + + result.xcoord = -src.ycoord; + result.ycoord = src.xcoord; + return result; +} + + +/********************************************************************** + * operator- + * + * Unary minus of an ICOORD. + **********************************************************************/ + +inline ICOORD +operator- ( //unary minus +const ICOORD & src //thing to minus +) { + ICOORD result; //output + + result.xcoord = -src.xcoord; + result.ycoord = -src.ycoord; + return result; +} + + +/********************************************************************** + * operator+ + * + * Add 2 ICOORDS. + **********************************************************************/ + +inline ICOORD +operator+ ( //sum vectors +const ICOORD & op1, //operands +const ICOORD & op2) { + ICOORD sum; //result + + sum.xcoord = op1.xcoord + op2.xcoord; + sum.ycoord = op1.ycoord + op2.ycoord; + return sum; +} + + +/********************************************************************** + * operator+= + * + * Add 2 ICOORDS. + **********************************************************************/ + +inline ICOORD & +operator+= ( //sum vectors +ICOORD & op1, //operands +const ICOORD & op2) { + op1.xcoord += op2.xcoord; + op1.ycoord += op2.ycoord; + return op1; +} + + +/********************************************************************** + * operator- + * + * Subtract 2 ICOORDS. + **********************************************************************/ + +inline ICOORD +operator- ( //subtract vectors +const ICOORD & op1, //operands +const ICOORD & op2) { + ICOORD sum; //result + + sum.xcoord = op1.xcoord - op2.xcoord; + sum.ycoord = op1.ycoord - op2.ycoord; + return sum; +} + + +/********************************************************************** + * operator-= + * + * Subtract 2 ICOORDS. + **********************************************************************/ + +inline ICOORD & +operator-= ( //sum vectors +ICOORD & op1, //operands +const ICOORD & op2) { + op1.xcoord -= op2.xcoord; + op1.ycoord -= op2.ycoord; + return op1; +} + + +/********************************************************************** + * operator% + * + * Scalar product of 2 ICOORDS. + **********************************************************************/ + +inline inT32 +operator% ( //scalar product +const ICOORD & op1, //operands +const ICOORD & op2) { + return op1.xcoord * op2.xcoord + op1.ycoord * op2.ycoord; +} + + +/********************************************************************** + * operator* + * + * Cross product of 2 ICOORDS. + **********************************************************************/ + +inline inT32 operator *( //cross product + const ICOORD &op1, //operands + const ICOORD &op2) { + return op1.xcoord * op2.ycoord - op1.ycoord * op2.xcoord; +} + + +/********************************************************************** + * operator* + * + * Scalar multiply of an ICOORD. + **********************************************************************/ + +inline ICOORD operator *( //scalar multiply + const ICOORD &op1, //operands + inT16 scale) { + ICOORD result; //output + + result.xcoord = op1.xcoord * scale; + result.ycoord = op1.ycoord * scale; + return result; +} + + +inline ICOORD operator *( //scalar multiply + inT16 scale, + const ICOORD &op1 //operands + ) { + ICOORD result; //output + + result.xcoord = op1.xcoord * scale; + result.ycoord = op1.ycoord * scale; + return result; +} + + +/********************************************************************** + * operator*= + * + * Scalar multiply of an ICOORD. + **********************************************************************/ + +inline ICOORD & +operator*= ( //scalar multiply +ICOORD & op1, //operands +inT16 scale) { + op1.xcoord *= scale; + op1.ycoord *= scale; + return op1; +} + + +/********************************************************************** + * operator/ + * + * Scalar divide of an ICOORD. + **********************************************************************/ + +inline ICOORD +operator/ ( //scalar divide +const ICOORD & op1, //operands +inT16 scale) { + ICOORD result; //output + + result.xcoord = op1.xcoord / scale; + result.ycoord = op1.ycoord / scale; + return result; +} + + +/********************************************************************** + * operator/= + * + * Scalar divide of an ICOORD. + **********************************************************************/ + +inline ICOORD & +operator/= ( //scalar divide +ICOORD & op1, //operands +inT16 scale) { + op1.xcoord /= scale; + op1.ycoord /= scale; + return op1; +} + + +/********************************************************************** + * ICOORD::rotate + * + * Rotate an ICOORD by the given (normalized) (cos,sin) vector. + **********************************************************************/ + +inline void ICOORD::rotate( //rotate by vector + const FCOORD& vec) { + inT16 tmp; + + tmp = (inT16) floor (xcoord * vec.x () - ycoord * vec.y () + 0.5); + ycoord = (inT16) floor (ycoord * vec.x () + xcoord * vec.y () + 0.5); + xcoord = tmp; +} + + +/********************************************************************** + * operator! + * + * Rotate an FCOORD 90 degrees anticlockwise. + **********************************************************************/ + +inline FCOORD +operator! ( //rotate 90 deg anti +const FCOORD & src //thing to rotate +) { + FCOORD result; //output + + result.xcoord = -src.ycoord; + result.ycoord = src.xcoord; + return result; +} + + +/********************************************************************** + * operator- + * + * Unary minus of an FCOORD. + **********************************************************************/ + +inline FCOORD +operator- ( //unary minus +const FCOORD & src //thing to minus +) { + FCOORD result; //output + + result.xcoord = -src.xcoord; + result.ycoord = -src.ycoord; + return result; +} + + +/********************************************************************** + * operator+ + * + * Add 2 FCOORDS. + **********************************************************************/ + +inline FCOORD +operator+ ( //sum vectors +const FCOORD & op1, //operands +const FCOORD & op2) { + FCOORD sum; //result + + sum.xcoord = op1.xcoord + op2.xcoord; + sum.ycoord = op1.ycoord + op2.ycoord; + return sum; +} + + +/********************************************************************** + * operator+= + * + * Add 2 FCOORDS. + **********************************************************************/ + +inline FCOORD & +operator+= ( //sum vectors +FCOORD & op1, //operands +const FCOORD & op2) { + op1.xcoord += op2.xcoord; + op1.ycoord += op2.ycoord; + return op1; +} + + +/********************************************************************** + * operator- + * + * Subtract 2 FCOORDS. + **********************************************************************/ + +inline FCOORD +operator- ( //subtract vectors +const FCOORD & op1, //operands +const FCOORD & op2) { + FCOORD sum; //result + + sum.xcoord = op1.xcoord - op2.xcoord; + sum.ycoord = op1.ycoord - op2.ycoord; + return sum; +} + + +/********************************************************************** + * operator-= + * + * Subtract 2 FCOORDS. + **********************************************************************/ + +inline FCOORD & +operator-= ( //sum vectors +FCOORD & op1, //operands +const FCOORD & op2) { + op1.xcoord -= op2.xcoord; + op1.ycoord -= op2.ycoord; + return op1; +} + + +/********************************************************************** + * operator% + * + * Scalar product of 2 FCOORDS. + **********************************************************************/ + +inline float +operator% ( //scalar product +const FCOORD & op1, //operands +const FCOORD & op2) { + return op1.xcoord * op2.xcoord + op1.ycoord * op2.ycoord; +} + + +/********************************************************************** + * operator* + * + * Cross product of 2 FCOORDS. + **********************************************************************/ + +inline float operator *( //cross product + const FCOORD &op1, //operands + const FCOORD &op2) { + return op1.xcoord * op2.ycoord - op1.ycoord * op2.xcoord; +} + + +/********************************************************************** + * operator* + * + * Scalar multiply of an FCOORD. + **********************************************************************/ + +inline FCOORD operator *( //scalar multiply + const FCOORD &op1, //operands + float scale) { + FCOORD result; //output + + result.xcoord = op1.xcoord * scale; + result.ycoord = op1.ycoord * scale; + return result; +} + + +inline FCOORD operator *( //scalar multiply + float scale, + const FCOORD &op1 //operands + ) { + FCOORD result; //output + + result.xcoord = op1.xcoord * scale; + result.ycoord = op1.ycoord * scale; + return result; +} + + +/********************************************************************** + * operator*= + * + * Scalar multiply of an FCOORD. + **********************************************************************/ + +inline FCOORD & +operator*= ( //scalar multiply +FCOORD & op1, //operands +float scale) { + op1.xcoord *= scale; + op1.ycoord *= scale; + return op1; +} + + +/********************************************************************** + * operator/ + * + * Scalar divide of an FCOORD. + **********************************************************************/ + +inline FCOORD +operator/ ( //scalar divide +const FCOORD & op1, //operands +float scale) { + FCOORD result; //output + + if (scale != 0) { + result.xcoord = op1.xcoord / scale; + result.ycoord = op1.ycoord / scale; + } + return result; +} + + +/********************************************************************** + * operator/= + * + * Scalar divide of an FCOORD. + **********************************************************************/ + +inline FCOORD & +operator/= ( //scalar divide +FCOORD & op1, //operands +float scale) { + if (scale != 0) { + op1.xcoord /= scale; + op1.ycoord /= scale; + } + return op1; +} + + +/********************************************************************** + * rotate + * + * Rotate an FCOORD by the given (normalized) (cos,sin) vector. + **********************************************************************/ + +inline void FCOORD::rotate( //rotate by vector + const FCOORD vec) { + float tmp; + + tmp = xcoord * vec.x () - ycoord * vec.y (); + ycoord = ycoord * vec.x () + xcoord * vec.y (); + xcoord = tmp; +} + +inline void FCOORD::unrotate(const FCOORD& vec) { + rotate(FCOORD(vec.x(), -vec.y())); +} + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/linlsq.cpp b/3rdparty/hgOCR/include/ccstruct/linlsq.cpp new file mode 100644 index 00000000..6dffa2da --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/linlsq.cpp @@ -0,0 +1,259 @@ +/********************************************************************** + * File: linlsq.cpp (Formerly llsq.c) + * Description: Linear Least squares fitting code. + * Author: Ray Smith + * Created: Thu Sep 12 08:44:51 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include "errcode.h" +#include "linlsq.h" + +const ERRCODE EMPTY_LLSQ = "Can't delete from an empty LLSQ"; + +/********************************************************************** + * LLSQ::clear + * + * Function to initialize a LLSQ. + **********************************************************************/ + +void LLSQ::clear() { // initialize + total_weight = 0.0; // no elements + sigx = 0.0; // update accumulators + sigy = 0.0; + sigxx = 0.0; + sigxy = 0.0; + sigyy = 0.0; +} + + +/********************************************************************** + * LLSQ::add + * + * Add an element to the accumulator. + **********************************************************************/ + +void LLSQ::add(double x, double y) { // add an element + total_weight++; // count elements + sigx += x; // update accumulators + sigy += y; + sigxx += x * x; + sigxy += x * y; + sigyy += y * y; +} +// Adds an element with a specified weight. +void LLSQ::add(double x, double y, double weight) { + total_weight += weight; + sigx += x * weight; // update accumulators + sigy += y * weight; + sigxx += x * x * weight; + sigxy += x * y * weight; + sigyy += y * y * weight; +} +// Adds a whole LLSQ. +void LLSQ::add(const LLSQ& other) { + total_weight += other.total_weight; + sigx += other.sigx; // update accumulators + sigy += other.sigy; + sigxx += other.sigxx; + sigxy += other.sigxy; + sigyy += other.sigyy; +} + + +/********************************************************************** + * LLSQ::remove + * + * Delete an element from the acculuator. + **********************************************************************/ + +void LLSQ::remove(double x, double y) { // delete an element + if (total_weight <= 0.0) // illegal + EMPTY_LLSQ.error("LLSQ::remove", ABORT, NULL); + total_weight--; // count elements + sigx -= x; // update accumulators + sigy -= y; + sigxx -= x * x; + sigxy -= x * y; + sigyy -= y * y; +} + + +/********************************************************************** + * LLSQ::m + * + * Return the gradient of the line fit. + **********************************************************************/ + +double LLSQ::m() const { // get gradient + double covar = covariance(); + double x_var = x_variance(); + if (x_var != 0.0) + return covar / x_var; + else + return 0.0; // too little +} + + +/********************************************************************** + * LLSQ::c + * + * Return the constant of the line fit. + **********************************************************************/ + +double LLSQ::c(double m) const { // get constant + if (total_weight > 0.0) + return (sigy - m * sigx) / total_weight; + else + return 0; // too little +} + + +/********************************************************************** + * LLSQ::rms + * + * Return the rms error of the fit. + **********************************************************************/ + +double LLSQ::rms(double m, double c) const { // get error + double error; // total error + + if (total_weight > 0) { + error = sigyy + m * (m * sigxx + 2 * (c * sigx - sigxy)) + c * + (total_weight * c - 2 * sigy); + if (error >= 0) + error = sqrt(error / total_weight); // sqrt of mean + else + error = 0; + } else { + error = 0; // too little + } + return error; +} + + +/********************************************************************** + * LLSQ::pearson + * + * Return the pearson product moment correlation coefficient. + **********************************************************************/ + +double LLSQ::pearson() const { // get correlation + double r = 0.0; // Correlation is 0 if insufficent data. + + double covar = covariance(); + if (covar != 0.0) { + double var_product = x_variance() * y_variance(); + if (var_product > 0.0) + r = covar / sqrt(var_product); + } + return r; +} + +// Returns the x,y means as an FCOORD. +FCOORD LLSQ::mean_point() const { + if (total_weight > 0.0) { + return FCOORD(sigx / total_weight, sigy / total_weight); + } else { + return FCOORD(0.0f, 0.0f); + } +} + +// Returns the sqrt of the mean squared error measured perpendicular from the +// line through mean_point() in the direction dir. +// +// Derivation: +// Lemma: Let v and x_i (i=1..N) be a k-dimensional vectors (1xk matrices). +// Let % be dot product and ' be transpose. Note that: +// Sum[i=1..N] (v % x_i)^2 +// = v * [x_1' x_2' ... x_N'] * [x_1' x_2' .. x_N']' * v' +// If x_i have average 0 we have: +// = v * (N * COVARIANCE_MATRIX(X)) * v' +// Expanded for the case that k = 2, where we treat the dimensions +// as x_i and y_i, this is: +// = v * (N * [VAR(X), COV(X,Y); COV(X,Y) VAR(Y)]) * v' +// Now, we are trying to calculate the mean squared error, where v is +// perpendicular to our line of interest: +// Mean squared error +// = E [ (v % (x_i - x_avg))) ^2 ] +// = Sum (v % (x_i - x_avg))^2 / N +// = v * N * [VAR(X) COV(X,Y); COV(X,Y) VAR(Y)] / N * v' +// = v * [VAR(X) COV(X,Y); COV(X,Y) VAR(Y)] * v' +// = code below +double LLSQ::rms_orth(const FCOORD &dir) const { + FCOORD v = !dir; + v.normalise(); + return sqrt(v.x() * v.x() * x_variance() + + 2 * v.x() * v.y() * covariance() + + v.y() * v.y() * y_variance()); +} + +// Returns the direction of the fitted line as a unit vector, using the +// least mean squared perpendicular distance. The line runs through the +// mean_point, i.e. a point p on the line is given by: +// p = mean_point() + lambda * vector_fit() for some real number lambda. +// Note that the result (0<=x<=1, -1<=y<=-1) is directionally ambiguous +// and may be negated without changing its meaning. +// Fitting a line m + 𝜆v to a set of N points Pi = (xi, yi), where +// m is the mean point (𝝁, 𝝂) and +// v is the direction vector (cos𝜃, sin𝜃) +// The perpendicular distance of each Pi from the line is: +// (Pi - m) x v, where x is the scalar cross product. +// Total squared error is thus: +// E = ∑((xi - 𝝁)sin𝜃 - (yi - 𝝂)cos𝜃)² +// = ∑(xi - 𝝁)²sin²𝜃 - 2∑(xi - 𝝁)(yi - 𝝂)sin𝜃 cos𝜃 + ∑(yi - 𝝂)²cos²𝜃 +// = NVar(xi)sin²𝜃 - 2NCovar(xi, yi)sin𝜃 cos𝜃 + NVar(yi)cos²𝜃 (Eq 1) +// where Var(xi) is the variance of xi, +// and Covar(xi, yi) is the covariance of xi, yi. +// Taking the derivative wrt 𝜃 and setting to 0 to obtain the min/max: +// 0 = 2NVar(xi)sin𝜃 cos𝜃 -2NCovar(xi, yi)(cos²𝜃 - sin²𝜃) -2NVar(yi)sin𝜃 cos𝜃 +// => Covar(xi, yi)(cos²𝜃 - sin²𝜃) = (Var(xi) - Var(yi))sin𝜃 cos𝜃 +// Using double angles: +// 2Covar(xi, yi)cos2𝜃 = (Var(xi) - Var(yi))sin2𝜃 (Eq 2) +// So 𝜃 = 0.5 atan2(2Covar(xi, yi), Var(xi) - Var(yi)) (Eq 3) + +// Because it involves 2𝜃 , Eq 2 has 2 solutions 90 degrees apart, but which +// is the min and which is the max? From Eq1: +// E/N = Var(xi)sin²𝜃 - 2Covar(xi, yi)sin𝜃 cos𝜃 + Var(yi)cos²𝜃 +// and 90 degrees away, using sin/cos equivalences: +// E'/N = Var(xi)cos²𝜃 + 2Covar(xi, yi)sin𝜃 cos𝜃 + Var(yi)sin²𝜃 +// The second error is smaller (making it the minimum) iff +// E'/N < E/N ie: +// (Var(xi) - Var(yi))(cos²𝜃 - sin²𝜃) < -4Covar(xi, yi)sin𝜃 cos𝜃 +// Using double angles: +// (Var(xi) - Var(yi))cos2𝜃 < -2Covar(xi, yi)sin2𝜃 (InEq 1) +// But atan2(2Covar(xi, yi), Var(xi) - Var(yi)) picks 2𝜃 such that: +// sgn(cos2𝜃) = sgn(Var(xi) - Var(yi)) and sgn(sin2𝜃) = sgn(Covar(xi, yi)) +// so InEq1 can *never* be true, making the atan2 result *always* the min! +// In the degenerate case, where Covar(xi, yi) = 0 AND Var(xi) = Var(yi), +// the 2 solutions have equal error and the inequality is still false. +// Therefore the solution really is as trivial as Eq 3. + +// This is equivalent to returning the Principal Component in PCA, or the +// eigenvector corresponding to the largest eigenvalue in the covariance +// matrix. However, atan2 is much simpler! The one reference I found that +// uses this formula is http://web.mit.edu/18.06/www/Essays/tlsfit.pdf but +// that is still a much more complex derivation. It seems Pearson had already +// found this simple solution in 1901. +// http://books.google.com/books?id=WXwvAQAAIAAJ&pg=PA559 +FCOORD LLSQ::vector_fit() const { + double x_var = x_variance(); + double y_var = y_variance(); + double covar = covariance(); + double theta = 0.5 * atan2(2.0 * covar, x_var - y_var); + FCOORD result(cos(theta), sin(theta)); + return result; +} diff --git a/3rdparty/hgOCR/include/ccstruct/linlsq.h b/3rdparty/hgOCR/include/ccstruct/linlsq.h new file mode 100644 index 00000000..d1cea80e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/linlsq.h @@ -0,0 +1,134 @@ +/********************************************************************** + * File: linlsq.h (Formerly llsq.h) + * Description: Linear Least squares fitting code. + * Author: Ray Smith + * Created: Thu Sep 12 08:44:51 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCSTRUCT_LINLSQ_H_ +#define TESSERACT_CCSTRUCT_LINLSQ_H_ + +#include "points.h" +#include "params.h" + +class LLSQ { + public: + LLSQ() { // constructor + clear(); // set to zeros + } + void clear(); // initialize + + // Adds an element with a weight of 1. + void add(double x, double y); + // Adds an element with a specified weight. + void add(double x, double y, double weight); + // Adds a whole LLSQ. + void add(const LLSQ& other); + // Deletes an element with a weight of 1. + void remove(double x, double y); + inT32 count() const { // no of elements + return static_cast(total_weight + 0.5); + } + + double m() const; // get gradient + double c(double m) const; // get constant + double rms(double m, double c) const; // get error + double pearson() const; // get correlation coefficient. + + // Returns the x,y means as an FCOORD. + FCOORD mean_point() const; + + // Returns the average sum of squared perpendicular error from a line + // through mean_point() in the direction dir. + double rms_orth(const FCOORD &dir) const; + + // Returns the direction of the fitted line as a unit vector, using the + // least mean squared perpendicular distance. The line runs through the + // mean_point, i.e. a point p on the line is given by: + // p = mean_point() + lambda * vector_fit() for some real number lambda. + // Note that the result (0<=x<=1, -1<=y<=-1) is directionally ambiguous + // and may be negated without changing its meaning, since a line is only + // unique to a range of pi radians. + // Modernists prefer to think of this as an Eigenvalue problem, but + // Pearson had the simple solution in 1901. + // + // Note that this is equivalent to returning the Principal Component in PCA, + // or the eigenvector corresponding to the largest eigenvalue in the + // covariance matrix. + FCOORD vector_fit() const; + + // Returns the covariance. + double covariance() const { + if (total_weight > 0.0) + return (sigxy - sigx * sigy / total_weight) / total_weight; + else + return 0.0; + } + double x_variance() const { + if (total_weight > 0.0) + return (sigxx - sigx * sigx / total_weight) / total_weight; + else + return 0.0; + } + double y_variance() const { + if (total_weight > 0.0) + return (sigyy - sigy * sigy / total_weight) / total_weight; + else + return 0.0; + } + + private: + double total_weight; // no of elements or sum of weights. + double sigx; // sum of x + double sigy; // sum of y + double sigxx; // sum x squared + double sigxy; // sum of xy + double sigyy; // sum y squared +}; + + +// Returns the median value of the vector, given that the values are +// circular, with the given modulus. Values may be signed or unsigned, +// eg range from -pi to pi (modulus 2pi) or from 0 to 2pi (modulus 2pi). +// NOTE that the array is shuffled, but the time taken is linear. +// An assumption is made that most of the values are spread over no more than +// half the range, but wrap-around is accounted for if the median is near +// the wrap-around point. +// Cannot be a member of GenericVector, as it makes heavy used of LLSQ. +// T must be an integer or float/double type. +template T MedianOfCircularValues(T modulus, GenericVector* v) { + LLSQ stats; + T halfrange = static_cast(modulus / 2); + int num_elements = v->size(); + for (int i = 0; i < num_elements; ++i) { + stats.add((*v)[i], (*v)[i] + halfrange); + } + bool offset_needed = stats.y_variance() < stats.x_variance(); + if (offset_needed) { + for (int i = 0; i < num_elements; ++i) { + (*v)[i] += halfrange; + } + } + int median_index = v->choose_nth_item(num_elements / 2); + if (offset_needed) { + for (int i = 0; i < num_elements; ++i) { + (*v)[i] -= halfrange; + } + } + return (*v)[median_index]; +} + + +#endif // TESSERACT_CCSTRUCT_LINLSQ_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/matrix.cpp b/3rdparty/hgOCR/include/ccstruct/matrix.cpp new file mode 100644 index 00000000..88d2340e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/matrix.cpp @@ -0,0 +1,159 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: matrix.c (Formerly matrix.c) + * Description: Ratings matrix code. (Used by associator) + * Author: Mark Seaman, OCR Technology + * Created: Wed May 16 13:18:47 1990 + * Modified: Wed Mar 20 09:44:47 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1990, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "matrix.h" + +#include "callcpp.h" +#include "ratngs.h" +#include "tprintf.h" +#include "unicharset.h" + +// Returns true if there are any real classification results. +bool MATRIX::Classified(int col, int row, int wildcard_id) const { + if (get(col, row) == NOT_CLASSIFIED) return false; + BLOB_CHOICE_IT b_it(get(col, row)); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + BLOB_CHOICE* choice = b_it.data(); + if (choice->IsClassified()) + return true; + } + return false; +} + +// Expands the existing matrix in-place to make the band wider, without +// losing any existing data. +void MATRIX::IncreaseBandSize(int bandwidth) { + ResizeWithCopy(dimension(), bandwidth); +} + +// Returns a bigger MATRIX with a new column and row in the matrix in order +// to split the blob at the given (ind,ind) diagonal location. +// Entries are relocated to the new MATRIX using the transformation defined +// by MATRIX_COORD::MapForSplit. +// Transfers the pointer data to the new MATRIX and deletes *this. +MATRIX* MATRIX::ConsumeAndMakeBigger(int ind) { + int dim = dimension(); + int band_width = bandwidth(); + // Check to see if bandwidth needs expanding. + for (int col = ind; col >= 0 && col > ind - band_width; --col) { + if (array_[col * band_width + band_width - 1] != empty_) { + ++band_width; + break; + } + } + MATRIX* result = new MATRIX(dim + 1, band_width); + + for (int col = 0; col < dim; ++col) { + for (int row = col; row < dim && row < col + bandwidth(); ++row) { + MATRIX_COORD coord(col, row); + coord.MapForSplit(ind); + BLOB_CHOICE_LIST* choices = get(col, row); + if (choices != NULL) { + // Correct matrix location on each choice. + BLOB_CHOICE_IT bc_it(choices); + for (bc_it.mark_cycle_pt(); !bc_it.cycled_list(); bc_it.forward()) { + BLOB_CHOICE* choice = bc_it.data(); + choice->set_matrix_cell(coord.col, coord.row); + } + ASSERT_HOST(coord.Valid(*result)); + result->put(coord.col, coord.row, choices); + } + } + } + delete this; + return result; +} + +// Makes and returns a deep copy of *this, including all the BLOB_CHOICEs +// on the lists, but not any LanguageModelState that may be attached to the +// BLOB_CHOICEs. +MATRIX* MATRIX::DeepCopy() const { + int dim = dimension(); + int band_width = bandwidth(); + MATRIX* result = new MATRIX(dim, band_width); + for (int col = 0; col < dim; ++col) { + for (int row = col; row < dim && row < col + band_width; ++row) { + BLOB_CHOICE_LIST* choices = get(col, row); + if (choices != NULL) { + BLOB_CHOICE_LIST* copy_choices = new BLOB_CHOICE_LIST; + copy_choices->deep_copy(choices, &BLOB_CHOICE::deep_copy); + result->put(col, row, copy_choices); + } + } + } + return result; +} + +// Print the best guesses out of the match rating matrix. +void MATRIX::print(const UNICHARSET &unicharset) const { + tprintf("Ratings Matrix (top 3 choices)\n"); + int dim = dimension(); + int band_width = bandwidth(); + int row, col; + for (col = 0; col < dim; ++col) { + for (row = col; row < dim && row < col + band_width; ++row) { + BLOB_CHOICE_LIST *rating = this->get(col, row); + if (rating == NOT_CLASSIFIED) continue; + BLOB_CHOICE_IT b_it(rating); + tprintf("col=%d row=%d ", col, row); + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + tprintf("%s rat=%g cert=%g " , + unicharset.id_to_unichar(b_it.data()->unichar_id()), + b_it.data()->rating(), b_it.data()->certainty()); + } + tprintf("\n"); + } + tprintf("\n"); + } + tprintf("\n"); + for (col = 0; col < dim; ++col) tprintf("\t%d", col); + tprintf("\n"); + for (row = 0; row < dim; ++row) { + for (col = 0; col <= row; ++col) { + if (col == 0) tprintf("%d\t", row); + if (row >= col + band_width) { + tprintf(" \t"); + continue; + } + BLOB_CHOICE_LIST *rating = this->get(col, row); + if (rating != NOT_CLASSIFIED) { + BLOB_CHOICE_IT b_it(rating); + int counter = 0; + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + tprintf("%s ", + unicharset.id_to_unichar(b_it.data()->unichar_id())); + ++counter; + if (counter == 3) break; + } + tprintf("\t"); + } else { + tprintf(" \t"); + } + } + tprintf("\n"); + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/matrix.h b/3rdparty/hgOCR/include/ccstruct/matrix.h new file mode 100644 index 00000000..4b5b242a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/matrix.h @@ -0,0 +1,635 @@ +/* -*-C-*- + ****************************************************************************** + * File: matrix.h (Formerly matrix.h) + * Description: Generic 2-d array/matrix and banded triangular matrix class. + * Author: Ray Smith + * TODO(rays) Separate from ratings matrix, which it also contains: + * + * Descrition: Ratings matrix class (specialization of banded matrix). + * Segmentation search matrix of lists of BLOB_CHOICE. + * Author: Mark Seaman, OCR Technology + * Created: Wed May 16 13:22:06 1990 + * Modified: Tue Mar 19 16:00:20 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1990, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ +#ifndef TESSERACT_CCSTRUCT_MATRIX_H__ +#define TESSERACT_CCSTRUCT_MATRIX_H__ + +#include +#include "kdpair.h" +#include "points.h" +#include "serialis.h" +#include "unicharset.h" + +class BLOB_CHOICE; +class BLOB_CHOICE_LIST; + +#define NOT_CLASSIFIED reinterpret_cast(0) + +// A generic class to hold a 2-D matrix with entries of type T, but can also +// act as a base class for other implementations, such as a triangular or +// banded matrix. +template +class GENERIC_2D_ARRAY { + public: + // Initializes the array size, and empty element, but cannot allocate memory + // for the subclasses or initialize because calls to the num_elements + // member will be routed to the base class implementation. Subclasses can + // either pass the memory in, or allocate after by calling Resize(). + GENERIC_2D_ARRAY(int dim1, int dim2, const T& empty, T* array) + : empty_(empty), dim1_(dim1), dim2_(dim2), array_(array) { + size_allocated_ = dim1 * dim2; + } + // Original constructor for a full rectangular matrix DOES allocate memory + // and initialize it to empty. + GENERIC_2D_ARRAY(int dim1, int dim2, const T& empty) + : empty_(empty), dim1_(dim1), dim2_(dim2) { + int new_size = dim1 * dim2; + array_ = new T[new_size]; + size_allocated_ = new_size; + for (int i = 0; i < size_allocated_; ++i) + array_[i] = empty_; + } + // Default constructor for array allocation. Use Resize to set the size. + GENERIC_2D_ARRAY() + : array_(NULL), empty_(static_cast(0)), dim1_(0), dim2_(0), + size_allocated_(0) { + } + GENERIC_2D_ARRAY(const GENERIC_2D_ARRAY& src) + : array_(NULL), empty_(static_cast(0)), dim1_(0), dim2_(0), + size_allocated_(0) { + *this = src; + } + virtual ~GENERIC_2D_ARRAY() { delete[] array_; } + + void operator=(const GENERIC_2D_ARRAY& src) { + ResizeNoInit(src.dim1(), src.dim2()); + memcpy(array_, src.array_, num_elements() * sizeof(array_[0])); + } + + // Reallocate the array to the given size. Does not keep old data, but does + // not initialize the array either. + void ResizeNoInit(int size1, int size2) { + int new_size = size1 * size2; + if (new_size > size_allocated_) { + delete [] array_; + array_ = new T[new_size]; + size_allocated_ = new_size; + } + dim1_ = size1; + dim2_ = size2; + } + + // Reallocate the array to the given size. Does not keep old data. + void Resize(int size1, int size2, const T& empty) { + empty_ = empty; + ResizeNoInit(size1, size2); + Clear(); + } + + // Reallocate the array to the given size, keeping old data. + void ResizeWithCopy(int size1, int size2) { + if (size1 != dim1_ || size2 != dim2_) { + int new_size = size1 * size2; + T* new_array = new T[new_size]; + for (int col = 0; col < size1; ++col) { + for (int row = 0; row < size2; ++row) { + int old_index = col * dim2() + row; + int new_index = col * size2 + row; + if (col < dim1_ && row < dim2_) { + new_array[new_index] = array_[old_index]; + } else { + new_array[new_index] = empty_; + } + } + } + delete[] array_; + array_ = new_array; + dim1_ = size1; + dim2_ = size2; + size_allocated_ = new_size; + } + } + + // Sets all the elements of the array to the empty value. + void Clear() { + int total_size = num_elements(); + for (int i = 0; i < total_size; ++i) + array_[i] = empty_; + } + + // Writes to the given file. Returns false in case of error. + // Only works with bitwise-serializeable types! + bool Serialize(FILE* fp) const { + if (!SerializeSize(fp)) return false; + if (fwrite(&empty_, sizeof(empty_), 1, fp) != 1) return false; + int size = num_elements(); + if (fwrite(array_, sizeof(*array_), size, fp) != size) return false; + return true; + } + bool Serialize(tesseract::TFile* fp) const { + if (!SerializeSize(fp)) return false; + if (fp->FWrite(&empty_, sizeof(empty_), 1) != 1) return false; + int size = num_elements(); + if (fp->FWrite(array_, sizeof(*array_), size) != size) return false; + return true; + } + + // Reads from the given file. Returns false in case of error. + // Only works with bitwise-serializeable types! + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp) { + if (!DeSerializeSize(swap, fp)) return false; + if (fread(&empty_, sizeof(empty_), 1, fp) != 1) return false; + if (swap) ReverseN(&empty_, sizeof(empty_)); + int size = num_elements(); + if (fread(array_, sizeof(*array_), size, fp) != size) return false; + if (swap) { + for (int i = 0; i < size; ++i) + ReverseN(&array_[i], sizeof(array_[i])); + } + return true; + } + bool DeSerialize(bool swap, tesseract::TFile* fp) { + if (!DeSerializeSize(swap, fp)) return false; + if (fp->FRead(&empty_, sizeof(empty_), 1) != 1) return false; + if (swap) ReverseN(&empty_, sizeof(empty_)); + int size = num_elements(); + if (fp->FRead(array_, sizeof(*array_), size) != size) return false; + if (swap) { + for (int i = 0; i < size; ++i) + ReverseN(&array_[i], sizeof(array_[i])); + } + return true; + } + + // Writes to the given file. Returns false in case of error. + // Assumes a T::Serialize(FILE*) const function. + bool SerializeClasses(FILE* fp) const { + if (!SerializeSize(fp)) return false; + if (!empty_.Serialize(fp)) return false; + int size = num_elements(); + for (int i = 0; i < size; ++i) { + if (!array_[i].Serialize(fp)) return false; + } + return true; + } + + // Reads from the given file. Returns false in case of error. + // Assumes a T::DeSerialize(bool swap, FILE*) function. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerializeClasses(bool swap, FILE* fp) { + if (!DeSerializeSize(swap, fp)) return false; + if (!empty_.DeSerialize(swap, fp)) return false; + int size = num_elements(); + for (int i = 0; i < size; ++i) { + if (!array_[i].DeSerialize(swap, fp)) return false; + } + return true; + } + + // Provide the dimensions of this rectangular matrix. + int dim1() const { return dim1_; } + int dim2() const { return dim2_; } + // Returns the number of elements in the array. + // Banded/triangular matrices may override. + virtual int num_elements() const { return dim1_ * dim2_; } + + // Expression to select a specific location in the matrix. The matrix is + // stored COLUMN-major, so the left-most index is the most significant. + // This allows [][] access to use indices in the same order as (,). + virtual int index(int column, int row) const { + return (column * dim2_ + row); + } + + // Put a list element into the matrix at a specific location. + void put(ICOORD pos, const T& thing) { + array_[this->index(pos.x(), pos.y())] = thing; + } + void put(int column, int row, const T& thing) { + array_[this->index(column, row)] = thing; + } + + // Get the item at a specified location from the matrix. + T get(ICOORD pos) const { + return array_[this->index(pos.x(), pos.y())]; + } + T get(int column, int row) const { + return array_[this->index(column, row)]; + } + // Return a reference to the element at the specified location. + const T& operator()(int column, int row) const { + return array_[this->index(column, row)]; + } + T& operator()(int column, int row) { + return array_[this->index(column, row)]; + } + // Allow access using array[column][row]. NOTE that the indices are + // in the same left-to-right order as the () indexing. + T* operator[](int column) { + return &array_[this->index(column, 0)]; + } + const T* operator[](int column) const { + return &array_[this->index(column, 0)]; + } + + // Adds addend to *this, element-by-element. + void operator+=(const GENERIC_2D_ARRAY& addend) { + if (dim2_ == addend.dim2_) { + // Faster if equal size in the major dimension. + int size = MIN(num_elements(), addend.num_elements()); + for (int i = 0; i < size; ++i) { + array_[i] += addend.array_[i]; + } + } else { + for (int x = 0; x < dim1_; x++) { + for (int y = 0; y < dim2_; y++) { + (*this)(x, y) += addend(x, y); + } + } + } + } + // Subtracts minuend from *this, element-by-element. + void operator-=(const GENERIC_2D_ARRAY& minuend) { + if (dim2_ == minuend.dim2_) { + // Faster if equal size in the major dimension. + int size = MIN(num_elements(), minuend.num_elements()); + for (int i = 0; i < size; ++i) { + array_[i] -= minuend.array_[i]; + } + } else { + for (int x = 0; x < dim1_; x++) { + for (int y = 0; y < dim2_; y++) { + (*this)(x, y) -= minuend(x, y); + } + } + } + } + // Adds addend to all elements. + void operator+=(const T& addend) { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + array_[i] += addend; + } + } + // Multiplies *this by factor, element-by-element. + void operator*=(const T& factor) { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + array_[i] *= factor; + } + } + // Clips *this to the given range. + void Clip(const T& rangemin, const T& rangemax) { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + array_[i] = ClipToRange(array_[i], rangemin, rangemax); + } + } + // Returns true if all elements of *this are within the given range. + // Only uses operator< + bool WithinBounds(const T& rangemin, const T& rangemax) const { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + const T& value = array_[i]; + if (value < rangemin || rangemax < value) + return false; + } + return true; + } + // Normalize the whole array. + double Normalize() { + int size = num_elements(); + if (size <= 0) return 0.0; + // Compute the mean. + double mean = 0.0; + for (int i = 0; i < size; ++i) { + mean += array_[i]; + } + mean /= size; + // Subtract the mean and compute the standard deviation. + double sd = 0.0; + for (int i = 0; i < size; ++i) { + double normed = array_[i] - mean; + array_[i] = normed; + sd += normed * normed; + } + sd = sqrt(sd / size); + if (sd > 0.0) { + // Divide by the sd. + for (int i = 0; i < size; ++i) { + array_[i] /= sd; + } + } + return sd; + } + + // Returns the maximum value of the array. + T Max() const { + int size = num_elements(); + if (size <= 0) return empty_; + // Compute the max. + T max_value = array_[0]; + for (int i = 1; i < size; ++i) { + const T& value = array_[i]; + if (value > max_value) max_value = value; + } + return max_value; + } + + // Returns the maximum absolute value of the array. + T MaxAbs() const { + int size = num_elements(); + if (size <= 0) return empty_; + // Compute the max. + T max_abs = static_cast(0); + for (int i = 0; i < size; ++i) { + T value = static_cast(fabs(array_[i])); + if (value > max_abs) max_abs = value; + } + return max_abs; + } + + // Accumulates the element-wise sums of squares of src into *this. + void SumSquares(const GENERIC_2D_ARRAY& src) { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + array_[i] += src.array_[i] * src.array_[i]; + } + } + + // Scales each element using the ada-grad algorithm, ie array_[i] by + // sqrt(num_samples/max(1,sqsum[i])). + void AdaGradScaling(const GENERIC_2D_ARRAY& sqsum, int num_samples) { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + array_[i] *= sqrt(num_samples / MAX(1.0, sqsum.array_[i])); + } + } + + void AssertFinite() const { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + ASSERT_HOST(isfinite(array_[i])); + } + } + + // REGARDLESS OF THE CURRENT DIMENSIONS, treats the data as a + // num_dims-dimensional array/tensor with dimensions given by dims, (ordered + // from most significant to least significant, the same as standard C arrays) + // and moves src_dim to dest_dim, with the initial dest_dim and any dimensions + // in between shifted towards the hole left by src_dim. Example: + // Current data content: array_=[0, 1, 2, ....119] + // perhaps *this may be of dim[40, 3], with values [[0, 1, 2][3, 4, 5]... + // but the current dimensions are irrelevant. + // num_dims = 4, dims=[5, 4, 3, 2] + // src_dim=3, dest_dim=1 + // tensor=[[[[0, 1][2, 3][4, 5]] + // [[6, 7][8, 9][10, 11]] + // [[12, 13][14, 15][16, 17]] + // [[18, 19][20, 21][22, 23]]] + // [[[24, 25]... + // output dims =[5, 2, 4, 3] + // output tensor=[[[[0, 2, 4][6, 8, 10][12, 14, 16][18, 20, 22]] + // [[1, 3, 5][7, 9, 11][13, 15, 17][19, 21, 23]]] + // [[[24, 26, 28]... + // which is stored in the array_ as: + // [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 1, 3, 5, 7, 9, 11, 13...] + // NOTE: the 2 stored matrix dimensions are simply copied from *this. To + // change the dimensions after the transpose, use ResizeNoInit. + // Higher dimensions above 2 are strictly the responsibility of the caller. + void RotatingTranspose(const int* dims, int num_dims, int src_dim, + int dest_dim, GENERIC_2D_ARRAY* result) const { + int max_d = MAX(src_dim, dest_dim); + int min_d = MIN(src_dim, dest_dim); + // In a tensor of shape [d0, d1... min_d, ... max_d, ... dn-2, dn-1], the + // ends outside of min_d and max_d are unaffected, with [max_d +1, dn-1] + // being contiguous blocks of data that will move together, and + // [d0, min_d -1] being replicas of the transpose operation. + // num_replicas represents the large dimensions unchanged by the operation. + // move_size represents the small dimensions unchanged by the operation. + // src_step represents the stride in the src between each adjacent group + // in the destination. + int num_replicas = 1, move_size = 1, src_step = 1; + for (int d = 0; d < min_d; ++d) num_replicas *= dims[d]; + for (int d = max_d + 1; d < num_dims; ++d) move_size *= dims[d]; + for (int d = src_dim + 1; d < num_dims; ++d) src_step *= dims[d]; + if (src_dim > dest_dim) src_step *= dims[src_dim]; + // wrap_size is the size of a single replica, being the amount that is + // handled num_replicas times. + int wrap_size = move_size; + for (int d = min_d; d <= max_d; ++d) wrap_size *= dims[d]; + result->ResizeNoInit(dim1_, dim2_); + result->empty_ = empty_; + const T* src = array_; + T* dest = result->array_; + for (int replica = 0; replica < num_replicas; ++replica) { + for (int start = 0; start < src_step; start += move_size) { + for (int pos = start; pos < wrap_size; pos += src_step) { + memcpy(dest, src + pos, sizeof(*dest) * move_size); + dest += move_size; + } + } + src += wrap_size; + } + } + + // Delete objects pointed to by array_[i]. + void delete_matrix_pointers() { + int size = num_elements(); + for (int i = 0; i < size; ++i) { + T matrix_cell = array_[i]; + if (matrix_cell != empty_) + delete matrix_cell; + } + } + + protected: + // Factored helper to serialize the size. + bool SerializeSize(FILE* fp) const { + inT32 size = dim1_; + if (fwrite(&size, sizeof(size), 1, fp) != 1) return false; + size = dim2_; + if (fwrite(&size, sizeof(size), 1, fp) != 1) return false; + return true; + } + bool SerializeSize(tesseract::TFile* fp) const { + inT32 size = dim1_; + if (fp->FWrite(&size, sizeof(size), 1) != 1) return false; + size = dim2_; + if (fp->FWrite(&size, sizeof(size), 1) != 1) return false; + return true; + } + // Factored helper to deserialize the size. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerializeSize(bool swap, FILE* fp) { + inT32 size1, size2; + if (fread(&size1, sizeof(size1), 1, fp) != 1) return false; + if (fread(&size2, sizeof(size2), 1, fp) != 1) return false; + if (swap) { + ReverseN(&size1, sizeof(size1)); + ReverseN(&size2, sizeof(size2)); + } + Resize(size1, size2, empty_); + return true; + } + bool DeSerializeSize(bool swap, tesseract::TFile* fp) { + inT32 size1, size2; + if (fp->FRead(&size1, sizeof(size1), 1) != 1) return false; + if (fp->FRead(&size2, sizeof(size2), 1) != 1) return false; + if (swap) { + ReverseN(&size1, sizeof(size1)); + ReverseN(&size2, sizeof(size2)); + } + Resize(size1, size2, empty_); + return true; + } + + T* array_; + T empty_; // The unused cell. + int dim1_; // Size of the 1st dimension in indexing functions. + int dim2_; // Size of the 2nd dimension in indexing functions. + // The total size to which the array can be expanded before a realloc is + // needed. If Resize is used, memory is retained so it can be re-expanded + // without a further alloc, and this stores the allocated size. + int size_allocated_; +}; + +// A generic class to store a banded triangular matrix with entries of type T. +// In this array, the nominally square matrix is dim1_ x dim1_, and dim2_ is +// the number of bands, INCLUDING the diagonal. The storage is thus of size +// dim1_ * dim2_ and index(col, row) = col * dim2_ + row - col, and an +// assert will fail if row < col or row - col >= dim2. +template +class BandTriMatrix : public GENERIC_2D_ARRAY { + public: + // Allocate a piece of memory to hold a 2d-array of the given dimension. + // Initialize all the elements of the array to empty instead of assuming + // that a default constructor can be used. + BandTriMatrix(int dim1, int dim2, const T& empty) + : GENERIC_2D_ARRAY(dim1, dim2, empty) { + } + // The default destructor will do. + + // Provide the dimensions of this matrix. + // dimension is the size of the nominally square matrix. + int dimension() const { return this->dim1_; } + // bandwidth is the number of bands in the matrix, INCLUDING the diagonal. + int bandwidth() const { return this->dim2_; } + + // Expression to select a specific location in the matrix. The matrix is + // stored COLUMN-major, so the left-most index is the most significant. + // This allows [][] access to use indices in the same order as (,). + virtual int index(int column, int row) const { + ASSERT_HOST(row >= column); + ASSERT_HOST(row - column < this->dim2_); + return column * this->dim2_ + row - column; + } + + // Appends array2 corner-to-corner to *this, making an array of dimension + // equal to the sum of the individual dimensions. + // array2 is not destroyed, but is left empty, as all elements are moved + // to *this. + void AttachOnCorner(BandTriMatrix* array2) { + int new_dim1 = this->dim1_ + array2->dim1_; + int new_dim2 = MAX(this->dim2_, array2->dim2_); + T* new_array = new T[new_dim1 * new_dim2]; + for (int col = 0; col < new_dim1; ++col) { + for (int j = 0; j < new_dim2; ++j) { + int new_index = col * new_dim2 + j; + if (col < this->dim1_ && j < this->dim2_) { + new_array[new_index] = this->get(col, col + j); + } else if (col >= this->dim1_ && j < array2->dim2_) { + new_array[new_index] = array2->get(col - this->dim1_, + col - this->dim1_ + j); + array2->put(col - this->dim1_, col - this->dim1_ + j, NULL); + } else { + new_array[new_index] = this->empty_; + } + } + } + delete[] this->array_; + this->array_ = new_array; + this->dim1_ = new_dim1; + this->dim2_ = new_dim2; + } +}; + +class MATRIX : public BandTriMatrix { + public: + MATRIX(int dimension, int bandwidth) + : BandTriMatrix(dimension, bandwidth, NOT_CLASSIFIED) {} + + // Returns true if there are any real classification results. + bool Classified(int col, int row, int wildcard_id) const; + + // Expands the existing matrix in-place to make the band wider, without + // losing any existing data. + void IncreaseBandSize(int bandwidth); + + // Returns a bigger MATRIX with a new column and row in the matrix in order + // to split the blob at the given (ind,ind) diagonal location. + // Entries are relocated to the new MATRIX using the transformation defined + // by MATRIX_COORD::MapForSplit. + // Transfers the pointer data to the new MATRIX and deletes *this. + MATRIX* ConsumeAndMakeBigger(int ind); + + // Makes and returns a deep copy of *this, including all the BLOB_CHOICEs + // on the lists, but not any LanguageModelState that may be attached to the + // BLOB_CHOICEs. + MATRIX* DeepCopy() const; + + // Print a shortened version of the contents of the matrix. + void print(const UNICHARSET &unicharset) const; +}; + +struct MATRIX_COORD { + static void Delete(void *arg) { + MATRIX_COORD *c = static_cast(arg); + delete c; + } + // Default constructor required by GenericHeap. + MATRIX_COORD() : col(0), row(0) {} + MATRIX_COORD(int c, int r): col(c), row(r) {} + ~MATRIX_COORD() {} + + bool Valid(const MATRIX &m) const { + return 0 <= col && col < m.dimension() && + col <= row && row < col + m.bandwidth() && row < m.dimension(); + } + + // Remaps the col,row pair to split the blob at the given (ind,ind) diagonal + // location. + // Entries at (i,j) for i in [0,ind] and j in [ind,dim) move to (i,j+1), + // making a new row at ind. + // Entries at (i,j) for i in [ind+1,dim) and j in [i,dim) move to (i+i,j+1), + // making a new column at ind+1. + void MapForSplit(int ind) { + ASSERT_HOST(row >= col); + if (col > ind) ++col; + if (row >= ind) ++row; + ASSERT_HOST(row >= col); + } + + int col; + int row; +}; + +// The MatrixCoordPair contains a MATRIX_COORD and its priority. +typedef tesseract::KDPairInc MatrixCoordPair; + +#endif // TESSERACT_CCSTRUCT_MATRIX_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/mod128.cpp b/3rdparty/hgOCR/include/ccstruct/mod128.cpp new file mode 100644 index 00000000..4e5f4bd3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/mod128.cpp @@ -0,0 +1,88 @@ +/********************************************************************** + * File: mod128.c (Formerly dir128.c) + * Description: Code to convert a DIR128 to an ICOORD. + * Author: Ray Smith + * Created: Tue Oct 22 11:56:09 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "mod128.h" + +const inT16 idirtab[] = { + 1000, 0, 998, 49, 995, 98, 989, 146, + 980, 195, 970, 242, 956, 290, 941, 336, + 923, 382, 903, 427, 881, 471, 857, 514, + 831, 555, 803, 595, 773, 634, 740, 671, + 707, 707, 671, 740, 634, 773, 595, 803, + 555, 831, 514, 857, 471, 881, 427, 903, + 382, 923, 336, 941, 290, 956, 242, 970, + 195, 980, 146, 989, 98, 995, 49, 998, + 0, 1000, -49, 998, -98, 995, -146, 989, + -195, 980, -242, 970, -290, 956, -336, 941, + -382, 923, -427, 903, -471, 881, -514, 857, + -555, 831, -595, 803, -634, 773, -671, 740, + -707, 707, -740, 671, -773, 634, -803, 595, + -831, 555, -857, 514, -881, 471, -903, 427, + -923, 382, -941, 336, -956, 290, -970, 242, + -980, 195, -989, 146, -995, 98, -998, 49, + -1000, 0, -998, -49, -995, -98, -989, -146, + -980, -195, -970, -242, -956, -290, -941, -336, + -923, -382, -903, -427, -881, -471, -857, -514, + -831, -555, -803, -595, -773, -634, -740, -671, + -707, -707, -671, -740, -634, -773, -595, -803, + -555, -831, -514, -857, -471, -881, -427, -903, + -382, -923, -336, -941, -290, -956, -242, -970, + -195, -980, -146, -989, -98, -995, -49, -998, + 0, -1000, 49, -998, 98, -995, 146, -989, + 195, -980, 242, -970, 290, -956, 336, -941, + 382, -923, 427, -903, 471, -881, 514, -857, + 555, -831, 595, -803, 634, -773, 671, -740, + 707, -707, 740, -671, 773, -634, 803, -595, + 831, -555, 857, -514, 881, -471, 903, -427, + 923, -382, 941, -336, 956, -290, 970, -242, + 980, -195, 989, -146, 995, -98, 998, -49 +}; + +const ICOORD *dirtab = (ICOORD *) idirtab; + +/********************************************************************** + * DIR128::DIR128 + * + * Quantize the direction of an FCOORD to make a DIR128. + **********************************************************************/ + +DIR128::DIR128( //from fcoord + const FCOORD fc //vector to quantize + ) { + int high, low, current; //binary search + + low = 0; + if (fc.y () == 0) { + if (fc.x () >= 0) + dir = 0; + else + dir = MODULUS / 2; + return; + } + high = MODULUS; + do { + current = (high + low) / 2; + if (dirtab[current] * fc >= 0) + low = current; + else + high = current; + } + while (high - low > 1); + dir = low; +} diff --git a/3rdparty/hgOCR/include/ccstruct/mod128.h b/3rdparty/hgOCR/include/ccstruct/mod128.h new file mode 100644 index 00000000..c0e71a42 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/mod128.h @@ -0,0 +1,84 @@ +/********************************************************************** + * File: mod128.h (Formerly dir128.h) + * Description: Header for class which implements modulo arithmetic. + * Author: Ray Smith + * Created: Tue Mar 26 17:48:13 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef MOD128_H +#define MOD128_H + +#include "points.h" + +#define MODULUS 128 /*range of directions */ +#define DIRBITS 7 //no of bits used +#define DIRSCALE 1000 //length of vector + +class DLLSYM DIR128 +{ + public: + DIR128() { + } //empty constructor + + DIR128( //constructor + inT16 value) { //value to assign + value %= MODULUS; //modulo arithmetic + if (value < 0) + value += MODULUS; //done properly + dir = (inT8) value; + } + DIR128(const FCOORD fc); //quantize vector + + DIR128 & operator= ( //assign of inT16 + inT16 value) { //value to assign + value %= MODULUS; //modulo arithmetic + if (value < 0) + value += MODULUS; //done properly + dir = (inT8) value; + return *this; + } + inT8 operator- ( //subtraction + const DIR128 & minus) const//for signed result + { + //result + inT16 result = dir - minus.dir; + + if (result > MODULUS / 2) + result -= MODULUS; //get in range + else if (result < -MODULUS / 2) + result += MODULUS; + return (inT8) result; + } + DIR128 operator+ ( //addition + const DIR128 & add) const //of itself + { + DIR128 result; //sum + + result = dir + add.dir; //let = do the work + return result; + } + DIR128 & operator+= ( //same as + + const DIR128 & add) { + *this = dir + add.dir; //let = do the work + return *this; + } + inT8 get_dir() const { //access function + return dir; + } + + private: + inT8 dir; //a direction +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/normalis.cpp b/3rdparty/hgOCR/include/ccstruct/normalis.cpp new file mode 100644 index 00000000..ddf6dbf3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/normalis.cpp @@ -0,0 +1,573 @@ +/********************************************************************** + * File: normalis.cpp (Formerly denorm.c) + * Description: Code for the DENORM class. + * Author: Ray Smith + * Created: Thu Apr 23 09:22:43 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "normalis.h" + +#include + +#include "allheaders.h" +#include "blobs.h" +#include "helpers.h" +#include "matrix.h" +#include "ocrblock.h" +#include "unicharset.h" +#include "werd.h" + +// Tolerance in pixels used for baseline and xheight on non-upper/lower scripts. +const int kSloppyTolerance = 4; +// Final tolerance in pixels added to the computed xheight range. +const float kFinalPixelTolerance = 0.125f; + +DENORM::DENORM() { + Init(); +} + +DENORM::DENORM(const DENORM &src) { + rotation_ = NULL; + *this = src; +} + + +DENORM & DENORM::operator=(const DENORM & src) { + Clear(); + inverse_ = src.inverse_; + predecessor_ = src.predecessor_; + pix_ = src.pix_; + block_ = src.block_; + if (src.rotation_ == NULL) + rotation_ = NULL; + else + rotation_ = new FCOORD(*src.rotation_); + x_origin_ = src.x_origin_; + y_origin_ = src.y_origin_; + x_scale_ = src.x_scale_; + y_scale_ = src.y_scale_; + final_xshift_ = src.final_xshift_; + final_yshift_ = src.final_yshift_; + return *this; +} + +DENORM::~DENORM() { + Clear(); +} + +// Initializes the denorm for a transformation. For details see the large +// comment in normalis.h. +// Arguments: +// block: if not NULL, then this is the first transformation, and +// block->re_rotation() needs to be used after the Denorm +// transformation to get back to the image coords. +// rotation: if not NULL, apply this rotation after translation to the +// origin and scaling. (Usually a classify rotation.) +// predecessor: if not NULL, then predecessor has been applied to the +// input space and needs to be undone to complete the inverse. +// The above pointers are not owned by this DENORM and are assumed to live +// longer than this denorm, except rotation, which is deep copied on input. +// +// x_origin: The x origin which will be mapped to final_xshift in the result. +// y_origin: The y origin which will be mapped to final_yshift in the result. +// Added to result of row->baseline(x) if not NULL. +// +// x_scale: scale factor for the x-coordinate. +// y_scale: scale factor for the y-coordinate. Ignored if segs is given. +// Note that these scale factors apply to the same x and y system as the +// x-origin and y-origin apply, ie after any block rotation, but before +// the rotation argument is applied. +// +// final_xshift: The x component of the final translation. +// final_yshift: The y component of the final translation. +void DENORM::SetupNormalization(const BLOCK* block, + const FCOORD* rotation, + const DENORM* predecessor, + float x_origin, float y_origin, + float x_scale, float y_scale, + float final_xshift, float final_yshift) { + Clear(); + block_ = block; + if (rotation == NULL) + rotation_ = NULL; + else + rotation_ = new FCOORD(*rotation); + predecessor_ = predecessor; + x_origin_ = x_origin; + y_origin_ = y_origin; + x_scale_ = x_scale; + y_scale_ = y_scale; + final_xshift_ = final_xshift; + final_yshift_ = final_yshift; +} + +// Helper for SetupNonLinear computes an image of shortest run-lengths from +// the x/y edges provided. +// Based on "A nonlinear normalization method for handprinted Kanji character +// recognition -- line density equalization" by Hiromitsu Yamada et al. +// Eg below is an O in a 1-pixel margin-ed bounding box and the corresponding +// ______________ input x_coords and y_coords. +// | _________ | +// | | _ | | 1, 6 +// | | | | | | 1, 3, 4, 6 +// | | | | | | 1, 3, 4, 6 +// | | | | | | 1, 3, 4, 6 +// | | |_| | | 1, 3, 4, 6 +// | |_________| | 1, 6 +// |_____________| +// E 1 1 1 1 1 E +// m 7 7 2 7 7 m +// p 6 p +// t 7 t +// y y +// The output image contains the min of the x and y run-length (distance +// between edges) at each coordinate in the image thus: +// ______________ +// |7 1_1_1_1_1 7| +// |1|5 5 1 5 5|1| +// |1|2 2|1|2 2|1| +// |1|2 2|1|2 2|1| +// |1|2 2|1|2 2|1| +// |1|2 2|1|2 2|1| +// |1|5_5_1_5_5|1| +// |7_1_1_1_1_1_7| +// Note that the input coords are all integer, so all partial pixels are dealt +// with elsewhere. Although it is nice for outlines to be properly connected +// and continuous, there is no requirement that they be as such, so they could +// have been derived from a flaky source, such as greyscale. +// This function works only within the provided box, and it is assumed that the +// input x_coords and y_coords have already been translated to have the bottom- +// left of box as the origin. Although an output, the minruns should have been +// pre-initialized to be the same size as box. Each element will contain the +// minimum of x and y run-length as shown above. +static void ComputeRunlengthImage( + const TBOX& box, + const GenericVector >& x_coords, + const GenericVector >& y_coords, + GENERIC_2D_ARRAY* minruns) { + int width = box.width(); + int height = box.height(); + ASSERT_HOST(minruns->dim1() == width); + ASSERT_HOST(minruns->dim2() == height); + // Set a 2-d image array to the run lengths at each pixel. + for (int ix = 0; ix < width; ++ix) { + int y = 0; + for (int i = 0; i < y_coords[ix].size(); ++i) { + int y_edge = ClipToRange(y_coords[ix][i], 0, height); + int gap = y_edge - y; + // Every pixel between the last and current edge get set to the gap. + while (y < y_edge) { + (*minruns)(ix, y) = gap; + ++y; + } + } + // Pretend there is a bounding box of edges all around the image. + int gap = height - y; + while (y < height) { + (*minruns)(ix, y) = gap; + ++y; + } + } + // Now set the image pixels the the MIN of the x and y runlengths. + for (int iy = 0; iy < height; ++iy) { + int x = 0; + for (int i = 0; i < x_coords[iy].size(); ++i) { + int x_edge = ClipToRange(x_coords[iy][i], 0, width); + int gap = x_edge - x; + while (x < x_edge) { + if (gap < (*minruns)(x, iy)) + (*minruns)(x, iy) = gap; + ++x; + } + } + int gap = width - x; + while (x < width) { + if (gap < (*minruns)(x, iy)) + (*minruns)(x, iy) = gap; + ++x; + } + } +} +// Converts the run-length image (see above to the edge density profiles used +// for scaling, thus: +// ______________ +// |7 1_1_1_1_1 7| = 5.28 +// |1|5 5 1 5 5|1| = 3.8 +// |1|2 2|1|2 2|1| = 5 +// |1|2 2|1|2 2|1| = 5 +// |1|2 2|1|2 2|1| = 5 +// |1|2 2|1|2 2|1| = 5 +// |1|5_5_1_5_5|1| = 3.8 +// |7_1_1_1_1_1_7| = 5.28 +// 6 4 4 8 4 4 6 +// . . . . . . . +// 2 4 4 0 4 4 2 +// 8 8 +// Each profile is the sum of the reciprocals of the pixels in the image in +// the appropriate row or column, and these are then normalized to sum to 1. +// On output hx, hy contain an extra element, which will eventually be used +// to guarantee that the top/right edge of the box (and anything beyond) always +// gets mapped to the maximum target coordinate. +static void ComputeEdgeDensityProfiles(const TBOX& box, + const GENERIC_2D_ARRAY& minruns, + GenericVector* hx, + GenericVector* hy) { + int width = box.width(); + int height = box.height(); + hx->init_to_size(width + 1, 0.0); + hy->init_to_size(height + 1, 0.0); + double total = 0.0; + for (int iy = 0; iy < height; ++iy) { + for (int ix = 0; ix < width; ++ix) { + int run = minruns(ix, iy); + if (run == 0) run = 1; + float density = 1.0f / run; + (*hx)[ix] += density; + (*hy)[iy] += density; + } + total += (*hy)[iy]; + } + // Normalize each profile to sum to 1. + if (total > 0.0) { + for (int ix = 0; ix < width; ++ix) { + (*hx)[ix] /= total; + } + for (int iy = 0; iy < height; ++iy) { + (*hy)[iy] /= total; + } + } + // There is an extra element in each array, so initialize to 1. + (*hx)[width] = 1.0f; + (*hy)[height] = 1.0f; +} + +// Sets up the DENORM to execute a non-linear transformation based on +// preserving an even distribution of stroke edges. The transformation +// operates only within the given box. +// x_coords is a collection of the x-coords of vertical edges for each +// y-coord starting at box.bottom(). +// y_coords is a collection of the y-coords of horizontal edges for each +// x-coord starting at box.left(). +// Eg x_coords[0] is a collection of the x-coords of edges at y=bottom. +// Eg x_coords[1] is a collection of the x-coords of edges at y=bottom + 1. +// The second-level vectors must all be sorted in ascending order. +// See comments on the helper functions above for more details. +void DENORM::SetupNonLinear( + const DENORM* predecessor, const TBOX& box, float target_width, + float target_height, float final_xshift, float final_yshift, + const GenericVector >& x_coords, + const GenericVector >& y_coords) { + Clear(); + predecessor_ = predecessor; + // x_map_ and y_map_ store a mapping from input x and y coordinate to output + // x and y coordinate, based on scaling to the supplied target_width and + // target_height. + x_map_ = new GenericVector; + y_map_ = new GenericVector; + // Set a 2-d image array to the run lengths at each pixel. + int width = box.width(); + int height = box.height(); + GENERIC_2D_ARRAY minruns(width, height, 0); + ComputeRunlengthImage(box, x_coords, y_coords, &minruns); + // Edge density is the sum of the inverses of the run lengths. Compute + // edge density projection profiles. + ComputeEdgeDensityProfiles(box, minruns, x_map_, y_map_); + // Convert the edge density profiles to the coordinates by multiplying by + // the desired size and accumulating. + (*x_map_)[width] = target_width; + for (int x = width - 1; x >= 0; --x) { + (*x_map_)[x] = (*x_map_)[x + 1] - (*x_map_)[x] * target_width; + } + (*y_map_)[height] = target_height; + for (int y = height - 1; y >= 0; --y) { + (*y_map_)[y] = (*y_map_)[y + 1] - (*y_map_)[y] * target_height; + } + x_origin_ = box.left(); + y_origin_ = box.bottom(); + final_xshift_ = final_xshift; + final_yshift_ = final_yshift; +} + +// Transforms the given coords one step forward to normalized space, without +// using any block rotation or predecessor. +void DENORM::LocalNormTransform(const TPOINT& pt, TPOINT* transformed) const { + FCOORD src_pt(pt.x, pt.y); + FCOORD float_result; + LocalNormTransform(src_pt, &float_result); + transformed->x = IntCastRounded(float_result.x()); + transformed->y = IntCastRounded(float_result.y()); +} +void DENORM::LocalNormTransform(const FCOORD& pt, FCOORD* transformed) const { + FCOORD translated(pt.x() - x_origin_, pt.y() - y_origin_); + if (x_map_ != NULL && y_map_ != NULL) { + int x = ClipToRange(IntCastRounded(translated.x()), 0, x_map_->size()-1); + translated.set_x((*x_map_)[x]); + int y = ClipToRange(IntCastRounded(translated.y()), 0, y_map_->size()-1); + translated.set_y((*y_map_)[y]); + } else { + translated.set_x(translated.x() * x_scale_); + translated.set_y(translated.y() * y_scale_); + if (rotation_ != NULL) + translated.rotate(*rotation_); + } + transformed->set_x(translated.x() + final_xshift_); + transformed->set_y(translated.y() + final_yshift_); +} + +// Transforms the given coords forward to normalized space using the +// full transformation sequence defined by the block rotation, the +// predecessors, deepest first, and finally this. If first_norm is not NULL, +// then the first and deepest transformation used is first_norm, ending +// with this, and the block rotation will not be applied. +void DENORM::NormTransform(const DENORM* first_norm, const TPOINT& pt, + TPOINT* transformed) const { + FCOORD src_pt(pt.x, pt.y); + FCOORD float_result; + NormTransform(first_norm, src_pt, &float_result); + transformed->x = IntCastRounded(float_result.x()); + transformed->y = IntCastRounded(float_result.y()); +} +void DENORM::NormTransform(const DENORM* first_norm, const FCOORD& pt, + FCOORD* transformed) const { + FCOORD src_pt(pt); + if (first_norm != this) { + if (predecessor_ != NULL) { + predecessor_->NormTransform(first_norm, pt, &src_pt); + } else if (block_ != NULL) { + FCOORD fwd_rotation(block_->re_rotation().x(), + -block_->re_rotation().y()); + src_pt.rotate(fwd_rotation); + } + } + LocalNormTransform(src_pt, transformed); +} + +// Transforms the given coords one step back to source space, without +// using to any block rotation or predecessor. +void DENORM::LocalDenormTransform(const TPOINT& pt, TPOINT* original) const { + FCOORD src_pt(pt.x, pt.y); + FCOORD float_result; + LocalDenormTransform(src_pt, &float_result); + original->x = IntCastRounded(float_result.x()); + original->y = IntCastRounded(float_result.y()); +} +void DENORM::LocalDenormTransform(const FCOORD& pt, FCOORD* original) const { + FCOORD rotated(pt.x() - final_xshift_, pt.y() - final_yshift_); + if (x_map_ != NULL && y_map_ != NULL) { + int x = x_map_->binary_search(rotated.x()); + original->set_x(x + x_origin_); + int y = y_map_->binary_search(rotated.y()); + original->set_y(y + y_origin_); + } else { + if (rotation_ != NULL) { + FCOORD inverse_rotation(rotation_->x(), -rotation_->y()); + rotated.rotate(inverse_rotation); + } + original->set_x(rotated.x() / x_scale_ + x_origin_); + float y_scale = y_scale_; + original->set_y(rotated.y() / y_scale + y_origin_); + } +} + +// Transforms the given coords all the way back to source image space using +// the full transformation sequence defined by this and its predecessors +// recursively, shallowest first, and finally any block re_rotation. +// If last_denorm is not NULL, then the last transformation used will +// be last_denorm, and the block re_rotation will never be executed. +void DENORM::DenormTransform(const DENORM* last_denorm, const TPOINT& pt, + TPOINT* original) const { + FCOORD src_pt(pt.x, pt.y); + FCOORD float_result; + DenormTransform(last_denorm, src_pt, &float_result); + original->x = IntCastRounded(float_result.x()); + original->y = IntCastRounded(float_result.y()); +} +void DENORM::DenormTransform(const DENORM* last_denorm, const FCOORD& pt, + FCOORD* original) const { + LocalDenormTransform(pt, original); + if (last_denorm != this) { + if (predecessor_ != NULL) { + predecessor_->DenormTransform(last_denorm, *original, original); + } else if (block_ != NULL) { + original->rotate(block_->re_rotation()); + } + } +} + +// Normalize a blob using blob transformations. Less accurate, but +// more accurately copies the old way. +void DENORM::LocalNormBlob(TBLOB* blob) const { + TBOX blob_box = blob->bounding_box(); + ICOORD translation(-IntCastRounded(x_origin_), -IntCastRounded(y_origin_)); + blob->Move(translation); + if (y_scale_ != 1.0f) + blob->Scale(y_scale_); + if (rotation_ != NULL) + blob->Rotate(*rotation_); + translation.set_x(IntCastRounded(final_xshift_)); + translation.set_y(IntCastRounded(final_yshift_)); + blob->Move(translation); +} + +// Fills in the x-height range accepted by the given unichar_id, given its +// bounding box in the usual baseline-normalized coordinates, with some +// initial crude x-height estimate (such as word size) and this denoting the +// transformation that was used. +void DENORM::XHeightRange(int unichar_id, const UNICHARSET& unicharset, + const TBOX& bbox, + float* min_xht, float* max_xht, float* yshift) const { + // Default return -- accept anything. + *yshift = 0.0f; + *min_xht = 0.0f; + *max_xht = MAX_FLOAT32; + + if (!unicharset.top_bottom_useful()) + return; + + // Clip the top and bottom to the limit of normalized feature space. + int top = ClipToRange(bbox.top(), 0, kBlnCellHeight - 1); + int bottom = ClipToRange(bbox.bottom(), 0, kBlnCellHeight - 1); + // A tolerance of yscale corresponds to 1 pixel in the image. + double tolerance = y_scale(); + // If the script doesn't have upper and lower-case characters, widen the + // tolerance to allow sloppy baseline/x-height estimates. + if (!unicharset.script_has_upper_lower()) + tolerance = y_scale() * kSloppyTolerance; + + int min_bottom, max_bottom, min_top, max_top; + unicharset.get_top_bottom(unichar_id, &min_bottom, &max_bottom, + &min_top, &max_top); + + // Calculate the scale factor we'll use to get to image y-pixels + double midx = (bbox.left() + bbox.right()) / 2.0; + double ydiff = (bbox.top() - bbox.bottom()) + 2.0; + FCOORD mid_bot(midx, bbox.bottom()), tmid_bot; + FCOORD mid_high(midx, bbox.bottom() + ydiff), tmid_high; + DenormTransform(NULL, mid_bot, &tmid_bot); + DenormTransform(NULL, mid_high, &tmid_high); + + // bln_y_measure * yscale = image_y_measure + double yscale = tmid_high.pt_to_pt_dist(tmid_bot) / ydiff; + + // Calculate y-shift + int bln_yshift = 0, bottom_shift = 0, top_shift = 0; + if (bottom < min_bottom - tolerance) { + bottom_shift = bottom - min_bottom; + } else if (bottom > max_bottom + tolerance) { + bottom_shift = bottom - max_bottom; + } + if (top < min_top - tolerance) { + top_shift = top - min_top; + } else if (top > max_top + tolerance) { + top_shift = top - max_top; + } + if ((top_shift >= 0 && bottom_shift > 0) || + (top_shift < 0 && bottom_shift < 0)) { + bln_yshift = (top_shift + bottom_shift) / 2; + } + *yshift = bln_yshift * yscale; + + // To help very high cap/xheight ratio fonts accept the correct x-height, + // and to allow the large caps in small caps to accept the xheight of the + // small caps, add kBlnBaselineOffset to chars with a maximum max, and have + // a top already at a significantly high position. + if (max_top == kBlnCellHeight - 1 && + top > kBlnCellHeight - kBlnBaselineOffset / 2) + max_top += kBlnBaselineOffset; + top -= bln_yshift; + int height = top - kBlnBaselineOffset; + double min_height = min_top - kBlnBaselineOffset - tolerance; + double max_height = max_top - kBlnBaselineOffset + tolerance; + + // We shouldn't try calculations if the characters are very short (for example + // for punctuation). + if (min_height > kBlnXHeight / 8 && height > 0) { + float result = height * kBlnXHeight * yscale / min_height; + *max_xht = result + kFinalPixelTolerance; + result = height * kBlnXHeight * yscale / max_height; + *min_xht = result - kFinalPixelTolerance; + } +} + +// Prints the content of the DENORM for debug purposes. +void DENORM::Print() const { + if (pix_ != NULL) { + tprintf("Pix dimensions %d x %d x %d\n", + pixGetWidth(pix_), pixGetHeight(pix_), pixGetDepth(pix_)); + } + if (inverse_) + tprintf("Inverse\n"); + if (block_ && block_->re_rotation().x() != 1.0f) { + tprintf("Block rotation %g, %g\n", + block_->re_rotation().x(), block_->re_rotation().y()); + } + tprintf("Input Origin = (%g, %g)\n", x_origin_, y_origin_); + if (x_map_ != NULL && y_map_ != NULL) { + tprintf("x map:\n"); + for (int x = 0; x < x_map_->size(); ++x) { + tprintf("%g ", (*x_map_)[x]); + } + tprintf("\ny map:\n"); + for (int y = 0; y < y_map_->size(); ++y) { + tprintf("%g ", (*y_map_)[y]); + } + tprintf("\n"); + } else { + tprintf("Scale = (%g, %g)\n", x_scale_, y_scale_); + if (rotation_ != NULL) + tprintf("Rotation = (%g, %g)\n", rotation_->x(), rotation_->y()); + } + tprintf("Final Origin = (%g, %g)\n", final_xshift_, final_xshift_); + if (predecessor_ != NULL) { + tprintf("Predecessor:\n"); + predecessor_->Print(); + } +} + + +// ============== Private Code ====================== + +// Free allocated memory and clear pointers. +void DENORM::Clear() { + if (x_map_ != NULL) { + delete x_map_; + x_map_ = NULL; + } + if (y_map_ != NULL) { + delete y_map_; + y_map_ = NULL; + } + if (rotation_ != NULL) { + delete rotation_; + rotation_ = NULL; + } +} + +// Setup default values. +void DENORM::Init() { + inverse_ = false; + pix_ = NULL; + block_ = NULL; + rotation_ = NULL; + predecessor_ = NULL; + x_map_ = NULL; + y_map_ = NULL; + x_origin_ = 0.0f; + y_origin_ = 0.0f; + x_scale_ = 1.0f; + y_scale_ = 1.0f; + final_xshift_ = 0.0f; + final_yshift_ = static_cast(kBlnBaselineOffset); +} diff --git a/3rdparty/hgOCR/include/ccstruct/normalis.h b/3rdparty/hgOCR/include/ccstruct/normalis.h new file mode 100644 index 00000000..2d754120 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/normalis.h @@ -0,0 +1,317 @@ +/********************************************************************** + * File: normalis.h (Formerly denorm.h) + * Description: Code for the DENORM class. + * Author: Ray Smith + * Created: Thu Apr 23 09:22:43 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef NORMALIS_H +#define NORMALIS_H + +#include +#include "genericvector.h" +#include "host.h" + +const int kBlnCellHeight = 256; // Full-height for baseline normalization. +const int kBlnXHeight = 128; // x-height for baseline normalization. +const int kBlnBaselineOffset = 64; // offset for baseline normalization. + +struct Pix; +class ROW; // Forward decl +class BLOCK; +class FCOORD; +struct TBLOB; +class TBOX; +struct TPOINT; +class UNICHARSET; + +namespace tesseract { + +// Possible normalization methods. Use NEGATIVE values as these also +// double up as markers for the last sub-classifier. +enum NormalizationMode { + NM_BASELINE = -3, // The original BL normalization mode. + NM_CHAR_ISOTROPIC = -2, // Character normalization but isotropic. + NM_CHAR_ANISOTROPIC = -1 // The original CN normalization mode. +}; + +} // namespace tesseract. + +class DENORM { + public: + DENORM(); + + // Copying a DENORM is allowed. + DENORM(const DENORM &); + DENORM& operator=(const DENORM&); + ~DENORM(); + + // Setup the normalization transformation parameters. + // The normalizations applied to a blob are as follows: + // 1. An optional block layout rotation that was applied during layout + // analysis to make the textlines horizontal. + // 2. A normalization transformation (LocalNormTransform): + // Subtract the "origin" + // Apply an x,y scaling. + // Apply an optional rotation. + // Add back a final translation. + // The origin is in the block-rotated space, and is usually something like + // the x-middle of the word at the baseline. + // 3. Zero or more further normalization transformations that are applied + // in sequence, with a similar pattern to the first normalization transform. + // + // A DENORM holds the parameters of a single normalization, and can execute + // both the LocalNormTransform (a forwards normalization), and the + // LocalDenormTransform which is an inverse transform or de-normalization. + // A DENORM may point to a predecessor DENORM, which is actually the earlier + // normalization, so the full normalization sequence involves executing all + // predecessors first and then the transform in "this". + // Let x be image co-ordinates and that we have normalization classes A, B, C + // where we first apply A then B then C to get normalized x': + // x' = CBAx + // Then the backwards (to original coordinates) would be: + // x = A^-1 B^-1 C^-1 x' + // and A = B->predecessor_ and B = C->predecessor_ + // NormTransform executes all predecessors recursively, and then this. + // NormTransform would be used to transform an image-based feature to + // normalized space for use in a classifier + // DenormTransform inverts this and then all predecessors. It can be + // used to get back to the original image coordinates from normalized space. + // The LocalNormTransform member executes just the transformation + // in "this" without the layout rotation or any predecessors. It would be + // used to run each successive normalization, eg the word normalization, + // and later the character normalization. + + // Arguments: + // block: if not NULL, then this is the first transformation, and + // block->re_rotation() needs to be used after the Denorm + // transformation to get back to the image coords. + // rotation: if not NULL, apply this rotation after translation to the + // origin and scaling. (Usually a classify rotation.) + // predecessor: if not NULL, then predecessor has been applied to the + // input space and needs to be undone to complete the inverse. + // The above pointers are not owned by this DENORM and are assumed to live + // longer than this denorm, except rotation, which is deep copied on input. + // + // x_origin: The x origin which will be mapped to final_xshift in the result. + // y_origin: The y origin which will be mapped to final_yshift in the result. + // Added to result of row->baseline(x) if not NULL. + // + // x_scale: scale factor for the x-coordinate. + // y_scale: scale factor for the y-coordinate. Ignored if segs is given. + // Note that these scale factors apply to the same x and y system as the + // x-origin and y-origin apply, ie after any block rotation, but before + // the rotation argument is applied. + // + // final_xshift: The x component of the final translation. + // final_yshift: The y component of the final translation. + // + // In theory, any of the commonly used normalizations can be setup here: + // * Traditional baseline normalization on a word: + // SetupNormalization(block, NULL, NULL, + // box.x_middle(), baseline, + // kBlnXHeight / x_height, kBlnXHeight / x_height, + // 0, kBlnBaselineOffset); + // * "Numeric mode" baseline normalization on a word, in which the blobs + // are positioned with the bottom as the baseline is achieved by making + // a separate DENORM for each blob. + // SetupNormalization(block, NULL, NULL, + // box.x_middle(), box.bottom(), + // kBlnXHeight / x_height, kBlnXHeight / x_height, + // 0, kBlnBaselineOffset); + // * Anisotropic character normalization used by IntFx. + // SetupNormalization(NULL, NULL, denorm, + // centroid_x, centroid_y, + // 51.2 / ry, 51.2 / rx, 128, 128); + // * Normalize blob height to x-height (current OSD): + // SetupNormalization(NULL, &rotation, NULL, + // box.rotational_x_middle(rotation), + // box.rotational_y_middle(rotation), + // kBlnXHeight / box.rotational_height(rotation), + // kBlnXHeight / box.rotational_height(rotation), + // 0, kBlnBaselineOffset); + // * Secondary normalization for classification rotation (current): + // FCOORD rotation = block->classify_rotation(); + // float target_height = kBlnXHeight / CCStruct::kXHeightCapRatio; + // SetupNormalization(NULL, &rotation, denorm, + // box.rotational_x_middle(rotation), + // box.rotational_y_middle(rotation), + // target_height / box.rotational_height(rotation), + // target_height / box.rotational_height(rotation), + // 0, kBlnBaselineOffset); + // * Proposed new normalizations for CJK: Between them there is then + // no need for further normalization at all, and the character fills the cell. + // ** Replacement for baseline normalization on a word: + // Scales height and width independently so that modal height and pitch + // fill the cell respectively. + // float cap_height = x_height / CCStruct::kXHeightCapRatio; + // SetupNormalization(block, NULL, NULL, + // box.x_middle(), cap_height / 2.0f, + // kBlnCellHeight / fixed_pitch, + // kBlnCellHeight / cap_height, + // 0, 0); + // ** Secondary normalization for classification (with rotation) (proposed): + // Requires a simple translation to the center of the appropriate character + // cell, no further scaling and a simple rotation (or nothing) about the + // cell center. + // FCOORD rotation = block->classify_rotation(); + // SetupNormalization(NULL, &rotation, denorm, + // fixed_pitch_cell_center, + // 0.0f, + // 1.0f, + // 1.0f, + // 0, 0); + void SetupNormalization(const BLOCK* block, + const FCOORD* rotation, + const DENORM* predecessor, + float x_origin, float y_origin, + float x_scale, float y_scale, + float final_xshift, float final_yshift); + + // Sets up the DENORM to execute a non-linear transformation based on + // preserving an even distribution of stroke edges. The transformation + // operates only within the given box, scaling input coords within the box + // non-linearly to a box of target_width by target_height, with all other + // coords being clipped to the box edge. As with SetupNormalization above, + // final_xshift and final_yshift are applied after scaling, and the bottom- + // left of box is used as a pre-scaling origin. + // x_coords is a collection of the x-coords of vertical edges for each + // y-coord starting at box.bottom(). + // y_coords is a collection of the y-coords of horizontal edges for each + // x-coord starting at box.left(). + // Eg x_coords[0] is a collection of the x-coords of edges at y=bottom. + // Eg x_coords[1] is a collection of the x-coords of edges at y=bottom + 1. + // The second-level vectors must all be sorted in ascending order. + void SetupNonLinear(const DENORM* predecessor, const TBOX& box, + float target_width, float target_height, + float final_xshift, float final_yshift, + const GenericVector >& x_coords, + const GenericVector >& y_coords); + + // Transforms the given coords one step forward to normalized space, without + // using any block rotation or predecessor. + void LocalNormTransform(const TPOINT& pt, TPOINT* transformed) const; + void LocalNormTransform(const FCOORD& pt, FCOORD* transformed) const; + // Transforms the given coords forward to normalized space using the + // full transformation sequence defined by the block rotation, the + // predecessors, deepest first, and finally this. If first_norm is not NULL, + // then the first and deepest transformation used is first_norm, ending + // with this, and the block rotation will not be applied. + void NormTransform(const DENORM* first_norm, const TPOINT& pt, + TPOINT* transformed) const; + void NormTransform(const DENORM* first_norm, const FCOORD& pt, + FCOORD* transformed) const; + // Transforms the given coords one step back to source space, without + // using to any block rotation or predecessor. + void LocalDenormTransform(const TPOINT& pt, TPOINT* original) const; + void LocalDenormTransform(const FCOORD& pt, FCOORD* original) const; + // Transforms the given coords all the way back to source image space using + // the full transformation sequence defined by this and its predecessors + // recursively, shallowest first, and finally any block re_rotation. + // If last_denorm is not NULL, then the last transformation used will + // be last_denorm, and the block re_rotation will never be executed. + void DenormTransform(const DENORM* last_denorm, const TPOINT& pt, + TPOINT* original) const; + void DenormTransform(const DENORM* last_denorm, const FCOORD& pt, + FCOORD* original) const; + + // Normalize a blob using blob transformations. Less accurate, but + // more accurately copies the old way. + void LocalNormBlob(TBLOB* blob) const; + + // Fills in the x-height range accepted by the given unichar_id in blob + // coordinates, given its bounding box in the usual baseline-normalized + // coordinates, with some initial crude x-height estimate (such as word + // size) and this denoting the transformation that was used. + // Also returns the amount the character must have shifted up or down. + void XHeightRange(int unichar_id, const UNICHARSET& unicharset, + const TBOX& bbox, + float* min_xht, + float* max_xht, + float* yshift) const; + + // Prints the content of the DENORM for debug purposes. + void Print() const; + + Pix* pix() const { + return pix_; + } + void set_pix(Pix* pix) { + pix_ = pix; + } + bool inverse() const { + return inverse_; + } + void set_inverse(bool value) { + inverse_ = value; + } + const DENORM* RootDenorm() const { + if (predecessor_ != NULL) + return predecessor_->RootDenorm(); + return this; + } + const DENORM* predecessor() const { + return predecessor_; + } + // Accessors - perhaps should not be needed. + float x_scale() const { + return x_scale_; + } + float y_scale() const { + return y_scale_; + } + const BLOCK* block() const { + return block_; + } + void set_block(const BLOCK* block) { + block_ = block; + } + + private: + // Free allocated memory and clear pointers. + void Clear(); + // Setup default values. + void Init(); + + // Best available image. + Pix* pix_; + // True if the source image is white-on-black. + bool inverse_; + // Block the word came from. If not null, block->re_rotation() takes the + // "untransformed" coordinates even further back to the original image. + // Used only on the first DENORM in a chain. + const BLOCK* block_; + // Rotation to apply between translation to the origin and scaling. + const FCOORD* rotation_; + // Previous transformation in a chain. + const DENORM* predecessor_; + // Non-linear transformation maps directly from each integer offset from the + // origin to the corresponding x-coord. Owned by the DENORM. + GenericVector* x_map_; + // Non-linear transformation maps directly from each integer offset from the + // origin to the corresponding y-coord. Owned by the DENORM. + GenericVector* y_map_; + // x-coordinate to be mapped to final_xshift_ in the result. + float x_origin_; + // y-coordinate to be mapped to final_yshift_ in the result. + float y_origin_; + // Scale factors for x and y coords. Applied to pre-rotation system. + float x_scale_; + float y_scale_; + // Destination coords of the x_origin_ and y_origin_. + float final_xshift_; + float final_yshift_; +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/ocrblock.cpp b/3rdparty/hgOCR/include/ccstruct/ocrblock.cpp new file mode 100644 index 00000000..ad7893b0 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrblock.cpp @@ -0,0 +1,519 @@ +/********************************************************************** + * File: ocrblock.cpp (Formerly block.c) + * Description: BLOCK member functions and iterator functions. + * Author: Ray Smith + * Created: Fri Mar 15 09:41:28 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include "blckerr.h" +#include "ocrblock.h" +#include "stepblob.h" +#include "tprintf.h" + +#define BLOCK_LABEL_HEIGHT 150 //char height of block id + +ELISTIZE (BLOCK) +/** + * BLOCK::BLOCK + * + * Constructor for a simple rectangular block. + */ +BLOCK::BLOCK(const char *name, //< filename + BOOL8 prop, //< proportional + inT16 kern, //< kerning + inT16 space, //< spacing + inT16 xmin, //< bottom left + inT16 ymin, inT16 xmax, //< top right + inT16 ymax) + : PDBLK (xmin, ymin, xmax, ymax), + filename(name), + re_rotation_(1.0f, 0.0f), + classify_rotation_(1.0f, 0.0f), + skew_(1.0f, 0.0f) { + ICOORDELT_IT left_it = &leftside; + ICOORDELT_IT right_it = &rightside; + + proportional = prop; + right_to_left_ = false; + kerning = kern; + spacing = space; + font_class = -1; //not assigned + cell_over_xheight_ = 2.0f; + hand_poly = NULL; + left_it.set_to_list (&leftside); + right_it.set_to_list (&rightside); + //make default box + left_it.add_to_end (new ICOORDELT (xmin, ymin)); + left_it.add_to_end (new ICOORDELT (xmin, ymax)); + right_it.add_to_end (new ICOORDELT (xmax, ymin)); + right_it.add_to_end (new ICOORDELT (xmax, ymax)); +} + +/** + * decreasing_top_order + * + * Sort Comparator: Return <0 if row1 top < row2 top + */ + +int decreasing_top_order( // + const void *row1, + const void *row2) { + return (*(ROW **) row2)->bounding_box ().top () - + (*(ROW **) row1)->bounding_box ().top (); +} + + +/** + * BLOCK::rotate + * + * Rotate the polygon by the given rotation and recompute the bounding_box. + */ +void BLOCK::rotate(const FCOORD& rotation) { + poly_block()->rotate(rotation); + box = *poly_block()->bounding_box(); +} + +// Returns the bounding box including the desired combination of upper and +// lower noise/diacritic elements. +TBOX BLOCK::restricted_bounding_box(bool upper_dots, bool lower_dots) const { + TBOX box; + // This is a read-only iteration of the rows in the block. + ROW_IT it(const_cast(&rows)); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + box += it.data()->restricted_bounding_box(upper_dots, lower_dots); + } + return box; +} + +/** + * BLOCK::reflect_polygon_in_y_axis + * + * Reflects the polygon in the y-axis and recompute the bounding_box. + * Does nothing to any contained rows/words/blobs etc. + */ +void BLOCK::reflect_polygon_in_y_axis() { + poly_block()->reflect_in_y_axis(); + box = *poly_block()->bounding_box(); +} + +/** + * BLOCK::sort_rows + * + * Order rows so that they are in order of decreasing Y coordinate + */ + +void BLOCK::sort_rows() { // order on "top" + ROW_IT row_it(&rows); + + row_it.sort (decreasing_top_order); +} + + +/** + * BLOCK::compress + * + * Delete space between the rows. (And maybe one day, compress the rows) + * Fill space of block from top down, left aligning rows. + */ + +void BLOCK::compress() { // squash it up + #define ROW_SPACING 5 + + ROW_IT row_it(&rows); + ROW *row; + ICOORD row_spacing (0, ROW_SPACING); + + ICOORDELT_IT icoordelt_it; + + sort_rows(); + + box = TBOX (box.topleft (), box.topleft ()); + box.move_bottom_edge (ROW_SPACING); + for (row_it.mark_cycle_pt (); !row_it.cycled_list (); row_it.forward ()) { + row = row_it.data (); + row->move (box.botleft () - row_spacing - + row->bounding_box ().topleft ()); + box += row->bounding_box (); + } + + leftside.clear (); + icoordelt_it.set_to_list (&leftside); + icoordelt_it.add_to_end (new ICOORDELT (box.left (), box.bottom ())); + icoordelt_it.add_to_end (new ICOORDELT (box.left (), box.top ())); + rightside.clear (); + icoordelt_it.set_to_list (&rightside); + icoordelt_it.add_to_end (new ICOORDELT (box.right (), box.bottom ())); + icoordelt_it.add_to_end (new ICOORDELT (box.right (), box.top ())); +} + + +/** + * BLOCK::check_pitch + * + * Check whether the block is fixed or prop, set the flag, and set + * the pitch if it is fixed. + */ + +void BLOCK::check_pitch() { // check prop + // tprintf("Missing FFT fixed pitch stuff!\n"); + pitch = -1; +} + + +/** + * BLOCK::compress + * + * Compress and move in a single operation. + */ + +void BLOCK::compress( // squash it up + const ICOORD vec // and move + ) { + box.move (vec); + compress(); +} + + +/** + * BLOCK::print + * + * Print the info on a block + */ + +void BLOCK::print( //print list of sides + FILE *, //< file to print on + BOOL8 dump //< print full detail + ) { + ICOORDELT_IT it = &leftside; //iterator + + box.print (); + tprintf ("Proportional= %s\n", proportional ? "TRUE" : "FALSE"); + tprintf ("Kerning= %d\n", kerning); + tprintf ("Spacing= %d\n", spacing); + tprintf ("Fixed_pitch=%d\n", pitch); + tprintf ("Filename= %s\n", filename.string ()); + + if (dump) { + tprintf ("Left side coords are:\n"); + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + tprintf ("(%d,%d) ", it.data ()->x (), it.data ()->y ()); + tprintf ("\n"); + tprintf ("Right side coords are:\n"); + it.set_to_list (&rightside); + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + tprintf ("(%d,%d) ", it.data ()->x (), it.data ()->y ()); + tprintf ("\n"); + } +} + +/** + * BLOCK::operator= + * + * Assignment - duplicate the block structure, but with an EMPTY row list. + */ + +BLOCK & BLOCK::operator= ( //assignment +const BLOCK & source //from this +) { + this->ELIST_LINK::operator= (source); + this->PDBLK::operator= (source); + proportional = source.proportional; + kerning = source.kerning; + spacing = source.spacing; + filename = source.filename; //STRINGs assign ok + if (!rows.empty ()) + rows.clear (); + re_rotation_ = source.re_rotation_; + classify_rotation_ = source.classify_rotation_; + skew_ = source.skew_; + return *this; +} + +// This function is for finding the approximate (horizontal) distance from +// the x-coordinate of the left edge of a symbol to the left edge of the +// text block which contains it. We are passed: +// segments - output of PB_LINE_IT::get_line() which contains x-coordinate +// intervals for the scan line going through the symbol's y-coordinate. +// Each element of segments is of the form (x()=start_x, y()=length). +// x - the x coordinate of the symbol we're interested in. +// margin - return value, the distance from x,y to the left margin of the +// block containing it. +// If all segments were to the right of x, we return false and 0. +bool LeftMargin(ICOORDELT_LIST *segments, int x, int *margin) { + bool found = false; + *margin = 0; + if (segments->empty()) + return found; + ICOORDELT_IT seg_it(segments); + for (seg_it.mark_cycle_pt(); !seg_it.cycled_list(); seg_it.forward()) { + int cur_margin = x - seg_it.data()->x(); + if (cur_margin >= 0) { + if (!found) { + *margin = cur_margin; + } else if (cur_margin < *margin) { + *margin = cur_margin; + } + found = true; + } + } + return found; +} + +// This function is for finding the approximate (horizontal) distance from +// the x-coordinate of the right edge of a symbol to the right edge of the +// text block which contains it. We are passed: +// segments - output of PB_LINE_IT::get_line() which contains x-coordinate +// intervals for the scan line going through the symbol's y-coordinate. +// Each element of segments is of the form (x()=start_x, y()=length). +// x - the x coordinate of the symbol we're interested in. +// margin - return value, the distance from x,y to the right margin of the +// block containing it. +// If all segments were to the left of x, we return false and 0. +bool RightMargin(ICOORDELT_LIST *segments, int x, int *margin) { + bool found = false; + *margin = 0; + if (segments->empty()) + return found; + ICOORDELT_IT seg_it(segments); + for (seg_it.mark_cycle_pt(); !seg_it.cycled_list(); seg_it.forward()) { + int cur_margin = seg_it.data()->x() + seg_it.data()->y() - x; + if (cur_margin >= 0) { + if (!found) { + *margin = cur_margin; + } else if (cur_margin < *margin) { + *margin = cur_margin; + } + found = true; + } + } + return found; +} + +// Compute the distance from the left and right ends of each row to the +// left and right edges of the block's polyblock. Illustration: +// ____________________________ _______________________ +// | Howdy neighbor! | |rectangular blocks look| +// | This text is written to| |more like stacked pizza| +// |illustrate how useful poly- |boxes. | +// |blobs are in ----------- ------ The polyblob| +// |dealing with| _________ |for a BLOCK rec-| +// |harder layout| /===========\ |ords the possibly| +// |issues. | | _ _ | |skewed pseudo-| +// | You see this| | |_| \|_| | |rectangular | +// |text is flowed| | } | |boundary that| +// |around a mid-| \ ____ | |forms the ideal-| +// |cloumn portrait._____ \ / __|ized text margin| +// | Polyblobs exist| \ / |from which we should| +// |to account for insets| | | |measure paragraph| +// |which make otherwise| ----- |indentation. | +// ----------------------- ---------------------- +// +// If we identify a drop-cap, we measure the left margin for the lines +// below the first line relative to one space past the drop cap. The +// first line's margin and those past the drop cap area are measured +// relative to the enclosing polyblock. +// +// TODO(rays): Before this will work well, we'll need to adjust the +// polyblob tighter around the text near images, as in: +// UNLV_AUTO:mag.3G0 page 2 +// UNLV_AUTO:mag.3G4 page 16 +void BLOCK::compute_row_margins() { + if (row_list()->empty() || row_list()->singleton()) { + return; + } + + // If Layout analysis was not called, default to this. + POLY_BLOCK rect_block(bounding_box(), PT_FLOWING_TEXT); + POLY_BLOCK *pblock = &rect_block; + if (poly_block() != NULL) { + pblock = poly_block(); + } + + // Step One: Determine if there is a drop-cap. + // TODO(eger): Fix up drop cap code for RTL languages. + ROW_IT r_it(row_list()); + ROW *first_row = r_it.data(); + ROW *second_row = r_it.data_relative(1); + + // initialize the bottom of a fictitious drop cap far above the first line. + int drop_cap_bottom = first_row->bounding_box().top() + + first_row->bounding_box().height(); + int drop_cap_right = first_row->bounding_box().left(); + int mid_second_line = second_row->bounding_box().top() - + second_row->bounding_box().height() / 2; + WERD_IT werd_it(r_it.data()->word_list()); // words of line one + if (!werd_it.empty()) { + C_BLOB_IT cblob_it(werd_it.data()->cblob_list()); + for (cblob_it.mark_cycle_pt(); !cblob_it.cycled_list(); + cblob_it.forward()) { + TBOX bbox = cblob_it.data()->bounding_box(); + if (bbox.bottom() <= mid_second_line) { + // we found a real drop cap + first_row->set_has_drop_cap(true); + if (drop_cap_bottom > bbox.bottom()) + drop_cap_bottom = bbox.bottom(); + if (drop_cap_right < bbox.right()) + drop_cap_right = bbox.right(); + } + } + } + + // Step Two: Calculate the margin from the text of each row to the block + // (or drop-cap) boundaries. + PB_LINE_IT lines(pblock); + r_it.set_to_list(row_list()); + for (r_it.mark_cycle_pt(); !r_it.cycled_list(); r_it.forward()) { + ROW *row = r_it.data(); + TBOX row_box = row->bounding_box(); + int left_y = row->base_line(row_box.left()) + row->x_height(); + int left_margin; + ICOORDELT_LIST *segments = lines.get_line(left_y); + LeftMargin(segments, row_box.left(), &left_margin); + delete segments; + + if (row_box.top() >= drop_cap_bottom) { + int drop_cap_distance = row_box.left() - row->space() - drop_cap_right; + if (drop_cap_distance < 0) + drop_cap_distance = 0; + if (drop_cap_distance < left_margin) + left_margin = drop_cap_distance; + } + + int right_y = row->base_line(row_box.right()) + row->x_height(); + int right_margin; + segments = lines.get_line(right_y); + RightMargin(segments, row_box.right(), &right_margin); + delete segments; + row->set_lmargin(left_margin); + row->set_rmargin(right_margin); + } +} + +/********************************************************************** + * PrintSegmentationStats + * + * Prints segmentation stats for the given block list. + **********************************************************************/ + +void PrintSegmentationStats(BLOCK_LIST* block_list) { + int num_blocks = 0; + int num_rows = 0; + int num_words = 0; + int num_blobs = 0; + BLOCK_IT block_it(block_list); + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { + BLOCK* block = block_it.data(); + ++num_blocks; + ROW_IT row_it(block->row_list()); + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + ++num_rows; + ROW* row = row_it.data(); + // Iterate over all werds in the row. + WERD_IT werd_it(row->word_list()); + for (werd_it.mark_cycle_pt(); !werd_it.cycled_list(); werd_it.forward()) { + WERD* werd = werd_it.data(); + ++num_words; + num_blobs += werd->cblob_list()->length(); + } + } + } + tprintf("Block list stats:\nBlocks = %d\nRows = %d\nWords = %d\nBlobs = %d\n", + num_blocks, num_rows, num_words, num_blobs); +} + +/********************************************************************** + * ExtractBlobsFromSegmentation + * + * Extracts blobs from the given block list and adds them to the output list. + * The block list must have been created by performing a page segmentation. + **********************************************************************/ + +void ExtractBlobsFromSegmentation(BLOCK_LIST* blocks, + C_BLOB_LIST* output_blob_list) { + C_BLOB_IT return_list_it(output_blob_list); + BLOCK_IT block_it(blocks); + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { + BLOCK* block = block_it.data(); + ROW_IT row_it(block->row_list()); + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + ROW* row = row_it.data(); + // Iterate over all werds in the row. + WERD_IT werd_it(row->word_list()); + for (werd_it.mark_cycle_pt(); !werd_it.cycled_list(); werd_it.forward()) { + WERD* werd = werd_it.data(); + return_list_it.move_to_last(); + return_list_it.add_list_after(werd->cblob_list()); + return_list_it.move_to_last(); + return_list_it.add_list_after(werd->rej_cblob_list()); + } + } + } +} + +/********************************************************************** + * RefreshWordBlobsFromNewBlobs() + * + * Refreshes the words in the block_list by using blobs in the + * new_blobs list. + * Block list must have word segmentation in it. + * It consumes the blobs provided in the new_blobs list. The blobs leftover in + * the new_blobs list after the call weren't matched to any blobs of the words + * in block list. + * The output not_found_blobs is a list of blobs from the original segmentation + * in the block_list for which no corresponding new blobs were found. + **********************************************************************/ + +void RefreshWordBlobsFromNewBlobs(BLOCK_LIST* block_list, + C_BLOB_LIST* new_blobs, + C_BLOB_LIST* not_found_blobs) { + // Now iterate over all the blobs in the segmentation_block_list_, and just + // replace the corresponding c-blobs inside the werds. + BLOCK_IT block_it(block_list); + for (block_it.mark_cycle_pt(); !block_it.cycled_list(); block_it.forward()) { + BLOCK* block = block_it.data(); + if (block->poly_block() != NULL && !block->poly_block()->IsText()) + continue; // Don't touch non-text blocks. + // Iterate over all rows in the block. + ROW_IT row_it(block->row_list()); + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + ROW* row = row_it.data(); + // Iterate over all werds in the row. + WERD_IT werd_it(row->word_list()); + WERD_LIST new_words; + WERD_IT new_words_it(&new_words); + for (werd_it.mark_cycle_pt(); !werd_it.cycled_list(); werd_it.forward()) { + WERD* werd = werd_it.extract(); + WERD* new_werd = werd->ConstructWerdWithNewBlobs(new_blobs, + not_found_blobs); + if (new_werd) { + // Insert this new werd into the actual row's werd-list. Remove the + // existing one. + new_words_it.add_after_then_move(new_werd); + delete werd; + } else { + // Reinsert the older word back, for lack of better options. + // This is critical since dropping the words messes up segmentation: + // eg. 1st word in the row might otherwise have W_FUZZY_NON turned on. + new_words_it.add_after_then_move(werd); + } + } + // Get rid of the old word list & replace it with the new one. + row->word_list()->clear(); + werd_it.move_to_first(); + werd_it.add_list_after(&new_words); + } + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/ocrblock.h b/3rdparty/hgOCR/include/ccstruct/ocrblock.h new file mode 100644 index 00000000..c93aaf8a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrblock.h @@ -0,0 +1,237 @@ +/********************************************************************** + * File: ocrblock.h (Formerly block.h) + * Description: Page block class definition. + * Author: Ray Smith + * Created: Thu Mar 14 17:32:01 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef OCRBLOCK_H +#define OCRBLOCK_H + +#include "ocrpara.h" +#include "ocrrow.h" +#include "pdblock.h" + +class BLOCK; //forward decl + +ELISTIZEH (BLOCK) +class BLOCK:public ELIST_LINK, public PDBLK +//page block +{ + friend class BLOCK_RECT_IT; //block iterator + + public: + BLOCK() + : re_rotation_(1.0f, 0.0f), + classify_rotation_(1.0f, 0.0f), + skew_(1.0f, 0.0f) { + right_to_left_ = false; + hand_poly = NULL; + } + BLOCK(const char *name, //< filename + BOOL8 prop, //< proportional + inT16 kern, //< kerning + inT16 space, //< spacing + inT16 xmin, //< bottom left + inT16 ymin, + inT16 xmax, //< top right + inT16 ymax); + + ~BLOCK () { + } + + /** + * set space size etc. + * @param prop proportional + * @param kern inter char size + * @param space inter word size + * @param ch_pitch pitch if fixed + */ + void set_stats(BOOL8 prop, + inT16 kern, + inT16 space, + inT16 ch_pitch) { + proportional = prop; + kerning = (inT8) kern; + spacing = space; + pitch = ch_pitch; + } + /// set char size + void set_xheight(inT32 height) { + xheight = height; + } + /// set font class + void set_font_class(inT16 font) { + font_class = font; + } + /// return proportional + BOOL8 prop() const { + return proportional; + } + bool right_to_left() const { + return right_to_left_; + } + void set_right_to_left(bool value) { + right_to_left_ = value; + } + /// return pitch + inT32 fixed_pitch() const { + return pitch; + } + /// return kerning + inT16 kern() const { + return kerning; + } + /// return font class + inT16 font() const { + return font_class; + } + /// return spacing + inT16 space() const { + return spacing; + } + /// return filename + const char *name() const { + return filename.string (); + } + /// return xheight + inT32 x_height() const { + return xheight; + } + float cell_over_xheight() const { + return cell_over_xheight_; + } + void set_cell_over_xheight(float ratio) { + cell_over_xheight_ = ratio; + } + /// get rows + ROW_LIST *row_list() { + return &rows; + } + // Compute the margins between the edges of each row and this block's + // polyblock, and store the results in the rows. + void compute_row_margins(); + + // get paragraphs + PARA_LIST *para_list() { + return ¶s_; + } + /// get blobs + C_BLOB_LIST *blob_list() { + return &c_blobs; + } + C_BLOB_LIST *reject_blobs() { + return &rej_blobs; + } + FCOORD re_rotation() const { + return re_rotation_; // How to transform coords back to image. + } + void set_re_rotation(const FCOORD& rotation) { + re_rotation_ = rotation; + } + FCOORD classify_rotation() const { + return classify_rotation_; // Apply this before classifying. + } + void set_classify_rotation(const FCOORD& rotation) { + classify_rotation_ = rotation; + } + FCOORD skew() const { + return skew_; // Direction of true horizontal. + } + void set_skew(const FCOORD& skew) { + skew_ = skew; + } + const ICOORD& median_size() const { + return median_size_; + } + void set_median_size(int x, int y) { + median_size_.set_x(x); + median_size_.set_y(y); + } + + Pix* render_mask(TBOX* mask_box) { + return PDBLK::render_mask(re_rotation_, mask_box); + } + + // Returns the bounding box including the desired combination of upper and + // lower noise/diacritic elements. + TBOX restricted_bounding_box(bool upper_dots, bool lower_dots) const; + + // Reflects the polygon in the y-axis and recomputes the bounding_box. + // Does nothing to any contained rows/words/blobs etc. + void reflect_polygon_in_y_axis(); + + void rotate(const FCOORD& rotation); + + /// decreasing y order + void sort_rows(); + + /// shrink white space + void compress(); + + /// check proportional + void check_pitch(); + + /// shrink white space and move by vector + void compress(const ICOORD vec); + + /// dump whole table + void print(FILE *fp, BOOL8 dump); + + BLOCK& operator=(const BLOCK & source); + + private: + BOOL8 proportional; //< proportional + bool right_to_left_; //< major script is right to left. + inT8 kerning; //< inter blob gap + inT16 spacing; //< inter word gap + inT16 pitch; //< pitch of non-props + inT16 font_class; //< correct font class + inT32 xheight; //< height of chars + float cell_over_xheight_; //< Ratio of cell height to xheight. + STRING filename; //< name of block + ROW_LIST rows; //< rows in block + PARA_LIST paras_; //< paragraphs of block + C_BLOB_LIST c_blobs; //< before textord + C_BLOB_LIST rej_blobs; //< duff stuff + FCOORD re_rotation_; //< How to transform coords back to image. + FCOORD classify_rotation_; //< Apply this before classifying. + FCOORD skew_; //< Direction of true horizontal. + ICOORD median_size_; //< Median size of blobs. +}; + +int decreasing_top_order(const void *row1, const void *row2); + +// A function to print segmentation stats for the given block list. +void PrintSegmentationStats(BLOCK_LIST* block_list); + +// Extracts blobs fromo the given block list and adds them to the output list. +// The block list must have been created by performing a page segmentation. +void ExtractBlobsFromSegmentation(BLOCK_LIST* blocks, + C_BLOB_LIST* output_blob_list); + +// Refreshes the words in the block_list by using blobs in the +// new_blobs list. +// Block list must have word segmentation in it. +// It consumes the blobs provided in the new_blobs list. The blobs leftover in +// the new_blobs list after the call weren't matched to any blobs of the words +// in block list. +// The output not_found_blobs is a list of blobs from the original segmentation +// in the block_list for which no corresponding new blobs were found. +void RefreshWordBlobsFromNewBlobs(BLOCK_LIST* block_list, + C_BLOB_LIST* new_blobs, + C_BLOB_LIST* not_found_blobs); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/ocrpara.cpp b/3rdparty/hgOCR/include/ccstruct/ocrpara.cpp new file mode 100644 index 00000000..b244bfa1 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrpara.cpp @@ -0,0 +1,100 @@ +///////////////////////////////////////////////////////////////////// +// File: ocrpara.h +// Description: OCR Paragraph Output Type +// Author: David Eger +// Created: 2010-11-15 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include + +#include "ocrpara.h" +#include "host.h" // For NearlyEqual() + +ELISTIZE(PARA) + +using tesseract::JUSTIFICATION_LEFT; +using tesseract::JUSTIFICATION_RIGHT; +using tesseract::JUSTIFICATION_CENTER; +using tesseract::JUSTIFICATION_UNKNOWN; + +static STRING ParagraphJustificationToString( + tesseract::ParagraphJustification justification) { + switch (justification) { + case JUSTIFICATION_LEFT: + return "LEFT"; + case JUSTIFICATION_RIGHT: + return "RIGHT"; + case JUSTIFICATION_CENTER: + return "CENTER"; + default: + return "UNKNOWN"; + } +} + +bool ParagraphModel::ValidFirstLine(int lmargin, int lindent, + int rindent, int rmargin) const { + switch (justification_) { + case JUSTIFICATION_LEFT: + return NearlyEqual(lmargin + lindent, margin_ + first_indent_, + tolerance_); + case JUSTIFICATION_RIGHT: + return NearlyEqual(rmargin + rindent, margin_ + first_indent_, + tolerance_); + case JUSTIFICATION_CENTER: + return NearlyEqual(lindent, rindent, tolerance_ * 2); + default: + // shouldn't happen + return false; + } +} + +bool ParagraphModel::ValidBodyLine(int lmargin, int lindent, + int rindent, int rmargin) const { + switch (justification_) { + case JUSTIFICATION_LEFT: + return NearlyEqual(lmargin + lindent, margin_ + body_indent_, + tolerance_); + case JUSTIFICATION_RIGHT: + return NearlyEqual(rmargin + rindent, margin_ + body_indent_, + tolerance_); + case JUSTIFICATION_CENTER: + return NearlyEqual(lindent, rindent, tolerance_ * 2); + default: + // shouldn't happen + return false; + } +} + +bool ParagraphModel::Comparable(const ParagraphModel &other) const { + if (justification_ != other.justification_) + return false; + if (justification_ == JUSTIFICATION_CENTER || + justification_ == JUSTIFICATION_UNKNOWN) + return true; + int tolerance = (tolerance_ + other.tolerance_) / 4; + return NearlyEqual(margin_ + first_indent_, + other.margin_ + other.first_indent_, tolerance) && + NearlyEqual(margin_ + body_indent_, + other.margin_ + other.body_indent_, tolerance); +} + +STRING ParagraphModel::ToString() const { + char buffer[200]; + const STRING &alignment = ParagraphJustificationToString(justification_); + snprintf(buffer, sizeof(buffer), + "margin: %d, first_indent: %d, body_indent: %d, alignment: %s", + margin_, first_indent_, body_indent_, alignment.string()); + return STRING(buffer); +} diff --git a/3rdparty/hgOCR/include/ccstruct/ocrpara.h b/3rdparty/hgOCR/include/ccstruct/ocrpara.h new file mode 100644 index 00000000..025e2bfa --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrpara.h @@ -0,0 +1,191 @@ +///////////////////////////////////////////////////////////////////// +// File: ocrpara.h +// Description: OCR Paragraph Output Type +// Author: David Eger +// Created: 2010-11-15 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCSTRUCT_OCRPARA_H_ +#define TESSERACT_CCSTRUCT_OCRPARA_H_ + +#include "publictypes.h" +#include "elst.h" +#include "strngs.h" + +class ParagraphModel; + +struct PARA : public ELIST_LINK { + public: + PARA() : model(NULL), is_list_item(false), + is_very_first_or_continuation(false), has_drop_cap(false) {} + + // We do not own the model, we just reference it. + // model may be NULL if there is not a good model for this paragraph. + const ParagraphModel *model; + + bool is_list_item; + + // The first paragraph on a page often lacks a first line indent, but should + // still be modeled by the same model as other body text paragraphs on the + // page. + bool is_very_first_or_continuation; + + // Does this paragraph begin with a drop cap? + bool has_drop_cap; +}; + +ELISTIZEH(PARA) + +// A geometric model of paragraph indentation and alignment. +// +// Measurements are in pixels. The meaning of the integer arguments changes +// depending upon the value of justification. Distances less than or equal +// to tolerance apart we take as "equivalent" for the purpose of model +// matching, and in the examples below, we assume tolerance is zero. +// +// justification = LEFT: +// margin the "ignored" margin to the left block edge. +// first_indent indent from the left margin to a typical first text line. +// body_indent indent from the left margin of a typical body text line. +// +// justification = RIGHT: +// margin the "ignored" margin to the right block edge. +// first_indent indent from the right margin to a typical first text line. +// body_indent indent from the right margin of a typical body text line. +// +// justification = CENTER: +// margin ignored +// first_indent ignored +// body_indent ignored +// +// ====== Extended example, assuming each letter is ten pixels wide: ======= +// +// +--------------------------------+ +// | Awesome | ParagraphModel(CENTER, 0, 0, 0) +// | Centered Title | +// | Paragraph Detection | +// | OCR TEAM | +// | 10 November 2010 | +// | | +// | Look here, I have a paragraph.| ParagraphModel(LEFT, 0, 20, 0) +// |This paragraph starts at the top| +// |of the page and takes 3 lines. | +// | Here I have a second paragraph| ParagraphModel(LEFT, 0, 20, 0) +// |which indicates that the first | +// |paragraph is not a continuation | +// |from a previous page, as it is | +// |indented just like this second | +// |paragraph. | +// | Here is a block quote. It | ParagraphModel(LEFT, 30, 0, 0) +// | looks like the prior text | +// | but it is indented more | +// | and is fully justified. | +// | So how does one deal with | ParagraphModel(LEFT, 0, 20, 0) +// |centered text, block quotes, | +// |normal paragraphs, and lists | +// |like what follows? | +// |1. Make a plan. | ParagraphModel(LEFT, 0, 0, 30) +// |2. Use a heuristic, for example,| ParagraphModel(LEFT, 0, 0, 30) +// | looking for lines where the | +// | first word of the next line | +// | would fit on the previous | +// | line. | +// |8. Try to implement the plan in | ParagraphModel(LEFT, 0, 0, 30) +// | Python and try it out. | +// |4. Determine how to fix the | ParagraphModel(LEFT, 0, 0, 30) +// | mistakes. | +// |5. Repeat. | ParagraphModel(LEFT, 0, 0, 30) +// | For extra painful penalty work| ParagraphModel(LEFT, 0, 20, 0) +// |you can try to identify source | +// |code. Ouch! | +// +--------------------------------+ +class ParagraphModel { + public: + ParagraphModel(tesseract::ParagraphJustification justification, + int margin, + int first_indent, + int body_indent, + int tolerance) + : justification_(justification), + margin_(margin), + first_indent_(first_indent), + body_indent_(body_indent), + tolerance_(tolerance) { + // Make one of {first_indent, body_indent} is 0. + int added_margin = first_indent; + if (body_indent < added_margin) + added_margin = body_indent; + margin_ += added_margin; + first_indent_ -= added_margin; + body_indent_ -= added_margin; + } + + ParagraphModel() + : justification_(tesseract::JUSTIFICATION_UNKNOWN), + margin_(0), + first_indent_(0), + body_indent_(0), + tolerance_(0) { } + + // ValidFirstLine() and ValidBodyLine() take arguments describing a text line + // in a block of text which we are trying to model: + // lmargin, lindent: these add up to the distance from the leftmost ink + // in the text line to the surrounding text block's left + // edge. + // rmargin, rindent: these add up to the distance from the rightmost ink + // in the text line to the surrounding text block's right + // edge. + // The caller determines the division between "margin" and "indent", which + // only actually affect whether we think the line may be centered. + // + // If the amount of whitespace matches the amount of whitespace expected on + // the relevant side of the line (within tolerance_) we say it matches. + + // Return whether a given text line could be a first paragraph line according + // to this paragraph model. + bool ValidFirstLine(int lmargin, int lindent, int rindent, int rmargin) const; + + // Return whether a given text line could be a first paragraph line according + // to this paragraph model. + bool ValidBodyLine(int lmargin, int lindent, int rindent, int rmargin) const; + + tesseract::ParagraphJustification justification() const { + return justification_; + } + int margin() const { return margin_; } + int first_indent() const { return first_indent_; } + int body_indent() const { return body_indent_; } + int tolerance() const { return tolerance_; } + bool is_flush() const { + return (justification_ == tesseract::JUSTIFICATION_LEFT || + justification_ == tesseract::JUSTIFICATION_RIGHT) && + abs(first_indent_ - body_indent_) <= tolerance_; + } + + // Return whether this model is likely to agree with the other model on most + // paragraphs they are marked. + bool Comparable(const ParagraphModel &other) const; + + STRING ToString() const; + + private: + tesseract::ParagraphJustification justification_; + int margin_; + int first_indent_; + int body_indent_; + int tolerance_; +}; + +#endif // TESSERACT_CCSTRUCT_OCRPARA_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/ocrrow.cpp b/3rdparty/hgOCR/include/ccstruct/ocrrow.cpp new file mode 100644 index 00000000..c6f919ca --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrrow.cpp @@ -0,0 +1,243 @@ +/********************************************************************** + * File: ocrrow.cpp (Formerly row.c) + * Description: Code for the ROW class. + * Author: Ray Smith + * Created: Tue Oct 08 15:58:04 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "ocrrow.h" +#include "blobbox.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +ELISTIZE (ROW) +/********************************************************************** + * ROW::ROW + * + * Constructor to build a ROW. Only the stats stuff are given here. + * The words are added directly. + **********************************************************************/ +ROW::ROW ( //constructor +inT32 spline_size, //no of segments +inT32 * xstarts, //segment boundaries +double *coeffs, //coefficients +float x_height, //line height +float ascenders, //ascender size +float descenders, //descender drop +inT16 kern, //char gap +inT16 space //word gap +) + : baseline(spline_size, xstarts, coeffs), + para_(NULL) { + kerning = kern; //just store stuff + spacing = space; + xheight = x_height; + ascrise = ascenders; + bodysize = 0.0f; + descdrop = descenders; + has_drop_cap_ = false; + lmargin_ = 0; + rmargin_ = 0; +} + + +/********************************************************************** + * ROW::ROW + * + * Constructor to build a ROW. Only the stats stuff are given here. + * The words are added directly. + **********************************************************************/ + +ROW::ROW( //constructor + TO_ROW *to_row, //source row + inT16 kern, //char gap + inT16 space //word gap + ) : para_(NULL) { + kerning = kern; //just store stuff + spacing = space; + xheight = to_row->xheight; + bodysize = to_row->body_size; + ascrise = to_row->ascrise; + descdrop = to_row->descdrop; + baseline = to_row->baseline; + has_drop_cap_ = false; + lmargin_ = 0; + rmargin_ = 0; +} + +// Returns the bounding box including the desired combination of upper and +// lower noise/diacritic elements. +TBOX ROW::restricted_bounding_box(bool upper_dots, bool lower_dots) const { + TBOX box; + // This is a read-only iteration of the words in the row. + WERD_IT it(const_cast(&words)); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + box += it.data()->restricted_bounding_box(upper_dots, lower_dots); + } + return box; +} + +/********************************************************************** + * ROW::recalc_bounding_box + * + * Set the bounding box correctly + **********************************************************************/ + +void ROW::recalc_bounding_box() { //recalculate BB + WERD *word; //current word + WERD_IT it = &words; //words of ROW + inT16 left; //of word + inT16 prev_left; //old left + + if (!it.empty ()) { + word = it.data (); + prev_left = word->bounding_box ().left (); + it.forward (); + while (!it.at_first ()) { + word = it.data (); + left = word->bounding_box ().left (); + if (left < prev_left) { + it.move_to_first (); + //words in BB order + it.sort (word_comparator); + break; + } + prev_left = left; + it.forward (); + } + } + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + word = it.data (); + if (it.at_first ()) + word->set_flag (W_BOL, TRUE); + else + //not start of line + word->set_flag (W_BOL, FALSE); + if (it.at_last ()) + word->set_flag (W_EOL, TRUE); + else + //not end of line + word->set_flag (W_EOL, FALSE); + //extend BB as reqd + bound_box += word->bounding_box (); + } +} + + +/********************************************************************** + * ROW::move + * + * Reposition row by vector + **********************************************************************/ + +void ROW::move( // reposition row + const ICOORD vec // by vector + ) { + WERD_IT it(&words); // word iterator + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + it.data ()->move (vec); + + bound_box.move (vec); + baseline.move (vec); +} + + +/********************************************************************** + * ROW::print + * + * Display members + **********************************************************************/ + +void ROW::print( //print + FILE *fp //file to print on + ) { + tprintf("Kerning= %d\n", kerning); + tprintf("Spacing= %d\n", spacing); + bound_box.print(); + tprintf("Xheight= %f\n", xheight); + tprintf("Ascrise= %f\n", ascrise); + tprintf("Descdrop= %f\n", descdrop); + tprintf("has_drop_cap= %d\n", has_drop_cap_); + tprintf("lmargin= %d, rmargin= %d\n", lmargin_, rmargin_); +} + + +/********************************************************************** + * ROW::plot + * + * Draw the ROW in the given colour. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void ROW::plot( //draw it + ScrollView* window, //window to draw in + ScrollView::Color colour //colour to draw in + ) { + WERD *word; //current word + WERD_IT it = &words; //words of ROW + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + word = it.data (); + word->plot (window, colour); //all in one colour + } +} + +/********************************************************************** + * ROW::plot + * + * Draw the ROW in rainbow colours. + **********************************************************************/ + +void ROW::plot( //draw it + ScrollView* window //window to draw in + ) { + WERD *word; //current word + WERD_IT it = &words; //words of ROW + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + word = it.data (); + word->plot (window); //in rainbow colours + } +} +#endif // GRAPHICS_DISABLED + +/********************************************************************** + * ROW::operator= + * + * Assign rows by duplicating the row structure but NOT the WERDLIST + **********************************************************************/ + +ROW & ROW::operator= (const ROW & source) { + this->ELIST_LINK::operator= (source); + kerning = source.kerning; + spacing = source.spacing; + xheight = source.xheight; + bodysize = source.bodysize; + ascrise = source.ascrise; + descdrop = source.descdrop; + if (!words.empty ()) + words.clear (); + baseline = source.baseline; //QSPLINES must do = + bound_box = source.bound_box; + has_drop_cap_ = source.has_drop_cap_; + lmargin_ = source.lmargin_; + rmargin_ = source.rmargin_; + para_ = source.para_; + return *this; +} diff --git a/3rdparty/hgOCR/include/ccstruct/ocrrow.h b/3rdparty/hgOCR/include/ccstruct/ocrrow.h new file mode 100644 index 00000000..45384b71 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ocrrow.h @@ -0,0 +1,165 @@ +/********************************************************************** + * File: ocrrow.h (Formerly row.h) + * Description: Code for the ROW class. + * Author: Ray Smith + * Created: Tue Oct 08 15:58:04 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef OCRROW_H +#define OCRROW_H + +#include + +#include "quspline.h" +#include "werd.h" + +class TO_ROW; + +struct PARA; + +class ROW:public ELIST_LINK +{ + friend void tweak_row_baseline(ROW *, double, double); + public: + ROW() { + } //empty constructor + ROW( //constructor + inT32 spline_size, //no of segments + inT32 *xstarts, //segment boundaries + double *coeffs, //coefficients //ascender size + float x_height, + float ascenders, + float descenders, //descender size + inT16 kern, //char gap + inT16 space); //word gap + ROW( //constructor + TO_ROW *row, //textord row + inT16 kern, //char gap + inT16 space); //word gap + + WERD_LIST *word_list() { //get words + return &words; + } + + float base_line( //compute baseline + float xpos) const { //at the position + //get spline value + return (float) baseline.y (xpos); + } + float x_height() const { //return x height + return xheight; + } + void set_x_height(float new_xheight) { // set x height + xheight = new_xheight; + } + inT32 kern() const { //return kerning + return kerning; + } + float body_size() const { //return body size + return bodysize; + } + void set_body_size(float new_size) { // set body size + bodysize = new_size; + } + inT32 space() const { //return spacing + return spacing; + } + float ascenders() const { //return size + return ascrise; + } + float descenders() const { //return size + return descdrop; + } + TBOX bounding_box() const { //return bounding box + return bound_box; + } + // Returns the bounding box including the desired combination of upper and + // lower noise/diacritic elements. + TBOX restricted_bounding_box(bool upper_dots, bool lower_dots) const; + + void set_lmargin(inT16 lmargin) { + lmargin_ = lmargin; + } + void set_rmargin(inT16 rmargin) { + rmargin_ = rmargin; + } + inT16 lmargin() const { + return lmargin_; + } + inT16 rmargin() const { + return rmargin_; + } + + void set_has_drop_cap(bool has) { + has_drop_cap_ = has; + } + bool has_drop_cap() const { + return has_drop_cap_; + } + + void set_para(PARA *p) { + para_ = p; + } + PARA *para() const { + return para_; + } + + void recalc_bounding_box(); //recalculate BB + + void move( // reposition row + const ICOORD vec); // by vector + + void print( //print + FILE *fp); //file to print on + + #ifndef GRAPHICS_DISABLED + void plot( //draw one + ScrollView* window, //window to draw in + ScrollView::Color colour); //uniform colour + void plot( //draw one + ScrollView* window); //in rainbow colours + + void plot_baseline( //draw the baseline + ScrollView* window, //window to draw in + ScrollView::Color colour) { //colour to draw + //draw it + baseline.plot (window, colour); + } + #endif // GRAPHICS_DISABLED + ROW& operator= (const ROW & source); + + private: + inT32 kerning; //inter char gap + inT32 spacing; //inter word gap + TBOX bound_box; //bounding box + float xheight; //height of line + float ascrise; //size of ascenders + float descdrop; //-size of descenders + float bodysize; //CJK character size. (equals to + //xheight+ascrise by default) + WERD_LIST words; //words + QSPLINE baseline; //baseline spline + + // These get set after blocks have been determined. + bool has_drop_cap_; + inT16 lmargin_; // Distance to left polyblock margin. + inT16 rmargin_; // Distance to right polyblock margin. + + // This gets set during paragraph analysis. + PARA *para_; // Paragraph of which this row is part. +}; + +ELISTIZEH (ROW) +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/otsuthr.cpp b/3rdparty/hgOCR/include/ccstruct/otsuthr.cpp new file mode 100644 index 00000000..8822ce29 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/otsuthr.cpp @@ -0,0 +1,216 @@ +/********************************************************************** + * File: otsuthr.cpp + * Description: Simple Otsu thresholding for binarizing images. + * Author: Ray Smith + * Created: Fri Mar 07 12:31:01 PST 2008 + * + * (C) Copyright 2008, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "otsuthr.h" + +#include +#include "allheaders.h" +#include "helpers.h" +#include "openclwrapper.h" + + +namespace tesseract { + +// Computes the Otsu threshold(s) for the given image rectangle, making one +// for each channel. Each channel is always one byte per pixel. +// Returns an array of threshold values and an array of hi_values, such +// that a pixel value >threshold[channel] is considered foreground if +// hi_values[channel] is 0 or background if 1. A hi_value of -1 indicates +// that there is no apparent foreground. At least one hi_value will not be -1. +// Delete thresholds and hi_values with delete [] after use. +// The return value is the number of channels in the input image, being +// the size of the output thresholds and hi_values arrays. +int OtsuThreshold(Pix* src_pix, int left, int top, int width, int height, + int** thresholds, int** hi_values) { + int num_channels = pixGetDepth(src_pix) / 8; + // Of all channels with no good hi_value, keep the best so we can always + // produce at least one answer. + PERF_COUNT_START("OtsuThreshold") + int best_hi_value = 1; + int best_hi_index = 0; + bool any_good_hivalue = false; + double best_hi_dist = 0.0; + *thresholds = new int[num_channels]; + *hi_values = new int[num_channels]; + + // only use opencl if compiled w/ OpenCL and selected device is opencl +#ifdef USE_OPENCL + // all of channel 0 then all of channel 1... + int* histogramAllChannels = new int[kHistogramSize * num_channels]; + + // Calculate Histogram on GPU + OpenclDevice od; + if (od.selectedDeviceIsOpenCL() && (num_channels == 1 || num_channels == 4) && + top == 0 && left == 0) { + od.HistogramRectOCL((unsigned char*)pixGetData(src_pix), num_channels, + pixGetWpl(src_pix) * 4, left, top, width, height, + kHistogramSize, histogramAllChannels); + + // Calculate Threshold from Histogram on cpu + for (int ch = 0; ch < num_channels; ++ch) { + (*thresholds)[ch] = -1; + (*hi_values)[ch] = -1; + int *histogram = &histogramAllChannels[kHistogramSize * ch]; + int H; + int best_omega_0; + int best_t = OtsuStats(histogram, &H, &best_omega_0); + if (best_omega_0 == 0 || best_omega_0 == H) { + // This channel is empty. + continue; + } + // To be a convincing foreground we must have a small fraction of H + // or to be a convincing background we must have a large fraction of H. + // In between we assume this channel contains no thresholding information. + int hi_value = best_omega_0 < H * 0.5; + (*thresholds)[ch] = best_t; + if (best_omega_0 > H * 0.75) { + any_good_hivalue = true; + (*hi_values)[ch] = 0; + } else if (best_omega_0 < H * 0.25) { + any_good_hivalue = true; + (*hi_values)[ch] = 1; + } else { + // In case all channels are like this, keep the best of the bad lot. + double hi_dist = hi_value ? (H - best_omega_0) : best_omega_0; + if (hi_dist > best_hi_dist) { + best_hi_dist = hi_dist; + best_hi_value = hi_value; + best_hi_index = ch; + } + } + } + } else { +#endif + for (int ch = 0; ch < num_channels; ++ch) { + (*thresholds)[ch] = -1; + (*hi_values)[ch] = -1; + // Compute the histogram of the image rectangle. + int histogram[kHistogramSize]; + HistogramRect(src_pix, ch, left, top, width, height, histogram); + int H; + int best_omega_0; + int best_t = OtsuStats(histogram, &H, &best_omega_0); + if (best_omega_0 == 0 || best_omega_0 == H) { + // This channel is empty. + continue; + } + // To be a convincing foreground we must have a small fraction of H + // or to be a convincing background we must have a large fraction of H. + // In between we assume this channel contains no thresholding information. + int hi_value = best_omega_0 < H * 0.5; + (*thresholds)[ch] = best_t; + if (best_omega_0 > H * 0.75) { + any_good_hivalue = true; + (*hi_values)[ch] = 0; + } else if (best_omega_0 < H * 0.25) { + any_good_hivalue = true; + (*hi_values)[ch] = 1; + } else { + // In case all channels are like this, keep the best of the bad lot. + double hi_dist = hi_value ? (H - best_omega_0) : best_omega_0; + if (hi_dist > best_hi_dist) { + best_hi_dist = hi_dist; + best_hi_value = hi_value; + best_hi_index = ch; + } + } + } +#ifdef USE_OPENCL + } + delete[] histogramAllChannels; +#endif // USE_OPENCL + + if (!any_good_hivalue) { + // Use the best of the ones that were not good enough. + (*hi_values)[best_hi_index] = best_hi_value; + } + PERF_COUNT_END + return num_channels; +} + +// Computes the histogram for the given image rectangle, and the given +// single channel. Each channel is always one byte per pixel. +// Histogram is always a kHistogramSize(256) element array to count +// occurrences of each pixel value. +void HistogramRect(Pix* src_pix, int channel, + int left, int top, int width, int height, + int* histogram) { + PERF_COUNT_START("HistogramRect") + int num_channels = pixGetDepth(src_pix) / 8; + channel = ClipToRange(channel, 0, num_channels - 1); + int bottom = top + height; + memset(histogram, 0, sizeof(*histogram) * kHistogramSize); + int src_wpl = pixGetWpl(src_pix); + l_uint32* srcdata = pixGetData(src_pix); + for (int y = top; y < bottom; ++y) { + const l_uint32* linedata = srcdata + y * src_wpl; + for (int x = 0; x < width; ++x) { + int pixel = GET_DATA_BYTE(const_cast( + reinterpret_cast(linedata)), + (x + left) * num_channels + channel); + ++histogram[pixel]; + } + } + PERF_COUNT_END +} + +// Computes the Otsu threshold(s) for the given histogram. +// Also returns H = total count in histogram, and +// omega0 = count of histogram below threshold. +int OtsuStats(const int* histogram, int* H_out, int* omega0_out) { + int H = 0; + double mu_T = 0.0; + for (int i = 0; i < kHistogramSize; ++i) { + H += histogram[i]; + mu_T += static_cast(i) * histogram[i]; + } + + // Now maximize sig_sq_B over t. + // http://www.ctie.monash.edu.au/hargreave/Cornall_Terry_328.pdf + int best_t = -1; + int omega_0, omega_1; + int best_omega_0 = 0; + double best_sig_sq_B = 0.0; + double mu_0, mu_1, mu_t; + omega_0 = 0; + mu_t = 0.0; + for (int t = 0; t < kHistogramSize - 1; ++t) { + omega_0 += histogram[t]; + mu_t += t * static_cast(histogram[t]); + if (omega_0 == 0) + continue; + omega_1 = H - omega_0; + if (omega_1 == 0) + break; + mu_0 = mu_t / omega_0; + mu_1 = (mu_T - mu_t) / omega_1; + double sig_sq_B = mu_1 - mu_0; + sig_sq_B *= sig_sq_B * omega_0 * omega_1; + if (best_t < 0 || sig_sq_B > best_sig_sq_B) { + best_sig_sq_B = sig_sq_B; + best_t = t; + best_omega_0 = omega_0; + } + } + if (H_out != NULL) *H_out = H; + if (omega0_out != NULL) *omega0_out = best_omega_0; + return best_t; +} + +} // namespace tesseract. diff --git a/3rdparty/hgOCR/include/ccstruct/otsuthr.h b/3rdparty/hgOCR/include/ccstruct/otsuthr.h new file mode 100644 index 00000000..7e7d2817 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/otsuthr.h @@ -0,0 +1,56 @@ +/////////////////////////////////////////////////////////////////////// +// File: otsuthr.h +// Description: Simple Otsu thresholding for binarizing images. +// Author: Ray Smith +// Created: Fri Mar 07 12:14:01 PST 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCMAIN_OTSUTHR_H__ +#define TESSERACT_CCMAIN_OTSUTHR_H__ + +struct Pix; + +namespace tesseract { + +const int kHistogramSize = 256; // The size of a histogram of pixel values. + +// Computes the Otsu threshold(s) for the given image rectangle, making one +// for each channel. Each channel is always one byte per pixel. +// Returns an array of threshold values and an array of hi_values, such +// that a pixel value >threshold[channel] is considered foreground if +// hi_values[channel] is 0 or background if 1. A hi_value of -1 indicates +// that there is no apparent foreground. At least one hi_value will not be -1. +// Delete thresholds and hi_values with delete [] after use. +// The return value is the number of channels in the input image, being +// the size of the output thresholds and hi_values arrays. +int OtsuThreshold(Pix* src_pix, int left, int top, int width, int height, + int** thresholds, int** hi_values); + +// Computes the histogram for the given image rectangle, and the given +// single channel. Each channel is always one byte per pixel. +// Histogram is always a kHistogramSize(256) element array to count +// occurrences of each pixel value. +void HistogramRect(Pix* src_pix, int channel, + int left, int top, int width, int height, + int* histogram); + +// Computes the Otsu threshold(s) for the given histogram. +// Also returns H = total count in histogram, and +// omega0 = count of histogram below threshold. +int OtsuStats(const int* histogram, int* H_out, int* omega0_out); + +} // namespace tesseract. + +#endif // TESSERACT_CCMAIN_OTSUTHR_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/pageres.cpp b/3rdparty/hgOCR/include/ccstruct/pageres.cpp new file mode 100644 index 00000000..32635365 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/pageres.cpp @@ -0,0 +1,1690 @@ +/********************************************************************** + * File: pageres.cpp (Formerly page_res.c) + * Description: Hierarchy of results classes from PAGE_RES to WERD_RES + * and an iterator class to iterate over the words. + * Main purposes: + * Easy way to iterate over the words without a 3-nested loop. + * Holds data used during word recognition. + * Holds information about alternative spacing paths. + * Author: Phil Cheatle + * Created: Tue Sep 22 08:42:49 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ +#include +#ifdef __UNIX__ +#include +#endif +#include "blamer.h" +#include "pageres.h" +#include "blobs.h" + +ELISTIZE (BLOCK_RES) +CLISTIZE (BLOCK_RES) ELISTIZE (ROW_RES) ELISTIZE (WERD_RES) + +// Gain factor for computing thresholds that determine the ambiguity of a word. +static const double kStopperAmbiguityThresholdGain = 8.0; +// Constant offset for computing thresholds that determine the ambiguity of a +// word. +static const double kStopperAmbiguityThresholdOffset = 1.5; +// Max number of broken pieces to associate. +const int kWordrecMaxNumJoinChunks = 4; +// Max ratio of word box height to line size to allow it to be processed as +// a line with other words. +const double kMaxWordSizeRatio = 1.25; +// Max ratio of line box height to line size to allow a new word to be added. +const double kMaxLineSizeRatio = 1.25; +// Max ratio of word gap to line size to allow a new word to be added. +const double kMaxWordGapRatio = 2.0; + +// Computes and returns a threshold of certainty difference used to determine +// which words to keep, based on the adjustment factors of the two words. +// TODO(rays) This is horrible. Replace with an enhance params training model. +static double StopperAmbigThreshold(double f1, double f2) { + return (f2 - f1) * kStopperAmbiguityThresholdGain - + kStopperAmbiguityThresholdOffset; +} + +/************************************************************************* + * PAGE_RES::PAGE_RES + * + * Constructor for page results + *************************************************************************/ +PAGE_RES::PAGE_RES( + bool merge_similar_words, + BLOCK_LIST *the_block_list, + WERD_CHOICE **prev_word_best_choice_ptr) { + Init(); + BLOCK_IT block_it(the_block_list); + BLOCK_RES_IT block_res_it(&block_res_list); + for (block_it.mark_cycle_pt(); + !block_it.cycled_list(); block_it.forward()) { + block_res_it.add_to_end(new BLOCK_RES(merge_similar_words, + block_it.data())); + } + prev_word_best_choice = prev_word_best_choice_ptr; +} + +/************************************************************************* + * BLOCK_RES::BLOCK_RES + * + * Constructor for BLOCK results + *************************************************************************/ + +BLOCK_RES::BLOCK_RES(bool merge_similar_words, BLOCK *the_block) { + ROW_IT row_it (the_block->row_list ()); + ROW_RES_IT row_res_it(&row_res_list); + + char_count = 0; + rej_count = 0; + font_class = -1; //not assigned + x_height = -1.0; + font_assigned = FALSE; + bold = FALSE; + italic = FALSE; + row_count = 0; + + block = the_block; + + for (row_it.mark_cycle_pt(); !row_it.cycled_list(); row_it.forward()) { + row_res_it.add_to_end(new ROW_RES(merge_similar_words, row_it.data())); + } +} + +/************************************************************************* + * ROW_RES::ROW_RES + * + * Constructor for ROW results + *************************************************************************/ + +ROW_RES::ROW_RES(bool merge_similar_words, ROW *the_row) { + WERD_IT word_it(the_row->word_list()); + WERD_RES_IT word_res_it(&word_res_list); + WERD_RES *combo = NULL; // current combination of fuzzies + WERD *copy_word; + + char_count = 0; + rej_count = 0; + whole_word_rej_count = 0; + + row = the_row; + bool add_next_word = false; + TBOX union_box; + float line_height = the_row->x_height() + the_row->ascenders() - + the_row->descenders(); + for (word_it.mark_cycle_pt(); !word_it.cycled_list(); word_it.forward()) { + WERD_RES* word_res = new WERD_RES(word_it.data()); + word_res->x_height = the_row->x_height(); + if (add_next_word) { + ASSERT_HOST(combo != NULL); + // We are adding this word to the combination. + word_res->part_of_combo = TRUE; + combo->copy_on(word_res); + } else if (merge_similar_words) { + union_box = word_res->word->bounding_box(); + add_next_word = !word_res->word->flag(W_REP_CHAR) && + union_box.height() <= line_height * kMaxWordSizeRatio; + word_res->odd_size = !add_next_word; + } + WERD* next_word = word_it.data_relative(1); + if (merge_similar_words) { + if (add_next_word && !next_word->flag(W_REP_CHAR)) { + // Next word will be added on if all of the following are true: + // Not a rep char. + // Box height small enough. + // Union box height small enough. + // Horizontal gap small enough. + TBOX next_box = next_word->bounding_box(); + int prev_right = union_box.right(); + union_box += next_box; + if (next_box.height() > line_height * kMaxWordSizeRatio || + union_box.height() > line_height * kMaxLineSizeRatio || + next_box.left() > prev_right + line_height * kMaxWordGapRatio) { + add_next_word = false; + } + } + next_word->set_flag(W_FUZZY_NON, add_next_word); + } else { + add_next_word = next_word->flag(W_FUZZY_NON); + } + if (add_next_word) { + if (combo == NULL) { + copy_word = new WERD; + *copy_word = *(word_it.data()); // deep copy + combo = new WERD_RES(copy_word); + combo->x_height = the_row->x_height(); + combo->combination = TRUE; + word_res_it.add_to_end(combo); + } + word_res->part_of_combo = TRUE; + } else { + combo = NULL; + } + word_res_it.add_to_end(word_res); + } +} + + +WERD_RES& WERD_RES::operator=(const WERD_RES & source) { + this->ELIST_LINK::operator=(source); + Clear(); + if (source.combination) { + word = new WERD; + *word = *(source.word); // deep copy + } else { + word = source.word; // pt to same word + } + if (source.bln_boxes != NULL) + bln_boxes = new tesseract::BoxWord(*source.bln_boxes); + if (source.chopped_word != NULL) + chopped_word = new TWERD(*source.chopped_word); + if (source.rebuild_word != NULL) + rebuild_word = new TWERD(*source.rebuild_word); + // TODO(rays) Do we ever need to copy the seam_array? + blob_row = source.blob_row; + denorm = source.denorm; + if (source.box_word != NULL) + box_word = new tesseract::BoxWord(*source.box_word); + best_state = source.best_state; + correct_text = source.correct_text; + blob_widths = source.blob_widths; + blob_gaps = source.blob_gaps; + // None of the uses of operator= require the ratings matrix to be copied, + // so don't as it would be really slow. + + // Copy the cooked choices. + WERD_CHOICE_IT wc_it(const_cast(&source.best_choices)); + WERD_CHOICE_IT wc_dest_it(&best_choices); + for (wc_it.mark_cycle_pt(); !wc_it.cycled_list(); wc_it.forward()) { + const WERD_CHOICE *choice = wc_it.data(); + wc_dest_it.add_after_then_move(new WERD_CHOICE(*choice)); + } + if (!wc_dest_it.empty()) { + wc_dest_it.move_to_first(); + best_choice = wc_dest_it.data(); + } else { + best_choice = NULL; + } + + if (source.raw_choice != NULL) { + raw_choice = new WERD_CHOICE(*source.raw_choice); + } else { + raw_choice = NULL; + } + if (source.ep_choice != NULL) { + ep_choice = new WERD_CHOICE(*source.ep_choice); + } else { + ep_choice = NULL; + } + reject_map = source.reject_map; + combination = source.combination; + part_of_combo = source.part_of_combo; + CopySimpleFields(source); + if (source.blamer_bundle != NULL) { + blamer_bundle = new BlamerBundle(*(source.blamer_bundle)); + } + return *this; +} + +// Copies basic fields that don't involve pointers that might be useful +// to copy when making one WERD_RES from another. +void WERD_RES::CopySimpleFields(const WERD_RES& source) { + tess_failed = source.tess_failed; + tess_accepted = source.tess_accepted; + tess_would_adapt = source.tess_would_adapt; + done = source.done; + unlv_crunch_mode = source.unlv_crunch_mode; + small_caps = source.small_caps; + odd_size = source.odd_size; + italic = source.italic; + bold = source.bold; + fontinfo = source.fontinfo; + fontinfo2 = source.fontinfo2; + fontinfo_id_count = source.fontinfo_id_count; + fontinfo_id2_count = source.fontinfo_id2_count; + x_height = source.x_height; + caps_height = source.caps_height; + baseline_shift = source.baseline_shift; + guessed_x_ht = source.guessed_x_ht; + guessed_caps_ht = source.guessed_caps_ht; + reject_spaces = source.reject_spaces; + uch_set = source.uch_set; + tesseract = source.tesseract; +} + +// Initializes a blank (default constructed) WERD_RES from one that has +// already been recognized. +// Use SetupFor*Recognition afterwards to complete the setup and make +// it ready for a retry recognition. +void WERD_RES::InitForRetryRecognition(const WERD_RES& source) { + word = source.word; + CopySimpleFields(source); + if (source.blamer_bundle != NULL) { + blamer_bundle = new BlamerBundle(); + blamer_bundle->CopyTruth(*source.blamer_bundle); + } +} + +// Sets up the members used in recognition: bln_boxes, chopped_word, +// seam_array, denorm. Returns false if +// the word is empty and sets up fake results. If use_body_size is +// true and row->body_size is set, then body_size will be used for +// blob normalization instead of xheight + ascrise. This flag is for +// those languages that are using CJK pitch model and thus it has to +// be true if and only if tesseract->textord_use_cjk_fp_model is +// true. +// If allow_detailed_fx is true, the feature extractor will receive fine +// precision outline information, allowing smoother features and better +// features on low resolution images. +// The norm_mode_hint sets the default mode for normalization in absence +// of any of the above flags. +// norm_box is used to override the word bounding box to determine the +// normalization scale and offset. +// Returns false if the word is empty and sets up fake results. +bool WERD_RES::SetupForRecognition(const UNICHARSET& unicharset_in, + tesseract::Tesseract* tess, Pix* pix, + int norm_mode, + const TBOX* norm_box, + bool numeric_mode, + bool use_body_size, + bool allow_detailed_fx, + ROW *row, const BLOCK* block) { + tesseract::OcrEngineMode norm_mode_hint = + static_cast(norm_mode); + tesseract = tess; + POLY_BLOCK* pb = block != NULL ? block->poly_block() : NULL; + if ((norm_mode_hint != tesseract::OEM_CUBE_ONLY && + word->cblob_list()->empty()) || (pb != NULL && !pb->IsText())) { + // Empty words occur when all the blobs have been moved to the rej_blobs + // list, which seems to occur frequently in junk. + SetupFake(unicharset_in); + word->set_flag(W_REP_CHAR, false); + return false; + } + ClearResults(); + SetupWordScript(unicharset_in); + chopped_word = TWERD::PolygonalCopy(allow_detailed_fx, word); + float word_xheight = use_body_size && row != NULL && row->body_size() > 0.0f + ? row->body_size() : x_height; + chopped_word->BLNormalize(block, row, pix, word->flag(W_INVERSE), + word_xheight, baseline_shift, numeric_mode, + norm_mode_hint, norm_box, &denorm); + blob_row = row; + SetupBasicsFromChoppedWord(unicharset_in); + SetupBlamerBundle(); + int num_blobs = chopped_word->NumBlobs(); + ratings = new MATRIX(num_blobs, kWordrecMaxNumJoinChunks); + tess_failed = false; + return true; +} + +// Set up the seam array, bln_boxes, best_choice, and raw_choice to empty +// accumulators from a made chopped word. We presume the fields are already +// empty. +void WERD_RES::SetupBasicsFromChoppedWord(const UNICHARSET &unicharset_in) { + bln_boxes = tesseract::BoxWord::CopyFromNormalized(chopped_word); + start_seam_list(chopped_word, &seam_array); + SetupBlobWidthsAndGaps(); + ClearWordChoices(); +} + +// Sets up the members used in recognition for an empty recognition result: +// bln_boxes, chopped_word, seam_array, denorm, best_choice, raw_choice. +void WERD_RES::SetupFake(const UNICHARSET& unicharset_in) { + ClearResults(); + SetupWordScript(unicharset_in); + chopped_word = new TWERD; + rebuild_word = new TWERD; + bln_boxes = new tesseract::BoxWord; + box_word = new tesseract::BoxWord; + int blob_count = word->cblob_list()->length(); + if (blob_count > 0) { + BLOB_CHOICE** fake_choices = new BLOB_CHOICE*[blob_count]; + // For non-text blocks, just pass any blobs through to the box_word + // and call the word failed with a fake classification. + C_BLOB_IT b_it(word->cblob_list()); + int blob_id = 0; + for (b_it.mark_cycle_pt(); !b_it.cycled_list(); b_it.forward()) { + TBOX box = b_it.data()->bounding_box(); + box_word->InsertBox(box_word->length(), box); + fake_choices[blob_id++] = new BLOB_CHOICE; + } + FakeClassifyWord(blob_count, fake_choices); + delete [] fake_choices; + } else { + WERD_CHOICE* word = new WERD_CHOICE(&unicharset_in); + word->make_bad(); + LogNewRawChoice(word); + // Ownership of word is taken by *this WERD_RES in LogNewCookedChoice. + LogNewCookedChoice(1, false, word); + } + tess_failed = true; + done = true; +} + +void WERD_RES::SetupWordScript(const UNICHARSET& uch) { + uch_set = &uch; + int script = uch.default_sid(); + word->set_script_id(script); + word->set_flag(W_SCRIPT_HAS_XHEIGHT, uch.script_has_xheight()); + word->set_flag(W_SCRIPT_IS_LATIN, script == uch.latin_sid()); +} + +// Sets up the blamer_bundle if it is not null, using the initialized denorm. +void WERD_RES::SetupBlamerBundle() { + if (blamer_bundle != NULL) { + blamer_bundle->SetupNormTruthWord(denorm); + } +} + +// Computes the blob_widths and blob_gaps from the chopped_word. +void WERD_RES::SetupBlobWidthsAndGaps() { + blob_widths.truncate(0); + blob_gaps.truncate(0); + int num_blobs = chopped_word->NumBlobs(); + for (int b = 0; b < num_blobs; ++b) { + TBLOB *blob = chopped_word->blobs[b]; + TBOX box = blob->bounding_box(); + blob_widths.push_back(box.width()); + if (b + 1 < num_blobs) { + blob_gaps.push_back( + chopped_word->blobs[b + 1]->bounding_box().left() - box.right()); + } + } +} + +// Updates internal data to account for a new SEAM (chop) at the given +// blob_number. Fixes the ratings matrix and states in the choices, as well +// as the blob widths and gaps. +void WERD_RES::InsertSeam(int blob_number, SEAM* seam) { + // Insert the seam into the SEAMS array. + seam->PrepareToInsertSeam(seam_array, chopped_word->blobs, blob_number, true); + seam_array.insert(seam, blob_number); + if (ratings != NULL) { + // Expand the ratings matrix. + ratings = ratings->ConsumeAndMakeBigger(blob_number); + // Fix all the segmentation states. + if (raw_choice != NULL) + raw_choice->UpdateStateForSplit(blob_number); + WERD_CHOICE_IT wc_it(&best_choices); + for (wc_it.mark_cycle_pt(); !wc_it.cycled_list(); wc_it.forward()) { + WERD_CHOICE* choice = wc_it.data(); + choice->UpdateStateForSplit(blob_number); + } + SetupBlobWidthsAndGaps(); + } +} + +// Returns true if all the word choices except the first have adjust_factors +// worse than the given threshold. +bool WERD_RES::AlternativeChoiceAdjustmentsWorseThan(float threshold) const { + // The choices are not changed by this iteration. + WERD_CHOICE_IT wc_it(const_cast(&best_choices)); + for (wc_it.forward(); !wc_it.at_first(); wc_it.forward()) { + WERD_CHOICE* choice = wc_it.data(); + if (choice->adjust_factor() <= threshold) + return false; + } + return true; +} + +// Returns true if the current word is ambiguous (by number of answers or +// by dangerous ambigs.) +bool WERD_RES::IsAmbiguous() { + return !best_choices.singleton() || best_choice->dangerous_ambig_found(); +} + +// Returns true if the ratings matrix size matches the sum of each of the +// segmentation states. +bool WERD_RES::StatesAllValid() { + int ratings_dim = ratings->dimension(); + if (raw_choice->TotalOfStates() != ratings_dim) { + tprintf("raw_choice has total of states = %d vs ratings dim of %d\n", + raw_choice->TotalOfStates(), ratings_dim); + return false; + } + WERD_CHOICE_IT it(&best_choices); + int index = 0; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward(), ++index) { + WERD_CHOICE* choice = it.data(); + if (choice->TotalOfStates() != ratings_dim) { + tprintf("Cooked #%d has total of states = %d vs ratings dim of %d\n", + index, choice->TotalOfStates(), ratings_dim); + return false; + } + } + return true; +} + +// Prints a list of words found if debug is true or the word result matches +// the word_to_debug. +void WERD_RES::DebugWordChoices(bool debug, const char* word_to_debug) { + if (debug || + (word_to_debug != NULL && *word_to_debug != '\0' && best_choice != NULL && + best_choice->unichar_string() == STRING(word_to_debug))) { + if (raw_choice != NULL) + raw_choice->print("\nBest Raw Choice"); + + WERD_CHOICE_IT it(&best_choices); + int index = 0; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward(), ++index) { + WERD_CHOICE* choice = it.data(); + STRING label; + label.add_str_int("\nCooked Choice #", index); + choice->print(label.string()); + } + } +} + +// Prints the top choice along with the accepted/done flags. +void WERD_RES::DebugTopChoice(const char* msg) const { + tprintf("Best choice: accepted=%d, adaptable=%d, done=%d : ", + tess_accepted, tess_would_adapt, done); + if (best_choice == NULL) + tprintf("\n"); + else + best_choice->print(msg); +} + +// Removes from best_choices all choices which are not within a reasonable +// range of the best choice. +// TODO(rays) incorporate the information used here into the params training +// re-ranker, in place of this heuristic that is based on the previous +// adjustment factor. +void WERD_RES::FilterWordChoices(int debug_level) { + if (best_choice == NULL || best_choices.singleton()) + return; + + if (debug_level >= 2) + best_choice->print("\nFiltering against best choice"); + WERD_CHOICE_IT it(&best_choices); + int index = 0; + for (it.forward(); !it.at_first(); it.forward(), ++index) { + WERD_CHOICE* choice = it.data(); + float threshold = StopperAmbigThreshold(best_choice->adjust_factor(), + choice->adjust_factor()); + // i, j index the blob choice in choice, best_choice. + // chunk is an index into the chopped_word blobs (AKA chunks). + // Since the two words may use different segmentations of the chunks, we + // iterate over the chunks to find out whether a comparable blob + // classification is much worse than the best result. + int i = 0, j = 0, chunk = 0; + // Each iteration of the while deals with 1 chunk. On entry choice_chunk + // and best_chunk are the indices of the first chunk in the NEXT blob, + // i.e. we don't have to increment i, j while chunk < choice_chunk and + // best_chunk respectively. + int choice_chunk = choice->state(0), best_chunk = best_choice->state(0); + while (i < choice->length() && j < best_choice->length()) { + if (choice->unichar_id(i) != best_choice->unichar_id(j) && + choice->certainty(i) - best_choice->certainty(j) < threshold) { + if (debug_level >= 2) { + STRING label; + label.add_str_int("\nDiscarding bad choice #", index); + choice->print(label.string()); + tprintf("i %d j %d Chunk %d Choice->Blob[i].Certainty %.4g" + " BestChoice->ChunkCertainty[Chunk] %g Threshold %g\n", + i, j, chunk, choice->certainty(i), + best_choice->certainty(j), threshold); + } + delete it.extract(); + break; + } + ++chunk; + // If needed, advance choice_chunk to keep up with chunk. + while (choice_chunk < chunk && ++i < choice->length()) + choice_chunk += choice->state(i); + // If needed, advance best_chunk to keep up with chunk. + while (best_chunk < chunk && ++j < best_choice->length()) + best_chunk += best_choice->state(j); + } + } +} + +void WERD_RES::ComputeAdaptionThresholds(float certainty_scale, + float min_rating, + float max_rating, + float rating_margin, + float* thresholds) { + int chunk = 0; + int end_chunk = best_choice->state(0); + int end_raw_chunk = raw_choice->state(0); + int raw_blob = 0; + for (int i = 0; i < best_choice->length(); i++, thresholds++) { + float avg_rating = 0.0f; + int num_error_chunks = 0; + + // For each chunk in best choice blob i, count non-matching raw results. + while (chunk < end_chunk) { + if (chunk >= end_raw_chunk) { + ++raw_blob; + end_raw_chunk += raw_choice->state(raw_blob); + } + if (best_choice->unichar_id(i) != + raw_choice->unichar_id(raw_blob)) { + avg_rating += raw_choice->certainty(raw_blob); + ++num_error_chunks; + } + ++chunk; + } + + if (num_error_chunks > 0) { + avg_rating /= num_error_chunks; + *thresholds = (avg_rating / -certainty_scale) * (1.0 - rating_margin); + } else { + *thresholds = max_rating; + } + + if (*thresholds > max_rating) + *thresholds = max_rating; + if (*thresholds < min_rating) + *thresholds = min_rating; + } +} + +// Saves a copy of the word_choice if it has the best unadjusted rating. +// Returns true if the word_choice was the new best. +bool WERD_RES::LogNewRawChoice(WERD_CHOICE* word_choice) { + if (raw_choice == NULL || word_choice->rating() < raw_choice->rating()) { + delete raw_choice; + raw_choice = new WERD_CHOICE(*word_choice); + raw_choice->set_permuter(TOP_CHOICE_PERM); + return true; + } + return false; +} + +// Consumes word_choice by adding it to best_choices, (taking ownership) if +// the certainty for word_choice is some distance of the best choice in +// best_choices, or by deleting the word_choice and returning false. +// The best_choices list is kept in sorted order by rating. Duplicates are +// removed, and the list is kept no longer than max_num_choices in length. +// Returns true if the word_choice is still a valid pointer. +bool WERD_RES::LogNewCookedChoice(int max_num_choices, bool debug, + WERD_CHOICE* word_choice) { + if (best_choice != NULL) { + // Throw out obviously bad choices to save some work. + // TODO(rays) Get rid of this! This piece of code produces different + // results according to the order in which words are found, which is an + // undesirable behavior. It would be better to keep all the choices and + // prune them later when more information is available. + float max_certainty_delta = + StopperAmbigThreshold(best_choice->adjust_factor(), + word_choice->adjust_factor()); + if (max_certainty_delta > -kStopperAmbiguityThresholdOffset) + max_certainty_delta = -kStopperAmbiguityThresholdOffset; + if (word_choice->certainty() - best_choice->certainty() < + max_certainty_delta) { + if (debug) { + STRING bad_string; + word_choice->string_and_lengths(&bad_string, NULL); + tprintf("Discarding choice \"%s\" with an overly low certainty" + " %.3f vs best choice certainty %.3f (Threshold: %.3f)\n", + bad_string.string(), word_choice->certainty(), + best_choice->certainty(), + max_certainty_delta + best_choice->certainty()); + } + delete word_choice; + return false; + } + } + + // Insert in the list in order of increasing rating, but knock out worse + // string duplicates. + WERD_CHOICE_IT it(&best_choices); + const STRING& new_str = word_choice->unichar_string(); + bool inserted = false; + int num_choices = 0; + if (!it.empty()) { + do { + WERD_CHOICE* choice = it.data(); + if (choice->rating() > word_choice->rating() && !inserted) { + // Time to insert. + it.add_before_stay_put(word_choice); + inserted = true; + if (num_choices == 0) + best_choice = word_choice; // This is the new best. + ++num_choices; + } + if (choice->unichar_string() == new_str) { + if (inserted) { + // New is better. + delete it.extract(); + } else { + // Old is better. + if (debug) { + tprintf("Discarding duplicate choice \"%s\", rating %g vs %g\n", + new_str.string(), word_choice->rating(), choice->rating()); + } + delete word_choice; + return false; + } + } else { + ++num_choices; + if (num_choices > max_num_choices) + delete it.extract(); + } + it.forward(); + } while (!it.at_first()); + } + if (!inserted && num_choices < max_num_choices) { + it.add_to_end(word_choice); + inserted = true; + if (num_choices == 0) + best_choice = word_choice; // This is the new best. + } + if (debug) { + if (inserted) + tprintf("New %s", best_choice == word_choice ? "Best" : "Secondary"); + else + tprintf("Poor"); + word_choice->print(" Word Choice"); + } + if (!inserted) { + delete word_choice; + return false; + } + return true; +} + + +// Simple helper moves the ownership of the pointer data from src to dest, +// first deleting anything in dest, and nulling out src afterwards. +template static void MovePointerData(T** dest, T**src) { + delete *dest; + *dest = *src; + *src = NULL; +} + +// Prints a brief list of all the best choices. +void WERD_RES::PrintBestChoices() const { + STRING alternates_str; + WERD_CHOICE_IT it(const_cast(&best_choices)); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + if (!it.at_first()) alternates_str += "\", \""; + alternates_str += it.data()->unichar_string(); + } + tprintf("Alternates for \"%s\": {\"%s\"}\n", + best_choice->unichar_string().string(), alternates_str.string()); +} + +// Returns the sum of the widths of the blob between start_blob and last_blob +// inclusive. +int WERD_RES::GetBlobsWidth(int start_blob, int last_blob) { + int result = 0; + for (int b = start_blob; b <= last_blob; ++b) { + result += blob_widths[b]; + if (b < last_blob) + result += blob_gaps[b]; + } + return result; +} +// Returns the width of a gap between the specified blob and the next one. +int WERD_RES::GetBlobsGap(int blob_index) { + if (blob_index < 0 || blob_index >= blob_gaps.size()) + return 0; + return blob_gaps[blob_index]; +} + +// Returns the BLOB_CHOICE corresponding to the given index in the +// best choice word taken from the appropriate cell in the ratings MATRIX. +// Borrowed pointer, so do not delete. May return NULL if there is no +// BLOB_CHOICE matching the unichar_id at the given index. +BLOB_CHOICE* WERD_RES::GetBlobChoice(int index) const { + if (index < 0 || index >= best_choice->length()) return NULL; + BLOB_CHOICE_LIST* choices = GetBlobChoices(index); + return FindMatchingChoice(best_choice->unichar_id(index), choices); +} + +// Returns the BLOB_CHOICE_LIST corresponding to the given index in the +// best choice word taken from the appropriate cell in the ratings MATRIX. +// Borrowed pointer, so do not delete. +BLOB_CHOICE_LIST* WERD_RES::GetBlobChoices(int index) const { + return best_choice->blob_choices(index, ratings); +} + +// Moves the results fields from word to this. This takes ownership of all +// the data, so src can be destructed. +void WERD_RES::ConsumeWordResults(WERD_RES* word) { + denorm = word->denorm; + blob_row = word->blob_row; + MovePointerData(&chopped_word, &word->chopped_word); + MovePointerData(&rebuild_word, &word->rebuild_word); + MovePointerData(&box_word, &word->box_word); + seam_array.delete_data_pointers(); + seam_array = word->seam_array; + word->seam_array.clear(); + best_state.move(&word->best_state); + correct_text.move(&word->correct_text); + blob_widths.move(&word->blob_widths); + blob_gaps.move(&word->blob_gaps); + if (ratings != NULL) ratings->delete_matrix_pointers(); + MovePointerData(&ratings, &word->ratings); + best_choice = word->best_choice; + MovePointerData(&raw_choice, &word->raw_choice); + best_choices.clear(); + WERD_CHOICE_IT wc_it(&best_choices); + wc_it.add_list_after(&word->best_choices); + reject_map = word->reject_map; + if (word->blamer_bundle != NULL) { + assert(blamer_bundle != NULL); + blamer_bundle->CopyResults(*(word->blamer_bundle)); + } + CopySimpleFields(*word); +} + +// Replace the best choice and rebuild box word. +// choice must be from the current best_choices list. +void WERD_RES::ReplaceBestChoice(WERD_CHOICE* choice) { + best_choice = choice; + RebuildBestState(); + SetupBoxWord(); + // Make up a fake reject map of the right length to keep the + // rejection pass happy. + reject_map.initialise(best_state.length()); + done = tess_accepted = tess_would_adapt = true; + SetScriptPositions(); +} + +// Builds the rebuild_word and sets the best_state from the chopped_word and +// the best_choice->state. +void WERD_RES::RebuildBestState() { + ASSERT_HOST(best_choice != NULL); + if (rebuild_word != NULL) + delete rebuild_word; + rebuild_word = new TWERD; + if (seam_array.empty()) + start_seam_list(chopped_word, &seam_array); + best_state.truncate(0); + int start = 0; + for (int i = 0; i < best_choice->length(); ++i) { + int length = best_choice->state(i); + best_state.push_back(length); + if (length > 1) { + SEAM::JoinPieces(seam_array, chopped_word->blobs, start, + start + length - 1); + } + TBLOB* blob = chopped_word->blobs[start]; + rebuild_word->blobs.push_back(new TBLOB(*blob)); + if (length > 1) { + SEAM::BreakPieces(seam_array, chopped_word->blobs, start, + start + length - 1); + } + start += length; + } +} + +// Copies the chopped_word to the rebuild_word, faking a best_state as well. +// Also sets up the output box_word. +void WERD_RES::CloneChoppedToRebuild() { + if (rebuild_word != NULL) + delete rebuild_word; + rebuild_word = new TWERD(*chopped_word); + SetupBoxWord(); + int word_len = box_word->length(); + best_state.reserve(word_len); + correct_text.reserve(word_len); + for (int i = 0; i < word_len; ++i) { + best_state.push_back(1); + correct_text.push_back(STRING("")); + } +} + +// Sets/replaces the box_word with one made from the rebuild_word. +void WERD_RES::SetupBoxWord() { + if (box_word != NULL) + delete box_word; + rebuild_word->ComputeBoundingBoxes(); + box_word = tesseract::BoxWord::CopyFromNormalized(rebuild_word); + box_word->ClipToOriginalWord(denorm.block(), word); +} + +// Sets up the script positions in the output best_choice using the best_choice +// to get the unichars, and the unicharset to get the target positions. +void WERD_RES::SetScriptPositions() { + best_choice->SetScriptPositions(small_caps, chopped_word); +} +// Sets all the blobs in all the words (raw choice and best choices) to be +// the given position. (When a sub/superscript is recognized as a separate +// word, it falls victim to the rule that a whole word cannot be sub or +// superscript, so this function overrides that problem.) +void WERD_RES::SetAllScriptPositions(tesseract::ScriptPos position) { + raw_choice->SetAllScriptPositions(position); + WERD_CHOICE_IT wc_it(&best_choices); + for (wc_it.mark_cycle_pt(); !wc_it.cycled_list(); wc_it.forward()) + wc_it.data()->SetAllScriptPositions(position); +} + +// Classifies the word with some already-calculated BLOB_CHOICEs. +// The choices are an array of blob_count pointers to BLOB_CHOICE, +// providing a single classifier result for each blob. +// The BLOB_CHOICEs are consumed and the word takes ownership. +// The number of blobs in the box_word must match blob_count. +void WERD_RES::FakeClassifyWord(int blob_count, BLOB_CHOICE** choices) { + // Setup the WERD_RES. + ASSERT_HOST(box_word != NULL); + ASSERT_HOST(blob_count == box_word->length()); + ClearWordChoices(); + ClearRatings(); + ratings = new MATRIX(blob_count, 1); + for (int c = 0; c < blob_count; ++c) { + BLOB_CHOICE_LIST* choice_list = new BLOB_CHOICE_LIST; + BLOB_CHOICE_IT choice_it(choice_list); + choice_it.add_after_then_move(choices[c]); + ratings->put(c, c, choice_list); + } + FakeWordFromRatings(TOP_CHOICE_PERM); + reject_map.initialise(blob_count); + done = true; +} + +// Creates a WERD_CHOICE for the word using the top choices from the leading +// diagonal of the ratings matrix. +void WERD_RES::FakeWordFromRatings(PermuterType permuter) { + int num_blobs = ratings->dimension(); + WERD_CHOICE* word_choice = new WERD_CHOICE(uch_set, num_blobs); + word_choice->set_permuter(permuter); + for (int b = 0; b < num_blobs; ++b) { + UNICHAR_ID unichar_id = UNICHAR_SPACE; + float rating = MAX_INT32; + float certainty = -MAX_INT32; + BLOB_CHOICE_LIST* choices = ratings->get(b, b); + if (choices != NULL && !choices->empty()) { + BLOB_CHOICE_IT bc_it(choices); + BLOB_CHOICE* choice = bc_it.data(); + unichar_id = choice->unichar_id(); + rating = choice->rating(); + certainty = choice->certainty(); + } + word_choice->append_unichar_id_space_allocated(unichar_id, 1, rating, + certainty); + } + LogNewRawChoice(word_choice); + // Ownership of word_choice taken by word here. + LogNewCookedChoice(1, false, word_choice); +} + +// Copies the best_choice strings to the correct_text for adaption/training. +void WERD_RES::BestChoiceToCorrectText() { + correct_text.clear(); + ASSERT_HOST(best_choice != NULL); + for (int i = 0; i < best_choice->length(); ++i) { + UNICHAR_ID choice_id = best_choice->unichar_id(i); + const char* blob_choice = uch_set->id_to_unichar(choice_id); + correct_text.push_back(STRING(blob_choice)); + } +} + +// Merges 2 adjacent blobs in the result if the permanent callback +// class_cb returns other than INVALID_UNICHAR_ID, AND the permanent +// callback box_cb is NULL or returns true, setting the merged blob +// result to the class returned from class_cb. +// Returns true if anything was merged. +bool WERD_RES::ConditionalBlobMerge( + TessResultCallback2* class_cb, + TessResultCallback2* box_cb) { + ASSERT_HOST(best_choice->length() == 0 || ratings != NULL); + bool modified = false; + for (int i = 0; i + 1 < best_choice->length(); ++i) { + UNICHAR_ID new_id = class_cb->Run(best_choice->unichar_id(i), + best_choice->unichar_id(i+1)); + if (new_id != INVALID_UNICHAR_ID && + (box_cb == NULL || box_cb->Run(box_word->BlobBox(i), + box_word->BlobBox(i + 1)))) { + // Raw choice should not be fixed. + best_choice->set_unichar_id(new_id, i); + modified = true; + MergeAdjacentBlobs(i); + const MATRIX_COORD& coord = best_choice->MatrixCoord(i); + if (!coord.Valid(*ratings)) { + ratings->IncreaseBandSize(coord.row + 1 - coord.col); + } + BLOB_CHOICE_LIST* blob_choices = GetBlobChoices(i); + if (FindMatchingChoice(new_id, blob_choices) == NULL) { + // Insert a fake result. + BLOB_CHOICE* blob_choice = new BLOB_CHOICE; + blob_choice->set_unichar_id(new_id); + BLOB_CHOICE_IT bc_it(blob_choices); + bc_it.add_before_then_move(blob_choice); + } + } + } + delete class_cb; + delete box_cb; + return modified; +} + +// Merges 2 adjacent blobs in the result (index and index+1) and corrects +// all the data to account for the change. +void WERD_RES::MergeAdjacentBlobs(int index) { + if (reject_map.length() == best_choice->length()) + reject_map.remove_pos(index); + best_choice->remove_unichar_id(index + 1); + rebuild_word->MergeBlobs(index, index + 2); + box_word->MergeBoxes(index, index + 2); + if (index + 1 < best_state.length()) { + best_state[index] += best_state[index + 1]; + best_state.remove(index + 1); + } +} + +// TODO(tkielbus) Decide between keeping this behavior here or modifying the +// training data. + +// Utility function for fix_quotes +// Return true if the next character in the string (given the UTF8 length in +// bytes) is a quote character. +static int is_simple_quote(const char* signed_str, int length) { + const unsigned char* str = + reinterpret_cast(signed_str); + // Standard 1 byte quotes. + return (length == 1 && (*str == '\'' || *str == '`')) || + // UTF-8 3 bytes curved quotes. + (length == 3 && ((*str == 0xe2 && + *(str + 1) == 0x80 && + *(str + 2) == 0x98) || + (*str == 0xe2 && + *(str + 1) == 0x80 && + *(str + 2) == 0x99))); +} + +// Callback helper for fix_quotes returns a double quote if both +// arguments are quote, otherwise INVALID_UNICHAR_ID. +UNICHAR_ID WERD_RES::BothQuotes(UNICHAR_ID id1, UNICHAR_ID id2) { + const char *ch = uch_set->id_to_unichar(id1); + const char *next_ch = uch_set->id_to_unichar(id2); + if (is_simple_quote(ch, strlen(ch)) && + is_simple_quote(next_ch, strlen(next_ch))) + return uch_set->unichar_to_id("\""); + return INVALID_UNICHAR_ID; +} + +// Change pairs of quotes to double quotes. +void WERD_RES::fix_quotes() { + if (!uch_set->contains_unichar("\"") || + !uch_set->get_enabled(uch_set->unichar_to_id("\""))) + return; // Don't create it if it is disallowed. + + ConditionalBlobMerge( + NewPermanentTessCallback(this, &WERD_RES::BothQuotes), + NULL); +} + +// Callback helper for fix_hyphens returns UNICHAR_ID of - if both +// arguments are hyphen, otherwise INVALID_UNICHAR_ID. +UNICHAR_ID WERD_RES::BothHyphens(UNICHAR_ID id1, UNICHAR_ID id2) { + const char *ch = uch_set->id_to_unichar(id1); + const char *next_ch = uch_set->id_to_unichar(id2); + if (strlen(ch) == 1 && strlen(next_ch) == 1 && + (*ch == '-' || *ch == '~') && (*next_ch == '-' || *next_ch == '~')) + return uch_set->unichar_to_id("-"); + return INVALID_UNICHAR_ID; +} + +// Callback helper for fix_hyphens returns true if box1 and box2 overlap +// (assuming both on the same textline, are in order and a chopped em dash.) +bool WERD_RES::HyphenBoxesOverlap(const TBOX& box1, const TBOX& box2) { + return box1.right() >= box2.left(); +} + +// Change pairs of hyphens to a single hyphen if the bounding boxes touch +// Typically a long dash which has been segmented. +void WERD_RES::fix_hyphens() { + if (!uch_set->contains_unichar("-") || + !uch_set->get_enabled(uch_set->unichar_to_id("-"))) + return; // Don't create it if it is disallowed. + + ConditionalBlobMerge( + NewPermanentTessCallback(this, &WERD_RES::BothHyphens), + NewPermanentTessCallback(this, &WERD_RES::HyphenBoxesOverlap)); +} + +// Callback helper for merge_tess_fails returns a space if both +// arguments are space, otherwise INVALID_UNICHAR_ID. +UNICHAR_ID WERD_RES::BothSpaces(UNICHAR_ID id1, UNICHAR_ID id2) { + if (id1 == id2 && id1 == uch_set->unichar_to_id(" ")) + return id1; + else + return INVALID_UNICHAR_ID; +} + +// Change pairs of tess failures to a single one +void WERD_RES::merge_tess_fails() { + if (ConditionalBlobMerge( + NewPermanentTessCallback(this, &WERD_RES::BothSpaces), NULL)) { + int len = best_choice->length(); + ASSERT_HOST(reject_map.length() == len); + ASSERT_HOST(box_word->length() == len); + } +} + +// Returns true if the collection of count pieces, starting at start, are all +// natural connected components, ie there are no real chops involved. +bool WERD_RES::PiecesAllNatural(int start, int count) const { + // all seams must have no splits. + for (int index = start; index < start + count - 1; ++index) { + if (index >= 0 && index < seam_array.size()) { + SEAM* seam = seam_array[index]; + if (seam != NULL && seam->HasAnySplits()) return false; + } + } + return true; +} + + +WERD_RES::~WERD_RES () { + Clear(); +} + +void WERD_RES::InitNonPointers() { + tess_failed = FALSE; + tess_accepted = FALSE; + tess_would_adapt = FALSE; + done = FALSE; + unlv_crunch_mode = CR_NONE; + small_caps = false; + odd_size = false; + italic = FALSE; + bold = FALSE; + // The fontinfos and tesseract count as non-pointers as they point to + // data owned elsewhere. + fontinfo = NULL; + fontinfo2 = NULL; + tesseract = NULL; + fontinfo_id_count = 0; + fontinfo_id2_count = 0; + x_height = 0.0; + caps_height = 0.0; + baseline_shift = 0.0f; + space_certainty = 0.0f; + guessed_x_ht = TRUE; + guessed_caps_ht = TRUE; + combination = FALSE; + part_of_combo = FALSE; + reject_spaces = FALSE; +} + +void WERD_RES::InitPointers() { + word = NULL; + bln_boxes = NULL; + blob_row = NULL; + uch_set = NULL; + chopped_word = NULL; + rebuild_word = NULL; + box_word = NULL; + ratings = NULL; + best_choice = NULL; + raw_choice = NULL; + ep_choice = NULL; + blamer_bundle = NULL; +} + +void WERD_RES::Clear() { + if (word != NULL && combination) { + delete word; + } + word = NULL; + delete blamer_bundle; + blamer_bundle = NULL; + ClearResults(); +} + +void WERD_RES::ClearResults() { + done = false; + fontinfo = NULL; + fontinfo2 = NULL; + fontinfo_id_count = 0; + fontinfo_id2_count = 0; + if (bln_boxes != NULL) { + delete bln_boxes; + bln_boxes = NULL; + } + blob_row = NULL; + if (chopped_word != NULL) { + delete chopped_word; + chopped_word = NULL; + } + if (rebuild_word != NULL) { + delete rebuild_word; + rebuild_word = NULL; + } + if (box_word != NULL) { + delete box_word; + box_word = NULL; + } + best_state.clear(); + correct_text.clear(); + seam_array.delete_data_pointers(); + seam_array.clear(); + blob_widths.clear(); + blob_gaps.clear(); + ClearRatings(); + ClearWordChoices(); + if (blamer_bundle != NULL) blamer_bundle->ClearResults(); +} +void WERD_RES::ClearWordChoices() { + best_choice = NULL; + if (raw_choice != NULL) { + delete raw_choice; + raw_choice = NULL; + } + best_choices.clear(); + if (ep_choice != NULL) { + delete ep_choice; + ep_choice = NULL; + } +} +void WERD_RES::ClearRatings() { + if (ratings != NULL) { + ratings->delete_matrix_pointers(); + delete ratings; + ratings = NULL; + } +} + + +bool PAGE_RES_IT::operator ==(const PAGE_RES_IT &other) const { + return word_res == other.word_res && + row_res == other.row_res && + block_res == other.block_res; +} + +int PAGE_RES_IT::cmp(const PAGE_RES_IT &other) const { + ASSERT_HOST(page_res == other.page_res); + if (other.block_res == NULL) { + // other points to the end of the page. + if (block_res == NULL) + return 0; + return -1; + } + if (block_res == NULL) { + return 1; // we point to the end of the page. + } + if (block_res == other.block_res) { + if (other.row_res == NULL || row_res == NULL) { + // this should only happen if we hit an image block. + return 0; + } + if (row_res == other.row_res) { + // we point to the same block and row. + ASSERT_HOST(other.word_res != NULL && word_res != NULL); + if (word_res == other.word_res) { + // we point to the same word! + return 0; + } + + WERD_RES_IT word_res_it(&row_res->word_res_list); + for (word_res_it.mark_cycle_pt(); !word_res_it.cycled_list(); + word_res_it.forward()) { + if (word_res_it.data() == word_res) { + return -1; + } else if (word_res_it.data() == other.word_res) { + return 1; + } + } + ASSERT_HOST("Error: Incomparable PAGE_RES_ITs" == NULL); + } + + // we both point to the same block, but different rows. + ROW_RES_IT row_res_it(&block_res->row_res_list); + for (row_res_it.mark_cycle_pt(); !row_res_it.cycled_list(); + row_res_it.forward()) { + if (row_res_it.data() == row_res) { + return -1; + } else if (row_res_it.data() == other.row_res) { + return 1; + } + } + ASSERT_HOST("Error: Incomparable PAGE_RES_ITs" == NULL); + } + + // We point to different blocks. + BLOCK_RES_IT block_res_it(&page_res->block_res_list); + for (block_res_it.mark_cycle_pt(); + !block_res_it.cycled_list(); block_res_it.forward()) { + if (block_res_it.data() == block_res) { + return -1; + } else if (block_res_it.data() == other.block_res) { + return 1; + } + } + // Shouldn't happen... + ASSERT_HOST("Error: Incomparable PAGE_RES_ITs" == NULL); + return 0; +} + +// Inserts the new_word as a combination owned by a corresponding WERD_RES +// before the current position. The simple fields of the WERD_RES are copied +// from clone_res and the resulting WERD_RES is returned for further setup +// with best_choice etc. +WERD_RES* PAGE_RES_IT::InsertSimpleCloneWord(const WERD_RES& clone_res, + WERD* new_word) { + // Make a WERD_RES for the new_word. + WERD_RES* new_res = new WERD_RES(new_word); + new_res->CopySimpleFields(clone_res); + new_res->combination = true; + // Insert into the appropriate place in the ROW_RES. + WERD_RES_IT wr_it(&row()->word_res_list); + for (wr_it.mark_cycle_pt(); !wr_it.cycled_list(); wr_it.forward()) { + WERD_RES* word = wr_it.data(); + if (word == word_res) + break; + } + ASSERT_HOST(!wr_it.cycled_list()); + wr_it.add_before_then_move(new_res); + if (wr_it.at_first()) { + // This is the new first word, so reset the member iterator so it + // detects the cycled_list state correctly. + ResetWordIterator(); + } + return new_res; +} + +// Helper computes the boundaries between blobs in the word. The blob bounds +// are likely very poor, if they come from LSTM, where it only outputs the +// character at one pixel within it, so we find the midpoints between them. +static void ComputeBlobEnds(const WERD_RES& word, C_BLOB_LIST* next_word_blobs, + GenericVector* blob_ends) { + C_BLOB_IT blob_it(word.word->cblob_list()); + for (int i = 0; i < word.best_state.size(); ++i) { + int length = word.best_state[i]; + // Get the bounding box of the fake blobs + TBOX blob_box = blob_it.data()->bounding_box(); + blob_it.forward(); + for (int b = 1; b < length; ++b) { + blob_box += blob_it.data()->bounding_box(); + blob_it.forward(); + } + // This blob_box is crap, so for now we are only looking for the + // boundaries between them. + int blob_end = MAX_INT32; + if (!blob_it.at_first() || next_word_blobs != NULL) { + if (blob_it.at_first()) + blob_it.set_to_list(next_word_blobs); + blob_end = (blob_box.right() + blob_it.data()->bounding_box().left()) / 2; + } + blob_ends->push_back(blob_end); + } +} + +// Replaces the current WERD/WERD_RES with the given words. The given words +// contain fake blobs that indicate the position of the characters. These are +// replaced with real blobs from the current word as much as possible. +void PAGE_RES_IT::ReplaceCurrentWord( + tesseract::PointerVector* words) { + if (words->empty()) { + DeleteCurrentWord(); + return; + } + WERD_RES* input_word = word(); + // Set the BOL/EOL flags on the words from the input word. + if (input_word->word->flag(W_BOL)) { + (*words)[0]->word->set_flag(W_BOL, true); + } else { + (*words)[0]->word->set_blanks(1); + } + words->back()->word->set_flag(W_EOL, input_word->word->flag(W_EOL)); + + // Move the blobs from the input word to the new set of words. + // If the input word_res is a combination, then the replacements will also be + // combinations, and will own their own words. If the input word_res is not a + // combination, then the final replacements will not be either, (although it + // is allowed for the input words to be combinations) and their words + // will get put on the row list. This maintains the ownership rules. + WERD_IT w_it(row()->row->word_list()); + if (!input_word->combination) { + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + WERD* word = w_it.data(); + if (word == input_word->word) + break; + } + // w_it is now set to the input_word's word. + ASSERT_HOST(!w_it.cycled_list()); + } + // Insert into the appropriate place in the ROW_RES. + WERD_RES_IT wr_it(&row()->word_res_list); + for (wr_it.mark_cycle_pt(); !wr_it.cycled_list(); wr_it.forward()) { + WERD_RES* word = wr_it.data(); + if (word == input_word) + break; + } + ASSERT_HOST(!wr_it.cycled_list()); + // Since we only have an estimate of the bounds between blobs, use the blob + // x-middle as the determiner of where to put the blobs + C_BLOB_IT src_b_it(input_word->word->cblob_list()); + src_b_it.sort(&C_BLOB::SortByXMiddle); + C_BLOB_IT rej_b_it(input_word->word->rej_cblob_list()); + rej_b_it.sort(&C_BLOB::SortByXMiddle); + for (int w = 0; w < words->size(); ++w) { + WERD_RES* word_w = (*words)[w]; + // Compute blob boundaries. + GenericVector blob_ends; + C_BLOB_LIST* next_word_blobs = + w + 1 < words->size() ? (*words)[w + 1]->word->cblob_list() : NULL; + ComputeBlobEnds(*word_w, next_word_blobs, &blob_ends); + // Delete the fake blobs on the current word. + word_w->word->cblob_list()->clear(); + C_BLOB_IT dest_it(word_w->word->cblob_list()); + // Build the box word as we move the blobs. + tesseract::BoxWord* box_word = new tesseract::BoxWord; + for (int i = 0; i < blob_ends.size(); ++i) { + int end_x = blob_ends[i]; + TBOX blob_box; + // Add the blobs up to end_x. + while (!src_b_it.empty() && + src_b_it.data()->bounding_box().x_middle() < end_x) { + blob_box += src_b_it.data()->bounding_box(); + dest_it.add_after_then_move(src_b_it.extract()); + src_b_it.forward(); + } + while (!rej_b_it.empty() && + rej_b_it.data()->bounding_box().x_middle() < end_x) { + blob_box += rej_b_it.data()->bounding_box(); + dest_it.add_after_then_move(rej_b_it.extract()); + rej_b_it.forward(); + } + // Clip to the previously computed bounds. Although imperfectly accurate, + // it is good enough, and much more complicated to determine where else + // to clip. + if (i > 0 && blob_box.left() < blob_ends[i - 1]) + blob_box.set_left(blob_ends[i - 1]); + if (blob_box.right() > end_x) + blob_box.set_right(end_x); + box_word->InsertBox(i, blob_box); + } + // Fix empty boxes. If a very joined blob sits over multiple characters, + // then we will have some empty boxes from using the middle, so look for + // overlaps. + for (int i = 0; i < box_word->length(); ++i) { + TBOX box = box_word->BlobBox(i); + if (box.null_box()) { + // Nothing has its middle in the bounds of this blob, so use anything + // that overlaps. + for (dest_it.mark_cycle_pt(); !dest_it.cycled_list(); + dest_it.forward()) { + TBOX blob_box = dest_it.data()->bounding_box(); + if (blob_box.left() < blob_ends[i] && + (i == 0 || blob_box.right() >= blob_ends[i - 1])) { + if (i > 0 && blob_box.left() < blob_ends[i - 1]) + blob_box.set_left(blob_ends[i - 1]); + if (blob_box.right() > blob_ends[i]) + blob_box.set_right(blob_ends[i]); + box_word->ChangeBox(i, blob_box); + break; + } + } + } + } + delete word_w->box_word; + word_w->box_word = box_word; + if (!input_word->combination) { + // Insert word_w->word into the ROW. It doesn't own its word, so the + // ROW needs to own it. + w_it.add_before_stay_put(word_w->word); + word_w->combination = false; + } + (*words)[w] = NULL; // We are taking ownership. + wr_it.add_before_stay_put(word_w); + } + // We have taken ownership of the words. + words->clear(); + // Delete the current word, which has been replaced. We could just call + // DeleteCurrentWord, but that would iterate both lists again, and we know + // we are already in the right place. + if (!input_word->combination) + delete w_it.extract(); + delete wr_it.extract(); + ResetWordIterator(); +} + +// Deletes the current WERD_RES and its underlying WERD. +void PAGE_RES_IT::DeleteCurrentWord() { + // Check that this word is as we expect. part_of_combos are NEVER iterated + // by the normal iterator, so we should never be trying to delete them. + ASSERT_HOST(!word_res->part_of_combo); + if (!word_res->combination) { + // Combinations own their own word, so we won't find the word on the + // row's word_list, but it is legitimate to try to delete them. + // Delete word from the ROW when not a combination. + WERD_IT w_it(row()->row->word_list()); + for (w_it.mark_cycle_pt(); !w_it.cycled_list(); w_it.forward()) { + if (w_it.data() == word_res->word) { + break; + } + } + ASSERT_HOST(!w_it.cycled_list()); + delete w_it.extract(); + } + // Remove the WERD_RES for the new_word. + // Remove the WORD_RES from the ROW_RES. + WERD_RES_IT wr_it(&row()->word_res_list); + for (wr_it.mark_cycle_pt(); !wr_it.cycled_list(); wr_it.forward()) { + if (wr_it.data() == word_res) { + word_res = NULL; + break; + } + } + ASSERT_HOST(!wr_it.cycled_list()); + delete wr_it.extract(); + ResetWordIterator(); +} + +// Makes the current word a fuzzy space if not already fuzzy. Updates +// corresponding part of combo if required. +void PAGE_RES_IT::MakeCurrentWordFuzzy() { + WERD* real_word = word_res->word; + if (!real_word->flag(W_FUZZY_SP) && !real_word->flag(W_FUZZY_NON)) { + real_word->set_flag(W_FUZZY_SP, true); + if (word_res->combination) { + // The next word should be the corresponding part of combo, but we have + // already stepped past it, so find it by search. + WERD_RES_IT wr_it(&row()->word_res_list); + for (wr_it.mark_cycle_pt(); + !wr_it.cycled_list() && wr_it.data() != word_res; wr_it.forward()) { + } + wr_it.forward(); + ASSERT_HOST(wr_it.data()->part_of_combo); + real_word = wr_it.data()->word; + ASSERT_HOST(!real_word->flag(W_FUZZY_SP) && + !real_word->flag(W_FUZZY_NON)); + real_word->set_flag(W_FUZZY_SP, true); + } + } +} + +/************************************************************************* + * PAGE_RES_IT::restart_page + * + * Set things up at the start of the page + *************************************************************************/ + +WERD_RES *PAGE_RES_IT::start_page(bool empty_ok) { + block_res_it.set_to_list(&page_res->block_res_list); + block_res_it.mark_cycle_pt(); + prev_block_res = NULL; + prev_row_res = NULL; + prev_word_res = NULL; + block_res = NULL; + row_res = NULL; + word_res = NULL; + next_block_res = NULL; + next_row_res = NULL; + next_word_res = NULL; + internal_forward(true, empty_ok); + return internal_forward(false, empty_ok); +} + +// Recovers from operations on the current word, such as in InsertCloneWord +// and DeleteCurrentWord. +// Resets the word_res_it so that it is one past the next_word_res, as +// it should be after internal_forward. If next_row_res != row_res, +// then the next_word_res is in the next row, so there is no need to do +// anything to word_res_it, but it is still a good idea to reset the pointers +// word_res and prev_word_res, which are still in the current row. +void PAGE_RES_IT::ResetWordIterator() { + if (row_res == next_row_res) { + // Reset the member iterator so it can move forward and detect the + // cycled_list state correctly. + word_res_it.move_to_first(); + for (word_res_it.mark_cycle_pt(); + !word_res_it.cycled_list() && word_res_it.data() != next_word_res; + word_res_it.forward()) { + if (!word_res_it.data()->part_of_combo) { + if (prev_row_res == row_res) prev_word_res = word_res; + word_res = word_res_it.data(); + } + } + ASSERT_HOST(!word_res_it.cycled_list()); + word_res_it.forward(); + } else { + // word_res_it is OK, but reset word_res and prev_word_res if needed. + WERD_RES_IT wr_it(&row_res->word_res_list); + for (wr_it.mark_cycle_pt(); !wr_it.cycled_list(); wr_it.forward()) { + if (!wr_it.data()->part_of_combo) { + if (prev_row_res == row_res) prev_word_res = word_res; + word_res = wr_it.data(); + } + } + } +} + +/************************************************************************* + * PAGE_RES_IT::internal_forward + * + * Find the next word on the page. If empty_ok is true, then non-text blocks + * and text blocks with no text are visited as if they contain a single + * imaginary word in a single imaginary row. (word() and row() both return NULL + * in such a block and the return value is NULL.) + * If empty_ok is false, the old behaviour is maintained. Each real word + * is visited and empty and non-text blocks and rows are skipped. + * new_block is used to initialize the iterators for a new block. + * The iterator maintains pointers to block, row and word for the previous, + * current and next words. These are correct, regardless of block/row + * boundaries. NULL values denote start and end of the page. + *************************************************************************/ + +WERD_RES *PAGE_RES_IT::internal_forward(bool new_block, bool empty_ok) { + bool new_row = false; + + prev_block_res = block_res; + prev_row_res = row_res; + prev_word_res = word_res; + block_res = next_block_res; + row_res = next_row_res; + word_res = next_word_res; + next_block_res = NULL; + next_row_res = NULL; + next_word_res = NULL; + + while (!block_res_it.cycled_list()) { + if (new_block) { + new_block = false; + row_res_it.set_to_list(&block_res_it.data()->row_res_list); + row_res_it.mark_cycle_pt(); + if (row_res_it.empty() && empty_ok) { + next_block_res = block_res_it.data(); + break; + } + new_row = true; + } + while (!row_res_it.cycled_list()) { + if (new_row) { + new_row = false; + word_res_it.set_to_list(&row_res_it.data()->word_res_list); + word_res_it.mark_cycle_pt(); + } + // Skip any part_of_combo words. + while (!word_res_it.cycled_list() && word_res_it.data()->part_of_combo) + word_res_it.forward(); + if (!word_res_it.cycled_list()) { + next_block_res = block_res_it.data(); + next_row_res = row_res_it.data(); + next_word_res = word_res_it.data(); + word_res_it.forward(); + goto foundword; + } + // end of row reached + row_res_it.forward(); + new_row = true; + } + // end of block reached + block_res_it.forward(); + new_block = true; + } + foundword: + // Update prev_word_best_choice pointer. + if (page_res != NULL && page_res->prev_word_best_choice != NULL) { + *page_res->prev_word_best_choice = + (new_block || prev_word_res == NULL) ? NULL : prev_word_res->best_choice; + } + return word_res; +} + +/************************************************************************* + * PAGE_RES_IT::restart_row() + * + * Move to the beginning (leftmost word) of the current row. + *************************************************************************/ +WERD_RES *PAGE_RES_IT::restart_row() { + ROW_RES *row = this->row(); + if (!row) return NULL; + for (restart_page(); this->row() != row; forward()) { + // pass + } + return word(); +} + +/************************************************************************* + * PAGE_RES_IT::forward_paragraph + * + * Move to the beginning of the next paragraph, allowing empty blocks. + *************************************************************************/ + +WERD_RES *PAGE_RES_IT::forward_paragraph() { + while (block_res == next_block_res && + (next_row_res != NULL && next_row_res->row != NULL && + row_res->row->para() == next_row_res->row->para())) { + internal_forward(false, true); + } + return internal_forward(false, true); +} + +/************************************************************************* + * PAGE_RES_IT::forward_block + * + * Move to the beginning of the next block, allowing empty blocks. + *************************************************************************/ + +WERD_RES *PAGE_RES_IT::forward_block() { + while (block_res == next_block_res) { + internal_forward(false, true); + } + return internal_forward(false, true); +} + +void PAGE_RES_IT::rej_stat_word() { + inT16 chars_in_word; + inT16 rejects_in_word = 0; + + chars_in_word = word_res->reject_map.length (); + page_res->char_count += chars_in_word; + block_res->char_count += chars_in_word; + row_res->char_count += chars_in_word; + + rejects_in_word = word_res->reject_map.reject_count (); + + page_res->rej_count += rejects_in_word; + block_res->rej_count += rejects_in_word; + row_res->rej_count += rejects_in_word; + if (chars_in_word == rejects_in_word) + row_res->whole_word_rej_count += rejects_in_word; +} diff --git a/3rdparty/hgOCR/include/ccstruct/pageres.h b/3rdparty/hgOCR/include/ccstruct/pageres.h new file mode 100644 index 00000000..26a85342 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/pageres.h @@ -0,0 +1,776 @@ +/********************************************************************** + * File: pageres.h (Formerly page_res.h) + * Description: Results classes used by control.c + * Author: Phil Cheatle + * Created: Tue Sep 22 08:42:49 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ +#ifndef PAGERES_H +#define PAGERES_H + +#include "blamer.h" +#include "blobs.h" +#include "boxword.h" +#include "elst.h" +#include "genericvector.h" +#include "normalis.h" +#include "ocrblock.h" +#include "ocrrow.h" +#include "params_training_featdef.h" +#include "ratngs.h" +#include "rejctmap.h" +#include "seam.h" +#include "werd.h" + +namespace tesseract { + struct FontInfo; + class Tesseract; +} +using tesseract::FontInfo; + +/* Forward declarations */ + +class BLOCK_RES; + +ELISTIZEH(BLOCK_RES) CLISTIZEH(BLOCK_RES) +class + ROW_RES; + +ELISTIZEH(ROW_RES) +class WERD_RES; + +ELISTIZEH(WERD_RES) + +/************************************************************************* + * PAGE_RES - Page results + *************************************************************************/ + class PAGE_RES { // page result + public: + inT32 char_count; + inT32 rej_count; + BLOCK_RES_LIST block_res_list; + BOOL8 rejected; + // Updated every time PAGE_RES_IT iterating on this PAGE_RES moves to + // the next word. This pointer is not owned by PAGE_RES class. + WERD_CHOICE **prev_word_best_choice; + // Sums of blame reasons computed by the blamer. + GenericVector blame_reasons; + // Debug information about all the misadaptions on this page. + // Each BlamerBundle contains an index into this vector, so that words that + // caused misadaption could be marked. However, since words could be + // deleted/split/merged, the log is stored on the PAGE_RES level. + GenericVector misadaption_log; + + inline void Init() { + char_count = 0; + rej_count = 0; + rejected = FALSE; + prev_word_best_choice = NULL; + blame_reasons.init_to_size(IRR_NUM_REASONS, 0); + } + + PAGE_RES() { Init(); } // empty constructor + + PAGE_RES(bool merge_similar_words, + BLOCK_LIST *block_list, // real blocks + WERD_CHOICE **prev_word_best_choice_ptr); + + ~PAGE_RES() { // destructor + } +}; + +/************************************************************************* + * BLOCK_RES - Block results + *************************************************************************/ + +class BLOCK_RES :public ELIST_LINK { +public: + BLOCK * block; // real block + inT32 char_count; // chars in block + inT32 rej_count; // rejected chars + inT16 font_class; // + inT16 row_count; + float x_height; + BOOL8 font_assigned; // block already + // processed + BOOL8 bold; // all bold + BOOL8 italic; // all italic + + ROW_RES_LIST row_res_list; + + BLOCK_RES() { + } // empty constructor + + BLOCK_RES(bool merge_similar_words, BLOCK *the_block); // real block + + ~BLOCK_RES() { // destructor + } +}; + +/************************************************************************* + * ROW_RES - Row results + *************************************************************************/ + +class ROW_RES :public ELIST_LINK { +public: + ROW * row; // real row + inT32 char_count; // chars in block + inT32 rej_count; // rejected chars + inT32 whole_word_rej_count; // rejs in total rej wds + WERD_RES_LIST word_res_list; + + ROW_RES() { + } // empty constructor + + ROW_RES(bool merge_similar_words, ROW *the_row); // real row + + ~ROW_RES() { // destructor + } +}; + +/************************************************************************* + * WERD_RES - Word results + *************************************************************************/ +enum CRUNCH_MODE +{ + CR_NONE, + CR_KEEP_SPACE, + CR_LOOSE_SPACE, + CR_DELETE +}; + +// WERD_RES is a collection of publicly accessible members that gathers +// information about a word result. +class WERD_RES : public ELIST_LINK { +public: + // Which word is which? + // There are 3 coordinate spaces in use here: a possibly rotated pixel space, + // the original image coordinate space, and the BLN space in which the + // baseline of a word is at kBlnBaselineOffset, the xheight is kBlnXHeight, + // and the x-middle of the word is at 0. + // In the rotated pixel space, coordinates correspond to the input image, + // but may be rotated about the origin by a multiple of 90 degrees, + // and may therefore be negative. + // In any case a rotation by denorm.block()->re_rotation() will take them + // back to the original image. + // The other differences between words all represent different stages of + // processing during recognition. + + // ---------------------------INPUT------------------------------------- + + // The word is the input C_BLOBs in the rotated pixel space. + // word is NOT owned by the WERD_RES unless combination is true. + // All the other word pointers ARE owned by the WERD_RES. + WERD* word; // Input C_BLOB word. + + // -------------SETUP BY SetupFor*Recognition---READONLY-INPUT------------ + + // The bln_boxes contains the bounding boxes (only) of the input word, in the + // BLN space. The lengths of word and bln_boxes + // match as they are both before any chopping. + // TODO(rays) determine if docqual does anything useful and delete bln_boxes + // if it doesn't. + tesseract::BoxWord* bln_boxes; // BLN input bounding boxes. + // The ROW that this word sits in. NOT owned by the WERD_RES. + ROW* blob_row; + // The denorm provides the transformation to get back to the rotated image + // coords from the chopped_word/rebuild_word BLN coords, but each blob also + // has its own denorm. + DENORM denorm; // For use on chopped_word. + // Unicharset used by the classifier output in best_choice and raw_choice. + const UNICHARSET* uch_set; // For converting back to utf8. + + // ----Initialized by SetupFor*Recognition---BUT OUTPUT FROM RECOGNITION---- + // ----Setup to a (different!) state expected by the various classifiers---- + // TODO(rays) Tidy and make more consistent. + + // The chopped_word is also in BLN space, and represents the fully chopped + // character fragments that make up the word. + // The length of chopped_word matches length of seam_array + 1 (if set). + TWERD* chopped_word; // BLN chopped fragments output. + // Vector of SEAM* holding chopping points matching chopped_word. + GenericVector seam_array; + // Widths of blobs in chopped_word. + GenericVector blob_widths; + // Gaps between blobs in chopped_word. blob_gaps[i] is the gap between + // blob i and blob i+1. + GenericVector blob_gaps; + // Ratings matrix contains classifier choices for each classified combination + // of blobs. The dimension is the same as the number of blobs in chopped_word + // and the leading diagonal corresponds to classifier results of the blobs + // in chopped_word. The state_ members of best_choice, raw_choice and + // best_choices all correspond to this ratings matrix and allow extraction + // of the blob choices for any given WERD_CHOICE. + MATRIX* ratings; // Owned pointer. + // Pointer to the first WERD_CHOICE in best_choices. This is the result that + // will be output from Tesseract. Note that this is now a borrowed pointer + // and should NOT be deleted. + WERD_CHOICE* best_choice; // Borrowed pointer. + // The best raw_choice found during segmentation search. Differs from the + // best_choice by being the best result according to just the character + // classifier, not taking any language model information into account. + // Unlike best_choice, the pointer IS owned by this WERD_RES. + WERD_CHOICE* raw_choice; // Owned pointer. + // Alternative results found during chopping/segmentation search stages. + // Note that being an ELIST, best_choices owns the WERD_CHOICEs. + WERD_CHOICE_LIST best_choices; + + // Truth bounding boxes, text and incorrect choice reason. + BlamerBundle *blamer_bundle; + + // --------------OUTPUT FROM RECOGNITION------------------------------- + // --------------Not all fields are necessarily set.------------------- + // ---best_choice, raw_choice *must* end up set, with a box_word------- + // ---In complete output, the number of blobs in rebuild_word matches--- + // ---the number of boxes in box_word, the number of unichar_ids in--- + // ---best_choice, the number of ints in best_state, and the number--- + // ---of strings in correct_text-------------------------------------- + // ---SetupFake Sets everything to appropriate values if the word is--- + // ---known to be bad before recognition.------------------------------ + + // The rebuild_word is also in BLN space, but represents the final best + // segmentation of the word. Its length is therefore the same as box_word. + TWERD* rebuild_word; // BLN best segmented word. + // The box_word is in the original image coordinate space. It is the + // bounding boxes of the rebuild_word, after denormalization. + // The length of box_word matches rebuild_word, best_state (if set) and + // correct_text (if set), as well as best_choice and represents the + // number of classified units in the output. + tesseract::BoxWord* box_word; // Denormalized output boxes. + // The best_state stores the relationship between chopped_word and + // rebuild_word. Each blob[i] in rebuild_word is composed of best_state[i] + // adjacent blobs in chopped_word. The seams in seam_array are hidden + // within a rebuild_word blob and revealed between them. + GenericVector best_state; // Number of blobs in each best blob. + // The correct_text is used during training and adaption to carry the + // text to the training system without the need for a unicharset. There + // is one entry in the vector for each blob in rebuild_word and box_word. + GenericVector correct_text; + // The Tesseract that was used to recognize this word. Just a borrowed + // pointer. Note: Tesseract's class definition is in a higher-level library. + // We avoid introducing a cyclic dependency by not using the Tesseract + // within WERD_RES. We are just storing it to provide access to it + // for the top-level multi-language controller, and maybe for output of + // the recognized language. + tesseract::Tesseract* tesseract; + + // Less-well documented members. + // TODO(rays) Add more documentation here. + WERD_CHOICE *ep_choice; // ep text TODO(rays) delete this. + REJMAP reject_map; // best_choice rejects + BOOL8 tess_failed; + /* + If tess_failed is TRUE, one of the following tests failed when Tess + returned: + - The outword blob list was not the same length as the best_choice string; + - The best_choice string contained ALL blanks; + - The best_choice string was zero length + */ + BOOL8 tess_accepted; // Tess thinks its ok? + BOOL8 tess_would_adapt; // Tess would adapt? + BOOL8 done; // ready for output? + bool small_caps; // word appears to be small caps + bool odd_size; // word is bigger than line or leader dots. + inT8 italic; + inT8 bold; + // The fontinfos are pointers to data owned by the classifier. + const FontInfo* fontinfo; + const FontInfo* fontinfo2; + inT8 fontinfo_id_count; // number of votes + inT8 fontinfo_id2_count; // number of votes + BOOL8 guessed_x_ht; + BOOL8 guessed_caps_ht; + CRUNCH_MODE unlv_crunch_mode; + float x_height; // post match estimate + float caps_height; // post match estimate + float baseline_shift; // post match estimate. + // Certainty score for the spaces either side of this word (LSTM mode). + // MIN this value with the actual word certainty. + float space_certainty; + + /* + To deal with fuzzy spaces we need to be able to combine "words" to form + combinations when we suspect that the gap is a non-space. The (new) text + ord code generates separate words for EVERY fuzzy gap - flags in the word + indicate whether the gap is below the threshold (fuzzy kern) and is thus + NOT a real word break by default, or above the threshold (fuzzy space) and + this is a real word break by default. + + The WERD_RES list contains all these words PLUS "combination" words built + out of (copies of) the words split by fuzzy kerns. The separate parts have + their "part_of_combo" flag set true and should be IGNORED on a default + reading of the list. + + Combination words are FOLLOWED by the sequence of part_of_combo words + which they combine. + */ + BOOL8 combination; //of two fuzzy gap wds + BOOL8 part_of_combo; //part of a combo + BOOL8 reject_spaces; //Reject spacing? + + WERD_RES() { + InitNonPointers(); + InitPointers(); + } + WERD_RES(WERD *the_word) { + InitNonPointers(); + InitPointers(); + word = the_word; + } + // Deep copies everything except the ratings MATRIX. + // To get that use deep_copy below. + WERD_RES(const WERD_RES& source) : ELIST_LINK(source) { + InitPointers(); + *this = source; // see operator= + } + + ~WERD_RES(); + + // Returns the UTF-8 string for the given blob index in the best_choice word, + // given that we know whether we are in a right-to-left reading context. + // This matters for mirrorable characters such as parentheses. We recognize + // characters purely based on their shape on the page, and by default produce + // the corresponding unicode for a left-to-right context. + const char* BestUTF8(int blob_index, bool in_rtl_context) const { + if (blob_index < 0 || best_choice == NULL || + blob_index >= best_choice->length()) + return NULL; + UNICHAR_ID id = best_choice->unichar_id(blob_index); + if (id < 0 || id >= uch_set->size() || id == INVALID_UNICHAR_ID) + return NULL; + UNICHAR_ID mirrored = uch_set->get_mirror(id); + if (in_rtl_context && mirrored > 0 && mirrored != INVALID_UNICHAR_ID) + id = mirrored; + return uch_set->id_to_unichar_ext(id); + } + // Returns the UTF-8 string for the given blob index in the raw_choice word. + const char* RawUTF8(int blob_index) const { + if (blob_index < 0 || blob_index >= raw_choice->length()) + return NULL; + UNICHAR_ID id = raw_choice->unichar_id(blob_index); + if (id < 0 || id >= uch_set->size() || id == INVALID_UNICHAR_ID) + return NULL; + return uch_set->id_to_unichar(id); + } + + UNICHARSET::Direction SymbolDirection(int blob_index) const { + if (best_choice == NULL || + blob_index >= best_choice->length() || + blob_index < 0) + return UNICHARSET::U_OTHER_NEUTRAL; + return uch_set->get_direction(best_choice->unichar_id(blob_index)); + } + + bool AnyRtlCharsInWord() const { + if (uch_set == NULL || best_choice == NULL || best_choice->length() < 1) + return false; + for (int id = 0; id < best_choice->length(); id++) { + int unichar_id = best_choice->unichar_id(id); + if (unichar_id < 0 || unichar_id >= uch_set->size()) + continue; // Ignore illegal chars. + UNICHARSET::Direction dir = + uch_set->get_direction(unichar_id); + if (dir == UNICHARSET::U_RIGHT_TO_LEFT || + dir == UNICHARSET::U_RIGHT_TO_LEFT_ARABIC || + dir == UNICHARSET::U_ARABIC_NUMBER) + return true; + } + return false; + } + + bool AnyLtrCharsInWord() const { + if (uch_set == NULL || best_choice == NULL || best_choice->length() < 1) + return false; + for (int id = 0; id < best_choice->length(); id++) { + int unichar_id = best_choice->unichar_id(id); + if (unichar_id < 0 || unichar_id >= uch_set->size()) + continue; // Ignore illegal chars. + UNICHARSET::Direction dir = uch_set->get_direction(unichar_id); + if (dir == UNICHARSET::U_LEFT_TO_RIGHT) + return true; + } + return false; + } + + // Return whether the blobs in this WERD_RES 0, 1,... come from an engine + // that gave us the unichars in reading order (as opposed to strict left + // to right). + bool UnicharsInReadingOrder() const { + return best_choice->unichars_in_script_order(); + } + + void InitNonPointers(); + void InitPointers(); + void Clear(); + void ClearResults(); + void ClearWordChoices(); + void ClearRatings(); + + // Deep copies everything except the ratings MATRIX. + // To get that use deep_copy below. + WERD_RES& operator=(const WERD_RES& source); //from this + + void CopySimpleFields(const WERD_RES& source); + + // Initializes a blank (default constructed) WERD_RES from one that has + // already been recognized. + // Use SetupFor*Recognition afterwards to complete the setup and make + // it ready for a retry recognition. + void InitForRetryRecognition(const WERD_RES& source); + + // Sets up the members used in recognition: bln_boxes, chopped_word, + // seam_array, denorm. Returns false if + // the word is empty and sets up fake results. If use_body_size is + // true and row->body_size is set, then body_size will be used for + // blob normalization instead of xheight + ascrise. This flag is for + // those languages that are using CJK pitch model and thus it has to + // be true if and only if tesseract->textord_use_cjk_fp_model is + // true. + // If allow_detailed_fx is true, the feature extractor will receive fine + // precision outline information, allowing smoother features and better + // features on low resolution images. + // The norm_mode sets the default mode for normalization in absence + // of any of the above flags. It should really be a tesseract::OcrEngineMode + // but is declared as int for ease of use with tessedit_ocr_engine_mode. + // Returns false if the word is empty and sets up fake results. + bool SetupForRecognition(const UNICHARSET& unicharset_in, + tesseract::Tesseract* tesseract, Pix* pix, + int norm_mode, + const TBOX* norm_box, bool numeric_mode, + bool use_body_size, bool allow_detailed_fx, + ROW *row, const BLOCK* block); + + // Set up the seam array, bln_boxes, best_choice, and raw_choice to empty + // accumulators from a made chopped word. We presume the fields are already + // empty. + void SetupBasicsFromChoppedWord(const UNICHARSET &unicharset_in); + + // Sets up the members used in recognition for an empty recognition result: + // bln_boxes, chopped_word, seam_array, denorm, best_choice, raw_choice. + void SetupFake(const UNICHARSET& uch); + + // Set the word as having the script of the input unicharset. + void SetupWordScript(const UNICHARSET& unicharset_in); + + // Sets up the blamer_bundle if it is not null, using the initialized denorm. + void SetupBlamerBundle(); + + // Computes the blob_widths and blob_gaps from the chopped_word. + void SetupBlobWidthsAndGaps(); + + // Updates internal data to account for a new SEAM (chop) at the given + // blob_number. Fixes the ratings matrix and states in the choices, as well + // as the blob widths and gaps. + void InsertSeam(int blob_number, SEAM* seam); + + // Returns true if all the word choices except the first have adjust_factors + // worse than the given threshold. + bool AlternativeChoiceAdjustmentsWorseThan(float threshold) const; + + // Returns true if the current word is ambiguous (by number of answers or + // by dangerous ambigs.) + bool IsAmbiguous(); + + // Returns true if the ratings matrix size matches the sum of each of the + // segmentation states. + bool StatesAllValid(); + + // Prints a list of words found if debug is true or the word result matches + // the word_to_debug. + void DebugWordChoices(bool debug, const char* word_to_debug); + + // Prints the top choice along with the accepted/done flags. + void DebugTopChoice(const char* msg) const; + + // Removes from best_choices all choices which are not within a reasonable + // range of the best choice. + void FilterWordChoices(int debug_level); + + // Computes a set of distance thresholds used to control adaption. + // Compares the best choice for the current word to the best raw choice + // to determine which characters were classified incorrectly by the + // classifier. Then places a separate threshold into thresholds for each + // character in the word. If the classifier was correct, max_rating is placed + // into thresholds. If the classifier was incorrect, the mean match rating + // (error percentage) of the classifier's incorrect choice minus some margin + // is placed into thresholds. This can then be used by the caller to try to + // create a new template for the desired class that will classify the + // character with a rating better than the threshold value. The match rating + // placed into thresholds is never allowed to be below min_rating in order to + // prevent trying to make overly tight templates. + // min_rating limits how tight to make a template. + // max_rating limits how loose to make a template. + // rating_margin denotes the amount of margin to put in template. + void ComputeAdaptionThresholds(float certainty_scale, + float min_rating, + float max_rating, + float rating_margin, + float* thresholds); + + // Saves a copy of the word_choice if it has the best unadjusted rating. + // Returns true if the word_choice was the new best. + bool LogNewRawChoice(WERD_CHOICE* word_choice); + // Consumes word_choice by adding it to best_choices, (taking ownership) if + // the certainty for word_choice is some distance of the best choice in + // best_choices, or by deleting the word_choice and returning false. + // The best_choices list is kept in sorted order by rating. Duplicates are + // removed, and the list is kept no longer than max_num_choices in length. + // Returns true if the word_choice is still a valid pointer. + bool LogNewCookedChoice(int max_num_choices, bool debug, + WERD_CHOICE* word_choice); + + // Prints a brief list of all the best choices. + void PrintBestChoices() const; + + // Returns the sum of the widths of the blob between start_blob and last_blob + // inclusive. + int GetBlobsWidth(int start_blob, int last_blob); + // Returns the width of a gap between the specified blob and the next one. + int GetBlobsGap(int blob_index); + + // Returns the BLOB_CHOICE corresponding to the given index in the + // best choice word taken from the appropriate cell in the ratings MATRIX. + // Borrowed pointer, so do not delete. May return NULL if there is no + // BLOB_CHOICE matching the unichar_id at the given index. + BLOB_CHOICE* GetBlobChoice(int index) const; + + // Returns the BLOB_CHOICE_LIST corresponding to the given index in the + // best choice word taken from the appropriate cell in the ratings MATRIX. + // Borrowed pointer, so do not delete. + BLOB_CHOICE_LIST* GetBlobChoices(int index) const; + + // Moves the results fields from word to this. This takes ownership of all + // the data, so src can be destructed. + // word1.ConsumeWordResult(word); + // delete word; + // is simpler and faster than: + // word1 = *word; + // delete word; + // as it doesn't need to copy and reallocate anything. + void ConsumeWordResults(WERD_RES* word); + + // Replace the best choice and rebuild box word. + // choice must be from the current best_choices list. + void ReplaceBestChoice(WERD_CHOICE* choice); + + // Builds the rebuild_word and sets the best_state from the chopped_word and + // the best_choice->state. + void RebuildBestState(); + + // Copies the chopped_word to the rebuild_word, faking a best_state as well. + // Also sets up the output box_word. + void CloneChoppedToRebuild(); + + // Sets/replaces the box_word with one made from the rebuild_word. + void SetupBoxWord(); + + // Sets up the script positions in the best_choice using the best_choice + // to get the unichars, and the unicharset to get the target positions. + void SetScriptPositions(); + // Sets all the blobs in all the words (best choice and alternates) to be + // the given position. (When a sub/superscript is recognized as a separate + // word, it falls victim to the rule that a whole word cannot be sub or + // superscript, so this function overrides that problem.) + void SetAllScriptPositions(tesseract::ScriptPos position); + + // Classifies the word with some already-calculated BLOB_CHOICEs. + // The choices are an array of blob_count pointers to BLOB_CHOICE, + // providing a single classifier result for each blob. + // The BLOB_CHOICEs are consumed and the word takes ownership. + // The number of blobs in the box_word must match blob_count. + void FakeClassifyWord(int blob_count, BLOB_CHOICE** choices); + + // Creates a WERD_CHOICE for the word using the top choices from the leading + // diagonal of the ratings matrix. + void FakeWordFromRatings(PermuterType permuter); + + // Copies the best_choice strings to the correct_text for adaption/training. + void BestChoiceToCorrectText(); + + // Merges 2 adjacent blobs in the result if the permanent callback + // class_cb returns other than INVALID_UNICHAR_ID, AND the permanent + // callback box_cb is NULL or returns true, setting the merged blob + // result to the class returned from class_cb. + // Returns true if anything was merged. + bool ConditionalBlobMerge( + TessResultCallback2* class_cb, + TessResultCallback2* box_cb); + + // Merges 2 adjacent blobs in the result (index and index+1) and corrects + // all the data to account for the change. + void MergeAdjacentBlobs(int index); + + // Callback helper for fix_quotes returns a double quote if both + // arguments are quote, otherwise INVALID_UNICHAR_ID. + UNICHAR_ID BothQuotes(UNICHAR_ID id1, UNICHAR_ID id2); + void fix_quotes(); + + // Callback helper for fix_hyphens returns UNICHAR_ID of - if both + // arguments are hyphen, otherwise INVALID_UNICHAR_ID. + UNICHAR_ID BothHyphens(UNICHAR_ID id1, UNICHAR_ID id2); + // Callback helper for fix_hyphens returns true if box1 and box2 overlap + // (assuming both on the same textline, are in order and a chopped em dash.) + bool HyphenBoxesOverlap(const TBOX& box1, const TBOX& box2); + void fix_hyphens(); + + // Callback helper for merge_tess_fails returns a space if both + // arguments are space, otherwise INVALID_UNICHAR_ID. + UNICHAR_ID BothSpaces(UNICHAR_ID id1, UNICHAR_ID id2); + void merge_tess_fails(); + + // Returns a really deep copy of *src, including the ratings MATRIX. + static WERD_RES* deep_copy(const WERD_RES* src) { + WERD_RES* result = new WERD_RES(*src); + // That didn't copy the ratings, but we want a copy if there is one to + // begin with. + if (src->ratings != NULL) + result->ratings = src->ratings->DeepCopy(); + return result; + } + + // Copy blobs from word_res onto this word (eliminating spaces between). + // Since this may be called bidirectionally OR both the BOL and EOL flags. + void copy_on(WERD_RES *word_res) { //from this word + word->set_flag(W_BOL, word->flag(W_BOL) || word_res->word->flag(W_BOL)); + word->set_flag(W_EOL, word->flag(W_EOL) || word_res->word->flag(W_EOL)); + word->copy_on(word_res->word); + } + + // Returns true if the collection of count pieces, starting at start, are all + // natural connected components, ie there are no real chops involved. + bool PiecesAllNatural(int start, int count) const; +}; + +/************************************************************************* + * PAGE_RES_IT - Page results iterator + *************************************************************************/ + +class PAGE_RES_IT { +public: + PAGE_RES * page_res; // page being iterated + + PAGE_RES_IT() { + } // empty contructor + + PAGE_RES_IT(PAGE_RES *the_page_res) { // page result + page_res = the_page_res; + restart_page(); // ready to scan + } + + // Do two PAGE_RES_ITs point at the same word? + // This is much cheaper than cmp(). + bool operator ==(const PAGE_RES_IT &other) const; + + bool operator !=(const PAGE_RES_IT &other) const { return !(*this == other); } + + // Given another PAGE_RES_IT to the same page, + // this before other: -1 + // this equal to other: 0 + // this later than other: 1 + int cmp(const PAGE_RES_IT &other) const; + + WERD_RES *restart_page() { + return start_page(false); // Skip empty blocks. + } + WERD_RES *restart_page_with_empties() { + return start_page(true); // Allow empty blocks. + } + WERD_RES *start_page(bool empty_ok); + + WERD_RES *restart_row(); + + // ============ Methods that mutate the underling structures =========== + // Note that these methods will potentially invalidate other PAGE_RES_ITs + // and are intended to be used only while a single PAGE_RES_IT is active. + // This problem needs to be taken into account if these mutation operators + // are ever provided to PageIterator or its subclasses. + + // Inserts the new_word and a corresponding WERD_RES before the current + // position. The simple fields of the WERD_RES are copied from clone_res and + // the resulting WERD_RES is returned for further setup with best_choice etc. + WERD_RES* InsertSimpleCloneWord(const WERD_RES& clone_res, WERD* new_word); + + // Replaces the current WERD/WERD_RES with the given words. The given words + // contain fake blobs that indicate the position of the characters. These are + // replaced with real blobs from the current word as much as possible. + void ReplaceCurrentWord(tesseract::PointerVector* words); + + // Deletes the current WERD_RES and its underlying WERD. + void DeleteCurrentWord(); + + // Makes the current word a fuzzy space if not already fuzzy. Updates + // corresponding part of combo if required. + void MakeCurrentWordFuzzy(); + + WERD_RES *forward() { // Get next word. + return internal_forward(false, false); + } + // Move forward, but allow empty blocks to show as single NULL words. + WERD_RES *forward_with_empties() { + return internal_forward(false, true); + } + + WERD_RES *forward_paragraph(); // get first word in next non-empty paragraph + WERD_RES *forward_block(); // get first word in next non-empty block + + WERD_RES *prev_word() const { // previous word + return prev_word_res; + } + ROW_RES *prev_row() const { // row of prev word + return prev_row_res; + } + BLOCK_RES *prev_block() const { // block of prev word + return prev_block_res; + } + WERD_RES *word() const { // current word + return word_res; + } + ROW_RES *row() const { // row of current word + return row_res; + } + BLOCK_RES *block() const { // block of cur. word + return block_res; + } + WERD_RES *next_word() const { // next word + return next_word_res; + } + ROW_RES *next_row() const { // row of next word + return next_row_res; + } + BLOCK_RES *next_block() const { // block of next word + return next_block_res; + } + void rej_stat_word(); // for page/block/row + void ResetWordIterator(); + +private: + WERD_RES *internal_forward(bool new_block, bool empty_ok); + + WERD_RES * prev_word_res; // previous word + ROW_RES *prev_row_res; // row of prev word + BLOCK_RES *prev_block_res; // block of prev word + + WERD_RES *word_res; // current word + ROW_RES *row_res; // row of current word + BLOCK_RES *block_res; // block of cur. word + + WERD_RES *next_word_res; // next word + ROW_RES *next_row_res; // row of next word + BLOCK_RES *next_block_res; // block of next word + + BLOCK_RES_IT block_res_it; // iterators + ROW_RES_IT row_res_it; + WERD_RES_IT word_res_it; +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/params_training_featdef.cpp b/3rdparty/hgOCR/include/ccstruct/params_training_featdef.cpp new file mode 100644 index 00000000..5daa7ae1 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/params_training_featdef.cpp @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////// +// File: params_training_featdef.cpp +// Description: Utility functions for params training features. +// Author: David Eger +// Created: Mon Jun 11 11:26:42 PDT 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include + +#include "params_training_featdef.h" + +namespace tesseract { + +int ParamsTrainingFeatureByName(const char *name) { + if (name == NULL) + return -1; + int array_size = sizeof(kParamsTrainingFeatureTypeName) / + sizeof(kParamsTrainingFeatureTypeName[0]); + for (int i = 0; i < array_size; i++) { + if (kParamsTrainingFeatureTypeName[i] == NULL) + continue; + if (strcmp(name, kParamsTrainingFeatureTypeName[i]) == 0) + return i; + } + return -1; +} + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccstruct/params_training_featdef.h b/3rdparty/hgOCR/include/ccstruct/params_training_featdef.h new file mode 100644 index 00000000..6e021f0b --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/params_training_featdef.h @@ -0,0 +1,149 @@ +/////////////////////////////////////////////////////////////////////// +// File: params_training_featdef.h +// Description: Feature definitions for params training. +// Author: Rika Antonova +// Created: Mon Nov 28 11:26:42 PDT 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_WORDREC_PARAMS_TRAINING_FEATDEF_H_ +#define TESSERACT_WORDREC_PARAMS_TRAINING_FEATDEF_H_ + +#include "genericvector.h" +#include "strngs.h" + +namespace tesseract { + +// Maximum number of unichars in the small and medium sized words +static const int kMaxSmallWordUnichars = 3; +static const int kMaxMediumWordUnichars = 6; + +// Raw features extracted from a single OCR hypothesis. +// The features are normalized (by outline length or number of unichars as +// appropriate) real-valued quantities with unbounded range and +// unknown distribution. +// Normalization / binarization of these features is done at a later stage. +// Note: when adding new fields to this enum make sure to modify +// kParamsTrainingFeatureTypeName +enum kParamsTrainingFeatureType { + // Digits + PTRAIN_DIGITS_SHORT, // 0 + PTRAIN_DIGITS_MED, // 1 + PTRAIN_DIGITS_LONG, // 2 + // Number or pattern (NUMBER_PERM, USER_PATTERN_PERM) + PTRAIN_NUM_SHORT, // 3 + PTRAIN_NUM_MED, // 4 + PTRAIN_NUM_LONG, // 5 + // Document word (DOC_DAWG_PERM) + PTRAIN_DOC_SHORT, // 6 + PTRAIN_DOC_MED, // 7 + PTRAIN_DOC_LONG, // 8 + // Word (SYSTEM_DAWG_PERM, USER_DAWG_PERM, COMPOUND_PERM) + PTRAIN_DICT_SHORT, // 9 + PTRAIN_DICT_MED, // 10 + PTRAIN_DICT_LONG, // 11 + // Frequent word (FREQ_DAWG_PERM) + PTRAIN_FREQ_SHORT, // 12 + PTRAIN_FREQ_MED, // 13 + PTRAIN_FREQ_LONG, // 14 + PTRAIN_SHAPE_COST_PER_CHAR, // 15 + PTRAIN_NGRAM_COST_PER_CHAR, // 16 + PTRAIN_NUM_BAD_PUNC, // 17 + PTRAIN_NUM_BAD_CASE, // 18 + PTRAIN_XHEIGHT_CONSISTENCY, // 19 + PTRAIN_NUM_BAD_CHAR_TYPE, // 20 + PTRAIN_NUM_BAD_SPACING, // 21 + PTRAIN_NUM_BAD_FONT, // 22 + PTRAIN_RATING_PER_CHAR, // 23 + + PTRAIN_NUM_FEATURE_TYPES +}; + +static const char * const kParamsTrainingFeatureTypeName[] = { + "PTRAIN_DIGITS_SHORT", // 0 + "PTRAIN_DIGITS_MED", // 1 + "PTRAIN_DIGITS_LONG", // 2 + "PTRAIN_NUM_SHORT", // 3 + "PTRAIN_NUM_MED", // 4 + "PTRAIN_NUM_LONG", // 5 + "PTRAIN_DOC_SHORT", // 6 + "PTRAIN_DOC_MED", // 7 + "PTRAIN_DOC_LONG", // 8 + "PTRAIN_DICT_SHORT", // 9 + "PTRAIN_DICT_MED", // 10 + "PTRAIN_DICT_LONG", // 11 + "PTRAIN_FREQ_SHORT", // 12 + "PTRAIN_FREQ_MED", // 13 + "PTRAIN_FREQ_LONG", // 14 + "PTRAIN_SHAPE_COST_PER_CHAR", // 15 + "PTRAIN_NGRAM_COST_PER_CHAR", // 16 + "PTRAIN_NUM_BAD_PUNC", // 17 + "PTRAIN_NUM_BAD_CASE", // 18 + "PTRAIN_XHEIGHT_CONSISTENCY", // 19 + "PTRAIN_NUM_BAD_CHAR_TYPE", // 20 + "PTRAIN_NUM_BAD_SPACING", // 21 + "PTRAIN_NUM_BAD_FONT", // 22 + "PTRAIN_RATING_PER_CHAR", // 23 +}; + +// Returns the index of the given feature (by name), +// or -1 meaning the feature is unknown. +int ParamsTrainingFeatureByName(const char *name); + + +// Entry with features extracted from a single OCR hypothesis for a word. +struct ParamsTrainingHypothesis { + ParamsTrainingHypothesis() : cost(0.0) { + memset(features, 0, sizeof(float) * PTRAIN_NUM_FEATURE_TYPES); + } + ParamsTrainingHypothesis(const ParamsTrainingHypothesis &other) { + memcpy(features, other.features, + sizeof(float) * PTRAIN_NUM_FEATURE_TYPES); + str = other.str; + cost = other.cost; + } + float features[PTRAIN_NUM_FEATURE_TYPES]; + STRING str; // string corresponding to word hypothesis (for debugging) + float cost; // path cost computed by segsearch +}; + +// A list of hypotheses explored during one run of segmentation search. +typedef GenericVector ParamsTrainingHypothesisList; + +// A bundle that accumulates all of the hypothesis lists explored during all +// of the runs of segmentation search on a word (e.g. a list of hypotheses +// explored on PASS1, PASS2, fix xheight pass, etc). +class ParamsTrainingBundle { + public: + ParamsTrainingBundle() {} + // Starts a new hypothesis list. + // Should be called at the beginning of a new run of the segmentation search. + void StartHypothesisList() { + hyp_list_vec.push_back(ParamsTrainingHypothesisList()); + } + // Adds a new ParamsTrainingHypothesis to the current hypothesis list + // and returns the reference to the newly added entry. + ParamsTrainingHypothesis &AddHypothesis( + const ParamsTrainingHypothesis &other) { + if (hyp_list_vec.empty()) StartHypothesisList(); + hyp_list_vec.back().push_back(ParamsTrainingHypothesis(other)); + return hyp_list_vec.back().back(); + } + + GenericVector hyp_list_vec; +}; + +} // namespace tesseract + +#endif // TESSERACT_WORDREC_PARAMS_TRAINING_FEATDEF_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/pdblock.cpp b/3rdparty/hgOCR/include/ccstruct/pdblock.cpp new file mode 100644 index 00000000..cf3289f2 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/pdblock.cpp @@ -0,0 +1,378 @@ +/********************************************************************** + * File: pdblock.c (Formerly pdblk.c) + * Description: PDBLK member functions and iterator functions. + * Author: Ray Smith + * Created: Fri Mar 15 09:41:28 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include "allheaders.h" +#include "blckerr.h" +#include "pdblock.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#define BLOCK_LABEL_HEIGHT 150 //char height of block id + +CLISTIZE (PDBLK) +/********************************************************************** + * PDBLK::PDBLK + * + * Constructor for a simple rectangular block. + **********************************************************************/ +PDBLK::PDBLK ( //rectangular block +inT16 xmin, //bottom left +inT16 ymin, inT16 xmax, //top right +inT16 ymax): box (ICOORD (xmin, ymin), ICOORD (xmax, ymax)) { + //boundaries + ICOORDELT_IT left_it = &leftside; + ICOORDELT_IT right_it = &rightside; + + hand_poly = NULL; + left_it.set_to_list (&leftside); + right_it.set_to_list (&rightside); + //make default box + left_it.add_to_end (new ICOORDELT (xmin, ymin)); + left_it.add_to_end (new ICOORDELT (xmin, ymax)); + right_it.add_to_end (new ICOORDELT (xmax, ymin)); + right_it.add_to_end (new ICOORDELT (xmax, ymax)); + index_ = 0; +} + + +/********************************************************************** + * PDBLK::set_sides + * + * Sets left and right vertex lists + **********************************************************************/ + +void PDBLK::set_sides( //set vertex lists + ICOORDELT_LIST *left, //left vertices + ICOORDELT_LIST *right //right vertices + ) { + //boundaries + ICOORDELT_IT left_it = &leftside; + ICOORDELT_IT right_it = &rightside; + + leftside.clear (); + left_it.move_to_first (); + left_it.add_list_before (left); + rightside.clear (); + right_it.move_to_first (); + right_it.add_list_before (right); +} + +/********************************************************************** + * PDBLK::contains + * + * Return TRUE if the given point is within the block. + **********************************************************************/ + +BOOL8 PDBLK::contains( //test containment + ICOORD pt //point to test + ) { + BLOCK_RECT_IT it = this; //rectangle iterator + ICOORD bleft, tright; //corners of rectangle + + for (it.start_block (); !it.cycled_rects (); it.forward ()) { + //get rectangle + it.bounding_box (bleft, tright); + //inside rect + if (pt.x () >= bleft.x () && pt.x () <= tright.x () + && pt.y () >= bleft.y () && pt.y () <= tright.y ()) + return TRUE; //is inside + } + return FALSE; //not inside +} + + +/********************************************************************** + * PDBLK::move + * + * Reposition block + **********************************************************************/ + +void PDBLK::move( // reposition block + const ICOORD vec // by vector + ) { + ICOORDELT_IT it(&leftside); + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + *(it.data ()) += vec; + + it.set_to_list (&rightside); + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + *(it.data ()) += vec; + + box.move (vec); +} + +// Returns a binary Pix mask with a 1 pixel for every pixel within the +// block. Rotates the coordinate system by rerotation prior to rendering. +Pix* PDBLK::render_mask(const FCOORD& rerotation, TBOX* mask_box) { + TBOX rotated_box(box); + rotated_box.rotate(rerotation); + Pix* pix = pixCreate(rotated_box.width(), rotated_box.height(), 1); + if (hand_poly != NULL) { + // We are going to rotate, so get a deep copy of the points and + // make a new POLY_BLOCK with it. + ICOORDELT_LIST polygon; + polygon.deep_copy(hand_poly->points(), ICOORDELT::deep_copy); + POLY_BLOCK image_block(&polygon, hand_poly->isA()); + image_block.rotate(rerotation); + // Block outline is a polygon, so use a PB_LINE_IT to get the + // rasterized interior. (Runs of interior pixels on a line.) + PB_LINE_IT *lines = new PB_LINE_IT(&image_block); + for (int y = box.bottom(); y < box.top(); ++y) { + ICOORDELT_LIST* segments = lines->get_line(y); + if (!segments->empty()) { + ICOORDELT_IT s_it(segments); + // Each element of segments is a start x and x size of the + // run of interior pixels. + for (s_it.mark_cycle_pt(); !s_it.cycled_list(); s_it.forward()) { + int start = s_it.data()->x(); + int xext = s_it.data()->y(); + // Set the run of pixels to 1. + pixRasterop(pix, start - rotated_box.left(), + rotated_box.height() - 1 - (y - rotated_box.bottom()), + xext, 1, PIX_SET, NULL, 0, 0); + } + } + delete segments; + } + delete lines; + } else { + // Just fill the whole block as there is only a bounding box. + pixRasterop(pix, 0, 0, rotated_box.width(), rotated_box.height(), + PIX_SET, NULL, 0, 0); + } + if (mask_box != NULL) *mask_box = rotated_box; + return pix; +} + + +/********************************************************************** + * PDBLK::plot + * + * Plot the outline of a block in the given colour. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void PDBLK::plot( //draw outline + ScrollView* window, //window to draw in + inT32 serial, //serial number + ScrollView::Color colour //colour to draw in + ) { + ICOORD startpt; //start of outline + ICOORD endpt; //end of outline + ICOORD prevpt; //previous point + ICOORDELT_IT it = &leftside; //iterator + + //set the colour + window->Pen(colour); + window->TextAttributes("Times", BLOCK_LABEL_HEIGHT, false, false, false); + + if (hand_poly != NULL) { + hand_poly->plot(window, serial); + } else if (!leftside.empty ()) { + startpt = *(it.data ()); //bottom left corner + // tprintf("Block %d bottom left is (%d,%d)\n", + // serial,startpt.x(),startpt.y()); + char temp_buff[34]; + #if defined(__UNIX__) || defined(MINGW) + sprintf(temp_buff, INT32FORMAT, serial); + #else + ultoa (serial, temp_buff, 10); + #endif + window->Text(startpt.x (), startpt.y (), temp_buff); + + window->SetCursor(startpt.x (), startpt.y ()); + do { + prevpt = *(it.data ()); //previous point + it.forward (); //move to next point + //draw round corner + window->DrawTo(prevpt.x (), it.data ()->y ()); + window->DrawTo(it.data ()->x (), it.data ()->y ()); + } + while (!it.at_last ()); //until end of list + endpt = *(it.data ()); //end point + + //other side of boundary + window->SetCursor(startpt.x (), startpt.y ()); + it.set_to_list (&rightside); + prevpt = startpt; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + //draw round corner + window->DrawTo(prevpt.x (), it.data ()->y ()); + window->DrawTo(it.data ()->x (), it.data ()->y ()); + prevpt = *(it.data ()); //previous point + } + //close boundary + window->DrawTo(endpt.x(), endpt.y()); + } +} +#endif + +/********************************************************************** + * PDBLK::operator= + * + * Assignment - duplicate the block structure, but with an EMPTY row list. + **********************************************************************/ + +PDBLK & PDBLK::operator= ( //assignment +const PDBLK & source //from this +) { + // this->ELIST_LINK::operator=(source); + if (!leftside.empty ()) + leftside.clear (); + if (!rightside.empty ()) + rightside.clear (); + leftside.deep_copy(&source.leftside, &ICOORDELT::deep_copy); + rightside.deep_copy(&source.rightside, &ICOORDELT::deep_copy); + box = source.box; + return *this; +} + + +/********************************************************************** + * BLOCK_RECT_IT::BLOCK_RECT_IT + * + * Construct a block rectangle iterator. + **********************************************************************/ + +BLOCK_RECT_IT::BLOCK_RECT_IT ( +//iterate rectangles +PDBLK * blkptr //from block +):left_it (&blkptr->leftside), right_it (&blkptr->rightside) { + block = blkptr; //remember block + //non empty list + if (!blkptr->leftside.empty ()) { + start_block(); //ready for iteration + } +} + + +/********************************************************************** + * BLOCK_RECT_IT::set_to_block + * + * Start a new block. + **********************************************************************/ + +void BLOCK_RECT_IT::set_to_block( //start (new) block + PDBLK *blkptr) { //block to start + block = blkptr; //remember block + //set iterators + left_it.set_to_list (&blkptr->leftside); + right_it.set_to_list (&blkptr->rightside); + if (!blkptr->leftside.empty ()) + start_block(); //ready for iteration +} + + +/********************************************************************** + * BLOCK_RECT_IT::start_block + * + * Restart a block. + **********************************************************************/ + +void BLOCK_RECT_IT::start_block() { //start (new) block + left_it.move_to_first (); + right_it.move_to_first (); + left_it.mark_cycle_pt (); + right_it.mark_cycle_pt (); + ymin = left_it.data ()->y (); //bottom of first box + ymax = left_it.data_relative (1)->y (); + if (right_it.data_relative (1)->y () < ymax) + //smallest step + ymax = right_it.data_relative (1)->y (); +} + + +/********************************************************************** + * BLOCK_RECT_IT::forward + * + * Move to the next rectangle in the block. + **********************************************************************/ + +void BLOCK_RECT_IT::forward() { //next rectangle + if (!left_it.empty ()) { //non-empty list + if (left_it.data_relative (1)->y () == ymax) + left_it.forward (); //move to meet top + if (right_it.data_relative (1)->y () == ymax) + right_it.forward (); + //last is special + if (left_it.at_last () || right_it.at_last ()) { + left_it.move_to_first (); //restart + right_it.move_to_first (); + //now at bottom + ymin = left_it.data ()->y (); + } + else { + ymin = ymax; //new bottom + } + //next point + ymax = left_it.data_relative (1)->y (); + if (right_it.data_relative (1)->y () < ymax) + //least step forward + ymax = right_it.data_relative (1)->y (); + } +} + + +/********************************************************************** + * BLOCK_LINE_IT::get_line + * + * Get the the start and width of a line in the block. + **********************************************************************/ + +inT16 BLOCK_LINE_IT::get_line( //get a line + inT16 y, //line to get + inT16 &xext //output extent + ) { + ICOORD bleft; //bounding box + ICOORD tright; //of block & rect + + //get block box + block->bounding_box (bleft, tright); + if (y < bleft.y () || y >= tright.y ()) { + // block->print(stderr,FALSE); + BADBLOCKLINE.error ("BLOCK_LINE_IT::get_line", ABORT, "Y=%d", y); + } + + //get rectangle box + rect_it.bounding_box (bleft, tright); + //inside rectangle + if (y >= bleft.y () && y < tright.y ()) { + //width of line + xext = tright.x () - bleft.x (); + return bleft.x (); //start of line + } + for (rect_it.start_block (); !rect_it.cycled_rects (); rect_it.forward ()) { + //get rectangle box + rect_it.bounding_box (bleft, tright); + //inside rectangle + if (y >= bleft.y () && y < tright.y ()) { + //width of line + xext = tright.x () - bleft.x (); + return bleft.x (); //start of line + } + } + LOSTBLOCKLINE.error ("BLOCK_LINE_IT::get_line", ABORT, "Y=%d", y); + return 0; //dummy to stop warning +} diff --git a/3rdparty/hgOCR/include/ccstruct/pdblock.h b/3rdparty/hgOCR/include/ccstruct/pdblock.h new file mode 100644 index 00000000..cf29b782 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/pdblock.h @@ -0,0 +1,175 @@ +/********************************************************************** + * File: pdblock.h (Formerly pdblk.h) + * Description: Page block class definition. + * Author: Ray Smith + * Created: Thu Mar 14 17:32:01 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef PDBLOCK_H +#define PDBLOCK_H + +#include "clst.h" +#include "strngs.h" +#include "polyblk.h" + +class DLLSYM PDBLK; //forward decl +struct Pix; + +CLISTIZEH (PDBLK) +///page block +class PDBLK { + friend class BLOCK_RECT_IT; //< block iterator + + public: + /// empty constructor + PDBLK() { + hand_poly = NULL; + index_ = 0; + } + /// simple constructor + PDBLK(inT16 xmin, //< bottom left + inT16 ymin, + inT16 xmax, //< top right + inT16 ymax); + + /// set vertex lists + ///@param left list of left vertices + ///@param right list of right vertices + void set_sides(ICOORDELT_LIST *left, ICOORDELT_LIST *right); + + /// destructor + ~PDBLK() { delete hand_poly; } + + POLY_BLOCK *poly_block() const { return hand_poly; } + /// set the poly block + void set_poly_block(POLY_BLOCK *blk) { hand_poly = blk; } + /// get box + void bounding_box(ICOORD &bottom_left, // bottom left + ICOORD &top_right) const { // topright + bottom_left = box.botleft(); + top_right = box.topright(); + } + /// get real box + const TBOX &bounding_box() const { return box; } + + int index() const { return index_; } + void set_index(int value) { index_ = value; } + + /// is pt inside block + BOOL8 contains(ICOORD pt); + + /// reposition block + void move(const ICOORD vec); // by vector + + // Returns a binary Pix mask with a 1 pixel for every pixel within the + // block. Rotates the coordinate system by rerotation prior to rendering. + // If not NULL, mask_box is filled with the position box of the returned + // mask image. + Pix *render_mask(const FCOORD &rerotation, TBOX *mask_box); + +#ifndef GRAPHICS_DISABLED + /// draw histogram + ///@param window window to draw in + ///@param serial serial number + ///@param colour colour to draw in + void plot(ScrollView *window, inT32 serial, ScrollView::Color colour); +#endif // GRAPHICS_DISABLED + + /// assignment + ///@param source from this + PDBLK &operator=(const PDBLK &source); + + protected: + POLY_BLOCK *hand_poly; //< weird as well + ICOORDELT_LIST leftside; //< left side vertices + ICOORDELT_LIST rightside; //< right side vertices + TBOX box; //< bounding box + int index_; //< Serial number of this block. +}; + +class DLLSYM BLOCK_RECT_IT //rectangle iterator +{ + public: + ///constructor + ///@param blkptr block to iterate + BLOCK_RECT_IT(PDBLK *blkptr); + + ///start (new) block + void set_to_block ( + PDBLK * blkptr); //block to iterate + + ///start iteration + void start_block(); + + ///next rectangle + void forward(); + + ///test end + BOOL8 cycled_rects() { + return left_it.cycled_list () && right_it.cycled_list (); + } + + ///current rectangle + ///@param bleft bottom left + ///@param tright top right + void bounding_box(ICOORD &bleft, + ICOORD &tright) { + //bottom left + bleft = ICOORD (left_it.data ()->x (), ymin); + //top right + tright = ICOORD (right_it.data ()->x (), ymax); + } + + private: + inT16 ymin; //< bottom of rectangle + inT16 ymax; //< top of rectangle + PDBLK *block; //< block to iterate + ICOORDELT_IT left_it; //< boundary iterators + ICOORDELT_IT right_it; +}; + +///rectangle iterator +class DLLSYM BLOCK_LINE_IT +{ + public: + ///constructor + ///@param blkptr from block + BLOCK_LINE_IT (PDBLK * blkptr) + :rect_it (blkptr) { + block = blkptr; //remember block + } + + ///start (new) block + ///@param blkptr block to start + void set_to_block (PDBLK * blkptr) { + block = blkptr; //remember block + //set iterator + rect_it.set_to_block (blkptr); + } + + ///get a line + ///@param y line to get + ///@param xext output extent + inT16 get_line(inT16 y, + inT16 &xext); + + private: + PDBLK * block; //< block to iterate + BLOCK_RECT_IT rect_it; //< rectangle iterator +}; + +int decreasing_top_order(const void *row1, + const void *row2); +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/points.cpp b/3rdparty/hgOCR/include/ccstruct/points.cpp new file mode 100644 index 00000000..6569fba4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/points.cpp @@ -0,0 +1,145 @@ +/********************************************************************** + * File: points.c (Formerly coords.c) + * Description: Member functions for coordinate classes. + * Author: Ray Smith + * Created: Fri Mar 15 08:58:17 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifdef _MSC_VER +#define _USE_MATH_DEFINES +#endif // _MSC_VER + +#include +#include "helpers.h" +#include "ndminx.h" +#include "serialis.h" +#include "points.h" + +ELISTIZE (ICOORDELT) //turn to list +bool FCOORD::normalise() { //Convert to unit vec + float len = length (); + + if (len < 0.0000000001) { + return false; + } + xcoord /= len; + ycoord /= len; + return true; +} + +// Set from the given x,y, shrinking the vector to fit if needed. +void ICOORD::set_with_shrink(int x, int y) { + // Fit the vector into an ICOORD, which is 16 bit. + int factor = 1; + int max_extent = MAX(abs(x), abs(y)); + if (max_extent > MAX_INT16) + factor = max_extent / MAX_INT16 + 1; + xcoord = x / factor; + ycoord = y / factor; +} + +// The fortran/basic sgn function returns -1, 0, 1 if x < 0, x == 0, x > 0 +// respectively. +static int sign(int x) { + if (x < 0) + return -1; + else + return x > 0 ? 1 : 0; +} + +// Writes to the given file. Returns false in case of error. +bool ICOORD::Serialize(FILE* fp) const { + if (fwrite(&xcoord, sizeof(xcoord), 1, fp) != 1) return false; + if (fwrite(&ycoord, sizeof(ycoord), 1, fp) != 1) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool ICOORD::DeSerialize(bool swap, FILE* fp) { + if (fread(&xcoord, sizeof(xcoord), 1, fp) != 1) return false; + if (fread(&ycoord, sizeof(ycoord), 1, fp) != 1) return false; + if (swap) { + ReverseN(&xcoord, sizeof(xcoord)); + ReverseN(&ycoord, sizeof(ycoord)); + } + return true; +} + +// Setup for iterating over the pixels in a vector by the well-known +// Bresenham rendering algorithm. +// Starting with major/2 in the accumulator, on each step add major_step, +// and then add minor to the accumulator. When the accumulator >= major +// subtract major and step a minor step. + +void ICOORD::setup_render(ICOORD* major_step, ICOORD* minor_step, + int* major, int* minor) const { + int abs_x = abs(xcoord); + int abs_y = abs(ycoord); + if (abs_x >= abs_y) { + // X-direction is major. + major_step->xcoord = sign(xcoord); + major_step->ycoord = 0; + minor_step->xcoord = 0; + minor_step->ycoord = sign(ycoord); + *major = abs_x; + *minor = abs_y; + } else { + // Y-direction is major. + major_step->xcoord = 0; + major_step->ycoord = sign(ycoord); + minor_step->xcoord = sign(xcoord); + minor_step->ycoord = 0; + *major = abs_y; + *minor = abs_x; + } +} + +// Returns the standard feature direction corresponding to this. +// See binary_angle_plus_pi below for a description of the direction. +uinT8 FCOORD::to_direction() const { + return binary_angle_plus_pi(angle()); +} +// Sets this with a unit vector in the given standard feature direction. +void FCOORD::from_direction(uinT8 direction) { + double radians = angle_from_direction(direction); + xcoord = cos(radians); + ycoord = sin(radians); +} + +// Converts an angle in radians (from ICOORD::angle or FCOORD::angle) to a +// standard feature direction as an unsigned angle in 256ths of a circle +// measured anticlockwise from (-1, 0). +uinT8 FCOORD::binary_angle_plus_pi(double radians) { + return Modulo(IntCastRounded((radians + M_PI) * 128.0 / M_PI), 256); +} +// Inverse of binary_angle_plus_pi returns an angle in radians for the +// given standard feature direction. +double FCOORD::angle_from_direction(uinT8 direction) { + return direction * M_PI / 128.0 - M_PI; +} + +// Returns the point on the given line nearest to this, ie the point such +// that the vector point->this is perpendicular to the line. +// The line is defined as a line_point and a dir_vector for its direction. +FCOORD FCOORD::nearest_pt_on_line(const FCOORD& line_point, + const FCOORD& dir_vector) const { + FCOORD point_vector(*this - line_point); + // The dot product (%) is |dir_vector||point_vector|cos theta, so dividing by + // the square of the length of dir_vector gives us the fraction of dir_vector + // to add to line1 to get the appropriate point, so + // result = line1 + lambda dir_vector. + double lambda = point_vector % dir_vector / dir_vector.sqlength(); + return line_point + (dir_vector * lambda); +} diff --git a/3rdparty/hgOCR/include/ccstruct/points.h b/3rdparty/hgOCR/include/ccstruct/points.h new file mode 100644 index 00000000..33e07328 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/points.h @@ -0,0 +1,323 @@ +/********************************************************************** + * File: points.h (Formerly coords.h) + * Description: Coordinate class definitions. + * Author: Ray Smith + * Created: Fri Mar 15 08:32:45 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef POINTS_H +#define POINTS_H + +#include +#include +#include "elst.h" + +class FCOORD; + +///integer coordinate +class ICOORD +{ + friend class FCOORD; + + public: + ///empty constructor + ICOORD() { + xcoord = ycoord = 0; //default zero + } + ///constructor + ///@param xin x value + ///@param yin y value + ICOORD(inT16 xin, + inT16 yin) { + xcoord = xin; + ycoord = yin; + } + ///destructor + ~ICOORD () { + } + + ///access function + inT16 x() const { + return xcoord; + } + ///access_function + inT16 y() const { + return ycoord; + } + + ///rewrite function + void set_x(inT16 xin) { + xcoord = xin; //write new value + } + ///rewrite function + void set_y(inT16 yin) { //value to set + ycoord = yin; + } + + /// Set from the given x,y, shrinking the vector to fit if needed. + void set_with_shrink(int x, int y); + + ///find sq length + float sqlength() const { + return (float) (xcoord * xcoord + ycoord * ycoord); + } + + ///find length + float length() const { + return (float) sqrt (sqlength ()); + } + + ///sq dist between pts + float pt_to_pt_sqdist(const ICOORD &pt) const { + ICOORD gap; + + gap.xcoord = xcoord - pt.xcoord; + gap.ycoord = ycoord - pt.ycoord; + return gap.sqlength (); + } + + ///Distance between pts + float pt_to_pt_dist(const ICOORD &pt) const { + return (float) sqrt (pt_to_pt_sqdist (pt)); + } + + ///find angle + float angle() const { + return (float) atan2 ((double) ycoord, (double) xcoord); + } + + ///test equality + BOOL8 operator== (const ICOORD & other) const { + return xcoord == other.xcoord && ycoord == other.ycoord; + } + ///test inequality + BOOL8 operator!= (const ICOORD & other) const { + return xcoord != other.xcoord || ycoord != other.ycoord; + } + ///rotate 90 deg anti + friend ICOORD operator! (const ICOORD &); + ///unary minus + friend ICOORD operator- (const ICOORD &); + ///add + friend ICOORD operator+ (const ICOORD &, const ICOORD &); + ///add + friend ICOORD & operator+= (ICOORD &, const ICOORD &); + ///subtract + friend ICOORD operator- (const ICOORD &, const ICOORD &); + ///subtract + friend ICOORD & operator-= (ICOORD &, const ICOORD &); + ///scalar product + friend inT32 operator% (const ICOORD &, const ICOORD &); + ///cross product + friend inT32 operator *(const ICOORD &, + const ICOORD &); + ///multiply + friend ICOORD operator *(const ICOORD &, + inT16); + ///multiply + friend ICOORD operator *(inT16, + const ICOORD &); + ///multiply + friend ICOORD & operator*= (ICOORD &, inT16); + ///divide + friend ICOORD operator/ (const ICOORD &, inT16); + ///divide + friend ICOORD & operator/= (ICOORD &, inT16); + ///rotate + ///@param vec by vector + void rotate(const FCOORD& vec); + + /// Setup for iterating over the pixels in a vector by the well-known + /// Bresenham rendering algorithm. + /// Starting with major/2 in the accumulator, on each step move by + /// major_step, and then add minor to the accumulator. When + /// accumulator >= major subtract major and also move by minor_step. + void setup_render(ICOORD* major_step, ICOORD* minor_step, + int* major, int* minor) const; + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + protected: + inT16 xcoord; //< x value + inT16 ycoord; //< y value +}; + +class DLLSYM ICOORDELT:public ELIST_LINK, public ICOORD + //embedded coord list +{ + public: + ///empty constructor + ICOORDELT() { + } + ///constructor from ICOORD + ICOORDELT (ICOORD icoord):ICOORD (icoord) { + } + ///constructor + ///@param xin x value + ///@param yin y value + ICOORDELT(inT16 xin, + inT16 yin) { + xcoord = xin; + ycoord = yin; + } + + static ICOORDELT* deep_copy(const ICOORDELT* src) { + ICOORDELT* elt = new ICOORDELT; + *elt = *src; + return elt; + } + +}; + +ELISTIZEH (ICOORDELT) +class DLLSYM FCOORD +{ + public: + ///empty constructor + FCOORD() { + } + ///constructor + ///@param xvalue x value + ///@param yvalue y value + FCOORD(float xvalue, + float yvalue) { + xcoord = xvalue; //set coords + ycoord = yvalue; + } + FCOORD( //make from ICOORD + ICOORD icoord) { //coords to set + xcoord = icoord.xcoord; + ycoord = icoord.ycoord; + } + + float x() const { //get coords + return xcoord; + } + float y() const { + return ycoord; + } + ///rewrite function + void set_x(float xin) { + xcoord = xin; //write new value + } + ///rewrite function + void set_y(float yin) { //value to set + ycoord = yin; + } + + ///find sq length + float sqlength() const { + return xcoord * xcoord + ycoord * ycoord; + } + + ///find length + float length() const { + return (float) sqrt (sqlength ()); + } + + ///sq dist between pts + float pt_to_pt_sqdist(const FCOORD &pt) const { + FCOORD gap; + + gap.xcoord = xcoord - pt.xcoord; + gap.ycoord = ycoord - pt.ycoord; + return gap.sqlength (); + } + + ///Distance between pts + float pt_to_pt_dist(const FCOORD &pt) const { + return (float) sqrt (pt_to_pt_sqdist (pt)); + } + + ///find angle + float angle() const { + return (float) atan2 (ycoord, xcoord); + } + // Returns the standard feature direction corresponding to this. + // See binary_angle_plus_pi below for a description of the direction. + uinT8 to_direction() const; + // Sets this with a unit vector in the given standard feature direction. + void from_direction(uinT8 direction); + + // Converts an angle in radians (from ICOORD::angle or FCOORD::angle) to a + // standard feature direction as an unsigned angle in 256ths of a circle + // measured anticlockwise from (-1, 0). + static uinT8 binary_angle_plus_pi(double angle); + // Inverse of binary_angle_plus_pi returns an angle in radians for the + // given standard feature direction. + static double angle_from_direction(uinT8 direction); + // Returns the point on the given line nearest to this, ie the point such + // that the vector point->this is perpendicular to the line. + // The line is defined as a line_point and a dir_vector for its direction. + // dir_vector need not be a unit vector. + FCOORD nearest_pt_on_line(const FCOORD& line_point, + const FCOORD& dir_vector) const; + + ///Convert to unit vec + bool normalise(); + + ///test equality + BOOL8 operator== (const FCOORD & other) { + return xcoord == other.xcoord && ycoord == other.ycoord; + } + ///test inequality + BOOL8 operator!= (const FCOORD & other) { + return xcoord != other.xcoord || ycoord != other.ycoord; + } + ///rotate 90 deg anti + friend FCOORD operator! (const FCOORD &); + ///unary minus + friend FCOORD operator- (const FCOORD &); + ///add + friend FCOORD operator+ (const FCOORD &, const FCOORD &); + ///add + friend FCOORD & operator+= (FCOORD &, const FCOORD &); + ///subtract + friend FCOORD operator- (const FCOORD &, const FCOORD &); + ///subtract + friend FCOORD & operator-= (FCOORD &, const FCOORD &); + ///scalar product + friend float operator% (const FCOORD &, const FCOORD &); + ///cross product + friend float operator *(const FCOORD &, const FCOORD &); + ///multiply + friend FCOORD operator *(const FCOORD &, float); + ///multiply + friend FCOORD operator *(float, const FCOORD &); + + ///multiply + friend FCOORD & operator*= (FCOORD &, float); + ///divide + friend FCOORD operator/ (const FCOORD &, float); + ///rotate + ///@param vec by vector + void rotate(const FCOORD vec); + // unrotate - undo a rotate(vec) + // @param vec by vector + void unrotate(const FCOORD &vec); + ///divide + friend FCOORD & operator/= (FCOORD &, float); + + private: + float xcoord; //2 floating coords + float ycoord; +}; + +#include "ipoints.h" /*do inline funcs */ +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/polyaprx.cpp b/3rdparty/hgOCR/include/ccstruct/polyaprx.cpp new file mode 100644 index 00000000..75973495 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/polyaprx.cpp @@ -0,0 +1,584 @@ +/********************************************************************** + * File: polyaprx.cpp (Formerly polygon.c) + * Description: Code for polygonal approximation from old edgeprog. + * Author: Ray Smith + * Created: Thu Nov 25 11:42:04 GMT 1993 + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#ifdef __UNIX__ +#include +#endif +#define FASTEDGELENGTH 256 +#include "polyaprx.h" +#include "params.h" +#include "tprintf.h" + +#define EXTERN + +EXTERN BOOL_VAR(poly_debug, FALSE, "Debug old poly"); +EXTERN BOOL_VAR(poly_wide_objects_better, TRUE, + "More accurate approx on wide things"); + +#define FIXED 4 /*OUTLINE point is fixed */ + +#define RUNLENGTH 1 /*length of run */ + +#define DIR 2 /*direction of run */ + +#define FLAGS 0 + +#define fixed_dist 20 //really an int_variable +#define approx_dist 15 //really an int_variable + +const int par1 = 4500 / (approx_dist * approx_dist); +const int par2 = 6750 / (approx_dist * approx_dist); + + +/********************************************************************** + * tesspoly_outline + * + * Approximate an outline from chain codes form using the old tess algorithm. + * If allow_detailed_fx is true, the EDGEPTs in the returned TBLOB + * contain pointers to the input C_OUTLINEs that enable higher-resolution + * feature extraction that does not use the polygonal approximation. + **********************************************************************/ + + +TESSLINE* ApproximateOutline(bool allow_detailed_fx, C_OUTLINE* c_outline) { + TBOX loop_box; // bounding box + inT32 area; // loop area + EDGEPT stack_edgepts[FASTEDGELENGTH]; // converted path + EDGEPT* edgepts = stack_edgepts; + + // Use heap memory if the stack buffer is not big enough. + if (c_outline->pathlength() > FASTEDGELENGTH) + edgepts = new EDGEPT[c_outline->pathlength()]; + + loop_box = c_outline->bounding_box(); + area = loop_box.height(); + if (!poly_wide_objects_better && loop_box.width() > area) + area = loop_box.width(); + area *= area; + edgesteps_to_edgepts(c_outline, edgepts); + fix2(edgepts, area); + EDGEPT* edgept = poly2(edgepts, area); // 2nd approximation. + EDGEPT* startpt = edgept; + EDGEPT* result = NULL; + EDGEPT* prev_result = NULL; + do { + EDGEPT* new_pt = new EDGEPT; + new_pt->pos = edgept->pos; + new_pt->prev = prev_result; + if (prev_result == NULL) { + result = new_pt; + } else { + prev_result->next = new_pt; + new_pt->prev = prev_result; + } + if (allow_detailed_fx) { + new_pt->src_outline = edgept->src_outline; + new_pt->start_step = edgept->start_step; + new_pt->step_count = edgept->step_count; + } + prev_result = new_pt; + edgept = edgept->next; + } + while (edgept != startpt); + prev_result->next = result; + result->prev = prev_result; + if (edgepts != stack_edgepts) + delete [] edgepts; + return TESSLINE::BuildFromOutlineList(result); +} + + +/********************************************************************** + * edgesteps_to_edgepts + * + * Convert a C_OUTLINE to EDGEPTs. + **********************************************************************/ + +EDGEPT * +edgesteps_to_edgepts ( //convert outline +C_OUTLINE * c_outline, //input +EDGEPT edgepts[] //output is array +) { + inT32 length; //steps in path + ICOORD pos; //current coords + inT32 stepindex; //current step + inT32 stepinc; //increment + inT32 epindex; //current EDGEPT + inT32 count; //repeated steps + ICOORD vec; //for this 8 step + ICOORD prev_vec; + inT8 epdir; //of this step + DIR128 prevdir; //prvious dir + DIR128 dir; //of this step + + pos = c_outline->start_pos (); //start of loop + length = c_outline->pathlength (); + stepindex = 0; + epindex = 0; + prevdir = -1; + count = 0; + int prev_stepindex = 0; + do { + dir = c_outline->step_dir (stepindex); + vec = c_outline->step (stepindex); + if (stepindex < length - 1 + && c_outline->step_dir (stepindex + 1) - dir == -32) { + dir += 128 - 16; + vec += c_outline->step (stepindex + 1); + stepinc = 2; + } + else + stepinc = 1; + if (count == 0) { + prevdir = dir; + prev_vec = vec; + } + if (prevdir.get_dir () != dir.get_dir ()) { + edgepts[epindex].pos.x = pos.x (); + edgepts[epindex].pos.y = pos.y (); + prev_vec *= count; + edgepts[epindex].vec.x = prev_vec.x (); + edgepts[epindex].vec.y = prev_vec.y (); + pos += prev_vec; + edgepts[epindex].flags[RUNLENGTH] = count; + edgepts[epindex].prev = &edgepts[epindex - 1]; + edgepts[epindex].flags[FLAGS] = 0; + edgepts[epindex].next = &edgepts[epindex + 1]; + prevdir += 64; + epdir = (DIR128) 0 - prevdir; + epdir >>= 4; + epdir &= 7; + edgepts[epindex].flags[DIR] = epdir; + edgepts[epindex].src_outline = c_outline; + edgepts[epindex].start_step = prev_stepindex; + edgepts[epindex].step_count = stepindex - prev_stepindex; + epindex++; + prevdir = dir; + prev_vec = vec; + count = 1; + prev_stepindex = stepindex; + } + else + count++; + stepindex += stepinc; + } + while (stepindex < length); + edgepts[epindex].pos.x = pos.x (); + edgepts[epindex].pos.y = pos.y (); + prev_vec *= count; + edgepts[epindex].vec.x = prev_vec.x (); + edgepts[epindex].vec.y = prev_vec.y (); + pos += prev_vec; + edgepts[epindex].flags[RUNLENGTH] = count; + edgepts[epindex].flags[FLAGS] = 0; + edgepts[epindex].src_outline = c_outline; + edgepts[epindex].start_step = prev_stepindex; + edgepts[epindex].step_count = stepindex - prev_stepindex; + edgepts[epindex].prev = &edgepts[epindex - 1]; + edgepts[epindex].next = &edgepts[0]; + prevdir += 64; + epdir = (DIR128) 0 - prevdir; + epdir >>= 4; + epdir &= 7; + edgepts[epindex].flags[DIR] = epdir; + edgepts[0].prev = &edgepts[epindex]; + ASSERT_HOST (pos.x () == c_outline->start_pos ().x () + && pos.y () == c_outline->start_pos ().y ()); + return &edgepts[0]; +} + + +/********************************************************************** + *fix2(start,area) fixes points on the outline according to a trial method* + **********************************************************************/ + +//#pragma OPT_LEVEL 1 /*stop compiler bugs*/ + +void fix2( //polygonal approx + EDGEPT *start, /*loop to approimate */ + int area) { + EDGEPT *edgept; /*current point */ + EDGEPT *edgept1; + EDGEPT *loopstart; /*modified start of loop */ + EDGEPT *linestart; /*start of line segment */ + int dir1, dir2; /*directions of line */ + int sum1, sum2; /*lengths in dir1,dir2 */ + int stopped; /*completed flag */ + int fixed_count; //no of fixed points + int d01, d12, d23, gapmin; + TPOINT d01vec, d12vec, d23vec; + EDGEPT *edgefix, *startfix; + EDGEPT *edgefix0, *edgefix1, *edgefix2, *edgefix3; + + edgept = start; /*start of loop */ + while (((edgept->flags[DIR] - edgept->prev->flags[DIR] + 1) & 7) < 3 + && (dir1 = + (edgept->prev->flags[DIR] - edgept->next->flags[DIR]) & 7) != 2 + && dir1 != 6) + edgept = edgept->next; /*find suitable start */ + loopstart = edgept; /*remember start */ + + stopped = 0; /*not finished yet */ + edgept->flags[FLAGS] |= FIXED; /*fix it */ + do { + linestart = edgept; /*possible start of line */ + dir1 = edgept->flags[DIR]; /*first direction */ + /*length of dir1 */ + sum1 = edgept->flags[RUNLENGTH]; + edgept = edgept->next; + dir2 = edgept->flags[DIR]; /*2nd direction */ + /*length in dir2 */ + sum2 = edgept->flags[RUNLENGTH]; + if (((dir1 - dir2 + 1) & 7) < 3) { + while (edgept->prev->flags[DIR] == edgept->next->flags[DIR]) { + edgept = edgept->next; /*look at next */ + if (edgept->flags[DIR] == dir1) + /*sum lengths */ + sum1 += edgept->flags[RUNLENGTH]; + else + sum2 += edgept->flags[RUNLENGTH]; + } + + if (edgept == loopstart) + stopped = 1; /*finished */ + if (sum2 + sum1 > 2 + && linestart->prev->flags[DIR] == dir2 + && (linestart->prev->flags[RUNLENGTH] > + linestart->flags[RUNLENGTH] || sum2 > sum1)) { + /*start is back one */ + linestart = linestart->prev; + linestart->flags[FLAGS] |= FIXED; + } + + if (((edgept->next->flags[DIR] - edgept->flags[DIR] + 1) & 7) >= 3 + || (edgept->flags[DIR] == dir1 && sum1 >= sum2) + || ((edgept->prev->flags[RUNLENGTH] < edgept->flags[RUNLENGTH] + || (edgept->flags[DIR] == dir2 && sum2 >= sum1)) + && linestart->next != edgept)) + edgept = edgept->next; + } + /*sharp bend */ + edgept->flags[FLAGS] |= FIXED; + } + /*do whole loop */ + while (edgept != loopstart && !stopped); + + edgept = start; + do { + if (((edgept->flags[RUNLENGTH] >= 8) && + (edgept->flags[DIR] != 2) && (edgept->flags[DIR] != 6)) || + ((edgept->flags[RUNLENGTH] >= 8) && + ((edgept->flags[DIR] == 2) || (edgept->flags[DIR] == 6)))) { + edgept->flags[FLAGS] |= FIXED; + edgept1 = edgept->next; + edgept1->flags[FLAGS] |= FIXED; + } + edgept = edgept->next; + } + while (edgept != start); + + edgept = start; + do { + /*single fixed step */ + if (edgept->flags[FLAGS] & FIXED && edgept->flags[RUNLENGTH] == 1 + /*and neighours free */ + && edgept->next->flags[FLAGS] & FIXED && (edgept->prev->flags[FLAGS] & FIXED) == 0 + /*same pair of dirs */ + && (edgept->next->next->flags[FLAGS] & FIXED) == 0 && edgept->prev->flags[DIR] == edgept->next->flags[DIR] && edgept->prev->prev->flags[DIR] == edgept->next->next->flags[DIR] + && ((edgept->prev->flags[DIR] - edgept->flags[DIR] + 1) & 7) < 3) { + /*unfix it */ + edgept->flags[FLAGS] &= ~FIXED; + edgept->next->flags[FLAGS] &= ~FIXED; + } + edgept = edgept->next; /*do all points */ + } + while (edgept != start); /*until finished */ + + stopped = 0; + if (area < 450) + area = 450; + + gapmin = area * fixed_dist * fixed_dist / 44000; + + edgept = start; + fixed_count = 0; + do { + if (edgept->flags[FLAGS] & FIXED) + fixed_count++; + edgept = edgept->next; + } + while (edgept != start); + while ((edgept->flags[FLAGS] & FIXED) == 0) + edgept = edgept->next; + edgefix0 = edgept; + + edgept = edgept->next; + while ((edgept->flags[FLAGS] & FIXED) == 0) + edgept = edgept->next; + edgefix1 = edgept; + + edgept = edgept->next; + while ((edgept->flags[FLAGS] & FIXED) == 0) + edgept = edgept->next; + edgefix2 = edgept; + + edgept = edgept->next; + while ((edgept->flags[FLAGS] & FIXED) == 0) + edgept = edgept->next; + edgefix3 = edgept; + + startfix = edgefix2; + + do { + if (fixed_count <= 3) + break; //already too few + point_diff (d12vec, edgefix1->pos, edgefix2->pos); + d12 = LENGTH (d12vec); + // TODO(rays) investigate this change: + // Only unfix a point if it is part of a low-curvature section + // of outline and the total angle change of the outlines is + // less than 90 degrees, ie the scalar product is positive. + // if (d12 <= gapmin && SCALAR(edgefix0->vec, edgefix2->vec) > 0) { + if (d12 <= gapmin) { + point_diff (d01vec, edgefix0->pos, edgefix1->pos); + d01 = LENGTH (d01vec); + point_diff (d23vec, edgefix2->pos, edgefix3->pos); + d23 = LENGTH (d23vec); + if (d01 > d23) { + edgefix2->flags[FLAGS] &= ~FIXED; + fixed_count--; + } + else { + edgefix1->flags[FLAGS] &= ~FIXED; + fixed_count--; + edgefix1 = edgefix2; + } + } + else { + edgefix0 = edgefix1; + edgefix1 = edgefix2; + } + edgefix2 = edgefix3; + edgept = edgept->next; + while ((edgept->flags[FLAGS] & FIXED) == 0) { + if (edgept == startfix) + stopped = 1; + edgept = edgept->next; + } + edgefix3 = edgept; + edgefix = edgefix2; + } + while ((edgefix != startfix) && (!stopped)); +} + + +//#pragma OPT_LEVEL 2 /*stop compiler bugs*/ + +/********************************************************************** + *poly2(startpt,area,path) applies a second approximation to the outline + *using the points which have been fixed by the first approximation* + **********************************************************************/ + +EDGEPT *poly2( //second poly + EDGEPT *startpt, /*start of loop */ + int area /*area of blob box */ + ) { + EDGEPT *edgept; /*current outline point */ + EDGEPT *loopstart; /*starting point */ + EDGEPT *linestart; /*start of line */ + int edgesum; /*correction count */ + + if (area < 1200) + area = 1200; /*minimum value */ + + loopstart = NULL; /*not found it yet */ + edgept = startpt; /*start of loop */ + + do { + /*current point fixed */ + if (edgept->flags[FLAGS] & FIXED + /*and next not */ + && (edgept->next->flags[FLAGS] & FIXED) == 0) { + loopstart = edgept; /*start of repoly */ + break; + } + edgept = edgept->next; /*next point */ + } + while (edgept != startpt); /*until found or finished */ + + if (loopstart == NULL && (startpt->flags[FLAGS] & FIXED) == 0) { + /*fixed start of loop */ + startpt->flags[FLAGS] |= FIXED; + loopstart = startpt; /*or start of loop */ + } + if (loopstart) { + do { + edgept = loopstart; /*first to do */ + do { + linestart = edgept; + edgesum = 0; /*sum of lengths */ + do { + /*sum lengths */ + edgesum += edgept->flags[RUNLENGTH]; + edgept = edgept->next; /*move on */ + } + while ((edgept->flags[FLAGS] & FIXED) == 0 + && edgept != loopstart && edgesum < 126); + if (poly_debug) + tprintf + ("Poly2:starting at (%d,%d)+%d=(%d,%d),%d to (%d,%d)\n", + linestart->pos.x, linestart->pos.y, linestart->flags[DIR], + linestart->vec.x, linestart->vec.y, edgesum, edgept->pos.x, + edgept->pos.y); + /*reapproximate */ + cutline(linestart, edgept, area); + + while ((edgept->next->flags[FLAGS] & FIXED) + && edgept != loopstart) + edgept = edgept->next; /*look for next non-fixed */ + } + /*do all the loop */ + while (edgept != loopstart); + edgesum = 0; + do { + if (edgept->flags[FLAGS] & FIXED) + edgesum++; + edgept = edgept->next; + } + //count fixed pts + while (edgept != loopstart); + if (edgesum < 3) + area /= 2; //must have 3 pts + } + while (edgesum < 3); + do { + linestart = edgept; + do { + edgept = edgept->next; + } + while ((edgept->flags[FLAGS] & FIXED) == 0); + linestart->next = edgept; + edgept->prev = linestart; + linestart->vec.x = edgept->pos.x - linestart->pos.x; + linestart->vec.y = edgept->pos.y - linestart->pos.y; + } + while (edgept != loopstart); + } + else + edgept = startpt; /*start of loop */ + + loopstart = edgept; /*new start */ + return loopstart; /*correct exit */ +} + + +/********************************************************************** + *cutline(first,last,area) straightens out a line by partitioning + *and joining the ends by a straight line* + **********************************************************************/ + +void cutline( //recursive refine + EDGEPT *first, /*ends of line */ + EDGEPT *last, + int area /*area of object */ + ) { + EDGEPT *edge; /*current edge */ + TPOINT vecsum; /*vector sum */ + int vlen; /*approx length of vecsum */ + TPOINT vec; /*accumulated vector */ + EDGEPT *maxpoint; /*worst point */ + int maxperp; /*max deviation */ + int perp; /*perp distance */ + int ptcount; /*no of points */ + int squaresum; /*sum of perps */ + + edge = first; /*start of line */ + if (edge->next == last) + return; /*simple line */ + + /*vector sum */ + vecsum.x = last->pos.x - edge->pos.x; + vecsum.y = last->pos.y - edge->pos.y; + if (vecsum.x == 0 && vecsum.y == 0) { + /*special case */ + vecsum.x = -edge->prev->vec.x; + vecsum.y = -edge->prev->vec.y; + } + /*absolute value */ + vlen = vecsum.x > 0 ? vecsum.x : -vecsum.x; + if (vecsum.y > vlen) + vlen = vecsum.y; /*maximum */ + else if (-vecsum.y > vlen) + vlen = -vecsum.y; /*absolute value */ + + vec.x = edge->vec.x; /*accumulated vector */ + vec.y = edge->vec.y; + maxperp = 0; /*none yet */ + squaresum = ptcount = 0; + edge = edge->next; /*move to actual point */ + maxpoint = edge; /*in case there isn't one */ + do { + perp = CROSS (vec, vecsum); /*get perp distance */ + if (perp != 0) { + perp *= perp; /*squared deviation */ + } + squaresum += perp; /*sum squares */ + ptcount++; /*count points */ + if (poly_debug) + tprintf ("Cutline:Final perp=%d\n", perp); + if (perp > maxperp) { + maxperp = perp; + maxpoint = edge; /*find greatest deviation */ + } + vec.x += edge->vec.x; /*accumulate vectors */ + vec.y += edge->vec.y; + edge = edge->next; + } + while (edge != last); /*test all line */ + + perp = LENGTH (vecsum); + ASSERT_HOST (perp != 0); + + if (maxperp < 256 * MAX_INT16) { + maxperp <<= 8; + maxperp /= perp; /*true max perp */ + } + else { + maxperp /= perp; + maxperp <<= 8; /*avoid overflow */ + } + if (squaresum < 256 * MAX_INT16) + /*mean squared perp */ + perp = (squaresum << 8) / (perp * ptcount); + else + /*avoid overflow */ + perp = (squaresum / perp << 8) / ptcount; + + if (poly_debug) + tprintf ("Cutline:A=%d, max=%.2f(%.2f%%), msd=%.2f(%.2f%%)\n", + area, maxperp / 256.0, maxperp * 200.0 / area, + perp / 256.0, perp * 300.0 / area); + if (maxperp * par1 >= 10 * area || perp * par2 >= 10 * area || vlen >= 126) { + maxpoint->flags[FLAGS] |= FIXED; + /*partitions */ + cutline(first, maxpoint, area); + cutline(maxpoint, last, area); + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/polyaprx.h b/3rdparty/hgOCR/include/ccstruct/polyaprx.h new file mode 100644 index 00000000..45e3c755 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/polyaprx.h @@ -0,0 +1,44 @@ +/********************************************************************** + * File: polyaprx.h (Formerly polygon.h) + * Description: Code for polygonal approximation from old edgeprog. + * Author: Ray Smith + * Created: Thu Nov 25 11:42:04 GMT 1993 + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef POLYAPRX_H +#define POLYAPRX_H + +#include "blobs.h" +#include "coutln.h" + +// convert a chain-coded input to the old OUTLINE approximation +TESSLINE* ApproximateOutline(bool allow_detailed_fx, C_OUTLINE *c_outline); +EDGEPT *edgesteps_to_edgepts ( //convert outline +C_OUTLINE * c_outline, //input +EDGEPT edgepts[] //output is array +); +void fix2( //polygonal approx + EDGEPT *start, /*loop to approimate */ + int area); +EDGEPT *poly2( //second poly + EDGEPT *startpt, /*start of loop */ + int area /*area of blob box */ + ); +void cutline( //recursive refine + EDGEPT *first, /*ends of line */ + EDGEPT *last, + int area /*area of object */ + ); +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/polyblk.cpp b/3rdparty/hgOCR/include/ccstruct/polyblk.cpp new file mode 100644 index 00000000..b5ca2e12 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/polyblk.cpp @@ -0,0 +1,421 @@ +/********************************************************************** + * File: polyblk.c (Formerly poly_block.c) + * Description: Polygonal blocks + * Author: Sheelagh Lloyd? + * Created: + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include +#include "elst.h" +#include "polyblk.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#define PBLOCK_LABEL_SIZE 150 +#define INTERSECTING MAX_INT16 + +int lessthan(const void *first, const void *second); + +POLY_BLOCK::POLY_BLOCK(ICOORDELT_LIST *points, PolyBlockType t) { + ICOORDELT_IT v = &vertices; + + vertices.clear(); + v.move_to_first(); + v.add_list_before(points); + compute_bb(); + type = t; +} + +// Initialize from box coordinates. +POLY_BLOCK::POLY_BLOCK(const TBOX& box, PolyBlockType t) { + vertices.clear(); + ICOORDELT_IT v = &vertices; + v.move_to_first(); + v.add_to_end(new ICOORDELT(box.left(), box.top())); + v.add_to_end(new ICOORDELT(box.left(), box.bottom())); + v.add_to_end(new ICOORDELT(box.right(), box.bottom())); + v.add_to_end(new ICOORDELT(box.right(), box.top())); + compute_bb(); + type = t; +} + +/** + * @name POLY_BLOCK::compute_bb + * + * Compute the bounding box from the outline points. + */ + +void POLY_BLOCK::compute_bb() { //constructor + ICOORD ibl, itr; //integer bb + ICOORD botleft; //bounding box + ICOORD topright; + ICOORD pos; //current pos; + ICOORDELT_IT pts = &vertices; //iterator + + botleft = *pts.data (); + topright = botleft; + do { + pos = *pts.data (); + if (pos.x () < botleft.x ()) + //get bounding box + botleft = ICOORD (pos.x (), botleft.y ()); + if (pos.y () < botleft.y ()) + botleft = ICOORD (botleft.x (), pos.y ()); + if (pos.x () > topright.x ()) + topright = ICOORD (pos.x (), topright.y ()); + if (pos.y () > topright.y ()) + topright = ICOORD (topright.x (), pos.y ()); + pts.forward (); + } + while (!pts.at_first ()); + ibl = ICOORD (botleft.x (), botleft.y ()); + itr = ICOORD (topright.x (), topright.y ()); + box = TBOX (ibl, itr); +} + + +/** + * @name POLY_BLOCK::winding_number + * + * Return the winding number of the outline around the given point. + * @param point point to wind around + */ + +inT16 POLY_BLOCK::winding_number(const ICOORD &point) { + inT16 count; //winding count + ICOORD pt; //current point + ICOORD vec; //point to current point + ICOORD vvec; //current point to next point + inT32 cross; //cross product + ICOORDELT_IT it = &vertices; //iterator + + count = 0; + do { + pt = *it.data (); + vec = pt - point; + vvec = *it.data_relative (1) - pt; + //crossing the line + if (vec.y () <= 0 && vec.y () + vvec.y () > 0) { + cross = vec * vvec; //cross product + if (cross > 0) + count++; //crossing right half + else if (cross == 0) + return INTERSECTING; //going through point + } + else if (vec.y () > 0 && vec.y () + vvec.y () <= 0) { + cross = vec * vvec; + if (cross < 0) + count--; //crossing back + else if (cross == 0) + return INTERSECTING; //illegal + } + else if (vec.y () == 0 && vec.x () == 0) + return INTERSECTING; + it.forward (); + } + while (!it.at_first ()); + return count; //winding number +} + + +/// @return true if other is inside this. +bool POLY_BLOCK::contains(POLY_BLOCK *other) { + inT16 count; // winding count + ICOORDELT_IT it = &vertices; // iterator + ICOORD vertex; + + if (!box.overlap (*(other->bounding_box ()))) + return false; // can't be contained + + /* check that no vertex of this is inside other */ + + do { + vertex = *it.data (); + // get winding number + count = other->winding_number (vertex); + if (count != INTERSECTING) + if (count != 0) + return false; + it.forward (); + } + while (!it.at_first ()); + + /* check that all vertices of other are inside this */ + + //switch lists + it.set_to_list (other->points ()); + do { + vertex = *it.data (); + //try other way round + count = winding_number (vertex); + if (count != INTERSECTING) + if (count == 0) + return false; + it.forward (); + } + while (!it.at_first ()); + return true; +} + + +/** + * @name POLY_BLOCK::rotate + * + * Rotate the POLY_BLOCK. + * @param rotation cos, sin of angle + */ + +void POLY_BLOCK::rotate(FCOORD rotation) { + FCOORD pos; //current pos; + ICOORDELT *pt; //current point + ICOORDELT_IT pts = &vertices; //iterator + + do { + pt = pts.data (); + pos.set_x (pt->x ()); + pos.set_y (pt->y ()); + pos.rotate (rotation); + pt->set_x ((inT16) (floor (pos.x () + 0.5))); + pt->set_y ((inT16) (floor (pos.y () + 0.5))); + pts.forward (); + } + while (!pts.at_first ()); + compute_bb(); +} + +/** + * @name POLY_BLOCK::reflect_in_y_axis + * + * Reflect the coords of the polygon in the y-axis. (Flip the sign of x.) + */ + +void POLY_BLOCK::reflect_in_y_axis() { + ICOORDELT *pt; // current point + ICOORDELT_IT pts = &vertices; // Iterator. + + do { + pt = pts.data(); + pt->set_x(-pt->x()); + pts.forward(); + } + while (!pts.at_first()); + compute_bb(); +} + + +/** + * POLY_BLOCK::move + * + * Move the POLY_BLOCK. + * @param shift x,y translation vector + */ + +void POLY_BLOCK::move(ICOORD shift) { + ICOORDELT *pt; //current point + ICOORDELT_IT pts = &vertices; //iterator + + do { + pt = pts.data (); + *pt += shift; + pts.forward (); + } + while (!pts.at_first ()); + compute_bb(); +} + + +#ifndef GRAPHICS_DISABLED +void POLY_BLOCK::plot(ScrollView* window, inT32 num) { + ICOORDELT_IT v = &vertices; + + window->Pen(ColorForPolyBlockType(type)); + + v.move_to_first (); + + if (num > 0) { + window->TextAttributes("Times", 80, false, false, false); + char temp_buff[34]; + #if defined(__UNIX__) || defined(MINGW) + sprintf(temp_buff, INT32FORMAT, num); + #else + ltoa (num, temp_buff, 10); + #endif + window->Text(v.data ()->x (), v.data ()->y (), temp_buff); + } + + window->SetCursor(v.data ()->x (), v.data ()->y ()); + for (v.mark_cycle_pt (); !v.cycled_list (); v.forward ()) { + window->DrawTo(v.data ()->x (), v.data ()->y ()); + } + v.move_to_first (); + window->DrawTo(v.data ()->x (), v.data ()->y ()); +} + + +void POLY_BLOCK::fill(ScrollView* window, ScrollView::Color colour) { + inT16 y; + inT16 width; + PB_LINE_IT *lines; + ICOORDELT_LIST *segments; + ICOORDELT_IT s_it; + + lines = new PB_LINE_IT (this); + window->Pen(colour); + + for (y = this->bounding_box ()->bottom (); + y <= this->bounding_box ()->top (); y++) { + segments = lines->get_line (y); + if (!segments->empty ()) { + s_it.set_to_list (segments); + for (s_it.mark_cycle_pt (); !s_it.cycled_list (); s_it.forward ()) { + // Note different use of ICOORDELT, x coord is x coord of pixel + // at the start of line segment, y coord is length of line segment + // Last pixel is start pixel + length. + width = s_it.data ()->y (); + window->SetCursor(s_it.data ()->x (), y); + window->DrawTo(s_it.data ()->x () + (float) width, y); + } + } + } + + delete lines; +} +#endif + + +/// @return true if the polygons of other and this overlap. +bool POLY_BLOCK::overlap(POLY_BLOCK *other) { + inT16 count; // winding count + ICOORDELT_IT it = &vertices; // iterator + ICOORD vertex; + + if (!box.overlap(*(other->bounding_box()))) + return false; // can't be any overlap. + + /* see if a vertex of this is inside other */ + + do { + vertex = *it.data (); + // get winding number + count = other->winding_number (vertex); + if (count != INTERSECTING) + if (count != 0) + return true; + it.forward (); + } + while (!it.at_first ()); + + /* see if a vertex of other is inside this */ + + // switch lists + it.set_to_list (other->points ()); + do { + vertex = *it.data(); + // try other way round + count = winding_number (vertex); + if (count != INTERSECTING) + if (count != 0) + return true; + it.forward (); + } + while (!it.at_first ()); + return false; +} + + +ICOORDELT_LIST *PB_LINE_IT::get_line(inT16 y) { + ICOORDELT_IT v, r; + ICOORDELT_LIST *result; + ICOORDELT *x, *current, *previous; + float fy, fx; + + fy = (float) (y + 0.5); + result = new ICOORDELT_LIST (); + r.set_to_list (result); + v.set_to_list (block->points ()); + + for (v.mark_cycle_pt (); !v.cycled_list (); v.forward ()) { + if (((v.data_relative (-1)->y () > y) && (v.data ()->y () <= y)) + || ((v.data_relative (-1)->y () <= y) && (v.data ()->y () > y))) { + previous = v.data_relative (-1); + current = v.data (); + fx = (float) (0.5 + previous->x () + + (current->x () - previous->x ()) * (fy - + previous->y ()) / + (current->y () - previous->y ())); + x = new ICOORDELT ((inT16) fx, 0); + r.add_to_end (x); + } + } + + if (!r.empty ()) { + r.sort (lessthan); + for (r.mark_cycle_pt (); !r.cycled_list (); r.forward ()) + x = r.data (); + for (r.mark_cycle_pt (); !r.cycled_list (); r.forward ()) { + r.data ()->set_y (r.data_relative (1)->x () - r.data ()->x ()); + r.forward (); + delete (r.extract ()); + } + } + + return result; +} + + +int lessthan(const void *first, const void *second) { + ICOORDELT *p1 = (*(ICOORDELT **) first); + ICOORDELT *p2 = (*(ICOORDELT **) second); + + if (p1->x () < p2->x ()) + return (-1); + else if (p1->x () > p2->x ()) + return (1); + else + return (0); +} + +#ifndef GRAPHICS_DISABLED +/// Returns a color to draw the given type. +ScrollView::Color POLY_BLOCK::ColorForPolyBlockType(PolyBlockType type) { + // Keep kPBColors in sync with PolyBlockType. + const ScrollView::Color kPBColors[PT_COUNT] = { + ScrollView::WHITE, // Type is not yet known. Keep as the 1st element. + ScrollView::BLUE, // Text that lives inside a column. + ScrollView::CYAN, // Text that spans more than one column. + ScrollView::MEDIUM_BLUE, // Text that is in a cross-column pull-out region. + ScrollView::AQUAMARINE, // Partition belonging to an equation region. + ScrollView::SKY_BLUE, // Partition belonging to an inline equation region. + ScrollView::MAGENTA, // Partition belonging to a table region. + ScrollView::GREEN, // Text-line runs vertically. + ScrollView::LIGHT_BLUE, // Text that belongs to an image. + ScrollView::RED, // Image that lives inside a column. + ScrollView::YELLOW, // Image that spans more than one column. + ScrollView::ORANGE, // Image in a cross-column pull-out region. + ScrollView::BROWN, // Horizontal Line. + ScrollView::DARK_GREEN, // Vertical Line. + ScrollView::GREY // Lies outside of any column. + }; + if (type >= 0 && type < PT_COUNT) { + return kPBColors[type]; + } + return ScrollView::WHITE; +} +#endif // GRAPHICS_DISABLED diff --git a/3rdparty/hgOCR/include/ccstruct/polyblk.h b/3rdparty/hgOCR/include/ccstruct/polyblk.h new file mode 100644 index 00000000..edfaac78 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/polyblk.h @@ -0,0 +1,113 @@ +/********************************************************************** + * File: polyblk.h (Formerly poly_block.h) + * Description: Polygonal blocks + * Author: Sheelagh Lloyd? + * Created: + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ +#ifndef POLYBLK_H +#define POLYBLK_H + +#include "publictypes.h" +#include "elst.h" +#include "points.h" +#include "rect.h" +#include "scrollview.h" + +class DLLSYM POLY_BLOCK { + public: + POLY_BLOCK() { + } + // Initialize from box coordinates. + POLY_BLOCK(const TBOX& box, PolyBlockType type); + POLY_BLOCK(ICOORDELT_LIST *points, PolyBlockType type); + ~POLY_BLOCK () { + } + + TBOX *bounding_box() { // access function + return &box; + } + + ICOORDELT_LIST *points() { // access function + return &vertices; + } + + void compute_bb(); + + PolyBlockType isA() const { + return type; + } + + bool IsText() const { + return PTIsTextType(type); + } + + // Rotate about the origin by the given rotation. (Analogous to + // multiplying by a complex number. + void rotate(FCOORD rotation); + // Reflect the coords of the polygon in the y-axis. (Flip the sign of x.) + void reflect_in_y_axis(); + // Move by adding shift to all coordinates. + void move(ICOORD shift); + + void plot(ScrollView* window, inT32 num); + + #ifndef GRAPHICS_DISABLED + void fill(ScrollView* window, ScrollView::Color colour); + #endif // GRAPHICS_DISABLED + + // Returns true if other is inside this. + bool contains(POLY_BLOCK *other); + + // Returns true if the polygons of other and this overlap. + bool overlap(POLY_BLOCK *other); + + // Returns the winding number of this around the test_pt. + // Positive for anticlockwise, negative for clockwise, and zero for + // test_pt outside this. + inT16 winding_number(const ICOORD &test_pt); + + #ifndef GRAPHICS_DISABLED + // Static utility functions to handle the PolyBlockType. + // Returns a color to draw the given type. + static ScrollView::Color ColorForPolyBlockType(PolyBlockType type); + #endif // GRAPHICS_DISABLED + + private: + ICOORDELT_LIST vertices; // vertices + TBOX box; // bounding box + PolyBlockType type; // Type of this region. +}; + +// Class to iterate the scanlines of a polygon. +class DLLSYM PB_LINE_IT { + public: + PB_LINE_IT(POLY_BLOCK *blkptr) { + block = blkptr; + } + + void set_to_block(POLY_BLOCK * blkptr) { + block = blkptr; + } + + // Returns a list of runs of pixels for the given y coord. + // Each element of the returned list is the start (x) and extent(y) of + // a run inside the region. + // Delete the returned list after use. + ICOORDELT_LIST *get_line(inT16 y); + + private: + POLY_BLOCK * block; +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/publictypes.cpp b/3rdparty/hgOCR/include/ccstruct/publictypes.cpp new file mode 100644 index 00000000..47a18009 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/publictypes.cpp @@ -0,0 +1,40 @@ +/////////////////////////////////////////////////////////////////////// +// File: publictypes.cpp +// Description: Types used in both the API and internally +// Author: Ray Smith +// Created: Wed Mar 03 11:17:09 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "publictypes.h" + +/** String name for each block type. Keep in sync with PolyBlockType. */ +const char* kPolyBlockNames[] = { + "Unknown", + "Flowing Text", + "Heading Text", + "Pullout Text", + "Equation", + "Inline Equation", + "Table", + "Vertical Text", + "Caption Text", + "Flowing Image", + "Heading Image", + "Pullout Image", + "Horizontal Line", + "Vertical Line", + "Noise", + "" // End marker for testing that sizes match. +}; diff --git a/3rdparty/hgOCR/include/ccstruct/publictypes.h b/3rdparty/hgOCR/include/ccstruct/publictypes.h new file mode 100644 index 00000000..3835a26a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/publictypes.h @@ -0,0 +1,271 @@ +/////////////////////////////////////////////////////////////////////// +// File: publictypes.h +// Description: Types used in both the API and internally +// Author: Ray Smith +// Created: Wed Mar 03 09:22:53 PST 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCSTRUCT_PUBLICTYPES_H__ +#define TESSERACT_CCSTRUCT_PUBLICTYPES_H__ + +// This file contains types that are used both by the API and internally +// to Tesseract. In order to decouple the API from Tesseract and prevent cyclic +// dependencies, THIS FILE SHOULD NOT DEPEND ON ANY OTHER PART OF TESSERACT. +// Restated: It is OK for low-level Tesseract files to include publictypes.h, +// but not for the low-level tesseract code to include top-level API code. +// This file should not use other Tesseract types, as that would drag +// their includes into the API-level. +// API-level code should include apitypes.h in preference to this file. + +/** Number of printers' points in an inch. The unit of the pointsize return. */ +const int kPointsPerInch = 72; + +/** + * Possible types for a POLY_BLOCK or ColPartition. + * Must be kept in sync with kPBColors in polyblk.cpp and PTIs*Type functions + * below, as well as kPolyBlockNames in publictypes.cpp. + * Used extensively by ColPartition, and POLY_BLOCK. +*/ +enum PolyBlockType { + PT_UNKNOWN, // Type is not yet known. Keep as the first element. + PT_FLOWING_TEXT, // Text that lives inside a column. + PT_HEADING_TEXT, // Text that spans more than one column. + PT_PULLOUT_TEXT, // Text that is in a cross-column pull-out region. + PT_EQUATION, // Partition belonging to an equation region. + PT_INLINE_EQUATION, // Partition has inline equation. + PT_TABLE, // Partition belonging to a table region. + PT_VERTICAL_TEXT, // Text-line runs vertically. + PT_CAPTION_TEXT, // Text that belongs to an image. + PT_FLOWING_IMAGE, // Image that lives inside a column. + PT_HEADING_IMAGE, // Image that spans more than one column. + PT_PULLOUT_IMAGE, // Image that is in a cross-column pull-out region. + PT_HORZ_LINE, // Horizontal Line. + PT_VERT_LINE, // Vertical Line. + PT_NOISE, // Lies outside of any column. + PT_COUNT +}; + +/** Returns true if PolyBlockType is of horizontal line type */ +inline bool PTIsLineType(PolyBlockType type) { + return type == PT_HORZ_LINE || type == PT_VERT_LINE; +} +/** Returns true if PolyBlockType is of image type */ +inline bool PTIsImageType(PolyBlockType type) { + return type == PT_FLOWING_IMAGE || type == PT_HEADING_IMAGE || + type == PT_PULLOUT_IMAGE; +} +/** Returns true if PolyBlockType is of text type */ +inline bool PTIsTextType(PolyBlockType type) { + return type == PT_FLOWING_TEXT || type == PT_HEADING_TEXT || + type == PT_PULLOUT_TEXT || type == PT_TABLE || + type == PT_VERTICAL_TEXT || type == PT_CAPTION_TEXT || + type == PT_INLINE_EQUATION; +} +// Returns true if PolyBlockType is of pullout(inter-column) type +inline bool PTIsPulloutType(PolyBlockType type) { + return type == PT_PULLOUT_IMAGE || type == PT_PULLOUT_TEXT; +} + +/** String name for each block type. Keep in sync with PolyBlockType. */ +extern const char* kPolyBlockNames[]; + +namespace tesseract { + /** + * +------------------+ Orientation Example: + * | 1 Aaaa Aaaa Aaaa | ==================== + * | Aaa aa aaa aa | To left is a diagram of some (1) English and + * | aaaaaa A aa aaa. | (2) Chinese text and a (3) photo credit. + * | 2 | + * | ####### c c C | Upright Latin characters are represented as A and a. + * | ####### c c c | '<' represents a latin character rotated + * | < ####### c c c | anti-clockwise 90 degrees. + * | < ####### c c | + * | < ####### . c | Upright Chinese characters are represented C and c. + * | 3 ####### c | + * +------------------+ NOTA BENE: enum values here should match goodoc.proto + + * If you orient your head so that "up" aligns with Orientation, + * then the characters will appear "right side up" and readable. + * + * In the example above, both the English and Chinese paragraphs are oriented + * so their "up" is the top of the page (page up). The photo credit is read + * with one's head turned leftward ("up" is to page left). + * + * The values of this enum match the convention of Tesseract's osdetect.h + */ + enum Orientation { + ORIENTATION_PAGE_UP = 0, + ORIENTATION_PAGE_RIGHT = 1, + ORIENTATION_PAGE_DOWN = 2, + ORIENTATION_PAGE_LEFT = 3, + }; + + /** + * The grapheme clusters within a line of text are laid out logically + * in this direction, judged when looking at the text line rotated so that + * its Orientation is "page up". + * + * For English text, the writing direction is left-to-right. For the + * Chinese text in the above example, the writing direction is top-to-bottom. + */ + enum WritingDirection { + WRITING_DIRECTION_LEFT_TO_RIGHT = 0, + WRITING_DIRECTION_RIGHT_TO_LEFT = 1, + WRITING_DIRECTION_TOP_TO_BOTTOM = 2, + }; + + /** + * The text lines are read in the given sequence. + * + * In English, the order is top-to-bottom. + * In Chinese, vertical text lines are read right-to-left. Mongolian is + * written in vertical columns top to bottom like Chinese, but the lines + * order left-to right. + * + * Note that only some combinations make sense. For example, + * WRITING_DIRECTION_LEFT_TO_RIGHT implies TEXTLINE_ORDER_TOP_TO_BOTTOM + */ + enum TextlineOrder { + TEXTLINE_ORDER_LEFT_TO_RIGHT = 0, + TEXTLINE_ORDER_RIGHT_TO_LEFT = 1, + TEXTLINE_ORDER_TOP_TO_BOTTOM = 2, + }; + + /** + * Possible modes for page layout analysis. These *must* be kept in order + * of decreasing amount of layout analysis to be done, except for OSD_ONLY, + * so that the inequality test macros below work. + */ + enum PageSegMode { + PSM_OSD_ONLY, ///< Orientation and script detection only. + PSM_AUTO_OSD, ///< Automatic page segmentation with orientation and + ///< script detection. (OSD) + PSM_AUTO_ONLY, ///< Automatic page segmentation, but no OSD, or OCR. + PSM_AUTO, ///< Fully automatic page segmentation, but no OSD. + PSM_SINGLE_COLUMN, ///< Assume a single column of text of variable sizes. + PSM_SINGLE_BLOCK_VERT_TEXT, ///< Assume a single uniform block of vertically + ///< aligned text. + PSM_SINGLE_BLOCK, ///< Assume a single uniform block of text. (Default.) + PSM_SINGLE_LINE, ///< Treat the image as a single text line. + PSM_SINGLE_WORD, ///< Treat the image as a single word. + PSM_CIRCLE_WORD, ///< Treat the image as a single word in a circle. + PSM_SINGLE_CHAR, ///< Treat the image as a single character. + PSM_SPARSE_TEXT, ///< Find as much text as possible in no particular order. + PSM_SPARSE_TEXT_OSD, ///< Sparse text with orientation and script det. + PSM_RAW_LINE, ///< Treat the image as a single text line, bypassing + ///< hacks that are Tesseract-specific. + + PSM_COUNT ///< Number of enum entries. + }; + + /** + * Inline functions that act on a PageSegMode to determine whether components of + * layout analysis are enabled. + * *Depend critically on the order of elements of PageSegMode.* + * NOTE that arg is an int for compatibility with INT_PARAM. + */ + inline bool PSM_OSD_ENABLED(int pageseg_mode) { + return pageseg_mode <= PSM_AUTO_OSD || pageseg_mode == PSM_SPARSE_TEXT_OSD; + } + inline bool PSM_ORIENTATION_ENABLED(int pageseg_mode) { + return pageseg_mode <= PSM_AUTO || pageseg_mode == PSM_SPARSE_TEXT_OSD; + } + inline bool PSM_COL_FIND_ENABLED(int pageseg_mode) { + return pageseg_mode >= PSM_AUTO_OSD && pageseg_mode <= PSM_AUTO; + } + inline bool PSM_SPARSE(int pageseg_mode) { + return pageseg_mode == PSM_SPARSE_TEXT || pageseg_mode == PSM_SPARSE_TEXT_OSD; + } + inline bool PSM_BLOCK_FIND_ENABLED(int pageseg_mode) { + return pageseg_mode >= PSM_AUTO_OSD && pageseg_mode <= PSM_SINGLE_COLUMN; + } + inline bool PSM_LINE_FIND_ENABLED(int pageseg_mode) { + return pageseg_mode >= PSM_AUTO_OSD && pageseg_mode <= PSM_SINGLE_BLOCK; + } + inline bool PSM_WORD_FIND_ENABLED(int pageseg_mode) { + return (pageseg_mode >= PSM_AUTO_OSD && pageseg_mode <= PSM_SINGLE_LINE) || + pageseg_mode == PSM_SPARSE_TEXT || pageseg_mode == PSM_SPARSE_TEXT_OSD; + } + + /** + * enum of the elements of the page hierarchy, used in ResultIterator + * to provide functions that operate on each level without having to + * have 5x as many functions. + */ + enum PageIteratorLevel { + RIL_BLOCK, // Block of text/image/separator line. + RIL_PARA, // Paragraph within a block. + RIL_TEXTLINE, // Line within a paragraph. + RIL_WORD, // Word within a textline. + RIL_SYMBOL // Symbol/character within a word. + }; + + /** + * JUSTIFICATION_UNKNOWN + * The alignment is not clearly one of the other options. This could happen + * for example if there are only one or two lines of text or the text looks + * like source code or poetry. + * + * NOTA BENE: Fully justified paragraphs (text aligned to both left and right + * margins) are marked by Tesseract with JUSTIFICATION_LEFT if their text + * is written with a left-to-right script and with JUSTIFICATION_RIGHT if + * their text is written in a right-to-left script. + * + * Interpretation for text read in vertical lines: + * "Left" is wherever the starting reading position is. + * + * JUSTIFICATION_LEFT + * Each line, except possibly the first, is flush to the same left tab stop. + * + * JUSTIFICATION_CENTER + * The text lines of the paragraph are centered about a line going + * down through their middle of the text lines. + * + * JUSTIFICATION_RIGHT + * Each line, except possibly the first, is flush to the same right tab stop. + */ + enum ParagraphJustification { + JUSTIFICATION_UNKNOWN, + JUSTIFICATION_LEFT, + JUSTIFICATION_CENTER, + JUSTIFICATION_RIGHT, + }; + + /** + * When Tesseract/Cube is initialized we can choose to instantiate/load/run + * only the Tesseract part, only the Cube part or both along with the combiner. + * The preference of which engine to use is stored in tessedit_ocr_engine_mode. + * + * ATTENTION: When modifying this enum, please make sure to make the + * appropriate changes to all the enums mirroring it (e.g. OCREngine in + * cityblock/workflow/detection/detection_storage.proto). Such enums will + * mention the connection to OcrEngineMode in the comments. + */ + enum OcrEngineMode { + OEM_TESSERACT_ONLY, // Run Tesseract only - fastest + OEM_CUBE_ONLY, // Run Cube only - better accuracy, but slower + OEM_TESSERACT_CUBE_COMBINED, // Run both and combine results - best accuracy + OEM_DEFAULT // Specify this mode when calling init_*(), + // to indicate that any of the above modes + // should be automatically inferred from the + // variables in the language-specific config, + // command-line configs, or if not specified + // in any of the above should be set to the + // default OEM_TESSERACT_ONLY. + }; + +} // namespace tesseract. + +#endif // TESSERACT_CCSTRUCT_PUBLICTYPES_H__ diff --git a/3rdparty/hgOCR/include/ccstruct/quadlsq.cpp b/3rdparty/hgOCR/include/ccstruct/quadlsq.cpp new file mode 100644 index 00000000..e0f3169e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/quadlsq.cpp @@ -0,0 +1,143 @@ +/********************************************************************** + * File: quadlsq.cpp (Formerly qlsq.c) + * Description: Code for least squares approximation of quadratics. + * Author: Ray Smith + * Created: Wed Oct 6 15:14:23 BST 1993 + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include "quadlsq.h" +#include "tprintf.h" + +// Minimum variance in least squares before backing off to a lower degree. +const double kMinVariance = 1.0 / 1024; + +/********************************************************************** + * QLSQ::clear + * + * Function to initialize a QLSQ. + **********************************************************************/ + +void QLSQ::clear() { // initialize + a = 0.0; + b = 0.0; + c = 0.0; + n = 0; // No elements. + sigx = 0.0; // Zero accumulators. + sigy = 0.0; + sigxx = 0.0; + sigxy = 0.0; + sigyy = 0.0; + sigxxx = 0.0; + sigxxy = 0.0; + sigxxxx = 0.0; +} + + +/********************************************************************** + * QLSQ::add + * + * Add an element to the accumulator. + **********************************************************************/ + +void QLSQ::add(double x, double y) { + n++; // Count elements. + sigx += x; // Update accumulators. + sigy += y; + sigxx += x * x; + sigxy += x * y; + sigyy += y * y; + sigxxx += static_cast(x) * x * x; + sigxxy += static_cast(x) * x * y; + sigxxxx += static_cast(x) * x * x * x; +} + + +/********************************************************************** + * QLSQ::remove + * + * Delete an element from the accumulator. + **********************************************************************/ + +void QLSQ::remove(double x, double y) { + if (n <= 0) { + tprintf("Can't remove an element from an empty QLSQ accumulator!\n"); + return; + } + n--; // Count elements. + sigx -= x; // Update accumulators. + sigy -= y; + sigxx -= x * x; + sigxy -= x * y; + sigyy -= y * y; + sigxxx -= static_cast(x) * x * x; + sigxxy -= static_cast(x) * x * y; + sigxxxx -= static_cast(x) * x * x * x; +} + + +/********************************************************************** + * QLSQ::fit + * + * Fit the given degree of polynomial and store the result. + * This creates a quadratic of the form axx + bx + c, but limited to + * the given degree. + **********************************************************************/ + +void QLSQ::fit(int degree) { + long double x_variance = static_cast(sigxx) * n - + static_cast(sigx) * sigx; + + // Note: for computational efficiency, we do not normalize the variance, + // covariance and cube variance here as they are in the same order in both + // nominators and denominators. However, we need be careful in value range + // check. + if (x_variance < kMinVariance * n * n || degree < 1 || n < 2) { + // We cannot calculate b reliably so forget a and b, and just work on c. + a = b = 0.0; + if (n >= 1 && degree >= 0) { + c = sigy / n; + } else { + c = 0.0; + } + return; + } + long double top96 = 0.0; // Accurate top. + long double bottom96 = 0.0; // Accurate bottom. + long double cubevar = sigxxx * n - static_cast(sigxx) * sigx; + long double covariance = static_cast(sigxy) * n - + static_cast(sigx) * sigy; + + if (n >= 4 && degree >= 2) { + top96 = cubevar * covariance; + top96 += x_variance * (static_cast(sigxx) * sigy - sigxxy * n); + + bottom96 = cubevar * cubevar; + bottom96 -= x_variance * + (sigxxxx * n - static_cast(sigxx) * sigxx); + } + if (bottom96 >= kMinVariance * n * n * n * n) { + // Denominators looking good + a = top96 / bottom96; + top96 = covariance - cubevar * a; + b = top96 / x_variance; + } else { + // Forget a, and concentrate on b. + a = 0.0; + b = covariance / x_variance; + } + c = (sigy - a * sigxx - b * sigx) / n; +} diff --git a/3rdparty/hgOCR/include/ccstruct/quadlsq.h b/3rdparty/hgOCR/include/ccstruct/quadlsq.h new file mode 100644 index 00000000..337fd615 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/quadlsq.h @@ -0,0 +1,67 @@ +/********************************************************************** + * File: quadlsq.h (Formerly qlsq.h) + * Description: Code for least squares approximation of quadratics. + * Author: Ray Smith + * Created: Wed Oct 6 15:14:23 BST 1993 + * + * (C) Copyright 1993, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef QUADLSQ_H +#define QUADLSQ_H + +#include "points.h" + +class QLSQ +{ + public: + QLSQ() { //constructor + clear(); //set to zeros + } + void clear(); //initialize + + void add( //add element + double x, //coords to add + double y); + void remove( //delete element + double x, //coords to delete + double y); + inT32 count() { //no of elements + return n; + } + + void fit( //fit the given + int degree); //return actual + double get_a() { //get x squard + return a; + } + double get_b() { //get x squard + return b; + } + double get_c() { //get x squard + return c; + } + + private: + inT32 n; //no of elements + double a, b, c; //result + double sigx; //sum of x + double sigy; //sum of y + double sigxx; //sum x squared + double sigxy; //sum of xy + double sigyy; //sum y squared + long double sigxxx; //sum x cubed + long double sigxxy; //sum xsquared y + long double sigxxxx; //sum x fourth +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/quadratc.h b/3rdparty/hgOCR/include/ccstruct/quadratc.h new file mode 100644 index 00000000..88047b29 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/quadratc.h @@ -0,0 +1,63 @@ +/********************************************************************** + * File: quadratc.h (Formerly quadrtic.h) + * Description: Code for the QUAD_COEFFS class. + * Author: Ray Smith + * Created: Tue Oct 08 17:24:40 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef QUADRATC_H +#define QUADRATC_H + +#include "points.h" + +class QUAD_COEFFS +{ + public: + QUAD_COEFFS() { + } //empty constructor + QUAD_COEFFS( //constructor + double xsq, //coefficients + float x, + float constant) { + a = xsq; + b = x; + c = constant; + } + + float y( //evaluate + float x) const { //at x + return (float) ((a * x + b) * x + c); + } + + void move( // reposition word + ICOORD vec) { // by vector + /************************************************************ + y - q = a (x - p)^2 + b (x - p) + c + y - q = ax^2 - 2apx + ap^2 + bx - bp + c + y = ax^2 + (b - 2ap)x + (c - bp + ap^2 + q) + ************************************************************/ + inT16 p = vec.x (); + inT16 q = vec.y (); + + c = (float) (c - b * p + a * p * p + q); + b = (float) (b - 2 * a * p); + } + + double a; //x squared + float b; //x + float c; //constant + private: +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/quspline.cpp b/3rdparty/hgOCR/include/ccstruct/quspline.cpp new file mode 100644 index 00000000..82107e1e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/quspline.cpp @@ -0,0 +1,425 @@ +/********************************************************************** + * File: quspline.cpp (Formerly qspline.c) + * Description: Code for the QSPLINE class. + * Author: Ray Smith + * Created: Tue Oct 08 17:16:12 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "allheaders.h" +#include "memry.h" +#include "quadlsq.h" +#include "quspline.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#define QSPLINE_PRECISION 16 //no of steps to draw + +/********************************************************************** + * QSPLINE::QSPLINE + * + * Constructor to build a QSPLINE given the components used in the old code. + **********************************************************************/ + +QSPLINE::QSPLINE( //constructor + inT32 count, //no of segments + inT32 *xstarts, //start coords + double *coeffs //coefficients + ) { + inT32 index; //segment index + + //get memory + xcoords = (inT32 *) alloc_mem ((count + 1) * sizeof (inT32)); + quadratics = (QUAD_COEFFS *) alloc_mem (count * sizeof (QUAD_COEFFS)); + segments = count; + for (index = 0; index < segments; index++) { + //copy them + xcoords[index] = xstarts[index]; + quadratics[index] = QUAD_COEFFS (coeffs[index * 3], + coeffs[index * 3 + 1], + coeffs[index * 3 + 2]); + } + //right edge + xcoords[index] = xstarts[index]; +} + + +/********************************************************************** + * QSPLINE::QSPLINE + * + * Constructor to build a QSPLINE by appproximation of points. + **********************************************************************/ + +QSPLINE::QSPLINE ( //constructor +int xstarts[], //spline boundaries +int segcount, //no of segments +int xpts[], //points to fit +int ypts[], int pointcount, //no of pts +int degree //fit required +) { + int pointindex; /*no along text line */ + int segment; /*segment no */ + inT32 *ptcounts; //no in each segment + QLSQ qlsq; /*accumulator */ + + segments = segcount; + xcoords = (inT32 *) alloc_mem ((segcount + 1) * sizeof (inT32)); + ptcounts = (inT32 *) alloc_mem ((segcount + 1) * sizeof (inT32)); + quadratics = (QUAD_COEFFS *) alloc_mem (segcount * sizeof (QUAD_COEFFS)); + memmove (xcoords, xstarts, (segcount + 1) * sizeof (inT32)); + ptcounts[0] = 0; /*none in any yet */ + for (segment = 0, pointindex = 0; pointindex < pointcount; pointindex++) { + while (segment < segcount && xpts[pointindex] >= xstarts[segment]) { + segment++; /*try next segment */ + /*cumulative counts */ + ptcounts[segment] = ptcounts[segment - 1]; + } + ptcounts[segment]++; /*no in previous partition */ + } + while (segment < segcount) { + segment++; + /*zero the rest */ + ptcounts[segment] = ptcounts[segment - 1]; + } + + for (segment = 0; segment < segcount; segment++) { + qlsq.clear (); + /*first blob */ + pointindex = ptcounts[segment]; + if (pointindex > 0 + && xpts[pointindex] != xpts[pointindex - 1] + && xpts[pointindex] != xstarts[segment]) + qlsq.add (xstarts[segment], + ypts[pointindex - 1] + + (ypts[pointindex] - ypts[pointindex - 1]) + * (xstarts[segment] - xpts[pointindex - 1]) + / (xpts[pointindex] - xpts[pointindex - 1])); + for (; pointindex < ptcounts[segment + 1]; pointindex++) { + qlsq.add (xpts[pointindex], ypts[pointindex]); + } + if (pointindex > 0 && pointindex < pointcount + && xpts[pointindex] != xstarts[segment + 1]) + qlsq.add (xstarts[segment + 1], + ypts[pointindex - 1] + + (ypts[pointindex] - ypts[pointindex - 1]) + * (xstarts[segment + 1] - xpts[pointindex - 1]) + / (xpts[pointindex] - xpts[pointindex - 1])); + qlsq.fit (degree); + quadratics[segment].a = qlsq.get_a (); + quadratics[segment].b = qlsq.get_b (); + quadratics[segment].c = qlsq.get_c (); + } + free_mem(ptcounts); +} + + +/********************************************************************** + * QSPLINE::QSPLINE + * + * Constructor to build a QSPLINE from another. + **********************************************************************/ + +QSPLINE::QSPLINE( //constructor + const QSPLINE &src) { + segments = 0; + xcoords = NULL; + quadratics = NULL; + *this = src; +} + + +/********************************************************************** + * QSPLINE::~QSPLINE + * + * Destroy a QSPLINE. + **********************************************************************/ + +QSPLINE::~QSPLINE ( //constructor +) { + if (xcoords != NULL) { + free_mem(xcoords); + xcoords = NULL; + } + if (quadratics != NULL) { + free_mem(quadratics); + quadratics = NULL; + } +} + + +/********************************************************************** + * QSPLINE::operator= + * + * Copy a QSPLINE + **********************************************************************/ + +QSPLINE & QSPLINE::operator= ( //assignment +const QSPLINE & source) { + if (xcoords != NULL) + free_mem(xcoords); + if (quadratics != NULL) + free_mem(quadratics); + + segments = source.segments; + xcoords = (inT32 *) alloc_mem ((segments + 1) * sizeof (inT32)); + quadratics = (QUAD_COEFFS *) alloc_mem (segments * sizeof (QUAD_COEFFS)); + memmove (xcoords, source.xcoords, (segments + 1) * sizeof (inT32)); + memmove (quadratics, source.quadratics, segments * sizeof (QUAD_COEFFS)); + return *this; +} + + +/********************************************************************** + * QSPLINE::step + * + * Return the total of the step functions between the given coords. + **********************************************************************/ + +double QSPLINE::step( //find step functions + double x1, //between coords + double x2) { + int index1, index2; //indices of coords + double total; /*total steps */ + + index1 = spline_index (x1); + index2 = spline_index (x2); + total = 0; + while (index1 < index2) { + total += + (double) quadratics[index1 + 1].y ((float) xcoords[index1 + 1]); + total -= (double) quadratics[index1].y ((float) xcoords[index1 + 1]); + index1++; /*next segment */ + } + return total; /*total steps */ +} + + +/********************************************************************** + * QSPLINE::y + * + * Return the y value at the given x value. + **********************************************************************/ + +double QSPLINE::y( //evaluate + double x //coord to evaluate at + ) const { + inT32 index; //segment index + + index = spline_index (x); + return quadratics[index].y (x);//in correct segment +} + + +/********************************************************************** + * QSPLINE::spline_index + * + * Return the index to the largest xcoord not greater than x. + **********************************************************************/ + +inT32 QSPLINE::spline_index( //evaluate + double x //coord to evaluate at + ) const { + inT32 index; //segment index + inT32 bottom; //bottom of range + inT32 top; //top of range + + bottom = 0; + top = segments; + while (top - bottom > 1) { + index = (top + bottom) / 2; //centre of range + if (x >= xcoords[index]) + bottom = index; //new min + else + top = index; //new max + } + return bottom; +} + + +/********************************************************************** + * QSPLINE::move + * + * Reposition spline by vector + **********************************************************************/ + +void QSPLINE::move( // reposition spline + ICOORD vec // by vector + ) { + inT32 segment; //index of segment + inT16 x_shift = vec.x (); + + for (segment = 0; segment < segments; segment++) { + xcoords[segment] += x_shift; + quadratics[segment].move (vec); + } + xcoords[segment] += x_shift; +} + + +/********************************************************************** + * QSPLINE::overlap + * + * Return TRUE if spline2 overlaps this by no more than fraction less + * than the bounds of this. + **********************************************************************/ + +BOOL8 QSPLINE::overlap( //test overlap + QSPLINE *spline2, //2 cannot be smaller + double fraction //by more than this + ) { + int leftlimit; /*common left limit */ + int rightlimit; /*common right limit */ + + leftlimit = xcoords[1]; + rightlimit = xcoords[segments - 1]; + /*or too non-overlap */ + if (spline2->segments < 3 || spline2->xcoords[1] > leftlimit + fraction * (rightlimit - leftlimit) + || spline2->xcoords[spline2->segments - 1] < rightlimit + - fraction * (rightlimit - leftlimit)) + return FALSE; + else + return TRUE; +} + + +/********************************************************************** + * extrapolate_spline + * + * Extrapolates the spline linearly using the same gradient as the + * quadratic has at either end. + **********************************************************************/ + +void QSPLINE::extrapolate( //linear extrapolation + double gradient, //gradient to use + int xmin, //new left edge + int xmax //new right edge + ) { + int segment; /*current segment of spline */ + int dest_segment; //dest index + int *xstarts; //new boundaries + QUAD_COEFFS *quads; //new ones + int increment; //in size + + increment = xmin < xcoords[0] ? 1 : 0; + if (xmax > xcoords[segments]) + increment++; + if (increment == 0) + return; + xstarts = (int *) alloc_mem ((segments + 1 + increment) * sizeof (int)); + quads = + (QUAD_COEFFS *) alloc_mem ((segments + increment) * sizeof (QUAD_COEFFS)); + if (xmin < xcoords[0]) { + xstarts[0] = xmin; + quads[0].a = 0; + quads[0].b = gradient; + quads[0].c = y (xcoords[0]) - quads[0].b * xcoords[0]; + dest_segment = 1; + } + else + dest_segment = 0; + for (segment = 0; segment < segments; segment++) { + xstarts[dest_segment] = xcoords[segment]; + quads[dest_segment] = quadratics[segment]; + dest_segment++; + } + xstarts[dest_segment] = xcoords[segment]; + if (xmax > xcoords[segments]) { + quads[dest_segment].a = 0; + quads[dest_segment].b = gradient; + quads[dest_segment].c = y (xcoords[segments]) + - quads[dest_segment].b * xcoords[segments]; + dest_segment++; + xstarts[dest_segment] = xmax + 1; + } + segments = dest_segment; + free_mem(xcoords); + free_mem(quadratics); + xcoords = (inT32 *) xstarts; + quadratics = quads; +} + + +/********************************************************************** + * QSPLINE::plot + * + * Draw the QSPLINE in the given colour. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void QSPLINE::plot( //draw it + ScrollView* window, //window to draw in + ScrollView::Color colour //colour to draw in + ) const { + inT32 segment; //index of segment + inT16 step; //index of poly piece + double increment; //x increment + double x; //x coord + + window->Pen(colour); + for (segment = 0; segment < segments; segment++) { + increment = + (double) (xcoords[segment + 1] - + xcoords[segment]) / QSPLINE_PRECISION; + x = xcoords[segment]; + for (step = 0; step <= QSPLINE_PRECISION; step++) { + if (segment == 0 && step == 0) + window->SetCursor(x, quadratics[segment].y (x)); + else + window->DrawTo(x, quadratics[segment].y (x)); + x += increment; + } + } +} +#endif + +void QSPLINE::plot(Pix *pix) const { + if (pix == NULL) { + return; + } + + inT32 segment; // Index of segment + inT16 step; // Index of poly piece + double increment; // x increment + double x; // x coord + double height = static_cast(pixGetHeight(pix)); + Pta* points = ptaCreate(QSPLINE_PRECISION * segments); + const int kLineWidth = 5; + + for (segment = 0; segment < segments; segment++) { + increment = static_cast((xcoords[segment + 1] - + xcoords[segment])) / QSPLINE_PRECISION; + x = xcoords[segment]; + for (step = 0; step <= QSPLINE_PRECISION; step++) { + double y = height - quadratics[segment].y(x); + ptaAddPt(points, x, y); + x += increment; + } + } + + switch (pixGetDepth(pix)) { + case 1: + pixRenderPolyline(pix, points, kLineWidth, L_SET_PIXELS, 1); + break; + case 32: + pixRenderPolylineArb(pix, points, kLineWidth, 255, 0, 0, 1); + break; + default: + pixRenderPolyline(pix, points, kLineWidth, L_CLEAR_PIXELS, 1); + break; + } + ptaDestroy(&points); +} diff --git a/3rdparty/hgOCR/include/ccstruct/quspline.h b/3rdparty/hgOCR/include/ccstruct/quspline.h new file mode 100644 index 00000000..f9e8145b --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/quspline.h @@ -0,0 +1,99 @@ +/********************************************************************** + * File: quspline.h (Formerly qspline.h) + * Description: Code for the QSPLINE class. + * Author: Ray Smith + * Created: Tue Oct 08 17:16:12 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef QUSPLINE_H +#define QUSPLINE_H + +#include "quadratc.h" +#include "serialis.h" +#include "memry.h" +#include "rect.h" + +class ROW; +struct Pix; + +class QSPLINE +{ + friend void make_first_baseline(TBOX *, + int, + int *, + int *, + QSPLINE *, + QSPLINE *, + float); + friend void make_holed_baseline(TBOX *, int, QSPLINE *, QSPLINE *, float); + friend void tweak_row_baseline(ROW *, double, double); + public: + QSPLINE() { //empty constructor + segments = 0; + xcoords = NULL; //everything empty + quadratics = NULL; + } + QSPLINE( //copy constructor + const QSPLINE &src); + QSPLINE( //constructor + inT32 count, //number of segments + inT32 *xstarts, //segment starts + double *coeffs); //coefficients + ~QSPLINE (); //destructor + QSPLINE ( //least squares fit + int xstarts[], //spline boundaries + int segcount, //no of segments + int xcoords[], //points to fit + int ycoords[], int blobcount,//no of coords + int degree); //function + + double step( //step change + double x1, //between coords + double x2); + double y( //evaluate + double x) const; //at x + + void move( // reposition spline + ICOORD vec); // by vector + BOOL8 overlap( //test overlap + QSPLINE *spline2, //2 cannot be smaller + double fraction); //by more than this + void extrapolate( //linear extrapolation + double gradient, //gradient to use + int left, //new left edge + int right); //new right edge + +#ifndef GRAPHICS_DISABLED + void plot( //draw it + ScrollView* window, //in window + ScrollView::Color colour) const; //in colour +#endif + + // Paint the baseline over pix. If pix has depth of 32, then the line will + // be painted in red. Otherwise it will be painted in black. + void plot(Pix* pix) const; + + QSPLINE & operator= ( + const QSPLINE & source); //from this + + private: + + inT32 spline_index( //binary search + double x) const; //for x + inT32 segments; //no of segments + inT32 *xcoords; //no of coords + QUAD_COEFFS *quadratics; //spline pieces +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/ratngs.cpp b/3rdparty/hgOCR/include/ccstruct/ratngs.cpp new file mode 100644 index 00000000..cbd7bf0e --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ratngs.cpp @@ -0,0 +1,837 @@ +/********************************************************************** + * File: ratngs.cpp (Formerly ratings.c) + * Description: Code to manipulate the BLOB_CHOICE and WERD_CHOICE classes. + * Author: Ray Smith + * Created: Thu Apr 23 13:23:29 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "ratngs.h" + +#include "blobs.h" +#include "callcpp.h" +#include "genericvector.h" +#include "matrix.h" +#include "normalis.h" // kBlnBaselineOffset. +#include "unicharset.h" + +using tesseract::ScriptPos; + +ELISTIZE(BLOB_CHOICE); +ELISTIZE(WERD_CHOICE); + +const float WERD_CHOICE::kBadRating = 100000.0; +// Min offset in baseline-normalized coords to make a character a subscript. +const int kMinSubscriptOffset = 20; +// Min offset in baseline-normalized coords to make a character a superscript. +const int kMinSuperscriptOffset = 20; +// Max y of bottom of a drop-cap blob. +const int kMaxDropCapBottom = -128; +// Max fraction of x-height to use as denominator in measuring x-height overlap. +const double kMaxOverlapDenominator = 0.125; +// Min fraction of x-height range that should be in agreement for matching +// x-heights. +const double kMinXHeightMatch = 0.5; +// Max tolerance on baseline position as a fraction of x-height for matching +// baselines. +const double kMaxBaselineDrift = 0.0625; + +static const char kPermuterTypeNoPerm[] = "None"; +static const char kPermuterTypePuncPerm[] = "Punctuation"; +static const char kPermuterTypeTopPerm[] = "Top Choice"; +static const char kPermuterTypeLowerPerm[] = "Top Lower Case"; +static const char kPermuterTypeUpperPerm[] = "Top Upper Case"; +static const char kPermuterTypeNgramPerm[] = "Ngram"; +static const char kPermuterTypeNumberPerm[] = "Number"; +static const char kPermuterTypeUserPatPerm[] = "User Pattern"; +static const char kPermuterTypeSysDawgPerm[] = "System Dictionary"; +static const char kPermuterTypeDocDawgPerm[] = "Document Dictionary"; +static const char kPermuterTypeUserDawgPerm[] = "User Dictionary"; +static const char kPermuterTypeFreqDawgPerm[] = "Frequent Words Dictionary"; +static const char kPermuterTypeCompoundPerm[] = "Compound"; + +static const char * const kPermuterTypeNames[] = { + kPermuterTypeNoPerm, // 0 + kPermuterTypePuncPerm, // 1 + kPermuterTypeTopPerm, // 2 + kPermuterTypeLowerPerm, // 3 + kPermuterTypeUpperPerm, // 4 + kPermuterTypeNgramPerm, // 5 + kPermuterTypeNumberPerm, // 6 + kPermuterTypeUserPatPerm, // 7 + kPermuterTypeSysDawgPerm, // 8 + kPermuterTypeDocDawgPerm, // 9 + kPermuterTypeUserDawgPerm, // 10 + kPermuterTypeFreqDawgPerm, // 11 + kPermuterTypeCompoundPerm // 12 +}; + +/** + * BLOB_CHOICE::BLOB_CHOICE + * + * Constructor to build a BLOB_CHOICE from a char, rating and certainty. + */ +BLOB_CHOICE::BLOB_CHOICE(UNICHAR_ID src_unichar_id, // character id + float src_rating, // rating + float src_cert, // certainty + int src_script_id, // script + float min_xheight, // min xheight allowed + float max_xheight, // max xheight by this char + float yshift, // yshift out of position + BlobChoiceClassifier c) { // adapted match or other + unichar_id_ = src_unichar_id; + rating_ = src_rating; + certainty_ = src_cert; + fontinfo_id_ = -1; + fontinfo_id2_ = -1; + script_id_ = src_script_id; + min_xheight_ = min_xheight; + max_xheight_ = max_xheight; + yshift_ = yshift; + classifier_ = c; +} + +/** + * BLOB_CHOICE::BLOB_CHOICE + * + * Constructor to build a BLOB_CHOICE from another BLOB_CHOICE. + */ +BLOB_CHOICE::BLOB_CHOICE(const BLOB_CHOICE &other) : ELIST_LINK(other) { + unichar_id_ = other.unichar_id(); + rating_ = other.rating(); + certainty_ = other.certainty(); + fontinfo_id_ = other.fontinfo_id(); + fontinfo_id2_ = other.fontinfo_id2(); + script_id_ = other.script_id(); + matrix_cell_ = other.matrix_cell_; + min_xheight_ = other.min_xheight_; + max_xheight_ = other.max_xheight_; + yshift_ = other.yshift(); + classifier_ = other.classifier_; + fonts_ = other.fonts_; +} + +// Returns true if *this and other agree on the baseline and x-height +// to within some tolerance based on a given estimate of the x-height. +bool BLOB_CHOICE::PosAndSizeAgree(const BLOB_CHOICE& other, float x_height, + bool debug) const { + double baseline_diff = fabs(yshift() - other.yshift()); + if (baseline_diff > kMaxBaselineDrift * x_height) { + if (debug) { + tprintf("Baseline diff %g for %d v %d\n", + baseline_diff, unichar_id_, other.unichar_id_); + } + return false; + } + double this_range = max_xheight() - min_xheight(); + double other_range = other.max_xheight() - other.min_xheight(); + double denominator = ClipToRange(MIN(this_range, other_range), + 1.0, kMaxOverlapDenominator * x_height); + double overlap = MIN(max_xheight(), other.max_xheight()) - + MAX(min_xheight(), other.min_xheight()); + overlap /= denominator; + if (debug) { + tprintf("PosAndSize for %d v %d: bl diff = %g, ranges %g, %g / %g ->%g\n", + unichar_id_, other.unichar_id_, baseline_diff, + this_range, other_range, denominator, overlap); + } + + return overlap >= kMinXHeightMatch; +} + +// Helper to find the BLOB_CHOICE in the bc_list that matches the given +// unichar_id, or NULL if there is no match. +BLOB_CHOICE* FindMatchingChoice(UNICHAR_ID char_id, + BLOB_CHOICE_LIST* bc_list) { + // Find the corresponding best BLOB_CHOICE. + BLOB_CHOICE_IT choice_it(bc_list); + for (choice_it.mark_cycle_pt(); !choice_it.cycled_list(); + choice_it.forward()) { + BLOB_CHOICE* choice = choice_it.data(); + if (choice->unichar_id() == char_id) { + return choice; + } + } + return NULL; +} + +const char *WERD_CHOICE::permuter_name(uinT8 permuter) { + return kPermuterTypeNames[permuter]; +} + +namespace tesseract { + +const char *ScriptPosToString(enum ScriptPos script_pos) { + switch (script_pos) { + case SP_NORMAL: return "NORM"; + case SP_SUBSCRIPT: return "SUB"; + case SP_SUPERSCRIPT: return "SUPER"; + case SP_DROPCAP: return "DROPC"; + } + return "SP_UNKNOWN"; +} + +} // namespace tesseract. + +/** + * WERD_CHOICE::WERD_CHOICE + * + * Constructor to build a WERD_CHOICE from the given string. + * The function assumes that src_string is not NULL. + */ +WERD_CHOICE::WERD_CHOICE(const char *src_string, + const UNICHARSET &unicharset) + : unicharset_(&unicharset){ + GenericVector encoding; + GenericVector lengths; + if (unicharset.encode_string(src_string, true, &encoding, &lengths, NULL)) { + lengths.push_back('\0'); + STRING src_lengths = &lengths[0]; + this->init(src_string, src_lengths.string(), 0.0, 0.0, NO_PERM); + } else { // There must have been an invalid unichar in the string. + this->init(8); + this->make_bad(); + } +} + +/** + * WERD_CHOICE::init + * + * Helper function to build a WERD_CHOICE from the given string, + * fragment lengths, rating, certainty and permuter. + * + * The function assumes that src_string is not NULL. + * src_lengths argument could be NULL, in which case the unichars + * in src_string are assumed to all be of length 1. + */ +void WERD_CHOICE::init(const char *src_string, + const char *src_lengths, + float src_rating, + float src_certainty, + uinT8 src_permuter) { + int src_string_len = strlen(src_string); + if (src_string_len == 0) { + this->init(8); + } else { + this->init(src_lengths ? strlen(src_lengths): src_string_len); + length_ = reserved_; + int offset = 0; + for (int i = 0; i < length_; ++i) { + int unichar_length = src_lengths ? src_lengths[i] : 1; + unichar_ids_[i] = + unicharset_->unichar_to_id(src_string+offset, unichar_length); + state_[i] = 1; + certainties_[i] = src_certainty; + offset += unichar_length; + } + } + adjust_factor_ = 1.0f; + rating_ = src_rating; + certainty_ = src_certainty; + permuter_ = src_permuter; + dangerous_ambig_found_ = false; +} + +/** + * WERD_CHOICE::~WERD_CHOICE + */ +WERD_CHOICE::~WERD_CHOICE() { + delete[] unichar_ids_; + delete[] script_pos_; + delete[] state_; + delete[] certainties_; +} + +const char *WERD_CHOICE::permuter_name() const { + return kPermuterTypeNames[permuter_]; +} + +// Returns the BLOB_CHOICE_LIST corresponding to the given index in the word, +// taken from the appropriate cell in the ratings MATRIX. +// Borrowed pointer, so do not delete. +BLOB_CHOICE_LIST* WERD_CHOICE::blob_choices(int index, MATRIX* ratings) const { + MATRIX_COORD coord = MatrixCoord(index); + BLOB_CHOICE_LIST* result = ratings->get(coord.col, coord.row); + if (result == NULL) { + result = new BLOB_CHOICE_LIST; + ratings->put(coord.col, coord.row, result); + } + return result; +} + +// Returns the MATRIX_COORD corresponding to the location in the ratings +// MATRIX for the given index into the word. +MATRIX_COORD WERD_CHOICE::MatrixCoord(int index) const { + int col = 0; + for (int i = 0; i < index; ++i) + col += state_[i]; + int row = col + state_[index] - 1; + return MATRIX_COORD(col, row); +} + +// Sets the entries for the given index from the BLOB_CHOICE, assuming +// unit fragment lengths, but setting the state for this index to blob_count. +void WERD_CHOICE::set_blob_choice(int index, int blob_count, + const BLOB_CHOICE* blob_choice) { + unichar_ids_[index] = blob_choice->unichar_id(); + script_pos_[index] = tesseract::SP_NORMAL; + state_[index] = blob_count; + certainties_[index] = blob_choice->certainty(); +} + + +/** + * contains_unichar_id + * + * Returns true if unichar_ids_ contain the given unichar_id, false otherwise. + */ +bool WERD_CHOICE::contains_unichar_id(UNICHAR_ID unichar_id) const { + for (int i = 0; i < length_; ++i) { + if (unichar_ids_[i] == unichar_id) { + return true; + } + } + return false; +} + +/** + * remove_unichar_ids + * + * Removes num unichar ids starting from index start from unichar_ids_ + * and updates length_ and fragment_lengths_ to reflect this change. + * Note: this function does not modify rating_ and certainty_. + */ +void WERD_CHOICE::remove_unichar_ids(int start, int num) { + ASSERT_HOST(start >= 0 && start + num <= length_); + // Accumulate the states to account for the merged blobs. + for (int i = 0; i < num; ++i) { + if (start > 0) + state_[start - 1] += state_[start + i]; + else if (start + num < length_) + state_[start + num] += state_[start + i]; + } + for (int i = start; i + num < length_; ++i) { + unichar_ids_[i] = unichar_ids_[i + num]; + script_pos_[i] = script_pos_[i + num]; + state_[i] = state_[i + num]; + certainties_[i] = certainties_[i + num]; + } + length_ -= num; +} + +/** + * reverse_and_mirror_unichar_ids + * + * Reverses and mirrors unichars in unichar_ids. + */ +void WERD_CHOICE::reverse_and_mirror_unichar_ids() { + for (int i = 0; i < length_ / 2; ++i) { + UNICHAR_ID tmp_id = unichar_ids_[i]; + unichar_ids_[i] = unicharset_->get_mirror(unichar_ids_[length_-1-i]); + unichar_ids_[length_-1-i] = unicharset_->get_mirror(tmp_id); + } + if (length_ % 2 != 0) { + unichar_ids_[length_/2] = unicharset_->get_mirror(unichar_ids_[length_/2]); + } +} + +/** + * punct_stripped + * + * Returns the half-open interval of unichar_id indices [start, end) which + * enclose the core portion of this word -- the part after stripping + * punctuation from the left and right. + */ +void WERD_CHOICE::punct_stripped(int *start, int *end) const { + *start = 0; + *end = length() - 1; + while (*start < length() && + unicharset()->get_ispunctuation(unichar_id(*start))) { + (*start)++; + } + while (*end > -1 && + unicharset()->get_ispunctuation(unichar_id(*end))) { + (*end)--; + } + (*end)++; +} + +void WERD_CHOICE::GetNonSuperscriptSpan(int *pstart, int *pend) const { + int end = length(); + while (end > 0 && + unicharset_->get_isdigit(unichar_ids_[end - 1]) && + BlobPosition(end - 1) == tesseract::SP_SUPERSCRIPT) { + end--; + } + int start = 0; + while (start < end && + unicharset_->get_isdigit(unichar_ids_[start]) && + BlobPosition(start) == tesseract::SP_SUPERSCRIPT) { + start++; + } + *pstart = start; + *pend = end; +} + +WERD_CHOICE WERD_CHOICE::shallow_copy(int start, int end) const { + ASSERT_HOST(start >= 0 && start <= length_); + ASSERT_HOST(end >= 0 && end <= length_); + if (end < start) { end = start; } + WERD_CHOICE retval(unicharset_, end - start); + for (int i = start; i < end; i++) { + retval.append_unichar_id_space_allocated( + unichar_ids_[i], state_[i], 0.0f, certainties_[i]); + } + return retval; +} + +/** + * has_rtl_unichar_id + * + * Returns true if unichar_ids contain at least one "strongly" RTL unichar. + */ +bool WERD_CHOICE::has_rtl_unichar_id() const { + int i; + for (i = 0; i < length_; ++i) { + UNICHARSET::Direction dir = unicharset_->get_direction(unichar_ids_[i]); + if (dir == UNICHARSET::U_RIGHT_TO_LEFT || + dir == UNICHARSET::U_RIGHT_TO_LEFT_ARABIC) { + return true; + } + } + return false; +} + +/** + * string_and_lengths + * + * Populates the given word_str with unichars from unichar_ids and + * and word_lengths_str with the corresponding unichar lengths. + */ +void WERD_CHOICE::string_and_lengths(STRING *word_str, + STRING *word_lengths_str) const { + *word_str = ""; + if (word_lengths_str != NULL) *word_lengths_str = ""; + for (int i = 0; i < length_; ++i) { + const char *ch = unicharset_->id_to_unichar_ext(unichar_ids_[i]); + *word_str += ch; + if (word_lengths_str != NULL) { + *word_lengths_str += strlen(ch); + } + } +} + +/** + * append_unichar_id + * + * Make sure there is enough space in the word for the new unichar id + * and call append_unichar_id_space_allocated(). + */ +void WERD_CHOICE::append_unichar_id( + UNICHAR_ID unichar_id, int blob_count, + float rating, float certainty) { + if (length_ == reserved_) { + this->double_the_size(); + } + this->append_unichar_id_space_allocated(unichar_id, blob_count, + rating, certainty); +} + +/** + * WERD_CHOICE::operator+= + * + * Cat a second word rating on the end of this current one. + * The ratings are added and the confidence is the min. + * If the permuters are NOT the same the permuter is set to COMPOUND_PERM + */ +WERD_CHOICE & WERD_CHOICE::operator+= (const WERD_CHOICE & second) { + ASSERT_HOST(unicharset_ == second.unicharset_); + while (reserved_ < length_ + second.length()) { + this->double_the_size(); + } + const UNICHAR_ID *other_unichar_ids = second.unichar_ids(); + for (int i = 0; i < second.length(); ++i) { + unichar_ids_[length_ + i] = other_unichar_ids[i]; + state_[length_ + i] = second.state_[i]; + certainties_[length_ + i] = second.certainties_[i]; + script_pos_[length_ + i] = second.BlobPosition(i); + } + length_ += second.length(); + if (second.adjust_factor_ > adjust_factor_) + adjust_factor_ = second.adjust_factor_; + rating_ += second.rating(); // add ratings + if (second.certainty() < certainty_) // take min + certainty_ = second.certainty(); + if (second.dangerous_ambig_found_) + dangerous_ambig_found_ = true; + if (permuter_ == NO_PERM) { + permuter_ = second.permuter(); + } else if (second.permuter() != NO_PERM && + second.permuter() != permuter_) { + permuter_ = COMPOUND_PERM; + } + return *this; +} + + +/** + * WERD_CHOICE::operator= + * + * Allocate enough memory to hold a copy of source and copy over + * all the information from source to this WERD_CHOICE. + */ +WERD_CHOICE& WERD_CHOICE::operator=(const WERD_CHOICE& source) { + while (reserved_ < source.length()) { + this->double_the_size(); + } + + unicharset_ = source.unicharset_; + const UNICHAR_ID *other_unichar_ids = source.unichar_ids(); + for (int i = 0; i < source.length(); ++i) { + unichar_ids_[i] = other_unichar_ids[i]; + state_[i] = source.state_[i]; + certainties_[i] = source.certainties_[i]; + script_pos_[i] = source.BlobPosition(i); + } + length_ = source.length(); + adjust_factor_ = source.adjust_factor_; + rating_ = source.rating(); + certainty_ = source.certainty(); + min_x_height_ = source.min_x_height(); + max_x_height_ = source.max_x_height(); + permuter_ = source.permuter(); + dangerous_ambig_found_ = source.dangerous_ambig_found_; + return *this; +} + +// Sets up the script_pos_ member using the blobs_list to get the bln +// bounding boxes, *this to get the unichars, and this->unicharset +// to get the target positions. If small_caps is true, sub/super are not +// considered, but dropcaps are. +// NOTE: blobs_list should be the chopped_word blobs. (Fully segemented.) +void WERD_CHOICE::SetScriptPositions(bool small_caps, TWERD* word) { + // Since WERD_CHOICE isn't supposed to depend on a Tesseract, + // we don't have easy access to the flags Tesseract stores. Therefore, debug + // for this module is hard compiled in. + int debug = 0; + + // Initialize to normal. + for (int i = 0; i < length_; ++i) + script_pos_[i] = tesseract::SP_NORMAL; + if (word->blobs.empty() || word->NumBlobs() != TotalOfStates()) { + return; + } + + int position_counts[4]; + for (int i = 0; i < 4; i++) { + position_counts[i] = 0; + } + + int chunk_index = 0; + for (int blob_index = 0; blob_index < length_; ++blob_index, ++chunk_index) { + TBLOB* tblob = word->blobs[chunk_index]; + int uni_id = unichar_id(blob_index); + TBOX blob_box = tblob->bounding_box(); + if (state_ != NULL) { + for (int i = 1; i < state_[blob_index]; ++i) { + ++chunk_index; + tblob = word->blobs[chunk_index]; + blob_box += tblob->bounding_box(); + } + } + script_pos_[blob_index] = ScriptPositionOf(false, *unicharset_, blob_box, + uni_id); + if (small_caps && script_pos_[blob_index] != tesseract::SP_DROPCAP) { + script_pos_[blob_index] = tesseract::SP_NORMAL; + } + position_counts[script_pos_[blob_index]]++; + } + // If almost everything looks like a superscript or subscript, + // we most likely just got the baseline wrong. + if (position_counts[tesseract::SP_SUBSCRIPT] > 0.75 * length_ || + position_counts[tesseract::SP_SUPERSCRIPT] > 0.75 * length_) { + if (debug >= 2) { + tprintf("Most characters of %s are subscript or superscript.\n" + "That seems wrong, so I'll assume we got the baseline wrong\n", + unichar_string().string()); + } + for (int i = 0; i < length_; i++) { + ScriptPos sp = script_pos_[i]; + if (sp == tesseract::SP_SUBSCRIPT || sp == tesseract::SP_SUPERSCRIPT) { + position_counts[sp]--; + position_counts[tesseract::SP_NORMAL]++; + script_pos_[i] = tesseract::SP_NORMAL; + } + } + } + + if ((debug >= 1 && position_counts[tesseract::SP_NORMAL] < length_) || + debug >= 2) { + tprintf("SetScriptPosition on %s\n", unichar_string().string()); + int chunk_index = 0; + for (int blob_index = 0; blob_index < length_; ++blob_index) { + if (debug >= 2 || script_pos_[blob_index] != tesseract::SP_NORMAL) { + TBLOB* tblob = word->blobs[chunk_index]; + ScriptPositionOf(true, *unicharset_, tblob->bounding_box(), + unichar_id(blob_index)); + } + chunk_index += state_ != NULL ? state_[blob_index] : 1; + } + } +} +// Sets the script_pos_ member from some source positions with a given length. +void WERD_CHOICE::SetScriptPositions(const tesseract::ScriptPos* positions, + int length) { + ASSERT_HOST(length == length_); + if (positions != script_pos_) { + delete [] script_pos_; + script_pos_ = new ScriptPos[length]; + memcpy(script_pos_, positions, sizeof(positions[0]) * length); + } +} +// Sets all the script_pos_ positions to the given position. +void WERD_CHOICE::SetAllScriptPositions(tesseract::ScriptPos position) { + for (int i = 0; i < length_; ++i) + script_pos_[i] = position; +} + +/* static */ +ScriptPos WERD_CHOICE::ScriptPositionOf(bool print_debug, + const UNICHARSET& unicharset, + const TBOX& blob_box, + UNICHAR_ID unichar_id) { + ScriptPos retval = tesseract::SP_NORMAL; + int top = blob_box.top(); + int bottom = blob_box.bottom(); + int min_bottom, max_bottom, min_top, max_top; + unicharset.get_top_bottom(unichar_id, + &min_bottom, &max_bottom, + &min_top, &max_top); + + int sub_thresh_top = min_top - kMinSubscriptOffset; + int sub_thresh_bot = kBlnBaselineOffset - kMinSubscriptOffset; + int sup_thresh_bot = max_bottom + kMinSuperscriptOffset; + if (bottom <= kMaxDropCapBottom) { + retval = tesseract::SP_DROPCAP; + } else if (top < sub_thresh_top && bottom < sub_thresh_bot) { + retval = tesseract::SP_SUBSCRIPT; + } else if (bottom > sup_thresh_bot) { + retval = tesseract::SP_SUPERSCRIPT; + } + + if (print_debug) { + const char *pos = ScriptPosToString(retval); + tprintf("%s Character %s[bot:%d top: %d] " + "bot_range[%d,%d] top_range[%d, %d] " + "sub_thresh[bot:%d top:%d] sup_thresh_bot %d\n", + pos, unicharset.id_to_unichar(unichar_id), + bottom, top, + min_bottom, max_bottom, min_top, max_top, + sub_thresh_bot, sub_thresh_top, + sup_thresh_bot); + } + return retval; +} + +// Returns the script-id (eg Han) of the dominant script in the word. +int WERD_CHOICE::GetTopScriptID() const { + int max_script = unicharset_->get_script_table_size(); + int *sid = new int[max_script]; + int x; + for (x = 0; x < max_script; x++) sid[x] = 0; + for (x = 0; x < length_; ++x) { + int script_id = unicharset_->get_script(unichar_id(x)); + sid[script_id]++; + } + if (unicharset_->han_sid() != unicharset_->null_sid()) { + // Add the Hiragana & Katakana counts to Han and zero them out. + if (unicharset_->hiragana_sid() != unicharset_->null_sid()) { + sid[unicharset_->han_sid()] += sid[unicharset_->hiragana_sid()]; + sid[unicharset_->hiragana_sid()] = 0; + } + if (unicharset_->katakana_sid() != unicharset_->null_sid()) { + sid[unicharset_->han_sid()] += sid[unicharset_->katakana_sid()]; + sid[unicharset_->katakana_sid()] = 0; + } + } + // Note that high script ID overrides lower one on a tie, thus biasing + // towards non-Common script (if sorted that way in unicharset file). + int max_sid = 0; + for (x = 1; x < max_script; x++) + if (sid[x] >= sid[max_sid]) max_sid = x; + if (sid[max_sid] < length_ / 2) + max_sid = unicharset_->null_sid(); + delete[] sid; + return max_sid; +} + +// Fixes the state_ for a chop at the given blob_posiiton. +void WERD_CHOICE::UpdateStateForSplit(int blob_position) { + int total_chunks = 0; + for (int i = 0; i < length_; ++i) { + total_chunks += state_[i]; + if (total_chunks > blob_position) { + ++state_[i]; + return; + } + } +} + +// Returns the sum of all the state elements, being the total number of blobs. +int WERD_CHOICE::TotalOfStates() const { + int total_chunks = 0; + for (int i = 0; i < length_; ++i) { + total_chunks += state_[i]; + } + return total_chunks; +} + +/** + * WERD_CHOICE::print + * + * Print WERD_CHOICE to stdout. + */ +void WERD_CHOICE::print(const char *msg) const { + tprintf("%s : ", msg); + for (int i = 0; i < length_; ++i) { + tprintf("%s", unicharset_->id_to_unichar(unichar_ids_[i])); + } + tprintf(" : R=%g, C=%g, F=%g, Perm=%d, xht=[%g,%g], ambig=%d\n", + rating_, certainty_, adjust_factor_, permuter_, + min_x_height_, max_x_height_, dangerous_ambig_found_); + tprintf("pos"); + for (int i = 0; i < length_; ++i) { + tprintf("\t%s", ScriptPosToString(script_pos_[i])); + } + tprintf("\nstr"); + for (int i = 0; i < length_; ++i) { + tprintf("\t%s", unicharset_->id_to_unichar(unichar_ids_[i])); + } + tprintf("\nstate:"); + for (int i = 0; i < length_; ++i) { + tprintf("\t%d ", state_[i]); + } + tprintf("\nC"); + for (int i = 0; i < length_; ++i) { + tprintf("\t%.3f", certainties_[i]); + } + tprintf("\n"); +} + +// Prints the segmentation state with an introductory message. +void WERD_CHOICE::print_state(const char *msg) const { + tprintf("%s", msg); + for (int i = 0; i < length_; ++i) + tprintf(" %d", state_[i]); + tprintf("\n"); +} + +// Displays the segmentation state of *this (if not the same as the last +// one displayed) and waits for a click in the window. +void WERD_CHOICE::DisplaySegmentation(TWERD* word) { +#ifndef GRAPHICS_DISABLED + // Number of different colors to draw with. + const int kNumColors = 6; + static ScrollView *segm_window = NULL; + // Check the state against the static prev_drawn_state. + static GenericVector prev_drawn_state; + bool already_done = prev_drawn_state.size() == length_; + if (!already_done) prev_drawn_state.init_to_size(length_, 0); + for (int i = 0; i < length_; ++i) { + if (prev_drawn_state[i] != state_[i]) { + already_done = false; + } + prev_drawn_state[i] = state_[i]; + } + if (already_done || word->blobs.empty()) return; + + // Create the window if needed. + if (segm_window == NULL) { + segm_window = new ScrollView("Segmentation", 5, 10, 500, 256, + 2000.0, 256.0, true); + } else { + segm_window->Clear(); + } + + TBOX bbox; + int blob_index = 0; + for (int c = 0; c < length_; ++c) { + ScrollView::Color color = + static_cast(c % kNumColors + 3); + for (int i = 0; i < state_[c]; ++i, ++blob_index) { + TBLOB* blob = word->blobs[blob_index]; + bbox += blob->bounding_box(); + blob->plot(segm_window, color, color); + } + } + segm_window->ZoomToRectangle(bbox.left(), bbox.top(), + bbox.right(), bbox.bottom()); + segm_window->Update(); + window_wait(segm_window); +#endif +} + + +bool EqualIgnoringCaseAndTerminalPunct(const WERD_CHOICE &word1, + const WERD_CHOICE &word2) { + const UNICHARSET *uchset = word1.unicharset(); + if (word2.unicharset() != uchset) return false; + int w1start, w1end; + word1.punct_stripped(&w1start, &w1end); + int w2start, w2end; + word2.punct_stripped(&w2start, &w2end); + if (w1end - w1start != w2end - w2start) return false; + for (int i = 0; i < w1end - w1start; i++) { + if (uchset->to_lower(word1.unichar_id(w1start + i)) != + uchset->to_lower(word2.unichar_id(w2start + i))) { + return false; + } + } + return true; +} + +/** + * print_ratings_list + * + * Send all the ratings out to the logfile. + * + * @param msg intro message + * @param ratings list of ratings + * @param current_unicharset unicharset that can be used + * for id-to-unichar conversion + */ +void print_ratings_list(const char *msg, + BLOB_CHOICE_LIST *ratings, + const UNICHARSET ¤t_unicharset) { + if (ratings->length() == 0) { + tprintf("%s:\n", msg); + return; + } + if (*msg != '\0') { + tprintf("%s\n", msg); + } + BLOB_CHOICE_IT c_it; + c_it.set_to_list(ratings); + for (c_it.mark_cycle_pt(); !c_it.cycled_list(); c_it.forward()) { + c_it.data()->print(¤t_unicharset); + if (!c_it.at_last()) tprintf("\n"); + } + tprintf("\n"); + fflush(stdout); +} diff --git a/3rdparty/hgOCR/include/ccstruct/ratngs.h b/3rdparty/hgOCR/include/ccstruct/ratngs.h new file mode 100644 index 00000000..2ee9c94a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/ratngs.h @@ -0,0 +1,643 @@ +/********************************************************************** + * File: ratngs.h (Formerly ratings.h) + * Description: Definition of the WERD_CHOICE and BLOB_CHOICE classes. + * Author: Ray Smith + * Created: Thu Apr 23 11:40:38 BST 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef RATNGS_H +#define RATNGS_H + +#include + +#include "clst.h" +#include "elst.h" +#include "fontinfo.h" +#include "genericvector.h" +#include "matrix.h" +#include "unichar.h" +#include "unicharset.h" +#include "werd.h" + +class MATRIX; +struct TBLOB; +struct TWERD; + +// Enum to describe the source of a BLOB_CHOICE to make it possible to determine +// whether a blob has been classified by inspecting the BLOB_CHOICEs. +enum BlobChoiceClassifier { + BCC_STATIC_CLASSIFIER, // From the char_norm classifier. + BCC_ADAPTED_CLASSIFIER, // From the adaptive classifier. + BCC_SPECKLE_CLASSIFIER, // Backup for failed classification. + BCC_AMBIG, // Generated by ambiguity detection. + BCC_FAKE, // From some other process. +}; + +class BLOB_CHOICE: public ELIST_LINK +{ + public: + BLOB_CHOICE() { + unichar_id_ = UNICHAR_SPACE; + fontinfo_id_ = -1; + fontinfo_id2_ = -1; + rating_ = 10.0; + certainty_ = -1.0; + script_id_ = -1; + xgap_before_ = 0; + xgap_after_ = 0; + min_xheight_ = 0.0f; + max_xheight_ = 0.0f; + yshift_ = 0.0f; + classifier_ = BCC_FAKE; + } + BLOB_CHOICE(UNICHAR_ID src_unichar_id, // character id + float src_rating, // rating + float src_cert, // certainty + int script_id, // script + float min_xheight, // min xheight in image pixel units + float max_xheight, // max xheight allowed by this char + float yshift, // the larger of y shift (top or bottom) + BlobChoiceClassifier c); // adapted match or other + BLOB_CHOICE(const BLOB_CHOICE &other); + ~BLOB_CHOICE() {} + + UNICHAR_ID unichar_id() const { + return unichar_id_; + } + float rating() const { + return rating_; + } + float certainty() const { + return certainty_; + } + inT16 fontinfo_id() const { + return fontinfo_id_; + } + inT16 fontinfo_id2() const { + return fontinfo_id2_; + } + const GenericVector& fonts() const { + return fonts_; + } + void set_fonts(const GenericVector& fonts) { + fonts_ = fonts; + int score1 = 0, score2 = 0; + fontinfo_id_ = -1; + fontinfo_id2_ = -1; + for (int f = 0; f < fonts_.size(); ++f) { + if (fonts_[f].score > score1) { + score2 = score1; + fontinfo_id2_ = fontinfo_id_; + score1 = fonts_[f].score; + fontinfo_id_ = fonts_[f].fontinfo_id; + } else if (fonts_[f].score > score2) { + score2 = fonts_[f].score; + fontinfo_id2_ = fonts_[f].fontinfo_id; + } + } + } + int script_id() const { + return script_id_; + } + const MATRIX_COORD& matrix_cell() { + return matrix_cell_; + } + inT16 xgap_before() const { + return xgap_before_; + } + inT16 xgap_after() const { + return xgap_after_; + } + float min_xheight() const { + return min_xheight_; + } + float max_xheight() const { + return max_xheight_; + } + float yshift() const { + return yshift_; + } + BlobChoiceClassifier classifier() const { + return classifier_; + } + bool IsAdapted() const { + return classifier_ == BCC_ADAPTED_CLASSIFIER; + } + bool IsClassified() const { + return classifier_ == BCC_STATIC_CLASSIFIER || + classifier_ == BCC_ADAPTED_CLASSIFIER || + classifier_ == BCC_SPECKLE_CLASSIFIER; + } + + void set_unichar_id(UNICHAR_ID newunichar_id) { + unichar_id_ = newunichar_id; + } + void set_rating(float newrat) { + rating_ = newrat; + } + void set_certainty(float newrat) { + certainty_ = newrat; + } + void set_script(int newscript_id) { + script_id_ = newscript_id; + } + void set_matrix_cell(int col, int row) { + matrix_cell_.col = col; + matrix_cell_.row = row; + } + void set_xgap_before(inT16 gap) { + xgap_before_ = gap; + } + void set_xgap_after(inT16 gap) { + xgap_after_ = gap; + } + void set_classifier(BlobChoiceClassifier classifier) { + classifier_ = classifier; + } + static BLOB_CHOICE* deep_copy(const BLOB_CHOICE* src) { + BLOB_CHOICE* choice = new BLOB_CHOICE; + *choice = *src; + return choice; + } + // Returns true if *this and other agree on the baseline and x-height + // to within some tolerance based on a given estimate of the x-height. + bool PosAndSizeAgree(const BLOB_CHOICE& other, float x_height, + bool debug) const; + + void print(const UNICHARSET *unicharset) const { + tprintf("r%.2f c%.2f x[%g,%g]: %d %s", + rating_, certainty_, + min_xheight_, max_xheight_, unichar_id_, + (unicharset == NULL) ? "" : + unicharset->debug_str(unichar_id_).string()); + } + void print_full() const { + print(NULL); + tprintf(" script=%d, font1=%d, font2=%d, yshift=%g, classifier=%d\n", + script_id_, fontinfo_id_, fontinfo_id2_, yshift_, classifier_); + } + // Sort function for sorting BLOB_CHOICEs in increasing order of rating. + static int SortByRating(const void *p1, const void *p2) { + const BLOB_CHOICE *bc1 = + *reinterpret_cast(p1); + const BLOB_CHOICE *bc2 = + *reinterpret_cast(p2); + return (bc1->rating_ < bc2->rating_) ? -1 : 1; + } + + private: + UNICHAR_ID unichar_id_; // unichar id + // Fonts and scores. Allowed to be empty. + GenericVector fonts_; + inT16 fontinfo_id_; // char font information + inT16 fontinfo_id2_; // 2nd choice font information + // Rating is the classifier distance weighted by the length of the outline + // in the blob. In terms of probability, classifier distance is -klog p such + // that the resulting distance is in the range [0, 1] and then + // rating = w (-k log p) where w is the weight for the length of the outline. + // Sums of ratings may be compared meaningfully for words of different + // segmentation. + float rating_; // size related + // Certainty is a number in [-20, 0] indicating the classifier certainty + // of the choice. In terms of probability, certainty = 20 (k log p) where + // k is defined as above to normalize -klog p to the range [0, 1]. + float certainty_; // absolute + int script_id_; + // Holds the position of this choice in the ratings matrix. + // Used to location position in the matrix during path backtracking. + MATRIX_COORD matrix_cell_; + inT16 xgap_before_; + inT16 xgap_after_; + // X-height range (in image pixels) that this classification supports. + float min_xheight_; + float max_xheight_; + // yshift_ - The vertical distance (in image pixels) the character is + // shifted (up or down) from an acceptable y position. + float yshift_; + BlobChoiceClassifier classifier_; // What generated *this. +}; + +// Make BLOB_CHOICE listable. +ELISTIZEH(BLOB_CHOICE) + +// Return the BLOB_CHOICE in bc_list matching a given unichar_id, +// or NULL if there is no match. +BLOB_CHOICE *FindMatchingChoice(UNICHAR_ID char_id, BLOB_CHOICE_LIST *bc_list); + +// Permuter codes used in WERD_CHOICEs. +enum PermuterType { + NO_PERM, // 0 + PUNC_PERM, // 1 + TOP_CHOICE_PERM, // 2 + LOWER_CASE_PERM, // 3 + UPPER_CASE_PERM, // 4 + NGRAM_PERM, // 5 + NUMBER_PERM, // 6 + USER_PATTERN_PERM, // 7 + SYSTEM_DAWG_PERM, // 8 + DOC_DAWG_PERM, // 9 + USER_DAWG_PERM, // 10 + FREQ_DAWG_PERM, // 11 + COMPOUND_PERM, // 12 + + NUM_PERMUTER_TYPES +}; + +namespace tesseract { +// ScriptPos tells whether a character is subscript, superscript or normal. +enum ScriptPos { + SP_NORMAL, + SP_SUBSCRIPT, + SP_SUPERSCRIPT, + SP_DROPCAP +}; + +const char *ScriptPosToString(tesseract::ScriptPos script_pos); + +} // namespace tesseract. + +class TESS_API WERD_CHOICE : public ELIST_LINK { + public: + static const float kBadRating; + static const char *permuter_name(uinT8 permuter); + + WERD_CHOICE(const UNICHARSET *unicharset) + : unicharset_(unicharset) { this->init(8); } + WERD_CHOICE(const UNICHARSET *unicharset, int reserved) + : unicharset_(unicharset) { this->init(reserved); } + WERD_CHOICE(const char *src_string, + const char *src_lengths, + float src_rating, + float src_certainty, + uinT8 src_permuter, + const UNICHARSET &unicharset) + : unicharset_(&unicharset) { + this->init(src_string, src_lengths, src_rating, + src_certainty, src_permuter); + } + WERD_CHOICE(const char *src_string, const UNICHARSET &unicharset); + WERD_CHOICE(const WERD_CHOICE &word) + : ELIST_LINK(word), unicharset_(word.unicharset_) { + this->init(word.length()); + this->operator=(word); + } + ~WERD_CHOICE(); + + const UNICHARSET *unicharset() const { + return unicharset_; + } + inline int length() const { + return length_; + } + float adjust_factor() const { + return adjust_factor_; + } + void set_adjust_factor(float factor) { + adjust_factor_ = factor; + } + inline const UNICHAR_ID *unichar_ids() const { + return unichar_ids_; + } + inline UNICHAR_ID unichar_id(int index) const { + assert(index < length_); + return unichar_ids_[index]; + } + inline int state(int index) const { + return state_[index]; + } + tesseract::ScriptPos BlobPosition(int index) const { + if (index < 0 || index >= length_) + return tesseract::SP_NORMAL; + return script_pos_[index]; + } + inline float rating() const { + return rating_; + } + inline float certainty() const { + return certainty_; + } + inline float certainty(int index) const { + return certainties_[index]; + } + inline float min_x_height() const { + return min_x_height_; + } + inline float max_x_height() const { + return max_x_height_; + } + inline void set_x_heights(float min_height, float max_height) { + min_x_height_ = min_height; + max_x_height_ = max_height; + } + inline uinT8 permuter() const { + return permuter_; + } + const char *permuter_name() const; + // Returns the BLOB_CHOICE_LIST corresponding to the given index in the word, + // taken from the appropriate cell in the ratings MATRIX. + // Borrowed pointer, so do not delete. + BLOB_CHOICE_LIST* blob_choices(int index, MATRIX* ratings) const; + + // Returns the MATRIX_COORD corresponding to the location in the ratings + // MATRIX for the given index into the word. + MATRIX_COORD MatrixCoord(int index) const; + + inline void set_unichar_id(UNICHAR_ID unichar_id, int index) { + assert(index < length_); + unichar_ids_[index] = unichar_id; + } + bool dangerous_ambig_found() const { + return dangerous_ambig_found_; + } + void set_dangerous_ambig_found_(bool value) { + dangerous_ambig_found_ = value; + } + inline void set_rating(float new_val) { + rating_ = new_val; + } + inline void set_certainty(float new_val) { + certainty_ = new_val; + } + inline void set_permuter(uinT8 perm) { + permuter_ = perm; + } + // Note: this function should only be used if all the fields + // are populated manually with set_* functions (rather than + // (copy)constructors and append_* functions). + inline void set_length(int len) { + ASSERT_HOST(reserved_ >= len); + length_ = len; + } + + /// Make more space in unichar_id_ and fragment_lengths_ arrays. + inline void double_the_size() { + if (reserved_ > 0) { + unichar_ids_ = GenericVector::double_the_size_memcpy( + reserved_, unichar_ids_); + script_pos_ = GenericVector::double_the_size_memcpy( + reserved_, script_pos_); + state_ = GenericVector::double_the_size_memcpy( + reserved_, state_); + certainties_ = GenericVector::double_the_size_memcpy( + reserved_, certainties_); + reserved_ *= 2; + } else { + unichar_ids_ = new UNICHAR_ID[1]; + script_pos_ = new tesseract::ScriptPos[1]; + state_ = new int[1]; + certainties_ = new float[1]; + reserved_ = 1; + } + } + + /// Initializes WERD_CHOICE - reserves length slots in unichar_ids_ and + /// fragment_length_ arrays. Sets other values to default (blank) values. + inline void init(int reserved) { + reserved_ = reserved; + if (reserved > 0) { + unichar_ids_ = new UNICHAR_ID[reserved]; + script_pos_ = new tesseract::ScriptPos[reserved]; + state_ = new int[reserved]; + certainties_ = new float[reserved]; + } else { + unichar_ids_ = NULL; + script_pos_ = NULL; + state_ = NULL; + certainties_ = NULL; + } + length_ = 0; + adjust_factor_ = 1.0f; + rating_ = 0.0; + certainty_ = MAX_FLOAT32; + min_x_height_ = 0.0f; + max_x_height_ = MAX_FLOAT32; + permuter_ = NO_PERM; + unichars_in_script_order_ = false; // Tesseract is strict left-to-right. + dangerous_ambig_found_ = false; + } + + /// Helper function to build a WERD_CHOICE from the given string, + /// fragment lengths, rating, certainty and permuter. + /// The function assumes that src_string is not NULL. + /// src_lengths argument could be NULL, in which case the unichars + /// in src_string are assumed to all be of length 1. + void init(const char *src_string, const char *src_lengths, + float src_rating, float src_certainty, + uinT8 src_permuter); + + /// Set the fields in this choice to be default (bad) values. + inline void make_bad() { + length_ = 0; + rating_ = kBadRating; + certainty_ = -MAX_FLOAT32; + } + + /// This function assumes that there is enough space reserved + /// in the WERD_CHOICE for adding another unichar. + /// This is an efficient alternative to append_unichar_id(). + inline void append_unichar_id_space_allocated( + UNICHAR_ID unichar_id, int blob_count, + float rating, float certainty) { + assert(reserved_ > length_); + length_++; + this->set_unichar_id(unichar_id, blob_count, + rating, certainty, length_-1); + } + + void append_unichar_id(UNICHAR_ID unichar_id, int blob_count, + float rating, float certainty); + + inline void set_unichar_id(UNICHAR_ID unichar_id, int blob_count, + float rating, float certainty, int index) { + assert(index < length_); + unichar_ids_[index] = unichar_id; + state_[index] = blob_count; + certainties_[index] = certainty; + script_pos_[index] = tesseract::SP_NORMAL; + rating_ += rating; + if (certainty < certainty_) { + certainty_ = certainty; + } + } + // Sets the entries for the given index from the BLOB_CHOICE, assuming + // unit fragment lengths, but setting the state for this index to blob_count. + void set_blob_choice(int index, int blob_count, + const BLOB_CHOICE* blob_choice); + + bool contains_unichar_id(UNICHAR_ID unichar_id) const; + void remove_unichar_ids(int index, int num); + inline void remove_last_unichar_id() { --length_; } + inline void remove_unichar_id(int index) { + this->remove_unichar_ids(index, 1); + } + bool has_rtl_unichar_id() const; + void reverse_and_mirror_unichar_ids(); + + // Returns the half-open interval of unichar_id indices [start, end) which + // enclose the core portion of this word -- the part after stripping + // punctuation from the left and right. + void punct_stripped(int *start_core, int *end_core) const; + + // Returns the indices [start, end) containing the core of the word, stripped + // of any superscript digits on either side. (i.e., the non-footnote part + // of the word). There is no guarantee that the output range is non-empty. + void GetNonSuperscriptSpan(int *start, int *end) const; + + // Return a copy of this WERD_CHOICE with the choices [start, end). + // The result is useful only for checking against a dictionary. + WERD_CHOICE shallow_copy(int start, int end) const; + + void string_and_lengths(STRING *word_str, STRING *word_lengths_str) const; + const STRING debug_string() const { + STRING word_str; + for (int i = 0; i < length_; ++i) { + word_str += unicharset_->debug_str(unichar_ids_[i]); + word_str += " "; + } + return word_str; + } + + // Call this to override the default (strict left to right graphemes) + // with the fact that some engine produces a "reading order" set of + // Graphemes for each word. + bool set_unichars_in_script_order(bool in_script_order) { + return unichars_in_script_order_ = in_script_order; + } + + bool unichars_in_script_order() const { + return unichars_in_script_order_; + } + + // Returns a UTF-8 string equivalent to the current choice + // of UNICHAR IDs. + const STRING &unichar_string() const { + this->string_and_lengths(&unichar_string_, &unichar_lengths_); + return unichar_string_; + } + + // Returns the lengths, one byte each, representing the number of bytes + // required in the unichar_string for each UNICHAR_ID. + const STRING &unichar_lengths() const { + this->string_and_lengths(&unichar_string_, &unichar_lengths_); + return unichar_lengths_; + } + + // Sets up the script_pos_ member using the blobs_list to get the bln + // bounding boxes, *this to get the unichars, and this->unicharset + // to get the target positions. If small_caps is true, sub/super are not + // considered, but dropcaps are. + // NOTE: blobs_list should be the chopped_word blobs. (Fully segemented.) + void SetScriptPositions(bool small_caps, TWERD* word); + // Sets the script_pos_ member from some source positions with a given length. + void SetScriptPositions(const tesseract::ScriptPos* positions, int length); + // Sets all the script_pos_ positions to the given position. + void SetAllScriptPositions(tesseract::ScriptPos position); + + static tesseract::ScriptPos ScriptPositionOf(bool print_debug, + const UNICHARSET& unicharset, + const TBOX& blob_box, + UNICHAR_ID unichar_id); + + // Returns the "dominant" script ID for the word. By "dominant", the script + // must account for at least half the characters. Otherwise, it returns 0. + // Note that for Japanese, Hiragana and Katakana are simply treated as Han. + int GetTopScriptID() const; + + // Fixes the state_ for a chop at the given blob_posiiton. + void UpdateStateForSplit(int blob_position); + + // Returns the sum of all the state elements, being the total number of blobs. + int TotalOfStates() const; + + void print() const { this->print(""); } + void print(const char *msg) const; + // Prints the segmentation state with an introductory message. + void print_state(const char *msg) const; + + // Displays the segmentation state of *this (if not the same as the last + // one displayed) and waits for a click in the window. + void DisplaySegmentation(TWERD* word); + + WERD_CHOICE& operator+= ( // concatanate + const WERD_CHOICE & second);// second on first + + WERD_CHOICE& operator= (const WERD_CHOICE& source); + + private: + const UNICHARSET *unicharset_; + // TODO(rays) Perhaps replace the multiple arrays with an array of structs? + // unichar_ids_ is an array of classifier "results" that make up a word. + // For each unichar_ids_[i], script_pos_[i] has the sub/super/normal position + // of each unichar_id. + // state_[i] indicates the number of blobs in WERD_RES::chopped_word that + // were put together to make the classification results in the ith position + // in unichar_ids_, and certainties_[i] is the certainty of the choice that + // was used in this word. + // == Change from before == + // Previously there was fragment_lengths_ that allowed a word to be + // artificially composed of multiple fragment results. Since the new + // segmentation search doesn't do fragments, treatment of fragments has + // been moved to a lower level, augmenting the ratings matrix with the + // combined fragments, and allowing the language-model/segmentation-search + // to deal with only the combined unichar_ids. + UNICHAR_ID *unichar_ids_; // unichar ids that represent the text of the word + tesseract::ScriptPos* script_pos_; // Normal/Sub/Superscript of each unichar. + int* state_; // Number of blobs in each unichar. + float* certainties_; // Certainty of each unichar. + int reserved_; // size of the above arrays + int length_; // word length + // Factor that was used to adjust the rating. + float adjust_factor_; + // Rating is the sum of the ratings of the individual blobs in the word. + float rating_; // size related + // certainty is the min (worst) certainty of the individual blobs in the word. + float certainty_; // absolute + // xheight computed from the result, or 0 if inconsistent. + float min_x_height_; + float max_x_height_; + uinT8 permuter_; // permuter code + + // Normally, the ratings_ matrix represents the recognition results in order + // from left-to-right. However, some engines (say Cube) may return + // recognition results in the order of the script's major reading direction + // (for Arabic, that is right-to-left). + bool unichars_in_script_order_; + // True if NoDangerousAmbig found an ambiguity. + bool dangerous_ambig_found_; + + // The following variables are populated and passed by reference any + // time unichar_string() or unichar_lengths() are called. + mutable STRING unichar_string_; + mutable STRING unichar_lengths_; +}; + +// Make WERD_CHOICE listable. +ELISTIZEH(WERD_CHOICE) +typedef GenericVector BLOB_CHOICE_LIST_VECTOR; + +// Utilities for comparing WERD_CHOICEs + +bool EqualIgnoringCaseAndTerminalPunct(const WERD_CHOICE &word1, + const WERD_CHOICE &word2); + +// Utilities for debug printing. +void print_ratings_list( + const char *msg, // intro message + BLOB_CHOICE_LIST *ratings, // list of results + const UNICHARSET ¤t_unicharset // unicharset that can be used + // for id-to-unichar conversion + ); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/rect.cpp b/3rdparty/hgOCR/include/ccstruct/rect.cpp new file mode 100644 index 00000000..4a9fe00b --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/rect.cpp @@ -0,0 +1,263 @@ +/********************************************************************** + * File: rect.c (Formerly box.c) + * Description: Bounding box class definition. + * Author: Phil Cheatle + * Created: Wed Oct 16 15:18:45 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "rect.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +/********************************************************************** + * TBOX::TBOX() Constructor from 2 ICOORDS + * + **********************************************************************/ + +TBOX::TBOX( // constructor + const ICOORD pt1, // one corner + const ICOORD pt2 // the other corner + ) { + if (pt1.x () <= pt2.x ()) { + if (pt1.y () <= pt2.y ()) { + bot_left = pt1; + top_right = pt2; + } + else { + bot_left = ICOORD (pt1.x (), pt2.y ()); + top_right = ICOORD (pt2.x (), pt1.y ()); + } + } + else { + if (pt1.y () <= pt2.y ()) { + bot_left = ICOORD (pt2.x (), pt1.y ()); + top_right = ICOORD (pt1.x (), pt2.y ()); + } + else { + bot_left = pt2; + top_right = pt1; + } + } +} + +/********************************************************************** + * TBOX::TBOX() Constructor from 4 integer values. + * Note: It is caller's responsibility to provide values in the right + * order. + **********************************************************************/ + +TBOX::TBOX( //constructor + inT16 left, inT16 bottom, inT16 right, inT16 top) + : bot_left(left, bottom), top_right(right, top) { +} + +// rotate_large constructs the containing bounding box of all 4 +// corners after rotating them. It therefore guarantees that all +// original content is contained within, but also slightly enlarges the box. +void TBOX::rotate_large(const FCOORD& vec) { + ICOORD top_left(bot_left.x(), top_right.y()); + ICOORD bottom_right(top_right.x(), bot_left.y()); + top_left.rotate(vec); + bottom_right.rotate(vec); + rotate(vec); + TBOX box2(top_left, bottom_right); + *this += box2; +} + +/********************************************************************** + * TBOX::intersection() Build the largest box contained in both boxes + * + **********************************************************************/ + +TBOX TBOX::intersection( //shared area box + const TBOX &box) const { + inT16 left; + inT16 bottom; + inT16 right; + inT16 top; + if (overlap (box)) { + if (box.bot_left.x () > bot_left.x ()) + left = box.bot_left.x (); + else + left = bot_left.x (); + + if (box.top_right.x () < top_right.x ()) + right = box.top_right.x (); + else + right = top_right.x (); + + if (box.bot_left.y () > bot_left.y ()) + bottom = box.bot_left.y (); + else + bottom = bot_left.y (); + + if (box.top_right.y () < top_right.y ()) + top = box.top_right.y (); + else + top = top_right.y (); + } + else { + left = MAX_INT16; + bottom = MAX_INT16; + top = -MAX_INT16; + right = -MAX_INT16; + } + return TBOX (left, bottom, right, top); +} + + +/********************************************************************** + * TBOX::bounding_union() Build the smallest box containing both boxes + * + **********************************************************************/ + +TBOX TBOX::bounding_union( //box enclosing both + const TBOX &box) const { + ICOORD bl; //bottom left + ICOORD tr; //top right + + if (box.bot_left.x () < bot_left.x ()) + bl.set_x (box.bot_left.x ()); + else + bl.set_x (bot_left.x ()); + + if (box.top_right.x () > top_right.x ()) + tr.set_x (box.top_right.x ()); + else + tr.set_x (top_right.x ()); + + if (box.bot_left.y () < bot_left.y ()) + bl.set_y (box.bot_left.y ()); + else + bl.set_y (bot_left.y ()); + + if (box.top_right.y () > top_right.y ()) + tr.set_y (box.top_right.y ()); + else + tr.set_y (top_right.y ()); + return TBOX (bl, tr); +} + + +/********************************************************************** + * TBOX::plot() Paint a box using specified settings + * + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void TBOX::plot( //paint box + ScrollView* fd, //where to paint + ScrollView::Color fill_colour, //colour for inside + ScrollView::Color border_colour //colour for border + ) const { + fd->Brush(fill_colour); + fd->Pen(border_colour); + plot(fd); +} +#endif + +// Appends the bounding box as (%d,%d)->(%d,%d) to a STRING. +void TBOX::print_to_str(STRING *str) const { + // "(%d,%d)->(%d,%d)", left(), bottom(), right(), top() + str->add_str_int("(", left()); + str->add_str_int(",", bottom()); + str->add_str_int(")->(", right()); + str->add_str_int(",", top()); + *str += ')'; +} + +// Writes to the given file. Returns false in case of error. +bool TBOX::Serialize(FILE* fp) const { + if (!bot_left.Serialize(fp)) return false; + if (!top_right.Serialize(fp)) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool TBOX::DeSerialize(bool swap, FILE* fp) { + if (!bot_left.DeSerialize(swap, fp)) return false; + if (!top_right.DeSerialize(swap, fp)) return false; + return true; +} + +/********************************************************************** + * operator+= + * + * Extend one box to include the other (In place union) + **********************************************************************/ + +DLLSYM TBOX & +operator+= ( //bounding bounding bx +TBOX & op1, //operands +const TBOX & op2) { + if (op2.bot_left.x () < op1.bot_left.x ()) + op1.bot_left.set_x (op2.bot_left.x ()); + + if (op2.top_right.x () > op1.top_right.x ()) + op1.top_right.set_x (op2.top_right.x ()); + + if (op2.bot_left.y () < op1.bot_left.y ()) + op1.bot_left.set_y (op2.bot_left.y ()); + + if (op2.top_right.y () > op1.top_right.y ()) + op1.top_right.set_y (op2.top_right.y ()); + + return op1; +} + + +/********************************************************************** + * operator&= + * + * Reduce one box to intersection with the other (In place intersection) + **********************************************************************/ + +TBOX& operator&=(TBOX& op1, const TBOX& op2) { + if (op1.overlap (op2)) { + if (op2.bot_left.x () > op1.bot_left.x ()) + op1.bot_left.set_x (op2.bot_left.x ()); + + if (op2.top_right.x () < op1.top_right.x ()) + op1.top_right.set_x (op2.top_right.x ()); + + if (op2.bot_left.y () > op1.bot_left.y ()) + op1.bot_left.set_y (op2.bot_left.y ()); + + if (op2.top_right.y () < op1.top_right.y ()) + op1.top_right.set_y (op2.top_right.y ()); + } + else { + op1.bot_left.set_x (MAX_INT16); + op1.bot_left.set_y (MAX_INT16); + op1.top_right.set_x (-MAX_INT16); + op1.top_right.set_y (-MAX_INT16); + } + return op1; +} + +bool TBOX::x_almost_equal(const TBOX &box, int tolerance) const { + return (abs(left() - box.left()) <= tolerance && + abs(right() - box.right()) <= tolerance); +} + +bool TBOX::almost_equal(const TBOX &box, int tolerance) const { + return (abs(left() - box.left()) <= tolerance && + abs(right() - box.right()) <= tolerance && + abs(top() - box.top()) <= tolerance && + abs(bottom() - box.bottom()) <= tolerance); +} diff --git a/3rdparty/hgOCR/include/ccstruct/rect.h b/3rdparty/hgOCR/include/ccstruct/rect.h new file mode 100644 index 00000000..f31247a1 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/rect.h @@ -0,0 +1,484 @@ +/********************************************************************** + * File: rect.h (Formerly box.h) + * Description: Bounding box class definition. + * Author: Phil Cheatle + * Created: Wed Oct 16 15:18:45 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef RECT_H +#define RECT_H + +#include +#include "points.h" +#include "ndminx.h" +#include "scrollview.h" +#include "strngs.h" +#include "tprintf.h" + +class DLLSYM TBOX { // bounding box + public: + TBOX (): // empty constructor making a null box + bot_left (MAX_INT16, MAX_INT16), top_right (-MAX_INT16, -MAX_INT16) { + } + + TBOX( // constructor + const ICOORD pt1, // one corner + const ICOORD pt2); // the other corner + + TBOX( // constructor + inT16 left, inT16 bottom, inT16 right, inT16 top); + + TBOX( // box around FCOORD + const FCOORD pt); + + bool null_box() const { // Is box null + return ((left () >= right ()) || (top () <= bottom ())); + } + + bool operator==(const TBOX& other) const { + return bot_left == other.bot_left && top_right == other.top_right; + } + + inT16 top() const { // coord of top + return top_right.y (); + } + void set_top(int y) { + top_right.set_y(y); + } + + inT16 bottom() const { // coord of bottom + return bot_left.y (); + } + void set_bottom(int y) { + bot_left.set_y(y); + } + + inT16 left() const { // coord of left + return bot_left.x (); + } + void set_left(int x) { + bot_left.set_x(x); + } + + inT16 right() const { // coord of right + return top_right.x (); + } + void set_right(int x) { + top_right.set_x(x); + } + int x_middle() const { + return (bot_left.x() + top_right.x()) / 2; + } + int y_middle() const { + return (bot_left.y() + top_right.y()) / 2; + } + + const ICOORD &botleft() const { // access function + return bot_left; + } + + ICOORD botright() const { // ~ access function + return ICOORD (top_right.x (), bot_left.y ()); + } + + ICOORD topleft() const { // ~ access function + return ICOORD (bot_left.x (), top_right.y ()); + } + + const ICOORD &topright() const { // access function + return top_right; + } + + inT16 height() const { // how high is it? + if (!null_box ()) + return top_right.y () - bot_left.y (); + else + return 0; + } + + inT16 width() const { // how high is it? + if (!null_box ()) + return top_right.x () - bot_left.x (); + else + return 0; + } + + inT32 area() const { // what is the area? + if (!null_box ()) + return width () * height (); + else + return 0; + } + + // Pads the box on either side by the supplied x,y pad amounts. + // NO checks for exceeding any bounds like 0 or an image size. + void pad(int xpad, int ypad) { + ICOORD pad(xpad, ypad); + bot_left -= pad; + top_right += pad; + } + + void move_bottom_edge( // move one edge + const inT16 y) { // by +/- y + bot_left += ICOORD (0, y); + } + + void move_left_edge( // move one edge + const inT16 x) { // by +/- x + bot_left += ICOORD (x, 0); + } + + void move_right_edge( // move one edge + const inT16 x) { // by +/- x + top_right += ICOORD (x, 0); + } + + void move_top_edge( // move one edge + const inT16 y) { // by +/- y + top_right += ICOORD (0, y); + } + + void move( // move box + const ICOORD vec) { // by vector + bot_left += vec; + top_right += vec; + } + + void move( // move box + const FCOORD vec) { // by float vector + bot_left.set_x ((inT16) floor (bot_left.x () + vec.x ())); + // round left + bot_left.set_y ((inT16) floor (bot_left.y () + vec.y ())); + // round down + top_right.set_x ((inT16) ceil (top_right.x () + vec.x ())); + // round right + top_right.set_y ((inT16) ceil (top_right.y () + vec.y ())); + // round up + } + + void scale( // scale box + const float f) { // by multiplier + bot_left.set_x ((inT16) floor (bot_left.x () * f)); // round left + bot_left.set_y ((inT16) floor (bot_left.y () * f)); // round down + top_right.set_x ((inT16) ceil (top_right.x () * f)); // round right + top_right.set_y ((inT16) ceil (top_right.y () * f)); // round up + } + void scale( // scale box + const FCOORD vec) { // by float vector + bot_left.set_x ((inT16) floor (bot_left.x () * vec.x ())); + bot_left.set_y ((inT16) floor (bot_left.y () * vec.y ())); + top_right.set_x ((inT16) ceil (top_right.x () * vec.x ())); + top_right.set_y ((inT16) ceil (top_right.y () * vec.y ())); + } + + // rotate doesn't enlarge the box - it just rotates the bottom-left + // and top-right corners. Use rotate_large if you want to guarantee + // that all content is contained within the rotated box. + void rotate(const FCOORD& vec) { // by vector + bot_left.rotate (vec); + top_right.rotate (vec); + *this = TBOX (bot_left, top_right); + } + // rotate_large constructs the containing bounding box of all 4 + // corners after rotating them. It therefore guarantees that all + // original content is contained within, but also slightly enlarges the box. + void rotate_large(const FCOORD& vec); + + bool contains( // is pt inside box + const FCOORD pt) const; + + bool contains( // is box inside box + const TBOX &box) const; + + bool overlap( // do boxes overlap + const TBOX &box) const; + + bool major_overlap( // do boxes overlap more than half + const TBOX &box) const; + + // Do boxes overlap on x axis. + bool x_overlap(const TBOX &box) const; + + // Return the horizontal gap between the boxes. If the boxes + // overlap horizontally then the return value is negative, indicating + // the amount of the overlap. + int x_gap(const TBOX& box) const { + return MAX(bot_left.x(), box.bot_left.x()) - + MIN(top_right.x(), box.top_right.x()); + } + + // Return the vertical gap between the boxes. If the boxes + // overlap vertically then the return value is negative, indicating + // the amount of the overlap. + int y_gap(const TBOX& box) const { + return MAX(bot_left.y(), box.bot_left.y()) - + MIN(top_right.y(), box.top_right.y()); + } + + // Do boxes overlap on x axis by more than + // half of the width of the narrower box. + bool major_x_overlap(const TBOX &box) const; + + // Do boxes overlap on y axis. + bool y_overlap(const TBOX &box) const; + + // Do boxes overlap on y axis by more than + // half of the height of the shorter box. + bool major_y_overlap(const TBOX &box) const; + + // fraction of current box's area covered by other + double overlap_fraction(const TBOX &box) const; + + // fraction of the current box's projected area covered by the other's + double x_overlap_fraction(const TBOX& box) const; + + // fraction of the current box's projected area covered by the other's + double y_overlap_fraction(const TBOX& box) const; + + // Returns true if the boxes are almost equal on x axis. + bool x_almost_equal(const TBOX &box, int tolerance) const; + + // Returns true if the boxes are almost equal + bool almost_equal(const TBOX &box, int tolerance) const; + + TBOX intersection( // shared area box + const TBOX &box) const; + + TBOX bounding_union( // box enclosing both + const TBOX &box) const; + + // Sets the box boundaries to the given coordinates. + void set_to_given_coords(int x_min, int y_min, int x_max, int y_max) { + bot_left.set_x(x_min); + bot_left.set_y(y_min); + top_right.set_x(x_max); + top_right.set_y(y_max); + } + + void print() const { // print + tprintf("Bounding box=(%d,%d)->(%d,%d)\n", + left(), bottom(), right(), top()); + } + // Appends the bounding box as (%d,%d)->(%d,%d) to a STRING. + void print_to_str(STRING *str) const; + +#ifndef GRAPHICS_DISABLED + void plot( // use current settings + ScrollView* fd) const { // where to paint + fd->Rectangle(bot_left.x (), bot_left.y (), top_right.x (), + top_right.y ()); + } + + void plot( // paint box + ScrollView* fd, // where to paint + ScrollView::Color fill_colour, // colour for inside + ScrollView::Color border_colour) const; // colour for border +#endif + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + friend TBOX& operator+=(TBOX&, const TBOX&); + // in place union + friend TBOX& operator&=(TBOX&, const TBOX&); + // in place intersection + + private: + ICOORD bot_left; // bottom left corner + ICOORD top_right; // top right corner +}; + +/********************************************************************** + * TBOX::TBOX() Constructor from 1 FCOORD + * + **********************************************************************/ + +inline TBOX::TBOX( // constructor + const FCOORD pt // floating centre + ) { + bot_left = ICOORD ((inT16) floor (pt.x ()), (inT16) floor (pt.y ())); + top_right = ICOORD ((inT16) ceil (pt.x ()), (inT16) ceil (pt.y ())); +} + + +/********************************************************************** + * TBOX::contains() Is point within box + * + **********************************************************************/ + +inline bool TBOX::contains(const FCOORD pt) const { + return ((pt.x () >= bot_left.x ()) && + (pt.x () <= top_right.x ()) && + (pt.y () >= bot_left.y ()) && (pt.y () <= top_right.y ())); +} + + +/********************************************************************** + * TBOX::contains() Is box within box + * + **********************************************************************/ + +inline bool TBOX::contains(const TBOX &box) const { + return (contains (box.bot_left) && contains (box.top_right)); +} + + +/********************************************************************** + * TBOX::overlap() Do two boxes overlap? + * + **********************************************************************/ + +inline bool TBOX::overlap( // do boxes overlap + const TBOX &box) const { + return ((box.bot_left.x () <= top_right.x ()) && + (box.top_right.x () >= bot_left.x ()) && + (box.bot_left.y () <= top_right.y ()) && + (box.top_right.y () >= bot_left.y ())); +} + +/********************************************************************** + * TBOX::major_overlap() Do two boxes overlap by at least half of the smallest? + * + **********************************************************************/ + +inline bool TBOX::major_overlap( // Do boxes overlap more that half. + const TBOX &box) const { + int overlap = MIN(box.top_right.x(), top_right.x()); + overlap -= MAX(box.bot_left.x(), bot_left.x()); + overlap += overlap; + if (overlap < MIN(box.width(), width())) + return false; + overlap = MIN(box.top_right.y(), top_right.y()); + overlap -= MAX(box.bot_left.y(), bot_left.y()); + overlap += overlap; + if (overlap < MIN(box.height(), height())) + return false; + return true; +} + +/********************************************************************** + * TBOX::overlap_fraction() Fraction of area covered by the other box + * + **********************************************************************/ + +inline double TBOX::overlap_fraction(const TBOX &box) const { + double fraction = 0.0; + if (this->area()) { + fraction = this->intersection(box).area() * 1.0 / this->area(); + } + return fraction; +} + +/********************************************************************** + * TBOX::x_overlap() Do two boxes overlap on x-axis + * + **********************************************************************/ + +inline bool TBOX::x_overlap(const TBOX &box) const { + return ((box.bot_left.x() <= top_right.x()) && + (box.top_right.x() >= bot_left.x())); +} + +/********************************************************************** + * TBOX::major_x_overlap() Do two boxes overlap by more than half the + * width of the narrower box on the x-axis + * + **********************************************************************/ + +inline bool TBOX::major_x_overlap(const TBOX &box) const { + inT16 overlap = box.width(); + if (this->left() > box.left()) { + overlap -= this->left() - box.left(); + } + if (this->right() < box.right()) { + overlap -= box.right() - this->right(); + } + return (overlap >= box.width() / 2 || overlap >= this->width() / 2); +} + +/********************************************************************** + * TBOX::y_overlap() Do two boxes overlap on y-axis + * + **********************************************************************/ + +inline bool TBOX::y_overlap(const TBOX &box) const { + return ((box.bot_left.y() <= top_right.y()) && + (box.top_right.y() >= bot_left.y())); +} + +/********************************************************************** + * TBOX::major_y_overlap() Do two boxes overlap by more than half the + * height of the shorter box on the y-axis + * + **********************************************************************/ + +inline bool TBOX::major_y_overlap(const TBOX &box) const { + inT16 overlap = box.height(); + if (this->bottom() > box.bottom()) { + overlap -= this->bottom() - box.bottom(); + } + if (this->top() < box.top()) { + overlap -= box.top() - this->top(); + } + return (overlap >= box.height() / 2 || overlap >= this->height() / 2); +} + +/********************************************************************** + * TBOX::x_overlap_fraction() Calculates the horizontal overlap of the + * given boxes as a fraction of this boxes + * width. + * + **********************************************************************/ + +inline double TBOX::x_overlap_fraction(const TBOX& other) const { + int low = MAX(left(), other.left()); + int high = MIN(right(), other.right()); + int width = right() - left(); + if (width == 0) { + int x = left(); + if (other.left() <= x && x <= other.right()) + return 1.0; + else + return 0.0; + } else { + return MAX(0, static_cast(high - low) / width); + } +} + +/********************************************************************** + * TBOX::y_overlap_fraction() Calculates the vertical overlap of the + * given boxes as a fraction of this boxes + * height. + * + **********************************************************************/ + +inline double TBOX::y_overlap_fraction(const TBOX& other) const { + int low = MAX(bottom(), other.bottom()); + int high = MIN(top(), other.top()); + int height = top() - bottom(); + if (height == 0) { + int y = bottom(); + if (other.bottom() <= y && y <= other.top()) + return 1.0; + else + return 0.0; + } else { + return MAX(0, static_cast(high - low) / height); + } +} + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/rejctmap.cpp b/3rdparty/hgOCR/include/ccstruct/rejctmap.cpp new file mode 100644 index 00000000..a2910675 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/rejctmap.cpp @@ -0,0 +1,521 @@ +/********************************************************************** + * File: rejctmap.cpp (Formerly rejmap.c) + * Description: REJ and REJMAP class functions. + * Author: Phil Cheatle + * Created: Thu Jun 9 13:46:38 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "host.h" +#include "rejctmap.h" +#include "params.h" + +BOOL8 REJ::perm_rejected() { //Is char perm reject? + return (flag (R_TESS_FAILURE) || + flag (R_SMALL_XHT) || + flag (R_EDGE_CHAR) || + flag (R_1IL_CONFLICT) || + flag (R_POSTNN_1IL) || + flag (R_REJ_CBLOB) || + flag (R_BAD_REPETITION) || flag (R_MM_REJECT)); +} + + +BOOL8 REJ::rej_before_nn_accept() { + return flag (R_POOR_MATCH) || + flag (R_NOT_TESS_ACCEPTED) || + flag (R_CONTAINS_BLANKS) || flag (R_BAD_PERMUTER); +} + + +BOOL8 REJ::rej_between_nn_and_mm() { + return flag (R_HYPHEN) || + flag (R_DUBIOUS) || + flag (R_NO_ALPHANUMS) || flag (R_MOSTLY_REJ) || flag (R_XHT_FIXUP); +} + + +BOOL8 REJ::rej_between_mm_and_quality_accept() { + return flag (R_BAD_QUALITY); +} + + +BOOL8 REJ::rej_between_quality_and_minimal_rej_accept() { + return flag (R_DOC_REJ) || + flag (R_BLOCK_REJ) || flag (R_ROW_REJ) || flag (R_UNLV_REJ); +} + + +BOOL8 REJ::rej_before_mm_accept() { + return rej_between_nn_and_mm () || + (rej_before_nn_accept () && + !flag (R_NN_ACCEPT) && !flag (R_HYPHEN_ACCEPT)); +} + + +BOOL8 REJ::rej_before_quality_accept() { + return rej_between_mm_and_quality_accept () || + (!flag (R_MM_ACCEPT) && rej_before_mm_accept ()); +} + + +BOOL8 REJ::rejected() { //Is char rejected? + if (flag (R_MINIMAL_REJ_ACCEPT)) + return FALSE; + else + return (perm_rejected () || + rej_between_quality_and_minimal_rej_accept () || + (!flag (R_QUALITY_ACCEPT) && rej_before_quality_accept ())); +} + + +BOOL8 REJ::accept_if_good_quality() { //potential rej? + return (rejected () && + !perm_rejected () && + flag (R_BAD_PERMUTER) && + !flag (R_POOR_MATCH) && + !flag (R_NOT_TESS_ACCEPTED) && + !flag (R_CONTAINS_BLANKS) && + (!rej_between_nn_and_mm () && + !rej_between_mm_and_quality_accept () && + !rej_between_quality_and_minimal_rej_accept ())); +} + + +void REJ::setrej_tess_failure() { //Tess generated blank + set_flag(R_TESS_FAILURE); +} + + +void REJ::setrej_small_xht() { //Small xht char/wd + set_flag(R_SMALL_XHT); +} + + +void REJ::setrej_edge_char() { //Close to image edge + set_flag(R_EDGE_CHAR); +} + + +void REJ::setrej_1Il_conflict() { //Initial reject map + set_flag(R_1IL_CONFLICT); +} + + +void REJ::setrej_postNN_1Il() { //1Il after NN + set_flag(R_POSTNN_1IL); +} + + +void REJ::setrej_rej_cblob() { //Insert duff blob + set_flag(R_REJ_CBLOB); +} + + +void REJ::setrej_mm_reject() { //Matrix matcher + set_flag(R_MM_REJECT); +} + + +void REJ::setrej_bad_repetition() { //Odd repeated char + set_flag(R_BAD_REPETITION); +} + + +void REJ::setrej_poor_match() { //Failed Rays heuristic + set_flag(R_POOR_MATCH); +} + + +void REJ::setrej_not_tess_accepted() { + //TEMP reject_word + set_flag(R_NOT_TESS_ACCEPTED); +} + + +void REJ::setrej_contains_blanks() { + //TEMP reject_word + set_flag(R_CONTAINS_BLANKS); +} + + +void REJ::setrej_bad_permuter() { //POTENTIAL reject_word + set_flag(R_BAD_PERMUTER); +} + + +void REJ::setrej_hyphen() { //PostNN dubious hyphen or . + set_flag(R_HYPHEN); +} + + +void REJ::setrej_dubious() { //PostNN dubious limit + set_flag(R_DUBIOUS); +} + + +void REJ::setrej_no_alphanums() { //TEMP reject_word + set_flag(R_NO_ALPHANUMS); +} + + +void REJ::setrej_mostly_rej() { //TEMP reject_word + set_flag(R_MOSTLY_REJ); +} + + +void REJ::setrej_xht_fixup() { //xht fixup + set_flag(R_XHT_FIXUP); +} + + +void REJ::setrej_bad_quality() { //TEMP reject_word + set_flag(R_BAD_QUALITY); +} + + +void REJ::setrej_doc_rej() { //TEMP reject_word + set_flag(R_DOC_REJ); +} + + +void REJ::setrej_block_rej() { //TEMP reject_word + set_flag(R_BLOCK_REJ); +} + + +void REJ::setrej_row_rej() { //TEMP reject_word + set_flag(R_ROW_REJ); +} + + +void REJ::setrej_unlv_rej() { //TEMP reject_word + set_flag(R_UNLV_REJ); +} + + +void REJ::setrej_hyphen_accept() { //NN Flipped a char + set_flag(R_HYPHEN_ACCEPT); +} + + +void REJ::setrej_nn_accept() { //NN Flipped a char + set_flag(R_NN_ACCEPT); +} + + +void REJ::setrej_mm_accept() { //Matrix matcher + set_flag(R_MM_ACCEPT); +} + + +void REJ::setrej_quality_accept() { //Quality flip a char + set_flag(R_QUALITY_ACCEPT); +} + + +void REJ::setrej_minimal_rej_accept() { + //Accept all except blank + set_flag(R_MINIMAL_REJ_ACCEPT); +} + + +void REJ::full_print(FILE *fp) { + fprintf (fp, "R_TESS_FAILURE: %s\n", flag (R_TESS_FAILURE) ? "T" : "F"); + fprintf (fp, "R_SMALL_XHT: %s\n", flag (R_SMALL_XHT) ? "T" : "F"); + fprintf (fp, "R_EDGE_CHAR: %s\n", flag (R_EDGE_CHAR) ? "T" : "F"); + fprintf (fp, "R_1IL_CONFLICT: %s\n", flag (R_1IL_CONFLICT) ? "T" : "F"); + fprintf (fp, "R_POSTNN_1IL: %s\n", flag (R_POSTNN_1IL) ? "T" : "F"); + fprintf (fp, "R_REJ_CBLOB: %s\n", flag (R_REJ_CBLOB) ? "T" : "F"); + fprintf (fp, "R_MM_REJECT: %s\n", flag (R_MM_REJECT) ? "T" : "F"); + fprintf (fp, "R_BAD_REPETITION: %s\n", flag (R_BAD_REPETITION) ? "T" : "F"); + fprintf (fp, "R_POOR_MATCH: %s\n", flag (R_POOR_MATCH) ? "T" : "F"); + fprintf (fp, "R_NOT_TESS_ACCEPTED: %s\n", + flag (R_NOT_TESS_ACCEPTED) ? "T" : "F"); + fprintf (fp, "R_CONTAINS_BLANKS: %s\n", + flag (R_CONTAINS_BLANKS) ? "T" : "F"); + fprintf (fp, "R_BAD_PERMUTER: %s\n", flag (R_BAD_PERMUTER) ? "T" : "F"); + fprintf (fp, "R_HYPHEN: %s\n", flag (R_HYPHEN) ? "T" : "F"); + fprintf (fp, "R_DUBIOUS: %s\n", flag (R_DUBIOUS) ? "T" : "F"); + fprintf (fp, "R_NO_ALPHANUMS: %s\n", flag (R_NO_ALPHANUMS) ? "T" : "F"); + fprintf (fp, "R_MOSTLY_REJ: %s\n", flag (R_MOSTLY_REJ) ? "T" : "F"); + fprintf (fp, "R_XHT_FIXUP: %s\n", flag (R_XHT_FIXUP) ? "T" : "F"); + fprintf (fp, "R_BAD_QUALITY: %s\n", flag (R_BAD_QUALITY) ? "T" : "F"); + fprintf (fp, "R_DOC_REJ: %s\n", flag (R_DOC_REJ) ? "T" : "F"); + fprintf (fp, "R_BLOCK_REJ: %s\n", flag (R_BLOCK_REJ) ? "T" : "F"); + fprintf (fp, "R_ROW_REJ: %s\n", flag (R_ROW_REJ) ? "T" : "F"); + fprintf (fp, "R_UNLV_REJ: %s\n", flag (R_UNLV_REJ) ? "T" : "F"); + fprintf (fp, "R_HYPHEN_ACCEPT: %s\n", flag (R_HYPHEN_ACCEPT) ? "T" : "F"); + fprintf (fp, "R_NN_ACCEPT: %s\n", flag (R_NN_ACCEPT) ? "T" : "F"); + fprintf (fp, "R_MM_ACCEPT: %s\n", flag (R_MM_ACCEPT) ? "T" : "F"); + fprintf (fp, "R_QUALITY_ACCEPT: %s\n", flag (R_QUALITY_ACCEPT) ? "T" : "F"); + fprintf (fp, "R_MINIMAL_REJ_ACCEPT: %s\n", + flag (R_MINIMAL_REJ_ACCEPT) ? "T" : "F"); +} + + +//The REJMAP class has been hacked to use alloc_struct instead of new []. +//This is to reduce memory fragmentation only as it is rather kludgy. +//alloc_struct by-passes the call to the constructor of REJ on each +//array element. Although the constructor is empty, the BITS16 members +//do have a constructor which sets all the flags to 0. The memset +//replaces this functionality. + +REJMAP::REJMAP( //classwise copy + const REJMAP &source) { + REJ *to; + REJ *from = source.ptr; + int i; + + len = source.length (); + + if (len > 0) { + ptr = (REJ *) alloc_struct (len * sizeof (REJ), "REJ"); + to = ptr; + for (i = 0; i < len; i++) { + *to = *from; + to++; + from++; + } + } + else + ptr = NULL; +} + + +REJMAP & REJMAP::operator= ( //assign REJMAP +const REJMAP & source //from this +) { + REJ * + to; + REJ * + from = source.ptr; + int + i; + + initialise (source.len); + to = ptr; + for (i = 0; i < len; i++) { + *to = *from; + to++; + from++; + } + return *this; +} + + +void REJMAP::initialise( //Redefine map + inT16 length) { + if (ptr != NULL) + free_struct (ptr, len * sizeof (REJ), "REJ"); + len = length; + if (len > 0) + ptr = (REJ *) memset (alloc_struct (len * sizeof (REJ), "REJ"), + 0, len * sizeof (REJ)); + else + ptr = NULL; +} + + +inT16 REJMAP::accept_count() { //How many accepted? + int i; + inT16 count = 0; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted ()) + count++; + } + return count; +} + + +BOOL8 REJMAP::recoverable_rejects() { //Any non perm rejs? + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].recoverable ()) + return TRUE; + } + return FALSE; +} + + +BOOL8 REJMAP::quality_recoverable_rejects() { //Any potential rejs? + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accept_if_good_quality ()) + return TRUE; + } + return FALSE; +} + + +void REJMAP::remove_pos( //Cut out an element + inT16 pos //element to remove + ) { + REJ *new_ptr; //new, smaller map + int i; + + ASSERT_HOST (pos >= 0); + ASSERT_HOST (pos < len); + ASSERT_HOST (len > 0); + + len--; + if (len > 0) + new_ptr = (REJ *) memset (alloc_struct (len * sizeof (REJ), "REJ"), + 0, len * sizeof (REJ)); + else + new_ptr = NULL; + + for (i = 0; i < pos; i++) + new_ptr[i] = ptr[i]; //copy pre pos + + for (; pos < len; pos++) + new_ptr[pos] = ptr[pos + 1]; //copy post pos + + //delete old map + free_struct (ptr, (len + 1) * sizeof (REJ), "REJ"); + ptr = new_ptr; +} + + +void REJMAP::print(FILE *fp) { + int i; + char buff[512]; + + for (i = 0; i < len; i++) { + buff[i] = ptr[i].display_char (); + } + buff[i] = '\0'; + fprintf (fp, "\"%s\"", buff); +} + + +void REJMAP::full_print(FILE *fp) { + int i; + + for (i = 0; i < len; i++) { + ptr[i].full_print (fp); + fprintf (fp, "\n"); + } +} + + +void REJMAP::rej_word_small_xht() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + ptr[i].setrej_small_xht (); + } +} + + +void REJMAP::rej_word_tess_failure() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + ptr[i].setrej_tess_failure (); + } +} + + +void REJMAP::rej_word_not_tess_accepted() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_not_tess_accepted(); + } +} + + +void REJMAP::rej_word_contains_blanks() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_contains_blanks(); + } +} + + +void REJMAP::rej_word_bad_permuter() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_bad_permuter (); + } +} + + +void REJMAP::rej_word_xht_fixup() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_xht_fixup(); + } +} + + +void REJMAP::rej_word_no_alphanums() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_no_alphanums(); + } +} + + +void REJMAP::rej_word_mostly_rej() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_mostly_rej(); + } +} + + +void REJMAP::rej_word_bad_quality() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_bad_quality(); + } +} + + +void REJMAP::rej_word_doc_rej() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_doc_rej(); + } +} + + +void REJMAP::rej_word_block_rej() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_block_rej(); + } +} + + +void REJMAP::rej_word_row_rej() { //Reject whole word + int i; + + for (i = 0; i < len; i++) { + if (ptr[i].accepted()) ptr[i].setrej_row_rej(); + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/rejctmap.h b/3rdparty/hgOCR/include/ccstruct/rejctmap.h new file mode 100644 index 00000000..009ba58a --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/rejctmap.h @@ -0,0 +1,276 @@ +/********************************************************************** + * File: rejctmap.h (Formerly rejmap.h) + * Description: REJ and REJMAP class functions. + * Author: Phil Cheatle + * Created: Thu Jun 9 13:46:38 BST 1994 + * + * (C) Copyright 1994, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + +This module may look unnecessarily verbose, but here's the philosophy... + +ALL processing of the reject map is done in this module. There are lots of +separate calls to set reject/accept flags. These have DELIBERATELY been kept +distinct so that this module can decide what to do. + +Basically, there is a flag for each sort of rejection or acceptance. This +provides a history of what has happened to EACH character. + +Determining whether a character is CURRENTLY rejected depends on implicit +understanding of the SEQUENCE of possible calls. The flags are defined and +grouped in the REJ_FLAGS enum. These groupings are used in determining a +characters CURRENT rejection status. Basically, a character is ACCEPTED if + + none of the permanent rej flags are set + AND ( the character has never been rejected + OR an accept flag is set which is LATER than the latest reject flag ) + +IT IS FUNDAMENTAL THAT ANYONE HACKING THIS CODE UNDERSTANDS THE SIGNIFICANCE +OF THIS IMPLIED TEMPORAL ORDERING OF THE FLAGS!!!! +**********************************************************************/ + +#ifndef REJCTMAP_H +#define REJCTMAP_H + +#ifdef __UNIX__ +#include +#endif +#include "memry.h" +#include "bits16.h" +#include "params.h" + +enum REJ_FLAGS { + /* Reject modes which are NEVER overridden */ + R_TESS_FAILURE, // PERM Tess didn't classify + R_SMALL_XHT, // PERM Xht too small + R_EDGE_CHAR, // PERM Too close to edge of image + R_1IL_CONFLICT, // PERM 1Il confusion + R_POSTNN_1IL, // PERM 1Il unrejected by NN + R_REJ_CBLOB, // PERM Odd blob + R_MM_REJECT, // PERM Matrix match rejection (m's) + R_BAD_REPETITION, // TEMP Repeated char which doesn't match trend + + /* Initial reject modes (pre NN_ACCEPT) */ + R_POOR_MATCH, // TEMP Ray's original heuristic (Not used) + R_NOT_TESS_ACCEPTED, // TEMP Tess didn't accept WERD + R_CONTAINS_BLANKS, // TEMP Tess failed on other chs in WERD + R_BAD_PERMUTER, // POTENTIAL Bad permuter for WERD + + /* Reject modes generated after NN_ACCEPT but before MM_ACCEPT */ + R_HYPHEN, // TEMP Post NN dodgy hyphen or full stop + R_DUBIOUS, // TEMP Post NN dodgy chars + R_NO_ALPHANUMS, // TEMP No alphanumerics in word after NN + R_MOSTLY_REJ, // TEMP Most of word rejected so rej the rest + R_XHT_FIXUP, // TEMP Xht tests unsure + + /* Reject modes generated after MM_ACCEPT but before QUALITY_ACCEPT */ + R_BAD_QUALITY, // TEMP Quality metrics bad for WERD + + /* Reject modes generated after QUALITY_ACCEPT but before MINIMAL_REJ accep*/ + R_DOC_REJ, // TEMP Document rejection + R_BLOCK_REJ, // TEMP Block rejection + R_ROW_REJ, // TEMP Row rejection + R_UNLV_REJ, // TEMP ~ turned to - or ^ turned to space + + /* Accept modes which occur between the above rejection groups */ + R_NN_ACCEPT, // NN acceptance + R_HYPHEN_ACCEPT, // Hyphen acceptance + R_MM_ACCEPT, // Matrix match acceptance + R_QUALITY_ACCEPT, // Accept word in good quality doc + R_MINIMAL_REJ_ACCEPT // Accept EVERYTHING except tess failures +}; + +/* REJECT MAP VALUES */ + +#define MAP_ACCEPT '1' +#define MAP_REJECT_PERM '0' +#define MAP_REJECT_TEMP '2' +#define MAP_REJECT_POTENTIAL '3' + +class REJ +{ + BITS16 flags1; + BITS16 flags2; + + void set_flag(REJ_FLAGS rej_flag) { + if (rej_flag < 16) + flags1.turn_on_bit (rej_flag); + else + flags2.turn_on_bit (rej_flag - 16); + } + + BOOL8 rej_before_nn_accept(); + BOOL8 rej_between_nn_and_mm(); + BOOL8 rej_between_mm_and_quality_accept(); + BOOL8 rej_between_quality_and_minimal_rej_accept(); + BOOL8 rej_before_mm_accept(); + BOOL8 rej_before_quality_accept(); + + public: + REJ() { //constructor + } + + REJ( //classwise copy + const REJ &source) { + flags1 = source.flags1; + flags2 = source.flags2; + } + + REJ & operator= ( //assign REJ + const REJ & source) { //from this + flags1 = source.flags1; + flags2 = source.flags2; + return *this; + } + + BOOL8 flag(REJ_FLAGS rej_flag) { + if (rej_flag < 16) + return flags1.bit (rej_flag); + else + return flags2.bit (rej_flag - 16); + } + + char display_char() { + if (perm_rejected ()) + return MAP_REJECT_PERM; + else if (accept_if_good_quality ()) + return MAP_REJECT_POTENTIAL; + else if (rejected ()) + return MAP_REJECT_TEMP; + else + return MAP_ACCEPT; + } + + BOOL8 perm_rejected(); //Is char perm reject? + + BOOL8 rejected(); //Is char rejected? + + BOOL8 accepted() { //Is char accepted? + return !rejected (); + } + + //potential rej? + BOOL8 accept_if_good_quality(); + + BOOL8 recoverable() { + return (rejected () && !perm_rejected ()); + } + + void setrej_tess_failure(); //Tess generated blank + void setrej_small_xht(); //Small xht char/wd + void setrej_edge_char(); //Close to image edge + void setrej_1Il_conflict(); //Initial reject map + void setrej_postNN_1Il(); //1Il after NN + void setrej_rej_cblob(); //Insert duff blob + void setrej_mm_reject(); //Matrix matcher + //Odd repeated char + void setrej_bad_repetition(); + void setrej_poor_match(); //Failed Rays heuristic + //TEMP reject_word + void setrej_not_tess_accepted(); + //TEMP reject_word + void setrej_contains_blanks(); + void setrej_bad_permuter(); //POTENTIAL reject_word + void setrej_hyphen(); //PostNN dubious hyph or . + void setrej_dubious(); //PostNN dubious limit + void setrej_no_alphanums(); //TEMP reject_word + void setrej_mostly_rej(); //TEMP reject_word + void setrej_xht_fixup(); //xht fixup + void setrej_bad_quality(); //TEMP reject_word + void setrej_doc_rej(); //TEMP reject_word + void setrej_block_rej(); //TEMP reject_word + void setrej_row_rej(); //TEMP reject_word + void setrej_unlv_rej(); //TEMP reject_word + void setrej_nn_accept(); //NN Flipped a char + void setrej_hyphen_accept(); //Good aspect ratio + void setrej_mm_accept(); //Matrix matcher + //Quality flip a char + void setrej_quality_accept(); + //Accept all except blank + void setrej_minimal_rej_accept(); + + void full_print(FILE *fp); +}; + +class REJMAP +{ + REJ *ptr; //ptr to the chars + inT16 len; //Number of chars + + public: + REJMAP() { //constructor + ptr = NULL; + len = 0; + } + + REJMAP( //classwise copy + const REJMAP &rejmap); + + REJMAP & operator= ( //assign REJMAP + const REJMAP & source); //from this + + ~REJMAP () { //destructor + if (ptr != NULL) + free_struct (ptr, len * sizeof (REJ), "REJ"); + } + + void initialise( //Redefine map + inT16 length); + + REJ & operator[]( //access function + inT16 index) const //map index + { + ASSERT_HOST (index < len); + return ptr[index]; //no bounds checks + } + + inT32 length() const { //map length + return len; + } + + inT16 accept_count(); //How many accepted? + + inT16 reject_count() { //How many rejects? + return len - accept_count (); + } + + void remove_pos( //Cut out an element + inT16 pos); //element to remove + + void print(FILE *fp); + + void full_print(FILE *fp); + + BOOL8 recoverable_rejects(); //Any non perm rejs? + + BOOL8 quality_recoverable_rejects(); + //Any potential rejs? + + void rej_word_small_xht(); //Reject whole word + //Reject whole word + void rej_word_tess_failure(); + void rej_word_not_tess_accepted(); + //Reject whole word + //Reject whole word + void rej_word_contains_blanks(); + //Reject whole word + void rej_word_bad_permuter(); + void rej_word_xht_fixup(); //Reject whole word + //Reject whole word + void rej_word_no_alphanums(); + void rej_word_mostly_rej(); //Reject whole word + void rej_word_bad_quality(); //Reject whole word + void rej_word_doc_rej(); //Reject whole word + void rej_word_block_rej(); //Reject whole word + void rej_word_row_rej(); //Reject whole word +}; +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/seam.cpp b/3rdparty/hgOCR/include/ccstruct/seam.cpp new file mode 100644 index 00000000..3d70eafc --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/seam.cpp @@ -0,0 +1,280 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: seam.c (Formerly seam.c) + * Description: + * Author: Mark Seaman, OCR Technology + * Created: Fri Oct 16 14:37:00 1987 + * Modified: Fri May 17 16:30:13 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Reusable Software Component + * + * (c) Copyright 1987, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "seam.h" +#include "blobs.h" +#include "tprintf.h" + +/*---------------------------------------------------------------------- + Public Function Code +----------------------------------------------------------------------*/ + +// Returns the bounding box of all the points in the seam. +TBOX SEAM::bounding_box() const { + TBOX box(location_.x, location_.y, location_.x, location_.y); + for (int s = 0; s < num_splits_; ++s) { + box += splits_[s].bounding_box(); + } + return box; +} + +// Returns true if other can be combined into *this. +bool SEAM::CombineableWith(const SEAM& other, int max_x_dist, + float max_total_priority) const { + int dist = location_.x - other.location_.x; + if (-max_x_dist < dist && dist < max_x_dist && + num_splits_ + other.num_splits_ <= kMaxNumSplits && + priority_ + other.priority_ < max_total_priority && + !OverlappingSplits(other) && !SharesPosition(other)) { + return true; + } else { + return false; + } +} + +// Combines other into *this. Only works if CombinableWith returned true. +void SEAM::CombineWith(const SEAM& other) { + priority_ += other.priority_; + location_ += other.location_; + location_ /= 2; + + for (int s = 0; s < other.num_splits_ && num_splits_ < kMaxNumSplits; ++s) + splits_[num_splits_++] = other.splits_[s]; +} + +// Returns true if the splits in *this SEAM appear OK in the sense that they +// do not cross any outlines and do not chop off any ridiculously small +// pieces. +bool SEAM::IsHealthy(const TBLOB& blob, int min_points, int min_area) const { + // TODO(rays) Try testing all the splits. Duplicating original code for now, + // which tested only the first. + return num_splits_ == 0 || splits_[0].IsHealthy(blob, min_points, min_area); +} + +// Computes the widthp_/widthn_ range for all existing SEAMs and for *this +// seam, which is about to be inserted at insert_index. Returns false if +// any of the computations fails, as this indicates an invalid chop. +// widthn_/widthp_ are only changed if modify is true. +bool SEAM::PrepareToInsertSeam(const GenericVector& seams, + const GenericVector& blobs, + int insert_index, bool modify) { + for (int s = 0; s < insert_index; ++s) { + if (!seams[s]->FindBlobWidth(blobs, s, modify)) return false; + } + if (!FindBlobWidth(blobs, insert_index, modify)) return false; + for (int s = insert_index; s < seams.size(); ++s) { + if (!seams[s]->FindBlobWidth(blobs, s + 1, modify)) return false; + } + return true; +} + +// Computes the widthp_/widthn_ range. Returns false if not all the splits +// are accounted for. widthn_/widthp_ are only changed if modify is true. +bool SEAM::FindBlobWidth(const GenericVector& blobs, int index, + bool modify) { + int num_found = 0; + if (modify) { + widthp_ = 0; + widthn_ = 0; + } + for (int s = 0; s < num_splits_; ++s) { + const SPLIT& split = splits_[s]; + bool found_split = split.ContainedByBlob(*blobs[index]); + // Look right. + for (int b = index + 1; !found_split && b < blobs.size(); ++b) { + found_split = split.ContainedByBlob(*blobs[b]); + if (found_split && b - index > widthp_ && modify) widthp_ = b - index; + } + // Look left. + for (int b = index - 1; !found_split && b >= 0; --b) { + found_split = split.ContainedByBlob(*blobs[b]); + if (found_split && index - b > widthn_ && modify) widthn_ = index - b; + } + if (found_split) ++num_found; + } + return num_found == num_splits_; +} + +// Splits this blob into two blobs by applying the splits included in +// *this SEAM +void SEAM::ApplySeam(bool italic_blob, TBLOB* blob, TBLOB* other_blob) const { + for (int s = 0; s < num_splits_; ++s) { + splits_[s].SplitOutlineList(blob->outlines); + } + blob->ComputeBoundingBoxes(); + + divide_blobs(blob, other_blob, italic_blob, location_); + + blob->EliminateDuplicateOutlines(); + other_blob->EliminateDuplicateOutlines(); + + blob->CorrectBlobOrder(other_blob); +} + +// Undoes ApplySeam by removing the seam between these two blobs. +// Produces one blob as a result, and deletes other_blob. +void SEAM::UndoSeam(TBLOB* blob, TBLOB* other_blob) const { + if (blob->outlines == NULL) { + blob->outlines = other_blob->outlines; + other_blob->outlines = NULL; + } + + TESSLINE* outline = blob->outlines; + while (outline->next) outline = outline->next; + outline->next = other_blob->outlines; + other_blob->outlines = NULL; + delete other_blob; + + for (int s = 0; s < num_splits_; ++s) { + splits_[s].UnsplitOutlineList(blob); + } + blob->ComputeBoundingBoxes(); + blob->EliminateDuplicateOutlines(); +} + +// Prints everything in *this SEAM. +void SEAM::Print(const char* label) const { + tprintf(label); + tprintf(" %6.2f @ (%d,%d), p=%d, n=%d ", priority_, location_.x, location_.y, + widthp_, widthn_); + for (int s = 0; s < num_splits_; ++s) { + splits_[s].Print(); + if (s + 1 < num_splits_) tprintf(", "); + } + tprintf("\n"); +} + +// Prints a collection of SEAMs. +/* static */ +void SEAM::PrintSeams(const char* label, const GenericVector& seams) { + if (!seams.empty()) { + tprintf("%s\n", label); + for (int x = 0; x < seams.size(); ++x) { + tprintf("%2d: ", x); + seams[x]->Print(""); + } + tprintf("\n"); + } +} + +#ifndef GRAPHICS_DISABLED +// Draws the seam in the given window. +void SEAM::Mark(ScrollView* window) const { + for (int s = 0; s < num_splits_; ++s) splits_[s].Mark(window); +} +#endif + +// Break up the blobs in this chain so that they are all independent. +// This operation should undo the affect of join_pieces. +/* static */ +void SEAM::BreakPieces(const GenericVector& seams, + const GenericVector& blobs, int first, + int last) { + for (int x = first; x < last; ++x) seams[x]->Reveal(); + + TESSLINE* outline = blobs[first]->outlines; + int next_blob = first + 1; + + while (outline != NULL && next_blob <= last) { + if (outline->next == blobs[next_blob]->outlines) { + outline->next = NULL; + outline = blobs[next_blob]->outlines; + ++next_blob; + } else { + outline = outline->next; + } + } +} + +// Join a group of base level pieces into a single blob that can then +// be classified. +/* static */ +void SEAM::JoinPieces(const GenericVector& seams, + const GenericVector& blobs, int first, int last) { + TESSLINE* outline = blobs[first]->outlines; + if (!outline) + return; + + for (int x = first; x < last; ++x) { + SEAM *seam = seams[x]; + if (x - seam->widthn_ >= first && x + seam->widthp_ < last) seam->Hide(); + while (outline->next) outline = outline->next; + outline->next = blobs[x + 1]->outlines; + } +} + +// Hides the seam so the outlines appear not to be cut by it. +void SEAM::Hide() const { + for (int s = 0; s < num_splits_; ++s) { + splits_[s].Hide(); + } +} + +// Undoes hide, so the outlines are cut by the seam. +void SEAM::Reveal() const { + for (int s = 0; s < num_splits_; ++s) { + splits_[s].Reveal(); + } +} + +// Computes and returns, but does not set, the full priority of *this SEAM. +float SEAM::FullPriority(int xmin, int xmax, double overlap_knob, + int centered_maxwidth, double center_knob, + double width_change_knob) const { + if (num_splits_ == 0) return 0.0f; + for (int s = 1; s < num_splits_; ++s) { + splits_[s].SplitOutline(); + } + float full_priority = + priority_ + + splits_[0].FullPriority(xmin, xmax, overlap_knob, centered_maxwidth, + center_knob, width_change_knob); + for (int s = num_splits_ - 1; s >= 1; --s) { + splits_[s].UnsplitOutlines(); + } + return full_priority; +} + +/** + * @name start_seam_list + * + * Initialize a list of seams that match the original number of blobs + * present in the starting segmentation. Each of the seams created + * by this routine have location information only. + */ +void start_seam_list(TWERD* word, GenericVector* seam_array) { + seam_array->truncate(0); + TPOINT location; + + for (int b = 1; b < word->NumBlobs(); ++b) { + TBOX bbox = word->blobs[b - 1]->bounding_box(); + TBOX nbox = word->blobs[b]->bounding_box(); + location.x = (bbox.right() + nbox.left()) / 2; + location.y = (bbox.bottom() + bbox.top() + nbox.bottom() + nbox.top()) / 4; + seam_array->push_back(new SEAM(0.0f, location)); + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/seam.h b/3rdparty/hgOCR/include/ccstruct/seam.h new file mode 100644 index 00000000..4bafbcb8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/seam.h @@ -0,0 +1,203 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: seam.h (Formerly seam.h) + * Description: + * Author: Mark Seaman, SW Productivity + * Created: Fri Oct 16 14:37:00 1987 + * Modified: Thu May 16 17:05:52 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Reusable Software Component + * + * (c) Copyright 1987, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ +#ifndef SEAM_H +#define SEAM_H + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "blobs.h" +#include "split.h" + +/*---------------------------------------------------------------------- + T y p e s +----------------------------------------------------------------------*/ +typedef float PRIORITY; /* PRIORITY */ + +class SEAM { + public: + // A seam with no splits + SEAM(float priority, const TPOINT& location) + : priority_(priority), + location_(location), + widthp_(0), + widthn_(0), + num_splits_(0) {} + // A seam with a single split point. + SEAM(float priority, const TPOINT& location, const SPLIT& split) + : priority_(priority), + location_(location), + widthp_(0), + widthn_(0), + num_splits_(1) { + splits_[0] = split; + } + // Default copy constructor, operator= and destructor are OK! + + // Accessors. + float priority() const { return priority_; } + void set_priority(float priority) { priority_ = priority; } + bool HasAnySplits() const { return num_splits_ > 0; } + + // Returns the bounding box of all the points in the seam. + TBOX bounding_box() const; + + // Returns true if other can be combined into *this. + bool CombineableWith(const SEAM& other, int max_x_dist, + float max_total_priority) const; + // Combines other into *this. Only works if CombinableWith returned true. + void CombineWith(const SEAM& other); + + // Returns true if the given blob contains all splits of *this SEAM. + bool ContainedByBlob(const TBLOB& blob) const { + for (int s = 0; s < num_splits_; ++s) { + if (!splits_[s].ContainedByBlob(blob)) return false; + } + return true; + } + + // Returns true if the given EDGEPT is used by this SEAM, checking only + // the EDGEPT pointer, not the coordinates. + bool UsesPoint(const EDGEPT* point) const { + for (int s = 0; s < num_splits_; ++s) { + if (splits_[s].UsesPoint(point)) return true; + } + return false; + } + // Returns true if *this and other share any common point, by coordinates. + bool SharesPosition(const SEAM& other) const { + for (int s = 0; s < num_splits_; ++s) { + for (int t = 0; t < other.num_splits_; ++t) + if (splits_[s].SharesPosition(other.splits_[t])) return true; + } + return false; + } + // Returns true if *this and other have any vertically overlapping splits. + bool OverlappingSplits(const SEAM& other) const { + for (int s = 0; s < num_splits_; ++s) { + TBOX split1_box = splits_[s].bounding_box(); + for (int t = 0; t < other.num_splits_; ++t) { + TBOX split2_box = other.splits_[t].bounding_box(); + if (split1_box.y_overlap(split2_box)) return true; + } + } + return false; + } + + // Marks the edgepts used by the seam so the segments made by the cut + // never get split further by another seam in the future. + void Finalize() { + for (int s = 0; s < num_splits_; ++s) { + splits_[s].point1->MarkChop(); + splits_[s].point2->MarkChop(); + } + } + + // Returns true if the splits in *this SEAM appear OK in the sense that they + // do not cross any outlines and do not chop off any ridiculously small + // pieces. + bool IsHealthy(const TBLOB& blob, int min_points, int min_area) const; + + // Computes the widthp_/widthn_ range for all existing SEAMs and for *this + // seam, which is about to be inserted at insert_index. Returns false if + // any of the computations fails, as this indicates an invalid chop. + // widthn_/widthp_ are only changed if modify is true. + bool PrepareToInsertSeam(const GenericVector& seams, + const GenericVector& blobs, int insert_index, + bool modify); + // Computes the widthp_/widthn_ range. Returns false if not all the splits + // are accounted for. widthn_/widthp_ are only changed if modify is true. + bool FindBlobWidth(const GenericVector& blobs, int index, + bool modify); + + // Splits this blob into two blobs by applying the splits included in + // *this SEAM + void ApplySeam(bool italic_blob, TBLOB* blob, TBLOB* other_blob) const; + // Undoes ApplySeam by removing the seam between these two blobs. + // Produces one blob as a result, and deletes other_blob. + void UndoSeam(TBLOB* blob, TBLOB* other_blob) const; + + // Prints everything in *this SEAM. + void Print(const char* label) const; + // Prints a collection of SEAMs. + static void PrintSeams(const char* label, const GenericVector& seams); +#ifndef GRAPHICS_DISABLED + // Draws the seam in the given window. + void Mark(ScrollView* window) const; +#endif + + // Break up the blobs in this chain so that they are all independent. + // This operation should undo the affect of join_pieces. + static void BreakPieces(const GenericVector& seams, + const GenericVector& blobs, int first, + int last); + // Join a group of base level pieces into a single blob that can then + // be classified. + static void JoinPieces(const GenericVector& seams, + const GenericVector& blobs, int first, + int last); + + // Hides the seam so the outlines appear not to be cut by it. + void Hide() const; + // Undoes hide, so the outlines are cut by the seam. + void Reveal() const; + + // Computes and returns, but does not set, the full priority of *this SEAM. + // The arguments here are config parameters defined in Wordrec. Add chop_ + // to the beginning of the name. + float FullPriority(int xmin, int xmax, double overlap_knob, + int centered_maxwidth, double center_knob, + double width_change_knob) const; + + private: + // Maximum number of splits that a SEAM can hold. + static const int kMaxNumSplits = 3; + // Priority of this split. Lower is better. + float priority_; + // Position of the middle of the seam. + TPOINT location_; + // A range such that all splits in *this SEAM are contained within blobs in + // the range [index - widthn_,index + widthp_] where index is the index of + // this SEAM in the seams vector. + inT8 widthp_; + inT8 widthn_; + // Number of splits_ that are used. + inT8 num_splits_; + // Set of pairs of points that are the ends of each split in the SEAM. + SPLIT splits_[kMaxNumSplits]; +}; + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ + +void start_seam_list(TWERD* word, GenericVector* seam_array); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/split.cpp b/3rdparty/hgOCR/include/ccstruct/split.cpp new file mode 100644 index 00000000..fbbc71f6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/split.cpp @@ -0,0 +1,330 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: split.c (Formerly split.c) + * Description: + * Author: Mark Seaman, OCR Technology + * Created: Fri Oct 16 14:37:00 1987 + * Modified: Fri May 17 16:27:49 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Reusable Software Component + * + * (c) Copyright 1987, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *************************************************************************/ +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "split.h" +#include "coutln.h" +#include "tprintf.h" + +#ifdef __UNIX__ +#include +#endif + +/*---------------------------------------------------------------------- + V a r i a b l e s +----------------------------------------------------------------------*/ +// Limit on the amount of penalty for the chop being off-center. +const int kCenterGradeCap = 25; +// Ridiculously large priority for splits that are no use. +const double kBadPriority = 999.0; + +BOOL_VAR(wordrec_display_splits, 0, "Display splits"); + +// Returns the bounding box of all the points in the split. +TBOX SPLIT::bounding_box() const { + return TBOX( + MIN(point1->pos.x, point2->pos.x), MIN(point1->pos.y, point2->pos.y), + MAX(point1->pos.x, point2->pos.x), MAX(point1->pos.y, point2->pos.y)); +} + +// Hides the SPLIT so the outlines appear not to be cut by it. +void SPLIT::Hide() const { + EDGEPT* edgept = point1; + do { + edgept->Hide(); + edgept = edgept->next; + } while (!edgept->EqualPos(*point2) && edgept != point1); + edgept = point2; + do { + edgept->Hide(); + edgept = edgept->next; + } while (!edgept->EqualPos(*point1) && edgept != point2); +} + +// Undoes hide, so the outlines are cut by the SPLIT. +void SPLIT::Reveal() const { + EDGEPT* edgept = point1; + do { + edgept->Reveal(); + edgept = edgept->next; + } while (!edgept->EqualPos(*point2) && edgept != point1); + edgept = point2; + do { + edgept->Reveal(); + edgept = edgept->next; + } while (!edgept->EqualPos(*point1) && edgept != point2); +} + +// Compute a split priority based on the bounding boxes of the parts. +// The arguments here are config parameters defined in Wordrec. Add chop_ +// to the beginning of the name. +float SPLIT::FullPriority(int xmin, int xmax, double overlap_knob, + int centered_maxwidth, double center_knob, + double width_change_knob) const { + TBOX box1 = Box12(); + TBOX box2 = Box21(); + int min_left = MIN(box1.left(), box2.left()); + int max_right = MAX(box1.right(), box2.right()); + if (xmin < min_left && xmax > max_right) return kBadPriority; + + float grade = 0.0f; + // grade_overlap. + int width1 = box1.width(); + int width2 = box2.width(); + int min_width = MIN(width1, width2); + int overlap = -box1.x_gap(box2); + if (overlap == min_width) { + grade += 100.0f; // Total overlap. + } else { + if (2 * overlap > min_width) overlap += 2 * overlap - min_width; + if (overlap > 0) grade += overlap_knob * overlap; + } + // grade_center_of_blob. + if (width1 <= centered_maxwidth || width2 <= centered_maxwidth) { + grade += MIN(kCenterGradeCap, center_knob * abs(width1 - width2)); + } + // grade_width_change. + float width_change_grade = 20 - (max_right - min_left - MAX(width1, width2)); + if (width_change_grade > 0.0f) + grade += width_change_grade * width_change_knob; + return grade; +} + +// Returns true if *this SPLIT appears OK in the sense that it does not cross +// any outlines and does not chop off any ridiculously small pieces. +bool SPLIT::IsHealthy(const TBLOB& blob, int min_points, int min_area) const { + return !IsLittleChunk(min_points, min_area) && + !blob.SegmentCrossesOutline(point1->pos, point2->pos); +} + +// Returns true if the split generates a small chunk in terms of either area +// or number of points. +bool SPLIT::IsLittleChunk(int min_points, int min_area) const { + if (point1->ShortNonCircularSegment(min_points, point2) && + point1->SegmentArea(point2) < min_area) { + return true; + } + if (point2->ShortNonCircularSegment(min_points, point1) && + point2->SegmentArea(point1) < min_area) { + return true; + } + return false; +} + +/********************************************************************** + * make_edgept + * + * Create an EDGEPT and hook it into an existing list of edge points. + **********************************************************************/ +EDGEPT *make_edgept(int x, int y, EDGEPT *next, EDGEPT *prev) { + EDGEPT *this_edgept; + /* Create point */ + this_edgept = new EDGEPT; + this_edgept->pos.x = x; + this_edgept->pos.y = y; + // Now deal with the src_outline steps. + C_OUTLINE* prev_ol = prev->src_outline; + if (prev_ol != NULL && prev->next == next) { + // Compute the fraction of the segment that is being cut. + FCOORD segment_vec(next->pos.x - prev->pos.x, next->pos.y - prev->pos.y); + FCOORD target_vec(x - prev->pos.x, y - prev->pos.y); + double cut_fraction = target_vec.length() / segment_vec.length(); + // Get the start and end at the step level. + ICOORD step_start = prev_ol->position_at_index(prev->start_step); + int end_step = prev->start_step + prev->step_count; + int step_length = prev_ol->pathlength(); + ICOORD step_end = prev_ol->position_at_index(end_step % step_length); + ICOORD step_vec = step_end - step_start; + double target_length = step_vec.length() * cut_fraction; + // Find the point on the segment that gives the length nearest to target. + int best_step = prev->start_step; + ICOORD total_step(0, 0); + double best_dist = target_length; + for (int s = prev->start_step; s < end_step; ++s) { + total_step += prev_ol->step(s % step_length); + double dist = fabs(target_length - total_step.length()); + if (dist < best_dist) { + best_dist = dist; + best_step = s + 1; + } + } + // The new point is an intermediate point. + this_edgept->src_outline = prev_ol; + this_edgept->step_count = end_step - best_step; + this_edgept->start_step = best_step % step_length; + prev->step_count = best_step - prev->start_step; + } else { + // The new point is poly only. + this_edgept->src_outline = NULL; + this_edgept->step_count = 0; + this_edgept->start_step = 0; + } + /* Hook it up */ + this_edgept->next = next; + this_edgept->prev = prev; + prev->next = this_edgept; + next->prev = this_edgept; + /* Set up vec entries */ + this_edgept->vec.x = this_edgept->next->pos.x - x; + this_edgept->vec.y = this_edgept->next->pos.y - y; + this_edgept->prev->vec.x = x - this_edgept->prev->pos.x; + this_edgept->prev->vec.y = y - this_edgept->prev->pos.y; + return this_edgept; +} + +/********************************************************************** + * remove_edgept + * + * Remove a given EDGEPT from its list and delete it. + **********************************************************************/ +void remove_edgept(EDGEPT *point) { + EDGEPT *prev = point->prev; + EDGEPT *next = point->next; + // Add point's steps onto prev's steps if they are from the same outline. + if (prev->src_outline == point->src_outline && prev->src_outline != NULL) { + prev->step_count += point->step_count; + } + prev->next = next; + next->prev = prev; + prev->vec.x = next->pos.x - prev->pos.x; + prev->vec.y = next->pos.y - prev->pos.y; + delete point; +} + +/********************************************************************** + * Print + * + * Shows the coordinates of both points in a split. + **********************************************************************/ +void SPLIT::Print() const { + tprintf("(%d,%d)--(%d,%d)", point1->pos.x, point1->pos.y, point2->pos.x, + point2->pos.y); +} + +#ifndef GRAPHICS_DISABLED +// Draws the split in the given window. +void SPLIT::Mark(ScrollView* window) const { + window->Pen(ScrollView::GREEN); + window->Line(point1->pos.x, point1->pos.y, point2->pos.x, point2->pos.y); + window->UpdateWindow(); +} +#endif + +// Creates two outlines out of one by splitting the original one in half. +// Inserts the resulting outlines into the given list. +void SPLIT::SplitOutlineList(TESSLINE* outlines) const { + SplitOutline(); + while (outlines->next != NULL) outlines = outlines->next; + + outlines->next = new TESSLINE; + outlines->next->loop = point1; + outlines->next->ComputeBoundingBox(); + + outlines = outlines->next; + + outlines->next = new TESSLINE; + outlines->next->loop = point2; + outlines->next->ComputeBoundingBox(); + + outlines->next->next = NULL; +} + +// Makes a split between these two edge points, but does not affect the +// outlines to which they belong. +void SPLIT::SplitOutline() const { + EDGEPT* temp2 = point2->next; + EDGEPT* temp1 = point1->next; + /* Create two new points */ + EDGEPT* new_point1 = make_edgept(point1->pos.x, point1->pos.y, temp1, point2); + EDGEPT* new_point2 = make_edgept(point2->pos.x, point2->pos.y, temp2, point1); + // point1 and 2 are now cross-over points, so they must have NULL + // src_outlines and give their src_outline information their new + // replacements. + new_point1->src_outline = point1->src_outline; + new_point1->start_step = point1->start_step; + new_point1->step_count = point1->step_count; + new_point2->src_outline = point2->src_outline; + new_point2->start_step = point2->start_step; + new_point2->step_count = point2->step_count; + point1->src_outline = NULL; + point1->start_step = 0; + point1->step_count = 0; + point2->src_outline = NULL; + point2->start_step = 0; + point2->step_count = 0; +} + +// Undoes the effect of SplitOutlineList, correcting the outlines for undoing +// the split, but possibly leaving some duplicate outlines. +void SPLIT::UnsplitOutlineList(TBLOB* blob) const { + /* Modify edge points */ + UnsplitOutlines(); + + TESSLINE* outline1 = new TESSLINE; + outline1->next = blob->outlines; + blob->outlines = outline1; + outline1->loop = point1; + + TESSLINE* outline2 = new TESSLINE; + outline2->next = blob->outlines; + blob->outlines = outline2; + outline2->loop = point2; +} + +// Removes the split that was put between these two points. +void SPLIT::UnsplitOutlines() const { + EDGEPT* tmp1 = point1->next; + EDGEPT* tmp2 = point2->next; + + tmp1->next->prev = point2; + tmp2->next->prev = point1; + + // tmp2 is coincident with point1. point1 takes tmp2's place as tmp2 is + // deleted. + point1->next = tmp2->next; + point1->src_outline = tmp2->src_outline; + point1->start_step = tmp2->start_step; + point1->step_count = tmp2->step_count; + // Likewise point2 takes tmp1's place. + point2->next = tmp1->next; + point2->src_outline = tmp1->src_outline; + point2->start_step = tmp1->start_step; + point2->step_count = tmp1->step_count; + + delete tmp1; + delete tmp2; + + point1->vec.x = point1->next->pos.x - point1->pos.x; + point1->vec.y = point1->next->pos.y - point1->pos.y; + + point2->vec.x = point2->next->pos.x - point2->pos.x; + point2->vec.y = point2->next->pos.y - point2->pos.y; +} diff --git a/3rdparty/hgOCR/include/ccstruct/split.h b/3rdparty/hgOCR/include/ccstruct/split.h new file mode 100644 index 00000000..26424748 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/split.h @@ -0,0 +1,120 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: split.h (Formerly split.h) + * Description: + * Author: Mark Seaman, SW Productivity + * Created: Fri Oct 16 14:37:00 1987 + * Modified: Mon May 13 10:49:23 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Reusable Software Component + * + * (c) Copyright 1987, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *****************************************************************************/ +#ifndef SPLIT_H +#define SPLIT_H + +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "blobs.h" +#include "scrollview.h" + +/*---------------------------------------------------------------------- + T y p e s +----------------------------------------------------------------------*/ +struct SPLIT { + SPLIT() : point1(NULL), point2(NULL) {} + SPLIT(EDGEPT* pt1, EDGEPT* pt2) : point1(pt1), point2(pt2) {} + + // Returns the bounding box of all the points in the split. + TBOX bounding_box() const; + // Returns the bounding box of the outline from point1 to point2. + TBOX Box12() const { return point1->SegmentBox(point2); } + // Returns the bounding box of the outline from point1 to point1. + TBOX Box21() const { return point2->SegmentBox(point1); } + // Returns the bounding box of the out + + // Hides the SPLIT so the outlines appear not to be cut by it. + void Hide() const; + // Undoes hide, so the outlines are cut by the SPLIT. + void Reveal() const; + + // Returns true if the given EDGEPT is used by this SPLIT, checking only + // the EDGEPT pointer, not the coordinates. + bool UsesPoint(const EDGEPT* point) const { + return point1 == point || point2 == point; + } + // Returns true if the other SPLIT has any position shared with *this. + bool SharesPosition(const SPLIT& other) const { + return point1->EqualPos(*other.point1) || point1->EqualPos(*other.point2) || + point2->EqualPos(*other.point1) || point2->EqualPos(*other.point2); + } + // Returns true if both points are contained within the blob. + bool ContainedByBlob(const TBLOB& blob) const { + return blob.Contains(point1->pos) && blob.Contains(point2->pos); + } + // Returns true if both points are contained within the outline. + bool ContainedByOutline(const TESSLINE& outline) const { + return outline.Contains(point1->pos) && outline.Contains(point2->pos); + } + // Compute a split priority based on the bounding boxes of the parts. + // The arguments here are config parameters defined in Wordrec. Add chop_ + // to the beginning of the name. + float FullPriority(int xmin, int xmax, double overlap_knob, + int centered_maxwidth, double center_knob, + double width_change_knob) const; + // Returns true if *this SPLIT appears OK in the sense that it does not cross + // any outlines and does not chop off any ridiculously small pieces. + bool IsHealthy(const TBLOB& blob, int min_points, int min_area) const; + // Returns true if the split generates a small chunk in terms of either area + // or number of points. + bool IsLittleChunk(int min_points, int min_area) const; + + void Print() const; +#ifndef GRAPHICS_DISABLED + // Draws the split in the given window. + void Mark(ScrollView* window) const; +#endif + + // Creates two outlines out of one by splitting the original one in half. + // Inserts the resulting outlines into the given list. + void SplitOutlineList(TESSLINE* outlines) const; + // Makes a split between these two edge points, but does not affect the + // outlines to which they belong. + void SplitOutline() const; + // Undoes the effect of SplitOutlineList, correcting the outlines for undoing + // the split, but possibly leaving some duplicate outlines. + void UnsplitOutlineList(TBLOB* blob) const; + // Removes the split that was put between these two points. + void UnsplitOutlines() const; + + EDGEPT *point1; + EDGEPT *point2; +}; + +/*---------------------------------------------------------------------- + V a r i a b l e s +----------------------------------------------------------------------*/ + +extern BOOL_VAR_H(wordrec_display_splits, 0, "Display splits"); + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ +EDGEPT *make_edgept(int x, int y, EDGEPT *next, EDGEPT *prev); + +void remove_edgept(EDGEPT *point); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/statistc.cpp b/3rdparty/hgOCR/include/ccstruct/statistc.cpp new file mode 100644 index 00000000..a28217f2 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/statistc.cpp @@ -0,0 +1,782 @@ +/********************************************************************** + * File: statistc.c (Formerly stats.c) + * Description: Simple statistical package for integer values. + * Author: Ray Smith + * Created: Mon Feb 04 16:56:05 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include "statistc.h" +#include +#include +#include +#include "helpers.h" +#include "scrollview.h" +#include "tprintf.h" + +using tesseract::KDPairInc; + +/********************************************************************** + * STATS::STATS + * + * Construct a new stats element by allocating and zeroing the memory. + **********************************************************************/ +STATS::STATS(inT32 min_bucket_value, inT32 max_bucket_value_plus_1) { + if (max_bucket_value_plus_1 <= min_bucket_value) { + min_bucket_value = 0; + max_bucket_value_plus_1 = 1; + } + rangemin_ = min_bucket_value; // setup + rangemax_ = max_bucket_value_plus_1; + buckets_ = new inT32[rangemax_ - rangemin_]; + clear(); +} + +STATS::STATS() { + rangemax_ = 0; + rangemin_ = 0; + buckets_ = NULL; +} + +/********************************************************************** + * STATS::set_range + * + * Alter the range on an existing stats element. + **********************************************************************/ +bool STATS::set_range(inT32 min_bucket_value, inT32 max_bucket_value_plus_1) { + if (max_bucket_value_plus_1 <= min_bucket_value) { + return false; + } + if (rangemax_ - rangemin_ != max_bucket_value_plus_1 - min_bucket_value) { + delete [] buckets_; + buckets_ = new inT32[max_bucket_value_plus_1 - min_bucket_value]; + } + rangemin_ = min_bucket_value; // setup + rangemax_ = max_bucket_value_plus_1; + clear(); // zero it + return true; +} + +/********************************************************************** + * STATS::clear + * + * Clear out the STATS class by zeroing all the buckets. + **********************************************************************/ +void STATS::clear() { // clear out buckets + total_count_ = 0; + if (buckets_ != NULL) + memset(buckets_, 0, (rangemax_ - rangemin_) * sizeof(buckets_[0])); +} + +/********************************************************************** + * STATS::~STATS + * + * Destructor for a stats class. + **********************************************************************/ +STATS::~STATS () { + delete [] buckets_; +} + +/********************************************************************** + * STATS::add + * + * Add a set of samples to (or delete from) a pile. + **********************************************************************/ +void STATS::add(inT32 value, inT32 count) { + if (buckets_ == NULL) { + return; + } + value = ClipToRange(value, rangemin_, rangemax_ - 1); + buckets_[value - rangemin_] += count; + total_count_ += count; // keep count of total +} + +/********************************************************************** + * STATS::mode + * + * Find the mode of a stats class. + **********************************************************************/ +inT32 STATS::mode() const { // get mode of samples + if (buckets_ == NULL) { + return rangemin_; + } + inT32 max = buckets_[0]; // max cell count + inT32 maxindex = 0; // index of max + for (int index = rangemax_ - rangemin_ - 1; index > 0; --index) { + if (buckets_[index] > max) { + max = buckets_[index]; // find biggest + maxindex = index; + } + } + return maxindex + rangemin_; // index of biggest +} + +/********************************************************************** + * STATS::mean + * + * Find the mean of a stats class. + **********************************************************************/ +double STATS::mean() const { //get mean of samples + if (buckets_ == NULL || total_count_ <= 0) { + return static_cast(rangemin_); + } + inT64 sum = 0; + for (int index = rangemax_ - rangemin_ - 1; index >= 0; --index) { + sum += static_cast(index) * buckets_[index]; + } + return static_cast(sum) / total_count_ + rangemin_; +} + +/********************************************************************** + * STATS::sd + * + * Find the standard deviation of a stats class. + **********************************************************************/ +double STATS::sd() const { //standard deviation + if (buckets_ == NULL || total_count_ <= 0) { + return 0.0; + } + inT64 sum = 0; + double sqsum = 0.0; + for (int index = rangemax_ - rangemin_ - 1; index >= 0; --index) { + sum += static_cast(index) * buckets_[index]; + sqsum += static_cast(index) * index * buckets_[index]; + } + double variance = static_cast(sum) / total_count_; + variance = sqsum / total_count_ - variance * variance; + if (variance > 0.0) + return sqrt(variance); + return 0.0; +} + +/********************************************************************** + * STATS::ile + * + * Returns the fractile value such that frac fraction (in [0,1]) of samples + * has a value less than the return value. + **********************************************************************/ +double STATS::ile(double frac) const { + if (buckets_ == NULL || total_count_ == 0) { + return static_cast(rangemin_); + } +#if 0 + // TODO(rays) The existing code doesn't seem to be doing the right thing + // with target a double but this substitute crashes the code that uses it. + // Investigate and fix properly. + int target = IntCastRounded(frac * total_count_); + target = ClipToRange(target, 1, total_count_); +#else + double target = frac * total_count_; + target = ClipToRange(target, 1.0, static_cast(total_count_)); +#endif + int sum = 0; + int index = 0; + for (index = 0; index < rangemax_ - rangemin_ && sum < target; + sum += buckets_[index++]); + if (index > 0) { + ASSERT_HOST(buckets_[index - 1] > 0); + return rangemin_ + index - + static_cast(sum - target) / buckets_[index - 1]; + } else { + return static_cast(rangemin_); + } +} + +/********************************************************************** + * STATS::min_bucket + * + * Find REAL minimum bucket - ile(0.0) isn't necessarily correct + **********************************************************************/ +inT32 STATS::min_bucket() const { // Find min + if (buckets_ == NULL || total_count_ == 0) { + return rangemin_; + } + inT32 min = 0; + for (min = 0; (min < rangemax_ - rangemin_) && (buckets_[min] == 0); min++); + return rangemin_ + min; +} + +/********************************************************************** + * STATS::max_bucket + * + * Find REAL maximum bucket - ile(1.0) isn't necessarily correct + **********************************************************************/ + +inT32 STATS::max_bucket() const { // Find max + if (buckets_ == NULL || total_count_ == 0) { + return rangemin_; + } + inT32 max; + for (max = rangemax_ - rangemin_ - 1; max > 0 && buckets_[max] == 0; max--); + return rangemin_ + max; +} + +/********************************************************************** + * STATS::median + * + * Finds a more useful estimate of median than ile(0.5). + * + * Overcomes a problem with ile() - if the samples are, for example, + * 6,6,13,14 ile(0.5) return 7.0 - when a more useful value would be midway + * between 6 and 13 = 9.5 + **********************************************************************/ +double STATS::median() const { //get median + if (buckets_ == NULL) { + return static_cast(rangemin_); + } + double median = ile(0.5); + int median_pile = static_cast(floor(median)); + if ((total_count_ > 1) && (pile_count(median_pile) == 0)) { + inT32 min_pile; + inT32 max_pile; + /* Find preceding non zero pile */ + for (min_pile = median_pile; pile_count(min_pile) == 0; min_pile--); + /* Find following non zero pile */ + for (max_pile = median_pile; pile_count(max_pile) == 0; max_pile++); + median = (min_pile + max_pile) / 2.0; + } + return median; +} + +/********************************************************************** + * STATS::local_min + * + * Return TRUE if this point is a local min. + **********************************************************************/ +bool STATS::local_min(inT32 x) const { + if (buckets_ == NULL) { + return false; + } + x = ClipToRange(x, rangemin_, rangemax_ - 1) - rangemin_; + if (buckets_[x] == 0) + return true; + inT32 index; // table index + for (index = x - 1; index >= 0 && buckets_[index] == buckets_[x]; --index); + if (index >= 0 && buckets_[index] < buckets_[x]) + return false; + for (index = x + 1; index < rangemax_ - rangemin_ && + buckets_[index] == buckets_[x]; ++index); + if (index < rangemax_ - rangemin_ && buckets_[index] < buckets_[x]) + return false; + else + return true; +} + +/********************************************************************** + * STATS::smooth + * + * Apply a triangular smoothing filter to the stats. + * This makes the modes a bit more useful. + * The factor gives the height of the triangle, i.e. the weight of the + * centre. + **********************************************************************/ +void STATS::smooth(inT32 factor) { + if (buckets_ == NULL || factor < 2) { + return; + } + STATS result(rangemin_, rangemax_); + int entrycount = rangemax_ - rangemin_; + for (int entry = 0; entry < entrycount; entry++) { + //centre weight + int count = buckets_[entry] * factor; + for (int offset = 1; offset < factor; offset++) { + if (entry - offset >= 0) + count += buckets_[entry - offset] * (factor - offset); + if (entry + offset < entrycount) + count += buckets_[entry + offset] * (factor - offset); + } + result.add(entry + rangemin_, count); + } + total_count_ = result.total_count_; + memcpy(buckets_, result.buckets_, entrycount * sizeof(buckets_[0])); +} + +/********************************************************************** + * STATS::cluster + * + * Cluster the samples into max_cluster clusters. + * Each call runs one iteration. The array of clusters must be + * max_clusters+1 in size as cluster 0 is used to indicate which samples + * have been used. + * The return value is the current number of clusters. + **********************************************************************/ + +inT32 STATS::cluster(float lower, // thresholds + float upper, + float multiple, // distance threshold + inT32 max_clusters, // max no to make + STATS *clusters) { // array of clusters + BOOL8 new_cluster; // added one + float *centres; // cluster centres + inT32 entry; // bucket index + inT32 cluster; // cluster index + inT32 best_cluster; // one to assign to + inT32 new_centre = 0; // residual mode + inT32 new_mode; // pile count of new_centre + inT32 count; // pile to place + float dist; // from cluster + float min_dist; // from best_cluster + inT32 cluster_count; // no of clusters + + if (buckets_ == NULL || max_clusters < 1) + return 0; + centres = new float[max_clusters + 1]; + for (cluster_count = 1; cluster_count <= max_clusters + && clusters[cluster_count].buckets_ != NULL + && clusters[cluster_count].total_count_ > 0; + cluster_count++) { + centres[cluster_count] = + static_cast(clusters[cluster_count].ile(0.5)); + new_centre = clusters[cluster_count].mode(); + for (entry = new_centre - 1; centres[cluster_count] - entry < lower + && entry >= rangemin_ + && pile_count(entry) <= pile_count(entry + 1); + entry--) { + count = pile_count(entry) - clusters[0].pile_count(entry); + if (count > 0) { + clusters[cluster_count].add(entry, count); + clusters[0].add (entry, count); + } + } + for (entry = new_centre + 1; entry - centres[cluster_count] < lower + && entry < rangemax_ + && pile_count(entry) <= pile_count(entry - 1); + entry++) { + count = pile_count(entry) - clusters[0].pile_count(entry); + if (count > 0) { + clusters[cluster_count].add(entry, count); + clusters[0].add(entry, count); + } + } + } + cluster_count--; + + if (cluster_count == 0) { + clusters[0].set_range(rangemin_, rangemax_); + } + do { + new_cluster = FALSE; + new_mode = 0; + for (entry = 0; entry < rangemax_ - rangemin_; entry++) { + count = buckets_[entry] - clusters[0].buckets_[entry]; + //remaining pile + if (count > 0) { //any to handle + min_dist = static_cast(MAX_INT32); + best_cluster = 0; + for (cluster = 1; cluster <= cluster_count; cluster++) { + dist = entry + rangemin_ - centres[cluster]; + //find distance + if (dist < 0) + dist = -dist; + if (dist < min_dist) { + min_dist = dist; //find least + best_cluster = cluster; + } + } + if (min_dist > upper //far enough for new + && (best_cluster == 0 + || entry + rangemin_ > centres[best_cluster] * multiple + || entry + rangemin_ < centres[best_cluster] / multiple)) { + if (count > new_mode) { + new_mode = count; + new_centre = entry + rangemin_; + } + } + } + } + // need new and room + if (new_mode > 0 && cluster_count < max_clusters) { + cluster_count++; + new_cluster = TRUE; + if (!clusters[cluster_count].set_range(rangemin_, rangemax_)) { + delete [] centres; + return 0; + } + centres[cluster_count] = static_cast(new_centre); + clusters[cluster_count].add(new_centre, new_mode); + clusters[0].add(new_centre, new_mode); + for (entry = new_centre - 1; centres[cluster_count] - entry < lower + && entry >= rangemin_ + && pile_count (entry) <= pile_count(entry + 1); entry--) { + count = pile_count(entry) - clusters[0].pile_count(entry); + if (count > 0) { + clusters[cluster_count].add(entry, count); + clusters[0].add(entry, count); + } + } + for (entry = new_centre + 1; entry - centres[cluster_count] < lower + && entry < rangemax_ + && pile_count (entry) <= pile_count(entry - 1); entry++) { + count = pile_count(entry) - clusters[0].pile_count(entry); + if (count > 0) { + clusters[cluster_count].add(entry, count); + clusters[0].add (entry, count); + } + } + centres[cluster_count] = + static_cast(clusters[cluster_count].ile(0.5)); + } + } while (new_cluster && cluster_count < max_clusters); + delete [] centres; + return cluster_count; +} + +// Helper tests that the current index is still part of the peak and gathers +// the data into the peak, returning false when the peak is ended. +// src_buckets[index] - used_buckets[index] is the unused part of the histogram. +// prev_count is the histogram count of the previous index on entry and is +// updated to the current index on return. +// total_count and total_value are accumulating the mean of the peak. +static bool GatherPeak(int index, const int* src_buckets, int* used_buckets, + int* prev_count, int* total_count, double* total_value) { + int pile_count = src_buckets[index] - used_buckets[index]; + if (pile_count <= *prev_count && pile_count > 0) { + // Accumulate count and index.count product. + *total_count += pile_count; + *total_value += index * pile_count; + // Mark this index as used + used_buckets[index] = src_buckets[index]; + *prev_count = pile_count; + return true; + } else { + return false; + } +} + +// Finds (at most) the top max_modes modes, well actually the whole peak around +// each mode, returning them in the given modes vector as a pair in order of decreasing total count. +// Since the mean is the key and the count the data in the pair, a single call +// to sort on the output will re-sort by increasing mean of peak if that is +// more useful than decreasing total count. +// Returns the actual number of modes found. +int STATS::top_n_modes(int max_modes, + GenericVector >* modes) const { + if (max_modes <= 0) return 0; + int src_count = rangemax_ - rangemin_; + // Used copies the counts in buckets_ as they get used. + STATS used(rangemin_, rangemax_); + modes->truncate(0); + // Total count of the smallest peak found so far. + int least_count = 1; + // Mode that is used as a seed for each peak + int max_count = 0; + do { + // Find an unused mode. + max_count = 0; + int max_index = 0; + for (int src_index = 0; src_index < src_count; src_index++) { + int pile_count = buckets_[src_index] - used.buckets_[src_index]; + if (pile_count > max_count) { + max_count = pile_count; + max_index = src_index; + } + } + if (max_count > 0) { + // Copy the bucket count to used so it doesn't get found again. + used.buckets_[max_index] = max_count; + // Get the entire peak. + double total_value = max_index * max_count; + int total_count = max_count; + int prev_pile = max_count; + for (int offset = 1; max_index + offset < src_count; ++offset) { + if (!GatherPeak(max_index + offset, buckets_, used.buckets_, + &prev_pile, &total_count, &total_value)) + break; + } + prev_pile = buckets_[max_index]; + for (int offset = 1; max_index - offset >= 0; ++offset) { + if (!GatherPeak(max_index - offset, buckets_, used.buckets_, + &prev_pile, &total_count, &total_value)) + break; + } + if (total_count > least_count || modes->size() < max_modes) { + // We definitely want this mode, so if we have enough discard the least. + if (modes->size() == max_modes) + modes->truncate(max_modes - 1); + int target_index = 0; + // Linear search for the target insertion point. + while (target_index < modes->size() && + (*modes)[target_index].data >= total_count) + ++target_index; + float peak_mean = + static_cast(total_value / total_count + rangemin_); + modes->insert(KDPairInc(peak_mean, total_count), + target_index); + least_count = modes->back().data; + } + } + } while (max_count > 0); + return modes->size(); +} + +/********************************************************************** + * STATS::print + * + * Prints a summary and table of the histogram. + **********************************************************************/ +void STATS::print() const { + if (buckets_ == NULL) { + return; + } + inT32 min = min_bucket() - rangemin_; + inT32 max = max_bucket() - rangemin_; + + int num_printed = 0; + for (int index = min; index <= max; index++) { + if (buckets_[index] != 0) { + tprintf("%4d:%-3d ", rangemin_ + index, buckets_[index]); + if (++num_printed % 8 == 0) + tprintf ("\n"); + } + } + tprintf ("\n"); + print_summary(); +} + + + +/********************************************************************** + * STATS::print_summary + * + * Print a summary of the stats. + **********************************************************************/ +void STATS::print_summary() const { + if (buckets_ == NULL) { + return; + } + inT32 min = min_bucket(); + inT32 max = max_bucket(); + tprintf("Total count=%d\n", total_count_); + tprintf("Min=%.2f Really=%d\n", ile(0.0), min); + tprintf("Lower quartile=%.2f\n", ile(0.25)); + tprintf("Median=%.2f, ile(0.5)=%.2f\n", median(), ile(0.5)); + tprintf("Upper quartile=%.2f\n", ile(0.75)); + tprintf("Max=%.2f Really=%d\n", ile(1.0), max); + tprintf("Range=%d\n", max + 1 - min); + tprintf("Mean= %.2f\n", mean()); + tprintf("SD= %.2f\n", sd()); +} + + +/********************************************************************** + * STATS::plot + * + * Draw a histogram of the stats table. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void STATS::plot(ScrollView* window, // to draw in + float xorigin, // bottom left + float yorigin, + float xscale, // one x unit + float yscale, // one y unit + ScrollView::Color colour) const { // colour to draw in + if (buckets_ == NULL) { + return; + } + window->Pen(colour); + + for (int index = 0; index < rangemax_ - rangemin_; index++) { + window->Rectangle( xorigin + xscale * index, yorigin, + xorigin + xscale * (index + 1), + yorigin + yscale * buckets_[index]); + } +} +#endif + + +/********************************************************************** + * STATS::plotline + * + * Draw a histogram of the stats table. (Line only) + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void STATS::plotline(ScrollView* window, // to draw in + float xorigin, // bottom left + float yorigin, + float xscale, // one x unit + float yscale, // one y unit + ScrollView::Color colour) const { // colour to draw in + if (buckets_ == NULL) { + return; + } + window->Pen(colour); + window->SetCursor(xorigin, yorigin + yscale * buckets_[0]); + for (int index = 0; index < rangemax_ - rangemin_; index++) { + window->DrawTo(xorigin + xscale * index, + yorigin + yscale * buckets_[index]); + } +} +#endif + + +/********************************************************************** + * choose_nth_item + * + * Returns the index of what would b the nth item in the array + * if the members were sorted, without actually sorting. + **********************************************************************/ + +inT32 choose_nth_item(inT32 index, float *array, inT32 count) { + inT32 next_sample; // next one to do + inT32 next_lesser; // space for new + inT32 prev_greater; // last one saved + inT32 equal_count; // no of equal ones + float pivot; // proposed median + float sample; // current sample + + if (count <= 1) + return 0; + if (count == 2) { + if (array[0] < array[1]) { + return index >= 1 ? 1 : 0; + } + else { + return index >= 1 ? 0 : 1; + } + } + else { + if (index < 0) + index = 0; // ensure legal + else if (index >= count) + index = count - 1; + equal_count = (inT32) (rand() % count); + pivot = array[equal_count]; + // fill gap + array[equal_count] = array[0]; + next_lesser = 0; + prev_greater = count; + equal_count = 1; + for (next_sample = 1; next_sample < prev_greater;) { + sample = array[next_sample]; + if (sample < pivot) { + // shuffle + array[next_lesser++] = sample; + next_sample++; + } + else if (sample > pivot) { + prev_greater--; + // juggle + array[next_sample] = array[prev_greater]; + array[prev_greater] = sample; + } + else { + equal_count++; + next_sample++; + } + } + for (next_sample = next_lesser; next_sample < prev_greater;) + array[next_sample++] = pivot; + if (index < next_lesser) + return choose_nth_item (index, array, next_lesser); + else if (index < prev_greater) + return next_lesser; // in equal bracket + else + return choose_nth_item (index - prev_greater, + array + prev_greater, + count - prev_greater) + prev_greater; + } +} + +/********************************************************************** + * choose_nth_item + * + * Returns the index of what would be the nth item in the array + * if the members were sorted, without actually sorting. + **********************************************************************/ +inT32 choose_nth_item(inT32 index, void *array, inT32 count, size_t size, + int (*compar)(const void*, const void*)) { + int result; // of compar + inT32 next_sample; // next one to do + inT32 next_lesser; // space for new + inT32 prev_greater; // last one saved + inT32 equal_count; // no of equal ones + inT32 pivot; // proposed median + + if (count <= 1) + return 0; + if (count == 2) { + if (compar (array, (char *) array + size) < 0) { + return index >= 1 ? 1 : 0; + } + else { + return index >= 1 ? 0 : 1; + } + } + if (index < 0) + index = 0; // ensure legal + else if (index >= count) + index = count - 1; + pivot = (inT32) (rand () % count); + swap_entries (array, size, pivot, 0); + next_lesser = 0; + prev_greater = count; + equal_count = 1; + for (next_sample = 1; next_sample < prev_greater;) { + result = + compar ((char *) array + size * next_sample, + (char *) array + size * next_lesser); + if (result < 0) { + swap_entries (array, size, next_lesser++, next_sample++); + // shuffle + } + else if (result > 0) { + prev_greater--; + swap_entries(array, size, prev_greater, next_sample); + } + else { + equal_count++; + next_sample++; + } + } + if (index < next_lesser) + return choose_nth_item (index, array, next_lesser, size, compar); + else if (index < prev_greater) + return next_lesser; // in equal bracket + else + return choose_nth_item (index - prev_greater, + (char *) array + size * prev_greater, + count - prev_greater, size, + compar) + prev_greater; +} + +/********************************************************************** + * swap_entries + * + * Swap 2 entries of arbitrary size in-place in a table. + **********************************************************************/ +void swap_entries(void *array, // array of entries + size_t size, // size of entry + inT32 index1, // entries to swap + inT32 index2) { + char tmp; + char *ptr1; // to entries + char *ptr2; + size_t count; // of bytes + + ptr1 = reinterpret_cast(array) + index1 * size; + ptr2 = reinterpret_cast(array) + index2 * size; + for (count = 0; count < size; count++) { + tmp = *ptr1; + *ptr1++ = *ptr2; + *ptr2++ = tmp; // tedious! + } +} diff --git a/3rdparty/hgOCR/include/ccstruct/statistc.h b/3rdparty/hgOCR/include/ccstruct/statistc.h new file mode 100644 index 00000000..96bd9e39 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/statistc.h @@ -0,0 +1,169 @@ +/********************************************************************** + * File: statistc.h (Formerly stats.h) + * Description: Class description for STATS class. + * Author: Ray Smith + * Created: Mon Feb 04 16:19:07 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCSTRUCT_STATISTC_H_ +#define TESSERACT_CCSTRUCT_STATISTC_H_ + +#include +#include "host.h" +#include "kdpair.h" +#include "scrollview.h" + +template class GenericVector; + + +// Simple histogram-based statistics for integer values in a known +// range, such that the range is small compared to the number of samples. +class STATS { + public: + // The histogram buckets are in the range + // [min_bucket_value, max_bucket_value_plus_1 - 1] i.e. + // [min_bucket_value, max_bucket_value]. + // Any data under min_bucket value is silently mapped to min_bucket_value, + // and likewise, any data over max_bucket_value is silently mapped to + // max_bucket_value. + // In the internal array, min_bucket_value maps to 0 and + // max_bucket_value_plus_1 - min_bucket_value to the array size. + // TODO(rays) This is ugly. Convert the second argument to + // max_bucket_value and all the code that uses it. + STATS(inT32 min_bucket_value, inT32 max_bucket_value_plus_1); + STATS(); // empty for arrays + + ~STATS(); + + // (Re)Sets the range and clears the counts. + // See the constructor for info on max and min values. + bool set_range(inT32 min_bucket_value, inT32 max_bucket_value_plus_1); + + void clear(); // empty buckets + + void add(inT32 value, inT32 count); + + // "Accessors" return various statistics on the data. + inT32 mode() const; // get mode of samples + double mean() const; // get mean of samples + double sd() const; // standard deviation + // Returns the fractile value such that frac fraction (in [0,1]) of samples + // has a value less than the return value. + double ile(double frac) const; + // Returns the minimum used entry in the histogram (ie the minimum of the + // data, NOT the minimum of the supplied range, nor is it an index.) + // Would normally be called min(), but that is a reserved word in VC++. + inT32 min_bucket() const; // Find min + // Returns the maximum used entry in the histogram (ie the maximum of the + // data, NOT the maximum of the supplied range, nor is it an index.) + inT32 max_bucket() const; // Find max + // Finds a more useful estimate of median than ile(0.5). + // Overcomes a problem with ile() - if the samples are, for example, + // 6,6,13,14 ile(0.5) return 7.0 - when a more useful value would be midway + // between 6 and 13 = 9.5 + double median() const; // get median of samples + // Returns the count of the given value. + inT32 pile_count(inT32 value ) const { + if (value <= rangemin_) + return buckets_[0]; + if (value >= rangemax_ - 1) + return buckets_[rangemax_ - rangemin_ - 1]; + return buckets_[value - rangemin_]; + } + // Returns the total count of all buckets. + inT32 get_total() const { + return total_count_; // total of all piles + } + // Returns true if x is a local min. + bool local_min(inT32 x) const; + + // Apply a triangular smoothing filter to the stats. + // This makes the modes a bit more useful. + // The factor gives the height of the triangle, i.e. the weight of the + // centre. + void smooth(inT32 factor); + + // Cluster the samples into max_cluster clusters. + // Each call runs one iteration. The array of clusters must be + // max_clusters+1 in size as cluster 0 is used to indicate which samples + // have been used. + // The return value is the current number of clusters. + inT32 cluster(float lower, // thresholds + float upper, + float multiple, // distance threshold + inT32 max_clusters, // max no to make + STATS *clusters); // array of clusters + +// Finds (at most) the top max_modes modes, well actually the whole peak around +// each mode, returning them in the given modes vector as a pair in order of decreasing total count. +// Since the mean is the key and the count the data in the pair, a single call +// to sort on the output will re-sort by increasing mean of peak if that is +// more useful than decreasing total count. +// Returns the actual number of modes found. + int top_n_modes( + int max_modes, + GenericVector >* modes) const; + + // Prints a summary and table of the histogram. + void print() const; + // Prints summary stats only of the histogram. + void print_summary() const; + + #ifndef GRAPHICS_DISABLED + // Draws the histogram as a series of rectangles. + void plot(ScrollView* window, // window to draw in + float xorigin, // origin of histo + float yorigin, // gram + float xscale, // size of one unit + float yscale, // size of one uint + ScrollView::Color colour) const; // colour to draw in + + // Draws a line graph of the histogram. + void plotline(ScrollView* window, // window to draw in + float xorigin, // origin of histo + float yorigin, // gram + float xscale, // size of one unit + float yscale, // size of one uint + ScrollView::Color colour) const; // colour to draw in + #endif // GRAPHICS_DISABLED + + private: + inT32 rangemin_; // min of range + // rangemax_ is not well named as it is really one past the max. + inT32 rangemax_; // max of range + inT32 total_count_; // no of samples + inT32* buckets_; // array of cells +}; + +// Returns the nth ordered item from the array, as if they were +// ordered, but without ordering them, in linear time. +// The array does get shuffled! +inT32 choose_nth_item(inT32 index, // index to choose + float *array, // array of items + inT32 count); // no of items +// Generic version uses a defined comparator (with qsort semantics). +inT32 choose_nth_item(inT32 index, // index to choose + void *array, // array of items + inT32 count, // no of items + size_t size, // element size + int (*compar)(const void*, const void*)); // comparator +// Swaps 2 entries in an array in-place. +void swap_entries(void *array, // array of entries + size_t size, // size of entry + inT32 index1, // entries to swap + inT32 index2); + +#endif // TESSERACT_CCSTRUCT_STATISTC_H_ diff --git a/3rdparty/hgOCR/include/ccstruct/stepblob.cpp b/3rdparty/hgOCR/include/ccstruct/stepblob.cpp new file mode 100644 index 00000000..f387aa46 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/stepblob.cpp @@ -0,0 +1,547 @@ +/********************************************************************** + * File: stepblob.cpp (Formerly cblob.c) + * Description: Code for C_BLOB class. + * Author: Ray Smith + * Created: Tue Oct 08 10:41:13 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "stepblob.h" +#include "allheaders.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +// Max perimeter to width ratio for a baseline position above box bottom. +const double kMaxPerimeterWidthRatio = 8.0; + +ELISTIZE (C_BLOB) +/********************************************************************** + * position_outline + * + * Position the outline in the given list at the relevant place + * according to its nesting. + **********************************************************************/ +static void position_outline( //put in place + C_OUTLINE *outline, //thing to place + C_OUTLINE_LIST *destlist //desstination list + ) { + C_OUTLINE *dest_outline; //outline from dest list + C_OUTLINE_IT it = destlist; //iterator + //iterator on children + C_OUTLINE_IT child_it = outline->child (); + + if (!it.empty ()) { + do { + dest_outline = it.data (); //get destination + //encloses dest + if (*dest_outline < *outline) { + //take off list + dest_outline = it.extract (); + //put this in place + it.add_after_then_move (outline); + //make it a child + child_it.add_to_end (dest_outline); + while (!it.at_last ()) { + it.forward (); //do rest of list + //check for other children + dest_outline = it.data (); + if (*dest_outline < *outline) { + //take off list + dest_outline = it.extract (); + child_it.add_to_end (dest_outline); + //make it a child + if (it.empty ()) + break; + } + } + return; //finished + } + //enclosed by dest + else if (*outline < *dest_outline) { + position_outline (outline, dest_outline->child ()); + //place in child list + return; //finished + } + it.forward (); + } + while (!it.at_first ()); + } + it.add_to_end (outline); //at outer level +} + + +/********************************************************************** + * plot_outline_list + * + * Draw a list of outlines in the given colour and their children + * in the child colour. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +static void plot_outline_list( //draw outlines + C_OUTLINE_LIST *list, //outline to draw + ScrollView* window, //window to draw in + ScrollView::Color colour, //colour to use + ScrollView::Color child_colour //colour of children + ) { + C_OUTLINE *outline; //current outline + C_OUTLINE_IT it = list; //iterator + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + outline = it.data (); + //draw it + outline->plot (window, colour); + if (!outline->child ()->empty ()) + plot_outline_list (outline->child (), window, + child_colour, child_colour); + } +} +// Draws the outlines in the given colour, and child_colour, normalized +// using the given denorm, making use of sub-pixel accurate information +// if available. +static void plot_normed_outline_list(const DENORM& denorm, + C_OUTLINE_LIST *list, + ScrollView::Color colour, + ScrollView::Color child_colour, + ScrollView* window) { + C_OUTLINE_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + outline->plot_normed(denorm, colour, window); + if (!outline->child()->empty()) + plot_normed_outline_list(denorm, outline->child(), child_colour, + child_colour, window); + } +} +#endif + + +/********************************************************************** + * reverse_outline_list + * + * Reverse a list of outlines and their children. + **********************************************************************/ + +static void reverse_outline_list(C_OUTLINE_LIST *list) { + C_OUTLINE_IT it = list; // iterator + + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + outline->reverse(); // reverse it + outline->set_flag(COUT_INVERSE, TRUE); + if (!outline->child()->empty()) + reverse_outline_list(outline->child()); + } +} + + +/********************************************************************** + * C_BLOB::C_BLOB + * + * Constructor to build a C_BLOB from a list of C_OUTLINEs. + * The C_OUTLINEs are not copied so the source list is emptied. + * The C_OUTLINEs are nested correctly in the blob. + **********************************************************************/ + +C_BLOB::C_BLOB(C_OUTLINE_LIST *outline_list) { + for (C_OUTLINE_IT ol_it(outline_list); !ol_it.empty(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.extract(); + // Position this outline in appropriate position in the hierarchy. + position_outline(outline, &outlines); + } + CheckInverseFlagAndDirection(); +} + +// Simpler constructor to build a blob from a single outline that has +// already been fully initialized. +C_BLOB::C_BLOB(C_OUTLINE* outline) { + C_OUTLINE_IT it(&outlines); + it.add_to_end(outline); +} + +// Builds a set of one or more blobs from a list of outlines. +// Input: one outline on outline_list contains all the others, but the +// nesting and order are undefined. +// If good_blob is true, the blob is added to good_blobs_it, unless +// an illegal (generation-skipping) parent-child relationship is found. +// If so, the parent blob goes to bad_blobs_it, and the immediate children +// are promoted to the top level, recursively being sent to good_blobs_it. +// If good_blob is false, all created blobs will go to the bad_blobs_it. +// Output: outline_list is empty. One or more blobs are added to +// good_blobs_it and/or bad_blobs_it. +void C_BLOB::ConstructBlobsFromOutlines(bool good_blob, + C_OUTLINE_LIST* outline_list, + C_BLOB_IT* good_blobs_it, + C_BLOB_IT* bad_blobs_it) { + // List of top-level outlines with correctly nested children. + C_OUTLINE_LIST nested_outlines; + for (C_OUTLINE_IT ol_it(outline_list); !ol_it.empty(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.extract(); + // Position this outline in appropriate position in the hierarchy. + position_outline(outline, &nested_outlines); + } + // Check for legal nesting and reassign as required. + for (C_OUTLINE_IT ol_it(&nested_outlines); !ol_it.empty(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.extract(); + bool blob_is_good = good_blob; + if (!outline->IsLegallyNested()) { + // The blob is illegally nested. + // Mark it bad, and add all its children to the top-level list. + blob_is_good = false; + ol_it.add_list_after(outline->child()); + } + C_BLOB* blob = new C_BLOB(outline); + // Set inverse flag and reverse if needed. + blob->CheckInverseFlagAndDirection(); + // Put on appropriate list. + if (!blob_is_good && bad_blobs_it != NULL) + bad_blobs_it->add_after_then_move(blob); + else + good_blobs_it->add_after_then_move(blob); + } +} + +// Sets the COUT_INVERSE flag appropriately on the outlines and their +// children recursively, reversing the outlines if needed so that +// everything has an anticlockwise top-level. +void C_BLOB::CheckInverseFlagAndDirection() { + C_OUTLINE_IT ol_it(&outlines); + for (ol_it.mark_cycle_pt(); !ol_it.cycled_list(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.data(); + if (outline->turn_direction() < 0) { + outline->reverse(); + reverse_outline_list(outline->child()); + outline->set_flag(COUT_INVERSE, TRUE); + } else { + outline->set_flag(COUT_INVERSE, FALSE); + } + } +} + + +// Build and return a fake blob containing a single fake outline with no +// steps. +C_BLOB* C_BLOB::FakeBlob(const TBOX& box) { + C_OUTLINE_LIST outlines; + C_OUTLINE::FakeOutline(box, &outlines); + return new C_BLOB(&outlines); +} + +/********************************************************************** + * C_BLOB::bounding_box + * + * Return the bounding box of the blob. + **********************************************************************/ + +TBOX C_BLOB::bounding_box() const { // bounding box + C_OUTLINE *outline; // current outline + // This is a read-only iteration of the outlines. + C_OUTLINE_IT it = const_cast(&outlines); + TBOX box; // bounding box + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + outline = it.data (); + box += outline->bounding_box (); + } + return box; +} + + +/********************************************************************** + * C_BLOB::area + * + * Return the area of the blob. + **********************************************************************/ + +inT32 C_BLOB::area() { //area + C_OUTLINE *outline; //current outline + C_OUTLINE_IT it = &outlines; //outlines of blob + inT32 total; //total area + + total = 0; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + outline = it.data (); + total += outline->area (); + } + return total; +} + +/********************************************************************** + * C_BLOB::perimeter + * + * Return the perimeter of the top and 2nd level outlines. + **********************************************************************/ + +inT32 C_BLOB::perimeter() { + C_OUTLINE *outline; // current outline + C_OUTLINE_IT it = &outlines; // outlines of blob + inT32 total; // total perimeter + + total = 0; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + outline = it.data(); + total += outline->perimeter(); + } + return total; +} + + +/********************************************************************** + * C_BLOB::outer_area + * + * Return the area of the blob. + **********************************************************************/ + +inT32 C_BLOB::outer_area() { //area + C_OUTLINE *outline; //current outline + C_OUTLINE_IT it = &outlines; //outlines of blob + inT32 total; //total area + + total = 0; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + outline = it.data (); + total += outline->outer_area (); + } + return total; +} + + +/********************************************************************** + * C_BLOB::count_transitions + * + * Return the total x and y maxes and mins in the blob. + * Chlid outlines are not counted. + **********************************************************************/ + +inT32 C_BLOB::count_transitions( //area + inT32 threshold //on size + ) { + C_OUTLINE *outline; //current outline + C_OUTLINE_IT it = &outlines; //outlines of blob + inT32 total; //total area + + total = 0; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + outline = it.data (); + total += outline->count_transitions (threshold); + } + return total; +} + + +/********************************************************************** + * C_BLOB::move + * + * Move C_BLOB by vector + **********************************************************************/ + +void C_BLOB::move( // reposition blob + const ICOORD vec // by vector + ) { + C_OUTLINE_IT it(&outlines); // iterator + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + it.data ()->move (vec); // move each outline +} + +// Static helper for C_BLOB::rotate to allow recursion of child outlines. +void RotateOutlineList(const FCOORD& rotation, C_OUTLINE_LIST* outlines) { + C_OUTLINE_LIST new_outlines; + C_OUTLINE_IT src_it(outlines); + C_OUTLINE_IT dest_it(&new_outlines); + while (!src_it.empty()) { + C_OUTLINE* old_outline = src_it.extract(); + src_it.forward(); + C_OUTLINE* new_outline = new C_OUTLINE(old_outline, rotation); + if (!old_outline->child()->empty()) { + RotateOutlineList(rotation, old_outline->child()); + C_OUTLINE_IT child_it(new_outline->child()); + child_it.add_list_after(old_outline->child()); + } + delete old_outline; + dest_it.add_to_end(new_outline); + } + src_it.add_list_after(&new_outlines); +} + +/********************************************************************** + * C_BLOB::rotate + * + * Rotate C_BLOB by rotation. + * Warning! has to rebuild all the C_OUTLINEs. + **********************************************************************/ +void C_BLOB::rotate(const FCOORD& rotation) { + RotateOutlineList(rotation, &outlines); +} + +// Helper calls ComputeEdgeOffsets or ComputeBinaryOffsets recursively on the +// outline list and its children. +static void ComputeEdgeOffsetsOutlineList(int threshold, Pix* pix, + C_OUTLINE_LIST *list) { + C_OUTLINE_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + if (pix != NULL && pixGetDepth(pix) == 8) + outline->ComputeEdgeOffsets(threshold, pix); + else + outline->ComputeBinaryOffsets(); + if (!outline->child()->empty()) + ComputeEdgeOffsetsOutlineList(threshold, pix, outline->child()); + } +} + +// Adds sub-pixel resolution EdgeOffsets for the outlines using greyscale +// if the supplied pix is 8-bit or the binary edges if NULL. +void C_BLOB::ComputeEdgeOffsets(int threshold, Pix* pix) { + ComputeEdgeOffsetsOutlineList(threshold, pix, &outlines); +} + +// Estimates and returns the baseline position based on the shape of the +// outlines. +// We first find the minimum y-coord (y_mins) at each x-coord within the blob. +// If there is a run of some y or y+1 in y_mins that is longer than the total +// number of positions at bottom or bottom+1, subject to the additional +// condition that at least one side of the y/y+1 run is higher than y+1, so it +// is not a local minimum, then y, not the bottom, makes a good candidate +// baseline position for this blob. Eg +// | ---| +// | | +// |- -----------| <= Good candidate baseline position. +// |- -| +// | -| +// |---| <= Bottom of blob +inT16 C_BLOB::EstimateBaselinePosition() { + TBOX box = bounding_box(); + int left = box.left(); + int width = box.width(); + int bottom = box.bottom(); + if (outlines.empty() || perimeter() > width * kMaxPerimeterWidthRatio) + return bottom; // This is only for non-CJK blobs. + // Get the minimum y coordinate at each x-coordinate. + GenericVector y_mins; + y_mins.init_to_size(width + 1, box.top()); + C_OUTLINE_IT it(&outlines); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + ICOORD pos = outline->start_pos(); + for (int s = 0; s < outline->pathlength(); ++s) { + if (pos.y() < y_mins[pos.x() - left]) + y_mins[pos.x() - left] = pos.y(); + pos += outline->step(s); + } + } + // Find the total extent of the bottom or bottom + 1. + int bottom_extent = 0; + for (int x = 0; x <= width; ++x) { + if (y_mins[x] == bottom || y_mins[x] == bottom + 1) + ++bottom_extent; + } + // Find the lowest run longer than the bottom extent that is not the bottom. + int best_min = box.top(); + int prev_run = 0; + int prev_y = box.top(); + int prev_prev_y = box.top(); + for (int x = 0; x < width; x += prev_run) { + // Find the length of the current run. + int y_at_x = y_mins[x]; + int run = 1; + while (x + run <= width && y_mins[x + run] == y_at_x) ++run; + if (y_at_x > bottom + 1) { + // Possible contender. + int total_run = run; + // Find extent of current value or +1 to the right of x. + while (x + total_run <= width && + (y_mins[x + total_run] == y_at_x || + y_mins[x + total_run] == y_at_x + 1)) ++total_run; + // At least one end has to be higher so it is not a local max. + if (prev_prev_y > y_at_x + 1 || x + total_run > width || + y_mins[x + total_run] > y_at_x + 1) { + // If the prev_run is at y + 1, then we can add that too. There cannot + // be a suitable run at y before that or we would have found it already. + if (prev_run > 0 && prev_y == y_at_x + 1) total_run += prev_run; + if (total_run > bottom_extent && y_at_x < best_min) { + best_min = y_at_x; + } + } + } + prev_run = run; + prev_prev_y = prev_y; + prev_y = y_at_x; + } + return best_min == box.top() ? bottom : best_min; +} + +static void render_outline_list(C_OUTLINE_LIST *list, + int left, int top, Pix* pix) { + C_OUTLINE_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + outline->render(left, top, pix); + if (!outline->child()->empty()) + render_outline_list(outline->child(), left, top, pix); + } +} + +static void render_outline_list_outline(C_OUTLINE_LIST *list, + int left, int top, Pix* pix) { + C_OUTLINE_IT it(list); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + C_OUTLINE* outline = it.data(); + outline->render_outline(left, top, pix); + } +} + +// Returns a Pix rendering of the blob. pixDestroy after use. +Pix* C_BLOB::render() { + TBOX box = bounding_box(); + Pix* pix = pixCreate(box.width(), box.height(), 1); + render_outline_list(&outlines, box.left(), box.top(), pix); + return pix; +} + +// Returns a Pix rendering of the outline of the blob. (no fill). +// pixDestroy after use. +Pix* C_BLOB::render_outline() { + TBOX box = bounding_box(); + Pix* pix = pixCreate(box.width(), box.height(), 1); + render_outline_list_outline(&outlines, box.left(), box.top(), pix); + return pix; +} + +/********************************************************************** + * C_BLOB::plot + * + * Draw the C_BLOB in the given colour. + **********************************************************************/ + +#ifndef GRAPHICS_DISABLED +void C_BLOB::plot(ScrollView* window, // window to draw in + ScrollView::Color blob_colour, // main colour + ScrollView::Color child_colour) { // for holes + plot_outline_list(&outlines, window, blob_colour, child_colour); +} +// Draws the blob in the given colour, and child_colour, normalized +// using the given denorm, making use of sub-pixel accurate information +// if available. +void C_BLOB::plot_normed(const DENORM& denorm, + ScrollView::Color blob_colour, + ScrollView::Color child_colour, + ScrollView* window) { + plot_normed_outline_list(denorm, &outlines, blob_colour, child_colour, + window); +} +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/stepblob.h b/3rdparty/hgOCR/include/ccstruct/stepblob.h new file mode 100644 index 00000000..e1cde2e2 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/stepblob.h @@ -0,0 +1,131 @@ +/********************************************************************** + * File: stepblob.h (Formerly cblob.h) + * Description: Code for C_BLOB class. + * Author: Ray Smith + * Created: Tue Oct 08 10:41:13 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef STEPBLOB_H +#define STEPBLOB_H + +#include "coutln.h" +#include "rect.h" + +class C_BLOB; +struct Pix; +ELISTIZEH(C_BLOB) + +class C_BLOB:public ELIST_LINK +{ + public: + C_BLOB() { + } + explicit C_BLOB(C_OUTLINE_LIST *outline_list); + // Simpler constructor to build a blob from a single outline that has + // already been fully initialized. + explicit C_BLOB(C_OUTLINE* outline); + + // Builds a set of one or more blobs from a list of outlines. + // Input: one outline on outline_list contains all the others, but the + // nesting and order are undefined. + // If good_blob is true, the blob is added to good_blobs_it, unless + // an illegal (generation-skipping) parent-child relationship is found. + // If so, the parent blob goes to bad_blobs_it, and the immediate children + // are promoted to the top level, recursively being sent to good_blobs_it. + // If good_blob is false, all created blobs will go to the bad_blobs_it. + // Output: outline_list is empty. One or more blobs are added to + // good_blobs_it and/or bad_blobs_it. + static void ConstructBlobsFromOutlines(bool good_blob, + C_OUTLINE_LIST* outline_list, + C_BLOB_IT* good_blobs_it, + C_BLOB_IT* bad_blobs_it); + + // Sets the COUT_INVERSE flag appropriately on the outlines and their + // children recursively, reversing the outlines if needed so that + // everything has an anticlockwise top-level. + void CheckInverseFlagAndDirection(); + + // Build and return a fake blob containing a single fake outline with no + // steps. + static C_BLOB* FakeBlob(const TBOX& box); + + C_OUTLINE_LIST *out_list() { //get outline list + return &outlines; + } + + TBOX bounding_box() const; // compute bounding box + inT32 area(); //compute area + inT32 perimeter(); // Total perimeter of outlines and 1st level children. + inT32 outer_area(); //compute area + inT32 count_transitions( //count maxima + inT32 threshold); //size threshold + + void move(const ICOORD vec); // repostion blob by vector + void rotate(const FCOORD& rotation); // Rotate by given vector. + + // Adds sub-pixel resolution EdgeOffsets for the outlines using greyscale + // if the supplied pix is 8-bit or the binary edges if NULL. + void ComputeEdgeOffsets(int threshold, Pix* pix); + + // Estimates and returns the baseline position based on the shape of the + // outlines. + inT16 EstimateBaselinePosition(); + + // Returns a Pix rendering of the blob. pixDestroy after use. + Pix* render(); + // Returns a Pix rendering of the outline of the blob. (no fill). + // pixDestroy after use. + Pix* render_outline(); + + #ifndef GRAPHICS_DISABLED + void plot( //draw one + ScrollView* window, //window to draw in + ScrollView::Color blob_colour, //for outer bits + ScrollView::Color child_colour); //for holes + // Draws the blob in the given colour, and child_colour, normalized + // using the given denorm, making use of sub-pixel accurate information + // if available. + void plot_normed(const DENORM& denorm, + ScrollView::Color blob_colour, + ScrollView::Color child_colour, + ScrollView* window); + #endif // GRAPHICS_DISABLED + + C_BLOB& operator= (const C_BLOB & source) { + if (!outlines.empty ()) + outlines.clear(); + outlines.deep_copy(&source.outlines, &C_OUTLINE::deep_copy); + return *this; + } + + static C_BLOB* deep_copy(const C_BLOB* src) { + C_BLOB* blob = new C_BLOB; + *blob = *src; + return blob; + } + + static int SortByXMiddle(const void *v1, const void *v2) { + const C_BLOB* blob1 = *reinterpret_cast(v1); + const C_BLOB* blob2 = *reinterpret_cast(v2); + return blob1->bounding_box().x_middle() - + blob2->bounding_box().x_middle(); + } + + + private: + C_OUTLINE_LIST outlines; //master elements +}; + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/vecfuncs.cpp b/3rdparty/hgOCR/include/ccstruct/vecfuncs.cpp new file mode 100644 index 00000000..bafca55d --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/vecfuncs.cpp @@ -0,0 +1,63 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: vecfuncs.c (Formerly vecfuncs.c) + * Description: Blob definition + * Author: Mark Seaman, OCR Technology + * Created: Fri Oct 27 15:39:52 1989 + * Modified: Tue Jul 9 17:44:12 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1989, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + ******************************************************************************** + * Revision 5.1 89/07/27 11:47:50 11:47:50 ray () + * Added ratings access methods. + * This version ready for independent development. + */ +/*---------------------------------------------------------------------- + I n c l u d e s +----------------------------------------------------------------------*/ +#include "vecfuncs.h" +#include "blobs.h" + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ +/********************************************************************** + * direction + * + * Show if the line is going in the positive or negative X direction. + **********************************************************************/ +int direction(EDGEPT *point) { + int dir; /** direction to return **/ + EDGEPT *prev; /** prev point **/ + EDGEPT *next; /** next point **/ + + dir = 0; + prev = point->prev; + next = point->next; + + if (((prev->pos.x <= point->pos.x) && + (point->pos.x < next->pos.x)) || + ((prev->pos.x < point->pos.x) && (point->pos.x <= next->pos.x))) + dir = 1; + + if (((prev->pos.x >= point->pos.x) && + (point->pos.x > next->pos.x)) || + ((prev->pos.x > point->pos.x) && (point->pos.x >= next->pos.x))) + dir = -1; + + return dir; +} diff --git a/3rdparty/hgOCR/include/ccstruct/vecfuncs.h b/3rdparty/hgOCR/include/ccstruct/vecfuncs.h new file mode 100644 index 00000000..55cf3108 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/vecfuncs.h @@ -0,0 +1,78 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: vecfuncs.h (Formerly vecfuncs.h) + * Description: Vector calculations + * Author: Mark Seaman, OCR Technology + * Created: Wed Dec 20 09:37:18 1989 + * Modified: Tue Jul 9 17:44:37 1991 (Mark Seaman) marks@hpgrlt + * Language: C + * Package: N/A + * Status: Experimental (Do Not Distribute) + * + * (c) Copyright 1989, Hewlett-Packard Company. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + *********************************************************************************/ +#ifndef VECFUNCS_H +#define VECFUNCS_H + +#include + +struct EDGEPT; + +/*---------------------------------------------------------------------- + M a c r o s +----------------------------------------------------------------------*/ +/********************************************************************** + * point_diff + * + * Return the difference from point (p1) to point (p2). Put the value + * into point (p). + **********************************************************************/ + +#define point_diff(p,p1,p2) \ +((p).x = (p1).x - (p2).x, \ + (p).y = (p1).y - (p2).y) + +/********************************************************************** + * CROSS + * + * cross product + **********************************************************************/ + +#define CROSS(a,b) \ +((a).x * (b).y - (a).y * (b).x) + +/********************************************************************** + * SCALAR + * + * scalar vector product + **********************************************************************/ + +#define SCALAR(a,b) \ +((a).x * (b).x + (a).y * (b).y) + +/********************************************************************** + * LENGTH + * + * length of vector + **********************************************************************/ + +#define LENGTH(a) \ +((a).x * (a).x + (a).y * (a).y) + +/*---------------------------------------------------------------------- + F u n c t i o n s +----------------------------------------------------------------------*/ +int direction(EDGEPT *point); + +#endif diff --git a/3rdparty/hgOCR/include/ccstruct/werd.cpp b/3rdparty/hgOCR/include/ccstruct/werd.cpp new file mode 100644 index 00000000..4410a06f --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/werd.cpp @@ -0,0 +1,600 @@ +/********************************************************************** + * File: werd.cpp (Formerly word.c) + * Description: Code for the WERD class. + * Author: Ray Smith + * Created: Tue Oct 08 14:32:12 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "blckerr.h" +#include "helpers.h" +#include "linlsq.h" +#include "werd.h" + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#define FIRST_COLOUR ScrollView::RED //< first rainbow colour +#define LAST_COLOUR ScrollView::AQUAMARINE //< last rainbow colour +#define CHILD_COLOUR ScrollView::BROWN //< colour of children + +const ERRCODE CANT_SCALE_EDGESTEPS = + "Attempted to scale an edgestep format word"; + +ELIST2IZE(WERD) + +/** + * WERD::WERD + * + * Constructor to build a WERD from a list of C_BLOBs. + * blob_list The C_BLOBs (in word order) are not copied; + * we take its elements and put them in our lists. + * blank_count blanks in front of the word + * text correct text, outlives this WERD + */ +WERD::WERD(C_BLOB_LIST *blob_list, uinT8 blank_count, const char *text) + : blanks(blank_count), + flags(0), + script_id_(0), + correct(text) { + C_BLOB_IT start_it = &cblobs; + C_BLOB_IT rej_cblob_it = &rej_cblobs; + C_OUTLINE_IT c_outline_it; + inT16 inverted_vote = 0; + inT16 non_inverted_vote = 0; + + // Move blob_list's elements into cblobs. + start_it.add_list_after(blob_list); + + /* + Set white on black flag for the WERD, moving any duff blobs onto the + rej_cblobs list. + First, walk the cblobs checking the inverse flag for each outline of each + cblob. If a cblob has inconsistent flag settings for its different + outlines, move the blob to the reject list. Otherwise, increment the + appropriate w-on-b or b-on-w vote for the word. + + Now set the inversion flag for the WERD by maximum vote. + + Walk the blobs again, moving any blob whose inversion flag does not agree + with the concencus onto the reject list. + */ + start_it.set_to_list(&cblobs); + if (start_it.empty()) + return; + for (start_it.mark_cycle_pt(); !start_it.cycled_list(); start_it.forward()) { + BOOL8 reject_blob = FALSE; + BOOL8 blob_inverted; + + c_outline_it.set_to_list(start_it.data()->out_list()); + blob_inverted = c_outline_it.data()->flag(COUT_INVERSE); + for (c_outline_it.mark_cycle_pt(); + !c_outline_it.cycled_list() && !reject_blob; + c_outline_it.forward()) { + reject_blob = c_outline_it.data()->flag(COUT_INVERSE) != blob_inverted; + } + if (reject_blob) { + rej_cblob_it.add_after_then_move(start_it.extract()); + } else { + if (blob_inverted) + inverted_vote++; + else + non_inverted_vote++; + } + } + + flags.set_bit(W_INVERSE, (inverted_vote > non_inverted_vote)); + + start_it.set_to_list(&cblobs); + if (start_it.empty()) + return; + for (start_it.mark_cycle_pt(); !start_it.cycled_list(); start_it.forward()) { + c_outline_it.set_to_list(start_it.data()->out_list()); + if (c_outline_it.data()->flag(COUT_INVERSE) != flags.bit(W_INVERSE)) + rej_cblob_it.add_after_then_move(start_it.extract()); + } +} + + +/** + * WERD::WERD + * + * Constructor to build a WERD from a list of C_BLOBs. + * The C_BLOBs are not copied so the source list is emptied. + */ + +WERD::WERD(C_BLOB_LIST * blob_list, //< In word order + WERD * clone) //< Source of flags + : flags(clone->flags), + script_id_(clone->script_id_), + correct(clone->correct) { + C_BLOB_IT start_it = blob_list; // iterator + C_BLOB_IT end_it = blob_list; // another + + while (!end_it.at_last ()) + end_it.forward (); //move to last + ((C_BLOB_LIST *) (&cblobs))->assign_to_sublist (&start_it, &end_it); + //move to our list + blanks = clone->blanks; + // fprintf(stderr,"Wrong constructor!!!!\n"); +} + +// Construct a WERD from a single_blob and clone the flags from this. +// W_BOL and W_EOL flags are set according to the given values. +WERD* WERD::ConstructFromSingleBlob(bool bol, bool eol, C_BLOB* blob) { + C_BLOB_LIST temp_blobs; + C_BLOB_IT temp_it(&temp_blobs); + temp_it.add_after_then_move(blob); + WERD* blob_word = new WERD(&temp_blobs, this); + blob_word->set_flag(W_BOL, bol); + blob_word->set_flag(W_EOL, eol); + return blob_word; +} + +/** + * WERD::bounding_box + * + * Return the bounding box of the WERD. + * This is quite a mess to compute! + * ORIGINALLY, REJECT CBLOBS WERE EXCLUDED, however, this led to bugs when the + * words on the row were re-sorted. The original words were built with reject + * blobs included. The FUZZY SPACE flags were set accordingly. If ALL the + * blobs in a word are rejected the BB for the word is NULL, causing the sort + * to screw up, leading to the erroneous possibility of the first word in a + * row being marked as FUZZY space. + */ + +TBOX WERD::bounding_box() const { return restricted_bounding_box(true, true); } + +// Returns the bounding box including the desired combination of upper and +// lower noise/diacritic elements. +TBOX WERD::restricted_bounding_box(bool upper_dots, bool lower_dots) const { + TBOX box = true_bounding_box(); + int bottom = box.bottom(); + int top = box.top(); + // This is a read-only iteration of the rejected blobs. + C_BLOB_IT it(const_cast(&rej_cblobs)); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + TBOX dot_box = it.data()->bounding_box(); + if ((upper_dots || dot_box.bottom() <= top) && + (lower_dots || dot_box.top() >= bottom)) { + box += dot_box; + } + } + return box; +} + +// Returns the bounding box of only the good blobs. +TBOX WERD::true_bounding_box() const { + TBOX box; // box being built + // This is a read-only iteration of the good blobs. + C_BLOB_IT it(const_cast(&cblobs)); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + box += it.data()->bounding_box(); + } + return box; +} + +/** + * WERD::move + * + * Reposition WERD by vector + * NOTE!! REJECT CBLOBS ARE NOT MOVED + */ + +void WERD::move(const ICOORD vec) { + C_BLOB_IT cblob_it(&cblobs); // cblob iterator + + for (cblob_it.mark_cycle_pt(); !cblob_it.cycled_list(); cblob_it.forward()) + cblob_it.data()->move(vec); +} + +/** + * WERD::join_on + * + * Join other word onto this one. Delete the old word. + */ + +void WERD::join_on(WERD* other) { + C_BLOB_IT blob_it(&cblobs); + C_BLOB_IT src_it(&other->cblobs); + C_BLOB_IT rej_cblob_it(&rej_cblobs); + C_BLOB_IT src_rej_it(&other->rej_cblobs); + + while (!src_it.empty()) { + blob_it.add_to_end(src_it.extract()); + src_it.forward(); + } + while (!src_rej_it.empty()) { + rej_cblob_it.add_to_end(src_rej_it.extract()); + src_rej_it.forward(); + } +} + + +/** + * WERD::copy_on + * + * Copy blobs from other word onto this one. + */ + +void WERD::copy_on(WERD* other) { + bool reversed = other->bounding_box().left() < bounding_box().left(); + C_BLOB_IT c_blob_it(&cblobs); + C_BLOB_LIST c_blobs; + + c_blobs.deep_copy(&other->cblobs, &C_BLOB::deep_copy); + if (reversed) { + c_blob_it.add_list_before(&c_blobs); + } else { + c_blob_it.move_to_last(); + c_blob_it.add_list_after(&c_blobs); + } + if (!other->rej_cblobs.empty()) { + C_BLOB_IT rej_c_blob_it(&rej_cblobs); + C_BLOB_LIST new_rej_c_blobs; + + new_rej_c_blobs.deep_copy(&other->rej_cblobs, &C_BLOB::deep_copy); + if (reversed) { + rej_c_blob_it.add_list_before(&new_rej_c_blobs); + } else { + rej_c_blob_it.move_to_last(); + rej_c_blob_it.add_list_after(&new_rej_c_blobs); + } + } +} + +/** + * WERD::print + * + * Display members + */ + +void WERD::print() { + tprintf("Blanks= %d\n", blanks); + bounding_box().print(); + tprintf("Flags = %d = 0%o\n", flags.val, flags.val); + tprintf(" W_SEGMENTED = %s\n", flags.bit(W_SEGMENTED) ? "TRUE" : "FALSE "); + tprintf(" W_ITALIC = %s\n", flags.bit(W_ITALIC) ? "TRUE" : "FALSE "); + tprintf(" W_BOL = %s\n", flags.bit(W_BOL) ? "TRUE" : "FALSE "); + tprintf(" W_EOL = %s\n", flags.bit(W_EOL) ? "TRUE" : "FALSE "); + tprintf(" W_NORMALIZED = %s\n", + flags.bit(W_NORMALIZED) ? "TRUE" : "FALSE "); + tprintf(" W_SCRIPT_HAS_XHEIGHT = %s\n", + flags.bit(W_SCRIPT_HAS_XHEIGHT) ? "TRUE" : "FALSE "); + tprintf(" W_SCRIPT_IS_LATIN = %s\n", + flags.bit(W_SCRIPT_IS_LATIN) ? "TRUE" : "FALSE "); + tprintf(" W_DONT_CHOP = %s\n", flags.bit(W_DONT_CHOP) ? "TRUE" : "FALSE "); + tprintf(" W_REP_CHAR = %s\n", flags.bit(W_REP_CHAR) ? "TRUE" : "FALSE "); + tprintf(" W_FUZZY_SP = %s\n", flags.bit(W_FUZZY_SP) ? "TRUE" : "FALSE "); + tprintf(" W_FUZZY_NON = %s\n", flags.bit(W_FUZZY_NON) ? "TRUE" : "FALSE "); + tprintf("Correct= %s\n", correct.string()); + tprintf("Rejected cblob count = %d\n", rej_cblobs.length()); + tprintf("Script = %d\n", script_id_); +} + + +/** + * WERD::plot + * + * Draw the WERD in the given colour. + */ + +#ifndef GRAPHICS_DISABLED +void WERD::plot(ScrollView *window, ScrollView::Color colour) { + C_BLOB_IT it = &cblobs; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot(window, colour, colour); + } + plot_rej_blobs(window); +} + +// Get the next color in the (looping) rainbow. +ScrollView::Color WERD::NextColor(ScrollView::Color colour) { + ScrollView::Color next = static_cast(colour + 1); + if (next >= LAST_COLOUR || next < FIRST_COLOUR) + next = FIRST_COLOUR; + return next; +} + +/** + * WERD::plot + * + * Draw the WERD in rainbow colours in window. + */ + +void WERD::plot(ScrollView* window) { + ScrollView::Color colour = FIRST_COLOUR; + C_BLOB_IT it = &cblobs; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot(window, colour, CHILD_COLOUR); + colour = NextColor(colour); + } + plot_rej_blobs(window); +} + + +/** + * WERD::plot_rej_blobs + * + * Draw the WERD rejected blobs in window - ALWAYS GREY + */ + + +void WERD::plot_rej_blobs(ScrollView *window) { + C_BLOB_IT it = &rej_cblobs; + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + it.data()->plot(window, ScrollView::GREY, ScrollView::GREY); + } +} +#endif // GRAPHICS_DISABLED + + +/** + * WERD::shallow_copy() + * + * Make a shallow copy of a word + */ + +WERD *WERD::shallow_copy() { + WERD *new_word = new WERD; + + new_word->blanks = blanks; + new_word->flags = flags; + new_word->dummy = dummy; + new_word->correct = correct; + return new_word; +} + + +/** + * WERD::operator= + * + * Assign a word, DEEP copying the blob list + */ + +WERD & WERD::operator= (const WERD & source) { + this->ELIST2_LINK::operator= (source); + blanks = source.blanks; + flags = source.flags; + script_id_ = source.script_id_; + dummy = source.dummy; + correct = source.correct; + if (!cblobs.empty()) + cblobs.clear(); + cblobs.deep_copy(&source.cblobs, &C_BLOB::deep_copy); + + if (!rej_cblobs.empty()) + rej_cblobs.clear(); + rej_cblobs.deep_copy(&source.rej_cblobs, &C_BLOB::deep_copy); + return *this; +} + + +/** + * word_comparator() + * + * word comparator used to sort a word list so that words are in increasing + * order of left edge. + */ + +int word_comparator(const void *word1p, const void *word2p) { + WERD *word1 = *(WERD **)word1p; + WERD *word2 = *(WERD **)word2p; + return word1->bounding_box().left() - word2->bounding_box().left(); +} + +/** + * WERD::ConstructWerdWithNewBlobs() + * + * This method returns a new werd constructed using the blobs in the input + * all_blobs list, which correspond to the blobs in this werd object. The + * blobs used to construct the new word are consumed and removed from the + * input all_blobs list. + * Returns NULL if the word couldn't be constructed. + * Returns original blobs for which no matches were found in the output list + * orphan_blobs (appends). + */ + +WERD* WERD::ConstructWerdWithNewBlobs(C_BLOB_LIST* all_blobs, + C_BLOB_LIST* orphan_blobs) { + C_BLOB_LIST current_blob_list; + C_BLOB_IT werd_blobs_it(¤t_blob_list); + // Add the word's c_blobs. + werd_blobs_it.add_list_after(cblob_list()); + + // New blob list. These contain the blobs which will form the new word. + C_BLOB_LIST new_werd_blobs; + C_BLOB_IT new_blobs_it(&new_werd_blobs); + + // not_found_blobs contains the list of current word's blobs for which a + // corresponding blob wasn't found in the input all_blobs list. + C_BLOB_LIST not_found_blobs; + C_BLOB_IT not_found_it(¬_found_blobs); + not_found_it.move_to_last(); + + werd_blobs_it.move_to_first(); + for (werd_blobs_it.mark_cycle_pt(); !werd_blobs_it.cycled_list(); + werd_blobs_it.forward()) { + C_BLOB* werd_blob = werd_blobs_it.extract(); + TBOX werd_blob_box = werd_blob->bounding_box(); + bool found = false; + // Now find the corresponding blob for this blob in the all_blobs + // list. For now, follow the inefficient method of pairwise + // comparisons. Ideally, one can pre-bucket the blobs by row. + C_BLOB_IT all_blobs_it(all_blobs); + for (all_blobs_it.mark_cycle_pt(); !all_blobs_it.cycled_list(); + all_blobs_it.forward()) { + C_BLOB* a_blob = all_blobs_it.data(); + // Compute the overlap of the two blobs. If major, a_blob should + // be added to the new blobs list. + TBOX a_blob_box = a_blob->bounding_box(); + if (a_blob_box.null_box()) { + tprintf("Bounding box couldn't be ascertained\n"); + } + if (werd_blob_box.contains(a_blob_box) || + werd_blob_box.major_overlap(a_blob_box)) { + // Old blobs are from minimal splits, therefore are expected to be + // bigger. The new small blobs should cover a significant portion. + // This is it. + all_blobs_it.extract(); + new_blobs_it.add_after_then_move(a_blob); + found = true; + } + } + if (!found) { + not_found_it.add_after_then_move(werd_blob); + } else { + delete werd_blob; + } + } + // Iterate over all not found blobs. Some of them may be due to + // under-segmentation (which is OK, since the corresponding blob is already + // in the list in that case. + not_found_it.move_to_first(); + for (not_found_it.mark_cycle_pt(); !not_found_it.cycled_list(); + not_found_it.forward()) { + C_BLOB* not_found = not_found_it.data(); + TBOX not_found_box = not_found->bounding_box(); + C_BLOB_IT existing_blobs_it(new_blobs_it); + for (existing_blobs_it.mark_cycle_pt(); !existing_blobs_it.cycled_list(); + existing_blobs_it.forward()) { + C_BLOB* a_blob = existing_blobs_it.data(); + TBOX a_blob_box = a_blob->bounding_box(); + if ((not_found_box.major_overlap(a_blob_box) || + a_blob_box.major_overlap(not_found_box)) && + not_found_box.y_overlap_fraction(a_blob_box) > 0.8) { + // Already taken care of. + delete not_found_it.extract(); + break; + } + } + } + if (orphan_blobs) { + C_BLOB_IT orphan_blobs_it(orphan_blobs); + orphan_blobs_it.move_to_last(); + orphan_blobs_it.add_list_after(¬_found_blobs); + } + + // New blobs are ready. Create a new werd object with these. + WERD* new_werd = NULL; + if (!new_werd_blobs.empty()) { + new_werd = new WERD(&new_werd_blobs, this); + } else { + // Add the blobs back to this word so that it can be reused. + C_BLOB_IT this_list_it(cblob_list()); + this_list_it.add_list_after(¬_found_blobs); + } + return new_werd; +} + +// Removes noise from the word by moving small outlines to the rej_cblobs +// list, based on the size_threshold. +void WERD::CleanNoise(float size_threshold) { + C_BLOB_IT blob_it(&cblobs); + C_BLOB_IT rej_it(&rej_cblobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + C_OUTLINE_IT ol_it(blob->out_list()); + for (ol_it.mark_cycle_pt(); !ol_it.cycled_list(); ol_it.forward()) { + C_OUTLINE* outline = ol_it.data(); + TBOX ol_box = outline->bounding_box(); + int ol_size = + ol_box.width() > ol_box.height() ? ol_box.width() : ol_box.height(); + if (ol_size < size_threshold) { + // This outline is too small. Move it to a separate blob in the + // reject blobs list. + C_BLOB* rej_blob = new C_BLOB(ol_it.extract()); + rej_it.add_after_then_move(rej_blob); + } + } + if (blob->out_list()->empty()) delete blob_it.extract(); + } +} + +// Extracts all the noise outlines and stuffs the pointers into the given +// vector of outlines. Afterwards, the outlines vector owns the pointers. +void WERD::GetNoiseOutlines(GenericVector* outlines) { + C_BLOB_IT rej_it(&rej_cblobs); + for (rej_it.mark_cycle_pt(); !rej_it.empty(); rej_it.forward()) { + C_BLOB* blob = rej_it.extract(); + C_OUTLINE_IT ol_it(blob->out_list()); + outlines->push_back(ol_it.extract()); + delete blob; + } +} + +// Adds the selected outlines to the indcated real blobs, and puts the rest +// back in rej_cblobs where they came from. Where the target_blobs entry is +// NULL, a run of wanted outlines is put into a single new blob. +// Ownership of the outlines is transferred back to the word. (Hence +// GenericVector and not PointerVector.) +// Returns true if any new blob was added to the start of the word, which +// suggests that it might need joining to the word before it, and likewise +// sets make_next_word_fuzzy true if any new blob was added to the end. +bool WERD::AddSelectedOutlines(const GenericVector& wanted, + const GenericVector& target_blobs, + const GenericVector& outlines, + bool* make_next_word_fuzzy) { + bool outline_added_to_start = false; + if (make_next_word_fuzzy != NULL) *make_next_word_fuzzy = false; + C_BLOB_IT rej_it(&rej_cblobs); + for (int i = 0; i < outlines.size(); ++i) { + C_OUTLINE* outline = outlines[i]; + if (outline == NULL) continue; // Already used it. + if (wanted[i]) { + C_BLOB* target_blob = target_blobs[i]; + TBOX noise_box = outline->bounding_box(); + if (target_blob == NULL) { + target_blob = new C_BLOB(outline); + // Need to find the insertion point. + C_BLOB_IT blob_it(&cblobs); + for (blob_it.mark_cycle_pt(); !blob_it.cycled_list(); + blob_it.forward()) { + C_BLOB* blob = blob_it.data(); + TBOX blob_box = blob->bounding_box(); + if (blob_box.left() > noise_box.left()) { + if (blob_it.at_first() && !flag(W_FUZZY_SP) && !flag(W_FUZZY_NON)) { + // We might want to join this word to its predecessor. + outline_added_to_start = true; + } + blob_it.add_before_stay_put(target_blob); + break; + } + } + if (blob_it.cycled_list()) { + blob_it.add_to_end(target_blob); + if (make_next_word_fuzzy != NULL) *make_next_word_fuzzy = true; + } + // Add all consecutive wanted, but null-blob outlines to same blob. + C_OUTLINE_IT ol_it(target_blob->out_list()); + while (i + 1 < outlines.size() && wanted[i + 1] && + target_blobs[i + 1] == NULL) { + ++i; + ol_it.add_to_end(outlines[i]); + } + } else { + // Insert outline into this blob. + C_OUTLINE_IT ol_it(target_blob->out_list()); + ol_it.add_to_end(outline); + } + } else { + // Put back on noise list. + rej_it.add_to_end(new C_BLOB(outline)); + } + } + return outline_added_to_start; +} diff --git a/3rdparty/hgOCR/include/ccstruct/werd.h b/3rdparty/hgOCR/include/ccstruct/werd.h new file mode 100644 index 00000000..f9a89fb5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccstruct/werd.h @@ -0,0 +1,199 @@ +/********************************************************************** + * File: word.c + * Description: Code for the WERD class. + * Author: Ray Smith + * Created: Tue Oct 08 14:32:12 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef WERD_H +#define WERD_H + +#include "params.h" +#include "bits16.h" +#include "elst2.h" +#include "strngs.h" +#include "blckerr.h" +#include "stepblob.h" + +enum WERD_FLAGS +{ + W_SEGMENTED, //< correctly segmented + W_ITALIC, //< italic text + W_BOLD, //< bold text + W_BOL, //< start of line + W_EOL, //< end of line + W_NORMALIZED, //< flags + W_SCRIPT_HAS_XHEIGHT, //< x-height concept makes sense. + W_SCRIPT_IS_LATIN, //< Special case latin for y. splitting. + W_DONT_CHOP, //< fixed pitch chopped + W_REP_CHAR, //< repeated character + W_FUZZY_SP, //< fuzzy space + W_FUZZY_NON, //< fuzzy nonspace + W_INVERSE //< white on black +}; + +enum DISPLAY_FLAGS +{ + /* Display flags bit number allocations */ + DF_BOX, //< Bounding box + DF_TEXT, //< Correct ascii + DF_POLYGONAL, //< Polyg approx + DF_EDGE_STEP, //< Edge steps + DF_BN_POLYGONAL, //< BL normalisd polyapx + DF_BLAMER //< Blamer information +}; + +class ROW; //forward decl + +class WERD : public ELIST2_LINK { + public: + WERD() {} + // WERD constructed with: + // blob_list - blobs of the word (we take this list's contents) + // blanks - number of blanks before the word + // text - correct text (outlives WERD) + WERD(C_BLOB_LIST *blob_list, uinT8 blanks, const char *text); + + // WERD constructed from: + // blob_list - blobs in the word + // clone - werd to clone flags, etc from. + WERD(C_BLOB_LIST *blob_list, WERD *clone); + + // Construct a WERD from a single_blob and clone the flags from this. + // W_BOL and W_EOL flags are set according to the given values. + WERD* ConstructFromSingleBlob(bool bol, bool eol, C_BLOB* blob); + + ~WERD() { + } + + // assignment + WERD & operator= (const WERD &source); + + // This method returns a new werd constructed using the blobs in the input + // all_blobs list, which correspond to the blobs in this werd object. The + // blobs used to construct the new word are consumed and removed from the + // input all_blobs list. + // Returns NULL if the word couldn't be constructed. + // Returns original blobs for which no matches were found in the output list + // orphan_blobs (appends). + WERD *ConstructWerdWithNewBlobs(C_BLOB_LIST *all_blobs, + C_BLOB_LIST *orphan_blobs); + + // Accessors for reject / DUFF blobs in various formats + C_BLOB_LIST *rej_cblob_list() { // compact format + return &rej_cblobs; + } + + // Accessors for good blobs in various formats. + C_BLOB_LIST *cblob_list() { // get compact blobs + return &cblobs; + } + + uinT8 space() { // access function + return blanks; + } + void set_blanks(uinT8 new_blanks) { + blanks = new_blanks; + } + int script_id() const { + return script_id_; + } + void set_script_id(int id) { + script_id_ = id; + } + + // Returns the (default) bounding box including all the dots. + TBOX bounding_box() const; // compute bounding box + // Returns the bounding box including the desired combination of upper and + // lower noise/diacritic elements. + TBOX restricted_bounding_box(bool upper_dots, bool lower_dots) const; + // Returns the bounding box of only the good blobs. + TBOX true_bounding_box() const; + + const char *text() const { return correct.string(); } + void set_text(const char *new_text) { correct = new_text; } + + BOOL8 flag(WERD_FLAGS mask) const { return flags.bit(mask); } + void set_flag(WERD_FLAGS mask, BOOL8 value) { flags.set_bit(mask, value); } + + BOOL8 display_flag(uinT8 flag) const { return disp_flags.bit(flag); } + void set_display_flag(uinT8 flag, BOOL8 value) { + disp_flags.set_bit(flag, value); + } + + WERD *shallow_copy(); // shallow copy word + + // reposition word by vector + void move(const ICOORD vec); + + // join other's blobs onto this werd, emptying out other. + void join_on(WERD* other); + + // copy other's blobs onto this word, leaving other intact. + void copy_on(WERD* other); + + // tprintf word metadata (but not blob innards) + void print(); + + #ifndef GRAPHICS_DISABLED + // plot word on window in a uniform colour + void plot(ScrollView *window, ScrollView::Color colour); + + // Get the next color in the (looping) rainbow. + static ScrollView::Color NextColor(ScrollView::Color colour); + + // plot word on window in a rainbow of colours + void plot(ScrollView *window); + + // plot rejected blobs in a rainbow of colours + void plot_rej_blobs(ScrollView *window); + #endif // GRAPHICS_DISABLED + + // Removes noise from the word by moving small outlines to the rej_cblobs + // list, based on the size_threshold. + void CleanNoise(float size_threshold); + + // Extracts all the noise outlines and stuffs the pointers into the given + // vector of outlines. Afterwards, the outlines vector owns the pointers. + void GetNoiseOutlines(GenericVector *outlines); + // Adds the selected outlines to the indcated real blobs, and puts the rest + // back in rej_cblobs where they came from. Where the target_blobs entry is + // NULL, a run of wanted outlines is put into a single new blob. + // Ownership of the outlines is transferred back to the word. (Hence + // GenericVector and not PointerVector.) + // Returns true if any new blob was added to the start of the word, which + // suggests that it might need joining to the word before it, and likewise + // sets make_next_word_fuzzy true if any new blob was added to the end. + bool AddSelectedOutlines(const GenericVector &wanted, + const GenericVector &target_blobs, + const GenericVector &outlines, + bool *make_next_word_fuzzy); + + private: + uinT8 blanks; // no of blanks + uinT8 dummy; // padding + BITS16 flags; // flags about word + BITS16 disp_flags; // display flags + inT16 script_id_; // From unicharset. + STRING correct; // correct text + C_BLOB_LIST cblobs; // compacted blobs + C_BLOB_LIST rej_cblobs; // DUFF blobs +}; + +ELIST2IZEH (WERD) +#include "ocrrow.h" // placed here due to +// compare words by increasing order of left edge, suitable for qsort(3) +int word_comparator(const void *word1p, const void *word2p); +#endif diff --git a/3rdparty/hgOCR/include/ccutil/ambigs.cpp b/3rdparty/hgOCR/include/ccutil/ambigs.cpp new file mode 100644 index 00000000..15a755de --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ambigs.cpp @@ -0,0 +1,398 @@ +/////////////////////////////////////////////////////////////////////// +// File: ambigs.cc +// Description: Functions for dealing with ambiguities +// (training and recognition). +// Author: Daria Antonova +// Created: Mon Feb 5 11:26:43 PDT 2009 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "ambigs.h" + +#include +#include "helpers.h" +#include "universalambigs.h" + +#if defined _WIN32 +#ifndef __GNUC__ +#define strtok_r strtok_s +#else +#include "strtok_r.h" +#endif /* __GNUC__ */ +#endif /* _WIN32 */ + +namespace tesseract { + +// Maximum line size: +// 10 for sizes of ambigs, tabs, abmig type and newline +// UNICHAR_LEN * (MAX_AMBIG_SIZE + 1) for each part of the ambig +const int kMaxAmbigStringSize = UNICHAR_LEN * (MAX_AMBIG_SIZE + 1); + +AmbigSpec::AmbigSpec() { + wrong_ngram[0] = INVALID_UNICHAR_ID; + correct_fragments[0] = INVALID_UNICHAR_ID; + correct_ngram_id = INVALID_UNICHAR_ID; + type = NOT_AMBIG; + wrong_ngram_size = 0; +} + +ELISTIZE(AmbigSpec); + +// Initializes the ambigs by adding a NULL pointer to each table. +void UnicharAmbigs::InitUnicharAmbigs(const UNICHARSET& unicharset, + bool use_ambigs_for_adaption) { + for (int i = 0; i < unicharset.size(); ++i) { + replace_ambigs_.push_back(NULL); + dang_ambigs_.push_back(NULL); + one_to_one_definite_ambigs_.push_back(NULL); + if (use_ambigs_for_adaption) { + ambigs_for_adaption_.push_back(NULL); + reverse_ambigs_for_adaption_.push_back(NULL); + } + } +} + +// Loads the universal ambigs that are useful for any language. +void UnicharAmbigs::LoadUniversal(const UNICHARSET& encoder_set, + UNICHARSET* unicharset) { + TFile file; + if (!file.Open(kUniversalAmbigsFile, ksizeofUniversalAmbigsFile)) return; + LoadUnicharAmbigs(encoder_set, &file, 0, false, unicharset); +} + +void UnicharAmbigs::LoadUnicharAmbigs(const UNICHARSET& encoder_set, + TFile *ambig_file, + int debug_level, + bool use_ambigs_for_adaption, + UNICHARSET *unicharset) { + int i, j; + UnicharIdVector *adaption_ambigs_entry; + if (debug_level) tprintf("Reading ambiguities\n"); + + int test_ambig_part_size; + int replacement_ambig_part_size; + // The space for buffer is allocated on the heap to avoid + // GCC frame size warning. + const int kBufferSize = 10 + 2 * kMaxAmbigStringSize; + char *buffer = new char[kBufferSize]; + char replacement_string[kMaxAmbigStringSize]; + UNICHAR_ID test_unichar_ids[MAX_AMBIG_SIZE + 1]; + int line_num = 0; + int type = NOT_AMBIG; + + // Determine the version of the ambigs file. + int version = 0; + ASSERT_HOST(ambig_file->FGets(buffer, kBufferSize) != NULL && + strlen(buffer) > 0); + if (*buffer == 'v') { + version = static_cast(strtol(buffer+1, NULL, 10)); + ++line_num; + } else { + ambig_file->Rewind(); + } + while (ambig_file->FGets(buffer, kBufferSize) != NULL) { + chomp_string(buffer); + if (debug_level > 2) tprintf("read line %s\n", buffer); + ++line_num; + if (!ParseAmbiguityLine(line_num, version, debug_level, encoder_set, + buffer, &test_ambig_part_size, test_unichar_ids, + &replacement_ambig_part_size, + replacement_string, &type)) continue; + // Construct AmbigSpec and add it to the appropriate AmbigSpec_LIST. + AmbigSpec *ambig_spec = new AmbigSpec(); + if (!InsertIntoTable((type == REPLACE_AMBIG) ? replace_ambigs_ + : dang_ambigs_, + test_ambig_part_size, test_unichar_ids, + replacement_ambig_part_size, replacement_string, type, + ambig_spec, unicharset)) + continue; + + // Update one_to_one_definite_ambigs_. + if (test_ambig_part_size == 1 && + replacement_ambig_part_size == 1 && type == DEFINITE_AMBIG) { + if (one_to_one_definite_ambigs_[test_unichar_ids[0]] == NULL) { + one_to_one_definite_ambigs_[test_unichar_ids[0]] = new UnicharIdVector(); + } + one_to_one_definite_ambigs_[test_unichar_ids[0]]->push_back( + ambig_spec->correct_ngram_id); + } + // Update ambigs_for_adaption_. + if (use_ambigs_for_adaption) { + GenericVector encoding; + // Silently ignore invalid strings, as before, so it is safe to use a + // universal ambigs file. + if (unicharset->encode_string(replacement_string, true, &encoding, + NULL, NULL)) { + for (i = 0; i < test_ambig_part_size; ++i) { + if (ambigs_for_adaption_[test_unichar_ids[i]] == NULL) { + ambigs_for_adaption_[test_unichar_ids[i]] = new UnicharIdVector(); + } + adaption_ambigs_entry = ambigs_for_adaption_[test_unichar_ids[i]]; + for (int r = 0; r < encoding.size(); ++r) { + UNICHAR_ID id_to_insert = encoding[r]; + ASSERT_HOST(id_to_insert != INVALID_UNICHAR_ID); + // Add the new unichar id to adaption_ambigs_entry (only if the + // vector does not already contain it) keeping it in sorted order. + for (j = 0; j < adaption_ambigs_entry->size() && + (*adaption_ambigs_entry)[j] > id_to_insert; ++j); + if (j < adaption_ambigs_entry->size()) { + if ((*adaption_ambigs_entry)[j] != id_to_insert) { + adaption_ambigs_entry->insert(id_to_insert, j); + } + } else { + adaption_ambigs_entry->push_back(id_to_insert); + } + } + } + } + } + } + delete[] buffer; + + // Fill in reverse_ambigs_for_adaption from ambigs_for_adaption vector. + if (use_ambigs_for_adaption) { + for (i = 0; i < ambigs_for_adaption_.size(); ++i) { + adaption_ambigs_entry = ambigs_for_adaption_[i]; + if (adaption_ambigs_entry == NULL) continue; + for (j = 0; j < adaption_ambigs_entry->size(); ++j) { + UNICHAR_ID ambig_id = (*adaption_ambigs_entry)[j]; + if (reverse_ambigs_for_adaption_[ambig_id] == NULL) { + reverse_ambigs_for_adaption_[ambig_id] = new UnicharIdVector(); + } + reverse_ambigs_for_adaption_[ambig_id]->push_back(i); + } + } + } + + // Print what was read from the input file. + if (debug_level > 1) { + for (int tbl = 0; tbl < 2; ++tbl) { + const UnicharAmbigsVector &print_table = + (tbl == 0) ? replace_ambigs_ : dang_ambigs_; + for (i = 0; i < print_table.size(); ++i) { + AmbigSpec_LIST *lst = print_table[i]; + if (lst == NULL) continue; + if (!lst->empty()) { + tprintf("%s Ambiguities for %s:\n", + (tbl == 0) ? "Replaceable" : "Dangerous", + unicharset->debug_str(i).string()); + } + AmbigSpec_IT lst_it(lst); + for (lst_it.mark_cycle_pt(); !lst_it.cycled_list(); lst_it.forward()) { + AmbigSpec *ambig_spec = lst_it.data(); + tprintf("wrong_ngram:"); + UnicharIdArrayUtils::print(ambig_spec->wrong_ngram, *unicharset); + tprintf("correct_fragments:"); + UnicharIdArrayUtils::print(ambig_spec->correct_fragments, *unicharset); + } + } + } + if (use_ambigs_for_adaption) { + for (int vec_id = 0; vec_id < 2; ++vec_id) { + const GenericVector &vec = (vec_id == 0) ? + ambigs_for_adaption_ : reverse_ambigs_for_adaption_; + for (i = 0; i < vec.size(); ++i) { + adaption_ambigs_entry = vec[i]; + if (adaption_ambigs_entry != NULL) { + tprintf("%sAmbigs for adaption for %s:\n", + (vec_id == 0) ? "" : "Reverse ", + unicharset->debug_str(i).string()); + for (j = 0; j < adaption_ambigs_entry->size(); ++j) { + tprintf("%s ", unicharset->debug_str( + (*adaption_ambigs_entry)[j]).string()); + } + tprintf("\n"); + } + } + } + } + } +} + +bool UnicharAmbigs::ParseAmbiguityLine( + int line_num, int version, int debug_level, const UNICHARSET &unicharset, + char *buffer, int *test_ambig_part_size, UNICHAR_ID *test_unichar_ids, + int *replacement_ambig_part_size, char *replacement_string, int *type) { + if (version > 1) { + // Simpler format is just wrong-string correct-string type\n. + STRING input(buffer); + GenericVector fields; + input.split(' ', &fields); + if (fields.size() != 3) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + // Encode wrong-string. + GenericVector unichars; + if (!unicharset.encode_string(fields[0].string(), true, &unichars, NULL, + NULL)) { + return false; + } + *test_ambig_part_size = unichars.size(); + if (*test_ambig_part_size > MAX_AMBIG_SIZE) { + if (debug_level) + tprintf("Too many unichars in ambiguity on line %d\n", line_num); + return false; + } + // Copy encoded string to output. + for (int i = 0; i < unichars.size(); ++i) + test_unichar_ids[i] = unichars[i]; + test_unichar_ids[unichars.size()] = INVALID_UNICHAR_ID; + // Encode replacement-string to check validity. + if (!unicharset.encode_string(fields[1].string(), true, &unichars, NULL, + NULL)) { + return false; + } + *replacement_ambig_part_size = unichars.size(); + if (*replacement_ambig_part_size > MAX_AMBIG_SIZE) { + if (debug_level) + tprintf("Too many unichars in ambiguity on line %d\n", line_num); + return false; + } + if (sscanf(fields[2].string(), "%d", type) != 1) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + snprintf(replacement_string, kMaxAmbigStringSize, "%s", fields[1].string()); + return true; + } + int i; + char *token; + char *next_token; + if (!(token = strtok_r(buffer, kAmbigDelimiters, &next_token)) || + !sscanf(token, "%d", test_ambig_part_size) || + *test_ambig_part_size <= 0) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + if (*test_ambig_part_size > MAX_AMBIG_SIZE) { + if (debug_level) + tprintf("Too many unichars in ambiguity on line %d\n", line_num); + return false; + } + for (i = 0; i < *test_ambig_part_size; ++i) { + if (!(token = strtok_r(NULL, kAmbigDelimiters, &next_token))) break; + if (!unicharset.contains_unichar(token)) { + if (debug_level) tprintf(kIllegalUnicharMsg, token); + break; + } + test_unichar_ids[i] = unicharset.unichar_to_id(token); + } + test_unichar_ids[i] = INVALID_UNICHAR_ID; + + if (i != *test_ambig_part_size || + !(token = strtok_r(NULL, kAmbigDelimiters, &next_token)) || + !sscanf(token, "%d", replacement_ambig_part_size) || + *replacement_ambig_part_size <= 0) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + if (*replacement_ambig_part_size > MAX_AMBIG_SIZE) { + if (debug_level) + tprintf("Too many unichars in ambiguity on line %d\n", line_num); + return false; + } + replacement_string[0] = '\0'; + for (i = 0; i < *replacement_ambig_part_size; ++i) { + if (!(token = strtok_r(NULL, kAmbigDelimiters, &next_token))) break; + strcat(replacement_string, token); + if (!unicharset.contains_unichar(token)) { + if (debug_level) tprintf(kIllegalUnicharMsg, token); + break; + } + } + if (i != *replacement_ambig_part_size) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + if (version > 0) { + // The next field being true indicates that the abiguity should + // always be substituted (e.g. '' should always be changed to "). + // For such "certain" n -> m ambigs tesseract will insert character + // fragments for the n pieces in the unicharset. AmbigsFound() + // will then replace the incorrect ngram with the character + // fragments of the correct character (or ngram if m > 1). + // Note that if m > 1, an ngram will be inserted into the + // modified word, not the individual unigrams. Tesseract + // has limited support for ngram unichar (e.g. dawg permuter). + if (!(token = strtok_r(NULL, kAmbigDelimiters, &next_token)) || + !sscanf(token, "%d", type)) { + if (debug_level) tprintf(kIllegalMsg, line_num); + return false; + } + } + return true; +} + +bool UnicharAmbigs::InsertIntoTable( + UnicharAmbigsVector &table, int test_ambig_part_size, + UNICHAR_ID *test_unichar_ids, int replacement_ambig_part_size, + const char *replacement_string, int type, + AmbigSpec *ambig_spec, UNICHARSET *unicharset) { + ambig_spec->type = static_cast(type); + if (test_ambig_part_size == 1 && replacement_ambig_part_size == 1 && + unicharset->to_lower(test_unichar_ids[0]) == + unicharset->to_lower(unicharset->unichar_to_id(replacement_string))) { + ambig_spec->type = CASE_AMBIG; + } + + ambig_spec->wrong_ngram_size = + UnicharIdArrayUtils::copy(test_unichar_ids, ambig_spec->wrong_ngram); + + // Since we need to maintain a constant number of unichar positions in + // order to construct ambig_blob_choices vector in NoDangerousAmbig(), for + // each n->m ambiguity we will have to place n character fragments of the + // correct ngram into the corresponding positions in the vector (e.g. given + // "vvvvw" and vvvv->ww we will place v and |ww|0|4 into position 0, v and + // |ww|1|4 into position 1 and so on. The correct ngram is reconstructed + // from fragments by dawg_permute_and_select(). + + // Insert the corresponding correct ngram into the unicharset. + // Unicharset code assumes that the "base" ngram is inserted into + // the unicharset before fragments of this ngram are inserted. + unicharset->unichar_insert(replacement_string); + ambig_spec->correct_ngram_id = + unicharset->unichar_to_id(replacement_string); + if (replacement_ambig_part_size > 1) { + unicharset->set_isngram(ambig_spec->correct_ngram_id, true); + } + // Add the corresponding fragments of the wrong ngram to unicharset. + int i; + for (i = 0; i < test_ambig_part_size; ++i) { + UNICHAR_ID unichar_id; + if (test_ambig_part_size == 1) { + unichar_id = ambig_spec->correct_ngram_id; + } else { + STRING frag_str = CHAR_FRAGMENT::to_string( + replacement_string, i, test_ambig_part_size, false); + unicharset->unichar_insert(frag_str.string()); + unichar_id = unicharset->unichar_to_id(frag_str.string()); + } + ambig_spec->correct_fragments[i] = unichar_id; + } + ambig_spec->correct_fragments[i] = INVALID_UNICHAR_ID; + + // Add AmbigSpec for this ambiguity to the corresponding AmbigSpec_LIST. + // Keep AmbigSpec_LISTs sorted by AmbigSpec.wrong_ngram. + if (table[test_unichar_ids[0]] == NULL) { + table[test_unichar_ids[0]] = new AmbigSpec_LIST(); + } + if (table[test_unichar_ids[0]]->add_sorted( + AmbigSpec::compare_ambig_specs, true, ambig_spec)) + return true; + delete ambig_spec; + return false; +} + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/ambigs.h b/3rdparty/hgOCR/include/ccutil/ambigs.h new file mode 100644 index 00000000..faab2198 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ambigs.h @@ -0,0 +1,229 @@ +/////////////////////////////////////////////////////////////////////// +// File: ambigs.h +// Description: Constants, flags, functions for dealing with +// ambiguities (training and recognition). +// Author: Daria Antonova +// Created: Mon Aug 23 11:26:43 PDT 2008 +// +// (C) Copyright 2008, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_AMBIGS_H_ +#define TESSERACT_CCUTIL_AMBIGS_H_ + +#include "elst.h" +#include "tprintf.h" +#include "unichar.h" +#include "unicharset.h" +#include "genericvector.h" + +#define MAX_AMBIG_SIZE 10 + +namespace tesseract { + +typedef GenericVector UnicharIdVector; + +static const int kUnigramAmbigsBufferSize = 1000; +static const char kAmbigNgramSeparator[] = { ' ', '\0' }; +static const char kAmbigDelimiters[] = "\t "; +static const char kIllegalMsg[] = + "Illegal ambiguity specification on line %d\n"; +static const char kIllegalUnicharMsg[] = + "Illegal unichar %s in ambiguity specification\n"; + +enum AmbigType { + NOT_AMBIG, // the ngram pair is not ambiguous + REPLACE_AMBIG, // ocred ngram should always be substituted with correct + DEFINITE_AMBIG, // add correct ngram to the classifier results (1-1) + SIMILAR_AMBIG, // use pairwise classifier for ocred/correct pair (1-1) + CASE_AMBIG, // this is a case ambiguity (1-1) + + AMBIG_TYPE_COUNT // number of enum entries +}; + +// A collection of utility functions for arrays of UNICHAR_IDs that are +// terminated by INVALID_UNICHAR_ID. +class UnicharIdArrayUtils { + public: + // Compares two arrays of unichar ids. Returns -1 if the length of array1 is + // less than length of array2, if any array1[i] is less than array2[i]. + // Returns 0 if the arrays are equal, 1 otherwise. + // The function assumes that the arrays are terminated by INVALID_UNICHAR_ID. + static inline int compare(const UNICHAR_ID *ptr1, const UNICHAR_ID *ptr2) { + for (;;) { + const UNICHAR_ID val1 = *ptr1++; + const UNICHAR_ID val2 = *ptr2++; + if (val1 != val2) { + if (val1 == INVALID_UNICHAR_ID) return -1; + if (val2 == INVALID_UNICHAR_ID) return 1; + if (val1 < val2) return -1; + return 1; + } + if (val1 == INVALID_UNICHAR_ID) return 0; + } + } + + // Look uid in the vector of uids. If found, the index of the matched + // element is returned. Otherwise, it returns -1. + static inline int find_in(const UnicharIdVector& uid_vec, + const UNICHAR_ID uid) { + for (int i = 0; i < uid_vec.size(); ++i) + if (uid_vec[i] == uid) return i; + return -1; + } + + // Copies UNICHAR_IDs from dst to src. Returns the number of ids copied. + // The function assumes that the arrays are terminated by INVALID_UNICHAR_ID + // and that dst has enough space for all the elements from src. + static inline int copy(const UNICHAR_ID src[], UNICHAR_ID dst[]) { + int i = 0; + do { + dst[i] = src[i]; + } while (dst[i++] != INVALID_UNICHAR_ID); + return i - 1; + } + + // Prints unichars corresponding to the unichar_ids in the given array. + // The function assumes that array is terminated by INVALID_UNICHAR_ID. + static inline void print(const UNICHAR_ID array[], + const UNICHARSET &unicharset) { + const UNICHAR_ID *ptr = array; + if (*ptr == INVALID_UNICHAR_ID) tprintf("[Empty]"); + while (*ptr != INVALID_UNICHAR_ID) { + tprintf("%s ", unicharset.id_to_unichar(*ptr++)); + } + tprintf("( "); + ptr = array; + while (*ptr != INVALID_UNICHAR_ID) tprintf("%d ", *ptr++); + tprintf(")\n"); + } +}; + +// AMBIG_SPEC_LIST stores a list of dangerous ambigs that +// start with the same unichar (e.g. r->t rn->m rr1->m). +class AmbigSpec : public ELIST_LINK { + public: + AmbigSpec(); + ~AmbigSpec() {} + + // Comparator function for sorting AmbigSpec_LISTs. The lists will + // be sorted by their wrong_ngram arrays. Example of wrong_ngram vectors + // in a a sorted AmbigSpec_LIST: [9 1 3], [9 3 4], [9 8], [9, 8 1]. + static int compare_ambig_specs(const void *spec1, const void *spec2) { + const AmbigSpec *s1 = + *reinterpret_cast(spec1); + const AmbigSpec *s2 = + *reinterpret_cast(spec2); + int result = UnicharIdArrayUtils::compare(s1->wrong_ngram, s2->wrong_ngram); + if (result != 0) return result; + return UnicharIdArrayUtils::compare(s1->correct_fragments, + s2->correct_fragments); + } + + UNICHAR_ID wrong_ngram[MAX_AMBIG_SIZE + 1]; + UNICHAR_ID correct_fragments[MAX_AMBIG_SIZE + 1]; + UNICHAR_ID correct_ngram_id; + AmbigType type; + int wrong_ngram_size; +}; +ELISTIZEH(AmbigSpec); + +// AMBIG_TABLE[i] stores a set of ambiguities whose +// wrong ngram starts with unichar id i. +typedef GenericVector UnicharAmbigsVector; + +class UnicharAmbigs { + public: + UnicharAmbigs() {} + ~UnicharAmbigs() { + replace_ambigs_.delete_data_pointers(); + dang_ambigs_.delete_data_pointers(); + one_to_one_definite_ambigs_.delete_data_pointers(); + } + + const UnicharAmbigsVector &dang_ambigs() const { return dang_ambigs_; } + const UnicharAmbigsVector &replace_ambigs() const { return replace_ambigs_; } + + // Initializes the ambigs by adding a NULL pointer to each table. + void InitUnicharAmbigs(const UNICHARSET& unicharset, + bool use_ambigs_for_adaption); + + // Loads the universal ambigs that are useful for any language. + void LoadUniversal(const UNICHARSET& encoder_set, UNICHARSET* unicharset); + + // Fills in two ambiguity tables (replaceable and dangerous) with information + // read from the ambigs file. An ambiguity table is an array of lists. + // The array is indexed by a class id. Each entry in the table provides + // a list of potential ambiguities which can start with the corresponding + // character. For example the ambiguity "rn -> m", would be located in the + // table at index of unicharset.unichar_to_id('r'). + // In 1-1 ambiguities (e.g. s -> S, 1 -> I) are recorded in + // one_to_one_definite_ambigs_. This vector is also indexed by the class id + // of the wrong part of the ambiguity and each entry contains a vector of + // unichar ids that are ambiguous to it. + // encoder_set is used to encode the ambiguity strings, undisturbed by new + // unichar_ids that may be created by adding the ambigs. + void LoadUnicharAmbigs(const UNICHARSET& encoder_set, + TFile *ambigs_file, int debug_level, + bool use_ambigs_for_adaption, UNICHARSET *unicharset); + + // Returns definite 1-1 ambigs for the given unichar id. + inline const UnicharIdVector *OneToOneDefiniteAmbigs( + UNICHAR_ID unichar_id) const { + if (one_to_one_definite_ambigs_.empty()) return NULL; + return one_to_one_definite_ambigs_[unichar_id]; + } + + // Returns a pointer to the vector with all unichar ids that appear in the + // 'correct' part of the ambiguity pair when the given unichar id appears + // in the 'wrong' part of the ambiguity. E.g. if DangAmbigs file consist of + // m->rn,rn->m,m->iii, UnicharAmbigsForAdaption() called with unichar id of + // m will return a pointer to a vector with unichar ids of r,n,i. + inline const UnicharIdVector *AmbigsForAdaption( + UNICHAR_ID unichar_id) const { + if (ambigs_for_adaption_.empty()) return NULL; + return ambigs_for_adaption_[unichar_id]; + } + + // Similar to the above, but return the vector of unichar ids for which + // the given unichar_id is an ambiguity (appears in the 'wrong' part of + // some ambiguity pair). + inline const UnicharIdVector *ReverseAmbigsForAdaption( + UNICHAR_ID unichar_id) const { + if (reverse_ambigs_for_adaption_.empty()) return NULL; + return reverse_ambigs_for_adaption_[unichar_id]; + } + + private: + bool ParseAmbiguityLine(int line_num, int version, int debug_level, + const UNICHARSET &unicharset, char *buffer, + int *test_ambig_part_size, + UNICHAR_ID *test_unichar_ids, + int *replacement_ambig_part_size, + char *replacement_string, int *type); + bool InsertIntoTable(UnicharAmbigsVector &table, + int test_ambig_part_size, UNICHAR_ID *test_unichar_ids, + int replacement_ambig_part_size, + const char *replacement_string, int type, + AmbigSpec *ambig_spec, UNICHARSET *unicharset); + + UnicharAmbigsVector dang_ambigs_; + UnicharAmbigsVector replace_ambigs_; + GenericVector one_to_one_definite_ambigs_; + GenericVector ambigs_for_adaption_; + GenericVector reverse_ambigs_for_adaption_; +}; + +} // namespace tesseract + +#endif // TESSERACT_CCUTIL_AMBIGS_H_ diff --git a/3rdparty/hgOCR/include/ccutil/basedir.cpp b/3rdparty/hgOCR/include/ccutil/basedir.cpp new file mode 100644 index 00000000..69b88c27 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/basedir.cpp @@ -0,0 +1,45 @@ +/********************************************************************** + * File: basedir.c (Formerly getpath.c) + * Description: Find the directory location of the current executable using PATH. + * Author: Ray Smith + * Created: Mon Jul 09 09:06:39 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "basedir.h" + +#include + +// Assuming that code_path is the name of some file in a desired directory, +// returns the given code_path stripped back to the last slash, leaving +// the last slash in place. If there is no slash, returns ./ assuming that +// the input was the name of something in the current directory. +// Useful for getting to the directory of argv[0], but does not search +// any paths. +TESS_API void truncate_path(const char *code_path, STRING* trunc_path) { + int trunc_index = -1; + if (code_path != NULL) { + const char* last_slash = strrchr(code_path, '/'); + if (last_slash != NULL && last_slash + 1 - code_path > trunc_index) + trunc_index = last_slash + 1 - code_path; + last_slash = strrchr(code_path, '\\'); + if (last_slash != NULL && last_slash + 1 - code_path > trunc_index) + trunc_index = last_slash + 1 - code_path; + } + *trunc_path = code_path; + if (trunc_index >= 0) + trunc_path->truncate_at(trunc_index); + else + *trunc_path = "./"; +} diff --git a/3rdparty/hgOCR/include/ccutil/basedir.h b/3rdparty/hgOCR/include/ccutil/basedir.h new file mode 100644 index 00000000..60d56ba6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/basedir.h @@ -0,0 +1,31 @@ +/********************************************************************** + * File: basedir.h (Formerly getpath.h) + * Description: Header file for getpath.c. Provides relocatability of data. + * Author: Ray Smith + * Created: Mon Jul 09 09:13:03 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef BASEDIR_H +#define BASEDIR_H + +#include "platform.h" +#include "strngs.h" + +// Returns the given code_path truncated to the last slash. +// Useful for getting to the directory of argv[0], but does not search +// any paths. +TESS_API void truncate_path(const char *code_path, STRING* trunc_path); + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/bits16.cpp b/3rdparty/hgOCR/include/ccutil/bits16.cpp new file mode 100644 index 00000000..38c896f5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/bits16.cpp @@ -0,0 +1,29 @@ +/********************************************************************** + * File: bits16.h (Formerly bits8.h) + * Description: Code for 8 bit field class. + * Author: Phil Cheatle + * Created: Thu Oct 17 10:10:05 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "bits16.h" + +/********************************************************************** + * Constructor. Something to get it past the compiler as almost all inlined. + * + **********************************************************************/ +BITS16::BITS16( // constructor + uinT16 init) { // initial val + val = init; +} diff --git a/3rdparty/hgOCR/include/ccutil/bits16.h b/3rdparty/hgOCR/include/ccutil/bits16.h new file mode 100644 index 00000000..6bbec4c0 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/bits16.h @@ -0,0 +1,61 @@ +/********************************************************************** + * File: bits16.h (Formerly bits8.h) + * Description: Code for 8 bit field class. + * Author: Phil Cheatle + * Created: Thu Oct 17 10:10:05 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef BITS16_H +#define BITS16_H + +#include "host.h" + +class DLLSYM BITS16 +{ + public: + uinT16 val; + + BITS16() { + val = 0; + } // constructor + + BITS16( // constructor + uinT16 init); // initial val + + void turn_on_bit( // flip specified bit + uinT8 bit_num) { // bit to flip 0..7 + val = val | 01 << bit_num; + } + + void turn_off_bit( // flip specified bit + uinT8 bit_num) { // bit to flip 0..7 + val = val & ~(01 << bit_num); + } + + void set_bit( // flip specified bit + uinT8 bit_num, // bit to flip 0..7 + BOOL8 value) { // value to flip to + if (value) + val = val | 01 << bit_num; + else + val = val & ~(01 << bit_num); + } + + BOOL8 bit( // access bit + uinT8 bit_num) const { // bit to access + return (val >> bit_num) & 01; + } +}; +#endif diff --git a/3rdparty/hgOCR/include/ccutil/bitvector.cpp b/3rdparty/hgOCR/include/ccutil/bitvector.cpp new file mode 100644 index 00000000..31166863 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/bitvector.cpp @@ -0,0 +1,269 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: bitvector.cpp +// Description: Class replacement for BITVECTOR. +// Author: Ray Smith +// Created: Mon Jan 10 17:45:01 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "bitvector.h" +#include +#include "helpers.h" +#include "ndminx.h" + +namespace tesseract { + +// Fast lookup table to get the first least significant set bit in a byte. +// For zero, the table has 255, but since it is a special case, most code +// that uses this table will check for zero before looking up lsb_index_. +const uinT8 BitVector::lsb_index_[256] = { + 255, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 +}; + +// Fast lookup table to get the residual bits after zeroing the first (lowest) +// set bit in a byte. +const uinT8 BitVector::lsb_eroded_[256] = { + 0, 0, 0, 0x2, 0, 0x4, 0x4, 0x6, + 0, 0x8, 0x8, 0x0a, 0x08, 0x0c, 0x0c, 0x0e, + 0, 0x10, 0x10, 0x12, 0x10, 0x14, 0x14, 0x16, + 0x10, 0x18, 0x18, 0x1a, 0x18, 0x1c, 0x1c, 0x1e, + 0, 0x20, 0x20, 0x22, 0x20, 0x24, 0x24, 0x26, + 0x20, 0x28, 0x28, 0x2a, 0x28, 0x2c, 0x2c, 0x2e, + 0x20, 0x30, 0x30, 0x32, 0x30, 0x34, 0x34, 0x36, + 0x30, 0x38, 0x38, 0x3a, 0x38, 0x3c, 0x3c, 0x3e, + 0, 0x40, 0x40, 0x42, 0x40, 0x44, 0x44, 0x46, + 0x40, 0x48, 0x48, 0x4a, 0x48, 0x4c, 0x4c, 0x4e, + 0x40, 0x50, 0x50, 0x52, 0x50, 0x54, 0x54, 0x56, + 0x50, 0x58, 0x58, 0x5a, 0x58, 0x5c, 0x5c, 0x5e, + 0x40, 0x60, 0x60, 0x62, 0x60, 0x64, 0x64, 0x66, + 0x60, 0x68, 0x68, 0x6a, 0x68, 0x6c, 0x6c, 0x6e, + 0x60, 0x70, 0x70, 0x72, 0x70, 0x74, 0x74, 0x76, + 0x70, 0x78, 0x78, 0x7a, 0x78, 0x7c, 0x7c, 0x7e, + 0, 0x80, 0x80, 0x82, 0x80, 0x84, 0x84, 0x86, + 0x80, 0x88, 0x88, 0x8a, 0x88, 0x8c, 0x8c, 0x8e, + 0x80, 0x90, 0x90, 0x92, 0x90, 0x94, 0x94, 0x96, + 0x90, 0x98, 0x98, 0x9a, 0x98, 0x9c, 0x9c, 0x9e, + 0x80, 0xa0, 0xa0, 0xa2, 0xa0, 0xa4, 0xa4, 0xa6, + 0xa0, 0xa8, 0xa8, 0xaa, 0xa8, 0xac, 0xac, 0xae, + 0xa0, 0xb0, 0xb0, 0xb2, 0xb0, 0xb4, 0xb4, 0xb6, + 0xb0, 0xb8, 0xb8, 0xba, 0xb8, 0xbc, 0xbc, 0xbe, + 0x80, 0xc0, 0xc0, 0xc2, 0xc0, 0xc4, 0xc4, 0xc6, + 0xc0, 0xc8, 0xc8, 0xca, 0xc8, 0xcc, 0xcc, 0xce, + 0xc0, 0xd0, 0xd0, 0xd2, 0xd0, 0xd4, 0xd4, 0xd6, + 0xd0, 0xd8, 0xd8, 0xda, 0xd8, 0xdc, 0xdc, 0xde, + 0xc0, 0xe0, 0xe0, 0xe2, 0xe0, 0xe4, 0xe4, 0xe6, + 0xe0, 0xe8, 0xe8, 0xea, 0xe8, 0xec, 0xec, 0xee, + 0xe0, 0xf0, 0xf0, 0xf2, 0xf0, 0xf4, 0xf4, 0xf6, + 0xf0, 0xf8, 0xf8, 0xfa, 0xf8, 0xfc, 0xfc, 0xfe +}; + +// Fast lookup table to give the number of set bits in a byte. +const int BitVector::hamming_table_[256] = { + 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, + 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 +}; + + +BitVector::BitVector() : bit_size_(0), array_(NULL) {} + +BitVector::BitVector(int length) : bit_size_(length) { + array_ = new uinT32[WordLength()]; + SetAllFalse(); +} + +BitVector::BitVector(const BitVector& src) : bit_size_(src.bit_size_) { + array_ = new uinT32[WordLength()]; + memcpy(array_, src.array_, ByteLength()); +} + +BitVector& BitVector::operator=(const BitVector& src) { + Alloc(src.bit_size_); + memcpy(array_, src.array_, ByteLength()); + return *this; +} + +BitVector::~BitVector() { + delete [] array_; +} + +// Initializes the array to length * false. +void BitVector::Init(int length) { + Alloc(length); + SetAllFalse(); +} + +// Writes to the given file. Returns false in case of error. +bool BitVector::Serialize(FILE* fp) const { + if (fwrite(&bit_size_, sizeof(bit_size_), 1, fp) != 1) return false; + int wordlen = WordLength(); + if (static_cast(fwrite(array_, sizeof(*array_), wordlen, fp)) != wordlen) + return false; + return true; +} + +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool BitVector::DeSerialize(bool swap, FILE* fp) { + uinT32 new_bit_size; + if (fread(&new_bit_size, sizeof(new_bit_size), 1, fp) != 1) return false; + if (swap) { + ReverseN(&new_bit_size, sizeof(new_bit_size)); + } + Alloc(new_bit_size); + int wordlen = WordLength(); + if (static_cast(fread(array_, sizeof(*array_), wordlen, fp)) != wordlen) + return false; + if (swap) { + for (int i = 0; i < wordlen; ++i) + ReverseN(&array_[i], sizeof(array_[i])); + } + return true; +} + +void BitVector::SetAllFalse() { + memset(array_, 0, ByteLength()); +} +void BitVector::SetAllTrue() { + memset(array_, ~0, ByteLength()); +} + +// Returns the index of the next set bit after the given index. +// Useful for quickly iterating through the set bits in a sparse vector. +int BitVector::NextSetBit(int prev_bit) const { + // Move on to the next bit. + int next_bit = prev_bit + 1; + if (next_bit >= bit_size_) return -1; + // Check the remains of the word containing the next_bit first. + int next_word = WordIndex(next_bit); + int bit_index = next_word * kBitFactor; + int word_end = bit_index + kBitFactor; + uinT32 word = array_[next_word]; + uinT8 byte = word & 0xff; + while (bit_index < word_end) { + if (bit_index + 8 > next_bit && byte != 0) { + while (bit_index + lsb_index_[byte] < next_bit && byte != 0) + byte = lsb_eroded_[byte]; + if (byte != 0) + return bit_index + lsb_index_[byte]; + } + word >>= 8; + bit_index += 8; + byte = word & 0xff; + } + // next_word didn't contain a 1, so find the next word with set bit. + ++next_word; + int wordlen = WordLength(); + while (next_word < wordlen && (word = array_[next_word]) == 0) { + ++next_word; + bit_index += kBitFactor; + } + if (bit_index >= bit_size_) return -1; + // Find the first non-zero byte within the word. + while ((word & 0xff) == 0) { + word >>= 8; + bit_index += 8; + } + return bit_index + lsb_index_[word & 0xff]; +} + +// Returns the number of set bits in the vector. +int BitVector::NumSetBits() const { + int wordlen = WordLength(); + int total_bits = 0; + for (int w = 0; w < wordlen; ++w) { + uinT32 word = array_[w]; + for (int i = 0; i < 4; ++i) { + total_bits += hamming_table_[word & 0xff]; + word >>= 8; + } + } + return total_bits; +} + +// Logical in-place operations on whole bit vectors. Tries to do something +// sensible if they aren't the same size, but they should be really. +void BitVector::operator|=(const BitVector& other) { + int length = MIN(WordLength(), other.WordLength()); + for (int w = 0; w < length; ++w) + array_[w] |= other.array_[w]; +} +void BitVector::operator&=(const BitVector& other) { + int length = MIN(WordLength(), other.WordLength()); + for (int w = 0; w < length; ++w) + array_[w] &= other.array_[w]; + for (int w = WordLength() - 1; w >= length; --w) + array_[w] = 0; +} +void BitVector::operator^=(const BitVector& other) { + int length = MIN(WordLength(), other.WordLength()); + for (int w = 0; w < length; ++w) + array_[w] ^= other.array_[w]; +} +// Set subtraction *this = v1 - v2. +void BitVector::SetSubtract(const BitVector& v1, const BitVector& v2) { + Alloc(v1.size()); + int length = MIN(v1.WordLength(), v2.WordLength()); + for (int w = 0; w < length; ++w) + array_[w] = v1.array_[w] ^ (v1.array_[w] & v2.array_[w]); + for (int w = WordLength() - 1; w >= length; --w) + array_[w] = v1.array_[w]; +} + +// Allocates memory for a vector of the given length. +// Reallocates if the array is a different size, larger or smaller. +void BitVector::Alloc(int length) { + int initial_wordlength = WordLength(); + bit_size_ = length; + int new_wordlength = WordLength(); + if (new_wordlength != initial_wordlength) { + delete [] array_; + array_ = new uinT32[new_wordlength]; + } +} + + +} // namespace tesseract. + + diff --git a/3rdparty/hgOCR/include/ccutil/bitvector.h b/3rdparty/hgOCR/include/ccutil/bitvector.h new file mode 100644 index 00000000..5e748077 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/bitvector.h @@ -0,0 +1,143 @@ +// Copyright 2011 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: bitvector.h +// Description: Class replacement for BITVECTOR. +// Author: Ray Smith +// Created: Mon Jan 10 17:44:01 PST 2011 +// +// (C) Copyright 2011, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + + +#ifndef TESSERACT_CCUTIL_BITVECTOR_H__ +#define TESSERACT_CCUTIL_BITVECTOR_H__ + +#include +#include +#include "host.h" + +namespace tesseract { + +// Trivial class to encapsulate a fixed-length array of bits, with +// Serialize/DeSerialize. Replaces the old macros. +class BitVector { + public: + // Fast lookup table to get the first least significant set bit in a byte. + // For zero, the table has 255, but since it is a special case, most code + // that uses this table will check for zero before looking up lsb_index_. + static const uinT8 lsb_index_[256]; + // Fast lookup table to get the residual bits after zeroing the least + // significant set bit in a byte. + static const uinT8 lsb_eroded_[256]; + // Fast lookup table to give the number of set bits in a byte. + static const int hamming_table_[256]; + + BitVector(); + // Initializes the array to length * false. + explicit BitVector(int length); + BitVector(const BitVector& src); + BitVector& operator=(const BitVector& src); + ~BitVector(); + + // Initializes the array to length * false. + void Init(int length); + + // Returns the number of bits that are accessible in the vector. + int size() const { + return bit_size_; + } + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + void SetAllFalse(); + void SetAllTrue(); + + // Accessors to set/reset/get bits. + // The range of index is [0, size()-1]. + // There is debug-only bounds checking. + void SetBit(int index) { + array_[WordIndex(index)] |= BitMask(index); + } + void ResetBit(int index) { + array_[WordIndex(index)] &= ~BitMask(index); + } + void SetValue(int index, bool value) { + if (value) + SetBit(index); + else + ResetBit(index); + } + bool At(int index) const { + return (array_[WordIndex(index)] & BitMask(index)) != 0; + } + bool operator[](int index) const { + return (array_[WordIndex(index)] & BitMask(index)) != 0; + } + + // Returns the index of the next set bit after the given index. + // Useful for quickly iterating through the set bits in a sparse vector. + int NextSetBit(int prev_bit) const; + + // Returns the number of set bits in the vector. + int NumSetBits() const; + + // Logical in-place operations on whole bit vectors. Tries to do something + // sensible if they aren't the same size, but they should be really. + void operator|=(const BitVector& other); + void operator&=(const BitVector& other); + void operator^=(const BitVector& other); + // Set subtraction *this = v1 - v2. + void SetSubtract(const BitVector& v1, const BitVector& v2); + + private: + // Allocates memory for a vector of the given length. + void Alloc(int length); + + // Computes the index to array_ for the given index, with debug range + // checking. + int WordIndex(int index) const { + assert(0 <= index && index < bit_size_); + return index / kBitFactor; + } + // Returns a mask to select the appropriate bit for the given index. + uinT32 BitMask(int index) const { + return 1 << (index & (kBitFactor - 1)); + } + // Returns the number of array elements needed to represent the current + // bit_size_. + int WordLength() const { + return (bit_size_ + kBitFactor - 1) / kBitFactor; + } + // Returns the number of bytes consumed by the array_. + int ByteLength() const { + return WordLength() * sizeof(*array_); + } + + // Number of bits in this BitVector. + inT32 bit_size_; + // Array of words used to pack the bits. + // Bits are stored little-endian by uinT32 word, ie by word first and then + // starting with the least significant bit in each word. + uinT32* array_; + // Number of bits in an array_ element. + static const int kBitFactor = sizeof(uinT32) * 8; +}; + +} // namespace tesseract. + +#endif // TESSERACT_CCUTIL_BITVECTOR_H__ diff --git a/3rdparty/hgOCR/include/ccutil/ccutil.cpp b/3rdparty/hgOCR/include/ccutil/ccutil.cpp new file mode 100644 index 00000000..ec8e45b4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ccutil.cpp @@ -0,0 +1,67 @@ +// Copyright 2008 Google Inc. All Rights Reserved. +// Author: scharron@google.com (Samuel Charron) +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "ccutil.h" + +#if defined(_WIN32) +#define WINDLLNAME "HG_OCR.lib" +#else +#define WINDLLNAME "HG_OCR.a" +#endif + +namespace tesseract { +CCUtil::CCUtil() : + params_(), + STRING_INIT_MEMBER(m_data_sub_dir, + "tessdata/", "Directory for data files", ¶ms_), +#ifdef _WIN32 + STRING_INIT_MEMBER(tessedit_module_name, WINDLLNAME, + "Module colocated with tessdata dir", ¶ms_), +#endif + INT_INIT_MEMBER(ambigs_debug_level, 0, "Debug level for unichar ambiguities", + ¶ms_), + BOOL_MEMBER(use_definite_ambigs_for_classifier, 0, "Use definite" + " ambiguities when running character classifier", ¶ms_), + BOOL_MEMBER(use_ambigs_for_adaption, 0, "Use ambigs for deciding" + " whether to adapt to a character", ¶ms_) { +} + +CCUtil::~CCUtil() { +} + + +CCUtilMutex::CCUtilMutex() { +#ifdef _WIN32 + mutex_ = CreateMutex(0, FALSE, 0); +#else + pthread_mutex_init(&mutex_, NULL); +#endif +} + +void CCUtilMutex::Lock() { +#ifdef _WIN32 + WaitForSingleObject(mutex_, INFINITE); +#else + pthread_mutex_lock(&mutex_); +#endif +} + +void CCUtilMutex::Unlock() { +#ifdef _WIN32 + ReleaseMutex(mutex_); +#else + pthread_mutex_unlock(&mutex_); +#endif +} + +CCUtilMutex tprintfMutex; // should remain global +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/ccutil.h b/3rdparty/hgOCR/include/ccutil/ccutil.h new file mode 100644 index 00000000..faba0aef --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ccutil.h @@ -0,0 +1,97 @@ +/////////////////////////////////////////////////////////////////////// +// File: ccutil.h +// Description: ccutil class. +// Author: Samuel Charron +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_CCUTIL_H__ +#define TESSERACT_CCUTIL_CCUTIL_H__ + +#include "ambigs.h" +#include "errcode.h" +#include "strngs.h" +#include "tessdatamanager.h" +#include "params.h" +#include "unicharset.h" + +#ifndef _WIN32 +#include +#include +#endif + +namespace tesseract { + +class CCUtilMutex { + public: + CCUtilMutex(); + + void Lock(); + + void Unlock(); + private: +#ifdef _WIN32 + HANDLE mutex_; +#else + pthread_mutex_t mutex_; +#endif +}; + + +class TESS_API CCUtil { + public: + CCUtil(); + virtual ~CCUtil(); + + public: + // Read the arguments and set up the data path. + void main_setup( + const char *argv0, // program name + const char *basename // name of image + ); + ParamsVectors *params() { return ¶ms_; } + + STRING datadir; // dir for data files + STRING imagebasename; // name of image + STRING lang; + STRING language_data_path_prefix; + TessdataManager tessdata_manager; + UNICHARSET unicharset; + UnicharAmbigs unichar_ambigs; + STRING imagefile; // image file name + STRING directory; // main directory + + private: + ParamsVectors params_; + + public: + // Member parameters. + // These have to be declared and initialized after params_ member, since + // params_ should be initialized before parameters are added to it. + STRING_VAR_H(m_data_sub_dir, "tessdata/", "Directory for data files"); + #ifdef _WIN32 + STRING_VAR_H(tessedit_module_name, WINDLLNAME, + "Module colocated with tessdata dir"); + #endif + INT_VAR_H(ambigs_debug_level, 0, "Debug level for unichar ambiguities"); + BOOL_VAR_H(use_definite_ambigs_for_classifier, 0, + "Use definite ambiguities when running character classifier"); + BOOL_VAR_H(use_ambigs_for_adaption, 0, + "Use ambigs for deciding whether to adapt to a character"); +}; + +extern CCUtilMutex tprintfMutex; // should remain global +} // namespace tesseract + +#endif // TESSERACT_CCUTIL_CCUTIL_H__ diff --git a/3rdparty/hgOCR/include/ccutil/clst.cpp b/3rdparty/hgOCR/include/ccutil/clst.cpp new file mode 100644 index 00000000..52caadf3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/clst.cpp @@ -0,0 +1,509 @@ +/********************************************************************** + * File: clst.c (Formerly clist.c) + * Description: CONS cell list handling code which is not in the include file. + * Author: Phil Cheatle + * Created: Mon Jan 28 08:33:13 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include "clst.h" + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: CLIST + * ================================ + **********************************************************************/ + +/*********************************************************************** + * CLIST::internal_deep_clear + * + * Used by the "deep_clear" member function of derived list + * classes to destroy all the elements on the list. + * The calling function passes a "zapper" function which can be called to + * delete each data element of the list, regardless of its class. This + * technique permits a generic clear function to destroy elements of + * different derived types correctly, without requiring virtual functions and + * the consequential memory overhead. + **********************************************************************/ + +void +CLIST::internal_deep_clear ( //destroy all links +void (*zapper) (void *)) { //ptr to zapper functn + CLIST_LINK *ptr; + CLIST_LINK *next; + + if (!empty ()) { + ptr = last->next; //set to first + last->next = NULL; //break circle + last = NULL; //set list empty + while (ptr) { + next = ptr->next; + zapper (ptr->data); + delete(ptr); + ptr = next; + } + } +} + +/*********************************************************************** + * CLIST::shallow_clear + * + * Used by the destructor and the "shallow_clear" member function of derived + * list classes to destroy the list. + * The data elements are NOT destroyed. + * + **********************************************************************/ + +void CLIST::shallow_clear() { //destroy all links + CLIST_LINK *ptr; + CLIST_LINK *next; + + if (!empty ()) { + ptr = last->next; //set to first + last->next = NULL; //break circle + last = NULL; //set list empty + while (ptr) { + next = ptr->next; + delete(ptr); + ptr = next; + } + } +} + +/*********************************************************************** + * CLIST::assign_to_sublist + * + * The list is set to a sublist of another list. "This" list must be empty + * before this function is invoked. The two iterators passed must refer to + * the same list, different from "this" one. The sublist removed is the + * inclusive list from start_it's current position to end_it's current + * position. If this range passes over the end of the source list then the + * source list has its end set to the previous element of start_it. The + * extracted sublist is unaffected by the end point of the source list, its + * end point is always the end_it position. + **********************************************************************/ + +void CLIST::assign_to_sublist( //to this list + CLIST_ITERATOR *start_it, //from list start + CLIST_ITERATOR *end_it) { //from list end + const ERRCODE LIST_NOT_EMPTY = + "Destination list must be empty before extracting a sublist"; + + if (!empty ()) + LIST_NOT_EMPTY.error ("CLIST.assign_to_sublist", ABORT, NULL); + + last = start_it->extract_sublist (end_it); +} + +/*********************************************************************** + * CLIST::length + * + * Return count of elements on list + **********************************************************************/ + +inT32 CLIST::length() const { //count elements + CLIST_ITERATOR it(const_cast(this)); + inT32 count = 0; + + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) + count++; + return count; +} + +/*********************************************************************** + * CLIST::sort + * + * Sort elements on list + **********************************************************************/ + +void +CLIST::sort ( //sort elements +int comparator ( //comparison routine +const void *, const void *)) { + CLIST_ITERATOR it(this); + inT32 count; + void **base; //ptr array to sort + void **current; + inT32 i; + + /* Allocate an array of pointers, one per list element */ + count = length (); + base = (void **) malloc (count * sizeof (void *)); + + /* Extract all elements, putting the pointers in the array */ + current = base; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + *current = it.extract (); + current++; + } + + /* Sort the pointer array */ + qsort ((char *) base, count, sizeof (*base), comparator); + + /* Rebuild the list from the sorted pointers */ + current = base; + for (i = 0; i < count; i++) { + it.add_to_end (*current); + current++; + } + free(base); +} + +// Assuming list has been sorted already, insert new_data to +// keep the list sorted according to the same comparison function. +// Comparison function is the same as used by sort, i.e. uses double +// indirection. Time is O(1) to add to beginning or end. +// Time is linear to add pre-sorted items to an empty list. +// If unique, then don't add duplicate entries. +// Returns true if the element was added to the list. +bool CLIST::add_sorted(int comparator(const void*, const void*), + bool unique, void* new_data) { + // Check for adding at the end. + if (last == NULL || comparator(&last->data, &new_data) < 0) { + CLIST_LINK* new_element = new CLIST_LINK; + new_element->data = new_data; + if (last == NULL) { + new_element->next = new_element; + } else { + new_element->next = last->next; + last->next = new_element; + } + last = new_element; + return true; + } else if (!unique || last->data != new_data) { + // Need to use an iterator. + CLIST_ITERATOR it(this); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + void* data = it.data(); + if (data == new_data && unique) + return false; + if (comparator(&data, &new_data) > 0) + break; + } + if (it.cycled_list()) + it.add_to_end(new_data); + else + it.add_before_then_move(new_data); + return true; + } + return false; +} + +// Assuming that the minuend and subtrahend are already sorted with +// the same comparison function, shallow clears this and then copies +// the set difference minuend - subtrahend to this, being the elements +// of minuend that do not compare equal to anything in subtrahend. +// If unique is true, any duplicates in minuend are also eliminated. +void CLIST::set_subtract(int comparator(const void*, const void*), + bool unique, + CLIST* minuend, CLIST* subtrahend) { + shallow_clear(); + CLIST_ITERATOR m_it(minuend); + CLIST_ITERATOR s_it(subtrahend); + // Since both lists are sorted, finding the subtras that are not + // minus is a case of a parallel iteration. + for (m_it.mark_cycle_pt(); !m_it.cycled_list(); m_it.forward()) { + void* minu = m_it.data(); + void* subtra = NULL; + if (!s_it.empty()) { + subtra = s_it.data(); + while (!s_it.at_last() && + comparator(&subtra, &minu) < 0) { + s_it.forward(); + subtra = s_it.data(); + } + } + if (subtra == NULL || comparator(&subtra, &minu) != 0) + add_sorted(comparator, unique, minu); + } +} + + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: CLIST_ITERATOR + * ========================================= + **********************************************************************/ + +/*********************************************************************** + * CLIST_ITERATOR::forward + * + * Move the iterator to the next element of the list. + * REMEMBER: ALL LISTS ARE CIRCULAR. + **********************************************************************/ + +void *CLIST_ITERATOR::forward() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::forward", ABORT, NULL); + #endif + if (list->empty ()) + return NULL; + + if (current) { //not removed so + //set previous + prev = current; + started_cycling = TRUE; + // In case next is deleted by another iterator, get next from current. + current = current->next; + } else { + if (ex_current_was_cycle_pt) + cycle_pt = next; + current = next; + } + next = current->next; + + #ifndef NDEBUG + if (!current) + NULL_DATA.error ("CLIST_ITERATOR::forward", ABORT, NULL); + if (!next) + NULL_NEXT.error ("CLIST_ITERATOR::forward", ABORT, + "This is: %p Current is: %p", this, current); + #endif + return current->data; +} + +/*********************************************************************** + * CLIST_ITERATOR::data_relative + * + * Return the data pointer to the element "offset" elements from current. + * "offset" must not be less than -1. + * (This function can't be INLINEd because it contains a loop) + **********************************************************************/ + +void *CLIST_ITERATOR::data_relative( //get data + or - ... + inT8 offset) { //offset from current + CLIST_LINK *ptr; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::data_relative", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("CLIST_ITERATOR::data_relative", ABORT, NULL); + if (offset < -1) + BAD_PARAMETER.error ("CLIST_ITERATOR::data_relative", ABORT, + "offset < -l"); + #endif + + if (offset == -1) + ptr = prev; + else + for (ptr = current ? current : prev; offset-- > 0; ptr = ptr->next); + + #ifndef NDEBUG + if (!ptr) + NULL_DATA.error ("CLIST_ITERATOR::data_relative", ABORT, NULL); + #endif + + return ptr->data; +} + +/*********************************************************************** + * CLIST_ITERATOR::move_to_last() + * + * Move current so that it is set to the end of the list. + * Return data just in case anyone wants it. + * (This function can't be INLINEd because it contains a loop) + **********************************************************************/ + +void *CLIST_ITERATOR::move_to_last() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::move_to_last", ABORT, NULL); + #endif + + while (current != list->last) + forward(); + + if (current == NULL) + return NULL; + else + return current->data; +} + +/*********************************************************************** + * CLIST_ITERATOR::exchange() + * + * Given another iterator, whose current element is a different element on + * the same list list OR an element of another list, exchange the two current + * elements. On return, each iterator points to the element which was the + * other iterators current on entry. + * (This function hasn't been in-lined because its a bit big!) + **********************************************************************/ + +void CLIST_ITERATOR::exchange( //positions of 2 links + CLIST_ITERATOR *other_it) { //other iterator + const ERRCODE DONT_EXCHANGE_DELETED = + "Can't exchange deleted elements of lists"; + + CLIST_LINK *old_current; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::exchange", ABORT, NULL); + if (!other_it) + BAD_PARAMETER.error ("CLIST_ITERATOR::exchange", ABORT, "other_it NULL"); + if (!(other_it->list)) + NO_LIST.error ("CLIST_ITERATOR::exchange", ABORT, "other_it"); + #endif + + /* Do nothing if either list is empty or if both iterators reference the same + link */ + + if ((list->empty ()) || + (other_it->list->empty ()) || (current == other_it->current)) + return; + + /* Error if either current element is deleted */ + + if (!current || !other_it->current) + DONT_EXCHANGE_DELETED.error ("CLIST_ITERATOR.exchange", ABORT, NULL); + + /* Now handle the 4 cases: doubleton list; non-doubleton adjacent elements + (other before this); non-doubleton adjacent elements (this before other); + non-adjacent elements. */ + + //adjacent links + if ((next == other_it->current) || + (other_it->next == current)) { + //doubleton list + if ((next == other_it->current) && + (other_it->next == current)) { + prev = next = current; + other_it->prev = other_it->next = other_it->current; + } + else { //non-doubleton with + //adjacent links + //other before this + if (other_it->next == current) { + other_it->prev->next = current; + other_it->current->next = next; + current->next = other_it->current; + other_it->next = other_it->current; + prev = current; + } + else { //this before other + prev->next = other_it->current; + current->next = other_it->next; + other_it->current->next = current; + next = current; + other_it->prev = other_it->current; + } + } + } + else { //no overlap + prev->next = other_it->current; + current->next = other_it->next; + other_it->prev->next = current; + other_it->current->next = next; + } + + /* update end of list pointer when necessary (remember that the 2 iterators + may iterate over different lists!) */ + + if (list->last == current) + list->last = other_it->current; + if (other_it->list->last == other_it->current) + other_it->list->last = current; + + if (current == cycle_pt) + cycle_pt = other_it->cycle_pt; + if (other_it->current == other_it->cycle_pt) + other_it->cycle_pt = cycle_pt; + + /* The actual exchange - in all cases*/ + + old_current = current; + current = other_it->current; + other_it->current = old_current; +} + +/*********************************************************************** + * CLIST_ITERATOR::extract_sublist() + * + * This is a private member, used only by CLIST::assign_to_sublist. + * Given another iterator for the same list, extract the links from THIS to + * OTHER inclusive, link them into a new circular list, and return a + * pointer to the last element. + * (Can't inline this function because it contains a loop) + **********************************************************************/ + +CLIST_LINK *CLIST_ITERATOR::extract_sublist( //from this current + CLIST_ITERATOR *other_it) { //to other current + CLIST_ITERATOR temp_it = *this; + CLIST_LINK *end_of_new_list; + + const ERRCODE BAD_SUBLIST = "Can't find sublist end point in original list"; + #ifndef NDEBUG + const ERRCODE BAD_EXTRACTION_PTS = + "Can't extract sublist from points on different lists"; + const ERRCODE DONT_EXTRACT_DELETED = + "Can't extract a sublist marked by deleted points"; + + if (!other_it) + BAD_PARAMETER.error ("CLIST_ITERATOR::extract_sublist", ABORT, + "other_it NULL"); + if (!list) + NO_LIST.error ("CLIST_ITERATOR::extract_sublist", ABORT, NULL); + if (list != other_it->list) + BAD_EXTRACTION_PTS.error ("CLIST_ITERATOR.extract_sublist", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("CLIST_ITERATOR::extract_sublist", ABORT, NULL); + + if (!current || !other_it->current) + DONT_EXTRACT_DELETED.error ("CLIST_ITERATOR.extract_sublist", ABORT, + NULL); + #endif + + ex_current_was_last = other_it->ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; + other_it->ex_current_was_cycle_pt = FALSE; + + temp_it.mark_cycle_pt (); + do { //walk sublist + if (temp_it.cycled_list()) // can't find end pt + BAD_SUBLIST.error ("CLIST_ITERATOR.extract_sublist", ABORT, NULL); + + if (temp_it.at_last ()) { + list->last = prev; + ex_current_was_last = other_it->ex_current_was_last = TRUE; + } + + if (temp_it.current == cycle_pt) + ex_current_was_cycle_pt = TRUE; + + if (temp_it.current == other_it->cycle_pt) + other_it->ex_current_was_cycle_pt = TRUE; + + temp_it.forward (); + } + while (temp_it.prev != other_it->current); + + //circularise sublist + other_it->current->next = current; + end_of_new_list = other_it->current; + + //sublist = whole list + if (prev == other_it->current) { + list->last = NULL; + prev = current = next = NULL; + other_it->prev = other_it->current = other_it->next = NULL; + } + else { + prev->next = other_it->next; + current = other_it->current = NULL; + next = other_it->next; + other_it->prev = prev; + } + return end_of_new_list; +} diff --git a/3rdparty/hgOCR/include/ccutil/clst.h b/3rdparty/hgOCR/include/ccutil/clst.h new file mode 100644 index 00000000..f93d75af --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/clst.h @@ -0,0 +1,931 @@ +/********************************************************************** + * File: clst.h (Formerly clist.h) + * Description: CONS cell list module include file. + * Author: Phil Cheatle + * Created: Mon Jan 28 08:33:13 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef CLST_H +#define CLST_H + +#include +#include "host.h" +#include "serialis.h" +#include "lsterr.h" + +class CLIST_ITERATOR; + +/********************************************************************** + * CLASS - CLIST_LINK + * + * Generic link class for singly linked CONS cell lists + * + * Note: No destructor - elements are assumed to be destroyed EITHER after + * they have been extracted from a list OR by the CLIST destructor which + * walks the list. + **********************************************************************/ + +class DLLSYM CLIST_LINK +{ + friend class CLIST_ITERATOR; + friend class CLIST; + + CLIST_LINK *next; + void *data; + + public: + CLIST_LINK() { //constructor + data = next = NULL; + } + + CLIST_LINK( // copy constructor + const CLIST_LINK &) { // don't copy link + data = next = NULL; + } + + void operator=( // don't copy links + const CLIST_LINK &) { + data = next = NULL; + } +}; + +/********************************************************************** + * CLASS - CLIST + * + * Generic list class for singly linked CONS cell lists + **********************************************************************/ + +class DLLSYM CLIST +{ + friend class CLIST_ITERATOR; + + CLIST_LINK *last; //End of list + //(Points to head) + CLIST_LINK *First() { // return first + return last != NULL ? last->next : NULL; + } + + public: + CLIST() { //constructor + last = NULL; + } + + ~CLIST () { //destructor + shallow_clear(); + } + + void internal_deep_clear ( //destroy all links + void (*zapper) (void *)); //ptr to zapper functn + + void shallow_clear(); // clear list but don't + // delete data elements + + bool empty() const { //is list empty? + return !last; + } + + bool singleton() const { + return last != NULL ? (last == last->next) : false; + } + + void shallow_copy( //dangerous!! + CLIST *from_list) { //beware destructors!! + last = from_list->last; + } + + void assign_to_sublist( //to this list + CLIST_ITERATOR *start_it, //from list start + CLIST_ITERATOR *end_it); //from list end + + inT32 length() const; //# elements in list + + void sort ( //sort elements + int comparator ( //comparison routine + const void *, const void *)); + + // Assuming list has been sorted already, insert new_data to + // keep the list sorted according to the same comparison function. + // Comparison function is the same as used by sort, i.e. uses double + // indirection. Time is O(1) to add to beginning or end. + // Time is linear to add pre-sorted items to an empty list. + // If unique, then don't add duplicate entries. + // Returns true if the element was added to the list. + bool add_sorted(int comparator(const void*, const void*), + bool unique, void* new_data); + + // Assuming that the minuend and subtrahend are already sorted with + // the same comparison function, shallow clears this and then copies + // the set difference minuend - subtrahend to this, being the elements + // of minuend that do not compare equal to anything in subtrahend. + // If unique is true, any duplicates in minuend are also eliminated. + void set_subtract(int comparator(const void*, const void*), bool unique, + CLIST* minuend, CLIST* subtrahend); + +}; + +/*********************************************************************** + * CLASS - CLIST_ITERATOR + * + * Generic iterator class for singly linked lists with embedded + *links + **********************************************************************/ + +class DLLSYM CLIST_ITERATOR +{ + friend void CLIST::assign_to_sublist(CLIST_ITERATOR *, CLIST_ITERATOR *); + + CLIST *list; //List being iterated + CLIST_LINK *prev; //prev element + CLIST_LINK *current; //current element + CLIST_LINK *next; //next element + BOOL8 ex_current_was_last; //current extracted + //was end of list + BOOL8 ex_current_was_cycle_pt; //current extracted + //was cycle point + CLIST_LINK *cycle_pt; //point we are cycling + //the list to. + BOOL8 started_cycling; //Have we moved off + //the start? + + CLIST_LINK *extract_sublist( //from this current... + CLIST_ITERATOR *other_it); //to other current + + public: + CLIST_ITERATOR() { //constructor + list = NULL; + } //unassigned list + + CLIST_ITERATOR( //constructor + CLIST *list_to_iterate); + + void set_to_list( //change list + CLIST *list_to_iterate); + + void add_after_then_move( //add after current & + void *new_data); //move to new + + void add_after_stay_put( //add after current & + void *new_data); //stay at current + + void add_before_then_move( //add before current & + void *new_data); //move to new + + void add_before_stay_put( //add before current & + void *new_data); //stay at current + + void add_list_after( //add a list & + CLIST *list_to_add); //stay at current + + void add_list_before( //add a list & + CLIST *list_to_add); //move to it 1st item + + void *data() { //get current data + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::data", ABORT, NULL); + if (!current) + NULL_DATA.error ("CLIST_ITERATOR::data", ABORT, NULL); + #endif + return current->data; + } + + void *data_relative( //get data + or - ... + inT8 offset); //offset from current + + void *forward(); //move to next element + + void *extract(); //remove from list + + void *move_to_first(); //go to start of list + + void *move_to_last(); //go to end of list + + void mark_cycle_pt(); //remember current + + BOOL8 empty() { //is list empty? + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::empty", ABORT, NULL); + #endif + return list->empty (); + } + + BOOL8 current_extracted() { //current extracted? + return !current; + } + + BOOL8 at_first(); //Current is first? + + BOOL8 at_last(); //Current is last? + + BOOL8 cycled_list(); //Completed a cycle? + + void add_to_end( // add at end & + void *new_data); // don't move + + void exchange( //positions of 2 links + CLIST_ITERATOR *other_it); //other iterator + + inT32 length(); //# elements in list + + void sort ( //sort elements + int comparator ( //comparison routine + const void *, const void *)); + +}; + +/*********************************************************************** + * CLIST_ITERATOR::set_to_list + * + * (Re-)initialise the iterator to point to the start of the list_to_iterate + * over. + **********************************************************************/ + +inline void CLIST_ITERATOR::set_to_list( //change list + CLIST *list_to_iterate) { + #ifndef NDEBUG + if (!list_to_iterate) + BAD_PARAMETER.error ("CLIST_ITERATOR::set_to_list", ABORT, + "list_to_iterate is NULL"); + #endif + + list = list_to_iterate; + prev = list->last; + current = list->First (); + next = current != NULL ? current->next : NULL; + cycle_pt = NULL; //await explicit set + started_cycling = FALSE; + ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; +} + +/*********************************************************************** + * CLIST_ITERATOR::CLIST_ITERATOR + * + * CONSTRUCTOR - set iterator to specified list; + **********************************************************************/ + +inline CLIST_ITERATOR::CLIST_ITERATOR(CLIST *list_to_iterate) { + set_to_list(list_to_iterate); +} + +/*********************************************************************** + * CLIST_ITERATOR::add_after_then_move + * + * Add a new element to the list after the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_after_then_move( // element to add + void *new_data) { + CLIST_LINK *new_element; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_after_then_move", ABORT, NULL); + if (!new_data) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_after_then_move", ABORT, + "new_data is NULL"); + #endif + + new_element = new CLIST_LINK; + new_element->data = new_data; + + if (list->empty ()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + new_element->next = next; + + if (current) { //not extracted + current->next = new_element; + prev = current; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + prev->next = new_element; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + +/*********************************************************************** + * CLIST_ITERATOR::add_after_stay_put + * + * Add a new element to the list after the current element but do not move + * the iterator to the new element. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_after_stay_put( // element to add + void *new_data) { + CLIST_LINK *new_element; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_after_stay_put", ABORT, NULL); + if (!new_data) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_after_stay_put", ABORT, + "new_data is NULL"); + #endif + + new_element = new CLIST_LINK; + new_element->data = new_data; + + if (list->empty ()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = FALSE; + current = NULL; + } + else { + new_element->next = next; + + if (current) { //not extracted + current->next = new_element; + if (prev == current) + prev = new_element; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + prev->next = new_element; + if (ex_current_was_last) { + list->last = new_element; + ex_current_was_last = FALSE; + } + } + next = new_element; + } +} + +/*********************************************************************** + * CLIST_ITERATOR::add_before_then_move + * + * Add a new element to the list before the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_before_then_move( // element to add + void *new_data) { + CLIST_LINK *new_element; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_before_then_move", ABORT, NULL); + if (!new_data) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_before_then_move", ABORT, + "new_data is NULL"); + #endif + + new_element = new CLIST_LINK; + new_element->data = new_data; + + if (list->empty ()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + prev->next = new_element; + if (current) { //not extracted + new_element->next = current; + next = current; + } + else { //current extracted + new_element->next = next; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + +/*********************************************************************** + * CLIST_ITERATOR::add_before_stay_put + * + * Add a new element to the list before the current element but don't move the + * iterator to the new element. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_before_stay_put( // element to add + void *new_data) { + CLIST_LINK *new_element; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_before_stay_put", ABORT, NULL); + if (!new_data) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_before_stay_put", ABORT, + "new_data is NULL"); + #endif + + new_element = new CLIST_LINK; + new_element->data = new_data; + + if (list->empty ()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = TRUE; + current = NULL; + } + else { + prev->next = new_element; + if (current) { //not extracted + new_element->next = current; + if (next == current) + next = new_element; + } + else { //current extracted + new_element->next = next; + if (ex_current_was_last) + list->last = new_element; + } + prev = new_element; + } +} + +/*********************************************************************** + * CLIST_ITERATOR::add_list_after + * + * Insert another list to this list after the current element but don't move + *the + * iterator. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_list_after(CLIST *list_to_add) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_list_after", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_list_after", ABORT, + "list_to_add is NULL"); + #endif + + if (!list_to_add->empty ()) { + if (list->empty ()) { + list->last = list_to_add->last; + prev = list->last; + next = list->First (); + ex_current_was_last = TRUE; + current = NULL; + } + else { + if (current) { //not extracted + current->next = list_to_add->First (); + if (current == list->last) + list->last = list_to_add->last; + list_to_add->last->next = next; + next = current->next; + } + else { //current extracted + prev->next = list_to_add->First (); + if (ex_current_was_last) { + list->last = list_to_add->last; + ex_current_was_last = FALSE; + } + list_to_add->last->next = next; + next = prev->next; + } + } + list_to_add->last = NULL; + } +} + +/*********************************************************************** + * CLIST_ITERATOR::add_list_before + * + * Insert another list to this list before the current element. Move the + * iterator to the start of the inserted elements + * iterator. + **********************************************************************/ + +inline void CLIST_ITERATOR::add_list_before(CLIST *list_to_add) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_list_before", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_list_before", ABORT, + "list_to_add is NULL"); + #endif + + if (!list_to_add->empty ()) { + if (list->empty ()) { + list->last = list_to_add->last; + prev = list->last; + current = list->First (); + next = current->next; + ex_current_was_last = FALSE; + } + else { + prev->next = list_to_add->First (); + if (current) { //not extracted + list_to_add->last->next = current; + } + else { //current extracted + list_to_add->last->next = next; + if (ex_current_was_last) + list->last = list_to_add->last; + if (ex_current_was_cycle_pt) + cycle_pt = prev->next; + } + current = prev->next; + next = current->next; + } + list_to_add->last = NULL; + } +} + +/*********************************************************************** + * CLIST_ITERATOR::extract + * + * Do extraction by removing current from the list, deleting the cons cell + * and returning the data to the caller, but NOT updating the iterator. (So + * that any calling loop can do this.) The iterator's current points to + * NULL. If the data is to be deleted, this is the callers responsibility. + **********************************************************************/ + +inline void *CLIST_ITERATOR::extract() { + void *extracted_data; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::extract", ABORT, NULL); + if (!current) //list empty or + //element extracted + NULL_CURRENT.error ("CLIST_ITERATOR::extract", + ABORT, NULL); + #endif + + if (list->singleton()) { + // Special case where we do need to change the iterator. + prev = next = list->last = NULL; + } else { + prev->next = next; //remove from list + + if (current == list->last) { + list->last = prev; + ex_current_was_last = TRUE; + } else { + ex_current_was_last = FALSE; + } + } + // Always set ex_current_was_cycle_pt so an add/forward will work in a loop. + ex_current_was_cycle_pt = (current == cycle_pt) ? TRUE : FALSE; + extracted_data = current->data; + delete(current); //destroy CONS cell + current = NULL; + return extracted_data; +} + +/*********************************************************************** + * CLIST_ITERATOR::move_to_first() + * + * Move current so that it is set to the start of the list. + * Return data just in case anyone wants it. + **********************************************************************/ + +inline void *CLIST_ITERATOR::move_to_first() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::move_to_first", ABORT, NULL); + #endif + + current = list->First (); + prev = list->last; + next = current != NULL ? current->next : NULL; + return current != NULL ? current->data : NULL; +} + +/*********************************************************************** + * CLIST_ITERATOR::mark_cycle_pt() + * + * Remember the current location so that we can tell whether we've returned + * to this point later. + * + * If the current point is deleted either now, or in the future, the cycle + * point will be set to the next item which is set to current. This could be + * by a forward, add_after_then_move or add_after_then_move. + **********************************************************************/ + +inline void CLIST_ITERATOR::mark_cycle_pt() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::mark_cycle_pt", ABORT, NULL); + #endif + + if (current) + cycle_pt = current; + else + ex_current_was_cycle_pt = TRUE; + started_cycling = FALSE; +} + +/*********************************************************************** + * CLIST_ITERATOR::at_first() + * + * Are we at the start of the list? + * + **********************************************************************/ + +inline BOOL8 CLIST_ITERATOR::at_first() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::at_first", ABORT, NULL); + #endif + + //we're at a deleted + return ((list->empty ()) || (current == list->First ()) || ((current == NULL) && + (prev == list->last) && //NON-last pt between + !ex_current_was_last)); //first and last +} + +/*********************************************************************** + * CLIST_ITERATOR::at_last() + * + * Are we at the end of the list? + * + **********************************************************************/ + +inline BOOL8 CLIST_ITERATOR::at_last() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::at_last", ABORT, NULL); + #endif + + //we're at a deleted + return ((list->empty ()) || (current == list->last) || ((current == NULL) && + (prev == list->last) && //last point between + ex_current_was_last)); //first and last +} + +/*********************************************************************** + * CLIST_ITERATOR::cycled_list() + * + * Have we returned to the cycle_pt since it was set? + * + **********************************************************************/ + +inline BOOL8 CLIST_ITERATOR::cycled_list() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::cycled_list", ABORT, NULL); + #endif + + return ((list->empty ()) || ((current == cycle_pt) && started_cycling)); + +} + +/*********************************************************************** + * CLIST_ITERATOR::length() + * + * Return the length of the list + * + **********************************************************************/ + +inline inT32 CLIST_ITERATOR::length() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::length", ABORT, NULL); + #endif + + return list->length (); +} + +/*********************************************************************** + * CLIST_ITERATOR::sort() + * + * Sort the elements of the list, then reposition at the start. + * + **********************************************************************/ + +inline void +CLIST_ITERATOR::sort ( //sort elements +int comparator ( //comparison routine +const void *, const void *)) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::sort", ABORT, NULL); + #endif + + list->sort (comparator); + move_to_first(); +} + +/*********************************************************************** + * CLIST_ITERATOR::add_to_end + * + * Add a new element to the end of the list without moving the iterator. + * This is provided because a single linked list cannot move to the last as + * the iterator couldn't set its prev pointer. Adding to the end is + * essential for implementing + queues. +**********************************************************************/ + +inline void CLIST_ITERATOR::add_to_end( // element to add + void *new_data) { + CLIST_LINK *new_element; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("CLIST_ITERATOR::add_to_end", ABORT, NULL); + if (!new_data) + BAD_PARAMETER.error ("CLIST_ITERATOR::add_to_end", ABORT, + "new_data is NULL"); + #endif + + if (this->at_last ()) { + this->add_after_stay_put (new_data); + } + else { + if (this->at_first ()) { + this->add_before_stay_put (new_data); + list->last = prev; + } + else { //Iteratr is elsewhere + new_element = new CLIST_LINK; + new_element->data = new_data; + + new_element->next = list->last->next; + list->last->next = new_element; + list->last = new_element; + } + } +} + + +/*********************************************************************** + QUOTE_IT MACRO DEFINITION + =========================== +Replace with "". may be an arbitrary number of tokens +***********************************************************************/ + +#define QUOTE_IT( parm ) #parm + +/*********************************************************************** + CLISTIZE( CLASSNAME ) MACRO DEFINITION + ====================================== + +CLASSNAME is assumed to be the name of a class to be used in a CONS list + +NOTE: Because we don't use virtual functions in the list code, the list code +will NOT work correctly for classes derived from this. + +The macro generates: + - An element deletion function: CLASSNAME##_c1_zapper + - An element copier function: + CLASSNAME##_c1_copier + - A CLIST subclass: CLASSNAME##_CLIST + - A CLIST_ITERATOR subclass: + CLASSNAME##_C_IT + +NOTE: Generated names do NOT clash with those generated by ELISTIZE, +ELIST2ISE and CLIST2IZE + +Two macros are provided: CLISTIZE and CLISTIZEH +The ...IZEH macros just define the class names for use in .h files +The ...IZE macros define the code use in .c files +***********************************************************************/ + +/*********************************************************************** + CLISTIZEH( CLASSNAME ) MACRO + +CLISTIZEH is a concatenation of 3 fragments CLISTIZEH_A, CLISTIZEH_B and +CLISTIZEH_C. +***********************************************************************/ + +#define CLISTIZEH_A(CLASSNAME) \ + \ + extern DLLSYM void CLASSNAME##_c1_zapper( /*delete a link*/ \ + void *link); /*link to delete*/ \ + \ + extern DLLSYM void \ + *CLASSNAME##_c1_copier( /*deep copy a link*/ \ + void *old_element); /*source link */ + +#define CLISTIZEH_B(CLASSNAME) \ + \ + /*********************************************************************** \ + * CLASS - \ + *CLASSNAME##_CLIST \ + * \ + * List class for class \ + *CLASSNAME \ + * \ + **********************************************************************/ \ + \ + class DLLSYM CLASSNAME##_CLIST : public CLIST { \ + public: \ + CLASSNAME##_CLIST() : CLIST() {} \ + /* constructor */ \ + \ + CLASSNAME##_CLIST( /* don't construct */ \ + const CLASSNAME##_CLIST &) /*by initial assign*/ \ + { \ + DONT_CONSTRUCT_LIST_BY_COPY.error(QUOTE_IT(CLASSNAME##_CLIST), ABORT, \ + NULL); \ + } \ + \ + void deep_clear() /* delete elements */ \ + { \ + CLIST::internal_deep_clear(&CLASSNAME##_c1_zapper); \ + } \ + \ + void operator=(/* prevent assign */ \ + const CLASSNAME##_CLIST &) { \ + DONT_ASSIGN_LISTS.error(QUOTE_IT(CLASSNAME##_CLIST), ABORT, NULL); \ + } + +#define CLISTIZEH_C(CLASSNAME) \ + } \ + ; \ + \ + /*********************************************************************** \ + * CLASS - CLASSNAME##_C_IT \ + * \ + * Iterator class for class CLASSNAME##_CLIST \ + * \ + * Note: We don't need to coerce pointers to member functions input \ + * parameters as these are automatically converted to the type of the base \ + * type. ("A ptr to a class may be converted to a pointer to a public base \ + * class of that class") \ + **********************************************************************/ \ + \ + class DLLSYM CLASSNAME##_C_IT : public CLIST_ITERATOR { \ + public: \ + CLASSNAME##_C_IT() : CLIST_ITERATOR() {} \ + \ + CLASSNAME##_C_IT(CLASSNAME##_CLIST *list) : CLIST_ITERATOR(list) {} \ + \ + CLASSNAME *data() { return (CLASSNAME *)CLIST_ITERATOR::data(); } \ + \ + CLASSNAME *data_relative(inT8 offset) { \ + return (CLASSNAME *)CLIST_ITERATOR::data_relative(offset); \ + } \ + \ + CLASSNAME *forward() { return (CLASSNAME *)CLIST_ITERATOR::forward(); } \ + \ + CLASSNAME *extract() { return (CLASSNAME *)CLIST_ITERATOR::extract(); } \ + \ + CLASSNAME *move_to_first() { \ + return (CLASSNAME *)CLIST_ITERATOR::move_to_first(); \ + } \ + \ + CLASSNAME *move_to_last() { \ + return (CLASSNAME *)CLIST_ITERATOR::move_to_last(); \ + } \ + }; + +#define CLISTIZEH(CLASSNAME) \ + \ + CLISTIZEH_A(CLASSNAME) \ + \ + CLISTIZEH_B(CLASSNAME) \ + \ + CLISTIZEH_C(CLASSNAME) + +/*********************************************************************** + CLISTIZE( CLASSNAME ) MACRO +***********************************************************************/ + +#define CLISTIZE(CLASSNAME) \ + \ + /*********************************************************************** \ + * CLASSNAME##_c1_zapper \ + * \ + * A function which can delete a CLASSNAME element. This is passed to the \ + * generic deep_clear list member function so that when a list is cleared \ + *the \ + * elements on the list are properly destroyed from the base class, even \ + * though we don't use a virtual destructor function. \ + **********************************************************************/ \ + \ + DLLSYM void CLASSNAME##_c1_zapper( /*delete a link*/ \ + void *link) /*link to delete*/ \ + { \ + delete (CLASSNAME *)link; \ + } + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/doubleptr.h b/3rdparty/hgOCR/include/ccutil/doubleptr.h new file mode 100644 index 00000000..4cef16b5 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/doubleptr.h @@ -0,0 +1,93 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: doubleptr.h +// Description: Double-ended pointer that keeps pointing correctly even +// when reallocated or copied. +// Author: Ray Smith +// Created: Wed Mar 14 12:22:57 PDT 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_DOUBLEPTR_H_ +#define TESSERACT_CCUTIL_DOUBLEPTR_H_ + +#include "errcode.h" + +namespace tesseract { + +// A smart pointer class that implements a double-ended pointer. Each end +// points to the other end. The copy constructor and operator= have MOVE +// semantics, meaning that the relationship with the other end moves to the +// destination of the copy, leaving the source unattached. +// For this reason both the copy constructor and the operator= take a non-const +// reference argument, and the const reference versions cannot be used. +// DoublePtr is useful to incorporate into structures that are part of a +// collection such as GenericVector or STL containers, where reallocs can +// relocate the members. DoublePtr is also useful in a GenericHeap, where it +// can correctly maintain the pointer to an element of the heap despite it +// getting moved around on the heap. +class DoublePtr { + public: + DoublePtr() : other_end_(NULL) {} + // Copy constructor steals the partner off src and is therefore a non + // const reference arg. + // Copying a const DoublePtr generates a compiler error. + DoublePtr(DoublePtr& src) { + other_end_ = src.other_end_; + if (other_end_ != NULL) { + other_end_->other_end_ = this; + src.other_end_ = NULL; + } + } + // Operator= steals the partner off src, and therefore needs src to be a non- + // const reference. + // Assigning from a const DoublePtr generates a compiler error. + void operator=(DoublePtr& src) { + Disconnect(); + other_end_ = src.other_end_; + if (other_end_ != NULL) { + other_end_->other_end_ = this; + src.other_end_ = NULL; + } + } + + // Connects this and other, discarding any existing connections. + void Connect(DoublePtr* other) { + other->Disconnect(); + Disconnect(); + other->other_end_ = this; + other_end_ = other; + } + // Disconnects this and other, making OtherEnd() return NULL for both. + void Disconnect() { + if (other_end_ != NULL) { + other_end_->other_end_ = NULL; + other_end_ = NULL; + } + } + // Returns the pointer to the other end of the double pointer. + DoublePtr* OtherEnd() const { + return other_end_; + } + + private: + // Pointer to the other end of the link. It is always true that either + // other_end_ == NULL or other_end_->other_end_ == this. + DoublePtr* other_end_; +}; + +} // namespace tesseract. + +#endif // THIRD_PARTY_TESSERACT_CCUTIL_DOUBLEPTR_H_ diff --git a/3rdparty/hgOCR/include/ccutil/elst.cpp b/3rdparty/hgOCR/include/ccutil/elst.cpp new file mode 100644 index 00000000..2d2c9ad6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/elst.cpp @@ -0,0 +1,457 @@ +/********************************************************************** + * File: elst.c (Formerly elist.c) + * Description: Embedded list handling code which is not in the include file. + * Author: Phil Cheatle + * Created: Fri Jan 04 13:55:49 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include "elst.h" + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: ELIST + * ================================ + **********************************************************************/ + +/*********************************************************************** + * ELIST::internal_clear + * + * Used by the destructor and the "clear" member function of derived list + * classes to destroy all the elements on the list. + * The calling function passes a "zapper" function which can be called to + * delete each element of the list, regardless of its derived type. This + * technique permits a generic clear function to destroy elements of + * different derived types correctly, without requiring virtual functions and + * the consequential memory overhead. + **********************************************************************/ + +void +ELIST::internal_clear ( //destroy all links +void (*zapper) (ELIST_LINK *)) { + //ptr to zapper functn + ELIST_LINK *ptr; + ELIST_LINK *next; + + if (!empty ()) { + ptr = last->next; //set to first + last->next = NULL; //break circle + last = NULL; //set list empty + while (ptr) { + next = ptr->next; + zapper(ptr); + ptr = next; + } + } +} + +/*********************************************************************** + * ELIST::assign_to_sublist + * + * The list is set to a sublist of another list. "This" list must be empty + * before this function is invoked. The two iterators passed must refer to + * the same list, different from "this" one. The sublist removed is the + * inclusive list from start_it's current position to end_it's current + * position. If this range passes over the end of the source list then the + * source list has its end set to the previous element of start_it. The + * extracted sublist is unaffected by the end point of the source list, its + * end point is always the end_it position. + **********************************************************************/ + +void ELIST::assign_to_sublist( //to this list + ELIST_ITERATOR *start_it, //from list start + ELIST_ITERATOR *end_it) { //from list end + const ERRCODE LIST_NOT_EMPTY = + "Destination list must be empty before extracting a sublist"; + + if (!empty ()) + LIST_NOT_EMPTY.error ("ELIST.assign_to_sublist", ABORT, NULL); + + last = start_it->extract_sublist (end_it); +} + +/*********************************************************************** + * ELIST::length + * + * Return count of elements on list + **********************************************************************/ + +inT32 ELIST::length() const { // count elements + ELIST_ITERATOR it(const_cast(this)); + inT32 count = 0; + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + count++; + return count; +} + +/*********************************************************************** + * ELIST::sort + * + * Sort elements on list + * NB If you don't like the const declarations in the comparator, coerce yours: + * ( int (*)(const void *, const void *) + **********************************************************************/ + +void +ELIST::sort ( //sort elements +int comparator ( //comparison routine +const void *, const void *)) { + ELIST_ITERATOR it(this); + inT32 count; + ELIST_LINK **base; //ptr array to sort + ELIST_LINK **current; + inT32 i; + + /* Allocate an array of pointers, one per list element */ + count = length (); + base = (ELIST_LINK **) malloc (count * sizeof (ELIST_LINK *)); + + /* Extract all elements, putting the pointers in the array */ + current = base; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + *current = it.extract (); + current++; + } + + /* Sort the pointer array */ + qsort ((char *) base, count, sizeof (*base), comparator); + + /* Rebuild the list from the sorted pointers */ + current = base; + for (i = 0; i < count; i++) { + it.add_to_end (*current); + current++; + } + free(base); +} + +// Assuming list has been sorted already, insert new_link to +// keep the list sorted according to the same comparison function. +// Comparison function is the same as used by sort, i.e. uses double +// indirection. Time is O(1) to add to beginning or end. +// Time is linear to add pre-sorted items to an empty list. +// If unique is set to true and comparator() returns 0 (an entry with the +// same information as the one contained in new_link is already in the +// list) - new_link is not added to the list and the function returns the +// pointer to the identical entry that already exists in the list +// (otherwise the function returns new_link). +ELIST_LINK *ELIST::add_sorted_and_find( + int comparator(const void*, const void*), + bool unique, ELIST_LINK* new_link) { + // Check for adding at the end. + if (last == NULL || comparator(&last, &new_link) < 0) { + if (last == NULL) { + new_link->next = new_link; + } else { + new_link->next = last->next; + last->next = new_link; + } + last = new_link; + } else { + // Need to use an iterator. + ELIST_ITERATOR it(this); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + ELIST_LINK* link = it.data(); + int compare = comparator(&link, &new_link); + if (compare > 0) { + break; + } else if (unique && compare == 0) { + return link; + } + } + if (it.cycled_list()) + it.add_to_end(new_link); + else + it.add_before_then_move(new_link); + } + return new_link; +} + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: ELIST_ITERATOR + * ========================================= + **********************************************************************/ + +/*********************************************************************** + * ELIST_ITERATOR::forward + * + * Move the iterator to the next element of the list. + * REMEMBER: ALL LISTS ARE CIRCULAR. + **********************************************************************/ + +ELIST_LINK *ELIST_ITERATOR::forward() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST_ITERATOR::forward", ABORT, NULL); + #endif + if (list->empty ()) + return NULL; + + if (current) { //not removed so + //set previous + prev = current; + started_cycling = TRUE; + // In case next is deleted by another iterator, get next from current. + current = current->next; + } else { + if (ex_current_was_cycle_pt) + cycle_pt = next; + current = next; + } + next = current->next; + + #ifndef NDEBUG + if (!current) + NULL_DATA.error ("ELIST_ITERATOR::forward", ABORT, NULL); + if (!next) + NULL_NEXT.error ("ELIST_ITERATOR::forward", ABORT, + "This is: %p Current is: %p", this, current); + #endif + return current; +} + +/*********************************************************************** + * ELIST_ITERATOR::data_relative + * + * Return the data pointer to the element "offset" elements from current. + * "offset" must not be less than -1. + * (This function can't be INLINEd because it contains a loop) + **********************************************************************/ + +ELIST_LINK *ELIST_ITERATOR::data_relative( //get data + or - ... + inT8 offset) { //offset from current + ELIST_LINK *ptr; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST_ITERATOR::data_relative", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("ELIST_ITERATOR::data_relative", ABORT, NULL); + if (offset < -1) + BAD_PARAMETER.error ("ELIST_ITERATOR::data_relative", ABORT, + "offset < -l"); + #endif + + if (offset == -1) + ptr = prev; + else + for (ptr = current ? current : prev; offset-- > 0; ptr = ptr->next); + + #ifndef NDEBUG + if (!ptr) + NULL_DATA.error ("ELIST_ITERATOR::data_relative", ABORT, NULL); + #endif + + return ptr; +} + +/*********************************************************************** + * ELIST_ITERATOR::move_to_last() + * + * Move current so that it is set to the end of the list. + * Return data just in case anyone wants it. + * (This function can't be INLINEd because it contains a loop) + **********************************************************************/ + +ELIST_LINK *ELIST_ITERATOR::move_to_last() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST_ITERATOR::move_to_last", ABORT, NULL); + #endif + + while (current != list->last) + forward(); + + return current; +} + +/*********************************************************************** + * ELIST_ITERATOR::exchange() + * + * Given another iterator, whose current element is a different element on + * the same list list OR an element of another list, exchange the two current + * elements. On return, each iterator points to the element which was the + * other iterators current on entry. + * (This function hasn't been in-lined because its a bit big!) + **********************************************************************/ + +void ELIST_ITERATOR::exchange( //positions of 2 links + ELIST_ITERATOR *other_it) { //other iterator + const ERRCODE DONT_EXCHANGE_DELETED = + "Can't exchange deleted elements of lists"; + + ELIST_LINK *old_current; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST_ITERATOR::exchange", ABORT, NULL); + if (!other_it) + BAD_PARAMETER.error ("ELIST_ITERATOR::exchange", ABORT, "other_it NULL"); + if (!(other_it->list)) + NO_LIST.error ("ELIST_ITERATOR::exchange", ABORT, "other_it"); + #endif + + /* Do nothing if either list is empty or if both iterators reference the same + link */ + + if ((list->empty ()) || + (other_it->list->empty ()) || (current == other_it->current)) + return; + + /* Error if either current element is deleted */ + + if (!current || !other_it->current) + DONT_EXCHANGE_DELETED.error ("ELIST_ITERATOR.exchange", ABORT, NULL); + + /* Now handle the 4 cases: doubleton list; non-doubleton adjacent elements + (other before this); non-doubleton adjacent elements (this before other); + non-adjacent elements. */ + + //adjacent links + if ((next == other_it->current) || + (other_it->next == current)) { + //doubleton list + if ((next == other_it->current) && + (other_it->next == current)) { + prev = next = current; + other_it->prev = other_it->next = other_it->current; + } + else { //non-doubleton with + //adjacent links + //other before this + if (other_it->next == current) { + other_it->prev->next = current; + other_it->current->next = next; + current->next = other_it->current; + other_it->next = other_it->current; + prev = current; + } + else { //this before other + prev->next = other_it->current; + current->next = other_it->next; + other_it->current->next = current; + next = current; + other_it->prev = other_it->current; + } + } + } + else { //no overlap + prev->next = other_it->current; + current->next = other_it->next; + other_it->prev->next = current; + other_it->current->next = next; + } + + /* update end of list pointer when necessary (remember that the 2 iterators + may iterate over different lists!) */ + + if (list->last == current) + list->last = other_it->current; + if (other_it->list->last == other_it->current) + other_it->list->last = current; + + if (current == cycle_pt) + cycle_pt = other_it->cycle_pt; + if (other_it->current == other_it->cycle_pt) + other_it->cycle_pt = cycle_pt; + + /* The actual exchange - in all cases*/ + + old_current = current; + current = other_it->current; + other_it->current = old_current; +} + +/*********************************************************************** + * ELIST_ITERATOR::extract_sublist() + * + * This is a private member, used only by ELIST::assign_to_sublist. + * Given another iterator for the same list, extract the links from THIS to + * OTHER inclusive, link them into a new circular list, and return a + * pointer to the last element. + * (Can't inline this function because it contains a loop) + **********************************************************************/ + +ELIST_LINK *ELIST_ITERATOR::extract_sublist( //from this current + ELIST_ITERATOR *other_it) { //to other current + #ifndef NDEBUG + const ERRCODE BAD_EXTRACTION_PTS = + "Can't extract sublist from points on different lists"; + const ERRCODE DONT_EXTRACT_DELETED = + "Can't extract a sublist marked by deleted points"; + #endif + const ERRCODE BAD_SUBLIST = "Can't find sublist end point in original list"; + + ELIST_ITERATOR temp_it = *this; + ELIST_LINK *end_of_new_list; + + #ifndef NDEBUG + if (!other_it) + BAD_PARAMETER.error ("ELIST_ITERATOR::extract_sublist", ABORT, + "other_it NULL"); + if (!list) + NO_LIST.error ("ELIST_ITERATOR::extract_sublist", ABORT, NULL); + if (list != other_it->list) + BAD_EXTRACTION_PTS.error ("ELIST_ITERATOR.extract_sublist", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("ELIST_ITERATOR::extract_sublist", ABORT, NULL); + + if (!current || !other_it->current) + DONT_EXTRACT_DELETED.error ("ELIST_ITERATOR.extract_sublist", ABORT, + NULL); + #endif + + ex_current_was_last = other_it->ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; + other_it->ex_current_was_cycle_pt = FALSE; + + temp_it.mark_cycle_pt (); + do { //walk sublist + if (temp_it.cycled_list()) // can't find end pt + BAD_SUBLIST.error ("ELIST_ITERATOR.extract_sublist", ABORT, NULL); + + if (temp_it.at_last ()) { + list->last = prev; + ex_current_was_last = other_it->ex_current_was_last = TRUE; + } + + if (temp_it.current == cycle_pt) + ex_current_was_cycle_pt = TRUE; + + if (temp_it.current == other_it->cycle_pt) + other_it->ex_current_was_cycle_pt = TRUE; + + temp_it.forward (); + } + while (temp_it.prev != other_it->current); + + //circularise sublist + other_it->current->next = current; + end_of_new_list = other_it->current; + + //sublist = whole list + if (prev == other_it->current) { + list->last = NULL; + prev = current = next = NULL; + other_it->prev = other_it->current = other_it->next = NULL; + } + else { + prev->next = other_it->next; + current = other_it->current = NULL; + next = other_it->next; + other_it->prev = prev; + } + return end_of_new_list; +} diff --git a/3rdparty/hgOCR/include/ccutil/elst.h b/3rdparty/hgOCR/include/ccutil/elst.h new file mode 100644 index 00000000..64f4b52a --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/elst.h @@ -0,0 +1,988 @@ +/********************************************************************** + * File: elst.h (Formerly elist.h) + * Description: Embedded list module include file. + * Author: Phil Cheatle + * Created: Mon Jan 07 08:35:34 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef ELST_H +#define ELST_H + +#include +#include "host.h" +#include "serialis.h" +#include "lsterr.h" + +class ELIST_ITERATOR; + +/********************************************************************** +This module implements list classes and iterators. +The following list types and iterators are provided: + + List type List Class Iterator Class Element Class + --------- ---------- -------------- ------------- + + Embedded list ELIST + ELIST_ITERATOR + ELIST_LINK + (Single linked) + + Embedded list ELIST2 + ELIST2_ITERATOR + ELIST2_LINK + (Double linked) + + Cons List CLIST + CLIST_ITERATOR + CLIST_LINK + (Single linked) + + Cons List CLIST2 + CLIST2_ITERATOR + CLIST2_LINK + (Double linked) + +An embedded list is where the list pointers are provided by a generic class. +Data types to be listed inherit from the generic class. Data is thus linked +in only ONE list at any one time. + +A cons list has a separate structure for a "cons cell". This contains the +list pointer(s) AND a pointer to the data structure held on the list. A +structure can be on many cons lists at the same time, and the structure does +not need to inherit from any generic class in order to be on the list. + +The implementation of lists is very careful about space and speed overheads. +This is why many embedded lists are provided. The same concerns mean that +in-line type coercion is done, rather than use virtual functions. This is +cumbersome in that each data type to be listed requires its own iterator and +list class - though macros can gererate these. It also prevents heterogeneous +lists. +**********************************************************************/ + +/********************************************************************** + * CLASS - ELIST_LINK + * + * Generic link class for singly linked lists with embedded links + * + * Note: No destructor - elements are assumed to be destroyed EITHER after + * they have been extracted from a list OR by the ELIST destructor which + * walks the list. + **********************************************************************/ + +class DLLSYM ELIST_LINK +{ + friend class ELIST_ITERATOR; + friend class ELIST; + + ELIST_LINK *next; + +public: + ELIST_LINK() { + next = NULL; + } + //constructor + + ELIST_LINK(const ELIST_LINK &) { // don't copy link. + next = NULL; + } + + void operator=( // don't copy links + const ELIST_LINK &) { + next = NULL; + } +}; + +/********************************************************************** + * CLASS - ELIST + * + * Generic list class for singly linked lists with embedded links + **********************************************************************/ + +class DLLSYM ELIST +{ + friend class ELIST_ITERATOR; + + ELIST_LINK *last; //End of list + //(Points to head) + ELIST_LINK *First() { // return first + return last ? last->next : NULL; + } + +public: + ELIST() { //constructor + last = NULL; + } + + void internal_clear( //destroy all links + //ptr to zapper functn + void(*zapper) (ELIST_LINK *)); + + bool empty() const { //is list empty? + return !last; + } + + bool singleton() const { + return last ? (last == last->next) : false; + } + + void shallow_copy( //dangerous!! + ELIST *from_list) { //beware destructors!! + last = from_list->last; + } + + //ptr to copier functn + void internal_deep_copy(ELIST_LINK * (*copier) (ELIST_LINK *), + const ELIST * list); //list being copied + + void assign_to_sublist( //to this list + ELIST_ITERATOR *start_it, //from list start + ELIST_ITERATOR *end_it); //from list end + + inT32 length() const; // # elements in list + + void sort( //sort elements + int comparator( //comparison routine + const void *, const void *)); + + // Assuming list has been sorted already, insert new_link to + // keep the list sorted according to the same comparison function. + // Comparison function is the same as used by sort, i.e. uses double + // indirection. Time is O(1) to add to beginning or end. + // Time is linear to add pre-sorted items to an empty list. + // If unique is set to true and comparator() returns 0 (an entry with the + // same information as the one contained in new_link is already in the + // list) - new_link is not added to the list and the function returns the + // pointer to the identical entry that already exists in the list + // (otherwise the function returns new_link). + ELIST_LINK *add_sorted_and_find(int comparator(const void*, const void*), + bool unique, ELIST_LINK* new_link); + + // Same as above, but returns true if the new entry was inserted, false + // if the identical entry already existed in the list. + bool add_sorted(int comparator(const void*, const void*), + bool unique, ELIST_LINK* new_link) { + return (add_sorted_and_find(comparator, unique, new_link) == new_link); + } + +}; + +/*********************************************************************** + * CLASS - ELIST_ITERATOR + * + * Generic iterator class for singly linked lists with embedded links + **********************************************************************/ + +class DLLSYM ELIST_ITERATOR +{ + friend void ELIST::assign_to_sublist(ELIST_ITERATOR *, ELIST_ITERATOR *); + + ELIST *list; //List being iterated + ELIST_LINK *prev; //prev element + ELIST_LINK *current; //current element + ELIST_LINK *next; //next element + bool ex_current_was_last; //current extracted + //was end of list + bool ex_current_was_cycle_pt; //current extracted + //was cycle point + ELIST_LINK *cycle_pt; //point we are cycling + //the list to. + bool started_cycling; //Have we moved off + //the start? + + ELIST_LINK *extract_sublist( //from this current... + ELIST_ITERATOR *other_it); //to other current + +public: + ELIST_ITERATOR() { //constructor + list = NULL; + } //unassigned list + + explicit ELIST_ITERATOR(ELIST *list_to_iterate); + + void set_to_list( //change list + ELIST *list_to_iterate); + + void add_after_then_move( //add after current & + ELIST_LINK *new_link); //move to new + + void add_after_stay_put( //add after current & + ELIST_LINK *new_link); //stay at current + + void add_before_then_move( //add before current & + ELIST_LINK *new_link); //move to new + + void add_before_stay_put( //add before current & + ELIST_LINK *new_link); //stay at current + + void add_list_after( //add a list & + ELIST *list_to_add); //stay at current + + void add_list_before( //add a list & + ELIST *list_to_add); //move to it 1st item + + ELIST_LINK *data() { //get current data +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::data", ABORT, NULL); + if (!current) + NULL_DATA.error("ELIST_ITERATOR::data", ABORT, NULL); +#endif + return current; + } + + ELIST_LINK *data_relative( //get data + or - ... + inT8 offset); //offset from current + + ELIST_LINK *forward(); //move to next element + + ELIST_LINK *extract(); //remove from list + + ELIST_LINK *move_to_first(); //go to start of list + + ELIST_LINK *move_to_last(); //go to end of list + + void mark_cycle_pt(); //remember current + + bool empty() { //is list empty? +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::empty", ABORT, NULL); +#endif + return list->empty(); + } + + bool current_extracted() { //current extracted? + return !current; + } + + bool at_first(); //Current is first? + + bool at_last(); //Current is last? + + bool cycled_list(); //Completed a cycle? + + void add_to_end( // add at end & + ELIST_LINK *new_link); // don't move + + void exchange( //positions of 2 links + ELIST_ITERATOR *other_it); //other iterator + + inT32 length(); //# elements in list + + void sort( //sort elements + int comparator( //comparison routine + const void *, const void *)); + +}; + +/*********************************************************************** + * ELIST_ITERATOR::set_to_list + * + * (Re-)initialise the iterator to point to the start of the list_to_iterate + * over. + **********************************************************************/ + +inline void ELIST_ITERATOR::set_to_list( //change list + ELIST *list_to_iterate) { +#ifndef NDEBUG + if (!list_to_iterate) + BAD_PARAMETER.error("ELIST_ITERATOR::set_to_list", ABORT, + "list_to_iterate is NULL"); +#endif + + list = list_to_iterate; + prev = list->last; + current = list->First(); + next = current ? current->next : NULL; + cycle_pt = NULL; //await explicit set + started_cycling = FALSE; + ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; +} + + +/*********************************************************************** + * ELIST_ITERATOR::ELIST_ITERATOR + * + * CONSTRUCTOR - set iterator to specified list; + **********************************************************************/ + +inline ELIST_ITERATOR::ELIST_ITERATOR(ELIST *list_to_iterate) { + set_to_list(list_to_iterate); +} + + +/*********************************************************************** + * ELIST_ITERATOR::add_after_then_move + * + * Add a new element to the list after the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_after_then_move( // element to add + ELIST_LINK *new_element) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_after_then_move", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error("ELIST_ITERATOR::add_after_then_move", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error("ELIST_ITERATOR::add_after_then_move", ABORT, NULL); +#endif + + if (list->empty()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + new_element->next = next; + + if (current) { //not extracted + current->next = new_element; + prev = current; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + prev->next = new_element; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + + +/*********************************************************************** + * ELIST_ITERATOR::add_after_stay_put + * + * Add a new element to the list after the current element but do not move + * the iterator to the new element. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_after_stay_put( // element to add + ELIST_LINK *new_element) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_after_stay_put", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error("ELIST_ITERATOR::add_after_stay_put", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error("ELIST_ITERATOR::add_after_stay_put", ABORT, NULL); +#endif + + if (list->empty()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = FALSE; + current = NULL; + } + else { + new_element->next = next; + + if (current) { //not extracted + current->next = new_element; + if (prev == current) + prev = new_element; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + prev->next = new_element; + if (ex_current_was_last) { + list->last = new_element; + ex_current_was_last = FALSE; + } + } + next = new_element; + } +} + + +/*********************************************************************** + * ELIST_ITERATOR::add_before_then_move + * + * Add a new element to the list before the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_before_then_move( // element to add + ELIST_LINK *new_element) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_before_then_move", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error("ELIST_ITERATOR::add_before_then_move", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error("ELIST_ITERATOR::add_before_then_move", ABORT, NULL); +#endif + + if (list->empty()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + prev->next = new_element; + if (current) { //not extracted + new_element->next = current; + next = current; + } + else { //current extracted + new_element->next = next; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + +/*********************************************************************** + * ELIST_ITERATOR::add_before_stay_put + * + * Add a new element to the list before the current element but don't move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_before_stay_put( // element to add + ELIST_LINK *new_element) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_before_stay_put", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error("ELIST_ITERATOR::add_before_stay_put", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error("ELIST_ITERATOR::add_before_stay_put", ABORT, NULL); +#endif + + if (list->empty()) { + new_element->next = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = TRUE; + current = NULL; + } + else { + prev->next = new_element; + if (current) { //not extracted + new_element->next = current; + if (next == current) + next = new_element; + } + else { //current extracted + new_element->next = next; + if (ex_current_was_last) + list->last = new_element; + } + prev = new_element; + } +} + +/*********************************************************************** + * ELIST_ITERATOR::add_list_after + * + * Insert another list to this list after the current element but don't move + *the + * iterator. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_list_after(ELIST *list_to_add) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_list_after", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error("ELIST_ITERATOR::add_list_after", ABORT, + "list_to_add is NULL"); +#endif + + if (!list_to_add->empty()) { + if (list->empty()) { + list->last = list_to_add->last; + prev = list->last; + next = list->First(); + ex_current_was_last = TRUE; + current = NULL; + } + else { + if (current) { //not extracted + current->next = list_to_add->First(); + if (current == list->last) + list->last = list_to_add->last; + list_to_add->last->next = next; + next = current->next; + } + else { //current extracted + prev->next = list_to_add->First(); + if (ex_current_was_last) { + list->last = list_to_add->last; + ex_current_was_last = FALSE; + } + list_to_add->last->next = next; + next = prev->next; + } + } + list_to_add->last = NULL; + } +} + + +/*********************************************************************** + * ELIST_ITERATOR::add_list_before + * + * Insert another list to this list before the current element. Move the + * iterator to the start of the inserted elements + * iterator. + **********************************************************************/ + +inline void ELIST_ITERATOR::add_list_before(ELIST *list_to_add) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_list_before", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error("ELIST_ITERATOR::add_list_before", ABORT, + "list_to_add is NULL"); +#endif + + if (!list_to_add->empty()) { + if (list->empty()) { + list->last = list_to_add->last; + prev = list->last; + current = list->First(); + next = current->next; + ex_current_was_last = FALSE; + } + else { + prev->next = list_to_add->First(); + if (current) { //not extracted + list_to_add->last->next = current; + } + else { //current extracted + list_to_add->last->next = next; + if (ex_current_was_last) + list->last = list_to_add->last; + if (ex_current_was_cycle_pt) + cycle_pt = prev->next; + } + current = prev->next; + next = current->next; + } + list_to_add->last = NULL; + } +} + + +/*********************************************************************** + * ELIST_ITERATOR::extract + * + * Do extraction by removing current from the list, returning it to the + * caller, but NOT updating the iterator. (So that any calling loop can do + * this.) The iterator's current points to NULL. If the extracted element + * is to be deleted, this is the callers responsibility. + **********************************************************************/ + +inline ELIST_LINK *ELIST_ITERATOR::extract() { + ELIST_LINK *extracted_link; + +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::extract", ABORT, NULL); + if (!current) //list empty or + //element extracted + NULL_CURRENT.error("ELIST_ITERATOR::extract", + ABORT, NULL); +#endif + + if (list->singleton()) { + // Special case where we do need to change the iterator. + prev = next = list->last = NULL; + } + else { + prev->next = next; //remove from list + + if (current == list->last) { + list->last = prev; + ex_current_was_last = TRUE; + } + else { + ex_current_was_last = FALSE; + } + } + // Always set ex_current_was_cycle_pt so an add/forward will work in a loop. + ex_current_was_cycle_pt = (current == cycle_pt) ? TRUE : FALSE; + extracted_link = current; + extracted_link->next = NULL; //for safety + current = NULL; + return extracted_link; +} + + +/*********************************************************************** + * ELIST_ITERATOR::move_to_first() + * + * Move current so that it is set to the start of the list. + * Return data just in case anyone wants it. + **********************************************************************/ + +inline ELIST_LINK *ELIST_ITERATOR::move_to_first() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::move_to_first", ABORT, NULL); +#endif + + current = list->First(); + prev = list->last; + next = current ? current->next : NULL; + return current; +} + + +/*********************************************************************** + * ELIST_ITERATOR::mark_cycle_pt() + * + * Remember the current location so that we can tell whether we've returned + * to this point later. + * + * If the current point is deleted either now, or in the future, the cycle + * point will be set to the next item which is set to current. This could be + * by a forward, add_after_then_move or add_after_then_move. + **********************************************************************/ + +inline void ELIST_ITERATOR::mark_cycle_pt() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::mark_cycle_pt", ABORT, NULL); +#endif + + if (current) + cycle_pt = current; + else + ex_current_was_cycle_pt = TRUE; + started_cycling = FALSE; +} + + +/*********************************************************************** + * ELIST_ITERATOR::at_first() + * + * Are we at the start of the list? + * + **********************************************************************/ + +inline bool ELIST_ITERATOR::at_first() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::at_first", ABORT, NULL); +#endif + + //we're at a deleted + return ((list->empty()) || (current == list->First()) || ((current == NULL) && + (prev == list->last) && //NON-last pt between + !ex_current_was_last)); //first and last +} + + +/*********************************************************************** + * ELIST_ITERATOR::at_last() + * + * Are we at the end of the list? + * + **********************************************************************/ + +inline bool ELIST_ITERATOR::at_last() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::at_last", ABORT, NULL); +#endif + + //we're at a deleted + return ((list->empty()) || (current == list->last) || ((current == NULL) && + (prev == list->last) && //last point between + ex_current_was_last)); //first and last +} + + +/*********************************************************************** + * ELIST_ITERATOR::cycled_list() + * + * Have we returned to the cycle_pt since it was set? + * + **********************************************************************/ + +inline bool ELIST_ITERATOR::cycled_list() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::cycled_list", ABORT, NULL); +#endif + + return ((list->empty()) || ((current == cycle_pt) && started_cycling)); + +} + + +/*********************************************************************** + * ELIST_ITERATOR::length() + * + * Return the length of the list + * + **********************************************************************/ + +inline inT32 ELIST_ITERATOR::length() { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::length", ABORT, NULL); +#endif + + return list->length(); +} + + +/*********************************************************************** + * ELIST_ITERATOR::sort() + * + * Sort the elements of the list, then reposition at the start. + * + **********************************************************************/ + +inline void +ELIST_ITERATOR::sort( //sort elements + int comparator( //comparison routine + const void *, const void *)) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::sort", ABORT, NULL); +#endif + + list->sort(comparator); + move_to_first(); +} + + +/*********************************************************************** + * ELIST_ITERATOR::add_to_end + * + * Add a new element to the end of the list without moving the iterator. + * This is provided because a single linked list cannot move to the last as + * the iterator couldn't set its prev pointer. Adding to the end is + * essential for implementing + queues. +**********************************************************************/ + +inline void ELIST_ITERATOR::add_to_end( // element to add + ELIST_LINK *new_element) { +#ifndef NDEBUG + if (!list) + NO_LIST.error("ELIST_ITERATOR::add_to_end", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error("ELIST_ITERATOR::add_to_end", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error("ELIST_ITERATOR::add_to_end", ABORT, NULL); +#endif + + if (this->at_last()) { + this->add_after_stay_put(new_element); + } + else { + if (this->at_first()) { + this->add_before_stay_put(new_element); + list->last = new_element; + } + else { //Iteratr is elsewhere + new_element->next = list->last->next; + list->last->next = new_element; + list->last = new_element; + } + } +} + + +/*********************************************************************** + ******************** MACROS ************************************** + ***********************************************************************/ + + /*********************************************************************** + QUOTE_IT MACRO DEFINITION + =========================== + Replace with "". may be an arbitrary number of tokens + ***********************************************************************/ + +#define QUOTE_IT( parm ) #parm + + /*********************************************************************** + ELISTIZE( CLASSNAME ) MACRO + ============================ + + CLASSNAME is assumed to be the name of a class which has a baseclass of + ELIST_LINK. + + NOTE: Because we don't use virtual functions in the list code, the list code + will NOT work correctly for classes derived from this. + + The macros generate: + - An element deletion function: CLASSNAME##_zapper + - An E_LIST subclass: CLASSNAME##_LIST + - An E_LIST_ITERATOR subclass: CLASSNAME##_IT + + NOTE: Generated names are DELIBERATELY designed to clash with those for + ELIST2IZE but NOT with those for CLISTIZE and CLIST2IZE + + Two macros are provided: ELISTIZE and ELISTIZEH. + The ...IZEH macros just define the class names for use in .h files + The ...IZE macros define the code use in .c files + ***********************************************************************/ + + /*********************************************************************** + ELISTIZEH( CLASSNAME ) MACRO + + ELISTIZEH is a concatenation of 3 fragments ELISTIZEH_A, ELISTIZEH_B and + ELISTIZEH_C. + ***********************************************************************/ + +#define ELISTIZEH_A(CLASSNAME) \ + \ +extern DLLSYM void CLASSNAME##_zapper(ELIST_LINK* link); + +#define ELISTIZEH_B(CLASSNAME) \ + \ +/*********************************************************************** \ +* CLASS - CLASSNAME##_LIST \ +* \ +* List class for class CLASSNAME \ +* \ +**********************************************************************/ \ + \ +class DLLSYM CLASSNAME##_LIST : public ELIST { \ + public: \ + CLASSNAME##_LIST():ELIST() {} \ + \ + void clear() { /* delete elements */\ + ELIST::internal_clear(&CLASSNAME##_zapper); \ + } \ + \ + ~CLASSNAME##_LIST() { \ + clear(); \ + } \ + \ + /* Become a deep copy of src_list*/ \ + void deep_copy(const CLASSNAME##_LIST* src_list, \ + CLASSNAME* (*copier)(const CLASSNAME*)); \ + \ +private: \ + /* Prevent assign and copy construction. */ \ + CLASSNAME##_LIST(const CLASSNAME##_LIST&) { \ + DONT_CONSTRUCT_LIST_BY_COPY.error(QUOTE_IT(CLASSNAME##_LIST), ABORT, NULL);\ + } \ + void operator=(const CLASSNAME##_LIST&) { \ + DONT_ASSIGN_LISTS.error(QUOTE_IT(CLASSNAME##_LIST), ABORT, NULL ); \ + } \ + +#define ELISTIZEH_C( CLASSNAME ) \ +}; \ + \ + \ + \ +/*********************************************************************** \ +* CLASS - CLASSNAME##_IT \ +* \ +* Iterator class for class CLASSNAME##_LIST \ +* \ +* Note: We don't need to coerce pointers to member functions input \ +* parameters as these are automatically converted to the type of the base \ +* type. ("A ptr to a class may be converted to a pointer to a public base \ +* class of that class") \ +**********************************************************************/ \ + \ +class DLLSYM CLASSNAME##_IT : public ELIST_ITERATOR { \ + public: \ + CLASSNAME##_IT():ELIST_ITERATOR(){} \ + \ + /* TODO(rays) This constructor should be explicit, but that means changing \ + hundreds of incorrect initializations of iterators that use = over () */ \ + CLASSNAME##_IT(CLASSNAME##_LIST* list) : ELIST_ITERATOR(list) {} \ + \ + CLASSNAME* data() { \ + return reinterpret_cast(ELIST_ITERATOR::data()); \ + } \ + \ + CLASSNAME* data_relative(inT8 offset) { \ + return reinterpret_cast(ELIST_ITERATOR::data_relative(offset));\ + } \ + \ + CLASSNAME* forward() { \ + return reinterpret_cast(ELIST_ITERATOR::forward()); \ + } \ + \ + CLASSNAME* extract() { \ + return reinterpret_cast(ELIST_ITERATOR::extract()); \ + } \ + \ + CLASSNAME* move_to_first() { \ + return reinterpret_cast(ELIST_ITERATOR::move_to_first()); \ + } \ + \ + CLASSNAME* move_to_last() { \ + return reinterpret_cast(ELIST_ITERATOR::move_to_last()); \ + } \ +}; + +#define ELISTIZEH( CLASSNAME ) \ + \ +ELISTIZEH_A( CLASSNAME ) \ + \ +ELISTIZEH_B( CLASSNAME ) \ + \ +ELISTIZEH_C( CLASSNAME ) + + + /*********************************************************************** + ELISTIZE( CLASSNAME ) MACRO + ***********************************************************************/ + +#define ELISTIZE(CLASSNAME) \ + \ + /*********************************************************************** \ + * CLASSNAME##_zapper \ + * \ + * A function which can delete a CLASSNAME element. This is passed to the \ + * generic clear list member function so that when a list is cleared the \ + * elements on the list are properly destroyed from the base class, even \ + * though we don't use a virtual destructor function. \ + **********************************************************************/ \ + \ + DLLSYM void CLASSNAME##_zapper(ELIST_LINK *link) { \ + delete reinterpret_cast(link); \ + } \ + \ + /* Become a deep copy of src_list*/ \ + void CLASSNAME##_LIST::deep_copy(const CLASSNAME##_LIST *src_list, \ + CLASSNAME *(*copier)(const CLASSNAME *)) { \ + CLASSNAME##_IT from_it(const_cast(src_list)); \ + CLASSNAME##_IT to_it(this); \ + \ + for (from_it.mark_cycle_pt(); !from_it.cycled_list(); from_it.forward()) \ + to_it.add_after_then_move((*copier)(from_it.data())); \ + } + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/elst2.cpp b/3rdparty/hgOCR/include/ccutil/elst2.cpp new file mode 100644 index 00000000..0d4960ed --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/elst2.cpp @@ -0,0 +1,482 @@ +/********************************************************************** + * File: elst2.c (Formerly elist2.c) + * Description: Doubly linked embedded list code not in the include file. + * Author: Phil Cheatle + * Created: Wed Jan 23 11:04:47 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include "host.h" +#include "elst2.h" + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: ELIST2 + * ================================= + **********************************************************************/ + +/*********************************************************************** + * ELIST2::internal_clear + * + * Used by the destructor and the "clear" member function of derived list + * classes to destroy all the elements on the list. + * The calling function passes a "zapper" function which can be called to + * delete each element of the list, regardless of its derived type. This + * technique permits a generic clear function to destroy elements of + * different derived types correctly, without requiring virtual functions and + * the consequential memory overhead. + **********************************************************************/ + +void +ELIST2::internal_clear ( //destroy all links +void (*zapper) (ELIST2_LINK *)) { + //ptr to zapper functn + ELIST2_LINK *ptr; + ELIST2_LINK *next; + + if (!empty ()) { + ptr = last->next; //set to first + last->next = NULL; //break circle + last = NULL; //set list empty + while (ptr) { + next = ptr->next; + zapper(ptr); + ptr = next; + } + } +} + +/*********************************************************************** + * ELIST2::assign_to_sublist + * + * The list is set to a sublist of another list. "This" list must be empty + * before this function is invoked. The two iterators passed must refer to + * the same list, different from "this" one. The sublist removed is the + * inclusive list from start_it's current position to end_it's current + * position. If this range passes over the end of the source list then the + * source list has its end set to the previous element of start_it. The + * extracted sublist is unaffected by the end point of the source list, its + * end point is always the end_it position. + **********************************************************************/ + +void ELIST2::assign_to_sublist( //to this list + ELIST2_ITERATOR *start_it, //from list start + ELIST2_ITERATOR *end_it) { //from list end + const ERRCODE LIST_NOT_EMPTY = + "Destination list must be empty before extracting a sublist"; + + if (!empty ()) + LIST_NOT_EMPTY.error ("ELIST2.assign_to_sublist", ABORT, NULL); + + last = start_it->extract_sublist (end_it); +} + +/*********************************************************************** + * ELIST2::length + * + * Return count of elements on list + **********************************************************************/ + +inT32 ELIST2::length() const { // count elements + ELIST2_ITERATOR it(const_cast(this)); + inT32 count = 0; + + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) + count++; + return count; +} + +/*********************************************************************** + * ELIST2::sort + * + * Sort elements on list + * NB If you don't like the const declarations in the comparator, coerce yours: + * ( int (*)(const void *, const void *) + **********************************************************************/ + +void +ELIST2::sort ( //sort elements +int comparator ( //comparison routine +const void *, const void *)) { + ELIST2_ITERATOR it(this); + inT32 count; + ELIST2_LINK **base; //ptr array to sort + ELIST2_LINK **current; + inT32 i; + + /* Allocate an array of pointers, one per list element */ + count = length (); + base = (ELIST2_LINK **) malloc (count * sizeof (ELIST2_LINK *)); + + /* Extract all elements, putting the pointers in the array */ + current = base; + for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { + *current = it.extract (); + current++; + } + + /* Sort the pointer array */ + qsort ((char *) base, count, sizeof (*base), comparator); + + /* Rebuild the list from the sorted pointers */ + current = base; + for (i = 0; i < count; i++) { + it.add_to_end (*current); + current++; + } + free(base); +} + +// Assuming list has been sorted already, insert new_link to +// keep the list sorted according to the same comparison function. +// Comparison function is the same as used by sort, i.e. uses double +// indirection. Time is O(1) to add to beginning or end. +// Time is linear to add pre-sorted items to an empty list. +void ELIST2::add_sorted(int comparator(const void*, const void*), + ELIST2_LINK* new_link) { + // Check for adding at the end. + if (last == NULL || comparator(&last, &new_link) < 0) { + if (last == NULL) { + new_link->next = new_link; + new_link->prev = new_link; + } else { + new_link->next = last->next; + new_link->prev = last; + last->next = new_link; + new_link->next->prev = new_link; + } + last = new_link; + } else { + // Need to use an iterator. + ELIST2_ITERATOR it(this); + for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { + ELIST2_LINK* link = it.data(); + if (comparator(&link, &new_link) > 0) + break; + } + if (it.cycled_list()) + it.add_to_end(new_link); + else + it.add_before_then_move(new_link); + } +} + +/*********************************************************************** + * MEMBER FUNCTIONS OF CLASS: ELIST2_ITERATOR + * ========================================== + **********************************************************************/ + +/*********************************************************************** + * ELIST2_ITERATOR::forward + * + * Move the iterator to the next element of the list. + * REMEMBER: ALL LISTS ARE CIRCULAR. + **********************************************************************/ + +ELIST2_LINK *ELIST2_ITERATOR::forward() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::forward", ABORT, NULL); + #endif + if (list->empty ()) + return NULL; + + if (current) { //not removed so + //set previous + prev = current; + started_cycling = TRUE; + // In case next is deleted by another iterator, get it from the current. + current = current->next; + } + else { + if (ex_current_was_cycle_pt) + cycle_pt = next; + current = next; + } + next = current->next; + + #ifndef NDEBUG + if (!current) + NULL_DATA.error ("ELIST2_ITERATOR::forward", ABORT, NULL); + if (!next) + NULL_NEXT.error ("ELIST2_ITERATOR::forward", ABORT, + "This is: %p Current is: %p", this, current); + #endif + return current; +} + +/*********************************************************************** + * ELIST2_ITERATOR::backward + * + * Move the iterator to the previous element of the list. + * REMEMBER: ALL LISTS ARE CIRCULAR. + **********************************************************************/ + +ELIST2_LINK *ELIST2_ITERATOR::backward() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::backward", ABORT, NULL); + #endif + if (list->empty ()) + return NULL; + + if (current) { //not removed so + //set previous + next = current; + started_cycling = TRUE; + // In case prev is deleted by another iterator, get it from current. + current = current->prev; + } else { + if (ex_current_was_cycle_pt) + cycle_pt = prev; + current = prev; + } + prev = current->prev; + + #ifndef NDEBUG + if (!current) + NULL_DATA.error ("ELIST2_ITERATOR::backward", ABORT, NULL); + if (!prev) + NULL_PREV.error ("ELIST2_ITERATOR::backward", ABORT, + "This is: %p Current is: %p", this, current); + #endif + return current; +} + +/*********************************************************************** + * ELIST2_ITERATOR::data_relative + * + * Return the data pointer to the element "offset" elements from current. + * (This function can't be INLINEd because it contains a loop) + **********************************************************************/ + +ELIST2_LINK *ELIST2_ITERATOR::data_relative( //get data + or - .. + inT8 offset) { //offset from current + ELIST2_LINK *ptr; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL); + #endif + + if (offset < 0) + for (ptr = current ? current : next; offset++ < 0; ptr = ptr->prev); + else + for (ptr = current ? current : prev; offset-- > 0; ptr = ptr->next); + + #ifndef NDEBUG + if (!ptr) + NULL_DATA.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL); + #endif + + return ptr; +} + +/*********************************************************************** + * ELIST2_ITERATOR::exchange() + * + * Given another iterator, whose current element is a different element on + * the same list list OR an element of another list, exchange the two current + * elements. On return, each iterator points to the element which was the + * other iterators current on entry. + * (This function hasn't been in-lined because its a bit big!) + **********************************************************************/ + +void ELIST2_ITERATOR::exchange( //positions of 2 links + ELIST2_ITERATOR *other_it) { //other iterator + const ERRCODE DONT_EXCHANGE_DELETED = + "Can't exchange deleted elements of lists"; + + ELIST2_LINK *old_current; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::exchange", ABORT, NULL); + if (!other_it) + BAD_PARAMETER.error ("ELIST2_ITERATOR::exchange", ABORT, "other_it NULL"); + if (!(other_it->list)) + NO_LIST.error ("ELIST2_ITERATOR::exchange", ABORT, "other_it"); + #endif + + /* Do nothing if either list is empty or if both iterators reference the same + link */ + + if ((list->empty ()) || + (other_it->list->empty ()) || (current == other_it->current)) + return; + + /* Error if either current element is deleted */ + + if (!current || !other_it->current) + DONT_EXCHANGE_DELETED.error ("ELIST2_ITERATOR.exchange", ABORT, NULL); + + /* Now handle the 4 cases: doubleton list; non-doubleton adjacent elements + (other before this); non-doubleton adjacent elements (this before other); + non-adjacent elements. */ + + //adjacent links + if ((next == other_it->current) || + (other_it->next == current)) { + //doubleton list + if ((next == other_it->current) && + (other_it->next == current)) { + prev = next = current; + other_it->prev = other_it->next = other_it->current; + } + else { //non-doubleton with + //adjacent links + //other before this + if (other_it->next == current) { + other_it->prev->next = current; + other_it->current->next = next; + other_it->current->prev = current; + current->next = other_it->current; + current->prev = other_it->prev; + next->prev = other_it->current; + + other_it->next = other_it->current; + prev = current; + } + else { //this before other + prev->next = other_it->current; + current->next = other_it->next; + current->prev = other_it->current; + other_it->current->next = current; + other_it->current->prev = prev; + other_it->next->prev = current; + + next = current; + other_it->prev = other_it->current; + } + } + } + else { //no overlap + prev->next = other_it->current; + current->next = other_it->next; + current->prev = other_it->prev; + next->prev = other_it->current; + other_it->prev->next = current; + other_it->current->next = next; + other_it->current->prev = prev; + other_it->next->prev = current; + } + + /* update end of list pointer when necessary (remember that the 2 iterators + may iterate over different lists!) */ + + if (list->last == current) + list->last = other_it->current; + if (other_it->list->last == other_it->current) + other_it->list->last = current; + + if (current == cycle_pt) + cycle_pt = other_it->cycle_pt; + if (other_it->current == other_it->cycle_pt) + other_it->cycle_pt = cycle_pt; + + /* The actual exchange - in all cases*/ + + old_current = current; + current = other_it->current; + other_it->current = old_current; +} + +/*********************************************************************** + * ELIST2_ITERATOR::extract_sublist() + * + * This is a private member, used only by ELIST2::assign_to_sublist. + * Given another iterator for the same list, extract the links from THIS to + * OTHER inclusive, link them into a new circular list, and return a + * pointer to the last element. + * (Can't inline this function because it contains a loop) + **********************************************************************/ + +ELIST2_LINK *ELIST2_ITERATOR::extract_sublist( //from this current + ELIST2_ITERATOR *other_it) { //to other current + #ifndef NDEBUG + const ERRCODE BAD_EXTRACTION_PTS = + "Can't extract sublist from points on different lists"; + const ERRCODE DONT_EXTRACT_DELETED = + "Can't extract a sublist marked by deleted points"; + #endif + const ERRCODE BAD_SUBLIST = "Can't find sublist end point in original list"; + + ELIST2_ITERATOR temp_it = *this; + ELIST2_LINK *end_of_new_list; + + #ifndef NDEBUG + if (!other_it) + BAD_PARAMETER.error ("ELIST2_ITERATOR::extract_sublist", ABORT, + "other_it NULL"); + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::extract_sublist", ABORT, NULL); + if (list != other_it->list) + BAD_EXTRACTION_PTS.error ("ELIST2_ITERATOR.extract_sublist", ABORT, NULL); + if (list->empty ()) + EMPTY_LIST.error ("ELIST2_ITERATOR::extract_sublist", ABORT, NULL); + + if (!current || !other_it->current) + DONT_EXTRACT_DELETED.error ("ELIST2_ITERATOR.extract_sublist", ABORT, + NULL); + #endif + + ex_current_was_last = other_it->ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; + other_it->ex_current_was_cycle_pt = FALSE; + + temp_it.mark_cycle_pt (); + do { //walk sublist + if (temp_it.cycled_list()) // can't find end pt + BAD_SUBLIST.error ("ELIST2_ITERATOR.extract_sublist", ABORT, NULL); + + if (temp_it.at_last ()) { + list->last = prev; + ex_current_was_last = other_it->ex_current_was_last = TRUE; + } + + if (temp_it.current == cycle_pt) + ex_current_was_cycle_pt = TRUE; + + if (temp_it.current == other_it->cycle_pt) + other_it->ex_current_was_cycle_pt = TRUE; + + temp_it.forward (); + } + //do INCLUSIVE list + while (temp_it.prev != other_it->current); + + //circularise sublist + other_it->current->next = current; + //circularise sublist + current->prev = other_it->current; + end_of_new_list = other_it->current; + + //sublist = whole list + if (prev == other_it->current) { + list->last = NULL; + prev = current = next = NULL; + other_it->prev = other_it->current = other_it->next = NULL; + } + else { + prev->next = other_it->next; + other_it->next->prev = prev; + + current = other_it->current = NULL; + next = other_it->next; + other_it->prev = prev; + } + return end_of_new_list; +} diff --git a/3rdparty/hgOCR/include/ccutil/elst2.h b/3rdparty/hgOCR/include/ccutil/elst2.h new file mode 100644 index 00000000..bf078fbd --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/elst2.h @@ -0,0 +1,989 @@ +/********************************************************************** + * File: elst2.h (Formerly elist2.h) + * Description: Double linked embedded list module include file. + * Author: Phil Cheatle + * Created: Wed Jan 23 11:04:47 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef ELST2_H +#define ELST2_H + +#include +#include "host.h" +#include "serialis.h" +#include "lsterr.h" + +class ELIST2_ITERATOR; + +/********************************************************************** +DESIGN NOTE +=========== + +It would probably be possible to implement the ELIST2 classes as derived +classes from ELIST. I haven't done this because: + +a) I think it would be harder to understand the code +(Though the problem with not inheriting is that changes to ELIST must be + reflected in ELIST2 and vice versa) + +b) Most of the code is inline so: +i) The duplication in source does not affect the run time code size - the + code is copied inline anyway! + + ii) The compiler should have a bit less work to do! +**********************************************************************/ + +/********************************************************************** + * CLASS - ELIST2_LINK + * + * Generic link class for doubly linked lists with embedded links + * + * Note: No destructor - elements are assumed to be destroyed EITHER after + * they have been extracted from a list OR by the ELIST2 destructor which + * walks the list. + **********************************************************************/ + +class DLLSYM ELIST2_LINK +{ + friend class ELIST2_ITERATOR; + friend class ELIST2; + + ELIST2_LINK *prev; + ELIST2_LINK *next; + + public: + ELIST2_LINK() { //constructor + prev = next = NULL; + } + + ELIST2_LINK( // copy constructor + const ELIST2_LINK &) { // don't copy link + prev = next = NULL; + } + + void operator=( // don't copy links + const ELIST2_LINK &) { + prev = next = NULL; + } +}; + +/********************************************************************** + * CLASS - ELIST2 + * + * Generic list class for doubly linked lists with embedded links + **********************************************************************/ + +class DLLSYM ELIST2 +{ + friend class ELIST2_ITERATOR; + + ELIST2_LINK *last; //End of list + //(Points to head) + ELIST2_LINK *First() { // return first + return last ? last->next : NULL; + } + + public: + ELIST2() { //constructor + last = NULL; + } + + void internal_clear ( //destroy all links + void (*zapper) (ELIST2_LINK *)); + //ptr to zapper functn + + bool empty() const { //is list empty? + return !last; + } + + bool singleton() const { + return last ? (last == last->next) : false; + } + + void shallow_copy( //dangerous!! + ELIST2 *from_list) { //beware destructors!! + last = from_list->last; + } + + //ptr to copier functn + void internal_deep_copy (ELIST2_LINK * (*copier) (ELIST2_LINK *), + const ELIST2 * list); //list being copied + + void assign_to_sublist( //to this list + ELIST2_ITERATOR *start_it, //from list start + ELIST2_ITERATOR *end_it); //from list end + + inT32 length() const; // # elements in list + + void sort ( //sort elements + int comparator ( //comparison routine + const void *, const void *)); + + // Assuming list has been sorted already, insert new_link to + // keep the list sorted according to the same comparison function. + // Comparison function is the same as used by sort, i.e. uses double + // indirection. Time is O(1) to add to beginning or end. + // Time is linear to add pre-sorted items to an empty list. + void add_sorted(int comparator(const void*, const void*), + ELIST2_LINK* new_link); + +}; + +/*********************************************************************** + * CLASS - ELIST2_ITERATOR + * + * Generic iterator class for doubly linked lists with embedded + *links + **********************************************************************/ + +class DLLSYM ELIST2_ITERATOR +{ + friend void ELIST2::assign_to_sublist(ELIST2_ITERATOR *, ELIST2_ITERATOR *); + + ELIST2 *list; //List being iterated + ELIST2_LINK *prev; //prev element + ELIST2_LINK *current; //current element + ELIST2_LINK *next; //next element + BOOL8 ex_current_was_last; //current extracted + //was end of list + BOOL8 ex_current_was_cycle_pt; //current extracted + //was cycle point + ELIST2_LINK *cycle_pt; //point we are cycling + //the list to. + BOOL8 started_cycling; //Have we moved off + //the start? + + ELIST2_LINK *extract_sublist( //from this current... + ELIST2_ITERATOR *other_it); //to other current + + public: + ELIST2_ITERATOR() { //constructor + list = NULL; + } //unassigned list + + ELIST2_ITERATOR( //constructor + ELIST2 *list_to_iterate); + + void set_to_list( //change list + ELIST2 *list_to_iterate); + + void add_after_then_move( //add after current & + ELIST2_LINK *new_link); //move to new + + void add_after_stay_put( //add after current & + ELIST2_LINK *new_link); //stay at current + + void add_before_then_move( //add before current & + ELIST2_LINK *new_link); //move to new + + void add_before_stay_put( //add before current & + ELIST2_LINK *new_link); //stay at current + + void add_list_after( //add a list & + ELIST2 *list_to_add); //stay at current + + void add_list_before( //add a list & + ELIST2 *list_to_add); //move to it 1st item + + ELIST2_LINK *data() { //get current data + #ifndef NDEBUG + if (!current) + NULL_DATA.error ("ELIST2_ITERATOR::data", ABORT, NULL); + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::data", ABORT, NULL); + #endif + return current; + } + + ELIST2_LINK *data_relative( //get data + or - ... + inT8 offset); //offset from current + + ELIST2_LINK *forward(); //move to next element + + ELIST2_LINK *backward(); //move to prev element + + ELIST2_LINK *extract(); //remove from list + + //go to start of list + ELIST2_LINK *move_to_first(); + + ELIST2_LINK *move_to_last(); //go to end of list + + void mark_cycle_pt(); //remember current + + BOOL8 empty() { //is list empty? + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::empty", ABORT, NULL); + #endif + return list->empty (); + } + + BOOL8 current_extracted() { //current extracted? + return !current; + } + + BOOL8 at_first(); //Current is first? + + BOOL8 at_last(); //Current is last? + + BOOL8 cycled_list(); //Completed a cycle? + + void add_to_end( // add at end & + ELIST2_LINK *new_link); // don't move + + void exchange( //positions of 2 links + ELIST2_ITERATOR *other_it); //other iterator + + inT32 length(); //# elements in list + + void sort ( //sort elements + int comparator ( //comparison routine + const void *, const void *)); + +}; + +/*********************************************************************** + * ELIST2_ITERATOR::set_to_list + * + * (Re-)initialise the iterator to point to the start of the list_to_iterate + * over. + **********************************************************************/ + +inline void ELIST2_ITERATOR::set_to_list( //change list + ELIST2 *list_to_iterate) { + #ifndef NDEBUG + if (!list_to_iterate) + BAD_PARAMETER.error ("ELIST2_ITERATOR::set_to_list", ABORT, + "list_to_iterate is NULL"); + #endif + + list = list_to_iterate; + prev = list->last; + current = list->First (); + next = current ? current->next : NULL; + cycle_pt = NULL; //await explicit set + started_cycling = FALSE; + ex_current_was_last = FALSE; + ex_current_was_cycle_pt = FALSE; +} + +/*********************************************************************** + * ELIST2_ITERATOR::ELIST2_ITERATOR + * + * CONSTRUCTOR - set iterator to specified list; + **********************************************************************/ + +inline ELIST2_ITERATOR::ELIST2_ITERATOR(ELIST2 *list_to_iterate) { + set_to_list(list_to_iterate); +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_after_then_move + * + * Add a new element to the list after the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_after_then_move( // element to add + ELIST2_LINK *new_element) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_after_then_move", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_after_then_move", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error ("ELIST2_ITERATOR::add_after_then_move", ABORT, NULL); + #endif + + if (list->empty ()) { + new_element->next = new_element; + new_element->prev = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + new_element->next = next; + next->prev = new_element; + + if (current) { //not extracted + new_element->prev = current; + current->next = new_element; + prev = current; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + new_element->prev = prev; + prev->next = new_element; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_after_stay_put + * + * Add a new element to the list after the current element but do not move + * the iterator to the new element. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_after_stay_put( // element to add + ELIST2_LINK *new_element) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_after_stay_put", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_after_stay_put", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error ("ELIST2_ITERATOR::add_after_stay_put", ABORT, NULL); + #endif + + if (list->empty ()) { + new_element->next = new_element; + new_element->prev = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = FALSE; + current = NULL; + } + else { + new_element->next = next; + next->prev = new_element; + + if (current) { //not extracted + new_element->prev = current; + current->next = new_element; + if (prev == current) + prev = new_element; + if (current == list->last) + list->last = new_element; + } + else { //current extracted + new_element->prev = prev; + prev->next = new_element; + if (ex_current_was_last) { + list->last = new_element; + ex_current_was_last = FALSE; + } + } + next = new_element; + } +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_before_then_move + * + * Add a new element to the list before the current element and move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_before_then_move( // element to add + ELIST2_LINK *new_element) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_before_then_move", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_before_then_move", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error ("ELIST2_ITERATOR::add_before_then_move", ABORT, NULL); + #endif + + if (list->empty ()) { + new_element->next = new_element; + new_element->prev = new_element; + list->last = new_element; + prev = next = new_element; + } + else { + prev->next = new_element; + new_element->prev = prev; + + if (current) { //not extracted + new_element->next = current; + current->prev = new_element; + next = current; + } + else { //current extracted + new_element->next = next; + next->prev = new_element; + if (ex_current_was_last) + list->last = new_element; + if (ex_current_was_cycle_pt) + cycle_pt = new_element; + } + } + current = new_element; +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_before_stay_put + * + * Add a new element to the list before the current element but don't move the + * iterator to the new element. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_before_stay_put( // element to add + ELIST2_LINK *new_element) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_before_stay_put", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_before_stay_put", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error ("ELIST2_ITERATOR::add_before_stay_put", ABORT, NULL); + #endif + + if (list->empty ()) { + new_element->next = new_element; + new_element->prev = new_element; + list->last = new_element; + prev = next = new_element; + ex_current_was_last = TRUE; + current = NULL; + } + else { + prev->next = new_element; + new_element->prev = prev; + + if (current) { //not extracted + new_element->next = current; + current->prev = new_element; + if (next == current) + next = new_element; + } + else { //current extracted + new_element->next = next; + next->prev = new_element; + if (ex_current_was_last) + list->last = new_element; + } + prev = new_element; + } +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_list_after + * + * Insert another list to this list after the current element but don't move + *the + * iterator. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_list_after(ELIST2 *list_to_add) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_list_after", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_list_after", ABORT, + "list_to_add is NULL"); + #endif + + if (!list_to_add->empty ()) { + if (list->empty ()) { + list->last = list_to_add->last; + prev = list->last; + next = list->First (); + ex_current_was_last = TRUE; + current = NULL; + } + else { + if (current) { //not extracted + current->next = list_to_add->First (); + current->next->prev = current; + if (current == list->last) + list->last = list_to_add->last; + list_to_add->last->next = next; + next->prev = list_to_add->last; + next = current->next; + } + else { //current extracted + prev->next = list_to_add->First (); + prev->next->prev = prev; + if (ex_current_was_last) { + list->last = list_to_add->last; + ex_current_was_last = FALSE; + } + list_to_add->last->next = next; + next->prev = list_to_add->last; + next = prev->next; + } + } + list_to_add->last = NULL; + } +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_list_before + * + * Insert another list to this list before the current element. Move the + * iterator to the start of the inserted elements + * iterator. + **********************************************************************/ + +inline void ELIST2_ITERATOR::add_list_before(ELIST2 *list_to_add) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_list_before", ABORT, NULL); + if (!list_to_add) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_list_before", ABORT, + "list_to_add is NULL"); + #endif + + if (!list_to_add->empty ()) { + if (list->empty ()) { + list->last = list_to_add->last; + prev = list->last; + current = list->First (); + next = current->next; + ex_current_was_last = FALSE; + } + else { + prev->next = list_to_add->First (); + prev->next->prev = prev; + + if (current) { //not extracted + list_to_add->last->next = current; + current->prev = list_to_add->last; + } + else { //current extracted + list_to_add->last->next = next; + next->prev = list_to_add->last; + if (ex_current_was_last) + list->last = list_to_add->last; + if (ex_current_was_cycle_pt) + cycle_pt = prev->next; + } + current = prev->next; + next = current->next; + } + list_to_add->last = NULL; + } +} + +/*********************************************************************** + * ELIST2_ITERATOR::extract + * + * Do extraction by removing current from the list, returning it to the + * caller, but NOT updating the iterator. (So that any calling loop can do + * this.) The iterator's current points to NULL. If the extracted element + * is to be deleted, this is the callers responsibility. + **********************************************************************/ + +inline ELIST2_LINK *ELIST2_ITERATOR::extract() { + ELIST2_LINK *extracted_link; + + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::extract", ABORT, NULL); + if (!current) //list empty or + //element extracted + NULL_CURRENT.error ("ELIST2_ITERATOR::extract", + ABORT, NULL); + #endif + + if (list->singleton()) { + // Special case where we do need to change the iterator. + prev = next = list->last = NULL; + } else { + prev->next = next; //remove from list + next->prev = prev; + + if (current == list->last) { + list->last = prev; + ex_current_was_last = TRUE; + } else { + ex_current_was_last = FALSE; + } + } + // Always set ex_current_was_cycle_pt so an add/forward will work in a loop. + ex_current_was_cycle_pt = (current == cycle_pt) ? TRUE : FALSE; + extracted_link = current; + extracted_link->next = NULL; //for safety + extracted_link->prev = NULL; //for safety + current = NULL; + return extracted_link; +} + +/*********************************************************************** + * ELIST2_ITERATOR::move_to_first() + * + * Move current so that it is set to the start of the list. + * Return data just in case anyone wants it. + **********************************************************************/ + +inline ELIST2_LINK *ELIST2_ITERATOR::move_to_first() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::move_to_first", ABORT, NULL); + #endif + + current = list->First (); + prev = list->last; + next = current ? current->next : NULL; + return current; +} + +/*********************************************************************** + * ELIST2_ITERATOR::move_to_last() + * + * Move current so that it is set to the end of the list. + * Return data just in case anyone wants it. + **********************************************************************/ + +inline ELIST2_LINK *ELIST2_ITERATOR::move_to_last() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::move_to_last", ABORT, NULL); + #endif + + current = list->last; + prev = current ? current->prev : NULL; + next = current ? current->next : NULL; + return current; +} + +/*********************************************************************** + * ELIST2_ITERATOR::mark_cycle_pt() + * + * Remember the current location so that we can tell whether we've returned + * to this point later. + * + * If the current point is deleted either now, or in the future, the cycle + * point will be set to the next item which is set to current. This could be + * by a forward, add_after_then_move or add_after_then_move. + **********************************************************************/ + +inline void ELIST2_ITERATOR::mark_cycle_pt() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::mark_cycle_pt", ABORT, NULL); + #endif + + if (current) + cycle_pt = current; + else + ex_current_was_cycle_pt = TRUE; + started_cycling = FALSE; +} + +/*********************************************************************** + * ELIST2_ITERATOR::at_first() + * + * Are we at the start of the list? + * + **********************************************************************/ + +inline BOOL8 ELIST2_ITERATOR::at_first() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::at_first", ABORT, NULL); + #endif + + //we're at a deleted + return ((list->empty ()) || (current == list->First ()) || ((current == NULL) && + (prev == list->last) && //NON-last pt between + !ex_current_was_last)); //first and last +} + +/*********************************************************************** + * ELIST2_ITERATOR::at_last() + * + * Are we at the end of the list? + * + **********************************************************************/ + +inline BOOL8 ELIST2_ITERATOR::at_last() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::at_last", ABORT, NULL); + #endif + + //we're at a deleted + return ((list->empty ()) || (current == list->last) || ((current == NULL) && + (prev == list->last) && //last point between + ex_current_was_last)); //first and last +} + +/*********************************************************************** + * ELIST2_ITERATOR::cycled_list() + * + * Have we returned to the cycle_pt since it was set? + * + **********************************************************************/ + +inline BOOL8 ELIST2_ITERATOR::cycled_list() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::cycled_list", ABORT, NULL); + #endif + + return ((list->empty ()) || ((current == cycle_pt) && started_cycling)); + +} + +/*********************************************************************** + * ELIST2_ITERATOR::length() + * + * Return the length of the list + * + **********************************************************************/ + +inline inT32 ELIST2_ITERATOR::length() { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::length", ABORT, NULL); + #endif + + return list->length (); +} + +/*********************************************************************** + * ELIST2_ITERATOR::sort() + * + * Sort the elements of the list, then reposition at the start. + * + **********************************************************************/ + +inline void +ELIST2_ITERATOR::sort ( //sort elements +int comparator ( //comparison routine +const void *, const void *)) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::sort", ABORT, NULL); + #endif + + list->sort (comparator); + move_to_first(); +} + +/*********************************************************************** + * ELIST2_ITERATOR::add_to_end + * + * Add a new element to the end of the list without moving the iterator. + * This is provided because a single linked list cannot move to the last as + * the iterator couldn't set its prev pointer. Adding to the end is + * essential for implementing + queues. +**********************************************************************/ + +inline void ELIST2_ITERATOR::add_to_end( // element to add + ELIST2_LINK *new_element) { + #ifndef NDEBUG + if (!list) + NO_LIST.error ("ELIST2_ITERATOR::add_to_end", ABORT, NULL); + if (!new_element) + BAD_PARAMETER.error ("ELIST2_ITERATOR::add_to_end", ABORT, + "new_element is NULL"); + if (new_element->next) + STILL_LINKED.error ("ELIST2_ITERATOR::add_to_end", ABORT, NULL); + #endif + + if (this->at_last ()) { + this->add_after_stay_put (new_element); + } + else { + if (this->at_first ()) { + this->add_before_stay_put (new_element); + list->last = new_element; + } + else { //Iteratr is elsewhere + new_element->next = list->last->next; + new_element->prev = list->last; + list->last->next->prev = new_element; + list->last->next = new_element; + list->last = new_element; + } + } +} + + +/*********************************************************************** + QUOTE_IT MACRO DEFINITION + =========================== +Replace with "". may be an arbitrary number of tokens +***********************************************************************/ + +#define QUOTE_IT( parm ) #parm + +/*********************************************************************** + ELIST2IZE( CLASSNAME ) MACRO DEFINITION + ====================================== + +CLASSNAME is assumed to be the name of a class which has a baseclass of +ELIST2_LINK. + +NOTE: Because we don't use virtual functions in the list code, the list code +will NOT work correctly for classes derived from this. + +The macro generates: + - An element deletion function: CLASSNAME##_zapper + - An E_LIST2 subclass: CLASSNAME##_LIST + - An E_LIST2_ITERATOR subclass: + CLASSNAME##_IT + +NOTE: Generated names are DELIBERATELY designed to clash with those for +ELISTIZE but NOT with those for CLISTIZE and CLIST2IZE + +Two macros are provided: ELIST2IZE and ELIST2IZEH +The ...IZEH macros just define the class names for use in .h files +The ...IZE macros define the code use in .c files +***********************************************************************/ + +/*********************************************************************** + ELIST2IZEH( CLASSNAME ) MACRO + +ELIST2IZEH is a concatenation of 3 fragments ELIST2IZEH_A, ELIST2IZEH_B and +ELIST2IZEH_C. +***********************************************************************/ + +#define ELIST2IZEH_A(CLASSNAME) \ + \ + extern DLLSYM void CLASSNAME##_zapper( /*delete a link*/ \ + ELIST2_LINK *link); /*link to delete*/ + +#define ELIST2IZEH_B(CLASSNAME) \ + \ + /*********************************************************************** \ + * CLASS - \ + *CLASSNAME##_LIST \ + * \ + * List class for class \ + *CLASSNAME \ + * \ + **********************************************************************/ \ + \ + class DLLSYM CLASSNAME##_LIST : public ELIST2 { \ + public: \ + CLASSNAME##_LIST() : ELIST2() {} \ + /* constructor */ \ + \ + CLASSNAME##_LIST( /* don't construct */ \ + const CLASSNAME##_LIST &) /*by initial assign*/ \ + { \ + DONT_CONSTRUCT_LIST_BY_COPY.error(QUOTE_IT(CLASSNAME##_LIST), ABORT, \ + NULL); \ + } \ + \ + void clear() /* delete elements */ \ + { \ + ELIST2::internal_clear(&CLASSNAME##_zapper); \ + } \ + \ + ~CLASSNAME##_LIST() /* destructor */ \ + { \ + clear(); \ + } \ + \ + /* Become a deep copy of src_list*/ \ + void deep_copy(const CLASSNAME##_LIST *src_list, \ + CLASSNAME *(*copier)(const CLASSNAME *)); \ + \ + void operator=(/* prevent assign */ \ + const CLASSNAME##_LIST &) { \ + DONT_ASSIGN_LISTS.error(QUOTE_IT(CLASSNAME##_LIST), ABORT, NULL); \ + } + +#define ELIST2IZEH_C(CLASSNAME) \ + } \ + ; \ + \ + /*********************************************************************** \ + * CLASS - CLASSNAME##_IT \ + * \ + * Iterator class for class CLASSNAME##_LIST \ + * \ + * Note: We don't need to coerce pointers to member functions input \ + * parameters as these are automatically converted to the type of the base \ + * type. ("A ptr to a class may be converted to a pointer to a public base \ + * class of that class") \ + **********************************************************************/ \ + \ + class DLLSYM CLASSNAME##_IT : public ELIST2_ITERATOR { \ + public: \ + CLASSNAME##_IT() : ELIST2_ITERATOR() {} \ + \ + CLASSNAME##_IT(CLASSNAME##_LIST *list) : ELIST2_ITERATOR(list) {} \ + \ + CLASSNAME *data() { return (CLASSNAME *)ELIST2_ITERATOR::data(); } \ + \ + CLASSNAME *data_relative(inT8 offset) { \ + return (CLASSNAME *)ELIST2_ITERATOR::data_relative(offset); \ + } \ + \ + CLASSNAME *forward() { return (CLASSNAME *)ELIST2_ITERATOR::forward(); } \ + \ + CLASSNAME *backward() { return (CLASSNAME *)ELIST2_ITERATOR::backward(); } \ + \ + CLASSNAME *extract() { return (CLASSNAME *)ELIST2_ITERATOR::extract(); } \ + \ + CLASSNAME *move_to_first() { \ + return (CLASSNAME *)ELIST2_ITERATOR::move_to_first(); \ + } \ + \ + CLASSNAME *move_to_last() { \ + return (CLASSNAME *)ELIST2_ITERATOR::move_to_last(); \ + } \ + }; + +#define ELIST2IZEH(CLASSNAME) \ + \ + ELIST2IZEH_A(CLASSNAME) \ + \ + ELIST2IZEH_B(CLASSNAME) \ + \ + ELIST2IZEH_C(CLASSNAME) + +/*********************************************************************** + ELIST2IZE( CLASSNAME ) MACRO +***********************************************************************/ + +#define ELIST2IZE(CLASSNAME) \ + \ + /*********************************************************************** \ + * CLASSNAME##_zapper \ + * \ + * A function which can delete a CLASSNAME element. This is passed to the \ + * generic clear list member function so that when a list is cleared the \ + * elements on the list are properly destroyed from the base class, even \ + * though we don't use a virtual destructor function. \ + **********************************************************************/ \ + \ + DLLSYM void CLASSNAME##_zapper( /*delete a link*/ \ + ELIST2_LINK *link) /*link to delete*/ \ + { \ + delete (CLASSNAME *)link; \ + } \ + \ + /* Become a deep copy of src_list*/ \ + void CLASSNAME##_LIST::deep_copy(const CLASSNAME##_LIST *src_list, \ + CLASSNAME *(*copier)(const CLASSNAME *)) { \ + CLASSNAME##_IT from_it(const_cast(src_list)); \ + CLASSNAME##_IT to_it(this); \ + \ + for (from_it.mark_cycle_pt(); !from_it.cycled_list(); from_it.forward()) \ + to_it.add_after_then_move((*copier)(from_it.data())); \ + } + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/errcode.cpp b/3rdparty/hgOCR/include/ccutil/errcode.cpp new file mode 100644 index 00000000..42eaf871 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/errcode.cpp @@ -0,0 +1,91 @@ +/********************************************************************** + * File: errcode.c (Formerly error.c) + * Description: Generic error handler function + * Author: Ray Smith + * Created: Tue May 1 16:28:39 BST 1990 + * + * (C) Copyright 1989, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include +#include +#ifdef __UNIX__ +#include +#endif +#include "tprintf.h" +#include "errcode.h" + +const ERRCODE BADERRACTION = "Illegal error action"; +#define MAX_MSG 1024 + +/********************************************************************** + * error + * + * Print an error message and continue, exit or abort according to action. + * Makes use of error messages and numbers in a common place. + * + **********************************************************************/ +void ERRCODE::error( // handle error +const char *caller, // name of caller +TessErrorLogCode action, // action to take +const char *format, ... // special message +) const { + va_list args; // variable args + char msg[MAX_MSG]; + char *msgptr = msg; + + if (caller != NULL) + //name of caller + msgptr += sprintf (msgptr, "%s:", caller); + //actual message + msgptr += sprintf (msgptr, "Error:%s", message); + if (format != NULL) { + msgptr += sprintf (msgptr, ":"); + va_start(args, format); //variable list + #ifdef _WIN32 + //print remainder + msgptr += _vsnprintf (msgptr, MAX_MSG - 2 - (msgptr - msg), format, args); + msg[MAX_MSG - 2] = '\0'; //ensure termination + strcat (msg, "\n"); + #else + //print remainder + msgptr += vsprintf (msgptr, format, args); + //no specific + msgptr += sprintf (msgptr, "\n"); + #endif + va_end(args); + } + else + //no specific + msgptr += sprintf (msgptr, "\n"); + + // %s is needed here so msg is printed correctly! + fprintf(stderr, "%s", msg); + + int* p = NULL; + switch (action) { + case DBG: + case TESSLOG: + return; //report only + case TESSEXIT: + //err_exit(); + case ABORT: + // Create a deliberate segv as the stack trace is more useful that way. + if (!*p) + abort(); + default: + BADERRACTION.error ("error", ABORT, NULL); + } +} diff --git a/3rdparty/hgOCR/include/ccutil/errcode.h b/3rdparty/hgOCR/include/ccutil/errcode.h new file mode 100644 index 00000000..2f31a7b9 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/errcode.h @@ -0,0 +1,103 @@ +/********************************************************************** + * File: errcode.h (Formerly error.h) + * Description: Header file for generic error handler class + * Author: Ray Smith + * Created: Tue May 1 16:23:36 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef ERRCODE_H +#define ERRCODE_H + +#include "host.h" + +/*Control parameters for error()*/ +enum TessErrorLogCode { + DBG = -1, /*log without alert */ + TESSLOG = 0, /*alert user */ + TESSEXIT = 1, /*exit after erro */ + ABORT = 2 /*abort after error */ +}; + +/* Explicit Error Abort codes */ +#define NO_ABORT_CODE 0 +#define LIST_ABORT 1 +#define MEMORY_ABORT 2 +#define FILE_ABORT 3 + +/* Location of code at error codes Reserve 0..2 (status codes 0..23 for UNLV)*/ +#define LOC_UNUSED0 0 +#define LOC_UNUSED1 1 +#define LOC_UNUSED2 2 +#define LOC_INIT 3 +#define LOC_EDGE_PROG 4 +#define LOC_TEXT_ORD_ROWS 5 +#define LOC_TEXT_ORD_WORDS 6 +#define LOC_PASS1 7 +#define LOC_PASS2 8 +/* Reserve up to 8..13 for adding subloc 0/3 plus subsubloc 0/1/2 */ +#define LOC_FUZZY_SPACE 14 +/* Reserve up to 14..20 for adding subloc 0/3 plus subsubloc 0/1/2 */ +#define LOC_MM_ADAPT 21 +#define LOC_DOC_BLK_REJ 22 +#define LOC_WRITE_RESULTS 23 +#define LOC_ADAPTIVE 24 +/* DON'T DEFINE ANY LOCATION > 31 !!! */ + +/* Sub locatation determines whether pass2 was in normal mode or fix xht mode*/ +#define SUBLOC_NORM 0 +#define SUBLOC_FIX_XHT 3 + +/* Sub Sub locatation determines whether match_word_pass2 was in Tess + matcher, NN matcher or somewhere else */ + +#define SUBSUBLOC_OTHER 0 +#define SUBSUBLOC_TESS 1 +#define SUBSUBLOC_NN 2 + +class TESS_API ERRCODE { // error handler class + const char *message; // error message + public: + void error( // error print function + const char *caller, // function location + TessErrorLogCode action, // action to take + const char *format, ... // fprintf format + ) const; + ERRCODE(const char *string) { + message = string; + } // initialize with string +}; + +const ERRCODE ASSERT_FAILED = "Assert failed"; + +#define ASSERT_HOST(x) if (!(x)) \ + { \ + ASSERT_FAILED.error(#x, ABORT, "in file %s, line %d", \ + __FILE__, __LINE__); \ + } + +#define ASSERT_HOST_MSG(x, ...) \ + if (!(x)) { \ + tprintf(__VA_ARGS__); \ + ASSERT_FAILED.error(#x, ABORT, "in file %s, line %d", __FILE__, __LINE__); \ + } + +void signal_exit(int signal_code); + +void set_global_loc_code(int loc_code); + +void set_global_subloc_code(int loc_code); + +void set_global_subsubloc_code(int loc_code); +#endif diff --git a/3rdparty/hgOCR/include/ccutil/fileerr.h b/3rdparty/hgOCR/include/ccutil/fileerr.h new file mode 100644 index 00000000..d3b6993d --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/fileerr.h @@ -0,0 +1,34 @@ +/********************************************************************** + * File: fileerr.h (Formerly filerr.h) + * Description: Errors for file utilities. + * Author: Ray Smith + * Created: Tue Aug 14 15:45:16 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef FILEERR_H +#define FILEERR_H + +#include "errcode.h" + +const ERRCODE CANTOPENFILE = "Can't open file"; +const ERRCODE CANTCREATEFILE = "Can't create file"; +const ERRCODE CANTMAKEPIPE = "Can't create pipe"; +const ERRCODE CANTCONNECTPIPE = "Can't reconnect pipes to stdin/stdout"; +const ERRCODE READFAILED = "Read of file failed"; +const ERRCODE WRITEFAILED = "Write of file failed"; +const ERRCODE SELECTFAILED = "Select failed"; + +const ERRCODE EXECFAILED = "Could not exec new process"; +#endif diff --git a/3rdparty/hgOCR/include/ccutil/genericheap.h b/3rdparty/hgOCR/include/ccutil/genericheap.h new file mode 100644 index 00000000..ccf273b3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/genericheap.h @@ -0,0 +1,237 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: genericheap.h +// Description: Template heap class. +// Author: Ray Smith, based on Dan Johnson's original code. +// Created: Wed Mar 14 08:13:00 PDT 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "errcode.h" +#include "genericvector.h" + +#ifndef TESSERACT_CCUTIL_GENERICHEAP_H_ +#define TESSERACT_CCUTIL_GENERICHEAP_H_ + +namespace tesseract { + +// GenericHeap requires 1 template argument: +// Pair will normally be either KDPairInc or KDPairDec +// for some arbitrary Key and scalar, smart pointer, or non-ownership pointer +// Data type, according to whether a MIN heap or a MAX heap is desired, +// respectively. Using KDPtrPairInc or KDPtrPairDec, +// GenericHeap can also handle simple Data pointers and own them. +// If no additional data is required, Pair can also be a scalar, since +// GenericHeap doesn't look inside it except for operator<. +// +// The heap is stored as a packed binary tree in an array hosted by a +// GenericVector, with the invariant that the children of each node are +// both NOT Pair::operator< the parent node. KDPairInc defines Pair::operator< +// to use Key::operator< to generate a MIN heap and KDPairDec defines +// Pair::operator< to use Key::operator> to generate a MAX heap by reversing +// all the comparisons. +// See http://en.wikipedia.org/wiki/Heap_(data_structure) for more detail on +// the basic heap implementation. +// +// Insertion and removal are both O(log n) and, unlike the STL heap, an +// explicit Reshuffle function allows a node to be repositioned in time O(log n) +// after changing its value. +// +// Accessing the element for revaluation is a more complex matter, since the +// index and pointer can be changed arbitrarily by heap operations. +// Revaluation can be done by making the Data type in the Pair derived from or +// contain a DoublePtr as its first data element, making it possible to convert +// the pointer to a Pair using KDPairInc::RecastDataPointer. +template +class GenericHeap { + public: + GenericHeap() {} + // The initial size is only a GenericVector::reserve. It is not enforced as + // the size limit of the heap. Caller must implement their own enforcement. + explicit GenericHeap(int initial_size) { + heap_.reserve(initial_size); + } + + // Simple accessors. + bool empty() const { + return heap_.empty(); + } + int size() const { + return heap_.size(); + } + int size_reserved() const { + return heap_.size_reserved(); + } + void clear() { + // Clear truncates to 0 to keep the number reserved in tact. + heap_.truncate(0); + } + // Provides access to the underlying vector. + // Caution! any changes that modify the keys will invalidate the heap! + GenericVector* heap() { + return &heap_; + } + // Provides read-only access to an element of the underlying vector. + const Pair& get(int index) const { + return heap_[index]; + } + + // Add entry to the heap, keeping the smallest item at the top, by operator<. + // Note that *entry is used as the source of operator=, but it is non-const + // to allow for a smart pointer to be contained within. + // Time = O(log n). + void Push(Pair* entry) { + int hole_index = heap_.size(); + // Make a hole in the end of heap_ and sift it up to be the correct + // location for the new *entry. To avoid needing a default constructor + // for primitive types, and to allow for use of DoublePtr in the Pair + // somewhere, we have to incur a double copy here. + heap_.push_back(*entry); + *entry = heap_.back(); + hole_index = SiftUp(hole_index, *entry); + heap_[hole_index] = *entry; + } + + // Get the value of the top (smallest, defined by operator< ) element. + const Pair& PeekTop() const { + return heap_[0]; + } + // Get the value of the worst (largest, defined by operator< ) element. + const Pair& PeekWorst() const { return heap_[IndexOfWorst()]; } + + // Removes the top element of the heap. If entry is not NULL, the element + // is copied into *entry, otherwise it is discarded. + // Returns false if the heap was already empty. + // Time = O(log n). + bool Pop(Pair* entry) { + int new_size = heap_.size() - 1; + if (new_size < 0) + return false; // Already empty. + if (entry != NULL) + *entry = heap_[0]; + if (new_size > 0) { + // Sift the hole at the start of the heap_ downwards to match the last + // element. + Pair hole_pair = heap_[new_size]; + heap_.truncate(new_size); + int hole_index = SiftDown(0, hole_pair); + heap_[hole_index] = hole_pair; + } else { + heap_.truncate(new_size); + } + return true; + } + + // Removes the MAXIMUM element of the heap. (MIN from a MAX heap.) If entry is + // not NULL, the element is copied into *entry, otherwise it is discarded. + // Time = O(n). Returns false if the heap was already empty. + bool PopWorst(Pair* entry) { + int worst_index = IndexOfWorst(); + if (worst_index < 0) return false; // It cannot be empty! + // Extract the worst element from the heap, leaving a hole at worst_index. + if (entry != NULL) + *entry = heap_[worst_index]; + int heap_size = heap_.size() - 1; + if (heap_size > 0) { + // Sift the hole upwards to match the last element of the heap_ + Pair hole_pair = heap_[heap_size]; + int hole_index = SiftUp(worst_index, hole_pair); + heap_[hole_index] = hole_pair; + } + heap_.truncate(heap_size); + return true; + } + + // Returns the index of the worst element. Time = O(n/2). + int IndexOfWorst() const { + int heap_size = heap_.size(); + if (heap_size == 0) return -1; // It cannot be empty! + + // Find the maximum element. Its index is guaranteed to be greater than + // the index of the parent of the last element, since by the heap invariant + // the parent must be less than or equal to the children. + int worst_index = heap_size - 1; + int end_parent = ParentNode(worst_index); + for (int i = worst_index - 1; i > end_parent; --i) { + if (heap_[worst_index] < heap_[i]) worst_index = i; + } + return worst_index; + } + + // The pointed-to Pair has changed its key value, so the location of pair + // is reshuffled to maintain the heap invariant. + // Must be a valid pointer to an element of the heap_! + // Caution! Since GenericHeap is based on GenericVector, reallocs may occur + // whenever the vector is extended and elements may get shuffled by any + // Push or Pop operation. Therefore use this function only if Data in Pair is + // of type DoublePtr, derived (first) from DoublePtr, or has a DoublePtr as + // its first element. Reshuffles the heap to maintain the invariant. + // Time = O(log n). + void Reshuffle(Pair* pair) { + int index = pair - &heap_[0]; + Pair hole_pair = heap_[index]; + index = SiftDown(index, hole_pair); + index = SiftUp(index, hole_pair); + heap_[index] = hole_pair; + } + + private: + // A hole in the heap exists at hole_index, and we want to fill it with the + // given pair. SiftUp sifts the hole upward to the correct position and + // returns the destination index without actually putting pair there. + int SiftUp(int hole_index, const Pair& pair) { + int parent; + while (hole_index > 0 && pair < heap_[parent = ParentNode(hole_index)]) { + heap_[hole_index] = heap_[parent]; + hole_index = parent; + } + return hole_index; + } + + // A hole in the heap exists at hole_index, and we want to fill it with the + // given pair. SiftDown sifts the hole downward to the correct position and + // returns the destination index without actually putting pair there. + int SiftDown(int hole_index, const Pair& pair) { + int heap_size = heap_.size(); + int child; + while ((child = LeftChild(hole_index)) < heap_size) { + if (child + 1 < heap_size && heap_[child + 1] < heap_[child]) + ++child; + if (heap_[child] < pair) { + heap_[hole_index] = heap_[child]; + hole_index = child; + } else { + break; + } + } + return hole_index; + } + + // Functions to navigate the tree. Unlike the original implementation, we + // store the root at index 0. + int ParentNode(int index) const { + return (index + 1) / 2 - 1; + } + int LeftChild(int index) const { + return index * 2 + 1; + } + + private: + GenericVector heap_; +}; + +} // namespace tesseract + +#endif // TESSERACT_CCUTIL_GENERICHEAP_H_ diff --git a/3rdparty/hgOCR/include/ccutil/genericvector.h b/3rdparty/hgOCR/include/ccutil/genericvector.h new file mode 100644 index 00000000..f41fcc38 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/genericvector.h @@ -0,0 +1,1109 @@ +/////////////////////////////////////////////////////////////////////// +// File: genericvector.h +// Description: Generic vector class +// Author: Daria Antonova +// Created: Mon Jun 23 11:26:43 PDT 2008 +// +// (C) Copyright 2007, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// +// +#ifndef TESSERACT_CCUTIL_GENERICVECTOR_H_ +#define TESSERACT_CCUTIL_GENERICVECTOR_H_ + +#include +#include +#include + +#include "tesscallback.h" +#include "errcode.h" +#include "helpers.h" +#include "ndminx.h" +#include "serialis.h" +#include "strngs.h" + +// Use PointerVector below in preference to GenericVector, as that +// provides automatic deletion of pointers, [De]Serialize that works, and +// sort that works. +template +class GenericVector { + public: + GenericVector() : size_used_(0), size_reserved_(0), data_(NULL), + clear_cb_(NULL), compare_cb_(NULL) {} + + GenericVector(int size, T init_val) { + init(size); + init_to_size(size, init_val); + } + + // Copy + GenericVector(const GenericVector& other) { + this->init(other.size()); + this->operator+=(other); + } + GenericVector &operator+=(const GenericVector& other); + GenericVector &operator=(const GenericVector& other); + + ~GenericVector(); + + // Reserve some memory. + void reserve(int size); + // Double the size of the internal array. + void double_the_size(); + + // Resizes to size and sets all values to t. + void init_to_size(int size, T t); + // Resizes to size without any initialization. + void resize_no_init(int size) { + reserve(size); + size_used_ = size; + } + + // Return the size used. + int size() const { + return size_used_; + } + int size_reserved() const { + return size_reserved_; + } + + int length() const { + return size_used_; + } + + // Return true if empty. + bool empty() const { + return size_used_ == 0; + } + + // Return the object from an index. + T &get(int index) const; + T &back() const; + T &operator[](int index) const; + // Returns the last object and removes it. + T pop_back(); + + // Return the index of the T object. + // This method NEEDS a compare_callback to be passed to + // set_compare_callback. + int get_index(T object) const; + + // Return true if T is in the array + bool contains(T object) const; + + // Return true if the index is valid + T contains_index(int index) const; + + // Push an element in the end of the array + int push_back(T object); + void operator+=(T t); + + // Push an element in the end of the array if the same + // element is not already contained in the array. + int push_back_new(T object); + + // Push an element in the front of the array + // Note: This function is O(n) + int push_front(T object); + + // Set the value at the given index + void set(T t, int index); + + // Insert t at the given index, push other elements to the right. + void insert(T t, int index); + + // Removes an element at the given index and + // shifts the remaining elements to the left. + void remove(int index); + + // Truncates the array to the given size by removing the end. + // If the current size is less, the array is not expanded. + void truncate(int size) { + if (size < size_used_) + size_used_ = size; + } + + // Add a callback to be called to delete the elements when the array took + // their ownership. + void set_clear_callback(TessCallback1* cb); + + // Add a callback to be called to compare the elements when needed (contains, + // get_id, ...) + void set_compare_callback(TessResultCallback2* cb); + + // Clear the array, calling the clear callback function if any. + // All the owned callbacks are also deleted. + // If you don't want the callbacks to be deleted, before calling clear, set + // the callback to NULL. + void clear(); + + // Delete objects pointed to by data_[i] + void delete_data_pointers(); + + // This method clears the current object, then, does a shallow copy of + // its argument, and finally invalidates its argument. + // Callbacks are moved to the current object; + void move(GenericVector* from); + + // Read/Write the array to a file. This does _NOT_ read/write the callbacks. + // The callback given must be permanent since they will be called more than + // once. The given callback will be deleted at the end. + // If the callbacks are NULL, then the data is simply read/written using + // fread (and swapping)/fwrite. + // Returns false on error or if the callback returns false. + // DEPRECATED. Use [De]Serialize[Classes] instead. + bool write(FILE* f, TessResultCallback2* cb) const; + bool read(FILE* f, TessResultCallback3* cb, bool swap); + // Writes a vector of simple types to the given file. Assumes that bitwise + // read/write of T will work. Returns false in case of error. + // TODO(rays) Change all callers to use TFile and remove deprecated methods. + bool Serialize(FILE* fp) const; + bool Serialize(tesseract::TFile* fp) const; + // Reads a vector of simple types from the given file. Assumes that bitwise + // read/write will work with ReverseN according to sizeof(T). + // Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + bool DeSerialize(bool swap, tesseract::TFile* fp); + // Skips the deserialization of the vector. + static bool SkipDeSerialize(bool swap, tesseract::TFile* fp); + // Writes a vector of classes to the given file. Assumes the existence of + // bool T::Serialize(FILE* fp) const that returns false in case of error. + // Returns false in case of error. + bool SerializeClasses(FILE* fp) const; + bool SerializeClasses(tesseract::TFile* fp) const; + // Reads a vector of classes from the given file. Assumes the existence of + // bool T::Deserialize(bool swap, FILE* fp) that returns false in case of + // error. Also needs T::T() and T::T(constT&), as init_to_size is used in + // this function. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerializeClasses(bool swap, FILE* fp); + bool DeSerializeClasses(bool swap, tesseract::TFile* fp); + // Calls SkipDeSerialize on the elements of the vector. + static bool SkipDeSerializeClasses(bool swap, tesseract::TFile* fp); + + // Allocates a new array of double the current_size, copies over the + // information from data to the new location, deletes data and returns + // the pointed to the new larger array. + // This function uses memcpy to copy the data, instead of invoking + // operator=() for each element like double_the_size() does. + static T *double_the_size_memcpy(int current_size, T *data) { + T *data_new = new T[current_size * 2]; + memcpy(data_new, data, sizeof(T) * current_size); + delete[] data; + return data_new; + } + + // Reverses the elements of the vector. + void reverse() { + for (int i = 0; i < size_used_ / 2; ++i) + Swap(&data_[i], &data_[size_used_ - 1 - i]); + } + + // Sorts the members of this vector using the less than comparator (cmp_lt), + // which compares the values. Useful for GenericVectors to primitive types. + // Will not work so great for pointers (unless you just want to sort some + // pointers). You need to provide a specialization to sort_cmp to use + // your type. + void sort(); + + // Sort the array into the order defined by the qsort function comparator. + // The comparator function is as defined by qsort, ie. it receives pointers + // to two Ts and returns negative if the first element is to appear earlier + // in the result and positive if it is to appear later, with 0 for equal. + void sort(int (*comparator)(const void*, const void*)) { + qsort(data_, size_used_, sizeof(*data_), comparator); + } + + // Searches the array (assuming sorted in ascending order, using sort()) for + // an element equal to target and returns true if it is present. + // Use binary_search to get the index of target, or its nearest candidate. + bool bool_binary_search(const T& target) const { + int index = binary_search(target); + if (index >= size_used_) + return false; + return data_[index] == target; + } + // Searches the array (assuming sorted in ascending order, using sort()) for + // an element equal to target and returns the index of the best candidate. + // The return value is conceptually the largest index i such that + // data_[i] <= target or 0 if target < the whole vector. + // NOTE that this function uses operator> so really the return value is + // the largest index i such that data_[i] > target is false. + int binary_search(const T& target) const { + int bottom = 0; + int top = size_used_; + while (top - bottom > 1) { + int middle = (bottom + top) / 2; + if (data_[middle] > target) + top = middle; + else + bottom = middle; + } + return bottom; + } + + // Compact the vector by deleting elements using operator!= on basic types. + // The vector must be sorted. + void compact_sorted() { + if (size_used_ == 0) + return; + + // First element is in no matter what, hence the i = 1. + int last_write = 0; + for (int i = 1; i < size_used_; ++i) { + // Finds next unique item and writes it. + if (data_[last_write] != data_[i]) + data_[++last_write] = data_[i]; + } + // last_write is the index of a valid data cell, so add 1. + size_used_ = last_write + 1; + } + + // Compact the vector by deleting elements for which delete_cb returns + // true. delete_cb is a permanent callback and will be deleted. + void compact(TessResultCallback1* delete_cb) { + int new_size = 0; + int old_index = 0; + // Until the callback returns true, the elements stay the same. + while (old_index < size_used_ && !delete_cb->Run(old_index++)) + ++new_size; + // Now just copy anything else that gets false from delete_cb. + for (; old_index < size_used_; ++old_index) { + if (!delete_cb->Run(old_index)) { + data_[new_size++] = data_[old_index]; + } + } + size_used_ = new_size; + delete delete_cb; + } + + T dot_product(const GenericVector& other) const { + T result = static_cast(0); + for (int i = MIN(size_used_, other.size_used_) - 1; i >= 0; --i) + result += data_[i] * other.data_[i]; + return result; + } + + // Returns the index of what would be the target_index_th item in the array + // if the members were sorted, without actually sorting. Members are + // shuffled around, but it takes O(n) time. + // NOTE: uses operator< and operator== on the members. + int choose_nth_item(int target_index) { + // Make sure target_index is legal. + if (target_index < 0) + target_index = 0; // ensure legal + else if (target_index >= size_used_) + target_index = size_used_ - 1; + unsigned int seed = 1; + return choose_nth_item(target_index, 0, size_used_, &seed); + } + + // Swaps the elements with the given indices. + void swap(int index1, int index2) { + if (index1 != index2) { + T tmp = data_[index1]; + data_[index1] = data_[index2]; + data_[index2] = tmp; + } + } + // Returns true if all elements of *this are within the given range. + // Only uses operator< + bool WithinBounds(const T& rangemin, const T& rangemax) const { + for (int i = 0; i < size_used_; ++i) { + if (data_[i] < rangemin || rangemax < data_[i]) + return false; + } + return true; + } + + protected: + // Internal recursive version of choose_nth_item. + int choose_nth_item(int target_index, int start, int end, unsigned int* seed); + + // Init the object, allocating size memory. + void init(int size); + + // We are assuming that the object generally placed in thie + // vector are small enough that for efficiency it makes sense + // to start with a larger initial size. + static const int kDefaultVectorSize = 4; + inT32 size_used_; + inT32 size_reserved_; + T* data_; + TessCallback1* clear_cb_; + // Mutable because Run method is not const + mutable TessResultCallback2* compare_cb_; +}; + +namespace tesseract { + +// Function to read a GenericVector from a whole file. +// Returns false on failure. +typedef bool (*FileReader)(const STRING& filename, GenericVector* data); +// Function to write a GenericVector to a whole file. +// Returns false on failure. +typedef bool (*FileWriter)(const GenericVector& data, + const STRING& filename); +// The default FileReader loads the whole file into the vector of char, +// returning false on error. +inline bool LoadDataFromFile(const STRING& filename, + GenericVector* data) { + bool result = false; + FILE* fp = fopen(filename.string(), "rb"); + if (fp != NULL) { + fseek(fp, 0, SEEK_END); + size_t size = ftell(fp); + fseek(fp, 0, SEEK_SET); + if (size > 0) { + // reserve an extra byte in case caller wants to append a '\0' character + data->reserve(size + 1); + data->resize_no_init(size); + result = fread(&(*data)[0], 1, size, fp) == size; + } + fclose(fp); + } + return result; +} +// The default FileWriter writes the vector of char to the filename file, +// returning false on error. +inline bool SaveDataToFile(const GenericVector& data, + const STRING& filename) { + FILE* fp = fopen(filename.string(), "wb"); + if (fp == NULL) return false; + bool result = + static_cast(fwrite(&data[0], 1, data.size(), fp)) == data.size(); + fclose(fp); + return result; +} + +template +bool cmp_eq(T const & t1, T const & t2) { + return t1 == t2; +} + +// Used by sort() +// return < 0 if t1 < t2 +// return 0 if t1 == t2 +// return > 0 if t1 > t2 +template +int sort_cmp(const void* t1, const void* t2) { + const T* a = static_cast (t1); + const T* b = static_cast (t2); + if (*a < *b) { + return -1; + } else if (*b < *a) { + return 1; + } else { + return 0; + } +} + +// Used by PointerVector::sort() +// return < 0 if t1 < t2 +// return 0 if t1 == t2 +// return > 0 if t1 > t2 +template +int sort_ptr_cmp(const void* t1, const void* t2) { + const T* a = *reinterpret_cast(t1); + const T* b = *reinterpret_cast(t2); + if (*a < *b) { + return -1; + } else if (*b < *a) { + return 1; + } else { + return 0; + } +} + +// Subclass for a vector of pointers. Use in preference to GenericVector +// as it provides automatic deletion and correct serialization, with the +// corollary that all copy operations are deep copies of the pointed-to objects. +template +class PointerVector : public GenericVector { + public: + PointerVector() : GenericVector() { } + explicit PointerVector(int size) : GenericVector(size) { } + ~PointerVector() { + // Clear must be called here, even though it is called again by the base, + // as the base will call the wrong clear. + clear(); + } + // Copy must be deep, as the pointers will be automatically deleted on + // destruction. + PointerVector(const PointerVector& other) : GenericVector(other) { + this->init(other.size()); + this->operator+=(other); + } + PointerVector& operator+=(const PointerVector& other) { + this->reserve(this->size_used_ + other.size_used_); + for (int i = 0; i < other.size(); ++i) { + this->push_back(new T(*other.data_[i])); + } + return *this; + } + + PointerVector& operator=(const PointerVector& other) { + if (&other != this) { + this->truncate(0); + this->operator+=(other); + } + return *this; + } + + // Removes an element at the given index and + // shifts the remaining elements to the left. + void remove(int index) { + delete GenericVector::data_[index]; + GenericVector::remove(index); + } + + // Truncates the array to the given size by removing the end. + // If the current size is less, the array is not expanded. + void truncate(int size) { + for (int i = size; i < GenericVector::size_used_; ++i) + delete GenericVector::data_[i]; + GenericVector::truncate(size); + } + + // Compact the vector by deleting elements for which delete_cb returns + // true. delete_cb is a permanent callback and will be deleted. + void compact(TessResultCallback1* delete_cb) { + int new_size = 0; + int old_index = 0; + // Until the callback returns true, the elements stay the same. + while (old_index < GenericVector::size_used_ && + !delete_cb->Run(GenericVector::data_[old_index++])) + ++new_size; + // Now just copy anything else that gets false from delete_cb. + for (; old_index < GenericVector::size_used_; ++old_index) { + if (!delete_cb->Run(GenericVector::data_[old_index])) { + GenericVector::data_[new_size++] = + GenericVector::data_[old_index]; + } else { + delete GenericVector::data_[old_index]; + } + } + GenericVector::size_used_ = new_size; + delete delete_cb; + } + + // Clear the array, calling the clear callback function if any. + // All the owned callbacks are also deleted. + // If you don't want the callbacks to be deleted, before calling clear, set + // the callback to NULL. + void clear() { + GenericVector::delete_data_pointers(); + GenericVector::clear(); + } + + // Writes a vector of (pointers to) classes to the given file. Assumes the + // existence of bool T::Serialize(FILE*) const that returns false in case of + // error. There is no Serialize for simple types, as you would have a + // normal GenericVector of those. + // Returns false in case of error. + bool Serialize(FILE* fp) const { + inT32 used = GenericVector::size_used_; + if (fwrite(&used, sizeof(used), 1, fp) != 1) return false; + for (int i = 0; i < used; ++i) { + inT8 non_null = GenericVector::data_[i] != NULL; + if (fwrite(&non_null, sizeof(non_null), 1, fp) != 1) return false; + if (non_null && !GenericVector::data_[i]->Serialize(fp)) return false; + } + return true; + } + bool Serialize(TFile* fp) const { + inT32 used = GenericVector::size_used_; + if (fp->FWrite(&used, sizeof(used), 1) != 1) return false; + for (int i = 0; i < used; ++i) { + inT8 non_null = GenericVector::data_[i] != NULL; + if (fp->FWrite(&non_null, sizeof(non_null), 1) != 1) return false; + if (non_null && !GenericVector::data_[i]->Serialize(fp)) return false; + } + return true; + } + // Reads a vector of (pointers to) classes to the given file. Assumes the + // existence of bool T::DeSerialize(bool, Tfile*) const that returns false in + // case of error. There is no Serialize for simple types, as you would have a + // normal GenericVector of those. + // If swap is true, assumes a big/little-endian swap is needed. + // Also needs T::T(), as new T is used in this function. + // Returns false in case of error. + bool DeSerialize(bool swap, FILE* fp) { + inT32 reserved; + if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false; + if (swap) Reverse32(&reserved); + GenericVector::reserve(reserved); + truncate(0); + for (int i = 0; i < reserved; ++i) { + inT8 non_null; + if (fread(&non_null, sizeof(non_null), 1, fp) != 1) return false; + T* item = NULL; + if (non_null) { + item = new T; + if (!item->DeSerialize(swap, fp)) { + delete item; + return false; + } + this->push_back(item); + } else { + // Null elements should keep their place in the vector. + this->push_back(NULL); + } + } + return true; + } + bool DeSerialize(bool swap, TFile* fp) { + inT32 reserved; + if (!DeSerializeSize(swap, fp, &reserved)) return false; + GenericVector::reserve(reserved); + truncate(0); + for (int i = 0; i < reserved; ++i) { + if (!DeSerializeElement(swap, fp)) return false; + } + return true; + } + // Enables deserialization of a selection of elements. Note that in order to + // retain the integrity of the stream, the caller must call some combination + // of DeSerializeElement and DeSerializeSkip of the exact number returned in + // *size, assuming a true return. + static bool DeSerializeSize(bool swap, TFile* fp, inT32* size) { + if (fp->FRead(size, sizeof(*size), 1) != 1) return false; + if (swap) Reverse32(size); + return true; + } + // Reads and appends to the vector the next element of the serialization. + bool DeSerializeElement(bool swap, TFile* fp) { + inT8 non_null; + if (fp->FRead(&non_null, sizeof(non_null), 1) != 1) return false; + T* item = NULL; + if (non_null) { + item = new T; + if (!item->DeSerialize(swap, fp)) { + delete item; + return false; + } + this->push_back(item); + } else { + // Null elements should keep their place in the vector. + this->push_back(NULL); + } + return true; + } + // Skips the next element of the serialization. + static bool DeSerializeSkip(bool swap, TFile* fp) { + inT8 non_null; + if (fp->FRead(&non_null, sizeof(non_null), 1) != 1) return false; + if (non_null) { + if (!T::SkipDeSerialize(swap, fp)) return false; + } + return true; + } + + // Sorts the items pointed to by the members of this vector using + // t::operator<(). + void sort() { this->GenericVector::sort(&sort_ptr_cmp); } +}; + +} // namespace tesseract + +// A useful vector that uses operator== to do comparisons. +template +class GenericVectorEqEq : public GenericVector { + public: + GenericVectorEqEq() { + GenericVector::set_compare_callback( + NewPermanentTessCallback(tesseract::cmp_eq)); + } + GenericVectorEqEq(int size) : GenericVector(size) { + GenericVector::set_compare_callback( + NewPermanentTessCallback(tesseract::cmp_eq)); + } +}; + +template +void GenericVector::init(int size) { + size_used_ = 0; + size_reserved_ = 0; + data_ = 0; + clear_cb_ = 0; + compare_cb_ = 0; + reserve(size); +} + +template +GenericVector::~GenericVector() { + clear(); +} + +// Reserve some memory. If the internal array contains elements, they are +// copied. +template +void GenericVector::reserve(int size) { + if (size_reserved_ >= size || size <= 0) + return; + if (size < kDefaultVectorSize) size = kDefaultVectorSize; + T* new_array = new T[size]; + for (int i = 0; i < size_used_; ++i) + new_array[i] = data_[i]; + delete[] data_; + data_ = new_array; + size_reserved_ = size; +} + +template +void GenericVector::double_the_size() { + if (size_reserved_ == 0) { + reserve(kDefaultVectorSize); + } + else { + reserve(2 * size_reserved_); + } +} + +// Resizes to size and sets all values to t. +template +void GenericVector::init_to_size(int size, T t) { + reserve(size); + size_used_ = size; + for (int i = 0; i < size; ++i) + data_[i] = t; +} + + +// Return the object from an index. +template +T &GenericVector::get(int index) const { + ASSERT_HOST(index >= 0 && index < size_used_); + return data_[index]; +} + +template +T &GenericVector::operator[](int index) const { + assert(index >= 0 && index < size_used_); + return data_[index]; +} + +template +T &GenericVector::back() const { + ASSERT_HOST(size_used_ > 0); + return data_[size_used_ - 1]; +} +// Returns the last object and removes it. +template +T GenericVector::pop_back() { + ASSERT_HOST(size_used_ > 0); + return data_[--size_used_]; +} + +// Return the object from an index. +template +void GenericVector::set(T t, int index) { + ASSERT_HOST(index >= 0 && index < size_used_); + data_[index] = t; +} + +// Shifts the rest of the elements to the right to make +// space for the new elements and inserts the given element +// at the specified index. +template +void GenericVector::insert(T t, int index) { + ASSERT_HOST(index >= 0 && index <= size_used_); + if (size_reserved_ == size_used_) + double_the_size(); + for (int i = size_used_; i > index; --i) { + data_[i] = data_[i-1]; + } + data_[index] = t; + size_used_++; +} + +// Removes an element at the given index and +// shifts the remaining elements to the left. +template +void GenericVector::remove(int index) { + ASSERT_HOST(index >= 0 && index < size_used_); + for (int i = index; i < size_used_ - 1; ++i) { + data_[i] = data_[i+1]; + } + size_used_--; +} + +// Return true if the index is valindex +template +T GenericVector::contains_index(int index) const { + return index >= 0 && index < size_used_; +} + +// Return the index of the T object. +template +int GenericVector::get_index(T object) const { + for (int i = 0; i < size_used_; ++i) { + ASSERT_HOST(compare_cb_ != NULL); + if (compare_cb_->Run(object, data_[i])) + return i; + } + return -1; +} + +// Return true if T is in the array +template +bool GenericVector::contains(T object) const { + return get_index(object) != -1; +} + +// Add an element in the array +template +int GenericVector::push_back(T object) { + int index = 0; + if (size_used_ == size_reserved_) + double_the_size(); + index = size_used_++; + data_[index] = object; + return index; +} + +template +int GenericVector::push_back_new(T object) { + int index = get_index(object); + if (index >= 0) + return index; + return push_back(object); +} + +// Add an element in the array (front) +template +int GenericVector::push_front(T object) { + if (size_used_ == size_reserved_) + double_the_size(); + for (int i = size_used_; i > 0; --i) + data_[i] = data_[i-1]; + data_[0] = object; + ++size_used_; + return 0; +} + +template +void GenericVector::operator+=(T t) { + push_back(t); +} + +template +GenericVector &GenericVector::operator+=(const GenericVector& other) { + this->reserve(size_used_ + other.size_used_); + for (int i = 0; i < other.size(); ++i) { + this->operator+=(other.data_[i]); + } + return *this; +} + +template +GenericVector &GenericVector::operator=(const GenericVector& other) { + if (&other != this) { + this->truncate(0); + this->operator+=(other); + } + return *this; +} + +// Add a callback to be called to delete the elements when the array took +// their ownership. +template +void GenericVector::set_clear_callback(TessCallback1* cb) { + clear_cb_ = cb; +} + +// Add a callback to be called to delete the elements when the array took +// their ownership. +template +void GenericVector::set_compare_callback( + TessResultCallback2* cb) { + compare_cb_ = cb; +} + +// Clear the array, calling the callback function if any. +template +void GenericVector::clear() { + if (size_reserved_ > 0) { + if (clear_cb_ != NULL) + for (int i = 0; i < size_used_; ++i) + clear_cb_->Run(data_[i]); + delete[] data_; + data_ = NULL; + size_used_ = 0; + size_reserved_ = 0; + } + if (clear_cb_ != NULL) { + delete clear_cb_; + clear_cb_ = NULL; + } + if (compare_cb_ != NULL) { + delete compare_cb_; + compare_cb_ = NULL; + } +} + +template +void GenericVector::delete_data_pointers() { + for (int i = 0; i < size_used_; ++i) + if (data_[i]) { + delete data_[i]; + } +} + + +template +bool GenericVector::write( + FILE* f, TessResultCallback2* cb) const { + if (fwrite(&size_reserved_, sizeof(size_reserved_), 1, f) != 1) return false; + if (fwrite(&size_used_, sizeof(size_used_), 1, f) != 1) return false; + if (cb != NULL) { + for (int i = 0; i < size_used_; ++i) { + if (!cb->Run(f, data_[i])) { + delete cb; + return false; + } + } + delete cb; + } else { + if (fwrite(data_, sizeof(T), size_used_, f) != size_used_) return false; + } + return true; +} + +template +bool GenericVector::read(FILE* f, + TessResultCallback3* cb, + bool swap) { + inT32 reserved; + if (fread(&reserved, sizeof(reserved), 1, f) != 1) return false; + if (swap) Reverse32(&reserved); + reserve(reserved); + if (fread(&size_used_, sizeof(size_used_), 1, f) != 1) return false; + if (swap) Reverse32(&size_used_); + if (cb != NULL) { + for (int i = 0; i < size_used_; ++i) { + if (!cb->Run(f, data_ + i, swap)) { + delete cb; + return false; + } + } + delete cb; + } else { + if (fread(data_, sizeof(T), size_used_, f) != size_used_) return false; + if (swap) { + for (int i = 0; i < size_used_; ++i) + ReverseN(&data_[i], sizeof(T)); + } + } + return true; +} + +// Writes a vector of simple types to the given file. Assumes that bitwise +// read/write of T will work. Returns false in case of error. +template +bool GenericVector::Serialize(FILE* fp) const { + if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false; + if (fwrite(data_, sizeof(*data_), size_used_, fp) != size_used_) return false; + return true; +} +template +bool GenericVector::Serialize(tesseract::TFile* fp) const { + if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false; + if (fp->FWrite(data_, sizeof(*data_), size_used_) != size_used_) return false; + return true; +} + +// Reads a vector of simple types from the given file. Assumes that bitwise +// read/write will work with ReverseN according to sizeof(T). +// Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +template +bool GenericVector::DeSerialize(bool swap, FILE* fp) { + inT32 reserved; + if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false; + if (swap) Reverse32(&reserved); + reserve(reserved); + size_used_ = reserved; + if (fread(data_, sizeof(T), size_used_, fp) != size_used_) return false; + if (swap) { + for (int i = 0; i < size_used_; ++i) + ReverseN(&data_[i], sizeof(data_[i])); + } + return true; +} +template +bool GenericVector::DeSerialize(bool swap, tesseract::TFile* fp) { + inT32 reserved; + if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false; + if (swap) Reverse32(&reserved); + reserve(reserved); + size_used_ = reserved; + if (fp->FRead(data_, sizeof(T), size_used_) != size_used_) return false; + if (swap) { + for (int i = 0; i < size_used_; ++i) + ReverseN(&data_[i], sizeof(data_[i])); + } + return true; +} +template +bool GenericVector::SkipDeSerialize(bool swap, tesseract::TFile* fp) { + inT32 reserved; + if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false; + if (swap) Reverse32(&reserved); + return fp->FRead(NULL, sizeof(T), reserved) == reserved; +} + +// Writes a vector of classes to the given file. Assumes the existence of +// bool T::Serialize(FILE* fp) const that returns false in case of error. +// Returns false in case of error. +template +bool GenericVector::SerializeClasses(FILE* fp) const { + if (fwrite(&size_used_, sizeof(size_used_), 1, fp) != 1) return false; + for (int i = 0; i < size_used_; ++i) { + if (!data_[i].Serialize(fp)) return false; + } + return true; +} +template +bool GenericVector::SerializeClasses(tesseract::TFile* fp) const { + if (fp->FWrite(&size_used_, sizeof(size_used_), 1) != 1) return false; + for (int i = 0; i < size_used_; ++i) { + if (!data_[i].Serialize(fp)) return false; + } + return true; +} + +// Reads a vector of classes from the given file. Assumes the existence of +// bool T::Deserialize(bool swap, FILE* fp) that returns false in case of +// error. Also needs T::T() and T::T(constT&), as init_to_size is used in +// this function. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +template +bool GenericVector::DeSerializeClasses(bool swap, FILE* fp) { + uinT32 reserved; + if (fread(&reserved, sizeof(reserved), 1, fp) != 1) return false; + if (swap) Reverse32(&reserved); + T empty; + init_to_size(reserved, empty); + for (int i = 0; i < reserved; ++i) { + if (!data_[i].DeSerialize(swap, fp)) return false; + } + return true; +} +template +bool GenericVector::DeSerializeClasses(bool swap, tesseract::TFile* fp) { + uinT32 reserved; + if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false; + if (swap) Reverse32(&reserved); + T empty; + init_to_size(reserved, empty); + for (int i = 0; i < reserved; ++i) { + if (!data_[i].DeSerialize(swap, fp)) return false; + } + return true; +} +template +bool GenericVector::SkipDeSerializeClasses(bool swap, tesseract::TFile* fp) { + uinT32 reserved; + if (fp->FRead(&reserved, sizeof(reserved), 1) != 1) return false; + if (swap) Reverse32(&reserved); + for (int i = 0; i < reserved; ++i) { + if (!T::SkipDeSerialize(swap, fp)) return false; + } + return true; +} + +// This method clear the current object, then, does a shallow copy of +// its argument, and finally invalidates its argument. +template +void GenericVector::move(GenericVector* from) { + this->clear(); + this->data_ = from->data_; + this->size_reserved_ = from->size_reserved_; + this->size_used_ = from->size_used_; + this->compare_cb_ = from->compare_cb_; + this->clear_cb_ = from->clear_cb_; + from->data_ = NULL; + from->clear_cb_ = NULL; + from->compare_cb_ = NULL; + from->size_used_ = 0; + from->size_reserved_ = 0; +} + +template +void GenericVector::sort() { + sort(&tesseract::sort_cmp); +} + +// Internal recursive version of choose_nth_item. +// The algorithm used comes from "Algorithms" by Sedgewick: +// http://books.google.com/books/about/Algorithms.html?id=idUdqdDXqnAC +// The principle is to choose a random pivot, and move everything less than +// the pivot to its left, and everything greater than the pivot to the end +// of the array, then recurse on the part that contains the desired index, or +// just return the answer if it is in the equal section in the middle. +// The random pivot guarantees average linear time for the same reason that +// n times vector::push_back takes linear time on average. +// target_index, start and and end are all indices into the full array. +// Seed is a seed for rand_r for thread safety purposes. Its value is +// unimportant as the random numbers do not affect the result except +// between equal answers. +template +int GenericVector::choose_nth_item(int target_index, int start, int end, + unsigned int* seed) { + // Number of elements to process. + int num_elements = end - start; + // Trivial cases. + if (num_elements <= 1) + return start; + if (num_elements == 2) { + if (data_[start] < data_[start + 1]) { + return target_index > start ? start + 1 : start; + } else { + return target_index > start ? start : start + 1; + } + } + // Place the pivot at start. + #ifndef rand_r // _MSC_VER, ANDROID + srand(*seed); + #define rand_r(seed) rand() + #endif // _MSC_VER + int pivot = rand_r(seed) % num_elements + start; + swap(pivot, start); + // The invariant condition here is that items [start, next_lesser) are less + // than the pivot (which is at index next_lesser) and items + // [prev_greater, end) are greater than the pivot, with items + // [next_lesser, prev_greater) being equal to the pivot. + int next_lesser = start; + int prev_greater = end; + for (int next_sample = start + 1; next_sample < prev_greater;) { + if (data_[next_sample] < data_[next_lesser]) { + swap(next_lesser++, next_sample++); + } else if (data_[next_sample] == data_[next_lesser]) { + ++next_sample; + } else { + swap(--prev_greater, next_sample); + } + } + // Now the invariant is set up, we recurse on just the section that contains + // the desired index. + if (target_index < next_lesser) + return choose_nth_item(target_index, start, next_lesser, seed); + else if (target_index < prev_greater) + return next_lesser; // In equal bracket. + else + return choose_nth_item(target_index, prev_greater, end, seed); +} + + +#endif // TESSERACT_CCUTIL_GENERICVECTOR_H_ diff --git a/3rdparty/hgOCR/include/ccutil/gettimeofday.cpp b/3rdparty/hgOCR/include/ccutil/gettimeofday.cpp new file mode 100644 index 00000000..b7852453 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/gettimeofday.cpp @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////// +// File: gettimeofday.cpp +// Description: Implementation of gettimeofday based on leptonica +// Author: tomp2010, zdenop +// Created: Tue Feb 21 21:38:00 CET 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include +#include "gettimeofday.h" + +int gettimeofday(struct timeval *tp, struct timezone *tzp) { + l_int32 sec, usec; + if (tp == NULL) + return -1; + + l_getCurrentTime(&sec, &usec); + tp->tv_sec = sec; + tp->tv_usec = usec; + return 0; +} diff --git a/3rdparty/hgOCR/include/ccutil/gettimeofday.h b/3rdparty/hgOCR/include/ccutil/gettimeofday.h new file mode 100644 index 00000000..c34215b1 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/gettimeofday.h @@ -0,0 +1,31 @@ +/////////////////////////////////////////////////////////////////////// +// File: gettimeofday.h +// Description: Header file for gettimeofday.cpp +// Author: tomp2010, zdenop +// Created: Tue Feb 21 21:38:00 CET 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef VS2008_PORT_GETTIMEOFDAY_H_ +#define VS2008_PORT_GETTIMEOFDAY_H_ + +#ifdef _WIN32 +#include // timeval is defined in here. +#endif + +typedef struct timezone tz; + +int gettimeofday(struct timeval * tp, struct timezone * tzp); + +#endif // VS2008_PORT_GETTIMEOFDAY_H_ diff --git a/3rdparty/hgOCR/include/ccutil/globaloc.cpp b/3rdparty/hgOCR/include/ccutil/globaloc.cpp new file mode 100644 index 00000000..13366134 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/globaloc.cpp @@ -0,0 +1,94 @@ +/********************************************************************** + * File: errcode.c (Formerly error.c) + * Description: Generic error handler function + * Author: Ray Smith + * Created: Tue May 1 16:28:39 BST 1990 + * + * (C) Copyright 1989, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#ifdef __linux__ +#include // For SYS_gettid. +#include // For syscall itself. +#endif +#include "allheaders.h" +#include "errcode.h" +#include "tprintf.h" + +// Size of thread-id array of pixes to keep in case of crash. +const int kMaxNumThreadPixes = 32768; + +Pix* global_crash_pixes[kMaxNumThreadPixes]; + +void SavePixForCrash(int resolution, Pix* pix) { +#ifdef __linux__ +#ifndef ANDROID + int thread_id = syscall(SYS_gettid) % kMaxNumThreadPixes; +#else + int thread_id = gettid() % kMaxNumThreadPixes; +#endif + pixDestroy(&global_crash_pixes[thread_id]); + if (pix != NULL) { + Pix* clone = pixClone(pix); + pixSetXRes(clone, resolution); + pixSetYRes(clone, resolution); + global_crash_pixes[thread_id] = clone; + } +#endif +} + +// CALL ONLY from a signal handler! Writes a crash image to stderr. +void signal_exit(int signal_code) { + tprintf("Received signal %d!\n", signal_code); +#ifdef __linux__ +#ifndef ANDROID + int thread_id = syscall(SYS_gettid) % kMaxNumThreadPixes; +#else + int thread_id = gettid() % kMaxNumThreadPixes; +#endif + if (global_crash_pixes[thread_id] != NULL) { + fprintf(stderr, "Crash caused by image with resolution %d\n", + pixGetYRes(global_crash_pixes[thread_id])); + fprintf(stderr, "\n"); + pixWriteStreamPng(stderr, global_crash_pixes[thread_id], 0.0); + fprintf(stderr, "\n\n"); + } + // Raise an uncaught signal, so as to get a useful stack trace. + raise(SIGILL); +#else + abort(); +#endif +} + +void err_exit() { + ASSERT_HOST("Fatal error encountered!" == NULL); +} + + +void set_global_loc_code(int loc_code) { + // global_loc_code = loc_code; + +} + + +void set_global_subloc_code(int loc_code) { + // global_subloc_code = loc_code; + +} + + +void set_global_subsubloc_code(int loc_code) { + // global_subsubloc_code = loc_code; + +} diff --git a/3rdparty/hgOCR/include/ccutil/globaloc.h b/3rdparty/hgOCR/include/ccutil/globaloc.h new file mode 100644 index 00000000..60d6b73a --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/globaloc.h @@ -0,0 +1,39 @@ +/********************************************************************** + * File: errcode.h (Formerly error.h) + * Description: Header file for generic error handler class + * Author: Ray Smith + * Created: Tue May 1 16:23:36 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef GLOBALOC_H +#define GLOBALOC_H + +#include "host.h" + +// Saves a clone of the given pix, and notes its resolution in thread-specific +// data, so that the image can be written prior to a crash. +struct Pix; +void SavePixForCrash(int resolution, Pix* pix); + +void signal_exit(int signal_code); + +void TESS_API err_exit(); + +void set_global_loc_code(int loc_code); + +void set_global_subloc_code(int loc_code); + +void set_global_subsubloc_code(int loc_code); +#endif diff --git a/3rdparty/hgOCR/include/ccutil/hashfn.h b/3rdparty/hgOCR/include/ccutil/hashfn.h new file mode 100644 index 00000000..73e15be9 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/hashfn.h @@ -0,0 +1,80 @@ +/********************************************************************** + * File: hashfn.h (Formerly hash.h) + * Description: Portability hacks for hash_map, hash_set and unique_ptr. + * Author: Ray Smith + * Created: Wed Jan 08 14:08:25 PST 2014 + * + * (C) Copyright 2014, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef HASHFN_H +#define HASHFN_H + +#if (__cplusplus >= 201103L) || defined(_MSC_VER) // Visual Studio +#include +#include +#if defined(_MSC_VER) && (_MSC_VER >= 1500 && _MSC_VER < 1600) // VS 2008 +#define TessHashMap std::tr1::unordered_map +#define TessHashSet std::tr1::unordered_set +#else // _MSC_VER +#define TessHashMap std::unordered_map +#define TessHashSet std::unordered_set +#include +#define SmartPtr std::unique_ptr +#define HAVE_UNIQUE_PTR +#endif // _MSC_VER +#elif (defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ > 0)) || \ + __GNUC__ >= 4)) // gcc +// hash_set is deprecated in gcc +#include +#include +using __gnu_cxx::hash_map; +using __gnu_cxx::hash_set; +#define TessHashMap __gnu_cxx::hash_map +#define TessHashSet __gnu_cxx::hash_set +#else +#include +#include +#define TessHashMap hash_map +#define TessHashSet :hash_set +#endif // gcc + +#ifndef HAVE_UNIQUE_PTR +// Trivial smart ptr. Expand to add features of std::unique_ptr as required. +template class SmartPtr { + public: + SmartPtr() : ptr_(NULL) {} + explicit SmartPtr(T* ptr) : ptr_(ptr) {} + ~SmartPtr() { + delete ptr_; + } + + T* get() const { + return ptr_; + } + void reset(T* ptr) { + delete ptr_; + ptr_ = ptr; + } + bool operator==(const T* ptr) const { + return ptr_ == ptr; + } + T* operator->() const { + return ptr_; + } + private: + T* ptr_; +}; +#endif // HAVE_UNIQUE_PTR + +#endif // HASHFN_H diff --git a/3rdparty/hgOCR/include/ccutil/helpers.h b/3rdparty/hgOCR/include/ccutil/helpers.h new file mode 100644 index 00000000..a2276bc4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/helpers.h @@ -0,0 +1,203 @@ +/* -*-C-*- + ******************************************************************************** + * + * File: helpers.h + * Description: General utility functions + * Author: Daria Antonova + * Created: Wed Apr 8 14:37:00 2009 + * Language: C++ + * Package: N/A + * Status: Reusable Software Component + * + * (c) Copyright 2009, Google Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + ********************************************************************************/ + +#ifndef TESSERACT_CCUTIL_HELPERS_H_ +#define TESSERACT_CCUTIL_HELPERS_H_ + +#include +#include + +#include "host.h" + +// TODO(rays) Put the rest of the helpers in the namespace. +namespace tesseract { + +// A simple linear congruential random number generator, using Knuth's +// constants from: +// http://en.wikipedia.org/wiki/Linear_congruential_generator. +class TRand { + public: + TRand() : seed_(1) {} + // Sets the seed to the given value. + void set_seed(uinT64 seed) { + seed_ = seed; + } + + // Returns an integer in the range 0 to MAX_INT32. + inT32 IntRand() { + Iterate(); + return seed_ >> 33; + } + // Returns a floating point value in the range [-range, range]. + double SignedRand(double range) { + return range * 2.0 * IntRand() / MAX_INT32 - range; + } + // Returns a floating point value in the range [0, range]. + double UnsignedRand(double range) { + return range * IntRand() / MAX_INT32; + } + + private: + // Steps the generator to the next value. + void Iterate() { + seed_ *= 6364136223846793005ULL; + seed_ += 1442695040888963407ULL; + } + + // The current value of the seed. + uinT64 seed_; +}; + +} // namespace tesseract + +// Remove newline (if any) at the end of the string. +inline void chomp_string(char *str) { + int last_index = static_cast(strlen(str)) - 1; + while (last_index >= 0 && + (str[last_index] == '\n' || str[last_index] == '\r')) { + str[last_index--] = '\0'; + } +} + +// Advance the current pointer of the file if it points to a newline character. +inline void SkipNewline(FILE *file) { + if (fgetc(file) != '\n') fseek(file, -1, SEEK_CUR); +} + +// Swaps the two args pointed to by the pointers. +// Operator= and copy constructor must work on T. +template inline void Swap(T* p1, T* p2) { + T tmp(*p2); + *p2 = *p1; + *p1 = tmp; +} + +// qsort function to sort 2 floats. +inline int sort_floats(const void *arg1, const void *arg2) { + float diff = *((float *) arg1) - *((float *) arg2); + if (diff > 0) { + return 1; + } else if (diff < 0) { + return -1; + } else { + return 0; + } +} + +// return the smallest multiple of block_size greater than or equal to n. +inline int RoundUp(int n, int block_size) { + return block_size * ((n + block_size - 1) / block_size); +} + +// Clip a numeric value to the interval [lower_bound, upper_bound]. +template +inline T ClipToRange(const T& x, const T& lower_bound, const T& upper_bound) { + if (x < lower_bound) + return lower_bound; + if (x > upper_bound) + return upper_bound; + return x; +} + +// Extend the range [lower_bound, upper_bound] to include x. +template +inline void UpdateRange(const T1& x, T2* lower_bound, T2* upper_bound) { + if (x < *lower_bound) + *lower_bound = x; + if (x > *upper_bound) + *upper_bound = x; +} + +// Decrease lower_bound to be <= x_lo AND increase upper_bound to be >= x_hi. +template +inline void UpdateRange(const T1& x_lo, const T1& x_hi, + T2* lower_bound, T2* upper_bound) { + if (x_lo < *lower_bound) + *lower_bound = x_lo; + if (x_hi > *upper_bound) + *upper_bound = x_hi; +} + +// Intersect the range [*lower2, *upper2] with the range [lower1, upper1], +// putting the result back in [*lower2, *upper2]. +// If non-intersecting ranges are given, we end up with *lower2 > *upper2. +template +inline void IntersectRange(const T& lower1, const T& upper1, + T* lower2, T* upper2) { + if (lower1 > *lower2) + *lower2 = lower1; + if (upper1 < *upper2) + *upper2 = upper1; +} + +// Proper modulo arithmetic operator. Returns a mod b that works for -ve a. +// For any integer a and positive b, returns r : 0<=r= 0 ? (a + b / 2) / b : (a - b / 2) / b; +} + +// Return a double cast to int with rounding. +inline int IntCastRounded(double x) { + return x >= 0.0 ? static_cast(x + 0.5) : -static_cast(-x + 0.5); +} + +// Reverse the order of bytes in a n byte quantity for big/little-endian switch. +inline void ReverseN(void* ptr, int num_bytes) { + char *cptr = reinterpret_cast(ptr); + int halfsize = num_bytes / 2; + for (int i = 0; i < halfsize; ++i) { + char tmp = cptr[i]; + cptr[i] = cptr[num_bytes - 1 - i]; + cptr[num_bytes - 1 - i] = tmp; + } +} + +// Reverse the order of bytes in a 16 bit quantity for big/little-endian switch. +inline void Reverse16(void *ptr) { + ReverseN(ptr, 2); +} + +// Reverse the order of bytes in a 32 bit quantity for big/little-endian switch. +inline void Reverse32(void *ptr) { + ReverseN(ptr, 4); +} + +// Reverse the order of bytes in a 64 bit quantity for big/little-endian switch. +inline void Reverse64(void* ptr) { + ReverseN(ptr, 8); +} + + +#endif // TESSERACT_CCUTIL_HELPERS_H_ diff --git a/3rdparty/hgOCR/include/ccutil/host.h b/3rdparty/hgOCR/include/ccutil/host.h new file mode 100644 index 00000000..ff9ca8c6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/host.h @@ -0,0 +1,82 @@ +/****************************************************************************** + ** Filename: host.h + ** Purpose: This is the system independent typedefs and defines + ** Author: MN, JG, MD + ** + ** (c) Copyright Hewlett-Packard Company, 1988-1996. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + */ + +#ifndef __HOST__ +#define __HOST__ + +#include "platform.h" +/* _WIN32 */ +#ifdef _WIN32 +#include +#include // winbase.h contains windows.h +#endif + +#include // int32_t, ... + +// definitions of portable data types (numbers and characters) +typedef SIGNED char inT8; +typedef unsigned char uinT8; +typedef short inT16; +typedef unsigned short uinT16; +typedef int inT32; +typedef unsigned int uinT32; +#if (_MSC_VER >= 1200) //%%% vkr for VC 6.0 +typedef INT64 inT64; +typedef UINT64 uinT64; +#else +typedef long long int inT64; +typedef unsigned long long int uinT64; +#endif //%%% vkr for VC 6.0 +typedef float FLOAT32; +typedef double FLOAT64; +typedef unsigned char BOOL8; + +#define INT32FORMAT "%d" +#define INT64FORMAT "%lld" + +#define MAX_INT8 0x7f +#define MAX_INT16 0x7fff +#define MAX_INT32 0x7fffffff +#define MAX_UINT8 0xff +#define MAX_UINT16 0xffff +#define MAX_UINT32 0xffffffff +#define MAX_FLOAT32 ((float)3.40282347e+38) + +#define MIN_INT8 0x80 +#define MIN_INT16 0x8000 +#define MIN_INT32 static_cast(0x80000000) +#define MIN_UINT8 0x00 +#define MIN_UINT16 0x0000 +#define MIN_UINT32 0x00000000 +#define MIN_FLOAT32 ((float)1.17549435e-38) + +// Defines +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +// Return true if x is within tolerance of y +template bool NearlyEqual(T x, T y, T tolerance) { + T diff = x - y; + return diff <= tolerance && -diff <= tolerance; +} + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/indexmapbidi.cpp b/3rdparty/hgOCR/include/ccutil/indexmapbidi.cpp new file mode 100644 index 00000000..48bd9051 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/indexmapbidi.cpp @@ -0,0 +1,250 @@ +/////////////////////////////////////////////////////////////////////// +// File: indexmapbidi.cpp +// Description: Bi-directional mapping between a sparse and compact space. +// Author: rays@google.com (Ray Smith) +// Created: Tue Apr 06 11:33:59 PDT 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "indexmapbidi.h" + +namespace tesseract { + +// SparseToCompact takes a sparse index to an index in the compact space. +// Uses a binary search to find the result. For faster speed use +// IndexMapBiDi, but that takes more memory. +int IndexMap::SparseToCompact(int sparse_index) const { + int result = compact_map_.binary_search(sparse_index); + return compact_map_[result] == sparse_index ? result : -1; +} + +// Copy from the input. +void IndexMap::CopyFrom(const IndexMap& src) { + sparse_size_ = src.sparse_size_; + compact_map_ = src.compact_map_; +} +void IndexMap::CopyFrom(const IndexMapBiDi& src) { + sparse_size_ = src.SparseSize(); + compact_map_ = src.compact_map_; +} + +// Writes to the given file. Returns false in case of error. +bool IndexMap::Serialize(FILE* fp) const { + inT32 sparse_size = sparse_size_; + if (fwrite(&sparse_size, sizeof(sparse_size), 1, fp) != 1) return false; + if (!compact_map_.Serialize(fp)) return false; + return true; +} + +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool IndexMap::DeSerialize(bool swap, FILE* fp) { + inT32 sparse_size; + if (fread(&sparse_size, sizeof(sparse_size), 1, fp) != 1) return false; + if (swap) + ReverseN(&sparse_size, sizeof(sparse_size)); + sparse_size_ = sparse_size; + if (!compact_map_.DeSerialize(swap, fp)) return false; + return true; +} + + +// Top-level init function in a single call to initialize a map to select +// a single contiguous subrange [start, end) of the sparse space to be mapped +// 1 to 1 to the compact space, with all other elements of the sparse space +// left unmapped. +// No need to call Setup after this. +void IndexMapBiDi::InitAndSetupRange(int sparse_size, int start, int end) { + Init(sparse_size, false); + for (int i = start; i < end; ++i) + SetMap(i, true); + Setup(); +} + +// Initializes just the sparse_map_ to the given size with either all +// forward indices mapped (all_mapped = true) or none (all_mapped = false). +// Call Setup immediately after, or make calls to SetMap first to adjust the +// mapping and then call Setup before using the map. +void IndexMapBiDi::Init(int size, bool all_mapped) { + sparse_map_.init_to_size(size, -1); + if (all_mapped) { + for (int i = 0; i < size; ++i) + sparse_map_[i] = i; + } +} + +// Sets a given index in the sparse_map_ to be mapped or not. +void IndexMapBiDi::SetMap(int sparse_index, bool mapped) { + sparse_map_[sparse_index] = mapped ? 0 : -1; +} + +// Sets up the sparse_map_ and compact_map_ properly after Init and +// some calls to SetMap. Assumes an ordered 1-1 map from set indices +// in the forward map to the compact space. +void IndexMapBiDi::Setup() { + int compact_size = 0; + for (int i = 0; i < sparse_map_.size(); ++i) { + if (sparse_map_[i] >= 0) { + sparse_map_[i] = compact_size++; + } + } + compact_map_.init_to_size(compact_size, -1); + for (int i = 0; i < sparse_map_.size(); ++i) { + if (sparse_map_[i] >= 0) { + compact_map_[sparse_map_[i]] = i; + } + } + sparse_size_ = sparse_map_.size(); +} + +// Copy from the input. +void IndexMapBiDi::CopyFrom(const IndexMapBiDi& src) { + sparse_map_ = src.sparse_map_; + compact_map_ = src.compact_map_; + sparse_size_ = sparse_map_.size(); +} + +// Merges the two compact space indices. May be called many times, but +// the merges must be concluded by a call to CompleteMerges. +// Returns true if a merge was actually performed. +bool IndexMapBiDi::Merge(int compact_index1, int compact_index2) { + // Find the current master index for index1 and index2. + compact_index1 = MasterCompactIndex(compact_index1); + compact_index2 = MasterCompactIndex(compact_index2); + // Be sure that index1 < index2. + if (compact_index1 > compact_index2) { + int tmp = compact_index1; + compact_index1 = compact_index2; + compact_index2 = tmp; + } else if (compact_index1 == compact_index2) { + return false; + } + // To save iterating over all sparse_map_ entries, simply make the master + // entry for index2 point to index1. + // This leaves behind a potential chain of parents that needs to be chased, + // as above. + sparse_map_[compact_map_[compact_index2]] = compact_index1; + if (compact_index1 >= 0) + compact_map_[compact_index2] = compact_map_[compact_index1]; + return true; +} + +// Completes one or more Merge operations by further compacting the +// compact space. Unused compact space indices are removed, and the used +// ones above shuffled down to fill the gaps. +// Example: +// Input sparse_map_: (x indicates -1) +// x x 0 x 2 x x 4 x 0 x 2 x +// Output sparse_map_: +// x x 0 x 1 x x 2 x 0 x 1 x +// Output compact_map_: +// 2 4 7. +void IndexMapBiDi::CompleteMerges() { + // Ensure each sparse_map_entry contains a master compact_map_ index. + int compact_size = 0; + for (int i = 0; i < sparse_map_.size(); ++i) { + int compact_index = MasterCompactIndex(sparse_map_[i]); + sparse_map_[i] = compact_index; + if (compact_index >= compact_size) + compact_size = compact_index + 1; + } + // Re-generate the compact_map leaving holes for unused indices. + compact_map_.init_to_size(compact_size, -1); + for (int i = 0; i < sparse_map_.size(); ++i) { + if (sparse_map_[i] >= 0) { + if (compact_map_[sparse_map_[i]] == -1) + compact_map_[sparse_map_[i]] = i; + } + } + // Compact the compact_map, leaving tmp_compact_map saying where each + // index went to in the compacted map. + GenericVector tmp_compact_map; + tmp_compact_map.init_to_size(compact_size, -1); + compact_size = 0; + for (int i = 0; i < compact_map_.size(); ++i) { + if (compact_map_[i] >= 0) { + tmp_compact_map[i] = compact_size; + compact_map_[compact_size++] = compact_map_[i]; + } + } + compact_map_.truncate(compact_size); + // Now modify the entries in the sparse map to point to the new locations. + for (int i = 0; i < sparse_map_.size(); ++i) { + if (sparse_map_[i] >= 0) { + sparse_map_[i] = tmp_compact_map[sparse_map_[i]]; + } + } +} + +// Writes to the given file. Returns false in case of error. +bool IndexMapBiDi::Serialize(FILE* fp) const { + if (!IndexMap::Serialize(fp)) return false; + // Make a vector containing the rest of the map. If the map is many-to-one + // then each additional sparse entry needs to be stored. + // Normally we store only the compact map to save space. + GenericVector remaining_pairs; + for (int i = 0; i < sparse_map_.size(); ++i) { + if (sparse_map_[i] >= 0 && compact_map_[sparse_map_[i]] != i) { + remaining_pairs.push_back(i); + remaining_pairs.push_back(sparse_map_[i]); + } + } + if (!remaining_pairs.Serialize(fp)) return false; + return true; +} + +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool IndexMapBiDi::DeSerialize(bool swap, FILE* fp) { + if (!IndexMap::DeSerialize(swap, fp)) return false; + GenericVector remaining_pairs; + if (!remaining_pairs.DeSerialize(swap, fp)) return false; + sparse_map_.init_to_size(sparse_size_, -1); + for (int i = 0; i < compact_map_.size(); ++i) { + sparse_map_[compact_map_[i]] = i; + } + for (int i = 0; i < remaining_pairs.size(); ++i) { + int sparse_index = remaining_pairs[i++]; + sparse_map_[sparse_index] = remaining_pairs[i]; + } + return true; +} + +// Bulk calls to SparseToCompact. +// Maps the given array of sparse indices to an array of compact indices. +// Assumes the input is sorted. The output indices are sorted and uniqued. +// Return value is the number of "missed" features, being features that +// don't map to the compact feature space. +int IndexMapBiDi::MapFeatures(const GenericVector& sparse, + GenericVector* compact) const { + compact->truncate(0); + int num_features = sparse.size(); + int missed_features = 0; + int prev_good_feature = -1; + for (int f = 0; f < num_features; ++f) { + int feature = sparse_map_[sparse[f]]; + if (feature >= 0) { + if (feature != prev_good_feature) { + compact->push_back(feature); + prev_good_feature = feature; + } + } else { + ++missed_features; + } + } + return missed_features; +} + +} // namespace tesseract. + diff --git a/3rdparty/hgOCR/include/ccutil/indexmapbidi.h b/3rdparty/hgOCR/include/ccutil/indexmapbidi.h new file mode 100644 index 00000000..50595133 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/indexmapbidi.h @@ -0,0 +1,180 @@ +/////////////////////////////////////////////////////////////////////// +// File: indexmapbidi.h +// Description: Bi-directional mapping between a sparse and compact space. +// Author: rays@google.com (Ray Smith) +// Created: Tue Apr 06 11:33:59 PDT 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_INDEXMAPBIDI_H_ +#define TESSERACT_CCUTIL_INDEXMAPBIDI_H_ + +#include +#include "genericvector.h" + +namespace tesseract { + +class IndexMapBiDi; + +// Bidirectional one-to-one mapping between a sparse and a compact discrete +// space. Many entries in the sparse space are unmapped, but those that are +// mapped have a 1-1 mapping to (and from) the compact space, where all +// values are used. This is useful for forming subsets of larger collections, +// such as subsets of character sets, or subsets of binary feature spaces. +// +// This base class provides basic functionality with binary search for the +// SparseToCompact mapping to save memory. +// For a faster inverse mapping, or to allow a many-to-one mapping, use +// IndexMapBiDi below. +// NOTE: there are currently no methods to setup an IndexMap on its own! +// It must be initialized by copying from an IndexMapBiDi or by DeSerialize. +class IndexMap { + public: + virtual ~IndexMap() {} + + // SparseToCompact takes a sparse index to an index in the compact space. + // Uses a binary search to find the result. For faster speed use + // IndexMapBiDi, but that takes more memory. + virtual int SparseToCompact(int sparse_index) const; + + // CompactToSparse takes a compact index to the corresponding index in the + // sparse space. + int CompactToSparse(int compact_index) const { + return compact_map_[compact_index]; + } + // The size of the sparse space. + virtual int SparseSize() const { + return sparse_size_; + } + // The size of the compact space. + int CompactSize() const { + return compact_map_.size(); + } + + // Copy from the input. + void CopyFrom(const IndexMap& src); + void CopyFrom(const IndexMapBiDi& src); + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + protected: + // The sparse space covers integers in the range [0, sparse_size_-1]. + int sparse_size_; + // The compact space covers integers in the range [0, compact_map_.size()-1]. + // Each element contains the corresponding sparse index. + GenericVector compact_map_; +}; + +// Bidirectional many-to-one mapping between a sparse and a compact discrete +// space. As with IndexMap, many entries may be unmapped, but unlike IndexMap, +// of those that are, many may be mapped to the same compact index. +// If the map is many-to-one, it is not possible to directly obtain all the +// sparse indices that map to a single compact index. +// This map is time- rather than space-efficient. It stores the entire sparse +// space. +// IndexMapBiDi may be initialized in one of 3 ways: +// 1. Init(size, true); +// Setup(); +// Sets a complete 1:1 mapping with no unmapped elements. +// 2. Init(size, false); +// for ... SetMap(index, true); +// Setup(); +// Specifies precisely which sparse indices are mapped. The mapping is 1:1. +// 3. Either of the above, followed by: +// for ... Merge(index1, index2); +// CompleteMerges(); +// Allows a many-to-one mapping by merging compact space indices. +class IndexMapBiDi : public IndexMap { + public: + virtual ~IndexMapBiDi() {} + + // Top-level init function in a single call to initialize a map to select + // a single contiguous subrange [start, end) of the sparse space to be mapped + // 1 to 1 to the compact space, with all other elements of the sparse space + // left unmapped. + // No need to call Setup after this. + void InitAndSetupRange(int sparse_size, int start, int end); + + // Initializes just the sparse_map_ to the given size with either all + // forward indices mapped (all_mapped = true) or none (all_mapped = false). + // Call Setup immediately after, or make calls to SetMap first to adjust the + // mapping and then call Setup before using the map. + void Init(int size, bool all_mapped); + // Sets a given index in the sparse_map_ to be mapped or not. + void SetMap(int sparse_index, bool mapped); + // Sets up the sparse_map_ and compact_map_ properly after Init and + // some calls to SetMap. Assumes an ordered 1-1 map from set indices + // in the sparse space to the compact space. + void Setup(); + + // Merges the two compact space indices. May be called many times, but + // the merges must be concluded by a call to CompleteMerges. + // Returns true if a merge was actually performed. + bool Merge(int compact_index1, int compact_index2); + // Returns true if the given compact index has been deleted. + bool IsCompactDeleted(int index) const { + return MasterCompactIndex(index) < 0; + } + // Completes one or more Merge operations by further compacting the + // compact space. + void CompleteMerges(); + + // SparseToCompact takes a sparse index to an index in the compact space. + virtual int SparseToCompact(int sparse_index) const { + return sparse_map_[sparse_index]; + } + // The size of the sparse space. + virtual int SparseSize() const { + return sparse_map_.size(); + } + + // Copy from the input. + void CopyFrom(const IndexMapBiDi& src); + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + + // Bulk calls to SparseToCompact. + // Maps the given array of sparse indices to an array of compact indices. + // Assumes the input is sorted. The output indices are sorted and uniqued. + // Return value is the number of "missed" features, being features that + // don't map to the compact feature space. + int MapFeatures(const GenericVector& sparse, + GenericVector* compact) const; + + private: + // Returns the master compact index for a given compact index. + // During a multiple merge operation, several compact indices may be + // combined, so we need to be able to find the master of all. + int MasterCompactIndex(int compact_index) const { + while (compact_index >= 0 && + sparse_map_[compact_map_[compact_index]] != compact_index) + compact_index = sparse_map_[compact_map_[compact_index]]; + return compact_index; + } + + // Direct look-up of the compact index for each element in sparse space. + GenericVector sparse_map_; +}; + +} // namespace tesseract. + +#endif // TESSERACT_CCUTIL_INDEXMAPBIDI_H_ diff --git a/3rdparty/hgOCR/include/ccutil/kdpair.h b/3rdparty/hgOCR/include/ccutil/kdpair.h new file mode 100644 index 00000000..bb7743ed --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/kdpair.h @@ -0,0 +1,189 @@ +// Copyright 2012 Google Inc. All Rights Reserved. +// Author: rays@google.com (Ray Smith) +/////////////////////////////////////////////////////////////////////// +// File: kdpair.h +// Description: Template pair class like STL pair but geared towards +// the Key+Data design pattern in which some data needs +// to be sorted or kept in a heap sorted on some separate key. +// Author: Ray Smith. +// Created: Thu Mar 15 14:48:05 PDT 2012 +// +// (C) Copyright 2012, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_KDPAIR_H_ +#define TESSERACT_CCUTIL_KDPAIR_H_ + +#include "genericvector.h" + +namespace tesseract { + +// A useful base struct to facilitate the common operation of sorting a vector +// of simple or smart-pointer data using a separate key. Similar to STL pair. +template +struct KDPair { + KDPair() {} + KDPair(Key k, Data d) : data(d), key(k) {} + + int operator==(const KDPair& other) const { + return key == other.key; + } + + // WARNING! Keep data as the first element! KDPairInc and KDPairDec depend + // on the order of these elements so they can downcast pointers appropriately + // for use by GenericHeap::Reshuffle. + Data data; + Key key; +}; +// Specialization of KDPair to provide operator< for sorting in increasing order +// and recasting of data pointers for use with DoublePtr. +template +struct KDPairInc : public KDPair { + KDPairInc() {} + KDPairInc(Key k, Data d) : KDPair(k, d) {} + // Operator< facilitates sorting in increasing order. + int operator<(const KDPairInc& other) const { + return this->key < other.key; + } + // Returns the input Data pointer recast to a KDPairInc pointer. + // Just casts a pointer to the first element to a pointer to the whole struct. + static KDPairInc* RecastDataPointer(Data* data_ptr) { + return reinterpret_cast(data_ptr); + } +}; +// Specialization of KDPair to provide operator< for sorting in decreasing order +// and recasting of data pointers for use with DoublePtr. +template +struct KDPairDec : public KDPair { + KDPairDec() {} + KDPairDec(Key k, Data d) : KDPair(k, d) {} + // Operator< facilitates sorting in decreasing order by using operator> on + // the key values. + int operator<(const KDPairDec& other) const { + return this->key > other.key; + } + // Returns the input Data pointer recast to a KDPairDec pointer. + // Just casts a pointer to the first element to a pointer to the whole struct. + static KDPairDec* RecastDataPointer(Data* data_ptr) { + return reinterpret_cast(data_ptr); + } +}; + +// A useful base class to facilitate the common operation of sorting a vector +// of owned pointer data using a separate key. This class owns its data pointer, +// deleting it when it has finished with it, and providing copy constructor and +// operator= that have move semantics so that the data does not get copied and +// only a single instance of KDPtrPair holds a specific data pointer. +template +class KDPtrPair { + public: + KDPtrPair() : data_(NULL) {} + KDPtrPair(Key k, Data* d) : data_(d), key_(k) {} + // Copy constructor steals the pointer from src and NULLs it in src, thereby + // moving the (single) ownership of the data. + KDPtrPair(KDPtrPair& src) : data_(src.data_), key_(src.key_) { + src.data_ = NULL; + } + // Destructor deletes data, assuming it is the sole owner. + ~KDPtrPair() { + delete this->data_; + this->data_ = NULL; + } + // Operator= steals the pointer from src and NULLs it in src, thereby + // moving the (single) ownership of the data. + void operator=(KDPtrPair& src) { + delete this->data_; + this->data_ = src.data_; + src.data_ = NULL; + this->key_ = src.key_; + } + + int operator==(const KDPtrPair& other) const { + return key_ == other.key_; + } + + // Accessors. + const Key& key() const { + return key_; + } + void set_key(const Key& new_key) { + key_ = new_key; + } + const Data* data() const { + return data_; + } + // Sets the data pointer, taking ownership of the data. + void set_data(Data* new_data) { + delete data_; + data_ = new_data; + } + // Relinquishes ownership of the data pointer (setting it to NULL). + Data* extract_data() { + Data* result = data_; + data_ = NULL; + return result; + } + + private: + // Data members are private to keep deletion of data_ encapsulated. + Data* data_; + Key key_; +}; +// Specialization of KDPtrPair to provide operator< for sorting in increasing +// order. +template +struct KDPtrPairInc : public KDPtrPair { + // Since we are doing non-standard stuff we have to duplicate *all* the + // constructors and operator=. + KDPtrPairInc() : KDPtrPair() {} + KDPtrPairInc(Key k, Data* d) : KDPtrPair(k, d) {} + KDPtrPairInc(KDPtrPairInc& src) : KDPtrPair(src) {} + void operator=(KDPtrPairInc& src) { + KDPtrPair::operator=(src); + } + // Operator< facilitates sorting in increasing order. + int operator<(const KDPtrPairInc& other) const { + return this->key() < other.key(); + } +}; +// Specialization of KDPtrPair to provide operator< for sorting in decreasing +// order. +template +struct KDPtrPairDec : public KDPtrPair { + // Since we are doing non-standard stuff we have to duplicate *all* the + // constructors and operator=. + KDPtrPairDec() : KDPtrPair() {} + KDPtrPairDec(Key k, Data* d) : KDPtrPair(k, d) {} + KDPtrPairDec(KDPtrPairDec& src) : KDPtrPair(src) {} + void operator=(KDPtrPairDec& src) { + KDPtrPair::operator=(src); + } + // Operator< facilitates sorting in decreasing order by using operator> on + // the key values. + int operator<(const KDPtrPairDec& other) const { + return this->key() > other.key(); + } +}; + +// Specialization for a pair of ints in increasing order. +typedef KDPairInc IntKDPair; + +// Vector of IntKDPair. +class KDVector : public GenericVector { + // TODO(rays) Add some code to manipulate a KDVector. For now there + // is nothing and this class is effectively a specialization typedef. +}; + +} // namespace tesseract + +#endif // TESSERACT_CCUTIL_KDPAIR_H_ diff --git a/3rdparty/hgOCR/include/ccutil/lsterr.h b/3rdparty/hgOCR/include/ccutil/lsterr.h new file mode 100644 index 00000000..82497ae8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/lsterr.h @@ -0,0 +1,43 @@ +/********************************************************************** + * File: lsterr.h (Formerly listerr.h) + * Description: Errors shared by list modules + * Author: Phil Cheatle + * Created: Wed Jan 23 09:10:35 GMT 1991 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "errcode.h" //must be last include + +#ifndef LSTERR_H +#define LSTERR_H + +const ERRCODE DONT_CONSTRUCT_LIST_BY_COPY = +"Can't create a list by assignment"; +const ERRCODE DONT_ASSIGN_LISTS = "Can't assign to lists"; +const ERRCODE SERIALISE_LINKS = "Attempted to (de)serialise a link element"; + +#ifndef NDEBUG + +const ERRCODE NO_LIST = "Iterator not set to a list"; +const ERRCODE NULL_OBJECT = "List found this = NULL!"; +const ERRCODE NULL_DATA = "List would have returned a NULL data pointer"; +const ERRCODE NULL_CURRENT = "List current position is NULL"; +const ERRCODE NULL_NEXT = "Next element on the list is NULL"; +const ERRCODE NULL_PREV = "Previous element on the list is NULL"; +const ERRCODE EMPTY_LIST = "List is empty"; +const ERRCODE BAD_PARAMETER = "List parameter error"; +const ERRCODE STILL_LINKED = + "Attempting to add an element with non NULL links, to a list"; +#endif +#endif diff --git a/3rdparty/hgOCR/include/ccutil/mainblk.cpp b/3rdparty/hgOCR/include/ccutil/mainblk.cpp new file mode 100644 index 00000000..0de3d054 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/mainblk.cpp @@ -0,0 +1,110 @@ +/********************************************************************** + * File: mainblk.c (Formerly main.c) + * Description: Function to call from main() to setup. + * Author: Ray Smith + * Created: Tue Oct 22 11:09:40 BST 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "fileerr.h" +#ifdef __UNIX__ +#include +#include +#else +#include +#endif +#include +#include "ccutil.h" + +#define VARDIR "configs/" /**< variables files */ +#define EXTERN + +const ERRCODE NO_PATH = +"Warning:explicit path for executable will not be used for configs"; +static const ERRCODE USAGE = "Usage"; + +namespace tesseract { + /********************************************************************** + * main_setup + * + * Main for mithras demo program. Read the arguments and set up globals. + **********************************************************************/ + + /** + * @brief CCUtil::main_setup - set location of tessdata and name of image + * + * @param argv0 - paths to the directory with language files and config files. + * An actual value of argv0 is used if not NULL, otherwise TESSDATA_PREFIX is + * used if not NULL, next try to use compiled in -DTESSDATA_PREFIX. If previous + * is not successful - use current directory. + * @param basename - name of image + */ + void CCUtil::main_setup(const char *argv0, const char *basename) { + imagebasename = basename; /**< name of image */ + + char *tessdata_prefix = getenv("TESSDATA_PREFIX"); + + if (argv0 != NULL) { + /* Use tessdata prefix from the command line. */ + datadir = argv0; + } + else if (tessdata_prefix) { + /* Use tessdata prefix from the environment. */ + datadir = tessdata_prefix; +#if defined(_WIN32) + } + else if (datadir == NULL || access(datadir.string(), 0) != 0) { + /* Look for tessdata in directory of executable. */ + static char dir[128]; + static char exe[128]; + DWORD length = GetModuleFileName(NULL, exe, sizeof(exe)); + if (length > 0 && length < sizeof(exe)) { + _splitpath(exe, NULL, dir, NULL, NULL); + datadir = dir; + } +#endif /* _WIN32 */ +#if defined(TESSDATA_PREFIX) + } + else { + /* Use tessdata prefix which was compiled in. */ +#define _STR(a) #a +#define _XSTR(a) _STR(a) + datadir = _XSTR(TESSDATA_PREFIX); +#undef _XSTR +#undef _STR +#endif + } + + // datadir may still be empty: + if (datadir.length() == 0) { + datadir = "./"; + } + else { + // Remove tessdata from the end if present, as we will add it back! + int length = datadir.length(); + if (length >= 8 && strcmp(&datadir[length - 8], "tessdata") == 0) + datadir.truncate_at(length - 8); + else if (length >= 9 && strcmp(&datadir[length - 9], "tessdata/") == 0) + datadir.truncate_at(length - 9); + } + + // check for missing directory separator + const char *lastchar = datadir.string(); + lastchar += datadir.length() - 1; + if ((strcmp(lastchar, "/") != 0) && (strcmp(lastchar, "\\") != 0)) + datadir += "/"; + + datadir += m_data_sub_dir; /**< data directory */ + } +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/memry.cpp b/3rdparty/hgOCR/include/ccutil/memry.cpp new file mode 100644 index 00000000..925efda8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/memry.cpp @@ -0,0 +1,61 @@ +/********************************************************************** + * File: memry.c (Formerly memory.c) + * Description: Memory allocation with builtin safety checks. + * Author: Ray Smith + * Created: Wed Jan 22 09:43:33 GMT 1992 + * + * (C) Copyright 1992, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "memry.h" +#include + +// With improvements in OS memory allocators, internal memory management +// is no longer required, so all these functions now map to their malloc +// family equivalents. + +// TODO(rays) further cleanup by redirecting calls to new and creating proper +// constructors. + +char *alloc_string(inT32 count) { + // Round up the amount allocated to a multiple of 4 + return static_cast(malloc((count + 3) & ~3)); +} + +void free_string(char *string) { + free(string); +} + +void* alloc_struct(inT32 count, const char *) { + return malloc(count); +} + +void free_struct(void *deadstruct, inT32, const char *) { + free(deadstruct); +} + +void *alloc_mem(inT32 count) { + return malloc(static_cast(count)); +} + +void *alloc_big_zeros(inT32 count) { + return calloc(static_cast(count), 1); +} + +void free_mem(void *oldchunk) { + free(oldchunk); +} + +void free_big_mem(void *oldchunk) { + free(oldchunk); +} diff --git a/3rdparty/hgOCR/include/ccutil/memry.h b/3rdparty/hgOCR/include/ccutil/memry.h new file mode 100644 index 00000000..66e146e6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/memry.h @@ -0,0 +1,43 @@ +/********************************************************************** + * File: memry.h (Formerly memory.h) + * Description: Header file for basic memory allocation/deallocation. + * Author: Ray Smith + * Created: Tue May 8 16:03:48 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef MEMRY_H +#define MEMRY_H + +#include +#include "host.h" + +// allocate string +extern char *alloc_string(inT32 count); +// free a string. +extern void free_string(char *string); +// allocate memory +extern void *alloc_struct(inT32 count, const char *name = NULL); +// free a structure. +extern void free_struct(void *deadstruct, inT32, const char *name = NULL); +// get some memory +extern void *alloc_mem(inT32 count); +// get some memory initialized to 0. +extern void *alloc_big_zeros(inT32 count); +// free mem from alloc_mem +extern void free_mem(void *oldchunk); +// free mem from alloc_big_zeros +extern void free_big_mem(void *oldchunk); + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/ndminx.h b/3rdparty/hgOCR/include/ccutil/ndminx.h new file mode 100644 index 00000000..9eee76c0 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ndminx.h @@ -0,0 +1,31 @@ +/********************************************************************** + * File: ndminx.h (Formerly ndminmax.h) + * Description: Extended ascii chars + * Author: Phil Cheatle + * Created: Mon Mar 29 14:46:01 BST 1993 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef NDMINX_H +#define NDMINX_H + +#ifndef MAX +#define MAX(x,y) (((x) >= (y))?(x):(y)) +#endif + +#ifndef MIN +#define MIN(x,y) (((x) <= (y))?(x):(y)) +#endif + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/nwmain.h b/3rdparty/hgOCR/include/ccutil/nwmain.h new file mode 100644 index 00000000..a9b1926a --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/nwmain.h @@ -0,0 +1,175 @@ +/********************************************************************** + * File: nwmain.h + * Description: Tool to declare main, making windows invisible. + * Author: Ray Smith + * Created: Fri Sep 07 13:27:50 MDT 1995 + * + * (C) Copyright 1995, Hewlett-Packard Co. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef RUNMAIN_H +#define RUNMAIN_H + +#include "host.h" +#include "params.h" + +#define DECLARE_MAIN(ARGC,ARGV)\ +STRING_VAR(init_config_file,"config","Config file to read on startup");\ +REALLY_DECLARE_MAIN(ARGC,ARGV) + +#define DECLARE_MAIN_CONFIG(ARGC,ARGV,NAME)\ +STRING_VAR(init_config_file,NAME,"Config file to read on startup");\ +REALLY_DECLARE_MAIN(ARGC,ARGV) + +#ifndef __UNIX__ + +#define REALLY_DECLARE_MAIN(ARGC,ARGV)\ +\ +/**********************************************************************\ +* parse_args\ +*\ +* Turn a list of args into a new list of args with each separate\ +* whitespace spaced string being an arg.\ +**********************************************************************/\ +\ +inT32 parse_args( /*refine arg list*/\ +inT32 argc, /*no of input args*/\ +char *argv[], /*input args*/\ +char *arglist[] /*output args*/\ +)\ +{\ + inT32 argcount; /*converted argc*/\ + char *testchar; /*char in option string*/\ + inT32 arg; /*current argument*/\ +\ + argcount=0; /*no of options*/\ + for (arg=0;argm_pszExeName);\ + argsin[1]=strdup(theapp->m_lpCmdLine);\ +/*allocate memory for the args. There can never be more than half*/\ +/*the total number of characters in the arguments.*/\ + argv=(char**)malloc(((strlen(argsin[0])+strlen(argsin[1]))/2+1)*sizeof(char*));\ +\ +/*now construct argv as it should be for C.*/\ + argc=parse_args(2,argsin,argv);\ +\ +/*call main(argc,argv) here*/\ + exit_code=real_main(argc,(const char **)argv);\ +\ +\ +/*now get rid of the main app window*/\ + if (theapp!=NULL && theapp->m_pMainWnd!=NULL)\ + PostMessage(theapp->m_pMainWnd->m_hWnd,WM_QUIT,0,0);\ + free(argsin[0]);\ + free(argsin[1]);\ + free(argv);\ + global_exit_code=exit_code;\ + return exit_code;\ +}\ +\ +inT32 real_main(inT32 ARGC,const char* ARGV[])\ + +#else + +#define REALLY_DECLARE_MAIN(ARGC,ARGV)\ +\ +/**********************************************************************\ +* parse_args\ +*\ +* Turn a list of args into a new list of args with each separate\ +* whitespace spaced string being an arg.\ +**********************************************************************/\ +\ +inT32 parse_args( /*refine arg list*/\ +inT32 argc, /*no of input args*/\ +char *argv[], /*input args*/\ +char *arglist[] /*output args*/\ +)\ +{\ + inT32 argcount; /*converted argc*/\ + char *testchar; /*char in option string*/\ + inT32 arg; /*current argument*/\ +\ + argcount=0; /*no of options*/\ + for (arg=0;arg +class ObjectCache { + public: + ObjectCache() {} + ~ObjectCache() { + mu_.Lock(); + for (int i = 0; i < cache_.size(); i++) { + if (cache_[i].count > 0) { + tprintf("ObjectCache(%p)::~ObjectCache(): WARNING! LEAK! object %p " + "still has count %d (id %s)\n", + this, cache_[i].object, cache_[i].count, + cache_[i].id.string()); + } else { + delete cache_[i].object; + cache_[i].object = NULL; + } + } + mu_.Unlock(); + } + + // Return a pointer to the object identified by id. + // If we haven't yet loaded the object, use loader to load it. + // If loader fails to load it, record a NULL entry in the cache + // and return NULL -- further attempts to load will fail (even + // with a different loader) until DeleteUnusedObjects() is called. + // We delete the given loader. + T *Get(STRING id, + TessResultCallback *loader) { + T *retval = NULL; + mu_.Lock(); + for (int i = 0; i < cache_.size(); i++) { + if (id == cache_[i].id) { + retval = cache_[i].object; + if (cache_[i].object != NULL) { + cache_[i].count++; + } + mu_.Unlock(); + delete loader; + return retval; + } + } + cache_.push_back(ReferenceCount()); + ReferenceCount &rc = cache_.back(); + rc.id = id; + retval = rc.object = loader->Run(); + rc.count = (retval != NULL) ? 1 : 0; + mu_.Unlock(); + return retval; + } + + // Decrement the count for t. + // Return whether we knew about the given pointer. + bool Free(T *t) { + if (t == NULL) return false; + mu_.Lock(); + for (int i = 0; i < cache_.size(); i++) { + if (cache_[i].object == t) { + --cache_[i].count; + mu_.Unlock(); + return true; + } + } + mu_.Unlock(); + return false; + } + + void DeleteUnusedObjects() { + mu_.Lock(); + for (int i = cache_.size() - 1; i >= 0; i--) { + if (cache_[i].count <= 0) { + delete cache_[i].object; + cache_.remove(i); + } + } + mu_.Unlock(); + } + + private: + struct ReferenceCount { + STRING id; // A unique ID to identify the object (think path on disk) + T *object; // A copy of the object in memory. Can be delete'd. + int count; // A count of the number of active users of this object. + }; + + CCUtilMutex mu_; + GenericVector cache_; +}; + +} // namespace tesseract + + +#endif // TESSERACT_CCUTIL_OBJECT_CACHE_H_ diff --git a/3rdparty/hgOCR/include/ccutil/ocrclass.h b/3rdparty/hgOCR/include/ccutil/ocrclass.h new file mode 100644 index 00000000..cb83c6d6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/ocrclass.h @@ -0,0 +1,167 @@ +/********************************************************************** + * File: ocrclass.h + * Description: Class definitions and constants for the OCR API. + * Author: Hewlett-Packard Co + * + * (C) Copyright 1996, Hewlett-Packard Co. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +/********************************************************************** + * This file contains typedefs for all the structures used by + * the HP OCR interface. + * The code is designed to be used with either a C or C++ compiler. + * The structures are designed to allow them to be used with any + * structure alignment up to 8. + **********************************************************************/ + +#ifndef CCUTIL_OCRCLASS_H_ +#define CCUTIL_OCRCLASS_H_ + +#ifndef __GNUC__ +#ifdef _WIN32 +#include "gettimeofday.h" +#endif +#else +#include +#endif +#include +#include "host.h" + +/*Maximum lengths of various strings*/ +#define MAX_FONT_NAME 34 /*name of font */ +#define MAX_OCR_NAME 32 /*name of engine */ +#define MAX_OCR_VERSION 17 /*version code of engine */ + +/*pitch set definitions are identical to RTF*/ +#define PITCH_DEF 0 /*default */ +#define PITCH_FIXED 1 /*fixed pitch */ +#define PITCH_VAR 2 /*variable pitch */ + +/********************************************************************** + * EANYCODE_CHAR + * Description of a single character. The character code is defined by + * the character set of the current font. + * Output text is sent as an array of these structures. + * Spaces and line endings in the output are represented in the + * structures of the surrounding characters. They are not directly + * represented as characters. + * The first character in a word has a positive value of blanks. + * Missing information should be set to the defaults in the comments. + * If word bounds are known, but not character bounds, then the top and + * bottom of each character should be those of the word. The left of the + * first and right of the last char in each word should be set. All other + * lefts and rights should be set to -1. + * If set, the values of right and bottom are left+width and top+height. + * Most of the members come directly from the parameters to ocr_append_char. + * The formatting member uses the enhancement parameter and combines the + * line direction stuff into the top 3 bits. + * The coding is 0=RL char, 1=LR char, 2=DR NL, 3=UL NL, 4=DR Para, + * 5=UL Para, 6=TB char, 7=BT char. API users do not need to know what + * the coding is, only that it is backwards compatible with the previous + * version. + **********************************************************************/ + +typedef struct { /*single character */ +// It should be noted that the format for char_code for version 2.0 and beyond +// is UTF8 which means that ASCII characters will come out as one structure but +// other characters will be returned in two or more instances of this structure +// with a single byte of the UTF8 code in each, but each will have the same +// bounding box. Programs which want to handle languagues with different +// characters sets will need to handle extended characters appropriately, but +// *all* code needs to be prepared to receive UTF8 coded characters for +// characters such as bullet and fancy quotes. + uinT16 char_code; /*character itself */ + inT16 left; /*of char (-1) */ + inT16 right; /*of char (-1) */ + inT16 top; /*of char (-1) */ + inT16 bottom; /*of char (-1) */ + inT16 font_index; /*what font (0) */ + uinT8 confidence; /*0=perfect, 100=reject (0/100) */ + uinT8 point_size; /*of char, 72=i inch, (10) */ + inT8 blanks; /*no of spaces before this char (1) */ + uinT8 formatting; /*char formatting (0) */ +} EANYCODE_CHAR; /*single character */ + +/********************************************************************** + * ETEXT_DESC + * Description of the output of the OCR engine. + * This structure is used as both a progress monitor and the final + * output header, since it needs to be a valid progress monitor while + * the OCR engine is storing its output to shared memory. + * During progress, all the buffer info is -1. + * Progress starts at 0 and increases to 100 during OCR. No other constraint. + * Additionally the progress callback contains the bounding box of the word that + * is currently being processed. + * Every progress callback, the OCR engine must set ocr_alive to 1. + * The HP side will set ocr_alive to 0. Repeated failure to reset + * to 1 indicates that the OCR engine is dead. + * If the cancel function is not null then it is called with the number of + * user words found. If it returns true then operation is cancelled. + **********************************************************************/ +typedef bool (*CANCEL_FUNC)(void* cancel_this, int words); +typedef bool (*PROGRESS_FUNC)(int progress, int left, int right, int top, + int bottom); + +class ETEXT_DESC { // output header + public: + inT16 count; /// chars in this buffer(0) + inT16 progress; /// percent complete increasing (0-100) + /** Progress monitor covers word recognition and it does not cover layout + * analysis. + * See Ray comment in https://github.com/tesseract-ocr/tesseract/pull/27 */ + inT8 more_to_come; /// true if not last + volatile inT8 ocr_alive; /// ocr sets to 1, HP 0 + inT8 err_code; /// for errcode use + CANCEL_FUNC cancel; /// returns true to cancel + PROGRESS_FUNC progress_callback; /// called whenever progress increases + void* cancel_this; /// this or other data for cancel + struct timeval end_time; /// Time to stop. Expected to be set only + /// by call to set_deadline_msecs(). + EANYCODE_CHAR text[1]; /// character data + + ETEXT_DESC() + : count(0), + progress(0), + more_to_come(0), + ocr_alive(0), + err_code(0), + cancel(NULL), + progress_callback(NULL), + cancel_this(NULL) { + end_time.tv_sec = 0; + end_time.tv_usec = 0; + } + + // Sets the end time to be deadline_msecs milliseconds from now. + void set_deadline_msecs(inT32 deadline_msecs) { + gettimeofday(&end_time, NULL); + inT32 deadline_secs = deadline_msecs / 1000; + end_time.tv_sec += deadline_secs; + end_time.tv_usec += (deadline_msecs - deadline_secs * 1000) * 1000; + if (end_time.tv_usec > 1000000) { + end_time.tv_usec -= 1000000; + ++end_time.tv_sec; + } + } + + // Returns false if we've not passed the end_time, or have not set a deadline. + bool deadline_exceeded() const { + if (end_time.tv_sec == 0 && end_time.tv_usec == 0) return false; + struct timeval now; + gettimeofday(&now, NULL); + return (now.tv_sec > end_time.tv_sec || (now.tv_sec == end_time.tv_sec && + now.tv_usec > end_time.tv_usec)); + } +}; + +#endif // CCUTIL_OCRCLASS_H_ diff --git a/3rdparty/hgOCR/include/ccutil/params.cpp b/3rdparty/hgOCR/include/ccutil/params.cpp new file mode 100644 index 00000000..7ae26530 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/params.cpp @@ -0,0 +1,224 @@ +/********************************************************************** + * File: params.cpp + * Description: Initialization and setting of Tesseract parameters. + * Author: Ray Smith + * Created: Fri Feb 22 16:22:34 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include +#include +#include + +#include "genericvector.h" +#include "scanutils.h" +#include "tprintf.h" +#include "params.h" + +#define PLUS '+' //flag states +#define MINUS '-' +#define EQUAL '=' + +tesseract::ParamsVectors *GlobalParams() { + static tesseract::ParamsVectors global_params = tesseract::ParamsVectors(); + return &global_params; +} + +namespace tesseract { + +bool ParamUtils::ReadParamsFile(const char *file, + SetParamConstraint constraint, + ParamsVectors *member_params) { + inT16 nameoffset; // offset for real name + FILE *fp; // file pointer + // iterators + + if (*file == PLUS) { + nameoffset = 1; + } else if (*file == MINUS) { + nameoffset = 1; + } else { + nameoffset = 0; + } + + fp = fopen(file + nameoffset, "rb"); + if (fp == NULL) { + tprintf("read_params_file: Can't open %s\n", file + nameoffset); + return true; + } + const bool anyerr = ReadParamsFromFp(fp, -1, constraint, member_params); + fclose(fp); + return anyerr; +} + +bool ParamUtils::ReadParamsFromFp(FILE *fp, inT64 end_offset, + SetParamConstraint constraint, + ParamsVectors *member_params) { + char line[MAX_PATH]; // input line + bool anyerr = false; // true if any error + bool foundit; // found parameter + char *valptr; // value field + + while ((end_offset < 0 || ftell(fp) < end_offset) && + fgets(line, MAX_PATH, fp)) { + if (line[0] != '\r' && line[0] != '\n' && line[0] != '#') { + chomp_string(line); // remove newline + for (valptr = line; *valptr && *valptr != ' ' && *valptr != '\t'; + valptr++); + if (*valptr) { // found blank + *valptr = '\0'; // make name a string + do + valptr++; // find end of blanks + while (*valptr == ' ' || *valptr == '\t'); + } + foundit = SetParam(line, valptr, constraint, member_params); + + if (!foundit) { + anyerr = true; // had an error + tprintf("read_params_file: parameter not found: %s\n", line); + exit(1); + } + } + } + return anyerr; +} + +bool ParamUtils::SetParam(const char *name, const char* value, + SetParamConstraint constraint, + ParamsVectors *member_params) { + // Look for the parameter among string parameters. + StringParam *sp = FindParam(name, GlobalParams()->string_params, + member_params->string_params); + if (sp != NULL && sp->constraint_ok(constraint)) sp->set_value(value); + if (*value == '\0') return (sp != NULL); + + // Look for the parameter among int parameters. + int intval; + IntParam *ip = FindParam(name, GlobalParams()->int_params, + member_params->int_params); + if (ip && ip->constraint_ok(constraint) && + sscanf(value, "%d", &intval) == 1) ip->set_value(intval); + + // Look for the parameter among bool parameters. + BoolParam *bp = FindParam(name, GlobalParams()->bool_params, + member_params->bool_params); + if (bp != NULL && bp->constraint_ok(constraint)) { + if (*value == 'T' || *value == 't' || + *value == 'Y' || *value == 'y' || *value == '1') { + bp->set_value(true); + } else if (*value == 'F' || *value == 'f' || + *value == 'N' || *value == 'n' || *value == '0') { + bp->set_value(false); + } + } + + // Look for the parameter among double parameters. + double doubleval; + DoubleParam *dp = FindParam(name, GlobalParams()->double_params, + member_params->double_params); + if (dp != NULL && dp->constraint_ok(constraint)) { +#ifdef EMBEDDED + doubleval = strtofloat(value); +#else + if (sscanf(value, "%lf", &doubleval) == 1) +#endif + dp->set_value(doubleval); + } + return (sp || ip || bp || dp); +} + +bool ParamUtils::GetParamAsString(const char *name, + const ParamsVectors* member_params, + STRING *value) { + // Look for the parameter among string parameters. + StringParam *sp = FindParam(name, GlobalParams()->string_params, + member_params->string_params); + if (sp) { + *value = sp->string(); + return true; + } + // Look for the parameter among int parameters. + IntParam *ip = FindParam(name, GlobalParams()->int_params, + member_params->int_params); + if (ip) { + char buf[128]; + snprintf(buf, sizeof(buf), "%d", inT32(*ip)); + *value = buf; + return true; + } + // Look for the parameter among bool parameters. + BoolParam *bp = FindParam(name, GlobalParams()->bool_params, + member_params->bool_params); + if (bp != NULL) { + *value = BOOL8(*bp) ? "1": "0"; + return true; + } + // Look for the parameter among double parameters. + DoubleParam *dp = FindParam(name, GlobalParams()->double_params, + member_params->double_params); + if (dp != NULL) { + char buf[128]; + snprintf(buf, sizeof(buf), "%g", double(*dp)); + *value = buf; + return true; + } + return false; +} + +void ParamUtils::PrintParams(FILE *fp, const ParamsVectors *member_params) { + int v, i; + int num_iterations = (member_params == NULL) ? 1 : 2; + for (v = 0; v < num_iterations; ++v) { + const ParamsVectors *vec = (v == 0) ? GlobalParams() : member_params; + for (i = 0; i < vec->int_params.size(); ++i) { + fprintf(fp, "%s\t%d\t%s\n", vec->int_params[i]->name_str(), + (inT32)(*vec->int_params[i]), vec->int_params[i]->info_str()); + } + for (i = 0; i < vec->bool_params.size(); ++i) { + fprintf(fp, "%s\t%d\t%s\n", vec->bool_params[i]->name_str(), + (BOOL8)(*vec->bool_params[i]), vec->bool_params[i]->info_str()); + } + for (int i = 0; i < vec->string_params.size(); ++i) { + fprintf(fp, "%s\t%s\t%s\n", vec->string_params[i]->name_str(), + vec->string_params[i]->string(), vec->string_params[i]->info_str()); + } + for (int i = 0; i < vec->double_params.size(); ++i) { + fprintf(fp, "%s\t%g\t%s\n", vec->double_params[i]->name_str(), + (double)(*vec->double_params[i]), vec->double_params[i]->info_str()); + } + } +} + +// Resets all parameters back to default values; +void ParamUtils::ResetToDefaults(ParamsVectors* member_params) { + int v, i; + int num_iterations = (member_params == NULL) ? 1 : 2; + for (v = 0; v < num_iterations; ++v) { + ParamsVectors *vec = (v == 0) ? GlobalParams() : member_params; + for (i = 0; i < vec->int_params.size(); ++i) { + vec->int_params[i]->ResetToDefault(); + } + for (i = 0; i < vec->bool_params.size(); ++i) { + vec->bool_params[i]->ResetToDefault(); + } + for (int i = 0; i < vec->string_params.size(); ++i) { + vec->string_params[i]->ResetToDefault(); + } + for (int i = 0; i < vec->double_params.size(); ++i) { + vec->double_params[i]->ResetToDefault(); + } + } +} + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/params.h b/3rdparty/hgOCR/include/ccutil/params.h new file mode 100644 index 00000000..c168dbe4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/params.h @@ -0,0 +1,325 @@ +/********************************************************************** + * File: params.h + * Description: Class definitions of the *_VAR classes for tunable constants. + * Author: Ray Smith + * Created: Fri Feb 22 11:26:25 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef PARAMS_H +#define PARAMS_H + +#include + +#include "genericvector.h" +#include "strngs.h" + +namespace tesseract { + +class IntParam; +class BoolParam; +class StringParam; +class DoubleParam; + +// Enum for constraints on what kind of params should be set by SetParam(). +enum SetParamConstraint { + SET_PARAM_CONSTRAINT_NONE, + SET_PARAM_CONSTRAINT_DEBUG_ONLY, + SET_PARAM_CONSTRAINT_NON_DEBUG_ONLY, + SET_PARAM_CONSTRAINT_NON_INIT_ONLY, +}; + +struct ParamsVectors { + GenericVector int_params; + GenericVector bool_params; + GenericVector string_params; + GenericVector double_params; +}; + +// Utility functions for working with Tesseract parameters. +class ParamUtils { + public: + // Reads a file of parameter definitions and set/modify the values therein. + // If the filename begins with a + or -, the BoolVariables will be + // ORed or ANDed with any current values. + // Blank lines and lines beginning # are ignored. + // Values may have any whitespace after the name and are the rest of line. + static bool TESS_API ReadParamsFile( + const char *file, // filename to read + SetParamConstraint constraint, + ParamsVectors *member_params); + + // Read parameters from the given file pointer (stop at end_offset). + static bool ReadParamsFromFp(FILE *fp, inT64 end_offset, + SetParamConstraint constraint, + ParamsVectors *member_params); + + // Set a parameters to have the given value. + static bool SetParam(const char *name, const char* value, + SetParamConstraint constraint, + ParamsVectors *member_params); + + // Returns the pointer to the parameter with the given name (of the + // appropriate type) if it was found in the vector obtained from + // GlobalParams() or in the given member_params. + template + static T *FindParam(const char *name, + const GenericVector &global_vec, + const GenericVector &member_vec) { + int i; + for (i = 0; i < global_vec.size(); ++i) { + if (strcmp(global_vec[i]->name_str(), name) == 0) return global_vec[i]; + } + for (i = 0; i < member_vec.size(); ++i) { + if (strcmp(member_vec[i]->name_str(), name) == 0) return member_vec[i]; + } + return NULL; + } + // Removes the given pointer to the param from the given vector. + template + static void RemoveParam(T *param_ptr, GenericVector *vec) { + for (int i = 0; i < vec->size(); ++i) { + if ((*vec)[i] == param_ptr) { + vec->remove(i); + return; + } + } + } + // Fetches the value of the named param as a STRING. Returns false if not + // found. + static bool GetParamAsString(const char *name, + const ParamsVectors* member_params, + STRING *value); + + // Print parameters to the given file. + static void PrintParams(FILE *fp, const ParamsVectors *member_params); + + // Resets all parameters back to default values; + static void ResetToDefaults(ParamsVectors* member_params); +}; + +// Definition of various parameter types. +class Param { + public: + ~Param() {} + + const char *name_str() const { return name_; } + const char *info_str() const { return info_; } + bool is_init() const { return init_; } + bool is_debug() const { return debug_; } + bool constraint_ok(SetParamConstraint constraint) const { + return (constraint == SET_PARAM_CONSTRAINT_NONE || + (constraint == SET_PARAM_CONSTRAINT_DEBUG_ONLY && + this->is_debug()) || + (constraint == SET_PARAM_CONSTRAINT_NON_DEBUG_ONLY && + !this->is_debug()) || + (constraint == SET_PARAM_CONSTRAINT_NON_INIT_ONLY && + !this->is_init())); + } + + protected: + Param(const char *name, const char *comment, bool init) : + name_(name), info_(comment), init_(init) { + debug_ = (strstr(name, "debug") != NULL) || (strstr(name, "display")); + } + + const char *name_; // name of this parameter + const char *info_; // for menus + bool init_; // needs to be set before init + bool debug_; +}; + +class IntParam : public Param { + public: + IntParam(inT32 value, const char *name, const char *comment, bool init, + ParamsVectors *vec) : Param(name, comment, init) { + value_ = value; + default_ = value; + params_vec_ = &(vec->int_params); + vec->int_params.push_back(this); + } + ~IntParam() { ParamUtils::RemoveParam(this, params_vec_); } + operator inT32() const { return value_; } + void operator=(inT32 value) { value_ = value; } + void set_value(inT32 value) { value_ = value; } + void ResetToDefault() { + value_ = default_; + } + + private: + inT32 value_; + inT32 default_; + // Pointer to the vector that contains this param (not owened by this class). + GenericVector *params_vec_; +}; + +class BoolParam : public Param { + public: + BoolParam(bool value, const char *name, const char *comment, bool init, + ParamsVectors *vec) : Param(name, comment, init) { + value_ = value; + default_ = value; + params_vec_ = &(vec->bool_params); + vec->bool_params.push_back(this); + } + ~BoolParam() { ParamUtils::RemoveParam(this, params_vec_); } + operator BOOL8() const { return value_; } + void operator=(BOOL8 value) { value_ = value; } + void set_value(BOOL8 value) { value_ = value; } + void ResetToDefault() { + value_ = default_; + } + + private: + BOOL8 value_; + BOOL8 default_; + // Pointer to the vector that contains this param (not owned by this class). + GenericVector *params_vec_; +}; + +class StringParam : public Param { + public: + StringParam(const char *value, const char *name, + const char *comment, bool init, + ParamsVectors *vec) : Param(name, comment, init) { + value_ = value; + default_ = value; + params_vec_ = &(vec->string_params); + vec->string_params.push_back(this); + } + ~StringParam() { ParamUtils::RemoveParam(this, params_vec_); } + operator STRING &() { return value_; } + const char *string() const { return value_.string(); } + const char *c_str() const { return value_.string(); } + bool empty() { return value_.length() <= 0; } + bool operator==(const STRING& other) { return value_ == other; } + void operator=(const STRING& value) { value_ = value; } + void set_value(const STRING& value) { value_ = value; } + void ResetToDefault() { + value_ = default_; + } + + private: + STRING value_; + STRING default_; + // Pointer to the vector that contains this param (not owened by this class). + GenericVector *params_vec_; +}; + +class DoubleParam : public Param { + public: + DoubleParam(double value, const char *name, const char *comment, + bool init, ParamsVectors *vec) : Param(name, comment, init) { + value_ = value; + default_ = value; + params_vec_ = &(vec->double_params); + vec->double_params.push_back(this); + } + ~DoubleParam() { ParamUtils::RemoveParam(this, params_vec_); } + operator double() const { return value_; } + void operator=(double value) { value_ = value; } + void set_value(double value) { value_ = value; } + void ResetToDefault() { + value_ = default_; + } + + private: + double value_; + double default_; + // Pointer to the vector that contains this param (not owned by this class). + GenericVector *params_vec_; +}; + +} // namespace tesseract + +// Global parameter lists. +// +// To avoid the problem of undetermined order of static initialization +// global_params are accessed through the GlobalParams function that +// initializes the static pointer to global_params only on the first +// first time GlobalParams() is called. +// +// TODO(daria): remove GlobalParams() when all global Tesseract +// parameters are converted to members. +tesseract::ParamsVectors TESS_API *GlobalParams(); + +/************************************************************************* + * Note on defining parameters. + * + * The values of the parameters defined with *_INIT_* macros are guaranteed + * to be loaded from config files before Tesseract initialization is done + * (there is no such guarantee for parameters defined with the other macros). + *************************************************************************/ + +#define INT_VAR_H(name,val,comment)\ + tesseract::IntParam name + +#define BOOL_VAR_H(name,val,comment)\ + tesseract::BoolParam name + +#define STRING_VAR_H(name,val,comment)\ + tesseract::StringParam name + +#define double_VAR_H(name,val,comment)\ + tesseract::DoubleParam name + +#define INT_VAR(name,val,comment)\ + tesseract::IntParam name(val,#name,comment,false,GlobalParams()) + +#define BOOL_VAR(name,val,comment)\ + tesseract::BoolParam name(val,#name,comment,false,GlobalParams()) + +#define STRING_VAR(name,val,comment)\ + tesseract::StringParam name(val,#name,comment,false,GlobalParams()) + +#define double_VAR(name,val,comment)\ + tesseract::DoubleParam name(val,#name,comment,false,GlobalParams()) + +#define INT_INIT_VAR(name,val,comment)\ + tesseract::IntParam name(val,#name,comment,true,GlobalParams()) + +#define BOOL_INIT_VAR(name,val,comment)\ + tesseract::BoolParam name(val,#name,comment,true,GlobalParams()) + +#define STRING_INIT_VAR(name,val,comment)\ + tesseract::StringParam name(val,#name,comment,true,GlobalParams()) + +#define double_INIT_VAR(name,val,comment)\ + tesseract::DoubleParam name(val,#name,comment,true,GlobalParams()) + +#define INT_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, false, vec) + +#define BOOL_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, false, vec) + +#define STRING_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, false, vec) + +#define double_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, false, vec) + +#define INT_INIT_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, true, vec) + +#define BOOL_INIT_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, true, vec) + +#define STRING_INIT_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, true, vec) + +#define double_INIT_MEMBER(name, val, comment, vec)\ + name(val, #name, comment, true, vec) + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/platform.h b/3rdparty/hgOCR/include/ccutil/platform.h new file mode 100644 index 00000000..99bff4b2 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/platform.h @@ -0,0 +1,94 @@ +/////////////////////////////////////////////////////////////////////// +// File: platform.h +// Description: Place holder +// Author: +// Created: +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_PLATFORM_H__ +#define TESSERACT_CCUTIL_PLATFORM_H__ + +#include + +#define DLLSYM +#ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX +#endif /* NOMINMAX */ +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef __GNUC__ +#define ultoa _ultoa +#endif /* __GNUC__ */ +#define SIGNED +#if defined(_MSC_VER) +#if (_MSC_VER < 1900) +#define snprintf _snprintf +#endif +#if (_MSC_VER <= 1400) +#define vsnprintf _vsnprintf +#endif /* (_MSC_VER <= 1400) */ +#endif /* defined(_MSC_VER) */ +#else +#define __UNIX__ +#include +#ifndef PATH_MAX +#define MAX_PATH 4096 +#else +#define MAX_PATH PATH_MAX +#endif +#define SIGNED signed +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) + #if defined(TESS_EXPORTS) + #define TESS_API __declspec(dllexport) + #elif defined(TESS_IMPORTS) + #define TESS_API __declspec(dllimport) + #else + #define TESS_API + #endif + #define TESS_LOCAL +#else + #if __GNUC__ >= 4 + #if defined(TESS_EXPORTS) || defined(TESS_IMPORTS) + #define TESS_API __attribute__ ((visibility ("default"))) + #define TESS_LOCAL __attribute__ ((visibility ("hidden"))) + #else + #define TESS_API + #define TESS_LOCAL + #endif + #else + #define TESS_API + #define TESS_LOCAL + #endif +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) + #define _TESS_FILE_BASENAME_ \ + (strrchr(__FILE__, '\\') ? strrchr(__FILE__, '\\') + 1 : __FILE__) +#else // Unices + #define _TESS_FILE_BASENAME_ \ + (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#endif + +#endif // TESSERACT_CCUTIL_PLATFORM_H__ diff --git a/3rdparty/hgOCR/include/ccutil/qrsequence.h b/3rdparty/hgOCR/include/ccutil/qrsequence.h new file mode 100644 index 00000000..d49d7550 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/qrsequence.h @@ -0,0 +1,80 @@ +/////////////////////////////////////////////////////////////////////// +// File: qrsequence.h +// Description: Quasi-random sequence generator class. +// Author: Ranjith Unnikrishnan +// Created: Wed May 20 2009 +// +// Class to generate a (deterministic) quasi-random Van der Corput sequence that +// covers the interval [0,N) without repetition. +// +// The sequence is generated by reversing the base-2 representation of the +// sequence of natural numbers {0, 1,... M-1}, where M is 2^{num_bits_} and +// num_bits is the minimum number of bits required to represent N. If a reversed +// numbers is >= N it is rejected and the next natural number is considered +// until a valid output number is found. +// +// (C) Copyright 2009, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required +// by applicable law or agreed to in writing, software distributed under the +// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS +// OF ANY KIND, either express or implied. See the License for the specific +// language governing permissions and limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_QRSEQUENCE_H_ +#define TESSERACT_CCUTIL_QRSEQUENCE_H_ + +#include + +class QRSequenceGenerator { + public: + // Object is initalized with the size of the output range. + explicit QRSequenceGenerator(int N) : N_(N), next_num_(0) { + num_bits_ = static_cast(ceil(log(static_cast(N)) / log(2.0))); + } + + // Main worker method that retrieves the next number in the sequence. + // Returns kInvalidVal if called more than N times after object initialization + int GetVal() { + const int kInvalidVal = -1; + const int kMaxNaturalNumberValue = 1 << num_bits_; + if (next_num_ >= kMaxNaturalNumberValue) + return kInvalidVal; + int n = next_num_; + + while (next_num_ < kMaxNaturalNumberValue) { + n = GetBinaryReversedInteger(next_num_++); + if (n < N_) break; + } + return (next_num_ > kMaxNaturalNumberValue) ? kInvalidVal : n; + } + + protected: + // Outputs the integer formed by reversing the bits of the input integer. Only + // the lowest num_bits_ bits of the input integer are reversed. + int GetBinaryReversedInteger(int in_val) const { + int bit_pos = num_bits_; + int out_val = 0; + while(bit_pos--) { + // Set the value of the last bit. + out_val |= (in_val & 0x1); + if (bit_pos > 0) { + // Left-shift output value to prepare for storing the next bit. + out_val <<= 1; + } + // Right-shift input value to prepare for retrieving the next bit. + in_val >>= 1; + } + return out_val; + } + int N_; + // Next number to be considered for reversal and output. + int next_num_; + // number of bits required to represent the numbers of the sequence + int num_bits_; +}; + +#endif // TESSERACT_CCUTIL_QRSEQUENCE_H_ diff --git a/3rdparty/hgOCR/include/ccutil/scanutils.cpp b/3rdparty/hgOCR/include/ccutil/scanutils.cpp new file mode 100644 index 00000000..fac50b2e --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/scanutils.cpp @@ -0,0 +1,579 @@ +// Copyright 2006 Google Inc. +// All Rights Reserved. +// Author: renn +// +// The fscanf, vfscanf and creat functions are implemented so that their +// functionality is mostly like their stdio counterparts. However, currently +// these functions do not use any buffering, making them rather slow. +// File streams are thus processed one character at a time. +// Although the implementations of the scanf functions do lack a few minor +// features, they should be sufficient for their use in tesseract. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "scanutils.h" +#include "tprintf.h" + +enum Flags { + FL_SPLAT = 0x01, // Drop the value, do not assign + FL_INV = 0x02, // Character-set with inverse + FL_WIDTH = 0x04, // Field width specified + FL_MINUS = 0x08, // Negative number +}; + +enum Ranks { + RANK_CHAR = -2, + RANK_SHORT = -1, + RANK_INT = 0, + RANK_LONG = 1, + RANK_LONGLONG = 2, + RANK_PTR = INT_MAX // Special value used for pointers +}; + +const enum Ranks kMinRank = RANK_CHAR; +const enum Ranks kMaxRank = RANK_LONGLONG; + +const enum Ranks kIntMaxRank = RANK_LONGLONG; +const enum Ranks kSizeTRank = RANK_LONG; +const enum Ranks kPtrDiffRank = RANK_LONG; + +enum Bail { + BAIL_NONE = 0, // No error condition + BAIL_EOF, // Hit EOF + BAIL_ERR // Conversion mismatch +}; + +// Helper functions ------------------------------------------------------------ +inline size_t LongBit() { + return CHAR_BIT * sizeof(long); +} + +static inline int +SkipSpace(FILE *s) { + int p; + while (isspace(p = fgetc(s))); + ungetc(p, s); // Make sure next char is available for reading + return p; +} + +static inline void +SetBit(unsigned long *bitmap, unsigned int bit) { + bitmap[bit/LongBit()] |= 1UL << (bit%LongBit()); +} + +static inline int +TestBit(unsigned long *bitmap, unsigned int bit) { + return static_cast(bitmap[bit/LongBit()] >> (bit%LongBit())) & 1; +} + +static inline int DigitValue(int ch, int base) { + if (ch >= '0' && ch <= '9') { + if (base >= 10 || ch <= '7') + return ch-'0'; + } else if (ch >= 'A' && ch <= 'Z' && base == 16) { + return ch-'A'+10; + } else if (ch >= 'a' && ch <= 'z' && base == 16) { + return ch-'a'+10; + } + return -1; +} + +// IO (re-)implementations ----------------------------------------------------- +uintmax_t streamtoumax(FILE* s, int base) { + int minus = 0; + uintmax_t v = 0; + int d, c = 0; + + for (c = fgetc(s); + isspace(static_cast(c)) && (c != EOF); + c = fgetc(s)) {} + + // Single optional + or - + if (c == '-' || c == '+') { + minus = (c == '-'); + c = fgetc(s); + } + + // Assign correct base + if (base == 0) { + if (c == '0') { + c = fgetc(s); + if (c == 'x' || c == 'X') { + base = 16; + c = fgetc(s); + } else { + base = 8; + } + } + } else if (base == 16) { + if (c == '0') { + c = fgetc(s); + if (c == 'x' || c == 'X') c = fgetc(s); + } + } + + // Actual number parsing + for (; (c != EOF) && (d = DigitValue(c, base)) >= 0; c = fgetc(s)) + v = v*base + d; + + ungetc(c, s); + return minus ? -v : v; +} + +double streamtofloat(FILE* s) { + bool minus = false; + uint64_t v = 0; + int d, c; + uint64_t k = 1; + uint64_t w = 0; + + for (c = fgetc(s); + isspace(static_cast(c)) && (c != EOF); + c = fgetc(s)); + + // Single optional + or - + if (c == '-' || c == '+') { + minus = (c == '-'); + c = fgetc(s); + } + + // Actual number parsing + for (; c != EOF && (d = DigitValue(c, 10)) >= 0; c = fgetc(s)) + v = v*10 + d; + if (c == '.') { + for (c = fgetc(s); c != EOF && (d = DigitValue(c, 10)) >= 0; c = fgetc(s)) { + w = w*10 + d; + k *= 10; + } + } + double f = v + static_cast(w) / k; + if (c == 'e' || c == 'E') { + c = fgetc(s); + int expsign = 1; + if (c == '-' || c == '+') { + expsign = (c == '-') ? -1 : 1; + c = fgetc(s); + } + int exponent = 0; + for (; (c != EOF) && (d = DigitValue(c, 10)) >= 0; c = fgetc(s)) { + exponent = exponent * 10 + d; + } + exponent *= expsign; + f *= pow(10.0, static_cast(exponent)); + } + ungetc(c, s); + + return minus ? -f : f; +} + +double strtofloat(const char* s) { + int minus = 0; + int v = 0; + int d; + int k = 1; + int w = 0; + + while(*s && isspace(static_cast(*s))) s++; + + // Single optional + or - + if (*s == '-' || *s == '+') { + minus = (*s == '-'); + s++; + } + + // Actual number parsing + for (; *s && (d = DigitValue(*s, 10)) >= 0; s++) + v = v*10 + d; + if (*s == '.') { + for (++s; *s && (d = DigitValue(*s, 10)) >= 0; s++) { + w = w*10 + d; + k *= 10; + } + } + if (*s == 'e' || *s == 'E') + tprintf("WARNING: Scientific Notation not supported!"); + + double f = static_cast(v) + + static_cast(w) / static_cast(k); + + return minus ? -f : f; +} + +static int tvfscanf(FILE* stream, const char *format, va_list ap); + +int tfscanf(FILE* stream, const char *format, ...) { + va_list ap; + int rv; + + va_start(ap, format); + rv = tvfscanf(stream, format, ap); + va_end(ap); + + return rv; +} + +#ifdef EMBEDDED + +int fscanf(FILE* stream, const char *format, ...) { + va_list ap; + int rv; + + va_start(ap, format); + rv = tvfscanf(stream, format, ap); + va_end(ap); + + return rv; +} + +int vfscanf(FILE* stream, const char *format, ...) { + va_list ap; + int rv; + + va_start(ap, format); + rv = tvfscanf(stream, format, ap); + va_end(ap); + + return rv; +} +#endif + +static int tvfscanf(FILE* stream, const char *format, va_list ap) { + const char *p = format; + char ch; + int q = 0; + uintmax_t val = 0; + int rank = RANK_INT; // Default rank + unsigned int width = UINT_MAX; + int base; + int flags = 0; + enum { + ST_NORMAL, // Ground state + ST_FLAGS, // Special flags + ST_WIDTH, // Field width + ST_MODIFIERS, // Length or conversion modifiers + ST_MATCH_INIT, // Initial state of %[ sequence + ST_MATCH, // Main state of %[ sequence + ST_MATCH_RANGE, // After - in a %[ sequence + } state = ST_NORMAL; + char *sarg = NULL; // %s %c or %[ string argument + enum Bail bail = BAIL_NONE; + int sign; + int converted = 0; // Successful conversions + unsigned long matchmap[((1 << CHAR_BIT)+(CHAR_BIT * sizeof(long) - 1)) / + (CHAR_BIT * sizeof(long))]; + int matchinv = 0; // Is match map inverted? + unsigned char range_start = 0; + off_t start_off = ftell(stream); + + // Skip leading spaces + SkipSpace(stream); + + while ((ch = *p++) && !bail) { + switch (state) { + case ST_NORMAL: + if (ch == '%') { + state = ST_FLAGS; + flags = 0; rank = RANK_INT; width = UINT_MAX; + } else if (isspace(static_cast(ch))) { + SkipSpace(stream); + } else { + if (fgetc(stream) != ch) + bail = BAIL_ERR; // Match failure + } + break; + + case ST_FLAGS: + if (ch == '*') { + flags |= FL_SPLAT; + } else if ('0' <= ch && ch <= '9') { + width = (ch-'0'); + state = ST_WIDTH; + flags |= FL_WIDTH; + } else { + state = ST_MODIFIERS; + p--; // Process this character again + } + break; + + case ST_WIDTH: + if (ch >= '0' && ch <= '9') { + width = width*10+(ch-'0'); + } else { + state = ST_MODIFIERS; + p--; // Process this character again + } + break; + + case ST_MODIFIERS: + switch (ch) { + // Length modifiers - nonterminal sequences + case 'h': + rank--; // Shorter rank + break; + case 'l': + rank++; // Longer rank + break; + case 'j': + rank = kIntMaxRank; + break; + case 'z': + rank = kSizeTRank; + break; + case 't': + rank = kPtrDiffRank; + break; + case 'L': + case 'q': + rank = RANK_LONGLONG; // long double/long long + break; + + default: + // Output modifiers - terminal sequences + state = ST_NORMAL; // Next state will be normal + if (rank < kMinRank) // Canonicalize rank + rank = kMinRank; + else if (rank > kMaxRank) + rank = kMaxRank; + + switch (ch) { + case 'P': // Upper case pointer + case 'p': // Pointer + rank = RANK_PTR; + base = 0; sign = 0; + goto scan_int; + + case 'i': // Base-independent integer + base = 0; sign = 1; + goto scan_int; + + case 'd': // Decimal integer + base = 10; sign = 1; + goto scan_int; + + case 'o': // Octal integer + base = 8; sign = 0; + goto scan_int; + + case 'u': // Unsigned decimal integer + base = 10; sign = 0; + goto scan_int; + + case 'x': // Hexadecimal integer + case 'X': + base = 16; sign = 0; + goto scan_int; + + case 'n': // Number of characters consumed + val = ftell(stream) - start_off; + goto set_integer; + + scan_int: + q = SkipSpace(stream); + if ( q <= 0 ) { + bail = BAIL_EOF; + break; + } + val = streamtoumax(stream, base); + // fall through + + set_integer: + if (!(flags & FL_SPLAT)) { + converted++; + switch(rank) { + case RANK_CHAR: + *va_arg(ap, unsigned char *) + = static_cast(val); + break; + case RANK_SHORT: + *va_arg(ap, unsigned short *) + = static_cast(val); + break; + case RANK_INT: + *va_arg(ap, unsigned int *) + = static_cast(val); + break; + case RANK_LONG: + *va_arg(ap, unsigned long *) + = static_cast(val); + break; + case RANK_LONGLONG: + *va_arg(ap, unsigned long long *) + = static_cast(val); + break; + case RANK_PTR: + *va_arg(ap, void **) + = reinterpret_cast(static_cast(val)); + break; + } + } + break; + + case 'f': // Preliminary float value parsing + case 'g': + case 'G': + case 'e': + case 'E': + q = SkipSpace(stream); + if (q <= 0) { + bail = BAIL_EOF; + break; + } + + { + double fval = streamtofloat(stream); + if (!(flags & FL_SPLAT)) { + if (rank == RANK_INT) + *va_arg(ap, float *) = static_cast(fval); + else if (rank == RANK_LONG) + *va_arg(ap, double *) = static_cast(fval); + converted++; + } + } + break; + + case 'c': // Character + width = (flags & FL_WIDTH) ? width : 1; // Default width == 1 + sarg = va_arg(ap, char *); + while (width--) { + if ((q = fgetc(stream)) <= 0) { + bail = BAIL_EOF; + break; + } + if (!(flags & FL_SPLAT)) { + *sarg++ = q; + converted++; + } + } + break; + + case 's': // String + { + char *sp; + sp = sarg = va_arg(ap, char *); + while (width--) { + q = fgetc(stream); + if (isspace(static_cast(q)) || q <= 0) { + ungetc(q, stream); + break; + } + if (!(flags & FL_SPLAT)) *sp = q; + sp++; + } + if (sarg == sp) { + bail = BAIL_EOF; + } else if (!(flags & FL_SPLAT)) { + *sp = '\0'; // Terminate output + converted++; + } else { + } + } + break; + + case '[': // Character range + sarg = va_arg(ap, char *); + state = ST_MATCH_INIT; + matchinv = 0; + memset(matchmap, 0, sizeof matchmap); + break; + + case '%': // %% sequence + if (fgetc(stream) != '%' ) + bail = BAIL_ERR; + break; + + default: // Anything else + bail = BAIL_ERR; // Unknown sequence + break; + } + } + break; + + case ST_MATCH_INIT: // Initial state for %[ match + if (ch == '^' && !(flags & FL_INV)) { + matchinv = 1; + } else { + SetBit(matchmap, static_cast(ch)); + state = ST_MATCH; + } + break; + + case ST_MATCH: // Main state for %[ match + if (ch == ']') { + goto match_run; + } else if (ch == '-') { + range_start = static_cast(ch); + state = ST_MATCH_RANGE; + } else { + SetBit(matchmap, static_cast(ch)); + } + break; + + case ST_MATCH_RANGE: // %[ match after - + if (ch == ']') { + SetBit(matchmap, static_cast('-')); + goto match_run; + } else { + int i; + for (i = range_start ; i < (static_cast(ch)) ; i++) + SetBit(matchmap, i); + state = ST_MATCH; + } + break; + + match_run: // Match expression finished + char* oarg = sarg; + while (width) { + q = fgetc(stream); + unsigned char qc = static_cast(q); + if (q <= 0 || !(TestBit(matchmap, qc)^matchinv)) { + ungetc(q, stream); + break; + } + if (!(flags & FL_SPLAT)) *sarg = q; + sarg++; + } + if (oarg == sarg) { + bail = (q <= 0) ? BAIL_EOF : BAIL_ERR; + } else if (!(flags & FL_SPLAT)) { + *sarg = '\0'; + converted++; + } + break; + } + } + + if (bail == BAIL_EOF && !converted) + converted = -1; // Return EOF (-1) + + return converted; +} + +#ifdef EMBEDDED +int creat(const char *pathname, mode_t mode) { + return open(pathname, O_CREAT | O_TRUNC | O_WRONLY, mode); +} + +#endif // EMBEDDED diff --git a/3rdparty/hgOCR/include/ccutil/scanutils.h b/3rdparty/hgOCR/include/ccutil/scanutils.h new file mode 100644 index 00000000..a2c42f51 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/scanutils.h @@ -0,0 +1,67 @@ +// Copyright 2006 Google Inc. +// All Rights Reserved. +// Author: renn +// +// Contains file io functions (mainly for file parsing), that might not be +// available, on embedded devices, or that have an incomplete implementation +// there. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TESSERACT_CCUTIL_SCANUTILS_H_ +#define TESSERACT_CCUTIL_SCANUTILS_H_ + +#include +#include +#include +#include + +/** + * fscanf variant to ensure correct reading regardless of locale. + * + * tfscanf parse a file stream according to the given format. See the fscanf + * manpage for more information, as this function attempts to mimic its + * behavior. + * + * @note Note that scientific floating-point notation is not supported. + * + */ +int tfscanf(FILE* stream, const char *format, ...); + +#ifdef EMBEDDED + +// Attempts to parse the given file stream s as an integer of the base +// 'base'. Returns the first successfully parsed integer as a uintmax_t, or +// 0, if none was found. +uintmax_t streamtoumax(FILE* s, int base); + +// Parse a file stream according to the given format. See the fscanf manpage +// for more information, as this function attempts to mimic its behavior. +// Note that scientific loating-point notation is not supported. +int fscanf(FILE* stream, const char *format, ...); + +// Parse a file stream according to the given format. See the fscanf manpage +// for more information, as this function attempts to mimic its behavior. +// Note that scientific loating-point notation is not supported. +int vfscanf(FILE* stream, const char *format, va_list ap); + +// Create a file at the specified path. See the creat manpage for more +// information, as this function attempts to mimic its behavior. +int creat(const char *pathname, mode_t mode); + +// Convert the specified C-String to a float. Returns the first parsed float, +// or 0.0 if no floating point value could be found. Note that scientific +// floating-point notation is not supported. +double strtofloat(const char* s); + +#endif // EMBEDDED + +#endif // TESSERACT_CCUTIL_SCANUTILS_H_ diff --git a/3rdparty/hgOCR/include/ccutil/serialis.cpp b/3rdparty/hgOCR/include/ccutil/serialis.cpp new file mode 100644 index 00000000..0e1dd61f --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/serialis.cpp @@ -0,0 +1,145 @@ +/********************************************************************** + * File: serialis.h (Formerly serialmac.h) + * Description: Inline routines and macros for serialisation functions + * Author: Phil Cheatle + * Created: Tue Oct 08 08:33:12 BST 1991 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "serialis.h" +#include +#include "genericvector.h" + +namespace tesseract { + +TFile::TFile() + : offset_(0), data_(NULL), data_is_owned_(false), is_writing_(false) { +} + +TFile::~TFile() { + if (data_is_owned_) + delete data_; +} + +bool TFile::Open(const STRING& filename, FileReader reader) { + if (!data_is_owned_) { + data_ = new GenericVector; + data_is_owned_ = true; + } + offset_ = 0; + is_writing_ = false; + if (reader == NULL) + return LoadDataFromFile(filename, data_); + else + return (*reader)(filename, data_); +} + +bool TFile::Open(const char* data, int size) { + offset_ = 0; + if (!data_is_owned_) { + data_ = new GenericVector; + data_is_owned_ = true; + } + is_writing_ = false; + data_->resize_no_init(size); + memcpy(&(*data_)[0], data, size); + return true; +} + +bool TFile::Open(FILE* fp, inT64 end_offset) { + offset_ = 0; + inT64 current_pos = ftell(fp); + if (end_offset < 0) { + if (fseek(fp, 0, SEEK_END)) + return false; + end_offset = ftell(fp); + if (fseek(fp, current_pos, SEEK_SET)) + return false; + } + int size = end_offset - current_pos; + is_writing_ = false; + if (!data_is_owned_) { + data_ = new GenericVector; + data_is_owned_ = true; + } + data_->resize_no_init(size); + return static_cast(fread(&(*data_)[0], 1, size, fp)) == size; +} + +char* TFile::FGets(char* buffer, int buffer_size) { + ASSERT_HOST(!is_writing_); + int size = 0; + while (size + 1 < buffer_size && offset_ < data_->size()) { + buffer[size++] = (*data_)[offset_++]; + if ((*data_)[offset_ - 1] == '\n') break; + } + if (size < buffer_size) buffer[size] = '\0'; + return size > 0 ? buffer : NULL; +} + +int TFile::FRead(void* buffer, int size, int count) { + ASSERT_HOST(!is_writing_); + int required_size = size * count; + if (required_size <= 0) return 0; + char* char_buffer = reinterpret_cast(buffer); + if (data_->size() - offset_ < required_size) + required_size = data_->size() - offset_; + if (required_size > 0 && char_buffer != NULL) + memcpy(char_buffer, &(*data_)[offset_], required_size); + offset_ += required_size; + return required_size / size; +} + +void TFile::Rewind() { + ASSERT_HOST(!is_writing_); + offset_ = 0; +} + +void TFile::OpenWrite(GenericVector* data) { + offset_ = 0; + if (data != NULL) { + if (data_is_owned_) delete data_; + data_ = data; + data_is_owned_ = false; + } else if (!data_is_owned_) { + data_ = new GenericVector; + data_is_owned_ = true; + } + is_writing_ = true; + data_->truncate(0); +} + +bool TFile::CloseWrite(const STRING& filename, FileWriter writer) { + ASSERT_HOST(is_writing_); + if (writer == NULL) + return SaveDataToFile(*data_, filename); + else + return (*writer)(*data_, filename); +} + +int TFile::FWrite(const void* buffer, int size, int count) { + ASSERT_HOST(is_writing_); + int total = size * count; + if (total <= 0) return 0; + const char* buf = reinterpret_cast(buffer); + // This isn't very efficient, but memory is so fast compared to disk + // that it is relatively unimportant, and very simple. + for (int i = 0; i < total; ++i) + data_->push_back(buf[i]); + return count; +} + + +} // namespace tesseract. + diff --git a/3rdparty/hgOCR/include/ccutil/serialis.h b/3rdparty/hgOCR/include/ccutil/serialis.h new file mode 100644 index 00000000..8dfac1d7 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/serialis.h @@ -0,0 +1,99 @@ +/********************************************************************** + * File: serialis.h (Formerly serialmac.h) + * Description: Inline routines and macros for serialisation functions + * Author: Phil Cheatle + * Created: Tue Oct 08 08:33:12 BST 1991 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef SERIALIS_H +#define SERIALIS_H + +#include +#include +#include +#include "host.h" + +template class GenericVector; +class STRING; + +/*********************************************************************** + QUOTE_IT MACRO DEFINITION + =========================== +Replace with "". may be an arbitrary number of tokens +***********************************************************************/ + +#define QUOTE_IT( parm ) #parm + +namespace tesseract { + +// Function to read a GenericVector from a whole file. +// Returns false on failure. +typedef bool (*FileReader)(const STRING& filename, GenericVector* data); +// Function to write a GenericVector to a whole file. +// Returns false on failure. +typedef bool (*FileWriter)(const GenericVector& data, + const STRING& filename); + +// Simple file class. +// Allows for portable file input from memory and from foreign file systems. +class TFile { + public: + TFile(); + ~TFile(); + + // All the Open methods load the whole file into memory for reading. + // Opens a file with a supplied reader, or NULL to use the default. + // Note that mixed read/write is not supported. + bool Open(const STRING& filename, FileReader reader); + // From an existing memory buffer. + bool Open(const char* data, int size); + // From an open file and an end offset. + bool Open(FILE* fp, inT64 end_offset); + + // Reads a line like fgets. Returns NULL on EOF, otherwise buffer. + // Reads at most buffer_size bytes, including '\0' terminator, even if + // the line is longer. Does nothing if buffer_size <= 0. + // To use fscanf use FGets and sscanf. + char* FGets(char* buffer, int buffer_size); + // Replicates fread, returning the number of items read. + int FRead(void* buffer, int size, int count); + // Resets the TFile as if it has been Opened, but nothing read. + // Only allowed while reading! + void Rewind(); + + // Open for writing. Either supply a non-NULL data with OpenWrite before + // calling FWrite, (no close required), or supply a NULL data to OpenWrite + // and call CloseWrite to write to a file after the FWrites. + void OpenWrite(GenericVector* data); + bool CloseWrite(const STRING& filename, FileWriter writer); + + // Replicates fwrite, returning the number of items written. + // To use fprintf, use snprintf and FWrite. + int FWrite(const void* buffer, int size, int count); + + private: + // The number of bytes used so far. + int offset_; + // The buffered data from the file. + GenericVector* data_; + // True if the data_ pointer is owned by *this. + bool data_is_owned_; + // True if the TFile is open for writing. + bool is_writing_; +}; + +} // namespace tesseract. + +#endif diff --git a/3rdparty/hgOCR/include/ccutil/sorthelper.h b/3rdparty/hgOCR/include/ccutil/sorthelper.h new file mode 100644 index 00000000..4da13b92 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/sorthelper.h @@ -0,0 +1,108 @@ +/////////////////////////////////////////////////////////////////////// +// File: sorthelper.h +// Description: Generic sort and maxfinding class. +// Author: Ray Smith +// Created: Thu May 20 17:48:21 PDT 2010 +// +// (C) Copyright 2010, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_SORTHELPER_H_ +#define TESSERACT_CCUTIL_SORTHELPER_H_ + +#include +#include "genericvector.h" + +// Generic class to provide functions based on a pair. +// T is the value type. +// The class keeps a count of each value and can return the most frequent +// value or a sorted array of the values with counts. +// Note that this class uses linear search for adding. It is better +// to use the STATS class to get the mode of a large number of values +// in a small space. SortHelper is better to get the mode of a small number +// of values from a large space. +// T must have a copy constructor. +template +class SortHelper { + public: + // Simple pair class to hold the values and counts. + template struct SortPair { + PairT value; + int count; + }; + // qsort function to sort by decreasing count. + static int SortPairsByCount(const void* v1, const void* v2) { + const SortPair* p1 = reinterpret_cast*>(v1); + const SortPair* p2 = reinterpret_cast*>(v2); + return p2->count - p1->count; + } + // qsort function to sort by decreasing value. + static int SortPairsByValue(const void* v1, const void* v2) { + const SortPair* p1 = reinterpret_cast*>(v1); + const SortPair* p2 = reinterpret_cast*>(v2); + if (p2->value - p1->value < 0) return -1; + if (p2->value - p1->value > 0) return 1; + return 0; + } + + // Constructor takes a hint of the array size, but it need not be accurate. + explicit SortHelper(int sizehint) { + counts_.reserve(sizehint); + } + + // Add a value that may be a duplicate of an existing value. + // Uses a linear search. + void Add(T value, int count) { + // Linear search for value. + for (int i = 0; i < counts_.size(); ++i) { + if (counts_[i].value == value) { + counts_[i].count += count; + return; + } + } + SortPair new_pair = {value, count}; + counts_.push_back(SortPair(new_pair)); + } + + // Returns the frequency of the most frequent value. + // If max_value is not NULL, returns the most frequent value. + // If the array is empty, returns -MAX_INT32 and max_value is unchanged. + int MaxCount(T* max_value) const { + int best_count = -MAX_INT32; + for (int i = 0; i < counts_.size(); ++i) { + if (counts_[i].count > best_count) { + best_count = counts_[i].count; + if (max_value != NULL) + *max_value = counts_[i].value; + } + } + return best_count; + } + + // Returns the data array sorted by decreasing frequency. + const GenericVector >& SortByCount() { + counts_.sort(&SortPairsByCount); + return counts_; + } + // Returns the data array sorted by decreasing value. + const GenericVector >& SortByValue() { + counts_.sort(&SortPairsByValue); + return counts_; + } + + private: + GenericVector > counts_; +}; + + +#endif // TESSERACT_CCUTIL_SORTHELPER_H_. diff --git a/3rdparty/hgOCR/include/ccutil/stderr.h b/3rdparty/hgOCR/include/ccutil/stderr.h new file mode 100644 index 00000000..b5e96fbe --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/stderr.h @@ -0,0 +1,26 @@ +/********************************************************************** + * File: stderr.h (Formerly stderrs.h) + * Description: File defining error messages fundamental of commonly used. + * Author: Ray Smith + * Created: Fri Aug 10 15:23:14 BST 1990 + * + * (C) Copyright 1990, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef STDERR_H +#define STDERR_H + +#include "errcode.h" + +const ERRCODE MEMORY_OUT = "Out of memory"; +#endif diff --git a/3rdparty/hgOCR/include/ccutil/strngs.cpp b/3rdparty/hgOCR/include/ccutil/strngs.cpp new file mode 100644 index 00000000..5a9cfd0d --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/strngs.cpp @@ -0,0 +1,510 @@ +/********************************************************************** + * File: strngs.c (Formerly strings.c) + * Description: STRING class functions. + * Author: Ray Smith + * Created: Fri Feb 15 09:13:30 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "strngs.h" + +#include + +#include "genericvector.h" +#include "helpers.h" +#include "serialis.h" +#include "tprintf.h" + +using tesseract::TFile; + +// Size of buffer needed to host the decimal representation of the maximum +// possible length of an int (in 64 bits), being -<20 digits>. +const int kMaxIntSize = 22; +// Size of buffer needed to host the decimal representation of the maximum +// possible length of a %.8g being -1.2345678e+999 = 16. +const int kMaxDoubleSize = 16; + +/********************************************************************** + * STRING_HEADER provides metadata about the allocated buffer, + * including total capacity and how much used (strlen with '\0'). + * + * The implementation hides this header at the start of the data + * buffer and appends the string on the end to keep sizeof(STRING) + * unchanged from earlier versions so serialization is not affected. + * + * The collection of MACROS provide different implementations depending + * on whether the string keeps track of its strlen or not so that this + * feature can be added in later when consumers don't modify the string + **********************************************************************/ + +// Smallest string to allocate by default +const int kMinCapacity = 16; + +char* STRING::AllocData(int used, int capacity) { + data_ = (STRING_HEADER *)alloc_string(capacity + sizeof(STRING_HEADER)); + + // header is the metadata for this memory block + STRING_HEADER* header = GetHeader(); + header->capacity_ = capacity; + header->used_ = used; + return GetCStr(); +} + +void STRING::DiscardData() { + free_string((char *)data_); +} + +// This is a private method; ensure FixHeader is called (or used_ is well defined) +// beforehand +char* STRING::ensure_cstr(inT32 min_capacity) { + STRING_HEADER* orig_header = GetHeader(); + if (min_capacity <= orig_header->capacity_) + return ((char *)this->data_) + sizeof(STRING_HEADER); + + // if we are going to grow bigger, than double our existing + // size, but if that still is not big enough then keep the + // requested capacity + if (min_capacity < 2 * orig_header->capacity_) + min_capacity = 2 * orig_header->capacity_; + + int alloc = sizeof(STRING_HEADER) + min_capacity; + STRING_HEADER* new_header = (STRING_HEADER*)(alloc_string(alloc)); + + memcpy(&new_header[1], GetCStr(), orig_header->used_); + new_header->capacity_ = min_capacity; + new_header->used_ = orig_header->used_; + + // free old memory, then rebind to new memory + DiscardData(); + data_ = new_header; + + assert(InvariantOk()); + return ((char *)data_) + sizeof(STRING_HEADER); +} + +// This is const, but is modifying a mutable field +// this way it can be used on const or non-const instances. +void STRING::FixHeader() const { + const STRING_HEADER* header = GetHeader(); + if (header->used_ < 0) + header->used_ = strlen(GetCStr()) + 1; +} + + +STRING::STRING() { + // Empty STRINGs contain just the "\0". + memcpy(AllocData(1, kMinCapacity), "", 1); +} + +STRING::STRING(const STRING& str) { + str.FixHeader(); + const STRING_HEADER* str_header = str.GetHeader(); + int str_used = str_header->used_; + char *this_cstr = AllocData(str_used, str_used); + memcpy(this_cstr, str.GetCStr(), str_used); + assert(InvariantOk()); +} + +STRING::STRING(const char* cstr) { + if (cstr == NULL) { + // Empty STRINGs contain just the "\0". + memcpy(AllocData(1, kMinCapacity), "", 1); + } else { + int len = strlen(cstr) + 1; + char* this_cstr = AllocData(len, len); + memcpy(this_cstr, cstr, len); + } + assert(InvariantOk()); +} + +STRING::STRING(const char *data, int length) { + if (data == NULL) { + // Empty STRINGs contain just the "\0". + memcpy(AllocData(1, kMinCapacity), "", 1); + } else { + char* this_cstr = AllocData(length + 1, length + 1); + memcpy(this_cstr, data, length); + this_cstr[length] = '\0'; + } +} + +STRING::~STRING() { + DiscardData(); +} + +// TODO(rays) Change all callers to use TFile and remove the old functions. +// Writes to the given file. Returns false in case of error. +bool STRING::Serialize(FILE* fp) const { + inT32 len = length(); + if (fwrite(&len, sizeof(len), 1, fp) != 1) return false; + if (static_cast(fwrite(GetCStr(), 1, len, fp)) != len) return false; + return true; +} +// Writes to the given file. Returns false in case of error. +bool STRING::Serialize(TFile* fp) const { + inT32 len = length(); + if (fp->FWrite(&len, sizeof(len), 1) != 1) return false; + if (fp->FWrite(GetCStr(), 1, len) != len) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool STRING::DeSerialize(bool swap, FILE* fp) { + inT32 len; + if (fread(&len, sizeof(len), 1, fp) != 1) return false; + if (swap) + ReverseN(&len, sizeof(len)); + truncate_at(len); + if (static_cast(fread(GetCStr(), 1, len, fp)) != len) return false; + return true; +} +// Reads from the given file. Returns false in case of error. +// If swap is true, assumes a big/little-endian swap is needed. +bool STRING::DeSerialize(bool swap, TFile* fp) { + inT32 len; + if (fp->FRead(&len, sizeof(len), 1) != 1) return false; + if (swap) + ReverseN(&len, sizeof(len)); + truncate_at(len); + if (fp->FRead(GetCStr(), 1, len) != len) return false; + return true; +} + +// As DeSerialize, but only seeks past the data - hence a static method. +bool STRING::SkipDeSerialize(bool swap, tesseract::TFile* fp) { + inT32 len; + if (fp->FRead(&len, sizeof(len), 1) != 1) return false; + if (swap) ReverseN(&len, sizeof(len)); + return fp->FRead(NULL, 1, len) == len; +} + +BOOL8 STRING::contains(const char c) const { + return (c != '\0') && (strchr (GetCStr(), c) != NULL); +} + +inT32 STRING::length() const { + FixHeader(); + return GetHeader()->used_ - 1; +} + +const char* STRING::string() const { + const STRING_HEADER* header = GetHeader(); + if (header->used_ == 0) + return NULL; + + // mark header length unreliable because tesseract might + // cast away the const and mutate the string directly. + header->used_ = -1; + return GetCStr(); +} + +const char* STRING::c_str() const { + return string(); +} + +/****** + * The STRING_IS_PROTECTED interface adds additional support to migrate + * code that needs to modify the STRING in ways not otherwise supported + * without violating encapsulation. + * + * Also makes the [] operator return a const so it is immutable + */ +#if STRING_IS_PROTECTED +const char& STRING::operator[](inT32 index) const { + return GetCStr()[index]; +} + +void STRING::insert_range(inT32 index, const char* str, int len) { + // if index is outside current range, then also grow size of string + // to accmodate the requested range. + STRING_HEADER* this_header = GetHeader(); + int used = this_header->used_; + if (index > used) + used = index; + + char* this_cstr = ensure_cstr(used + len + 1); + if (index < used) { + // move existing string from index to '\0' inclusive. + memmove(this_cstr + index + len, + this_cstr + index, + this_header->used_ - index); + } else if (len > 0) { + // We are going to overwrite previous null terminator, so write the new one. + this_cstr[this_header->used_ + len - 1] = '\0'; + + // If the old header did not have the terminator, + // then we need to account for it now that we've added it. + // Otherwise it was already accounted for; we just moved it. + if (this_header->used_ == 0) + ++this_header->used_; + } + + // Write new string to index. + // The string is already terminated from the conditions above. + memcpy(this_cstr + index, str, len); + this_header->used_ += len; + + assert(InvariantOk()); +} + +void STRING::erase_range(inT32 index, int len) { + char* this_cstr = GetCStr(); + STRING_HEADER* this_header = GetHeader(); + + memcpy(this_cstr+index, this_cstr+index+len, + this_header->used_ - index - len); + this_header->used_ -= len; + assert(InvariantOk()); +} + +#else +void STRING::truncate_at(inT32 index) { + ASSERT_HOST(index >= 0); + FixHeader(); + char* this_cstr = ensure_cstr(index + 1); + this_cstr[index] = '\0'; + GetHeader()->used_ = index + 1; + assert(InvariantOk()); +} + +char& STRING::operator[](inT32 index) const { + // Code is casting away this const and mutating the string, + // so mark used_ as -1 to flag it unreliable. + GetHeader()->used_ = -1; + return ((char *)GetCStr())[index]; +} +#endif + +void STRING::split(const char c, GenericVector *splited) { + int start_index = 0; + int len = length(); + for (int i = 0; i < len; i++) { + if ((*this)[i] == c) { + if (i != start_index) { + (*this)[i] = '\0'; + splited->push_back(STRING(GetCStr() + start_index, i - start_index)); + (*this)[i] = c; + } + start_index = i + 1; + } + } + + if (len != start_index) { + splited->push_back(STRING(GetCStr() + start_index, len - start_index)); + } +} + +BOOL8 STRING::operator==(const STRING& str) const { + FixHeader(); + str.FixHeader(); + const STRING_HEADER* str_header = str.GetHeader(); + const STRING_HEADER* this_header = GetHeader(); + int this_used = this_header->used_; + int str_used = str_header->used_; + + return (this_used == str_used) + && (memcmp(GetCStr(), str.GetCStr(), this_used) == 0); +} + +BOOL8 STRING::operator!=(const STRING& str) const { + FixHeader(); + str.FixHeader(); + const STRING_HEADER* str_header = str.GetHeader(); + const STRING_HEADER* this_header = GetHeader(); + int this_used = this_header->used_; + int str_used = str_header->used_; + + return (this_used != str_used) + || (memcmp(GetCStr(), str.GetCStr(), this_used) != 0); +} + +BOOL8 STRING::operator!=(const char* cstr) const { + FixHeader(); + const STRING_HEADER* this_header = GetHeader(); + + if (cstr == NULL) + return this_header->used_ > 1; // either '\0' or NULL + else { + inT32 length = strlen(cstr) + 1; + return (this_header->used_ != length) + || (memcmp(GetCStr(), cstr, length) != 0); + } +} + +STRING& STRING::operator=(const STRING& str) { + str.FixHeader(); + const STRING_HEADER* str_header = str.GetHeader(); + int str_used = str_header->used_; + + GetHeader()->used_ = 0; // clear since ensure doesn't need to copy data + char* this_cstr = ensure_cstr(str_used); + STRING_HEADER* this_header = GetHeader(); + + memcpy(this_cstr, str.GetCStr(), str_used); + this_header->used_ = str_used; + + assert(InvariantOk()); + return *this; +} + +STRING & STRING::operator+=(const STRING& str) { + FixHeader(); + str.FixHeader(); + const STRING_HEADER* str_header = str.GetHeader(); + const char* str_cstr = str.GetCStr(); + int str_used = str_header->used_; + int this_used = GetHeader()->used_; + char* this_cstr = ensure_cstr(this_used + str_used); + + STRING_HEADER* this_header = GetHeader(); // after ensure for realloc + + if (this_used > 1) { + memcpy(this_cstr + this_used - 1, str_cstr, str_used); + this_header->used_ += str_used - 1; // overwrite '\0' + } else { + memcpy(this_cstr, str_cstr, str_used); + this_header->used_ = str_used; + } + + assert(InvariantOk()); + return *this; +} + +void STRING::add_str_int(const char* str, int number) { + if (str != NULL) + *this += str; + // Allow space for the maximum possible length of inT64. + char num_buffer[kMaxIntSize]; + snprintf(num_buffer, kMaxIntSize - 1, "%d", number); + num_buffer[kMaxIntSize - 1] = '\0'; + *this += num_buffer; +} +// Appends the given string and double (as a %.8g) to this. +void STRING::add_str_double(const char* str, double number) { + if (str != NULL) + *this += str; + // Allow space for the maximum possible length of %8g. + char num_buffer[kMaxDoubleSize]; + snprintf(num_buffer, kMaxDoubleSize - 1, "%.8g", number); + num_buffer[kMaxDoubleSize - 1] = '\0'; + *this += num_buffer; +} + +STRING & STRING::operator=(const char* cstr) { + STRING_HEADER* this_header = GetHeader(); + if (cstr) { + int len = strlen(cstr) + 1; + + this_header->used_ = 0; // don't bother copying data if need to realloc + char* this_cstr = ensure_cstr(len); + this_header = GetHeader(); // for realloc + memcpy(this_cstr, cstr, len); + this_header->used_ = len; + } else { + // Reallocate to same state as default constructor. + DiscardData(); + // Empty STRINGs contain just the "\0". + memcpy(AllocData(1, kMinCapacity), "", 1); + } + + assert(InvariantOk()); + return *this; +} + +void STRING::assign(const char *cstr, int len) { + STRING_HEADER* this_header = GetHeader(); + this_header->used_ = 0; // don't bother copying data if need to realloc + char* this_cstr = ensure_cstr(len + 1); // +1 for '\0' + + this_header = GetHeader(); // for realloc + memcpy(this_cstr, cstr, len); + this_cstr[len] = '\0'; + this_header->used_ = len + 1; + + assert(InvariantOk()); +} + +STRING STRING::operator+(const STRING& str) const { + STRING result(*this); + result += str; + + assert(InvariantOk()); + return result; +} + + +STRING STRING::operator+(const char ch) const { + STRING result; + FixHeader(); + const STRING_HEADER* this_header = GetHeader(); + int this_used = this_header->used_; + char* result_cstr = result.ensure_cstr(this_used + 1); + STRING_HEADER* result_header = result.GetHeader(); + int result_used = result_header->used_; + + // copies '\0' but we'll overwrite that + memcpy(result_cstr, GetCStr(), this_used); + result_cstr[result_used] = ch; // overwrite old '\0' + result_cstr[result_used + 1] = '\0'; // append on '\0' + ++result_header->used_; + + assert(InvariantOk()); + return result; +} + + +STRING& STRING::operator+=(const char *str) { + if (!str || !*str) // empty string has no effect + return *this; + + FixHeader(); + int len = strlen(str) + 1; + int this_used = GetHeader()->used_; + char* this_cstr = ensure_cstr(this_used + len); + STRING_HEADER* this_header = GetHeader(); // after ensure for realloc + + // if we had non-empty string then append overwriting old '\0' + // otherwise replace + if (this_used > 0) { + memcpy(this_cstr + this_used - 1, str, len); + this_header->used_ += len - 1; + } else { + memcpy(this_cstr, str, len); + this_header->used_ = len; + } + + assert(InvariantOk()); + return *this; +} + + +STRING& STRING::operator+=(const char ch) { + if (ch == '\0') + return *this; + + FixHeader(); + int this_used = GetHeader()->used_; + char* this_cstr = ensure_cstr(this_used + 1); + STRING_HEADER* this_header = GetHeader(); + + if (this_used > 0) + --this_used; // undo old empty null if there was one + + this_cstr[this_used++] = ch; // append ch to end + this_cstr[this_used++] = '\0'; // append '\0' after ch + this_header->used_ = this_used; + + assert(InvariantOk()); + return *this; +} diff --git a/3rdparty/hgOCR/include/ccutil/strngs.h b/3rdparty/hgOCR/include/ccutil/strngs.h new file mode 100644 index 00000000..2e65463e --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/strngs.h @@ -0,0 +1,174 @@ +/********************************************************************** + * File: strngs.h (Formerly strings.h) + * Description: STRING class definition. + * Author: Ray Smith + * Created: Fri Feb 15 09:15:01 GMT 1991 + * + * (C) Copyright 1991, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef STRNGS_H +#define STRNGS_H + +#include +#include +#include "platform.h" +#include "memry.h" + +namespace tesseract { +class TFile; +} // namespace tesseract. + +// STRING_IS_PROTECTED means that string[index] = X is invalid +// because you have to go through strings interface to modify it. +// This allows the string to ensure internal integrity and maintain +// its own string length. Unfortunately this is not possible because +// STRINGS are used as direct-manipulation data buffers for things +// like length arrays and many places cast away the const on string() +// to mutate the string. Turning this off means that internally we +// cannot assume we know the strlen. +#define STRING_IS_PROTECTED 0 + +template class GenericVector; + +class TESS_API STRING +{ + public: + STRING(); + STRING(const STRING &string); + STRING(const char *string); + STRING(const char *data, int length); + ~STRING (); + + // Writes to the given file. Returns false in case of error. + bool Serialize(FILE* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, FILE* fp); + // Writes to the given file. Returns false in case of error. + bool Serialize(tesseract::TFile* fp) const; + // Reads from the given file. Returns false in case of error. + // If swap is true, assumes a big/little-endian swap is needed. + bool DeSerialize(bool swap, tesseract::TFile* fp); + // As DeSerialize, but only seeks past the data - hence a static method. + static bool SkipDeSerialize(bool swap, tesseract::TFile* fp); + + BOOL8 contains(const char c) const; + inT32 length() const; + inT32 size() const { return length(); } + const char *string() const; + const char *c_str() const; + + inline char* strdup() const { + inT32 len = length() + 1; + return strncpy(new char[len], GetCStr(), len); + } + +#if STRING_IS_PROTECTED + const char &operator[] (inT32 index) const; + // len is number of chars in s to insert starting at index in this string + void insert_range(inT32 index, const char*s, int len); + void erase_range(inT32 index, int len); +#else + char &operator[] (inT32 index) const; +#endif + void split(const char c, GenericVector *splited); + void truncate_at(inT32 index); + + BOOL8 operator== (const STRING & string) const; + BOOL8 operator!= (const STRING & string) const; + BOOL8 operator!= (const char *string) const; + + STRING & operator= (const char *string); + STRING & operator= (const STRING & string); + + STRING operator+ (const STRING & string) const; + STRING operator+ (const char ch) const; + + STRING & operator+= (const char *string); + STRING & operator+= (const STRING & string); + STRING & operator+= (const char ch); + + // Assignment for strings which are not null-terminated. + void assign(const char *cstr, int len); + + // Appends the given string and int (as a %d) to this. + // += cannot be used for ints as there as a char += operator that would + // be ambiguous, and ints usually need a string before or between them + // anyway. + void add_str_int(const char* str, int number); + // Appends the given string and double (as a %.8g) to this. + void add_str_double(const char* str, double number); + + // ensure capacity but keep pointer encapsulated + inline void ensure(inT32 min_capacity) { ensure_cstr(min_capacity); } + + private: + typedef struct STRING_HEADER { + // How much space was allocated in the string buffer for char data. + int capacity_; + + // used_ is how much of the capacity is currently being used, + // including a '\0' terminator. + // + // If used_ is 0 then string is NULL (not even the '\0') + // else if used_ > 0 then it is strlen() + 1 (because it includes '\0') + // else strlen is >= 0 (not NULL) but needs to be computed. + // this condition is set when encapsulation is violated because + // an API returned a mutable string. + // + // capacity_ - used_ = excess capacity that the string can grow + // without reallocating + mutable int used_; + } STRING_HEADER; + + // To preserve the behavior of the old serialization, we only have space + // for one pointer in this structure. So we are embedding a data structure + // at the start of the storage that will hold additional state variables, + // then storing the actual string contents immediately after. + STRING_HEADER* data_; + + // returns the header part of the storage + inline STRING_HEADER* GetHeader() { + return data_; + } + inline const STRING_HEADER* GetHeader() const { + return data_; + } + + // returns the string data part of storage + inline char* GetCStr() { return ((char*)data_) + sizeof(STRING_HEADER); } + + inline const char* GetCStr() const { + return ((const char *)data_) + sizeof(STRING_HEADER); + } + inline bool InvariantOk() const { +#if STRING_IS_PROTECTED + return (GetHeader()->used_ == 0) ? + (string() == NULL) : (GetHeader()->used_ == (strlen(string()) + 1)); +#else + return true; +#endif + } + + // Ensure string has requested capacity as optimization + // to avoid unnecessary reallocations. + // The return value is a cstr buffer with at least requested capacity + char* ensure_cstr(inT32 min_capacity); + + void FixHeader() const; // make used_ non-negative, even if const + + char* AllocData(int used, int capacity); + void DiscardData(); +}; +#endif diff --git a/3rdparty/hgOCR/include/ccutil/tesscallback.h b/3rdparty/hgOCR/include/ccutil/tesscallback.h new file mode 100644 index 00000000..1f20c6b4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/tesscallback.h @@ -0,0 +1,9721 @@ +/////////////////////////////////////////////////////////////////////// +// File: tesscallback.h +// Description: classes and functions to replace pointer-to-functions +// Author: Samuel Charron +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef _TESS_CALLBACK_SPECIALIZATIONS_H +#define _TESS_CALLBACK_SPECIALIZATIONS_H + +#include "host.h" // For NULL. + +struct TessCallbackUtils_ { + static void FailIsRepeatable(const char* name); +}; + + +class TessClosure { + public: + virtual ~TessClosure() { } + virtual void Run() = 0; +}; + +template +class TessResultCallback { + public: + virtual ~TessResultCallback() { } + virtual R Run() = 0; +}; + +template +class _ConstTessMemberResultCallback_0_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)() const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_0( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(); + return result; + } else { + R result = (object_->*member_)(); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_0 + : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)() const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_0( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run() { + if (!del) { + (object_->*member_)(); + } else { + (object_->*member_)(); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_0::base* +NewTessCallback( + const T1* obj, R (T2::*member)() const) { + return new _ConstTessMemberResultCallback_0_0( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_0::base* +NewPermanentTessCallback( + const T1* obj, R (T2::*member)() const) { + return new _ConstTessMemberResultCallback_0_0( + obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)() ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_0( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(); + return result; + } else { + R result = (object_->*member_)(); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_0 + : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)() ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_0( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run() { + if (!del) { + (object_->*member_)(); + } else { + (object_->*member_)(); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_0::base* +NewTessCallback( + T1* obj, R (T2::*member)() ) { + return new _TessMemberResultCallback_0_0( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_0::base* +NewPermanentTessCallback( + T1* obj, R (T2::*member)() ) { + return new _TessMemberResultCallback_0_0( + obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_0( + FunctionSignature function) + : function_(function) { + } + + virtual R Run() { + if (!del) { + R result = (*function_)(); + return result; + } else { + R result = (*function_)(); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_0 + : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_0( + FunctionSignature function) + : function_(function) { + } + + virtual void Run() { + if (!del) { + (*function_)(); + } else { + (*function_)(); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_0::base* +NewTessCallback(R (*function)()) { + return new _TessFunctionResultCallback_0_0(function); +} + +template +inline typename _TessFunctionResultCallback_0_0::base* +NewPermanentTessCallback(R (*function)()) { + return new _TessFunctionResultCallback_0_0(function); +} + + + +// Specified by TR1 [4.7.2] Reference modifications. +template struct remove_reference; +template struct remove_reference { typedef T type; }; +template struct remove_reference { typedef T type; }; + +// Identity::type is a typedef of T. Useful for preventing the +// compiler from inferring the type of an argument in templates. +template +struct Identity { + typedef T type; +}; + +template +class _ConstTessMemberResultCallback_1_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_0(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_); + return result; + } else { + R result = (object_->*member_)(p1_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_0(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_); + } else { + (object_->*member_)(p1_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_0(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_0(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_0( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_); + return result; + } else { + R result = (object_->*member_)(p1_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_0( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_); + } else { + (object_->*member_)(p1_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_0(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_0(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_0(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_); + return result; + } else { + R result = (*function_)(p1_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_0(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_); + } else { + (*function_)(p1_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_0::base* +NewTessCallback(R (*function)(P1), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_0(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_0::base* +NewPermanentTessCallback(R (*function)(P1), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_0(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_0(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_0(const T* object, MemberSignature member, P1 p1, P2 p2) + : + object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_); + } else { + (object_->*member_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_0(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_0(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_0( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_0( T* object, MemberSignature member, P1 p1, P2 p2) + : + object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_); + } else { + (object_->*member_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_0(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_0(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1,P2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_0(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_,p2_); + return result; + } else { + R result = (*function_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1,P2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_0(FunctionSignature function, P1 p1, P2 p2) + : + function_(function), p1_(p1), p2_(p2) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_,p2_); + } else { + (*function_)(p1_,p2_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_0::base* +NewTessCallback(R (*function)(P1,P2), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_0(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_0::base* +NewPermanentTessCallback(R (*function)(P1,P2), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_0(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : + object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_); + } else { + (object_->*member_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_0(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_0(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_); + } else { + (object_->*member_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_0(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_0(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1,P2,P3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_0(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_,p2_,p3_); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1,P2,P3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_0(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_,p2_,p3_); + } else { + (*function_)(p1_,p2_,p3_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_0::base* +NewTessCallback(R (*function)(P1,P2,P3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_0(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_0::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_0(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_0(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_0(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_0(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_0(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1,P2,P3,P4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1,P2,P3,P4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_); + } else { + (*function_)(p1_,p2_,p3_,p4_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_0::base* +NewTessCallback(R (*function)(P1,P2,P3,P4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_0(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_0::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_0(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_0(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_0(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_0(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_0(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_0::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_0(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_0::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_0(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_0(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_0::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_0(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_0::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_0(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run() { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_0( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run() { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_0::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_0(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_0::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_0(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_0 : public TessResultCallback { + public: + typedef TessResultCallback base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run() { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_0 : public TessClosure { + public: + typedef TessClosure base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_0(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run() { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_0::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_0(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_0::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_0(function, p1, p2, p3, p4, p5, p6); +} + +template +class TessCallback1 { + public: + virtual ~TessCallback1() { } + virtual void Run(A1) = 0; +}; + +template +class TessResultCallback1 { + public: + virtual ~TessResultCallback1() { } + virtual R Run(A1) = 0; +}; + + +template +class TessCallback2 { + public: + virtual ~TessCallback2() { } + virtual void Run(A1,A2) = 0; +}; + +template +class TessResultCallback2 { + public: + virtual ~TessResultCallback2() { } + virtual R Run(A1,A2) = 0; +}; + +template +class TessCallback3 { + public: + virtual ~TessCallback3() { } + virtual void Run(A1,A2,A3) = 0; +}; + +template +class TessResultCallback3 { + public: + virtual ~TessResultCallback3() { } + virtual R Run(A1,A2,A3) = 0; +}; + +template +class TessCallback4 { + public: + virtual ~TessCallback4() { } + virtual void Run(A1,A2,A3,A4) = 0; +}; + +template +class TessResultCallback4 { + public: + virtual ~TessResultCallback4() { } + virtual R Run(A1,A2,A3,A4) = 0; +}; + +template +class _ConstTessMemberResultCallback_0_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(A1) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_1( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(a1); + return result; + } else { + R result = (object_->*member_)(a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_1 + : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(A1) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_1( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(a1); + } else { + (object_->*member_)(a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_1::base* +NewTessCallback( + const T1* obj, R (T2::*member)(A1) const) { + return new _ConstTessMemberResultCallback_0_1( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_1::base* +NewPermanentTessCallback( + const T1* obj, R (T2::*member)(A1) const) { + return new _ConstTessMemberResultCallback_0_1( + obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(A1) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_1( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(a1); + return result; + } else { + R result = (object_->*member_)(a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_1 + : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(A1) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_1( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(a1); + } else { + (object_->*member_)(a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_1::base* +NewTessCallback( + T1* obj, R (T2::*member)(A1) ) { + return new _TessMemberResultCallback_0_1( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_1::base* +NewPermanentTessCallback( + T1* obj, R (T2::*member)(A1) ) { + return new _TessMemberResultCallback_0_1( + obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(A1); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_1( + FunctionSignature function) + : function_(function) { + } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(a1); + return result; + } else { + R result = (*function_)(a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_1 + : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(A1); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_1( + FunctionSignature function) + : function_(function) { + } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(a1); + } else { + (*function_)(a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_1::base* +NewTessCallback(R (*function)(A1)) { + return new _TessFunctionResultCallback_0_1(function); +} + +template +inline typename _TessFunctionResultCallback_0_1::base* +NewPermanentTessCallback(R (*function)(A1)) { + return new _TessFunctionResultCallback_0_1(function); +} + +template +class _ConstTessMemberResultCallback_1_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_1(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_1(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,a1); + } else { + (object_->*member_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,A1) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_1(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,A1) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_1(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_1( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_1( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,a1); + } else { + (object_->*member_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_1(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_1(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_1(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,a1); + return result; + } else { + R result = (*function_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_1(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,a1); + } else { + (*function_)(p1_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_1::base* +NewTessCallback(R (*function)(P1,A1), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_1(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_1::base* +NewPermanentTessCallback(R (*function)(P1,A1), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_1(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_1(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_1(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,a1); + } else { + (object_->*member_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_1(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_1(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_1( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_1( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,a1); + } else { + (object_->*member_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,A1) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_1(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,A1) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_1(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,P2,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_1(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,p2_,a1); + return result; + } else { + R result = (*function_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,P2,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_1(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,p2_,a1); + } else { + (*function_)(p1_,p2_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_1::base* +NewTessCallback(R (*function)(P1,P2,A1), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_1(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_1::base* +NewPermanentTessCallback(R (*function)(P1,P2,A1), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_1(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_1(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_1(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_1(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_1(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,P2,P3,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_1(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,a1); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,P2,P3,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_1(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,p2_,p3_,a1); + } else { + (*function_)(p1_,p2_,p3_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_1::base* +NewTessCallback(R (*function)(P1,P2,P3,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_1(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_1::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_1(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_1(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_1(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_1(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_1(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,a1); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,a1); + } else { + (*function_)(p1_,p2_,p3_,p4_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_1::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_1(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_1::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_1(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_1(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_1(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_1(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_1(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_1::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_1(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_1::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_1(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_1(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_1::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_1(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_1::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_1(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_1( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_1::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_1(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_1::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_1(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_1 : public TessResultCallback1 { + public: + typedef TessResultCallback1 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_1 : public TessCallback1 { + public: + typedef TessCallback1 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_1(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_1::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_1(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_1::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_1(function, p1, p2, p3, p4, p5, p6); +} + +template +class _ConstTessMemberResultCallback_0_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_2( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(a1,a2); + return result; + } else { + R result = (object_->*member_)(a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_2 + : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_2( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(a1,a2); + } else { + (object_->*member_)(a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_2::base* +NewTessCallback( + const T1* obj, R (T2::*member)(A1,A2) const) { + return new _ConstTessMemberResultCallback_0_2( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_2::base* +NewPermanentTessCallback( + const T1* obj, R (T2::*member)(A1,A2) const) { + return new _ConstTessMemberResultCallback_0_2( + obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(A1,A2) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_2( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(a1,a2); + return result; + } else { + R result = (object_->*member_)(a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_2 + : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(A1,A2) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_2( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(a1,a2); + } else { + (object_->*member_)(a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_2::base* +NewTessCallback( + T1* obj, R (T2::*member)(A1,A2) ) { + return new _TessMemberResultCallback_0_2( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_2::base* +NewPermanentTessCallback( + T1* obj, R (T2::*member)(A1,A2) ) { + return new _TessMemberResultCallback_0_2( + obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(A1,A2); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_2( + FunctionSignature function) + : function_(function) { + } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(a1,a2); + return result; + } else { + R result = (*function_)(a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_2 + : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(A1,A2); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_2( + FunctionSignature function) + : function_(function) { + } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(a1,a2); + } else { + (*function_)(a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_2::base* +NewTessCallback(R (*function)(A1,A2)) { + return new _TessFunctionResultCallback_0_2(function); +} + +template +inline typename _TessFunctionResultCallback_0_2::base* +NewPermanentTessCallback(R (*function)(A1,A2)) { + return new _TessFunctionResultCallback_0_2(function); +} + +template +class _ConstTessMemberResultCallback_1_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_2(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_2(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,a1,a2); + } else { + (object_->*member_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_2(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_2(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_2( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_2( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,a1,a2); + } else { + (object_->*member_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1,A2) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_2(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1,A2) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_2(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_2(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_2(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,a1,a2); + } else { + (*function_)(p1_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_2::base* +NewTessCallback(R (*function)(P1,A1,A2), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_2(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_2::base* +NewPermanentTessCallback(R (*function)(P1,A1,A2), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_2(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_2(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_2(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_2(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_2(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_2( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_2( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_2(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_2(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,P2,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_2(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,p2_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,P2,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_2(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,p2_,a1,a2); + } else { + (*function_)(p1_,p2_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_2::base* +NewTessCallback(R (*function)(P1,P2,A1,A2), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_2(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_2::base* +NewPermanentTessCallback(R (*function)(P1,P2,A1,A2), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_2(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_2(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_2(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_2(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_2(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,P2,P3,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_2(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,P2,P3,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_2(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,p2_,p3_,a1,a2); + } else { + (*function_)(p1_,p2_,p3_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_2::base* +NewTessCallback(R (*function)(P1,P2,P3,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_2(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_2::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_2(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_2(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_2(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_2(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_2(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,a1,a2); + } else { + (*function_)(p1_,p2_,p3_,p4_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_2::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_2(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_2::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_2(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_2(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_2(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_2(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_2(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_2::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_2(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_2::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_2(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_2(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_2::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_2(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_2::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_2(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_2( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_2::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_2(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_2::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_2(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_2 : public TessResultCallback2 { + public: + typedef TessResultCallback2 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_2 : public TessCallback2 { + public: + typedef TessCallback2 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_2(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_2::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_2(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_2::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_2(function, p1, p2, p3, p4, p5, p6); +} + +template +class _ConstTessMemberResultCallback_0_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_3( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_3( + const T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(a1,a2,a3); + } else { + (object_->*member_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_3::base* +NewTessCallback( + const T1* obj, R (T2::*member)(A1,A2,A3) const) { + return new _ConstTessMemberResultCallback_0_3( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_3::base* +NewPermanentTessCallback( + const T1* obj, R (T2::*member)(A1,A2,A3) const) { + return new _ConstTessMemberResultCallback_0_3( + obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_3( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_3( + T* object, MemberSignature member) + : object_(object), + member_(member) { + } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(a1,a2,a3); + } else { + (object_->*member_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_3::base* +NewTessCallback( + T1* obj, R (T2::*member)(A1,A2,A3) ) { + return new _TessMemberResultCallback_0_3( + obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_3::base* +NewPermanentTessCallback( + T1* obj, R (T2::*member)(A1,A2,A3) ) { + return new _TessMemberResultCallback_0_3( + obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(A1,A2,A3); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_3( + FunctionSignature function) + : function_(function) { + } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(a1,a2,a3); + return result; + } else { + R result = (*function_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(A1,A2,A3); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_3( + FunctionSignature function) + : function_(function) { + } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(a1,a2,a3); + } else { + (*function_)(a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_3::base* +NewTessCallback(R (*function)(A1,A2,A3)) { + return new _TessFunctionResultCallback_0_3(function); +} + +template +inline typename _TessFunctionResultCallback_0_3::base* +NewPermanentTessCallback(R (*function)(A1,A2,A3)) { + return new _TessFunctionResultCallback_0_3(function); +} + +template +class _ConstTessMemberResultCallback_1_3 + : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3) const; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_3(T* object, + MemberSignature member, P1 p1) + : object_(object), member_(member), p1_(p1) { } + + virtual R Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3) const; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_3(T* object, + MemberSignature member, P1 p1) + : object_(object), member_(member), p1_(p1) { } + + virtual void Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3); + } else { + (object_->*member_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3) , typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_3(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3) , typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_3(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_3(T* object, + MemberSignature member, P1 p1) + : object_(object), member_(member), p1_(p1) { } + + virtual R Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_3(T* object, + MemberSignature member, P1 p1) + : object_(object), member_(member), p1_(p1) { } + + virtual void Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3); + } else { + (object_->*member_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_3(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_3(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef R (*FunctionSignature)(P1,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_3(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + R result = (*function_)(p1_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_3 + : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_3(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run(A1 a1, A2 a2, A3 a3) { + if (!del) { + (*function_)(p1_,a1,a2,a3); + } else { + (*function_)(p1_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_3::base* +NewTessCallback(R (*function)(P1,A1,A2,A3), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_3(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_3::base* +NewPermanentTessCallback(R (*function)(P1,A1,A2,A3), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_3(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_3(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_3(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_3::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_3(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_3::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_3(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_3( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_3( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_3(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_3(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(P1,P2,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_3(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(p1_,p2_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,P2,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_3(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(p1_,p2_,a1,a2,a3); + } else { + (*function_)(p1_,p2_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_3::base* +NewTessCallback(R (*function)(P1,P2,A1,A2,A3), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_3(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_3::base* +NewPermanentTessCallback(R (*function)(P1,P2,A1,A2,A3), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_3(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_3::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_3(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_3::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_3(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_3(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_3(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(P1,P2,P3,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_3(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,P2,P3,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_3(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(p1_,p2_,p3_,a1,a2,a3); + } else { + (*function_)(p1_,p2_,p3_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_3::base* +NewTessCallback(R (*function)(P1,P2,P3,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_3(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_3::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_3(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_3::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_3(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_3::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_3(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_3(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_3(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3); + } else { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_3::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_3(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_3::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_3(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_3::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_3(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_3::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_3(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_3(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_3(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_3::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_3(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_3::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_3(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_3(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_3::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_3(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_3::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_3(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_3( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_3::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_3(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_3::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_3(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_3 : public TessResultCallback3 { + public: + typedef TessResultCallback3 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_3 : public TessCallback3 { + public: + typedef TessCallback3 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_3(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_3::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_3(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_3::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_3(function, p1, p2, p3, p4, p5, p6); +} + +template +class _ConstTessMemberResultCallback_0_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_4(const T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_4(const T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(a1,a2,a3,a4); + } else { + (object_->*member_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(A1,A2,A3,A4) const) { + return new _ConstTessMemberResultCallback_0_4(obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(A1,A2,A3,A4) const) { + return new _ConstTessMemberResultCallback_0_4(obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_4( T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_4( T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(a1,a2,a3,a4); + } else { + (object_->*member_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_4::base* +NewTessCallback( T1* obj, R (T2::*member)(A1,A2,A3,A4) ) { + return new _TessMemberResultCallback_0_4(obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(A1,A2,A3,A4) ) { + return new _TessMemberResultCallback_0_4(obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(A1,A2,A3,A4); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_4(FunctionSignature function) + : function_(function) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(A1,A2,A3,A4); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_4(FunctionSignature function) + : function_(function) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(a1,a2,a3,a4); + } else { + (*function_)(a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_4::base* +NewTessCallback(R (*function)(A1,A2,A3,A4)) { + return new _TessFunctionResultCallback_0_4(function); +} + +template +inline typename _TessFunctionResultCallback_0_4::base* +NewPermanentTessCallback(R (*function)(A1,A2,A3,A4)) { + return new _TessFunctionResultCallback_0_4(function); +} + +template +class _ConstTessMemberResultCallback_1_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_4(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_4(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2,A3,A4) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_4(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2,A3,A4) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_4(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_4( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_4( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3,A4) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_4(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3,A4) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_4(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_4(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_4(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,a1,a2,a3,a4); + } else { + (*function_)(p1_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_4::base* +NewTessCallback(R (*function)(P1,A1,A2,A3,A4), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_4(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_4::base* +NewPermanentTessCallback(R (*function)(P1,A1,A2,A3,A4), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_4(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_4(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_4(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_4(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_4(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_4( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_4( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_4(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_4(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,P2,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_4(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,p2_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,P2,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_4(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,p2_,a1,a2,a3,a4); + } else { + (*function_)(p1_,p2_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_4::base* +NewTessCallback(R (*function)(P1,P2,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_4(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_4::base* +NewPermanentTessCallback(R (*function)(P1,P2,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_4(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_4(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_4(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_4(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_4(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,P2,P3,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_4(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,P2,P3,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_4(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,p2_,p3_,a1,a2,a3,a4); + } else { + (*function_)(p1_,p2_,p3_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_4::base* +NewTessCallback(R (*function)(P1,P2,P3,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_4(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_4::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_4(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_4(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_4(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_4(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_4(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + } else { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_4::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_4(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_4::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_4(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_4(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_4(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_4(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_4(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_4::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_4(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_4::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_4(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_4(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_4::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_4(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_4::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_4(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_4( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_4::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_4(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_4::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_4(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_4 : public TessResultCallback4 { + public: + typedef TessResultCallback4 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_4 : public TessCallback4 { + public: + typedef TessCallback4 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_4(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_4::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_4(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_4::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_4(function, p1, p2, p3, p4, p5, p6); +} + +template +class TessCallback5 { + public: + virtual ~TessCallback5() { } + virtual void Run(A1,A2,A3,A4,A5) = 0; +}; + +template +class TessResultCallback5 { + public: + virtual ~TessResultCallback5() { } + virtual R Run(A1,A2,A3,A4,A5) = 0; +}; + +template +class _ConstTessMemberResultCallback_0_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_5(const T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_0_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + + public: + inline _ConstTessMemberResultCallback_0_5(const T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(a1,a2,a3,a4,a5); + } else { + (object_->*member_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(A1,A2,A3,A4,A5) const) { + return new _ConstTessMemberResultCallback_0_5(obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_0_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(A1,A2,A3,A4,A5) const) { + return new _ConstTessMemberResultCallback_0_5(obj, member); +} +#endif + +template +class _TessMemberResultCallback_0_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_5( T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_0_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + + public: + inline _TessMemberResultCallback_0_5( T* object, MemberSignature member) + : object_(object), + member_(member) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(a1,a2,a3,a4,a5); + } else { + (object_->*member_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_5::base* +NewTessCallback( T1* obj, R (T2::*member)(A1,A2,A3,A4,A5) ) { + return new _TessMemberResultCallback_0_5(obj, member); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_0_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(A1,A2,A3,A4,A5) ) { + return new _TessMemberResultCallback_0_5(obj, member); +} +#endif + +template +class _TessFunctionResultCallback_0_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_5(FunctionSignature function) + : function_(function) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_0_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + + public: + inline _TessFunctionResultCallback_0_5(FunctionSignature function) + : function_(function) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(a1,a2,a3,a4,a5); + } else { + (*function_)(a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_0_5::base* +NewTessCallback(R (*function)(A1,A2,A3,A4,A5)) { + return new _TessFunctionResultCallback_0_5(function); +} + +template +inline typename _TessFunctionResultCallback_0_5::base* +NewPermanentTessCallback(R (*function)(A1,A2,A3,A4,A5)) { + return new _TessFunctionResultCallback_0_5(function); +} + +template +class _ConstTessMemberResultCallback_1_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_5(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_1_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _ConstTessMemberResultCallback_1_5(const T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2,A3,A4,A5) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_5(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_1_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,A1,A2,A3,A4,A5) const, typename Identity::type p1) { + return new _ConstTessMemberResultCallback_1_5(obj, member, p1); +} +#endif + +template +class _TessMemberResultCallback_1_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_5( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_1_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + + public: + inline _TessMemberResultCallback_1_5( T* object, MemberSignature member, P1 p1) + : object_(object), + member_(member), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3,A4,A5) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_5(obj, member, p1); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_1_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,A1,A2,A3,A4,A5) , typename Identity::type p1) { + return new _TessMemberResultCallback_1_5(obj, member, p1); +} +#endif + +template +class _TessFunctionResultCallback_1_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_5(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_1_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + + public: + inline _TessFunctionResultCallback_1_5(FunctionSignature function, P1 p1) + : function_(function), p1_(p1) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_1_5::base* +NewTessCallback(R (*function)(P1,A1,A2,A3,A4,A5), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_5(function, p1); +} + +template +inline typename _TessFunctionResultCallback_1_5::base* +NewPermanentTessCallback(R (*function)(P1,A1,A2,A3,A4,A5), typename Identity::type p1) { + return new _TessFunctionResultCallback_1_5(function, p1); +} + +template +class _ConstTessMemberResultCallback_2_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_5(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_2_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _ConstTessMemberResultCallback_2_5(const T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_5(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_2_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2) { + return new _ConstTessMemberResultCallback_2_5(obj, member, p1, p2); +} +#endif + +template +class _TessMemberResultCallback_2_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_5( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_2_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessMemberResultCallback_2_5( T* object, MemberSignature member, P1 p1, P2 p2) + : object_(object), + member_(member), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_5(obj, member, p1, p2); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_2_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2) { + return new _TessMemberResultCallback_2_5(obj, member, p1, p2); +} +#endif + +template +class _TessFunctionResultCallback_2_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,P2,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_5(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,p2_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_2_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,P2,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + + public: + inline _TessFunctionResultCallback_2_5(FunctionSignature function, P1 p1, P2 p2) + : function_(function), p1_(p1), p2_(p2) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,p2_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,p2_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_2_5::base* +NewTessCallback(R (*function)(P1,P2,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_5(function, p1, p2); +} + +template +inline typename _TessFunctionResultCallback_2_5::base* +NewPermanentTessCallback(R (*function)(P1,P2,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2) { + return new _TessFunctionResultCallback_2_5(function, p1, p2); +} + +template +class _ConstTessMemberResultCallback_3_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_3_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _ConstTessMemberResultCallback_3_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_5(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_3_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _ConstTessMemberResultCallback_3_5(obj, member, p1, p2, p3); +} +#endif + +template +class _TessMemberResultCallback_3_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_3_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessMemberResultCallback_3_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_5(obj, member, p1, p2, p3); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_3_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessMemberResultCallback_3_5(obj, member, p1, p2, p3); +} +#endif + +template +class _TessFunctionResultCallback_3_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,P2,P3,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_5(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_3_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,P2,P3,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + + public: + inline _TessFunctionResultCallback_3_5(FunctionSignature function, P1 p1, P2 p2, P3 p3) + : function_(function), p1_(p1), p2_(p2), p3_(p3) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,p2_,p3_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_3_5::base* +NewTessCallback(R (*function)(P1,P2,P3,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_5(function, p1, p2, p3); +} + +template +inline typename _TessFunctionResultCallback_3_5::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3) { + return new _TessFunctionResultCallback_3_5(function, p1, p2, p3); +} + +template +class _ConstTessMemberResultCallback_4_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_4_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _ConstTessMemberResultCallback_4_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_5(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_4_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _ConstTessMemberResultCallback_4_5(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessMemberResultCallback_4_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_4_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessMemberResultCallback_4_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_5(obj, member, p1, p2, p3, p4); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_4_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessMemberResultCallback_4_5(obj, member, p1, p2, p3, p4); +} +#endif + +template +class _TessFunctionResultCallback_4_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_4_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + + public: + inline _TessFunctionResultCallback_4_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,p2_,p3_,p4_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_4_5::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_5(function, p1, p2, p3, p4); +} + +template +inline typename _TessFunctionResultCallback_4_5::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4) { + return new _TessFunctionResultCallback_4_5(function, p1, p2, p3, p4); +} + +template +class _ConstTessMemberResultCallback_5_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_5_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _ConstTessMemberResultCallback_5_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_5(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_5_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _ConstTessMemberResultCallback_5_5(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessMemberResultCallback_5_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_5_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessMemberResultCallback_5_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_5(obj, member, p1, p2, p3, p4, p5); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_5_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessMemberResultCallback_5_5(obj, member, p1, p2, p3, p4, p5); +} +#endif + +template +class _TessFunctionResultCallback_5_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_5_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + + public: + inline _TessFunctionResultCallback_5_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_5_5::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_5(function, p1, p2, p3, p4, p5); +} + +template +inline typename _TessFunctionResultCallback_5_5::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5) { + return new _TessFunctionResultCallback_5_5(function, p1, p2, p3, p4, p5); +} + +template +class _ConstTessMemberResultCallback_6_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _ConstTessMemberResultCallback_6_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) const; + + private: + const T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _ConstTessMemberResultCallback_6_5(const T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_5::base* +NewTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_5(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _ConstTessMemberResultCallback_6_5::base* +NewPermanentTessCallback(const T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) const, typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _ConstTessMemberResultCallback_6_5(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessMemberResultCallback_6_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessMemberResultCallback_6_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (T::*MemberSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) ; + + private: + T* object_; + MemberSignature member_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessMemberResultCallback_6_5( T* object, MemberSignature member, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : object_(object), + member_(member), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + } else { + (object_->*member_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + member_ = NULL; + delete this; + } + } +}; + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_5::base* +NewTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_5(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +#ifndef SWIG +template +inline typename _TessMemberResultCallback_6_5::base* +NewPermanentTessCallback( T1* obj, R (T2::*member)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5) , typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessMemberResultCallback_6_5(obj, member, p1, p2, p3, p4, p5, p6); +} +#endif + +template +class _TessFunctionResultCallback_6_5 : public TessResultCallback5 { + public: + typedef TessResultCallback5 base; + typedef R (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual R Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + return result; + } else { + R result = (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + return result; + } + } +}; + +template +class _TessFunctionResultCallback_6_5 : public TessCallback5 { + public: + typedef TessCallback5 base; + typedef void (*FunctionSignature)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5); + + private: + FunctionSignature function_; + typename remove_reference::type p1_; + typename remove_reference::type p2_; + typename remove_reference::type p3_; + typename remove_reference::type p4_; + typename remove_reference::type p5_; + typename remove_reference::type p6_; + + public: + inline _TessFunctionResultCallback_6_5(FunctionSignature function, P1 p1, P2 p2, P3 p3, P4 p4, P5 p5, P6 p6) + : function_(function), p1_(p1), p2_(p2), p3_(p3), p4_(p4), p5_(p5), p6_(p6) { } + + virtual void Run(A1 a1,A2 a2,A3 a3,A4 a4,A5 a5) { + if (!del) { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + } else { + (*function_)(p1_,p2_,p3_,p4_,p5_,p6_,a1,a2,a3,a4,a5); + // zero out the pointer to ensure segfault if used again + function_ = NULL; + delete this; + } + } +}; + +template +inline typename _TessFunctionResultCallback_6_5::base* +NewTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_5(function, p1, p2, p3, p4, p5, p6); +} + +template +inline typename _TessFunctionResultCallback_6_5::base* +NewPermanentTessCallback(R (*function)(P1,P2,P3,P4,P5,P6,A1,A2,A3,A4,A5), typename Identity::type p1, typename Identity::type p2, typename Identity::type p3, typename Identity::type p4, typename Identity::type p5, typename Identity::type p6) { + return new _TessFunctionResultCallback_6_5(function, p1, p2, p3, p4, p5, p6); +} + +#endif /* _TESS_CALLBACK_SPECIALIZATIONS_H */ diff --git a/3rdparty/hgOCR/include/ccutil/tessdatamanager.cpp b/3rdparty/hgOCR/include/ccutil/tessdatamanager.cpp new file mode 100644 index 00000000..36b1c5f3 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/tessdatamanager.cpp @@ -0,0 +1,280 @@ +/////////////////////////////////////////////////////////////////////// +// File: tessdatamanager.cpp +// Description: Functions to handle loading/combining tesseract data files. +// Author: Daria Antonova +// Created: Wed Jun 03 11:26:43 PST 2009 +// +// (C) Copyright 2009, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifdef _MSC_VER +#pragma warning(disable:4244) // Conversion warnings +#endif + +#include "tessdatamanager.h" + +#include + +#include "helpers.h" +#include "serialis.h" +#include "strngs.h" +#include "tprintf.h" +#include "params.h" + +namespace tesseract { + +bool TessdataManager::Init(const char *data_file_name, int debug_level) { + int i; + debug_level_ = debug_level; + data_file_name_ = data_file_name; + data_file_ = fopen(data_file_name, "rb"); + if (data_file_ == NULL) { + tprintf("Error opening data file %s\n", data_file_name); + tprintf("Please make sure the TESSDATA_PREFIX environment variable is set " + "to the parent directory of your \"tessdata\" directory.\n"); + return false; + } + fread(&actual_tessdata_num_entries_, sizeof(inT32), 1, data_file_); + swap_ = (actual_tessdata_num_entries_ > kMaxNumTessdataEntries); + if (swap_) { + ReverseN(&actual_tessdata_num_entries_, + sizeof(actual_tessdata_num_entries_)); + } + if (actual_tessdata_num_entries_ > TESSDATA_NUM_ENTRIES) { + // For forward compatibility, truncate to the number we can handle. + actual_tessdata_num_entries_ = TESSDATA_NUM_ENTRIES; + } + fread(offset_table_, sizeof(inT64), + actual_tessdata_num_entries_, data_file_); + if (swap_) { + for (i = 0 ; i < actual_tessdata_num_entries_; ++i) { + ReverseN(&offset_table_[i], sizeof(offset_table_[i])); + } + } + if (debug_level_) { + tprintf("TessdataManager loaded %d types of tesseract data files.\n", + actual_tessdata_num_entries_); + for (i = 0; i < actual_tessdata_num_entries_; ++i) { + tprintf("Offset for type %d is %lld\n", i, offset_table_[i]); + } + } + return true; +} + +void TessdataManager::CopyFile(FILE *input_file, FILE *output_file, + bool newline_end, inT64 num_bytes_to_copy) { + if (num_bytes_to_copy == 0) return; + int buffer_size = 1024; + if (num_bytes_to_copy > 0 && buffer_size > num_bytes_to_copy) { + buffer_size = num_bytes_to_copy; + } + inT64 num_bytes_copied = 0; + char *chunk = new char[buffer_size]; + int bytes_read; + char last_char = 0x0; + while ((bytes_read = fread(chunk, sizeof(char), + buffer_size, input_file))) { + fwrite(chunk, sizeof(char), bytes_read, output_file); + last_char = chunk[bytes_read-1]; + if (num_bytes_to_copy > 0) { + num_bytes_copied += bytes_read; + if (num_bytes_copied == num_bytes_to_copy) break; + if (num_bytes_copied + buffer_size > num_bytes_to_copy) { + buffer_size = num_bytes_to_copy - num_bytes_copied; + } + } + } + if (newline_end) ASSERT_HOST(last_char == '\n'); + delete[] chunk; +} + +bool TessdataManager::WriteMetadata(inT64 *offset_table, + const char * language_data_path_prefix, + FILE *output_file) { + inT32 num_entries = TESSDATA_NUM_ENTRIES; + bool result = true; + if (fseek(output_file, 0, SEEK_SET) != 0 || + fwrite(&num_entries, sizeof(inT32), 1, output_file) != 1 || + fwrite(offset_table, sizeof(inT64), TESSDATA_NUM_ENTRIES, + output_file) != TESSDATA_NUM_ENTRIES) { + fclose(output_file); + result = false; + tprintf("WriteMetadata failed in TessdataManager!\n"); + } else if (fclose(output_file)) { + result = false; + tprintf("WriteMetadata failed to close file!\n"); + } else { + tprintf("TessdataManager combined tesseract data files.\n"); + for (int i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + tprintf("Offset for type %2d (%s%-22s) is %lld\n", i, + language_data_path_prefix, kTessdataFileSuffixes[i], + offset_table[i]); + } + } + return result; +} + +bool TessdataManager::CombineDataFiles( + const char *language_data_path_prefix, + const char *output_filename) { + int i; + inT64 offset_table[TESSDATA_NUM_ENTRIES]; + for (i = 0; i < TESSDATA_NUM_ENTRIES; ++i) offset_table[i] = -1; + FILE *output_file = fopen(output_filename, "wb"); + if (output_file == NULL) { + tprintf("Error opening %s for writing\n", output_filename); + return false; + } + // Leave some space for recording the offset_table. + if (fseek(output_file, + sizeof(inT32) + sizeof(inT64) * TESSDATA_NUM_ENTRIES, SEEK_SET)) { + tprintf("Error seeking %s\n", output_filename); + fclose(output_file); + return false; + } + + TessdataType type = TESSDATA_NUM_ENTRIES; + bool text_file = false; + FILE *file_ptr[TESSDATA_NUM_ENTRIES]; + + // Load individual tessdata components from files. + for (i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + ASSERT_HOST(TessdataTypeFromFileSuffix( + kTessdataFileSuffixes[i], &type, &text_file)); + STRING filename = language_data_path_prefix; + filename += kTessdataFileSuffixes[i]; + file_ptr[i] = fopen(filename.string(), "rb"); + if (file_ptr[i] != NULL) { + offset_table[type] = ftell(output_file); + CopyFile(file_ptr[i], output_file, text_file, -1); + fclose(file_ptr[i]); + } + } + + // Make sure that the required components are present. + if (file_ptr[TESSDATA_UNICHARSET] == NULL) { + tprintf("Error opening %sunicharset file\n", language_data_path_prefix); + fclose(output_file); + return false; + } + if (file_ptr[TESSDATA_INTTEMP] != NULL && + (file_ptr[TESSDATA_PFFMTABLE] == NULL || + file_ptr[TESSDATA_NORMPROTO] == NULL)) { + tprintf("Error opening %spffmtable and/or %snormproto files" + " while %sinttemp file was present\n", language_data_path_prefix, + language_data_path_prefix, language_data_path_prefix); + fclose(output_file); + return false; + } + + return WriteMetadata(offset_table, language_data_path_prefix, output_file); +} + +bool TessdataManager::OverwriteComponents( + const char *new_traineddata_filename, + char **component_filenames, + int num_new_components) { + int i; + inT64 offset_table[TESSDATA_NUM_ENTRIES]; + TessdataType type = TESSDATA_NUM_ENTRIES; + bool text_file = false; + FILE *file_ptr[TESSDATA_NUM_ENTRIES]; + for (i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + offset_table[i] = -1; + file_ptr[i] = NULL; + } + FILE *output_file = fopen(new_traineddata_filename, "wb"); + if (output_file == NULL) { + tprintf("Error opening %s for writing\n", new_traineddata_filename); + return false; + } + + // Leave some space for recording the offset_table. + if (fseek(output_file, + sizeof(inT32) + sizeof(inT64) * TESSDATA_NUM_ENTRIES, SEEK_SET)) { + fclose(output_file); + tprintf("Error seeking %s\n", new_traineddata_filename); + return false; + } + + // Open the files with the new components. + for (i = 0; i < num_new_components; ++i) { + if (TessdataTypeFromFileName(component_filenames[i], &type, &text_file)) + file_ptr[type] = fopen(component_filenames[i], "rb"); + } + + // Write updated data to the output traineddata file. + for (i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + if (file_ptr[i] != NULL) { + // Get the data from the opened component file. + offset_table[i] = ftell(output_file); + CopyFile(file_ptr[i], output_file, kTessdataFileIsText[i], -1); + fclose(file_ptr[i]); + } else { + // Get this data component from the loaded data file. + if (SeekToStart(static_cast(i))) { + offset_table[i] = ftell(output_file); + CopyFile(data_file_, output_file, kTessdataFileIsText[i], + GetEndOffset(static_cast(i)) - + ftell(data_file_) + 1); + } + } + } + const char *language_data_path_prefix = strchr(new_traineddata_filename, '.'); + return WriteMetadata(offset_table, language_data_path_prefix, output_file); +} + +bool TessdataManager::TessdataTypeFromFileSuffix( + const char *suffix, TessdataType *type, bool *text_file) { + for (int i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + if (strcmp(kTessdataFileSuffixes[i], suffix) == 0) { + *type = static_cast(i); + *text_file = kTessdataFileIsText[i]; + return true; + } + } + tprintf("TessdataManager can't determine which tessdata" + " component is represented by %s\n", suffix); + return false; +} + +bool TessdataManager::TessdataTypeFromFileName( + const char *filename, TessdataType *type, bool *text_file) { + // Get the file suffix (extension) + const char *suffix = strrchr(filename, '.'); + if (suffix == NULL || *(++suffix) == '\0') return false; + return TessdataTypeFromFileSuffix(suffix, type, text_file); +} + +bool TessdataManager::ExtractToFile(const char *filename) { + TessdataType type = TESSDATA_NUM_ENTRIES; + bool text_file = false; + ASSERT_HOST(tesseract::TessdataManager::TessdataTypeFromFileName( + filename, &type, &text_file)); + if (!SeekToStart(type)) return false; + + FILE *output_file = fopen(filename, "wb"); + if (output_file == NULL) { + tprintf("Error opening %s\n", filename); + exit(1); + } + inT64 begin_offset = ftell(GetDataFilePtr()); + inT64 end_offset = GetEndOffset(type); + tesseract::TessdataManager::CopyFile( + GetDataFilePtr(), output_file, text_file, + end_offset - begin_offset + 1); + fclose(output_file); + return true; +} + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/tessdatamanager.h b/3rdparty/hgOCR/include/ccutil/tessdatamanager.h new file mode 100644 index 00000000..e583b700 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/tessdatamanager.h @@ -0,0 +1,299 @@ +/////////////////////////////////////////////////////////////////////// +// File: tessdatamanager.h +// Description: Functions to handle loading/combining tesseract data files. +// Author: Daria Antonova +// Created: Wed Jun 03 11:26:43 PST 2009 +// +// (C) Copyright 2009, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_TESSDATAMANAGER_H_ +#define TESSERACT_CCUTIL_TESSDATAMANAGER_H_ + +#include + +#include "host.h" +#include "strngs.h" +#include "tprintf.h" + +static const char kTrainedDataSuffix[] = "traineddata"; + +// When adding new tessdata types and file suffixes, please make sure to +// update TessdataType enum, kTessdataFileSuffixes and kTessdataFileIsText. +static const char kLangConfigFileSuffix[] = "config"; +static const char kUnicharsetFileSuffix[] = "unicharset"; +static const char kAmbigsFileSuffix[] = "unicharambigs"; +static const char kBuiltInTemplatesFileSuffix[] = "inttemp"; +static const char kBuiltInCutoffsFileSuffix[] = "pffmtable"; +static const char kNormProtoFileSuffix[] = "normproto"; +static const char kPuncDawgFileSuffix[] = "punc-dawg"; +static const char kSystemDawgFileSuffix[] = "word-dawg"; +static const char kNumberDawgFileSuffix[] = "number-dawg"; +static const char kFreqDawgFileSuffix[] = "freq-dawg"; +static const char kFixedLengthDawgsFileSuffix[] = "fixed-length-dawgs"; +static const char kCubeUnicharsetFileSuffix[] = "cube-unicharset"; +static const char kCubeSystemDawgFileSuffix[] = "cube-word-dawg"; +static const char kShapeTableFileSuffix[] = "shapetable"; +static const char kBigramDawgFileSuffix[] = "bigram-dawg"; +static const char kUnambigDawgFileSuffix[] = "unambig-dawg"; +static const char kParamsModelFileSuffix[] = "params-model"; + +namespace tesseract { + +enum TessdataType { + TESSDATA_LANG_CONFIG, // 0 + TESSDATA_UNICHARSET, // 1 + TESSDATA_AMBIGS, // 2 + TESSDATA_INTTEMP, // 3 + TESSDATA_PFFMTABLE, // 4 + TESSDATA_NORMPROTO, // 5 + TESSDATA_PUNC_DAWG, // 6 + TESSDATA_SYSTEM_DAWG, // 7 + TESSDATA_NUMBER_DAWG, // 8 + TESSDATA_FREQ_DAWG, // 9 + TESSDATA_FIXED_LENGTH_DAWGS, // 10 // deprecated + TESSDATA_CUBE_UNICHARSET, // 11 + TESSDATA_CUBE_SYSTEM_DAWG, // 12 + TESSDATA_SHAPE_TABLE, // 13 + TESSDATA_BIGRAM_DAWG, // 14 + TESSDATA_UNAMBIG_DAWG, // 15 + TESSDATA_PARAMS_MODEL, // 16 + + TESSDATA_NUM_ENTRIES +}; + +/** + * kTessdataFileSuffixes[i] indicates the file suffix for + * tessdata of type i (from TessdataType enum). + */ +static const char *const kTessdataFileSuffixes[] = { + kLangConfigFileSuffix, // 0 + kUnicharsetFileSuffix, // 1 + kAmbigsFileSuffix, // 2 + kBuiltInTemplatesFileSuffix, // 3 + kBuiltInCutoffsFileSuffix, // 4 + kNormProtoFileSuffix, // 5 + kPuncDawgFileSuffix, // 6 + kSystemDawgFileSuffix, // 7 + kNumberDawgFileSuffix, // 8 + kFreqDawgFileSuffix, // 9 + kFixedLengthDawgsFileSuffix, // 10 // deprecated + kCubeUnicharsetFileSuffix, // 11 + kCubeSystemDawgFileSuffix, // 12 + kShapeTableFileSuffix, // 13 + kBigramDawgFileSuffix, // 14 + kUnambigDawgFileSuffix, // 15 + kParamsModelFileSuffix, // 16 +}; + +/** + * If kTessdataFileIsText[i] is true - the tessdata component + * of type i (from TessdataType enum) is text, and is binary otherwise. + */ +static const bool kTessdataFileIsText[] = { + true, // 0 + true, // 1 + true, // 2 + false, // 3 + true, // 4 + true, // 5 + false, // 6 + false, // 7 + false, // 8 + false, // 9 + false, // 10 // deprecated + true, // 11 + false, // 12 + false, // 13 + false, // 14 + false, // 15 + true, // 16 +}; + +/** + * TessdataType could be updated to contain more entries, however + * we do not expect that number to be astronomically high. + * In order to automatically detect endianness TessdataManager will + * flip the bits if actual_tessdata_num_entries_ is larger than + * kMaxNumTessdataEntries. + */ +static const int kMaxNumTessdataEntries = 1000; + + +class TessdataManager { + public: + TessdataManager() { + data_file_ = NULL; + actual_tessdata_num_entries_ = 0; + for (int i = 0; i < TESSDATA_NUM_ENTRIES; ++i) { + offset_table_[i] = -1; + } + } + ~TessdataManager() {} + int DebugLevel() { return debug_level_; } + + /** + * Opens the given data file and reads the offset table. + * @return true on success. + */ + bool Init(const char *data_file_name, int debug_level); + + // Return the name of the underlying data file. + const STRING &GetDataFileName() const { return data_file_name_; } + + /** Returns data file pointer. */ + inline FILE *GetDataFilePtr() const { return data_file_; } + + /** + * Returns false if there is no data of the given type. + * Otherwise does a seek on the data_file_ to position the pointer + * at the start of the data of the given type. + */ + inline bool SeekToStart(TessdataType tessdata_type) { + if (debug_level_) { + tprintf("TessdataManager: seek to offset %lld - start of tessdata" + "type %d (%s))\n", offset_table_[tessdata_type], + tessdata_type, kTessdataFileSuffixes[tessdata_type]); + } + if (offset_table_[tessdata_type] < 0) { + return false; + } else { + ASSERT_HOST(fseek(data_file_, + static_cast(offset_table_[tessdata_type]), + SEEK_SET) == 0); + return true; + } + } + /** Returns the end offset for the given tesseract data file type. */ + inline inT64 GetEndOffset(TessdataType tessdata_type) const { + int index = tessdata_type + 1; + while (index < actual_tessdata_num_entries_ && offset_table_[index] == -1) { + ++index; // skip tessdata types not present in the combined file + } + if (debug_level_) { + tprintf("TessdataManager: end offset for type %d is %lld\n", + tessdata_type, + (index == actual_tessdata_num_entries_) ? -1 + : offset_table_[index]); + } + return (index == actual_tessdata_num_entries_) ? -1 : offset_table_[index] - 1; + } + /** Closes data_file_ (if it was opened by Init()). */ + inline void End() { + if (data_file_ != NULL) { + fclose(data_file_); + data_file_ = NULL; + } + } + bool swap() const { + return swap_; + } + + /** Writes the number of entries and the given offset table to output_file. + * Returns false on error. + */ + static bool WriteMetadata(inT64 *offset_table, + const char *language_data_path_prefix, + FILE *output_file); + + /** + * Reads all the standard tesseract config and data files for a language + * at the given path and bundles them up into one binary data file. + * Returns true if the combined traineddata file was successfully written. + */ + static bool CombineDataFiles(const char *language_data_path_prefix, + const char *output_filename); + + /** + * Gets the individual components from the data_file_ with which the class was + * initialized. Overwrites the components specified by component_filenames. + * Writes the updated traineddata file to new_traineddata_filename. + */ + bool OverwriteComponents(const char *new_traineddata_filename, + char **component_filenames, + int num_new_components); + + /** + * Extracts tessdata component implied by the name of the input file from + * the combined traineddata loaded into TessdataManager. + * Writes the extracted component to the file indicated by the file name. + * E.g. if the filename given is somepath/somelang.unicharset, unicharset + * will be extracted from the data loaded into the TessdataManager and will + * be written to somepath/somelang.unicharset. + * @return true if the component was successfully extracted, false if the + * component was not present in the traineddata loaded into TessdataManager. + */ + bool ExtractToFile(const char *filename); + + /** + * Copies data from the given input file to the output_file provided. + * If num_bytes_to_copy is >= 0, only num_bytes_to_copy is copied from + * the input file, otherwise all the data in the input file is copied. + */ + static void CopyFile(FILE *input_file, FILE *output_file, + bool newline_end, inT64 num_bytes_to_copy); + + /** + * Fills type with TessdataType of the tessdata component represented by the + * given file name. E.g. tessdata/eng.unicharset -> TESSDATA_UNICHARSET. + * Sets *text_file to true if the component is in text format (e.g. + * unicharset, unichar ambigs, config, etc). + * @return true if the tessdata component type could be determined + * from the given file name. + */ + static bool TessdataTypeFromFileSuffix(const char *suffix, + TessdataType *type, + bool *text_file); + + /** + * Tries to determine tessdata component file suffix from filename, + * returns true on success. + */ + static bool TessdataTypeFromFileName(const char *filename, + TessdataType *type, + bool *text_file); + + private: + + /** + * Opens the file whose name is a concatenation of language_data_path_prefix + * and file_suffix. Returns a file pointer to the opened file. + */ + static FILE *GetFilePtr(const char *language_data_path_prefix, + const char *file_suffix, bool text_file); + + /** + * Each offset_table_[i] contains a file offset in the combined data file + * where the data of TessdataFileType i is stored. + */ + inT64 offset_table_[TESSDATA_NUM_ENTRIES]; + /** + * Actual number of entries in the tessdata table. This value can only be + * same or smaller than TESSDATA_NUM_ENTRIES, but can never be larger, + * since then it would be impossible to interpret the type of tessdata at + * indices same and higher than TESSDATA_NUM_ENTRIES. + * This parameter is used to allow for backward compatibility + * when new tessdata types are introduced. + */ + inT32 actual_tessdata_num_entries_; + STRING data_file_name_; // name of the data file. + FILE *data_file_; ///< pointer to the data file. + int debug_level_; + // True if the bytes need swapping. + bool swap_; +}; + + +} // namespace tesseract + +#endif // TESSERACT_CCUTIL_TESSDATAMANAGER_H_ diff --git a/3rdparty/hgOCR/include/ccutil/tprintf.cpp b/3rdparty/hgOCR/include/ccutil/tprintf.cpp new file mode 100644 index 00000000..926c1bc4 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/tprintf.cpp @@ -0,0 +1,71 @@ +/********************************************************************** + * File: tprintf.c + * Description: Trace version of printf - portable between UX and NT + * Author: Phil Cheatle + * Created: Wed Jun 28 15:01:15 BST 1995 + * + * (C) Copyright 1995, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +// Include automatically generated configuration file if running autoconf. +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif + +#include +#include +#include "ccutil.h" +#include "params.h" +#include "strngs.h" +#include "tprintf.h" + +#define MAX_MSG_LEN 65536 + +#define EXTERN +// Since tprintf is protected by a mutex, these parameters can remain global. +DLLSYM STRING_VAR(debug_file, "", "File to send tprintf output to"); + +DLLSYM void +tprintf_internal( // Trace printf + const char *format, ... // Message +) { + tesseract::tprintfMutex.Lock(); + va_list args; // variable args + static FILE *debugfp = NULL; // debug file + // debug window + inT32 offset = 0; // into message + static char msg[MAX_MSG_LEN + 1]; + + va_start(args, format); // variable list + // Format into msg + #ifdef _WIN32 + offset += _vsnprintf(msg + offset, MAX_MSG_LEN - offset, format, args); + if (strcmp(debug_file.string(), "/dev/null") == 0) + debug_file.set_value("nul"); + #else + offset += vsnprintf(msg + offset, MAX_MSG_LEN - offset, format, args); + #endif + va_end(args); + + if (debugfp == NULL && strlen(debug_file.string()) > 0) { + debugfp = fopen(debug_file.string(), "wb"); + } else if (debugfp != NULL && strlen(debug_file.string()) == 0) { + fclose(debugfp); + debugfp = NULL; + } + if (debugfp != NULL) + fprintf(debugfp, "%s", msg); + else + fprintf(stderr, "%s", msg); + tesseract::tprintfMutex.Unlock(); +} diff --git a/3rdparty/hgOCR/include/ccutil/tprintf.h b/3rdparty/hgOCR/include/ccutil/tprintf.h new file mode 100644 index 00000000..27a33823 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/tprintf.h @@ -0,0 +1,36 @@ +/********************************************************************** + * File: tprintf.h + * Description: Trace version of printf - portable between UX and NT + * Author: Phil Cheatle + * Created: Wed Jun 28 15:01:15 BST 1995 + * + * (C) Copyright 1995, Hewlett-Packard Ltd. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCUTIL_TPRINTF_H +#define TESSERACT_CCUTIL_TPRINTF_H + +#include "params.h" + +extern DLLSYM STRING_VAR_H(debug_file, "", + "File to send tprintf output to"); +extern DLLSYM BOOL_VAR_H(debug_window_on, TRUE, + "Send tprintf to window unless file set"); + +// Main logging function. +#define tprintf(...) tprintf_internal(__VA_ARGS__) + +extern TESS_API void tprintf_internal( // Trace printf + const char *format, ...); // Message + +#endif // define TESSERACT_CCUTIL_TPRINTF_H diff --git a/3rdparty/hgOCR/include/ccutil/unichar.cpp b/3rdparty/hgOCR/include/ccutil/unichar.cpp new file mode 100644 index 00000000..0ceced13 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unichar.cpp @@ -0,0 +1,225 @@ +/////////////////////////////////////////////////////////////////////// +// File: unichar.cpp +// Description: Unicode character/ligature class. +// Author: Ray Smith +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "unichar.h" +#include "errcode.h" +#include "genericvector.h" +#include "tprintf.h" + +#define UNI_MAX_LEGAL_UTF32 0x0010FFFF + +// Construct from a utf8 string. If len<0 then the string is null terminated. +// If the string is too long to fit in the UNICHAR then it takes only what +// will fit. Checks for illegal input and stops at an illegal sequence. +// The resulting UNICHAR may be empty. +UNICHAR::UNICHAR(const char* utf8_str, int len) { + int total_len = 0; + int step = 0; + if (len < 0) { + for (len = 0; len < UNICHAR_LEN && utf8_str[len] != 0; ++len); + } + for (total_len = 0; total_len < len; total_len += step) { + step = utf8_step(utf8_str + total_len); + if (total_len + step > UNICHAR_LEN) + break; // Too long. + if (step == 0) + break; // Illegal first byte. + int i; + for (i = 1; i < step; ++i) + if ((utf8_str[total_len + i] & 0xc0) != 0x80) + break; + if (i < step) + break; // Illegal surrogate + } + memcpy(chars, utf8_str, total_len); + if (total_len < UNICHAR_LEN) { + chars[UNICHAR_LEN - 1] = total_len; + while (total_len < UNICHAR_LEN - 1) + chars[total_len++] = 0; + } +} + +// Construct from a single UCS4 character. Illegal values are ignored, +// resulting in an empty UNICHAR. +UNICHAR::UNICHAR(int unicode) { + const int bytemask = 0xBF; + const int bytemark = 0x80; + + if (unicode < 0x80) { + chars[UNICHAR_LEN - 1] = 1; + chars[2] = 0; + chars[1] = 0; + chars[0] = static_cast(unicode); + } else if (unicode < 0x800) { + chars[UNICHAR_LEN - 1] = 2; + chars[2] = 0; + chars[1] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[0] = static_cast(unicode | 0xc0); + } else if (unicode < 0x10000) { + chars[UNICHAR_LEN - 1] = 3; + chars[2] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[1] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[0] = static_cast(unicode | 0xe0); + } else if (unicode <= UNI_MAX_LEGAL_UTF32) { + chars[UNICHAR_LEN - 1] = 4; + chars[3] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[2] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[1] = static_cast((unicode | bytemark) & bytemask); + unicode >>= 6; + chars[0] = static_cast(unicode | 0xf0); + } else { + memset(chars, 0, UNICHAR_LEN); + } +} + +// Get the first character as UCS-4. +int UNICHAR::first_uni() const { + static const int utf8_offsets[5] = { + 0, 0, 0x3080, 0xE2080, 0x3C82080 + }; + int uni = 0; + int len = utf8_step(chars); + const char* src = chars; + + switch (len) { + default: + break; + case 4: + uni += static_cast(*src++); + uni <<= 6; + case 3: + uni += static_cast(*src++); + uni <<= 6; + case 2: + uni += static_cast(*src++); + uni <<= 6; + case 1: + uni += static_cast(*src++); + } + uni -= utf8_offsets[len]; + return uni; +} + +// Get a terminated UTF8 string: Must delete[] it after use. +char* UNICHAR::utf8_str() const { + int len = utf8_len(); + char* str = new char[len + 1]; + memcpy(str, chars, len); + str[len] = 0; + return str; +} + +// Get the number of bytes in the first character of the given utf8 string. +int UNICHAR::utf8_step(const char* utf8_str) { + static const char utf8_bytes[256] = { + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, 4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0 + }; + + return utf8_bytes[static_cast(*utf8_str)]; +} + +UNICHAR::const_iterator& UNICHAR::const_iterator::operator++() { + ASSERT_HOST(it_ != NULL); + int step = utf8_step(it_); + if (step == 0) { + tprintf("ERROR: Illegal UTF8 encountered.\n"); + for (int i = 0; i < 5 && it_[i] != '\0'; ++i) { + tprintf("Index %d char = 0x%x\n", i, it_[i]); + } + step = 1; + } + it_ += step; + return *this; +} + +int UNICHAR::const_iterator::operator*() const { + ASSERT_HOST(it_ != NULL); + const int len = utf8_step(it_); + if (len == 0) { + tprintf("WARNING: Illegal UTF8 encountered\n"); + return ' '; + } + UNICHAR uch(it_, len); + return uch.first_uni(); +} + +int UNICHAR::const_iterator::get_utf8(char* utf8_output) const { + ASSERT_HOST(it_ != NULL); + const int len = utf8_step(it_); + if (len == 0) { + tprintf("WARNING: Illegal UTF8 encountered\n"); + utf8_output[0] = ' '; + return 1; + } + strncpy(utf8_output, it_, len); + return len; +} + +int UNICHAR::const_iterator::utf8_len() const { + ASSERT_HOST(it_ != NULL); + const int len = utf8_step(it_); + if (len == 0) { + tprintf("WARNING: Illegal UTF8 encountered\n"); + return 1; + } + return len; +} + +bool UNICHAR::const_iterator::is_legal() const { + return utf8_step(it_) > 0; +} + +UNICHAR::const_iterator UNICHAR::begin(const char* utf8_str, const int len) { + return UNICHAR::const_iterator(utf8_str); +} + +UNICHAR::const_iterator UNICHAR::end(const char* utf8_str, const int len) { + return UNICHAR::const_iterator(utf8_str + len); +} + +// Converts a utf-8 string to a vector of unicodes. +// Returns false if the input contains invalid UTF-8, and replaces +// the rest of the string with a single space. +bool UNICHAR::UTF8ToUnicode(const char* utf8_str, + GenericVector* unicodes) { + const int utf8_length = strlen(utf8_str); + const_iterator end_it(end(utf8_str, utf8_length)); + for (const_iterator it(begin(utf8_str, utf8_length)); it != end_it; ++it) { + if (it.is_legal()) { + unicodes->push_back(*it); + } else { + unicodes->push_back(' '); + return false; + } + } + return true; +} + diff --git a/3rdparty/hgOCR/include/ccutil/unichar.h b/3rdparty/hgOCR/include/ccutil/unichar.h new file mode 100644 index 00000000..c5bc0ae7 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unichar.h @@ -0,0 +1,165 @@ +/////////////////////////////////////////////////////////////////////// +// File: unichar.h +// Description: Unicode character/ligature class. +// Author: Ray Smith +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_UNICHAR_H__ +#define TESSERACT_CCUTIL_UNICHAR_H__ + +#include +#include + +template class GenericVector; + +// Maximum number of characters that can be stored in a UNICHAR. Must be +// at least 4. Must not exceed 31 without changing the coding of length. +#define UNICHAR_LEN 30 + +// A UNICHAR_ID is the unique id of a unichar. +typedef int UNICHAR_ID; + +// A variable to indicate an invalid or uninitialized unichar id. +static const int INVALID_UNICHAR_ID = -1; +// A special unichar that corresponds to INVALID_UNICHAR_ID. +static const char INVALID_UNICHAR[] = "__INVALID_UNICHAR__"; + +enum StrongScriptDirection { + DIR_NEUTRAL = 0, // Text contains only neutral characters. + DIR_LEFT_TO_RIGHT = 1, // Text contains no Right-to-Left characters. + DIR_RIGHT_TO_LEFT = 2, // Text contains no Left-to-Right characters. + DIR_MIX = 3, // Text contains a mixture of left-to-right + // and right-to-left characters. +}; + +// The UNICHAR class holds a single classification result. This may be +// a single Unicode character (stored as between 1 and 4 utf8 bytes) or +// multiple Unicode characters representing the NFKC expansion of a ligature +// such as fi, ffl etc. These are also stored as utf8. +class UNICHAR { + public: + UNICHAR() { + memset(chars, 0, UNICHAR_LEN); + } + + // Construct from a utf8 string. If len<0 then the string is null terminated. + // If the string is too long to fit in the UNICHAR then it takes only what + // will fit. + UNICHAR(const char* utf8_str, int len); + + // Construct from a single UCS4 character. + explicit UNICHAR(int unicode); + + // Default copy constructor and operator= are OK. + + // Get the first character as UCS-4. + int first_uni() const; + + // Get the length of the UTF8 string. + int utf8_len() const { + int len = chars[UNICHAR_LEN - 1]; + return len >=0 && len < UNICHAR_LEN ? len : UNICHAR_LEN; + } + + // Get a UTF8 string, but NOT NULL terminated. + const char* utf8() const { + return chars; + } + + // Get a terminated UTF8 string: Must delete[] it after use. + char* utf8_str() const; + + // Get the number of bytes in the first character of the given utf8 string. + static int utf8_step(const char* utf8_str); + + // A class to simplify iterating over and accessing elements of a UTF8 + // string. Note that unlike the UNICHAR class, const_iterator does NOT COPY or + // take ownership of the underlying byte array. It also does not permit + // modification of the array (as the name suggests). + // + // Example: + // for (UNICHAR::const_iterator it = UNICHAR::begin(str, str_len); + // it != UNICHAR::end(str, len); + // ++it) { + // tprintf("UCS-4 symbol code = %d\n", *it); + // char buf[5]; + // int char_len = it.get_utf8(buf); buf[char_len] = '\0'; + // tprintf("Char = %s\n", buf); + // } + class const_iterator { + typedef const_iterator CI; + + public: + // Step to the next UTF8 character. + // If the current position is at an illegal UTF8 character, then print an + // error message and step by one byte. If the current position is at a NULL + // value, don't step past it. + const_iterator& operator++(); + + // Return the UCS-4 value at the current position. + // If the current position is at an illegal UTF8 value, return a single + // space character. + int operator*() const; + + // Store the UTF-8 encoding of the current codepoint into buf, which must be + // at least 4 bytes long. Return the number of bytes written. + // If the current position is at an illegal UTF8 value, writes a single + // space character and returns 1. + // Note that this method does not null-terminate the buffer. + int get_utf8(char* buf) const; + // Returns the number of bytes of the current codepoint. Returns 1 if the + // current position is at an illegal UTF8 value. + int utf8_len() const; + // Returns true if the UTF-8 encoding at the current position is legal. + bool is_legal() const; + + // Return the pointer into the string at the current position. + const char* utf8_data() const { return it_; } + + // Iterator equality operators. + friend bool operator==(const CI& lhs, const CI& rhs) { + return lhs.it_ == rhs.it_; + } + friend bool operator!=(const CI& lhs, const CI& rhs) { + return !(lhs == rhs); + } + + private: + friend class UNICHAR; + explicit const_iterator(const char* it) : it_(it) {} + + const char* it_; // Pointer into the string. + }; + + // Create a start/end iterator pointing to a string. Note that these methods + // are static and do NOT create a copy or take ownership of the underlying + // array. + static const_iterator begin(const char* utf8_str, const int byte_length); + static const_iterator end(const char* utf8_str, const int byte_length); + + // Converts a utf-8 string to a vector of unicodes. + // Returns false if the input contains invalid UTF-8, and replaces + // the rest of the string with a single space. + static bool UTF8ToUnicode(const char* utf8_str, GenericVector* unicodes); + + private: + // A UTF-8 representation of 1 or more Unicode characters. + // The last element (chars[UNICHAR_LEN - 1]) is a length if + // its value < UNICHAR_LEN, otherwise it is a genuine character. + char chars[UNICHAR_LEN]; +}; + +#endif // TESSERACT_CCUTIL_UNICHAR_H__ diff --git a/3rdparty/hgOCR/include/ccutil/unicharmap.cpp b/3rdparty/hgOCR/include/ccutil/unicharmap.cpp new file mode 100644 index 00000000..6b1bb1d6 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicharmap.cpp @@ -0,0 +1,172 @@ +/////////////////////////////////////////////////////////////////////// +// File: unicharmap.cpp +// Description: Unicode character/ligature to integer id class. +// Author: Thomas Kielbus +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include +#include "unichar.h" +#include "host.h" +#include "unicharmap.h" + +UNICHARMAP::UNICHARMAP() : +nodes(0) { +} + +UNICHARMAP::~UNICHARMAP() { + if (nodes != 0) + delete[] nodes; +} + +// Search the given unichar representation in the tree. Each character in the +// string is interpreted as an index in an array of nodes. +UNICHAR_ID UNICHARMAP::unichar_to_id(const char* const unichar_repr) const { + const char* current_char = unichar_repr; + UNICHARMAP_NODE* current_nodes = nodes; + + assert(*unichar_repr != '\0'); + + do { + if (*(current_char + 1) == '\0') + return current_nodes[static_cast(*current_char)].id; + current_nodes = + current_nodes[static_cast(*current_char)].children; + ++current_char; + } while (true); +} + +// Search the given unichar representation in the tree, using length characters +// from it maximum. Each character in the string is interpreted as an index in +// an array of nodes. +UNICHAR_ID UNICHARMAP::unichar_to_id(const char* const unichar_repr, + int length) const { + const char* current_char = unichar_repr; + UNICHARMAP_NODE* current_nodes = nodes; + + assert(*unichar_repr != '\0'); + assert(length > 0 && length <= UNICHAR_LEN); + + do { + if (length == 1 || *(current_char + 1) == '\0') + return current_nodes[static_cast(*current_char)].id; + current_nodes = + current_nodes[static_cast(*current_char)].children; + ++current_char; + --length; + } while (true); +} + +// Search the given unichar representation in the tree, creating the possibly +// missing nodes. Once the right place has been found, insert the given id and +// update the inserted flag to keep track of the insert. Each character in the +// string is interpreted as an index in an array of nodes. +void UNICHARMAP::insert(const char* const unichar_repr, UNICHAR_ID id) { + const char* current_char = unichar_repr; + UNICHARMAP_NODE** current_nodes_pointer = &nodes; + + assert(*unichar_repr != '\0'); + assert(id >= 0); + + do { + if (*current_nodes_pointer == 0) + *current_nodes_pointer = new UNICHARMAP_NODE[256]; + if (*(current_char + 1) == '\0') { + (*current_nodes_pointer) + [static_cast(*current_char)].id = id; + return; + } + current_nodes_pointer = + &((*current_nodes_pointer) + [static_cast(*current_char)].children); + ++current_char; + } while (true); +} + +// Search the given unichar representation in the tree. Each character in the +// string is interpreted as an index in an array of nodes. Stop once the tree +// does not have anymore nodes or once we found the right unichar_repr. +bool UNICHARMAP::contains(const char* const unichar_repr) const { + if (unichar_repr == NULL || *unichar_repr == '\0') return false; + + const char* current_char = unichar_repr; + UNICHARMAP_NODE* current_nodes = nodes; + + while (current_nodes != 0 && *(current_char + 1) != '\0') { + current_nodes = + current_nodes[static_cast(*current_char)].children; + ++current_char; + } + return current_nodes != 0 && *(current_char + 1) == '\0' && + current_nodes[static_cast(*current_char)].id >= 0; +} + +// Search the given unichar representation in the tree, using length characters +// from it maximum. Each character in the string is interpreted as an index in +// an array of nodes. Stop once the tree does not have anymore nodes or once we +// found the right unichar_repr. +bool UNICHARMAP::contains(const char* const unichar_repr, + int length) const { + if (unichar_repr == NULL || *unichar_repr == '\0') return false; + if (length <= 0 || length > UNICHAR_LEN) return false; + + const char* current_char = unichar_repr; + UNICHARMAP_NODE* current_nodes = nodes; + + while (current_nodes != 0 && (length > 1 && *(current_char + 1) != '\0')) { + current_nodes = + current_nodes[static_cast(*current_char)].children; + --length; + ++current_char; + } + return current_nodes != 0 && (length == 1 || *(current_char + 1) == '\0') && + current_nodes[static_cast(*current_char)].id >= 0; +} + +// Return the minimum number of characters that must be used from this string +// to obtain a match in the UNICHARMAP. +int UNICHARMAP::minmatch(const char* const unichar_repr) const { + const char* current_char = unichar_repr; + UNICHARMAP_NODE* current_nodes = nodes; + + while (current_nodes != NULL && *current_char != '\0') { + if (current_nodes[static_cast(*current_char)].id >= 0) + return current_char + 1 - unichar_repr; + current_nodes = + current_nodes[static_cast(*current_char)].children; + ++current_char; + } + return 0; +} + +void UNICHARMAP::clear() { + if (nodes != 0) + { + delete[] nodes; + nodes = 0; + } +} + +UNICHARMAP::UNICHARMAP_NODE::UNICHARMAP_NODE() : +children(0), +id(-1) { +} + +// Recursively delete the children +UNICHARMAP::UNICHARMAP_NODE::~UNICHARMAP_NODE() { + if (children != 0) { + delete[] children; + } +} diff --git a/3rdparty/hgOCR/include/ccutil/unicharmap.h b/3rdparty/hgOCR/include/ccutil/unicharmap.h new file mode 100644 index 00000000..ad901585 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicharmap.h @@ -0,0 +1,82 @@ +/////////////////////////////////////////////////////////////////////// +// File: unicharmap.h +// Description: Unicode character/ligature to integer id class. +// Author: Thomas Kielbus +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_UNICHARMAP_H__ +#define TESSERACT_CCUTIL_UNICHARMAP_H__ + +#include "unichar.h" + +// A UNICHARMAP stores unique unichars. Each of them is associated with one +// UNICHAR_ID. +class UNICHARMAP { + public: + + // Create an empty UNICHARMAP + UNICHARMAP(); + + ~UNICHARMAP(); + + // Insert the given unichar represention in the UNICHARMAP and associate it + // with the given id. The length of the representation MUST be non-zero. + void insert(const char* const unichar_repr, UNICHAR_ID id); + + // Return the id associated with the given unichar representation, + // this representation MUST exist within the UNICHARMAP. + // The length of the representation MUST be non-zero. + UNICHAR_ID unichar_to_id(const char* const unichar_repr) const; + + // Return the id associated with the given unichar representation, + // this representation MUST exist within the UNICHARMAP. The first + // length characters (maximum) from unichar_repr are used. The length + // MUST be non-zero. + UNICHAR_ID unichar_to_id(const char* const unichar_repr, int length) const; + + // Return true if the given unichar representation is already present in the + // UNICHARMAP. The length of the representation MUST be non-zero. + bool contains(const char* const unichar_repr) const; + + // Return true if the given unichar representation is already present in the + // UNICHARMAP. The first length characters (maximum) from unichar_repr are + // used. The length MUST be non-zero. + bool contains(const char* const unichar_repr, int length) const; + + // Return the minimum number of characters that must be used from this string + // to obtain a match in the UNICHARMAP. + int minmatch(const char* const unichar_repr) const; + + // Clear the UNICHARMAP. All previous data is lost. + void clear(); + + private: + + // The UNICHARMAP is represented as a tree whose nodes are of type + // UNICHARMAP_NODE. + struct UNICHARMAP_NODE { + + UNICHARMAP_NODE(); + ~UNICHARMAP_NODE(); + + UNICHARMAP_NODE* children; + UNICHAR_ID id; + }; + + UNICHARMAP_NODE* nodes; +}; + +#endif // TESSERACT_CCUTIL_UNICHARMAP_H__ diff --git a/3rdparty/hgOCR/include/ccutil/unicharset.cpp b/3rdparty/hgOCR/include/ccutil/unicharset.cpp new file mode 100644 index 00000000..db3e584e --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicharset.cpp @@ -0,0 +1,1086 @@ +/////////////////////////////////////////////////////////////////////// +// File: unicharset.cpp +// Description: Unicode character/ligature set class. +// Author: Thomas Kielbus +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#include "unicharset.h" + +#include +#include +#include + +#include "params.h" +#include "serialis.h" +#include "tesscallback.h" +#include "tprintf.h" +#include "unichar.h" + +// Special character used in representing character fragments. +static const char kSeparator = '|'; +// Special character used in representing 'natural' character fragments. +static const char kNaturalFlag = 'n'; + +static const int ISALPHA_MASK = 0x1; +static const int ISLOWER_MASK = 0x2; +static const int ISUPPER_MASK = 0x4; +static const int ISDIGIT_MASK = 0x8; +static const int ISPUNCTUATION_MASK = 0x10; + +// Y coordinate threshold for determining cap-height vs x-height. +// TODO(rays) Bring the global definition down to the ccutil library level, +// so this constant is relative to some other constants. +static const int kMeanlineThreshold = 220; +// Let C be the number of alpha chars for which all tops exceed +// kMeanlineThreshold, and X the number of alpha chars for which all +// tops are below kMeanlineThreshold, then if X > C * +// kMinXHeightFraction and C > X * kMinCapHeightFraction or more than +// half the alpha characters have upper or lower case, then the +// unicharset "has x-height". +const double kMinXHeightFraction = 0.25; +const double kMinCapHeightFraction = 0.05; + +/*static */ +const char* UNICHARSET::kCustomLigatures[][2] = { + {"ct", "\uE003"}, // c + t -> U+E003 + {"ſh", "\uE006"}, // long-s + h -> U+E006 + {"ſi", "\uE007"}, // long-s + i -> U+E007 + {"ſl", "\uE008"}, // long-s + l -> U+E008 + {"ſſ", "\uE009"}, // long-s + long-s -> U+E009 + {NULL, NULL} +}; + +// List of strings for the SpecialUnicharCodes. Keep in sync with the enum. +const char* UNICHARSET::kSpecialUnicharCodes[SPECIAL_UNICHAR_CODES_COUNT] = { + " ", + "Joined", + "|Broken|0|1" +}; + +UNICHARSET::UNICHAR_PROPERTIES::UNICHAR_PROPERTIES() { + Init(); +} + +// Initialize all properties to sensible default values. +void UNICHARSET::UNICHAR_PROPERTIES::Init() { + isalpha = false; + islower = false; + isupper = false; + isdigit = false; + ispunctuation = false; + isngram = false; + enabled = false; + SetRangesOpen(); + script_id = 0; + other_case = 0; + mirror = 0; + normed = ""; + direction = UNICHARSET::U_LEFT_TO_RIGHT; + fragment = NULL; +} + +// Sets all ranges wide open. Initialization default in case there are +// no useful values available. +void UNICHARSET::UNICHAR_PROPERTIES::SetRangesOpen() { + min_bottom = 0; + max_bottom = MAX_UINT8; + min_top = 0; + max_top = MAX_UINT8; + width = 0.0f; + width_sd = 0.0f; + bearing = 0.0f; + bearing_sd = 0.0f; + advance = 0.0f; + advance_sd = 0.0f; +} + +// Sets all ranges to empty. Used before expanding with font-based data. +void UNICHARSET::UNICHAR_PROPERTIES::SetRangesEmpty() { + min_bottom = MAX_UINT8; + max_bottom = 0; + min_top = MAX_UINT8; + max_top = 0; + width = 0.0f; + width_sd = 0.0f; + bearing = 0.0f; + bearing_sd = 0.0f; + advance = 0.0f; + advance_sd = 0.0f; +} + +// Returns true if any of the top/bottom/width/bearing/advance ranges/stats +// is emtpy. +bool UNICHARSET::UNICHAR_PROPERTIES::AnyRangeEmpty() const { + return width == 0.0f || advance == 0.0f; +} + +// Expands the ranges with the ranges from the src properties. +void UNICHARSET::UNICHAR_PROPERTIES::ExpandRangesFrom( + const UNICHAR_PROPERTIES& src) { + UpdateRange(src.min_bottom, &min_bottom, &max_bottom); + UpdateRange(src.max_bottom, &min_bottom, &max_bottom); + UpdateRange(src.min_top, &min_top, &max_top); + UpdateRange(src.max_top, &min_top, &max_top); + if (src.width_sd > width_sd) { + width = src.width; + width_sd = src.width_sd; + } + if (src.bearing_sd > bearing_sd) { + bearing = src.bearing; + bearing_sd = src.bearing_sd; + } + if (src.advance_sd > advance_sd) { + advance = src.advance; + advance_sd = src.advance_sd; + } +} + +// Copies the properties from src into this. +void UNICHARSET::UNICHAR_PROPERTIES::CopyFrom(const UNICHAR_PROPERTIES& src) { + // Apart from the fragment, everything else can be done with a default copy. + CHAR_FRAGMENT* saved_fragment = fragment; + *this = src; // Bitwise copy. + fragment = saved_fragment; +} + +UNICHARSET::UNICHARSET() : + unichars(NULL), + ids(), + size_used(0), + size_reserved(0), + script_table(NULL), + script_table_size_used(0), + null_script("NULL") { + clear(); + for (int i = 0; i < SPECIAL_UNICHAR_CODES_COUNT; ++i) { + unichar_insert(kSpecialUnicharCodes[i]); + if (i == UNICHAR_JOINED) + set_isngram(i, true); + } +} + +UNICHARSET::~UNICHARSET() { + clear(); +} + +void UNICHARSET::reserve(int unichars_number) { + if (unichars_number > size_reserved) { + UNICHAR_SLOT* unichars_new = new UNICHAR_SLOT[unichars_number]; + for (int i = 0; i < size_used; ++i) + unichars_new[i] = unichars[i]; + for (int j = size_used; j < unichars_number; ++j) { + unichars_new[j].properties.script_id = add_script(null_script); + } + delete[] unichars; + unichars = unichars_new; + size_reserved = unichars_number; + } +} + +UNICHAR_ID +UNICHARSET::unichar_to_id(const char* const unichar_repr) const { + return ids.contains(unichar_repr) ? + ids.unichar_to_id(unichar_repr) : INVALID_UNICHAR_ID; +} + +UNICHAR_ID UNICHARSET::unichar_to_id(const char* const unichar_repr, + int length) const { + assert(length > 0 && length <= UNICHAR_LEN); + return ids.contains(unichar_repr, length) ? + ids.unichar_to_id(unichar_repr, length) : INVALID_UNICHAR_ID; +} + +// Return the minimum number of bytes that matches a legal UNICHAR_ID, +// while leaving the rest of the string encodable. Returns 0 if the +// beginning of the string is not encodable. +// WARNING: this function now encodes the whole string for precision. +// Use encode_string in preference to repeatedly calling step. +int UNICHARSET::step(const char* str) const { + GenericVector encoding; + GenericVector lengths; + encode_string(str, true, &encoding, &lengths, NULL); + if (encoding.empty() || encoding[0] == INVALID_UNICHAR_ID) return 0; + return lengths[0]; +} + +// Return whether the given UTF-8 string is encodable with this UNICHARSET. +// If not encodable, write the first byte offset which cannot be converted +// into the second (return) argument. +bool UNICHARSET::encodable_string(const char *str, + int *first_bad_position) const { + GenericVector encoding; + return encode_string(str, true, &encoding, NULL, first_bad_position); +} + +// Encodes the given UTF-8 string with this UNICHARSET. +// Returns true if the encoding succeeds completely, false if there is at +// least one INVALID_UNICHAR_ID in the returned encoding, but in this case +// the rest of the string is still encoded. +// If lengths is not NULL, then it is filled with the corresponding +// byte length of each encoded UNICHAR_ID. +bool UNICHARSET::encode_string(const char* str, bool give_up_on_failure, + GenericVector* encoding, + GenericVector* lengths, + int* encoded_length) const { + GenericVector working_encoding; + GenericVector working_lengths; + GenericVector best_lengths; + encoding->truncate(0); // Just in case str is empty. + int str_length = strlen(str); + int str_pos = 0; + bool perfect = true; + while (str_pos < str_length) { + encode_string(str, str_pos, str_length, &working_encoding, &working_lengths, + &str_pos, encoding, &best_lengths); + if (str_pos < str_length) { + // This is a non-match. Skip one utf-8 character. + perfect = false; + if (give_up_on_failure) break; + int step = UNICHAR::utf8_step(str + str_pos); + if (step == 0) step = 1; + encoding->push_back(INVALID_UNICHAR_ID); + best_lengths.push_back(step); + str_pos += step; + working_encoding = *encoding; + working_lengths = best_lengths; + } + } + if (lengths != NULL) *lengths = best_lengths; + if (encoded_length != NULL) *encoded_length = str_pos; + return perfect; +} + +const char* UNICHARSET::id_to_unichar(UNICHAR_ID id) const { + if (id == INVALID_UNICHAR_ID) { + return INVALID_UNICHAR; + } + ASSERT_HOST(id < this->size()); + return unichars[id].representation; +} + +const char* UNICHARSET::id_to_unichar_ext(UNICHAR_ID id) const { + if (id == INVALID_UNICHAR_ID) { + return INVALID_UNICHAR; + } + ASSERT_HOST(id < this->size()); + // Resolve from the kCustomLigatures table if this is a private encoding. + if (get_isprivate(id)) { + const char* ch = id_to_unichar(id); + for (int i = 0; kCustomLigatures[i][0] != NULL; ++i) { + if (!strcmp(ch, kCustomLigatures[i][1])) { + return kCustomLigatures[i][0]; + } + } + } + // Otherwise return the stored representation. + return unichars[id].representation; +} + +// Return a STRING that reformats the utf8 str into the str followed +// by its hex unicodes. +STRING UNICHARSET::debug_utf8_str(const char* str) { + STRING result = str; + result += " ["; + int step = 1; + // Chop into unicodes and code each as hex. + for (int i = 0; str[i] != '\0'; i += step) { + char hex[sizeof(int) * 2 + 1]; + step = UNICHAR::utf8_step(str + i); + if (step == 0) { + step = 1; + sprintf(hex, "%x", str[i]); + } else { + UNICHAR ch(str + i, step); + sprintf(hex, "%x", ch.first_uni()); + } + result += hex; + result += " "; + } + result += "]"; + return result; +} + +// Return a STRING containing debug information on the unichar, including +// the id_to_unichar, its hex unicodes and the properties. +STRING UNICHARSET::debug_str(UNICHAR_ID id) const { + if (id == INVALID_UNICHAR_ID) return STRING(id_to_unichar(id)); + const CHAR_FRAGMENT *fragment = this->get_fragment(id); + if (fragment) { + return fragment->to_string(); + } + const char* str = id_to_unichar(id); + STRING result = debug_utf8_str(str); + // Append a for lower alpha, A for upper alpha, and x if alpha but neither. + if (get_isalpha(id)) { + if (get_islower(id)) + result += "a"; + else if (get_isupper(id)) + result += "A"; + else + result += "x"; + } + // Append 0 if a digit. + if (get_isdigit(id)) { + result += "0"; + } + // Append p is a punctuation symbol. + if (get_ispunctuation(id)) { + result += "p"; + } + return result; +} + +// Sets the normed_ids vector from the normed string. normed_ids is not +// stored in the file, and needs to be set when the UNICHARSET is loaded. +void UNICHARSET::set_normed_ids(UNICHAR_ID unichar_id) { + unichars[unichar_id].properties.normed_ids.truncate(0); + if (unichar_id == UNICHAR_SPACE && id_to_unichar(unichar_id)[0] == ' ') { + unichars[unichar_id].properties.normed_ids.push_back(UNICHAR_SPACE); + } else if (!encode_string(unichars[unichar_id].properties.normed.string(), + true, &unichars[unichar_id].properties.normed_ids, + NULL, NULL)) { + unichars[unichar_id].properties.normed_ids.truncate(0); + unichars[unichar_id].properties.normed_ids.push_back(unichar_id); + } +} + +// Returns whether the unichar id represents a unicode value in the private use +// area. We use this range only internally to represent uncommon ligatures +// (eg. 'ct') that do not have regular unicode values. +bool UNICHARSET::get_isprivate(UNICHAR_ID unichar_id) const { + UNICHAR uc(id_to_unichar(unichar_id), -1); + int uni = uc.first_uni(); + return (uni >= 0xE000 && uni <= 0xF8FF); +} + + +// Sets all ranges to empty, so they can be expanded to set the values. +void UNICHARSET::set_ranges_empty() { + for (int id = 0; id < size_used; ++id) { + unichars[id].properties.SetRangesEmpty(); + } +} + +// Sets all the properties for this unicharset given a src unicharset with +// everything set. The unicharsets don't have to be the same, and graphemes +// are correctly accounted for. +void UNICHARSET::PartialSetPropertiesFromOther(int start_index, + const UNICHARSET& src) { + for (int ch = start_index; ch < size_used; ++ch) { + const char* utf8 = id_to_unichar(ch); + UNICHAR_PROPERTIES properties; + if (src.GetStrProperties(utf8, &properties)) { + // Setup the script_id, other_case, and mirror properly. + const char* script = src.get_script_from_script_id(properties.script_id); + properties.script_id = add_script(script); + const char* other_case = src.id_to_unichar(properties.other_case); + if (contains_unichar(other_case)) { + properties.other_case = unichar_to_id(other_case); + } else { + properties.other_case = ch; + } + const char* mirror_str = src.id_to_unichar(properties.mirror); + if (contains_unichar(mirror_str)) { + properties.mirror = unichar_to_id(mirror_str); + } else { + properties.mirror = ch; + } + unichars[ch].properties.CopyFrom(properties); + set_normed_ids(ch); + } + } +} + +// Expands the tops and bottoms and widths for this unicharset given a +// src unicharset with ranges in it. The unicharsets don't have to be the +// same, and graphemes are correctly accounted for. +void UNICHARSET::ExpandRangesFromOther(const UNICHARSET& src) { + for (int ch = 0; ch < size_used; ++ch) { + const char* utf8 = id_to_unichar(ch); + UNICHAR_PROPERTIES properties; + if (src.GetStrProperties(utf8, &properties)) { + // Expand just the ranges from properties. + unichars[ch].properties.ExpandRangesFrom(properties); + } + } +} + +// Makes this a copy of src. Clears this completely first, so the automatic +// ids will not be present in this if not in src. Does NOT reorder the set! +void UNICHARSET::CopyFrom(const UNICHARSET& src) { + clear(); + for (int ch = 0; ch < src.size_used; ++ch) { + const UNICHAR_PROPERTIES& src_props = src.unichars[ch].properties; + const char* utf8 = src.id_to_unichar(ch); + unichar_insert(utf8); + unichars[ch].properties.ExpandRangesFrom(src_props); + } + // Set properties, including mirror and other_case, WITHOUT reordering + // the unicharset. + PartialSetPropertiesFromOther(0, src); +} + +// For each id in src, if it does not occur in this, add it, as in +// SetPropertiesFromOther, otherwise expand the ranges, as in +// ExpandRangesFromOther. +void UNICHARSET::AppendOtherUnicharset(const UNICHARSET& src) { + int initial_used = size_used; + for (int ch = 0; ch < src.size_used; ++ch) { + const UNICHAR_PROPERTIES& src_props = src.unichars[ch].properties; + const char* utf8 = src.id_to_unichar(ch); + if (ch >= SPECIAL_UNICHAR_CODES_COUNT && src_props.AnyRangeEmpty()) { + // Only use fully valid entries. + tprintf("Bad properties for index %d, char %s: " + "%d,%d %d,%d %g,%g %g,%g %g,%g\n", + ch, utf8, src_props.min_bottom, src_props.max_bottom, + src_props.min_top, src_props.max_top, + src_props.width, src_props.width_sd, + src_props.bearing, src_props.bearing_sd, + src_props.advance, src_props.advance_sd); + continue; + } + int id = size_used; + if (contains_unichar(utf8)) { + id = unichar_to_id(utf8); + // Just expand current ranges. + unichars[id].properties.ExpandRangesFrom(src_props); + } else { + unichar_insert(utf8); + unichars[id].properties.SetRangesEmpty(); + } + } + // Set properties, including mirror and other_case, WITHOUT reordering + // the unicharset. + PartialSetPropertiesFromOther(initial_used, src); +} + +// Returns true if the acceptable ranges of the tops of the characters do +// not overlap, making their x-height calculations distinct. +bool UNICHARSET::SizesDistinct(UNICHAR_ID id1, UNICHAR_ID id2) const { + int overlap = MIN(unichars[id1].properties.max_top, + unichars[id2].properties.max_top) - + MAX(unichars[id1].properties.min_top, + unichars[id2].properties.min_top); + return overlap <= 0; +} + +// Internal recursive version of encode_string above. +// Seeks to encode the given string as a sequence of UNICHAR_IDs such that +// each UNICHAR_ID uses the least possible part of the utf8 str. +// It does this by depth-first tail recursion on increasing length matches +// to the UNICHARSET, saving the first encountered result that encodes the +// maximum total length of str. It stops on a failure to encode to make +// the overall process of encoding a partially failed string more efficient. +// See unicharset.h for definition of the args. +void UNICHARSET::encode_string(const char* str, int str_index, int str_length, + GenericVector* encoding, + GenericVector* lengths, + int* best_total_length, + GenericVector* best_encoding, + GenericVector* best_lengths) const { + if (str_index > *best_total_length) { + // This is the best result so far. + *best_total_length = str_index; + *best_encoding = *encoding; + if (best_lengths != NULL) + *best_lengths = *lengths; + } + if (str_index == str_length) return; + int encoding_index = encoding->size(); + // Find the length of the first matching unicharset member. + int length = ids.minmatch(str + str_index); + if (length == 0 || str_index + length > str_length) return; + do { + if (ids.contains(str + str_index, length)) { + // Successful encoding so far. + UNICHAR_ID id = ids.unichar_to_id(str + str_index, length); + encoding->push_back(id); + lengths->push_back(length); + encode_string(str, str_index + length, str_length, encoding, lengths, + best_total_length, best_encoding, best_lengths); + if (*best_total_length == str_length) + return; // Tail recursion success! + // Failed with that length, truncate back and try again. + encoding->truncate(encoding_index); + lengths->truncate(encoding_index); + } + int step = UNICHAR::utf8_step(str + str_index + length); + if (step == 0) step = 1; + length += step; + } while (length <= UNICHAR_LEN && str_index + length <= str_length); +} + +// Gets the properties for a grapheme string, combining properties for +// multiple characters in a meaningful way where possible. +// Returns false if no valid match was found in the unicharset. +// NOTE that script_id, mirror, and other_case refer to this unicharset on +// return and will need translation if the target unicharset is different. +bool UNICHARSET::GetStrProperties(const char* utf8_str, + UNICHAR_PROPERTIES* props) const { + props->Init(); + props->SetRangesEmpty(); + int total_unicodes = 0; + GenericVector encoding; + if (!encode_string(utf8_str, true, &encoding, NULL, NULL)) + return false; // Some part was invalid. + for (int i = 0; i < encoding.size(); ++i) { + int id = encoding[i]; + const UNICHAR_PROPERTIES& src_props = unichars[id].properties; + // Logical OR all the bools. + if (src_props.isalpha) props->isalpha = true; + if (src_props.islower) props->islower = true; + if (src_props.isupper) props->isupper = true; + if (src_props.isdigit) props->isdigit = true; + if (src_props.ispunctuation) props->ispunctuation = true; + if (src_props.isngram) props->isngram = true; + if (src_props.enabled) props->enabled = true; + // Min/max the tops/bottoms. + UpdateRange(src_props.min_bottom, &props->min_bottom, &props->max_bottom); + UpdateRange(src_props.max_bottom, &props->min_bottom, &props->max_bottom); + UpdateRange(src_props.min_top, &props->min_top, &props->max_top); + UpdateRange(src_props.max_top, &props->min_top, &props->max_top); + float bearing = props->advance + src_props.bearing; + if (total_unicodes == 0 || bearing < props->bearing) { + props->bearing = bearing; + props->bearing_sd = props->advance_sd + src_props.bearing_sd; + } + props->advance += src_props.advance; + props->advance_sd += src_props.advance_sd; + // With a single width, just use the widths stored in the unicharset. + props->width = src_props.width; + props->width_sd = src_props.width_sd; + // Use the first script id, other_case, mirror, direction. + // Note that these will need translation, except direction. + if (total_unicodes == 0) { + props->script_id = src_props.script_id; + props->other_case = src_props.other_case; + props->mirror = src_props.mirror; + props->direction = src_props.direction; + } + // The normed string for the compound character is the concatenation of + // the normed versions of the individual characters. + props->normed += src_props.normed; + ++total_unicodes; + } + if (total_unicodes > 1) { + // Estimate the total widths from the advance - bearing. + props->width = props->advance - props->bearing; + props->width_sd = props->advance_sd + props->bearing_sd; + } + return total_unicodes > 0; +} + +// TODO(rays) clean-up the order of functions to match unicharset.h. + +unsigned int UNICHARSET::get_properties(UNICHAR_ID id) const { + unsigned int properties = 0; + if (this->get_isalpha(id)) + properties |= ISALPHA_MASK; + if (this->get_islower(id)) + properties |= ISLOWER_MASK; + if (this->get_isupper(id)) + properties |= ISUPPER_MASK; + if (this->get_isdigit(id)) + properties |= ISDIGIT_MASK; + if (this->get_ispunctuation(id)) + properties |= ISPUNCTUATION_MASK; + return properties; +} + +char UNICHARSET::get_chartype(UNICHAR_ID id) const { + if (this->get_isupper(id)) return 'A'; + if (this->get_islower(id)) return 'a'; + if (this->get_isalpha(id)) return 'x'; + if (this->get_isdigit(id)) return '0'; + if (this->get_ispunctuation(id)) return 'p'; + return 0; +} + +void UNICHARSET::unichar_insert(const char* const unichar_repr) { + if (!ids.contains(unichar_repr)) { + if (strlen(unichar_repr) > UNICHAR_LEN) { + fprintf(stderr, "Utf8 buffer too big, size=%d for %s\n", + int(strlen(unichar_repr)), unichar_repr); + return; + } + if (size_used == size_reserved) { + if (size_used == 0) + reserve(8); + else + reserve(2 * size_used); + } + + strcpy(unichars[size_used].representation, unichar_repr); + this->set_script(size_used, null_script); + // If the given unichar_repr represents a fragmented character, set + // fragment property to a pointer to CHAR_FRAGMENT class instance with + // information parsed from the unichar representation. Use the script + // of the base unichar for the fragmented character if possible. + CHAR_FRAGMENT *frag = CHAR_FRAGMENT::parse_from_string(unichar_repr); + this->unichars[size_used].properties.fragment = frag; + if (frag != NULL && this->contains_unichar(frag->get_unichar())) { + this->unichars[size_used].properties.script_id = + this->get_script(frag->get_unichar()); + } + this->unichars[size_used].properties.enabled = true; + ids.insert(unichar_repr, size_used); + ++size_used; + } +} + +bool UNICHARSET::contains_unichar(const char* const unichar_repr) const { + return ids.contains(unichar_repr); +} + +bool UNICHARSET::contains_unichar(const char* const unichar_repr, + int length) const { + if (length == 0) { + return false; + } + return ids.contains(unichar_repr, length); +} + +bool UNICHARSET::eq(UNICHAR_ID unichar_id, + const char* const unichar_repr) const { + return strcmp(this->id_to_unichar(unichar_id), unichar_repr) == 0; +} + +bool UNICHARSET::save_to_string(STRING *str) const { + const int kFileBufSize = 1024; + char buffer[kFileBufSize + 1]; + snprintf(buffer, kFileBufSize, "%d\n", this->size()); + *str = buffer; + for (UNICHAR_ID id = 0; id < this->size(); ++id) { + int min_bottom, max_bottom, min_top, max_top; + get_top_bottom(id, &min_bottom, &max_bottom, &min_top, &max_top); + float width, width_sd; + get_width_stats(id, &width, &width_sd); + float bearing, bearing_sd; + get_bearing_stats(id, &bearing, &bearing_sd); + float advance, advance_sd; + get_advance_stats(id, &advance, &advance_sd); + unsigned int properties = this->get_properties(id); + if (strcmp(this->id_to_unichar(id), " ") == 0) { + snprintf(buffer, kFileBufSize, "%s %x %s %d\n", "NULL", properties, + this->get_script_from_script_id(this->get_script(id)), + this->get_other_case(id)); + } else { + snprintf(buffer, kFileBufSize, + "%s %x %d,%d,%d,%d,%g,%g,%g,%g,%g,%g %s %d %d %d %s\t# %s\n", + this->id_to_unichar(id), properties, + min_bottom, max_bottom, min_top, max_top, width, width_sd, + bearing, bearing_sd, advance, advance_sd, + this->get_script_from_script_id(this->get_script(id)), + this->get_other_case(id), this->get_direction(id), + this->get_mirror(id), this->get_normed_unichar(id), + this->debug_str(id).string()); + } + *str += buffer; + } + return true; +} + +// TODO(rays) Replace with TFile everywhere. +class InMemoryFilePointer { + public: + InMemoryFilePointer(const char *memory, int mem_size) + : memory_(memory), fgets_ptr_(memory), mem_size_(mem_size) { } + + char *fgets(char *orig_dst, int size) { + const char *src_end = memory_ + mem_size_; + char *dst_end = orig_dst + size - 1; + if (size < 1) { + return fgets_ptr_ < src_end ? orig_dst : NULL; + } + + char *dst = orig_dst; + char ch = '^'; + while (fgets_ptr_ < src_end && dst < dst_end && ch != '\n') { + ch = *dst++ = *fgets_ptr_++; + } + *dst = 0; + return (dst == orig_dst) ? NULL : orig_dst; + } + + private: + const char *memory_; + const char *fgets_ptr_; + const int mem_size_; +}; + +bool UNICHARSET::load_from_inmemory_file( + const char *memory, int mem_size, bool skip_fragments) { + InMemoryFilePointer mem_fp(memory, mem_size); + TessResultCallback2 *fgets_cb = + NewPermanentTessCallback(&mem_fp, &InMemoryFilePointer::fgets); + bool success = load_via_fgets(fgets_cb, skip_fragments); + delete fgets_cb; + return success; +} + +class LocalFilePointer { + public: + LocalFilePointer(FILE *stream) : fp_(stream) {} + char *fgets(char *dst, int size) { + return ::fgets(dst, size, fp_); + } + private: + FILE *fp_; +}; + +bool UNICHARSET::load_from_file(FILE *file, bool skip_fragments) { + LocalFilePointer lfp(file); + TessResultCallback2 *fgets_cb = + NewPermanentTessCallback(&lfp, &LocalFilePointer::fgets); + bool success = load_via_fgets(fgets_cb, skip_fragments); + delete fgets_cb; + return success; +} + +bool UNICHARSET::load_from_file(tesseract::TFile *file, bool skip_fragments) { + TessResultCallback2 *fgets_cb = + NewPermanentTessCallback(file, &tesseract::TFile::FGets); + bool success = load_via_fgets(fgets_cb, skip_fragments); + delete fgets_cb; + return success; +} + +bool UNICHARSET::load_via_fgets( + TessResultCallback2 *fgets_cb, + bool skip_fragments) { + int unicharset_size; + char buffer[256]; + + this->clear(); + if (fgets_cb->Run(buffer, sizeof(buffer)) == NULL || + sscanf(buffer, "%d", &unicharset_size) != 1) { + return false; + } + this->reserve(unicharset_size); + for (UNICHAR_ID id = 0; id < unicharset_size; ++id) { + char unichar[256]; + unsigned int properties; + char script[64]; + + strcpy(script, null_script); + int min_bottom = 0; + int max_bottom = MAX_UINT8; + int min_top = 0; + int max_top = MAX_UINT8; + float width = 0.0f; + float width_sd = 0.0f; + float bearing = 0.0f; + float bearing_sd = 0.0f; + float advance = 0.0f; + float advance_sd = 0.0f; + // TODO(eger): check that this default it ok + // after enabling BiDi iterator for Arabic+Cube. + int direction = UNICHARSET::U_LEFT_TO_RIGHT; + UNICHAR_ID other_case = id; + UNICHAR_ID mirror = id; + char normed[64]; + int v = -1; + if (fgets_cb->Run(buffer, sizeof (buffer)) == NULL || + ((v = sscanf(buffer, + "%s %x %d,%d,%d,%d,%g,%g,%g,%g,%g,%g %63s %d %d %d %63s", + unichar, &properties, + &min_bottom, &max_bottom, &min_top, &max_top, + &width, &width_sd, &bearing, &bearing_sd, + &advance, &advance_sd, script, &other_case, + &direction, &mirror, normed)) != 17 && + (v = sscanf(buffer, + "%s %x %d,%d,%d,%d,%g,%g,%g,%g,%g,%g %63s %d %d %d", + unichar, &properties, + &min_bottom, &max_bottom, &min_top, &max_top, + &width, &width_sd, &bearing, &bearing_sd, + &advance, &advance_sd, script, &other_case, + &direction, &mirror)) != 16 && + (v = sscanf(buffer, "%s %x %d,%d,%d,%d %63s %d %d %d", + unichar, &properties, + &min_bottom, &max_bottom, &min_top, &max_top, + script, &other_case, &direction, &mirror)) != 10 && + (v = sscanf(buffer, "%s %x %d,%d,%d,%d %63s %d", unichar, &properties, + &min_bottom, &max_bottom, &min_top, &max_top, + script, &other_case)) != 8 && + (v = sscanf(buffer, "%s %x %63s %d", unichar, &properties, + script, &other_case)) != 4 && + (v = sscanf(buffer, "%s %x %63s", + unichar, &properties, script)) != 3 && + (v = sscanf(buffer, "%s %x", unichar, &properties)) != 2)) { + return false; + } + + // Skip fragments if needed. + CHAR_FRAGMENT *frag = NULL; + if (skip_fragments && (frag = CHAR_FRAGMENT::parse_from_string(unichar))) { + int num_pieces = frag->get_total(); + delete frag; + // Skip multi-element fragments, but keep singles like UNICHAR_BROKEN in. + if (num_pieces > 1) + continue; + } + // Insert unichar into unicharset and set its properties. + if (strcmp(unichar, "NULL") == 0) + this->unichar_insert(" "); + else + this->unichar_insert(unichar); + + this->set_isalpha(id, properties & ISALPHA_MASK); + this->set_islower(id, properties & ISLOWER_MASK); + this->set_isupper(id, properties & ISUPPER_MASK); + this->set_isdigit(id, properties & ISDIGIT_MASK); + this->set_ispunctuation(id, properties & ISPUNCTUATION_MASK); + this->set_isngram(id, false); + this->set_script(id, script); + this->unichars[id].properties.enabled = true; + this->set_top_bottom(id, min_bottom, max_bottom, min_top, max_top); + this->set_width_stats(id, width, width_sd); + this->set_bearing_stats(id, bearing, bearing_sd); + this->set_advance_stats(id, advance, advance_sd); + this->set_direction(id, static_cast(direction)); + ASSERT_HOST(other_case < unicharset_size); + this->set_other_case(id, (v>3) ? other_case : id); + ASSERT_HOST(mirror < unicharset_size); + this->set_mirror(id, (v>8) ? mirror : id); + this->set_normed(id, (v>16) ? normed : unichar); + } + post_load_setup(); + return true; +} + +// Sets up internal data after loading the file, based on the char +// properties. Called from load_from_file, but also needs to be run +// during set_unicharset_properties. +void UNICHARSET::post_load_setup() { + // Number of alpha chars with the case property minus those without, + // in order to determine that half the alpha chars have case. + int net_case_alphas = 0; + int x_height_alphas = 0; + int cap_height_alphas = 0; + top_bottom_set_ = false; + for (UNICHAR_ID id = 0; id < size_used; ++id) { + int min_bottom = 0; + int max_bottom = MAX_UINT8; + int min_top = 0; + int max_top = MAX_UINT8; + get_top_bottom(id, &min_bottom, &max_bottom, &min_top, &max_top); + if (min_top > 0) + top_bottom_set_ = true; + if (get_isalpha(id)) { + if (get_islower(id) || get_isupper(id)) + ++net_case_alphas; + else + --net_case_alphas; + if (min_top < kMeanlineThreshold && max_top < kMeanlineThreshold) + ++x_height_alphas; + else if (min_top > kMeanlineThreshold && max_top > kMeanlineThreshold) + ++cap_height_alphas; + } + set_normed_ids(id); + } + + script_has_upper_lower_ = net_case_alphas > 0; + script_has_xheight_ = script_has_upper_lower_ || + (x_height_alphas > cap_height_alphas * kMinXHeightFraction && + cap_height_alphas > x_height_alphas * kMinCapHeightFraction); + + null_sid_ = get_script_id_from_name(null_script); + ASSERT_HOST(null_sid_ == 0); + common_sid_ = get_script_id_from_name("Common"); + latin_sid_ = get_script_id_from_name("Latin"); + cyrillic_sid_ = get_script_id_from_name("Cyrillic"); + greek_sid_ = get_script_id_from_name("Greek"); + han_sid_ = get_script_id_from_name("Han"); + hiragana_sid_ = get_script_id_from_name("Hiragana"); + katakana_sid_ = get_script_id_from_name("Katakana"); + + // Compute default script. Use the highest-counting alpha script, that is + // not the common script, as that still contains some "alphas". + int* script_counts = new int[script_table_size_used]; + memset(script_counts, 0, sizeof(*script_counts) * script_table_size_used); + for (int id = 0; id < size_used; ++id) { + if (get_isalpha(id)) { + ++script_counts[get_script(id)]; + } + } + default_sid_ = 0; + for (int s = 1; s < script_table_size_used; ++s) { + if (script_counts[s] > script_counts[default_sid_] && s != common_sid_) + default_sid_ = s; + } + delete [] script_counts; +} + +// Returns true if right_to_left scripts are significant in the unicharset, +// but without being so sensitive that "universal" unicharsets containing +// characters from many scripts, like orientation and script detection, +// look like they are right_to_left. +bool UNICHARSET::major_right_to_left() const { + int ltr_count = 0; + int rtl_count = 0; + for (int id = 0; id < size_used; ++id) { + int dir = get_direction(id); + if (dir == UNICHARSET::U_LEFT_TO_RIGHT) ltr_count++; + if (dir == UNICHARSET::U_RIGHT_TO_LEFT || + dir == UNICHARSET::U_RIGHT_TO_LEFT_ARABIC || + dir == UNICHARSET::U_ARABIC_NUMBER) rtl_count++; + } + return rtl_count > ltr_count; +} + +// Set a whitelist and/or blacklist of characters to recognize. +// An empty or NULL whitelist enables everything (minus any blacklist). +// An empty or NULL blacklist disables nothing. +// An empty or NULL blacklist has no effect. +void UNICHARSET::set_black_and_whitelist(const char* blacklist, + const char* whitelist, + const char* unblacklist) { + bool def_enabled = whitelist == NULL || whitelist[0] == '\0'; + // Set everything to default + for (int ch = 0; ch < size_used; ++ch) + unichars[ch].properties.enabled = def_enabled; + if (!def_enabled) { + // Enable the whitelist. + GenericVector encoding; + encode_string(whitelist, false, &encoding, NULL, NULL); + for (int i = 0; i < encoding.size(); ++i) { + if (encoding[i] != INVALID_UNICHAR_ID) + unichars[encoding[i]].properties.enabled = true; + } + } + if (blacklist != NULL && blacklist[0] != '\0') { + // Disable the blacklist. + GenericVector encoding; + encode_string(blacklist, false, &encoding, NULL, NULL); + for (int i = 0; i < encoding.size(); ++i) { + if (encoding[i] != INVALID_UNICHAR_ID) + unichars[encoding[i]].properties.enabled = false; + } + } + if (unblacklist != NULL && unblacklist[0] != '\0') { + // Re-enable the unblacklist. + GenericVector encoding; + encode_string(unblacklist, false, &encoding, NULL, NULL); + for (int i = 0; i < encoding.size(); ++i) { + if (encoding[i] != INVALID_UNICHAR_ID) + unichars[encoding[i]].properties.enabled = true; + } + } +} + +// Returns true if there are any repeated unicodes in the normalized +// text of any unichar-id in the unicharset. +bool UNICHARSET::AnyRepeatedUnicodes() const { + int start_id = 0; + if (has_special_codes()) start_id = SPECIAL_UNICHAR_CODES_COUNT; + for (int id = start_id; id < size_used; ++id) { + // Convert to unicodes. + GenericVector unicodes; + if (UNICHAR::UTF8ToUnicode(get_normed_unichar(id), &unicodes) && + unicodes.size() > 1) { + for (int u = 1; u < unicodes.size(); ++u) { + if (unicodes[u - 1] == unicodes[u]) return true; + } + } + } + return false; +} + +int UNICHARSET::add_script(const char* script) { + for (int i = 0; i < script_table_size_used; ++i) { + if (strcmp(script, script_table[i]) == 0) + return i; + } + if (script_table_size_reserved == 0) { + script_table_size_reserved = 8; + script_table = new char*[script_table_size_reserved]; + } else if (script_table_size_used >= script_table_size_reserved) { + assert(script_table_size_used == script_table_size_reserved); + script_table_size_reserved += script_table_size_reserved; + char** new_script_table = new char*[script_table_size_reserved]; + memcpy(new_script_table, script_table, script_table_size_used * sizeof(char*)); + delete[] script_table; + script_table = new_script_table; + } + script_table[script_table_size_used] = new char[strlen(script) + 1]; + strcpy(script_table[script_table_size_used], script); + return script_table_size_used++; +} + +// Returns the string that represents a fragment +// with the given unichar, pos and total. +STRING CHAR_FRAGMENT::to_string(const char *unichar, int pos, int total, + bool natural) { + if (total == 1) return STRING(unichar); + STRING result = ""; + result += kSeparator; + result += unichar; + char buffer[kMaxLen]; + snprintf(buffer, kMaxLen, "%c%d%c%d", kSeparator, pos, + natural ? kNaturalFlag : kSeparator, total); + result += buffer; + return result; +} + +CHAR_FRAGMENT *CHAR_FRAGMENT::parse_from_string(const char *string) { + const char *ptr = string; + int len = strlen(string); + if (len < kMinLen || *ptr != kSeparator) { + return NULL; // this string can not represent a fragment + } + ptr++; // move to the next character + int step = 0; + while ((ptr + step) < (string + len) && *(ptr + step) != kSeparator) { + step += UNICHAR::utf8_step(ptr + step); + } + if (step == 0 || step > UNICHAR_LEN) { + return NULL; // no character for unichar or the character is too long + } + char unichar[UNICHAR_LEN + 1]; + strncpy(unichar, ptr, step); + unichar[step] = '\0'; // null terminate unichar + ptr += step; // move to the next fragment separator + int pos = 0; + int total = 0; + bool natural = false; + char *end_ptr = NULL; + for (int i = 0; i < 2; i++) { + if (ptr > string + len || *ptr != kSeparator) { + if (i == 1 && *ptr == kNaturalFlag) + natural = true; + else + return NULL; // Failed to parse fragment representation. + } + ptr++; // move to the next character + i == 0 ? pos = static_cast(strtol(ptr, &end_ptr, 10)) + : total = static_cast(strtol(ptr, &end_ptr, 10)); + ptr = end_ptr; + } + if (ptr != string + len) { + return NULL; // malformed fragment representation + } + CHAR_FRAGMENT *fragment = new CHAR_FRAGMENT(); + fragment->set_all(unichar, pos, total, natural); + return fragment; +} + +int UNICHARSET::get_script_id_from_name(const char* script_name) const { + for (int i = 0; i < script_table_size_used; ++i) { + if (strcmp(script_name, script_table[i]) == 0) + return i; + } + return 0; // 0 is always the null_script +} diff --git a/3rdparty/hgOCR/include/ccutil/unicharset.h b/3rdparty/hgOCR/include/ccutil/unicharset.h new file mode 100644 index 00000000..ddb31bea --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicharset.h @@ -0,0 +1,985 @@ +/////////////////////////////////////////////////////////////////////// +// File: unicharset.h +// Description: Unicode character/ligature set class. +// Author: Thomas Kielbus +// Created: Wed Jun 28 17:05:01 PDT 2006 +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_UNICHARSET_H__ +#define TESSERACT_CCUTIL_UNICHARSET_H__ + +#include "errcode.h" +#include "genericvector.h" +#include "helpers.h" +#include "serialis.h" +#include "strngs.h" +#include "tesscallback.h" +#include "unichar.h" +#include "unicharmap.h" + +// Enum holding special values of unichar_id. Every unicharset has these. +// Warning! Keep in sync with kSpecialUnicharCodes. +enum SpecialUnicharCodes { + UNICHAR_SPACE, + UNICHAR_JOINED, + UNICHAR_BROKEN, + + SPECIAL_UNICHAR_CODES_COUNT +}; + +class CHAR_FRAGMENT { + public: + // Minimum number of characters used for fragment representation. + static const int kMinLen = 6; + // Maximum number of characters used for fragment representation. + static const int kMaxLen = 3 + UNICHAR_LEN + 2; + // Maximum number of fragments per character. + static const int kMaxChunks = 5; + + // Setters and Getters. + inline void set_all(const char *unichar, int pos, int total, bool natural) { + set_unichar(unichar); + set_pos(pos); + set_total(total); + set_natural(natural); + } + inline void set_unichar(const char *uch) { + strncpy(this->unichar, uch, UNICHAR_LEN); + this->unichar[UNICHAR_LEN] = '\0'; + } + inline void set_pos(int p) { this->pos = p; } + inline void set_total(int t) { this->total = t; } + inline const char* get_unichar() const { return this->unichar; } + inline int get_pos() const { return this->pos; } + inline int get_total() const { return this->total; } + + // Returns the string that represents a fragment + // with the given unichar, pos and total. + static STRING to_string(const char *unichar, int pos, int total, + bool natural); + // Returns the string that represents this fragment. + STRING to_string() const { + return to_string(unichar, pos, total, natural); + } + + // Checks whether a fragment has the same unichar, + // position and total as the given inputs. + inline bool equals(const char *other_unichar, + int other_pos, int other_total) const { + return (strcmp(this->unichar, other_unichar) == 0 && + this->pos == other_pos && this->total == other_total); + } + inline bool equals(const CHAR_FRAGMENT *other) const { + return this->equals(other->get_unichar(), + other->get_pos(), + other->get_total()); + } + + // Checks whether a given fragment is a continuation of this fragment. + // Assumes that the given fragment pointer is not NULL. + inline bool is_continuation_of(const CHAR_FRAGMENT *fragment) const { + return (strcmp(this->unichar, fragment->get_unichar()) == 0 && + this->total == fragment->get_total() && + this->pos == fragment->get_pos() + 1); + } + + // Returns true if this fragment is a beginning fragment. + inline bool is_beginning() const { return this->pos == 0; } + + // Returns true if this fragment is an ending fragment. + inline bool is_ending() const { return this->pos == this->total-1; } + + // Returns true if the fragment was a separate component to begin with, + // ie did not need chopping to be isolated, but may have been separated + // out from a multi-outline blob. + inline bool is_natural() const { return natural; } + void set_natural(bool value) { natural = value; } + + // Parses the string to see whether it represents a character fragment + // (rather than a regular character). If so, allocates memory for a new + // CHAR_FRAGMENT instance and fills it in with the corresponding fragment + // information. Fragments are of the form: + // |m|1|2, meaning chunk 1 of 2 of character m, or + // |:|1n2, meaning chunk 1 of 2 of character :, and no chopping was needed + // to divide the parts, as they were already separate connected components. + // + // If parsing succeeded returns the pointer to the allocated CHAR_FRAGMENT + // instance, otherwise (if the string does not represent a fragment or it + // looks like it does, but parsing it as a fragment fails) returns NULL. + // + // Note: The caller is responsible for deallocating memory + // associated with the returned pointer. + static CHAR_FRAGMENT *parse_from_string(const char *str); + + private: + char unichar[UNICHAR_LEN + 1]; + // True if the fragment was a separate component to begin with, + // ie did not need chopping to be isolated, but may have been separated + // out from a multi-outline blob. + bool natural; + inT16 pos; // fragment position in the character + inT16 total; // total number of fragments in the character +}; + +// The UNICHARSET class is an utility class for Tesseract that holds the +// set of characters that are used by the engine. Each character is identified +// by a unique number, from 0 to (size - 1). +class UNICHARSET { + public: + // Custom list of characters and their ligature forms (UTF8) + // These map to unicode values in the private use area (PUC) and are supported + // by only few font families (eg. Wyld, Adobe Caslon Pro). + static TESS_API const char* kCustomLigatures[][2]; + + // List of strings for the SpecialUnicharCodes. Keep in sync with the enum. + static const char* kSpecialUnicharCodes[SPECIAL_UNICHAR_CODES_COUNT]; + + // ICU 2.0 UCharDirection enum (from third_party/icu/include/unicode/uchar.h) + enum Direction { + U_LEFT_TO_RIGHT = 0, + U_RIGHT_TO_LEFT = 1, + U_EUROPEAN_NUMBER = 2, + U_EUROPEAN_NUMBER_SEPARATOR = 3, + U_EUROPEAN_NUMBER_TERMINATOR = 4, + U_ARABIC_NUMBER = 5, + U_COMMON_NUMBER_SEPARATOR = 6, + U_BLOCK_SEPARATOR = 7, + U_SEGMENT_SEPARATOR = 8, + U_WHITE_SPACE_NEUTRAL = 9, + U_OTHER_NEUTRAL = 10, + U_LEFT_TO_RIGHT_EMBEDDING = 11, + U_LEFT_TO_RIGHT_OVERRIDE = 12, + U_RIGHT_TO_LEFT_ARABIC = 13, + U_RIGHT_TO_LEFT_EMBEDDING = 14, + U_RIGHT_TO_LEFT_OVERRIDE = 15, + U_POP_DIRECTIONAL_FORMAT = 16, + U_DIR_NON_SPACING_MARK = 17, + U_BOUNDARY_NEUTRAL = 18, + U_CHAR_DIRECTION_COUNT + }; + + // Create an empty UNICHARSET + UNICHARSET(); + + ~UNICHARSET(); + + // Return the UNICHAR_ID of a given unichar representation within the + // UNICHARSET. + UNICHAR_ID TESS_API unichar_to_id(const char* const unichar_repr) const; + + // Return the UNICHAR_ID of a given unichar representation within the + // UNICHARSET. Only the first length characters from unichar_repr are used. + UNICHAR_ID unichar_to_id(const char* const unichar_repr, int length) const; + + // Return the minimum number of bytes that matches a legal UNICHAR_ID, + // while leaving the rest of the string encodable. Returns 0 if the + // beginning of the string is not encodable. + // WARNING: this function now encodes the whole string for precision. + // Use encode_string in preference to repeatedly calling step. + int step(const char* str) const; + + // Return whether the given UTF-8 string is encodable with this UNICHARSET. + // If not encodable, write the first byte offset which cannot be converted + // into the second (return) argument. + bool encodable_string(const char *str, int *first_bad_position) const; + + // Encodes the given UTF-8 string with this UNICHARSET. + // Any part of the string that cannot be encoded (because the utf8 can't + // be broken up into pieces that are in the unicharset) then: + // if give_up_on_failure, stops and returns a partial encoding, + // else continues and inserts an INVALID_UNICHAR_ID in the returned encoding. + // Returns true if the encoding succeeds completely, false if there is at + // least one failure. + // If lengths is not NULL, then it is filled with the corresponding + // byte length of each encoded UNICHAR_ID. + // If encoded_length is not NULL then on return it contains the length of + // str that was encoded. (if give_up_on_failure the location of the first + // failure, otherwise strlen(str).) + bool encode_string(const char* str, bool give_up_on_failure, + GenericVector* encoding, + GenericVector* lengths, + int* encoded_length) const; + + // Return the unichar representation corresponding to the given UNICHAR_ID + // within the UNICHARSET. + const char* id_to_unichar(UNICHAR_ID id) const; + + // Return the UTF8 representation corresponding to the given UNICHAR_ID after + // resolving any private encodings internal to Tesseract. This method is + // preferable to id_to_unichar for outputting text that will be visible to + // external applications. + const char* id_to_unichar_ext(UNICHAR_ID id) const; + + // Return a STRING that reformats the utf8 str into the str followed + // by its hex unicodes. + static STRING debug_utf8_str(const char* str); + + // Return a STRING containing debug information on the unichar, including + // the id_to_unichar, its hex unicodes and the properties. + STRING debug_str(UNICHAR_ID id) const; + STRING debug_str(const char * unichar_repr) const { + return debug_str(unichar_to_id(unichar_repr)); + } + + // Add a unichar representation to the set. + void TESS_API unichar_insert(const char* const unichar_repr); + + // Return true if the given unichar id exists within the set. + // Relies on the fact that unichar ids are contiguous in the unicharset. + bool contains_unichar_id(UNICHAR_ID unichar_id) const { + return unichar_id != INVALID_UNICHAR_ID && unichar_id < size_used && + unichar_id >= 0; + } + + // Return true if the given unichar representation exists within the set. + bool TESS_API contains_unichar(const char* const unichar_repr) const; + bool contains_unichar(const char* const unichar_repr, int length) const; + + // Return true if the given unichar representation corresponds to the given + // UNICHAR_ID within the set. + bool eq(UNICHAR_ID unichar_id, const char* const unichar_repr) const; + + // Delete CHAR_FRAGMENTs stored in properties of unichars array. + void delete_pointers_in_unichars() { + for (int i = 0; i < size_used; ++i) { + if (unichars[i].properties.fragment != NULL) { + delete unichars[i].properties.fragment; + unichars[i].properties.fragment = NULL; + } + } + } + + // Clear the UNICHARSET (all the previous data is lost). + void clear() { + if (script_table != NULL) { + for (int i = 0; i < script_table_size_used; ++i) + delete[] script_table[i]; + delete[] script_table; + script_table = NULL; + script_table_size_used = 0; + } + if (unichars != NULL) { + delete_pointers_in_unichars(); + delete[] unichars; + unichars = NULL; + } + script_table_size_reserved = 0; + size_reserved = 0; + size_used = 0; + ids.clear(); + top_bottom_set_ = false; + script_has_upper_lower_ = false; + script_has_xheight_ = false; + null_sid_ = 0; + common_sid_ = 0; + latin_sid_ = 0; + cyrillic_sid_ = 0; + greek_sid_ = 0; + han_sid_ = 0; + hiragana_sid_ = 0; + katakana_sid_ = 0; + default_sid_ = 0; + } + + // Return the size of the set (the number of different UNICHAR it holds). + int size() const { + return size_used; + } + + // Reserve enough memory space for the given number of UNICHARS + void reserve(int unichars_number); + + // Opens the file indicated by filename and saves unicharset to that file. + // Returns true if the operation is successful. + bool save_to_file(const char * const filename) const { + FILE* file = fopen(filename, "w+b"); + if (file == NULL) return false; + bool result = save_to_file(file); + fclose(file); + return result; + } + + // Saves the content of the UNICHARSET to the given file. + // Returns true if the operation is successful. + bool save_to_file(FILE *file) const { + STRING str; + if (!save_to_string(&str)) return false; + if (fwrite(&str[0], str.length(), 1, file) != 1) return false; + return true; + } + bool save_to_file(tesseract::TFile *file) const { + STRING str; + if (!save_to_string(&str)) return false; + if (file->FWrite(&str[0], str.length(), 1) != 1) return false; + return true; + } + + // Saves the content of the UNICHARSET to the given STRING. + // Returns true if the operation is successful. + bool TESS_API save_to_string(STRING *str) const; + + // Load a unicharset from a unicharset file that has been loaded into + // the given memory buffer. + // Returns true if the operation is successful. + bool load_from_inmemory_file(const char* const memory, int mem_size, + bool skip_fragments); + // Returns true if the operation is successful. + bool load_from_inmemory_file(const char* const memory, int mem_size) { + return load_from_inmemory_file(memory, mem_size, false); + } + + // Opens the file indicated by filename and loads the UNICHARSET + // from the given file. The previous data is lost. + // Returns true if the operation is successful. + bool load_from_file(const char* const filename, bool skip_fragments) { + FILE* file = fopen(filename, "rb"); + if (file == NULL) return false; + bool result = load_from_file(file, skip_fragments); + fclose(file); + return result; + } + // returns true if the operation is successful. + bool load_from_file(const char* const filename) { + return load_from_file(filename, false); + } + + // Loads the UNICHARSET from the given file. The previous data is lost. + // Returns true if the operation is successful. + bool load_from_file(FILE *file, bool skip_fragments); + bool load_from_file(FILE *file) { return load_from_file(file, false); } + bool load_from_file(tesseract::TFile *file, bool skip_fragments); + + + // Sets up internal data after loading the file, based on the char + // properties. Called from load_from_file, but also needs to be run + // during set_unicharset_properties. + void post_load_setup(); + + // Returns true if right_to_left scripts are significant in the unicharset, + // but without being so sensitive that "universal" unicharsets containing + // characters from many scripts, like orientation and script detection, + // look like they are right_to_left. + bool major_right_to_left() const; + + // Set a whitelist and/or blacklist of characters to recognize. + // An empty or NULL whitelist enables everything (minus any blacklist). + // An empty or NULL blacklist disables nothing. + // An empty or NULL unblacklist has no effect. + // The blacklist overrides the whitelist. + // The unblacklist overrides the blacklist. + // Each list is a string of utf8 character strings. Boundaries between + // unicharset units are worked out automatically, and characters not in + // the unicharset are silently ignored. + void set_black_and_whitelist(const char* blacklist, const char* whitelist, + const char* unblacklist); + + // Set the isalpha property of the given unichar to the given value. + void set_isalpha(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.isalpha = value; + } + + // Set the islower property of the given unichar to the given value. + void set_islower(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.islower = value; + } + + // Set the isupper property of the given unichar to the given value. + void set_isupper(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.isupper = value; + } + + // Set the isdigit property of the given unichar to the given value. + void set_isdigit(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.isdigit = value; + } + + // Set the ispunctuation property of the given unichar to the given value. + void set_ispunctuation(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.ispunctuation = value; + } + + // Set the isngram property of the given unichar to the given value. + void set_isngram(UNICHAR_ID unichar_id, bool value) { + unichars[unichar_id].properties.isngram = value; + } + + // Set the script name of the given unichar to the given value. + // Value is copied and thus can be a temporary; + void set_script(UNICHAR_ID unichar_id, const char* value) { + unichars[unichar_id].properties.script_id = add_script(value); + } + + // Set other_case unichar id in the properties for the given unichar id. + void set_other_case(UNICHAR_ID unichar_id, UNICHAR_ID other_case) { + unichars[unichar_id].properties.other_case = other_case; + } + + // Set the direction property of the given unichar to the given value. + void set_direction(UNICHAR_ID unichar_id, UNICHARSET::Direction value) { + unichars[unichar_id].properties.direction = value; + } + + // Set mirror unichar id in the properties for the given unichar id. + void set_mirror(UNICHAR_ID unichar_id, UNICHAR_ID mirror) { + unichars[unichar_id].properties.mirror = mirror; + } + + // Record normalized version of unichar with the given unichar_id. + void set_normed(UNICHAR_ID unichar_id, const char* normed) { + unichars[unichar_id].properties.normed = normed; + unichars[unichar_id].properties.normed_ids.truncate(0); + } + // Sets the normed_ids vector from the normed string. normed_ids is not + // stored in the file, and needs to be set when the UNICHARSET is loaded. + void set_normed_ids(UNICHAR_ID unichar_id); + + // Return the isalpha property of the given unichar. + bool get_isalpha(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.isalpha; + } + + // Return the islower property of the given unichar. + bool get_islower(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.islower; + } + + // Return the isupper property of the given unichar. + bool get_isupper(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.isupper; + } + + // Return the isdigit property of the given unichar. + bool get_isdigit(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.isdigit; + } + + // Return the ispunctuation property of the given unichar. + bool get_ispunctuation(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.ispunctuation; + } + + // Return the isngram property of the given unichar. + bool get_isngram(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return false; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.isngram; + } + + // Returns whether the unichar id represents a unicode value in the private + // use area. + bool get_isprivate(UNICHAR_ID unichar_id) const; + + // Returns true if the ids have useful min/max top/bottom values. + bool top_bottom_useful() const { + return top_bottom_set_; + } + // Sets all ranges to empty, so they can be expanded to set the values. + void set_ranges_empty(); + // Sets all the properties for this unicharset given a src_unicharset with + // everything set. The unicharsets don't have to be the same, and graphemes + // are correctly accounted for. + void SetPropertiesFromOther(const UNICHARSET& src) { + PartialSetPropertiesFromOther(0, src); + } + // Sets properties from Other, starting only at the given index. + void PartialSetPropertiesFromOther(int start_index, const UNICHARSET& src); + // Expands the tops and bottoms and widths for this unicharset given a + // src_unicharset with ranges in it. The unicharsets don't have to be the + // same, and graphemes are correctly accounted for. + void ExpandRangesFromOther(const UNICHARSET& src); + // Makes this a copy of src. Clears this completely first, so the automattic + // ids will not be present in this if not in src. + void CopyFrom(const UNICHARSET& src); + // For each id in src, if it does not occur in this, add it, as in + // SetPropertiesFromOther, otherwise expand the ranges, as in + // ExpandRangesFromOther. + void AppendOtherUnicharset(const UNICHARSET& src); + // Returns true if the acceptable ranges of the tops of the characters do + // not overlap, making their x-height calculations distinct. + bool SizesDistinct(UNICHAR_ID id1, UNICHAR_ID id2) const; + // Returns the min and max bottom and top of the given unichar in + // baseline-normalized coordinates, ie, where the baseline is + // kBlnBaselineOffset and the meanline is kBlnBaselineOffset + kBlnXHeight + // (See normalis.h for the definitions). + void get_top_bottom(UNICHAR_ID unichar_id, + int* min_bottom, int* max_bottom, + int* min_top, int* max_top) const { + if (INVALID_UNICHAR_ID == unichar_id) { + *min_bottom = *min_top = 0; + *max_bottom = *max_top = 256; // kBlnCellHeight + return; + } + ASSERT_HOST(contains_unichar_id(unichar_id)); + *min_bottom = unichars[unichar_id].properties.min_bottom; + *max_bottom = unichars[unichar_id].properties.max_bottom; + *min_top = unichars[unichar_id].properties.min_top; + *max_top = unichars[unichar_id].properties.max_top; + } + void set_top_bottom(UNICHAR_ID unichar_id, + int min_bottom, int max_bottom, + int min_top, int max_top) { + unichars[unichar_id].properties.min_bottom = + static_cast(ClipToRange(min_bottom, 0, MAX_UINT8)); + unichars[unichar_id].properties.max_bottom = + static_cast(ClipToRange(max_bottom, 0, MAX_UINT8)); + unichars[unichar_id].properties.min_top = + static_cast(ClipToRange(min_top, 0, MAX_UINT8)); + unichars[unichar_id].properties.max_top = + static_cast(ClipToRange(max_top, 0, MAX_UINT8)); + } + // Returns the width stats (as mean, sd) of the given unichar relative to the + // median advance of all characters in the character set. + void get_width_stats(UNICHAR_ID unichar_id, + float* width, float* width_sd) const { + if (INVALID_UNICHAR_ID == unichar_id) { + *width = 0.0f; + *width_sd = 0.0f;; + return; + } + ASSERT_HOST(contains_unichar_id(unichar_id)); + *width = unichars[unichar_id].properties.width; + *width_sd = unichars[unichar_id].properties.width_sd; + } + void set_width_stats(UNICHAR_ID unichar_id, float width, float width_sd) { + unichars[unichar_id].properties.width = width; + unichars[unichar_id].properties.width_sd = width_sd; + } + // Returns the stats of the x-bearing (as mean, sd) of the given unichar + // relative to the median advance of all characters in the character set. + void get_bearing_stats(UNICHAR_ID unichar_id, + float* bearing, float* bearing_sd) const { + if (INVALID_UNICHAR_ID == unichar_id) { + *bearing = *bearing_sd = 0.0f; + return; + } + ASSERT_HOST(contains_unichar_id(unichar_id)); + *bearing = unichars[unichar_id].properties.bearing; + *bearing_sd = unichars[unichar_id].properties.bearing_sd; + } + void set_bearing_stats(UNICHAR_ID unichar_id, + float bearing, float bearing_sd) { + unichars[unichar_id].properties.bearing = bearing; + unichars[unichar_id].properties.bearing_sd = bearing_sd; + } + // Returns the stats of the x-advance of the given unichar (as mean, sd) + // relative to the median advance of all characters in the character set. + void get_advance_stats(UNICHAR_ID unichar_id, + float* advance, float* advance_sd) const { + if (INVALID_UNICHAR_ID == unichar_id) { + *advance = *advance_sd = 0; + return; + } + ASSERT_HOST(contains_unichar_id(unichar_id)); + *advance = unichars[unichar_id].properties.advance; + *advance_sd = unichars[unichar_id].properties.advance_sd; + } + void set_advance_stats(UNICHAR_ID unichar_id, + float advance, float advance_sd) { + unichars[unichar_id].properties.advance = advance; + unichars[unichar_id].properties.advance_sd = advance_sd; + } + // Returns true if the font metrics properties are empty. + bool PropertiesIncomplete(UNICHAR_ID unichar_id) const { + return unichars[unichar_id].properties.AnyRangeEmpty(); + } + + // Return the script name of the given unichar. + // The returned pointer will always be the same for the same script, it's + // managed by unicharset and thus MUST NOT be deleted + int get_script(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return null_sid_; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.script_id; + } + + // Return the character properties, eg. alpha/upper/lower/digit/punct, + // as a bit field of unsigned int. + unsigned int get_properties(UNICHAR_ID unichar_id) const; + + // Return the character property as a single char. If a character has + // multiple attributes, the main property is defined by the following order: + // upper_case : 'A' + // lower_case : 'a' + // alpha : 'x' + // digit : '0' + // punctuation: 'p' + char get_chartype(UNICHAR_ID unichar_id) const; + + // Get other_case unichar id in the properties for the given unichar id. + UNICHAR_ID get_other_case(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return INVALID_UNICHAR_ID; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.other_case; + } + + // Returns the direction property of the given unichar. + Direction get_direction(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return UNICHARSET::U_OTHER_NEUTRAL; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.direction; + } + + // Get mirror unichar id in the properties for the given unichar id. + UNICHAR_ID get_mirror(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return INVALID_UNICHAR_ID; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.mirror; + } + + // Returns UNICHAR_ID of the corresponding lower-case unichar. + UNICHAR_ID to_lower(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return INVALID_UNICHAR_ID; + ASSERT_HOST(contains_unichar_id(unichar_id)); + if (unichars[unichar_id].properties.islower) return unichar_id; + return unichars[unichar_id].properties.other_case; + } + + // Returns UNICHAR_ID of the corresponding upper-case unichar. + UNICHAR_ID to_upper(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return INVALID_UNICHAR_ID; + ASSERT_HOST(contains_unichar_id(unichar_id)); + if (unichars[unichar_id].properties.isupper) return unichar_id; + return unichars[unichar_id].properties.other_case; + } + + // Returns true if this UNICHARSET has the special codes in + // SpecialUnicharCodes available. If false then there are normal unichars + // at these codes and they should not be used. + bool has_special_codes() const { + return get_fragment(UNICHAR_BROKEN) != NULL && + strcmp(id_to_unichar(UNICHAR_BROKEN), + kSpecialUnicharCodes[UNICHAR_BROKEN]) == 0; + } + + // Returns true if there are any repeated unicodes in the normalized + // text of any unichar-id in the unicharset. + bool AnyRepeatedUnicodes() const; + + // Return a pointer to the CHAR_FRAGMENT class if the given + // unichar id represents a character fragment. + const CHAR_FRAGMENT *get_fragment(UNICHAR_ID unichar_id) const { + if (INVALID_UNICHAR_ID == unichar_id) return NULL; + ASSERT_HOST(contains_unichar_id(unichar_id)); + return unichars[unichar_id].properties.fragment; + } + + // Return the isalpha property of the given unichar representation. + bool get_isalpha(const char* const unichar_repr) const { + return get_isalpha(unichar_to_id(unichar_repr)); + } + + // Return the islower property of the given unichar representation. + bool get_islower(const char* const unichar_repr) const { + return get_islower(unichar_to_id(unichar_repr)); + } + + // Return the isupper property of the given unichar representation. + bool get_isupper(const char* const unichar_repr) const { + return get_isupper(unichar_to_id(unichar_repr)); + } + + // Return the isdigit property of the given unichar representation. + bool get_isdigit(const char* const unichar_repr) const { + return get_isdigit(unichar_to_id(unichar_repr)); + } + + // Return the ispunctuation property of the given unichar representation. + bool get_ispunctuation(const char* const unichar_repr) const { + return get_ispunctuation(unichar_to_id(unichar_repr)); + } + + // Return the character properties, eg. alpha/upper/lower/digit/punct, + // of the given unichar representation + unsigned int get_properties(const char* const unichar_repr) const { + return get_properties(unichar_to_id(unichar_repr)); + } + + char get_chartype(const char* const unichar_repr) const { + return get_chartype(unichar_to_id(unichar_repr)); + } + + // Return the script name of the given unichar representation. + // The returned pointer will always be the same for the same script, it's + // managed by unicharset and thus MUST NOT be deleted + int get_script(const char* const unichar_repr) const { + return get_script(unichar_to_id(unichar_repr)); + } + + // Return a pointer to the CHAR_FRAGMENT class struct if the given + // unichar representation represents a character fragment. + const CHAR_FRAGMENT *get_fragment(const char* const unichar_repr) const { + if (unichar_repr == NULL || unichar_repr[0] == '\0' || + !ids.contains(unichar_repr)) { + return NULL; + } + return get_fragment(unichar_to_id(unichar_repr)); + } + + // Return the isalpha property of the given unichar representation. + // Only the first length characters from unichar_repr are used. + bool get_isalpha(const char* const unichar_repr, + int length) const { + return get_isalpha(unichar_to_id(unichar_repr, length)); + } + + // Return the islower property of the given unichar representation. + // Only the first length characters from unichar_repr are used. + bool get_islower(const char* const unichar_repr, + int length) const { + return get_islower(unichar_to_id(unichar_repr, length)); + } + + // Return the isupper property of the given unichar representation. + // Only the first length characters from unichar_repr are used. + bool get_isupper(const char* const unichar_repr, + int length) const { + return get_isupper(unichar_to_id(unichar_repr, length)); + } + + // Return the isdigit property of the given unichar representation. + // Only the first length characters from unichar_repr are used. + bool get_isdigit(const char* const unichar_repr, + int length) const { + return get_isdigit(unichar_to_id(unichar_repr, length)); + } + + // Return the ispunctuation property of the given unichar representation. + // Only the first length characters from unichar_repr are used. + bool get_ispunctuation(const char* const unichar_repr, + int length) const { + return get_ispunctuation(unichar_to_id(unichar_repr, length)); + } + + // Returns normalized version of unichar with the given unichar_id. + const char *get_normed_unichar(UNICHAR_ID unichar_id) const { + if (unichar_id == UNICHAR_SPACE && has_special_codes()) return " "; + return unichars[unichar_id].properties.normed.string(); + } + // Returns a vector of UNICHAR_IDs that represent the ids of the normalized + // version of the given id. There may be more than one UNICHAR_ID in the + // vector if unichar_id represents a ligature. + const GenericVector& normed_ids(UNICHAR_ID unichar_id) const { + return unichars[unichar_id].properties.normed_ids; + } + + // Return the script name of the given unichar representation. + // Only the first length characters from unichar_repr are used. + // The returned pointer will always be the same for the same script, it's + // managed by unicharset and thus MUST NOT be deleted + int get_script(const char* const unichar_repr, + int length) const { + return get_script(unichar_to_id(unichar_repr, length)); + } + + // Return the (current) number of scripts in the script table + int get_script_table_size() const { + return script_table_size_used; + } + + // Return the script string from its id + const char* get_script_from_script_id(int id) const { + if (id >= script_table_size_used || id < 0) + return null_script; + return script_table[id]; + } + + // Returns the id from the name of the script, or 0 if script is not found. + // Note that this is an expensive operation since it involves iteratively + // comparing strings in the script table. To avoid dependency on STL, we + // won't use a hash. Instead, the calling function can use this to lookup + // and save the ID for relevant scripts for fast comparisons later. + int get_script_id_from_name(const char* script_name) const; + + // Return true if the given script is the null script + bool is_null_script(const char* script) const { + return script == null_script; + } + + // Uniquify the given script. For two scripts a and b, if strcmp(a, b) == 0, + // then the returned pointer will be the same. + // The script parameter is copied and thus can be a temporary. + int add_script(const char* script); + + // Return the enabled property of the given unichar. + bool get_enabled(UNICHAR_ID unichar_id) const { + return unichars[unichar_id].properties.enabled; + } + + + int null_sid() const { return null_sid_; } + int common_sid() const { return common_sid_; } + int latin_sid() const { return latin_sid_; } + int cyrillic_sid() const { return cyrillic_sid_; } + int greek_sid() const { return greek_sid_; } + int han_sid() const { return han_sid_; } + int hiragana_sid() const { return hiragana_sid_; } + int katakana_sid() const { return katakana_sid_; } + int default_sid() const { return default_sid_; } + + // Returns true if the unicharset has the concept of upper/lower case. + bool script_has_upper_lower() const { + return script_has_upper_lower_; + } + // Returns true if the unicharset has the concept of x-height. + // script_has_xheight can be true even if script_has_upper_lower is not, + // when the script has a sufficiently predominant top line with ascenders, + // such as Devanagari and Thai. + bool script_has_xheight() const { + return script_has_xheight_; + } + + private: + + struct UNICHAR_PROPERTIES { + UNICHAR_PROPERTIES(); + // Initializes all properties to sensible default values. + void Init(); + // Sets all ranges wide open. Initialization default in case there are + // no useful values available. + void SetRangesOpen(); + // Sets all ranges to empty. Used before expanding with font-based data. + void SetRangesEmpty(); + // Returns true if any of the top/bottom/width/bearing/advance ranges/stats + // is emtpy. + bool AnyRangeEmpty() const; + // Expands the ranges with the ranges from the src properties. + void ExpandRangesFrom(const UNICHAR_PROPERTIES& src); + // Copies the properties from src into this. + void CopyFrom(const UNICHAR_PROPERTIES& src); + + bool isalpha; + bool islower; + bool isupper; + bool isdigit; + bool ispunctuation; + bool isngram; + bool enabled; + // Possible limits of the top and bottom of the bounding box in + // baseline-normalized coordinates, ie, where the baseline is + // kBlnBaselineOffset and the meanline is kBlnBaselineOffset + kBlnXHeight + // (See normalis.h for the definitions). + uinT8 min_bottom; + uinT8 max_bottom; + uinT8 min_top; + uinT8 max_top; + // Statstics of the widths of bounding box, relative to the median advance. + float width; + float width_sd; + // Stats of the x-bearing and advance, also relative to the median advance. + float bearing; + float bearing_sd; + float advance; + float advance_sd; + int script_id; + UNICHAR_ID other_case; // id of the corresponding upper/lower case unichar + Direction direction; // direction of this unichar + // Mirror property is useful for reverse DAWG lookup for words in + // right-to-left languages (e.g. "(word)" would be in + // '[open paren]' 'w' 'o' 'r' 'd' '[close paren]' in a UTF8 string. + // However, what we want in our DAWG is + // '[open paren]', 'd', 'r', 'o', 'w', '[close paren]' not + // '[close paren]', 'd', 'r', 'o', 'w', '[open paren]'. + UNICHAR_ID mirror; + // A string of unichar_ids that represent the corresponding normed string. + // For awkward characters like em-dash, this gives hyphen. + // For ligatures, this gives the string of normal unichars. + GenericVector normed_ids; + STRING normed; // normalized version of this unichar + // Contains meta information about the fragment if a unichar represents + // a fragment of a character, otherwise should be set to NULL. + // It is assumed that character fragments are added to the unicharset + // after the corresponding 'base' characters. + CHAR_FRAGMENT *fragment; + }; + + struct UNICHAR_SLOT { + char representation[UNICHAR_LEN + 1]; + UNICHAR_PROPERTIES properties; + }; + + // Internal recursive version of encode_string above. + // str is the start of the whole string. + // str_index is the current position in str. + // str_length is the length of str. + // encoding is a working encoding of str. + // lengths is a working set of lengths of each element of encoding. + // best_total_length is the longest length of str that has been successfully + // encoded so far. + // On return: + // best_encoding contains the encoding that used the longest part of str. + // best_lengths (may be null) contains the lengths of best_encoding. + void encode_string(const char* str, int str_index, int str_length, + GenericVector* encoding, + GenericVector* lengths, + int* best_total_length, + GenericVector* best_encoding, + GenericVector* best_lengths) const; + + // Gets the properties for a grapheme string, combining properties for + // multiple characters in a meaningful way where possible. + // Returns false if no valid match was found in the unicharset. + // NOTE that script_id, mirror, and other_case refer to this unicharset on + // return and will need redirecting if the target unicharset is different. + bool GetStrProperties(const char* utf8_str, + UNICHAR_PROPERTIES* props) const; + + // Load ourselves from a "file" where our only interface to the file is + // an implementation of fgets(). This is the parsing primitive accessed by + // the public routines load_from_file() and load_from_inmemory_file(). + bool load_via_fgets(TessResultCallback2 *fgets_cb, + bool skip_fragments); + + UNICHAR_SLOT* unichars; + UNICHARMAP ids; + int size_used; + int size_reserved; + char** script_table; + int script_table_size_used; + int script_table_size_reserved; + const char* null_script; + // True if the unichars have their tops/bottoms set. + bool top_bottom_set_; + // True if the unicharset has significant upper/lower case chars. + bool script_has_upper_lower_; + // True if the unicharset has a significant mean-line with significant + // ascenders above that. + bool script_has_xheight_; + + // A few convenient script name-to-id mapping without using hash. + // These are initialized when unicharset file is loaded. Anything + // missing from this list can be looked up using get_script_id_from_name. + int null_sid_; + int common_sid_; + int latin_sid_; + int cyrillic_sid_; + int greek_sid_; + int han_sid_; + int hiragana_sid_; + int katakana_sid_; + // The most frequently occurring script in the charset. + int default_sid_; +}; + +#endif // TESSERACT_CCUTIL_UNICHARSET_H__ diff --git a/3rdparty/hgOCR/include/ccutil/unicity_table.h b/3rdparty/hgOCR/include/ccutil/unicity_table.h new file mode 100644 index 00000000..d664d461 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicity_table.h @@ -0,0 +1,208 @@ +/////////////////////////////////////////////////////////////////////// +// File: UnicityTable.h +// Description: a class to uniquify objects, manipulating them using integers +// ids. +// Author: Samuel Charron +// +// (C) Copyright 2006, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +#ifndef TESSERACT_CCUTIL_UNICITY_TABLE_H_ +#define TESSERACT_CCUTIL_UNICITY_TABLE_H_ + +#include "tesscallback.h" +#include "errcode.h" +#include "genericvector.h" + +// A class to uniquify objects, manipulating them using integers ids. +// T requirements: +// operator= to add an element +// default-constructible: allocating the internal table will call the default +// constructor. +template +class UnicityTable { + public: + UnicityTable(); + /// Clear the structures and deallocate internal structures. + ~UnicityTable(); + + /// Reserve some memory. If there is size or more elements, the table will + /// then allocate size * 2 elements. + void reserve(int size); + + /// Return the size used. + int size() const; + + /// Return the object from an id. + const T &get(int id) const; + + // Return the pointer to an object with the given id. + T *get_mutable(int id); + + /// Return the id of the T object. + /// This method NEEDS a compare_callback to be passed to + /// set_compare_callback. + int get_id(T object) const; + + /// Return true if T is in the table + bool contains(T object) const; + + /// Return true if the id is valid + T contains_id(int id) const; + + /// Add an element in the table + int push_back(T object); + + /// Add a callback to be called to delete the elements when the table took + /// their ownership. + void set_clear_callback(TessCallback1* cb); + + /// Add a callback to be called to compare the elements when needed (contains, + /// get_id, ...) + void set_compare_callback(TessResultCallback2* cb); + + /// Clear the table, calling the callback function if any. + /// All the owned Callbacks are also deleted. + /// If you don't want the Callbacks to be deleted, before calling clear, set + /// the callback to NULL. + void clear(); + + /// This method clear the current object, then, does a shallow copy of + /// its argument, and finally invalidate its argument. + void move(UnicityTable* from); + + /// Read/Write the table to a file. This does _NOT_ read/write the callbacks. + /// The Callback given must be permanent since they will be called more than + /// once. The given callback will be deleted at the end. + /// Returns false on read/write error. + bool write(FILE* f, TessResultCallback2* cb) const; + /// swap is used to switch the endianness. + bool read(FILE* f, TessResultCallback3* cb, bool swap); + + private: + GenericVector table_; + // Mutable because Run method is not const + mutable TessResultCallback2* compare_cb_; +}; + +template +class UnicityTableEqEq : public UnicityTable { + public: + UnicityTableEqEq() { + UnicityTable::set_compare_callback( + NewPermanentTessCallback(tesseract::cmp_eq)); + } +}; + +template +UnicityTable::UnicityTable() : + compare_cb_(0) { +} + + +template +UnicityTable::~UnicityTable() { + clear(); +} + +template +int UnicityTable::size() const{ + return table_.size(); +} + +// Reserve some memory. If there is size or more elements, the table will +// then allocate size * 2 elements. +template +void UnicityTable::reserve(int size) { + table_.reserve(size); +} + +// Return the object from an id. +template +const T &UnicityTable::get(int id) const { + return table_.get(id); +} +// Returns the pointer to the object with the given id. +template +T *UnicityTable::get_mutable(int id) { + return &(table_.get(id)); +} +// Return true if the id is valid +template +T UnicityTable::contains_id(int id) const { + return table_.contains_index(id); +} + +// Return the id of the T object. +template +int UnicityTable::get_id(T object) const { + return table_.get_index(object); +} + +// Return true if T is in the table +template +bool UnicityTable::contains(T object) const { + return get_id(object) != -1; +} + +// Add an element in the table +template +int UnicityTable::push_back(T object) { + int idx = get_id(object); + if (idx == -1) { + idx = table_.push_back(object); + } + return idx; +} + +// Add a callback to be called to delete the elements when the table took +// their ownership. +template +void UnicityTable::set_clear_callback(TessCallback1* cb) { + table_.set_clear_callback(cb); +} + +// Add a callback to be called to delete the elements when the table took +// their ownership. +template +void UnicityTable::set_compare_callback(TessResultCallback2* cb) { + table_.set_compare_callback(cb); + compare_cb_ = cb; +} + +// Clear the table, calling the callback function if any. +template +void UnicityTable::clear() { + table_.clear(); +} + +template +bool UnicityTable::write( + FILE* f, TessResultCallback2* cb) const { + return table_.write(f, cb); +} + +template +bool UnicityTable::read( + FILE* f, TessResultCallback3* cb, bool swap) { + return table_.read(f, cb, swap); +} + +// This method clear the current object, then, does a shallow copy of +// its argument, and finally invalidate its argument. +template +void UnicityTable::move(UnicityTable* from) { + table_.move(&from->table_); +} + +#endif // TESSERACT_CCUTIL_UNICITY_TABLE_H_ diff --git a/3rdparty/hgOCR/include/ccutil/unicodes.cpp b/3rdparty/hgOCR/include/ccutil/unicodes.cpp new file mode 100644 index 00000000..5d9964d8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicodes.cpp @@ -0,0 +1,57 @@ +/********************************************************************** + * File: unicodes.h + * Description: Unicode related machinery + * Author: David Eger + * Created: Wed Jun 15 16:37:50 PST 2011 + * + * (C) Copyright 2011, Google, Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#include "unicodes.h" +#include "host.h" // for NULL + +namespace tesseract { + +const char *kUTF8LineSeparator = "\u2028"; // "\xe2\x80\xa8"; +const char *kUTF8ParagraphSeparator = "\u2029"; // "\xe2\x80\xa9"; +const char *kLRM = "\u200E"; // Left-to-Right Mark +const char *kRLM = "\u200F"; // Right-to-Left Mark +const char *kRLE = "\u202A"; // Right-to-Left Embedding +const char *kPDF = "\u202C"; // Pop Directional Formatting + +const char *kHyphenLikeUTF8[] = { + "-", // ASCII hyphen-minus + "\u05BE", // word hyphen in hybrew + "\u2010", // hyphen + "\u2011", // non-breaking hyphen + "\u2012", // a hyphen the same width as digits + "\u2013", // en dash + "\u2014", // em dash + "\u2015", // horizontal bar + "\u2212", // arithmetic minus sign + "\uFE58", // small em dash + "\uFE63", // small hyphen-minus + "\uFF0D", // fullwidth hyphen-minus + NULL, // end of our list +}; + +const char *kApostropheLikeUTF8[] = { + "'", // ASCII apostrophe + "`", // ASCII backtick + "\u2018", // opening single quote + "\u2019", // closing single quote + "\u2032", // mathematical prime mark + NULL, // end of our list. +}; + +} // namespace diff --git a/3rdparty/hgOCR/include/ccutil/unicodes.h b/3rdparty/hgOCR/include/ccutil/unicodes.h new file mode 100644 index 00000000..f6d2bd51 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/unicodes.h @@ -0,0 +1,39 @@ +/********************************************************************** + * File: unicodes.h + * Description: Unicode related machinery + * Author: David Eger + * Created: Wed Jun 15 16:37:50 PST 2011 + * + * (C) Copyright 2011, Google, Inc. + ** Licensed under the Apache License, Version 2.0 (the "License"); + ** you may not use this file except in compliance with the License. + ** You may obtain a copy of the License at + ** http://www.apache.org/licenses/LICENSE-2.0 + ** Unless required by applicable law or agreed to in writing, software + ** distributed under the License is distributed on an "AS IS" BASIS, + ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ** See the License for the specific language governing permissions and + ** limitations under the License. + * + **********************************************************************/ + +#ifndef TESSERACT_CCUTIL_UNICODES_H__ +#define TESSERACT_CCUTIL_UNICODES_H__ + +namespace tesseract { + +extern const char *kUTF8LineSeparator; +extern const char *kUTF8ParagraphSeparator; +extern const char *kLRM; //< Left-to-Right Mark +extern const char *kRLM; //< Right-to-Left Mark +extern const char *kRLE; //< Right-to-Left Embedding +extern const char *kPDF; //< Pop Directional Formatting + +/// The following are confusable internal word punctuation symbols +/// which we normalize to the first variant when matching in dawgs. +extern const char *kHyphenLikeUTF8[]; +extern const char *kApostropheLikeUTF8[]; + +} // namespace + +#endif // TESSERACT_CCUTIL_UNICODES_H__ diff --git a/3rdparty/hgOCR/include/ccutil/universalambigs.cpp b/3rdparty/hgOCR/include/ccutil/universalambigs.cpp new file mode 100644 index 00000000..aa03c845 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/universalambigs.cpp @@ -0,0 +1,19021 @@ +/////////////////////////////////////////////////////////////////////// +// File: universalambigs.cpp +// Description: Data for a universal ambigs file that is useful for +// any language. +// Author: Ray Smith +// Created: Mon Mar 18 11:26:00 PDT 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +namespace tesseract { + +extern const char kUniversalAmbigsFile[] = { + '\166', '\062', '\012', '\047', '\047', '\040', '\042', '\040', '\061', + '\012', '\140', '\047', '\040', '\042', '\040', '\061', '\012', '\047', + '\140', '\040', '\042', '\040', '\061', '\012', '\342', '\200', '\230', + '\047', '\040', '\042', '\040', '\061', '\012', '\047', '\342', '\200', + '\230', '\040', '\042', '\040', '\061', '\012', '\342', '\200', '\231', + '\047', '\040', '\042', '\040', '\061', '\012', '\047', '\342', '\200', + '\231', '\040', '\042', '\040', '\061', '\012', '\140', '\140', '\040', + '\042', '\040', '\061', '\012', '\140', '\342', '\200', '\230', '\040', + '\042', '\040', '\061', '\012', '\342', '\200', '\230', '\140', '\040', + '\042', '\040', '\061', '\012', '\140', '\342', '\200', '\231', '\040', + '\042', '\040', '\061', '\012', '\342', '\200', '\231', '\140', '\040', + '\042', '\040', '\061', '\012', '\342', '\200', '\230', '\342', '\200', + '\230', '\040', '\342', '\200', '\234', '\040', '\061', '\012', '\342', + '\200', '\230', '\342', '\200', '\231', '\040', '\042', '\040', '\061', + '\012', '\342', '\200', '\231', '\342', '\200', '\230', '\040', '\042', + '\040', '\061', '\012', '\342', '\200', '\231', '\342', '\200', '\231', + '\040', '\342', '\200', '\235', '\040', '\061', '\012', '\054', '\054', + '\040', '\342', '\200', '\236', '\040', '\061', '\012', '\155', '\040', + '\162', '\156', '\040', '\060', '\012', '\162', '\156', '\040', '\155', + '\040', '\060', '\012', '\155', '\040', '\151', '\156', '\040', '\060', + '\012', '\151', '\156', '\040', '\155', '\040', '\060', '\012', '\144', + '\040', '\143', '\154', '\040', '\060', '\012', '\143', '\154', '\040', + '\144', '\040', '\060', '\012', '\156', '\156', '\040', '\162', '\155', + '\040', '\060', '\012', '\162', '\155', '\040', '\156', '\156', '\040', + '\060', '\012', '\156', '\040', '\162', '\151', '\040', '\060', '\012', + '\162', '\151', '\040', '\156', '\040', '\060', '\012', '\154', '\151', + '\040', '\150', '\040', '\060', '\012', '\154', '\162', '\040', '\150', + '\040', '\060', '\012', '\151', '\151', '\040', '\165', '\040', '\060', + '\012', '\151', '\151', '\040', '\156', '\040', '\060', '\012', '\156', + '\151', '\040', '\155', '\040', '\060', '\012', '\151', '\151', '\151', + '\040', '\155', '\040', '\060', '\012', '\154', '\154', '\040', '\110', + '\040', '\060', '\012', '\111', '\055', '\111', '\040', '\110', '\040', + '\060', '\012', '\166', '\166', '\040', '\167', '\040', '\060', '\012', + '\126', '\126', '\040', '\127', '\040', '\060', '\012', '\164', '\040', + '\146', '\040', '\060', '\012', '\146', '\040', '\164', '\040', '\060', + '\012', '\141', '\040', '\157', '\040', '\060', '\012', '\157', '\040', + '\141', '\040', '\060', '\012', '\145', '\040', '\143', '\040', '\060', + '\012', '\143', '\040', '\145', '\040', '\060', '\012', '\162', '\162', + '\040', '\156', '\040', '\060', '\012', '\105', '\040', '\146', '\151', + '\040', '\060', '\012', '\154', '\074', '\040', '\153', '\040', '\060', + '\012', '\154', '\144', '\040', '\153', '\151', '\040', '\060', '\012', + '\154', '\170', '\040', '\150', '\040', '\060', '\012', '\170', '\156', + '\040', '\155', '\040', '\060', '\012', '\165', '\170', '\040', '\151', + '\156', '\040', '\060', '\012', '\162', '\040', '\164', '\040', '\060', + '\012', '\144', '\040', '\164', '\154', '\040', '\060', '\012', '\144', + '\151', '\040', '\164', '\150', '\040', '\060', '\012', '\165', '\162', + '\040', '\151', '\156', '\040', '\060', '\012', '\165', '\156', '\040', + '\151', '\155', '\040', '\060', '\012', '\165', '\040', '\141', '\040', + '\060', '\012', '\157', '\040', '\303', '\263', '\040', '\060', '\012', + '\303', '\263', '\040', '\157', '\040', '\060', '\012', '\151', '\040', + '\303', '\255', '\040', '\060', '\012', '\303', '\255', '\040', '\151', + '\040', '\060', '\012', '\141', '\040', '\303', '\241', '\040', '\060', + '\012', '\303', '\241', '\040', '\141', '\040', '\060', '\012', '\145', + '\040', '\303', '\251', '\040', '\060', '\012', '\303', '\251', '\040', + '\145', '\040', '\060', '\012', '\165', '\040', '\303', '\272', '\040', + '\060', '\012', '\303', '\272', '\040', '\165', '\040', '\060', '\012', + '\156', '\040', '\303', '\261', '\040', '\060', '\012', '\303', '\261', + '\040', '\156', '\040', '\060', '\012', '\060', '\040', '\157', '\040', + '\060', '\012', '\144', '\040', '\164', '\162', '\040', '\060', '\012', + '\156', '\040', '\164', '\162', '\040', '\060', '\012', '\303', '\261', + '\040', '\146', '\151', '\040', '\060', '\012', '\165', '\040', '\164', + '\151', '\040', '\060', '\012', '\303', '\261', '\040', '\164', '\151', + '\040', '\060', '\012', '\144', '\040', '\164', '\151', '\040', '\060', + '\012', '\144', '\040', '\164', '\303', '\255', '\040', '\060', '\012', + '\144', '\040', '\162', '\303', '\255', '\040', '\060', '\012', '\141', + '\040', '\303', '\240', '\040', '\060', '\012', '\145', '\040', '\303', + '\250', '\040', '\060', '\012', '\156', '\040', '\151', '\152', '\040', + '\060', '\012', '\147', '\040', '\151', '\152', '\040', '\060', '\012', + '\157', '\040', '\303', '\262', '\040', '\060', '\012', '\105', '\040', + '\303', '\211', '\040', '\060', '\012', '\105', '\040', '\303', '\210', + '\040', '\060', '\012', '\165', '\040', '\303', '\274', '\040', '\060', + '\012', '\170', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\131', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\164', '\105', '\040', '\156', '\164', '\040', '\061', + '\012', '\124', '\154', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\170', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\152', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\160', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\162', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\161', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\142', '\114', '\040', '\142', '\145', '\040', '\061', + '\012', '\116', '\166', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\112', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\170', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\172', '\164', '\040', '\164', '\141', '\040', '\061', + '\012', '\161', '\113', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\143', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\130', '\160', '\040', '\160', '\157', '\040', '\061', + '\012', '\126', '\161', '\151', '\040', '\164', '\151', '\040', '\061', + '\012', '\125', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\112', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\153', '\144', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\160', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\102', '\166', '\040', '\164', '\151', '\040', '\061', + '\012', '\172', '\122', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\124', '\155', '\040', '\155', '\151', '\040', '\061', + '\012', '\155', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\164', '\160', '\040', '\164', '\151', '\040', '\061', + '\012', '\155', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\104', '\161', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\170', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\102', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\166', '\143', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\103', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\101', '\157', '\040', '\166', '\157', '\040', '\061', + '\012', '\161', '\165', '\102', '\040', '\164', '\165', '\040', '\061', + '\012', '\142', '\164', '\126', '\040', '\164', '\151', '\040', '\061', + '\012', '\114', '\155', '\143', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\126', '\167', '\040', '\164', '\151', '\040', '\061', + '\012', '\131', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\120', '\152', '\040', '\164', '\165', '\040', '\061', + '\012', '\146', '\124', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\122', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\144', '\101', '\040', '\144', '\151', '\040', '\061', + '\012', '\152', '\172', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\170', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\166', '\147', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\165', '\126', '\040', '\164', '\165', '\040', '\061', + '\012', '\163', '\127', '\153', '\040', '\153', '\165', '\040', '\061', + '\012', '\120', '\147', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\110', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\153', '\125', '\040', '\153', '\165', '\040', '\061', + '\012', '\147', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\144', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\126', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\147', '\144', '\040', '\144', '\151', '\040', '\061', + '\012', '\172', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\161', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\163', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\146', '\116', '\040', '\144', '\151', '\040', '\061', + '\012', '\144', '\147', '\127', '\040', '\144', '\151', '\040', '\061', + '\012', '\167', '\116', '\162', '\040', '\162', '\151', '\040', '\061', + '\012', '\172', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\131', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\110', '\171', '\040', '\164', '\165', '\040', '\061', + '\012', '\164', '\116', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\170', '\112', '\040', '\154', '\151', '\040', '\061', + '\012', '\110', '\142', '\153', '\040', '\153', '\165', '\040', '\061', + '\012', '\170', '\163', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\123', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\106', '\142', '\040', '\142', '\165', '\040', '\061', + '\012', '\116', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\153', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\132', '\146', '\040', '\164', '\157', '\040', '\061', + '\012', '\153', '\143', '\125', '\040', '\153', '\157', '\040', '\061', + '\012', '\146', '\106', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\161', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\156', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\170', '\115', '\040', '\160', '\157', '\040', '\061', + '\012', '\145', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\112', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\156', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\103', '\161', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\146', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\161', '\156', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\123', '\163', '\040', '\151', '\163', '\040', '\061', + '\012', '\163', '\102', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\106', '\150', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\116', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\115', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\170', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\144', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\162', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\105', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\126', '\143', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\124', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\101', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\154', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\142', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\126', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\121', '\154', '\040', '\164', '\145', '\040', '\061', + '\012', '\163', '\127', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\102', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\125', '\143', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\117', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\110', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\116', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\106', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\155', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\146', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\170', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\131', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\146', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\144', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\116', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\120', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\126', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\112', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\160', '\110', '\040', '\160', '\157', '\040', '\061', + '\012', '\170', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\155', '\102', '\040', '\156', '\164', '\040', '\061', + '\012', '\172', '\143', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\146', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\146', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\132', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\122', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\165', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\142', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\166', '\152', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\103', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\167', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\107', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\142', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\103', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\157', '\121', '\040', '\160', '\157', '\040', '\061', + '\012', '\161', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\166', '\147', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\101', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\146', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\147', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\160', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\121', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\152', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\170', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\120', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\116', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\107', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\165', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\131', '\145', '\040', '\164', '\145', '\040', '\061', + '\012', '\146', '\132', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\131', '\040', '\146', '\157', '\040', '\061', + '\012', '\171', '\120', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\155', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\146', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\170', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\172', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\141', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\153', '\126', '\144', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\152', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\153', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\121', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\166', '\152', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\160', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\153', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\112', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\167', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\155', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\103', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\167', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\107', '\146', '\040', '\156', '\164', '\040', '\061', + '\012', '\152', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\127', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\170', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\161', '\156', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\144', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\116', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\117', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\102', '\171', '\040', '\146', '\157', '\040', '\061', + '\012', '\156', '\125', '\152', '\040', '\156', '\164', '\040', '\061', + '\012', '\154', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\154', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\130', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\126', '\167', '\040', '\166', '\145', '\040', '\061', + '\012', '\172', '\127', '\156', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\112', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\115', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\155', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\123', '\163', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\127', '\154', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\152', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\113', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\143', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\153', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\125', '\145', '\040', '\164', '\145', '\040', '\061', + '\012', '\154', '\125', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\102', '\147', '\040', '\156', '\164', '\040', '\061', + '\012', '\144', '\110', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\160', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\102', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\144', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\146', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\147', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\153', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\121', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\160', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\102', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\155', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\127', '\146', '\040', '\166', '\145', '\040', '\061', + '\012', '\152', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\171', '\111', '\040', '\156', '\171', '\040', '\061', + '\012', '\132', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\117', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\153', '\112', '\040', '\153', '\157', '\040', '\061', + '\012', '\144', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\142', '\127', '\040', '\151', '\163', '\040', '\061', + '\012', '\172', '\115', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\112', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\115', '\143', '\040', '\153', '\157', '\040', '\061', + '\012', '\172', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\106', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\132', '\170', '\040', '\170', '\145', '\040', '\061', + '\012', '\161', '\166', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\162', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\152', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\167', '\111', '\040', '\167', '\141', '\040', '\061', + '\012', '\151', '\104', '\167', '\040', '\164', '\151', '\040', '\061', + '\012', '\102', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\120', '\172', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\106', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\121', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\102', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\166', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\152', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\172', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\110', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\142', '\115', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\127', '\147', '\040', '\156', '\164', '\040', '\061', + '\012', '\131', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\170', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\142', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\127', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\164', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\156', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\152', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\171', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\106', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\157', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\167', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\156', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\142', '\167', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\156', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\172', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\160', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\124', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\144', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\167', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\125', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\113', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\152', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\124', '\156', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\164', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\155', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\142', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\163', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\170', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\170', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\121', '\164', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\170', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\144', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\167', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\126', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\166', '\154', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\115', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\117', '\141', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\131', '\160', '\040', '\164', '\151', '\040', '\061', + '\012', '\166', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\157', '\126', '\040', '\162', '\157', '\040', '\061', + '\012', '\146', '\132', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\161', '\121', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\127', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\167', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\163', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\156', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\171', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\122', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\165', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\167', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\126', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\132', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\162', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\163', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\166', '\163', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\103', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\166', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\167', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\107', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\127', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\113', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\127', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\155', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\160', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\172', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\155', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\116', '\153', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\160', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\167', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\110', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\172', '\103', '\040', '\152', '\157', '\040', '\061', + '\012', '\157', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\130', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\105', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\165', '\127', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\163', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\123', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\113', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\171', '\145', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\155', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\165', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\144', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\116', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\172', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\152', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\160', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\114', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\142', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\170', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\126', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\120', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\121', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\155', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\106', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\141', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\124', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\116', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\167', '\131', '\040', '\164', '\151', '\040', '\061', + '\012', '\116', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\124', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\172', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\152', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\127', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\114', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\161', '\172', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\172', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\132', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\125', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\107', '\170', '\040', '\164', '\151', '\040', '\061', + '\012', '\170', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\170', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\152', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\107', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\147', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\156', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\146', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\165', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\132', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\104', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\163', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\126', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\104', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\101', '\157', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\155', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\127', '\156', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\122', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\166', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\151', '\131', '\040', '\164', '\151', '\040', '\061', + '\012', '\170', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\144', '\156', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\170', '\132', '\040', '\170', '\145', '\040', '\061', + '\012', '\130', '\144', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\156', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\127', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\121', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\167', '\107', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\155', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\107', '\171', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\172', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\107', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\152', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\126', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\167', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\150', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\156', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\127', '\143', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\117', '\156', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\156', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\164', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\127', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\101', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\132', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\124', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\131', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\167', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\121', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\126', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\154', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\102', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\111', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\121', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\142', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\125', '\157', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\126', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\144', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\161', '\103', '\040', '\166', '\157', '\040', '\061', + '\012', '\152', '\153', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\166', '\172', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\120', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\103', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\146', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\167', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\124', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\154', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\164', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\114', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\121', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\166', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\147', '\145', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\112', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\116', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\113', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\131', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\152', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\101', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\155', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\107', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\126', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\127', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\160', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\167', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\127', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\111', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\142', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\161', '\143', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\145', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\120', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\167', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\110', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\167', '\120', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\166', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\123', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\131', '\160', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\104', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\102', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\116', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\125', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\122', '\154', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\102', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\154', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\167', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\101', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\104', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\102', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\146', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\157', '\116', '\040', '\157', '\156', '\040', '\061', + '\012', '\131', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\126', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\120', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\147', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\170', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\146', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\127', '\144', '\040', '\144', '\157', '\040', '\061', + '\012', '\170', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\117', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\153', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\155', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\101', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\110', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\113', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\110', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\170', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\171', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\157', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\115', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\120', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\167', '\107', '\040', '\167', '\141', '\040', '\061', + '\012', '\103', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\157', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\161', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\120', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\156', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\146', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\171', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\114', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\152', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\155', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\145', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\171', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\163', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\167', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\156', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\103', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\160', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\117', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\106', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\113', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\110', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\162', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\114', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\131', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\103', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\167', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\114', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\115', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\113', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\115', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\143', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\170', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\132', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\167', '\104', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\146', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\170', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\120', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\101', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\113', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\103', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\167', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\166', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\125', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\120', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\152', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\160', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\172', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\132', '\163', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\113', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\143', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\126', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\127', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\114', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\113', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\147', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\132', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\112', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\153', '\146', '\115', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\113', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\147', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\107', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\122', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\117', '\141', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\167', '\104', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\130', '\163', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\154', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\155', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\127', '\155', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\126', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\152', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\170', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\166', '\163', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\126', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\170', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\120', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\146', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\160', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\106', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\167', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\117', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\132', '\162', '\040', '\151', '\156', '\040', '\061', + '\012', '\126', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\114', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\106', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\171', '\125', '\040', '\156', '\171', '\040', '\061', + '\012', '\155', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\113', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\115', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\111', '\152', '\040', '\164', '\145', '\040', '\061', + '\012', '\126', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\103', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\125', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\132', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\131', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\163', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\110', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\102', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\117', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\152', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\146', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\117', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\130', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\115', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\111', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\120', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\167', '\127', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\115', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\124', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\111', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\152', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\120', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\154', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\131', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\126', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\160', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\144', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\114', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\144', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\102', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\162', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\124', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\131', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\143', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\103', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\120', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\160', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\142', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\170', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\123', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\105', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\130', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\155', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\153', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\167', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\125', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\146', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\160', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\124', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\132', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\102', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\107', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\103', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\116', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\161', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\130', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\123', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\130', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\147', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\143', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\155', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\170', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\106', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\162', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\116', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\170', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\167', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\114', '\164', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\160', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\111', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\120', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\160', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\104', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\146', '\112', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\102', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\110', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\101', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\116', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\152', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\123', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\115', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\113', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\155', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\172', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\110', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\112', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\127', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\166', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\153', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\105', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\125', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\114', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\107', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\107', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\106', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\106', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\123', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\130', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\110', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\165', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\112', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\127', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\160', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\161', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\162', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\147', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\171', '\120', '\040', '\156', '\171', '\040', '\061', + '\012', '\132', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\106', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\156', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\120', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\106', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\146', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\146', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\107', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\122', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\127', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\131', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\105', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\110', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\106', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\104', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\114', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\113', '\163', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\167', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\126', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\165', '\111', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\167', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\120', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\122', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\146', '\104', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\103', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\112', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\103', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\142', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\103', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\155', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\145', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\156', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\167', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\111', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\152', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\167', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\112', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\156', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\106', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\147', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\104', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\110', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\171', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\114', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\170', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\115', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\167', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\146', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\164', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\124', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\103', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\103', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\146', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\111', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\167', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\167', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\132', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\126', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\124', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\115', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\110', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\152', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\167', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\113', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\146', '\107', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\146', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\167', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\125', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\153', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\155', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\155', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\164', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\171', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\171', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\122', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\115', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\167', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\120', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\167', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\171', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\163', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\124', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\155', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\160', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\102', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\165', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\114', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\146', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\125', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\103', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\125', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\102', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\155', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\164', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\121', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\172', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\162', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\170', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\131', '\153', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\153', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\120', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\165', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\120', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\167', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\167', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\170', '\120', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\155', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\141', '\167', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\126', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\167', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\131', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\103', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\146', '\121', '\040', '\156', '\171', '\040', '\061', + '\012', '\172', '\107', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\166', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\103', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\120', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\150', '\166', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\172', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\146', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\131', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\116', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\101', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\170', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\117', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\167', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\121', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\127', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\170', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\130', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\166', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\130', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\103', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\122', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\141', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\110', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\120', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\152', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\132', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\156', '\161', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\126', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\110', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\112', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\124', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\153', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\167', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\155', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\146', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\155', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\117', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\165', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\104', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\122', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\155', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\170', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\164', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\106', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\126', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\144', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\115', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\167', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\153', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\122', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\166', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\167', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\121', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\162', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\125', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\167', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\147', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\110', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\121', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\132', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\171', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\105', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\114', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\170', '\125', '\040', '\156', '\171', '\040', '\061', + '\012', '\147', '\166', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\163', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\142', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\115', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\153', '\130', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\162', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\117', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\107', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\107', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\103', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\161', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\104', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\105', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\132', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\131', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\120', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\147', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\170', '\113', '\040', '\146', '\157', '\040', '\061', + '\012', '\110', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\122', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\155', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\170', '\122', '\040', '\142', '\145', '\040', '\061', + '\012', '\114', '\163', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\122', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\167', '\121', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\146', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\167', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\106', '\143', '\040', '\164', '\151', '\040', '\061', + '\012', '\167', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\142', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\146', '\123', '\040', '\146', '\157', '\040', '\061', + '\012', '\120', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\131', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\104', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\103', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\170', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\115', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\147', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\161', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\164', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\125', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\156', '\116', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\124', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\163', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\112', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\155', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\152', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\170', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\144', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\101', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\125', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\130', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\102', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\147', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\132', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\112', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\155', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\131', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\167', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\131', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\110', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\154', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\103', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\104', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\103', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\170', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\145', '\130', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\153', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\122', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\167', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\121', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\106', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\145', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\167', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\167', '\104', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\160', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\165', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\162', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\163', '\156', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\120', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\122', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\152', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\143', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\145', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\106', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\142', '\127', '\040', '\142', '\145', '\040', '\061', + '\012', '\165', '\125', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\164', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\160', '\124', '\040', '\151', '\156', '\040', '\061', + '\012', '\130', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\167', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\130', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\114', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\106', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\114', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\142', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\155', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\156', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\116', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\160', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\154', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\110', '\161', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\167', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\152', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\120', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\122', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\112', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\132', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\166', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\120', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\116', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\155', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\151', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\154', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\170', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\167', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\144', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\132', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\146', '\112', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\121', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\161', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\114', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\152', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\132', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\131', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\126', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\167', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\167', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\145', '\107', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\123', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\163', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\155', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\146', '\121', '\040', '\146', '\157', '\040', '\061', + '\012', '\126', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\155', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\101', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\142', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\112', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\170', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\142', '\103', '\040', '\142', '\145', '\040', '\061', + '\012', '\122', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\112', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\171', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\153', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\157', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\132', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\120', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\107', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\122', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\114', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\170', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\143', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\167', '\160', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\124', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\146', '\107', '\040', '\156', '\171', '\040', '\061', + '\012', '\160', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\152', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\144', '\147', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\167', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\152', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\124', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\113', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\122', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\131', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\123', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\154', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\125', '\165', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\117', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\102', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\122', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\127', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\110', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\146', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\152', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\170', '\107', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\160', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\172', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\102', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\170', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\111', '\152', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\105', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\106', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\111', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\106', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\172', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\111', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\153', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\146', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\153', '\111', '\040', '\153', '\165', '\040', '\061', + '\012', '\146', '\111', '\157', '\040', '\162', '\157', '\040', '\061', + '\012', '\154', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\101', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\104', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\110', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\112', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\103', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\166', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\114', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\132', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\124', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\126', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\106', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\167', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\107', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\165', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\106', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\124', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\110', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\121', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\104', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\153', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\102', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\155', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\144', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\153', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\123', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\144', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\147', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\116', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\146', '\101', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\170', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\170', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\121', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\167', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\170', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\167', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\111', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\172', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\161', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\115', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\160', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\117', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\153', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\152', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\165', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\155', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\165', '\112', '\040', '\157', '\165', '\040', '\061', + '\012', '\171', '\127', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\125', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\172', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\123', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\147', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\152', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\123', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\146', '\101', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\153', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\144', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\142', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\102', '\155', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\170', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\111', '\161', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\147', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\122', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\106', '\167', '\040', '\166', '\157', '\040', '\061', + '\012', '\146', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\167', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\112', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\170', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\132', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\110', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\165', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\160', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\121', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\107', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\163', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\167', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\171', '\121', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\113', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\155', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\132', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\111', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\171', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\104', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\111', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\152', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\102', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\167', '\142', '\040', '\157', '\167', '\040', '\061', + '\012', '\126', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\152', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\107', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\102', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\160', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\131', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\170', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\150', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\160', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\104', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\116', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\122', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\115', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\160', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\104', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\171', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\113', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\153', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\167', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\104', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\155', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\144', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\112', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\125', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\124', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\110', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\155', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\106', '\150', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\163', '\122', '\040', '\163', '\164', '\040', '\061', + '\012', '\151', '\127', '\147', '\040', '\151', '\156', '\040', '\061', + '\012', '\130', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\172', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\126', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\111', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\104', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\146', '\125', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\157', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\143', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\127', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\121', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\145', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\152', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\124', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\122', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\142', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\111', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\170', '\116', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\103', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\144', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\113', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\124', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\155', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\124', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\114', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\111', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\143', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\165', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\103', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\161', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\152', '\172', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\151', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\156', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\155', '\116', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\142', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\153', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\172', '\103', '\040', '\160', '\157', '\040', '\061', + '\012', '\154', '\146', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\102', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\155', '\114', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\152', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\111', '\165', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\146', '\104', '\040', '\156', '\171', '\040', '\061', + '\012', '\143', '\154', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\144', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\124', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\130', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\160', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\155', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\153', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\125', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\170', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\124', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\132', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\126', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\146', '\104', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\120', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\130', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\105', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\142', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\157', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\153', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\142', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\160', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\146', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\104', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\115', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\172', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\155', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\152', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\153', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\144', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\142', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\170', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\131', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\112', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\114', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\102', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\145', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\167', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\120', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\111', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\142', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\144', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\115', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\170', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\106', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\167', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\162', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\131', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\126', '\143', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\122', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\160', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\116', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\113', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\166', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\167', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\171', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\102', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\123', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\115', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\152', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\131', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\106', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\153', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\167', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\152', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\121', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\115', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\112', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\124', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\155', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\131', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\112', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\124', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\146', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\170', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\142', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\170', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\167', '\117', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\166', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\166', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\153', '\106', '\040', '\153', '\165', '\040', '\061', + '\012', '\151', '\171', '\124', '\040', '\151', '\156', '\040', '\061', + '\012', '\125', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\156', '\172', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\142', '\110', '\040', '\142', '\165', '\040', '\061', + '\012', '\154', '\123', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\125', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\171', '\106', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\170', '\120', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\131', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\170', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\167', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\125', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\163', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\144', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\131', '\163', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\146', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\122', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\160', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\170', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\142', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\153', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\113', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\121', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\127', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\167', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\143', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\146', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\130', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\147', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\152', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\107', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\142', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\160', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\115', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\167', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\116', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\103', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\154', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\102', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\106', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\146', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\106', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\170', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\147', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\106', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\170', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\152', '\172', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\166', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\171', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\106', '\150', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\107', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\114', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\114', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\113', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\112', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\121', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\160', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\151', '\117', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\117', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\152', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\126', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\166', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\164', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\111', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\160', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\170', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\166', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\160', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\156', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\147', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\146', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\110', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\144', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\124', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\147', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\170', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\120', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\170', '\127', '\040', '\156', '\171', '\040', '\061', + '\012', '\110', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\110', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\166', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\147', '\156', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\142', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\161', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\122', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\146', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\130', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\155', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\121', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\163', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\111', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\154', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\160', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\155', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\153', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\104', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\131', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\153', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\106', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\171', '\112', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\111', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\131', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\144', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\142', '\116', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\167', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\121', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\112', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\147', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\170', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\115', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\146', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\153', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\110', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\141', '\112', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\127', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\155', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\102', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\116', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\101', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\110', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\122', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\127', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\124', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\170', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\113', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\124', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\156', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\157', '\145', '\117', '\040', '\157', '\156', '\040', '\061', + '\012', '\156', '\103', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\130', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\101', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\107', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\170', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\122', '\172', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\124', '\163', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\110', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\114', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\116', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\107', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\171', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\104', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\172', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\105', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\142', '\106', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\163', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\156', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\113', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\165', '\121', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\170', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\113', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\143', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\146', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\102', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\112', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\131', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\123', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\121', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\160', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\146', '\113', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\120', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\130', '\162', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\152', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\172', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\155', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\112', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\111', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\130', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\146', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\126', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\112', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\114', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\167', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\167', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\106', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\127', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\114', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\170', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\146', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\120', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\144', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\167', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\115', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\120', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\172', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\106', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\113', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\153', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\107', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\132', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\153', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\122', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\154', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\116', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\131', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\132', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\164', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\120', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\127', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\146', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\105', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\152', '\172', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\170', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\154', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\131', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\115', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\115', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\122', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\114', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\106', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\116', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\106', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\113', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\112', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\113', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\170', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\120', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\172', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\110', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\106', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\166', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\130', '\145', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\111', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\142', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\132', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\113', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\160', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\113', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\121', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\106', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\127', '\166', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\153', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\152', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\146', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\142', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\167', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\127', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\123', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\162', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\166', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\161', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\142', '\107', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\172', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\106', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\170', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\141', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\124', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\102', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\126', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\146', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\170', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\110', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\126', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\121', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\167', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\110', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\172', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\146', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\127', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\161', '\105', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\160', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\127', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\154', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\131', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\166', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\146', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\142', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\166', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\110', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\160', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\146', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\145', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\142', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\127', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\144', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\166', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\167', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\115', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\143', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\164', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\160', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\153', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\165', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\142', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\123', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\155', '\107', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\141', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\167', '\110', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\104', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\107', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\150', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\153', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\146', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\155', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\115', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\131', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\167', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\170', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\142', '\123', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\162', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\112', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\130', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\104', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\160', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\147', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\141', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\162', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\112', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\115', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\143', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\116', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\132', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\170', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\126', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\142', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\123', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\121', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\126', '\167', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\124', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\162', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\112', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\114', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\153', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\142', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\153', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\160', '\105', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\132', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\167', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\103', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\162', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\155', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\146', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\102', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\142', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\144', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\102', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\121', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\154', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\164', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\122', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\162', '\161', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\127', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\172', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\107', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\127', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\126', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\165', '\120', '\040', '\165', '\156', '\040', '\061', + '\012', '\144', '\110', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\147', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\115', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\110', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\132', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\153', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\116', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\160', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\152', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\170', '\126', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\147', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\115', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\107', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\142', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\162', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\165', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\153', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\170', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\126', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\113', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\154', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\102', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\121', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\131', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\166', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\107', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\164', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\166', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\152', '\172', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\165', '\040', '\153', '\165', '\040', '\061', + '\012', '\121', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\155', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\111', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\132', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\114', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\115', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\120', '\155', '\040', '\165', '\155', '\040', '\061', + '\012', '\160', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\172', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\142', '\117', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\166', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\143', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\155', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\106', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\170', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\102', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\126', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\157', '\110', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\127', '\147', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\104', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\167', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\104', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\113', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\166', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\165', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\103', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\144', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\142', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\142', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\142', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\146', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\142', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\142', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\122', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\132', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\112', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\132', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\142', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\112', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\126', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\167', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\167', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\146', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\164', '\130', '\040', '\164', '\151', '\040', '\061', + '\012', '\144', '\113', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\121', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\104', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\160', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\153', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\144', '\104', '\040', '\144', '\151', '\040', '\061', + '\012', '\146', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\150', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\102', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\105', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\146', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\132', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\170', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\102', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\143', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\122', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\126', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\102', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\117', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\107', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\166', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\147', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\162', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\106', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\126', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\146', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\144', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\156', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\172', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\101', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\101', '\167', '\040', '\153', '\157', '\040', '\061', + '\012', '\170', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\116', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\160', '\144', '\040', '\144', '\151', '\040', '\061', + '\012', '\157', '\125', '\171', '\040', '\153', '\157', '\040', '\061', + '\012', '\146', '\160', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\122', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\154', '\130', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\127', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\127', '\166', '\040', '\166', '\151', '\040', '\061', + '\012', '\106', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\147', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\127', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\126', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\120', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\167', '\101', '\040', '\144', '\145', '\040', '\061', + '\012', '\117', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\151', '\132', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\172', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\167', '\114', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\127', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\124', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\142', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\165', '\117', '\040', '\151', '\156', '\040', '\061', + '\012', '\121', '\144', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\165', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\163', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\111', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\147', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\123', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\170', '\121', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\143', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\142', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\122', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\132', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\103', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\155', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\132', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\104', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\142', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\123', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\126', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\121', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\115', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\103', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\156', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\166', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\146', '\112', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\103', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\163', '\121', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\165', '\103', '\040', '\165', '\156', '\040', '\061', + '\012', '\103', '\164', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\152', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\155', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\130', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\163', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\142', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\167', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\170', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\150', '\151', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\113', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\151', '\161', '\116', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\153', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\116', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\167', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\107', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\162', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\153', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\122', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\112', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\161', '\106', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\170', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\163', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\146', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\162', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\130', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\126', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\115', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\110', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\113', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\111', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\116', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\167', '\114', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\132', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\117', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\162', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\125', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\155', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\172', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\166', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\170', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\123', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\110', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\116', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\123', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\111', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\146', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\172', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\112', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\152', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\141', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\104', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\121', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\112', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\122', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\112', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\153', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\142', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\102', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\126', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\131', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\126', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\172', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\113', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\120', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\170', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\142', '\124', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\166', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\155', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\170', '\114', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\123', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\116', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\124', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\114', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\166', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\106', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\147', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\104', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\117', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\146', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\160', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\170', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\126', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\106', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\170', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\167', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\144', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\127', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\124', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\155', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\166', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\153', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\103', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\164', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\110', '\150', '\040', '\154', '\157', '\040', '\061', + '\012', '\131', '\166', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\126', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\127', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\115', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\131', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\106', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\121', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\113', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\114', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\111', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\147', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\106', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\170', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\152', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\120', '\147', '\040', '\151', '\156', '\040', '\061', + '\012', '\130', '\156', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\153', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\146', '\120', '\040', '\160', '\162', '\040', '\061', + '\012', '\104', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\172', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\167', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\142', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\167', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\146', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\126', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\125', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\172', '\124', '\040', '\152', '\157', '\040', '\061', + '\012', '\153', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\127', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\142', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\141', '\102', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\101', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\144', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\102', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\130', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\155', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\171', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\107', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\112', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\155', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\142', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\167', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\101', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\121', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\157', '\132', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\120', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\171', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\130', '\152', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\167', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\156', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\113', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\142', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\107', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\127', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\131', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\104', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\121', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\121', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\142', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\165', '\122', '\040', '\165', '\156', '\040', '\061', + '\012', '\143', '\115', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\130', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\116', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\110', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\112', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\103', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\117', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\155', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\160', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\131', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\162', '\123', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\155', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\167', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\130', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\131', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\103', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\115', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\126', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\117', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\114', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\131', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\160', '\106', '\040', '\157', '\156', '\040', '\061', + '\012', '\162', '\127', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\132', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\131', '\142', '\040', '\146', '\157', '\040', '\061', + '\012', '\172', '\142', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\102', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\111', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\167', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\164', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\122', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\171', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\155', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\111', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\111', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\142', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\146', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\127', '\160', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\115', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\123', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\154', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\103', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\172', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\146', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\117', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\146', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\107', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\101', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\146', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\104', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\106', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\124', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\116', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\113', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\155', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\146', '\122', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\151', '\125', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\163', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\164', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\120', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\163', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\170', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\151', '\125', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\104', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\170', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\141', '\107', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\120', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\142', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\126', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\170', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\126', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\110', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\101', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\111', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\155', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\155', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\154', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\153', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\166', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\161', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\114', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\121', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\167', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\171', '\122', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\171', '\111', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\147', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\156', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\121', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\160', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\172', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\111', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\130', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\160', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\153', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\153', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\155', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\162', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\142', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\160', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\103', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\106', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\121', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\152', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\126', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\105', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\161', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\154', '\131', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\107', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\104', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\117', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\162', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\146', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\120', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\126', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\126', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\142', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\122', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\170', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\104', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\147', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\167', '\120', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\162', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\126', '\161', '\040', '\144', '\151', '\040', '\061', + '\012', '\170', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\147', '\103', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\117', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\116', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\130', '\161', '\040', '\151', '\156', '\040', '\061', + '\012', '\121', '\156', '\154', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\120', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\111', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\120', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\166', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\161', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\167', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\167', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\155', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\122', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\170', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\142', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\146', '\116', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\160', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\155', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\113', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\142', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\116', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\154', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\102', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\141', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\146', '\115', '\040', '\146', '\157', '\040', '\061', + '\012', '\162', '\132', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\121', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\166', '\121', '\040', '\151', '\156', '\040', '\061', + '\012', '\125', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\160', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\120', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\107', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\106', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\165', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\102', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\111', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\102', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\125', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\172', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\132', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\126', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\170', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\111', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\102', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\113', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\171', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\157', '\102', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\127', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\146', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\121', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\146', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\130', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\112', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\141', '\123', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\122', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\170', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\107', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\163', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\142', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\156', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\142', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\132', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\171', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\102', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\152', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\130', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\124', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\116', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\126', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\124', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\124', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\170', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\167', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\126', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\122', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\117', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\110', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\152', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\116', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\154', '\167', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\160', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\106', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\110', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\105', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\167', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\127', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\146', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\160', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\166', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\130', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\105', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\116', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\115', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\171', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\160', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\157', '\101', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\154', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\170', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\164', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\114', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\125', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\106', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\163', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\166', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\106', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\156', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\142', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\120', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\163', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\146', '\120', '\040', '\156', '\171', '\040', '\061', + '\012', '\147', '\131', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\146', '\103', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\115', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\154', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\152', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\121', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\124', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\125', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\167', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\115', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\172', '\153', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\154', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\141', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\113', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\126', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\156', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\170', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\172', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\170', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\166', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\167', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\105', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\172', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\120', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\101', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\172', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\146', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\147', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\163', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\121', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\153', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\117', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\115', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\152', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\105', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\145', '\121', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\123', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\125', '\170', '\040', '\155', '\142', '\040', '\061', + '\012', '\172', '\144', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\160', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\122', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\147', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\146', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\154', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\142', '\126', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\155', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\131', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\116', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\166', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\166', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\114', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\161', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\170', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\161', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\110', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\146', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\163', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\122', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\142', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\125', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\143', '\131', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\144', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\153', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\142', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\166', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\142', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\120', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\160', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\117', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\120', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\101', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\153', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\153', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\156', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\116', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\130', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\155', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\125', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\163', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\160', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\145', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\122', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\112', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\163', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\167', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\120', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\101', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\167', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\152', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\132', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\104', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\123', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\121', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\102', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\114', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\162', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\120', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\110', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\130', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\142', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\116', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\112', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\112', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\122', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\166', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\166', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\110', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\124', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\104', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\117', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\121', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\166', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\146', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\167', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\130', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\154', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\170', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\167', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\166', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\146', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\101', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\150', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\115', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\110', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\120', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\112', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\127', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\126', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\146', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\106', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\127', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\166', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\111', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\106', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\170', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\114', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\122', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\170', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\152', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\112', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\106', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\105', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\122', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\146', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\167', '\126', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\146', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\127', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\152', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\106', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\126', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\165', '\107', '\040', '\165', '\156', '\040', '\061', + '\012', '\154', '\103', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\170', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\107', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\166', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\131', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\160', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\113', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\160', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\114', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\127', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\162', '\123', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\126', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\116', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\120', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\144', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\125', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\164', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\107', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\104', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\146', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\146', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\115', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\152', '\123', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\143', '\161', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\127', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\165', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\146', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\171', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\162', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\110', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\171', '\116', '\040', '\156', '\171', '\040', '\061', + '\012', '\121', '\162', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\113', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\146', '\125', '\040', '\142', '\145', '\040', '\061', + '\012', '\121', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\117', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\152', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\130', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\142', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\155', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\127', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\167', '\124', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\132', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\106', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\160', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\146', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\167', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\160', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\147', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\114', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\170', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\112', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\132', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\116', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\115', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\146', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\125', '\165', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\107', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\160', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\127', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\152', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\165', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\163', '\111', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\162', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\153', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\127', '\165', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\111', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\155', '\116', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\112', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\115', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\123', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\172', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\166', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\155', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\156', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\160', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\114', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\165', '\171', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\145', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\105', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\155', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\152', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\115', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\167', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\161', '\115', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\166', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\142', '\120', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\115', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\165', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\170', '\130', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\166', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\120', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\163', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\146', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\121', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\167', '\146', '\040', '\157', '\167', '\040', '\061', + '\012', '\154', '\152', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\166', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\110', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\122', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\154', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\132', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\123', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\126', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\127', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\103', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\167', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\105', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\125', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\143', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\104', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\152', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\154', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\171', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\142', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\117', '\141', '\145', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\142', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\172', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\131', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\102', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\122', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\152', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\142', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\107', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\116', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\125', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\152', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\155', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\105', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\110', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\107', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\146', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\132', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\171', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\144', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\141', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\123', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\101', '\157', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\114', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\103', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\153', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\131', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\153', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\147', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\127', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\114', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\160', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\167', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\154', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\147', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\142', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\161', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\106', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\102', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\127', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\116', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\115', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\146', '\103', '\040', '\156', '\171', '\040', '\061', + '\012', '\105', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\152', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\147', '\157', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\102', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\146', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\170', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\126', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\126', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\127', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\123', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\167', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\126', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\170', '\120', '\040', '\156', '\171', '\040', '\061', + '\012', '\131', '\171', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\120', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\117', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\121', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\106', '\040', '\146', '\157', '\040', '\061', + '\012', '\144', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\164', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\160', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\147', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\167', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\131', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\123', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\101', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\105', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\113', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\155', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\130', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\130', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\121', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\157', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\122', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\171', '\114', '\040', '\156', '\171', '\040', '\061', + '\012', '\153', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\171', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\155', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\111', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\130', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\121', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\115', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\127', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\127', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\116', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\142', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\124', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\113', '\144', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\146', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\146', '\132', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\126', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\124', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\166', '\166', '\040', '\166', '\151', '\040', '\061', + '\012', '\120', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\110', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\142', '\122', '\040', '\142', '\145', '\040', '\061', + '\012', '\143', '\106', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\167', '\120', '\040', '\167', '\141', '\040', '\061', + '\012', '\126', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\106', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\102', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\142', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\162', '\123', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\153', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\113', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\120', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\114', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\162', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\166', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\127', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\127', '\165', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\161', '\111', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\160', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\120', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\155', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\166', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\144', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\131', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\167', '\142', '\040', '\157', '\167', '\040', '\061', + '\012', '\127', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\166', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\104', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\167', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\124', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\103', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\167', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\160', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\103', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\170', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\167', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\144', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\147', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\166', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\166', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\165', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\106', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\126', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\112', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\111', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\167', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\113', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\167', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\121', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\142', '\126', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\160', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\125', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\172', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\141', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\147', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\127', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\155', '\123', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\132', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\152', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\154', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\167', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\122', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\105', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\160', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\112', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\117', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\160', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\124', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\146', '\161', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\132', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\143', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\126', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\116', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\131', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\106', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\167', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\167', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\130', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\130', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\153', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\147', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\110', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\166', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\151', '\101', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\171', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\171', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\157', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\121', '\153', '\172', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\122', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\106', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\132', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\103', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\113', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\142', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\142', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\146', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\126', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\132', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\132', '\142', '\040', '\147', '\141', '\040', '\061', + '\012', '\167', '\164', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\106', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\104', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\113', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\153', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\123', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\171', '\103', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\126', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\110', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\154', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\105', '\167', '\040', '\150', '\141', '\040', '\061', + '\012', '\172', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\111', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\172', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\163', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\142', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\171', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\167', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\121', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\154', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\126', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\117', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\153', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\102', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\103', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\107', '\155', '\040', '\155', '\141', '\040', '\061', + '\012', '\160', '\141', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\125', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\114', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\146', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\167', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\120', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\170', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\143', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\161', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\172', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\161', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\132', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\154', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\171', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\110', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\164', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\107', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\110', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\106', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\144', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\103', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\152', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\154', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\111', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\130', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\142', '\105', '\040', '\142', '\145', '\040', '\061', + '\012', '\110', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\142', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\125', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\153', '\145', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\157', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\103', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\114', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\147', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\117', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\117', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\127', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\116', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\146', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\126', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\146', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\162', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\104', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\117', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\167', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\121', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\161', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\166', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\163', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\121', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\115', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\142', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\152', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\142', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\116', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\132', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\103', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\110', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\115', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\111', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\154', '\110', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\105', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\112', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\122', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\112', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\106', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\110', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\167', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\121', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\112', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\144', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\117', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\114', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\172', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\162', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\155', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\170', '\105', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\130', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\142', '\125', '\040', '\142', '\145', '\040', '\061', + '\012', '\141', '\145', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\166', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\122', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\170', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\121', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\130', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\112', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\166', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\126', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\127', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\130', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\102', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\153', '\115', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\110', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\142', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\122', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\166', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\102', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\157', '\120', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\164', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\167', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\106', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\153', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\157', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\166', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\131', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\152', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\127', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\154', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\146', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\142', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\131', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\144', '\124', '\040', '\144', '\141', '\040', '\061', + '\012', '\166', '\124', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\116', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\142', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\125', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\130', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\122', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\161', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\117', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\104', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\112', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\163', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\145', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\105', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\155', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\111', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\132', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\167', '\122', '\040', '\151', '\156', '\040', '\061', + '\012', '\157', '\112', '\166', '\040', '\153', '\157', '\040', '\061', + '\012', '\165', '\146', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\127', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\165', '\126', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\130', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\112', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\105', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\112', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\105', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\161', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\126', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\120', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\127', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\153', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\141', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\126', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\123', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\122', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\142', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\167', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\146', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\147', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\167', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\172', '\112', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\131', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\121', '\154', '\040', '\151', '\156', '\040', '\061', + '\012', '\121', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\106', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\156', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\131', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\111', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\130', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\162', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\152', '\111', '\040', '\163', '\164', '\040', '\061', + '\012', '\151', '\171', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\132', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\130', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\112', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\142', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\165', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\157', '\125', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\156', '\127', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\167', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\171', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\111', '\157', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\160', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\112', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\144', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\126', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\152', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\142', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\113', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\163', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\153', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\142', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\114', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\166', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\113', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\132', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\162', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\122', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\115', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\125', '\170', '\040', '\141', '\162', '\040', '\061', + '\012', '\161', '\110', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\153', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\170', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\172', '\127', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\155', '\102', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\172', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\111', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\157', '\113', '\040', '\157', '\156', '\040', '\061', + '\012', '\107', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\107', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\132', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\167', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\146', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\111', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\105', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\114', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\122', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\153', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\166', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\161', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\167', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\126', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\103', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\171', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\147', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\114', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\116', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\112', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\130', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\114', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\167', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\166', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\160', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\126', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\142', '\105', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\121', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\144', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\111', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\110', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\163', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\166', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\146', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\114', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\172', '\153', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\152', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\151', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\114', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\112', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\117', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\127', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\101', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\111', '\171', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\112', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\122', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\146', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\127', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\160', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\111', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\107', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\143', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\170', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\115', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\147', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\155', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\104', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\157', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\102', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\127', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\155', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\131', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\165', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\114', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\147', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\153', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\112', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\115', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\146', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\117', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\153', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\161', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\112', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\155', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\163', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\144', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\156', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\155', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\115', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\142', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\104', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\152', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\144', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\125', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\165', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\103', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\164', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\112', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\146', '\130', '\040', '\146', '\157', '\040', '\061', + '\012', '\116', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\102', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\142', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\171', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\127', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\146', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\154', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\111', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\113', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\124', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\121', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\155', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\160', '\105', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\123', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\147', '\151', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\111', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\167', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\117', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\167', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\163', '\120', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\132', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\154', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\170', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\132', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\171', '\123', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\132', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\154', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\171', '\106', '\040', '\151', '\156', '\040', '\061', + '\012', '\103', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\167', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\146', '\126', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\142', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\165', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\114', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\155', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\131', '\157', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\162', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\171', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\165', '\171', '\127', '\040', '\165', '\156', '\040', '\061', + '\012', '\153', '\107', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\167', '\113', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\153', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\130', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\103', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\121', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\120', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\102', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\102', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\105', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\105', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\110', '\167', '\040', '\165', '\163', '\040', '\061', + '\012', '\106', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\151', '\131', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\120', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\121', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\125', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\114', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\122', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\153', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\131', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\167', '\131', '\040', '\151', '\163', '\040', '\061', + '\012', '\162', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\110', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\127', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\157', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\146', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\104', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\142', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\126', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\101', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\160', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\160', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\157', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\122', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\131', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\125', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\104', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\104', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\107', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\146', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\122', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\146', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\132', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\154', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\127', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\111', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\113', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\122', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\163', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\142', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\103', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\162', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\166', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\146', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\161', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\155', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\127', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\111', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\155', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\171', '\116', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\132', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\125', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\103', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\153', '\162', '\040', '\162', '\151', '\040', '\061', + '\012', '\146', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\122', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\103', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\142', '\103', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\115', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\120', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\171', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\145', '\130', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\126', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\103', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\143', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\146', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\142', '\132', '\040', '\151', '\156', '\040', '\061', + '\012', '\116', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\130', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\126', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\170', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\170', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\115', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\160', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\132', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\130', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\166', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\126', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\103', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\146', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\121', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\146', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\121', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\126', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\107', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\115', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\170', '\166', '\167', '\040', '\167', '\151', '\040', '\061', + '\012', '\172', '\111', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\146', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\127', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\155', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\132', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\147', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\141', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\123', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\124', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\123', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\104', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\167', '\166', '\040', '\167', '\151', '\040', '\061', + '\012', '\162', '\160', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\120', '\163', '\040', '\151', '\163', '\040', '\061', + '\012', '\113', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\104', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\162', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\142', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\121', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\131', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\170', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\163', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\130', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\167', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\163', '\122', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\146', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\111', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\144', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\103', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\172', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\121', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\152', '\130', '\040', '\157', '\156', '\040', '\061', + '\012', '\126', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\127', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\112', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\122', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\130', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\145', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\131', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\170', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\132', '\162', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\146', '\126', '\040', '\165', '\163', '\040', '\061', + '\012', '\162', '\130', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\132', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\124', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\154', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\161', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\127', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\146', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\170', '\115', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\152', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\115', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\153', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\131', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\166', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\167', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\167', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\130', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\117', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\105', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\110', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\110', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\170', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\111', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\155', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\123', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\146', '\130', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\106', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\156', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\153', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\152', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\127', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\115', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\115', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\142', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\112', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\104', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\152', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\151', '\107', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\154', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\106', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\155', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\104', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\162', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\114', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\142', '\115', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\163', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\161', '\154', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\112', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\107', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\157', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\163', '\111', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\131', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\105', '\157', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\143', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\167', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\153', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\110', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\145', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\165', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\167', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\131', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\166', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\102', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\163', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\113', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\123', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\142', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\141', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\142', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\110', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\131', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\160', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\152', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\107', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\121', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\154', '\112', '\040', '\154', '\151', '\040', '\061', + '\012', '\143', '\161', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\121', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\145', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\142', '\124', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\121', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\104', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\146', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\123', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\112', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\170', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\113', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\142', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\116', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\145', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\130', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\113', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\103', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\113', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\161', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\172', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\152', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\147', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\157', '\111', '\040', '\157', '\156', '\040', '\061', + '\012', '\131', '\171', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\146', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\162', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\121', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\142', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\155', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\142', '\106', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\127', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\170', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\116', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\146', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\157', '\130', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\114', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\152', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\147', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\113', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\151', '\132', '\040', '\151', '\156', '\040', '\061', + '\012', '\162', '\130', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\132', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\126', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\123', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\172', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\161', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\121', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\167', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\116', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\105', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\163', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\114', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\124', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\162', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\111', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\111', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\114', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\161', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\127', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\131', '\143', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\130', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\161', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\170', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\154', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\151', '\104', '\170', '\040', '\154', '\151', '\040', '\061', + '\012', '\132', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\142', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\122', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\123', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\145', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\113', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\127', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\160', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\105', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\163', '\113', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\115', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\146', '\132', '\040', '\153', '\165', '\040', '\061', + '\012', '\127', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\155', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\102', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\103', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\167', '\116', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\146', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\110', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\167', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\152', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\155', '\126', '\040', '\144', '\151', '\040', '\061', + '\012', '\143', '\103', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\130', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\155', '\122', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\170', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\162', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\170', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\154', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\103', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\146', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\107', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\142', '\105', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\127', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\170', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\157', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\122', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\147', '\151', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\104', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\127', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\127', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\122', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\164', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\167', '\127', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\162', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\146', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\146', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\113', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\127', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\165', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\153', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\131', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\101', '\157', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\122', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\127', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\107', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\143', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\103', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\155', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\121', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\127', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\124', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\141', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\167', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\160', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\154', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\114', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\163', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\106', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\155', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\154', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\170', '\101', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\106', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\146', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\160', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\104', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\124', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\127', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\123', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\160', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\124', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\102', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\156', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\161', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\154', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\122', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\126', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\165', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\162', '\102', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\120', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\106', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\120', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\112', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\162', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\102', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\124', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\167', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\127', '\147', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\117', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\142', '\102', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\166', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\142', '\106', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\127', '\165', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\152', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\142', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\145', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\130', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\110', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\146', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\167', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\110', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\107', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\167', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\115', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\112', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\107', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\142', '\113', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\124', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\127', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\172', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\167', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\110', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\161', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\124', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\120', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\144', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\141', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\167', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\122', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\114', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\171', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\161', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\160', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\153', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\146', '\102', '\040', '\142', '\145', '\040', '\061', + '\012', '\127', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\130', '\145', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\130', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\170', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\170', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\142', '\142', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\120', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\103', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\151', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\107', '\160', '\040', '\160', '\157', '\040', '\061', + '\012', '\150', '\120', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\103', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\172', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\110', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\167', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\103', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\121', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\142', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\130', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\153', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\171', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\107', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\172', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\166', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\130', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\130', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\171', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\155', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\142', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\171', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\155', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\116', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\161', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\131', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\160', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\171', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\101', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\102', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\160', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\130', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\115', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\114', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\106', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\166', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\170', '\113', '\040', '\142', '\145', '\040', '\061', + '\012', '\102', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\160', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\112', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\113', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\110', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\112', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\132', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\156', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\170', '\131', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\125', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\160', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\111', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\132', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\160', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\155', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\146', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\127', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\142', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\104', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\144', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\167', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\172', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\105', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\170', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\153', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\130', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\103', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\147', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\125', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\123', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\153', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\112', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\162', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\126', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\171', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\112', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\170', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\146', '\131', '\040', '\146', '\157', '\040', '\061', + '\012', '\130', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\147', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\171', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\142', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\124', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\163', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\154', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\160', '\121', '\040', '\160', '\157', '\040', '\061', + '\012', '\161', '\112', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\150', '\131', '\151', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\154', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\166', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\116', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\113', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\113', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\110', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\125', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\170', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\111', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\124', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\146', '\120', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\170', '\111', '\040', '\146', '\157', '\040', '\061', + '\012', '\166', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\167', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\141', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\170', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\160', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\160', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\116', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\114', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\113', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\125', '\171', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\146', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\163', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\130', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\155', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\121', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\117', '\141', '\171', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\125', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\103', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\111', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\121', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\112', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\102', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\126', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\106', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\165', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\167', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\144', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\161', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\127', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\163', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\114', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\144', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\147', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\131', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\132', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\146', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\166', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\126', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\115', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\121', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\125', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\107', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\166', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\162', '\101', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\115', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\171', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\114', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\105', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\130', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\110', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\120', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\111', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\103', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\104', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\107', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\162', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\104', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\121', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\144', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\121', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\121', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\167', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\144', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\156', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\151', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\113', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\153', '\105', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\132', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\142', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\142', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\160', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\141', '\112', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\146', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\103', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\170', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\107', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\152', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\146', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\160', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\124', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\132', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\105', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\131', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\122', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\123', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\112', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\103', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\166', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\167', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\155', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\124', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\153', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\111', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\163', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\123', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\155', '\111', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\127', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\113', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\157', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\147', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\167', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\153', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\167', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\121', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\125', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\113', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\121', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\126', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\167', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\154', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\115', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\142', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\132', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\124', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\167', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\162', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\167', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\167', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\107', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\132', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\106', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\166', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\111', '\171', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\104', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\131', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\162', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\105', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\107', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\107', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\104', '\155', '\040', '\160', '\157', '\040', '\061', + '\012', '\161', '\155', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\126', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\105', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\110', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\141', '\161', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\120', '\166', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\104', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\144', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\124', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\132', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\146', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\153', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\123', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\104', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\112', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\114', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\106', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\166', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\131', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\116', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\112', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\146', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\155', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\107', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\111', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\111', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\102', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\171', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\167', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\120', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\124', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\160', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\132', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\142', '\101', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\124', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\170', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\106', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\116', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\115', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\117', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\170', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\163', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\157', '\152', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\105', '\157', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\167', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\152', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\124', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\146', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\143', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\167', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\151', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\121', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\106', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\166', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\131', '\145', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\167', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\110', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\170', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\111', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\146', '\105', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\122', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\170', '\116', '\040', '\142', '\145', '\040', '\061', + '\012', '\153', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\103', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\170', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\103', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\114', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\170', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\120', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\131', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\124', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\126', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\167', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\124', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\105', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\160', '\120', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\152', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\171', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\117', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\147', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\115', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\167', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\111', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\146', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\163', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\125', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\171', '\110', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\167', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\103', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\144', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\124', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\171', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\171', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\127', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\115', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\110', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\126', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\172', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\115', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\155', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\160', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\102', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\160', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\130', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\121', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\164', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\142', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\160', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\155', '\130', '\163', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\153', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\155', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\167', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\142', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\160', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\122', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\171', '\104', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\120', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\142', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\170', '\121', '\040', '\170', '\145', '\040', '\061', + '\012', '\104', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\153', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\155', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\162', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\167', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\167', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\121', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\155', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\172', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\131', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\170', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\125', '\170', '\040', '\170', '\145', '\040', '\061', + '\012', '\167', '\155', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\131', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\126', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\131', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\116', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\164', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\114', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\153', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\127', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\147', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\120', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\161', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\157', '\125', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\167', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\155', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\167', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\113', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\154', '\122', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\110', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\112', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\155', '\111', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\103', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\131', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\146', '\131', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\142', '\131', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\155', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\110', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\152', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\131', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\160', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\170', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\144', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\152', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\106', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\123', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\104', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\162', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\131', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\144', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\153', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\110', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\126', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\153', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\106', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\127', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\160', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\116', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\116', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\113', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\132', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\152', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\152', '\131', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\164', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\110', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\147', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\117', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\130', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\113', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\123', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\111', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\113', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\146', '\103', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\113', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\123', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\121', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\151', '\107', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\120', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\153', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\110', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\130', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\155', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\126', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\170', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\121', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\166', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\110', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\170', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\112', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\115', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\103', '\171', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\160', '\130', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\130', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\111', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\152', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\170', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\104', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\130', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\152', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\172', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\147', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\156', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\126', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\142', '\111', '\040', '\142', '\145', '\040', '\061', + '\012', '\132', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\146', '\117', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\123', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\141', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\130', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\123', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\144', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\124', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\113', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\164', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\157', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\113', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\121', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\114', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\107', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\155', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\144', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\116', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\130', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\104', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\115', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\112', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\144', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\103', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\130', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\161', '\124', '\040', '\165', '\156', '\040', '\061', + '\012', '\102', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\102', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\130', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\142', '\106', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\164', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\126', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\120', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\157', '\110', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\130', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\124', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\167', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\132', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\125', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\103', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\115', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\142', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\107', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\167', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\172', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\172', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\170', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\126', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\155', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\156', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\152', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\104', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\146', '\121', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\170', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\170', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\121', '\156', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\167', '\104', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\106', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\142', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\110', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\126', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\117', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\127', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\167', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\156', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\121', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\122', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\113', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\152', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\160', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\153', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\142', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\153', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\161', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\120', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\107', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\111', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\125', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\161', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\146', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\146', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\106', '\143', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\130', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\161', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\102', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\124', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\144', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\152', '\112', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\132', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\172', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\146', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\125', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\170', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\154', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\104', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\166', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\162', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\171', '\131', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\120', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\167', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\171', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\124', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\102', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\113', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\126', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\101', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\170', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\166', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\150', '\155', '\040', '\155', '\141', '\040', '\061', + '\012', '\132', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\166', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\144', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\131', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\130', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\126', '\170', '\040', '\166', '\151', '\040', '\061', + '\012', '\122', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\104', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\171', '\166', '\040', '\166', '\151', '\040', '\061', + '\012', '\103', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\122', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\121', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\142', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\154', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\167', '\123', '\040', '\160', '\162', '\040', '\061', + '\012', '\113', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\166', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\167', '\107', '\040', '\151', '\156', '\040', '\061', + '\012', '\162', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\102', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\131', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\105', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\163', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\166', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\153', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\151', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\107', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\101', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\126', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\170', '\124', '\040', '\142', '\145', '\040', '\061', + '\012', '\121', '\150', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\154', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\142', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\145', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\113', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\124', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\167', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\106', '\161', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\114', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\163', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\104', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\170', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\112', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\103', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\104', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\121', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\110', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\115', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\117', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\146', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\115', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\131', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\153', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\131', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\161', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\107', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\113', '\147', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\111', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\104', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\146', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\146', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\124', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\125', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\171', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\124', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\170', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\131', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\115', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\115', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\110', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\146', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\147', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\167', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\150', '\143', '\040', '\151', '\143', '\040', '\061', + '\012', '\170', '\111', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\106', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\147', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\111', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\170', '\116', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\101', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\103', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\126', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\157', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\130', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\121', '\164', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\127', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\130', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\127', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\145', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\112', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\155', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\154', '\122', '\040', '\151', '\163', '\040', '\061', + '\012', '\125', '\141', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\142', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\126', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\167', '\125', '\040', '\151', '\156', '\040', '\061', + '\012', '\103', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\130', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\107', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\142', '\131', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\172', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\127', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\145', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\170', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\121', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\166', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\124', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\167', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\146', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\145', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\102', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\123', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\171', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\152', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\164', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\164', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\167', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\127', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\170', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\110', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\102', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\166', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\155', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\121', '\167', '\040', '\167', '\151', '\040', '\061', + '\012', '\170', '\141', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\146', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\107', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\166', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\167', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\155', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\112', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\110', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\121', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\102', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\160', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\144', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\101', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\167', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\104', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\132', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\102', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\121', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\157', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\131', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\163', '\104', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\122', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\104', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\146', '\170', '\101', '\040', '\146', '\157', '\040', '\061', + '\012', '\170', '\120', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\112', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\160', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\170', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\114', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\123', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\125', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\127', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\131', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\152', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\167', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\120', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\101', '\157', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\166', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\117', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\155', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\153', '\111', '\040', '\153', '\165', '\040', '\061', + '\012', '\160', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\104', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\122', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\165', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\105', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\146', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\165', '\112', '\040', '\165', '\156', '\040', '\061', + '\012', '\156', '\122', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\170', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\146', '\132', '\040', '\156', '\171', '\040', '\061', + '\012', '\157', '\161', '\124', '\040', '\150', '\157', '\040', '\061', + '\012', '\143', '\147', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\142', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\130', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\146', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\167', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\103', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\172', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\147', '\152', '\040', '\152', '\157', '\040', '\061', + '\012', '\107', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\107', '\040', '\146', '\157', '\040', '\061', + '\012', '\155', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\144', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\110', '\153', '\040', '\151', '\156', '\040', '\061', + '\012', '\107', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\104', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\106', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\142', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\166', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\144', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\155', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\130', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\117', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\172', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\160', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\132', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\106', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\156', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\130', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\142', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\120', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\132', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\160', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\153', '\117', '\040', '\153', '\157', '\040', '\061', + '\012', '\147', '\163', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\167', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\165', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\127', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\170', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\124', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\126', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\152', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\166', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\110', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\101', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\146', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\115', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\167', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\142', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\152', '\132', '\040', '\157', '\156', '\040', '\061', + '\012', '\163', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\170', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\171', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\105', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\117', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\124', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\127', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\110', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\167', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\103', '\142', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\167', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\111', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\107', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\152', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\171', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\170', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\166', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\154', '\162', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\103', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\105', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\114', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\166', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\142', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\131', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\146', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\146', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\102', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\171', '\112', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\155', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\130', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\131', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\170', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\116', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\172', '\125', '\040', '\146', '\157', '\040', '\061', + '\012', '\122', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\115', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\167', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\116', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\155', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\125', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\123', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\153', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\102', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\112', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\124', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\130', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\167', '\102', '\040', '\157', '\167', '\040', '\061', + '\012', '\153', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\146', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\132', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\155', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\114', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\113', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\161', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\113', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\146', '\122', '\040', '\142', '\145', '\040', '\061', + '\012', '\122', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\116', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\144', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\160', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\127', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\101', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\162', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\155', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\114', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\167', '\102', '\040', '\151', '\156', '\040', '\061', + '\012', '\145', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\157', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\142', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\160', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\172', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\127', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\152', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\167', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\127', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\162', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\171', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\123', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\153', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\167', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\107', '\142', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\102', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\127', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\155', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\107', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\112', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\152', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\116', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\104', '\144', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\162', '\102', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\113', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\161', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\102', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\165', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\104', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\147', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\144', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\171', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\117', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\121', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\110', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\121', '\153', '\040', '\153', '\157', '\040', '\061', + '\012', '\107', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\132', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\166', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\167', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\115', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\152', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\102', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\102', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\143', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\121', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\155', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\146', '\110', '\040', '\146', '\157', '\040', '\061', + '\012', '\160', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\127', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\132', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\116', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\142', '\116', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\126', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\112', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\147', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\170', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\166', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\155', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\116', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\113', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\122', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\154', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\121', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\155', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\142', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\126', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\146', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\126', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\113', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\124', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\166', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\107', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\166', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\160', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\172', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\170', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\115', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\152', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\146', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\152', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\125', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\127', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\107', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\167', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\171', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\155', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\130', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\155', '\167', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\111', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\107', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\131', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\126', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\156', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\155', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\121', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\113', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\125', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\123', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\126', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\146', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\116', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\124', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\102', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\167', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\121', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\104', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\124', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\127', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\152', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\103', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\171', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\127', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\156', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\102', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\111', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\132', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\116', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\106', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\127', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\142', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\163', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\146', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\126', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\124', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\147', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\165', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\146', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\102', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\142', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\146', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\132', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\103', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\155', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\161', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\147', '\165', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\110', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\145', '\121', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\154', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\107', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\111', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\170', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\121', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\117', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\142', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\112', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\155', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\143', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\167', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\132', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\162', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\130', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\167', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\111', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\165', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\104', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\121', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\166', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\110', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\170', '\111', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\117', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\160', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\155', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\127', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\107', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\123', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\132', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\113', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\122', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\167', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\160', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\155', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\110', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\146', '\113', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\147', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\124', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\153', '\172', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\164', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\130', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\172', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\154', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\146', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\122', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\163', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\103', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\106', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\151', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\123', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\104', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\161', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\110', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\144', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\156', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\146', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\171', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\112', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\103', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\113', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\167', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\110', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\142', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\125', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\171', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\160', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\152', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\167', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\126', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\163', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\156', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\160', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\104', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\120', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\151', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\153', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\165', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\157', '\110', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\167', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\102', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\157', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\170', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\167', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\112', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\115', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\170', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\172', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\160', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\124', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\163', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\167', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\130', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\146', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\123', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\113', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\127', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\162', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\155', '\107', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\143', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\123', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\145', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\107', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\154', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\155', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\154', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\167', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\152', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\102', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\102', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\130', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\107', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\130', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\157', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\151', '\126', '\164', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\166', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\103', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\121', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\103', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\166', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\126', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\120', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\146', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\142', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\123', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\122', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\143', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\170', '\112', '\040', '\156', '\171', '\040', '\061', + '\012', '\154', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\131', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\127', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\107', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\172', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\147', '\126', '\040', '\147', '\151', '\040', '\061', + '\012', '\122', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\106', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\121', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\116', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\146', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\102', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\147', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\123', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\103', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\155', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\166', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\141', '\104', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\107', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\152', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\124', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\115', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\160', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\142', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\132', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\121', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\153', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\171', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\155', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\146', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\160', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\113', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\154', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\132', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\122', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\160', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\167', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\107', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\122', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\153', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\125', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\152', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\113', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\160', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\125', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\152', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\122', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\150', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\164', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\152', '\161', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\167', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\171', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\122', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\106', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\105', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\120', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\146', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\115', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\113', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\110', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\106', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\160', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\116', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\104', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\160', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\156', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\146', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\172', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\116', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\102', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\143', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\115', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\112', '\152', '\040', '\162', '\151', '\040', '\061', + '\012', '\141', '\130', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\163', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\121', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\113', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\166', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\107', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\103', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\122', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\151', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\106', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\105', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\172', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\104', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\170', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\107', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\166', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\160', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\170', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\132', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\157', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\115', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\107', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\116', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\143', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\111', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\114', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\122', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\162', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\171', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\143', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\105', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\123', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\162', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\126', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\166', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\144', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\155', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\114', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\160', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\167', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\144', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\132', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\167', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\142', '\115', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\147', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\113', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\112', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\160', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\161', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\125', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\124', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\115', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\126', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\110', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\126', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\154', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\162', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\114', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\166', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\145', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\116', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\172', '\142', '\040', '\142', '\151', '\040', '\061', + '\012', '\127', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\156', '\143', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\126', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\123', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\161', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\104', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\171', '\111', '\040', '\151', '\156', '\040', '\061', + '\012', '\145', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\161', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\124', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\155', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\106', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\156', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\127', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\172', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\121', '\145', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\154', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\107', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\147', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\115', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\123', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\147', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\114', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\166', '\132', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\146', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\103', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\132', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\111', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\132', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\170', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\144', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\131', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\171', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\107', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\106', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\166', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\167', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\166', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\122', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\172', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\160', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\120', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\171', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\155', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\154', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\105', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\114', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\101', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\172', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\117', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\144', '\163', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\166', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\120', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\132', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\146', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\146', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\154', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\126', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\155', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\144', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\155', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\121', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\150', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\104', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\144', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\166', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\171', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\112', '\146', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\141', '\102', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\127', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\107', '\142', '\040', '\142', '\151', '\040', '\061', + '\012', '\147', '\152', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\152', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\166', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\124', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\127', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\127', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\113', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\115', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\153', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\167', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\167', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\167', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\114', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\115', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\160', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\166', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\152', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\126', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\126', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\172', '\156', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\171', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\113', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\105', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\160', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\104', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\165', '\113', '\040', '\165', '\156', '\040', '\061', + '\012', '\166', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\127', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\114', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\160', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\114', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\160', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\104', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\167', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\102', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\107', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\146', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\154', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\125', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\146', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\121', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\107', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\102', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\104', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\115', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\146', '\115', '\040', '\156', '\171', '\040', '\061', + '\012', '\107', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\116', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\162', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\146', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\124', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\166', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\120', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\115', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\170', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\132', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\106', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\163', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\122', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\163', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\102', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\127', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\153', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\161', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\153', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\144', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\170', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\130', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\152', '\113', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\106', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\110', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\120', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\144', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\164', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\171', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\156', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\112', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\127', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\164', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\172', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\170', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\155', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\160', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\152', '\170', '\040', '\172', '\152', '\040', '\061', + '\012', '\164', '\166', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\104', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\171', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\116', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\166', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\120', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\167', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\160', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\104', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\105', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\143', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\104', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\127', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\164', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\151', '\121', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\106', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\146', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\123', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\155', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\106', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\120', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\161', '\121', '\040', '\164', '\151', '\040', '\061', + '\012', '\155', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\170', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\166', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\154', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\106', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\146', '\132', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\103', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\143', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\104', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\130', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\115', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\103', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\132', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\121', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\106', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\167', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\157', '\111', '\040', '\157', '\156', '\040', '\061', + '\012', '\163', '\112', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\164', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\126', '\146', '\040', '\147', '\151', '\040', '\061', + '\012', '\160', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\107', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\172', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\130', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\115', '\154', '\040', '\154', '\151', '\040', '\061', + '\012', '\142', '\131', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\113', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\154', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\120', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\164', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\154', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\121', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\144', '\143', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\125', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\112', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\115', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\167', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\164', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\172', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\172', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\102', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\163', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\125', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\163', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\163', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\130', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\154', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\126', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\146', '\101', '\040', '\153', '\141', '\040', '\061', + '\012', '\126', '\155', '\153', '\040', '\155', '\107', '\040', '\061', + '\012', '\152', '\113', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\120', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\120', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\131', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\170', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\153', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\143', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\132', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\142', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\121', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\153', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\153', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\114', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\116', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\142', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\145', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\132', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\166', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\103', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\172', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\154', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\106', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\115', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\146', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\110', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\170', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\112', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\172', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\127', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\162', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\170', '\132', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\130', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\151', '\107', '\153', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\105', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\121', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\112', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\156', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\167', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\145', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\144', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\127', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\154', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\102', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\146', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\164', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\115', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\117', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\104', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\155', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\163', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\163', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\130', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\145', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\106', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\130', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\101', '\157', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\153', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\142', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\157', '\103', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\131', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\116', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\156', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\167', '\112', '\040', '\143', '\155', '\040', '\061', + '\012', '\161', '\112', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\116', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\167', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\143', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\102', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\114', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\162', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\102', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\172', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\152', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\170', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\146', '\115', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\121', '\155', '\040', '\121', '\117', '\040', '\061', + '\012', '\172', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\142', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\125', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\131', '\151', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\116', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\102', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\132', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\107', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\103', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\167', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\142', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\105', '\161', '\164', '\040', '\145', '\161', '\040', '\061', + '\012', '\130', '\150', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\125', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\170', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\117', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\103', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\147', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\163', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\107', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\153', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\122', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\167', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\112', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\126', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\131', '\154', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\154', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\104', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\113', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\120', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\146', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\146', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\113', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\111', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\165', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\113', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\132', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\160', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\146', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\152', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\130', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\167', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\131', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\161', '\131', '\040', '\145', '\161', '\040', '\061', + '\012', '\165', '\111', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\107', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\167', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\110', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\146', '\127', '\040', '\150', '\127', '\040', '\061', + '\012', '\151', '\171', '\107', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\145', '\106', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\152', '\151', '\040', '\152', '\123', '\040', '\061', + '\012', '\155', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\110', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\170', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\127', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\123', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\172', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\160', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\166', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\131', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\161', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\107', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\122', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\124', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\132', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\117', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\152', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\120', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\167', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\167', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\160', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\124', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\117', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\160', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\131', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\152', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\172', '\156', '\040', '\114', '\107', '\040', '\061', + '\012', '\131', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\131', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\130', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\111', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\112', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\170', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\104', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\163', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\152', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\125', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\154', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\102', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\142', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\154', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\103', '\160', '\040', '\107', '\103', '\040', '\061', + '\012', '\156', '\126', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\142', '\107', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\144', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\125', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\132', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\122', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\167', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\167', '\123', '\040', '\163', '\164', '\040', '\061', + '\012', '\105', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\105', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\153', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\152', '\127', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\130', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\166', '\131', '\040', '\166', '\113', '\040', '\061', + '\012', '\154', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\170', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\126', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\113', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\167', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\160', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\147', '\145', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\104', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\160', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\155', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\125', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\127', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\162', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\132', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\121', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\107', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\167', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\160', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\115', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\160', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\104', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\113', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\143', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\170', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\120', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\155', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\155', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\170', '\103', '\040', '\107', '\103', '\040', '\061', + '\012', '\154', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\153', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\154', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\120', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\166', '\121', '\040', '\121', '\117', '\040', '\061', + '\012', '\152', '\107', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\115', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\117', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\144', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\166', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\142', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\146', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\160', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\170', '\106', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\132', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\107', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\120', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\107', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\142', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\152', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\123', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\111', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\111', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\160', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\125', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\125', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\167', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\110', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\152', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\120', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\162', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\131', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\117', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\126', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\106', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\166', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\142', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\120', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\121', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\105', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\163', '\102', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\155', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\164', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\167', '\111', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\160', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\130', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\131', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\106', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\102', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\103', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\162', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\113', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\116', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\122', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\141', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\141', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\170', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\125', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\117', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\132', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\105', '\161', '\040', '\166', '\113', '\040', '\061', + '\012', '\130', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\120', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\143', '\132', '\040', '\143', '\155', '\040', '\061', + '\012', '\154', '\104', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\167', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\162', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\113', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\115', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\144', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\146', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\144', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\120', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\172', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\106', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\122', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\110', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\145', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\153', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\132', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\124', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\110', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\154', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\113', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\142', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\142', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\165', '\106', '\040', '\165', '\156', '\040', '\061', + '\012', '\161', '\172', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\141', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\141', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\153', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\157', '\103', '\161', '\040', '\107', '\103', '\040', '\061', + '\012', '\161', '\121', '\150', '\040', '\121', '\117', '\040', '\061', + '\012', '\143', '\167', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\115', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\113', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\113', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\161', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\107', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\130', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\115', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\132', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\171', '\105', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\125', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\126', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\115', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\127', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\132', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\157', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\122', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\120', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\131', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\145', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\152', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\161', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\166', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\110', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\132', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\162', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\104', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\145', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\172', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\172', '\143', '\040', '\143', '\155', '\040', '\061', + '\012', '\170', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\167', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\170', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\126', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\147', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\152', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\132', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\110', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\154', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\160', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\121', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\122', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\160', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\126', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\121', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\121', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\162', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\161', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\112', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\170', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\146', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\126', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\102', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\130', '\154', '\040', '\130', '\155', '\040', '\061', + '\012', '\150', '\167', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\162', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\154', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\117', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\103', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\106', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\127', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\123', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\102', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\166', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\146', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\113', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\153', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\111', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\146', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\142', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\104', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\110', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\126', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\162', '\113', '\040', '\110', '\113', '\040', '\061', + '\012', '\127', '\170', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\142', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\152', '\143', '\040', '\152', '\123', '\040', '\061', + '\012', '\152', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\166', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\171', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\146', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\142', '\114', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\166', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\114', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\120', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\170', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\146', '\125', '\040', '\146', '\157', '\040', '\061', + '\012', '\151', '\116', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\120', '\142', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\151', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\122', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\142', '\102', '\040', '\142', '\145', '\040', '\061', + '\012', '\163', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\170', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\115', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\170', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\142', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\141', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\155', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\151', '\117', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\117', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\146', '\123', '\040', '\142', '\145', '\040', '\061', + '\012', '\121', '\150', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\131', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\145', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\164', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\123', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\146', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\123', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\123', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\103', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\167', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\107', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\102', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\163', '\127', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\132', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\167', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\115', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\163', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\127', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\170', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\126', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\162', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\142', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\124', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\162', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\112', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\132', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\125', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\106', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\142', '\116', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\115', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\123', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\113', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\170', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\152', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\162', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\166', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\170', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\166', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\106', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\163', '\146', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\111', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\170', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\110', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\130', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\127', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\145', '\113', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\142', '\126', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\130', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\167', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\166', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\142', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\125', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\155', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\170', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\152', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\155', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\161', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\112', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\122', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\126', '\143', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\155', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\121', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\146', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\142', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\106', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\127', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\156', '\110', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\170', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\155', '\110', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\172', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\155', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\166', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\121', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\110', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\110', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\115', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\167', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\146', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\106', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\130', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\126', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\110', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\107', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\167', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\172', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\164', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\167', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\162', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\155', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\155', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\151', '\131', '\040', '\151', '\156', '\040', '\061', + '\012', '\160', '\124', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\160', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\150', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\117', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\146', '\106', '\040', '\146', '\157', '\040', '\061', + '\012', '\143', '\124', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\160', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\147', '\167', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\103', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\124', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\155', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\170', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\101', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\110', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\146', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\157', '\111', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\104', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\151', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\170', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\155', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\155', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\126', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\146', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\171', '\121', '\040', '\156', '\171', '\040', '\061', + '\012', '\155', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\121', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\106', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\167', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\127', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\112', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\157', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\171', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\152', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\142', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\131', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\120', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\103', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\126', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\170', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\132', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\142', '\111', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\101', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\167', '\146', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\146', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\165', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\161', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\154', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\162', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\170', '\127', '\040', '\146', '\157', '\040', '\061', + '\012', '\123', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\166', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\116', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\130', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\104', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\113', '\172', '\040', '\165', '\163', '\040', '\061', + '\012', '\161', '\152', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\153', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\106', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\115', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\121', '\145', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\131', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\142', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\126', '\153', '\040', '\156', '\144', '\040', '\061', + '\012', '\142', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\161', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\123', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\172', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\130', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\112', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\127', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\142', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\167', '\120', '\040', '\151', '\156', '\040', '\061', + '\012', '\154', '\127', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\110', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\143', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\144', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\115', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\171', '\131', '\040', '\156', '\171', '\040', '\061', + '\012', '\141', '\106', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\171', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\142', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\152', '\101', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\155', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\157', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\170', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\122', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\116', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\151', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\131', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\170', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\152', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\103', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\102', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\131', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\110', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\166', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\121', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\142', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\170', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\170', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\155', '\106', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\102', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\110', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\126', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\146', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\166', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\115', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\156', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\121', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\157', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\153', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\110', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\167', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\160', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\125', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\170', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\126', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\112', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\102', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\155', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\113', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\103', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\125', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\115', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\107', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\110', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\132', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\166', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\154', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\155', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\106', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\166', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\161', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\166', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\143', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\153', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\105', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\167', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\147', '\130', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\123', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\167', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\172', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\162', '\123', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\110', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\142', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\146', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\167', '\102', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\155', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\172', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\126', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\167', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\111', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\160', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\167', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\153', '\101', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\125', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\113', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\170', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\141', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\146', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\132', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\130', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\104', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\146', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\141', '\121', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\152', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\160', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\115', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\113', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\167', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\160', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\170', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\115', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\167', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\102', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\101', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\123', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\142', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\157', '\124', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\111', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\172', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\172', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\121', '\040', '\153', '\165', '\040', '\061', + '\012', '\154', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\167', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\122', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\117', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\165', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\132', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\142', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\104', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\167', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\117', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\167', '\111', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\152', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\117', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\146', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\161', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\104', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\155', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\165', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\146', '\116', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\146', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\142', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\170', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\130', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\125', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\166', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\112', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\126', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\142', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\146', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\107', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\117', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\152', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\120', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\160', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\163', '\102', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\170', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\106', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\157', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\155', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\142', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\106', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\171', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\152', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\131', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\165', '\112', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\145', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\162', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\156', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\155', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\166', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\172', '\117', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\121', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\120', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\127', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\103', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\145', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\132', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\103', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\166', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\122', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\172', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\154', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\127', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\113', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\143', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\103', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\101', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\125', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\115', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\125', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\132', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\167', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\164', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\122', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\102', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\147', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\127', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\167', '\120', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\111', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\167', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\114', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\151', '\130', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\163', '\114', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\105', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\107', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\125', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\155', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\153', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\167', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\155', '\123', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\171', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\142', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\127', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\167', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\104', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\123', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\121', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\162', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\107', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\162', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\154', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\142', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\116', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\121', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\126', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\160', '\120', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\154', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\153', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\106', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\121', '\157', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\154', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\154', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\155', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\127', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\155', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\114', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\154', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\161', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\147', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\107', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\167', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\155', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\142', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\153', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\117', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\146', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\146', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\116', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\104', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\142', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\153', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\101', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\106', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\167', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\125', '\157', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\104', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\107', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\122', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\142', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\146', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\104', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\106', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\163', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\152', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\126', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\166', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\116', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\122', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\107', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\132', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\132', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\115', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\120', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\172', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\172', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\103', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\167', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\153', '\115', '\040', '\153', '\157', '\040', '\061', + '\012', '\166', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\120', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\112', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\155', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\115', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\116', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\162', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\163', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\144', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\127', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\167', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\152', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\113', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\160', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\164', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\171', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\113', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\126', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\120', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\106', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\170', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\131', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\167', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\121', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\142', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\131', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\170', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\160', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\142', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\121', '\171', '\040', '\164', '\157', '\040', '\061', + '\012', '\166', '\170', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\160', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\120', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\110', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\146', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\103', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\147', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\106', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\104', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\111', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\164', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\122', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\103', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\152', '\124', '\040', '\162', '\157', '\040', '\061', + '\012', '\162', '\152', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\101', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\114', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\152', '\123', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\126', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\105', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\107', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\117', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\120', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\163', '\113', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\114', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\103', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\116', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\124', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\106', '\166', '\040', '\162', '\157', '\040', '\061', + '\012', '\122', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\161', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\155', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\165', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\147', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\144', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\101', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\167', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\145', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\141', '\106', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\146', '\102', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\160', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\107', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\127', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\172', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\163', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\121', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\146', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\142', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\113', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\130', '\141', '\040', '\141', '\162', '\040', '\061', + '\012', '\167', '\152', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\127', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\152', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\122', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\147', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\172', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\145', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\152', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\155', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\107', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\113', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\127', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\113', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\157', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\171', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\112', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\107', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\123', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\106', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\144', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\124', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\152', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\110', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\122', '\156', '\040', '\141', '\162', '\040', '\061', + '\012', '\130', '\154', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\116', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\106', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\116', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\120', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\172', '\112', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\123', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\127', '\147', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\114', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\111', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\157', '\113', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\114', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\110', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\170', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\127', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\107', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\152', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\146', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\132', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\157', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\170', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\131', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\132', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\130', '\154', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\121', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\142', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\105', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\116', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\162', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\170', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\121', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\160', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\116', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\142', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\147', '\115', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\145', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\126', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\126', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\115', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\124', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\120', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\103', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\166', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\115', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\152', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\155', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\154', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\163', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\167', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\120', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\122', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\106', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\170', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\110', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\113', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\160', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\131', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\170', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\157', '\153', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\160', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\104', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\147', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\113', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\104', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\167', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\104', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\147', '\146', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\125', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\153', '\106', '\040', '\153', '\157', '\040', '\061', + '\012', '\120', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\142', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\123', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\146', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\167', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\114', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\112', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\122', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\130', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\114', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\115', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\166', '\107', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\164', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\170', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\147', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\143', '\117', '\040', '\152', '\141', '\040', '\061', + '\012', '\163', '\103', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\102', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\132', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\117', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\112', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\152', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\103', '\167', '\040', '\155', '\141', '\040', '\061', + '\012', '\150', '\170', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\124', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\144', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\115', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\166', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\151', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\167', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\164', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\111', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\131', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\146', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\121', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\130', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\105', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\120', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\142', '\127', '\040', '\142', '\145', '\040', '\061', + '\012', '\153', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\110', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\130', '\157', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\170', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\127', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\132', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\117', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\124', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\162', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\116', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\105', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\112', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\110', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\160', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\104', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\170', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\154', '\126', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\113', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\166', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\170', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\126', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\121', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\130', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\150', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\153', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\150', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\104', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\114', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\154', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\124', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\144', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\110', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\104', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\120', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\110', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\160', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\120', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\116', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\171', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\123', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\121', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\146', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\155', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\107', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\106', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\113', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\121', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\157', '\116', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\165', '\130', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\146', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\111', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\153', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\116', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\165', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\120', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\113', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\114', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\120', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\160', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\152', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\170', '\102', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\143', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\126', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\155', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\152', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\172', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\164', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\113', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\130', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\122', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\147', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\160', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\127', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\167', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\170', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\172', '\115', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\142', '\112', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\160', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\145', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\146', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\170', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\102', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\164', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\102', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\127', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\123', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\124', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\162', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\112', '\142', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\130', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\156', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\163', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\126', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\111', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\126', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\122', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\150', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\124', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\160', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\130', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\131', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\106', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\167', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\111', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\167', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\106', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\127', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\105', '\141', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\153', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\156', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\146', '\105', '\040', '\153', '\141', '\040', '\061', + '\012', '\111', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\162', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\120', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\120', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\121', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\103', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\132', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\127', '\154', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\125', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\142', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\142', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\170', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\153', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\142', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\152', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\130', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\116', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\112', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\104', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\125', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\127', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\120', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\116', '\142', '\040', '\153', '\157', '\040', '\061', + '\012', '\127', '\144', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\112', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\155', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\124', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\155', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\121', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\120', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\170', '\172', '\040', '\172', '\145', '\040', '\061', + '\012', '\104', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\115', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\115', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\112', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\146', '\116', '\040', '\146', '\157', '\040', '\061', + '\012', '\144', '\121', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\165', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\120', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\146', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\167', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\141', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\155', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\146', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\152', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\162', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\170', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\170', '\110', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\122', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\152', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\123', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\155', '\110', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\146', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\112', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\167', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\122', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\161', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\172', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\154', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\142', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\160', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\124', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\120', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\171', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\102', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\111', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\104', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\112', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\101', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\106', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\104', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\144', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\167', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\131', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\155', '\107', '\040', '\155', '\145', '\040', '\061', + '\012', '\113', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\164', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\112', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\167', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\126', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\115', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\170', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\112', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\156', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\146', '\123', '\040', '\156', '\171', '\040', '\061', + '\012', '\115', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\163', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\112', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\167', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\170', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\112', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\107', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\123', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\112', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\105', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\161', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\112', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\127', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\166', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\152', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\153', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\166', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\171', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\116', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\114', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\126', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\117', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\170', '\114', '\040', '\146', '\157', '\040', '\061', + '\012', '\163', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\124', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\126', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\132', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\126', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\123', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\116', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\146', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\143', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\124', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\141', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\152', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\115', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\164', '\102', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\146', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\170', '\117', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\132', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\103', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\160', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\153', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\113', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\160', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\116', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\160', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\130', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\146', '\113', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\160', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\165', '\167', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\156', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\166', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\107', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\132', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\142', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\166', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\154', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\167', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\146', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\103', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\127', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\166', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\167', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\107', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\166', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\122', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\121', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\153', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\155', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\104', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\125', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\130', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\130', '\171', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\142', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\131', '\144', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\157', '\130', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\147', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\121', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\126', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\171', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\102', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\170', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\120', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\127', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\142', '\120', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\101', '\157', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\146', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\163', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\115', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\122', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\152', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\117', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\167', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\114', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\120', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\103', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\104', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\106', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\160', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\155', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\103', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\106', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\160', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\146', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\132', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\122', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\104', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\120', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\166', '\120', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\153', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\116', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\113', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\121', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\170', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\107', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\152', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\151', '\106', '\040', '\164', '\151', '\040', '\061', + '\012', '\132', '\172', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\131', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\152', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\167', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\153', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\171', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\151', '\171', '\102', '\040', '\151', '\156', '\040', '\061', + '\012', '\150', '\121', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\160', '\121', '\040', '\151', '\156', '\040', '\061', + '\012', '\125', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\153', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\160', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\167', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\121', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\167', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\104', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\144', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\105', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\141', '\166', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\172', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\110', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\106', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\116', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\102', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\122', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\154', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\172', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\131', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\155', '\122', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\130', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\171', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\130', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\112', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\172', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\152', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\161', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\167', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\152', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\146', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\122', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\144', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\101', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\153', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\116', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\116', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\155', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\107', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\163', '\110', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\167', '\106', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\120', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\104', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\121', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\111', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\103', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\106', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\112', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\151', '\111', '\040', '\151', '\156', '\040', '\061', + '\012', '\122', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\116', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\120', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\113', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\104', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\106', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\126', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\123', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\167', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\157', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\102', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\107', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\132', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\142', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\132', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\172', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\104', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\146', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\161', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\123', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\170', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\130', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\142', '\124', '\040', '\142', '\145', '\040', '\061', + '\012', '\163', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\113', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\124', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\125', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\104', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\125', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\171', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\103', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\130', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\107', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\120', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\146', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\126', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\104', '\172', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\146', '\107', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\130', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\147', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\170', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\141', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\130', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\166', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\121', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\166', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\170', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\112', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\123', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\122', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\103', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\107', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\116', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\110', '\153', '\040', '\157', '\156', '\040', '\061', + '\012', '\127', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\166', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\153', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\157', '\132', '\040', '\157', '\156', '\040', '\061', + '\012', '\156', '\107', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\155', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\103', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\130', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\113', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\105', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\167', '\123', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\171', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\121', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\127', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\155', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\144', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\162', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\102', '\160', '\040', '\160', '\157', '\040', '\061', + '\012', '\146', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\145', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\107', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\146', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\123', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\121', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\160', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\115', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\141', '\161', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\127', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\171', '\112', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\131', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\162', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\113', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\113', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\172', '\163', '\124', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\111', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\146', '\125', '\040', '\146', '\157', '\040', '\061', + '\012', '\127', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\127', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\116', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\146', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\162', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\126', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\126', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\171', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\163', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\103', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\167', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\146', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\105', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\117', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\160', '\123', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\111', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\164', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\166', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\146', '\113', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\131', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\115', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\157', '\102', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\163', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\155', '\111', '\040', '\155', '\145', '\040', '\061', + '\012', '\164', '\155', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\116', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\165', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\152', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\117', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\107', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\110', '\160', '\040', '\141', '\154', '\040', '\061', + '\012', '\161', '\147', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\142', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\161', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\153', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\104', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\121', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\112', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\115', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\152', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\153', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\116', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\157', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\152', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\106', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\152', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\156', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\112', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\132', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\167', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\111', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\167', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\102', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\167', '\106', '\040', '\151', '\156', '\040', '\061', + '\012', '\162', '\110', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\123', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\113', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\102', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\155', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\131', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\107', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\170', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\116', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\154', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\154', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\142', '\104', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\101', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\110', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\170', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\126', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\160', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\151', '\171', '\120', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\155', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\155', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\102', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\105', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\103', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\172', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\111', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\131', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\161', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\155', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\132', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\123', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\113', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\127', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\166', '\102', '\040', '\160', '\157', '\040', '\061', + '\012', '\164', '\147', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\125', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\132', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\144', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\157', '\111', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\167', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\112', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\170', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\111', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\171', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\142', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\153', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\145', '\157', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\130', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\106', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\112', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\115', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\156', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\161', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\103', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\117', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\154', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\152', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\125', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\126', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\155', '\115', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\132', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\142', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\155', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\106', '\143', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\123', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\155', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\156', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\171', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\172', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\147', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\126', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\127', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\164', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\111', '\157', '\040', '\150', '\157', '\040', '\061', + '\012', '\153', '\146', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\112', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\145', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\165', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\130', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\124', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\172', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\153', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\105', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\167', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\104', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\167', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\130', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\146', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\116', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\154', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\125', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\124', '\144', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\131', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\143', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\102', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\112', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\162', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\131', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\114', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\156', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\106', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\120', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\116', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\154', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\114', '\170', '\040', '\152', '\157', '\040', '\061', + '\012', '\152', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\167', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\107', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\164', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\156', '\127', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\111', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\117', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\142', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\172', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\127', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\170', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\160', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\163', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\111', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\106', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\107', '\153', '\040', '\157', '\156', '\040', '\061', + '\012', '\110', '\156', '\143', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\122', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\107', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\131', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\121', '\157', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\116', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\144', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\107', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\162', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\166', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\132', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\104', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\120', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\147', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\127', '\167', '\040', '\157', '\167', '\040', '\061', + '\012', '\155', '\112', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\130', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\131', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\110', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\144', '\120', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\106', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\163', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\101', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\154', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\171', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\126', '\162', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\102', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\161', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\153', '\163', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\120', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\146', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\112', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\127', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\120', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\170', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\120', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\162', '\152', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\167', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\163', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\127', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\102', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\142', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\160', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\155', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\131', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\142', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\171', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\102', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\107', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\170', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\142', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\153', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\127', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\117', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\120', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\163', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\157', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\167', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\164', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\162', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\126', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\164', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\110', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\147', '\163', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\154', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\152', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\166', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\111', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\131', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\126', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\156', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\155', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\152', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\121', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\116', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\146', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\102', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\112', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\107', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\132', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\107', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\127', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\163', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\170', '\123', '\040', '\156', '\171', '\040', '\061', + '\012', '\162', '\170', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\116', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\116', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\160', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\130', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\154', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\152', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\112', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\167', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\156', '\126', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\172', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\167', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\161', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\116', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\165', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\113', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\111', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\115', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\127', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\115', '\143', '\040', '\156', '\144', '\040', '\061', + '\012', '\132', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\154', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\125', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\110', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\124', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\152', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\170', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\116', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\144', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\112', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\130', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\167', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\145', '\166', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\160', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\101', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\142', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\146', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\130', '\144', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\101', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\155', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\172', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\147', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\112', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\132', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\146', '\101', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\155', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\116', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\126', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\122', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\152', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\152', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\155', '\111', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\115', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\153', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\101', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\113', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\105', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\170', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\166', '\101', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\143', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\123', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\102', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\127', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\167', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\116', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\125', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\146', '\120', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\170', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\166', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\125', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\170', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\120', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\170', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\105', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\142', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\167', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\115', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\106', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\146', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\122', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\161', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\160', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\110', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\124', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\152', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\141', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\120', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\154', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\172', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\102', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\170', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\166', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\103', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\122', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\153', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\120', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\107', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\114', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\107', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\107', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\144', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\152', '\110', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\115', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\127', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\142', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\107', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\145', '\170', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\127', '\152', '\040', '\152', '\157', '\040', '\061', + '\012', '\160', '\121', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\117', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\162', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\130', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\125', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\113', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\127', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\161', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\112', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\125', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\112', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\166', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\120', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\111', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\146', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\132', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\155', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\155', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\103', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\106', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\142', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\121', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\121', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\131', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\120', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\117', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\116', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\110', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\144', '\105', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\126', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\120', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\122', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\157', '\105', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\156', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\166', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\157', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\155', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\104', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\104', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\153', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\170', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\131', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\124', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\154', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\163', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\146', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\142', '\107', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\127', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\104', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\127', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\130', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\166', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\166', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\104', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\155', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\101', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\146', '\123', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\171', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\121', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\160', '\130', '\040', '\160', '\162', '\040', '\061', + '\012', '\132', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\105', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\121', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\160', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\132', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\167', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\122', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\151', '\127', '\040', '\151', '\156', '\040', '\061', + '\012', '\150', '\161', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\102', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\160', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\110', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\150', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\115', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\127', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\107', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\152', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\166', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\166', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\153', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\116', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\147', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\167', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\131', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\124', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\112', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\172', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\171', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\171', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\102', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\166', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\142', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\142', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\167', '\125', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\112', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\111', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\166', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\122', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\117', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\105', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\170', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\111', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\102', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\124', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\103', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\147', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\160', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\146', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\170', '\122', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\106', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\102', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\126', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\166', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\131', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\116', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\121', '\151', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\167', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\120', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\166', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\153', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\155', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\144', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\163', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\166', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\127', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\131', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\131', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\110', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\142', '\115', '\040', '\160', '\162', '\040', '\061', + '\012', '\110', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\161', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\127', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\156', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\115', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\113', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\157', '\126', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\117', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\154', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\146', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\113', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\151', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\123', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\147', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\143', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\116', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\120', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\155', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\170', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\162', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\120', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\161', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\103', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\155', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\167', '\120', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\116', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\166', '\107', '\040', '\166', '\145', '\040', '\061', + '\012', '\126', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\154', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\121', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\164', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\145', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\114', '\146', '\040', '\160', '\157', '\040', '\061', + '\012', '\170', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\146', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\151', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\163', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\162', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\122', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\172', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\142', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\153', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\106', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\110', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\162', '\102', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\116', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\107', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\105', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\126', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\167', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\111', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\152', '\166', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\123', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\170', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\110', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\126', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\125', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\170', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\144', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\146', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\142', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\172', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\110', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\170', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\155', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\155', '\110', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\172', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\155', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\130', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\146', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\142', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\154', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\160', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\155', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\131', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\113', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\144', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\110', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\130', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\166', '\124', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\151', '\103', '\040', '\151', '\156', '\040', '\061', + '\012', '\147', '\153', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\112', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\160', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\120', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\122', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\115', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\111', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\132', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\161', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\157', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\121', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\106', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\110', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\103', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\142', '\123', '\040', '\142', '\145', '\040', '\061', + '\012', '\151', '\110', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\107', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\167', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\104', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\166', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\116', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\131', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\110', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\106', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\155', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\102', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\147', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\167', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\167', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\105', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\107', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\153', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\112', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\146', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\126', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\167', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\156', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\125', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\102', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\115', '\167', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\126', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\166', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\131', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\102', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\111', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\117', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\104', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\124', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\112', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\167', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\144', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\152', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\127', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\142', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\144', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\167', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\101', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\171', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\120', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\153', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\125', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\120', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\157', '\106', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\131', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\131', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\167', '\127', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\102', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\113', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\146', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\115', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\114', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\167', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\172', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\111', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\144', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\147', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\167', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\171', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\102', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\117', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\114', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\144', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\146', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\161', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\110', '\142', '\040', '\160', '\157', '\040', '\061', + '\012', '\166', '\122', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\160', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\127', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\142', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\132', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\102', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\152', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\166', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\167', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\102', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\170', '\110', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\170', '\110', '\040', '\146', '\157', '\040', '\061', + '\012', '\164', '\130', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\102', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\112', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\152', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\126', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\122', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\104', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\155', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\141', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\111', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\155', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\155', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\154', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\151', '\126', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\132', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\125', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\144', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\157', '\125', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\112', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\125', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\166', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\121', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\111', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\107', '\147', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\116', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\166', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\155', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\160', '\117', '\040', '\160', '\157', '\040', '\061', + '\012', '\164', '\105', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\146', '\114', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\131', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\127', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\124', '\164', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\126', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\167', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\157', '\112', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\104', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\106', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\154', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\142', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\102', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\160', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\116', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\123', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\157', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\113', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\154', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\144', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\160', '\112', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\147', '\161', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\150', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\165', '\131', '\040', '\165', '\156', '\040', '\061', + '\012', '\152', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\165', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\172', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\106', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\146', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\111', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\131', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\124', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\165', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\110', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\122', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\120', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\113', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\160', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\153', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\123', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\170', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\152', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\151', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\171', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\104', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\171', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\126', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\127', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\101', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\132', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\121', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\142', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\170', '\104', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\170', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\110', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\167', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\142', '\101', '\040', '\142', '\145', '\040', '\061', + '\012', '\122', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\123', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\121', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\155', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\156', '\101', '\040', '\141', '\156', '\040', '\061', + '\012', '\120', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\163', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\161', '\130', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\124', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\160', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\131', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\102', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\105', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\111', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\116', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\117', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\130', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\106', '\155', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\153', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\146', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\142', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\166', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\155', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\106', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\106', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\106', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\142', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\155', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\106', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\104', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\106', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\107', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\164', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\172', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\115', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\167', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\156', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\142', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\110', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\125', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\152', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\104', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\142', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\123', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\164', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\167', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\115', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\152', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\120', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\170', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\131', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\162', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\143', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\112', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\125', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\130', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\104', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\170', '\107', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\117', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\147', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\160', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\116', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\121', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\106', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\104', '\142', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\163', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\132', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\170', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\121', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\113', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\170', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\167', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\107', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\122', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\166', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\126', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\155', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\144', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\112', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\150', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\164', '\121', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\171', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\132', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\113', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\152', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\116', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\112', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\160', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\167', '\107', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\145', '\112', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\162', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\154', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\103', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\121', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\114', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\167', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\121', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\146', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\122', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\125', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\160', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\127', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\102', '\161', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\127', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\146', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\127', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\162', '\166', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\142', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\156', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\106', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\155', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\156', '\111', '\040', '\156', '\164', '\040', '\061', + '\012', '\161', '\117', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\171', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\116', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\105', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\160', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\170', '\114', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\145', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\125', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\167', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\162', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\124', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\170', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\112', '\163', '\040', '\157', '\156', '\040', '\061', + '\012', '\163', '\122', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\121', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\144', '\116', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\170', '\122', '\040', '\155', '\145', '\040', '\061', + '\012', '\130', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\160', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\132', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\156', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\132', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\127', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\125', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\144', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\172', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\162', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\155', '\116', '\040', '\155', '\145', '\040', '\061', + '\012', '\117', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\114', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\112', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\107', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\115', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\124', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\110', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\127', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\170', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\170', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\166', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\103', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\146', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\160', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\154', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\170', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\132', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\153', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\127', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\161', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\113', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\107', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\103', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\171', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\117', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\132', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\117', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\127', '\164', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\170', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\102', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\116', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\124', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\104', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\122', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\125', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\102', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\152', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\111', '\171', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\111', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\132', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\117', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\162', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\105', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\153', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\152', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\155', '\127', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\124', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\114', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\167', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\144', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\163', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\125', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\162', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\142', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\166', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\170', '\111', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\103', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\130', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\104', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\144', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\130', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\165', '\121', '\040', '\165', '\156', '\040', '\061', + '\012', '\153', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\127', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\103', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\144', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\131', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\110', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\126', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\141', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\170', '\127', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\156', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\106', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\167', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\167', '\111', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\154', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\103', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\162', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\131', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\154', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\114', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\154', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\143', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\162', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\152', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\112', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\114', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\121', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\150', '\153', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\114', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\130', '\147', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\113', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\112', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\156', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\153', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\127', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\164', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\145', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\162', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\104', '\160', '\040', '\160', '\157', '\040', '\061', + '\012', '\103', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\170', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\130', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\102', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\115', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\170', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\160', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\113', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\167', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\102', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\156', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\155', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\113', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\107', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\114', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\120', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\115', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\105', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\155', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\103', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\166', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\126', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\121', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\112', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\172', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\162', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\102', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\122', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\111', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\106', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\113', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\102', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\104', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\106', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\166', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\122', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\152', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\104', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\146', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\107', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\107', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\170', '\126', '\040', '\146', '\157', '\040', '\061', + '\012', '\151', '\120', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\147', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\111', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\150', '\165', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\104', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\164', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\106', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\152', '\123', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\160', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\104', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\113', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\132', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\170', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\124', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\105', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\110', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\104', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\161', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\170', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\170', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\124', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\121', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\125', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\163', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\107', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\113', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\167', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\167', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\162', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\160', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\106', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\171', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\167', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\147', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\164', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\161', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\155', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\121', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\105', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\166', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\166', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\112', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\171', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\164', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\132', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\105', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\172', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\146', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\113', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\170', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\124', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\107', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\127', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\162', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\160', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\121', '\163', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\142', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\126', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\114', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\162', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\163', '\122', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\167', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\120', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\125', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\167', '\162', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\146', '\104', '\040', '\146', '\157', '\040', '\061', + '\012', '\167', '\171', '\110', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\102', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\115', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\163', '\171', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\160', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\147', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\156', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\126', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\113', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\144', '\127', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\116', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\111', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\110', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\147', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\146', '\103', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\153', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\125', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\103', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\102', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\122', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\107', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\166', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\102', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\170', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\115', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\127', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\121', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\127', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\165', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\166', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\155', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\110', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\132', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\150', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\143', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\102', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\127', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\130', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\172', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\170', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\157', '\130', '\040', '\160', '\157', '\040', '\061', + '\012', '\170', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\127', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\127', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\123', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\146', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\152', '\144', '\040', '\144', '\157', '\040', '\061', + '\012', '\121', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\171', '\113', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\165', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\157', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\114', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\115', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\103', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\130', '\157', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\153', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\124', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\116', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\126', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\111', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\167', '\103', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\157', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\104', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\116', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\131', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\123', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\111', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\141', '\152', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\131', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\113', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\111', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\146', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\146', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\154', '\155', '\040', '\154', '\145', '\040', '\061', + '\012', '\103', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\161', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\106', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\126', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\103', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\145', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\110', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\116', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\155', '\130', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\106', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\131', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\147', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\167', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\171', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\172', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\121', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\142', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\123', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\131', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\161', '\147', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\131', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\160', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\126', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\166', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\146', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\167', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\127', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\161', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\143', '\112', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\167', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\144', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\160', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\143', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\111', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\144', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\106', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\114', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\160', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\112', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\112', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\113', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\145', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\170', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\103', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\122', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\115', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\113', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\153', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\122', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\170', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\103', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\131', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\153', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\142', '\121', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\162', '\104', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\152', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\155', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\112', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\143', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\172', '\126', '\040', '\157', '\156', '\040', '\061', + '\012', '\155', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\132', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\147', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\104', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\110', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\111', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\164', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\144', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\103', '\155', '\040', '\157', '\167', '\040', '\061', + '\012', '\166', '\126', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\142', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\170', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\147', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\127', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\131', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\164', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\130', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\151', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\102', '\160', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\130', '\166', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\112', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\172', '\160', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\143', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\167', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\117', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\117', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\163', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\122', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\104', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\146', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\166', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\127', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\172', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\160', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\121', '\145', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\131', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\121', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\166', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\125', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\151', '\142', '\110', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\166', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\106', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\160', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\114', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\167', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\171', '\113', '\040', '\156', '\171', '\040', '\061', + '\012', '\123', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\170', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\112', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\164', '\152', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\120', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\162', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\170', '\131', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\163', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\155', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\155', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\106', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\126', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\155', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\144', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\127', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\131', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\157', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\152', '\102', '\040', '\145', '\162', '\040', '\061', + '\012', '\104', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\127', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\154', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\167', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\132', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\121', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\167', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\131', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\101', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\157', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\167', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\167', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\115', '\152', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\162', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\130', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\105', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\156', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\121', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\152', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\115', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\126', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\166', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\110', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\142', '\113', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\124', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\156', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\170', '\117', '\040', '\156', '\171', '\040', '\061', + '\012', '\106', '\161', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\106', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\104', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\125', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\110', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\120', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\110', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\106', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\171', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\105', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\144', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\161', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\110', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\126', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\110', '\167', '\040', '\165', '\156', '\040', '\061', + '\012', '\132', '\143', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\110', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\104', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\164', '\154', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\161', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\162', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\123', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\103', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\165', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\115', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\127', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\160', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\121', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\170', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\146', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\152', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\132', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\103', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\162', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\157', '\111', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\162', '\146', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\102', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\171', '\171', '\126', '\040', '\156', '\171', '\040', '\061', + '\012', '\121', '\151', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\104', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\147', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\116', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\144', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\166', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\142', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\151', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\142', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\115', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\110', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\127', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\120', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\114', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\157', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\160', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\124', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\143', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\120', '\171', '\040', '\153', '\165', '\040', '\061', + '\012', '\146', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\131', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\123', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\104', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\142', '\112', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\146', '\117', '\040', '\156', '\171', '\040', '\061', + '\012', '\165', '\121', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\144', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\167', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\124', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\112', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\127', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\143', '\125', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\125', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\116', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\132', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\163', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\131', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\131', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\107', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\170', '\112', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\114', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\102', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\112', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\146', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\142', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\110', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\113', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\102', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\160', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\144', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\115', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\132', '\146', '\040', '\160', '\151', '\040', '\061', + '\012', '\145', '\131', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\124', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\104', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\170', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\146', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\160', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\103', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\120', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\103', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\116', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\122', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\141', '\145', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\102', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\117', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\142', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\130', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\147', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\130', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\116', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\141', '\117', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\146', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\167', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\152', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\152', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\115', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\106', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\146', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\132', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\102', '\142', '\040', '\142', '\151', '\040', '\061', + '\012', '\163', '\152', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\104', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\152', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\162', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\106', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\121', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\142', '\105', '\040', '\166', '\151', '\040', '\061', + '\012', '\125', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\123', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\105', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\146', '\110', '\040', '\142', '\145', '\040', '\061', + '\012', '\116', '\162', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\166', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\151', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\142', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\170', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\166', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\162', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\131', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\153', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\103', '\170', '\040', '\166', '\151', '\040', '\061', + '\012', '\132', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\127', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\104', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\146', '\105', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\166', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\157', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\142', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\116', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\124', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\152', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\112', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\153', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\130', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\113', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\120', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\110', '\143', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\152', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\171', '\105', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\102', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\120', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\147', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\144', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\166', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\162', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\166', '\146', '\040', '\166', '\151', '\040', '\061', + '\012', '\171', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\167', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\161', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\113', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\112', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\114', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\144', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\116', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\112', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\141', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\113', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\116', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\120', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\122', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\156', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\132', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\132', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\115', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\170', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\120', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\167', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\120', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\146', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\167', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\142', '\107', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\172', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\132', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\103', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\124', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\123', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\154', '\116', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\127', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\167', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\116', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\124', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\106', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\112', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\143', '\122', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\142', '\124', '\040', '\142', '\145', '\040', '\061', + '\012', '\106', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\167', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\142', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\123', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\154', '\142', '\102', '\040', '\154', '\145', '\040', '\061', + '\012', '\117', '\143', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\142', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\163', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\171', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\160', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\117', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\162', '\122', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\155', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\103', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\152', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\106', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\123', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\142', '\113', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\144', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\106', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\155', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\103', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\110', '\172', '\040', '\164', '\172', '\040', '\061', + '\012', '\150', '\152', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\155', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\103', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\111', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\116', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\142', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\106', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\122', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\162', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\167', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\126', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\147', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\101', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\120', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\160', '\120', '\040', '\151', '\156', '\040', '\061', + '\012', '\112', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\112', '\142', '\040', '\142', '\151', '\040', '\061', + '\012', '\152', '\170', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\167', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\122', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\146', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\124', '\144', '\160', '\040', '\160', '\157', '\040', '\061', + '\012', '\167', '\105', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\161', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\170', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\125', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\121', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\124', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\154', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\121', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\113', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\167', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\153', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\121', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\114', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\101', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\144', '\155', '\107', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\113', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\125', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\172', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\116', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\147', '\131', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\146', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\132', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\124', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\130', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\104', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\144', '\122', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\115', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\170', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\146', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\117', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\116', '\166', '\170', '\040', '\166', '\151', '\040', '\061', + '\012', '\161', '\141', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\107', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\132', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\106', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\160', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\161', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\171', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\155', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\103', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\126', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\121', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\110', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\172', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\131', '\171', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\170', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\164', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\127', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\103', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\106', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\145', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\152', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\150', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\103', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\153', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\124', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\170', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\166', '\113', '\040', '\166', '\151', '\040', '\061', + '\012', '\114', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\167', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\124', '\153', '\040', '\144', '\151', '\040', '\061', + '\012', '\146', '\163', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\152', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\121', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\120', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\155', '\103', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\163', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\104', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\110', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\106', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\144', '\114', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\131', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\113', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\103', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\116', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\157', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\144', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\160', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\127', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\102', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\154', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\146', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\155', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\107', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\162', '\171', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\110', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\114', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\154', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\142', '\102', '\040', '\142', '\151', '\040', '\061', + '\012', '\151', '\131', '\162', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\104', '\172', '\040', '\164', '\172', '\040', '\061', + '\012', '\170', '\163', '\112', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\115', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\125', '\165', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\170', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\167', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\120', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\104', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\126', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\113', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\157', '\132', '\152', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\101', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\115', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\166', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\106', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\126', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\114', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\130', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\150', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\154', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\142', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\120', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\104', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\152', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\152', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\131', '\142', '\040', '\151', '\156', '\040', '\061', + '\012', '\106', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\157', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\114', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\125', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\112', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\113', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\132', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\103', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\165', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\126', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\144', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\123', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\123', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\104', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\142', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\146', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\166', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\130', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\106', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\160', '\122', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\124', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\120', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\151', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\106', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\170', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\103', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\126', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\154', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\126', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\103', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\167', '\126', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\142', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\166', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\131', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\123', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\143', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\103', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\156', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\167', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\130', '\165', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\102', '\167', '\040', '\155', '\142', '\040', '\061', + '\012', '\167', '\155', '\106', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\112', '\170', '\040', '\170', '\145', '\040', '\061', + '\012', '\144', '\130', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\102', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\142', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\153', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\117', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\121', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\166', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\103', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\113', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\126', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\132', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\102', '\166', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\170', '\122', '\040', '\146', '\157', '\040', '\061', + '\012', '\166', '\155', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\120', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\106', '\153', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\131', '\171', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\125', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\155', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\166', '\132', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\142', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\131', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\106', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\160', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\170', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\115', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\162', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\107', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\143', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\113', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\170', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\121', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\142', '\105', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\131', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\113', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\160', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\103', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\122', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\111', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\116', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\166', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\107', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\102', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\115', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\103', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\166', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\170', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\115', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\142', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\103', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\124', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\142', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\152', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\131', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\166', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\157', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\126', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\110', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\142', '\123', '\040', '\142', '\145', '\040', '\061', + '\012', '\110', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\170', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\153', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\155', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\142', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\122', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\147', '\126', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\102', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\130', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\162', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\166', '\117', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\104', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\121', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\146', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\132', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\156', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\145', '\116', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\170', '\123', '\040', '\146', '\157', '\040', '\061', + '\012', '\163', '\116', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\125', '\165', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\172', '\127', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\172', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\146', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\106', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\157', '\110', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\166', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\157', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\170', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\115', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\150', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\152', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\152', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\155', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\111', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\153', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\124', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\126', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\121', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\113', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\125', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\165', '\124', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\144', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\170', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\147', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\144', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\161', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\145', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\107', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\166', '\155', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\113', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\166', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\110', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\115', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\163', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\113', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\120', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\147', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\167', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\131', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\172', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\152', '\040', '\152', '\157', '\040', '\061', + '\012', '\113', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\160', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\144', '\101', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\127', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\123', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\142', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\162', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\125', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\105', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\152', '\110', '\040', '\152', '\157', '\040', '\061', + '\012', '\163', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\125', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\117', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\142', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\120', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\122', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\166', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\171', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\167', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\112', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\166', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\106', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\116', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\142', '\160', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\131', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\107', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\124', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\146', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\172', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\144', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\130', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\115', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\124', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\113', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\115', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\115', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\154', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\155', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\117', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\142', '\111', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\160', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\105', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\127', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\166', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\131', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\170', '\115', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\120', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\167', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\143', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\112', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\150', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\170', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\156', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\171', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\102', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\123', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\161', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\131', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\162', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\110', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\142', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\121', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\170', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\147', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\144', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\131', '\144', '\172', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\120', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\121', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\167', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\131', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\126', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\170', '\114', '\040', '\156', '\171', '\040', '\061', + '\012', '\131', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\111', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\121', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\161', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\146', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\124', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\146', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\113', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\130', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\131', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\157', '\143', '\040', '\162', '\157', '\040', '\061', + '\012', '\166', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\132', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\144', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\147', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\156', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\146', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\142', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\142', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\160', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\157', '\127', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\112', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\121', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\166', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\104', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\167', '\106', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\113', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\111', '\165', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\147', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\112', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\147', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\150', '\040', '\150', '\157', '\040', '\061', + '\012', '\143', '\166', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\147', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\116', '\163', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\132', '\156', '\040', '\157', '\156', '\040', '\061', + '\012', '\165', '\125', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\132', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\107', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\123', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\143', '\107', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\161', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\142', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\145', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\165', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\167', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\120', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\123', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\120', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\172', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\143', '\110', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\154', '\131', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\166', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\166', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\122', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\116', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\113', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\112', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\117', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\162', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\124', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\103', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\141', '\117', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\110', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\153', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\130', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\170', '\111', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\132', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\154', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\167', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\110', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\127', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\121', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\145', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\121', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\122', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\102', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\170', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\115', '\166', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\143', '\122', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\102', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\127', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\171', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\103', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\162', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\171', '\121', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\163', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\166', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\162', '\114', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\166', '\130', '\040', '\157', '\156', '\040', '\061', + '\012', '\125', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\126', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\160', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\121', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\171', '\127', '\040', '\156', '\171', '\040', '\061', + '\012', '\162', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\130', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\143', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\155', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\152', '\102', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\144', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\153', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\116', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\127', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\127', '\164', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\146', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\132', '\142', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\167', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\125', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\107', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\167', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\142', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\121', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\132', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\115', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\106', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\104', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\125', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\110', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\124', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\132', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\106', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\154', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\153', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\166', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\111', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\114', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\145', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\154', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\143', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\164', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\153', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\112', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\121', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\120', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\155', '\117', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\164', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\102', '\153', '\040', '\151', '\156', '\040', '\061', + '\012', '\165', '\172', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\116', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\145', '\126', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\107', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\160', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\104', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\126', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\155', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\166', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\146', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\121', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\124', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\120', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\170', '\112', '\040', '\146', '\157', '\040', '\061', + '\012', '\161', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\112', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\122', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\143', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\126', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\161', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\152', '\113', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\153', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\115', '\152', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\142', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\114', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\121', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\155', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\113', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\161', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\126', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\130', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\117', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\110', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\121', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\106', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\131', '\142', '\040', '\157', '\156', '\040', '\061', + '\012', '\106', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\111', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\115', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\161', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\142', '\132', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\163', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\152', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\120', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\102', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\142', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\131', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\170', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\171', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\172', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\115', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\150', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\117', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\111', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\131', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\170', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\146', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\153', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\131', '\153', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\122', '\147', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\117', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\101', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\113', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\103', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\151', '\126', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\162', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\105', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\122', '\162', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\142', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\115', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\132', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\106', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\153', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\113', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\142', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\110', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\172', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\115', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\153', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\113', '\155', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\160', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\143', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\127', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\144', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\155', '\111', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\143', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\167', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\144', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\132', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\113', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\172', '\101', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\171', '\124', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\145', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\160', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\171', '\107', '\040', '\156', '\171', '\040', '\061', + '\012', '\154', '\114', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\154', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\155', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\113', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\122', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\114', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\120', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\153', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\170', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\127', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\143', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\112', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\167', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\122', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\167', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\114', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\130', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\146', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\152', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\172', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\125', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\123', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\170', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\170', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\126', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\125', '\143', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\141', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\110', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\151', '\171', '\103', '\040', '\151', '\156', '\040', '\061', + '\012', '\124', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\112', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\112', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\112', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\116', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\144', '\101', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\152', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\161', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\107', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\121', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\164', '\114', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\126', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\113', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\141', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\111', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\130', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\106', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\167', '\115', '\040', '\151', '\156', '\040', '\061', + '\012', '\107', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\154', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\116', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\127', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\156', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\123', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\103', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\124', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\104', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\102', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\172', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\160', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\103', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\122', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\153', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\104', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\142', '\104', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\154', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\122', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\106', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\120', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\152', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\123', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\165', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\120', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\112', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\160', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\107', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\130', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\121', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\150', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\131', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\166', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\167', '\132', '\040', '\151', '\156', '\040', '\061', + '\012', '\172', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\155', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\113', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\146', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\125', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\161', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\167', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\130', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\120', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\111', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\146', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\160', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\116', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\130', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\172', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\155', '\102', '\040', '\155', '\145', '\040', '\061', + '\012', '\127', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\130', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\131', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\121', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\144', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\162', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\146', '\114', '\040', '\156', '\171', '\040', '\061', + '\012', '\171', '\131', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\142', '\110', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\113', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\146', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\112', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\102', '\172', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\141', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\112', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\110', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\141', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\150', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\131', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\155', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\150', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\147', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\155', '\171', '\040', '\155', '\145', '\040', '\061', + '\012', '\122', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\163', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\150', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\111', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\111', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\143', '\106', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\156', '\126', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\145', '\161', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\153', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\115', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\167', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\101', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\155', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\167', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\156', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\146', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\170', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\143', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\146', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\161', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\172', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\162', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\161', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\147', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\121', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\167', '\102', '\040', '\167', '\141', '\040', '\061', + '\012', '\154', '\107', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\144', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\104', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\114', '\163', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\116', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\114', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\127', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\152', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\131', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\145', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\166', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\153', '\101', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\152', '\115', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\147', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\130', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\124', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\122', '\150', '\172', '\040', '\150', '\141', '\040', '\061', + '\012', '\167', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\150', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\154', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\170', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\120', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\106', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\161', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\115', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\142', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\160', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\155', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\142', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\115', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\146', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\121', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\105', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\155', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\121', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\113', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\106', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\120', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\115', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\172', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\106', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\112', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\126', '\172', '\040', '\151', '\156', '\040', '\061', + '\012', '\157', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\143', '\116', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\124', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\111', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\132', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\172', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\131', '\154', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\110', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\163', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\172', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\102', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\124', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\113', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\142', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\166', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\146', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\103', '\163', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\107', '\146', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\142', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\166', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\154', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\124', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\107', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\124', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\160', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\167', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\107', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\161', '\124', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\115', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\113', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\116', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\154', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\126', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\115', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\167', '\103', '\040', '\154', '\145', '\040', '\061', + '\012', '\104', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\152', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\124', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\170', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\167', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\162', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\167', '\132', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\156', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\112', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\153', '\112', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\126', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\101', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\150', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\122', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\154', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\106', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\167', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\103', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\130', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\124', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\106', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\142', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\166', '\123', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\102', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\116', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\121', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\114', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\126', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\125', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\132', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\111', '\171', '\040', '\145', '\147', '\040', '\061', + '\012', '\150', '\126', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\121', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\146', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\113', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\150', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\107', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\142', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\131', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\166', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\110', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\130', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\163', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\126', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\160', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\127', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\103', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\155', '\146', '\110', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\111', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\146', '\130', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\152', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\155', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\147', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\105', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\117', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\110', '\152', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\132', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\114', '\163', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\153', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\167', '\121', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\162', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\142', '\110', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\166', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\122', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\150', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\160', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\106', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\123', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\144', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\107', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\126', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\166', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\167', '\117', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\127', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\121', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\156', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\146', '\111', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\123', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\160', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\146', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\131', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\102', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\112', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\144', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\121', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\146', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\164', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\113', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\172', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\142', '\167', '\111', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\163', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\154', '\122', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\154', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\142', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\163', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\156', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\172', '\132', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\107', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\167', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\117', '\171', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\122', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\132', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\112', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\153', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\107', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\122', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\166', '\114', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\107', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\151', '\111', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\107', '\172', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\114', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\125', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\166', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\156', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\130', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\103', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\156', '\114', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\146', '\110', '\040', '\146', '\157', '\040', '\061', + '\012', '\151', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\110', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\131', '\167', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\104', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\123', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\103', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\141', '\132', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\142', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\172', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\110', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\161', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\105', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\146', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\166', '\123', '\040', '\166', '\141', '\040', '\061', + '\012', '\160', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\112', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\144', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\122', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\154', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\154', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\141', '\157', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\154', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\120', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\164', '\111', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\155', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\112', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\147', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\125', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\164', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\164', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\172', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\170', '\121', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\162', '\120', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\143', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\165', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\120', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\106', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\152', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\107', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\131', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\124', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\117', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\114', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\115', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\157', '\126', '\154', '\040', '\157', '\156', '\040', '\061', + '\012', '\143', '\167', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\147', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\142', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\167', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\145', '\121', '\157', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\121', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\113', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\166', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\126', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\163', '\120', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\121', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\132', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\150', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\127', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\154', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\160', '\114', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\105', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\163', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\154', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\154', '\172', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\165', '\112', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\126', '\146', '\040', '\156', '\171', '\040', '\061', + '\012', '\132', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\142', '\123', '\040', '\142', '\145', '\040', '\061', + '\012', '\157', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\143', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\167', '\125', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\120', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\112', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\155', '\116', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\144', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\101', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\170', '\113', '\040', '\156', '\171', '\040', '\061', + '\012', '\110', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\111', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\147', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\114', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\115', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\106', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\102', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\166', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\147', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\154', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\115', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\123', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\105', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\146', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\103', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\110', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\153', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\165', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\142', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\111', '\160', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\120', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\160', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\160', '\116', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\172', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\157', '\121', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\154', '\103', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\115', '\150', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\125', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\150', '\147', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\143', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\160', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\111', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\120', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\130', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\162', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\110', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\146', '\127', '\040', '\156', '\171', '\040', '\061', + '\012', '\131', '\171', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\166', '\122', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\122', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\113', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\156', '\170', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\144', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\142', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\145', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\123', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\111', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\113', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\160', '\120', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\121', '\171', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\146', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\120', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\101', '\157', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\131', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\146', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\166', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\145', '\110', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\121', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\145', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\160', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\146', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\144', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\116', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\102', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\105', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\146', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\157', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\145', '\106', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\120', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\104', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\132', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\125', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\121', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\132', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\152', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\152', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\113', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\115', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\115', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\172', '\171', '\040', '\163', '\172', '\040', '\061', + '\012', '\116', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\167', '\124', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\163', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\125', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\102', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\146', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\126', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\107', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\146', '\107', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\126', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\144', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\172', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\172', '\121', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\126', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\114', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\124', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\155', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\166', '\131', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\121', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\111', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\107', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\110', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\103', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\112', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\143', '\127', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\130', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\150', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\152', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\154', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\172', '\162', '\105', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\153', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\110', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\146', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\114', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\125', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\104', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\114', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\131', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\113', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\111', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\162', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\106', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\142', '\103', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\130', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\120', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\103', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\167', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\112', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\102', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\111', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\144', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\121', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\160', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\170', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\153', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\153', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\122', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\115', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\145', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\110', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\170', '\125', '\040', '\142', '\145', '\040', '\061', + '\012', '\170', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\131', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\154', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\122', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\107', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\106', '\172', '\040', '\172', '\145', '\040', '\061', + '\012', '\161', '\117', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\147', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\157', '\107', '\155', '\040', '\157', '\156', '\040', '\061', + '\012', '\130', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\131', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\165', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\103', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\150', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\121', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\167', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\127', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\160', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\143', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\146', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\141', '\130', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\107', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\125', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\144', '\113', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\132', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\167', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\166', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\154', '\142', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\172', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\144', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\112', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\127', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\130', '\171', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\130', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\115', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\116', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\121', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\106', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\160', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\116', '\167', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\150', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\131', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\166', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\111', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\142', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\115', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\124', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\150', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\127', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\114', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\163', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\114', '\155', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\153', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\101', '\170', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\172', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\113', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\121', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\171', '\130', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\146', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\160', '\125', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\167', '\112', '\040', '\167', '\141', '\040', '\061', + '\012', '\101', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\165', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\164', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\122', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\124', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\125', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\125', '\151', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\112', '\154', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\103', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\117', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\154', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\146', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\112', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\153', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\154', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\171', '\104', '\040', '\156', '\171', '\040', '\061', + '\012', '\152', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\162', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\160', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\120', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\125', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\142', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\144', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\121', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\155', '\104', '\040', '\155', '\145', '\040', '\061', + '\012', '\112', '\153', '\152', '\040', '\153', '\141', '\040', '\061', + '\012', '\152', '\124', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\131', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\132', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\153', '\121', '\040', '\145', '\162', '\040', '\061', + '\012', '\142', '\104', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\123', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\130', '\162', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\132', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\161', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\112', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\144', '\112', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\167', '\105', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\170', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\152', '\170', '\124', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\115', '\146', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\122', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\131', '\171', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\126', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\155', '\122', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\106', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\171', '\121', '\040', '\156', '\171', '\040', '\061', + '\012', '\170', '\145', '\111', '\040', '\145', '\162', '\040', '\061', + '\012', '\127', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\154', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\104', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\131', '\172', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\170', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\147', '\113', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\163', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\130', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\103', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\130', '\162', '\144', '\040', '\145', '\162', '\040', '\061', + '\012', '\122', '\172', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\146', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\164', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\124', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\165', '\146', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\154', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\150', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\113', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\106', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\121', '\165', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\130', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\126', '\153', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\106', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\111', '\165', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\124', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\115', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\113', '\160', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\122', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\130', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\166', '\172', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\112', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\124', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\122', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\112', '\162', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\122', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\160', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\151', '\116', '\167', '\040', '\151', '\156', '\040', '\061', + '\012', '\165', '\152', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\110', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\110', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\161', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\160', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\110', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\103', '\147', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\127', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\165', '\126', '\040', '\165', '\156', '\040', '\061', + '\012', '\142', '\152', '\116', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\121', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\170', '\105', '\040', '\142', '\145', '\040', '\061', + '\012', '\165', '\126', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\162', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\114', '\162', '\170', '\040', '\145', '\162', '\040', '\061', + '\012', '\111', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\141', '\161', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\107', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\147', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\163', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\126', '\170', '\163', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\123', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\157', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\160', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\113', '\143', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\167', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\131', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\112', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\166', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\106', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\152', '\170', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\160', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\126', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\116', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\166', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\170', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\160', '\165', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\170', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\101', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\155', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\155', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\103', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\106', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\144', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\114', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\115', '\170', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\143', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\126', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\153', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\170', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\115', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\107', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\152', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\152', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\167', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\113', '\170', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\150', '\132', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\172', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\166', '\113', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\120', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\161', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\171', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\103', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\152', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\122', '\142', '\040', '\154', '\145', '\040', '\061', + '\012', '\164', '\146', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\160', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\160', '\146', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\164', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\157', '\124', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\123', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\170', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\127', '\162', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\117', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\144', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\161', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\130', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\102', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\152', '\130', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\142', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\167', '\123', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\126', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\167', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\163', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\120', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\167', '\107', '\040', '\167', '\141', '\040', '\061', + '\012', '\130', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\155', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\166', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\146', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\160', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\161', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\121', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\166', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\114', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\143', '\145', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\102', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\144', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\156', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\115', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\146', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\146', '\117', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\141', '\112', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\114', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\131', '\146', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\144', '\112', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\105', '\141', '\171', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\123', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\116', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\112', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\166', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\160', '\110', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\170', '\117', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\120', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\142', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\157', '\105', '\040', '\157', '\156', '\040', '\061', + '\012', '\147', '\164', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\146', '\106', '\040', '\142', '\145', '\040', '\061', + '\012', '\155', '\166', '\127', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\163', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\167', '\110', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\103', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\114', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\153', '\130', '\167', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\150', '\103', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\125', '\153', '\040', '\157', '\156', '\040', '\061', + '\012', '\172', '\143', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\115', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\162', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\146', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\171', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\130', '\141', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\115', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\146', '\103', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\167', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\145', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\152', '\107', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\107', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\131', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\111', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\166', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\160', '\116', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\116', '\162', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\153', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\111', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\146', '\116', '\040', '\167', '\141', '\040', '\061', + '\012', '\126', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\153', '\121', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\111', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\161', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\163', '\170', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\161', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\146', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\171', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\166', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\131', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\147', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\130', '\141', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\102', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\131', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\152', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\152', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\141', '\152', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\130', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\150', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\107', '\155', '\040', '\145', '\162', '\040', '\061', + '\012', '\121', '\164', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\120', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\122', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\117', '\147', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\114', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\121', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\150', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\170', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\156', '\160', '\111', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\156', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\103', '\144', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\146', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\142', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\167', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\114', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\143', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\126', '\166', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\153', '\170', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\155', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\107', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\112', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\106', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\103', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\166', '\127', '\040', '\154', '\145', '\040', '\061', + '\012', '\123', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\132', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\111', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\124', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\104', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\124', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\160', '\103', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\153', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\160', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\121', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\151', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\121', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\125', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\152', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\130', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\130', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\147', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\162', '\112', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\167', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\164', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\110', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\110', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\142', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\146', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\122', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\155', '\131', '\040', '\155', '\145', '\040', '\061', + '\012', '\167', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\106', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\127', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\171', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\147', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\155', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\146', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\172', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\147', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\163', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\157', '\127', '\170', '\040', '\157', '\156', '\040', '\061', + '\012', '\120', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\144', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\130', '\155', '\160', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\147', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\103', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\164', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\142', '\121', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\165', '\115', '\040', '\165', '\156', '\040', '\061', + '\012', '\146', '\114', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\150', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\156', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\144', '\123', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\106', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\106', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\127', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\161', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\155', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\142', '\153', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\121', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\120', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\171', '\114', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\170', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\172', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\146', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\153', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\156', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\125', '\161', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\165', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\125', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\102', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\116', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\150', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\127', '\160', '\040', '\144', '\145', '\040', '\061', + '\012', '\131', '\166', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\122', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\172', '\107', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\165', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\152', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\132', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\112', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\156', '\117', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\143', '\101', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\146', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\152', '\123', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\146', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\163', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\144', '\130', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\122', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\105', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\107', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\110', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\166', '\101', '\040', '\166', '\141', '\040', '\061', + '\012', '\102', '\146', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\126', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\151', '\113', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\141', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\103', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\147', '\101', '\040', '\156', '\147', '\040', '\061', + '\012', '\151', '\167', '\112', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\107', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\164', '\146', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\152', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\172', '\107', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\155', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\156', '\125', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\107', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\126', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\123', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\161', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\156', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\126', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\126', '\163', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\116', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\156', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\112', '\163', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\154', '\115', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\172', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\143', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\126', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\127', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\110', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\117', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\125', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\127', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\161', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\156', '\103', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\126', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\164', '\115', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\150', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\164', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\143', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\144', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\163', '\117', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\156', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\155', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\107', '\166', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\126', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\144', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\144', '\105', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\132', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\102', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\110', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\153', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\170', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\154', '\162', '\101', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\162', '\124', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\152', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\142', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\124', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\155', '\126', '\040', '\155', '\145', '\040', '\061', + '\012', '\162', '\104', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\144', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\141', '\126', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\116', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\130', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\162', '\107', '\163', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\141', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\162', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\112', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\170', '\105', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\166', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\122', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\160', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\112', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\142', '\121', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\172', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\106', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\167', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\141', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\163', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\147', '\155', '\117', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\107', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\122', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\101', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\104', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\107', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\124', '\166', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\155', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\164', '\105', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\172', '\120', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\163', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\107', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\171', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\170', '\106', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\132', '\040', '\146', '\157', '\040', '\061', + '\012', '\163', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\155', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\110', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\150', '\155', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\167', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\165', '\112', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\120', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\130', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\125', '\161', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\106', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\116', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\170', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\123', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\122', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\167', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\146', '\155', '\102', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\123', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\120', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\110', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\115', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\153', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\130', '\144', '\163', '\040', '\144', '\145', '\040', '\061', + '\012', '\171', '\142', '\102', '\040', '\142', '\145', '\040', '\061', + '\012', '\147', '\160', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\170', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\147', '\120', '\155', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\160', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\160', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\154', '\112', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\171', '\160', '\120', '\040', '\160', '\162', '\040', '\061', + '\012', '\116', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\147', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\105', '\161', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\122', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\125', '\142', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\112', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\166', '\116', '\040', '\166', '\141', '\040', '\061', + '\012', '\121', '\146', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\163', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\153', '\130', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\160', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\160', '\152', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\153', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\115', '\146', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\163', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\117', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\104', '\161', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\156', '\142', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\166', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\106', '\156', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\160', '\126', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\164', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\105', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\150', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\130', '\171', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\144', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\155', '\104', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\151', '\126', '\153', '\040', '\151', '\156', '\040', '\061', + '\012', '\110', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\160', '\132', '\040', '\160', '\157', '\040', '\061', + '\012', '\141', '\145', '\125', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\152', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\163', '\107', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\127', '\161', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\161', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\120', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\130', '\172', '\040', '\163', '\164', '\040', '\061', + '\012', '\170', '\166', '\120', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\142', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\152', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\150', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\161', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\131', '\146', '\040', '\144', '\145', '\040', '\061', + '\012', '\160', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\163', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\150', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\154', '\105', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\161', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\156', '\162', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\110', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\110', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\161', '\112', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\142', '\171', '\040', '\142', '\145', '\040', '\061', + '\012', '\164', '\142', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\123', '\146', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\110', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\160', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\121', '\172', '\160', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\151', '\125', '\040', '\151', '\156', '\040', '\061', + '\012', '\162', '\152', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\164', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\131', '\147', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\121', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\127', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\126', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\121', '\170', '\040', '\160', '\162', '\040', '\061', + '\012', '\114', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\127', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\110', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\166', '\160', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\170', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\110', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\166', '\125', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\161', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\126', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\132', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\165', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\170', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\110', '\154', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\104', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\144', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\166', '\115', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\127', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\151', '\117', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\104', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\110', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\120', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\130', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\146', '\114', '\040', '\146', '\157', '\040', '\061', + '\012', '\171', '\107', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\102', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\103', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\114', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\115', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\162', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\144', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\170', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\155', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\122', '\172', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\102', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\127', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\165', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\171', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\106', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\122', '\155', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\126', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\113', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\114', '\150', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\123', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\162', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\102', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\103', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\171', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\146', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\144', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\143', '\130', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\152', '\111', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\147', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\167', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\172', '\125', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\132', '\162', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\112', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\104', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\125', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\170', '\105', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\170', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\143', '\167', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\160', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\122', '\167', '\040', '\163', '\164', '\040', '\061', + '\012', '\113', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\170', '\101', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\121', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\120', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\110', '\167', '\165', '\040', '\153', '\165', '\040', '\061', + '\012', '\163', '\165', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\170', '\127', '\040', '\163', '\164', '\040', '\061', + '\012', '\141', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\142', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\161', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\164', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\115', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\107', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\162', '\153', '\040', '\145', '\162', '\040', '\061', + '\012', '\117', '\143', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\113', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\162', '\101', '\040', '\145', '\162', '\040', '\061', + '\012', '\147', '\170', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\127', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\170', '\121', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\130', '\157', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\155', '\120', '\040', '\155', '\145', '\040', '\061', + '\012', '\153', '\144', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\102', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\160', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\156', '\115', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\110', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\123', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\155', '\130', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\143', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\141', '\130', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\144', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\142', '\131', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\146', '\132', '\040', '\160', '\162', '\040', '\061', + '\012', '\126', '\155', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\132', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\114', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\161', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\160', '\113', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\146', '\107', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\152', '\122', '\040', '\151', '\156', '\040', '\061', + '\012', '\151', '\112', '\171', '\040', '\151', '\156', '\040', '\061', + '\012', '\161', '\146', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\162', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\147', '\124', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\117', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\156', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\127', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\144', '\117', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\131', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\162', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\155', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\110', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\172', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\105', '\171', '\040', '\156', '\171', '\040', '\061', + '\012', '\150', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\160', '\121', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\131', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\144', '\170', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\146', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\142', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\142', '\117', '\040', '\142', '\145', '\040', '\061', + '\012', '\130', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\103', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\155', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\112', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\104', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\172', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\163', '\170', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\113', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\123', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\144', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\172', '\127', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\167', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\115', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\142', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\163', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\132', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\164', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\161', '\160', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\154', '\104', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\166', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\132', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\164', '\150', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\164', '\114', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\117', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\111', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\150', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\166', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\152', '\103', '\040', '\151', '\152', '\040', '\061', + '\012', '\117', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\166', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\110', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\170', '\112', '\040', '\151', '\152', '\040', '\061', + '\012', '\107', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\121', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\104', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\121', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\112', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\172', '\142', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\122', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\105', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\141', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\152', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\123', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\112', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\127', '\162', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\113', '\160', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\141', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\103', '\166', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\142', '\122', '\040', '\142', '\145', '\040', '\061', + '\012', '\160', '\124', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\144', '\111', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\146', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\122', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\142', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\172', '\106', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\167', '\117', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\162', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\164', '\167', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\114', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\156', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\165', '\123', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\111', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\124', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\113', '\144', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\153', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\102', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\117', '\172', '\040', '\153', '\141', '\040', '\061', + '\012', '\172', '\117', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\172', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\115', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\146', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\147', '\104', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\164', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\152', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\142', '\130', '\040', '\142', '\145', '\040', '\061', + '\012', '\172', '\146', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\167', '\110', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\121', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\163', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\114', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\155', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\116', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\115', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\107', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\103', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\160', '\166', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\116', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\160', '\120', '\040', '\160', '\162', '\040', '\061', + '\012', '\154', '\130', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\114', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\144', '\130', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\172', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\170', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\166', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\162', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\105', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\131', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\163', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\146', '\153', '\103', '\040', '\153', '\141', '\040', '\061', + '\012', '\155', '\170', '\113', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\155', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\102', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\103', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\163', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\152', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\164', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\102', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\152', '\106', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\147', '\125', '\040', '\164', '\150', '\040', '\061', + '\012', '\127', '\162', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\106', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\143', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\145', '\161', '\101', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\142', '\107', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\167', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\104', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\124', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\162', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\121', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\167', '\115', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\103', '\156', '\040', '\156', '\144', '\040', '\061', + '\012', '\145', '\107', '\160', '\040', '\145', '\162', '\040', '\061', + '\012', '\165', '\120', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\151', '\111', '\040', '\151', '\156', '\040', '\061', + '\012', '\162', '\161', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\152', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\167', '\113', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\152', '\121', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\111', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\170', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\107', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\114', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\122', '\144', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\171', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\122', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\113', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\150', '\142', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\161', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\155', '\106', '\040', '\155', '\145', '\040', '\061', + '\012', '\166', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\161', '\116', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\114', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\166', '\112', '\040', '\166', '\141', '\040', '\061', + '\012', '\142', '\147', '\112', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\166', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\110', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\126', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\150', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\154', '\114', '\040', '\154', '\145', '\040', '\061', + '\012', '\153', '\144', '\110', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\146', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\104', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\103', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\121', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\127', '\156', '\172', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\112', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\167', '\122', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\160', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\120', '\152', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\160', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\143', '\154', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\103', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\162', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\103', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\141', '\102', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\165', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\132', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\107', '\164', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\142', '\127', '\040', '\167', '\141', '\040', '\061', + '\012', '\166', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\127', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\142', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\127', '\155', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\170', '\131', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\121', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\116', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\144', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\131', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\154', '\130', '\040', '\154', '\145', '\040', '\061', + '\012', '\162', '\167', '\106', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\132', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\142', '\112', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\141', '\102', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\126', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\146', '\103', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\170', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\124', '\142', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\157', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\124', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\102', '\153', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\145', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\102', '\145', '\040', '\144', '\145', '\040', '\061', + '\012', '\144', '\160', '\103', '\040', '\144', '\145', '\040', '\061', + '\012', '\153', '\160', '\127', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\167', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\162', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\165', '\130', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\157', '\171', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\146', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\113', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\150', '\123', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\142', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\143', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\102', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\147', '\132', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\120', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\102', '\146', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\162', '\170', '\103', '\040', '\145', '\162', '\040', '\061', + '\012', '\163', '\114', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\150', '\107', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\166', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\122', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\116', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\104', '\146', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\122', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\150', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\116', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\167', '\101', '\040', '\167', '\141', '\040', '\061', + '\012', '\167', '\115', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\123', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\146', '\104', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\107', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\130', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\121', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\117', '\171', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\166', '\102', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\126', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\110', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\163', '\142', '\125', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\106', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\153', '\146', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\162', '\166', '\127', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\106', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\114', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\157', '\121', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\146', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\162', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\112', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\120', '\156', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\116', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\146', '\105', '\040', '\156', '\171', '\040', '\061', + '\012', '\153', '\155', '\111', '\040', '\153', '\141', '\040', '\061', + '\012', '\107', '\155', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\170', '\123', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\165', '\125', '\040', '\165', '\156', '\040', '\061', + '\012', '\161', '\131', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\113', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\150', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\157', '\146', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\160', '\162', '\110', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\130', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\121', '\155', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\127', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\172', '\103', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\131', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\141', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\147', '\142', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\123', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\162', '\121', '\172', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\153', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\126', '\156', '\154', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\164', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\115', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\171', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\161', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\156', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\106', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\153', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\127', '\143', '\153', '\040', '\143', '\150', '\040', '\061', + '\012', '\146', '\115', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\172', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\112', '\172', '\040', '\157', '\156', '\040', '\061', + '\012', '\170', '\166', '\110', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\121', '\171', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\131', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\170', '\104', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\104', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\120', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\162', '\110', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\171', '\115', '\040', '\151', '\156', '\040', '\061', + '\012', '\171', '\170', '\104', '\040', '\156', '\171', '\040', '\061', + '\012', '\153', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\130', '\166', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\155', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\153', '\116', '\040', '\153', '\141', '\040', '\061', + '\012', '\154', '\106', '\152', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\155', '\125', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\132', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\101', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\102', '\143', '\171', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\161', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\122', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\162', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\101', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\132', '\152', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\170', '\106', '\040', '\156', '\171', '\040', '\061', + '\012', '\166', '\132', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\120', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\103', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\131', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\102', '\160', '\040', '\164', '\150', '\040', '\061', + '\012', '\112', '\142', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\146', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\155', '\142', '\112', '\040', '\155', '\145', '\040', '\061', + '\012', '\146', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\167', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\165', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\131', '\172', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\104', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\155', '\111', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\165', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\130', '\146', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\120', '\171', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\117', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\116', '\155', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\104', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\103', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\152', '\120', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\162', '\105', '\040', '\141', '\156', '\040', '\061', + '\012', '\113', '\155', '\167', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\147', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\172', '\122', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\125', '\151', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\156', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\132', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\123', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\101', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\132', '\166', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\160', '\122', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\116', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\102', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\115', '\152', '\171', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\152', '\132', '\040', '\151', '\152', '\040', '\061', + '\012', '\164', '\114', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\131', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\167', '\142', '\117', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\130', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\113', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\165', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\154', '\121', '\040', '\154', '\145', '\040', '\061', + '\012', '\171', '\146', '\102', '\040', '\156', '\171', '\040', '\061', + '\012', '\121', '\163', '\153', '\040', '\163', '\164', '\040', '\061', + '\012', '\125', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\155', '\131', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\130', '\167', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\126', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\111', '\167', '\040', '\156', '\147', '\040', '\061', + '\012', '\110', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\147', '\171', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\121', '\166', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\170', '\164', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\143', '\145', '\040', '\143', '\150', '\040', '\061', + '\012', '\116', '\152', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\107', '\164', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\112', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\104', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\114', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\157', '\145', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\166', '\131', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\142', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\124', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\141', '\124', '\160', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\144', '\124', '\040', '\144', '\145', '\040', '\061', + '\012', '\127', '\153', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\170', '\101', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\104', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\146', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\162', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\110', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\126', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\115', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\126', '\155', '\040', '\163', '\164', '\040', '\061', + '\012', '\156', '\172', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\166', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\132', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\156', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\132', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\120', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\116', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\162', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\114', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\126', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\105', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\161', '\103', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\132', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\116', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\106', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\170', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\120', '\152', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\131', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\106', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\166', '\114', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\112', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\126', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\143', '\132', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\143', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\114', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\171', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\150', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\164', '\113', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\122', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\103', '\170', '\040', '\142', '\145', '\040', '\061', + '\012', '\156', '\112', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\152', '\167', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\120', '\144', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\170', '\105', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\114', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\172', '\126', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\107', '\161', '\040', '\154', '\145', '\040', '\061', + '\012', '\121', '\142', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\142', '\131', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\123', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\160', '\122', '\040', '\160', '\162', '\040', '\061', + '\012', '\147', '\103', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\151', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\146', '\170', '\040', '\146', '\157', '\040', '\061', + '\012', '\156', '\152', '\111', '\040', '\156', '\144', '\040', '\061', + '\012', '\131', '\160', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\154', '\170', '\124', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\126', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\112', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\170', '\101', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\104', '\154', '\040', '\156', '\147', '\040', '\061', + '\012', '\105', '\141', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\143', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\107', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\114', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\153', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\142', '\113', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\116', '\170', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\122', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\162', '\125', '\040', '\145', '\162', '\040', '\061', + '\012', '\146', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\172', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\143', '\156', '\040', '\143', '\150', '\040', '\061', + '\012', '\161', '\142', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\126', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\166', '\106', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\112', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\170', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\151', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\115', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\142', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\147', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\155', '\123', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\132', '\152', '\155', '\040', '\151', '\152', '\040', '\061', + '\012', '\116', '\152', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\144', '\161', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\131', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\113', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\170', '\125', '\040', '\143', '\150', '\040', '\061', + '\012', '\103', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\146', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\164', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\162', '\120', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\105', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\170', '\117', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\132', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\142', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\130', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\143', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\153', '\117', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\116', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\130', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\126', '\153', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\166', '\106', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\106', '\170', '\040', '\170', '\145', '\040', '\061', + '\012', '\144', '\123', '\152', '\040', '\144', '\145', '\040', '\061', + '\012', '\170', '\120', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\157', '\106', '\160', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\101', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\107', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\172', '\103', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\111', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\114', '\150', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\167', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\160', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\101', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\102', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\113', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\120', '\146', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\165', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\124', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\164', '\127', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\144', '\116', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\162', '\116', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\154', '\123', '\040', '\154', '\145', '\040', '\061', + '\012', '\161', '\105', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\161', '\122', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\156', '\155', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\130', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\116', '\040', '\146', '\157', '\040', '\061', + '\012', '\142', '\166', '\114', '\040', '\166', '\141', '\040', '\061', + '\012', '\157', '\107', '\146', '\040', '\157', '\156', '\040', '\061', + '\012', '\150', '\132', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\146', '\110', '\040', '\156', '\171', '\040', '\061', + '\012', '\144', '\143', '\105', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\147', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\167', '\162', '\102', '\040', '\145', '\162', '\040', '\061', + '\012', '\153', '\127', '\155', '\040', '\153', '\141', '\040', '\061', + '\012', '\123', '\150', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\167', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\166', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\121', '\147', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\116', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\110', '\160', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\154', '\106', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\161', '\172', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\147', '\107', '\040', '\156', '\147', '\040', '\061', + '\012', '\153', '\144', '\132', '\040', '\144', '\145', '\040', '\061', + '\012', '\145', '\152', '\130', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\170', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\166', '\124', '\040', '\166', '\141', '\040', '\061', + '\012', '\113', '\161', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\155', '\142', '\040', '\155', '\145', '\040', '\061', + '\012', '\170', '\106', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\121', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\120', '\147', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\160', '\114', '\040', '\160', '\162', '\040', '\061', + '\012', '\142', '\167', '\105', '\040', '\167', '\141', '\040', '\061', + '\012', '\170', '\110', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\155', '\106', '\040', '\151', '\152', '\040', '\061', + '\012', '\111', '\170', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\171', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\126', '\166', '\040', '\145', '\162', '\040', '\061', + '\012', '\131', '\164', '\167', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\160', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\160', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\152', '\130', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\150', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\146', '\126', '\040', '\161', '\165', '\040', '\061', + '\012', '\112', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\124', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\102', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\152', '\122', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\147', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\155', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\103', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\160', '\131', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\153', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\166', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\126', '\146', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\154', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\116', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\142', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\161', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\162', '\104', '\040', '\145', '\162', '\040', '\061', + '\012', '\154', '\142', '\107', '\040', '\154', '\145', '\040', '\061', + '\012', '\170', '\150', '\106', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\170', '\132', '\040', '\153', '\141', '\040', '\061', + '\012', '\111', '\165', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\106', '\170', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\126', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\143', '\107', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\127', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\102', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\171', '\112', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\143', '\172', '\114', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\125', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\160', '\132', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\164', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\170', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\144', '\131', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\151', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\146', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\126', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\146', '\121', '\040', '\166', '\141', '\040', '\061', + '\012', '\150', '\166', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\144', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\110', '\172', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\131', '\163', '\040', '\143', '\150', '\040', '\061', + '\012', '\106', '\164', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\160', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\114', '\154', '\144', '\040', '\154', '\145', '\040', '\061', + '\012', '\107', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\144', '\122', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\130', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\163', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\116', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\152', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\126', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\112', '\155', '\170', '\040', '\155', '\145', '\040', '\061', + '\012', '\160', '\104', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\151', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\114', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\156', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\124', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\116', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\125', '\141', '\167', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\172', '\116', '\040', '\163', '\172', '\040', '\061', + '\012', '\147', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\152', '\115', '\040', '\151', '\152', '\040', '\061', + '\012', '\154', '\156', '\113', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\170', '\142', '\040', '\163', '\172', '\040', '\061', + '\012', '\153', '\143', '\123', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\152', '\115', '\040', '\141', '\156', '\040', '\061', + '\012', '\107', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\154', '\156', '\132', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\150', '\113', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\160', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\161', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\152', '\130', '\040', '\151', '\156', '\040', '\061', + '\012', '\152', '\107', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\142', '\170', '\111', '\040', '\142', '\145', '\040', '\061', + '\012', '\166', '\130', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\162', '\167', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\167', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\156', '\102', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\166', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\170', '\102', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\126', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\103', '\172', '\170', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\171', '\126', '\040', '\156', '\171', '\040', '\061', + '\012', '\143', '\130', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\121', '\156', '\146', '\040', '\141', '\156', '\040', '\061', + '\012', '\131', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\161', '\110', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\142', '\131', '\040', '\144', '\145', '\040', '\061', + '\012', '\123', '\161', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\113', '\161', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\160', '\112', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\142', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\106', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\113', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\162', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\146', '\161', '\116', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\146', '\101', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\157', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\117', '\167', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\156', '\154', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\111', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\161', '\162', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\167', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\161', '\141', '\127', '\040', '\141', '\156', '\040', '\061', + '\012', '\150', '\143', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\153', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\116', '\144', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\172', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\170', '\102', '\040', '\156', '\147', '\040', '\061', + '\012', '\102', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\124', '\146', '\040', '\166', '\141', '\040', '\061', + '\012', '\152', '\106', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\165', '\146', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\160', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\165', '\132', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\124', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\107', '\154', '\167', '\040', '\154', '\145', '\040', '\061', + '\012', '\113', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\103', '\170', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\152', '\132', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\123', '\161', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\171', '\120', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\145', '\121', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\111', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\104', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\111', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\116', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\117', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\153', '\115', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\106', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\143', '\146', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\113', '\152', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\153', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\112', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\120', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\157', '\172', '\121', '\040', '\157', '\156', '\040', '\061', + '\012', '\104', '\154', '\153', '\040', '\154', '\145', '\040', '\061', + '\012', '\166', '\130', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\164', '\131', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\127', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\121', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\124', '\160', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\150', '\143', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\165', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\156', '\142', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\121', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\147', '\132', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\165', '\127', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\115', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\132', '\143', '\144', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\102', '\160', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\172', '\131', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\167', '\103', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\103', '\161', '\171', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\152', '\106', '\040', '\143', '\150', '\040', '\061', + '\012', '\107', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\155', '\143', '\127', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\161', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\165', '\112', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\125', '\152', '\040', '\151', '\156', '\040', '\061', + '\012', '\166', '\153', '\122', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\147', '\111', '\040', '\156', '\147', '\040', '\061', + '\012', '\166', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\144', '\156', '\040', '\144', '\145', '\040', '\061', + '\012', '\163', '\152', '\106', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\120', '\166', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\122', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\154', '\126', '\040', '\154', '\145', '\040', '\061', + '\012', '\163', '\142', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\155', '\146', '\124', '\040', '\155', '\145', '\040', '\061', + '\012', '\144', '\142', '\126', '\040', '\144', '\145', '\040', '\061', + '\012', '\106', '\155', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\147', '\146', '\125', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\142', '\102', '\040', '\143', '\150', '\040', '\061', + '\012', '\131', '\170', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\104', '\167', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\167', '\147', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\163', '\120', '\166', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\156', '\142', '\110', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\106', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\161', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\106', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\105', '\142', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\106', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\105', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\143', '\111', '\040', '\143', '\150', '\040', '\061', + '\012', '\142', '\115', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\132', '\167', '\040', '\163', '\172', '\040', '\061', + '\012', '\150', '\152', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\113', '\170', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\103', '\040', '\156', '\147', '\040', '\061', + '\012', '\143', '\156', '\114', '\040', '\141', '\156', '\040', '\061', + '\012', '\106', '\144', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\107', '\146', '\040', '\142', '\145', '\040', '\061', + '\012', '\123', '\152', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\142', '\115', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\130', '\167', '\040', '\166', '\141', '\040', '\061', + '\012', '\107', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\103', '\167', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\163', '\121', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\154', '\120', '\146', '\040', '\154', '\145', '\040', '\061', + '\012', '\156', '\155', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\126', '\144', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\143', '\130', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\152', '\124', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\167', '\105', '\040', '\155', '\145', '\040', '\061', + '\012', '\161', '\114', '\155', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\110', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\164', '\156', '\040', '\164', '\150', '\040', '\061', + '\012', '\116', '\164', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\147', '\127', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\120', '\161', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\160', '\120', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\122', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\160', '\114', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\156', '\104', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\160', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\144', '\172', '\123', '\040', '\163', '\172', '\040', '\061', + '\012', '\164', '\132', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\171', '\147', '\115', '\040', '\156', '\147', '\040', '\061', + '\012', '\142', '\170', '\103', '\040', '\142', '\145', '\040', '\061', + '\012', '\144', '\146', '\125', '\040', '\144', '\145', '\040', '\061', + '\012', '\142', '\155', '\102', '\040', '\155', '\145', '\040', '\061', + '\012', '\154', '\102', '\172', '\040', '\154', '\145', '\040', '\061', + '\012', '\147', '\112', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\131', '\153', '\166', '\040', '\153', '\141', '\040', '\061', + '\012', '\132', '\144', '\153', '\040', '\144', '\145', '\040', '\061', + '\012', '\167', '\156', '\121', '\040', '\141', '\156', '\040', '\061', + '\012', '\164', '\132', '\152', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\146', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\115', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\162', '\125', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\161', '\167', '\160', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\143', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\146', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\165', '\157', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\103', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\151', '\121', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\102', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\126', '\142', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\152', '\125', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\160', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\166', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\132', '\160', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\160', '\151', '\126', '\040', '\151', '\156', '\040', '\061', + '\012', '\153', '\142', '\120', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\161', '\115', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\126', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\161', '\132', '\162', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\170', '\117', '\040', '\164', '\150', '\040', '\061', + '\012', '\167', '\124', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\112', '\172', '\146', '\040', '\163', '\172', '\040', '\061', + '\012', '\121', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\165', '\131', '\166', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\167', '\113', '\040', '\160', '\162', '\040', '\061', + '\012', '\150', '\166', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\104', '\161', '\145', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\146', '\111', '\040', '\160', '\162', '\040', '\061', + '\012', '\155', '\150', '\126', '\040', '\164', '\150', '\040', '\061', + '\012', '\152', '\147', '\105', '\040', '\156', '\147', '\040', '\061', + '\012', '\162', '\143', '\121', '\040', '\143', '\150', '\040', '\061', + '\012', '\153', '\155', '\124', '\040', '\153', '\141', '\040', '\061', + '\012', '\127', '\172', '\152', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\116', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\120', '\142', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\172', '\166', '\102', '\040', '\163', '\172', '\040', '\061', + '\012', '\170', '\150', '\112', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\166', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\116', '\166', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\163', '\167', '\132', '\040', '\163', '\164', '\040', '\061', + '\012', '\152', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\155', '\146', '\114', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\153', '\114', '\040', '\163', '\172', '\040', '\061', + '\012', '\152', '\126', '\160', '\040', '\151', '\152', '\040', '\061', + '\012', '\104', '\153', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\170', '\165', '\131', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\110', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\123', '\146', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\172', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\154', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\115', '\144', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\147', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\146', '\170', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\164', '\122', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\106', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\105', '\157', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\157', '\131', '\040', '\157', '\156', '\040', '\061', + '\012', '\101', '\167', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\124', '\170', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\143', '\111', '\147', '\040', '\143', '\150', '\040', '\061', + '\012', '\170', '\125', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\122', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\170', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\151', '\120', '\146', '\040', '\151', '\156', '\040', '\061', + '\012', '\145', '\152', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\130', '\164', '\163', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\146', '\124', '\040', '\160', '\162', '\040', '\061', + '\012', '\120', '\161', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\163', '\126', '\040', '\163', '\164', '\040', '\061', + '\012', '\171', '\160', '\103', '\040', '\160', '\162', '\040', '\061', + '\012', '\167', '\115', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\105', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\170', '\131', '\040', '\166', '\141', '\040', '\061', + '\012', '\146', '\125', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\104', '\146', '\146', '\040', '\146', '\157', '\040', '\061', + '\012', '\147', '\161', '\121', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\115', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\166', '\112', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\146', '\120', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\114', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\144', '\115', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\116', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\141', '\107', '\166', '\040', '\141', '\156', '\040', '\061', + '\012', '\166', '\166', '\104', '\040', '\166', '\141', '\040', '\061', + '\012', '\144', '\112', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\170', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\127', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\120', '\166', '\170', '\040', '\166', '\141', '\040', '\061', + '\012', '\162', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\122', '\144', '\040', '\163', '\172', '\040', '\061', + '\012', '\113', '\147', '\166', '\040', '\156', '\147', '\040', '\061', + '\012', '\130', '\166', '\171', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\132', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\153', '\160', '\113', '\040', '\153', '\141', '\040', '\061', + '\012', '\120', '\146', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\167', '\125', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\167', '\127', '\170', '\040', '\167', '\141', '\040', '\061', + '\012', '\152', '\120', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\147', '\114', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\112', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\147', '\120', '\170', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\110', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\166', '\112', '\142', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\150', '\102', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\121', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\105', '\157', '\141', '\040', '\141', '\156', '\040', '\061', + '\012', '\160', '\152', '\117', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\106', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\163', '\130', '\157', '\040', '\157', '\156', '\040', '\061', + '\012', '\167', '\142', '\131', '\040', '\167', '\141', '\040', '\061', + '\012', '\143', '\152', '\117', '\040', '\143', '\150', '\040', '\061', + '\012', '\155', '\154', '\132', '\040', '\154', '\145', '\040', '\061', + '\012', '\142', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\153', '\152', '\120', '\040', '\151', '\152', '\040', '\061', + '\012', '\171', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\126', '\152', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\116', '\166', '\040', '\166', '\141', '\040', '\061', + '\012', '\147', '\152', '\127', '\040', '\156', '\147', '\040', '\061', + '\012', '\156', '\130', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\144', '\161', '\112', '\040', '\161', '\165', '\040', '\061', + '\012', '\110', '\156', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\171', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\153', '\166', '\102', '\040', '\153', '\141', '\040', '\061', + '\012', '\161', '\171', '\102', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\172', '\147', '\120', '\040', '\156', '\147', '\040', '\061', + '\012', '\132', '\172', '\153', '\040', '\163', '\172', '\040', '\061', + '\012', '\146', '\115', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\172', '\131', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\142', '\124', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\117', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\163', '\101', '\040', '\163', '\164', '\040', '\061', + '\012', '\147', '\114', '\152', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\170', '\110', '\040', '\163', '\172', '\040', '\061', + '\012', '\143', '\114', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\104', '\156', '\153', '\040', '\141', '\156', '\040', '\061', + '\012', '\172', '\111', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\153', '\160', '\112', '\040', '\153', '\141', '\040', '\061', + '\012', '\170', '\162', '\113', '\040', '\145', '\162', '\040', '\061', + '\012', '\145', '\111', '\142', '\040', '\145', '\162', '\040', '\061', + '\012', '\112', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\102', '\161', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\130', '\147', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\152', '\153', '\040', '\151', '\152', '\040', '\061', + '\012', '\144', '\122', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\164', '\152', '\132', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\121', '\154', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\171', '\127', '\040', '\151', '\156', '\040', '\061', + '\012', '\112', '\167', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\112', '\160', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\102', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\172', '\162', '\107', '\040', '\145', '\162', '\040', '\061', + '\012', '\150', '\127', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\144', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\161', '\163', '\132', '\040', '\161', '\165', '\040', '\061', + '\012', '\143', '\121', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\143', '\143', '\116', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\167', '\115', '\040', '\167', '\141', '\040', '\061', + '\012', '\147', '\142', '\130', '\040', '\156', '\147', '\040', '\061', + '\012', '\164', '\146', '\124', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\167', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\121', '\142', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\171', '\145', '\131', '\040', '\145', '\162', '\040', '\061', + '\012', '\141', '\125', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\161', '\110', '\167', '\040', '\161', '\165', '\040', '\061', + '\012', '\106', '\150', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\106', '\156', '\147', '\040', '\141', '\156', '\040', '\061', + '\012', '\154', '\166', '\111', '\040', '\154', '\145', '\040', '\061', + '\012', '\152', '\103', '\146', '\040', '\151', '\152', '\040', '\061', + '\012', '\150', '\161', '\110', '\040', '\164', '\150', '\040', '\061', + '\012', '\164', '\124', '\161', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\146', '\111', '\040', '\163', '\164', '\040', '\061', + '\012', '\166', '\163', '\115', '\040', '\163', '\164', '\040', '\061', + '\012', '\154', '\104', '\160', '\040', '\154', '\145', '\040', '\061', + '\012', '\167', '\112', '\142', '\040', '\167', '\141', '\040', '\061', + '\012', '\142', '\150', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\122', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\164', '\123', '\040', '\164', '\150', '\040', '\061', + '\012', '\132', '\167', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\112', '\142', '\150', '\040', '\164', '\150', '\040', '\061', + '\012', '\150', '\110', '\142', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\104', '\171', '\040', '\160', '\162', '\040', '\061', + '\012', '\163', '\152', '\104', '\040', '\163', '\164', '\040', '\061', + '\012', '\117', '\171', '\160', '\040', '\160', '\162', '\040', '\061', + '\012', '\161', '\167', '\104', '\040', '\161', '\165', '\040', '\061', + '\012', '\152', '\142', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\160', '\107', '\040', '\166', '\141', '\040', '\061', + '\012', '\127', '\152', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\160', '\102', '\040', '\166', '\141', '\040', '\061', + '\012', '\141', '\130', '\161', '\040', '\141', '\156', '\040', '\061', + '\012', '\155', '\127', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\110', '\151', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\171', '\116', '\040', '\156', '\171', '\040', '\061', + '\012', '\155', '\142', '\121', '\040', '\155', '\145', '\040', '\061', + '\012', '\171', '\167', '\103', '\040', '\167', '\141', '\040', '\061', + '\012', '\157', '\126', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\155', '\132', '\040', '\155', '\145', '\040', '\061', + '\012', '\163', '\154', '\117', '\040', '\154', '\145', '\040', '\061', + '\012', '\146', '\130', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\153', '\131', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\160', '\126', '\165', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\153', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\102', '\162', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\103', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\143', '\170', '\040', '\143', '\150', '\040', '\061', + '\012', '\172', '\115', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\122', '\167', '\040', '\143', '\150', '\040', '\061', + '\012', '\147', '\172', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\142', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\152', '\165', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\170', '\123', '\172', '\040', '\163', '\172', '\040', '\061', + '\012', '\126', '\147', '\172', '\040', '\156', '\147', '\040', '\061', + '\012', '\157', '\115', '\167', '\040', '\157', '\156', '\040', '\061', + '\012', '\146', '\160', '\105', '\040', '\160', '\162', '\040', '\061', + '\012', '\170', '\152', '\130', '\040', '\151', '\152', '\040', '\061', + '\012', '\161', '\103', '\147', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\167', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\165', '\121', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\161', '\120', '\153', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\152', '\104', '\040', '\151', '\152', '\040', '\061', + '\012', '\121', '\172', '\155', '\040', '\163', '\172', '\040', '\061', + '\012', '\163', '\111', '\160', '\040', '\163', '\164', '\040', '\061', + '\012', '\165', '\157', '\107', '\040', '\161', '\165', '\040', '\061', + '\012', '\162', '\126', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\143', '\142', '\113', '\040', '\143', '\150', '\040', '\061', + '\012', '\150', '\130', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\113', '\163', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\153', '\142', '\106', '\040', '\153', '\141', '\040', '\061', + '\012', '\167', '\102', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\151', '\131', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\163', '\147', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\107', '\172', '\166', '\040', '\163', '\172', '\040', '\061', + '\012', '\171', '\166', '\105', '\040', '\166', '\141', '\040', '\061', + '\012', '\170', '\113', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\127', '\146', '\040', '\163', '\164', '\040', '\061', + '\012', '\172', '\102', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\171', '\153', '\110', '\040', '\153', '\141', '\040', '\061', + '\012', '\166', '\152', '\110', '\040', '\151', '\152', '\040', '\061', + '\012', '\167', '\150', '\111', '\040', '\164', '\150', '\040', '\061', + '\012', '\166', '\120', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\132', '\150', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\151', '\112', '\170', '\040', '\151', '\156', '\040', '\061', + '\012', '\143', '\132', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\115', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\143', '\125', '\152', '\040', '\143', '\150', '\040', '\061', + '\012', '\166', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\143', '\112', '\040', '\143', '\150', '\040', '\061', + '\012', '\102', '\143', '\155', '\040', '\143', '\150', '\040', '\061', + '\012', '\152', '\130', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\170', '\157', '\111', '\040', '\157', '\156', '\040', '\061', + '\012', '\132', '\153', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\130', '\172', '\162', '\040', '\145', '\162', '\040', '\061', + '\012', '\171', '\172', '\115', '\040', '\163', '\172', '\040', '\061', + '\012', '\161', '\152', '\130', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\116', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\160', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\164', '\130', '\144', '\040', '\164', '\150', '\040', '\061', + '\012', '\130', '\153', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\110', '\163', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\142', '\161', '\125', '\040', '\161', '\165', '\040', '\061', + '\012', '\163', '\147', '\106', '\040', '\156', '\147', '\040', '\061', + '\012', '\144', '\120', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\112', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\125', '\147', '\160', '\040', '\156', '\147', '\040', '\061', + '\012', '\122', '\170', '\151', '\040', '\151', '\156', '\040', '\061', + '\012', '\113', '\167', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\172', '\153', '\104', '\040', '\163', '\172', '\040', '\061', + '\012', '\122', '\161', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\160', '\112', '\142', '\040', '\160', '\162', '\040', '\061', + '\012', '\146', '\143', '\126', '\040', '\143', '\150', '\040', '\061', + '\012', '\151', '\126', '\144', '\040', '\151', '\156', '\040', '\061', + '\012', '\142', '\102', '\160', '\040', '\142', '\145', '\040', '\061', + '\012', '\117', '\152', '\167', '\040', '\151', '\152', '\040', '\061', + '\012', '\166', '\132', '\154', '\040', '\154', '\145', '\040', '\061', + '\012', '\111', '\171', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\146', '\153', '\125', '\040', '\153', '\141', '\040', '\061', + '\012', '\113', '\143', '\161', '\040', '\143', '\150', '\040', '\061', + '\012', '\144', '\102', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\115', '\161', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\115', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\127', '\167', '\163', '\040', '\163', '\164', '\040', '\061', + '\012', '\164', '\161', '\130', '\040', '\164', '\150', '\040', '\061', + '\012', '\170', '\150', '\104', '\040', '\164', '\150', '\040', '\061', + '\012', '\162', '\116', '\154', '\040', '\145', '\162', '\040', '\061', + '\012', '\160', '\127', '\144', '\040', '\144', '\145', '\040', '\061', + '\012', '\152', '\162', '\126', '\040', '\145', '\162', '\040', '\061', + '\012', '\102', '\155', '\152', '\040', '\151', '\152', '\040', '\061', + '\012', '\110', '\155', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\166', '\154', '\110', '\040', '\154', '\145', '\040', '\061', + '\012', '\115', '\170', '\142', '\040', '\142', '\145', '\040', '\061', + '\012', '\171', '\171', '\123', '\040', '\156', '\171', '\040', '\061', + '\012', '\161', '\166', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\146', '\166', '\130', '\040', '\166', '\141', '\040', '\061', + '\012', '\126', '\146', '\145', '\040', '\145', '\162', '\040', '\061', + '\012', '\103', '\144', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\113', '\147', '\145', '\040', '\156', '\147', '\040', '\061', + '\012', '\121', '\145', '\152', '\040', '\145', '\162', '\040', '\061', + '\012', '\162', '\166', '\132', '\040', '\145', '\162', '\040', '\061', + '\012', '\166', '\172', '\111', '\040', '\163', '\172', '\040', '\061', + '\012', '\144', '\104', '\156', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\167', '\123', '\040', '\141', '\156', '\040', '\061', + '\012', '\121', '\143', '\142', '\040', '\143', '\150', '\040', '\061', + '\012', '\167', '\153', '\126', '\040', '\153', '\141', '\040', '\061', + '\012', '\165', '\103', '\170', '\040', '\161', '\165', '\040', '\061', + '\012', '\111', '\147', '\153', '\040', '\156', '\147', '\040', '\061', + '\012', '\126', '\160', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\102', '\155', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\144', '\121', '\040', '\144', '\145', '\040', '\061', + '\012', '\146', '\147', '\121', '\040', '\156', '\147', '\040', '\061', + '\012', '\171', '\121', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\147', '\170', '\110', '\040', '\156', '\147', '\040', '\061', + '\012', '\160', '\161', '\113', '\040', '\161', '\165', '\040', '\061', + '\012', '\154', '\122', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\130', '\144', '\166', '\040', '\144', '\145', '\040', '\061', + '\012', '\150', '\104', '\172', '\040', '\164', '\150', '\040', '\061', + '\012', '\144', '\106', '\167', '\040', '\144', '\145', '\040', '\061', + '\012', '\161', '\121', '\165', '\040', '\165', '\156', '\040', '\061', + '\012', '\170', '\142', '\104', '\040', '\142', '\145', '\040', '\061', + '\012', '\161', '\155', '\105', '\040', '\161', '\165', '\040', '\061', + '\012', '\155', '\127', '\155', '\040', '\155', '\145', '\040', '\061', + '\012', '\152', '\102', '\142', '\040', '\151', '\152', '\040', '\061', + '\012', '\152', '\130', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\146', '\170', '\125', '\040', '\146', '\157', '\040', '\061', + '\012', '\130', '\167', '\143', '\040', '\143', '\150', '\040', '\061', + '\012', '\114', '\161', '\146', '\040', '\161', '\165', '\040', '\061', + '\012', '\150', '\143', '\120', '\040', '\164', '\150', '\040', '\061', + '\012', '\160', '\146', '\102', '\040', '\160', '\162', '\040', '\061', + '\012', '\166', '\123', '\147', '\040', '\156', '\147', '\040', '\061', + '\012', '\170', '\112', '\167', '\040', '\167', '\141', '\040', '\061', + '\012', '\155', '\122', '\146', '\040', '\155', '\145', '\040', '\061', + '\012', '\150', '\161', '\127', '\040', '\164', '\150', '\040', '\061', + '\012', '\156', '\126', '\142', '\040', '\141', '\156', '\040', '\061', + '\012', '\143', '\105', '\165', '\040', '\143', '\150', '\040', '\061', + '\012', '\156', '\146', '\116', '\040', '\141', '\156', '\040', '\061', + '\012', '\156', '\126', '\152', '\040', '\141', '\156', '\040', '\061', + '\012', '\122', '\167', '\153', '\040', '\153', '\141', '\040', '\061', + '\012', '\156', '\155', '\107', '\040', '\141', '\156', '\040', '\061', + '\012', '\157', '\104', '\164', '\040', '\164', '\150', '\040', '\061', + '\012', '\153', '\120', '\142', '\040', '\153', '\141', '\040', '\061', + '\012', '\147', '\161', '\127', '\040', '\161', '\165', '\040', '\061', + '\012', '\121', '\150', '\146', '\040', '\164', '\150', '\040', '\061', + '\012', '\161', '\132', '\154', '\040', '\161', '\165', '\040', '\061', + '\012', '\172', '\110', '\161', '\040', '\161', '\165', '\040', '\061', + '\012', '\151', '\130', '\154', '\040', '\151', '\156', '\040', '\061', + '\012', +}; + +extern const int ksizeofUniversalAmbigsFile = sizeof(kUniversalAmbigsFile); + +} // namespace tesseract diff --git a/3rdparty/hgOCR/include/ccutil/universalambigs.h b/3rdparty/hgOCR/include/ccutil/universalambigs.h new file mode 100644 index 00000000..bcc633e8 --- /dev/null +++ b/3rdparty/hgOCR/include/ccutil/universalambigs.h @@ -0,0 +1,26 @@ +/////////////////////////////////////////////////////////////////////// +// File: universalambigs.h +// Description: Data for a universal ambigs file that is useful for +// any language. +// Author: Ray Smith +// Created: Mon Mar 18 11:26:00 PDT 2013 +// +// (C) Copyright 2013, Google Inc. +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +/////////////////////////////////////////////////////////////////////// + +namespace tesseract { + +extern const char kUniversalAmbigsFile[]; +extern const int ksizeofUniversalAmbigsFile; + +} // namespace tesseract diff --git a/3rdparty/hgOCR/leptonica/adaptmap.c b/3rdparty/hgOCR/leptonica/adaptmap.c new file mode 100644 index 00000000..9a782fd5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/adaptmap.c @@ -0,0 +1,2947 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file adaptmap.c + *
+ *
+ *  -------------------------------------------------------------------
+ *
+ *  Image binarization algorithms are found in:
+ *     grayquant.c:   standard, simple, general grayscale quantization
+ *     adaptmap.c:    local adaptive; mostly gray-to-gray in preparation
+ *                    for binarization
+ *     binarize.c:    special binarization methods, locally adaptive.
+ *
+ *  -------------------------------------------------------------------
+ *
+ *      Clean background to white using background normalization
+ *          PIX       *pixCleanBackgroundToWhite()
+ *
+ *      Adaptive background normalization (top-level functions)
+ *          PIX       *pixBackgroundNormSimple()     8 and 32 bpp
+ *          PIX       *pixBackgroundNorm()           8 and 32 bpp
+ *          PIX       *pixBackgroundNormMorph()      8 and 32 bpp
+ *
+ *      Arrays of inverted background values for normalization (16 bpp)
+ *          l_int32    pixBackgroundNormGrayArray()   8 bpp input
+ *          l_int32    pixBackgroundNormRGBArrays()   32 bpp input
+ *          l_int32    pixBackgroundNormGrayArrayMorph()   8 bpp input
+ *          l_int32    pixBackgroundNormRGBArraysMorph()   32 bpp input
+ *
+ *      Measurement of local background
+ *          l_int32    pixGetBackgroundGrayMap()        8 bpp
+ *          l_int32    pixGetBackgroundRGBMap()         32 bpp
+ *          l_int32    pixGetBackgroundGrayMapMorph()   8 bpp
+ *          l_int32    pixGetBackgroundRGBMapMorph()    32 bpp
+ *          l_int32    pixFillMapHoles()
+ *          PIX       *pixExtendByReplication()         8 bpp
+ *          l_int32    pixSmoothConnectedRegions()      8 bpp
+ *
+ *      Measurement of local foreground
+ *          l_int32    pixGetForegroundGrayMap()        8 bpp
+ *
+ *      Generate inverted background map for each component
+ *          PIX       *pixGetInvBackgroundMap()   16 bpp
+ *
+ *      Apply inverse background map to image
+ *          PIX       *pixApplyInvBackgroundGrayMap()   8 bpp
+ *          PIX       *pixApplyInvBackgroundRGBMap()    32 bpp
+ *
+ *      Apply variable map
+ *          PIX       *pixApplyVariableGrayMap()        8 bpp
+ *
+ *      Non-adaptive (global) mapping
+ *          PIX       *pixGlobalNormRGB()               32 bpp or cmapped
+ *          PIX       *pixGlobalNormNoSatRGB()          32 bpp
+ *
+ *      Adaptive threshold spread normalization
+ *          l_int32    pixThresholdSpreadNorm()         8 bpp
+ *
+ *      Adaptive background normalization (flexible adaptaption)
+ *          PIX       *pixBackgroundNormFlex()          8 bpp
+ *
+ *      Adaptive contrast normalization
+ *          PIX             *pixContrastNorm()          8 bpp
+ *          l_int32          pixMinMaxTiles()
+ *          l_int32          pixSetLowContrast()
+ *          PIX             *pixLinearTRCTiled()
+ *          static l_int32  *iaaGetLinearTRC()
+ *
+ *  Background normalization is done by generating a reduced map (or set
+ *  of maps) representing the estimated background value of the
+ *  input image, and using this to shift the pixel values so that
+ *  this background value is set to some constant value.
+ *
+ *  Specifically, normalization has 3 steps:
+ *    (1) Generate a background map at a reduced scale.
+ *    (2) Make the array of inverted background values by inverting
+ *        the map.  The result is an array of local multiplicative factors.
+ *    (3) Apply this inverse background map to the image
+ *
+ *  The inverse background arrays can be generated in two different ways here:
+ *    (1) Remove the 'foreground' pixels and average over the remaining
+ *        pixels in each tile.  Propagate values into tiles where
+ *        values have not been assigned, either because there was not
+ *        enough background in the tile or because the tile is covered
+ *        by a foreground region described by an image mask.
+ *        After the background map is made, the inverse map is generated by
+ *        smoothing over some number of adjacent tiles
+ *        (block convolution) and then inverting.
+ *    (2) Remove the foreground pixels using a morphological closing
+ *        on a subsampled version of the image.  Propagate values
+ *        into pixels covered by an optional image mask.  Invert the
+ *        background map without preconditioning by convolutional smoothing.
+ *
+ *  Other methods for adaptively normalizing the image are also given here.
+ *
+ *  (1) pixThresholdSpreadNorm() computes a local threshold over the image
+ *      and normalizes the input pixel values so that this computed threshold
+ *      is a constant across the entire image.
+ *
+ *  (2) pixContrastNorm() computes and applies a local TRC so that the
+ *      local dynamic range is expanded to the full 8 bits, where the
+ *      darkest pixels are mapped to 0 and the lightest to 255.  This is
+ *      useful for improving the appearance of pages with very light
+ *      foreground or very dark background, and where the local TRC
+ *      function doesn't change rapidly with position.
+ * 
+ */ + +#include "allheaders.h" + + /* Default input parameters for pixBackgroundNormSimple() + * Notes: + * (1) mincount must never exceed the tile area (width * height) + * (2) bgval must be sufficiently below 255 to avoid accidental + * saturation; otherwise it should be large to avoid + * shrinking the dynamic range + * (3) results should otherwise not be sensitive to these values + */ +static const l_int32 DefaultTileWidth = 10; /*!< default tile width */ +static const l_int32 DefaultTileHeight = 15; /*!< default tile height */ +static const l_int32 DefaultFgThreshold = 60; /*!< default fg threshold */ +static const l_int32 DefaultMinCount = 40; /*!< default minimum count */ +static const l_int32 DefaultBgVal = 200; /*!< default bg value */ +static const l_int32 DefaultXSmoothSize = 2; /*!< default x smooth size */ +static const l_int32 DefaultYSmoothSize = 1; /*!< default y smooth size */ + +static l_int32 *iaaGetLinearTRC(l_int32 **iaa, l_int32 diff); + +#ifndef NO_CONSOLE_IO +#define DEBUG_GLOBAL 0 /*!< set to 1 to debug pixGlobalNormNoSatRGB() */ +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------* + * Clean background to white using background normalization * + *------------------------------------------------------------------*/ +/*! + * \brief pixCleanBackgroundToWhite() + * + * \param[in] pixs 8 bpp grayscale or 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] pixg [optional] 8 bpp grayscale version; can be null + * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 + * \param[in] blackval dark value to set to black (0) + * \param[in] whiteval light value to set to white (255) + * \return pixd 8 bpp or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *    (1) This is a simplified interface for cleaning an image.
+ *        For comparison, see pixAdaptThresholdToBinaryGen().
+ *    (2) The suggested default values for the input parameters are:
+ *          gamma:    1.0  (reduce this to increase the contrast; e.g.,
+ *                          for light text)
+ *          blackval   70  (a bit more than 60)
+ *          whiteval  190  (a bit less than 200)
+ * 
+ */ +PIX * +pixCleanBackgroundToWhite(PIX *pixs, + PIX *pixim, + PIX *pixg, + l_float32 gamma, + l_int32 blackval, + l_int32 whiteval) +{ +l_int32 d; +PIX *pixd; + + PROCNAME("pixCleanBackgroundToWhite"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 8 or 32", procName, NULL); + + pixd = pixBackgroundNormSimple(pixs, pixim, pixg); + if (!pixd) + return (PIX *)ERROR_PTR("background norm failedd", procName, NULL); + pixGammaTRC(pixd, pixd, gamma, blackval, whiteval); + return pixd; +} + + +/*------------------------------------------------------------------* + * Adaptive background normalization * + *------------------------------------------------------------------*/ +/*! + * \brief pixBackgroundNormSimple() + * + * \param[in] pixs 8 bpp grayscale or 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] pixg [optional] 8 bpp grayscale version; can be null + * \return pixd 8 bpp or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *    (1) This is a simplified interface to pixBackgroundNorm(),
+ *        where seven parameters are defaulted.
+ *    (2) The input image is either grayscale or rgb.
+ *    (3) See pixBackgroundNorm() for usage and function.
+ * 
+ */ +PIX * +pixBackgroundNormSimple(PIX *pixs, + PIX *pixim, + PIX *pixg) +{ + return pixBackgroundNorm(pixs, pixim, pixg, + DefaultTileWidth, DefaultTileHeight, + DefaultFgThreshold, DefaultMinCount, + DefaultBgVal, DefaultXSmoothSize, + DefaultYSmoothSize); +} + + +/*! + * \brief pixBackgroundNorm() + * + * \param[in] pixs 8 bpp grayscale or 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] pixg [optional] 8 bpp grayscale version; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[in] bgval target bg val; typ. > 128 + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \return pixd 8 bpp or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *    (1) This is a top-level interface for normalizing the image intensity
+ *        by mapping the image so that the background is near the input
+ *        value 'bgval'.
+ *    (2) The input image is either grayscale or rgb.
+ *    (3) For each component in the input image, the background value
+ *        in each tile is estimated using the values in the tile that
+ *        are not part of the foreground, where the foreground is
+ *        determined by the input 'thresh' argument.
+ *    (4) An optional binary mask can be specified, with the foreground
+ *        pixels typically over image regions.  The resulting background
+ *        map values will be determined by surrounding pixels that are
+ *        not under the mask foreground.  The origin (0,0) of this mask
+ *        is assumed to be aligned with the origin of the input image.
+ *        This binary mask must not fully cover pixs, because then there
+ *        will be no pixels in the input image available to compute
+ *        the background.
+ *    (5) An optional grayscale version of the input pixs can be supplied.
+ *        The only reason to do this is if the input is RGB and this
+ *        grayscale version can be used elsewhere.  If the input is RGB
+ *        and this is not supplied, it is made internally using only
+ *        the green component, and destroyed after use.
+ *    (6) The dimensions of the pixel tile (sx, sy) give the amount by
+ *        by which the map is reduced in size from the input image.
+ *    (7) The threshold is used to binarize the input image, in order to
+ *        locate the foreground components.  If this is set too low,
+ *        some actual foreground may be used to determine the maps;
+ *        if set too high, there may not be enough background
+ *        to determine the map values accurately.  Typically, it's
+ *        better to err by setting the threshold too high.
+ *    (8) A 'mincount' threshold is a minimum count of pixels in a
+ *        tile for which a background reading is made, in order for that
+ *        pixel in the map to be valid.  This number should perhaps be
+ *        at least 1/3 the size of the tile.
+ *    (9) A 'bgval' target background value for the normalized image.  This
+ *        should be at least 128.  If set too close to 255, some
+ *        clipping will occur in the result.
+ *    (10) Two factors, 'smoothx' and 'smoothy', are input for smoothing
+ *        the map.  Each low-pass filter kernel dimension is
+ *        is 2 * (smoothing factor) + 1, so a
+ *        value of 0 means no smoothing. A value of 1 or 2 is recommended.
+ * 
+ */ +PIX * +pixBackgroundNorm(PIX *pixs, + PIX *pixim, + PIX *pixg, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + l_int32 bgval, + l_int32 smoothx, + l_int32 smoothy) +{ +l_int32 d, allfg; +PIX *pixm, *pixmi, *pixd; +PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; + + PROCNAME("pixBackgroundNorm"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (sx < 4 || sy < 4) + return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return (PIX *)ERROR_PTR("pixim all foreground", procName, NULL); + } + + pixd = NULL; + if (d == 8) { + pixm = NULL; + pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); + if (!pixm) { + L_WARNING("map not made; return a copy of the source\n", procName); + return pixCopy(NULL, pixs); + } + + pixmi = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); + if (!pixmi) { + L_WARNING("pixmi not made; return a copy of source\n", procName); + pixDestroy(&pixm); + return pixCopy(NULL, pixs); + } else { + pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, sx, sy); + } + + pixDestroy(&pixm); + pixDestroy(&pixmi); + } + else { + pixmr = pixmg = pixmb = NULL; + pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, + mincount, &pixmr, &pixmg, &pixmb); + if (!pixmr || !pixmg || !pixmb) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + L_WARNING("map not made; return a copy of the source\n", procName); + return pixCopy(NULL, pixs); + } + + pixmri = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); + pixmgi = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); + pixmbi = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); + if (!pixmri || !pixmgi || !pixmbi) { + L_WARNING("not all pixm*i are made; return src copy\n", procName); + pixd = pixCopy(NULL, pixs); + } else { + pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, + sx, sy); + } + + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + pixDestroy(&pixmri); + pixDestroy(&pixmgi); + pixDestroy(&pixmbi); + } + + if (!pixd) + ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixBackgroundNormMorph() + * + * \param[in] pixs 8 bpp grayscale or 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] reduction at which morph closings are done; between 2 and 16 + * \param[in] size of square Sel for the closing; use an odd number + * \param[in] bgval target bg val; typ. > 128 + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *    (1) This is a top-level interface for normalizing the image intensity
+ *        by mapping the image so that the background is near the input
+ *        value 'bgval'.
+ *    (2) The input image is either grayscale or rgb.
+ *    (3) For each component in the input image, the background value
+ *        is estimated using a grayscale closing; hence the 'Morph'
+ *        in the function name.
+ *    (4) An optional binary mask can be specified, with the foreground
+ *        pixels typically over image regions.  The resulting background
+ *        map values will be determined by surrounding pixels that are
+ *        not under the mask foreground.  The origin (0,0) of this mask
+ *        is assumed to be aligned with the origin of the input image.
+ *        This binary mask must not fully cover pixs, because then there
+ *        will be no pixels in the input image available to compute
+ *        the background.
+ *    (5) The map is computed at reduced size (given by 'reduction')
+ *        from the input pixs and optional pixim.  At this scale,
+ *        pixs is closed to remove the background, using a square Sel
+ *        of odd dimension.  The product of reduction * size should be
+ *        large enough to remove most of the text foreground.
+ *    (6) No convolutional smoothing needs to be done on the map before
+ *        inverting it.
+ *    (7) A 'bgval' target background value for the normalized image.  This
+ *        should be at least 128.  If set too close to 255, some
+ *        clipping will occur in the result.
+ * 
+ */ +PIX * +pixBackgroundNormMorph(PIX *pixs, + PIX *pixim, + l_int32 reduction, + l_int32 size, + l_int32 bgval) +{ +l_int32 d, allfg; +PIX *pixm, *pixmi, *pixd; +PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; + + PROCNAME("pixBackgroundNormMorph"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (reduction < 2 || reduction > 16) + return (PIX *)ERROR_PTR("reduction must be between 2 and 16", + procName, NULL); + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return (PIX *)ERROR_PTR("pixim all foreground", procName, NULL); + } + + pixd = NULL; + if (d == 8) { + pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); + if (!pixm) + return (PIX *)ERROR_PTR("pixm not made", procName, NULL); + pixmi = pixGetInvBackgroundMap(pixm, bgval, 0, 0); + if (!pixmi) + ERROR_PTR("pixmi not made", procName, NULL); + else + pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, + reduction, reduction); + pixDestroy(&pixm); + pixDestroy(&pixmi); + } + else { /* d == 32 */ + pixmr = pixmg = pixmb = NULL; + pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, + &pixmr, &pixmg, &pixmb); + if (!pixmr || !pixmg || !pixmb) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + return (PIX *)ERROR_PTR("not all pixm*", procName, NULL); + } + + pixmri = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); + pixmgi = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); + pixmbi = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); + if (!pixmri || !pixmgi || !pixmbi) + ERROR_PTR("not all pixm*i are made", procName, NULL); + else + pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, + reduction, reduction); + + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + pixDestroy(&pixmri); + pixDestroy(&pixmgi); + pixDestroy(&pixmbi); + } + + if (!pixd) + ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Arrays of inverted background values for normalization * + *-------------------------------------------------------------------------* + * Notes for these four functions: * + * (1) They are useful if you need to save the actual mapping array. * + * (2) They could be used in the top-level functions but are * + * not because their use makes those functions less clear. * + * (3) Each component in the input pixs generates a 16 bpp pix array. * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixBackgroundNormGrayArray() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[in] bgval target bg val; typ. > 128 + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \param[out] ppixd 16 bpp array of inverted background value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *    (1) See notes in pixBackgroundNorm().
+ *    (2) This returns a 16 bpp pix that can be used by
+ *        pixApplyInvBackgroundGrayMap() to generate a normalized version
+ *        of the input pixs.
+ * 
+ */ +l_ok +pixBackgroundNormGrayArray(PIX *pixs, + PIX *pixim, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + l_int32 bgval, + l_int32 smoothx, + l_int32 smoothy, + PIX **ppixd) +{ +l_int32 allfg; +PIX *pixm; + + PROCNAME("pixBackgroundNormGrayArray"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (sx < 4 || sy < 4) + return ERROR_INT("sx and sy must be >= 4", procName, 1); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return ERROR_INT("pixim all foreground", procName, 1); + } + + pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); + if (!pixm) + return ERROR_INT("pixm not made", procName, 1); + *ppixd = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); + pixCopyResolution(*ppixd, pixs); + pixDestroy(&pixm); + return 0; +} + + +/*! + * \brief pixBackgroundNormRGBArrays() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] pixg [optional] 8 bpp grayscale version; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[in] bgval target bg val; typ. > 128 + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \param[out] ppixr 16 bpp array of inverted R background value + * \param[out] ppixg 16 bpp array of inverted G background value + * \param[out] ppixb 16 bpp array of inverted B background value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *    (1) See notes in pixBackgroundNorm().
+ *    (2) This returns a set of three 16 bpp pix that can be used by
+ *        pixApplyInvBackgroundGrayMap() to generate a normalized version
+ *        of each component of the input pixs.
+ * 
+ */ +l_ok +pixBackgroundNormRGBArrays(PIX *pixs, + PIX *pixim, + PIX *pixg, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + l_int32 bgval, + l_int32 smoothx, + l_int32 smoothy, + PIX **ppixr, + PIX **ppixg, + PIX **ppixb) +{ +l_int32 allfg; +PIX *pixmr, *pixmg, *pixmb; + + PROCNAME("pixBackgroundNormRGBArrays"); + + if (!ppixr || !ppixg || !ppixb) + return ERROR_INT("&pixr, &pixg, &pixb not all defined", procName, 1); + *ppixr = *ppixg = *ppixb = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (sx < 4 || sy < 4) + return ERROR_INT("sx and sy must be >= 4", procName, 1); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return ERROR_INT("pixim all foreground", procName, 1); + } + + pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, mincount, + &pixmr, &pixmg, &pixmb); + if (!pixmr || !pixmg || !pixmb) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + return ERROR_INT("not all pixm* made", procName, 1); + } + + *ppixr = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); + *ppixg = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); + *ppixb = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + return 0; +} + + +/*! + * \brief pixBackgroundNormGrayArrayMorph() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] reduction at which morph closings are done; between 2 and 16 + * \param[in] size of square Sel for the closing; use an odd number + * \param[in] bgval target bg val; typ. > 128 + * \param[out] ppixd 16 bpp array of inverted background value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *    (1) See notes in pixBackgroundNormMorph().
+ *    (2) This returns a 16 bpp pix that can be used by
+ *        pixApplyInvBackgroundGrayMap() to generate a normalized version
+ *        of the input pixs.
+ * 
+ */ +l_ok +pixBackgroundNormGrayArrayMorph(PIX *pixs, + PIX *pixim, + l_int32 reduction, + l_int32 size, + l_int32 bgval, + PIX **ppixd) +{ +l_int32 allfg; +PIX *pixm; + + PROCNAME("pixBackgroundNormGrayArrayMorph"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not 8 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (reduction < 2 || reduction > 16) + return ERROR_INT("reduction must be between 2 and 16", procName, 1); + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return ERROR_INT("pixim all foreground", procName, 1); + } + + pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); + if (!pixm) + return ERROR_INT("pixm not made", procName, 1); + *ppixd = pixGetInvBackgroundMap(pixm, bgval, 0, 0); + pixCopyResolution(*ppixd, pixs); + pixDestroy(&pixm); + return 0; +} + + +/*! + * \brief pixBackgroundNormRGBArraysMorph() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] reduction at which morph closings are done; between 2 and 16 + * \param[in] size of square Sel for the closing; use an odd number + * \param[in] bgval target bg val; typ. > 128 + * \param[out] ppixr 16 bpp array of inverted R background value + * \param[out] ppixg 16 bpp array of inverted G background value + * \param[out] ppixb 16 bpp array of inverted B background value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *    (1) See notes in pixBackgroundNormMorph().
+ *    (2) This returns a set of three 16 bpp pix that can be used by
+ *        pixApplyInvBackgroundGrayMap() to generate a normalized version
+ *        of each component of the input pixs.
+ * 
+ */ +l_ok +pixBackgroundNormRGBArraysMorph(PIX *pixs, + PIX *pixim, + l_int32 reduction, + l_int32 size, + l_int32 bgval, + PIX **ppixr, + PIX **ppixg, + PIX **ppixb) +{ +l_int32 allfg; +PIX *pixmr, *pixmg, *pixmb; + + PROCNAME("pixBackgroundNormRGBArraysMorph"); + + if (!ppixr || !ppixg || !ppixb) + return ERROR_INT("&pixr, &pixg, &pixb not all defined", procName, 1); + *ppixr = *ppixg = *ppixb = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (reduction < 2 || reduction > 16) + return ERROR_INT("reduction must be between 2 and 16", procName, 1); + + /* If pixim exists, verify that it is not all foreground. */ + if (pixim) { + pixInvert(pixim, pixim); + pixZero(pixim, &allfg); + pixInvert(pixim, pixim); + if (allfg) + return ERROR_INT("pixim all foreground", procName, 1); + } + + pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, + &pixmr, &pixmg, &pixmb); + if (!pixmr || !pixmg || !pixmb) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + return ERROR_INT("not all pixm* made", procName, 1); + } + + *ppixr = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); + *ppixg = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); + *ppixb = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + return 0; +} + + +/*------------------------------------------------------------------* + * Measurement of local background * + *------------------------------------------------------------------*/ +/*! + * \brief pixGetBackgroundGrayMap() + * + * \param[in] pixs 8 bpp grayscale; not cmapped + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; + * it should not have only foreground pixels + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[out] ppixd 8 bpp grayscale map + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The background is measured in regions that don't have
+ *          images.  It is then propagated into the image regions,
+ *          and finally smoothed in each image region.
+ * 
+ */ +l_ok +pixGetBackgroundGrayMap(PIX *pixs, + PIX *pixim, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + PIX **ppixd) +{ +l_int32 w, h, wd, hd, wim, him, wpls, wplim, wpld, wplf; +l_int32 xim, yim, delx, nx, ny, i, j, k, m; +l_int32 count, sum, val8; +l_int32 empty, fgpixels; +l_uint32 *datas, *dataim, *datad, *dataf, *lines, *lineim, *lined, *linef; +l_float32 scalex, scaley; +PIX *pixd, *piximi, *pixb, *pixf, *pixims; + + PROCNAME("pixGetBackgroundGrayMap"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (sx < 4 || sy < 4) + return ERROR_INT("sx and sy must be >= 4", procName, 1); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* Evaluate the 'image' mask, pixim, and make sure + * it is not all fg. */ + fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ + if (pixim) { + piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ + pixZero(piximi, &empty); + pixDestroy(&piximi); + if (empty) + return ERROR_INT("pixim all fg; no background", procName, 1); + pixZero(pixim, &empty); + if (!empty) /* there are fg pixels in pixim */ + fgpixels = 1; + } + + /* Generate the foreground mask, pixf, which is at + * full resolution. These pixels will be ignored when + * computing the background values. */ + pixb = pixThresholdToBinary(pixs, thresh); + pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); + pixDestroy(&pixb); + + + /* ------------- Set up the output map pixd --------------- */ + /* Generate pixd, which is reduced by the factors (sx, sy). */ + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + wd = (w + sx - 1) / sx; + hd = (h + sy - 1) / sy; + pixd = pixCreate(wd, hd, 8); + + /* Note: we only compute map values in tiles that are complete. + * In general, tiles at right and bottom edges will not be + * complete, and we must fill them in later. */ + nx = w / sx; + ny = h / sy; + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + wplf = pixGetWpl(pixf); + dataf = pixGetData(pixf); + for (i = 0; i < ny; i++) { + lines = datas + sy * i * wpls; + linef = dataf + sy * i * wplf; + lined = datad + i * wpld; + for (j = 0; j < nx; j++) { + delx = j * sx; + sum = 0; + count = 0; + for (k = 0; k < sy; k++) { + for (m = 0; m < sx; m++) { + if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { + sum += GET_DATA_BYTE(lines + k * wpls, delx + m); + count++; + } + } + } + if (count >= mincount) { + val8 = sum / count; + SET_DATA_BYTE(lined, j, val8); + } + } + } + pixDestroy(&pixf); + + /* If there is an optional mask with fg pixels, erase the previous + * calculation for the corresponding map pixels, setting the + * map values to 0. Then, when all the map holes are filled, + * these erased pixels will be set by the surrounding map values. + * + * The calculation here is relatively efficient: for each pixel + * in pixd (which corresponds to a tile of mask pixels in pixim) + * we look only at the pixel in pixim that is at the center + * of the tile. If the mask pixel is ON, we reset the map + * pixel in pixd to 0, so that it can later be filled in. */ + pixims = NULL; + if (pixim && fgpixels) { + wim = pixGetWidth(pixim); + him = pixGetHeight(pixim); + dataim = pixGetData(pixim); + wplim = pixGetWpl(pixim); + for (i = 0; i < ny; i++) { + yim = i * sy + sy / 2; + if (yim >= him) + break; + lineim = dataim + yim * wplim; + for (j = 0; j < nx; j++) { + xim = j * sx + sx / 2; + if (xim >= wim) + break; + if (GET_DATA_BIT(lineim, xim)) + pixSetPixel(pixd, j, i, 0); + } + } + } + + /* Fill all the holes in the map. */ + if (pixFillMapHoles(pixd, nx, ny, L_FILL_BLACK)) { + pixDestroy(&pixd); + L_WARNING("can't make the map\n", procName); + return 1; + } + + /* Finally, for each connected region corresponding to the + * 'image' mask, reset all pixels to their average value. + * Each of these components represents an image (or part of one) + * in the input, and this smooths the background values + * in each of these regions. */ + if (pixim && fgpixels) { + scalex = 1. / (l_float32)sx; + scaley = 1. / (l_float32)sy; + pixims = pixScaleBySampling(pixim, scalex, scaley); + pixSmoothConnectedRegions(pixd, pixims, 2); + pixDestroy(&pixims); + } + + *ppixd = pixd; + pixCopyResolution(*ppixd, pixs); + return 0; +} + + +/*! + * \brief pixGetBackgroundRGBMap() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it + * should not have all foreground pixels + * \param[in] pixg [optional] 8 bpp grayscale version; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[out] ppixmr red component map + * \param[out] ppixmg green component map + * \param[out] ppixmb blue component map + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If pixg, which is a grayscale version of pixs, is provided,
+ *          use this internally to generate the foreground mask.
+ *          Otherwise, a grayscale version of pixs will be generated
+ *          from the green component only, used, and destroyed.
+ * 
+ */ +l_ok +pixGetBackgroundRGBMap(PIX *pixs, + PIX *pixim, + PIX *pixg, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + PIX **ppixmr, + PIX **ppixmg, + PIX **ppixmb) +{ +l_int32 w, h, wm, hm, wim, him, wpls, wplim, wplf; +l_int32 xim, yim, delx, nx, ny, i, j, k, m; +l_int32 count, rsum, gsum, bsum, rval, gval, bval; +l_int32 empty, fgpixels; +l_uint32 pixel; +l_uint32 *datas, *dataim, *dataf, *lines, *lineim, *linef; +l_float32 scalex, scaley; +PIX *piximi, *pixgc, *pixb, *pixf, *pixims; +PIX *pixmr, *pixmg, *pixmb; + + PROCNAME("pixGetBackgroundRGBMap"); + + if (!ppixmr || !ppixmg || !ppixmb) + return ERROR_INT("&pixm* not all defined", procName, 1); + *ppixmr = *ppixmg = *ppixmb = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (sx < 4 || sy < 4) + return ERROR_INT("sx and sy must be >= 4", procName, 1); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* Evaluate the mask pixim and make sure it is not all foreground */ + fgpixels = 0; /* boolean for existence of fg mask pixels */ + if (pixim) { + piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ + pixZero(piximi, &empty); + pixDestroy(&piximi); + if (empty) + return ERROR_INT("pixim all fg; no background", procName, 1); + pixZero(pixim, &empty); + if (!empty) /* there are fg pixels in pixim */ + fgpixels = 1; + } + + /* Generate the foreground mask. These pixels will be + * ignored when computing the background values. */ + if (pixg) /* use the input grayscale version if it is provided */ + pixgc = pixClone(pixg); + else + pixgc = pixConvertRGBToGrayFast(pixs); + pixb = pixThresholdToBinary(pixgc, thresh); + pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); + pixDestroy(&pixgc); + pixDestroy(&pixb); + + /* Generate the output mask images */ + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + wm = (w + sx - 1) / sx; + hm = (h + sy - 1) / sy; + pixmr = pixCreate(wm, hm, 8); + pixmg = pixCreate(wm, hm, 8); + pixmb = pixCreate(wm, hm, 8); + + /* ------------- Set up the mapping images --------------- */ + /* Note: we only compute map values in tiles that are complete. + * In general, tiles at right and bottom edges will not be + * complete, and we must fill them in later. */ + nx = w / sx; + ny = h / sy; + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wplf = pixGetWpl(pixf); + dataf = pixGetData(pixf); + for (i = 0; i < ny; i++) { + lines = datas + sy * i * wpls; + linef = dataf + sy * i * wplf; + for (j = 0; j < nx; j++) { + delx = j * sx; + rsum = gsum = bsum = 0; + count = 0; + for (k = 0; k < sy; k++) { + for (m = 0; m < sx; m++) { + if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { + pixel = *(lines + k * wpls + delx + m); + rsum += (pixel >> 24); + gsum += ((pixel >> 16) & 0xff); + bsum += ((pixel >> 8) & 0xff); + count++; + } + } + } + if (count >= mincount) { + rval = rsum / count; + gval = gsum / count; + bval = bsum / count; + pixSetPixel(pixmr, j, i, rval); + pixSetPixel(pixmg, j, i, gval); + pixSetPixel(pixmb, j, i, bval); + } + } + } + pixDestroy(&pixf); + + /* If there is an optional mask with fg pixels, erase the previous + * calculation for the corresponding map pixels, setting the + * map values in each of the 3 color maps to 0. Then, when + * all the map holes are filled, these erased pixels will + * be set by the surrounding map values. */ + if (pixim) { + wim = pixGetWidth(pixim); + him = pixGetHeight(pixim); + dataim = pixGetData(pixim); + wplim = pixGetWpl(pixim); + for (i = 0; i < ny; i++) { + yim = i * sy + sy / 2; + if (yim >= him) + break; + lineim = dataim + yim * wplim; + for (j = 0; j < nx; j++) { + xim = j * sx + sx / 2; + if (xim >= wim) + break; + if (GET_DATA_BIT(lineim, xim)) { + pixSetPixel(pixmr, j, i, 0); + pixSetPixel(pixmg, j, i, 0); + pixSetPixel(pixmb, j, i, 0); + } + } + } + } + + /* ----------------- Now fill in the holes ----------------------- */ + if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || + pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || + pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + L_WARNING("can't make the maps\n", procName); + return 1; + } + + /* Finally, for each connected region corresponding to the + * fg mask, reset all pixels to their average value. */ + if (pixim && fgpixels) { + scalex = 1. / (l_float32)sx; + scaley = 1. / (l_float32)sy; + pixims = pixScaleBySampling(pixim, scalex, scaley); + pixSmoothConnectedRegions(pixmr, pixims, 2); + pixSmoothConnectedRegions(pixmg, pixims, 2); + pixSmoothConnectedRegions(pixmb, pixims, 2); + pixDestroy(&pixims); + } + + *ppixmr = pixmr; + *ppixmg = pixmg; + *ppixmb = pixmb; + pixCopyResolution(*ppixmr, pixs); + pixCopyResolution(*ppixmg, pixs); + pixCopyResolution(*ppixmb, pixs); + return 0; +} + + +/*! + * \brief pixGetBackgroundGrayMapMorph() + * + * \param[in] pixs 8 bpp grayscale; not cmapped + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it + * should not have all foreground pixels + * \param[in] reduction factor at which closing is performed + * \param[in] size of square Sel for the closing; use an odd number + * \param[out] ppixm grayscale map + * \return 0 if OK, 1 on error + */ +l_ok +pixGetBackgroundGrayMapMorph(PIX *pixs, + PIX *pixim, + l_int32 reduction, + l_int32 size, + PIX **ppixm) +{ +l_int32 nx, ny, empty, fgpixels; +l_float32 scale; +PIX *pixm, *pix1, *pix2, *pix3, *pixims; + + PROCNAME("pixGetBackgroundGrayMapMorph"); + + if (!ppixm) + return ERROR_INT("&pixm not defined", procName, 1); + *ppixm = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + + /* Evaluate the mask pixim and make sure it is not all foreground. */ + fgpixels = 0; /* boolean for existence of fg mask pixels */ + if (pixim) { + pixInvert(pixim, pixim); /* set background pixels to 1 */ + pixZero(pixim, &empty); + if (empty) + return ERROR_INT("pixim all fg; no background", procName, 1); + pixInvert(pixim, pixim); /* revert to original mask */ + pixZero(pixim, &empty); + if (!empty) /* there are fg pixels in pixim */ + fgpixels = 1; + } + + /* Downscale as requested and do the closing to get the background. */ + scale = 1. / (l_float32)reduction; + pix1 = pixScaleBySampling(pixs, scale, scale); + pix2 = pixCloseGray(pix1, size, size); + pix3 = pixExtendByReplication(pix2, 1, 1); + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Downscale the image mask, if any, and remove it from the + * background. These pixels will be filled in (twice). */ + pixims = NULL; + if (pixim) { + pixims = pixScale(pixim, scale, scale); + pixm = pixConvertTo8(pixims, FALSE); + pixAnd(pixm, pixm, pix3); + } + else + pixm = pixClone(pix3); + pixDestroy(&pix3); + + /* Fill all the holes in the map. */ + nx = pixGetWidth(pixs) / reduction; + ny = pixGetHeight(pixs) / reduction; + if (pixFillMapHoles(pixm, nx, ny, L_FILL_BLACK)) { + pixDestroy(&pixm); + pixDestroy(&pixims); + L_WARNING("can't make the map\n", procName); + return 1; + } + + /* Finally, for each connected region corresponding to the + * fg mask, reset all pixels to their average value. */ + if (pixim && fgpixels) + pixSmoothConnectedRegions(pixm, pixims, 2); + pixDestroy(&pixims); + + *ppixm = pixm; + pixCopyResolution(*ppixm, pixs); + return 0; +} + + +/*! + * \brief pixGetBackgroundRGBMapMorph() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null; it + * should not have all foreground pixels + * \param[in] reduction factor at which closing is performed + * \param[in] size of square Sel for the closing; use an odd number + * \param[out] ppixmr red component map + * \param[out] ppixmg green component map + * \param[out] ppixmb blue component map + * \return 0 if OK, 1 on error + */ +l_ok +pixGetBackgroundRGBMapMorph(PIX *pixs, + PIX *pixim, + l_int32 reduction, + l_int32 size, + PIX **ppixmr, + PIX **ppixmg, + PIX **ppixmb) +{ +l_int32 nx, ny, empty, fgpixels; +l_float32 scale; +PIX *pixm, *pixmr, *pixmg, *pixmb, *pix1, *pix2, *pix3, *pixims; + + PROCNAME("pixGetBackgroundRGBMapMorph"); + + if (!ppixmr || !ppixmg || !ppixmb) + return ERROR_INT("&pixm* not all defined", procName, 1); + *ppixmr = *ppixmg = *ppixmb = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + + /* Evaluate the mask pixim and make sure it is not all foreground. */ + fgpixels = 0; /* boolean for existence of fg mask pixels */ + if (pixim) { + pixInvert(pixim, pixim); /* set background pixels to 1 */ + pixZero(pixim, &empty); + if (empty) + return ERROR_INT("pixim all fg; no background", procName, 1); + pixInvert(pixim, pixim); /* revert to original mask */ + pixZero(pixim, &empty); + if (!empty) /* there are fg pixels in pixim */ + fgpixels = 1; + } + + /* Generate an 8 bpp version of the image mask, if it exists */ + scale = 1. / (l_float32)reduction; + pixims = NULL; + pixm = NULL; + if (pixim) { + pixims = pixScale(pixim, scale, scale); + pixm = pixConvertTo8(pixims, FALSE); + } + + /* Downscale as requested and do the closing to get the background. + * Then remove the image mask pixels from the background. They + * will be filled in (twice) later. Do this for all 3 components. */ + pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_RED); + pix2 = pixCloseGray(pix1, size, size); + pix3 = pixExtendByReplication(pix2, 1, 1); + if (pixim) + pixmr = pixAnd(NULL, pixm, pix3); + else + pixmr = pixClone(pix3); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_GREEN); + pix2 = pixCloseGray(pix1, size, size); + pix3 = pixExtendByReplication(pix2, 1, 1); + if (pixim) + pixmg = pixAnd(NULL, pixm, pix3); + else + pixmg = pixClone(pix3); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + pix1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_BLUE); + pix2 = pixCloseGray(pix1, size, size); + pix3 = pixExtendByReplication(pix2, 1, 1); + if (pixim) + pixmb = pixAnd(NULL, pixm, pix3); + else + pixmb = pixClone(pix3); + pixDestroy(&pixm); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Fill all the holes in the three maps. */ + nx = pixGetWidth(pixs) / reduction; + ny = pixGetHeight(pixs) / reduction; + if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || + pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || + pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { + pixDestroy(&pixmr); + pixDestroy(&pixmg); + pixDestroy(&pixmb); + pixDestroy(&pixims); + L_WARNING("can't make the maps\n", procName); + return 1; + } + + /* Finally, for each connected region corresponding to the + * fg mask in each component, reset all pixels to their + * average value. */ + if (pixim && fgpixels) { + pixSmoothConnectedRegions(pixmr, pixims, 2); + pixSmoothConnectedRegions(pixmg, pixims, 2); + pixSmoothConnectedRegions(pixmb, pixims, 2); + pixDestroy(&pixims); + } + + *ppixmr = pixmr; + *ppixmg = pixmg; + *ppixmb = pixmb; + pixCopyResolution(*ppixmr, pixs); + pixCopyResolution(*ppixmg, pixs); + pixCopyResolution(*ppixmb, pixs); + return 0; +} + + +/*! + * \brief pixFillMapHoles() + * + * \param[in] pix 8 bpp; a map, with one pixel for each tile in + * a larger image + * \param[in] nx number of horizontal pixel tiles that are entirely + * covered with pixels in the original source image + * \param[in] ny ditto for the number of vertical pixel tiles + * \param[in] filltype L_FILL_WHITE or L_FILL_BLACK + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation on pix (the map).  pix is
+ *          typically a low-resolution version of some other image
+ *          from which it was derived, where each pixel in pix
+ *          corresponds to a rectangular tile (say, m x n) of pixels
+ *          in the larger image.  All we need to know about the larger
+ *          image is whether or not the rightmost column and bottommost
+ *          row of pixels in pix correspond to tiles that are
+ *          only partially covered by pixels in the larger image.
+ *      (2) Typically, some number of pixels in the input map are
+ *          not known, and their values must be determined by near
+ *          pixels that are known.  These unknown pixels are the 'holes'.
+ *          They can take on only two values, 0 and 255, and the
+ *          instruction about which to fill is given by the filltype flag.
+ *      (3) The "holes" can come from two sources.  The first is when there
+ *          are not enough foreground or background pixels in a tile;
+ *          the second is when a tile is at least partially covered
+ *          by an image mask.  If we're filling holes in a fg mask,
+ *          the holes are initialized to black (0) and use L_FILL_BLACK.
+ *          For filling holes in a bg mask, initialize the holes to
+ *          white (255) and use L_FILL_WHITE.
+ *      (4) If w is the map width, nx = w or nx = w - 1; ditto for h and ny.
+ * 
+ */ +l_ok +pixFillMapHoles(PIX *pix, + l_int32 nx, + l_int32 ny, + l_int32 filltype) +{ +l_int32 w, h, y, nmiss, goodcol, i, j, found, ival, valtest; +l_uint32 val, lastval; +NUMA *na; /* indicates if there is any data in the column */ +PIX *pixt; + + PROCNAME("pixFillMapHoles"); + + if (!pix || pixGetDepth(pix) != 8) + return ERROR_INT("pix not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pix)) + return ERROR_INT("pix is colormapped", procName, 1); + + /* ------------- Fill holes in the mapping image columns ----------- */ + pixGetDimensions(pix, &w, &h, NULL); + na = numaCreate(0); /* holds flag for which columns have data */ + nmiss = 0; + valtest = (filltype == L_FILL_WHITE) ? 255 : 0; + for (j = 0; j < nx; j++) { /* do it by columns */ + found = FALSE; + for (i = 0; i < ny; i++) { + pixGetPixel(pix, j, i, &val); + if (val != valtest) { + y = i; + found = TRUE; + break; + } + } + if (found == FALSE) { + numaAddNumber(na, 0); /* no data in the column */ + nmiss++; + } + else { + numaAddNumber(na, 1); /* data in the column */ + for (i = y - 1; i >= 0; i--) /* replicate upwards to top */ + pixSetPixel(pix, j, i, val); + pixGetPixel(pix, j, 0, &lastval); + for (i = 1; i < h; i++) { /* set going down to bottom */ + pixGetPixel(pix, j, i, &val); + if (val == valtest) + pixSetPixel(pix, j, i, lastval); + else + lastval = val; + } + } + } + numaAddNumber(na, 0); /* last column */ + + if (nmiss == nx) { /* no data in any column! */ + numaDestroy(&na); + L_WARNING("no bg found; no data in any column\n", procName); + return 1; + } + + /* ---------- Fill in missing columns by replication ----------- */ + if (nmiss > 0) { /* replicate columns */ + pixt = pixCopy(NULL, pix); + /* Find the first good column */ + goodcol = 0; + for (j = 0; j < w; j++) { + numaGetIValue(na, j, &ival); + if (ival == 1) { + goodcol = j; + break; + } + } + if (goodcol > 0) { /* copy cols backward */ + for (j = goodcol - 1; j >= 0; j--) { + pixRasterop(pix, j, 0, 1, h, PIX_SRC, pixt, j + 1, 0); + pixRasterop(pixt, j, 0, 1, h, PIX_SRC, pix, j, 0); + } + } + for (j = goodcol + 1; j < w; j++) { /* copy cols forward */ + numaGetIValue(na, j, &ival); + if (ival == 0) { + /* Copy the column to the left of j */ + pixRasterop(pix, j, 0, 1, h, PIX_SRC, pixt, j - 1, 0); + pixRasterop(pixt, j, 0, 1, h, PIX_SRC, pix, j, 0); + } + } + pixDestroy(&pixt); + } + if (w > nx) { /* replicate the last column */ + for (i = 0; i < h; i++) { + pixGetPixel(pix, w - 2, i, &val); + pixSetPixel(pix, w - 1, i, val); + } + } + + numaDestroy(&na); + return 0; +} + + +/*! + * \brief pixExtendByReplication() + * + * \param[in] pixs 8 bpp + * \param[in] addw number of extra pixels horizontally to add + * \param[in] addh number of extra pixels vertically to add + * \return pixd extended with replicated pixel values, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixel values are extended to the left and down, as required.
+ * 
+ */ +PIX * +pixExtendByReplication(PIX *pixs, + l_int32 addw, + l_int32 addh) +{ +l_int32 w, h, i, j; +l_uint32 val; +PIX *pixd; + + PROCNAME("pixExtendByReplication"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + if (addw == 0 && addh == 0) + return pixCopy(NULL, pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w + addw, h + addh, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); + + if (addw > 0) { + for (i = 0; i < h; i++) { + pixGetPixel(pixd, w - 1, i, &val); + for (j = 0; j < addw; j++) + pixSetPixel(pixd, w + j, i, val); + } + } + + if (addh > 0) { + for (j = 0; j < w + addw; j++) { + pixGetPixel(pixd, j, h - 1, &val); + for (i = 0; i < addh; i++) + pixSetPixel(pixd, j, h + i, val); + } + } + + pixCopyResolution(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixSmoothConnectedRegions() + * + * \param[in] pixs 8 bpp grayscale; no colormap + * \param[in] pixm [optional] 1 bpp; if null, this is a no-op + * \param[in] factor subsampling factor for getting average; >= 1 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pixels in pixs corresponding to those in each
+ *          8-connected region in the mask are set to the average value.
+ *      (2) This is required for adaptive mapping to avoid the
+ *          generation of stripes in the background map, due to
+ *          variations in the pixel values near the edges of mask regions.
+ *      (3) This function is optimized for background smoothing, where
+ *          there are a relatively small number of components.  It will
+ *          be inefficient if used where there are many small components.
+ * 
+ */ +l_ok +pixSmoothConnectedRegions(PIX *pixs, + PIX *pixm, + l_int32 factor) +{ +l_int32 empty, i, n, x, y; +l_float32 aveval; +BOXA *boxa; +PIX *pixmc; +PIXA *pixa; + + PROCNAME("pixSmoothConnectedRegions"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs has colormap", procName, 1); + if (!pixm) { + L_INFO("pixm not defined\n", procName); + return 0; + } + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + pixZero(pixm, &empty); + if (empty) { + L_INFO("pixm has no fg pixels; nothing to do\n", procName); + return 0; + } + + boxa = pixConnComp(pixm, &pixa, 8); + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + if ((pixmc = pixaGetPix(pixa, i, L_CLONE)) == NULL) { + L_WARNING("missing pixmc!\n", procName); + continue; + } + boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); + pixGetAverageMasked(pixs, pixmc, x, y, factor, L_MEAN_ABSVAL, &aveval); + pixPaintThroughMask(pixs, pixmc, x, y, (l_int32)aveval); + pixDestroy(&pixmc); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return 0; +} + + +/*------------------------------------------------------------------* + * Measurement of local foreground * + *------------------------------------------------------------------*/ +#if 0 /* Not working properly: do not use */ + +/*! + * \brief pixGetForegroundGrayMap() + * + * \param[in] pixs 8 bpp + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] sx, sy src tile size, in pixels + * \param[in] thresh threshold for determining foreground + * \param[out] ppixd 8 bpp grayscale map + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Each (sx, sy) tile of pixs gets mapped to one pixel in pixd.
+ *      (2) pixd is the estimate of the fg (darkest) value within each tile.
+ *      (3) All pixels in pixd that are in 'image' regions, as specified
+ *          by pixim, are given the background value 0.
+ *      (4) For pixels in pixd that can't directly be given a fg value,
+ *          the value is inferred by propagating from neighboring pixels.
+ *      (5) In practice, pixd can be used to normalize the fg, and
+ *          it can be done after background normalization.
+ *      (6) The overall procedure is:
+ *            ~ reduce 2x by sampling
+ *            ~ paint all 'image' pixels white, so that they don't
+ *            ~ participate in the Min reduction
+ *            ~ do a further (sx, sy) Min reduction -- think of
+ *              it as a large opening followed by subsampling by the
+ *              reduction factors
+ *            ~ threshold the result to identify fg, and set the
+ *              bg pixels to 255 (these are 'holes')
+ *            ~ fill holes by propagation from fg values
+ *            ~ replicatively expand by 2x, arriving at the final
+ *              resolution of pixd
+ *            ~ smooth with a 17x17 kernel
+ *            ~ paint the 'image' regions black
+ * 
+ */ +l_ok +pixGetForegroundGrayMap(PIX *pixs, + PIX *pixim, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + PIX **ppixd) +{ +l_int32 w, h, d, wd, hd; +l_int32 empty, fgpixels; +PIX *pixd, *piximi, *pixim2, *pixims, *pixs2, *pixb, *pixt1, *pixt2, *pixt3; + + PROCNAME("pixGetForegroundGrayMap"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return ERROR_INT("pixs not 8 bpp", procName, 1); + if (pixim && pixGetDepth(pixim) != 1) + return ERROR_INT("pixim not 1 bpp", procName, 1); + if (sx < 2 || sy < 2) + return ERROR_INT("sx and sy must be >= 2", procName, 1); + + /* Generate pixd, which is reduced by the factors (sx, sy). */ + wd = (w + sx - 1) / sx; + hd = (h + sy - 1) / sy; + pixd = pixCreate(wd, hd, 8); + *ppixd = pixd; + + /* Evaluate the 'image' mask, pixim. If it is all fg, + * the output pixd has all pixels with value 0. */ + fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ + if (pixim) { + piximi = pixInvert(NULL, pixim); /* set non-image pixels to 1 */ + pixZero(piximi, &empty); + pixDestroy(&piximi); + if (empty) /* all 'image'; return with all pixels set to 0 */ + return 0; + pixZero(pixim, &empty); + if (!empty) /* there are fg pixels in pixim */ + fgpixels = 1; + } + + /* 2x subsampling; paint white through 'image' mask. */ + pixs2 = pixScaleBySampling(pixs, 0.5, 0.5); + if (pixim && fgpixels) { + pixim2 = pixReduceBinary2(pixim, NULL); + pixPaintThroughMask(pixs2, pixim2, 0, 0, 255); + pixDestroy(&pixim2); + } + + /* Min (erosion) downscaling; total reduction (4 sx, 4 sy). */ + pixt1 = pixScaleGrayMinMax(pixs2, sx, sy, L_CHOOSE_MIN); + +/* pixDisplay(pixt1, 300, 200); */ + + /* Threshold to identify fg; paint bg pixels to white. */ + pixb = pixThresholdToBinary(pixt1, thresh); /* fg pixels */ + pixInvert(pixb, pixb); + pixPaintThroughMask(pixt1, pixb, 0, 0, 255); + pixDestroy(&pixb); + + /* Replicative expansion by 2x to (sx, sy). */ + pixt2 = pixExpandReplicate(pixt1, 2); + +/* pixDisplay(pixt2, 500, 200); */ + + /* Fill holes in the fg by propagation */ + pixFillMapHoles(pixt2, w / sx, h / sy, L_FILL_WHITE); + +/* pixDisplay(pixt2, 700, 200); */ + + /* Smooth with 17x17 kernel. */ + pixt3 = pixBlockconv(pixt2, 8, 8); + pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixt3, 0, 0); + + /* Paint the image parts black. */ + pixims = pixScaleBySampling(pixim, 1. / sx, 1. / sy); + pixPaintThroughMask(pixd, pixims, 0, 0, 0); + + pixDestroy(&pixs2); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixDestroy(&pixt3); + return 0; +} +#endif /* Not working properly: do not use */ + + +/*------------------------------------------------------------------* + * Generate inverted background map * + *------------------------------------------------------------------*/ +/*! + * \brief pixGetInvBackgroundMap() + * + * \param[in] pixs 8 bpp grayscale; no colormap + * \param[in] bgval target bg val; typ. > 128 + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \return pixd 16 bpp, or NULL on error + * + *
+ * Notes:
+ *     (1) bgval should typically be > 120 and < 240
+ *     (2) pixd is a normalization image; the original image is
+ *       multiplied by pixd and the result is divided by 256.
+ * 
+ */ +PIX * +pixGetInvBackgroundMap(PIX *pixs, + l_int32 bgval, + l_int32 smoothx, + l_int32 smoothy) +{ +l_int32 w, h, wplsm, wpld, i, j; +l_int32 val, val16; +l_uint32 *datasm, *datad, *linesm, *lined; +PIX *pixsm, *pixd; + + PROCNAME("pixGetInvBackgroundMap"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < 5 || h < 5) + return (PIX *)ERROR_PTR("w and h must be >= 5", procName, NULL); + + /* smooth the map image */ + pixsm = pixBlockconv(pixs, smoothx, smoothy); + datasm = pixGetData(pixsm); + wplsm = pixGetWpl(pixsm); + + /* invert the map image, scaling up to preserve dynamic range */ + pixd = pixCreate(w, h, 16); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linesm = datasm + i * wplsm; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linesm, j); + if (val > 0) + val16 = (256 * bgval) / val; + else { /* shouldn't happen */ + L_WARNING("smoothed bg has 0 pixel!\n", procName); + val16 = bgval / 2; + } + SET_DATA_TWO_BYTES(lined, j, val16); + } + } + + pixDestroy(&pixsm); + pixCopyResolution(pixd, pixs); + return pixd; +} + + +/*------------------------------------------------------------------* + * Apply background map to image * + *------------------------------------------------------------------*/ +/*! + * \brief pixApplyInvBackgroundGrayMap() + * + * \param[in] pixs 8 bpp grayscale; no colormap + * \param[in] pixm 16 bpp, inverse background map + * \param[in] sx tile width in pixels + * \param[in] sy tile height in pixels + * \return pixd 8 bpp, or NULL on error + */ +PIX * +pixApplyInvBackgroundGrayMap(PIX *pixs, + PIX *pixm, + l_int32 sx, + l_int32 sy) +{ +l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; +l_int32 vals, vald; +l_uint32 val16; +l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; +PIX *pixd; + + PROCNAME("pixApplyInvBackgroundGrayMap"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 16) + return (PIX *)ERROR_PTR("pixm undefined or not 16 bpp", procName, NULL); + if (sx == 0 || sy == 0) + return (PIX *)ERROR_PTR("invalid sx and/or sy", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + pixGetDimensions(pixm, &wm, &hm, NULL); + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < hm; i++) { + lines = datas + sy * i * wpls; + lined = datad + sy * i * wpld; + yoff = sy * i; + for (j = 0; j < wm; j++) { + pixGetPixel(pixm, j, i, &val16); + xoff = sx * j; + for (k = 0; k < sy && yoff + k < h; k++) { + flines = lines + k * wpls; + flined = lined + k * wpld; + for (m = 0; m < sx && xoff + m < w; m++) { + vals = GET_DATA_BYTE(flines, xoff + m); + vald = (vals * val16) / 256; + vald = L_MIN(vald, 255); + SET_DATA_BYTE(flined, xoff + m, vald); + } + } + } + } + + return pixd; +} + + +/*! + * \brief pixApplyInvBackgroundRGBMap() + * + * \param[in] pixs 32 bpp rbg + * \param[in] pixmr 16 bpp, red inverse background map + * \param[in] pixmg 16 bpp, green inverse background map + * \param[in] pixmb 16 bpp, blue inverse background map + * \param[in] sx tile width in pixels + * \param[in] sy tile height in pixels + * \return pixd 32 bpp rbg, or NULL on error + */ +PIX * +pixApplyInvBackgroundRGBMap(PIX *pixs, + PIX *pixmr, + PIX *pixmg, + PIX *pixmb, + l_int32 sx, + l_int32 sy) +{ +l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; +l_int32 rvald, gvald, bvald; +l_uint32 vals; +l_uint32 rval16, gval16, bval16; +l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; +PIX *pixd; + + PROCNAME("pixApplyInvBackgroundRGBMap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (!pixmr || !pixmg || !pixmb) + return (PIX *)ERROR_PTR("pix maps not all defined", procName, NULL); + if (pixGetDepth(pixmr) != 16 || pixGetDepth(pixmg) != 16 || + pixGetDepth(pixmb) != 16) + return (PIX *)ERROR_PTR("pix maps not all 16 bpp", procName, NULL); + if (sx == 0 || sy == 0) + return (PIX *)ERROR_PTR("invalid sx and/or sy", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + wm = pixGetWidth(pixmr); + hm = pixGetHeight(pixmr); + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < hm; i++) { + lines = datas + sy * i * wpls; + lined = datad + sy * i * wpld; + yoff = sy * i; + for (j = 0; j < wm; j++) { + pixGetPixel(pixmr, j, i, &rval16); + pixGetPixel(pixmg, j, i, &gval16); + pixGetPixel(pixmb, j, i, &bval16); + xoff = sx * j; + for (k = 0; k < sy && yoff + k < h; k++) { + flines = lines + k * wpls; + flined = lined + k * wpld; + for (m = 0; m < sx && xoff + m < w; m++) { + vals = *(flines + xoff + m); + rvald = ((vals >> 24) * rval16) / 256; + rvald = L_MIN(rvald, 255); + gvald = (((vals >> 16) & 0xff) * gval16) / 256; + gvald = L_MIN(gvald, 255); + bvald = (((vals >> 8) & 0xff) * bval16) / 256; + bvald = L_MIN(bvald, 255); + composeRGBPixel(rvald, gvald, bvald, flined + xoff + m); + } + } + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Apply variable map * + *------------------------------------------------------------------*/ +/*! + * \brief pixApplyVariableGrayMap() + * + * \param[in] pixs 8 bpp + * \param[in] pixg 8 bpp, variable map + * \param[in] target typ. 128 for threshold + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Suppose you have an image that you want to transform based
+ *          on some photometric measurement at each point, such as the
+ *          threshold value for binarization.  Representing the photometric
+ *          measurement as an image pixg, you can threshold in input image
+ *          using pixVarThresholdToBinary().  Alternatively, you can map
+ *          the input image pointwise so that the threshold over the
+ *          entire image becomes a constant, such as 128.  For example,
+ *          if a pixel in pixg is 150 and the target is 128, the
+ *          corresponding pixel in pixs is mapped linearly to a value
+ *          (128/150) of the input value.  If the resulting mapped image
+ *          pixd were then thresholded at 128, you would obtain the
+ *          same result as a direct binarization using pixg with
+ *          pixVarThresholdToBinary().
+ *      (2) The sizes of pixs and pixg must be equal.
+ * 
+ */ +PIX * +pixApplyVariableGrayMap(PIX *pixs, + PIX *pixg, + l_int32 target) +{ +l_int32 i, j, w, h, d, wpls, wplg, wpld, vals, valg, vald; +l_uint8 *lut; +l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; +l_float32 fval; +PIX *pixd; + + PROCNAME("pixApplyVariableGrayMap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixg) + return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); + if (!pixSizesEqual(pixs, pixg)) + return (PIX *)ERROR_PTR("pix sizes not equal", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("depth not 8 bpp", procName, NULL); + + /* Generate a LUT for the mapping if the image is large enough + * to warrant the overhead. The LUT is of size 2^16. For the + * index to the table, get the MSB from pixs and the LSB from pixg. + * Note: this LUT is bigger than the typical 32K L1 cache, so + * we expect cache misses. L2 latencies are about 5ns. But + * division is slooooow. For large images, this function is about + * 4x faster when using the LUT. C'est la vie. */ + lut = NULL; + if (w * h > 100000) { /* more pixels than 2^16 */ + if ((lut = (l_uint8 *)LEPT_CALLOC(0x10000, sizeof(l_uint8))) == NULL) + return (PIX *)ERROR_PTR("lut not made", procName, NULL); + for (i = 0; i < 256; i++) { + for (j = 0; j < 256; j++) { + fval = (l_float32)(i * target) / (j + 0.5); + lut[(i << 8) + j] = L_MIN(255, (l_int32)(fval + 0.5)); + } + } + } + + if ((pixd = pixCreateNoInit(w, h, 8)) == NULL) { + LEPT_FREE(lut); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lineg = datag + i * wplg; + lined = datad + i * wpld; + if (lut) { + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + valg = GET_DATA_BYTE(lineg, j); + vald = lut[(vals << 8) + valg]; + SET_DATA_BYTE(lined, j, vald); + } + } + else { + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + valg = GET_DATA_BYTE(lineg, j); + fval = (l_float32)(vals * target) / (valg + 0.5); + vald = L_MIN(255, (l_int32)(fval + 0.5)); + SET_DATA_BYTE(lined, j, vald); + } + } + } + + LEPT_FREE(lut); + return pixd; +} + + +/*------------------------------------------------------------------* + * Non-adaptive (global) mapping * + *------------------------------------------------------------------*/ +/*! + * \brief pixGlobalNormRGB() + * + * \param[in] pixd [optional] null, existing or equal to pixs + * \param[in] pixs 32 bpp rgb, or colormapped + * \param[in] rval, gval, bval pixel values in pixs that are + * linearly mapped to mapval + * \param[in] mapval use 255 for mapping to white + * \return pixd 32 bpp rgb or colormapped, or NULL on error + * + *
+ * Notes:
+ *    (1) The value of pixd determines if the results are written to a
+ *        new pix (use NULL), in-place to pixs (use pixs), or to some
+ *        other existing pix.
+ *    (2) This does a global normalization of an image where the
+ *        r,g,b color components are not balanced.  Thus, white in pixs is
+ *        represented by a set of r,g,b values that are not all 255.
+ *    (3) The input values (rval, gval, bval) should be chosen to
+ *        represent the gray color (mapval, mapval, mapval) in src.
+ *        Thus, this function will map (rval, gval, bval) to that gray color.
+ *    (4) Typically, mapval = 255, so that (rval, gval, bval)
+ *        corresponds to the white point of src.  In that case, these
+ *        parameters should be chosen so that few pixels have higher values.
+ *    (5) In all cases, we do a linear TRC separately on each of the
+ *        components, saturating at 255.
+ *    (6) If the input pix is 8 bpp without a colormap, you can get
+ *        this functionality with mapval = 255 by calling:
+ *            pixGammaTRC(pixd, pixs, 1.0, 0, bgval);
+ *        where bgval is the value you want to be mapped to 255.
+ *        Or more generally, if you want bgval to be mapped to mapval:
+ *            pixGammaTRC(pixd, pixs, 1.0, 0, 255 * bgval / mapval);
+ * 
+ */ +PIX * +pixGlobalNormRGB(PIX *pixd, + PIX *pixs, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 mapval) +{ +l_int32 w, h, d, i, j, ncolors, rv, gv, bv, wpl; +l_int32 *rarray, *garray, *barray; +l_uint32 *data, *line; +NUMA *nar, *nag, *nab; +PIXCMAP *cmap; + + PROCNAME("pixGlobalNormRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + cmap = pixGetColormap(pixs); + pixGetDimensions(pixs, &w, &h, &d); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (mapval <= 0) { + L_WARNING("mapval must be > 0; setting to 255\n", procName); + mapval = 255; + } + + /* Prepare pixd to be a copy of pixs */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + /* Generate the TRC maps for each component. Make sure the + * upper range for each color is greater than zero. */ + nar = numaGammaTRC(1.0, 0, L_MAX(1, 255 * rval / mapval)); + nag = numaGammaTRC(1.0, 0, L_MAX(1, 255 * gval / mapval)); + nab = numaGammaTRC(1.0, 0, L_MAX(1, 255 * bval / mapval)); + + /* Extract copies of the internal arrays */ + rarray = numaGetIArray(nar); + garray = numaGetIArray(nag); + barray = numaGetIArray(nab); + if (!nar || !nag || !nab || !rarray || !garray || !barray) { + L_ERROR("allocation failure in arrays\n", procName); + goto cleanup_arrays; + } + + if (cmap) { + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rv, &gv, &bv); + pixcmapResetColor(cmap, i, rarray[rv], garray[gv], barray[bv]); + } + } + else { + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rv, &gv, &bv); + composeRGBPixel(rarray[rv], garray[gv], barray[bv], line + j); + } + } + } + +cleanup_arrays: + numaDestroy(&nar); + numaDestroy(&nag); + numaDestroy(&nab); + LEPT_FREE(rarray); + LEPT_FREE(garray); + LEPT_FREE(barray); + return pixd; +} + + +/*! + * \brief pixGlobalNormNoSatRGB() + * + * \param[in] pixd [optional] null, existing or equal to pixs + * \param[in] pixs 32 bpp rgb + * \param[in] rval, gval, bval pixel values in pixs that are + * linearly mapped to mapval; but see below + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] rank between 0.0 and 1.0; typ. use a value near 1.0 + * \return pixd 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *    (1) This is a version of pixGlobalNormRGB(), where the output
+ *        intensity is scaled back so that a controlled fraction of
+ *        pixel components is allowed to saturate.  See comments in
+ *        pixGlobalNormRGB().
+ *    (2) The value of pixd determines if the results are written to a
+ *        new pix (use NULL), in-place to pixs (use pixs), or to some
+ *        other existing pix.
+ *    (3) This does a global normalization of an image where the
+ *        r,g,b color components are not balanced.  Thus, white in pixs is
+ *        represented by a set of r,g,b values that are not all 255.
+ *    (4) The input values (rval, gval, bval) can be chosen to be the
+ *        color that, after normalization, becomes white background.
+ *        For images that are mostly background, the closer these values
+ *        are to the median component values, the closer the resulting
+ *        background will be to gray, becoming white at the brightest places.
+ *    (5) The mapval used in pixGlobalNormRGB() is computed here to
+ *        avoid saturation of any component in the image (save for a
+ *        fraction of the pixels given by the input rank value).
+ * 
+ */ +PIX * +pixGlobalNormNoSatRGB(PIX *pixd, + PIX *pixs, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 factor, + l_float32 rank) +{ +l_int32 mapval; +l_float32 rankrval, rankgval, rankbval; +l_float32 rfract, gfract, bfract, maxfract; + + PROCNAME("pixGlobalNormNoSatRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("sampling factor < 1", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank not in [0.0 ... 1.0]", procName, NULL); + if (rval <= 0 || gval <= 0 || bval <= 0) + return (PIX *)ERROR_PTR("invalid estim. color values", procName, NULL); + + /* The max value for each component may be larger than the + * input estimated background value. In that case, mapping + * for those pixels would saturate. To prevent saturation, + * we compute the fraction for each component by which we + * would oversaturate. Then take the max of these, and + * reduce, uniformly over all components, the output intensity + * by this value. Then no component will saturate. + * In practice, if rank < 1.0, a fraction of pixels + * may have a component saturate. By keeping rank close to 1.0, + * that fraction can be made arbitrarily small. */ + pixGetRankValueMaskedRGB(pixs, NULL, 0, 0, factor, rank, &rankrval, + &rankgval, &rankbval); + rfract = rankrval / (l_float32)rval; + gfract = rankgval / (l_float32)gval; + bfract = rankbval / (l_float32)bval; + maxfract = L_MAX(rfract, gfract); + maxfract = L_MAX(maxfract, bfract); +#if DEBUG_GLOBAL + fprintf(stderr, "rankrval = %7.2f, rankgval = %7.2f, rankbval = %7.2f\n", + rankrval, rankgval, rankbval); + fprintf(stderr, "rfract = %7.4f, gfract = %7.4f, bfract = %7.4f\n", + rfract, gfract, bfract); +#endif /* DEBUG_GLOBAL */ + + mapval = (l_int32)(255. / maxfract); + pixd = pixGlobalNormRGB(pixd, pixs, rval, gval, bval, mapval); + return pixd; +} + + +/*------------------------------------------------------------------* + * Adaptive threshold spread normalization * + *------------------------------------------------------------------*/ +/*! + * \brief pixThresholdSpreadNorm() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] filtertype L_SOBEL_EDGE or L_TWO_SIDED_EDGE; + * \param[in] edgethresh threshold on magnitude of edge filter; + * typ 10-20 + * \param[in] smoothx, smoothy half-width of convolution kernel applied to + * spread threshold: use 0 for no smoothing + * \param[in] gamma gamma correction; typ. about 0.7 + * \param[in] minval input value that gives 0 for output; typ. -25 + * \param[in] maxval input value that gives 255 for output; + * typ. 255 + * \param[in] targetthresh target threshold for normalization + * \param[out] ppixth [optional] computed local threshold value + * \param[out] ppixb [optional] thresholded normalized image + * \param[out] ppixd [optional] normalized image + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The basis of this approach is the use of seed spreading
+ *          on a (possibly) sparse set of estimates for the local threshold.
+ *          The resulting dense estimates are smoothed by convolution
+ *          and used to either threshold the input image or normalize it
+ *          with a local transformation that linearly maps the pixels so
+ *          that the local threshold estimate becomes constant over the
+ *          resulting image.  This approach is one of several that
+ *          have been suggested (and implemented) by Ray Smith.
+ *      (2) You can use either the Sobel or TwoSided edge filters.
+ *          The results appear to be similar, using typical values
+ *          of edgethresh in the rang 10-20.
+ *      (3) To skip the trc enhancement, use gamma = 1.0, minval = 0
+ *          and maxval = 255.
+ *      (4) For the normalized image pixd, each pixel is linearly mapped
+ *          in such a way that the local threshold is equal to targetthresh.
+ *      (5) The full width and height of the convolution kernel
+ *          are (2 * smoothx + 1) and (2 * smoothy + 1).
+ *      (6) This function can be used with the pixtiling utility if the
+ *          images are too large.  See pixOtsuAdaptiveThreshold() for
+ *          an example of this.
+ * 
+ */ +l_ok +pixThresholdSpreadNorm(PIX *pixs, + l_int32 filtertype, + l_int32 edgethresh, + l_int32 smoothx, + l_int32 smoothy, + l_float32 gamma, + l_int32 minval, + l_int32 maxval, + l_int32 targetthresh, + PIX **ppixth, + PIX **ppixb, + PIX **ppixd) +{ +PIX *pixe, *pixet, *pixsd, *pixg1, *pixg2, *pixth; + + PROCNAME("pixThresholdSpreadNorm"); + + if (ppixth) *ppixth = NULL; + if (ppixb) *ppixb = NULL; + if (ppixd) *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (!ppixth && !ppixb && !ppixd) + return ERROR_INT("no output requested", procName, 1); + if (filtertype != L_SOBEL_EDGE && filtertype != L_TWO_SIDED_EDGE) + return ERROR_INT("invalid filter type", procName, 1); + + /* Get the thresholded edge pixels. These are the ones + * that have values in pixs near the local optimal fg/bg threshold. */ + if (filtertype == L_SOBEL_EDGE) + pixe = pixSobelEdgeFilter(pixs, L_VERTICAL_EDGES); + else /* L_TWO_SIDED_EDGE */ + pixe = pixTwoSidedEdgeFilter(pixs, L_VERTICAL_EDGES); + pixet = pixThresholdToBinary(pixe, edgethresh); + pixInvert(pixet, pixet); + + /* Build a seed image whose only nonzero values are those + * values of pixs corresponding to pixels in the fg of pixet. */ + pixsd = pixCreateTemplate(pixs); + pixCombineMasked(pixsd, pixs, pixet); + + /* Spread the seed and optionally smooth to reduce noise */ + pixg1 = pixSeedspread(pixsd, 4); + pixg2 = pixBlockconv(pixg1, smoothx, smoothy); + + /* Optionally do a gamma enhancement */ + pixth = pixGammaTRC(NULL, pixg2, gamma, minval, maxval); + + /* Do the mapping and thresholding */ + if (ppixd) { + *ppixd = pixApplyVariableGrayMap(pixs, pixth, targetthresh); + if (ppixb) + *ppixb = pixThresholdToBinary(*ppixd, targetthresh); + } + else if (ppixb) + *ppixb = pixVarThresholdToBinary(pixs, pixth); + + if (ppixth) + *ppixth = pixth; + else + pixDestroy(&pixth); + + pixDestroy(&pixe); + pixDestroy(&pixet); + pixDestroy(&pixsd); + pixDestroy(&pixg1); + pixDestroy(&pixg2); + return 0; +} + + +/*------------------------------------------------------------------* + * Adaptive background normalization (flexible adaptaption) * + *------------------------------------------------------------------*/ +/*! + * \brief pixBackgroundNormFlex() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] sx, sy desired tile dimensions; size may vary; + * use values between 3 and 10 + * \param[in] smoothx, smoothy half-width of convolution kernel applied to + * threshold array: use values between 1 and 3 + * \param[in] delta difference parameter in basin filling; + * use 0 to skip + * \return pixd 8 bpp, background-normalized), or NULL on error + * + *
+ * Notes:
+ *      (1) This does adaptation flexibly to a quickly varying background.
+ *          For that reason, all input parameters should be small.
+ *      (2) sx and sy give the tile size; they should be in [5 - 7].
+ *      (3) The full width and height of the convolution kernel
+ *          are (2 * smoothx + 1) and (2 * smoothy + 1).  They
+ *          should be in [1 - 2].
+ *      (4) Basin filling is used to fill the large fg regions.  The
+ *          parameter %delta measures the height that the black
+ *          background is raised from the local minima.  By raising
+ *          the background, it is possible to threshold the large
+ *          fg regions to foreground.  If %delta is too large,
+ *          bg regions will be lifted, causing thickening of
+ *          the fg regions.  Use 0 to skip.
+ * 
+ */ +PIX * +pixBackgroundNormFlex(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 smoothx, + l_int32 smoothy, + l_int32 delta) +{ +l_float32 scalex, scaley; +PIX *pixt, *pixsd, *pixmin, *pixbg, *pixbgi, *pixd; + + PROCNAME("pixBackgroundNormFlex"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); + if (sx < 3 || sy < 3) + return (PIX *)ERROR_PTR("sx and/or sy less than 3", procName, NULL); + if (sx > 10 || sy > 10) + return (PIX *)ERROR_PTR("sx and/or sy exceed 10", procName, NULL); + if (smoothx < 1 || smoothy < 1) + return (PIX *)ERROR_PTR("smooth params less than 1", procName, NULL); + if (smoothx > 3 || smoothy > 3) + return (PIX *)ERROR_PTR("smooth params exceed 3", procName, NULL); + + /* Generate the bg estimate using smoothed average with subsampling */ + scalex = 1. / (l_float32)sx; + scaley = 1. / (l_float32)sy; + pixt = pixScaleSmooth(pixs, scalex, scaley); + + /* Do basin filling on the bg estimate if requested */ + if (delta <= 0) + pixsd = pixClone(pixt); + else { + pixLocalExtrema(pixt, 0, 0, &pixmin, NULL); + pixsd = pixSeedfillGrayBasin(pixmin, pixt, delta, 4); + pixDestroy(&pixmin); + } + pixbg = pixExtendByReplication(pixsd, 1, 1); + + /* Map the bg to 200 */ + pixbgi = pixGetInvBackgroundMap(pixbg, 200, smoothx, smoothy); + pixd = pixApplyInvBackgroundGrayMap(pixs, pixbgi, sx, sy); + + pixDestroy(&pixt); + pixDestroy(&pixsd); + pixDestroy(&pixbg); + pixDestroy(&pixbgi); + return pixd; +} + + +/*------------------------------------------------------------------* + * Adaptive contrast normalization * + *------------------------------------------------------------------*/ +/*! + * \brief pixContrastNorm() + * + * \param[in] pixd [optional] 8 bpp; null or equal to pixs + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] sx, sy tile dimensions + * \param[in] mindiff minimum difference to accept as valid + * \param[in] smoothx, smoothy half-width of convolution kernel applied to + * min and max arrays: use 0 for no smoothing + * \return pixd always + * + *
+ * Notes:
+ *      (1) This function adaptively attempts to expand the contrast
+ *          to the full dynamic range in each tile.  If the contrast in
+ *          a tile is smaller than %mindiff, it uses the min and max
+ *          pixel values from neighboring tiles.  It also can use
+ *          convolution to smooth the min and max values from
+ *          neighboring tiles.  After all that processing, it is
+ *          possible that the actual pixel values in the tile are outside
+ *          the computed [min ... max] range for local contrast
+ *          normalization.  Such pixels are taken to be at either 0
+ *          (if below the min) or 255 (if above the max).
+ *      (2) pixd can be equal to pixs (in-place operation) or
+ *          null (makes a new pixd).
+ *      (3) sx and sy give the tile size; they are typically at least 20.
+ *      (4) mindiff is used to eliminate results for tiles where it is
+ *          likely that either fg or bg is missing.  A value around 50
+ *          or more is reasonable.
+ *      (5) The full width and height of the convolution kernel
+ *          are (2 * smoothx + 1) and (2 * smoothy + 1).  Some smoothing
+ *          is typically useful, and we limit the smoothing half-widths
+ *          to the range from 0 to 8.
+ *      (6) A linear TRC (gamma = 1.0) is applied to increase the contrast
+ *          in each tile.  The result can subsequently be globally corrected,
+ *          by applying pixGammaTRC() with arbitrary values of gamma
+ *          and the 0 and 255 points of the mapping.
+ * 
+ */ +PIX * +pixContrastNorm(PIX *pixd, + PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 mindiff, + l_int32 smoothx, + l_int32 smoothy) +{ +PIX *pixmin, *pixmax; + + PROCNAME("pixContrastNorm"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); + if (sx < 5 || sy < 5) + return (PIX *)ERROR_PTR("sx and/or sy less than 5", procName, pixd); + if (smoothx < 0 || smoothy < 0) + return (PIX *)ERROR_PTR("smooth params less than 0", procName, pixd); + if (smoothx > 8 || smoothy > 8) + return (PIX *)ERROR_PTR("smooth params exceed 8", procName, pixd); + + /* Get the min and max pixel values in each tile, and represent + * each value as a pixel in pixmin and pixmax, respectively. */ + pixMinMaxTiles(pixs, sx, sy, mindiff, smoothx, smoothy, &pixmin, &pixmax); + + /* For each tile, do a linear expansion of the dynamic range + * of pixels so that the min value is mapped to 0 and the + * max value is mapped to 255. */ + pixd = pixLinearTRCTiled(pixd, pixs, sx, sy, pixmin, pixmax); + + pixDestroy(&pixmin); + pixDestroy(&pixmax); + return pixd; +} + + +/*! + * \brief pixMinMaxTiles() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] sx, sy tile dimensions + * \param[in] mindiff minimum difference to accept as valid + * \param[in] smoothx, smoothy half-width of convolution kernel applied to + * min and max arrays: use 0 for no smoothing + * \param[out] ppixmin tiled minima + * \param[out] ppixmax tiled maxima + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes filtered and smoothed values for the min and
+ *          max pixel values in each tile of the image.
+ *      (2) See pixContrastNorm() for usage.
+ * 
+ */ +l_ok +pixMinMaxTiles(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 mindiff, + l_int32 smoothx, + l_int32 smoothy, + PIX **ppixmin, + PIX **ppixmax) +{ +l_int32 w, h; +PIX *pixmin1, *pixmax1, *pixmin2, *pixmax2; + + PROCNAME("pixMinMaxTiles"); + + if (ppixmin) *ppixmin = NULL; + if (ppixmax) *ppixmax = NULL; + if (!ppixmin || !ppixmax) + return ERROR_INT("&pixmin or &pixmax undefined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (sx < 5 || sy < 5) + return ERROR_INT("sx and/or sy less than 3", procName, 1); + if (smoothx < 0 || smoothy < 0) + return ERROR_INT("smooth params less than 0", procName, 1); + if (smoothx > 5 || smoothy > 5) + return ERROR_INT("smooth params exceed 5", procName, 1); + + /* Get the min and max values in each tile */ + pixmin1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MIN); + pixmax1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MAX); + + pixmin2 = pixExtendByReplication(pixmin1, 1, 1); + pixmax2 = pixExtendByReplication(pixmax1, 1, 1); + pixDestroy(&pixmin1); + pixDestroy(&pixmax1); + + /* Make sure no value is 0 */ + pixAddConstantGray(pixmin2, 1); + pixAddConstantGray(pixmax2, 1); + + /* Generate holes where the contrast is too small */ + pixSetLowContrast(pixmin2, pixmax2, mindiff); + + /* Fill the holes (0 values) */ + pixGetDimensions(pixmin2, &w, &h, NULL); + pixFillMapHoles(pixmin2, w, h, L_FILL_BLACK); + pixFillMapHoles(pixmax2, w, h, L_FILL_BLACK); + + /* Smooth if requested */ + if (smoothx > 0 || smoothy > 0) { + smoothx = L_MIN(smoothx, (w - 1) / 2); + smoothy = L_MIN(smoothy, (h - 1) / 2); + *ppixmin = pixBlockconv(pixmin2, smoothx, smoothy); + *ppixmax = pixBlockconv(pixmax2, smoothx, smoothy); + } + else { + *ppixmin = pixClone(pixmin2); + *ppixmax = pixClone(pixmax2); + } + pixCopyResolution(*ppixmin, pixs); + pixCopyResolution(*ppixmax, pixs); + pixDestroy(&pixmin2); + pixDestroy(&pixmax2); + + return 0; +} + + +/*! + * \brief pixSetLowContrast() + * + * \param[in] pixs1 8 bpp + * \param[in] pixs2 8 bpp + * \param[in] mindiff minimum difference to accept as valid + * \return 0 if OK; 1 if no pixel diffs are large enough, or on error + * + *
+ * Notes:
+ *      (1) This compares corresponding pixels in pixs1 and pixs2.
+ *          When they differ by less than %mindiff, set the pixel
+ *          values to 0 in each.  Each pixel typically represents a tile
+ *          in a larger image, and a very small difference between
+ *          the min and max in the tile indicates that the min and max
+ *          values are not to be trusted.
+ *      (2) If contrast (pixel difference) detection is expected to fail,
+ *          caller should check return value.
+ * 
+ */ +l_ok +pixSetLowContrast(PIX *pixs1, + PIX *pixs2, + l_int32 mindiff) +{ +l_int32 i, j, w, h, d, wpl, val1, val2, found; +l_uint32 *data1, *data2, *line1, *line2; + + PROCNAME("pixSetLowContrast"); + + if (!pixs1 || !pixs2) + return ERROR_INT("pixs1 and pixs2 not both defined", procName, 1); + if (pixSizesEqual(pixs1, pixs2) == 0) + return ERROR_INT("pixs1 and pixs2 not equal size", procName, 1); + pixGetDimensions(pixs1, &w, &h, &d); + if (d != 8) + return ERROR_INT("depth not 8 bpp", procName, 1); + if (mindiff > 254) return 0; + + data1 = pixGetData(pixs1); + data2 = pixGetData(pixs2); + wpl = pixGetWpl(pixs1); + found = 0; /* init to not finding any diffs >= mindiff */ + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl; + line2 = data2 + i * wpl; + for (j = 0; j < w; j++) { + val1 = GET_DATA_BYTE(line1, j); + val2 = GET_DATA_BYTE(line2, j); + if (L_ABS(val1 - val2) >= mindiff) { + found = 1; + break; + } + } + if (found) break; + } + if (!found) { + L_WARNING("no pixel pair diffs as large as mindiff\n", procName); + pixClearAll(pixs1); + pixClearAll(pixs2); + return 1; + } + + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl; + line2 = data2 + i * wpl; + for (j = 0; j < w; j++) { + val1 = GET_DATA_BYTE(line1, j); + val2 = GET_DATA_BYTE(line2, j); + if (L_ABS(val1 - val2) < mindiff) { + SET_DATA_BYTE(line1, j, 0); + SET_DATA_BYTE(line2, j, 0); + } + } + } + + return 0; +} + + +/*! + * \brief pixLinearTRCTiled() + * + * \param[in] pixd [optional] 8 bpp + * \param[in] pixs 8 bpp, not colormapped + * \param[in] sx, sy tile dimensions + * \param[in] pixmin pix of min values in tiles + * \param[in] pixmax pix of max values in tiles + * \return pixd always + * + *
+ * Notes:
+ *      (1) pixd can be equal to pixs (in-place operation) or
+ *          null (makes a new pixd).
+ *      (2) sx and sy give the tile size; they are typically at least 20.
+ *      (3) pixmin and pixmax are generated by pixMinMaxTiles()
+ *      (4) For each tile, this does a linear expansion of the dynamic
+ *          range so that the min value in the tile becomes 0 and the
+ *          max value in the tile becomes 255.
+ *      (5) The LUTs that do the mapping are generated as needed
+ *          and stored for reuse in an integer array within the ptr array iaa[].
+ * 
+ */ +PIX * +pixLinearTRCTiled(PIX *pixd, + PIX *pixs, + l_int32 sx, + l_int32 sy, + PIX *pixmin, + PIX *pixmax) +{ +l_int32 i, j, k, m, w, h, wt, ht, wpl, wplt, xoff, yoff; +l_int32 minval, maxval, val, sval; +l_int32 *ia; +l_int32 **iaa; +l_uint32 *data, *datamin, *datamax, *line, *tline, *linemin, *linemax; + + PROCNAME("pixLinearTRCTiled"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); + if (!pixmin || !pixmax) + return (PIX *)ERROR_PTR("pixmin & pixmax not defined", procName, pixd); + if (sx < 5 || sy < 5) + return (PIX *)ERROR_PTR("sx and/or sy less than 5", procName, pixd); + + if ((iaa = (l_int32 **)LEPT_CALLOC(256, sizeof(l_int32 *))) == NULL) + return (PIX *)ERROR_PTR("iaa not made", procName, NULL); + if ((pixd = pixCopy(pixd, pixs)) == NULL) { + LEPT_FREE(iaa); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixGetDimensions(pixd, &w, &h, NULL); + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + datamin = pixGetData(pixmin); + datamax = pixGetData(pixmax); + wplt = pixGetWpl(pixmin); + pixGetDimensions(pixmin, &wt, &ht, NULL); + for (i = 0; i < ht; i++) { + line = data + sy * i * wpl; + linemin = datamin + i * wplt; + linemax = datamax + i * wplt; + yoff = sy * i; + for (j = 0; j < wt; j++) { + xoff = sx * j; + minval = GET_DATA_BYTE(linemin, j); + maxval = GET_DATA_BYTE(linemax, j); + if (maxval == minval) { + L_ERROR("shouldn't happen! i,j = %d,%d, minval = %d\n", + procName, i, j, minval); + continue; + } + if ((ia = iaaGetLinearTRC(iaa, maxval - minval)) == NULL) { + L_ERROR("failure to make ia for j = %d!\n", procName, j); + continue; + } + for (k = 0; k < sy && yoff + k < h; k++) { + tline = line + k * wpl; + for (m = 0; m < sx && xoff + m < w; m++) { + val = GET_DATA_BYTE(tline, xoff + m); + sval = val - minval; + sval = L_MAX(0, sval); + SET_DATA_BYTE(tline, xoff + m, ia[sval]); + } + } + } + } + + for (i = 0; i < 256; i++) + LEPT_FREE(iaa[i]); + LEPT_FREE(iaa); + return pixd; +} + + +/*! + * \brief iaaGetLinearTRC() + * + * \param[in] iaa bare array of ptrs to l_int32 + * \param[in] diff between min and max pixel values that are + * to be mapped to 0 and 255 + * \return ia LUT with input (val - minval) and output a + * value between 0 and 255) + */ +static l_int32 * +iaaGetLinearTRC(l_int32 **iaa, + l_int32 diff) +{ +l_int32 i; +l_int32 *ia; +l_float32 factor; + + PROCNAME("iaaGetLinearTRC"); + + if (!iaa) + return (l_int32 *)ERROR_PTR("iaa not defined", procName, NULL); + + if (iaa[diff] != NULL) /* already have it */ + return iaa[diff]; + + if ((ia = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32))) == NULL) + return (l_int32 *)ERROR_PTR("ia not made", procName, NULL); + iaa[diff] = ia; + if (diff == 0) { /* shouldn't happen */ + for (i = 0; i < 256; i++) + ia[i] = 128; + } + else { + factor = 255. / (l_float32)diff; + for (i = 0; i < diff + 1; i++) + ia[i] = (l_int32)(factor * i + 0.5); + for (i = diff + 1; i < 256; i++) + ia[i] = 255; + } + + return ia; +} diff --git a/3rdparty/hgOCR/leptonica/affine.c b/3rdparty/hgOCR/leptonica/affine.c new file mode 100644 index 00000000..10cb873d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/affine.c @@ -0,0 +1,1622 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file affine.c + *
+ *
+ *      Affine (3 pt) image transformation using a sampled
+ *      (to nearest integer) transform on each dest point
+ *           PIX        *pixAffineSampledPta()
+ *           PIX        *pixAffineSampled()
+ *
+ *      Affine (3 pt) image transformation using interpolation
+ *      (or area mapping) for anti-aliasing images that are
+ *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
+ *           PIX        *pixAffinePta()
+ *           PIX        *pixAffine()
+ *           PIX        *pixAffinePtaColor()
+ *           PIX        *pixAffineColor()
+ *           PIX        *pixAffinePtaGray()
+ *           PIX        *pixAffineGray()
+ *
+ *      Affine transform including alpha (blend) component
+ *           PIX        *pixAffinePtaWithAlpha()
+ *
+ *      Affine coordinate transformation
+ *           l_int32     getAffineXformCoeffs()
+ *           l_int32     affineInvertXform()
+ *           l_int32     affineXformSampledPt()
+ *           l_int32     affineXformPt()
+ *
+ *      Interpolation helper functions
+ *           l_int32     linearInterpolatePixelGray()
+ *           l_int32     linearInterpolatePixelColor()
+ *
+ *      Gauss-jordan linear equation solver
+ *           l_int32     gaussjordan()
+ *
+ *      Affine image transformation using a sequence of
+ *      shear/scale/translation operations
+ *           PIX        *pixAffineSequential()
+ *
+ *      One can define a coordinate space by the location of the origin,
+ *      the orientation of x and y axes, and the unit scaling along
+ *      each axis.  An affine transform is a general linear
+ *      transformation from one coordinate space to another.
+ *
+ *      For the general case, we can define the affine transform using
+ *      two sets of three (noncollinear) points in a plane.  One set
+ *      corresponds to the input (src) coordinate space; the other to the
+ *      transformed (dest) coordinate space.  Each point in the
+ *      src corresponds to one of the points in the dest.  With two
+ *      sets of three points, we get a set of 6 equations in 6 unknowns
+ *      that specifies the mapping between the coordinate spaces.
+ *      The interface here allows you to specify either the corresponding
+ *      sets of 3 points, or the transform itself (as a vector of 6
+ *      coefficients).
+ *
+ *      Given the transform as a vector of 6 coefficients, we can compute
+ *      both a a pointwise affine coordinate transformation and an
+ *      affine image transformation.
+ *
+ *      To compute the coordinate transform, we need the coordinate
+ *      value (x',y') in the transformed space for any point (x,y)
+ *      in the original space.  To derive this transform from the
+ *      three corresponding points, it is convenient to express the affine
+ *      coordinate transformation using an LU decomposition of
+ *      a set of six linear equations that express the six coordinates
+ *      of the three points in the transformed space as a function of
+ *      the six coordinates in the original space.  Once we have
+ *      this transform matrix , we can transform an image by
+ *      finding, for each destination pixel, the pixel (or pixels)
+ *      in the source that give rise to it.
+ *
+ *      This 'pointwise' transformation can be done either by sampling
+ *      and picking a single pixel in the src to replicate into the dest,
+ *      or by interpolating (or averaging) over four src pixels to
+ *      determine the value of the dest pixel.  The first method is
+ *      implemented by pixAffineSampled() and the second method by
+ *      pixAffine().  The interpolated method can only be used for
+ *      images with more than 1 bpp, but for these, the image quality
+ *      is significantly better than the sampled method, due to
+ *      the 'antialiasing' effect of weighting the src pixels.
+ *
+ *      Interpolation works well when there is relatively little scaling,
+ *      or if there is image expansion in general.  However, if there
+ *      is significant image reduction, one should apply a low-pass
+ *      filter before subsampling to avoid aliasing the high frequencies.
+ *
+ *      A typical application might be to align two images, which
+ *      may be scaled, rotated and translated versions of each other.
+ *      Through some pre-processing, three corresponding points are
+ *      located in each of the two images.  One of the images is
+ *      then to be (affine) transformed to align with the other.
+ *      As mentioned, the standard way to do this is to use three
+ *      sets of points, compute the 6 transformation coefficients
+ *      from these points that describe the linear transformation,
+ *
+ *          x' = ax + by + c
+ *          y' = dx + ey + f
+ *
+ *      and use this in a pointwise manner to transform the image.
+ *
+ *      N.B.  Be sure to see the comment in getAffineXformCoeffs(),
+ *      regarding using the inverse of the affine transform for points
+ *      to transform images.
+ *
+ *      There is another way to do this transformation; namely,
+ *      by doing a sequence of simple affine transforms, without
+ *      computing directly the affine coordinate transformation.
+ *      We have at our disposal (1) translations (using rasterop),
+ *      (2) horizontal and vertical shear about any horizontal and vertical
+ *      line, respectively, and (3) non-isotropic scaling by two
+ *      arbitrary x and y scaling factors.  We also have rotation
+ *      about an arbitrary point, but this is equivalent to a set
+ *      of three shears so we do not need to use it.
+ *
+ *      Why might we do this?  For binary images, it is usually
+ *      more efficient to do such transformations by a sequence
+ *      of word parallel operations.  Shear and translation can be
+ *      done in-place and word parallel; arbitrary scaling is
+ *      mostly pixel-wise.
+ *
+ *      Suppose that we are transforming image 1 to correspond to image 2.
+ *      We have a set of three points, describing the coordinate space
+ *      embedded in image 1, and we need to transform image 1 until
+ *      those three points exactly correspond to the new coordinate space
+ *      defined by the second set of three points.  In our image
+ *      matching application, the latter set of three points was
+ *      found to be the corresponding points in image 2.
+ *
+ *      The most elegant way I can think of to do such a sequential
+ *      implementation is to imagine that we're going to transform
+ *      BOTH images until they're aligned.  (We don't really want
+ *      to transform both, because in fact we may only have one image
+ *      that is undergoing a general affine transformation.)
+ *
+ *      Choose the 3 corresponding points as follows:
+ *         ~ The 1st point is an origin
+ *         ~ The 2nd point gives the orientation and scaling of the
+ *           "x" axis with respect to the origin
+ *         ~ The 3rd point does likewise for the "y" axis.
+ *      These "axes" must not be collinear; otherwise they are
+ *      arbitrary (although some strange things will happen if
+ *      the handedness sweeping through the minimum angle between
+ *      the axes is opposite).
+ *
+ *      An important constraint is that we have shear operations
+ *      about an arbitrary horizontal or vertical line, but always
+ *      parallel to the x or y axis.  If we continue to pretend that
+ *      we have an unprimed coordinate space embedded in image 1 and
+ *      a primed coordinate space embedded in image 2, we imagine
+ *      (a) transforming image 1 by horizontal and vertical shears about
+ *      point 1 to align points 3 and 2 along the y and x axes,
+ *      respectively, and (b) transforming image 2 by horizontal and
+ *      vertical shears about point 1' to align points 3' and 2' along
+ *      the y and x axes.  Then we scale image 1 so that the distances
+ *      from 1 to 2 and from 1 to 3 are equal to the distances in
+ *      image 2 from 1' to 2' and from 1' to 3'.  This scaling operation
+ *      leaves the true image origin, at (0,0) invariant, and will in
+ *      general translate point 1.  The original points 1 and 1' will
+ *      typically not coincide in any event, so we must translate
+ *      the origin of image 1, at its current point 1, to the origin
+ *      of image 2 at 1'.  The images should now be aligned.  But
+ *      because we never really transformed image 2 (and image 2 may
+ *      not even exist), we now perform  on image 1 the reverse of
+ *      the shear transforms that we imagined doing on image 2;
+ *      namely, the negative vertical shear followed by the negative
+ *      horizontal shear.  Image 1 should now have its transformed
+ *      unprimed coordinates aligned with the original primed
+ *      coordinates.  In all this, it is only necessary to keep track
+ *      of the shear angles and translations of points during the shears.
+ *      What has been accomplished is a general affine transformation
+ *      on image 1.
+ *
+ *      Having described all this, if you are going to use an
+ *      affine transformation in an application, this is what you
+ *      need to know:
+ *
+ *          (1) You should NEVER use the sequential method, because
+ *              the image quality for 1 bpp text is much poorer
+ *              (even though it is about 2x faster than the pointwise sampled
+ *              method), and for images with depth greater than 1, it is
+ *              nearly 20x slower than the pointwise sampled method
+ *              and over 10x slower than the pointwise interpolated method!
+ *              The sequential method is given here for purely
+ *              pedagogical reasons.
+ *
+ *          (2) For 1 bpp images, use the pointwise sampled function
+ *              pixAffineSampled().  For all other images, the best
+ *              quality results result from using the pointwise
+ *              interpolated function pixAffinePta() or pixAffine();
+ *              the cost is less than a doubling of the computation time
+ *              with respect to the sampled function.  If you use
+ *              interpolation on colormapped images, the colormap will
+ *              be removed, resulting in either a grayscale or color
+ *              image, depending on the values in the colormap.
+ *              If you want to retain the colormap, use pixAffineSampled().
+ *
+ *      Typical relative timing of pointwise transforms (sampled = 1.0):
+ *      8 bpp:   sampled        1.0
+ *               interpolated   1.6
+ *      32 bpp:  sampled        1.0
+ *               interpolated   1.8
+ *      Additionally, the computation time/pixel is nearly the same
+ *      for 8 bpp and 32 bpp, for both sampled and interpolated.
+ * 
+ */ + + +#include +#include +#include "allheaders.h" + +extern l_float32 AlphaMaskBorderVals[2]; + +#ifndef NO_CONSOLE_IO +#define DEBUG 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * Sampled affine image transformation * + *-------------------------------------------------------------*/ +/*! + * \brief pixAffineSampledPta() + * + * \param[in] pixs all depths + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) The 3 points must not be collinear.
+ *      (4) The order of the 3 points is arbitrary; however, to compare
+ *          with the sequential transform they must be in these locations
+ *          and in this order: origin, x-axis, y-axis.
+ *      (5) For 1 bpp images, this has much better quality results
+ *          than pixAffineSequential(), particularly for text.
+ *          It is about 3x slower, but does not require additional
+ *          border pixels.  The poor quality of pixAffineSequential()
+ *          is due to repeated quantized transforms.  It is strongly
+ *          recommended that pixAffineSampled() be used for 1 bpp images.
+ *      (6) For 8 or 32 bpp, much better quality is obtained by the
+ *          somewhat slower pixAffinePta().  See that function
+ *          for relative timings between sampled and interpolated.
+ *      (7) To repeat, use of the sequential transform,
+ *          pixAffineSequential(), for any images, is discouraged.
+ * 
+ */ +PIX * +pixAffineSampledPta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixAffineSampledPta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 3) + return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); + if (ptaGetCount(ptad) != 3) + return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getAffineXformCoeffs(ptad, ptas, &vc); + pixd = pixAffineSampled(pixs, vc, incolor); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixAffineSampled() + * + * \param[in] pixs all depths + * \param[in] vc vector of 6 coefficients for affine transformation + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) For 8 or 32 bpp, much better quality is obtained by the
+ *          somewhat slower pixAffine().  See that function
+ *          for relative timings between sampled and interpolated.
+ * 
+ */ +PIX * +pixAffineSampled(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; +l_uint32 val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixAffineSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); + + /* Init all dest pixels to color to be brought in from outside */ + pixd = pixCreateTemplate(pixs); + if ((cmap = pixGetColormap(pixs)) != NULL) { + if (incolor == L_BRING_IN_WHITE) + color = 1; + else + color = 0; + pixcmapAddBlackOrWhite(cmap, color, &cmapindex); + pixSetAllArbitrary(pixd, cmapindex); + } else { + if ((d == 1 && incolor == L_BRING_IN_WHITE) || + (d > 1 && incolor == L_BRING_IN_BLACK)) { + pixClearAll(pixd); + } else { + pixSetAll(pixd); + } + } + + /* Scan over the dest pixels */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + affineXformSampledPt(vc, j, i, &x, &y); + if (x < 0 || y < 0 || x >=w || y >= h) + continue; + lines = datas + y * wpls; + if (d == 1) { + val = GET_DATA_BIT(lines, x); + SET_DATA_BIT_VAL(lined, j, val); + } else if (d == 8) { + val = GET_DATA_BYTE(lines, x); + SET_DATA_BYTE(lined, j, val); + } else if (d == 32) { + lined[j] = lines[x]; + } else if (d == 2) { + val = GET_DATA_DIBIT(lines, x); + SET_DATA_DIBIT(lined, j, val); + } else if (d == 4) { + val = GET_DATA_QBIT(lines, x); + SET_DATA_QBIT(lined, j, val); + } + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Interpolated affine image transformation * + *---------------------------------------------------------------------*/ +/*! + * \brief pixAffinePta() + * + * \param[in] pixs all depths; colormap ok + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixAffinePta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixAffinePta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 3) + return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); + if (ptaGetCount(ptad) != 3) + return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixAffineSampledPta(pixs, ptad, ptas, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixAffinePtaGray(pixt2, ptad, ptas, colorval); + else /* d == 32 */ + pixd = pixAffinePtaColor(pixt2, ptad, ptas, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixAffine() + * + * \param[in] pixs all depths; colormap ok + * \param[in] vc vector of 6 coefficients for affine transformation + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixAffine(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixAffine"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixAffineSampled(pixs, vc, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixAffineGray(pixt2, vc, colorval); + else /* d == 32 */ + pixd = pixAffineColor(pixt2, vc, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixAffinePtaColor() + * + * \param[in] pixs 32 bpp + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] colorval e.g.: 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixAffinePtaColor(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint32 colorval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixAffinePtaColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (ptaGetCount(ptas) != 3) + return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); + if (ptaGetCount(ptad) != 3) + return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getAffineXformCoeffs(ptad, ptas, &vc); + pixd = pixAffineColor(pixs, vc, colorval); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixAffineColor() + * + * \param[in] pixs 32 bpp + * \param[in] vc vector of 6 coefficients for affine transformation + * \param[in] colorval e.g.: 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixAffineColor(PIX *pixs, + l_float32 *vc, + l_uint32 colorval) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_uint32 val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixAffineColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, colorval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + affineXformPt(vc, j, i, &x, &y); + linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, + &val); + *(lined + j) = val; + } + } + + /* If rgba, transform the pixs alpha channel and insert in pixd */ + if (pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixAffineGray(pix1, vc, 255); /* bring in opaque */ + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return pixd; +} + + +/*! + * \brief pixAffinePtaGray() + * + * \param[in] pixs 8 bpp + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] grayval e.g.: 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixAffinePtaGray(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint8 grayval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixAffinePtaGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (ptaGetCount(ptas) != 3) + return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); + if (ptaGetCount(ptad) != 3) + return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getAffineXformCoeffs(ptad, ptas, &vc); + pixd = pixAffineGray(pixs, vc, grayval); + LEPT_FREE(vc); + + return pixd; +} + + + +/*! + * \brief pixAffineGray() + * + * \param[in] pixs 8 bpp + * \param[in] vc vector of 6 coefficients for affine transformation + * \param[in] grayval e.g.: 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixAffineGray(PIX *pixs, + l_float32 *vc, + l_uint8 grayval) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pixd; + + PROCNAME("pixAffineGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, grayval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + affineXformPt(vc, j, i, &x, &y); + linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Affine transform including alpha (blend) component * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixAffinePtaWithAlpha() + * + * \param[in] pixs 32 bpp rgb + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] pixg [optional] 8 bpp, can be null + * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent + * and 1.0 fully opaque + * \param[in] border of pixels added to capture transformed source pixels + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The alpha channel is transformed separately from pixs,
+ *          and aligns with it, being fully transparent outside the
+ *          boundary of the transformed pixs.  For pixels that are fully
+ *          transparent, a blending function like pixBlendWithGrayMask()
+ *          will give zero weight to corresponding pixels in pixs.
+ *      (2) If pixg is NULL, it is generated as an alpha layer that is
+ *          partially opaque, using %fract.  Otherwise, it is cropped
+ *          to pixs if required and %fract is ignored.  The alpha channel
+ *          in pixs is never used.
+ *      (3) Colormaps are removed.
+ *      (4) When pixs is transformed, it doesn't matter what color is brought
+ *          in because the alpha channel will be transparent (0) there.
+ *      (5) To avoid losing source pixels in the destination, it may be
+ *          necessary to add a border to the source pix before doing
+ *          the affine transformation.  This can be any non-negative number.
+ *      (6) The input %ptad and %ptas are in a coordinate space before
+ *          the border is added.  Internally, we compensate for this
+ *          before doing the affine transform on the image after the border
+ *          is added.
+ *      (7) The default setting for the border values in the alpha channel
+ *          is 0 (transparent) for the outermost ring of pixels and
+ *          (0.5 * fract * 255) for the second ring.  When blended over
+ *          a second image, this
+ *          (a) shrinks the visible image to make a clean overlap edge
+ *              with an image below, and
+ *          (b) softens the edges by weakening the aliasing there.
+ *          Use l_setAlphaMaskBorder() to change these values.
+ * 
+ */ +PIX * +pixAffinePtaWithAlpha(PIX *pixs, + PTA *ptad, + PTA *ptas, + PIX *pixg, + l_float32 fract, + l_int32 border) +{ +l_int32 ws, hs, d; +PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; +PTA *ptad2, *ptas2; + + PROCNAME("pixAffinePtaWithAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (d != 32 && pixGetColormap(pixs) == NULL) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (pixg && pixGetDepth(pixg) != 8) { + L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", + procName); + pixg = NULL; + } + if (!pixg && (fract < 0.0 || fract > 1.0)) { + L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); + fract = 1.0; + } + if (!pixg && fract == 0.0) + L_WARNING("fully opaque alpha; image will not be blended\n", procName); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + + /* Add border; the color doesn't matter */ + pixb1 = pixAddBorder(pixs, border, 0); + + /* Transform the ptr arrays to work on the bordered image */ + ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); + ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); + + /* Do separate affine transform of rgb channels of pixs and of pixg */ + pixd = pixAffinePtaColor(pixb1, ptad2, ptas2, 0); + if (!pixg) { + pixg2 = pixCreate(ws, hs, 8); + if (fract == 1.0) + pixSetAll(pixg2); + else + pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); + } else { + pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); + } + if (ws > 10 && hs > 10) { /* see note 7 */ + pixSetBorderRingVal(pixg2, 1, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); + pixSetBorderRingVal(pixg2, 2, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); + + } + pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ + pixga = pixAffinePtaGray(pixb2, ptad2, ptas2, 0); + pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); + pixSetSpp(pixd, 4); + + pixDestroy(&pixg2); + pixDestroy(&pixb1); + pixDestroy(&pixb2); + pixDestroy(&pixga); + ptaDestroy(&ptad2); + ptaDestroy(&ptas2); + return pixd; +} + + +/*-------------------------------------------------------------* + * Affine coordinate transformation * + *-------------------------------------------------------------*/ +/*! + * \brief getAffineXformCoeffs() + * + * \param[in] ptas source 3 points; unprimed + * \param[in] ptad transformed 3 points; primed + * \param[out] pvc vector of coefficients of transform + * \return 0 if OK; 1 on error + * + *
+ *  We have a set of six equations, describing the affine
+ *  transformation that takes 3 points ptas into 3 other
+ *  points ptad.  These equations are:
+ *
+ *          x1' = c[0]*x1 + c[1]*y1 + c[2]
+ *          y1' = c[3]*x1 + c[4]*y1 + c[5]
+ *          x2' = c[0]*x2 + c[1]*y2 + c[2]
+ *          y2' = c[3]*x2 + c[4]*y2 + c[5]
+ *          x3' = c[0]*x3 + c[1]*y3 + c[2]
+ *          y3' = c[3]*x3 + c[4]*y3 + c[5]
+ *
+ *  This can be represented as
+ *
+ *          AC = B
+ *
+ *  where B and C are column vectors
+ *
+ *          B = [ x1' y1' x2' y2' x3' y3' ]
+ *          C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] ]
+ *
+ *  and A is the 6x6 matrix
+ *
+ *          x1   y1   1   0    0    0
+ *           0    0   0   x1   y1   1
+ *          x2   y2   1   0    0    0
+ *           0    0   0   x2   y2   1
+ *          x3   y3   1   0    0    0
+ *           0    0   0   x3   y3   1
+ *
+ *  These six equations are solved here for the coefficients C.
+ *
+ *  These six coefficients can then be used to find the dest
+ *  point x',y') corresponding to any src point (x,y, according
+ *  to the equations
+ *
+ *           x' = c[0]x + c[1]y + c[2]
+ *           y' = c[3]x + c[4]y + c[5]
+ *
+ *  that are implemented in affineXformPt.
+ *
+ *  !!!!!!!!!!!!!!!!!!   Very important   !!!!!!!!!!!!!!!!!!!!!!
+ *
+ *  When the affine transform is composed from a set of simple
+ *  operations such as translation, scaling and rotation,
+ *  it is built in a form to convert from the un-transformed src
+ *  point to the transformed dest point.  However, when an
+ *  affine transform is used on images, it is used in an inverted
+ *  way: it converts from the transformed dest point to the
+ *  un-transformed src point.  So, for example, if you transform
+ *  a boxa using transform A, to transform an image in the same
+ *  way you must use the inverse of A.
+ *
+ *  For example, if you transform a boxa with a 3x3 affine matrix
+ *  'mat', the analogous image transformation must use 'matinv':
+ * \code
+ *     boxad = boxaAffineTransform(boxas, mat);
+ *     affineInvertXform(mat, &matinv);
+ *     pixd = pixAffine(pixs, matinv, L_BRING_IN_WHITE);
+ * \endcode
+ *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ * 
+ */ +l_ok +getAffineXformCoeffs(PTA *ptas, + PTA *ptad, + l_float32 **pvc) +{ +l_int32 i; +l_float32 x1, y1, x2, y2, x3, y3; +l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ +l_float32 *a[6]; /* 6x6 matrix A */ + + PROCNAME("getAffineXformCoeffs"); + + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (!ptad) + return ERROR_INT("ptad not defined", procName, 1); + if (!pvc) + return ERROR_INT("&vc not defined", procName, 1); + + if ((b = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32))) == NULL) + return ERROR_INT("b not made", procName, 1); + *pvc = b; + + ptaGetPt(ptas, 0, &x1, &y1); + ptaGetPt(ptas, 1, &x2, &y2); + ptaGetPt(ptas, 2, &x3, &y3); + ptaGetPt(ptad, 0, &b[0], &b[1]); + ptaGetPt(ptad, 1, &b[2], &b[3]); + ptaGetPt(ptad, 2, &b[4], &b[5]); + + for (i = 0; i < 6; i++) + if ((a[i] = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32))) == NULL) + return ERROR_INT("a[i] not made", procName, 1); + + a[0][0] = x1; + a[0][1] = y1; + a[0][2] = 1.; + a[1][3] = x1; + a[1][4] = y1; + a[1][5] = 1.; + a[2][0] = x2; + a[2][1] = y2; + a[2][2] = 1.; + a[3][3] = x2; + a[3][4] = y2; + a[3][5] = 1.; + a[4][0] = x3; + a[4][1] = y3; + a[4][2] = 1.; + a[5][3] = x3; + a[5][4] = y3; + a[5][5] = 1.; + + gaussjordan(a, b, 6); + + for (i = 0; i < 6; i++) + LEPT_FREE(a[i]); + + return 0; +} + + +/*! + * \brief affineInvertXform() + * + * \param[in] vc vector of 6 coefficients + * \param[out] pvci inverted transform + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The 6 affine transform coefficients are the first
+ *          two rows of a 3x3 matrix where the last row has
+ *          only a 1 in the third column.  We invert this
+ *          using gaussjordan(), and select the first 2 rows
+ *          as the coefficients of the inverse affine transform.
+ *      (2) Alternatively, we can find the inverse transform
+ *          coefficients by inverting the 2x2 submatrix,
+ *          and treating the top 2 coefficients in the 3rd column as
+ *          a RHS vector for that 2x2 submatrix.  Then the
+ *          6 inverted transform coefficients are composed of
+ *          the inverted 2x2 submatrix and the negative of the
+ *          transformed RHS vector.  Why is this so?  We have
+ *             Y = AX + R  (2 equations in 6 unknowns)
+ *          Then
+ *             X = A'Y - A'R
+ *          Gauss-jordan solves
+ *             AF = R
+ *          and puts the solution for F, which is A'R,
+ *          into the input R vector.
+ *
+ * 
+ */ +l_ok +affineInvertXform(l_float32 *vc, + l_float32 **pvci) +{ +l_int32 i; +l_float32 *vci; +l_float32 *a[3]; +l_float32 b[3] = {1.0, 1.0, 1.0}; /* anything; results ignored */ + + PROCNAME("affineInvertXform"); + + if (!pvci) + return ERROR_INT("&vci not defined", procName, 1); + *pvci = NULL; + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + +#if 1 + for (i = 0; i < 3; i++) + a[i] = (l_float32 *)LEPT_CALLOC(3, sizeof(l_float32)); + a[0][0] = vc[0]; + a[0][1] = vc[1]; + a[0][2] = vc[2]; + a[1][0] = vc[3]; + a[1][1] = vc[4]; + a[1][2] = vc[5]; + a[2][2] = 1.0; + gaussjordan(a, b, 3); /* this inverts matrix a */ + vci = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); + *pvci = vci; + vci[0] = a[0][0]; + vci[1] = a[0][1]; + vci[2] = a[0][2]; + vci[3] = a[1][0]; + vci[4] = a[1][1]; + vci[5] = a[1][2]; + for (i = 0; i < 3; i++) + LEPT_FREE(a[i]); + +#else + + /* Alternative version, inverting a 2x2 matrix */ + { l_float32 *a2[2]; + for (i = 0; i < 2; i++) + a2[i] = (l_float32 *)LEPT_CALLOC(2, sizeof(l_float32)); + a2[0][0] = vc[0]; + a2[0][1] = vc[1]; + a2[1][0] = vc[3]; + a2[1][1] = vc[4]; + b[0] = vc[2]; + b[1] = vc[5]; + gaussjordan(a2, b, 2); /* this inverts matrix a2 */ + vci = (l_float32 *)LEPT_CALLOC(6, sizeof(l_float32)); + *pvci = vci; + vci[0] = a2[0][0]; + vci[1] = a2[0][1]; + vci[2] = -b[0]; /* note sign */ + vci[3] = a2[1][0]; + vci[4] = a2[1][1]; + vci[5] = -b[1]; /* note sign */ + for (i = 0; i < 2; i++) + LEPT_FREE(a2[i]); + } +#endif + + return 0; +} + + +/*! + * \brief affineXformSampledPt() + * + * \param[in] vc vector of 6 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds the nearest pixel coordinates of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +affineXformSampledPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_int32 *pxp, + l_int32 *pyp) +{ + PROCNAME("affineXformSampledPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] + 0.5); + *pyp = (l_int32)(vc[3] * x + vc[4] * y + vc[5] + 0.5); + return 0; +} + + +/*! + * \brief affineXformPt() + * + * \param[in] vc vector of 6 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This computes the floating point location of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +affineXformPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_float32 *pxp, + l_float32 *pyp) +{ + PROCNAME("affineXformPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + *pxp = vc[0] * x + vc[1] * y + vc[2]; + *pyp = vc[3] * x + vc[4] * y + vc[5]; + return 0; +} + + +/*-------------------------------------------------------------* + * Interpolation helper functions * + *-------------------------------------------------------------*/ +/*! + * \brief linearInterpolatePixelColor() + * + * \param[in] datas ptr to beginning of image data + * \param[in] wpls 32-bit word/line for this data array + * \param[in] w, h of image + * \param[in] x, y floating pt location for evaluation + * \param[in] colorval color brought in from the outside when the + * input x,y location is outside the image; + * in 0xrrggbb00 format) + * \param[out] pval interpolated color value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a standard linear interpolation function.  It is
+ *          equivalent to area weighting on each component, and
+ *          avoids "jaggies" when rendering sharp edges.
+ * 
+ */ +l_ok +linearInterpolatePixelColor(l_uint32 *datas, + l_int32 wpls, + l_int32 w, + l_int32 h, + l_float32 x, + l_float32 y, + l_uint32 colorval, + l_uint32 *pval) +{ +l_int32 valid, xpm, ypm, xp, xp2, yp, xf, yf; +l_int32 rval, gval, bval; +l_uint32 word00, word01, word10, word11; +l_uint32 *lines; + + PROCNAME("linearInterpolatePixelColor"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = colorval; + if (!datas) + return ERROR_INT("datas not defined", procName, 1); + + /* Skip if x or y are invalid. (x,y) must be in the source image. + * Failure to detect an invalid point will cause a mem address fault. + * Occasionally, x or y will be a nan, and relational checks always + * fail for nans. Therefore we check if the point is inside the pix */ + valid = (x >= 0.0 && y >= 0.0 && x < w && y < h); + if (!valid) return 0; + + xpm = (l_int32)(16.0 * x); + ypm = (l_int32)(16.0 * y); + xp = xpm >> 4; + xp2 = xp + 1 < w ? xp + 1 : xp; + yp = ypm >> 4; + if (yp + 1 >= h) wpls = 0; + xf = xpm & 0x0f; + yf = ypm & 0x0f; + +#if DEBUG + if (xf < 0 || yf < 0) + fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); +#endif /* DEBUG */ + + /* Do area weighting (eqiv. to linear interpolation) */ + lines = datas + yp * wpls; + word00 = *(lines + xp); + word10 = *(lines + xp2); + word01 = *(lines + wpls + xp); + word11 = *(lines + wpls + xp2); + rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff)) / 256; + gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff)) / 256; + bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff)) / 256; + composeRGBPixel(rval, gval, bval, pval); + return 0; +} + + +/*! + * \brief linearInterpolatePixelGray() + * + * \param[in] datas ptr to beginning of image data + * \param[in] wpls 32-bit word/line for this data array + * \param[in] w, h of image + * \param[in] x, y floating pt location for evaluation + * \param[in] grayval color brought in from the outside when the + * input x,y location is outside the image + * \param[out] pval interpolated gray value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a standard linear interpolation function.  It is
+ *          equivalent to area weighting on each component, and
+ *          avoids "jaggies" when rendering sharp edges.
+ * 
+ */ +l_ok +linearInterpolatePixelGray(l_uint32 *datas, + l_int32 wpls, + l_int32 w, + l_int32 h, + l_float32 x, + l_float32 y, + l_int32 grayval, + l_int32 *pval) +{ +l_int32 valid, xpm, ypm, xp, xp2, yp, xf, yf, v00, v10, v01, v11; +l_uint32 *lines; + + PROCNAME("linearInterpolatePixelGray"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = grayval; + if (!datas) + return ERROR_INT("datas not defined", procName, 1); + + /* Skip if x or y is invalid. (x,y) must be in the source image. + * Failure to detect an invalid point will cause a mem address fault. + * Occasionally, x or y will be a nan, and relational checks always + * fail for nans. Therefore we check if the point is inside the pix */ + valid = (x >= 0.0 && y >= 0.0 && x < w && y < h); + if (!valid) return 0; + + xpm = (l_int32)(16.0 * x); + ypm = (l_int32)(16.0 * y); + xp = xpm >> 4; + xp2 = xp + 1 < w ? xp + 1 : xp; + yp = ypm >> 4; + if (yp + 1 >= h) wpls = 0; + xf = xpm & 0x0f; + yf = ypm & 0x0f; + +#if DEBUG + if (xf < 0 || yf < 0) + fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); +#endif /* DEBUG */ + + /* Interpolate by area weighting. */ + lines = datas + yp * wpls; + v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); + v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp2); + v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); + v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp2); + *pval = (v00 + v01 + v10 + v11) / 256; + return 0; +} + + + +/*-------------------------------------------------------------* + * Gauss-jordan linear equation solver * + *-------------------------------------------------------------*/ +#define SWAP(a,b) {temp = (a); (a) = (b); (b) = temp;} + +/*! + * \brief gaussjordan() + * + * \param[in] a n x n matrix + * \param[in] b n x 1 right-hand side column vector + * \param[in] n dimension + * \return 0 if ok, 1 on error + * + *
+ * Notes:
+ *      (1) There are two side-effects:
+ *          * The matrix a is transformed to its inverse A
+ *          * The rhs vector b is transformed to the solution x
+ *            of the linear equation ax = b
+ *      (2) The inverse A can then be used to solve the same equation with
+ *          different rhs vectors c by multiplication: x = Ac
+ *      (3) Adapted from "Numerical Recipes in C, Second Edition", 1992,
+ *          pp. 36-41 (gauss-jordan elimination)
+ * 
+ */ +l_int32 +gaussjordan(l_float32 **a, + l_float32 *b, + l_int32 n) +{ +l_int32 i, icol, irow, j, k, col, row, success; +l_int32 *indexc, *indexr, *ipiv; +l_float32 maxval, val, pivinv, temp; + + PROCNAME("gaussjordan"); + + if (!a) + return ERROR_INT("a not defined", procName, 1); + if (!b) + return ERROR_INT("b not defined", procName, 1); + + success = TRUE; + indexc = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); + indexr = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); + ipiv = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); + if (!indexc || !indexr || !ipiv) { + L_ERROR("array not made\n", procName); + success = FALSE; + goto cleanup_arrays; + } + + icol = irow = 0; /* silence static checker */ + for (i = 0; i < n; i++) { + maxval = 0.0; + for (j = 0; j < n; j++) { + if (ipiv[j] != 1) { + for (k = 0; k < n; k++) { + if (ipiv[k] == 0) { + if (fabs(a[j][k]) >= maxval) { + maxval = fabs(a[j][k]); + irow = j; + icol = k; + } + } else if (ipiv[k] > 1) { + L_ERROR("singular matrix\n", procName); + success = FALSE; + goto cleanup_arrays; + } + } + } + } + ++(ipiv[icol]); + + if (irow != icol) { + for (col = 0; col < n; col++) + SWAP(a[irow][col], a[icol][col]); + SWAP(b[irow], b[icol]); + } + + indexr[i] = irow; + indexc[i] = icol; + if (a[icol][icol] == 0.0) { + L_ERROR("singular matrix\n", procName); + success = FALSE; + goto cleanup_arrays; + } + pivinv = 1.0 / a[icol][icol]; + a[icol][icol] = 1.0; + for (col = 0; col < n; col++) + a[icol][col] *= pivinv; + b[icol] *= pivinv; + + for (row = 0; row < n; row++) { + if (row != icol) { + val = a[row][icol]; + a[row][icol] = 0.0; + for (col = 0; col < n; col++) + a[row][col] -= a[icol][col] * val; + b[row] -= b[icol] * val; + } + } + } + + for (col = n - 1; col >= 0; col--) { + if (indexr[col] != indexc[col]) { + for (k = 0; k < n; k++) + SWAP(a[k][indexr[col]], a[k][indexc[col]]); + } + } + +cleanup_arrays: + LEPT_FREE(indexr); + LEPT_FREE(indexc); + LEPT_FREE(ipiv); + return (success) ? 0 : 1; +} + + +/*-------------------------------------------------------------* + * Sequential affine image transformation * + *-------------------------------------------------------------*/ +/*! + * \brief pixAffineSequential() + * + * \param[in] pixs + * \param[in] ptad 3 pts of final coordinate space + * \param[in] ptas 3 pts of initial coordinate space + * \param[in] bw pixels of additional border width during computation + * \param[in] bh pixels of additional border height during computation + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The 3 pts must not be collinear.
+ *      (2) The 3 pts must be given in this order:
+ *           ~ origin
+ *           ~ a location along the x-axis
+ *           ~ a location along the y-axis.
+ *      (3) You must guess how much border must be added so that no
+ *          pixels are lost in the transformations from src to
+ *          dest coordinate space.  (This can be calculated but it
+ *          is a lot of work!)  For coordinate spaces that are nearly
+ *          at right angles, on a 300 ppi scanned page, the addition
+ *          of 1000 pixels on each side is usually sufficient.
+ *      (4) This is here for pedagogical reasons.  It is about 3x faster
+ *          on 1 bpp images than pixAffineSampled(), but the results
+ *          on text are much inferior.
+ * 
+ */ +PIX * +pixAffineSequential(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 bw, + l_int32 bh) +{ +l_int32 x1, y1, x2, y2, x3, y3; /* ptas */ +l_int32 x1p, y1p, x2p, y2p, x3p, y3p; /* ptad */ +l_int32 x1sc, y1sc; /* scaled origin */ +l_float32 x2s, x2sp, scalex, scaley; +l_float32 th3, th3p, ph2, ph2p; +#if DEBUG +l_float32 rad2deg; +#endif /* DEBUG */ +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixAffineSequential"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + + if (ptaGetCount(ptas) != 3) + return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); + if (ptaGetCount(ptad) != 3) + return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); + ptaGetIPt(ptas, 0, &x1, &y1); + ptaGetIPt(ptas, 1, &x2, &y2); + ptaGetIPt(ptas, 2, &x3, &y3); + ptaGetIPt(ptad, 0, &x1p, &y1p); + ptaGetIPt(ptad, 1, &x2p, &y2p); + ptaGetIPt(ptad, 2, &x3p, &y3p); + + pix1 = pix2 = pixd = NULL; + + if (y1 == y3) + return (PIX *)ERROR_PTR("y1 == y3!", procName, NULL); + if (y1p == y3p) + return (PIX *)ERROR_PTR("y1p == y3p!", procName, NULL); + + if (bw != 0 || bh != 0) { + /* resize all points and add border to pixs */ + x1 = x1 + bw; + y1 = y1 + bh; + x2 = x2 + bw; + y2 = y2 + bh; + x3 = x3 + bw; + y3 = y3 + bh; + x1p = x1p + bw; + y1p = y1p + bh; + x2p = x2p + bw; + y2p = y2p + bh; + x3p = x3p + bw; + y3p = y3p + bh; + + if ((pix1 = pixAddBorderGeneral(pixs, bw, bw, bh, bh, 0)) == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + } else { + pix1 = pixCopy(NULL, pixs); + } + + /*-------------------------------------------------------------* + The horizontal shear is done to move the 3rd point to the + y axis. This moves the 2nd point either towards or away + from the y axis, depending on whether it is above or below + the x axis. That motion must be computed so that we know + the angle of vertical shear to use to get the 2nd point + on the x axis. We must also know the x coordinate of the + 2nd point in order to compute how much scaling is required + to match points on the axis. + *-------------------------------------------------------------*/ + + /* Shear angles required to put src points on x and y axes */ + th3 = atan2((l_float64)(x1 - x3), (l_float64)(y1 - y3)); + x2s = (l_float32)(x2 - ((l_float32)(y1 - y2) * (x3 - x1)) / (y1 - y3)); + if (x2s == (l_float32)x1) { + L_ERROR("x2s == x1!\n", procName); + goto cleanup_pix; + } + ph2 = atan2((l_float64)(y1 - y2), (l_float64)(x2s - x1)); + + /* Shear angles required to put dest points on x and y axes. + * Use the negative of these values to instead move the + * src points from the axes to the actual dest position. + * These values are also needed to scale the image. */ + th3p = atan2((l_float64)(x1p - x3p), (l_float64)(y1p - y3p)); + x2sp = (l_float32)(x2p - + ((l_float32)(y1p - y2p) * (x3p - x1p)) / (y1p - y3p)); + if (x2sp == (l_float32)x1p) { + L_ERROR("x2sp == x1p!\n", procName); + goto cleanup_pix; + } + ph2p = atan2((l_float64)(y1p - y2p), (l_float64)(x2sp - x1p)); + + /* Shear image to first put src point 3 on the y axis, + * and then to put src point 2 on the x axis */ + pixHShearIP(pix1, y1, th3, L_BRING_IN_WHITE); + pixVShearIP(pix1, x1, ph2, L_BRING_IN_WHITE); + + /* Scale image to match dest scale. The dest scale + * is calculated above from the angles th3p and ph2p + * that would be required to move the dest points to + * the x and y axes. */ + scalex = (l_float32)(x2sp - x1p) / (x2s - x1); + scaley = (l_float32)(y3p - y1p) / (y3 - y1); + if ((pix2 = pixScale(pix1, scalex, scaley)) == NULL) { + L_ERROR("pix2 not made\n", procName); + goto cleanup_pix; + } + +#if DEBUG + rad2deg = 180. / 3.1415926535; + fprintf(stderr, "th3 = %5.1f deg, ph2 = %5.1f deg\n", + rad2deg * th3, rad2deg * ph2); + fprintf(stderr, "th3' = %5.1f deg, ph2' = %5.1f deg\n", + rad2deg * th3p, rad2deg * ph2p); + fprintf(stderr, "scalex = %6.3f, scaley = %6.3f\n", scalex, scaley); +#endif /* DEBUG */ + + /*-------------------------------------------------------------* + Scaling moves the 1st src point, which is the origin. + It must now be moved again to coincide with the origin + (1st point) of the dest. After this is done, the 2nd + and 3rd points must be sheared back to the original + positions of the 2nd and 3rd dest points. We use the + negative of the angles that were previously computed + for shearing those points in the dest image to x and y + axes, and take the shears in reverse order as well. + *-------------------------------------------------------------*/ + /* Shift image to match dest origin. */ + x1sc = (l_int32)(scalex * x1 + 0.5); /* x comp of origin after scaling */ + y1sc = (l_int32)(scaley * y1 + 0.5); /* y comp of origin after scaling */ + pixRasteropIP(pix2, x1p - x1sc, y1p - y1sc, L_BRING_IN_WHITE); + + /* Shear image to take points 2 and 3 off the axis and + * put them in the original dest position */ + pixVShearIP(pix2, x1p, -ph2p, L_BRING_IN_WHITE); + pixHShearIP(pix2, y1p, -th3p, L_BRING_IN_WHITE); + + if (bw != 0 || bh != 0) { + if ((pixd = pixRemoveBorderGeneral(pix2, bw, bw, bh, bh)) == NULL) + L_ERROR("pixd not made\n", procName); + } else { + pixd = pixClone(pix2); + } + +cleanup_pix: + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/affinecompose.c b/3rdparty/hgOCR/leptonica/affinecompose.c new file mode 100644 index 00000000..28be7b9e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/affinecompose.c @@ -0,0 +1,662 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file affinecompose.c + *
+ *
+ *      Composable coordinate transforms
+ *           l_float32   *createMatrix2dTranslate()
+ *           l_float32   *createMatrix2dScale()
+ *           l_float32   *createMatrix2dRotate()
+ *
+ *      Special coordinate transforms on pta
+ *           PTA         *ptaTranslate()
+ *           PTA         *ptaScale()
+ *           PTA         *ptaRotate()
+ *
+ *      Special coordinate transforms on boxa
+ *           BOXA        *boxaTranslate()
+ *           BOXA        *boxaScale()
+ *           BOXA        *boxaRotate()
+ *
+ *      General coordinate transform on pta and boxa
+ *           PTA         *ptaAffineTransform()
+ *           BOXA        *boxaAffineTransform()
+ *
+ *      Matrix operations
+ *           l_int32      l_productMatVec()
+ *           l_int32      l_productMat2()
+ *           l_int32      l_productMat3()
+ *           l_int32      l_productMat4()
+ * 
+ */ + +#include +#include "allheaders.h" + + +/*-------------------------------------------------------------* + * Composable coordinate transforms * + *-------------------------------------------------------------*/ +/*! + * \brief createMatrix2dTranslate() + * + * \param[in] transx x component of translation wrt. the origin + * \param[in] transy y component of translation wrt. the origin + * \return 3x3 transform matrix, or NULL on error + * + *
+ * Notes:
+ *      (1) The translation is equivalent to:
+ *             v' = Av
+ *          where v and v' are 1x3 column vectors in the form
+ *             v = [x, y, 1]^    ^ denotes transpose
+ *          and the affine translation matrix is
+ *             A = [ 1   0   tx
+ *                   0   1   ty
+ *                   0   0    1  ]
+ *
+ *      (2) We consider translation as with respect to a fixed origin.
+ *          In a clipping operation, the origin moves and the points
+ *          are fixed, and you use (-tx, -ty) where (tx, ty) is the
+ *          translation vector of the origin.
+ * 
+ */ +l_float32 * +createMatrix2dTranslate(l_float32 transx, + l_float32 transy) +{ +l_float32 *mat; + + mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); + mat[0] = mat[4] = mat[8] = 1; + mat[2] = transx; + mat[5] = transy; + return mat; +} + + +/*! + * \brief createMatrix2dScale() + * + * \param[in] scalex horizontal scale factor + * \param[in] scaley vertical scale factor + * \return 3x3 transform matrix, or NULL on error + * + *
+ * Notes:
+ *      (1) The scaling is equivalent to:
+ *             v' = Av
+ *         where v and v' are 1x3 column vectors in the form
+ *              v = [x, y, 1]^    ^ denotes transpose
+ *         and the affine scaling matrix is
+ *             A = [ sx  0    0
+ *                   0   sy   0
+ *                   0   0    1  ]
+ *
+ *      (2) We consider scaling as with respect to a fixed origin.
+ *          In other words, the origin is the only point that doesn't
+ *          move in the scaling transform.
+ * 
+ */ +l_float32 * +createMatrix2dScale(l_float32 scalex, + l_float32 scaley) +{ +l_float32 *mat; + + mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); + mat[0] = scalex; + mat[4] = scaley; + mat[8] = 1; + return mat; +} + + +/*! + * \brief createMatrix2dRotate() + * + * \param[in] xc, yc location of center of rotation + * \param[in] angle rotation in radians; clockwise is positive + * \return 3x3 transform matrix, or NULL on error + * + *
+ * Notes:
+ *      (1) The rotation is equivalent to:
+ *             v' = Av
+ *          where v and v' are 1x3 column vectors in the form
+ *             v = [x, y, 1]^    ^ denotes transpose
+ *          and the affine rotation matrix is
+ *             A = [ cosa   -sina    xc*1-cosa + yc*sina
+ *                   sina    cosa    yc*1-cosa - xc*sina
+ *                     0       0                 1         ]
+ *
+ *          If the rotation is about the origin, xc, yc) = (0, 0 and
+ *          this simplifies to
+ *             A = [ cosa   -sina    0
+ *                   sina    cosa    0
+ *                     0       0     1 ]
+ *
+ *          These relations follow from the following equations, which
+ *          you can convince yourself are correct as follows.  Draw a
+ *          circle centered on xc,yc) and passing through (x,y), with
+ *          (x',y') on the arc at an angle 'a' clockwise from (x,y).
+ *           [ Hint: cosa + b = cosa * cosb - sina * sinb
+ *                   sina + b = sina * cosb + cosa * sinb ]
+ *
+ *            x' - xc =  x - xc) * cosa - (y - yc * sina
+ *            y' - yc =  x - xc) * sina + (y - yc * cosa
+ * 
+ */ +l_float32 * +createMatrix2dRotate(l_float32 xc, + l_float32 yc, + l_float32 angle) +{ +l_float32 sina, cosa; +l_float32 *mat; + + mat = (l_float32 *)LEPT_CALLOC(9, sizeof(l_float32)); + sina = sin(angle); + cosa = cos(angle); + mat[0] = mat[4] = cosa; + mat[1] = -sina; + mat[2] = xc * (1.0 - cosa) + yc * sina; + mat[3] = sina; + mat[5] = yc * (1.0 - cosa) - xc * sina; + mat[8] = 1; + return mat; +} + + + +/*-------------------------------------------------------------* + * Special coordinate transforms on pta * + *-------------------------------------------------------------*/ +/*! + * \brief ptaTranslate() + * + * \param[in] ptas for initial points + * \param[in] transx x component of translation wrt. the origin + * \param[in] transy y component of translation wrt. the origin + * \return ptad translated points, or NULL on error + * + *
+ * Notes:
+ *      (1) See createMatrix2dTranslate() for details of transform.
+ * 
+ */ +PTA * +ptaTranslate(PTA *ptas, + l_float32 transx, + l_float32 transy) +{ +l_int32 i, npts; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaTranslate"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + npts = ptaGetCount(ptas); + if ((ptad = ptaCreate(npts)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = 0; i < npts; i++) { + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, x + transx, y + transy); + } + + return ptad; +} + + +/*! + * \brief ptaScale() + * + * \param[in] ptas for initial points + * \param[in] scalex horizontal scale factor + * \param[in] scaley vertical scale factor + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See createMatrix2dScale() for details of transform.
+ * 
+ */ +PTA * +ptaScale(PTA *ptas, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 i, npts; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaScale"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + npts = ptaGetCount(ptas); + if ((ptad = ptaCreate(npts)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = 0; i < npts; i++) { + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, scalex * x, scaley * y); + } + + return ptad; +} + + +/*! + * \brief ptaRotate() + * + * \param[in] ptas for initial points + * \param[in] xc, yc location of center of rotation + * \param[in] angle rotation in radians; clockwise is positive + * \return 0 if OK; 1 on error + * + *
+ * Notes;
+ *      (1) See createMatrix2dScale() for details of transform.
+ *      (2) This transform can be thought of as composed of the
+ *          sum of two parts:
+ *           a) an (x,y)-dependent rotation about the origin:
+ *              xr = x * cosa - y * sina
+ *              yr = x * sina + y * cosa
+ *           b) an (x,y)-independent translation that depends on the
+ *              rotation center and the angle:
+ *              xt = xc - xc * cosa + yc * sina
+ *              yt = yc - xc * sina - yc * cosa
+ *          The translation part (xt,yt) is equal to the difference
+ *          between the center (xc,yc) and the location of the
+ *          center after it is rotated about the origin.
+ * 
+ */ +PTA * +ptaRotate(PTA *ptas, + l_float32 xc, + l_float32 yc, + l_float32 angle) +{ +l_int32 i, npts; +l_float32 x, y, xp, yp, sina, cosa; +PTA *ptad; + + PROCNAME("ptaRotate"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + npts = ptaGetCount(ptas); + if ((ptad = ptaCreate(npts)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + sina = sin(angle); + cosa = cos(angle); + for (i = 0; i < npts; i++) { + ptaGetPt(ptas, i, &x, &y); + xp = xc + (x - xc) * cosa - (y - yc) * sina; + yp = yc + (x - xc) * sina + (y - yc) * cosa; + ptaAddPt(ptad, xp, yp); + } + + return ptad; +} + + +/*-------------------------------------------------------------* + * Special coordinate transforms on boxa * + *-------------------------------------------------------------*/ +/*! + * \brief boxaTranslate() + * + * \param[in] boxas + * \param[in] transx x component of translation wrt. the origin + * \param[in] transy y component of translation wrt. the origin + * \return boxad translated boxas, or NULL on error + * + * Notes: + * (1) See createMatrix2dTranslate() for details of transform. + */ +BOXA * +boxaTranslate(BOXA *boxas, + l_float32 transx, + l_float32 transy) +{ +PTA *ptas, *ptad; +BOXA *boxad; + + PROCNAME("boxaTranslate"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + ptas = boxaConvertToPta(boxas, 4); + ptad = ptaTranslate(ptas, transx, transy); + boxad = ptaConvertToBoxa(ptad, 4); + ptaDestroy(&ptas); + ptaDestroy(&ptad); + return boxad; +} + + +/*! + * \brief boxaScale() + * + * \param[in] boxas + * \param[in] scalex horizontal scale factor + * \param[in] scaley vertical scale factor + * \return boxad scaled boxas, or NULL on error + * + * Notes: + * (1) See createMatrix2dScale() for details of transform. + */ +BOXA * +boxaScale(BOXA *boxas, + l_float32 scalex, + l_float32 scaley) +{ +PTA *ptas, *ptad; +BOXA *boxad; + + PROCNAME("boxaScale"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + ptas = boxaConvertToPta(boxas, 4); + ptad = ptaScale(ptas, scalex, scaley); + boxad = ptaConvertToBoxa(ptad, 4); + ptaDestroy(&ptas); + ptaDestroy(&ptad); + return boxad; +} + + +/*! + * \brief boxaRotate() + * + * \param[in] boxas + * \param[in] xc, yc location of center of rotation + * \param[in] angle rotation in radians; clockwise is positive + * \return boxad scaled boxas, or NULL on error + * + * Notes: + * (1) See createMatrix2dRotate() for details of transform. + */ +BOXA * +boxaRotate(BOXA *boxas, + l_float32 xc, + l_float32 yc, + l_float32 angle) +{ +PTA *ptas, *ptad; +BOXA *boxad; + + PROCNAME("boxaRotate"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + ptas = boxaConvertToPta(boxas, 4); + ptad = ptaRotate(ptas, xc, yc, angle); + boxad = ptaConvertToBoxa(ptad, 4); + ptaDestroy(&ptas); + ptaDestroy(&ptad); + return boxad; +} + + +/*-------------------------------------------------------------* + * General affine coordinate transform * + *-------------------------------------------------------------*/ +/*! + * \brief ptaAffineTransform() + * + * \param[in] ptas for initial points + * \param[in] mat 3x3 transform matrix; canonical form + * \return ptad transformed points, or NULL on error + */ +PTA * +ptaAffineTransform(PTA *ptas, + l_float32 *mat) +{ +l_int32 i, npts; +l_float32 vecs[3], vecd[3]; +PTA *ptad; + + PROCNAME("ptaAffineTransform"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (!mat) + return (PTA *)ERROR_PTR("transform not defined", procName, NULL); + + vecs[2] = 1; + npts = ptaGetCount(ptas); + if ((ptad = ptaCreate(npts)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = 0; i < npts; i++) { + ptaGetPt(ptas, i, &vecs[0], &vecs[1]); + l_productMatVec(mat, vecs, vecd, 3); + ptaAddPt(ptad, vecd[0], vecd[1]); + } + + return ptad; +} + + +/*! + * \brief boxaAffineTransform() + * + * \param[in] boxas + * \param[in] mat 3x3 transform matrix; canonical form + * \return boxad transformed boxas, or NULL on error + */ +BOXA * +boxaAffineTransform(BOXA *boxas, + l_float32 *mat) +{ +PTA *ptas, *ptad; +BOXA *boxad; + + PROCNAME("boxaAffineTransform"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!mat) + return (BOXA *)ERROR_PTR("transform not defined", procName, NULL); + + ptas = boxaConvertToPta(boxas, 4); + ptad = ptaAffineTransform(ptas, mat); + boxad = ptaConvertToBoxa(ptad, 4); + ptaDestroy(&ptas); + ptaDestroy(&ptad); + return boxad; +} + + +/*-------------------------------------------------------------* + * Matrix operations * + *-------------------------------------------------------------*/ +/*! + * \brief l_productMatVec() + * + * \param[in] mat square matrix, as a 1-dimensional %size^2 array + * \param[in] vecs input column vector of length %size + * \param[in] vecd result column vector + * \param[in] size matrix is %size x %size; vectors are length %size + * \return 0 if OK, 1 on error + */ +l_ok +l_productMatVec(l_float32 *mat, + l_float32 *vecs, + l_float32 *vecd, + l_int32 size) +{ +l_int32 i, j; + + PROCNAME("l_productMatVec"); + + if (!mat) + return ERROR_INT("matrix not defined", procName, 1); + if (!vecs) + return ERROR_INT("input vector not defined", procName, 1); + if (!vecd) + return ERROR_INT("result vector not defined", procName, 1); + + for (i = 0; i < size; i++) { + vecd[i] = 0; + for (j = 0; j < size; j++) { + vecd[i] += mat[size * i + j] * vecs[j]; + } + } + return 0; +} + + +/*! + * \brief l_productMat2() + * + * \param[in] mat1 square matrix, as a 1-dimensional size^2 array + * \param[in] mat2 square matrix, as a 1-dimensional size^2 array + * \param[in] matd square matrix; product stored here + * \param[in] size of matrices + * \return 0 if OK, 1 on error + */ +l_ok +l_productMat2(l_float32 *mat1, + l_float32 *mat2, + l_float32 *matd, + l_int32 size) +{ +l_int32 i, j, k, index; + + PROCNAME("l_productMat2"); + + if (!mat1) + return ERROR_INT("matrix 1 not defined", procName, 1); + if (!mat2) + return ERROR_INT("matrix 2 not defined", procName, 1); + if (!matd) + return ERROR_INT("result matrix not defined", procName, 1); + + for (i = 0; i < size; i++) { + for (j = 0; j < size; j++) { + index = size * i + j; + matd[index] = 0; + for (k = 0; k < size; k++) + matd[index] += mat1[size * i + k] * mat2[size * k + j]; + } + } + return 0; +} + + +/*! + * \brief l_productMat3() + * + * \param[in] mat1 square matrix, as a 1-dimensional size^2 array + * \param[in] mat2 square matrix, as a 1-dimensional size^2 array + * \param[in] mat3 square matrix, as a 1-dimensional size^2 array + * \param[in] matd square matrix; product stored here + * \param[in] size of matrices + * \return 0 if OK, 1 on error + */ +l_ok +l_productMat3(l_float32 *mat1, + l_float32 *mat2, + l_float32 *mat3, + l_float32 *matd, + l_int32 size) +{ +l_float32 *matt; + + PROCNAME("l_productMat3"); + + if (!mat1) + return ERROR_INT("matrix 1 not defined", procName, 1); + if (!mat2) + return ERROR_INT("matrix 2 not defined", procName, 1); + if (!mat3) + return ERROR_INT("matrix 3 not defined", procName, 1); + if (!matd) + return ERROR_INT("result matrix not defined", procName, 1); + + if ((matt = (l_float32 *)LEPT_CALLOC((size_t)size * size, + sizeof(l_float32))) == NULL) + return ERROR_INT("matt not made", procName, 1); + l_productMat2(mat1, mat2, matt, size); + l_productMat2(matt, mat3, matd, size); + LEPT_FREE(matt); + return 0; +} + + +/*! + * \brief l_productMat4() + * + * \param[in] mat1 square matrix, as a 1-dimensional size^2 array + * \param[in] mat2 square matrix, as a 1-dimensional size^2 array + * \param[in] mat3 square matrix, as a 1-dimensional size^2 array + * \param[in] mat4 square matrix, as a 1-dimensional size^2 array + * \param[in] matd square matrix; product stored here + * \param[in] size of matrices + * \return 0 if OK, 1 on error + */ +l_ok +l_productMat4(l_float32 *mat1, + l_float32 *mat2, + l_float32 *mat3, + l_float32 *mat4, + l_float32 *matd, + l_int32 size) +{ +l_float32 *matt; + + PROCNAME("l_productMat4"); + + if (!mat1) + return ERROR_INT("matrix 1 not defined", procName, 1); + if (!mat2) + return ERROR_INT("matrix 2 not defined", procName, 1); + if (!mat3) + return ERROR_INT("matrix 3 not defined", procName, 1); + if (!matd) + return ERROR_INT("result matrix not defined", procName, 1); + + if ((matt = (l_float32 *)LEPT_CALLOC((size_t)size * size, + sizeof(l_float32))) == NULL) + return ERROR_INT("matt not made", procName, 1); + l_productMat3(mat1, mat2, mat3, matt, size); + l_productMat2(matt, mat4, matd, size); + LEPT_FREE(matt); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/allheaders.h b/3rdparty/hgOCR/leptonica/allheaders.h new file mode 100644 index 00000000..70c45a65 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/allheaders.h @@ -0,0 +1,2741 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_ALLHEADERS_H +#define LEPTONICA_ALLHEADERS_H + + +#define LIBLEPT_MAJOR_VERSION 1 +#define LIBLEPT_MINOR_VERSION 79 +#define LIBLEPT_PATCH_VERSION 0 + +#include "alltypes.h" + +#ifndef NO_PROTOS +/* + * These prototypes were autogen'd by xtractprotos, v. 1.5 + */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +LEPT_DLL extern PIX * pixCleanBackgroundToWhite ( PIX *pixs, PIX *pixim, PIX *pixg, l_float32 gamma, l_int32 blackval, l_int32 whiteval ); +LEPT_DLL extern PIX * pixBackgroundNormSimple ( PIX *pixs, PIX *pixim, PIX *pixg ); +LEPT_DLL extern PIX * pixBackgroundNorm ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); +LEPT_DLL extern PIX * pixBackgroundNormMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval ); +LEPT_DLL extern l_ok pixBackgroundNormGrayArray ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd ); +LEPT_DLL extern l_ok pixBackgroundNormRGBArrays ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb ); +LEPT_DLL extern l_ok pixBackgroundNormGrayArrayMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd ); +LEPT_DLL extern l_ok pixBackgroundNormRGBArraysMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb ); +LEPT_DLL extern l_ok pixGetBackgroundGrayMap ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd ); +LEPT_DLL extern l_ok pixGetBackgroundRGBMap ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); +LEPT_DLL extern l_ok pixGetBackgroundGrayMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm ); +LEPT_DLL extern l_ok pixGetBackgroundRGBMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); +LEPT_DLL extern l_ok pixFillMapHoles ( PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype ); +LEPT_DLL extern PIX * pixExtendByReplication ( PIX *pixs, l_int32 addw, l_int32 addh ); +LEPT_DLL extern l_ok pixSmoothConnectedRegions ( PIX *pixs, PIX *pixm, l_int32 factor ); +LEPT_DLL extern PIX * pixGetInvBackgroundMap ( PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); +LEPT_DLL extern PIX * pixApplyInvBackgroundGrayMap ( PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy ); +LEPT_DLL extern PIX * pixApplyInvBackgroundRGBMap ( PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy ); +LEPT_DLL extern PIX * pixApplyVariableGrayMap ( PIX *pixs, PIX *pixg, l_int32 target ); +LEPT_DLL extern PIX * pixGlobalNormRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval ); +LEPT_DLL extern PIX * pixGlobalNormNoSatRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank ); +LEPT_DLL extern l_ok pixThresholdSpreadNorm ( PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd ); +LEPT_DLL extern PIX * pixBackgroundNormFlex ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta ); +LEPT_DLL extern PIX * pixContrastNorm ( PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy ); +LEPT_DLL extern l_ok pixMinMaxTiles ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax ); +LEPT_DLL extern l_ok pixSetLowContrast ( PIX *pixs1, PIX *pixs2, l_int32 mindiff ); +LEPT_DLL extern PIX * pixLinearTRCTiled ( PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax ); +LEPT_DLL extern PIX * pixAffineSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixAffineSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixAffinePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixAffine ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixAffinePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); +LEPT_DLL extern PIX * pixAffineColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); +LEPT_DLL extern PIX * pixAffinePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); +LEPT_DLL extern PIX * pixAffineGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); +LEPT_DLL extern PIX * pixAffinePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); +LEPT_DLL extern l_ok getAffineXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); +LEPT_DLL extern l_ok affineInvertXform ( l_float32 *vc, l_float32 **pvci ); +LEPT_DLL extern l_ok affineXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); +LEPT_DLL extern l_ok affineXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); +LEPT_DLL extern l_ok linearInterpolatePixelColor ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval ); +LEPT_DLL extern l_ok linearInterpolatePixelGray ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval ); +LEPT_DLL extern l_int32 gaussjordan ( l_float32 **a, l_float32 *b, l_int32 n ); +LEPT_DLL extern PIX * pixAffineSequential ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 bw, l_int32 bh ); +LEPT_DLL extern l_float32 * createMatrix2dTranslate ( l_float32 transx, l_float32 transy ); +LEPT_DLL extern l_float32 * createMatrix2dScale ( l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern l_float32 * createMatrix2dRotate ( l_float32 xc, l_float32 yc, l_float32 angle ); +LEPT_DLL extern PTA * ptaTranslate ( PTA *ptas, l_float32 transx, l_float32 transy ); +LEPT_DLL extern PTA * ptaScale ( PTA *ptas, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PTA * ptaRotate ( PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle ); +LEPT_DLL extern BOXA * boxaTranslate ( BOXA *boxas, l_float32 transx, l_float32 transy ); +LEPT_DLL extern BOXA * boxaScale ( BOXA *boxas, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern BOXA * boxaRotate ( BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle ); +LEPT_DLL extern PTA * ptaAffineTransform ( PTA *ptas, l_float32 *mat ); +LEPT_DLL extern BOXA * boxaAffineTransform ( BOXA *boxas, l_float32 *mat ); +LEPT_DLL extern l_ok l_productMatVec ( l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size ); +LEPT_DLL extern l_ok l_productMat2 ( l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size ); +LEPT_DLL extern l_ok l_productMat3 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size ); +LEPT_DLL extern l_ok l_productMat4 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size ); +LEPT_DLL extern l_int32 l_getDataBit ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataBit ( void *line, l_int32 n ); +LEPT_DLL extern void l_clearDataBit ( void *line, l_int32 n ); +LEPT_DLL extern void l_setDataBitVal ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern l_int32 l_getDataDibit ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataDibit ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern void l_clearDataDibit ( void *line, l_int32 n ); +LEPT_DLL extern l_int32 l_getDataQbit ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataQbit ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern void l_clearDataQbit ( void *line, l_int32 n ); +LEPT_DLL extern l_int32 l_getDataByte ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataByte ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern l_int32 l_getDataTwoBytes ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataTwoBytes ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern l_int32 l_getDataFourBytes ( const void *line, l_int32 n ); +LEPT_DLL extern void l_setDataFourBytes ( void *line, l_int32 n, l_int32 val ); +LEPT_DLL extern char * barcodeDispatchDecoder ( char *barstr, l_int32 format, l_int32 debugflag ); +LEPT_DLL extern l_int32 barcodeFormatIsSupported ( l_int32 format ); +LEPT_DLL extern NUMA * pixFindBaselines ( PIX *pixs, PTA **ppta, PIXA *pixadb ); +LEPT_DLL extern PIX * pixDeskewLocal ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); +LEPT_DLL extern l_ok pixGetLocalSkewTransform ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, PTA **pptas, PTA **pptad ); +LEPT_DLL extern NUMA * pixGetLocalSkewAngles ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 *pa, l_float32 *pb, l_int32 debug ); +LEPT_DLL extern L_BBUFFER * bbufferCreate ( const l_uint8 *indata, l_int32 nalloc ); +LEPT_DLL extern void bbufferDestroy ( L_BBUFFER **pbb ); +LEPT_DLL extern l_uint8 * bbufferDestroyAndSaveData ( L_BBUFFER **pbb, size_t *pnbytes ); +LEPT_DLL extern l_ok bbufferRead ( L_BBUFFER *bb, l_uint8 *src, l_int32 nbytes ); +LEPT_DLL extern l_ok bbufferReadStream ( L_BBUFFER *bb, FILE *fp, l_int32 nbytes ); +LEPT_DLL extern l_ok bbufferExtendArray ( L_BBUFFER *bb, l_int32 nbytes ); +LEPT_DLL extern l_ok bbufferWrite ( L_BBUFFER *bb, l_uint8 *dest, size_t nbytes, size_t *pnout ); +LEPT_DLL extern l_ok bbufferWriteStream ( L_BBUFFER *bb, FILE *fp, size_t nbytes, size_t *pnout ); +LEPT_DLL extern PIX * pixBilateral ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); +LEPT_DLL extern PIX * pixBilateralGray ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); +LEPT_DLL extern PIX * pixBilateralExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); +LEPT_DLL extern PIX * pixBilateralGrayExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); +LEPT_DLL extern PIX* pixBlockBilateralExact ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev ); +LEPT_DLL extern L_KERNEL * makeRangeKernel ( l_float32 range_stdev ); +LEPT_DLL extern PIX * pixBilinearSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixBilinearSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixBilinearPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixBilinear ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixBilinearPtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); +LEPT_DLL extern PIX * pixBilinearColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); +LEPT_DLL extern PIX * pixBilinearPtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); +LEPT_DLL extern PIX * pixBilinearGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); +LEPT_DLL extern PIX * pixBilinearPtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); +LEPT_DLL extern l_ok getBilinearXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); +LEPT_DLL extern l_ok bilinearXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); +LEPT_DLL extern l_ok bilinearXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); +LEPT_DLL extern l_ok pixOtsuAdaptiveThreshold ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, PIX **ppixth, PIX **ppixd ); +LEPT_DLL extern PIX * pixOtsuThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); +LEPT_DLL extern PIX * pixMaskedThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); +LEPT_DLL extern l_ok pixSauvolaBinarizeTiled ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 nx, l_int32 ny, PIX **ppixth, PIX **ppixd ); +LEPT_DLL extern l_ok pixSauvolaBinarize ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 addborder, PIX **ppixm, PIX **ppixsd, PIX **ppixth, PIX **ppixd ); +LEPT_DLL extern l_ok pixThresholdByConnComp ( PIX *pixs, PIX *pixm, l_int32 start, l_int32 end, l_int32 incr, l_float32 thresh48, l_float32 threshdiff, l_int32 *pglobthresh, PIX **ppixd, l_int32 debugflag ); +LEPT_DLL extern PIX * pixExpandBinaryReplicate ( PIX *pixs, l_int32 xfact, l_int32 yfact ); +LEPT_DLL extern PIX * pixExpandBinaryPower2 ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern PIX * pixReduceBinary2 ( PIX *pixs, l_uint8 *intab ); +LEPT_DLL extern PIX * pixReduceRankBinaryCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); +LEPT_DLL extern PIX * pixReduceRankBinary2 ( PIX *pixs, l_int32 level, l_uint8 *intab ); +LEPT_DLL extern l_uint8 * makeSubsampleTab2x ( void ); +LEPT_DLL extern PIX * pixBlend ( PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); +LEPT_DLL extern PIX * pixBlendMask ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type ); +LEPT_DLL extern PIX * pixBlendGray ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type, l_int32 transparent, l_uint32 transpix ); +LEPT_DLL extern PIX * pixBlendGrayInverse ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); +LEPT_DLL extern PIX * pixBlendColor ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 transparent, l_uint32 transpix ); +LEPT_DLL extern PIX * pixBlendColorByChannel ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 rfract, l_float32 gfract, l_float32 bfract, l_int32 transparent, l_uint32 transpix ); +LEPT_DLL extern PIX * pixBlendGrayAdapt ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 shift ); +LEPT_DLL extern PIX * pixFadeWithGray ( PIX *pixs, PIX *pixb, l_float32 factor, l_int32 type ); +LEPT_DLL extern PIX * pixBlendHardLight ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); +LEPT_DLL extern l_ok pixBlendCmap ( PIX *pixs, PIX *pixb, l_int32 x, l_int32 y, l_int32 sindex ); +LEPT_DLL extern PIX * pixBlendWithGrayMask ( PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y ); +LEPT_DLL extern PIX * pixBlendBackgroundToColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern PIX * pixMultiplyByColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color ); +LEPT_DLL extern PIX * pixAlphaBlendUniform ( PIX *pixs, l_uint32 color ); +LEPT_DLL extern PIX * pixAddAlphaToBlend ( PIX *pixs, l_float32 fract, l_int32 invert ); +LEPT_DLL extern PIX * pixSetAlphaOverWhite ( PIX *pixs ); +LEPT_DLL extern l_ok pixLinearEdgeFade ( PIX *pixs, l_int32 dir, l_int32 fadeto, l_float32 distfract, l_float32 maxfade ); +LEPT_DLL extern L_BMF * bmfCreate ( const char *dir, l_int32 fontsize ); +LEPT_DLL extern void bmfDestroy ( L_BMF **pbmf ); +LEPT_DLL extern PIX * bmfGetPix ( L_BMF *bmf, char chr ); +LEPT_DLL extern l_ok bmfGetWidth ( L_BMF *bmf, char chr, l_int32 *pw ); +LEPT_DLL extern l_ok bmfGetBaseline ( L_BMF *bmf, char chr, l_int32 *pbaseline ); +LEPT_DLL extern PIXA * pixaGetFont ( const char *dir, l_int32 fontsize, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2 ); +LEPT_DLL extern l_ok pixaSaveFont ( const char *indir, const char *outdir, l_int32 fontsize ); +LEPT_DLL extern PIX * pixReadStreamBmp ( FILE *fp ); +LEPT_DLL extern PIX * pixReadMemBmp ( const l_uint8 *cdata, size_t size ); +LEPT_DLL extern l_ok pixWriteStreamBmp ( FILE *fp, PIX *pix ); +LEPT_DLL extern l_ok pixWriteMemBmp ( l_uint8 **pfdata, size_t *pfsize, PIX *pixs ); +LEPT_DLL extern PIXA * l_bootnum_gen1 ( void ); +LEPT_DLL extern PIXA * l_bootnum_gen2 ( void ); +LEPT_DLL extern PIXA * l_bootnum_gen3 ( void ); +LEPT_DLL extern PIXA * l_bootnum_gen4 ( l_int32 nsamp ); +LEPT_DLL extern BOX * boxCreate ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); +LEPT_DLL extern BOX * boxCreateValid ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); +LEPT_DLL extern BOX * boxCopy ( BOX *box ); +LEPT_DLL extern BOX * boxClone ( BOX *box ); +LEPT_DLL extern void boxDestroy ( BOX **pbox ); +LEPT_DLL extern l_ok boxGetGeometry ( BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok boxSetGeometry ( BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h ); +LEPT_DLL extern l_ok boxGetSideLocations ( BOX *box, l_int32 *pl, l_int32 *pr, l_int32 *pt, l_int32 *pb ); +LEPT_DLL extern l_ok boxSetSideLocations ( BOX *box, l_int32 l, l_int32 r, l_int32 t, l_int32 b ); +LEPT_DLL extern l_int32 boxGetRefcount ( BOX *box ); +LEPT_DLL extern l_ok boxChangeRefcount ( BOX *box, l_int32 delta ); +LEPT_DLL extern l_ok boxIsValid ( BOX *box, l_int32 *pvalid ); +LEPT_DLL extern BOXA * boxaCreate ( l_int32 n ); +LEPT_DLL extern BOXA * boxaCopy ( BOXA *boxa, l_int32 copyflag ); +LEPT_DLL extern void boxaDestroy ( BOXA **pboxa ); +LEPT_DLL extern l_ok boxaAddBox ( BOXA *boxa, BOX *box, l_int32 copyflag ); +LEPT_DLL extern l_ok boxaExtendArray ( BOXA *boxa ); +LEPT_DLL extern l_ok boxaExtendArrayToSize ( BOXA *boxa, l_int32 size ); +LEPT_DLL extern l_int32 boxaGetCount ( BOXA *boxa ); +LEPT_DLL extern l_int32 boxaGetValidCount ( BOXA *boxa ); +LEPT_DLL extern BOX * boxaGetBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern BOX * boxaGetValidBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern NUMA * boxaFindInvalidBoxes ( BOXA *boxa ); +LEPT_DLL extern l_ok boxaGetBoxGeometry ( BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok boxaIsFull ( BOXA *boxa, l_int32 *pfull ); +LEPT_DLL extern l_ok boxaReplaceBox ( BOXA *boxa, l_int32 index, BOX *box ); +LEPT_DLL extern l_ok boxaInsertBox ( BOXA *boxa, l_int32 index, BOX *box ); +LEPT_DLL extern l_ok boxaRemoveBox ( BOXA *boxa, l_int32 index ); +LEPT_DLL extern l_ok boxaRemoveBoxAndSave ( BOXA *boxa, l_int32 index, BOX **pbox ); +LEPT_DLL extern BOXA * boxaSaveValid ( BOXA *boxas, l_int32 copyflag ); +LEPT_DLL extern l_ok boxaInitFull ( BOXA *boxa, BOX *box ); +LEPT_DLL extern l_ok boxaClear ( BOXA *boxa ); +LEPT_DLL extern BOXAA * boxaaCreate ( l_int32 n ); +LEPT_DLL extern BOXAA * boxaaCopy ( BOXAA *baas, l_int32 copyflag ); +LEPT_DLL extern void boxaaDestroy ( BOXAA **pbaa ); +LEPT_DLL extern l_ok boxaaAddBoxa ( BOXAA *baa, BOXA *ba, l_int32 copyflag ); +LEPT_DLL extern l_ok boxaaExtendArray ( BOXAA *baa ); +LEPT_DLL extern l_ok boxaaExtendArrayToSize ( BOXAA *baa, l_int32 size ); +LEPT_DLL extern l_int32 boxaaGetCount ( BOXAA *baa ); +LEPT_DLL extern l_int32 boxaaGetBoxCount ( BOXAA *baa ); +LEPT_DLL extern BOXA * boxaaGetBoxa ( BOXAA *baa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern BOX * boxaaGetBox ( BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag ); +LEPT_DLL extern l_ok boxaaInitFull ( BOXAA *baa, BOXA *boxa ); +LEPT_DLL extern l_ok boxaaExtendWithInit ( BOXAA *baa, l_int32 maxindex, BOXA *boxa ); +LEPT_DLL extern l_ok boxaaReplaceBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); +LEPT_DLL extern l_ok boxaaInsertBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); +LEPT_DLL extern l_ok boxaaRemoveBoxa ( BOXAA *baa, l_int32 index ); +LEPT_DLL extern l_ok boxaaAddBox ( BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag ); +LEPT_DLL extern BOXAA * boxaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); +LEPT_DLL extern BOXAA * boxaaRead ( const char *filename ); +LEPT_DLL extern BOXAA * boxaaReadStream ( FILE *fp ); +LEPT_DLL extern BOXAA * boxaaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok boxaaWrite ( const char *filename, BOXAA *baa ); +LEPT_DLL extern l_ok boxaaWriteStream ( FILE *fp, BOXAA *baa ); +LEPT_DLL extern l_ok boxaaWriteMem ( l_uint8 **pdata, size_t *psize, BOXAA *baa ); +LEPT_DLL extern BOXA * boxaRead ( const char *filename ); +LEPT_DLL extern BOXA * boxaReadStream ( FILE *fp ); +LEPT_DLL extern BOXA * boxaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok boxaWriteDebug ( const char *filename, BOXA *boxa ); +LEPT_DLL extern l_ok boxaWrite ( const char *filename, BOXA *boxa ); +LEPT_DLL extern l_ok boxaWriteStream ( FILE *fp, BOXA *boxa ); +LEPT_DLL extern l_ok boxaWriteMem ( l_uint8 **pdata, size_t *psize, BOXA *boxa ); +LEPT_DLL extern l_ok boxPrintStreamInfo ( FILE *fp, BOX *box ); +LEPT_DLL extern l_ok boxContains ( BOX *box1, BOX *box2, l_int32 *presult ); +LEPT_DLL extern l_ok boxIntersects ( BOX *box1, BOX *box2, l_int32 *presult ); +LEPT_DLL extern BOXA * boxaContainedInBox ( BOXA *boxas, BOX *box ); +LEPT_DLL extern l_ok boxaContainedInBoxCount ( BOXA *boxa, BOX *box, l_int32 *pcount ); +LEPT_DLL extern l_ok boxaContainedInBoxa ( BOXA *boxa1, BOXA *boxa2, l_int32 *pcontained ); +LEPT_DLL extern BOXA * boxaIntersectsBox ( BOXA *boxas, BOX *box ); +LEPT_DLL extern l_ok boxaIntersectsBoxCount ( BOXA *boxa, BOX *box, l_int32 *pcount ); +LEPT_DLL extern BOXA * boxaClipToBox ( BOXA *boxas, BOX *box ); +LEPT_DLL extern BOXA * boxaCombineOverlaps ( BOXA *boxas, PIXA *pixadb ); +LEPT_DLL extern l_ok boxaCombineOverlapsInPair ( BOXA *boxas1, BOXA *boxas2, BOXA **pboxad1, BOXA **pboxad2, PIXA *pixadb ); +LEPT_DLL extern BOX * boxOverlapRegion ( BOX *box1, BOX *box2 ); +LEPT_DLL extern BOX * boxBoundingRegion ( BOX *box1, BOX *box2 ); +LEPT_DLL extern l_ok boxOverlapFraction ( BOX *box1, BOX *box2, l_float32 *pfract ); +LEPT_DLL extern l_ok boxOverlapArea ( BOX *box1, BOX *box2, l_int32 *parea ); +LEPT_DLL extern BOXA * boxaHandleOverlaps ( BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap ); +LEPT_DLL extern l_ok boxOverlapDistance ( BOX *box1, BOX *box2, l_int32 *ph_ovl, l_int32 *pv_ovl ); +LEPT_DLL extern l_ok boxSeparationDistance ( BOX *box1, BOX *box2, l_int32 *ph_sep, l_int32 *pv_sep ); +LEPT_DLL extern l_ok boxCompareSize ( BOX *box1, BOX *box2, l_int32 type, l_int32 *prel ); +LEPT_DLL extern l_ok boxContainsPt ( BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains ); +LEPT_DLL extern BOX * boxaGetNearestToPt ( BOXA *boxa, l_int32 x, l_int32 y ); +LEPT_DLL extern BOX * boxaGetNearestToLine ( BOXA *boxa, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok boxaFindNearestBoxes ( BOXA *boxa, l_int32 dist_select, l_int32 range, NUMAA **pnaaindex, NUMAA **pnaadist ); +LEPT_DLL extern l_ok boxaGetNearestByDirection ( BOXA *boxa, l_int32 i, l_int32 dir, l_int32 dist_select, l_int32 range, l_int32 *pindex, l_int32 *pdist ); +LEPT_DLL extern l_ok boxGetCenter ( BOX *box, l_float32 *pcx, l_float32 *pcy ); +LEPT_DLL extern l_ok boxIntersectByLine ( BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn ); +LEPT_DLL extern BOX * boxClipToRectangle ( BOX *box, l_int32 wi, l_int32 hi ); +LEPT_DLL extern l_ok boxClipToRectangleParams ( BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh ); +LEPT_DLL extern BOX * boxRelocateOneSide ( BOX *boxd, BOX *boxs, l_int32 loc, l_int32 sideflag ); +LEPT_DLL extern BOXA * boxaAdjustSides ( BOXA *boxas, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); +LEPT_DLL extern l_ok boxaAdjustBoxSides ( BOXA *boxa, l_int32 index, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); +LEPT_DLL extern BOX * boxAdjustSides ( BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); +LEPT_DLL extern BOXA * boxaSetSide ( BOXA *boxad, BOXA *boxas, l_int32 side, l_int32 val, l_int32 thresh ); +LEPT_DLL extern l_ok boxSetSide ( BOX *boxs, l_int32 side, l_int32 val, l_int32 thresh ); +LEPT_DLL extern BOXA * boxaAdjustWidthToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); +LEPT_DLL extern BOXA * boxaAdjustHeightToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); +LEPT_DLL extern l_ok boxEqual ( BOX *box1, BOX *box2, l_int32 *psame ); +LEPT_DLL extern l_ok boxaEqual ( BOXA *boxa1, BOXA *boxa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); +LEPT_DLL extern l_ok boxSimilar ( BOX *box1, BOX *box2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 *psimilar ); +LEPT_DLL extern l_ok boxaSimilar ( BOXA *boxa1, BOXA *boxa2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 debug, l_int32 *psimilar, NUMA **pnasim ); +LEPT_DLL extern l_ok boxaJoin ( BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern l_ok boxaaJoin ( BOXAA *baad, BOXAA *baas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern l_ok boxaSplitEvenOdd ( BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao ); +LEPT_DLL extern BOXA * boxaMergeEvenOdd ( BOXA *boxae, BOXA *boxao, l_int32 fillflag ); +LEPT_DLL extern BOXA * boxaTransform ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern BOX * boxTransform ( BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern BOXA * boxaTransformOrdered ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); +LEPT_DLL extern BOX * boxTransformOrdered ( BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); +LEPT_DLL extern BOXA * boxaRotateOrth ( BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation ); +LEPT_DLL extern BOX * boxRotateOrth ( BOX *box, l_int32 w, l_int32 h, l_int32 rotation ); +LEPT_DLL extern BOXA * boxaShiftWithPta ( BOXA *boxas, PTA *pta, l_int32 dir ); +LEPT_DLL extern BOXA * boxaSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); +LEPT_DLL extern BOXA * boxaBinSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); +LEPT_DLL extern BOXA * boxaSortByIndex ( BOXA *boxas, NUMA *naindex ); +LEPT_DLL extern BOXAA * boxaSort2d ( BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1 ); +LEPT_DLL extern BOXAA * boxaSort2dByIndex ( BOXA *boxas, NUMAA *naa ); +LEPT_DLL extern l_ok boxaExtractAsNuma ( BOXA *boxa, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid ); +LEPT_DLL extern l_ok boxaExtractAsPta ( BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, PTA **pptaw, PTA **pptah, l_int32 keepinvalid ); +LEPT_DLL extern PTA * boxaExtractCorners ( BOXA *boxa, l_int32 corner ); +LEPT_DLL extern l_ok boxaGetRankVals ( BOXA *boxa, l_float32 fract, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok boxaGetMedianVals ( BOXA *boxa, l_int32 *px, l_int32 *py, l_int32 *pr, l_int32 *pb, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok boxaGetAverageSize ( BOXA *boxa, l_float32 *pw, l_float32 *ph ); +LEPT_DLL extern l_ok boxaaGetExtent ( BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa ); +LEPT_DLL extern BOXA * boxaaFlattenToBoxa ( BOXAA *baa, NUMA **pnaindex, l_int32 copyflag ); +LEPT_DLL extern BOXA * boxaaFlattenAligned ( BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag ); +LEPT_DLL extern BOXAA * boxaEncapsulateAligned ( BOXA *boxa, l_int32 num, l_int32 copyflag ); +LEPT_DLL extern BOXAA * boxaaTranspose ( BOXAA *baas ); +LEPT_DLL extern l_ok boxaaAlignBox ( BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex ); +LEPT_DLL extern PIX * pixMaskConnComp ( PIX *pixs, l_int32 connectivity, BOXA **pboxa ); +LEPT_DLL extern PIX * pixMaskBoxa ( PIX *pixd, PIX *pixs, BOXA *boxa, l_int32 op ); +LEPT_DLL extern PIX * pixPaintBoxa ( PIX *pixs, BOXA *boxa, l_uint32 val ); +LEPT_DLL extern PIX * pixSetBlackOrWhiteBoxa ( PIX *pixs, BOXA *boxa, l_int32 op ); +LEPT_DLL extern PIX * pixPaintBoxaRandom ( PIX *pixs, BOXA *boxa ); +LEPT_DLL extern PIX * pixBlendBoxaRandom ( PIX *pixs, BOXA *boxa, l_float32 fract ); +LEPT_DLL extern PIX * pixDrawBoxa ( PIX *pixs, BOXA *boxa, l_int32 width, l_uint32 val ); +LEPT_DLL extern PIX * pixDrawBoxaRandom ( PIX *pixs, BOXA *boxa, l_int32 width ); +LEPT_DLL extern PIX * boxaaDisplay ( PIX *pixs, BOXAA *baa, l_int32 linewba, l_int32 linewb, l_uint32 colorba, l_uint32 colorb, l_int32 w, l_int32 h ); +LEPT_DLL extern PIXA * pixaDisplayBoxaa ( PIXA *pixas, BOXAA *baa, l_int32 colorflag, l_int32 width ); +LEPT_DLL extern BOXA * pixSplitIntoBoxa ( PIX *pixs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); +LEPT_DLL extern BOXA * pixSplitComponentIntoBoxa ( PIX *pix, BOX *box, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); +LEPT_DLL extern BOXA * makeMosaicStrips ( l_int32 w, l_int32 h, l_int32 direction, l_int32 size ); +LEPT_DLL extern l_ok boxaCompareRegions ( BOXA *boxa1, BOXA *boxa2, l_int32 areathresh, l_int32 *pnsame, l_float32 *pdiffarea, l_float32 *pdiffxor, PIX **ppixdb ); +LEPT_DLL extern BOX * pixSelectLargeULComp ( PIX *pixs, l_float32 areaslop, l_int32 yslop, l_int32 connectivity ); +LEPT_DLL extern BOX * boxaSelectLargeULBox ( BOXA *boxas, l_float32 areaslop, l_int32 yslop ); +LEPT_DLL extern BOXA * boxaSelectRange ( BOXA *boxas, l_int32 first, l_int32 last, l_int32 copyflag ); +LEPT_DLL extern BOXAA * boxaaSelectRange ( BOXAA *baas, l_int32 first, l_int32 last, l_int32 copyflag ); +LEPT_DLL extern BOXA * boxaSelectBySize ( BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); +LEPT_DLL extern NUMA * boxaMakeSizeIndicator ( BOXA *boxa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); +LEPT_DLL extern BOXA * boxaSelectByArea ( BOXA *boxas, l_int32 area, l_int32 relation, l_int32 *pchanged ); +LEPT_DLL extern NUMA * boxaMakeAreaIndicator ( BOXA *boxa, l_int32 area, l_int32 relation ); +LEPT_DLL extern BOXA * boxaSelectByWHRatio ( BOXA *boxas, l_float32 ratio, l_int32 relation, l_int32 *pchanged ); +LEPT_DLL extern NUMA * boxaMakeWHRatioIndicator ( BOXA *boxa, l_float32 ratio, l_int32 relation ); +LEPT_DLL extern BOXA * boxaSelectWithIndicator ( BOXA *boxas, NUMA *na, l_int32 *pchanged ); +LEPT_DLL extern BOXA * boxaPermutePseudorandom ( BOXA *boxas ); +LEPT_DLL extern BOXA * boxaPermuteRandom ( BOXA *boxad, BOXA *boxas ); +LEPT_DLL extern l_ok boxaSwapBoxes ( BOXA *boxa, l_int32 i, l_int32 j ); +LEPT_DLL extern PTA * boxaConvertToPta ( BOXA *boxa, l_int32 ncorners ); +LEPT_DLL extern BOXA * ptaConvertToBoxa ( PTA *pta, l_int32 ncorners ); +LEPT_DLL extern PTA * boxConvertToPta ( BOX *box, l_int32 ncorners ); +LEPT_DLL extern BOX * ptaConvertToBox ( PTA *pta ); +LEPT_DLL extern l_ok boxaGetExtent ( BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox ); +LEPT_DLL extern l_ok boxaGetCoverage ( BOXA *boxa, l_int32 wc, l_int32 hc, l_int32 exactflag, l_float32 *pfract ); +LEPT_DLL extern l_ok boxaaSizeRange ( BOXAA *baa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern l_ok boxaSizeRange ( BOXA *boxa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern l_ok boxaLocationRange ( BOXA *boxa, l_int32 *pminx, l_int32 *pminy, l_int32 *pmaxx, l_int32 *pmaxy ); +LEPT_DLL extern l_ok boxaGetSizes ( BOXA *boxa, NUMA **pnaw, NUMA **pnah ); +LEPT_DLL extern l_ok boxaGetArea ( BOXA *boxa, l_int32 *parea ); +LEPT_DLL extern PIX * boxaDisplayTiled ( BOXA *boxas, PIXA *pixa, l_int32 first, l_int32 last, l_int32 maxwidth, l_int32 linewidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border ); +LEPT_DLL extern BOXA * boxaSmoothSequenceLS ( BOXA *boxas, l_float32 factor, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug ); +LEPT_DLL extern BOXA * boxaSmoothSequenceMedian ( BOXA *boxas, l_int32 halfwin, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels, l_int32 debug ); +LEPT_DLL extern BOXA * boxaLinearFit ( BOXA *boxas, l_float32 factor, l_int32 debug ); +LEPT_DLL extern BOXA * boxaWindowedMedian ( BOXA *boxas, l_int32 halfwin, l_int32 debug ); +LEPT_DLL extern BOXA * boxaModifyWithBoxa ( BOXA *boxas, BOXA *boxam, l_int32 subflag, l_int32 maxdiff, l_int32 extrapixels ); +LEPT_DLL extern BOXA * boxaConstrainSize ( BOXA *boxas, l_int32 width, l_int32 widthflag, l_int32 height, l_int32 heightflag ); +LEPT_DLL extern BOXA * boxaReconcileEvenOddHeight ( BOXA *boxas, l_int32 sides, l_int32 delh, l_int32 op, l_float32 factor, l_int32 start ); +LEPT_DLL extern BOXA * boxaReconcilePairWidth ( BOXA *boxas, l_int32 delw, l_int32 op, l_float32 factor, NUMA *na ); +LEPT_DLL extern l_ok boxaSizeConsistency1 ( BOXA *boxas, l_int32 type, l_float32 threshp, l_float32 threshm, l_float32 *pfvarp, l_float32 *pfvarm, l_int32 *psame ); +LEPT_DLL extern l_ok boxaSizeConsistency2 ( BOXA *boxas, l_float32 *pfdevw, l_float32 *pfdevh, l_int32 debug ); +LEPT_DLL extern BOXA * boxaReconcileSizeByMedian ( BOXA *boxas, l_int32 type, l_float32 dfract, l_float32 sfract, l_float32 factor, NUMA **pnadelw, NUMA **pnadelh, l_float32 *pratiowh ); +LEPT_DLL extern l_ok boxaPlotSides ( BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, PIX **ppixd ); +LEPT_DLL extern l_ok boxaPlotSizes ( BOXA *boxa, const char *plotname, NUMA **pnaw, NUMA **pnah, PIX **ppixd ); +LEPT_DLL extern BOXA * boxaFillSequence ( BOXA *boxas, l_int32 useflag, l_int32 debug ); +LEPT_DLL extern l_ok boxaSizeVariation ( BOXA *boxa, l_int32 type, l_float32 *pdel_evenodd, l_float32 *prms_even, l_float32 *prms_odd, l_float32 *prms_all ); +LEPT_DLL extern l_ok boxaMedianDimensions ( BOXA *boxas, l_int32 *pmedw, l_int32 *pmedh, l_int32 *pmedwe, l_int32 *pmedwo, l_int32 *pmedhe, l_int32 *pmedho, NUMA **pnadelw, NUMA **pnadelh ); +LEPT_DLL extern L_BYTEA * l_byteaCreate ( size_t nbytes ); +LEPT_DLL extern L_BYTEA * l_byteaInitFromMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern L_BYTEA * l_byteaInitFromFile ( const char *fname ); +LEPT_DLL extern L_BYTEA * l_byteaInitFromStream ( FILE *fp ); +LEPT_DLL extern L_BYTEA * l_byteaCopy ( L_BYTEA *bas, l_int32 copyflag ); +LEPT_DLL extern void l_byteaDestroy ( L_BYTEA **pba ); +LEPT_DLL extern size_t l_byteaGetSize ( L_BYTEA *ba ); +LEPT_DLL extern l_uint8 * l_byteaGetData ( L_BYTEA *ba, size_t *psize ); +LEPT_DLL extern l_uint8 * l_byteaCopyData ( L_BYTEA *ba, size_t *psize ); +LEPT_DLL extern l_ok l_byteaAppendData ( L_BYTEA *ba, const l_uint8 *newdata, size_t newbytes ); +LEPT_DLL extern l_ok l_byteaAppendString ( L_BYTEA *ba, const char *str ); +LEPT_DLL extern l_ok l_byteaJoin ( L_BYTEA *ba1, L_BYTEA **pba2 ); +LEPT_DLL extern l_ok l_byteaSplit ( L_BYTEA *ba1, size_t splitloc, L_BYTEA **pba2 ); +LEPT_DLL extern l_ok l_byteaFindEachSequence ( L_BYTEA *ba, const l_uint8 *sequence, size_t seqlen, L_DNA **pda ); +LEPT_DLL extern l_ok l_byteaWrite ( const char *fname, L_BYTEA *ba, size_t startloc, size_t nbytes ); +LEPT_DLL extern l_ok l_byteaWriteStream ( FILE *fp, L_BYTEA *ba, size_t startloc, size_t nbytes ); +LEPT_DLL extern CCBORDA * ccbaCreate ( PIX *pixs, l_int32 n ); +LEPT_DLL extern void ccbaDestroy ( CCBORDA **pccba ); +LEPT_DLL extern CCBORD * ccbCreate ( PIX *pixs ); +LEPT_DLL extern void ccbDestroy ( CCBORD **pccb ); +LEPT_DLL extern l_ok ccbaAddCcb ( CCBORDA *ccba, CCBORD *ccb ); +LEPT_DLL extern l_int32 ccbaGetCount ( CCBORDA *ccba ); +LEPT_DLL extern CCBORD * ccbaGetCcb ( CCBORDA *ccba, l_int32 index ); +LEPT_DLL extern CCBORDA * pixGetAllCCBorders ( PIX *pixs ); +LEPT_DLL extern PTAA * pixGetOuterBordersPtaa ( PIX *pixs ); +LEPT_DLL extern l_ok pixGetOuterBorder ( CCBORD *ccb, PIX *pixs, BOX *box ); +LEPT_DLL extern l_ok ccbaGenerateGlobalLocs ( CCBORDA *ccba ); +LEPT_DLL extern l_ok ccbaGenerateStepChains ( CCBORDA *ccba ); +LEPT_DLL extern l_ok ccbaStepChainsToPixCoords ( CCBORDA *ccba, l_int32 coordtype ); +LEPT_DLL extern l_ok ccbaGenerateSPGlobalLocs ( CCBORDA *ccba, l_int32 ptsflag ); +LEPT_DLL extern l_ok ccbaGenerateSinglePath ( CCBORDA *ccba ); +LEPT_DLL extern PTA * getCutPathForHole ( PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen ); +LEPT_DLL extern PIX * ccbaDisplayBorder ( CCBORDA *ccba ); +LEPT_DLL extern PIX * ccbaDisplaySPBorder ( CCBORDA *ccba ); +LEPT_DLL extern PIX * ccbaDisplayImage1 ( CCBORDA *ccba ); +LEPT_DLL extern PIX * ccbaDisplayImage2 ( CCBORDA *ccba ); +LEPT_DLL extern l_ok ccbaWrite ( const char *filename, CCBORDA *ccba ); +LEPT_DLL extern l_ok ccbaWriteStream ( FILE *fp, CCBORDA *ccba ); +LEPT_DLL extern CCBORDA * ccbaRead ( const char *filename ); +LEPT_DLL extern CCBORDA * ccbaReadStream ( FILE *fp ); +LEPT_DLL extern l_ok ccbaWriteSVG ( const char *filename, CCBORDA *ccba ); +LEPT_DLL extern char * ccbaWriteSVGString ( const char *filename, CCBORDA *ccba ); +LEPT_DLL extern PIXA * pixaThinConnected ( PIXA *pixas, l_int32 type, l_int32 connectivity, l_int32 maxiters ); +LEPT_DLL extern PIX * pixThinConnected ( PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters ); +LEPT_DLL extern PIX * pixThinConnectedBySet ( PIX *pixs, l_int32 type, SELA *sela, l_int32 maxiters ); +LEPT_DLL extern SELA * selaMakeThinSets ( l_int32 index, l_int32 debug ); +LEPT_DLL extern l_ok jbCorrelation ( const char *dirin, l_float32 thresh, l_float32 weight, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); +LEPT_DLL extern l_ok jbRankHaus ( const char *dirin, l_int32 size, l_float32 rank, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); +LEPT_DLL extern JBCLASSER * jbWordsInTextlines ( const char *dirin, l_int32 reduction, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weight, NUMA **pnatl, l_int32 firstpage, l_int32 npages ); +LEPT_DLL extern l_ok pixGetWordsInTextlines ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad, NUMA **pnai ); +LEPT_DLL extern l_ok pixGetWordBoxesInTextlines ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, NUMA **pnai ); +LEPT_DLL extern l_ok pixFindWordAndCharacterBoxes ( PIX *pixs, BOX *boxs, l_int32 thresh, BOXA **pboxaw, BOXAA **pboxaac, const char *debugdir ); +LEPT_DLL extern NUMAA * boxaExtractSortedPattern ( BOXA *boxa, NUMA *na ); +LEPT_DLL extern l_ok numaaCompareImagesByBoxes ( NUMAA *naa1, NUMAA *naa2, l_int32 nperline, l_int32 nreq, l_int32 maxshiftx, l_int32 maxshifty, l_int32 delx, l_int32 dely, l_int32 *psame, l_int32 debugflag ); +LEPT_DLL extern l_ok pixColorContent ( PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 mingray, PIX **ppixr, PIX **ppixg, PIX **ppixb ); +LEPT_DLL extern PIX * pixColorMagnitude ( PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 type ); +LEPT_DLL extern PIX * pixMaskOverColorPixels ( PIX *pixs, l_int32 threshdiff, l_int32 mindist ); +LEPT_DLL extern PIX * pixMaskOverGrayPixels ( PIX *pixs, l_int32 maxlimit, l_int32 satlimit ); +LEPT_DLL extern PIX * pixMaskOverColorRange ( PIX *pixs, l_int32 rmin, l_int32 rmax, l_int32 gmin, l_int32 gmax, l_int32 bmin, l_int32 bmax ); +LEPT_DLL extern l_ok pixColorFraction ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_int32 factor, l_float32 *ppixfract, l_float32 *pcolorfract ); +LEPT_DLL extern l_ok pixFindColorRegions ( PIX *pixs, PIX *pixm, l_int32 factor, l_int32 lightthresh, l_int32 darkthresh, l_int32 mindiff, l_int32 colordiff, l_float32 edgefract, l_float32 *pcolorfract, PIX **pcolormask1, PIX **pcolormask2, PIXA *pixadb ); +LEPT_DLL extern l_ok pixNumSignificantGrayColors ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_float32 minfract, l_int32 factor, l_int32 *pncolors ); +LEPT_DLL extern l_ok pixColorsForQuantization ( PIX *pixs, l_int32 thresh, l_int32 *pncolors, l_int32 *piscolor, l_int32 debug ); +LEPT_DLL extern l_ok pixNumColors ( PIX *pixs, l_int32 factor, l_int32 *pncolors ); +LEPT_DLL extern l_ok pixGetMostPopulatedColors ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors, l_uint32 **parray, PIXCMAP **pcmap ); +LEPT_DLL extern PIX * pixSimpleColorQuantize ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors ); +LEPT_DLL extern NUMA * pixGetRGBHistogram ( PIX *pixs, l_int32 sigbits, l_int32 factor ); +LEPT_DLL extern l_ok makeRGBIndexTables ( l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 sigbits ); +LEPT_DLL extern l_ok getRGBFromIndex ( l_uint32 index, l_int32 sigbits, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixHasHighlightRed ( PIX *pixs, l_int32 factor, l_float32 fract, l_float32 fthresh, l_int32 *phasred, l_float32 *pratio, PIX **ppixdb ); +LEPT_DLL extern PIX * pixColorGrayRegions ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixColorGray ( PIX *pixs, BOX *box, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern PIX * pixColorGrayMasked ( PIX *pixs, PIX *pixm, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern PIX * pixSnapColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); +LEPT_DLL extern PIX * pixSnapColorCmap ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); +LEPT_DLL extern PIX * pixLinearMapToTargetColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); +LEPT_DLL extern l_ok pixelLinearMapToTargetColor ( l_uint32 scolor, l_uint32 srcmap, l_uint32 dstmap, l_uint32 *pdcolor ); +LEPT_DLL extern PIX * pixShiftByComponent ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); +LEPT_DLL extern l_ok pixelShiftByComponent ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel ); +LEPT_DLL extern l_ok pixelFractionalShift ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fraction, l_uint32 *ppixel ); +LEPT_DLL extern PIXCMAP * pixcmapCreate ( l_int32 depth ); +LEPT_DLL extern PIXCMAP * pixcmapCreateRandom ( l_int32 depth, l_int32 hasblack, l_int32 haswhite ); +LEPT_DLL extern PIXCMAP * pixcmapCreateLinear ( l_int32 d, l_int32 nlevels ); +LEPT_DLL extern PIXCMAP * pixcmapCopy ( const PIXCMAP *cmaps ); +LEPT_DLL extern void pixcmapDestroy ( PIXCMAP **pcmap ); +LEPT_DLL extern l_ok pixcmapIsValid ( const PIXCMAP *cmap, l_int32 *pvalid ); +LEPT_DLL extern l_ok pixcmapAddColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixcmapAddRGBA ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval ); +LEPT_DLL extern l_ok pixcmapAddNewColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapAddNearestColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapUsableColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable ); +LEPT_DLL extern l_ok pixcmapAddBlackOrWhite ( PIXCMAP *cmap, l_int32 color, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapSetBlackAndWhite ( PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite ); +LEPT_DLL extern l_int32 pixcmapGetCount ( const PIXCMAP *cmap ); +LEPT_DLL extern l_int32 pixcmapGetFreeCount ( PIXCMAP *cmap ); +LEPT_DLL extern l_int32 pixcmapGetDepth ( PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapGetMinDepth ( PIXCMAP *cmap, l_int32 *pmindepth ); +LEPT_DLL extern l_ok pixcmapClear ( PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapGetColor ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixcmapGetColor32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); +LEPT_DLL extern l_ok pixcmapGetRGBA ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); +LEPT_DLL extern l_ok pixcmapGetRGBA32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); +LEPT_DLL extern l_ok pixcmapResetColor ( PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixcmapSetAlpha ( PIXCMAP *cmap, l_int32 index, l_int32 aval ); +LEPT_DLL extern l_int32 pixcmapGetIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapHasColor ( PIXCMAP *cmap, l_int32 *pcolor ); +LEPT_DLL extern l_ok pixcmapIsOpaque ( PIXCMAP *cmap, l_int32 *popaque ); +LEPT_DLL extern l_ok pixcmapIsBlackAndWhite ( PIXCMAP *cmap, l_int32 *pblackwhite ); +LEPT_DLL extern l_ok pixcmapCountGrayColors ( PIXCMAP *cmap, l_int32 *pngray ); +LEPT_DLL extern l_ok pixcmapGetRankIntensity ( PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapGetNearestIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapGetNearestGrayIndex ( PIXCMAP *cmap, l_int32 val, l_int32 *pindex ); +LEPT_DLL extern l_ok pixcmapGetDistanceToColor ( PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pdist ); +LEPT_DLL extern l_ok pixcmapGetRangeValues ( PIXCMAP *cmap, l_int32 select, l_int32 *pminval, l_int32 *pmaxval, l_int32 *pminindex, l_int32 *pmaxindex ); +LEPT_DLL extern PIXCMAP * pixcmapGrayToColor ( l_uint32 color ); +LEPT_DLL extern PIXCMAP * pixcmapColorToGray ( PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt ); +LEPT_DLL extern PIXCMAP * pixcmapConvertTo4 ( PIXCMAP *cmaps ); +LEPT_DLL extern PIXCMAP * pixcmapConvertTo8 ( PIXCMAP *cmaps ); +LEPT_DLL extern PIXCMAP * pixcmapRead ( const char *filename ); +LEPT_DLL extern PIXCMAP * pixcmapReadStream ( FILE *fp ); +LEPT_DLL extern PIXCMAP * pixcmapReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixcmapWrite ( const char *filename, const PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapWriteStream ( FILE *fp, const PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapWriteMem ( l_uint8 **pdata, size_t *psize, const PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapToArrays ( const PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap ); +LEPT_DLL extern l_ok pixcmapToRGBTable ( PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors ); +LEPT_DLL extern l_ok pixcmapSerializeToMemory ( PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata ); +LEPT_DLL extern PIXCMAP * pixcmapDeserializeFromMemory ( l_uint8 *data, l_int32 cpc, l_int32 ncolors ); +LEPT_DLL extern char * pixcmapConvertToHex ( l_uint8 *data, l_int32 ncolors ); +LEPT_DLL extern l_ok pixcmapGammaTRC ( PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern l_ok pixcmapContrastTRC ( PIXCMAP *cmap, l_float32 factor ); +LEPT_DLL extern l_ok pixcmapShiftIntensity ( PIXCMAP *cmap, l_float32 fraction ); +LEPT_DLL extern l_ok pixcmapShiftByComponent ( PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval ); +LEPT_DLL extern PIX * pixColorMorph ( PIX *pixs, l_int32 type, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOctreeColorQuant ( PIX *pixs, l_int32 colors, l_int32 ditherflag ); +LEPT_DLL extern PIX * pixOctreeColorQuantGeneral ( PIX *pixs, l_int32 colors, l_int32 ditherflag, l_float32 validthresh, l_float32 colorthresh ); +LEPT_DLL extern l_ok makeRGBToIndexTables ( l_int32 cqlevels, l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab ); +LEPT_DLL extern void getOctcubeIndexFromRGB ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_uint32 *pindex ); +LEPT_DLL extern PIX * pixOctreeQuantByPopulation ( PIX *pixs, l_int32 level, l_int32 ditherflag ); +LEPT_DLL extern PIX * pixOctreeQuantNumColors ( PIX *pixs, l_int32 maxcolors, l_int32 subsample ); +LEPT_DLL extern PIX * pixOctcubeQuantMixedWithGray ( PIX *pixs, l_int32 depth, l_int32 graylevels, l_int32 delta ); +LEPT_DLL extern PIX * pixFixedOctcubeQuant256 ( PIX *pixs, l_int32 ditherflag ); +LEPT_DLL extern PIX * pixFewColorsOctcubeQuant1 ( PIX *pixs, l_int32 level ); +LEPT_DLL extern PIX * pixFewColorsOctcubeQuant2 ( PIX *pixs, l_int32 level, NUMA *na, l_int32 ncolors, l_int32 *pnerrors ); +LEPT_DLL extern PIX * pixFewColorsOctcubeQuantMixed ( PIX *pixs, l_int32 level, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_float32 minfract, l_int32 maxspan ); +LEPT_DLL extern PIX * pixFixedOctcubeQuantGenRGB ( PIX *pixs, l_int32 level ); +LEPT_DLL extern PIX * pixQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); +LEPT_DLL extern PIX * pixOctcubeQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); +LEPT_DLL extern NUMA * pixOctcubeHistogram ( PIX *pixs, l_int32 level, l_int32 *pncolors ); +LEPT_DLL extern l_int32 * pixcmapToOctcubeLUT ( PIXCMAP *cmap, l_int32 level, l_int32 metric ); +LEPT_DLL extern l_ok pixRemoveUnusedColors ( PIX *pixs ); +LEPT_DLL extern l_ok pixNumberOccupiedOctcubes ( PIX *pix, l_int32 level, l_int32 mincount, l_float32 minfract, l_int32 *pncolors ); +LEPT_DLL extern PIX * pixMedianCutQuant ( PIX *pixs, l_int32 ditherflag ); +LEPT_DLL extern PIX * pixMedianCutQuantGeneral ( PIX *pixs, l_int32 ditherflag, l_int32 outdepth, l_int32 maxcolors, l_int32 sigbits, l_int32 maxsub, l_int32 checkbw ); +LEPT_DLL extern PIX * pixMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); +LEPT_DLL extern PIX * pixFewColorsMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 maxncolors, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); +LEPT_DLL extern l_int32 * pixMedianCutHisto ( PIX *pixs, l_int32 sigbits, l_int32 subsample ); +LEPT_DLL extern PIX * pixColorSegment ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 selsize, l_int32 finalcolors, l_int32 debugflag ); +LEPT_DLL extern PIX * pixColorSegmentCluster ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 debugflag ); +LEPT_DLL extern l_ok pixAssignToNearestColor ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 level, l_int32 *countarray ); +LEPT_DLL extern l_ok pixColorSegmentClean ( PIX *pixs, l_int32 selsize, l_int32 *countarray ); +LEPT_DLL extern l_ok pixColorSegmentRemoveColors ( PIX *pixd, PIX *pixs, l_int32 finalcolors ); +LEPT_DLL extern PIX * pixConvertRGBToHSV ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixConvertHSVToRGB ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern l_ok convertRGBToHSV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *phval, l_int32 *psval, l_int32 *pvval ); +LEPT_DLL extern l_ok convertHSVToRGB ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixcmapConvertRGBToHSV ( PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapConvertHSVToRGB ( PIXCMAP *cmap ); +LEPT_DLL extern PIX * pixConvertRGBToHue ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertRGBToSaturation ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertRGBToValue ( PIX *pixs ); +LEPT_DLL extern PIX * pixMakeRangeMaskHS ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 satcenter, l_int32 sathw, l_int32 regionflag ); +LEPT_DLL extern PIX * pixMakeRangeMaskHV ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); +LEPT_DLL extern PIX * pixMakeRangeMaskSV ( PIX *pixs, l_int32 satcenter, l_int32 sathw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); +LEPT_DLL extern PIX * pixMakeHistoHS ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnasat ); +LEPT_DLL extern PIX * pixMakeHistoHV ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnaval ); +LEPT_DLL extern PIX * pixMakeHistoSV ( PIX *pixs, l_int32 factor, NUMA **pnasat, NUMA **pnaval ); +LEPT_DLL extern l_ok pixFindHistoPeaksHSV ( PIX *pixs, l_int32 type, l_int32 width, l_int32 height, l_int32 npeaks, l_float32 erasefactor, PTA **ppta, NUMA **pnatot, PIXA **ppixa ); +LEPT_DLL extern PIX * displayHSVColorRange ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 huehw, l_int32 sathw, l_int32 nsamp, l_int32 factor ); +LEPT_DLL extern PIX * pixConvertRGBToYUV ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixConvertYUVToRGB ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern l_ok convertRGBToYUV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pyval, l_int32 *puval, l_int32 *pvval ); +LEPT_DLL extern l_ok convertYUVToRGB ( l_int32 yval, l_int32 uval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixcmapConvertRGBToYUV ( PIXCMAP *cmap ); +LEPT_DLL extern l_ok pixcmapConvertYUVToRGB ( PIXCMAP *cmap ); +LEPT_DLL extern FPIXA * pixConvertRGBToXYZ ( PIX *pixs ); +LEPT_DLL extern PIX * fpixaConvertXYZToRGB ( FPIXA *fpixa ); +LEPT_DLL extern l_ok convertRGBToXYZ ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pfxval, l_float32 *pfyval, l_float32 *pfzval ); +LEPT_DLL extern l_ok convertXYZToRGB ( l_float32 fxval, l_float32 fyval, l_float32 fzval, l_int32 blackout, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern FPIXA * fpixaConvertXYZToLAB ( FPIXA *fpixas ); +LEPT_DLL extern FPIXA * fpixaConvertLABToXYZ ( FPIXA *fpixas ); +LEPT_DLL extern l_ok convertXYZToLAB ( l_float32 xval, l_float32 yval, l_float32 zval, l_float32 *plval, l_float32 *paval, l_float32 *pbval ); +LEPT_DLL extern l_ok convertLABToXYZ ( l_float32 lval, l_float32 aval, l_float32 bval, l_float32 *pxval, l_float32 *pyval, l_float32 *pzval ); +LEPT_DLL extern FPIXA * pixConvertRGBToLAB ( PIX *pixs ); +LEPT_DLL extern PIX * fpixaConvertLABToRGB ( FPIXA *fpixa ); +LEPT_DLL extern l_ok convertRGBToLAB ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 *pflval, l_float32 *pfaval, l_float32 *pfbval ); +LEPT_DLL extern l_ok convertLABToRGB ( l_float32 flval, l_float32 faval, l_float32 fbval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixEqual ( PIX *pix1, PIX *pix2, l_int32 *psame ); +LEPT_DLL extern l_ok pixEqualWithAlpha ( PIX *pix1, PIX *pix2, l_int32 use_alpha, l_int32 *psame ); +LEPT_DLL extern l_ok pixEqualWithCmap ( PIX *pix1, PIX *pix2, l_int32 *psame ); +LEPT_DLL extern l_ok cmapEqual ( PIXCMAP *cmap1, PIXCMAP *cmap2, l_int32 ncomps, l_int32 *psame ); +LEPT_DLL extern l_ok pixUsesCmapColor ( PIX *pixs, l_int32 *pcolor ); +LEPT_DLL extern l_ok pixCorrelationBinary ( PIX *pix1, PIX *pix2, l_float32 *pval ); +LEPT_DLL extern PIX * pixDisplayDiffBinary ( PIX *pix1, PIX *pix2 ); +LEPT_DLL extern l_ok pixCompareBinary ( PIX *pix1, PIX *pix2, l_int32 comptype, l_float32 *pfract, PIX **ppixdiff ); +LEPT_DLL extern l_ok pixCompareGrayOrRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); +LEPT_DLL extern l_ok pixCompareGray ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); +LEPT_DLL extern l_ok pixCompareRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); +LEPT_DLL extern l_ok pixCompareTiled ( PIX *pix1, PIX *pix2, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixdiff ); +LEPT_DLL extern NUMA * pixCompareRankDifference ( PIX *pix1, PIX *pix2, l_int32 factor ); +LEPT_DLL extern l_ok pixTestForSimilarity ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 details ); +LEPT_DLL extern l_ok pixGetDifferenceStats ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 *pfractdiff, l_float32 *pavediff, l_int32 details ); +LEPT_DLL extern NUMA * pixGetDifferenceHistogram ( PIX *pix1, PIX *pix2, l_int32 factor ); +LEPT_DLL extern l_ok pixGetPerceptualDiff ( PIX *pixs1, PIX *pixs2, l_int32 sampling, l_int32 dilation, l_int32 mindiff, l_float32 *pfract, PIX **ppixdiff1, PIX **ppixdiff2 ); +LEPT_DLL extern l_ok pixGetPSNR ( PIX *pix1, PIX *pix2, l_int32 factor, l_float32 *ppsnr ); +LEPT_DLL extern l_ok pixaComparePhotoRegionsByHisto ( PIXA *pixa, l_float32 minratio, l_float32 textthresh, l_int32 factor, l_int32 n, l_float32 simthresh, NUMA **pnai, l_float32 **pscores, PIX **ppixd, l_int32 debug ); +LEPT_DLL extern l_ok pixComparePhotoRegionsByHisto ( PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag ); +LEPT_DLL extern l_ok pixGenPhotoHistos ( PIX *pixs, BOX *box, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, l_int32 *pw, l_int32 *ph, l_int32 debugindex ); +LEPT_DLL extern PIX * pixPadToCenterCentroid ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern l_ok pixCentroid8 ( PIX *pixs, l_int32 factor, l_float32 *pcx, l_float32 *pcy ); +LEPT_DLL extern l_ok pixDecideIfPhotoImage ( PIX *pix, l_int32 factor, l_float32 thresh, l_int32 n, NUMAA **pnaa, PIXA *pixadebug ); +LEPT_DLL extern l_ok compareTilesByHisto ( NUMAA *naa1, NUMAA *naa2, l_float32 minratio, l_int32 w1, l_int32 h1, l_int32 w2, l_int32 h2, l_float32 *pscore, PIXA *pixadebug ); +LEPT_DLL extern l_ok pixCompareGrayByHisto ( PIX *pix1, PIX *pix2, BOX *box1, BOX *box2, l_float32 minratio, l_int32 maxgray, l_int32 factor, l_int32 n, l_float32 *pscore, l_int32 debugflag ); +LEPT_DLL extern l_ok pixCropAlignedToCentroid ( PIX *pix1, PIX *pix2, l_int32 factor, BOX **pbox1, BOX **pbox2 ); +LEPT_DLL extern l_uint8 * l_compressGrayHistograms ( NUMAA *naa, l_int32 w, l_int32 h, size_t *psize ); +LEPT_DLL extern NUMAA * l_uncompressGrayHistograms ( l_uint8 *bytea, size_t size, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok pixCompareWithTranslation ( PIX *pix1, PIX *pix2, l_int32 thresh, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); +LEPT_DLL extern l_ok pixBestCorrelation ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 etransx, l_int32 etransy, l_int32 maxshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); +LEPT_DLL extern BOXA * pixConnComp ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); +LEPT_DLL extern BOXA * pixConnCompPixa ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); +LEPT_DLL extern BOXA * pixConnCompBB ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern l_ok pixCountConnComp ( PIX *pixs, l_int32 connectivity, l_int32 *pcount ); +LEPT_DLL extern l_int32 nextOnPixelInRaster ( PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py ); +LEPT_DLL extern BOX * pixSeedfillBB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); +LEPT_DLL extern BOX * pixSeedfill4BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); +LEPT_DLL extern BOX * pixSeedfill8BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixSeedfill ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); +LEPT_DLL extern l_ok pixSeedfill4 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixSeedfill8 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok convertFilesTo1bpp ( const char *dirin, const char *substr, l_int32 upscaling, l_int32 thresh, l_int32 firstpage, l_int32 npages, const char *dirout, l_int32 outformat ); +LEPT_DLL extern PIX * pixBlockconv ( PIX *pix, l_int32 wc, l_int32 hc ); +LEPT_DLL extern PIX * pixBlockconvGray ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); +LEPT_DLL extern PIX * pixBlockconvAccum ( PIX *pixs ); +LEPT_DLL extern PIX * pixBlockconvGrayUnnormalized ( PIX *pixs, l_int32 wc, l_int32 hc ); +LEPT_DLL extern PIX * pixBlockconvTiled ( PIX *pix, l_int32 wc, l_int32 hc, l_int32 nx, l_int32 ny ); +LEPT_DLL extern PIX * pixBlockconvGrayTile ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); +LEPT_DLL extern l_ok pixWindowedStats ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, PIX **ppixm, PIX **ppixms, FPIX **pfpixv, FPIX **pfpixrv ); +LEPT_DLL extern PIX * pixWindowedMean ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, l_int32 normflag ); +LEPT_DLL extern PIX * pixWindowedMeanSquare ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder ); +LEPT_DLL extern l_ok pixWindowedVariance ( PIX *pixm, PIX *pixms, FPIX **pfpixv, FPIX **pfpixrv ); +LEPT_DLL extern DPIX * pixMeanSquareAccum ( PIX *pixs ); +LEPT_DLL extern PIX * pixBlockrank ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc, l_float32 rank ); +LEPT_DLL extern PIX * pixBlocksum ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); +LEPT_DLL extern PIX * pixCensusTransform ( PIX *pixs, l_int32 halfsize, PIX *pixacc ); +LEPT_DLL extern PIX * pixConvolve ( PIX *pixs, L_KERNEL *kel, l_int32 outdepth, l_int32 normflag ); +LEPT_DLL extern PIX * pixConvolveSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 outdepth, l_int32 normflag ); +LEPT_DLL extern PIX * pixConvolveRGB ( PIX *pixs, L_KERNEL *kel ); +LEPT_DLL extern PIX * pixConvolveRGBSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely ); +LEPT_DLL extern FPIX * fpixConvolve ( FPIX *fpixs, L_KERNEL *kel, l_int32 normflag ); +LEPT_DLL extern FPIX * fpixConvolveSep ( FPIX *fpixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 normflag ); +LEPT_DLL extern PIX * pixConvolveWithBias ( PIX *pixs, L_KERNEL *kel1, L_KERNEL *kel2, l_int32 force8, l_int32 *pbias ); +LEPT_DLL extern void l_setConvolveSampling ( l_int32 xfact, l_int32 yfact ); +LEPT_DLL extern PIX * pixAddGaussianNoise ( PIX *pixs, l_float32 stdev ); +LEPT_DLL extern l_float32 gaussDistribSampling ( ); +LEPT_DLL extern l_ok pixCorrelationScore ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); +LEPT_DLL extern l_int32 pixCorrelationScoreThresholded ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_int32 *downcount, l_float32 score_threshold ); +LEPT_DLL extern l_ok pixCorrelationScoreSimple ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); +LEPT_DLL extern l_ok pixCorrelationScoreShifted ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 delx, l_int32 dely, l_int32 *tab, l_float32 *pscore ); +LEPT_DLL extern L_DEWARP * dewarpCreate ( PIX *pixs, l_int32 pageno ); +LEPT_DLL extern L_DEWARP * dewarpCreateRef ( l_int32 pageno, l_int32 refpage ); +LEPT_DLL extern void dewarpDestroy ( L_DEWARP **pdew ); +LEPT_DLL extern L_DEWARPA * dewarpaCreate ( l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist ); +LEPT_DLL extern L_DEWARPA * dewarpaCreateFromPixacomp ( PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist ); +LEPT_DLL extern void dewarpaDestroy ( L_DEWARPA **pdewa ); +LEPT_DLL extern l_ok dewarpaDestroyDewarp ( L_DEWARPA *dewa, l_int32 pageno ); +LEPT_DLL extern l_ok dewarpaInsertDewarp ( L_DEWARPA *dewa, L_DEWARP *dew ); +LEPT_DLL extern L_DEWARP * dewarpaGetDewarp ( L_DEWARPA *dewa, l_int32 index ); +LEPT_DLL extern l_ok dewarpaSetCurvatures ( L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv, l_int32 max_edgeslope ); +LEPT_DLL extern l_ok dewarpaUseBothArrays ( L_DEWARPA *dewa, l_int32 useboth ); +LEPT_DLL extern l_ok dewarpaSetCheckColumns ( L_DEWARPA *dewa, l_int32 check_columns ); +LEPT_DLL extern l_ok dewarpaSetMaxDistance ( L_DEWARPA *dewa, l_int32 maxdist ); +LEPT_DLL extern L_DEWARP * dewarpRead ( const char *filename ); +LEPT_DLL extern L_DEWARP * dewarpReadStream ( FILE *fp ); +LEPT_DLL extern L_DEWARP * dewarpReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok dewarpWrite ( const char *filename, L_DEWARP *dew ); +LEPT_DLL extern l_ok dewarpWriteStream ( FILE *fp, L_DEWARP *dew ); +LEPT_DLL extern l_ok dewarpWriteMem ( l_uint8 **pdata, size_t *psize, L_DEWARP *dew ); +LEPT_DLL extern L_DEWARPA * dewarpaRead ( const char *filename ); +LEPT_DLL extern L_DEWARPA * dewarpaReadStream ( FILE *fp ); +LEPT_DLL extern L_DEWARPA * dewarpaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok dewarpaWrite ( const char *filename, L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaWriteStream ( FILE *fp, L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaWriteMem ( l_uint8 **pdata, size_t *psize, L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpBuildPageModel ( L_DEWARP *dew, const char *debugfile ); +LEPT_DLL extern l_ok dewarpFindVertDisparity ( L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag ); +LEPT_DLL extern l_ok dewarpFindHorizDisparity ( L_DEWARP *dew, PTAA *ptaa ); +LEPT_DLL extern PTAA * dewarpGetTextlineCenters ( PIX *pixs, l_int32 debugflag ); +LEPT_DLL extern PTAA * dewarpRemoveShortLines ( PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag ); +LEPT_DLL extern l_ok dewarpFindHorizSlopeDisparity ( L_DEWARP *dew, PIX *pixb, l_float32 fractthresh, l_int32 parity ); +LEPT_DLL extern l_ok dewarpBuildLineModel ( L_DEWARP *dew, l_int32 opensize, const char *debugfile ); +LEPT_DLL extern l_ok dewarpaModelStatus ( L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess ); +LEPT_DLL extern l_ok dewarpaApplyDisparity ( L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile ); +LEPT_DLL extern l_ok dewarpaApplyDisparityBoxa ( L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, BOXA *boxas, l_int32 mapdir, l_int32 x, l_int32 y, BOXA **pboxad, const char *debugfile ); +LEPT_DLL extern l_ok dewarpMinimize ( L_DEWARP *dew ); +LEPT_DLL extern l_ok dewarpPopulateFullRes ( L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok dewarpSinglePage ( PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixd, L_DEWARPA **pdewa, l_int32 debug ); +LEPT_DLL extern l_ok dewarpSinglePageInit ( PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 useboth, l_int32 check_columns, PIX **ppixb, L_DEWARPA **pdewa ); +LEPT_DLL extern l_ok dewarpSinglePageRun ( PIX *pixs, PIX *pixb, L_DEWARPA *dewa, PIX **ppixd, l_int32 debug ); +LEPT_DLL extern l_ok dewarpaListPages ( L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaSetValidModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); +LEPT_DLL extern l_ok dewarpaInsertRefModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); +LEPT_DLL extern l_ok dewarpaStripRefModels ( L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaRestoreModels ( L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaInfo ( FILE *fp, L_DEWARPA *dewa ); +LEPT_DLL extern l_ok dewarpaModelStats ( L_DEWARPA *dewa, l_int32 *pnnone, l_int32 *pnvsuccess, l_int32 *pnvvalid, l_int32 *pnhsuccess, l_int32 *pnhvalid, l_int32 *pnref ); +LEPT_DLL extern l_ok dewarpaShowArrays ( L_DEWARPA *dewa, l_float32 scalefact, l_int32 first, l_int32 last ); +LEPT_DLL extern l_ok dewarpDebug ( L_DEWARP *dew, const char *subdirs, l_int32 index ); +LEPT_DLL extern l_ok dewarpShowResults ( L_DEWARPA *dewa, SARRAY *sa, BOXA *boxa, l_int32 firstpage, l_int32 lastpage, const char *pdfout ); +LEPT_DLL extern L_DNA * l_dnaCreate ( l_int32 n ); +LEPT_DLL extern L_DNA * l_dnaCreateFromIArray ( l_int32 *iarray, l_int32 size ); +LEPT_DLL extern L_DNA * l_dnaCreateFromDArray ( l_float64 *darray, l_int32 size, l_int32 copyflag ); +LEPT_DLL extern L_DNA * l_dnaMakeSequence ( l_float64 startval, l_float64 increment, l_int32 size ); +LEPT_DLL extern void l_dnaDestroy ( L_DNA **pda ); +LEPT_DLL extern L_DNA * l_dnaCopy ( L_DNA *da ); +LEPT_DLL extern L_DNA * l_dnaClone ( L_DNA *da ); +LEPT_DLL extern l_ok l_dnaEmpty ( L_DNA *da ); +LEPT_DLL extern l_ok l_dnaAddNumber ( L_DNA *da, l_float64 val ); +LEPT_DLL extern l_ok l_dnaInsertNumber ( L_DNA *da, l_int32 index, l_float64 val ); +LEPT_DLL extern l_ok l_dnaRemoveNumber ( L_DNA *da, l_int32 index ); +LEPT_DLL extern l_ok l_dnaReplaceNumber ( L_DNA *da, l_int32 index, l_float64 val ); +LEPT_DLL extern l_int32 l_dnaGetCount ( L_DNA *da ); +LEPT_DLL extern l_ok l_dnaSetCount ( L_DNA *da, l_int32 newcount ); +LEPT_DLL extern l_ok l_dnaGetDValue ( L_DNA *da, l_int32 index, l_float64 *pval ); +LEPT_DLL extern l_ok l_dnaGetIValue ( L_DNA *da, l_int32 index, l_int32 *pival ); +LEPT_DLL extern l_ok l_dnaSetValue ( L_DNA *da, l_int32 index, l_float64 val ); +LEPT_DLL extern l_ok l_dnaShiftValue ( L_DNA *da, l_int32 index, l_float64 diff ); +LEPT_DLL extern l_int32 * l_dnaGetIArray ( L_DNA *da ); +LEPT_DLL extern l_float64 * l_dnaGetDArray ( L_DNA *da, l_int32 copyflag ); +LEPT_DLL extern l_int32 l_dnaGetRefcount ( L_DNA *da ); +LEPT_DLL extern l_ok l_dnaChangeRefcount ( L_DNA *da, l_int32 delta ); +LEPT_DLL extern l_ok l_dnaGetParameters ( L_DNA *da, l_float64 *pstartx, l_float64 *pdelx ); +LEPT_DLL extern l_ok l_dnaSetParameters ( L_DNA *da, l_float64 startx, l_float64 delx ); +LEPT_DLL extern l_ok l_dnaCopyParameters ( L_DNA *dad, L_DNA *das ); +LEPT_DLL extern L_DNA * l_dnaRead ( const char *filename ); +LEPT_DLL extern L_DNA * l_dnaReadStream ( FILE *fp ); +LEPT_DLL extern l_ok l_dnaWrite ( const char *filename, L_DNA *da ); +LEPT_DLL extern l_ok l_dnaWriteStream ( FILE *fp, L_DNA *da ); +LEPT_DLL extern L_DNAA * l_dnaaCreate ( l_int32 n ); +LEPT_DLL extern L_DNAA * l_dnaaCreateFull ( l_int32 nptr, l_int32 n ); +LEPT_DLL extern l_ok l_dnaaTruncate ( L_DNAA *daa ); +LEPT_DLL extern void l_dnaaDestroy ( L_DNAA **pdaa ); +LEPT_DLL extern l_ok l_dnaaAddDna ( L_DNAA *daa, L_DNA *da, l_int32 copyflag ); +LEPT_DLL extern l_int32 l_dnaaGetCount ( L_DNAA *daa ); +LEPT_DLL extern l_int32 l_dnaaGetDnaCount ( L_DNAA *daa, l_int32 index ); +LEPT_DLL extern l_int32 l_dnaaGetNumberCount ( L_DNAA *daa ); +LEPT_DLL extern L_DNA * l_dnaaGetDna ( L_DNAA *daa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern l_ok l_dnaaReplaceDna ( L_DNAA *daa, l_int32 index, L_DNA *da ); +LEPT_DLL extern l_ok l_dnaaGetValue ( L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval ); +LEPT_DLL extern l_ok l_dnaaAddNumber ( L_DNAA *daa, l_int32 index, l_float64 val ); +LEPT_DLL extern L_DNAA * l_dnaaRead ( const char *filename ); +LEPT_DLL extern L_DNAA * l_dnaaReadStream ( FILE *fp ); +LEPT_DLL extern l_ok l_dnaaWrite ( const char *filename, L_DNAA *daa ); +LEPT_DLL extern l_ok l_dnaaWriteStream ( FILE *fp, L_DNAA *daa ); +LEPT_DLL extern l_ok l_dnaJoin ( L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend ); +LEPT_DLL extern L_DNA * l_dnaaFlattenToDna ( L_DNAA *daa ); +LEPT_DLL extern NUMA * l_dnaConvertToNuma ( L_DNA *da ); +LEPT_DLL extern L_DNA * numaConvertToDna ( NUMA *na ); +LEPT_DLL extern L_DNA * l_dnaUnionByAset ( L_DNA *da1, L_DNA *da2 ); +LEPT_DLL extern L_DNA * l_dnaRemoveDupsByAset ( L_DNA *das ); +LEPT_DLL extern L_DNA * l_dnaIntersectionByAset ( L_DNA *da1, L_DNA *da2 ); +LEPT_DLL extern L_ASET * l_asetCreateFromDna ( L_DNA *da ); +LEPT_DLL extern L_DNA * l_dnaDiffAdjValues ( L_DNA *das ); +LEPT_DLL extern L_DNAHASH * l_dnaHashCreate ( l_int32 nbuckets, l_int32 initsize ); +LEPT_DLL extern void l_dnaHashDestroy ( L_DNAHASH **pdahash ); +LEPT_DLL extern l_int32 l_dnaHashGetCount ( L_DNAHASH *dahash ); +LEPT_DLL extern l_int32 l_dnaHashGetTotalCount ( L_DNAHASH *dahash ); +LEPT_DLL extern L_DNA * l_dnaHashGetDna ( L_DNAHASH *dahash, l_uint64 key, l_int32 copyflag ); +LEPT_DLL extern l_ok l_dnaHashAdd ( L_DNAHASH *dahash, l_uint64 key, l_float64 value ); +LEPT_DLL extern L_DNAHASH * l_dnaHashCreateFromDna ( L_DNA *da ); +LEPT_DLL extern l_ok l_dnaRemoveDupsByHash ( L_DNA *das, L_DNA **pdad, L_DNAHASH **pdahash ); +LEPT_DLL extern l_ok l_dnaMakeHistoByHash ( L_DNA *das, L_DNAHASH **pdahash, L_DNA **pdav, L_DNA **pdac ); +LEPT_DLL extern L_DNA * l_dnaIntersectionByHash ( L_DNA *da1, L_DNA *da2 ); +LEPT_DLL extern l_ok l_dnaFindValByHash ( L_DNA *da, L_DNAHASH *dahash, l_float64 val, l_int32 *pindex ); +LEPT_DLL extern PIX * pixMorphDwa_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); +LEPT_DLL extern PIX * pixFMorphopGen_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); +LEPT_DLL extern l_int32 fmorphopgen_low_2 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); +LEPT_DLL extern PIX * pixSobelEdgeFilter ( PIX *pixs, l_int32 orientflag ); +LEPT_DLL extern PIX * pixTwoSidedEdgeFilter ( PIX *pixs, l_int32 orientflag ); +LEPT_DLL extern l_ok pixMeasureEdgeSmoothness ( PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile ); +LEPT_DLL extern NUMA * pixGetEdgeProfile ( PIX *pixs, l_int32 side, const char *debugfile ); +LEPT_DLL extern l_ok pixGetLastOffPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); +LEPT_DLL extern l_int32 pixGetLastOnPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); +LEPT_DLL extern char * encodeBase64 ( const l_uint8 *inarray, l_int32 insize, l_int32 *poutsize ); +LEPT_DLL extern l_uint8 * decodeBase64 ( const char *inarray, l_int32 insize, l_int32 *poutsize ); +LEPT_DLL extern char * encodeAscii85 ( const l_uint8 *inarray, l_int32 insize, l_int32 *poutsize ); +LEPT_DLL extern l_uint8 * decodeAscii85 ( const char *inarray, l_int32 insize, l_int32 *poutsize ); +LEPT_DLL extern char * reformatPacked64 ( const char *inarray, l_int32 insize, l_int32 leadspace, l_int32 linechars, l_int32 addquotes, l_int32 *poutsize ); +LEPT_DLL extern PIX * pixGammaTRC ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern PIX * pixGammaTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern PIX * pixGammaTRCWithAlpha ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern NUMA * numaGammaTRC ( l_float32 gamma, l_int32 minval, l_int32 maxval ); +LEPT_DLL extern PIX * pixContrastTRC ( PIX *pixd, PIX *pixs, l_float32 factor ); +LEPT_DLL extern PIX * pixContrastTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 factor ); +LEPT_DLL extern NUMA * numaContrastTRC ( l_float32 factor ); +LEPT_DLL extern PIX * pixEqualizeTRC ( PIX *pixd, PIX *pixs, l_float32 fract, l_int32 factor ); +LEPT_DLL extern NUMA * numaEqualizeTRC ( PIX *pix, l_float32 fract, l_int32 factor ); +LEPT_DLL extern l_int32 pixTRCMap ( PIX *pixs, PIX *pixm, NUMA *na ); +LEPT_DLL extern l_int32 pixTRCMapGeneral ( PIX *pixs, PIX *pixm, NUMA *nar, NUMA *nag, NUMA *nab ); +LEPT_DLL extern PIX * pixUnsharpMasking ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); +LEPT_DLL extern PIX * pixUnsharpMaskingGray ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); +LEPT_DLL extern PIX * pixUnsharpMaskingFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); +LEPT_DLL extern PIX * pixUnsharpMaskingGrayFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); +LEPT_DLL extern PIX * pixUnsharpMaskingGray1D ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); +LEPT_DLL extern PIX * pixUnsharpMaskingGray2D ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); +LEPT_DLL extern PIX * pixModifyHue ( PIX *pixd, PIX *pixs, l_float32 fract ); +LEPT_DLL extern PIX * pixModifySaturation ( PIX *pixd, PIX *pixs, l_float32 fract ); +LEPT_DLL extern l_int32 pixMeasureSaturation ( PIX *pixs, l_int32 factor, l_float32 *psat ); +LEPT_DLL extern PIX * pixModifyBrightness ( PIX *pixd, PIX *pixs, l_float32 fract ); +LEPT_DLL extern PIX * pixMosaicColorShiftRGB ( PIX *pixs, l_float32 roff, l_float32 goff, l_float32 boff, l_float32 delta, l_int32 nincr ); +LEPT_DLL extern PIX * pixColorShiftRGB ( PIX *pixs, l_float32 rfract, l_float32 gfract, l_float32 bfract ); +LEPT_DLL extern PIX * pixDarkenGray ( PIX *pixd, PIX *pixs, l_int32 thresh, l_int32 satlimit ); +LEPT_DLL extern PIX * pixMultConstantColor ( PIX *pixs, l_float32 rfact, l_float32 gfact, l_float32 bfact ); +LEPT_DLL extern PIX * pixMultMatrixColor ( PIX *pixs, L_KERNEL *kel ); +LEPT_DLL extern PIX * pixHalfEdgeByBandpass ( PIX *pixs, l_int32 sm1h, l_int32 sm1v, l_int32 sm2h, l_int32 sm2v ); +LEPT_DLL extern l_ok fhmtautogen ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern l_ok fhmtautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern l_ok fhmtautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern PIX * pixHMTDwa_1 ( PIX *pixd, PIX *pixs, const char *selname ); +LEPT_DLL extern PIX * pixFHMTGen_1 ( PIX *pixd, PIX *pixs, const char *selname ); +LEPT_DLL extern l_int32 fhmtgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); +LEPT_DLL extern l_ok pixItalicWords ( PIX *pixs, BOXA *boxaw, PIX *pixw, BOXA **pboxa, l_int32 debugflag ); +LEPT_DLL extern PIX * pixOrientCorrect ( PIX *pixs, l_float32 minupconf, l_float32 minratio, l_float32 *pupconf, l_float32 *pleftconf, l_int32 *protation, l_int32 debug ); +LEPT_DLL extern l_ok pixOrientDetect ( PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern l_ok makeOrientDecision ( l_float32 upconf, l_float32 leftconf, l_float32 minupconf, l_float32 minratio, l_int32 *porient, l_int32 debug ); +LEPT_DLL extern l_ok pixUpDownDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern l_ok pixUpDownDetectGeneral ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug ); +LEPT_DLL extern l_ok pixOrientDetectDwa ( PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern l_ok pixUpDownDetectDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern l_ok pixUpDownDetectGeneralDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug ); +LEPT_DLL extern l_ok pixMirrorDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern l_ok pixMirrorDetectDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); +LEPT_DLL extern PIX * pixFlipFHMTGen ( PIX *pixd, PIX *pixs, const char *selname ); +LEPT_DLL extern l_ok fmorphautogen ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern l_ok fmorphautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern l_int32 fmorphautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); +LEPT_DLL extern PIX * pixMorphDwa_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); +LEPT_DLL extern PIX * pixFMorphopGen_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); +LEPT_DLL extern l_int32 fmorphopgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); +LEPT_DLL extern FPIX * fpixCreate ( l_int32 width, l_int32 height ); +LEPT_DLL extern FPIX * fpixCreateTemplate ( FPIX *fpixs ); +LEPT_DLL extern FPIX * fpixClone ( FPIX *fpix ); +LEPT_DLL extern FPIX * fpixCopy ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern l_ok fpixResizeImageData ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern void fpixDestroy ( FPIX **pfpix ); +LEPT_DLL extern l_ok fpixGetDimensions ( FPIX *fpix, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok fpixSetDimensions ( FPIX *fpix, l_int32 w, l_int32 h ); +LEPT_DLL extern l_int32 fpixGetWpl ( FPIX *fpix ); +LEPT_DLL extern l_ok fpixSetWpl ( FPIX *fpix, l_int32 wpl ); +LEPT_DLL extern l_int32 fpixGetRefcount ( FPIX *fpix ); +LEPT_DLL extern l_ok fpixChangeRefcount ( FPIX *fpix, l_int32 delta ); +LEPT_DLL extern l_ok fpixGetResolution ( FPIX *fpix, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok fpixSetResolution ( FPIX *fpix, l_int32 xres, l_int32 yres ); +LEPT_DLL extern l_ok fpixCopyResolution ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern l_float32 * fpixGetData ( FPIX *fpix ); +LEPT_DLL extern l_ok fpixSetData ( FPIX *fpix, l_float32 *data ); +LEPT_DLL extern l_ok fpixGetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval ); +LEPT_DLL extern l_ok fpixSetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 val ); +LEPT_DLL extern FPIXA * fpixaCreate ( l_int32 n ); +LEPT_DLL extern FPIXA * fpixaCopy ( FPIXA *fpixa, l_int32 copyflag ); +LEPT_DLL extern void fpixaDestroy ( FPIXA **pfpixa ); +LEPT_DLL extern l_ok fpixaAddFPix ( FPIXA *fpixa, FPIX *fpix, l_int32 copyflag ); +LEPT_DLL extern l_int32 fpixaGetCount ( FPIXA *fpixa ); +LEPT_DLL extern l_ok fpixaChangeRefcount ( FPIXA *fpixa, l_int32 delta ); +LEPT_DLL extern FPIX * fpixaGetFPix ( FPIXA *fpixa, l_int32 index, l_int32 accesstype ); +LEPT_DLL extern l_ok fpixaGetFPixDimensions ( FPIXA *fpixa, l_int32 index, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_float32 * fpixaGetData ( FPIXA *fpixa, l_int32 index ); +LEPT_DLL extern l_ok fpixaGetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval ); +LEPT_DLL extern l_ok fpixaSetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 val ); +LEPT_DLL extern DPIX * dpixCreate ( l_int32 width, l_int32 height ); +LEPT_DLL extern DPIX * dpixCreateTemplate ( DPIX *dpixs ); +LEPT_DLL extern DPIX * dpixClone ( DPIX *dpix ); +LEPT_DLL extern DPIX * dpixCopy ( DPIX *dpixd, DPIX *dpixs ); +LEPT_DLL extern l_ok dpixResizeImageData ( DPIX *dpixd, DPIX *dpixs ); +LEPT_DLL extern void dpixDestroy ( DPIX **pdpix ); +LEPT_DLL extern l_ok dpixGetDimensions ( DPIX *dpix, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok dpixSetDimensions ( DPIX *dpix, l_int32 w, l_int32 h ); +LEPT_DLL extern l_int32 dpixGetWpl ( DPIX *dpix ); +LEPT_DLL extern l_ok dpixSetWpl ( DPIX *dpix, l_int32 wpl ); +LEPT_DLL extern l_int32 dpixGetRefcount ( DPIX *dpix ); +LEPT_DLL extern l_ok dpixChangeRefcount ( DPIX *dpix, l_int32 delta ); +LEPT_DLL extern l_ok dpixGetResolution ( DPIX *dpix, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok dpixSetResolution ( DPIX *dpix, l_int32 xres, l_int32 yres ); +LEPT_DLL extern l_ok dpixCopyResolution ( DPIX *dpixd, DPIX *dpixs ); +LEPT_DLL extern l_float64 * dpixGetData ( DPIX *dpix ); +LEPT_DLL extern l_ok dpixSetData ( DPIX *dpix, l_float64 *data ); +LEPT_DLL extern l_ok dpixGetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval ); +LEPT_DLL extern l_ok dpixSetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 val ); +LEPT_DLL extern FPIX * fpixRead ( const char *filename ); +LEPT_DLL extern FPIX * fpixReadStream ( FILE *fp ); +LEPT_DLL extern FPIX * fpixReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok fpixWrite ( const char *filename, FPIX *fpix ); +LEPT_DLL extern l_ok fpixWriteStream ( FILE *fp, FPIX *fpix ); +LEPT_DLL extern l_ok fpixWriteMem ( l_uint8 **pdata, size_t *psize, FPIX *fpix ); +LEPT_DLL extern FPIX * fpixEndianByteSwap ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern DPIX * dpixRead ( const char *filename ); +LEPT_DLL extern DPIX * dpixReadStream ( FILE *fp ); +LEPT_DLL extern DPIX * dpixReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok dpixWrite ( const char *filename, DPIX *dpix ); +LEPT_DLL extern l_ok dpixWriteStream ( FILE *fp, DPIX *dpix ); +LEPT_DLL extern l_ok dpixWriteMem ( l_uint8 **pdata, size_t *psize, DPIX *dpix ); +LEPT_DLL extern DPIX * dpixEndianByteSwap ( DPIX *dpixd, DPIX *dpixs ); +LEPT_DLL extern l_ok fpixPrintStream ( FILE *fp, FPIX *fpix, l_int32 factor ); +LEPT_DLL extern FPIX * pixConvertToFPix ( PIX *pixs, l_int32 ncomps ); +LEPT_DLL extern DPIX * pixConvertToDPix ( PIX *pixs, l_int32 ncomps ); +LEPT_DLL extern PIX * fpixConvertToPix ( FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); +LEPT_DLL extern PIX * fpixDisplayMaxDynamicRange ( FPIX *fpixs ); +LEPT_DLL extern DPIX * fpixConvertToDPix ( FPIX *fpix ); +LEPT_DLL extern PIX * dpixConvertToPix ( DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); +LEPT_DLL extern FPIX * dpixConvertToFPix ( DPIX *dpix ); +LEPT_DLL extern l_ok fpixGetMin ( FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); +LEPT_DLL extern l_ok fpixGetMax ( FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); +LEPT_DLL extern l_ok dpixGetMin ( DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); +LEPT_DLL extern l_ok dpixGetMax ( DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); +LEPT_DLL extern FPIX * fpixScaleByInteger ( FPIX *fpixs, l_int32 factor ); +LEPT_DLL extern DPIX * dpixScaleByInteger ( DPIX *dpixs, l_int32 factor ); +LEPT_DLL extern FPIX * fpixLinearCombination ( FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b ); +LEPT_DLL extern l_ok fpixAddMultConstant ( FPIX *fpix, l_float32 addc, l_float32 multc ); +LEPT_DLL extern DPIX * dpixLinearCombination ( DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b ); +LEPT_DLL extern l_ok dpixAddMultConstant ( DPIX *dpix, l_float64 addc, l_float64 multc ); +LEPT_DLL extern l_ok fpixSetAllArbitrary ( FPIX *fpix, l_float32 inval ); +LEPT_DLL extern l_ok dpixSetAllArbitrary ( DPIX *dpix, l_float64 inval ); +LEPT_DLL extern FPIX * fpixAddBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern FPIX * fpixRemoveBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern FPIX * fpixAddMirroredBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern FPIX * fpixAddContinuedBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern FPIX * fpixAddSlopeBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern l_ok fpixRasterop ( FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy ); +LEPT_DLL extern FPIX * fpixRotateOrth ( FPIX *fpixs, l_int32 quads ); +LEPT_DLL extern FPIX * fpixRotate180 ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern FPIX * fpixRotate90 ( FPIX *fpixs, l_int32 direction ); +LEPT_DLL extern FPIX * fpixFlipLR ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern FPIX * fpixFlipTB ( FPIX *fpixd, FPIX *fpixs ); +LEPT_DLL extern FPIX * fpixAffinePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); +LEPT_DLL extern FPIX * fpixAffine ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); +LEPT_DLL extern FPIX * fpixProjectivePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); +LEPT_DLL extern FPIX * fpixProjective ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); +LEPT_DLL extern l_ok linearInterpolatePixelFloat ( l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval ); +LEPT_DLL extern PIX * fpixThresholdToPix ( FPIX *fpix, l_float32 thresh ); +LEPT_DLL extern FPIX * pixComponentFunction ( PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom ); +LEPT_DLL extern PIX * pixReadStreamGif ( FILE *fp ); +LEPT_DLL extern PIX * pixReadMemGif ( const l_uint8 *cdata, size_t size ); +LEPT_DLL extern l_ok pixWriteStreamGif ( FILE *fp, PIX *pix ); +LEPT_DLL extern l_ok pixWriteMemGif ( l_uint8 **pdata, size_t *psize, PIX *pix ); +LEPT_DLL extern GPLOT * gplotCreate ( const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel ); +LEPT_DLL extern void gplotDestroy ( GPLOT **pgplot ); +LEPT_DLL extern l_ok gplotAddPlot ( GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plottitle ); +LEPT_DLL extern l_ok gplotSetScaling ( GPLOT *gplot, l_int32 scaling ); +LEPT_DLL extern l_ok gplotMakeOutput ( GPLOT *gplot ); +LEPT_DLL extern l_ok gplotGenCommandFile ( GPLOT *gplot ); +LEPT_DLL extern l_ok gplotGenDataFiles ( GPLOT *gplot ); +LEPT_DLL extern l_ok gplotSimple1 ( NUMA *na, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern l_ok gplotSimple2 ( NUMA *na1, NUMA *na2, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern l_ok gplotSimpleN ( NUMAA *naa, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern l_ok gplotSimpleXY1 ( NUMA *nax, NUMA *nay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern l_ok gplotSimpleXY2 ( NUMA *nax, NUMA *nay1, NUMA *nay2, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern l_ok gplotSimpleXYN ( NUMA *nax, NUMAA *naay, l_int32 plotstyle, l_int32 outformat, const char *outroot, const char *title ); +LEPT_DLL extern GPLOT * gplotRead ( const char *filename ); +LEPT_DLL extern l_ok gplotWrite ( const char *filename, GPLOT *gplot ); +LEPT_DLL extern PTA * generatePtaLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); +LEPT_DLL extern PTA * generatePtaWideLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width ); +LEPT_DLL extern PTA * generatePtaBox ( BOX *box, l_int32 width ); +LEPT_DLL extern PTA * generatePtaBoxa ( BOXA *boxa, l_int32 width, l_int32 removedups ); +LEPT_DLL extern PTA * generatePtaHashBox ( BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); +LEPT_DLL extern PTA * generatePtaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups ); +LEPT_DLL extern PTAA * generatePtaaBoxa ( BOXA *boxa ); +LEPT_DLL extern PTAA * generatePtaaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); +LEPT_DLL extern PTA * generatePtaPolyline ( PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups ); +LEPT_DLL extern PTA * generatePtaGrid ( l_int32 w, l_int32 h, l_int32 nx, l_int32 ny, l_int32 width ); +LEPT_DLL extern PTA * convertPtaLineTo4cc ( PTA *ptas ); +LEPT_DLL extern PTA * generatePtaFilledCircle ( l_int32 radius ); +LEPT_DLL extern PTA * generatePtaFilledSquare ( l_int32 side ); +LEPT_DLL extern PTA * generatePtaLineFromPt ( l_int32 x, l_int32 y, l_float64 length, l_float64 radang ); +LEPT_DLL extern l_ok locatePtRadially ( l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py ); +LEPT_DLL extern l_ok pixRenderPlotFromNuma ( PIX **ppix, NUMA *na, l_int32 plotloc, l_int32 linewidth, l_int32 max, l_uint32 color ); +LEPT_DLL extern PTA * makePlotPtaFromNuma ( NUMA *na, l_int32 size, l_int32 plotloc, l_int32 linewidth, l_int32 max ); +LEPT_DLL extern l_ok pixRenderPlotFromNumaGen ( PIX **ppix, NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref, l_uint32 color ); +LEPT_DLL extern PTA * makePlotPtaFromNumaGen ( NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref ); +LEPT_DLL extern l_ok pixRenderPta ( PIX *pix, PTA *pta, l_int32 op ); +LEPT_DLL extern l_ok pixRenderPtaArb ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval ); +LEPT_DLL extern l_ok pixRenderPtaBlend ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); +LEPT_DLL extern l_ok pixRenderLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op ); +LEPT_DLL extern l_ok pixRenderLineArb ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); +LEPT_DLL extern l_ok pixRenderLineBlend ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); +LEPT_DLL extern l_ok pixRenderBox ( PIX *pix, BOX *box, l_int32 width, l_int32 op ); +LEPT_DLL extern l_ok pixRenderBoxArb ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); +LEPT_DLL extern l_ok pixRenderBoxBlend ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); +LEPT_DLL extern l_ok pixRenderBoxa ( PIX *pix, BOXA *boxa, l_int32 width, l_int32 op ); +LEPT_DLL extern l_ok pixRenderBoxaArb ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); +LEPT_DLL extern l_ok pixRenderBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups ); +LEPT_DLL extern l_ok pixRenderHashBox ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); +LEPT_DLL extern l_ok pixRenderHashBoxArb ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixRenderHashBoxBlend ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); +LEPT_DLL extern l_ok pixRenderHashMaskArb ( PIX *pix, PIX *pixm, l_int32 x, l_int32 y, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixRenderHashBoxa ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); +LEPT_DLL extern l_ok pixRenderHashBoxaArb ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixRenderHashBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); +LEPT_DLL extern l_ok pixRenderPolyline ( PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag ); +LEPT_DLL extern l_ok pixRenderPolylineArb ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag ); +LEPT_DLL extern l_ok pixRenderPolylineBlend ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups ); +LEPT_DLL extern l_ok pixRenderGridArb ( PIX *pix, l_int32 nx, l_int32 ny, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); +LEPT_DLL extern PIX * pixRenderRandomCmapPtaa ( PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag ); +LEPT_DLL extern PIX * pixRenderPolygon ( PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin ); +LEPT_DLL extern PIX * pixFillPolygon ( PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin ); +LEPT_DLL extern PIX * pixRenderContours ( PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth ); +LEPT_DLL extern PIX * fpixAutoRenderContours ( FPIX *fpix, l_int32 ncontours ); +LEPT_DLL extern PIX * fpixRenderContours ( FPIX *fpixs, l_float32 incr, l_float32 proxim ); +LEPT_DLL extern PTA * pixGeneratePtaBoundary ( PIX *pixs, l_int32 width ); +LEPT_DLL extern PIX * pixErodeGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixDilateGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixDilateGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixDitherToBinary ( PIX *pixs ); +LEPT_DLL extern PIX * pixDitherToBinarySpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip ); +LEPT_DLL extern void ditherToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag ); +LEPT_DLL extern PIX * pixThresholdToBinary ( PIX *pixs, l_int32 thresh ); +LEPT_DLL extern void thresholdToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *lines, l_int32 d, l_int32 thresh ); +LEPT_DLL extern PIX * pixVarThresholdToBinary ( PIX *pixs, PIX *pixg ); +LEPT_DLL extern PIX * pixAdaptThresholdToBinary ( PIX *pixs, PIX *pixm, l_float32 gamma ); +LEPT_DLL extern PIX * pixAdaptThresholdToBinaryGen ( PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 blackval, l_int32 whiteval, l_int32 thresh ); +LEPT_DLL extern PIX * pixGenerateMaskByValue ( PIX *pixs, l_int32 val, l_int32 usecmap ); +LEPT_DLL extern PIX * pixGenerateMaskByBand ( PIX *pixs, l_int32 lower, l_int32 upper, l_int32 inband, l_int32 usecmap ); +LEPT_DLL extern PIX * pixDitherTo2bpp ( PIX *pixs, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixDitherTo2bppSpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixThresholdTo2bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixThresholdTo4bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixThresholdOn8bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixThresholdGrayArb ( PIX *pixs, const char *edgevals, l_int32 outdepth, l_int32 use_average, l_int32 setblack, l_int32 setwhite ); +LEPT_DLL extern l_int32 * makeGrayQuantIndexTable ( l_int32 nlevels ); +LEPT_DLL extern l_ok makeGrayQuantTableArb ( NUMA *na, l_int32 outdepth, l_int32 **ptab, PIXCMAP **pcmap ); +LEPT_DLL extern PIX * pixGenerateMaskByBand32 ( PIX *pixs, l_uint32 refval, l_int32 delm, l_int32 delp, l_float32 fractm, l_float32 fractp ); +LEPT_DLL extern PIX * pixGenerateMaskByDiscr32 ( PIX *pixs, l_uint32 refval1, l_uint32 refval2, l_int32 distflag ); +LEPT_DLL extern PIX * pixGrayQuantFromHisto ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 minfract, l_int32 maxsize ); +LEPT_DLL extern PIX * pixGrayQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth ); +LEPT_DLL extern L_HEAP * lheapCreate ( l_int32 n, l_int32 direction ); +LEPT_DLL extern void lheapDestroy ( L_HEAP **plh, l_int32 freeflag ); +LEPT_DLL extern l_ok lheapAdd ( L_HEAP *lh, void *item ); +LEPT_DLL extern void * lheapRemove ( L_HEAP *lh ); +LEPT_DLL extern l_int32 lheapGetCount ( L_HEAP *lh ); +LEPT_DLL extern l_ok lheapSwapUp ( L_HEAP *lh, l_int32 index ); +LEPT_DLL extern l_ok lheapSwapDown ( L_HEAP *lh ); +LEPT_DLL extern l_ok lheapSort ( L_HEAP *lh ); +LEPT_DLL extern l_ok lheapSortStrictOrder ( L_HEAP *lh ); +LEPT_DLL extern l_ok lheapPrint ( FILE *fp, L_HEAP *lh ); +LEPT_DLL extern JBCLASSER * jbRankHausInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_int32 size, l_float32 rank ); +LEPT_DLL extern JBCLASSER * jbCorrelationInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); +LEPT_DLL extern JBCLASSER * jbCorrelationInitWithoutComponents ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); +LEPT_DLL extern l_ok jbAddPages ( JBCLASSER *classer, SARRAY *safiles ); +LEPT_DLL extern l_ok jbAddPage ( JBCLASSER *classer, PIX *pixs ); +LEPT_DLL extern l_ok jbAddPageComponents ( JBCLASSER *classer, PIX *pixs, BOXA *boxas, PIXA *pixas ); +LEPT_DLL extern l_ok jbClassifyRankHaus ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); +LEPT_DLL extern l_int32 pixHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh ); +LEPT_DLL extern l_int32 pixRankHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 area1, l_int32 area3, l_float32 rank, l_int32 *tab8 ); +LEPT_DLL extern l_ok jbClassifyCorrelation ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); +LEPT_DLL extern l_ok jbGetComponents ( PIX *pixs, l_int32 components, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad ); +LEPT_DLL extern l_ok pixWordMaskByDilation ( PIX *pixs, PIX **ppixm, l_int32 *psize, PIXA *pixadb ); +LEPT_DLL extern l_ok pixWordBoxesByDilation ( PIX *pixs, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxa, l_int32 *psize, PIXA *pixadb ); +LEPT_DLL extern PIXA * jbAccumulateComposites ( PIXAA *pixaa, NUMA **pna, PTA **pptat ); +LEPT_DLL extern PIXA * jbTemplatesFromComposites ( PIXA *pixac, NUMA *na ); +LEPT_DLL extern JBCLASSER * jbClasserCreate ( l_int32 method, l_int32 components ); +LEPT_DLL extern void jbClasserDestroy ( JBCLASSER **pclasser ); +LEPT_DLL extern JBDATA * jbDataSave ( JBCLASSER *classer ); +LEPT_DLL extern void jbDataDestroy ( JBDATA **pdata ); +LEPT_DLL extern l_ok jbDataWrite ( const char *rootout, JBDATA *jbdata ); +LEPT_DLL extern JBDATA * jbDataRead ( const char *rootname ); +LEPT_DLL extern PIXA * jbDataRender ( JBDATA *data, l_int32 debugflag ); +LEPT_DLL extern l_ok jbGetULCorners ( JBCLASSER *classer, PIX *pixs, BOXA *boxa ); +LEPT_DLL extern l_ok jbGetLLCorners ( JBCLASSER *classer ); +LEPT_DLL extern l_ok readHeaderJp2k ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_ok freadHeaderJp2k ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_ok readHeaderMemJp2k ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_int32 fgetJp2kResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern PIX * pixReadJp2k ( const char *filename, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); +LEPT_DLL extern PIX * pixReadStreamJp2k ( FILE *fp, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); +LEPT_DLL extern l_ok pixWriteJp2k ( const char *filename, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug ); +LEPT_DLL extern l_ok pixWriteStreamJp2k ( FILE *fp, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug ); +LEPT_DLL extern PIX * pixReadMemJp2k ( const l_uint8 *data, size_t size, l_uint32 reduction, BOX *box, l_int32 hint, l_int32 debug ); +LEPT_DLL extern l_ok pixWriteMemJp2k ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 nlevels, l_int32 hint, l_int32 debug ); +LEPT_DLL extern PIX * pixReadJpeg ( const char *filename, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); +LEPT_DLL extern PIX * pixReadStreamJpeg ( FILE *fp, l_int32 cmapflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); +LEPT_DLL extern l_ok readHeaderJpeg ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); +LEPT_DLL extern l_ok freadHeaderJpeg ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); +LEPT_DLL extern l_int32 fgetJpegResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_int32 fgetJpegComment ( FILE *fp, l_uint8 **pcomment ); +LEPT_DLL extern l_ok pixWriteJpeg ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); +LEPT_DLL extern l_ok pixWriteStreamJpeg ( FILE *fp, PIX *pixs, l_int32 quality, l_int32 progressive ); +LEPT_DLL extern PIX * pixReadMemJpeg ( const l_uint8 *data, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); +LEPT_DLL extern l_ok readHeaderMemJpeg ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); +LEPT_DLL extern l_ok readResolutionMemJpeg ( const l_uint8 *data, size_t size, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok pixWriteMemJpeg ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive ); +LEPT_DLL extern l_ok pixSetChromaSampling ( PIX *pix, l_int32 sampling ); +LEPT_DLL extern L_KERNEL * kernelCreate ( l_int32 height, l_int32 width ); +LEPT_DLL extern void kernelDestroy ( L_KERNEL **pkel ); +LEPT_DLL extern L_KERNEL * kernelCopy ( L_KERNEL *kels ); +LEPT_DLL extern l_ok kernelGetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 *pval ); +LEPT_DLL extern l_ok kernelSetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 val ); +LEPT_DLL extern l_ok kernelGetParameters ( L_KERNEL *kel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); +LEPT_DLL extern l_ok kernelSetOrigin ( L_KERNEL *kel, l_int32 cy, l_int32 cx ); +LEPT_DLL extern l_ok kernelGetSum ( L_KERNEL *kel, l_float32 *psum ); +LEPT_DLL extern l_ok kernelGetMinMax ( L_KERNEL *kel, l_float32 *pmin, l_float32 *pmax ); +LEPT_DLL extern L_KERNEL * kernelNormalize ( L_KERNEL *kels, l_float32 normsum ); +LEPT_DLL extern L_KERNEL * kernelInvert ( L_KERNEL *kels ); +LEPT_DLL extern l_float32 ** create2dFloatArray ( l_int32 sy, l_int32 sx ); +LEPT_DLL extern L_KERNEL * kernelRead ( const char *fname ); +LEPT_DLL extern L_KERNEL * kernelReadStream ( FILE *fp ); +LEPT_DLL extern l_ok kernelWrite ( const char *fname, L_KERNEL *kel ); +LEPT_DLL extern l_ok kernelWriteStream ( FILE *fp, L_KERNEL *kel ); +LEPT_DLL extern L_KERNEL * kernelCreateFromString ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, const char *kdata ); +LEPT_DLL extern L_KERNEL * kernelCreateFromFile ( const char *filename ); +LEPT_DLL extern L_KERNEL * kernelCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx ); +LEPT_DLL extern PIX * kernelDisplayInPix ( L_KERNEL *kel, l_int32 size, l_int32 gthick ); +LEPT_DLL extern NUMA * parseStringForNumbers ( const char *str, const char *seps ); +LEPT_DLL extern L_KERNEL * makeFlatKernel ( l_int32 height, l_int32 width, l_int32 cy, l_int32 cx ); +LEPT_DLL extern L_KERNEL * makeGaussianKernel ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max ); +LEPT_DLL extern l_ok makeGaussianKernelSep ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 max, L_KERNEL **pkelx, L_KERNEL **pkely ); +LEPT_DLL extern L_KERNEL * makeDoGKernel ( l_int32 halfh, l_int32 halfw, l_float32 stdev, l_float32 ratio ); +LEPT_DLL extern char * getImagelibVersions ( ); +LEPT_DLL extern void listDestroy ( DLLIST **phead ); +LEPT_DLL extern l_ok listAddToHead ( DLLIST **phead, void *data ); +LEPT_DLL extern l_ok listAddToTail ( DLLIST **phead, DLLIST **ptail, void *data ); +LEPT_DLL extern l_ok listInsertBefore ( DLLIST **phead, DLLIST *elem, void *data ); +LEPT_DLL extern l_ok listInsertAfter ( DLLIST **phead, DLLIST *elem, void *data ); +LEPT_DLL extern void * listRemoveElement ( DLLIST **phead, DLLIST *elem ); +LEPT_DLL extern void * listRemoveFromHead ( DLLIST **phead ); +LEPT_DLL extern void * listRemoveFromTail ( DLLIST **phead, DLLIST **ptail ); +LEPT_DLL extern DLLIST * listFindElement ( DLLIST *head, void *data ); +LEPT_DLL extern DLLIST * listFindTail ( DLLIST *head ); +LEPT_DLL extern l_int32 listGetCount ( DLLIST *head ); +LEPT_DLL extern l_ok listReverse ( DLLIST **phead ); +LEPT_DLL extern l_ok listJoin ( DLLIST **phead1, DLLIST **phead2 ); +LEPT_DLL extern L_AMAP * l_amapCreate ( l_int32 keytype ); +LEPT_DLL extern RB_TYPE * l_amapFind ( L_AMAP *m, RB_TYPE key ); +LEPT_DLL extern void l_amapInsert ( L_AMAP *m, RB_TYPE key, RB_TYPE value ); +LEPT_DLL extern void l_amapDelete ( L_AMAP *m, RB_TYPE key ); +LEPT_DLL extern void l_amapDestroy ( L_AMAP **pm ); +LEPT_DLL extern L_AMAP_NODE * l_amapGetFirst ( L_AMAP *m ); +LEPT_DLL extern L_AMAP_NODE * l_amapGetNext ( L_AMAP_NODE *n ); +LEPT_DLL extern L_AMAP_NODE * l_amapGetLast ( L_AMAP *m ); +LEPT_DLL extern L_AMAP_NODE * l_amapGetPrev ( L_AMAP_NODE *n ); +LEPT_DLL extern l_int32 l_amapSize ( L_AMAP *m ); +LEPT_DLL extern L_ASET * l_asetCreate ( l_int32 keytype ); +LEPT_DLL extern RB_TYPE * l_asetFind ( L_ASET *s, RB_TYPE key ); +LEPT_DLL extern void l_asetInsert ( L_ASET *s, RB_TYPE key ); +LEPT_DLL extern void l_asetDelete ( L_ASET *s, RB_TYPE key ); +LEPT_DLL extern void l_asetDestroy ( L_ASET **ps ); +LEPT_DLL extern L_ASET_NODE * l_asetGetFirst ( L_ASET *s ); +LEPT_DLL extern L_ASET_NODE * l_asetGetNext ( L_ASET_NODE *n ); +LEPT_DLL extern L_ASET_NODE * l_asetGetLast ( L_ASET *s ); +LEPT_DLL extern L_ASET_NODE * l_asetGetPrev ( L_ASET_NODE *n ); +LEPT_DLL extern l_int32 l_asetSize ( L_ASET *s ); +LEPT_DLL extern PIX * generateBinaryMaze ( l_int32 w, l_int32 h, l_int32 xi, l_int32 yi, l_float32 wallps, l_float32 ranis ); +LEPT_DLL extern PTA * pixSearchBinaryMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); +LEPT_DLL extern PTA * pixSearchGrayMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); +LEPT_DLL extern PIX * pixDilate ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixErode ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixHMT ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixOpen ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixClose ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixCloseSafe ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixOpenGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixCloseGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); +LEPT_DLL extern PIX * pixDilateBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseSafeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern l_int32 selectComposableSels ( l_int32 size, l_int32 direction, SEL **psel1, SEL **psel2 ); +LEPT_DLL extern l_ok selectComposableSizes ( l_int32 size, l_int32 *pfactor1, l_int32 *pfactor2 ); +LEPT_DLL extern PIX * pixDilateCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseSafeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern void resetMorphBoundaryCondition ( l_int32 bc ); +LEPT_DLL extern l_uint32 getMorphBorderPixelColor ( l_int32 type, l_int32 depth ); +LEPT_DLL extern PIX * pixExtractBoundary ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixMorphSequenceMasked ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 dispsep ); +LEPT_DLL extern PIX * pixMorphSequenceByComponent ( PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); +LEPT_DLL extern PIXA * pixaMorphSequenceByComponent ( PIXA *pixas, const char *sequence, l_int32 minw, l_int32 minh ); +LEPT_DLL extern PIX * pixMorphSequenceByRegion ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); +LEPT_DLL extern PIXA * pixaMorphSequenceByRegion ( PIX *pixs, PIXA *pixam, const char *sequence, l_int32 minw, l_int32 minh ); +LEPT_DLL extern PIX * pixUnionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); +LEPT_DLL extern PIX * pixIntersectionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); +LEPT_DLL extern PIX * pixSelectiveConnCompFill ( PIX *pixs, l_int32 connectivity, l_int32 minw, l_int32 minh ); +LEPT_DLL extern l_ok pixRemoveMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_int32 dsize ); +LEPT_DLL extern PIX * pixDisplayMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_uint32 color, l_float32 scale, l_int32 nlevels ); +LEPT_DLL extern PIXA * pixaExtendByMorph ( PIXA *pixas, l_int32 type, l_int32 niters, SEL *sel, l_int32 include ); +LEPT_DLL extern PIXA * pixaExtendByScaling ( PIXA *pixas, NUMA *nasc, l_int32 type, l_int32 include ); +LEPT_DLL extern PIX * pixSeedfillMorph ( PIX *pixs, PIX *pixm, l_int32 maxiters, l_int32 connectivity ); +LEPT_DLL extern NUMA * pixRunHistogramMorph ( PIX *pixs, l_int32 runtype, l_int32 direction, l_int32 maxsize ); +LEPT_DLL extern PIX * pixTophat ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 type ); +LEPT_DLL extern PIX * pixHDome ( PIX *pixs, l_int32 height, l_int32 connectivity ); +LEPT_DLL extern PIX * pixFastTophat ( PIX *pixs, l_int32 xsize, l_int32 ysize, l_int32 type ); +LEPT_DLL extern PIX * pixMorphGradient ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 smoothing ); +LEPT_DLL extern PTA * pixaCentroids ( PIXA *pixa ); +LEPT_DLL extern l_ok pixCentroid ( PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave ); +LEPT_DLL extern PIX * pixDilateBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixDilateCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixDilateCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixErodeCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixOpenCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern PIX * pixCloseCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern l_ok getExtendedCompositeParameters ( l_int32 size, l_int32 *pn, l_int32 *pextra, l_int32 *pactualsize ); +LEPT_DLL extern PIX * pixMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); +LEPT_DLL extern PIX * pixMorphCompSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); +LEPT_DLL extern PIX * pixMorphSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); +LEPT_DLL extern PIX * pixMorphCompSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); +LEPT_DLL extern l_int32 morphSequenceVerify ( SARRAY *sa ); +LEPT_DLL extern PIX * pixGrayMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); +LEPT_DLL extern PIX * pixColorMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); +LEPT_DLL extern NUMA * numaCreate ( l_int32 n ); +LEPT_DLL extern NUMA * numaCreateFromIArray ( l_int32 *iarray, l_int32 size ); +LEPT_DLL extern NUMA * numaCreateFromFArray ( l_float32 *farray, l_int32 size, l_int32 copyflag ); +LEPT_DLL extern NUMA * numaCreateFromString ( const char *str ); +LEPT_DLL extern void numaDestroy ( NUMA **pna ); +LEPT_DLL extern NUMA * numaCopy ( NUMA *na ); +LEPT_DLL extern NUMA * numaClone ( NUMA *na ); +LEPT_DLL extern l_ok numaEmpty ( NUMA *na ); +LEPT_DLL extern l_ok numaAddNumber ( NUMA *na, l_float32 val ); +LEPT_DLL extern l_ok numaInsertNumber ( NUMA *na, l_int32 index, l_float32 val ); +LEPT_DLL extern l_ok numaRemoveNumber ( NUMA *na, l_int32 index ); +LEPT_DLL extern l_ok numaReplaceNumber ( NUMA *na, l_int32 index, l_float32 val ); +LEPT_DLL extern l_int32 numaGetCount ( NUMA *na ); +LEPT_DLL extern l_ok numaSetCount ( NUMA *na, l_int32 newcount ); +LEPT_DLL extern l_ok numaGetFValue ( NUMA *na, l_int32 index, l_float32 *pval ); +LEPT_DLL extern l_ok numaGetIValue ( NUMA *na, l_int32 index, l_int32 *pival ); +LEPT_DLL extern l_ok numaSetValue ( NUMA *na, l_int32 index, l_float32 val ); +LEPT_DLL extern l_ok numaShiftValue ( NUMA *na, l_int32 index, l_float32 diff ); +LEPT_DLL extern l_int32 * numaGetIArray ( NUMA *na ); +LEPT_DLL extern l_float32 * numaGetFArray ( NUMA *na, l_int32 copyflag ); +LEPT_DLL extern l_int32 numaGetRefcount ( NUMA *na ); +LEPT_DLL extern l_ok numaChangeRefcount ( NUMA *na, l_int32 delta ); +LEPT_DLL extern l_ok numaGetParameters ( NUMA *na, l_float32 *pstartx, l_float32 *pdelx ); +LEPT_DLL extern l_ok numaSetParameters ( NUMA *na, l_float32 startx, l_float32 delx ); +LEPT_DLL extern l_ok numaCopyParameters ( NUMA *nad, NUMA *nas ); +LEPT_DLL extern SARRAY * numaConvertToSarray ( NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type ); +LEPT_DLL extern NUMA * numaRead ( const char *filename ); +LEPT_DLL extern NUMA * numaReadStream ( FILE *fp ); +LEPT_DLL extern NUMA * numaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok numaWriteDebug ( const char *filename, NUMA *na ); +LEPT_DLL extern l_ok numaWrite ( const char *filename, NUMA *na ); +LEPT_DLL extern l_ok numaWriteStream ( FILE *fp, NUMA *na ); +LEPT_DLL extern l_ok numaWriteMem ( l_uint8 **pdata, size_t *psize, NUMA *na ); +LEPT_DLL extern NUMAA * numaaCreate ( l_int32 n ); +LEPT_DLL extern NUMAA * numaaCreateFull ( l_int32 nptr, l_int32 n ); +LEPT_DLL extern l_ok numaaTruncate ( NUMAA *naa ); +LEPT_DLL extern void numaaDestroy ( NUMAA **pnaa ); +LEPT_DLL extern l_ok numaaAddNuma ( NUMAA *naa, NUMA *na, l_int32 copyflag ); +LEPT_DLL extern l_int32 numaaGetCount ( NUMAA *naa ); +LEPT_DLL extern l_int32 numaaGetNumaCount ( NUMAA *naa, l_int32 index ); +LEPT_DLL extern l_int32 numaaGetNumberCount ( NUMAA *naa ); +LEPT_DLL extern NUMA ** numaaGetPtrArray ( NUMAA *naa ); +LEPT_DLL extern NUMA * numaaGetNuma ( NUMAA *naa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern l_ok numaaReplaceNuma ( NUMAA *naa, l_int32 index, NUMA *na ); +LEPT_DLL extern l_ok numaaGetValue ( NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival ); +LEPT_DLL extern l_ok numaaAddNumber ( NUMAA *naa, l_int32 index, l_float32 val ); +LEPT_DLL extern NUMAA * numaaRead ( const char *filename ); +LEPT_DLL extern NUMAA * numaaReadStream ( FILE *fp ); +LEPT_DLL extern NUMAA * numaaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok numaaWrite ( const char *filename, NUMAA *naa ); +LEPT_DLL extern l_ok numaaWriteStream ( FILE *fp, NUMAA *naa ); +LEPT_DLL extern l_ok numaaWriteMem ( l_uint8 **pdata, size_t *psize, NUMAA *naa ); +LEPT_DLL extern NUMA * numaArithOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); +LEPT_DLL extern NUMA * numaLogicalOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); +LEPT_DLL extern NUMA * numaInvert ( NUMA *nad, NUMA *nas ); +LEPT_DLL extern l_int32 numaSimilar ( NUMA *na1, NUMA *na2, l_float32 maxdiff, l_int32 *psimilar ); +LEPT_DLL extern l_ok numaAddToNumber ( NUMA *na, l_int32 index, l_float32 val ); +LEPT_DLL extern l_ok numaGetMin ( NUMA *na, l_float32 *pminval, l_int32 *piminloc ); +LEPT_DLL extern l_ok numaGetMax ( NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc ); +LEPT_DLL extern l_ok numaGetSum ( NUMA *na, l_float32 *psum ); +LEPT_DLL extern NUMA * numaGetPartialSums ( NUMA *na ); +LEPT_DLL extern l_ok numaGetSumOnInterval ( NUMA *na, l_int32 first, l_int32 last, l_float32 *psum ); +LEPT_DLL extern l_ok numaHasOnlyIntegers ( NUMA *na, l_int32 maxsamples, l_int32 *pallints ); +LEPT_DLL extern NUMA * numaSubsample ( NUMA *nas, l_int32 subfactor ); +LEPT_DLL extern NUMA * numaMakeDelta ( NUMA *nas ); +LEPT_DLL extern NUMA * numaMakeSequence ( l_float32 startval, l_float32 increment, l_int32 size ); +LEPT_DLL extern NUMA * numaMakeConstant ( l_float32 val, l_int32 size ); +LEPT_DLL extern NUMA * numaMakeAbsValue ( NUMA *nad, NUMA *nas ); +LEPT_DLL extern NUMA * numaAddBorder ( NUMA *nas, l_int32 left, l_int32 right, l_float32 val ); +LEPT_DLL extern NUMA * numaAddSpecifiedBorder ( NUMA *nas, l_int32 left, l_int32 right, l_int32 type ); +LEPT_DLL extern NUMA * numaRemoveBorder ( NUMA *nas, l_int32 left, l_int32 right ); +LEPT_DLL extern l_ok numaCountNonzeroRuns ( NUMA *na, l_int32 *pcount ); +LEPT_DLL extern l_ok numaGetNonzeroRange ( NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast ); +LEPT_DLL extern l_ok numaGetCountRelativeToZero ( NUMA *na, l_int32 type, l_int32 *pcount ); +LEPT_DLL extern NUMA * numaClipToInterval ( NUMA *nas, l_int32 first, l_int32 last ); +LEPT_DLL extern NUMA * numaMakeThresholdIndicator ( NUMA *nas, l_float32 thresh, l_int32 type ); +LEPT_DLL extern NUMA * numaUniformSampling ( NUMA *nas, l_int32 nsamp ); +LEPT_DLL extern NUMA * numaReverse ( NUMA *nad, NUMA *nas ); +LEPT_DLL extern NUMA * numaLowPassIntervals ( NUMA *nas, l_float32 thresh, l_float32 maxn ); +LEPT_DLL extern NUMA * numaThresholdEdges ( NUMA *nas, l_float32 thresh1, l_float32 thresh2, l_float32 maxn ); +LEPT_DLL extern l_int32 numaGetSpanValues ( NUMA *na, l_int32 span, l_int32 *pstart, l_int32 *pend ); +LEPT_DLL extern l_int32 numaGetEdgeValues ( NUMA *na, l_int32 edge, l_int32 *pstart, l_int32 *pend, l_int32 *psign ); +LEPT_DLL extern l_ok numaInterpolateEqxVal ( l_float32 startx, l_float32 deltax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); +LEPT_DLL extern l_ok numaInterpolateArbxVal ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); +LEPT_DLL extern l_ok numaInterpolateEqxInterval ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnax, NUMA **pnay ); +LEPT_DLL extern l_ok numaInterpolateArbxInterval ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); +LEPT_DLL extern l_ok numaFitMax ( NUMA *na, l_float32 *pmaxval, NUMA *naloc, l_float32 *pmaxloc ); +LEPT_DLL extern l_ok numaDifferentiateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); +LEPT_DLL extern l_ok numaIntegrateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, l_float32 *psum ); +LEPT_DLL extern l_ok numaSortGeneral ( NUMA *na, NUMA **pnasort, NUMA **pnaindex, NUMA **pnainvert, l_int32 sortorder, l_int32 sorttype ); +LEPT_DLL extern NUMA * numaSortAutoSelect ( NUMA *nas, l_int32 sortorder ); +LEPT_DLL extern NUMA * numaSortIndexAutoSelect ( NUMA *nas, l_int32 sortorder ); +LEPT_DLL extern l_int32 numaChooseSortType ( NUMA *nas ); +LEPT_DLL extern NUMA * numaSort ( NUMA *naout, NUMA *nain, l_int32 sortorder ); +LEPT_DLL extern NUMA * numaBinSort ( NUMA *nas, l_int32 sortorder ); +LEPT_DLL extern NUMA * numaGetSortIndex ( NUMA *na, l_int32 sortorder ); +LEPT_DLL extern NUMA * numaGetBinSortIndex ( NUMA *nas, l_int32 sortorder ); +LEPT_DLL extern NUMA * numaSortByIndex ( NUMA *nas, NUMA *naindex ); +LEPT_DLL extern l_int32 numaIsSorted ( NUMA *nas, l_int32 sortorder, l_int32 *psorted ); +LEPT_DLL extern l_ok numaSortPair ( NUMA *nax, NUMA *nay, l_int32 sortorder, NUMA **pnasx, NUMA **pnasy ); +LEPT_DLL extern NUMA * numaInvertMap ( NUMA *nas ); +LEPT_DLL extern NUMA * numaPseudorandomSequence ( l_int32 size, l_int32 seed ); +LEPT_DLL extern NUMA * numaRandomPermutation ( NUMA *nas, l_int32 seed ); +LEPT_DLL extern l_ok numaGetRankValue ( NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval ); +LEPT_DLL extern l_ok numaGetMedian ( NUMA *na, l_float32 *pval ); +LEPT_DLL extern l_ok numaGetBinnedMedian ( NUMA *na, l_int32 *pval ); +LEPT_DLL extern l_ok numaGetMeanDevFromMedian ( NUMA *na, l_float32 med, l_float32 *pdev ); +LEPT_DLL extern l_ok numaGetMedianDevFromMedian ( NUMA *na, l_float32 *pmed, l_float32 *pdev ); +LEPT_DLL extern l_ok numaGetMode ( NUMA *na, l_float32 *pval, l_int32 *pcount ); +LEPT_DLL extern l_ok numaJoin ( NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern l_ok numaaJoin ( NUMAA *naad, NUMAA *naas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern NUMA * numaaFlattenToNuma ( NUMAA *naa ); +LEPT_DLL extern NUMA * numaErode ( NUMA *nas, l_int32 size ); +LEPT_DLL extern NUMA * numaDilate ( NUMA *nas, l_int32 size ); +LEPT_DLL extern NUMA * numaOpen ( NUMA *nas, l_int32 size ); +LEPT_DLL extern NUMA * numaClose ( NUMA *nas, l_int32 size ); +LEPT_DLL extern NUMA * numaTransform ( NUMA *nas, l_float32 shift, l_float32 scale ); +LEPT_DLL extern l_ok numaSimpleStats ( NUMA *na, l_int32 first, l_int32 last, l_float32 *pmean, l_float32 *pvar, l_float32 *prvar ); +LEPT_DLL extern l_ok numaWindowedStats ( NUMA *nas, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv ); +LEPT_DLL extern NUMA * numaWindowedMean ( NUMA *nas, l_int32 wc ); +LEPT_DLL extern NUMA * numaWindowedMeanSquare ( NUMA *nas, l_int32 wc ); +LEPT_DLL extern l_ok numaWindowedVariance ( NUMA *nam, NUMA *nams, NUMA **pnav, NUMA **pnarv ); +LEPT_DLL extern NUMA * numaWindowedMedian ( NUMA *nas, l_int32 halfwin ); +LEPT_DLL extern NUMA * numaConvertToInt ( NUMA *nas ); +LEPT_DLL extern NUMA * numaMakeHistogram ( NUMA *na, l_int32 maxbins, l_int32 *pbinsize, l_int32 *pbinstart ); +LEPT_DLL extern NUMA * numaMakeHistogramAuto ( NUMA *na, l_int32 maxbins ); +LEPT_DLL extern NUMA * numaMakeHistogramClipped ( NUMA *na, l_float32 binsize, l_float32 maxsize ); +LEPT_DLL extern NUMA * numaRebinHistogram ( NUMA *nas, l_int32 newsize ); +LEPT_DLL extern NUMA * numaNormalizeHistogram ( NUMA *nas, l_float32 tsum ); +LEPT_DLL extern l_ok numaGetStatsUsingHistogram ( NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto ); +LEPT_DLL extern l_ok numaGetHistogramStats ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); +LEPT_DLL extern l_ok numaGetHistogramStatsOnInterval ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_int32 ifirst, l_int32 ilast, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); +LEPT_DLL extern l_ok numaMakeRankFromHistogram ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 npts, NUMA **pnax, NUMA **pnay ); +LEPT_DLL extern l_ok numaHistogramGetRankFromVal ( NUMA *na, l_float32 rval, l_float32 *prank ); +LEPT_DLL extern l_ok numaHistogramGetValFromRank ( NUMA *na, l_float32 rank, l_float32 *prval ); +LEPT_DLL extern l_ok numaDiscretizeRankAndIntensity ( NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam, NUMA **pnar, NUMA **pnabb ); +LEPT_DLL extern l_ok numaGetRankBinValues ( NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam ); +LEPT_DLL extern l_ok numaSplitDistribution ( NUMA *na, l_float32 scorefract, l_int32 *psplitindex, l_float32 *pave1, l_float32 *pave2, l_float32 *pnum1, l_float32 *pnum2, NUMA **pnascore ); +LEPT_DLL extern l_ok grayHistogramsToEMD ( NUMAA *naa1, NUMAA *naa2, NUMA **pnad ); +LEPT_DLL extern l_ok numaEarthMoverDistance ( NUMA *na1, NUMA *na2, l_float32 *pdist ); +LEPT_DLL extern l_ok grayInterHistogramStats ( NUMAA *naa, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv ); +LEPT_DLL extern NUMA * numaFindPeaks ( NUMA *nas, l_int32 nmax, l_float32 fract1, l_float32 fract2 ); +LEPT_DLL extern NUMA * numaFindExtrema ( NUMA *nas, l_float32 delta, NUMA **pnav ); +LEPT_DLL extern l_ok numaCountReversals ( NUMA *nas, l_float32 minreversal, l_int32 *pnr, l_float32 *prd ); +LEPT_DLL extern l_ok numaSelectCrossingThreshold ( NUMA *nax, NUMA *nay, l_float32 estthresh, l_float32 *pbestthresh ); +LEPT_DLL extern NUMA * numaCrossingsByThreshold ( NUMA *nax, NUMA *nay, l_float32 thresh ); +LEPT_DLL extern NUMA * numaCrossingsByPeaks ( NUMA *nax, NUMA *nay, l_float32 delta ); +LEPT_DLL extern l_ok numaEvalBestHaarParameters ( NUMA *nas, l_float32 relweight, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore ); +LEPT_DLL extern l_ok numaEvalHaarSum ( NUMA *nas, l_float32 width, l_float32 shift, l_float32 relweight, l_float32 *pscore ); +LEPT_DLL extern NUMA * genConstrainedNumaInRange ( l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs ); +LEPT_DLL extern l_ok pixGetRegionsBinary ( PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, PIXA *pixadb ); +LEPT_DLL extern PIX * pixGenHalftoneMask ( PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug ); +LEPT_DLL extern PIX * pixGenerateHalftoneMask ( PIX *pixs, PIX **ppixtext, l_int32 *phtfound, PIXA *pixadb ); +LEPT_DLL extern PIX * pixGenTextlineMask ( PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, PIXA *pixadb ); +LEPT_DLL extern PIX * pixGenTextblockMask ( PIX *pixs, PIX *pixvws, PIXA *pixadb ); +LEPT_DLL extern BOX * pixFindPageForeground ( PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 showmorph, PIXAC *pixac ); +LEPT_DLL extern l_ok pixSplitIntoCharacters ( PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug ); +LEPT_DLL extern BOXA * pixSplitComponentWithProfile ( PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug ); +LEPT_DLL extern PIXA * pixExtractTextlines ( PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 minw, l_int32 minh, l_int32 adjw, l_int32 adjh, PIXA *pixadb ); +LEPT_DLL extern PIXA * pixExtractRawTextlines ( PIX *pixs, l_int32 maxw, l_int32 maxh, l_int32 adjw, l_int32 adjh, PIXA *pixadb ); +LEPT_DLL extern l_ok pixCountTextColumns ( PIX *pixs, l_float32 deltafract, l_float32 peakfract, l_float32 clipfract, l_int32 *pncols, PIXA *pixadb ); +LEPT_DLL extern l_ok pixDecideIfText ( PIX *pixs, BOX *box, l_int32 *pistext, PIXA *pixadb ); +LEPT_DLL extern l_ok pixFindThreshFgExtent ( PIX *pixs, l_int32 thresh, l_int32 *ptop, l_int32 *pbot ); +LEPT_DLL extern l_ok pixDecideIfTable ( PIX *pixs, BOX *box, l_int32 orient, l_int32 *pscore, PIXA *pixadb ); +LEPT_DLL extern PIX * pixPrepare1bpp ( PIX *pixs, BOX *box, l_float32 cropfract, l_int32 outres ); +LEPT_DLL extern l_ok pixEstimateBackground ( PIX *pixs, l_int32 darkthresh, l_float32 edgecrop, l_int32 *pbg ); +LEPT_DLL extern l_ok pixFindLargeRectangles ( PIX *pixs, l_int32 polarity, l_int32 nrect, BOXA **pboxa, PIX **ppixdb ); +LEPT_DLL extern l_ok pixFindLargestRectangle ( PIX *pixs, l_int32 polarity, BOX **pbox, PIX **ppixdb ); +LEPT_DLL extern BOX * pixFindRectangleInCC ( PIX *pixs, BOX *boxs, l_float32 fract, l_int32 dir, l_int32 select, l_int32 debug ); +LEPT_DLL extern l_ok pixSetSelectCmap ( PIX *pixs, BOX *box, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixColorGrayRegionsCmap ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixColorGrayCmap ( PIX *pixs, BOX *box, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixColorGrayMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok addColorizedGrayToCmap ( PIXCMAP *cmap, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval, NUMA **pna ); +LEPT_DLL extern l_ok pixSetSelectMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixSetMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern char * parseForProtos ( const char *filein, const char *prestring ); +LEPT_DLL extern l_ok partifyFiles ( const char *dirname, const char *substr, l_int32 nparts, const char *outroot, const char *debugfile ); +LEPT_DLL extern l_ok partifyPixac ( PIXAC *pixac, l_int32 nparts, const char *outroot, PIXA *pixadb ); +LEPT_DLL extern BOXA * boxaGetWhiteblocks ( BOXA *boxas, BOX *box, l_int32 sortflag, l_int32 maxboxes, l_float32 maxoverlap, l_int32 maxperim, l_float32 fract, l_int32 maxpops ); +LEPT_DLL extern BOXA * boxaPruneSortedOnOverlap ( BOXA *boxas, l_float32 maxoverlap ); +LEPT_DLL extern l_ok convertFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); +LEPT_DLL extern l_ok saConvertFilesToPdf ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); +LEPT_DLL extern l_ok saConvertFilesToPdfData ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok selectDefaultPdfEncoding ( PIX *pix, l_int32 *ptype ); +LEPT_DLL extern l_ok convertUnscaledFilesToPdf ( const char *dirname, const char *substr, const char *title, const char *fileout ); +LEPT_DLL extern l_ok saConvertUnscaledFilesToPdf ( SARRAY *sa, const char *title, const char *fileout ); +LEPT_DLL extern l_ok saConvertUnscaledFilesToPdfData ( SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok convertUnscaledToPdfData ( const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixaConvertToPdf ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); +LEPT_DLL extern l_ok pixaConvertToPdfData ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok convertToPdf ( const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok convertImageDataToPdf ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok convertToPdfData ( const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok convertImageDataToPdfData ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok pixConvertToPdf ( PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok pixWriteStreamPdf ( FILE *fp, PIX *pix, l_int32 res, const char *title ); +LEPT_DLL extern l_ok pixWriteMemPdf ( l_uint8 **pdata, size_t *pnbytes, PIX *pix, l_int32 res, const char *title ); +LEPT_DLL extern l_ok convertSegmentedFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); +LEPT_DLL extern BOXAA * convertNumberedMasksToBoxaa ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost ); +LEPT_DLL extern l_ok convertToPdfSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); +LEPT_DLL extern l_ok pixConvertToPdfSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); +LEPT_DLL extern l_ok convertToPdfDataSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixConvertToPdfDataSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok concatenatePdf ( const char *dirname, const char *substr, const char *fileout ); +LEPT_DLL extern l_ok saConcatenatePdf ( SARRAY *sa, const char *fileout ); +LEPT_DLL extern l_ok ptraConcatenatePdf ( L_PTRA *pa, const char *fileout ); +LEPT_DLL extern l_ok concatenatePdfToData ( const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok saConcatenatePdfToData ( SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixConvertToPdfData ( PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); +LEPT_DLL extern l_ok ptraConcatenatePdfToData ( L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok convertTiffMultipageToPdf ( const char *filein, const char *fileout ); +LEPT_DLL extern l_ok l_generateCIDataForPdf ( const char *fname, PIX *pix, l_int32 quality, L_COMP_DATA **pcid ); +LEPT_DLL extern L_COMP_DATA * l_generateFlateDataPdf ( const char *fname, PIX *pixs ); +LEPT_DLL extern L_COMP_DATA * l_generateJpegData ( const char *fname, l_int32 ascii85flag ); +LEPT_DLL extern L_COMP_DATA * l_generateJpegDataMem ( l_uint8 *data, size_t nbytes, l_int32 ascii85flag ); +LEPT_DLL extern l_ok l_generateCIData ( const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); +LEPT_DLL extern l_ok pixGenerateCIData ( PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); +LEPT_DLL extern L_COMP_DATA * l_generateFlateData ( const char *fname, l_int32 ascii85flag ); +LEPT_DLL extern L_COMP_DATA * l_generateG4Data ( const char *fname, l_int32 ascii85flag ); +LEPT_DLL extern l_ok cidConvertToPdfData ( L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern void l_CIDataDestroy ( L_COMP_DATA **pcid ); +LEPT_DLL extern void l_pdfSetG4ImageMask ( l_int32 flag ); +LEPT_DLL extern void l_pdfSetDateAndVersion ( l_int32 flag ); +LEPT_DLL extern void setPixMemoryManager ( alloc_fn allocator, dealloc_fn deallocator ); +LEPT_DLL extern PIX * pixCreate ( l_int32 width, l_int32 height, l_int32 depth ); +LEPT_DLL extern PIX * pixCreateNoInit ( l_int32 width, l_int32 height, l_int32 depth ); +LEPT_DLL extern PIX * pixCreateTemplate ( const PIX *pixs ); +LEPT_DLL extern PIX * pixCreateTemplateNoInit ( const PIX *pixs ); +LEPT_DLL extern PIX * pixCreateHeader ( l_int32 width, l_int32 height, l_int32 depth ); +LEPT_DLL extern PIX * pixClone ( PIX *pixs ); +LEPT_DLL extern void pixDestroy ( PIX **ppix ); +LEPT_DLL extern PIX * pixCopy ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_ok pixResizeImageData ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_ok pixCopyColormap ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_int32 pixSizesEqual ( const PIX *pix1, const PIX *pix2 ); +LEPT_DLL extern l_ok pixTransferAllData ( PIX *pixd, PIX **ppixs, l_int32 copytext, l_int32 copyformat ); +LEPT_DLL extern l_ok pixSwapAndDestroy ( PIX **ppixd, PIX **ppixs ); +LEPT_DLL extern l_int32 pixGetWidth ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetWidth ( PIX *pix, l_int32 width ); +LEPT_DLL extern l_int32 pixGetHeight ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetHeight ( PIX *pix, l_int32 height ); +LEPT_DLL extern l_int32 pixGetDepth ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetDepth ( PIX *pix, l_int32 depth ); +LEPT_DLL extern l_ok pixGetDimensions ( const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd ); +LEPT_DLL extern l_ok pixSetDimensions ( PIX *pix, l_int32 w, l_int32 h, l_int32 d ); +LEPT_DLL extern l_ok pixCopyDimensions ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_int32 pixGetSpp ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetSpp ( PIX *pix, l_int32 spp ); +LEPT_DLL extern l_ok pixCopySpp ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_int32 pixGetWpl ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetWpl ( PIX *pix, l_int32 wpl ); +LEPT_DLL extern l_int32 pixGetRefcount ( const PIX *pix ); +LEPT_DLL extern l_int32 pixChangeRefcount ( PIX *pix, l_int32 delta ); +LEPT_DLL extern l_int32 pixGetXRes ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetXRes ( PIX *pix, l_int32 res ); +LEPT_DLL extern l_int32 pixGetYRes ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetYRes ( PIX *pix, l_int32 res ); +LEPT_DLL extern l_ok pixGetResolution ( const PIX *pix, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok pixSetResolution ( PIX *pix, l_int32 xres, l_int32 yres ); +LEPT_DLL extern l_int32 pixCopyResolution ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_int32 pixScaleResolution ( PIX *pix, l_float32 xscale, l_float32 yscale ); +LEPT_DLL extern l_int32 pixGetInputFormat ( const PIX *pix ); +LEPT_DLL extern l_int32 pixSetInputFormat ( PIX *pix, l_int32 informat ); +LEPT_DLL extern l_int32 pixCopyInputFormat ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern l_int32 pixSetSpecial ( PIX *pix, l_int32 special ); +LEPT_DLL extern char * pixGetText ( PIX *pix ); +LEPT_DLL extern l_ok pixSetText ( PIX *pix, const char *textstring ); +LEPT_DLL extern l_ok pixAddText ( PIX *pix, const char *textstring ); +LEPT_DLL extern l_int32 pixCopyText ( PIX *pixd, const PIX *pixs ); +LEPT_DLL extern PIXCMAP * pixGetColormap ( PIX *pix ); +LEPT_DLL extern l_ok pixSetColormap ( PIX *pix, PIXCMAP *colormap ); +LEPT_DLL extern l_ok pixDestroyColormap ( PIX *pix ); +LEPT_DLL extern l_uint32 * pixGetData ( PIX *pix ); +LEPT_DLL extern l_int32 pixSetData ( PIX *pix, l_uint32 *data ); +LEPT_DLL extern l_uint32 * pixExtractData ( PIX *pixs ); +LEPT_DLL extern l_int32 pixFreeData ( PIX *pix ); +LEPT_DLL extern void ** pixGetLinePtrs ( PIX *pix, l_int32 *psize ); +LEPT_DLL extern l_ok pixPrintStreamInfo ( FILE *fp, const PIX *pix, const char *text ); +LEPT_DLL extern l_ok pixGetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval ); +LEPT_DLL extern l_ok pixSetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 val ); +LEPT_DLL extern l_ok pixGetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern l_ok pixSetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); +LEPT_DLL extern l_ok pixGetRandomPixel ( PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py ); +LEPT_DLL extern l_ok pixClearPixel ( PIX *pix, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixFlipPixel ( PIX *pix, l_int32 x, l_int32 y ); +LEPT_DLL extern void setPixelLow ( l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val ); +LEPT_DLL extern l_ok pixGetBlackOrWhiteVal ( PIX *pixs, l_int32 op, l_uint32 *pval ); +LEPT_DLL extern l_ok pixClearAll ( PIX *pix ); +LEPT_DLL extern l_ok pixSetAll ( PIX *pix ); +LEPT_DLL extern l_ok pixSetAllGray ( PIX *pix, l_int32 grayval ); +LEPT_DLL extern l_ok pixSetAllArbitrary ( PIX *pix, l_uint32 val ); +LEPT_DLL extern l_ok pixSetBlackOrWhite ( PIX *pixs, l_int32 op ); +LEPT_DLL extern l_ok pixSetComponentArbitrary ( PIX *pix, l_int32 comp, l_int32 val ); +LEPT_DLL extern l_ok pixClearInRect ( PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixSetInRect ( PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixSetInRectArbitrary ( PIX *pix, BOX *box, l_uint32 val ); +LEPT_DLL extern l_ok pixBlendInRect ( PIX *pixs, BOX *box, l_uint32 val, l_float32 fract ); +LEPT_DLL extern l_ok pixSetPadBits ( PIX *pix, l_int32 val ); +LEPT_DLL extern l_ok pixSetPadBitsBand ( PIX *pix, l_int32 by, l_int32 bh, l_int32 val ); +LEPT_DLL extern l_ok pixSetOrClearBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); +LEPT_DLL extern l_ok pixSetBorderVal ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); +LEPT_DLL extern l_ok pixSetBorderRingVal ( PIX *pixs, l_int32 dist, l_uint32 val ); +LEPT_DLL extern l_ok pixSetMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixCopyBorder ( PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixAddBorder ( PIX *pixs, l_int32 npix, l_uint32 val ); +LEPT_DLL extern PIX * pixAddBlackOrWhiteBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); +LEPT_DLL extern PIX * pixAddBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); +LEPT_DLL extern PIX * pixRemoveBorder ( PIX *pixs, l_int32 npix ); +LEPT_DLL extern PIX * pixRemoveBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixRemoveBorderToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIX * pixAddMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixAddRepeatedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixAddMixedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern PIX * pixAddContinuedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); +LEPT_DLL extern l_ok pixShiftAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty ); +LEPT_DLL extern PIX * pixDisplayLayersRGBA ( PIX *pixs, l_uint32 val, l_int32 maxw ); +LEPT_DLL extern PIX * pixCreateRGBImage ( PIX *pixr, PIX *pixg, PIX *pixb ); +LEPT_DLL extern PIX * pixGetRGBComponent ( PIX *pixs, l_int32 comp ); +LEPT_DLL extern l_ok pixSetRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); +LEPT_DLL extern PIX * pixGetRGBComponentCmap ( PIX *pixs, l_int32 comp ); +LEPT_DLL extern l_ok pixCopyRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); +LEPT_DLL extern l_ok composeRGBPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel ); +LEPT_DLL extern l_ok composeRGBAPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel ); +LEPT_DLL extern void extractRGBValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); +LEPT_DLL extern void extractRGBAValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); +LEPT_DLL extern l_int32 extractMinMaxComponent ( l_uint32 pixel, l_int32 type ); +LEPT_DLL extern l_ok pixGetRGBLine ( PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb ); +LEPT_DLL extern PIX * pixEndianByteSwapNew ( PIX *pixs ); +LEPT_DLL extern l_ok pixEndianByteSwap ( PIX *pixs ); +LEPT_DLL extern l_int32 lineEndianByteSwap ( l_uint32 *datad, l_uint32 *datas, l_int32 wpl ); +LEPT_DLL extern PIX * pixEndianTwoByteSwapNew ( PIX *pixs ); +LEPT_DLL extern l_ok pixEndianTwoByteSwap ( PIX *pixs ); +LEPT_DLL extern l_ok pixGetRasterData ( PIX *pixs, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixAlphaIsOpaque ( PIX *pix, l_int32 *popaque ); +LEPT_DLL extern l_uint8 ** pixSetupByteProcessing ( PIX *pix, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok pixCleanupByteProcessing ( PIX *pix, l_uint8 **lineptrs ); +LEPT_DLL extern void l_setAlphaMaskBorder ( l_float32 val1, l_float32 val2 ); +LEPT_DLL extern l_ok pixSetMasked ( PIX *pixd, PIX *pixm, l_uint32 val ); +LEPT_DLL extern l_ok pixSetMaskedGeneral ( PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixCombineMasked ( PIX *pixd, PIX *pixs, PIX *pixm ); +LEPT_DLL extern l_ok pixCombineMaskedGeneral ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixPaintThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val ); +LEPT_DLL extern PIX * pixCopyWithBoxa ( PIX *pixs, BOXA *boxa, l_int32 background ); +LEPT_DLL extern l_ok pixPaintSelfThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 searchdir, l_int32 mindist, l_int32 tilesize, l_int32 ntiles, l_int32 distblend ); +LEPT_DLL extern PIX * pixMakeMaskFromVal ( PIX *pixs, l_int32 val ); +LEPT_DLL extern PIX * pixMakeMaskFromLUT ( PIX *pixs, l_int32 *tab ); +LEPT_DLL extern PIX * pixMakeArbMaskFromRGB ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_float32 thresh ); +LEPT_DLL extern PIX * pixSetUnderTransparency ( PIX *pixs, l_uint32 val, l_int32 debug ); +LEPT_DLL extern PIX * pixMakeAlphaFromMask ( PIX *pixs, l_int32 dist, BOX **pbox ); +LEPT_DLL extern l_ok pixGetColorNearMaskBoundary ( PIX *pixs, PIX *pixm, BOX *box, l_int32 dist, l_uint32 *pval, l_int32 debug ); +LEPT_DLL extern PIX * pixInvert ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixOr ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixAnd ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixXor ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixSubtract ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern l_ok pixZero ( PIX *pix, l_int32 *pempty ); +LEPT_DLL extern l_ok pixForegroundFraction ( PIX *pix, l_float32 *pfract ); +LEPT_DLL extern NUMA * pixaCountPixels ( PIXA *pixa ); +LEPT_DLL extern l_ok pixCountPixels ( PIX *pixs, l_int32 *pcount, l_int32 *tab8 ); +LEPT_DLL extern l_ok pixCountPixelsInRect ( PIX *pixs, BOX *box, l_int32 *pcount, l_int32 *tab8 ); +LEPT_DLL extern NUMA * pixCountByRow ( PIX *pix, BOX *box ); +LEPT_DLL extern NUMA * pixCountByColumn ( PIX *pix, BOX *box ); +LEPT_DLL extern NUMA * pixCountPixelsByRow ( PIX *pix, l_int32 *tab8 ); +LEPT_DLL extern NUMA * pixCountPixelsByColumn ( PIX *pix ); +LEPT_DLL extern l_ok pixCountPixelsInRow ( PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8 ); +LEPT_DLL extern NUMA * pixGetMomentByColumn ( PIX *pix, l_int32 order ); +LEPT_DLL extern l_ok pixThresholdPixelSum ( PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8 ); +LEPT_DLL extern l_int32 * makePixelSumTab8 ( void ); +LEPT_DLL extern l_int32 * makePixelCentroidTab8 ( void ); +LEPT_DLL extern NUMA * pixAverageByRow ( PIX *pix, BOX *box, l_int32 type ); +LEPT_DLL extern NUMA * pixAverageByColumn ( PIX *pix, BOX *box, l_int32 type ); +LEPT_DLL extern l_ok pixAverageInRect ( PIX *pix, BOX *box, l_float32 *pave ); +LEPT_DLL extern NUMA * pixVarianceByRow ( PIX *pix, BOX *box ); +LEPT_DLL extern NUMA * pixVarianceByColumn ( PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixVarianceInRect ( PIX *pix, BOX *box, l_float32 *prootvar ); +LEPT_DLL extern NUMA * pixAbsDiffByRow ( PIX *pix, BOX *box ); +LEPT_DLL extern NUMA * pixAbsDiffByColumn ( PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixAbsDiffInRect ( PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff ); +LEPT_DLL extern l_ok pixAbsDiffOnLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff ); +LEPT_DLL extern l_int32 pixCountArbInRect ( PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount ); +LEPT_DLL extern PIX * pixMirroredTiling ( PIX *pixs, l_int32 w, l_int32 h ); +LEPT_DLL extern l_ok pixFindRepCloseTile ( PIX *pixs, BOX *box, l_int32 searchdir, l_int32 mindist, l_int32 tsize, l_int32 ntiles, BOX **pboxtile, l_int32 debug ); +LEPT_DLL extern NUMA * pixGetGrayHistogram ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern NUMA * pixGetGrayHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); +LEPT_DLL extern NUMA * pixGetGrayHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); +LEPT_DLL extern NUMAA * pixGetGrayHistogramTiled ( PIX *pixs, l_int32 factor, l_int32 nx, l_int32 ny ); +LEPT_DLL extern l_ok pixGetColorHistogram ( PIX *pixs, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); +LEPT_DLL extern l_ok pixGetColorHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); +LEPT_DLL extern NUMA * pixGetCmapHistogram ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern NUMA * pixGetCmapHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); +LEPT_DLL extern NUMA * pixGetCmapHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); +LEPT_DLL extern l_int32 pixCountRGBColors ( PIX *pixs ); +LEPT_DLL extern L_AMAP * pixGetColorAmapHistogram ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern l_int32 amapGetCountForColor ( L_AMAP *amap, l_uint32 val ); +LEPT_DLL extern l_ok pixGetRankValue ( PIX *pixs, l_int32 factor, l_float32 rank, l_uint32 *pvalue ); +LEPT_DLL extern l_ok pixGetRankValueMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); +LEPT_DLL extern l_ok pixGetRankValueMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna ); +LEPT_DLL extern l_ok pixGetPixelAverage ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_uint32 *pval ); +LEPT_DLL extern l_ok pixGetPixelStats ( PIX *pixs, l_int32 factor, l_int32 type, l_uint32 *pvalue ); +LEPT_DLL extern l_ok pixGetAverageMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); +LEPT_DLL extern l_ok pixGetAverageMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval ); +LEPT_DLL extern l_ok pixGetAverageTiledRGB ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixr, PIX **ppixg, PIX **ppixb ); +LEPT_DLL extern PIX * pixGetAverageTiled ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type ); +LEPT_DLL extern l_int32 pixRowStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); +LEPT_DLL extern l_int32 pixColumnStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); +LEPT_DLL extern l_ok pixGetRangeValues ( PIX *pixs, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval ); +LEPT_DLL extern l_ok pixGetExtremeValue ( PIX *pixs, l_int32 factor, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *pgrayval ); +LEPT_DLL extern l_ok pixGetMaxValueInRect ( PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax ); +LEPT_DLL extern l_ok pixGetBinnedComponentRange ( PIX *pixs, l_int32 nbins, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval, l_uint32 **pcarray, l_int32 fontsize ); +LEPT_DLL extern l_ok pixGetRankColorArray ( PIX *pixs, l_int32 nbins, l_int32 type, l_int32 factor, l_uint32 **pcarray, l_int32 debugflag, l_int32 fontsize ); +LEPT_DLL extern l_ok pixGetBinnedColor ( PIX *pixs, PIX *pixg, l_int32 factor, l_int32 nbins, NUMA *nalut, l_uint32 **pcarray, l_int32 debugflag ); +LEPT_DLL extern PIX * pixDisplayColorArray ( l_uint32 *carray, l_int32 ncolors, l_int32 side, l_int32 ncols, l_int32 fontsize ); +LEPT_DLL extern PIX * pixRankBinByStrip ( PIX *pixs, l_int32 direction, l_int32 size, l_int32 nbins, l_int32 type ); +LEPT_DLL extern PIX * pixaGetAlignedStats ( PIXA *pixa, l_int32 type, l_int32 nbins, l_int32 thresh ); +LEPT_DLL extern l_ok pixaExtractColumnFromEachPix ( PIXA *pixa, l_int32 col, PIX *pixd ); +LEPT_DLL extern l_ok pixGetRowStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *colvect ); +LEPT_DLL extern l_ok pixGetColumnStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *rowvect ); +LEPT_DLL extern l_ok pixSetPixelColumn ( PIX *pix, l_int32 col, l_float32 *colvect ); +LEPT_DLL extern l_ok pixThresholdForFgBg ( PIX *pixs, l_int32 factor, l_int32 thresh, l_int32 *pfgval, l_int32 *pbgval ); +LEPT_DLL extern l_ok pixSplitDistributionFgBg ( PIX *pixs, l_float32 scorefract, l_int32 factor, l_int32 *pthresh, l_int32 *pfgval, l_int32 *pbgval, PIX **ppixdb ); +LEPT_DLL extern l_ok pixaFindDimensions ( PIXA *pixa, NUMA **pnaw, NUMA **pnah ); +LEPT_DLL extern l_ok pixFindAreaPerimRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); +LEPT_DLL extern NUMA * pixaFindPerimToAreaRatio ( PIXA *pixa ); +LEPT_DLL extern l_ok pixFindPerimToAreaRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); +LEPT_DLL extern NUMA * pixaFindPerimSizeRatio ( PIXA *pixa ); +LEPT_DLL extern l_ok pixFindPerimSizeRatio ( PIX *pixs, l_int32 *tab, l_float32 *pratio ); +LEPT_DLL extern NUMA * pixaFindAreaFraction ( PIXA *pixa ); +LEPT_DLL extern l_ok pixFindAreaFraction ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); +LEPT_DLL extern NUMA * pixaFindAreaFractionMasked ( PIXA *pixa, PIX *pixm, l_int32 debug ); +LEPT_DLL extern l_ok pixFindAreaFractionMasked ( PIX *pixs, BOX *box, PIX *pixm, l_int32 *tab, l_float32 *pfract ); +LEPT_DLL extern NUMA * pixaFindWidthHeightRatio ( PIXA *pixa ); +LEPT_DLL extern NUMA * pixaFindWidthHeightProduct ( PIXA *pixa ); +LEPT_DLL extern l_ok pixFindOverlapFraction ( PIX *pixs1, PIX *pixs2, l_int32 x2, l_int32 y2, l_int32 *tab, l_float32 *pratio, l_int32 *pnoverlap ); +LEPT_DLL extern BOXA * pixFindRectangleComps ( PIX *pixs, l_int32 dist, l_int32 minw, l_int32 minh ); +LEPT_DLL extern l_ok pixConformsToRectangle ( PIX *pixs, BOX *box, l_int32 dist, l_int32 *pconforms ); +LEPT_DLL extern PIXA * pixClipRectangles ( PIX *pixs, BOXA *boxa ); +LEPT_DLL extern PIX * pixClipRectangle ( PIX *pixs, BOX *box, BOX **pboxc ); +LEPT_DLL extern PIX * pixClipMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_uint32 outval ); +LEPT_DLL extern l_ok pixCropToMatch ( PIX *pixs1, PIX *pixs2, PIX **ppixd1, PIX **ppixd2 ); +LEPT_DLL extern PIX * pixCropToSize ( PIX *pixs, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixResizeToMatch ( PIX *pixs, PIX *pixt, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixSelectComponentBySize ( PIX *pixs, l_int32 rankorder, l_int32 type, l_int32 connectivity, BOX **pbox ); +LEPT_DLL extern PIX * pixFilterComponentBySize ( PIX *pixs, l_int32 rankorder, l_int32 type, l_int32 connectivity, BOX **pbox ); +LEPT_DLL extern PIX * pixMakeSymmetricMask ( l_int32 w, l_int32 h, l_float32 hf, l_float32 vf, l_int32 type ); +LEPT_DLL extern PIX * pixMakeFrameMask ( l_int32 w, l_int32 h, l_float32 hf1, l_float32 hf2, l_float32 vf1, l_float32 vf2 ); +LEPT_DLL extern PIX * pixMakeCoveringOfRectangles ( PIX *pixs, l_int32 maxiters ); +LEPT_DLL extern l_ok pixFractionFgInMask ( PIX *pix1, PIX *pix2, l_float32 *pfract ); +LEPT_DLL extern l_ok pixClipToForeground ( PIX *pixs, PIX **ppixd, BOX **pbox ); +LEPT_DLL extern l_ok pixTestClipToForeground ( PIX *pixs, l_int32 *pcanclip ); +LEPT_DLL extern l_ok pixClipBoxToForeground ( PIX *pixs, BOX *boxs, PIX **ppixd, BOX **pboxd ); +LEPT_DLL extern l_ok pixScanForForeground ( PIX *pixs, BOX *box, l_int32 scanflag, l_int32 *ploc ); +LEPT_DLL extern l_ok pixClipBoxToEdges ( PIX *pixs, BOX *boxs, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, PIX **ppixd, BOX **pboxd ); +LEPT_DLL extern l_ok pixScanForEdge ( PIX *pixs, BOX *box, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, l_int32 scanflag, l_int32 *ploc ); +LEPT_DLL extern NUMA * pixExtractOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); +LEPT_DLL extern l_float32 pixAverageOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); +LEPT_DLL extern NUMA * pixAverageIntensityProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 factor1, l_int32 factor2 ); +LEPT_DLL extern NUMA * pixReversalProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 minreversal, l_int32 factor1, l_int32 factor2 ); +LEPT_DLL extern l_ok pixWindowedVarianceOnLine ( PIX *pixs, l_int32 dir, l_int32 loc, l_int32 c1, l_int32 c2, l_int32 size, NUMA **pnad ); +LEPT_DLL extern l_ok pixMinMaxNearLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 dist, l_int32 direction, NUMA **pnamin, NUMA **pnamax, l_float32 *pminave, l_float32 *pmaxave ); +LEPT_DLL extern PIX * pixRankRowTransform ( PIX *pixs ); +LEPT_DLL extern PIX * pixRankColumnTransform ( PIX *pixs ); +LEPT_DLL extern PIXA * pixaCreate ( l_int32 n ); +LEPT_DLL extern PIXA * pixaCreateFromPix ( PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh ); +LEPT_DLL extern PIXA * pixaCreateFromBoxa ( PIX *pixs, BOXA *boxa, l_int32 start, l_int32 num, l_int32 *pcropwarn ); +LEPT_DLL extern PIXA * pixaSplitPix ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); +LEPT_DLL extern void pixaDestroy ( PIXA **ppixa ); +LEPT_DLL extern PIXA * pixaCopy ( PIXA *pixa, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaAddPix ( PIXA *pixa, PIX *pix, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaAddBox ( PIXA *pixa, BOX *box, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaExtendArrayToSize ( PIXA *pixa, l_int32 size ); +LEPT_DLL extern l_int32 pixaGetCount ( PIXA *pixa ); +LEPT_DLL extern l_ok pixaChangeRefcount ( PIXA *pixa, l_int32 delta ); +LEPT_DLL extern PIX * pixaGetPix ( PIXA *pixa, l_int32 index, l_int32 accesstype ); +LEPT_DLL extern l_ok pixaGetPixDimensions ( PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); +LEPT_DLL extern BOXA * pixaGetBoxa ( PIXA *pixa, l_int32 accesstype ); +LEPT_DLL extern l_int32 pixaGetBoxaCount ( PIXA *pixa ); +LEPT_DLL extern BOX * pixaGetBox ( PIXA *pixa, l_int32 index, l_int32 accesstype ); +LEPT_DLL extern l_ok pixaGetBoxGeometry ( PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_ok pixaSetBoxa ( PIXA *pixa, BOXA *boxa, l_int32 accesstype ); +LEPT_DLL extern PIX ** pixaGetPixArray ( PIXA *pixa ); +LEPT_DLL extern l_ok pixaVerifyDepth ( PIXA *pixa, l_int32 *psame, l_int32 *pmaxd ); +LEPT_DLL extern l_ok pixaVerifyDimensions ( PIXA *pixa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern l_ok pixaIsFull ( PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba ); +LEPT_DLL extern l_ok pixaCountText ( PIXA *pixa, l_int32 *pntext ); +LEPT_DLL extern l_ok pixaSetText ( PIXA *pixa, const char *text, SARRAY *sa ); +LEPT_DLL extern void *** pixaGetLinePtrs ( PIXA *pixa, l_int32 *psize ); +LEPT_DLL extern l_ok pixaWriteStreamInfo ( FILE *fp, PIXA *pixa ); +LEPT_DLL extern l_ok pixaReplacePix ( PIXA *pixa, l_int32 index, PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixaInsertPix ( PIXA *pixa, l_int32 index, PIX *pixs, BOX *box ); +LEPT_DLL extern l_ok pixaRemovePix ( PIXA *pixa, l_int32 index ); +LEPT_DLL extern l_ok pixaRemovePixAndSave ( PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox ); +LEPT_DLL extern l_ok pixaRemoveSelected ( PIXA *pixa, NUMA *naindex ); +LEPT_DLL extern l_ok pixaInitFull ( PIXA *pixa, PIX *pix, BOX *box ); +LEPT_DLL extern l_ok pixaClear ( PIXA *pixa ); +LEPT_DLL extern l_ok pixaJoin ( PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern PIXA * pixaInterleave ( PIXA *pixa1, PIXA *pixa2, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaaJoin ( PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern PIXAA * pixaaCreate ( l_int32 n ); +LEPT_DLL extern PIXAA * pixaaCreateFromPixa ( PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag ); +LEPT_DLL extern void pixaaDestroy ( PIXAA **ppaa ); +LEPT_DLL extern l_ok pixaaAddPixa ( PIXAA *paa, PIXA *pixa, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaaExtendArray ( PIXAA *paa ); +LEPT_DLL extern l_ok pixaaAddPix ( PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaaAddBox ( PIXAA *paa, BOX *box, l_int32 copyflag ); +LEPT_DLL extern l_int32 pixaaGetCount ( PIXAA *paa, NUMA **pna ); +LEPT_DLL extern PIXA * pixaaGetPixa ( PIXAA *paa, l_int32 index, l_int32 accesstype ); +LEPT_DLL extern BOXA * pixaaGetBoxa ( PIXAA *paa, l_int32 accesstype ); +LEPT_DLL extern PIX * pixaaGetPix ( PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag ); +LEPT_DLL extern l_ok pixaaVerifyDepth ( PIXAA *paa, l_int32 *psame, l_int32 *pmaxd ); +LEPT_DLL extern l_ok pixaaVerifyDimensions ( PIXAA *paa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern l_int32 pixaaIsFull ( PIXAA *paa, l_int32 *pfull ); +LEPT_DLL extern l_ok pixaaInitFull ( PIXAA *paa, PIXA *pixa ); +LEPT_DLL extern l_ok pixaaReplacePixa ( PIXAA *paa, l_int32 index, PIXA *pixa ); +LEPT_DLL extern l_ok pixaaClear ( PIXAA *paa ); +LEPT_DLL extern l_ok pixaaTruncate ( PIXAA *paa ); +LEPT_DLL extern PIXA * pixaRead ( const char *filename ); +LEPT_DLL extern PIXA * pixaReadStream ( FILE *fp ); +LEPT_DLL extern PIXA * pixaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixaWriteDebug ( const char *fname, PIXA *pixa ); +LEPT_DLL extern l_ok pixaWrite ( const char *filename, PIXA *pixa ); +LEPT_DLL extern l_ok pixaWriteStream ( FILE *fp, PIXA *pixa ); +LEPT_DLL extern l_ok pixaWriteMem ( l_uint8 **pdata, size_t *psize, PIXA *pixa ); +LEPT_DLL extern PIXA * pixaReadBoth ( const char *filename ); +LEPT_DLL extern PIXAA * pixaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); +LEPT_DLL extern PIXAA * pixaaRead ( const char *filename ); +LEPT_DLL extern PIXAA * pixaaReadStream ( FILE *fp ); +LEPT_DLL extern PIXAA * pixaaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixaaWrite ( const char *filename, PIXAA *paa ); +LEPT_DLL extern l_ok pixaaWriteStream ( FILE *fp, PIXAA *paa ); +LEPT_DLL extern l_ok pixaaWriteMem ( l_uint8 **pdata, size_t *psize, PIXAA *paa ); +LEPT_DLL extern PIXACC * pixaccCreate ( l_int32 w, l_int32 h, l_int32 negflag ); +LEPT_DLL extern PIXACC * pixaccCreateFromPix ( PIX *pix, l_int32 negflag ); +LEPT_DLL extern void pixaccDestroy ( PIXACC **ppixacc ); +LEPT_DLL extern PIX * pixaccFinal ( PIXACC *pixacc, l_int32 outdepth ); +LEPT_DLL extern PIX * pixaccGetPix ( PIXACC *pixacc ); +LEPT_DLL extern l_int32 pixaccGetOffset ( PIXACC *pixacc ); +LEPT_DLL extern l_ok pixaccAdd ( PIXACC *pixacc, PIX *pix ); +LEPT_DLL extern l_ok pixaccSubtract ( PIXACC *pixacc, PIX *pix ); +LEPT_DLL extern l_ok pixaccMultConst ( PIXACC *pixacc, l_float32 factor ); +LEPT_DLL extern l_ok pixaccMultConstAccumulate ( PIXACC *pixacc, PIX *pix, l_float32 factor ); +LEPT_DLL extern PIX * pixSelectBySize ( PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectBySize ( PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); +LEPT_DLL extern NUMA * pixaMakeSizeIndicator ( PIXA *pixa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); +LEPT_DLL extern PIX * pixSelectByPerimToAreaRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectByPerimToAreaRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIX * pixSelectByPerimSizeRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectByPerimSizeRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIX * pixSelectByAreaFraction ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectByAreaFraction ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIX * pixSelectByWidthHeightRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectByWidthHeightRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectByNumConnComp ( PIXA *pixas, l_int32 nmin, l_int32 nmax, l_int32 connectivity, l_int32 *pchanged ); +LEPT_DLL extern PIXA * pixaSelectWithIndicator ( PIXA *pixas, NUMA *na, l_int32 *pchanged ); +LEPT_DLL extern l_ok pixRemoveWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); +LEPT_DLL extern l_ok pixAddWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); +LEPT_DLL extern PIXA * pixaSelectWithString ( PIXA *pixas, const char *str, l_int32 *perror ); +LEPT_DLL extern PIX * pixaRenderComponent ( PIX *pixs, PIXA *pixa, l_int32 index ); +LEPT_DLL extern PIXA * pixaSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); +LEPT_DLL extern PIXA * pixaBinSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); +LEPT_DLL extern PIXA * pixaSortByIndex ( PIXA *pixas, NUMA *naindex, l_int32 copyflag ); +LEPT_DLL extern PIXAA * pixaSort2dByIndex ( PIXA *pixas, NUMAA *naa, l_int32 copyflag ); +LEPT_DLL extern PIXA * pixaSelectRange ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag ); +LEPT_DLL extern PIXAA * pixaaSelectRange ( PIXAA *paas, l_int32 first, l_int32 last, l_int32 copyflag ); +LEPT_DLL extern PIXAA * pixaaScaleToSize ( PIXAA *paas, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIXAA * pixaaScaleToSizeVar ( PIXAA *paas, NUMA *nawd, NUMA *nahd ); +LEPT_DLL extern PIXA * pixaScaleToSize ( PIXA *pixas, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIXA * pixaScaleToSizeRel ( PIXA *pixas, l_int32 delw, l_int32 delh ); +LEPT_DLL extern PIXA * pixaScale ( PIXA *pixas, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIXA * pixaScaleBySampling ( PIXA *pixas, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIXA * pixaRotate ( PIXA *pixas, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height ); +LEPT_DLL extern PIXA * pixaRotateOrth ( PIXA *pixas, l_int32 rotation ); +LEPT_DLL extern PIXA * pixaTranslate ( PIXA *pixas, l_int32 hshift, l_int32 vshift, l_int32 incolor ); +LEPT_DLL extern PIXA * pixaAddBorderGeneral ( PIXA *pixad, PIXA *pixas, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); +LEPT_DLL extern PIXA * pixaaFlattenToPixa ( PIXAA *paa, NUMA **pnaindex, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaaSizeRange ( PIXAA *paa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern l_ok pixaSizeRange ( PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); +LEPT_DLL extern PIXA * pixaClipToPix ( PIXA *pixas, PIX *pixs ); +LEPT_DLL extern l_ok pixaClipToForeground ( PIXA *pixas, PIXA **ppixad, BOXA **pboxa ); +LEPT_DLL extern l_ok pixaGetRenderingDepth ( PIXA *pixa, l_int32 *pdepth ); +LEPT_DLL extern l_ok pixaHasColor ( PIXA *pixa, l_int32 *phascolor ); +LEPT_DLL extern l_ok pixaAnyColormaps ( PIXA *pixa, l_int32 *phascmap ); +LEPT_DLL extern l_ok pixaGetDepthInfo ( PIXA *pixa, l_int32 *pmaxdepth, l_int32 *psame ); +LEPT_DLL extern PIXA * pixaConvertToSameDepth ( PIXA *pixas ); +LEPT_DLL extern l_ok pixaEqual ( PIXA *pixa1, PIXA *pixa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); +LEPT_DLL extern l_ok pixaSetFullSizeBoxa ( PIXA *pixa ); +LEPT_DLL extern PIX * pixaDisplay ( PIXA *pixa, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixaDisplayOnColor ( PIXA *pixa, l_int32 w, l_int32 h, l_uint32 bgcolor ); +LEPT_DLL extern PIX * pixaDisplayRandomCmap ( PIXA *pixa, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixaDisplayLinearly ( PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, BOXA **pboxa ); +LEPT_DLL extern PIX * pixaDisplayOnLattice ( PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa ); +LEPT_DLL extern PIX * pixaDisplayUnsplit ( PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); +LEPT_DLL extern PIX * pixaDisplayTiled ( PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing ); +LEPT_DLL extern PIX * pixaDisplayTiledInRows ( PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border ); +LEPT_DLL extern PIX * pixaDisplayTiledInColumns ( PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border ); +LEPT_DLL extern PIX * pixaDisplayTiledAndScaled ( PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); +LEPT_DLL extern PIX * pixaDisplayTiledWithText ( PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor ); +LEPT_DLL extern PIX * pixaDisplayTiledByIndex ( PIXA *pixa, NUMA *na, l_int32 width, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor ); +LEPT_DLL extern PIX * pixaaDisplay ( PIXAA *paa, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixaaDisplayByPixa ( PIXAA *paa, l_int32 xspace, l_int32 yspace, l_int32 maxw ); +LEPT_DLL extern PIXA * pixaaDisplayTiledAndScaled ( PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); +LEPT_DLL extern PIXA * pixaConvertTo1 ( PIXA *pixas, l_int32 thresh ); +LEPT_DLL extern PIXA * pixaConvertTo8 ( PIXA *pixas, l_int32 cmapflag ); +LEPT_DLL extern PIXA * pixaConvertTo8Colormap ( PIXA *pixas, l_int32 dither ); +LEPT_DLL extern PIXA * pixaConvertTo32 ( PIXA *pixas ); +LEPT_DLL extern PIXA * pixaConstrainedSelect ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs, l_int32 copyflag ); +LEPT_DLL extern l_ok pixaSelectToPdf ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, l_uint32 color, l_int32 fontsize, const char *fileout ); +LEPT_DLL extern PIXA * pixaMakeFromTiledPixa ( PIXA *pixas, l_int32 w, l_int32 h, l_int32 nsamp ); +LEPT_DLL extern PIXA * pixaMakeFromTiledPix ( PIX *pixs, l_int32 w, l_int32 h, l_int32 start, l_int32 num, BOXA *boxa ); +LEPT_DLL extern l_ok pixGetTileCount ( PIX *pix, l_int32 *pn ); +LEPT_DLL extern PIXA * pixaDisplayMultiTiled ( PIXA *pixas, l_int32 nx, l_int32 ny, l_int32 maxw, l_int32 maxh, l_float32 scalefactor, l_int32 spacing, l_int32 border ); +LEPT_DLL extern l_ok pixaSplitIntoFiles ( PIXA *pixas, l_int32 nsplit, l_float32 scale, l_int32 outwidth, l_int32 write_pixa, l_int32 write_pix, l_int32 write_pdf ); +LEPT_DLL extern l_ok convertToNUpFiles ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *outdir ); +LEPT_DLL extern PIXA * convertToNUpPixa ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize ); +LEPT_DLL extern PIXA * pixaConvertToNUpPixa ( PIXA *pixas, SARRAY *sa, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize ); +LEPT_DLL extern l_ok pixaCompareInPdf ( PIXA *pixa1, PIXA *pixa2, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *fileout ); +LEPT_DLL extern l_ok pmsCreate ( size_t minsize, size_t smallest, NUMA *numalloc, const char *logfile ); +LEPT_DLL extern void pmsDestroy ( ); +LEPT_DLL extern void * pmsCustomAlloc ( size_t nbytes ); +LEPT_DLL extern void pmsCustomDealloc ( void *data ); +LEPT_DLL extern void * pmsGetAlloc ( size_t nbytes ); +LEPT_DLL extern l_ok pmsGetLevelForAlloc ( size_t nbytes, l_int32 *plevel ); +LEPT_DLL extern l_ok pmsGetLevelForDealloc ( void *data, l_int32 *plevel ); +LEPT_DLL extern void pmsLogInfo ( ); +LEPT_DLL extern l_ok pixAddConstantGray ( PIX *pixs, l_int32 val ); +LEPT_DLL extern l_ok pixMultConstantGray ( PIX *pixs, l_float32 val ); +LEPT_DLL extern PIX * pixAddGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixSubtractGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixThresholdToValue ( PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval ); +LEPT_DLL extern PIX * pixInitAccumulate ( l_int32 w, l_int32 h, l_uint32 offset ); +LEPT_DLL extern PIX * pixFinalAccumulate ( PIX *pixs, l_uint32 offset, l_int32 depth ); +LEPT_DLL extern PIX * pixFinalAccumulateThreshold ( PIX *pixs, l_uint32 offset, l_uint32 threshold ); +LEPT_DLL extern l_ok pixAccumulate ( PIX *pixd, PIX *pixs, l_int32 op ); +LEPT_DLL extern l_ok pixMultConstAccumulate ( PIX *pixs, l_float32 factor, l_uint32 offset ); +LEPT_DLL extern PIX * pixAbsDifference ( PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixAddRGB ( PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern PIX * pixMinOrMax ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type ); +LEPT_DLL extern PIX * pixMaxDynamicRange ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixMaxDynamicRangeRGB ( PIX *pixs, l_int32 type ); +LEPT_DLL extern l_uint32 linearScaleRGBVal ( l_uint32 sval, l_float32 factor ); +LEPT_DLL extern l_uint32 logScaleRGBVal ( l_uint32 sval, l_float32 *tab, l_float32 factor ); +LEPT_DLL extern l_float32 * makeLogBase2Tab ( void ); +LEPT_DLL extern l_float32 getLogBase2 ( l_int32 val, l_float32 *logtab ); +LEPT_DLL extern PIXC * pixcompCreateFromPix ( PIX *pix, l_int32 comptype ); +LEPT_DLL extern PIXC * pixcompCreateFromString ( l_uint8 *data, size_t size, l_int32 copyflag ); +LEPT_DLL extern PIXC * pixcompCreateFromFile ( const char *filename, l_int32 comptype ); +LEPT_DLL extern void pixcompDestroy ( PIXC **ppixc ); +LEPT_DLL extern PIXC * pixcompCopy ( PIXC *pixcs ); +LEPT_DLL extern l_ok pixcompGetDimensions ( PIXC *pixc, l_int32 *pw, l_int32 *ph, l_int32 *pd ); +LEPT_DLL extern l_ok pixcompGetParameters ( PIXC *pixc, l_int32 *pxres, l_int32 *pyres, l_int32 *pcomptype, l_int32 *pcmapflag ); +LEPT_DLL extern l_ok pixcompDetermineFormat ( l_int32 comptype, l_int32 d, l_int32 cmapflag, l_int32 *pformat ); +LEPT_DLL extern PIX * pixCreateFromPixcomp ( PIXC *pixc ); +LEPT_DLL extern PIXAC * pixacompCreate ( l_int32 n ); +LEPT_DLL extern PIXAC * pixacompCreateWithInit ( l_int32 n, l_int32 offset, PIX *pix, l_int32 comptype ); +LEPT_DLL extern PIXAC * pixacompCreateFromPixa ( PIXA *pixa, l_int32 comptype, l_int32 accesstype ); +LEPT_DLL extern PIXAC * pixacompCreateFromFiles ( const char *dirname, const char *substr, l_int32 comptype ); +LEPT_DLL extern PIXAC * pixacompCreateFromSA ( SARRAY *sa, l_int32 comptype ); +LEPT_DLL extern void pixacompDestroy ( PIXAC **ppixac ); +LEPT_DLL extern l_ok pixacompAddPix ( PIXAC *pixac, PIX *pix, l_int32 comptype ); +LEPT_DLL extern l_ok pixacompAddPixcomp ( PIXAC *pixac, PIXC *pixc, l_int32 copyflag ); +LEPT_DLL extern l_ok pixacompReplacePix ( PIXAC *pixac, l_int32 index, PIX *pix, l_int32 comptype ); +LEPT_DLL extern l_ok pixacompReplacePixcomp ( PIXAC *pixac, l_int32 index, PIXC *pixc ); +LEPT_DLL extern l_ok pixacompAddBox ( PIXAC *pixac, BOX *box, l_int32 copyflag ); +LEPT_DLL extern l_int32 pixacompGetCount ( PIXAC *pixac ); +LEPT_DLL extern PIXC * pixacompGetPixcomp ( PIXAC *pixac, l_int32 index, l_int32 copyflag ); +LEPT_DLL extern PIX * pixacompGetPix ( PIXAC *pixac, l_int32 index ); +LEPT_DLL extern l_ok pixacompGetPixDimensions ( PIXAC *pixac, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); +LEPT_DLL extern BOXA * pixacompGetBoxa ( PIXAC *pixac, l_int32 accesstype ); +LEPT_DLL extern l_int32 pixacompGetBoxaCount ( PIXAC *pixac ); +LEPT_DLL extern BOX * pixacompGetBox ( PIXAC *pixac, l_int32 index, l_int32 accesstype ); +LEPT_DLL extern l_ok pixacompGetBoxGeometry ( PIXAC *pixac, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern l_int32 pixacompGetOffset ( PIXAC *pixac ); +LEPT_DLL extern l_ok pixacompSetOffset ( PIXAC *pixac, l_int32 offset ); +LEPT_DLL extern PIXA * pixaCreateFromPixacomp ( PIXAC *pixac, l_int32 accesstype ); +LEPT_DLL extern l_ok pixacompJoin ( PIXAC *pixacd, PIXAC *pixacs, l_int32 istart, l_int32 iend ); +LEPT_DLL extern PIXAC * pixacompInterleave ( PIXAC *pixac1, PIXAC *pixac2 ); +LEPT_DLL extern PIXAC * pixacompRead ( const char *filename ); +LEPT_DLL extern PIXAC * pixacompReadStream ( FILE *fp ); +LEPT_DLL extern PIXAC * pixacompReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixacompWrite ( const char *filename, PIXAC *pixac ); +LEPT_DLL extern l_ok pixacompWriteStream ( FILE *fp, PIXAC *pixac ); +LEPT_DLL extern l_ok pixacompWriteMem ( l_uint8 **pdata, size_t *psize, PIXAC *pixac ); +LEPT_DLL extern l_ok pixacompConvertToPdf ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); +LEPT_DLL extern l_ok pixacompConvertToPdfData ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixacompFastConvertToPdfData ( PIXAC *pixac, const char *title, l_uint8 **pdata, size_t *pnbytes ); +LEPT_DLL extern l_ok pixacompWriteStreamInfo ( FILE *fp, PIXAC *pixac, const char *text ); +LEPT_DLL extern l_ok pixcompWriteStreamInfo ( FILE *fp, PIXC *pixc, const char *text ); +LEPT_DLL extern PIX * pixacompDisplayTiledAndScaled ( PIXAC *pixac, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); +LEPT_DLL extern l_ok pixacompWriteFiles ( PIXAC *pixac, const char *subdir ); +LEPT_DLL extern l_ok pixcompWriteFile ( const char *rootname, PIXC *pixc ); +LEPT_DLL extern PIX * pixThreshold8 ( PIX *pixs, l_int32 d, l_int32 nlevels, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixRemoveColormapGeneral ( PIX *pixs, l_int32 type, l_int32 ifnocmap ); +LEPT_DLL extern PIX * pixRemoveColormap ( PIX *pixs, l_int32 type ); +LEPT_DLL extern l_ok pixAddGrayColormap8 ( PIX *pixs ); +LEPT_DLL extern PIX * pixAddMinimalGrayColormap8 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertRGBToLuminance ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertRGBToGray ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); +LEPT_DLL extern PIX * pixConvertRGBToGrayFast ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertRGBToGrayMinMax ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixConvertRGBToGraySatBoost ( PIX *pixs, l_int32 refval ); +LEPT_DLL extern PIX * pixConvertRGBToGrayArb ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc ); +LEPT_DLL extern PIX * pixConvertRGBToBinaryArb ( PIX *pixs, l_float32 rc, l_float32 gc, l_float32 bc, l_int32 thresh, l_int32 relation ); +LEPT_DLL extern PIX * pixConvertGrayToColormap ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertGrayToColormap8 ( PIX *pixs, l_int32 mindepth ); +LEPT_DLL extern PIX * pixColorizeGray ( PIX *pixs, l_uint32 color, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixConvertRGBToColormap ( PIX *pixs, l_int32 ditherflag ); +LEPT_DLL extern PIX * pixConvertCmapTo1 ( PIX *pixs ); +LEPT_DLL extern l_ok pixQuantizeIfFewColors ( PIX *pixs, l_int32 maxcolors, l_int32 mingraycolors, l_int32 octlevel, PIX **ppixd ); +LEPT_DLL extern PIX * pixConvert16To8 ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixConvertGrayToFalseColor ( PIX *pixs, l_float32 gamma ); +LEPT_DLL extern PIX * pixUnpackBinary ( PIX *pixs, l_int32 depth, l_int32 invert ); +LEPT_DLL extern PIX * pixConvert1To16 ( PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1 ); +LEPT_DLL extern PIX * pixConvert1To32 ( PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1 ); +LEPT_DLL extern PIX * pixConvert1To2Cmap ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert1To2 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); +LEPT_DLL extern PIX * pixConvert1To4Cmap ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert1To4 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); +LEPT_DLL extern PIX * pixConvert1To8Cmap ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert1To8 ( PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1 ); +LEPT_DLL extern PIX * pixConvert2To8 ( PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixConvert4To8 ( PIX *pixs, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixConvert8To16 ( PIX *pixs, l_int32 leftshift ); +LEPT_DLL extern PIX * pixConvertTo2 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert8To2 ( PIX *pix ); +LEPT_DLL extern PIX * pixConvertTo4 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert8To4 ( PIX *pix ); +LEPT_DLL extern PIX * pixConvertTo1Adaptive ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertTo1 ( PIX *pixs, l_int32 threshold ); +LEPT_DLL extern PIX * pixConvertTo1BySampling ( PIX *pixs, l_int32 factor, l_int32 threshold ); +LEPT_DLL extern PIX * pixConvertTo8 ( PIX *pixs, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixConvertTo8BySampling ( PIX *pixs, l_int32 factor, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixConvertTo8Colormap ( PIX *pixs, l_int32 dither ); +LEPT_DLL extern PIX * pixConvertTo16 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertTo32 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertTo32BySampling ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern PIX * pixConvert8To32 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertTo8Or32 ( PIX *pixs, l_int32 copyflag, l_int32 warnflag ); +LEPT_DLL extern PIX * pixConvert24To32 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert32To24 ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvert32To16 ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixConvert32To8 ( PIX *pixs, l_int32 type16, l_int32 type8 ); +LEPT_DLL extern PIX * pixRemoveAlpha ( PIX *pixs ); +LEPT_DLL extern PIX * pixAddAlphaTo1bpp ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixConvertLossless ( PIX *pixs, l_int32 d ); +LEPT_DLL extern PIX * pixConvertForPSWrap ( PIX *pixs ); +LEPT_DLL extern PIX * pixConvertToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); +LEPT_DLL extern PIX * pixConvertGrayToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); +LEPT_DLL extern PIX * pixConvertColorToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); +LEPT_DLL extern void l_setNeutralBoostVal ( l_int32 val ); +LEPT_DLL extern PIX * pixConnCompTransform ( PIX *pixs, l_int32 connect, l_int32 depth ); +LEPT_DLL extern PIX * pixConnCompAreaTransform ( PIX *pixs, l_int32 connect ); +LEPT_DLL extern l_ok pixConnCompIncrInit ( PIX *pixs, l_int32 conn, PIX **ppixd, PTAA **pptaa, l_int32 *pncc ); +LEPT_DLL extern l_int32 pixConnCompIncrAdd ( PIX *pixs, PTAA *ptaa, l_int32 *pncc, l_float32 x, l_float32 y, l_int32 debug ); +LEPT_DLL extern l_ok pixGetSortedNeighborValues ( PIX *pixs, l_int32 x, l_int32 y, l_int32 conn, l_int32 **pneigh, l_int32 *pnvals ); +LEPT_DLL extern PIX * pixLocToColorTransform ( PIX *pixs ); +LEPT_DLL extern PIXTILING * pixTilingCreate ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap ); +LEPT_DLL extern void pixTilingDestroy ( PIXTILING **ppt ); +LEPT_DLL extern l_ok pixTilingGetCount ( PIXTILING *pt, l_int32 *pnx, l_int32 *pny ); +LEPT_DLL extern l_ok pixTilingGetSize ( PIXTILING *pt, l_int32 *pw, l_int32 *ph ); +LEPT_DLL extern PIX * pixTilingGetTile ( PIXTILING *pt, l_int32 i, l_int32 j ); +LEPT_DLL extern l_ok pixTilingNoStripOnPaint ( PIXTILING *pt ); +LEPT_DLL extern l_ok pixTilingPaintTile ( PIX *pixd, l_int32 i, l_int32 j, PIX *pixs, PIXTILING *pt ); +LEPT_DLL extern PIX * pixReadStreamPng ( FILE *fp ); +LEPT_DLL extern l_ok readHeaderPng ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok freadHeaderPng ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok readHeaderMemPng ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_int32 fgetPngResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok isPngInterlaced ( const char *filename, l_int32 *pinterlaced ); +LEPT_DLL extern l_ok fgetPngColormapInfo ( FILE *fp, PIXCMAP **pcmap, l_int32 *ptransparency ); +LEPT_DLL extern l_ok pixWritePng ( const char *filename, PIX *pix, l_float32 gamma ); +LEPT_DLL extern l_ok pixWriteStreamPng ( FILE *fp, PIX *pix, l_float32 gamma ); +LEPT_DLL extern l_ok pixSetZlibCompression ( PIX *pix, l_int32 compval ); +LEPT_DLL extern void l_pngSetReadStrip16To8 ( l_int32 flag ); +LEPT_DLL extern PIX * pixReadMemPng ( const l_uint8 *filedata, size_t filesize ); +LEPT_DLL extern l_ok pixWriteMemPng ( l_uint8 **pfiledata, size_t *pfilesize, PIX *pix, l_float32 gamma ); +LEPT_DLL extern PIX * pixReadStreamPnm ( FILE *fp ); +LEPT_DLL extern l_ok readHeaderPnm ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_ok freadHeaderPnm ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_ok pixWriteStreamPnm ( FILE *fp, PIX *pix ); +LEPT_DLL extern l_ok pixWriteStreamAsciiPnm ( FILE *fp, PIX *pix ); +LEPT_DLL extern l_ok pixWriteStreamPam ( FILE *fp, PIX *pix ); +LEPT_DLL extern PIX * pixReadMemPnm ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok readHeaderMemPnm ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); +LEPT_DLL extern l_ok pixWriteMemPnm ( l_uint8 **pdata, size_t *psize, PIX *pix ); +LEPT_DLL extern l_ok pixWriteMemPam ( l_uint8 **pdata, size_t *psize, PIX *pix ); +LEPT_DLL extern PIX * pixProjectiveSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixProjectiveSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixProjectivePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); +LEPT_DLL extern PIX * pixProjective ( PIX *pixs, l_float32 *vc, l_int32 incolor ); +LEPT_DLL extern PIX * pixProjectivePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); +LEPT_DLL extern PIX * pixProjectiveColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); +LEPT_DLL extern PIX * pixProjectivePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); +LEPT_DLL extern PIX * pixProjectiveGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); +LEPT_DLL extern PIX * pixProjectivePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); +LEPT_DLL extern l_ok getProjectiveXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); +LEPT_DLL extern l_ok projectiveXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); +LEPT_DLL extern l_ok projectiveXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); +LEPT_DLL extern l_ok convertFilesToPS ( const char *dirin, const char *substr, l_int32 res, const char *fileout ); +LEPT_DLL extern l_ok sarrayConvertFilesToPS ( SARRAY *sa, l_int32 res, const char *fileout ); +LEPT_DLL extern l_ok convertFilesFittedToPS ( const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout ); +LEPT_DLL extern l_ok sarrayConvertFilesFittedToPS ( SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout ); +LEPT_DLL extern l_ok writeImageCompressedToPSFile ( const char *filein, const char *fileout, l_int32 res, l_int32 *pindex ); +LEPT_DLL extern l_ok convertSegmentedPagesToPS ( const char *pagedir, const char *pagestr, l_int32 page_numpre, const char *maskdir, const char *maskstr, l_int32 mask_numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout ); +LEPT_DLL extern l_ok pixWriteSegmentedPageToPS ( PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout ); +LEPT_DLL extern l_ok pixWriteMixedToPS ( PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout ); +LEPT_DLL extern l_ok convertToPSEmbed ( const char *filein, const char *fileout, l_int32 level ); +LEPT_DLL extern l_ok pixaWriteCompressedToPS ( PIXA *pixa, const char *fileout, l_int32 res, l_int32 level ); +LEPT_DLL extern l_ok pixWriteCompressedToPS ( PIX *pix, const char *fileout, l_int32 res, l_int32 level, l_int32 *pindex ); +LEPT_DLL extern l_ok pixWritePSEmbed ( const char *filein, const char *fileout ); +LEPT_DLL extern l_ok pixWriteStreamPS ( FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); +LEPT_DLL extern char * pixWriteStringPS ( PIX *pixs, BOX *box, l_int32 res, l_float32 scale ); +LEPT_DLL extern char * generateUncompressedPS ( char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag ); +LEPT_DLL extern l_ok convertJpegToPSEmbed ( const char *filein, const char *fileout ); +LEPT_DLL extern l_ok convertJpegToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); +LEPT_DLL extern l_ok convertG4ToPSEmbed ( const char *filein, const char *fileout ); +LEPT_DLL extern l_ok convertG4ToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage ); +LEPT_DLL extern l_ok convertTiffMultipageToPS ( const char *filein, const char *fileout, l_float32 fillfract ); +LEPT_DLL extern l_ok convertFlateToPSEmbed ( const char *filein, const char *fileout ); +LEPT_DLL extern l_ok convertFlateToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); +LEPT_DLL extern l_ok pixWriteMemPS ( l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); +LEPT_DLL extern l_int32 getResLetterPage ( l_int32 w, l_int32 h, l_float32 fillfract ); +LEPT_DLL extern l_int32 getResA4Page ( l_int32 w, l_int32 h, l_float32 fillfract ); +LEPT_DLL extern void l_psWriteBoundingBox ( l_int32 flag ); +LEPT_DLL extern PTA * ptaCreate ( l_int32 n ); +LEPT_DLL extern PTA * ptaCreateFromNuma ( NUMA *nax, NUMA *nay ); +LEPT_DLL extern void ptaDestroy ( PTA **ppta ); +LEPT_DLL extern PTA * ptaCopy ( PTA *pta ); +LEPT_DLL extern PTA * ptaCopyRange ( PTA *ptas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern PTA * ptaClone ( PTA *pta ); +LEPT_DLL extern l_ok ptaEmpty ( PTA *pta ); +LEPT_DLL extern l_ok ptaAddPt ( PTA *pta, l_float32 x, l_float32 y ); +LEPT_DLL extern l_ok ptaInsertPt ( PTA *pta, l_int32 index, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok ptaRemovePt ( PTA *pta, l_int32 index ); +LEPT_DLL extern l_int32 ptaGetRefcount ( PTA *pta ); +LEPT_DLL extern l_int32 ptaChangeRefcount ( PTA *pta, l_int32 delta ); +LEPT_DLL extern l_int32 ptaGetCount ( PTA *pta ); +LEPT_DLL extern l_ok ptaGetPt ( PTA *pta, l_int32 index, l_float32 *px, l_float32 *py ); +LEPT_DLL extern l_ok ptaGetIPt ( PTA *pta, l_int32 index, l_int32 *px, l_int32 *py ); +LEPT_DLL extern l_ok ptaSetPt ( PTA *pta, l_int32 index, l_float32 x, l_float32 y ); +LEPT_DLL extern l_ok ptaGetArrays ( PTA *pta, NUMA **pnax, NUMA **pnay ); +LEPT_DLL extern PTA * ptaRead ( const char *filename ); +LEPT_DLL extern PTA * ptaReadStream ( FILE *fp ); +LEPT_DLL extern PTA * ptaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok ptaWriteDebug ( const char *filename, PTA *pta, l_int32 type ); +LEPT_DLL extern l_ok ptaWrite ( const char *filename, PTA *pta, l_int32 type ); +LEPT_DLL extern l_ok ptaWriteStream ( FILE *fp, PTA *pta, l_int32 type ); +LEPT_DLL extern l_ok ptaWriteMem ( l_uint8 **pdata, size_t *psize, PTA *pta, l_int32 type ); +LEPT_DLL extern PTAA * ptaaCreate ( l_int32 n ); +LEPT_DLL extern void ptaaDestroy ( PTAA **pptaa ); +LEPT_DLL extern l_ok ptaaAddPta ( PTAA *ptaa, PTA *pta, l_int32 copyflag ); +LEPT_DLL extern l_int32 ptaaGetCount ( PTAA *ptaa ); +LEPT_DLL extern PTA * ptaaGetPta ( PTAA *ptaa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern l_ok ptaaGetPt ( PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py ); +LEPT_DLL extern l_ok ptaaInitFull ( PTAA *ptaa, PTA *pta ); +LEPT_DLL extern l_ok ptaaReplacePta ( PTAA *ptaa, l_int32 index, PTA *pta ); +LEPT_DLL extern l_ok ptaaAddPt ( PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y ); +LEPT_DLL extern l_ok ptaaTruncate ( PTAA *ptaa ); +LEPT_DLL extern PTAA * ptaaRead ( const char *filename ); +LEPT_DLL extern PTAA * ptaaReadStream ( FILE *fp ); +LEPT_DLL extern PTAA * ptaaReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok ptaaWriteDebug ( const char *filename, PTAA *ptaa, l_int32 type ); +LEPT_DLL extern l_ok ptaaWrite ( const char *filename, PTAA *ptaa, l_int32 type ); +LEPT_DLL extern l_ok ptaaWriteStream ( FILE *fp, PTAA *ptaa, l_int32 type ); +LEPT_DLL extern l_ok ptaaWriteMem ( l_uint8 **pdata, size_t *psize, PTAA *ptaa, l_int32 type ); +LEPT_DLL extern PTA * ptaSubsample ( PTA *ptas, l_int32 subfactor ); +LEPT_DLL extern l_ok ptaJoin ( PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern l_ok ptaaJoin ( PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend ); +LEPT_DLL extern PTA * ptaReverse ( PTA *ptas, l_int32 type ); +LEPT_DLL extern PTA * ptaTranspose ( PTA *ptas ); +LEPT_DLL extern PTA * ptaCyclicPerm ( PTA *ptas, l_int32 xs, l_int32 ys ); +LEPT_DLL extern PTA * ptaSelectRange ( PTA *ptas, l_int32 first, l_int32 last ); +LEPT_DLL extern BOX * ptaGetBoundingRegion ( PTA *pta ); +LEPT_DLL extern l_ok ptaGetRange ( PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy ); +LEPT_DLL extern PTA * ptaGetInsideBox ( PTA *ptas, BOX *box ); +LEPT_DLL extern PTA * pixFindCornerPixels ( PIX *pixs ); +LEPT_DLL extern l_int32 ptaContainsPt ( PTA *pta, l_int32 x, l_int32 y ); +LEPT_DLL extern l_int32 ptaTestIntersection ( PTA *pta1, PTA *pta2 ); +LEPT_DLL extern PTA * ptaTransform ( PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern l_int32 ptaPtInsidePolygon ( PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside ); +LEPT_DLL extern l_float32 l_angleBetweenVectors ( l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2 ); +LEPT_DLL extern l_ok ptaGetMinMax ( PTA *pta, l_float32 *pxmin, l_float32 *pymin, l_float32 *pxmax, l_float32 *pymax ); +LEPT_DLL extern PTA * ptaSelectByValue ( PTA *ptas, l_float32 xth, l_float32 yth, l_int32 type, l_int32 relation ); +LEPT_DLL extern PTA * ptaCropToMask ( PTA *ptas, PIX *pixm ); +LEPT_DLL extern l_ok ptaGetLinearLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit ); +LEPT_DLL extern l_ok ptaGetQuadraticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit ); +LEPT_DLL extern l_ok ptaGetCubicLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit ); +LEPT_DLL extern l_ok ptaGetQuarticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit ); +LEPT_DLL extern l_ok ptaNoisyLinearLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit ); +LEPT_DLL extern l_ok ptaNoisyQuadraticLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit ); +LEPT_DLL extern l_ok applyLinearFit ( l_float32 a, l_float32 b, l_float32 x, l_float32 *py ); +LEPT_DLL extern l_ok applyQuadraticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py ); +LEPT_DLL extern l_ok applyCubicFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py ); +LEPT_DLL extern l_ok applyQuarticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py ); +LEPT_DLL extern l_ok pixPlotAlongPta ( PIX *pixs, PTA *pta, l_int32 outformat, const char *title ); +LEPT_DLL extern PTA * ptaGetPixelsFromPix ( PIX *pixs, BOX *box ); +LEPT_DLL extern PIX * pixGenerateFromPta ( PTA *pta, l_int32 w, l_int32 h ); +LEPT_DLL extern PTA * ptaGetBoundaryPixels ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PTAA * ptaaGetBoundaryPixels ( PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa ); +LEPT_DLL extern PTAA * ptaaIndexLabeledPixels ( PIX *pixs, l_int32 *pncc ); +LEPT_DLL extern PTA * ptaGetNeighborPixLocs ( PIX *pixs, l_int32 x, l_int32 y, l_int32 conn ); +LEPT_DLL extern PTA * numaConvertToPta1 ( NUMA *na ); +LEPT_DLL extern PTA * numaConvertToPta2 ( NUMA *nax, NUMA *nay ); +LEPT_DLL extern l_ok ptaConvertToNuma ( PTA *pta, NUMA **pnax, NUMA **pnay ); +LEPT_DLL extern PIX * pixDisplayPta ( PIX *pixd, PIX *pixs, PTA *pta ); +LEPT_DLL extern PIX * pixDisplayPtaaPattern ( PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy ); +LEPT_DLL extern PIX * pixDisplayPtaPattern ( PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color ); +LEPT_DLL extern PTA * ptaReplicatePattern ( PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * pixDisplayPtaa ( PIX *pixs, PTAA *ptaa ); +LEPT_DLL extern PTA * ptaSort ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); +LEPT_DLL extern l_ok ptaGetSortIndex ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); +LEPT_DLL extern PTA * ptaSortByIndex ( PTA *ptas, NUMA *naindex ); +LEPT_DLL extern PTAA * ptaaSortByIndex ( PTAA *ptaas, NUMA *naindex ); +LEPT_DLL extern l_ok ptaGetRankValue ( PTA *pta, l_float32 fract, PTA *ptasort, l_int32 sorttype, l_float32 *pval ); +LEPT_DLL extern PTA * ptaUnionByAset ( PTA *pta1, PTA *pta2 ); +LEPT_DLL extern PTA * ptaRemoveDupsByAset ( PTA *ptas ); +LEPT_DLL extern PTA * ptaIntersectionByAset ( PTA *pta1, PTA *pta2 ); +LEPT_DLL extern L_ASET * l_asetCreateFromPta ( PTA *pta ); +LEPT_DLL extern PTA * ptaUnionByHash ( PTA *pta1, PTA *pta2 ); +LEPT_DLL extern l_ok ptaRemoveDupsByHash ( PTA *ptas, PTA **pptad, L_DNAHASH **pdahash ); +LEPT_DLL extern PTA * ptaIntersectionByHash ( PTA *pta1, PTA *pta2 ); +LEPT_DLL extern l_ok ptaFindPtByHash ( PTA *pta, L_DNAHASH *dahash, l_int32 x, l_int32 y, l_int32 *pindex ); +LEPT_DLL extern L_DNAHASH * l_dnaHashCreateFromPta ( PTA *pta ); +LEPT_DLL extern L_PTRA * ptraCreate ( l_int32 n ); +LEPT_DLL extern void ptraDestroy ( L_PTRA **ppa, l_int32 freeflag, l_int32 warnflag ); +LEPT_DLL extern l_ok ptraAdd ( L_PTRA *pa, void *item ); +LEPT_DLL extern l_ok ptraInsert ( L_PTRA *pa, l_int32 index, void *item, l_int32 shiftflag ); +LEPT_DLL extern void * ptraRemove ( L_PTRA *pa, l_int32 index, l_int32 flag ); +LEPT_DLL extern void * ptraRemoveLast ( L_PTRA *pa ); +LEPT_DLL extern void * ptraReplace ( L_PTRA *pa, l_int32 index, void *item, l_int32 freeflag ); +LEPT_DLL extern l_ok ptraSwap ( L_PTRA *pa, l_int32 index1, l_int32 index2 ); +LEPT_DLL extern l_ok ptraCompactArray ( L_PTRA *pa ); +LEPT_DLL extern l_ok ptraReverse ( L_PTRA *pa ); +LEPT_DLL extern l_ok ptraJoin ( L_PTRA *pa1, L_PTRA *pa2 ); +LEPT_DLL extern l_ok ptraGetMaxIndex ( L_PTRA *pa, l_int32 *pmaxindex ); +LEPT_DLL extern l_ok ptraGetActualCount ( L_PTRA *pa, l_int32 *pcount ); +LEPT_DLL extern void * ptraGetPtrToItem ( L_PTRA *pa, l_int32 index ); +LEPT_DLL extern L_PTRAA * ptraaCreate ( l_int32 n ); +LEPT_DLL extern void ptraaDestroy ( L_PTRAA **ppaa, l_int32 freeflag, l_int32 warnflag ); +LEPT_DLL extern l_ok ptraaGetSize ( L_PTRAA *paa, l_int32 *psize ); +LEPT_DLL extern l_ok ptraaInsertPtra ( L_PTRAA *paa, l_int32 index, L_PTRA *pa ); +LEPT_DLL extern L_PTRA * ptraaGetPtra ( L_PTRAA *paa, l_int32 index, l_int32 accessflag ); +LEPT_DLL extern L_PTRA * ptraaFlattenToPtra ( L_PTRAA *paa ); +LEPT_DLL extern l_ok pixQuadtreeMean ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa ); +LEPT_DLL extern l_ok pixQuadtreeVariance ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv ); +LEPT_DLL extern l_ok pixMeanInRectangle ( PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval ); +LEPT_DLL extern l_ok pixVarianceInRectangle ( PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar ); +LEPT_DLL extern BOXAA * boxaaQuadtreeRegions ( l_int32 w, l_int32 h, l_int32 nlevels ); +LEPT_DLL extern l_ok quadtreeGetParent ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval ); +LEPT_DLL extern l_ok quadtreeGetChildren ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11 ); +LEPT_DLL extern l_int32 quadtreeMaxLevels ( l_int32 w, l_int32 h ); +LEPT_DLL extern PIX * fpixaDisplayQuadtree ( FPIXA *fpixa, l_int32 factor, l_int32 fontsize ); +LEPT_DLL extern L_QUEUE * lqueueCreate ( l_int32 nalloc ); +LEPT_DLL extern void lqueueDestroy ( L_QUEUE **plq, l_int32 freeflag ); +LEPT_DLL extern l_ok lqueueAdd ( L_QUEUE *lq, void *item ); +LEPT_DLL extern void * lqueueRemove ( L_QUEUE *lq ); +LEPT_DLL extern l_int32 lqueueGetCount ( L_QUEUE *lq ); +LEPT_DLL extern l_ok lqueuePrint ( FILE *fp, L_QUEUE *lq ); +LEPT_DLL extern PIX * pixRankFilter ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); +LEPT_DLL extern PIX * pixRankFilterRGB ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); +LEPT_DLL extern PIX * pixRankFilterGray ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); +LEPT_DLL extern PIX * pixMedianFilter ( PIX *pixs, l_int32 wf, l_int32 hf ); +LEPT_DLL extern PIX * pixRankFilterWithScaling ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor ); +LEPT_DLL extern L_RBTREE * l_rbtreeCreate ( l_int32 keytype ); +LEPT_DLL extern RB_TYPE * l_rbtreeLookup ( L_RBTREE *t, RB_TYPE key ); +LEPT_DLL extern void l_rbtreeInsert ( L_RBTREE *t, RB_TYPE key, RB_TYPE value ); +LEPT_DLL extern void l_rbtreeDelete ( L_RBTREE *t, RB_TYPE key ); +LEPT_DLL extern void l_rbtreeDestroy ( L_RBTREE **pt ); +LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetFirst ( L_RBTREE *t ); +LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetNext ( L_RBTREE_NODE *n ); +LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetLast ( L_RBTREE *t ); +LEPT_DLL extern L_RBTREE_NODE * l_rbtreeGetPrev ( L_RBTREE_NODE *n ); +LEPT_DLL extern l_int32 l_rbtreeGetCount ( L_RBTREE *t ); +LEPT_DLL extern void l_rbtreePrint ( FILE *fp, L_RBTREE *t ); +LEPT_DLL extern SARRAY * pixProcessBarcodes ( PIX *pixs, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); +LEPT_DLL extern PIXA * pixExtractBarcodes ( PIX *pixs, l_int32 debugflag ); +LEPT_DLL extern SARRAY * pixReadBarcodes ( PIXA *pixa, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); +LEPT_DLL extern NUMA * pixReadBarcodeWidths ( PIX *pixs, l_int32 method, l_int32 debugflag ); +LEPT_DLL extern BOXA * pixLocateBarcodes ( PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm ); +LEPT_DLL extern PIX * pixDeskewBarcode ( PIX *pixs, PIX *pixb, BOX *box, l_int32 margin, l_int32 threshold, l_float32 *pangle, l_float32 *pconf ); +LEPT_DLL extern NUMA * pixExtractBarcodeWidths1 ( PIX *pixs, l_float32 thresh, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); +LEPT_DLL extern NUMA * pixExtractBarcodeWidths2 ( PIX *pixs, l_float32 thresh, l_float32 *pwidth, NUMA **pnac, l_int32 debugflag ); +LEPT_DLL extern NUMA * pixExtractBarcodeCrossings ( PIX *pixs, l_float32 thresh, l_int32 debugflag ); +LEPT_DLL extern NUMA * numaQuantizeCrossingsByWidth ( NUMA *nas, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); +LEPT_DLL extern NUMA * numaQuantizeCrossingsByWindow ( NUMA *nas, l_float32 ratio, l_float32 *pwidth, l_float32 *pfirstloc, NUMA **pnac, l_int32 debugflag ); +LEPT_DLL extern PIXA * pixaReadFiles ( const char *dirname, const char *substr ); +LEPT_DLL extern PIXA * pixaReadFilesSA ( SARRAY *sa ); +LEPT_DLL extern PIX * pixRead ( const char *filename ); +LEPT_DLL extern PIX * pixReadWithHint ( const char *filename, l_int32 hint ); +LEPT_DLL extern PIX * pixReadIndexed ( SARRAY *sa, l_int32 index ); +LEPT_DLL extern PIX * pixReadStream ( FILE *fp, l_int32 hint ); +LEPT_DLL extern l_ok pixReadHeader ( const char *filename, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok findFileFormat ( const char *filename, l_int32 *pformat ); +LEPT_DLL extern l_ok findFileFormatStream ( FILE *fp, l_int32 *pformat ); +LEPT_DLL extern l_ok findFileFormatBuffer ( const l_uint8 *buf, l_int32 *pformat ); +LEPT_DLL extern l_int32 fileFormatIsTiff ( FILE *fp ); +LEPT_DLL extern PIX * pixReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixReadHeaderMem ( const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok writeImageFileInfo ( const char *filename, FILE *fpout, l_int32 headeronly ); +LEPT_DLL extern l_ok ioFormatTest ( const char *filename ); +LEPT_DLL extern L_RECOG * recogCreateFromRecog ( L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); +LEPT_DLL extern L_RECOG * recogCreateFromPixa ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); +LEPT_DLL extern L_RECOG * recogCreateFromPixaNoFinish ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); +LEPT_DLL extern L_RECOG * recogCreate ( l_int32 scalew, l_int32 scaleh, l_int32 linew, l_int32 threshold, l_int32 maxyshift ); +LEPT_DLL extern void recogDestroy ( L_RECOG **precog ); +LEPT_DLL extern l_int32 recogGetCount ( L_RECOG *recog ); +LEPT_DLL extern l_ok recogSetParams ( L_RECOG *recog, l_int32 type, l_int32 min_nopad, l_float32 max_wh_ratio, l_float32 max_ht_ratio ); +LEPT_DLL extern l_int32 recogGetClassIndex ( L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex ); +LEPT_DLL extern l_ok recogStringToIndex ( L_RECOG *recog, char *text, l_int32 *pindex ); +LEPT_DLL extern l_int32 recogGetClassString ( L_RECOG *recog, l_int32 index, char **pcharstr ); +LEPT_DLL extern l_ok l_convertCharstrToInt ( const char *str, l_int32 *pval ); +LEPT_DLL extern L_RECOG * recogRead ( const char *filename ); +LEPT_DLL extern L_RECOG * recogReadStream ( FILE *fp ); +LEPT_DLL extern L_RECOG * recogReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok recogWrite ( const char *filename, L_RECOG *recog ); +LEPT_DLL extern l_ok recogWriteStream ( FILE *fp, L_RECOG *recog ); +LEPT_DLL extern l_ok recogWriteMem ( l_uint8 **pdata, size_t *psize, L_RECOG *recog ); +LEPT_DLL extern PIXA * recogExtractPixa ( L_RECOG *recog ); +LEPT_DLL extern BOXA * recogDecode ( L_RECOG *recog, PIX *pixs, l_int32 nlevels, PIX **ppixdb ); +LEPT_DLL extern l_ok recogCreateDid ( L_RECOG *recog, PIX *pixs ); +LEPT_DLL extern l_ok recogDestroyDid ( L_RECOG *recog ); +LEPT_DLL extern l_int32 recogDidExists ( L_RECOG *recog ); +LEPT_DLL extern L_RDID * recogGetDid ( L_RECOG *recog ); +LEPT_DLL extern l_ok recogSetChannelParams ( L_RECOG *recog, l_int32 nlevels ); +LEPT_DLL extern l_ok recogIdentifyMultiple ( L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit ); +LEPT_DLL extern l_ok recogSplitIntoCharacters ( L_RECOG *recog, PIX *pixs, l_int32 minh, l_int32 skipsplit, BOXA **pboxa, PIXA **ppixa, l_int32 debug ); +LEPT_DLL extern l_ok recogCorrelationBestRow ( L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug ); +LEPT_DLL extern l_ok recogCorrelationBestChar ( L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb ); +LEPT_DLL extern l_ok recogIdentifyPixa ( L_RECOG *recog, PIXA *pixa, PIX **ppixdb ); +LEPT_DLL extern l_ok recogIdentifyPix ( L_RECOG *recog, PIX *pixs, PIX **ppixdb ); +LEPT_DLL extern l_ok recogSkipIdentify ( L_RECOG *recog ); +LEPT_DLL extern void rchaDestroy ( L_RCHA **prcha ); +LEPT_DLL extern void rchDestroy ( L_RCH **prch ); +LEPT_DLL extern l_ok rchaExtract ( L_RCHA *rcha, NUMA **pnaindex, NUMA **pnascore, SARRAY **psatext, NUMA **pnasample, NUMA **pnaxloc, NUMA **pnayloc, NUMA **pnawidth ); +LEPT_DLL extern l_ok rchExtract ( L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth ); +LEPT_DLL extern PIX * recogProcessToIdentify ( L_RECOG *recog, PIX *pixs, l_int32 pad ); +LEPT_DLL extern SARRAY * recogExtractNumbers ( L_RECOG *recog, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa ); +LEPT_DLL extern PIXA * showExtractNumbers ( PIX *pixs, SARRAY *sa, BOXAA *baa, NUMAA *naa, PIX **ppixdb ); +LEPT_DLL extern l_ok recogTrainLabeled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 debug ); +LEPT_DLL extern l_ok recogProcessLabeled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIX **ppix ); +LEPT_DLL extern l_ok recogAddSample ( L_RECOG *recog, PIX *pix, l_int32 debug ); +LEPT_DLL extern PIX * recogModifyTemplate ( L_RECOG *recog, PIX *pixs ); +LEPT_DLL extern l_int32 recogAverageSamples ( L_RECOG **precog, l_int32 debug ); +LEPT_DLL extern l_int32 pixaAccumulateSamples ( PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py ); +LEPT_DLL extern l_ok recogTrainingFinished ( L_RECOG **precog, l_int32 modifyflag, l_int32 minsize, l_float32 minfract ); +LEPT_DLL extern PIXA * recogFilterPixaBySize ( PIXA *pixas, l_int32 setsize, l_int32 maxkeep, l_float32 max_ht_ratio, NUMA **pna ); +LEPT_DLL extern PIXAA * recogSortPixaByClass ( PIXA *pixa, l_int32 setsize ); +LEPT_DLL extern l_ok recogRemoveOutliers1 ( L_RECOG **precog, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); +LEPT_DLL extern PIXA * pixaRemoveOutliers1 ( PIXA *pixas, l_float32 minscore, l_int32 mintarget, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); +LEPT_DLL extern l_ok recogRemoveOutliers2 ( L_RECOG **precog, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); +LEPT_DLL extern PIXA * pixaRemoveOutliers2 ( PIXA *pixas, l_float32 minscore, l_int32 minsize, PIX **ppixsave, PIX **ppixrem ); +LEPT_DLL extern PIXA * recogTrainFromBoot ( L_RECOG *recogboot, PIXA *pixas, l_float32 minscore, l_int32 threshold, l_int32 debug ); +LEPT_DLL extern l_ok recogPadDigitTrainingSet ( L_RECOG **precog, l_int32 scaleh, l_int32 linew ); +LEPT_DLL extern l_int32 recogIsPaddingNeeded ( L_RECOG *recog, SARRAY **psa ); +LEPT_DLL extern PIXA * recogAddDigitPadTemplates ( L_RECOG *recog, SARRAY *sa ); +LEPT_DLL extern L_RECOG * recogMakeBootDigitRecog ( l_int32 nsamp, l_int32 scaleh, l_int32 linew, l_int32 maxyshift, l_int32 debug ); +LEPT_DLL extern PIXA * recogMakeBootDigitTemplates ( l_int32 nsamp, l_int32 debug ); +LEPT_DLL extern l_ok recogShowContent ( FILE *fp, L_RECOG *recog, l_int32 index, l_int32 display ); +LEPT_DLL extern l_ok recogDebugAverages ( L_RECOG **precog, l_int32 debug ); +LEPT_DLL extern l_int32 recogShowAverageTemplates ( L_RECOG *recog ); +LEPT_DLL extern l_ok recogShowMatchesInRange ( L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display ); +LEPT_DLL extern PIX * recogShowMatch ( L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score ); +LEPT_DLL extern l_ok regTestSetup ( l_int32 argc, char **argv, L_REGPARAMS **prp ); +LEPT_DLL extern l_ok regTestCleanup ( L_REGPARAMS *rp ); +LEPT_DLL extern l_ok regTestCompareValues ( L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta ); +LEPT_DLL extern l_ok regTestCompareStrings ( L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2 ); +LEPT_DLL extern l_ok regTestComparePix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2 ); +LEPT_DLL extern l_ok regTestCompareSimilarPix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats ); +LEPT_DLL extern l_ok regTestCheckFile ( L_REGPARAMS *rp, const char *localname ); +LEPT_DLL extern l_ok regTestCompareFiles ( L_REGPARAMS *rp, l_int32 index1, l_int32 index2 ); +LEPT_DLL extern l_ok regTestWritePixAndCheck ( L_REGPARAMS *rp, PIX *pix, l_int32 format ); +LEPT_DLL extern l_ok regTestWriteDataAndCheck ( L_REGPARAMS *rp, void *data, size_t nbytes, const char *ext ); +LEPT_DLL extern char * regTestGenLocalFilename ( L_REGPARAMS *rp, l_int32 index, l_int32 format ); +LEPT_DLL extern l_ok pixRasterop ( PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy ); +LEPT_DLL extern l_ok pixRasteropVip ( PIX *pixd, l_int32 bx, l_int32 bw, l_int32 vshift, l_int32 incolor ); +LEPT_DLL extern l_ok pixRasteropHip ( PIX *pixd, l_int32 by, l_int32 bh, l_int32 hshift, l_int32 incolor ); +LEPT_DLL extern PIX * pixTranslate ( PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor ); +LEPT_DLL extern l_ok pixRasteropIP ( PIX *pixd, l_int32 hshift, l_int32 vshift, l_int32 incolor ); +LEPT_DLL extern l_ok pixRasteropFullImage ( PIX *pixd, PIX *pixs, l_int32 op ); +LEPT_DLL extern void rasteropUniLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op ); +LEPT_DLL extern void rasteropLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy ); +LEPT_DLL extern void rasteropVipLow ( l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift ); +LEPT_DLL extern void rasteropHipLow ( l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift ); +LEPT_DLL extern PIX * pixRotate ( PIX *pixs, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height ); +LEPT_DLL extern PIX * pixEmbedForRotation ( PIX *pixs, l_float32 angle, l_int32 incolor, l_int32 width, l_int32 height ); +LEPT_DLL extern PIX * pixRotateBySampling ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotateBinaryNice ( PIX *pixs, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotateWithAlpha ( PIX *pixs, l_float32 angle, PIX *pixg, l_float32 fract ); +LEPT_DLL extern PIX * pixRotateAM ( PIX *pixs, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotateAMColor ( PIX *pixs, l_float32 angle, l_uint32 colorval ); +LEPT_DLL extern PIX * pixRotateAMGray ( PIX *pixs, l_float32 angle, l_uint8 grayval ); +LEPT_DLL extern PIX * pixRotateAMCorner ( PIX *pixs, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotateAMColorCorner ( PIX *pixs, l_float32 angle, l_uint32 fillval ); +LEPT_DLL extern PIX * pixRotateAMGrayCorner ( PIX *pixs, l_float32 angle, l_uint8 grayval ); +LEPT_DLL extern PIX * pixRotateAMColorFast ( PIX *pixs, l_float32 angle, l_uint32 colorval ); +LEPT_DLL extern PIX * pixRotateOrth ( PIX *pixs, l_int32 quads ); +LEPT_DLL extern PIX * pixRotate180 ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixRotate90 ( PIX *pixs, l_int32 direction ); +LEPT_DLL extern PIX * pixFlipLR ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixFlipTB ( PIX *pixd, PIX *pixs ); +LEPT_DLL extern PIX * pixRotateShear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotate2Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotate3Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern l_ok pixRotateShearIP ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixRotateShearCenter ( PIX *pixs, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern l_ok pixRotateShearCenterIP ( PIX *pixs, l_float32 angle, l_int32 incolor ); +LEPT_DLL extern PIX * pixStrokeWidthTransform ( PIX *pixs, l_int32 color, l_int32 depth, l_int32 nangles ); +LEPT_DLL extern PIX * pixRunlengthTransform ( PIX *pixs, l_int32 color, l_int32 direction, l_int32 depth ); +LEPT_DLL extern l_ok pixFindHorizontalRuns ( PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn ); +LEPT_DLL extern l_ok pixFindVerticalRuns ( PIX *pix, l_int32 x, l_int32 *ystart, l_int32 *yend, l_int32 *pn ); +LEPT_DLL extern NUMA * pixFindMaxRuns ( PIX *pix, l_int32 direction, NUMA **pnastart ); +LEPT_DLL extern l_ok pixFindMaxHorizontalRunOnLine ( PIX *pix, l_int32 y, l_int32 *pxstart, l_int32 *psize ); +LEPT_DLL extern l_ok pixFindMaxVerticalRunOnLine ( PIX *pix, l_int32 x, l_int32 *pystart, l_int32 *psize ); +LEPT_DLL extern l_ok runlengthMembershipOnLine ( l_int32 *buffer, l_int32 size, l_int32 depth, l_int32 *start, l_int32 *end, l_int32 n ); +LEPT_DLL extern l_int32 * makeMSBitLocTab ( l_int32 bitval ); +LEPT_DLL extern SARRAY * sarrayCreate ( l_int32 n ); +LEPT_DLL extern SARRAY * sarrayCreateInitialized ( l_int32 n, const char *initstr ); +LEPT_DLL extern SARRAY * sarrayCreateWordsFromString ( const char *string ); +LEPT_DLL extern SARRAY * sarrayCreateLinesFromString ( const char *string, l_int32 blankflag ); +LEPT_DLL extern void sarrayDestroy ( SARRAY **psa ); +LEPT_DLL extern SARRAY * sarrayCopy ( SARRAY *sa ); +LEPT_DLL extern SARRAY * sarrayClone ( SARRAY *sa ); +LEPT_DLL extern l_ok sarrayAddString ( SARRAY *sa, const char *string, l_int32 copyflag ); +LEPT_DLL extern char * sarrayRemoveString ( SARRAY *sa, l_int32 index ); +LEPT_DLL extern l_ok sarrayReplaceString ( SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag ); +LEPT_DLL extern l_ok sarrayClear ( SARRAY *sa ); +LEPT_DLL extern l_int32 sarrayGetCount ( SARRAY *sa ); +LEPT_DLL extern char ** sarrayGetArray ( SARRAY *sa, l_int32 *pnalloc, l_int32 *pn ); +LEPT_DLL extern char * sarrayGetString ( SARRAY *sa, l_int32 index, l_int32 copyflag ); +LEPT_DLL extern l_int32 sarrayGetRefcount ( SARRAY *sa ); +LEPT_DLL extern l_ok sarrayChangeRefcount ( SARRAY *sa, l_int32 delta ); +LEPT_DLL extern char * sarrayToString ( SARRAY *sa, l_int32 addnlflag ); +LEPT_DLL extern char * sarrayToStringRange ( SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag ); +LEPT_DLL extern l_ok sarrayJoin ( SARRAY *sa1, SARRAY *sa2 ); +LEPT_DLL extern l_ok sarrayAppendRange ( SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end ); +LEPT_DLL extern l_ok sarrayPadToSameSize ( SARRAY *sa1, SARRAY *sa2, const char *padstring ); +LEPT_DLL extern SARRAY * sarrayConvertWordsToLines ( SARRAY *sa, l_int32 linesize ); +LEPT_DLL extern l_int32 sarraySplitString ( SARRAY *sa, const char *str, const char *separators ); +LEPT_DLL extern SARRAY * sarraySelectBySubstring ( SARRAY *sain, const char *substr ); +LEPT_DLL extern SARRAY * sarraySelectByRange ( SARRAY *sain, l_int32 first, l_int32 last ); +LEPT_DLL extern l_int32 sarrayParseRange ( SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc ); +LEPT_DLL extern SARRAY * sarrayRead ( const char *filename ); +LEPT_DLL extern SARRAY * sarrayReadStream ( FILE *fp ); +LEPT_DLL extern SARRAY * sarrayReadMem ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok sarrayWrite ( const char *filename, SARRAY *sa ); +LEPT_DLL extern l_ok sarrayWriteStream ( FILE *fp, SARRAY *sa ); +LEPT_DLL extern l_ok sarrayWriteMem ( l_uint8 **pdata, size_t *psize, SARRAY *sa ); +LEPT_DLL extern l_ok sarrayAppend ( const char *filename, SARRAY *sa ); +LEPT_DLL extern SARRAY * getNumberedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); +LEPT_DLL extern SARRAY * getSortedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); +LEPT_DLL extern SARRAY * convertSortedToNumberedPathnames ( SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); +LEPT_DLL extern SARRAY * getFilenamesInDirectory ( const char *dirname ); +LEPT_DLL extern SARRAY * sarraySort ( SARRAY *saout, SARRAY *sain, l_int32 sortorder ); +LEPT_DLL extern SARRAY * sarraySortByIndex ( SARRAY *sain, NUMA *naindex ); +LEPT_DLL extern l_int32 stringCompareLexical ( const char *str1, const char *str2 ); +LEPT_DLL extern SARRAY * sarrayUnionByAset ( SARRAY *sa1, SARRAY *sa2 ); +LEPT_DLL extern SARRAY * sarrayRemoveDupsByAset ( SARRAY *sas ); +LEPT_DLL extern SARRAY * sarrayIntersectionByAset ( SARRAY *sa1, SARRAY *sa2 ); +LEPT_DLL extern L_ASET * l_asetCreateFromSarray ( SARRAY *sa ); +LEPT_DLL extern l_ok sarrayRemoveDupsByHash ( SARRAY *sas, SARRAY **psad, L_DNAHASH **pdahash ); +LEPT_DLL extern SARRAY * sarrayIntersectionByHash ( SARRAY *sa1, SARRAY *sa2 ); +LEPT_DLL extern l_ok sarrayFindStringByHash ( SARRAY *sa, L_DNAHASH *dahash, const char *str, l_int32 *pindex ); +LEPT_DLL extern L_DNAHASH * l_dnaHashCreateFromSarray ( SARRAY *sa ); +LEPT_DLL extern SARRAY * sarrayGenerateIntegers ( l_int32 n ); +LEPT_DLL extern l_ok sarrayLookupCSKV ( SARRAY *sa, const char *keystring, char **pvalstring ); +LEPT_DLL extern PIX * pixScale ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleToSizeRel ( PIX *pixs, l_int32 delw, l_int32 delh ); +LEPT_DLL extern PIX * pixScaleToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIX * pixScaleToResolution ( PIX *pixs, l_float32 target, l_float32 assumed, l_float32 *pscalefact ); +LEPT_DLL extern PIX * pixScaleGeneral ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth ); +LEPT_DLL extern PIX * pixScaleLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleColorLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleColor2xLI ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleColor4xLI ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleGrayLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleGray2xLI ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleGray4xLI ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleGray2xLIThresh ( PIX *pixs, l_int32 thresh ); +LEPT_DLL extern PIX * pixScaleGray2xLIDither ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleGray4xLIThresh ( PIX *pixs, l_int32 thresh ); +LEPT_DLL extern PIX * pixScaleGray4xLIDither ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleBySampling ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleBySamplingToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIX * pixScaleByIntSampling ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern PIX * pixScaleRGBToGrayFast ( PIX *pixs, l_int32 factor, l_int32 color ); +LEPT_DLL extern PIX * pixScaleRGBToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); +LEPT_DLL extern PIX * pixScaleGrayToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); +LEPT_DLL extern PIX * pixScaleSmooth ( PIX *pix, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleSmoothToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIX * pixScaleRGBToGray2 ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); +LEPT_DLL extern PIX * pixScaleAreaMap ( PIX *pix, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleAreaMap2 ( PIX *pix ); +LEPT_DLL extern PIX * pixScaleAreaMapToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); +LEPT_DLL extern PIX * pixScaleBinary ( PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleToGray ( PIX *pixs, l_float32 scalefactor ); +LEPT_DLL extern PIX * pixScaleToGrayFast ( PIX *pixs, l_float32 scalefactor ); +LEPT_DLL extern PIX * pixScaleToGray2 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGray3 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGray4 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGray6 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGray8 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGray16 ( PIX *pixs ); +LEPT_DLL extern PIX * pixScaleToGrayMipmap ( PIX *pixs, l_float32 scalefactor ); +LEPT_DLL extern PIX * pixScaleMipmap ( PIX *pixs1, PIX *pixs2, l_float32 scale ); +LEPT_DLL extern PIX * pixExpandReplicate ( PIX *pixs, l_int32 factor ); +LEPT_DLL extern PIX * pixScaleGrayMinMax ( PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type ); +LEPT_DLL extern PIX * pixScaleGrayMinMax2 ( PIX *pixs, l_int32 type ); +LEPT_DLL extern PIX * pixScaleGrayRankCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); +LEPT_DLL extern PIX * pixScaleGrayRank2 ( PIX *pixs, l_int32 rank ); +LEPT_DLL extern l_ok pixScaleAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley ); +LEPT_DLL extern PIX * pixScaleWithAlpha ( PIX *pixs, l_float32 scalex, l_float32 scaley, PIX *pixg, l_float32 fract ); +LEPT_DLL extern PIX * pixSeedfillBinary ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity ); +LEPT_DLL extern PIX * pixSeedfillBinaryRestricted ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax ); +LEPT_DLL extern PIX * pixHolesByFilling ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern PIX * pixFillClosedBorders ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern PIX * pixExtractBorderConnComps ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern PIX * pixRemoveBorderConnComps ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern PIX * pixFillBgFromBorder ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern PIX * pixFillHolesToBoundingRect ( PIX *pixs, l_int32 minsize, l_float32 maxhfract, l_float32 minfgfract ); +LEPT_DLL extern l_ok pixSeedfillGray ( PIX *pixs, PIX *pixm, l_int32 connectivity ); +LEPT_DLL extern l_ok pixSeedfillGrayInv ( PIX *pixs, PIX *pixm, l_int32 connectivity ); +LEPT_DLL extern l_ok pixSeedfillGraySimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); +LEPT_DLL extern l_ok pixSeedfillGrayInvSimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); +LEPT_DLL extern PIX * pixSeedfillGrayBasin ( PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity ); +LEPT_DLL extern PIX * pixDistanceFunction ( PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond ); +LEPT_DLL extern PIX * pixSeedspread ( PIX *pixs, l_int32 connectivity ); +LEPT_DLL extern l_ok pixLocalExtrema ( PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax ); +LEPT_DLL extern l_ok pixSelectedLocalExtrema ( PIX *pixs, l_int32 mindist, PIX **ppixmin, PIX **ppixmax ); +LEPT_DLL extern PIX * pixFindEqualValues ( PIX *pixs1, PIX *pixs2 ); +LEPT_DLL extern l_ok pixSelectMinInConnComp ( PIX *pixs, PIX *pixm, PTA **ppta, NUMA **pnav ); +LEPT_DLL extern PIX * pixRemoveSeededComponents ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 bordersize ); +LEPT_DLL extern SELA * selaCreate ( l_int32 n ); +LEPT_DLL extern void selaDestroy ( SELA **psela ); +LEPT_DLL extern SEL * selCreate ( l_int32 height, l_int32 width, const char *name ); +LEPT_DLL extern void selDestroy ( SEL **psel ); +LEPT_DLL extern SEL * selCopy ( SEL *sel ); +LEPT_DLL extern SEL * selCreateBrick ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type ); +LEPT_DLL extern SEL * selCreateComb ( l_int32 factor1, l_int32 factor2, l_int32 direction ); +LEPT_DLL extern l_int32 ** create2dIntArray ( l_int32 sy, l_int32 sx ); +LEPT_DLL extern l_ok selaAddSel ( SELA *sela, SEL *sel, const char *selname, l_int32 copyflag ); +LEPT_DLL extern l_int32 selaGetCount ( SELA *sela ); +LEPT_DLL extern SEL * selaGetSel ( SELA *sela, l_int32 i ); +LEPT_DLL extern char * selGetName ( SEL *sel ); +LEPT_DLL extern l_ok selSetName ( SEL *sel, const char *name ); +LEPT_DLL extern l_ok selaFindSelByName ( SELA *sela, const char *name, l_int32 *pindex, SEL **psel ); +LEPT_DLL extern l_ok selGetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 *ptype ); +LEPT_DLL extern l_ok selSetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 type ); +LEPT_DLL extern l_ok selGetParameters ( SEL *sel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); +LEPT_DLL extern l_ok selSetOrigin ( SEL *sel, l_int32 cy, l_int32 cx ); +LEPT_DLL extern l_ok selGetTypeAtOrigin ( SEL *sel, l_int32 *ptype ); +LEPT_DLL extern char * selaGetBrickName ( SELA *sela, l_int32 hsize, l_int32 vsize ); +LEPT_DLL extern char * selaGetCombName ( SELA *sela, l_int32 size, l_int32 direction ); +LEPT_DLL extern l_ok getCompositeParameters ( l_int32 size, l_int32 *psize1, l_int32 *psize2, char **pnameh1, char **pnameh2, char **pnamev1, char **pnamev2 ); +LEPT_DLL extern SARRAY * selaGetSelnames ( SELA *sela ); +LEPT_DLL extern l_ok selFindMaxTranslations ( SEL *sel, l_int32 *pxp, l_int32 *pyp, l_int32 *pxn, l_int32 *pyn ); +LEPT_DLL extern SEL * selRotateOrth ( SEL *sel, l_int32 quads ); +LEPT_DLL extern SELA * selaRead ( const char *fname ); +LEPT_DLL extern SELA * selaReadStream ( FILE *fp ); +LEPT_DLL extern SEL * selRead ( const char *fname ); +LEPT_DLL extern SEL * selReadStream ( FILE *fp ); +LEPT_DLL extern l_ok selaWrite ( const char *fname, SELA *sela ); +LEPT_DLL extern l_ok selaWriteStream ( FILE *fp, SELA *sela ); +LEPT_DLL extern l_ok selWrite ( const char *fname, SEL *sel ); +LEPT_DLL extern l_ok selWriteStream ( FILE *fp, SEL *sel ); +LEPT_DLL extern SEL * selCreateFromString ( const char *text, l_int32 h, l_int32 w, const char *name ); +LEPT_DLL extern char * selPrintToString ( SEL *sel ); +LEPT_DLL extern SELA * selaCreateFromFile ( const char *filename ); +LEPT_DLL extern SEL * selCreateFromPta ( PTA *pta, l_int32 cy, l_int32 cx, const char *name ); +LEPT_DLL extern SEL * selCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx, const char *name ); +LEPT_DLL extern SEL * selReadFromColorImage ( const char *pathname ); +LEPT_DLL extern SEL * selCreateFromColorPix ( PIX *pixs, const char *selname ); +LEPT_DLL extern PIX * selDisplayInPix ( SEL *sel, l_int32 size, l_int32 gthick ); +LEPT_DLL extern PIX * selaDisplayInPix ( SELA *sela, l_int32 size, l_int32 gthick, l_int32 spacing, l_int32 ncols ); +LEPT_DLL extern SELA * selaAddBasic ( SELA *sela ); +LEPT_DLL extern SELA * selaAddHitMiss ( SELA *sela ); +LEPT_DLL extern SELA * selaAddDwaLinear ( SELA *sela ); +LEPT_DLL extern SELA * selaAddDwaCombs ( SELA *sela ); +LEPT_DLL extern SELA * selaAddCrossJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); +LEPT_DLL extern SELA * selaAddTJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); +LEPT_DLL extern SELA * sela4ccThin ( SELA *sela ); +LEPT_DLL extern SELA * sela8ccThin ( SELA *sela ); +LEPT_DLL extern SELA * sela4and8ccThin ( SELA *sela ); +LEPT_DLL extern SEL * pixGenerateSelWithRuns ( PIX *pixs, l_int32 nhlines, l_int32 nvlines, l_int32 distance, l_int32 minlength, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); +LEPT_DLL extern SEL * pixGenerateSelRandom ( PIX *pixs, l_float32 hitfract, l_float32 missfract, l_int32 distance, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); +LEPT_DLL extern SEL * pixGenerateSelBoundary ( PIX *pixs, l_int32 hitdist, l_int32 missdist, l_int32 hitskip, l_int32 missskip, l_int32 topflag, l_int32 botflag, l_int32 leftflag, l_int32 rightflag, PIX **ppixe ); +LEPT_DLL extern NUMA * pixGetRunCentersOnLine ( PIX *pixs, l_int32 x, l_int32 y, l_int32 minlength ); +LEPT_DLL extern NUMA * pixGetRunsOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); +LEPT_DLL extern PTA * pixSubsampleBoundaryPixels ( PIX *pixs, l_int32 skip ); +LEPT_DLL extern l_int32 adjacentOnPixelInRaster ( PIX *pixs, l_int32 x, l_int32 y, l_int32 *pxa, l_int32 *pya ); +LEPT_DLL extern PIX * pixDisplayHitMissSel ( PIX *pixs, SEL *sel, l_int32 scalefactor, l_uint32 hitcolor, l_uint32 misscolor ); +LEPT_DLL extern PIX * pixHShear ( PIX *pixd, PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixVShear ( PIX *pixd, PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixHShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixVShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixHShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixVShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern l_ok pixHShearIP ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern l_ok pixVShearIP ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixHShearLI ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixVShearLI ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); +LEPT_DLL extern PIX * pixDeskewBoth ( PIX *pixs, l_int32 redsearch ); +LEPT_DLL extern PIX * pixDeskew ( PIX *pixs, l_int32 redsearch ); +LEPT_DLL extern PIX * pixFindSkewAndDeskew ( PIX *pixs, l_int32 redsearch, l_float32 *pangle, l_float32 *pconf ); +LEPT_DLL extern PIX * pixDeskewGeneral ( PIX *pixs, l_int32 redsweep, l_float32 sweeprange, l_float32 sweepdelta, l_int32 redsearch, l_int32 thresh, l_float32 *pangle, l_float32 *pconf ); +LEPT_DLL extern l_ok pixFindSkew ( PIX *pixs, l_float32 *pangle, l_float32 *pconf ); +LEPT_DLL extern l_ok pixFindSkewSweep ( PIX *pixs, l_float32 *pangle, l_int32 reduction, l_float32 sweeprange, l_float32 sweepdelta ); +LEPT_DLL extern l_ok pixFindSkewSweepAndSearch ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); +LEPT_DLL extern l_ok pixFindSkewSweepAndSearchScore ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); +LEPT_DLL extern l_ok pixFindSkewSweepAndSearchScorePivot ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_int32 pivot ); +LEPT_DLL extern l_int32 pixFindSkewOrthogonalRange ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 confprior ); +LEPT_DLL extern l_ok pixFindDifferentialSquareSum ( PIX *pixs, l_float32 *psum ); +LEPT_DLL extern l_ok pixFindNormalizedSquareSum ( PIX *pixs, l_float32 *phratio, l_float32 *pvratio, l_float32 *pfract ); +LEPT_DLL extern PIX * pixReadStreamSpix ( FILE *fp ); +LEPT_DLL extern l_ok readHeaderSpix ( const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok freadHeaderSpix ( FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok sreadHeaderSpix ( const l_uint32 *data, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); +LEPT_DLL extern l_ok pixWriteStreamSpix ( FILE *fp, PIX *pix ); +LEPT_DLL extern PIX * pixReadMemSpix ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixWriteMemSpix ( l_uint8 **pdata, size_t *psize, PIX *pix ); +LEPT_DLL extern l_ok pixSerializeToMemory ( PIX *pixs, l_uint32 **pdata, size_t *pnbytes ); +LEPT_DLL extern PIX * pixDeserializeFromMemory ( const l_uint32 *data, size_t nbytes ); +LEPT_DLL extern L_STACK * lstackCreate ( l_int32 n ); +LEPT_DLL extern void lstackDestroy ( L_STACK **plstack, l_int32 freeflag ); +LEPT_DLL extern l_ok lstackAdd ( L_STACK *lstack, void *item ); +LEPT_DLL extern void * lstackRemove ( L_STACK *lstack ); +LEPT_DLL extern l_int32 lstackGetCount ( L_STACK *lstack ); +LEPT_DLL extern l_ok lstackPrint ( FILE *fp, L_STACK *lstack ); +LEPT_DLL extern L_STRCODE * strcodeCreate ( l_int32 fileno ); +LEPT_DLL extern l_ok strcodeCreateFromFile ( const char *filein, l_int32 fileno, const char *outdir ); +LEPT_DLL extern l_ok strcodeGenerate ( L_STRCODE *strcode, const char *filein, const char *type ); +LEPT_DLL extern l_int32 strcodeFinalize ( L_STRCODE **pstrcode, const char *outdir ); +LEPT_DLL extern l_int32 l_getStructStrFromFile ( const char *filename, l_int32 field, char **pstr ); +LEPT_DLL extern l_ok pixFindStrokeLength ( PIX *pixs, l_int32 *tab8, l_int32 *plength ); +LEPT_DLL extern l_ok pixFindStrokeWidth ( PIX *pixs, l_float32 thresh, l_int32 *tab8, l_float32 *pwidth, NUMA **pnahisto ); +LEPT_DLL extern NUMA * pixaFindStrokeWidth ( PIXA *pixa, l_float32 thresh, l_int32 *tab8, l_int32 debug ); +LEPT_DLL extern PIXA * pixaModifyStrokeWidth ( PIXA *pixas, l_float32 targetw ); +LEPT_DLL extern PIX * pixModifyStrokeWidth ( PIX *pixs, l_float32 width, l_float32 targetw ); +LEPT_DLL extern PIXA * pixaSetStrokeWidth ( PIXA *pixas, l_int32 width, l_int32 thinfirst, l_int32 connectivity ); +LEPT_DLL extern PIX * pixSetStrokeWidth ( PIX *pixs, l_int32 width, l_int32 thinfirst, l_int32 connectivity ); +LEPT_DLL extern l_int32 * sudokuReadFile ( const char *filename ); +LEPT_DLL extern l_int32 * sudokuReadString ( const char *str ); +LEPT_DLL extern L_SUDOKU * sudokuCreate ( l_int32 *array ); +LEPT_DLL extern void sudokuDestroy ( L_SUDOKU **psud ); +LEPT_DLL extern l_int32 sudokuSolve ( L_SUDOKU *sud ); +LEPT_DLL extern l_ok sudokuTestUniqueness ( l_int32 *array, l_int32 *punique ); +LEPT_DLL extern L_SUDOKU * sudokuGenerate ( l_int32 *array, l_int32 seed, l_int32 minelems, l_int32 maxtries ); +LEPT_DLL extern l_int32 sudokuOutput ( L_SUDOKU *sud, l_int32 arraytype ); +LEPT_DLL extern PIX * pixAddSingleTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow ); +LEPT_DLL extern PIX * pixAddTextlines ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); +LEPT_DLL extern l_ok pixSetTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow ); +LEPT_DLL extern l_ok pixSetTextline ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow ); +LEPT_DLL extern PIXA * pixaAddTextNumber ( PIXA *pixas, L_BMF *bmf, NUMA *na, l_uint32 val, l_int32 location ); +LEPT_DLL extern PIXA * pixaAddTextlines ( PIXA *pixas, L_BMF *bmf, SARRAY *sa, l_uint32 val, l_int32 location ); +LEPT_DLL extern l_ok pixaAddPixWithText ( PIXA *pixa, PIX *pixs, l_int32 reduction, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); +LEPT_DLL extern SARRAY * bmfGetLineStrings ( L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph ); +LEPT_DLL extern NUMA * bmfGetWordWidths ( L_BMF *bmf, const char *textstr, SARRAY *sa ); +LEPT_DLL extern l_ok bmfGetStringWidth ( L_BMF *bmf, const char *textstr, l_int32 *pw ); +LEPT_DLL extern SARRAY * splitStringToParagraphs ( char *textstr, l_int32 splitflag ); +LEPT_DLL extern PIX * pixReadTiff ( const char *filename, l_int32 n ); +LEPT_DLL extern PIX * pixReadStreamTiff ( FILE *fp, l_int32 n ); +LEPT_DLL extern l_ok pixWriteTiff ( const char *filename, PIX *pix, l_int32 comptype, const char *modestr ); +LEPT_DLL extern l_ok pixWriteTiffCustom ( const char *filename, PIX *pix, l_int32 comptype, const char *modestr, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); +LEPT_DLL extern l_ok pixWriteStreamTiff ( FILE *fp, PIX *pix, l_int32 comptype ); +LEPT_DLL extern l_ok pixWriteStreamTiffWA ( FILE *fp, PIX *pix, l_int32 comptype, const char *modestr ); +LEPT_DLL extern PIX * pixReadFromMultipageTiff ( const char *fname, size_t *poffset ); +LEPT_DLL extern PIXA * pixaReadMultipageTiff ( const char *filename ); +LEPT_DLL extern l_ok pixaWriteMultipageTiff ( const char *fname, PIXA *pixa ); +LEPT_DLL extern l_ok writeMultipageTiff ( const char *dirin, const char *substr, const char *fileout ); +LEPT_DLL extern l_ok writeMultipageTiffSA ( SARRAY *sa, const char *fileout ); +LEPT_DLL extern l_ok fprintTiffInfo ( FILE *fpout, const char *tiffile ); +LEPT_DLL extern l_ok tiffGetCount ( FILE *fp, l_int32 *pn ); +LEPT_DLL extern l_ok getTiffResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); +LEPT_DLL extern l_ok readHeaderTiff ( const char *filename, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); +LEPT_DLL extern l_ok freadHeaderTiff ( FILE *fp, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); +LEPT_DLL extern l_ok readHeaderMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); +LEPT_DLL extern l_ok findTiffCompression ( FILE *fp, l_int32 *pcomptype ); +LEPT_DLL extern l_ok extractG4DataFromFile ( const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack ); +LEPT_DLL extern PIX * pixReadMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n ); +LEPT_DLL extern PIX * pixReadMemFromMultipageTiff ( const l_uint8 *cdata, size_t size, size_t *poffset ); +LEPT_DLL extern PIXA * pixaReadMemMultipageTiff ( const l_uint8 *data, size_t size ); +LEPT_DLL extern l_ok pixaWriteMemMultipageTiff ( l_uint8 **pdata, size_t *psize, PIXA *pixa ); +LEPT_DLL extern l_ok pixWriteMemTiff ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype ); +LEPT_DLL extern l_ok pixWriteMemTiffCustom ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); +LEPT_DLL extern l_int32 setMsgSeverity ( l_int32 newsev ); +LEPT_DLL extern l_int32 returnErrorInt ( const char *msg, const char *procname, l_int32 ival ); +LEPT_DLL extern l_float32 returnErrorFloat ( const char *msg, const char *procname, l_float32 fval ); +LEPT_DLL extern void * returnErrorPtr ( const char *msg, const char *procname, void *pval ); +LEPT_DLL extern l_ok filesAreIdentical ( const char *fname1, const char *fname2, l_int32 *psame ); +LEPT_DLL extern l_uint16 convertOnLittleEnd16 ( l_uint16 shortin ); +LEPT_DLL extern l_uint16 convertOnBigEnd16 ( l_uint16 shortin ); +LEPT_DLL extern l_uint32 convertOnLittleEnd32 ( l_uint32 wordin ); +LEPT_DLL extern l_uint32 convertOnBigEnd32 ( l_uint32 wordin ); +LEPT_DLL extern l_ok fileCorruptByDeletion ( const char *filein, l_float32 loc, l_float32 size, const char *fileout ); +LEPT_DLL extern l_ok fileCorruptByMutation ( const char *filein, l_float32 loc, l_float32 size, const char *fileout ); +LEPT_DLL extern l_ok fileReplaceBytes ( const char *filein, l_int32 start, l_int32 nbytes, l_uint8 *newdata, size_t newsize, const char *fileout ); +LEPT_DLL extern l_ok genRandomIntegerInRange ( l_int32 range, l_int32 seed, l_int32 *pval ); +LEPT_DLL extern l_int32 lept_roundftoi ( l_float32 fval ); +LEPT_DLL extern l_ok l_hashStringToUint64 ( const char *str, l_uint64 *phash ); +LEPT_DLL extern l_ok l_hashPtToUint64 ( l_int32 x, l_int32 y, l_uint64 *phash ); +LEPT_DLL extern l_ok l_hashFloat64ToUint64 ( l_int32 nbuckets, l_float64 val, l_uint64 *phash ); +LEPT_DLL extern l_ok findNextLargerPrime ( l_int32 start, l_uint32 *pprime ); +LEPT_DLL extern l_ok lept_isPrime ( l_uint64 n, l_int32 *pis_prime, l_uint32 *pfactor ); +LEPT_DLL extern l_uint32 convertIntToGrayCode ( l_uint32 val ); +LEPT_DLL extern l_uint32 convertGrayCodeToInt ( l_uint32 val ); +LEPT_DLL extern char * getLeptonicaVersion ( ); +LEPT_DLL extern void startTimer ( void ); +LEPT_DLL extern l_float32 stopTimer ( void ); +LEPT_DLL extern L_TIMER startTimerNested ( void ); +LEPT_DLL extern l_float32 stopTimerNested ( L_TIMER rusage_start ); +LEPT_DLL extern void l_getCurrentTime ( l_int32 *sec, l_int32 *usec ); +LEPT_DLL extern L_WALLTIMER * startWallTimer ( void ); +LEPT_DLL extern l_float32 stopWallTimer ( L_WALLTIMER **ptimer ); +LEPT_DLL extern char * l_getFormattedDate ( ); +LEPT_DLL extern char * stringNew ( const char *src ); +LEPT_DLL extern l_ok stringCopy ( char *dest, const char *src, l_int32 n ); +LEPT_DLL extern char * stringCopySegment ( const char *src, l_int32 start, l_int32 nbytes ); +LEPT_DLL extern l_ok stringReplace ( char **pdest, const char *src ); +LEPT_DLL extern l_int32 stringLength ( const char *src, size_t size ); +LEPT_DLL extern l_int32 stringCat ( char *dest, size_t size, const char *src ); +LEPT_DLL extern char * stringConcatNew ( const char *first, ... ); +LEPT_DLL extern char * stringJoin ( const char *src1, const char *src2 ); +LEPT_DLL extern l_ok stringJoinIP ( char **psrc1, const char *src2 ); +LEPT_DLL extern char * stringReverse ( const char *src ); +LEPT_DLL extern char * strtokSafe ( char *cstr, const char *seps, char **psaveptr ); +LEPT_DLL extern l_ok stringSplitOnToken ( char *cstr, const char *seps, char **phead, char **ptail ); +LEPT_DLL extern l_ok stringCheckForChars ( const char *src, const char *chars, l_int32 *pfound ); +LEPT_DLL extern char * stringRemoveChars ( const char *src, const char *remchars ); +LEPT_DLL extern char * stringReplaceEachSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *pcount ); +LEPT_DLL extern char * stringReplaceSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *ploc, l_int32 *pfound ); +LEPT_DLL extern L_DNA * stringFindEachSubstr ( const char *src, const char *sub ); +LEPT_DLL extern l_int32 stringFindSubstr ( const char *src, const char *sub, l_int32 *ploc ); +LEPT_DLL extern l_uint8 * arrayReplaceEachSequence ( const l_uint8 *datas, size_t dataslen, const l_uint8 *seq, size_t seqlen, const l_uint8 *newseq, size_t newseqlen, size_t *pdatadlen, l_int32 *pcount ); +LEPT_DLL extern L_DNA * arrayFindEachSequence ( const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen ); +LEPT_DLL extern l_ok arrayFindSequence ( const l_uint8 *data, size_t datalen, const l_uint8 *sequence, size_t seqlen, l_int32 *poffset, l_int32 *pfound ); +LEPT_DLL extern void * reallocNew ( void **pindata, l_int32 oldsize, l_int32 newsize ); +LEPT_DLL extern l_uint8 * l_binaryRead ( const char *filename, size_t *pnbytes ); +LEPT_DLL extern l_uint8 * l_binaryReadStream ( FILE *fp, size_t *pnbytes ); +LEPT_DLL extern l_uint8 * l_binaryReadSelect ( const char *filename, size_t start, size_t nbytes, size_t *pnread ); +LEPT_DLL extern l_uint8 * l_binaryReadSelectStream ( FILE *fp, size_t start, size_t nbytes, size_t *pnread ); +LEPT_DLL extern l_ok l_binaryWrite ( const char *filename, const char *operation, const void *data, size_t nbytes ); +LEPT_DLL extern size_t nbytesInFile ( const char *filename ); +LEPT_DLL extern size_t fnbytesInFile ( FILE *fp ); +LEPT_DLL extern l_uint8 * l_binaryCopy ( const l_uint8 *datas, size_t size ); +LEPT_DLL extern l_ok l_binaryCompare ( const l_uint8 *data1, size_t size1, const l_uint8 *data2, size_t size2, l_int32 *psame ); +LEPT_DLL extern l_ok fileCopy ( const char *srcfile, const char *newfile ); +LEPT_DLL extern l_ok fileConcatenate ( const char *srcfile, const char *destfile ); +LEPT_DLL extern l_ok fileAppendString ( const char *filename, const char *str ); +LEPT_DLL extern FILE * fopenReadStream ( const char *filename ); +LEPT_DLL extern FILE * fopenWriteStream ( const char *filename, const char *modestring ); +LEPT_DLL extern FILE * fopenReadFromMemory ( const l_uint8 *data, size_t size ); +LEPT_DLL extern FILE * fopenWriteWinTempfile ( ); +LEPT_DLL extern FILE * lept_fopen ( const char *filename, const char *mode ); +LEPT_DLL extern l_ok lept_fclose ( FILE *fp ); +LEPT_DLL extern void * lept_calloc ( size_t nmemb, size_t size ); +LEPT_DLL extern void lept_free ( void *ptr ); +LEPT_DLL extern l_int32 lept_mkdir ( const char *subdir ); +LEPT_DLL extern l_int32 lept_rmdir ( const char *subdir ); +LEPT_DLL extern void lept_direxists ( const char *dir, l_int32 *pexists ); +LEPT_DLL extern l_int32 lept_rm_match ( const char *subdir, const char *substr ); +LEPT_DLL extern l_int32 lept_rm ( const char *subdir, const char *tail ); +LEPT_DLL extern l_int32 lept_rmfile ( const char *filepath ); +LEPT_DLL extern l_int32 lept_mv ( const char *srcfile, const char *newdir, const char *newtail, char **pnewpath ); +LEPT_DLL extern l_int32 lept_cp ( const char *srcfile, const char *newdir, const char *newtail, char **pnewpath ); +LEPT_DLL extern void callSystemDebug ( const char *cmd ); +LEPT_DLL extern l_ok splitPathAtDirectory ( const char *pathname, char **pdir, char **ptail ); +LEPT_DLL extern l_ok splitPathAtExtension ( const char *pathname, char **pbasename, char **pextension ); +LEPT_DLL extern char * pathJoin ( const char *dir, const char *fname ); +LEPT_DLL extern char * appendSubdirs ( const char *basedir, const char *subdirs ); +LEPT_DLL extern l_ok convertSepCharsInPath ( char *path, l_int32 type ); +LEPT_DLL extern char * genPathname ( const char *dir, const char *fname ); +LEPT_DLL extern l_ok makeTempDirname ( char *result, size_t nbytes, const char *subdir ); +LEPT_DLL extern l_ok modifyTrailingSlash ( char *path, size_t nbytes, l_int32 flag ); +LEPT_DLL extern char * l_makeTempFilename ( ); +LEPT_DLL extern l_int32 extractNumberFromFilename ( const char *fname, l_int32 numpre, l_int32 numpost ); +LEPT_DLL extern PIX * pixSimpleCaptcha ( PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag ); +LEPT_DLL extern PIX * pixRandomHarmonicWarp ( PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval ); +LEPT_DLL extern PIX * pixWarpStereoscopic ( PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft ); +LEPT_DLL extern PIX * pixStretchHorizontal ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor ); +LEPT_DLL extern PIX * pixStretchHorizontalSampled ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); +LEPT_DLL extern PIX * pixStretchHorizontalLI ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); +LEPT_DLL extern PIX * pixQuadraticVShear ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor ); +LEPT_DLL extern PIX * pixQuadraticVShearSampled ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); +LEPT_DLL extern PIX * pixQuadraticVShearLI ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); +LEPT_DLL extern PIX * pixStereoFromPair ( PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt ); +LEPT_DLL extern L_WSHED * wshedCreate ( PIX *pixs, PIX *pixm, l_int32 mindepth, l_int32 debugflag ); +LEPT_DLL extern void wshedDestroy ( L_WSHED **pwshed ); +LEPT_DLL extern l_ok wshedApply ( L_WSHED *wshed ); +LEPT_DLL extern l_ok wshedBasins ( L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels ); +LEPT_DLL extern PIX * wshedRenderFill ( L_WSHED *wshed ); +LEPT_DLL extern PIX * wshedRenderColors ( L_WSHED *wshed ); +LEPT_DLL extern l_ok pixaWriteWebPAnim ( const char *filename, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern l_ok pixaWriteStreamWebPAnim ( FILE *fp, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern l_ok pixaWriteMemWebPAnim ( l_uint8 **pencdata, size_t *pencsize, PIXA *pixa, l_int32 loopcount, l_int32 duration, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern PIX * pixReadStreamWebP ( FILE *fp ); +LEPT_DLL extern PIX * pixReadMemWebP ( const l_uint8 *filedata, size_t filesize ); +LEPT_DLL extern l_ok readHeaderWebP ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); +LEPT_DLL extern l_ok readHeaderMemWebP ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); +LEPT_DLL extern l_ok pixWriteWebP ( const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern l_ok pixWriteStreamWebP ( FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern l_ok pixWriteMemWebP ( l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless ); +LEPT_DLL extern l_int32 l_jpegSetQuality ( l_int32 new_quality ); +LEPT_DLL extern void setLeptDebugOK ( l_int32 allow ); +LEPT_DLL extern l_ok pixaWriteFiles ( const char *rootname, PIXA *pixa, l_int32 format ); +LEPT_DLL extern l_ok pixWriteDebug ( const char *fname, PIX *pix, l_int32 format ); +LEPT_DLL extern l_ok pixWrite ( const char *fname, PIX *pix, l_int32 format ); +LEPT_DLL extern l_ok pixWriteAutoFormat ( const char *filename, PIX *pix ); +LEPT_DLL extern l_ok pixWriteStream ( FILE *fp, PIX *pix, l_int32 format ); +LEPT_DLL extern l_ok pixWriteImpliedFormat ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); +LEPT_DLL extern l_int32 pixChooseOutputFormat ( PIX *pix ); +LEPT_DLL extern l_int32 getImpliedFileFormat ( const char *filename ); +LEPT_DLL extern l_ok pixGetAutoFormat ( PIX *pix, l_int32 *pformat ); +LEPT_DLL extern const char * getFormatExtension ( l_int32 format ); +LEPT_DLL extern l_ok pixWriteMem ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format ); +LEPT_DLL extern l_ok l_fileDisplay ( const char *fname, l_int32 x, l_int32 y, l_float32 scale ); +LEPT_DLL extern l_ok pixDisplay ( PIX *pixs, l_int32 x, l_int32 y ); +LEPT_DLL extern l_ok pixDisplayWithTitle ( PIX *pixs, l_int32 x, l_int32 y, const char *title, l_int32 dispflag ); +LEPT_DLL extern l_ok pixSaveTiled ( PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 dp ); +LEPT_DLL extern l_ok pixSaveTiledOutline ( PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 linewidth, l_int32 dp ); +LEPT_DLL extern l_ok pixSaveTiledWithText ( PIX *pixs, PIXA *pixa, l_int32 outwidth, l_int32 newrow, l_int32 space, l_int32 linewidth, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); +LEPT_DLL extern void l_chooseDisplayProg ( l_int32 selection ); +LEPT_DLL extern l_ok pixDisplayWrite ( PIX *pixs, l_int32 reduction ); +LEPT_DLL extern l_uint8 * zlibCompress ( l_uint8 *datain, size_t nin, size_t *pnout ); +LEPT_DLL extern l_uint8 * zlibUncompress ( l_uint8 *datain, size_t nin, size_t *pnout ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ +#endif /* NO_PROTOS */ + + +#endif /* LEPTONICA_ALLHEADERS_H */ + diff --git a/3rdparty/hgOCR/leptonica/alltypes.h b/3rdparty/hgOCR/leptonica/alltypes.h new file mode 100644 index 00000000..a84c0bfa --- /dev/null +++ b/3rdparty/hgOCR/leptonica/alltypes.h @@ -0,0 +1,66 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_ALLTYPES_H +#define LEPTONICA_ALLTYPES_H + + /* Standard */ +#include +#include +#include + + /* General and configuration defs */ +#include "endianness.h" +#include "environ.h" + + /* Generic and non-image-specific containers */ +#include "array.h" +#include "bbuffer.h" +#include "heap.h" +#include "list.h" +#include "ptra.h" +#include "queue.h" +#include "rbtree.h" +#include "stack.h" + + /* Imaging */ +#include "arrayaccess.h" +#include "bmf.h" +#include "ccbord.h" +#include "dewarp.h" +#include "gplot.h" +#include "imageio.h" +#include "jbclass.h" +#include "morph.h" +#include "pix.h" +#include "recog.h" +#include "regutils.h" +#include "stringcode.h" +#include "sudoku.h" +#include "watershed.h" + + +#endif /* LEPTONICA_ALLTYPES_H */ diff --git a/3rdparty/hgOCR/leptonica/array.h b/3rdparty/hgOCR/leptonica/array.h new file mode 100644 index 00000000..5c13977a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/array.h @@ -0,0 +1,158 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_ARRAY_H +#define LEPTONICA_ARRAY_H + +/*! + * \file array.h + * + *
+ *  Contains the following structs:
+ *      struct Numa
+ *      struct Numaa
+ *      struct L_Dna
+ *      struct L_Dnaa
+ *      struct L_DnaHash
+ *      struct Sarray
+ *      struct L_Bytea
+ *
+ *  Contains definitions for:
+ *      Numa interpolation flags
+ *      Numa and FPix border flags
+ *      Numa data type conversion to string
+ * 
+ */ + + +/*------------------------------------------------------------------------* + * Array Structs * + *------------------------------------------------------------------------*/ + +/*! Numa version for serialization */ +#define NUMA_VERSION_NUMBER 1 + + /*! Number array: an array of floats */ +struct Numa +{ + l_int32 nalloc; /*!< size of allocated number array */ + l_int32 n; /*!< number of numbers saved */ + l_int32 refcount; /*!< reference count (1 if no clones) */ + l_float32 startx; /*!< x value assigned to array[0] */ + l_float32 delx; /*!< change in x value as i --> i + 1 */ + l_float32 *array; /*!< number array */ +}; +typedef struct Numa NUMA; + + /*! Array of number arrays */ +struct Numaa +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 n; /*!< number of Numa saved */ + struct Numa **numa; /*!< array of Numa */ +}; +typedef struct Numaa NUMAA; + +/*! Dna version for serialization */ +#define DNA_VERSION_NUMBER 1 + + /*! Double number array: an array of doubles */ +struct L_Dna +{ + l_int32 nalloc; /*!< size of allocated number array */ + l_int32 n; /*!< number of numbers saved */ + l_int32 refcount; /*!< reference count (1 if no clones) */ + l_float64 startx; /*!< x value assigned to array[0] */ + l_float64 delx; /*!< change in x value as i --> i + 1 */ + l_float64 *array; /*!< number array */ +}; +typedef struct L_Dna L_DNA; + + /*! Array of double number arrays */ +struct L_Dnaa +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 n; /*!< number of L_Dna saved */ + struct L_Dna **dna; /*!< array of L_Dna */ +}; +typedef struct L_Dnaa L_DNAA; + + /*! A hash table of Dnas */ +struct L_DnaHash +{ + l_int32 nbuckets; + l_int32 initsize; /*!< initial size of each dna that is made */ + struct L_Dna **dna; /*!< array of L_Dna */ +}; +typedef struct L_DnaHash L_DNAHASH; + +/*! Sarray version for serialization */ +#define SARRAY_VERSION_NUMBER 1 + + /*! String array: an array of C strings */ +struct Sarray +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 n; /*!< number of strings allocated */ + l_int32 refcount; /*!< reference count (1 if no clones) */ + char **array; /*!< string array */ +}; +typedef struct Sarray SARRAY; + + /*! Byte array (analogous to C++ "string") */ +struct L_Bytea +{ + size_t nalloc; /*!< number of bytes allocated in data array */ + size_t size; /*!< number of bytes presently used */ + l_int32 refcount; /*!< reference count (1 if no clones) */ + l_uint8 *data; /*!< data array */ +}; +typedef struct L_Bytea L_BYTEA; + + +/*------------------------------------------------------------------------* + * Array flags * + *------------------------------------------------------------------------*/ +/*! Numa Interpolation */ +enum { + L_LINEAR_INTERP = 1, /*!< linear */ + L_QUADRATIC_INTERP = 2 /*!< quadratic */ +}; + +/*! Border Adding */ +enum { + L_CONTINUED_BORDER = 1, /*!< extended with same value */ + L_SLOPE_BORDER = 2, /*!< extended with constant normal derivative */ + L_MIRRORED_BORDER = 3 /*!< mirrored */ +}; + +/*! Numa Data Conversion */ +enum { + L_INTEGER_VALUE = 1, /*!< convert to integer */ + L_FLOAT_VALUE = 2 /*!< convert to float */ +}; + +#endif /* LEPTONICA_ARRAY_H */ diff --git a/3rdparty/hgOCR/leptonica/arrayaccess.c b/3rdparty/hgOCR/leptonica/arrayaccess.c new file mode 100644 index 00000000..69cdb6f1 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/arrayaccess.c @@ -0,0 +1,364 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file arrayaccess.c + *
+ *
+ *     Access within an array of 32-bit words
+ *
+ *           l_int32     l_getDataBit()
+ *           void        l_setDataBit()
+ *           void        l_clearDataBit()
+ *           void        l_setDataBitVal()
+ *           l_int32     l_getDataDibit()
+ *           void        l_setDataDibit()
+ *           void        l_clearDataDibit()
+ *           l_int32     l_getDataQbit()
+ *           void        l_setDataQbit()
+ *           void        l_clearDataQbit()
+ *           l_int32     l_getDataByte()
+ *           void        l_setDataByte()
+ *           l_int32     l_getDataTwoBytes()
+ *           void        l_setDataTwoBytes()
+ *           l_int32     l_getDataFourBytes()
+ *           void        l_setDataFourBytes()
+ *
+ *     Note that these all require 32-bit alignment, and hence an input
+ *     ptr to l_uint32.  However, this is not enforced by the compiler.
+ *     Instead, we allow the use of a void* ptr, because the line ptrs
+ *     are an efficient way to get random access (see pixGetLinePtrs()).
+ *     It is then necessary to cast internally within each function
+ *     because ptr arithmetic requires knowing the size of the units
+ *     being referenced.
+ * 
+ */ + +#include "allheaders.h" + + +/*----------------------------------------------------------------------* + * Access within an array of 32-bit words * + *----------------------------------------------------------------------*/ +/*! + * \brief l_getDataBit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return val of the nth 1-bit pixel. + */ +l_int32 +l_getDataBit(const void *line, + l_int32 n) +{ + return (*((const l_uint32 *)line + (n >> 5)) >> (31 - (n & 31))) & 1; +} + + +/*! + * \brief l_setDataBit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return void + * + * Action: sets the pixel to 1 + */ +void +l_setDataBit(void *line, + l_int32 n) +{ + *((l_uint32 *)line + (n >> 5)) |= (0x80000000 >> (n & 31)); +} + + +/*! + * \brief l_clearDataBit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return void + * + * Action: sets the 1-bit pixel to 0 + */ +void +l_clearDataBit(void *line, + l_int32 n) +{ + *((l_uint32 *)line + (n >> 5)) &= ~(0x80000000 >> (n & 31)); +} + + +/*! + * \brief l_setDataBitVal() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 or 1 + * \return void + * + *
+ * Notes:
+ *      (1) This is an accessor for a 1 bpp pix.
+ *      (2) It is actually a little slower than using:
+ *            if (val == 0)
+ *                l_ClearDataBit(line, n);
+ *            else
+ *                l_SetDataBit(line, n);
+ * 
+ */ +void +l_setDataBitVal(void *line, + l_int32 n, + l_int32 val) +{ +l_uint32 *pword; + + pword = (l_uint32 *)line + (n >> 5); + *pword &= ~(0x80000000 >> (n & 31)); /* clear */ + *pword |= (l_uint32)val << (31 - (n & 31)); /* set */ + return; +} + + +/*! + * \brief l_getDataDibit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return val of the nth 2-bit pixel. + */ +l_int32 +l_getDataDibit(const void *line, + l_int32 n) +{ + return (*((const l_uint32 *)line + (n >> 4)) >> (2 * (15 - (n & 15)))) & 3; +} + + +/*! + * \brief l_setDataDibit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 - 3 + * \return void + */ +void +l_setDataDibit(void *line, + l_int32 n, + l_int32 val) +{ +l_uint32 *pword; + + pword = (l_uint32 *)line + (n >> 4); + *pword &= ~(0xc0000000 >> (2 * (n & 15))); /* clear */ + *pword |= (l_uint32)(val & 3) << (30 - 2 * (n & 15)); /* set */ + return; +} + + +/*! + * \brief l_clearDataDibit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return void + * + * Action: sets the 2-bit pixel to 0 + */ +void +l_clearDataDibit(void *line, + l_int32 n) +{ + *((l_uint32 *)line + (n >> 4)) &= ~(0xc0000000 >> (2 * (n & 15))); +} + + +/*! + * \brief l_getDataQbit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return val of the nth 4-bit pixel. + */ +l_int32 +l_getDataQbit(const void *line, + l_int32 n) +{ + return (*((const l_uint32 *)line + (n >> 3)) >> (4 * (7 - (n & 7)))) & 0xf; +} + + +/*! + * \brief l_setDataQbit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 - 0xf + * \return void + */ +void +l_setDataQbit(void *line, + l_int32 n, + l_int32 val) +{ +l_uint32 *pword; + + pword = (l_uint32 *)line + (n >> 3); + *pword &= ~(0xf0000000 >> (4 * (n & 7))); /* clear */ + *pword |= (l_uint32)(val & 15) << (28 - 4 * (n & 7)); /* set */ + return; +} + + +/*! + * \brief l_clearDataQbit() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return void + * + * Action: sets the 4-bit pixel to 0 + */ +void +l_clearDataQbit(void *line, + l_int32 n) +{ + *((l_uint32 *)line + (n >> 3)) &= ~(0xf0000000 >> (4 * (n & 7))); +} + + +/*! + * \brief l_getDataByte() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return value of the n-th byte pixel + */ +l_int32 +l_getDataByte(const void *line, + l_int32 n) +{ +#ifdef L_BIG_ENDIAN + return *((const l_uint8 *)line + n); +#else /* L_LITTLE_ENDIAN */ + return *(l_uint8 *)((l_uintptr_t)((const l_uint8 *)line + n) ^ 3); +#endif /* L_BIG_ENDIAN */ +} + + +/*! + * \brief l_setDataByte() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 - 0xff + * \return void + */ +void +l_setDataByte(void *line, + l_int32 n, + l_int32 val) +{ +#ifdef L_BIG_ENDIAN + *((l_uint8 *)line + n) = val; +#else /* L_LITTLE_ENDIAN */ + *(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val; +#endif /* L_BIG_ENDIAN */ +} + + +/*! + * \brief l_getDataTwoBytes() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return value of the n-th 2-byte pixel + */ +l_int32 +l_getDataTwoBytes(const void *line, + l_int32 n) +{ +#ifdef L_BIG_ENDIAN + return *((const l_uint16 *)line + n); +#else /* L_LITTLE_ENDIAN */ + return *(l_uint16 *)((l_uintptr_t)((const l_uint16 *)line + n) ^ 2); +#endif /* L_BIG_ENDIAN */ +} + + +/*! + * \brief l_setDataTwoBytes() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 - 0xffff + * \return void + */ +void +l_setDataTwoBytes(void *line, + l_int32 n, + l_int32 val) +{ +#ifdef L_BIG_ENDIAN + *((l_uint16 *)line + n) = val; +#else /* L_LITTLE_ENDIAN */ + *(l_uint16 *)((l_uintptr_t)((l_uint16 *)line + n) ^ 2) = val; +#endif /* L_BIG_ENDIAN */ +} + + +/*! + * \brief l_getDataFourBytes() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \return value of the n-th 4-byte pixel + */ +l_int32 +l_getDataFourBytes(const void *line, + l_int32 n) +{ + return *((const l_uint32 *)line + n); +} + + +/*! + * \brief l_setDataFourBytes() + * + * \param[in] line ptr to beginning of data line + * \param[in] n pixel index + * \param[in] val val to be inserted: 0 - 0xffffffff + * \return void + */ +void +l_setDataFourBytes(void *line, + l_int32 n, + l_int32 val) +{ + *((l_uint32 *)line + n) = val; +} diff --git a/3rdparty/hgOCR/leptonica/arrayaccess.h b/3rdparty/hgOCR/leptonica/arrayaccess.h new file mode 100644 index 00000000..1a831bcc --- /dev/null +++ b/3rdparty/hgOCR/leptonica/arrayaccess.h @@ -0,0 +1,270 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_ARRAY_ACCESS_H +#define LEPTONICA_ARRAY_ACCESS_H + +/*! + * \file arrayaccess.h + * + *
+ *  1, 2, 4, 8, 16 and 32 bit data access within an array of 32-bit words
+ *
+ *  This is used primarily to access 1, 2, 4, 8, 16 and 32 bit pixels
+ *  in a line of image data, represented as an array of 32-bit words.
+ *
+ *     pdata:  pointer to first 32-bit word in the array
+ *     n:      index of the pixel in the array
+ *
+ *  Function calls for these accessors are defined in arrayaccess.c.
+ *
+ *  However, for efficiency we use the inline macros for all accesses.
+ *  Even though the 2 and 4 bit set* accessors are more complicated,
+ *  they are about 10% faster than the function calls.
+ *
+ *  The 32 bit access is just a cast and ptr arithmetic.  We include
+ *  it so that the input ptr can be void*.
+ *
+ *  At the end of this file is code for invoking the function calls
+ *  instead of inlining.
+ *
+ *  The macro SET_DATA_BIT_VAL(pdata, n, val) is a bit slower than
+ *      if (val == 0)
+ *          CLEAR_DATA_BIT(pdata, n);
+ *      else
+ *          SET_DATA_BIT(pdata, n);
+ *
+ *  Some compilers complain when the SET macros are surrounded by
+ *  parentheses, because parens require an evaluation and it is not
+ *  defined for SET macros.  If SET_DATA_QBIT were defined as a
+ *  compound macro, in analogy to l_setDataQbit(), it requires
+ *  surrounding braces:
+ * \code
+ *     #define  SET_DATA_QBIT(pdata, n, val) \
+ *        {l_uint32 *_TEMP_WORD_PTR_; \
+ *         _TEMP_WORD_PTR_ = (l_uint32 *)(pdata) + ((n) >> 3); \
+ *         *_TEMP_WORD_PTR_ &= ~(0xf0000000 >> (4 * ((n) & 7))); \
+ *         *_TEMP_WORD_PTR_ |= (((val) & 15) << (28 - 4 * ((n) & 7)));}
+ * \endcode
+ *  but if used in an if/else
+ * \code
+ *      if (x)
+ *         SET_DATA_QBIT(...);
+ *      else
+ *         ...
+ * \endcode
+ *  the compiler sees
+ * \code
+ *      if (x)
+ *         {......};
+ *      else
+ *         ...
+ * \endcode
+ *  The semicolon comes after the brace and will not compile.
+ *  This can be fixed in the call by either omitting the semicolon
+ *  or requiring another set of braces around SET_DATA_QBIT(), but
+ *  both these options break compatibility with current code, and
+ *  require special attention by anyone using the macros.
+ *
+ *  There are (at least) two ways to fix this in the macro definitions,
+ *  suggested by Dave Bryan.
+ *  (1) Surround the braces in the macro above with
+ *         do {....} while(0)
+ *      Then the semicolon just terminates the expression.
+ *  (2) Reduce the blocks to a single expression; e.g,
+ *         *((l_uint32 *)(pdata) + ((n) >> 3)) = \
+ *           *((l_uint32 *)(pdata) + ((n) >> 3)) \
+ *           & ~(0xf0000000 >> (4 * ((n) & 7))) \
+ *           | (((val) & 15) << (28 - 4 * ((n) & 7)))
+ *      This appears to cause redundant computation, but the compiler
+ *      should evaluate the common subexpression only once.
+ *  All these methods have the same performance, giving about 300M
+ *  SET_DATA_QBIT operations per second on a fast 64 bit system.
+ *  Using the function calls instead of the macros results in about 250M
+ *  SET_DATA_QBIT operations per second, a performance hit of nearly 20%.
+ * 
+ */ + +#define USE_INLINE_ACCESSORS 1 + +#if USE_INLINE_ACCESSORS + + /*=============================================================*/ + /* Faster: use in line accessors */ + /*=============================================================*/ + + /*--------------------------------------------------* + * 1 bit access * + *--------------------------------------------------*/ +/*! 1 bit access - get */ +#define GET_DATA_BIT(pdata, n) \ + ((*((const l_uint32 *)(pdata) + ((n) >> 5)) >> (31 - ((n) & 31))) & 1) + +/*! 1 bit access - set */ +#define SET_DATA_BIT(pdata, n) \ + *((l_uint32 *)(pdata) + ((n) >> 5)) |= (0x80000000 >> ((n) & 31)) + +/*! 1 bit access - clear */ +#define CLEAR_DATA_BIT(pdata, n) \ + *((l_uint32 *)(pdata) + ((n) >> 5)) &= ~(0x80000000 >> ((n) & 31)) + +/*! 1 bit access - set value (0 or 1) */ +#define SET_DATA_BIT_VAL(pdata, n, val) \ + *((l_uint32 *)(pdata) + ((n) >> 5)) = \ + ((*((l_uint32 *)(pdata) + ((n) >> 5)) \ + & (~(0x80000000 >> ((n) & 31)))) \ + | ((l_uint32)(val) << (31 - ((n) & 31)))) + + /*--------------------------------------------------* + * 2 bit access * + *--------------------------------------------------*/ +/*! 2 bit access - get */ +#define GET_DATA_DIBIT(pdata, n) \ + ((*((const l_uint32 *)(pdata) + ((n) >> 4)) >> (2 * (15 - ((n) & 15)))) & 3) + +/*! 2 bit access - set value (0 ... 3) */ +#define SET_DATA_DIBIT(pdata, n, val) \ + *((l_uint32 *)(pdata) + ((n) >> 4)) = \ + ((*((l_uint32 *)(pdata) + ((n) >> 4)) \ + & (~(0xc0000000 >> (2 * ((n) & 15))))) \ + | ((l_uint32)((val) & 3) << (30 - 2 * ((n) & 15)))) + +/*! 2 bit access - clear */ +#define CLEAR_DATA_DIBIT(pdata, n) \ + *((l_uint32 *)(pdata) + ((n) >> 4)) &= ~(0xc0000000 >> (2 * ((n) & 15))) + + + /*--------------------------------------------------* + * 4 bit access * + *--------------------------------------------------*/ +/*! 4 bit access - get */ +#define GET_DATA_QBIT(pdata, n) \ + ((*((const l_uint32 *)(pdata) + ((n) >> 3)) >> (4 * (7 - ((n) & 7)))) & 0xf) + +/*! 4 bit access - set value (0 ... 15) */ +#define SET_DATA_QBIT(pdata, n, val) \ + *((l_uint32 *)(pdata) + ((n) >> 3)) = \ + ((*((l_uint32 *)(pdata) + ((n) >> 3)) \ + & (~(0xf0000000 >> (4 * ((n) & 7))))) \ + | ((l_uint32)((val) & 15) << (28 - 4 * ((n) & 7)))) + +/*! 4 bit access - clear */ +#define CLEAR_DATA_QBIT(pdata, n) \ + *((l_uint32 *)(pdata) + ((n) >> 3)) &= ~(0xf0000000 >> (4 * ((n) & 7))) + + + /*--------------------------------------------------* + * 8 bit access * + *--------------------------------------------------*/ +#ifdef L_BIG_ENDIAN +/*! 8 bit access - get */ +#define GET_DATA_BYTE(pdata, n) \ + (*((const l_uint8 *)(pdata) + (n))) +#else /* L_LITTLE_ENDIAN */ +/*! 8 bit access - get */ +#define GET_DATA_BYTE(pdata, n) \ + (*(l_uint8 *)((l_uintptr_t)((const l_uint8 *)(pdata) + (n)) ^ 3)) +#endif /* L_BIG_ENDIAN */ + +#ifdef L_BIG_ENDIAN +/*! 8 bit access - set value (0 ... 255) */ +#define SET_DATA_BYTE(pdata, n, val) \ + *((l_uint8 *)(pdata) + (n)) = (val) +#else /* L_LITTLE_ENDIAN */ +/*! 8 bit access - set value (0 ... 255) */ +#define SET_DATA_BYTE(pdata, n, val) \ + *(l_uint8 *)((l_uintptr_t)((l_uint8 *)(pdata) + (n)) ^ 3) = (val) +#endif /* L_BIG_ENDIAN */ + + + /*--------------------------------------------------* + * 16 bit access * + *--------------------------------------------------*/ +#ifdef L_BIG_ENDIAN +/*! 16 bit access - get */ +#define GET_DATA_TWO_BYTES(pdata, n) \ + (*((const l_uint16 *)(pdata) + (n))) +#else /* L_LITTLE_ENDIAN */ +/*! 16 bit access - get */ +#define GET_DATA_TWO_BYTES(pdata, n) \ + (*(l_uint16 *)((l_uintptr_t)((const l_uint16 *)(pdata) + (n)) ^ 2)) +#endif /* L_BIG_ENDIAN */ + +#ifdef L_BIG_ENDIAN +/*! 16 bit access - set value (0 ... 65535) */ +#define SET_DATA_TWO_BYTES(pdata, n, val) \ + *((l_uint16 *)(pdata) + (n)) = (val) +#else /* L_LITTLE_ENDIAN */ +/*! 16 bit access - set value (0 ... 65535) */ +#define SET_DATA_TWO_BYTES(pdata, n, val) \ + *(l_uint16 *)((l_uintptr_t)((l_uint16 *)(pdata) + (n)) ^ 2) = (val) +#endif /* L_BIG_ENDIAN */ + + + /*--------------------------------------------------* + * 32 bit access * + *--------------------------------------------------*/ +/*! 32 bit access - get */ +#define GET_DATA_FOUR_BYTES(pdata, n) \ + (*((const l_uint32 *)(pdata) + (n))) + +/*! 32 bit access - set (0 ... 4294967295) */ +#define SET_DATA_FOUR_BYTES(pdata, n, val) \ + *((l_uint32 *)(pdata) + (n)) = (val) + + +#else + + /*=============================================================*/ + /* Slower: use function calls for all accessors */ + /*=============================================================*/ + +#define GET_DATA_BIT(pdata, n) l_getDataBit(pdata, n) +#define SET_DATA_BIT(pdata, n) l_setDataBit(pdata, n) +#define CLEAR_DATA_BIT(pdata, n) l_clearDataBit(pdata, n) +#define SET_DATA_BIT_VAL(pdata, n, val) l_setDataBitVal(pdata, n, val) + +#define GET_DATA_DIBIT(pdata, n) l_getDataDibit(pdata, n) +#define SET_DATA_DIBIT(pdata, n, val) l_setDataDibit(pdata, n, val) +#define CLEAR_DATA_DIBIT(pdata, n) l_clearDataDibit(pdata, n) + +#define GET_DATA_QBIT(pdata, n) l_getDataQbit(pdata, n) +#define SET_DATA_QBIT(pdata, n, val) l_setDataQbit(pdata, n, val) +#define CLEAR_DATA_QBIT(pdata, n) l_clearDataQbit(pdata, n) + +#define GET_DATA_BYTE(pdata, n) l_getDataByte(pdata, n) +#define SET_DATA_BYTE(pdata, n, val) l_setDataByte(pdata, n, val) + +#define GET_DATA_TWO_BYTES(pdata, n) l_getDataTwoBytes(pdata, n) +#define SET_DATA_TWO_BYTES(pdata, n, val) l_setDataTwoBytes(pdata, n, val) + +#define GET_DATA_FOUR_BYTES(pdata, n) l_getDataFourBytes(pdata, n) +#define SET_DATA_FOUR_BYTES(pdata, n, val) l_setDataFourBytes(pdata, n, val) + +#endif /* USE_INLINE_ACCESSORS */ + + +#endif /* LEPTONICA_ARRAY_ACCESS_H */ diff --git a/3rdparty/hgOCR/leptonica/bardecode.c b/3rdparty/hgOCR/leptonica/bardecode.c new file mode 100644 index 00000000..5008bbc0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bardecode.c @@ -0,0 +1,1033 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bardecode.c + *
+ *
+ *      Dispatcher
+ *          char            *barcodeDispatchDecoder()
+ *
+ *      Format Determination
+ *          static l_int32   barcodeFindFormat()
+ *          l_int32          barcodeFormatIsSupported()
+ *          static l_int32   barcodeVerifyFormat()
+ *
+ *      Decode 2 of 5
+ *          static char     *barcodeDecode2of5()
+ *
+ *      Decode Interleaved 2 of 5
+ *          static char     *barcodeDecodeI2of5()
+ *
+ *      Decode Code 93
+ *          static char     *barcodeDecode93()
+ *
+ *      Decode Code 39
+ *          static char     *barcodeDecode39()
+ *
+ *      Decode Codabar
+ *          static char     *barcodeDecodeCodabar()
+ *
+ *      Decode UPC-A
+ *          static char     *barcodeDecodeUpca()
+ *
+ *      Decode EAN 13
+ *          static char     *barcodeDecodeEan13()
+ * 
+ */ + +#include +#include "allheaders.h" +#include "readbarcode.h" + + +static l_int32 barcodeFindFormat(char *barstr); +static l_int32 barcodeVerifyFormat(char *barstr, l_int32 format, + l_int32 *pvalid, l_int32 *preverse); +static char *barcodeDecode2of5(char *barstr, l_int32 debugflag); +static char *barcodeDecodeI2of5(char *barstr, l_int32 debugflag); +static char *barcodeDecode93(char *barstr, l_int32 debugflag); +static char *barcodeDecode39(char *barstr, l_int32 debugflag); +static char *barcodeDecodeCodabar(char *barstr, l_int32 debugflag); +static char *barcodeDecodeUpca(char *barstr, l_int32 debugflag); +static char *barcodeDecodeEan13(char *barstr, l_int32 first, l_int32 debugflag); + + +#ifndef NO_CONSOLE_IO +#define DEBUG_CODES 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------------* + * Decoding dispatcher * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDispatchDecoder() + * + * \param[in] barstr string of integers in set {1,2,3,4} of bar widths + * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... + * \param[in] debugflag use 1 to generate debug output + * \return data string of decoded barcode data, or NULL on error + */ +char * +barcodeDispatchDecoder(char *barstr, + l_int32 format, + l_int32 debugflag) +{ +char *data = NULL; + + PROCNAME("barcodeDispatchDecoder"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + debugflag = FALSE; /* not used yet */ + + if (format == L_BF_ANY) + format = barcodeFindFormat(barstr); + + if (format == L_BF_CODE2OF5) + data = barcodeDecode2of5(barstr, debugflag); + else if (format == L_BF_CODEI2OF5) + data = barcodeDecodeI2of5(barstr, debugflag); + else if (format == L_BF_CODE93) + data = barcodeDecode93(barstr, debugflag); + else if (format == L_BF_CODE39) + data = barcodeDecode39(barstr, debugflag); + else if (format == L_BF_CODABAR) + data = barcodeDecodeCodabar(barstr, debugflag); + else if (format == L_BF_UPCA) + data = barcodeDecodeUpca(barstr, debugflag); + else if (format == L_BF_EAN13) + data = barcodeDecodeEan13(barstr, 0, debugflag); + else + return (char *)ERROR_PTR("format not implemented", procName, NULL); + + return data; +} + + +/*------------------------------------------------------------------------* + * Barcode format determination * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeFindFormat() + * + * \param[in] barstr of barcode widths, in set {1,2,3,4} + * \return format for barcode, or L_BF_UNKNOWN if not recognized + */ +static l_int32 +barcodeFindFormat(char *barstr) +{ +l_int32 i, format, valid; + + PROCNAME("barcodeFindFormat"); + + if (!barstr) + return ERROR_INT("barstr not defined", procName, L_BF_UNKNOWN); + + for (i = 0; i < NumSupportedBarcodeFormats; i++) { + format = SupportedBarcodeFormat[i]; + barcodeVerifyFormat(barstr, format, &valid, NULL); + if (valid) { + L_INFO("Barcode format: %s\n", procName, + SupportedBarcodeFormatName[i]); + return format; + } + } + return L_BF_UNKNOWN; +} + + +/*! + * \brief barcodeFormatIsSupported() + * + * \param[in] format + * \return 1 if format is one of those supported; 0 otherwise + * + */ +l_int32 +barcodeFormatIsSupported(l_int32 format) +{ +l_int32 i; + + for (i = 0; i < NumSupportedBarcodeFormats; i++) { + if (format == SupportedBarcodeFormat[i]) + return 1; + } + return 0; +} + + +/*! + * \brief barcodeVerifyFormat() + * + * \param[in] barstr of barcode widths, in set {1,2,3,4} + * \param[in] format L_BF_CODEI2OF5, L_BF_CODE93, ... + * \param[out] pvalid 0 if not valid, 1 and 2 if valid + * \param[out] preverse [optional] 1 if reversed; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If valid == 1, the barcode is of the given format in the
+ *          forward order; if valid == 2, it is backwards.
+ *      (2) If the barcode needs to be reversed to read it, and &reverse
+ *          is provided, a 1 is put into %reverse.
+ *      (3) Add to this as more formats are supported.
+ * 
+ */ +static l_int32 +barcodeVerifyFormat(char *barstr, + l_int32 format, + l_int32 *pvalid, + l_int32 *preverse) +{ +char *revbarstr; +l_int32 i, start, len, stop, mid; + + PROCNAME("barcodeVerifyFormat"); + + if (!pvalid) + return ERROR_INT("barstr not defined", procName, 1); + *pvalid = 0; + if (preverse) *preverse = 0; + if (!barstr) + return ERROR_INT("barstr not defined", procName, 1); + + switch (format) + { + case L_BF_CODE2OF5: + start = !strncmp(barstr, Code2of5[C25_START], 3); + len = strlen(barstr); + stop = !strncmp(&barstr[len - 5], Code2of5[C25_STOP], 5); + if (start && stop) { + *pvalid = 1; + } else { + revbarstr = stringReverse(barstr); + start = !strncmp(revbarstr, Code2of5[C25_START], 3); + stop = !strncmp(&revbarstr[len - 5], Code2of5[C25_STOP], 5); + LEPT_FREE(revbarstr); + if (start && stop) { + *pvalid = 1; + if (preverse) *preverse = 1; + } + } + break; + case L_BF_CODEI2OF5: + start = !strncmp(barstr, CodeI2of5[CI25_START], 4); + len = strlen(barstr); + stop = !strncmp(&barstr[len - 3], CodeI2of5[CI25_STOP], 3); + if (start && stop) { + *pvalid = 1; + } else { + revbarstr = stringReverse(barstr); + start = !strncmp(revbarstr, CodeI2of5[CI25_START], 4); + stop = !strncmp(&revbarstr[len - 3], CodeI2of5[CI25_STOP], 3); + LEPT_FREE(revbarstr); + if (start && stop) { + *pvalid = 1; + if (preverse) *preverse = 1; + } + } + break; + case L_BF_CODE93: + start = !strncmp(barstr, Code93[C93_START], 6); + len = strlen(barstr); + stop = !strncmp(&barstr[len - 7], Code93[C93_STOP], 6); + if (start && stop) { + *pvalid = 1; + } else { + revbarstr = stringReverse(barstr); + start = !strncmp(revbarstr, Code93[C93_START], 6); + stop = !strncmp(&revbarstr[len - 7], Code93[C93_STOP], 6); + LEPT_FREE(revbarstr); + if (start && stop) { + *pvalid = 1; + if (preverse) *preverse = 1; + } + } + break; + case L_BF_CODE39: + start = !strncmp(barstr, Code39[C39_START], 9); + len = strlen(barstr); + stop = !strncmp(&barstr[len - 9], Code39[C39_STOP], 9); + if (start && stop) { + *pvalid = 1; + } else { + revbarstr = stringReverse(barstr); + start = !strncmp(revbarstr, Code39[C39_START], 9); + stop = !strncmp(&revbarstr[len - 9], Code39[C39_STOP], 9); + LEPT_FREE(revbarstr); + if (start && stop) { + *pvalid = 1; + if (preverse) *preverse = 1; + } + } + break; + case L_BF_CODABAR: + start = stop = 0; + len = strlen(barstr); + for (i = 16; i <= 19; i++) /* any of these will do */ + start += !strncmp(barstr, Codabar[i], 7); + for (i = 16; i <= 19; i++) /* ditto */ + stop += !strncmp(&barstr[len - 7], Codabar[i], 7); + if (start && stop) { + *pvalid = 1; + } else { + start = stop = 0; + revbarstr = stringReverse(barstr); + for (i = 16; i <= 19; i++) + start += !strncmp(revbarstr, Codabar[i], 7); + for (i = 16; i <= 19; i++) + stop += !strncmp(&revbarstr[len - 7], Codabar[i], 7); + LEPT_FREE(revbarstr); + if (start && stop) { + *pvalid = 1; + if (preverse) *preverse = 1; + } + } + break; + case L_BF_UPCA: + case L_BF_EAN13: + len = strlen(barstr); + if (len == 59) { + start = !strncmp(barstr, Upca[UPCA_START], 3); + mid = !strncmp(&barstr[27], Upca[UPCA_MID], 5); + stop = !strncmp(&barstr[len - 3], Upca[UPCA_STOP], 3); + if (start && mid && stop) + *pvalid = 1; + } + break; + default: + return ERROR_INT("format not supported", procName, 1); + } + + return 0; +} + + +/*------------------------------------------------------------------------* + * Code 2 of 5 * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecode2of5() + * + * \param[in] barstr of widths, in set {1, 2} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref: http://en.wikipedia.org/wiki/Two-out-of-five_code (Note:
+ *                 the codes given here are wrong!)
+ *               http://morovia.com/education/symbology/code25.asp
+ *      (2) This is a very low density encoding for the 10 digits.
+ *          Each digit is encoded with 5 black bars, of which 2 are wide
+ *          and 3 are narrow.  No information is carried in the spaces
+ *          between the bars, which are all equal in width, represented by
+ *          a "1" in our encoding.
+ *      (3) The mapping from the sequence of five bar widths to the
+ *          digit is identical to the mapping used by the interleaved
+ *          2 of 5 code.  The start code is 21211, representing two
+ *          wide bars and a narrow bar, and the interleaved "1" spaces
+ *          are explicit.  The stop code is 21112.  For all codes
+ *          (including start and stop), the trailing space "1" is
+ *          implicit -- there is no reason to represent it in the
+ *          Code2of5[] array.
+ * 
+ */ +static char * +barcodeDecode2of5(char *barstr, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code[10]; +l_int32 valid, reverse, i, j, len, error, ndigits, start, found; + + PROCNAME("barcodeDecodeI2of5"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse if necessary */ + barcodeVerifyFormat(barstr, L_BF_CODE2OF5, &valid, &reverse); + if (!valid) + return (char *)ERROR_PTR("barstr not in 2of5 format", procName, NULL); + if (reverse) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Verify size */ + len = strlen(vbarstr); + if ((len - 11) % 10 != 0) { + LEPT_FREE(vbarstr); + return (char *)ERROR_PTR("size not divisible by 10: invalid 2of5 code", + procName, NULL); + } + + error = FALSE; + ndigits = (len - 11) / 10; + data = (char *)LEPT_CALLOC(ndigits + 1, sizeof(char)); + memset(code, 0, 10); + for (i = 0; i < ndigits; i++) { + start = 6 + 10 * i; + for (j = 0; j < 9; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < 10; j++) { + if (!strcmp(code, Code2of5[j])) { + data[i] = 0x30 + j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + return data; +} + + +/*------------------------------------------------------------------------* + * Interleaved Code 2 of 5 * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecodeI2of5() + * + * \param[in] barstr of widths, in set {1, 2} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref: http://en.wikipedia.org/wiki/Interleaved_2_of_5
+ *      (2) This always encodes an even number of digits.
+ *          The start code is 1111; the stop code is 211.
+ * 
+ */ +static char * +barcodeDecodeI2of5(char *barstr, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code1[6], code2[6]; +l_int32 valid, reverse, i, j, len, error, npairs, start, found; + + PROCNAME("barcodeDecodeI2of5"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse if necessary */ + barcodeVerifyFormat(barstr, L_BF_CODEI2OF5, &valid, &reverse); + if (!valid) + return (char *)ERROR_PTR("barstr not in i2of5 format", procName, NULL); + if (reverse) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Verify size */ + len = strlen(vbarstr); + if ((len - 7) % 10 != 0) { + LEPT_FREE(vbarstr); + return (char *)ERROR_PTR("size not divisible by 10: invalid I2of5 code", + procName, NULL); + } + + error = FALSE; + npairs = (len - 7) / 10; + data = (char *)LEPT_CALLOC(2 * npairs + 1, sizeof(char)); + memset(code1, 0, 6); + memset(code2, 0, 6); + for (i = 0; i < npairs; i++) { + start = 4 + 10 * i; + for (j = 0; j < 5; j++) { + code1[j] = vbarstr[start + 2 * j]; + code2[j] = vbarstr[start + 2 * j + 1]; + } + + if (debugflag) + fprintf(stderr, "code1: %s, code2: %s\n", code1, code2); + + found = FALSE; + for (j = 0; j < 10; j++) { + if (!strcmp(code1, CodeI2of5[j])) { + data[2 * i] = 0x30 + j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + found = FALSE; + for (j = 0; j < 10; j++) { + if (!strcmp(code2, CodeI2of5[j])) { + data[2 * i + 1] = 0x30 + j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + return data; +} + + +/*------------------------------------------------------------------------* + * Code 93 * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecode93() + * + * \param[in] barstr of widths, in set {1, 2, 3, 4} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref:  http://en.wikipedia.org/wiki/Code93
+ *                http://morovia.com/education/symbology/code93.asp
+ *      (2) Each symbol has 3 black and 3 white bars.
+ *          The start and stop codes are 111141; the stop code then is
+ *          terminated with a final (1) bar.
+ *      (3) The last two codes are check codes.  We are checking them
+ *          for correctness, and issuing a warning on failure.  Should
+ *          probably not return any data on failure.
+ * 
+ */ +static char * +barcodeDecode93(char *barstr, + l_int32 debugflag) +{ +const char *checkc, *checkk; +char *data, *vbarstr; +char code[7]; +l_int32 valid, reverse, i, j, len, error, nsymb, start, found, sum; +l_int32 *index; + + PROCNAME("barcodeDecode93"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse if necessary */ + barcodeVerifyFormat(barstr, L_BF_CODE93, &valid, &reverse); + if (!valid) + return (char *)ERROR_PTR("barstr not in code93 format", procName, NULL); + if (reverse) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Verify size; skip the first 6 and last 7 bars. */ + len = strlen(vbarstr); + if ((len - 13) % 6 != 0) { + LEPT_FREE(vbarstr); + return (char *)ERROR_PTR("size not divisible by 6: invalid code 93", + procName, NULL); + } + + /* Decode the symbols */ + nsymb = (len - 13) / 6; + data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); + index = (l_int32 *)LEPT_CALLOC(nsymb, sizeof(l_int32)); + memset(code, 0, 7); + error = FALSE; + for (i = 0; i < nsymb; i++) { + start = 6 + 6 * i; + for (j = 0; j < 6; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < C93_START; j++) { + if (!strcmp(code, Code93[j])) { + data[i] = Code93Val[j]; + index[i] = j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(index); + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + /* Do check sums. For character "C", use only the + * actual data in computing the sum. For character "K", + * use the actual data plus the check character "C". */ + sum = 0; + for (i = 0; i < nsymb - 2; i++) /* skip the "C" and "K" */ + sum += ((i % 20) + 1) * index[nsymb - 3 - i]; + if (data[nsymb - 2] != Code93Val[sum % 47]) + L_WARNING("Error for check C\n", procName); + + if (debugflag) { + checkc = Code93[sum % 47]; + fprintf(stderr, "checkc = %s\n", checkc); + } + + sum = 0; + for (i = 0; i < nsymb - 1; i++) /* skip the "K" */ + sum += ((i % 15) + 1) * index[nsymb - 2 - i]; + if (data[nsymb - 1] != Code93Val[sum % 47]) + L_WARNING("Error for check K\n", procName); + + if (debugflag) { + checkk = Code93[sum % 47]; + fprintf(stderr, "checkk = %s\n", checkk); + } + + /* Remove the two check codes from the output */ + data[nsymb - 2] = '\0'; + + LEPT_FREE(index); + return data; +} + + +/*------------------------------------------------------------------------* + * Code 39 * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecode39() + * + * \param[in] barstr of widths, in set {1, 2} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref:  http://en.wikipedia.org/wiki/Code39
+ *                http://morovia.com/education/symbology/code39.asp
+ *      (2) Each symbol has 5 black and 4 white bars.
+ *          The start and stop codes are 121121211 (the asterisk)
+ *      (3) This decoder was contributed by Roger Hyde.
+ * 
+ */ +static char * +barcodeDecode39(char *barstr, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code[10]; +l_int32 valid, reverse, i, j, len, error, nsymb, start, found; + + PROCNAME("barcodeDecode39"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse if necessary */ + barcodeVerifyFormat(barstr, L_BF_CODE39, &valid, &reverse); + if (!valid) + return (char *)ERROR_PTR("barstr not in code39 format", procName, NULL); + if (reverse) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Verify size */ + len = strlen(vbarstr); + if ((len + 1) % 10 != 0) { + LEPT_FREE(vbarstr); + return (char *)ERROR_PTR("size+1 not divisible by 10: invalid code 39", + procName, NULL); + } + + /* Decode the symbols */ + nsymb = (len - 19) / 10; + data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); + memset(code, 0, 10); + error = FALSE; + for (i = 0; i < nsymb; i++) { + start = 10 + 10 * i; + for (j = 0; j < 9; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < C39_START; j++) { + if (!strcmp(code, Code39[j])) { + data[i] = Code39Val[j]; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + return data; +} + + +/*------------------------------------------------------------------------* + * Codabar * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecodeCodabar() + * + * \param[in] barstr of widths, in set {1, 2} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref:  http://en.wikipedia.org/wiki/Codabar
+ *                http://morovia.com/education/symbology/codabar.asp
+ *      (2) Each symbol has 4 black and 3 white bars.  They represent the
+ *          10 digits, and optionally 6 other characters.  The start and
+ *          stop codes can be any of four (typically denoted A,B,C,D).
+ * 
+ */ +static char * +barcodeDecodeCodabar(char *barstr, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code[8]; +l_int32 valid, reverse, i, j, len, error, nsymb, start, found; + + PROCNAME("barcodeDecodeCodabar"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse if necessary */ + barcodeVerifyFormat(barstr, L_BF_CODABAR, &valid, &reverse); + if (!valid) + return (char *)ERROR_PTR("barstr not in codabar format", + procName, NULL); + if (reverse) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Verify size */ + len = strlen(vbarstr); + if ((len + 1) % 8 != 0) { + LEPT_FREE(vbarstr); + return (char *)ERROR_PTR("size+1 not divisible by 8: invalid codabar", + procName, NULL); + } + + /* Decode the symbols */ + nsymb = (len - 15) / 8; + data = (char *)LEPT_CALLOC(nsymb + 1, sizeof(char)); + memset(code, 0, 8); + error = FALSE; + for (i = 0; i < nsymb; i++) { + start = 8 + 8 * i; + for (j = 0; j < 7; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < 16; j++) { + if (!strcmp(code, Codabar[j])) { + data[i] = CodabarVal[j]; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + return data; +} + + +/*------------------------------------------------------------------------* + * Code UPC-A * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecodeUpca() + * + * \param[in] barstr of widths, in set {1, 2, 3, 4} + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref:  http://en.wikipedia.org/wiki/UniversalProductCode
+ *                http://morovia.com/education/symbology/upc-a.asp
+ *      (2) Each symbol has 2 black and 2 white bars, and encodes a digit.
+ *          The start and stop codes are 111 and 111.  There are a total of
+ *          30 black bars, encoding 12 digits in two sets of 6, with
+ *          2 black bars separating the sets.
+ *      (3) The last digit is a check digit.  We check for correctness, and
+ *          issue a warning on failure.  Should probably not return any
+ *          data on failure.
+ * 
+ */ +static char * +barcodeDecodeUpca(char *barstr, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code[5]; +l_int32 valid, i, j, len, error, start, found, sum, checkdigit; + + PROCNAME("barcodeDecodeUpca"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format; reverse has no meaning here -- we must test both */ + barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); + if (!valid) + return (char *)ERROR_PTR("barstr not in UPC-A format", procName, NULL); + + /* Verify size */ + len = strlen(barstr); + if (len != 59) + return (char *)ERROR_PTR("size not 59; invalid UPC-A barcode", + procName, NULL); + + /* Check the first digit. If invalid, reverse the string. */ + memset(code, 0, 5); + for (i = 0; i < 4; i++) + code[i] = barstr[i + 3]; + found = FALSE; + for (i = 0; i < 10; i++) { + if (!strcmp(code, Upca[i])) { + found = TRUE; + break; + } + } + if (found == FALSE) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Decode the 12 symbols */ + data = (char *)LEPT_CALLOC(13, sizeof(char)); + memset(code, 0, 5); + error = FALSE; + for (i = 0; i < 12; i++) { + if (i < 6) + start = 3 + 4 * i; + else + start = 32 + 4 * (i - 6); + for (j = 0; j < 4; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < 10; j++) { + if (!strcmp(code, Upca[j])) { + data[i] = 0x30 + j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + /* Calculate the check digit (data[11]). */ + sum = 0; + for (i = 0; i < 12; i += 2) /* "even" digits */ + sum += 3 * (data[i] - 0x30); + for (i = 1; i < 11; i += 2) /* "odd" digits */ + sum += (data[i] - 0x30); + checkdigit = sum % 10; + if (checkdigit) /* not 0 */ + checkdigit = 10 - checkdigit; + if (checkdigit + 0x30 != data[11]) + L_WARNING("Error for UPC-A check character\n", procName); + + return data; +} + + +/*------------------------------------------------------------------------* + * Code EAN-13 * + *------------------------------------------------------------------------*/ +/*! + * \brief barcodeDecodeEan13() + * + * \param[in] barstr of widths, in set {1, 2, 3, 4} + * \param[in] first first digit: 0 - 9 + * \param[in] debugflag + * \return data string of digits, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) Ref:  http://en.wikipedia.org/wiki/UniversalProductCode
+ *                http://morovia.com/education/symbology/ean-13.asp
+ *      (2) The encoding is essentially the same as UPC-A, except
+ *          there are 13 digits in total, of which 12 are encoded
+ *          by bars (as with UPC-A) and the 13th is a leading digit
+ *          that determines the encoding of the next 6 digits,
+ *          selecting each digit from one of two tables.
+ *          encoded in the bars (as with UPC-A).  If the first digit
+ *          is 0, the encoding is identical to UPC-A.
+ *      (3) As with UPC-A, the last digit is a check digit.
+ *      (4) For now, we assume the first digit is input to this function.
+ *          Eventually, we will read it by pattern matching.
+ *
+ *    TODO: fix this for multiple tables, depending on the value of %first
+ * 
+ */ +static char * +barcodeDecodeEan13(char *barstr, + l_int32 first, + l_int32 debugflag) +{ +char *data, *vbarstr; +char code[5]; +l_int32 valid, i, j, len, error, start, found, sum, checkdigit; + + PROCNAME("barcodeDecodeEan13"); + + if (!barstr) + return (char *)ERROR_PTR("barstr not defined", procName, NULL); + + /* Verify format. You can't tell the orientation by the start + * and stop codes, but you can by the location of the digits. + * Use the UPCA verifier for EAN 13 -- it is identical. */ + barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); + if (!valid) + return (char *)ERROR_PTR("barstr not in EAN 13 format", procName, NULL); + + /* Verify size */ + len = strlen(barstr); + if (len != 59) + return (char *)ERROR_PTR("size not 59; invalid EAN 13 barcode", + procName, NULL); + + /* Check the first digit. If invalid, reverse the string. */ + memset(code, 0, 5); + for (i = 0; i < 4; i++) + code[i] = barstr[i + 3]; + found = FALSE; + for (i = 0; i < 10; i++) { + if (!strcmp(code, Upca[i])) { + found = TRUE; + break; + } + } + if (found == FALSE) + vbarstr = stringReverse(barstr); + else + vbarstr = stringNew(barstr); + + /* Decode the 12 symbols */ + data = (char *)LEPT_CALLOC(13, sizeof(char)); + memset(code, 0, 5); + error = FALSE; + for (i = 0; i < 12; i++) { + if (i < 6) + start = 3 + 4 * i; + else + start = 32 + 4 * (i - 6); + for (j = 0; j < 4; j++) + code[j] = vbarstr[start + j]; + + if (debugflag) + fprintf(stderr, "code: %s\n", code); + + found = FALSE; + for (j = 0; j < 10; j++) { + if (!strcmp(code, Upca[j])) { + data[i] = 0x30 + j; + found = TRUE; + break; + } + } + if (!found) error = TRUE; + } + LEPT_FREE(vbarstr); + + if (error) { + LEPT_FREE(data); + return (char *)ERROR_PTR("error in decoding", procName, NULL); + } + + /* Calculate the check digit (data[11]). */ + sum = 0; + for (i = 0; i < 12; i += 2) /* "even" digits */ + sum += 3 * (data[i] - 0x30); + for (i = 1; i < 12; i += 2) /* "odd" digits */ + sum += (data[i] - 0x30); + checkdigit = sum % 10; + if (checkdigit) /* not 0 */ + checkdigit = 10 - checkdigit; + if (checkdigit + 0x30 != data[11]) + L_WARNING("Error for EAN-13 check character\n", procName); + + return data; +} diff --git a/3rdparty/hgOCR/leptonica/baseline.c b/3rdparty/hgOCR/leptonica/baseline.c new file mode 100644 index 00000000..b8c74b2e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/baseline.c @@ -0,0 +1,596 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file baseline.c + *
+ *
+ *      Locate text baselines in an image
+ *           NUMA     *pixFindBaselines()
+ *
+ *      Projective transform to remove local skew
+ *           PIX      *pixDeskewLocal()
+ *
+ *      Determine local skew
+ *           l_int32   pixGetLocalSkewTransform()
+ *           NUMA     *pixGetLocalSkewAngles()
+ *
+ *  We have two apparently different functions here:
+ *    ~ finding baselines
+ *    ~ finding a projective transform to remove keystone warping
+ *  The function pixGetLocalSkewAngles() returns an array of angles,
+ *  one for each raster line, and the baselines of the text lines
+ *  should intersect the left edge of the image with that angle.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Min to travel after finding max before abandoning peak */ +static const l_int32 MinDistInPeak = 35; + + /* Thresholds for peaks and zeros, relative to the max peak */ +static const l_int32 PeakThresholdRatio = 20; +static const l_int32 ZeroThresholdRatio = 100; + + /* Default values for determining local skew */ +static const l_int32 DefaultSlices = 10; +static const l_int32 DefaultSweepReduction = 2; +static const l_int32 DefaultBsReduction = 1; +static const l_float32 DefaultSweepRange = 5.; /* degrees */ +static const l_float32 DefaultSweepDelta = 1.; /* degrees */ +static const l_float32 DefaultMinbsDelta = 0.01; /* degrees */ + + /* Overlap slice fraction added to top and bottom of each slice */ +static const l_float32 OverlapFraction = 0.5; + + /* Minimum allowed confidence (ratio) for accepting a value */ +static const l_float32 MinAllowedConfidence = 3.0; + + +/*---------------------------------------------------------------------* + * Locate text baselines in an image * + *---------------------------------------------------------------------*/ +/*! + * \brief pixFindBaselines() + * + * \param[in] pixs 1 bpp, 300 ppi + * \param[out] ppta [optional] pairs of pts corresponding to + * approx. ends of each text line + * \param[in] pixadb for debug output; use NULL to skip + * \return na of baseline y values, or NULL on error + * + *
+ * Notes:
+ *      (1) Input binary image must have text lines already aligned
+ *          horizontally.  This can be done by either rotating the
+ *          image with pixDeskew(), or, if a projective transform
+ *          is required, by doing pixDeskewLocal() first.
+ *      (2) Input null for &pta if you don't want this returned.
+ *          The pta will come in pairs of points (left and right end
+ *          of each baseline).
+ *      (3) Caution: this will not work properly on text with multiple
+ *          columns, where the lines are not aligned between columns.
+ *          If there are multiple columns, they should be extracted
+ *          separately before finding the baselines.
+ *      (4) This function constructs different types of output
+ *          for baselines; namely, a set of raster line values and
+ *          a set of end points of each baseline.
+ *      (5) This function was designed to handle short and long text lines
+ *          without using dangerous thresholds on the peak heights.  It does
+ *          this by combining the differential signal with a morphological
+ *          analysis of the locations of the text lines.  One can also
+ *          combine this data to normalize the peak heights, by weighting
+ *          the differential signal in the region of each baseline
+ *          by the inverse of the width of the text line found there.
+ * 
+ */ +NUMA * +pixFindBaselines(PIX *pixs, + PTA **ppta, + PIXA *pixadb) +{ +l_int32 h, i, j, nbox, val1, val2, ndiff, bx, by, bw, bh; +l_int32 imaxloc, peakthresh, zerothresh, inpeak; +l_int32 mintosearch, max, maxloc, nloc, locval; +l_int32 *array; +l_float32 maxval; +BOXA *boxa1, *boxa2, *boxa3; +GPLOT *gplot; +NUMA *nasum, *nadiff, *naloc, *naval; +PIX *pix1, *pix2; +PTA *pta; + + PROCNAME("pixFindBaselines"); + + if (ppta) *ppta = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + /* Close up the text characters, removing noise */ + pix1 = pixMorphSequence(pixs, "c25.1 + e15.1", 0); + + /* Estimate the resolution */ + if (pixadb) pixaAddPix(pixadb, pixScale(pix1, 0.25, 0.25), L_INSERT); + + /* Save the difference of adjacent row sums. + * The high positive-going peaks are the baselines */ + if ((nasum = pixCountPixelsByRow(pix1, NULL)) == NULL) { + pixDestroy(&pix1); + return (NUMA *)ERROR_PTR("nasum not made", procName, NULL); + } + h = pixGetHeight(pixs); + nadiff = numaCreate(h); + numaGetIValue(nasum, 0, &val2); + for (i = 0; i < h - 1; i++) { + val1 = val2; + numaGetIValue(nasum, i + 1, &val2); + numaAddNumber(nadiff, val1 - val2); + } + numaDestroy(&nasum); + + if (pixadb) { /* show the difference signal */ + lept_mkdir("lept/baseline"); + gplotSimple1(nadiff, GPLOT_PNG, "/tmp/lept/baseline/diff", "Diff Sig"); + pix2 = pixRead("/tmp/lept/baseline/diff.png"); + pixaAddPix(pixadb, pix2, L_INSERT); + } + + /* Use the zeroes of the profile to locate each baseline. */ + array = numaGetIArray(nadiff); + ndiff = numaGetCount(nadiff); + numaGetMax(nadiff, &maxval, &imaxloc); + numaDestroy(&nadiff); + + /* Use this to begin locating a new peak: */ + peakthresh = (l_int32)maxval / PeakThresholdRatio; + /* Use this to begin a region between peaks: */ + zerothresh = (l_int32)maxval / ZeroThresholdRatio; + + naloc = numaCreate(0); + naval = numaCreate(0); + inpeak = FALSE; + for (i = 0; i < ndiff; i++) { + if (inpeak == FALSE) { + if (array[i] > peakthresh) { /* transition to in-peak */ + inpeak = TRUE; + mintosearch = i + MinDistInPeak; /* accept no zeros + * between i and mintosearch */ + max = array[i]; + maxloc = i; + } + } else { /* inpeak == TRUE; look for max */ + if (array[i] > max) { + max = array[i]; + maxloc = i; + mintosearch = i + MinDistInPeak; + } else if (i > mintosearch && array[i] <= zerothresh) { /* leave */ + inpeak = FALSE; + numaAddNumber(naval, max); + numaAddNumber(naloc, maxloc); + } + } + } + LEPT_FREE(array); + + /* If array[ndiff-1] is max, eg. no descenders, baseline at bottom */ + if (inpeak) { + numaAddNumber(naval, max); + numaAddNumber(naloc, maxloc); + } + + if (pixadb) { /* show the raster locations for the peaks */ + gplot = gplotCreate("/tmp/lept/baseline/loc", GPLOT_PNG, "Peak locs", + "rasterline", "height"); + gplotAddPlot(gplot, naloc, naval, GPLOT_POINTS, "locs"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + pix2 = pixRead("/tmp/lept/baseline/loc.png"); + pixaAddPix(pixadb, pix2, L_INSERT); + } + numaDestroy(&naval); + + /* Generate an approximate profile of text line width. + * First, filter the boxes of text, where there may be + * more than one box for a given textline. */ + pix2 = pixMorphSequence(pix1, "r11 + c20.1 + o30.1 +c1.3", 0); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + boxa1 = pixConnComp(pix2, NULL, 4); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (boxaGetCount(boxa1) == 0) { + numaDestroy(&naloc); + boxaDestroy(&boxa1); + L_INFO("no compnents after filtering\n", procName); + return NULL; + } + boxa2 = boxaTransform(boxa1, 0, 0, 4., 4.); + boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + + /* Optionally, find the baseline segments */ + pta = NULL; + if (ppta) { + pta = ptaCreate(0); + *ppta = pta; + } + if (pta) { + nloc = numaGetCount(naloc); + nbox = boxaGetCount(boxa3); + for (i = 0; i < nbox; i++) { + boxaGetBoxGeometry(boxa3, i, &bx, &by, &bw, &bh); + for (j = 0; j < nloc; j++) { + numaGetIValue(naloc, j, &locval); + if (L_ABS(locval - (by + bh)) > 25) + continue; + ptaAddPt(pta, bx, locval); + ptaAddPt(pta, bx + bw, locval); + break; + } + } + } + boxaDestroy(&boxa3); + + if (pixadb && pta) { /* display baselines */ + l_int32 npts, x1, y1, x2, y2; + pix1 = pixConvertTo32(pixs); + npts = ptaGetCount(pta); + for (i = 0; i < npts; i += 2) { + ptaGetIPt(pta, i, &x1, &y1); + ptaGetIPt(pta, i + 1, &x2, &y2); + pixRenderLineArb(pix1, x1, y1, x2, y2, 2, 255, 0, 0); + } + pixWriteDebug("/tmp/lept/baseline/baselines.png", pix1, IFF_PNG); + pixaAddPix(pixadb, pixScale(pix1, 0.25, 0.25), L_INSERT); + pixDestroy(&pix1); + } + + return naloc; +} + + +/*---------------------------------------------------------------------* + * Projective transform to remove local skew * + *---------------------------------------------------------------------*/ +/*! + * \brief pixDeskewLocal() + * + * \param[in] pixs 1 bpp + * \param[in] nslices the number of horizontal overlapping slices; + * must be larger than 1 and not exceed 20; + * use 0 for default + * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; + * use 0 for default value + * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and + * not larger than redsweep; use 0 for default value + * \param[in] sweeprange half the full range, assumed about 0; in degrees; + * use 0.0 for default value + * \param[in] sweepdelta angle increment of sweep; in degrees; + * use 0.0 for default value + * \param[in] minbsdelta min binary search increment angle; in degrees; + * use 0.0 for default value + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function allows deskew of a page whose skew changes
+ *          approximately linearly with vertical position.  It uses
+ *          a projective transform that in effect does a differential
+ *          shear about the LHS of the page, and makes all text lines
+ *          horizontal.
+ *      (2) The origin of the keystoning can be either a cheap document
+ *          feeder that rotates the page as it is passed through, or a
+ *          camera image taken from either the left or right side
+ *          of the vertical.
+ *      (3) The image transformation is a projective warping,
+ *          not a rotation.  Apart from this function, the text lines
+ *          must be properly aligned vertically with respect to each
+ *          other.  This can be done by pre-processing the page; e.g.,
+ *          by rotating or horizontally shearing it.
+ *          Typically, this can be achieved by vertically aligning
+ *          the page edge.
+ * 
+ */ +PIX * +pixDeskewLocal(PIX *pixs, + l_int32 nslices, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta) +{ +l_int32 ret; +PIX *pixd; +PTA *ptas, *ptad; + + PROCNAME("pixDeskewLocal"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + /* Skew array gives skew angle (deg) as fctn of raster line + * where it intersects the LHS of the image */ + ret = pixGetLocalSkewTransform(pixs, nslices, redsweep, redsearch, + sweeprange, sweepdelta, minbsdelta, + &ptas, &ptad); + if (ret != 0) + return (PIX *)ERROR_PTR("transform pts not found", procName, NULL); + + /* Use a projective transform */ + pixd = pixProjectiveSampledPta(pixs, ptad, ptas, L_BRING_IN_WHITE); + + ptaDestroy(&ptas); + ptaDestroy(&ptad); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Determine the local skew * + *---------------------------------------------------------------------*/ +/*! + * \brief pixGetLocalSkewTransform() + * + * \param[in] pixs + * \param[in] nslices the number of horizontal overlapping slices; + * must be larger than 1 and not exceed 20; + * use 0 for default + * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; + * use 0 for default value + * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and not + * larger than redsweep; use 0 for default value + * \param[in] sweeprange half the full range, assumed about 0; + * in degrees; use 0.0 for default value + * \param[in] sweepdelta angle increment of sweep; in degrees; + * use 0.0 for default value + * \param[in] minbsdelta min binary search increment angle; in degrees; + * use 0.0 for default value + * \param[out] pptas 4 points in the source + * \param[out] pptad the corresponding 4 pts in the dest + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates two pairs of points in the src, each pair
+ *          corresponding to a pair of points that would lie along
+ *          the same raster line in a transformed (dewarped) image.
+ *      (2) The sets of 4 src and 4 dest points returned by this function
+ *          can then be used, in a projective or bilinear transform,
+ *          to remove keystoning in the src.
+ * 
+ */ +l_ok +pixGetLocalSkewTransform(PIX *pixs, + l_int32 nslices, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta, + PTA **pptas, + PTA **pptad) +{ +l_int32 w, h, i; +l_float32 deg2rad, angr, angd, dely; +NUMA *naskew; +PTA *ptas, *ptad; + + PROCNAME("pixGetLocalSkewTransform"); + + if (!pptas || !pptad) + return ERROR_INT("&ptas and &ptad not defined", procName, 1); + *pptas = *pptad = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (nslices < 2 || nslices > 20) + nslices = DefaultSlices; + if (redsweep < 1 || redsweep > 8) + redsweep = DefaultSweepReduction; + if (redsearch < 1 || redsearch > redsweep) + redsearch = DefaultBsReduction; + if (sweeprange == 0.0) + sweeprange = DefaultSweepRange; + if (sweepdelta == 0.0) + sweepdelta = DefaultSweepDelta; + if (minbsdelta == 0.0) + minbsdelta = DefaultMinbsDelta; + + naskew = pixGetLocalSkewAngles(pixs, nslices, redsweep, redsearch, + sweeprange, sweepdelta, minbsdelta, + NULL, NULL, 0); + if (!naskew) + return ERROR_INT("naskew not made", procName, 1); + + deg2rad = 3.14159265 / 180.; + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + ptas = ptaCreate(4); + ptad = ptaCreate(4); + *pptas = ptas; + *pptad = ptad; + + /* Find i for skew line that intersects LHS at i and RHS at h / 20 */ + for (i = 0; i < h; i++) { + numaGetFValue(naskew, i, &angd); + angr = angd * deg2rad; + dely = w * tan(angr); + if (i - dely > 0.05 * h) + break; + } + ptaAddPt(ptas, 0, i); + ptaAddPt(ptas, w - 1, i - dely); + ptaAddPt(ptad, 0, i); + ptaAddPt(ptad, w - 1, i); + + /* Find i for skew line that intersects LHS at i and RHS at 19h / 20 */ + for (i = h - 1; i > 0; i--) { + numaGetFValue(naskew, i, &angd); + angr = angd * deg2rad; + dely = w * tan(angr); + if (i - dely < 0.95 * h) + break; + } + ptaAddPt(ptas, 0, i); + ptaAddPt(ptas, w - 1, i - dely); + ptaAddPt(ptad, 0, i); + ptaAddPt(ptad, w - 1, i); + + numaDestroy(&naskew); + return 0; +} + + +/*! + * \brief pixGetLocalSkewAngles() + * + * \param[in] pixs 1 bpp + * \param[in] nslices the number of horizontal overlapping slices; + * must be larger than 1 and not exceed 20; + * use 0 for default + * \param[in] redsweep sweep reduction factor: 1, 2, 4 or 8; + * use 0 for default value + * \param[in] redsearch search reduction factor: 1, 2, 4 or 8, and not + * larger than redsweep; use 0 for default value + * \param[in] sweeprange half the full range, assumed about 0; + * in degrees; use 0.0 for default value + * \param[in] sweepdelta angle increment of sweep; in degrees; + * use 0.0 for default value + * \param[in] minbsdelta min binary search increment angle; in degrees; + * use 0.0 for default value + * \param[out] pa [optional] slope of skew as fctn of y + * \param[out] pb [optional] intercept at y = 0 of skew, + 8 as a function of y + * \param[in] debug 1 for generating plot of skew angle vs. y; + * 0 otherwise + * \return naskew, or NULL on error + * + *
+ * Notes:
+ *      (1) The local skew is measured in a set of overlapping strips.
+ *          We then do a least square linear fit parameters to get
+ *          the slope and intercept parameters a and b in
+ *              skew-angle = a * y + b  (degrees)
+ *          for the local skew as a function of raster line y.
+ *          This is then used to make naskew, which can be interpreted
+ *          as the computed skew angle (in degrees) at the left edge
+ *          of each raster line.
+ *      (2) naskew can then be used to find the baselines of text, because
+ *          each text line has a baseline that should intersect
+ *          the left edge of the image with the angle given by this
+ *          array, evaluated at the raster line of intersection.
+ * 
+ */ +NUMA * +pixGetLocalSkewAngles(PIX *pixs, + l_int32 nslices, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta, + l_float32 *pa, + l_float32 *pb, + l_int32 debug) +{ +l_int32 w, h, hs, i, ystart, yend, ovlap, npts; +l_float32 angle, conf, ycenter, a, b; +BOX *box; +GPLOT *gplot; +NUMA *naskew, *nax, *nay; +PIX *pix; +PTA *pta; + + PROCNAME("pixGetLocalSkewAngles"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (nslices < 2 || nslices > 20) + nslices = DefaultSlices; + if (redsweep < 1 || redsweep > 8) + redsweep = DefaultSweepReduction; + if (redsearch < 1 || redsearch > redsweep) + redsearch = DefaultBsReduction; + if (sweeprange == 0.0) + sweeprange = DefaultSweepRange; + if (sweepdelta == 0.0) + sweepdelta = DefaultSweepDelta; + if (minbsdelta == 0.0) + minbsdelta = DefaultMinbsDelta; + + pixGetDimensions(pixs, &w, &h, NULL); + hs = h / nslices; + ovlap = (l_int32)(OverlapFraction * hs); + pta = ptaCreate(nslices); + for (i = 0; i < nslices; i++) { + ystart = L_MAX(0, hs * i - ovlap); + yend = L_MIN(h - 1, hs * (i + 1) + ovlap); + ycenter = (l_float32)(ystart + yend) / 2; + box = boxCreate(0, ystart, w, yend - ystart + 1); + pix = pixClipRectangle(pixs, box, NULL); + pixFindSkewSweepAndSearch(pix, &angle, &conf, redsweep, redsearch, + sweeprange, sweepdelta, minbsdelta); + if (conf > MinAllowedConfidence) + ptaAddPt(pta, ycenter, angle); + pixDestroy(&pix); + boxDestroy(&box); + } + + /* Do linear least squares fit */ + if ((npts = ptaGetCount(pta)) < 2) { + ptaDestroy(&pta); + return (NUMA *)ERROR_PTR("can't fit skew", procName, NULL); + } + ptaGetLinearLSF(pta, &a, &b, NULL); + if (pa) *pa = a; + if (pb) *pb = b; + + /* Make skew angle array as function of raster line */ + naskew = numaCreate(h); + for (i = 0; i < h; i++) { + angle = a * i + b; + numaAddNumber(naskew, angle); + } + + if (debug) { + lept_mkdir("lept/baseline"); + ptaGetArrays(pta, &nax, &nay); + gplot = gplotCreate("/tmp/lept/baseline/skew", GPLOT_PNG, + "skew as fctn of y", "y (in raster lines from top)", + "angle (in degrees)"); + gplotAddPlot(gplot, NULL, naskew, GPLOT_POINTS, "linear lsf"); + gplotAddPlot(gplot, nax, nay, GPLOT_POINTS, "actual data pts"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + numaDestroy(&nax); + numaDestroy(&nay); + } + + ptaDestroy(&pta); + return naskew; +} diff --git a/3rdparty/hgOCR/leptonica/bbuffer.c b/3rdparty/hgOCR/leptonica/bbuffer.c new file mode 100644 index 00000000..8fffd1dc --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bbuffer.c @@ -0,0 +1,482 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bbuffer.c + *
+ *
+ *      Create/Destroy BBuffer
+ *          L_BBUFFER      *bbufferCreate()
+ *          void           *bbufferDestroy()
+ *          l_uint8        *bbufferDestroyAndSaveData()
+ *
+ *      Operations to read data TO a BBuffer
+ *          l_int32         bbufferRead()
+ *          l_int32         bbufferReadStream()
+ *          l_int32         bbufferExtendArray()
+ *
+ *      Operations to write data FROM a BBuffer
+ *          l_int32         bbufferWrite()
+ *          l_int32         bbufferWriteStream()
+ *
+ *    The bbuffer is an implementation of a byte queue.
+ *    The bbuffer holds a byte array from which bytes are
+ *    processed in a first-in/first-out fashion.  As with
+ *    any queue, bbuffer maintains two "pointers," one to the
+ *    tail of the queue (where you read new bytes onto it)
+ *    and one to the head of the queue (where you start from
+ *    when writing bytes out of it.
+ *
+ *    The queue can be visualized:
+ *
+ * \code
+ *  byte 0                                           byte (nalloc - 1)
+ *       |                                                |
+ *       --------------------------------------------------
+ *                 H                             T
+ *       [   aw   ][  bytes currently on queue  ][  anr   ]
+ *
+ *       ---:  all allocated data in bbuffer
+ *       H:    queue head (ptr to next byte to be written out)
+ *       T:    queue tail (ptr to first byte to be written to)
+ *       aw:   already written from queue
+ *       anr:  allocated but not yet read to
+ * \endcode
+ *    The purpose of bbuffer is to allow you to safely read
+ *    bytes in, and to sequentially write them out as well.
+ *    In the process of writing bytes out, you don't actually
+ *    remove the bytes in the array; you just move the pointer
+ *    (nwritten) which points to the head of the queue.  In
+ *    the process of reading bytes in, you sometimes need to
+ *    expand the array size.  If a read is performed after a
+ *    write, so that the head of the queue is not at the
+ *    beginning of the array, the bytes already written are
+ *    first removed by copying the others over them; then the
+ *    new bytes are read onto the tail of the queue.
+ *
+ *    Note that the meaning of "read into" and "write from"
+ *    the bbuffer is OPPOSITE to that for a stream, where
+ *    you read "from" a stream and write "into" a stream.
+ *    As a mnemonic for remembering the direction:
+ *        ~ to read bytes from a stream into the bbuffer,
+ *          you call fread on the stream
+ *        ~ to write bytes from the bbuffer into a stream,
+ *          you call fwrite on the stream
+ *
+ *    See zlibmem.c for an example use of bbuffer, where we
+ *    compress and decompress an array of bytes in memory.
+ *
+ *    We can also use the bbuffer trivially to read from stdin
+ *    into memory; e.g., to capture bytes piped from the stdout
+ *    of another program.  This is equivalent to repeatedly
+ *    calling bbufferReadStream() until the input queue is empty.
+ *    This is implemented in l_binaryReadStream().
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on array size */ +static const l_uint32 MaxArraySize = 1000000000; /* 10^9 bytes */ +static const l_int32 InitialArraySize = 1024; /*!< n'importe quoi */ + +/*--------------------------------------------------------------------------* + * BBuffer create/destroy * + *--------------------------------------------------------------------------*/ +/*! + * \brief bbufferCreate() + * + * \param[in] indata address in memory [optional] + * \param[in] nalloc size of byte array to be alloc'd 0 for default + * \return bbuffer, or NULL on error + * + *
+ * Notes:
+ *      (1) If a buffer address is given, you should read all the data in.
+ *      (2) Allocates a bbuffer with associated byte array of
+ *          the given size.  If a buffer address is given,
+ *          it then reads the number of bytes into the byte array.
+ * 
+ */ +L_BBUFFER * +bbufferCreate(const l_uint8 *indata, + l_int32 nalloc) +{ +L_BBUFFER *bb; + + PROCNAME("bbufferCreate"); + + if (nalloc <= 0 || nalloc > MaxArraySize) + nalloc = InitialArraySize; + + bb = (L_BBUFFER *)LEPT_CALLOC(1, sizeof(L_BBUFFER)); + if ((bb->array = (l_uint8 *)LEPT_CALLOC(nalloc, sizeof(l_uint8))) == NULL) { + LEPT_FREE(bb); + return (L_BBUFFER *)ERROR_PTR("byte array not made", procName, NULL); + } + bb->nalloc = nalloc; + bb->nwritten = 0; + + if (indata) { + memcpy(bb->array, indata, nalloc); + bb->n = nalloc; + } else { + bb->n = 0; + } + + return bb; +} + + +/*! + * \brief bbufferDestroy() + * + * \param[in,out] pbb will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Destroys the byte array in the bbuffer and then the bbuffer;
+ *          then nulls the contents of the input ptr.
+ * 
+ */ +void +bbufferDestroy(L_BBUFFER **pbb) +{ +L_BBUFFER *bb; + + PROCNAME("bbufferDestroy"); + + if (pbb == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + + if ((bb = *pbb) == NULL) + return; + + if (bb->array) + LEPT_FREE(bb->array); + LEPT_FREE(bb); + *pbb = NULL; + + return; +} + + +/*! + * \brief bbufferDestroyAndSaveData() + * + * \param[in,out] pbb input data buffer; will be nulled + * \param[out] pnbytes number of bytes saved in array + * \return barray newly allocated array of data + * + *
+ * Notes:
+ *      (1) Copies data to newly allocated array; then destroys the bbuffer.
+ * 
+ */ +l_uint8 * +bbufferDestroyAndSaveData(L_BBUFFER **pbb, + size_t *pnbytes) +{ +l_uint8 *array; +size_t nbytes; +L_BBUFFER *bb; + + PROCNAME("bbufferDestroyAndSaveData"); + + if (pbb == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return NULL; + } + if (pnbytes == NULL) { + L_WARNING("&nbytes is NULL\n", procName); + bbufferDestroy(pbb); + return NULL; + } + + if ((bb = *pbb) == NULL) + return NULL; + + /* write all unwritten bytes out to a new array */ + nbytes = bb->n - bb->nwritten; + *pnbytes = nbytes; + if ((array = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) { + L_WARNING("calloc failure for array\n", procName); + return NULL; + } + memcpy(array, bb->array + bb->nwritten, nbytes); + + bbufferDestroy(pbb); + return array; +} + + +/*--------------------------------------------------------------------------* + * Operations to read data INTO a BBuffer * + *--------------------------------------------------------------------------*/ +/*! + * \brief bbufferRead() + * + * \param[in] bb bbuffer + * \param[in] src source memory buffer from which bytes are read + * \param[in] nbytes bytes to be read + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For a read after write, first remove the written
+ *          bytes by shifting the unwritten bytes in the array,
+ *          then check if there is enough room to add the new bytes.
+ *          If not, realloc with bbufferExpandArray(), resulting
+ *          in a second writing of the unwritten bytes.  While less
+ *          efficient, this is simpler than making a special case
+ *          of reallocNew().
+ * 
+ */ +l_ok +bbufferRead(L_BBUFFER *bb, + l_uint8 *src, + l_int32 nbytes) +{ +l_int32 navail, nadd, nwritten; + + PROCNAME("bbufferRead"); + + if (!bb) + return ERROR_INT("bb not defined", procName, 1); + if (!src) + return ERROR_INT("src not defined", procName, 1); + if (nbytes == 0) + return ERROR_INT("no bytes to read", procName, 1); + + if ((nwritten = bb->nwritten)) { /* move the unwritten bytes over */ + memmove(bb->array, bb->array + nwritten, bb->n - nwritten); + bb->nwritten = 0; + bb->n -= nwritten; + } + + /* If necessary, expand the allocated array. Do so by + * by at least a factor of two. */ + navail = bb->nalloc - bb->n; + if (nbytes > navail) { + nadd = L_MAX(bb->nalloc, nbytes); + bbufferExtendArray(bb, nadd); + } + + /* Read in the new bytes */ + memcpy(bb->array + bb->n, src, nbytes); + bb->n += nbytes; + + return 0; +} + + +/*! + * \brief bbufferReadStream() + * + * \param[in] bb bbuffer + * \param[in] fp source stream from which bytes are read + * \param[in] nbytes bytes to be read + * \return 0 if OK, 1 on error + */ +l_ok +bbufferReadStream(L_BBUFFER *bb, + FILE *fp, + l_int32 nbytes) +{ +l_int32 navail, nadd, nread, nwritten; + + PROCNAME("bbufferReadStream"); + + if (!bb) + return ERROR_INT("bb not defined", procName, 1); + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (nbytes == 0) + return ERROR_INT("no bytes to read", procName, 1); + + if ((nwritten = bb->nwritten)) { /* move any unwritten bytes over */ + memmove(bb->array, bb->array + nwritten, bb->n - nwritten); + bb->nwritten = 0; + bb->n -= nwritten; + } + + /* If necessary, expand the allocated array. Do so by + * by at least a factor of two. */ + navail = bb->nalloc - bb->n; + if (nbytes > navail) { + nadd = L_MAX(bb->nalloc, nbytes); + bbufferExtendArray(bb, nadd); + } + + /* Read in the new bytes */ + nread = fread(bb->array + bb->n, 1, nbytes, fp); + bb->n += nread; + + return 0; +} + + +/*! + * \brief bbufferExtendArray() + * + * \param[in] bb bbuffer + * \param[in] nbytes number of bytes to extend array size + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) reallocNew() copies all bb->nalloc bytes, even though
+ *          only bb->n are data.
+ * 
+ */ +l_ok +bbufferExtendArray(L_BBUFFER *bb, + l_int32 nbytes) +{ + PROCNAME("bbufferExtendArray"); + + if (!bb) + return ERROR_INT("bb not defined", procName, 1); + + if ((bb->array = (l_uint8 *)reallocNew((void **)&bb->array, + bb->nalloc, + bb->nalloc + nbytes)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + bb->nalloc += nbytes; + return 0; +} + + +/*--------------------------------------------------------------------------* + * Operations to write data FROM a BBuffer * + *--------------------------------------------------------------------------*/ +/*! + * \brief bbufferWrite() + * + * \param[in] bb bbuffer + * \param[in] dest dest memory buffer to which bytes are written + * \param[in] nbytes bytes requested to be written + * \param[out] pnout bytes actually written + * \return 0 if OK, 1 on error + */ +l_ok +bbufferWrite(L_BBUFFER *bb, + l_uint8 *dest, + size_t nbytes, + size_t *pnout) +{ +size_t nleft, nout; + + PROCNAME("bbufferWrite"); + + if (!bb) + return ERROR_INT("bb not defined", procName, 1); + if (!dest) + return ERROR_INT("dest not defined", procName, 1); + if (nbytes <= 0) + return ERROR_INT("no bytes requested to write", procName, 1); + if (!pnout) + return ERROR_INT("&nout not defined", procName, 1); + + nleft = bb->n - bb->nwritten; + nout = L_MIN(nleft, nbytes); + *pnout = nout; + + if (nleft == 0) { /* nothing to write; reinitialize the buffer */ + bb->n = 0; + bb->nwritten = 0; + return 0; + } + + /* nout > 0; transfer the data out */ + memcpy(dest, bb->array + bb->nwritten, nout); + bb->nwritten += nout; + + /* If all written; "empty" the buffer */ + if (nout == nleft) { + bb->n = 0; + bb->nwritten = 0; + } + + return 0; +} + + +/*! + * \brief bbufferWriteStream() + * + * \param[in] bb bbuffer + * \param[in] fp dest stream to which bytes are written + * \param[in] nbytes bytes requested to be written + * \param[out] pnout bytes actually written + * \return 0 if OK, 1 on error + */ +l_ok +bbufferWriteStream(L_BBUFFER *bb, + FILE *fp, + size_t nbytes, + size_t *pnout) +{ +size_t nleft, nout; + + PROCNAME("bbufferWriteStream"); + + if (!bb) + return ERROR_INT("bb not defined", procName, 1); + if (!fp) + return ERROR_INT("output stream not defined", procName, 1); + if (nbytes <= 0) + return ERROR_INT("no bytes requested to write", procName, 1); + if (!pnout) + return ERROR_INT("&nout not defined", procName, 1); + + nleft = bb->n - bb->nwritten; + nout = L_MIN(nleft, nbytes); + *pnout = nout; + + if (nleft == 0) { /* nothing to write; reinitialize the buffer */ + bb->n = 0; + bb->nwritten = 0; + return 0; + } + + /* nout > 0; transfer the data out */ + fwrite(bb->array + bb->nwritten, 1, nout, fp); + bb->nwritten += nout; + + /* If all written; "empty" the buffer */ + if (nout == nleft) { + bb->n = 0; + bb->nwritten = 0; + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/bbuffer.h b/3rdparty/hgOCR/leptonica/bbuffer.h new file mode 100644 index 00000000..945cbb0f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bbuffer.h @@ -0,0 +1,60 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_BBUFFER_H +#define LEPTONICA_BBUFFER_H + +/*! + * \file bbuffer.h + * + *
+ *      Expandable byte buffer for reading data in from memory and
+ *      writing data out to other memory.
+ *
+ *      This implements a queue of bytes, so data read in is put
+ *      on the "back" of the queue (i.e., the end of the byte array)
+ *      and data written out is taken from the "front" of the queue
+ *      (i.e., from an index marker "nwritten" that is initially set at
+ *      the beginning of the array.)  As usual with expandable
+ *      arrays, we keep the size of the allocated array and the
+ *      number of bytes that have been read into the array.
+ *
+ *      For implementation details, see bbuffer.c.
+ * 
+ */ + +/*! Expandable byte buffer for memory read/write operations */ +struct L_ByteBuffer +{ + l_int32 nalloc; /*!< size of allocated byte array */ + l_int32 n; /*!< number of bytes read into to the array */ + l_int32 nwritten; /*!< number of bytes written from the array */ + l_uint8 *array; /*!< byte array */ +}; +typedef struct L_ByteBuffer L_BBUFFER; + + +#endif /* LEPTONICA_BBUFFER_H */ diff --git a/3rdparty/hgOCR/leptonica/bilateral.c b/3rdparty/hgOCR/leptonica/bilateral.c new file mode 100644 index 00000000..2cc7eabc --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bilateral.c @@ -0,0 +1,810 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bilateral.c + *
+ *
+ *     Top level approximate separable grayscale or color bilateral filtering
+ *          PIX                 *pixBilateral()
+ *          PIX                 *pixBilateralGray()
+ *
+ *     Implementation of approximate separable bilateral filter
+ *          static L_BILATERAL  *bilateralCreate()
+ *          static void         *bilateralDestroy()
+ *          static PIX          *bilateralApply()
+ *
+ *     Slow, exact implementation of grayscale or color bilateral filtering
+ *          PIX                 *pixBilateralExact()
+ *          PIX                 *pixBilateralGrayExact()
+ *          PIX                 *pixBlockBilateralExact()
+ *
+ *     Kernel helper function
+ *          L_KERNEL            *makeRangeKernel()
+ *
+ *  This includes both a slow, exact implementation of the bilateral
+ *  filter algorithm (given by Sylvain Paris and Frédo Durand),
+ *  and a fast, approximate and separable implementation (following
+ *  Yang, Tan and Ahuja).  See bilateral.h for algorithmic details.
+ *
+ *  The bilateral filter has the nice property of applying a gaussian
+ *  filter to smooth parts of the image that don't vary too quickly,
+ *  while at the same time preserving edges.  The filter is nonlinear
+ *  and cannot be decomposed into two separable filters; however,
+ *  there exists an approximate method that is separable.  To further
+ *  speed up the separable implementation, you can generate the
+ *  intermediate data at reduced resolution.
+ *
+ *  The full kernel is composed of two parts: a spatial gaussian filter
+ *  and a nonlinear "range" filter that depends on the intensity difference
+ *  between the reference pixel at the spatial kernel origin and any other
+ *  pixel within the kernel support.
+ *
+ *  In our implementations, the range filter is a parameterized,
+ *  one-sided, 256-element, monotonically decreasing gaussian function
+ *  of the absolute value of the difference between pixel values; namely,
+ *  abs(I2 - I1).  In general, any decreasing function can be used,
+ *  and more generally,  any two-dimensional kernel can be used if
+ *  you wish to relax the 'abs' condition.  (In that case, the range
+ *  filter can be 256 x 256).
+ * 
+ */ + +#include +#include "allheaders.h" +#include "bilateral.h" + +static L_BILATERAL *bilateralCreate(PIX *pixs, l_float32 spatial_stdev, + l_float32 range_stdev, l_int32 ncomps, + l_int32 reduction); +static PIX *bilateralApply(L_BILATERAL *bil); +static void bilateralDestroy(L_BILATERAL **pbil); + + +#ifndef NO_CONSOLE_IO +#define DEBUG_BILATERAL 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*--------------------------------------------------------------------------* + * Top level approximate separable grayscale or color bilateral filtering * + *--------------------------------------------------------------------------*/ +/*! + * \brief pixBilateral() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb, no colormap + * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 + * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 + * \param[in] ncomps number of intermediate sums J(k,x); + * in [4 ... 30] + * \param[in] reduction 1, 2 or 4 + * \return pixd bilateral filtered image, or NULL on error + * + *
+ * Notes:
+ *      (1) This performs a relatively fast, separable bilateral
+ *          filtering operation.  The time is proportional to ncomps
+ *          and varies inversely approximately as the cube of the
+ *          reduction factor.  See bilateral.h for algorithm details.
+ *      (2) We impose minimum values for range_stdev and ncomps to
+ *          avoid nasty artifacts when either are too small.  We also
+ *          impose a constraint on their product:
+ *               ncomps * range_stdev >= 100.
+ *          So for values of range_stdev >= 25, ncomps can be as small as 4.
+ *          Here is a qualitative, intuitive explanation for this constraint.
+ *          Call the difference in k values between the J(k) == 'delta', where
+ *              'delta' ~ 200 / ncomps
+ *          Then this constraint is roughly equivalent to the condition:
+ *              'delta' < 2 * range_stdev
+ *          Note that at an intensity difference of (2 * range_stdev), the
+ *          range part of the kernel reduces the effect by the factor 0.14.
+ *          This constraint requires that we have a sufficient number of
+ *          PCBs (i.e, a small enough 'delta'), so that for any value of
+ *          image intensity I, there exists a k (and a PCB, J(k), such that
+ *              |I - k| < range_stdev
+ *          Any fewer PCBs and we don't have enough to support this condition.
+ *      (3) The upper limit of 30 on ncomps is imposed because the
+ *          gain in accuracy is not worth the extra computation.
+ *      (4) The size of the gaussian kernel is twice the spatial_stdev
+ *          on each side of the origin.  The minimum value of
+ *          spatial_stdev, 0.5, is required to have a finite sized
+ *          spatial kernel.  In practice, a much larger value is used.
+ *      (5) Computation of the intermediate images goes inversely
+ *          as the cube of the reduction factor.  If you can use a
+ *          reduction of 2 or 4, it is well-advised.
+ *      (6) The range kernel is defined over the absolute value of pixel
+ *          grayscale differences, and hence must have size 256 x 1.
+ *          Values in the array represent the multiplying weight
+ *          depending on the absolute gray value difference between
+ *          the source pixel and the neighboring pixel, and should
+ *          be monotonically decreasing.
+ *      (7) Interesting observation.  Run this on prog/fish24.jpg, with
+ *          range_stdev = 60, ncomps = 6, and spatial_dev = {10, 30, 50}.
+ *          As spatial_dev gets larger, we get the counter-intuitive
+ *          result that the body of the red fish becomes less blurry.
+ * 
+ */ +PIX * +pixBilateral(PIX *pixs, + l_float32 spatial_stdev, + l_float32 range_stdev, + l_int32 ncomps, + l_int32 reduction) +{ +l_int32 d; +l_float32 sstdev; /* scaled spatial stdev */ +PIX *pixt, *pixr, *pixg, *pixb, *pixd; + + PROCNAME("pixBilateral"); + + if (!pixs || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not defined or cmapped", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (reduction != 1 && reduction != 2 && reduction != 4) + return (PIX *)ERROR_PTR("reduction invalid", procName, NULL); + sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ + if (sstdev < 0.5) + return (PIX *)ERROR_PTR("sstdev < 0.5", procName, NULL); + if (range_stdev <= 5.0) + return (PIX *)ERROR_PTR("range_stdev <= 5.0", procName, NULL); + if (ncomps < 4 || ncomps > 30) + return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", procName, NULL); + if (ncomps * range_stdev < 100.0) + return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", procName, NULL); + + if (d == 8) + return pixBilateralGray(pixs, spatial_stdev, range_stdev, + ncomps, reduction); + + pixt = pixGetRGBComponent(pixs, COLOR_RED); + pixr = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, + reduction); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + pixg = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, + reduction); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + pixb = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, + reduction); + pixDestroy(&pixt); + pixd = pixCreateRGBImage(pixr, pixg, pixb); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; +} + + +/*! + * \brief pixBilateralGray() + * + * \param[in] pixs 8 bpp gray + * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 + * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 + * \param[in] ncomps number of intermediate sums J(k,x); + * in [4 ... 30] + * \param[in] reduction 1, 2 or 4 + * \return pixd 8 bpp bilateral filtered image, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixBilateral() for constraints on the input parameters.
+ *      (2) See pixBilateral() for algorithm details.
+ * 
+ */ +PIX * +pixBilateralGray(PIX *pixs, + l_float32 spatial_stdev, + l_float32 range_stdev, + l_int32 ncomps, + l_int32 reduction) +{ +l_float32 sstdev; /* scaled spatial stdev */ +PIX *pixd; +L_BILATERAL *bil; + + PROCNAME("pixBilateralGray"); + + if (!pixs || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not defined or cmapped", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp gray", procName, NULL); + if (reduction != 1 && reduction != 2 && reduction != 4) + return (PIX *)ERROR_PTR("reduction invalid", procName, NULL); + sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ + if (sstdev < 0.5) + return (PIX *)ERROR_PTR("sstdev < 0.5", procName, NULL); + if (range_stdev <= 5.0) + return (PIX *)ERROR_PTR("range_stdev <= 5.0", procName, NULL); + if (ncomps < 4 || ncomps > 30) + return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", procName, NULL); + if (ncomps * range_stdev < 100.0) + return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", procName, NULL); + + bil = bilateralCreate(pixs, spatial_stdev, range_stdev, ncomps, reduction); + if (!bil) return (PIX *)ERROR_PTR("bil not made", procName, NULL); + pixd = bilateralApply(bil); + bilateralDestroy(&bil); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Implementation of approximate separable bilateral filter * + *----------------------------------------------------------------------*/ +/*! + * \brief bilateralCreate() + * + * \param[in] pixs 8 bpp gray, no colormap + * \param[in] spatial_stdev of gaussian kernel; in pixels, > 0.5 + * \param[in] range_stdev of gaussian range kernel; > 5.0; typ. 50.0 + * \param[in] ncomps number of intermediate sums J(k,x); + * in [4 ... 30] + * \param[in] reduction 1, 2 or 4 + * \return bil, or NULL on error + * + *
+ * Notes:
+ *      (1) This initializes a bilateral filtering operation, generating all
+ *          the data required.  It takes most of the time in the bilateral
+ *          filtering operation.
+ *      (2) See bilateral.h for details of the algorithm.
+ *      (3) See pixBilateral() for constraints on input parameters, which
+ *          are not checked here.
+ * 
+ */ +static L_BILATERAL * +bilateralCreate(PIX *pixs, + l_float32 spatial_stdev, + l_float32 range_stdev, + l_int32 ncomps, + l_int32 reduction) +{ +l_int32 w, ws, wd, h, hs, hd, i, j, k, index; +l_int32 border, minval, maxval, spatial_size; +l_int32 halfwidth, wpls, wplt, wpld, kval, nval, dval; +l_float32 sstdev, fval1, fval2, denom, sum, norm, kern; +l_int32 *nc, *kindex; +l_float32 *kfract, *range, *spatial; +l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; +L_BILATERAL *bil; +PIX *pixt, *pixt2, *pixsc, *pixd; +PIXA *pixac; + + PROCNAME("bilateralCreate"); + + sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ + if ((bil = (L_BILATERAL *)LEPT_CALLOC(1, sizeof(L_BILATERAL))) == NULL) + return (L_BILATERAL *)ERROR_PTR("bil not made", procName, NULL); + bil->spatial_stdev = sstdev; + bil->range_stdev = range_stdev; + bil->reduction = reduction; + bil->ncomps = ncomps; + + if (reduction == 1) { + pixt = pixClone(pixs); + } else if (reduction == 2) { + pixt = pixScaleAreaMap2(pixs); + } else { /* reduction == 4) */ + pixt2 = pixScaleAreaMap2(pixs); + pixt = pixScaleAreaMap2(pixt2); + pixDestroy(&pixt2); + } + + pixGetExtremeValue(pixt, 1, L_SELECT_MIN, NULL, NULL, NULL, &minval); + pixGetExtremeValue(pixt, 1, L_SELECT_MAX, NULL, NULL, NULL, &maxval); + bil->minval = minval; + bil->maxval = maxval; + + border = (l_int32)(2 * sstdev + 1); + pixsc = pixAddMirroredBorder(pixt, border, border, border, border); + bil->pixsc = pixsc; + pixDestroy(&pixt); + bil->pixs = pixClone(pixs); + + + /* -------------------------------------------------------------------- * + * Generate arrays for interpolation of J(k,x): + * (1.0 - kfract[.]) * J(kindex[.], x) + kfract[.] * J(kindex[.] + 1, x), + * where I(x) is the index into kfract[] and kindex[], + * and x is an index into the 2D image array. + * -------------------------------------------------------------------- */ + /* nc is the set of k values to be used in J(k,x) */ + nc = (l_int32 *)LEPT_CALLOC(ncomps, sizeof(l_int32)); + for (i = 0; i < ncomps; i++) + nc[i] = minval + i * (maxval - minval) / (ncomps - 1); + bil->nc = nc; + + /* kindex maps from intensity I(x) to the lower k index for J(k,x) */ + kindex = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { + fval2 = nc[k + 1]; + while (i < fval2) { + kindex[i] = k; + i++; + } + } + kindex[maxval] = ncomps - 2; + bil->kindex = kindex; + + /* kfract maps from intensity I(x) to the fraction of J(k+1,x) used */ + kfract = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); /* from lower */ + for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { + fval1 = nc[k]; + fval2 = nc[k + 1]; + while (i < fval2) { + kfract[i] = (l_float32)(i - fval1) / (l_float32)(fval2 - fval1); + i++; + } + } + kfract[maxval] = 1.0; + bil->kfract = kfract; + +#if DEBUG_BILATERAL + for (i = minval; i <= maxval; i++) + fprintf(stderr, "kindex[%d] = %d; kfract[%d] = %5.3f\n", + i, kindex[i], i, kfract[i]); + for (i = 0; i < ncomps; i++) + fprintf(stderr, "nc[%d] = %d\n", i, nc[i]); +#endif /* DEBUG_BILATERAL */ + + + /* -------------------------------------------------------------------- * + * Generate 1-D kernel arrays (spatial and range) * + * -------------------------------------------------------------------- */ + spatial_size = 2 * sstdev + 1; + spatial = (l_float32 *)LEPT_CALLOC(spatial_size, sizeof(l_float32)); + denom = 2. * sstdev * sstdev; + for (i = 0; i < spatial_size; i++) + spatial[i] = expf(-(l_float32)(i * i) / denom); + bil->spatial = spatial; + + range = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); + denom = 2. * range_stdev * range_stdev; + for (i = 0; i < 256; i++) + range[i] = expf(-(l_float32)(i * i) / denom); + bil->range = range; + + + /* -------------------------------------------------------------------- * + * Generate principal bilateral component images * + * -------------------------------------------------------------------- */ + pixac = pixaCreate(ncomps); + pixGetDimensions(pixsc, &ws, &hs, NULL); + datas = pixGetData(pixsc); + wpls = pixGetWpl(pixsc); + pixGetDimensions(pixs, &w, &h, NULL); + wd = (w + reduction - 1) / reduction; + hd = (h + reduction - 1) / reduction; + halfwidth = (l_int32)(2.0 * sstdev); + for (index = 0; index < ncomps; index++) { + pixt = pixCopy(NULL, pixsc); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + kval = nc[index]; + /* Separable convolutions: horizontal first */ + for (i = 0; i < hd; i++) { + lines = datas + (border + i) * wpls; + linet = datat + (border + i) * wplt; + for (j = 0; j < wd; j++) { + sum = 0.0; + norm = 0.0; + for (k = -halfwidth; k <= halfwidth; k++) { + nval = GET_DATA_BYTE(lines, border + j + k); + kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; + sum += kern * nval; + norm += kern; + } + dval = (l_int32)((sum / norm) + 0.5); + SET_DATA_BYTE(linet, border + j, dval); + } + } + /* Vertical convolution */ + pixd = pixCreate(wd, hd, 8); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < hd; i++) { + linet = datat + (border + i) * wplt; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + sum = 0.0; + norm = 0.0; + for (k = -halfwidth; k <= halfwidth; k++) { + nval = GET_DATA_BYTE(linet + k * wplt, border + j); + kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; + sum += kern * nval; + norm += kern; + } + dval = (l_int32)((sum / norm) + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + pixDestroy(&pixt); + pixaAddPix(pixac, pixd, L_INSERT); + } + bil->pixac = pixac; + bil->lineset = (l_uint32 ***)pixaGetLinePtrs(pixac, NULL); + + return bil; +} + + +/*! + * \brief bilateralApply() + * + * \param[in] bil + * \return pixd + */ +static PIX * +bilateralApply(L_BILATERAL *bil) +{ +l_int32 i, j, k, ired, jred, w, h, wpls, wpld, ncomps, reduction; +l_int32 vals, vald, lowval, hival; +l_int32 *kindex; +l_float32 fract; +l_float32 *kfract; +l_uint32 *lines, *lined, *datas, *datad; +l_uint32 ***lineset = NULL; /* for set of PBC */ +PIX *pixs, *pixd; +PIXA *pixac; + + PROCNAME("bilateralApply"); + + if (!bil) + return (PIX *)ERROR_PTR("bil not defined", procName, NULL); + pixs = bil->pixs; + ncomps = bil->ncomps; + kindex = bil->kindex; + kfract = bil->kfract; + reduction = bil->reduction; + pixac = bil->pixac; + lineset = bil->lineset; + if (pixaGetCount(pixac) != ncomps) + return (PIX *)ERROR_PTR("PBC images do not exist", procName, NULL); + + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + pixGetDimensions(pixs, &w, &h, NULL); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + ired = i / reduction; + for (j = 0; j < w; j++) { + jred = j / reduction; + vals = GET_DATA_BYTE(lines, j); + k = kindex[vals]; + lowval = GET_DATA_BYTE(lineset[k][ired], jred); + hival = GET_DATA_BYTE(lineset[k + 1][ired], jred); + fract = kfract[vals]; + vald = (l_int32)((1.0 - fract) * lowval + fract * hival + 0.5); + SET_DATA_BYTE(lined, j, vald); + } + } + + return pixd; +} + + +/*! + * \brief bilateralDestroy() + * + * \param[in,out] pbil will be set to null before returning + */ +static void +bilateralDestroy(L_BILATERAL **pbil) +{ +l_int32 i; +L_BILATERAL *bil; + + PROCNAME("bilateralDestroy"); + + if (pbil == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((bil = *pbil) == NULL) + return; + + pixDestroy(&bil->pixs); + pixDestroy(&bil->pixsc); + pixaDestroy(&bil->pixac); + LEPT_FREE(bil->spatial); + LEPT_FREE(bil->range); + LEPT_FREE(bil->nc); + LEPT_FREE(bil->kindex); + LEPT_FREE(bil->kfract); + for (i = 0; i < bil->ncomps; i++) + LEPT_FREE(bil->lineset[i]); + LEPT_FREE(bil->lineset); + LEPT_FREE(bil); + *pbil = NULL; + return; +} + + +/*----------------------------------------------------------------------* + * Exact implementation of grayscale or color bilateral filtering * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBilateralExact() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb + * \param[in] spatial_kel gaussian kernel + * \param[in] range_kel [optional] 256 x 1, monotonically decreasing + * \return pixd 8 bpp bilateral filtered image + * + *
+ * Notes:
+ *      (1) The spatial_kel is a conventional smoothing kernel, typically a
+ *          2-d Gaussian kernel or other block kernel.  It can be either
+ *          normalized or not, but must be everywhere positive.
+ *      (2) The range_kel is defined over the absolute value of pixel
+ *          grayscale differences, and hence must have size 256 x 1.
+ *          Values in the array represent the multiplying weight for each
+ *          gray value difference between the target pixel and center of the
+ *          kernel, and should be monotonically decreasing.
+ *      (3) If range_kel == NULL, a constant weight is applied regardless
+ *          of the range value difference.  This degenerates to a regular
+ *          pixConvolve() with a normalized kernel.
+ * 
+ */ +PIX * +pixBilateralExact(PIX *pixs, + L_KERNEL *spatial_kel, + L_KERNEL *range_kel) +{ +l_int32 d; +PIX *pixt, *pixr, *pixg, *pixb, *pixd; + + PROCNAME("pixBilateralExact"); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (!spatial_kel) + return (PIX *)ERROR_PTR("spatial_ke not defined", procName, NULL); + + if (d == 8) { + return pixBilateralGrayExact(pixs, spatial_kel, range_kel); + } else { /* d == 32 */ + pixt = pixGetRGBComponent(pixs, COLOR_RED); + pixr = pixBilateralGrayExact(pixt, spatial_kel, range_kel); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + pixg = pixBilateralGrayExact(pixt, spatial_kel, range_kel); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + pixb = pixBilateralGrayExact(pixt, spatial_kel, range_kel); + pixDestroy(&pixt); + pixd = pixCreateRGBImage(pixr, pixg, pixb); + + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; + } +} + + +/*! + * \brief pixBilateralGrayExact() + * + * \param[in] pixs 8 bpp gray + * \param[in] spatial_kel gaussian kernel + * \param[in] range_kel [optional] 256 x 1, monotonically decreasing + * \return pixd 8 bpp bilateral filtered image + * + *
+ * Notes:
+ *      (1) See pixBilateralExact().
+ * 
+ */ +PIX * +pixBilateralGrayExact(PIX *pixs, + L_KERNEL *spatial_kel, + L_KERNEL *range_kel) +{ +l_int32 i, j, id, jd, k, m, w, h, d, sx, sy, cx, cy, wplt, wpld; +l_int32 val, center_val; +l_uint32 *datat, *datad, *linet, *lined; +l_float32 sum, weight_sum, weight; +L_KERNEL *keli; +PIX *pixt, *pixd; + + PROCNAME("pixBilateralGrayExact"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be gray", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (!spatial_kel) + return (PIX *)ERROR_PTR("spatial kel not defined", procName, NULL); + + if (!range_kel) + return pixConvolve(pixs, spatial_kel, 8, 1); + if (range_kel->sx != 256 || range_kel->sy != 1) + return (PIX *)ERROR_PTR("range kel not {256 x 1", procName, NULL); + + keli = kernelInvert(spatial_kel); + kernelGetParameters(keli, &sy, &sx, &cy, &cx); + if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) { + kernelDestroy(&keli); + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + + pixd = pixCreate(w, h, 8); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0, id = 0; id < h; i++, id++) { + lined = datad + id * wpld; + for (j = 0, jd = 0; jd < w; j++, jd++) { + center_val = GET_DATA_BYTE(datat + (i + cy) * wplt, j + cx); + weight_sum = 0.0; + sum = 0.0; + for (k = 0; k < sy; k++) { + linet = datat + (i + k) * wplt; + for (m = 0; m < sx; m++) { + val = GET_DATA_BYTE(linet, j + m); + weight = keli->data[k][m] * + range_kel->data[0][L_ABS(center_val - val)]; + weight_sum += weight; + sum += val * weight; + } + } + SET_DATA_BYTE(lined, jd, (l_int32)(sum / weight_sum + 0.5)); + } + } + + kernelDestroy(&keli); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixBlockBilateralExact() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb + * \param[in] spatial_stdev must be > 0.0 + * \param[in] range_stdev must be > 0.0 + * \return pixd 8 bpp or 32 bpp bilateral filtered image + * + *
+ * Notes:
+ *      (1) See pixBilateralExact().  This provides an interface using
+ *          the standard deviations of the spatial and range filters.
+ *      (2) The convolution window halfwidth is 2 * spatial_stdev,
+ *          and the square filter size is 4 * spatial_stdev + 1.
+ *          The kernel captures 95% of total energy.  This is compensated
+ *          by normalization.
+ *      (3) The range_stdev is analogous to spatial_halfwidth in the
+ *          grayscale domain [0...255], and determines how much damping of the
+ *          smoothing operation is applied across edges.  The larger this
+ *          value is, the smaller the damping.  The smaller the value, the
+ *          more edge details are preserved.  These approximations are useful
+ *          for deciding the appropriate cutoff.
+ *              kernel[1 * stdev] ~= 0.6  * kernel[0]
+ *              kernel[2 * stdev] ~= 0.14 * kernel[0]
+ *              kernel[3 * stdev] ~= 0.01 * kernel[0]
+ *          If range_stdev is infinite there is no damping, and this
+ *          becomes a conventional gaussian smoothing.
+ *          This value does not affect the run time.
+ *      (4) If range_stdev is negative or zero, the range kernel is
+ *          ignored and this degenerates to a straight gaussian convolution.
+ *      (5) This is very slow for large spatial filters.  The time
+ *          on a 3GHz pentium is roughly
+ *             T = 1.2 * 10^-8 * (A * sh^2)  sec
+ *          where A = # of pixels, sh = spatial halfwidth of filter.
+ * 
+ */ +PIX* +pixBlockBilateralExact(PIX *pixs, + l_float32 spatial_stdev, + l_float32 range_stdev) +{ +l_int32 d, halfwidth; +L_KERNEL *spatial_kel, *range_kel; +PIX *pixd; + + PROCNAME("pixBlockBilateralExact"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); + if (spatial_stdev <= 0.0) + return (PIX *)ERROR_PTR("invalid spatial stdev", procName, NULL); + if (range_stdev <= 0.0) + return (PIX *)ERROR_PTR("invalid range stdev", procName, NULL); + + halfwidth = 2 * spatial_stdev; + spatial_kel = makeGaussianKernel(halfwidth, halfwidth, spatial_stdev, 1.0); + range_kel = makeRangeKernel(range_stdev); + pixd = pixBilateralExact(pixs, spatial_kel, range_kel); + kernelDestroy(&spatial_kel); + kernelDestroy(&range_kel); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Kernel helper function * + *----------------------------------------------------------------------*/ +/*! + * \brief makeRangeKernel() + * + * \param[in] range_stdev must be > 0.0 + * \return kel, or NULL on error + * + *
+ * Notes:
+ *      (1) Creates a one-sided Gaussian kernel with the given
+ *          standard deviation.  At grayscale difference of one stdev,
+ *          the kernel falls to 0.6, and to 0.01 at three stdev.
+ *      (2) A typical input number might be 20.  Then pixels whose
+ *          value differs by 60 from the center pixel have their
+ *          weight in the convolution reduced by a factor of about 0.01.
+ * 
+ */ +L_KERNEL * +makeRangeKernel(l_float32 range_stdev) +{ +l_int32 x; +l_float32 val, denom; +L_KERNEL *kel; + + PROCNAME("makeRangeKernel"); + + if (range_stdev <= 0.0) + return (L_KERNEL *)ERROR_PTR("invalid stdev <= 0", procName, NULL); + + denom = 2. * range_stdev * range_stdev; + if ((kel = kernelCreate(1, 256)) == NULL) + return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); + kernelSetOrigin(kel, 0, 0); + for (x = 0; x < 256; x++) { + val = expf(-(l_float32)(x * x) / denom); + kernelSetElement(kel, 0, x, val); + } + return kel; +} diff --git a/3rdparty/hgOCR/leptonica/bilateral.h b/3rdparty/hgOCR/leptonica/bilateral.h new file mode 100644 index 00000000..e5b5bbdd --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bilateral.h @@ -0,0 +1,136 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_BILATERAL_H +#define LEPTONICA_BILATERAL_H + +/*! + * \file bilateral.h + * + *
+ *  Contains the following struct
+ *      struct L_Bilateral
+ *
+ *
+ *  For a tutorial introduction to bilateral filters, which apply a
+ *  gaussian blur to smooth parts of the image while preserving edges, see
+ *    http://people.csail.mit.edu/sparis/bf_course/slides/03_definition_bf.pdf
+ *
+ *  We give an implementation of a bilateral filtering algorithm given in:
+ *    "Real-Time O(1) Bilateral Filtering," by Yang, Tan and Ahuja, CVPR 2009
+ *  which is at:
+ *    http://vision.ai.uiuc.edu/~qyang6/publications/cvpr-09-qingxiong-yang.pdf
+ *  This is based on an earlier algorithm by Sylvain Paris and Frédo Durand:
+ *    http://people.csail.mit.edu/sparis/publi/2006/eccv/
+ *               Paris_06_Fast_Approximation.pdf
+ *
+ *  The kernel of the filter is a product of a spatial gaussian and a
+ *  monotonically decreasing function of the difference in intensity
+ *  between the source pixel and the neighboring pixel.  The intensity
+ *  part of the filter gives higher influence for pixels with intensities
+ *  that are near to the source pixel, and the spatial part of the
+ *  filter gives higher weight to pixels that are near the source pixel.
+ *  This combination smooths in relatively uniform regions, while
+ *  maintaining edges.
+ *
+ *  The advantage of the appoach of Yang et al is that it is separable,
+ *  so the computation time is linear in the gaussian filter size.
+ *  Furthermore, it is possible to do much of the computation as a reduced
+ *  scale, which gives a good approximation to the full resolution version
+ *  but greatly speeds it up.
+ *
+ *  The bilateral filtered value at x is:
+ *
+ *            sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|) * I(y)
+ *    I'(x) = --------------------------------------------------------------
+ *            sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|)
+ *
+ *  where I() is the input image, I'() is the filtered image, N(x) is the
+ *  set of pixels around x in the filter support, and spatial() and range()
+ *  are gaussian functions:
+ *          spatial(x) = exp(-x^2 / (2 * s_s^2))
+ *          range(x) = exp(-x^2 / (2 * s_r^2))
+ *  and s_s and s_r and the standard deviations of the two gaussians.
+ *
+ *  Yang et al use a separable approximation to this, by defining a set
+ *  of related but separable functions J(k,x), that we call Principal
+ *  Bilateral Components (PBC):
+ *
+ *             sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|) * I(y)
+ *    J(k,x) = -----------------------------------------------------------
+ *             sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|)
+ *
+ *  which are computed quickly for a set of n values k[p], p = 0 ... n-1.
+ *  Then each output pixel is found using a linear interpolation:
+ *
+ *    I'(x) = (1 - q) * J(k[p],x) + q * J(k[p+1],x)
+ *
+ *  where J(k[p],x) and J(k[p+1],x) are PBC for which
+ *    k[p] <= I(x) and k[p+1] >= I(x), and
+ *    q = (I(x) - k[p]) / (k[p+1] - k[p]).
+ *
+ *  We can also subsample I(x), create subsampled versions of J(k,x),
+ *  which are then interpolated between for I'(x).
+ *
+ *  We generate 'pixsc', by optionally downscaling the input image
+ *  (using area mapping by the factor 'reduction'), and then adding
+ *  a mirrored border to avoid boundary cases.  This is then used
+ *  to compute 'ncomps' PBCs.
+ *
+ *  The 'spatial_stdev' is also downscaled by 'reduction'.  The size
+ *  of the 'spatial' array is 4 * (reduced 'spatial_stdev') + 1.
+ *  The size of the 'range' array is 256.
+ * 
+ */ + + +/*------------------------------------------------------------------------* + * Bilateral filter * + *------------------------------------------------------------------------*/ + +/*! Bilateral filter */ +struct L_Bilateral +{ + struct Pix *pixs; /*!< clone of source pix */ + struct Pix *pixsc; /*!< downscaled pix with mirrored border */ + l_int32 reduction; /*!< 1, 2 or 4x for intermediates */ + l_float32 spatial_stdev; /*!< stdev of spatial gaussian */ + l_float32 range_stdev; /*!< stdev of range gaussian */ + l_float32 *spatial; /*!< 1D gaussian spatial kernel */ + l_float32 *range; /*!< one-sided gaussian range kernel */ + l_int32 minval; /*!< min value in 8 bpp pix */ + l_int32 maxval; /*!< max value in 8 bpp pix */ + l_int32 ncomps; /*!< number of intermediate results */ + l_int32 *nc; /*!< set of k values (size ncomps) */ + l_int32 *kindex; /*!< mapping from intensity to lower k */ + l_float32 *kfract; /*!< mapping from intensity to fract k */ + struct Pixa *pixac; /*!< intermediate result images (PBC) */ + l_uint32 ***lineset; /*!< lineptrs for pixac */ +}; +typedef struct L_Bilateral L_BILATERAL; + + +#endif /* LEPTONICA_BILATERAL_H */ diff --git a/3rdparty/hgOCR/leptonica/bilinear.c b/3rdparty/hgOCR/leptonica/bilinear.c new file mode 100644 index 00000000..e03a840c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bilinear.c @@ -0,0 +1,910 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file bilinear.c + *
+ *
+ *      Bilinear (4 pt) image transformation using a sampled
+ *      (to nearest integer) transform on each dest point
+ *           PIX      *pixBilinearSampledPta()
+ *           PIX      *pixBilinearSampled()
+ *
+ *      Bilinear (4 pt) image transformation using interpolation
+ *      (or area mapping) for anti-aliasing images that are
+ *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
+ *           PIX      *pixBilinearPta()
+ *           PIX      *pixBilinear()
+ *           PIX      *pixBilinearPtaColor()
+ *           PIX      *pixBilinearColor()
+ *           PIX      *pixBilinearPtaGray()
+ *           PIX      *pixBilinearGray()
+ *
+ *      Bilinear transform including alpha (blend) component
+ *           PIX      *pixBilinearPtaWithAlpha()
+ *
+ *      Bilinear coordinate transformation
+ *           l_int32   getBilinearXformCoeffs()
+ *           l_int32   bilinearXformSampledPt()
+ *           l_int32   bilinearXformPt()
+ *
+ *      A bilinear transform can be specified as a specific functional
+ *      mapping between 4 points in the source and 4 points in the dest.
+ *      It can be used as an approximation to a (nonlinear) projective
+ *      transform, because for small warps it is very similar and
+ *      it is more stable.  (Projective transforms have a division
+ *      by a quantity that can get arbitrarily small.)
+ *
+ *      We give both a bilinear coordinate transformation and
+ *      a bilinear image transformation.
+ *
+ *      For the former, we ask for the coordinate value (x',y')
+ *      in the transformed space for any point (x,y) in the original
+ *      space.  The coefficients of the transformation are found by
+ *      solving 8 simultaneous equations for the 8 coordinates of
+ *      the 4 points in src and dest.  The transformation can then
+ *      be used to compute the associated image transform, by
+ *      computing, for each dest pixel, the relevant pixel(s) in
+ *      the source.  This can be done either by taking the closest
+ *      src pixel to each transformed dest pixel ("sampling") or
+ *      by doing an interpolation and averaging over 4 source
+ *      pixels with appropriate weightings ("interpolated").
+ *
+ *      A typical application would be to remove some of the
+ *      keystoning due to a projective transform in the imaging system.
+ *
+ *      The bilinear transform is given by specifying two equations:
+ *
+ *          x' = ax + by + cxy + d
+ *          y' = ex + fy + gxy + h
+ *
+ *      where the eight coefficients have been computed from four
+ *      sets of these equations, each for two corresponding data pts.
+ *      In practice, once the coefficients are known, we use the
+ *      equations "backwards": for each point (x,y) in the dest image,
+ *      these two equations are used to compute the corresponding point
+ *      (x',y') in the src.  That computed point in the src is then used
+ *      to determine the corresponding dest pixel value in one of two ways:
+ *
+ *       ~ sampling: simply take the value of the src pixel in which this
+ *                   point falls
+ *       ~ interpolation: take appropriate linear combinations of the
+ *                        four src pixels that this dest pixel would
+ *                        overlap, with the coefficients proportional
+ *                        to the amount of overlap
+ *
+ *      For small warp, like rotation, area mapping in the
+ *      interpolation is equivalent to linear interpolation.
+ *
+ *      Typical relative timing of transforms (sampled = 1.0):
+ *      8 bpp:   sampled        1.0
+ *               interpolated   1.6
+ *      32 bpp:  sampled        1.0
+ *               interpolated   1.8
+ *      Additionally, the computation time/pixel is nearly the same
+ *      for 8 bpp and 32 bpp, for both sampled and interpolated.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +extern l_float32 AlphaMaskBorderVals[2]; + + +/*-------------------------------------------------------------* + * Sampled bilinear image transformation * + *-------------------------------------------------------------*/ +/*! + * \brief pixBilinearSampledPta() + * + * \param[in] pixs all depths + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) No 3 of the 4 points may be collinear.
+ *      (4) For 8 and 32 bpp pix, better quality is obtained by the
+ *          somewhat slower pixBilinearPta().  See that
+ *          function for relative timings between sampled and interpolated.
+ * 
+ */ +PIX * +pixBilinearSampledPta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixBilinearSampledPta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getBilinearXformCoeffs(ptad, ptas, &vc); + pixd = pixBilinearSampled(pixs, vc, incolor); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixBilinearSampled() + * + * \param[in] pixs all depths + * \param[in] vc vector of 8 coefficients for bilinear transformation + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) For 8 or 32 bpp, much better quality is obtained by the
+ *          somewhat slower pixBilinear().  See that function
+ *          for relative timings between sampled and interpolated.
+ * 
+ */ +PIX * +pixBilinearSampled(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; +l_uint32 val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixBilinearSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); + + /* Init all dest pixels to color to be brought in from outside */ + pixd = pixCreateTemplate(pixs); + if ((cmap = pixGetColormap(pixs)) != NULL) { + if (incolor == L_BRING_IN_WHITE) + color = 1; + else + color = 0; + pixcmapAddBlackOrWhite(cmap, color, &cmapindex); + pixSetAllArbitrary(pixd, cmapindex); + } else { + if ((d == 1 && incolor == L_BRING_IN_WHITE) || + (d > 1 && incolor == L_BRING_IN_BLACK)) { + pixClearAll(pixd); + } else { + pixSetAll(pixd); + } + } + + /* Scan over the dest pixels */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + bilinearXformSampledPt(vc, j, i, &x, &y); + if (x < 0 || y < 0 || x >=w || y >= h) + continue; + lines = datas + y * wpls; + if (d == 1) { + val = GET_DATA_BIT(lines, x); + SET_DATA_BIT_VAL(lined, j, val); + } else if (d == 8) { + val = GET_DATA_BYTE(lines, x); + SET_DATA_BYTE(lined, j, val); + } else if (d == 32) { + lined[j] = lines[x]; + } else if (d == 2) { + val = GET_DATA_DIBIT(lines, x); + SET_DATA_DIBIT(lined, j, val); + } else if (d == 4) { + val = GET_DATA_QBIT(lines, x); + SET_DATA_QBIT(lined, j, val); + } + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Interpolated bilinear image transformation * + *---------------------------------------------------------------------*/ +/*! + * \brief pixBilinearPta() + * + * \param[in] pixs all depths; colormap ok + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixBilinearPta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixBilinearPta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixBilinearSampledPta(pixs, ptad, ptas, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixBilinearPtaGray(pixt2, ptad, ptas, colorval); + else /* d == 32 */ + pixd = pixBilinearPtaColor(pixt2, ptad, ptas, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixBilinear() + * + * \param[in] pixs all depths; colormap ok + * \param[in] vc vector of 8 coefficients for bilinear transformation + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixBilinear(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixBilinear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixBilinearSampled(pixs, vc, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixBilinearGray(pixt2, vc, colorval); + else /* d == 32 */ + pixd = pixBilinearColor(pixt2, vc, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixBilinearPtaColor() + * + * \param[in] pixs 32 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixBilinearPtaColor(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint32 colorval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixBilinearPtaColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getBilinearXformCoeffs(ptad, ptas, &vc); + pixd = pixBilinearColor(pixs, vc, colorval); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixBilinearColor() + * + * \param[in] pixs 32 bpp + * \param[in] vc vector of 8 coefficients for bilinear transformation + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixBilinearColor(PIX *pixs, + l_float32 *vc, + l_uint32 colorval) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_uint32 val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixBilinearColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, colorval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + bilinearXformPt(vc, j, i, &x, &y); + linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, + &val); + *(lined + j) = val; + } + } + + /* If rgba, transform the pixs alpha channel and insert in pixd */ + if (pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixBilinearGray(pix1, vc, 255); /* bring in opaque */ + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return pixd; +} + + +/*! + * \brief pixBilinearPtaGray() + * + * \param[in] pixs 8 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] grayval e.g., 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixBilinearPtaGray(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint8 grayval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixBilinearPtaGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getBilinearXformCoeffs(ptad, ptas, &vc); + pixd = pixBilinearGray(pixs, vc, grayval); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixBilinearGray() + * + * \param[in] pixs 8 bpp + * \param[in] vc vector of 8 coefficients for bilinear transformation + * \param[in] grayval e.g., 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixBilinearGray(PIX *pixs, + l_float32 *vc, + l_uint8 grayval) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pixd; + + PROCNAME("pixBilinearGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, grayval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + bilinearXformPt(vc, j, i, &x, &y); + linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Bilinear transform including alpha (blend) component * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixBilinearPtaWithAlpha() + * + * \param[in] pixs 32 bpp rgb + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] pixg [optional] 8 bpp, can be null + * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent + * and 1.0 fully opaque + * \param[in] border of pixels added to capture transformed source pixels + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The alpha channel is transformed separately from pixs,
+ *          and aligns with it, being fully transparent outside the
+ *          boundary of the transformed pixs.  For pixels that are fully
+ *          transparent, a blending function like pixBlendWithGrayMask()
+ *          will give zero weight to corresponding pixels in pixs.
+ *      (2) If %pixg is NULL, it is generated as an alpha layer that is
+ *          partially opaque, using %fract.  Otherwise, it is cropped
+ *          to %pixs if required and %fract is ignored.  The alpha channel
+ *          in %pixs is never used.
+ *      (3) Colormaps are removed.
+ *      (4) When pixs is transformed, it doesn't matter what color is brought
+ *          in because the alpha channel will be transparent (0) there.
+ *      (5) To avoid losing source pixels in the destination, it may be
+ *          necessary to add a border to the source pix before doing
+ *          the bilinear transformation.  This can be any non-negative number.
+ *      (6) The input %ptad and %ptas are in a coordinate space before
+ *          the border is added.  Internally, we compensate for this
+ *          before doing the bilinear transform on the image after
+ *          the border is added.
+ *      (7) The default setting for the border values in the alpha channel
+ *          is 0 (transparent) for the outermost ring of pixels and
+ *          (0.5 * fract * 255) for the second ring.  When blended over
+ *          a second image, this
+ *          (a) shrinks the visible image to make a clean overlap edge
+ *              with an image below, and
+ *          (b) softens the edges by weakening the aliasing there.
+ *          Use l_setAlphaMaskBorder() to change these values.
+ * 
+ */ +PIX * +pixBilinearPtaWithAlpha(PIX *pixs, + PTA *ptad, + PTA *ptas, + PIX *pixg, + l_float32 fract, + l_int32 border) +{ +l_int32 ws, hs, d; +PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; +PTA *ptad2, *ptas2; + + PROCNAME("pixBilinearPtaWithAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (d != 32 && pixGetColormap(pixs) == NULL) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (pixg && pixGetDepth(pixg) != 8) { + L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", + procName); + pixg = NULL; + } + if (!pixg && (fract < 0.0 || fract > 1.0)) { + L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); + fract = 1.0; + } + if (!pixg && fract == 0.0) + L_WARNING("fully opaque alpha; image cannot be blended\n", procName); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + + /* Add border; the color doesn't matter */ + pixb1 = pixAddBorder(pixs, border, 0); + + /* Transform the ptr arrays to work on the bordered image */ + ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); + ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); + + /* Do separate bilinear transform of rgb channels of pixs and of pixg */ + pixd = pixBilinearPtaColor(pixb1, ptad2, ptas2, 0); + if (!pixg) { + pixg2 = pixCreate(ws, hs, 8); + if (fract == 1.0) + pixSetAll(pixg2); + else + pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); + } else { + pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); + } + if (ws > 10 && hs > 10) { /* see note 7 */ + pixSetBorderRingVal(pixg2, 1, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); + pixSetBorderRingVal(pixg2, 2, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); + + } + pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ + pixga = pixBilinearPtaGray(pixb2, ptad2, ptas2, 0); + pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); + pixSetSpp(pixd, 4); + + pixDestroy(&pixg2); + pixDestroy(&pixb1); + pixDestroy(&pixb2); + pixDestroy(&pixga); + ptaDestroy(&ptad2); + ptaDestroy(&ptas2); + return pixd; +} + + +/*-------------------------------------------------------------* + * Bilinear coordinate transformation * + *-------------------------------------------------------------*/ +/*! + * \brief getBilinearXformCoeffs() + * + * \param[in] ptas source 4 points; unprimed + * \param[in] ptad transformed 4 points; primed + * \param[out] pvc vector of coefficients of transform + * \return 0 if OK; 1 on error + * + *
+ * We have a set of 8 equations, describing the bilinear
+ * transformation that takes 4 points ptas into 4 other
+ * points ptad.  These equations are:
+ *
+ *          x1' = c[0]*x1 + c[1]*y1 + c[2]*x1*y1 + c[3]
+ *          y1' = c[4]*x1 + c[5]*y1 + c[6]*x1*y1 + c[7]
+ *          x2' = c[0]*x2 + c[1]*y2 + c[2]*x2*y2 + c[3]
+ *          y2' = c[4]*x2 + c[5]*y2 + c[6]*x2*y2 + c[7]
+ *          x3' = c[0]*x3 + c[1]*y3 + c[2]*x3*y3 + c[3]
+ *          y3' = c[4]*x3 + c[5]*y3 + c[6]*x3*y3 + c[7]
+ *          x4' = c[0]*x4 + c[1]*y4 + c[2]*x4*y4 + c[3]
+ *          y4' = c[4]*x4 + c[5]*y4 + c[6]*x4*y4 + c[7]
+ *
+ * This can be represented as
+ *
+ *           AC = B
+ *
+ * where B and C are column vectors
+ *
+ *         B = [ x1' y1' x2' y2' x3' y3' x4' y4' ]
+ *         C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ]
+ *
+ * and A is the 8x8 matrix
+ *
+ *             x1   y1   x1*y1   1   0    0      0     0
+ *              0    0     0     0   x1   y1   x1*y1   1
+ *             x2   y2   x2*y2   1   0    0      0     0
+ *              0    0     0     0   x2   y2   x2*y2   1
+ *             x3   y3   x3*y3   1   0    0      0     0
+ *              0    0     0     0   x3   y3   x3*y3   1
+ *             x4   y4   x4*y4   1   0    0      0     0
+ *              0    0     0     0   x4   y4   x4*y4   1
+ *
+ * These eight equations are solved here for the coefficients C.
+ *
+ * These eight coefficients can then be used to find the mapping
+ * x,y) --> (x',y':
+ *
+ *           x' = c[0]x + c[1]y + c[2]xy + c[3]
+ *           y' = c[4]x + c[5]y + c[6]xy + c[7]
+ *
+ * that are implemented in bilinearXformSampledPt and
+ * bilinearXFormPt.
+ * 
+ */ +l_ok +getBilinearXformCoeffs(PTA *ptas, + PTA *ptad, + l_float32 **pvc) +{ +l_int32 i; +l_float32 x1, y1, x2, y2, x3, y3, x4, y4; +l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ +l_float32 *a[8]; /* 8x8 matrix A */ + + PROCNAME("getBilinearXformCoeffs"); + + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (!ptad) + return ERROR_INT("ptad not defined", procName, 1); + if (!pvc) + return ERROR_INT("&vc not defined", procName, 1); + + b = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); + *pvc = b; + ptaGetPt(ptas, 0, &x1, &y1); + ptaGetPt(ptas, 1, &x2, &y2); + ptaGetPt(ptas, 2, &x3, &y3); + ptaGetPt(ptas, 3, &x4, &y4); + ptaGetPt(ptad, 0, &b[0], &b[1]); + ptaGetPt(ptad, 1, &b[2], &b[3]); + ptaGetPt(ptad, 2, &b[4], &b[5]); + ptaGetPt(ptad, 3, &b[6], &b[7]); + + for (i = 0; i < 8; i++) + a[i] = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); + a[0][0] = x1; + a[0][1] = y1; + a[0][2] = x1 * y1; + a[0][3] = 1.; + a[1][4] = x1; + a[1][5] = y1; + a[1][6] = x1 * y1; + a[1][7] = 1.; + a[2][0] = x2; + a[2][1] = y2; + a[2][2] = x2 * y2; + a[2][3] = 1.; + a[3][4] = x2; + a[3][5] = y2; + a[3][6] = x2 * y2; + a[3][7] = 1.; + a[4][0] = x3; + a[4][1] = y3; + a[4][2] = x3 * y3; + a[4][3] = 1.; + a[5][4] = x3; + a[5][5] = y3; + a[5][6] = x3 * y3; + a[5][7] = 1.; + a[6][0] = x4; + a[6][1] = y4; + a[6][2] = x4 * y4; + a[6][3] = 1.; + a[7][4] = x4; + a[7][5] = y4; + a[7][6] = x4 * y4; + a[7][7] = 1.; + + gaussjordan(a, b, 8); + + for (i = 0; i < 8; i++) + LEPT_FREE(a[i]); + return 0; +} + + +/*! + * \brief bilinearXformSampledPt() + * + * \param[in] vc vector of 8 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds the nearest pixel coordinates of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +bilinearXformSampledPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_int32 *pxp, + l_int32 *pyp) +{ + + PROCNAME("bilinearXformSampledPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3] + 0.5); + *pyp = (l_int32)(vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7] + 0.5); + return 0; +} + + +/*! + * \brief bilinearXformPt() + * + * \param[in] vc vector of 8 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This computes the floating point location of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +bilinearXformPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_float32 *pxp, + l_float32 *pyp) +{ + PROCNAME("bilinearXformPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + *pxp = vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3]; + *pyp = vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7]; + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/binarize.c b/3rdparty/hgOCR/leptonica/binarize.c new file mode 100644 index 00000000..0bec396e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/binarize.c @@ -0,0 +1,1013 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file binarize.c + *
+ *
+ *  ===================================================================
+ *  Image binarization algorithms are found in:
+ *    grayquant.c:   standard, simple, general grayscale quantization
+ *    adaptmap.c:    local adaptive; mostly gray-to-gray in preparation
+ *                   for binarization
+ *    binarize.c:    special binarization methods, locally adaptive and
+ *                   global.
+ *  ===================================================================
+ *
+ *      Adaptive Otsu-based thresholding
+ *          l_int32       pixOtsuAdaptiveThreshold()       8 bpp
+ *
+ *      Otsu thresholding on adaptive background normalization
+ *          PIX          *pixOtsuThreshOnBackgroundNorm()  8 bpp
+ *
+ *      Masking and Otsu estimate on adaptive background normalization
+ *          PIX          *pixMaskedThreshOnBackgroundNorm()  8 bpp
+ *
+ *      Sauvola local thresholding
+ *          l_int32       pixSauvolaBinarizeTiled()
+ *          l_int32       pixSauvolaBinarize()
+ *          static PIX   *pixSauvolaGetThreshold()
+ *          static PIX   *pixApplyLocalThreshold();
+ *
+ *      Thresholding using connected components
+ *          PIX          *pixThresholdByConnComp()
+ *
+ *  Notes:
+ *      (1) pixOtsuAdaptiveThreshold() computes a global threshold over each
+ *          tile and performs the threshold operation, resulting in a
+ *          binary image for each tile.  These are stitched into the
+ *          final result.
+ *      (2) pixOtsuThreshOnBackgroundNorm() and
+ *          pixMaskedThreshOnBackgroundNorm() are binarization functions
+ *          that use background normalization with other techniques.
+ *      (3) Sauvola binarization computes a local threshold based on
+ *          the local average and square average.  It takes two constants:
+ *          the window size for the measurement at each pixel and a
+ *          parameter that determines the amount of normalized local
+ *          standard deviation to subtract from the local average value.
+ *      (4) pixThresholdByCC() uses the numbers of 4 and 8 connected
+ *          components at different thresholding to determine if a
+ *          global threshold can be used (for text or line-art) and the
+ *          value it should have.
+ * 
+ */ + +#include +#include "allheaders.h" + +static PIX *pixSauvolaGetThreshold(PIX *pixm, PIX *pixms, l_float32 factor, + PIX **ppixsd); +static PIX *pixApplyLocalThreshold(PIX *pixs, PIX *pixth); + +/*------------------------------------------------------------------* + * Adaptive Otsu-based thresholding * + *------------------------------------------------------------------*/ +/*! + * \brief pixOtsuAdaptiveThreshold() + * + * \param[in] pixs 8 bpp + * \param[in] sx, sy desired tile dimensions; actual size may vary + * \param[in] smoothx, smoothy half-width of convolution kernel applied to + * threshold array: use 0 for no smoothing + * \param[in] scorefract fraction of the max Otsu score; typ. 0.1; + * use 0.0 for standard Otsu + * \param[out] ppixth [optional] array of threshold values + * found for each tile + * \param[out] ppixd [optional] thresholded input pixs, + * based on the threshold array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The Otsu method finds a single global threshold for an image.
+ *          This function allows a locally adapted threshold to be
+ *          found for each tile into which the image is broken up.
+ *      (2) The array of threshold values, one for each tile, constitutes
+ *          a highly downscaled image.  This array is optionally
+ *          smoothed using a convolution.  The full width and height of the
+ *          convolution kernel are (2 * %smoothx + 1) and (2 * %smoothy + 1).
+ *      (3) The minimum tile dimension allowed is 16.  If such small
+ *          tiles are used, it is recommended to use smoothing, because
+ *          without smoothing, each small tile determines the splitting
+ *          threshold independently.  A tile that is entirely in the
+ *          image bg will then hallucinate fg, resulting in a very noisy
+ *          binarization.  The smoothing should be large enough that no
+ *          tile is only influenced by one type (fg or bg) of pixels,
+ *          because it will force a split of its pixels.
+ *      (4) To get a single global threshold for the entire image, use
+ *          input values of %sx and %sy that are larger than the image.
+ *          For this situation, the smoothing parameters are ignored.
+ *      (5) The threshold values partition the image pixels into two classes:
+ *          one whose values are less than the threshold and another
+ *          whose values are greater than or equal to the threshold.
+ *          This is the same use of 'threshold' as in pixThresholdToBinary().
+ *      (6) The scorefract is the fraction of the maximum Otsu score, which
+ *          is used to determine the range over which the histogram minimum
+ *          is searched.  See numaSplitDistribution() for details on the
+ *          underlying method of choosing a threshold.
+ *      (7) This uses enables a modified version of the Otsu criterion for
+ *          splitting the distribution of pixels in each tile into a
+ *          fg and bg part.  The modification consists of searching for
+ *          a minimum in the histogram over a range of pixel values where
+ *          the Otsu score is within a defined fraction, %scorefract,
+ *          of the max score.  To get the original Otsu algorithm, set
+ *          %scorefract == 0.
+ *      (8) N.B. This method is NOT recommended for images with weak text
+ *          and significant background noise, such as bleedthrough, because
+ *          of the problem noted in (3) above for tiling.  Use Sauvola.
+ * 
+ */ +l_ok +pixOtsuAdaptiveThreshold(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 smoothx, + l_int32 smoothy, + l_float32 scorefract, + PIX **ppixth, + PIX **ppixd) +{ +l_int32 w, h, nx, ny, i, j, thresh; +l_uint32 val; +PIX *pixt, *pixb, *pixthresh, *pixth, *pixd; +PIXTILING *pt; + + PROCNAME("pixOtsuAdaptiveThreshold"); + + if (!ppixth && !ppixd) + return ERROR_INT("neither &pixth nor &pixd defined", procName, 1); + if (ppixth) *ppixth = NULL; + if (ppixd) *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (sx < 16 || sy < 16) + return ERROR_INT("sx and sy must be >= 16", procName, 1); + + /* Compute the threshold array for the tiles */ + pixGetDimensions(pixs, &w, &h, NULL); + nx = L_MAX(1, w / sx); + ny = L_MAX(1, h / sy); + smoothx = L_MIN(smoothx, (nx - 1) / 2); + smoothy = L_MIN(smoothy, (ny - 1) / 2); + pt = pixTilingCreate(pixs, nx, ny, 0, 0, 0, 0); + pixthresh = pixCreate(nx, ny, 8); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + pixt = pixTilingGetTile(pt, i, j); + pixSplitDistributionFgBg(pixt, scorefract, 1, &thresh, + NULL, NULL, NULL); + pixSetPixel(pixthresh, j, i, thresh); /* see note (4) */ + pixDestroy(&pixt); + } + } + + /* Optionally smooth the threshold array */ + if (smoothx > 0 || smoothy > 0) + pixth = pixBlockconv(pixthresh, smoothx, smoothy); + else + pixth = pixClone(pixthresh); + pixDestroy(&pixthresh); + + /* Optionally apply the threshold array to binarize pixs */ + if (ppixd) { + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + pixt = pixTilingGetTile(pt, i, j); + pixGetPixel(pixth, j, i, &val); + pixb = pixThresholdToBinary(pixt, val); + pixTilingPaintTile(pixd, i, j, pixb, pt); + pixDestroy(&pixt); + pixDestroy(&pixb); + } + } + *ppixd = pixd; + } + + if (ppixth) + *ppixth = pixth; + else + pixDestroy(&pixth); + + pixTilingDestroy(&pt); + return 0; +} + + +/*------------------------------------------------------------------* + * Otsu thresholding on adaptive background normalization * + *------------------------------------------------------------------*/ +/*! + * \brief pixOtsuThreshOnBackgroundNorm() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[in] bgval target bg val; typ. > 128 + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \param[in] scorefract fraction of the max Otsu score; typ. 0.1 + * \param[out] pthresh [optional] threshold value that was + * used on the normalized image + * \return pixd 1 bpp thresholded image, or NULL on error + * + *
+ * Notes:
+ *      (1) This does background normalization followed by Otsu
+ *          thresholding.  Otsu binarization attempts to split the
+ *          image into two roughly equal sets of pixels, and it does
+ *          a very poor job when there are large amounts of dark
+ *          background.  By doing a background normalization first,
+ *          to get the background near 255, we remove this problem.
+ *          Then we use a modified Otsu to estimate the best global
+ *          threshold on the normalized image.
+ *      (2) See pixBackgroundNorm() for meaning and typical values
+ *          of input parameters.  For a start, you can try:
+ *            sx, sy = 10, 15
+ *            thresh = 100
+ *            mincount = 50
+ *            bgval = 255
+ *            smoothx, smoothy = 2
+ * 
+ */ +PIX * +pixOtsuThreshOnBackgroundNorm(PIX *pixs, + PIX *pixim, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + l_int32 bgval, + l_int32 smoothx, + l_int32 smoothy, + l_float32 scorefract, + l_int32 *pthresh) +{ +l_int32 w, h; +l_uint32 val; +PIX *pixn, *pixt, *pixd; + + PROCNAME("pixOtsuThreshOnBackgroundNorm"); + + if (pthresh) *pthresh = 0; + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); + if (sx < 4 || sy < 4) + return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, + mincount, bgval, smoothx, smoothy); + if (!pixn) + return (PIX *)ERROR_PTR("pixn not made", procName, NULL); + + /* Just use 1 tile for a global threshold, which is stored + * as a single pixel in pixt. */ + pixGetDimensions(pixn, &w, &h, NULL); + pixOtsuAdaptiveThreshold(pixn, w, h, 0, 0, scorefract, &pixt, &pixd); + pixDestroy(&pixn); + + if (pixt && pthresh) { + pixGetPixel(pixt, 0, 0, &val); + *pthresh = val; + } + pixDestroy(&pixt); + + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + else + return pixd; +} + + + +/*----------------------------------------------------------------------* + * Masking and Otsu estimate on adaptive background normalization * + *----------------------------------------------------------------------*/ +/*! + * \brief pixMaskedThreshOnBackgroundNorm() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] pixim [optional] 1 bpp 'image' mask; can be null + * \param[in] sx, sy tile size in pixels + * \param[in] thresh threshold for determining foreground + * \param[in] mincount min threshold on counts in a tile + * \param[in] smoothx half-width of block convolution kernel width + * \param[in] smoothy half-width of block convolution kernel height + * \param[in] scorefract fraction of the max Otsu score; typ. ~ 0.1 + * \param[out] pthresh [optional] threshold value that was + * used on the normalized image + * \return pixd 1 bpp thresholded image, or NULL on error + * + *
+ * Notes:
+ *      (1) This begins with a standard background normalization.
+ *          Additionally, there is a flexible background norm, that
+ *          will adapt to a rapidly varying background, and this
+ *          puts white pixels in the background near regions with
+ *          significant foreground.  The white pixels are turned into
+ *          a 1 bpp selection mask by binarization followed by dilation.
+ *          Otsu thresholding is performed on the input image to get an
+ *          estimate of the threshold in the non-mask regions.
+ *          The background normalized image is thresholded with two
+ *          different values, and the result is combined using
+ *          the selection mask.
+ *      (2) Note that the numbers 255 (for bgval target) and 190 (for
+ *          thresholding on pixn) are tied together, and explicitly
+ *          defined in this function.
+ *      (3) See pixBackgroundNorm() for meaning and typical values
+ *          of input parameters.  For a start, you can try:
+ *            sx, sy = 10, 15
+ *            thresh = 100
+ *            mincount = 50
+ *            smoothx, smoothy = 2
+ * 
+ */ +PIX * +pixMaskedThreshOnBackgroundNorm(PIX *pixs, + PIX *pixim, + l_int32 sx, + l_int32 sy, + l_int32 thresh, + l_int32 mincount, + l_int32 smoothx, + l_int32 smoothy, + l_float32 scorefract, + l_int32 *pthresh) +{ +l_int32 w, h, highthresh; +l_uint32 val; +PIX *pixn, *pixm, *pixd, *pix1, *pix2, *pix3, *pix4; + + PROCNAME("pixMaskedThreshOnBackgroundNorm"); + + if (pthresh) *pthresh = 0; + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); + if (sx < 4 || sy < 4) + return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); + if (mincount > sx * sy) { + L_WARNING("mincount too large for tile size\n", procName); + mincount = (sx * sy) / 3; + } + + /* Standard background normalization */ + pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, + mincount, 255, smoothx, smoothy); + if (!pixn) + return (PIX *)ERROR_PTR("pixn not made", procName, NULL); + + /* Special background normalization for adaptation to quickly + * varying background. Threshold on the very light parts, + * which tend to be near significant edges, and dilate to + * form a mask over regions that are typically text. The + * dilation size is chosen to cover the text completely, + * except for very thick fonts. */ + pix1 = pixBackgroundNormFlex(pixs, 7, 7, 1, 1, 20); + pix2 = pixThresholdToBinary(pix1, 240); + pixInvert(pix2, pix2); + pixm = pixMorphSequence(pix2, "d21.21", 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Use Otsu to get a global threshold estimate for the image, + * which is stored as a single pixel in pix3. */ + pixGetDimensions(pixs, &w, &h, NULL); + pixOtsuAdaptiveThreshold(pixs, w, h, 0, 0, scorefract, &pix3, NULL); + pixGetPixel(pix3, 0, 0, &val); + if (pthresh) *pthresh = val; + pixDestroy(&pix3); + + /* Threshold the background normalized images differentially, + * using a high value correlated with the background normalization + * for the part of the image under the mask (i.e., near the + * darker, thicker foreground), and a value that depends on the Otsu + * threshold for the rest of the image. This gives a solid + * (high) thresholding for the foreground parts of the image, + * while allowing the background and light foreground to be + * reasonably well cleaned using a threshold adapted to the + * input image. */ + highthresh = L_MIN(256, val + 30); + pixd = pixThresholdToBinary(pixn, highthresh); /* for bg and light fg */ + pix4 = pixThresholdToBinary(pixn, 190); /* for heavier fg */ + pixCombineMasked(pixd, pix4, pixm); + pixDestroy(&pix4); + pixDestroy(&pixm); + pixDestroy(&pixn); + + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + else + return pixd; +} + + +/*----------------------------------------------------------------------* + * Sauvola binarization * + *----------------------------------------------------------------------*/ +/*! + * \brief pixSauvolaBinarizeTiled() + * + * \param[in] pixs 8 bpp grayscale, not colormapped + * \param[in] whsize window half-width for measuring local statistics + * \param[in] factor factor for reducing threshold due to variance; >= 0 + * \param[in] nx, ny subdivision into tiles; >= 1 + * \param[out] ppixth [optional] Sauvola threshold values + * \param[out] ppixd [optional] thresholded image + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The window width and height are 2 * %whsize + 1.  The minimum
+ *          value for %whsize is 2; typically it is >= 7..
+ *      (2) For nx == ny == 1, this defaults to pixSauvolaBinarize().
+ *      (3) Why a tiled version?
+ *          (a) Because the mean value accumulator is a uint32, overflow
+ *              can occur for an image with more than 16M pixels.
+ *          (b) The mean value accumulator array for 16M pixels is 64 MB.
+ *              The mean square accumulator array for 16M pixels is 128 MB.
+ *              Using tiles reduces the size of these arrays.
+ *          (c) Each tile can be processed independently, in parallel,
+ *              on a multicore processor.
+ *      (4) The Sauvola threshold is determined from the formula:
+ *              t = m * (1 - k * (1 - s / 128))
+ *          See pixSauvolaBinarize() for details.
+ * 
+ */ +l_ok +pixSauvolaBinarizeTiled(PIX *pixs, + l_int32 whsize, + l_float32 factor, + l_int32 nx, + l_int32 ny, + PIX **ppixth, + PIX **ppixd) +{ +l_int32 i, j, w, h, xrat, yrat; +PIX *pixth, *pixd, *tileth, *tiled, *pixt; +PIX **ptileth, **ptiled; +PIXTILING *pt; + + PROCNAME("pixSauvolaBinarizeTiled"); + + if (!ppixth && !ppixd) + return ERROR_INT("no outputs", procName, 1); + if (ppixth) *ppixth = NULL; + if (ppixd) *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is cmapped", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (whsize < 2) + return ERROR_INT("whsize must be >= 2", procName, 1); + if (w < 2 * whsize + 3 || h < 2 * whsize + 3) + return ERROR_INT("whsize too large for image", procName, 1); + if (factor < 0.0) + return ERROR_INT("factor must be >= 0", procName, 1); + + if (nx <= 1 && ny <= 1) + return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, + ppixth, ppixd); + + /* Test to see if the tiles are too small. The required + * condition is that the tile dimensions must be at least + * (whsize + 2) x (whsize + 2). */ + xrat = w / nx; + yrat = h / ny; + if (xrat < whsize + 2) { + nx = w / (whsize + 2); + L_WARNING("tile width too small; nx reduced to %d\n", procName, nx); + } + if (yrat < whsize + 2) { + ny = h / (whsize + 2); + L_WARNING("tile height too small; ny reduced to %d\n", procName, ny); + } + if (nx <= 1 && ny <= 1) + return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, + ppixth, ppixd); + + /* We can use pixtiling for painting both outputs, if requested */ + if (ppixth) { + pixth = pixCreateNoInit(w, h, 8); + *ppixth = pixth; + } + if (ppixd) { + pixd = pixCreateNoInit(w, h, 1); + *ppixd = pixd; + } + pt = pixTilingCreate(pixs, nx, ny, 0, 0, whsize + 1, whsize + 1); + pixTilingNoStripOnPaint(pt); /* pixSauvolaBinarize() does the stripping */ + + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + pixt = pixTilingGetTile(pt, i, j); + ptileth = (ppixth) ? &tileth : NULL; + ptiled = (ppixd) ? &tiled : NULL; + pixSauvolaBinarize(pixt, whsize, factor, 0, NULL, NULL, + ptileth, ptiled); + if (ppixth) { /* do not strip */ + pixTilingPaintTile(pixth, i, j, tileth, pt); + pixDestroy(&tileth); + } + if (ppixd) { + pixTilingPaintTile(pixd, i, j, tiled, pt); + pixDestroy(&tiled); + } + pixDestroy(&pixt); + } + } + + pixTilingDestroy(&pt); + return 0; +} + + +/*! + * \brief pixSauvolaBinarize() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] whsize window half-width for measuring local statistics + * \param[in] factor factor for reducing threshold due to variance; >= 0 + * \param[in] addborder 1 to add border of width (%whsize + 1) on all sides + * \param[out] ppixm [optional] local mean values + * \param[out] ppixsd [optional] local standard deviation values + * \param[out] ppixth [optional] threshold values + * \param[out] ppixd [optional] thresholded image + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The window width and height are 2 * %whsize + 1.  The minimum
+ *          value for %whsize is 2; typically it is >= 7..
+ *      (2) The local statistics, measured over the window, are the
+ *          average and standard deviation.
+ *      (3) The measurements of the mean and standard deviation are
+ *          performed inside a border of (%whsize + 1) pixels.  If pixs does
+ *          not have these added border pixels, use %addborder = 1 to add
+ *          it here; otherwise use %addborder = 0.
+ *      (4) The Sauvola threshold is determined from the formula:
+ *            t = m * (1 - k * (1 - s / 128))
+ *          where:
+ *            t = local threshold
+ *            m = local mean
+ *            k = %factor (>= 0)   [ typ. 0.35 ]
+ *            s = local standard deviation, which is maximized at
+ *                127.5 when half the samples are 0 and half are 255.
+ *      (5) The basic idea of Niblack and Sauvola binarization is that
+ *          the local threshold should be less than the median value,
+ *          and the larger the variance, the closer to the median
+ *          it should be chosen.  Typical values for k are between
+ *          0.2 and 0.5.
+ * 
+ */ +l_ok +pixSauvolaBinarize(PIX *pixs, + l_int32 whsize, + l_float32 factor, + l_int32 addborder, + PIX **ppixm, + PIX **ppixsd, + PIX **ppixth, + PIX **ppixd) +{ +l_int32 w, h; +PIX *pixg, *pixsc, *pixm, *pixms, *pixth, *pixd; + + PROCNAME("pixSauvolaBinarize"); + + if (ppixm) *ppixm = NULL; + if (ppixsd) *ppixsd = NULL; + if (ppixth) *ppixth = NULL; + if (ppixd) *ppixd = NULL; + if (!ppixm && !ppixsd && !ppixth && !ppixd) + return ERROR_INT("no outputs", procName, 1); + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is cmapped", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (whsize < 2) + return ERROR_INT("whsize must be >= 2", procName, 1); + if (w < 2 * whsize + 3 || h < 2 * whsize + 3) + return ERROR_INT("whsize too large for image", procName, 1); + if (factor < 0.0) + return ERROR_INT("factor must be >= 0", procName, 1); + + if (addborder) { + pixg = pixAddMirroredBorder(pixs, whsize + 1, whsize + 1, + whsize + 1, whsize + 1); + pixsc = pixClone(pixs); + } else { + pixg = pixClone(pixs); + pixsc = pixRemoveBorder(pixs, whsize + 1); + } + if (!pixg || !pixsc) + return ERROR_INT("pixg and pixsc not made", procName, 1); + + /* All these functions strip off the border pixels. */ + if (ppixm || ppixth || ppixd) + pixm = pixWindowedMean(pixg, whsize, whsize, 1, 1); + if (ppixsd || ppixth || ppixd) + pixms = pixWindowedMeanSquare(pixg, whsize, whsize, 1); + if (ppixth || ppixd) + pixth = pixSauvolaGetThreshold(pixm, pixms, factor, ppixsd); + if (ppixd) { + pixd = pixApplyLocalThreshold(pixsc, pixth); + pixCopyResolution(pixd, pixs); + } + + if (ppixm) + *ppixm = pixm; + else + pixDestroy(&pixm); + pixDestroy(&pixms); + if (ppixth) + *ppixth = pixth; + else + pixDestroy(&pixth); + if (ppixd) + *ppixd = pixd; + pixDestroy(&pixg); + pixDestroy(&pixsc); + return 0; +} + + +/*! + * \brief pixSauvolaGetThreshold() + * + * \param[in] pixm 8 bpp grayscale; not colormapped + * \param[in] pixms 32 bpp + * \param[in] factor factor for reducing threshold due to variance; >= 0 + * \param[out] ppixsd [optional] local standard deviation + * \return pixd 8 bpp, sauvola threshold values, or NULL on error + * + *
+ * Notes:
+ *      (1) The Sauvola threshold is determined from the formula:
+ *            t = m * (1 - k * (1 - s / 128))
+ *          where:
+ *            t = local threshold
+ *            m = local mean
+ *            k = %factor (>= 0)   [ typ. 0.35 ]
+ *            s = local standard deviation, which is maximized at
+ *                127.5 when half the samples are 0 and half are 255.
+ *      (2) See pixSauvolaBinarize() for other details.
+ *      (3) Important definitions and relations for computing averages:
+ *            v == pixel value
+ *            E(p) == expected value of p == average of p over some pixel set
+ *            S(v) == square of v == v * v
+ *            mv == E(v) == expected pixel value == mean value
+ *            ms == E(S(v)) == expected square of pixel values
+ *               == mean square value
+ *            var == variance == expected square of deviation from mean
+ *                == E(S(v - mv)) = E(S(v) - 2 * S(v * mv) + S(mv))
+ *                                = E(S(v)) - S(mv)
+ *                                = ms - mv * mv
+ *            s == standard deviation = sqrt(var)
+ *          So for evaluating the standard deviation in the Sauvola
+ *          threshold, we take
+ *            s = sqrt(ms - mv * mv)
+ * 
+ */ +static PIX * +pixSauvolaGetThreshold(PIX *pixm, + PIX *pixms, + l_float32 factor, + PIX **ppixsd) +{ +l_int32 i, j, w, h, tabsize, wplm, wplms, wplsd, wpld, usetab; +l_int32 mv, ms, var, thresh; +l_uint32 *datam, *datams, *datasd, *datad; +l_uint32 *linem, *linems, *linesd, *lined; +l_float32 sd; +l_float32 *tab; /* of 2^16 square roots */ +PIX *pixsd, *pixd; + + PROCNAME("pixSauvolaGetThreshold"); + + if (ppixsd) *ppixsd = NULL; + if (!pixm || pixGetDepth(pixm) != 8) + return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixm)) + return (PIX *)ERROR_PTR("pixm is colormapped", procName, NULL); + if (!pixms || pixGetDepth(pixms) != 32) + return (PIX *)ERROR_PTR("pixms undefined or not 32 bpp", + procName, NULL); + if (factor < 0.0) + return (PIX *)ERROR_PTR("factor must be >= 0", procName, NULL); + + /* Only make a table of 2^16 square roots if there + * are enough pixels to justify it. */ + pixGetDimensions(pixm, &w, &h, NULL); + usetab = (w * h > 100000) ? 1 : 0; + if (usetab) { + tabsize = 1 << 16; + tab = (l_float32 *)LEPT_CALLOC(tabsize, sizeof(l_float32)); + for (i = 0; i < tabsize; i++) + tab[i] = sqrtf((l_float32)i); + } + + pixd = pixCreate(w, h, 8); + if (ppixsd) { + pixsd = pixCreate(w, h, 8); + *ppixsd = pixsd; + } + datam = pixGetData(pixm); + datams = pixGetData(pixms); + if (ppixsd) datasd = pixGetData(pixsd); + datad = pixGetData(pixd); + wplm = pixGetWpl(pixm); + wplms = pixGetWpl(pixms); + if (ppixsd) wplsd = pixGetWpl(pixsd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linem = datam + i * wplm; + linems = datams + i * wplms; + if (ppixsd) linesd = datasd + i * wplsd; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + mv = GET_DATA_BYTE(linem, j); + ms = linems[j]; + var = ms - mv * mv; + if (usetab) + sd = tab[var]; + else + sd = sqrtf((l_float32)var); + if (ppixsd) SET_DATA_BYTE(linesd, j, (l_int32)sd); + thresh = (l_int32)(mv * (1.0 - factor * (1.0 - sd / 128.))); + SET_DATA_BYTE(lined, j, thresh); + } + } + + if (usetab) LEPT_FREE(tab); + return pixd; +} + + +/*! + * \brief pixApplyLocalThreshold() + * + * \param[in] pixs 8 bpp grayscale; not colormapped + * \param[in] pixth 8 bpp array of local thresholds + * \return pixd 1 bpp, thresholded image, or NULL on error + */ +static PIX * +pixApplyLocalThreshold(PIX *pixs, + PIX *pixth) +{ +l_int32 i, j, w, h, wpls, wplt, wpld, vals, valt; +l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; +PIX *pixd; + + PROCNAME("pixApplyLocalThreshold"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); + if (!pixth || pixGetDepth(pixth) != 8) + return (PIX *)ERROR_PTR("pixth undefined or not 8 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, 1); + datas = pixGetData(pixs); + datat = pixGetData(pixth); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wplt = pixGetWpl(pixth); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + valt = GET_DATA_BYTE(linet, j); + if (vals < valt) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*----------------------------------------------------------------------* + * Thresholding using connected components * + *----------------------------------------------------------------------*/ +/*! + * \brief pixThresholdByConnComp() + * + * \param[in] pixs depth > 1, colormap OK + * \param[in] pixm [optional] 1 bpp mask giving region to ignore + * by setting pixels to white; use NULL if no mask + * \param[in] start, end, incr binarization threshold levels to test + * \param[in] thresh48 threshold on normalized difference between the + * numbers of 4 and 8 connected components + * \param[in] threshdiff threshold on normalized difference between the + * number of 4 cc at successive iterations + * \param[out] pglobthresh [optional] best global threshold; 0 + * if no threshold is found + * \param[out] ppixd [optional] image thresholded to binary, or + * null if no threshold is found + * \param[in] debugflag 1 for plotted results + * \return 0 if OK, 1 on error or if no threshold is found + * + *
+ * Notes:
+ *      (1) This finds a global threshold based on connected components.
+ *          Although slow, it is reasonable to use it in a situation where
+ *          (a) the background in the image is relatively uniform, and
+ *          (b) the result will be fed to an OCR program that accepts 1 bpp
+ *              images and works best with easily segmented characters.
+ *          The reason for (b) is that this selects a threshold with a
+ *          minimum number of both broken characters and merged characters.
+ *      (2) If the pix has color, it is converted to gray using the
+ *          max component.
+ *      (3) Input 0 to use default values for any of these inputs:
+ *          %start, %end, %incr, %thresh48, %threshdiff.
+ *      (4) This approach can be understood as follows.  When the
+ *          binarization threshold is varied, the numbers of c.c. identify
+ *          four regimes:
+ *          (a) For low thresholds, text is broken into small pieces, and
+ *              the number of c.c. is large, with the 4 c.c. significantly
+ *              exceeding the 8 c.c.
+ *          (b) As the threshold rises toward the optimum value, the text
+ *              characters coalesce and there is very little difference
+ *              between the numbers of 4 and 8 c.c, which both go
+ *              through a minimum.
+ *          (c) Above this, the image background gets noisy because some
+ *              pixels are(thresholded to foreground, and the numbers
+ *              of c.c. quickly increase, with the 4 c.c. significantly
+ *              larger than the 8 c.c.
+ *          (d) At even higher thresholds, the image background noise
+ *              coalesces as it becomes mostly foreground, and the
+ *              number of c.c. drops quickly.
+ *      (5) If there is no global threshold that distinguishes foreground
+ *          text from background (e.g., weak text over a background that
+ *          has significant variation and/or bleedthrough), this returns 1,
+ *          which the caller should check.
+ * 
+ */ +l_ok +pixThresholdByConnComp(PIX *pixs, + PIX *pixm, + l_int32 start, + l_int32 end, + l_int32 incr, + l_float32 thresh48, + l_float32 threshdiff, + l_int32 *pglobthresh, + PIX **ppixd, + l_int32 debugflag) +{ +l_int32 i, thresh, n, n4, n8, mincounts, found, globthresh; +l_float32 count4, count8, firstcount4, prevcount4, diff48, diff4; +GPLOT *gplot; +NUMA *na4, *na8; +PIX *pix1, *pix2, *pix3; + + PROCNAME("pixThresholdByConnComp"); + + if (pglobthresh) *pglobthresh = 0; + if (ppixd) *ppixd = NULL; + if (!pixs || pixGetDepth(pixs) == 1) + return ERROR_INT("pixs undefined or 1 bpp", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm must be 1 bpp", procName, 1); + + /* Assign default values if requested */ + if (start <= 0) start = 80; + if (end <= 0) end = 200; + if (incr <= 0) incr = 10; + if (thresh48 <= 0.0) thresh48 = 0.01; + if (threshdiff <= 0.0) threshdiff = 0.01; + if (start > end) + return ERROR_INT("invalid start,end", procName, 1); + + /* Make 8 bpp, using the max component if color. */ + if (pixGetColormap(pixs)) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix1 = pixClone(pixs); + if (pixGetDepth(pix1) == 32) + pix2 = pixConvertRGBToGrayMinMax(pix1, L_CHOOSE_MAX); + else + pix2 = pixConvertTo8(pix1, 0); + pixDestroy(&pix1); + + /* Mask out any non-text regions. Do this in-place, because pix2 + * can never be the same pix as pixs. */ + if (pixm) + pixSetMasked(pix2, pixm, 255); + + /* Make sure there are enough components to get a valid signal */ + pix3 = pixConvertTo1(pix2, start); + pixCountConnComp(pix3, 4, &n4); + pixDestroy(&pix3); + mincounts = 500; + if (n4 < mincounts) { + L_INFO("Insufficient component count: %d\n", procName, n4); + pixDestroy(&pix2); + return 1; + } + + /* Compute the c.c. data */ + na4 = numaCreate(0); + na8 = numaCreate(0); + numaSetParameters(na4, start, incr); + numaSetParameters(na8, start, incr); + for (thresh = start, i = 0; thresh <= end; thresh += incr, i++) { + pix3 = pixConvertTo1(pix2, thresh); + pixCountConnComp(pix3, 4, &n4); + pixCountConnComp(pix3, 8, &n8); + numaAddNumber(na4, n4); + numaAddNumber(na8, n8); + pixDestroy(&pix3); + } + if (debugflag) { + gplot = gplotCreate("/tmp/threshroot", GPLOT_PNG, + "number of cc vs. threshold", + "threshold", "number of cc"); + gplotAddPlot(gplot, NULL, na4, GPLOT_LINES, "plot 4cc"); + gplotAddPlot(gplot, NULL, na8, GPLOT_LINES, "plot 8cc"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } + + n = numaGetCount(na4); + found = FALSE; + for (i = 0; i < n; i++) { + if (i == 0) { + numaGetFValue(na4, i, &firstcount4); + prevcount4 = firstcount4; + } else { + numaGetFValue(na4, i, &count4); + numaGetFValue(na8, i, &count8); + diff48 = (count4 - count8) / firstcount4; + diff4 = L_ABS(prevcount4 - count4) / firstcount4; + if (debugflag) { + fprintf(stderr, "diff48 = %7.3f, diff4 = %7.3f\n", + diff48, diff4); + } + if (diff48 < thresh48 && diff4 < threshdiff) { + found = TRUE; + break; + } + prevcount4 = count4; + } + } + numaDestroy(&na4); + numaDestroy(&na8); + + if (found) { + globthresh = start + i * incr; + if (pglobthresh) *pglobthresh = globthresh; + if (ppixd) { + *ppixd = pixConvertTo1(pix2, globthresh); + pixCopyResolution(*ppixd, pixs); + } + if (debugflag) fprintf(stderr, "global threshold = %d\n", globthresh); + pixDestroy(&pix2); + return 0; + } + + if (debugflag) fprintf(stderr, "no global threshold found\n"); + pixDestroy(&pix2); + return 1; +} diff --git a/3rdparty/hgOCR/leptonica/binexpand.c b/3rdparty/hgOCR/leptonica/binexpand.c new file mode 100644 index 00000000..bb5a888f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/binexpand.c @@ -0,0 +1,303 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file binexpand.c + *
+ *
+ *      Replicated expansion (integer scaling)
+ *         PIX     *pixExpandBinaryReplicate()
+ *
+ *      Special case: power of 2 replicated expansion
+ *         PIX     *pixExpandBinaryPower2()
+ *
+ *      Expansion tables for power of 2 expansion
+ *         static l_uint16    *makeExpandTab2x()
+ *         static l_uint32    *makeExpandTab4x()
+ *         static l_uint32    *makeExpandTab8x()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Static table functions and tables */ +static l_uint16 * makeExpandTab2x(void); +static l_uint32 * makeExpandTab4x(void); +static l_uint32 * makeExpandTab8x(void); +static l_uint32 expandtab16[] = { + 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff}; + + +/*------------------------------------------------------------------* + * Replicated expansion (integer scaling) * + *------------------------------------------------------------------*/ +/*! + * \brief pixExpandBinaryReplicate() + * + * \param[in] pixs 1 bpp + * \param[in] xfact integer scale factor for horiz. replicative expansion + * \param[in] yfact integer scale factor for vertical replicative expansion + * \return pixd scaled up, or NULL on error + */ +PIX * +pixExpandBinaryReplicate(PIX *pixs, + l_int32 xfact, + l_int32 yfact) +{ +l_int32 w, h, d, wd, hd, wpls, wpld, i, j, k, start; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixExpandBinaryReplicate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); + if (xfact <= 0 || yfact <= 0) + return (PIX *)ERROR_PTR("invalid scale factor: <= 0", procName, NULL); + + if (xfact == yfact) { + if (xfact == 1) + return pixCopy(NULL, pixs); + if (xfact == 2 || xfact == 4 || xfact == 8 || xfact == 16) + return pixExpandBinaryPower2(pixs, xfact); + } + + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wd = xfact * w; + hd = yfact * h; + if ((pixd = pixCreate(wd, hd, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, (l_float32)xfact, (l_float32)yfact); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + yfact * i * wpld; + for (j = 0; j < w; j++) { /* replicate pixels on a single line */ + if (GET_DATA_BIT(lines, j)) { + start = xfact * j; + for (k = 0; k < xfact; k++) + SET_DATA_BIT(lined, start + k); + } + } + for (k = 1; k < yfact; k++) /* replicate the line */ + memcpy(lined + k * wpld, lined, 4 * wpld); + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Power of 2 expansion * + *------------------------------------------------------------------*/ +/*! + * \brief pixExpandBinaryPower2() + * + * \param[in] pixs 1 bpp + * \param[in] factor expansion factor: 1, 2, 4, 8, 16 + * \return pixd expanded 1 bpp by replication, or NULL on error + */ +PIX * +pixExpandBinaryPower2(PIX *pixs, + l_int32 factor) +{ +l_uint8 sval; +l_uint16 *tab2; +l_int32 i, j, k, w, h, d, wd, hd, wpls, wpld, sdibits, sqbits, sbytes; +l_uint32 *datas, *datad, *lines, *lined, *tab4, *tab8; +PIX *pixd; + + PROCNAME("pixExpandBinaryPower2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); + if (factor == 1) + return pixCopy(NULL, pixs); + if (factor != 2 && factor != 4 && factor != 8 && factor != 16) + return (PIX *)ERROR_PTR("factor must be in {2,4,8,16}", procName, NULL); + + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wd = factor * w; + hd = factor * h; + if ((pixd = pixCreate(wd, hd, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + if (factor == 2) { + tab2 = makeExpandTab2x(); + sbytes = (w + 7) / 8; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + 2 * i * wpld; + for (j = 0; j < sbytes; j++) { + sval = GET_DATA_BYTE(lines, j); + SET_DATA_TWO_BYTES(lined, j, tab2[sval]); + } + memcpy(lined + wpld, lined, 4 * wpld); + } + LEPT_FREE(tab2); + } else if (factor == 4) { + tab4 = makeExpandTab4x(); + sbytes = (w + 7) / 8; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + 4 * i * wpld; + for (j = 0; j < sbytes; j++) { + sval = GET_DATA_BYTE(lines, j); + lined[j] = tab4[sval]; + } + for (k = 1; k < 4; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + LEPT_FREE(tab4); + } else if (factor == 8) { + tab8 = makeExpandTab8x(); + sqbits = (w + 3) / 4; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + 8 * i * wpld; + for (j = 0; j < sqbits; j++) { + sval = GET_DATA_QBIT(lines, j); + if (sval > 15) + L_WARNING("sval = %d; should be < 16\n", procName, sval); + lined[j] = tab8[sval]; + } + for (k = 1; k < 8; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + LEPT_FREE(tab8); + } else { /* factor == 16 */ + sdibits = (w + 1) / 2; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + 16 * i * wpld; + for (j = 0; j < sdibits; j++) { + sval = GET_DATA_DIBIT(lines, j); + lined[j] = expandtab16[sval]; + } + for (k = 1; k < 16; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + } + + return pixd; +} + + +/*-------------------------------------------------------------------* + * Expansion tables for 2x, 4x and 8x expansion * + *-------------------------------------------------------------------*/ +static l_uint16 * +makeExpandTab2x(void) +{ +l_uint16 *tab; +l_int32 i; + + tab = (l_uint16 *) LEPT_CALLOC(256, sizeof(l_uint16)); + for (i = 0; i < 256; i++) { + if (i & 0x01) + tab[i] = 0x3; + if (i & 0x02) + tab[i] |= 0xc; + if (i & 0x04) + tab[i] |= 0x30; + if (i & 0x08) + tab[i] |= 0xc0; + if (i & 0x10) + tab[i] |= 0x300; + if (i & 0x20) + tab[i] |= 0xc00; + if (i & 0x40) + tab[i] |= 0x3000; + if (i & 0x80) + tab[i] |= 0xc000; + } + return tab; +} + + +static l_uint32 * +makeExpandTab4x(void) +{ +l_uint32 *tab; +l_int32 i; + + tab = (l_uint32 *) LEPT_CALLOC(256, sizeof(l_uint32)); + for (i = 0; i < 256; i++) { + if (i & 0x01) + tab[i] = 0xf; + if (i & 0x02) + tab[i] |= 0xf0; + if (i & 0x04) + tab[i] |= 0xf00; + if (i & 0x08) + tab[i] |= 0xf000; + if (i & 0x10) + tab[i] |= 0xf0000; + if (i & 0x20) + tab[i] |= 0xf00000; + if (i & 0x40) + tab[i] |= 0xf000000; + if (i & 0x80) + tab[i] |= 0xf0000000; + } + return tab; +} + + +static l_uint32 * +makeExpandTab8x(void) +{ +l_uint32 *tab; +l_int32 i; + + tab = (l_uint32 *) LEPT_CALLOC(16, sizeof(l_uint32)); + for (i = 0; i < 16; i++) { + if (i & 0x01) + tab[i] = 0xff; + if (i & 0x02) + tab[i] |= 0xff00; + if (i & 0x04) + tab[i] |= 0xff0000; + if (i & 0x08) + tab[i] |= 0xff000000; + } + return tab; +} diff --git a/3rdparty/hgOCR/leptonica/binreduce.c b/3rdparty/hgOCR/leptonica/binreduce.c new file mode 100644 index 00000000..2f813d31 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/binreduce.c @@ -0,0 +1,407 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + /*! + * \file binreduce.c + *
+  *
+  *      Subsampled 2x reduction
+  *           PIX      *pixReduceBinary2()
+  *
+  *      Rank filtered 2x reductions
+  *           PIX      *pixReduceRankBinaryCascade()
+  *           PIX      *pixReduceRankBinary2()
+  *
+  *      Permutation table for 2x rank binary reduction
+  *           l_uint8  *makeSubsampleTab2x(void)
+  * 
+ */ + +#include +#include "allheaders.h" + + + /*------------------------------------------------------------------* + * Subsampled reduction * + *------------------------------------------------------------------*/ + /*! + * \brief pixReduceBinary2() + * + * \param[in] pixs + * \param[in] intab [optional]; if null, a table is made here + * and destroyed before exit + * \return pixd 2x subsampled, or NULL on error + * + *
+	* Notes:
+	*      (1) After folding, the data is in bytes 0 and 2 of the word,
+	*          and the bits in each byte are in the following order
+	*          (with 0 being the leftmost originating pair and 7 being
+	*          the rightmost originating pair):
+	*               0 4 1 5 2 6 3 7
+	*          These need to be permuted to
+	*               0 1 2 3 4 5 6 7
+	*          which is done with an 8-bit table generated by makeSubsampleTab2x().
+	* 
+ */ +PIX * +pixReduceBinary2(PIX *pixs, + l_uint8 *intab) +{ + l_uint8 byte0, byte1; + l_uint8 *tab; + l_uint16 shortd; + l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; + l_uint32 word; + l_uint32 *datas, *datad, *lines, *lined; + PIX *pixd; + + PROCNAME("pixReduceBinary2"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + if (hs <= 1) + return (PIX *)ERROR_PTR("hs must be at least 2", procName, NULL); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + + if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.5, 0.5); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + tab = (intab) ? intab : makeSubsampleTab2x(); + if (!tab) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("tab not made", procName, NULL); + } + + /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ + wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ + + for (i = 0, id = 0; i < hs - 1; i += 2, id++) { + lines = datas + i * wpls; + lined = datad + id * wpld; + for (j = 0; j < wplsi; j++) { + word = *(lines + j); + word = word & 0xaaaaaaaa; /* mask */ + word = word | (word << 7); /* fold; data in bytes 0 & 2 */ + byte0 = word >> 24; + byte1 = (word >> 8) & 0xff; + shortd = (tab[byte0] << 8) | tab[byte1]; + SET_DATA_TWO_BYTES(lined, j, shortd); + } + } + + if (!intab) LEPT_FREE(tab); + return pixd; +} + + +/*------------------------------------------------------------------* + * Rank filtered binary reductions * + *------------------------------------------------------------------*/ + /*! + * \brief pixReduceRankBinaryCascade() + * + * \param[in] pixs 1 bpp + * \param[in] level1 threshold, in the set {0, 1, 2, 3, 4} + * \param[in] level2 threshold, in the set {0, 1, 2, 3, 4} + * \param[in] level3 threshold, in the set {0, 1, 2, 3, 4} + * \param[in] level4 threshold, in the set {0, 1, 2, 3, 4} + * \return pixd, or NULL on error + * + *
+  * Notes:
+  *      (1) This performs up to four cascaded 2x rank reductions.
+  *      (2) Use level = 0 to truncate the cascade.
+  * 
+ */ +PIX * +pixReduceRankBinaryCascade(PIX *pixs, + l_int32 level1, + l_int32 level2, + l_int32 level3, + l_int32 level4) +{ + PIX *pix1, *pix2, *pix3, *pix4; + l_uint8 *tab; + + PROCNAME("pixReduceRankBinaryCascade"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be binary", procName, NULL); + if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) + return (PIX *)ERROR_PTR("levels must not exceed 4", procName, NULL); + + if (level1 <= 0) { + L_WARNING("no reduction because level1 not > 0\n", procName); + return pixCopy(NULL, pixs); + } + + if ((tab = makeSubsampleTab2x()) == NULL) + return (PIX *)ERROR_PTR("tab not made", procName, NULL); + + pix1 = pixReduceRankBinary2(pixs, level1, tab); + if (level2 <= 0) { + LEPT_FREE(tab); + return pix1; + } + + pix2 = pixReduceRankBinary2(pix1, level2, tab); + pixDestroy(&pix1); + if (level3 <= 0) { + LEPT_FREE(tab); + return pix2; + } + + pix3 = pixReduceRankBinary2(pix2, level3, tab); + pixDestroy(&pix2); + if (level4 <= 0) { + LEPT_FREE(tab); + return pix3; + } + + pix4 = pixReduceRankBinary2(pix3, level4, tab); + pixDestroy(&pix3); + LEPT_FREE(tab); + return pix4; +} + + +/*! + * \brief pixReduceRankBinary2() + * + * \param[in] pixs 1 bpp + * \param[in] level rank threshold: 1, 2, 3, 4 + * \param[in] intab [optional]; if null, a table is made here + * and destroyed before exit + * \return pixd 1 bpp, 2x rank threshold reduced, or NULL on error + * + *
+ * Notes:
+ *      (1) pixd is downscaled by 2x from pixs.
+ *      (2) The rank threshold specifies the minimum number of ON
+ *          pixels in each 2x2 region of pixs that are required to
+ *          set the corresponding pixel ON in pixd.
+ *      (3) Rank filtering is done to the UL corner of each 2x2 pixel block,
+ *          using only logical operations.  Then these pixels are chosen
+ *          in the 2x subsampling process, subsampled, as described
+ *          above in pixReduceBinary2().
+ * 
+ */ +PIX * +pixReduceRankBinary2(PIX *pixs, + l_int32 level, + l_uint8 *intab) +{ + l_uint8 byte0, byte1; + l_uint8 *tab; + l_uint16 shortd; + l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; + l_uint32 word1, word2, word3, word4; + l_uint32 *datas, *datad, *lines, *lined; + PIX *pixd; + + PROCNAME("pixReduceRankBinary2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); + if (level < 1 || level > 4) + return (PIX *)ERROR_PTR("level must be in set {1,2,3,4}", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + if (hs <= 1) + return (PIX *)ERROR_PTR("hs must be at least 2", procName, NULL); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + + if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.5, 0.5); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + tab = (intab) ? intab : makeSubsampleTab2x(); + if (!tab) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("tab not made", procName, NULL); + } + + /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ + wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ + + switch (level) + { + + case 1: + for (i = 0, id = 0; i < hs - 1; i += 2, id++) { + lines = datas + i * wpls; + lined = datad + id * wpld; + for (j = 0; j < wplsi; j++) { + word1 = *(lines + j); + word2 = *(lines + wpls + j); + + /* OR/OR */ + word2 = word1 | word2; + word2 = word2 | (word2 << 1); + + word2 = word2 & 0xaaaaaaaa; /* mask */ + word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ + byte0 = word1 >> 24; + byte1 = (word1 >> 8) & 0xff; + shortd = (tab[byte0] << 8) | tab[byte1]; + SET_DATA_TWO_BYTES(lined, j, shortd); + } + } + break; + + case 2: + for (i = 0, id = 0; i < hs - 1; i += 2, id++) { + lines = datas + i * wpls; + lined = datad + id * wpld; + for (j = 0; j < wplsi; j++) { + word1 = *(lines + j); + word2 = *(lines + wpls + j); + + /* (AND/OR) OR (OR/AND) */ + word3 = word1 & word2; + word3 = word3 | (word3 << 1); + word4 = word1 | word2; + word4 = word4 & (word4 << 1); + word2 = word3 | word4; + + word2 = word2 & 0xaaaaaaaa; /* mask */ + word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ + byte0 = word1 >> 24; + byte1 = (word1 >> 8) & 0xff; + shortd = (tab[byte0] << 8) | tab[byte1]; + SET_DATA_TWO_BYTES(lined, j, shortd); + } + } + break; + + case 3: + for (i = 0, id = 0; i < hs - 1; i += 2, id++) { + lines = datas + i * wpls; + lined = datad + id * wpld; + for (j = 0; j < wplsi; j++) { + word1 = *(lines + j); + word2 = *(lines + wpls + j); + + /* (AND/OR) AND (OR/AND) */ + word3 = word1 & word2; + word3 = word3 | (word3 << 1); + word4 = word1 | word2; + word4 = word4 & (word4 << 1); + word2 = word3 & word4; + + word2 = word2 & 0xaaaaaaaa; /* mask */ + word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ + byte0 = word1 >> 24; + byte1 = (word1 >> 8) & 0xff; + shortd = (tab[byte0] << 8) | tab[byte1]; + SET_DATA_TWO_BYTES(lined, j, shortd); + } + } + break; + + case 4: + for (i = 0, id = 0; i < hs - 1; i += 2, id++) { + lines = datas + i * wpls; + lined = datad + id * wpld; + for (j = 0; j < wplsi; j++) { + word1 = *(lines + j); + word2 = *(lines + wpls + j); + + /* AND/AND */ + word2 = word1 & word2; + word2 = word2 & (word2 << 1); + + word2 = word2 & 0xaaaaaaaa; /* mask */ + word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ + byte0 = word1 >> 24; + byte1 = (word1 >> 8) & 0xff; + shortd = (tab[byte0] << 8) | tab[byte1]; + SET_DATA_TWO_BYTES(lined, j, shortd); + } + } + break; + } + + if (!intab) LEPT_FREE(tab); + return pixd; +} + + +/*! + * \brief makeSubsampleTab2x() + * + * \return tab table of 256 permutations, or NULL on error + * + *
+ * Notes:
+ *      Permutation table for 2x rank binary reduction
+ *      This table permutes the bits in a byte, from
+ *          0 4 1 5 2 6 3 7
+ *      to
+ *          0 1 2 3 4 5 6 7
+ * 
+ */ +l_uint8 * +makeSubsampleTab2x(void) +{ + l_uint8 *tab; + l_int32 i; + + PROCNAME("makeSubsampleTab2x"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + + for (i = 0; i < 256; i++) + tab[i] = ((i & 0x01)) | /* 7 */ + ((i & 0x04) >> 1) | /* 6 */ + ((i & 0x10) >> 2) | /* 5 */ + ((i & 0x40) >> 3) | /* 4 */ + ((i & 0x02) << 3) | /* 3 */ + ((i & 0x08) << 2) | /* 2 */ + ((i & 0x20) << 1) | /* 1 */ + ((i & 0x80)); /* 0 */ + + return tab; +} diff --git a/3rdparty/hgOCR/leptonica/blend.c b/3rdparty/hgOCR/leptonica/blend.c new file mode 100644 index 00000000..a8e52739 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/blend.c @@ -0,0 +1,2293 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file blend.c + *
+ *
+ *      Blending two images that are not colormapped
+ *           PIX             *pixBlend()
+ *           PIX             *pixBlendMask()
+ *           PIX             *pixBlendGray()
+ *           PIX             *pixBlendGrayInverse()
+ *           PIX             *pixBlendColor()
+ *           PIX             *pixBlendColorByChannel()
+ *           PIX             *pixBlendGrayAdapt()
+ *           static l_int32   blendComponents()
+ *           PIX             *pixFadeWithGray()
+ *           PIX             *pixBlendHardLight()
+ *           static l_int32   blendHardLightComponents()
+ *
+ *      Blending two colormapped images
+ *           l_int32          pixBlendCmap()
+ *
+ *      Blending two images using a third (alpha mask)
+ *           PIX             *pixBlendWithGrayMask()
+ *
+ *      Blending background to a specific color
+ *           PIX             *pixBlendBackgroundToColor()
+ *
+ *      Multiplying by a specific color
+ *           PIX             *pixMultiplyByColor()
+ *
+ *      Rendering with alpha blending over a uniform background
+ *           PIX             *pixAlphaBlendUniform()
+ *
+ *      Adding an alpha layer for blending
+ *           PIX             *pixAddAlphaToBlend()
+ *
+ *      Setting a transparent alpha component over a white background
+ *           PIX             *pixSetAlphaOverWhite()
+ *
+ *      Fading from the edge
+ *           l_int32          pixLinearEdgeFade()
+ *
+ *  In blending operations a new pix is produced where typically
+ *  a subset of pixels in src1 are changed by the set of pixels
+ *  in src2, when src2 is located in a given position relative
+ *  to src1.  This is similar to rasterop, except that the
+ *  blending operations we allow are more complex, and typically
+ *  result in dest pixels that are a linear combination of two
+ *  pixels, such as src1 and its inverse.  I find it convenient
+ *  to think of src2 as the "blender" (the one that takes the action)
+ *  and src1 as the "blendee" (the one that changes).
+ *
+ *  Blending works best when src1 is 8 or 32 bpp.  We also allow
+ *  src1 to be colormapped, but the colormap is removed before blending,
+ *  so if src1 is colormapped, we can't allow in-place blending.
+ *
+ *  Because src2 is typically smaller than src1, we can implement by
+ *  clipping src2 to src1 and then transforming some of the dest
+ *  pixels that are under the support of src2.  In practice, we
+ *  do the clipping in the inner pixel loop.  For grayscale and
+ *  color src2, we also allow a simple form of transparency, where
+ *  pixels of a particular value in src2 are transparent; for those pixels,
+ *  no blending is done.
+ *
+ *  The blending functions are categorized by the depth of src2,
+ *  the blender, and not that of src1, the blendee.
+ *
+ *   ~ If src2 is 1 bpp, we can do one of three things:
+ *     (1) L_BLEND_WITH_INVERSE: Blend a given fraction of src1 with its
+ *         inverse color for those pixels in src2 that are fg (ON),
+ *         and leave the dest pixels unchanged for pixels in src2 that
+ *         are bg (OFF).
+ *     (2) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by a
+ *         given fraction for those pixels in src2 that are fg (ON),
+ *         and leave the dest pixels unchanged for pixels in src2 that
+ *         are bg (OFF).
+ *     (3) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by a
+ *         given fraction for those pixels in src2 that are fg (ON),
+ *         and leave the dest pixels unchanged for pixels in src2 that
+ *         are bg (OFF).
+ *     The blending function is pixBlendMask().
+ *
+ *   ~ If src2 is 8 bpp grayscale, we can do one of two things
+ *     (but see pixFadeWithGray() below):
+ *     (1) L_BLEND_GRAY: If src1 is 8 bpp, mix the two values, using
+ *         a fraction of src2 and (1 - fraction) of src1.
+ *         If src1 is 32 bpp (rgb), mix the fraction of src2 with
+ *         each of the color components in src1.
+ *     (2) L_BLEND_GRAY_WITH_INVERSE: Use the grayscale value in src2
+ *         to determine how much of the inverse of a src1 pixel is
+ *         to be combined with the pixel value.  The input fraction
+ *         further acts to scale the change in the src1 pixel.
+ *     The blending function is pixBlendGray().
+ *
+ *   ~ If src2 is color, we blend a given fraction of src2 with
+ *     src1.  If src1 is 8 bpp, the resulting image is 32 bpp.
+ *     The blending function is pixBlendColor().
+ *
+ *   ~ For all three blending functions -- pixBlendMask(), pixBlendGray()
+ *     and pixBlendColor() -- you can apply the blender to the blendee
+ *     either in-place or generating a new pix.  For the in-place
+ *     operation, this requires that the depth of the resulting pix
+ *     must equal that of the input pixs1.
+ *
+ *   ~ We remove colormaps from src1 and src2 before blending.
+ *     Any quantization would have to be done after blending.
+ *
+ *  We include another function, pixFadeWithGray(), that blends
+ *  a gray or color src1 with a gray src2.  It does one of these things:
+ *     (1) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by
+ *         a number times the value in src2.
+ *     (2) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by
+ *         a number times the value in src2.
+ *
+ *  Also included is a generalization of the so-called "hard light"
+ *  blending: pixBlendHardLight().  We generalize by allowing a fraction < 1.0
+ *  of the blender to be admixed with the blendee.  The standard function
+ *  does full mixing.
+ * 
+ */ + + +#include "allheaders.h" + +static l_int32 blendComponents(l_int32 a, l_int32 b, l_float32 fract); +static l_int32 blendHardLightComponents(l_int32 a, l_int32 b, l_float32 fract); + + +/*-------------------------------------------------------------* + * Blending two images that are not colormapped * + *-------------------------------------------------------------*/ +/*! + * \brief pixBlend() + * + * \param[in] pixs1 blendee + * \param[in] pixs2 blender; typ. smaller + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1; can be < 0 + * \param[in] fract blending fraction + * \return pixd blended image, or null on error + * + *
+ * Notes:
+ *      (1) This is a simple top-level interface.  For more flexibility,
+ *          call directly into pixBlendMask(), etc.
+ * 
+ */ +PIX * +pixBlend(PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract) +{ +l_int32 w1, h1, d1, d2; +BOX *box; +PIX *pixc, *pixt, *pixd; + + PROCNAME("pixBlend"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + + /* check relative depths */ + d1 = pixGetDepth(pixs1); + d2 = pixGetDepth(pixs2); + if (d1 == 1 && d2 > 1) + return (PIX *)ERROR_PTR("mixing gray or color with 1 bpp", + procName, NULL); + + /* remove colormap from pixs2 if necessary */ + pixt = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); + d2 = pixGetDepth(pixt); + + /* Check if pixs2 is clipped by its position with respect + * to pixs1; if so, clip it and redefine x and y if necessary. + * This actually isn't necessary, as the specific blending + * functions do the clipping directly in the pixel loop + * over pixs2, but it's included here to show how it can + * easily be done on pixs2 first. */ + pixGetDimensions(pixs1, &w1, &h1, NULL); + box = boxCreate(-x, -y, w1, h1); /* box of pixs1 relative to pixs2 */ + pixc = pixClipRectangle(pixt, box, NULL); + boxDestroy(&box); + if (!pixc) { + L_WARNING("box doesn't overlap pix\n", procName); + pixDestroy(&pixt); + return NULL; + } + x = L_MAX(0, x); + y = L_MAX(0, y); + + if (d2 == 1) { + pixd = pixBlendMask(NULL, pixs1, pixc, x, y, fract, + L_BLEND_WITH_INVERSE); + } else if (d2 == 8) { + pixd = pixBlendGray(NULL, pixs1, pixc, x, y, fract, + L_BLEND_GRAY, 0, 0); + } else { /* d2 == 32 */ + pixd = pixBlendColor(NULL, pixs1, pixc, x, y, fract, 0, 0); + } + + pixDestroy(&pixc); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixBlendMask() + * + * \param[in] pixd [optional]; either NULL or equal to pixs1 for in-place + * \param[in] pixs1 blendee, depth > 1 + * \param[in] pixs2 blender, 1 bpp; typ. smaller in size than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1; can be < 0 + * \param[in] fract blending fraction + * \param[in] type L_BLEND_WITH_INVERSE, L_BLEND_TO_WHITE, + * L_BLEND_TO_BLACK + * \return pixd if OK; null on error + * + *
+ * Notes:
+ *      (1) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (2) If pixs1 has a colormap, it is removed.
+ *      (3) For inplace operation (pixs1 not cmapped), call it this way:
+ *            pixBlendMask(pixs1, pixs1, pixs2, ...)
+ *      (4) For generating a new pixd:
+ *            pixd = pixBlendMask(NULL, pixs1, pixs2, ...)
+ *      (5) Only call in-place if pixs1 does not have a colormap.
+ *      (6) Invalid %fract defaults to 0.5 with a warning.
+ *          Invalid %type defaults to L_BLEND_WITH_INVERSE with a warning.
+ * 
+ */ +PIX * +pixBlendMask(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract, + l_int32 type) +{ +l_int32 i, j, d, wc, hc, w, h, wplc; +l_int32 val, rval, gval, bval; +l_uint32 pixval; +l_uint32 *linec, *datac; +PIX *pixc, *pix1, *pix2; + + PROCNAME("pixBlendMask"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, NULL); + if (pixGetDepth(pixs2) != 1) + return (PIX *)ERROR_PTR("pixs2 not 1 bpp", procName, NULL); + if (pixd == pixs1 && pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("inplace; pixs1 has colormap", procName, NULL); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, NULL); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + if (type != L_BLEND_WITH_INVERSE && type != L_BLEND_TO_WHITE && + type != L_BLEND_TO_BLACK) { + L_WARNING("invalid blend type; setting to L_BLEND_WITH_INVERSE\n", + procName); + type = L_BLEND_WITH_INVERSE; + } + + /* If pixd != NULL, we know that it is equal to pixs1 and + * that pixs1 does not have a colormap, so that an in-place operation + * can be done. Otherwise, remove colormap from pixs1 if + * it exists and unpack to at least 8 bpp if necessary, + * to do the blending on a new pix. */ + if (!pixd) { + pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pix1) < 8) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixd = pixCopy(NULL, pix2); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixGetDimensions(pixd, &w, &h, &d); /* d must be either 8 or 32 bpp */ + pixc = pixClone(pixs2); + wc = pixGetWidth(pixc); + hc = pixGetHeight(pixc); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + + /* Check limits for src1, in case clipping was not done. */ + switch (type) + { + case L_BLEND_WITH_INVERSE: + /* + * The basic logic for this blending is: + * p --> (1 - f) * p + f * (1 - p) + * where p is a normalized value: p = pixval / 255. + * Thus, + * p --> p + f * (1 - 2 * p) + */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + bval = GET_DATA_BIT(linec, j); + if (bval) { + switch (d) + { + case 8: + pixGetPixel(pixd, x + j, y + i, &pixval); + val = (l_int32)(pixval + fract * (255 - 2 * pixval)); + pixSetPixel(pixd, x + j, y + i, val); + break; + case 32: + pixGetPixel(pixd, x + j, y + i, &pixval); + extractRGBValues(pixval, &rval, &gval, &bval); + rval = (l_int32)(rval + fract * (255 - 2 * rval)); + gval = (l_int32)(gval + fract * (255 - 2 * gval)); + bval = (l_int32)(bval + fract * (255 - 2 * bval)); + composeRGBPixel(rval, gval, bval, &pixval); + pixSetPixel(pixd, x + j, y + i, pixval); + break; + default: + L_WARNING("d neither 8 nor 32 bpp; no blend\n", + procName); + } + } + } + } + break; + case L_BLEND_TO_WHITE: + /* + * The basic logic for this blending is: + * p --> p + f * (1 - p) (p normalized to [0...1]) + */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + bval = GET_DATA_BIT(linec, j); + if (bval) { + switch (d) + { + case 8: + pixGetPixel(pixd, x + j, y + i, &pixval); + val = (l_int32)(pixval + fract * (255 - pixval)); + pixSetPixel(pixd, x + j, y + i, val); + break; + case 32: + pixGetPixel(pixd, x + j, y + i, &pixval); + extractRGBValues(pixval, &rval, &gval, &bval); + rval = (l_int32)(rval + fract * (255 - rval)); + gval = (l_int32)(gval + fract * (255 - gval)); + bval = (l_int32)(bval + fract * (255 - bval)); + composeRGBPixel(rval, gval, bval, &pixval); + pixSetPixel(pixd, x + j, y + i, pixval); + break; + default: + L_WARNING("d neither 8 nor 32 bpp; no blend\n", + procName); + } + } + } + } + break; + case L_BLEND_TO_BLACK: + /* + * The basic logic for this blending is: + * p --> (1 - f) * p (p normalized to [0...1]) + */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + bval = GET_DATA_BIT(linec, j); + if (bval) { + switch (d) + { + case 8: + pixGetPixel(pixd, x + j, y + i, &pixval); + val = (l_int32)((1. - fract) * pixval); + pixSetPixel(pixd, x + j, y + i, val); + break; + case 32: + pixGetPixel(pixd, x + j, y + i, &pixval); + extractRGBValues(pixval, &rval, &gval, &bval); + rval = (l_int32)((1. - fract) * rval); + gval = (l_int32)((1. - fract) * gval); + bval = (l_int32)((1. - fract) * bval); + composeRGBPixel(rval, gval, bval, &pixval); + pixSetPixel(pixd, x + j, y + i, pixval); + break; + default: + L_WARNING("d neither 8 nor 32 bpp; no blend\n", + procName); + } + } + } + } + break; + default: + L_WARNING("invalid binary mask blend type\n", procName); + break; + } + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixBlendGray() + * + * \param[in] pixd [optional] either equal to pixs1 for in-place, + * or NULL + * \param[in] pixs1 blendee, depth > 1 + * \param[in] pixs2 blender, any depth; typically, the area of + * pixs2 is smaller than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1; can be < 0 + * \param[in] fract blending fraction + * \param[in] type L_BLEND_GRAY, L_BLEND_GRAY_WITH_INVERSE + * \param[in] transparent 1 to use transparency; 0 otherwise + * \param[in] transpix pixel grayval in pixs2 that is to be transparent + * \return pixd if OK; pixs1 on error + * + *
+ * Notes:
+ *      (1) For inplace operation (pixs1 not cmapped), call it this way:
+ *            pixBlendGray(pixs1, pixs1, pixs2, ...)
+ *      (2) For generating a new pixd:
+ *            pixd = pixBlendGray(NULL, pixs1, pixs2, ...)
+ *      (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (4) If pixs1 has a colormap, it is removed; otherwise, if pixs1
+ *          has depth < 8, it is unpacked to generate a 8 bpp pix.
+ *      (5) If transparent = 0, the blending fraction (fract) is
+ *          applied equally to all pixels.
+ *      (6) If transparent = 1, all pixels of value transpix (typically
+ *          either 0 or 0xff) in pixs2 are transparent in the blend.
+ *      (7) After processing pixs1, it is either 8 bpp or 32 bpp:
+ *          ~ if 8 bpp, the fraction of pixs2 is mixed with pixs1.
+ *          ~ if 32 bpp, each component of pixs1 is mixed with
+ *            the same fraction of pixs2.
+ *      (8) For L_BLEND_GRAY_WITH_INVERSE, the white values of the blendee
+ *          (cval == 255 in the code below) result in a delta of 0.
+ *          Thus, these pixels are intrinsically transparent!
+ *          The "pivot" value of the src, at which no blending occurs, is
+ *          128.  Compare with the adaptive pivot in pixBlendGrayAdapt().
+ *      (9) Invalid %fract defaults to 0.5 with a warning.
+ *          Invalid %type defaults to L_BLEND_GRAY with a warning.
+ * 
+ */ +PIX * +pixBlendGray(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract, + l_int32 type, + l_int32 transparent, + l_uint32 transpix) +{ +l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta; +l_int32 ival, irval, igval, ibval, cval, dval; +l_uint32 val32; +l_uint32 *linec, *lined, *datac, *datad; +PIX *pixc, *pix1, *pix2; + + PROCNAME("pixBlendGray"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); + if (pixd == pixs1 && pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + if (type != L_BLEND_GRAY && type != L_BLEND_GRAY_WITH_INVERSE) { + L_WARNING("invalid blend type; setting to L_BLEND_GRAY\n", procName); + type = L_BLEND_GRAY; + } + + /* If pixd != NULL, we know that it is equal to pixs1 and + * that pixs1 does not have a colormap, so that an in-place operation + * can be done. Otherwise, remove colormap from pixs1 if + * it exists and unpack to at least 8 bpp if necessary, + * to do the blending on a new pix. */ + if (!pixd) { + pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pix1) < 8) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixd = pixCopy(NULL, pix2); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + pixc = pixConvertTo8(pixs2, 0); + pixGetDimensions(pixc, &wc, &hc, NULL); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + + /* Check limits for src1, in case clipping was not done */ + if (type == L_BLEND_GRAY) { + /* + * The basic logic for this blending is: + * p --> (1 - f) * p + f * c + * where c is the 8 bpp blender. All values are normalized to [0...1]. + */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + switch (d) + { + case 8: + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + if (transparent == 0 || cval != transpix) { + dval = GET_DATA_BYTE(lined, j + x); + ival = (l_int32)((1. - fract) * dval + fract * cval); + SET_DATA_BYTE(lined, j + x, ival); + } + } + break; + case 32: + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + if (transparent == 0 || cval != transpix) { + val32 = *(lined + j + x); + extractRGBValues(val32, &irval, &igval, &ibval); + irval = (l_int32)((1. - fract) * irval + fract * cval); + igval = (l_int32)((1. - fract) * igval + fract * cval); + ibval = (l_int32)((1. - fract) * ibval + fract * cval); + composeRGBPixel(irval, igval, ibval, &val32); + *(lined + j + x) = val32; + } + } + break; + default: + break; /* shouldn't happen */ + } + } + } else { /* L_BLEND_GRAY_WITH_INVERSE */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + switch (d) + { + case 8: + /* + * For 8 bpp, the dest pix is shifted by a signed amount + * proportional to the distance from 128 (the pivot value), + * and to the darkness of src2. If the dest is darker + * than 128, it becomes lighter, and v.v. + * The basic logic is: + * d --> d + f * (0.5 - d) * (1 - c) + * where d and c are normalized pixel values for src1 and + * src2, respectively, with 8 bit normalization to [0...1]. + */ + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + if (transparent == 0 || cval != transpix) { + ival = GET_DATA_BYTE(lined, j + x); + delta = (128 - ival) * (255 - cval) / 256; + ival += (l_int32)(fract * delta + 0.5); + SET_DATA_BYTE(lined, j + x, ival); + } + } + break; + case 32: + /* Each component is shifted by the same formula for 8 bpp */ + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + if (transparent == 0 || cval != transpix) { + val32 = *(lined + j + x); + extractRGBValues(val32, &irval, &igval, &ibval); + delta = (128 - irval) * (255 - cval) / 256; + irval += (l_int32)(fract * delta + 0.5); + delta = (128 - igval) * (255 - cval) / 256; + igval += (l_int32)(fract * delta + 0.5); + delta = (128 - ibval) * (255 - cval) / 256; + ibval += (l_int32)(fract * delta + 0.5); + composeRGBPixel(irval, igval, ibval, &val32); + *(lined + j + x) = val32; + } + } + break; + default: + break; /* shouldn't happen */ + } + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixBlendGrayInverse() + * + * \param[in] pixd [optional] either equal to pixs1 for in-place, or NULL + * \param[in] pixd [optional] either NULL or equal to pixs1 for in-place + * \param[in] pixs1 blendee, depth > 1 + * \param[in] pixs2 blender, any depth; typ. smaller in size than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1; can be < 0 + * \param[in] fract blending fraction + * \return pixd if OK; pixs1 on error + * + *
+ * Notes:
+ *      (1) For inplace operation (pixs1 not cmapped), call it this way:
+ *            pixBlendGrayInverse(pixs1, pixs1, pixs2, ...)
+ *      (2) For generating a new pixd:
+ *            pixd = pixBlendGrayInverse(NULL, pixs1, pixs2, ...)
+ *      (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (4) If pixs1 has a colormap, it is removed; otherwise if pixs1
+ *          has depth < 8, it is unpacked to generate a 8 bpp pix.
+ *      (5) This is a no-nonsense blender.  It changes the src1 pixel except
+ *          when the src1 pixel is midlevel gray.  Use fract == 1 for the most
+ *          aggressive blending, where, if the gray pixel in pixs2 is 0,
+ *          we get a complete inversion of the color of the src pixel in pixs1.
+ *      (6) The basic logic is that each component transforms by:
+                 d  -->  c * d + (1 - c ) * (f * (1 - d) + d * (1 - f))
+ *          where c is the blender pixel from pixs2,
+ *                f is %fract,
+ *                c and d are normalized to [0...1]
+ *          This has the property that for f == 0 (no blend) or c == 1 (white):
+ *               d  -->  d
+ *          For c == 0 (black) we get maximum inversion:
+ *               d  -->  f * (1 - d) + d * (1 - f)   [inversion by fraction f]
+ * 
+ */ +PIX * +pixBlendGrayInverse(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract) +{ +l_int32 i, j, d, wc, hc, w, h, wplc, wpld; +l_int32 irval, igval, ibval, cval, dval; +l_float32 a; +l_uint32 val32; +l_uint32 *linec, *lined, *datac, *datad; +PIX *pixc, *pix1, *pix2; + + PROCNAME("pixBlendGrayInverse"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); + if (pixd == pixs1 && pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + + /* If pixd != NULL, we know that it is equal to pixs1 and + * that pixs1 does not have a colormap, so that an in-place operation + * can be done. Otherwise, remove colormap from pixs1 if + * it exists and unpack to at least 8 bpp if necessary, + * to do the blending on a new pix. */ + if (!pixd) { + pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pix1) < 8) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixd = pixCopy(NULL, pix2); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + pixc = pixConvertTo8(pixs2, 0); + pixGetDimensions(pixc, &wc, &hc, NULL); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + + /* Check limits for src1, in case clipping was not done */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + switch (d) + { + case 8: + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + dval = GET_DATA_BYTE(lined, j + x); + a = (1.0 - fract) * dval + fract * (255.0 - dval); + dval = (l_int32)(cval * dval / 255.0 + + a * (255.0 - cval) / 255.0); + SET_DATA_BYTE(lined, j + x, dval); + } + break; + case 32: + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + val32 = *(lined + j + x); + extractRGBValues(val32, &irval, &igval, &ibval); + a = (1.0 - fract) * irval + fract * (255.0 - irval); + irval = (l_int32)(cval * irval / 255.0 + + a * (255.0 - cval) / 255.0); + a = (1.0 - fract) * igval + fract * (255.0 - igval); + igval = (l_int32)(cval * igval / 255.0 + + a * (255.0 - cval) / 255.0); + a = (1.0 - fract) * ibval + fract * (255.0 - ibval); + ibval = (l_int32)(cval * ibval / 255.0 + + a * (255.0 - cval) / 255.0); + composeRGBPixel(irval, igval, ibval, &val32); + *(lined + j + x) = val32; + } + break; + default: + break; /* shouldn't happen */ + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixBlendColor() + * + * \param[in] pixd [optional] either equal to pixs1 for in-place, + * or NULL + * \param[in] pixs1 blendee; depth > 1 + * \param[in] pixs2 blender, any depth; typically, the area of + * pixs2 is smaller than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1 + * \param[in] fract blending fraction + * \param[in] transparent 1 to use transparency; 0 otherwise + * \param[in] transpix pixel color in pixs2 that is to be transparent + * \return pixd, or null on error + * + *
+ * Notes:
+ *      (1) For inplace operation (pixs1 must be 32 bpp), call it this way:
+ *            pixBlendColor(pixs1, pixs1, pixs2, ...)
+ *      (2) For generating a new pixd:
+ *            pixd = pixBlendColor(NULL, pixs1, pixs2, ...)
+ *      (3) If pixs2 is not 32 bpp rgb, it is converted.
+ *      (4) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (5) If pixs1 has a colormap, it is removed to generate a 32 bpp pix.
+ *      (6) If pixs1 has depth < 32, it is unpacked to generate a 32 bpp pix.
+ *      (7) If transparent = 0, the blending fraction (fract) is
+ *          applied equally to all pixels.
+ *      (8) If transparent = 1, all pixels of value transpix (typically
+ *          either 0 or 0xffffff00) in pixs2 are transparent in the blend.
+ * 
+ */ +PIX * +pixBlendColor(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract, + l_int32 transparent, + l_uint32 transpix) +{ +l_int32 i, j, wc, hc, w, h, wplc, wpld; +l_int32 rval, gval, bval, rcval, gcval, bcval; +l_uint32 cval32, val32; +l_uint32 *linec, *lined, *datac, *datad; +PIX *pixc; + + PROCNAME("pixBlendColor"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, NULL); + if (pixd == pixs1 && pixGetDepth(pixs1) != 32) + return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", procName, NULL); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, NULL); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + + /* If pixd != null, we know that it is equal to pixs1 and + * that pixs1 is 32 bpp rgb, so that an in-place operation + * can be done. Otherwise, pixConvertTo32() will remove a + * colormap from pixs1 if it exists and unpack to 32 bpp + * (if necessary) to do the blending on a new 32 bpp Pix. */ + if (!pixd) + pixd = pixConvertTo32(pixs1); + pixGetDimensions(pixd, &w, &h, NULL); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + pixc = pixConvertTo32(pixs2); /* blend with 32 bpp rgb */ + pixGetDimensions(pixc, &wc, &hc, NULL); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + + /* Check limits for src1, in case clipping was not done */ + for (i = 0; i < hc; i++) { + /* + * The basic logic for this blending is: + * p --> (1 - f) * p + f * c + * for each color channel. c is a color component of the blender. + * All values are normalized to [0...1]. + */ + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval32 = *(linec + j); + if (transparent == 0 || + ((cval32 & 0xffffff00) != (transpix & 0xffffff00))) { + val32 = *(lined + j + x); + extractRGBValues(cval32, &rcval, &gcval, &bcval); + extractRGBValues(val32, &rval, &gval, &bval); + rval = (l_int32)((1. - fract) * rval + fract * rcval); + gval = (l_int32)((1. - fract) * gval + fract * gcval); + bval = (l_int32)((1. - fract) * bval + fract * bcval); + composeRGBPixel(rval, gval, bval, &val32); + *(lined + j + x) = val32; + } + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/* + * \brief pixBlendColorByChannel() + * + * \param[in] pixd [optional] either equal to pixs1 for in-place, + * or NULL + * \param[in] pixs1 blendee; depth > 1 + * \param[in] pixs2 blender, any depth; typically, the area of + * pixs2 is smaller than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1 + * \param[in] rfract blending fraction in red channel + * \param[in] gfract blending fraction in green channel + * \param[in] bfract blending fraction in blue channel + * \param[in] transparent 1 to use transparency; 0 otherwise + * \param[in] transpix pixel color in pixs2 that is to be transparent + * \return pixd if OK; pixd on error + * + *
+ * Notes:
+ *      (1) This generalizes pixBlendColor() in two ways:
+ *          (a) The mixing fraction is specified per channel.
+ *          (b) The mixing fraction may be < 0 or > 1, in which case,
+ *              the min or max of two images are taken, respectively.
+ *      (2) Specifically,
+ *          for p = pixs1[i], c = pixs2[i], f = fract[i], i = 1, 2, 3:
+ *              f < 0.0:          p --> min(p, c)
+ *              0.0 <= f <= 1.0:  p --> (1 - f) * p + f * c
+ *              f > 1.0:          p --> max(a, c)
+ *          Special cases:
+ *              f = 0:   p --> p
+ *              f = 1:   p --> c
+ *      (3) See usage notes in pixBlendColor()
+ *      (4) pixBlendColor() would be equivalent to
+ *            pixBlendColorChannel(..., fract, fract, fract, ...);
+ *          at a small cost of efficiency.
+ * 
+ */ +PIX * +pixBlendColorByChannel(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 rfract, + l_float32 gfract, + l_float32 bfract, + l_int32 transparent, + l_uint32 transpix) +{ +l_int32 i, j, wc, hc, w, h, wplc, wpld; +l_int32 rval, gval, bval, rcval, gcval, bcval; +l_uint32 cval32, val32; +l_uint32 *linec, *lined, *datac, *datad; +PIX *pixc; + + PROCNAME("pixBlendColorByChannel"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); + if (pixd == pixs1 && pixGetDepth(pixs1) != 32) + return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", procName, pixd); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); + + /* If pixd != NULL, we know that it is equal to pixs1 and + * that pixs1 is 32 bpp rgb, so that an in-place operation + * can be done. Otherwise, pixConvertTo32() will remove a + * colormap from pixs1 if it exists and unpack to 32 bpp + * (if necessary) to do the blending on a new 32 bpp Pix. */ + if (!pixd) + pixd = pixConvertTo32(pixs1); + pixGetDimensions(pixd, &w, &h, NULL); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + pixc = pixConvertTo32(pixs2); + pixGetDimensions(pixc, &wc, &hc, NULL); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + + /* Check limits for src1, in case clipping was not done */ + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval32 = *(linec + j); + if (transparent == 0 || + ((cval32 & 0xffffff00) != (transpix & 0xffffff00))) { + val32 = *(lined + j + x); + extractRGBValues(cval32, &rcval, &gcval, &bcval); + extractRGBValues(val32, &rval, &gval, &bval); + rval = blendComponents(rval, rcval, rfract); + gval = blendComponents(gval, gcval, gfract); + bval = blendComponents(bval, bcval, bfract); + composeRGBPixel(rval, gval, bval, &val32); + *(lined + j + x) = val32; + } + } + } + + pixDestroy(&pixc); + return pixd; +} + + +static l_int32 +blendComponents(l_int32 a, + l_int32 b, + l_float32 fract) +{ + if (fract < 0.) + return ((a < b) ? a : b); + if (fract > 1.) + return ((a > b) ? a : b); + return (l_int32)((1. - fract) * a + fract * b); +} + + +/*! + * \brief pixBlendGrayAdapt() + * + * \param[in] pixd [optional] either equal to pixs1 for in-place, or NULL + * \param[in] pixs1 blendee; depth > 1 + * \param[in] pixs2 blender, any depth; typically, the area of + * pixs2 is smaller than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1; can be < 0 + * \param[in] fract blending fraction + * \param[in] shift >= 0 but <= 128: shift of zero blend value from + * median source; use -1 for default value; + * \return pixd if OK; pixs1 on error + * + *
+ * Notes:
+ *      (1) For inplace operation (pixs1 not cmapped), call it this way:
+ *            pixBlendGrayAdapt(pixs1, pixs1, pixs2, ...)
+ *          For generating a new pixd:
+ *            pixd = pixBlendGrayAdapt(NULL, pixs1, pixs2, ...)
+ *      (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (3) If pixs1 has a colormap, it is removed.
+ *      (4) If pixs1 has depth < 8, it is unpacked to generate a 8 bpp pix.
+ *      (5) This does a blend with inverse.  Whereas in pixGlendGray(), the
+ *          zero blend point is where the blendee pixel is 128, here
+ *          the zero blend point is found adaptively, with respect to the
+ *          median of the blendee region.  If the median is < 128,
+ *          the zero blend point is found from
+ *              median + shift.
+ *          Otherwise, if the median >= 128, the zero blend point is
+ *              median - shift.
+ *          The purpose of shifting the zero blend point away from the
+ *          median is to prevent a situation in pixBlendGray() where
+ *          the median is 128 and the blender is not visible.
+ *          The default value of shift is 64.
+ *      (6) After processing pixs1, it is either 8 bpp or 32 bpp:
+ *          ~ if 8 bpp, the fraction of pixs2 is mixed with pixs1.
+ *          ~ if 32 bpp, each component of pixs1 is mixed with
+ *            the same fraction of pixs2.
+ *      (7) The darker the blender, the more it mixes with the blendee.
+ *          A blender value of 0 has maximum mixing; a value of 255
+ *          has no mixing and hence is transparent.
+ * 
+ */ +PIX * +pixBlendGrayAdapt(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract, + l_int32 shift) +{ +l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta, overlap; +l_int32 rval, gval, bval, cval, dval, mval, median, pivot; +l_uint32 val32; +l_uint32 *linec, *lined, *datac, *datad; +l_float32 fmedian, factor; +BOX *box, *boxt; +PIX *pixc, *pix1, *pix2; + + PROCNAME("pixBlendGrayAdapt"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixGetDepth(pixs1) == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); + if (pixd == pixs1 && pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + if (shift == -1) shift = 64; /* default value */ + if (shift < 0 || shift > 127) { + L_WARNING("invalid shift; setting to 64\n", procName); + shift = 64; + } + + /* Test for overlap */ + pixGetDimensions(pixs1, &w, &h, NULL); + pixGetDimensions(pixs2, &wc, &hc, NULL); + box = boxCreate(x, y, wc, hc); + boxt = boxCreate(0, 0, w, h); + boxIntersects(box, boxt, &overlap); + boxDestroy(&boxt); + if (!overlap) { + boxDestroy(&box); + return (PIX *)ERROR_PTR("no image overlap", procName, pixd); + } + + /* If pixd != NULL, we know that it is equal to pixs1 and + * that pixs1 does not have a colormap, so that an in-place operation + * can be done. Otherwise, remove colormap from pixs1 if + * it exists and unpack to at least 8 bpp if necessary, + * to do the blending on a new pix. */ + if (!pixd) { + pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pix1) < 8) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixd = pixCopy(NULL, pix2); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + /* Get the median value in the region of blending */ + pix1 = pixClipRectangle(pixd, box, NULL); + pix2 = pixConvertTo8(pix1, 0); + pixGetRankValueMasked(pix2, NULL, 0, 0, 1, 0.5, &fmedian, NULL); + median = (l_int32)(fmedian + 0.5); + if (median < 128) + pivot = median + shift; + else + pivot = median - shift; + pixDestroy(&pix1); + pixDestroy(&pix2); + boxDestroy(&box); + + /* Process over src2; clip to src1. */ + d = pixGetDepth(pixd); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + pixc = pixConvertTo8(pixs2, 0); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + switch (d) + { + case 8: + /* + * For 8 bpp, the dest pix is shifted by an amount + * proportional to the distance from the pivot value, + * and to the darkness of src2. In no situation will it + * pass the pivot value in intensity. + * The basic logic is: + * d --> d + f * (np - d) * (1 - c) + * where np, d and c are normalized pixel values for + * the pivot, src1 and src2, respectively, with normalization + * to 255. + */ + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + dval = GET_DATA_BYTE(lined, j + x); + cval = GET_DATA_BYTE(linec, j); + delta = (pivot - dval) * (255 - cval) / 256; + dval += (l_int32)(fract * delta + 0.5); + SET_DATA_BYTE(lined, j + x, dval); + } + break; + case 32: + /* + * For 32 bpp, the dest pix is shifted by an amount + * proportional to the max component distance from the + * pivot value, and to the darkness of src2. Each component + * is shifted by the same fraction, either up or down, + * depending on the shift direction (which is toward the + * pivot). The basic logic for the red component is: + * r --> r + f * (np - m) * (1 - c) * (r / m) + * where np, r, m and c are normalized pixel values for + * the pivot, the r component of src1, the max component + * of src1, and src2, respectively, again with normalization + * to 255. Likewise for the green and blue components. + */ + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + cval = GET_DATA_BYTE(linec, j); + val32 = *(lined + j + x); + extractRGBValues(val32, &rval, &gval, &bval); + mval = L_MAX(rval, gval); + mval = L_MAX(mval, bval); + mval = L_MAX(mval, 1); + delta = (pivot - mval) * (255 - cval) / 256; + factor = fract * delta / mval; + rval += (l_int32)(factor * rval + 0.5); + gval += (l_int32)(factor * gval + 0.5); + bval += (l_int32)(factor * bval + 0.5); + composeRGBPixel(rval, gval, bval, &val32); + *(lined + j + x) = val32; + } + break; + default: + break; /* shouldn't happen */ + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixFadeWithGray() + * + * \param[in] pixs colormapped or 8 bpp or 32 bpp + * \param[in] pixb 8 bpp blender + * \param[in] factor multiplicative factor to apply to blender value + * \param[in] type L_BLEND_TO_WHITE, L_BLEND_TO_BLACK + * \return pixd, or null on error + * + *
+ * Notes:
+ *      (1) This function combines two pix aligned to the UL corner; they
+ *          need not be the same size.
+ *      (2) Each pixel in pixb is multiplied by 'factor' divided by 255, and
+ *          clipped to the range [0 ... 1].  This gives the fade fraction
+ *          to be applied to pixs.  Fade either to white (L_BLEND_TO_WHITE)
+ *          or to black (L_BLEND_TO_BLACK).
+ * 
+ */ +PIX * +pixFadeWithGray(PIX *pixs, + PIX *pixb, + l_float32 factor, + l_int32 type) +{ +l_int32 i, j, w, h, d, wb, hb, db, wd, hd, wplb, wpld; +l_int32 valb, vald, nvald, rval, gval, bval, nrval, ngval, nbval; +l_float32 nfactor, fract; +l_uint32 val32, nval32; +l_uint32 *lined, *datad, *lineb, *datab; +PIX *pixd; + + PROCNAME("pixFadeWithGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixb) + return (PIX *)ERROR_PTR("pixb not defined", procName, NULL); + if (pixGetDepth(pixs) == 1) + return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); + pixGetDimensions(pixb, &wb, &hb, &db); + if (db != 8) + return (PIX *)ERROR_PTR("pixb not 8 bpp", procName, NULL); + if (factor < 0.0 || factor > 255.0) + return (PIX *)ERROR_PTR("factor not in [0.0...255.0]", procName, NULL); + if (type != L_BLEND_TO_WHITE && type != L_BLEND_TO_BLACK) + return (PIX *)ERROR_PTR("invalid fade type", procName, NULL); + + /* Remove colormap if it exists; otherwise copy */ + pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY); + pixGetDimensions(pixd, &wd, &hd, &d); + w = L_MIN(wb, wd); + h = L_MIN(hb, hd); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datab = pixGetData(pixb); + wplb = pixGetWpl(pixb); + + /* The basic logic for this blending is, for each component p of pixs: + * fade-to-white: p --> p + (f * c) * (1 - p) + * fade-to-black: p --> p - (f * c) * p + * with c being the 8 bpp blender pixel of pixb, and with both + * p and c normalized to [0...1]. */ + nfactor = factor / 255.; + for (i = 0; i < h; i++) { + lineb = datab + i * wplb; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + valb = GET_DATA_BYTE(lineb, j); + fract = nfactor * (l_float32)valb; + fract = L_MIN(fract, 1.0); + if (d == 8) { + vald = GET_DATA_BYTE(lined, j); + if (type == L_BLEND_TO_WHITE) + nvald = vald + (l_int32)(fract * (255. - (l_float32)vald)); + else /* L_BLEND_TO_BLACK */ + nvald = vald - (l_int32)(fract * (l_float32)vald); + SET_DATA_BYTE(lined, j, nvald); + } else { /* d == 32 */ + val32 = lined[j]; + extractRGBValues(val32, &rval, &gval, &bval); + if (type == L_BLEND_TO_WHITE) { + nrval = rval + (l_int32)(fract * (255. - (l_float32)rval)); + ngval = gval + (l_int32)(fract * (255. - (l_float32)gval)); + nbval = bval + (l_int32)(fract * (255. - (l_float32)bval)); + } else { + nrval = rval - (l_int32)(fract * (l_float32)rval); + ngval = gval - (l_int32)(fract * (l_float32)gval); + nbval = bval - (l_int32)(fract * (l_float32)bval); + } + composeRGBPixel(nrval, ngval, nbval, &nval32); + lined[j] = nval32; + } + } + } + + return pixd; +} + + +/* + * \brief pixBlendHardLight() + * + * \param[in] pixd either NULL or equal to pixs1 for in-place + * \param[in] pixs1 blendee; depth > 1, may be cmapped + * \param[in] pixs2 blender, 8 or 32 bpp; may be colormapped; + * typ. smaller in size than pixs1 + * \param[in] x,y origin [UL corner] of pixs2 relative to + * the origin of pixs1 + * \param[in] fract blending fraction, or 'opacity factor' + * \return pixd if OK; pixs1 on error + * + *
+ * Notes:
+ *      (1) pixs2 must be 8 or 32 bpp; either may have a colormap.
+ *      (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop.
+ *      (3) Only call in-place if pixs1 is not colormapped.
+ *      (4) If pixs1 has a colormap, it is removed to generate either an
+ *          8 or 32 bpp pix, depending on the colormap.
+ *      (5) For inplace operation, call it this way:
+ *            pixBlendHardLight(pixs1, pixs1, pixs2, ...)
+ *      (6) For generating a new pixd:
+ *            pixd = pixBlendHardLight(NULL, pixs1, pixs2, ...)
+ *      (7) This is a generalization of the usual hard light blending,
+ *          where fract == 1.0.
+ *      (8) "Overlay" blending is the same as hard light blending, with
+ *          fract == 1.0, except that the components are switched
+ *          in the test.  (Note that the result is symmetric in the
+ *          two components.)
+ *      (9) See, e.g.:
+ *           http://www.pegtop.net/delphi/articles/blendmodes/hardlight.htm
+ *           http://www.digitalartform.com/imageArithmetic.htm
+ *      (10) This function was built by Paco Galanes.
+ * 
+ */ +PIX * +pixBlendHardLight(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 x, + l_int32 y, + l_float32 fract) +{ +l_int32 i, j, w, h, d, wc, hc, dc, wplc, wpld; +l_int32 cval, dval, rcval, gcval, bcval, rdval, gdval, bdval; +l_uint32 cval32, dval32; +l_uint32 *linec, *lined, *datac, *datad; +PIX *pixc, *pixt; + + PROCNAME("pixBlendHardLight"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + pixGetDimensions(pixs1, &w, &h, &d); + pixGetDimensions(pixs2, &wc, &hc, &dc); + if (d == 1) + return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); + if (dc != 8 && dc != 32) + return (PIX *)ERROR_PTR("pixs2 not 8 or 32 bpp", procName, pixd); + if (pixd && (pixd != pixs1)) + return (PIX *)ERROR_PTR("inplace and pixd != pixs1", procName, pixd); + if (pixd == pixs1 && pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("inplace and pixs1 cmapped", procName, pixd); + if (pixd && d != 8 && d != 32) + return (PIX *)ERROR_PTR("inplace and not 8 or 32 bpp", procName, pixd); + + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + + /* If pixs2 has a colormap, remove it */ + pixc = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); /* clone ok */ + dc = pixGetDepth(pixc); + + /* There are 4 cases: + * * pixs1 has or doesn't have a colormap + * * pixc is either 8 or 32 bpp + * In all situations, if pixs has a colormap it must be removed, + * and pixd must have a depth that is equal to or greater than pixc. */ + if (dc == 32) { + if (pixGetColormap(pixs1)) { /* pixd == NULL */ + pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); + } else { + if (!pixd) { + pixd = pixConvertTo32(pixs1); + } else { + pixt = pixConvertTo32(pixs1); + pixCopy(pixd, pixt); + pixDestroy(&pixt); + } + } + d = 32; + } else { /* dc == 8 */ + if (pixGetColormap(pixs1)) /* pixd == NULL */ + pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + else + pixd = pixCopy(pixd, pixs1); + d = pixGetDepth(pixd); + } + + if (!(d == 8 && dc == 8) && /* 3 cases only */ + !(d == 32 && dc == 8) && + !(d == 32 && dc == 32)) { + pixDestroy(&pixc); + return (PIX *)ERROR_PTR("bad! -- invalid depth combo!", procName, pixd); + } + + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + for (i = 0; i < hc; i++) { + if (i + y < 0 || i + y >= h) continue; + linec = datac + i * wplc; + lined = datad + (i + y) * wpld; + for (j = 0; j < wc; j++) { + if (j + x < 0 || j + x >= w) continue; + if (d == 8 && dc == 8) { + dval = GET_DATA_BYTE(lined, x + j); + cval = GET_DATA_BYTE(linec, j); + dval = blendHardLightComponents(dval, cval, fract); + SET_DATA_BYTE(lined, x + j, dval); + } else if (d == 32 && dc == 8) { + dval32 = *(lined + x + j); + extractRGBValues(dval32, &rdval, &gdval, &bdval); + cval = GET_DATA_BYTE(linec, j); + rdval = blendHardLightComponents(rdval, cval, fract); + gdval = blendHardLightComponents(gdval, cval, fract); + bdval = blendHardLightComponents(bdval, cval, fract); + composeRGBPixel(rdval, gdval, bdval, &dval32); + *(lined + x + j) = dval32; + } else if (d == 32 && dc == 32) { + dval32 = *(lined + x + j); + extractRGBValues(dval32, &rdval, &gdval, &bdval); + cval32 = *(linec + j); + extractRGBValues(cval32, &rcval, &gcval, &bcval); + rdval = blendHardLightComponents(rdval, rcval, fract); + gdval = blendHardLightComponents(gdval, gcval, fract); + bdval = blendHardLightComponents(bdval, bcval, fract); + composeRGBPixel(rdval, gdval, bdval, &dval32); + *(lined + x + j) = dval32; + } + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/* + * \brief blendHardLightComponents() + * + * \param[in] a 8 bpp blendee component + * \param[in] b 8 bpp blender component + * \param[in] fract fraction of blending; use 1.0 for usual definition + * \return blended 8 bpp component + * + *
+ * Notes:
+ *
+ *    The basic logic for this blending is:
+ *      b < 0.5:
+ *          a --> 2 * a * (0.5 - f * (0.5 - b))
+ *      b >= 0.5:
+ *          a --> 1 - 2 * (1 - a) * (1 - (0.5 - f * (0.5 - b)))
+ *
+ *    In the limit that f == 1 (standard hardlight blending):
+ *      b < 0.5:   a --> 2 * a * b
+ *                     or
+ *                 a --> a - a * (1 - 2 * b)
+ *      b >= 0.5:  a --> 1 - 2 * (1 - a) * (1 - b)
+ *                     or
+ *                 a --> a + (1 - a) * (2 * b - 1)
+ *
+ *    You can see that for standard hardlight blending:
+ *      b < 0.5:   a is pushed linearly with b down to 0
+ *      b >= 0.5:  a is pushed linearly with b up to 1
+ *    a is unchanged if b = 0.5
+ *
+ *    Our opacity factor f reduces the deviation of b from 0.5:
+ *      f == 0:  b -->  0.5, so no blending occurs
+ *      f == 1:  b -->  b, so we get full conventional blending
+ *
+ *    There is a variant of hardlight blending called "softlight" blending:
+ *    (e.g., http://jswidget.com/blog/tag/hard-light/)
+ *      b < 0.5:
+ *          a --> a - a * (0.5 - b) * (1 - Abs(2 * a - 1))
+ *      b >= 0.5:
+ *          a --> a + (1 - a) * (b - 0.5) * (1 - Abs(2 * a - 1))
+ *    which limits the amount that 'a' can be moved to a maximum of
+ *    halfway toward 0 or 1, and further reduces it as 'a' moves
+ *    away from 0.5.
+ *    As you can see, there are a nearly infinite number of different
+ *    blending formulas that can be conjured up.
+ * 
+ */ +static l_int32 blendHardLightComponents(l_int32 a, + l_int32 b, + l_float32 fract) +{ + if (b < 0x80) { + b = 0x80 - (l_int32)(fract * (0x80 - b)); + return (a * b) >> 7; + } else { + b = 0x80 + (l_int32)(fract * (b - 0x80)); + return 0xff - (((0xff - b) * (0xff - a)) >> 7); + } +} + + +/*-------------------------------------------------------------* + * Blending two colormapped images * + *-------------------------------------------------------------*/ +/*! + * \brief pixBlendCmap() + * + * \param[in] pixs 2, 4 or 8 bpp, with colormap + * \param[in] pixb colormapped blender + * \param[in] x, y UL corner of blender relative to pixs + * \param[in] sindex colormap index of pixels in pixs to be changed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function combines two colormaps, and replaces the pixels
+ *          in pixs that have a specified color value with those in pixb.
+ *      (2) sindex must be in the existing colormap; otherwise an
+ *          error is returned.  In use, sindex will typically be the index
+ *          for white (255, 255, 255).
+ *      (3) Blender colors that already exist in the colormap are used;
+ *          others are added.  If any blender colors cannot be
+ *          stored in the colormap, an error is returned.
+ *      (4) In the implementation, a mapping is generated from each
+ *          original blender colormap index to the corresponding index
+ *          in the expanded colormap for pixs.  Then for each pixel in
+ *          pixs with value sindex, and which is covered by a blender pixel,
+ *          the new index corresponding to the blender pixel is substituted
+ *          for sindex.
+ * 
+ */ +l_ok +pixBlendCmap(PIX *pixs, + PIX *pixb, + l_int32 x, + l_int32 y, + l_int32 sindex) +{ +l_int32 rval, gval, bval; +l_int32 i, j, w, h, d, ncb, wb, hb, wpls; +l_int32 index, val, nadded; +l_int32 lut[256]; +l_uint32 pval; +l_uint32 *lines, *datas; +PIXCMAP *cmaps, *cmapb, *cmapsc; + + PROCNAME("pixBlendCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixb) + return ERROR_INT("pixb not defined", procName, 1); + if ((cmaps = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap in pixs", procName, 1); + if ((cmapb = pixGetColormap(pixb)) == NULL) + return ERROR_INT("no colormap in pixb", procName, 1); + ncb = pixcmapGetCount(cmapb); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return ERROR_INT("depth not in {2,4,8}", procName, 1); + + /* Make a copy of cmaps; we'll add to this if necessary + * and substitute at the end if we found there was enough room + * to hold all the new colors. */ + cmapsc = pixcmapCopy(cmaps); + + /* Add new colors if necessary; get mapping array between + * cmaps and cmapb. */ + for (i = 0, nadded = 0; i < ncb; i++) { + pixcmapGetColor(cmapb, i, &rval, &gval, &bval); + if (pixcmapGetIndex(cmapsc, rval, gval, bval, &index)) { /* not found */ + if (pixcmapAddColor(cmapsc, rval, gval, bval)) { + pixcmapDestroy(&cmapsc); + return ERROR_INT("not enough room in cmaps", procName, 1); + } + lut[i] = pixcmapGetCount(cmapsc) - 1; + nadded++; + } else { + lut[i] = index; + } + } + + /* Replace cmaps if colors have been added. */ + if (nadded == 0) + pixcmapDestroy(&cmapsc); + else + pixSetColormap(pixs, cmapsc); + + /* Replace each pixel value sindex by mapped colormap index when + * a blender pixel in pixbc overlays it. */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixGetDimensions(pixb, &wb, &hb, NULL); + for (i = 0; i < hb; i++) { + if (i + y < 0 || i + y >= h) continue; + lines = datas + (y + i) * wpls; + for (j = 0; j < wb; j++) { + if (j + x < 0 || j + x >= w) continue; + switch (d) { + case 2: + val = GET_DATA_DIBIT(lines, x + j); + if (val == sindex) { + pixGetPixel(pixb, j, i, &pval); + SET_DATA_DIBIT(lines, x + j, lut[pval]); + } + break; + case 4: + val = GET_DATA_QBIT(lines, x + j); + if (val == sindex) { + pixGetPixel(pixb, j, i, &pval); + SET_DATA_QBIT(lines, x + j, lut[pval]); + } + break; + case 8: + val = GET_DATA_BYTE(lines, x + j); + if (val == sindex) { + pixGetPixel(pixb, j, i, &pval); + SET_DATA_BYTE(lines, x + j, lut[pval]); + } + break; + default: + return ERROR_INT("depth not in {2,4,8}", procName, 1); + } + } + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Blending two images using a third * + *---------------------------------------------------------------------*/ +/*! + * \brief pixBlendWithGrayMask() + * + * \param[in] pixs1 8 bpp gray, rgb, rgba or colormapped + * \param[in] pixs2 8 bpp gray, rgb, rgba or colormapped + * \param[in] pixg [optional] 8 bpp gray, for transparency of pixs2; + * can be null + * \param[in] x, y UL corner of pixs2 and pixg with respect to pixs1 + * \return pixd blended image, or null on error + * + *
+ * Notes:
+ *      (1) The result is 8 bpp grayscale if both pixs1 and pixs2 are
+ *          8 bpp gray.  Otherwise, the result is 32 bpp rgb.
+ *      (2) pixg is an 8 bpp transparency image, where 0 is transparent
+ *          and 255 is opaque.  It determines the transparency of pixs2
+ *          when applied over pixs1.  It can be null if pixs2 is rgba,
+ *          in which case we use the alpha component of pixs2.
+ *      (3) If pixg exists, it need not be the same size as pixs2.
+ *          However, we assume their UL corners are aligned with each other,
+ *          and placed at the location (x, y) in pixs1.
+ *      (4) The pixels in pixd are a combination of those in pixs1
+ *          and pixs2, where the amount from pixs2 is proportional to
+ *          the value of the pixel (p) in pixg, and the amount from pixs1
+ *          is proportional to (255 - p).  Thus pixg is a transparency
+ *          image (usually called an alpha blender) where each pixel
+ *          can be associated with a pixel in pixs2, and determines
+ *          the amount of the pixs2 pixel in the final result.
+ *          For example, if pixg is all 0, pixs2 is transparent and
+ *          the result in pixd is simply pixs1.
+ *      (5) A typical use is for the pixs2/pixg combination to be
+ *          a small watermark that is applied to pixs1.
+ * 
+ */ +PIX * +pixBlendWithGrayMask(PIX *pixs1, + PIX *pixs2, + PIX *pixg, + l_int32 x, + l_int32 y) +{ +l_int32 w1, h1, d1, w2, h2, d2, spp, wg, hg, wmin, hmin, wpld, wpls, wplg; +l_int32 i, j, val, dval, sval; +l_int32 drval, dgval, dbval, srval, sgval, sbval; +l_uint32 dval32, sval32; +l_uint32 *datad, *datas, *datag, *lined, *lines, *lineg; +l_float32 fract; +PIX *pixr1, *pixr2, *pix1, *pix2, *pixg2, *pixd; + + PROCNAME("pixBlendWithGrayMask"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + pixGetDimensions(pixs1, &w1, &h1, &d1); + pixGetDimensions(pixs2, &w2, &h2, &d2); + if (d1 == 1 || d2 == 1) + return (PIX *)ERROR_PTR("pixs1 or pixs2 is 1 bpp", procName, NULL); + if (pixg) { + if (pixGetDepth(pixg) != 8) + return (PIX *)ERROR_PTR("pixg not 8 bpp", procName, NULL); + pixGetDimensions(pixg, &wg, &hg, NULL); + wmin = L_MIN(w2, wg); + hmin = L_MIN(h2, hg); + pixg2 = pixClone(pixg); + } else { /* use the alpha component of pixs2 */ + spp = pixGetSpp(pixs2); + if (d2 != 32 || spp != 4) + return (PIX *)ERROR_PTR("no alpha; pixs2 not rgba", procName, NULL); + wmin = w2; + hmin = h2; + pixg2 = pixGetRGBComponent(pixs2, L_ALPHA_CHANNEL); + } + + /* Remove colormaps if they exist; clones are OK */ + pixr1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); + pixr2 = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); + + /* Regularize to the same depth if necessary */ + d1 = pixGetDepth(pixr1); + d2 = pixGetDepth(pixr2); + if (d1 == 32) { /* convert d2 to rgb if necessary */ + pix1 = pixClone(pixr1); + if (d2 != 32) + pix2 = pixConvertTo32(pixr2); + else + pix2 = pixClone(pixr2); + } else if (d2 == 32) { /* and d1 != 32; convert to 32 */ + pix2 = pixClone(pixr2); + pix1 = pixConvertTo32(pixr1); + } else { /* both are 8 bpp or less */ + pix1 = pixConvertTo8(pixr1, FALSE); + pix2 = pixConvertTo8(pixr2, FALSE); + } + pixDestroy(&pixr1); + pixDestroy(&pixr2); + + /* Sanity check: both either 8 or 32 bpp */ + d1 = pixGetDepth(pix1); + d2 = pixGetDepth(pix2); + if (d1 != d2 || (d1 != 8 && d1 != 32)) { + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pixg2); + return (PIX *)ERROR_PTR("depths not regularized! bad!", procName, NULL); + } + + /* Start with a copy of pix1 */ + pixd = pixCopy(NULL, pix1); + pixDestroy(&pix1); + + /* Blend pix2 onto pixd, using pixg2. + * Let the normalized pixel value of pixg2 be f = pixval / 255, + * and the pixel values of pixd and pix2 be p1 and p2, rsp. + * Then the blended value is: + * p = (1.0 - f) * p1 + f * p2 + * Blending is done component-wise if rgb. + * Scan over pix2 and pixg2, clipping to pixd where necessary. */ + datad = pixGetData(pixd); + datas = pixGetData(pix2); + datag = pixGetData(pixg2); + wpld = pixGetWpl(pixd); + wpls = pixGetWpl(pix2); + wplg = pixGetWpl(pixg2); + for (i = 0; i < hmin; i++) { + if (i + y < 0 || i + y >= h1) continue; + lined = datad + (i + y) * wpld; + lines = datas + i * wpls; + lineg = datag + i * wplg; + for (j = 0; j < wmin; j++) { + if (j + x < 0 || j + x >= w1) continue; + val = GET_DATA_BYTE(lineg, j); + if (val == 0) continue; /* pix2 is transparent */ + fract = (l_float32)val / 255.; + if (d1 == 8) { + dval = GET_DATA_BYTE(lined, j + x); + sval = GET_DATA_BYTE(lines, j); + dval = (l_int32)((1.0 - fract) * dval + fract * sval); + SET_DATA_BYTE(lined, j + x, dval); + } else { /* 32 */ + dval32 = *(lined + j + x); + sval32 = *(lines + j); + extractRGBValues(dval32, &drval, &dgval, &dbval); + extractRGBValues(sval32, &srval, &sgval, &sbval); + drval = (l_int32)((1.0 - fract) * drval + fract * srval); + dgval = (l_int32)((1.0 - fract) * dgval + fract * sgval); + dbval = (l_int32)((1.0 - fract) * dbval + fract * sbval); + composeRGBPixel(drval, dgval, dbval, &dval32); + *(lined + j + x) = dval32; + } + } + } + + pixDestroy(&pixg2); + pixDestroy(&pix2); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Blending background to a specific color * + *---------------------------------------------------------------------*/ +/*! + * \brief pixBlendBackgroundToColor() + * + * \param[in] pixd can be NULL or pixs + * \param[in] pixs 32 bpp rgb + * \param[in] box region for blending; can be NULL) + * \param[in] color 32 bit color in 0xrrggbb00 format + * \param[in] gamma, minval, maxval args for grayscale TRC mapping + * \return pixd always + * + *
+ * Notes:
+ *      (1) This in effect replaces light background pixels in pixs
+ *          by the input color.  It does it by alpha blending so that
+ *          there are no visible artifacts from hard cutoffs.
+ *      (2) If pixd == pixs, this is done in-place.
+ *      (3) If box == NULL, this is performed on all of pixs.
+ *      (4) The alpha component for blending is derived from pixs,
+ *          by converting to grayscale and enhancing with a TRC.
+ *      (5) The last three arguments specify the TRC operation.
+ *          Suggested values are: %gamma = 0.3, %minval = 50, %maxval = 200.
+ *          To skip the TRC, use %gamma == 1, %minval = 0, %maxval = 255.
+ *          See pixGammaTRC() for details.
+ * 
+ */ +PIX * +pixBlendBackgroundToColor(PIX *pixd, + PIX *pixs, + BOX *box, + l_uint32 color, + l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +l_int32 x, y, w, h; +BOX *boxt; +PIX *pixt, *pixc, *pixr, *pixg; + + PROCNAME("pixBlendBackgroundToColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd neither null nor pixs", procName, pixd); + + /* Extract the (optionally cropped) region, pixr, and generate + * an identically sized pixc with the uniform color. */ + if (!pixd) + pixd = pixCopy(NULL, pixs); + if (box) { + pixr = pixClipRectangle(pixd, box, &boxt); + boxGetGeometry(boxt, &x, &y, &w, &h); + pixc = pixCreate(w, h, 32); + boxDestroy(&boxt); + } else { + pixc = pixCreateTemplate(pixs); + pixr = pixClone(pixd); + } + pixSetAllArbitrary(pixc, color); + + /* Set up the alpha channel */ + pixg = pixConvertTo8(pixr, 0); + pixGammaTRC(pixg, pixg, gamma, minval, maxval); + pixSetRGBComponent(pixc, pixg, L_ALPHA_CHANNEL); + + /* Blend and replace in pixd */ + pixt = pixBlendWithGrayMask(pixr, pixc, NULL, 0, 0); + if (box) { + pixRasterop(pixd, x, y, w, h, PIX_SRC, pixt, 0, 0); + pixDestroy(&pixt); + } else { + pixTransferAllData(pixd, &pixt, 0, 0); + } + + pixDestroy(&pixc); + pixDestroy(&pixr); + pixDestroy(&pixg); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Multiplying by a specific color * + *---------------------------------------------------------------------*/ +/*! + * \brief pixMultiplyByColor() + * + * \param[in] pixd can be NULL or pixs + * \param[in] pixs 32 bpp rgb + * \param[in] box region for filtering; can be NULL) + * \param[in] color 32 bit color in 0xrrggbb00 format + * \return pixd always + * + *
+ * Notes:
+ *      (1) This filters all pixels in the specified region by
+ *          multiplying each component by the input color.
+ *          This leaves black invariant and transforms white to the
+ *          input color.
+ *      (2) If pixd == pixs, this is done in-place.
+ *      (3) If box == NULL, this is performed on all of pixs.
+ * 
+ */ +PIX * +pixMultiplyByColor(PIX *pixd, + PIX *pixs, + BOX *box, + l_uint32 color) +{ +l_int32 i, j, bx, by, w, h, wpl; +l_int32 red, green, blue, rval, gval, bval, nrval, ngval, nbval; +l_float32 frval, fgval, fbval; +l_uint32 *data, *line; +PIX *pixt; + + PROCNAME("pixMultiplyByColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd neither null nor pixs", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + if (box) { + boxGetGeometry(box, &bx, &by, NULL, NULL); + pixt = pixClipRectangle(pixd, box, NULL); + } else { + pixt = pixClone(pixd); + } + + /* Multiply each pixel in pixt by the color */ + extractRGBValues(color, &red, &green, &blue); + frval = (1. / 255.) * red; + fgval = (1. / 255.) * green; + fbval = (1. / 255.) * blue; + data = pixGetData(pixt); + wpl = pixGetWpl(pixt); + pixGetDimensions(pixt, &w, &h, NULL); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + nrval = (l_int32)(frval * rval + 0.5); + ngval = (l_int32)(fgval * gval + 0.5); + nbval = (l_int32)(fbval * bval + 0.5); + composeRGBPixel(nrval, ngval, nbval, line + j); + } + } + + /* Replace */ + if (box) + pixRasterop(pixd, bx, by, w, h, PIX_SRC, pixt, 0, 0); + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Rendering with alpha blending over a uniform background * + *---------------------------------------------------------------------*/ +/*! + * \brief pixAlphaBlendUniform() + * + * \param[in] pixs 32 bpp rgba, with alpha + * \param[in] color 32 bit color in 0xrrggbb00 format + * \return pixd 32 bpp rgb: pixs blended over uniform color %color, + * a clone of pixs if no alpha, and null on error + * + *
+ * Notes:
+ *      (1) This is a convenience function that renders 32 bpp RGBA images
+ *          (with an alpha channel) over a uniform background of
+ *          value %color.  To render over a white background,
+ *          use %color = 0xffffff00.  The result is an RGB image.
+ *      (2) If pixs does not have an alpha channel, it returns a clone
+ *          of pixs.
+ * 
+ */ +PIX * +pixAlphaBlendUniform(PIX *pixs, + l_uint32 color) +{ +PIX *pixt, *pixd; + + PROCNAME("pixAlphaBlendUniform"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (pixGetSpp(pixs) != 4) { + L_WARNING("no alpha channel; returning clone\n", procName); + return pixClone(pixs); + } + + pixt = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixt, color); + pixSetSpp(pixt, 3); /* not required */ + pixd = pixBlendWithGrayMask(pixt, pixs, NULL, 0, 0); + + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Adding an alpha layer for blending * + *---------------------------------------------------------------------*/ +/*! + * \brief pixAddAlphaToBlend() + * + * \param[in] pixs any depth + * \param[in] fract fade fraction in the alpha component + * \param[in] invert 1 to photometrically invert pixs + * \return pixd 32 bpp with alpha, or null on error + * + *
+ * Notes:
+ *      (1) This is a simple alpha layer generator, where typically white has
+ *          maximum transparency and black has minimum.
+ *      (2) If %invert == 1, generate the same alpha layer but invert
+ *          the input image photometrically.  This is useful for blending
+ *          over dark images, where you want dark regions in pixs, such
+ *          as text, to be lighter in the blended image.
+ *      (3) The fade %fract gives the minimum transparency (i.e.,
+ *          maximum opacity).  A small fraction is useful for adding
+ *          a watermark to an image.
+ *      (4) If pixs has a colormap, it is removed to rgb.
+ *      (5) If pixs already has an alpha layer, it is overwritten.
+ * 
+ */ +PIX * +pixAddAlphaToBlend(PIX *pixs, + l_float32 fract, + l_int32 invert) +{ +PIX *pixd, *pix1, *pix2; + + PROCNAME("pixAddAlphaToBlend"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (fract < 0.0 || fract > 1.0) + return (PIX *)ERROR_PTR("invalid fract", procName, NULL); + + /* Convert to 32 bpp */ + if (pixGetColormap(pixs)) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pix1 = pixClone(pixs); + pixd = pixConvertTo32(pix1); /* new */ + + /* Use an inverted image if this will be blended with a dark image */ + if (invert) pixInvert(pixd, pixd); + + /* Generate alpha layer */ + pix2 = pixConvertTo8(pix1, 0); /* new */ + pixInvert(pix2, pix2); + pixMultConstantGray(pix2, fract); + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + + +/*---------------------------------------------------------------------* + * Setting a transparent alpha component over a white background * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSetAlphaOverWhite() + * + * \param[in] pixs colormapped or 32 bpp rgb; no alpha + * \return pixd new pix with meaningful alpha component, + * or null on error + * + *
+ * Notes:
+ *      (1) The generated alpha component is transparent over white
+ *          (background) pixels in pixs, and quickly grades to opaque
+ *          away from the transparent parts.  This is a cheap and
+ *          dirty alpha generator.  The 2 pixel gradation is useful
+ *          to blur the boundary between the transparent region
+ *          (that will render entirely from a backing image) and
+ *          the remainder which renders from pixs.
+ *      (2) All alpha component bits in pixs are overwritten.
+ * 
+ */ +PIX * +pixSetAlphaOverWhite(PIX *pixs) +{ +PIX *pixd, *pix1, *pix2, *pix3, *pix4; + + PROCNAME("pixSetAlphaOverWhite"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!(pixGetDepth(pixs) == 32 || pixGetColormap(pixs))) + return (PIX *)ERROR_PTR("pixs not 32 bpp or cmapped", procName, NULL); + + /* Remove colormap if it exists; otherwise copy */ + pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_TO_FULL_COLOR, L_COPY); + + /* Generate a 1 bpp image where a white pixel in pixd is 0. + * In the comments below, a "white" pixel refers to pixd. + * pix1 is rgb, pix2 is 8 bpp gray, pix3 is 1 bpp. */ + pix1 = pixInvert(NULL, pixd); /* send white (255) to 0 for each sample */ + pix2 = pixConvertRGBToGrayMinMax(pix1, L_CHOOSE_MAX); /* 0 if white */ + pix3 = pixThresholdToBinary(pix2, 1); /* sets white pixels to 1 */ + pixInvert(pix3, pix3); /* sets white pixels to 0 */ + + /* Generate the alpha component using the distance transform, + * which measures the distance to the nearest bg (0) pixel in pix3. + * After multiplying by 128, its value is 0 (transparent) + * over white pixels, and goes to opaque (255) two pixels away + * from the nearest white pixel. */ + pix4 = pixDistanceFunction(pix3, 8, 8, L_BOUNDARY_FG); + pixMultConstantGray(pix4, 128.0); + pixSetRGBComponent(pixd, pix4, L_ALPHA_CHANNEL); + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Fading from the edge * + *---------------------------------------------------------------------*/ +/*! + * \brief pixLinearEdgeFade() + * + * \param[in] pixs 8 or 32 bpp; no colormap + * \param[in] dir L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT + * \param[in] fadeto L_BLEND_TO_WHITE, L_BLEND_TO_BLACK + * \param[in] distfract fraction of width or height over which fading occurs + * \param[in] maxfade fraction of fading at the edge, <= 1.0 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation.
+ *      (2) Maximum fading fraction %maxfade occurs at the edge of the image,
+ *          and the fraction goes to 0 at the fractional distance %distfract
+ *          from the edge.  %maxfade must be in [0, 1].
+ *      (3) %distrfact must be in [0, 1], and typically it would be <= 0.5.
+ * 
+ */ +l_ok +pixLinearEdgeFade(PIX *pixs, + l_int32 dir, + l_int32 fadeto, + l_float32 distfract, + l_float32 maxfade) +{ +l_int32 i, j, w, h, d, wpl, xmin, ymin, range, val, rval, gval, bval; +l_float32 slope, limit, del; +l_uint32 *data, *line; + + PROCNAME("pixLinearEdgeFade"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetColormap(pixs) != NULL) + return ERROR_INT("pixs has a colormap", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32) + return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); + if (dir != L_FROM_LEFT && dir != L_FROM_RIGHT && + dir != L_FROM_TOP && dir != L_FROM_BOT) + return ERROR_INT("invalid fade direction from edge", procName, 1); + if (fadeto != L_BLEND_TO_WHITE && fadeto != L_BLEND_TO_BLACK) + return ERROR_INT("invalid fadeto photometry", procName, 1); + if (maxfade <= 0) return 0; + if (maxfade > 1.0) + return ERROR_INT("invalid maxfade", procName, 1); + if (distfract <= 0 || distfract * L_MIN(w, h) < 1.0) { + L_INFO("distfract is too small\n", procName); + return 0; + } + if (distfract > 1.0) + return ERROR_INT("invalid distfract", procName, 1); + + /* Set up parameters */ + if (dir == L_FROM_LEFT) { + range = (l_int32)(distfract * w); + xmin = 0; + slope = maxfade / (l_float32)range; + } else if (dir == L_FROM_RIGHT) { + range = (l_int32)(distfract * w); + xmin = w - range; + slope = maxfade / (l_float32)range; + } else if (dir == L_FROM_TOP) { + range = (l_int32)(distfract * h); + ymin = 0; + slope = maxfade / (l_float32)range; + } else if (dir == L_FROM_BOT) { + range = (l_int32)(distfract * h); + ymin = h - range; + slope = maxfade / (l_float32)range; + } + + limit = (fadeto == L_BLEND_TO_WHITE) ? 255.0 : 0.0; + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + if (dir == L_FROM_LEFT || dir == L_FROM_RIGHT) { + for (j = 0; j < range; j++) { + del = (dir == L_FROM_LEFT) ? maxfade - slope * j + : maxfade - slope * (range - j); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (d == 8) { + val = GET_DATA_BYTE(line, xmin + j); + val += (limit - val) * del + 0.5; + SET_DATA_BYTE(line, xmin + j, val); + } else { /* rgb */ + extractRGBValues(*(line + xmin + j), &rval, &gval, &bval); + rval += (limit - rval) * del + 0.5; + gval += (limit - gval) * del + 0.5; + bval += (limit - bval) * del + 0.5; + composeRGBPixel(rval, gval, bval, line + xmin + j); + } + } + } + } else { /* dir == L_FROM_TOP || L_FROM_BOT */ + for (i = 0; i < range; i++) { + del = (dir == L_FROM_TOP) ? maxfade - slope * i + : maxfade - slope * (range - i); + line = data + (ymin + i) * wpl; + for (j = 0; j < w; j++) { + if (d == 8) { + val = GET_DATA_BYTE(line, j); + val += (limit - val) * del + 0.5; + SET_DATA_BYTE(line, j, val); + } else { /* rgb */ + extractRGBValues(*(line + j), &rval, &gval, &bval); + rval += (limit - rval) * del + 0.5; + gval += (limit - gval) * del + 0.5; + bval += (limit - bval) * del + 0.5; + composeRGBPixel(rval, gval, bval, line + j); + } + } + } + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/bmf.c b/3rdparty/hgOCR/leptonica/bmf.c new file mode 100644 index 00000000..5c522dca --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmf.c @@ -0,0 +1,874 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bmf.c + *
+ *
+ *   Acquisition and generation of bitmap fonts.
+ *
+ *       L_BMF           *bmfCreate()
+ *       L_BMF           *bmfDestroy()
+ *
+ *       PIX             *bmfGetPix()
+ *       l_int32          bmfGetWidth()
+ *       l_int32          bmfGetBaseline()
+ *
+ *       PIXA            *pixaGetFont()
+ *       l_int32          pixaSaveFont()
+ *       static PIXA     *pixaGenerateFontFromFile()
+ *       static PIXA     *pixaGenerateFontFromString()
+ *       static PIXA     *pixaGenerateFont()
+ *       static l_int32   pixGetTextBaseline()
+ *       static l_int32   bmfMakeAsciiTables()
+ *
+ *   This is not a very general utility, because it only uses bitmap
+ *   representations of a single font, Palatino-Roman, with the
+ *   normal style.  It uses bitmaps generated for nine sizes, from
+ *   4 to 20 pts, rendered at 300 ppi.  Generalization to different
+ *   fonts, styles and sizes is straightforward.
+ *
+ *   I chose Palatino-Roman is because I like it.
+ *   The input font images were generated from a set of small
+ *   PostScript files, such as chars-12.ps, which were rendered
+ *   into the inputfont[] bitmap files using GhostScript.  See, for
+ *   example, the bash script prog/ps2tiff, which will "rip" a
+ *   PostScript file into a set of ccitt-g4 compressed tiff files.
+ *
+ *   The set of ascii characters from 32 through 126 are the 95
+ *   printable ascii chars.  Palatino-Roman is missing char 92, '\'.
+ *   I have substituted an LR flip of '/', char 47, for 92, so that
+ *   there are no missing printable chars in this set.  The space is
+ *   char 32, and I have given it a width equal to twice the width of '!'.
+ * 
+ */ + +#include +#include "allheaders.h" +#include "bmfdata.h" + +static const l_float32 VertFractSep = 0.3; + +#ifndef NO_CONSOLE_IO +#define DEBUG_BASELINE 0 +#define DEBUG_CHARS 0 +#define DEBUG_FONT_GEN 0 +#endif /* ~NO_CONSOLE_IO */ + +static PIXA *pixaGenerateFontFromFile(const char *dir, l_int32 fontsize, + l_int32 *pbl0, l_int32 *pbl1, + l_int32 *pbl2); +static PIXA *pixaGenerateFontFromString(l_int32 fontsize, l_int32 *pbl0, + l_int32 *pbl1, l_int32 *pbl2); +static PIXA *pixaGenerateFont(PIX *pixs, l_int32 fontsize, l_int32 *pbl0, + l_int32 *pbl1, l_int32 *pbl2); +static l_int32 pixGetTextBaseline(PIX *pixs, l_int32 *tab8, l_int32 *py); +static l_int32 bmfMakeAsciiTables(L_BMF *bmf); + + +/*---------------------------------------------------------------------*/ +/* Bmf create/destroy */ +/*---------------------------------------------------------------------*/ +/*! + * \brief bmfCreate() + * + * \param[in] dir [optional] directory holding pixa of character set + * \param[in] fontsize 4, 6, 8, ... , 20 + * \return bmf holding the bitmap font and associated information + * + *
+ * Notes:
+ *      (1) If %dir == null, this generates the font bitmaps from a
+ *          compiled string.
+ *      (2) Otherwise, this tries to read a pre-computed pixa file with the
+ *          95 ascii chars in it.  If the file is not found, it then
+ *          attempts to generate the pixa and associated baseline
+ *          data from a tiff image containing all the characters.  If
+ *          that fails, it uses the compiled string.
+ * 
+ */ +L_BMF * +bmfCreate(const char *dir, + l_int32 fontsize) +{ +L_BMF *bmf; +PIXA *pixa; + + PROCNAME("bmfCreate"); + + if (fontsize < 4 || fontsize > 20 || (fontsize % 2)) + return (L_BMF *)ERROR_PTR("fontsize must be in {4, 6, ..., 20}", + procName, NULL); + + bmf = (L_BMF *)LEPT_CALLOC(1, sizeof(L_BMF)); + + if (!dir) { /* Generate from a string */ + pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, + &bmf->baseline2, &bmf->baseline3); + } else { /* Look for the pixa in a directory */ + pixa = pixaGetFont(dir, fontsize, &bmf->baseline1, &bmf->baseline2, + &bmf->baseline3); + if (!pixa) { /* Not found; make it from a file */ + L_INFO("Generating pixa of bitmap fonts from file\n", procName); + pixa = pixaGenerateFontFromFile(dir, fontsize, &bmf->baseline1, + &bmf->baseline2, &bmf->baseline3); + if (!pixa) { /* Not made; make it from a string after all */ + L_ERROR("Failed to make font; use string\n", procName); + pixa = pixaGenerateFontFromString(fontsize, &bmf->baseline1, + &bmf->baseline2, &bmf->baseline3); + } + } + } + + if (!pixa) { + bmfDestroy(&bmf); + return (L_BMF *)ERROR_PTR("font pixa not made", procName, NULL); + } + + bmf->pixa = pixa; + bmf->size = fontsize; + if (dir) bmf->directory = stringNew(dir); + bmfMakeAsciiTables(bmf); + return bmf; +} + + +/*! + * \brief bmfDestroy() + * + * \param[in,out] pbmf will be set to null before returning + * \return void + */ +void +bmfDestroy(L_BMF **pbmf) +{ +L_BMF *bmf; + + PROCNAME("bmfDestroy"); + + if (pbmf == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((bmf = *pbmf) == NULL) + return; + + pixaDestroy(&bmf->pixa); + LEPT_FREE(bmf->directory); + LEPT_FREE(bmf->fonttab); + LEPT_FREE(bmf->baselinetab); + LEPT_FREE(bmf->widthtab); + LEPT_FREE(bmf); + *pbmf = NULL; + return; +} + + +/*---------------------------------------------------------------------*/ +/* Bmf accessors */ +/*---------------------------------------------------------------------*/ +/*! + * \brief bmfGetPix() + * + * \param[in] bmf + * \param[in] chr should be one of the 95 supported printable bitmaps + * \return pix clone of pix in bmf, or NULL on error + */ +PIX * +bmfGetPix(L_BMF *bmf, + char chr) +{ +l_int32 i, index; +PIXA *pixa; + + PROCNAME("bmfGetPix"); + + if ((index = (l_int32)chr) == 10) /* NL */ + return NULL; + if (!bmf) + return (PIX *)ERROR_PTR("bmf not defined", procName, NULL); + + i = bmf->fonttab[index]; + if (i == UNDEF) { + L_ERROR("no bitmap representation for %d\n", procName, index); + return NULL; + } + + if ((pixa = bmf->pixa) == NULL) + return (PIX *)ERROR_PTR("pixa not found", procName, NULL); + + return pixaGetPix(pixa, i, L_CLONE); +} + + +/*! + * \brief bmfGetWidth() + * + * \param[in] bmf + * \param[in] chr should be one of the 95 supported bitmaps + * \param[out] pw character width; -1 if not printable + * \return 0 if OK, 1 on error + */ +l_ok +bmfGetWidth(L_BMF *bmf, + char chr, + l_int32 *pw) +{ +l_int32 i, index; +PIXA *pixa; + + PROCNAME("bmfGetWidth"); + + if (!pw) + return ERROR_INT("&w not defined", procName, 1); + *pw = -1; + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + if ((index = (l_int32)chr) == 10) /* NL */ + return 0; + + i = bmf->fonttab[index]; + if (i == UNDEF) { + L_ERROR("no bitmap representation for %d\n", procName, index); + return 1; + } + + if ((pixa = bmf->pixa) == NULL) + return ERROR_INT("pixa not found", procName, 1); + + return pixaGetPixDimensions(pixa, i, pw, NULL, NULL); +} + + +/*! + * \brief bmfGetBaseline() + * + * \param[in] bmf + * \param[in] chr should be one of the 95 supported bitmaps + * \param[out] pbaseline distance below UL corner of bitmap char + * \return 0 if OK, 1 on error + */ +l_ok +bmfGetBaseline(L_BMF *bmf, + char chr, + l_int32 *pbaseline) +{ +l_int32 bl, index; + + PROCNAME("bmfGetBaseline"); + + if (!pbaseline) + return ERROR_INT("&baseline not defined", procName, 1); + *pbaseline = 0; + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + if ((index = (l_int32)chr) == 10) /* NL */ + return 0; + + bl = bmf->baselinetab[index]; + if (bl == UNDEF) { + L_ERROR("no bitmap representation for %d\n", procName, index); + return 1; + } + + *pbaseline = bl; + return 0; +} + + +/*---------------------------------------------------------------------*/ +/* Font bitmap acquisition and generation */ +/*---------------------------------------------------------------------*/ +/*! + * \brief pixaGetFont() + * + * \param[in] dir directory holding pixa of character set + * \param[in] fontsize 4, 6, 8, ... , 20 + * \param[out] pbl0 baseline of row 1 + * \param[out] pbl1 baseline of row 2 + * \param[out] pbl2 baseline of row 3 + * \return pixa of font bitmaps for 95 characters, or NULL on error + * + *
+ * Notes:
+ *      (1) This reads a pre-computed pixa file with the 95 ascii chars.
+ * 
+ */ +PIXA * +pixaGetFont(const char *dir, + l_int32 fontsize, + l_int32 *pbl0, + l_int32 *pbl1, + l_int32 *pbl2) +{ +char *pathname; +l_int32 fileno; +PIXA *pixa; + + PROCNAME("pixaGetFont"); + + fileno = (fontsize / 2) - 2; + if (fileno < 0 || fileno >= NUM_FONTS) + return (PIXA *)ERROR_PTR("font size invalid", procName, NULL); + if (!pbl0 || !pbl1 || !pbl2) + return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); + *pbl0 = baselines[fileno][0]; + *pbl1 = baselines[fileno][1]; + *pbl2 = baselines[fileno][2]; + + pathname = pathJoin(dir, outputfonts[fileno]); + pixa = pixaRead(pathname); + LEPT_FREE(pathname); + + if (!pixa) + L_WARNING("pixa of char bitmaps not found\n", procName); + return pixa; +} + + +/*! + * \brief pixaSaveFont() + * + * \param[in] indir [optional] directory holding image of character set + * \param[in] outdir directory into which the output pixa file + * will be written + * \param[in] fontsize in pts, at 300 ppi + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This saves a font of a particular size.
+ *      (2) If %indir == null, this generates the font bitmaps from a
+ *          compiled string.
+ *      (3) prog/genfonts calls this function for each of the
+ *          nine font sizes, to generate all the font pixa files.
+ * 
+ */ +l_ok +pixaSaveFont(const char *indir, + const char *outdir, + l_int32 fontsize) +{ +char *pathname; +l_int32 bl1, bl2, bl3; +PIXA *pixa; + + PROCNAME("pixaSaveFont"); + + if (fontsize < 4 || fontsize > 20 || (fontsize % 2)) + return ERROR_INT("fontsize must be in {4, 6, ..., 20}", procName, 1); + + if (!indir) /* Generate from a string */ + pixa = pixaGenerateFontFromString(fontsize, &bl1, &bl2, &bl3); + else /* Generate from an image file */ + pixa = pixaGenerateFontFromFile(indir, fontsize, &bl1, &bl2, &bl3); + if (!pixa) + return ERROR_INT("pixa not made", procName, 1); + + pathname = pathJoin(outdir, outputfonts[(fontsize - 4) / 2]); + pixaWrite(pathname, pixa); + +#if DEBUG_FONT_GEN + L_INFO("Found %d chars in font size %d\n", procName, pixaGetCount(pixa), + fontsize); + L_INFO("Baselines are at: %d, %d, %d\n", procName, bl1, bl2, bl3); +#endif /* DEBUG_FONT_GEN */ + + LEPT_FREE(pathname); + pixaDestroy(&pixa); + return 0; +} + + +/*! + * \brief pixaGenerateFontFromFile() + * + * \param[in] dir directory holding image of character set + * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi + * \param[out] pbl0 baseline of row 1 + * \param[out] pbl1 baseline of row 2 + * \param[out] pbl2 baseline of row 3 + * \return pixa of font bitmaps for 95 characters, or NULL on error + * + * These font generation functions use 9 sets, each with bitmaps + * of 94 ascii characters, all in Palatino-Roman font. + * Each input bitmap has 3 rows of characters. The range of + * ascii values in each row is as follows: + * row 0: 32-57 32 is a space + * row 1: 58-91 92, '\', is not represented in this font + * row 2: 93-126 + * We LR flip the '/' char to generate a bitmap for the missing + * '\' character, so that we have representations of all 95 + * printable chars. + * + * Typically, use pixaGetFont() to generate the character bitmaps + * in memory for a bmf. This will simply access the bitmap files + * in a serialized pixa that were produced in prog/genfonts.c using + * this function. + */ +static PIXA * +pixaGenerateFontFromFile(const char *dir, + l_int32 fontsize, + l_int32 *pbl0, + l_int32 *pbl1, + l_int32 *pbl2) +{ +char *pathname; +l_int32 fileno; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixaGenerateFontFromFile"); + + if (!pbl0 || !pbl1 || !pbl2) + return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); + *pbl0 = *pbl1 = *pbl2 = 0; + if (!dir) + return (PIXA *)ERROR_PTR("dir not defined", procName, NULL); + fileno = (fontsize / 2) - 2; + if (fileno < 0 || fileno >= NUM_FONTS) + return (PIXA *)ERROR_PTR("font size invalid", procName, NULL); + + pathname = pathJoin(dir, inputfonts[fileno]); + pix = pixRead(pathname); + LEPT_FREE(pathname); + if (!pix) { + L_ERROR("pix not found for font size %d\n", procName, fontsize); + return NULL; + } + + pixa = pixaGenerateFont(pix, fontsize, pbl0, pbl1, pbl2); + pixDestroy(&pix); + return pixa; +} + + +/*! + * \brief pixaGenerateFontFromString() + * + * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi + * \param[out] pbl0 baseline of row 1 + * \param[out] pbl1 baseline of row 2 + * \param[out] pbl2 baseline of row 3 + * \return pixa of font bitmaps for 95 characters, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixaGenerateFontFromFile() for details.
+ * 
+ */ +static PIXA * +pixaGenerateFontFromString(l_int32 fontsize, + l_int32 *pbl0, + l_int32 *pbl1, + l_int32 *pbl2) +{ +l_uint8 *data; +l_int32 redsize, nbytes; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixaGenerateFontFromString"); + + if (!pbl0 || !pbl1 || !pbl2) + return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); + *pbl0 = *pbl1 = *pbl2 = 0; + redsize = (fontsize / 2) - 2; + if (redsize < 0 || redsize >= NUM_FONTS) + return (PIXA *)ERROR_PTR("invalid font size", procName, NULL); + + if (fontsize == 4) { + data = decodeBase64(fontdata_4, strlen(fontdata_4), &nbytes); + } else if (fontsize == 6) { + data = decodeBase64(fontdata_6, strlen(fontdata_6), &nbytes); + } else if (fontsize == 8) { + data = decodeBase64(fontdata_8, strlen(fontdata_8), &nbytes); + } else if (fontsize == 10) { + data = decodeBase64(fontdata_10, strlen(fontdata_10), &nbytes); + } else if (fontsize == 12) { + data = decodeBase64(fontdata_12, strlen(fontdata_12), &nbytes); + } else if (fontsize == 14) { + data = decodeBase64(fontdata_14, strlen(fontdata_14), &nbytes); + } else if (fontsize == 16) { + data = decodeBase64(fontdata_16, strlen(fontdata_16), &nbytes); + } else if (fontsize == 18) { + data = decodeBase64(fontdata_18, strlen(fontdata_18), &nbytes); + } else { /* fontsize == 20 */ + data = decodeBase64(fontdata_20, strlen(fontdata_20), &nbytes); + } + if (!data) + return (PIXA *)ERROR_PTR("data not made", procName, NULL); + + pix = pixReadMem(data, nbytes); + LEPT_FREE(data); + if (!pix) + return (PIXA *)ERROR_PTR("pix not made", procName, NULL); + + pixa = pixaGenerateFont(pix, fontsize, pbl0, pbl1, pbl2); + pixDestroy(&pix); + return pixa; +} + + +/*! + * \brief pixaGenerateFont() + * + * \param[in] pixs of 95 characters in 3 rows + * \param[in] fontsize 4, 6, 8, ... , 20, in pts at 300 ppi + * \param[out] pbl0 baseline of row 1 + * \param[out] pbl1 baseline of row 2 + * \param[out] pbl2 baseline of row 3 + * \return pixa of font bitmaps for 95 characters, or NULL on error + * + *
+ * Notes:
+ *      (1) This does all the work.  See pixaGenerateFontFromFile()
+ *          for an overview.
+ *      (2) The pix is for one of the 9 fonts.  %fontsize is only
+ *          used here for debugging.
+ * 
+ */ +static PIXA * +pixaGenerateFont(PIX *pixs, + l_int32 fontsize, + l_int32 *pbl0, + l_int32 *pbl1, + l_int32 *pbl2) +{ +l_int32 i, j, nrows, nrowchars, nchars, h, yval; +l_int32 width, height; +l_int32 baseline[3]; +l_int32 *tab = NULL; +BOX *box, *box1, *box2; +BOXA *boxar, *boxac, *boxacs; +PIX *pix1, *pix2, *pixr, *pixrc, *pixc; +PIXA *pixa; +l_int32 n, w, inrow, top; +l_int32 *ia; +NUMA *na; + + PROCNAME("pixaGenerateFont"); + + if (!pbl0 || !pbl1 || !pbl2) + return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); + *pbl0 = *pbl1 = *pbl2 = 0; + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Locate the 3 rows of characters */ + w = pixGetWidth(pixs); + na = pixCountPixelsByRow(pixs, NULL); + boxar = boxaCreate(0); + n = numaGetCount(na); + ia = numaGetIArray(na); + inrow = 0; + for (i = 0; i < n; i++) { + if (!inrow && ia[i] > 0) { + inrow = 1; + top = i; + } else if (inrow && ia[i] == 0) { + inrow = 0; + box = boxCreate(0, top, w, i - top); + boxaAddBox(boxar, box, L_INSERT); + } + } + LEPT_FREE(ia); + numaDestroy(&na); + nrows = boxaGetCount(boxar); +#if DEBUG_FONT_GEN + L_INFO("For fontsize %s, have %d rows\n", procName, fontsize, nrows); +#endif /* DEBUG_FONT_GEN */ + if (nrows != 3) { + L_INFO("nrows = %d; skipping fontsize %d\n", procName, nrows, fontsize); + boxaDestroy(&boxar); + return (PIXA *)ERROR_PTR("3 rows not generated", procName, NULL); + } + + /* Grab the character images and baseline data */ +#if DEBUG_BASELINE + lept_rmdir("baseline"); + lept_mkdir("baseline"); +#endif /* DEBUG_BASELINE */ + tab = makePixelSumTab8(); + pixa = pixaCreate(95); + for (i = 0; i < nrows; i++) { + box = boxaGetBox(boxar, i, L_CLONE); + pixr = pixClipRectangle(pixs, box, NULL); /* row of chars */ + pixGetTextBaseline(pixr, tab, &yval); + baseline[i] = yval; + +#if DEBUG_BASELINE + L_INFO("Baseline info: row %d, yval = %d, h = %d\n", procName, + i, yval, pixGetHeight(pixr)); + pix1 = pixCopy(NULL, pixr); + pixRenderLine(pix1, 0, yval, pixGetWidth(pix1), yval, 1, + L_FLIP_PIXELS); + if (i == 0 ) + pixWriteDebug("/tmp/baseline/row0.png", pix1, IFF_PNG); + else if (i == 1) + pixWriteDebug("/tmp/baseline/row1.png", pix1, IFF_PNG); + else + pixWriteDebug("/tmp/baseline/row2.png", pix1, IFF_PNG); + pixDestroy(&pix1); +#endif /* DEBUG_BASELINE */ + + boxDestroy(&box); + pixrc = pixCloseSafeBrick(NULL, pixr, 1, 35); + boxac = pixConnComp(pixrc, NULL, 8); + boxacs = boxaSort(boxac, L_SORT_BY_X, L_SORT_INCREASING, NULL); + if (i == 0) { /* consolidate the two components of '"' */ + box1 = boxaGetBox(boxacs, 1, L_CLONE); + box2 = boxaGetBox(boxacs, 2, L_CLONE); + box1->w = box2->x + box2->w - box1->x; /* increase width */ + boxDestroy(&box1); + boxDestroy(&box2); + boxaRemoveBox(boxacs, 2); + } + h = pixGetHeight(pixr); + nrowchars = boxaGetCount(boxacs); + for (j = 0; j < nrowchars; j++) { + box = boxaGetBox(boxacs, j, L_COPY); + if (box->w <= 2 && box->h == 1) { /* skip 1x1, 2x1 components */ + boxDestroy(&box); + continue; + } + box->y = 0; + box->h = h - 1; + pixc = pixClipRectangle(pixr, box, NULL); + boxDestroy(&box); + if (i == 0 && j == 0) /* add a pix for the space; change later */ + pixaAddPix(pixa, pixc, L_COPY); + if (i == 2 && j == 0) /* add a pix for the '\'; change later */ + pixaAddPix(pixa, pixc, L_COPY); + pixaAddPix(pixa, pixc, L_INSERT); + } + pixDestroy(&pixr); + pixDestroy(&pixrc); + boxaDestroy(&boxac); + boxaDestroy(&boxacs); + } + LEPT_FREE(tab); + + nchars = pixaGetCount(pixa); + if (nchars != 95) + return (PIXA *)ERROR_PTR("95 chars not generated", procName, NULL); + + *pbl0 = baseline[0]; + *pbl1 = baseline[1]; + *pbl2 = baseline[2]; + + /* Fix the space character up; it should have no ON pixels, + * and be about twice as wide as the '!' character. */ + pix1 = pixaGetPix(pixa, 0, L_CLONE); + width = 2 * pixGetWidth(pix1); + height = pixGetHeight(pix1); + pixDestroy(&pix1); + pix1 = pixCreate(width, height, 1); + pixaReplacePix(pixa, 0, pix1, NULL); + + /* Fix up the '\' character; use a LR flip of the '/' char */ + pix1 = pixaGetPix(pixa, 15, L_CLONE); + pix2 = pixFlipLR(NULL, pix1); + pixDestroy(&pix1); + pixaReplacePix(pixa, 60, pix2, NULL); + +#if DEBUG_CHARS + pix1 = pixaDisplayTiled(pixa, 1500, 0, 10); + pixDisplay(pix1, 100 * i, 200); + pixDestroy(&pix1); +#endif /* DEBUG_CHARS */ + + boxaDestroy(&boxar); + return pixa; +} + + +/*! + * \brief pixGetTextBaseline() + * + * \param[in] pixs 1 bpp, one textline character set + * \param[in] tab8 [optional] pixel sum table + * \param[out] py baseline value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Method: find the largest difference in pixel sums from one
+ *          raster line to the next one below it.  The baseline is the
+ *          upper raster line for the pair of raster lines that
+ *          maximizes this function.
+ * 
+ */ +static l_int32 +pixGetTextBaseline(PIX *pixs, + l_int32 *tab8, + l_int32 *py) +{ +l_int32 i, h, val1, val2, diff, diffmax, ymax; +l_int32 *tab; +NUMA *na; + + PROCNAME("pixGetTextBaseline"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!py) + return ERROR_INT("&y not defined", procName, 1); + *py = 0; + if (!tab8) + tab = makePixelSumTab8(); + else + tab = tab8; + + na = pixCountPixelsByRow(pixs, tab); + h = numaGetCount(na); + diffmax = 0; + ymax = 0; + for (i = 1; i < h; i++) { + numaGetIValue(na, i - 1, &val1); + numaGetIValue(na, i, &val2); + diff = L_MAX(0, val1 - val2); + if (diff > diffmax) { + diffmax = diff; + ymax = i - 1; /* upper raster line */ + } + } + *py = ymax; + + if (!tab8) + LEPT_FREE(tab); + numaDestroy(&na); + return 0; +} + + +/*! + * \brief bmfMakeAsciiTables + * + * \param[in] bmf + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This makes three tables, each of size 128, as follows:
+ *          ~ fonttab is a table containing the index of the Pix
+ *            that corresponds to each input ascii character;
+ *            it maps (ascii-index) --> Pixa index
+ *          ~ baselinetab is a table containing the baseline offset
+ *            for the Pix that corresponds to each input ascii character;
+ *            it maps (ascii-index) --> baseline offset
+ *          ~ widthtab is a table containing the character width in
+ *            pixels for the Pix that corresponds to that character;
+ *            it maps (ascii-index) --> bitmap width
+ *     (2) This also computes
+ *          ~ lineheight (sum of maximum character extensions above and
+ *                        below the baseline)
+ *          ~ kernwidth (spacing between characters within a word)
+ *          ~ spacewidth (space between words)
+ *          ~ vertlinesep (extra vertical spacing between textlines)
+ *     (3) The baselines apply as follows:
+ *          baseline1   (ascii 32 - 57), ascii 92
+ *          baseline2   (ascii 58 - 91)
+ *          baseline3   (ascii 93 - 126)
+ *     (4) The only array in bmf that is not ascii-based is the
+ *         array of bitmaps in the pixa, which starts at ascii 32.
+ * 
+ */ +static l_int32 +bmfMakeAsciiTables(L_BMF *bmf) +{ +l_int32 i, maxh, height, charwidth, xwidth, kernwidth; +l_int32 *fonttab, *baselinetab, *widthtab; +PIX *pix; + + PROCNAME("bmfMakeAsciiTables"); + + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + + /* First get the fonttab; we use this later for the char widths */ + fonttab = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); + bmf->fonttab = fonttab; + for (i = 0; i < 128; i++) + fonttab[i] = UNDEF; + for (i = 32; i < 127; i++) + fonttab[i] = i - 32; + + baselinetab = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); + bmf->baselinetab = baselinetab; + for (i = 0; i < 128; i++) + baselinetab[i] = UNDEF; + for (i = 32; i <= 57; i++) + baselinetab[i] = bmf->baseline1; + for (i = 58; i <= 91; i++) + baselinetab[i] = bmf->baseline2; + baselinetab[92] = bmf->baseline1; /* the '\' char */ + for (i = 93; i < 127; i++) + baselinetab[i] = bmf->baseline3; + + /* Generate array of character widths; req's fonttab to exist */ + widthtab = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); + bmf->widthtab = widthtab; + for (i = 0; i < 128; i++) + widthtab[i] = UNDEF; + for (i = 32; i < 127; i++) { + bmfGetWidth(bmf, i, &charwidth); + widthtab[i] = charwidth; + } + + /* Get the line height of text characters, from the highest + * ascender to the lowest descender; req's fonttab to exist. */ + pix = bmfGetPix(bmf, 32); + maxh = pixGetHeight(pix); + pixDestroy(&pix); + pix = bmfGetPix(bmf, 58); + height = pixGetHeight(pix); + pixDestroy(&pix); + maxh = L_MAX(maxh, height); + pix = bmfGetPix(bmf, 93); + height = pixGetHeight(pix); + pixDestroy(&pix); + maxh = L_MAX(maxh, height); + bmf->lineheight = maxh; + + /* Get the kern width (distance between characters). + * We let it be the same for all characters in a given + * font size, and scale it linearly with the size; + * req's fonttab to be built first. */ + bmfGetWidth(bmf, 120, &xwidth); + kernwidth = (l_int32)(0.08 * (l_float32)xwidth + 0.5); + bmf->kernwidth = L_MAX(1, kernwidth); + + /* Save the space width (between words) */ + bmfGetWidth(bmf, 32, &charwidth); + bmf->spacewidth = charwidth; + + /* Save the extra vertical space between lines */ + bmf->vertlinesep = (l_int32)(VertFractSep * bmf->lineheight + 0.5); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/bmf.h b/3rdparty/hgOCR/leptonica/bmf.h new file mode 100644 index 00000000..328e2c0d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmf.h @@ -0,0 +1,64 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_BMF_H +#define LEPTONICA_BMF_H + +/*! + * \file bmf.h + * + * Simple data structure to hold bitmap fonts and related data + */ + + /*! Constants for deciding when text block is divided into paragraphs */ +/*! Split Text */ +enum { + SPLIT_ON_LEADING_WHITE = 1, /*!< tab or space at beginning of line */ + SPLIT_ON_BLANK_LINE = 2, /*!< newline with optional white space */ + SPLIT_ON_BOTH = 3 /*!< leading white space or newline */ +}; + + +/*! Data structure to hold bitmap fonts and related data */ +struct L_Bmf +{ + struct Pixa *pixa; /*!< pixa of bitmaps for 93 characters */ + l_int32 size; /*!< font size (in points at 300 ppi) */ + char *directory; /*!< directory containing font bitmaps */ + l_int32 baseline1; /*!< baseline offset for ascii 33 - 57 */ + l_int32 baseline2; /*!< baseline offset for ascii 58 - 91 */ + l_int32 baseline3; /*!< baseline offset for ascii 93 - 126 */ + l_int32 lineheight; /*!< max height of line of chars */ + l_int32 kernwidth; /*!< pixel dist between char bitmaps */ + l_int32 spacewidth; /*!< pixel dist between word bitmaps */ + l_int32 vertlinesep; /*!< extra vertical space between text lines */ + l_int32 *fonttab; /*!< table mapping ascii --> font index */ + l_int32 *baselinetab; /*!< table mapping ascii --> baseline offset */ + l_int32 *widthtab; /*!< table mapping ascii --> char width */ +}; +typedef struct L_Bmf L_BMF; + +#endif /* LEPTONICA_BMF_H */ diff --git a/3rdparty/hgOCR/leptonica/bmfdata.h b/3rdparty/hgOCR/leptonica/bmfdata.h new file mode 100644 index 00000000..30e2b5ad --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmfdata.h @@ -0,0 +1,636 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bmfdata.h + * + *
+ *  This file contains data for constructing the bitmap fonts.
+ *
+ *  The fontdata string holds all 9 sets of bitmap fonts in a base64
+ *  encoding of a pixacomp representation of the tiff compressed images.
+ *  It was generated by prog/genfonts and pasted in.  This allows
+ *  the use of the bitmap fonts for image labelling without accessing
+ *  stored versions of either the tiff images for each set, or the pixa
+ *  of the 95 printable character images that was derived from the tiff image.
+ *
+ *  In use, to get the bmf for a specific font size, from the encoded
+ *  string in this file, call
+ *      bmfCreate(NULL, fontsize);
+ * 
+ */ + +#ifndef LEPTONICA_BMFDATA_H +#define LEPTONICA_BMFDATA_H + +#define NUM_FONTS 9 +static const char *inputfonts[] = {"chars-4.tif", "chars-6.tif", + "chars-8.tif", "chars-10.tif", + "chars-12.tif", "chars-14.tif", + "chars-16.tif", "chars-18.tif", + "chars-20.tif"}; +static const char *outputfonts[] = {"chars-4.pa", "chars-6.pa", + "chars-8.pa", "chars-10.pa", + "chars-12.pa", "chars-14.pa", + "chars-16.pa", "chars-18.pa", + "chars-20.pa"}; +static const l_int32 baselines[NUM_FONTS][3] = {{11, 12, 12}, {18, 18, 18}, + {24, 24, 24}, {30, 30, 30}, + {36, 36, 36}, {42, 42, 42}, + {48, 48, 48}, {54, 54, 54}, + {60, 60, 60}}; + +static const char fontdata_4[] = + "SUkqACYFAAAmoHICP///////////////////////kFcchgc45Bgc45AgcgxBY5DY5DY5Agcg" + "jkM45A8GocgxBA8M45BfCGgchhzOQxZBiNe/CDQRT6RQ+k4QV6BHcgvBBjCC+KoSjQI7wjj/" + "16I+EUPTpV0rI4LilVtAjjyPuR58jg3CRd6dJkcDMCj+v//qlVsMgQPVY6vugih9Lr/8RCF+" + "OqUUK6C/fHFV9RStf8MulG10fKcN6X+lXOBg+GexX71wxSPCf4/+kE0uR5zE0rtfCFg3oIp0" + "R+GF5DSmQaMS/oG1xen0X2wyh8WXwoI46VPt/kNYcf9J4h/pUHB///2H+t+lkCByDj/r9ZBX" + "H1BAtUr7u/IEOQanrS0eByO16tpVaSWtaEVsNiG66WrBgg05wM4bCYNWDCWIiDCER6HGhERE" + "RER3ZHBfXjaSQ7iOP/////////////////////////////////////////////////////+Q" + "JgK95DIDRZAjCDccgRMhn4g5yC9CD0IL+QxhuIfCCYQTC4IJhBiyLBB7J4QX4gvQgxxBehBi" + "yGDkPhdkEw1kPZY5cEHck5BIJOQc9aI+wjE7DL7RdsMu2GXoZehGDYaDCDQaDSCDQdIOGEEX" + "bDLzCLthl5ojzkeL0NMJhNNbVoJ6kclXuggyOGfugnw3vugv/0u+9IN7pBvdJ//brT3VtdLy" + "B4NxyGsOPRnv9R7xx3/9L+EU/3/f4jj/t+3TdDvkFZyC7hYdKkCCKHQI76SW/pD/6XCKdAin" + "29L9L6/9eEUOrD0kv8IIMNKkq/j/zD5h+P4r//99LfBKcDR9utK62NLxEIIhnmGGlpek3Lz/" + "jj5cv/ul7f+EvimH///0l6CENpfrHt/y9l7kr/4RT/f7f+PwRTkG7/tpav26XtrxoVI5/vSx" + "xsP/7ful7fdd1tv/7FRoj//DLgQZgQCFhlYlfv1kx9//28mPx/7ruu3/t9K3pEh/IKzkF3DL" + "g2BENDtBr9Jh4S12H/+3+17GwwltpbZBx0u0unr0v9IMjhrBYYpO0KZmDikMJsYTCDCeE2Gh" + "p6DTdiEE2KCdo8GcNj3pJsJofjiIiIiIiIiI4iIiIiIhhCIiIiIiIr1SMwyQbOkEiGQCvd4i" + "I//////////////////////////////////////////////////////+QVo7IEDkGwchpOQV" + "nIa0ENKCGhyC7kHchocgZschnHIMPtKk7oIP7ulv6f9Yj5DIDaH/3gjjr///+rI4aiIEXngg" + "RZBfCBEWQXsofKggu5DD5Y+Qw5UHghiCoIEYQw5VkCMIO5TkF7shhzOQxZ4IJZxy3IO5nIJZ" + "4IP//1iiPOGd0R+iPQgR3TQIIXZ3/S7BBnezui87MOiPbKHRHqftNNXvTTUjy/9JkcFjTpOk" + "9NsKmFTu+Etppw06VtMjhhO0OLCd3S+rSdIUvyDD+Iha8fQ//+K//3/+D/vbQRT7d9LsjhgI" + "7nH8Ivf/lw0bS/4RT////7f//pfq+lhr6/v/Yf/t//3/+D/sO2NNhpfiP66Xat8L/2//3S0r" + "XIMD/rvUEd9Isf/4Mp5wCDgYBlOzgO0fB3aem2mmnYTtipwCAZQ6DnAXDgynapwk20h/+IiI" + "iIy9ERxEREREZHDLiIiIiIjjj6kNWdP//qP/pMjhq8bSXwojsGkEwmliIiP/////////////" + "/////////////////////////wAQAQ4AAAEDAAEAAACSAwAAAQEDAAEAAAA2AgAAAgEDAAEA" + "AAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAA" + "FQEDAAEAAAABAAAAFgEDAAEAAAA2AgAAFwEEAAEAAAAeBQAAGgEFAAEAAADUBQAAGwEFAAEA" + "AADcBQAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; + +static const char fontdata_6[] = + "SUkqAMoGAAAmoHVf///////////////////////////////IZAUfsgeBdyGdyDjkMgI+QPKC" + "GIO5AhzOgyGiCMcgYtUrIKHohowhschs4hnwgXcgRQhsgguQQXwhov6/QYQI7qgRUUk2QIfV" + "F5hQmmugqCMTCBHj/9F8j9JuknWm7rSbCBFPLtou2sjhlBSOKkE3Qf3+kv9fpcMQaXY9PTwR" + "T6WvpX/0v19aVbeQ0D6X7+v/X//QIQfj6xSS4QLS3xx69IVtL/EQy8CvbSqhq4I7//pJeVnT" + "Dr/+Niloufj9fpJLxalYrDtdr2DGk/etf6CDrkduzQkw21/w2prRfYZcNbj1+kQMQuL03hF5" + "sQRT+CEMMj7pAjuk/5DVDINfr+k9b06Stj+GXgW6pN9/kNsdL/XQg/+nSx/0v20vxSv0v/S3" + "/yDA/19sV/6WkQ0D5DY/6+lkDyf/SX9h65BRBDTdJ/StLILuk2lWkl399U2kw0Thpa0r7S0U" + "A7S20rSVtJL/iGrFMSPJv+qYoEaA+KBA4pikmKCWIiDVCINaQ0KiIiIiIoFhoRfSodbS1xbp" + "Id0hx8f///////////////////////////////////////////////////IHMFnMgTA0hyGQ" + "G45DLcg0jkQfyGQDNxBv5DLcg3QQ2EEHDIEaEHDIaDkMTJzIeZBJkEmTwh5kNmEPhB7ITCGi" + "ZDOghsmQ0IIbJhHUEMzPAh8jYOeIuRsEZFHCZEHBDhdoww1DLm0bOGXGwZccGXHCMDgwQMED" + "BAwQMEi4ZwQdAg2GEEbYYZc2EbYYZcwwjB5dmDgwQMIMJoNbQNqHuRxF6I7YQIN+6BBrDf+E" + "E//pf3oEG9tAg3vC9//126bQWlXh0gyODd+l7fXwv/0u1gio0m90m916x9uu60nXXyB4G7kN" + "tx6JwU9oEU/4944qP/pcEU8EU+37f7f4j/q6q2tpDXhYaShBBDer1XfJD5IdL/0vtf9L9L//" + "ergin9JukvIHk5BiAggw+kn1fSr///9L3r2/fS30of9r1exWqXp4QQYaWl9XH/a2vH+l9/t/" + "6X58mgN//r07dJe04QRDYGGGgvpVeXb/jj5gT8X7r7f+CX6CDD/bp6bXY/xEIIQw16Xq8N/y" + "5ZcvT/Lp/de3/j+2QMd/r/p0l6CDdf0h73//ZF7/w37r99/fuD/vVq9SP3S9hpd+lLj/6444" + "a/9v7r39L0tt/7Xq9b0vDDIbAwQQu2ElKHq/fr3f/2/dfb39/b/V6jjSb1Io/hhiEFbEECFK" + "r/euRR+//28ivxXt913XZBcf/jaevr8geTkCHDDCCIF3bEk9XpN6X7f/7f7+xtpbaW+l2l9K" + "3pfpqGGEErBhJfCTBk4wl+wf/7f9fsMJba7cMJbDSa9JvSX2sPCwxCQYQaFBikIQQwQMMYIG" + "CBggeCBsNCgg3CBhBuGKBA2KBA24hAgbFdOlYIGh+NCIiIiIiIiI4iIiIhxEGCERERERER9L" + "GHfVBF0Tgtg0dSBoDTYk+h40PiP/////////////////////////////////////////////" + "//////5A887IHkOQbLIE8EFaCGvBBmsgosgaDcg3HIbHwaIbIvVVIZTkGHVUtv9IOHRHBU+D" + "g5DJBx//QRTr69fr/+3X+I+v/pa//v/9N0Q2XnshsshsjIaMyGjMhlOQIHycZAhyDUOQy+IZ" + "xzWQUWUOQYc7kGMyGdyTkH41kH4scnZB4JwQxhrIYp/64hF56DCLzBF4aLzQNF8+DyuCguuF" + "Kw/ApXIvMFTCI7FhU0XmgYUL/ap0tow3/6TdN2XCTpB0rVJqJHmHD6BYbNhoDEjzSbDDLhJo" + "NnHSdQ4cMJoMJQ0DpBphVC//x9v/ScMEkwqf9Lpp6dJum18cQwX3V9XXWv/pN9OkKX/9f6X1" + "1/TpdX+6umrDdRSS2yBGFv4iQZu/9D//4r//f/58CP3XI/p7pL9F9peEYv/zAF8NL/hFP///" + "/t/utrrutN6SQYr0F//7Ff+3////g3/11dJ+l+I/+ld7ey4KP+3//fpX5DOOD/3sb8j+6X/9" + "en1+v/b//dLr//Vuo0rY0ib//aphKGYdtAinbLfROC//Yf/8NKGEmwvaUOwvtK3SX/7DPcUG" + "NjhsUEHhBwwg8JuEGEGEHDCDhhiopiCKcIOKeJHTd8JNuh/+IiIiIsubERxEREREZcNKIiIi" + "IiNDj+En/X/IbQdf/+Cj/9Npd6SXq3WLDSrwSEdigkEGCDrEREf/////////////////////" + "///////4AIAIAA4AAAEDAAEAAABBBAAAAQEDAAEAAAA6AgAAAgEDAAEAAAABAAAAAwEDAAEA" + "AAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAAFQEDAAEAAAABAAAA" + "FgEDAAEAAAA6AgAAFwEEAAEAAADBBgAAGgEFAAEAAAB4BwAAGwEFAAEAAACABwAAHAEDAAEA" + "AAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; + +static const char fontdata_8[] = + "SUkqALIIAAAmoHcGf/////////////////////////////////kMgMsfUgeDaOQLjkHHIZAN" + "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" + "jAbFVthw+gsG4qwbbSsGKDYQQcMSPJRSBwd6dPbSfpL/6f6tdXqx1YVf6XTCevem168GYDR9" + "fSutLS/9WxeuqrV/9/wl/7pXXXQ/91p7pXjSW5DRhFH+sLuor///6C//33X4P91bl1pjdJKt" + "hovBr4iQPKn/x/X/F////7NAz/v0tavW9aYaXhG3/+YDM2l/zCf///+3+9e3TvSTeglDFegv" + "//bS/9v//+vw3/q3Wt6pf0PpfV3+xX/t//3635DNv9utb0R9t1X4/+vreyOGZ/2//+uvyGx3" + "/16elvVIjH//Xp3/X/2//3X3//WKjjSeNb/+10rtWyMfX/2//7q0rX6u1d2kraSr/3RdYaTD" + "LdsIv2GvJAZ/+w//2GErCCbCLr2EoNiR161b0l/9g0HI6FBimKg2KCB2CBwwQPBA2wQMEDBA" + "4MEDhhiFFBisETgwITTCg2vCTDaQ//ERERERZg2IjiIiIiIzAa8REREREccfwgg/9f6X+v+Q" + "ZK///0x/+m0sF0q9W0sW6XyGSGkOkI7YSr4rYhAkEGCDrFhCI4//////////////////////" + "///////////8AEAEDgAAAQMAAQAAAP8EAAABAQMAAQAAAFUCAAACAQMAAQAAAAEAAAADAQMA" + "AQAAAAQAAAAGAQMAAQAAAAEAAAARAQQAAQAAAAgAAAASAQMAAQAAAAEAAAAVAQMAAQAAAAEA" + "AAAWAQMAAQAAAFUCAAAXAQQAAQAAAKoIAAAaAQUAAQAAAGAJAAAbAQUAAQAAAGgJAAAcAQMA" + "AQAAAAEAAAAoAQMAAQAAAAIAAAAAAAAAAADAEgAABAAAAMASAAAEAA=="; + +static const char fontdata_10[] = + "SUkqAGwKAAAmoFQGz///////////////////////////5DIBocgZg0PkDwy3JvkFdyB4Qchl" + "DkGB7yB5OnZBQ5J8hmckQ0rBNUyDSOkQWnIZXkMqZBrghs0INDkM/kdkDfsLqqhGYKDEHp0k" + "G0HkFEwoQaaqCcWQzzCMMPXfwg0m0gi89KyCgekkYmCpppYQKgjc0m//0Yy8/16VtP0EGwqN" + "to22ugtBBtJv2vpLdJtJJ1SbTpJKwjnoOgg2swGmFLgiStb3+lXf/69v1bYLpuuR1pLVX//X" + "r/S60mwYorKXH/dfS69J/2vX/9UvYyGU699PXXpa/3//4+l1S2EcXqvXHX1qr/8RIMCP17SS" + "pwggnqvj1XpClpf1+3SWlS2l/v6S+btbr/IKbknv62KH2Fel/VJeEGlTDS/1W9tJKiGL8f/1" + "Sri83qxVr/sQ2K1JBpXel/RAuOFXm29On//YMUk/dhf+qEOuEHQtWG2v+w9GEwZuXj1/Uuw1" + "6bnzaSDtF1/wbSI+Sdx/X9IQ6WPCb0YbYr38MvvCMTVv8gqlyGsR/pX/ukkHaS8gqiMOkk2l" + "f/pfpOlvXSTYa/9/b2/yBO9f9cTQMzuu4/RBSgnHpJe2l+KX6Wv6ST1j//7f/2lpdf/pfkM8" + "el+xVr0/pEMofIZV16+v//9tda/pdZAh1vS+sge4/0kv3fyGbBBVeutK126dLtJLuq+ttJuH" + "+FTV/SOR19dJPSWqr6SX2gyx+ur7S0LbS20n/oJf8PS20mwjeNtf0noINYMJBBwwk2kk2kEF" + "texFJBiExCYXXTWwwkCBrEIEDimGEErDCQILERBgsQwgafFRSDEIRDCEMIMUIYhQWQyAaHER" + "bSrERER/0q90tfukqxbWh3odtLbSxH//////////////////////////////////////////" + "////yBTDMpkFsFhyB4YOQyAboILYFByB4hyB4vkMgCIK4iOQsFWQ07IZxyBEeQyQ1PINNLIZ" + "icEDIMeWcgoBkFy4IGQIIIoZByCDhkHIInkMEEDFCGyhBJkFzggyDcYCDINxgQMgwoIIGRDk" + "EIIp0O0MhjrIPyZDCj0GCD4aOEHEN3CPDDaDTQaapp6bwjxByc2EeIOTmGEcbw1TTT7ppJ1U" + "4B46aPGGmQabJeECIJZDPZEmDNhIM2JQIHBggwQMEDBAwSBAwQNo4DdkCHQIGyCiw2gQNkFF" + "htBB5cZwWGCIMOGCBhBglBggdBA6U2Ca5c2EbDvwbSayCZh8Ogg+/6C329JvbSb3SD777/q3" + "TdQq9INoIN/oL2/9J//S7W9IN9pBvv//tJ720m0tL/SbT3X2/9L/9L+XXSvdK90v//1p0nrS" + "+npuXX0vb66X/9Ll0176b/b///eu++1/yGQxyBwOOk63+++ONV/6X8uu3r+l/iOP2t6uk9Cl" + "4WHqR8e7r6SH/Uf/S+19v3/f/96dGF7q0kvCw0qCBAn6vpff//pe9e39/3pX/a9XTaTql5A9" + "wQ2QEmHWgmKer6X8iPkR1/9L7X30vSS///991bpL1TCCDBpKv76Vb/9f+l719+/W+lD/erXW" + "K0v7wggw0qS9K4YIL////QX3+3/pfpMoBq/a9XTTapfWCCIFy4MNL694g/44+P9fdL2/8Jfn" + "mzoGZ96dX+6S92ggsMNLS9bmyD///i/v9v/P/6BMP+/r22KS8RCBCGGl+teDf84POD82DH79" + "1//5HDL+Gw3+6/a/XhBBhpddK+/9PT//N7/r2/8b9yGpT/q1ek2l9BBuvS6vu9f+yDuRj/+3" + "9r7ff/2D/2r16MLpfT9+kh7/X/xf/t+9e39fW2/71q2qV6XsML+qV//jjkCM/9h/a+36+u2/" + "/9dU3peGDCCbdtalw/2/93/9v3r/f2/b/20r71frwwyGWXBBVbaL8JK/+l9//t/a+33X1//7" + "G+levhh4QIXYqKNFX7fWQR9v/9vIO+9e3uu2ltkND/rHUaTekQw/hhiEE2IpK+l6///7elx+" + "33X+313TXX6X5A9uQUQGGEEQa4tKr9vS/b//b/a9jbS20tvX16dJvS/TChgwgk2Gkr6TDILj" + "4S/Yf/7f/+2ltpfdbaX6Tfr90GwgtsJd4JNhcEtLb//b/r3YaWw0tu0uDBJp9fSX/B4WGeNB" + "NNCEGZkghCCGEGGZlCDCDCDwg2GhhN0GE3YYJBBsMEEEGw4YJBBsV00kw0Gh+1QeE0xCCDBB" + "hBMQkCChBsQggwQYQeEG2FBA8IGCBuGIQQYYoINuIQINr8JWCBr4qIiDCERBhCIgygDw1IiI" + "tCLhghBghEGEIMJrxER+hEaERDiIiPpaB/0g/SIGwCcdJFzOgGgr6jEGvGgamgH2EL4j////" + "//////////////////////////////////////////+QP6EDob+QPBoHIElkDw9kCyyBJBA8" + "F7INVkDYDEZDLjyGVCZBXmCqQZPIaUENEAoKlt5A8sTSfV00/S2/6BwdF3D+Dg//pr6Q/+QW" + "wbj//MKvrtNeC/9JN1/iP//+vr//+k3////9r///+k9ZeECzPy+IZY5BuP5AuOXhHhDKHL4g" + "tOXxBowscg3HLjIGByHHIG9CMci+Qzv/+3BEMyeEGQMUCGQLzyBimgwUgRmRewVNBgqDIZXg" + "qYQsFTIEUyGzAUgucuippgmRLIOcuhDFX/pYhPTChGHCNzROBBuKAXpgoLoLBU0wVMIwwwVN" + "Fzgqow2icEgoYIGCDBYMK0EGEDClxP/7YRtvl20YOgg6CDYVBNaMXfQXovNGK6MUIJt0XbCT" + "WqCDhX336B6apJL/0ug3bpB0nSsGbDZZsNghBsHB9BYNhiE2GIQbSbBsNoJwYkergzYN4P1p" + "9pXXX/q3vTaWrr6V1/pf9at02vTX/t7fTaT+l/9Y/rr0370/6XTT0/fr44/6WnuukKpdkFFk" + "K/pN+9DWv//6C//S/rq/7+XVJum9Kt0DXxEF9V///9f/991+ZgY+6Tf8VrQSww0YwaXkDwOE" + "f/H3X/H////sH/+k2k1dJN6SQYrwjj//Ng1dL/m0////9h/t1/tvpN6SQa9Av//ev/b////w" + "3/rpN6ekrelQ+v//sMJf+3///X4N/3t+lt6X4+l6V33hiF/7f/9+t+D/ulr6L70q////+XBp" + "/7f//XX5BQO/9/TdJNvpER//16d1fS/9v/919//1emONK71r//0rtb1/9h//3Wla/XrHWrxS" + "S//YRdbpsijtourZFfT/9v/9+0E2vrZ3hourW0k26X/7aWgwgmGFYaVsMJJzWBDtPTYaaYTt" + "O20oaTYRhUGnUUxV76V0kF/9ioOXQpigxUNiggbYQOGEDwg3CBggwg4MIHDYaCimIWEHDCCa" + "ah9OrDeP/2ENBoNMIQwhbERxkcMgYqbQTCxDEJpoX8RocfxEREUYE4jiOIiIj/2En/r/IG5d" + "J/1/////H69JtLIH9NJf3S6uq9ISh0CxdL8gt46iO2kl6FbYSCQIMIHWGISCTCbWIiI/////" + "/////////////////////////wAQAQ4AAAEDAAEAAACoBQAAAQEDAAEAAABCAgAAAgEDAAEA" + "AAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAA" + "FQEDAAEAAAABAAAAFgEDAAEAAABCAgAAFwEEAAEAAABkCgAAGgEFAAEAAAAaCwAAGwEFAAEA" + "AAAiCwAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; + +static const char fontdata_12[] = + "SUkqAFAMAAAmoFsNP/////////////////////////////////kMgNpyBoLGQPBocjfIEkED" + "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" + "8RIHgYPv/DC//+v//7/ygDH/dbprVIJYbRuBhLwRmv/x9pf8X//v/7B/6V17vShh4QVBj8I8" + "f/4L6/5tP////Yf7fq2vfTeqQa9Av/5wNS2l/7f///+G/9J66vVK9KgYXpf/+w0v/b///r8G" + "/2+9+26Sf8fX6u/2K/9v/+/W/Iav/6WlaSL71S/H69f7wwv/b//66/D///pb0v//16vouGp/" + "2//3X/yGU7+rdOrGrd9EKP/+vttr6/+3//daTf/36xVJNukkv/66Xe3pf+3///Wv16sfpXGl" + "//aLraTbYRhYZCPp/+3/+2laTYX1u0XWmnV9L/+wl3CbIjsMJbDCXIwG//Yf/7aVoKGEbXus" + "zthLfqm2kl/9iFMwXBhJhhJiFMwzjIMEWQYRBkMEZBghhkEIIYIMRMwwDg2GlDCTELIMaQwS" + "ioqZgY7glB6H/7XL4pimlYVtp3fbV3dp2xCimF6EJ2uq92v/2hoMIMINCGEIbERxDBCIiIhh" + "TeEGsQwmgwhd6EccfsREREIwE4jiOIiIjX+Egf//1f9f8gVq6/6////S1H0vSb8gfo0v90vu" + "v0m4WLrXkFsGsdRHtJL7S2GCCr4rDFEDwUYQyQ0yCCqGlhgqXaxERH//////////////////" + "/////////////////////4AIAIAOAAABAwABAAAAYwYAAAEBAwABAAAAeAIAAAIBAwABAAAA" + "AQAAAAMBAwABAAAABAAAAAYBAwABAAAAAQAAABEBBAABAAAACAAAABIBAwABAAAAAQAAABUB" + "AwABAAAAAQAAABYBAwABAAAAeAIAABcBBAABAAAASAwAABoBBQABAAAA/gwAABsBBQABAAAA" + "Bg0AABwBAwABAAAAAQAAACgBAwABAAAAAgAAAAAAAAAAAMASAAAEAAAAwBIAAAQA"; + +static const char fontdata_14[] = + "SUkqAKINAAAmoCAz/////////////////////////yGQBw/kMgGYcgw5DJBpvIHg1wR3kCuC" + "B4NFhbrIHiwnZAxZFjIafUQ2+BJJshrRkGnyGtBBqmQ05kNqyBcQQ1YINyZBRMhpfhf1CMwz" + "S5hqg9W4aggwoIGCDCWC4QYIPXrwR1BQm6Wkm6pGzYKmn2EFQRsgwjhB/9UjeXg0m1RifVkM" + "t1VBNhUGE1pAtBBtBN//hBYdboJOkk2nVJNgj3R4s8b8JUk6TftfpYfdafV09VbQXCDcEHWX" + "BWCmAIraTf/9eldL0ld1VcLp6bRddKkqff91Vf9fXbDeqtwum0v9L11v/+v+uqSwxR+rx/3S" + "9LS+vfqtf9da7DHr+/pel/79f1/9dKr5Boha9Lr/9L1/a/8fXSqsI/ev/HS9Kkrrv/IZ0n9V" + "aSXYIEU467ePX6j2v+I/tqulSulfX+qX0ldf/e9U6Q9wr1X6pfJ+u2l/kFqyO/tJYr2vr/qv" + "BA9JhpX/XeG0qqtq9f1SS9NIl3DS1/pg8MQlyJWuP/9JfF4QaTFN//EMaVd36/SIZrhNLnCe" + "EGob1/2U4bUJ/cLX/iDXQQb06Ydr0uw6RvZCaePX6V106EwdK2GF38NqQnJOzgE/1/SkcbS2" + "nhBtQjc2JfX6kGrSgjDDW3/r+hDfi3CekEG2v62XmoQTdN/kDgCIKtS/pOl+2qQba/IHCTD0" + "rat//X6Ta/XSuGEl/htaur/0v9et91SbH/+l1evIH0a/pOhJAaf0t/ogtWRY3Wm9v/GutLX/" + "S0sdfpfbS/X9L/0t/r9L9v/pv63r19L8gXH//tL9ddKiDVn9fX19JfbFPXXWkQan+npekv//" + "99df0tLIbHW+vXIHjj11S6bf8hrWQJHp/Sb/rVfS01/rddu/BUH2lpaW2k9JNpJa63pJX3D6" + "6TX9IoZddrf+gvrvS3psIMk7/9N1odpbpOkraQS/70km0mGEcxWvWrpJqwwknDCCbSStJL+o" + "PCW2EmKDXWtUwwkQy06xCINQyKYaWGGEECC2vDEQkgxBMINN/TSsV9bCYhJMUCBYiJBppiGC" + "DC0hxoMIRBghYIMIQwULIZAHDiIvpKIiIj91X7qtfdUvuklXtrS4t0o+lC20h263SxH/////" + "////////////////////////////////////yBlyPyBmCy5A8NUMhkrQgaA6CB4NKCB4ZhyG" + "QBxZCDkHcg8EUcg3cgr35BbB5kGw6kNRQQ1QZAgwQaBogwBkGgGQ0VkPWQxWQxWQxWQShBes" + "g0oINBBDCCDcMhmJyGWrIaichmKwQMhoEyD1kEDIPUQQiPjIMTIaOIL0IKMIEDc8B4WCBggd" + "sMIMMgYZkOCDDQYQaDCDShoNwg7QQMMGEDYYQeGE0GEGg0mGk1uutMIPBnthGYRAzwIGQaMO" + "nIKMPWEZhiQL8DBEMrgYIhldOBlngbcEDZDKgIzEYM8EYRmIyGbhCURwJwZ4C5gFAIGEGCwY" + "QNoEHSr7CMxA03ISYQIgxjkGJ5BiMgvCBB6apqkqtK9AgYbg2gQMPBsIINTAU8FT70/T0G1m" + "A2L5gbRwF34dBB8N/4QT/+gv70E3toJveuv/XT20m6pfSDhBBhp7aT4b/pBV/6Xa3oIN7oIN" + "7aT/+3X7aTpaX02k/ul7f+k//pf+k/aT+v1/+qT1daX/TaML6Xt/6X/6XMJowswnre63vX/7" + "ave2rpaXi6Tffpff///hL/9vSb9Jv1//6/0m168hkA3H0np/r3xxS//S9tL2/f9/xHH/tGF2" + "6ehXwpA/foh7bW/Ue/Uf/S//b0r9K//20vtK0rSS8LDpIEzZ19Vv9f+l9pf+/7//+9e6vpeF" + "hrhHmR/at6r/r/6Xv+3r9L9X+2lq3t1aSXkDyggYgJMHSSCjf+vvIO+Qd//0v0vb6/q9f/79" + "LSbSr00wggw10mtJ9Kt/+v/QXt/t/ev6V//pPtpevqmEEGGlr/eEl//X/0v0vb1fpX6Yf7aT" + "98baSX3ggQYaSSXpPhAv///9L2/2/9L8JSQCr/+vadJL/CCDDS6r7j//+P9L9L//S/CTNYa/" + "3S1dJq+vpoIIg0AQYaWv1yXDZ+OP/0/b/b/wl+ZDIgNP999+6S+00EFhh116vOCB///xf6Xt" + "/5Z/4Jh//pe3el4iEFhhpaql3g3//OAX/ft/t/8L9wb/bSferYpLwghBg0F9aT7f84D5wH//" + "Ob/S9v/H9shr1f/1arpeEEGGvX97f1///t+3///7kFU/7pWr6MJtV4QINpeqST7////7f6Xt" + "9/f2Df9//7r8IPX1xfd6/9kNGn/t+3+39fW2//ulaSTel9+36Xu//7//t/17e/v7b/tpe+k3" + "pfDBf1pf+scchld/7ftr7fr2u7//1ev14MMIJvdUpgGH96/b/+3//919d/71a9U3peGGEE7d" + "yOqSX79e//7ftpe3v/7f/avuqV6+GDINYEEEO2EnCW39/9//t//t91t1t/09aV6vpeGHhArY" + "qKLtL6fSyGd9//28hoftL2/X12yDd69bX/Sb0iGx/DDwQTYaYSW3rel/f/7f7/t7dbdf/f8b" + "1V9fhhiEE2IpL9N6/t//hv+K9vbXtdv/V6qNX0vyB5QQy7DDCCINsWtPq3pft//sPXf/tLet" + "vS26jd0r1/TBIGGEEm2l3pN6X7f/7f9extpbaW3a9r1Svpfrhgwgk20l9JhkNj4S12H/+3+/" + "u2lsNL+uwk19N6S/dBhhBbDCVN4JMMJYIL9h//t6XXuw0ttLbhhLYYS/Svpf8PBYYMIJO0KY" + "MFQhIUmwYVNNPTbQ03TTdhhBJsMJJtwwkmxVNOraaH9JB4TTFEFAZDGqCDEIIIg0AZBisMUQ" + "z1kPWQxXkNlbBhSC+mQlRDGmGKIZVYZQwiGVWwcQiDTW0/QJQZDKrX2sPCaBgvRTg2BIhA0u" + "GS4KP+/te4YLDEL2Fhr+n/xoREGCERIKgYiJBVDERxERxEODBCDBCIMEIMF04iI+oiNCIkDw" + "1bEREfrCB/WEH60gf0qMMH6VIIGU4GoKfSIEsGKCDV9UQNA9IeNA1JAHnhD4j///////////" + "//////////////////////////////+QPkEDMFW+yGQBPBA8NSAmQZ4IHhqQQ2oIEoDFkGuC" + "GlHkDwN4ILMyB4NM1ILMyB4NMyGrNLYeQPF4g14kFC4UgqQQLwFCpbe9pEGbiB4NfIu5As5N" + "Mg34hr9X+qu6Qd1t3Xb+0vUf//9G1/S+vIGYZj//tr67TXhf/S6/xH1//bX///9L/X///bX/" + "//9Lr///9Jtf/////8l/kNTiHwg2f/+k3LhpGgZclMhqeQaJ5Bp/INU9BkGiCBeMgnZDLgIM" + "IMhmwgyDXMg1QSmQ1KE3IF4JYQUHyGbBBdyBGhJBDXchrcQfCC4ZGggwE//xCDwgwQMIYIPJ" + "OCD0wUF1yCj00wVMEDBUGEMFCgg8gY8h+8hjRSEQE1//9JsJ6YUKEcMMIYRsjqBFMhsOC6BY" + "KmmQ0HTRsgwUINSDB1RgcI6BiCgz4OCBnwSDBBtAgz4OCmARf/thGxvTCOFCODoINhJJrRg3" + "+gvRt0YN6MGwgg3phGxVqkGgvvvbh6dqkv/S6D6MDaCDoIHS9J9BByBjCDfNLIGJhtJyBfEE" + "HSbIKMRgVoIHIKMVJ1IaMIJnTrTaTpaX/7e8Qm0mknSbIN8VnAMCn/S6YpuKem4hB0uJdpcg" + "oz3+9tb//9Lq6DpaTr9XV/hBdV1avTaXQff+61S66pL/9t3r/6b1en/S6aenW/Xof/dW/bSd" + "dL8gpD+lj7aTrr//+l//T02vVj/1ownTaV0KSW2QzMv6b/xr///0F//39ff9r1r060luEDXx" + "ELuq///+l/+vv/B/vTa3TFeqWw0DS8hkBoI/+Gv1/xf/+/r7JAZn7+n2m6Sr0bMMJeQyAXmb" + "P/j7X/v////Z1Av90v19UmHhBJBj8I8P/8iAMXr/nE////9h/3tpN03dJN/QYXoL/+cBs2l/" + "7f///+G/3S/W3XfSSBr0vr/2GEv/b///r8H//W6+kr9ofS//9iF/7f///+Q16f39Poum3pfj" + "6X93+GC/9v/+61vwf90m10lb1S//9L+9mA1v+3///X7/39N6T3SX//07r6X/t//v+/kMt3/d" + "LX0rdVId//11u9vS/9v/+0tK//19jikm+q//16bbX1/9v/9/rX69YqnVtvS//tdL0XWyDj6/" + "+3//aVpNr39our/XFJf/6L+GgmGQo7aW2vf/t//t1DSsIwvpWW8NL6pJt0l/9sJcMJMMKwwl" + "sMLyXAv/2H/+2lDCCYaX2lFMVbTurdKl/7EKDiExTFScNAogRrDIMazQMHUGJAjVsg+pDGpt" + "JOCHUQ0DQGEopiFkCKoYSdqThlfBKD0P/60Y07WGFt/+wuv9iFCDXxCaa3pqnf/8MIWgYQME" + "DCEMEIcRHFghEREQwU5BBhYhhNBhDT4jQ4/iIiIhGw7xHEcRERH/0g/9f4Sf//yB+Bf+l/6X" + "/9f/+ra+PVfXWCf/q2uC6r9NoLpuq9RHHS/IGeOltpV9rtpJehWwwSIHg08EDCDrDEKECDIM" + "tVYYIfaxER/////////////////////////////+ACACAA4AAAEDAAEAAAATBwAAAQEDAAEA" + "AABKAgAAAgEDAAEAAAABAAAAAwEDAAEAAAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAA" + "EgEDAAEAAAABAAAAFQEDAAEAAAABAAAAFgEDAAEAAABKAgAAFwEEAAEAAACZDQAAGgEFAAEA" + "AABQDgAAGwEFAAEAAABYDgAAHAEDAAEAAAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQA" + "AADAEgAABAA="; + +static const char fontdata_16[] = + "SUkqAHAPAAAmoCQP/////////////////////////////////IZJx0QyQzjkM45DJA3vIHhr" + "2RbyB9BA8Gy00/IHg8XZDMsiXkGzqIK/Akk2Q2nSINUyG25DVoQ1aEGSCGUoINjkFEyGPIZU" + "yGrPBVXqwQahNUm4PCBhQQYQMFwQcYIGED131IZoaNsOk6SbVII4bBQgwmlhAtHDDCOEH79Y" + "QNINqnrZBoHrQQbCpp+EFSCDYQQb/1wjkXbSekbfSbT9JsFTR82uEFpOk3/+gsOtqk6STadJ" + "LYR9Z4bhBv0FSTdX9fpYf6SeltP6cILhBtBOswCkpsNFdX666S+m1/p7pJbgtJ6bRddBVVNp" + "X++v69LpK2G164XT1/pa/v79a/69dWGKJ2krY+3ul6XS6V/69f9a0uGP/rX/Wkv//9f9fSps" + "Ol/vWl6Wv7/X//1pa6kGu9f/0vS69f+v8fW6S8Izf6/xr/1uu99yGga/qtaSbBH1HS28fS9I" + "atf8R/dVdJLwlf/6S+q9f/fdVpD9PpL9VXkvqmGl//uqxCW2r//18EDVbSv8gerIl3tpVW7C" + "vS/VKvQekw0tevb7SVrx//pBJcXRH9MNBf/yhQxCrIUZXf/0kvahA1Ypv/qIMMJQmv+l+pBp" + "cIOueG8J0w9f1ZLgyJNVuC/9JCDXhB9NWG2v1sNQjnIWvx0v6uug3EwTSu19cMNIh/SsGcF/" + "/6UuNpdaBB8I5hsMI2lv4N4QaTeP6X6iG1xbptJBBtiF/5DU1SCON07//9But61SDtfkFgal" + "29INrf5BZEyDInS/S1/bpINtJf4dJK1b/0v9JuvrVXBhf+303Tf//6Wu+9U2P/ukv3X6pdaT" + "oSGDZ9JXrogerIl79Orf5A8S6/0v/Wtev9Jb3S/FJ/S1/pXrH//2//v0t69fX/0v20v0tdKi" + "Gl36/X0Qyn/+20nr+tIhpj/v16XS/SX8f6X9L5BQ9dL0lr//7Vr7+k2l6V9euQPDx/pJdNv+" + "Q2o7rS62/VdUsJ//trbD/BSBPiWulf6T0k3SXfrpJdWw3rVPetIhiel3V/0gv+9LdWwgyKP/" + "qlfobaW2k6STapa9XpJXTDCH/XulrDSuwk3S6QS3pYelthJibabS10m0kGsMIJOwk2ltpBBd" + "LyjggkgxCaDX9PtpEMwGsUQ0xDEJsJJMNBBBbXgxFYYTCYT/tbFfC4TELDFEMueIiQa0JCGC" + "Bq6FIUgwhEGCEMIMIQwUFkMk3ERdaxEREf60vbVL/qkvbSX9+ku7SS8W0qHekttIdtLbS3ax" + "H//////////////////////////////////////8gMBZD1yBoDQ5A8GXQhkg31IGgFAZA8G0" + "MgeGsQQyQ2oIG45AkvyC2GvMgqoTIa6QhtBCGgbINQqQYFCDWoIbBBBBBDAghgQQwIIOgguI" + "INYZDTIIYIIGKgREA0EwDYRANBMBqgyGgoIYGEMVEHrIY0IYqyC+hAiZBvMhg5DL4gQLMzA8" + "PBAyGsn4MIHIqGZoED//9bwQcGCDgwgf/64J9pcLCYQOyG0kBGgeQboIQgg1AZBQYCMweQLz" + "IGJkMuZDLmQy5o+GWZgqOZgYZDNxHwoZBpORaI+FDINJyKdHhNENlCBjAZoBgEDNAzyGzNHA" + "zuv7CNBA1Z8I0CB2CIMHZ4GEzwLwgQO00001CadJtoIIGHBA2EEDDYIG0EDzYc+HtNNU1dEC" + "9EgdJmwUL5smEfBh24NhIO4N4fDoIP/6Xe+gg27aCDe2k01u+364eg3wkvQQbQQYfugnww9/" + "Sa/9L1vSb20m90n//p/tJ0v+nQTa7aTW3/pP/6Xfek3uk3tpfX7/dNq3Wl+2kG79L2/9L/9L" + "1vSb7Sb///tK1V6tJUvS0nRhd0vf/S//CXcwswnpPuk+6X///tpOlpfugm+/r2/9L/9LmFX3" + "6b+m/3/9unutJv68dbS/X28cV//S+69vW/W/X//XRhdv0tfIZAaQ5A8Ufp9/r/6//QXuv30/" + "q/4jj7/2raTdCl4WHpEH5tb6Ue/Uf/S+69vX+v/+6tf0nVLwsOlBM3dP9b/X/pe6+39/3//q" + "9PTdWkl4WDWkeb/vSX/X/0vuvb1fpX0r/br79XqvIHhYIZdhWHWEE6TaT//kF3yC7//pe6+/" + "XrX//rpatpWkvhNMIIMNUko/vS9v/r/0vuvv7670r/er3punVL7UEEGHXvpegq////S9/2//" + "/ph/3ut+k3SX9hAgw0tKvfCS//r/6X2l7er6SvpQ/9enVjtKvXCCDDSSS9bhggX///+l7/t/" + "6X4SZ1BW+3X/T6++EEQaBMMNL/p4h/668f6C+0vf/S/CTIgGz+ut01aSX00EFhg0tV+4P+OP" + "/0/f+/8JfmIYP96un23SS9poILDDS6rSeeCB///xf6Xt/5ZH8Ew/73XXvS8RCCwYaX6XeDf/" + "88GX+H7f7f+wX7hh/69XVsVXgghDDrX0vb/ngfPA//57f6+3/j+2Q2hH717+6+EEGGl0l77f" + "++//7ft17f/+2QV9f7W19PS8IEGHX6S3v9b7//t/r//9bkFNH709NqjabSXwg2v/T93///+3" + "7de33Xf2G/7/6S9L4Qer1SQvf1/7IN6v/b/X2//9sP+66V9N9fa79V+/X+9/+37de3v7+2//" + "Xvrevwwv6pX/+OOQzJ/+3+vt+l6W//e2ukk+l4YMIJ7fVGwz/vX7D/+37df9/f2/7pdXpN6X" + "hhhArfRdUqf36///b/X29//b/7/f768MMhqiYIJrbS0Et/f+//7ft17fpb1t/7paWqT6+GHh" + "BC22lpU/vpff/7f6+339r/6X33SV6RBRHhh4QVsUxCJ2t9XrkG77f/7eQUPt17e9b1tkC8V/" + "exv76VeDB4QThhMJa9W+v//9vX/77S7S2/73Sr0m9L8MMQgmxGlf70tdv/9v+K99v39vS3X9" + "ikr6/IHhYINEBhhBEFS7S70m9L9v/9v9/b3S20v/umKrV9fwmChhggSbaVP03hLrv/9v+vY7" + "S7S29L136b0v7UMMILYYSW9WGQLvpft//sPS3/bS20tu67S90r0l/oMMIJNtL8JMMJYS1ww/" + "/2//3YaW2lt2lthWqpX0v1w2gsMMElbwSYMElIOfW2Gt3fbarbXuGwgrYaCu7CVsGEv0r6C+" + "6QPC2DCSpoQgxoQkNWDCqq6txrppuwYSUMMElbgwknFe6tpof1h4TQYhEDGpBisIIMIIIg1C" + "hBgQGIRDQIIIIIYEZBuIDBhSC9TRDjCD1OxCIZohiEQzRDBxCINYwNNNUCTBkMsQvtUHhNBh" + "eiXBVClWGrwZCAX/7r/4YWGFuGFhhf1/44iIMEIiDOoZIaDUGQEQiIuIhwYISCmGIgwQhgvx" + "ER9IRHERIHgrwIiI11hGgGwCzroO+qCB+loP9JGCNQGwGXpECYGYPSCBkuBsBt9Q0qBr0ooS" + "GciHjQMJHQDx6IGobv8IRx///////////////////////////////////////yB49PIZIsED" + "wZIIHgxxA8rIHgqWQVrIEsM2yGnZDUvyGQoIM8yB4KnhSB/MgeDZMhtTCWw8geCTIamBIFIH" + "g2IUgzEEFeCGXAKC1t7rXrpp+v9WpA+4geCryMHIHvk0yBfiCp1b7ql6Q/+vf2vr///o4tel" + "015AzBmj/6tf9prwv/q/64j4X/0rS//r/vf9f//0rX///+m////9df///6b////1dL///+rg" + "iGpTIvkG2ZDS/IaX5DUpkpkNOCGXGQf8hmOR+QTyGnBKZDXoQ04I5kNqhJyGVBLiBc+QanIZ" + "4IZ4ISCOCOCDa5BUwgvxBeCJBFciuQz8Qxf/q4gg8EDBAwgeCB4IPCBgoLrkC/BBhBgoQMED" + "BQgYIGFBQoI1gokMzgWOMg9VkKGQwdY44//qwnphQhhHDDR1BQbJnnpkFCCGdGlkM6EGgyDc" + "hMI4QZBuhNDIEIVGx0ageQqAZoGAQMEoMJuCDBBhL/6unphHChGxwgg2FCCY9P9AvCp6aCDe" + "gwjg1qEg0F9pphbCB0mg1MBhf/Vo2K9GyYQQcIIHScKrWjZMgY8go/QWQUejhsI4bIGPRsmk" + "2QL+jZNAg5BR/ThSBHkMe9PbtpPX/+r0H0EG0g6TpXLx4MtPEJ3fS2IJiE7EJ0m3QINhIO6p" + "Pu/6039aX/pXvEJtLSDpNj8+GWn/S6aenVuKDpcS5pXIF+9tJu1dJ1pL/6em6etf9J6b/QXT" + "TdNpPTa9P//61aXWl/63/q6Wl/1/pdV19/XQ//dft039Vv9Nj03/7evv+l7vuk9Nr9j+6ujC" + "aTpaQqvZBp4gQ/q/6Qpa///hL///S6v/q/7SvSrcINP6t9////9Bf/97/3+2vTdN06SSWw0D" + "S8RIHgrU9f///0v/1//ZQDX/3XVj9IILDDQa+QyAatP15OJ+v+L//39fmoMz91dfTdbegpsg" + "0vIZAZlDd/8ff/3////sH+66tpPqkw8JJBivCPj//KgDF0v+eT////2/+nr3fSb0kga8IF//" + "PBt7S/9v//+vwb/bW1bq7SSfqg16X1/7df+3////hv/r9b9K/wwvS//9hhL/2////8g2Eft+" + "l0rdfq0P/93+GIX/t//39X5BUn/pN7ejG9Uvx9L0v/Bgv/b//61/D/39apNvSX//7v3y4bf/" + "b//f6/IZkP+6Wr0t2qX//1d74S/9v//X2//19+1Sf0iGH//XX1vS/9v/+60v//bWK6Stuv//" + "+m219f/b//f1tfrtetjpvVJf/sLpdq3r/7f/9pXTa/+sbWk2xSX/9owtoJttGFhkHfT/9v/9" + "urQTa9pWSHbRftbS+lX/thBcNJhkOOwwlsMJcqwyv+w//20rCUMI2v9pwwl9aTbS//xXDCCb" + "CsQrY1hra6sGtrrbaUNBMQtbSYpit/VvSBf/ak4ZzCFMbUkBsRDPU2QYrlAOawzyBFbkHrIP" + "WauUA5rCFAbGlEINZAhPDCCpqUBmp2gSg9D/9hdNNBrDC2//YXX+xCnkmF8U01vXTtf/hoaB" + "hAwQaEMEIOIjiyOGQCwCwwgYWIMEGgwh/EccfoREREI2CPEcRxEREa/wgg///hJ/6/0n/X/I" + "HiiX///pdfT+n/+tpePX9fhfX1bSyB49NKvptL7/1IHg1wEYA1CxdKvSEdtJLyBmDU/2l/YS" + "2wkl8eGGEEQPDXcJBBhBpYYhMQgQMgUVwsGaAeCsF7WIiI//////////////////////////" + "////////wAQAQA4AAAEDAAEAAADOBwAAAQEDAAEAAAB3AgAAAgEDAAEAAAABAAAAAwEDAAEA" + "AAAEAAAABgEDAAEAAAABAAAAEQEEAAEAAAAIAAAAEgEDAAEAAAABAAAAFQEDAAEAAAABAAAA" + "FgEDAAEAAAB3AgAAFwEEAAEAAABoDwAAGgEFAAEAAAAeEAAAGwEFAAEAAAAmEAAAHAEDAAEA" + "AAABAAAAKAEDAAEAAAACAAAAAAAAAAAAwBIAAAQAAADAEgAABAA="; + +static const char fontdata_18[] = + "SUkqAEARAAAmoCq/////////////////////////////////+QyXe5DJDVchncgthMyB4NFk" + "TMgeJBA8FKE06yB9ad5DbxIgScCpNkFYdSGnQgrOQbKENqhA3ghmWQz2QVRyBxZDMoQbJ4XU" + "g0YQl4IHhBhUm4OggwoIGCBhYwQZBuJggYIHhf1CJwazjaSdJNpqEGFQaYWgSwmg9d6yGanQ" + "Qb10m+gjxMKEGEGlhAtHhhhHyf/4QaVpIw3rZBpelQQbCpp+EFSCDaCDe/XSOMwbSfSDpJN3" + "1TYKqMyraC0nQTfT/pYaW0gv06dKk4Iz8+K4Qb9BUk2k/+ugt9+npbTXVtBcINwnWYAnTNg3" + "77f1+v1aS+k3dVXC6em0YXSqkrSv99UvX/S8N6q3C6dJ/0tLff/r9/S6pJsN0RB6rH2/S9JL" + "XX/r0v//WwxRfqt6XvXpaX1fv9f+lqlThjrf+tfS//////6pbdf910vrS9X+tdf9LSWsKQ1L" + "pfr/9fuv/f/H+1rcIzH+v8aS9LS17/yGwU96S0klsEf2OvePpfj3X+I/2v0l4Svr/S/SStf3" + "/9JwkwqevXf9L+m6/rvdLihW6vpfpL8jmktpf5A8WyEu+6She16/rSXggekwwgr/XvbXr2E3" + "1/SSXgmpHPYaWv+3tpJNEGt/H1/0viHhBpMU3/SyGoYhaZCg/v/0gSS7oINWtf9ifDVCSC6T" + "/X+Qa9Pnx1Tph3/0yEAkpr3Ba/pQaXBBvTUMNtf9hpI4mD+PX9JpdBvRwnV2F/2HhBOQxhFj" + "9f1mBh/TxBB0gjiDYYRxL1wbSIP6Tdj/X9QgbSxdJtQgg2xX/kNVPhA6t/1/SF/unpINwvel" + "DMbSCOG1b/IM4vX6TaW9OqQOGvogzCmD6TaT/5BSEL+k6X7aSTbSX+G0km+/9f+r/r0nDBf+" + "/TpN/9V1paWRjv6VNj/+kt7deQPBe9f0nQj99XS8geWEJe/6t/61fpf+lv8Kv0qb7S/FX9LX" + "9a6x1/X2/+v0v/pXX/0v20v110t69fr6IZcf/vv9daVENXt+vX/9L7bS6/9SGo//S9Ja/1/s" + "Va6t+ldZAu6V6X1/+l9tf11069//pZA9RX6/T/5BWhddK63p0krSSwnr9JOtsP8hteQLMpv0" + "tLtL1fS7/177Yb1qmvWk3X7aXaSWv/SXTcHr0nTa6IGBDXbSvSeku+r0ttJhhFIBO/XXS1tL" + "tJ0u1CXroPSSdWwj3f/ptJNbQSbaTaSTaQQXXw8JbDCCiE1117DSIZsBBlusMJENSAg4YQTD" + "CSsMIIILetkNQgkmKDQYVr00rFRGrEKJrDOKYqmKCC2FqDEVgwmEGnodqmvhbCYShhAgsREh" + "phpCDBBr0hUMIRBhCGCDCEMKCyGScCItpdCIiI/6S+9VX2uvvSX9qlXvWuraSVYtpUO9Jdqw" + "ttIdtLbS2mFiP///////////////////////////////////+QEwate8gaApwQPArqIZINtZ" + "A1DU1IHgpaEDwZCCC3wQPA4jyC2DJMgpIyG0BkFdQQUCZDUKSBAuQ1CZAuDIYBkFwZDAMguD" + "IYDIMAyGpqQ19CGNCGYnINYMg1DRBUBkGsbBEYDchgQQwwQYLlOGCIBc1A5GAxIEVENnkMqZ" + "BihBp4hoK5OB4KJBbBU1IbYxODBEaDORcGpYIH//63hA4MIHBhBxX/+QXDUJrwsIMIPDYRoC" + "MMGHDhGgOGGCDBBggYQYLDBBuEHDCCMw4YYYRmHYYaPBA3DBBhMEGEwSYYV9112EGpBXoQiA" + "gQNEDFCD6EGs5B6EDByCUCBA5AxQhmUIZtCGbQhmUR8Gg0BSonDMZBrwIEDZBqOQiAgQMMg1" + "nIQgIINZBvQg0YDNAzQgYLIKMdHAb0p8C69MIoCB3QdBB6IaEMIhsthEM9oIGmmmmmqaurpB" + "NsIG0E2wgbSDzAOZg9qnp9yGUdIN1BV84NozBh7hsJB3BvfdBP/6W6tukGHhtIMPDaT/7v6a" + "Qbw2lST8INhAgbT3QT7f+En/9LvvSb2wk3vXX/dfuk/pekHSb+0vDf+k//pevpP9P6T9P/uv" + "aVpf/aCDae6Xt/6X/4QX96Te2k3t//7pd09OlpfTpN/r7f/X/6XazCek36Tfpf/3+rat1per" + "03ML9Vv/r/+lzCza7et7re//+62vaTrpeOk636X3/pf/pfaXt9P9P///dPe9XX/pXT+vt44/" + "/6Xv/et+t+uOP/zCpNpNpCl5DIBocgeDj9Ot/Q/6Q/+l917+/7/j+6Wt+rpJeFh6RDH3T9Lt" + "+v/pe6+3pfpf/9/vt1el4WDrCDNzrev/1/6X3Xt/f99f7q2l1pOlXhYapBH2//qv//9L3X2/" + "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" + "3rmI8DTd/Wm60qS/9Lp4p10nSfVngzQg/6XCYTwg6txTpcQnVx/6e90m66//b7ptL3W+rq/0" + "F003V03Ta9Nf+2utWlrpf+l709Ol/77/hL/3Xp66f/+r1bS61//bHq1/SfXr/S6p69utfHH9" + "906em8UktshpYQ2P6X7+v/+/6Xv7pe2vV/2lzH7S1S/CBw/2/0hr7//9Bf/7/X3/9+k2r1SW" + "2g0vS//1///CX//e/8H+2lpXvVqkltoNLxEgeBORvr/9f+v/6//shhp/991iulBAsGDRww18" + "hkArV+vx9//F//7+vynBo+3WldNN6QMPBAkgwYS8ETv/9el/3////sP/W999JJh6SQYrwjMX" + "/8pAy7f/zyf///+w//dLSt+m9Kg16Bf/z4K+0v/b////w3+3X3vapfpA16X1/7aX/t///1+D" + "f+tq9JvSvpYYXpf/+wwgv/b////wb/bp6tbvSv2h9L+7/Yr/2//7/vyCuR/r/oxvSS/H/1/8" + "ML/2//+tL8H/erSel36/9L6/vBgv/b//f/8P/a/apN2kl//+22r6MArf9v//+n8g1O//TpPS" + "Tb6//+l/4S/9v/+0tb//Vtb7VK70iC8f/r1drel/7f//9f/69R/vpJf//q2+3pf+3/+3Wtr9" + "er7T0k231//YXS7X1/9v//StJtf+1j40rikq//RhbQTDbRhWyBA+n/7f/7faCte0rtG1qnSb" + "df/20uGk3YS4YXv/2//20oaTYRtf7Juwwgt3pXpJf/sILgwgmGQsMMILYYXlIGZ/2H/+2lDB" + "BMMJfDSjiuvSt0l/9irMPFMUxVsUnDTtPTYaaYTtO2GEopiFoM0WEmqTenVukP/6jmEnakgC" + "6IaE7DIMDJIDBThokNCdyC6cgunLGSGCEYHJANxChMLIaBEQqakMGn0CTB6/+wtIMINBrYLf" + "/2F/+wp5INegmmFtNPW//4NDQMIMEDQgwhBsRHEMjhkhAsGEDCxBhBoGEP4jQ4/iIiIhHATi" + "OI4iIiP/hBA3/X+Eg///pf9f6T/r/ZA8OLf//+l16T1///a6/S+k9aj//a5Arq0q9JtL//wY" + "YQLdtKvSEcdV8gaIddtKvTS20kvj2GEkvrYYIIgeCsOEggyB6sIOtiFFEFsGRPE6AZgsLDCY" + "XsFkDYDScREcf////////////////////////////////////4AIAIAADgAAAQMAAQAAAIEI" + "AAABAQMAAQAAAIsCAAACAQMAAQAAAAEAAAADAQMAAQAAAAQAAAAGAQMAAQAAAAEAAAARAQQA" + "AQAAAAgAAAASAQMAAQAAAAEAAAAVAQMAAQAAAAEAAAAWAQMAAQAAAIsCAAAXAQQAAQAAADcR" + "AAAaAQUAAQAAAO4RAAAbAQUAAQAAAPYRAAAcAQMAAQAAAAEAAAAoAQMAAQAAAAIAAAAAAAAA" + "AADAEgAABAAAAMASAAAEAA=="; + +static const char fontdata_20[] = + "SUkqABATAAAmoDgf////////////////////////////+QyQy7IGwGXPIZILLkNA/kDwVrIW" + "3IHgvBA8FqE00sgeC9pp5BWhIFSvIHhpOQPDToQK3ILYb01TTINOELmCJwypBY8FVsgy2kQ1" + "6BSCocEDBSDQBEFfCBcWINJwQeF/qDCDSCD0m4eCBhSDZWEGFwTwQMIPC1VKQa6keMPTpJu8" + "IMKEGmuECwg0fIP3dcIGgg2kE9JukkeGwqDQaWECwj42EEG//wiRhpN6ON0lZDSetBBsFTXw" + "gqQQNoJv/9HnJetpIJ1201SSbCpo0JroLQTdP/+EFh6b1ekm060mwRp5mNwQb8JUrat//1uu" + "kk+laeklhBaBA6QdZsCsKcAwqdK/qukv3/pXuvbgum4TaMLpUq3T7u9KltVaS61bfpcLp6/p" + "Kqp1vr1/1/qlcNpJK2wvfdL0tf3//X/S+qsGMjvrHpuuvS6XS//6//SVWw0c6X/q6+lr/f//" + "/pfXhj1b/9L0uv3+mvX/9JJLyGtiX9PX+uvr+/VePpf7YR9f/XGkvqquv/1X+u0klwUi3pL/" + "/66Wvf+Qbi/uqWklVhGaY/Xj6XpD3X+I/37pVuCT/36SX6Vpf1/0lpQl6vS/qv0lbr/720u0" + "h7hX+/6XkWfVpfv+6pRVbXpL+kvggaqw0r/IHgmELd7aWwldq//SSrwg6qGEtfpW9hoJKu2v" + "S/0kvCakWisNL/Xg8MV5DNp43/9IL4h4QaTEJv/4wwSSkEUf6X6gklrhB0+v+yXBmprW//0Q" + "06l5mK0k1DDv/5JgUIJrvBf+lB1wgbwnTDbX/Yejyh1sdL/tLhPo8TW9fqgw0kmyC/Eu//0k" + "cGH9NxBA2kEGwwjaX6hvIYmleP6X6UEG0tp0n0cbYYS+lyGqESCDSd//+hbXF4TaQSBuK/8h" + "tJ8I8w0m/9L9J673VINsL3+YbSQQbSv8gflZA4Cf6TaW9dJBsNJeQPyjD6Te3//+k/+2lTtf" + "+G0ltW/+kv0rS+vScGC/9+nr/1+utcijv6STY1/6S3t1/SX6vEfuu6/7/q3+QPDZi7fpa/0r" + "/RA8PhC56VN7a/il+lr+tdY/+vt1//pf+krr/6X9/6WulvX/1//+2k9f1pUQ1/30vS6ohmv6" + "X22tr/6RBsH//9dV+v9uv0m/SC110vVf/pfsV/9aTrkDELel6X//9tfpfpXX06/pZA8Hj/SS" + "6d+sgy3uul+39JWklhB//utsN/BSB4b4lddNpeler6X1rpJX3DtcKn/pdbaTpVpJaa1f/TcP" + "+k0m0tItXaX16t0l+vpJOkw0GQg71r7+h2l2k2lVqEv+Hpba2EeRrn/S9patpJthJulbSQX/" + "D0km0mdWmKtfdJtJNYYSuGEmwkraQS/4eEttBMQg09de2kQaUiygwiGuTk5ptKmGEEEFtexE" + "JJimgwv+kmDBLWK2ITBgkrBgkCC2qwYWDBBhBp0hSDWGIXwuExCoMQgQLERIauiQhggwr8Ug" + "whEGCEMEGEIYUFkMkMyMgeC/EMu+qwZwMgMo4B4axwDg8B4axwG0LxEW1SxEREfetL9Uv26p" + "L9JfVvpL20kv+qSxbSUd1S26YW2kO2ltpb1tNYj/////////////////////////////////" + "5AWBqr/IGoNMEMgk5DJBaGEDYGKyB4FlZA8CjQgtgYghkJ/IGYMUIHCLIKgkCKsC5QCHQNcl" + "oaCWBqlIGYVAMFWGCoBcqwXKgCDoDBUBrmoFQ1Bg6g1EQGmVYaREwZCrDSIoCqDIGKEDGhDC" + "ghnGEMAyBCchgvZDRWQUYQzaENEyGlMhsBfBAyCuMWRYFYjYaBKcNPQIiYF//9reEHIuG0HB" + "hA4r//IMEZBcOuaAeGnCDBA+wg4Pwgf//94QcMIOGEH/+uE1tetMIOyDIKBFAPIKCwhpi5DK" + "FQigGEQzCCGaQQzCCGaQQzCEaBmkgFNokBlshpzCJwcMhpaEQgInBwyGloRA0fD8g3IINPkD" + "CCDTMgoRkDE7R8NDqvTCJAQNQzMEYQIhsoGZgQ2aBns0BiEaAXtNNNNIJp6baQIG2aAu0CBt" + "mgLsIIPtNO01YaIGEUQMISnwy9do0Ah3g6CD5BQG5BRbkG9oIO00000gmm0naCCDDcNhBBhu" + "G6DzYYNAxap91oNpN1BV84Kwggw120EHwb38JB//S/vSb20m90nrf+vVtJtKkvQQbQQbvcJN" + "Yb/0E//pdrekG9tIN7aT7/v970/pfToIN+2gvb/pL/9L+9Jv0m/S//tLWm1bS/90m19L2/9J" + "//S770n3Sb2+v/fb/SetL0m0E97r7f+l/+l6za9X3X6//3Xat02lpf6TaNr9e3/1/+lzac2u" + "3pN7pN71//rrTaT1pfT0336Xv/r/+l+v3q/q///71362vXjq6T+vt44pf/pe3Xt9X9X6v/9q" + "2u3Tpa/pX39ff//6C/X29X9X/Ecff5tV0m6FLyGQCm5A8ND9Pv0kO/pD/6XvXv9/3//1902l" + "apeFg9SGKE/tL////0vtfb0n9J//7XSfb3pLwsOqCe+3qvfr/6XvXt/fXfX+9P/pWlXhYapB" + "GZv0vqt/r/0vtfv//1v+1vbSbSdV8Fh1oJtb76X///S969vV9Vfr/f0v6bpLyB4eyDVYSDDS" + "0unSfS/yGeMhnhf/S+19+vqvW/+v9tdJL0GEwggw9JJ//S+///9L3r2/v++r/tdJtXSbWvWw" + "gQYaWsfTelW//X/pfa+3/pfpMP96b+rrpL7TCCDBpaXr4QS////oL+vvV/V9KH/f/sU2kv+E" + "EGGlpV7eCC//1/9L2/2/9L9JmoFn7paTf6pf4QQYaSX6XEwGn//4/0v0vf/S/CCkICn//0mm" + "6S/wQRDTKwYaWl/cgQZn8Lhf/X2/2/8JfkKdlICt+1dJvabSr6aCCww6+tJ4P+OP/0/0vb/y" + "xwQX5tWD/er/v196CCww0tf+Zh3///F+3/f+1/BMP+//bbSS9hBoILDDS6VJJvBh//zMGv9/" + "pe3/wX7Qb/dLSbS40vEQgWGDS//w3///37f7/8F+2Df/v/bVeEEIYaWte3hv6mYEZmBH/5nv" + "9fb/x/bIKYT9tbX09Lwggw0v0kvf/ff/9v3r2//9yCwn/66bSV18EEDDrpf+////9v7X77ru" + "tsgtB///zadJfCDaX9JN73r/3/7fvXt//9h/20tL0ndL4Qer0lj7fr/yGZZBI/9v7X3//22/" + "/fb1vr4Qff6T3//3i//b969vf39sP+2trpJN6XwwX/X/////2/tfb9L0t//rp+vX4YX3SSv7" + "6xxshpI/9h+9e339/b//96t6XhhhBPeqSNgY++v4f/2/v+//9v/bSdLpJvrwwYQVu3LrX/fX" + "u//t+6XvvW9bb//e2qXpeGGEE3elqrf+v3/+39/t9r37/7df+3peGGQ2ysIJp20sIKv2+v//" + "2/0vb+vS7/9dL0vXww8ECG2wk4SW+vX2//w37f7e37+3Xpe+2kk3peGHhBOGKiieU/t9ZDLj" + "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" + "v/b//f1v/7V6er0r9L//XSttb1/9v//rptfr+1jY0ntUq/+197X1/9v/+0rS1/9XqqVtiqX/" + "9bQVtowrZDYPr/7D//b7SYa9pW2jCxu6V6//thG/aTdhLbC9/+3/+6VoK1/yKPYS3rSbaS//" + "hhLhhJhkMOwwlw15AgaP+3//aVpMMEc/aVhOGEuulfS//iFoMIJhhWKthhJYd2urBra922lB" + "ggmK1tJimK/eraSBf/asqIpgwVqGwYJBA2GCDhhA8IG2EDBAwQODBBw2GlFMLCKcDDCVVBu1" + "hJh6H/7Cjm0ExQanQMoUQ2F7IEF50DBLhokNghyGC5DBcEDnQHIgEOgFwYIKE1kNgOUGE0wo" + "OtoKw9f/a6DQaDC2Cw//sF/+xCn0gwvimg1vXW0//hhDQMIMEDQgwhDYiOLLhkhlBYMEDCxD" + "BBoMEO+I44/iIkCThILGBHgTiQyQaOxHIHh+EREa/xFBEM58fH/sIJ/6/wk///pP+l/kDwIK" + "////X/3r+uvStf///8ev0nrC+v9pZA8WvSr0g2l//7aXtpfqJTgi4GwGeP16QjtpJeQNAanX" + "tL+0tsJJehWwwgklX2GEgkmg6wxCBIgZiCCB+DrDChfCyBtDOdkcDMMcMLEREf//////////" + "////////////////////4AIAIAAOAAABAwABAAAATAkAAAEBAwABAAAAcwIAAAIBAwABAAAA" + "AQAAAAMBAwABAAAABAAAAAYBAwABAAAAAQAAABEBBAABAAAACAAAABIBAwABAAAAAQAAABUB" + "AwABAAAAAQAAABYBAwABAAAAcwIAABcBBAABAAAABxMAABoBBQABAAAAvhMAABsBBQABAAAA" + "xhMAABwBAwABAAAAAQAAACgBAwABAAAAAgAAAAAAAAAAAMASAAAEAAAAwBIAAAQA"; + +#endif /* LEPTONICA_BMFDATA_H */ + + diff --git a/3rdparty/hgOCR/leptonica/bmp.h b/3rdparty/hgOCR/leptonica/bmp.h new file mode 100644 index 00000000..568c9901 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmp.h @@ -0,0 +1,124 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_BMP_H +#define LEPTONICA_BMP_H + +/*! + * \file bmp.h + * + *
+ * This file is here to describe the fields in the header of
+ * the BMP file.  These fields are not used directly in Leptonica.
+ * The only thing we use are the sizes of these two headers.
+ * Furthermore, because of potential namespace conflicts with
+ * the typedefs and defined sizes, we have changed the names
+ * to protect anyone who may also need to use the original definitions.
+ * Thanks to J. D. Bryan for pointing out the potential problems when
+ * developing on Win32 compatible systems.
+ * 
+ */ + +/*-------------------------------------------------------------* + * BMP file header * + *-------------------------------------------------------------*/ + +/*! BMP file header + * + * Notes: + * (1) The bfSize field is stored as a 32 bit integer and includes + * the size of the BMP_FileHeader, BMP_InfoHeader, the color + * table (if any), and the size of the DIB bits. + * (2) The bfOffBits field is also stored as a 32 bit integer and + * contains the absolute offset in bytes of the image data + * in this file. Some bmp files have additional data after the + * BMP_InfoHeader and before the color table (if it exists). + * However, enabling reading of these files makes the reader + * vulnerable to various malware attacks. Therefore we do not + * read bmp files with extra data, and require that the size + * of the color table in bytes is + * offset - sizeof(BMP_FileHeader) - sizeof(BMP_InfoHeader) + * (3) Use arrays of l_uint8[] to make an endianness agnostic + * access to the BMP_FileHeader easier. + */ +struct BMP_FileHeader +{ + l_uint8 bfType[2]; /*!< file type; must be "BM" */ + l_uint8 bfSize[4]; /*!< length of the file; + sizeof(BMP_FileHeader) + + sizeof(BMP_InfoHeader) + + size of optional extra data + + size of color table + + size of DIB bits */ + l_uint8 bfReserved1[2]; /*!< don't care (set to 0) */ + l_uint8 bfReserved2[2]; /*!< don't care (set to 0) */ + l_uint8 bfOffBits[4]; /*!< offset from beginning of file */ +}; +typedef struct BMP_FileHeader BMP_FH; + +/*! Number of bytes in a BMP file header */ +#define BMP_FHBYTES sizeof(BMP_FH) + + +/*-------------------------------------------------------------* + * BMP info header * + *-------------------------------------------------------------*/ + +/*! BMP info header */ +struct BMP_InfoHeader +{ + l_int32 biSize; /*!< size of the BMP_InfoHeader struct */ + l_int32 biWidth; /*!< bitmap width in pixels */ + l_int32 biHeight; /*!< bitmap height in pixels */ + l_int16 biPlanes; /*!< number of bitmap planes */ + l_int16 biBitCount; /*!< number of bits per pixel */ + l_int32 biCompression; /*!< compress format (0 == uncompressed) */ + l_int32 biSizeImage; /*!< size of image in bytes */ + l_int32 biXPelsPerMeter; /*!< pixels per meter in x direction */ + l_int32 biYPelsPerMeter; /*!< pixels per meter in y direction */ + l_int32 biClrUsed; /*!< number of colors used */ + l_int32 biClrImportant; /*!< number of important colors used */ +}; +typedef struct BMP_InfoHeader BMP_IH; + +/*! Number of bytes in a BMP info header */ +#define BMP_IHBYTES sizeof(BMP_IH) + + +/*-------------------------------------------------------------* + * Align BMP headers on 4 byte boundaries * + *-------------------------------------------------------------*/ + +/*! BMP_IH is misaligned, causing crashes on some big-endians. + * A packed struct forces alignment. */ +#if defined(__GNUC__) +typedef struct __attribute__((__packed__)) { + BMP_FH bmpfh; + BMP_IH bmpih; +} BMP_HEADER; +#endif + +#endif /* LEPTONICA_BMP_H */ diff --git a/3rdparty/hgOCR/leptonica/bmpio.c b/3rdparty/hgOCR/leptonica/bmpio.c new file mode 100644 index 00000000..04efabb5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmpio.c @@ -0,0 +1,602 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bmpio.c + *
+ *
+ *      Read bmp
+ *           PIX          *pixReadStreamBmp()
+ *           PIX          *pixReadMemBmp()
+ *
+ *      Write bmp
+ *           l_int32       pixWriteStreamBmp()
+ *           l_int32       pixWriteMemBmp()
+ *
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" +#include "bmp.h" + +/* --------------------------------------------*/ +#if USE_BMPIO /* defined in environ.h */ +/* --------------------------------------------*/ + + /* Here we're setting the pixel value 0 to white (255) and the + * value 1 to black (0). This is the convention for grayscale, but + * the opposite of the convention for 1 bpp, where 0 is white + * and 1 is black. Both colormap entries are opaque (alpha = 255) */ +RGBA_QUAD bwmap[2] = { {255,255,255,255}, {0,0,0,255} }; + + /* Colormap size limit */ +static const l_int32 L_MAX_ALLOWED_NUM_COLORS = 256; + + /* Image dimension limits */ +static const l_int32 L_MAX_ALLOWED_WIDTH = 1000000; +static const l_int32 L_MAX_ALLOWED_HEIGHT = 1000000; +static const l_int64 L_MAX_ALLOWED_PIXELS = 400000000LL; +static const l_int32 L_MAX_ALLOWED_RES = 10000000; /* pixels/meter */ + +#ifndef NO_CONSOLE_IO +#define DEBUG 0 +#endif /* ~NO_CONSOLE_IO */ + +/*--------------------------------------------------------------* + * Read bmp * + *--------------------------------------------------------------*/ +/*! + * \brief pixReadStreamBmp() + * + * \param[in] fp file stream opened for read + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) Here are references on the bmp file format:
+ *          http://en.wikipedia.org/wiki/BMP_file_format
+ *          http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html
+ * 
+ */ +PIX * +pixReadStreamBmp(FILE *fp) +{ +l_uint8 *data; +size_t size; +PIX *pix; + + PROCNAME("pixReadStreamBmp"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + + /* Read data from file and decode into Y,U,V arrays */ + rewind(fp); + if ((data = l_binaryReadStream(fp, &size)) == NULL) + return (PIX *)ERROR_PTR("data not read", procName, NULL); + + pix = pixReadMemBmp(data, size); + LEPT_FREE(data); + return pix; +} + + +/*! + * \brief pixReadMemBmp() + * + * \param[in] cdata bmp data + * \param[in] size number of bytes of bmp-formatted data + * \return pix, or NULL on error + */ +PIX * +pixReadMemBmp(const l_uint8 *cdata, + size_t size) +{ +l_uint8 pel[4]; +l_uint8 *cmapBuf, *fdata, *data; +l_int16 bftype, depth, d; +l_int32 offset, width, height, height_neg, xres, yres, compression, imagebytes; +l_int32 cmapbytes, cmapEntries; +l_int32 fdatabpl, extrabytes, pixWpl, pixBpl, i, j, k; +l_uint32 *line, *pixdata, *pword; +l_int64 npixels; +BMP_FH *bmpfh; +#if defined(__GNUC__) +BMP_HEADER *bmph; +#define bmpih (&bmph->bmpih) +#else +BMP_IH *bmpih; +#endif +PIX *pix, *pix1; +PIXCMAP *cmap; + + PROCNAME("pixReadMemBmp"); + + if (!cdata) + return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); + if (size < sizeof(BMP_FH) + sizeof(BMP_IH)) + return (PIX *)ERROR_PTR("bmf size error", procName, NULL); + + /* Verify this is an uncompressed bmp */ + bmpfh = (BMP_FH *)cdata; + bftype = bmpfh->bfType[0] + ((l_int32)bmpfh->bfType[1] << 8); + if (bftype != BMP_ID) + return (PIX *)ERROR_PTR("not bmf format", procName, NULL); +#if defined(__GNUC__) + bmph = (BMP_HEADER *)bmpfh; +#else + bmpih = (BMP_IH *)(cdata + BMP_FHBYTES); +#endif + compression = convertOnBigEnd32(bmpih->biCompression); + if (compression != 0) + return (PIX *)ERROR_PTR("cannot read compressed BMP files", + procName, NULL); + + /* Read the rest of the useful header information */ + offset = bmpfh->bfOffBits[0]; + offset += (l_int32)bmpfh->bfOffBits[1] << 8; + offset += (l_int32)bmpfh->bfOffBits[2] << 16; + offset += (l_uint32)bmpfh->bfOffBits[3] << 24; + width = convertOnBigEnd32(bmpih->biWidth); + height = convertOnBigEnd32(bmpih->biHeight); + depth = convertOnBigEnd16(bmpih->biBitCount); + imagebytes = convertOnBigEnd32(bmpih->biSizeImage); + xres = convertOnBigEnd32(bmpih->biXPelsPerMeter); + yres = convertOnBigEnd32(bmpih->biYPelsPerMeter); + + /* Some sanity checking. We impose limits on the image + * dimensions, resolution and number of pixels. We make sure the + * file is the correct size to hold the amount of uncompressed data + * that is specified in the header. The number of colormap + * entries is checked: it can be either 0 (no cmap) or some + * number between 2 and 256. + * Note that the imagebytes for uncompressed images is either + * 0 or the size of the file data. (The fact that it can + * be 0 is perhaps some legacy glitch). */ + if (width < 1) + return (PIX *)ERROR_PTR("width < 1", procName, NULL); + if (width > L_MAX_ALLOWED_WIDTH) + return (PIX *)ERROR_PTR("width too large", procName, NULL); + if (height == 0 || height < -L_MAX_ALLOWED_HEIGHT || + height > L_MAX_ALLOWED_HEIGHT) + return (PIX *)ERROR_PTR("invalid height", procName, NULL); + if (xres < 0 || xres > L_MAX_ALLOWED_RES || + yres < 0 || yres > L_MAX_ALLOWED_RES) + return (PIX *)ERROR_PTR("invalid resolution", procName, NULL); + height_neg = 0; + if (height < 0) { + height_neg = 1; + height = -height; + } + npixels = 1LL * width * height; + if (npixels > L_MAX_ALLOWED_PIXELS) + return (PIX *)ERROR_PTR("npixels too large", procName, NULL); + if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && + depth != 16 && depth != 24 && depth != 32) + return (PIX *)ERROR_PTR("depth not in {1, 2, 4, 8, 16, 24, 32}", + procName,NULL); + fdatabpl = 4 * ((1LL * width * depth + 31)/32); + if (imagebytes != 0 && imagebytes != fdatabpl * height) + return (PIX *)ERROR_PTR("invalid imagebytes", procName, NULL); + cmapbytes = offset - BMP_FHBYTES - BMP_IHBYTES; + cmapEntries = cmapbytes / sizeof(RGBA_QUAD); + if (cmapEntries < 0 || cmapEntries == 1) + return (PIX *)ERROR_PTR("invalid: cmap size < 0 or 1", procName, NULL); + if (cmapEntries > L_MAX_ALLOWED_NUM_COLORS) + return (PIX *)ERROR_PTR("invalid cmap: too large", procName,NULL); + if (size != 1LL * offset + 1LL * fdatabpl * height) + return (PIX *)ERROR_PTR("size incommensurate with image data", + procName,NULL); + + /* Handle the colormap */ + cmapBuf = NULL; + if (cmapEntries > 0) { + if ((cmapBuf = (l_uint8 *)LEPT_CALLOC(cmapEntries, sizeof(RGBA_QUAD))) + == NULL) + return (PIX *)ERROR_PTR("cmapBuf alloc fail", procName, NULL ); + + /* Read the colormap entry data from bmp. The RGBA_QUAD colormap + * entries are used for both bmp and leptonica colormaps. */ + memcpy(cmapBuf, cdata + BMP_FHBYTES + BMP_IHBYTES, + sizeof(RGBA_QUAD) * cmapEntries); + } + + /* Make a 32 bpp pix if depth is 24 bpp */ + d = (depth == 24) ? 32 : depth; + if ((pix = pixCreate(width, height, d)) == NULL) { + LEPT_FREE(cmapBuf); + return (PIX *)ERROR_PTR( "pix not made", procName, NULL); + } + pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ + pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ + pixSetInputFormat(pix, IFF_BMP); + pixWpl = pixGetWpl(pix); + pixBpl = 4 * pixWpl; + + /* Convert the bmp colormap to a pixcmap */ + cmap = NULL; + if (cmapEntries > 0) { /* import the colormap to the pix cmap */ + cmap = pixcmapCreate(L_MIN(d, 8)); + LEPT_FREE(cmap->array); /* remove generated cmap array */ + cmap->array = (void *)cmapBuf; /* and replace */ + cmap->n = L_MIN(cmapEntries, 256); + for (i = 0; i < cmap->n; i++) /* set all colors opaque */ + pixcmapSetAlpha (cmap, i, 255); + } + pixSetColormap(pix, cmap); + + /* Acquire the image data. Image origin for bmp is at lower right. */ + fdata = (l_uint8 *)cdata + offset; /* start of the bmp image data */ + pixdata = pixGetData(pix); + if (depth != 24) { /* typ. 1 or 8 bpp */ + data = (l_uint8 *)pixdata + pixBpl * (height - 1); + for (i = 0; i < height; i++) { + memcpy(data, fdata, fdatabpl); + fdata += fdatabpl; + data -= pixBpl; + } + } else { /* 24 bpp file; 32 bpp pix + * Note: for bmp files, pel[0] is blue, pel[1] is green, + * and pel[2] is red. This is opposite to the storage + * in the pix, which puts the red pixel in the 0 byte, + * the green in the 1 byte and the blue in the 2 byte. + * Note also that all words are endian flipped after + * assignment on L_LITTLE_ENDIAN platforms. + * + * We can then make these assignments for little endians: + * SET_DATA_BYTE(pword, 1, pel[0]); blue + * SET_DATA_BYTE(pword, 2, pel[1]); green + * SET_DATA_BYTE(pword, 3, pel[2]); red + * This looks like: + * 3 (R) 2 (G) 1 (B) 0 + * |-----------|------------|-----------|-----------| + * and after byte flipping: + * 3 2 (B) 1 (G) 0 (R) + * |-----------|------------|-----------|-----------| + * + * For big endians we set: + * SET_DATA_BYTE(pword, 2, pel[0]); blue + * SET_DATA_BYTE(pword, 1, pel[1]); green + * SET_DATA_BYTE(pword, 0, pel[2]); red + * This looks like: + * 0 (R) 1 (G) 2 (B) 3 + * |-----------|------------|-----------|-----------| + * so in both cases we get the correct assignment in the PIX. + * + * Can we do a platform-independent assignment? + * Yes, set the bytes without using macros: + * *((l_uint8 *)pword) = pel[2]; red + * *((l_uint8 *)pword + 1) = pel[1]; green + * *((l_uint8 *)pword + 2) = pel[0]; blue + * For little endians, before flipping, this looks again like: + * 3 (R) 2 (G) 1 (B) 0 + * |-----------|------------|-----------|-----------| + */ + extrabytes = fdatabpl - 3 * width; + line = pixdata + pixWpl * (height - 1); + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + pword = line + j; + memcpy(&pel, fdata, 3); + fdata += 3; + *((l_uint8 *)pword + COLOR_RED) = pel[2]; + *((l_uint8 *)pword + COLOR_GREEN) = pel[1]; + *((l_uint8 *)pword + COLOR_BLUE) = pel[0]; + /* should not use alpha byte, but for buggy readers, + * set it to opaque */ + *((l_uint8 *)pword + L_ALPHA_CHANNEL) = 255; + } + if (extrabytes) { + for (k = 0; k < extrabytes; k++) { + memcpy(&pel, fdata, 1); + fdata++; + } + } + line -= pixWpl; + } + } + + pixEndianByteSwap(pix); + if (height_neg) + pixFlipTB(pix, pix); + + /* ---------------------------------------------- + * The bmp colormap determines the values of black + * and white pixels for binary in the following way: + * (a) white = 0 [255], black = 1 [0] + * 255, 255, 255, 255, 0, 0, 0, 255 + * (b) black = 0 [0], white = 1 [255] + * 0, 0, 0, 255, 255, 255, 255, 255 + * We have no need for a 1 bpp pix with a colormap! + * Note: the alpha component here is 255 (opaque) + * ---------------------------------------------- */ + if (depth == 1 && cmap) { + pix1 = pixRemoveColormap(pix, REMOVE_CMAP_TO_BINARY); + pixDestroy(&pix); + pix = pix1; /* rename */ + } + + return pix; +} + + +/*--------------------------------------------------------------* + * Write bmp * + *--------------------------------------------------------------*/ +/*! + * \brief pixWriteStreamBmp() + * + * \param[in] fp file stream + * \param[in] pix all depths + * \return 0 if OK, 1 on error + */ +l_ok +pixWriteStreamBmp(FILE *fp, + PIX *pix) +{ +l_uint8 *data; +size_t size, nbytes; + + PROCNAME("pixWriteStreamBmp"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixWriteMemBmp(&data, &size, pix); + rewind(fp); + nbytes = fwrite(data, 1, size, fp); + free(data); + if (nbytes != size) + return ERROR_INT("Write error", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteMemBmp() + * + * \param[out] pfdata data of bmp formatted image + * \param[out] pfsize size of returned data + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) 2 bpp bmp files are not valid in the spec, and are
+ *          written as 8 bpp.
+ *      (2) pix with depth <= 8 bpp are written with a colormap.
+ *          16 bpp gray and 32 bpp rgb pix are written without a colormap.
+ *      (3) The transparency component in an rgb pix is ignored.
+ *          All 32 bpp pix have the bmp alpha component set to 255 (opaque).
+ *      (4) The bmp colormap entries, RGBA_QUAD, are the same as
+ *          the ones used for colormaps in leptonica.  This allows
+ *          a simple memcpy for bmp output.
+ * 
+ */ +l_ok +pixWriteMemBmp(l_uint8 **pfdata, + size_t *pfsize, + PIX *pixs) +{ +l_uint8 pel[4]; +l_uint8 *cta = NULL; /* address of the bmp color table array */ +l_uint8 *fdata, *data, *fmdata; +l_int32 cmaplen; /* number of bytes in the bmp colormap */ +l_int32 ncolors, val, stepsize; +l_int32 w, h, d, fdepth, xres, yres; +l_int32 pixWpl, pixBpl, extrabytes, fBpl, fWpl, i, j, k; +l_int32 heapcm; /* extra copy of cta on the heap ? 1 : 0 */ +l_uint32 offbytes, fimagebytes; +l_uint32 *line, *pword; +size_t fsize; +BMP_FH *bmpfh; +#if defined(__GNUC__) +BMP_HEADER *bmph; +#define bmpih (&bmph->bmpih) +#else +BMP_IH *bmpih; +#endif +PIX *pix; +PIXCMAP *cmap; +RGBA_QUAD *pquad; + + PROCNAME("pixWriteMemBmp"); + + if (pfdata) *pfdata = NULL; + if (pfsize) *pfsize = 0; + if (!pfdata) + return ERROR_INT("&fdata not defined", procName, 1 ); + if (!pfsize) + return ERROR_INT("&fsize not defined", procName, 1 ); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pixGetDimensions(pixs, &w, &h, &d); + if (d == 2) { + L_WARNING("2 bpp files can't be read; converting to 8 bpp\n", procName); + pix = pixConvert2To8(pixs, 0, 85, 170, 255, 1); + d = 8; + } else { + pix = pixCopy(NULL, pixs); + } + fdepth = (d == 32) ? 24 : d; + + /* Resolution is given in pixels/meter */ + xres = (l_int32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); + yres = (l_int32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); + + pixWpl = pixGetWpl(pix); + pixBpl = 4 * pixWpl; + fWpl = (w * fdepth + 31) / 32; + fBpl = 4 * fWpl; + fimagebytes = h * fBpl; + if (fimagebytes > 4LL * L_MAX_ALLOWED_PIXELS) { + pixDestroy(&pix); + return ERROR_INT("image data is too large", procName, 1); + } + + /* If not rgb or 16 bpp, the bmp data is required to have a colormap */ + heapcm = 0; + if (d == 32 || d == 16) { /* 24 bpp rgb or 16 bpp: no colormap */ + ncolors = 0; + cmaplen = 0; + } else if ((cmap = pixGetColormap(pix))) { /* existing colormap */ + ncolors = pixcmapGetCount(cmap); + cmaplen = ncolors * sizeof(RGBA_QUAD); + cta = (l_uint8 *)cmap->array; + } else { /* no existing colormap; d <= 8; make a binary or gray one */ + if (d == 1) { + cmaplen = sizeof(bwmap); + ncolors = 2; + cta = (l_uint8 *)bwmap; + } else { /* d = 2,4,8; use a grayscale output colormap */ + ncolors = 1 << fdepth; + cmaplen = ncolors * sizeof(RGBA_QUAD); + heapcm = 1; + cta = (l_uint8 *)LEPT_CALLOC(cmaplen, 1); + stepsize = 255 / (ncolors - 1); + for (i = 0, val = 0, pquad = (RGBA_QUAD *)cta; + i < ncolors; + i++, val += stepsize, pquad++) { + pquad->blue = pquad->green = pquad->red = val; + pquad->alpha = 255; /* opaque */ + } + } + } + +#if DEBUG + {l_uint8 *pcmptr; + pcmptr = (l_uint8 *)pixGetColormap(pix)->array; + fprintf(stderr, "Pix colormap[0] = %c%c%c%d\n", + pcmptr[0], pcmptr[1], pcmptr[2], pcmptr[3]); + fprintf(stderr, "Pix colormap[1] = %c%c%c%d\n", + pcmptr[4], pcmptr[5], pcmptr[6], pcmptr[7]); + } +#endif /* DEBUG */ + + offbytes = BMP_FHBYTES + BMP_IHBYTES + cmaplen; + fsize = offbytes + fimagebytes; + fdata = (l_uint8 *)LEPT_CALLOC(fsize, 1); + *pfdata = fdata; + *pfsize = fsize; + + /* Write little-endian file header data */ + bmpfh = (BMP_FH *)fdata; + bmpfh->bfType[0] = (l_uint8)(BMP_ID >> 0); + bmpfh->bfType[1] = (l_uint8)(BMP_ID >> 8); + bmpfh->bfSize[0] = (l_uint8)(fsize >> 0); + bmpfh->bfSize[1] = (l_uint8)(fsize >> 8); + bmpfh->bfSize[2] = (l_uint8)(fsize >> 16); + bmpfh->bfSize[3] = (l_uint8)(fsize >> 24); + bmpfh->bfOffBits[0] = (l_uint8)(offbytes >> 0); + bmpfh->bfOffBits[1] = (l_uint8)(offbytes >> 8); + bmpfh->bfOffBits[2] = (l_uint8)(offbytes >> 16); + bmpfh->bfOffBits[3] = (l_uint8)(offbytes >> 24); + + /* Convert to little-endian and write the info header data */ +#if defined(__GNUC__) + bmph = (BMP_HEADER *)bmpfh; +#else + bmpih = (BMP_IH *)(fdata + BMP_FHBYTES); +#endif + bmpih->biSize = convertOnBigEnd32(BMP_IHBYTES); + bmpih->biWidth = convertOnBigEnd32(w); + bmpih->biHeight = convertOnBigEnd32(h); + bmpih->biPlanes = convertOnBigEnd16(1); + bmpih->biBitCount = convertOnBigEnd16(fdepth); + bmpih->biSizeImage = convertOnBigEnd32(fimagebytes); + bmpih->biXPelsPerMeter = convertOnBigEnd32(xres); + bmpih->biYPelsPerMeter = convertOnBigEnd32(yres); + bmpih->biClrUsed = convertOnBigEnd32(ncolors); + bmpih->biClrImportant = convertOnBigEnd32(ncolors); + + /* Copy the colormap data and free the cta if necessary */ + if (ncolors > 0) { + memcpy(fdata + BMP_FHBYTES + BMP_IHBYTES, cta, cmaplen); + if (heapcm) LEPT_FREE(cta); + } + + /* When you write a binary image with a colormap + * that sets BLACK to 0, you must invert the data */ + if (fdepth == 1 && cmap && ((l_uint8 *)(cmap->array))[0] == 0x0) { + pixInvert(pix, pix); + } + + /* An endian byte swap is also required */ + pixEndianByteSwap(pix); + + /* Transfer the image data. Image origin for bmp is at lower right. */ + fmdata = fdata + offbytes; + if (fdepth != 24) { /* typ 1 or 8 bpp */ + data = (l_uint8 *)pixGetData(pix) + pixBpl * (h - 1); + for (i = 0; i < h; i++) { + memcpy(fmdata, data, fBpl); + data -= pixBpl; + fmdata += fBpl; + } + } else { /* 32 bpp pix; 24 bpp file + * See the comments in pixReadStreamBmp() to + * understand the logic behind the pixel ordering below. + * Note that we have again done an endian swap on + * little endian machines before arriving here, so that + * the bytes are ordered on both platforms as: + Red Green Blue -- + |-----------|------------|-----------|-----------| + */ + extrabytes = fBpl - 3 * w; + line = pixGetData(pix) + pixWpl * (h - 1); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pword = line + j; + pel[2] = *((l_uint8 *)pword + COLOR_RED); + pel[1] = *((l_uint8 *)pword + COLOR_GREEN); + pel[0] = *((l_uint8 *)pword + COLOR_BLUE); + memcpy(fmdata, &pel, 3); + fmdata += 3; + } + if (extrabytes) { + for (k = 0; k < extrabytes; k++) { + memcpy(fmdata, &pel, 1); + fmdata++; + } + } + line -= pixWpl; + } + } + + pixDestroy(&pix); + return 0; +} + +/* --------------------------------------------*/ +#endif /* USE_BMPIO */ diff --git a/3rdparty/hgOCR/leptonica/bmpiostub.c b/3rdparty/hgOCR/leptonica/bmpiostub.c new file mode 100644 index 00000000..9a9584ce --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bmpiostub.c @@ -0,0 +1,68 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bmpiostub.c + *
+ *
+ *      Stubs for bmpio.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_BMPIO /* defined in environ.h */ +/* --------------------------------------------*/ + +PIX * pixReadStreamBmp(FILE *fp) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamBmp", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamBmp(FILE *fp, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteStreamBmp", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemBmp(const l_uint8 *cdata, size_t size) +{ + return (PIX *)ERROR_PTR("function not present", "pixReadMemBmp", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemBmp(l_uint8 **pdata, size_t *psize, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteMemBmp", 1); +} + +/* --------------------------------------------*/ +#endif /* !USE_BMPIO */ diff --git a/3rdparty/hgOCR/leptonica/bootnumgen1.c b/3rdparty/hgOCR/leptonica/bootnumgen1.c new file mode 100644 index 00000000..f722645d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bootnumgen1.c @@ -0,0 +1,304 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bootnumgen1.c + *
+ *
+ *   Function for generating prog/recog/digits/bootnum1.pa from an
+ *   encoded, gzipped and serialized string.
+ *
+ *   This was generated using the stringcode utility, slightly edited,
+ *   and then merged into a single file.
+ *
+ *   The code and encoded strings were made using the stringcode utility:
+ *
+ *       L_STRCODE  *strc;
+ *       strc = strcodeCreate(101);   // arbitrary integer
+ *       strcodeGenerate(strc, "recog/digits/bootnum1.pa", "PIXA");
+ *       strcodeFinalize(&strc, ".");
+ *
+ *   The two output files, autogen.101.c and autogen.101.h, were
+ *   then slightly edited and merged into this file.
+ *
+ *   Call this way:
+ *       PIXA  *pixa = l_bootnum_gen1();   (C)
+ *       Pixa  *pixa = l_bootnum_gen1();   (C++)
+ * 
+ */ + +#include +#include "allheaders.h" + +/*---------------------------------------------------------------------*/ +/* Serialized string */ +/*---------------------------------------------------------------------*/ +static const char *l_bootnum1 = + "eJy9nAdUU1kbrs8hkFACCQgYakKTiIChgyAJvdgAG44tVFERQRFR0SSU0AWsgChE0MGxgV1s" + "CaGpIOBYQFEJomNBDaIYNJAbymHmTvz/deJd/3URyTorS98ne+/ve/e3i2LA2sQQwpKITZvX" + "bowhWCvO37IhNGITYWMkIXZtImE2wcraRlHRfeN/+EzoxsSIzeJPkRRHP76ctHIWIXHT+BNz" + "wraJd4qZAfN9lBW1FQEAUPbz9QwS/8aKXzhQ/Bfw9CmFJf6lEOu7bDMA/TkcOs169GG8V3C8" + "x8YNGyJi4gHS2YEbf4gfOvp5ui2SLwoTiEp5GDIXk8DEpGvpu4YnCug8EnYnNQp5FEX9Auox" + "1F3CHeUXJeXzEDa+n/DbAO0HRjh7wNV49D/w85rvecadmjwm2wq2bKVJ2bL7Z92EJduq40uu" + "i/ihCST7G52XIsNFyDGRxl+AHFcCCxWsipDXo1IThQCw/PTUz6tXbNOR0GgNW6Oy+DV1TKPg" + "mcAclkZrt+Eupvjh7AmNjlROLCWZxUhh5IKpHVq4Qk6GXs5HG5LwJVVgxOFzk3k+ctx0PBqz" + "gKQbQ42i0kEVggxwWU155/GZHs8ltNvA1q4y+f32XO//Dku7jf33vtHe5AZ9vwu5fAqTxUhn" + "5aaxDjNYN8CskfMk4V8hAgMu343JQ2EK77JJtxiMGwyGVjKOUsZI4wEYLkoHQK2ewpybuIoh" + "od9WKv3j3/2Udx4zf03/Gi7fh8nKHdOvl3Pv8ph2lKc1dU8aj4wF5XRwux1IFxxIVQhVJQ+y" + "kgcew8VoMfH2wKetGhsKjhpNl9BvJ1Xf0RzTb8OYkQlLv23lkW3nxQ9nQvpfcPilDB4eNxxC" + "FYDeeBxOn95uhWRuRqMHcLhwHLYbFWyCBoFUB9XFelbmdRJq7aUKIuPftlnu53hYau1eFPmZ" + "iB/6QGrZzXwgo0NLn2/jUrUmUVjKG6Ix00Va+k02LjGRghdsvghQ1yOz25LorH4AYZMfl8+6" + "VcBzseGSdzFFXwH1MH11wpytiRIUDrApVCf7vK3WjFJYFPbe+bjRT/pBFI1ioSk3GDzEZgSX" + "m6KMTg8RWGFFG6lRqB5kWXEDVxndgmEIwAA0k0zh96OwSTiiCFf50cO5bW7ZEZFIB1i+xFLm" + "TeS5IxIcjv/Lvu9gdZCoIH5oD8UdNruNTQcU0Wh8MG5kgCQ8GCIw5fJRGdG4XR2kJHqZNhNl" + "h0Z1v8HIzxYigKWJU901PsoMSIh2kqoLjXd4XrtBOyzRjiyiXaH4odO4aI071coAQR7gOGge" + "OIWujrXokL1cpb7n7tLWQ72E5MMtltqC6GV6RN0Ip6Bzp2chzu86kjSE0+jtOPjVTEK3lXQJ" + "VMq+7/RoptxoI7lCvYbQGksv5ZFsPDbbIH64IQcRaGHsF6Bug7jfrKEKmkf7Pk4vPIrcxO5C" + "u7f0oZWFaEwf+NxZozLqTKm7pHr4eVRd/DIYU9/vdQleHoXS/3xIfesIg4d6iUKS5grYfL4H" + "yOXgkeh0xhWtHDlch5sAg7bpbgi4+CEA/UgERmli8UkBbD4dTGUMAh9+gBe+YbCiUhEIWEyz" + "Sa0hakyRpIGfcdXEL/wYTe2MMmNYNJArsJyMmjQ6D/8DZOIpXfRUPNCPT8jQPSbA2LS5eJdd" + "RWOBoyIbEgBcdiQxt5V+vyupFn6OVZ9U22rXFgZLLeQPlo+rtbjLUaBT0J7tMzWp/p0q0bdV" + "Frl0LOkL/0BonJ0Rp2nsgouU3yD/3UnpY5pRzvktpDuEpuP3Xj06EthUk6/faxnGn8+x0dlg" + "Z5hr9vgkPudD49m/ol8hjEBLMwuW4xtJNPjpd7QV9cfQXl/E3YKFBqXfxeNoEXerlekE9VRe" + "aXBwjUy5VRaz3td8xcsSwF9RLYl6yvxm76ar5RuOOsZ96pnLIC4Uti6WWZnyxm/RD9tvrzuf" + "Tmu1qFO821jDyzdVbROc3g5Ym9kRm7fg2iSh4Odkjcmxop/+jA4LCsrJ/pNWmYfiilABSUCW" + "Dr0QTBaB/XgC00Ps4PD0dfoy/S9TyLjdiDgydgBhZR1F7aYXbsYqONDnUqkCoJ4wKBLZALlf" + "KQ+YJ8qcJEng5+spkz3P4u1dbVgkUL5eMkGSyM5nxwK78SRdqmzoEArdKPKIdVZ34COsAs6A" + "lceHKDIeP8TWehfhiIjB4JHV8SMcdhu6oqjAKkB5AJRDIsuGlAMG8CSy2MiKAGDOi5k/nFTc" + "LSSp4OfvXxj9UP6eoNrQIu50JKwsx0vWMmXJTXV/N8NY3znpUb1v2QZg7fUI92S/+b/pbcE6" + "HKUKoktUdjh2Nc1TvZqwdkqOgfZRrdmXQm99XvN1fjZ/cMqH/XU2b+VO9JNkUSv3SSZzK/jZ" + "fDRKEMaoZmlF6MCigrL5pJN9EcCOpTMYLFBOiR73A4VAjmDk0J/xrqRmGlCHIZOEZPn6loAu" + "lbo+rBCjLOKkiPoRX5toAPAY6RQz2HTbUhIAfmb/hc4GZfbgcYDZY7EAS2lfEPFW0eFJbrc8" + "TulRbcCVhlyKn9uDKWrZj4dbz+PsHNWnvDrlv7b24e+9KpcdTDaq/Oj8hna/nf/H+6qaVwk7" + "FZVDNY9u3fbFW2lQ5r2cxTqf5hBJt2gNP/GrTcY4ha2bGbC4oMS/YJxrsbi7sQmj4TswIDL1" + "VG2Up/qpLZ11RhUVRulBZeoLEuJcbVRU/ZqemNR47j4W3Zr8rSXOjKDIjRR+FWy//+7a7EOY" + "c5Ujvy+cyUs2SznB27deEge+E9CcjG5fqyJTYOFATmDepPsVpoOyNNIDUpIghMvvzkNz3bAj" + "jYiGFmpzLRtdK9LKqB192yZfS9mJ4hSm8wywKc2iAPF8kMtGRq1X5tIayEDnKZJQ2UATJQkj" + "3dR7HMZsRLcEFgxkBIyhABfAaaNy2FTQEB9MSipDyhRvpqewGGCqSiwA1D8zXJYS7DgiqRF+" + "+h9NJ0ZjGhcuSMqGpRFK/xET6b/ZSjGFgvPkmWo+6Yw5uL6PlyqvOf3Gnj3Zpxw64heaD9mo" + "ZWNWWaGrFbYcNdy9Z9n6HpP1Rn9uiGpbvuauy7nlRVN4Kx8Il3qWDF5ySzLdkTH4hZaRd/jS" + "Xotq3OWTRvcxZURn5SeaH1dKQkpnBMajV0f9rlBYkJARmPA4EeMx2SOwXH3fqfz2GFnvDE+3" + "2/KnZO4Y6vPeBBGSjcrcf1/63OG60ZNXLaQ/qxI9RcVd+QJCZs0cguX073G4pBxHxQDyXy/M" + "PALPB9pUoj4cZ+vYvbRP/atp7i1JNPh2QHMyrt1lA6tgoUF2YNGkHShn8kQoHQLyPoYuAPKf" + "AXVoe7SIEsxh8hYkK3PzUrWZGIodniEwwOKRPZGEjzQql42pa+oWgVply+wDNrMEoHpKr3Yw" + "BQeUf7Z7Tvo8lS7JBN8YjPZJwzGmwilnLWExQcbgt3GmlS0scUxT92qfg42XbagMv+Bv/8Y/" + "xz2FHfTNCzFsuzij/OMc/a2Y3pVxwtTofVPOGDyof9y+84txv3onsVX2Ijd47aH5r+I/FTde" + "ovuhAml7NI4YzGR5U2TPWZzOlCSDbw5+IbxB5iAYMgcsVXFH9GxvxRapBfnLRhgY4u5rTjuc" + "ygKNe17XqqJl+rtKVz7ZE2Do3l2Sm5igvO+SlgFNr9ZfZn2RS7Bz5fuGhrNdVw9u8Zq9+MjZ" + "pojlyV2lB6zJi/fML5Dkgm8PfqHFIHsQONFiTSxl8SRCrq2UwD58+r22g/aeVLAwk1D40p6y" + "ZMX36axkwpFtjmuDCeDa7ZnU8rIq9xvJrimzO7nsGRcvpBudDpEv59C2D7U5XtSZmuYRVNFX" + "+UwSCL5d+AWXDdmFZf9wcaNThxf+3tR9Sx1xx+pqL5Isa+X3qcvOtk3QXN2/Z+vWCyeCKntD" + "SxYXr/l09rRzv+ey9HpfXFFZ85quI0ZvL/umXL37tXH24UCd6R17H48oD2bORL+4p3FBAswG" + "vl/QnGypzcbqFrDAIL+wDBpbkA8qM44D1R5XUYlzlHR6QmsUYih+cU6p8y1WDQfMWJR6rq9X" + "+6px/oPN8Zeu4l13uxkolMwIL8O13W5/cuj3td0fz6ELrn/deN07f5l+5EE7u8tHfH4CBt85" + "TJ1sMe1NyjdggUnUEBoFeTyMhx4Xo+TMxNB6cfrCl4iXKdTmhlg+WcfjJW2aY6QnBx2VJO9d" + "uQYRlq9FGNAf2Yt42s/y3s3zYei1PaehKT9AWSfr9GEcHidJA986oCdp6l22HoVFA1kHLYiG" + "L/baQJaKOsmlTE1GWw4B7C4xUT3Gdq6UFCZduWC8/2xtr8PCEgb5BeqEj75TrZxCwsnxNntl" + "OjQpPqfvt6YYZwRVaUaH2ieapNWXrjE5KqiYoWISqLrDImnfstbmjlkxKSbLV5EPlb5Z1Oe3" + "SPXajQ3Yx8QnHiV726INVJ4SDyzLufVcdUipOsbeO6Ymu1CSD75V+AU+yCqEjPNtEY+P1NEI" + "TTMkuGylKFlumNPtSfGdc3zKQRKrwHwIuSnZdMO5Aa29UfhA1TXK9hGDy++2Dp+3szZJNrPK" + "Ovy6dH5bE1FtXeZJbmLcl7rHkZ/mO1xe4pD947cvqIxYF4OCqHYVSUDpDIOUAQAyDMsnDcMt" + "sWHAE0ZCEBw8XQBi8fQeJCGyKkSAqkXao2mK63C7kipDBOJZHWMdBtEfR4hBhSaUuSKRmkh5" + "KvjuL0ah3KLsZLdQTDg9MoUU8CyFDPBrXT0XVsrLSaL9f/ENS/8Z29SBdiP1++3WiuWBs7T9" + "OdrTLClDSoafp4QdrX9v6XRvRlyFgkn4AN9dy32482LRhmnnLlJUfd4qvrN17br7jW1oFrq8" + "NjzkYZ7G93yd3BZyTe2pbfsksaQzDVK2GGQaVk5gNVcriE1DGm/13KJaUFf88yErY71jTkyo" + "vW9RD99Fw7O3f0sefrlcuU+6737fwK2e5yyij599u2el2h7RwqluMsFlVlG013lvNa8PdNxY" + "XfG79VHX9V9lLS7bbzvqr/q7JJx0hQXjMThWhqkyLDjIOSyE5kgiEYIbR3CVr1NGo3GFw3kA" + "QkQGkUM0JFUowmBFRHoPBi0iU/o9xJ+pHy0JZxSxCocRXDJxhJvHJlOC9ZNFHYhX78kAkNnv" + "/WcWh+0oiQTfO/xCNftfpYbx2YZ4Sr7A61CgC+Bhlawqt94ktCCn+76comPgrCzTlXE13Knc" + "jhPT1BeULIiKnTcb77bc3cHA5/JJDjKzhKi4Nfcm98nxbxv76n0StHR275xFs0iKigx5KMFl" + "+//FOkxGjhcjk3NzI/HcHI/hckQu6BbRsrJCBkML4UB/640baWTHdmMQXBRSfqTxHpsvIsuf" + "J5Daul5QhN34tt3ahDNVIYnAhW8Io7aEETIQFG7fmqhwd4kkGnzzMBo5xmdRhG/XVsJCg8yD" + "9ySaKIWHeYlh4tEa6NGomCLHZeDV0CiRL8l25CU1CskT6aL7RFq+tS0BNwg2lEhGcxKbAF5C" + "hE9tmw/cxJgNOl3cXSZJAd80jL7XG6O4Vsy2gUUBmQZtiILLBjzJOJwrqYyOoMZZFyAAbhOu" + "4JvriS5JZdJVGcarVO9PRglgKYNcwwqoyjAxJPKiutoj98Wf8kIR5UxmcKZpMe7LZTmBl1bF" + "XYq3XXHoRMXjOJ01Nv4palXDCQrPPER8z0VO1hzP9w/anR93PwiM/Au9Zr9h9naOoGHfB7D8" + "qGVvYJgCW5JNOscwzia7FtEAiw1yDAv/ZmOT5GXZeSsqLjjwFfUtjDzvhGqlqRKnm8tjs/Zi" + "XTBOONmGbCUHTf1ljt98b8xdo6bZbPNuWT1ZZ8j1Y5btnJntfyaGbyWI9jfgP0whfrjBfHtZ" + "Ekm6NQYpmwvyCBNr0PPGkNAIt+N35fW9yqvj7Tfb98ubLZavVvBMU1jh47JEbUZdxB3iSkqS" + "iY7qNOMVoukbt9XGXuWtaDx9/MQGmmhfl89x+107HHt/ErKkcwRSjmvIEUDZRcCmcvh0t2Qe" + "oLucpCsQD3ICFu9dq9xMaQZqNSnmYEML2RG3W8SjCkR5YLLIiOSc36qyLwzZw8Rjv6LYCYtJ" + "QqqQw88bRgEv35KAxz2x7yWR4LsBjPilO4Z04FPHfamQHCaQoqihdMQgDS2k1ql45IhwuD4c" + "ToBTqbIShoQKMJ7KaBGGWoZEOpc5RRP2oxOAShPc3SYtxV2SsqXL81KOEsjEBP1dpxZHALn2" + "88SgnkCX35ZQzDXtQ2QPTj9Kn2cWfuPj+2as6afjyPKrccqvSvz98mbWMxalyHnVnMu9+NSU" + "bBJhau9ju/zSLfz8qTQQTzfJBBfLWksSSbeiMB5tqQbrVGERQc4F2rNGpSDEmULsUZaIO48B" + "gydKQWGTsFmHGIV6DFG/Bx+/jXiJxuYjssgPynkiKhqIf+EwxbX72msJ3Xbw0/gvLPhC9mSy" + "xM4dYfAQRlgbdZIulQSEgswGsgy6hSDEZLGEDXiZADskGlNmGzyMQSJf09DoviYBOblFmM5g" + "gZWXwT9Q4Y/xrzHAu4fTijbbFyhLwsBP3L+wxAt5kokl3nljyx9Yj/a8oCpkWEWYhrfbndD4" + "ZS+9y67LuOkGGtfPMD+8szk60dYcp1x+56FS+59rrnckOc+q8dJ7AHg1FAWPlB+OSLu2ziF6" + "3q3tl1CPBmY8p2X7EySh4Ofx0VKG1hjU5+UZO2FBQW5kopo2L2esXF13yjPZMlTGO8TyTqr5" + "YDlJxkTu+19YdXXL+Z+L3txL21xVZROG7iiOOvKmAIcIpHU0Xtscbbtt8c1534MeTC95N/tZ" + "0y6ERbaxsaB20bAkEPz0P1rNGN/T9NrPoBEWEGRM9KGhQgdAJlOGiZBDYzK8UWhKDaG7FQWY" + "t0zdeXbQtUNSnXQJXHtMXanArQ2WOsicTKzYmjRXq9IJ4in/JyzWH3WBKvfIE0T+VnSwHWmy" + "Iqo7I/tey92PM2/M2hp75rbWY2Jhn7nsDM/bm4r/TPf48vShS+CHU/amSWmXWPYnhlnKNy1o" + "4CvOtLUVm8MlFwbs4Ofw0Yg0vrDzW0VXPywqyJZMTIZ3NrPEnQiQazfS8PWmLrp5sk/+VFAy" + "5Zx7Z5maG5Esm5v4ebdzhlLg6evU29hsX/vlztEXW/Yox3QdPrxzwxTbxtMjqtdo7be68Tfy" + "V2t7HfkCbFninJfla39IEgt+Rh8dGyZjWIyXC07CwoKsyZzJ8sVLPFeEoQjLVDIYX0BCDD2U" + "SYsVoDJo9CoueXSpA8MQWI0udSTgYqhhVCo1lAJMYw4oJ2FtFEIKD6NEIJCrHXCe3U8RSKJI" + "t9Nv2hiK4tp57rBQoEw+sXS7pfmaKoWq7skbyKNUyu7XXq6tEcV7RyGSznzNQHMO9jXrb5p6" + "tbY2b75n1tCrrqPVT8xmNGwYmInKbvxsEF/kHSisV+46qvFuC3DDdrY97+TueEkc+Blec7Jl" + "YgyM98PCgTJ85D8qZ5TRUFyIzfwiY6zNIpo5tmQ2HJh/KVVZ4ZQes9s9eWrwgWjDEqznnIcZ" + "57AZrvK5PcVeO04dHYmw7JxqXyInmit4zCftAsNibjqdI88qeUa0fufanhg9ZBbapvy7o0tO" + "MVuoL0kp3cLAOGWaZukBWJT/qld4ca1U6AS0XNuttw13Guy6rhw4NM1SX6nWq2OFcwJpSZRf" + "4m2uUY6hgxp94VltfmyvauKftc6p25kP7POO3Wio3/XhfaTKgaOnh0P2driItn+cw7HdvLhc" + "AskeviEYzaHj9YopRafhRWfIEEzUlyJyx6yZ7Ez/AjuX37ypqQRF/yWKhxLF5iyIz1BbZjrn" + "UWlpwWH220UfSbtDShBnhgKPB8bfNfRKa1nrt23bmRvTepHeGxs+3mFer+4ivxe9638c90AE" + "mG6xeCs73bdPEk66ZQEp4wVkECL+uR1ntBiTH1SLDNnb7MWQyaivnaZlEJHV1BCvrn7W6f29" + "Nybxarm+JgGPMrtmX06cvwVpORtHuz60gyz7GSkXze084MGPEkXtVYiyMznqxFrygDOS534o" + "raZwpb7BVbKbg6fSMklI+IZBC4Dyq+m99ethQUKGYQEEeW0U0qt9xlXf2/LRtdGtd0L1TYwq" + "KiiFwe5HWU4Pf+RXOHbWV2QyMq9MPWK53f9CDkbzJf6k78zr6/5gOPbpHY7u+aO8JgnYHEJK" + "rWg7Hy2JA98ujB6rGPc/rbffwttsBNkFs8mtw3RAGY1GqeFUXKiJgAeKhF3kAqZq030ZDDfQ" + "c1cAALwT6KoetLpxWFIpfOvwC+dWIOtAgbIRp5VPL+IBRh4IhHqVA4mPp+aT2Xx8hjZuxMFa" + "uCZc0NjMTy/lpc/mpm9nIkSqWVo4t4x0PeAeqGYi6CiQPBtiD98k/EL1FTIJE3UZr+aJZU4b" + "9X2krHIrmfk9Zjmfc5RW+IUk6jPret6POCcaN3jHqwf0nS+/HeEcEzdDiTdvt9c1xonuwE92" + "J8GSOaLDe7Z7h3u3mf4RtdR0OJhQKJDRbHXZc8il45wkm3TbC6UMaxBb8P814/Rs91Bfxi3f" + "pm6MpJrMelS1T87dR1X1Juto4p7sa+cbtGs03m26eHB68YnQiruqXY6BcYQdCxP0eg0HDLNH" + "LrPif1Q5ODyubT28a18i8Gb77GHKpeuSK3D28G3DaEQbL8OWvKZNgcUl6YBYu3kilDNTNLrh" + "Q92BYuWhxyVjNSvDBGEBjfzyst08Lkp+l3xdOuuKXkYno7AI1CK5NScFpMs9NeilDIoEKGBL" + "PVmWwa6XLAvaw7cMapPd79SBpf6wUP61A3RLs4HK2HaItWZmTjJL3z50BJcWl5u7UR9fPHrb" + "uuI4sr+r1Scni6/IzaryXOF2od7ocse0bfZn7CvTd+IJNTm0NWeJew475lCLZ870fDEk89zT" + "a1q/kSNbkko6iyDlMhRkhFZDRmiCagH2wcNBouOZtNRFhKtBTgqxKXc0DlnOSfZycRqw0qsu" + "ruqRt1V7oqAtV5S6rvbD7tbtikpni8wz503xUKprOPtsg+IyRPrGrMuW3n+Irlu8fwXq3HK8" + "73jPUrKm5gDfLvzCxAJyQPP+Oa6wshwP2VRLzrErtqtfXzJvl4+nWsvUDfAPVt2vy46UZbSe" + "nd/rti+l8l7CZf+96h/nrth0gLSuY9XIG3eH2+bZcxpQp4Mc4oOnn1slCSPdfsNxD/7m4hJn" + "WDCQ94memPvtHl3uRXvhDU3kEOHyd2ZY47yyPMyRh8Jl78w4JXCd32+8fJBm/5G5gBk4VLAt" + "OHnQb8XiL3W8lKc+tKLXO45v8Lq28Yz3zYWeDfZOg542V5zv1E6PxG8htH7bcnpT/TO1I2dW" + "f/kTr6bphH13rAAvyQrfJWhONtyVxMYMWKyQFQqZbDiFVIo42IsCOjyrQJ626pljM9ie0X37" + "DVcgmDroHzGxRikzfxSxNAI7rwQrHHiqOuVYsfdr74MLjm1J+fCxZ33O86L8iJU1d+/tz2nx" + "vJmKjPvuELnjqY8wiEYpsiUx81fclwSE7xtGAce3+bn2XZwGCxCyQdCGcgFNiOGSG8hogiCF" + "xeT5pClz08n2aMxIE8lFyOXG8vHy5+lxRuoOojB6WCQhUrbHm9giv1iJ44LGMHDhmk3NGA07" + "rDOOkDDylwgBAOvs//J9tr9Vkgq+xxhNy+Mlrhf3T/TCooLc0AyIaimH35jMo8t5IHA7gXK8" + "ZxnGV96MyOG7JfNAFAJrGwsAgkOEGSj3Ej1JqfDtxC9U436yzJNKwsq1u03F3gef+GOPXZFV" + "JNDfuP92ztPolngWiI3coHo92rYrhV8aYPrZfP4C4bNio27bp0HL9kaom/hrRmBuJLrvfFYe" + "N495lml2FKPztvydXAzHoivVau0lSbb/6WmFf+0hHV/CGttDOt1GJifhWkBF+DGC4iOSTqql" + "nKGjadbjEiHm09wHvvsyHZUK/E7d21UzB2/plOHzQ/OBVtz6P98nP0deMedYWNp7/MHcIHzy" + "MMe+H7FjwOVlonGc5Bq8A3xH8QvNBjkK37/HDcgVRRo3ozkiSuEwyMVHyo+AtZQhzAcMzhXR" + "H0bYhan7i5Xoir1rY0ZiUxDYlBZ36294DxkuqswRiwBUCuz2UdfHfJTk+J+uMUAck6u4Ij6C" + "K0L4XgGztAgCPFbkVkvWdSUlOQoYPJuAD2IMlbpGhtgU6WgRysAM3mvd1GKlRzPZfITxtz/F" + "NqZ+9ltVp3WdkhTw7YMaIPUBEsgUBUxSNDJ46WmjS+hYV4CTQ2mm0XkDNNkRAqauGTuUh1Eh" + "uYx0Aw0iGonazaV0oeua8ZQOMKeTsV2A0adGkZPoPKxzhwvg5eh4PO2ZfpYEj6N0fmGcZ7qu" + "jiksnn+t/EzaIYzG/hufr6w6WZG8nnKFEqchW4hVU+/JvP3x3ibvOPRRo0HDSzIPI+/e26bR" + "/z3HD7vqSFq9dh1+iKf/6aGf+c31I517Y9IemkXPun9C8lyZI3zToAZIfeYCckDOfx9tZQO1" + "ytQ+oB6F+052r3KRJ7uyq0R8kCkidKnU9401mbj/cZJpZSHhV2mfUYAIbf2wObcNKSkdvgf4" + "hcaA/A60WA0dF8kmErUYixf4F+zZn3Eu4zwYbxnUmz991auNetfVjKYcyBgwKb4dTD8Xka2z" + "8M1dFv4tQR9YunR9+9IXN1syDTf8cSNsziEy7blZ3pw/U3wkkeBn/V8YL5InYFTpBMCjPT6H" + "R6zR1lhfXx6r7KhJ3z3/VtrvmmebXlm2rzilf+rA6RWnU9vwT9NXefk3Vfa60Uaq0hJ1qDb2" + "68nmA4sFJSdnjlx3dAqZVnxPEucf6d6a9DeQ+P1/aiXs+HkF/xOf/0bSrx19gTFtW1z/jQQZ" + "GejstID7gs1nXGXwwDAEl4NQRqfjSSQSjUql+nA/ULqEYOVrMGCDERbxVdi9EQAeEqZOL3Fq" + "dJNUbieV8tH3qmPKm4MBX1jK/71vNZFGZzHAHF2cvi47nb6ODQBmq9VJRSGIDElx9lKJQ0+K" + "43jHYmCJg+yJFfS1BrBjKUCqNg732ookTCGA2O9hbP7vdJ4PyE1HoTEYkm40cCKECgA1LNW1" + "A/MoJEnRDlKJ/k93YPwX0ZDvcP072LQBHvPM0X8l4kb6ScKCkNGDUWCOvtjUdocI2LX8PAaP" + "jLWjBJIR8rZVJN3ukEQqAhiga5SV3rldIUngKBUBZpJAeVdxHSwCKC3Pmog5d64pAAQ00M41" + "3HEyv172WyxYfSHfU6h71uX6S42lK6rWKyzEuS/M2jOloDTt/I0heVwrsgunBTz6oiW5C9vR" + "Serv/2f3GPwX9VA6dvp7UxUfkeM6uukN4Y4ZIbmkslJoOJUOkm5+SCKbyy9N49GU1EJDBI21" + "bWxuGwEBRDXrh6A6ciSne04kqcT/p2sB/ot4KPdO1Ce9asfCPcDJWxFg7e4dYhtdXdhZZxRQ" + "Q9l0p2R3zb6gWIO0JKeUQgHb+UkAJ+fisv7LueTUWO1O8iGSVkXPB4RkJdjJSuruM84gJBJV" + "YTH8e5/F+AAYwFgJUUftST1hApTnJsKXxt08FPahVRJQjhJR3nSTmVwRrlhkdUE8b6N36NUu" + "vd9rI6ndWurOozGmfZVhjzEs7VC6nQV1HvFQpafzYpW4/Qj0B6psuK5LLZ8uZ6ziiQrGPdGi" + "9AxjcAI8vWkQhU7H0OvwfHGrU3CuVlUMyXUTJ5v/ddeHMqvH5PVG6bwUZS5Cn4kwR7eg0R9Q" + "lAy9HELfayQTgUZjRjcakoRrQgStXH5eOi8PzcWUndFmiufffTRgaTfucXYnUXJty0m6k3/j" + "u6VO7rx6AZY5gDLp3wV6AR2UmYJTofNRcswGvCK6hdIsTGcw9LRE3OSCXrd3h9xwld8IbSUI" + "BUXqZrfjNODJQPowCIgMTJBfStsOSOqX7gaeX5z8G07ejMEGPEU43AiJZEsiUBDBvfgTGYis" + "EfG/YvVN6+MrnO9WSYX/0033UFINHVdo12ylyB219xvvV25+f+9x7MH1V897qPScfEN8d/+P" + "ktoom6Cm2pSIEHJcpr1C9cJOonn4/djn6LODA4Mj1QEHM9ZFGJwbunw17lDXSUxgZMHSHVkD" + "Vc9TeeRhTdZMcJ9VrNn9vZI1QifpTvSPb/TKewlKd4tT4GQf2kXnIQZAJioHhaNU9TMQHjbY" + "yzSgB6+CHqZ8J8uTHdn8PFBDtAa4bUXhY5DIXcRIVEgZzqatBFmmnX+VMOA2KNxLFneGw5a0" + "37D9DZJA0p3W+3+7QmLszDhJ3rNdJyXQZYn/Qf3cQBwnSFsxfJPaFd/+J6ICni++6VnOviVc" + "9lq354NE++xzrDwqSPY/q4APKp3xZm74d5RWtb0B5frXB5Ik0u3Bk3J4Q8kZugxj/AoJrfNk" + "qqNABHrYqDuQEFYIeVMSiV4tI55ByyFf49HoYZp4AJWH7CJEisB9qD9CksqARyjrb6C8tbhN" + "Lh0zVXs9u3qLBIkVSbqD/DpjKMtqeqxhoUCpeu7EKvxEfakdf6wJR7rz4UDyxeZpObERWb6c" + "imOJuRE7HxlEamQmyu/jbNgp+/j+o5zIEY4pceQBb9vIlk+zh12ePV35LXtV8FITwH2wVfUn" + "MNJd6POL10VAh/EcCSIGg+FGB5HadHHDiOfFZLogBcROJQlpQB3KlSTcKNsTSYgcEQ8cvWQR" + "38OqrQQ/iBWCqe8NBKC8qHE3TSQCAO5ht7PMF1+9foLzP62cQ2l8ova3+N7oFBOdxitN2QOa" + "69ZzzM2pNl11qubTN3HoWxM1V++9vkPhtMK7tKzY83HVQTWzg4w3vVt9gum4qXTrgd2U+xT7" + "m1ZOe/dXz5lTFV2oN3x8FmckEegcnnm1SYciGdysSNJNn8eHkOet+1mw2KAkP3fS39LoPFAc" + "3RDi6KaNo3QwGEMgAvEDNbcZXZdDccJGAT0ICrpHJk1rRETv3kX4Xa9ikIFYJNc2t6wTRU9I" + "oooH0Z3D+JxoJ3XJk1JWpH+ke5t/uBabn7uW0ZQ5Pt1QyPYf+hvI0mj0BSYeIyf8p3BNhoAE" + "KTy6HBdUYNqrMBNUmANotIiRkcLDo7gYBSZKkyAbjvAasSHku+D640ikWJJtMClJCAKuXuqC" + "+1y5lz9hsJOKATs5fmw+14fAYoAitPtkRfYIj+bMpSUwaZS6Vj4qo1drpMNGWIliYURub8Kc" + "uWEJxFkq3sOkB+xmQFYZTfgg6gx5zW6jJQACrsGKR/o53j/BsP9fN8W/96onCkaXKHB+JBcB" + "J1afqSKiOlI5bdM4pNIUHg0xq/gFm93KZtdy2thg0OBLFJDA0FueaLqY/xPtDlJp/0/38P0X" + "7VA8nrxnqbWLzU+vZvBQHuJEQtiVD9RhtHEqIzFUR+EtBks1Q0fAwFWeGQKwiFcdZBI7zlnd" + "waOfh6EMYxiRjObwjWKEP6c5z4i4eewnOI7/66b4Sc1y9Do+oS76sx56UA8tMvCVyRoBC+S4" + "eCUmXhONN6O84WCYCDJOm0ayFTfUCAIo8cJ1aeKcv/5Ev5PUI2J8TxA2fa8sLP1QCPaAiggT" + "M1kfyxWRxsxyqoXPKtk6GcuFacHE+29Prlmqb5L6ViB8tjYkeboHTg7h8FsbYva8DyVOdfXL" + "yefN8Tm2T74Dkhz/vKQPJsfPdgz9Fw4o3E6M7MW1Y7tSvDimx8qa5XP2tMf29px9Fd0TTfFj" + "7GvbNOuIv6Z3I6pYd+hk3S03tvLZ6uSHBUasrMPBRmeVa/y1yTPiwn5yk9I/b+uDgSEPQBVK" + "RD+iDRYGNC/RnOhOb9ZQZWu9mZG2HU2ATC4QdgdpkZdOS/+JNGupezpmTNrU4MQnsKRBExIL" + "6IBMFZWaT+1GGKogt5G+o7xpxrhdvqSkbmpiB7utSzwKxD8gcPGTwiev491FP1FsI5Xi0QrH" + "eF3SLO4uGpZiaJJKmpxn5/FSdLmgKxMRjf6wAf1hHrovnf0GyOhNZw16oNM7cfp8K5d8BHDp" + "Itb32CUe6yeipUuzo9Z7fO+OxyKXeKl6wOQ9paKZDJ4II8cUodRxI1ZEkhAMK8PJO7D5iEXN" + "QH2OvBCTWhTYj8dG+nTjmwpFoDiIDgOVTLDyIBi1CvEDATw74abm0ux58ic00iXcUY86vg9E" + "b86zbFg00LCMnbjW4F61choJiwjwUZ+uxYj+vDRE1l7gZq5p7/R2ZmyEojrNByxeOtSHGLJq" + "SyFitWbgzFnzjsR6od5lt868m6Lc14A69te5DN/KxCg9/WU6uh3dj53scg7vjTJcHfhgWfQ6" + "i7bfmWdZyEGbJ/jnzgtPRDanXPsJtHTpWReA9sZuQ1xYIdVI2TIRi5o5CqmjB8tNnXrfJORr" + "9hEsOt1kNCPrvA3tSY267g0OSpZ9r1K0EsmLtjKyjORkg61WLGvbOVzWWrFTIcHbOmhl2W+7" + "evd3JOB2bt+x5VIUwUkBeevNPX6FnGHBg3Ci0xfN6O1avwOxTFF6e9dRl4cjKwfZmYs8f0Iu" + "XXLXmuy8ixJO3YBFDhmTiVssttybWAbzsCRqMbwMq5dqu5gZEY6xKI6oDEOv4qVXBK6FW9jq" + "qGj1MNVEvYIvX1ivbs92W7QoNdP0YL7bEZ76YJ7urH4dZIVFx94752as/Xjnjp1wSd0XOcxF" + "/4ET7bMlj0VZWUmX8kdL3+OzluPV35xhQUIpfxG0Vf2aMp0AeLXPIRK1OIG6yjlpYVcUx84R" + "8TI5rX4qWr6rPerO3d0Un77xyHmLyt0RXk7NfsTdT6M8Lx+9evX7VfPNN88a3kjJWPDF4b4c" + "2Em5JjodcfMnYNJ5Ae3J1rvlNvUmLDDI4W+YOB91j6M8dmDHQNcxKPmY7/QEQ72O+wfcFfSd" + "sI+0ctvvKul04LuNdLpkQLRNGdWY69Gaax768MqUrTMqFGMEDz5mVJgce3Aye772jqRSAWpE" + "1/Ct4T2dGM+v7msIJX0Pc28o7mJZ7QDtmgP/lE3N9JcktpbONWhNhietm8qXYBFD84GJsxUR" + "90avgFCXbcOr35e3JFzJSEtZlhRbLTu1XXlXkWHvjjUFDa/jWvRMP57pOZKpBp5eiCDqGYlN" + "OIq0R+GC3IM8iz/2IYJBzO3ec8te2RoXtLkZfSi4+77Uc598TW5SZuNqrFdA5fKWq5J3r1hZ" + "S+cstCeDUrxenQ4sVMh3r4f2st8Y3ZLsxZtDjJqLY2iUUA7PpZ53UDQKCMIeOVhX2vB6Rivj" + "nWVbqJ8MqLVEJd6neKZxvvY7htofZX3bjfojvsrOz2cv+k3e3uOeXwnRCv8yPQavvfCqVfHJ" + "0nbSQMFq/qPDd+TMh/zrtxevkby70cpaOruiM9mZA1KS6LB4/7UDcfSsdR0B7c1LJxLP1+bG" + "rVxy21i13CrLJ9aPQbi1vze+xTT/Q+Pn8FNMOsbmEFHF6M3TbBFLY6ZbDErvWcI5KyJmYOQ1" + "jvipOnR1+/zAqSjZt8d/u77rjWELlRhwbXvuPHDQ1+Ia0DfkTV9Xvvr/OvH0fwCqtDFT"; + +/*---------------------------------------------------------------------*/ +/* Auto-generated deserializer */ +/*---------------------------------------------------------------------*/ +/*! + * \brief l_bootnum_gen1() + * + * \return pixa of labeled digits + * + *
+ * Call this way:
+ *      PIXA  *pixa = l_bootnum_gen1();   (C)
+ *      Pixa  *pixa = l_bootnum_gen1();   (C++)
+ * 
+ */ +PIXA * +l_bootnum_gen1(void) +{ +l_uint8 *data1, *data2; +l_int32 size1; +size_t size2; +PIXA *pixa; + + /* Unencode selected string, write to file, and read it */ + data1 = decodeBase64(l_bootnum1, strlen(l_bootnum1), &size1); + data2 = zlibUncompress(data1, size1, &size2); + pixa = pixaReadMem(data2, size2); + lept_free(data1); + lept_free(data2); + return pixa; +} diff --git a/3rdparty/hgOCR/leptonica/bootnumgen2.c b/3rdparty/hgOCR/leptonica/bootnumgen2.c new file mode 100644 index 00000000..c8032ec0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bootnumgen2.c @@ -0,0 +1,287 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bootnumgen2.c + *
+ *
+ *   Function for generating prog/recog/digits/bootnum2.pa from an
+ *   encoded, gzipped and serialized string.
+ *
+ *   This was generated using the stringcode utility, slightly edited,
+ *   and then merged into a single file.
+ *
+ *   The code and encoded strings were made using the stringcode utility:
+ *
+ *       L_STRCODE  *strc;
+ *       strc = strcodeCreate(102);   // arbitrary integer
+ *       strcodeGenerate(strc, "recog/digits/bootnum2.pa", "PIXA");
+ *       strcodeFinalize(&strc, ".");
+ *
+ *   The two output files, autogen.102.c and autogen.102.h, were
+ *   then slightly edited and merged into this file.
+ *
+ *   Call this way:
+ *       PIXA  *pixa = l_bootnum_gen2();   (C)
+ *       Pixa  *pixa = l_bootnum_gen2();   (C++)
+ * 
+ */ + +#include +#include "allheaders.h" + +/*---------------------------------------------------------------------*/ +/* Serialized string */ +/*---------------------------------------------------------------------*/ +static const char *l_bootnum2 = + "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"; + + +/*---------------------------------------------------------------------*/ +/* Auto-generated deserializer */ +/*---------------------------------------------------------------------*/ +/*! + * \brief l_bootnum_gen2() + * + * \return pixa of labeled digits + * + *
+ * Call this way:
+ *      PIXA  *pixa = l_bootnum_gen2();   (C)
+ *      Pixa  *pixa = l_bootnum_gen2();   (C++)
+ * 
+ */ +PIXA * +l_bootnum_gen2(void) +{ +l_uint8 *data1, *data2; +l_int32 size1; +size_t size2; +PIXA *pixa; + + /* Unencode selected string, write to file, and read it */ + data1 = decodeBase64(l_bootnum2, strlen(l_bootnum2), &size1); + data2 = zlibUncompress(data1, size1, &size2); + pixa = pixaReadMem(data2, size2); + lept_free(data1); + lept_free(data2); + return pixa; +} diff --git a/3rdparty/hgOCR/leptonica/bootnumgen3.c b/3rdparty/hgOCR/leptonica/bootnumgen3.c new file mode 100644 index 00000000..a77f7915 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bootnumgen3.c @@ -0,0 +1,364 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * \file bootnumgen3.c + *
+ *
+ *   Function for generating prog/recog/digits/bootnum3.pa from an
+ *   encoded, gzipped and serialized string.
+ *
+ *   This was generated using the stringcode utility, slightly edited,
+ *   and then merged into a single file.
+ *
+ *   The code and encoded strings were made using the stringcode utility:
+ *
+ *       L_STRCODE  *strc;
+ *       strc = strcodeCreate(103);   // arbitrary integer
+ *       strcodeGenerate(strc, "recog/digits/bootnum3.pa", "PIXA");
+ *       strcodeFinalize(&strc, ".");
+ *
+ *   The two output files, autogen.103.c and autogen.103.h, were
+ *   then slightly edited and merged into this file.
+ *
+ *   Call this way:
+ *       PIXA  *pixa = l_bootnum_gen3();   (C)
+ *       Pixa  *pixa = l_bootnum_gen3();   (C++)
+ * 
+ */ + +#include +#include "allheaders.h" + +/*---------------------------------------------------------------------*/ +/* Serialized string */ +/*---------------------------------------------------------------------*/ +static const char *l_strdata_0 = + "eJy9nXk01P37/2cMM4NhZqxjnbGPsoxdhRn7WpGSiowlqSSyJmXGTgiplJSt0o42oYx9iUIq" + "FWXQolRoG4X5jmXcy/id07v7fH5/uO/7zHHu8354vd7X83ldr+t1DZ/jjghPnMu2vcE79gTg" + "tPnWhO722rYXt8cXF7gjAmeM09I15OMz2/P/+B2vPRHbglm/ReCb/fUtBPeVuIi9c5/oEAhq" + "uH2L/82X7LjGWoBPkg8EAgnY2lisY/1bkvWjBGb9AxQi0yDF+hdvoM2mYBBIQ2H2Bxxxlhg2" + "+2GIpWuI+Z7du7cFhIAMC/B6OawPt9lamK6Hn9jwoIOXQkDwDGw0ingk4Ha2/3LQdYOUAS5Z" + "YxGv02fz5aJWDCfS1qpIm5orBfgM1tlJ5/DKJ9sEFPIZ1GJDn9p0P7//NT7Pr1focR9flrM0" + "xhETaaEun/ALNuT3aFfACeQE2mql12jY+9lHtLVcY3HVjBwzx6kFiBPD+lGY4zxX9mPVb3ES" + "rn25e5H14Xo2Z5kAi9Oi67pbsQ/VRiK+Q15B7D4+lWRryUCdFLm2ojX8yZWr9pbnxWT87M5k" + "IJ+JiLrDd9fImOwQVtjvRFz/Scfnq9SWB75mntGi0UboD8srdnaYenBgaQNePsU5rBpT8Xu/" + "haXV+zXNiPWh1TyWN0OByQTVg6G4Lkq8IQ2uKEtJwuIGoxWS/EBoGL0BPJEEK7EwN26RQOD2" + "S0hjMPnckFM8WWQj2hiD+AsM2p/gIeq8Z/VHDhAdQCBSiyCOsVGU3wLRNp3uS2B96DcPsu1B" + "GZqGQ5g7BYmo6pj1Kl4q5ZVNczLiUuJJVFDa5la97hW8SloqsT6De+t7a/GhGzH7Vtyxrg2A" + "JDHwDZbiLrwwr+BlLmJu6apNtqdulirH9Fu4KOtcu+3SM+0uftVD+UwUSO2RTf3+gmE7DlRd" + "QKjii6h2NacEfwtVR//nKIr14eZ/bcVruLM+XA3S61MTjCQdaHysvUjV6LWVTHl6ao1JkamR" + "f1/7aKrr0QI7gpJDcr3o6ybtiZcvLqS0r0oId+P9HhzZZFb1otFldOvlmUQTfpvlAWYdlfc4" + "4PQAwUkvwpV7bJ/8LTjdktP7rrM+9JyH291ey4onKG7aUaOJVFE//hHaMTU6LXG3u+rGOuMD" + "cQ2r4lG1BxBq/IdcjhQe9StREAxvMcVcQNYmCK1pFM3zeffePzHGw8aUf0Y7loKAjt5Yg23w" + "HM0zctkRCXmMsx+wvKNE5WDUB8Qosci4Puzy3d9i1Ht1wlaJ9aH7PGMoa69SCHCezodn80O4" + "rVv9PHX7LG7b0CUm0R8dxs00sIIhJZ7WWoxYTOqG8gy0rvbLtuVOJl33TgnZvikZ8tnfwMVU" + "OHibP2nYqK4K1dGaftTexfywe0DFPuOA97fThTn4DP7XfPpWGZgzrA/d/r5BUeZO1qrdtfDU" + "rK7BLm07q/xi0soJtKrfVs+8KJev/XyiHxL413T4kzbmFef0xL9AXqgF82grdsrbVKzu8oyC" + "O/jaVScf1+TV1nmSn6tOH4Os2GlIuOIZ94wDzxAw3rzknVkWjfktPAOt43he1odb5vHc2+fe" + "P27a4XWO2lxFpRihMyk35cvgCsXFJK1bSoeSNNd8rjuccgJXngnvsPZ5dB2e7MwnB2nt9Bh5" + "UGyUnt427c17MuiKqV4FLNCneL+9lb4gnX9Id22eZG5oIgfdiv+10LEF3WmebvWDKgEaAQ7q" + "MtfI0pBSKqr1Sx1ErzuX5OM9cfOrRTA8uFDaf1RtvfIpIW6pJ52jzcGVdvobf7XmSSieFNq9" + "45sSWO/08Y93DT41YVfu9lDZbOeSuJFTvIG5lD8ImSueaPII/rUj9R7MRhWEFX17vKxMra2F" + "uLBqpat1K9w4Ep8WbQl5pT7MUyN51IpOc7V1EKLf5vaj1lY5T6gku4S9tD2jpmz5HvrJnRZa" + "v8tRda892vl+ztnb3+p7Zb/WqK7K8Rrl5+QD7k7mt2TgOxFlQO5k06L6zUvCnrM2tvbN8nB9" + "hQe+qXVwVVX51CPyQoURj1vDmwqdGitsRb5/8hpUDFsJCwk+nK/so3LOnGEY3bDt4fMrsgGh" + "cV2vbvEdsl+PYL7lOU7QjjyS3rKdEw6YRxFf3JEbKy/fAuRRNBY8ih+Z2UyjpSZIyDFAKCZk" + "kInrs5ELYDSPJRakF1Cph8FSfmQyCGQMXqlSeFeCh/OJgZmRP4gQbDOyY0HEOsoE4gki5k4K" + "fG3+oCKCpO/1VCF9Srp8XW+2BzFlzZHqcLmkd67JwvZ4i3qL9amecEJwr430xbiDz2KJH8Zz" + "IivuWp7/cWHfdaPRY7s8JiS6ZTqMT7g4qIu7t05HT7y38nC55zVgnadffMSUExaYHcEsvltV" + "N5pjAdmRhb3nnjYX7SGadplZaNfY9K4WP09hq3wH0SEYn0VQ5MjuyXdJsUebHLZxpbQi7c+l" + "N5hoZyW/4N/Z1D9u2kCcGA5wjI7o2vI1/Nf3OM3q3OlBtUrQrtfq53a1ns/khANuR+b33rXN" + "G00B2RGfv71YOBHuTh2R7ErqckPq1QZohmuFWBGhTlMVHnHcr6gmotF97ySmX8pK+HGmfLnN" + "DNJGvIM3WuK9mosXTFW++VGG/MZS79q3WS3k2tNF/Xd7bLH4+3Cv/fg6VMCjnbbcazabHeXk" + "BGZJ/iCAsC3J6r927Kxkd2HP5lejMUpFr8s3WXmi4u5YbJRL2bjpVqaBMux0r9qpznj7VORt" + "EvLY3Up3ka/c6ClYaovnhcmbN+4aHKpYrdnzmLBhxBzkxgkEzIOIsH5k5oBipoP8AC2cHTux" + "YY5D6pkwxyhQihQlhw6pJ6LEGLSxIlASMYrMADUgqQwtFBY6GIb3PehIo9FwNBBEgPSdCYGS" + "dPhxbw6SakEKu4k58asOx3PSALMcQqwf7BxN3fJ8RUCOasOCKM9aDhyGh64jlp2qmHuhIPBK" + "szJGPL8YN4D1Lmzc+FJLQ6vw3RpdzffybTsTDFdHfvTN7VAkta8Y4Kvgu3eg76HnoELGTpz4" + "r80eHx/dDchn6Op+eqDbxgkGzG0IL4Kpj9yXBCTMC7mM8fy+g5DsVddpc9XwpmY5kVTLXXqH" + "n+FeizvFYBV93HdIHXC6kT/mdjJji5mWCt4d5cHgaXtAiX0vqM9jFatsYJKyaUTx0+ESAnPz" + "5A3VTxeQjBjdV64DLTkcdNrAbIfIIt1DvU5vQLJsw96E9VNUOqweloDkxWJkp/DkCEY9hT6A" + "hSS8IXIhOpi4nGksxDZHIqn2JxXj88Q0/wTuOlGENPqznkGlE5kwUPxpzaK6VXJgThZgFmN2" + "C8rO/V94w4OpgDTNcSEStpfxUkgi3F1o/lJu+/GVX2g0bbVGUalJJTc/3OnlGLhgdQg+L8ml" + "BC2htb3Mwks9+afCzmr9F7vLn03diQwSHMRcSfHyHNwS2cenov9p86d0V04mYM4Cvbg+qtJS" + "KoCka8HrurOj3mH8ulknf/ICfpNqkmWWAAZnF8i9gZVI+2O3Ce9Aa8E7vM407Es+BvvxGfX4" + "TveKLeOrxdRN91v9jFCIEP/xrsblbu5y/Z7dh61WcUIBMx/Ci5GPLLcTDSjyWf4V+cDzkS9p" + "NvKB64n4GUgdDxJzMCqCNoZOwnKNe+I/wbwO5ptY5ZuEjDFJXJ0OOOhF01oslpXk+BhdsN+k" + "yMcJAsxY/EFsYAc9l4U0cnZ1SAgISSEl+/JYbilf7pjQofjVRmZtmvKyNSgbkY2NYZ3e5uHg" + "IIlM/i4X+e+wVXTN/gPyF8s35K3gu2wryFhhwvM2X/rb8p7dz22GBMR09JPMJSR3c5IBcxXo" + "xSXy6alU+y0ydgZptOho/cgkHgHEBFYSMxM7Zo0/CG88TGUQRLAwliDNrg18RgXZ+F0AEZ3P" + "gMGfmo8zoSD1/dp8u+6+LOJ8fmBu4Q9iATtHdJ5/fsv22tl0A0IqMil3sfIUuWjiej/J8rnA" + "RLuwuanRmhT5FzYKkXLpa07Re4N3nsFdDMTfRhX49364900qt3L9rUtSlNfXjN2kBK8GK/Br" + "Vjno3Ggn+jdwYgHzDH+gsmwxWqjxrp4LBwieLnMRVR2uoowOkFPpE2u1QbTbOgtuZ9zZiI8y" + "oUImfFINSkGuY2aVxIxVF3QS+k2XYwZEdvp9F/6I2JI0c8SiY/xE/LHOr1w2w1pvL4QORnBy" + "AXMP/0GGrNkRoZlJpSO/sGQolTTFskL1WB5EIhNDGR+PhiI+ktVoNMFmhAUZXHraFwU9GYyK" + "o74xYTjSQDfi6TCF3jUgy0Yt5zeoHeKcKMD8wn94c1YtoBjSOkFxCDICipTEDBN1CVOJ9MM2" + "DDkRbMLgEKlPsHHaJgeb9FoKM0MtPQCpx6KuJnqDNnboOWJ763ZyPL4OMEMAX3z8mj2o36tD" + "sFNZWfbjt3S20OANuAiUgCzUfL2LgjkEwnLvYpvQviIeL5ZxPiEwmUcvvtqDpJYYQH9gncU/" + "MI3WSaPwzf1xrZuQmWOe+IA5m8yKStwzKodp0aNyszGpXgtU0qT1roW4bgfnYwNT8v/gTtYt" + "FHjaF0qOzk7as29uhYZ3aYoS3xMbfYqGZTY5u757l1tUcfyAQ6+uhYKgkPGdVYaCr473qx63" + "cDp/pRwdqmKnIttax4WZ4aHz3z2z8p3pWUk5TipgUv4fFoO92xkLux3yHTknFDDcglAImQg2" + "fHTsQzZMwafWylKZveZBxtxMUBdTCrR+u268F++0NefjAxNw1GLcaXoZKAHIXjksxNM6lmUk" + "iFh2SR0ct7cOzL4sVlYacpb70GW0QQuo9jw8JtH8sK6KVGuvgHpJFHJ9V8KpcV2rAT58Qerz" + "KuZpB54ttZ4JERDnNSoiYzx3Qjl5gMv2Hy7HikVnVUYFc6FJM6YQ8+lEaAKTMIVKwULGPRWj" + "pFNeFORgY5it5mXGXEwwPRI+86sGDOL9pB++99Y+zjMHHWCa/R9soc0/bSFpISGes4VFYxS6" + "NRcK8jiKe7CZNCWddBgStAr1BaK135wLAonlgiCkQeW1voVDh8kI0KbTxul5ZZZJnCzAhPoP" + "FoJdrXD8ewV+zrfjJahOQc2bPY/4xHaeTQoxxIs27ooyERaS6bosmBhhlq2a90Ztt/y1Txry" + "fV+SW5xvftcpf7+1bIvbzFGD3poO8QM7dR1Wh6Y7czIBT/Gl55gsarpTAIn0om1XiKbQIb/A" + "CbB2GEaQIEv2C2SJHWMAZP4FAiP4zrDi8hpd6EXYh9icrkCUn3JnH4z0hTiGJTM8o0GgNILK" + "rV898NucIMAkWoz1ozwH8u6my+8dILDf+oXjkQPsWrSm0jYrcjaiESRiqtbEWqduS59gcNe6" + "6vdRK4d2kBErpVSONsnznNOL3fY9c4WiiUuSxpWByvA2BccnwzGBydi2Izus8p72nXoROrMX" + "EuWtvcp/aqqUA08XmITPxrFlc3gBUR0dgPbewkHz7vnDLQjNWiSbtfcw6tgyV9QhiitFW7Qp" + "Ac5rEXz01UFz3oBnm7sqJo8/UAcfHV/9PN9G5C78W2HdOmJLapeAjVdkC9EN/clsO95ru6i2" + "6kWPTwWmgX2S6K9WistrVoLP8WzZsKe6O5iTFZgZmF1K/Bxrd42B/W+xsjMwz7+XnUTi6Gf8" + "zOrhylcHQMoavvIBTfhUsq0pzTxtc9S1feHW6umSjav40ttJ3avd35Rq+w5m8b7YfQ2bTd3g" + "G3RY9tHWbw89Rov2U9HXqs/gSqRudinuFnsi3OGjNwFLeoPghARmHf5DZ8fGhcJGx8LZkIrx" + "8Dt4+qBXjLq7WkA3OvIrLm03N9ooCrWXgRVLO5R35GibmacVOkS4kCfrPnf4VNKjgx/eHnc7" + "aLzqecxnsYZVRQaVV37sLpd606cvX1L7o5oTDZh/EFtEq4hoTvotNLbd1Fr0D1OJBdRxJAQi" + "BB1HgsajUQHF8tCTPyhU1sdUniSJAQYIFU0eAIOmEk3D5NzFsjgfGphrmH3o+fOEswd+EABZ" + "ua2LWdisa4ijE1GlrXBVaYtArUOU+F3bslMzuuWH90mikfc+9Ru3663RX8Yfb6OcpFKgGwit" + "kj5WijQX73f9lhM5jW4+HXa/p2WXwrOBre2mQ6ejP0W7DPJMrtYWL6hmqnASAvMRmMUQQr13" + "7gugCOnFPv8vQLNCiEXXmeSkYm67Ah3DBC4/1bM0XGkm/pg9lGpqFFp1PTFMDqoRqb9S+0KZ" + "VtbNwJU7ZuAahYNqQfvf2r98/Ob2qupnz1uJ7V3lzaJRBl6hVRdqECLKN96DNw3YoQ4Fojiz" + "aV3gXQ7/LVAeeGDMx3qvEujZgjLGZocHuxzGybcMxqGVI7imajiP+PFE7ntTSScuXM7acFEx" + "SeZ5dYmu/Ov7fcuP8lphcKZxA644t/X6hF2O0U5jWlX0rxtc8g51rDJY9vleOASriMmrT8Q6" + "n/Ko0B+mreZkBd7xAJCVHSj3/KMlh3tWFFJpeAmB7TrXk63zHdCeMzzowhXPNGbS2hszVjc4" + "uGGe8ucWBFudsdnSciclzQJdZTOIxXuJOmi1x2qP39q4ZiThJyphiIfotu+qoLOUDhfCUPSx" + "RXOE9oYTtRPDMAP4M7Kc7onkDZzIwPyK+KI2GB9wC/0tZHYNyJ0dW6KnsBD4DLnUO4KGaw6k" + "UJFJzzCSM2BWkPH18rOoh1H2wnb2Ut5PYkxI4xA89MMV0EhiybaZV6CmUcf21DgJpg4lyFwG" + "ZU+gfjNrz4ZUvSXWE0G8Ajqd6+W3KnECAm+EWD7fMzAY6vJbgOxqkP/C0QRrTetnTeaeEscL" + "PFwRIruPtYx5HV99SmB9Jaqd4JQxqJeoYKNYYIlYphIfADvBqFA5KZR768zbp1efvqqOZ0qO" + "UyroUz27c57HnDoeZv/oaFfpo0jTsr1lK5371ety5beUvU/rlrrx1t7D7hBWjINXD5ixEV2M" + "u2vsHHQAiYXholgwY+mgX8gE6BssAuG3cNbuh8ntjQ5T8+r9qs3VsS2DTIIJIKQRTKYNCPSZ" + "adChcieUUzP0/ufdmWzNcP3bMdLs+ZiCSHb6AD79zUNfRY06+DGRhrc6koeu3fUu13EdUdPl" + "Mz34Mdnx7MWgnJ4rB+ouKulqvxeLv5828iTwS3vhtVvJ5zZGBWK7P0+ubhPg2WoQ+fOdA2cZ" + "XA94i+Z8bIm3D3sASC2CFgznw6o5w+lYNBtb+FJpPqgGr0TXODRetTAnmJEU82Yke1gNpigg" + "UeRpvau3EyO/Ey2b0FZwfa92xiH8I7Up3utJpk73crMnGh+W4GXNnMJJIi7voiP20BUfv7t4" + "e7PqyHiY6A/NYtIq8EdBH3dBh03fOKGBOZfZ6KIyB92+/FP+b0Gzs1Vz9mZ0Yh6mxxqL3Ffw" + "lFiBf+PNwIEb9EsYVB6Rp7gxKrGkAhyn3ovBYHLyMdAcjAlhTGuKCW6MLh2IjgKd7zIoyr64" + "hNLrAfMyEosx5CxO9vdOodka6Lug9A8XcqFD861iJxXE+HMJXCHrMdGkT36nRVrvXH/96Zy3" + "lIN7o4+mXYR2N5l6MtvipMRpss176y82QXtKzZj1QgfdAq0onzPfxn2SfPZVtbDc4s4GTOwD" + "DbcQCA966+Oa6yvXcpIC8zR/IAdsBdzGPh7UEqyb9TR71HavfLo+8Eig+jLXgGNFDLiGs0VV" + "quXKlI3TXRn7FaoyNTCwtLyjTjFl3NOy/sh9sNO1b9fz6OW43LH9tU9SKVVS/NipqbXGoqFP" + "H1xraup591Ny79hPri0telY+pYMvOUGB2Zo/AGUXgSz+KpA2d9IogjkYTHSpFiFWCwv5hVyR" + "MIMMQzBNGaYyXFgGrDbNpkIi6QSagUVcVxjDuuVgqUxq6RQRdFTSaiX/MxiGk+N/blnY+r37" + "H02aEBIrrPiDcml+UQ1eOLHkBi5VZwtt5hjF72qpz32cKnn9suyYTRlamDxcwQblbXnHiV22" + "WO/SzWMB+1oN9B8nbqdUkYeUkxweTAw+ew+3lPIuyi/bWPvj6uTO8B3N+xzX/HDa9EFP7AmE" + "Exi4YZlvcaEOrb0ESM+3/K3FZTaZxfKPYsBPS/dqe2PSnDDUrJjqt0pWyw99rqzy3tvZqit0" + "FM/Pgz9fJxcxWXs+Z7Tkh1/3Ta3Gj6Ljqgp0981PQnzfVQVd2N6Du9RlUAXOVdYyrTy6XZ4T" + "D7hd+cMWwIUWkfgHl1jrKRJPr7nDxStVCk1vhO8Q3RUqYkWSPykbkEuxjJow6pRbVkgI1tqr" + "baiw1qrPLZQvbu2ow6T1VPWJ4p6qk9VVjT+3vrjr7vlNJRK0XV1P51DkTAUHmD5wXzKv7c5r" + "ow4B8iXs9j/GQ5YvAbN9CaEdTmeCBpk9dR2OffAbh6mxYBldAivTvGxjqOzgwHea84mBu5H5" + "Ctj3KN/fS7vZbsST7UYuoSkkEfOuqljSOq6znRJYyy1VeUYiYndi5LhzTKVPSCkWKK6BLjOG" + "yZjan5M7fC6+cOK56Lvbm8oahS4KpIjti77jfOZ0lbWKF2rfz/afA0iba8/K44lnH4dASGbm" + "x2VfvDrICQnMlvxBbYhtSxbSdHd2mQ9L1xbiJ/CZa5FSQi434lNJJ+pSgmxQQo3L1c68HuJr" + "M5W/znXoUKllDF+w6OhaBZdT2x+L1uy/+Sy97GmmQYLR2IX+rQ1MO+Z0iJ+70NtigzPvDTMj" + "eG5wVk/0gV8pmX+jcl9dUwLkQdgBo41d6ZvtTfLnykUvs3Ox059Er4uJ8zqleRoqrmJ/ayCB" + "b6/KikHEGlxH0rCW1V6JR13JPrzLQhV2UnwC8Xc/CurcPz7ccxQiqUlBRxt+47mA3EzozDA6" + "zIkH3Jv8Yc66iy0Atax4iODpFBKUfkay8tS5kKvFpxD4lVTCvKQYuW/Hke+3vXyX6Ru/KxYC" + "O8u3Lqv3HEYoxpwm3S9WW+a8bLn/EQt53gbNMJjDBsFL0Sczbj9GtvmUe95uFShceaT5i8/g" + "Y66xJp7OK27Ot0xvc7bF6AMvugB8Kdl65/GvFmnsnXyfuMuk1kB4VkedsgQV7NjOw5eB3+r9" + "atMbnyHcy2UK8VRtiRHdvToxNX6xb54/LPR/iMXeDNdqE2qRJTzMOhgTdlnb/uGlH30putND" + "VR5Z8stqX53Q2MWJCNyazCPCwo15ACncQl3Jkt3OtFb+bJxATiyfmDnev4m7PQONd7YIx/Dh" + "Tw836d+TSjvR1mK5NjPWYivkGZdhyLWpZI+EKcIJR+S3LsHn/DkM1WMHrzRfcit8+Laq9MIu" + "aSdokVoYpB+qR1vDvWIbJyUw4/IHV9bYQufNFjotQda+jadvx7g5VFOSrWtzweNer5WlazOp" + "rh6Q5AANj8ob0wUXY15kQjVLennEfcsNB215W1u4nCazblRLE095C/m86Ji2U5yestD/BTXg" + "u9hVWv6wWxda1weTy3XL/OkvaMSJCcyuCCwupsEvtd9rRmHLnjpb9jRrxxJj6TBIPQyaAEG8" + "A+G5sn9CTKUj0BAhs6G6TqJgAlMIlPkDl3m+5+wpzgcGZkD+wF+xVc/9H/7Ksmu54rHnm+nK" + "lVnCKKuiYAGr/GIc89fRJ8dPfXf3EZLMtMsvzTDRcTu34pxJRLDUxy+dW+87QjZvhZ1UOMl9" + "0+NbTM69zfU97vjzGaufM9zrjLNvan/6Wpk6wQFoAMyIzEaQ+ZzUGHdTHZDiefx1MyZuVtZX" + "nSSb2eULaD9/Tj57QCgtzUKhEyyH3vpFtNbWH2ZV1ItabswvcGRD28iRCx4vtK+POHXuPBIf" + "xBt+/6WKoprGt9cPussOaYCfpehxX4me6swnNpwi8VpYCTpxIgJzLtKLot6Yd/73Dlb/1e6+" + "oWPx5hbeE+JChjwhI/Rt1pW5WLXCN67DtcusE6QPbvDQtuHDW9nbTR95RkVnr1pp/jZSAlm7" + "wnrbhoYdF5yfqSKg3PvqYxD91hDlVX2m9n5am069k4a+Bnf07eh8F/5FhJMT+JUSgHuVnZdv" + "YN8ynKupcHdlZjpY8WrEby7hdjtpH8QbJ9gpc3/tXtJYYZWMZOays862PR34u04V7Vk+leFV" + "DHQg5MfamfGXakZM9azj8Pf5su99XdrIKqs3G9ZhgmsCOcGA100ASsC/0nC9jlre+tk0/DAk" + "ee0y0xGLHa2ivbt6eo8NCkX1yPnp2AyPYTCYBL8TYxauhUcYdkU2bw+2VgUfUCYqv4hTsz0N" + "USuN+SjUtMJwg6wCs98HFrEp8KPGx8/jud8qhW8yQaRVhll9YyZpnKDAb50AlHN2Gm67sFOb" + "ywRoOJacm2vMtgBob57N5eSU4hupr3FZmncHY1EiU9evwQcIe/2mbMgGElFbP658f7fzqFKF" + "Z8OOkAP2a3RUTPXN70G+DDM5YYB5k1krpjZ/Tqek0QnIm+xdgHm4eHygKkG1RPlDsWU5122t" + "8mO5WoflzDrdvmBfUKuEkVUkeoOZdE6SgHFml2gCqVe+Winrmugvxxgj/j5ugYqRrWarVxt/" + "sWlItLgcIC/80V6hkOui2dHdPS+Y6eZDa/tHy2becW32IEd+Vj5gz0kN/IAIYHGMbVdC2IXN" + "2VtSKIijtUh2NKQcLlTUmNQ468iy5AfvTXcdx/ttDS7/LIg2bVDWSEp3OIVJDtNBheorodUu" + "JWFXlVkdOP+yU6tLGQUbeEPs9yuoSLU/o4i8YVD5IOnRjcPCz541Hmj8caFQSeekmuCBrzxj" + "4d56GfdyJDi5gRsYgCMT2AbG6+8dBLOrrYrfcYGcXbopyXWUtdo2J+TrerOkUB16x5hYeTMb" + "pwALL7JKZRdhVSi/3clUB0cbkQtYwWGDp8Qblw50Fp0aHNfbuWVL7PFwb3LZgUq7B8Xv3sDE" + "fMklyXcstTkp/+flFrZ/MV3sN2Ji64nfoxHIHKaWLqFwEEKagiUxYwMV0AycSGxvh2GDlNyb" + "A+SB2YpaQyclDkso1ZqKpsFAQih7eI++eQgnBDBP8x8u8vn966q9+fy5XtqLuA3aKdY2J7iC" + "GHCzwn17h/aYC8mNNiQffefa7qDrYGEkIhR62MIWDxJ4biCgfXZnxte+DXl5D9/pTTQO37z1" + "pr/XIfML8R0SXr1e+NwvuZEBgaqnTideMQQHOVgNgdsbgBGVbW/c/7Ytcah4+hnH2Vp1hVg8" + "L0a8frWDGyUr5Qu8e1PU46rq8Ba5EJbhsRtocg7MLgmzHzlmb2x37E3GxRTricFz+gEIefOZ" + "2uMSaz7KL+vPbQrrJHbzd98zyu24GcLZfGsIvCyjOq+Ny3rcAZmbhdseu1tmE16WNtoaBfZB" + "EWFceQVnnVKUIoZLPd24vXVltx6cMBWSTO5Wi+Zu5A+59XIKJWsd6J51/17YnZOs34lsTXhP" + "e97yDvbxiIrkQ9KMGq8/mhMKmJP5D6fsSwWTEUx8l1eDl5ValqmjLDEpSb5D73uNQBa0GZ9V" + "e9CBem574l3PFq9poYuR/G+Kj9aSAgZRGnawPUb3UzYEWfLbZ7s8XnUsbPVhlTJuJWet5wIe" + "cO9DqEdenAMFDIE3sgAsNrHVnn0c5EemcacSXTE51JxpGBJ1n3AjOsOTwayFJu3CzBBBdCKC" + "iSQFQVAG8p6+3DOwulHUVOL6dmSPChMGMjtsHdLb1lbHiQG8tWU+g1AYiT8NSOcXCoMbUudM" + "CzdRSCjtrBornqjzoCXai3y47cThE1aqZkFpB34QdkUEkjLzj2XkDryP6Ya0uY5XTVxT9u8e" + "nWEk/IjfWoxtns4sO1IBiszH9rb6H7i+tzmwcM9Hnoj7+m+VNo9wc0ICMzNii6+ZxNDwJ0Cy" + "7rk43YKXQmK9ZpqyOdK9lLPwW9tw5WFhYV68CeJqV+slpKr9eh8O5gVfD7L1rGvpPUm3Dcl8" + "BynzsIbcKtrfM7l+n+KNxJVpJ+nrrjs0KFnmvEDyNEdK+GQ3rqj3QN4yTmvWaOZUN0Pg92X/" + "sGlsy9+uiuBEQF06Itk3wtS8QnTiSzENloEQe/6hH4klZRGvX2dsMNxkODZacc7rQqzcQ7uV" + "KRaF2dbK05gLZ3r8L+ruEb7xMK0g/aLBz7KfIT+/uznYZEhJu5kkZvRKaHLiAbMo/6Hmvtg4" + "VsuMLaBOwyAQuI7CGBg3czj9WXJD71ezcSyUPwEKhRISwKhfIAgMpLJa3/HrA3nOK7+GwBzH" + "H1xEZ4s1eTF55W2YzX00RQxDeD81aKze8pzPoFBoeDQmdhyDaOZBQsVmCu2TYjWlsC7K/LF2" + "61ruoq4I21VCz4+s3Xw75pxl6K59W9I2NfY1GFro3/kS+5mOpX+zkcqW2vrWuA409HKJcA/8" + "lGc+ELaHwRiARHrhvmxo+ny4X1tocwKNUbpELfezyi9OmqhebW4eVD5M/JCmqOzVadhL3cnX" + "XndLv1iTR33Ioah89GFxUG5O2aMNHip91R/eTNXe2V85Pdoxw1CY6YJUNZi0H6gxGeegWwHc" + "ggCk+5dCh/5lt1Svg7dy1/rii7aJWAWOcDW6EWwcHasHw7GfBLfIPG89nkw6j/jwJn/P/d38" + "v4ri7V7bgKwkNeKXvcgc+LhWGfxqTS+3yeqYAh7OS6YrgNsOgN1+bIVmTzR6UIVm2Q7uzm0a" + "uGJuuzJ1HU9/xPJSnjZCoKu43F7E1r1n7kJsRSwUI8paFS7dYxKowmonP+z3HL167h69GHLi" + "/FDR077OYf2xCTKvX9uFPW+U2wzkLbuMpxmgfnlb43CNn+84IYEXVP7w+H/nwrvXXiZQR8Dw" + "0A9lntKYPU72ygzMJ6sfzkK7nSudaba3ODL4YU3iz7jNVo0t3MifKH/vzqthyCfn78ZUOpdO" + "iYY3Gvf5lyOuW3o5Dhb+8FxvPHlxrOx1Rkmw17bjO2b8Z0KjLadAG3uMlYKC8mM5aYHZkT9w" + "kmw74vBXbkOsB0OtZiOhImKYSfbxm6pv75xKlEmalEhnZmxnIOuwpF5ZKrbHfIzKREWhkqQK" + "KiR4dYoGownt6VjmWyYSVOzvyHVle/8eTh5gvkR00Ze0vDTJA+RL3P86G5n1JSwTWQdPrXNV" + "VTVV89VvhWdryLd4W+7ICE37eDt1k+illULc6L08SdAbzUWp7gr0UStGw6u27d+lv6Tvh+UF" + "1waAjvLt2fbtmHDVkdEz9K88x7x0LO2/Ru7nBATmSWZT7vlSwxrxs7sAeZJ9fxVY6kgisZ4s" + "l3wdtM6KN7c/z7X92XBaRpZ8Sll8Rv7kxfPMqAwL+Js6u+pSFCzAwlM/vF5fQsBrI1KxKfHn" + "2Uuy95YfHLfVU4y3yKxeEVtZ1D3zEP5wIDx0X8IDx61KVyXunC1Xet4+TD+1Wr3gtc5Ml9S3" + "9qA3JU8q0jnhgXmVP+gCZ6/u+sVOzTFkPREqlYBFaCOQmAiMIKGUoJs/hCRNQewgkzBaDuyy" + "bAKS1Gg6gRBDIBDR+RXQJAEMLR+cYvqeFGkCGsfm32VSUmaYTAgIsQ+nIriPh/NEbwUwk4IE" + "sa+XofZfjAJkUjQXGwOaxs4k07HC9UjlBIgDQsABgSD0gMQmIaYIx6/ImBxHtP44MwoUdFEy" + "5k1ZOWd9fQUwiyK2+Mj3aaCtgCyK89+uKc6ekexSLPPktvIk8B8iSgbUwbNFiLUqg/ZrvmUd" + "GgrRTrNQWgc/Ag5rU5q5s+3rWahVMmKr7dHL6Y/0z3/aa2jp8MpfnZnKAN2jKb40nLTo48QC" + "fuVnfsLEt1JfYCOANrMPHueuUMTTmZ1FCoZJMNgX16CylEMhcdL78Wma6zLGTIXMZD/llTSl" + "l63bhC9ea1Jsu7Zv8H1/cdKng8Hb88ONIGtaTYNf+syoVV5r03ptedVjmmfDfY2EqQ1vPTno" + "tAjAbMks3vx1M9CpR78A2RLbxXBPS6AzwRIJTAHHdlAtk8JAijBBg0jHKVAcP45Bg0kkQHH9" + "GbR6Go1WR0FIUhggx1EmRDaBSQoNnILE7Qbd1lDi3+y3a/MSNMAv9eDmaExGbwIb9bOefXlu" + "YbGwo2UKIiEZqcqugWWp3QKjXeYkD0ujCEZExnB8ehfecLJ5TF02NCd+g0PK8MbC7w2hdohA" + "fLipzg1v21d3L734el64QcQg9IFyeAbshcESYMA9yPwulNwrAGzs4AKYesecivF0HeG3syIL" + "NfigPXUrL9fCVZ1P9K5JedrbTfx+Fp+X2LTaM3O1V+VJTP8pSZqes4P+iEpgy4+ZNByi6uGy" + "sttm6ek/qqtv3+uDy/ePtRskLwEGvPoBMGqw7YbNYvWj1JMEE3CcYoL5UV9IZYh6JgTnD2nQ" + "QzClZghT20FeTUQEk5QziazHYnyZ9WMQiS9MTwYlLroF8riFCQY11WiNeSV8oiwBA3x66fz2" + "69J4+XslVbYa2f2jLpywkqVGYQgshoGRJZRSx8GoY2QvQ3IsDenfOzDRwgBBhLlfEAi6PbUE" + "Ye6nIC3YetmriUi/4zKdL6NBfRJyxkV2rZNL4ADve51fG0WuXWRAzsLpHz0X3LWNYDklR95C" + "DS7+O7rHB4VMpmjaffdtuIPp6gckDA2abL3Plzu5nldwKk+lafI7T+tqBe3TfSK8oU2vZtDA" + "or4nuIl/TZf8cd8CkyWmMhGAd5IAXCR2eeMfg3FYr5JzSnbPeocY7c11fr7CsyM8BYkJKYO2" + "x9TOjFQNrdcQe0AIyuC6LnKhG6ob/XzXr0cPzOpCdl2y0LyUV0Q82C+ycga0r0x2PdXDgLAE" + "FTDD8Af30dmGgbBohE7Ro3Xqo60SolMRRIyEIEFbl6BNoLRCCT+w+l/PoC/yiHOp+kFBjiMy" + "d6Ikng4t8dDAz1EAbrB/WYaFO5hQurCwnVWg0KBfQlfg7EpE0CeL0hqfugu+UmmyfZufqbjO" + "g5oFcYtS7hu8xR1lczhidQTa2IHuesv26W1b96/mNTVmUaDIVMXtbq1uS4kqMM8gshitxy1v" + "/V4bD1tUHdkVtNlqPMi8S1mDBk9/A08lDXphxKkCkcOkyxu6eofzIhmOStka6LohBuqA33V1" + "7kOZJbcEqq6k5thxo8Y8yv3bwBOa9/r8bwtjeowtEm7Ic9Z3tQDOGZ29xD1vtcuObJ8ApK1r" + "Fy1pBIUOjoXUg3EBlCEI4uNH0hSW+qwghyqTdIKaA06QGahgUiH1TCQCwYwm15KCZpCCiHby" + "TdRdHAPkx4Tl74seZlnjV6qaJTwT7l+WYALmF2YXSn6OKbyrAQVIVjew78cWsGQVY0E/jitN" + "rfNL7TwXc9OvEq6AQ3NHEi9cYuwdbPCWSbbtq9S9oPh+Z99EVHkE+Iji3iR1pcHI3qkBlcO0" + "s5+zY8oSbmadTBt5zq+4VsPvnJXtySXIgI//mt+C4v4HfgLS1QVfZ9k0axhQ5k7h2XMtBKl4" + "V/7ZrFfVUcOEJ67mtA/q5WmmhsvkrizFtdSI47EYDaGHe4X63Rt2bzmqvKNNqBhDXMmvX2Tt" + "m8TZEKEFcOio6CKNbGI/BZCwbmIrkRbf3K1STbFz17/hZTu0M+p2qW5VfInbllK60pf/UHMd" + "od5rvaRU/NH27jy9QL0yknZNXnlV5NsPv5rCnaAfrWJHJjvK7dfJSknHadh3WdV4NDcvI1je" + "Ob9+CTrgw8Dm6YRPXGkGpLOufxXc5/o9sE6OvnEEySLFwpbNso0KjutwmeYWTj53B/3zHJBr" + "GvUkctWcdg4GJPfivm9jnvglv9Eyr9ESnSfx/uBO34ocnTXTz6T5r5VEMSCNtVp5qbZoztMt" + "LYBTRkUXX7Ec4WsagOR2NTtsvJqKpSPrkbjLZAaNXDtGMY2hU2O562uxQoi0aEPMSaYp4Us0" + "FBpmVCEjYKAwFI0gXxecAnlB4dBnX8BJpt9nvKfAoPMoDWUdIo3zkowWwHmi6MVAuLm4bxyQ" + "1C5nE3m+oo2R7lELwALMAugt66EvBoQpcgDZkAa6EQsGk/zzMSCdEALK+GpG8xLPC3z01/wK" + "RD68sRGQym78x+gvi67D64p9uF1afbm1QMv78RJy2/gUg1UzvD7c+SKzR+iAsMA+/sdRNjIT" + "lObBp+fNdI8k7ZzJk1BY5R3e5Hm+RE6jSl2TvLdZ+9M0aH2JttOjYDjnPWwtgMND0YtsmQzk" + "+t9iY2fni7urlrUWlDtUOsgbAkHoY8lkBhOURCTXzg4VMtAnTEEuMuvhBaYMJhWaJG3TgdRF" + "iFyfnQ94BwUqg/motHwiTgiAuj31tkNsTS4sQQTMO8y+L/P29PELQWCd+faLOcQAjJUDibLy" + "n/wccAwTPI7F6JeQGeAGLF8+w5ynPhYmikBSv5riA6BeTTAxxLt8cBKWYEOYYpLBDaTr0flk" + "UNtOPQ0bO7ElppMDnBOKWgxujKtiDYBsg/FfNw1AODioVkXkWCrtYmoTPnUAWpJ8VOvO4KHt" + "fLxlvOdcawIx+bjmNfaV7ybp8Y3G5q2mk1ya32S2OAZvqFmC4P+bSdj0dzfHEp+1/pR17xzT" + "YC9ieuFhpdbIuFCCtFG1T1Ze6+CxMfVBi0rdfTa9O3OkNgSo1u/wSdBtfDhDe4kLcT0oeOdc" + "4X6XaxeJOd+H1jpPkDVpJ3R3xCaF3FqCDphR+IP4zJbWhZZz9ftzd6us6EMVCiEiTWbycnDF" + "5UfXl1oJi4E2dt2Y4mlQ+TTk+NbCV7FLOKihtvc6uu1tyRnc+TerVl3trWF2fAs3kTxUeZW0" + "MXfk5rTLx7B+o3evek5EWjt5mEeCHLbovL2dffLmEpzAR4f+ochu/IfIzn2zQTlXro+oVZlF" + "5k3ttsMkW2rg6TibzNDGLRNSB1QkS1orGjIc8XpyukaDPdHZa1VFK/cFdfGZy2wlSjxIDlTw" + "3xJjMW0cAUGiNE4Zgu8uMZId4DTRPzjS/ldK680gMmH1xCYsAos5SDAil7CkiAxuSsMqYk5G" + "2xBKmeDBaFx7Le2wsA5JK2zfd6I0OTiH+kbLKIPsRwZ5JhljKWEzoLrodiJo76VlTOsLVpwT" + "1rT+YJIowNj+74P6CNwrWiclDgkax7r13qPSsULQcc9BjH8IIvtXLUL3TAEVLEGJwGIkQXe3" + "ab4y3JY8ssRTA59FNv/URwVe7QCktn8f8TLXIgJNODYQ6rX82F6ydwp1d6qMm19gRXr+QF3s" + "NtewkqQjyWYT0Ps+KpdF9V+omzwoUjR7U98iLxl0szBs5tEhbXia2GBpx5uNsmcSGqLL7/yC" + "0o4ZeOEZzseXQARuKOZfpaktTb/3PTb/mn3HEt0oCp2VB+JDQEP1SAxmJho0iMWNUmhYCqMW" + "nBCdaoMpGYqGoIiUC7Hvf0EaSfrETrWw/BOoAVAT7oUs5et1LAgkU6t/xp+/pGwJIODzyf5b" + "arutvYAVA1lpoPWyDPcRrMDGVps+vEyBkCne2g6Fu3cqsnlFsh1uy9bCr57Trr72XOGEvtUX" + "TF9hYS9r+mKKA4WLviROPS5/l6txR1ZfFHzgSfESTMCnj88zbXVCtANSLdfF4h0vbbblEaum" + "dj2maEWKe1PLMjOxO/6BZxvRwSlZg7HN4xHW1+rsm2x0z59uNHavOB5cFSd0yiBnIgt+Msk8" + "1vs68fB+R9/baqEzQj0G6m2wFUEazuAaoyWyW4CzRv8gNLCzW/ZAuYjZOZ6CgqBxJgzXRxtj" + "yqGwcYO+eN/E2enCsLqJueHCicbc0SD6T2gCzDFqgMhlYBakg8IyX4FAVWcMToa7ungtQfI/" + "Nxcco2aaGVRWegRLwCJ4SN2zBRZQPRhnwoilFkwiRZixnYlUxgA2fwoJzl8JEYkCJeUS4YQb" + "kNfPqO8nTRlErtiGHOpPqpiWLqhjD+gFpHsLSOQnK7eRXfbt9t7P00sQAjMYfxAQ/yW8G9Kq" + "5rJbj+yYLFEjyaKMZbu0Uqzzi0lyKqeUy0+r9Vs3B6+UeSr6vKniZFC4goD+vhlbna/XzXlC" + "ucSzMjvWRQsc+qxUcvXUuubEW7u6w76Lm2ur7bzgFmK8BBswUyGy+JJVp4nfBCS8fx0/MyD1" + "xAQkIhrDx5JeDEt8UWRDUAOMSSBITzXTOhENH5noHBl+qxaD/BIe+hApioHljm2PGjMH+cPg" + "0aDnPyB+mi0zzB9EEGiViG7/RwqDtAQYMEfxBxGRrb26bDDHaAqdMg1OgOJ8KV6oX2AUk1Qf" + "nUHQ14rCnJuBrOo0gcKgUIIVBYaAgX6FGfYK+bn4L/HgwEzDH4Q9tvxu+uctr67DeEysf90y" + "CSX0ITmn0qYy0zYRJ0FrXfKInoZ/lPbsVb0kcGIx9E69xnFG/oNL2WPlSdjCNJNd1u/lLznp" + "Bw0d+6LwK4Khkiwsy/vO8OKxfU5LWCKAg07/IFr8q7C8rW1h6uz2o92pg3wBw3C0+K9nii63" + "rq1H1WhiHMfqRjSiFKKOpVecdP6e8Bh/Ap/1tHmdqHzvpdu8cpZR9utQdH3aN6aj4MsyD1Pm" + "zlf3vZeA+p/XJ9jq68BW3yoBiiM8nv6qFFPU/6DbyY3qhKntruNG3ml6kxUlkgizzKhYmXqm" + "XsL1CuFZZNWkdVDdwdogc+NLD/ab7HopMA2ftjskHh6Ah4kEFF5eAgi4nQAIxJZeZ/Zt0dkb" + "eAjLLvGzga12zxAoSGmW9Tg8WxVF31xcbHhs6qnjI/ULQ2YZv94/b36b835knSV1XS4+0UdN" + "yvoYdtO1r/zBuUJEVMODjuYpnvpryqmjhamcc4u0AE4//QMutuoufKHm6vqFfvzPs9fSWny5" + "t5VtP1LKerHg3vc9ArupeMalgxEfLE/sid7xSKkmSOl0xWuJcK+G2Hd29x+feZ6KTaWZPGvT" + "GeacB6YFcNIpajFM3PS9/RBQfFNjG4ixMwUFp6m1simSoxImvTpTlKLI9XHWfLa1sLAEqBXU" + "ZyxWAgT/oEjZEmlbtcQDA/+KEoB/e7bnZo8FTptPXzVnS8NpAq6t7k/G4KqqqGHw2dpuvc/R" + "MsYrRFXivA8hjDRTIwnXUQG6etGVmGdfr/evCC/E19zsN5C5lRrUemYK8vqY3gN0Ta7vElDA" + "aw8Ay/rscLb4Da3Rs7WuWYkZiHacgsWJ4hjWXNzREWOxdDkhE0Tjx0C3WhoNB26QJveBFJGg" + "ESapjEm6w8QeJA8eJoK+QSx6znTTdJZAAeYE/kMKsXqxSRQ997URQSIaOmYu434vKUd1WTbH" + "wbJQF5OyJyRrTNqizjRZPKij26RzWOQjxavg08ecF71j56vP17vmdsK+HbVKfcDTcFAnYUos" + "rGMJIuCnEgB9GzuKrWOfjS30c9mrucZ2YSyHvDD8TyMCSLamDcjeTad+dq4rRpecy/G3sDhU" + "kWvYPnmn2jWv4JAyDaRRv07Zg/lde3eMbvpBy1WNQ1+5XpWq75bWtpFaAgt4VeEPD8aMF2dc" + "UXglKQwmGBVAGYh17EM0jqKmkHGTUpgZSqkRNxPk+QuagCS4vaKNgeKY5mOmeJNUGsi9Rs/j" + "VbSI5BIEwEzAH1R7/jXtY0Na2VzT9UO5AftSkbYybnNzGcn6ArQdYYpCN7aAxAp88v2M1Vdd" + "pu8Gx+dgu+UNL+EMTKNa9fd+vr+y+p5EFaWh2nwgu/OLwNh3lfJVNj+EJgPwzNxHUmVtyztl" + "NT8scWoEcOjof6hobVqsgk/B6rEJWJJr7Ri1NoaVFnHPpUXWMQXjSJj5FyLKl+w3g6z96Ngu" + "2CxA7hM8K+cPXY/oicb4PTDFmTjKgW9BfMThTPDzX0i/X8xmIuhavt7gzdTSf7xa/wfeUnmO"; + + +/*---------------------------------------------------------------------*/ +/* Auto-generated deserializer */ +/*---------------------------------------------------------------------*/ +/*! + * \brief l_bootnum_gen3() + * + * \return pixa of labeled digits + * + *
+ * Call this way:
+ *      PIXA  *pixa = l_bootnum_gen3();   (C)
+ *      Pixa  *pixa = l_bootnum_gen3();   (C++)
+ * 
+ */ +PIXA * +l_bootnum_gen3(void) +{ +l_uint8 *data1, *data2; +l_int32 size1; +size_t size2; +PIXA *pixa; + + /* Unencode selected string, uncompress it, and read it */ + data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); + data2 = zlibUncompress(data1, size1, &size2); + pixa = pixaReadMem(data2, size2); + lept_free(data1); + lept_free(data2); + return pixa; +} + diff --git a/3rdparty/hgOCR/leptonica/bootnumgen4.c b/3rdparty/hgOCR/leptonica/bootnumgen4.c new file mode 100644 index 00000000..cd421666 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bootnumgen4.c @@ -0,0 +1,819 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bootnumgen4.c + *
+ *
+ *   Function for re-generating prog/recog/digits/bootnum4.pa from an
+ *   encoded, gzipped and serialized string.
+ *
+ *   Call this way:
+ *       PIXA  *pixa = l_bootnum_gen4(nsamp);
+ *   where nsamp is the number of digit templates requested for each
+ *   of the 10 digits.  nsamp can be anything from 1 to 100.
+
+ *   This file was generated using the stringcode utility, in recog_bootnum3.c,
+ *   slightly edited, and then merged into a single file.  That program
+ *   generated a pixa of 100 mosaic'd samples of each digit,
+ *   which was copied to recog/digits/bootnum4.pa.
+ *
+ *       L_STRCODE  *strc;
+ *       strc = strcodeCreate(212);   // arbitrary integer
+ *       strcodeGenerate(strc, "recog/digits/bootnum4.pa", "PIXA");
+ *       strcodeFinalize(&strc, ".");
+ *
+ *   The two output files, autogen.212.c and autogen.212.h, were
+ *   then slightly edited and merged into this file, and the code
+ *   to generate the pixa of sample templates was added.
+ *
+ * 
+ */ + +#include +#include "allheaders.h" + +/*---------------------------------------------------------------------*/ +/* Serialized string */ +/*---------------------------------------------------------------------*/ +static const char *l_bootnum4 = + "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" + "mn/BeBL/t2X8B2rxLZ8="; + +/*---------------------------------------------------------------------*/ +/* Deserializer with added processing */ +/*---------------------------------------------------------------------*/ +/*! + * \brief l_bootnum_gen4() + * + * \param[in] nsamp number of samples to retain for each digit + * \return pixa of labeled digits + * + *
+ * Notes:
+ *      (1) The encoded string and the code to generate pixa1 was
+ *          automatically generated.
+ *      (2) pixa1 is further processed to make the pixa of labelled digits.
+ * 
+ */ +PIXA * +l_bootnum_gen4(l_int32 nsamp) +{ +l_uint8 *data1, *data2; +l_int32 size1; +size_t size2; +PIXA *pixa1, *pixa2; + + PROCNAME("l_bootnum_gen4"); + + if (nsamp <= 0) + return (PIXA *)ERROR_PTR("invalid nsamp\n", procName, NULL); + + /* Unencode selected string, write to file, and read it */ + data1 = decodeBase64(l_bootnum4, strlen(l_bootnum4), &size1); + data2 = zlibUncompress(data1, size1, &size2); + pixa1 = pixaReadMem(data2, size2); + lept_free(data1); + lept_free(data2); + + /* pixa1 has 10 images of mosaic'd digits. Each of these images + * must be extracted into a pixa of templates, where each template + * is labeled with the digit value, and then selectively + * concatenated into an output pixa. */ + pixa2 = pixaMakeFromTiledPixa(pixa1, 20, 30, nsamp); + pixaDestroy(&pixa1); + return pixa2; +} diff --git a/3rdparty/hgOCR/leptonica/boxbasic.c b/3rdparty/hgOCR/leptonica/boxbasic.c new file mode 100644 index 00000000..d51bd3d5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxbasic.c @@ -0,0 +1,2352 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxbasic.c + *
+ *
+ *   Basic 'class' functions for box, boxa and boxaa,
+ *   including accessors and serialization.
+ *
+ *      Box creation, copy, clone, destruction
+ *           BOX      *boxCreate()
+ *           BOX      *boxCreateValid()
+ *           BOX      *boxCopy()
+ *           BOX      *boxClone()
+ *           void      boxDestroy()
+ *
+ *      Box accessors
+ *           l_int32   boxGetGeometry()
+ *           l_int32   boxSetGeometry()
+ *           l_int32   boxGetSideLocations()
+ *           l_int32   boxSetSideLocations()
+ *           l_int32   boxGetRefcount()
+ *           l_int32   boxChangeRefcount()
+ *           l_int32   boxIsValid()
+ *
+ *      Boxa creation, copy, destruction
+ *           BOXA     *boxaCreate()
+ *           BOXA     *boxaCopy()
+ *           void      boxaDestroy()
+ *
+ *      Boxa array extension
+ *           l_int32   boxaAddBox()
+ *           l_int32   boxaExtendArray()
+ *           l_int32   boxaExtendArrayToSize()
+ *
+ *      Boxa accessors
+ *           l_int32   boxaGetCount()
+ *           l_int32   boxaGetValidCount()
+ *           BOX      *boxaGetBox()
+ *           BOX      *boxaGetValidBox()
+ *           NUMA     *boxaFindInvalidBoxes()
+ *           l_int32   boxaGetBoxGeometry()
+ *           l_int32   boxaIsFull()
+ *
+ *      Boxa array modifiers
+ *           l_int32   boxaReplaceBox()
+ *           l_int32   boxaInsertBox()
+ *           l_int32   boxaRemoveBox()
+ *           l_int32   boxaRemoveBoxAndSave()
+ *           BOXA     *boxaSaveValid()
+ *           l_int32   boxaInitFull()
+ *           l_int32   boxaClear()
+ *
+ *      Boxaa creation, copy, destruction
+ *           BOXAA    *boxaaCreate()
+ *           BOXAA    *boxaaCopy()
+ *           void      boxaaDestroy()
+ *
+ *      Boxaa array extension
+ *           l_int32   boxaaAddBoxa()
+ *           l_int32   boxaaExtendArray()
+ *           l_int32   boxaaExtendArrayToSize()
+ *
+ *      Boxaa accessors
+ *           l_int32   boxaaGetCount()
+ *           l_int32   boxaaGetBoxCount()
+ *           BOXA     *boxaaGetBoxa()
+ *           BOX      *boxaaGetBox()
+ *
+ *      Boxaa array modifiers
+ *           l_int32   boxaaInitFull()
+ *           l_int32   boxaaExtendWithInit()
+ *           l_int32   boxaaReplaceBoxa()
+ *           l_int32   boxaaInsertBoxa()
+ *           l_int32   boxaaRemoveBoxa()
+ *           l_int32   boxaaAddBox()
+ *
+ *      Boxaa serialized I/O
+ *           BOXAA    *boxaaReadFromFiles()
+ *           BOXAA    *boxaaRead()
+ *           BOXAA    *boxaaReadStream()
+ *           BOXAA    *boxaaReadMem()
+ *           l_int32   boxaaWrite()
+ *           l_int32   boxaaWriteStream()
+ *           l_int32   boxaaWriteMem()
+ *
+ *      Boxa serialized I/O
+ *           BOXA     *boxaRead()
+ *           BOXA     *boxaReadStream()
+ *           BOXA     *boxaReadMem()
+ *           l_int32   boxaWriteDebug()
+ *           l_int32   boxaWrite()
+ *           l_int32   boxaWriteStream()
+ *           l_int32   boxaWriteMem()
+ *
+ *      Box print (for debug)
+ *           l_int32   boxPrintStreamInfo()
+ *
+ *   Most functions use only valid boxes, which are boxes that have both
+ *   width and height > 0.  However, a few functions, such as
+ *   boxaGetMedianVals() do not assume that all boxes are valid.  For any
+ *   function that can use a boxa with invalid boxes, it is convenient
+ *   to use these accessors:
+ *       boxaGetValidCount()   :  count of valid boxes
+ *       boxaGetValidBox()     :  returns NULL for invalid boxes
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 1000000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + +/*---------------------------------------------------------------------* + * Box creation, destruction and copy * + *---------------------------------------------------------------------*/ +/*! + * \brief boxCreate() + * + * \param[in] x, y, w, h + * \return box, or NULL on error + * + *
+ * Notes:
+ *      (1) This clips the box to the +quad.  If no part of the
+ *          box is in the +quad, this returns NULL.
+ *      (2) We allow you to make a box with w = 0 and/or h = 0.
+ *          This does not represent a valid region, but it is useful
+ *          as a placeholder in a boxa for which the index of the
+ *          box in the boxa is important.  This is an atypical
+ *          situation; usually you want to put only valid boxes with
+ *          nonzero width and height in a boxa.  If you have a boxa
+ *          with invalid boxes, the accessor boxaGetValidBox()
+ *          will return NULL on each invalid box.
+ *      (3) If you want to create only valid boxes, use boxCreateValid(),
+ *          which returns NULL if either w or h is 0.
+ * 
+ */ +BOX * +boxCreate(l_int32 x, + l_int32 y, + l_int32 w, + l_int32 h) +{ +BOX *box; + + PROCNAME("boxCreate"); + + if (w < 0 || h < 0) + return (BOX *)ERROR_PTR("w and h not both >= 0", procName, NULL); + if (x < 0) { /* take part in +quad */ + w = w + x; + x = 0; + if (w <= 0) + return (BOX *)ERROR_PTR("x < 0 and box off +quad", procName, NULL); + } + if (y < 0) { /* take part in +quad */ + h = h + y; + y = 0; + if (h <= 0) + return (BOX *)ERROR_PTR("y < 0 and box off +quad", procName, NULL); + } + + box = (BOX *)LEPT_CALLOC(1, sizeof(BOX)); + boxSetGeometry(box, x, y, w, h); + box->refcount = 1; + return box; +} + + +/*! + * \brief boxCreateValid() + * + * \param[in] x, y, w, h + * \return box, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns NULL if either w = 0 or h = 0.
+ * 
+ */ +BOX * +boxCreateValid(l_int32 x, + l_int32 y, + l_int32 w, + l_int32 h) +{ + PROCNAME("boxCreateValid"); + + if (w <= 0 || h <= 0) + return (BOX *)ERROR_PTR("w and h not both > 0", procName, NULL); + return boxCreate(x, y, w, h); +} + + +/*! + * \brief boxCopy() + * + * \param[in] box + * \return copy of box, or NULL on error + */ +BOX * +boxCopy(BOX *box) +{ +BOX *boxc; + + PROCNAME("boxCopy"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + + boxc = boxCreate(box->x, box->y, box->w, box->h); + return boxc; +} + + +/*! + * \brief boxClone() + * + * \param[in] box + * \return ptr to same box, or NULL on error + */ +BOX * +boxClone(BOX *box) +{ + + PROCNAME("boxClone"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + + boxChangeRefcount(box, 1); + return box; +} + + +/*! + * \brief boxDestroy() + * + * \param[in,out] pbox will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the box.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +boxDestroy(BOX **pbox) +{ +BOX *box; + + PROCNAME("boxDestroy"); + + if (pbox == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + if ((box = *pbox) == NULL) + return; + + boxChangeRefcount(box, -1); + if (boxGetRefcount(box) <= 0) + LEPT_FREE(box); + *pbox = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Box accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief boxGetGeometry() + * + * \param[in] box + * \param[out] px, py, pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +boxGetGeometry(BOX *box, + l_int32 *px, + l_int32 *py, + l_int32 *pw, + l_int32 *ph) +{ + PROCNAME("boxGetGeometry"); + + if (px) *px = 0; + if (py) *py = 0; + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (px) *px = box->x; + if (py) *py = box->y; + if (pw) *pw = box->w; + if (ph) *ph = box->h; + return 0; +} + + +/*! + * \brief boxSetGeometry() + * + * \param[in] box + * \param[in] x, y, w, h [optional] use -1 to leave unchanged + * \return 0 if OK, 1 on error + */ +l_ok +boxSetGeometry(BOX *box, + l_int32 x, + l_int32 y, + l_int32 w, + l_int32 h) +{ + PROCNAME("boxSetGeometry"); + + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (x != -1) box->x = x; + if (y != -1) box->y = y; + if (w != -1) box->w = w; + if (h != -1) box->h = h; + return 0; +} + + +/*! + * \brief boxGetSideLocations() + * + * \param[in] box + * \param[out] pl, pt, pr, pb [optional] each can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) All returned values are within the box.
+ * 
+ */ +l_ok +boxGetSideLocations(BOX *box, + l_int32 *pl, + l_int32 *pr, + l_int32 *pt, + l_int32 *pb) +{ +l_int32 x, y, w, h; + + PROCNAME("boxGetSideLocations"); + + if (pl) *pl = 0; + if (pr) *pr = 0; + if (pt) *pt = 0; + if (pb) *pb = 0; + if (!box) + return ERROR_INT("box not defined", procName, 1); + + boxGetGeometry(box, &x, &y, &w, &h); + if (pl) *pl = x; + if (pr) *pr = x + w - 1; + if (pt) *pt = y; + if (pb) *pb = y + h - 1; + return 0; +} + + +/*! + * \brief boxSetSideLocations() + * + * \param[in] box + * \param[in] l, r, t, b [optional] use -1 to leave unchanged + * \return 0 if OK, 1 on error + */ +l_ok +boxSetSideLocations(BOX *box, + l_int32 l, + l_int32 r, + l_int32 t, + l_int32 b) +{ +l_int32 x, y, w, h; + + PROCNAME("boxSetSideLocations"); + + if (!box) + return ERROR_INT("box not defined", procName, 1); + x = (l != -1) ? l : box->x; + w = (r != -1) ? r - x + 1 : box->x + box->w - x; + y = (t != -1) ? t : box->y; + h = (b != -1) ? b - y + 1 : box->y + box->h - y; + boxSetGeometry(box, x, y, w, h); + return 0; +} + + +/*! + * \brief Return the current reference count of %box + * + * \param[in] box + * \return refcount + */ +l_int32 +boxGetRefcount(BOX *box) +{ + PROCNAME("boxGetRefcount"); + + if (!box) + return ERROR_INT("box not defined", procName, UNDEF); + + return box->refcount; +} + +/*! + * \brief Adjust the current references count of %box by %delta + * + * \param[in] box ptr to box + * \param[in] delta adjustment, usually -1 or 1 + * \return 0 if OK, 1 on error + */ +l_ok +boxChangeRefcount(BOX *box, + l_int32 delta) +{ + PROCNAME("boxChangeRefcount"); + + if (!box) + return ERROR_INT("box not defined", procName, 1); + + box->refcount += delta; + return 0; +} + + +/*! + * \brief boxIsValid() + * + * \param[in] box + * \param[out] pvalid 1 if valid; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxIsValid(BOX *box, + l_int32 *pvalid) +{ + PROCNAME("boxIsValid"); + + if (!pvalid) + return ERROR_INT("&valid not defined", procName, 1); + *pvalid = 0; + if (!box) + return ERROR_INT("box not defined", procName, 1); + + if (box->w > 0 && box->h > 0) + *pvalid = 1; + return 0; +} + + +/*---------------------------------------------------------------------* + * Boxa creation, destruction, copy, extension * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaCreate() + * + * \param[in] n initial number of ptrs; 0 for default + * \return boxa, or NULL on error + */ +BOXA * +boxaCreate(l_int32 n) +{ +BOXA *boxa; + + PROCNAME("boxaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + boxa = (BOXA *)LEPT_CALLOC(1, sizeof(BOXA)); + boxa->n = 0; + boxa->nalloc = n; + boxa->refcount = 1; + if ((boxa->box = (BOX **)LEPT_CALLOC(n, sizeof(BOX *))) == NULL) { + boxaDestroy(&boxa); + return (BOXA *)ERROR_PTR("boxa ptrs not made", procName, NULL); + } + return boxa; +} + + +/*! + * \brief boxaCopy() + * + * \param[in] boxa + * \param[in] copyflag L_COPY, L_CLONE, L_COPY_CLONE + * \return new boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) See pix.h for description of the copyflag.
+ *      (2) The copy-clone makes a new boxa that holds clones of each box.
+ * 
+ */ +BOXA * +boxaCopy(BOXA *boxa, + l_int32 copyflag) +{ +l_int32 i; +BOX *boxc; +BOXA *boxac; + + PROCNAME("boxaCopy"); + + if (!boxa) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + + if (copyflag == L_CLONE) { + boxa->refcount++; + return boxa; + } + + if (copyflag != L_COPY && copyflag != L_COPY_CLONE) + return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + if ((boxac = boxaCreate(boxa->nalloc)) == NULL) + return (BOXA *)ERROR_PTR("boxac not made", procName, NULL); + for (i = 0; i < boxa->n; i++) { + if (copyflag == L_COPY) + boxc = boxaGetBox(boxa, i, L_COPY); + else /* copy-clone */ + boxc = boxaGetBox(boxa, i, L_CLONE); + boxaAddBox(boxac, boxc, L_INSERT); + } + return boxac; +} + + +/*! + * \brief boxaDestroy() + * + * \param[in,out] pboxa will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the boxa.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +boxaDestroy(BOXA **pboxa) +{ +l_int32 i; +BOXA *boxa; + + PROCNAME("boxaDestroy"); + + if (pboxa == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((boxa = *pboxa) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the boxa. */ + boxa->refcount--; + if (boxa->refcount <= 0) { + for (i = 0; i < boxa->n; i++) + boxDestroy(&boxa->box[i]); + LEPT_FREE(boxa->box); + LEPT_FREE(boxa); + } + + *pboxa = NULL; + return; +} + + +/*! + * \brief boxaAddBox() + * + * \param[in] boxa + * \param[in] box to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +boxaAddBox(BOXA *boxa, + BOX *box, + l_int32 copyflag) +{ +l_int32 n; +BOX *boxc; + + PROCNAME("boxaAddBox"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + if (copyflag == L_INSERT) + boxc = box; + else if (copyflag == L_COPY) + boxc = boxCopy(box); + else if (copyflag == L_CLONE) + boxc = boxClone(box); + else + return ERROR_INT("invalid copyflag", procName, 1); + if (!boxc) + return ERROR_INT("boxc not made", procName, 1); + + n = boxaGetCount(boxa); + if (n >= boxa->nalloc) + boxaExtendArray(boxa); + boxa->box[n] = boxc; + boxa->n++; + + return 0; +} + + +/*! + * \brief boxaExtendArray() + * + * \param[in] boxa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Reallocs with doubled size of ptr array.
+ * 
+ */ +l_ok +boxaExtendArray(BOXA *boxa) +{ + PROCNAME("boxaExtendArray"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + return boxaExtendArrayToSize(boxa, 2 * boxa->nalloc); +} + + +/*! + * \brief boxaExtendArrayToSize() + * + * \param[in] boxa + * \param[in] size new size of boxa array + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If necessary, reallocs new boxa ptr array to %size.
+ * 
+ */ +l_ok +boxaExtendArrayToSize(BOXA *boxa, + l_int32 size) +{ + PROCNAME("boxaExtendArrayToSize"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + if (size > boxa->nalloc) { + if ((boxa->box = (BOX **)reallocNew((void **)&boxa->box, + sizeof(BOX *) * boxa->nalloc, + size * sizeof(BOX *))) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + boxa->nalloc = size; + } + return 0; +} + + +/*---------------------------------------------------------------------* + * Boxa accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaGetCount() + * + * \param[in] boxa + * \return count of all boxes; 0 if no boxes or on error + */ +l_int32 +boxaGetCount(BOXA *boxa) +{ + PROCNAME("boxaGetCount"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 0); + return boxa->n; +} + + +/*! + * \brief boxaGetValidCount() + * + * \param[in] boxa + * \return count of valid boxes; 0 if no valid boxes or on error + */ +l_int32 +boxaGetValidCount(BOXA *boxa) +{ +l_int32 n, i, w, h, count; + + PROCNAME("boxaGetValidCount"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 0); + + n = boxaGetCount(boxa); + for (i = 0, count = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + if (w > 0 && h > 0) + count++; + } + return count; +} + + +/*! + * \brief boxaGetBox() + * + * \param[in] boxa + * \param[in] index to the index-th box + * \param[in] accessflag L_COPY or L_CLONE + * \return box, or NULL on error + */ +BOX * +boxaGetBox(BOXA *boxa, + l_int32 index, + l_int32 accessflag) +{ + PROCNAME("boxaGetBox"); + + if (!boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + if (index < 0 || index >= boxa->n) + return (BOX *)ERROR_PTR("index not valid", procName, NULL); + + if (accessflag == L_COPY) + return boxCopy(boxa->box[index]); + else if (accessflag == L_CLONE) + return boxClone(boxa->box[index]); + else + return (BOX *)ERROR_PTR("invalid accessflag", procName, NULL); +} + + +/*! + * \brief boxaGetValidBox() + * + * \param[in] boxa + * \param[in] index to the index-th box + * \param[in] accessflag L_COPY or L_CLONE + * \return box, or NULL if box is not valid or on error + * + *
+ * Notes:
+ *      (1) This returns NULL for an invalid box in a boxa.
+ *          For a box to be valid, both the width and height must be > 0.
+ *      (2) We allow invalid boxes, with w = 0 or h = 0, as placeholders
+ *          in boxa for which the index of the box in the boxa is important.
+ *          This is an atypical situation; usually you want to put only
+ *          valid boxes in a boxa.
+ * 
+ */ +BOX * +boxaGetValidBox(BOXA *boxa, + l_int32 index, + l_int32 accessflag) +{ +l_int32 w, h; +BOX *box; + + PROCNAME("boxaGetValidBox"); + + if (!boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + + if ((box = boxaGetBox(boxa, index, accessflag)) == NULL) + return (BOX *)ERROR_PTR("box not returned", procName, NULL); + boxGetGeometry(box, NULL, NULL, &w, &h); + if (w <= 0 || h <= 0) /* not valid, but not necessarily an error */ + boxDestroy(&box); + return box; +} + + +/*! + * \brief boxaFindInvalidBoxes() + * + * \param[in] boxa + * \return na numa of invalid boxes; NULL if there are none or on error + */ +NUMA * +boxaFindInvalidBoxes(BOXA *boxa) +{ +l_int32 i, n, w, h; +NUMA *na; + + PROCNAME("boxaFindInvalidBoxes"); + + if (!boxa) + return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); + + n = boxaGetCount(boxa); + if (boxaGetValidCount(boxa) == n) + return NULL; + + na = numaMakeConstant(0, n); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + if (w == 0 || h == 0) + numaSetValue(na, i, 1); + } + return na; +} + + +/*! + * \brief boxaGetBoxGeometry() + * + * \param[in] boxa + * \param[in] index to the index-th box + * \param[out] px, py, pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +boxaGetBoxGeometry(BOXA *boxa, + l_int32 index, + l_int32 *px, + l_int32 *py, + l_int32 *pw, + l_int32 *ph) +{ +BOX *box; + + PROCNAME("boxaGetBoxGeometry"); + + if (px) *px = 0; + if (py) *py = 0; + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (index < 0 || index >= boxa->n) + return ERROR_INT("index not valid", procName, 1); + + if ((box = boxaGetBox(boxa, index, L_CLONE)) == NULL) + return ERROR_INT("box not found!", procName, 1); + boxGetGeometry(box, px, py, pw, ph); + boxDestroy(&box); + return 0; +} + + +/*! + * \brief boxaIsFull() + * + * \param[in] boxa + * \param[out] pfull 1 if boxa is full; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxaIsFull(BOXA *boxa, + l_int32 *pfull) +{ +l_int32 i, n, full; +BOX *box; + + PROCNAME("boxaIsFull"); + + if (!pfull) + return ERROR_INT("&full not defined", procName, 1); + *pfull = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + full = 1; + for (i = 0; i < n; i++) { + if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) { + full = 0; + break; + } + boxDestroy(&box); + } + *pfull = full; + return 0; +} + + +/*---------------------------------------------------------------------* + * Boxa array modifiers * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaReplaceBox() + * + * \param[in] boxa + * \param[in] index to the index-th box + * \param[in] box insert this box to replace existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place replacement of one box; the input %box is now
+ *          owned by the boxa.
+ *      (2) The previous box at that location, if any, is destroyed.
+ * 
+ */ +l_ok +boxaReplaceBox(BOXA *boxa, + l_int32 index, + BOX *box) +{ + PROCNAME("boxaReplaceBox"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (index < 0 || index >= boxa->n) + return ERROR_INT("index not valid", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + boxDestroy(&(boxa->box[index])); + boxa->box[index] = box; + return 0; +} + + +/*! + * \brief boxaInsertBox() + * + * \param[in] boxa + * \param[in] index location in boxa to insert new value + * \param[in] box new box to be inserted; the boxa now owns it + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts box[i] --> box[i + 1] for all i >= index,
+ *          and then inserts box as box[index].
+ *      (2) To insert at the beginning of the array, set index = 0.
+ *      (3) To append to the array, it's easier to use boxaAddBox().
+ *      (4) This should not be used repeatedly to insert into large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +boxaInsertBox(BOXA *boxa, + l_int32 index, + BOX *box) +{ +l_int32 i, n; +BOX **array; + + PROCNAME("boxaInsertBox"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + n = boxaGetCount(boxa); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + if (n >= boxa->nalloc) + boxaExtendArray(boxa); + array = boxa->box; + boxa->n++; + for (i = n; i > index; i--) + array[i] = array[i - 1]; + array[index] = box; + + return 0; +} + + +/*! + * \brief boxaRemoveBox() + * + * \param[in] boxa + * \param[in] index of box to be removed and destroyed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes box[index] and then shifts
+ *          box[i] --> box[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly to remove boxes from
+ *          large arrays, because the function is O(n).
+ * 
+ */ +l_ok +boxaRemoveBox(BOXA *boxa, + l_int32 index) +{ + return boxaRemoveBoxAndSave(boxa, index, NULL); +} + + +/*! + * \brief boxaRemoveBoxAndSave() + * + * \param[in] boxa + * \param[in] index of box to be removed + * \param[out] pbox [optional] removed box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes box[index] and then shifts
+ *          box[i] --> box[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly to remove boxes from
+ *          large arrays, because the function is O(n).
+ * 
+ */ +l_ok +boxaRemoveBoxAndSave(BOXA *boxa, + l_int32 index, + BOX **pbox) +{ +l_int32 i, n; +BOX **array; + + PROCNAME("boxaRemoveBoxAndSave"); + + if (pbox) *pbox = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + n = boxaGetCount(boxa); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + if (pbox) + *pbox = boxaGetBox(boxa, index, L_CLONE); + array = boxa->box; + boxDestroy(&array[index]); + for (i = index + 1; i < n; i++) + array[i - 1] = array[i]; + array[n - 1] = NULL; + boxa->n--; + + return 0; +} + + +/*! + * \brief boxaSaveValid() + * + * \param[in] boxas + * \param[in] copyflag L_COPY or L_CLONE + * \return boxad if OK, NULL on error + * + *
+ * Notes:
+ *      (1) This makes a copy/clone of each valid box.
+ * 
+ */ +BOXA * +boxaSaveValid(BOXA *boxas, + l_int32 copyflag) +{ +l_int32 i, n; +BOX *box; +BOXA *boxad; + + PROCNAME("boxaSaveValid"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + n = boxaGetCount(boxas); + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxas, i, copyflag)) != NULL) + boxaAddBox(boxad, box, L_INSERT); + } + + return boxad; +} + + +/*! + * \brief boxaInitFull() + * + * \param[in] boxa typically empty + * \param[in] box [optional] to be replicated into the entire ptr array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This initializes a boxa by filling up the entire box ptr array
+ *          with copies of %box.  If %box == NULL, use a placeholder box
+ *          of zero size.  Any existing boxes are destroyed.
+ *          After this opepration, the number of boxes is equal to
+ *          the number of allocated ptrs.
+ *      (2) Note that we use boxaReplaceBox() instead of boxaInsertBox().
+ *          They both have the same effect when inserting into a NULL ptr
+ *          in the boxa ptr array:
+ *      (3) Example usage.  This function is useful to prepare for a
+ *          random insertion (or replacement) of boxes into a boxa.
+ *          To randomly insert boxes into a boxa, up to some index "max":
+ *             Boxa *boxa = boxaCreate(max);
+ *             boxaInitFull(boxa, NULL);
+ *          If you want placeholder boxes of non-zero size:
+ *             Boxa *boxa = boxaCreate(max);
+ *             Box *box = boxCreate(...);
+ *             boxaInitFull(boxa, box);
+ *             boxDestroy(&box);
+ *          If we have an existing boxa with a smaller ptr array, it can
+ *          be reused for up to max boxes:
+ *             boxaExtendArrayToSize(boxa, max);
+ *             boxaInitFull(boxa, NULL);
+ *          The initialization allows the boxa to always be properly
+ *          filled, even if all the boxes are not later replaced.
+ *          If you want to know which boxes have been replaced,
+ *          and you initialized with invalid zero-sized boxes,
+ *          use boxaGetValidBox() to return NULL for the invalid boxes.
+ * 
+ */ +l_ok +boxaInitFull(BOXA *boxa, + BOX *box) +{ +l_int32 i, n; +BOX *boxt; + + PROCNAME("boxaInitFull"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxa->nalloc; + boxa->n = n; + for (i = 0; i < n; i++) { + if (box) + boxt = boxCopy(box); + else + boxt = boxCreate(0, 0, 0, 0); + boxaReplaceBox(boxa, i, boxt); + } + return 0; +} + + +/*! + * \brief boxaClear() + * + * \param[in] boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys all boxes in the boxa, setting the ptrs
+ *          to null.  The number of allocated boxes, n, is set to 0.
+ * 
+ */ +l_ok +boxaClear(BOXA *boxa) +{ +l_int32 i, n; + + PROCNAME("boxaClear"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) + boxDestroy(&boxa->box[i]); + boxa->n = 0; + return 0; +} + + +/*--------------------------------------------------------------------------* + * Boxaa creation, destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief boxaaCreate() + * + * \param[in] n size of boxa ptr array to be alloc'd; 0 for default + * \return baa, or NULL on error + */ +BOXAA * +boxaaCreate(l_int32 n) +{ +BOXAA *baa; + + PROCNAME("boxaaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + baa = (BOXAA *)LEPT_CALLOC(1, sizeof(BOXAA)); + if ((baa->boxa = (BOXA **)LEPT_CALLOC(n, sizeof(BOXA *))) == NULL) { + boxaaDestroy(&baa); + return (BOXAA *)ERROR_PTR("boxa ptr array not made", procName, NULL); + } + baa->nalloc = n; + baa->n = 0; + return baa; +} + + +/*! + * \brief boxaaCopy() + * + * \param[in] baas input boxaa to be copied + * \param[in] copyflag L_COPY, L_CLONE + * \return baad new boxaa, composed of copies or clones of the boxa + * in baas, or NULL on error + * + *
+ * Notes:
+ *      (1) L_COPY makes a copy of each boxa in baas.
+ *          L_CLONE makes a clone of each boxa in baas.
+ * 
+ */ +BOXAA * +boxaaCopy(BOXAA *baas, + l_int32 copyflag) +{ +l_int32 i, n; +BOXA *boxa; +BOXAA *baad; + + PROCNAME("boxaaCopy"); + + if (!baas) + return (BOXAA *)ERROR_PTR("baas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); + + n = boxaaGetCount(baas); + baad = boxaaCreate(n); + for (i = 0; i < n; i++) { + boxa = boxaaGetBoxa(baas, i, copyflag); + boxaaAddBoxa(baad, boxa, L_INSERT); + } + + return baad; +} + + +/*! + * \brief boxaaDestroy() + * + * \param[in,out] pbaa will be set to null before returning + */ +void +boxaaDestroy(BOXAA **pbaa) +{ +l_int32 i; +BOXAA *baa; + + PROCNAME("boxaaDestroy"); + + if (pbaa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((baa = *pbaa) == NULL) + return; + + for (i = 0; i < baa->n; i++) + boxaDestroy(&baa->boxa[i]); + LEPT_FREE(baa->boxa); + LEPT_FREE(baa); + *pbaa = NULL; + + return; +} + + + +/*--------------------------------------------------------------------------* + * Add Boxa to Boxaa * + *--------------------------------------------------------------------------*/ +/*! + * \brief boxaaAddBoxa() + * + * \param[in] baa + * \param[in] ba to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +boxaaAddBoxa(BOXAA *baa, + BOXA *ba, + l_int32 copyflag) +{ +l_int32 n; +BOXA *bac; + + PROCNAME("boxaaAddBoxa"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) + return ERROR_INT("invalid copyflag", procName, 1); + + if (copyflag == L_INSERT) + bac = ba; + else + bac = boxaCopy(ba, copyflag); + + n = boxaaGetCount(baa); + if (n >= baa->nalloc) + boxaaExtendArray(baa); + baa->boxa[n] = bac; + baa->n++; + return 0; +} + + +/*! + * \brief boxaaExtendArray() + * + * \param[in] baa + * \return 0 if OK, 1 on error + */ +l_ok +boxaaExtendArray(BOXAA *baa) +{ + + PROCNAME("boxaaExtendArray"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + if ((baa->boxa = (BOXA **)reallocNew((void **)&baa->boxa, + sizeof(BOXA *) * baa->nalloc, + 2 * sizeof(BOXA *) * baa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + baa->nalloc *= 2; + return 0; +} + + +/*! + * \brief boxaaExtendArrayToSize() + * + * \param[in] baa + * \param[in] size new size of boxa array + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If necessary, reallocs the boxa ptr array to %size.
+ * 
+ */ +l_ok +boxaaExtendArrayToSize(BOXAA *baa, + l_int32 size) +{ + PROCNAME("boxaaExtendArrayToSize"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + if (size > baa->nalloc) { + if ((baa->boxa = (BOXA **)reallocNew((void **)&baa->boxa, + sizeof(BOXA *) * baa->nalloc, + size * sizeof(BOXA *))) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + baa->nalloc = size; + } + return 0; +} + + +/*----------------------------------------------------------------------* + * Boxaa accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief boxaaGetCount() + * + * \param[in] baa + * \return count number of boxa, or 0 if no boxa or on error + */ +l_int32 +boxaaGetCount(BOXAA *baa) +{ + PROCNAME("boxaaGetCount"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 0); + return baa->n; +} + + +/*! + * \brief boxaaGetBoxCount() + * + * \param[in] baa + * \return count number of boxes, or 0 if no boxes or on error + */ +l_int32 +boxaaGetBoxCount(BOXAA *baa) +{ +BOXA *boxa; +l_int32 n, sum, i; + + PROCNAME("boxaaGetBoxCount"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 0); + + n = boxaaGetCount(baa); + for (sum = 0, i = 0; i < n; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + sum += boxaGetCount(boxa); + boxaDestroy(&boxa); + } + + return sum; +} + + +/*! + * \brief boxaaGetBoxa() + * + * \param[in] baa + * \param[in] index to the index-th boxa + * \param[in] accessflag L_COPY or L_CLONE + * \return boxa, or NULL on error + */ +BOXA * +boxaaGetBoxa(BOXAA *baa, + l_int32 index, + l_int32 accessflag) +{ +l_int32 n; + + PROCNAME("boxaaGetBoxa"); + + if (!baa) + return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); + n = boxaaGetCount(baa); + if (index < 0 || index >= n) + return (BOXA *)ERROR_PTR("index not valid", procName, NULL); + if (accessflag != L_COPY && accessflag != L_CLONE) + return (BOXA *)ERROR_PTR("invalid accessflag", procName, NULL); + + return boxaCopy(baa->boxa[index], accessflag); +} + + +/*! + * \brief boxaaGetBox() + * + * \param[in] baa + * \param[in] iboxa index into the boxa array in the boxaa + * \param[in] ibox index into the box array in the boxa + * \param[in] accessflag L_COPY or L_CLONE + * \return box, or NULL on error + */ +BOX * +boxaaGetBox(BOXAA *baa, + l_int32 iboxa, + l_int32 ibox, + l_int32 accessflag) +{ +BOX *box; +BOXA *boxa; + + PROCNAME("boxaaGetBox"); + + if ((boxa = boxaaGetBoxa(baa, iboxa, L_CLONE)) == NULL) + return (BOX *)ERROR_PTR("boxa not retrieved", procName, NULL); + if ((box = boxaGetBox(boxa, ibox, accessflag)) == NULL) + L_ERROR("box not retrieved\n", procName); + boxaDestroy(&boxa); + return box; +} + + +/*----------------------------------------------------------------------* + * Boxaa array modifiers * + *----------------------------------------------------------------------*/ +/*! + * \brief boxaaInitFull() + * + * \param[in] baa typically empty + * \param[in] boxa to be replicated into the entire ptr array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This initializes a boxaa by filling up the entire boxa ptr array
+ *          with copies of %boxa.  Any existing boxa are destroyed.
+ *          After this operation, the number of boxa is equal to
+ *          the number of allocated ptrs.
+ *      (2) Note that we use boxaaReplaceBox() instead of boxaInsertBox().
+ *          They both have the same effect when inserting into a NULL ptr
+ *          in the boxa ptr array
+ *      (3) Example usage.  This function is useful to prepare for a
+ *          random insertion (or replacement) of boxa into a boxaa.
+ *          To randomly insert boxa into a boxaa, up to some index "max":
+ *             Boxaa *baa = boxaaCreate(max);
+ *               // initialize the boxa
+ *             Boxa *boxa = boxaCreate(...);
+ *             ...  [optionally fix with boxes]
+ *             boxaaInitFull(baa, boxa);
+ *          A typical use is to initialize the array with empty boxa,
+ *          and to replace only a subset that must be aligned with
+ *          something else, such as a pixa.
+ * 
+ */ +l_ok +boxaaInitFull(BOXAA *baa, + BOXA *boxa) +{ +l_int32 i, n; +BOXA *boxat; + + PROCNAME("boxaaInitFull"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = baa->nalloc; + baa->n = n; + for (i = 0; i < n; i++) { + boxat = boxaCopy(boxa, L_COPY); + boxaaReplaceBoxa(baa, i, boxat); + } + return 0; +} + + +/*! + * \brief boxaaExtendWithInit() + * + * \param[in] baa + * \param[in] maxindex + * \param[in] boxa to be replicated into the extended ptr array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This should be used on an existing boxaa that has been
+ *          fully loaded with boxa.  It then extends the boxaa,
+ *          loading all the additional ptrs with copies of boxa.
+ *          Typically, boxa will be empty.
+ * 
+ */ +l_ok +boxaaExtendWithInit(BOXAA *baa, + l_int32 maxindex, + BOXA *boxa) +{ +l_int32 i, n; + + PROCNAME("boxaaExtendWithInit"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + /* Extend the ptr array if necessary */ + n = boxaaGetCount(baa); + if (maxindex < n) return 0; + boxaaExtendArrayToSize(baa, maxindex + 1); + + /* Fill the new entries with copies of boxa */ + for (i = n; i <= maxindex; i++) + boxaaAddBoxa(baa, boxa, L_COPY); + return 0; +} + + +/*! + * \brief boxaaReplaceBoxa() + * + * \param[in] baa + * \param[in] index to the index-th boxa + * \param[in] boxa insert and replace any existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Any existing boxa is destroyed, and the input one
+ *          is inserted in its place.
+ *      (2) If the index is invalid, return 1 (error)
+ * 
+ */ +l_ok +boxaaReplaceBoxa(BOXAA *baa, + l_int32 index, + BOXA *boxa) +{ +l_int32 n; + + PROCNAME("boxaaReplaceBoxa"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + n = boxaaGetCount(baa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + + boxaDestroy(&baa->boxa[index]); + baa->boxa[index] = boxa; + return 0; +} + + +/*! + * \brief boxaaInsertBoxa() + * + * \param[in] baa + * \param[in] index location in boxaa to insert new boxa + * \param[in] boxa new boxa to be inserted + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts boxa[i] --> boxa[i + 1] for all i >= index,
+ *          and then inserts boxa as boxa[index].
+ *      (2) To insert at the beginning of the array, set index = 0.
+ *      (3) To append to the array, it's easier to use boxaaAddBoxa().
+ *      (4) This should not be used repeatedly to insert into large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +boxaaInsertBoxa(BOXAA *baa, + l_int32 index, + BOXA *boxa) +{ +l_int32 i, n; +BOXA **array; + + PROCNAME("boxaaInsertBoxa"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + n = boxaaGetCount(baa); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + if (n >= baa->nalloc) + boxaaExtendArray(baa); + array = baa->boxa; + baa->n++; + for (i = n; i > index; i--) + array[i] = array[i - 1]; + array[index] = boxa; + + return 0; +} + + +/*! + * \brief boxaaRemoveBoxa() + * + * \param[in] baa + * \param[in] index of the boxa to be removed and destroyed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes boxa[index] and then shifts
+ *          boxa[i] --> boxa[i - 1] for all i > index.
+ *      (2) The removed boxaa is destroyed.
+ *      (2) This should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +boxaaRemoveBoxa(BOXAA *baa, + l_int32 index) +{ +l_int32 i, n; +BOXA **array; + + PROCNAME("boxaaRemoveBox"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + n = boxaaGetCount(baa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + + array = baa->boxa; + boxaDestroy(&array[index]); + for (i = index + 1; i < n; i++) + array[i - 1] = array[i]; + array[n - 1] = NULL; + baa->n--; + + return 0; +} + + +/*! + * \brief boxaaAddBox() + * + * \param[in] baa + * \param[in] index of boxa with boxaa + * \param[in] box to be added + * \param[in] accessflag L_INSERT, L_COPY or L_CLONE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Adds to an existing boxa only.
+ * 
+ */ +l_ok +boxaaAddBox(BOXAA *baa, + l_int32 index, + BOX *box, + l_int32 accessflag) +{ +l_int32 n; +BOXA *boxa; + PROCNAME("boxaaAddBox"); + + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + n = boxaaGetCount(baa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + if (accessflag != L_INSERT && accessflag != L_COPY && accessflag != L_CLONE) + return ERROR_INT("invalid accessflag", procName, 1); + + boxa = boxaaGetBoxa(baa, index, L_CLONE); + boxaAddBox(boxa, box, accessflag); + boxaDestroy(&boxa); + return 0; +} + + +/*---------------------------------------------------------------------* + * Boxaa serialized I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaaReadFromFiles() + * + * \param[in] dirname directory + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] first 0-based + * \param[in] nfiles use 0 for everything from %first to the end + * \return baa, or NULL on error or if no boxa files are found. + * + *
+ * Notes:
+ *      (1) The files must be serialized boxa files (e.g., *.ba).
+ *          If some files cannot be read, warnings are issued.
+ *      (2) Use %substr to filter filenames in the directory.  If
+ *          %substr == NULL, this takes all files.
+ *      (3) After filtering, use %first and %nfiles to select
+ *          a contiguous set of files, that have been lexically
+ *          sorted in increasing order.
+ * 
+ */ +BOXAA * +boxaaReadFromFiles(const char *dirname, + const char *substr, + l_int32 first, + l_int32 nfiles) +{ +char *fname; +l_int32 i, n; +BOXA *boxa; +BOXAA *baa; +SARRAY *sa; + + PROCNAME("boxaaReadFromFiles"); + + if (!dirname) + return (BOXAA *)ERROR_PTR("dirname not defined", procName, NULL); + + sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); + if (!sa || ((n = sarrayGetCount(sa)) == 0)) { + sarrayDestroy(&sa); + return (BOXAA *)ERROR_PTR("no pixa files found", procName, NULL); + } + + baa = boxaaCreate(n); + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + if ((boxa = boxaRead(fname)) == NULL) { + L_ERROR("boxa not read for %d-th file", procName, i); + continue; + } + boxaaAddBoxa(baa, boxa, L_INSERT); + } + + sarrayDestroy(&sa); + return baa; +} + + +/*! + * \brief boxaaRead() + * + * \param[in] filename + * \return boxaa, or NULL on error + */ +BOXAA * +boxaaRead(const char *filename) +{ +FILE *fp; +BOXAA *baa; + + PROCNAME("boxaaRead"); + + if (!filename) + return (BOXAA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (BOXAA *)ERROR_PTR("stream not opened", procName, NULL); + baa = boxaaReadStream(fp); + fclose(fp); + if (!baa) + return (BOXAA *)ERROR_PTR("boxaa not read", procName, NULL); + return baa; +} + + +/*! + * \brief boxaaReadStream() + * + * \param[in] fp input file stream + * \return boxaa, or NULL on error + */ +BOXAA * +boxaaReadStream(FILE *fp) +{ +l_int32 n, i, x, y, w, h, version; +l_int32 ignore; +BOXA *boxa; +BOXAA *baa; + + PROCNAME("boxaaReadStream"); + + if (!fp) + return (BOXAA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nBoxaa Version %d\n", &version) != 1) + return (BOXAA *)ERROR_PTR("not a boxaa file", procName, NULL); + if (version != BOXAA_VERSION_NUMBER) + return (BOXAA *)ERROR_PTR("invalid boxa version", procName, NULL); + if (fscanf(fp, "Number of boxa = %d\n", &n) != 1) + return (BOXAA *)ERROR_PTR("not a boxaa file", procName, NULL); + + if ((baa = boxaaCreate(n)) == NULL) + return (BOXAA *)ERROR_PTR("boxaa not made", procName, NULL); + for (i = 0; i < n; i++) { + if (fscanf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", + &ignore, &x, &y, &w, &h) != 5) { + boxaaDestroy(&baa); + return (BOXAA *)ERROR_PTR("boxa descr not valid", procName, NULL); + } + if ((boxa = boxaReadStream(fp)) == NULL) { + boxaaDestroy(&baa); + return (BOXAA *)ERROR_PTR("boxa not made", procName, NULL); + } + boxaaAddBoxa(baa, boxa, L_INSERT); + } + return baa; +} + + +/*! + * \brief boxaaReadMem() + * + * \param[in] data serialization of boxaa; in ascii + * \param[in] size of data in bytes; can use strlen to get it + * \return baa, or NULL on error + */ +BOXAA * +boxaaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +BOXAA *baa; + + PROCNAME("boxaaReadMem"); + + if (!data) + return (BOXAA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (BOXAA *)ERROR_PTR("stream not opened", procName, NULL); + + baa = boxaaReadStream(fp); + fclose(fp); + if (!baa) L_ERROR("baa not read\n", procName); + return baa; +} + + +/*! + * \brief boxaaWrite() + * + * \param[in] filename + * \param[in] baa + * \return 0 if OK, 1 on error + */ +l_ok +boxaaWrite(const char *filename, + BOXAA *baa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("boxaaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = boxaaWriteStream(fp, baa); + fclose(fp); + if (ret) + return ERROR_INT("baa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief boxaaWriteStream() + * + * \param[in] fp output file stream + * \param[in] baa + * \return 0 if OK, 1 on error + */ +l_ok +boxaaWriteStream(FILE *fp, + BOXAA *baa) +{ +l_int32 n, i, x, y, w, h; +BOX *box; +BOXA *boxa; + + PROCNAME("boxaaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + n = boxaaGetCount(baa); + fprintf(fp, "\nBoxaa Version %d\n", BOXAA_VERSION_NUMBER); + fprintf(fp, "Number of boxa = %d\n", n); + + for (i = 0; i < n; i++) { + if ((boxa = boxaaGetBoxa(baa, i, L_CLONE)) == NULL) + return ERROR_INT("boxa not found", procName, 1); + boxaGetExtent(boxa, NULL, NULL, &box); + boxGetGeometry(box, &x, &y, &w, &h); + fprintf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", + i, x, y, w, h); + boxaWriteStream(fp, boxa); + boxDestroy(&box); + boxaDestroy(&boxa); + } + return 0; +} + + +/*! + * \brief boxaaWriteMem() + * + * \param[out] pdata data of serialized boxaa; ascii + * \param[out] psize size of returned data + * \param[in] baa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a boxaa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +boxaaWriteMem(l_uint8 **pdata, + size_t *psize, + BOXAA *baa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("boxaaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = boxaaWriteStream(fp, baa); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = boxaaWriteStream(fp, baa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*---------------------------------------------------------------------* + * Boxa serialized I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaRead() + * + * \param[in] filename + * \return boxa, or NULL on error + */ +BOXA * +boxaRead(const char *filename) +{ +FILE *fp; +BOXA *boxa; + + PROCNAME("boxaRead"); + + if (!filename) + return (BOXA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (BOXA *)ERROR_PTR("stream not opened", procName, NULL); + boxa = boxaReadStream(fp); + fclose(fp); + if (!boxa) + return (BOXA *)ERROR_PTR("boxa not read", procName, NULL); + return boxa; +} + + +/*! + * \brief boxaReadStream() + * + * \param[in] fp input file stream + * \return boxa, or NULL on error + */ +BOXA * +boxaReadStream(FILE *fp) +{ +l_int32 n, i, x, y, w, h, version; +l_int32 ignore; +BOX *box; +BOXA *boxa; + + PROCNAME("boxaReadStream"); + + if (!fp) + return (BOXA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nBoxa Version %d\n", &version) != 1) + return (BOXA *)ERROR_PTR("not a boxa file", procName, NULL); + if (version != BOXA_VERSION_NUMBER) + return (BOXA *)ERROR_PTR("invalid boxa version", procName, NULL); + if (fscanf(fp, "Number of boxes = %d\n", &n) != 1) + return (BOXA *)ERROR_PTR("not a boxa file", procName, NULL); + + if ((boxa = boxaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); + for (i = 0; i < n; i++) { + if (fscanf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", + &ignore, &x, &y, &w, &h) != 5) { + boxaDestroy(&boxa); + return (BOXA *)ERROR_PTR("box descr not valid", procName, NULL); + } + box = boxCreate(x, y, w, h); + boxaAddBox(boxa, box, L_INSERT); + } + + return boxa; +} + + +/*! + * \brief boxaReadMem() + * + * \param[in] data serialization of boxa; in ascii + * \param[in] size of data in bytes; can use strlen to get it + * \return boxa, or NULL on error + */ +BOXA * +boxaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +BOXA *boxa; + + PROCNAME("boxaReadMem"); + + if (!data) + return (BOXA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (BOXA *)ERROR_PTR("stream not opened", procName, NULL); + + boxa = boxaReadStream(fp); + fclose(fp); + if (!boxa) L_ERROR("boxa not read\n", procName); + return boxa; +} + + +/*! + * \brief boxaWriteDebug() + * + * \param[in] filename + * \param[in] boxa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of boxaWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +boxaWriteDebug(const char *filename, + BOXA *boxa) +{ + PROCNAME("boxaWriteDebug"); + + if (LeptDebugOK) { + return boxaWrite(filename, boxa); + } else { + L_INFO("write to named temp file %s is disabled\n", procName, filename); + return 0; + } +} + + +/*! + * \brief boxaWrite() + * + * \param[in] filename + * \param[in] boxa + * \return 0 if OK, 1 on error + */ +l_ok +boxaWrite(const char *filename, + BOXA *boxa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("boxaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = boxaWriteStream(fp, boxa); + fclose(fp); + if (ret) + return ERROR_INT("boxa not written to stream", procName, 1); + + return 0; +} + + +/*! + * \brief boxaWriteStream() + * + * \param[in] fp output file stream + * \param[in] boxa + * \return 0 if OK, 1 on error + */ +l_ok +boxaWriteStream(FILE *fp, + BOXA *boxa) +{ +l_int32 n, i; +BOX *box; + + PROCNAME("boxaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + fprintf(fp, "\nBoxa Version %d\n", BOXA_VERSION_NUMBER); + fprintf(fp, "Number of boxes = %d\n", n); + for (i = 0; i < n; i++) { + if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) + return ERROR_INT("box not found", procName, 1); + fprintf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", + i, box->x, box->y, box->w, box->h); + boxDestroy(&box); + } + return 0; +} + + +/*! + * \brief boxaWriteMem() + * + * \param[out] pdata data of serialized boxa; ascii + * \param[out] psize size of returned data + * \param[in] boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a boxa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +boxaWriteMem(l_uint8 **pdata, + size_t *psize, + BOXA *boxa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("boxaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = boxaWriteStream(fp, boxa); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = boxaWriteStream(fp, boxa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*---------------------------------------------------------------------* + * Debug printing * + *---------------------------------------------------------------------*/ +/*! + * \brief boxPrintStreamInfo() + * + * \param[in] fp output file stream + * \param[in] box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This outputs debug info.  Use serialization functions to
+ *          write to file if you want to read the data back.
+ * 
+ */ +l_ok +boxPrintStreamInfo(FILE *fp, + BOX *box) +{ + PROCNAME("boxPrintStreamInfo"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + fprintf(fp, " Box: x = %d, y = %d, w = %d, h = %d\n", + box->x, box->y, box->w, box->h); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/boxfunc1.c b/3rdparty/hgOCR/leptonica/boxfunc1.c new file mode 100644 index 00000000..76d87e68 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxfunc1.c @@ -0,0 +1,2733 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxfunc1.c + *
+ *
+ *      Box geometry
+ *           l_int32   boxContains()
+ *           l_int32   boxIntersects()
+ *           BOXA     *boxaContainedInBox()
+ *           l_int32   boxaContainedInBoxCount()
+ *           l_int32   boxaContainedInBoxa()
+ *           BOXA     *boxaIntersectsBox()
+ *           l_int32   boxaIntersectsBoxCount()
+ *           BOXA     *boxaClipToBox()
+ *           BOXA     *boxaCombineOverlaps()
+ *           l_int32   boxaCombineOverlapsInPair()
+ *           BOX      *boxOverlapRegion()
+ *           BOX      *boxBoundingRegion()
+ *           l_int32   boxOverlapFraction()
+ *           l_int32   boxOverlapArea()
+ *           BOXA     *boxaHandleOverlaps()
+ *           l_int32   boxOverlapDistance()
+ *           l_int32   boxSeparationDistance()
+ *           l_int32   boxCompareSize()
+ *           l_int32   boxContainsPt()
+ *           BOX      *boxaGetNearestToPt()
+ *           BOX      *boxaGetNearestToLine()
+ *           l_int32   boxaFindNearestBoxes()
+ *           l_int32   boxaGetNearestByDirection()
+ *    static l_int32   boxHasOverlapInXorY()
+ *    static l_int32   boxGetDistanceInXorY()
+ *           l_int32   boxIntersectByLine()
+ *           l_int32   boxGetCenter()
+ *           BOX      *boxClipToRectangle()
+ *           l_int32   boxClipToRectangleParams()
+ *           BOX      *boxRelocateOneSide()
+ *           BOXA     *boxaAdjustSides()
+ *           BOXA     *boxaAdjustBoxSides()
+ *           BOX      *boxAdjustSides()
+ *           BOXA     *boxaSetSide()
+ *           l_int32   boxSetSide()
+ *           BOXA     *boxaAdjustWidthToTarget()
+ *           BOXA     *boxaAdjustHeightToTarget()
+ *           l_int32   boxEqual()
+ *           l_int32   boxaEqual()
+ *           l_int32   boxSimilar()
+ *           l_int32   boxaSimilar()
+ *
+ *      Boxa combine and split
+ *           l_int32   boxaJoin()
+ *           l_int32   boxaaJoin()
+ *           l_int32   boxaSplitEvenOdd()
+ *           BOXA     *boxaMergeEvenOdd()
+ * 
+ */ + +#include "allheaders.h" + +static l_int32 boxHasOverlapInXorY(l_int32 c1, l_int32 s1, l_int32 c2, + l_int32 s2); +static l_int32 boxGetDistanceInXorY(l_int32 c1, l_int32 s1, l_int32 c2, + l_int32 s2); + + +/*---------------------------------------------------------------------* + * Box geometry * + *---------------------------------------------------------------------*/ +/*! + * \brief boxContains() + * + * \param[in] box1, box2 + * \param[out] presult 1 if box2 is entirely contained within box1; + * 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxContains(BOX *box1, + BOX *box2, + l_int32 *presult) +{ +l_int32 x1, y1, w1, h1, x2, y2, w2, h2, valid1, valid2; + + PROCNAME("boxContains"); + + if (!presult) + return ERROR_INT("&result not defined", procName, 1); + *presult = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + boxGetGeometry(box1, &x1, &y1, &w1, &h1); + boxGetGeometry(box2, &x2, &y2, &w2, &h2); + if (x1 <= x2 && y1 <= y2 && (x1 + w1 >= x2 + w2) && (y1 + h1 >= y2 + h2)) + *presult = 1; + return 0; +} + + +/*! + * \brief boxIntersects() + * + * \param[in] box1, box2 + * \param[out] presult 1 if any part of box2 is contained in box1; + * 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxIntersects(BOX *box1, + BOX *box2, + l_int32 *presult) +{ +l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, valid1, valid2; + + PROCNAME("boxIntersects"); + + if (!presult) + return ERROR_INT("&result not defined", procName, 1); + *presult = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + boxGetGeometry(box1, &l1, &t1, &w1, &h1); + boxGetGeometry(box2, &l2, &t2, &w2, &h2); + r1 = l1 + w1 - 1; + r2 = l2 + w2 - 1; + b1 = t1 + h1 - 1; + b2 = t2 + h2 - 1; + if (b2 < t1 || b1 < t2 || r1 < l2 || r2 < l1) + *presult = 0; + else + *presult = 1; + return 0; +} + + +/*! + * \brief boxaContainedInBox() + * + * \param[in] boxas + * \param[in] box for containment + * \return boxad boxa with all boxes in boxas that are entirely + * contained in box, or NULL on error + * + *
+ * Notes:
+ *      (1) All boxes in %boxas that are entirely outside box are removed.
+ *      (2) If %box is not valid, returns an empty boxa.
+ * 
+ */ +BOXA * +boxaContainedInBox(BOXA *boxas, + BOX *box) +{ +l_int32 i, n, val, valid; +BOX *box1; +BOXA *boxad; + + PROCNAME("boxaContainedInBox"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!box) + return (BOXA *)ERROR_PTR("box not defined", procName, NULL); + n = boxaGetCount(boxas); + boxIsValid(box, &valid); + if (n == 0 || !valid) + return boxaCreate(1); /* empty */ + + boxad = boxaCreate(0); + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) + continue; + boxContains(box, box1, &val); + if (val == 1) + boxaAddBox(boxad, box1, L_COPY); + boxDestroy(&box1); /* destroy the clone */ + } + + return boxad; +} + + +/*! + * \brief boxaContainedInBoxCount() + * + * \param[in] boxa + * \param[in] box for selecting contained boxes in %boxa + * \param[out] pcount number of boxes intersecting the box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %box is not valid, returns a zero count.
+ * 
+ */ +l_ok +boxaContainedInBoxCount(BOXA *boxa, + BOX *box, + l_int32 *pcount) +{ +l_int32 i, n, val, valid; +BOX *box1; + + PROCNAME("boxaContainedInBoxCount"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + n = boxaGetCount(boxa); + boxIsValid(box, &valid); + if (n == 0 || !valid) + return 0; + + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) + continue; + boxContains(box, box1, &val); + if (val == 1) + (*pcount)++; + boxDestroy(&box1); + } + return 0; +} + + +/*! + * \brief boxaContainedInBoxa() + * + * \param[in] boxa1, boxa2 + * \param[out] pcontained 1 if every box in boxa2 is contained in + * some box in boxa1; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxaContainedInBoxa(BOXA *boxa1, + BOXA *boxa2, + l_int32 *pcontained) +{ +l_int32 i, j, n1, n2, cont, result; +BOX *box1, *box2; + + PROCNAME("boxaContainedInBoxa"); + + if (!pcontained) + return ERROR_INT("&contained not defined", procName, 1); + *pcontained = 0; + if (!boxa1 || !boxa2) + return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); + + n1 = boxaGetCount(boxa1); + n2 = boxaGetCount(boxa2); + for (i = 0; i < n2; i++) { + if ((box2 = boxaGetValidBox(boxa2, i, L_CLONE)) == NULL) + continue; + cont = 0; + for (j = 0; j < n1; j++) { + if ((box1 = boxaGetValidBox(boxa1, j, L_CLONE)) == NULL) + continue; + boxContains(box1, box2, &result); + boxDestroy(&box1); + if (result) { + cont = 1; + break; + } + } + boxDestroy(&box2); + if (!cont) return 0; + } + + *pcontained = 1; + return 0; +} + + +/*! + * \brief boxaIntersectsBox() + * + * \param[in] boxas + * \param[in] box for intersecting + * \return boxad boxa with all boxes in boxas that intersect box, + * or NULL on error + * + *
+ * Notes:
+ *      (1) All boxes in boxa that intersect with box (i.e., are completely
+ *          or partially contained in box) are retained.
+ * 
+ */ +BOXA * +boxaIntersectsBox(BOXA *boxas, + BOX *box) +{ +l_int32 i, n, val, valid; +BOX *box1; +BOXA *boxad; + + PROCNAME("boxaIntersectsBox"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!box) + return (BOXA *)ERROR_PTR("box not defined", procName, NULL); + n = boxaGetCount(boxas); + boxIsValid(box, &valid); + if (n == 0 || !valid) + return boxaCreate(1); /* empty */ + + boxad = boxaCreate(0); + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) + continue; + boxIntersects(box, box1, &val); + if (val == 1) + boxaAddBox(boxad, box1, L_COPY); + boxDestroy(&box1); /* destroy the clone */ + } + + return boxad; +} + + +/*! + * \brief boxaIntersectsBoxCount() + * + * \param[in] boxa + * \param[in] box for selecting intersecting boxes in %boxa + * \param[out] pcount number of boxes intersecting the box + * \return 0 if OK, 1 on error + */ +l_ok +boxaIntersectsBoxCount(BOXA *boxa, + BOX *box, + l_int32 *pcount) +{ +l_int32 i, n, val, valid; +BOX *box1; + + PROCNAME("boxaIntersectsBoxCount"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + n = boxaGetCount(boxa); + boxIsValid(box, &valid); + if (n == 0 || !valid) + return 0; + + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) + continue; + boxIntersects(box, box1, &val); + if (val == 1) + (*pcount)++; + boxDestroy(&box1); + } + return 0; +} + + +/*! + * \brief boxaClipToBox() + * + * \param[in] boxas + * \param[in] box for clipping + * \return boxad boxa with boxes in boxas clipped to box, or NULL on error + * + *
+ * Notes:
+ *      (1) All boxes in boxa not intersecting with box are removed, and
+ *          the remaining boxes are clipped to box.
+ * 
+ */ +BOXA * +boxaClipToBox(BOXA *boxas, + BOX *box) +{ +l_int32 i, n, valid; +BOX *box1, *boxo; +BOXA *boxad; + + PROCNAME("boxaClipToBox"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!box) + return (BOXA *)ERROR_PTR("box not defined", procName, NULL); + n = boxaGetCount(boxas); + boxIsValid(box, &valid); + if (n == 0 || !valid) + return boxaCreate(1); /* empty */ + + boxad = boxaCreate(0); + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) + continue; + if ((boxo = boxOverlapRegion(box, box1)) != NULL) + boxaAddBox(boxad, boxo, L_INSERT); + boxDestroy(&box1); + } + + return boxad; +} + + +/*! + * \brief boxaCombineOverlaps() + * + * \param[in] boxas + * \param[in,out] pixadb debug output + * \return boxad where each set of boxes in boxas that overlap are combined + * into a single bounding box in boxad, or NULL on error. + * + *
+ * Notes:
+ *      (1) If there are no overlapping boxes, it simply returns a copy
+ *          of %boxas.
+ *      (2) Input an empty %pixadb, using pixaCreate(0), for debug output.
+ *          The output gives 2 visualizations of the boxes per iteration;
+ *          boxes in red before, and added boxes in green after. Note that
+ *          all pixels in the red boxes are contained in the green ones.
+ *      (3) The alternative method of painting each rectangle and finding
+ *          the 4-connected components gives a different result in
+ *          general, because two non-overlapping (but touching)
+ *          rectangles, when rendered, are 4-connected and will be joined.
+ *      (4) A bad case computationally is to have n boxes, none of which
+ *          overlap.  Then you have one iteration with O(n^2) compares.
+ *          This is still faster than painting each rectangle and finding
+ *          the bounding boxes of the connected components, even for
+ *          thousands of rectangles.
+ * 
+ */ +BOXA * +boxaCombineOverlaps(BOXA *boxas, + PIXA *pixadb) +{ +l_int32 i, j, w, h, n1, n2, overlap, niters; +BOX *box1, *box2, *box3; +BOXA *boxa1, *boxa2; +PIX *pix1; + + PROCNAME("boxaCombineOverlaps"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + if (pixadb) boxaGetExtent(boxas, &w, &h, NULL); + + boxa1 = boxaCopy(boxas, L_COPY); + n1 = boxaGetCount(boxa1); + niters = 0; + while (1) { /* loop until no change from previous iteration */ + niters++; + if (pixadb) { + pix1 = pixCreate(w + 5, h + 5, 32); + pixSetAll(pix1); + pixRenderBoxaArb(pix1, boxa1, 2, 255, 0, 0); + pixaAddPix(pixadb, pix1, L_COPY); + } + + /* Combine overlaps for this iteration */ + for (i = 0; i < n1; i++) { + if ((box1 = boxaGetValidBox(boxa1, i, L_COPY)) == NULL) + continue; + for (j = i + 1; j < n1; j++) { + if ((box2 = boxaGetValidBox(boxa1, j, L_COPY)) == NULL) + continue; + boxIntersects(box1, box2, &overlap); + if (overlap) { + box3 = boxBoundingRegion(box1, box2); + boxaReplaceBox(boxa1, i, box3); + boxaReplaceBox(boxa1, j, boxCreate(0, 0, 0, 0)); + boxDestroy(&box1); + box1 = boxCopy(box3); + } + boxDestroy(&box2); + } + boxDestroy(&box1); + } + boxa2 = boxaSaveValid(boxa1, L_COPY); + n2 = boxaGetCount(boxa2); + boxaDestroy(&boxa1); + boxa1 = boxa2; + if (n1 == n2) { + if (pixadb) pixDestroy(&pix1); + break; + } + n1 = n2; + if (pixadb) { + pixRenderBoxaArb(pix1, boxa1, 2, 0, 255, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + } + } + + if (pixadb) + L_INFO("number of iterations: %d\n", procName, niters); + return boxa1; +} + + +/*! + * \brief boxaCombineOverlapsInPair() + * + * \param[in] boxas1 input boxa1 + * \param[in] boxas2 input boxa2 + * \param[out] pboxad1 output boxa1 + * \param[out] pboxad2 output boxa2 + * \param[in,out] pixadb debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) One of three things happens to each box in %boxa1 and %boxa2:
+ *           * it gets absorbed into a larger box that it overlaps with
+ *           * it absorbs a smaller (by area) box that it overlaps with
+ *             and gets larger, using the bounding region of the 2 boxes
+ *           * it is unchanged (including absorbing smaller boxes that
+ *             are contained within it).
+ *      (2) If all the boxes from one of the input boxa are absorbed, this
+ *          returns an empty boxa.
+ *      (3) Input an empty %pixadb, using pixaCreate(0), for debug output
+ *      (4) This is useful if different operations are to be carried out
+ *          on possibly overlapping rectangular regions, and it is desired
+ *          to have only one operation on any rectangular region.
+ * 
+ */ +l_ok +boxaCombineOverlapsInPair(BOXA *boxas1, + BOXA *boxas2, + BOXA **pboxad1, + BOXA **pboxad2, + PIXA *pixadb) +{ +l_int32 i, j, w, h, w2, h2, n1, n2, n1i, n2i, niters; +l_int32 overlap, bigger, area1, area2; +BOX *box1, *box2, *box3; +BOXA *boxa1, *boxa2, *boxac1, *boxac2; +PIX *pix1; + + PROCNAME("boxaCombineOverlapsInPair"); + + if (pboxad1) *pboxad1 = NULL; + if (pboxad2) *pboxad2 = NULL; + if (!boxas1 || !boxas2) + return ERROR_INT("boxas1 and boxas2 not both defined", procName, 1); + if (!pboxad1 || !pboxad2) + return ERROR_INT("&boxad1 and &boxad2 not both defined", procName, 1); + + if (pixadb) { + boxaGetExtent(boxas1, &w, &h, NULL); + boxaGetExtent(boxas2, &w2, &h2, NULL); + w = L_MAX(w, w2); + h = L_MAX(h, w2); + } + + /* Let the boxa with the largest area have first crack at the other */ + boxaGetArea(boxas1, &area1); + boxaGetArea(boxas2, &area2); + if (area1 >= area2) { + boxac1 = boxaCopy(boxas1, L_COPY); + boxac2 = boxaCopy(boxas2, L_COPY); + } else { + boxac1 = boxaCopy(boxas2, L_COPY); + boxac2 = boxaCopy(boxas1, L_COPY); + } + + n1i = boxaGetCount(boxac1); + n2i = boxaGetCount(boxac2); + niters = 0; + while (1) { + niters++; + if (pixadb) { + pix1 = pixCreate(w + 5, h + 5, 32); + pixSetAll(pix1); + pixRenderBoxaArb(pix1, boxac1, 2, 255, 0, 0); + pixRenderBoxaArb(pix1, boxac2, 2, 0, 255, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + /* First combine boxes in each set */ + boxa1 = boxaCombineOverlaps(boxac1, NULL); + boxa2 = boxaCombineOverlaps(boxac2, NULL); + + /* Now combine boxes between sets */ + n1 = boxaGetCount(boxa1); + n2 = boxaGetCount(boxa2); + for (i = 0; i < n1; i++) { /* 1 eats 2 */ + if ((box1 = boxaGetValidBox(boxa1, i, L_COPY)) == NULL) + continue; + for (j = 0; j < n2; j++) { + if ((box2 = boxaGetValidBox(boxa2, j, L_COPY)) == NULL) + continue; + boxIntersects(box1, box2, &overlap); + boxCompareSize(box1, box2, L_SORT_BY_AREA, &bigger); + if (overlap && (bigger == 1)) { + box3 = boxBoundingRegion(box1, box2); + boxaReplaceBox(boxa1, i, box3); + boxaReplaceBox(boxa2, j, boxCreate(0, 0, 0, 0)); + boxDestroy(&box1); + box1 = boxCopy(box3); + } + boxDestroy(&box2); + } + boxDestroy(&box1); + } + for (i = 0; i < n2; i++) { /* 2 eats 1 */ + if ((box2 = boxaGetValidBox(boxa2, i, L_COPY)) == NULL) + continue; + for (j = 0; j < n1; j++) { + if ((box1 = boxaGetValidBox(boxa1, j, L_COPY)) == NULL) + continue; + boxIntersects(box1, box2, &overlap); + boxCompareSize(box2, box1, L_SORT_BY_AREA, &bigger); + if (overlap && (bigger == 1)) { + box3 = boxBoundingRegion(box1, box2); + boxaReplaceBox(boxa2, i, box3); + boxaReplaceBox(boxa1, j, boxCreate(0, 0, 0, 0)); + boxDestroy(&box2); + box2 = boxCopy(box3); + } + boxDestroy(&box1); + } + boxDestroy(&box2); + } + boxaDestroy(&boxac1); + boxaDestroy(&boxac2); + boxac1 = boxaSaveValid(boxa1, L_COPY); /* remove invalid boxes */ + boxac2 = boxaSaveValid(boxa2, L_COPY); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + n1 = boxaGetCount(boxac1); + n2 = boxaGetCount(boxac2); + if (n1 == n1i && n2 == n2i) break; + n1i = n1; + n2i = n2; + if (pixadb) { + pix1 = pixCreate(w + 5, h + 5, 32); + pixSetAll(pix1); + pixRenderBoxaArb(pix1, boxac1, 2, 255, 0, 0); + pixRenderBoxaArb(pix1, boxac2, 2, 0, 255, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + } + } + + if (pixadb) + L_INFO("number of iterations: %d\n", procName, niters); + *pboxad1 = boxac1; + *pboxad2 = boxac2; + return 0; +} + + +/*! + * \brief boxOverlapRegion() + * + * \param[in] box1, box2 + * \return box of overlap region between input boxes; + * NULL if no overlap or on error + * + *
+ * Notes:
+ *      (1) This is the geometric intersection of the two rectangles.
+ * 
+ */ +BOX * +boxOverlapRegion(BOX *box1, + BOX *box2) +{ +l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, ld, td, rd, bd; +l_int32 valid1, valid2; + + PROCNAME("boxOverlapRegion"); + + if (!box1 || !box2) + return (BOX *)ERROR_PTR("boxes not both defined", procName, NULL); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) { + L_WARNING("at least one box is invalid\n", procName); + return NULL; + } + + boxGetGeometry(box1, &l1, &t1, &w1, &h1); + boxGetGeometry(box2, &l2, &t2, &w2, &h2); + r1 = l1 + w1 - 1; + r2 = l2 + w2 - 1; + b1 = t1 + h1 - 1; + b2 = t2 + h2 - 1; + if (b2 < t1 || b1 < t2 || r1 < l2 || r2 < l1) + return NULL; + + ld = L_MAX(l1, l2); + td = L_MAX(t1, t2); + rd = L_MIN(r1, r2); + bd = L_MIN(b1, b2); + return boxCreate(ld, td, rd - ld + 1, bd - td + 1); +} + + +/*! + * \brief boxBoundingRegion() + * + * \param[in] box1, box2 + * \return box of bounding region containing the input boxes; + * NULL on error + * + *
+ * Notes:
+ *      (1) This is the geometric union of the two rectangles.
+ *      (2) Invalid boxes are ignored.  This returns an invalid box
+ *          if both input boxes are invalid.
+ *      (3) For the geometric union of a boxa, use boxaGetExtent().
+ * 
+ */ +BOX * +boxBoundingRegion(BOX *box1, + BOX *box2) +{ +l_int32 l1, l2, r1, r2, t1, t2, b1, b2, w1, h1, w2, h2, ld, td, rd, bd; +l_int32 valid1, valid2; + + PROCNAME("boxBoundingRegion"); + + if (!box1 || !box2) + return (BOX *)ERROR_PTR("boxes not both defined", procName, NULL); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 && !valid2) { + L_WARNING("both boxes are invalid\n", procName); + return boxCreate(0, 0, 0, 0); + } + if (valid1 && !valid2) + return boxCopy(box1); + if (!valid1 && valid2) + return boxCopy(box2); + + boxGetGeometry(box1, &l1, &t1, &w1, &h1); + boxGetGeometry(box2, &l2, &t2, &w2, &h2); + r1 = l1 + w1 - 1; + r2 = l2 + w2 - 1; + b1 = t1 + h1 - 1; + b2 = t2 + h2 - 1; + ld = L_MIN(l1, l2); + td = L_MIN(t1, t2); + rd = L_MAX(r1, r2); + bd = L_MAX(b1, b2); + return boxCreate(ld, td, rd - ld + 1, bd - td + 1); +} + + +/*! + * \brief boxOverlapFraction() + * + * \param[in] box1, box2 + * \param[out] pfract the fraction of box2 overlapped by box1 + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) The result depends on the order of the input boxes,
+ *          because the overlap is taken as a fraction of box2.
+ *      (2) If at least one box is not valid, there is no overlap.
+ * 
+ */ +l_ok +boxOverlapFraction(BOX *box1, + BOX *box2, + l_float32 *pfract) +{ +l_int32 w2, h2, w, h, valid1, valid2; +BOX *boxo; + + PROCNAME("boxOverlapFraction"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) { + L_WARNING("boxes not both valid\n", procName); + return 0; + } + + if ((boxo = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ + return 0; + + boxGetGeometry(box2, NULL, NULL, &w2, &h2); + boxGetGeometry(boxo, NULL, NULL, &w, &h); + *pfract = (l_float32)(w * h) / (l_float32)(w2 * h2); + boxDestroy(&boxo); + return 0; +} + + +/*! + * \brief boxOverlapArea() + * + * \param[in] box1, box2 + * \param[out] parea the number of pixels in the overlap + * \return 0 if OK, 1 on error. + */ +l_ok +boxOverlapArea(BOX *box1, + BOX *box2, + l_int32 *parea) +{ +l_int32 w, h, valid1, valid2; +BOX *box; + + PROCNAME("boxOverlapArea"); + + if (!parea) + return ERROR_INT("&area not defined", procName, 1); + *parea = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + if ((box = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ + return 0; + + boxGetGeometry(box, NULL, NULL, &w, &h); + *parea = w * h; + boxDestroy(&box); + return 0; +} + + +/*! + * \brief boxaHandleOverlaps() + * + * \param[in] boxas + * \param[in] op L_COMBINE, L_REMOVE_SMALL + * \param[in] range forward distance over which overlaps + * are checked; > 0 + * \param[in] min_overlap minimum fraction of smaller box required for + * overlap to count; 0.0 to ignore + * \param[in] max_ratio maximum fraction of small/large areas for + * overlap to count; 1.0 to ignore + * \param[out] pnamap [optional] combining map + * \return boxad, or NULL on error. + * + *
+ * Notes:
+ *      (1) For all n(n-1)/2 box pairings, if two boxes overlap, either:
+ *          (a) op == L_COMBINE: get the bounding region for the two,
+ *              replace the larger with the bounding region, and remove
+ *              the smaller of the two, or
+ *          (b) op == L_REMOVE_SMALL: just remove the smaller.
+ *      (2) If boxas is 2D sorted, range can be small, but if it is
+ *          not spatially sorted, range should be large to allow all
+ *          pairwise comparisons to be made.
+ *      (3) The %min_overlap parameter allows ignoring small overlaps.
+ *          If %min_overlap == 1.0, only boxes fully contained in larger
+ *          boxes can be considered for removal; if %min_overlap == 0.0,
+ *          this constraint is ignored.
+ *      (4) The %max_ratio parameter allows ignoring overlaps between
+ *          boxes that are not too different in size.  If %max_ratio == 0.0,
+ *          no boxes can be removed; if %max_ratio == 1.0, this constraint
+ *          is ignored.
+ * 
+ */ +BOXA * +boxaHandleOverlaps(BOXA *boxas, + l_int32 op, + l_int32 range, + l_float32 min_overlap, + l_float32 max_ratio, + NUMA **pnamap) +{ +l_int32 i, j, n, w, h, area1, area2, val; +l_int32 overlap_area; +l_float32 overlap_ratio, area_ratio; +BOX *box1, *box2, *box3; +BOXA *boxat, *boxad; +NUMA *namap; + + PROCNAME("boxaHandleOverlaps"); + + if (pnamap) *pnamap = NULL; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (op != L_COMBINE && op != L_REMOVE_SMALL) + return (BOXA *)ERROR_PTR("invalid op", procName, NULL); + + n = boxaGetCount(boxas); + if (n == 0) + return boxaCreate(1); /* empty */ + if (range == 0) { + L_WARNING("range is 0\n", procName); + return boxaCopy(boxas, L_COPY); + } + + /* Identify smaller boxes in overlap pairs, and mark to eliminate. */ + namap = numaMakeConstant(-1, n); + for (i = 0; i < n; i++) { + if ((box1 = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) + continue; + boxGetGeometry(box1, NULL, NULL, &w, &h); + area1 = w * h; + if (area1 == 0) { + boxDestroy(&box1); + continue; + } + for (j = i + 1; j < i + 1 + range && j < n; j++) { + if ((box2 = boxaGetValidBox(boxas, j, L_CLONE)) == NULL) + continue; + boxOverlapArea(box1, box2, &overlap_area); + if (overlap_area > 0) { + boxGetGeometry(box2, NULL, NULL, &w, &h); + area2 = w * h; + if (area2 == 0) { + /* do nothing */ + } else if (area1 >= area2) { + overlap_ratio = (l_float32)overlap_area / (l_float32)area2; + area_ratio = (l_float32)area2 / (l_float32)area1; + if (overlap_ratio >= min_overlap && + area_ratio <= max_ratio) { + numaSetValue(namap, j, i); + } + } else { + overlap_ratio = (l_float32)overlap_area / (l_float32)area1; + area_ratio = (l_float32)area1 / (l_float32)area2; + if (overlap_ratio >= min_overlap && + area_ratio <= max_ratio) { + numaSetValue(namap, i, j); + } + } + } + boxDestroy(&box2); + } + boxDestroy(&box1); + } + + boxat = boxaCopy(boxas, L_COPY); + if (op == L_COMBINE) { + /* Resize the larger of the pair to the bounding region */ + for (i = 0; i < n; i++) { + numaGetIValue(namap, i, &val); + if (val >= 0) { + box1 = boxaGetBox(boxas, i, L_CLONE); /* smaller */ + box2 = boxaGetBox(boxas, val, L_CLONE); /* larger */ + box3 = boxBoundingRegion(box1, box2); + boxaReplaceBox(boxat, val, box3); + boxDestroy(&box1); + boxDestroy(&box2); + } + } + } + + /* Remove the smaller of the pairs */ + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(namap, i, &val); + if (val == -1) { + box1 = boxaGetBox(boxat, i, L_COPY); + boxaAddBox(boxad, box1, L_INSERT); + } + } + boxaDestroy(&boxat); + if (pnamap) + *pnamap = namap; + else + numaDestroy(&namap); + return boxad; +} + + +/*! + * \brief boxOverlapDistance() + * + * \param[in] box1, box2 two boxes, in any order + * \param[out] ph_ovl [optional] horizontal overlap + * \param[out] pv_ovl [optional] vertical overlap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This measures horizontal and vertical overlap of the
+ *          two boxes.  Horizontal and vertical overlap are measured
+ *          independently.  We need to consider several cases to clarify.
+ *      (2) A positive horizontal overlap means that there is at least
+ *          one point on the the %box1 boundary with the same x-component
+ *          as some point on the %box2 boundary.  Conversely, with a zero
+ *          or negative horizontal overlap, there are no boundary pixels
+ *          in %box1 that share an x-component with a boundary pixel in %box2.
+ *      (3) For a zero or negative horizontal overlap, o <= 0, the minimum
+ *          difference in the x-component between pixels on the boundaries
+ *          of the two boxes is d = -o + 1.
+ *      (4) Likewise for vertical overlaps.
+ * 
+ */ +l_ok +boxOverlapDistance(BOX *box1, + BOX *box2, + l_int32 *ph_ovl, + l_int32 *pv_ovl) +{ +l_int32 l1, t1, w1, h1, r1, b1, l2, t2, w2, h2, r2, b2, valid1, valid2; + + PROCNAME("boxOverlapDistance"); + + if (!ph_ovl && !pv_ovl) + return ERROR_INT("nothing to do", procName, 1); + if (ph_ovl) *ph_ovl = 0; + if (pv_ovl) *pv_ovl = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + if (ph_ovl) { + boxGetGeometry(box1, &l1, NULL, &w1, NULL); + boxGetGeometry(box2, &l2, NULL, &w2, NULL); + r1 = l1 + w1; /* 1 pixel to the right of box 1 */ + r2 = l2 + w2; + if (l2 >= l1) + *ph_ovl = r1 - l2; + else + *ph_ovl = r2 - l1; + } + if (pv_ovl) { + boxGetGeometry(box1, NULL, &t1, NULL, &h1); + boxGetGeometry(box2, NULL, &t2, NULL, &h2); + b1 = t1 + h1; /* 1 pixel below box 1 */ + b2 = t2 + h2; + if (t2 >= t1) + *pv_ovl = b1 - t2; + else + *pv_ovl = b2 - t1; + } + return 0; +} + + +/*! + * \brief boxSeparationDistance() + * + * \param[in] box1, box2 two boxes, in any order + * \param[out] ph_sep horizontal separation + * \param[out] pv_sep vertical separation + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This measures the Manhattan distance between the closest points
+ *          on the boundaries of the two boxes.  When the boxes overlap
+ *          (including touching along a line or at a corner), the
+ *          horizontal and vertical distances are 0.
+ *      (2) The distances represent the horizontal and vertical separation
+ *          of the two boxes.  The boxes have a nonzero intersection when
+ *          both the horizontal and vertical overlaps are positive, and
+ *          for that case both horizontal and vertical separation
+ *          distances are 0.
+ *      (3) If the horizontal overlap of the boxes is positive, the
+ *          horizontal separation between nearest points on respective
+ *          boundaries is 0, and likewise for the vertical overlap.
+ *      (4) If the horizontal overlap ho <= 0, the horizontal
+ *          separation between nearest points is d = -ho + 1.
+ *          Likewise, if the vertical overlap vo <= 0, the vertical
+ *          separation between nearest points is d = -vo + 1.
+ * 
+ */ +l_ok +boxSeparationDistance(BOX *box1, + BOX *box2, + l_int32 *ph_sep, + l_int32 *pv_sep) +{ +l_int32 h_ovl, v_ovl, valid1, valid2; + + PROCNAME("boxSeparationDistance"); + + if (ph_sep) *ph_sep = 0; + if (pv_sep) *pv_sep = 0; + if (!ph_sep || !pv_sep) + return ERROR_INT("&h_sep and &v_sep not both defined", procName, 1); + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + boxOverlapDistance(box1, box2, &h_ovl, &v_ovl); + if (h_ovl <= 0) + *ph_sep = -h_ovl + 1; + if (v_ovl <= 0) + *pv_sep = -v_ovl + 1; + return 0; +} + + +/*! + * \brief boxCompareSize() + * + * \param[in] box1, box2 + * \param[in] type L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, + * L_SORT_BY_MAX_DIMENSION, L_SORT_BY_PERIMETER, + * L_SORT_BY_AREA, + * \param[out] prel 1 if box1 > box2, 0 if the same, -1 if box1 < box2 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We're re-using the SORT enum for these comparisons.
+ * 
+ */ +l_ok +boxCompareSize(BOX *box1, + BOX *box2, + l_int32 type, + l_int32 *prel) +{ +l_int32 w1, h1, w2, h2, size1, size2, valid1, valid2; + + PROCNAME("boxCompareSize"); + + if (!prel) + return ERROR_INT("&rel not defined", procName, 1); + *prel = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + if (type != L_SORT_BY_WIDTH && type != L_SORT_BY_HEIGHT && + type != L_SORT_BY_MAX_DIMENSION && type != L_SORT_BY_PERIMETER && + type != L_SORT_BY_AREA) + return ERROR_INT("invalid compare type", procName, 1); + + boxGetGeometry(box1, NULL, NULL, &w1, &h1); + boxGetGeometry(box2, NULL, NULL, &w2, &h2); + if (type == L_SORT_BY_WIDTH) { + *prel = (w1 > w2) ? 1 : ((w1 == w2) ? 0 : -1); + } else if (type == L_SORT_BY_HEIGHT) { + *prel = (h1 > h2) ? 1 : ((h1 == h2) ? 0 : -1); + } else if (type == L_SORT_BY_MAX_DIMENSION) { + size1 = L_MAX(w1, h1); + size2 = L_MAX(w2, h2); + *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); + } else if (type == L_SORT_BY_PERIMETER) { + size1 = w1 + h1; + size2 = w2 + h2; + *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); + } else if (type == L_SORT_BY_AREA) { + size1 = w1 * h1; + size2 = w2 * h2; + *prel = (size1 > size2) ? 1 : ((size1 == size2) ? 0 : -1); + } + return 0; +} + + +/*! + * \brief boxContainsPt() + * + * \param[in] box + * \param[in] x, y a point + * \param[out] pcontains 1 if box contains point; 0 otherwise + * \return 0 if OK, 1 on error. + */ +l_ok +boxContainsPt(BOX *box, + l_float32 x, + l_float32 y, + l_int32 *pcontains) +{ +l_int32 bx, by, bw, bh; + + PROCNAME("boxContainsPt"); + + if (!pcontains) + return ERROR_INT("&contains not defined", procName, 1); + *pcontains = 0; + if (!box) + return ERROR_INT("&box not defined", procName, 1); + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (x >= bx && x < bx + bw && y >= by && y < by + bh) + *pcontains = 1; + return 0; +} + + +/*! + * \brief boxaGetNearestToPt() + * + * \param[in] boxa + * \param[in] x, y point + * \return box with centroid closest to the given point [x,y], + * or NULL if no boxes in boxa + * + *
+ * Notes:
+ *      (1) Uses euclidean distance between centroid and point.
+ * 
+ */ +BOX * +boxaGetNearestToPt(BOXA *boxa, + l_int32 x, + l_int32 y) +{ +l_int32 i, n, minindex; +l_float32 delx, dely, dist, mindist, cx, cy; +BOX *box; + + PROCNAME("boxaGetNearestToPt"); + + if (!boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + if ((n = boxaGetCount(boxa)) == 0) + return (BOX *)ERROR_PTR("n = 0", procName, NULL); + + mindist = 1000000000.; + minindex = 0; + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) + continue; + boxGetCenter(box, &cx, &cy); + delx = (l_float32)(cx - x); + dely = (l_float32)(cy - y); + dist = delx * delx + dely * dely; + if (dist < mindist) { + minindex = i; + mindist = dist; + } + boxDestroy(&box); + } + + return boxaGetBox(boxa, minindex, L_COPY); +} + + +/*! + * \brief boxaGetNearestToLine() + * + * \param[in] boxa + * \param[in] x, y (y = -1 for vertical line; x = -1 for horiz line) + * \return box with centroid closest to the given line, + * or NULL if no boxes in boxa + * + *
+ * Notes:
+ *      (1) For a horizontal line at some value y, get the minimum of the
+ *          distance |yc - y| from the box centroid yc value to y;
+ *          likewise minimize |xc - x| for a vertical line at x.
+ *      (2) Input y < 0, x >= 0 to indicate a vertical line at x, and
+ *          x < 0, y >= 0 for a horizontal line at y.
+ * 
+ */ +BOX * +boxaGetNearestToLine(BOXA *boxa, + l_int32 x, + l_int32 y) +{ +l_int32 i, n, minindex; +l_float32 dist, mindist, cx, cy; +BOX *box; + + PROCNAME("boxaGetNearestToLine"); + + if (!boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + if ((n = boxaGetCount(boxa)) == 0) + return (BOX *)ERROR_PTR("n = 0", procName, NULL); + if (y >= 0 && x >= 0) + return (BOX *)ERROR_PTR("either x or y must be < 0", procName, NULL); + if (y < 0 && x < 0) + return (BOX *)ERROR_PTR("either x or y must be >= 0", procName, NULL); + + mindist = 1000000000.; + minindex = 0; + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) + continue; + boxGetCenter(box, &cx, &cy); + if (x >= 0) + dist = L_ABS(cx - (l_float32)x); + else /* y >= 0 */ + dist = L_ABS(cy - (l_float32)y); + if (dist < mindist) { + minindex = i; + mindist = dist; + } + boxDestroy(&box); + } + + return boxaGetBox(boxa, minindex, L_COPY); +} + + +/*! + * \brief boxaFindNearestBoxes() + * + * \param[in] boxa either unsorted, or 2D sorted in LR/TB scan order + * \param[in] dist_select L_NON_NEGATIVE, L_ALL + * \param[in] range search distance from box i; use 0 to search + * entire boxa (e.g., if it's not 2D sorted) + * \param[out] pnaaindex for each box in %boxa, contains a numa of 4 + * box indices (per direction) of the nearest box + * \param[out] pnaadist for each box in %boxa, this contains a numa + * \return 0 if OK, 1 on error + *
+ * Notes:
+ *      (1) See boxaGetNearestByDirection() for usage of %dist_select
+ *          and %range.
+ * 
+ */ +l_ok +boxaFindNearestBoxes(BOXA *boxa, + l_int32 dist_select, + l_int32 range, + NUMAA **pnaaindex, + NUMAA **pnaadist) +{ +l_int32 i, n, index, dist; +NUMA *nai, *nad; +NUMAA *naai, *naad; + + PROCNAME("boxaFindNearestBoxes"); + + if (pnaaindex) *pnaaindex = NULL; + if (pnaadist) *pnaadist = NULL; + if (!pnaaindex) + return ERROR_INT("&naaindex not defined", procName, 1); + if (!pnaadist) + return ERROR_INT("&naadist not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + naai = numaaCreate(n); + naad = numaaCreate(n); + *pnaaindex = naai; + *pnaadist = naad; + for (i = 0; i < n; i++) { + nai = numaCreate(4); + nad = numaCreate(4); + boxaGetNearestByDirection(boxa, i, L_FROM_LEFT, dist_select, + range, &index, &dist); + numaAddNumber(nai, index); + numaAddNumber(nad, dist); + boxaGetNearestByDirection(boxa, i, L_FROM_RIGHT, dist_select, + range, &index, &dist); + numaAddNumber(nai, index); + numaAddNumber(nad, dist); + boxaGetNearestByDirection(boxa, i, L_FROM_TOP, dist_select, + range, &index, &dist); + numaAddNumber(nai, index); + numaAddNumber(nad, dist); + boxaGetNearestByDirection(boxa, i, L_FROM_BOT, dist_select, + range, &index, &dist); + numaAddNumber(nai, index); + numaAddNumber(nad, dist); + numaaAddNuma(naai, nai, L_INSERT); + numaaAddNuma(naad, nad, L_INSERT); + } + return 0; +} + + +/*! + * \brief boxaGetNearestByDirection() + * + * \param[in] boxa either unsorted, or 2D sorted in LR/TB scan order + * \param[in] i box we test against + * \param[in] dir direction to look: L_FROM_LEFT, L_FROM_RIGHT, + * L_FROM_TOP, L_FROM_BOT + * \param[in] dist_select L_NON_NEGATIVE, L_ALL + * \param[in] range search distance from box i; use 0 to search + * entire boxa (e.g., if it's not 2D sorted) + * \param[out] pindex index in boxa of nearest box with overlapping + * coordinates in the indicated direction; + * -1 if there is no box + * \param[out] pdist distance of the nearest box in the indicated + * direction; 100000 if no box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For efficiency, use a LR/TD sorted %boxa, which can be
+ *          made by flattening a 2D sorted boxaa.  In that case,
+ *          %range can be some positive integer like 50.
+ *      (2) If boxes overlap, the distance will be < 0.  Use %dist_select
+ *          to determine if these should count or not.  If L_ALL, then
+ *          one box will match as the nearest to another in 2 or more
+ *          directions.
+ * 
+ */ +l_ok +boxaGetNearestByDirection(BOXA *boxa, + l_int32 i, + l_int32 dir, + l_int32 dist_select, + l_int32 range, + l_int32 *pindex, + l_int32 *pdist) +{ +l_int32 j, jmin, jmax, n, mindist, dist, index; +l_int32 x, y, w, h, bx, by, bw, bh; + + PROCNAME("boxaGetNearestByDirection"); + + if (pindex) *pindex = -1; + if (pdist) *pdist = 100000; + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + if (!pdist) + return ERROR_INT("&dist not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (dir != L_FROM_LEFT && dir != L_FROM_RIGHT && + dir != L_FROM_TOP && dir != L_FROM_BOT) + return ERROR_INT("invalid dir", procName, 1); + if (dist_select != L_NON_NEGATIVE && dist_select != L_ALL) + return ERROR_INT("invalid dist_select", procName, 1); + n = boxaGetCount(boxa); + if (i < 0 || i >= n) + return ERROR_INT("invalid box index", procName, 1); + + jmin = (range <= 0) ? 0 : L_MAX(0, i - range); + jmax = (range <= 0) ? n - 1 : L_MIN(n -1, i + range); + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + mindist = 100000; + index = -1; + if (dir == L_FROM_LEFT || dir == L_FROM_RIGHT) { + for (j = jmin; j <= jmax; j++) { + if (j == i) continue; + boxaGetBoxGeometry(boxa, j, &bx, &by, &bw, &bh); + if ((bx >= x && dir == L_FROM_LEFT) || /* not to the left */ + (x >= bx && dir == L_FROM_RIGHT)) /* not to the right */ + continue; + if (boxHasOverlapInXorY(y, h, by, bh) == 1) { + dist = boxGetDistanceInXorY(x, w, bx, bw); + if (dist_select == L_NON_NEGATIVE && dist < 0) continue; + if (dist < mindist) { + mindist = dist; + index = j; + } + } + } + } else if (dir == L_FROM_TOP || dir == L_FROM_BOT) { + for (j = jmin; j <= jmax; j++) { + if (j == i) continue; + boxaGetBoxGeometry(boxa, j, &bx, &by, &bw, &bh); + if ((by >= y && dir == L_FROM_TOP) || /* not above */ + (y >= by && dir == L_FROM_BOT)) /* not below */ + continue; + if (boxHasOverlapInXorY(x, w, bx, bw) == 1) { + dist = boxGetDistanceInXorY(y, h, by, bh); + if (dist_select == L_NON_NEGATIVE && dist < 0) continue; + if (dist < mindist) { + mindist = dist; + index = j; + } + } + } + } + *pindex = index; + *pdist = mindist; + return 0; +} + + +/*! + * \brief boxHasOverlapInXorY() + * + * \param[in] c1 left or top coordinate of box1 + * \param[in] s1 width or height of box1 + * \param[in] c2 left or top coordinate of box2 + * \param[in] s2 width or height of box2 + * \return 0 if no overlap; 1 if any overlap + * + *
+ * Notes:
+ *      (1) Like boxGetDistanceInXorY(), this is used for overlaps both in
+ *          x (which projected vertically) and in y (projected horizontally)
+ * 
+ */ +static l_int32 +boxHasOverlapInXorY(l_int32 c1, + l_int32 s1, + l_int32 c2, + l_int32 s2) +{ +l_int32 ovlp; + + if (c1 > c2) + ovlp = c2 + s2 - 1 - c1; + else + ovlp = c1 + s1 - 1 - c2; + return (ovlp < 0) ? 0 : 1; +} + + +/*! + * \brief boxGetDistanceInXorY() + * + * \param[in] c1 left or top coordinate of box1 + * \param[in] s1 width or height of box1 + * \param[in] c2 left or top coordinate of box2 + * \param[in] s2 width or height of box2 + * \return distance between them (if < 0, box2 overlaps box1 in the + * dimension considered) + */ +static l_int32 +boxGetDistanceInXorY(l_int32 c1, + l_int32 s1, + l_int32 c2, + l_int32 s2) +{ +l_int32 dist; + + if (c1 > c2) + dist = c1 - (c2 + s2 - 1); + else + dist = c2 - (c1 + s1 - 1); + return dist; +} + + +/*! + * \brief boxGetCenter() + * + * \param[in] box + * \param[out] pcx, pcy location of center of box + * \return 0 if OK, 1 on error or if box is not valid + */ +l_ok +boxGetCenter(BOX *box, + l_float32 *pcx, + l_float32 *pcy) +{ +l_int32 x, y, w, h; + + PROCNAME("boxGetCenter"); + + if (pcx) *pcx = 0; + if (pcy) *pcy = 0; + if (!pcx || !pcy) + return ERROR_INT("&cx, &cy not both defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + boxGetGeometry(box, &x, &y, &w, &h); + if (w == 0 || h == 0) return 1; + *pcx = (l_float32)(x + 0.5 * w); + *pcy = (l_float32)(y + 0.5 * h); + + return 0; +} + + +/*! + * \brief boxIntersectByLine() + * + * \param[in] box + * \param[in] x, y point that line goes through + * \param[in] slope of line + * \param[out] px1, py1 1st point of intersection with box + * \param[out] px2, py2 2nd point of intersection with box + * \param[out] pn number of points of intersection + * \return 0 if OK, 1 on error or if box is not valid + * + *
+ * Notes:
+ *      (1) If the intersection is at only one point (a corner), the
+ *          coordinates are returned in (x1, y1).
+ *      (2) Represent a vertical line by one with a large but finite slope.
+ * 
+ */ +l_ok +boxIntersectByLine(BOX *box, + l_int32 x, + l_int32 y, + l_float32 slope, + l_int32 *px1, + l_int32 *py1, + l_int32 *px2, + l_int32 *py2, + l_int32 *pn) +{ +l_int32 bx, by, bw, bh, xp, yp, xt, yt, i, n; +l_float32 invslope; +PTA *pta; + + PROCNAME("boxIntersectByLine"); + + if (px1) *px1 = 0; + if (px2) *px2 = 0; + if (py1) *py1 = 0; + if (py2) *py2 = 0; + if (pn) *pn = 0; + if (!px1 || !py1 || !px2 || !py2) + return ERROR_INT("&x1, &y1, &x2, &y2 not all defined", procName, 1); + if (!pn) + return ERROR_INT("&n not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (bw == 0 || bh == 0) return 1; + + if (slope == 0.0) { + if (y >= by && y < by + bh) { + *py1 = *py2 = y; + *px1 = bx; + *px2 = bx + bw - 1; + } + return 0; + } + + if (slope > 1000000.0) { + if (x >= bx && x < bx + bw) { + *px1 = *px2 = x; + *py1 = by; + *py2 = by + bh - 1; + } + return 0; + } + + /* Intersection with top and bottom lines of box */ + pta = ptaCreate(2); + invslope = 1.0 / slope; + xp = (l_int32)(x + invslope * (y - by)); + if (xp >= bx && xp < bx + bw) + ptaAddPt(pta, xp, by); + xp = (l_int32)(x + invslope * (y - by - bh + 1)); + if (xp >= bx && xp < bx + bw) + ptaAddPt(pta, xp, by + bh - 1); + + /* Intersection with left and right lines of box */ + yp = (l_int32)(y + slope * (x - bx)); + if (yp >= by && yp < by + bh) + ptaAddPt(pta, bx, yp); + yp = (l_int32)(y + slope * (x - bx - bw + 1)); + if (yp >= by && yp < by + bh) + ptaAddPt(pta, bx + bw - 1, yp); + + /* There is a maximum of 2 unique points; remove duplicates. */ + n = ptaGetCount(pta); + if (n > 0) { + ptaGetIPt(pta, 0, px1, py1); /* accept the first one */ + *pn = 1; + } + for (i = 1; i < n; i++) { + ptaGetIPt(pta, i, &xt, &yt); + if ((*px1 != xt) || (*py1 != yt)) { + *px2 = xt; + *py2 = yt; + *pn = 2; + break; + } + } + + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief boxClipToRectangle() + * + * \param[in] box + * \param[in] wi, hi rectangle representing image + * \return part of box within given rectangle, or NULL on error + * or if box is entirely outside the rectangle + * + *
+ * Notes:
+ *      (1) This can be used to clip a rectangle to an image.
+ *          The clipping rectangle is assumed to have a UL corner at (0, 0),
+ *          and a LR corner at (wi - 1, hi - 1).
+ * 
+ */ +BOX * +boxClipToRectangle(BOX *box, + l_int32 wi, + l_int32 hi) +{ +BOX *boxd; + + PROCNAME("boxClipToRectangle"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + if (box->x >= wi || box->y >= hi || + box->x + box->w <= 0 || box->y + box->h <= 0) + return (BOX *)ERROR_PTR("box outside rectangle", procName, NULL); + + boxd = boxCopy(box); + if (boxd->x < 0) { + boxd->w += boxd->x; + boxd->x = 0; + } + if (boxd->y < 0) { + boxd->h += boxd->y; + boxd->y = 0; + } + if (boxd->x + boxd->w > wi) + boxd->w = wi - boxd->x; + if (boxd->y + boxd->h > hi) + boxd->h = hi - boxd->y; + return boxd; +} + + +/*! + * \brief boxClipToRectangleParams() + * + * \param[in] box [optional] requested box; can be null + * \param[in] w, h clipping box size; typ. the size of an image + * \param[out] pxstart start x coordinate + * \param[out] pystart start y coordinate + * \param[out] pxend one pixel beyond clipping box + * \param[out] pyend one pixel beyond clipping box + * \param[out] pbw [optional] clipped width + * \param[out] pbh [optional] clipped height + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The return value should be checked.  If it is 1, the
+ *          returned parameter values are bogus.
+ *      (2) This simplifies the selection of pixel locations within
+ *          a given rectangle:
+ *             for (i = ystart; i < yend; i++ {
+ *                 ...
+ *                 for (j = xstart; j < xend; j++ {
+ *                     ....
+ * 
+ */ +l_ok +boxClipToRectangleParams(BOX *box, + l_int32 w, + l_int32 h, + l_int32 *pxstart, + l_int32 *pystart, + l_int32 *pxend, + l_int32 *pyend, + l_int32 *pbw, + l_int32 *pbh) +{ +l_int32 bw, bh; +BOX *boxc; + + PROCNAME("boxClipToRectangleParams"); + + if (pxstart) *pxstart = 0; + if (pystart) *pystart = 0; + if (pxend) *pxend = w; + if (pyend) *pyend = h; + if (pbw) *pbw = w; + if (pbh) *pbh = h; + if (!pxstart || !pystart || !pxend || !pyend) + return ERROR_INT("invalid ptr input", procName, 1); + if (!box) return 0; + + if ((boxc = boxClipToRectangle(box, w, h)) == NULL) + return ERROR_INT("box outside image", procName, 1); + boxGetGeometry(boxc, pxstart, pystart, &bw, &bh); + boxDestroy(&boxc); + + if (pbw) *pbw = bw; + if (pbh) *pbh = bh; + if (bw == 0 || bh == 0) + return ERROR_INT("invalid clipping box", procName, 1); + *pxend = *pxstart + bw; /* 1 past the end */ + *pyend = *pystart + bh; /* 1 past the end */ + return 0; +} + + +/*! + * \brief boxRelocateOneSide() + * + * \param[in] boxd [optional]; this can be null, equal to boxs, + * or different from boxs; + * \param[in] boxs starting box; to have one side relocated + * \param[in] loc new location of the side that is changing + * \param[in] sideflag L_FROM_LEFT, etc., indicating the side that moves + * \return boxd, or NULL on error or if the computed boxd has + * width or height <= 0. + * + *
+ * Notes:
+ *      (1) Set boxd == NULL to get new box; boxd == boxs for in-place;
+ *          or otherwise to resize existing boxd.
+ *      (2) For usage, suggest one of these:
+ *               boxd = boxRelocateOneSide(NULL, boxs, ...);   // new
+ *               boxRelocateOneSide(boxs, boxs, ...);          // in-place
+ *               boxRelocateOneSide(boxd, boxs, ...);          // other
+ * 
+ */ +BOX * +boxRelocateOneSide(BOX *boxd, + BOX *boxs, + l_int32 loc, + l_int32 sideflag) +{ +l_int32 x, y, w, h; + + PROCNAME("boxRelocateOneSide"); + + if (!boxs) + return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); + if (!boxd) + boxd = boxCopy(boxs); + + boxGetGeometry(boxs, &x, &y, &w, &h); + if (w == 0 || h == 0) + return boxd; + if (sideflag == L_FROM_LEFT) + boxSetGeometry(boxd, loc, -1, w + x - loc, -1); + else if (sideflag == L_FROM_RIGHT) + boxSetGeometry(boxd, -1, -1, loc - x + 1, -1); + else if (sideflag == L_FROM_TOP) + boxSetGeometry(boxd, -1, loc, -1, h + y - loc); + else if (sideflag == L_FROM_BOT) + boxSetGeometry(boxd, -1, -1, -1, loc - y + 1); + return boxd; +} + + +/*! + * \brief boxaAdjustSides() + * + * \param[in] boxas + * \param[in] delleft, delright, deltop, delbot changes in location of + * each side for each box + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
+ *      (2) If the width or height of a box goes to 0, we generate a box with
+ *          w == 1 and h == 1, as a placeholder.
+ *      (3) See boxAdjustSides().
+ * 
+ */ +BOXA * +boxaAdjustSides(BOXA *boxas, + l_int32 delleft, + l_int32 delright, + l_int32 deltop, + l_int32 delbot) +{ +l_int32 n, i, x, y; +BOX *box1, *box2; +BOXA *boxad; + + PROCNAME("boxaAdjustSides"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + n = boxaGetCount(boxas); + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + box1 = boxaGetBox(boxas, i, L_COPY); + box2 = boxAdjustSides(NULL, box1, delleft, delright, deltop, delbot); + if (!box2) { + boxGetGeometry(box1, &x, &y, NULL, NULL); + box2 = boxCreate(x, y, 1, 1); + } + boxaAddBox(boxad, box2, L_INSERT); + boxDestroy(&box1); + } + + return boxad; +} + + +/*! + * \brief boxaAdjustBoxSides() + * + * \param[in] boxas + * \param[in] index + * \param[in] delleft, delright, deltop, delbot changes to box side locs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation on a box in a boxa.
+ *      (2) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
+ *      (3) If a box ends up with no area, an error message is emitted,
+ *          but the box dimensions are not changed.
+ *      (4) See boxaAdjustSides().
+ * 
+ */ +l_ok +boxaAdjustBoxSides(BOXA *boxa, + l_int32 index, + l_int32 delleft, + l_int32 delright, + l_int32 deltop, + l_int32 delbot) +{ +BOX *box; + + PROCNAME("boxaAdjustBoxSides"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + if ((box = boxaGetBox(boxa, index, L_CLONE)) == NULL) + return ERROR_INT("invalid index", procName, 1); + + boxAdjustSides(box, box, delleft, delright, deltop, delbot); + boxDestroy(&box); /* the clone */ + return 0; +} + + +/*! + * \brief boxAdjustSides() + * + * \param[in] boxd [optional]; this can be null, equal to boxs, + * or different from boxs + * \param[in] boxs starting box; to have sides adjusted + * \param[in] delleft, delright, deltop, delbot changes in location + * of each side + * \return boxd, or NULL on error or if the computed boxd has + * width or height <= 0. + * + *
+ * Notes:
+ *      (1) Set boxd == NULL to get new box; boxd == boxs for in-place;
+ *          or otherwise to resize existing boxd.
+ *      (2) For usage, suggest one of these:
+ *               boxd = boxAdjustSides(NULL, boxs, ...);   // new
+ *               boxAdjustSides(boxs, boxs, ...);          // in-place
+ *               boxAdjustSides(boxd, boxs, ...);          // other
+ *      (3) New box dimensions are cropped at left and top to x >= 0 and y >= 0.
+ *      (4) For example, to expand in-place by 20 pixels on each side, use
+ *             boxAdjustSides(box, box, -20, 20, -20, 20);
+ * 
+ */ +BOX * +boxAdjustSides(BOX *boxd, + BOX *boxs, + l_int32 delleft, + l_int32 delright, + l_int32 deltop, + l_int32 delbot) +{ +l_int32 x, y, w, h, xl, xr, yt, yb, wnew, hnew; + + PROCNAME("boxAdjustSides"); + + if (!boxs) + return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); + + boxGetGeometry(boxs, &x, &y, &w, &h); + xl = L_MAX(0, x + delleft); + yt = L_MAX(0, y + deltop); + xr = x + w + delright; /* one pixel beyond right edge */ + yb = y + h + delbot; /* one pixel below bottom edge */ + wnew = xr - xl; + hnew = yb - yt; + + if (wnew < 1 || hnew < 1) + return (BOX *)ERROR_PTR("boxd has 0 area", procName, NULL); + if (!boxd) + return boxCreate(xl, yt, wnew, hnew); + + boxSetGeometry(boxd, xl, yt, wnew, hnew); + return boxd; +} + + +/*! + * \brief boxaSetSide() + * + * \param[in] boxad use NULL to get a new one; same as boxas for in-place + * \param[in] boxas + * \param[in] side L_SET_LEFT, L_SET_RIGHT, L_SET_TOP, L_SET_BOT + * \param[in] val location to set for given side, for each box + * \param[in] thresh min abs difference to cause resetting to %val + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) Sets the given side of each box.  Use boxad == NULL for a new
+ *          boxa, and boxad == boxas for in-place.
+ *      (2) Use one of these:
+ *               boxad = boxaSetSide(NULL, boxas, ...);   // new
+ *               boxaSetSide(boxas, boxas, ...);  // in-place
+ * 
+ */ +BOXA * +boxaSetSide(BOXA *boxad, + BOXA *boxas, + l_int32 side, + l_int32 val, + l_int32 thresh) +{ +l_int32 n, i; +BOX *box; + + PROCNAME("boxaSetSide"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxad && (boxas != boxad)) + return (BOXA *)ERROR_PTR("not in-place", procName, NULL); + if (side != L_SET_LEFT && side != L_SET_RIGHT && + side != L_SET_TOP && side != L_SET_BOT) + return (BOXA *)ERROR_PTR("invalid side", procName, NULL); + if (val < 0) + return (BOXA *)ERROR_PTR("val < 0", procName, NULL); + + if (!boxad) + boxad = boxaCopy(boxas, L_COPY); + n = boxaGetCount(boxad); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxad, i, L_CLONE); + boxSetSide(box, side, val, thresh); + boxDestroy(&box); /* the clone */ + } + + return boxad; +} + + +/*! + * \brief boxSetSide() + * + * \param[in] boxs + * \param[in] side L_SET_LEFT, L_SET_RIGHT, L_SET_TOP, L_SET_BOT + * \param[in] val location to set for given side, for each box + * \param[in] thresh min abs difference to cause resetting to %val + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation.
+ *      (2) Use %thresh = 0 to definitely set the side to %val.
+ * 
+ */ +l_ok +boxSetSide(BOX *boxs, + l_int32 side, + l_int32 val, + l_int32 thresh) +{ +l_int32 x, y, w, h, diff; + + PROCNAME("boxSetSide"); + + if (!boxs) + return ERROR_INT("box not defined", procName, 1); + if (side != L_SET_LEFT && side != L_SET_RIGHT && + side != L_SET_TOP && side != L_SET_BOT) + return ERROR_INT("invalid side", procName, 1); + if (val < 0) + return ERROR_INT("val < 0", procName, 1); + + boxGetGeometry(boxs, &x, &y, &w, &h); + if (side == L_SET_LEFT) { + diff = x - val; + if (L_ABS(diff) >= thresh) + boxSetGeometry(boxs, val, y, w + diff, h); + } else if (side == L_SET_RIGHT) { + diff = x + w -1 - val; + if (L_ABS(diff) >= thresh) + boxSetGeometry(boxs, x, y, val - x + 1, h); + } else if (side == L_SET_TOP) { + diff = y - val; + if (L_ABS(diff) >= thresh) + boxSetGeometry(boxs, x, val, w, h + diff); + } else { /* side == L_SET_BOT */ + diff = y + h - 1 - val; + if (L_ABS(diff) >= thresh) + boxSetGeometry(boxs, x, y, w, val - y + 1); + } + + return 0; +} + + +/*! + * \brief boxaAdjustWidthToTarget() + * + * \param[in] boxad use NULL to get a new one; same as boxas for in-place + * \param[in] boxas + * \param[in] sides L_ADJUST_LEFT, L_ADJUST_RIGHT, L_ADJUST_LEFT_AND_RIGHT + * \param[in] target target width if differs by more than thresh + * \param[in] thresh min abs difference in width to cause adjustment + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) Conditionally adjusts the width of each box, by moving
+ *          the indicated edges (left and/or right) if the width differs
+ *          by %thresh or more from %target.
+ *      (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place.
+ *          Use one of these:
+ *               boxad = boxaAdjustWidthToTarget(NULL, boxas, ...);   // new
+ *               boxaAdjustWidthToTarget(boxas, boxas, ...);  // in-place
+ * 
+ */ +BOXA * +boxaAdjustWidthToTarget(BOXA *boxad, + BOXA *boxas, + l_int32 sides, + l_int32 target, + l_int32 thresh) +{ +l_int32 x, y, w, h, n, i, diff; +BOX *box; + + PROCNAME("boxaAdjustWidthToTarget"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxad && (boxas != boxad)) + return (BOXA *)ERROR_PTR("not in-place", procName, NULL); + if (sides != L_ADJUST_LEFT && sides != L_ADJUST_RIGHT && + sides != L_ADJUST_LEFT_AND_RIGHT) + return (BOXA *)ERROR_PTR("invalid sides", procName, NULL); + if (target < 1) + return (BOXA *)ERROR_PTR("target < 1", procName, NULL); + + if (!boxad) + boxad = boxaCopy(boxas, L_COPY); + n = boxaGetCount(boxad); + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxad, i, L_CLONE)) == NULL) + continue; + boxGetGeometry(box, &x, &y, &w, &h); + diff = w - target; + if (sides == L_ADJUST_LEFT) { + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, L_MAX(0, x + diff), y, target, h); + } else if (sides == L_ADJUST_RIGHT) { + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, x, y, target, h); + } else { /* sides == L_ADJUST_LEFT_AND_RIGHT */ + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, L_MAX(0, x + diff/2), y, target, h); + } + boxDestroy(&box); + } + + return boxad; +} + + +/*! + * \brief boxaAdjustHeightToTarget() + * + * \param[in] boxad use NULL to get a new one + * \param[in] boxas + * \param[in] sides L_ADJUST_TOP, L_ADJUST_BOT, L_ADJUST_TOP_AND_BOT + * \param[in] target target height if differs by more than thresh + * \param[in] thresh min abs difference in height to cause adjustment + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) Conditionally adjusts the height of each box, by moving
+ *          the indicated edges (top and/or bot) if the height differs
+ *          by %thresh or more from %target.
+ *      (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place.
+ *          Use one of these:
+ *               boxad = boxaAdjustHeightToTarget(NULL, boxas, ...);   // new
+ *               boxaAdjustHeightToTarget(boxas, boxas, ...);  // in-place
+ * 
+ */ +BOXA * +boxaAdjustHeightToTarget(BOXA *boxad, + BOXA *boxas, + l_int32 sides, + l_int32 target, + l_int32 thresh) +{ +l_int32 x, y, w, h, n, i, diff; +BOX *box; + + PROCNAME("boxaAdjustHeightToTarget"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxad && (boxas != boxad)) + return (BOXA *)ERROR_PTR("not in-place", procName, NULL); + if (sides != L_ADJUST_TOP && sides != L_ADJUST_BOT && + sides != L_ADJUST_TOP_AND_BOT) + return (BOXA *)ERROR_PTR("invalid sides", procName, NULL); + if (target < 1) + return (BOXA *)ERROR_PTR("target < 1", procName, NULL); + + if (!boxad) + boxad = boxaCopy(boxas, L_COPY); + n = boxaGetCount(boxad); + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxad, i, L_CLONE)) == NULL) + continue; + boxGetGeometry(box, &x, &y, &w, &h); + diff = h - target; + if (sides == L_ADJUST_TOP) { + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, x, L_MAX(0, y + diff), w, target); + } else if (sides == L_ADJUST_BOT) { + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, x, y, w, target); + } else { /* sides == L_ADJUST_TOP_AND_BOT */ + if (L_ABS(diff) >= thresh) + boxSetGeometry(box, x, L_MAX(0, y + diff/2), w, target); + } + boxDestroy(&box); + } + + return boxad; +} + + +/*! + * \brief boxEqual() + * + * \param[in] box1 + * \param[in] box2 + * \param[out] psame 1 if equal; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +boxEqual(BOX *box1, + BOX *box2, + l_int32 *psame) +{ + PROCNAME("boxEqual"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + if (box1->x == box2->x && box1->y == box2->y && + box1->w == box2->w && box1->h == box2->h) + *psame = 1; + return 0; +} + + +/*! + * \brief boxaEqual() + * + * \param[in] boxa1 + * \param[in] boxa2 + * \param[in] maxdist + * \param[out] pnaindex [optional] index array of correspondences + * \param[out] psame 1 if equal; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The two boxa are the "same" if they contain the same
+ *          boxes and each box is within %maxdist of its counterpart
+ *          in their positions within the boxa.  This allows for
+ *          small rearrangements.  Use 0 for maxdist if the boxa
+ *          must be identical.
+ *      (2) This applies only to geometry and ordering; refcounts
+ *          are not considered.
+ *      (3) %maxdist allows some latitude in the ordering of the boxes.
+ *          For the boxa to be the "same", corresponding boxes must
+ *          be within %maxdist of each other.  Note that for large
+ *          %maxdist, we should use a hash function for efficiency.
+ *      (4) naindex[i] gives the position of the box in boxa2 that
+ *          corresponds to box i in boxa1.  It is only returned if the
+ *          boxa are equal.
+ * 
+ */ +l_ok +boxaEqual(BOXA *boxa1, + BOXA *boxa2, + l_int32 maxdist, + NUMA **pnaindex, + l_int32 *psame) +{ +l_int32 i, j, n, jstart, jend, found, samebox; +l_int32 *countarray; +BOX *box1, *box2; +NUMA *na; + + PROCNAME("boxaEqual"); + + if (pnaindex) *pnaindex = NULL; + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!boxa1 || !boxa2) + return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); + n = boxaGetCount(boxa1); + if (n != boxaGetCount(boxa2)) + return 0; + + if ((countarray = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) + return ERROR_INT("calloc fail for countarray", procName, 1); + na = numaMakeConstant(0.0, n); + + for (i = 0; i < n; i++) { + box1 = boxaGetBox(boxa1, i, L_CLONE); + jstart = L_MAX(0, i - maxdist); + jend = L_MIN(n-1, i + maxdist); + found = FALSE; + for (j = jstart; j <= jend; j++) { + box2 = boxaGetBox(boxa2, j, L_CLONE); + boxEqual(box1, box2, &samebox); + if (samebox && countarray[j] == 0) { + countarray[j] = 1; + numaReplaceNumber(na, i, j); + found = TRUE; + boxDestroy(&box2); + break; + } + boxDestroy(&box2); + } + boxDestroy(&box1); + if (!found) { + numaDestroy(&na); + LEPT_FREE(countarray); + return 0; + } + } + + *psame = 1; + if (pnaindex) + *pnaindex = na; + else + numaDestroy(&na); + LEPT_FREE(countarray); + return 0; +} + + +/*! + * \brief boxSimilar() + * + * \param[in] box1 + * \param[in] box2 + * \param[in] leftdiff, rightdiff, topdiff, botdiff + * \param[out] psimilar 1 if similar; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The values of leftdiff (etc) are the maximum allowed deviations
+ *          between the locations of the left (etc) sides.  If any side
+ *          pairs differ by more than this amount, the boxes are not similar.
+ * 
+ */ +l_ok +boxSimilar(BOX *box1, + BOX *box2, + l_int32 leftdiff, + l_int32 rightdiff, + l_int32 topdiff, + l_int32 botdiff, + l_int32 *psimilar) +{ +l_int32 l1, l2, r1, r2, t1, t2, b1, b2, valid1, valid2; + + PROCNAME("boxSimilar"); + + if (!psimilar) + return ERROR_INT("&similar not defined", procName, 1); + *psimilar = 0; + if (!box1 || !box2) + return ERROR_INT("boxes not both defined", procName, 1); + boxIsValid(box1, &valid1); + boxIsValid(box2, &valid2); + if (!valid1 || !valid2) + return ERROR_INT("boxes not both valid", procName, 1); + + boxGetSideLocations(box1, &l1, &r1, &t1, &b1); + boxGetSideLocations(box2, &l2, &r2, &t2, &b2); + if (L_ABS(l1 - l2) > leftdiff) + return 0; + if (L_ABS(r1 - r2) > rightdiff) + return 0; + if (L_ABS(t1 - t2) > topdiff) + return 0; + if (L_ABS(b1 - b2) > botdiff) + return 0; + + *psimilar = 1; + return 0; +} + + +/*! + * \brief boxaSimilar() + * + * \param[in] boxa1 + * \param[in] boxa2 + * \param[in] leftdiff, rightdiff, topdiff, botdiff + * \param[in] debug output details of non-similar boxes + * \param[out] psimilar 1 if similar; 0 otherwise + * \param[out] pnasim [optional] na containing 1 if similar; else 0 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See boxSimilar() for parameter usage.
+ *      (2) Corresponding boxes are taken in order in the two boxa.
+ *      (3) %nasim is an indicator array with a (0/1) for each box pair.
+ *      (4) With %nasim or debug == 1, boxes continue to be tested
+ *          after failure.
+ * 
+ */ +l_ok +boxaSimilar(BOXA *boxa1, + BOXA *boxa2, + l_int32 leftdiff, + l_int32 rightdiff, + l_int32 topdiff, + l_int32 botdiff, + l_int32 debug, + l_int32 *psimilar, + NUMA **pnasim) +{ +l_int32 i, n1, n2, match, mismatch; +BOX *box1, *box2; + + PROCNAME("boxaSimilar"); + + if (psimilar) *psimilar = 0; + if (pnasim) *pnasim = NULL; + if (!boxa1 || !boxa2) + return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); + if (!psimilar) + return ERROR_INT("&similar not defined", procName, 1); + n1 = boxaGetCount(boxa1); + n2 = boxaGetCount(boxa2); + if (n1 != n2) { + L_ERROR("boxa counts differ: %d vs %d\n", procName, n1, n2); + return 1; + } + if (pnasim) *pnasim = numaCreate(n1); + + mismatch = FALSE; + for (i = 0; i < n1; i++) { + box1 = boxaGetBox(boxa1, i, L_CLONE); + box2 = boxaGetBox(boxa2, i, L_CLONE); + boxSimilar(box1, box2, leftdiff, rightdiff, topdiff, botdiff, + &match); + boxDestroy(&box1); + boxDestroy(&box2); + if (pnasim) + numaAddNumber(*pnasim, match); + if (!match) { + mismatch = TRUE; + if (!debug && pnasim == NULL) + return 0; + else if (debug) + L_INFO("box %d not similar\n", procName, i); + } + } + + if (!mismatch) *psimilar = 1; + return 0; +} + + +/*----------------------------------------------------------------------* + * Boxa combine and split * + *----------------------------------------------------------------------*/ +/*! + * \brief boxaJoin() + * + * \param[in] boxad dest boxa; add to this one + * \param[in] boxas source boxa; add from this one + * \param[in] istart starting index in boxas + * \param[in] iend ending index in boxas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This appends a clone of each indicated box in boxas to boxad
+ *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (3) iend < 0 means 'read to the end'
+ *      (4) if boxas == NULL or has no boxes, this is a no-op.
+ * 
+ */ +l_ok +boxaJoin(BOXA *boxad, + BOXA *boxas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +BOX *box; + + PROCNAME("boxaJoin"); + + if (!boxad) + return ERROR_INT("boxad not defined", procName, 1); + if (!boxas || ((n = boxaGetCount(boxas)) == 0)) + return 0; + + if (istart < 0) + istart = 0; + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + box = boxaGetBox(boxas, i, L_CLONE); + boxaAddBox(boxad, box, L_INSERT); + } + + return 0; +} + + +/*! + * \brief boxaaJoin() + * + * \param[in] baad dest boxaa; add to this one + * \param[in] baas source boxaa; add from this one + * \param[in] istart starting index in baas + * \param[in] iend ending index in baas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This appends a clone of each indicated boxa in baas to baad
+ *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (3) iend < 0 means 'read to the end'
+ *      (4) if baas == NULL, this is a no-op.
+ * 
+ */ +l_ok +boxaaJoin(BOXAA *baad, + BOXAA *baas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +BOXA *boxa; + + PROCNAME("boxaaJoin"); + + if (!baad) + return ERROR_INT("baad not defined", procName, 1); + if (!baas) + return 0; + + if (istart < 0) + istart = 0; + n = boxaaGetCount(baas); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + boxa = boxaaGetBoxa(baas, i, L_CLONE); + boxaaAddBoxa(baad, boxa, L_INSERT); + } + + return 0; +} + + +/*! + * \brief boxaSplitEvenOdd() + * + * \param[in] boxa + * \param[in] fillflag 1 to put invalid boxes in place; 0 to omit + * \param[out] pboxae, pboxao save even and odd boxes in their separate + * boxa, setting the other type to invalid boxes. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %fillflag == 1, boxae has copies of the even boxes
+ *          in their original location, and nvalid boxes are placed
+ *          in the odd array locations.  And v.v.
+ *      (2) If %fillflag == 0, boxae has only copies of the even boxes.
+ * 
+ */ +l_ok +boxaSplitEvenOdd(BOXA *boxa, + l_int32 fillflag, + BOXA **pboxae, + BOXA **pboxao) +{ +l_int32 i, n; +BOX *box, *box1; + + PROCNAME("boxaSplitEvenOdd"); + + if (pboxae) *pboxae = NULL; + if (pboxao) *pboxao = NULL; + if (!pboxae || !pboxao) + return ERROR_INT("&boxae and &boxao not both defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + *pboxae = boxaCreate(n); + *pboxao = boxaCreate(n); + if (fillflag == 0) { + /* don't fill with invalid boxes; end up with half-size boxa */ + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_COPY); + if ((i & 1) == 0) + boxaAddBox(*pboxae, box, L_INSERT); + else + boxaAddBox(*pboxao, box, L_INSERT); + } + } else { + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_COPY); + box1 = boxCreate(0, 0, 0, 0); /* empty placeholder */ + if ((i & 1) == 0) { + boxaAddBox(*pboxae, box, L_INSERT); + boxaAddBox(*pboxao, box1, L_INSERT); + } else { + boxaAddBox(*pboxae, box1, L_INSERT); + boxaAddBox(*pboxao, box, L_INSERT); + } + } + } + return 0; +} + + +/*! + * \brief boxaMergeEvenOdd() + * + * \param[in] boxae boxes to go in even positions in merged boxa + * \param[in] boxao boxes to go in odd positions in merged boxa + * \param[in] fillflag 1 if there are invalid boxes in placeholders + * \return boxad merged, or NULL on error + * + *
+ * Notes:
+ *      (1) This is essentially the inverse of boxaSplitEvenOdd().
+ *          Typically, boxae and boxao were generated by boxaSplitEvenOdd(),
+ *          and the value of %fillflag needs to be the same in both calls.
+ *      (2) If %fillflag == 1, both boxae and boxao are of the same size;
+ *          otherwise boxae may have one more box than boxao.
+ * 
+ */ +BOXA * +boxaMergeEvenOdd(BOXA *boxae, + BOXA *boxao, + l_int32 fillflag) +{ +l_int32 i, n, ne, no; +BOX *box; +BOXA *boxad; + + PROCNAME("boxaMergeEvenOdd"); + + if (!boxae || !boxao) + return (BOXA *)ERROR_PTR("boxae and boxao not defined", procName, NULL); + ne = boxaGetCount(boxae); + no = boxaGetCount(boxao); + if (ne < no || ne > no + 1) + return (BOXA *)ERROR_PTR("boxa sizes invalid", procName, NULL); + + boxad = boxaCreate(ne); + if (fillflag == 0) { /* both are approx. half-sized; all valid boxes */ + n = ne + no; + for (i = 0; i < n; i++) { + if ((i & 1) == 0) + box = boxaGetBox(boxae, i / 2, L_COPY); + else + box = boxaGetBox(boxao, i / 2, L_COPY); + boxaAddBox(boxad, box, L_INSERT); + } + } else { /* both are full size and have invalid placeholders */ + for (i = 0; i < ne; i++) { + if ((i & 1) == 0) + box = boxaGetBox(boxae, i, L_COPY); + else + box = boxaGetBox(boxao, i, L_COPY); + boxaAddBox(boxad, box, L_INSERT); + } + } + return boxad; +} diff --git a/3rdparty/hgOCR/leptonica/boxfunc2.c b/3rdparty/hgOCR/leptonica/boxfunc2.c new file mode 100644 index 00000000..f51ad641 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxfunc2.c @@ -0,0 +1,1928 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxfunc2.c + *
+ *
+ *      Boxa/Box transform (shift, scale) and orthogonal rotation
+ *           BOXA            *boxaTransform()
+ *           BOX             *boxTransform()
+ *           BOXA            *boxaTransformOrdered()
+ *           BOX             *boxTransformOrdered()
+ *           BOXA            *boxaRotateOrth()
+ *           BOX             *boxRotateOrth()
+ *           BOXA            *boxaShiftWithPta()
+ *
+ *      Boxa sort
+ *           BOXA            *boxaSort()
+ *           BOXA            *boxaBinSort()
+ *           BOXA            *boxaSortByIndex()
+ *           BOXAA           *boxaSort2d()
+ *           BOXAA           *boxaSort2dByIndex()
+ *
+ *      Boxa statistics
+ *           l_int32          boxaGetRankVals()
+ *           l_int32          boxaGetMedianVals()
+ *           l_int32          boxaGetAverageSize()
+ *
+ *      Boxa array extraction
+ *           l_int32          boxaExtractAsNuma()
+ *           l_int32          boxaExtractAsPta()
+ *           PTA             *boxaExtractCorners()
+ *
+ *      Other Boxaa functions
+ *           l_int32          boxaaGetExtent()
+ *           BOXA            *boxaaFlattenToBoxa()
+ *           BOXA            *boxaaFlattenAligned()
+ *           BOXAA           *boxaEncapsulateAligned()
+ *           BOXAA           *boxaaTranspose()
+ *           l_int32          boxaaAlignBox()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* For more than this number of c.c. in a binarized image of + * semi-perimeter (w + h) about 5000 or less, the O(n) binsort + * is faster than the O(nlogn) shellsort. */ +static const l_int32 MinCompsForBinSort = 200; + + +/*---------------------------------------------------------------------* + * Boxa/Box transform (shift, scale) and orthogonal rotation * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaTransform() + * + * \param[in] boxas + * \param[in] shiftx + * \param[in] shifty + * \param[in] scalex + * \param[in] scaley + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a very simple function that first shifts, then scales.
+ *      (2) The UL corner coordinates of all boxes in the output %boxad
+ *      (3) For the boxes in the output %boxad, the UL corner coordinates
+ *          must be non-negative, and the width and height of valid
+ *          boxes must be at least 1.
+ * 
+ */ +BOXA * +boxaTransform(BOXA *boxas, + l_int32 shiftx, + l_int32 shifty, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 i, n; +BOX *boxs, *boxd; +BOXA *boxad; + + PROCNAME("boxaTransform"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + n = boxaGetCount(boxas); + if ((boxad = boxaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { + boxaDestroy(&boxad); + return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); + } + boxd = boxTransform(boxs, shiftx, shifty, scalex, scaley); + boxDestroy(&boxs); + boxaAddBox(boxad, boxd, L_INSERT); + } + + return boxad; +} + + +/*! + * \brief boxTransform() + * + * \param[in] box + * \param[in] shiftx + * \param[in] shifty + * \param[in] scalex + * \param[in] scaley + * \return boxd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a very simple function that first shifts, then scales.
+ *      (2) If the box is invalid, a new invalid box is returned.
+ *      (3) The UL corner coordinates must be non-negative, and the
+ *          width and height of valid boxes must be at least 1.
+ * 
+ */ +BOX * +boxTransform(BOX *box, + l_int32 shiftx, + l_int32 shifty, + l_float32 scalex, + l_float32 scaley) +{ + PROCNAME("boxTransform"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + if (box->w <= 0 || box->h <= 0) + return boxCreate(0, 0, 0, 0); + else + return boxCreate((l_int32)(L_MAX(0, scalex * (box->x + shiftx) + 0.5)), + (l_int32)(L_MAX(0, scaley * (box->y + shifty) + 0.5)), + (l_int32)(L_MAX(1.0, scalex * box->w + 0.5)), + (l_int32)(L_MAX(1.0, scaley * box->h + 0.5))); +} + + +/*! + * \brief boxaTransformOrdered() + * + * \param[in] boxas + * \param[in] shiftx + * \param[in] shifty + * \param[in] scalex + * \param[in] scaley + * \param[in] xcen, ycen center of rotation + * \param[in] angle in radians; clockwise is positive + * \param[in] order one of 6 combinations: L_TR_SC_RO, ... + * \return boxd, or NULL on error + * + *
+ *          shift, scaling and rotation, and the order of the
+ *          transforms is specified.
+ *      (2) Although these operations appear to be on an infinite
+ *          2D plane, in practice the region of interest is clipped
+ *          to a finite image.  The center of rotation is usually taken
+ *          with respect to the image (either the UL corner or the
+ *          center).  A translation can have two very different effects:
+ *            (a) Moves the boxes across the fixed image region.
+ *            (b) Moves the image origin, causing a change in the image
+ *                region and an opposite effective translation of the boxes.
+ *          This function should only be used for (a), where the image
+ *          region is fixed on translation.  If the image region is
+ *          changed by the translation, use instead the functions
+ *          in affinecompose.c, where the image region and rotation
+ *          center can be computed from the actual clipping due to
+ *          translation of the image origin.
+ *      (3) See boxTransformOrdered() for usage and implementation details.
+ * 
+ */ +BOXA * +boxaTransformOrdered(BOXA *boxas, + l_int32 shiftx, + l_int32 shifty, + l_float32 scalex, + l_float32 scaley, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 order) +{ +l_int32 i, n; +BOX *boxs, *boxd; +BOXA *boxad; + + PROCNAME("boxaTransformOrdered"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + n = boxaGetCount(boxas); + if ((boxad = boxaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { + boxaDestroy(&boxad); + return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); + } + boxd = boxTransformOrdered(boxs, shiftx, shifty, scalex, scaley, + xcen, ycen, angle, order); + boxDestroy(&boxs); + boxaAddBox(boxad, boxd, L_INSERT); + } + + return boxad; +} + + +/*! + * \brief boxTransformOrdered() + * + * \param[in] boxs + * \param[in] shiftx + * \param[in] shifty + * \param[in] scalex + * \param[in] scaley + * \param[in] xcen, ycen center of rotation + * \param[in] angle in radians; clockwise is positive + * \param[in] order one of 6 combinations: L_TR_SC_RO, ... + * \return boxd, or NULL on error + * + *
+ * Notes:
+ *      (1) This allows a sequence of linear transforms, composed of
+ *          shift, scaling and rotation, where the order of the
+ *          transforms is specified.
+ *      (2) The rotation is taken about a point specified by (xcen, ycen).
+ *          Let the components of the vector from the center of rotation
+ *          to the box center be (xdif, ydif):
+ *            xdif = (bx + 0.5 * bw) - xcen
+ *            ydif = (by + 0.5 * bh) - ycen
+ *          Then the box center after rotation has new components:
+ *            bxcen = xcen + xdif * cosa + ydif * sina
+ *            bycen = ycen + ydif * cosa - xdif * sina
+ *          where cosa and sina are the cos and sin of the angle,
+ *          and the enclosing box for the rotated box has size:
+ *            rw = |bw * cosa| + |bh * sina|
+ *            rh = |bh * cosa| + |bw * sina|
+ *          where bw and bh are the unrotated width and height.
+ *          Then the box UL corner (rx, ry) is
+ *            rx = bxcen - 0.5 * rw
+ *            ry = bycen - 0.5 * rh
+ *      (3) The center of rotation specified by args %xcen and %ycen
+ *          is the point BEFORE any translation or scaling.  If the
+ *          rotation is not the first operation, this function finds
+ *          the actual center at the time of rotation.  It does this
+ *          by making the following assumptions:
+ *             (1) Any scaling is with respect to the UL corner, so
+ *                 that the center location scales accordingly.
+ *             (2) A translation does not affect the center of
+ *                 the image; it just moves the boxes.
+ *          We always use assumption (1).  However, assumption (2)
+ *          will be incorrect if the apparent translation is due
+ *          to a clipping operation that, in effect, moves the
+ *          origin of the image.  In that case, you should NOT use
+ *          these simple functions.  Instead, use the functions
+ *          in affinecompose.c, where the rotation center can be
+ *          computed from the actual clipping due to translation
+ *          of the image origin.
+ * 
+ */ +BOX * +boxTransformOrdered(BOX *boxs, + l_int32 shiftx, + l_int32 shifty, + l_float32 scalex, + l_float32 scaley, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 order) +{ +l_int32 bx, by, bw, bh, tx, ty, tw, th; +l_int32 xcent, ycent; /* transformed center of rotation due to scaling */ +l_float32 sina, cosa, xdif, ydif, rx, ry, rw, rh; +BOX *boxd; + + PROCNAME("boxTransformOrdered"); + + if (!boxs) + return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); + if (order != L_TR_SC_RO && order != L_SC_RO_TR && order != L_RO_TR_SC && + order != L_TR_RO_SC && order != L_RO_SC_TR && order != L_SC_TR_RO) + return (BOX *)ERROR_PTR("order invalid", procName, NULL); + + boxGetGeometry(boxs, &bx, &by, &bw, &bh); + if (bw <= 0 || bh <= 0) /* invalid */ + return boxCreate(0, 0, 0, 0); + if (angle != 0.0) { + sina = sin(angle); + cosa = cos(angle); + } + + if (order == L_TR_SC_RO) { + tx = (l_int32)(scalex * (bx + shiftx) + 0.5); + ty = (l_int32)(scaley * (by + shifty) + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); + xcent = (l_int32)(scalex * xcen + 0.5); + ycent = (l_int32)(scaley * ycen + 0.5); + if (angle == 0.0) { + boxd = boxCreate(tx, ty, tw, th); + } else { + xdif = tx + 0.5 * tw - xcent; + ydif = ty + 0.5 * th - ycent; + rw = L_ABS(tw * cosa) + L_ABS(th * sina); + rh = L_ABS(th * cosa) + L_ABS(tw * sina); + rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; + boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, + (l_int32)rh); + } + } else if (order == L_SC_TR_RO) { + tx = (l_int32)(scalex * bx + shiftx + 0.5); + ty = (l_int32)(scaley * by + shifty + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); + xcent = (l_int32)(scalex * xcen + 0.5); + ycent = (l_int32)(scaley * ycen + 0.5); + if (angle == 0.0) { + boxd = boxCreate(tx, ty, tw, th); + } else { + xdif = tx + 0.5 * tw - xcent; + ydif = ty + 0.5 * th - ycent; + rw = L_ABS(tw * cosa) + L_ABS(th * sina); + rh = L_ABS(th * cosa) + L_ABS(tw * sina); + rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; + boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, + (l_int32)rh); + } + } else if (order == L_RO_TR_SC) { + if (angle == 0.0) { + rx = bx; + ry = by; + rw = bw; + rh = bh; + } else { + xdif = bx + 0.5 * bw - xcen; + ydif = by + 0.5 * bh - ycen; + rw = L_ABS(bw * cosa) + L_ABS(bh * sina); + rh = L_ABS(bh * cosa) + L_ABS(bw * sina); + rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; + } + tx = (l_int32)(scalex * (rx + shiftx) + 0.5); + ty = (l_int32)(scaley * (ry + shifty) + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); + boxd = boxCreate(tx, ty, tw, th); + } else if (order == L_RO_SC_TR) { + if (angle == 0.0) { + rx = bx; + ry = by; + rw = bw; + rh = bh; + } else { + xdif = bx + 0.5 * bw - xcen; + ydif = by + 0.5 * bh - ycen; + rw = L_ABS(bw * cosa) + L_ABS(bh * sina); + rh = L_ABS(bh * cosa) + L_ABS(bw * sina); + rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; + } + tx = (l_int32)(scalex * rx + shiftx + 0.5); + ty = (l_int32)(scaley * ry + shifty + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); + boxd = boxCreate(tx, ty, tw, th); + } else if (order == L_TR_RO_SC) { + tx = bx + shiftx; + ty = by + shifty; + if (angle == 0.0) { + rx = tx; + ry = ty; + rw = bw; + rh = bh; + } else { + xdif = tx + 0.5 * bw - xcen; + ydif = ty + 0.5 * bh - ycen; + rw = L_ABS(bw * cosa) + L_ABS(bh * sina); + rh = L_ABS(bh * cosa) + L_ABS(bw * sina); + rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; + } + tx = (l_int32)(scalex * rx + 0.5); + ty = (l_int32)(scaley * ry + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); + boxd = boxCreate(tx, ty, tw, th); + } else { /* order == L_SC_RO_TR) */ + tx = (l_int32)(scalex * bx + 0.5); + ty = (l_int32)(scaley * by + 0.5); + tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); + th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); + xcent = (l_int32)(scalex * xcen + 0.5); + ycent = (l_int32)(scaley * ycen + 0.5); + if (angle == 0.0) { + rx = tx; + ry = ty; + rw = tw; + rh = th; + } else { + xdif = tx + 0.5 * tw - xcent; + ydif = ty + 0.5 * th - ycent; + rw = L_ABS(tw * cosa) + L_ABS(th * sina); + rh = L_ABS(th * cosa) + L_ABS(tw * sina); + rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; + ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; + } + tx = (l_int32)(rx + shiftx + 0.5); + ty = (l_int32)(ry + shifty + 0.5); + tw = (l_int32)(rw + 0.5); + th = (l_int32)(rh + 0.5); + boxd = boxCreate(tx, ty, tw, th); + } + + return boxd; +} + + +/*! + * \brief boxaRotateOrth() + * + * \param[in] boxas + * \param[in] w, h of image in which the boxa is embedded + * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; + * all rotations are clockwise + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) See boxRotateOrth() for details.
+ * 
+ */ +BOXA * +boxaRotateOrth(BOXA *boxas, + l_int32 w, + l_int32 h, + l_int32 rotation) +{ +l_int32 i, n; +BOX *boxs, *boxd; +BOXA *boxad; + + PROCNAME("boxaRotateOrth"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (rotation < 0 || rotation > 3) + return (BOXA *)ERROR_PTR("rotation not in {0,1,2,3}", procName, NULL); + if (rotation == 0) + return boxaCopy(boxas, L_COPY); + + n = boxaGetCount(boxas); + if ((boxad = boxaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) { + boxaDestroy(&boxad); + return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); + } + boxd = boxRotateOrth(boxs, w, h, rotation); + boxDestroy(&boxs); + boxaAddBox(boxad, boxd, L_INSERT); + } + + return boxad; +} + + +/*! + * \brief boxRotateOrth() + * + * \param[in] box + * \param[in] w, h of image in which the box is embedded + * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; + * all rotations are clockwise + * \return boxd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotate the image with the embedded box by the specified amount.
+ *      (2) After rotation, the rotated box is always measured with
+ *          respect to the UL corner of the image.
+ * 
+ */ +BOX * +boxRotateOrth(BOX *box, + l_int32 w, + l_int32 h, + l_int32 rotation) +{ +l_int32 bx, by, bw, bh, xdist, ydist; + + PROCNAME("boxRotateOrth"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + if (rotation < 0 || rotation > 3) + return (BOX *)ERROR_PTR("rotation not in {0,1,2,3}", procName, NULL); + if (rotation == 0) + return boxCopy(box); + + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (bw <= 0 || bh <= 0) /* invalid */ + return boxCreate(0, 0, 0, 0); + ydist = h - by - bh; /* below box */ + xdist = w - bx - bw; /* to right of box */ + if (rotation == 1) /* 90 deg cw */ + return boxCreate(ydist, bx, bh, bw); + else if (rotation == 2) /* 180 deg cw */ + return boxCreate(xdist, ydist, bw, bh); + else /* rotation == 3, 270 deg cw */ + return boxCreate(by, xdist, bh, bw); +} + + +/*! + * \brief boxaShiftWithPta() + * + * \param[in] boxas + * \param[in] pta aligned with the boxes; determines shift amount + * \param[in] dir +1 to shift by the values in pta; -1 to shift + * by the negative of the values in the pta. + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) In use, %pta may come from the UL corners of of a boxa, each
+ *          of whose boxes contains the corresponding box of %boxas
+ *          within it.  The output %boxad is then a boxa in the (global)
+ *          coordinates of the containing boxa.  So the input %pta
+ *          could come from boxaExtractCorners().
+ *      (2) The operations with %dir == 1 and %dir == -1 are inverses if
+ *          called in order (1, -1).  Starting with an input boxa and
+ *          calling twice with these values of %dir results in a boxa
+ *          identical to the input.  However, because box parameters can
+ *          never be negative, calling in the order (-1, 1) may result
+ *          in clipping at the left side and the top.
+ * 
+ */ +BOXA * +boxaShiftWithPta(BOXA *boxas, + PTA *pta, + l_int32 dir) +{ +l_int32 i, n, x, y, full; +BOX *box1, *box2; +BOXA *boxad; + + PROCNAME("boxaShiftWithPta"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + boxaIsFull(boxas, &full); + if (!full) + return (BOXA *)ERROR_PTR("boxas not full", procName, NULL); + if (!pta) + return (BOXA *)ERROR_PTR("pta not defined", procName, NULL); + if (dir != 1 && dir != -1) + return (BOXA *)ERROR_PTR("invalid dir", procName, NULL); + n = boxaGetCount(boxas); + if (n != ptaGetCount(pta)) + return (BOXA *)ERROR_PTR("boxas and pta not same size", procName, NULL); + + if ((boxad = boxaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); + for (i = 0; i < n; i++) { + box1 = boxaGetBox(boxas, i, L_COPY); + ptaGetIPt(pta, i, &x, &y); + box2 = boxTransform(box1, dir * x, dir * y, 1.0, 1.0); + boxaAddBox(boxad, box2, L_INSERT); + boxDestroy(&box1); + } + return boxad; +} + + +/*---------------------------------------------------------------------* + * Boxa sort * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaSort() + * + * \param[in] boxas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, + * L_SORT_BY_RIGHT, L_SORT_BY_BOT, + * L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, + * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, + * L_SORT_BY_PERIMETER, L_SORT_BY_AREA, + * L_SORT_BY_ASPECT_RATIO + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex [optional] index of sorted order into + * original array + * \return boxad sorted version of boxas, or NULL on error + * + *
+ * Notes:
+ *      (1) An empty boxa returns a copy, with a warning.
+ * 
+ */ +BOXA * +boxaSort(BOXA *boxas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex) +{ +l_int32 i, n, x, y, w, h, size; +BOXA *boxad; +NUMA *na, *naindex; + + PROCNAME("boxaSort"); + + if (pnaindex) *pnaindex = NULL; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((n = boxaGetCount(boxas)) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && + sorttype != L_SORT_BY_RIGHT && sorttype != L_SORT_BY_BOT && + sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && + sorttype != L_SORT_BY_MIN_DIMENSION && + sorttype != L_SORT_BY_MAX_DIMENSION && + sorttype != L_SORT_BY_PERIMETER && + sorttype != L_SORT_BY_AREA && + sorttype != L_SORT_BY_ASPECT_RATIO) + return (BOXA *)ERROR_PTR("invalid sort type", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (BOXA *)ERROR_PTR("invalid sort order", procName, NULL); + + /* Use O(n) binsort if possible */ + if (n > MinCompsForBinSort && + ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || + (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || + (sorttype == L_SORT_BY_PERIMETER))) + return boxaBinSort(boxas, sorttype, sortorder, pnaindex); + + /* Build up numa of specific data */ + if ((na = numaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("na not made", procName, NULL); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); + switch (sorttype) + { + case L_SORT_BY_X: + numaAddNumber(na, x); + break; + case L_SORT_BY_Y: + numaAddNumber(na, y); + break; + case L_SORT_BY_RIGHT: + numaAddNumber(na, x + w - 1); + break; + case L_SORT_BY_BOT: + numaAddNumber(na, y + h - 1); + break; + case L_SORT_BY_WIDTH: + numaAddNumber(na, w); + break; + case L_SORT_BY_HEIGHT: + numaAddNumber(na, h); + break; + case L_SORT_BY_MIN_DIMENSION: + size = L_MIN(w, h); + numaAddNumber(na, size); + break; + case L_SORT_BY_MAX_DIMENSION: + size = L_MAX(w, h); + numaAddNumber(na, size); + break; + case L_SORT_BY_PERIMETER: + size = w + h; + numaAddNumber(na, size); + break; + case L_SORT_BY_AREA: + size = w * h; + numaAddNumber(na, size); + break; + case L_SORT_BY_ASPECT_RATIO: + numaAddNumber(na, (l_float32)w / (l_float32)h); + break; + default: + L_WARNING("invalid sort type\n", procName); + } + } + + /* Get the sort index for data array */ + naindex = numaGetSortIndex(na, sortorder); + numaDestroy(&na); + if (!naindex) + return (BOXA *)ERROR_PTR("naindex not made", procName, NULL); + + /* Build up sorted boxa using sort index */ + boxad = boxaSortByIndex(boxas, naindex); + + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + return boxad; +} + + +/*! + * \brief boxaBinSort() + * + * \param[in] boxas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, + * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex [optional] index of sorted order into + * original array + * \return boxad sorted version of boxas, or NULL on error + * + *
+ * Notes:
+ *      (1) For a large number of boxes (say, greater than 1000), this
+ *          O(n) binsort is much faster than the O(nlogn) shellsort.
+ *          For 5000 components, this is over 20x faster than boxaSort().
+ *      (2) Consequently, boxaSort() calls this function if it will
+ *          likely go much faster.
+ * 
+ */ +BOXA * +boxaBinSort(BOXA *boxas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex) +{ +l_int32 i, n, x, y, w, h; +BOXA *boxad; +NUMA *na, *naindex; + + PROCNAME("boxaBinSort"); + + if (pnaindex) *pnaindex = NULL; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((n = boxaGetCount(boxas)) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && + sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && + sorttype != L_SORT_BY_PERIMETER) + return (BOXA *)ERROR_PTR("invalid sort type", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (BOXA *)ERROR_PTR("invalid sort order", procName, NULL); + + /* Generate Numa of appropriate box dimensions */ + if ((na = numaCreate(n)) == NULL) + return (BOXA *)ERROR_PTR("na not made", procName, NULL); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); + switch (sorttype) + { + case L_SORT_BY_X: + numaAddNumber(na, x); + break; + case L_SORT_BY_Y: + numaAddNumber(na, y); + break; + case L_SORT_BY_WIDTH: + numaAddNumber(na, w); + break; + case L_SORT_BY_HEIGHT: + numaAddNumber(na, h); + break; + case L_SORT_BY_PERIMETER: + numaAddNumber(na, w + h); + break; + default: + L_WARNING("invalid sort type\n", procName); + } + } + + /* Get the sort index for data array */ + naindex = numaGetBinSortIndex(na, sortorder); + numaDestroy(&na); + if (!naindex) + return (BOXA *)ERROR_PTR("naindex not made", procName, NULL); + + /* Build up sorted boxa using the sort index */ + boxad = boxaSortByIndex(boxas, naindex); + + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + return boxad; +} + + +/*! + * \brief boxaSortByIndex() + * + * \param[in] boxas + * \param[in] naindex na that maps from the new boxa to the input boxa + * \return boxad sorted, or NULL on error + */ +BOXA * +boxaSortByIndex(BOXA *boxas, + NUMA *naindex) +{ +l_int32 i, n, index; +BOX *box; +BOXA *boxad; + + PROCNAME("boxaSortByIndex"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((n = boxaGetCount(boxas)) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (!naindex) + return (BOXA *)ERROR_PTR("naindex not defined", procName, NULL); + + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + box = boxaGetBox(boxas, index, L_COPY); + boxaAddBox(boxad, box, L_INSERT); + } + + return boxad; +} + + +/*! + * \brief boxaSort2d() + * + * \param[in] boxas + * \param[out] pnaad [optional] numaa with sorted indices + * whose values are the indices of the input array + * \param[in] delta1 min separation that permits aggregation of a box + * onto a boxa of horizontally-aligned boxes; pass 1 + * \param[in] delta2 min separation that permits aggregation of a box + * onto a boxa of horizontally-aligned boxes; pass 2 + * \param[in] minh1 components less than this height either join an + * existing boxa or are set aside for pass 2 + * \return baa 2d sorted version of boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) The final result is a sort where the 'fast scan' direction is
+ *          left to right, and the 'slow scan' direction is from top
+ *          to bottom.  Each boxa in the baa represents a sorted set
+ *          of boxes from left to right.
+ *      (2) Three passes are used to aggregate the boxas, which can correspond
+ *          to characters or words in a line of text.  In pass 1, only
+ *          taller components, which correspond to xheight or larger,
+ *          are permitted to start a new boxa.  In pass 2, the remaining
+ *          vertically-challenged components are allowed to join an
+ *          existing boxa or start a new one.  In pass 3, boxa whose extent
+ *          is overlapping are joined.  After that, the boxes in each
+ *          boxa are sorted horizontally, and finally the boxa are
+ *          sorted vertically.
+ *      (3) If %delta1 > 0, the first pass allows aggregation when
+ *          boxes in the same boxa do not overlap vertically.  In fact,
+ *          %delta1 is the max distance by which they can miss and still
+ *          be aggregated.  If %delta1 < 0, the box must have vertical
+ *          overlap of at least abs(%delta1) with the boxa before it
+ *          can be merged.  Similar for delta2 on the second pass.
+ *      (4) On the first pass, any component of height less than minh1
+ *          cannot start a new boxa; it's put aside for later insertion.
+ *      (5) On the second pass, any small component that doesn't align
+ *          with an existing boxa can start a new one.
+ *      (6) This can be used to identify lines of text from
+ *          character or word bounding boxes.
+ *      (7) Typical values for the input parameters on 300 ppi text are:
+ *                 delta1 ~ 0
+ *                 delta2 ~ 0
+ *                 minh1 ~ 5
+ * 
+ */ +BOXAA * +boxaSort2d(BOXA *boxas, + NUMAA **pnaad, + l_int32 delta1, + l_int32 delta2, + l_int32 minh1) +{ +l_int32 i, index, h, nt, ne, n, m, ival; +BOX *box; +BOXA *boxa, *boxae, *boxan, *boxa1, *boxa2, *boxa3, *boxav, *boxavs; +BOXAA *baa, *baa1, *baad; +NUMA *naindex, *nae, *nan, *nah, *nav, *na1, *na2, *nad, *namap; +NUMAA *naa, *naa1, *naad; + + PROCNAME("boxaSort2d"); + + if (pnaad) *pnaad = NULL; + if (!boxas) + return (BOXAA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxaGetCount(boxas) == 0) + return (BOXAA *)ERROR_PTR("boxas is empty", procName, NULL); + + /* Sort from left to right */ + if ((boxa = boxaSort(boxas, L_SORT_BY_X, L_SORT_INCREASING, &naindex)) + == NULL) + return (BOXAA *)ERROR_PTR("boxa not made", procName, NULL); + + /* First pass: assign taller boxes to boxa by row */ + nt = boxaGetCount(boxa); + baa = boxaaCreate(0); + naa = numaaCreate(0); + boxae = boxaCreate(0); /* save small height boxes here */ + nae = numaCreate(0); /* keep track of small height boxes */ + for (i = 0; i < nt; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, NULL, NULL, NULL, &h); + if (h < minh1) { /* save for 2nd pass */ + boxaAddBox(boxae, box, L_INSERT); + numaAddNumber(nae, i); + } else { + n = boxaaGetCount(baa); + boxaaAlignBox(baa, box, delta1, &index); + if (index < n) { /* append to an existing boxa */ + boxaaAddBox(baa, index, box, L_INSERT); + } else { /* doesn't align, need new boxa */ + boxan = boxaCreate(0); + boxaAddBox(boxan, box, L_INSERT); + boxaaAddBoxa(baa, boxan, L_INSERT); + nan = numaCreate(0); + numaaAddNuma(naa, nan, L_INSERT); + } + numaGetIValue(naindex, i, &ival); + numaaAddNumber(naa, index, ival); + } + } + boxaDestroy(&boxa); + numaDestroy(&naindex); + + /* Second pass: feed in small height boxes */ + ne = boxaGetCount(boxae); + for (i = 0; i < ne; i++) { + box = boxaGetBox(boxae, i, L_CLONE); + n = boxaaGetCount(baa); + boxaaAlignBox(baa, box, delta2, &index); + if (index < n) { /* append to an existing boxa */ + boxaaAddBox(baa, index, box, L_INSERT); + } else { /* doesn't align, need new boxa */ + boxan = boxaCreate(0); + boxaAddBox(boxan, box, L_INSERT); + boxaaAddBoxa(baa, boxan, L_INSERT); + nan = numaCreate(0); + numaaAddNuma(naa, nan, L_INSERT); + } + numaGetIValue(nae, i, &ival); /* location in original boxas */ + numaaAddNumber(naa, index, ival); + } + + /* Third pass: merge some boxa whose extent is overlapping. + * Think of these boxa as text lines, where the bounding boxes + * of the text lines can overlap, but likely won't have + * a huge overlap. + * First do a greedy find of pairs of overlapping boxa, where + * the two boxa overlap by at least 50% of the smaller, and + * the smaller is not more than half the area of the larger. + * For such pairs, call the larger one the primary boxa. The + * boxes in the smaller one are appended to those in the primary + * in pass 3a, and the primaries are extracted in pass 3b. + * In this way, all boxes in the original baa are saved. */ + n = boxaaGetCount(baa); + boxaaGetExtent(baa, NULL, NULL, NULL, &boxa3); + boxa1 = boxaHandleOverlaps(boxa3, L_REMOVE_SMALL, 1000, 0.5, 0.5, &namap); + boxaDestroy(&boxa1); + boxaDestroy(&boxa3); + for (i = 0; i < n; i++) { /* Pass 3a: join selected copies of boxa */ + numaGetIValue(namap, i, &ival); + if (ival >= 0) { /* join current to primary boxa[ival] */ + boxa1 = boxaaGetBoxa(baa, i, L_COPY); + boxa2 = boxaaGetBoxa(baa, ival, L_CLONE); + boxaJoin(boxa2, boxa1, 0, -1); + boxaDestroy(&boxa2); + boxaDestroy(&boxa1); + na1 = numaaGetNuma(naa, i, L_COPY); + na2 = numaaGetNuma(naa, ival, L_CLONE); + numaJoin(na2, na1, 0, -1); + numaDestroy(&na1); + numaDestroy(&na2); + } + } + baa1 = boxaaCreate(n); + naa1 = numaaCreate(n); + for (i = 0; i < n; i++) { /* Pass 3b: save primary boxa */ + numaGetIValue(namap, i, &ival); + if (ival == -1) { + boxa1 = boxaaGetBoxa(baa, i, L_CLONE); + boxaaAddBoxa(baa1, boxa1, L_INSERT); + na1 = numaaGetNuma(naa, i, L_CLONE); + numaaAddNuma(naa1, na1, L_INSERT); + } + } + numaDestroy(&namap); + boxaaDestroy(&baa); + baa = baa1; + numaaDestroy(&naa); + naa = naa1; + + /* Sort the boxes in each boxa horizontally */ + m = boxaaGetCount(baa); + for (i = 0; i < m; i++) { + boxa1 = boxaaGetBoxa(baa, i, L_CLONE); + boxa2 = boxaSort(boxa1, L_SORT_BY_X, L_SORT_INCREASING, &nah); + boxaaReplaceBoxa(baa, i, boxa2); + na1 = numaaGetNuma(naa, i, L_CLONE); + na2 = numaSortByIndex(na1, nah); + numaaReplaceNuma(naa, i, na2); + boxaDestroy(&boxa1); + numaDestroy(&na1); + numaDestroy(&nah); + } + + /* Sort the boxa vertically within boxaa, using the first box + * in each boxa. */ + m = boxaaGetCount(baa); + boxav = boxaCreate(m); /* holds first box in each boxa in baa */ + naad = numaaCreate(m); + if (pnaad) + *pnaad = naad; + baad = boxaaCreate(m); + for (i = 0; i < m; i++) { + boxa1 = boxaaGetBoxa(baa, i, L_CLONE); + box = boxaGetBox(boxa1, 0, L_CLONE); + boxaAddBox(boxav, box, L_INSERT); + boxaDestroy(&boxa1); + } + boxavs = boxaSort(boxav, L_SORT_BY_Y, L_SORT_INCREASING, &nav); + for (i = 0; i < m; i++) { + numaGetIValue(nav, i, &index); + boxa = boxaaGetBoxa(baa, index, L_CLONE); + boxaaAddBoxa(baad, boxa, L_INSERT); + nad = numaaGetNuma(naa, index, L_CLONE); + numaaAddNuma(naad, nad, L_INSERT); + } + + +/* fprintf(stderr, "box count = %d, numaa count = %d\n", nt, + numaaGetNumberCount(naad)); */ + + boxaaDestroy(&baa); + boxaDestroy(&boxav); + boxaDestroy(&boxavs); + boxaDestroy(&boxae); + numaDestroy(&nav); + numaDestroy(&nae); + numaaDestroy(&naa); + if (!pnaad) + numaaDestroy(&naad); + + return baad; +} + + +/*! + * \brief boxaSort2dByIndex() + * + * \param[in] boxas + * \param[in] naa numaa that maps from the new baa to the input boxa + * \return baa sorted boxaa, or NULL on error + */ +BOXAA * +boxaSort2dByIndex(BOXA *boxas, + NUMAA *naa) +{ +l_int32 ntot, boxtot, i, j, n, nn, index; +BOX *box; +BOXA *boxa; +BOXAA *baa; +NUMA *na; + + PROCNAME("boxaSort2dByIndex"); + + if (!boxas) + return (BOXAA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((boxtot = boxaGetCount(boxas)) == 0) + return (BOXAA *)ERROR_PTR("boxas is empty", procName, NULL); + if (!naa) + return (BOXAA *)ERROR_PTR("naindex not defined", procName, NULL); + + /* Check counts */ + ntot = numaaGetNumberCount(naa); + if (ntot != boxtot) + return (BOXAA *)ERROR_PTR("element count mismatch", procName, NULL); + + n = numaaGetCount(naa); + baa = boxaaCreate(n); + for (i = 0; i < n; i++) { + na = numaaGetNuma(naa, i, L_CLONE); + nn = numaGetCount(na); + boxa = boxaCreate(nn); + for (j = 0; j < nn; j++) { + numaGetIValue(na, i, &index); + box = boxaGetBox(boxas, index, L_COPY); + boxaAddBox(boxa, box, L_INSERT); + } + boxaaAddBoxa(baa, boxa, L_INSERT); + numaDestroy(&na); + } + + return baa; +} + + +/*---------------------------------------------------------------------* + * Boxa array extraction * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaExtractAsNuma() + * + * \param[in] boxa + * \param[out] pnal [optional] array of left locations + * \param[out] pnat [optional] array of top locations + * \param[out] pnar [optional] array of right locations + * \param[out] pnab [optional] array of bottom locations + * \param[out] pnaw [optional] array of widths + * \param[out] pnah [optional] array of heights + * \param[in] keepinvalid 1 to keep invalid boxes; 0 to remove them + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If you are counting or sorting values, such as determining
+ *          rank order, you must remove invalid boxes.
+ *      (2) If you are parametrizing the values, or doing an evaluation
+ *          where the position in the boxa sequence is important, you
+ *          must replace the invalid boxes with valid ones before
+ *          doing the extraction. This is easily done with boxaFillSequence().
+ * 
+ */ +l_ok +boxaExtractAsNuma(BOXA *boxa, + NUMA **pnal, + NUMA **pnat, + NUMA **pnar, + NUMA **pnab, + NUMA **pnaw, + NUMA **pnah, + l_int32 keepinvalid) +{ +l_int32 i, n, left, top, right, bot, w, h; + + PROCNAME("boxaExtractAsNuma"); + + if (!pnal && !pnat && !pnar && !pnab && !pnaw && !pnah) + return ERROR_INT("no output requested", procName, 1); + if (pnal) *pnal = NULL; + if (pnat) *pnat = NULL; + if (pnar) *pnar = NULL; + if (pnab) *pnab = NULL; + if (pnaw) *pnaw = NULL; + if (pnah) *pnah = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!keepinvalid && boxaGetValidCount(boxa) == 0) + return ERROR_INT("no valid boxes", procName, 1); + + n = boxaGetCount(boxa); + if (pnal) *pnal = numaCreate(n); + if (pnat) *pnat = numaCreate(n); + if (pnar) *pnar = numaCreate(n); + if (pnab) *pnab = numaCreate(n); + if (pnaw) *pnaw = numaCreate(n); + if (pnah) *pnah = numaCreate(n); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); + if (!keepinvalid && (w <= 0 || h <= 0)) + continue; + right = left + w - 1; + bot = top + h - 1; + if (pnal) numaAddNumber(*pnal, left); + if (pnat) numaAddNumber(*pnat, top); + if (pnar) numaAddNumber(*pnar, right); + if (pnab) numaAddNumber(*pnab, bot); + if (pnaw) numaAddNumber(*pnaw, w); + if (pnah) numaAddNumber(*pnah, h); + } + + return 0; +} + + +/*! + * \brief boxaExtractAsPta() + * + * \param[in] boxa + * \param[out] pptal [optional] array of left locations vs. index + * \param[out] pptat [optional] array of top locations vs. index + * \param[out] pptar [optional] array of right locations vs. index + * \param[out] pptab [optional] array of bottom locations vs. index + * \param[out] pptaw [optional] array of widths vs. index + * \param[out] pptah [optional] array of heights vs. index + * \param[in] keepinvalid 1 to keep invalid boxes; 0 to remove them + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For most applications, such as counting, sorting, fitting
+ *          to some parametrized form, plotting or filtering in general,
+ *          you should remove the invalid boxes.  Each pta saves the
+ *          box index in the x array, so replacing invalid boxes by
+ *          filling with boxaFillSequence(), which is required for
+ *          boxaExtractAsNuma(), is not necessary.
+ *      (2) If invalid boxes are retained, each one will result in
+ *          entries (typically 0) in all selected output pta.
+ *      (3) Other boxa --> pta functions are:
+ *          * boxaExtractCorners(): extracts any of the four corners as a pta.
+ *          * boxaConvertToPta(): extracts sufficient number of corners
+ *            to allow reconstruction of the original boxa from the pta.
+ * 
+ */ +l_ok +boxaExtractAsPta(BOXA *boxa, + PTA **pptal, + PTA **pptat, + PTA **pptar, + PTA **pptab, + PTA **pptaw, + PTA **pptah, + l_int32 keepinvalid) +{ +l_int32 i, n, left, top, right, bot, w, h; + + PROCNAME("boxaExtractAsPta"); + + if (!pptal && !pptar && !pptat && !pptab && !pptaw && !pptah) + return ERROR_INT("no output requested", procName, 1); + if (pptal) *pptal = NULL; + if (pptat) *pptat = NULL; + if (pptar) *pptar = NULL; + if (pptab) *pptab = NULL; + if (pptaw) *pptaw = NULL; + if (pptah) *pptah = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!keepinvalid && boxaGetValidCount(boxa) == 0) + return ERROR_INT("no valid boxes", procName, 1); + + n = boxaGetCount(boxa); + if (pptal) *pptal = ptaCreate(n); + if (pptat) *pptat = ptaCreate(n); + if (pptar) *pptar = ptaCreate(n); + if (pptab) *pptab = ptaCreate(n); + if (pptaw) *pptaw = ptaCreate(n); + if (pptah) *pptah = ptaCreate(n); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); + if (!keepinvalid && (w <= 0 || h <= 0)) + continue; + right = left + w - 1; + bot = top + h - 1; + if (pptal) ptaAddPt(*pptal, i, left); + if (pptat) ptaAddPt(*pptat, i, top); + if (pptar) ptaAddPt(*pptar, i, right); + if (pptab) ptaAddPt(*pptab, i, bot); + if (pptaw) ptaAddPt(*pptaw, i, w); + if (pptah) ptaAddPt(*pptah, i, h); + } + + return 0; +} + + +/*! + * \brief boxaExtractCorners() + * + * \param[in] boxa + * \param[in] corner L_UPPER_LEFT, L_UPPER_RIGHT, L_LOWER_LEFT, + * L_LOWER_RIGHT + * \return pta of corner coordinates, or NULL on error + * + *
+ * Notes:
+ *      (1) Extracts (0,0) for invalid boxes.
+ *      (2) Other boxa --> pta functions are:
+ *          * boxaExtractAsPta(): allows extraction of any dimension
+ *            and/or side location, with each in a separate pta.
+ *          * boxaConvertToPta(): extracts sufficient number of corners
+ *            to allow reconstruction of the original boxa from the pta.
+ * 
+ */ +PTA * +boxaExtractCorners(BOXA *boxa, + l_int32 corner) +{ +l_int32 i, n, left, top, right, bot, w, h; +PTA *pta; + + PROCNAME("boxaExtractCorners"); + + if (!boxa) + return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); + if (corner != L_UPPER_LEFT && corner != L_UPPER_RIGHT && + corner != L_LOWER_LEFT && corner != L_LOWER_RIGHT) + return (PTA *)ERROR_PTR("invalid corner", procName, NULL); + + n = boxaGetCount(boxa); + if ((pta = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); + right = left + w - 1; + bot = top + h - 1; + if (w == 0 || h == 0) { /* invalid */ + left = 0; + top = 0; + right = 0; + bot = 0; + } + if (corner == L_UPPER_LEFT) + ptaAddPt(pta, left, top); + else if (corner == L_UPPER_RIGHT) + ptaAddPt(pta, right, top); + else if (corner == L_LOWER_LEFT) + ptaAddPt(pta, left, bot); + else if (corner == L_LOWER_RIGHT) + ptaAddPt(pta, right, bot); + } + + return pta; +} + + +/*---------------------------------------------------------------------* + * Boxa statistics * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaGetRankVals() + * + * \param[in] boxa + * \param[in] fract use 0.0 for smallest, 1.0 for largest width and height + * \param[out] px [optional] rank value of x (left side) + * \param[out] py [optional] rank value of y (top side) + * \param[out] pr [optional] rank value of right side + * \param[out] pb [optional] rank value of bottom side + * \param[out] pw [optional] rank value of width + * \param[out] ph [optional] rank value of height + * \return 0 if OK, 1 on error or if the boxa is empty or has no valid boxes + * + *
+ * Notes:
+ *      (1) This function does not assume that all boxes in the boxa are valid
+ *      (2) The six box parameters are sorted independently.
+ *          For rank order, the width and height are sorted in increasing
+ *          order.  But what does it mean to sort x and y in "rank order"?
+ *          If the boxes are of comparable size and somewhat
+ *          aligned (e.g., from multiple images), it makes some sense
+ *          to give a "rank order" for x and y by sorting them in
+ *          decreasing order.  (By the same argument, we choose to sort
+ *          the r and b sides in increasing order.)  In general, the
+ *          interpretation of a rank order on x and y (or on r and b)
+ *          is highly application dependent.  In summary:
+ *             ~ x and y are sorted in decreasing order
+ *             ~ r and b are sorted in increasing order
+ *             ~ w and h are sorted in increasing order
+ * 
+ */ +l_ok +boxaGetRankVals(BOXA *boxa, + l_float32 fract, + l_int32 *px, + l_int32 *py, + l_int32 *pr, + l_int32 *pb, + l_int32 *pw, + l_int32 *ph) +{ +l_float32 xval, yval, rval, bval, wval, hval; +NUMA *nax, *nay, *nar, *nab, *naw, *nah; + + PROCNAME("boxaGetRankVals"); + + if (px) *px = 0; + if (py) *py = 0; + if (pr) *pr = 0; + if (pb) *pb = 0; + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (fract < 0.0 || fract > 1.0) + return ERROR_INT("fract not in [0.0 ... 1.0]", procName, 1); + if (boxaGetValidCount(boxa) == 0) + return ERROR_INT("no valid boxes in boxa", procName, 1); + + /* Use only the valid boxes */ + boxaExtractAsNuma(boxa, &nax, &nay, &nar, &nab, &naw, &nah, 0); + + if (px) { + numaGetRankValue(nax, 1.0 - fract, NULL, 1, &xval); + *px = (l_int32)xval; + } + if (py) { + numaGetRankValue(nay, 1.0 - fract, NULL, 1, &yval); + *py = (l_int32)yval; + } + if (pr) { + numaGetRankValue(nar, fract, NULL, 1, &rval); + *pr = (l_int32)rval; + } + if (pb) { + numaGetRankValue(nab, fract, NULL, 1, &bval); + *pb = (l_int32)bval; + } + if (pw) { + numaGetRankValue(naw, fract, NULL, 1, &wval); + *pw = (l_int32)wval; + } + if (ph) { + numaGetRankValue(nah, fract, NULL, 1, &hval); + *ph = (l_int32)hval; + } + numaDestroy(&nax); + numaDestroy(&nay); + numaDestroy(&nar); + numaDestroy(&nab); + numaDestroy(&naw); + numaDestroy(&nah); + return 0; +} + + +/*! + * \brief boxaGetMedianVals() + * + * \param[in] boxa + * \param[out] px [optional] median value of x (left side) + * \param[out] py [optional] median value of y (top side) + * \param[out] pr [optional] median value of right side + * \param[out] pb [optional] median value of bottom side + * \param[out] pw [optional] median value of width + * \param[out] ph [optional] median value of height + * \return 0 if OK, 1 on error or if the boxa is empty or has no valid boxes + * + *
+ * Notes:
+ *      (1) See boxaGetRankVals()
+ * 
+ */ +l_ok +boxaGetMedianVals(BOXA *boxa, + l_int32 *px, + l_int32 *py, + l_int32 *pr, + l_int32 *pb, + l_int32 *pw, + l_int32 *ph) +{ + PROCNAME("boxaGetMedianVals"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (boxaGetValidCount(boxa) == 0) + return ERROR_INT("no valid boxes in boxa", procName, 1); + + return boxaGetRankVals(boxa, 0.5, px, py, pr, pb, pw, ph); +} + + +/*! + * \brief boxaGetAverageSize() + * + * \param[in] boxa + * \param[out] pw [optional] average width + * \param[out] ph [optional] average height + * \return 0 if OK, 1 on error or if the boxa is empty + */ +l_ok +boxaGetAverageSize(BOXA *boxa, + l_float32 *pw, + l_float32 *ph) +{ +l_int32 i, n, bw, bh; +l_float32 sumw, sumh; + + PROCNAME("boxaGetAverageSize"); + + if (pw) *pw = 0.0; + if (ph) *ph = 0.0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if ((n = boxaGetCount(boxa)) == 0) + return ERROR_INT("boxa is empty", procName, 1); + + sumw = sumh = 0.0; + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &bw, &bh); + sumw += bw; + sumh += bh; + } + + if (pw) *pw = sumw / n; + if (ph) *ph = sumh / n; + return 0; +} + + +/*---------------------------------------------------------------------* + * Other Boxaa functions * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaaGetExtent() + * + * \param[in] baa + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbox [optional] minimum box containing all boxa + * in boxaa + * \param[out] pboxa [optional] boxa containing all boxes in each + * boxa in the boxaa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned w and h are the minimum size image
+ *          that would contain all boxes untranslated.
+ *      (2) Each box in the returned boxa is the minimum box required to
+ *          hold all the boxes in the respective boxa of baa.
+ *      (3) If there are no valid boxes in a boxa, the box corresponding
+ *          to its extent has all fields set to 0 (an invalid box).
+ * 
+ */ +l_ok +boxaaGetExtent(BOXAA *baa, + l_int32 *pw, + l_int32 *ph, + BOX **pbox, + BOXA **pboxa) +{ +l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; +BOX *box1; +BOXA *boxa, *boxa1; + + PROCNAME("boxaaGetExtent"); + + if (!pw && !ph && !pbox && !pboxa) + return ERROR_INT("no ptrs defined", procName, 1); + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbox) *pbox = NULL; + if (pboxa) *pboxa = NULL; + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + n = boxaaGetCount(baa); + if (n == 0) + return ERROR_INT("no boxa in baa", procName, 1); + + boxa = boxaCreate(n); + xmax = ymax = 0; + xmin = ymin = 100000000; + found = FALSE; + for (i = 0; i < n; i++) { + boxa1 = boxaaGetBoxa(baa, i, L_CLONE); + boxaGetExtent(boxa1, NULL, NULL, &box1); + boxaDestroy(&boxa1); + boxGetGeometry(box1, &x, &y, &w, &h); + if (w > 0 && h > 0) { /* a valid extent box */ + found = TRUE; /* found at least one valid extent box */ + xmin = L_MIN(xmin, x); + ymin = L_MIN(ymin, y); + xmax = L_MAX(xmax, x + w); + ymax = L_MAX(ymax, y + h); + } + boxaAddBox(boxa, box1, L_INSERT); + } + if (found == FALSE) /* no valid extent boxes */ + xmin = ymin = 0; + + if (pw) *pw = xmax; + if (ph) *ph = ymax; + if (pbox) + *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); + if (pboxa) + *pboxa = boxa; + else + boxaDestroy(&boxa); + return 0; +} + + +/*! + * \brief boxaaFlattenToBoxa() + * + * \param[in] baa + * \param[out] pnaindex [optional] the boxa index in the baa + * \param[in] copyflag L_COPY or L_CLONE + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the baa to a boxa, taking the boxes in
+ *          order in the first boxa, then the second, etc.
+ *      (2) If a boxa is empty, we generate an invalid, placeholder box
+ *          of zero size.  This is useful when converting from a baa
+ *          where each boxa has either 0 or 1 boxes, and it is necessary
+ *          to maintain a 1:1 correspondence between the initial
+ *          boxa array and the resulting box array.
+ *      (3) If &naindex is defined, we generate a Numa that gives, for
+ *          each box in the baa, the index of the boxa to which it belongs.
+ * 
+ */ +BOXA * +boxaaFlattenToBoxa(BOXAA *baa, + NUMA **pnaindex, + l_int32 copyflag) +{ +l_int32 i, j, m, n; +BOXA *boxa, *boxat; +BOX *box; +NUMA *naindex; + + PROCNAME("boxaaFlattenToBoxa"); + + if (pnaindex) *pnaindex = NULL; + if (!baa) + return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); + if (pnaindex) { + naindex = numaCreate(0); + *pnaindex = naindex; + } + + n = boxaaGetCount(baa); + boxa = boxaCreate(n); + for (i = 0; i < n; i++) { + boxat = boxaaGetBoxa(baa, i, L_CLONE); + m = boxaGetCount(boxat); + if (m == 0) { /* placeholder box */ + box = boxCreate(0, 0, 0, 0); + boxaAddBox(boxa, box, L_INSERT); + if (pnaindex) + numaAddNumber(naindex, i); /* save 'row' number */ + } else { + for (j = 0; j < m; j++) { + box = boxaGetBox(boxat, j, copyflag); + boxaAddBox(boxa, box, L_INSERT); + if (pnaindex) + numaAddNumber(naindex, i); /* save 'row' number */ + } + } + boxaDestroy(&boxat); + } + + return boxa; +} + + +/*! + * \brief boxaaFlattenAligned() + * + * \param[in] baa + * \param[in] num number extracted from each + * \param[in] fillerbox [optional] that fills if necessary + * \param[in] copyflag L_COPY or L_CLONE + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the baa to a boxa, taking the first %num
+ *          boxes from each boxa.
+ *      (2) In each boxa, if there are less than %num boxes, we preserve
+ *          the alignment between the input baa and the output boxa
+ *          by inserting one or more fillerbox(es) or, if %fillerbox == NULL,
+ *          one or more invalid placeholder boxes.
+ * 
+ */ +BOXA * +boxaaFlattenAligned(BOXAA *baa, + l_int32 num, + BOX *fillerbox, + l_int32 copyflag) +{ +l_int32 i, j, m, n, mval, nshort; +BOXA *boxat, *boxad; +BOX *box; + + PROCNAME("boxaaFlattenAligned"); + + if (!baa) + return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + n = boxaaGetCount(baa); + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + boxat = boxaaGetBoxa(baa, i, L_CLONE); + m = boxaGetCount(boxat); + mval = L_MIN(m, num); + nshort = num - mval; + for (j = 0; j < mval; j++) { /* take the first %num if possible */ + box = boxaGetBox(boxat, j, copyflag); + boxaAddBox(boxad, box, L_INSERT); + } + for (j = 0; j < nshort; j++) { /* add fillers if necessary */ + if (fillerbox) { + boxaAddBox(boxad, fillerbox, L_COPY); + } else { + box = boxCreate(0, 0, 0, 0); /* invalid placeholder box */ + boxaAddBox(boxad, box, L_INSERT); + } + } + boxaDestroy(&boxat); + } + + return boxad; +} + + +/*! + * \brief boxaEncapsulateAligned() + * + * \param[in] boxa + * \param[in] num number put into each boxa in the baa + * \param[in] copyflag L_COPY or L_CLONE + * \return baa, or NULL on error + * + *
+ * Notes:
+ *      (1) This puts %num boxes from the input %boxa into each of a
+ *          set of boxa within an output baa.
+ *      (2) This assumes that the boxes in %boxa are in sets of %num each.
+ * 
+ */ +BOXAA * +boxaEncapsulateAligned(BOXA *boxa, + l_int32 num, + l_int32 copyflag) +{ +l_int32 i, j, n, nbaa, index; +BOX *box; +BOXA *boxat; +BOXAA *baa; + + PROCNAME("boxaEncapsulateAligned"); + + if (!boxa) + return (BOXAA *)ERROR_PTR("boxa not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); + + n = boxaGetCount(boxa); + nbaa = n / num; + if (num * nbaa != n) + L_ERROR("inconsistent alignment: num doesn't divide n\n", procName); + baa = boxaaCreate(nbaa); + for (i = 0, index = 0; i < nbaa; i++) { + boxat = boxaCreate(num); + for (j = 0; j < num; j++, index++) { + box = boxaGetBox(boxa, index, copyflag); + boxaAddBox(boxat, box, L_INSERT); + } + boxaaAddBoxa(baa, boxat, L_INSERT); + } + + return baa; +} + + +/*! + * \brief boxaaTranspose() + * + * \param[in] baas + * \return baad, or NULL on error + * + *
+ * Notes:
+ *      (1) If you think of a boxaa as a 2D array of boxes that is accessed
+ *          row major, then each row is represented by one of the boxa.
+ *          This function creates a new boxaa related to the input boxaa
+ *          as a column major traversal of the input boxaa.
+ *      (2) For example, if %baas has 2 boxa, each with 10 boxes, then
+ *          %baad will have 10 boxa, each with 2 boxes.
+ *      (3) Require for this transpose operation that each boxa in
+ *          %baas has the same number of boxes.  This operation is useful
+ *          when the i-th boxes in each boxa are meaningfully related.
+ * 
+ */ +BOXAA * +boxaaTranspose(BOXAA *baas) +{ +l_int32 i, j, ny, nb, nbox; +BOX *box; +BOXA *boxa; +BOXAA *baad; + + PROCNAME("boxaaTranspose"); + + if (!baas) + return (BOXAA *)ERROR_PTR("baas not defined", procName, NULL); + if ((ny = boxaaGetCount(baas)) == 0) + return (BOXAA *)ERROR_PTR("baas empty", procName, NULL); + + /* Make sure that each boxa in baas has the same number of boxes */ + for (i = 0; i < ny; i++) { + if ((boxa = boxaaGetBoxa(baas, i, L_CLONE)) == NULL) + return (BOXAA *)ERROR_PTR("baas is missing a boxa", procName, NULL); + nb = boxaGetCount(boxa); + boxaDestroy(&boxa); + if (i == 0) + nbox = nb; + else if (nb != nbox) + return (BOXAA *)ERROR_PTR("boxa are not all the same size", + procName, NULL); + } + + /* baad[i][j] = baas[j][i] */ + baad = boxaaCreate(nbox); + for (i = 0; i < nbox; i++) { + boxa = boxaCreate(ny); + for (j = 0; j < ny; j++) { + box = boxaaGetBox(baas, j, i, L_COPY); + boxaAddBox(boxa, box, L_INSERT); + } + boxaaAddBoxa(baad, boxa, L_INSERT); + } + return baad; +} + + +/*! + * \brief boxaaAlignBox() + * + * \param[in] baa + * \param[in] box to be aligned with bext boxa in the baa, if possible + * \param[in] delta amount by which consecutive components can miss + * in overlap and still be included in the array + * \param[out] pindex index of boxa with best overlap, or if none match, + * this is the index of the next boxa to be generated + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is not greedy.  It finds the boxa whose vertical
+ *          extent has the closest overlap with the input box.
+ * 
+ */ +l_ok +boxaaAlignBox(BOXAA *baa, + BOX *box, + l_int32 delta, + l_int32 *pindex) +{ +l_int32 i, n, m, y, yt, h, ht, ovlp, maxovlp, maxindex; +BOX *boxt; +BOXA *boxa; + + PROCNAME("boxaaAlignBox"); + + if (pindex) *pindex = 0; + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + + n = boxaaGetCount(baa); + boxGetGeometry(box, NULL, &y, NULL, &h); + maxovlp = -10000000; + for (i = 0; i < n; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + if ((m = boxaGetCount(boxa)) == 0) { + boxaDestroy(&boxa); + L_WARNING("no boxes in boxa\n", procName); + continue; + } + boxaGetExtent(boxa, NULL, NULL, &boxt); + boxGetGeometry(boxt, NULL, &yt, NULL, &ht); + boxDestroy(&boxt); + boxaDestroy(&boxa); + + /* Overlap < 0 means the components do not overlap vertically */ + if (yt >= y) + ovlp = y + h - 1 - yt; + else + ovlp = yt + ht - 1 - y; + if (ovlp > maxovlp) { + maxovlp = ovlp; + maxindex = i; + } + } + + if (maxovlp + delta >= 0) + *pindex = maxindex; + else + *pindex = n; + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/boxfunc3.c b/3rdparty/hgOCR/leptonica/boxfunc3.c new file mode 100644 index 00000000..692aa482 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxfunc3.c @@ -0,0 +1,1626 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxfunc3.c + *
+ *
+ *      Boxa/Boxaa painting into pix
+ *           PIX             *pixMaskConnComp()
+ *           PIX             *pixMaskBoxa()
+ *           PIX             *pixPaintBoxa()
+ *           PIX             *pixSetBlackOrWhiteBoxa()
+ *           PIX             *pixPaintBoxaRandom()
+ *           PIX             *pixBlendBoxaRandom()
+ *           PIX             *pixDrawBoxa()
+ *           PIX             *pixDrawBoxaRandom()
+ *           PIX             *boxaaDisplay()
+ *           PIXA            *pixaDisplayBoxaa()
+ *
+ *      Split mask components into Boxa
+ *           BOXA            *pixSplitIntoBoxa()
+ *           BOXA            *pixSplitComponentIntoBoxa()
+ *           static l_int32   pixSearchForRectangle()
+ *
+ *      Represent horizontal or vertical mosaic strips
+ *           BOXA            *makeMosaicStrips()
+ *
+ *      Comparison between boxa
+ *           l_int32          boxaCompareRegions()
+ *
+ *      Reliable selection of a single large box
+ *           BOX             *pixSelectLargeULComp()
+ *           BOX             *boxaSelectLargeULBox()
+ *
+ *  See summary in pixPaintBoxa() of various ways to paint and draw
+ *  boxes on images.
+ * 
+ */ + +#include "allheaders.h" + +static l_int32 pixSearchForRectangle(PIX *pixs, BOX *boxs, l_int32 minsum, + l_int32 skipdist, l_int32 delta, + l_int32 maxbg, l_int32 sideflag, + BOXA *boxat, NUMA *nascore); + +#ifndef NO_CONSOLE_IO +#define DEBUG_SPLIT 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * Boxa/Boxaa painting into Pix * + *---------------------------------------------------------------------*/ +/*! + * \brief pixMaskConnComp() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \param[out] pboxa [optional] bounding boxes of c.c. + * \return pixd 1 bpp mask over the c.c., or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a mask image with ON pixels over the
+ *          b.b. of the c.c. in pixs.  If there are no ON pixels in pixs,
+ *          pixd will also have no ON pixels.
+ * 
+ */ +PIX * +pixMaskConnComp(PIX *pixs, + l_int32 connectivity, + BOXA **pboxa) +{ +BOXA *boxa; +PIX *pixd; + + PROCNAME("pixMaskConnComp"); + + if (pboxa) *pboxa = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + boxa = pixConnComp(pixs, NULL, connectivity); + pixd = pixCreateTemplate(pixs); + if (boxaGetCount(boxa) != 0) + pixMaskBoxa(pixd, pixd, boxa, L_SET_PIXELS); + if (pboxa) + *pboxa = boxa; + else + boxaDestroy(&boxa); + return pixd; +} + + +/*! + * \brief pixMaskBoxa() + * + * \param[in] pixd [optional] may be NULL + * \param[in] pixs any depth; not cmapped + * \param[in] boxa of boxes, to paint + * \param[in] op L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return pixd with masking op over the boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) This can be used with:
+ *              pixd = NULL  (makes a new pixd)
+ *              pixd = pixs  (in-place)
+ *      (2) If pixd == NULL, this first makes a copy of pixs, and then
+ *          bit-twiddles over the boxes.  Otherwise, it operates directly
+ *          on pixs.
+ *      (3) This simple function is typically used with 1 bpp images.
+ *          It uses the 1-image rasterop function, rasteropUniLow(),
+ *          to set, clear or flip the pixels in pixd.
+ *      (4) If you want to generate a 1 bpp mask of ON pixels from the boxes
+ *          in a Boxa, in a pix of size (w,h):
+ *              pix = pixCreate(w, h, 1);
+ *              pixMaskBoxa(pix, pix, boxa, L_SET_PIXELS);
+ * 
+ */ +PIX * +pixMaskBoxa(PIX *pixd, + PIX *pixs, + BOXA *boxa, + l_int32 op) +{ +l_int32 i, n, x, y, w, h; +BOX *box; + + PROCNAME("pixMaskBoxa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("if pixd, must be in-place", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return (PIX *)ERROR_PTR("invalid op", procName, NULL); + + pixd = pixCopy(pixd, pixs); + if ((n = boxaGetCount(boxa)) == 0) { + L_WARNING("no boxes to mask\n", procName); + return pixd; + } + + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + if (op == L_SET_PIXELS) + pixRasterop(pixd, x, y, w, h, PIX_SET, NULL, 0, 0); + else if (op == L_CLEAR_PIXELS) + pixRasterop(pixd, x, y, w, h, PIX_CLR, NULL, 0, 0); + else /* op == L_FLIP_PIXELS */ + pixRasterop(pixd, x, y, w, h, PIX_NOT(PIX_DST), NULL, 0, 0); + boxDestroy(&box); + } + + return pixd; +} + + +/*! + * \brief pixPaintBoxa() + * + * \param[in] pixs any depth, can be cmapped + * \param[in] boxa of boxes, to paint + * \param[in] val rgba color to paint + * \return pixd with painted boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp
+ *          and the boxa is painted using a colormap; otherwise,
+ *          it is converted to 32 bpp rgb.
+ *      (2) There are several ways to display a box on an image:
+ *            * Paint it as a solid color
+ *            * Draw the outline
+ *            * Blend the outline or region with the existing image
+ *          We provide painting and drawing here; blending is in blend.c.
+ *          When painting or drawing, the result can be either a
+ *          cmapped image or an rgb image.  The dest will be cmapped
+ *          if the src is either 1 bpp or has a cmap that is not full.
+ *          To force RGB output, use pixConvertTo8(pixs, FALSE)
+ *          before calling any of these paint and draw functions.
+ * 
+ */ +PIX * +pixPaintBoxa(PIX *pixs, + BOXA *boxa, + l_uint32 val) +{ +l_int32 i, n, d, rval, gval, bval, newindex; +l_int32 mapvacancy; /* true only if cmap and not full */ +BOX *box; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixPaintBoxa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + + if ((n = boxaGetCount(boxa)) == 0) { + L_WARNING("no boxes to paint; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + mapvacancy = FALSE; + if ((cmap = pixGetColormap(pixs)) != NULL) { + if (pixcmapGetCount(cmap) < 256) + mapvacancy = TRUE; + } + if (pixGetDepth(pixs) == 1 || mapvacancy) + pixd = pixConvertTo8(pixs, TRUE); + else + pixd = pixConvertTo32(pixs); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + d = pixGetDepth(pixd); + if (d == 8) { /* colormapped */ + cmap = pixGetColormap(pixd); + extractRGBValues(val, &rval, &gval, &bval); + if (pixcmapAddNewColor(cmap, rval, gval, bval, &newindex)) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("cmap full; can't add", procName, NULL); + } + } + + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + if (d == 8) + pixSetInRectArbitrary(pixd, box, newindex); + else + pixSetInRectArbitrary(pixd, box, val); + boxDestroy(&box); + } + + return pixd; +} + + +/*! + * \brief pixSetBlackOrWhiteBoxa() + * + * \param[in] pixs any depth, can be cmapped + * \param[in] boxa [optional] of boxes, to clear or set + * \param[in] op L_SET_BLACK, L_SET_WHITE + * \return pixd with boxes filled with white or black, or NULL on error + */ +PIX * +pixSetBlackOrWhiteBoxa(PIX *pixs, + BOXA *boxa, + l_int32 op) +{ +l_int32 i, n, d, index; +l_uint32 color; +BOX *box; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixSetBlackOrWhiteBoxa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return pixCopy(NULL, pixs); + if ((n = boxaGetCount(boxa)) == 0) + return pixCopy(NULL, pixs); + + pixd = pixCopy(NULL, pixs); + d = pixGetDepth(pixd); + if (d == 1) { + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + if (op == L_SET_WHITE) + pixClearInRect(pixd, box); + else + pixSetInRect(pixd, box); + boxDestroy(&box); + } + return pixd; + } + + cmap = pixGetColormap(pixs); + if (cmap) { + color = (op == L_SET_WHITE) ? 1 : 0; + pixcmapAddBlackOrWhite(cmap, color, &index); + } else if (d == 8) { + color = (op == L_SET_WHITE) ? 0xff : 0x0; + } else if (d == 32) { + color = (op == L_SET_WHITE) ? 0xffffff00 : 0x0; + } else if (d == 2) { + color = (op == L_SET_WHITE) ? 0x3 : 0x0; + } else if (d == 4) { + color = (op == L_SET_WHITE) ? 0xf : 0x0; + } else if (d == 16) { + color = (op == L_SET_WHITE) ? 0xffff : 0x0; + } else { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("invalid depth", procName, NULL); + } + + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + if (cmap) + pixSetInRectArbitrary(pixd, box, index); + else + pixSetInRectArbitrary(pixd, box, color); + boxDestroy(&box); + } + + return pixd; +} + + +/*! + * \brief pixPaintBoxaRandom() + * + * \param[in] pixs any depth, can be cmapped + * \param[in] boxa of boxes, to paint + * \return pixd with painted boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is 1 bpp, we paint the boxa using a colormap;
+ *          otherwise, we convert to 32 bpp.
+ *      (2) We use up to 254 different colors for painting the regions.
+ *      (3) If boxes overlap, the later ones paint over earlier ones.
+ * 
+ */ +PIX * +pixPaintBoxaRandom(PIX *pixs, + BOXA *boxa) +{ +l_int32 i, n, d, rval, gval, bval, index; +l_uint32 val; +BOX *box; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixPaintBoxaRandom"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + + if ((n = boxaGetCount(boxa)) == 0) { + L_WARNING("no boxes to paint; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + if (pixGetDepth(pixs) == 1) + pixd = pixConvert1To8(NULL, pixs, 255, 0); + else + pixd = pixConvertTo32(pixs); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + cmap = pixcmapCreateRandom(8, 1, 1); + d = pixGetDepth(pixd); /* either 8 or 32 */ + if (d == 8) /* colormapped */ + pixSetColormap(pixd, cmap); + + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + index = 1 + (i % 254); + if (d == 8) { + pixSetInRectArbitrary(pixd, box, index); + } else { /* d == 32 */ + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &val); + pixSetInRectArbitrary(pixd, box, val); + } + boxDestroy(&box); + } + + if (d == 32) + pixcmapDestroy(&cmap); + return pixd; +} + + +/*! + * \brief pixBlendBoxaRandom() + * + * \param[in] pixs any depth; can be cmapped + * \param[in] boxa of boxes, to blend/paint + * \param[in] fract of box color to use + * \return pixd 32 bpp, with blend/painted boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) pixs is converted to 32 bpp.
+ *      (2) This differs from pixPaintBoxaRandom(), in that the
+ *          colors here are blended with the color of pixs.
+ *      (3) We use up to 254 different colors for painting the regions.
+ *      (4) If boxes overlap, the final color depends only on the last
+ *          rect that is used.
+ * 
+ */ +PIX * +pixBlendBoxaRandom(PIX *pixs, + BOXA *boxa, + l_float32 fract) +{ +l_int32 i, n, rval, gval, bval, index; +l_uint32 val; +BOX *box; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixBlendBoxaRandom"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + + if ((n = boxaGetCount(boxa)) == 0) { + L_WARNING("no boxes to paint; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + if ((pixd = pixConvertTo32(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not defined", procName, NULL); + + cmap = pixcmapCreateRandom(8, 1, 1); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + index = 1 + (i % 254); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &val); + pixBlendInRect(pixd, box, val, fract); + boxDestroy(&box); + } + + pixcmapDestroy(&cmap); + return pixd; +} + + +/*! + * \brief pixDrawBoxa() + * + * \param[in] pixs any depth; can be cmapped + * \param[in] boxa of boxes, to draw + * \param[in] width of lines + * \param[in] val rgba color to draw + * \return pixd with outlines of boxes added, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp
+ *          and the boxa is drawn using a colormap; otherwise,
+ *          it is converted to 32 bpp rgb.
+ * 
+ */ +PIX * +pixDrawBoxa(PIX *pixs, + BOXA *boxa, + l_int32 width, + l_uint32 val) +{ +l_int32 rval, gval, bval, newindex; +l_int32 mapvacancy; /* true only if cmap and not full */ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixDrawBoxa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (width < 1) + return (PIX *)ERROR_PTR("width must be >= 1", procName, NULL); + + if (boxaGetCount(boxa) == 0) { + L_WARNING("no boxes to draw; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + mapvacancy = FALSE; + if ((cmap = pixGetColormap(pixs)) != NULL) { + if (pixcmapGetCount(cmap) < 256) + mapvacancy = TRUE; + } + if (pixGetDepth(pixs) == 1 || mapvacancy) + pixd = pixConvertTo8(pixs, TRUE); + else + pixd = pixConvertTo32(pixs); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + extractRGBValues(val, &rval, &gval, &bval); + if (pixGetDepth(pixd) == 8) { /* colormapped */ + cmap = pixGetColormap(pixd); + pixcmapAddNewColor(cmap, rval, gval, bval, &newindex); + } + + pixRenderBoxaArb(pixd, boxa, width, rval, gval, bval); + return pixd; +} + + +/*! + * \brief pixDrawBoxaRandom() + * + * \param[in] pixs any depth, can be cmapped + * \param[in] boxa of boxes, to draw + * \param[in] width thickness of line + * \return pixd with box outlines drawn, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is 1 bpp, we draw the boxa using a colormap;
+ *          otherwise, we convert to 32 bpp.
+ *      (2) We use up to 254 different colors for drawing the boxes.
+ *      (3) If boxes overlap, the later ones draw over earlier ones.
+ * 
+ */ +PIX * +pixDrawBoxaRandom(PIX *pixs, + BOXA *boxa, + l_int32 width) +{ +l_int32 i, n, rval, gval, bval, index; +BOX *box; +PIX *pixd; +PIXCMAP *cmap; +PTAA *ptaa; + + PROCNAME("pixDrawBoxaRandom"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (width < 1) + return (PIX *)ERROR_PTR("width must be >= 1", procName, NULL); + + if ((n = boxaGetCount(boxa)) == 0) { + L_WARNING("no boxes to draw; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + /* Input depth = 1 bpp; generate cmapped output */ + if (pixGetDepth(pixs) == 1) { + ptaa = generatePtaaBoxa(boxa); + pixd = pixRenderRandomCmapPtaa(pixs, ptaa, 1, width, 1); + ptaaDestroy(&ptaa); + return pixd; + } + + /* Generate rgb output */ + pixd = pixConvertTo32(pixs); + cmap = pixcmapCreateRandom(8, 1, 1); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + index = 1 + (i % 254); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + pixRenderBoxArb(pixd, box, width, rval, gval, bval); + boxDestroy(&box); + } + pixcmapDestroy(&cmap); + return pixd; +} + + +/*! + * \brief boxaaDisplay() + * + * \param[in] pixs [optional] 1 bpp + * \param[in] baa boxaa, typically from a 2d sort + * \param[in] linewba line width to display outline of each boxa + * \param[in] linewb line width to display outline of each box + * \param[in] colorba color to display boxa + * \param[in] colorb color to display box + * \param[in] w width of outupt pix; use 0 if determined by %pixs or %baa + * \param[in] h height of outupt pix; use 0 if determined by %pixs or %baa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %pixs exists, this renders the boxes over an 8 bpp version
+ *          of it.  Otherwise, it renders the boxes over an empty image
+ *          with a white background.
+ *      (2) If %pixs exists, the dimensions of %pixd are the same,
+ *          and input values of %w and %h are ignored.
+ *          If %pixs is NULL, the dimensions of %pixd are determined by
+ *            - %w and %h if both are > 0, or
+ *            - the minimum size required using all boxes in %baa.
+ *
+ * 
+ */ +PIX * +boxaaDisplay(PIX *pixs, + BOXAA *baa, + l_int32 linewba, + l_int32 linewb, + l_uint32 colorba, + l_uint32 colorb, + l_int32 w, + l_int32 h) +{ +l_int32 i, j, n, m, rbox, gbox, bbox, rboxa, gboxa, bboxa; +BOX *box; +BOXA *boxa; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("boxaaDisplay"); + + if (!baa) + return (PIX *)ERROR_PTR("baa not defined", procName, NULL); + + if (w <= 0 || h <= 0) { + if (pixs) + pixGetDimensions(pixs, &w, &h, NULL); + else + boxaaGetExtent(baa, &w, &h, NULL, NULL); + } + + if (pixs) { + pixd = pixConvertTo8(pixs, 1); + cmap = pixGetColormap(pixd); + } else { + pixd = pixCreate(w, h, 8); + cmap = pixcmapCreate(8); + pixSetColormap(pixd, cmap); + pixcmapAddColor(cmap, 255, 255, 255); + } + extractRGBValues(colorb, &rbox, &gbox, &bbox); + extractRGBValues(colorba, &rboxa, &gboxa, &bboxa); + pixcmapAddColor(cmap, rbox, gbox, bbox); + pixcmapAddColor(cmap, rboxa, gboxa, bboxa); + + n = boxaaGetCount(baa); + for (i = 0; i < n; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + boxaGetExtent(boxa, NULL, NULL, &box); + pixRenderBoxArb(pixd, box, linewba, rboxa, gboxa, bboxa); + boxDestroy(&box); + m = boxaGetCount(boxa); + for (j = 0; j < m; j++) { + box = boxaGetBox(boxa, j, L_CLONE); + pixRenderBoxArb(pixd, box, linewb, rbox, gbox, bbox); + boxDestroy(&box); + } + boxaDestroy(&boxa); + } + + return pixd; +} + + +/*! + * \brief pixaDisplayBoxaa() + * + * \param[in] pixas any depth, can be cmapped + * \param[in] baa boxes to draw on input pixa + * \param[in] colorflag L_DRAW_RED, L_DRAW_GREEN, etc + * \param[in] width thickness of lines + * \return pixa with box outlines drawn on each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) All pix in %pixas that are not rgb are converted to rgb.
+ *      (2) Each boxa in %baa contains boxes that will be drawn on
+ *          the corresponding pix in %pixas.
+ *      (3) The color of the boxes drawn on each pix are selected with
+ *          %colorflag:
+ *            * For red, green or blue: use L_DRAW_RED, etc.
+ *            * For sequential r, g, b: use L_DRAW_RGB
+ *            * For random colors: use L_DRAW_RANDOM
+ * 
+ */ +PIXA * +pixaDisplayBoxaa(PIXA *pixas, + BOXAA *baa, + l_int32 colorflag, + l_int32 width) +{ +l_int32 i, j, nba, n, nbox, rval, gval, bval; +l_uint32 color; +l_uint32 colors[255]; +BOXA *boxa; +BOX *box; +PIX *pix; +PIXA *pixad; + + PROCNAME("pixaDisplayBoxaa"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!baa) + return (PIXA *)ERROR_PTR("baa not defined", procName, NULL); + if (width < 1) + return (PIXA *)ERROR_PTR("width must be >= 1", procName, NULL); + if ((nba = boxaaGetCount(baa)) < 1) + return (PIXA *)ERROR_PTR("no boxa in baa", procName, NULL); + if ((n = pixaGetCount(pixas)) == 0) + return (PIXA *)ERROR_PTR("no pix in pixas", procName, NULL); + if (n != nba) + return (PIXA *)ERROR_PTR("num pix != num boxa", procName, NULL); + if (colorflag == L_DRAW_RED) + color = 0xff000000; + else if (colorflag == L_DRAW_GREEN) + color = 0x00ff0000; + else if (colorflag == L_DRAW_BLUE) + color = 0x0000ff00; + else if (colorflag == L_DRAW_RGB) + color = 0x000000ff; + else if (colorflag == L_DRAW_RANDOM) + color = 0x00000000; + else + return (PIXA *)ERROR_PTR("invalid colorflag", procName, NULL); + + if (colorflag == L_DRAW_RED || colorflag == L_DRAW_GREEN || + colorflag == L_DRAW_BLUE) { + for (i = 0; i < 255; i++) + colors[i] = color; + } else if (colorflag == L_DRAW_RGB) { + for (i = 0; i < 255; i++) { + if (i % 3 == L_DRAW_RED) + colors[i] = 0xff000000; + else if (i % 3 == L_DRAW_GREEN) + colors[i] = 0x00ff0000; + else /* i % 3 == L_DRAW_BLUE) */ + colors[i] = 0x0000ff00; + } + } else if (colorflag == L_DRAW_RANDOM) { + for (i = 0; i < 255; i++) { + rval = (l_uint32)rand() & 0xff; + gval = (l_uint32)rand() & 0xff; + bval = (l_uint32)rand() & 0xff; + composeRGBPixel(rval, gval, bval, &colors[i]); + } + } + + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_COPY); + boxa = boxaaGetBoxa(baa, i, L_CLONE); + nbox = boxaGetCount(boxa); + for (j = 0; j < nbox; j++) { + box = boxaGetBox(boxa, j, L_CLONE); + extractRGBValues(colors[j % 255], &rval, &gval, &bval); + pixRenderBoxArb(pix, box, width, rval, gval, bval); + boxDestroy(&box); + } + boxaDestroy(&boxa); + pixaAddPix(pixad, pix, L_INSERT); + } + + return pixad; +} + + +/*---------------------------------------------------------------------* + * Split mask components into Boxa * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSplitIntoBoxa() + * + * \param[in] pixs 1 bpp + * \param[in] minsum minimum pixels to trigger propagation + * \param[in] skipdist distance before computing sum for propagation + * \param[in] delta difference required to stop propagation + * \param[in] maxbg maximum number of allowed bg pixels in ref scan + * \param[in] maxcomps use 0 for unlimited number of subdivided components + * \param[in] remainder set to 1 to get b.b. of remaining stuff + * \return boxa of rectangles covering the fg of pixs, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a boxa of rectangles that covers
+ *          the fg of a mask.  For each 8-connected component in pixs,
+ *          it does a greedy partitioning, choosing the largest
+ *          rectangle found from each of the four directions at each iter.
+ *          See pixSplitComponentIntoBoxa() for details.
+ *      (2) The input parameters give some flexibility for boundary
+ *          noise.  The resulting set of rectangles may cover some
+ *          bg pixels.
+ *      (3) This should be used when there are a small number of
+ *          mask components, each of which has sides that are close
+ *          to horizontal and vertical.  The input parameters %delta
+ *          and %maxbg determine whether or not holes in the mask are covered.
+ *      (4) The parameter %maxcomps gives the maximum number of allowed
+ *          rectangles extracted from any single connected component.
+ *          Use 0 if no limit is to be applied.
+ *      (5) The flag %remainder specifies whether we take a final bounding
+ *          box for anything left after the maximum number of allowed
+ *          rectangle is extracted.
+ * 
+ */ +BOXA * +pixSplitIntoBoxa(PIX *pixs, + l_int32 minsum, + l_int32 skipdist, + l_int32 delta, + l_int32 maxbg, + l_int32 maxcomps, + l_int32 remainder) +{ +l_int32 i, n; +BOX *box; +BOXA *boxa, *boxas, *boxad; +PIX *pix; +PIXA *pixas; + + PROCNAME("pixSplitIntoBoxa"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + boxas = pixConnComp(pixs, &pixas, 8); + n = boxaGetCount(boxas); + boxad = boxaCreate(0); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + box = boxaGetBox(boxas, i, L_CLONE); + boxa = pixSplitComponentIntoBoxa(pix, box, minsum, skipdist, + delta, maxbg, maxcomps, remainder); + boxaJoin(boxad, boxa, 0, -1); + pixDestroy(&pix); + boxDestroy(&box); + boxaDestroy(&boxa); + } + + pixaDestroy(&pixas); + boxaDestroy(&boxas); + return boxad; +} + + +/*! + * \brief pixSplitComponentIntoBoxa() + * + * \param[in] pix 1 bpp + * \param[in] box [optional] location of pix w/rt an origin + * \param[in] minsum minimum pixels to trigger propagation + * \param[in] skipdist distance before computing sum for propagation + * \param[in] delta difference required to stop propagation + * \param[in] maxbg maximum number of allowed bg pixels in ref scan + * \param[in] maxcomps use 0 for unlimited number of subdivided components + * \param[in] remainder set to 1 to get b.b. of remaining stuff + * \return boxa of rectangles covering the fg of pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a boxa of rectangles that covers
+ *          the fg of a mask.  It does so by a greedy partitioning of
+ *          the mask, choosing the largest rectangle found from
+ *          each of the four directions at each step.
+ *      (2) The input parameters give some flexibility for boundary
+ *          noise.  The resulting set of rectangles must cover all
+ *          the fg pixels and, in addition, may cover some bg pixels.
+ *          Using small input parameters on a noiseless mask (i.e., one
+ *          that has only large vertical and horizontal edges) will
+ *          result in a proper covering of only the fg pixels of the mask.
+ *      (3) The input is assumed to be a single connected component, that
+ *          may have holes.  From each side, sweep inward, counting
+ *          the pixels.  If the count becomes greater than %minsum,
+ *          and we have moved forward a further amount %skipdist,
+ *          record that count ('countref'), but don't accept if the scan
+ *          contains more than %maxbg bg pixels.  Continue the scan
+ *          until we reach a count that differs from countref by at
+ *          least %delta, at which point the propagation stops.  The box
+ *          swept out gets a score, which is the sum of fg pixels
+ *          minus a penalty.  The penalty is the number of bg pixels
+ *          in the box.  This is done from all four sides, and the
+ *          side with the largest score is saved as a rectangle.
+ *          The process repeats until there is either no rectangle
+ *          left, or there is one that can't be captured from any
+ *          direction.  For the latter case, we simply accept the
+ *          last rectangle.
+ *      (4) The input box is only used to specify the location of
+ *          the UL corner of pix, with respect to an origin that
+ *          typically represents the UL corner of an underlying image,
+ *          of which pix is one component.  If %box is null,
+ *          the UL corner is taken to be (0, 0).
+ *      (5) The parameter %maxcomps gives the maximum number of allowed
+ *          rectangles extracted from any single connected component.
+ *          Use 0 if no limit is to be applied.
+ *      (6) The flag %remainder specifies whether we take a final bounding
+ *          box for anything left after the maximum number of allowed
+ *          rectangle is extracted.
+ *      (7) So if %maxcomps > 0, it specifies that we want no more than
+ *          the first %maxcomps rectangles that satisfy the input
+ *          criteria.  After this, we can get a final rectangle that
+ *          bounds everything left over by setting %remainder == 1.
+ *          If %remainder == 0, we only get rectangles that satisfy
+ *          the input criteria.
+ *      (8) It should be noted that the removal of rectangles can
+ *          break the original c.c. into several c.c.
+ *      (9) Summing up:
+ *            * If %maxcomp == 0, the splitting proceeds as far as possible.
+ *            * If %maxcomp > 0, the splitting stops when %maxcomps are
+ *                found, or earlier if no more components can be selected.
+ *            * If %remainder == 1 and components remain that cannot be
+ *                selected, they are returned as a single final rectangle;
+ *                otherwise, they are ignored.
+ * 
+ */ +BOXA * +pixSplitComponentIntoBoxa(PIX *pix, + BOX *box, + l_int32 minsum, + l_int32 skipdist, + l_int32 delta, + l_int32 maxbg, + l_int32 maxcomps, + l_int32 remainder) +{ +l_int32 i, w, h, boxx, boxy, bx, by, bw, bh, maxdir, maxscore; +l_int32 iter; +BOX *boxs; /* shrinks as rectangular regions are removed */ +BOX *boxt1, *boxt2, *boxt3; +BOXA *boxat; /* stores rectangle data for each side in an iteration */ +BOXA *boxad; +NUMA *nascore, *nas; +PIX *pixs; + + PROCNAME("pixSplitComponentIntoBoxa"); + + if (!pix || pixGetDepth(pix) != 1) + return (BOXA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + + pixs = pixCopy(NULL, pix); + pixGetDimensions(pixs, &w, &h, NULL); + if (box) + boxGetGeometry(box, &boxx, &boxy, NULL, NULL); + else + boxx = boxy = 0; + boxs = boxCreate(0, 0, w, h); + boxad = boxaCreate(0); + + iter = 0; + while (boxs != NULL) { + boxGetGeometry(boxs, &bx, &by, &bw, &bh); + boxat = boxaCreate(4); /* potential rectangular regions */ + nascore = numaCreate(4); + for (i = 0; i < 4; i++) { + pixSearchForRectangle(pixs, boxs, minsum, skipdist, delta, maxbg, + i, boxat, nascore); + } + nas = numaGetSortIndex(nascore, L_SORT_DECREASING); + numaGetIValue(nas, 0, &maxdir); + numaGetIValue(nascore, maxdir, &maxscore); +#if DEBUG_SPLIT + fprintf(stderr, "Iteration: %d\n", iter); + boxPrintStreamInfo(stderr, boxs); + boxaWriteStream(stderr, boxat); + fprintf(stderr, "\nmaxdir = %d, maxscore = %d\n\n", maxdir, maxscore); +#endif /* DEBUG_SPLIT */ + if (maxscore > 0) { /* accept this */ + boxt1 = boxaGetBox(boxat, maxdir, L_CLONE); + boxt2 = boxTransform(boxt1, boxx, boxy, 1.0, 1.0); + boxaAddBox(boxad, boxt2, L_INSERT); + pixClearInRect(pixs, boxt1); + boxDestroy(&boxt1); + pixClipBoxToForeground(pixs, boxs, NULL, &boxt3); + boxDestroy(&boxs); + boxs = boxt3; + if (boxs) { + boxGetGeometry(boxs, NULL, NULL, &bw, &bh); + if (bw < 2 || bh < 2) + boxDestroy(&boxs); /* we're done */ + } + } else { /* no more valid rectangles can be found */ + if (remainder == 1) { /* save the last box */ + boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); + boxaAddBox(boxad, boxt1, L_INSERT); + } + boxDestroy(&boxs); /* we're done */ + } + boxaDestroy(&boxat); + numaDestroy(&nascore); + numaDestroy(&nas); + + iter++; + if ((iter == maxcomps) && boxs) { + if (remainder == 1) { /* save the last box */ + boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); + boxaAddBox(boxad, boxt1, L_INSERT); + } + boxDestroy(&boxs); /* we're done */ + } + } + + pixDestroy(&pixs); + return boxad; +} + + +/*! + * \brief pixSearchForRectangle() + * + * \param[in] pixs 1 bpp + * \param[in] boxs current region to investigate + * \param[in] minsum minimum pixels to trigger propagation + * \param[in] skipdist distance before computing sum for propagation + * \param[in] delta difference required to stop propagation + * \param[in] maxbg maximum number of allowed bg pixels in ref scan + * \param[in] sideflag side to search from + * \param[in] boxat add result of rectangular region found here + * \param[in] nascore add score for this rectangle here + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixSplitComponentIntoBoxa() for an explanation of the algorithm.
+ *          This does the sweep from a single side.  For each iteration
+ *          in pixSplitComponentIntoBoxa(), this will be called 4 times,
+ *          for %sideflag = {0, 1, 2, 3}.
+ *      (2) If a valid rectangle is not found, add a score of 0 and
+ *          input a minimum box.
+ * 
+ */ +static l_int32 +pixSearchForRectangle(PIX *pixs, + BOX *boxs, + l_int32 minsum, + l_int32 skipdist, + l_int32 delta, + l_int32 maxbg, + l_int32 sideflag, + BOXA *boxat, + NUMA *nascore) +{ +l_int32 bx, by, bw, bh, width, height, setref, atref; +l_int32 minincol, maxincol, mininrow, maxinrow, minval, maxval, bgref; +l_int32 x, y, x0, y0, xref, yref, colsum, rowsum, score, countref, diff; +void **lines1; +BOX *boxr; + + PROCNAME("pixSearchForRectangle"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (!boxs) + return ERROR_INT("boxs not defined", procName, 1); + if (!boxat) + return ERROR_INT("boxat not defined", procName, 1); + if (!nascore) + return ERROR_INT("nascore not defined", procName, 1); + + lines1 = pixGetLinePtrs(pixs, NULL); + boxGetGeometry(boxs, &bx, &by, &bw, &bh); + boxr = NULL; + setref = 0; + atref = 0; + maxval = 0; + minval = 100000; + score = 0; /* sum of all (fg - bg) pixels seen in the scan */ + xref = yref = 100000; /* init to impossibly big number */ + if (sideflag == L_FROM_LEFT) { + for (x = bx; x < bx + bw; x++) { + colsum = 0; + maxincol = 0; + minincol = 100000; + for (y = by; y < by + bh; y++) { + if (GET_DATA_BIT(lines1[y], x)) { + colsum++; + if (y > maxincol) maxincol = y; + if (y < minincol) minincol = y; + } + } + score += colsum; + + /* Enough fg to sweep out a rectangle? */ + if (!setref && colsum >= minsum) { + setref = 1; + xref = x + 10; + if (xref >= bx + bw) + goto failure; + } + + /* Reached the reference line; save the count; + * if there is too much bg, the rectangle is invalid. */ + if (setref && x == xref) { + atref = 1; + countref = colsum; + bgref = maxincol - minincol + 1 - countref; + if (bgref > maxbg) + goto failure; + } + + /* Have we left the rectangle? If so, save it along + * with the score. */ + if (atref) { + diff = L_ABS(colsum - countref); + if (diff >= delta || x == bx + bw - 1) { + height = maxval - minval + 1; + width = x - bx; + if (x == bx + bw - 1) width = x - bx + 1; + boxr = boxCreate(bx, minval, width, height); + score = 2 * score - width * height; + goto success; + } + } + maxval = L_MAX(maxval, maxincol); + minval = L_MIN(minval, minincol); + } + goto failure; + } else if (sideflag == L_FROM_RIGHT) { + for (x = bx + bw - 1; x >= bx; x--) { + colsum = 0; + maxincol = 0; + minincol = 100000; + for (y = by; y < by + bh; y++) { + if (GET_DATA_BIT(lines1[y], x)) { + colsum++; + if (y > maxincol) maxincol = y; + if (y < minincol) minincol = y; + } + } + score += colsum; + if (!setref && colsum >= minsum) { + setref = 1; + xref = x - 10; + if (xref < bx) + goto failure; + } + if (setref && x == xref) { + atref = 1; + countref = colsum; + bgref = maxincol - minincol + 1 - countref; + if (bgref > maxbg) + goto failure; + } + if (atref) { + diff = L_ABS(colsum - countref); + if (diff >= delta || x == bx) { + height = maxval - minval + 1; + x0 = x + 1; + if (x == bx) x0 = x; + width = bx + bw - x0; + boxr = boxCreate(x0, minval, width, height); + score = 2 * score - width * height; + goto success; + } + } + maxval = L_MAX(maxval, maxincol); + minval = L_MIN(minval, minincol); + } + goto failure; + } else if (sideflag == L_FROM_TOP) { + for (y = by; y < by + bh; y++) { + rowsum = 0; + maxinrow = 0; + mininrow = 100000; + for (x = bx; x < bx + bw; x++) { + if (GET_DATA_BIT(lines1[y], x)) { + rowsum++; + if (x > maxinrow) maxinrow = x; + if (x < mininrow) mininrow = x; + } + } + score += rowsum; + if (!setref && rowsum >= minsum) { + setref = 1; + yref = y + 10; + if (yref >= by + bh) + goto failure; + } + if (setref && y == yref) { + atref = 1; + countref = rowsum; + bgref = maxinrow - mininrow + 1 - countref; + if (bgref > maxbg) + goto failure; + } + if (atref) { + diff = L_ABS(rowsum - countref); + if (diff >= delta || y == by + bh - 1) { + width = maxval - minval + 1; + height = y - by; + if (y == by + bh - 1) height = y - by + 1; + boxr = boxCreate(minval, by, width, height); + score = 2 * score - width * height; + goto success; + } + } + maxval = L_MAX(maxval, maxinrow); + minval = L_MIN(minval, mininrow); + } + goto failure; + } else if (sideflag == L_FROM_BOT) { + for (y = by + bh - 1; y >= by; y--) { + rowsum = 0; + maxinrow = 0; + mininrow = 100000; + for (x = bx; x < bx + bw; x++) { + if (GET_DATA_BIT(lines1[y], x)) { + rowsum++; + if (x > maxinrow) maxinrow = x; + if (x < mininrow) mininrow = x; + } + } + score += rowsum; + if (!setref && rowsum >= minsum) { + setref = 1; + yref = y - 10; + if (yref < by) + goto failure; + } + if (setref && y == yref) { + atref = 1; + countref = rowsum; + bgref = maxinrow - mininrow + 1 - countref; + if (bgref > maxbg) + goto failure; + } + if (atref) { + diff = L_ABS(rowsum - countref); + if (diff >= delta || y == by) { + width = maxval - minval + 1; + y0 = y + 1; + if (y == by) y0 = y; + height = by + bh - y0; + boxr = boxCreate(minval, y0, width, height); + score = 2 * score - width * height; + goto success; + } + } + maxval = L_MAX(maxval, maxinrow); + minval = L_MIN(minval, mininrow); + } + goto failure; + } + +failure: + numaAddNumber(nascore, 0); + boxaAddBox(boxat, boxCreate(0, 0, 1, 1), L_INSERT); /* min box */ + LEPT_FREE(lines1); + return 0; + +success: + numaAddNumber(nascore, score); + boxaAddBox(boxat, boxr, L_INSERT); + LEPT_FREE(lines1); + return 0; +} + + +/*---------------------------------------------------------------------* + * Represent horizontal or vertical mosaic strips * + *---------------------------------------------------------------------*/ +/*! + * \brief makeMosaicStrips() + * + * \param[in] w, h + * \param[in] direction L_SCAN_HORIZONTAL or L_SCAN_VERTICAL + * \param[in] size of strips in the scan direction + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) For example, this can be used to generate a pixa of
+ *          vertical strips of width 10 from an image, using:
+ *             pixGetDimensions(pix, &w, &h, NULL);
+ *             boxa = makeMosaicStrips(w, h, L_SCAN_HORIZONTAL, 10);
+ *             pixa = pixClipRectangles(pix, boxa);
+ *          All strips except the last will be the same width.  The
+ *          last strip will have width w % 10.
+ * 
+ */ +BOXA * +makeMosaicStrips(l_int32 w, + l_int32 h, + l_int32 direction, + l_int32 size) +{ +l_int32 i, nstrips, extra; +BOX *box; +BOXA *boxa; + + PROCNAME("makeMosaicStrips"); + + if (w < 1 || h < 1) + return (BOXA *)ERROR_PTR("invalid w or h", procName, NULL); + if (direction != L_SCAN_HORIZONTAL && direction != L_SCAN_VERTICAL) + return (BOXA *)ERROR_PTR("invalid direction", procName, NULL); + if (size < 1) + return (BOXA *)ERROR_PTR("size < 1", procName, NULL); + + boxa = boxaCreate(0); + if (direction == L_SCAN_HORIZONTAL) { + nstrips = w / size; + for (i = 0; i < nstrips; i++) { + box = boxCreate(i * size, 0, size, h); + boxaAddBox(boxa, box, L_INSERT); + } + if ((extra = w % size) > 0) { + box = boxCreate(nstrips * size, 0, extra, h); + boxaAddBox(boxa, box, L_INSERT); + } + } else { + nstrips = h / size; + for (i = 0; i < nstrips; i++) { + box = boxCreate(0, i * size, w, size); + boxaAddBox(boxa, box, L_INSERT); + } + if ((extra = h % size) > 0) { + box = boxCreate(0, nstrips * size, w, extra); + boxaAddBox(boxa, box, L_INSERT); + } + } + return boxa; +} + + +/*---------------------------------------------------------------------* + * Comparison between boxa * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaCompareRegions() + * + * \param[in] boxa1, boxa2 + * \param[in] areathresh minimum area of boxes to be considered + * \param[out] pnsame true if same number of boxes + * \param[out] pdiffarea fractional difference in total area + * \param[out] pdiffxor [optional] fractional difference in xor of regions + * \param[out] ppixdb [optional] debug pix showing two boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes 2 boxa, removes all boxes smaller than a given area,
+ *          and compares the remaining boxes between the boxa.
+ *      (2) The area threshold is introduced to help remove noise from
+ *          small components.  Any box with a smaller value of w * h
+ *          will be removed from consideration.
+ *      (3) The xor difference is the most stringent test, requiring alignment
+ *          of the corresponding boxes.  It is also more computationally
+ *          intensive and is optionally returned.  Alignment is to the
+ *          UL corner of each region containing all boxes, as given by
+ *          boxaGetExtent().
+ *      (4) Both fractional differences are with respect to the total
+ *          area in the two boxa.  They range from 0.0 to 1.0.
+ *          A perfect match has value 0.0.  If both boxa are empty,
+ *          we return 0.0; if one is empty we return 1.0.
+ *      (5) An example input might be the rectangular regions of a
+ *          segmentation mask for text or images from two pages.
+ * 
+ */ +l_ok +boxaCompareRegions(BOXA *boxa1, + BOXA *boxa2, + l_int32 areathresh, + l_int32 *pnsame, + l_float32 *pdiffarea, + l_float32 *pdiffxor, + PIX **ppixdb) +{ +l_int32 w, h, x3, y3, w3, h3, x4, y4, w4, h4, n3, n4, area1, area2; +l_int32 count3, count4, countxor; +l_int32 *tab; +BOX *box3, *box4; +BOXA *boxa3, *boxa4, *boxa3t, *boxa4t; +PIX *pix1, *pix2, *pix3, *pix4, *pix5; +PIXA *pixa; + + PROCNAME("boxaCompareRegions"); + + if (pdiffxor) *pdiffxor = 1.0; + if (ppixdb) *ppixdb = NULL; + if (pnsame) *pnsame = FALSE; + if (pdiffarea) *pdiffarea = 1.0; + if (!boxa1 || !boxa2) + return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); + if (!pnsame) + return ERROR_INT("&nsame not defined", procName, 1); + if (!pdiffarea) + return ERROR_INT("&diffarea not defined", procName, 1); + + boxa3 = boxaSelectByArea(boxa1, areathresh, L_SELECT_IF_GTE, NULL); + boxa4 = boxaSelectByArea(boxa2, areathresh, L_SELECT_IF_GTE, NULL); + n3 = boxaGetCount(boxa3); + n4 = boxaGetCount(boxa4); + if (n3 == n4) + *pnsame = TRUE; + + /* There are no boxes in one or both */ + if (n3 == 0 || n4 == 0) { + boxaDestroy(&boxa3); + boxaDestroy(&boxa4); + if (n3 == 0 && n4 == 0) { /* they are both empty: we say they are the + * same; otherwise, they differ maximally + * and retain the default value. */ + *pdiffarea = 0.0; + if (pdiffxor) *pdiffxor = 0.0; + } + return 0; + } + + /* There are boxes in both */ + boxaGetArea(boxa3, &area1); + boxaGetArea(boxa4, &area2); + *pdiffarea = (l_float32)L_ABS(area1 - area2) / (l_float32)(area1 + area2); + if (!pdiffxor) { + boxaDestroy(&boxa3); + boxaDestroy(&boxa4); + return 0; + } + + /* The easiest way to get the xor of aligned boxes is to work + * with images of each boxa. This is done by translating each + * boxa so that the UL corner of the region that includes all + * boxes in the boxa is placed at the origin of each pix. */ + boxaGetExtent(boxa3, &w, &h, &box3); + boxaGetExtent(boxa4, &w, &h, &box4); + boxGetGeometry(box3, &x3, &y3, &w3, &h3); + boxGetGeometry(box4, &x4, &y4, &w4, &h4); + boxa3t = boxaTransform(boxa3, -x3, -y3, 1.0, 1.0); + boxa4t = boxaTransform(boxa4, -x4, -y4, 1.0, 1.0); + w = L_MAX(x3 + w3, x4 + w4); + h = L_MAX(y3 + h3, y4 + h4); + pix3 = pixCreate(w, h, 1); /* use the max to keep everything in the xor */ + pix4 = pixCreate(w, h, 1); + pixMaskBoxa(pix3, pix3, boxa3t, L_SET_PIXELS); + pixMaskBoxa(pix4, pix4, boxa4t, L_SET_PIXELS); + tab = makePixelSumTab8(); + pixCountPixels(pix3, &count3, tab); + pixCountPixels(pix4, &count4, tab); + pix5 = pixXor(NULL, pix3, pix4); + pixCountPixels(pix5, &countxor, tab); + LEPT_FREE(tab); + *pdiffxor = (l_float32)countxor / (l_float32)(count3 + count4); + + if (ppixdb) { + pixa = pixaCreate(2); + pix1 = pixCreate(w, h, 32); + pixSetAll(pix1); + pixRenderHashBoxaBlend(pix1, boxa3, 5, 1, L_POS_SLOPE_LINE, 2, + 255, 0, 0, 0.5); + pixRenderHashBoxaBlend(pix1, boxa4, 5, 1, L_NEG_SLOPE_LINE, 2, + 0, 255, 0, 0.5); + pixaAddPix(pixa, pix1, L_INSERT); + pix2 = pixCreate(w, h, 32); + pixPaintThroughMask(pix2, pix3, x3, y3, 0xff000000); + pixPaintThroughMask(pix2, pix4, x4, y4, 0x00ff0000); + pixAnd(pix3, pix3, pix4); + pixPaintThroughMask(pix2, pix3, x3, y3, 0x0000ff00); + pixaAddPix(pixa, pix2, L_INSERT); + *ppixdb = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); + pixaDestroy(&pixa); + } + + boxDestroy(&box3); + boxDestroy(&box4); + boxaDestroy(&boxa3); + boxaDestroy(&boxa3t); + boxaDestroy(&boxa4); + boxaDestroy(&boxa4t); + pixDestroy(&pix3); + pixDestroy(&pix4); + pixDestroy(&pix5); + return 0; +} + + +/*---------------------------------------------------------------------* + * Reliable selection of a single large box * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSelectLargeULComp() + * + * \param[in] pixs 1 bpp + * \param[in] areaslop fraction near but less than 1.0 + * \param[in] yslop number of pixels in y direction + * \param[in] connectivity 4 or 8 + * \return box, or NULL on error + * + *
+ * Notes:
+ *      (1) This selects a box near the top (first) and left (second)
+ *          of the image, from the set of all boxes that have
+ *                area >= %areaslop * (area of biggest box),
+ *          where %areaslop is some fraction; say ~ 0.9.
+ *      (2) For all boxes satisfying the above condition, select
+ *          the left-most box that is within %yslop (say, 20) pixels
+ *          of the box nearest the top.
+ *      (3) This can be used to reliably select a specific one of
+ *          the largest regions in an image, for applications where
+ *          there are expected to be small variations in region size
+ *          and location.
+ *      (4) See boxSelectLargeULBox() for implementation details.
+ * 
+ */ +BOX * +pixSelectLargeULComp(PIX *pixs, + l_float32 areaslop, + l_int32 yslop, + l_int32 connectivity) +{ +BOX *box; +BOXA *boxa1; + + PROCNAME("pixSelectLargeULComp"); + + if (!pixs) + return (BOX *)ERROR_PTR("pixs not defined", procName, NULL); + if (areaslop < 0.0 || areaslop > 1.0) + return (BOX *)ERROR_PTR("invalid value for areaslop", procName, NULL); + yslop = L_MAX(0, yslop); + + boxa1 = pixConnCompBB(pixs, connectivity); + if (boxaGetCount(boxa1) == 0) { + boxaDestroy(&boxa1); + return NULL; + } + box = boxaSelectLargeULBox(boxa1, areaslop, yslop); + boxaDestroy(&boxa1); + return box; +} + + +/*! + * \brief boxaSelectLargeULBox() + * + * \param[in] boxas 1 bpp + * \param[in] areaslop fraction near but less than 1.0 + * \param[in] yslop number of pixels in y direction + * \return box, or NULL on error + * + *
+ * Notes:
+ *      (1) See usage notes in pixSelectLargeULComp().
+ * 
+ */ +BOX * +boxaSelectLargeULBox(BOXA *boxas, + l_float32 areaslop, + l_int32 yslop) +{ +l_int32 w, h, i, n, x1, y1, x2, y2, select; +l_float32 area, max_area; +BOX *box; +BOXA *boxa1, *boxa2, *boxa3; + + PROCNAME("boxaSelectLargeULBox"); + + if (!boxas) + return (BOX *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxaGetCount(boxas) == 0) + return (BOX *)ERROR_PTR("no boxes in boxas", procName, NULL); + if (areaslop < 0.0 || areaslop > 1.0) + return (BOX *)ERROR_PTR("invalid value for areaslop", procName, NULL); + yslop = L_MAX(0, yslop); + + boxa1 = boxaSort(boxas, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); + boxa2 = boxaSort(boxa1, L_SORT_BY_Y, L_SORT_INCREASING, NULL); + n = boxaGetCount(boxa2); + boxaGetBoxGeometry(boxa1, 0, NULL, NULL, &w, &h); /* biggest box by area */ + max_area = (l_float32)(w * h); + + /* boxa3 collects all boxes eligible by area, sorted top-down */ + boxa3 = boxaCreate(4); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa2, i, NULL, NULL, &w, &h); + area = (l_float32)(w * h); + if (area / max_area >= areaslop) { + box = boxaGetBox(boxa2, i, L_COPY); + boxaAddBox(boxa3, box, L_INSERT); + } + } + + /* Take the first (top-most box) unless the second (etc) has + * nearly the same y value but a smaller x value. */ + n = boxaGetCount(boxa3); + boxaGetBoxGeometry(boxa3, 0, &x1, &y1, NULL, NULL); + select = 0; + for (i = 1; i < n; i++) { + boxaGetBoxGeometry(boxa3, i, &x2, &y2, NULL, NULL); + if (y2 - y1 < yslop && x2 < x1) { + select = i; + x1 = x2; /* but always compare against y1 */ + } + } + + box = boxaGetBox(boxa3, select, L_COPY); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + return box; +} diff --git a/3rdparty/hgOCR/leptonica/boxfunc4.c b/3rdparty/hgOCR/leptonica/boxfunc4.c new file mode 100644 index 00000000..22a80482 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxfunc4.c @@ -0,0 +1,1423 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxfunc4.c + *
+ *
+ *      Boxa and Boxaa range selection
+ *           BOXA     *boxaSelectRange()
+ *           BOXAA    *boxaaSelectRange()
+ *
+ *      Boxa size selection
+ *           BOXA     *boxaSelectBySize()
+ *           NUMA     *boxaMakeSizeIndicator()
+ *           BOXA     *boxaSelectByArea()
+ *           NUMA     *boxaMakeAreaIndicator()
+ *           BOXA     *boxaSelectByWHRatio()
+ *           NUMA     *boxaMakeWHRatioIndicator()
+ *           BOXA     *boxaSelectWithIndicator()
+ *
+ *      Boxa permutation
+ *           BOXA     *boxaPermutePseudorandom()
+ *           BOXA     *boxaPermuteRandom()
+ *           l_int32   boxaSwapBoxes()
+ *
+ *      Boxa and box conversions
+ *           PTA      *boxaConvertToPta()
+ *           BOXA     *ptaConvertToBoxa()
+ *           PTA      *boxConvertToPta()
+ *           BOX      *ptaConvertToBox()
+ *
+ *      Miscellaneous boxa functions
+ *           l_int32   boxaGetExtent()
+ *           l_int32   boxaGetCoverage()
+ *           l_int32   boxaaSizeRange()
+ *           l_int32   boxaSizeRange()
+ *           l_int32   boxaLocationRange()
+ *           NUMA     *boxaGetSizes()
+ *           l_int32   boxaGetArea()
+ *           PIX      *boxaDisplayTiled()
+ * 
+ */ + +#include +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Boxa and boxaa range selection * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaSelectRange() + * + * \param[in] boxas + * \param[in] first use 0 to select from the beginning + * \param[in] last use -1 to select to the end + * \param[in] copyflag L_COPY, L_CLONE + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) The copyflag specifies what we do with each box from boxas.
+ *          Specifically, L_CLONE inserts a clone into boxad of each
+ *          selected box from boxas.
+ * 
+ */ +BOXA * +boxaSelectRange(BOXA *boxas, + l_int32 first, + l_int32 last, + l_int32 copyflag) +{ +l_int32 n, nbox, i; +BOX *box; +BOXA *boxad; + + PROCNAME("boxaSelectRange"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); + if ((n = boxaGetCount(boxas)) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, copyflag); + } + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return (BOXA *)ERROR_PTR("invalid first", procName, NULL); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return (BOXA *)ERROR_PTR("first > last", procName, NULL); + + nbox = last - first + 1; + boxad = boxaCreate(nbox); + for (i = first; i <= last; i++) { + box = boxaGetBox(boxas, i, copyflag); + boxaAddBox(boxad, box, L_INSERT); + } + return boxad; +} + + +/*! + * \brief boxaaSelectRange() + * + * \param[in] baas + * \param[in] first use 0 to select from the beginning + * \param[in] last use -1 to select to the end + * \param[in] copyflag L_COPY, L_CLONE + * \return baad, or NULL on error + * + *
+ * Notes:
+ *      (1) The copyflag specifies what we do with each boxa from baas.
+ *          Specifically, L_CLONE inserts a clone into baad of each
+ *          selected boxa from baas.
+ * 
+ */ +BOXAA * +boxaaSelectRange(BOXAA *baas, + l_int32 first, + l_int32 last, + l_int32 copyflag) +{ +l_int32 n, nboxa, i; +BOXA *boxa; +BOXAA *baad; + + PROCNAME("boxaaSelectRange"); + + if (!baas) + return (BOXAA *)ERROR_PTR("baas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); + if ((n = boxaaGetCount(baas)) == 0) + return (BOXAA *)ERROR_PTR("empty baas", procName, NULL); + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return (BOXAA *)ERROR_PTR("invalid first", procName, NULL); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return (BOXAA *)ERROR_PTR("first > last", procName, NULL); + + nboxa = last - first + 1; + baad = boxaaCreate(nboxa); + for (i = first; i <= last; i++) { + boxa = boxaaGetBoxa(baas, i, copyflag); + boxaaAddBoxa(baad, boxa, L_INSERT); + } + return baad; +} + + +/*---------------------------------------------------------------------* + * Boxa size selection * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaSelectBySize() + * + * \param[in] boxas + * \param[in] width, height threshold dimensions + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return boxad filtered set, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) Uses box copies in the new boxa.
+ *      (3) If the selection type is L_SELECT_WIDTH, the input
+ *          height is ignored, and v.v.
+ *      (4) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +BOXA * +boxaSelectBySize(BOXA *boxas, + l_int32 width, + l_int32 height, + l_int32 type, + l_int32 relation, + l_int32 *pchanged) +{ +BOXA *boxad; +NUMA *na; + + PROCNAME("boxaSelectBySize"); + + if (pchanged) *pchanged = FALSE; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxaGetCount(boxas) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (BOXA *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (BOXA *)ERROR_PTR("invalid relation", procName, NULL); + + /* Compute the indicator array for saving components */ + if ((na = + boxaMakeSizeIndicator(boxas, width, height, type, relation)) == NULL) + return (BOXA *)ERROR_PTR("na not made", procName, NULL); + + /* Filter to get output */ + boxad = boxaSelectWithIndicator(boxas, na, pchanged); + + numaDestroy(&na); + return boxad; +} + + +/*! + * \brief boxaMakeSizeIndicator() + * + * \param[in] boxa + * \param[in] width, height threshold dimensions + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return na indicator array, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) If the selection type is L_SELECT_WIDTH, the input
+ *          height is ignored, and v.v.
+ *      (3) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +NUMA * +boxaMakeSizeIndicator(BOXA *boxa, + l_int32 width, + l_int32 height, + l_int32 type, + l_int32 relation) +{ +l_int32 i, n, w, h, ival; +NUMA *na; + + PROCNAME("boxaMakeSizeIndicator"); + + if (!boxa) + return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); + if ((n = boxaGetCount(boxa)) == 0) + return (NUMA *)ERROR_PTR("boxa is empty", procName, NULL); + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); + + na = numaCreate(n); + for (i = 0; i < n; i++) { + ival = 0; + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + switch (type) + { + case L_SELECT_WIDTH: + if ((relation == L_SELECT_IF_LT && w < width) || + (relation == L_SELECT_IF_GT && w > width) || + (relation == L_SELECT_IF_LTE && w <= width) || + (relation == L_SELECT_IF_GTE && w >= width)) + ival = 1; + break; + case L_SELECT_HEIGHT: + if ((relation == L_SELECT_IF_LT && h < height) || + (relation == L_SELECT_IF_GT && h > height) || + (relation == L_SELECT_IF_LTE && h <= height) || + (relation == L_SELECT_IF_GTE && h >= height)) + ival = 1; + break; + case L_SELECT_IF_EITHER: + if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || + ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || + ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || + ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) + ival = 1; + break; + case L_SELECT_IF_BOTH: + if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || + ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || + ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || + ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) + ival = 1; + break; + default: + L_WARNING("can't get here!\n", procName); + break; + } + numaAddNumber(na, ival); + } + + return na; +} + + +/*! + * \brief boxaSelectByArea() + * + * \param[in] boxas + * \param[in] area threshold value of width * height + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return boxad filtered set, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses box copies in the new boxa.
+ *      (2) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +BOXA * +boxaSelectByArea(BOXA *boxas, + l_int32 area, + l_int32 relation, + l_int32 *pchanged) +{ +BOXA *boxad; +NUMA *na; + + PROCNAME("boxaSelectByArea"); + + if (pchanged) *pchanged = FALSE; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxaGetCount(boxas) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (BOXA *)ERROR_PTR("invalid relation", procName, NULL); + + /* Compute the indicator array for saving components */ + na = boxaMakeAreaIndicator(boxas, area, relation); + + /* Filter to get output */ + boxad = boxaSelectWithIndicator(boxas, na, pchanged); + + numaDestroy(&na); + return boxad; +} + + +/*! + * \brief boxaMakeAreaIndicator() + * + * \param[in] boxa + * \param[in] area threshold value of width * height + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return na indicator array, or NULL on error + * + *
+ * Notes:
+ *      (1) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +NUMA * +boxaMakeAreaIndicator(BOXA *boxa, + l_int32 area, + l_int32 relation) +{ +l_int32 i, n, w, h, ival; +NUMA *na; + + PROCNAME("boxaMakeAreaIndicator"); + + if (!boxa) + return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); + if ((n = boxaGetCount(boxa)) == 0) + return (NUMA *)ERROR_PTR("boxa is empty", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); + + na = numaCreate(n); + for (i = 0; i < n; i++) { + ival = 0; + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + + if ((relation == L_SELECT_IF_LT && w * h < area) || + (relation == L_SELECT_IF_GT && w * h > area) || + (relation == L_SELECT_IF_LTE && w * h <= area) || + (relation == L_SELECT_IF_GTE && w * h >= area)) + ival = 1; + numaAddNumber(na, ival); + } + + return na; +} + + +/*! + * \brief boxaSelectByWHRatio() + * + * \param[in] boxas + * \param[in] ratio width/height threshold value + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return boxad filtered set, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses box copies in the new boxa.
+ *      (2) To keep narrow components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep wide components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +BOXA * +boxaSelectByWHRatio(BOXA *boxas, + l_float32 ratio, + l_int32 relation, + l_int32 *pchanged) +{ +BOXA *boxad; +NUMA *na; + + PROCNAME("boxaSelectByWHRatio"); + + if (pchanged) *pchanged = FALSE; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (boxaGetCount(boxas) == 0) { + L_WARNING("boxas is empty\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (BOXA *)ERROR_PTR("invalid relation", procName, NULL); + + /* Compute the indicator array for saving components */ + na = boxaMakeWHRatioIndicator(boxas, ratio, relation); + + /* Filter to get output */ + boxad = boxaSelectWithIndicator(boxas, na, pchanged); + + numaDestroy(&na); + return boxad; +} + + +/*! + * \brief boxaMakeWHRatioIndicator() + * + * \param[in] boxa + * \param[in] ratio width/height threshold value + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return na indicator array, or NULL on error + * + *
+ * Notes:
+ *      (1) To keep narrow components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep wide components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +NUMA * +boxaMakeWHRatioIndicator(BOXA *boxa, + l_float32 ratio, + l_int32 relation) +{ +l_int32 i, n, w, h, ival; +l_float32 whratio; +NUMA *na; + + PROCNAME("boxaMakeWHRatioIndicator"); + + if (!boxa) + return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); + if ((n = boxaGetCount(boxa)) == 0) + return (NUMA *)ERROR_PTR("boxa is empty", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); + + na = numaCreate(n); + for (i = 0; i < n; i++) { + ival = 0; + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + whratio = (l_float32)w / (l_float32)h; + + if ((relation == L_SELECT_IF_LT && whratio < ratio) || + (relation == L_SELECT_IF_GT && whratio > ratio) || + (relation == L_SELECT_IF_LTE && whratio <= ratio) || + (relation == L_SELECT_IF_GTE && whratio >= ratio)) + ival = 1; + numaAddNumber(na, ival); + } + + return na; +} + + +/*! + * \brief boxaSelectWithIndicator() + * + * \param[in] boxas + * \param[in] na indicator numa + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return boxad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a copy of the boxa if no components are removed.
+ *      (2) Uses box copies in the new boxa.
+ *      (3) The indicator numa has values 0 (ignore) and 1 (accept).
+ *      (4) If all indicator values are 0, the returned boxa is empty.
+ * 
+ */ +BOXA * +boxaSelectWithIndicator(BOXA *boxas, + NUMA *na, + l_int32 *pchanged) +{ +l_int32 i, n, ival, nsave; +BOX *box; +BOXA *boxad; + + PROCNAME("boxaSelectWithIndicator"); + + if (pchanged) *pchanged = FALSE; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!na) + return (BOXA *)ERROR_PTR("na not defined", procName, NULL); + + nsave = 0; + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 1) nsave++; + } + + if (nsave == n) { + if (pchanged) *pchanged = FALSE; + return boxaCopy(boxas, L_COPY); + } + if (pchanged) *pchanged = TRUE; + boxad = boxaCreate(nsave); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 0) continue; + box = boxaGetBox(boxas, i, L_COPY); + boxaAddBox(boxad, box, L_INSERT); + } + + return boxad; +} + + +/*---------------------------------------------------------------------* + * Boxa Permutation * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaPermutePseudorandom() + * + * \param[in] boxas input boxa + * \return boxad with boxes permuted, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a pseudorandom in-place permutation of the boxes.
+ *      (2) The result is guaranteed not to have any boxes in their
+ *          original position, but it is not very random.  If you
+ *          need randomness, use boxaPermuteRandom().
+ * 
+ */ +BOXA * +boxaPermutePseudorandom(BOXA *boxas) +{ +l_int32 n; +NUMA *na; +BOXA *boxad; + + PROCNAME("boxaPermutePseudorandom"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + + n = boxaGetCount(boxas); + na = numaPseudorandomSequence(n, 0); + boxad = boxaSortByIndex(boxas, na); + numaDestroy(&na); + return boxad; +} + + +/*! + * \brief boxaPermuteRandom() + * + * \param[in] boxad [optional] can be null or equal to boxas + * \param[in] boxas input boxa + * \return boxad with boxes permuted, or NULL on error + * + *
+ * Notes:
+ *      (1) If boxad is null, make a copy of boxas and permute the copy.
+ *          Otherwise, boxad must be equal to boxas, and the operation
+ *          is done in-place.
+ *      (2) If boxas is empty, return an empty boxad.
+ *      (3) This does a random in-place permutation of the boxes,
+ *          by swapping each box in turn with a random box.  The
+ *          result is almost guaranteed not to have any boxes in their
+ *          original position.
+ *      (4) MSVC rand() has MAX_RAND = 2^15 - 1, so it will not do
+ *          a proper permutation is the number of boxes exceeds this.
+ * 
+ */ +BOXA * +boxaPermuteRandom(BOXA *boxad, + BOXA *boxas) +{ +l_int32 i, n, index; + + PROCNAME("boxaPermuteRandom"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + if (boxad && (boxad != boxas)) + return (BOXA *)ERROR_PTR("boxad defined but in-place", procName, NULL); + + if (!boxad) + boxad = boxaCopy(boxas, L_COPY); + if ((n = boxaGetCount(boxad)) == 0) + return boxad; + index = (l_uint32)rand() % n; + index = L_MAX(1, index); + boxaSwapBoxes(boxad, 0, index); + for (i = 1; i < n; i++) { + index = (l_uint32)rand() % n; + if (index == i) index--; + boxaSwapBoxes(boxad, i, index); + } + + return boxad; +} + + +/*! + * \brief boxaSwapBoxes() + * + * \param[in] boxa + * \param[in] i, j two indices of boxes, that are to be swapped + * \return 0 if OK, 1 on error + */ +l_ok +boxaSwapBoxes(BOXA *boxa, + l_int32 i, + l_int32 j) +{ +l_int32 n; +BOX *box; + + PROCNAME("boxaSwapBoxes"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + n = boxaGetCount(boxa); + if (i < 0 || i >= n) + return ERROR_INT("i invalid", procName, 1); + if (j < 0 || j >= n) + return ERROR_INT("j invalid", procName, 1); + if (i == j) + return ERROR_INT("i == j", procName, 1); + + box = boxa->box[i]; + boxa->box[i] = boxa->box[j]; + boxa->box[j] = box; + return 0; +} + + +/*---------------------------------------------------------------------* + * Boxa and Box Conversions * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaConvertToPta() + * + * \param[in] boxa + * \param[in] ncorners 2 or 4 for the representation of each box + * \return pta with %ncorners points for each box in the boxa, + * or NULL on error + * + *
+ * Notes:
+ *      (1) If ncorners == 2, we select the UL and LR corners.
+ *          Otherwise we save all 4 corners in this order: UL, UR, LL, LR.
+ *      (2) Other boxa --> pta functions are:
+ *          * boxaExtractAsPta(): allows extraction of any dimension
+ *            and/or side location, with each in a separate pta.
+ *          * boxaExtractCorners(): extracts any of the four corners as a pta.
+ * 
+ */ +PTA * +boxaConvertToPta(BOXA *boxa, + l_int32 ncorners) +{ +l_int32 i, n; +BOX *box; +PTA *pta, *pta1; + + PROCNAME("boxaConvertToPta"); + + if (!boxa) + return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); + if (ncorners != 2 && ncorners != 4) + return (PTA *)ERROR_PTR("ncorners not 2 or 4", procName, NULL); + + n = boxaGetCount(boxa); + if ((pta = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_COPY); + pta1 = boxConvertToPta(box, ncorners); + ptaJoin(pta, pta1, 0, -1); + boxDestroy(&box); + ptaDestroy(&pta1); + } + + return pta; +} + + +/*! + * \brief ptaConvertToBoxa() + * + * \param[in] pta + * \param[in] ncorners 2 or 4 for the representation of each box + * \return boxa with one box for each 2 or 4 points in the pta, + * or NULL on error + * + *
+ * Notes:
+ *      (1) For 2 corners, the order of the 2 points is UL, LR.
+ *          For 4 corners, the order of points is UL, UR, LL, LR.
+ *      (2) Each derived box is the minimum size containing all corners.
+ * 
+ */ +BOXA * +ptaConvertToBoxa(PTA *pta, + l_int32 ncorners) +{ +l_int32 i, n, nbox, x1, y1, x2, y2, x3, y3, x4, y4, x, y, xmax, ymax; +BOX *box; +BOXA *boxa; + + PROCNAME("ptaConvertToBoxa"); + + if (!pta) + return (BOXA *)ERROR_PTR("pta not defined", procName, NULL); + if (ncorners != 2 && ncorners != 4) + return (BOXA *)ERROR_PTR("ncorners not 2 or 4", procName, NULL); + n = ptaGetCount(pta); + if (n % ncorners != 0) + return (BOXA *)ERROR_PTR("size % ncorners != 0", procName, NULL); + nbox = n / ncorners; + if ((boxa = boxaCreate(nbox)) == NULL) + return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); + for (i = 0; i < n; i += ncorners) { + ptaGetIPt(pta, i, &x1, &y1); + ptaGetIPt(pta, i + 1, &x2, &y2); + if (ncorners == 2) { + box = boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + boxaAddBox(boxa, box, L_INSERT); + continue; + } + ptaGetIPt(pta, i + 2, &x3, &y3); + ptaGetIPt(pta, i + 3, &x4, &y4); + x = L_MIN(x1, x3); + y = L_MIN(y1, y2); + xmax = L_MAX(x2, x4); + ymax = L_MAX(y3, y4); + box = boxCreate(x, y, xmax - x + 1, ymax - y + 1); + boxaAddBox(boxa, box, L_INSERT); + } + + return boxa; +} + + +/*! + * \brief boxConvertToPta() + * + * \param[in] box + * \param[in] ncorners 2 or 4 for the representation of the box + * \return pta with %ncorners points, or NULL on error + * + *
+ * Notes:
+ *      (1) If ncorners == 2, we select the UL and LR corners.
+ *          Otherwise we save all 4 corners in this order: UL, UR, LL, LR.
+ * 
+ */ +PTA * +boxConvertToPta(BOX *box, + l_int32 ncorners) +{ +l_int32 x, y, w, h; +PTA *pta; + + PROCNAME("boxConvertToPta"); + + if (!box) + return (PTA *)ERROR_PTR("box not defined", procName, NULL); + if (ncorners != 2 && ncorners != 4) + return (PTA *)ERROR_PTR("ncorners not 2 or 4", procName, NULL); + + if ((pta = ptaCreate(ncorners)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + boxGetGeometry(box, &x, &y, &w, &h); + ptaAddPt(pta, x, y); + if (ncorners == 2) { + ptaAddPt(pta, x + w - 1, y + h - 1); + } else { + ptaAddPt(pta, x + w - 1, y); + ptaAddPt(pta, x, y + h - 1); + ptaAddPt(pta, x + w - 1, y + h - 1); + } + + return pta; +} + + +/*! + * \brief ptaConvertToBox() + * + * \param[in] pta + * \return box minimum containing all points in the pta, or NULL on error + * + *
+ * Notes:
+ *      (1) For 2 corners, the order of the 2 points is UL, LR.
+ *          For 4 corners, the order of points is UL, UR, LL, LR.
+ * 
+ */ +BOX * +ptaConvertToBox(PTA *pta) +{ +l_int32 n, x1, y1, x2, y2, x3, y3, x4, y4, x, y, xmax, ymax; + + PROCNAME("ptaConvertToBox"); + + if (!pta) + return (BOX *)ERROR_PTR("pta not defined", procName, NULL); + n = ptaGetCount(pta); + ptaGetIPt(pta, 0, &x1, &y1); + ptaGetIPt(pta, 1, &x2, &y2); + if (n == 2) + return boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + + /* 4 corners */ + ptaGetIPt(pta, 2, &x3, &y3); + ptaGetIPt(pta, 3, &x4, &y4); + x = L_MIN(x1, x3); + y = L_MIN(y1, y2); + xmax = L_MAX(x2, x4); + ymax = L_MAX(y3, y4); + return boxCreate(x, y, xmax - x + 1, ymax - y + 1); +} + + +/*---------------------------------------------------------------------* + * Miscellaneous Boxa functions * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaGetExtent() + * + * \param[in] boxa + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbox [optional] minimum box containing all boxes in boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes the minimum rectangular bounding region
+ *          that contains all valid boxes in a boxa.
+ *      (2) The returned w and h are the minimum size image
+ *          that would contain all boxes untranslated.
+ *      (3) If there are no valid boxes, returned w and h are 0 and
+ *          all parameters in the returned box are 0.  This
+ *          is not an error, because an empty boxa is valid and
+ *          boxaGetExtent() is required for serialization.
+ * 
+ */ +l_ok +boxaGetExtent(BOXA *boxa, + l_int32 *pw, + l_int32 *ph, + BOX **pbox) +{ +l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; + + PROCNAME("boxaGetExtent"); + + if (!pw && !ph && !pbox) + return ERROR_INT("no ptrs defined", procName, 1); + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbox) *pbox = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + xmax = ymax = 0; + xmin = ymin = 100000000; + found = FALSE; + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + if (w <= 0 || h <= 0) + continue; + found = TRUE; + xmin = L_MIN(xmin, x); + ymin = L_MIN(ymin, y); + xmax = L_MAX(xmax, x + w); + ymax = L_MAX(ymax, y + h); + } + if (found == FALSE) /* no valid boxes in boxa */ + xmin = ymin = 0; + if (pw) *pw = xmax; + if (ph) *ph = ymax; + if (pbox) + *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); + + return 0; +} + + +/*! + * \brief boxaGetCoverage() + * + * \param[in] boxa + * \param[in] wc, hc dimensions of overall clipping rectangle with UL + * corner at (0, 0 that is covered by the boxes. + * \param[in] exactflag 1 for guaranteeing an exact result; 0 for getting + * an exact result only if the boxes do not overlap + * \param[out] pfract sum of box area as fraction of w * h + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The boxes in boxa are clipped to the input rectangle.
+ *      (2) * When %exactflag == 1, we generate a 1 bpp pix of size
+ *            wc x hc, paint all the boxes black, and count the fg pixels.
+ *            This can take 1 msec on a large page with many boxes.
+ *          * When %exactflag == 0, we clip each box to the wc x hc region
+ *            and sum the resulting areas.  This is faster.
+ *          * The results are the same when none of the boxes overlap
+ *            within the wc x hc region.
+ * 
+ */ +l_ok +boxaGetCoverage(BOXA *boxa, + l_int32 wc, + l_int32 hc, + l_int32 exactflag, + l_float32 *pfract) +{ +l_int32 i, n, x, y, w, h, sum; +BOX *box, *boxc; +PIX *pixt; + + PROCNAME("boxaGetCoverage"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + if (n == 0) + return ERROR_INT("no boxes in boxa", procName, 1); + + if (exactflag == 0) { /* quick and dirty */ + sum = 0; + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + if ((boxc = boxClipToRectangle(box, wc, hc)) != NULL) { + boxGetGeometry(boxc, NULL, NULL, &w, &h); + sum += w * h; + boxDestroy(&boxc); + } + boxDestroy(&box); + } + } else { /* slower and exact */ + pixt = pixCreate(wc, hc, 1); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pixt, x, y, w, h, PIX_SET, NULL, 0, 0); + boxDestroy(&box); + } + pixCountPixels(pixt, &sum, NULL); + pixDestroy(&pixt); + } + + *pfract = (l_float32)sum / (l_float32)(wc * hc); + return 0; +} + + +/*! + * \brief boxaaSizeRange() + * + * \param[in] baa + * \param[out] pminw [optional] min width of all boxes + * \param[out] pmaxw [optional] max width of all boxes + * \param[out] pminh [optional] min height of all boxes + * \param[out] pmaxh [optional] max height of all boxes + * \return 0 if OK, 1 on error + */ +l_ok +boxaaSizeRange(BOXAA *baa, + l_int32 *pminw, + l_int32 *pminh, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ +l_int32 minw, minh, maxw, maxh, minbw, minbh, maxbw, maxbh, i, n; +BOXA *boxa; + + PROCNAME("boxaaSizeRange"); + + if (!pminw && !pmaxw && !pminh && !pmaxh) + return ERROR_INT("no data can be returned", procName, 1); + if (pminw) *pminw = 0; + if (pminh) *pminh = 0; + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!baa) + return ERROR_INT("baa not defined", procName, 1); + + minw = minh = 100000000; + maxw = maxh = 0; + n = boxaaGetCount(baa); + for (i = 0; i < n; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + boxaSizeRange(boxa, &minbw, &minbh, &maxbw, &maxbh); + if (minbw < minw) + minw = minbw; + if (minbh < minh) + minh = minbh; + if (maxbw > maxw) + maxw = maxbw; + if (maxbh > maxh) + maxh = maxbh; + boxaDestroy(&boxa); + } + + if (pminw) *pminw = minw; + if (pminh) *pminh = minh; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + return 0; +} + + +/*! + * \brief boxaSizeRange() + * + * \param[in] boxa + * \param[out] pminw [optional] min width of all boxes + * \param[out] pmaxw [optional] max width of all boxes + * \param[out] pminh [optional] min height of all boxes + * \param[out] pmaxh [optional] max height of all boxes + * \return 0 if OK, 1 on error + */ +l_ok +boxaSizeRange(BOXA *boxa, + l_int32 *pminw, + l_int32 *pminh, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ +l_int32 minw, minh, maxw, maxh, i, n, w, h; + + PROCNAME("boxaSizeRange"); + + if (!pminw && !pmaxw && !pminh && !pmaxh) + return ERROR_INT("no data can be returned", procName, 1); + if (pminw) *pminw = 0; + if (pminh) *pminh = 0; + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + minw = minh = 100000000; + maxw = maxh = 0; + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + if (w < minw) + minw = w; + if (h < minh) + minh = h; + if (w > maxw) + maxw = w; + if (h > maxh) + maxh = h; + } + + if (pminw) *pminw = minw; + if (pminh) *pminh = minh; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + return 0; +} + + +/*! + * \brief boxaLocationRange() + * + * \param[in] boxa + * \param[out] pminx [optional] min (UL corner) x value of all boxes + * \param[out] pminy [optional] min (UL corner) y value of all boxes + * \param[out] pmaxx [optional] max (UL corner) x value of all boxes + * \param[out] pmaxy [optional] max (UL corner) y value of all boxes + * \return 0 if OK, 1 on error + */ +l_ok +boxaLocationRange(BOXA *boxa, + l_int32 *pminx, + l_int32 *pminy, + l_int32 *pmaxx, + l_int32 *pmaxy) +{ +l_int32 minx, miny, maxx, maxy, i, n, x, y; + + PROCNAME("boxaLocationRange"); + + if (!pminx && !pminy && !pmaxx && !pmaxy) + return ERROR_INT("no data can be returned", procName, 1); + if (pminx) *pminx = 0; + if (pminy) *pminy = 0; + if (pmaxx) *pmaxx = 0; + if (pmaxy) *pmaxy = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + minx = miny = 100000000; + maxx = maxy = 0; + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); + if (x < minx) + minx = x; + if (y < miny) + miny = y; + if (x > maxx) + maxx = x; + if (y > maxy) + maxy = y; + } + + if (pminx) *pminx = minx; + if (pminy) *pminy = miny; + if (pmaxx) *pmaxx = maxx; + if (pmaxy) *pmaxy = maxy; + + return 0; +} + + +/*! + * \brief boxaGetSizes() + * + * \param[in] boxa + * \param[out] pnaw [optional] widths of valid boxes + * \param[out] pnah [optional] heights of valid boxes + * \return 0 if OK, 1 on error + */ +l_ok +boxaGetSizes(BOXA *boxa, + NUMA **pnaw, + NUMA **pnah) +{ +l_int32 i, n, w, h; +BOX *box; + + PROCNAME("boxaGetSizes"); + + if (pnaw) *pnaw = NULL; + if (pnah) *pnah = NULL; + if (!pnaw && !pnah) + return ERROR_INT("no output requested", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetValidCount(boxa); + if (pnaw) *pnaw = numaCreate(n); + if (pnah) *pnah = numaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetValidBox(boxa, i, L_COPY); + if (box) { + boxGetGeometry(box, NULL, NULL, &w, &h); + if (pnaw) numaAddNumber(*pnaw, w); + if (pnah) numaAddNumber(*pnah, h); + boxDestroy(&box); + } + } + + return 0; +} + + +/*! + * \brief boxaGetArea() + * + * \param[in] boxa + * \param[out] parea total area of all boxes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Measures the total area of the boxes, without regard to overlaps.
+ * 
+ */ +l_ok +boxaGetArea(BOXA *boxa, + l_int32 *parea) +{ +l_int32 i, n, w, h; + + PROCNAME("boxaGetArea"); + + if (!parea) + return ERROR_INT("&area not defined", procName, 1); + *parea = 0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); + *parea += w * h; + } + return 0; +} + + +/*! + * \brief boxaDisplayTiled() + * + * \param[in] boxas + * \param[in] pixa [optional] background for each box + * \param[in] first index of first box + * \param[in] last index of last box; use -1 to go to end + * \param[in] maxwidth of output image + * \param[in] linewidth width of box outlines, before scaling + * \param[in] scalefactor applied to every box; use 1.0 for no scaling + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \return pixd of tiled images of boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) Displays each box separately in a tiled 32 bpp image.
+ *      (2) If pixa is defined, it must have the same count as the boxa,
+ *          and it will be a background over with each box is rendered.
+ *          If pixa is not defined, the boxes will be rendered over
+ *          blank images of identical size.
+ *      (3) See pixaDisplayTiledInRows() for other parameters.
+ * 
+ */ +PIX * +boxaDisplayTiled(BOXA *boxas, + PIXA *pixa, + l_int32 first, + l_int32 last, + l_int32 maxwidth, + l_int32 linewidth, + l_float32 scalefactor, + l_int32 background, + l_int32 spacing, + l_int32 border) +{ +char buf[32]; +l_int32 i, n, npix, w, h, fontsize; +L_BMF *bmf; +BOX *box; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixat; + + PROCNAME("boxaDisplayTiled"); + + if (!boxas) + return (PIX *)ERROR_PTR("boxas not defined", procName, NULL); + + boxa = boxaSaveValid(boxas, L_COPY); + n = boxaGetCount(boxa); + if (pixa) { + npix = pixaGetCount(pixa); + if (n != npix) { + boxaDestroy(&boxa); + return (PIX *)ERROR_PTR("boxa and pixa counts differ", + procName, NULL); + } + } + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) { + boxaDestroy(&boxa); + return (PIX *)ERROR_PTR("invalid first", procName, NULL); + } + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) { + boxaDestroy(&boxa); + return (PIX *)ERROR_PTR("first > last", procName, NULL); + } + + /* Because the bitmap font will be reduced when tiled, choose the + * font size inversely with the scale factor. */ + if (scalefactor > 0.8) + fontsize = 6; + else if (scalefactor > 0.6) + fontsize = 10; + else if (scalefactor > 0.4) + fontsize = 14; + else if (scalefactor > 0.3) + fontsize = 18; + else fontsize = 20; + bmf = bmfCreate(NULL, fontsize); + + pixat = pixaCreate(n); + boxaGetExtent(boxa, &w, &h, NULL); + for (i = first; i <= last; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + if (!pixa) { + pix1 = pixCreate(w, h, 32); + pixSetAll(pix1); + } else { + pix1 = pixaGetPix(pixa, i, L_COPY); + } + pixSetBorderVal(pix1, 0, 0, 0, 2, 0x0000ff00); + snprintf(buf, sizeof(buf), "%d", i); + pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0x00ff0000, + L_ADD_BELOW, NULL); + pixDestroy(&pix1); + pixRenderBoxArb(pix2, box, linewidth, 255, 0, 0); + pixaAddPix(pixat, pix2, L_INSERT); + boxDestroy(&box); + } + bmfDestroy(&bmf); + boxaDestroy(&boxa); + + pixd = pixaDisplayTiledInRows(pixat, 32, maxwidth, scalefactor, background, + spacing, border); + pixaDestroy(&pixat); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/boxfunc5.c b/3rdparty/hgOCR/leptonica/boxfunc5.c new file mode 100644 index 00000000..0e79e064 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/boxfunc5.c @@ -0,0 +1,2192 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file boxfunc5.c + *
+ *
+ *      Boxa sequence fitting
+ *           BOXA     *boxaSmoothSequenceLS()
+ *           BOXA     *boxaSmoothSequenceMedian()
+ *           BOXA     *boxaLinearFit()
+ *           BOXA     *boxaWindowedMedian()
+ *           BOXA     *boxaModifyWithBoxa()
+ *           BOXA     *boxaConstrainSize()
+ *           BOXA     *boxaReconcileEvenOddHeight()
+ *    static l_int32   boxaTestEvenOddHeight()
+ *           BOXA     *boxaReconcilePairWidth()
+ *           l_int32   boxaSizeConsistency1()
+ *           l_int32   boxaSizeConsistency2()
+ *           BOXA     *boxaReconcileSizeByMedian()
+ *           l_int32   boxaPlotSides()   [for debugging]
+ *           l_int32   boxaPlotSizes()   [for debugging]
+ *           BOXA     *boxaFillSequence()
+ *    static l_int32   boxaFillAll()
+ *           l_int32   boxaSizeVariation()
+ *           l_int32   boxaMedianDimensions()
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_int32 boxaTestEvenOddHeight(BOXA *boxa1, BOXA *boxa2, l_int32 start, + l_float32 *pdel1, l_float32 *pdel2); +static l_int32 boxaFillAll(BOXA *boxa); + + +/*---------------------------------------------------------------------* + * Boxa sequence fitting * + *---------------------------------------------------------------------*/ +/*! + * \brief boxaSmoothSequenceLS() + * + * \param[in] boxas source boxa + * \param[in] factor reject outliers with widths and heights deviating + * from the median by more than %factor times + * the median variation from the median; typically ~3 + * \param[in] subflag L_USE_MINSIZE, L_USE_MAXSIZE, + * L_SUB_ON_LOC_DIFF, L_SUB_ON_SIZE_DIFF, + * L_USE_CAPPED_MIN, L_USE_CAPPED_MAX + * \param[in] maxdiff parameter used with L_SUB_ON_LOC_DIFF, + * L_SUB_ON_SIZE_DIFF, L_USE_CAPPED_MIN, + * L_USE_CAPPED_MAX + * \param[in] extrapixels pixels added on all sides (or subtracted + * if %extrapixels < 0) when using + * L_SUB_ON_LOC_DIFF and L_SUB_ON_SIZE_DIFF + * \param[in] debug 1 for debug output + * \return boxad fitted boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a modified version of %boxas by constructing
+ *          for each input box a box that has been linear least square fit
+ *          (LSF) to the entire set.  The linear fitting is done to each of
+ *          the box sides independently, after outliers are rejected,
+ *          and it is computed separately for sequences of even and
+ *          odd boxes.  Once the linear LSF box is found, the output box
+ *          (in %boxad) is constructed from the input box and the LSF
+ *          box, depending on %subflag.  See boxaModifyWithBoxa() for
+ *          details on the use of %subflag and %maxdiff.
+ *      (2) This is useful if, in both the even and odd sets, the box
+ *          edges vary roughly linearly with its index in the set.
+ * 
+ */ +BOXA * +boxaSmoothSequenceLS(BOXA *boxas, + l_float32 factor, + l_int32 subflag, + l_int32 maxdiff, + l_int32 extrapixels, + l_int32 debug) +{ +l_int32 n; +BOXA *boxae, *boxao, *boxalfe, *boxalfo, *boxame, *boxamo, *boxad; + + PROCNAME("boxaSmoothSequenceLS"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (factor <= 0.0) { + L_WARNING("factor must be > 0.0; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (maxdiff < 0) { + L_WARNING("maxdiff must be >= 0; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (subflag != L_USE_MINSIZE && subflag != L_USE_MAXSIZE && + subflag != L_SUB_ON_LOC_DIFF && subflag != L_SUB_ON_SIZE_DIFF && + subflag != L_USE_CAPPED_MIN && subflag != L_USE_CAPPED_MAX) { + L_WARNING("invalid subflag; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if ((n = boxaGetCount(boxas)) < 4) { + L_WARNING("need at least 4 boxes; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + + boxaSplitEvenOdd(boxas, 1, &boxae, &boxao); + if (debug) { + lept_mkdir("lept/smooth"); + boxaWriteDebug("/tmp/lept/smooth/boxae.ba", boxae); + boxaWriteDebug("/tmp/lept/smooth/boxao.ba", boxao); + } + + boxalfe = boxaLinearFit(boxae, factor, debug); + boxalfo = boxaLinearFit(boxao, factor, debug); + if (debug) { + boxaWriteDebug("/tmp/lept/smooth/boxalfe.ba", boxalfe); + boxaWriteDebug("/tmp/lept/smooth/boxalfo.ba", boxalfo); + } + + boxame = boxaModifyWithBoxa(boxae, boxalfe, subflag, maxdiff, extrapixels); + boxamo = boxaModifyWithBoxa(boxao, boxalfo, subflag, maxdiff, extrapixels); + if (debug) { + boxaWriteDebug("/tmp/lept/smooth/boxame.ba", boxame); + boxaWriteDebug("/tmp/lept/smooth/boxamo.ba", boxamo); + } + + boxad = boxaMergeEvenOdd(boxame, boxamo, 1); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + boxaDestroy(&boxalfe); + boxaDestroy(&boxalfo); + boxaDestroy(&boxame); + boxaDestroy(&boxamo); + return boxad; +} + + +/*! + * \brief boxaSmoothSequenceMedian() + * + * \param[in] boxas source boxa + * \param[in] halfwin half-width of sliding window; used to find median + * \param[in] subflag L_USE_MINSIZE, L_USE_MAXSIZE, + * L_SUB_ON_LOC_DIFF, L_SUB_ON_SIZE_DIFF, + * L_USE_CAPPED_MIN, L_USE_CAPPED_MAX + * \param[in] maxdiff parameter used with L_SUB_ON_LOC_DIFF, + * L_SUB_ON_SIZE_DIFF, L_USE_CAPPED_MIN, + * L_USE_CAPPED_MAX + * \param[in] extrapixels pixels added on all sides (or subtracted + * if %extrapixels < 0) when using + * L_SUB_ON_LOC_DIFF and L_SUB_ON_SIZE_DIFF + * \param[in] debug 1 for debug output + * \return boxad fitted boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) The target width of the sliding window is 2 * %halfwin + 1.
+ *          If necessary, this will be reduced by boxaWindowedMedian().
+ *      (2) This returns a modified version of %boxas by constructing
+ *          for each input box a box that has been smoothed with windowed
+ *          median filtering.  The filtering is done to each of the
+ *          box sides independently, and it is computed separately for
+ *          sequences of even and odd boxes.  The output %boxad is
+ *          constructed from the input boxa and the filtered boxa,
+ *          depending on %subflag.  See boxaModifyWithBoxa() for
+ *          details on the use of %subflag, %maxdiff and %extrapixels.
+ *      (3) This is useful for removing noise separately in the even
+ *          and odd sets, where the box edge locations can have
+ *          discontinuities but otherwise vary roughly linearly within
+ *          intervals of size %halfwin or larger.
+ *      (4) If you don't need to handle even and odd sets separately,
+ *          just do this:
+ *              boxam = boxaWindowedMedian(boxas, halfwin, debug);
+ *              boxad = boxaModifyWithBoxa(boxas, boxam, subflag, maxdiff,
+ *                                         extrapixels);
+ *              boxaDestroy(&boxam);
+ * 
+ */ +BOXA * +boxaSmoothSequenceMedian(BOXA *boxas, + l_int32 halfwin, + l_int32 subflag, + l_int32 maxdiff, + l_int32 extrapixels, + l_int32 debug) +{ +l_int32 n; +BOXA *boxae, *boxao, *boxamede, *boxamedo, *boxame, *boxamo, *boxad; + + PROCNAME("boxaSmoothSequenceMedian"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (halfwin <= 0) { + L_WARNING("halfwin must be > 0; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (maxdiff < 0) { + L_WARNING("maxdiff must be >= 0; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (subflag != L_USE_MINSIZE && subflag != L_USE_MAXSIZE && + subflag != L_SUB_ON_LOC_DIFF && subflag != L_SUB_ON_SIZE_DIFF && + subflag != L_USE_CAPPED_MIN && subflag != L_USE_CAPPED_MAX) { + L_WARNING("invalid subflag; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if ((n = boxaGetCount(boxas)) < 6) { + L_WARNING("need at least 6 boxes; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + + boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); + if (debug) { + lept_mkdir("lept/smooth"); + boxaWriteDebug("/tmp/lept/smooth/boxae.ba", boxae); + boxaWriteDebug("/tmp/lept/smooth/boxao.ba", boxao); + } + + boxamede = boxaWindowedMedian(boxae, halfwin, debug); + boxamedo = boxaWindowedMedian(boxao, halfwin, debug); + if (debug) { + boxaWriteDebug("/tmp/lept/smooth/boxamede.ba", boxamede); + boxaWriteDebug("/tmp/lept/smooth/boxamedo.ba", boxamedo); + } + + boxame = boxaModifyWithBoxa(boxae, boxamede, subflag, maxdiff, extrapixels); + boxamo = boxaModifyWithBoxa(boxao, boxamedo, subflag, maxdiff, extrapixels); + if (debug) { + boxaWriteDebug("/tmp/lept/smooth/boxame.ba", boxame); + boxaWriteDebug("/tmp/lept/smooth/boxamo.ba", boxamo); + } + + boxad = boxaMergeEvenOdd(boxame, boxamo, 0); + if (debug) { + boxaPlotSides(boxas, NULL, NULL, NULL, NULL, NULL, NULL); + boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, NULL); + boxaPlotSizes(boxas, NULL, NULL, NULL, NULL); + boxaPlotSizes(boxad, NULL, NULL, NULL, NULL); + } + + boxaDestroy(&boxae); + boxaDestroy(&boxao); + boxaDestroy(&boxamede); + boxaDestroy(&boxamedo); + boxaDestroy(&boxame); + boxaDestroy(&boxamo); + return boxad; +} + + +/*! + * \brief boxaLinearFit() + * + * \param[in] boxas source boxa + * \param[in] factor reject outliers with widths and heights deviating + * from the median by more than %factor times + * the median deviation from the median; typically ~3 + * \param[in] debug 1 for debug output + * \return boxad fitted boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds a set of boxes (boxad) where each edge of each box is
+ *          a linear least square fit (LSF) to the edges of the
+ *          input set of boxes (boxas).  Before fitting, outliers in
+ *          the boxes in boxas are removed (see below).
+ *      (2) This is useful when each of the box edges in boxas are expected
+ *          to vary linearly with box index in the set.  These could
+ *          be, for example, noisy measurements of similar regions
+ *          on successive scanned pages.
+ *      (3) Method: there are 2 steps:
+ *          (a) Find and remove outliers, separately based on the deviation
+ *              from the median of the width and height of the box.
+ *              Use %factor to specify tolerance to outliers; use a very
+ *              large value of %factor to avoid rejecting any box sides
+ *              in the linear LSF.
+ *          (b) On the remaining boxes, do a linear LSF independently
+ *              for each of the four sides.
+ *      (4) Invalid input boxes are not used in computation of the LSF.
+ *      (5) The returned boxad can then be used in boxaModifyWithBoxa()
+ *          to selectively change the boxes in boxas.
+ * 
+ */ +BOXA * +boxaLinearFit(BOXA *boxas, + l_float32 factor, + l_int32 debug) +{ +l_int32 n, i, w, h, lval, tval, rval, bval, rejectlr, rejecttb; +l_float32 al, bl, at, bt, ar, br, ab, bb; /* LSF coefficients */ +l_float32 medw, medh, medvarw, medvarh; +BOX *box, *boxempty; +BOXA *boxalr, *boxatb, *boxad; +NUMA *naw, *nah; +PTA *ptal, *ptat, *ptar, *ptab; + + PROCNAME("boxaLinearFit"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((n = boxaGetCount(boxas)) < 2) + return (BOXA *)ERROR_PTR("need at least 2 boxes", procName, NULL); + + /* Remove outliers based on width and height. + * First find the median width and the median deviation from + * the median width. Ditto for the height. */ + boxaExtractAsNuma(boxas, NULL, NULL, NULL, NULL, &naw, &nah, 0); + numaGetMedianDevFromMedian(naw, &medw, &medvarw); + numaGetMedianDevFromMedian(nah, &medh, &medvarh); + numaDestroy(&naw); + numaDestroy(&nah); + + if (debug) { + fprintf(stderr, "medw = %7.3f, medvarw = %7.3f\n", medw, medvarw); + fprintf(stderr, "medh = %7.3f, medvarh = %7.3f\n", medh, medvarh); + } + + /* To fit the left and right sides, only use boxes whose + * width is within (factor * medvarw) of the median width. + * Ditto for the top and bottom sides. Add empty boxes + * in as placeholders so that the index remains the same + * as in boxas. */ + boxalr = boxaCreate(n); + boxatb = boxaCreate(n); + boxempty = boxCreate(0, 0, 0, 0); /* placeholders */ + rejectlr = rejecttb = 0; + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) { + boxaAddBox(boxalr, boxempty, L_COPY); + boxaAddBox(boxatb, boxempty, L_COPY); + continue; + } + boxGetGeometry(box, NULL, NULL, &w, &h); + if (L_ABS(w - medw) <= factor * medvarw) { + boxaAddBox(boxalr, box, L_COPY); + } else { + rejectlr++; + boxaAddBox(boxalr, boxempty, L_COPY); + } + if (L_ABS(h - medh) <= factor * medvarh) { + boxaAddBox(boxatb, box, L_COPY); + } else { + rejecttb++; + boxaAddBox(boxatb, boxempty, L_COPY); + } + boxDestroy(&box); + } + boxDestroy(&boxempty); + if (boxaGetCount(boxalr) < 2 || boxaGetCount(boxatb) < 2) { + boxaDestroy(&boxalr); + boxaDestroy(&boxatb); + return (BOXA *)ERROR_PTR("need at least 2 valid boxes", procName, NULL); + } + + if (debug) { + L_INFO("# lr reject = %d, # tb reject = %d\n", procName, + rejectlr, rejecttb); + lept_mkdir("linfit"); + boxaWriteDebug("/tmp/linfit/boxalr.ba", boxalr); + boxaWriteDebug("/tmp/linfit/boxatb.ba", boxatb); + } + + /* Extract the valid left and right box sides, along with the box + * index, from boxalr. This only extracts pts corresponding to + * valid boxes. Ditto: top and bottom sides from boxatb. */ + boxaExtractAsPta(boxalr, &ptal, NULL, &ptar, NULL, NULL, NULL, 0); + boxaExtractAsPta(boxatb, NULL, &ptat, NULL, &ptab, NULL, NULL, 0); + boxaDestroy(&boxalr); + boxaDestroy(&boxatb); + + if (debug) { + ptaWriteDebug("/tmp/linfit/ptal.pta", ptal, 1); + ptaWriteDebug("/tmp/linfit/ptar.pta", ptar, 1); + ptaWriteDebug("/tmp/linfit/ptat.pta", ptat, 1); + ptaWriteDebug("/tmp/linfit/ptab.pta", ptab, 1); + } + + /* Do a linear LSF fit to the points that are width and height + * validated. Because we've eliminated the outliers, there is no + * need to use ptaNoisyLinearLSF(ptal, factor, NULL, &al, &bl, ...) */ + ptaGetLinearLSF(ptal, &al, &bl, NULL); + ptaGetLinearLSF(ptat, &at, &bt, NULL); + ptaGetLinearLSF(ptar, &ar, &br, NULL); + ptaGetLinearLSF(ptab, &ab, &bb, NULL); + + /* Return the LSF smoothed values, interleaved with invalid + * boxes when the corresponding box in boxas is invalid. */ + boxad = boxaCreate(n); + boxempty = boxCreate(0, 0, 0, 0); /* use for placeholders */ + for (i = 0; i < n; i++) { + lval = (l_int32)(al * i + bl + 0.5); + tval = (l_int32)(at * i + bt + 0.5); + rval = (l_int32)(ar * i + br + 0.5); + bval = (l_int32)(ab * i + bb + 0.5); + if ((box = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) { + boxaAddBox(boxad, boxempty, L_COPY); + } else { + boxDestroy(&box); + box = boxCreate(lval, tval, rval - lval + 1, bval - tval + 1); + boxaAddBox(boxad, box, L_INSERT); + } + } + boxDestroy(&boxempty); + + if (debug) { + boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, NULL); + boxaPlotSizes(boxad, NULL, NULL, NULL, NULL); + } + + ptaDestroy(&ptal); + ptaDestroy(&ptat); + ptaDestroy(&ptar); + ptaDestroy(&ptab); + return boxad; +} + + +/*! + * \brief boxaWindowedMedian() + * + * \param[in] boxas source boxa + * \param[in] halfwin half width of window over which the median is found + * \param[in] debug 1 for debug output + * \return boxad smoothed boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds a set of boxes (boxad) where each edge of each box is
+ *          a windowed median smoothed value to the edges of the
+ *          input set of boxes (boxas).
+ *      (2) Invalid input boxes are filled from nearby ones.
+ *      (3) The returned boxad can then be used in boxaModifyWithBoxa()
+ *          to selectively change the boxes in the source boxa.
+ * 
+ */ +BOXA * +boxaWindowedMedian(BOXA *boxas, + l_int32 halfwin, + l_int32 debug) +{ +l_int32 n, i, left, top, right, bot; +BOX *box; +BOXA *boxaf, *boxad; +NUMA *nal, *nat, *nar, *nab, *naml, *namt, *namr, *namb; + + PROCNAME("boxaWindowedMedian"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if ((n = boxaGetCount(boxas)) < 3) { + L_WARNING("less than 3 boxes; returning a copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (halfwin <= 0) { + L_WARNING("halfwin must be > 0; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + + /* Fill invalid boxes in the input sequence */ + if ((boxaf = boxaFillSequence(boxas, L_USE_ALL_BOXES, debug)) == NULL) + return (BOXA *)ERROR_PTR("filled boxa not made", procName, NULL); + + /* Get the windowed median output from each of the sides */ + boxaExtractAsNuma(boxaf, &nal, &nat, &nar, &nab, NULL, NULL, 0); + naml = numaWindowedMedian(nal, halfwin); + namt = numaWindowedMedian(nat, halfwin); + namr = numaWindowedMedian(nar, halfwin); + namb = numaWindowedMedian(nab, halfwin); + + n = boxaGetCount(boxaf); + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naml, i, &left); + numaGetIValue(namt, i, &top); + numaGetIValue(namr, i, &right); + numaGetIValue(namb, i, &bot); + box = boxCreate(left, top, right - left + 1, bot - top + 1); + boxaAddBox(boxad, box, L_INSERT); + } + + if (debug) { + boxaPlotSides(boxaf, NULL, NULL, NULL, NULL, NULL, NULL); + boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, NULL); + boxaPlotSizes(boxaf, NULL, NULL, NULL, NULL); + boxaPlotSizes(boxad, NULL, NULL, NULL, NULL); + } + + boxaDestroy(&boxaf); + numaDestroy(&nal); + numaDestroy(&nat); + numaDestroy(&nar); + numaDestroy(&nab); + numaDestroy(&naml); + numaDestroy(&namt); + numaDestroy(&namr); + numaDestroy(&namb); + return boxad; +} + + +/*! + * \brief boxaModifyWithBoxa() + * + * \param[in] boxas + * \param[in] boxam boxa with boxes used to modify those in boxas + * \param[in] subflag L_USE_MINSIZE, L_USE_MAXSIZE, + * L_SUB_ON_LOC_DIFF, L_SUB_ON_SIZE_DIFF, + * L_USE_CAPPED_MIN, L_USE_CAPPED_MAX + * \param[in] maxdiff parameter used with L_SUB_ON_LOC_DIFF, + * L_SUB_ON_SIZE_DIFF, L_USE_CAPPED_MIN, + * L_USE_CAPPED_MAX + * \param[in] extrapixels pixels added on all sides (or subtracted + * if %extrapixels < 0) when using + * L_SUB_ON_LOC_DIFF and L_SUB_ON_SIZE_DIFF + * \return boxad result after adjusting boxes in boxas, or NULL on error. + * + *
+ * Notes:
+ *      (1) This takes two input boxa (boxas, boxam) and constructs boxad,
+ *          where each box in boxad is generated from the corresponding
+ *          boxes in boxas and boxam.  The rule for constructing each
+ *          output box depends on %subflag and %maxdiff.  Let boxs be
+ *          a box from %boxas and boxm be a box from %boxam.
+ *          * If %subflag == L_USE_MINSIZE: the output box is the intersection
+ *            of the two input boxes.
+ *          * If %subflag == L_USE_MAXSIZE: the output box is the union of the
+ *            two input boxes; i.e., the minimum bounding rectangle for the
+ *            two input boxes.
+ *          * If %subflag == L_SUB_ON_LOC_DIFF: each side of the output box
+ *            is found separately from the corresponding side of boxs and boxm.
+ *            Use the boxm side, expanded by %extrapixels, if greater than
+ *            %maxdiff pixels from the boxs side.
+ *          * If %subflag == L_SUB_ON_SIZE_DIFF: the sides of the output box
+ *            are determined in pairs from the width and height of boxs
+ *            and boxm.  If the boxm width differs by more than %maxdiff
+ *            pixels from boxs, use the boxm left and right sides,
+ *            expanded by %extrapixels.  Ditto for the height difference.
+ *          For the last two flags, each side of the output box is found
+ *          separately from the corresponding side of boxs and boxm,
+ *          according to these rules, where "smaller"("bigger") mean in a
+ *          direction that decreases(increases) the size of the output box:
+ *          * If %subflag == L_USE_CAPPED_MIN: use the Min of boxm
+ *            with the Max of (boxs, boxm +- %maxdiff), where the sign
+ *            is adjusted to make the box smaller (e.g., use "+" on left side).
+ *          * If %subflag == L_USE_CAPPED_MAX: use the Max of boxm
+ *            with the Min of (boxs, boxm +- %maxdiff), where the sign
+ *            is adjusted to make the box bigger (e.g., use "-" on left side).
+ *          Use of the last 2 flags is further explained in (3) and (4).
+ *      (2) boxas and boxam must be the same size.  If boxam == NULL,
+ *          this returns a copy of boxas with a warning.
+ *      (3) If %subflag == L_SUB_ON_LOC_DIFF, use boxm for each side
+ *          where the corresponding sides differ by more than %maxdiff.
+ *          Two extreme cases:
+ *          (a) set %maxdiff == 0 to use only values from boxam in boxad.
+ *          (b) set %maxdiff == 10000 to ignore all values from boxam;
+ *              then boxad will be the same as boxas.
+ *      (4) If %subflag == L_USE_CAPPED_MAX: use boxm if boxs is smaller;
+ *          use boxs if boxs is bigger than boxm by an amount up to %maxdiff;
+ *          and use boxm +- %maxdiff (the 'capped' value) if boxs is
+ *          bigger than boxm by an amount larger than %maxdiff.
+ *          Similarly, with interchange of Min/Max and sign of %maxdiff,
+ *          for %subflag == L_USE_CAPPED_MIN.
+ *      (5) If either of corresponding boxes in boxas and boxam is invalid,
+ *          an invalid box is copied to the result.
+ *      (6) Typical input for boxam may be the output of boxaLinearFit().
+ *          where outliers have been removed and each side is LS fit to a line.
+ *      (7) Unlike boxaAdjustWidthToTarget() and boxaAdjustHeightToTarget(),
+ *          this uses two boxes and does not specify target dimensions.
+ *          Additional constraints on the size of each box can be enforced
+ *          by following this operation with boxaConstrainSize(), taking
+ *          boxad as input.
+ * 
+ */ +BOXA * +boxaModifyWithBoxa(BOXA *boxas, + BOXA *boxam, + l_int32 subflag, + l_int32 maxdiff, + l_int32 extrapixels) +{ +l_int32 n, i, ls, ts, rs, bs, ws, hs, lm, tm, rm, bm, wm, hm, ld, td, rd, bd; +BOX *boxs, *boxm, *boxd, *boxempty; +BOXA *boxad; + + PROCNAME("boxaModifyWithBoxa"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (!boxam) { + L_WARNING("boxam not defined; returning copy", procName); + return boxaCopy(boxas, L_COPY); + } + if (subflag != L_USE_MINSIZE && subflag != L_USE_MAXSIZE && + subflag != L_SUB_ON_LOC_DIFF && subflag != L_SUB_ON_SIZE_DIFF && + subflag != L_USE_CAPPED_MIN && subflag != L_USE_CAPPED_MAX) { + L_WARNING("invalid subflag; returning copy", procName); + return boxaCopy(boxas, L_COPY); + } + n = boxaGetCount(boxas); + if (n != boxaGetCount(boxam)) { + L_WARNING("boxas and boxam sizes differ; returning copy", procName); + return boxaCopy(boxas, L_COPY); + } + + boxad = boxaCreate(n); + boxempty = boxCreate(0, 0, 0, 0); /* placeholders */ + for (i = 0; i < n; i++) { + boxs = boxaGetValidBox(boxas, i, L_CLONE); + boxm = boxaGetValidBox(boxam, i, L_CLONE); + if (!boxs || !boxm) { + boxaAddBox(boxad, boxempty, L_COPY); + } else { + boxGetGeometry(boxs, &ls, &ts, &ws, &hs); + boxGetGeometry(boxm, &lm, &tm, &wm, &hm); + rs = ls + ws - 1; + bs = ts + hs - 1; + rm = lm + wm - 1; + bm = tm + hm - 1; + if (subflag == L_USE_MINSIZE) { + ld = L_MAX(ls, lm); + rd = L_MIN(rs, rm); + td = L_MAX(ts, tm); + bd = L_MIN(bs, bm); + } else if (subflag == L_USE_MAXSIZE) { + ld = L_MIN(ls, lm); + rd = L_MAX(rs, rm); + td = L_MIN(ts, tm); + bd = L_MAX(bs, bm); + } else if (subflag == L_SUB_ON_LOC_DIFF) { + ld = (L_ABS(lm - ls) <= maxdiff) ? ls : lm - extrapixels; + td = (L_ABS(tm - ts) <= maxdiff) ? ts : tm - extrapixels; + rd = (L_ABS(rm - rs) <= maxdiff) ? rs : rm + extrapixels; + bd = (L_ABS(bm - bs) <= maxdiff) ? bs : bm + extrapixels; + } else if (subflag == L_SUB_ON_SIZE_DIFF) { + ld = (L_ABS(wm - ws) <= maxdiff) ? ls : lm - extrapixels; + td = (L_ABS(hm - hs) <= maxdiff) ? ts : tm - extrapixels; + rd = (L_ABS(wm - ws) <= maxdiff) ? rs : rm + extrapixels; + bd = (L_ABS(hm - hs) <= maxdiff) ? bs : bm + extrapixels; + } else if (subflag == L_USE_CAPPED_MIN) { + ld = L_MAX(lm, L_MIN(ls, lm + maxdiff)); + td = L_MAX(tm, L_MIN(ts, tm + maxdiff)); + rd = L_MIN(rm, L_MAX(rs, rm - maxdiff)); + bd = L_MIN(bm, L_MAX(bs, bm - maxdiff)); + } else { /* subflag == L_USE_CAPPED_MAX */ + ld = L_MIN(lm, L_MAX(ls, lm - maxdiff)); + td = L_MIN(tm, L_MAX(ts, tm - maxdiff)); + rd = L_MAX(rm, L_MIN(rs, rm + maxdiff)); + bd = L_MAX(bm, L_MIN(bs, bm + maxdiff)); + } + boxd = boxCreate(ld, td, rd - ld + 1, bd - td + 1); + boxaAddBox(boxad, boxd, L_INSERT); + } + boxDestroy(&boxs); + boxDestroy(&boxm); + } + boxDestroy(&boxempty); + + return boxad; +} + + +/*! + * \brief boxaConstrainSize() + * + * \param[in] boxas + * \param[in] width force width of all boxes to this size; + * input 0 to use the median width + * \param[in] widthflag L_ADJUST_SKIP, L_ADJUST_LEFT, L_ADJUST_RIGHT, + * or L_ADJUST_LEFT_AND_RIGHT + * \param[in] height force height of all boxes to this size; + * input 0 to use the median height + * \param[in] heightflag L_ADJUST_SKIP, L_ADJUST_TOP, L_ADJUST_BOT, + * or L_ADJUST_TOP_AND_BOT + * \return boxad adjusted so all boxes are the same size + * + *
+ * Notes:
+ *      (1) Forces either width or height (or both) of every box in
+ *          the boxa to a specified size, by moving the indicated sides.
+ *      (2) Not all input boxes need to be valid.  Median values will be
+ *          used with invalid boxes.
+ *      (3) Typical input might be the output of boxaLinearFit(),
+ *          where each side has been fit.
+ *      (4) Unlike boxaAdjustWidthToTarget() and boxaAdjustHeightToTarget(),
+ *          this is not dependent on a difference threshold to change the size.
+ *      (5) On error, a message is issued and a copy of the input boxa
+ *          is returned.
+ * 
+ */ +BOXA * +boxaConstrainSize(BOXA *boxas, + l_int32 width, + l_int32 widthflag, + l_int32 height, + l_int32 heightflag) +{ +l_int32 n, i, x, y, w, h, invalid; +l_int32 delw, delh, del_left, del_right, del_top, del_bot; +BOX *medbox, *boxs, *boxd; +BOXA *boxad; + + PROCNAME("boxaConstrainSize"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + + /* Need median values if requested or if there are invalid boxes */ + invalid = boxaGetCount(boxas) - boxaGetValidCount(boxas); + medbox = NULL; + if (width == 0 || height == 0 || invalid > 0) { + if (boxaGetMedianVals(boxas, &x, &y, NULL, NULL, &w, &h)) { + L_ERROR("median vals not returned", procName); + return boxaCopy(boxas, L_COPY); + } + medbox = boxCreate(x, y, w, h); + if (width == 0) width = w; + if (height == 0) height = h; + } + + n = boxaGetCount(boxas); + boxad = boxaCreate(n); + for (i = 0; i < n; i++) { + if ((boxs = boxaGetValidBox(boxas, i, L_COPY)) == NULL) + boxs = boxCopy(medbox); + boxGetGeometry(boxs, NULL, NULL, &w, &h); + delw = width - w; + delh = height - h; + del_left = del_right = del_top = del_bot = 0; + if (widthflag == L_ADJUST_LEFT) { + del_left = -delw; + } else if (widthflag == L_ADJUST_RIGHT) { + del_right = delw; + } else { + del_left = -delw / 2; + del_right = delw / 2 + L_SIGN(delw) * (delw & 1); + } + if (heightflag == L_ADJUST_TOP) { + del_top = -delh; + } else if (heightflag == L_ADJUST_BOT) { + del_bot = delh; + } else { + del_top = -delh / 2; + del_bot = delh / 2 + L_SIGN(delh) * (delh & 1); + } + boxd = boxAdjustSides(NULL, boxs, del_left, del_right, + del_top, del_bot); + boxaAddBox(boxad, boxd, L_INSERT); + boxDestroy(&boxs); + } + + boxDestroy(&medbox); + return boxad; +} + + +/*! + * \brief boxaReconcileEvenOddHeight() + * + * \param[in] boxas containing at least 3 valid boxes in even and odd + * \param[in] sides L_ADJUST_TOP, L_ADJUST_BOT, L_ADJUST_TOP_AND_BOT + * \param[in] delh threshold on median height difference + * \param[in] op L_ADJUST_CHOOSE_MIN, L_ADJUST_CHOOSE_MAX + * \param[in] factor > 0.0, typically near 1.0 + * \param[in] start 0 if pairing (0,1), etc; 1 if pairing (1,2), etc + * \return boxad adjusted, or a copy of boxas on error + * + *
+ * Notes:
+ *      (1) The basic idea is to reconcile differences in box height
+ *          in the even and odd boxes, by moving the top and/or bottom
+ *          edges in the even and odd boxes.  Choose the edge or edges
+ *          to be moved, whether to adjust the boxes with the min
+ *          or the max of the medians, and the threshold on the median
+ *          difference between even and odd box heights for the operations
+ *          to take place.  The same threshold is also used to
+ *          determine if each individual box edge is to be adjusted.
+ *      (2) Boxes are conditionally reset with either the same top (y)
+ *          value or the same bottom value, or both.  The value is
+ *          determined by the greater or lesser of the medians of the
+ *          even and odd boxes, with the choice depending on the value
+ *          of %op, which selects for either min or max median height.
+ *          If the median difference between even and odd boxes is
+ *          greater than %dely, then any individual box edge that differs
+ *          from the selected median by more than %dely is set to
+ *          the selected median times a factor typically near 1.0.
+ *      (3) Note that if selecting for minimum height, you will choose
+ *          the largest y-value for the top and the smallest y-value for
+ *          the bottom of the box.
+ *      (4) Typical input might be the output of boxaSmoothSequence(),
+ *          where even and odd boxa have been independently regulated.
+ *      (5) Require at least 3 valid even boxes and 3 valid odd boxes.
+ *          Median values will be used for invalid boxes.
+ *      (6) If the median height is not representative of the boxes
+ *          in %boxas, this can make things much worse.  In that case,
+ *          ignore the value of %op, and force pairwise equality of the
+ *          heights, with pairwise maximal vertical extension.
+ * 
+ */ +BOXA * +boxaReconcileEvenOddHeight(BOXA *boxas, + l_int32 sides, + l_int32 delh, + l_int32 op, + l_float32 factor, + l_int32 start) +{ +l_int32 n, he, ho, hmed, doeven; +l_float32 del1, del2; +BOXA *boxae, *boxao, *boxa1e, *boxa1o, *boxad; + + PROCNAME("boxaReconcileEvenOddHeight"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (sides != L_ADJUST_TOP && sides != L_ADJUST_BOT && + sides != L_ADJUST_TOP_AND_BOT) { + L_WARNING("no action requested; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if ((n = boxaGetValidCount(boxas)) < 6) { + L_WARNING("need at least 6 valid boxes; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (factor <= 0.0) { + L_WARNING("invalid factor; setting to 1.0\n", procName); + factor = 1.0; + } + + /* Require at least 3 valid boxes of both types */ + boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); + if (boxaGetValidCount(boxae) < 3 || boxaGetValidCount(boxao) < 3) { + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return boxaCopy(boxas, L_COPY); + } + + /* Get the median heights for each set */ + boxaGetMedianVals(boxae, NULL, NULL, NULL, NULL, NULL, &he); + boxaGetMedianVals(boxao, NULL, NULL, NULL, NULL, NULL, &ho); + L_INFO("median he = %d, median ho = %d\n", procName, he, ho); + + /* If the difference in median height reaches the threshold %delh, + * only adjust the side(s) of one of the sets. If we choose + * the minimum median height as the target, allow the target + * to be scaled by a factor, typically near 1.0, of the + * minimum median height. And similarly if the target is + * the maximum median height. */ + if (L_ABS(he - ho) > delh) { + if (op == L_ADJUST_CHOOSE_MIN) { + doeven = (ho < he) ? TRUE : FALSE; + hmed = (l_int32)(factor * L_MIN(he, ho)); + hmed = L_MIN(hmed, L_MAX(he, ho)); /* don't make it bigger! */ + } else { /* max height */ + doeven = (ho > he) ? TRUE : FALSE; + hmed = (l_int32)(factor * L_MAX(he, ho)); + hmed = L_MAX(hmed, L_MIN(he, ho)); /* don't make it smaller! */ + } + if (doeven) { + boxa1e = boxaAdjustHeightToTarget(NULL, boxae, sides, hmed, delh); + boxa1o = boxaCopy(boxao, L_COPY); + } else { /* !doeven */ + boxa1e = boxaCopy(boxae, L_COPY); + boxa1o = boxaAdjustHeightToTarget(NULL, boxao, sides, hmed, delh); + } + } else { + boxa1e = boxaCopy(boxae, L_CLONE); + boxa1o = boxaCopy(boxao, L_CLONE); + } + boxaDestroy(&boxae); + boxaDestroy(&boxao); + + /* It can happen that the median is not a good measure for an + * entire book. In that case, the reconciliation above can do + * more harm than good. Sanity check by comparing height and y + * differences of adjacent even/odd boxes, before and after + * reconciliation. */ + boxad = boxaMergeEvenOdd(boxa1e, boxa1o, 0); + boxaTestEvenOddHeight(boxas, boxad, start, &del1, &del2); + boxaDestroy(&boxa1e); + boxaDestroy(&boxa1o); + if (del2 < del1 + 10.) + return boxad; + + /* Using the median made it worse. Skip reconciliation: + * forcing all pairs of top and bottom values to have + * maximum extent does not improve the situation either. */ + L_INFO("Got worse: del2 = %f > del1 = %f\n", procName, del2, del1); + boxaDestroy(&boxad); + return boxaCopy(boxas, L_COPY); +} + + +/*! + * \brief boxaTestEvenOddHeight() + * + * \param[in] boxa1 input boxa 1 + * \param[in] boxa2 input boxa 2 + * \param[in] start 0 if pairing (0,1), etc; 1 if pairing (1,2), etc + * \param[out] pdel1 root mean of (dely^2 + delh^2 for boxa1 + * \param[out] pdel2 root mean of (dely^2 + delh^2 for boxa2 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This compares differences in the y location and height of
+ *          adjacent boxes, in each of the input boxa.
+ * 
+ */ +static l_int32 +boxaTestEvenOddHeight(BOXA *boxa1, + BOXA *boxa2, + l_int32 start, + l_float32 *pdel1, + l_float32 *pdel2) +{ +l_int32 i, n, npairs, y1a, y1b, y2a, y2b, h1a, h1b, h2a, h2b; +l_float32 del1, del2; + + PROCNAME("boxaTestEvenOddHeight"); + + if (pdel1) *pdel1 = 0.0; + if (pdel2) *pdel2 = 0.0; + if (!pdel1 || !pdel2) + return ERROR_INT("&del1 and &del2 not both defined", procName, 1); + if (!boxa1 || !boxa2) + return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); + n = L_MIN(boxaGetCount(boxa1), boxaGetCount(boxa2)); + + /* For boxa1 and boxa2 separately, we expect the y and h values + * to be similar for adjacent boxes. Get a measure of similarity + * by finding the sum of squares of differences between + * y values and between h values, and adding them. */ + del1 = del2 = 0.0; + npairs = (n - start) / 2; + for (i = start; i < 2 * npairs; i += 2) { + boxaGetBoxGeometry(boxa1, i, NULL, &y1a, NULL, &h1a); + boxaGetBoxGeometry(boxa1, i + 1, NULL, &y1b, NULL, &h1b); + del1 += (l_float32)(y1a - y1b) * (y1a - y1b) + + (h1a - h1b) * (h1a - h1b); + boxaGetBoxGeometry(boxa2, i, NULL, &y2a, NULL, &h2a); + boxaGetBoxGeometry(boxa2, i + 1, NULL, &y2b, NULL, &h2b); + del2 += (l_float32)(y2a - y2b) * (y2a - y2b) + + (h2a - h2b) * (h2a - h2b); + } + + /* Get the root of the average of the sum of square differences */ + *pdel1 = (l_float32)sqrt((l_float64)del1 / (0.5 * n)); + *pdel2 = (l_float32)sqrt((l_float64)del2 / (0.5 * n)); + return 0; +} + + +/*! + * \brief boxaReconcilePairWidth() + * + * \param[in] boxas + * \param[in] delw threshold on adjacent width difference + * \param[in] op L_ADJUST_CHOOSE_MIN, L_ADJUST_CHOOSE_MAX + * \param[in] factor > 0.0, typically near 1.0 + * \param[in] na [optional] indicator array allowing change + * \return boxad adjusted, or a copy of boxas on error + * + *
+ * Notes:
+ *      (1) This reconciles differences in the width of adjacent boxes,
+ *          by moving one side of one of the boxes in each pair.
+ *          If the widths in the pair differ by more than some
+ *          threshold, move either the left side for even boxes or
+ *          the right side for odd boxes, depending on if we're choosing
+ *          the min or max.  If choosing min, the width of the max is
+ *          set to factor * (width of min).  If choosing max, the width
+ *          of the min is set to factor * (width of max).
+ *      (2) If %na exists, it is an indicator array corresponding to the
+ *          boxes in %boxas.  If %na != NULL, only boxes with an
+ *          indicator value of 1 are allowed to adjust; otherwise,
+ *          all boxes can adjust.
+ *      (3) Typical input might be the output of boxaSmoothSequence(),
+ *          where even and odd boxa have been independently regulated.
+ * 
+ */ +BOXA * +boxaReconcilePairWidth(BOXA *boxas, + l_int32 delw, + l_int32 op, + l_float32 factor, + NUMA *na) +{ +l_int32 i, ne, no, nmin, xe, we, xo, wo, inde, indo, x, w; +BOX *boxe, *boxo; +BOXA *boxae, *boxao, *boxad; + + PROCNAME("boxaReconcilePairWidth"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (factor <= 0.0) { + L_WARNING("invalid factor; setting to 1.0\n", procName); + factor = 1.0; + } + + /* Taking the boxes in pairs, if the difference in width reaches + * the threshold %delw, adjust the left or right side of one + * of the pair. */ + boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); + ne = boxaGetCount(boxae); + no = boxaGetCount(boxao); + nmin = L_MIN(ne, no); + for (i = 0; i < nmin; i++) { + /* Set indicator values */ + if (na) { + numaGetIValue(na, 2 * i, &inde); + numaGetIValue(na, 2 * i + 1, &indo); + } else { + inde = indo = 1; + } + if (inde == 0 && indo == 0) continue; + + boxe = boxaGetBox(boxae, i, L_CLONE); + boxo = boxaGetBox(boxao, i, L_CLONE); + boxGetGeometry(boxe, &xe, NULL, &we, NULL); + boxGetGeometry(boxo, &xo, NULL, &wo, NULL); + if (we == 0 || wo == 0) { /* if either is invalid; skip */ + boxDestroy(&boxe); + boxDestroy(&boxo); + continue; + } else if (L_ABS(we - wo) > delw) { + if (op == L_ADJUST_CHOOSE_MIN) { + if (we > wo && inde == 1) { + /* move left side of even to the right */ + w = factor * wo; + x = xe + (we - w); + boxSetGeometry(boxe, x, -1, w, -1); + } else if (we < wo && indo == 1) { + /* move right side of odd to the left */ + w = factor * we; + boxSetGeometry(boxo, -1, -1, w, -1); + } + } else { /* maximize width */ + if (we < wo && inde == 1) { + /* move left side of even to the left */ + w = factor * wo; + x = L_MAX(0, xe + (we - w)); + w = we + (xe - x); /* covers both cases for the max */ + boxSetGeometry(boxe, x, -1, w, -1); + } else if (we > wo && indo == 1) { + /* move right side of odd to the right */ + w = factor * we; + boxSetGeometry(boxo, -1, -1, w, -1); + } + } + } + boxDestroy(&boxe); + boxDestroy(&boxo); + } + + boxad = boxaMergeEvenOdd(boxae, boxao, 0); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return boxad; +} + + +/*! + * \brief boxaSizeConsistency1() + * + * \param[in] boxas of size >= 10 + * \param[in] type L_CHECK_WIDTH, L_CHECK_HEIGHT + * \param[in] threshp threshold for pairwise fractional variation + * \param[in] threshm threshold for fractional variation from median + * \param[out] pfvarp [optional] average fractional pairwise variation + * \param[out] pfvarm [optional] average fractional median variation + * \param[out] psame decision for uniformity of page size (1, 0, -1) + * + *
+ * Notes:
+ *      (1) This evaluates a boxa for particular types of dimensional
+ *          variation.  Select either width or height variation.  Then
+ *          it returns two numbers: one is based on pairwise (even/odd)
+ *          variation; the other is based on the average variation
+ *          from the boxa median.
+ *      (2) For the pairwise variation, get the fraction of the absolute
+ *          difference in dimension of each pair of boxes, and take
+ *          the average value.  The median variation is simply the
+ *          the average of the fractional deviation from the median
+ *          of all the boxes.
+ *      (3) Use 0 for default values of %threshp and %threshm.  They are
+ *            threshp:  0.02
+ *            threshm:  0.015
+ *      (4) The intended application is that the boxes are a sequence of
+ *          page regions in a book scan, and we calculate two numbers
+ *          that can give an indication if the pages are approximately
+ *          the same size.  The pairwise variation should be small if
+ *          the boxes are correctly calculated.  If there are a
+ *          significant number of random or systematic outliers, the
+ *          pairwise variation will be large, and no decision will be made
+ *          (i.e., return same == -1).  Here are the possible outcomes:
+ *            Pairwise Var    Median Var    Decision
+ *            ------------    ----------    --------
+ *            small           small         same size  (1)
+ *            small           large         different size  (0)
+ *            large           small/large   unknown   (-1)
+ * 
+ */ +l_ok +boxaSizeConsistency1(BOXA *boxas, + l_int32 type, + l_float32 threshp, + l_float32 threshm, + l_float32 *pfvarp, + l_float32 *pfvarm, + l_int32 *psame) +{ +l_int32 i, n, bw1, bh1, bw2, bh2, npairs; +l_float32 ave, fdiff, sumdiff, med, fvarp, fvarm; +NUMA *na1; + + PROCNAME("boxaSizeConsistency1"); + + if (pfvarp) *pfvarp = 0.0; + if (pfvarm) *pfvarm = 0.0; + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = -1; + if (!boxas) + return ERROR_INT("boxas not defined", procName, 1); + if (boxaGetValidCount(boxas) < 6) + return ERROR_INT("need a least 6 valid boxes", procName, 1); + if (type != L_CHECK_WIDTH && type != L_CHECK_HEIGHT) + return ERROR_INT("invalid type", procName, 1); + if (threshp < 0.0 || threshp >= 0.5) + return ERROR_INT("invalid threshp", procName, 1); + if (threshm < 0.0 || threshm >= 0.5) + return ERROR_INT("invalid threshm", procName, 1); + if (threshp == 0.0) threshp = 0.02; + if (threshm == 0.0) threshm = 0.015; + + /* Evaluate pairwise variation */ + n = boxaGetCount(boxas); + na1 = numaCreate(0); + for (i = 0, npairs = 0, sumdiff = 0; i < n - 1; i += 2) { + boxaGetBoxGeometry(boxas, i, NULL, NULL, &bw1, &bh1); + boxaGetBoxGeometry(boxas, i + 1, NULL, NULL, &bw2, &bh2); + if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0) + continue; + npairs++; + if (type == L_CHECK_WIDTH) { + ave = (bw1 + bw2) / 2.0; + fdiff = L_ABS(bw1 - bw2) / ave; + numaAddNumber(na1, bw1); + numaAddNumber(na1, bw2); + } else { /* type == L_CHECK_HEIGHT) */ + ave = (bh1 + bh2) / 2.0; + fdiff = L_ABS(bh1 - bh2) / ave; + numaAddNumber(na1, bh1); + numaAddNumber(na1, bh2); + } + sumdiff += fdiff; + } + fvarp = sumdiff / npairs; + if (pfvarp) *pfvarp = fvarp; + + /* Evaluate the average abs fractional deviation from the median */ + numaGetMedian(na1, &med); + if (med == 0.0) { + L_WARNING("median value is 0\n", procName); + } else { + numaGetMeanDevFromMedian(na1, med, &fvarm); + fvarm /= med; + if (pfvarm) *pfvarm = fvarm; + } + numaDestroy(&na1); + + /* Make decision */ + if (fvarp < threshp && fvarm < threshm) + *psame = 1; + else if (fvarp < threshp && fvarm > threshm) + *psame = 0; + else + *psame = -1; /* unknown */ + return 0; +} + + +/*! + * \brief boxaSizeConsistency2() + * + * \param[in] boxas of size >= 10 + * \param[out] pfdevw average fractional deviation from median width + * \param[out] pfdevh average fractional deviation from median height + * \param[in] debug 1 for debug plot output of input and regularized + * width and height + * + *
+ * Notes:
+ *      (1) This evaluates a boxa for consistency of the box sizes.
+ *          The intended application is that the boxes are a sequence of
+ *          page regions in a book scan, and the output is a decision
+ *          about whether the pages should be approximately the same size.
+ *          The determination should be robust to outliers, both random
+ *          and (for many cases) systematic.
+ *      (2) This differs from boxaSizeConsistency1() in that it attempts
+ *          to correct for box dimensional errors before doing the
+ *          evaluation.  For this reason, it may be less robust.
+ *      (3) Adjacent even and odd boxes are expected to be the same size.
+ *          Take them pairwise, and assume the minimum height, hmin,
+ *          is correct.  Then for (the usual case) wmin/hmin > 0.5, assume
+ *          the minimum width is correct.  If wmin/hmin <= 0.5, assume
+ *          the maximum width is correct.
+ *      (4) After correcting each pair so that they are the same size,
+ *          compute the average fractional deviation, from median width and
+ *          height.  A deviation of width or height by more than about
+ *          0.02 is evidence that the boxes may be from a non-homogeneous
+ *          source, such as a book with significantly different page sizes.
+ * 
+ */ +l_ok +boxaSizeConsistency2(BOXA *boxas, + l_float32 *pfdevw, + l_float32 *pfdevh, + l_int32 debug) +{ +l_int32 i, n, bw1, bh1, bw2, bh2, npairs; +l_float32 medw, medh, devw, devh, minw, maxw, minh, w; +BOX *box; +BOXA *boxa1; +NUMA *naw, *nah; +PIX *pix1, *pix2, *pix3; +PIXA *pixa; + + PROCNAME("boxaSizeConsistency2"); + + if (pfdevw) *pfdevw = 0.0; + if (pfdevh) *pfdevh = 0.0; + if (!boxas) + return ERROR_INT("boxas not defined", procName, 1); + if (!pfdevw || !pfdevh) + return ERROR_INT("&fdevw and &fdevh not both defined", procName, 1); + n = boxaGetCount(boxas); + if (n < 10) { + L_WARNING("small boxa; assuming OK", procName); + return 0; + } + + /* Regularize w and h in pairs; skip last box if n is odd */ + boxa1 = (debug) ? boxaCreate(n) : NULL; + naw = numaCreate(0); + nah = numaCreate(0); + for (i = 0, npairs = 0; i < n - 1; i += 2) { + boxaGetBoxGeometry(boxas, i, NULL, NULL, &bw1, &bh1); + boxaGetBoxGeometry(boxas, i + 1, NULL, NULL, &bw2, &bh2); + if (bw1 == 0 || bh1 == 0 || bw2 == 0 || bh2 == 0) + continue; + npairs++; + minw = (l_float32)L_MIN(bw1, bw2); + maxw = (l_float32)L_MAX(bw1, bw2); + minh = (l_float32)L_MIN(bh1, bh2); + w = (minw / minh > 0.5) ? minw : maxw; + numaAddNumber(naw, w); + numaAddNumber(nah, minh); + if (debug) { + box = boxCreate(0, 0, w, minh); + boxaAddBox(boxa1, box, L_COPY); + boxaAddBox(boxa1, box, L_INSERT); + } + } + if (npairs == 0) { + L_WARNING("no valid box pairs\n", procName); + numaDestroy(&naw); + numaDestroy(&nah); + boxaDestroy(&boxa1); + } + + /* Get the median value of the regularized sizes, and find + * the average absolute fractional deviation from the median. */ + numaGetMedian(naw, &medw); + numaGetMedian(nah, &medh); + numaGetMeanDevFromMedian(naw, medw, &devw); + numaGetMeanDevFromMedian(nah, medh, &devh); + *pfdevw = devw / medw; + *pfdevh = devh / medh; + if (debug) { + fprintf(stderr, "medw = %5.1f, medh = %5.1f\n", medw, medh); + fprintf(stderr, "fdevw = %6.3f, fdevh = %6.3f\n", *pfdevw, *pfdevh); + boxaPlotSizes(boxas, "input_boxa", NULL, NULL, &pix1); + boxaPlotSizes(boxa1, "regularized_boxa", NULL, NULL, &pix2); + pixDisplay(pix1, 500, 0); + pixDisplay(pix2, 500, 1000); + pixa = pixaCreate(2); + pixaAddPix(pixa, pix1, L_INSERT); + pixaAddPix(pixa, pix2, L_INSERT); + pix3 = pixaDisplayTiledInColumns(pixa, 2, 1.0, 3, 2); + lept_mkdir("lept/boxa"); + pixWrite("/tmp/lept/boxa/eval.png", pix3, IFF_PNG); + pixDisplay(pix3, 100, 100); + pixDestroy(&pix3); + pixaDestroy(&pixa); + boxaDestroy(&boxa1); + } + + numaDestroy(&naw); + numaDestroy(&nah); + return 0; +} + + +/*! + * \brief boxaReconcileSizeByMedian() + * + * \param[in] boxas containing at least 6 valid boxes + * \param[in] type L_CHECK_WIDTH, L_CHECK_HEIGHT, L_CHECK_BOTH + * \param[in] dfract threshold fraction of dimensional variation from + * median; in range (0 ... 1); typ. about 0.05. + * \param[in] sfract threshold fraction of side variation from median; + * in range (0 ... 1); typ. about 0.04. + * \param[in] factor expansion for fixed box beyond median width; + * should be near 1.0. + * \param[out] pnadelw [optional] diff from median width for boxes + * above threshold + * \param[out] pnadelh [optional] diff from median height for boxes + * above threshold + * \param[out] ratiowh [optional] ratio of median width/height of boxas + * \return boxad possibly adjusted from boxas; a copy of boxas on error + * + *
+ * Notes:
+ *      (1) The basic idea is to identify significant differences in box
+ *          dimension (either width or height) and modify the outlier boxes.
+ *      (2) %type specifies if we are reconciling the width, height or both.
+ *      (3) %dfract specifies the tolerance for different dimensions. Any
+ *          box with a fractional difference from the median size that
+ *          exceeds %dfract will be altered.
+ *      (4) %sfract specifies the tolerance for different side locations.
+ *          If a box has been marked by (3) for alteration, any side
+ *          location that differs from the median side location by
+ *          more than %sfract of the median dimension (medw or medh)
+ *          will be moved.
+ *      (5) Median width and height are found for all valid boxes (i.e.,
+ *          for all boxes with width and height > 0.
+ *          Median side locations are found separately for even and odd boxes,
+ *          using only boxes that are "inliers"; i.e., that have been
+ *          found by (3) to be within tolerance for width or height.
+ *      (6) If all box dimensions are within threshold of the median size,
+ *          just return a copy.  Otherwise, box sides of the outliers
+ *          will be adjusted.
+ *      (7) Using %sfract, sides that are sufficiently far from the median
+ *          are first moved to the median value.  Then they are moved
+ *          together (in or out) so that the final box dimension
+ *          is %factor times the median dimension.
+ *      (8) The arrays that are the initial deviation from median size
+ *          (width and height) are optionally returned.  Also optionally
+ *          returned is the median w/h asperity ratio of the input %boxas.
+ * 
+ */ +BOXA * +boxaReconcileSizeByMedian(BOXA *boxas, + l_int32 type, + l_float32 dfract, + l_float32 sfract, + l_float32 factor, + NUMA **pnadelw, + NUMA **pnadelh, + l_float32 *pratiowh) +{ +l_int32 i, n, ne, no, outfound, isvalid, ind, del, maxdel; +l_int32 medw, medh, bw, bh, left, right, top, bot; +l_int32 medleft, medlefte, medlefto, medright, medrighte, medrighto; +l_int32 medtop, medtope, medtopo, medbot, medbote, medboto; +l_float32 brat; +BOX *box; +BOXA *boxa1, *boxae, *boxao, *boxad; +NUMA *naind, *nadelw, *nadelh; + + PROCNAME("boxaReconcileSizeByMedian"); + + if (pnadelw) *pnadelw = NULL; + if (pnadelh) *pnadelh = NULL; + if (pratiowh) *pratiowh = 0.0; + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (type != L_CHECK_WIDTH && type != L_CHECK_HEIGHT && + type != L_CHECK_BOTH) { + L_WARNING("invalid type; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (dfract <= 0.0 || dfract >= 0.5) { + L_WARNING("invalid dimensional fract; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (sfract <= 0.0 || sfract >= 0.5) { + L_WARNING("invalid side fract; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + if (factor < 0.8 || factor > 1.25) + L_WARNING("factor %5.3f is typ. closer to 1.0\n", procName, factor); + if (boxaGetValidCount(boxas) < 6) { + L_WARNING("need at least 6 valid boxes; returning copy\n", procName); + return boxaCopy(boxas, L_COPY); + } + + /* If reconciling both width and height, optionally return array of + * median deviations and even/odd ratio for width measurements */ + if (type == L_CHECK_BOTH) { + boxa1 = boxaReconcileSizeByMedian(boxas, L_CHECK_WIDTH, dfract, sfract, + factor, pnadelw, NULL, pratiowh); + boxad = boxaReconcileSizeByMedian(boxa1, L_CHECK_HEIGHT, dfract, sfract, + factor, NULL, pnadelh, NULL); + boxaDestroy(&boxa1); + return boxad; + } + + n = boxaGetCount(boxas); + naind = numaCreate(n); /* outlier indicator array */ + boxae = boxaCreate(0); /* even inliers */ + boxao = boxaCreate(0); /* odd inliers */ + outfound = FALSE; + if (type == L_CHECK_WIDTH) { + boxaMedianDimensions(boxas, &medw, &medh, NULL, NULL, NULL, NULL, + &nadelw, NULL); + if (pratiowh) { + *pratiowh = (l_float32)medw / (l_float32)medh; + L_INFO("median ratio w/h = %5.3f\n", procName, *pratiowh); + } + if (pnadelw) + *pnadelw = nadelw; + else + numaDestroy(&nadelw); + + /* Check for outliers; assemble inliers */ + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxas, i, L_COPY)) == NULL) { + numaAddNumber(naind, 0); + continue; + } + boxGetGeometry(box, NULL, NULL, &bw, NULL); + brat = (l_float32)bw / (l_float32)medw; + if (brat < 1.0 - dfract || brat > 1.0 + dfract) { + outfound = TRUE; + numaAddNumber(naind, 1); + boxDestroy(&box); + } else { /* add to inliers */ + numaAddNumber(naind, 0); + if (i % 2 == 0) + boxaAddBox(boxae, box, L_INSERT); + else + boxaAddBox(boxao, box, L_INSERT); + } + } + if (!outfound) { /* nothing to do */ + numaDestroy(&naind); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + L_INFO("no width outlier boxes found\n", procName); + return boxaCopy(boxas, L_COPY); + } + + /* Get left/right parameters from inliers. Handle the case + * where there are no inliers for one of the sets. For example, + * when all the even boxes have a different dimension from + * the odd boxes, and the median arbitrarily gets assigned + * to the even boxes, there are no odd inliers; in that case, + * use the even inliers sides to decide whether to adjust + * the left or the right sides of individual outliers. */ + L_INFO("fixing width of outlier boxes\n", procName); + medlefte = medrighte = medlefto = medrighto = 0; + if ((ne = boxaGetValidCount(boxae)) > 0) + boxaGetMedianVals(boxae, &medlefte, NULL, &medrighte, NULL, + NULL, NULL); + if ((no = boxaGetValidCount(boxao)) > 0) + boxaGetMedianVals(boxao, &medlefto, NULL, &medrighto, NULL, + NULL, NULL); + if (ne == 0) { /* use odd inliers values for both */ + medlefte = medlefto; + medrighte = medrighto; + } else if (no == 0) { /* use even inliers values for both */ + medlefto = medlefte; + medrighto = medrighte; + } + + /* Adjust the left and/or right sides of outliers. + * For each box that is a dimensional outlier, consider each side. + * Any side that differs fractionally from the median value + * by more than %sfract times the median width (medw) is set to + * the median value for that side. Then both sides are moved + * an equal distance in or out to make w = %factor * medw. */ + boxad = boxaCreate(n); + maxdel = (l_int32)(sfract * medw + 0.5); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxas, i, L_COPY); + boxIsValid(box, &isvalid); + numaGetIValue(naind, i, &ind); + medleft = (i % 2 == 0) ? medlefte : medlefto; + medright = (i % 2 == 0) ? medrighte : medrighto; + if (ind == 1 && isvalid) { /* adjust sides */ + boxGetSideLocations(box, &left, &right, NULL, NULL); + if (L_ABS(left - medleft) > maxdel) left = medleft; + if (L_ABS(right - medright) > maxdel) right = medright; + del = (l_int32)(factor * medw - (right - left)) / 2; + boxSetSide(box, L_SET_LEFT, left - del, 0); + boxSetSide(box, L_SET_RIGHT, right + del, 0); + } + boxaAddBox(boxad, box, L_INSERT); + } + } else { /* L_CHECK_HEIGHT */ + boxaMedianDimensions(boxas, &medw, &medh, NULL, NULL, NULL, NULL, + NULL, &nadelh); + if (pratiowh) { + *pratiowh = (l_float32)medw / (l_float32)medh; + L_INFO("median ratio w/h = %5.3f\n", procName, *pratiowh); + } + if (pnadelh) + *pnadelh = nadelh; + else + numaDestroy(&nadelh); + + /* Check for outliers; assemble inliers */ + for (i = 0; i < n; i++) { + if ((box = boxaGetValidBox(boxas, i, L_COPY)) == NULL) { + numaAddNumber(naind, 0); + continue; + } + boxGetGeometry(box, NULL, NULL, NULL, &bh); + brat = (l_float32)bh / (l_float32)medh; + if (brat < 1.0 - dfract || brat > 1.0 + dfract) { + outfound = TRUE; + numaAddNumber(naind, 1); + boxDestroy(&box); + } else { /* add to inliers */ + numaAddNumber(naind, 0); + if (i % 2 == 0) + boxaAddBox(boxae, box, L_INSERT); + else + boxaAddBox(boxao, box, L_INSERT); + } + } + if (!outfound) { /* nothing to do */ + numaDestroy(&naind); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + L_INFO("no height outlier boxes found\n", procName); + return boxaCopy(boxas, L_COPY); + } + + /* Get top/bot parameters from inliers. Handle the case + * where there are no inliers for one of the sets. For example, + * when all the even boxes have a different dimension from + * the odd boxes, and the median arbitrarily gets assigned + * to the even boxes, there are no odd inliers; in that case, + * use the even inlier sides to decide whether to adjust + * the top or the bottom sides of individual outliers. */ + L_INFO("fixing height of outlier boxes\n", procName); + medlefte = medtope = medbote = medtopo = medboto = 0; + if ((ne = boxaGetValidCount(boxae)) > 0) + boxaGetMedianVals(boxae, NULL, &medtope, NULL, &medbote, + NULL, NULL); + if ((no = boxaGetValidCount(boxao)) > 0) + boxaGetMedianVals(boxao, NULL, &medtopo, NULL, &medboto, + NULL, NULL); + if (ne == 0) { /* use odd inliers values for both */ + medtope = medtopo; + medbote = medboto; + } else if (no == 0) { /* use even inliers values for both */ + medtopo = medtope; + medboto = medbote; + } + + /* Adjust the top and/or bottom sides of outliers. + * For each box that is a dimensional outlier, consider each side. + * Any side that differs fractionally from the median value + * by more than %sfract times the median height (medh) is + * set to the median value for that that side. Then both + * sides are moved an equal distance in or out to make + * h = %factor * medh). */ + boxad = boxaCreate(n); + maxdel = (l_int32)(sfract * medh + 0.5); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxas, i, L_COPY); + boxIsValid(box, &isvalid); + numaGetIValue(naind, i, &ind); + medtop = (i % 2 == 0) ? medtope : medtopo; + medbot = (i % 2 == 0) ? medbote : medboto; + if (ind == 1 && isvalid) { /* adjust sides */ + boxGetSideLocations(box, NULL, NULL, &top, &bot); + if (L_ABS(top - medtop) > maxdel) top = medtop; + if (L_ABS(bot - medbot) > maxdel) bot = medbot; + del = (l_int32)(factor * medh - (bot - top)) / 2; /* typ > 0 */ + boxSetSide(box, L_SET_TOP, L_MAX(0, top - del), 0); + boxSetSide(box, L_SET_BOT, bot + del, 0); + } + boxaAddBox(boxad, box, L_INSERT); + } + } + numaDestroy(&naind); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return boxad; +} + + +/*! + * \brief boxaPlotSides() + * + * \param[in] boxa source boxa + * \param[in] plotname [optional], can be NULL + * \param[out] pnal [optional] na of left sides + * \param[out] pnat [optional] na of top sides + * \param[out] pnar [optional] na of right sides + * \param[out] pnab [optional] na of bottom sides + * \param[out] ppixd [optional] pix of the output plot + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This debugging function shows the progression of the four
+ *          sides in the boxa.  There must be at least 2 boxes.
+ *      (2) If there are invalid boxes (e.g., if only even or odd
+ *          indices have valid boxes), this will fill them with the
+ *          nearest valid box before plotting.
+ *      (3) The plotfiles are put in /tmp/lept/plots/, and are named
+ *          either with %plotname or, if NULL, a default name.  If
+ *          %plotname is used, make sure is has no whitespace characters.
+ * 
+ */ +l_ok +boxaPlotSides(BOXA *boxa, + const char *plotname, + NUMA **pnal, + NUMA **pnat, + NUMA **pnar, + NUMA **pnab, + PIX **ppixd) +{ +char buf[128], titlebuf[128]; +char *dataname; +static l_int32 plotid = 0; +l_int32 n, i, w, h, left, top, right, bot; +l_float32 med, dev; +BOXA *boxat; +GPLOT *gplot; +NUMA *nal, *nat, *nar, *nab; + + PROCNAME("boxaPlotSides"); + + if (pnal) *pnal = NULL; + if (pnat) *pnat = NULL; + if (pnar) *pnar = NULL; + if (pnab) *pnab = NULL; + if (ppixd) *ppixd = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if ((n = boxaGetCount(boxa)) < 2) + return ERROR_INT("less than 2 boxes", procName, 1); + + boxat = boxaFillSequence(boxa, L_USE_ALL_BOXES, 0); + + /* Build the numas for each side */ + nal = numaCreate(n); + nat = numaCreate(n); + nar = numaCreate(n); + nab = numaCreate(n); + + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxat, i, &left, &top, &w, &h); + right = left + w - 1; + bot = top + h - 1; + numaAddNumber(nal, left); + numaAddNumber(nat, top); + numaAddNumber(nar, right); + numaAddNumber(nab, bot); + } + boxaDestroy(&boxat); + + lept_mkdir("lept/plots"); + if (plotname) { + snprintf(buf, sizeof(buf), "/tmp/lept/plots/sides.%s", plotname); + snprintf(titlebuf, sizeof(titlebuf), "%s: Box sides vs. box index", + plotname); + } else { + snprintf(buf, sizeof(buf), "/tmp/lept/plots/sides.%d", plotid++); + snprintf(titlebuf, sizeof(titlebuf), "Box sides vs. box index"); + } + gplot = gplotCreate(buf, GPLOT_PNG, titlebuf, + "box index", "side location"); + gplotAddPlot(gplot, NULL, nal, GPLOT_LINES, "left side"); + gplotAddPlot(gplot, NULL, nat, GPLOT_LINES, "top side"); + gplotAddPlot(gplot, NULL, nar, GPLOT_LINES, "right side"); + gplotAddPlot(gplot, NULL, nab, GPLOT_LINES, "bottom side"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + + if (ppixd) { + stringCat(buf, sizeof(buf), ".png"); + *ppixd = pixRead(buf); + dataname = (plotname) ? stringNew(plotname) : stringNew("no_name"); + numaGetMedian(nal, &med); + numaGetMeanDevFromMedian(nal, med, &dev); + fprintf(stderr, "%s left: med = %7.3f, meandev = %7.3f\n", + dataname, med, dev); + numaGetMedian(nat, &med); + numaGetMeanDevFromMedian(nat, med, &dev); + fprintf(stderr, "%s top: med = %7.3f, meandev = %7.3f\n", + dataname, med, dev); + numaGetMedian(nar, &med); + numaGetMeanDevFromMedian(nar, med, &dev); + fprintf(stderr, "%s right: med = %7.3f, meandev = %7.3f\n", + dataname, med, dev); + numaGetMedian(nab, &med); + numaGetMeanDevFromMedian(nab, med, &dev); + fprintf(stderr, "%s bot: med = %7.3f, meandev = %7.3f\n", + dataname, med, dev); + LEPT_FREE(dataname); + } + + if (pnal) + *pnal = nal; + else + numaDestroy(&nal); + if (pnat) + *pnat = nat; + else + numaDestroy(&nat); + if (pnar) + *pnar = nar; + else + numaDestroy(&nar); + if (pnab) + *pnab = nab; + else + numaDestroy(&nab); + return 0; +} + + +/*! + * \brief boxaPlotSizes() + * + * \param[in] boxa source boxa + * \param[in] plotname [optional], can be NULL + * \param[out] pnaw [optional] na of widths + * \param[out] pnah [optional] na of heights + * \param[out] ppixd [optional] pix of the output plot + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This debugging function shows the progression of box width
+ *          and height in the boxa.  There must be at least 2 boxes.
+ *      (2) If there are invalid boxes (e.g., if only even or odd
+ *          indices have valid boxes), this will fill them with the
+ *          nearest valid box before plotting.
+ *      (3) The plotfiles are put in /tmp/lept/plots/, and are named
+ *          either with %plotname or, if NULL, a default name.  If
+ *          %plotname is used, make sure is has no whitespace characters.
+ * 
+ */ +l_ok +boxaPlotSizes(BOXA *boxa, + const char *plotname, + NUMA **pnaw, + NUMA **pnah, + PIX **ppixd) +{ +char buf[128], titlebuf[128]; +static l_int32 plotid = 0; +l_int32 n, i, w, h; +BOXA *boxat; +GPLOT *gplot; +NUMA *naw, *nah; + + PROCNAME("boxaPlotSizes"); + + if (pnaw) *pnaw = NULL; + if (pnah) *pnah = NULL; + if (ppixd) *ppixd = NULL; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if ((n = boxaGetCount(boxa)) < 2) + return ERROR_INT("less than 2 boxes", procName, 1); + + boxat = boxaFillSequence(boxa, L_USE_ALL_BOXES, 0); + + /* Build the numas for the width and height */ + naw = numaCreate(n); + nah = numaCreate(n); + + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxat, i, NULL, NULL, &w, &h); + numaAddNumber(naw, w); + numaAddNumber(nah, h); + } + boxaDestroy(&boxat); + + lept_mkdir("lept/plots"); + if (plotname) { + snprintf(buf, sizeof(buf), "/tmp/lept/plots/size.%s", plotname); + snprintf(titlebuf, sizeof(titlebuf), "%s: Box size vs. box index", + plotname); + } else { + snprintf(buf, sizeof(buf), "/tmp/lept/plots/size.%d", plotid++); + snprintf(titlebuf, sizeof(titlebuf), "Box size vs. box index"); + } + gplot = gplotCreate(buf, GPLOT_PNG, titlebuf, + "box index", "box dimension"); + gplotAddPlot(gplot, NULL, naw, GPLOT_LINES, "width"); + gplotAddPlot(gplot, NULL, nah, GPLOT_LINES, "height"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + + if (ppixd) { + stringCat(buf, sizeof(buf), ".png"); + *ppixd = pixRead(buf); + } + + if (pnaw) + *pnaw = naw; + else + numaDestroy(&naw); + if (pnah) + *pnah = nah; + else + numaDestroy(&nah); + return 0; +} + + +/*! + * \brief boxaFillSequence() + * + * \param[in] boxas with at least 3 boxes + * \param[in] useflag L_USE_ALL_BOXES, L_USE_SAME_PARITY_BOXES + * \param[in] debug 1 for debug output + * \return boxad filled boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This simple function replaces invalid boxes with a copy of
+ *          the nearest valid box, selected from either the entire
+ *          sequence (L_USE_ALL_BOXES) or from the boxes with the
+ *          same parity (L_USE_SAME_PARITY_BOXES).  It returns a new boxa.
+ *      (2) This is useful if you expect boxes in the sequence to
+ *          vary slowly with index.
+ * 
+ */ +BOXA * +boxaFillSequence(BOXA *boxas, + l_int32 useflag, + l_int32 debug) +{ +l_int32 n, nv; +BOXA *boxae, *boxao, *boxad; + + PROCNAME("boxaFillSequence"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (useflag != L_USE_ALL_BOXES && useflag != L_USE_SAME_PARITY_BOXES) + return (BOXA *)ERROR_PTR("invalid useflag", procName, NULL); + + n = boxaGetCount(boxas); + nv = boxaGetValidCount(boxas); + if (n == nv) + return boxaCopy(boxas, L_COPY); /* all valid */ + if (debug) + L_INFO("%d valid boxes, %d invalid boxes\n", procName, nv, n - nv); + if (useflag == L_USE_SAME_PARITY_BOXES && n < 3) { + L_WARNING("n < 3; some invalid\n", procName); + return boxaCopy(boxas, L_COPY); + } + + if (useflag == L_USE_ALL_BOXES) { + boxad = boxaCopy(boxas, L_COPY); + boxaFillAll(boxad); + } else { + boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); + boxaFillAll(boxae); + boxaFillAll(boxao); + boxad = boxaMergeEvenOdd(boxae, boxao, 0); + boxaDestroy(&boxae); + boxaDestroy(&boxao); + } + + nv = boxaGetValidCount(boxad); + if (n != nv) + L_WARNING("there are still %d invalid boxes\n", procName, n - nv); + + return boxad; +} + + +/*! + * \brief boxaFillAll() + * + * \param[in] boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This static function replaces every invalid box with the
+ *          nearest valid box.  If there are no valid boxes, it
+ *          issues a warning.
+ * 
+ */ +static l_int32 +boxaFillAll(BOXA *boxa) +{ +l_int32 n, nv, i, j, spandown, spanup; +l_int32 *indic; +BOX *box, *boxt; + + PROCNAME("boxaFillAll"); + + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + n = boxaGetCount(boxa); + nv = boxaGetValidCount(boxa); + if (n == nv) return 0; + if (nv == 0) { + L_WARNING("no valid boxes out of %d boxes\n", procName, n); + return 0; + } + + /* Make indicator array for valid boxes */ + if ((indic = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) + return ERROR_INT("indic not made", procName, 1); + for (i = 0; i < n; i++) { + box = boxaGetValidBox(boxa, i, L_CLONE); + if (box) + indic[i] = 1; + boxDestroy(&box); + } + + /* Replace invalid boxes with the nearest valid one */ + for (i = 0; i < n; i++) { + box = boxaGetValidBox(boxa, i, L_CLONE); + if (!box) { + spandown = spanup = 10000000; + for (j = i - 1; j >= 0; j--) { + if (indic[j] == 1) { + spandown = i - j; + break; + } + } + for (j = i + 1; j < n; j++) { + if (indic[j] == 1) { + spanup = j - i; + break; + } + } + if (spandown < spanup) + boxt = boxaGetBox(boxa, i - spandown, L_COPY); + else + boxt = boxaGetBox(boxa, i + spanup, L_COPY); + boxaReplaceBox(boxa, i, boxt); + } + boxDestroy(&box); + } + + LEPT_FREE(indic); + return 0; +} + + +/*! + * \brief boxaSizeVariation() + * + * \param[in] boxa at least 4 boxes + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT + * \param[out] pdel_evenodd [optional] average absolute value of + * (even - odd) size pairs + * \param[out] prms_even [optional] rms deviation of even boxes + * \param[out] prms_odd [optional] rms deviation of odd boxes + * \param[out] prms_all [optional] rms deviation of all boxes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives several measures of the smoothness of either the
+ *          width or height of a sequence of boxes.
+ *          See boxaMedianDimensions() for some other measures.
+ *      (2) Statistics can be found separately for even and odd boxes.
+ *          Additionally, the average pair-wise difference between
+ *          adjacent even and odd boxes can be returned.
+ *      (3) The use case is bounding boxes for scanned page images,
+ *          where ideally the sizes should have little variance.
+ * 
+ */ +l_ok +boxaSizeVariation(BOXA *boxa, + l_int32 type, + l_float32 *pdel_evenodd, + l_float32 *prms_even, + l_float32 *prms_odd, + l_float32 *prms_all) +{ +l_int32 n, ne, no, nmin, vale, valo, i; +l_float32 sum; +BOXA *boxae, *boxao; +NUMA *nae, *nao, *na_all; + + PROCNAME("boxaSizeVariation"); + + if (pdel_evenodd) *pdel_evenodd = 0.0; + if (prms_even) *prms_even = 0.0; + if (prms_odd) *prms_odd = 0.0; + if (prms_all) *prms_all = 0.0; + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT) + return ERROR_INT("invalid type", procName, 1); + if (!pdel_evenodd && !prms_even && !prms_odd && !prms_all) + return ERROR_INT("nothing to do", procName, 1); + n = boxaGetCount(boxa); + if (n < 4) + return ERROR_INT("too few boxes", procName, 1); + + boxaSplitEvenOdd(boxa, 0, &boxae, &boxao); + ne = boxaGetCount(boxae); + no = boxaGetCount(boxao); + nmin = L_MIN(ne, no); + if (nmin == 0) { + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return ERROR_INT("either no even or no odd boxes", procName, 1); + } + + if (type == L_SELECT_WIDTH) { + boxaGetSizes(boxae, &nae, NULL); + boxaGetSizes(boxao, &nao, NULL); + boxaGetSizes(boxa, &na_all, NULL); + } else { /* L_SELECT_HEIGHT) */ + boxaGetSizes(boxae, NULL, &nae); + boxaGetSizes(boxao, NULL, &nao); + boxaGetSizes(boxa, NULL, &na_all); + } + + if (pdel_evenodd) { + sum = 0.0; + for (i = 0; i < nmin; i++) { + numaGetIValue(nae, i, &vale); + numaGetIValue(nao, i, &valo); + sum += L_ABS(vale - valo); + } + *pdel_evenodd = sum / nmin; + } + if (prms_even) + numaSimpleStats(nae, 0, -1, NULL, NULL, prms_even); + if (prms_odd) + numaSimpleStats(nao, 0, -1, NULL, NULL, prms_odd); + if (prms_all) + numaSimpleStats(na_all, 0, -1, NULL, NULL, prms_all); + + boxaDestroy(&boxae); + boxaDestroy(&boxao); + numaDestroy(&nae); + numaDestroy(&nao); + numaDestroy(&na_all); + return 0; +} + + +/*! + * \brief boxaMedianDimensions() + * + * \param[in] boxas containing at least 3 valid boxes in even and odd + * \param[out] pmedw [optional] median width of all boxes + * \param[out] pmedh [optional] median height of all boxes + * \param[out] pmedwe [optional] median width of even boxes + * \param[out] pmedwo [optional] median width of odd boxes + * \param[out] pmedhe [optional] median height of even boxes + * \param[out] pmedho [optional] median height of odd boxes + * \param[out] pnadelw [optional] width diff of each box from median + * \param[out] pnadelh [optional] height diff of each box from median + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This provides information that (1) allows identification of
+ *          boxes that have unusual (outlier) width or height, and (2) can
+ *          be used to regularize the sizes of the outlier boxes, assuming
+ *          that the boxes satisfy a fairly regular sequence and should
+ *          mostly have the same width and height.
+ *      (2) This finds the median width and height, as well as separate
+ *          median widths and heights of even and odd boxes.  It also
+ *          generates arrays that give the difference in width and height
+ *          of each box from the median, which can be used to correct
+ *          individual boxes.
+ *      (3) All return values are optional.
+ * 
+ */ +l_ok +boxaMedianDimensions(BOXA *boxas, + l_int32 *pmedw, + l_int32 *pmedh, + l_int32 *pmedwe, + l_int32 *pmedwo, + l_int32 *pmedhe, + l_int32 *pmedho, + NUMA **pnadelw, + NUMA **pnadelh) +{ +l_int32 i, n, bw, bh, medw, medh, medwe, medwo, medhe, medho; +BOXA *boxae, *boxao; +NUMA *nadelw, *nadelh; + + PROCNAME("boxaMedianDimensions"); + + if (pmedw) *pmedw = 0; + if (pmedh) *pmedh = 0; + if (pmedwe) *pmedwe= 0; + if (pmedwo) *pmedwo= 0; + if (pmedhe) *pmedhe= 0; + if (pmedho) *pmedho= 0; + if (pnadelw) *pnadelw = NULL; + if (pnadelh) *pnadelh = NULL; + if (!boxas) + return ERROR_INT("boxas not defined", procName, 1); + if (boxaGetValidCount(boxas) < 6) + return ERROR_INT("need at least 6 valid boxes", procName, 1); + + /* Require at least 3 valid boxes of both types */ + boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); + if (boxaGetValidCount(boxae) < 3 || boxaGetValidCount(boxao) < 3) { + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return ERROR_INT("don't have 3+ valid boxes of each type", procName, 1); + } + + /* Get the relevant median widths and heights */ + boxaGetMedianVals(boxas, NULL, NULL, NULL, NULL, &medw, &medh); + boxaGetMedianVals(boxae, NULL, NULL, NULL, NULL, &medwe, &medhe); + boxaGetMedianVals(boxao, NULL, NULL, NULL, NULL, &medwo, &medho); + if (pmedw) *pmedw = medw; + if (pmedh) *pmedh = medh; + if (pmedwe) *pmedwe = medwe; + if (pmedwo) *pmedwo = medwo; + if (pmedhe) *pmedhe = medhe; + if (pmedho) *pmedho = medho; + + /* Find the variation from median dimension for each box */ + n = boxaGetCount(boxas); + nadelw = numaCreate(n); + nadelh = numaCreate(n); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxas, i, NULL, NULL, &bw, &bh); + if (bw == 0 || bh == 0) { /* invalid box */ + numaAddNumber(nadelw, 0); + numaAddNumber(nadelh, 0); + } else { + numaAddNumber(nadelw, bw - medw); + numaAddNumber(nadelh, bh - medh); + } + } + if (pnadelw) + *pnadelw = nadelw; + else + numaDestroy(&nadelw); + if (pnadelh) + *pnadelh = nadelh; + else + numaDestroy(&nadelh); + + boxaDestroy(&boxae); + boxaDestroy(&boxao); + return 0; +} + diff --git a/3rdparty/hgOCR/leptonica/bytearray.c b/3rdparty/hgOCR/leptonica/bytearray.c new file mode 100644 index 00000000..62a91842 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/bytearray.c @@ -0,0 +1,637 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file bytearray.c + *
+ *
+ *   Functions for handling byte arrays, in analogy with C++ 'strings'
+ *
+ *      Creation, copy, clone, destruction
+ *           L_BYTEA      *l_byteaCreate()
+ *           L_BYTEA      *l_byteaInitFromMem()
+ *           L_BYTEA      *l_byteaInitFromFile()
+ *           L_BYTEA      *l_byteaInitFromStream()
+ *           L_BYTEA      *l_byteaCopy()
+ *           void          l_byteaDestroy()
+ *
+ *      Accessors
+ *           size_t        l_byteaGetSize()
+ *           l_uint8      *l_byteaGetData()
+ *           l_uint8      *l_byteaCopyData()
+ *
+ *      Appending
+ *           l_int32       l_byteaAppendData()
+ *           l_int32       l_byteaAppendString()
+ *           static l_int32  l_byteaExtendArrayToSize()
+ *
+ *      Join/Split
+ *           l_int32       l_byteaJoin()
+ *           l_int32       l_byteaSplit()
+ *
+ *      Search
+ *           l_int32       l_byteaFindEachSequence()
+ *
+ *      Output to file
+ *           l_int32       l_byteaWrite()
+ *           l_int32       l_byteaWriteStream()
+ *
+ *   The internal data array is always null-terminated, for ease of use
+ *   in the event that it is an ascii string without null bytes.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on array size */ +static const l_uint32 MaxArraySize = 1000000000; /* 10^9 bytes */ +static const l_int32 InitialArraySize = 200; /*!< n'importe quoi */ + + /* Static function */ +static l_int32 l_byteaExtendArrayToSize(L_BYTEA *ba, size_t size); + + +/*---------------------------------------------------------------------* + * Creation, copy, clone, destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaCreate() + * + * \param[in] nbytes determines initial size of data array + * \return l_bytea, or NULL on error + * + *
+ * Notes:
+ *      (1) The allocated array is n + 1 bytes.  This allows room
+ *          for null termination.
+ * 
+ */ +L_BYTEA * +l_byteaCreate(size_t nbytes) +{ +L_BYTEA *ba; + + PROCNAME("l_byteaCreate"); + + if (nbytes <= 0 || nbytes > MaxArraySize) + nbytes = InitialArraySize; + ba = (L_BYTEA *)LEPT_CALLOC(1, sizeof(L_BYTEA)); + ba->data = (l_uint8 *)LEPT_CALLOC(nbytes + 1, sizeof(l_uint8)); + if (!ba->data) { + l_byteaDestroy(&ba); + return (L_BYTEA *)ERROR_PTR("ba array not made", procName, NULL); + } + ba->nalloc = nbytes + 1; + ba->refcount = 1; + return ba; +} + + +/*! + * \brief l_byteaInitFromMem() + * + * \param[in] data to be copied to the array + * \param[in] size amount of data + * \return l_bytea, or NULL on error + */ +L_BYTEA * +l_byteaInitFromMem(const l_uint8 *data, + size_t size) +{ +L_BYTEA *ba; + + PROCNAME("l_byteaInitFromMem"); + + if (!data) + return (L_BYTEA *)ERROR_PTR("data not defined", procName, NULL); + if (size <= 0) + return (L_BYTEA *)ERROR_PTR("no bytes to initialize", procName, NULL); + if (size > MaxArraySize) + return (L_BYTEA *)ERROR_PTR("size is too big", procName, NULL); + + if ((ba = l_byteaCreate(size)) == NULL) + return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); + memcpy(ba->data, data, size); + ba->size = size; + return ba; +} + + +/*! + * \brief l_byteaInitFromFile() + * + * \param[in] fname + * \return l_bytea, or NULL on error + */ +L_BYTEA * +l_byteaInitFromFile(const char *fname) +{ +FILE *fp; +L_BYTEA *ba; + + PROCNAME("l_byteaInitFromFile"); + + if (!fname) + return (L_BYTEA *)ERROR_PTR("fname not defined", procName, NULL); + + if ((fp = fopenReadStream(fname)) == NULL) + return (L_BYTEA *)ERROR_PTR("file stream not opened", procName, NULL); + ba = l_byteaInitFromStream(fp); + fclose(fp); + if (!ba) + return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); + return ba; +} + + +/*! + * \brief l_byteaInitFromStream() + * + * \param[in] fp file stream + * \return l_bytea, or NULL on error + */ +L_BYTEA * +l_byteaInitFromStream(FILE *fp) +{ +l_uint8 *data; +size_t nbytes; +L_BYTEA *ba; + + PROCNAME("l_byteaInitFromStream"); + + if (!fp) + return (L_BYTEA *)ERROR_PTR("stream not defined", procName, NULL); + + if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) + return (L_BYTEA *)ERROR_PTR("data not read", procName, NULL); + if ((ba = l_byteaCreate(nbytes)) == NULL) { + LEPT_FREE(data); + return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); + } + memcpy(ba->data, data, nbytes); + ba->size = nbytes; + LEPT_FREE(data); + return ba; +} + + +/*! + * \brief l_byteaCopy() + * + * \param[in] bas source lba + * \param[in] copyflag L_COPY, L_CLONE + * \return clone or copy of bas, or NULL on error + * + *
+ * Notes:
+ *      (1) If cloning, up the refcount and return a ptr to %bas.
+ * 
+ */ +L_BYTEA * +l_byteaCopy(L_BYTEA *bas, + l_int32 copyflag) +{ + PROCNAME("l_byteaCopy"); + + if (!bas) + return (L_BYTEA *)ERROR_PTR("bas not defined", procName, NULL); + + if (copyflag == L_CLONE) { + bas->refcount++; + return bas; + } + + return l_byteaInitFromMem(bas->data, bas->size); +} + + +/*! + * \brief l_byteaDestroy() + * + * \param[in,out] pba will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the lba.
+ *      (2) Always nulls the input ptr.
+ *      (3) If the data has been previously removed, the lba will
+ *          have been nulled, so this will do nothing.
+ * 
+ */ +void +l_byteaDestroy(L_BYTEA **pba) +{ +L_BYTEA *ba; + + PROCNAME("l_byteaDestroy"); + + if (pba == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((ba = *pba) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the lba. */ + ba->refcount--; + if (ba->refcount <= 0) { + if (ba->data) LEPT_FREE(ba->data); + LEPT_FREE(ba); + } + + *pba = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaGetSize() + * + * \param[in] ba + * \return size of stored byte array, or 0 on error + */ +size_t +l_byteaGetSize(L_BYTEA *ba) +{ + PROCNAME("l_byteaGetSize"); + + if (!ba) + return ERROR_INT("ba not defined", procName, 0); + return ba->size; +} + + +/*! + * \brief l_byteaGetData() + * + * \param[in] ba + * \param[out] psize size of data in lba + * \return ptr to existing data array, or NULL on error + * + *
+ * Notes:
+ *      (1) The returned ptr is owned by %ba.  Do not free it!
+ * 
+ */ +l_uint8 * +l_byteaGetData(L_BYTEA *ba, + size_t *psize) +{ + PROCNAME("l_byteaGetData"); + + if (!ba) + return (l_uint8 *)ERROR_PTR("ba not defined", procName, NULL); + if (!psize) + return (l_uint8 *)ERROR_PTR("&size not defined", procName, NULL); + + *psize = ba->size; + return ba->data; +} + + +/*! + * \brief l_byteaCopyData() + * + * \param[in] ba + * \param[out] psize size of data in lba + * \return copy of data in use in the data array, or NULL on error. + * + *
+ * Notes:
+ *      (1) The returned data is owned by the caller.  The input %ba
+ *          still owns the original data array.
+ * 
+ */ +l_uint8 * +l_byteaCopyData(L_BYTEA *ba, + size_t *psize) +{ +l_uint8 *data; + + PROCNAME("l_byteaCopyData"); + + if (!psize) + return (l_uint8 *)ERROR_PTR("&size not defined", procName, NULL); + *psize = 0; + if (!ba) + return (l_uint8 *)ERROR_PTR("ba not defined", procName, NULL); + + data = l_byteaGetData(ba, psize); + return l_binaryCopy(data, *psize); +} + + +/*---------------------------------------------------------------------* + * Appending * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaAppendData() + * + * \param[in] ba + * \param[in] newdata byte array to be appended + * \param[in] newbytes size of data array + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaAppendData(L_BYTEA *ba, + const l_uint8 *newdata, + size_t newbytes) +{ +size_t size, nalloc, reqsize; + + PROCNAME("l_byteaAppendData"); + + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + if (!newdata) + return ERROR_INT("newdata not defined", procName, 1); + + size = l_byteaGetSize(ba); + reqsize = size + newbytes + 1; + nalloc = ba->nalloc; + if (nalloc < reqsize) + l_byteaExtendArrayToSize(ba, 2 * reqsize); + + memcpy(ba->data + size, newdata, newbytes); + ba->size += newbytes; + return 0; +} + + +/*! + * \brief l_byteaAppendString() + * + * \param[in] ba + * \param[in] str null-terminated string to be appended + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaAppendString(L_BYTEA *ba, + const char *str) +{ +size_t size, len, nalloc, reqsize; + + PROCNAME("l_byteaAppendString"); + + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + if (!str) + return ERROR_INT("str not defined", procName, 1); + + size = l_byteaGetSize(ba); + len = strlen(str); + reqsize = size + len + 1; + nalloc = ba->nalloc; + if (nalloc < reqsize) + l_byteaExtendArrayToSize(ba, 2 * reqsize); + + memcpy(ba->data + size, str, len); + ba->size += len; + return 0; +} + + +/*! + * \brief l_byteaExtendArrayToSize() + * + * \param[in] ba + * \param[in] size new size of lba data array + * \return 0 if OK; 1 on error + */ +static l_int32 +l_byteaExtendArrayToSize(L_BYTEA *ba, + size_t size) +{ + PROCNAME("l_byteaExtendArrayToSize"); + + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + + if (size > ba->nalloc) { + if ((ba->data = + (l_uint8 *)reallocNew((void **)&ba->data, ba->nalloc, size)) + == NULL) + return ERROR_INT("new array not returned", procName, 1); + ba->nalloc = size; + } + return 0; +} + + +/*---------------------------------------------------------------------* + * String join/split * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaJoin() + * + * \param[in] ba1 + * \param[in,out] pba2 data array is added to the one in ba1; + * then ba2 is destroyed and its pointer is nulled. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is a no-op, not an error, for %ba2 to be null.
+ * 
+ */ +l_ok +l_byteaJoin(L_BYTEA *ba1, + L_BYTEA **pba2) +{ +l_uint8 *data2; +size_t nbytes2; +L_BYTEA *ba2; + + PROCNAME("l_byteaJoin"); + + if (!ba1) + return ERROR_INT("ba1 not defined", procName, 1); + if (!pba2) + return ERROR_INT("&ba2 not defined", procName, 1); + if ((ba2 = *pba2) == NULL) return 0; + + data2 = l_byteaGetData(ba2, &nbytes2); + l_byteaAppendData(ba1, data2, nbytes2); + + l_byteaDestroy(pba2); + return 0; +} + + +/*! + * \brief l_byteaSplit() + * + * \param[in] ba1 lba to split; array bytes nulled beyond the split loc + * \param[in] splitloc location in ba1 to split; ba2 begins there + * \param[out] pba2 with data starting at splitloc + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaSplit(L_BYTEA *ba1, + size_t splitloc, + L_BYTEA **pba2) +{ +l_uint8 *data1; +size_t nbytes1, nbytes2; + + PROCNAME("l_byteaSplit"); + + if (!pba2) + return ERROR_INT("&ba2 not defined", procName, 1); + *pba2 = NULL; + if (!ba1) + return ERROR_INT("ba1 not defined", procName, 1); + + data1 = l_byteaGetData(ba1, &nbytes1); + if (splitloc >= nbytes1) + return ERROR_INT("splitloc invalid", procName, 1); + nbytes2 = nbytes1 - splitloc; + + /* Make the new lba */ + *pba2 = l_byteaInitFromMem(data1 + splitloc, nbytes2); + + /* Null the removed bytes in the input lba */ + memset(data1 + splitloc, 0, nbytes2); + ba1->size = splitloc; + return 0; +} + + +/*---------------------------------------------------------------------* + * Search * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaFindEachSequence() + * + * \param[in] ba + * \param[in] sequence subarray of bytes to find in data + * \param[in] seqlen length of sequence, in bytes + * \param[out] pda byte positions of each occurrence of %sequence + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaFindEachSequence(L_BYTEA *ba, + const l_uint8 *sequence, + size_t seqlen, + L_DNA **pda) +{ +l_uint8 *data; +size_t size; + + PROCNAME("l_byteaFindEachSequence"); + + if (!pda) + return ERROR_INT("&da not defined", procName, 1); + *pda = NULL; + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + if (!sequence) + return ERROR_INT("sequence not defined", procName, 1); + + data = l_byteaGetData(ba, &size); + *pda = arrayFindEachSequence(data, size, sequence, seqlen); + return 0; +} + + +/*---------------------------------------------------------------------* + * Output to file * + *---------------------------------------------------------------------*/ +/*! + * \brief l_byteaWrite() + * + * \param[in] fname output file + * \param[in] ba + * \param[in] startloc first byte to output + * \param[in] nbytes number of bytes to write; use 0 to write to + * the end of the data array + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaWrite(const char *fname, + L_BYTEA *ba, + size_t startloc, + size_t nbytes) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("l_byteaWrite"); + + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + + if ((fp = fopenWriteStream(fname, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = l_byteaWriteStream(fp, ba, startloc, nbytes); + fclose(fp); + return ret; +} + + +/*! + * \brief l_byteaWriteStream() + * + * \param[in] fp file stream opened for binary write + * \param[in] ba + * \param[in] startloc first byte to output + * \param[in] nbytes number of bytes to write; use 0 to write to + * the end of the data array + * \return 0 if OK, 1 on error + */ +l_ok +l_byteaWriteStream(FILE *fp, + L_BYTEA *ba, + size_t startloc, + size_t nbytes) +{ +l_uint8 *data; +size_t size, maxbytes; + + PROCNAME("l_byteaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!ba) + return ERROR_INT("ba not defined", procName, 1); + + data = l_byteaGetData(ba, &size); + if (startloc >= size) + return ERROR_INT("invalid startloc", procName, 1); + maxbytes = size - startloc; + nbytes = (nbytes == 0) ? maxbytes : L_MIN(nbytes, maxbytes); + + fwrite(data + startloc, 1, nbytes, fp); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/ccbord.c b/3rdparty/hgOCR/leptonica/ccbord.c new file mode 100644 index 00000000..525d9229 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ccbord.c @@ -0,0 +1,2617 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file ccbord.c + *
+ *
+ *     CCBORDA and CCBORD creation and destruction
+ *         CCBORDA         *ccbaCreate()
+ *         void            *ccbaDestroy()
+ *         CCBORD          *ccbCreate()
+ *         void            *ccbDestroy()
+ *
+ *     CCBORDA addition
+ *         l_int32          ccbaAddCcb()
+ *         static l_int32   ccbaExtendArray()
+ *
+ *     CCBORDA accessors
+ *         l_int32          ccbaGetCount()
+ *         l_int32          ccbaGetCcb()
+ *
+ *     Top-level border-finding routines
+ *         CCBORDA         *pixGetAllCCBorders()
+ *         static CCBORD   *pixGetCCBorders()
+ *         PTAA            *pixGetOuterBordersPtaa()
+ *         static PTA      *pixGetOuterBorderPta()
+ *
+ *     Lower-level border location routines
+ *         PTAA            *pixGetOuterBorder()
+ *         static l_int32   pixGetHoleBorder()
+ *         static l_int32   findNextBorderPixel()
+ *         static void      locateOutsideSeedPixel()
+ *
+ *     Border conversions
+ *         l_int32          ccbaGenerateGlobalLocs()
+ *         l_int32          ccbaGenerateStepChains()
+ *         l_int32          ccbaStepChainsToPixCoords()
+ *         l_int32          ccbaGenerateSPGlobalLocs()
+ *
+ *     Conversion to single path
+ *         l_int32          ccbaGenerateSinglePath()
+ *         PTA             *getCutPathForHole()
+ *
+ *     Border and full image rendering
+ *         PIX             *ccbaDisplayBorder()
+ *         PIX             *ccbaDisplaySPBorder()
+ *         PIX             *ccbaDisplayImage1()
+ *         PIX             *ccbaDisplayImage2()
+ *
+ *     Serialize for I/O
+ *         l_int32          ccbaWrite()
+ *         l_int32          ccbaWriteStream()
+ *         l_int32          ccbaRead()
+ *         l_int32          ccbaReadStream()
+ *
+ *     SVG output
+ *         l_int32          ccbaWriteSVG()
+ *         char            *ccbaWriteSVGString()
+ *
+ *
+ *     Border finding is tricky because components can have
+ *     holes, which also need to be traced out.  The outer
+ *     border can be connected with all the hole borders,
+ *     so that there is a single border for each component.
+ *     [Alternatively, the connecting paths can be eliminated if
+ *     you're willing to have a set of borders for each
+ *     component (an exterior border and some number of
+ *     interior ones), with "line to" operations tracing
+ *     out each border and "move to" operations going from
+ *     one border to the next.]
+ *
+ *     Here's the plan.  We get the pix for each connected
+ *     component, and trace its exterior border.  We then
+ *     find the holes (if any) in the pix, and separately
+ *     trace out their borders, all using the same
+ *     border-following rule that has ON pixels on the right
+ *     side of the path.
+ *
+ *     [For svg, we may want to turn each set of borders for a c.c.
+ *     into a closed path.  This can be done by tunnelling
+ *     through the component from the outer border to each of the
+ *     holes, going in and coming out along the same path so
+ *     the connection will be invisible in any rendering
+ *     (display or print) from the outline.  The result is a
+ *     closed path, where the outside border is traversed
+ *     cw and each hole is traversed ccw.  The svg renderer
+ *     is assumed to handle these closed borders properly.]
+ *
+ *     Each border is a closed path that is traversed in such
+ *     a way that the stuff inside the c.c. is on the right
+ *     side of the traveller.  The border of a singly-connected
+ *     component is thus traversed cw, and the border of the
+ *     holes inside a c.c. are traversed ccw.  Suppose we have
+ *     a list of all the borders of each c.c., both the cw and ccw
+ *     traversals.  How do we reconstruct the image?
+ *
+ *   Reconstruction:
+ *
+ *     Method 1.  Topological method using connected components.
+ *     We have closed borders composed of cw border pixels for the
+ *     exterior of c.c. and ccw border pixels for the interior (holes)
+ *     in the c.c.
+ *         (a) Initialize the destination to be OFF.  Then,
+ *             in any order:
+ *         (b) Fill the components within and including the cw borders,
+ *             and sequentially XOR them onto the destination.
+ *         (c) Fill the components within but not including the ccw
+ *             borders and sequentially XOR them onto the destination.
+ *     The components that are XOR'd together can be generated as follows:
+ *         (a) For each closed cw path, use pixFillClosedBorders():
+ *               (1) Turn on the path pixels in a subimage that
+ *                   minimally supports the border.
+ *               (2) Do a 4-connected fill from a seed of 1 pixel width
+ *                   on the border, using the inverted image in (1) as
+ *                   a filling mask.
+ *               (3) Invert the fill result: this gives the component
+ *                   including the exterior cw path, with all holes
+ *                   filled.
+ *         (b) For each closed ccw path (hole):
+ *               (1) Turn on the path pixels in a subimage that minimally
+ *                   supports the path.
+ *               (2) Find a seed pixel on the inside of this path.
+ *               (3) Do a 4-connected fill from this seed pixel, using
+ *                   the inverted image of the path in (1) as a filling
+ *                   mask.
+ *
+ *     ------------------------------------------------------
+ *
+ *     Method 2.  A variant of Method 1.  Topological.
+ *     In Method 1, we treat the exterior border differently from
+ *     the interior (hole) borders.  Here, all borders in a c.c.
+ *     are treated equally:
+ *         (1) Start with a pix with a 1 pixel OFF boundary
+ *             enclosing all the border pixels of the c.c.
+ *             This is the filling mask.
+ *         (2) Make a seed image of the same size as follows:  for
+ *             each border, put one seed pixel OUTSIDE the border
+ *             (where OUTSIDE is determined by the inside/outside
+ *             convention for borders).
+ *         (3) Seedfill into the seed image, filling in the regions
+ *             determined by the filling mask.  The fills are clipped
+ *             by the border pixels.
+ *         (4) Inverting this, we get the c.c. properly filled,
+ *             with the holes empty!
+ *         (5) Rasterop using XOR the filled c.c. (but not the 1
+ *             pixel boundary) into the full dest image.
+ *
+ *     Method 2 is about 1.2x faster than Method 1 on text images,
+ *     and about 2x faster on complex images (e.g., with halftones).
+ *
+ *     ------------------------------------------------------
+ *
+ *     Method 3.  The traditional way to fill components delineated
+ *     by boundaries is through scan line conversion.  It's a bit
+ *     tricky, and I have not yet tried to implement it.
+ *
+ *     ------------------------------------------------------
+ *
+ *     Method 4.  [Nota Bene: this method probably doesn't work, and
+ *     won't be implemented.  If I get a more traditional scan line
+ *     conversion algorithm working, I'll erase these notes.]
+ *     Render all border pixels on a destination image,
+ *     which will be the final result after scan conversion.  Assign
+ *     a value 1 to pixels on cw paths, 2 to pixels on ccw paths,
+ *     and 3 to pixels that are on both paths.  Each of the paths
+ *     is an 8-connected component.  Now scan across each raster
+ *     line.  The attempt is to make rules for each scan line
+ *     that are independent of neighboring scanlines.  Here are
+ *     a set of rules for writing ON pixels on a destination raster image:
+ *
+ *         (a) The rasterizer will be in one of two states: ON and OFF.
+ *         (b) Start each line in the OFF state.  In the OFF state,
+ *             skip pixels until you hit a path of any type.  Turn
+ *             the path pixel ON.
+ *         (c) If the state is ON, each pixel you encounter will
+ *             be turned on, until and including hitting a path pixel.
+ *         (d) When you hit a path pixel, if the path does NOT cut
+ *             through the line, so that there is not an 8-cc path
+ *             pixel (of any type) both above and below, the state
+ *             is unchanged (it stays either ON or OFF).
+ *         (e) If the path does cut through, but with a possible change
+ *             of pixel type, then we decide whether or
+ *             not to toggle the state based on the values of the
+ *             path pixel and the path pixels above and below:
+ *               (1) if a 1 path cuts through, toggle;
+ *               (1) if a 2 path cuts through, toggle;
+ *               (3) if a 3 path cuts through, do not toggle;
+ *               (4) if on one side a 3 touches both a 1 and a 2, use the 2
+ *               (5) if a 3 has any 1 neighbors, toggle; else if it has
+ *                   no 1 neighbors, do not toggle;
+ *               (6) if a 2 has any neighbors that are 1 or 3,
+ *                   do not toggle
+ *               (7) if a 1 has neighbors 1 and x (x = 2 or 3),
+ *                   toggle
+ *
+ *
+ *     To visualize how these rules work, consider the following
+ *     component with border pixels labeled according to the scheme
+ *     above.  We also show the values of the interior pixels
+ *     (w=OFF, b=ON), but these of course must be inferred properly
+ *     from the rules above:
+ *
+ *                     3
+ *                  3  w  3             1  1  1
+ *                  1  2  1          1  b  2  b  1
+ *                  1  b  1             3  w  2  1
+ *                  3  b  1          1  b  2  b  1
+ *               3  w  3                1  1  1
+ *               3  w  3
+ *            1  b  2  b  1
+ *            1  2  w  2  1
+ *         1  b  2  w  2  b  1
+ *            1  2  w  2  1
+ *               1  2  b  1
+ *               1  b  1
+ *                  1
+ *
+ *
+ *     Even if this works, which is unlikely, it will certainly be
+ *     slow because decisions have to be made on a pixel-by-pixel
+ *     basis when encountering borders.
+ *
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + +static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ + + /* In ccbaGenerateSinglePath(): don't save holes + * in c.c. with ridiculously many small holes */ +static const l_int32 NMAX_HOLES = 150; + + /* Tables used to trace the border. + * - The 8 pixel positions of neighbors Q are labeled clockwise + * starting from the west: + * 1 2 3 + * 0 P 4 + * 7 6 5 + * where the labels are the index offset [0, ... 7] of Q relative to P. + * - xpostab[] and ypostab[] give the actual x and y pixel offsets + * of Q relative to P, indexed by the index offset. + * - qpostab[pos] gives the new index offset of Q relative to P, at + * the time that a new P has been chosen to be in index offset + * position 'pos' relative to the previous P. The relation + * between P and Q is always 4-connected. */ +static const l_int32 xpostab[] = {-1, -1, 0, 1, 1, 1, 0, -1}; +static const l_int32 ypostab[] = {0, -1, -1, -1, 0, 1, 1, 1}; +static const l_int32 qpostab[] = {6, 6, 0, 0, 2, 2, 4, 4}; + + /* Static functions */ +static l_int32 ccbaExtendArray(CCBORDA *ccba); +static CCBORD *pixGetCCBorders(PIX *pixs, BOX *box); +static PTA *pixGetOuterBorderPta(PIX *pixs, BOX *box); +static l_ok pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, + l_int32 xs, l_int32 ys); +static l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, + l_int32 wpl, l_int32 px, l_int32 py, + l_int32 *pqpos, l_int32 *pnpx, + l_int32 *pnpy); +static void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, + l_int32 spy, l_int32 *pxs, l_int32 *pys); + +#ifndef NO_CONSOLE_IO +#define DEBUG_PRINT 0 +#endif /* NO CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * ccba and ccb creation and destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaCreate() + * + * \param[in] pixs 1 bpp; can be null + * \param[in] n initial number of ptrs + * \return ccba, or NULL on error + */ +CCBORDA * +ccbaCreate(PIX *pixs, + l_int32 n) +{ +CCBORDA *ccba; + + PROCNAME("ccbaCreate"); + + if (n <= 0) + n = INITIAL_PTR_ARRAYSIZE; + + ccba = (CCBORDA *)LEPT_CALLOC(1, sizeof(CCBORDA)); + if (pixs) { + ccba->pix = pixClone(pixs); + ccba->w = pixGetWidth(pixs); + ccba->h = pixGetHeight(pixs); + } + ccba->n = 0; + ccba->nalloc = n; + if ((ccba->ccb = (CCBORD **)LEPT_CALLOC(n, sizeof(CCBORD *))) == NULL) { + ccbaDestroy(&ccba); + return (CCBORDA *)ERROR_PTR("ccba ptrs not made", procName, NULL); + } + return ccba; +} + + +/*! + * \brief ccbaDestroy() + * + * \param[in,out] pccba will be set to null befoe returning + * \return void + */ +void +ccbaDestroy(CCBORDA **pccba) +{ +l_int32 i; +CCBORDA *ccba; + + PROCNAME("ccbaDestroy"); + + if (pccba == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((ccba = *pccba) == NULL) + return; + + pixDestroy(&ccba->pix); + for (i = 0; i < ccba->n; i++) + ccbDestroy(&ccba->ccb[i]); + LEPT_FREE(ccba->ccb); + LEPT_FREE(ccba); + *pccba = NULL; + return; +} + + +/*! + * \brief ccbCreate() + * + * \param[in] pixs [optional]; can be null + * \return ccb or NULL on error + */ +CCBORD * +ccbCreate(PIX *pixs) +{ +BOXA *boxa; +CCBORD *ccb; +PTA *start; +PTAA *local; + + PROCNAME("ccbCreate"); + + if (pixs) { + if (pixGetDepth(pixs) != 1) + return (CCBORD *)ERROR_PTR("pixs not binary", procName, NULL); + } + + if ((ccb = (CCBORD *)LEPT_CALLOC(1, sizeof(CCBORD))) == NULL) + return (CCBORD *)ERROR_PTR("ccb not made", procName, NULL); + ccb->refcount++; + if (pixs) + ccb->pix = pixClone(pixs); + if ((boxa = boxaCreate(1)) == NULL) + return (CCBORD *)ERROR_PTR("boxa not made", procName, NULL); + ccb->boxa = boxa; + if ((start = ptaCreate(1)) == NULL) + return (CCBORD *)ERROR_PTR("start pta not made", procName, NULL); + ccb->start = start; + if ((local = ptaaCreate(1)) == NULL) + return (CCBORD *)ERROR_PTR("local ptaa not made", procName, NULL); + ccb->local = local; + + return ccb; +} + + +/*! + * \brief ccbDestroy() + * + * \param[in,out] pccb will be set to null before returning + * \return void + */ +void +ccbDestroy(CCBORD **pccb) +{ +CCBORD *ccb; + + PROCNAME("ccbDestroy"); + + if (pccb == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((ccb = *pccb) == NULL) + return; + + ccb->refcount--; + if (ccb->refcount == 0) { + if (ccb->pix) + pixDestroy(&ccb->pix); + if (ccb->boxa) + boxaDestroy(&ccb->boxa); + if (ccb->start) + ptaDestroy(&ccb->start); + if (ccb->local) + ptaaDestroy(&ccb->local); + if (ccb->global) + ptaaDestroy(&ccb->global); + if (ccb->step) + numaaDestroy(&ccb->step); + if (ccb->splocal) + ptaDestroy(&ccb->splocal); + if (ccb->spglobal) + ptaDestroy(&ccb->spglobal); + LEPT_FREE(ccb); + *pccb = NULL; + } + return; +} + + +/*---------------------------------------------------------------------* + * ccba addition * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaAddCcb() + * + * \param[in] ccba + * \param[in] ccb to be added by insertion + * \return 0 if OK; 1 on error + */ +l_ok +ccbaAddCcb(CCBORDA *ccba, + CCBORD *ccb) +{ +l_int32 n; + + PROCNAME("ccbaAddCcb"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + if (!ccb) + return ERROR_INT("ccb not defined", procName, 1); + + n = ccbaGetCount(ccba); + if (n >= ccba->nalloc) + ccbaExtendArray(ccba); + ccba->ccb[n] = ccb; + ccba->n++; + return 0; +} + + +/*! + * \brief ccbaExtendArray() + * + * \param[in] ccba + * \return 0 if OK; 1 on error + */ +static l_int32 +ccbaExtendArray(CCBORDA *ccba) +{ + PROCNAME("ccbaExtendArray"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + if ((ccba->ccb = (CCBORD **)reallocNew((void **)&ccba->ccb, + sizeof(CCBORD *) * ccba->nalloc, + 2 * sizeof(CCBORD *) * ccba->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + ccba->nalloc = 2 * ccba->nalloc; + return 0; +} + + + +/*---------------------------------------------------------------------* + * ccba accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaGetCount() + * + * \param[in] ccba + * \return count, with 0 on error + */ +l_int32 +ccbaGetCount(CCBORDA *ccba) +{ + + PROCNAME("ccbaGetCount"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 0); + + return ccba->n; +} + + +/*! + * \brief ccbaGetCcb() + * + * \param[in] ccba + * \param[in] index + * \return ccb, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a clone of the ccb; it must be destroyed
+ * 
+ */ +CCBORD * +ccbaGetCcb(CCBORDA *ccba, + l_int32 index) +{ +CCBORD *ccb; + + PROCNAME("ccbaGetCcb"); + + if (!ccba) + return (CCBORD *)ERROR_PTR("ccba not defined", procName, NULL); + if (index < 0 || index >= ccba->n) + return (CCBORD *)ERROR_PTR("index out of bounds", procName, NULL); + + ccb = ccba->ccb[index]; + ccb->refcount++; + return ccb; +} + + + +/*---------------------------------------------------------------------* + * Top-level border-finding routines * + *---------------------------------------------------------------------*/ +/*! + * \brief pixGetAllCCBorders() + * + * \param[in] pixs 1 bpp + * \return ccborda, or NULL on error + */ +CCBORDA * +pixGetAllCCBorders(PIX *pixs) +{ +l_int32 n, i; +BOX *box; +BOXA *boxa; +CCBORDA *ccba; +CCBORD *ccb; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixGetAllCCBorders"); + + if (!pixs) + return (CCBORDA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (CCBORDA *)ERROR_PTR("pixs not binary", procName, NULL); + + if ((boxa = pixConnComp(pixs, &pixa, 8)) == NULL) + return (CCBORDA *)ERROR_PTR("boxa not made", procName, NULL); + n = boxaGetCount(boxa); + + if ((ccba = ccbaCreate(pixs, n)) == NULL) { + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return (CCBORDA *)ERROR_PTR("ccba not made", procName, NULL); + } + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { + ccbaDestroy(&ccba); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + return (CCBORDA *)ERROR_PTR("pix not found", procName, NULL); + } + if ((box = pixaGetBox(pixa, i, L_CLONE)) == NULL) { + ccbaDestroy(&ccba); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + pixDestroy(&pix); + return (CCBORDA *)ERROR_PTR("box not found", procName, NULL); + } + ccb = pixGetCCBorders(pix, box); + pixDestroy(&pix); + boxDestroy(&box); + if (!ccb) { + ccbaDestroy(&ccba); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + return (CCBORDA *)ERROR_PTR("ccb not made", procName, NULL); + } +/* ptaWriteStream(stderr, ccb->local, 1); */ + ccbaAddCcb(ccba, ccb); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return ccba; +} + + +/*! + * \brief pixGetCCBorders() + * + * \param[in] pixs 1 bpp, one 8-connected component + * \param[in] box of %pixs, in global coords + * \return ccbord, or NULL on error + * + *
+ * Notes:
+ *      (1) We are finding the exterior and interior borders
+ *          of an 8-connected component.   This should be used
+ *          on a pix that has exactly one 8-connected component.
+ *      (2) Typically, pixs is a c.c. in some larger pix.  The
+ *          input box gives its location in global coordinates.
+ *          This box is saved, as well as the boxes for the
+ *          borders of any holes within the c.c., but the latter
+ *          are given in relative coords within the c.c.
+ *      (3) The calculations for the exterior border are done
+ *          on a pix with a 1-pixel
+ *          added border, but the saved pixel coordinates
+ *          are the correct (relative) ones for the input pix
+ *          (without a 1-pixel border)
+ *      (4) For the definition of the three tables -- xpostab[], ypostab[]
+ *          and qpostab[] -- see above where they are defined.
+ * 
+ */ +static CCBORD * +pixGetCCBorders(PIX *pixs, + BOX *box) +{ +l_int32 allzero, i, x, xh, w, nh; +l_int32 xs, ys; /* starting hole border pixel, relative in pixs */ +l_uint32 val; +BOX *boxt, *boxe; +BOXA *boxa; +CCBORD *ccb; +PIX *pixh; /* for hole components */ +PIX *pixt; +PIXA *pixa; + + PROCNAME("pixGetCCBorders"); + + if (!pixs) + return (CCBORD *)ERROR_PTR("pixs not defined", procName, NULL); + if (!box) + return (CCBORD *)ERROR_PTR("box not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (CCBORD *)ERROR_PTR("pixs not binary", procName, NULL); + + pixZero(pixs, &allzero); + if (allzero) + return (CCBORD *)ERROR_PTR("pixs all 0", procName, NULL); + + if ((ccb = ccbCreate(pixs)) == NULL) + return (CCBORD *)ERROR_PTR("ccb not made", procName, NULL); + + /* Get the exterior border */ + pixGetOuterBorder(ccb, pixs, box); + + /* Find the holes, if any */ + if ((pixh = pixHolesByFilling(pixs, 4)) == NULL) { + ccbDestroy(&ccb); + return (CCBORD *)ERROR_PTR("pixh not made", procName, NULL); + } + pixZero(pixh, &allzero); + if (allzero) { /* no holes */ + pixDestroy(&pixh); + return ccb; + } + + /* Get c.c. and locations of the holes */ + if ((boxa = pixConnComp(pixh, &pixa, 4)) == NULL) { + ccbDestroy(&ccb); + pixDestroy(&pixh); + return (CCBORD *)ERROR_PTR("boxa not made", procName, NULL); + } + nh = boxaGetCount(boxa); +/* fprintf(stderr, "%d holes\n", nh); */ + + /* For each hole, find an interior pixel within the hole, + * then march to the right and stop at the first border + * pixel. Save the bounding box of the border, which + * is 1 pixel bigger on each side than the bounding box + * of the hole itself. Note that we use a pix of the + * c.c. of the hole itself to be sure that we start + * with a pixel in the hole of the proper component. + * If we did everything from the parent component, it is + * possible to start in a different hole that is within + * the b.b. of a larger hole. */ + w = pixGetWidth(pixs); + for (i = 0; i < nh; i++) { + boxt = boxaGetBox(boxa, i, L_CLONE); + pixt = pixaGetPix(pixa, i, L_CLONE); + ys = boxt->y; /* there must be a hole pixel on this raster line */ + for (x = 0; x < boxt->w; x++) { /* look for (fg) hole pixel */ + pixGetPixel(pixt, x, 0, &val); + if (val == 1) { + xh = x; + break; + } + } + if (x == boxt->w) { + L_WARNING("no hole pixel found!\n", procName); + continue; + } + for (x = xh + boxt->x; x < w; x++) { /* look for (fg) border pixel */ + pixGetPixel(pixs, x, ys, &val); + if (val == 1) { + xs = x; + break; + } + } + boxe = boxCreate(boxt->x - 1, boxt->y - 1, boxt->w + 2, boxt->h + 2); +#if DEBUG_PRINT + boxPrintStreamInfo(stderr, box); + boxPrintStreamInfo(stderr, boxe); + fprintf(stderr, "xs = %d, ys = %d\n", xs, ys); +#endif /* DEBUG_PRINT */ + pixGetHoleBorder(ccb, pixs, boxe, xs, ys); + boxDestroy(&boxt); + boxDestroy(&boxe); + pixDestroy(&pixt); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + pixDestroy(&pixh); + return ccb; +} + + +/*! + * \brief pixGetOuterBordersPtaa() + * + * \param[in] pixs 1 bpp + * \return ptaa of outer borders, in global coords, or NULL on error + */ +PTAA * +pixGetOuterBordersPtaa(PIX *pixs) +{ +l_int32 i, n; +BOX *box; +BOXA *boxa; +PIX *pix; +PIXA *pixa; +PTA *pta; +PTAA *ptaa; + + PROCNAME("pixGetOuterBordersPtaa"); + + if (!pixs) + return (PTAA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PTAA *)ERROR_PTR("pixs not binary", procName, NULL); + + boxa = pixConnComp(pixs, &pixa, 8); + n = boxaGetCount(boxa); + if (n == 0) { + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return (PTAA *)ERROR_PTR("pixs empty", procName, NULL); + } + + ptaa = ptaaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pix = pixaGetPix(pixa, i, L_CLONE); + pta = pixGetOuterBorderPta(pix, box); + if (pta) + ptaaAddPta(ptaa, pta, L_INSERT); + boxDestroy(&box); + pixDestroy(&pix); + } + + pixaDestroy(&pixa); + boxaDestroy(&boxa); + return ptaa; +} + + +/*! + * \brief pixGetOuterBorderPta() + * + * \param[in] pixs 1 bpp, one 8-connected component + * \param[in] box [optional] of %pixs, in global coordinates + * \return pta of outer border, in global coords, or NULL on error + * + *
+ * Notes:
+ *      (1) We are finding the exterior border of a single 8-connected
+ *          component.
+ *      (2) If box is NULL, the outline returned is in the local coords
+ *          of the input pix.  Otherwise, box is assumed to give the
+ *          location of the pix in global coordinates, and the returned
+ *          pta will be in those global coordinates.
+ * 
+ */ +static PTA * +pixGetOuterBorderPta(PIX *pixs, + BOX *box) +{ +l_int32 allzero, x, y; +BOX *boxt; +CCBORD *ccb; +PTA *ptaloc, *ptad; + + PROCNAME("pixGetOuterBorderPta"); + + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PTA *)ERROR_PTR("pixs not binary", procName, NULL); + + pixZero(pixs, &allzero); + if (allzero) + return (PTA *)ERROR_PTR("pixs all 0", procName, NULL); + + if ((ccb = ccbCreate(pixs)) == NULL) + return (PTA *)ERROR_PTR("ccb not made", procName, NULL); + if (!box) + boxt = boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs)); + else + boxt = boxClone(box); + + /* Get the exterior border in local coords */ + pixGetOuterBorder(ccb, pixs, boxt); + if ((ptaloc = ptaaGetPta(ccb->local, 0, L_CLONE)) == NULL) { + ccbDestroy(&ccb); + boxDestroy(&boxt); + return (PTA *)ERROR_PTR("ptaloc not made", procName, NULL); + } + + /* Transform to global coordinates, if they are given */ + if (box) { + boxGetGeometry(box, &x, &y, NULL, NULL); + ptad = ptaTransform(ptaloc, x, y, 1.0, 1.0); + } else { + ptad = ptaClone(ptaloc); + } + + ptaDestroy(&ptaloc); + boxDestroy(&boxt); + ccbDestroy(&ccb); + return ptad; +} + + +/*---------------------------------------------------------------------* + * Lower-level border-finding routines * + *---------------------------------------------------------------------*/ +/*! + * \brief pixGetOuterBorder() + * + * \param[in] ccb unfilled + * \param[in] pixs for the component at hand + * \param[in] box for the component, in global coords + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) the border is saved in relative coordinates within
+ *          the c.c. (pixs).  Because the calculation is done
+ *          in pixb with added 1 pixel border, we must subtract
+ *          1 from each pixel value before storing it.
+ *      (2) the stopping condition is that after the first pixel is
+ *          returned to, the next pixel is the second pixel.  Having
+ *          these 2 pixels recur in sequence proves the path is closed,
+ *          and we do not store the second pixel again.
+ * 
+ */ +l_ok +pixGetOuterBorder(CCBORD *ccb, + PIX *pixs, + BOX *box) +{ +l_int32 fpx, fpy, spx, spy, qpos; +l_int32 px, py, npx, npy; +l_int32 w, h, wpl; +l_uint32 *data; +PTA *pta; +PIX *pixb; /* with 1 pixel border */ + + PROCNAME("pixGetOuterBorder"); + + if (!ccb) + return ERROR_INT("ccb not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + /* Add 1-pixel border all around, and find start pixel */ + if ((pixb = pixAddBorder(pixs, 1, 0)) == NULL) + return ERROR_INT("pixs not made", procName, 1); + if (!nextOnPixelInRaster(pixb, 1, 1, &px, &py)) { + pixDestroy(&pixb); + return ERROR_INT("no start pixel found", procName, 1); + } + qpos = 0; /* relative to p */ + fpx = px; /* save location of first pixel on border */ + fpy = py; + + /* Save box and start pixel in relative coords */ + boxaAddBox(ccb->boxa, box, L_COPY); + ptaAddPt(ccb->start, px - 1, py - 1); + + pta = ptaCreate(0); + ptaaAddPta(ccb->local, pta, L_INSERT); + ptaAddPt(pta, px - 1, py - 1); /* initial point */ + pixGetDimensions(pixb, &w, &h, NULL); + data = pixGetData(pixb); + wpl = pixGetWpl(pixb); + + /* Get the second point; if there is none, return */ + if (findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy)) { + pixDestroy(&pixb); + return 0; + } + + spx = npx; /* save location of second pixel on border */ + spy = npy; + ptaAddPt(pta, npx - 1, npy - 1); /* second point */ + px = npx; + py = npy; + + while (1) { + findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); + if (px == fpx && py == fpy && npx == spx && npy == spy) + break; + ptaAddPt(pta, npx - 1, npy - 1); + px = npx; + py = npy; + } + + pixDestroy(&pixb); + return 0; +} + + +/*! + * \brief pixGetHoleBorder() + * + * \param[in] ccb the exterior border is already made + * \param[in] pixs for the connected component at hand + * \param[in] box for the specific hole border, in relative + * coordinates to the c.c. + * \param[in] xs, ys first pixel on hole border, relative to c.c. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) we trace out hole border on pixs without addition
+ *          of single pixel added border to pixs
+ *      (2) therefore all coordinates are relative within the c.c. (pixs)
+ *      (3) same position tables and stopping condition as for
+ *          exterior borders
+ * 
+ */ +static l_ok +pixGetHoleBorder(CCBORD *ccb, + PIX *pixs, + BOX *box, + l_int32 xs, + l_int32 ys) +{ +l_int32 fpx, fpy, spx, spy, qpos; +l_int32 px, py, npx, npy; +l_int32 w, h, wpl; +l_uint32 *data; +PTA *pta; + + PROCNAME("pixGetHoleBorder"); + + if (!ccb) + return ERROR_INT("ccb not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + /* Add border and find start pixel */ + qpos = 0; /* orientation of Q relative to P */ + fpx = xs; /* save location of first pixel on border */ + fpy = ys; + + /* Save box and start pixel */ + boxaAddBox(ccb->boxa, box, L_COPY); + ptaAddPt(ccb->start, xs, ys); + + if ((pta = ptaCreate(0)) == NULL) + return ERROR_INT("pta not made", procName, 1); + ptaaAddPta(ccb->local, pta, L_INSERT); + ptaAddPt(pta, xs, ys); /* initial pixel */ + + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + + /* Get the second point; there should always be at least 4 pts + * in a minimal hole border! */ + if (findNextBorderPixel(w, h, data, wpl, xs, ys, &qpos, &npx, &npy)) + return ERROR_INT("isolated hole border point!", procName, 1); + + spx = npx; /* save location of second pixel on border */ + spy = npy; + ptaAddPt(pta, npx, npy); /* second pixel */ + px = npx; + py = npy; + + while (1) { + findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); + if (px == fpx && py == fpy && npx == spx && npy == spy) + break; + ptaAddPt(pta, npx, npy); + px = npx; + py = npy; + } + + return 0; +} + + +/*! + * \brief findNextBorderPixel() + * + * \param[in] w, h + * \param[in] data, wpl + * \param[in] px, py current P + * \param[in,out] pqpos input current Q; new Q + * \param[out] pnpx, pnpy new P + * \return 0 if next pixel found; 1 otherwise + * + *
+ * Notes:
+ *      (1) qpos increases clockwise from 0 to 7, with 0 at
+ *          location with Q to left of P:   Q P
+ *      (2) this is a low-level function that does not check input
+ *          parameters.  All calling functions should check them.
+ * 
+ */ +static l_int32 +findNextBorderPixel(l_int32 w, + l_int32 h, + l_uint32 *data, + l_int32 wpl, + l_int32 px, + l_int32 py, + l_int32 *pqpos, + l_int32 *pnpx, + l_int32 *pnpy) +{ +l_int32 qpos, i, pos, npx, npy, val; +l_uint32 *line; + + qpos = *pqpos; + for (i = 1; i < 8; i++) { + pos = (qpos + i) % 8; + npx = px + xpostab[pos]; + npy = py + ypostab[pos]; + line = data + npy * wpl; + val = GET_DATA_BIT(line, npx); + if (val) { + *pnpx = npx; + *pnpy = npy; + *pqpos = qpostab[pos]; + return 0; + } + } + + return 1; +} + + +/*! + * \brief locateOutsideSeedPixel() + * + * \param[in] fpx, fpy location of first pixel + * \param[in] spx, spy location of second pixel + * \param[out] pxs, pys seed pixel to be returned + * + *
+ * Notes:
+ *      (1) The first and second pixels must be 8-adjacent,
+ *          so |dx| <= 1 and |dy| <= 1 and both dx and dy
+ *          cannot be 0.  There are 8 possible cases.
+ *      (2) The seed pixel is OUTSIDE the foreground of the c.c.
+ *      (3) These rules are for the situation where the INSIDE
+ *          of the c.c. is on the right as you follow the border:
+ *          cw for an exterior border and ccw for a hole border.
+ * 
+ */ +static void +locateOutsideSeedPixel(l_int32 fpx, + l_int32 fpy, + l_int32 spx, + l_int32 spy, + l_int32 *pxs, + l_int32 *pys) +{ +l_int32 dx, dy; + + dx = spx - fpx; + dy = spy - fpy; + + if (dx * dy == 1) { + *pxs = fpx + dx; + *pys = fpy; + } else if (dx * dy == -1) { + *pxs = fpx; + *pys = fpy + dy; + } else if (dx == 0) { + *pxs = fpx + dy; + *pys = fpy + dy; + } else /* dy == 0 */ { + *pxs = fpx + dx; + *pys = fpy - dx; + } + + return; +} + + + +/*---------------------------------------------------------------------* + * Border conversions * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaGenerateGlobalLocs() + * + * \param[in] ccba with local chain ptaa of borders computed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This uses the pixel locs in the local ptaa, which are all
+ *          relative to each c.c., to find the global pixel locations,
+ *          and stores them in the global ptaa.
+ * 
+ */ +l_ok +ccbaGenerateGlobalLocs(CCBORDA *ccba) +{ +l_int32 ncc, nb, n, i, j, k, xul, yul, x, y; +CCBORD *ccb; +PTAA *ptaal, *ptaag; +PTA *ptal, *ptag; + + PROCNAME("ccbaGenerateGlobalLocs"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + + /* Get the UL corner in global coords, (xul, yul), of the c.c. */ + boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL); + + /* Make a new global ptaa, removing any old one */ + ptaal = ccb->local; + nb = ptaaGetCount(ptaal); /* number of borders */ + if (ccb->global) /* remove old one */ + ptaaDestroy(&ccb->global); + if ((ptaag = ptaaCreate(nb)) == NULL) + return ERROR_INT("ptaag not made", procName, 1); + ccb->global = ptaag; /* save new one */ + + /* Iterate through the borders for this c.c. */ + for (j = 0; j < nb; j++) { + ptal = ptaaGetPta(ptaal, j, L_CLONE); + n = ptaGetCount(ptal); /* number of pixels in border */ + if ((ptag = ptaCreate(n)) == NULL) + return ERROR_INT("ptag not made", procName, 1); + ptaaAddPta(ptaag, ptag, L_INSERT); + for (k = 0; k < n; k++) { + ptaGetIPt(ptal, k, &x, &y); + ptaAddPt(ptag, x + xul, y + yul); + } + ptaDestroy(&ptal); + } + ccbDestroy(&ccb); + } + + return 0; +} + + +/*! + * \brief ccbaGenerateStepChains() + * + * \param[in] ccba with local chain ptaa of borders computed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This uses the pixel locs in the local ptaa,
+ *          which are all relative to each c.c., to find
+ *          the step directions for successive pixels in
+ *          the chain, and stores them in the step numaa.
+ *      (2) To get the step direction, use
+ *              1   2   3
+ *              0   P   4
+ *              7   6   5
+ *          where P is the previous pixel at (px, py).  The step direction
+ *          is the number (from 0 through 7) for each relative location
+ *          of the current pixel at (cx, cy).  It is easily found by
+ *          indexing into a 2-d 3x3 array (dirtab).
+ * 
+ */ +l_ok +ccbaGenerateStepChains(CCBORDA *ccba) +{ +l_int32 ncc, nb, n, i, j, k; +l_int32 px, py, cx, cy, stepdir; +l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}}; +CCBORD *ccb; +NUMA *na; +NUMAA *naa; /* step chain code; to be made */ +PTA *ptal; +PTAA *ptaal; /* local chain code */ + + PROCNAME("ccbaGenerateStepChains"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + + /* Make a new step numaa, removing any old one */ + ptaal = ccb->local; + nb = ptaaGetCount(ptaal); /* number of borders */ + if (ccb->step) /* remove old one */ + numaaDestroy(&ccb->step); + if ((naa = numaaCreate(nb)) == NULL) + return ERROR_INT("naa not made", procName, 1); + ccb->step = naa; /* save new one */ + + /* Iterate through the borders for this c.c. */ + for (j = 0; j < nb; j++) { + ptal = ptaaGetPta(ptaal, j, L_CLONE); + n = ptaGetCount(ptal); /* number of pixels in border */ + if (n == 1) { /* isolated pixel */ + na = numaCreate(1); /* but leave it empty */ + } else { /* trace out the boundary */ + if ((na = numaCreate(n)) == NULL) + return ERROR_INT("na not made", procName, 1); + ptaGetIPt(ptal, 0, &px, &py); + for (k = 1; k < n; k++) { + ptaGetIPt(ptal, k, &cx, &cy); + stepdir = dirtab[1 + cy - py][1 + cx - px]; + numaAddNumber(na, stepdir); + px = cx; + py = cy; + } + } + numaaAddNuma(naa, na, L_INSERT); + ptaDestroy(&ptal); + } + ccbDestroy(&ccb); /* just decrement refcount */ + } + + return 0; +} + + +/*! + * \brief ccbaStepChainsToPixCoords() + * + * \param[in] ccba with step chains numaa of borders + * \param[in] coordtype CCB_GLOBAL_COORDS or CCB_LOCAL_COORDS + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This uses the step chain data in each ccb to determine
+ *          the pixel locations, either global or local,
+ *          and stores them in the appropriate ptaa,
+ *          either global or local.  For the latter, the
+ *          pixel locations are relative to the c.c.
+ * 
+ */ +l_ok +ccbaStepChainsToPixCoords(CCBORDA *ccba, + l_int32 coordtype) +{ +l_int32 ncc, nb, n, i, j, k; +l_int32 xul, yul, xstart, ystart, x, y, stepdir; +BOXA *boxa; +CCBORD *ccb; +NUMA *na; +NUMAA *naa; +PTAA *ptaan; /* new pix coord ptaa */ +PTA *ptas, *ptan; + + PROCNAME("ccbaStepChainsToPixCoords"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS) + return ERROR_INT("coordtype not valid", procName, 1); + + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if ((naa = ccb->step) == NULL) + return ERROR_INT("step numaa not found", procName, 1); + if ((boxa = ccb->boxa) == NULL) + return ERROR_INT("boxa not found", procName, 1); + if ((ptas = ccb->start) == NULL) + return ERROR_INT("start pta not found", procName, 1); + + /* For global coords, get the (xul, yul) of the c.c.; + * otherwise, use relative coords. */ + if (coordtype == CCB_LOCAL_COORDS) { + xul = 0; + yul = 0; + } else { /* coordtype == CCB_GLOBAL_COORDS */ + /* Get UL corner in global coords */ + if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, NULL, NULL)) + return ERROR_INT("bounding rectangle not found", procName, 1); + } + + /* Make a new ptaa, removing any old one */ + nb = numaaGetCount(naa); /* number of borders */ + if ((ptaan = ptaaCreate(nb)) == NULL) + return ERROR_INT("ptaan not made", procName, 1); + if (coordtype == CCB_LOCAL_COORDS) { + if (ccb->local) /* remove old one */ + ptaaDestroy(&ccb->local); + ccb->local = ptaan; /* save new local chain */ + } else { /* coordtype == CCB_GLOBAL_COORDS */ + if (ccb->global) /* remove old one */ + ptaaDestroy(&ccb->global); + ccb->global = ptaan; /* save new global chain */ + } + + /* Iterate through the borders for this c.c. */ + for (j = 0; j < nb; j++) { + na = numaaGetNuma(naa, j, L_CLONE); + n = numaGetCount(na); /* number of steps in border */ + if ((ptan = ptaCreate(n + 1)) == NULL) + return ERROR_INT("ptan not made", procName, 1); + ptaaAddPta(ptaan, ptan, L_INSERT); + ptaGetIPt(ptas, j, &xstart, &ystart); + x = xul + xstart; + y = yul + ystart; + ptaAddPt(ptan, x, y); + for (k = 0; k < n; k++) { + numaGetIValue(na, k, &stepdir); + x += xpostab[stepdir]; + y += ypostab[stepdir]; + ptaAddPt(ptan, x, y); + } + numaDestroy(&na); + } + ccbDestroy(&ccb); + } + + return 0; +} + + +/*! + * \brief ccbaGenerateSPGlobalLocs() + * + * \param[in] ccba + * \param[in] ptsflag CCB_SAVE_ALL_PTS or CCB_SAVE_TURNING_PTS + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This calculates the splocal rep if not yet made.
+ *      (2) It uses the local pixel values in splocal, the single
+ *          path pta, which are all relative to each c.c., to find
+ *          the corresponding global pixel locations, and stores
+ *          them in the spglobal pta.
+ *      (3) This lists only the turning points: it both makes a
+ *          valid svg file and is typically about half the size
+ *          when all border points are listed.
+ * 
+ */ +l_ok +ccbaGenerateSPGlobalLocs(CCBORDA *ccba, + l_int32 ptsflag) +{ +l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely; +l_int32 xp, yp, delxp, delyp; /* prev point and increments */ +CCBORD *ccb; +PTA *ptal, *ptag; + + PROCNAME("ccbaGenerateSPGlobalLocs"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + /* Make sure we have a local single path representation */ + if ((ccb = ccbaGetCcb(ccba, 0)) == NULL) + return ERROR_INT("no ccb", procName, 1); + if (!ccb->splocal) + ccbaGenerateSinglePath(ccba); + ccbDestroy(&ccb); /* clone ref */ + + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + + /* Get the UL corner in global coords, (xul, yul), of the c.c. */ + if (boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL)) + return ERROR_INT("bounding rectangle not found", procName, 1); + + /* Make a new spglobal pta, removing any old one */ + ptal = ccb->splocal; + npt = ptaGetCount(ptal); /* number of points */ + if (ccb->spglobal) /* remove old one */ + ptaDestroy(&ccb->spglobal); + if ((ptag = ptaCreate(npt)) == NULL) + return ERROR_INT("ptag not made", procName, 1); + ccb->spglobal = ptag; /* save new one */ + + /* Convert local to global */ + if (ptsflag == CCB_SAVE_ALL_PTS) { + for (j = 0; j < npt; j++) { + ptaGetIPt(ptal, j, &x, &y); + ptaAddPt(ptag, x + xul, y + yul); + } + } else { /* ptsflag = CCB_SAVE_TURNING_PTS */ + ptaGetIPt(ptal, 0, &xp, &yp); /* get the 1st pt */ + ptaAddPt(ptag, xp + xul, yp + yul); /* save the 1st pt */ + if (npt == 2) { /* get and save the 2nd pt */ + ptaGetIPt(ptal, 1, &x, &y); + ptaAddPt(ptag, x + xul, y + yul); + } else if (npt > 2) { + ptaGetIPt(ptal, 1, &x, &y); + delxp = x - xp; + delyp = y - yp; + xp = x; + yp = y; + for (j = 2; j < npt; j++) { + ptaGetIPt(ptal, j, &x, &y); + delx = x - xp; + dely = y - yp; + if (delx != delxp || dely != delyp) + ptaAddPt(ptag, xp + xul, yp + yul); + xp = x; + yp = y; + delxp = delx; + delyp = dely; + } + ptaAddPt(ptag, xp + xul, yp + yul); + } + } + + ccbDestroy(&ccb); /* clone ref */ + } + + return 0; +} + + + +/*---------------------------------------------------------------------* + * Conversion to single path * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaGenerateSinglePath() + * + * \param[in] ccba + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates a single border in local pixel coordinates.
+ *          For each c.c., if there is just an outer border, copy it.
+ *          If there are also hole borders, for each hole border,
+ *          determine the smallest horizontal or vertical
+ *          distance from the border to the outside of the c.c.,
+ *          and find a path through the c.c. for this cut.
+ *          We do this in a way that guarantees a pixel from the
+ *          hole border is the starting point of the path, and
+ *          we must verify that the path intersects the outer
+ *          border (if it intersects it, then it ends on it).
+ *          One can imagine pathological cases, but they may not
+ *          occur in images of text characters and un-textured
+ *          line graphics.
+ *      (2) Once it is verified that the path through the c.c.
+ *          intersects both the hole and outer borders, we
+ *          generate the full single path for all borders in the
+ *          c.c.  Starting at the start point on the outer
+ *          border, when we hit a line on a cut, we take
+ *          the cut, do the hold border, and return on the cut
+ *          to the outer border.  We compose a pta of the
+ *          outer border pts that are on cut paths, and for
+ *          every point on the outer border (as we go around),
+ *          we check against this pta.  When we find a matching
+ *          point in the pta, we do its cut path and hole border.
+ *          The single path is saved in the ccb.
+ * 
+ */ +l_ok +ccbaGenerateSinglePath(CCBORDA *ccba) +{ +l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes; +l_int32 x, y, xl, yl, xf, yf; +BOX *boxinner; +BOXA *boxa; +CCBORD *ccb; +PTA *pta, *ptac, *ptah; +PTA *ptahc; /* cyclic permutation of hole border, with end pts at cut */ +PTA *ptas; /* output result: new single path for c.c. */ +PTA *ptaf; /* points on the hole borders that intersect with cuts */ +PTA *ptal; /* points on outer border that intersect with cuts */ +PTA *ptap, *ptarp; /* path and reverse path between borders */ +PTAA *ptaa; +PTAA *ptaap; /* ptaa for all paths between borders */ + + PROCNAME("ccbaGenerateSinglePath"); + + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + ncc = ccbaGetCount(ccba); /* number of c.c. */ + lostholes = 0; + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if ((ptaa = ccb->local) == NULL) { + L_WARNING("local pixel loc array not found\n", procName); + continue; + } + nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ + + /* Prepare the output pta */ + if (ccb->splocal) + ptaDestroy(&ccb->splocal); + ptas = ptaCreate(0); + ccb->splocal = ptas; + + /* If no holes, just concat the outer border */ + pta = ptaaGetPta(ptaa, 0, L_CLONE); + if (nb == 1 || nb > NMAX_HOLES + 1) { + ptaJoin(ptas, pta, 0, -1); + ptaDestroy(&pta); /* remove clone */ + ccbDestroy(&ccb); /* remove clone */ + continue; + } + + /* Find the (nb - 1) cut paths that connect holes + * with outer border */ + boxa = ccb->boxa; + ptaap = ptaaCreate(nb - 1); + ptaf = ptaCreate(nb - 1); + ptal = ptaCreate(nb - 1); + for (j = 1; j < nb; j++) { + boxinner = boxaGetBox(boxa, j, L_CLONE); + + /* Find a short path and store it */ + ptac = getCutPathForHole(ccb->pix, pta, boxinner, &dir, &len); + if (len == 0) { /* bad: we lose the hole! */ + lostholes++; +/* boxPrintStreamInfo(stderr, boxa->box[0]); */ + } + ptaaAddPta(ptaap, ptac, L_INSERT); +/* fprintf(stderr, "dir = %d, length = %d\n", dir, len); */ +/* ptaWriteStream(stderr, ptac, 1); */ + + /* Store the first and last points in the cut path, + * which must be on a hole border and the outer + * border, respectively */ + ncut = ptaGetCount(ptac); + if (ncut == 0) { /* missed hole; neg coords won't match */ + ptaAddPt(ptaf, -1, -1); + ptaAddPt(ptal, -1, -1); + } else { + ptaGetIPt(ptac, 0, &x, &y); + ptaAddPt(ptaf, x, y); + ptaGetIPt(ptac, ncut - 1, &x, &y); + ptaAddPt(ptal, x, y); + } + boxDestroy(&boxinner); + } + + /* Make a single path for the c.c. using these connections */ + npt = ptaGetCount(pta); /* outer border pts */ + for (k = 0; k < npt; k++) { + ptaGetIPt(pta, k, &x, &y); + if (k == 0) { /* if there is a cut at the first point, + * we can wait until the end to take it */ + ptaAddPt(ptas, x, y); + continue; + } + state = L_NOT_FOUND; + for (j = 0; j < nb - 1; j++) { /* iterate over cut end pts */ + ptaGetIPt(ptal, j, &xl, &yl); /* cut point on outer border */ + if (x == xl && y == yl) { /* take this cut to the hole */ + state = L_FOUND; + ptap = ptaaGetPta(ptaap, j, L_CLONE); + ptarp = ptaReverse(ptap, 1); + /* Cut point on hole border: */ + ptaGetIPt(ptaf, j, &xf, &yf); + /* Hole border: */ + ptah = ptaaGetPta(ptaa, j + 1, L_CLONE); + ptahc = ptaCyclicPerm(ptah, xf, yf); +/* ptaWriteStream(stderr, ptahc, 1); */ + ptaJoin(ptas, ptarp, 0, -1); + ptaJoin(ptas, ptahc, 0, -1); + ptaJoin(ptas, ptap, 0, -1); + ptaDestroy(&ptap); + ptaDestroy(&ptarp); + ptaDestroy(&ptah); + ptaDestroy(&ptahc); + break; + } + } + if (state == L_NOT_FOUND) + ptaAddPt(ptas, x, y); + } + +/* ptaWriteStream(stderr, ptas, 1); */ + ptaaDestroy(&ptaap); + ptaDestroy(&ptaf); + ptaDestroy(&ptal); + ptaDestroy(&pta); /* remove clone */ + ccbDestroy(&ccb); /* remove clone */ + } + + if (lostholes > 0) + L_WARNING("***** %d lost holes *****\n", procName, lostholes); + + return 0; +} + + +/*! + * \brief getCutPathForHole() + * + * \param[in] pix 1 bpp, of c.c. + * \param[in] pta of outer border + * \param[in] boxinner bounding box of hole path + * \param[out] pdir direction (0-3), returned; only needed for debug + * \param[out] plen length of path, returned + * \return pta of pts on cut path from the hole border + * to the outer border, including end points on + * both borders; or NULL on error + * + *
+ * Notes:
+ *      (1) If we don't find a path, we return a pta with no pts
+ *          in it and len = 0.
+ *      (2) The goal is to get a reasonably short path between the
+ *          inner and outer borders, that goes entirely within the fg of
+ *          the pix.  This function is cheap-and-dirty, may fail for some
+ *          holes in complex topologies such as those you might find in a
+ *          moderately dark scanned halftone.  If it fails to find a
+ *          path to any particular hole, it gives a warning, and because
+ *          that hole path is not included, the hole will not be rendered.
+ * 
+ */ +PTA * +getCutPathForHole(PIX *pix, + PTA *pta, + BOX *boxinner, + l_int32 *pdir, + l_int32 *plen) +{ +l_int32 w, h, nc, x, y, xl, yl, xmid, ymid; +l_uint32 val; +PTA *ptac; + + PROCNAME("getCutPathForHole"); + + if (!pix) + return (PTA *)ERROR_PTR("pix not defined", procName, NULL); + if (!pta) + return (PTA *)ERROR_PTR("pta not defined", procName, NULL); + if (!boxinner) + return (PTA *)ERROR_PTR("boxinner not defined", procName, NULL); + + w = pixGetWidth(pix); + h = pixGetHeight(pix); + + if ((ptac = ptaCreate(4)) == NULL) + return (PTA *)ERROR_PTR("ptac not made", procName, NULL); + xmid = boxinner->x + boxinner->w / 2; + ymid = boxinner->y + boxinner->h / 2; + + /* try top first */ + for (y = ymid; y >= 0; y--) { + pixGetPixel(pix, xmid, y, &val); + if (val == 1) { + ptaAddPt(ptac, xmid, y); + break; + } + } + for (y = y - 1; y >= 0; y--) { + pixGetPixel(pix, xmid, y, &val); + if (val == 1) + ptaAddPt(ptac, xmid, y); + else + break; + } + nc = ptaGetCount(ptac); + ptaGetIPt(ptac, nc - 1, &xl, &yl); + if (ptaContainsPt(pta, xl, yl)) { + *pdir = 1; + *plen = nc; + return ptac; + } + + /* Next try bottom */ + ptaEmpty(ptac); + for (y = ymid; y < h; y++) { + pixGetPixel(pix, xmid, y, &val); + if (val == 1) { + ptaAddPt(ptac, xmid, y); + break; + } + } + for (y = y + 1; y < h; y++) { + pixGetPixel(pix, xmid, y, &val); + if (val == 1) + ptaAddPt(ptac, xmid, y); + else + break; + } + nc = ptaGetCount(ptac); + ptaGetIPt(ptac, nc - 1, &xl, &yl); + if (ptaContainsPt(pta, xl, yl)) { + *pdir = 3; + *plen = nc; + return ptac; + } + + /* Next try left */ + ptaEmpty(ptac); + for (x = xmid; x >= 0; x--) { + pixGetPixel(pix, x, ymid, &val); + if (val == 1) { + ptaAddPt(ptac, x, ymid); + break; + } + } + for (x = x - 1; x >= 0; x--) { + pixGetPixel(pix, x, ymid, &val); + if (val == 1) + ptaAddPt(ptac, x, ymid); + else + break; + } + nc = ptaGetCount(ptac); + ptaGetIPt(ptac, nc - 1, &xl, &yl); + if (ptaContainsPt(pta, xl, yl)) { + *pdir = 0; + *plen = nc; + return ptac; + } + + /* Finally try right */ + ptaEmpty(ptac); + for (x = xmid; x < w; x++) { + pixGetPixel(pix, x, ymid, &val); + if (val == 1) { + ptaAddPt(ptac, x, ymid); + break; + } + } + for (x = x + 1; x < w; x++) { + pixGetPixel(pix, x, ymid, &val); + if (val == 1) + ptaAddPt(ptac, x, ymid); + else + break; + } + nc = ptaGetCount(ptac); + ptaGetIPt(ptac, nc - 1, &xl, &yl); + if (ptaContainsPt(pta, xl, yl)) { + *pdir = 2; + *plen = nc; + return ptac; + } + + /* If we get here, we've failed! */ + ptaEmpty(ptac); + L_WARNING("no path found\n", procName); + *plen = 0; + return ptac; +} + + + +/*---------------------------------------------------------------------* + * Border rendering * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaDisplayBorder() + * + * \param[in] ccba + * \return pix of border pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses global ptaa, which gives each border pixel in
+ *          global coordinates, and must be computed in advance
+ *          by calling ccbaGenerateGlobalLocs().
+ * 
+ */ +PIX * +ccbaDisplayBorder(CCBORDA *ccba) +{ +l_int32 ncc, nb, n, i, j, k, x, y; +CCBORD *ccb; +PIX *pixd; +PTAA *ptaa; +PTA *pta; + + PROCNAME("ccbaDisplayBorder"); + + if (!ccba) + return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); + + if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if ((ptaa = ccb->global) == NULL) { + L_WARNING("global pixel loc array not found", procName); + continue; + } + nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ + for (j = 0; j < nb; j++) { + pta = ptaaGetPta(ptaa, j, L_CLONE); + n = ptaGetCount(pta); /* number of pixels in the border */ + for (k = 0; k < n; k++) { + ptaGetIPt(pta, k, &x, &y); + pixSetPixel(pixd, x, y, 1); + } + ptaDestroy(&pta); + } + ccbDestroy(&ccb); + } + + return pixd; +} + + +/*! + * \brief ccbaDisplaySPBorder() + * + * \param[in] ccba + * \return pix of border pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses spglobal pta, which gives each border pixel in
+ *          global coordinates, one path per c.c., and must
+ *          be computed in advance by calling ccbaGenerateSPGlobalLocs().
+ * 
+ */ +PIX * +ccbaDisplaySPBorder(CCBORDA *ccba) +{ +l_int32 ncc, npt, i, j, x, y; +CCBORD *ccb; +PIX *pixd; +PTA *ptag; + + PROCNAME("ccbaDisplaySPBorder"); + + if (!ccba) + return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); + + if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + ncc = ccbaGetCount(ccba); /* number of c.c. */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if ((ptag = ccb->spglobal) == NULL) { + L_WARNING("spglobal pixel loc array not found\n", procName); + continue; + } + npt = ptaGetCount(ptag); /* number of pixels on path */ + for (j = 0; j < npt; j++) { + ptaGetIPt(ptag, j, &x, &y); + pixSetPixel(pixd, x, y, 1); + } + ccbDestroy(&ccb); /* clone ref */ + } + + return pixd; +} + + +/*! + * \brief ccbaDisplayImage1() + * + * \param[in] ccba + * \return pix of image, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses local ptaa, which gives each border pixel in
+ *          local coordinates, so the actual pixel positions must
+ *          be computed using all offsets.
+ *      (2) For the holes, use coordinates relative to the c.c.
+ *      (3) This is slower than Method 2.
+ *      (4) This uses topological properties (Method 1) to do scan
+ *          conversion to raster
+ *
+ *  This algorithm deserves some commentary.
+ *
+ *  I first tried the following:
+ *    ~ outer borders: 4-fill from outside, stopping at the
+ *         border, using pixFillClosedBorders()
+ *    ~ inner borders: 4-fill from outside, stopping again
+ *         at the border, XOR with the border, and invert
+ *         to get the hole.  This did not work, because if
+ *         you have a hole border that looks like:
+ *
+ *                x x x x x x
+ *                x          x
+ *                x   x x x   x
+ *                  x x o x   x
+ *                      x     x
+ *                      x     x
+ *                        x x x
+ *
+ *         if you 4-fill from the outside, the pixel 'o' will
+ *         not be filled!  XORing with the border leaves it OFF.
+ *         Inverting then gives a single bad ON pixel that is not
+ *         actually part of the hole.
+ *
+ *  So what you must do instead is 4-fill the holes from inside.
+ *  You can do this from a seedfill, using a pix with the hole
+ *  border as the filling mask.  But you need to start with a
+ *  pixel inside the hole.  How is this determined?  The best
+ *  way is from the contour.  We have a right-hand shoulder
+ *  rule for inside (i.e., the filled region).   Take the
+ *  first 2 pixels of the hole border, and compute dx and dy
+ *  (second coord minus first coord:  dx = sx - fx, dy = sy - fy).
+ *  There are 8 possibilities, depending on the values of dx and
+ *  dy (which can each be -1, 0, and +1, but not both 0).
+ *  These 8 cases can be broken into 4; see the simple algorithm below.
+ *  Once you have an interior seed pixel, you fill from the seed,
+ *  clipping with the hole border pix by filling into its invert.
+ *
+ *  You then successively XOR these interior filled components, in any order.
+ * 
+ */ +PIX * +ccbaDisplayImage1(CCBORDA *ccba) +{ +l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h; +l_int32 fpx, fpy, spx, spy, xs, ys; +BOX *box; +BOXA *boxa; +CCBORD *ccb; +PIX *pixd, *pixt, *pixh; +PTAA *ptaa; +PTA *pta; + + PROCNAME("ccbaDisplayImage1"); + + if (!ccba) + return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); + + if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + ncc = ccbaGetCount(ccba); + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if ((boxa = ccb->boxa) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("boxa not found", procName, NULL); + } + + /* Render border in pixt */ + if ((ptaa = ccb->local) == NULL) { + L_WARNING("local chain array not found\n", procName); + continue; + } + + nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ + for (j = 0; j < nb; j++) { + if ((box = boxaGetBox(boxa, j, L_CLONE)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("b. box not found", procName, NULL); + } + if (j == 0) { + boxGetGeometry(box, &xul, &yul, &w, &h); + xoff = yoff = 0; + } else { + boxGetGeometry(box, &xoff, &yoff, &w, &h); + } + boxDestroy(&box); + + /* Render the border in a minimum-sized pix; + * subtract xoff and yoff because the pixel + * location is stored relative to the c.c., but + * we need it relative to just the hole border. */ + if ((pixt = pixCreate(w, h, 1)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + pta = ptaaGetPta(ptaa, j, L_CLONE); + n = ptaGetCount(pta); /* number of pixels in the border */ + for (k = 0; k < n; k++) { + ptaGetIPt(pta, k, &x, &y); + pixSetPixel(pixt, x - xoff, y - yoff, 1); + if (j > 0) { /* need this for finding hole border pixel */ + if (k == 0) { + fpx = x - xoff; + fpy = y - yoff; + } + if (k == 1) { + spx = x - xoff; + spy = y - yoff; + } + } + } + ptaDestroy(&pta); + + /* Get the filled component */ + if (j == 0) { /* if outer border, fill from outer boundary */ + if ((pixh = pixFillClosedBorders(pixt, 4)) == NULL) { + pixDestroy(&pixd); + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("pixh not made", procName, NULL); + } + } else { /* fill the hole from inside */ + /* get the location of a seed pixel in the hole */ + locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); + + /* Put seed in hole and fill interior of hole, + * using pixt as clipping mask */ + pixh = pixCreateTemplate(pixt); + pixSetPixel(pixh, xs, ys, 1); /* put seed pixel in hole */ + pixInvert(pixt, pixt); /* to make filling mask */ + pixSeedfillBinary(pixh, pixh, pixt, 4); /* 4-fill hole */ + } + + /* XOR into the dest */ + pixRasterop(pixd, xul + xoff, yul + yoff, w, h, PIX_XOR, + pixh, 0, 0); + pixDestroy(&pixt); + pixDestroy(&pixh); + } + ccbDestroy(&ccb); + } + return pixd; +} + + + +/*! + * \brief ccbaDisplayImage2() + * + * \param[in] ccba + * \return pix of image, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses local chain ptaa, which gives each border pixel in
+ *          local coordinates, so the actual pixel positions must
+ *          be computed using all offsets.
+ *      (2) Treats exterior and hole borders on equivalent
+ *          footing, and does all calculations on a pix
+ *          that spans the c.c. with a 1 pixel added boundary.
+ *      (3) This uses topological properties (Method 2) to do scan
+ *          conversion to raster
+ *      (4) The algorithm is described at the top of this file (Method 2).
+ *          It is preferred to Method 1 because it is between 1.2x and 2x
+ *          faster than Method 1.
+ * 
+ */ +PIX * +ccbaDisplayImage2(CCBORDA *ccba) +{ +l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h; +l_int32 fpx, fpy, spx, spy, xs, ys; +BOXA *boxa; +CCBORD *ccb; +PIX *pixd, *pixc, *pixs; +PTAA *ptaa; +PTA *pta; + + PROCNAME("ccbaDisplayImage2"); + + if (!ccba) + return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); + + if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + ncc = ccbaGetCount(ccba); + for (i = 0; i < ncc; i++) { + /* Generate clipping mask from border pixels and seed image + * from one seed for each closed border. */ + ccb = ccbaGetCcb(ccba, i); + if ((boxa = ccb->boxa) == NULL) { + pixDestroy(&pixd); + ccbDestroy(&ccb); + return (PIX *)ERROR_PTR("boxa not found", procName, NULL); + } + if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, &w, &h)) { + pixDestroy(&pixd); + ccbDestroy(&ccb); + return (PIX *)ERROR_PTR("b. box not found", procName, NULL); + } + pixc = pixCreate(w + 2, h + 2, 1); + pixs = pixCreateTemplate(pixc); + + if ((ptaa = ccb->local) == NULL) { + pixDestroy(&pixc); + pixDestroy(&pixs); + ccbDestroy(&ccb); + L_WARNING("local chain array not found\n", procName); + continue; + } + nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ + for (j = 0; j < nb; j++) { + pta = ptaaGetPta(ptaa, j, L_CLONE); + n = ptaGetCount(pta); /* number of pixels in the border */ + + /* Render border pixels in pixc */ + for (k = 0; k < n; k++) { + ptaGetIPt(pta, k, &x, &y); + pixSetPixel(pixc, x + 1, y + 1, 1); + if (k == 0) { + fpx = x + 1; + fpy = y + 1; + } else if (k == 1) { + spx = x + 1; + spy = y + 1; + } + } + + /* Get and set seed pixel for this border in pixs */ + if (n > 1) + locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); + else /* isolated c.c. */ + xs = ys = 0; + pixSetPixel(pixs, xs, ys, 1); + ptaDestroy(&pta); + } + + /* Fill from seeds in pixs, using pixc as the clipping mask, + * to reconstruct the c.c. */ + pixInvert(pixc, pixc); /* to convert clipping -> filling mask */ + pixSeedfillBinary(pixs, pixs, pixc, 4); /* 4-fill */ + pixInvert(pixs, pixs); /* to make the c.c. */ + + /* XOR into the dest */ + pixRasterop(pixd, xul, yul, w, h, PIX_XOR, pixs, 1, 1); + + pixDestroy(&pixc); + pixDestroy(&pixs); + ccbDestroy(&ccb); /* ref-counted */ + } + return pixd; +} + + + +/*---------------------------------------------------------------------* + * Serialize for I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaWrite() + * + * \param[in] filename + * \param[in] ccba + * \return 0 if OK, 1 on error + */ +l_ok +ccbaWrite(const char *filename, + CCBORDA *ccba) +{ +FILE *fp; + + PROCNAME("ccbaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + if (ccbaWriteStream(fp, ccba)) { + fclose(fp); + return ERROR_INT("ccba not written to stream", procName, 1); + } + + fclose(fp); + return 0; +} + + + +/*! + * \brief ccbaWriteStream() + * + * \param[in] fp file stream + * \param[in] ccba + * \return 0 if OK; 1 on error + * + * Format: + * \code + * ccba: %7d cc\n num. c.c.) (ascii) (18B + * pix width 4B + * pix height 4B + * [for i = 1, ncc] + * ulx 4B + * uly 4B + * w 4B -- not req'd for reconstruction + * h 4B -- not req'd for reconstruction + * number of borders 4B + * [for j = 1, nb] + * startx 4B + * starty 4B + * [for k = 1, nb] + * 2 steps 1B + * end in z8 or 88 1B + * \endcode + */ +l_ok +ccbaWriteStream(FILE *fp, + CCBORDA *ccba) +{ +char strbuf[256]; +l_uint8 bval; +l_uint8 *datain, *dataout; +l_int32 i, j, k, bx, by, bw, bh, val, startx, starty; +l_int32 ncc, nb, n; +l_uint32 w, h; +size_t inbytes, outbytes; +L_BBUFFER *bbuf; +CCBORD *ccb; +NUMA *na; +NUMAA *naa; +PTA *pta; + + PROCNAME("ccbaWriteStream"); + +#if !HAVE_LIBZ /* defined in environ.h */ + return ERROR_INT("no libz: can't write data", procName, 1); +#else + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + if ((bbuf = bbufferCreate(NULL, 1000)) == NULL) + return ERROR_INT("bbuf not made", procName, 1); + + ncc = ccbaGetCount(ccba); + snprintf(strbuf, sizeof(strbuf), "ccba: %7d cc\n", ncc); + bbufferRead(bbuf, (l_uint8 *)strbuf, 18); + w = pixGetWidth(ccba->pix); + h = pixGetHeight(ccba->pix); + bbufferRead(bbuf, (l_uint8 *)&w, 4); /* width */ + bbufferRead(bbuf, (l_uint8 *)&h, 4); /* height */ + for (i = 0; i < ncc; i++) { + ccb = ccbaGetCcb(ccba, i); + if (boxaGetBoxGeometry(ccb->boxa, 0, &bx, &by, &bw, &bh)) { + bbufferDestroy(&bbuf); + return ERROR_INT("bounding box not found", procName, 1); + } + bbufferRead(bbuf, (l_uint8 *)&bx, 4); /* ulx of c.c. */ + bbufferRead(bbuf, (l_uint8 *)&by, 4); /* uly of c.c. */ + bbufferRead(bbuf, (l_uint8 *)&bw, 4); /* w of c.c. */ + bbufferRead(bbuf, (l_uint8 *)&bh, 4); /* h of c.c. */ + if ((naa = ccb->step) == NULL) { + ccbaGenerateStepChains(ccba); + naa = ccb->step; + } + nb = numaaGetCount(naa); + bbufferRead(bbuf, (l_uint8 *)&nb, 4); /* number of borders in c.c. */ + pta = ccb->start; + for (j = 0; j < nb; j++) { + ptaGetIPt(pta, j, &startx, &starty); + bbufferRead(bbuf, (l_uint8 *)&startx, 4); /* starting x in border */ + bbufferRead(bbuf, (l_uint8 *)&starty, 4); /* starting y in border */ + na = numaaGetNuma(naa, j, L_CLONE); + n = numaGetCount(na); + for (k = 0; k < n; k++) { + numaGetIValue(na, k, &val); + if (k % 2 == 0) + bval = (l_uint8)val << 4; + else + bval |= (l_uint8)val; + if (k % 2 == 1) + bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* 2 border steps */ + } + if (n % 2 == 1) { + bval |= 0x8; + bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0xz8, */ + /* where z = {0..7} */ + } else { /* n % 2 == 0 */ + bval = 0x88; + bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0x88 */ + } + numaDestroy(&na); + } + ccbDestroy(&ccb); + } + + datain = bbufferDestroyAndSaveData(&bbuf, &inbytes); + dataout = zlibCompress(datain, inbytes, &outbytes); + fwrite(dataout, 1, outbytes, fp); + + LEPT_FREE(datain); + LEPT_FREE(dataout); + return 0; + +#endif /* !HAVE_LIBZ */ +} + + +/*! + * \brief ccbaRead() + * + * \param[in] filename + * \return ccba, or NULL on error + */ +CCBORDA * +ccbaRead(const char *filename) +{ +FILE *fp; +CCBORDA *ccba; + + PROCNAME("ccbaRead"); + + if (!filename) + return (CCBORDA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (CCBORDA *)ERROR_PTR("stream not opened", procName, NULL); + ccba = ccbaReadStream(fp); + fclose(fp); + + if (!ccba) + return (CCBORDA *)ERROR_PTR("ccba not returned", procName, NULL); + return ccba; +} + + +/*! + * \brief ccbaReadStream() + * + * \param[in] fp file stream + * \return ccba, or NULL on error + * + * \code + * Format: ccba: %7d cc\n num. c.c.) (ascii) (17B + * pix width 4B + * pix height 4B + * [for i = 1, ncc] + * ulx 4B + * uly 4B + * w 4B -- not req'd for reconstruction + * h 4B -- not req'd for reconstruction + * number of borders 4B + * [for j = 1, nb] + * startx 4B + * starty 4B + * [for k = 1, nb] + * 2 steps 1B + * end in z8 or 88 1B + * \endcode + */ +CCBORDA * +ccbaReadStream(FILE *fp) +{ +char strbuf[256]; +l_uint8 bval; +l_uint8 *datain, *dataout; +l_int32 i, j, startx, starty; +l_int32 offset, nib1, nib2; +l_int32 ncc, nb; +l_uint32 width, height, w, h, xoff, yoff; +size_t inbytes, outbytes; +BOX *box; +CCBORD *ccb; +CCBORDA *ccba; +NUMA *na; +NUMAA *step; + + PROCNAME("ccbaReadStream"); + +#if !HAVE_LIBZ /* defined in environ.h */ + return (CCBORDA *)ERROR_PTR("no libz: can't read data", procName, NULL); +#else + + if (!fp) + return (CCBORDA *)ERROR_PTR("stream not open", procName, NULL); + + if ((datain = l_binaryReadStream(fp, &inbytes)) == NULL) + return (CCBORDA *)ERROR_PTR("data not read from file", procName, NULL); + dataout = zlibUncompress(datain, inbytes, &outbytes); + LEPT_FREE(datain); + if (!dataout) + return (CCBORDA *)ERROR_PTR("dataout not made", procName, NULL); + + offset = 18; + memcpy(strbuf, dataout, offset); + strbuf[17] = '\0'; + if (memcmp(strbuf, "ccba:", 5) != 0) { + LEPT_FREE(dataout); + return (CCBORDA *)ERROR_PTR("file not type ccba", procName, NULL); + } + sscanf(strbuf, "ccba: %7d cc\n", &ncc); +/* fprintf(stderr, "ncc = %d\n", ncc); */ + if ((ccba = ccbaCreate(NULL, ncc)) == NULL) { + LEPT_FREE(dataout); + return (CCBORDA *)ERROR_PTR("ccba not made", procName, NULL); + } + + memcpy(&width, dataout + offset, 4); + offset += 4; + memcpy(&height, dataout + offset, 4); + offset += 4; + ccba->w = width; + ccba->h = height; +/* fprintf(stderr, "width = %d, height = %d\n", width, height); */ + + for (i = 0; i < ncc; i++) { /* should be ncc */ + ccb = ccbCreate(NULL); + ccbaAddCcb(ccba, ccb); + + memcpy(&xoff, dataout + offset, 4); + offset += 4; + memcpy(&yoff, dataout + offset, 4); + offset += 4; + memcpy(&w, dataout + offset, 4); + offset += 4; + memcpy(&h, dataout + offset, 4); + offset += 4; + box = boxCreate(xoff, yoff, w, h); + boxaAddBox(ccb->boxa, box, L_INSERT); +/* fprintf(stderr, "xoff = %d, yoff = %d, w = %d, h = %d\n", + xoff, yoff, w, h); */ + + memcpy(&nb, dataout + offset, 4); + offset += 4; +/* fprintf(stderr, "num borders = %d\n", nb); */ + step = numaaCreate(nb); + ccb->step = step; + + for (j = 0; j < nb; j++) { /* should be nb */ + memcpy(&startx, dataout + offset, 4); + offset += 4; + memcpy(&starty, dataout + offset, 4); + offset += 4; + ptaAddPt(ccb->start, startx, starty); +/* fprintf(stderr, "startx = %d, starty = %d\n", startx, starty); */ + na = numaCreate(0); + numaaAddNuma(step, na, L_INSERT); + + while(1) { + bval = *(dataout + offset); + offset++; + nib1 = (bval >> 4); + nib2 = bval & 0xf; + if (nib1 != 8) + numaAddNumber(na, nib1); + else + break; + if (nib2 != 8) + numaAddNumber(na, nib2); + else + break; + } + } + } + LEPT_FREE(dataout); + return ccba; + +#endif /* !HAVE_LIBZ */ +} + + +/*---------------------------------------------------------------------* + * SVG Output * + *---------------------------------------------------------------------*/ +/*! + * \brief ccbaWriteSVG() + * + * \param[in] filename + * \param[in] ccba + * \return 0 if OK, 1 on error + */ +l_ok +ccbaWriteSVG(const char *filename, + CCBORDA *ccba) +{ +char *svgstr; + + PROCNAME("ccbaWriteSVG"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!ccba) + return ERROR_INT("ccba not defined", procName, 1); + + if ((svgstr = ccbaWriteSVGString(filename, ccba)) == NULL) + return ERROR_INT("svgstr not made", procName, 1); + + l_binaryWrite(filename, "w", svgstr, strlen(svgstr)); + LEPT_FREE(svgstr); + + return 0; +} + + +/*! + * \brief ccbaWriteSVGString() + * + * \param[in] filename + * \param[in] ccba + * \return string in svg-formatted, that can be written to file, + * or NULL on error. + */ +char * +ccbaWriteSVGString(const char *filename, + CCBORDA *ccba) +{ +char *svgstr; +char smallbuf[256]; +char line0[] = ""; +char line1[] = ""; +char line2[] = ""; +char line3[] = ""; +char line5[] = ""; +char space[] = " "; +l_int32 i, j, ncc, npt, x, y; +CCBORD *ccb; +PTA *pta; +SARRAY *sa; + + PROCNAME("ccbaWriteSVGString"); + + if (!filename) + return (char *)ERROR_PTR("filename not defined", procName, NULL); + if (!ccba) + return (char *)ERROR_PTR("ccba not defined", procName, NULL); + + sa = sarrayCreate(0); + sarrayAddString(sa, line0, L_COPY); + sarrayAddString(sa, line1, L_COPY); + sarrayAddString(sa, line2, L_COPY); + ncc = ccbaGetCount(ccba); + for (i = 0; i < ncc; i++) { + if ((ccb = ccbaGetCcb(ccba, i)) == NULL) { + sarrayDestroy(&sa); + return (char *)ERROR_PTR("ccb not found", procName, NULL); + } + if ((pta = ccb->spglobal) == NULL) { + sarrayDestroy(&sa); + ccbDestroy(&ccb); + return (char *)ERROR_PTR("spglobal not made", procName, NULL); + } + sarrayAddString(sa, line3, L_COPY); + npt = ptaGetCount(pta); + for (j = 0; j < npt; j++) { + ptaGetIPt(pta, j, &x, &y); + snprintf(smallbuf, sizeof(smallbuf), "%0d,%0d", x, y); + sarrayAddString(sa, smallbuf, L_COPY); + } + sarrayAddString(sa, line4, L_COPY); + ccbDestroy(&ccb); + } + sarrayAddString(sa, line5, L_COPY); + sarrayAddString(sa, space, L_COPY); + + svgstr = sarrayToString(sa, 1); +/* fprintf(stderr, "%s", svgstr); */ + + sarrayDestroy(&sa); + return svgstr; +} diff --git a/3rdparty/hgOCR/leptonica/ccbord.h b/3rdparty/hgOCR/leptonica/ccbord.h new file mode 100644 index 00000000..cccef6eb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ccbord.h @@ -0,0 +1,121 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_CCBORD_H +#define LEPTONICA_CCBORD_H + +/*! + * \file ccbord.h + * + *
+ *           CCBord:   represents a single connected component
+ *           CCBorda:  an array of CCBord
+ * 
+ */ + + /*! Use in ccbaStepChainsToPixCoords() */ +/*! CCB Coords */ +enum { + CCB_LOCAL_COORDS = 1, + CCB_GLOBAL_COORDS = 2 +}; + + /*! Use in ccbaGenerateSPGlobalLocs() */ +/*! CCB Points */ +enum { + CCB_SAVE_ALL_PTS = 1, + CCB_SAVE_TURNING_PTS = 2 +}; + + + /*! + *
+     * CCBord contains:
+     *
+     *    (1) a minimally-clipped bitmap of the component (pix),
+     *    (2) a boxa consisting of:
+     *          for the primary component:
+     *                (xul, yul) pixel location in global coords
+     *                (w, h) of the bitmap
+     *          for the hole components:
+     *                (x, y) in relative coordinates in primary component
+     *                (w, h) of the hole border (which is 2 pixels
+     *                       larger in each direction than the hole itself)
+     *    (3) a pta ('start') of the initial border pixel location for each
+     *        closed curve, all in relative coordinates of the primary
+     *        component.  This is given for the primary component,
+     *        followed by the hole components, if any.
+     *    (4) a refcount of the ccbord; used internally when a ccbord
+     *        is accessed from a ccborda (array of ccbord)
+     *    (5) a ptaa for the chain code for the border in relative
+     *        coordinates, where the first pta is the exterior border
+     *        and all other pta are for interior borders (holes)
+     *    (6) a ptaa for the global pixel loc rendition of the border,
+     *        where the first pta is the exterior border and all other
+     *        pta are for interior borders (holes).
+     *        This is derived from the local or step chain code.
+     *    (7) a numaa for the chain code for the border as orientation
+     *        directions between successive border pixels, where
+     *        the first numa is the exterior border and all other
+     *        numa are for interior borders (holes).  This is derived
+     *        from the local chain code.  The 8 directions are 0 - 7.
+     *    (8) a pta for a single chain for each c.c., comprised of outer
+     *        and hole borders, plus cut paths between them, all in
+     *        local coords.
+     *    (9) a pta for a single chain for each c.c., comprised of outer
+     *        and hole borders, plus cut paths between them, all in
+     *        global coords.
+     * 
+ */ +struct CCBord +{ + struct Pix *pix; /*!< component bitmap (min size) */ + struct Boxa *boxa; /*!< regions of each closed curve */ + struct Pta *start; /*!< initial border pixel locations */ + l_int32 refcount; /*!< number of handles; start at 1 */ + struct Ptaa *local; /*!< ptaa of chain pixels (local) */ + struct Ptaa *global; /*!< ptaa of chain pixels (global) */ + struct Numaa *step; /*!< numaa of chain code (step dir) */ + struct Pta *splocal; /*!< pta of single chain (local) */ + struct Pta *spglobal; /*!< pta of single chain (global) */ +}; +typedef struct CCBord CCBORD; + +/*! Array of CCBord */ +struct CCBorda +{ + struct Pix *pix; /*!< input pix (may be null) */ + l_int32 w; /*!< width of pix */ + l_int32 h; /*!< height of pix */ + l_int32 n; /*!< number of ccbord in ptr array */ + l_int32 nalloc; /*!< number of ccbord ptrs allocated */ + struct CCBord **ccb; /*!< ccb ptr array */ +}; +typedef struct CCBorda CCBORDA; + + +#endif /* LEPTONICA_CCBORD_H */ + diff --git a/3rdparty/hgOCR/leptonica/ccthin.c b/3rdparty/hgOCR/leptonica/ccthin.c new file mode 100644 index 00000000..f6220345 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ccthin.c @@ -0,0 +1,472 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file ccthin.c + *
+ *
+ *     PIXA   *pixaThinConnected()
+ *     PIX    *pixThinConnected()
+ *     PIX    *pixThinConnectedBySet()
+ *     SELA   *selaMakeThinSets()
+ * 
+ */ + +#include "allheaders.h" + + /* ------------------------------------------------------------ + * The sels used here (and their rotated counterparts) are the + * useful 3x3 Sels for thinning. They are defined in sel2.c, + * and the sets are constructed in selaMakeThinSets(). + * The notation is based on "Connectivity-preserving morphological + * image transformations", a version of which can be found at + * http://www.leptonica.com/papers/conn.pdf + * ------------------------------------------------------------ */ + +/*----------------------------------------------------------------* + * CC-preserving thinning * + *----------------------------------------------------------------*/ +/*! + * \brief pixaThinConnected() + * + * \param[in] pixas of 1 bpp pix + * \param[in] type L_THIN_FG, L_THIN_BG + * \param[in] connectivity 4 or 8 + * \param[in] maxiters max number of iters allowed; + * use 0 to iterate until completion + * \return pixds, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes in pixThinConnected().
+ * 
+ */ +PIXA * +pixaThinConnected(PIXA *pixas, + l_int32 type, + l_int32 connectivity, + l_int32 maxiters) +{ +l_int32 i, n, d, same; +PIX *pix1, *pix2; +PIXA *pixad; +SELA *sela; + + PROCNAME("pixaThinConnected"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_THIN_FG && type != L_THIN_BG) + return (PIXA *)ERROR_PTR("invalid fg/bg type", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (maxiters == 0) maxiters = 10000; + + pixaVerifyDepth(pixas, &same, &d); + if (d != 1) + return (PIXA *)ERROR_PTR("pix are not all 1 bpp", procName, NULL); + + if (connectivity == 4) + sela = selaMakeThinSets(1, 0); + else /* connectivity == 8 */ + sela = selaMakeThinSets(5, 0); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixThinConnectedBySet(pix1, type, sela, maxiters); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + selaDestroy(&sela); + return pixad; +} + + +/*! + * \brief pixThinConnected() + * + * \param[in] pixs 1 bpp + * \param[in] type L_THIN_FG, L_THIN_BG + * \param[in] connectivity 4 or 8 + * \param[in] maxiters max number of iters allowed; + * use 0 to iterate until completion + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See "Connectivity-preserving morphological image transformations,"
+ *          Dan S. Bloomberg, in SPIE Visual Communications and Image
+ *          Processing, Conference 1606, pp. 320-334, November 1991,
+ *          Boston, MA.   A web version is available at
+ *              http://www.leptonica.com/papers/conn.pdf
+ *      (2) This is a simple interface for two of the best iterative
+ *          morphological thinning algorithms, for 4-c.c and 8-c.c.
+ *          Each iteration uses a mixture of parallel operations
+ *          (using several different 3x3 Sels) and serial operations.
+ *          Specifically, each thinning iteration consists of
+ *          four sequential thinnings from each of four directions.
+ *          Each of these thinnings is a parallel composite
+ *          operation, where the union of a set of HMTs are set
+ *          subtracted from the input.  For 4-cc thinning, we
+ *          use 3 HMTs in parallel, and for 8-cc thinning we use 4 HMTs.
+ *      (3) A "good" thinning algorithm is one that generates a skeleton
+ *          that is near the medial axis and has neither pruned
+ *          real branches nor left extra dendritic branches.
+ *      (4) Duality between operations on fg and bg require switching
+ *          the connectivity.  To thin the foreground, which is the usual
+ *          situation, use type == L_THIN_FG.  Thickening the foreground
+ *          is equivalent to thinning the background (type == L_THIN_BG),
+ *          where the alternate connectivity gets preserved.
+ *          For example, to thicken the fg with 2 rounds of iterations
+ *          using 4-c.c., thin the bg using Sels that preserve 8-connectivity:
+ *             Pix *pix = pixThinConnected(pixs, L_THIN_BG, 8, 2);
+ *      (5) This makes and destroys the sela set each time. It's not a large
+ *          overhead, but if you are calling this thousands of times on
+ *          very small images, you can avoid the overhead; e.g.
+ *             Sela *sela = selaMakeThinSets(1, 0);  // for 4-c.c.
+ *             Pix *pix = pixThinConnectedBySet(pixs, L_THIN_FG, sela, 0);
+ *          using set 1 for 4-c.c. and set 5 for 8-c.c operations.
+ * 
+ */ +PIX * +pixThinConnected(PIX *pixs, + l_int32 type, + l_int32 connectivity, + l_int32 maxiters) +{ +PIX *pixd; +SELA *sela; + + PROCNAME("pixThinConnected"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (type != L_THIN_FG && type != L_THIN_BG) + return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (maxiters == 0) maxiters = 10000; + + if (connectivity == 4) + sela = selaMakeThinSets(1, 0); + else /* connectivity == 8 */ + sela = selaMakeThinSets(5, 0); + + pixd = pixThinConnectedBySet(pixs, type, sela, maxiters); + + selaDestroy(&sela); + return pixd; +} + + +/*! + * \brief pixThinConnectedBySet() + * + * \param[in] pixs 1 bpp + * \param[in] type L_THIN_FG, L_THIN_BG + * \param[in] sela of Sels for parallel composite HMTs + * \param[in] maxiters max number of iters allowed; + * use 0 to iterate until completion + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes in pixThinConnected().
+ *      (2) This takes a sela representing one of 11 sets of HMT Sels.
+ *          The HMTs from this set are run in parallel and the result
+ *          is OR'd before being subtracted from the source.  For each
+ *          iteration, this "parallel" thin is performed four times
+ *          sequentially, for sels rotated by 90 degrees in all four
+ *          directions.
+ *      (3) The "parallel" and "sequential" nomenclature is standard
+ *          in digital filtering.  Here, "parallel" operations work on the
+ *          same source (pixd), and accumulate the results in a temp
+ *          image before actually applying them to the source (in this
+ *          case, using an in-place subtraction).  "Sequential" operations
+ *          operate directly on the source (pixd) to produce the result
+ *          (in this case, with four sequential thinning operations, one
+ *          from each of four directions).
+ * 
+ */ +PIX * +pixThinConnectedBySet(PIX *pixs, + l_int32 type, + SELA *sela, + l_int32 maxiters) +{ +l_int32 i, j, r, nsels, same; +PIXA *pixahmt; +PIX **pixhmt; /* array owned by pixahmt; do not destroy! */ +PIX *pix1, *pix2, *pixd; +SEL *sel, *selr; + + PROCNAME("pixThinConnectedBySet"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (type != L_THIN_FG && type != L_THIN_BG) + return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL); + if (!sela) + return (PIX *)ERROR_PTR("sela not defined", procName, NULL); + if (maxiters == 0) maxiters = 10000; + + /* Set up array of temp pix to hold hmts */ + nsels = selaGetCount(sela); + pixahmt = pixaCreate(nsels); + for (i = 0; i < nsels; i++) { + pix1 = pixCreateTemplate(pixs); + pixaAddPix(pixahmt, pix1, L_INSERT); + } + pixhmt = pixaGetPixArray(pixahmt); + if (!pixhmt) { + pixaDestroy(&pixahmt); + return (PIX *)ERROR_PTR("pixhmt array not made", procName, NULL); + } + + /* Set up initial image for fg thinning */ + if (type == L_THIN_FG) + pixd = pixCopy(NULL, pixs); + else /* bg thinning */ + pixd = pixInvert(NULL, pixs); + + /* Thin the fg, with up to maxiters iterations */ + for (i = 0; i < maxiters; i++) { + pix1 = pixCopy(NULL, pixd); /* test for completion */ + for (r = 0; r < 4; r++) { /* over 90 degree rotations of Sels */ + for (j = 0; j < nsels; j++) { /* over individual sels in sela */ + sel = selaGetSel(sela, j); /* not a copy */ + selr = selRotateOrth(sel, r); + pixHMT(pixhmt[j], pixd, selr); + selDestroy(&selr); + if (j > 0) + pixOr(pixhmt[0], pixhmt[0], pixhmt[j]); /* accum result */ + } + pixSubtract(pixd, pixd, pixhmt[0]); /* remove result */ + } + pixEqual(pixd, pix1, &same); + pixDestroy(&pix1); + if (same) { +/* L_INFO("%d iterations to completion\n", procName, i); */ + break; + } + } + + /* This is a bit tricky. If we're thickening the foreground, then + * we get a fg border of thickness equal to the number of + * iterations. This border is connected to all components that + * were initially touching the border, but as it grows, it does + * not touch other growing components -- it leaves a 1 pixel wide + * background between it and the growing components, and that + * thin background prevents the components from growing further. + * This border can be entirely removed as follows: + * (1) Subtract the original (unthickened) image pixs from the + * thickened image. This removes the pixels that were originally + * touching the border. + * (2) Get all remaining pixels that are connected to the border. + * (3) Remove those pixels from the thickened image. */ + if (type == L_THIN_BG) { + pixInvert(pixd, pixd); /* finish with duality */ + pix1 = pixSubtract(NULL, pixd, pixs); + pix2 = pixExtractBorderConnComps(pix1, 4); + pixSubtract(pixd, pixd, pix2); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixaDestroy(&pixahmt); + return pixd; +} + + +/*! + * \brief selaMakeThinSets() + * + * \param[in] index into specific sets + * \param[in] debug 1 to output display of sela + * \return sela, or NULL on error + * + *
+ * Notes:
+ *      (1) These are specific sets of HMTs to be used in parallel for
+ *          for thinning from each of four directions.
+ *      (2) The sets are indexed as follows:
+ *          For thinning (e.g., run to completion):
+ *              index = 1     sel_4_1, sel_4_2, sel_4_3
+ *              index = 2     sel_4_1, sel_4_5, sel_4_6
+ *              index = 3     sel_4_1, sel_4_7, sel_4_7_rot
+ *              index = 4     sel_48_1, sel_48_1_rot, sel_48_2
+ *              index = 5     sel_8_2, sel_8_3, sel_8_5, sel_8_6
+ *              index = 6     sel_8_2, sel_8_3, sel_48_2
+ *              index = 7     sel_8_1, sel_8_5, sel_8_6
+ *              index = 8     sel_8_2, sel_8_3, sel_8_8, sel_8_9
+ *              index = 9     sel_8_5, sel_8_6, sel_8_7, sel_8_7_rot
+ *          For thickening (e.g., just a few iterations):
+ *              index = 10    sel_4_2, sel_4_3
+ *              index = 11    sel_8_4
+ *      (3) For a very smooth skeleton, use set 1 for 4 connected and
+ *          set 5 for 8 connected thins.
+ * 
+ */ +SELA * +selaMakeThinSets(l_int32 index, + l_int32 debug) +{ +SEL *sel; +SELA *sela1, *sela2, *sela3; + + PROCNAME("selaMakeThinSets"); + + if (index < 1 || index > 11) + return (SELA *)ERROR_PTR("invalid index", procName, NULL); + + sela2 = selaCreate(4); + switch(index) + { + case 1: + sela1 = sela4ccThin(NULL); + selaFindSelByName(sela1, "sel_4_1", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_3", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 2: + sela1 = sela4ccThin(NULL); + selaFindSelByName(sela1, "sel_4_1", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_5", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_6", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 3: + sela1 = sela4ccThin(NULL); + selaFindSelByName(sela1, "sel_4_1", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_7", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + sel = selRotateOrth(sel, 1); + selaAddSel(sela2, sel, "sel_4_7_rot", L_INSERT); + break; + case 4: + sela1 = sela4and8ccThin(NULL); + selaFindSelByName(sela1, "sel_48_1", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + sel = selRotateOrth(sel, 1); + selaAddSel(sela2, sel, "sel_48_1_rot", L_INSERT); + selaFindSelByName(sela1, "sel_48_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 5: + sela1 = sela8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_3", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_5", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_6", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 6: + sela1 = sela8ccThin(NULL); + sela3 = sela4and8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_3", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela3, "sel_48_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaDestroy(&sela3); + break; + case 7: + sela1 = sela8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_1", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_5", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_6", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 8: + sela1 = sela8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_3", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_8", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_9", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 9: + sela1 = sela8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_5", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_6", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_8_7", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + sel = selRotateOrth(sel, 1); + selaAddSel(sela2, sel, "sel_8_7_rot", L_INSERT); + break; + case 10: /* thicken for this one; use just a few iterations */ + sela1 = sela4ccThin(NULL); + selaFindSelByName(sela1, "sel_4_2", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + selaFindSelByName(sela1, "sel_4_3", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + case 11: /* thicken for this one; use just a few iterations */ + sela1 = sela8ccThin(NULL); + selaFindSelByName(sela1, "sel_8_4", NULL, &sel); + selaAddSel(sela2, sel, NULL, L_COPY); + break; + } + + /* Optionally display the sel set */ + if (debug) { + PIX *pix1; + char buf[32]; + lept_mkdir("/lept/sels"); + pix1 = selaDisplayInPix(sela2, 35, 3, 15, 4); + snprintf(buf, sizeof(buf), "/tmp/lept/sels/set%d.png", index); + pixWrite(buf, pix1, IFF_PNG); + pixDisplay(pix1, 100, 100); + pixDestroy(&pix1); + } + + selaDestroy(&sela1); + return sela2; +} diff --git a/3rdparty/hgOCR/leptonica/classapp.c b/3rdparty/hgOCR/leptonica/classapp.c new file mode 100644 index 00000000..be17961a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/classapp.c @@ -0,0 +1,1048 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file classapp.c + *
+ *
+ *      Top-level jb2 correlation and rank-hausdorff
+ *         l_int32         jbCorrelation()
+ *         l_int32         jbRankHaus()
+ *
+ *      Extract and classify words in textline order
+ *         JBCLASSER      *jbWordsInTextlines()
+ *         l_int32         pixGetWordsInTextlines()
+ *         l_int32         pixGetWordBoxesInTextlines()
+ *
+ *      Extract word and character bounding boxes
+ *         l_int32         pixFindWordAndCharacterBoxes()
+ *
+ *      Use word bounding boxes to compare page images
+ *         NUMAA          *boxaExtractSortedPattern()
+ *         l_int32         numaaCompareImagesByBoxes()
+ *         static l_int32  testLineAlignmentX()
+ *         static l_int32  countAlignedMatches()
+ *         static void     printRowIndices()
+ * 
+ */ + +#include +#include "allheaders.h" + +//static const l_int32 L_BUF_SIZE = 512; /*!< size of filename buffer */ +#define L_BUF_SIZE 512 +static const l_int32 JB_WORDS_MIN_WIDTH = 5; /*!< min. word width in pixels */ +static const l_int32 JB_WORDS_MIN_HEIGHT = 3; /*!< min. word height in pixels */ + + /* Static comparison functions */ +static l_int32 testLineAlignmentX(NUMA *na1, NUMA *na2, l_int32 shiftx, + l_int32 delx, l_int32 nperline); +static l_int32 countAlignedMatches(NUMA *nai1, NUMA *nai2, NUMA *nasx, + NUMA *nasy, l_int32 n1, l_int32 n2, + l_int32 delx, l_int32 dely, + l_int32 nreq, l_int32 *psame, + l_int32 debugflag); +static void printRowIndices(l_int32 *index1, l_int32 n1, + l_int32 *index2, l_int32 n2); + + +/*------------------------------------------------------------------* + * Top-level jb2 correlation and rank-hausdorff * + *------------------------------------------------------------------*/ +/*! + * \brief jbCorrelation() + * + * \param[in] dirin directory of input images + * \param[in] thresh typically ~0.8 + * \param[in] weight typically ~0.6 + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] rootname for output files + * \param[in] firstpage 0-based + * \param[in] npages use 0 for all pages in dirin + * \param[in] renderflag 1 to render from templates; 0 to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The images must be 1 bpp.  If they are not, you can convert
+ *          them using convertFilesTo1bpp().
+ *      (2) See prog/jbcorrelation for generating more output (e.g.,
+ *          for debugging)
+ * 
+ */ +l_ok +jbCorrelation(const char *dirin, + l_float32 thresh, + l_float32 weight, + l_int32 components, + const char *rootname, + l_int32 firstpage, + l_int32 npages, + l_int32 renderflag) +{ +char filename[L_BUF_SIZE]; +l_int32 nfiles, i, numpages; +JBDATA *data; +JBCLASSER *classer; +PIX *pix; +PIXA *pixa; +SARRAY *safiles; + + PROCNAME("jbCorrelation"); + + if (!dirin) + return ERROR_INT("dirin not defined", procName, 1); + if (!rootname) + return ERROR_INT("rootname not defined", procName, 1); + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return ERROR_INT("components invalid", procName, 1); + + safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); + nfiles = sarrayGetCount(safiles); + + /* Classify components */ + classer = jbCorrelationInit(components, 0, 0, thresh, weight); + jbAddPages(classer, safiles); + + /* Save data */ + data = jbDataSave(classer); + jbDataWrite(rootname, data); + + /* Optionally, render pages using class templates */ + if (renderflag) { + pixa = jbDataRender(data, FALSE); + numpages = pixaGetCount(pixa); + if (numpages != nfiles) + fprintf(stderr, "numpages = %d, nfiles = %d, not equal!\n", + numpages, nfiles); + for (i = 0; i < numpages; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + snprintf(filename, L_BUF_SIZE, "%s.%04d", rootname, i); + fprintf(stderr, "filename: %s\n", filename); + pixWrite(filename, pix, IFF_PNG); + pixDestroy(&pix); + } + pixaDestroy(&pixa); + } + + sarrayDestroy(&safiles); + jbClasserDestroy(&classer); + jbDataDestroy(&data); + return 0; +} + + +/*! + * \brief jbRankHaus() + * + * \param[in] dirin directory of input images + * \param[in] size of Sel used for dilation; typ. 2 + * \param[in] rank rank value of match; typ. 0.97 + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] rootname for output files + * \param[in] firstpage 0-based + * \param[in] npages use 0 for all pages in dirin + * \param[in] renderflag 1 to render from templates; 0 to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See prog/jbrankhaus for generating more output (e.g.,
+ *          for debugging)
+ * 
+ */ +l_ok +jbRankHaus(const char *dirin, + l_int32 size, + l_float32 rank, + l_int32 components, + const char *rootname, + l_int32 firstpage, + l_int32 npages, + l_int32 renderflag) +{ +char filename[L_BUF_SIZE]; +l_int32 nfiles, i, numpages; +JBDATA *data; +JBCLASSER *classer; +PIX *pix; +PIXA *pixa; +SARRAY *safiles; + + PROCNAME("jbRankHaus"); + + if (!dirin) + return ERROR_INT("dirin not defined", procName, 1); + if (!rootname) + return ERROR_INT("rootname not defined", procName, 1); + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return ERROR_INT("components invalid", procName, 1); + + safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); + nfiles = sarrayGetCount(safiles); + + /* Classify components */ + classer = jbRankHausInit(components, 0, 0, size, rank); + jbAddPages(classer, safiles); + + /* Save data */ + data = jbDataSave(classer); + jbDataWrite(rootname, data); + + /* Optionally, render pages using class templates */ + if (renderflag) { + pixa = jbDataRender(data, FALSE); + numpages = pixaGetCount(pixa); + if (numpages != nfiles) + fprintf(stderr, "numpages = %d, nfiles = %d, not equal!\n", + numpages, nfiles); + for (i = 0; i < numpages; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + snprintf(filename, L_BUF_SIZE, "%s.%04d", rootname, i); + fprintf(stderr, "filename: %s\n", filename); + pixWrite(filename, pix, IFF_PNG); + pixDestroy(&pix); + } + pixaDestroy(&pixa); + } + + sarrayDestroy(&safiles); + jbClasserDestroy(&classer); + jbDataDestroy(&data); + return 0; +} + + + +/*------------------------------------------------------------------* + * Extract and classify words in textline order * + *------------------------------------------------------------------*/ +/*! + * \brief jbWordsInTextlines() + * + * \param[in] dirin directory of input pages + * \param[in] reduction 1 for full res; 2 for half-res + * \param[in] maxwidth of word mask components, to be kept + * \param[in] maxheight of word mask components, to be kept + * \param[in] thresh on correlation; 0.80 is reasonable + * \param[in] weight for handling thick text; 0.6 is reasonable + * \param[out] pnatl numa with textline index for each component + * \param[in] firstpage 0-based + * \param[in] npages use 0 for all pages in dirin + * \return classer for the set of pages + * + *
+ * Notes:
+ *      (1) This is a high-level function.  See prog/jbwords for example
+ *          of usage.
+ *      (2) Typically, use input of 75 - 150 ppi for finding words.
+ * 
+ */ +JBCLASSER * +jbWordsInTextlines(const char *dirin, + l_int32 reduction, + l_int32 maxwidth, + l_int32 maxheight, + l_float32 thresh, + l_float32 weight, + NUMA **pnatl, + l_int32 firstpage, + l_int32 npages) +{ +char *fname; +l_int32 nfiles, i, w, h; +BOXA *boxa; +JBCLASSER *classer; +NUMA *nai, *natl; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *safiles; + + PROCNAME("jbWordsInTextlines"); + + if (!pnatl) + return (JBCLASSER *)ERROR_PTR("&natl not defined", procName, NULL); + *pnatl = NULL; + if (!dirin) + return (JBCLASSER *)ERROR_PTR("dirin not defined", procName, NULL); + if (reduction != 1 && reduction != 2) + return (JBCLASSER *)ERROR_PTR("reduction not in {1,2}", procName, NULL); + + safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); + nfiles = sarrayGetCount(safiles); + + /* Classify components */ + classer = jbCorrelationInit(JB_WORDS, maxwidth, maxheight, thresh, weight); + classer->safiles = sarrayCopy(safiles); + natl = numaCreate(0); + *pnatl = natl; + for (i = 0; i < nfiles; i++) { + fname = sarrayGetString(safiles, i, L_NOCOPY); + if ((pix1 = pixRead(fname)) == NULL) { + L_WARNING("image file %d not read\n", procName, i); + continue; + } + if (reduction == 1) + pix2 = pixClone(pix1); + else /* reduction == 2 */ + pix2 = pixReduceRankBinaryCascade(pix1, 1, 0, 0, 0); + pixGetWordsInTextlines(pix2, JB_WORDS_MIN_WIDTH, + JB_WORDS_MIN_HEIGHT, maxwidth, maxheight, + &boxa, &pixa, &nai); + pixGetDimensions(pix2, &w, &h, NULL); + classer->w = w; + classer->h = h; + jbAddPageComponents(classer, pix2, boxa, pixa); + numaJoin(natl, nai, 0, -1); + pixDestroy(&pix1); + pixDestroy(&pix2); + numaDestroy(&nai); + boxaDestroy(&boxa); + pixaDestroy(&pixa); + } + + sarrayDestroy(&safiles); + return classer; +} + + +/*! + * \brief pixGetWordsInTextlines() + * + * \param[in] pixs 1 bpp, typ. 75 - 150 ppi + * \param[in] minwidth of saved components; smaller are discarded + * \param[in] minheight of saved components; smaller are discarded + * \param[in] maxwidth of saved components; larger are discarded + * \param[in] maxheight of saved components; larger are discarded + * \param[out] pboxad word boxes sorted in textline line order + * \param[out] ppixad word images sorted in textline line order + * \param[out] pnai index of textline for each word + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input should be at a resolution of between 75 and 150 ppi.
+ *      (2) The four size constraints on saved components are all
+ *          scaled by %reduction.
+ *      (3) The result are word images (and their b.b.), extracted in
+ *          textline order, at either full res or 2x reduction,
+ *          and with a numa giving the textline index for each word.
+ *      (4) The pixa and boxa interfaces should make this type of
+ *          application simple to put together.  The steps are:
+ *           ~ generate first estimate of word masks
+ *           ~ get b.b. of these, and remove the small and big ones
+ *           ~ extract pixa of the word images, using the b.b.
+ *           ~ sort actual word images in textline order (2d)
+ *           ~ flatten them to a pixa (1d), saving the textline index
+ *             for each pix
+ *      (5) In an actual application, it may be desirable to pre-filter
+ *          the input image to remove large components, to extract
+ *          single columns of text, and to deskew them.  For example,
+ *          to remove both large components and small noisy components
+ *          that can interfere with the statistics used to estimate
+ *          parameters for segmenting by words, but still retain text lines,
+ *          the following image preprocessing can be done:
+ *                Pix *pixt = pixMorphSequence(pixs, "c40.1", 0);
+ *                Pix *pixf = pixSelectBySize(pixt, 0, 60, 8,
+ *                                     L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL);
+ *                pixAnd(pixf, pixf, pixs);  // the filtered image
+ *          The closing turns text lines into long blobs, but does not
+ *          significantly increase their height.  But if there are many
+ *          small connected components in a dense texture, this is likely
+ *          to generate tall components that will be eliminated in pixf.
+ * 
+ */ +l_ok +pixGetWordsInTextlines(PIX *pixs, + l_int32 minwidth, + l_int32 minheight, + l_int32 maxwidth, + l_int32 maxheight, + BOXA **pboxad, + PIXA **ppixad, + NUMA **pnai) +{ +BOXA *boxa1, *boxad; +BOXAA *baa; +NUMA *nai; +NUMAA *naa; +PIXA *pixa1, *pixad; +PIXAA *paa; + + PROCNAME("pixGetWordsInTextlines"); + + if (!pboxad || !ppixad || !pnai) + return ERROR_INT("&boxad, &pixad, &nai not all defined", procName, 1); + *pboxad = NULL; + *ppixad = NULL; + *pnai = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Get the bounding boxes of the words from the word mask. */ + pixWordBoxesByDilation(pixs, minwidth, minheight, maxwidth, maxheight, + &boxa1, NULL, NULL); + + /* Generate a pixa of the word images */ + pixa1 = pixaCreateFromBoxa(pixs, boxa1, 0, 0, NULL); + + /* Sort the bounding boxes of these words by line. We use the + * index mapping to allow identical sorting of the pixa. */ + baa = boxaSort2d(boxa1, &naa, -1, -1, 4); + paa = pixaSort2dByIndex(pixa1, naa, L_CLONE); + + /* Flatten the word paa */ + pixad = pixaaFlattenToPixa(paa, &nai, L_CLONE); + boxad = pixaGetBoxa(pixad, L_COPY); + + *pnai = nai; + *pboxad = boxad; + *ppixad = pixad; + + pixaDestroy(&pixa1); + boxaDestroy(&boxa1); + boxaaDestroy(&baa); + pixaaDestroy(&paa); + numaaDestroy(&naa); + return 0; +} + + +/*! + * \brief pixGetWordBoxesInTextlines() + * + * \param[in] pixs 1 bpp, typ. 75 - 150 ppi + * \param[in] minwidth of saved components; smaller are discarded + * \param[in] minheight of saved components; smaller are discarded + * \param[in] maxwidth of saved components; larger are discarded + * \param[in] maxheight of saved components; larger are discarded + * \param[out] pboxad word boxes sorted in textline line order + * \param[out] pnai [optional] index of textline for each word + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input should be at a resolution of between 75 and 150 ppi.
+ *      (2) This is a special version of pixGetWordsInTextlines(), that
+ *          just finds the word boxes in line order, with a numa
+ *          giving the textline index for each word.
+ *          See pixGetWordsInTextlines() for more details.
+ * 
+ */ +l_ok +pixGetWordBoxesInTextlines(PIX *pixs, + l_int32 minwidth, + l_int32 minheight, + l_int32 maxwidth, + l_int32 maxheight, + BOXA **pboxad, + NUMA **pnai) +{ +BOXA *boxa1; +BOXAA *baa; +NUMA *nai; + + PROCNAME("pixGetWordBoxesInTextlines"); + + if (pnai) *pnai = NULL; + if (!pboxad) + return ERROR_INT("&boxad and &nai not both defined", procName, 1); + *pboxad = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Get the bounding boxes of the words from the word mask. */ + pixWordBoxesByDilation(pixs, minwidth, minheight, maxwidth, maxheight, + &boxa1, NULL, NULL); + + /* 2D sort the bounding boxes of these words. */ + baa = boxaSort2d(boxa1, NULL, 3, -5, 5); + + /* Flatten the boxaa, saving the boxa index for each box */ + *pboxad = boxaaFlattenToBoxa(baa, &nai, L_CLONE); + + if (pnai) + *pnai = nai; + else + numaDestroy(&nai); + boxaDestroy(&boxa1); + boxaaDestroy(&baa); + return 0; +} + + +/*------------------------------------------------------------------* + * Extract word and character bounding boxes * + *------------------------------------------------------------------*/ +/*! + * \brief pixFindWordAndCharacterBoxes() + * + * \param[in] pixs 2, 4, 8 or 32 bpp; colormap OK; typ. 300 ppi + * \param[in] boxs [optional] region to select in pixs + * \param[in] thresh binarization threshold (typ. 100 - 150) + * \param[out] pboxaw return the word boxes + * \param[out] pboxaac return the character boxes + * \param[in] debugdir [optional] for debug images; use NULL to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %boxs == NULL, the entire input image is used.
+ *      (2) Having an input pix that is not 1bpp is necessary to reduce
+ *          touching characters by using a low binarization threshold.
+ *          Suggested thresholds are between 100 and 150.
+ *      (3) The coordinates in the output boxes are global, with respect
+ *          to the input image.
+ * 
+ */ +l_ok +pixFindWordAndCharacterBoxes(PIX *pixs, + BOX *boxs, + l_int32 thresh, + BOXA **pboxaw, + BOXAA **pboxaac, + const char *debugdir) +{ +char *debugfile, *subdir; +l_int32 i, xs, ys, xb, yb, nb, loc; +l_float32 scalefact; +BOX *box1, *box2; +BOXA *boxa1, *boxa1a, *boxa2, *boxa3, *boxa4, *boxa5, *boxaw; +BOXAA *boxaac; +PIX *pix1, *pix2, *pix3, *pix3a, *pix4, *pix5; + + PROCNAME("pixFindWordAndCharacterBoxes"); + + if (pboxaw) *pboxaw = NULL; + if (pboxaac) *pboxaac = NULL; + if (!pboxaw || !pboxaac) + return ERROR_INT("&boxaw and &boxaac not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) == 1) + return ERROR_INT("pixs not defined or 1 bpp", procName, 1); + if (thresh > 150) + L_WARNING("threshold is %d; may be too high\n", procName, thresh); + + if (boxs) { + if ((pix1 = pixClipRectangle(pixs, boxs, NULL)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + boxGetGeometry(boxs, &xs, &ys, NULL, NULL); + } else { + pix1 = pixClone(pixs); + xs = ys = 0; + } + + /* Convert pix1 to 8 bpp gray if necessary */ + pix2 = pixConvertTo8(pix1, FALSE); + + /* To find the words and letters, work with 1 bpp images and use + * a low threshold to reduce the number of touching characters. */ + pix3 = pixConvertTo1(pix2, thresh); + + /* Work at about 120 ppi to find the word bounding boxes. */ + pix3a = pixScaleToResolution(pix3, 120.0, 300.0, &scalefact); + + /* First find the words, removing the very small things like + * dots over the 'i' that weren't included in word boxes. */ + pixGetWordBoxesInTextlines(pix3a, 1, 4, 150, 40, &boxa1a, NULL); + boxa1 = boxaTransform(boxa1a, 0, 0, 1.0 / scalefact, 1.0 / scalefact); + if (debugdir) { + loc = 0; + subdir = stringReplaceSubstr(debugdir, "/tmp/", "", &loc, NULL); + lept_mkdir(subdir); + LEPT_FREE(subdir); + pix4 = pixConvertTo32(pix2); + pixRenderBoxaArb(pix4, boxa1, 2, 255, 0, 0); + debugfile = stringJoin(debugdir, "/words.png"); + pixWrite(debugfile, pix4, IFF_PNG); + pixDestroy(&pix4); + LEPT_FREE(debugfile); + } + + /* Now find the letters at 300 ppi */ + nb = boxaGetCount(boxa1); + boxaw = boxaCreate(nb); + boxaac = boxaaCreate(nb); + *pboxaw = boxaw; + *pboxaac = boxaac; + for (i = 0; i < nb; i++) { + box1 = boxaGetBox(boxa1, i, L_COPY); + boxGetGeometry(box1, &xb, &yb, NULL, NULL); + pix4 = pixClipRectangle(pix3, box1, NULL); + /* Join detached parts of characters vertically */ + pix5 = pixMorphSequence(pix4, "c1.10", 0); + /* The connected components should mostly be characters */ + boxa2 = pixConnCompBB(pix5, 4); + /* Remove very small pieces */ + boxa3 = boxaSelectBySize(boxa2, 2, 5, L_SELECT_IF_BOTH, + L_SELECT_IF_GTE, NULL); + /* Order left to right */ + boxa4 = boxaSort(boxa3, L_SORT_BY_X, L_SORT_INCREASING, NULL); + /* Express locations with reference to the full input image */ + boxa5 = boxaTransform(boxa4, xs + xb, ys + yb, 1.0, 1.0); + box2 = boxTransform(box1, xs, ys, 1.0, 1.0); + + /* Ignore any boxa with no boxes after size filtering */ + if (boxaGetCount(boxa5) > 0) { + boxaAddBox(boxaw, box2, L_INSERT); + boxaaAddBoxa(boxaac, boxa5, L_INSERT); + } else { + boxDestroy(&box2); + boxaDestroy(&boxa5); + } + boxDestroy(&box1); + pixDestroy(&pix4); + pixDestroy(&pix5); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + boxaDestroy(&boxa4); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix3a); + boxaDestroy(&boxa1); + boxaDestroy(&boxa1a); + if (debugdir) { + pix4 = pixConvertTo32(pixs); + boxa2 = boxaaFlattenToBoxa(boxaac, NULL, L_COPY); + pixRenderBoxaArb(pix4, boxa2, 2, 255, 0, 0); + boxa3 = boxaAdjustSides(boxaw, -2, 2, -2, 2); + pixRenderBoxaArb(pix4, boxa3, 2, 0, 255, 0); + debugfile = stringJoin(debugdir, "/chars.png"); + pixWrite(debugfile, pix4, IFF_PNG); + pixDestroy(&pix4); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + LEPT_FREE(debugfile); + } + return 0; +} + + +/*------------------------------------------------------------------* + * Use word bounding boxes to compare page images * + *------------------------------------------------------------------*/ +/*! + * \brief boxaExtractSortedPattern() + * + * \param[in] boxa typ. of word bounding boxes, in textline order + * \param[in] na index of textline for each box in boxa + * \return naa NUMAA, where each numa represents one textline, + * or NULL on error + * + *
+ * Notes:
+ *      (1) The input is expected to come from pixGetWordBoxesInTextlines().
+ *      (2) Each numa in the output consists of an average y coordinate
+ *          of the first box in the textline, followed by pairs of
+ *          x coordinates representing the left and right edges of each
+ *          of the boxes in the textline.
+ * 
+ */ +NUMAA * +boxaExtractSortedPattern(BOXA *boxa, + NUMA *na) +{ +l_int32 index, nbox, row, prevrow, x, y, w, h; +BOX *box; +NUMA *nad; +NUMAA *naa; + + PROCNAME("boxaExtractSortedPattern"); + + if (!boxa) + return (NUMAA *)ERROR_PTR("boxa not defined", procName, NULL); + if (!na) + return (NUMAA *)ERROR_PTR("na not defined", procName, NULL); + + naa = numaaCreate(0); + nbox = boxaGetCount(boxa); + if (nbox == 0) + return naa; + + prevrow = -1; + for (index = 0; index < nbox; index++) { + box = boxaGetBox(boxa, index, L_CLONE); + numaGetIValue(na, index, &row); + if (row > prevrow) { + if (index > 0) + numaaAddNuma(naa, nad, L_INSERT); + nad = numaCreate(0); + prevrow = row; + boxGetGeometry(box, NULL, &y, NULL, &h); + numaAddNumber(nad, y + h / 2); + } + boxGetGeometry(box, &x, NULL, &w, NULL); + numaAddNumber(nad, x); + numaAddNumber(nad, x + w - 1); + boxDestroy(&box); + } + numaaAddNuma(naa, nad, L_INSERT); + + return naa; +} + + +/*! + * \brief numaaCompareImagesByBoxes() + * + * \param[in] naa1 for image 1, formatted by boxaExtractSortedPattern() + * \param[in] naa2 for image 2, formatted by boxaExtractSortedPattern() + * \param[in] nperline number of box regions to be used in each textline + * \param[in] nreq number of complete row matches required + * \param[in] maxshiftx max allowed x shift between two patterns, in pixels + * \param[in] maxshifty max allowed y shift between two patterns, in pixels + * \param[in] delx max allowed difference in x data, after alignment + * \param[in] dely max allowed difference in y data, after alignment + * \param[out] psame 1 if %nreq row matches are found; 0 otherwise + * \param[in] debugflag 1 for debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Each input numaa describes a set of sorted bounding boxes
+ *          (sorted by textline and, within each textline, from
+ *          left to right) in the images from which they are derived.
+ *          See boxaExtractSortedPattern() for a description of the data
+ *          format in each of the input numaa.
+ *      (2) This function does an alignment between the input
+ *          descriptions of bounding boxes for two images. The
+ *          input parameter %nperline specifies the number of boxes
+ *          to consider in each line when testing for a match, and
+ *          %nreq is the required number of lines that must be well-aligned
+ *          to get a match.
+ *      (3) Testing by alignment has 3 steps:
+ *          (a) Generating the location of word bounding boxes from the
+ *              images (prior to calling this function).
+ *          (b) Listing all possible pairs of aligned rows, based on
+ *              tolerances in horizontal and vertical positions of
+ *              the boxes.  Specifically, all pairs of rows are enumerated
+ *              whose first %nperline boxes can be brought into close
+ *              alignment, based on the delx parameter for boxes in the
+ *              line and within the overall the %maxshiftx and %maxshifty
+ *              constraints.
+ *          (c) Each pair, starting with the first, is used to search
+ *              for a set of %nreq - 1 other pairs that can all be aligned
+ *              with a difference in global translation of not more
+ *              than (%delx, %dely).
+ * 
+ */ +l_ok +numaaCompareImagesByBoxes(NUMAA *naa1, + NUMAA *naa2, + l_int32 nperline, + l_int32 nreq, + l_int32 maxshiftx, + l_int32 maxshifty, + l_int32 delx, + l_int32 dely, + l_int32 *psame, + l_int32 debugflag) +{ +l_int32 n1, n2, i, j, nbox, y1, y2, xl1, xl2; +l_int32 shiftx, shifty, match; +l_int32 *line1, *line2; /* indicator for sufficient boxes in a line */ +l_int32 *yloc1, *yloc2; /* arrays of y value for first box in a line */ +l_int32 *xleft1, *xleft2; /* arrays of x value for left side of first box */ +NUMA *na1, *na2, *nai1, *nai2, *nasx, *nasy; + + PROCNAME("numaaCompareImagesByBoxes"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!naa1) + return ERROR_INT("naa1 not defined", procName, 1); + if (!naa2) + return ERROR_INT("naa2 not defined", procName, 1); + if (nperline < 1) + return ERROR_INT("nperline < 1", procName, 1); + if (nreq < 1) + return ERROR_INT("nreq < 1", procName, 1); + + n1 = numaaGetCount(naa1); + n2 = numaaGetCount(naa2); + if (n1 < nreq || n2 < nreq) + return 0; + + /* Find the lines in naa1 and naa2 with sufficient boxes. + * Also, find the y-values for each of the lines, and the + * LH x-values of the first box in each line. */ + line1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); + line2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); + yloc1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); + yloc2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); + xleft1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); + xleft2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); + if (!line1 || !line2 || !yloc1 || !yloc2 || !xleft1 || !xleft2) + return ERROR_INT("callof failure for an array", procName, 1); + for (i = 0; i < n1; i++) { + na1 = numaaGetNuma(naa1, i, L_CLONE); + numaGetIValue(na1, 0, yloc1 + i); + numaGetIValue(na1, 1, xleft1 + i); + nbox = (numaGetCount(na1) - 1) / 2; + if (nbox >= nperline) + line1[i] = 1; + numaDestroy(&na1); + } + for (i = 0; i < n2; i++) { + na2 = numaaGetNuma(naa2, i, L_CLONE); + numaGetIValue(na2, 0, yloc2 + i); + numaGetIValue(na2, 1, xleft2 + i); + nbox = (numaGetCount(na2) - 1) / 2; + if (nbox >= nperline) + line2[i] = 1; + numaDestroy(&na2); + } + + /* Enumerate all possible line matches. A 'possible' line + * match is one where the x and y shifts for the first box + * in each line are within the maxshiftx and maxshifty + * constraints, and the left and right sides of the remaining + * (nperline - 1) successive boxes are within delx of each other. + * The result is a set of four numas giving parameters of + * each set of matching lines. */ + nai1 = numaCreate(0); /* line index 1 of match */ + nai2 = numaCreate(0); /* line index 2 of match */ + nasx = numaCreate(0); /* shiftx for match */ + nasy = numaCreate(0); /* shifty for match */ + for (i = 0; i < n1; i++) { + if (line1[i] == 0) continue; + y1 = yloc1[i]; + xl1 = xleft1[i]; + na1 = numaaGetNuma(naa1, i, L_CLONE); + for (j = 0; j < n2; j++) { + if (line2[j] == 0) continue; + y2 = yloc2[j]; + if (L_ABS(y1 - y2) > maxshifty) continue; + xl2 = xleft2[j]; + if (L_ABS(xl1 - xl2) > maxshiftx) continue; + shiftx = xl1 - xl2; /* shift to add to x2 values */ + shifty = y1 - y2; /* shift to add to y2 values */ + na2 = numaaGetNuma(naa2, j, L_CLONE); + + /* Now check if 'nperline' boxes in the two lines match */ + match = testLineAlignmentX(na1, na2, shiftx, delx, nperline); + if (match) { + numaAddNumber(nai1, i); + numaAddNumber(nai2, j); + numaAddNumber(nasx, shiftx); + numaAddNumber(nasy, shifty); + } + numaDestroy(&na2); + } + numaDestroy(&na1); + } + + /* Determine if there are a sufficient number of mutually + * aligned matches. Mutually aligned matches place an additional + * constraint on the 'possible' matches, where the relative + * shifts must not exceed the (delx, dely) distances. */ + countAlignedMatches(nai1, nai2, nasx, nasy, n1, n2, delx, dely, + nreq, psame, debugflag); + + LEPT_FREE(line1); + LEPT_FREE(line2); + LEPT_FREE(yloc1); + LEPT_FREE(yloc2); + LEPT_FREE(xleft1); + LEPT_FREE(xleft2); + numaDestroy(&nai1); + numaDestroy(&nai2); + numaDestroy(&nasx); + numaDestroy(&nasy); + return 0; +} + + +static l_int32 +testLineAlignmentX(NUMA *na1, + NUMA *na2, + l_int32 shiftx, + l_int32 delx, + l_int32 nperline) +{ +l_int32 i, xl1, xr1, xl2, xr2, diffl, diffr; + + PROCNAME("testLineAlignmentX"); + + if (!na1) + return ERROR_INT("na1 not defined", procName, 1); + if (!na2) + return ERROR_INT("na2 not defined", procName, 1); + + for (i = 0; i < nperline; i++) { + numaGetIValue(na1, i + 1, &xl1); + numaGetIValue(na1, i + 2, &xr1); + numaGetIValue(na2, i + 1, &xl2); + numaGetIValue(na2, i + 2, &xr2); + diffl = L_ABS(xl1 - xl2 - shiftx); + diffr = L_ABS(xr1 - xr2 - shiftx); + if (diffl > delx || diffr > delx) + return 0; + } + + return 1; +} + + +/* + * \brief countAlignedMatches() + * + * \param[in] nai1, nai2 numas of row pairs for matches + * \param[in] nasx, nasy numas of x and y shifts for the matches + * \param[in] n1, n2 number of rows in images 1 and 2 + * \param[in] delx, dely allowed difference in shifts of the match, + * compared to the reference match + * \param[in] nre1 number of required aligned matches + * \param[out] psame return 1 if %nreq row matches are found; + * 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes 4 input arrays giving parameters of all the
+ *          line matches.  It looks for the maximum set of aligned
+ *          matches (matches with approximately the same overall shifts)
+ *          that do not use rows from either image more than once.
+ * 
+ */ +static l_ok +countAlignedMatches(NUMA *nai1, + NUMA *nai2, + NUMA *nasx, + NUMA *nasy, + l_int32 n1, + l_int32 n2, + l_int32 delx, + l_int32 dely, + l_int32 nreq, + l_int32 *psame, + l_int32 debugflag) +{ +l_int32 i, j, nm, shiftx, shifty, nmatch, diffx, diffy; +l_int32 *ia1, *ia2, *iasx, *iasy, *index1, *index2; + + PROCNAME("countAlignedMatches"); + + if (!nai1 || !nai2 || !nasx || !nasy) + return ERROR_INT("4 input numas not defined", procName, 1); + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + + /* Check for sufficient aligned matches, doing a double iteration + * over the set of raw matches. The row index arrays + * are used to verify that the same rows in either image + * are not used in more than one match. Whenever there + * is a match that is properly aligned, those rows are + * marked in the index arrays. */ + nm = numaGetCount(nai1); /* number of matches */ + if (nm < nreq) + return 0; + + ia1 = numaGetIArray(nai1); + ia2 = numaGetIArray(nai2); + iasx = numaGetIArray(nasx); + iasy = numaGetIArray(nasy); + index1 = (l_int32 *)LEPT_CALLOC(n1, sizeof(l_int32)); /* watch rows */ + index2 = (l_int32 *)LEPT_CALLOC(n2, sizeof(l_int32)); + if (!index1 || !index2) + return ERROR_INT("calloc fail for array", procName, 1); + for (i = 0; i < nm; i++) { + if (*psame == 1) + break; + + /* Reset row index arrays */ + memset(index1, 0, 4 * n1); + memset(index2, 0, 4 * n2); + nmatch = 1; + index1[ia1[i]] = nmatch; /* mark these rows as taken */ + index2[ia2[i]] = nmatch; + shiftx = iasx[i]; /* reference shift between two rows */ + shifty = iasy[i]; /* ditto */ + if (nreq == 1) { + *psame = 1; + break; + } + for (j = 0; j < nm; j++) { + if (j == i) continue; + /* Rows must both be different from any previously seen */ + if (index1[ia1[j]] > 0 || index2[ia2[j]] > 0) continue; + /* Check the shift for this match */ + diffx = L_ABS(shiftx - iasx[j]); + diffy = L_ABS(shifty - iasy[j]); + if (diffx > delx || diffy > dely) continue; + /* We have a match */ + nmatch++; + index1[ia1[j]] = nmatch; /* mark the rows */ + index2[ia2[j]] = nmatch; + if (nmatch >= nreq) { + *psame = 1; + if (debugflag) + printRowIndices(index1, n1, index2, n2); + break; + } + } + } + + LEPT_FREE(ia1); + LEPT_FREE(ia2); + LEPT_FREE(iasx); + LEPT_FREE(iasy); + LEPT_FREE(index1); + LEPT_FREE(index2); + return 0; +} + + +static void +printRowIndices(l_int32 *index1, + l_int32 n1, + l_int32 *index2, + l_int32 n2) +{ +l_int32 i; + + fprintf(stderr, "Index1: "); + for (i = 0; i < n1; i++) { + if (i && (i % 20 == 0)) + fprintf(stderr, "\n "); + fprintf(stderr, "%3d", index1[i]); + } + fprintf(stderr, "\n"); + + fprintf(stderr, "Index2: "); + for (i = 0; i < n2; i++) { + if (i && (i % 20 == 0)) + fprintf(stderr, "\n "); + fprintf(stderr, "%3d", index2[i]); + } + fprintf(stderr, "\n"); + return; +} diff --git a/3rdparty/hgOCR/leptonica/colorcontent.c b/3rdparty/hgOCR/leptonica/colorcontent.c new file mode 100644 index 00000000..cbd7f0a2 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colorcontent.c @@ -0,0 +1,1891 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colorcontent.c + *
+ *
+ *      Builds an image of the color content, on a per-pixel basis,
+ *      as a measure of the amount of divergence of each color
+ *      component (R,G,B) from gray.
+ *         l_int32    pixColorContent()
+ *
+ *      Finds the 'amount' of color in an image, on a per-pixel basis,
+ *      as a measure of the difference of the pixel color from gray.
+ *         PIX       *pixColorMagnitude()
+ *
+ *      Generates a mask over pixels that have sufficient color and
+ *      are not too close to gray pixels.
+ *         PIX       *pixMaskOverColorPixels()
+ *
+ *      Generates a mask over pixels that have little color and
+ *      are not too bright.
+ *         PIX       *pixMaskOverGrayPixels()
+ *
+ *      Generates mask over pixels within a prescribed cube in RGB space
+ *         PIX       *pixMaskOverColorRange()
+ *
+ *      Finds the fraction of pixels with "color" that are not close to black
+ *         l_int32    pixColorFraction()
+ *
+ *      Determine if there are significant color regions that are
+ *      not background in a page image
+ *         l_int32    pixFindColorRegions()
+ *
+ *      Finds the number of perceptually significant gray intensities
+ *      in a grayscale image.
+ *         l_int32    pixNumSignificantGrayColors()
+ *
+ *      Identifies images where color quantization will cause posterization
+ *      due to the existence of many colors in low-gradient regions.
+ *         l_int32    pixColorsForQuantization()
+ *
+ *      Finds the number of unique colors in an image
+ *         l_int32    pixNumColors()
+ *
+ *      Find the most "populated" colors in the image (and quantize)
+ *         l_int32    pixGetMostPopulatedColors()
+ *         PIX       *pixSimpleColorQuantize()
+ *
+ *      Constructs a color histogram based on rgb indices
+ *         NUMA      *pixGetRGBHistogram()
+ *         l_int32    makeRGBIndexTables()
+ *         l_int32    getRGBFromIndex()
+ *
+ *      Identify images that have highlight (red) color
+ *         l_int32    pixHasHighlightRed()
+ *
+ *  Color is tricky.  If we consider gray (r = g = b) to have no color
+ *  content, how should we define the color content in each component
+ *  of an arbitrary pixel, as well as the overall color magnitude?
+ *
+ *  I can think of three ways to define the color content in each component:
+ *
+ *  (1) Linear.  For each component, take the difference from the average
+ *      of all three.
+ *  (2) Linear.  For each component, take the difference from the average
+ *      of the other two.
+ *  (3) Nonlinear.  For each component, take the minimum of the differences
+ *      from the other two.
+ *
+ *  How might one choose from among these?  Consider two different situations:
+ *  (a) r = g = 0, b = 255            {255}   /255/
+ *  (b) r = 0, g = 127, b = 255       {191}   /128/
+ *  How much g is in each of these?  The three methods above give:
+ *  (a)  1: 85   2: 127   3: 0        [85]
+ *  (b)  1: 0    2: 0     3: 127      [0]
+ *  How much b is in each of these?
+ *  (a)  1: 170  2: 255   3: 255      [255]
+ *  (b)  1: 127  2: 191   3: 127      [191]
+ *  The number I'd "like" to give is in [].  (Please don't ask why, it's
+ *  just a feeling.
+ *
+ *  So my preferences seem to be somewhere between (1) and (2).
+ *  (3) is just too "decisive!"  Let's pick (2).
+ *
+ *  We also allow compensation for white imbalance.  For each
+ *  component, we do a linear TRC (gamma = 1.0), where the black
+ *  point remains at 0 and the white point is given by the input
+ *  parameter.  This is equivalent to doing a global remapping,
+ *  as with pixGlobalNormRGB(), followed by color content (or magnitude)
+ *  computation, but without the overhead of first creating the
+ *  white point normalized image.
+ *
+ *  Another useful property is the overall color magnitude in the pixel.
+ *  For this there are again several choices, such as:
+ *      (a) rms deviation from the mean
+ *      (b) the average L1 deviation from the mean
+ *      (c) the maximum (over components) of one of the color
+ *          content measures given above.
+ *
+ *  For now, we will choose two of the methods in (c):
+ *     L_MAX_DIFF_FROM_AVERAGE_2
+ *        Define the color magnitude as the maximum over components
+ *        of the difference between the component value and the
+ *        average of the other two.  It is easy to show that
+ *        this is equivalent to selecting the two component values
+ *        that are closest to each other, averaging them, and
+ *        using the distance from that average to the third component.
+ *        For (a) and (b) above, this value is in {..}.
+ *    L_MAX_MIN_DIFF_FROM_2
+ *        Define the color magnitude as the maximum over components
+ *        of the minimum difference between the component value and the
+ *        other two values.  It is easy to show that this is equivalent
+ *        to selecting the intermediate value of the three differences
+ *        between the three components.  For (a) and (b) above,
+ *        this value is in /../.
+ * 
+ */ + +#include "allheaders.h" + +/* ----------------------------------------------------------------------- * + * Builds an image of the color content, on a per-pixel basis, * + * as a measure of the amount of divergence of each color * + * component (R,G,B) from gray. * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixColorContent() + * + * \param[in] pixs 32 bpp rgb or 8 bpp colormapped + * \param[in] rwhite, gwhite, bwhite color value associated with white point + * \param[in] mingray min gray value for which color is measured + * \param[out] ppixr [optional] 8 bpp red 'content' + * \param[out] ppixg [optional] 8 bpp green 'content' + * \param[out] ppixb [optional] 8 bpp blue 'content' + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns the color content in each component, which is
+ *          a measure of the deviation from gray, and is defined
+ *          as the difference between the component and the average of
+ *          the other two components.  See the discussion at the
+ *          top of this file.
+ *      (2) The three numbers (rwhite, gwhite and bwhite) can be thought
+ *          of as the values in the image corresponding to white.
+ *          They are used to compensate for an unbalanced color white point.
+ *          They must either be all 0 or all non-zero.  To turn this
+ *          off, set them all to 0.
+ *      (3) If the maximum component after white point correction,
+ *          max(r,g,b), is less than mingray, all color components
+ *          for that pixel are set to zero.
+ *          Use mingray = 0 to turn off this filtering of dark pixels.
+ *      (4) Therefore, use 0 for all four input parameters if the color
+ *          magnitude is to be calculated without either white balance
+ *          correction or dark filtering.
+ * 
+ */ +l_ok +pixColorContent(PIX *pixs, + l_int32 rwhite, + l_int32 gwhite, + l_int32 bwhite, + l_int32 mingray, + PIX **ppixr, + PIX **ppixg, + PIX **ppixb) +{ +l_int32 w, h, d, i, j, wplc, wplr, wplg, wplb; +l_int32 rval, gval, bval, rgdiff, rbdiff, gbdiff, maxval, colorval; +l_int32 *rtab, *gtab, *btab; +l_uint32 pixel; +l_uint32 *datac, *datar, *datag, *datab, *linec, *liner, *lineg, *lineb; +NUMA *nar, *nag, *nab; +PIX *pixc; /* rgb */ +PIX *pixr, *pixg, *pixb; /* 8 bpp grayscale */ +PIXCMAP *cmap; + + PROCNAME("pixColorContent"); + + if (!ppixr && !ppixg && !ppixb) + return ERROR_INT("no return val requested", procName, 1); + if (ppixr) *ppixr = NULL; + if (ppixg) *ppixg = NULL; + if (ppixb) *ppixb = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (mingray < 0) mingray = 0; + pixGetDimensions(pixs, &w, &h, &d); + if (mingray > 255) + return ERROR_INT("mingray > 255", procName, 1); + if (rwhite < 0 || gwhite < 0 || bwhite < 0) + return ERROR_INT("some white vals are negative", procName, 1); + if ((rwhite || gwhite || bwhite) && (rwhite * gwhite * bwhite == 0)) + return ERROR_INT("white vals not all zero or all nonzero", procName, 1); + + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return ERROR_INT("pixs neither cmapped nor 32 bpp", procName, 1); + if (cmap) + pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc = pixClone(pixs); + + pixr = pixg = pixb = NULL; + pixGetDimensions(pixc, &w, &h, NULL); + if (ppixr) { + pixr = pixCreate(w, h, 8); + datar = pixGetData(pixr); + wplr = pixGetWpl(pixr); + *ppixr = pixr; + } + if (ppixg) { + pixg = pixCreate(w, h, 8); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + *ppixg = pixg; + } + if (ppixb) { + pixb = pixCreate(w, h, 8); + datab = pixGetData(pixb); + wplb = pixGetWpl(pixb); + *ppixb = pixb; + } + + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + if (rwhite) { /* all white pt vals are nonzero */ + nar = numaGammaTRC(1.0, 0, rwhite); + rtab = numaGetIArray(nar); + nag = numaGammaTRC(1.0, 0, gwhite); + gtab = numaGetIArray(nag); + nab = numaGammaTRC(1.0, 0, bwhite); + btab = numaGetIArray(nab); + } + for (i = 0; i < h; i++) { + linec = datac + i * wplc; + if (pixr) + liner = datar + i * wplr; + if (pixg) + lineg = datag + i * wplg; + if (pixb) + lineb = datab + i * wplb; + for (j = 0; j < w; j++) { + pixel = linec[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + if (rwhite) { /* color correct for white point */ + rval = rtab[rval]; + gval = gtab[gval]; + bval = btab[bval]; + } + if (mingray > 0) { /* dark pixels have no color value */ + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + if (maxval < mingray) + continue; /* colorval = 0 for each component */ + } + rgdiff = L_ABS(rval - gval); + rbdiff = L_ABS(rval - bval); + gbdiff = L_ABS(gval - bval); + if (pixr) { + colorval = (rgdiff + rbdiff) / 2; + SET_DATA_BYTE(liner, j, colorval); + } + if (pixg) { + colorval = (rgdiff + gbdiff) / 2; + SET_DATA_BYTE(lineg, j, colorval); + } + if (pixb) { + colorval = (rbdiff + gbdiff) / 2; + SET_DATA_BYTE(lineb, j, colorval); + } + } + } + + if (rwhite) { + numaDestroy(&nar); + numaDestroy(&nag); + numaDestroy(&nab); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + } + pixDestroy(&pixc); + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Finds the 'amount' of color in an image, on a per-pixel basis, * + * as a measure of the difference of the pixel color from gray. * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixColorMagnitude() + * + * \param[in] pixs 32 bpp rgb or 8 bpp colormapped + * \param[in] rwhite, gwhite, bwhite color value associated with white point + * \param[in] type chooses the method for calculating the color magnitude: + * L_MAX_DIFF_FROM_AVERAGE_2, L_MAX_MIN_DIFF_FROM_2, + * L_MAX_DIFF + * \return pixd 8 bpp, amount of color in each source pixel, + * or NULL on error + * + *
+ * Notes:
+ *      (1) For an RGB image, a gray pixel is one where all three components
+ *          are equal.  We define the amount of color in an RGB pixel as
+ *          a function depending on the absolute value of the differences
+ *          between the three color components.  Consider the two largest
+ *          of these differences.  The pixel component in common to these
+ *          two differences is the color farthest from the other two.
+ *          The color magnitude in an RGB pixel can be taken as one
+ *          of these three definitions:
+ *            (a) The average of these two differences.  This is the
+ *                average distance from the two components that are
+ *                nearest to each other to the third component.
+ *            (b) The minimum value of these two differences.  This is
+ *                the intermediate value of the three distances between
+ *                component values.  Stated otherwise, it is the
+ *                maximum over all components of the minimum distance
+ *                from that component to the other two components.
+ *            (c) The maximum difference between component values.
+ *      (2) As an example, suppose that R and G are the closest in
+ *          magnitude.  Then the color is determined as either:
+ *            (a) The average distance of B from these two:
+ *                   (|B - R| + |B - G|) / 2
+ *            (b) The minimum distance of B from these two:
+ *                   min(|B - R|, |B - G|).
+ *            (c) The maximum distance of B from these two:
+ *                   max(|B - R|, |B - G|)
+ *      (3) The three methods for choosing the color magnitude from
+ *          the components are selected with these flags:
+ *            (a) L_MAX_DIFF_FROM_AVERAGE_2
+ *            (b) L_MAX_MIN_DIFF_FROM_2
+ *            (c) L_MAX_DIFF
+ *      (4) The three numbers (rwhite, gwhite and bwhite) can be thought
+ *          of as the values in the image corresponding to white.
+ *          They are used to compensate for an unbalanced color white point.
+ *          They must either be all 0 or all non-zero.  To turn this
+ *          off, set them all to 0.
+ * 
+ */ +PIX * +pixColorMagnitude(PIX *pixs, + l_int32 rwhite, + l_int32 gwhite, + l_int32 bwhite, + l_int32 type) +{ +l_int32 w, h, d, i, j, wplc, wpld; +l_int32 rval, gval, bval, rdist, gdist, bdist, colorval; +l_int32 rgdist, rbdist, gbdist, mindist, maxdist, minval, maxval; +l_int32 *rtab, *gtab, *btab; +l_uint32 pixel; +l_uint32 *datac, *datad, *linec, *lined; +NUMA *nar, *nag, *nab; +PIX *pixc, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixColorMagnitude"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (type != L_MAX_DIFF_FROM_AVERAGE_2 && type != L_MAX_MIN_DIFF_FROM_2 && + type != L_MAX_DIFF) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (rwhite < 0 || gwhite < 0 || bwhite < 0) + return (PIX *)ERROR_PTR("some white vals are negative", procName, NULL); + if ((rwhite || gwhite || bwhite) && (rwhite * gwhite * bwhite == 0)) + return (PIX *)ERROR_PTR("white vals not all zero or all nonzero", + procName, NULL); + + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (cmap) + pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc = pixClone(pixs); + + pixd = pixCreate(w, h, 8); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datac = pixGetData(pixc); + wplc = pixGetWpl(pixc); + if (rwhite) { /* all white pt vals are nonzero */ + nar = numaGammaTRC(1.0, 0, rwhite); + rtab = numaGetIArray(nar); + nag = numaGammaTRC(1.0, 0, gwhite); + gtab = numaGetIArray(nag); + nab = numaGammaTRC(1.0, 0, bwhite); + btab = numaGetIArray(nab); + } + for (i = 0; i < h; i++) { + linec = datac + i * wplc; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linec[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + if (rwhite) { /* color correct for white point */ + rval = rtab[rval]; + gval = gtab[gval]; + bval = btab[bval]; + } + if (type == L_MAX_DIFF_FROM_AVERAGE_2) { + rdist = ((gval + bval ) / 2 - rval); + rdist = L_ABS(rdist); + gdist = ((rval + bval ) / 2 - gval); + gdist = L_ABS(gdist); + bdist = ((rval + gval ) / 2 - bval); + bdist = L_ABS(bdist); + colorval = L_MAX(rdist, gdist); + colorval = L_MAX(colorval, bdist); + } else if (type == L_MAX_MIN_DIFF_FROM_2) { /* intermediate dist */ + rgdist = L_ABS(rval - gval); + rbdist = L_ABS(rval - bval); + gbdist = L_ABS(gval - bval); + maxdist = L_MAX(rgdist, rbdist); + if (gbdist >= maxdist) { + colorval = maxdist; + } else { /* gbdist is smallest or intermediate */ + mindist = L_MIN(rgdist, rbdist); + colorval = L_MAX(mindist, gbdist); + } + } else { /* type == L_MAX_DIFF */ + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + colorval = maxval - minval; + } + SET_DATA_BYTE(lined, j, colorval); + } + } + + if (rwhite) { + numaDestroy(&nar); + numaDestroy(&nag); + numaDestroy(&nab); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + } + pixDestroy(&pixc); + return pixd; +} + + +/* ----------------------------------------------------------------------- * + * Generates a mask over pixels that have sufficient color and * + * are not too close to gray pixels. * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixMaskOverColorPixels() + * + * \param[in] pixs 32 bpp rgb or 8 bpp colormapped + * \param[in] threshdiff threshold for minimum of the max difference + * between components + * \param[in] mindist min allowed distance from nearest non-color pixel + * \return pixd 1 bpp, mask over color pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) The generated mask identifies each pixel as either color or
+ *          non-color.  For a pixel to be color, it must satisfy two
+ *          constraints:
+ *            (a) The max difference between the r,g and b components must
+ *                equal or exceed a threshold %threshdiff.
+ *            (b) It must be at least %mindist (in an 8-connected way)
+ *                from the nearest non-color pixel.
+ *      (2) The distance constraint (b) is only applied if %mindist > 1.
+ *          For example, if %mindist == 2, the color pixels identified
+ *          by (a) are eroded by a 3x3 Sel.  In general, the Sel size
+ *          for erosion is 2 * (%mindist - 1) + 1.
+ *          Why have this constraint?  In scanned images that are
+ *          essentially gray, color artifacts are typically introduced
+ *          in transition regions near sharp edges that go from dark
+ *          to light, so this allows these transition regions to be removed.
+ * 
+ */ +PIX * +pixMaskOverColorPixels(PIX *pixs, + l_int32 threshdiff, + l_int32 mindist) +{ +l_int32 w, h, d, i, j, wpls, wpld, size; +l_int32 rval, gval, bval, minval, maxval; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixc, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMaskOverColorPixels"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (cmap) + pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc = pixClone(pixs); + + pixd = pixCreate(w, h, 1); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixc); + wpls = pixGetWpl(pixc); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + if (maxval - minval >= threshdiff) + SET_DATA_BIT(lined, j); + } + } + + if (mindist > 1) { + size = 2 * (mindist - 1) + 1; + pixErodeBrick(pixd, pixd, size, size); + } + + pixDestroy(&pixc); + return pixd; +} + + +/* ----------------------------------------------------------------------- * + * Generates a mask over pixels that have little color and * + * are not too bright * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixMaskOverGrayPixels() + * + * \param[in] pixs 32 bpp rgb + * \param[in] maxlimit only consider pixels with max component <= %maxlimit + * \param[in] satlimit only consider pixels with saturation <= %satlimit + * \return pixd (1 bpp), or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a mask over rgb pixels that are gray (i.e.,
+ *          have low saturation) and are not too bright.  For example, if
+ *          we know that the gray pixels in %pixs have saturation
+ *          (max - min) less than 10, and brightness (max) less than 200,
+ *             pixMaskOverGrayPixels(pixs, 220, 10)
+ *          will generate a mask over the gray pixels.  Other pixels that
+ *          are not too dark and have a relatively large saturation will
+ *          be little affected.
+ *      (2) The algorithm is related to pixDarkenGray().
+ * 
+ */ +PIX * +pixMaskOverGrayPixels(PIX *pixs, + l_int32 maxlimit, + l_int32 satlimit) +{ +l_int32 w, h, i, j, wpls, wpld; +l_int32 rval, gval, bval, minrg, min, maxrg, max, sat; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixMaskOverGrayPixels"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (maxlimit < 0 || maxlimit > 255) + return (PIX *)ERROR_PTR("invalid maxlimit", procName, NULL); + if (satlimit < 1) + return (PIX *)ERROR_PTR("invalid satlimit", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + sat = max - min; + if (max <= maxlimit && sat <= satlimit) + SET_DATA_BIT(lined, j); + } + } + return pixd; +} + + +/* ----------------------------------------------------------------------- * + * Generates a mask over pixels that have RGB color components * + * within the prescribed range (a cube in RGB color space) * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixMaskOverColorRange() + * + * \param[in] pixs 32 bpp rgb or 8 bpp colormapped + * \param[in] rmin, rmax min and max allowed values for red component + * \param[in] gmin, gmax ditto for green + * \param[in] bmin, bmax ditto for blue + * \return pixd 1 bpp, mask over color pixels, or NULL on error + */ +PIX * +pixMaskOverColorRange(PIX *pixs, + l_int32 rmin, + l_int32 rmax, + l_int32 gmin, + l_int32 gmax, + l_int32 bmin, + l_int32 bmax) +{ +l_int32 w, h, d, i, j, wpls, wpld; +l_int32 rval, gval, bval; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixc, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMaskOverColorRange"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (cmap) + pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc = pixClone(pixs); + + pixd = pixCreate(w, h, 1); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixc); + wpls = pixGetWpl(pixc); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + if (rval < rmin || rval > rmax) continue; + if (gval < gmin || gval > gmax) continue; + if (bval < bmin || bval > bmax) continue; + SET_DATA_BIT(lined, j); + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/* ----------------------------------------------------------------------- * + * Finds the fraction of pixels with "color" that are not close to black * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixColorFraction() + * + * \param[in] pixs 32 bpp rgb + * \param[in] darkthresh threshold near black; if the lightest component + * is below this, the pixel is not considered in + * the statistics; typ. 20 + * \param[in] lightthresh threshold near white; if the darkest component + * is above this, the pixel is not considered in + * the statistics; typ. 244 + * \param[in] diffthresh thresh for the maximum difference between + * component value; below this the pixel is not + * considered to have sufficient color + * \param[in] factor subsampling factor + * \param[out] ppixfract fraction of pixels in intermediate + * brightness range that were considered + * for color content + * \param[out] pcolorfract fraction of pixels that meet the + * criterion for sufficient color; 0.0 on error + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function is asking the question: to what extent does the
+ *          image appear to have color?   The amount of color a pixel
+ *          appears to have depends on both the deviation of the
+ *          individual components from their average and on the average
+ *          intensity itself.  For example, the color will be much more
+ *          obvious with a small deviation from white than the same
+ *          deviation from black.
+ *      (2) Any pixel that meets these three tests is considered a
+ *          colorful pixel:
+ *            (a) the lightest component must equal or exceed %darkthresh
+ *            (b) the darkest component must not exceed %lightthresh
+ *            (c) the max difference between components must equal or
+ *                exceed %diffthresh.
+ *      (3) The dark pixels are removed from consideration because
+ *          they don't appear to have color.
+ *      (4) The very lightest pixels are removed because if an image
+ *          has a lot of "white", the color fraction will be artificially
+ *          low, even if all the other pixels are colorful.
+ *      (5) If pixfract is very small, there are few pixels that are neither
+ *          black nor white.  If colorfract is very small, the pixels
+ *          that are neither black nor white have very little color
+ *          content.  The product 'pixfract * colorfract' gives the
+ *          fraction of pixels with significant color content.
+ *      (6) One use of this function is as a preprocessing step for median
+ *          cut quantization (colorquant2.c), which does a very poor job
+ *          splitting the color space into rectangular volume elements when
+ *          all the pixels are near the diagonal of the color cube.  For
+ *          octree quantization of an image with only gray values, the
+ *          2^(level) octcubes on the diagonal are the only ones
+ *          that can be occupied.
+ * 
+ */ +l_ok +pixColorFraction(PIX *pixs, + l_int32 darkthresh, + l_int32 lightthresh, + l_int32 diffthresh, + l_int32 factor, + l_float32 *ppixfract, + l_float32 *pcolorfract) +{ +l_int32 i, j, w, h, wpl, rval, gval, bval, minval, maxval; +l_int32 total, npix, ncolor; +l_uint32 pixel; +l_uint32 *data, *line; + + PROCNAME("pixColorFraction"); + + if (ppixfract) *ppixfract = 0.0; + if (pcolorfract) *pcolorfract = 0.0; + if (!ppixfract || !pcolorfract) + return ERROR_INT("&pixfract and &colorfract not defined", + procName, 1); + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + npix = ncolor = total = 0; + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + total++; + pixel = line[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + if (minval > lightthresh) /* near white */ + continue; + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + if (maxval < darkthresh) /* near black */ + continue; + + npix++; + if (maxval - minval >= diffthresh) + ncolor++; + } + } + + if (npix == 0) { + L_WARNING("No pixels found for consideration\n", procName); + return 0; + } + *ppixfract = (l_float32)npix / (l_float32)total; + *pcolorfract = (l_float32)ncolor / (l_float32)npix; + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Determine if there are significant color regions in a page image * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixFindColorRegions() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixm [optional] 1 bpp mask image + * \param[in] factor subsample factor; integer >= 1 + * \param[in] lightthresh threshold for component average in lightest + * of 10 buckets; typ. 210; -1 for default + * \param[in] darkthresh threshold to eliminate dark pixels (e.g., text) + * from consideration; typ. 70; -1 for default. + * \param[in] mindiff minimum difference (b - r) and (g - r), used to + * find blue or green pixels; typ. 10; -1 for default + * \param[in] colordiff minimum difference in (max - min) component to + * qualify as a color pixel; typ. 90; -1 for default + * \param[in] edgefract fraction of image half-width and half-height + * for which color pixels are ignored; typ. 0.05. + * \param[out] pcolorfract fraction of 'color' pixels found + * \param[out] pcolormask1 [optional] mask over background color, if any + * \param[out] pcolormask2 [optional] filtered mask over background color + * \param[out] pixadb [optional] debug intermediate results + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function tries to determine if there is a significant
+ *          color or darker region on a scanned page image, where part
+ *          of the image is background that is either white or reddish.
+ *          This also allows extraction of regions of colored pixels that
+ *          have a smaller red component than blue or green components.
+ *      (2) If %pixm exists, pixels under its fg are combined with
+ *          dark pixels to make a mask of pixels not to be considered
+ *          as color candidates.
+ *      (3) There are four thresholds.
+ *          * %lightthresh: compute the average value of each rgb pixel,
+ *            and make 10 buckets by value.  If the lightest bucket gray
+ *            value is below %lightthresh, the image is not considered
+ *            to have a light bg, and this returns 0.0 for %colorfract.
+ *          * %darkthresh: ignore pixels darker than this (typ. fg text).
+ *            We make a 1 bpp mask of these pixels, and then dilate it to
+ *            remove all vestiges of fg from their vicinity.
+ *          * %mindiff: consider pixels with either (b - r) or (g - r)
+ *            being at least this value, as having color.
+ *          * %colordiff: consider pixels where the (max - min) difference
+ *            of the pixel components exceeds this value, as having color.
+ *      (4) All components of color pixels that are touching the image
+ *          border are removed.  Additionally, all pixels within some
+ *          normalized distance %edgefract from the image border can
+ *          be removed.  This insures that dark pixels near the edge
+ *          of the image are not included.
+ *      (5) This returns in %pcolorfract the fraction of pixels that have
+ *          color and are not in the set consisting of an OR between
+ *          %pixm and the dilated dark pixel mask.
+ *      (6) No masks are returned unless light color pixels are found.
+ *          If colorfract > 0.0 and %pcolormask1 is defined, this returns
+ *          a 1 bpp mask with fg pixels over the color background.
+ *          This mask may have some holes in it.
+ *      (7) If colorfract > 0.0 and %pcolormask2 is defined, this returns
+ *          a version of colormask1 where small holes have been filled.
+ *      (8) To generate a boxa of rectangular regions from the overlap
+ *          of components in the filtered mask:
+ *                boxa1 = pixConnCompBB(colormask2, 8);
+ *                boxa2 = boxaCombineOverlaps(boxa1, NULL);
+ *          This is done here in debug mode.
+ * 
+ */ +l_ok +pixFindColorRegions(PIX *pixs, + PIX *pixm, + l_int32 factor, + l_int32 lightthresh, + l_int32 darkthresh, + l_int32 mindiff, + l_int32 colordiff, + l_float32 edgefract, + l_float32 *pcolorfract, + PIX **pcolormask1, + PIX **pcolormask2, + PIXA *pixadb) +{ +l_int32 w, h, count, rval, gval, bval, aveval, proceed; +l_float32 ratio; +l_uint32 *carray; +BOXA *boxa1, *boxa2; +PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixm1, *pixm2, *pixm3; + + PROCNAME("pixFindColorRegions"); + + if (pcolormask1) *pcolormask1 = NULL; + if (pcolormask2) *pcolormask2 = NULL; + if (!pcolorfract) + return ERROR_INT("&colorfract not defined", procName, 1); + *pcolorfract = 0.0; + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (factor < 1) factor = 1; + if (lightthresh < 0) lightthresh = 210; /* defaults */ + if (darkthresh < 0) darkthresh = 70; + if (mindiff < 0) mindiff = 10; + if (colordiff < 0) colordiff = 90; + if (edgefract < 0.0 || edgefract > 1.0) edgefract = 0.05; + + /* Check if pixm covers most of the image. If so, just return. */ + pixGetDimensions(pixs, &w, &h, NULL); + if (pixm) { + pixCountPixels(pixm, &count, NULL); + ratio = (l_float32)count / ((l_float32)(w) * h); + if (ratio > 0.7) { + if (pixadb) L_INFO("pixm has big fg: %f5.2\n", procName, ratio); + return 0; + } + } + + /* Get the light background color. Use the average component value + * and select the lightest of 10 buckets. Require that it is + * reddish and, using lightthresh, not too dark. */ + pixGetRankColorArray(pixs, 10, L_SELECT_AVERAGE, factor, &carray, 0, 0); + if (!carray) + return ERROR_INT("rank color array not made", procName, 1); + extractRGBValues(carray[9], &rval, &gval, &bval); + if (pixadb) L_INFO("lightest background color: (r,g,b) = (%d,%d,%d)\n", + procName, rval, gval, bval); + proceed = TRUE; + if ((rval < bval - 2) || (rval < gval - 2)) { + if (pixadb) L_INFO("background not reddish\n", procName); + proceed = FALSE; + } + aveval = (rval + gval + bval) / 3; + if (aveval < lightthresh) { + if (pixadb) L_INFO("background too dark\n", procName); + proceed = FALSE; + } + if (pixadb) { + pix1 = pixDisplayColorArray(carray, 10, 120, 3, 6); + pixaAddPix(pixadb, pix1, L_INSERT); + } + LEPT_FREE(carray); + if (proceed == FALSE) return 0; + + /* Make a mask pixm1 over the dark pixels in the image: + * convert to gray using the average of the components; + * threshold using darkthresh; do a small dilation; + * combine with pixm. */ + pix1 = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + pixm1 = pixThresholdToBinary(pix1, darkthresh); + pixDilateBrick(pixm1, pixm1, 7, 7); + if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); + if (pixm) { + pixOr(pixm1, pixm1, pixm); + if (pixadb) pixaAddPix(pixadb, pixm1, L_COPY); + } + pixDestroy(&pix1); + + /* Make masks over pixels that are bluish, or greenish, or + have a very large color saturation (max - min) value. */ + pixm2 = pixConvertRGBToBinaryArb(pixs, -1.0, 0.0, 1.0, mindiff, + L_SELECT_IF_GTE); /* b - r */ + if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); + pix1 = pixConvertRGBToBinaryArb(pixs, -1.0, 1.0, 0.0, mindiff, + L_SELECT_IF_GTE); /* g - r */ + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + pixOr(pixm2, pixm2, pix1); + pixDestroy(&pix1); + pix1 = pixConvertRGBToGrayMinMax(pixs, L_CHOOSE_MAXDIFF); + pix2 = pixThresholdToBinary(pix1, colordiff); + pixInvert(pix2, pix2); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + pixOr(pixm2, pixm2, pix2); + if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Subtract the dark pixels represented by pixm1. + * pixm2 now holds all the color pixels of interest */ + pixSubtract(pixm2, pixm2, pixm1); + pixDestroy(&pixm1); + if (pixadb) pixaAddPix(pixadb, pixm2, L_COPY); + + /* But we're not quite finished. Remove pixels from any component + * that is touching the image border. False color pixels can + * sometimes be found there if the image is much darker near + * the border, due to oxidation or reduced illumination. Also + * remove any pixels within the normalized fraction %distfract + * of the image border. */ + pixm3 = pixRemoveBorderConnComps(pixm2, 8); + pixDestroy(&pixm2); + if (edgefract > 0.0) { + pix2 = pixMakeSymmetricMask(w, h, edgefract, edgefract, L_USE_INNER); + pixAnd(pixm3, pixm3, pix2); + pixDestroy(&pix2); + } + if (pixadb) pixaAddPix(pixadb, pixm3, L_COPY); + + /* Get the fraction of light color pixels */ + pixCountPixels(pixm3, &count, NULL); + *pcolorfract = (l_float32)count / ((l_float32)(w) * h); + if (pixadb) { + if (count == 0) + L_INFO("no light color pixels found\n", procName); + else + L_INFO("fraction of light color pixels = %5.3f\n", procName, + *pcolorfract); + } + + /* Debug: extract the color pixels from pixs */ + if (pixadb && count > 0) { + /* Use pixm3 to extract the color pixels */ + pix3 = pixCreateTemplate(pixs); + pixSetAll(pix3); + pixCombineMasked(pix3, pixs, pixm3); + pixaAddPix(pixadb, pix3, L_INSERT); + + /* Use additional filtering to extract the color pixels */ + pix3 = pixCloseSafeBrick(NULL, pixm3, 15, 15); + pixaAddPix(pixadb, pix3, L_INSERT); + pix5 = pixCreateTemplate(pixs); + pixSetAll(pix5); + pixCombineMasked(pix5, pixs, pix3); + pixaAddPix(pixadb, pix5, L_INSERT); + + /* Get the combined bounding boxes of the mask components + * in pix3, and extract those pixels from pixs. */ + boxa1 = pixConnCompBB(pix3, 8); + boxa2 = boxaCombineOverlaps(boxa1, NULL); + pix4 = pixCreateTemplate(pix3); + pixMaskBoxa(pix4, pix4, boxa2, L_SET_PIXELS); + pixaAddPix(pixadb, pix4, L_INSERT); + pix5 = pixCreateTemplate(pixs); + pixSetAll(pix5); + pixCombineMasked(pix5, pixs, pix4); + pixaAddPix(pixadb, pix5, L_INSERT); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + } + pixaAddPix(pixadb, pixs, L_COPY); + + /* Optional colormask returns */ + if (pcolormask2 && count > 0) + *pcolormask2 = pixCloseSafeBrick(NULL, pixm3, 15, 15); + if (pcolormask1 && count > 0) + *pcolormask1 = pixm3; + else + pixDestroy(&pixm3); + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Finds the number of perceptually significant gray intensities * + * in a grayscale image. * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixNumSignificantGrayColors() + * + * \param[in] pixs 8 bpp gray + * \param[in] darkthresh dark threshold for minimum intensity to be + * considered; typ. 20 + * \param[in] lightthresh threshold near white, for maximum intensity + * to be considered; typ. 236 + * \param[in] minfract minimum fraction of all pixels to include a level + * as significant; typ. 0.0001; should be < 0.001 + * \param[in] factor subsample factor; integer >= 1 + * \param[out] pncolors number of significant colors; 0 on error + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function is asking the question: how many perceptually
+ *          significant gray color levels is in this pix?
+ *          A color level must meet 3 criteria to be significant:
+ *            ~ it can't be too close to black
+ *            ~ it can't be too close to white
+ *            ~ it must have at least some minimum fractional population
+ *      (2) Use -1 for default values for darkthresh, lightthresh and minfract.
+ *      (3) Choose default of darkthresh = 20, because variations in very
+ *          dark pixels are not visually significant.
+ *      (4) Choose default of lightthresh = 236, because document images
+ *          that have been jpeg'd typically have near-white pixels in the
+ *          8x8 jpeg blocks, and these should not be counted.  It is desirable
+ *          to obtain a clean image by quantizing this noise away.
+ * 
+ */ +l_ok +pixNumSignificantGrayColors(PIX *pixs, + l_int32 darkthresh, + l_int32 lightthresh, + l_float32 minfract, + l_int32 factor, + l_int32 *pncolors) +{ +l_int32 i, w, h, count, mincount, ncolors; +NUMA *na; + + PROCNAME("pixNumSignificantGrayColors"); + + if (!pncolors) + return ERROR_INT("&ncolors not defined", procName, 1); + *pncolors = 0; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (darkthresh < 0) darkthresh = 20; /* defaults */ + if (lightthresh < 0) lightthresh = 236; + if (minfract < 0.0) minfract = 0.0001; + if (minfract > 1.0) + return ERROR_INT("minfract > 1.0", procName, 1); + if (minfract >= 0.001) + L_WARNING("minfract too big; likely to underestimate ncolors\n", + procName); + if (lightthresh > 255 || darkthresh >= lightthresh) + return ERROR_INT("invalid thresholds", procName, 1); + if (factor < 1) factor = 1; + + pixGetDimensions(pixs, &w, &h, NULL); + mincount = (l_int32)(minfract * w * h * factor * factor); + if ((na = pixGetGrayHistogram(pixs, factor)) == NULL) + return ERROR_INT("na not made", procName, 1); + ncolors = 2; /* add in black and white */ + for (i = darkthresh; i <= lightthresh; i++) { + numaGetIValue(na, i, &count); + if (count >= mincount) + ncolors++; + } + + *pncolors = ncolors; + numaDestroy(&na); + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Identifies images where color quantization will cause posterization * + * due to the existence of many colors in low-gradient regions. * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixColorsForQuantization() + * \param[in] pixs 8 bpp gray or 32 bpp rgb; with or without colormap + * \param[in] thresh binary threshold on edge gradient; 0 for default + * \param[out] pncolors the number of colors found + * \param[out] piscolor [optional] 1 if significant color is found; + * 0 otherwise. If pixs is 8 bpp, and does not have + * a colormap with color entries, this is 0 + * \param[in] debug 1 to output masked image that is tested for colors; + * 0 otherwise + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This function finds a measure of the number of colors that are
+ *          found in low-gradient regions of an image.  By its
+ *          magnitude relative to some threshold (not specified in
+ *          this function), it gives a good indication of whether
+ *          quantization will generate posterization.   This number
+ *          is larger for images with regions of slowly varying
+ *          intensity (if 8 bpp) or color (if rgb). Such images, if
+ *          quantized, may require dithering to avoid posterization,
+ *          and lossless compression is then expected to be poor.
+ *      (2) If pixs has a colormap, the number of colors returned is
+ *          the number in the colormap.
+ *      (3) It is recommended that document images be reduced to a width
+ *          of 800 pixels before applying this function.  Then it can
+ *          be expected that color detection will be fairly accurate
+ *          and the number of colors will reflect both the content and
+ *          the type of compression to be used.  For less than 15 colors,
+ *          there is unlikely to be a halftone image, and lossless
+ *          quantization should give both a good visual result and
+ *          better compression.
+ *      (4) When using the default threshold on the gradient (15),
+ *          images (both gray and rgb) where ncolors is greater than
+ *          about 15 will compress poorly with either lossless
+ *          compression or dithered quantization, and they may be
+ *          posterized with non-dithered quantization.
+ *      (5) For grayscale images, or images without significant color,
+ *          this returns the number of significant gray levels in
+ *          the low-gradient regions.  The actual number of gray levels
+ *          can be large due to jpeg compression noise in the background.
+ *      (6) Similarly, for color images, the actual number of different
+ *          (r,g,b) colors in the low-gradient regions (rather than the
+ *          number of occupied level 4 octcubes) can be quite large, e.g.,
+ *          due to jpeg compression noise, even for regions that appear
+ *          to be of a single color.  By quantizing to level 4 octcubes,
+ *          most of these superfluous colors are removed from the counting.
+ *      (7) The image is tested for color.  If there is very little color,
+ *          it is thresholded to gray and the number of gray levels in
+ *          the low gradient regions is found.  If the image has color,
+ *          the number of occupied level 4 octcubes is found.
+ *      (8) The number of colors in the low-gradient regions increases
+ *          monotonically with the threshold %thresh on the edge gradient.
+ *      (9) Background: grayscale and color quantization is often useful
+ *          to achieve highly compressed images with little visible
+ *          distortion.  However, gray or color washes (regions of
+ *          low gradient) can defeat this approach to high compression.
+ *          How can one determine if an image is expected to compress
+ *          well using gray or color quantization?  We use the fact that
+ *            * gray washes, when quantized with less than 50 intensities,
+ *              have posterization (visible boundaries between regions
+ *              of uniform 'color') and poor lossless compression
+ *            * color washes, when quantized with level 4 octcubes,
+ *              typically result in both posterization and the occupancy
+ *              of many level 4 octcubes.
+ *          Images can have colors either intrinsically or as jpeg
+ *          compression artifacts.  This function reduces but does not
+ *          completely eliminate measurement of jpeg quantization noise
+ *          in the white background of grayscale or color images.
+ * 
+ */ +l_ok +pixColorsForQuantization(PIX *pixs, + l_int32 thresh, + l_int32 *pncolors, + l_int32 *piscolor, + l_int32 debug) +{ +l_int32 w, h, d, minside, factor; +l_float32 pixfract, colorfract; +PIX *pixt, *pixsc, *pixg, *pixe, *pixb, *pixm; +PIXCMAP *cmap; + + PROCNAME("pixColorsForQuantization"); + + if (piscolor) *piscolor = 0; + if (!pncolors) + return ERROR_INT("&ncolors not defined", procName, 1); + *pncolors = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) != NULL) { + *pncolors = pixcmapGetCount(cmap); + if (piscolor) + pixcmapHasColor(cmap, piscolor); + return 0; + } + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32) + return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); + if (thresh <= 0) + thresh = 15; + + /* First test if 32 bpp has any significant color; if not, + * convert it to gray. Colors whose average values are within + * 20 of black or 8 of white are ignored because they're not + * very 'colorful'. If less than 2.5/10000 of the pixels have + * significant color, consider the image to be gray. */ + minside = L_MIN(w, h); + if (d == 8) { + pixt = pixClone(pixs); + } else { /* d == 32 */ + factor = L_MAX(1, minside / 400); + pixColorFraction(pixs, 20, 248, 30, factor, &pixfract, &colorfract); + if (pixfract * colorfract < 0.00025) { + pixt = pixGetRGBComponent(pixs, COLOR_RED); + d = 8; + } else { /* d == 32 */ + pixt = pixClone(pixs); + if (piscolor) + *piscolor = 1; + } + } + + /* If the smallest side is less than 1000, do not downscale. + * If it is in [1000 ... 2000), downscale by 2x. If it is >= 2000, + * downscale by 4x. Factors of 2 are chosen for speed. The + * actual resolution at which subsequent calculations take place + * is not strongly dependent on downscaling. */ + factor = L_MAX(1, minside / 500); + if (factor == 1) + pixsc = pixCopy(NULL, pixt); /* to be sure pixs is unchanged */ + else if (factor == 2 || factor == 3) + pixsc = pixScaleAreaMap2(pixt); + else + pixsc = pixScaleAreaMap(pixt, 0.25, 0.25); + + /* Basic edge mask generation procedure: + * ~ work on a grayscale image + * ~ get a 1 bpp edge mask by using an edge filter and + * thresholding to get fg pixels at the edges + * ~ for gray, dilate with a 3x3 brick Sel to get mask over + * all pixels within a distance of 1 pixel from the nearest + * edge pixel + * ~ for color, dilate with a 7x7 brick Sel to get mask over + * all pixels within a distance of 3 pixels from the nearest + * edge pixel */ + if (d == 8) + pixg = pixClone(pixsc); + else /* d == 32 */ + pixg = pixConvertRGBToLuminance(pixsc); + pixe = pixSobelEdgeFilter(pixg, L_ALL_EDGES); + pixb = pixThresholdToBinary(pixe, thresh); + pixInvert(pixb, pixb); + if (d == 8) + pixm = pixMorphSequence(pixb, "d3.3", 0); + else + pixm = pixMorphSequence(pixb, "d7.7", 0); + + /* Mask the near-edge pixels to white, and count the colors. + * If grayscale, don't count colors within 20 levels of + * black or white, and only count colors with a fraction + * of at least 1/10000 of the image pixels. + * If color, count the number of level 4 octcubes that + * contain at least 20 pixels. These magic numbers are guesses + * as to what might work, based on a small data set. Results + * should not be overly sensitive to their actual values. */ + if (d == 8) { + pixSetMasked(pixg, pixm, 0xff); + if (debug) pixWrite("junkpix8.png", pixg, IFF_PNG); + pixNumSignificantGrayColors(pixg, 20, 236, 0.0001, 1, pncolors); + } else { /* d == 32 */ + pixSetMasked(pixsc, pixm, 0xffffffff); + if (debug) pixWrite("junkpix32.png", pixsc, IFF_PNG); + pixNumberOccupiedOctcubes(pixsc, 4, 20, -1, pncolors); + } + + pixDestroy(&pixt); + pixDestroy(&pixsc); + pixDestroy(&pixg); + pixDestroy(&pixe); + pixDestroy(&pixb); + pixDestroy(&pixm); + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Finds the number of unique colors in an image * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixNumColors() + * \param[in] pixs 2, 4, 8, 32 bpp + * \param[in] factor subsampling factor; integer + * \param[out] pncolors the number of colors found, or 0 if + * there are more than 256 + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This returns the actual number of colors found in the image,
+ *          even if there is a colormap.  If %factor == 1 and the
+ *          number of colors differs from the number of entries
+ *          in the colormap, a warning is issued.
+ *      (2) Use %factor == 1 to find the actual number of colors.
+ *          Use %factor > 1 to quickly find the approximate number of colors.
+ *      (3) For d = 2, 4 or 8 bpp grayscale, this returns the number
+ *          of colors found in the image in 'ncolors'.
+ *      (4) For d = 32 bpp (rgb), if the number of colors is
+ *          greater than 256, this returns 0 in 'ncolors'.
+ * 
+ */ +l_ok +pixNumColors(PIX *pixs, + l_int32 factor, + l_int32 *pncolors) +{ +l_int32 w, h, d, i, j, wpl, hashsize, sum, count; +l_int32 rval, gval, bval, val; +l_int32 *inta; +l_uint32 pixel; +l_uint32 *data, *line; +PIXCMAP *cmap; + + PROCNAME("pixNumColors"); + + if (!pncolors) + return ERROR_INT("&ncolors not defined", procName, 1); + *pncolors = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8 && d != 32) + return ERROR_INT("d not in {2, 4, 8, 32}", procName, 1); + if (factor < 1) factor = 1; + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + sum = 0; + if (d != 32) { /* grayscale */ + if ((inta = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32))) == NULL) + return ERROR_INT("calloc failure for inta", procName, 1); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + if (d == 8) + val = GET_DATA_BYTE(line, j); + else if (d == 4) + val = GET_DATA_QBIT(line, j); + else /* d == 2 */ + val = GET_DATA_DIBIT(line, j); + inta[val] = 1; + } + } + for (i = 0; i < 256; i++) + if (inta[i]) sum++; + *pncolors = sum; + LEPT_FREE(inta); + + cmap = pixGetColormap(pixs); + if (cmap && factor == 1) { + count = pixcmapGetCount(cmap); + if (sum != count) + L_WARNING("colormap size %d differs from actual colors\n", + procName, count); + } + return 0; + } + + /* 32 bpp rgb; quit if we get above 256 colors */ + hashsize = 5507; /* big and prime; collisions are not likely */ + if ((inta = (l_int32 *)LEPT_CALLOC(hashsize, sizeof(l_int32))) == NULL) + return ERROR_INT("calloc failure with hashsize", procName, 1); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + pixel = line[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + val = (137 * rval + 269 * gval + 353 * bval) % hashsize; + if (inta[val] == 0) { + inta[val] = 1; + sum++; + if (sum > 256) { + LEPT_FREE(inta); + return 0; + } + } + } + } + + *pncolors = sum; + LEPT_FREE(inta); + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Find the most "populated" colors in the image (and quantize) * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixGetMostPopulatedColors() + * \param[in] pixs 32 bpp rgb + * \param[in] sigbits 2-6, significant bits retained in the quantizer + * for each component of the input image + * \param[in] factor subsampling factor; use 1 for no subsampling + * \param[in] ncolors the number of most populated colors to select + * \param[out] parray [optional] array of colors, each as 0xrrggbb00 + * \param[out] pcmap [optional] colormap of the colors + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This finds the %ncolors most populated cubes in rgb colorspace,
+ *          where the cube size depends on %sigbits as
+ *               cube side = (256 >> sigbits)
+ *      (2) The rgb color components are found at the center of the cube.
+ *      (3) The output array of colors can be displayed using
+ *               pixDisplayColorArray(array, ncolors, ...);
+ * 
+ */ +l_ok +pixGetMostPopulatedColors(PIX *pixs, + l_int32 sigbits, + l_int32 factor, + l_int32 ncolors, + l_uint32 **parray, + PIXCMAP **pcmap) +{ +l_int32 n, i, rgbindex, rval, gval, bval; +NUMA *nahisto, *naindex; + + PROCNAME("pixGetMostPopulatedColors"); + + if (!parray && !pcmap) + return ERROR_INT("no return val requested", procName, 1); + if (parray) *parray = NULL; + if (pcmap) *pcmap = NULL; + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined", procName, 1); + if (sigbits < 2 || sigbits > 6) + return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); + if (factor < 1 || ncolors < 1) + return ERROR_INT("factor < 1 or ncolors < 1", procName, 1); + + if ((nahisto = pixGetRGBHistogram(pixs, sigbits, factor)) == NULL) + return ERROR_INT("nahisto not made", procName, 1); + + /* naindex contains the index into nahisto, which is the rgbindex */ + naindex = numaSortIndexAutoSelect(nahisto, L_SORT_DECREASING); + numaDestroy(&nahisto); + if (!naindex) + return ERROR_INT("naindex not made", procName, 1); + + n = numaGetCount(naindex); + ncolors = L_MIN(n, ncolors); + if (parray) *parray = (l_uint32 *)LEPT_CALLOC(ncolors, sizeof(l_uint32)); + if (pcmap) *pcmap = pixcmapCreate(8); + for (i = 0; i < ncolors; i++) { + numaGetIValue(naindex, i, &rgbindex); /* rgb index */ + getRGBFromIndex(rgbindex, sigbits, &rval, &gval, &bval); + if (parray) composeRGBPixel(rval, gval, bval, *parray + i); + if (pcmap) pixcmapAddColor(*pcmap, rval, gval, bval); + } + + numaDestroy(&naindex); + return 0; +} + + +/*! + * \brief pixSimpleColorQuantize() + * \param[in] pixs 32 bpp rgb + * \param[in] sigbits 2-4, significant bits retained in the quantizer + * for each component of the input image + * \param[in] factor subsampling factor; use 1 for no subsampling + * \param[in] ncolors the number of most populated colors to select + * \return pixd 8 bpp cmapped or NULL on error + * + *
+ * Notes:
+ *      (1) If you want to do color quantization for real, use octcube
+ *          or modified median cut.  This function shows that it is
+ *          easy to make a simple quantizer based solely on the population
+ *          in cells of a given size in rgb color space.
+ *      (2) The %ncolors most populated cells at the %sigbits level form
+ *          the colormap for quantizing, and this uses octcube indexing
+ *          under the covers to assign each pixel to the nearest color.
+ *      (3) %sigbits is restricted to 2, 3 and 4.  At the low end, the
+ *          color discrimination is very crude; at the upper end, a set of
+ *          similar colors can dominate the result.  Interesting results
+ *          are generally found for %sigbits = 3 and ncolors ~ 20.
+ *      (4) See also pixColorSegment() for a method of quantizing the
+ *          colors to generate regions of similar color.
+ * 
+ */ +PIX * +pixSimpleColorQuantize(PIX *pixs, + l_int32 sigbits, + l_int32 factor, + l_int32 ncolors) +{ +l_int32 w, h; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixSimpleColorQuantize"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (sigbits < 2 || sigbits > 4) + return (PIX *)ERROR_PTR("sigbits not in {2,3,4}", procName, NULL); + + pixGetMostPopulatedColors(pixs, sigbits, factor, ncolors, NULL, &cmap); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, 8); + pixSetColormap(pixd, cmap); + pixAssignToNearestColor(pixd, pixs, NULL, 4, NULL); + return pixd; +} + + +/* ----------------------------------------------------------------------- * + * Constructs a color histogram based on rgb indices * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixGetRGBHistogram() + * \param[in] pixs 32 bpp rgb + * \param[in] sigbits 2-6, significant bits retained in the quantizer + * for each component of the input image + * \param[in] factor subsampling factor; use 1 for no subsampling + * \return numa histogram of colors, indexed by RGB + * components, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses a simple, fast method of indexing into an rgb image.
+ *      (2) The output is a 1D histogram of count vs. rgb-index, which
+ *          uses red sigbits as the most significant and blue as the least.
+ *      (3) This function produces the same result as pixMedianCutHisto().
+ * 
+ */ +NUMA * +pixGetRGBHistogram(PIX *pixs, + l_int32 sigbits, + l_int32 factor) +{ +l_int32 w, h, i, j, size, wpl, rval, gval, bval, npts; +l_uint32 val32, rgbindex; +l_float32 *array; +l_uint32 *data, *line, *rtab, *gtab, *btab; +NUMA *na; + + PROCNAME("pixGetRGBHistogram"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (sigbits < 2 || sigbits > 6) + return (NUMA *)ERROR_PTR("sigbits not in [2 ... 6]", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("factor < 1", procName, NULL); + + /* Get histogram size: 2^(3 * sigbits) */ + size = 1 << (3 * sigbits); /* 64, 512, 4096, 32768, 262144 */ + na = numaMakeConstant(0, size); /* init to all 0 */ + array = numaGetFArray(na, L_NOCOPY); + + makeRGBIndexTables(&rtab, >ab, &btab, sigbits); + + /* Check the number of sampled pixels */ + pixGetDimensions(pixs, &w, &h, NULL); + npts = ((w + factor - 1) / factor) * ((h + factor - 1) / factor); + if (npts < 1000) + L_WARNING("only sampling %d pixels\n", procName, npts); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + val32 = *(line + j); + extractRGBValues(val32, &rval, &gval, &bval); + rgbindex = rtab[rval] | gtab[gval] | btab[bval]; + array[rgbindex]++; + } + } + + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return na; +} + + +/*! + * \brief makeRGBIndexTables() + * + * \param[out] prtab, pgtab, pbtab 256-entry rgb index tables + * \param[in] sigbits 2-6, significant bits retained in the quantizer + * for each component of the input image + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) These tables are used to map from rgb sample values to
+ *          an rgb index, using
+ *             rgbindex = rtab[rval] | gtab[gval] | btab[bval]
+ *          where, e.g., if sigbits = 3, the index is a 9 bit integer:
+ *             r7 r6 r5 g7 g6 g5 b7 b6 b5
+ * 
+ */ +l_ok +makeRGBIndexTables(l_uint32 **prtab, + l_uint32 **pgtab, + l_uint32 **pbtab, + l_int32 sigbits) +{ +l_int32 i; +l_uint32 *rtab, *gtab, *btab; + + PROCNAME("makeRGBIndexTables"); + + if (prtab) *prtab = NULL; + if (pgtab) *pgtab = NULL; + if (pbtab) *pbtab = NULL; + if (!prtab || !pgtab || !pbtab) + return ERROR_INT("not all table ptrs defined", procName, 1); + if (sigbits < 2 || sigbits > 6) + return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); + + rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + if (!rtab || !gtab || !btab) + return ERROR_INT("calloc fail for tab", procName, 1); + *prtab = rtab; + *pgtab = gtab; + *pbtab = btab; + switch (sigbits) { + case 2: + for (i = 0; i < 256; i++) { + rtab[i] = (i & 0xc0) >> 2; + gtab[i] = (i & 0xc0) >> 4; + btab[i] = (i & 0xc0) >> 6; + } + break; + case 3: + for (i = 0; i < 256; i++) { + rtab[i] = (i & 0xe0) << 1; + gtab[i] = (i & 0xe0) >> 2; + btab[i] = (i & 0xe0) >> 5; + } + break; + case 4: + for (i = 0; i < 256; i++) { + rtab[i] = (i & 0xf0) << 4; + gtab[i] = (i & 0xf0); + btab[i] = (i & 0xf0) >> 4; + } + break; + case 5: + for (i = 0; i < 256; i++) { + rtab[i] = (i & 0xf8) << 7; + gtab[i] = (i & 0xf8) << 2; + btab[i] = (i & 0xf8) >> 3; + } + break; + case 6: + for (i = 0; i < 256; i++) { + rtab[i] = (i & 0xfc) << 10; + gtab[i] = (i & 0xfc) << 4; + btab[i] = (i & 0xfc) >> 2; + } + break; + default: + L_ERROR("Illegal sigbits = %d\n", procName, sigbits); + return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); + } + + return 0; +} + + +/*! + * \brief getRGBFromIndex() + * + * \param[in] index rgbindex + * \param[in] sigbits 2-6, significant bits retained in the quantizer + * for each component of the input image + * \param[out] prval, pgval, pbval rgb values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The %index is expressed in bits, based on the the
+ *          %sigbits of the r, g and b components, as
+ *             r7 r6 ... g7 g6 ... b7 b6 ...
+ *      (2) The computed rgb values are in the center of the quantized cube.
+ *          The extra bit that is OR'd accomplishes this.
+ * 
+ */ +l_ok +getRGBFromIndex(l_uint32 index, + l_int32 sigbits, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ + PROCNAME("getRGBFromIndex"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval || !pgval || !pbval) + return ERROR_INT("not all component ptrs defined", procName, 1); + if (sigbits < 2 || sigbits > 6) + return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); + + switch (sigbits) { + case 2: + *prval = ((index << 2) & 0xc0) | 0x20; + *pgval = ((index << 4) & 0xc0) | 0x20; + *pbval = ((index << 6) & 0xc0) | 0x20; + break; + case 3: + *prval = ((index >> 1) & 0xe0) | 0x10; + *pgval = ((index << 2) & 0xe0) | 0x10; + *pbval = ((index << 5) & 0xe0) | 0x10; + break; + case 4: + *prval = ((index >> 4) & 0xf0) | 0x08; + *pgval = (index & 0xf0) | 0x08; + *pbval = ((index << 4) & 0xf0) | 0x08; + break; + case 5: + *prval = ((index >> 7) & 0xf8) | 0x04; + *pgval = ((index >> 2) & 0xf8) | 0x04; + *pbval = ((index << 3) & 0xf8) | 0x04; + break; + case 6: + *prval = ((index >> 10) & 0xfc) | 0x02; + *pgval = ((index >> 4) & 0xfc) | 0x02; + *pbval = ((index << 2) & 0xfc) | 0x02; + break; + default: + L_ERROR("Illegal sigbits = %d\n", procName, sigbits); + return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); + } + + return 0; +} + + +/* ----------------------------------------------------------------------- * + * Identify images that have highlight (red) color * + * ----------------------------------------------------------------------- */ +/*! + * \brief pixHasHighlightRed() + * + * \param[in] pixs 32 bpp rgb + * \param[in] factor subsampling; an integer >= 1; use 1 for all pixels + * \param[in] fract threshold fraction of all image pixels + * \param[in] fthresh threshold on a function of the components; typ. ~2.5 + * \param[out] phasred 1 if red pixels are above threshold + * \param[out] pratio [optional] normalized fraction of threshold + * red pixels that is actually observed + * \param[out] ppixdb [optional] seed pixel mask + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Pixels are identified as red if they satisfy two conditions:
+ *          (a) The components satisfy (R-B)/B > %fthresh   (red or dark fg)
+ *          (b) The red component satisfied R > 128  (red or light bg)
+ *          Masks are generated for (a) and (b), and the intersection
+ *          gives the pixels that are red but not either light bg or
+ *          dark fg.
+ *      (2) A typical value for fract = 0.0001, which gives sensitivity
+ *          to an image where a small fraction of the pixels are printed
+ *          in red.
+ *      (3) A typical value for fthresh = 2.5.  Higher values give less
+ *          sensitivity to red, and fewer false positives.
+ * 
+ */ +l_ok +pixHasHighlightRed(PIX *pixs, + l_int32 factor, + l_float32 fract, + l_float32 fthresh, + l_int32 *phasred, + l_float32 *pratio, + PIX **ppixdb) +{ +l_int32 w, h, count; +l_float32 ratio; +PIX *pix1, *pix2, *pix3, *pix4; +FPIX *fpix; + + PROCNAME("pixHasHighlightRed"); + + if (pratio) *pratio = 0.0; + if (ppixdb) *ppixdb = NULL; + if (phasred) *phasred = 0; + if (!pratio && !ppixdb) + return ERROR_INT("no return val requested", procName, 1); + if (!phasred) + return ERROR_INT("&hasred not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (fthresh < 1.5 || fthresh > 3.5) + L_WARNING("fthresh = %f is out of normal bounds\n", procName, fthresh); + + if (factor > 1) + pix1 = pixScaleByIntSampling(pixs, factor); + else + pix1 = pixClone(pixs); + + /* Identify pixels that are either red or dark foreground */ + fpix = pixComponentFunction(pix1, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0); + pix2 = fpixThresholdToPix(fpix, fthresh); + pixInvert(pix2, pix2); + + /* Identify pixels that are either red or light background */ + pix3 = pixGetRGBComponent(pix1, COLOR_RED); + pix4 = pixThresholdToBinary(pix3, 130); + pixInvert(pix4, pix4); + + pixAnd(pix4, pix4, pix2); + pixCountPixels(pix4, &count, NULL); + pixGetDimensions(pix4, &w, &h, NULL); + L_INFO("count = %d, thresh = %d\n", procName, count, + (l_int32)(fract * w * h)); + ratio = (l_float32)count / (fract * w * h); + if (pratio) *pratio = ratio; + if (ratio >= 1.0) + *phasred = 1; + if (ppixdb) + *ppixdb = pix4; + else + pixDestroy(&pix4); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + fpixDestroy(&fpix); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/coloring.c b/3rdparty/hgOCR/leptonica/coloring.c new file mode 100644 index 00000000..cdac7029 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/coloring.c @@ -0,0 +1,1046 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file coloring.c + *
+ *
+ *      Coloring "gray" pixels
+ *           PIX             *pixColorGrayRegions()
+ *           l_int32          pixColorGray()
+ *           PIX             *pixColorGrayMasked()
+ *
+ *      Adjusting one or more colors to a target color
+ *           PIX             *pixSnapColor()
+ *           PIX             *pixSnapColorCmap()
+ *
+ *      Piecewise linear color mapping based on a source/target pair
+ *           PIX             *pixLinearMapToTargetColor()
+ *           l_int32          pixelLinearMapToTargetColor()
+ *
+ *      Fractional shift of RGB towards black or white
+ *           PIX             *pixShiftByComponent()
+ *           l_int32          pixelShiftByComponent()
+ *           l_int32          pixelFractionalShift()
+ *
+ *  There are several "coloring" functions in leptonica.
+ *  You can find them in these files:
+ *       coloring.c
+ *       paintcmap.c
+ *       pix2.c
+ *       blend.c
+ *       enhance.c
+ *
+ *  They fall into the following categories:
+ *
+ *  (1) Moving either the light or dark pixels toward a
+ *      specified color. (pixColorGray, pixColorGrayMasked)
+ *  (2) Forcing all pixels whose color is within some delta of a
+ *      specified color to move to that color. (pixSnapColor)
+ *  (3) Doing a piecewise linear color shift specified by a source
+ *      and a target color.  Each component shifts independently.
+ *      (pixLinearMapToTargetColor)
+ *  (4) Shifting all colors by a given fraction of their distance
+ *      from 0 (if shifting down) or from 255 (if shifting up).
+ *      This is useful for colorizing either the background or
+ *      the foreground of a grayscale image. (pixShiftByComponent)
+ *  (5) Shifting all colors by a component-dependent fraction of
+ *      their distance from 0 (if shifting down) or from 255 (if
+ *      shifting up).  This is useful for modifying the color to
+ *      compensate for color shifts in acquisition or printing.
+ *      (enhance.c: pixColorShiftRGB, pixMosaicColorShiftRGB).
+ *  (6) Repainting selected pixels. (paintcmap.c: pixSetSelectMaskedCmap)
+ *  (7) Blending a fraction of a specific color with the existing RGB
+ *      color.  (pix2.c: pixBlendInRect())
+ *  (8) Changing selected colors in a colormap.
+ *      (paintcmap.c: pixSetSelectCmap, pixSetSelectMaskedCmap)
+ *  (9) Shifting all the pixels towards black or white depending on
+ *      the gray value of a second image.  (blend.c: pixFadeWithGray)
+ *  (10) Changing the hue, saturation or brightness, by changing the
+ *      appropriate parameter in HSV color space by a fraction of
+ *      the distance toward its end-point.  For example, you can change
+ *      the brightness by moving each pixel's v-parameter a specified
+ *      fraction of the distance toward 0 (darkening) or toward 255
+ *      (brightening).  (enhance.c: pixModifySaturation,
+ *      pixModifyHue, pixModifyBrightness)
+ * 
+ */ + +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Coloring "gray" pixels * + *---------------------------------------------------------------------*/ +/*! + * \brief pixColorGrayRegions() + * + * \param[in] pixs 2, 4 or 8 bpp gray, rgb, or colormapped + * \param[in] boxa of regions in which to apply color + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] thresh average value below/above which pixel is unchanged + * \param[in] rval, gval, bval new color to paint + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a new image, where some of the pixels in each
+ *          box in the boxa are colorized.  See pixColorGray() for usage
+ *          with %type and %thresh.  Note that %thresh is only used for
+ *          rgb; it is ignored for colormapped images.
+ *      (2) If the input image is colormapped, the new image will be 8 bpp
+ *          colormapped if possible; otherwise, it will be converted
+ *          to 32 bpp rgb.  Only pixels that are strictly gray will be
+ *          colorized.
+ *      (3) If the input image is not colormapped, it is converted to rgb.
+ *          A "gray" value for a pixel is determined by averaging the
+ *          components, and the output rgb value is determined from this.
+ *      (4) This can be used in conjunction with pixHasHighlightRed() to
+ *          add highlight color to a grayscale image.
+ * 
+ */ +PIX * +pixColorGrayRegions(PIX *pixs, + BOXA *boxa, + l_int32 type, + l_int32 thresh, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, n, ncolors, ngray; +BOX *box; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixColorGrayRegions"); + + if (!pixs || pixGetDepth(pixs) == 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + /* If cmapped and there is room in an 8 bpp colormap for + * expansion, convert pixs to 8 bpp, and colorize. */ + cmap = pixGetColormap(pixs); + if (cmap) { + ncolors = pixcmapGetCount(cmap); + pixcmapCountGrayColors(cmap, &ngray); + if (ncolors + ngray < 255) { + pixd = pixConvertTo8(pixs, 1); /* always new image */ + pixColorGrayRegionsCmap(pixd, boxa, type, rval, gval, bval); + return pixd; + } + } + + /* The output will be rgb. Make sure the thresholds are valid */ + if (type == L_PAINT_LIGHT) { /* thresh should be low */ + if (thresh >= 255) + return (PIX *)ERROR_PTR("thresh must be < 255", procName, NULL); + if (thresh > 127) + L_WARNING("threshold set very high\n", procName); + } else { /* type == L_PAINT_DARK; thresh should be high */ + if (thresh <= 0) + return (PIX *)ERROR_PTR("thresh must be > 0", procName, NULL); + if (thresh < 128) + L_WARNING("threshold set very low\n", procName); + } + + pixd = pixConvertTo32(pixs); /* always new image */ + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pixColorGray(pixd, box, type, thresh, rval, gval, bval); + boxDestroy(&box); + } + + return pixd; +} + + +/*! + * \brief pixColorGray() + * + * \param[in] pixs 8 bpp gray, rgb or colormapped image + * \param[in] box [optional] region in which to apply color; can be NULL + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] thresh average value below/above which pixel is unchanged + * \param[in] rval, gval, bval new color to paint + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation; pixs is modified.
+ *          If pixs is colormapped, the operation will add colors to the
+ *          colormap.  Otherwise, pixs will be converted to 32 bpp rgb if
+ *          it is initially 8 bpp gray.
+ *      (2) If type == L_PAINT_LIGHT, it colorizes non-black pixels,
+ *          preserving antialiasing.
+ *          If type == L_PAINT_DARK, it colorizes non-white pixels,
+ *          preserving antialiasing.
+ *      (3) If box is NULL, applies function to the entire image; otherwise,
+ *          clips the operation to the intersection of the box and pix.
+ *      (4) If colormapped, calls pixColorGrayCmap(), which applies the
+ *          coloring algorithm only to pixels that are strictly gray.
+ *      (5) For RGB, determines a "gray" value by averaging; then uses this
+ *          value, plus the input rgb target, to generate the output
+ *          pixel values.
+ *      (6) thresh is only used for rgb; it is ignored for colormapped pix.
+ *          If type == L_PAINT_LIGHT, use thresh = 0 if all pixels are to
+ *          be colored (black pixels will be unaltered).
+ *          In situations where there are a lot of black pixels,
+ *          setting thresh > 0 will make the function considerably
+ *          more efficient without affecting the final result.
+ *          If type == L_PAINT_DARK, use thresh = 255 if all pixels
+ *          are to be colored (white pixels will be unaltered).
+ *          In situations where there are a lot of white pixels,
+ *          setting thresh < 255 will make the function considerably
+ *          more efficient without affecting the final result.
+ * 
+ */ +l_ok +pixColorGray(PIX *pixs, + BOX *box, + l_int32 type, + l_int32 thresh, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, w, h, d, wpl, x1, x2, y1, y2, bw, bh; +l_int32 nrval, ngval, nbval, aveval; +l_float32 factor; +l_uint32 val32; +l_uint32 *line, *data; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixColorGray"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) + return ERROR_INT("invalid type", procName, 1); + + cmap = pixGetColormap(pixs); + pixGetDimensions(pixs, &w, &h, &d); + if (!cmap && d != 8 && d != 32) + return ERROR_INT("pixs not cmapped, 8 bpp or rgb", procName, 1); + if (cmap) + return pixColorGrayCmap(pixs, box, type, rval, gval, bval); + + /* rgb or 8 bpp gray image; check the thresh */ + if (type == L_PAINT_LIGHT) { /* thresh should be low */ + if (thresh >= 255) + return ERROR_INT("thresh must be < 255; else this is a no-op", + procName, 1); + if (thresh > 127) + L_WARNING("threshold set very high\n", procName); + } else { /* type == L_PAINT_DARK; thresh should be high */ + if (thresh <= 0) + return ERROR_INT("thresh must be > 0; else this is a no-op", + procName, 1); + if (thresh < 128) + L_WARNING("threshold set very low\n", procName); + } + + /* In-place conversion to 32 bpp if necessary */ + if (d == 8) { + pixt = pixConvertTo32(pixs); + pixTransferAllData(pixs, &pixt, 1, 0); + } + + if (!box) { + x1 = y1 = 0; + x2 = w; + y2 = h; + } else { + boxGetGeometry(box, &x1, &y1, &bw, &bh); + x2 = x1 + bw - 1; + y2 = y1 + bh - 1; + } + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + factor = 1. / 255.; + for (i = y1; i <= y2; i++) { + if (i < 0 || i >= h) + continue; + line = data + i * wpl; + for (j = x1; j <= x2; j++) { + if (j < 0 || j >= w) + continue; + val32 = *(line + j); + aveval = ((val32 >> 24) + ((val32 >> 16) & 0xff) + + ((val32 >> 8) & 0xff)) / 3; + if (type == L_PAINT_LIGHT) { + if (aveval < thresh) /* skip sufficiently dark pixels */ + continue; + nrval = (l_int32)(rval * aveval * factor); + ngval = (l_int32)(gval * aveval * factor); + nbval = (l_int32)(bval * aveval * factor); + } else { /* type == L_PAINT_DARK */ + if (aveval > thresh) /* skip sufficiently light pixels */ + continue; + nrval = rval + (l_int32)((255. - rval) * aveval * factor); + ngval = gval + (l_int32)((255. - gval) * aveval * factor); + nbval = bval + (l_int32)((255. - bval) * aveval * factor); + } + composeRGBPixel(nrval, ngval, nbval, &val32); + *(line + j) = val32; + } + } + + return 0; +} + + +/*! + * \brief pixColorGrayMasked() + * + * \param[in] pixs 8 bpp gray, rgb or colormapped image + * \param[in] pixm 1 bpp mask, through which to apply color + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] thresh average value below/above which pixel is unchanged + * \param[in] rval, gval, bval new color to paint + * \return pixd colorized, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a new image, where some of the pixels under
+ *          FG in the mask are colorized.
+ *      (2) See pixColorGray() for usage with %type and %thresh.  Note
+ *          that %thresh is only used for rgb; it is ignored for
+ *          colormapped images.  In most cases, the mask will be over
+ *          the darker parts and %type == L_PAINT_DARK.
+ *      (3) If pixs is colormapped this calls pixColorMaskedCmap(),
+ *          which adds colors to the colormap for pixd; it only adds
+ *          colors corresponding to strictly gray colors in the colormap.
+ *          Otherwise, if pixs is 8 bpp gray, pixd will be 32 bpp rgb.
+ *      (4) If pixs is 32 bpp rgb, for each pixel a "gray" value is
+ *          found by averaging.  This average is then used with the
+ *          input rgb target to generate the output pixel values.
+ *      (5) This can be used in conjunction with pixHasHighlightRed() to
+ *          add highlight color to a grayscale image.
+ * 
+ */ +PIX * +pixColorGrayMasked(PIX *pixs, + PIX *pixm, + l_int32 type, + l_int32 thresh, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, w, h, d, wm, hm, wmin, hmin, wpl, wplm; +l_int32 nrval, ngval, nbval, aveval; +l_float32 factor; +l_uint32 val32; +l_uint32 *line, *data, *linem, *datam; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixColorGrayMasked"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); + if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + cmap = pixGetColormap(pixs); + pixGetDimensions(pixs, &w, &h, &d); + if (!cmap && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped, 8 bpp gray or 32 bpp", + procName, NULL); + if (cmap) { + pixd = pixCopy(NULL, pixs); + pixColorGrayMaskedCmap(pixd, pixm, type, rval, gval, bval); + return pixd; + } + + /* rgb or 8 bpp gray image; check the thresh */ + if (type == L_PAINT_LIGHT) { /* thresh should be low */ + if (thresh >= 255) + return (PIX *)ERROR_PTR( + "thresh must be < 255; else this is a no-op", procName, NULL); + if (thresh > 127) + L_WARNING("threshold set very high\n", procName); + } else { /* type == L_PAINT_DARK; thresh should be high */ + if (thresh <= 0) + return (PIX *)ERROR_PTR( + "thresh must be > 0; else this is a no-op", procName, NULL); + if (thresh < 128) + L_WARNING("threshold set very low\n", procName); + } + + pixGetDimensions(pixm, &wm, &hm, NULL); + if (wm != w) + L_WARNING("wm = %d differs from w = %d\n", procName, wm, w); + if (hm != h) + L_WARNING("hm = %d differs from h = %d\n", procName, hm, h); + wmin = L_MIN(w, wm); + hmin = L_MIN(h, hm); + if (d == 8) + pixd = pixConvertTo32(pixs); + else + pixd = pixCopy(NULL, pixs); + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + factor = 1. / 255.; + for (i = 0; i < hmin; i++) { + line = data + i * wpl; + linem = datam + i * wplm; + for (j = 0; j < wmin; j++) { + if (GET_DATA_BIT(linem, j) == 0) + continue; + val32 = *(line + j); + aveval = ((val32 >> 24) + ((val32 >> 16) & 0xff) + + ((val32 >> 8) & 0xff)) / 3; + if (type == L_PAINT_LIGHT) { + if (aveval < thresh) /* skip sufficiently dark pixels */ + continue; + nrval = (l_int32)(rval * aveval * factor); + ngval = (l_int32)(gval * aveval * factor); + nbval = (l_int32)(bval * aveval * factor); + } else { /* type == L_PAINT_DARK */ + if (aveval > thresh) /* skip sufficiently light pixels */ + continue; + nrval = rval + (l_int32)((255. - rval) * aveval * factor); + ngval = gval + (l_int32)((255. - gval) * aveval * factor); + nbval = bval + (l_int32)((255. - bval) * aveval * factor); + } + composeRGBPixel(nrval, ngval, nbval, &val32); + *(line + j) = val32; + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Adjusting one or more colors to a target color * + *------------------------------------------------------------------*/ +/*! + * \brief pixSnapColor() + * + * \param[in] pixd [optional]; either NULL or equal to pixs for in-place + * \param[in] pixs colormapped or 8 bpp gray or 32 bpp rgb + * \param[in] srcval color center to be selected for change: 0xrrggbb00 + * \param[in] dstval target color for pixels: 0xrrggbb00 + * \param[in] diff max absolute difference, applied to all components + * \return pixd with all pixels within diff of pixval set to pixval, + * or pixd on error + * + *
+ * Notes:
+ *      (1) For inplace operation, call it this way:
+ *           pixSnapColor(pixs, pixs, ... )
+ *      (2) For generating a new pixd:
+ *           pixd = pixSnapColor(NULL, pixs, ...)
+ *      (3) If pixs has a colormap, it is handled by pixSnapColorCmap().
+ *      (4) All pixels within 'diff' of 'srcval', componentwise,
+ *          will be changed to 'dstval'.
+ * 
+ */ +PIX * +pixSnapColor(PIX *pixd, + PIX *pixs, + l_uint32 srcval, + l_uint32 dstval, + l_int32 diff) +{ +l_int32 val, sval, dval; +l_int32 rval, gval, bval, rsval, gsval, bsval; +l_int32 i, j, w, h, d, wpl; +l_uint32 pixel; +l_uint32 *line, *data; + + PROCNAME("pixSnapColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + + if (pixGetColormap(pixs)) + return pixSnapColorCmap(pixd, pixs, srcval, dstval, diff); + + /* pixs does not have a colormap; it must be 8 bpp gray or + * 32 bpp rgb. */ + if (pixGetDepth(pixs) < 8) + return (PIX *)ERROR_PTR("pixs is < 8 bpp", procName, pixd); + + /* Do the work on pixd */ + if (!pixd) + pixd = pixCopy(NULL, pixs); + + pixGetDimensions(pixd, &w, &h, &d); + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + if (d == 8) { + sval = srcval & 0xff; + dval = dstval & 0xff; + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(line, j); + if (L_ABS(val - sval) <= diff) + SET_DATA_BYTE(line, j, dval); + } + } + } else { /* d == 32 */ + extractRGBValues(srcval, &rsval, &gsval, &bsval); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + pixel = *(line + j); + extractRGBValues(pixel, &rval, &gval, &bval); + if ((L_ABS(rval - rsval) <= diff) && + (L_ABS(gval - gsval) <= diff) && + (L_ABS(bval - bsval) <= diff)) + *(line + j) = dstval; /* replace */ + } + } + } + + return pixd; +} + + +/*! + * \brief pixSnapColorCmap() + * + * \param[in] pixd [optional]; either NULL or equal to pixs for in-place + * \param[in] pixs colormapped + * \param[in] srcval color center to be selected for change: 0xrrggbb00 + * \param[in] dstval target color for pixels: 0xrrggbb00 + * \param[in] diff max absolute difference, applied to all components + * \return pixd with all pixels within diff of srcval set to dstval, + * or pixd on error + * + *
+ * Notes:
+ *      (1) For inplace operation, call it this way:
+ *           pixSnapCcmap(pixs, pixs, ... )
+ *      (2) For generating a new pixd:
+ *           pixd = pixSnapCmap(NULL, pixs, ...)
+ *      (3) pixs must have a colormap.
+ *      (4) All colors within 'diff' of 'srcval', componentwise,
+ *          will be changed to 'dstval'.
+ * 
+ */ +PIX * +pixSnapColorCmap(PIX *pixd, + PIX *pixs, + l_uint32 srcval, + l_uint32 dstval, + l_int32 diff) +{ +l_int32 i, ncolors, index, found; +l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; +l_int32 *tab; +PIX *pixm; +PIXCMAP *cmap; + + PROCNAME("pixSnapColorCmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("cmap not found", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + + /* If no free colors, look for one close to the target + * that can be commandeered. */ + cmap = pixGetColormap(pixd); + ncolors = pixcmapGetCount(cmap); + extractRGBValues(srcval, &rsval, &gsval, &bsval); + extractRGBValues(dstval, &rdval, &gdval, &bdval); + found = FALSE; + if (pixcmapGetFreeCount(cmap) == 0) { + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if ((L_ABS(rval - rsval) <= diff) && + (L_ABS(gval - gsval) <= diff) && + (L_ABS(bval - bsval) <= diff)) { + index = i; + pixcmapResetColor(cmap, index, rdval, gdval, bdval); + found = TRUE; + break; + } + } + } else { /* just add the new color */ + pixcmapAddColor(cmap, rdval, gdval, bdval); + ncolors = pixcmapGetCount(cmap); + index = ncolors - 1; /* index of new destination color */ + found = TRUE; + } + + if (!found) { + L_INFO("nothing to do\n", procName); + return pixd; + } + + /* For each color in cmap that is close enough to srcval, + * set the tab value to 1. Then generate a 1 bpp mask with + * fg pixels for every pixel in pixd that is close enough + * to srcval (i.e., has value 1 in tab). */ + if ((tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32))) == NULL) + return (PIX *)ERROR_PTR("tab not made", procName, pixd); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if ((L_ABS(rval - rsval) <= diff) && + (L_ABS(gval - gsval) <= diff) && + (L_ABS(bval - bsval) <= diff)) + tab[i] = 1; + } + pixm = pixMakeMaskFromLUT(pixd, tab); + LEPT_FREE(tab); + + /* Use the binary mask to set all selected pixels to + * the dest color index. */ + pixSetMasked(pixd, pixm, dstval); + pixDestroy(&pixm); + + /* Remove all unused colors from the colormap. */ + pixRemoveUnusedColors(pixd); + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Piecewise linear color mapping based on a source/target pair * + *---------------------------------------------------------------------*/ +/*! + * \brief pixLinearMapToTargetColor() + * + * \param[in] pixd [optional]; either NULL or equal to pixs for in-place + * \param[in] pixs 32 bpp rgb + * \param[in] srcval source color: 0xrrggbb00 + * \param[in] dstval target color: 0xrrggbb00 + * \return pixd with all pixels mapped based on the srcval/destval mapping, + * or pixd on error + * + *
+ * Notes:
+ *      (1) For each component (r, b, g) separately, this does a piecewise
+ *          linear mapping of the colors in pixs to colors in pixd.
+ *          If rs and rd are the red src and dest components in %srcval and
+ *          %dstval, then the range [0 ... rs] in pixs is mapped to
+ *          [0 ... rd] in pixd.  Likewise, the range [rs ... 255] in pixs
+ *          is mapped to [rd ... 255] in pixd.  And similarly for green
+ *          and blue.
+ *      (2) The mapping will in general change the hue of the pixels.
+ *          However, if the src and dst targets are related by
+ *          a transformation given by pixelFractionalShift(), the hue
+ *          is invariant.
+ *      (3) For inplace operation, call it this way:
+ *            pixLinearMapToTargetColor(pixs, pixs, ... )
+ *      (4) For generating a new pixd:
+ *            pixd = pixLinearMapToTargetColor(NULL, pixs, ...)
+ * 
+ */ +PIX * +pixLinearMapToTargetColor(PIX *pixd, + PIX *pixs, + l_uint32 srcval, + l_uint32 dstval) +{ +l_int32 i, j, w, h, wpl; +l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; +l_int32 *rtab, *gtab, *btab; +l_uint32 pixel; +l_uint32 *line, *data; + + PROCNAME("pixLinearMapToTargetColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, pixd); + + /* Do the work on pixd */ + if (!pixd) + pixd = pixCopy(NULL, pixs); + + extractRGBValues(srcval, &rsval, &gsval, &bsval); + extractRGBValues(dstval, &rdval, &gdval, &bdval); + rsval = L_MIN(254, L_MAX(1, rsval)); + gsval = L_MIN(254, L_MAX(1, gsval)); + bsval = L_MIN(254, L_MAX(1, bsval)); + rtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + gtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + btab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (!rtab || !gtab || !btab) + return (PIX *)ERROR_PTR("calloc fail for tab", procName, pixd); + for (i = 0; i < 256; i++) { + if (i <= rsval) + rtab[i] = (i * rdval) / rsval; + else + rtab[i] = rdval + ((255 - rdval) * (i - rsval)) / (255 - rsval); + if (i <= gsval) + gtab[i] = (i * gdval) / gsval; + else + gtab[i] = gdval + ((255 - gdval) * (i - gsval)) / (255 - gsval); + if (i <= bsval) + btab[i] = (i * bdval) / bsval; + else + btab[i] = bdval + ((255 - bdval) * (i - bsval)) / (255 - bsval); + } + pixGetDimensions(pixd, &w, &h, NULL); + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + pixel = line[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); + line[j] = pixel; + } + } + + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*! + * \brief pixelLinearMapToTargetColor() + * + * \param[in] scolor rgb source color: 0xrrggbb00 + * \param[in] srcmap source mapping color: 0xrrggbb00 + * \param[in] dstmap target mapping color: 0xrrggbb00 + * \param[out] pdcolor rgb dest color: 0xrrggbb00 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does this does a piecewise linear mapping of each
+ *          component of %scolor to %dcolor, based on the relation
+ *          between the components of %srcmap and %dstmap.  It is the
+ *          same transformation, performed on a single color, as mapped
+ *          on every pixel in a pix by pixLinearMapToTargetColor().
+ *      (2) For each component, if the sval is larger than the smap,
+ *          the dval will be pushed up from dmap towards white.
+ *          Otherwise, dval will be pushed down from dmap towards black.
+ *          This is because you can visualize the transformation as
+ *          a linear stretching where smap moves to dmap, and everything
+ *          else follows linearly with 0 and 255 fixed.
+ *      (3) The mapping will in general change the hue of %scolor.
+ *          However, if the %srcmap and %dstmap targets are related by
+ *          a transformation given by pixelFractionalShift(), the hue
+ *          will be invariant.
+ * 
+ */ +l_ok +pixelLinearMapToTargetColor(l_uint32 scolor, + l_uint32 srcmap, + l_uint32 dstmap, + l_uint32 *pdcolor) +{ +l_int32 srval, sgval, sbval, drval, dgval, dbval; +l_int32 srmap, sgmap, sbmap, drmap, dgmap, dbmap; + + PROCNAME("pixelLinearMapToTargetColor"); + + if (!pdcolor) + return ERROR_INT("&dcolor not defined", procName, 1); + *pdcolor = 0; + + extractRGBValues(scolor, &srval, &sgval, &sbval); + extractRGBValues(srcmap, &srmap, &sgmap, &sbmap); + extractRGBValues(dstmap, &drmap, &dgmap, &dbmap); + srmap = L_MIN(254, L_MAX(1, srmap)); + sgmap = L_MIN(254, L_MAX(1, sgmap)); + sbmap = L_MIN(254, L_MAX(1, sbmap)); + + if (srval <= srmap) + drval = (srval * drmap) / srmap; + else + drval = drmap + ((255 - drmap) * (srval - srmap)) / (255 - srmap); + if (sgval <= sgmap) + dgval = (sgval * dgmap) / sgmap; + else + dgval = dgmap + ((255 - dgmap) * (sgval - sgmap)) / (255 - sgmap); + if (sbval <= sbmap) + dbval = (sbval * dbmap) / sbmap; + else + dbval = dbmap + ((255 - dbmap) * (sbval - sbmap)) / (255 - sbmap); + + composeRGBPixel(drval, dgval, dbval, pdcolor); + return 0; +} + + +/*------------------------------------------------------------------* + * Fractional shift of RGB towards black or white * + *------------------------------------------------------------------*/ +/*! + * \brief pixShiftByComponent() + * + * \param[in] pixd [optional]; either NULL or equal to pixs for in-place + * \param[in] pixs 32 bpp rgb + * \param[in] srcval source color: 0xrrggbb00 + * \param[in] dstval target color: 0xrrggbb00 + * \return pixd with all pixels mapped based on the srcval/destval mapping, + * or pixd on error + * + *
+ * Notes:
+ *      (1) For each component (r, b, g) separately, this does a linear
+ *          mapping of the colors in pixs to colors in pixd.
+ *          Let rs and rd be the red src and dest components in %srcval and
+ *          %dstval, and rval is the red component of the src pixel.
+ *          Then for all pixels in pixs, the mapping for the red
+ *          component from pixs to pixd is:
+ *             if (rd <= rs)   (shift toward black)
+ *                 rval --> (rd/rs) * rval
+ *             if (rd > rs)    (shift toward white)
+ *                (255 - rval) --> ((255 - rs)/(255 - rd)) * (255 - rval)
+ *          Thus if rd <= rs, the red component of all pixels is
+ *          mapped by the same fraction toward white, and if rd > rs,
+ *          they are mapped by the same fraction toward black.
+ *          This is essentially a different linear TRC (gamma = 1)
+ *          for each component.  The source and target color inputs are
+ *          just used to generate the three fractions.
+ *      (2) Note that this mapping differs from that in
+ *          pixLinearMapToTargetColor(), which maps rs --> rd and does
+ *          a piecewise stretching in between.
+ *      (3) For inplace operation, call it this way:
+ *            pixFractionalShiftByComponent(pixs, pixs, ... )
+ *      (4) For generating a new pixd:
+ *            pixd = pixLinearMapToTargetColor(NULL, pixs, ...)
+ *      (5) A simple application is to color a grayscale image.
+ *          A light background can be colored using srcval = 0xffffff00
+ *          and picking a target background color for dstval.
+ *          A dark foreground can be colored by using srcval = 0x0
+ *          and choosing a target foreground color for dstval.
+ * 
+ */ +PIX * +pixShiftByComponent(PIX *pixd, + PIX *pixs, + l_uint32 srcval, + l_uint32 dstval) +{ +l_int32 i, j, w, h, wpl; +l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; +l_int32 *rtab, *gtab, *btab; +l_uint32 pixel; +l_uint32 *line, *data; +PIXCMAP *cmap; + + PROCNAME("pixShiftByComponent"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); + if (pixGetDepth(pixs) != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, pixd); + + /* Do the work on pixd */ + if (!pixd) + pixd = pixCopy(NULL, pixs); + + /* If colormapped, just modify it */ + if ((cmap = pixGetColormap(pixd)) != NULL) { + pixcmapShiftByComponent(cmap, srcval, dstval); + return pixd; + } + + extractRGBValues(srcval, &rsval, &gsval, &bsval); + extractRGBValues(dstval, &rdval, &gdval, &bdval); + rtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + gtab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + btab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (!rtab || !gtab || !btab) { + L_ERROR("calloc fail for tab\n", procName); + goto cleanup; + } + for (i = 0; i < 256; i++) { + if (rdval == rsval) + rtab[i] = i; + else if (rdval < rsval) + rtab[i] = (i * rdval) / rsval; + else + rtab[i] = 255 - (255 - rdval) * (255 - i) / (255 - rsval); + if (gdval == gsval) + gtab[i] = i; + else if (gdval < gsval) + gtab[i] = (i * gdval) / gsval; + else + gtab[i] = 255 - (255 - gdval) * (255 - i) / (255 - gsval); + if (bdval == bsval) + btab[i] = i; + else if (bdval < bsval) + btab[i] = (i * bdval) / bsval; + else + btab[i] = 255 - (255 - bdval) * (255 - i) / (255 - bsval); + } + pixGetDimensions(pixd, &w, &h, NULL); + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + pixel = line[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); + line[j] = pixel; + } + } + +cleanup: + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*! + * \brief pixelShiftByComponent() + * + * \param[in] rval, gval, bval + * \param[in] srcval source color: 0xrrggbb00 + * \param[in] dstval target color: 0xrrggbb00 + * \param[out] ppixel rgb value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a linear transformation that gives the same result
+ *          on a single pixel as pixShiftByComponent() gives
+ *          on a pix.  Each component is handled separately.  If
+ *          the dest component is larger than the src, then the
+ *          component is pushed toward 255 by the same fraction as
+ *          the src --> dest shift.
+ * 
+ */ +l_ok +pixelShiftByComponent(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_uint32 srcval, + l_uint32 dstval, + l_uint32 *ppixel) +{ +l_int32 rsval, rdval, gsval, gdval, bsval, bdval, rs, gs, bs; + + PROCNAME("pixelShiftByComponent"); + + if (!ppixel) + return ERROR_INT("&pixel defined", procName, 1); + + extractRGBValues(srcval, &rsval, &gsval, &bsval); + extractRGBValues(dstval, &rdval, &gdval, &bdval); + if (rdval == rsval) + rs = rval; + else if (rdval < rsval) + rs = (rval * rdval) / rsval; + else + rs = 255 - (255 - rdval) * (255 - rval) / (255 - rsval); + if (gdval == gsval) + gs = gval; + else if (gdval < gsval) + gs = (gval * gdval) / gsval; + else + gs = 255 - (255 - gdval) * (255 - gval) / (255 - gsval); + if (bdval == bsval) + bs = bval; + else if (bdval < bsval) + bs = (bval * bdval) / bsval; + else + bs = 255 - (255 - bdval) * (255 - bval) / (255 - bsval); + composeRGBPixel(rs, gs, bs, ppixel); + return 0; +} + + +/*! + * \brief pixelFractionalShift() + * + * \param[in] rval, gval, bval + * \param[in] fraction negative toward black; positive toward white + * \param[out] ppixel rgb value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This transformation leaves the hue invariant, while changing
+ *          the saturation and intensity.  It can be used for that
+ *          purpose in pixLinearMapToTargetColor().
+ *      (2) %fraction is in the range [-1 .... +1].  If %fraction < 0,
+ *          saturation is increased and brightness is reduced.  The
+ *          opposite results if %fraction > 0.  If %fraction == -1,
+ *          the resulting pixel is black; %fraction == 1 results in white.
+ * 
+ */ +l_ok +pixelFractionalShift(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_float32 fraction, + l_uint32 *ppixel) +{ +l_int32 nrval, ngval, nbval; + + PROCNAME("pixelFractionalShift"); + + if (!ppixel) + return ERROR_INT("&pixel defined", procName, 1); + if (fraction < -1.0 || fraction > 1.0) + return ERROR_INT("fraction not in [-1 ... +1]", procName, 1); + + nrval = (fraction < 0) ? (l_int32)((1.0 + fraction) * rval + 0.5) : + rval + (l_int32)(fraction * (255 - rval) + 0.5); + ngval = (fraction < 0) ? (l_int32)((1.0 + fraction) * gval + 0.5) : + gval + (l_int32)(fraction * (255 - gval) + 0.5); + nbval = (fraction < 0) ? (l_int32)((1.0 + fraction) * bval + 0.5) : + bval + (l_int32)(fraction * (255 - bval) + 0.5); + composeRGBPixel(nrval, ngval, nbval, ppixel); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/colormap.c b/3rdparty/hgOCR/leptonica/colormap.c new file mode 100644 index 00000000..853feaa4 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colormap.c @@ -0,0 +1,2303 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colormap.c + *
+ *
+ *      Colormap creation, copy, destruction, addition
+ *           PIXCMAP    *pixcmapCreate()
+ *           PIXCMAP    *pixcmapCreateRandom()
+ *           PIXCMAP    *pixcmapCreateLinear()
+ *           PIXCMAP    *pixcmapCopy()
+ *           void        pixcmapDestroy()
+ *           l_int32     pixcmapIsValid()
+ *           l_int32     pixcmapAddColor()
+ *           l_int32     pixcmapAddRGBA()
+ *           l_int32     pixcmapAddNewColor()
+ *           l_int32     pixcmapAddNearestColor()
+ *           l_int32     pixcmapUsableColor()
+ *           l_int32     pixcmapAddBlackOrWhite()
+ *           l_int32     pixcmapSetBlackAndWhite()
+ *           l_int32     pixcmapGetCount()
+ *           l_int32     pixcmapGetDepth()
+ *           l_int32     pixcmapGetMinDepth()
+ *           l_int32     pixcmapGetFreeCount()
+ *           l_int32     pixcmapClear()
+ *
+ *      Colormap random access and test
+ *           l_int32     pixcmapGetColor()
+ *           l_int32     pixcmapGetColor32()
+ *           l_int32     pixcmapGetRGBA()
+ *           l_int32     pixcmapGetRGBA32()
+ *           l_int32     pixcmapResetColor()
+ *           l_int32     pixcmapSetAlpha()
+ *           l_int32     pixcmapGetIndex()
+ *           l_int32     pixcmapHasColor()
+ *           l_int32     pixcmapIsOpaque()
+ *           l_int32     pixcmapIsBlackAndWhite()
+ *           l_int32     pixcmapCountGrayColors()
+ *           l_int32     pixcmapGetRankIntensity()
+ *           l_int32     pixcmapGetNearestIndex()
+ *           l_int32     pixcmapGetNearestGrayIndex()
+ *           l_int32     pixcmapGetDistanceToColor()
+ *           l_int32     pixcmapGetRangeValues()
+ *
+ *      Colormap conversion
+ *           PIXCMAP    *pixcmapGrayToColor()
+ *           PIXCMAP    *pixcmapColorToGray()
+ *           PIXCMAP    *pixcmapConvertTo4()
+ *           PIXCMAP    *pixcmapConvertTo8()
+ *
+ *      Colormap I/O
+ *           l_int32     pixcmapRead()
+ *           l_int32     pixcmapReadStream()
+ *           l_int32     pixcmapReadMem()
+ *           l_int32     pixcmapWrite()
+ *           l_int32     pixcmapWriteStream()
+ *           l_int32     pixcmapWriteMem()
+ *
+ *      Extract colormap arrays and serialization
+ *           l_int32     pixcmapToArrays()
+ *           l_int32     pixcmapToRGBTable()
+ *           l_int32     pixcmapSerializeToMemory()
+ *           PIXCMAP    *pixcmapDeserializeFromMemory()
+ *           char       *pixcmapConvertToHex()
+ *
+ *      Colormap transforms
+ *           l_int32     pixcmapGammaTRC()
+ *           l_int32     pixcmapContrastTRC()
+ *           l_int32     pixcmapShiftIntensity()
+ *           l_int32     pixcmapShiftByComponent()
+ *
+ *  Note:
+ *      (1) colormaps in leptonica have a maximum of 256 entries.
+ *      (2) nalloc, the allocated size of the palette array, is related
+ *          to the depth d of the pixels by:
+ *                 nalloc = 2^(d)
+ *       
+ * 
+ */ + +#include +#include "allheaders.h" + +/*-------------------------------------------------------------* + * Colormap creation and addition * + *-------------------------------------------------------------*/ +/*! + * \brief pixcmapCreate() + * + * \param[in] depth of pix, in bpp + * \return cmap, or NULL on error + */ +PIXCMAP * +pixcmapCreate(l_int32 depth) +{ +RGBA_QUAD *cta; +PIXCMAP *cmap; + + PROCNAME("pixcmapCreate"); + + if (depth != 1 && depth != 2 && depth !=4 && depth != 8) + return (PIXCMAP *)ERROR_PTR("depth not in {1,2,4,8}", procName, NULL); + + cmap = (PIXCMAP *)LEPT_CALLOC(1, sizeof(PIXCMAP)); + cmap->depth = depth; + cmap->nalloc = 1 << depth; + cta = (RGBA_QUAD *)LEPT_CALLOC(cmap->nalloc, sizeof(RGBA_QUAD)); + cmap->array = cta; + cmap->n = 0; + return cmap; +} + + +/*! + * \brief pixcmapCreateRandom() + * + * \param[in] depth of pix, in bpp: 2, 4 or 8 + * \param[in] hasblack 1 if the first color is black; 0 if no black + * \param[in] haswhite 1 if the last color is white; 0 if no white + * \return cmap, or NULL on error + * + *
+ * Notes:
+ *      (1) This sets up a colormap with random colors,
+ *          where the first color is optionally black, the last color
+ *          is optionally white, and the remaining colors are
+ *          chosen randomly.
+ *      (2) The number of randomly chosen colors is:
+ *               2^(depth) - haswhite - hasblack
+ *      (3) Because rand() is seeded, it might disrupt otherwise
+ *          deterministic results if also used elsewhere in a program.
+ *      (4) rand() is not threadsafe, and will generate garbage if run
+ *          on multiple threads at once -- though garbage is generally
+ *          what you want from a random number generator!
+ *      (5) Modern rand()s have equal randomness in low and high order
+ *          bits, but older ones don't.  Here, we're just using rand()
+ *          to choose colors for output.
+ * 
+ */ +PIXCMAP * +pixcmapCreateRandom(l_int32 depth, + l_int32 hasblack, + l_int32 haswhite) +{ +l_int32 ncolors, i; +l_int32 red[256], green[256], blue[256]; +PIXCMAP *cmap; + + PROCNAME("pixcmapCreateRandom"); + + if (depth != 2 && depth != 4 && depth != 8) + return (PIXCMAP *)ERROR_PTR("depth not in {2, 4, 8}", procName, NULL); + if (hasblack != 0) hasblack = 1; + if (haswhite != 0) haswhite = 1; + + cmap = pixcmapCreate(depth); + ncolors = 1 << depth; + if (hasblack) /* first color is optionally black */ + pixcmapAddColor(cmap, 0, 0, 0); + for (i = hasblack; i < ncolors - haswhite; i++) { + red[i] = (l_uint32)rand() & 0xff; + green[i] = (l_uint32)rand() & 0xff; + blue[i] = (l_uint32)rand() & 0xff; + pixcmapAddColor(cmap, red[i], green[i], blue[i]); + } + if (haswhite) /* last color is optionally white */ + pixcmapAddColor(cmap, 255, 255, 255); + + return cmap; +} + + +/*! + * \brief pixcmapCreateLinear() + * + * \param[in] d depth of pix for this colormap; 1, 2, 4 or 8 + * \param[in] nlevels valid in range [2, 2^d] + * \return cmap, or NULL on error + * + *
+ * Notes:
+ *      (1) Colormap has equally spaced gray color values
+ *          from black (0, 0, 0) to white (255, 255, 255).
+ * 
+ */ +PIXCMAP * +pixcmapCreateLinear(l_int32 d, + l_int32 nlevels) +{ +l_int32 maxlevels, i, val; +PIXCMAP *cmap; + + PROCNAME("pixcmapCreateLinear"); + + if (d != 1 && d != 2 && d !=4 && d != 8) + return (PIXCMAP *)ERROR_PTR("d not in {1, 2, 4, 8}", procName, NULL); + maxlevels = 1 << d; + if (nlevels < 2 || nlevels > maxlevels) + return (PIXCMAP *)ERROR_PTR("invalid nlevels", procName, NULL); + + cmap = pixcmapCreate(d); + for (i = 0; i < nlevels; i++) { + val = (255 * i) / (nlevels - 1); + pixcmapAddColor(cmap, val, val, val); + } + return cmap; +} + + +/*! + * \brief pixcmapCopy() + * + * \param[in] cmaps + * \return cmapd, or NULL on error + */ +PIXCMAP * +pixcmapCopy(const PIXCMAP *cmaps) +{ +l_int32 nbytes, valid; +PIXCMAP *cmapd; + + PROCNAME("pixcmapCopy"); + + if (!cmaps) + return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); + pixcmapIsValid(cmaps, &valid); + if (!valid) + return (PIXCMAP *)ERROR_PTR("invalid cmap", procName, NULL); + + cmapd = (PIXCMAP *)LEPT_CALLOC(1, sizeof(PIXCMAP)); + nbytes = cmaps->nalloc * sizeof(RGBA_QUAD); + cmapd->array = (void *)LEPT_CALLOC(1, nbytes); + memcpy(cmapd->array, cmaps->array, cmaps->n * sizeof(RGBA_QUAD)); + cmapd->n = cmaps->n; + cmapd->nalloc = cmaps->nalloc; + cmapd->depth = cmaps->depth; + return cmapd; +} + + +/*! + * \brief pixcmapDestroy() + * + * \param[in,out] pcmap set to null on return + * \return void + */ +void +pixcmapDestroy(PIXCMAP **pcmap) +{ +PIXCMAP *cmap; + + PROCNAME("pixcmapDestroy"); + + if (pcmap == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((cmap = *pcmap) == NULL) + return; + + LEPT_FREE(cmap->array); + LEPT_FREE(cmap); + *pcmap = NULL; + return; +} + +/*! + * \brief pixcmapIsValid() + * + * \param[in] cmap + * \param[out] pvalid return 1 if valid; 0 if not + * \return 0 if OK, 1 on error or if cmap is not valid + */ +l_ok +pixcmapIsValid(const PIXCMAP *cmap, + l_int32 *pvalid) +{ +l_int32 d; + + PROCNAME("pixcmapIsValid"); + + if (!pvalid) + return ERROR_INT("&valid not defined", procName, 1); + *pvalid = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (!cmap->array) + return ERROR_INT("cmap array not defined", procName, 1); + d = cmap->depth; + if (d !=1 && d != 2 && d != 4 && d != 8) { + L_ERROR("invalid cmap depth: %d\n", procName, d); + return 1; + } + if (cmap->nalloc < 2 || cmap->nalloc > 256) { + L_ERROR("invalid cmap nalloc: %d\n", procName, cmap->nalloc); + return 1; + } + if (cmap->n < 0 || cmap->n > 256 || cmap->n > cmap->nalloc) { + L_ERROR("invalid cmap n: %d (nalloc = %d)\n", procName, + cmap->n, cmap->nalloc); + return 1; + } + *pvalid = 1; + return 0; +} + + +/*! + * \brief pixcmapAddColor() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap entry to be added; each number + * is in range [0, ... 255] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This always adds the color if there is room.
+ *      (2) The alpha component is 255 (opaque)
+ * 
+ */ +l_ok +pixcmapAddColor(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapAddColor"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (cmap->n >= cmap->nalloc) + return ERROR_INT("no free color entries", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + cta[cmap->n].red = rval; + cta[cmap->n].green = gval; + cta[cmap->n].blue = bval; + cta[cmap->n].alpha = 255; + cmap->n++; + return 0; +} + + +/*! + * \brief pixcmapAddRGBA() + * + * \param[in] cmap + * \param[in] rval, gval, bval, aval colormap entry to be added; + * each number is in range [0, ... 255] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This always adds the color if there is room.
+ * 
+ */ +l_ok +pixcmapAddRGBA(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 aval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapAddRGBA"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (cmap->n >= cmap->nalloc) + return ERROR_INT("no free color entries", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + cta[cmap->n].red = rval; + cta[cmap->n].green = gval; + cta[cmap->n].blue = bval; + cta[cmap->n].alpha = aval; + cmap->n++; + return 0; +} + + +/*! + * \brief pixcmapAddNewColor() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap entry to be added; each number + * is in range [0, ... 255] + * \param[out] pindex index of color + * \return 0 if OK, 1 on error; 2 if unable to add color + * + *
+ * Notes:
+ *      (1) This only adds color if not already there.
+ *      (2) The alpha component is 255 (opaque)
+ *      (3) This returns the index of the new (or existing) color.
+ *      (4) Returns 2 with a warning if unable to add this color;
+ *          the caller should check the return value.
+ * 
+ */ +l_ok +pixcmapAddNewColor(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pindex) +{ + PROCNAME("pixcmapAddNewColor"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + /* Check if the color is already present. */ + if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ + return 0; + + /* We need to add the color. Is there room? */ + if (cmap->n >= cmap->nalloc) { + L_WARNING("no free color entries\n", procName); + return 2; + } + + /* There's room. Add it. */ + pixcmapAddColor(cmap, rval, gval, bval); + *pindex = pixcmapGetCount(cmap) - 1; + return 0; +} + + +/*! + * \brief pixcmapAddNearestColor() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap entry to be added; each number + * is in range [0, ... 255] + * \param[out] pindex index of color + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only adds color if not already there.
+ *      (2) The alpha component is 255 (opaque)
+ *      (3) If it's not in the colormap and there is no room to add
+ *          another color, this returns the index of the nearest color.
+ * 
+ */ +l_ok +pixcmapAddNearestColor(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pindex) +{ + PROCNAME("pixcmapAddNearestColor"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + /* Check if the color is already present. */ + if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ + return 0; + + /* We need to add the color. Is there room? */ + if (cmap->n < cmap->nalloc) { + pixcmapAddColor(cmap, rval, gval, bval); + *pindex = pixcmapGetCount(cmap) - 1; + return 0; + } + + /* There's no room. Return the index of the nearest color */ + pixcmapGetNearestIndex(cmap, rval, gval, bval, pindex); + return 0; +} + + +/*! + * \brief pixcmapUsableColor() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap entry to be added; each number + * is in range [0, ... 255] + * \param[out] pusable 1 if usable; 0 if not + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This checks if the color already exists or if there is
+ *          room to add it.  It makes no change in the colormap.
+ * 
+ */ +l_ok +pixcmapUsableColor(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pusable) +{ +l_int32 index; + + PROCNAME("pixcmapUsableColor"); + + if (!pusable) + return ERROR_INT("&usable not defined", procName, 1); + *pusable = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + /* Is there room to add it? */ + if (cmap->n < cmap->nalloc) { + *pusable = 1; + return 0; + } + + /* No room; check if the color is already present. */ + if (!pixcmapGetIndex(cmap, rval, gval, bval, &index)) /* found */ + *pusable = 1; + return 0; +} + + +/*! + * \brief pixcmapAddBlackOrWhite() + * + * \param[in] cmap + * \param[in] color 0 for black, 1 for white + * \param[out] pindex [optional] index of color; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only adds color if not already there.
+ *      (2) The alpha component is 255 (opaque)
+ *      (3) This sets index to the requested color.
+ *      (4) If there is no room in the colormap, returns the index
+ *          of the closest color.
+ * 
+ */ +l_ok +pixcmapAddBlackOrWhite(PIXCMAP *cmap, + l_int32 color, + l_int32 *pindex) +{ +l_int32 index; + + PROCNAME("pixcmapAddBlackOrWhite"); + + if (pindex) *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if (color == 0) { /* black */ + if (pixcmapGetFreeCount(cmap) > 0) + pixcmapAddNewColor(cmap, 0, 0, 0, &index); + else + pixcmapGetRankIntensity(cmap, 0.0, &index); + } else { /* white */ + if (pixcmapGetFreeCount(cmap) > 0) + pixcmapAddNewColor(cmap, 255, 255, 255, &index); + else + pixcmapGetRankIntensity(cmap, 1.0, &index); + } + + if (pindex) + *pindex = index; + return 0; +} + + +/*! + * \brief pixcmapSetBlackAndWhite() + * + * \param[in] cmap + * \param[in] setblack 0 for no operation; 1 to set darkest color to black + * \param[in] setwhite 0 for no operation; 1 to set lightest color to white + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapSetBlackAndWhite(PIXCMAP *cmap, + l_int32 setblack, + l_int32 setwhite) +{ +l_int32 index; + + PROCNAME("pixcmapSetBlackAndWhite"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if (setblack) { + pixcmapGetRankIntensity(cmap, 0.0, &index); + pixcmapResetColor(cmap, index, 0, 0, 0); + } + if (setwhite) { + pixcmapGetRankIntensity(cmap, 1.0, &index); + pixcmapResetColor(cmap, index, 255, 255, 255); + } + return 0; +} + + +/*! + * \brief pixcmapGetCount() + * + * \param[in] cmap + * \return count, or 0 on error + */ +l_int32 +pixcmapGetCount(const PIXCMAP *cmap) +{ + PROCNAME("pixcmapGetCount"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 0); + return cmap->n; +} + + +/*! + * \brief pixcmapGetFreeCount() + * + * \param[in] cmap + * \return free entries, or 0 on error + */ +l_int32 +pixcmapGetFreeCount(PIXCMAP *cmap) +{ + PROCNAME("pixcmapGetFreeCount"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 0); + return (cmap->nalloc - cmap->n); +} + + +/*! + * \brief pixcmapGetDepth() + * + * \param[in] cmap + * \return depth, or 0 on error + */ +l_int32 +pixcmapGetDepth(PIXCMAP *cmap) +{ + PROCNAME("pixcmapGetDepth"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 0); + return cmap->depth; +} + + +/*! + * \brief pixcmapGetMinDepth() + * + * \param[in] cmap + * \param[out] pmindepth minimum depth to support the colormap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) On error, &mindepth is returned as 0.
+ * 
+ */ +l_ok +pixcmapGetMinDepth(PIXCMAP *cmap, + l_int32 *pmindepth) +{ +l_int32 ncolors; + + PROCNAME("pixcmapGetMinDepth"); + + if (!pmindepth) + return ERROR_INT("&mindepth not defined", procName, 1); + *pmindepth = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + if (ncolors <= 4) + *pmindepth = 2; + else if (ncolors <= 16) + *pmindepth = 4; + else /* ncolors > 16 */ + *pmindepth = 8; + return 0; +} + + +/*! + * \brief pixcmapClear() + * + * \param[in] cmap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes the colors by setting the count to 0.
+ * 
+ */ +l_ok +pixcmapClear(PIXCMAP *cmap) +{ + PROCNAME("pixcmapClear"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + cmap->n = 0; + return 0; +} + + +/*-------------------------------------------------------------* + * Colormap random access * + *-------------------------------------------------------------*/ +/*! + * \brief pixcmapGetColor() + * + * \param[in] cmap + * \param[in] index + * \param[out] prval, pgval, pbval each color value + * \return 0 if OK, 1 if not accessible caller should check + */ +l_ok +pixcmapGetColor(PIXCMAP *cmap, + l_int32 index, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetColor"); + + if (!prval || !pgval || !pbval) + return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); + *prval = *pgval = *pbval = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (index < 0 || index >= cmap->n) + return ERROR_INT("index out of bounds", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + *prval = cta[index].red; + *pgval = cta[index].green; + *pbval = cta[index].blue; + return 0; +} + + +/*! + * \brief pixcmapGetColor32() + * + * \param[in] cmap + * \param[in] index + * \param[out] pval32 32-bit rgb color value + * \return 0 if OK, 1 if not accessible caller should check + * + *
+ * Notes:
+ *      (1) The returned alpha channel value is 255.
+ * 
+ */ +l_ok +pixcmapGetColor32(PIXCMAP *cmap, + l_int32 index, + l_uint32 *pval32) +{ +l_int32 rval, gval, bval; + + PROCNAME("pixcmapGetColor32"); + + if (!pval32) + return ERROR_INT("&val32 not defined", procName, 1); + *pval32 = 0; + + if (pixcmapGetColor(cmap, index, &rval, &gval, &bval) != 0) + return ERROR_INT("rgb values not found", procName, 1); + composeRGBAPixel(rval, gval, bval, 255, pval32); + return 0; +} + + +/*! + * \brief pixcmapGetRGBA() + * + * \param[in] cmap + * \param[in] index + * \param[out] prval, pgval, pbval, paval each color value + * \return 0 if OK, 1 if not accessible caller should check + */ +l_ok +pixcmapGetRGBA(PIXCMAP *cmap, + l_int32 index, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval, + l_int32 *paval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetRGBA"); + + if (!prval || !pgval || !pbval || !paval) + return ERROR_INT("&rval, &gval, &bval, &aval not all defined", + procName, 1); + *prval = *pgval = *pbval = *paval = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (index < 0 || index >= cmap->n) + return ERROR_INT("index out of bounds", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + *prval = cta[index].red; + *pgval = cta[index].green; + *pbval = cta[index].blue; + *paval = cta[index].alpha; + return 0; +} + + +/*! + * \brief pixcmapGetRGBA32() + * + * \param[in] cmap + * \param[in] index + * \param[out] pval32 32-bit rgba color value + * \return 0 if OK, 1 if not accessible caller should check + */ +l_ok +pixcmapGetRGBA32(PIXCMAP *cmap, + l_int32 index, + l_uint32 *pval32) +{ +l_int32 rval, gval, bval, aval; + + PROCNAME("pixcmapGetRGBA32"); + + if (!pval32) + return ERROR_INT("&val32 not defined", procName, 1); + *pval32 = 0; + + if (pixcmapGetRGBA(cmap, index, &rval, &gval, &bval, &aval) != 0) + return ERROR_INT("rgba values not found", procName, 1); + composeRGBAPixel(rval, gval, bval, aval, pval32); + return 0; +} + + +/*! + * \brief pixcmapResetColor() + * + * \param[in] cmap + * \param[in] index + * \param[in] rval, gval, bval colormap entry to be reset; each number + * is in range [0, ... 255] + * \return 0 if OK, 1 if not accessible caller should check + * + *
+ * Notes:
+ *      (1) This resets sets the color of an entry that has already
+ *          been set and included in the count of colors.
+ *      (2) The alpha component is 255 (opaque)
+ * 
+ */ +l_ok +pixcmapResetColor(PIXCMAP *cmap, + l_int32 index, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapResetColor"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (index < 0 || index >= cmap->n) + return ERROR_INT("index out of bounds", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + cta[index].red = rval; + cta[index].green = gval; + cta[index].blue = bval; + cta[index].alpha = 255; + return 0; +} + + +/*! + * \brief pixcmapSetAlpha() + * + * \param[in] cmap + * \param[in] index + * \param[in] aval in range [0, ... 255] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This modifies the transparency of one entry in a colormap.
+ *          The alpha component by default is 255 (opaque).
+ *          This is used when extracting the colormap from a PNG file
+ *          without decoding the image.
+ * 
+ */ +l_ok +pixcmapSetAlpha(PIXCMAP *cmap, + l_int32 index, + l_int32 aval) +{ +RGBA_QUAD *cta; + + PROCNAME("pixcmapSetAlpha"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (index < 0 || index >= cmap->n) + return ERROR_INT("index out of bounds", procName, 1); + + cta = (RGBA_QUAD *)cmap->array; + cta[index].alpha = aval; + return 0; +} + + +/*! + * \brief pixcmapGetIndex() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap colors to search for; each number + * is in range [0, ... 255] + * \param[out] pindex value of index found + * \return 0 if found, 1 if not found caller must check + */ +l_int32 +pixcmapGetIndex(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pindex) +{ +l_int32 n, i; +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetIndex"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + n = pixcmapGetCount(cmap); + + cta = (RGBA_QUAD *)cmap->array; + for (i = 0; i < n; i++) { + if (rval == cta[i].red && + gval == cta[i].green && + bval == cta[i].blue) { + *pindex = i; + return 0; + } + } + return 1; +} + + +/*! + * \brief pixcmapHasColor() + * + * \param[in] cmap + * \param[out] pcolor TRUE if cmap has color; FALSE otherwise + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapHasColor(PIXCMAP *cmap, + l_int32 *pcolor) +{ +l_int32 n, i; +l_int32 *rmap, *gmap, *bmap; + + PROCNAME("pixcmapHasColor"); + + if (!pcolor) + return ERROR_INT("&color not defined", procName, 1); + *pcolor = FALSE; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL)) + return ERROR_INT("colormap arrays not made", procName, 1); + n = pixcmapGetCount(cmap); + for (i = 0; i < n; i++) { + if ((rmap[i] != gmap[i]) || (rmap[i] != bmap[i])) { + *pcolor = TRUE; + break; + } + } + + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + return 0; +} + + +/*! + * \brief pixcmapIsOpaque() + * + * \param[in] cmap + * \param[out] popaque TRUE if fully opaque: all entries are 255 + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapIsOpaque(PIXCMAP *cmap, + l_int32 *popaque) +{ +l_int32 i, n; +RGBA_QUAD *cta; + + PROCNAME("pixcmapIsOpaque"); + + if (!popaque) + return ERROR_INT("&opaque not defined", procName, 1); + *popaque = TRUE; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + n = pixcmapGetCount(cmap); + cta = (RGBA_QUAD *)cmap->array; + for (i = 0; i < n; i++) { + if (cta[i].alpha != 255) { + *popaque = FALSE; + break; + } + } + return 0; +} + + +/*! + * \brief pixcmapIsBlackAndWhite() + * + * \param[in] cmap + * \param[out] pblackwhite TRUE if the cmap has only two colors: + * black (0,0,0) and white (255,255,255) + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapIsBlackAndWhite(PIXCMAP *cmap, + l_int32 *pblackwhite) +{ +l_int32 val0, val1, hascolor; +RGBA_QUAD *cta; + + PROCNAME("pixcmapIsBlackAndWhite"); + + if (!pblackwhite) + return ERROR_INT("&blackwhite not defined", procName, 1); + *pblackwhite = FALSE; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (pixcmapGetCount(cmap) != 2) + return 0; + + pixcmapHasColor(cmap, &hascolor); + if (hascolor) return 0; + + cta = (RGBA_QUAD *)cmap->array; + val0 = cta[0].red; + val1 = cta[1].red; + if ((val0 == 0 && val1 == 255) || (val0 == 255 && val1 == 0)) + *pblackwhite = TRUE; + return 0; +} + + +/*! + * \brief pixcmapCountGrayColors() + * + * \param[in] cmap + * \param[out] pngray number of gray colors + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This counts the unique gray colors, including black and white.
+ * 
+ */ +l_ok +pixcmapCountGrayColors(PIXCMAP *cmap, + l_int32 *pngray) +{ +l_int32 n, i, rval, gval, bval, count; +l_int32 *array; + + PROCNAME("pixcmapCountGrayColors"); + + if (!pngray) + return ERROR_INT("&ngray not defined", procName, 1); + *pngray = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + array = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + n = pixcmapGetCount(cmap); + count = 0; + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if ((rval == gval) && (rval == bval) && (array[rval] == 0)) { + array[rval] = 1; + count++; + } + } + + LEPT_FREE(array); + *pngray = count; + return 0; +} + + +/*! + * \brief pixcmapGetRankIntensity() + * + * \param[in] cmap + * \param[in] rankval 0.0 for darkest, 1.0 for lightest color + * \param[out] pindex the index into the colormap that corresponds + * to the rank intensity color + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapGetRankIntensity(PIXCMAP *cmap, + l_float32 rankval, + l_int32 *pindex) +{ +l_int32 n, i, rval, gval, bval, rankindex; +NUMA *na, *nasort; + + PROCNAME("pixcmapGetRankIntensity"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (rankval < 0.0 || rankval > 1.0) + return ERROR_INT("rankval not in [0.0 ... 1.0]", procName, 1); + + n = pixcmapGetCount(cmap); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + numaAddNumber(na, rval + gval + bval); + } + nasort = numaGetSortIndex(na, L_SORT_INCREASING); + rankindex = (l_int32)(rankval * (n - 1) + 0.5); + numaGetIValue(nasort, rankindex, pindex); + + numaDestroy(&na); + numaDestroy(&nasort); + return 0; +} + + +/*! + * \brief pixcmapGetNearestIndex() + * + * \param[in] cmap + * \param[in] rval, gval, bval colormap colors to search for; each number + * is in range [0, ... 255] + * \param[out] pindex the index of the nearest color + * \return 0 if OK, 1 on error caller must check + * + *
+ * Notes:
+ *      (1) Returns the index of the exact color if possible, otherwise the
+ *          index of the color closest to the target color.
+ *      (2) Nearest color is that which is the least sum-of-squares distance
+ *          from the target color.
+ * 
+ */ +l_ok +pixcmapGetNearestIndex(PIXCMAP *cmap, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pindex) +{ +l_int32 i, n, delta, dist, mindist; +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetNearestIndex"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = UNDEF; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if ((cta = (RGBA_QUAD *)cmap->array) == NULL) + return ERROR_INT("cta not defined(!)", procName, 1); + n = pixcmapGetCount(cmap); + + mindist = 3 * 255 * 255 + 1; + for (i = 0; i < n; i++) { + delta = cta[i].red - rval; + dist = delta * delta; + delta = cta[i].green - gval; + dist += delta * delta; + delta = cta[i].blue - bval; + dist += delta * delta; + if (dist < mindist) { + *pindex = i; + if (dist == 0) + break; + mindist = dist; + } + } + + return 0; +} + + +/*! + * \brief pixcmapGetNearestGrayIndex() + * + * \param[in] cmap + * \param[in] val gray value to search for; in range [0, ... 255] + * \param[out] pindex the index of the nearest color + * \return 0 if OK, 1 on error caller must check + * + *
+ * Notes:
+ *      (1) This should be used on gray colormaps.  It uses only the
+ *          green value of the colormap.
+ *      (2) Returns the index of the exact color if possible, otherwise the
+ *          index of the color closest to the target color.
+ * 
+ */ +l_ok +pixcmapGetNearestGrayIndex(PIXCMAP *cmap, + l_int32 val, + l_int32 *pindex) +{ +l_int32 i, n, dist, mindist; +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetNearestGrayIndex"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (val < 0 || val > 255) + return ERROR_INT("val not in [0 ... 255]", procName, 1); + + if ((cta = (RGBA_QUAD *)cmap->array) == NULL) + return ERROR_INT("cta not defined(!)", procName, 1); + n = pixcmapGetCount(cmap); + + mindist = 256; + for (i = 0; i < n; i++) { + dist = cta[i].green - val; + dist = L_ABS(dist); + if (dist < mindist) { + *pindex = i; + if (dist == 0) + break; + mindist = dist; + } + } + + return 0; +} + + +/*! + * \brief pixcmapGetDistanceToColor() + * + * \param[in] cmap + * \param[in] index + * \param[in] rval, gval, bval target color + * \param[out] pdist the distance from the cmap entry to target + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Returns the L2 distance (squared) between the color at index i
+ *          and the target color.
+ * 
+ */ +l_ok +pixcmapGetDistanceToColor(PIXCMAP *cmap, + l_int32 index, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pdist) +{ +l_int32 n, delta, dist; +RGBA_QUAD *cta; + + PROCNAME("pixcmapGetDistanceToColor"); + + if (!pdist) + return ERROR_INT("&dist not defined", procName, 1); + *pdist = UNDEF; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + n = pixcmapGetCount(cmap); + if (index >= n) + return ERROR_INT("invalid index", procName, 1); + + if ((cta = (RGBA_QUAD *)cmap->array) == NULL) + return ERROR_INT("cta not defined(!)", procName, 1); + + delta = cta[index].red - rval; + dist = delta * delta; + delta = cta[index].green - gval; + dist += delta * delta; + delta = cta[index].blue - bval; + dist += delta * delta; + *pdist = dist; + + return 0; +} + + +/*! + * \brief pixcmapGetRangeValues() + * + * \param[in] cmap + * \param[in] select L_SELECT_RED, L_SELECT_GREEN, L_SELECT_BLUE or + * L_SELECT_AVERAGE + * \param[out] pminval [optional] minimum value of component + * \param[out] pmaxval [optional] maximum value of component + * \param[out] pminindex [optional] index of minimum value + * \param[out] pmaxindex [optional] index of maximum value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Returns, for selected components (or the average), the
+ *          the extreme values (min and/or max) and their indices
+ *          that are found in the cmap.
+ * 
+ */ +l_ok +pixcmapGetRangeValues(PIXCMAP *cmap, + l_int32 select, + l_int32 *pminval, + l_int32 *pmaxval, + l_int32 *pminindex, + l_int32 *pmaxindex) +{ +l_int32 i, n, imin, imax, minval, maxval, rval, gval, bval, aveval; + + PROCNAME("pixcmapGetRangeValues"); + + if (pminval) *pminval = UNDEF; + if (pmaxval) *pmaxval = UNDEF; + if (pminindex) *pminindex = UNDEF; + if (pmaxindex) *pmaxindex = UNDEF; + if (!pminval && !pmaxval && !pminindex && !pmaxindex) + return ERROR_INT("no result requested", procName, 1); + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + imin = UNDEF; + imax = UNDEF; + minval = 100000; + maxval = -1; + n = pixcmapGetCount(cmap); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if (select == L_SELECT_RED) { + if (rval < minval) { + minval = rval; + imin = i; + } + if (rval > maxval) { + maxval = rval; + imax = i; + } + } else if (select == L_SELECT_GREEN) { + if (gval < minval) { + minval = gval; + imin = i; + } + if (gval > maxval) { + maxval = gval; + imax = i; + } + } else if (select == L_SELECT_BLUE) { + if (bval < minval) { + minval = bval; + imin = i; + } + if (bval > maxval) { + maxval = bval; + imax = i; + } + } else if (select == L_SELECT_AVERAGE) { + aveval = (rval + gval + bval) / 3; + if (aveval < minval) { + minval = aveval; + imin = i; + } + if (aveval > maxval) { + maxval = aveval; + imax = i; + } + } else { + return ERROR_INT("invalid selection", procName, 1); + } + } + + if (pminval) *pminval = minval; + if (pmaxval) *pmaxval = maxval; + if (pminindex) *pminindex = imin; + if (pmaxindex) *pmaxindex = imax; + return 0; +} + + +/*-------------------------------------------------------------* + * Colormap conversion * + *-------------------------------------------------------------*/ +/*! + * \brief pixcmapGrayToColor() + * + * \param[in] color + * \return cmap, or NULL on error + * + *
+ * Notes:
+ *      (1) This creates a colormap that maps from gray to
+ *          a specific color.  In the mapping, each component
+ *          is faded to white, depending on the gray value.
+ *      (2) In use, this is simply attached to a grayscale pix
+ *          to give it the input color.
+ * 
+ */ +PIXCMAP * +pixcmapGrayToColor(l_uint32 color) +{ +l_int32 i, rval, gval, bval; +PIXCMAP *cmap; + + extractRGBValues(color, &rval, &gval, &bval); + cmap = pixcmapCreate(8); + for (i = 0; i < 256; i++) { + pixcmapAddColor(cmap, rval + (i * (255 - rval)) / 255, + gval + (i * (255 - gval)) / 255, + bval + (i * (255 - bval)) / 255); + } + + return cmap; +} + + +/*! + * \brief pixcmapColorToGray() + * + * \param[in] cmaps + * \param[in] rwt, gwt, bwt non-negative; these should add to 1.0 + * \return cmap gray, or NULL on error + * + *
+ * Notes:
+ *      (1) This creates a gray colormap from an arbitrary colormap.
+ *      (2) In use, attach the output gray colormap to the pix
+ *          (or a copy of it) that provided the input colormap.
+ * 
+ */ +PIXCMAP * +pixcmapColorToGray(PIXCMAP *cmaps, + l_float32 rwt, + l_float32 gwt, + l_float32 bwt) +{ +l_int32 i, n, rval, gval, bval, val; +l_float32 sum; +PIXCMAP *cmapd; + + PROCNAME("pixcmapColorToGray"); + + if (!cmaps) + return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); + if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) + return (PIXCMAP *)ERROR_PTR("weights not all >= 0.0", procName, NULL); + + /* Make sure the sum of weights is 1.0; otherwise, you can get + * overflow in the gray value. */ + sum = rwt + gwt + bwt; + if (sum == 0.0) { + L_WARNING("all weights zero; setting equal to 1/3\n", procName); + rwt = gwt = bwt = 0.33333; + sum = 1.0; + } + if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ + L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); + rwt = rwt / sum; + gwt = gwt / sum; + bwt = bwt / sum; + } + + if ((cmapd = pixcmapCopy(cmaps)) == NULL) + return (PIXCMAP *)ERROR_PTR("cmapd not made", procName, NULL); + n = pixcmapGetCount(cmapd); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmapd, i, &rval, &gval, &bval); + val = (l_int32)(rwt * rval + gwt * gval + bwt * bval + 0.5); + pixcmapResetColor(cmapd, i, val, val, val); + } + + return cmapd; +} + + +/*! + * \brief pixcmapConvertTo4() + * + * \param[in] cmaps colormap for 2 bpp pix + * \return cmapd (4 bpp) + * + *
+ * Notes:
+ *      (1) This converts a 2 bpp colormap to 4 bpp.  The colors
+ *          are the same; the output colormap entry array has size 16.
+ * 
+ */ +PIXCMAP * +pixcmapConvertTo4(PIXCMAP *cmaps) +{ +l_int32 i, n, rval, gval, bval; +PIXCMAP *cmapd; + + PROCNAME("pixcmapConvertTo4"); + + if (!cmaps) + return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); + if (pixcmapGetDepth(cmaps) != 2) + return (PIXCMAP *)ERROR_PTR("cmaps not for 2 bpp pix", procName, NULL); + + cmapd = pixcmapCreate(4); + n = pixcmapGetCount(cmaps); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmaps, i, &rval, &gval, &bval); + pixcmapAddColor(cmapd, rval, gval, bval); + } + return cmapd; +} + + +/*! + * \brief pixcmapConvertTo8() + * + * \param[in] cmaps colormap for 2 bpp or 4 bpp pix + * \return cmapd (8 bpp) + * + *
+ * Notes:
+ *      (1) This converts a 2 bpp or 4 bpp colormap to 8 bpp.  The colors
+ *          are the same; the output colormap entry array has size 256.
+ * 
+ */ +PIXCMAP * +pixcmapConvertTo8(PIXCMAP *cmaps) +{ +l_int32 i, n, depth, rval, gval, bval; +PIXCMAP *cmapd; + + PROCNAME("pixcmapConvertTo8"); + + if (!cmaps) + return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); + depth = pixcmapGetDepth(cmaps); + if (depth == 8) return pixcmapCopy(cmaps); + if (depth != 2 && depth != 4) + return (PIXCMAP *)ERROR_PTR("cmaps not 2 or 4 bpp", procName, NULL); + + cmapd = pixcmapCreate(8); + n = pixcmapGetCount(cmaps); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmaps, i, &rval, &gval, &bval); + pixcmapAddColor(cmapd, rval, gval, bval); + } + return cmapd; +} + + +/*-------------------------------------------------------------* + * Colormap I/O * + *-------------------------------------------------------------*/ +/*! + * \brief pixcmapRead() + * + * \param[in] filename + * \return cmap, or NULL on error + */ +PIXCMAP * +pixcmapRead(const char *filename) +{ +FILE *fp; +PIXCMAP *cmap; + + PROCNAME("pixcmapRead"); + + if (!filename) + return (PIXCMAP *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIXCMAP *)ERROR_PTR("stream not opened", procName, NULL); + cmap = pixcmapReadStream(fp); + fclose(fp); + if (!cmap) + return (PIXCMAP *)ERROR_PTR("cmap not read", procName, NULL); + return cmap; +} + + +/*! + * \brief pixcmapReadStream() + * + * \param[in] fp file stream + * \return cmap, or NULL on error + */ +PIXCMAP * +pixcmapReadStream(FILE *fp) +{ +l_int32 rval, gval, bval, aval, ignore; +l_int32 i, index, ret, depth, ncolors; +PIXCMAP *cmap; + + PROCNAME("pixcmapReadStream"); + + if (!fp) + return (PIXCMAP *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", + &depth, &ncolors); + if (ret != 2 || + (depth != 1 && depth != 2 && depth != 4 && depth != 8) || + (ncolors < 2 || ncolors > 256)) + return (PIXCMAP *)ERROR_PTR("invalid cmap size", procName, NULL); + ignore = fscanf(fp, "Color R-val G-val B-val Alpha\n"); + ignore = fscanf(fp, "----------------------------------------\n"); + + cmap = pixcmapCreate(depth); + for (i = 0; i < ncolors; i++) { + if (fscanf(fp, "%3d %3d %3d %3d %3d\n", + &index, &rval, &gval, &bval, &aval) != 5) { + pixcmapDestroy(&cmap); + return (PIXCMAP *)ERROR_PTR("invalid entry", procName, NULL); + } + pixcmapAddRGBA(cmap, rval, gval, bval, aval); + } + return cmap; +} + + +/*! + * \brief pixcmapReadMem() + * + * \param[in] data serialization of pixcmap; in ascii + * \param[in] size of data in bytes; can use strlen to get it + * \return cmap, or NULL on error + */ +PIXCMAP * +pixcmapReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +PIXCMAP *cmap; + + PROCNAME("pixcmapReadMem"); + + if (!data) + return (PIXCMAP *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIXCMAP *)ERROR_PTR("stream not opened", procName, NULL); + + cmap = pixcmapReadStream(fp); + fclose(fp); + if (!cmap) L_ERROR("cmap not read\n", procName); + return cmap; +} + + +/*! + * \brief pixcmapWrite() + * + * \param[in] filename + * \param[in] cmap + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapWrite(const char *filename, + const PIXCMAP *cmap) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixcmapWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixcmapWriteStream(fp, cmap); + fclose(fp); + if (ret) + return ERROR_INT("cmap not written to stream", procName, 1); + return 0; +} + + + +/*! + * \brief pixcmapWriteStream() + * + * \param[in] fp file stream + \param[in] cmap + * \return 0 if OK, 1 on error + */ +l_ok +pixcmapWriteStream(FILE *fp, + const PIXCMAP *cmap) +{ +l_int32 *rmap, *gmap, *bmap, *amap; +l_int32 i; + + PROCNAME("pixcmapWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) + return ERROR_INT("colormap arrays not made", procName, 1); + + fprintf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", cmap->depth, cmap->n); + fprintf(fp, "Color R-val G-val B-val Alpha\n"); + fprintf(fp, "----------------------------------------\n"); + for (i = 0; i < cmap->n; i++) + fprintf(fp, "%3d %3d %3d %3d %3d\n", + i, rmap[i], gmap[i], bmap[i], amap[i]); + fprintf(fp, "\n"); + + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + LEPT_FREE(amap); + return 0; +} + + +/*! + * \brief pixcmapWriteMem() + * + * \param[out] pdata data of serialized pixcmap; ascii + * \param[out] psize size of returned data + * \param[in] cmap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a pixcmap in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +pixcmapWriteMem(l_uint8 **pdata, + size_t *psize, + const PIXCMAP *cmap) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixcmapWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixcmapWriteStream(fp, cmap); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = pixcmapWriteStream(fp, cmap); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*----------------------------------------------------------------------* + * Extract colormap arrays and serialization * + *----------------------------------------------------------------------*/ +/*! + * \brief pixcmapToArrays() + * + * \param[in] cmap colormap + * \param[out] prmap, pgmap, pbmap colormap arrays + * \param[out] pamap [optional] alpha array + * \return 0 if OK; 1 on error + */ +l_ok +pixcmapToArrays(const PIXCMAP *cmap, + l_int32 **prmap, + l_int32 **pgmap, + l_int32 **pbmap, + l_int32 **pamap) +{ +l_int32 *rmap, *gmap, *bmap, *amap; +l_int32 i, ncolors; +RGBA_QUAD *cta; + + PROCNAME("pixcmapToArrays"); + + if (!prmap || !pgmap || !pbmap) + return ERROR_INT("&rmap, &gmap, &bmap not all defined", procName, 1); + *prmap = *pgmap = *pbmap = NULL; + if (pamap) *pamap = NULL; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + rmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); + gmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); + bmap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); + *prmap = rmap; + *pgmap = gmap; + *pbmap = bmap; + if (pamap) { + amap = (l_int32 *)LEPT_CALLOC(ncolors, sizeof(l_int32)); + *pamap = amap; + } + + cta = (RGBA_QUAD *)cmap->array; + for (i = 0; i < ncolors; i++) { + rmap[i] = cta[i].red; + gmap[i] = cta[i].green; + bmap[i] = cta[i].blue; + if (pamap) + amap[i] = cta[i].alpha; + } + + return 0; +} + + +/*! + * \brief pixcmapToRGBTable() + * + * \param[in] cmap colormap + * \param[out] ptab table of rgba values for the colormap + * \param[out] pncolors [optional] size of table + * \return 0 if OK; 1 on error + */ +l_ok +pixcmapToRGBTable(PIXCMAP *cmap, + l_uint32 **ptab, + l_int32 *pncolors) +{ +l_int32 i, ncolors, rval, gval, bval, aval; +l_uint32 *tab; + + PROCNAME("pixcmapToRGBTable"); + + if (!ptab) + return ERROR_INT("&tab not defined", procName, 1); + *ptab = NULL; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + if (pncolors) *pncolors = ncolors; + tab = (l_uint32 *)LEPT_CALLOC(ncolors, sizeof(l_uint32)); + *ptab = tab; + + for (i = 0; i < ncolors; i++) { + pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); + composeRGBAPixel(rval, gval, bval, aval, &tab[i]); + } + return 0; +} + + +/*! + * \brief pixcmapSerializeToMemory() + * + * \param[in] cmap colormap + * \param[in] cpc components/color: 3 for rgb, 4 for rgba + * \param[out] pncolors number of colors in table + * \param[out] pdata binary string, cpc bytes per color + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) When serializing to store in a pdf, use %cpc = 3.
+ * 
+ */ +l_ok +pixcmapSerializeToMemory(PIXCMAP *cmap, + l_int32 cpc, + l_int32 *pncolors, + l_uint8 **pdata) +{ +l_int32 i, ncolors, rval, gval, bval, aval; +l_uint8 *data; + + PROCNAME("pixcmapSerializeToMemory"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pncolors) + return ERROR_INT("&ncolors not defined", procName, 1); + *pncolors = 0; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (cpc != 3 && cpc != 4) + return ERROR_INT("cpc not 3 or 4", procName, 1); + + ncolors = pixcmapGetCount(cmap); + *pncolors = ncolors; + data = (l_uint8 *)LEPT_CALLOC((size_t)cpc * ncolors, sizeof(l_uint8)); + *pdata = data; + + for (i = 0; i < ncolors; i++) { + pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); + data[cpc * i] = rval; + data[cpc * i + 1] = gval; + data[cpc * i + 2] = bval; + if (cpc == 4) + data[cpc * i + 3] = aval; + } + return 0; +} + + +/*! + * \brief pixcmapDeserializeFromMemory() + * + * \param[in] data binary string, 3 or 4 bytes per color + * \param[in] cpc components/color: 3 for rgb, 4 for rgba + * \param[in] ncolors + * \return cmap, or NULL on error + */ +PIXCMAP * +pixcmapDeserializeFromMemory(l_uint8 *data, + l_int32 cpc, + l_int32 ncolors) +{ +l_int32 i, d, rval, gval, bval, aval; +PIXCMAP *cmap; + + PROCNAME("pixcmapDeserializeFromMemory"); + + if (!data) + return (PIXCMAP *)ERROR_PTR("data not defined", procName, NULL); + if (cpc != 3 && cpc != 4) + return (PIXCMAP *)ERROR_PTR("cpc not 3 or 4", procName, NULL); + if (ncolors == 0) + return (PIXCMAP *)ERROR_PTR("no entries", procName, NULL); + if (ncolors > 256) + return (PIXCMAP *)ERROR_PTR("ncolors > 256", procName, NULL); + + if (ncolors > 16) + d = 8; + else if (ncolors > 4) + d = 4; + else if (ncolors > 2) + d = 2; + else + d = 1; + cmap = pixcmapCreate(d); + for (i = 0; i < ncolors; i++) { + rval = data[cpc * i]; + gval = data[cpc * i + 1]; + bval = data[cpc * i + 2]; + if (cpc == 4) + aval = data[cpc * i + 3]; + else + aval = 255; /* opaque */ + pixcmapAddRGBA(cmap, rval, gval, bval, aval); + } + + return cmap; +} + + +/*! + * \brief pixcmapConvertToHex() + * + * \param[in] data binary serialized data + * \param[in] ncolors in colormap + * \return hexdata bracketed, space-separated ascii hex string, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) The number of bytes in %data is 3 * ncolors.
+ *      (2) Output is in form:
+ *             < r0g0b0 r1g1b1 ... rngnbn >
+ *          where r0, g0, b0 ... are each 2 bytes of hex ascii
+ *      (3) This is used in pdf files to express the colormap as an
+ *          array in ascii (human-readable) format.
+ * 
+ */ +char * +pixcmapConvertToHex(l_uint8 *data, + l_int32 ncolors) +{ +l_int32 i, j, hexbytes; +char *hexdata = NULL; +char buf[4]; + + PROCNAME("pixcmapConvertToHex"); + + if (!data) + return (char *)ERROR_PTR("data not defined", procName, NULL); + if (ncolors < 1) + return (char *)ERROR_PTR("no colors", procName, NULL); + + hexbytes = 2 + (2 * 3 + 1) * ncolors + 2; + hexdata = (char *)LEPT_CALLOC(hexbytes, sizeof(char)); + hexdata[0] = '<'; + hexdata[1] = ' '; + + for (i = 0; i < ncolors; i++) { + j = 2 + (2 * 3 + 1) * i; + snprintf(buf, sizeof(buf), "%02x", data[3 * i]); + hexdata[j] = buf[0]; + hexdata[j + 1] = buf[1]; + snprintf(buf, sizeof(buf), "%02x", data[3 * i + 1]); + hexdata[j + 2] = buf[0]; + hexdata[j + 3] = buf[1]; + snprintf(buf, sizeof(buf), "%02x", data[3 * i + 2]); + hexdata[j + 4] = buf[0]; + hexdata[j + 5] = buf[1]; + hexdata[j + 6] = ' '; + } + hexdata[j + 7] = '>'; + hexdata[j + 8] = '\0'; + return hexdata; +} + + +/*-------------------------------------------------------------* + * Colormap transforms * + *-------------------------------------------------------------*/ +/*! + * \brief pixcmapGammaTRC() + * + * \param[in] cmap colormap + * \param[in] gamma gamma correction; must be > 0.0 + * \param[in] minval input value that gives 0 for output; can be < 0 + * \param[in] maxval input value that gives 255 for output; can be > 255 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place transform
+ *      (2) See pixGammaTRC() and numaGammaTRC() in enhance.c
+ *          for description and use of transform
+ * 
+ */ +l_ok +pixcmapGammaTRC(PIXCMAP *cmap, + l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +l_int32 rval, gval, bval, trval, tgval, tbval, i, ncolors; +NUMA *nag; + + PROCNAME("pixcmapGammaTRC"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (gamma <= 0.0) { + L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); + gamma = 1.0; + } + if (minval >= maxval) + return ERROR_INT("minval not < maxval", procName, 1); + + if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ + return 0; + + if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) + return ERROR_INT("nag not made", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + numaGetIValue(nag, rval, &trval); + numaGetIValue(nag, gval, &tgval); + numaGetIValue(nag, bval, &tbval); + pixcmapResetColor(cmap, i, trval, tgval, tbval); + } + + numaDestroy(&nag); + return 0; +} + + +/*! + * \brief pixcmapContrastTRC() + * + * \param[in] cmap colormap + * \param[in] factor generally between 0.0 [no enhancement] + * and 1.0, but can be larger than 1.0 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place transform
+ *      (2) See pixContrastTRC() and numaContrastTRC() in enhance.c
+ *          for description and use of transform
+ * 
+ */ +l_ok +pixcmapContrastTRC(PIXCMAP *cmap, + l_float32 factor) +{ +l_int32 i, ncolors, rval, gval, bval, trval, tgval, tbval; +NUMA *nac; + + PROCNAME("pixcmapContrastTRC"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (factor < 0.0) { + L_WARNING("factor must be >= 0.0; setting to 0.0\n", procName); + factor = 0.0; + } + + if ((nac = numaContrastTRC(factor)) == NULL) + return ERROR_INT("nac not made", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + numaGetIValue(nac, rval, &trval); + numaGetIValue(nac, gval, &tgval); + numaGetIValue(nac, bval, &tbval); + pixcmapResetColor(cmap, i, trval, tgval, tbval); + } + + numaDestroy(&nac); + return 0; +} + + +/*! + * \brief pixcmapShiftIntensity() + * + * \param[in] cmap colormap + * \param[in] fraction between -1.0 and +1.0 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place transform
+ *      (2) It does a proportional shift of the intensity for each color.
+ *      (3) If fraction < 0.0, it moves all colors towards (0,0,0).
+ *          This darkens the image.
+ *          If fraction > 0.0, it moves all colors towards (255,255,255)
+ *          This fades the image.
+ *      (4) The equivalent transform can be accomplished with pixcmapGammaTRC(),
+ *          but it is considerably more difficult (see numaGammaTRC()).
+ * 
+ */ +l_ok +pixcmapShiftIntensity(PIXCMAP *cmap, + l_float32 fraction) +{ +l_int32 i, ncolors, rval, gval, bval; + + PROCNAME("pixcmapShiftIntensity"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (fraction < -1.0 || fraction > 1.0) + return ERROR_INT("fraction not in [-1.0, 1.0]", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if (fraction < 0.0) + pixcmapResetColor(cmap, i, + (l_int32)((1.0 + fraction) * rval), + (l_int32)((1.0 + fraction) * gval), + (l_int32)((1.0 + fraction) * bval)); + else + pixcmapResetColor(cmap, i, + rval + (l_int32)(fraction * (255 - rval)), + gval + (l_int32)(fraction * (255 - gval)), + bval + (l_int32)(fraction * (255 - bval))); + } + + return 0; +} + + +/*! + * \brief pixcmapShiftByComponent() + * + * \param[in] cmap colormap + * \param[in] srcval source color: 0xrrggbb00 + * \param[in] dstval target color: 0xrrggbb00 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place transform
+ *      (2) It implements pixelShiftByComponent() for each color.
+ *          The mapping is specified by srcval and dstval.
+ *      (3) If a component decreases, the component in the colormap
+ *          decreases by the same ratio.  Likewise for increasing, except
+ *          all ratios are taken with respect to the distance from 255.
+ * 
+ */ +l_ok +pixcmapShiftByComponent(PIXCMAP *cmap, + l_uint32 srcval, + l_uint32 dstval) +{ +l_int32 i, ncolors, rval, gval, bval; +l_uint32 newval; + + PROCNAME("pixcmapShiftByComponent"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + pixelShiftByComponent(rval, gval, bval, srcval, dstval, &newval); + extractRGBValues(newval, &rval, &gval, &bval); + pixcmapResetColor(cmap, i, rval, gval, bval); + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/colormorph.c b/3rdparty/hgOCR/leptonica/colormorph.c new file mode 100644 index 00000000..3a92bfa2 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colormorph.c @@ -0,0 +1,125 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colormorph.c + *
+ *
+ *      Top-level color morphological operations
+ *
+ *            PIX     *pixColorMorph()
+ *
+ *      Method: Algorithm by van Herk and Gil and Werman, 1992
+ *              Apply grayscale morphological operations separately
+ *              to each component.
+ * 
+ */ + +#include "allheaders.h" + + +/*-----------------------------------------------------------------* + * Top-level color morphological operations * + *-----------------------------------------------------------------*/ +/*! + * \brief pixColorMorph() + * + * \param[in] pixs + * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE, L_MORPH_OPEN, + * or L_MORPH_CLOSE + * \param[in] hsize width of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto for height of Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) This does the morph operation on each component separately,
+ *          and recombines the result.
+ *      (2) Sel is a brick with all elements being hits.
+ *      (3) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixColorMorph(PIX *pixs, + l_int32 type, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixr, *pixg, *pixb, *pixrm, *pixgm, *pixbm, *pixd; + + PROCNAME("pixColorMorph"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && + type != L_MORPH_OPEN && type != L_MORPH_CLOSE) + return (PIX *)ERROR_PTR("invalid morph type", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + if (type == L_MORPH_DILATE) { + pixrm = pixDilateGray(pixr, hsize, vsize); + pixgm = pixDilateGray(pixg, hsize, vsize); + pixbm = pixDilateGray(pixb, hsize, vsize); + } else if (type == L_MORPH_ERODE) { + pixrm = pixErodeGray(pixr, hsize, vsize); + pixgm = pixErodeGray(pixg, hsize, vsize); + pixbm = pixErodeGray(pixb, hsize, vsize); + } else if (type == L_MORPH_OPEN) { + pixrm = pixOpenGray(pixr, hsize, vsize); + pixgm = pixOpenGray(pixg, hsize, vsize); + pixbm = pixOpenGray(pixb, hsize, vsize); + } else { /* type == L_MORPH_CLOSE */ + pixrm = pixCloseGray(pixr, hsize, vsize); + pixgm = pixCloseGray(pixg, hsize, vsize); + pixbm = pixCloseGray(pixb, hsize, vsize); + } + pixd = pixCreateRGBImage(pixrm, pixgm, pixbm); + pixDestroy(&pixr); + pixDestroy(&pixrm); + pixDestroy(&pixg); + pixDestroy(&pixgm); + pixDestroy(&pixb); + pixDestroy(&pixbm); + + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/colorquant1.c b/3rdparty/hgOCR/leptonica/colorquant1.c new file mode 100644 index 00000000..ab63e9e0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colorquant1.c @@ -0,0 +1,4155 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colorquant1.c + *
+ *
+ *  Octcube color quantization
+ *
+ *  There are several different octcube/octree based quantizations.
+ *  These can be classified, in the order in which they appear in this
+ *  file, as follows:
+ *
+ *  -----------------------------------------------------------------
+ *  (1) General adaptive octree
+ *  (2) Adaptive octree by population at fixed level
+ *  (3) Adaptive octree using population and with specified number
+ *      of output colors
+ *  (4) Octcube with colormap representation of mixed color/gray
+ *  (5) 256 fixed octcubes covering color space
+ *  (6) Octcubes at fixed level for ncolors <= 256
+ *  (7) Octcubes at fixed level with RGB output
+ *  (8) Quantizing an rgb image using a specified colormap
+ *  -----------------------------------------------------------------
+ *
+ *  (1) Two-pass adaptive octree color quantization
+ *          PIX              *pixOctreeColorQuant()
+ *          PIX              *pixOctreeColorQuantGeneral()
+ *
+ *        which calls
+ *          static CQCELL  ***octreeGenerateAndPrune()
+ *          static PIX       *pixOctreeQuantizePixels()
+ *
+ *        which calls
+ *          static l_int32    octreeFindColorCell()
+ *
+ *      Helper cqcell functions
+ *          static CQCELL  ***cqcellTreeCreate()
+ *          static void       cqcellTreeDestroy()
+ *
+ *      Helper index functions
+ *          l_int32           makeRGBToIndexTables()
+ *          void              getOctcubeIndexFromRGB()
+ *          static void       getRGBFromOctcube()
+ *          static l_int32    getOctcubeIndices()
+ *          static l_int32    octcubeGetCount()
+ *
+ *  (2) Adaptive octree quantization based on population at a fixed level
+ *          PIX              *pixOctreeQuantByPopulation()
+ *          static l_int32    pixDitherOctindexWithCmap()
+ *
+ *  (3) Adaptive octree quantization to 4 and 8 bpp with specified
+ *      number of output colors in colormap
+ *          PIX              *pixOctreeQuantNumColors()
+ *
+ *  (4) Mixed color/gray quantization with specified number of colors
+ *          PIX              *pixOctcubeQuantMixedWithGray()
+ *
+ *  (5) Fixed partition octcube quantization with 256 cells
+ *          PIX              *pixFixedOctcubeQuant256()
+ *
+ *  (6) Fixed partition quantization for images with few colors
+ *          PIX              *pixFewColorsOctcubeQuant1()
+ *          PIX              *pixFewColorsOctcubeQuant2()
+ *          PIX              *pixFewColorsOctcubeQuantMixed()
+ *
+ *  (7) Fixed partition octcube quantization at specified level
+ *      with quantized output to RGB
+ *          PIX              *pixFixedOctcubeQuantGenRGB()
+ *
+ *  (8) Color quantize RGB image using existing colormap
+ *          PIX              *pixQuantFromCmap()  [high-level wrapper]
+ *          PIX              *pixOctcubeQuantFromCmap()
+ *          static PIX       *pixOctcubeQuantFromCmapLUT()
+ *
+ *      Generation of octcube histogram
+ *          NUMA             *pixOctcubeHistogram()
+ *
+ *      Get filled octcube table from colormap
+ *          l_int32          *pixcmapToOctcubeLUT()
+ *
+ *      Strip out unused elements in colormap
+ *          l_int32           pixRemoveUnusedColors()
+ *
+ *      Find number of occupied octcubes at the specified level
+ *          l_int32           pixNumberOccupiedOctcubes()
+ *
+ *  Notes:
+ *        Leptonica also provides color quantization using a modified
+ *        form of median cut.  See colorquant2.c for details.
+ * 
+ */ + +#include +#include "allheaders.h" + + +/* + *
+ *   This data structure is used for pixOctreeColorQuant(),
+ *   a color octree that adjusts to the color distribution
+ *   in the image that is being quantized.  The best settings
+ *   are with CqNLevels = 6 and DITHERING set on.
+ *
+ * Notes:
+ *      (1) the CTE (color table entry) index is sequentially
+ *          assigned as the tree is pruned back
+ *      (2) if 'bleaf' == 1, all pixels in that cube have been
+ *          assigned to one or more CTEs.  But note that if
+ *          all 8 subcubes have 'bleaf' == 1, it will have no
+ *          pixels left for assignment and will not be a CTE.
+ *      (3) 'nleaves', the number of leaves contained at the next
+ *          lower level is some number between 0 and 8, inclusive.
+ *          If it is zero, it means that all colors within this cube
+ *          are part of a single growing cluster that has not yet
+ *          been set aside as a leaf.  If 'nleaves' > 0, 'bleaf'
+ *          will be set to 1 and all pixels not assigned to leaves
+ *          at lower levels will be assigned to a CTE here.
+ *          (However, as described above, if all pixels are already
+ *          assigned, we set 'bleaf' = 1 but do not create a CTE
+ *          at this level.)
+ *      (4) To keep the maximum color error to a minimum, we
+ *          prune the tree back to level 2, and require that
+ *          all 64 level 2 cells are CTEs.
+ *      (5) We reserve an extra set of colors to prevent running out
+ *          of colors during the assignment of the final 64 level 2 cells.
+ *          This is more likely to happen with small images.
+ *      (6) When we run out of colors, the dithered image can be very
+ *          poor, so we additionally prevent dithering if the image
+ *          is small.
+ *      (7) The color content of the image is measured, and if there
+ *          is very little color, it is quantized in grayscale.
+ * 
+ */ +struct ColorQuantCell +{ + l_int32 rc, gc, bc; /* center values */ + l_int32 n; /* number of samples in this cell */ + l_int32 index; /* CTE (color table entry) index */ + l_int32 nleaves; /* # of leaves contained at next lower level */ + l_int32 bleaf; /* boolean: 0 if not a leaf, 1 if so */ +}; +typedef struct ColorQuantCell CQCELL; + + /* Constants for pixOctreeColorQuant() */ +static const l_int32 CqNLevels = 5; /* only 4, 5 and 6 are allowed */ +static const l_int32 CqReservedColors = 64; /* to allow for level 2 */ + /* remainder CTEs */ +static const l_int32 ExtraReservedColors = 25; /* to avoid running out */ +static const l_int32 TreeGenWidth = 350; /* big enough for good stats */ +static const l_int32 MinDitherSize = 250; /* don't dither if smaller */ + + +/* + *
+ *   This data structure is used for pixOctreeQuantNumColors(),
+ *   a color octree that adjusts in a simple way to the to the color
+ *   distribution in the image that is being quantized.  It outputs
+ *   colormapped images, either 4 bpp or 8 bpp, depending on the
+ *   max number of colors and the compression desired.
+ *
+ *   The number of samples is saved as a float in the first location,
+ *   because this is required to use it as the key that orders the
+ *   cells in the priority queue.
+ * 
+ * */ +struct OctcubeQuantCell +{ + l_float32 n; /* number of samples in this cell */ + l_int32 octindex; /* octcube index */ + l_int32 rcum, gcum, bcum; /* cumulative values */ + l_int32 rval, gval, bval; /* average values */ +}; +typedef struct OctcubeQuantCell OQCELL; + + +/* + *
+ *   This data structure is using for heap sorting octcubes
+ *   by population.  Sort order is decreasing.
+ * 
+ */ +struct L_OctcubePop +{ + l_float32 npix; /* parameter on which to sort */ + l_int32 index; /* octcube index at assigned level */ + l_int32 rval; /* mean red value of pixels in octcube */ + l_int32 gval; /* mean green value of pixels in octcube */ + l_int32 bval; /* mean blue value of pixels in octcube */ +}; +typedef struct L_OctcubePop L_OCTCUBE_POP; + +/* + *
+ *   In pixDitherOctindexWithCmap(), we use these default values.
+     To get the max value of 'dif' in the dithering color transfer,
+     divide these "DIF_CAP" values by 8.  However, a value of
+     0 means that there is no cap (infinite cap).  A very small
+     value is used for POP_DIF_CAP because dithering on the population
+     generated colormap can be unstable without a tight cap.
+ * 
+ */ + +static const l_int32 FIXED_DIF_CAP = 0; +static const l_int32 POP_DIF_CAP = 40; + + + /* Static octree helper function */ +static l_int32 octreeFindColorCell(l_int32 octindex, CQCELL ***cqcaa, + l_int32 *pindex, l_int32 *prval, + l_int32 *pgval, l_int32 *pbval); + + /* Static cqcell functions */ +static CQCELL ***octreeGenerateAndPrune(PIX *pixs, l_int32 colors, + l_int32 reservedcolors, + PIXCMAP **pcmap); +static PIX *pixOctreeQuantizePixels(PIX *pixs, CQCELL ***cqcaa, + l_int32 ditherflag); +static CQCELL ***cqcellTreeCreate(void); +static void cqcellTreeDestroy(CQCELL ****pcqcaa); + + /* Static helper octcube index functions */ +static void getRGBFromOctcube(l_int32 cubeindex, l_int32 level, + l_int32 *prval, l_int32 *pgval, l_int32 *pbval); +static l_int32 getOctcubeIndices(l_int32 rgbindex, l_int32 level, + l_int32 *pbindex, l_int32 *psindex); +static l_int32 octcubeGetCount(l_int32 level, l_int32 *psize); + + /* Static function to perform octcube-indexed dithering */ +static l_int32 pixDitherOctindexWithCmap(PIX *pixs, PIX *pixd, l_uint32 *rtab, + l_uint32 *gtab, l_uint32 *btab, + l_int32 *carray, l_int32 difcap); + + /* Static function to perform octcube-based quantizing from colormap */ +static PIX *pixOctcubeQuantFromCmapLUT(PIX *pixs, PIXCMAP *cmap, + l_int32 mindepth, l_int32 *cmaptab, + l_uint32 *rtab, l_uint32 *gtab, + l_uint32 *btab); + +#ifndef NO_CONSOLE_IO +#define DEBUG_COLORQUANT 0 +#define DEBUG_OCTINDEX 0 +#define DEBUG_OCTCUBE_CMAP 0 +#define DEBUG_POP 0 +#define DEBUG_FEW_COLORS 0 +#define PRINT_OCTCUBE_STATS 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------------------* + * Two-pass adaptive octree color quantization * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixOctreeColorQuant() + * + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] colors in colormap; some number in range [128 ... 256]; + * the actual number of colors used will be smaller + * \param[in] ditherflag 1 to dither, 0 otherwise + * \return pixd 8 bpp with colormap, or NULL on error + * + *
+ *  I found one description in the literature of octree color
+ *  quantization, using progressive truncation of the octree,
+ *  by M. Gervautz and W. Purgathofer in Graphics Gems, pp.
+ *  287-293, ed. A. Glassner, Academic Press, 1990.
+ *  Rather than setting up a fixed partitioning of the color
+ *  space ab initio, as we do here, they allow the octree to be
+ *  progressively truncated as new pixels are added.  They
+ *  need to set up some data structures that are traversed
+ *  with the addition of each 24 bit pixel, in order to decide
+ *  either 1) in which cluster (sub-branch of the octree to put
+ *  the pixel, or 2 whether to truncate the octree further
+ *  to place the pixel in an existing cluster, or 3 which
+ *  two existing clusters should be merged so that the pixel
+ *  can be left to start a truncated leaf of the octree.  Such dynamic
+ *  truncation is considerably more complicated, and Gervautz et
+ *  al. did not explain how they did it in anywhere near the
+ *  detail required to check their implementation.
+ *
+ *  The simple method in pixFixedOctcubeQuant256 is very
+ *  fast, and with dithering the results are good, but you
+ *  can do better if the color clusters are selected adaptively
+ *  from the image.  We want a method that makes much better
+ *  use of color samples in regions of color space with high
+ *  pixel density, while also fairly representing small numbers
+ *  of color pixels in low density regions.  Such adaptation
+ *  requires two passes through the image: the first for generating
+ *  the pruned tree of color cubes and the second for computing the index
+ *  into the color table for each pixel.
+ *
+ *  A relatively simple adaptive method is pixOctreeQuantByPopulation.
+ *  That function first determines if the image has very few colors,
+ *  and, if so, quantizes to those colors.  If there are more than
+ *  256 colors, it generates a histogram of octcube leaf occupancy
+ *  at level 4, chooses the 192 most populated such leaves as
+ *  the first 192 colors, and sets the remaining 64 colors to the
+ *  residual average pixel values in each of the 64 level 2 octcubes.
+ *  This is a bit faster than pixOctreeColorQuant, and does very
+ *  well without dithering, but for most images with dithering it
+ *  is clearly inferior.
+ *
+ *  We now describe pixOctreeColorQuant.  The first pass is done
+ *  on a subsampled image, because we do not need to use all the
+ *  pixels in the image to generate the tree.  Subsampling
+ *  down to 0.25 1/16 of the pixels makes the program run
+ *  about 1.3 times faster.
+ *
+ *  Instead of dividing the color space into 256 equal-sized
+ *  regions, we initially divide it into 2^12 or 2^15 or 2^18
+ *  equal-sized octcubes.  Suppose we choose to use 2^18 octcubes.
+ *  This gives us 6 octree levels.  We then prune back,
+ *  starting from level 6.  For every cube at level 6, there
+ *  are 8 cubes at level 5.  Call the operation of putting a
+ *  cube aside as a color table entry CTE a "saving."
+ *  We use a in general level-dependent threshold, and save
+ *  those level 6 cubes that are above threshold.
+ *  The rest are combined into the containing level 5 cube.
+ *  If between 1 and 7 level 6 cubes within a level 5
+ *  cube have been saved by thresholding, then the remaining
+ *  level 6 cubes in that level 5 cube are automatically
+ *  saved as well, without applying a threshold.  This greatly
+ *  simplifies both the description of the CTEs and the later
+ *  classification of each pixel as belonging to a CTE.
+ *  This procedure is iterated through every cube, starting at
+ *  level 5, and then 4, 3, and 2, successively.  The result is that
+ *  each CTE contains the entirety of a set of from 1 to 7 cubes
+ *  from a given level that all belong to a single cube at the
+ *  level above.   We classify the CTEs in terms of the
+ *  condition in which they are made as either being "threshold"
+ *  or "residual."  They are "threshold" CTEs if no subcubes
+ *  are CTEs that is, they contain every pixel within the cube
+ *  and the number of pixels exceeds the threshold for making
+ *  a CTE.  They are "residual" CTEs if at least one but not more
+ *  than 7 of the subcubes have already been determined to be CTEs;
+ *  this happens automatically -- no threshold is applied.
+ *  If all 8 subcubes are determined to be CTEs, the cube is
+ *  marked as having all pixels accounted for 'bleaf' = 1 but
+ *  is not saved as a CTE.
+ *
+ *  We stop the pruning at level 2, at which there are 64
+ *  sub-cubes.  Any pixels not already claimed in a CTE are
+ *  put in these cubes.
+ *
+ *  As the cubes are saved as color samples in the color table,
+ *  the number of remaining pixels P and the number of
+ *  remaining colors in the color table N are recomputed,
+ *  along with the average number of pixels P/N ppc to go in
+ *  each of the remaining colors.  This running average number is
+ *  used to set the threshold at the current level.
+ *
+ *  Because we are going to very small cubes at levels 6 or 5,
+ *  and will dither the colors for errors, it is not necessary
+ *  to compute the color center of each cluster; we can simply
+ *  use the center of the cube.  This gives us a minimax error
+ *  condition: the maximum error is half the width of the
+ *  level 2 cubes -- 32 color values out of 256 -- for each color
+ *  sample.  In practice, most of the pixels will be very much
+ *  closer to the center of their cells.  And with dithering,
+ *  the average pixel color in a small region will be closer still.
+ *  Thus with the octree quantizer, we are able to capture
+ *  regions of high color pdf probability density function in small
+ *  but accurate CTEs, and to have only a small number of pixels
+ *  that end up a significant distance with a guaranteed maximum
+ *  from their true color.
+ *
+ *  How should the threshold factor vary?  Threshold factors
+ *  are required for levels 2, 3, 4 and 5 in the pruning stage.
+ *  The threshold for level 5 is actually applied to cubes at
+ *  level 6, etc.  From various experiments, it appears that
+ *  the results do not vary appreciably for threshold values near 1.0.
+ *  If you want more colors in smaller cubes, the threshold
+ *  factors can be set lower than 1.0 for cubes at levels 4 and 5.
+ *  However, if the factor is set much lower than 1.0 for
+ *  levels 2 and 3, we can easily run out of colors.
+ *  We put aside 64 colors in the calculation of the threshold
+ *  values, because we must have 64 color centers at level 2,
+ *  that will have very few pixels in most of them.
+ *  If we reduce the factor for level 5 to 0.4, this will
+ *  generate many level 6 CTEs, and consequently
+ *  many residual cells will be formed up from those leaves,
+ *  resulting in the possibility of running out of colors.
+ *  Remember, the residual CTEs are mandatory, and are formed
+ *  without using the threshold, regardless of the number of
+ *  pixels that are absorbed.
+ *
+ *  The implementation logically has four parts:
+ *
+ *       1 accumulation into small, fixed cells
+ *       2 pruning back into selected CTE cubes
+ *       3 organizing the CTEs for fast search to find
+ *           the CTE to which any image pixel belongs
+ *       4 doing a second scan to code the image pixels by CTE
+ *
+ *  Step 1 is straightforward; we use 2^15 cells.
+ *
+ *  We've already discussed how the pruning step 2 will be performed.
+ *
+ *  Steps 3) and (4 are related, in that the organization
+ *  used by step 3 determines how the search actually
+ *  takes place for each pixel in step 4.
+ *
+ *  There are many ways to do step 3.  Let's explore a few.
+ *
+ *  a The simplest is to order the cubes from highest occupancy
+ *      to lowest, and traverse the list looking for the deepest
+ *      match.  To make this more efficient, so that we know when
+ *      to stop looking, any cube that has separate CTE subcubes
+ *      would be marked as such, so that we know when we hit a
+ *      true leaf.
+ *
+ *  b Alternatively, we can order the cubes by highest
+ *      occupancy separately each level, and work upward,
+ *      starting at level 5, so that when we find a match we
+ *      know that it will be correct.
+ *
+ *  c Another approach would be to order the cubes by
+ *      "address" and use a hash table to find the cube
+ *      corresponding to a pixel color.  I don't know how to
+ *      do this with a variable length address, as each CTE
+ *      will have 3*n bits, where n is the level.
+ *
+ *  d Another approach entirely is to put the CTE cubes into
+ *      a tree, in such a way that starting from the root, and
+ *      using 3 bits of address at a time, the correct branch of
+ *      each octree can be taken until a leaf is found.  Because
+ *      a given cube can be both a leaf and also have branches
+ *      going to sub-cubes, the search stops only when no
+ *      marked subcubes have addresses that match the given pixel.
+ *
+ *      In the tree method, we can start with a dense infrastructure,
+ *      and place the leaves corresponding to the N colors
+ *      in the tree, or we can grow from the root only those
+ *      branches that end directly on leaves.
+ *
+ *  What we do here is to take approach d, and implement the tree
+ *  "virtually", as a set of arrays, one array for each level
+ *  of the tree.   Initially we start at level 5, an array with
+ *  2^15 cubes, each with 8 subcubes.  We then build nodes at
+ *  levels closer to the root; at level 4 there are 2^12 nodes
+ *  each with 8 subcubes; etc.  Using these arrays has
+ *  several advantages:
+ *
+ *     ~  We don't need to keep track of links between cubes
+ *        and subcubes, because we can use the canonical
+ *        addressing on the cell arrays directly to determine
+ *        which nodes are parent cubes and which are sub-cubes.
+ *
+ *     ~  We can prune directly on this tree
+ *
+ *     ~  We can navigate the pruned tree quickly to classify
+ *        each pixel in the image.
+ *
+ *  Canonical addressing guarantees that the i-th node at level k
+ *  has 8 subnodes given by the 8*i ... 8*i+7 nodes at level k+1.
+ *
+ *  The pruning step works as follows.  We go from the lowest
+ *  level up.  At each level, the threshold is found from the
+ *  product of a factor near 1.0 and the ratio of unmarked pixels
+ *  to remaining colors minus the 64.  We march through
+ *  the space, sequentially considering a cube and its 8 subcubes.
+ *  We first check those subcubes that are not already
+ *  marked as CTE to see if any are above threshold, and if so,
+ *  generate a CTE and mark them as such.
+ *  We then determine if any of the subcubes have been marked.
+ *  If so, and there are subcubes that are not marked,
+ *  we generate a CTE for the cube from the remaining unmarked
+ *  subcubes; this is mandatory and does not depend on how many
+ *  pixels are in the set of subcubes.  If none of the subcubes
+ *  are marked, we aggregate their pixels into the cube
+ *  containing them, but do not mark it as a CTE; that
+ *  will be determined when iterating through the next level up.
+ *
+ *  When all the pixels in a cube are accounted for in one or more
+ *  colors, we set the boolean 'bleaf' to true.  This is the
+ *  flag used to mark the cubes in the pruning step.  If a cube
+ *  is marked, and all 8 subcubes are marked, then it is not
+ *  itself given a CTE because all pixels have already been
+ *  accounted for.
+ *
+ *  Note that the pruning of the tree and labelling of the CTEs
+ *  step 2 accomplishes step 3 implicitly, because the marked
+ *  and pruned tree is ready for use in labelling each pixel
+ *  in step 4.  We now, for every pixel in the image, traverse
+ *  the tree from the root, looking for the lowest cube that is a leaf.
+ *  At each level we have a cube and subcube.  If we reach a subcube
+ *  leaf that is marked 0, we know that the color is stored in the
+ *  cube above, and we've found the CTE.  Otherwise, the subcube
+ *  leaf is marked 1.  If we're at the last level, we've reached
+ *  the final leaf and must use it.  Otherwise, continue the
+ *  process at the next level down.
+ *
+ *  For robustness, efficiency and high quality output, we do the following:
+ *
+ *  (1) Measure the color content of the image.  If there is very little
+ *      color, quantize in grayscale.
+ *  (2) For efficiency, build the octree with a subsampled image if the
+ *      image is larger than some threshold size.
+ *  (3) Reserve an extra set of colors to prevent running out of colors
+ *      when pruning the octree; specifically, during the assignment
+ *      of those level 2 cells out of the 64 that have unassigned
+ *      pixels.  The problem of running out is more likely to happen
+ *      with small images, because the estimation we use for the
+ *      number of pixels available is not accurate.
+ *  (4) In the unlikely event that we run out of colors, the dithered
+ *      image can be very poor.  As this would only happen with very
+ *      small images, and dithering is not particularly noticeable with
+ *      such images, turn it off.
+ * 
+ */ +PIX * +pixOctreeColorQuant(PIX *pixs, + l_int32 colors, + l_int32 ditherflag) +{ + PROCNAME("pixOctreeColorQuant"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (colors < 128 || colors > 240) /* further restricted */ + return (PIX *)ERROR_PTR("colors must be in [128, 240]", procName, NULL); + + return pixOctreeColorQuantGeneral(pixs, colors, ditherflag, 0.01, 0.01); +} + + +/*! + * \brief pixOctreeColorQuantGeneral() + * + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] colors in colormap; some number in range [128 ... 240]; + * the actual number of colors used will be smaller + * \param[in] ditherflag 1 to dither, 0 otherwise + * \param[in] validthresh minimum fraction of pixels neither near white + * nor black, required for color quantization; + * typically ~0.01, but smaller for images that have + * color but are nearly all white + * \param[in] colorthresh minimum fraction of pixels with color that are + * not near white or black, that are required + * for color quantization; typ. ~0.01, but smaller + * for images that have color along with a + * significant fraction of gray + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) The parameters %validthresh and %colorthresh are used to
+ *          determine if color quantization should be used on an image,
+ *          or whether, instead, it should be quantized in grayscale.
+ *          If the image has very few non-white and non-black pixels, or
+ *          if those pixels that are non-white and non-black are all
+ *          very close to either white or black, it is usually better
+ *          to treat the color as accidental and to quantize the image
+ *          to gray only.  These parameters are useful if you know
+ *          something a priori about the image.  Perhaps you know that
+ *          there is only a very small fraction of color pixels, but they're
+ *          important to preserve; then you want to use a smaller value for
+ *          these parameters.  To disable conversion to gray and force
+ *          color quantization, use %validthresh = 0.0 and %colorthresh = 0.0.
+ *      (2) See pixOctreeColorQuant() for algorithmic and implementation
+ *          details.  This function has a more general interface.
+ *      (3) See pixColorFraction() for computing the fraction of pixels
+ *          that are neither white nor black, and the fraction of those
+ *          pixels that have little color.  From the documentation there:
+ *             If pixfract is very small, there are few pixels that are
+ *             neither black nor white.  If colorfract is very small,
+ *             the pixels that are neither black nor white have very
+ *             little color content.  The product 'pixfract * colorfract'
+ *             gives the fraction of pixels with significant color content.
+ *          We test against the product %validthresh * %colorthresh
+ *          to find color in images that have either very few
+ *          intermediate gray pixels or that have many such gray pixels.
+ * 
+ */ +PIX * +pixOctreeColorQuantGeneral(PIX *pixs, + l_int32 colors, + l_int32 ditherflag, + l_float32 validthresh, + l_float32 colorthresh) +{ +l_int32 w, h, minside, factor, index, rval, gval, bval; +l_float32 scalefactor; +l_float32 pixfract; /* fraction neither near white nor black */ +l_float32 colorfract; /* fraction with color of the pixfract population */ +CQCELL ***cqcaa; +PIX *pixd, *pixsub; +PIXCMAP *cmap; + + PROCNAME("pixOctreeColorQuantGeneral"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (colors < 128 || colors > 240) + return (PIX *)ERROR_PTR("colors must be in [128, 240]", procName, NULL); + + /* Determine if the image has sufficient color content for + * octree quantization, based on the input thresholds. + * If pixfract << 1, most pixels are close to black or white. + * If colorfract << 1, the pixels that are not near + * black or white have very little color. + * If with insufficient color, quantize with a grayscale colormap. */ + pixGetDimensions(pixs, &w, &h, NULL); + if (validthresh > 0.0 && colorthresh > 0.0) { + minside = L_MIN(w, h); + factor = L_MAX(1, minside / 400); + pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); + if (pixfract * colorfract < validthresh * colorthresh) { + L_INFO("\n Pixel fraction neither white nor black = %6.3f" + "\n Color fraction of those pixels = %6.3f" + "\n Quantizing to 8 bpp gray\n", + procName, pixfract, colorfract); + return pixConvertTo8(pixs, 1); + } + } else { + L_INFO("\n Process in color by default\n", procName); + } + + /* Conditionally subsample to speed up the first pass */ + if (w > TreeGenWidth) { + scalefactor = (l_float32)TreeGenWidth / (l_float32)w; + pixsub = pixScaleBySampling(pixs, scalefactor, scalefactor); + } else { + pixsub = pixClone(pixs); + } + + /* Drop the number of requested colors if image is very small */ + if (w < MinDitherSize && h < MinDitherSize) + colors = L_MIN(colors, 220); + + /* Make the pruned octree */ + cqcaa = octreeGenerateAndPrune(pixsub, colors, CqReservedColors, &cmap); + if (!cqcaa) { + pixDestroy(&pixsub); + return (PIX *)ERROR_PTR("tree not made", procName, NULL); + } +#if DEBUG_COLORQUANT + L_INFO(" Colors requested = %d\n", procName, colors); + L_INFO(" Actual colors = %d\n", procName, cmap->n); +#endif /* DEBUG_COLORQUANT */ + + /* Do not dither if image is very small */ + if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { + L_INFO("Small image: dithering turned off\n", procName); + ditherflag = 0; + } + + /* Traverse tree from root, looking for lowest cube + * that is a leaf, and set dest pix value to its + * colortable index */ + if ((pixd = pixOctreeQuantizePixels(pixs, cqcaa, ditherflag)) == NULL) { + pixDestroy(&pixsub); + cqcellTreeDestroy(&cqcaa); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + /* Attach colormap and copy res */ + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Force darkest color to black if each component <= 4 */ + pixcmapGetRankIntensity(cmap, 0.0, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval < 5 && gval < 5 && bval < 5) + pixcmapResetColor(cmap, index, 0, 0, 0); + + /* Force lightest color to white if each component >= 252 */ + pixcmapGetRankIntensity(cmap, 1.0, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval > 251 && gval > 251 && bval > 251) + pixcmapResetColor(cmap, index, 255, 255, 255); + + cqcellTreeDestroy(&cqcaa); + pixDestroy(&pixsub); + return pixd; +} + + +/*! + * \brief octreeGenerateAndPrune() + * + * \param[in] pixs + * \param[in] colors number of colors to use between 128 and 256 + * \param[in] reservedcolors number of reserved colors + * \param[out] pcmap colormap returned + * \return octree, colormap and number of colors used, or NULL + * on error + * + *
+ * Notes:
+ *      (1) The number of colors in the cmap may differ from the number
+ *          of colors requested, but it will not be larger than 256
+ * 
+ */ +static CQCELL *** +octreeGenerateAndPrune(PIX *pixs, + l_int32 colors, + l_int32 reservedcolors, + PIXCMAP **pcmap) +{ +l_int32 rval, gval, bval, cindex; +l_int32 level, ncells, octindex; +l_int32 w, h, wpls; +l_int32 i, j, isub; +l_int32 npix; /* number of remaining pixels to be assigned */ +l_int32 ncolor; /* number of remaining color cells to be used */ +l_int32 ppc; /* ave number of pixels left for each color cell */ +l_int32 rv, gv, bv; +l_float32 thresholdFactor[] = {0.01f, 0.01f, 1.0f, 1.0f, 1.0f, 1.0f}; +l_float32 thresh; /* factor of ppc for this level */ +l_uint32 *datas, *lines; +l_uint32 *rtab, *gtab, *btab; +CQCELL ***cqcaa; /* one array for each octree level */ +CQCELL **cqca, **cqcasub; +CQCELL *cqc, *cqcsub; +PIXCMAP *cmap; +NUMA *nat; /* accumulates levels for threshold cells */ +NUMA *nar; /* accumulates levels for residual cells */ + + PROCNAME("octreeGenerateAndPrune"); + + if (!pixs) + return (CQCELL ***)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (CQCELL ***)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (colors < 128 || colors > 256) + return (CQCELL ***)ERROR_PTR("colors not in [128,256]", procName, NULL); + if (!pcmap) + return (CQCELL ***)ERROR_PTR("&cmap not defined", procName, NULL); + + if ((cqcaa = cqcellTreeCreate()) == NULL) + return (CQCELL ***)ERROR_PTR("cqcaa not made", procName, NULL); + + /* Make the canonical index tables */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(CqNLevels, &rtab, >ab, &btab); + + /* Generate an 8 bpp cmap (max size 256) */ + cmap = pixcmapCreate(8); + *pcmap = cmap; + + pixGetDimensions(pixs, &w, &h, NULL); + npix = w * h; /* initialize to all pixels */ + ncolor = colors - reservedcolors - ExtraReservedColors; + ppc = npix / ncolor; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Accumulate the centers of each cluster at level CqNLevels */ + ncells = 1 << (3 * CqNLevels); + cqca = cqcaa[CqNLevels]; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + cqc = cqca[octindex]; + cqc->n++; + } + } + + /* Arrays for storing statistics */ + nat = numaCreate(0); + nar = numaCreate(0); + + /* Prune back from the lowest level and generate the colormap */ + for (level = CqNLevels - 1; level >= 2; level--) { + thresh = thresholdFactor[level]; + cqca = cqcaa[level]; + cqcasub = cqcaa[level + 1]; + ncells = 1 << (3 * level); + for (i = 0; i < ncells; i++) { /* i is octindex at level */ + cqc = cqca[i]; + for (j = 0; j < 8; j++) { /* check all subnodes */ + isub = 8 * i + j; /* isub is octindex at level+1 */ + cqcsub = cqcasub[isub]; + if (cqcsub->bleaf == 1) { /* already a leaf? */ + cqc->nleaves++; /* count the subcube leaves */ + continue; + } + if (cqcsub->n >= thresh * ppc) { /* make it a true leaf? */ + cqcsub->bleaf = 1; + if (cmap->n < 256) { + cqcsub->index = cmap->n; /* assign the color index */ + getRGBFromOctcube(isub, level + 1, &rv, &gv, &bv); + pixcmapAddColor(cmap, rv, gv, bv); +#if 1 /* save values */ + cqcsub->rc = rv; + cqcsub->gc = gv; + cqcsub->bc = bv; +#endif + } else { + /* This doesn't seem to happen. Do something. */ + L_ERROR("assigning pixels to wrong color\n", procName); + pixcmapGetNearestIndex(cmap, 128, 128, 128, &cindex); + cqcsub->index = cindex; /* assign to the nearest */ + pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); + cqcsub->rc = rval; + cqcsub->gc = gval; + cqcsub->bc = bval; + } + cqc->nleaves++; + npix -= cqcsub->n; + ncolor--; + if (ncolor > 0) + ppc = npix / ncolor; + else if (ncolor + reservedcolors > 0) + ppc = npix / (ncolor + reservedcolors); + else + ppc = 1000000; /* make it big */ + numaAddNumber(nat, level + 1); + +#if DEBUG_OCTCUBE_CMAP + fprintf(stderr, "Exceeds threshold: colors used = %d, colors remaining = %d\n", + cmap->n, ncolor + reservedcolors); + fprintf(stderr, " cell with %d pixels, npix = %d, ppc = %d\n", + cqcsub->n, npix, ppc); + fprintf(stderr, " index = %d, level = %d, subindex = %d\n", + i, level, j); + fprintf(stderr, " rv = %d, gv = %d, bv = %d\n", rv, gv, bv); +#endif /* DEBUG_OCTCUBE_CMAP */ + + } + } + if (cqc->nleaves > 0 || level == 2) { /* make the cube a leaf now */ + cqc->bleaf = 1; + if (cqc->nleaves < 8) { /* residual CTE cube: acquire the + * remaining pixels */ + for (j = 0; j < 8; j++) { /* check all subnodes */ + isub = 8 * i + j; + cqcsub = cqcasub[isub]; + if (cqcsub->bleaf == 0) /* absorb */ + cqc->n += cqcsub->n; + } + if (cmap->n < 256) { + cqc->index = cmap->n; /* assign the color index */ + getRGBFromOctcube(i, level, &rv, &gv, &bv); + pixcmapAddColor(cmap, rv, gv, bv); +#if 1 /* save values */ + cqc->rc = rv; + cqc->gc = gv; + cqc->bc = bv; +#endif + } else { + L_WARNING("possibly assigned pixels to wrong color\n", + procName); + /* This is very bad. It will only cause trouble + * with dithering, and we try to avoid it with + * ExtraReservedColors. */ + pixcmapGetNearestIndex(cmap, rv, gv, bv, &cindex); + cqc->index = cindex; /* assign to the nearest */ + pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); + cqc->rc = rval; + cqc->gc = gval; + cqc->bc = bval; + } + npix -= cqc->n; + ncolor--; + if (ncolor > 0) + ppc = npix / ncolor; + else if (ncolor + reservedcolors > 0) + ppc = npix / (ncolor + reservedcolors); + else + ppc = 1000000; /* make it big */ + numaAddNumber(nar, level); + +#if DEBUG_OCTCUBE_CMAP + fprintf(stderr, "By remainder: colors used = %d, colors remaining = %d\n", + cmap->n, ncolor + reservedcolors); + fprintf(stderr, " cell with %d pixels, npix = %d, ppc = %d\n", + cqc->n, npix, ppc); + fprintf(stderr, " index = %d, level = %d\n", i, level); + fprintf(stderr, " rv = %d, gv = %d, bv = %d\n", rv, gv, bv); +#endif /* DEBUG_OCTCUBE_CMAP */ + + } + } else { /* absorb all the subpixels but don't make it a leaf */ + for (j = 0; j < 8; j++) { /* absorb from all subnodes */ + isub = 8 * i + j; + cqcsub = cqcasub[isub]; + cqc->n += cqcsub->n; + } + } + } + } + +#if PRINT_OCTCUBE_STATS +{ +l_int32 tc[] = {0, 0, 0, 0, 0, 0, 0}; +l_int32 rc[] = {0, 0, 0, 0, 0, 0, 0}; +l_int32 nt, nr, ival; + + nt = numaGetCount(nat); + nr = numaGetCount(nar); + for (i = 0; i < nt; i++) { + numaGetIValue(nat, i, &ival); + tc[ival]++; + } + for (i = 0; i < nr; i++) { + numaGetIValue(nar, i, &ival); + rc[ival]++; + } + fprintf(stderr, " Threshold cells formed: %d\n", nt); + for (i = 1; i < CqNLevels + 1; i++) + fprintf(stderr, " level %d: %d\n", i, tc[i]); + fprintf(stderr, "\n Residual cells formed: %d\n", nr); + for (i = 0; i < CqNLevels ; i++) + fprintf(stderr, " level %d: %d\n", i, rc[i]); +} +#endif /* PRINT_OCTCUBE_STATS */ + + numaDestroy(&nat); + numaDestroy(&nar); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + + return cqcaa; +} + + +/*! + * \brief pixOctreeQuantizePixels() + * + * \param[in] pixs 32 bpp + * \param[in] cqcaa octree in array format + * \param[in] ditherflag 1 for dithering, 0 for no dithering + * \return pixd or NULL on error + * + *
+ * Notes:
+ *      (1) This routine doesn't need to use the CTEs (colormap
+ *          table entries) because the color indices are embedded
+ *          in the octree.  Thus, the calling program must make
+ *          and attach the colormap to pixd after it is returned.
+ *      (2) Dithering is performed in integers, effectively rounding
+ *          to 1/8 sample increment.  The data in the integer buffers is
+ *          64 times the sample values.  The 'dif' is 8 times the
+ *          sample values, and this spread, multiplied by 8, to the
+ *          integer buffers.  Because the dif is truncated to an
+ *          integer, the dither is accurate to 1/8 of a sample increment,
+ *          or 1/2048 of the color range.
+ * 
+ */ +static PIX * +pixOctreeQuantizePixels(PIX *pixs, + CQCELL ***cqcaa, + l_int32 ditherflag) +{ +l_uint8 *bufu8r, *bufu8g, *bufu8b; +l_int32 rval, gval, bval; +l_int32 octindex, index; +l_int32 val1, val2, val3, dif; +l_int32 w, h, wpls, wpld, i, j, success; +l_int32 rc, gc, bc; +l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixOctreeQuantizePixels"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (!cqcaa) + return (PIX *)ERROR_PTR("cqcaa not defined", procName, NULL); + + /* Make output 8 bpp palette image */ + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Make the canonical index tables */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(CqNLevels, &rtab, >ab, &btab); + + /* Traverse tree from root, looking for lowest cube + * that is a leaf, and set dest pix to its + * colortable index value. The results are far + * better when dithering to get a more accurate + * average color. */ + if (ditherflag == 0) { /* no dithering */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); + SET_DATA_BYTE(lined, j, index); + } + } + } else { /* Dither */ + success = TRUE; + bufu8r = bufu8g = bufu8b = NULL; + buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; + bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || + !buf1b || !buf2r || !buf2g || !buf2b) { + L_ERROR("buffer not made\n", procName); + success = FALSE; + goto buffer_cleanup; + } + + /* Start by priming buf2; line 1 is above line 2 */ + pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + for (i = 0; i < h - 1; i++) { + /* Swap data 2 --> 1, and read in new line 2 */ + memcpy(buf1r, buf2r, 4 * w); + memcpy(buf1g, buf2g, 4 * w); + memcpy(buf1b, buf2b, 4 * w); + pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + /* Dither */ + lined = datad + i * wpld; + for (j = 0; j < w - 1; j++) { + rval = buf1r[j] / 64; + gval = buf1g[j] / 64; + bval = buf1b[j] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); + SET_DATA_BYTE(lined, j, index); + + dif = buf1r[j] / 8 - 8 * rc; + if (dif != 0) { + val1 = buf1r[j + 1] + 3 * dif; + val2 = buf2r[j] + 3 * dif; + val3 = buf2r[j + 1] + 2 * dif; + if (dif > 0) { + buf1r[j + 1] = L_MIN(16383, val1); + buf2r[j] = L_MIN(16383, val2); + buf2r[j + 1] = L_MIN(16383, val3); + } else { + buf1r[j + 1] = L_MAX(0, val1); + buf2r[j] = L_MAX(0, val2); + buf2r[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1g[j] / 8 - 8 * gc; + if (dif != 0) { + val1 = buf1g[j + 1] + 3 * dif; + val2 = buf2g[j] + 3 * dif; + val3 = buf2g[j + 1] + 2 * dif; + if (dif > 0) { + buf1g[j + 1] = L_MIN(16383, val1); + buf2g[j] = L_MIN(16383, val2); + buf2g[j + 1] = L_MIN(16383, val3); + } else { + buf1g[j + 1] = L_MAX(0, val1); + buf2g[j] = L_MAX(0, val2); + buf2g[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1b[j] / 8 - 8 * bc; + if (dif != 0) { + val1 = buf1b[j + 1] + 3 * dif; + val2 = buf2b[j] + 3 * dif; + val3 = buf2b[j + 1] + 2 * dif; + if (dif > 0) { + buf1b[j + 1] = L_MIN(16383, val1); + buf2b[j] = L_MIN(16383, val2); + buf2b[j + 1] = L_MIN(16383, val3); + } else { + buf1b[j + 1] = L_MAX(0, val1); + buf2b[j] = L_MAX(0, val2); + buf2b[j + 1] = L_MAX(0, val3); + } + } + } + + /* Get last pixel in row; no downward propagation */ + rval = buf1r[w - 1] / 64; + gval = buf1g[w - 1] / 64; + bval = buf1b[w - 1] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); + SET_DATA_BYTE(lined, w - 1, index); + } + + /* Get last row of pixels; no leftward propagation */ + lined = datad + (h - 1) * wpld; + for (j = 0; j < w; j++) { + rval = buf2r[j] / 64; + gval = buf2g[j] / 64; + bval = buf2b[j] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); + SET_DATA_BYTE(lined, j, index); + } + +buffer_cleanup: + LEPT_FREE(bufu8r); + LEPT_FREE(bufu8g); + LEPT_FREE(bufu8b); + LEPT_FREE(buf1r); + LEPT_FREE(buf1g); + LEPT_FREE(buf1b); + LEPT_FREE(buf2r); + LEPT_FREE(buf2g); + LEPT_FREE(buf2b); + if (!success) pixDestroy(&pixd); + } + + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*! + * \brief octreeFindColorCell() + * + * \param[in] octindex + * \param[in] cqcaa + * \param[out] pindex index of CTE; returned to set pixel value + * \param[out] prval of CTE + * \param[out] pgval of CTE + * \param[out] pbval of CTE + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) As this is in inner loop, we don't check input pointers!
+ *      (2) This traverses from the root (well, actually from level 2,
+ *          because the level 2 cubes are the largest CTE cubes),
+ *          and finds the index number of the cell and the color values,
+ *          which can be used either directly or in a (Floyd-Steinberg)
+ *          error-diffusion dithering algorithm.
+ * 
+ */ +static l_int32 +octreeFindColorCell(l_int32 octindex, + CQCELL ***cqcaa, + l_int32 *pindex, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 level; +l_int32 baseindex, subindex; +CQCELL *cqc, *cqcsub; + + /* Use rgb values stored in the cubes; a little faster */ + for (level = 2; level < CqNLevels; level++) { + getOctcubeIndices(octindex, level, &baseindex, &subindex); + cqc = cqcaa[level][baseindex]; + cqcsub = cqcaa[level + 1][subindex]; + if (cqcsub->bleaf == 0) { /* use cell at level above */ + *pindex = cqc->index; + *prval = cqc->rc; + *pgval = cqc->gc; + *pbval = cqc->bc; + break; + } else if (level == CqNLevels - 1) { /* reached the bottom */ + *pindex = cqcsub->index; + *prval = cqcsub->rc; + *pgval = cqcsub->gc; + *pbval = cqcsub->bc; + break; + } + } + +#if 0 + /* Generate rgb values for each cube on the fly; slower */ + for (level = 2; level < CqNLevels; level++) { + l_int32 rv, gv, bv; + getOctcubeIndices(octindex, level, &baseindex, &subindex); + cqc = cqcaa[level][baseindex]; + cqcsub = cqcaa[level + 1][subindex]; + if (cqcsub->bleaf == 0) { /* use cell at level above */ + getRGBFromOctcube(baseindex, level, &rv, &gv, &bv); + *pindex = cqc->index; + *prval = rv; + *pgval = gv; + *pbval = bv; + break; + } else if (level == CqNLevels - 1) { /* reached the bottom */ + getRGBFromOctcube(subindex, level + 1, &rv, &gv, &bv); + *pindex = cqcsub->index; + *prval = rv; + *pgval = gv; + *pbval = bv; + break; + } + } +#endif + + return 0; +} + + + +/*------------------------------------------------------------------* + * Helper cqcell functions * + *------------------------------------------------------------------*/ +/*! + * \brief cqcellTreeCreate() + * + * \return cqcell array tree + */ +static CQCELL *** +cqcellTreeCreate(void) +{ +l_int32 level, ncells, i; +CQCELL ***cqcaa; +CQCELL **cqca; /* one array for each octree level */ + + PROCNAME("cqcellTreeCreate"); + + /* Make array of accumulation cell arrays from levels 1 to 5 */ + if ((cqcaa = (CQCELL ***)LEPT_CALLOC(CqNLevels + 1, sizeof(CQCELL **))) + == NULL) + return (CQCELL ***)ERROR_PTR("cqcaa not made", procName, NULL); + for (level = 0; level <= CqNLevels; level++) { + ncells = 1 << (3 * level); + if ((cqca = (CQCELL **)LEPT_CALLOC(ncells, sizeof(CQCELL *))) == NULL) { + cqcellTreeDestroy(&cqcaa); + return (CQCELL ***)ERROR_PTR("cqca not made", procName, NULL); + } + cqcaa[level] = cqca; + for (i = 0; i < ncells; i++) { + if ((cqca[i] = (CQCELL *)LEPT_CALLOC(1, sizeof(CQCELL))) == NULL) { + cqcellTreeDestroy(&cqcaa); + return (CQCELL ***)ERROR_PTR("cqc not made", procName, NULL); + } + } + } + + return cqcaa; +} + + +/*! + * \brief cqcellTreeDestroy() + * + * \param[in,out] pcqcaa will be set to null before returning + */ +static void +cqcellTreeDestroy(CQCELL ****pcqcaa) +{ +l_int32 level, ncells, i; +CQCELL ***cqcaa; +CQCELL **cqca; + + PROCNAME("cqcellTreeDestroy"); + + if (pcqcaa == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + + if ((cqcaa = *pcqcaa) == NULL) + return; + + for (level = 0; level <= CqNLevels; level++) { + cqca = cqcaa[level]; + ncells = 1 << (3 * level); + for (i = 0; i < ncells; i++) + LEPT_FREE(cqca[i]); + LEPT_FREE(cqca); + } + LEPT_FREE(cqcaa); + *pcqcaa = NULL; + + return; +} + + + +/*------------------------------------------------------------------* + * Helper index functions * + *------------------------------------------------------------------*/ +/*! + * \brief makeRGBToIndexTables() + * + * \param[in] cqlevels can be 1, 2, 3, 4, 5 or 6 + * \param[out] prtab, pgtab, pbtab tables + * \return 0 if OK; 1 on error + * + *
+ *  Set up tables.  e.g., for cqlevels = 5, we need an integer 0 < i < 2^15:
+ *      rtab = 0  i7  0   0  i6  0   0  i5  0   0   i4  0   0   i3  0   0
+ *      gtab = 0  0   i7  0   0  i6  0   0  i5  0   0   i4  0   0   i3  0
+ *      btab = 0  0   0   i7  0  0   i6  0  0   i5  0   0   i4  0   0   i3
+ *
+ *  The tables are then used to map from rbg --> index as follows:
+ *      index = 0  r7  g7  b7  r6  g6  b6  r5  g5  b5  r4  g4  b4  r3  g3  b3
+ *
+ *    e.g., for cqlevels = 4, we map to
+ *      index = 0  0   0   0   r7  g7  b7  r6  g6  b6  r5  g5  b5  r4  g4  b4
+ *
+ *  This may look a bit strange.  The notation 'r7' means the MSBit of
+ *  the r value which has 8 bits, going down from r7 to r0.
+ *  Keep in mind that r7 is actually the r component bit for level 1 of
+ *  the octtree.  Level 1 is composed of 8 octcubes, represented by
+ *  the bits r7 g7 b7, which divide the entire color space into
+ *  8 cubes.  At level 2, each of these 8 octcubes is further divided into
+ *  8 cubes, each labeled by the second most significant bits r6 g6 b6
+ *  of the rgb color.
+ * 
+ */ +l_ok +makeRGBToIndexTables(l_int32 cqlevels, + l_uint32 **prtab, + l_uint32 **pgtab, + l_uint32 **pbtab) +{ +l_int32 i; +l_uint32 *rtab, *gtab, *btab; + + PROCNAME("makeRGBToIndexTables"); + + if (cqlevels < 1 || cqlevels > 6) + return ERROR_INT("cqlevels must be in {1,...6}", procName, 1); + if (!prtab || !pgtab || !pbtab) + return ERROR_INT("not all &tabs defined", procName, 1); + + rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + if (!rtab || !gtab || !btab) + return ERROR_INT("calloc fail for tab", procName, 1); + *prtab = rtab; + *pgtab = gtab; + *pbtab = btab; + + switch (cqlevels) + { + case 1: + for (i = 0; i < 256; i++) { + rtab[i] = (i >> 5) & 0x0004; + gtab[i] = (i >> 6) & 0x0002; + btab[i] = (i >> 7); + } + break; + case 2: + for (i = 0; i < 256; i++) { + rtab[i] = ((i >> 2) & 0x0020) | ((i >> 4) & 0x0004); + gtab[i] = ((i >> 3) & 0x0010) | ((i >> 5) & 0x0002); + btab[i] = ((i >> 4) & 0x0008) | ((i >> 6) & 0x0001); + } + break; + case 3: + for (i = 0; i < 256; i++) { + rtab[i] = ((i << 1) & 0x0100) | ((i >> 1) & 0x0020) | + ((i >> 3) & 0x0004); + gtab[i] = (i & 0x0080) | ((i >> 2) & 0x0010) | + ((i >> 4) & 0x0002); + btab[i] = ((i >> 1) & 0x0040) | ((i >> 3) & 0x0008) | + ((i >> 5) & 0x0001); + } + break; + case 4: + for (i = 0; i < 256; i++) { + rtab[i] = ((i << 4) & 0x0800) | ((i << 2) & 0x0100) | + (i & 0x0020) | ((i >> 2) & 0x0004); + gtab[i] = ((i << 3) & 0x0400) | ((i << 1) & 0x0080) | + ((i >> 1) & 0x0010) | ((i >> 3) & 0x0002); + btab[i] = ((i << 2) & 0x0200) | (i & 0x0040) | + ((i >> 2) & 0x0008) | ((i >> 4) & 0x0001); + } + break; + case 5: + for (i = 0; i < 256; i++) { + rtab[i] = ((i << 7) & 0x4000) | ((i << 5) & 0x0800) | + ((i << 3) & 0x0100) | ((i << 1) & 0x0020) | + ((i >> 1) & 0x0004); + gtab[i] = ((i << 6) & 0x2000) | ((i << 4) & 0x0400) | + ((i << 2) & 0x0080) | (i & 0x0010) | + ((i >> 2) & 0x0002); + btab[i] = ((i << 5) & 0x1000) | ((i << 3) & 0x0200) | + ((i << 1) & 0x0040) | ((i >> 1) & 0x0008) | + ((i >> 3) & 0x0001); + } + break; + case 6: + for (i = 0; i < 256; i++) { + rtab[i] = ((i << 10) & 0x20000) | ((i << 8) & 0x4000) | + ((i << 6) & 0x0800) | ((i << 4) & 0x0100) | + ((i << 2) & 0x0020) | (i & 0x0004); + gtab[i] = ((i << 9) & 0x10000) | ((i << 7) & 0x2000) | + ((i << 5) & 0x0400) | ((i << 3) & 0x0080) | + ((i << 1) & 0x0010) | ((i >> 1) & 0x0002); + btab[i] = ((i << 8) & 0x8000) | ((i << 6) & 0x1000) | + ((i << 4) & 0x0200) | ((i << 2) & 0x0040) | + (i & 0x0008) | ((i >> 2) & 0x0001); + } + break; + default: + ERROR_INT("cqlevels not in [1...6]", procName, 1); + break; + } + + return 0; +} + + +/*! + * \brief getOctcubeIndexFromRGB() + * + * \param[in] rval, gval, bval + * \param[in] rtab, gtab, btab generated with makeRGBToIndexTables() + * \param[out] pindex found index + * \return void + * + *
+ * Notes:
+ *      No error checking!
+ * 
+ */ +void +getOctcubeIndexFromRGB(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_uint32 *rtab, + l_uint32 *gtab, + l_uint32 *btab, + l_uint32 *pindex) +{ + *pindex = rtab[rval] | gtab[gval] | btab[bval]; + return; +} + + +/*! + * \brief getRGBFromOctcube() + * + * \param[in] cubeindex octcube index + * \param[in] level at which index is expressed + * \param[out] prval r val of this cube + * \param[out] pgval g val of this cube + * \param[out] pbval b val of this cube + * \return void + * + *
+ * Notes:
+ *      (1) We can consider all octcube indices to represent a
+ *          specific point in color space: namely, the location
+ *          of the 'upper-left' corner of the cube, where indices
+ *          increase down and to the right.  The upper left corner
+ *          of the color space is then 00000....
+ *      (2) The 'rgbindex' is a 24-bit representation of the location,
+ *          in octcube notation, at the center of the octcube.
+ *          To get to the center of an octcube, you choose the 111
+ *          octcube at the next lower level.
+ *      (3) For example, if the octcube index = 110101 (binary),
+ *          which is a level 2 expression, then the rgbindex
+ *          is the 24-bit representation of 110101111 (at level 3);
+ *          namely, 000110101111000000000000.  The number is padded
+ *          with 3 leading 0s (because the representation uses
+ *          only 21 bits) and 12 trailing 0s (the default for
+ *          levels 4-7, which are contained within each of the level3
+ *          octcubes.  Then the rgb values for the center of the
+ *          octcube are: rval = 11100000, gval = 10100000, bval = 01100000
+ * 
+ */ +static void +getRGBFromOctcube(l_int32 cubeindex, + l_int32 level, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 rgbindex; + + /* Bring to format in 21 bits: (r7 g7 b7 r6 g6 b6 ...) */ + /* This is valid for levels from 0 to 6 */ + rgbindex = cubeindex << (3 * (7 - level)); /* upper corner of cube */ + rgbindex |= (0x7 << (3 * (6 - level))); /* index to center of cube */ + + /* Extract separate pieces */ + *prval = ((rgbindex >> 13) & 0x80) | + ((rgbindex >> 11) & 0x40) | + ((rgbindex >> 9) & 0x20) | + ((rgbindex >> 7) & 0x10) | + ((rgbindex >> 5) & 0x08) | + ((rgbindex >> 3) & 0x04) | + ((rgbindex >> 1) & 0x02); + *pgval = ((rgbindex >> 12) & 0x80) | + ((rgbindex >> 10) & 0x40) | + ((rgbindex >> 8) & 0x20) | + ((rgbindex >> 6) & 0x10) | + ((rgbindex >> 4) & 0x08) | + ((rgbindex >> 2) & 0x04) | + (rgbindex & 0x02); + *pbval = ((rgbindex >> 11) & 0x80) | + ((rgbindex >> 9) & 0x40) | + ((rgbindex >> 7) & 0x20) | + ((rgbindex >> 5) & 0x10) | + ((rgbindex >> 3) & 0x08) | + ((rgbindex >> 1) & 0x04) | + ((rgbindex << 1) & 0x02); + + return; +} + + +/*! + * \brief getOctcubeIndices() + * + * \param[in] rgbindex + * \param[in] level octree level 0, 1, 2, 3, 4, 5 + * \param[out] pbindex base index index at the octree level + * \param[out] psindex sub index index at the next lower level + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *  for CqNLevels = 6, the full RGB index is in the form:
+ *     index = (0[13] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3 r2 g2 b2)
+ *  for CqNLevels = 5, the full RGB index is in the form:
+ *     index = (0[16] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
+ *  for CqNLevels = 4, the full RGB index is in the form:
+ *     index = (0[19] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
+ *
+ *  The base index is the index of the octcube at the level given,
+ *  whereas the sub index is the index at the next level down.
+ *
+ *  For level 0: base index = 0
+ *               sub index is the 3 bit number (r7 g7 b7)
+ *  For level 1: base index = (r7 g7 b7)
+ *               sub index = (r7 g7 b7 r6 g6 b6)
+ *  For level 2: base index = (r7 g7 b7 r6 g6 b6)
+ *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5)
+ *  For level 3: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5)
+ *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
+ *  For level 4: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4)
+ *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
+ *  For level 5: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3)
+ *               sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3
+ *                            r2 g2 b2)
+ * 
+ */ +static l_int32 +getOctcubeIndices(l_int32 rgbindex, + l_int32 level, + l_int32 *pbindex, + l_int32 *psindex) +{ + PROCNAME("getOctcubeIndex"); + + if (level < 0 || level > CqNLevels - 1) + return ERROR_INT("level must be in e.g., [0 ... 5]", procName, 1); + if (!pbindex) + return ERROR_INT("&bindex not defined", procName, 1); + if (!psindex) + return ERROR_INT("&sindex not defined", procName, 1); + + *pbindex = rgbindex >> (3 * (CqNLevels - level)); + *psindex = rgbindex >> (3 * (CqNLevels - 1 - level)); + return 0; +} + + +/*! + * \brief octcubeGetCount() + * + * \param[in] level valid values are in [1,...6]; there are 2^level + * cubes along each side of the rgb cube + * \param[out] psize 2^(3 * level) cubes in the entire rgb cube + * \return 0 if OK, 1 on error. Caller must check! + * + *
+ *     level:   1        2        3        4        5        6
+ *     size:    8       64       512     4098     32784   262272
+ * 
+ */ +static l_int32 +octcubeGetCount(l_int32 level, + l_int32 *psize) +{ + PROCNAME("octcubeGetCount"); + + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (level < 1 || level > 6) + return ERROR_INT("invalid level", procName, 1); + + *psize = 1 << (3 * level); + return 0; +} + + +/*---------------------------------------------------------------------------* + * Adaptive octree quantization based on population at a fixed level * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixOctreeQuantByPopulation() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level significant bits for each of RGB; valid for {3,4}. + * Use 0 for default (level 4; recommended + * \param[in] ditherflag 1 to dither, 0 otherwise + * \return pixd quantized to octcubes or NULL on error + * + *
+ * Notes:
+ *      (1) This color quantization method works very well without
+ *          dithering, using octcubes at two different levels:
+ *            (a) the input %level, which is either 3 or 4
+ *            (b) level 2 (64 octcubes to cover the entire color space)
+ *      (2) For best results, using %level = 4 is recommended.
+ *          Why do we provide an option for using level 3?  Because
+ *          there are 512 octcubes at level 3, and for many images
+ *          not more than 256 are filled.  As a result, on some images
+ *          a very accurate quantized representation is possible using
+ *          %level = 3.
+ *      (3) This first breaks up the color space into octcubes at the
+ *          input %level, and computes, for each octcube, the average
+ *          value of the pixels that are in it.
+ *      (4) Then there are two possible situations:
+ *            (a) If there are not more than 256 populated octcubes,
+ *                it returns a cmapped pix with those values assigned.
+ *            (b) Otherwise, it selects 192 octcubes containing the largest
+ *                number of pixels and quantizes pixels within those octcubes
+ *                to their average.  Then, to handle the residual pixels
+ *                that are not in those 192 octcubes, it generates a
+ *                level 2 octree consisting of 64 octcubes, and within
+ *                each octcube it quantizes the residual pixels to their
+ *                average within each of those level 2 octcubes.
+ *      (5) Unpopulated level 2 octcubes are represented in the colormap
+ *          by their centers.  This, of course, has no effect unless
+ *          dithering is used for the output image.
+ *      (6) The depth of pixd is the minimum required to support the
+ *          number of colors found at %level; namely, 2, 4 or 8.
+ *      (7) This function works particularly well on images such as maps,
+ *          where there are a relatively small number of well-populated
+ *          colors, but due to antialiasing and compression artifacts
+ *          there may be a large number of different colors.  This will
+ *          pull out and represent accurately the highly populated colors,
+ *          while still making a reasonable approximation for the others.
+ *      (8) The highest level of octcubes allowed is 4.  Use of higher
+ *          levels typically results in having a small fraction of
+ *          pixels in the most populated 192 octcubes.  As a result,
+ *          most of the pixels are represented at level 2, which is
+ *          not sufficiently accurate.
+ *      (9) Dithering shows artifacts on some images.  If you plan to
+ *          dither, pixOctreeColorQuant() and pixFixedOctcubeQuant256()
+ *          usually give better results.
+ * 
+ */ +PIX * +pixOctreeQuantByPopulation(PIX *pixs, + l_int32 level, + l_int32 ditherflag) +{ +l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; +l_int32 rval, gval, bval; +l_int32 *rarray, *garray, *barray, *narray, *iarray; +l_uint32 octindex, octindex2; +l_uint32 *rtab, *gtab, *btab, *rtab2, *gtab2, *btab2; +l_uint32 *lines, *lined, *datas, *datad; +L_OCTCUBE_POP *opop; +L_HEAP *lh; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixOctreeQuantByPopulation"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (level == 0) level = 4; + if (level < 3 || level > 4) + return (PIX *)ERROR_PTR("level not in {3,4}", procName, NULL); + + /* Do not dither if image is very small */ + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { + L_INFO("Small image: dithering turned off\n", procName); + ditherflag = 0; + } + + if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ + return (PIX *)ERROR_PTR("size not returned", procName, NULL); + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + + pixd = NULL; + narray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + if (!narray || !rarray || !garray || !barray) + goto array_cleanup; + + /* Place the pixels in octcube leaves. */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + narray[octindex]++; + rarray[octindex] += rval; + garray[octindex] += gval; + barray[octindex] += bval; + } + } + + /* Find the number of different colors */ + for (i = 0, ncolors = 0; i < size; i++) { + if (narray[i] > 0) + ncolors++; + } + if (ncolors <= 4) + depth = 2; + else if (ncolors <= 16) + depth = 4; + else + depth = 8; + pixd = pixCreate(w, h, depth); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + cmap = pixcmapCreate(depth); + pixSetColormap(pixd, cmap); + + /* Average the colors in each octcube leaf. */ + for (i = 0; i < size; i++) { + if (narray[i] > 0) { + rarray[i] /= narray[i]; + garray[i] /= narray[i]; + barray[i] /= narray[i]; + } + } + + /* If ncolors <= 256, finish immediately. Do not dither. + * Re-use narray to hold the colormap index + 1 */ + if (ncolors <= 256) { + for (i = 0, index = 0; i < size; i++) { + if (narray[i] > 0) { + pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); + narray[i] = index + 1; /* to avoid storing 0 */ + index++; + } + } + + /* Set the cmap indices for each pixel */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + switch (depth) + { + case 8: + SET_DATA_BYTE(lined, j, narray[octindex] - 1); + break; + case 4: + SET_DATA_QBIT(lined, j, narray[octindex] - 1); + break; + case 2: + SET_DATA_DIBIT(lined, j, narray[octindex] - 1); + break; + default: + L_WARNING("shouldn't get here\n", procName); + } + } + } + goto array_cleanup; + } + + /* More complicated. Sort by decreasing population */ + lh = lheapCreate(500, L_SORT_DECREASING); + for (i = 0; i < size; i++) { + if (narray[i] > 0) { + opop = (L_OCTCUBE_POP *)LEPT_CALLOC(1, sizeof(L_OCTCUBE_POP)); + opop->npix = (l_float32)narray[i]; + opop->index = i; + opop->rval = rarray[i]; + opop->gval = garray[i]; + opop->bval = barray[i]; + lheapAdd(lh, opop); + } + } + + /* Take the top 192. These will form the first 192 colors + * in the cmap. iarray[i] holds the index into the cmap. */ + iarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + for (i = 0; i < 192; i++) { + opop = (L_OCTCUBE_POP*)lheapRemove(lh); + if (!opop) break; + pixcmapAddColor(cmap, opop->rval, opop->gval, opop->bval); + iarray[opop->index] = i + 1; /* +1 to avoid storing 0 */ + +#if DEBUG_POP + fprintf(stderr, "i = %d, n = %6.0f, (r,g,b) = (%d %d %d)\n", + i, opop->npix, opop->rval, opop->gval, opop->bval); +#endif /* DEBUG_POP */ + + LEPT_FREE(opop); + } + + /* Make the octindex tables for level 2, and reuse rarray, etc. */ + rtab2 = gtab2 = btab2 = NULL; + makeRGBToIndexTables(2, &rtab2, >ab2, &btab2); + for (i = 0; i < 64; i++) { + narray[i] = 0; + rarray[i] = 0; + garray[i] = 0; + barray[i] = 0; + } + + /* Take the rest of the occupied octcubes, assigning the pixels + * to these new colormap indices. iarray[] is addressed + * by %level octcube indices, and it now holds the + * colormap indices for all pixels in pixs. */ + for (i = 192; i < size; i++) { + opop = (L_OCTCUBE_POP*)lheapRemove(lh); + if (!opop) break; + rval = opop->rval; + gval = opop->gval; + bval = opop->bval; + octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; + narray[octindex2] += (l_int32)opop->npix; + rarray[octindex2] += (l_int32)opop->npix * rval; + garray[octindex2] += (l_int32)opop->npix * gval; + barray[octindex2] += (l_int32)opop->npix * bval; + iarray[opop->index] = 192 + octindex2 + 1; /* +1 to avoid storing 0 */ + LEPT_FREE(opop); + } + lheapDestroy(&lh, TRUE); + + /* To span the full color space, which is necessary for dithering, + * set each iarray element whose value is still 0 at the input + * level octcube leaves (because there were no pixels in those + * octcubes) to the colormap index corresponding to its level 2 + * octcube. */ + if (ditherflag) { + for (i = 0; i < size; i++) { + if (iarray[i] == 0) { + getRGBFromOctcube(i, level, &rval, &gval, &bval); + octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; + iarray[i] = 192 + octindex2 + 1; + } + } + } + LEPT_FREE(rtab2); + LEPT_FREE(gtab2); + LEPT_FREE(btab2); + + /* Average the colors from the residuals in each level 2 octcube, + * and add these 64 values to the colormap. */ + for (i = 0; i < 64; i++) { + if (narray[i] > 0) { + rarray[i] /= narray[i]; + garray[i] /= narray[i]; + barray[i] /= narray[i]; + } else { /* no pixels in this octcube; use center value */ + getRGBFromOctcube(i, 2, &rarray[i], &garray[i], &barray[i]); + } + pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); + } + + /* Set the cmap indices for each pixel. Subtract 1 from + * the value in iarray[] because we added 1 earlier. */ + if (ditherflag == 0) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + SET_DATA_BYTE(lined, j, iarray[octindex] - 1); + } + } + } else { /* dither */ + pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, + iarray, POP_DIF_CAP); + } + +#if DEBUG_POP + for (i = 0; i < size / 16; i++) { + l_int32 j; + for (j = 0; j < 16; j++) + fprintf(stderr, "%d ", iarray[16 * i + j]); + fprintf(stderr, "\n"); + } +#endif /* DEBUG_POP */ + + LEPT_FREE(iarray); + +array_cleanup: + LEPT_FREE(narray); + LEPT_FREE(rarray); + LEPT_FREE(garray); + LEPT_FREE(barray); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + + return pixd; +} + + +/*! + * \brief pixDitherOctindexWithCmap() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixd 8 bpp cmapped + * \param[in] rtab, gtab, btab tables from rval to octindex + * \param[in] indexmap array mapping octindex to cmap index + * \param[in] difcap max allowed dither transfer; + * use 0 for infinite cap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This performs dithering to generate the colormap indices
+ *          in pixd.  The colormap has been calculated, along with
+ *          four input LUTs that together give the inverse colormapping
+ *          from RGB to colormap index.
+ *      (2) For pixOctreeQuantByPopulation(), %indexmap maps from the
+ *          standard octindex to colormap index (after subtracting 1).
+ *          The basic pixel-level function, without dithering, is:
+ *             extractRGBValues(lines[j], &rval, &gval, &bval);
+ *             octindex = rtab[rval] | gtab[gval] | btab[bval];
+ *             SET_DATA_BYTE(lined, j, indexmap[octindex] - 1);
+ *      (3) This can be used in any situation where the general
+ *          prescription for finding the colormap index from the rgb
+ *          value is precisely this:
+ *             cmapindex = indexmap[rtab[rval] | gtab[gval] | btab[bval]] - 1
+ *          For example, in pixFixedOctcubeQuant256(), we don't use
+ *          standard octcube indexing, the rtab (etc) LUTs map directly
+ *          to the colormap index, and %indexmap just compensates for
+ *          the 1-off indexing assumed to be in that table.
+ * 
+ */ +static l_int32 +pixDitherOctindexWithCmap(PIX *pixs, + PIX *pixd, + l_uint32 *rtab, + l_uint32 *gtab, + l_uint32 *btab, + l_int32 *indexmap, + l_int32 difcap) +{ +l_uint8 *bufu8r, *bufu8g, *bufu8b; +l_int32 i, j, w, h, wpld, octindex, cmapindex, success; +l_int32 rval, gval, bval, rc, gc, bc; +l_int32 dif, val1, val2, val3; +l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; +l_uint32 *datad, *lined; +PIXCMAP *cmap; + + PROCNAME("pixDitherOctindexWithCmap"); + + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs undefined or not 32 bpp", procName, 1); + if (!pixd || pixGetDepth(pixd) != 8) + return ERROR_INT("pixd undefined or not 8 bpp", procName, 1); + if ((cmap = pixGetColormap(pixd)) == NULL) + return ERROR_INT("pixd not cmapped", procName, 1); + if (!rtab || !gtab || !btab || !indexmap) + return ERROR_INT("not all 4 tables defined", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixGetWidth(pixd) != w || pixGetHeight(pixd) != h) + return ERROR_INT("pixs and pixd not same size", procName, 1); + + success = TRUE; + bufu8r = bufu8g = bufu8b = NULL; + buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; + bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || + !buf1b || !buf2r || !buf2g || !buf2b) { + L_ERROR("buffer not made\n", procName); + success = FALSE; + goto buffer_cleanup; + } + + /* Start by priming buf2; line 1 is above line 2 */ + pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h - 1; i++) { + /* Swap data 2 --> 1, and read in new line 2 */ + memcpy(buf1r, buf2r, 4 * w); + memcpy(buf1g, buf2g, 4 * w); + memcpy(buf1b, buf2b, 4 * w); + pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + /* Dither */ + lined = datad + i * wpld; + for (j = 0; j < w - 1; j++) { + rval = buf1r[j] / 64; + gval = buf1g[j] / 64; + bval = buf1b[j] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + cmapindex = indexmap[octindex] - 1; + SET_DATA_BYTE(lined, j, cmapindex); + pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); + + dif = buf1r[j] / 8 - 8 * rc; + if (difcap > 0) { + if (dif > difcap) dif = difcap; + if (dif < -difcap) dif = -difcap; + } + if (dif != 0) { + val1 = buf1r[j + 1] + 3 * dif; + val2 = buf2r[j] + 3 * dif; + val3 = buf2r[j + 1] + 2 * dif; + if (dif > 0) { + buf1r[j + 1] = L_MIN(16383, val1); + buf2r[j] = L_MIN(16383, val2); + buf2r[j + 1] = L_MIN(16383, val3); + } else { + buf1r[j + 1] = L_MAX(0, val1); + buf2r[j] = L_MAX(0, val2); + buf2r[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1g[j] / 8 - 8 * gc; + if (difcap > 0) { + if (dif > difcap) dif = difcap; + if (dif < -difcap) dif = -difcap; + } + if (dif != 0) { + val1 = buf1g[j + 1] + 3 * dif; + val2 = buf2g[j] + 3 * dif; + val3 = buf2g[j + 1] + 2 * dif; + if (dif > 0) { + buf1g[j + 1] = L_MIN(16383, val1); + buf2g[j] = L_MIN(16383, val2); + buf2g[j + 1] = L_MIN(16383, val3); + } else { + buf1g[j + 1] = L_MAX(0, val1); + buf2g[j] = L_MAX(0, val2); + buf2g[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1b[j] / 8 - 8 * bc; + if (difcap > 0) { + if (dif > difcap) dif = difcap; + if (dif < -difcap) dif = -difcap; + } + if (dif != 0) { + val1 = buf1b[j + 1] + 3 * dif; + val2 = buf2b[j] + 3 * dif; + val3 = buf2b[j + 1] + 2 * dif; + if (dif > 0) { + buf1b[j + 1] = L_MIN(16383, val1); + buf2b[j] = L_MIN(16383, val2); + buf2b[j + 1] = L_MIN(16383, val3); + } else { + buf1b[j + 1] = L_MAX(0, val1); + buf2b[j] = L_MAX(0, val2); + buf2b[j + 1] = L_MAX(0, val3); + } + } + } + + /* Get last pixel in row; no downward propagation */ + rval = buf1r[w - 1] / 64; + gval = buf1g[w - 1] / 64; + bval = buf1b[w - 1] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + cmapindex = indexmap[octindex] - 1; + SET_DATA_BYTE(lined, w - 1, cmapindex); + } + + /* Get last row of pixels; no leftward propagation */ + lined = datad + (h - 1) * wpld; + for (j = 0; j < w; j++) { + rval = buf2r[j] / 64; + gval = buf2g[j] / 64; + bval = buf2b[j] / 64; + octindex = rtab[rval] | gtab[gval] | btab[bval]; + cmapindex = indexmap[octindex] - 1; + SET_DATA_BYTE(lined, j, cmapindex); + } + +buffer_cleanup: + LEPT_FREE(bufu8r); + LEPT_FREE(bufu8g); + LEPT_FREE(bufu8b); + LEPT_FREE(buf1r); + LEPT_FREE(buf1g); + LEPT_FREE(buf1b); + LEPT_FREE(buf2r); + LEPT_FREE(buf2g); + LEPT_FREE(buf2b); + + return (success) ? 0 : 1; +} + + +/*---------------------------------------------------------------------------* + * Adaptive octree quantization to 4 and 8 bpp with max colors * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixOctreeQuantNumColors() + * + * \param[in] pixs 32 bpp rgb + * \param[in] maxcolors 8 to 256; the actual number of colors used + * may be less than this + * \param[in] subsample factor for computing color distribution; + * use 0 for default + * \return pixd 4 or 8 bpp, colormapped, or NULL on error + * + *
+ *  pixOctreeColorQuant is very flexible in terms of the relative
+ *  depth of different cubes of the octree.   By contrast, this function,
+ *  pixOctreeQuantNumColors is also adaptive, but it supports octcube
+ *  leaves at only two depths: a smaller depth that guarantees
+ *  full coverage of the color space and octcubes at one level
+ *  deeper for more accurate colors.  Its main virutes are simplicity
+ *  and speed, which are both derived from the natural indexing of
+ *  the octcubes from the RGB values.
+ *
+ *  Before describing pixOctreeQuantNumColors, consider an even simpler
+ *  approach for 4 bpp with either 8 or 16 colors.  With 8 colors,
+ *  you simply go to level 1 octcubes and use the average color
+ *  found in each cube.  For 16 colors, you find which of the three
+ *  colors has the largest variance at the second level, and use two
+ *  indices for that color.  The result is quite poor, because 1 some
+ *  of the cubes are nearly empty and 2 you don't get much color
+ *  differentiation for the extra 8 colors.  Trust me, this method may
+ *  be simple, but it isn't worth anything.
+ *
+ *  In pixOctreeQuantNumColors, we generate colormapped images at
+ *  either 4 bpp or 8 bpp.  For 4 bpp, we have a minimum of 8 colors
+ *  for the level 1 octcubes, plus up to 8 additional colors that
+ *  are determined from the level 2 popularity.  If the number of colors
+ *  is between 8 and 16, the output is a 4 bpp image.  If the number of
+ *  colors is greater than 16, the output is a 8 bpp image.
+ *
+ *  We use a priority queue, implemented with a heap, to select the
+ *  requisite number of most populated octcubes at the deepest level
+ *  level 2 for 64 or fewer colors; level 3 for more than 64 colors.
+ *  These are combined with one color for each octcube one level above,
+ *  which is used to span the color space of octcubes that were not
+ *  included at the deeper level.
+ *
+ *  If the deepest level is 2, we combine the popular level 2 octcubes
+ *  out of a total of 64 with the 8 level 1 octcubes.  If the deepest
+ *  level is 3, we combine the popular level 3 octcubes out of a
+ *  total 512 with the 64 level 2 octcubes that span the color space.
+ *  In the latter case, we require a minimum of 64 colors for the level 2
+ *  octcubes, plus up to 192 additional colors determined from level 3
+ *  popularity.
+ *
+ *  The parameter 'maxlevel' is the deepest octcube level that is used.
+ *  The implementation also uses two LUTs, which are employed in
+ *  two successive traversals of the dest image.  The first maps
+ *  from the src octindex at 'maxlevel' to the color table index,
+ *  which is the value that is stored in the 4 or 8 bpp dest pixel.
+ *  The second LUT maps from that colormap value in the dest to a
+ *  new colormap value for a minimum sized colormap, stored back in
+ *  the dest.  It is used to remove any color map entries that
+ *  correspond to color space regions that have no pixels in the
+ *  source image.  These regions can be either from the higher level
+ *  e.g., level 1 for 4 bpp, or from octcubes at 'maxlevel' that
+ *  are unoccupied.  This remapping results in the minimum number
+ *  of colors used according to the constraints induced by the
+ *  input 'maxcolors'.  We also compute the average R, G and B color
+ *  values in each region of the color space represented by a
+ *  colormap entry, and store them in the colormap.
+ *
+ *  The maximum number of colors is input, which determines the
+ *  following properties of the dest image and octcube regions used:
+ *
+ *     Number of colors      dest image depth      maxlevel
+ *     ----------------      ----------------      --------
+ *       8 to 16                  4 bpp               2
+ *       17 to 64                 8 bpp               2
+ *       65 to 256                8 bpp               3
+ *
+ *  It may turn out that the number of extra colors, beyond the
+ *  minimum 8 and 64 for maxlevel 2 and 3, respectively, is larger
+ *  than the actual number of occupied cubes at these levels
+ *  In that case, all the pixels are contained in this
+ *  subset of cubes at maxlevel, and no colormap colors are needed
+ *  to represent the remainder pixels one level above.  Thus, for
+ *  example, in use one often finds that the pixels in an image
+ *  occupy less than 192 octcubes at level 3, so they can be represented
+ *  by a colormap for octcubes at level 3 only.
+ * 
+ */ +PIX * +pixOctreeQuantNumColors(PIX *pixs, + l_int32 maxcolors, + l_int32 subsample) +{ +l_int32 w, h, minside, bpp, wpls, wpld, i, j, actualcolors; +l_int32 rval, gval, bval, nbase, nextra, maxlevel, ncubes, val; +l_int32 *lut1, *lut2; +l_uint32 index; +l_uint32 *lines, *lined, *datas, *datad, *pspixel; +l_uint32 *rtab, *gtab, *btab; +OQCELL *oqc; +OQCELL **oqca; +L_HEAP *lh; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixOctreeQuantNumColors"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (maxcolors < 8) { + L_WARNING("max colors < 8; setting to 8\n", procName); + maxcolors = 8; + } + if (maxcolors > 256) { + L_WARNING("max colors > 256; setting to 256\n", procName); + maxcolors = 256; + } + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + minside = L_MIN(w, h); + if (subsample <= 0) { + subsample = L_MAX(1, minside / 200); + } + + if (maxcolors <= 16) { + bpp = 4; + pixd = pixCreate(w, h, bpp); + maxlevel = 2; + ncubes = 64; /* 2^6 */ + nbase = 8; + nextra = maxcolors - nbase; + } else if (maxcolors <= 64) { + bpp = 8; + pixd = pixCreate(w, h, bpp); + maxlevel = 2; + ncubes = 64; /* 2^6 */ + nbase = 8; + nextra = maxcolors - nbase; + } else { /* maxcolors <= 256 */ + bpp = 8; + pixd = pixCreate(w, h, bpp); + maxlevel = 3; + ncubes = 512; /* 2^9 */ + nbase = 64; + nextra = maxcolors - nbase; + } + + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /*----------------------------------------------------------* + * If we're using the minimum number of colors, it is * + * much simpler. We just use 'nbase' octcubes. * + * For this case, we don't eliminate any extra colors. * + *----------------------------------------------------------*/ + if (nextra == 0) { + /* prepare the OctcubeQuantCell array */ + if ((oqca = (OQCELL **)LEPT_CALLOC(nbase, sizeof(OQCELL *))) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("oqca not made", procName, NULL); + } + for (i = 0; i < nbase; i++) { + oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); + oqca[i]->n = 0.0; + } + + rtab = gtab = btab = NULL; + makeRGBToIndexTables(maxlevel - 1, &rtab, >ab, &btab); + + /* Go through the entire image, gathering statistics and + * assigning pixels to their quantized value */ + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pspixel = lines + j; + extractRGBValues(*pspixel, &rval, &gval, &bval); + getOctcubeIndexFromRGB(rval, gval, bval, + rtab, gtab, btab, &index); +/* fprintf(stderr, "rval = %d, gval = %d, bval = %d," + " index = %d\n", rval, gval, bval, index); */ + if (bpp == 4) + SET_DATA_QBIT(lined, j, index); + else /* bpp == 8 */ + SET_DATA_BYTE(lined, j, index); + oqca[index]->n += 1.0; + oqca[index]->rcum += rval; + oqca[index]->gcum += gval; + oqca[index]->bcum += bval; + } + } + + /* Compute average color values in each octcube, and + * generate colormap */ + cmap = pixcmapCreate(bpp); + pixSetColormap(pixd, cmap); + for (i = 0; i < nbase; i++) { + oqc = oqca[i]; + if (oqc->n != 0) { + oqc->rval = (l_int32)(oqc->rcum / oqc->n); + oqc->gval = (l_int32)(oqc->gcum / oqc->n); + oqc->bval = (l_int32)(oqc->bcum / oqc->n); + } else { + getRGBFromOctcube(i, maxlevel - 1, &oqc->rval, + &oqc->gval, &oqc->bval); + } + pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); + } + + for (i = 0; i < nbase; i++) + LEPT_FREE(oqca[i]); + LEPT_FREE(oqca); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; + } + + /*------------------------------------------------------------* + * General case: we will use colors in octcubes at maxlevel. * + * We also remove any colors that are not populated from * + * the colormap. * + *------------------------------------------------------------*/ + /* Prepare the OctcubeQuantCell array */ + if ((oqca = (OQCELL **)LEPT_CALLOC(ncubes, sizeof(OQCELL *))) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("oqca not made", procName, NULL); + } + for (i = 0; i < ncubes; i++) { + oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); + oqca[i]->n = 0.0; + } + + /* Make the tables to map color to the octindex, + * of which there are 'ncubes' at 'maxlevel' */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(maxlevel, &rtab, >ab, &btab); + + /* Estimate the color distribution; we want to find the + * most popular nextra colors at 'maxlevel' */ + for (i = 0; i < h; i += subsample) { + lines = datas + i * wpls; + for (j = 0; j < w; j += subsample) { + pspixel = lines + j; + extractRGBValues(*pspixel, &rval, &gval, &bval); + getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); + oqca[index]->n += 1.0; + oqca[index]->octindex = index; + oqca[index]->rcum += rval; + oqca[index]->gcum += gval; + oqca[index]->bcum += bval; + } + } + + /* Transfer the OQCELL from the array, and order in a heap */ + lh = lheapCreate(512, L_SORT_DECREASING); + for (i = 0; i < ncubes; i++) + lheapAdd(lh, oqca[i]); + LEPT_FREE(oqca); /* don't need this array */ + + /* Prepare a new OctcubeQuantCell array, with maxcolors cells */ + oqca = (OQCELL **)LEPT_CALLOC(maxcolors, sizeof(OQCELL *)); + for (i = 0; i < nbase; i++) { /* make nbase cells */ + oqca[i] = (OQCELL *)LEPT_CALLOC(1, sizeof(OQCELL)); + oqca[i]->n = 0.0; + } + + /* Remove the nextra most populated ones, and put them in the array */ + for (i = 0; i < nextra; i++) { + oqc = (OQCELL *)lheapRemove(lh); + oqc->n = 0.0; /* reinit */ + oqc->rcum = 0; + oqc->gcum = 0; + oqc->bcum = 0; + oqca[nbase + i] = oqc; /* store it in the array */ + } + + /* Destroy the heap and its remaining contents */ + lheapDestroy(&lh, TRUE); + + /* Generate a lookup table from octindex at maxlevel + * to color table index */ + lut1 = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); + for (i = 0; i < nextra; i++) + lut1[oqca[nbase + i]->octindex] = nbase + i; + for (index = 0; index < ncubes; index++) { + if (lut1[index] == 0) /* not one of the extras; need to assign */ + lut1[index] = index >> 3; /* remove the least significant bits */ +/* fprintf(stderr, "lut1[%d] = %d\n", index, lut1[index]); */ + } + + /* Go through the entire image, gathering statistics and + * assigning pixels to their quantized value */ + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pspixel = lines + j; + extractRGBValues(*pspixel, &rval, &gval, &bval); + getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); +/* fprintf(stderr, "rval = %d, gval = %d, bval = %d, index = %d\n", + rval, gval, bval, index); */ + val = lut1[index]; + switch (bpp) { + case 4: + SET_DATA_QBIT(lined, j, val); + break; + case 8: + SET_DATA_BYTE(lined, j, val); + break; + default: + LEPT_FREE(oqca); + LEPT_FREE(lut1); + return (PIX *)ERROR_PTR("bpp not 4 or 8!", procName, NULL); + break; + } + oqca[val]->n += 1.0; + oqca[val]->rcum += rval; + oqca[val]->gcum += gval; + oqca[val]->bcum += bval; + } + } + + /* Compute averages, set up a colormap, and make a second + * lut that converts from the color values currently in + * the image to a minimal set */ + lut2 = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); + cmap = pixcmapCreate(bpp); + pixSetColormap(pixd, cmap); + for (i = 0, index = 0; i < maxcolors; i++) { + oqc = oqca[i]; + lut2[i] = index; + if (oqc->n == 0) /* no occupancy; don't bump up index */ + continue; + oqc->rval = (l_int32)(oqc->rcum / oqc->n); + oqc->gval = (l_int32)(oqc->gcum / oqc->n); + oqc->bval = (l_int32)(oqc->bcum / oqc->n); + pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); + index++; + } +/* pixcmapWriteStream(stderr, cmap); */ + actualcolors = pixcmapGetCount(cmap); +/* fprintf(stderr, "Number of different colors = %d\n", actualcolors); */ + + /* Last time through the image; use the lookup table to + * remap the pixel value to the minimal colormap */ + if (actualcolors < maxcolors) { + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + switch (bpp) { + case 4: + val = GET_DATA_QBIT(lined, j); + SET_DATA_QBIT(lined, j, lut2[val]); + break; + case 8: + val = GET_DATA_BYTE(lined, j); + SET_DATA_BYTE(lined, j, lut2[val]); + break; + } + } + } + } + + if (oqca) { + for (i = 0; i < maxcolors; i++) + LEPT_FREE(oqca[i]); + } + LEPT_FREE(oqca); + LEPT_FREE(lut1); + LEPT_FREE(lut2); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Mixed color/gray quantization with specified number of colors * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixOctcubeQuantMixedWithGray() + * + * \param[in] pixs 32 bpp rgb + * \param[in] depth of output pix + * \param[in] graylevels graylevels (must be > 1) + * \param[in] delta threshold for deciding if a pix is color or gray + * \return pixd quantized to octcube and gray levels or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a colormapped image, where the colormap table values
+ *          have two components: octcube values representing pixels with
+ *          color content, and grayscale values for the rest.
+ *      (2) The threshold (delta) is the maximum allowable difference of
+ *          the max abs value of | r - g |, | r - b | and | g - b |.
+ *      (3) The octcube values are the averages of all pixels that are
+ *          found in the octcube, and that are far enough from gray to
+ *          be considered color.  This can roughly be visualized as all
+ *          the points in the rgb color cube that are not within a "cylinder"
+ *          of diameter approximately 'delta' along the main diagonal.
+ *      (4) We want to guarantee full coverage of the rgb color space; thus,
+ *          if the output depth is 4, the octlevel is 1 (2 x 2 x 2 = 8 cubes)
+ *          and if the output depth is 8, the octlevel is 2 (4 x 4 x 4
+ *          = 64 cubes).
+ *      (5) Consequently, we have the following constraint on the number
+ *          of allowed gray levels: for 4 bpp, 8; for 8 bpp, 192.
+ * 
+ */ +PIX * +pixOctcubeQuantMixedWithGray(PIX *pixs, + l_int32 depth, + l_int32 graylevels, + l_int32 delta) +{ +l_int32 w, h, wpls, wpld, i, j, size, octlevels; +l_int32 rval, gval, bval, del, val, midval; +l_int32 *carray, *rarray, *garray, *barray; +l_int32 *tabval; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *lines, *lined, *datas, *datad; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixOctcubeQuantMixedWithGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (graylevels < 2) + return (PIX *)ERROR_PTR("invalid graylevels", procName, NULL); + if (depth == 4) { + octlevels = 1; + size = 8; /* 2 ** 3 */ + if (graylevels > 8) + return (PIX *)ERROR_PTR("max 8 gray levels", procName, NULL); + } else if (depth == 8) { + octlevels = 2; + size = 64; /* 2 ** 6 */ + if (graylevels > 192) + return (PIX *)ERROR_PTR("max 192 gray levels", procName, NULL); + } else { + return (PIX *)ERROR_PTR("output depth not 4 or 8 bpp", procName, NULL); + } + + pixd = NULL; + + /* Make octcube index tables */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(octlevels, &rtab, >ab, &btab); + + /* Make octcube arrays for storing points in each cube */ + carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + + /* Make lookup table, using computed thresholds */ + tabval = makeGrayQuantIndexTable(graylevels); + if (!rtab || !gtab || !btab || + !carray || !rarray || !garray || !barray || !tabval) { + L_ERROR("calloc fail for an array\n", procName); + goto array_cleanup; + } + + /* Make colormapped output pixd */ + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, depth)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto array_cleanup; + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + cmap = pixcmapCreate(depth); + for (j = 0; j < size; j++) /* reserve octcube colors */ + pixcmapAddColor(cmap, 1, 1, 1); /* a color that won't be used */ + for (j = 0; j < graylevels; j++) { /* set grayscale colors */ + val = (255 * j) / (graylevels - 1); + pixcmapAddColor(cmap, val, val, val); + } + pixSetColormap(pixd, cmap); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + /* Go through src image: assign dest pixels to colormap values + * and compute average colors in each occupied octcube */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + if (rval > gval) { + if (gval > bval) { /* r > g > b */ + del = rval - bval; + midval = gval; + } else if (rval > bval) { /* r > b > g */ + del = rval - gval; + midval = bval; + } else { /* b > r > g */ + del = bval - gval; + midval = rval; + } + } else { /* gval >= rval */ + if (rval > bval) { /* g > r > b */ + del = gval - bval; + midval = rval; + } else if (gval > bval) { /* g > b > r */ + del = gval - rval; + midval = bval; + } else { /* b > g > r */ + del = bval - rval; + midval = gval; + } + } + if (del > delta) { /* assign to color */ + octindex = rtab[rval] | gtab[gval] | btab[bval]; + carray[octindex]++; + rarray[octindex] += rval; + garray[octindex] += gval; + barray[octindex] += bval; + if (depth == 4) + SET_DATA_QBIT(lined, j, octindex); + else /* depth == 8 */ + SET_DATA_BYTE(lined, j, octindex); + } else { /* assign to grayscale */ + val = size + tabval[midval]; + if (depth == 4) + SET_DATA_QBIT(lined, j, val); + else /* depth == 8 */ + SET_DATA_BYTE(lined, j, val); + } + } + } + + /* Average the colors in each bin and reset the colormap */ + for (i = 0; i < size; i++) { + if (carray[i] > 0) { + rarray[i] /= carray[i]; + garray[i] /= carray[i]; + barray[i] /= carray[i]; + pixcmapResetColor(cmap, i, rarray[i], garray[i], barray[i]); + } + } + +array_cleanup: + LEPT_FREE(carray); + LEPT_FREE(rarray); + LEPT_FREE(garray); + LEPT_FREE(barray); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + LEPT_FREE(tabval); + + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Fixed partition octcube quantization with 256 cells * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixFixedOctcubeQuant256() + * + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] ditherflag 1 for dithering; 0 for no dithering + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ * Notes:
+ *  This simple 1-pass color quantization works by breaking the
+ *  color space into 256 pieces, with 3 bits quantized for each of
+ *  red and green, and 2 bits quantized for blue.  We shortchange
+ *  blue because the eye is least sensitive to blue.  This
+ *  division of the color space is into two levels of octrees,
+ *  followed by a further division by 4 not 8, where both
+ *  blue octrees have been combined in the third level.
+ *
+ *  The color map is generated from the 256 color centers by
+ *  taking the representative color to be the center of the
+ *  cell volume.  This gives a maximum error in the red and
+ *  green values of 16 levels, and a maximum error in the
+ *  blue sample of 32 levels.
+ *
+ *  Each pixel in the 24-bit color image is placed in its containing
+ *  cell, given by the relevant MSbits of the red, green and blue
+ *  samples.  An error-diffusion dithering is performed on each
+ *  color sample to give the appearance of good average local color.
+ *  Dithering is required; without it, the contouring and visible
+ *  color errors are very bad.
+ *
+ *  I originally implemented this algorithm in two passes,
+ *  where the first pass was used to compute the weighted average
+ *  of each sample in each pre-allocated region of color space.
+ *  The idea was to use these centroids in the dithering algorithm
+ *  of the second pass, to reduce the average error that was
+ *  being dithered.  However, with dithering, there is
+ *  virtually no difference, so there is no reason to make the
+ *  first pass.  Consequently, this 1-pass version just assigns
+ *  the pixels to the centers of the pre-allocated cells.
+ *  We use dithering to spread the difference between the sample
+ *  value and the location of the center of the cell.  For speed
+ *  and simplicity, we use integer dithering and propagate only
+ *  to the right, down, and diagonally down-right, with ratios
+ *  3/8, 3/8 and 1/4, respectively.  The results should be nearly
+ *  as good, and a bit faster, with propagation only to the right
+ *  and down.
+ *
+ *  The algorithm is very fast, because there is no search,
+ *  only fast generation of the cell index for each pixel.
+ *  We use a simple mapping from the three 8 bit rgb samples
+ *  to the 8 bit cell index; namely, r7 r6 r5 g7 g6 g5 b7 b6.
+ *  This is not in an octcube format, but it doesn't matter.
+ *  There are no storage requirements.  We could keep a
+ *  running average of the center of each sample in each
+ *  cluster, rather than using the center of the cell, but
+ *  this is just extra work, esp. with dithering.
+ *
+ *  This method gives surprisingly good results with dithering.
+ *  However, without dithering, the loss of color accuracy is
+ *  evident in regions that are very light or that have subtle
+ *  blending of colors.
+ * 
+ */ +PIX * +pixFixedOctcubeQuant256(PIX *pixs, + l_int32 ditherflag) +{ +l_uint8 index; +l_int32 rval, gval, bval; +l_int32 w, h, wpls, wpld, i, j, cindex; +l_uint32 *rtab, *gtab, *btab; +l_int32 *itab; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixFixedOctcubeQuant256"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + + /* Do not dither if image is very small */ + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinDitherSize && h < MinDitherSize && ditherflag == 1) { + L_INFO("Small image: dithering turned off\n", procName); + ditherflag = 0; + } + + /* Find the centers of the 256 cells, each of which represents + * the 3 MSBits of the red and green components, and the + * 2 MSBits of the blue component. This gives a mapping + * from a "cube index" to the rgb values. Save all 256 + * rgb values of these centers in a colormap. + * For example, to get the red color of the cell center, + * you take the 3 MSBits of to the index and add the + * offset to the center of the cell, which is 0x10. */ + cmap = pixcmapCreate(8); + for (cindex = 0; cindex < 256; cindex++) { + rval = (cindex & 0xe0) | 0x10; + gval = ((cindex << 3) & 0xe0) | 0x10; + bval = ((cindex << 6) & 0xc0) | 0x20; + pixcmapAddColor(cmap, rval, gval, bval); + } + + /* Make output 8 bpp palette image */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) { + pixcmapDestroy(&cmap); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Set dest pix values to colortable indices */ + if (ditherflag == 0) { /* no dithering */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + index = (rval & 0xe0) | ((gval >> 3) & 0x1c) | (bval >> 6); + SET_DATA_BYTE(lined, j, index); + } + } + } else { /* ditherflag == 1 */ + /* Set up conversion tables from rgb directly to the colormap + * index. However, the dithering function expects these tables + * to generate an octcube index (+1), and the table itab[] to + * convert to the colormap index. So we make a trivial + * itab[], that simply compensates for the -1 in + * pixDitherOctindexWithCmap(). No cap is required on + * the propagated difference. */ + rtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + gtab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + btab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + itab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (!rtab || !gtab || !btab || !itab) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("calloc fail for table", procName, NULL); + } + for (i = 0; i < 256; i++) { + rtab[i] = i & 0xe0; + gtab[i] = (i >> 3) & 0x1c; + btab[i] = i >> 6; + itab[i] = i + 1; + } + pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, itab, + FIXED_DIF_CAP); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + LEPT_FREE(itab); + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Nearly exact quantization for images with few colors * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixFewColorsOctcubeQuant1() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level significant bits for each of RGB; valid in [1...6] + * \return pixd quantized to octcube or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a colormapped image, where the colormap table values
+ *          are the averages of all pixels that are found in the octcube.
+ *      (2) This fails if there are more than 256 colors (i.e., more
+ *          than 256 occupied octcubes).
+ *      (3) Often level 3 (512 octcubes) will succeed because not more
+ *          than half of them are occupied with 1 or more pixels.
+ *      (4) The depth of the result, which is either 2, 4 or 8 bpp,
+ *          is the minimum required to hold the number of colors that
+ *          are found.
+ *      (5) This can be useful for quantizing orthographically generated
+ *          images such as color maps, where there may be more than 256 colors
+ *          because of aliasing or jpeg artifacts on text or lines, but
+ *          there are a relatively small number of solid colors.  Then,
+ *          use with level = 3 can often generate a compact and accurate
+ *          representation of the original RGB image.  For this purpose,
+ *          it is better than pixFewColorsOctcubeQuant2(), because it
+ *          uses the average value of pixels in the octcube rather
+ *          than the first found pixel.  It is also simpler to use,
+ *          because it generates the histogram internally.
+ * 
+ */ +PIX * +pixFewColorsOctcubeQuant1(PIX *pixs, + l_int32 level) +{ +l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; +l_int32 rval, gval, bval; +l_int32 *carray, *rarray, *garray, *barray; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *lines, *lined, *datas, *datad, *pspixel; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixFewColorsOctcubeQuant1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (level < 1 || level > 6) + return (PIX *)ERROR_PTR("invalid level", procName, NULL); + + pixd = NULL; + + if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ + return (PIX *)ERROR_PTR("size not returned", procName, NULL); + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + + carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + rarray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + garray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + barray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32)); + if (!carray || !rarray || !garray || !barray) { + L_ERROR("calloc fail for an array\n", procName); + goto array_cleanup; + } + + /* Place the pixels in octcube leaves. */ + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + pspixel = lines + j; + extractRGBValues(*pspixel, &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + carray[octindex]++; + rarray[octindex] += rval; + garray[octindex] += gval; + barray[octindex] += bval; + } + } + + /* Find the number of different colors */ + for (i = 0, ncolors = 0; i < size; i++) { + if (carray[i] > 0) + ncolors++; + } + if (ncolors > 256) { + L_WARNING("%d colors found; more than 256\n", procName, ncolors); + goto array_cleanup; + } + if (ncolors <= 4) + depth = 2; + else if (ncolors <= 16) + depth = 4; + else + depth = 8; + + /* Average the colors in each octcube leaf and add to colormap table; + * then use carray to hold the colormap index + 1 */ + cmap = pixcmapCreate(depth); + for (i = 0, index = 0; i < size; i++) { + if (carray[i] > 0) { + rarray[i] /= carray[i]; + garray[i] /= carray[i]; + barray[i] /= carray[i]; + pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); + carray[i] = index + 1; /* to avoid storing 0 */ + index++; + } + } + + pixd = pixCreate(w, h, depth); + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pspixel = lines + j; + extractRGBValues(*pspixel, &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + switch (depth) + { + case 2: + SET_DATA_DIBIT(lined, j, carray[octindex] - 1); + break; + case 4: + SET_DATA_QBIT(lined, j, carray[octindex] - 1); + break; + case 8: + SET_DATA_BYTE(lined, j, carray[octindex] - 1); + break; + default: + L_WARNING("shouldn't get here\n", procName); + } + } + } + +array_cleanup: + LEPT_FREE(carray); + LEPT_FREE(rarray); + LEPT_FREE(garray); + LEPT_FREE(barray); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*! + * \brief pixFewColorsOctcubeQuant2() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level of octcube indexing, for histogram: 3, 4, 5, 6 + * \param[in] na histogram of pixel occupation in octree leaves + * at given level + * \param[in] ncolors number of occupied octree leaves at given level + * \param[out] pnerrors [optional] num of pixels not exactly + * represented in the colormap + * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a colormapped image, where the colormap table values
+ *          are the averages of all pixels that are found in the octcube.
+ *      (2) This fails if there are more than 256 colors (i.e., more
+ *          than 256 occupied octcubes).
+ *      (3) Often level 3 (512 octcubes) will succeed because not more
+ *          than half of them are occupied with 1 or more pixels.
+ *      (4) For an image with not more than 256 colors, it is unlikely
+ *          that two pixels of different color will fall in the same
+ *          octcube at level = 4.   However it is possible, and this
+ *          function optionally returns %nerrors, the number of pixels
+ *          where, because more than one color is in the same octcube,
+ *          the pixel color is not exactly reproduced in the colormap.
+ *          The colormap for an occupied leaf of the octree contains
+ *          the color of the first pixel encountered in that octcube.
+ *      (5) This differs from pixFewColorsOctcubeQuant1(), which also
+ *          requires not more than 256 occupied leaves, but represents
+ *          the color of each leaf by an average over the pixels in
+ *          that leaf.  This also requires precomputing the histogram
+ *          of occupied octree leaves, which is generated using
+ *          pixOctcubeHistogram().
+ *      (6) This is used in pixConvertRGBToColormap() for images that
+ *          are determined, by their histogram, to have relatively few
+ *          colors.  This typically happens with orthographically
+ *          produced images (as oppopsed to natural images), where
+ *          it is expected that most of the pixels within a leaf
+ *          octcube have exactly the same color, and quantization to
+ *          that color is lossless.
+ * 
+ */ +PIX * +pixFewColorsOctcubeQuant2(PIX *pixs, + l_int32 level, + NUMA *na, + l_int32 ncolors, + l_int32 *pnerrors) +{ +l_int32 w, h, wpls, wpld, i, j, nerrors; +l_int32 ncubes, depth, cindex, oval; +l_int32 rval, gval, bval; +l_int32 *octarray; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *lines, *lined, *datas, *datad, *ppixel; +l_uint32 *colorarray; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixFewColorsOctcubeQuant2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (level < 3 || level > 6) + return (PIX *)ERROR_PTR("level not in {4, 5, 6}", procName, NULL); + if (ncolors > 256) + return (PIX *)ERROR_PTR("ncolors > 256", procName, NULL); + if (pnerrors) + *pnerrors = UNDEF; + + pixd = NULL; + + /* Represent the image with a set of leaf octcubes + * at 'level', one for each color. */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + + /* The octarray will give a ptr from the octcube to the colorarray */ + ncubes = numaGetCount(na); + octarray = (l_int32 *)LEPT_CALLOC(ncubes, sizeof(l_int32)); + + /* The colorarray will hold the colors of the first pixel + * that lands in the leaf octcube. After filling, it is + * used to generate the colormap. */ + colorarray = (l_uint32 *)LEPT_CALLOC(ncolors + 1, sizeof(l_uint32)); + if (!octarray || !colorarray) { + L_ERROR("octarray or colorarray not made\n", procName); + goto cleanup_arrays; + } + + /* Determine the output depth from the number of colors */ + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (ncolors <= 4) + depth = 2; + else if (ncolors <= 16) + depth = 4; + else /* ncolors <= 256 */ + depth = 8; + + if ((pixd = pixCreate(w, h, depth)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup_arrays; + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* For each pixel, get the octree index for its leaf octcube. + * Check if a pixel has already been found in this octcube. + * ~ If not yet found, save that color in the colorarray + * and save the cindex in the octarray. + * ~ If already found, compare the pixel color with the + * color in the colorarray, and note if it differs. + * Then set the dest pixel value to the cindex - 1, which + * will be the cmap index for this color. */ + cindex = 1; /* start with 1 */ + nerrors = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + ppixel = lines + j; + extractRGBValues(*ppixel, &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + oval = octarray[octindex]; + if (oval == 0) { + octarray[octindex] = cindex; + colorarray[cindex] = *ppixel; + setPixelLow(lined, j, depth, cindex - 1); + cindex++; + } else { /* already have seen this color; is it unique? */ + setPixelLow(lined, j, depth, oval - 1); + if (colorarray[oval] != *ppixel) + nerrors++; + } + } + } + if (pnerrors) + *pnerrors = nerrors; + +#if DEBUG_FEW_COLORS + fprintf(stderr, "ncubes = %d, ncolors = %d\n", ncubes, ncolors); + for (i = 0; i < ncolors; i++) + fprintf(stderr, "color[%d] = %x\n", i, colorarray[i + 1]); +#endif /* DEBUG_FEW_COLORS */ + + /* Make the colormap. */ + cmap = pixcmapCreate(depth); + for (i = 0; i < ncolors; i++) { + ppixel = colorarray + i + 1; + extractRGBValues(*ppixel, &rval, &gval, &bval); + pixcmapAddColor(cmap, rval, gval, bval); + } + pixSetColormap(pixd, cmap); + +cleanup_arrays: + LEPT_FREE(octarray); + LEPT_FREE(colorarray); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + + return pixd; +} + + +/*! + * \brief pixFewColorsOctcubeQuantMixed() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level significant octcube bits for each of RGB; + * valid in [1...6]; use 0 for default + * \param[in] darkthresh threshold near black; if the lightest component + * is below this, the pixel is not considered to + * be gray or color; uses 0 for default + * \param[in] lightthresh threshold near white; if the darkest component + * is above this, the pixel is not considered to + * be gray or color; use 0 for default + * \param[in] diffthresh thresh for the max difference between component + * values; for differences below this, the pixel + * is considered to be gray; use 0 for default + * \param[in] minfract min fraction of pixels for gray histo bin; + * use 0.0 for default + * \param[in] maxspan max size of gray histo bin; use 0 for default + * \return pixd 8 bpp, quantized to octcube for pixels that are + * not gray; gray pixels are quantized separately + * over the full gray range, or NULL on error + * + *
+ * Notes:
+ *      (1) First runs pixFewColorsOctcubeQuant1().  If this succeeds,
+ *          it separates the color from gray(ish) entries in the cmap,
+ *          and re-quantizes the gray pixels.  The result has some pixels
+ *          in color and others in gray.
+ *      (2) This fails if there are more than 256 colors (i.e., more
+ *          than 256 occupied octcubes in the color quantization).
+ *      (3) Level 3 (512 octcubes) will usually succeed because not more
+ *          than half of them are occupied with 1 or more pixels.
+ *      (4) This uses the criterion from pixColorFraction() for deciding
+ *          if a colormap entry is color; namely, if the color components
+ *          are not too close to either black or white, and the maximum
+ *          difference between component values equals or exceeds a threshold.
+ *      (5) For quantizing the gray pixels, it uses a histogram-based
+ *          method where input parameters determining the buckets are
+ *          the minimum population fraction and the maximum allowed size.
+ *      (6) Recommended input parameters are:
+ *              %level:  3 or 4  (3 is default)
+ *              %darkthresh:  20
+ *              %lightthresh: 244
+ *              %diffthresh: 20
+ *              %minfract: 0.05
+ *              %maxspan: 15
+ *          These numbers are intended to be conservative (somewhat over-
+ *          sensitive) in color detection,  It's usually better to pay
+ *          extra with octcube quantization of a grayscale image than
+ *          to use grayscale quantization on an image that has some
+ *          actual color.  Input 0 on any of these to get the default.
+ *      (7) This can be useful for quantizing orthographically generated
+ *          images such as color maps, where there may be more than 256 colors
+ *          because of aliasing or jpeg artifacts on text or lines, but
+ *          there are a relatively small number of solid colors.  It usually
+ *          gives results that are better than pixOctcubeQuantMixedWithGray(),
+ *          both in size and appearance.  But it is a bit slower.
+ * 
+ */ +PIX * +pixFewColorsOctcubeQuantMixed(PIX *pixs, + l_int32 level, + l_int32 darkthresh, + l_int32 lightthresh, + l_int32 diffthresh, + l_float32 minfract, + l_int32 maxspan) +{ +l_int32 i, j, w, h, wplc, wplm, wpld, ncolors, index; +l_int32 rval, gval, bval, val, minval, maxval; +l_int32 *lut; +l_uint32 *datac, *datam, *datad, *linec, *linem, *lined; +PIX *pixc, *pixm, *pixg, *pixd; +PIXCMAP *cmap, *cmapd; + + PROCNAME("pixFewColorsOctcubeQuantMixed"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (level <= 0) level = 3; + if (level > 6) + return (PIX *)ERROR_PTR("invalid level", procName, NULL); + if (darkthresh <= 0) darkthresh = 20; + if (lightthresh <= 0) lightthresh = 244; + if (diffthresh <= 0) diffthresh = 20; + if (minfract <= 0.0) minfract = 0.05; + if (maxspan <= 2) maxspan = 15; + + /* Start with a simple fixed octcube quantizer. */ + if ((pixc = pixFewColorsOctcubeQuant1(pixs, level)) == NULL) + return (PIX *)ERROR_PTR("too many colors", procName, NULL); + + /* Identify and save color entries in the colormap. Set up a LUT + * that returns -1 for any gray pixel. */ + cmap = pixGetColormap(pixc); + ncolors = pixcmapGetCount(cmap); + cmapd = pixcmapCreate(8); + lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) + lut[i] = -1; + for (i = 0, index = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + if (minval > lightthresh) /* near white */ + continue; + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + if (maxval < darkthresh) /* near black */ + continue; + + /* Use the max diff between components to test for color */ + if (maxval - minval >= diffthresh) { + pixcmapAddColor(cmapd, rval, gval, bval); + lut[i] = index; + index++; + } + } + + /* Generate dest pix with just the color pixels set to their + * colormap indices. At the same time, make a 1 bpp mask + * of the non-color pixels */ + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, 8); + pixSetColormap(pixd, cmapd); + pixm = pixCreate(w, h, 1); + datac = pixGetData(pixc); + datam = pixGetData(pixm); + datad = pixGetData(pixd); + wplc = pixGetWpl(pixc); + wplm = pixGetWpl(pixm); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linec = datac + i * wplc; + linem = datam + i * wplm; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linec, j); + if (lut[val] == -1) + SET_DATA_BIT(linem, j); + else + SET_DATA_BYTE(lined, j, lut[val]); + } + } + + /* Fill in the gray values. Use a grayscale version of pixs + * as input, along with the mask over the actual gray pixels. */ + pixg = pixConvertTo8(pixs, 0); + pixGrayQuantFromHisto(pixd, pixg, pixm, minfract, maxspan); + + LEPT_FREE(lut); + pixDestroy(&pixc); + pixDestroy(&pixm); + pixDestroy(&pixg); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Fixed partition octcube quantization with RGB output * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixFixedOctcubeQuantGenRGB() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level significant bits for each of r,g,b + * \return pixd rgb; quantized to octcube centers, or NULL on error + * + *
+ * Notes:
+ *      (1) Unlike the other color quantization functions, this one
+ *          generates an rgb image.
+ *      (2) The pixel values are quantized to the center of each octcube
+ *          (at the specified level) containing the pixel.  They are
+ *          not quantized to the average of the pixels in that octcube.
+ * 
+ */ +PIX * +pixFixedOctcubeQuantGenRGB(PIX *pixs, + l_int32 level) +{ +l_int32 w, h, wpls, wpld, i, j; +l_int32 rval, gval, bval; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *lines, *lined, *datas, *datad; +PIX *pixd; + + PROCNAME("pixFixedOctcubeQuantGenRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (level < 1 || level > 6) + return (PIX *)ERROR_PTR("level not in {1,...6}", procName, NULL); + + if (makeRGBToIndexTables(level, &rtab, >ab, &btab)) + return (PIX *)ERROR_PTR("tables not made", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, 32); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + getRGBFromOctcube(octindex, level, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*------------------------------------------------------------------* + * Color quantize RGB image using existing colormap * + *------------------------------------------------------------------*/ +/*! + * \brief pixQuantFromCmap() + * + * \param[in] pixs 8 bpp grayscale without cmap, or 32 bpp rgb + * \param[in] cmap to quantize to; insert copy into dest pix + * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp + * \param[in] level of octcube used for finding nearest color in cmap + * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE + * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level wrapper for quantizing either grayscale
+ *          or rgb images to a specified colormap.
+ *      (2) The actual output depth is constrained by %mindepth and
+ *          by the number of colors in %cmap.
+ *      (3) For grayscale, %level and %metric are ignored.
+ *      (4) If the cmap has color and pixs is grayscale, the color is
+ *          removed from the cmap before quantizing pixs.
+ * 
+ */ +PIX * +pixQuantFromCmap(PIX *pixs, + PIXCMAP *cmap, + l_int32 mindepth, + l_int32 level, + l_int32 metric) +{ +l_int32 d; + + PROCNAME("pixQuantFromCmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (mindepth != 2 && mindepth != 4 && mindepth != 8) + return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); + d = pixGetDepth(pixs); + if (d == 8) + return pixGrayQuantFromCmap(pixs, cmap, mindepth); + else if (d == 32) + return pixOctcubeQuantFromCmap(pixs, cmap, mindepth, + level, metric); + else + return (PIX *)ERROR_PTR("d not 8 or 32 bpp", procName, NULL); +} + + + +/*! + * \brief pixOctcubeQuantFromCmap() + * + * \param[in] pixs 32 bpp rgb + * \param[in] cmap to quantize to; insert copy into dest pix + * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp + * \param[in] level of octcube used for finding nearest color in cmap + * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE + * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error + * + *
+ * Notes:
+ *      (1) In typical use, we are doing an operation, such as
+ *          interpolative scaling, on a colormapped pix, where it is
+ *          necessary to remove the colormap before the operation.
+ *          We then want to re-quantize the RGB result using the same
+ *          colormap.
+ *      (2) The level is used to divide the color space into octcubes.
+ *          Each input pixel is, in effect, placed at the center of an
+ *          octcube at the given level, and it is mapped into the
+ *          exact color (given in the colormap) that is the closest
+ *          to that location.  We need to know that distance, for each color
+ *          in the colormap.  The higher the level of the octtree, the smaller
+ *          the octcubes in the color space, and hence the more accurately
+ *          we can determine the closest color in the colormap; however,
+ *          the size of the LUT, which is the total number of octcubes,
+ *          increases by a factor of 8 for each increase of 1 level.
+ *          The time required to acquire a level 4 mapping table, which has
+ *          about 4K entries, is less than 1 msec, so that is the
+ *          recommended minimum size to be used.  At that size, the
+ *          octcubes have their centers 16 units apart in each (r,g,b)
+ *          direction.  If two colors are in the same octcube, the one
+ *          closest to the center will always be chosen.  The maximum
+ *          error for any component occurs when the correct color is
+ *          at a cube corner and there is an incorrect color just inside
+ *          the cube next to the opposite corner, giving an error of
+ *          14 units (out of 256) for each component.   Using a level 5
+ *          mapping table reduces the maximum error to 6 units.
+ *      (3) Typically you should use the Euclidean metric, because the
+ *          resulting voronoi cells (which are generated using the actual
+ *          colormap values as seeds) are convex for Euclidean distance
+ *          but not for Manhattan distance.  In terms of the octcubes,
+ *          convexity of the voronoi cells means that if the 8 corners
+ *          of any cube (of which the octcubes are special cases)
+ *          are all within a cell, then every point in the cube will
+ *          lie within the cell.
+ *      (4) The depth of the output pixd is equal to the maximum of
+ *          (a) %mindepth and (b) the minimum (2, 4 or 8 bpp) necessary
+ *          to hold the indices in the colormap.
+ *      (5) We build a mapping table from octcube to colormap index so
+ *          that this function can run in a time (otherwise) independent
+ *          of the number of colors in the colormap.  This avoids a
+ *          brute-force search for the closest colormap color to each
+ *          pixel in the image.
+ *      (6) This is similar to the function pixAssignToNearestColor()
+ *          used for color segmentation.
+ *      (7) Except for very small images or when using level > 4,
+ *          it takes very little time to generate the tables,
+ *          compared to the generation of the colormapped dest pix,
+ *          so one would not typically use the low-level version.
+ * 
+ */ +PIX * +pixOctcubeQuantFromCmap(PIX *pixs, + PIXCMAP *cmap, + l_int32 mindepth, + l_int32 level, + l_int32 metric) +{ +l_int32 *cmaptab; +l_uint32 *rtab, *gtab, *btab; +PIX *pixd; + + PROCNAME("pixOctcubeQuantFromCmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (!cmap) + return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); + if (mindepth != 2 && mindepth != 4 && mindepth != 8) + return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); + if (level < 1 || level > 6) + return (PIX *)ERROR_PTR("level not in {1...6}", procName, NULL); + if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) + return (PIX *)ERROR_PTR("invalid metric", procName, NULL); + + /* Set up the tables to map rgb to the nearest colormap index */ + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + cmaptab = pixcmapToOctcubeLUT(cmap, level, metric); + + pixd = pixOctcubeQuantFromCmapLUT(pixs, cmap, mindepth, + cmaptab, rtab, gtab, btab); + + LEPT_FREE(cmaptab); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return pixd; +} + + +/*! + * \brief pixOctcubeQuantFromCmapLUT() + * + * \param[in] pixs 32 bpp rgb + * \param[in] cmap to quantize to; insert copy into dest pix + * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp + * \param[in] cmaptab table mapping from octindex to colormap index + * \param[in] rtab, gtab, btab tables mapping from RGB to octindex + * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error + * + *
+ * Notes:
+ *      (1) See the notes in the higher-level function
+ *          pixOctcubeQuantFromCmap().  The octcube level for
+ *          the generated octree is specified there, along with
+ *          the distance metric for determining the closest
+ *          color in the colormap to each octcube.
+ *      (2) If the colormap, level and metric information have already
+ *          been used to construct the set of mapping tables,
+ *          this low-level function can be used directly (i.e.,
+ *          independently of pixOctcubeQuantFromCmap()) to build
+ *          a colormapped pix that uses the specified colormap.
+ * 
+ */ +static PIX * +pixOctcubeQuantFromCmapLUT(PIX *pixs, + PIXCMAP *cmap, + l_int32 mindepth, + l_int32 *cmaptab, + l_uint32 *rtab, + l_uint32 *gtab, + l_uint32 *btab) +{ +l_int32 i, j, w, h, depth, wpls, wpld; +l_int32 rval, gval, bval, index; +l_uint32 octindex; +l_uint32 *lines, *lined, *datas, *datad; +PIX *pixd; +PIXCMAP *cmapc; + + PROCNAME("pixOctcubeQuantFromCmapLUT"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (!cmap) + return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); + if (mindepth != 2 && mindepth != 4 && mindepth != 8) + return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); + if (!rtab || !gtab || !btab || !cmaptab) + return (PIX *)ERROR_PTR("tables not all defined", procName, NULL); + + /* Init dest pix (with minimum bpp depending on cmap) */ + pixcmapGetMinDepth(cmap, &depth); + depth = L_MAX(depth, mindepth); + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, depth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmapc = pixcmapCopy(cmap); + pixSetColormap(pixd, cmapc); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Insert the colormap index of the color nearest to the input pixel */ + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + /* Map from rgb to octcube index */ + getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, + &octindex); + /* Map from octcube index to nearest colormap index */ + index = cmaptab[octindex]; + if (depth == 2) + SET_DATA_DIBIT(lined, j, index); + else if (depth == 4) + SET_DATA_QBIT(lined, j, index); + else /* depth == 8 */ + SET_DATA_BYTE(lined, j, index); + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Generation of octcube histogram * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixOctcubeHistogram() + * + * \param[in] pixs 32 bpp rgb + * \param[in] level significant bits for each of RGB; valid in [1...6] + * \param[out] pncolors [optional] number of occupied cubes + * \return numa histogram of color pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) Input NULL for &ncolors to prevent computation and return value.
+ * 
+ */ +NUMA * +pixOctcubeHistogram(PIX *pixs, + l_int32 level, + l_int32 *pncolors) +{ +l_int32 size, i, j, w, h, wpl, ncolors, val; +l_int32 rval, gval, bval; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *data, *line; +l_float32 *array; +NUMA *na; + + PROCNAME("pixOctcubeHistogram"); + + if (pncolors) *pncolors = 0; + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (NUMA *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + + if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ + return (NUMA *)ERROR_PTR("size not returned", procName, NULL); + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + + if ((na = numaCreate(size)) == NULL) { + L_ERROR("na not made\n", procName); + goto cleanup_arrays; + } + numaSetCount(na, size); + array = numaGetFArray(na, L_NOCOPY); + + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; +#if DEBUG_OCTINDEX + if ((level == 1 && octindex > 7) || + (level == 2 && octindex > 63) || + (level == 3 && octindex > 511) || + (level == 4 && octindex > 4097) || + (level == 5 && octindex > 32783) || + (level == 6 && octindex > 262271)) { + fprintf(stderr, "level = %d, octindex = %d, index error!\n", + level, octindex); + continue; + } +#endif /* DEBUG_OCTINDEX */ + array[octindex] += 1.0; + } + } + + if (pncolors) { + for (i = 0, ncolors = 0; i < size; i++) { + numaGetIValue(na, i, &val); + if (val > 0) + ncolors++; + } + *pncolors = ncolors; + } + +cleanup_arrays: + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return na; +} + + +/*------------------------------------------------------------------* + * Get filled octcube table from colormap * + *------------------------------------------------------------------*/ +/*! + * \brief pixcmapToOctcubeLUT() + * + * \param[in] cmap + * \param[in] level significant bits for each of RGB; valid in [1...6] + * \param[in] metric L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE + * \return tab[2**3 * level] + * + *
+ * Notes:
+ *      (1) This function is used to quickly find the colormap color
+ *          that is closest to any rgb color.  It is used to assign
+ *          rgb colors to an existing colormap.  It can be very expensive
+ *          to search through the entire colormap for the closest color
+ *          to each pixel.  Instead, we first set up this table, which is
+ *          populated by the colormap index nearest to each octcube
+ *          color.  Then we go through the image; for each pixel,
+ *          do two table lookups: first to generate the octcube index
+ *          from rgb and second to use this table to read out the
+ *          colormap index.
+ *      (2) Do a slight modification for white and black.  For level = 4,
+ *          each octcube size is 16.  The center of the whitest octcube
+ *          is at (248, 248, 248), which is closer to 242 than 255.
+ *          Consequently, any gray color between 242 and 254 will
+ *          be selected, even if white (255, 255, 255) exists.  This is
+ *          typically not optimal, because the original color was
+ *          likely white.  Therefore, if white exists in the colormap,
+ *          use it for any rgb color that falls into the most white octcube.
+ *          Do the similar thing for black.
+ *      (3) Here are the actual function calls for quantizing to a
+ *          specified colormap:
+ *            ~ first make the tables that map from rgb --> octcube index
+ *                     makeRGBToIndexTables()
+ *            ~ then for each pixel:
+ *                * use the tables to get the octcube index
+ *                     getOctcubeIndexFromRGB()
+ *                * use this table to get the nearest color in the colormap
+ *                     cmap_index = tab[index]
+ *      (4) Distance can be either manhattan or euclidean.
+ *      (5) In typical use, level = 4 gives reasonable results, and
+ *          level = 5 is slightly better.  When this function is used
+ *          for color segmentation, there are typically a small number
+ *          of colors and the number of levels can be small (e.g., level = 3).
+ * 
+ */ +l_int32 * +pixcmapToOctcubeLUT(PIXCMAP *cmap, + l_int32 level, + l_int32 metric) +{ +l_int32 i, k, size, ncolors, mindist, dist, mincolor, index; +l_int32 rval, gval, bval; /* color at center of the octcube */ +l_int32 *rmap, *gmap, *bmap, *tab; + + PROCNAME("pixcmapToOctcubeLUT"); + + if (!cmap) + return (l_int32 *)ERROR_PTR("cmap not defined", procName, NULL); + if (level < 1 || level > 6) + return (l_int32 *)ERROR_PTR("level not in {1...6}", procName, NULL); + if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) + return (l_int32 *)ERROR_PTR("invalid metric", procName, NULL); + + if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ + return (l_int32 *)ERROR_PTR("size not returned", procName, NULL); + if ((tab = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) + return (l_int32 *)ERROR_PTR("tab not allocated", procName, NULL); + + ncolors = pixcmapGetCount(cmap); + pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); + + /* Assign based on the closest octcube center to the cmap color */ + for (i = 0; i < size; i++) { + getRGBFromOctcube(i, level, &rval, &gval, &bval); + mindist = 1000000; + mincolor = 0; /* irrelevant init */ + for (k = 0; k < ncolors; k++) { + if (metric == L_MANHATTAN_DISTANCE) { + dist = L_ABS(rval - rmap[k]) + L_ABS(gval - gmap[k]) + + L_ABS(bval - bmap[k]); + } else { /* L_EUCLIDEAN_DISTANCE */ + dist = (rval - rmap[k]) * (rval - rmap[k]) + + (gval - gmap[k]) * (gval - gmap[k]) + + (bval - bmap[k]) * (bval - bmap[k]); + } + if (dist < mindist) { + mindist = dist; + mincolor = k; + } + } + tab[i] = mincolor; + } + + /* Reset black and white if available in the colormap. + * The darkest octcube is at octindex 0. + * The lightest octcube is at the max octindex. */ + pixcmapGetNearestIndex(cmap, 0, 0, 0, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval < 7 && gval < 7 && bval < 7) { + tab[0] = index; + } + pixcmapGetNearestIndex(cmap, 255, 255, 255, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval > 248 && gval > 248 && bval > 248) { + tab[(1 << (3 * level)) - 1] = index; + } + + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + return tab; +} + + +/*------------------------------------------------------------------* + * Strip out unused elements in colormap * + *------------------------------------------------------------------*/ +/*! + * \brief pixRemoveUnusedColors() + * + * \param[in] pixs colormapped + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) If the image doesn't have a colormap, returns without error.
+ *      (3) Unusued colors are removed from the colormap, and the
+ *          image pixels are re-numbered.
+ * 
+ */ +l_ok +pixRemoveUnusedColors(PIX *pixs) +{ +l_int32 i, j, w, h, d, nc, wpls, val, newval, index, zerofound; +l_int32 rval, gval, bval; +l_uint32 *datas, *lines; +l_int32 *histo, *map1, *map2; +PIXCMAP *cmap, *cmapd; + + PROCNAME("pixRemoveUnusedColors"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return 0; + + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return ERROR_INT("d not in {2, 4, 8}", procName, 1); + + /* Find which indices are actually used */ + nc = pixcmapGetCount(cmap); + if ((histo = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32))) == NULL) + return ERROR_INT("histo not made", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + switch (d) + { + case 2: + val = GET_DATA_DIBIT(lines, j); + break; + case 4: + val = GET_DATA_QBIT(lines, j); + break; + case 8: + val = GET_DATA_BYTE(lines, j); + break; + default: + LEPT_FREE(histo); + return ERROR_INT("switch ran off end!", procName, 1); + } + if (val >= nc) { + L_WARNING("cmap index out of bounds!\n", procName); + continue; + } + histo[val]++; + } + } + + /* Check if there are any zeroes. If none, quit. */ + zerofound = FALSE; + for (i = 0; i < nc; i++) { + if (histo[i] == 0) { + zerofound = TRUE; + break; + } + } + if (!zerofound) { + LEPT_FREE(histo); + return 0; + } + + /* Generate mapping tables between indices */ + map1 = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32)); + map2 = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32)); + index = 0; + for (i = 0; i < nc; i++) { + if (histo[i] != 0) { + map1[index] = i; /* get old index from new */ + map2[i] = index; /* get new index from old */ + index++; + } + } + + /* Generate new colormap and attach to pixs */ + cmapd = pixcmapCreate(d); + for (i = 0; i < index; i++) { + pixcmapGetColor(cmap, map1[i], &rval, &gval, &bval); + pixcmapAddColor(cmapd, rval, gval, bval); + } + pixSetColormap(pixs, cmapd); + + /* Map pixel (index) values to new cmap */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + switch (d) + { + case 2: + val = GET_DATA_DIBIT(lines, j); + newval = map2[val]; + SET_DATA_DIBIT(lines, j, newval); + break; + case 4: + val = GET_DATA_QBIT(lines, j); + newval = map2[val]; + SET_DATA_QBIT(lines, j, newval); + break; + case 8: + val = GET_DATA_BYTE(lines, j); + newval = map2[val]; + SET_DATA_BYTE(lines, j, newval); + break; + default: + LEPT_FREE(histo); + LEPT_FREE(map1); + LEPT_FREE(map2); + return ERROR_INT("switch ran off end!", procName, 1); + } + } + } + + LEPT_FREE(histo); + LEPT_FREE(map1); + LEPT_FREE(map2); + return 0; +} + + +/*------------------------------------------------------------------* + * Find number of occupied octcubes at the specified level * + *------------------------------------------------------------------*/ +/*! + * \brief pixNumberOccupiedOctcubes() + * + * \param[in] pix 32 bpp + * \param[in] level of octcube + * \param[in] mincount minimum num pixels in an octcube to be counted; + * -1 to not use + * \param[in] minfract minimum fract of pixels in an octcube to be + * counted; -1 to not use + * \param[out] pncolors number of occupied octcubes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Exactly one of (%mincount, %minfract) must be -1, so, e.g.,
+ *          if %mincount == -1, then we use %minfract.
+ *      (2) If all occupied octcubes are to count, set %mincount == 1.
+ *          Setting %minfract == 0.0 is taken to mean the same thing.
+ * 
+ */ +l_ok +pixNumberOccupiedOctcubes(PIX *pix, + l_int32 level, + l_int32 mincount, + l_float32 minfract, + l_int32 *pncolors) +{ +l_int32 i, j, w, h, d, wpl, ncolors, size, octindex; +l_int32 rval, gval, bval; +l_int32 *carray; +l_uint32 *data, *line, *rtab, *gtab, *btab; + + PROCNAME("pixNumberOccupiedOctcubes"); + + if (!pncolors) + return ERROR_INT("&ncolors not defined", procName, 1); + *pncolors = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 32) + return ERROR_INT("pix not 32 bpp", procName, 1); + if (level < 1 || level > 6) + return ERROR_INT("invalid level", procName, 1); + if ((mincount < 0 && minfract < 0) || (mincount >= 0.0 && minfract >= 0.0)) + return ERROR_INT("invalid mincount/minfract", procName, 1); + if (mincount == 0 || minfract == 0.0) + mincount = 1; + else if (minfract > 0.0) + mincount = L_MIN(1, (l_int32)(minfract * w * h)); + + if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ + return ERROR_INT("size not returned", procName, 1); + rtab = gtab = btab = NULL; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + if ((carray = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) { + L_ERROR("carray not made\n", procName); + goto cleanup_arrays; + } + + /* Mark the occupied octcube leaves */ + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + octindex = rtab[rval] | gtab[gval] | btab[bval]; + carray[octindex]++; + } + } + + /* Count them */ + for (i = 0, ncolors = 0; i < size; i++) { + if (carray[i] >= mincount) + ncolors++; + } + *pncolors = ncolors; + +cleanup_arrays: + LEPT_FREE(carray); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/colorquant2.c b/3rdparty/hgOCR/leptonica/colorquant2.c new file mode 100644 index 00000000..0650b797 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colorquant2.c @@ -0,0 +1,1674 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colorquant2.c + *
+ *
+ *  Modified median cut color quantization
+ *
+ *      High level
+ *          PIX              *pixMedianCutQuant()
+ *          PIX              *pixMedianCutQuantGeneral()
+ *          PIX              *pixMedianCutQuantMixed()
+ *          PIX              *pixFewColorsMedianCutQuantMixed()
+ *
+ *      Median cut indexed histogram
+ *          l_int32          *pixMedianCutHisto()
+ *
+ *      Static helpers
+ *          static PIXCMAP   *pixcmapGenerateFromHisto()
+ *          static PIX       *pixQuantizeWithColormap()
+ *          static void       getColorIndexMedianCut()
+ *          static L_BOX3D   *pixGetColorRegion()
+ *          static l_int32    medianCutApply()
+ *          static PIXCMAP   *pixcmapGenerateFromMedianCuts()
+ *          static l_int32    vboxGetAverageColor()
+ *          static l_int32    vboxGetCount()
+ *          static l_int32    vboxGetVolume()
+ *          static L_BOX3D   *box3dCreate();
+ *          static L_BOX3D   *box3dCopy();
+ *
+ *   Paul Heckbert published the median cut algorithm, "Color Image
+ *   Quantization for Frame Buffer Display," in Proc. SIGGRAPH '82,
+ *   Boston, July 1982, pp. 297-307.  See:
+ *   http://delivery.acm.org/10.1145/810000/801294/p297-heckbert.pdf
+ *
+ *   Median cut starts with either the full color space or the occupied
+ *   region of color space.  If you're not dithering, the occupied region
+ *   can be used, but with dithering, pixels can end up in any place
+ *   in the color space, so you must represent the entire color space in
+ *   the final colormap.
+ *
+ *   Color components are quantized to typically 5 or 6 significant
+ *   bits (for each of r, g and b).   Call a 3D region of color
+ *   space a 'vbox'.  Any color in this quantized space is represented
+ *   by an element of a linear histogram array, indexed by rgb value.
+ *   The initial region is then divided into two regions that have roughly
+ *   equal pixel occupancy (hence the name "median cut").  Subdivision
+ *   continues until the requisite number of vboxes has been generated.
+ *
+ *   But the devil is in the details of the subdivision process.
+ *   Here are some choices that you must make:
+ *     (1) Along which axis to subdivide?
+ *     (2) Which box to put the bin with the median pixel?
+ *     (3) How to order the boxes for subdivision?
+ *     (4) How to adequately handle boxes with very small numbers of pixels?
+ *     (5) How to prevent a little-represented but highly visible color
+ *         from being masked out by other colors in its vbox.
+ *
+ *   Taking these in order:
+ *     (1) Heckbert suggests using either the largest vbox side, or the vbox
+ *         side with the largest variance in pixel occupancy.  We choose
+ *         to divide based on the largest vbox side.
+ *     (2) Suppose you've chosen a side.  Then you have a histogram
+ *         of pixel occupancy in 2D slices of the vbox.  One of those
+ *         slices includes the median pixel.  Suppose there are L bins
+ *         to the left (smaller index) and R bins to the right.  Then
+ *         this slice (or bin) should be assigned to the box containing
+ *         the smaller of L and R.  This both shortens the larger
+ *         of the subdivided dimensions and helps a low-count color
+ *         far from the subdivision boundary to better express itself.
+ *     (2a) One can also ask if the boundary should be moved even
+ *         farther into the longer side.  This is feasible if we have
+ *         a method for doing extra subdivisions on the high count
+ *         vboxes.  And we do (see (3)).
+ *     (3) To make sure that the boxes are subdivided toward equal
+ *         occupancy, use an occupancy-sorted priority queue, rather
+ *         than a simple queue.
+ *     (4) With a priority queue, boxes with small number of pixels
+ *         won't be repeatedly subdivided.  This is good.
+ *     (5) Use of a priority queue allows tricks such as in (2a) to let
+ *         small occupancy clusters be better expressed.  In addition,
+ *         rather than splitting near the median, small occupancy colors
+ *         are best reproduced by cutting half-way into the longer side.
+ *
+ *   However, serious problems can arise with dithering if a priority
+ *   queue is used based on population alone.  If the picture has
+ *   large regions of nearly constant color, some vboxes can be very
+ *   large and have a sizeable population (but not big enough to get to
+ *   the head of the queue).  If one of these large, occupied vboxes
+ *   is near in color to a nearly constant color region of the
+ *   image, dithering can inject pixels from the large vbox into
+ *   the nearly uniform region.  These pixels can be very far away
+ *   in color, and the oscillations are highly visible.  To prevent
+ *   this, we can take either or both of these actions:
+ *
+ *     (1) Subdivide a fraction (< 1.0) based on population, and
+ *         do the rest of the subdivision based on the product of
+ *         the vbox volume and its population.  By using the product,
+ *         we avoid further subdivision of nearly empty vboxes, and
+ *         directly target large vboxes with significant population.
+ *
+ *     (2) Threshold the excess color transferred in dithering to
+ *         neighboring pixels.
+ *
+ *   Doing either of these will stop the most annoying oscillations
+ *   in dithering.  Furthermore, by doing (1), we also improve the
+ *   rendering of regions of nearly constant color, both with and
+ *   without dithering.  It turns out that the image quality is
+ *   not sensitive to the value of the parameter in (1); values
+ *   between 0.3 and 0.9 give very good results.
+ *
+ *   Here's the lesson: subdivide the color space into vboxes such
+ *   that (1) the most populated vboxes that can be further
+ *   subdivided (i.e., that occupy more than one quantum volume
+ *   in color space) all have approximately the same population,
+ *   and (2) all large vboxes have no significant population.
+ *   If these conditions are met, the quantization will be excellent.
+ *
+ *   Once the subdivision has been made, the colormap is generated,
+ *   with one color for each vbox and using the average color in the vbox.
+ *   At the same time, the histogram array is converted to an inverse
+ *   colormap table, storing the colormap index in every cell in the
+ *   vbox.  Finally, using both the colormap and the inverse colormap,
+ *   a colormapped pix is quickly generated from the original rgb pix.
+ *
+ *   In the present implementation, subdivided regions of colorspace
+ *   that are not occupied are retained, but not further subdivided.
+ *   This is required for our inverse colormap lookup table for
+ *   dithering, because dithered pixels may fall into these unoccupied
+ *   regions.  For such empty regions, we use the center as the rgb
+ *   colormap value.
+ *
+ *   This variation on median cut can be referred to as "Modified Median
+ *   Cut" quantization, or MMCQ.  Overall, the undithered MMCQ gives
+ *   comparable results to the two-pass Octcube Quantizer (OQ).
+ *   Comparing the two methods on the test24.jpg painting, we see:
+ *
+ *     (1) For rendering spot color (the various reds and pinks in
+ *         the image), MMCQ is not as good as OQ.
+ *
+ *     (2) For rendering majority color regions, MMCQ does a better
+ *         job of avoiding posterization.  That is, it does better
+ *         dividing the color space up in the most heavily populated regions.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Median cut 3-d volume element. Sort on first element, which + * can be the number of pixels, the volume or a combination + * of these. */ +struct L_Box3d +{ + l_float32 sortparam; /* parameter on which to sort the vbox */ + l_int32 npix; /* number of pixels in the vbox */ + l_int32 vol; /* quantized volume of vbox */ + l_int32 r1; /* min r index in the vbox */ + l_int32 r2; /* max r index in the vbox */ + l_int32 g1; /* min g index in the vbox */ + l_int32 g2; /* max g index in the vbox */ + l_int32 b1; /* min b index in the vbox */ + l_int32 b2; /* max b index in the vbox */ +}; +typedef struct L_Box3d L_BOX3D; + + /* Static median cut helper functions */ +static PIXCMAP *pixcmapGenerateFromHisto(PIX *pixs, l_int32 depth, + l_int32 *histo, l_int32 histosize, + l_int32 sigbits); +static PIX *pixQuantizeWithColormap(PIX *pixs, l_int32 ditherflag, + l_int32 outdepth, + PIXCMAP *cmap, l_int32 *indexmap, + l_int32 mapsize, l_int32 sigbits); +static void getColorIndexMedianCut(l_uint32 pixel, l_int32 rshift, + l_uint32 mask, l_int32 sigbits, + l_int32 *pindex); +static L_BOX3D *pixGetColorRegion(PIX *pixs, l_int32 sigbits, + l_int32 subsample); +static l_int32 medianCutApply(l_int32 *histo, l_int32 sigbits, + L_BOX3D *vbox, L_BOX3D **pvbox1, + L_BOX3D **pvbox2); +static PIXCMAP *pixcmapGenerateFromMedianCuts(L_HEAP *lh, l_int32 *histo, + l_int32 sigbits); +static l_int32 vboxGetAverageColor(L_BOX3D *vbox, l_int32 *histo, + l_int32 sigbits, l_int32 index, + l_int32 *prval, l_int32 *pgval, + l_int32 *pbval); +static l_int32 vboxGetCount(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits); +static l_int32 vboxGetVolume(L_BOX3D *vbox); +static L_BOX3D *box3dCreate(l_int32 r1, l_int32 r2, l_int32 g1, + l_int32 g2, l_int32 b1, l_int32 b2); +static L_BOX3D *box3dCopy(L_BOX3D *vbox); + + + /* 5 significant bits for each component is generally satisfactory */ +static const l_int32 DefaultSigBits = 5; +static const l_int32 MaxItersAllowed = 5000; /* prevents infinite looping */ + + /* Specify fraction of vboxes made that are sorted on population alone. + * The remaining vboxes are sorted on (population * vbox-volume). */ +static const l_float32 FractByPopulation = 0.85; + + /* To get the max value of 'dif' in the dithering color transfer, + * divide DifCap by 8. */ +static const l_int32 DifCap = 100; + + +#ifndef NO_CONSOLE_IO +#define DEBUG_MC_COLORS 0 +#define DEBUG_SPLIT_AXES 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------------* + * High level * + *------------------------------------------------------------------------*/ +/*! + * \brief pixMedianCutQuant() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] ditherflag 1 for dither; 0 for no dither + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Simple interface.  See pixMedianCutQuantGeneral() for
+ *          use of defaulted parameters.
+ * 
+ */ +PIX * +pixMedianCutQuant(PIX *pixs, + l_int32 ditherflag) +{ + return pixMedianCutQuantGeneral(pixs, ditherflag, + 0, 256, DefaultSigBits, 1, 1); +} + + +/*! + * \brief pixMedianCutQuantGeneral() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] ditherflag 1 for dither; 0 for no dither + * \param[in] outdepth output depth; valid: 0, 1, 2, 4, 8 + * \param[in] maxcolors between 2 and 256 + * \param[in] sigbits valid: 5 or 6; use 0 for default + * \param[in] maxsub max subsampling, integer; use 0 for default; + * 1 for no subsampling + * \param[in] checkbw 1 to check if color content is very small, + * 0 to assume there is sufficient color + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) %maxcolors must be in the range [2 ... 256].
+ *      (2) Use %outdepth = 0 to have the output depth computed as the
+ *          minimum required to hold the actual colors found, given
+ *          the %maxcolors constraint.
+ *      (3) Use %outdepth = 1, 2, 4 or 8 to specify the output depth.
+ *          In that case, %maxcolors must not exceed 2^(outdepth).
+ *      (4) If there are fewer quantized colors in the image than %maxcolors,
+ *          the colormap is simply generated from those colors.
+ *      (5) %maxsub is the maximum allowed subsampling to be used in the
+ *          computation of the color histogram and region of occupied
+ *          color space.  The subsampling is chosen internally for
+ *          efficiency, based on the image size, but this parameter
+ *          limits it.  Use %maxsub = 0 for the internal default, which is the
+ *          maximum allowed subsampling.  Use %maxsub = 1 to prevent
+ *          subsampling.  In general use %maxsub >= 1 to specify the
+ *          maximum subsampling to be allowed, where the actual subsampling
+ *          will be the minimum of this value and the internally
+ *          determined default value.
+ *      (6) If the image appears gray because either most of the pixels
+ *          are gray or most of the pixels are essentially black or white,
+ *          the image is trivially quantized with a grayscale colormap.  The
+ *          reason is that median cut divides the color space into rectangular
+ *          regions, and it does a very poor job if all the pixels are
+ *          near the diagonal of the color space cube.
+ * 
+ */ +PIX * +pixMedianCutQuantGeneral(PIX *pixs, + l_int32 ditherflag, + l_int32 outdepth, + l_int32 maxcolors, + l_int32 sigbits, + l_int32 maxsub, + l_int32 checkbw) +{ +l_int32 i, subsample, histosize, smalln, ncolors, niters, popcolors; +l_int32 w, h, minside, factor, index, rval, gval, bval; +l_int32 *histo; +l_float32 pixfract, colorfract; +L_BOX3D *vbox, *vbox1, *vbox2; +L_HEAP *lh, *lhs; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMedianCutQuantGeneral"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (maxcolors < 2 || maxcolors > 256) + return (PIX *)ERROR_PTR("maxcolors not in [2...256]", procName, NULL); + if (outdepth != 0 && outdepth != 1 && outdepth != 2 && outdepth != 4 && + outdepth != 8) + return (PIX *)ERROR_PTR("outdepth not in {0,1,2,4,8}", procName, NULL); + if (outdepth > 0 && (maxcolors > (1 << outdepth))) + return (PIX *)ERROR_PTR("maxcolors > 2^(outdepth)", procName, NULL); + if (sigbits == 0) + sigbits = DefaultSigBits; + else if (sigbits < 5 || sigbits > 6) + return (PIX *)ERROR_PTR("sigbits not 5 or 6", procName, NULL); + if (maxsub <= 0) + maxsub = 10; /* default will prevail for 10^7 pixels or less */ + + /* Determine if the image has sufficient color content. + * If pixfract << 1, most pixels are close to black or white. + * If colorfract << 1, the pixels that are not near + * black or white have very little color. + * If with little color, quantize with a grayscale colormap. */ + pixGetDimensions(pixs, &w, &h, NULL); + if (checkbw) { + minside = L_MIN(w, h); + factor = L_MAX(1, minside / 400); + pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); + if (pixfract * colorfract < 0.00025) { + L_INFO("\n Pixel fraction neither white nor black = %6.3f" + "\n Color fraction of those pixels = %6.3f" + "\n Quantizing in gray\n", + procName, pixfract, colorfract); + return pixConvertTo8(pixs, 1); + } + } + + /* Compute the color space histogram. Default sampling + * is about 10^5 pixels. */ + if (maxsub == 1) { + subsample = 1; + } else { + subsample = (l_int32)(sqrt((l_float64)(w * h) / 100000.)); + subsample = L_MAX(1, L_MIN(maxsub, subsample)); + } + histo = pixMedianCutHisto(pixs, sigbits, subsample); + histosize = 1 << (3 * sigbits); + + /* See if the number of quantized colors is less than maxcolors */ + ncolors = 0; + smalln = TRUE; + for (i = 0; i < histosize; i++) { + if (histo[i]) + ncolors++; + if (ncolors > maxcolors) { + smalln = FALSE; + break; + } + } + if (smalln) { /* finish up now */ + if (outdepth == 0) { + if (ncolors <= 2) + outdepth = 1; + else if (ncolors <= 4) + outdepth = 2; + else if (ncolors <= 16) + outdepth = 4; + else + outdepth = 8; + } + cmap = pixcmapGenerateFromHisto(pixs, outdepth, + histo, histosize, sigbits); + pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, + histo, histosize, sigbits); + LEPT_FREE(histo); + return pixd; + } + + /* Initial vbox: minimum region in colorspace occupied by pixels */ + if (ditherflag || subsample > 1) /* use full color space */ + vbox = box3dCreate(0, (1 << sigbits) - 1, + 0, (1 << sigbits) - 1, + 0, (1 << sigbits) - 1); + else + vbox = pixGetColorRegion(pixs, sigbits, subsample); + vbox->npix = vboxGetCount(vbox, histo, sigbits); + vbox->vol = vboxGetVolume(vbox); + + /* For a fraction 'popcolors' of the desired 'maxcolors', + * generate median cuts based on population, putting + * everything on a priority queue sorted by population. */ + lh = lheapCreate(0, L_SORT_DECREASING); + lheapAdd(lh, vbox); + ncolors = 1; + niters = 0; + popcolors = (l_int32)(FractByPopulation * maxcolors); + while (1) { + vbox = (L_BOX3D *)lheapRemove(lh); + if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ + lheapAdd(lh, vbox); + continue; + } + medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); + if (!vbox1) { + L_WARNING("vbox1 not defined; shouldn't happen!\n", procName); + break; + } + if (vbox1->vol > 1) + vbox1->sortparam = vbox1->npix; + LEPT_FREE(vbox); + lheapAdd(lh, vbox1); + if (vbox2) { /* vbox2 can be NULL */ + if (vbox2->vol > 1) + vbox2->sortparam = vbox2->npix; + lheapAdd(lh, vbox2); + ncolors++; + } + if (ncolors >= popcolors) + break; + if (niters++ > MaxItersAllowed) { + L_WARNING("infinite loop; perhaps too few pixels!\n", procName); + break; + } + } + + /* Re-sort by the product of pixel occupancy times the size + * in color space. */ + lhs = lheapCreate(0, L_SORT_DECREASING); + while ((vbox = (L_BOX3D *)lheapRemove(lh))) { + vbox->sortparam = vbox->npix * vbox->vol; + lheapAdd(lhs, vbox); + } + lheapDestroy(&lh, TRUE); + + /* For the remaining (maxcolors - popcolors), generate the + * median cuts using the (npix * vol) sorting. */ + while (1) { + vbox = (L_BOX3D *)lheapRemove(lhs); + if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ + lheapAdd(lhs, vbox); + continue; + } + medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); + if (!vbox1) { + L_WARNING("vbox1 not defined; shouldn't happen!\n", procName); + break; + } + if (vbox1->vol > 1) + vbox1->sortparam = vbox1->npix * vbox1->vol; + LEPT_FREE(vbox); + lheapAdd(lhs, vbox1); + if (vbox2) { /* vbox2 can be NULL */ + if (vbox2->vol > 1) + vbox2->sortparam = vbox2->npix * vbox2->vol; + lheapAdd(lhs, vbox2); + ncolors++; + } + if (ncolors >= maxcolors) + break; + if (niters++ > MaxItersAllowed) { + L_WARNING("infinite loop; perhaps too few pixels!\n", procName); + break; + } + } + + /* Re-sort by pixel occupancy. This is not necessary, + * but it makes a more useful listing. */ + lh = lheapCreate(0, L_SORT_DECREASING); + while ((vbox = (L_BOX3D *)lheapRemove(lhs))) { + vbox->sortparam = vbox->npix; +/* vbox->sortparam = vbox->npix * vbox->vol; */ + lheapAdd(lh, vbox); + } + lheapDestroy(&lhs, TRUE); + + /* Generate colormap from median cuts and quantize pixd */ + cmap = pixcmapGenerateFromMedianCuts(lh, histo, sigbits); + if (outdepth == 0) { + ncolors = pixcmapGetCount(cmap); + if (ncolors <= 2) + outdepth = 1; + else if (ncolors <= 4) + outdepth = 2; + else if (ncolors <= 16) + outdepth = 4; + else + outdepth = 8; + } + pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, + histo, histosize, sigbits); + + /* Force darkest color to black if each component <= 4 */ + pixcmapGetRankIntensity(cmap, 0.0, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval < 5 && gval < 5 && bval < 5) + pixcmapResetColor(cmap, index, 0, 0, 0); + + /* Force lightest color to white if each component >= 252 */ + pixcmapGetRankIntensity(cmap, 1.0, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + if (rval > 251 && gval > 251 && bval > 251) + pixcmapResetColor(cmap, index, 255, 255, 255); + + lheapDestroy(&lh, TRUE); + LEPT_FREE(histo); + return pixd; +} + + +/*! + * \brief pixMedianCutQuantMixed() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] ncolor maximum number of colors assigned to + * pixels with significant color + * \param[in] ngray number of gray colors to be used; must be >= 2 + * \param[in] darkthresh threshold near black; if the lightest component + * is below this, the pixel is not considered to + * be gray or color; uses 0 for default + * \param[in] lightthresh threshold near white; if the darkest component + * is above this, the pixel is not considered to + * be gray or color; use 0 for default + * \param[in] diffthresh thresh for the max difference between component + * values; for differences below this, the pixel + * is considered to be gray; use 0 for default + * \return pixd 8 bpp cmapped, or NULL on error + * + *
+ * Notes:
+ *      (1) ncolor + ngray must not exceed 255.
+ *      (2) The method makes use of pixMedianCutQuantGeneral() with
+ *          minimal addition.
+ *          (a) Preprocess the image, setting all pixels with little color
+ *              to black, and populating an auxiliary 8 bpp image with the
+ *              expected colormap values corresponding to the set of
+ *              quantized gray values.
+ *          (b) Color quantize the altered input image to n + 1 colors.
+ *          (c) Augment the colormap with the gray indices, and
+ *              substitute the gray quantized values from the auxiliary
+ *              image for those in the color quantized output that had
+ *              been quantized as black.
+ *      (3) Median cut color quantization is relatively poor for grayscale
+ *          images with many colors, when compared to octcube quantization.
+ *          Thus, for images with both gray and color, it is important
+ *          to quantize the gray pixels by another method.  Here, we
+ *          are conservative in detecting color, preferring to use
+ *          a few extra bits to encode colorful pixels that push them
+ *          to gray.  This is particularly reasonable with this function,
+ *          because it handles the gray and color pixels separately,
+ *          using median cut color quantization for the color pixels
+ *          and equal-bin grayscale quantization for the non-color pixels.
+ * 
+ */ +PIX * +pixMedianCutQuantMixed(PIX *pixs, + l_int32 ncolor, + l_int32 ngray, + l_int32 darkthresh, + l_int32 lightthresh, + l_int32 diffthresh) +{ +l_int32 i, j, w, h, wplc, wplg, wpld, nc, unused, iscolor, factor, minside; +l_int32 rval, gval, bval, minval, maxval, val, grayval; +l_float32 pixfract, colorfract; +l_int32 *lut; +l_uint32 *datac, *datag, *datad, *linec, *lineg, *lined; +PIX *pixc, *pixg, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMedianCutQuantMixed"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (ngray < 2) + return (PIX *)ERROR_PTR("ngray < 2", procName, NULL); + if (ncolor + ngray > 255) + return (PIX *)ERROR_PTR("ncolor + ngray > 255", procName, NULL); + if (darkthresh <= 0) darkthresh = 20; + if (lightthresh <= 0) lightthresh = 244; + if (diffthresh <= 0) diffthresh = 20; + + /* First check if this should be quantized in gray. + * Use a more sensitive parameter for detecting color than with + * pixMedianCutQuantGeneral(), because this function can handle + * gray pixels well. */ + pixGetDimensions(pixs, &w, &h, NULL); + minside = L_MIN(w, h); + factor = L_MAX(1, minside / 400); + pixColorFraction(pixs, darkthresh, lightthresh, diffthresh, factor, + &pixfract, &colorfract); + if (pixfract * colorfract < 0.0001) { + L_INFO("\n Pixel fraction neither white nor black = %6.3f" + "\n Color fraction of those pixels = %6.3f" + "\n Quantizing in gray\n", + procName, pixfract, colorfract); + pixg = pixConvertTo8(pixs, 0); + pixd = pixThresholdOn8bpp(pixg, ngray, 1); + pixDestroy(&pixg); + return pixd; + } + + /* OK, there is color in the image. + * Preprocess to handle the gray pixels. Set the color pixels in pixc + * to black, and store their (eventual) colormap indices in pixg.*/ + pixc = pixCopy(NULL, pixs); + pixg = pixCreate(w, h, 8); /* color pixels will remain 0 here */ + datac = pixGetData(pixc); + datag = pixGetData(pixg); + wplc = pixGetWpl(pixc); + wplg = pixGetWpl(pixg); + lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) + lut[i] = ncolor + 1 + (i * (ngray - 1) + 128) / 255; + for (i = 0; i < h; i++) { + linec = datac + i * wplc; + lineg = datag + i * wplg; + for (j = 0; j < w; j++) { + iscolor = FALSE; + extractRGBValues(linec[j], &rval, &gval, &bval); + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + if (maxval >= darkthresh && + minval <= lightthresh && + maxval - minval >= diffthresh) { + iscolor = TRUE; + } + if (!iscolor) { + linec[j] = 0x0; /* set to black */ + grayval = (maxval + minval) / 2; + SET_DATA_BYTE(lineg, j, lut[grayval]); + } + } + } + + /* Median cut on color pixels plus black */ + pixd = pixMedianCutQuantGeneral(pixc, FALSE, 8, ncolor + 1, + DefaultSigBits, 1, 0); + + /* Augment the colormap with gray values. The new cmap + * indices should agree with the values previously stored in pixg. */ + cmap = pixGetColormap(pixd); + nc = pixcmapGetCount(cmap); + unused = ncolor + 1 - nc; + if (unused < 0) + L_ERROR("Too many colors: extra = %d\n", procName, -unused); + if (unused > 0) { /* fill in with black; these won't be used */ + L_INFO("%d unused colors\n", procName, unused); + for (i = 0; i < unused; i++) + pixcmapAddColor(cmap, 0, 0, 0); + } + for (i = 0; i < ngray; i++) { + grayval = (255 * i) / (ngray - 1); + pixcmapAddColor(cmap, grayval, grayval, grayval); + } + + /* Substitute cmap indices for the gray pixels into pixd */ + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + lineg = datag + i * wplg; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lineg, j); /* if 0, it's a color pixel */ + if (val) + SET_DATA_BYTE(lined, j, val); + } + } + + pixDestroy(&pixc); + pixDestroy(&pixg); + LEPT_FREE(lut); + return pixd; +} + + +/*! + * \brief pixFewColorsMedianCutQuantMixed() + * + * \param[in] pixs 32 bpp rgb + * \param[in] ncolor number of colors to be assigned to pixels + * with significant color + * \param[in] ngray number of gray colors to be used; must be >= 2 + * \param[in] maxncolors maximum number of colors to be returned from + * pixColorsForQuantization(); use 0 for default + * \param[in] darkthresh threshold near black; if the lightest component + * is below this, the pixel is not considered to + * be gray or color; use 0 for default + * \param[in] lightthresh threshold near white; if the darkest component + * is above this, the pixel is not considered to + * be gray or color; use 0 for default + * \param[in] diffthresh thresh for the max difference between component + * values; for differences below this, the pixel + * is considered to be gray; use 0 for default + * \return pixd 8 bpp, median cut quantized for pixels that are + * not gray; gray pixels are quantized separately over + * the full gray range; null if too many colors or on error + * + *
+ * Notes:
+ *      (1) This is the "few colors" version of pixMedianCutQuantMixed().
+ *          It fails (returns NULL) if it finds more than maxncolors, but
+ *          otherwise it gives the same result.
+ *      (2) Recommended input parameters are:
+ *              %maxncolors:  20
+ *              %darkthresh:  20
+ *              %lightthresh: 244
+ *              %diffthresh:  15  (any higher can miss colors differing
+ *                                 slightly from gray)
+ *      (3) Both ncolor and ngray should be at least equal to maxncolors.
+ *          If they're not, they are automatically increased, and a
+ *          warning is given.
+ *      (4) If very little color content is found, the input is
+ *          converted to gray and quantized in equal intervals.
+ *      (5) This can be useful for quantizing orthographically generated
+ *          images such as color maps, where there may be more than 256 colors
+ *          because of aliasing or jpeg artifacts on text or lines, but
+ *          there are a relatively small number of solid colors.
+ *      (6) Example of usage:
+ *             // Try to quantize, using default values for mixed med cut
+ *             Pix *pixq = pixFewColorsMedianCutQuantMixed(pixs, 100, 20,
+ *                             0, 0, 0, 0);
+ *             if (!pixq)  // too many colors; don't quantize
+ *                 pixq = pixClone(pixs);
+ * 
+ */ +PIX * +pixFewColorsMedianCutQuantMixed(PIX *pixs, + l_int32 ncolor, + l_int32 ngray, + l_int32 maxncolors, + l_int32 darkthresh, + l_int32 lightthresh, + l_int32 diffthresh) +{ +l_int32 ncolors, iscolor; +PIX *pixg, *pixd; + + PROCNAME("pixFewColorsMedianCutQuantMixed"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (maxncolors <= 0) maxncolors = 20; + if (darkthresh <= 0) darkthresh = 20; + if (lightthresh <= 0) lightthresh = 244; + if (diffthresh <= 0) diffthresh = 15; + if (ncolor < maxncolors) { + L_WARNING("ncolor too small; setting to %d\n", procName, maxncolors); + ncolor = maxncolors; + } + if (ngray < maxncolors) { + L_WARNING("ngray too small; setting to %d\n", procName, maxncolors); + ngray = maxncolors; + } + + /* Estimate the color content and the number of colors required */ + pixColorsForQuantization(pixs, 15, &ncolors, &iscolor, 0); + + /* Note that maxncolors applies to all colors required to quantize, + * both gray and colorful */ + if (ncolors > maxncolors) + return (PIX *)ERROR_PTR("too many colors", procName, NULL); + + /* If no color, return quantized gray pix */ + if (!iscolor) { + pixg = pixConvertTo8(pixs, 0); + pixd = pixThresholdOn8bpp(pixg, ngray, 1); + pixDestroy(&pixg); + return pixd; + } + + /* Use the mixed gray/color quantizer */ + return pixMedianCutQuantMixed(pixs, ncolor, ngray, darkthresh, + lightthresh, diffthresh); +} + + + +/*------------------------------------------------------------------------* + * Median cut indexed histogram * + *------------------------------------------------------------------------*/ +/*! + * \brief pixMedianCutHisto() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] sigbits valid: 5 or 6 + * \param[in] subsample integer > 0 + * \return histo 1-d array, giving the number of pixels in each + * quantized region of color space, or NULL on error + * + *
+ * Notes:
+ *      (1) Array is indexed by (3 * sigbits) bits.  The array size
+ *          is 2^(3 * sigbits).
+ *      (2) Indexing into the array from rgb uses red sigbits as
+ *          most significant and blue as least.
+ * 
+ */ +l_int32 * +pixMedianCutHisto(PIX *pixs, + l_int32 sigbits, + l_int32 subsample) +{ +l_int32 i, j, w, h, wpl, rshift, index, histosize; +l_int32 *histo; +l_uint32 mask, pixel; +l_uint32 *data, *line; + + PROCNAME("pixMedianCutHisto"); + + if (!pixs) + return (l_int32 *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (l_int32 *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (sigbits < 5 || sigbits > 6) + return (l_int32 *)ERROR_PTR("sigbits not 5 or 6", procName, NULL); + if (subsample <= 0) + return (l_int32 *)ERROR_PTR("subsample not > 0", procName, NULL); + + histosize = 1 << (3 * sigbits); + if ((histo = (l_int32 *)LEPT_CALLOC(histosize, sizeof(l_int32))) == NULL) + return (l_int32 *)ERROR_PTR("histo not made", procName, NULL); + + rshift = 8 - sigbits; + mask = 0xff >> rshift; + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i += subsample) { + line = data + i * wpl; + for (j = 0; j < w; j += subsample) { + pixel = line[j]; + getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); + histo[index]++; + } + } + + return histo; +} + + +/*------------------------------------------------------------------------* + * Static helpers * + *------------------------------------------------------------------------*/ +/*! + * \brief pixcmapGenerateFromHisto() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] depth of colormap + * \param[in] histo + * \param[in] histosize + * \param[in] sigbits + * \return colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) This is used when the number of colors in the histo
+ *          is not greater than maxcolors.
+ *      (2) As a side-effect, the histo becomes an inverse colormap,
+ *          labeling the cmap indices for each existing color.
+ * 
+ */ +static PIXCMAP * +pixcmapGenerateFromHisto(PIX *pixs, + l_int32 depth, + l_int32 *histo, + l_int32 histosize, + l_int32 sigbits) +{ +l_int32 i, index, shift, rval, gval, bval; +l_uint32 mask; +PIXCMAP *cmap; + + PROCNAME("pixcmapGenerateFromHisto"); + + if (!pixs) + return (PIXCMAP *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIXCMAP *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (!histo) + return (PIXCMAP *)ERROR_PTR("histo not defined", procName, NULL); + + /* Capture the rgb values of each occupied cube in the histo, + * and re-label the histo value with the colormap index. */ + cmap = pixcmapCreate(depth); + shift = 8 - sigbits; + mask = 0xff >> shift; + for (i = 0, index = 0; i < histosize; i++) { + if (histo[i]) { + rval = (i >> (2 * sigbits)) << shift; + gval = ((i >> sigbits) & mask) << shift; + bval = (i & mask) << shift; + pixcmapAddColor(cmap, rval, gval, bval); + histo[i] = index++; + } + } + + return cmap; +} + + +/*! + * \brief pixQuantizeWithColormap() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] ditherflag 1 for dither; 0 for no dither + * \param[in] outdepth depth of the returned pixd + * \param[in] cmap colormap + * \param[in] indexmap lookup table + * \param[in] mapsize size of the lookup table + * \param[in] sigbits significant bits in output + * \return pixd quantized to colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) The indexmap is a LUT that takes the rgb indices of the
+ *          pixel and returns the index into the colormap.
+ *      (2) If ditherflag is 1, %outdepth is ignored and the output
+ *          depth is set to 8.
+ * 
+ */ +static PIX * +pixQuantizeWithColormap(PIX *pixs, + l_int32 ditherflag, + l_int32 outdepth, + PIXCMAP *cmap, + l_int32 *indexmap, + l_int32 mapsize, + l_int32 sigbits) +{ +l_uint8 *bufu8r, *bufu8g, *bufu8b; +l_int32 i, j, w, h, wpls, wpld, rshift, index, cmapindex, success; +l_int32 rval, gval, bval, rc, gc, bc; +l_int32 dif, val1, val2, val3; +l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; +l_uint32 *datas, *datad, *lines, *lined; +l_uint32 mask, pixel; +PIX *pixd; + + PROCNAME("pixQuantizeWithColormap"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (!cmap) + return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); + if (!indexmap) + return (PIX *)ERROR_PTR("indexmap not defined", procName, NULL); + if (ditherflag) + outdepth = 8; + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, outdepth); + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + rshift = 8 - sigbits; + mask = 0xff >> rshift; + if (ditherflag == 0) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (outdepth == 1) { + for (j = 0; j < w; j++) { + pixel = lines[j]; + getColorIndexMedianCut(pixel, rshift, mask, + sigbits, &index); + if (indexmap[index]) + SET_DATA_BIT(lined, j); + } + } else if (outdepth == 2) { + for (j = 0; j < w; j++) { + pixel = lines[j]; + getColorIndexMedianCut(pixel, rshift, mask, + sigbits, &index); + SET_DATA_DIBIT(lined, j, indexmap[index]); + } + } else if (outdepth == 4) { + for (j = 0; j < w; j++) { + pixel = lines[j]; + getColorIndexMedianCut(pixel, rshift, mask, + sigbits, &index); + SET_DATA_QBIT(lined, j, indexmap[index]); + } + } else { /* outdepth == 8 */ + for (j = 0; j < w; j++) { + pixel = lines[j]; + getColorIndexMedianCut(pixel, rshift, mask, + sigbits, &index); + SET_DATA_BYTE(lined, j, indexmap[index]); + } + } + } + } else { /* ditherflag == 1 */ + success = TRUE; + bufu8r = bufu8g = bufu8b = NULL; + buf1r = buf1g = buf1b = buf2r = buf2g = buf2b = NULL; + bufu8r = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8g = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + bufu8b = (l_uint8 *)LEPT_CALLOC(w, sizeof(l_uint8)); + buf1r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf1b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2r = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2g = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + buf2b = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + if (!bufu8r || !bufu8g || !bufu8b || !buf1r || !buf1g || + !buf1b || !buf2r || !buf2g || !buf2b) { + L_ERROR("buffer not made\n", procName); + success = FALSE; + goto buffer_cleanup; + } + + /* Start by priming buf2; line 1 is above line 2 */ + pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + for (i = 0; i < h - 1; i++) { + /* Swap data 2 --> 1, and read in new line 2 */ + memcpy(buf1r, buf2r, 4 * w); + memcpy(buf1g, buf2g, 4 * w); + memcpy(buf1b, buf2b, 4 * w); + pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); + for (j = 0; j < w; j++) { + buf2r[j] = 64 * bufu8r[j]; + buf2g[j] = 64 * bufu8g[j]; + buf2b[j] = 64 * bufu8b[j]; + } + + /* Dither */ + lined = datad + i * wpld; + for (j = 0; j < w - 1; j++) { + rval = buf1r[j] / 64; + gval = buf1g[j] / 64; + bval = buf1b[j] / 64; + index = ((rval >> rshift) << (2 * sigbits)) + + ((gval >> rshift) << sigbits) + (bval >> rshift); + cmapindex = indexmap[index]; + SET_DATA_BYTE(lined, j, cmapindex); + pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); + + dif = buf1r[j] / 8 - 8 * rc; + if (dif > DifCap) dif = DifCap; + if (dif < -DifCap) dif = -DifCap; + if (dif != 0) { + val1 = buf1r[j + 1] + 3 * dif; + val2 = buf2r[j] + 3 * dif; + val3 = buf2r[j + 1] + 2 * dif; + if (dif > 0) { + buf1r[j + 1] = L_MIN(16383, val1); + buf2r[j] = L_MIN(16383, val2); + buf2r[j + 1] = L_MIN(16383, val3); + } else { + buf1r[j + 1] = L_MAX(0, val1); + buf2r[j] = L_MAX(0, val2); + buf2r[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1g[j] / 8 - 8 * gc; + if (dif > DifCap) dif = DifCap; + if (dif < -DifCap) dif = -DifCap; + if (dif != 0) { + val1 = buf1g[j + 1] + 3 * dif; + val2 = buf2g[j] + 3 * dif; + val3 = buf2g[j + 1] + 2 * dif; + if (dif > 0) { + buf1g[j + 1] = L_MIN(16383, val1); + buf2g[j] = L_MIN(16383, val2); + buf2g[j + 1] = L_MIN(16383, val3); + } else { + buf1g[j + 1] = L_MAX(0, val1); + buf2g[j] = L_MAX(0, val2); + buf2g[j + 1] = L_MAX(0, val3); + } + } + + dif = buf1b[j] / 8 - 8 * bc; + if (dif > DifCap) dif = DifCap; + if (dif < -DifCap) dif = -DifCap; + if (dif != 0) { + val1 = buf1b[j + 1] + 3 * dif; + val2 = buf2b[j] + 3 * dif; + val3 = buf2b[j + 1] + 2 * dif; + if (dif > 0) { + buf1b[j + 1] = L_MIN(16383, val1); + buf2b[j] = L_MIN(16383, val2); + buf2b[j + 1] = L_MIN(16383, val3); + } else { + buf1b[j + 1] = L_MAX(0, val1); + buf2b[j] = L_MAX(0, val2); + buf2b[j + 1] = L_MAX(0, val3); + } + } + } + + /* Get last pixel in row; no downward propagation */ + rval = buf1r[w - 1] / 64; + gval = buf1g[w - 1] / 64; + bval = buf1b[w - 1] / 64; + index = ((rval >> rshift) << (2 * sigbits)) + + ((gval >> rshift) << sigbits) + (bval >> rshift); + SET_DATA_BYTE(lined, w - 1, indexmap[index]); + } + + /* Get last row of pixels; no leftward propagation */ + lined = datad + (h - 1) * wpld; + for (j = 0; j < w; j++) { + rval = buf2r[j] / 64; + gval = buf2g[j] / 64; + bval = buf2b[j] / 64; + index = ((rval >> rshift) << (2 * sigbits)) + + ((gval >> rshift) << sigbits) + (bval >> rshift); + SET_DATA_BYTE(lined, j, indexmap[index]); + } + +buffer_cleanup: + LEPT_FREE(bufu8r); + LEPT_FREE(bufu8g); + LEPT_FREE(bufu8b); + LEPT_FREE(buf1r); + LEPT_FREE(buf1g); + LEPT_FREE(buf1b); + LEPT_FREE(buf2r); + LEPT_FREE(buf2g); + LEPT_FREE(buf2b); + if (!success) pixDestroy(&pixd); + } + + return pixd; +} + + +/*! + * \brief getColorIndexMedianCut() + * + * \param[in] pixel 32 bit rgb + * \param[in] rshift of component: 8 - sigbits + * \param[in] mask over sigbits + * \param[in] sigbits + * \param[out] pindex rgb index value + * \return void + * + *
+ * Notes:
+ *      (1) This is used on each pixel in the source image.  No checking
+ *          is done on input values.
+ * 
+ */ +static void +getColorIndexMedianCut(l_uint32 pixel, + l_int32 rshift, + l_uint32 mask, + l_int32 sigbits, + l_int32 *pindex) +{ +l_int32 rval, gval, bval; + + rval = pixel >> (24 + rshift); + gval = (pixel >> (16 + rshift)) & mask; + bval = (pixel >> (8 + rshift)) & mask; + *pindex = (rval << (2 * sigbits)) + (gval << sigbits) + bval; + return; +} + + +/*! + * \brief pixGetColorRegion() + * + * \param[in] pixs 32 bpp; rgb color + * \param[in] sigbits valid: 5, 6 + * \param[in] subsample integer > 0 + * \return vbox minimum 3D box in color space enclosing all pixels, + * or NULL on error + * + *
+ * Notes:
+ *      (1) Computes the minimum 3D box in color space enclosing all
+ *          pixels in the image.
+ * 
+ */ +static L_BOX3D * +pixGetColorRegion(PIX *pixs, + l_int32 sigbits, + l_int32 subsample) +{ +l_int32 rmin, rmax, gmin, gmax, bmin, bmax, rval, gval, bval; +l_int32 w, h, wpl, i, j, rshift; +l_uint32 mask, pixel; +l_uint32 *data, *line; + + PROCNAME("pixGetColorRegion"); + + if (!pixs) + return (L_BOX3D *)ERROR_PTR("pixs not defined", procName, NULL); + + rmin = gmin = bmin = 1000000; + rmax = gmax = bmax = 0; + rshift = 8 - sigbits; + mask = 0xff >> rshift; + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i += subsample) { + line = data + i * wpl; + for (j = 0; j < w; j += subsample) { + pixel = line[j]; + rval = pixel >> (24 + rshift); + gval = (pixel >> (16 + rshift)) & mask; + bval = (pixel >> (8 + rshift)) & mask; + if (rval < rmin) + rmin = rval; + else if (rval > rmax) + rmax = rval; + if (gval < gmin) + gmin = gval; + else if (gval > gmax) + gmax = gval; + if (bval < bmin) + bmin = bval; + else if (bval > bmax) + bmax = bval; + } + } + + return box3dCreate(rmin, rmax, gmin, gmax, bmin, bmax); +} + + +/*! + * \brief medianCutApply() + * + * \param[in] histo array; in rgb colorspace + * \param[in] sigbits + * \param[in] vbox input 3D box + * \param[out] pvbox1, pvbox2 vbox split in two parts + * \return 0 if OK, 1 on error + */ +static l_int32 +medianCutApply(l_int32 *histo, + l_int32 sigbits, + L_BOX3D *vbox, + L_BOX3D **pvbox1, + L_BOX3D **pvbox2) +{ +l_int32 i, j, k, sum, rw, gw, bw, maxw, index; +l_int32 total, left, right; +l_int32 partialsum[128]; +L_BOX3D *vbox1, *vbox2; + + PROCNAME("medianCutApply"); + + if (pvbox1) *pvbox1 = NULL; + if (pvbox2) *pvbox2 = NULL; + if (!histo) + return ERROR_INT("histo not defined", procName, 1); + if (!vbox) + return ERROR_INT("vbox not defined", procName, 1); + if (!pvbox1 || !pvbox2) + return ERROR_INT("&vbox1 and &vbox2 not both defined", procName, 1); + + if (vboxGetCount(vbox, histo, sigbits) == 0) + return ERROR_INT("no pixels in vbox", procName, 1); + + /* If the vbox occupies just one element in color space, it can't + * be split. Leave the 'sortparam' field at 0, so that it goes to + * the tail of the priority queue and stays there, thereby avoiding + * an infinite loop (take off, put back on the head) if it + * happens to be the most populous box! */ + rw = vbox->r2 - vbox->r1 + 1; + gw = vbox->g2 - vbox->g1 + 1; + bw = vbox->b2 - vbox->b1 + 1; + if (rw == 1 && gw == 1 && bw == 1) { + *pvbox1 = box3dCopy(vbox); + return 0; + } + + /* Select the longest axis for splitting */ + maxw = L_MAX(rw, gw); + maxw = L_MAX(maxw, bw); +#if DEBUG_SPLIT_AXES + if (rw == maxw) + fprintf(stderr, "red split\n"); + else if (gw == maxw) + fprintf(stderr, "green split\n"); + else + fprintf(stderr, "blue split\n"); +#endif /* DEBUG_SPLIT_AXES */ + + /* Find the partial sum arrays along the selected axis. */ + total = 0; + if (maxw == rw) { + for (i = vbox->r1; i <= vbox->r2; i++) { + sum = 0; + for (j = vbox->g1; j <= vbox->g2; j++) { + for (k = vbox->b1; k <= vbox->b2; k++) { + index = (i << (2 * sigbits)) + (j << sigbits) + k; + sum += histo[index]; + } + } + total += sum; + partialsum[i] = total; + } + } else if (maxw == gw) { + for (i = vbox->g1; i <= vbox->g2; i++) { + sum = 0; + for (j = vbox->r1; j <= vbox->r2; j++) { + for (k = vbox->b1; k <= vbox->b2; k++) { + index = (i << sigbits) + (j << (2 * sigbits)) + k; + sum += histo[index]; + } + } + total += sum; + partialsum[i] = total; + } + } else { /* maxw == bw */ + for (i = vbox->b1; i <= vbox->b2; i++) { + sum = 0; + for (j = vbox->r1; j <= vbox->r2; j++) { + for (k = vbox->g1; k <= vbox->g2; k++) { + index = i + (j << (2 * sigbits)) + (k << sigbits); + sum += histo[index]; + } + } + total += sum; + partialsum[i] = total; + } + } + + /* Determine the cut planes, making sure that two vboxes + * are always produced. Generate the two vboxes and compute + * the sum in each of them. Choose the cut plane within + * the greater of the (left, right) sides of the bin in which + * the median pixel resides. Here's the surprise: go halfway + * into that side. By doing that, you technically move away + * from "median cut," but in the process a significant number + * of low-count vboxes are produced, allowing much better + * reproduction of low-count spot colors. */ + vbox1 = vbox2 = NULL; + if (maxw == rw) { + for (i = vbox->r1; i <= vbox->r2; i++) { + if (partialsum[i] > total / 2) { + vbox1 = box3dCopy(vbox); + vbox2 = box3dCopy(vbox); + left = i - vbox->r1; + right = vbox->r2 - i; + if (left <= right) + vbox1->r2 = L_MIN(vbox->r2 - 1, i + right / 2); + else /* left > right */ + vbox1->r2 = L_MAX(vbox->r1, i - 1 - left / 2); + vbox2->r1 = vbox1->r2 + 1; + break; + } + } + } else if (maxw == gw) { + for (i = vbox->g1; i <= vbox->g2; i++) { + if (partialsum[i] > total / 2) { + vbox1 = box3dCopy(vbox); + vbox2 = box3dCopy(vbox); + left = i - vbox->g1; + right = vbox->g2 - i; + if (left <= right) + vbox1->g2 = L_MIN(vbox->g2 - 1, i + right / 2); + else /* left > right */ + vbox1->g2 = L_MAX(vbox->g1, i - 1 - left / 2); + vbox2->g1 = vbox1->g2 + 1; + break; + } + } + } else { /* maxw == bw */ + for (i = vbox->b1; i <= vbox->b2; i++) { + if (partialsum[i] > total / 2) { + vbox1 = box3dCopy(vbox); + vbox2 = box3dCopy(vbox); + left = i - vbox->b1; + right = vbox->b2 - i; + if (left <= right) + vbox1->b2 = L_MIN(vbox->b2 - 1, i + right / 2); + else /* left > right */ + vbox1->b2 = L_MAX(vbox->b1, i - 1 - left / 2); + vbox2->b1 = vbox1->b2 + 1; + break; + } + } + } + *pvbox1 = vbox1; + *pvbox2 = vbox2; + if (!vbox1) + return ERROR_INT("vbox1 not made; shouldn't happen", procName, 1); + if (!vbox2) + return ERROR_INT("vbox2 not made; shouldn't happen", procName, 1); + vbox1->npix = vboxGetCount(vbox1, histo, sigbits); + vbox2->npix = vboxGetCount(vbox2, histo, sigbits); + vbox1->vol = vboxGetVolume(vbox1); + vbox2->vol = vboxGetVolume(vbox2); + + return 0; +} + + +/*! + * \brief pixcmapGenerateFromMedianCuts() + * + * \param[in] lh priority queue of pointers to vboxes + * \param[in] histo + * \param[in] sigbits valid: 5 or 6 + * \return cmap, or NULL on error + * + *
+ * Notes:
+ *      (1) Each vbox in the heap represents a color in the colormap.
+ *      (2) As a side-effect, the histo becomes an inverse colormap,
+ *          where the part of the array correpsonding to each vbox
+ *          is labeled with the cmap index for that vbox.  Then
+ *          for each rgb pixel, the colormap index is found directly
+ *          by mapping the rgb value to the histo array index.
+ * 
+ */ +static PIXCMAP * +pixcmapGenerateFromMedianCuts(L_HEAP *lh, + l_int32 *histo, + l_int32 sigbits) +{ +l_int32 index, rval, gval, bval; +L_BOX3D *vbox; +PIXCMAP *cmap; + + PROCNAME("pixcmapGenerateFromMedianCuts"); + + if (!lh) + return (PIXCMAP *)ERROR_PTR("lh not defined", procName, NULL); + if (!histo) + return (PIXCMAP *)ERROR_PTR("histo not defined", procName, NULL); + + rval = gval = bval = 0; /* make compiler happy */ + cmap = pixcmapCreate(8); + index = 0; + while (lheapGetCount(lh) > 0) { + vbox = (L_BOX3D *)lheapRemove(lh); + vboxGetAverageColor(vbox, histo, sigbits, index, &rval, &gval, &bval); + pixcmapAddColor(cmap, rval, gval, bval); + LEPT_FREE(vbox); + index++; + } + + return cmap; +} + + +/*! + * \brief vboxGetAverageColor() + * + * \param[in] vbox 3d region of color space for one quantized color + * \param[in] histo + * \param[in] sigbits valid: 5 or 6 + * \param[in] index if >= 0, assign to all colors in histo in this vbox + * \param[out] prval, pgval, pbval average color + * \return cmap, or NULL on error + * + *
+ * Notes:
+ *      (1) The vbox represents one color in the colormap.
+ *      (2) If index >= 0, as a side-effect, all array elements in
+ *          the histo corresponding to the vbox are labeled with this
+ *          cmap index for that vbox.  Otherwise, the histo array
+ *          is not changed.
+ *      (3) The vbox is quantized in sigbits.  So the actual 8-bit color
+ *          components are found by multiplying the quantized value
+ *          by either 4 or 8.  We must add 0.5 to the quantized index
+ *          before multiplying to get the approximate 8-bit color in
+ *          the center of the vbox; otherwise we get values on
+ *          the lower corner.
+ * 
+ */ +static l_int32 +vboxGetAverageColor(L_BOX3D *vbox, + l_int32 *histo, + l_int32 sigbits, + l_int32 index, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 i, j, k, ntot, mult, histoindex, rsum, gsum, bsum; + + PROCNAME("vboxGetAverageColor"); + + if (!vbox) + return ERROR_INT("vbox not defined", procName, 1); + if (!histo) + return ERROR_INT("histo not defined", procName, 1); + if (!prval || !pgval || !pbval) + return ERROR_INT("&p*val not all defined", procName, 1); + + *prval = *pgval = *pbval = 0; + ntot = 0; + mult = 1 << (8 - sigbits); + rsum = gsum = bsum = 0; + for (i = vbox->r1; i <= vbox->r2; i++) { + for (j = vbox->g1; j <= vbox->g2; j++) { + for (k = vbox->b1; k <= vbox->b2; k++) { + histoindex = (i << (2 * sigbits)) + (j << sigbits) + k; + ntot += histo[histoindex]; + rsum += (l_int32)(histo[histoindex] * (i + 0.5) * mult); + gsum += (l_int32)(histo[histoindex] * (j + 0.5) * mult); + bsum += (l_int32)(histo[histoindex] * (k + 0.5) * mult); + if (index >= 0) + histo[histoindex] = index; + } + } + } + + if (ntot == 0) { + *prval = mult * (vbox->r1 + vbox->r2 + 1) / 2; + *pgval = mult * (vbox->g1 + vbox->g2 + 1) / 2; + *pbval = mult * (vbox->b1 + vbox->b2 + 1) / 2; + } else { + *prval = rsum / ntot; + *pgval = gsum / ntot; + *pbval = bsum / ntot; + } + +#if DEBUG_MC_COLORS + fprintf(stderr, "ntot[%d] = %d: [%d, %d, %d], (%d, %d, %d)\n", + index, ntot, vbox->r2 - vbox->r1 + 1, + vbox->g2 - vbox->g1 + 1, vbox->b2 - vbox->b1 + 1, + *prval, *pgval, *pbval); +#endif /* DEBUG_MC_COLORS */ + + return 0; +} + + +/*! + * \brief vboxGetCount() + * + * \param[in] vbox 3d region of color space for one quantized color + * \param[in] histo + * \param[in] sigbits valid: 5 or 6 + * \return number of image pixels in this region, or 0 on error + */ +static l_int32 +vboxGetCount(L_BOX3D *vbox, + l_int32 *histo, + l_int32 sigbits) +{ +l_int32 i, j, k, npix, index; + + PROCNAME("vboxGetCount"); + + if (!vbox) + return ERROR_INT("vbox not defined", procName, 0); + if (!histo) + return ERROR_INT("histo not defined", procName, 0); + + npix = 0; + for (i = vbox->r1; i <= vbox->r2; i++) { + for (j = vbox->g1; j <= vbox->g2; j++) { + for (k = vbox->b1; k <= vbox->b2; k++) { + index = (i << (2 * sigbits)) + (j << sigbits) + k; + npix += histo[index]; + } + } + } + + return npix; +} + + +/*! + * \brief vboxGetVolume() + * + * \param[in] vbox 3d region of color space for one quantized color + * \return quantized volume of vbox, or 0 on error + */ +static l_int32 +vboxGetVolume(L_BOX3D *vbox) +{ + PROCNAME("vboxGetVolume"); + + if (!vbox) + return ERROR_INT("vbox not defined", procName, 0); + + return ((vbox->r2 - vbox->r1 + 1) * (vbox->g2 - vbox->g1 + 1) * + (vbox->b2 - vbox->b1 + 1)); +} + +/*! + * \brief box3dCreate() + * + * \param[in] r1, r2, g1, g2, b1, b2 initial values + * \return vbox + */ +static L_BOX3D * +box3dCreate(l_int32 r1, + l_int32 r2, + l_int32 g1, + l_int32 g2, + l_int32 b1, + l_int32 b2) +{ +L_BOX3D *vbox; + + vbox = (L_BOX3D *)LEPT_CALLOC(1, sizeof(L_BOX3D)); + vbox->r1 = r1; + vbox->r2 = r2; + vbox->g1 = g1; + vbox->g2 = g2; + vbox->b1 = b1; + vbox->b2 = b2; + return vbox; +} + + +/*! + * \brief box3dCopy() + * + * \param[in] vbox + * \return vboxc copy of vbox + * + *
+ * Notes:
+ *      Don't copy the sortparam.
+ * 
+ */ +static L_BOX3D * +box3dCopy(L_BOX3D *vbox) +{ +L_BOX3D *vboxc; + + PROCNAME("box3dCopy"); + + if (!vbox) + return (L_BOX3D *)ERROR_PTR("vbox not defined", procName, NULL); + + vboxc = box3dCreate(vbox->r1, vbox->r2, vbox->g1, vbox->g2, + vbox->b1, vbox->b2); + vboxc->npix = vbox->npix; + vboxc->vol = vbox->vol; + return vboxc; +} diff --git a/3rdparty/hgOCR/leptonica/colorseg.c b/3rdparty/hgOCR/leptonica/colorseg.c new file mode 100644 index 00000000..f7372d23 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colorseg.c @@ -0,0 +1,654 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colorseg.c + *
+ *
+ *    Unsupervised color segmentation
+ *
+ *               PIX     *pixColorSegment()
+ *               PIX     *pixColorSegmentCluster()
+ *       static  l_int32  pixColorSegmentTryCluster()
+ *               l_int32  pixAssignToNearestColor()
+ *               l_int32  pixColorSegmentClean()
+ *               l_int32  pixColorSegmentRemoveColors()
+ * 
+ */ + +#include "allheaders.h" + + /* Maximum allowed iterations in Phase 1. */ +static const l_int32 MAX_ALLOWED_ITERATIONS = 20; + + /* Factor by which max dist is increased on each iteration */ +static const l_float32 DIST_EXPAND_FACT = 1.3; + + /* Octcube division level for computing nearest colormap color using LUT. + * Using 4 should suffice for up to 50 - 100 colors, and it is + * very fast. Using 5 takes 8 times as long to set up the LUT + * for little perceptual gain, even with 100 colors. */ +static const l_int32 LEVEL_IN_OCTCUBE = 4; + + +static l_int32 pixColorSegmentTryCluster(PIX *pixd, PIX *pixs, + l_int32 maxdist, l_int32 maxcolors, + l_int32 debugflag); + +/*------------------------------------------------------------------* + * Unsupervised color segmentation * + *------------------------------------------------------------------*/ +/*! + * \brief pixColorSegment() + * + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] maxdist max euclidean dist to existing cluster + * \param[in] maxcolors max number of colors allowed in first pass + * \param[in] selsize linear size of sel for closing to remove noise + * \param[in] finalcolors max number of final colors allowed after 4th pass + * \param[in] debugflag 1 for debug output; 0 otherwise + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ *  Color segmentation proceeds in four phases:
+ *
+ *  Phase 1:  pixColorSegmentCluster()
+ *  The image is traversed in raster order.  Each pixel either
+ *  becomes the representative for a new cluster or is assigned to an
+ *  existing cluster.  Assignment is greedy.  The data is stored in
+ *  a colormapped image.  Three auxiliary arrays are used to hold
+ *  the colors of the representative pixels, for fast lookup.
+ *  The average color in each cluster is computed.
+ *
+ *  Phase 2.  pixAssignToNearestColor()
+ *  A second non-greedy clustering pass is performed, where each pixel
+ *  is assigned to the nearest cluster average.  We also keep track
+ *  of how many pixels are assigned to each cluster.
+ *
+ *  Phase 3.  pixColorSegmentClean()
+ *  For each cluster, starting with the largest, do a morphological
+ *  closing to eliminate small components within larger ones.
+ *
+ *  Phase 4.  pixColorSegmentRemoveColors()
+ *  Eliminate all colors except the most populated 'finalcolors'.
+ *  Then remove unused colors from the colormap, and reassign those
+ *  pixels to the nearest remaining cluster, using the original pixel values.
+ *
+ * Notes:
+ *      (1) The goal is to generate a small number of colors.
+ *          Typically this would be specified by 'finalcolors',
+ *          a number that would be somewhere between 3 and 6.
+ *          The parameter 'maxcolors' specifies the maximum number of
+ *          colors generated in the first phase.  This should be
+ *          larger than finalcolors, perhaps twice as large.
+ *          If more than 'maxcolors' are generated in the first phase
+ *          using the input 'maxdist', the distance is repeatedly
+ *          increased by a multiplicative factor until the condition
+ *          is satisfied.  The implicit relation between 'maxdist'
+ *          and 'maxcolors' is thus adjusted programmatically.
+ *      (2) As a very rough guideline, given a target value of 'finalcolors',
+ *          here are approximate values of 'maxdist' and 'maxcolors'
+ *          to start with:
+ *
+ *               finalcolors    maxcolors    maxdist
+ *               -----------    ---------    -------
+ *                   3             6          100
+ *                   4             8           90
+ *                   5            10           75
+ *                   6            12           60
+ *
+ *          For a given number of finalcolors, if you use too many
+ *          maxcolors, the result will be noisy.  If you use too few,
+ *          the result will be a relatively poor assignment of colors.
+ * 
+ */ +PIX * +pixColorSegment(PIX *pixs, + l_int32 maxdist, + l_int32 maxcolors, + l_int32 selsize, + l_int32 finalcolors, + l_int32 debugflag) +{ +l_int32 *countarray; +PIX *pixd; + + PROCNAME("pixColorSegment"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("must be rgb color", procName, NULL); + + /* Phase 1; original segmentation */ + pixd = pixColorSegmentCluster(pixs, maxdist, maxcolors, debugflag); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + if (debugflag) { + lept_mkdir("lept/segment"); + pixWriteDebug("/tmp/lept/segment/colorseg1.png", pixd, IFF_PNG); + } + + /* Phase 2; refinement in pixel assignment */ + if ((countarray = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32))) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("countarray not made", procName, NULL); + } + pixAssignToNearestColor(pixd, pixs, NULL, LEVEL_IN_OCTCUBE, countarray); + if (debugflag) + pixWriteDebug("/tmp/lept/segment/colorseg2.png", pixd, IFF_PNG); + + /* Phase 3: noise removal by separately closing each color */ + pixColorSegmentClean(pixd, selsize, countarray); + LEPT_FREE(countarray); + if (debugflag) + pixWriteDebug("/tmp/lept/segment/colorseg3.png", pixd, IFF_PNG); + + /* Phase 4: removal of colors with small population and + * reassignment of pixels to remaining colors */ + pixColorSegmentRemoveColors(pixd, pixs, finalcolors); + return pixd; +} + + +/*! + * \brief pixColorSegmentCluster() + * + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] maxdist max euclidean dist to existing cluster + * \param[in] maxcolors max number of colors allowed in first pass + * \param[in] debugflag 1 for debug output; 0 otherwise + * \return pixd 8 bit with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) This is phase 1.  See description in pixColorSegment().
+ *      (2) Greedy unsupervised classification.  If the limit 'maxcolors'
+ *          is exceeded, the computation is repeated with a larger
+ *          allowed cluster size.
+ *      (3) On each successive iteration, 'maxdist' is increased by a
+ *          constant factor.  See comments in pixColorSegment() for
+ *          a guideline on parameter selection.
+ *          Note that the diagonal of the 8-bit rgb color cube is about
+ *          440, so for 'maxdist' = 440, you are guaranteed to get 1 color!
+ * 
+ */ +PIX * +pixColorSegmentCluster(PIX *pixs, + l_int32 maxdist, + l_int32 maxcolors, + l_int32 debugflag) +{ +l_int32 w, h, newmaxdist, ret, niters, ncolors, success; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixColorSegmentCluster"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("must be rgb color", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(8); + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + + newmaxdist = maxdist; + niters = 0; + success = TRUE; + while (1) { + ret = pixColorSegmentTryCluster(pixd, pixs, newmaxdist, + maxcolors, debugflag); + niters++; + if (!ret) { + ncolors = pixcmapGetCount(cmap); + if (debugflag) + L_INFO("Success with %d colors after %d iters\n", procName, + ncolors, niters); + break; + } + if (niters == MAX_ALLOWED_ITERATIONS) { + L_WARNING("too many iters; newmaxdist = %d\n", + procName, newmaxdist); + success = FALSE; + break; + } + newmaxdist = (l_int32)(DIST_EXPAND_FACT * (l_float32)newmaxdist); + } + + if (!success) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("failure in phase 1", procName, NULL); + } + + return pixd; +} + + +/*! + * \brief pixColorSegmentTryCluster() + * + * \param[in] pixd + * \param[in] pixs + * \param[in] maxdist + * \param[in] maxcolors + * \param[in] debugflag 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      This function should only be called from pixColorSegCluster()
+ * 
+ */ +static l_int32 +pixColorSegmentTryCluster(PIX *pixd, + PIX *pixs, + l_int32 maxdist, + l_int32 maxcolors, + l_int32 debugflag) +{ +l_int32 rmap[256], gmap[256], bmap[256]; +l_int32 w, h, wpls, wpld, i, j, k, found, ret, index, ncolors; +l_int32 rval, gval, bval, dist2, maxdist2; +l_int32 countarray[256]; +l_int32 rsum[256], gsum[256], bsum[256]; +l_uint32 *ppixel; +l_uint32 *datas, *datad, *lines, *lined; +PIXCMAP *cmap; + + PROCNAME("pixColorSegmentTryCluster"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + maxdist2 = maxdist * maxdist; + cmap = pixGetColormap(pixd); + pixcmapClear(cmap); + for (k = 0; k < 256; k++) { + rsum[k] = gsum[k] = bsum[k] = 0; + rmap[k] = gmap[k] = bmap[k] = 0; + } + + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + ncolors = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + ppixel = lines + j; + rval = GET_DATA_BYTE(ppixel, COLOR_RED); + gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); + bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); + ncolors = pixcmapGetCount(cmap); + found = FALSE; + for (k = 0; k < ncolors; k++) { + dist2 = (rval - rmap[k]) * (rval - rmap[k]) + + (gval - gmap[k]) * (gval - gmap[k]) + + (bval - bmap[k]) * (bval - bmap[k]); + if (dist2 <= maxdist2) { /* take it; greedy */ + found = TRUE; + SET_DATA_BYTE(lined, j, k); + countarray[k]++; + rsum[k] += rval; + gsum[k] += gval; + bsum[k] += bval; + break; + } + } + if (!found) { /* Add a new color */ + ret = pixcmapAddNewColor(cmap, rval, gval, bval, &index); +/* fprintf(stderr, + "index = %d, (i,j) = (%d,%d), rgb = (%d, %d, %d)\n", + index, i, j, rval, gval, bval); */ + if (ret == 0 && index < maxcolors) { + countarray[index] = 1; + SET_DATA_BYTE(lined, j, index); + rmap[index] = rval; + gmap[index] = gval; + bmap[index] = bval; + rsum[index] = rval; + gsum[index] = gval; + bsum[index] = bval; + } else { + if (debugflag) { + L_INFO("maxcolors exceeded for maxdist = %d\n", + procName, maxdist); + } + return 1; + } + } + } + } + + /* Replace the colors in the colormap by the averages */ + for (k = 0; k < ncolors; k++) { + rval = rsum[k] / countarray[k]; + gval = gsum[k] / countarray[k]; + bval = bsum[k] / countarray[k]; + pixcmapResetColor(cmap, k, rval, gval, bval); + } + + return 0; +} + + +/*! + * \brief pixAssignToNearestColor() + * + * \param[in] pixd 8 bpp, colormapped + * \param[in] pixs 32 bpp; 24-bit color + * \param[in] pixm [optional] 1 bpp + * \param[in] level of octcube used for finding nearest color in cmap + * \param[in] countarray [optional] ptr to array, in which we can store + * the number of pixels found in each color in + * the colormap in pixd + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used in phase 2 of color segmentation, where pixs
+ *          is the original input image to pixColorSegment(), and
+ *          pixd is the colormapped image returned from
+ *          pixColorSegmentCluster().  It is also used, with a mask,
+ *          in phase 4.
+ *      (2) This is an in-place operation.
+ *      (3) The colormap in pixd is unchanged.
+ *      (4) pixs and pixd must be the same size (w, h).
+ *      (5) The selection mask pixm can be null.  If it exists, it must
+ *          be the same size as pixs and pixd, and only pixels
+ *          corresponding to fg in pixm are assigned.  Set to
+ *          NULL if all pixels in pixd are to be assigned.
+ *      (6) The countarray can be null.  If it exists, it is pre-allocated
+ *          and of a size at least equal to the size of the colormap in pixd.
+ *      (7) This does a best-fit (non-greedy) assignment of pixels to
+ *          existing clusters.  Specifically, it assigns each pixel
+ *          in pixd to the color index in the pixd colormap that has a
+ *          color closest to the corresponding rgb pixel in pixs.
+ *      (8) 'level' is the octcube level used to quickly find the nearest
+ *          color in the colormap for each pixel.  For color segmentation,
+ *          this parameter is set to LEVEL_IN_OCTCUBE.
+ *      (9) We build a mapping table from octcube to colormap index so
+ *          that this function can run in a time (otherwise) independent
+ *          of the number of colors in the colormap.  This avoids a
+ *          brute-force search for the closest colormap color to each
+ *          pixel in the image.
+ * 
+ */ +l_ok +pixAssignToNearestColor(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_int32 level, + l_int32 *countarray) +{ +l_int32 w, h, wpls, wpld, wplm, i, j, success; +l_int32 rval, gval, bval, index; +l_int32 *cmaptab; +l_uint32 octindex; +l_uint32 *rtab, *gtab, *btab; +l_uint32 *ppixel; +l_uint32 *datas, *datad, *datam, *lines, *lined, *linem; +PIXCMAP *cmap; + + PROCNAME("pixAssignToNearestColor"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if ((cmap = pixGetColormap(pixd)) == NULL) + return ERROR_INT("cmap not found", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (level < 1 || level > 6) + return ERROR_INT("level not in [1 ... 6]", procName, 1); + + /* Set up the tables to map rgb to the nearest colormap index */ + success = TRUE; + makeRGBToIndexTables(level, &rtab, >ab, &btab); + cmaptab = pixcmapToOctcubeLUT(cmap, level, L_MANHATTAN_DISTANCE); + if (!rtab || !gtab || !btab || !cmaptab) { + L_ERROR("failure to make a table\n", procName); + success = FALSE; + goto cleanup_arrays; + } + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + if (pixm) { + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + } + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (pixm) + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if (pixm) { + if (!GET_DATA_BIT(linem, j)) + continue; + } + ppixel = lines + j; + rval = GET_DATA_BYTE(ppixel, COLOR_RED); + gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); + bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); + /* Map from rgb to octcube index */ + getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, + &octindex); + /* Map from octcube index to nearest colormap index */ + index = cmaptab[octindex]; + if (countarray) + countarray[index]++; + SET_DATA_BYTE(lined, j, index); + } + } + +cleanup_arrays: + LEPT_FREE(cmaptab); + LEPT_FREE(rtab); + LEPT_FREE(gtab); + LEPT_FREE(btab); + return (success) ? 0 : 1; +} + + +/*! + * \brief pixColorSegmentClean() + * + * \param[in] pixs 8 bpp, colormapped + * \param[in] selsize for closing + * \param[in] countarray ptr to array containing the number of pixels + * found in each color in the colormap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This operation is in-place.
+ *      (2) This is phase 3 of color segmentation.  It is the first
+ *          part of a two-step noise removal process.  Colors with a
+ *          large population are closed first; this operation absorbs
+ *          small sets of intercolated pixels of a different color.
+ * 
+ */ +l_ok +pixColorSegmentClean(PIX *pixs, + l_int32 selsize, + l_int32 *countarray) +{ +l_int32 i, ncolors, val; +l_uint32 val32; +NUMA *na, *nasi; +PIX *pixt1, *pixt2; +PIXCMAP *cmap; + + PROCNAME("pixColorSegmentClean"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not 8 bpp", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("cmap not found", procName, 1); + if (!countarray) + return ERROR_INT("countarray not defined", procName, 1); + if (selsize <= 1) + return 0; /* nothing to do */ + + /* Sort colormap indices in decreasing order of pixel population */ + ncolors = pixcmapGetCount(cmap); + na = numaCreate(ncolors); + for (i = 0; i < ncolors; i++) + numaAddNumber(na, countarray[i]); + nasi = numaGetSortIndex(na, L_SORT_DECREASING); + numaDestroy(&na); + if (!nasi) + return ERROR_INT("nasi not made", procName, 1); + + /* For each color, in order of decreasing population, + * do a closing and absorb the added pixels. Note that + * if the closing removes pixels at the border, they'll + * still appear in the xor and will be properly (re)set. */ + for (i = 0; i < ncolors; i++) { + numaGetIValue(nasi, i, &val); + pixt1 = pixGenerateMaskByValue(pixs, val, 1); + pixt2 = pixCloseSafeCompBrick(NULL, pixt1, selsize, selsize); + pixXor(pixt2, pixt2, pixt1); /* pixels to be added to type 'val' */ + pixcmapGetColor32(cmap, val, &val32); + pixSetMasked(pixs, pixt2, val32); /* add them */ + pixDestroy(&pixt1); + pixDestroy(&pixt2); + } + numaDestroy(&nasi); + return 0; +} + + +/*! + * \brief pixColorSegmentRemoveColors() + * + * \param[in] pixd 8 bpp, colormapped + * \param[in] pixs 32 bpp rgb, with initial pixel values + * \param[in] finalcolors max number of colors to retain + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This operation is in-place.
+ *      (2) This is phase 4 of color segmentation, and the second part
+ *          of the 2-step noise removal.  Only 'finalcolors' different
+ *          colors are retained, with colors with smaller populations
+ *          being replaced by the nearest color of the remaining colors.
+ *          For highest accuracy, for pixels that are being replaced,
+ *          we find the nearest colormap color  to the original rgb color.
+ * 
+ */ +l_ok +pixColorSegmentRemoveColors(PIX *pixd, + PIX *pixs, + l_int32 finalcolors) +{ +l_int32 i, ncolors, index, tempindex; +l_int32 *tab; +l_uint32 tempcolor; +NUMA *na, *nasi; +PIX *pixm; +PIXCMAP *cmap; + + PROCNAME("pixColorSegmentRemoveColors"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixGetDepth(pixd) != 8) + return ERROR_INT("pixd not 8 bpp", procName, 1); + if ((cmap = pixGetColormap(pixd)) == NULL) + return ERROR_INT("cmap not found", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + ncolors = pixcmapGetCount(cmap); + if (finalcolors >= ncolors) /* few enough colors already; nothing to do */ + return 0; + + /* Generate a mask over all pixels that are not in the + * 'finalcolors' most populated colors. Save the colormap + * index of any one of the retained colors in 'tempindex'. + * The LUT has values 0 for the 'finalcolors' most populated colors, + * which will be retained; and 1 for the rest, which are marked + * by fg pixels in pixm and will be removed. */ + na = pixGetCmapHistogram(pixd, 1); + if ((nasi = numaGetSortIndex(na, L_SORT_DECREASING)) == NULL) { + numaDestroy(&na); + return ERROR_INT("nasi not made", procName, 1); + } + numaGetIValue(nasi, finalcolors - 1, &tempindex); /* retain down to this */ + pixcmapGetColor32(cmap, tempindex, &tempcolor); /* use this color */ + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = finalcolors; i < ncolors; i++) { + numaGetIValue(nasi, i, &index); + tab[index] = 1; + } + + pixm = pixMakeMaskFromLUT(pixd, tab); + LEPT_FREE(tab); + + /* Reassign the masked pixels temporarily to the saved index + * (tempindex). This guarantees that no pixels are labeled by + * a colormap index of any colors that will be removed. + * The actual value doesn't matter, as long as it's one + * of the retained colors, because these pixels will later + * be reassigned based on the full set of colors retained + * in the colormap. */ + pixSetMasked(pixd, pixm, tempcolor); + + /* Now remove unused colors from the colormap. This reassigns + * image pixels as required. */ + pixRemoveUnusedColors(pixd); + + /* Finally, reassign the pixels under the mask (those that were + * given a 'tempindex' value) to the nearest color in the colormap. + * This is the function used in phase 2 on all image pixels; here + * it is only used on the masked pixels given by pixm. */ + pixAssignToNearestColor(pixd, pixs, pixm, LEVEL_IN_OCTCUBE, NULL); + + pixDestroy(&pixm); + numaDestroy(&na); + numaDestroy(&nasi); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/colorspace.c b/3rdparty/hgOCR/leptonica/colorspace.c new file mode 100644 index 00000000..d44bcd7b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/colorspace.c @@ -0,0 +1,2414 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file colorspace.c + *
+ *
+ *      Colorspace conversion between RGB and HSV
+ *           PIX        *pixConvertRGBToHSV()
+ *           PIX        *pixConvertHSVToRGB()
+ *           l_int32     convertRGBToHSV()
+ *           l_int32     convertHSVToRGB()
+ *           l_int32     pixcmapConvertRGBToHSV()
+ *           l_int32     pixcmapConvertHSVToRGB()
+ *           PIX        *pixConvertRGBToHue()
+ *           PIX        *pixConvertRGBToSaturation()
+ *           PIX        *pixConvertRGBToValue()
+ *
+ *      Selection and display of range of colors in HSV space
+ *           PIX        *pixMakeRangeMaskHS()
+ *           PIX        *pixMakeRangeMaskHV()
+ *           PIX        *pixMakeRangeMaskSV()
+ *           PIX        *pixMakeHistoHS()
+ *           PIX        *pixMakeHistoHV()
+ *           PIX        *pixMakeHistoSV()
+ *           PIX        *pixFindHistoPeaksHSV()
+ *           PIX        *displayHSVColorRange()
+ *
+ *      Colorspace conversion between RGB and YUV
+ *           PIX        *pixConvertRGBToYUV()
+ *           PIX        *pixConvertYUVToRGB()
+ *           l_int32     convertRGBToYUV()
+ *           l_int32     convertYUVToRGB()
+ *           l_int32     pixcmapConvertRGBToYUV()
+ *           l_int32     pixcmapConvertYUVToRGB()
+ *
+ *      Colorspace conversion between RGB and XYZ
+ *           FPIXA      *pixConvertRGBToXYZ()
+ *           PIX        *fpixaConvertXYZToRGB()
+ *           l_int32     convertRGBToXYZ()
+ *           l_int32     convertXYZToRGB()
+ *
+ *      Colorspace conversion between XYZ and LAB
+ *           FPIXA      *fpixaConvertXYZToLAB()
+ *           PIX        *fpixaConvertLABToXYZ()
+ *           l_int32     convertXYZToLAB()
+ *           l_int32     convertLABToXYZ()
+ *           static l_float32  lab_forward()
+ *           static l_float32  lab_reverse()
+ *
+ *      Colorspace conversion between RGB and LAB
+ *           FPIXA      *pixConvertRGBToLAB()
+ *           PIX        *fpixaConvertLABToRGB()
+ *           l_int32     convertRGBToLAB()
+ *           l_int32     convertLABToRGB()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +#ifndef NO_CONSOLE_IO +#define DEBUG_HISTO 0 +#define SLOW_CUBE_ROOT 0 +#endif /* ~NO_CONSOLE_IO */ + + /* Functions used in xyz <--> lab conversions */ +static l_float32 lab_forward(l_float32 v); +static l_float32 lab_reverse(l_float32 v); + + +/*---------------------------------------------------------------------------* + * Colorspace conversion between RGB and HSB * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToHSV() + * + * \param[in] pixd can be NULL; if not NULL, must == pixs + * \param[in] pixs + * \return pixd always + * + *
+ * Notes:
+ *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
+ *      (2) The definition of our HSV space is given in convertRGBToHSV().
+ *      (3) The h, s and v values are stored in the same places as
+ *          the r, g and b values, respectively.  Here, they are explicitly
+ *          placed in the 3 MS bytes in the pixel.
+ *      (4) Normalizing to 1 and considering the r,g,b components,
+ *          a simple way to understand the HSV space is:
+ *           ~ v = max(r,g,b)
+ *           ~ s = (max - min) / max
+ *           ~ h ~ (mid - min) / (max - min)  [apart from signs and constants]
+ *      (5) Normalizing to 1, some properties of the HSV space are:
+ *           ~ For gray values (r = g = b) along the continuum between
+ *             black and white:
+ *                s = 0  (becoming undefined as you approach black)
+ *                h is undefined everywhere
+ *           ~ Where one component is saturated and the others are zero:
+ *                v = 1
+ *                s = 1
+ *                h = 0 (r = max), 1/3 (g = max), 2/3 (b = max)
+ *           ~ Where two components are saturated and the other is zero:
+ *                v = 1
+ *                s = 1
+ *                h = 1/2 (if r = 0), 5/6 (if g = 0), 1/6 (if b = 0)
+ * 
+ */ +PIX * +pixConvertRGBToHSV(PIX *pixd, + PIX *pixs) +{ +l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; +l_uint32 *line, *data; +PIXCMAP *cmap; + + PROCNAME("pixConvertRGBToHSV"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); + + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("not cmapped or rgb", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + + cmap = pixGetColormap(pixd); + if (cmap) { /* just convert the colormap */ + pixcmapConvertRGBToHSV(cmap); + return pixd; + } + + /* Convert RGB image */ + pixGetDimensions(pixd, &w, &h, NULL); + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + line[j] = (hval << 24) | (sval << 16) | (vval << 8); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertHSVToRGB() + * + * \param[in] pixd can be NULL; if not NULL, must == pixs + * \param[in] pixs + * \return pixd always + * + *
+ * Notes:
+ *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
+ *      (2) The user takes responsibility for making sure that pixs is
+ *          in our HSV space.  The definition of our HSV space is given
+ *          in convertRGBToHSV().
+ *      (3) The h, s and v values are stored in the same places as
+ *          the r, g and b values, respectively.  Here, they are explicitly
+ *          placed in the 3 MS bytes in the pixel.
+ * 
+ */ +PIX * +pixConvertHSVToRGB(PIX *pixd, + PIX *pixs) +{ +l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; +l_uint32 pixel; +l_uint32 *line, *data; +PIXCMAP *cmap; + + PROCNAME("pixConvertHSVToRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); + + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("not cmapped or hsv", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + + cmap = pixGetColormap(pixd); + if (cmap) { /* just convert the colormap */ + pixcmapConvertHSVToRGB(cmap); + return pixd; + } + + /* Convert HSV image */ + pixGetDimensions(pixd, &w, &h, NULL); + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + pixel = line[j]; + hval = pixel >> 24; + sval = (pixel >> 16) & 0xff; + vval = (pixel >> 8) & 0xff; + convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, line + j); + } + } + + return pixd; +} + + +/*! + * \brief convertRGBToHSV() + * + * \param[in] rval, gval, bval RGB input + * \param[out] phval, psval, pvval comparable HSV values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The range of returned values is:
+ *            h [0 ... 239]
+ *            s [0 ... 255]
+ *            v [0 ... 255]
+ *      (2) If r = g = b, the pixel is gray (s = 0), and we define h = 0.
+ *      (3) h wraps around, so that h = 0 and h = 240 are equivalent
+ *          in hue space.
+ *      (4) h has the following correspondence to color:
+ *            h = 0         magenta
+ *            h = 40        red
+ *            h = 80        yellow
+ *            h = 120       green
+ *            h = 160       cyan
+ *            h = 200       blue
+ * 
+ */ +l_ok +convertRGBToHSV(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *phval, + l_int32 *psval, + l_int32 *pvval) +{ +l_int32 minrg, maxrg, min, max, delta; +l_float32 h; + + PROCNAME("convertRGBToHSV"); + + if (phval) *phval = 0; + if (psval) *psval = 0; + if (pvval) *pvval = 0; + if (!phval || !psval || !pvval) + return ERROR_INT("&hval, &sval, &vval not all defined", procName, 1); + + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + delta = max - min; + + *pvval = max; + if (delta == 0) { /* gray; no chroma */ + *phval = 0; + *psval = 0; + } else { + *psval = (l_int32)(255. * (l_float32)delta / (l_float32)max + 0.5); + if (rval == max) /* between magenta and yellow */ + h = (l_float32)(gval - bval) / (l_float32)delta; + else if (gval == max) /* between yellow and cyan */ + h = 2. + (l_float32)(bval - rval) / (l_float32)delta; + else /* between cyan and magenta */ + h = 4. + (l_float32)(rval - gval) / (l_float32)delta; + h *= 40.0; + if (h < 0.0) + h += 240.0; + if (h >= 239.5) + h = 0.0; + *phval = (l_int32)(h + 0.5); + } + + return 0; +} + + +/*! + * \brief convertHSVToRGB() + * + * \param[in] hval, sval, vval HSV input + * \param[out] prval, pgval, pbval comparable RGB values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertRGBToHSV() for valid input range of HSV values
+ *          and their interpretation in color space.
+ * 
+ */ +l_ok +convertHSVToRGB(l_int32 hval, + l_int32 sval, + l_int32 vval, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 i, x, y, z; +l_float32 h, f, s; + + PROCNAME("convertHSVToRGB"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval || !pgval || !pbval) + return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); + + if (sval == 0) { /* gray */ + *prval = vval; + *pgval = vval; + *pbval = vval; + } else { + if (hval < 0 || hval > 240) + return ERROR_INT("invalid hval", procName, 1); + if (hval == 240) + hval = 0; + h = (l_float32)hval / 40.; + i = (l_int32)h; + f = h - i; + s = (l_float32)sval / 255.; + x = (l_int32)(vval * (1. - s) + 0.5); + y = (l_int32)(vval * (1. - s * f) + 0.5); + z = (l_int32)(vval * (1. - s * (1. - f)) + 0.5); + switch (i) + { + case 0: + *prval = vval; + *pgval = z; + *pbval = x; + break; + case 1: + *prval = y; + *pgval = vval; + *pbval = x; + break; + case 2: + *prval = x; + *pgval = vval; + *pbval = z; + break; + case 3: + *prval = x; + *pgval = y; + *pbval = vval; + break; + case 4: + *prval = z; + *pgval = x; + *pbval = vval; + break; + case 5: + *prval = vval; + *pgval = x; + *pbval = y; + break; + default: /* none possible */ + return 1; + } + } + + return 0; +} + + +/*! + * \brief pixcmapConvertRGBToHSV() + * + * \param[in] cmap + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      ~ in-place transform
+ *      ~ See convertRGBToHSV() for def'n of HSV space.
+ *      ~ replaces: r --> h, g --> s, b --> v
+ * 
+ */ +l_ok +pixcmapConvertRGBToHSV(PIXCMAP *cmap) +{ +l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; + + PROCNAME("pixcmapConvertRGBToHSV"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + pixcmapResetColor(cmap, i, hval, sval, vval); + } + return 0; +} + + +/*! + * \brief pixcmapConvertHSVToRGB() + * + * \param[in] cmap + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      ~ in-place transform
+ *      ~ See convertRGBToHSV() for def'n of HSV space.
+ *      ~ replaces: h --> r, s --> g, v --> b
+ * 
+ */ +l_ok +pixcmapConvertHSVToRGB(PIXCMAP *cmap) +{ +l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; + + PROCNAME("pixcmapConvertHSVToRGB"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &hval, &sval, &vval); + convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); + pixcmapResetColor(cmap, i, rval, gval, bval); + } + return 0; +} + + +/*! + * \brief pixConvertRGBToHue() + * + * \param[in] pixs 32 bpp RGB, or 8 bpp with colormap + * \return pixd 8 bpp hue of HSV, or NULL on error + * + *
+ * Notes:
+ *      (1) The conversion to HSV hue is in-lined here.
+ *      (2) If there is a colormap, it is removed.
+ *      (3) If you just want the hue component, this does it
+ *          at about 10 Mpixels/sec/GHz, which is about
+ *          2x faster than using pixConvertRGBToHSV()
+ * 
+ */ +PIX * +pixConvertRGBToHue(PIX *pixs) +{ +l_int32 w, h, d, wplt, wpld; +l_int32 i, j, rval, gval, bval, hval, minrg, min, maxrg, max, delta; +l_float32 fh; +l_uint32 pixel; +l_uint32 *linet, *lined, *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixConvertRGBToHue"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + + /* Convert RGB image */ + pixd = pixCreate(w, h, 8); + pixCopyResolution(pixd, pixs); + wplt = pixGetWpl(pixt); + datat = pixGetData(pixt); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + delta = max - min; + if (delta == 0) { /* gray; no chroma */ + hval = 0; + } else { + if (rval == max) /* between magenta and yellow */ + fh = (l_float32)(gval - bval) / (l_float32)delta; + else if (gval == max) /* between yellow and cyan */ + fh = 2. + (l_float32)(bval - rval) / (l_float32)delta; + else /* between cyan and magenta */ + fh = 4. + (l_float32)(rval - gval) / (l_float32)delta; + fh *= 40.0; + if (fh < 0.0) + fh += 240.0; + hval = (l_int32)(fh + 0.5); + } + SET_DATA_BYTE(lined, j, hval); + } + } + pixDestroy(&pixt); + + return pixd; +} + + + +/*! + * \brief pixConvertRGBToSaturation() + * + * \param[in] pixs 32 bpp RGB, or 8 bpp with colormap + * \return pixd 8 bpp sat of HSV, or NULL on error + * + *
+ * Notes:
+ *      (1) The conversion to HSV sat is in-lined here.
+ *      (2) If there is a colormap, it is removed.
+ *      (3) If you just want the saturation component, this does it
+ *          at about 12 Mpixels/sec/GHz.
+ * 
+ */ +PIX * +pixConvertRGBToSaturation(PIX *pixs) +{ +l_int32 w, h, d, wplt, wpld; +l_int32 i, j, rval, gval, bval, sval, minrg, min, maxrg, max, delta; +l_uint32 pixel; +l_uint32 *linet, *lined, *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixConvertRGBToSaturation"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + + /* Convert RGB image */ + pixd = pixCreate(w, h, 8); + pixCopyResolution(pixd, pixs); + wplt = pixGetWpl(pixt); + datat = pixGetData(pixt); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + delta = max - min; + if (delta == 0) /* gray; no chroma */ + sval = 0; + else + sval = (l_int32)(255. * + (l_float32)delta / (l_float32)max + 0.5); + SET_DATA_BYTE(lined, j, sval); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixConvertRGBToValue() + * + * \param[in] pixs 32 bpp RGB,or 8 bpp with colormap + * \return pixd 8 bpp max component intensity of HSV, or NULL on error + * + *
+ * Notes:
+ *      (1) The conversion to HSV sat is in-lined here.
+ *      (2) If there is a colormap, it is removed.
+ *      (3) If you just want the value component, this does it
+ *          at about 35 Mpixels/sec/GHz.
+ * 
+ */ +PIX * +pixConvertRGBToValue(PIX *pixs) +{ +l_int32 w, h, d, wplt, wpld; +l_int32 i, j, rval, gval, bval, maxrg, max; +l_uint32 pixel; +l_uint32 *linet, *lined, *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixConvertRGBToValue"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + + /* Convert RGB image */ + pixd = pixCreate(w, h, 8); + pixCopyResolution(pixd, pixs); + wplt = pixGetWpl(pixt); + datat = pixGetData(pixt); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + SET_DATA_BYTE(lined, j, max); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Selection and display of range of colors in HSV space * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixMakeRangeMaskHS() + * + * \param[in] pixs 32 bpp rgb + * \param[in] huecenter center value of hue range + * \param[in] huehw half-width of hue range + * \param[in] satcenter center value of saturation range + * \param[in] sathw half-width of saturation range + * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION + * \return pixd 1 bpp mask over selected pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixels are selected based on the specified ranges of
+ *          hue and saturation.  For selection or exclusion, the pixel
+ *          HS component values must be within both ranges.  Care must
+ *          be taken in finding the hue range because of wrap-around.
+ *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
+ *          pixels within the rectangular region specified in HS space.
+ *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
+ *          those within the rectangular region specified in HS space.
+ * 
+ */ +PIX * +pixMakeRangeMaskHS(PIX *pixs, + l_int32 huecenter, + l_int32 huehw, + l_int32 satcenter, + l_int32 sathw, + l_int32 regionflag) +{ +l_int32 i, j, w, h, wplt, wpld, hstart, hend, sstart, send, hval, sval; +l_int32 *hlut, *slut; +l_uint32 pixel; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixMakeRangeMaskHS"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) + return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); + + /* Set up LUTs for hue and saturation. These have the value 1 + * within the specified intervals of hue and saturation. */ + hlut = (l_int32 *)LEPT_CALLOC(240, sizeof(l_int32)); + slut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + sstart = L_MAX(0, satcenter - sathw); + send = L_MIN(255, satcenter + sathw); + for (i = sstart; i <= send; i++) + slut[i] = 1; + hstart = (huecenter - huehw + 240) % 240; + hend = (huecenter + huehw + 240) % 240; + if (hstart < hend) { + for (i = hstart; i <= hend; i++) + hlut[i] = 1; + } else { /* wrap */ + for (i = hstart; i < 240; i++) + hlut[i] = 1; + for (i = 0; i <= hend; i++) + hlut[i] = 1; + } + + /* Generate the mask */ + pixt = pixConvertRGBToHSV(NULL, pixs); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreateNoInit(w, h, 1); + if (regionflag == L_INCLUDE_REGION) + pixClearAll(pixd); + else /* L_EXCLUDE_REGION */ + pixSetAll(pixd); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + hval = (pixel >> L_RED_SHIFT) & 0xff; + sval = (pixel >> L_GREEN_SHIFT) & 0xff; + if (hlut[hval] == 1 && slut[sval] == 1) { + if (regionflag == L_INCLUDE_REGION) + SET_DATA_BIT(lined, j); + else /* L_EXCLUDE_REGION */ + CLEAR_DATA_BIT(lined, j); + } + } + } + + LEPT_FREE(hlut); + LEPT_FREE(slut); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixMakeRangeMaskHV() + * + * \param[in] pixs 32 bpp rgb + * \param[in] huecenter center value of hue range + * \param[in] huehw half-width of hue range + * \param[in] valcenter center value of max intensity range + * \param[in] valhw half-width of max intensity range + * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION + * \return pixd 1 bpp mask over selected pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixels are selected based on the specified ranges of
+ *          hue and max intensity values.  For selection or exclusion,
+ *          the pixel HV component values must be within both ranges.
+ *          Care must be taken in finding the hue range because of wrap-around.
+ *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
+ *          pixels within the rectangular region specified in HV space.
+ *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
+ *          those within the rectangular region specified in HV space.
+ * 
+ */ +PIX * +pixMakeRangeMaskHV(PIX *pixs, + l_int32 huecenter, + l_int32 huehw, + l_int32 valcenter, + l_int32 valhw, + l_int32 regionflag) +{ +l_int32 i, j, w, h, wplt, wpld, hstart, hend, vstart, vend, hval, vval; +l_int32 *hlut, *vlut; +l_uint32 pixel; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixMakeRangeMaskHV"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) + return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); + + /* Set up LUTs for hue and maximum intensity (val). These have + * the value 1 within the specified intervals of hue and value. */ + hlut = (l_int32 *)LEPT_CALLOC(240, sizeof(l_int32)); + vlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + vstart = L_MAX(0, valcenter - valhw); + vend = L_MIN(255, valcenter + valhw); + for (i = vstart; i <= vend; i++) + vlut[i] = 1; + hstart = (huecenter - huehw + 240) % 240; + hend = (huecenter + huehw + 240) % 240; + if (hstart < hend) { + for (i = hstart; i <= hend; i++) + hlut[i] = 1; + } else { + for (i = hstart; i < 240; i++) + hlut[i] = 1; + for (i = 0; i <= hend; i++) + hlut[i] = 1; + } + + /* Generate the mask */ + pixt = pixConvertRGBToHSV(NULL, pixs); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreateNoInit(w, h, 1); + if (regionflag == L_INCLUDE_REGION) + pixClearAll(pixd); + else /* L_EXCLUDE_REGION */ + pixSetAll(pixd); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + hval = (pixel >> L_RED_SHIFT) & 0xff; + vval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (hlut[hval] == 1 && vlut[vval] == 1) { + if (regionflag == L_INCLUDE_REGION) + SET_DATA_BIT(lined, j); + else /* L_EXCLUDE_REGION */ + CLEAR_DATA_BIT(lined, j); + } + } + } + + LEPT_FREE(hlut); + LEPT_FREE(vlut); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixMakeRangeMaskSV() + * + * \param[in] pixs 32 bpp rgb + * \param[in] satcenter center value of saturation range + * \param[in] sathw half-width of saturation range + * \param[in] valcenter center value of max intensity range + * \param[in] valhw half-width of max intensity range + * \param[in] regionflag L_INCLUDE_REGION, L_EXCLUDE_REGION + * \return pixd 1 bpp mask over selected pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixels are selected based on the specified ranges of
+ *          saturation and max intensity (val).  For selection or
+ *          exclusion, the pixel SV component values must be within both ranges.
+ *      (2) Use %regionflag == L_INCLUDE_REGION to take only those
+ *          pixels within the rectangular region specified in SV space.
+ *          Use %regionflag == L_EXCLUDE_REGION to take all pixels except
+ *          those within the rectangular region specified in SV space.
+ * 
+ */ +PIX * +pixMakeRangeMaskSV(PIX *pixs, + l_int32 satcenter, + l_int32 sathw, + l_int32 valcenter, + l_int32 valhw, + l_int32 regionflag) +{ +l_int32 i, j, w, h, wplt, wpld, sval, vval, sstart, send, vstart, vend; +l_int32 *slut, *vlut; +l_uint32 pixel; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixMakeRangeMaskSV"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) + return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); + + /* Set up LUTs for saturation and max intensity (val). + * These have the value 1 within the specified intervals of + * saturation and max intensity. */ + slut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + vlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + sstart = L_MAX(0, satcenter - sathw); + send = L_MIN(255, satcenter + sathw); + vstart = L_MAX(0, valcenter - valhw); + vend = L_MIN(255, valcenter + valhw); + for (i = sstart; i <= send; i++) + slut[i] = 1; + for (i = vstart; i <= vend; i++) + vlut[i] = 1; + + /* Generate the mask */ + pixt = pixConvertRGBToHSV(NULL, pixs); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreateNoInit(w, h, 1); + if (regionflag == L_INCLUDE_REGION) + pixClearAll(pixd); + else /* L_EXCLUDE_REGION */ + pixSetAll(pixd); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = linet[j]; + sval = (pixel >> L_GREEN_SHIFT) & 0xff; + vval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (slut[sval] == 1 && vlut[vval] == 1) { + if (regionflag == L_INCLUDE_REGION) + SET_DATA_BIT(lined, j); + else /* L_EXCLUDE_REGION */ + CLEAR_DATA_BIT(lined, j); + } + } + } + + LEPT_FREE(slut); + LEPT_FREE(vlut); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixMakeHistoHS() + * + * \param[in] pixs HSV colorspace + * \param[in] factor subsampling factor; integer + * \param[out] pnahue [optional] hue histogram + * \param[out] pnasat [optional] saturation histogram + * \return pixd 32 bpp histogram in hue and saturation, or NULL on error + * + *
+ * Notes:
+ *      (1) pixs is a 32 bpp image in HSV colorspace; hue is in the "red"
+ *          byte, saturation is in the "green" byte.
+ *      (2) In pixd, hue is displayed vertically; saturation horizontally.
+ *          The dimensions of pixd are w = 256, h = 240, and the depth
+ *          is 32 bpp.  The value at each point is simply the number
+ *          of pixels found at that value of hue and saturation.
+ * 
+ */ +PIX * +pixMakeHistoHS(PIX *pixs, + l_int32 factor, + NUMA **pnahue, + NUMA **pnasat) +{ +l_int32 i, j, w, h, wplt, hval, sval, nd; +l_uint32 pixel; +l_uint32 *datat, *linet; +void **lined32; +NUMA *nahue, *nasat; +PIX *pixt, *pixd; + + PROCNAME("pixMakeHistoHS"); + + if (pnahue) *pnahue = NULL; + if (pnasat) *pnasat = NULL; + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + + if (pnahue) { + nahue = numaCreate(240); + numaSetCount(nahue, 240); + *pnahue = nahue; + } + if (pnasat) { + nasat = numaCreate(256); + numaSetCount(nasat, 256); + *pnasat = nasat; + } + + if (factor <= 1) + pixt = pixClone(pixs); + else + pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, + 1.0 / (l_float32)factor); + + /* Create the hue-saturation histogram */ + pixd = pixCreate(256, 240, 32); + lined32 = pixGetLinePtrs(pixd, NULL); + pixGetDimensions(pixt, &w, &h, NULL); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + for (j = 0; j < w; j++) { + pixel = linet[j]; + hval = (pixel >> L_RED_SHIFT) & 0xff; + +#if DEBUG_HISTO + if (hval > 239) { + fprintf(stderr, "hval = %d for (%d,%d)\n", hval, i, j); + continue; + } +#endif /* DEBUG_HISTO */ + + sval = (pixel >> L_GREEN_SHIFT) & 0xff; + if (pnahue) + numaShiftValue(nahue, hval, 1.0); + if (pnasat) + numaShiftValue(nasat, sval, 1.0); + nd = GET_DATA_FOUR_BYTES(lined32[hval], sval); + SET_DATA_FOUR_BYTES(lined32[hval], sval, nd + 1); + } + } + + LEPT_FREE(lined32); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixMakeHistoHV() + * + * \param[in] pixs HSV colorspace + * \param[in] factor subsampling factor; integer + * \param[out] pnahue [optional] hue histogram + * \param[out] pnaval [optional] max intensity (value) histogram + * \return pixd 32 bpp histogram in hue and value, or NULL on error + * + *
+ * Notes:
+ *      (1) %pixs is a 32 bpp image in HSV colorspace; hue is in the "red"
+ *          byte, max intensity ("value") is in the "blue" byte.
+ *      (2) In %pixd, hue is displayed vertically; intensity horizontally.
+ *          The dimensions of %pixd are w = 256, h = 240, and the depth
+ *          is 32 bpp.  The value at each point is simply the number
+ *          of pixels found at that value of hue and intensity.
+ * 
+ */ +PIX * +pixMakeHistoHV(PIX *pixs, + l_int32 factor, + NUMA **pnahue, + NUMA **pnaval) +{ +l_int32 i, j, w, h, wplt, hval, vval, nd; +l_uint32 pixel; +l_uint32 *datat, *linet; +void **lined32; +NUMA *nahue, *naval; +PIX *pixt, *pixd; + + PROCNAME("pixMakeHistoHV"); + + if (pnahue) *pnahue = NULL; + if (pnaval) *pnaval = NULL; + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + + if (pnahue) { + nahue = numaCreate(240); + numaSetCount(nahue, 240); + *pnahue = nahue; + } + if (pnaval) { + naval = numaCreate(256); + numaSetCount(naval, 256); + *pnaval = naval; + } + + if (factor <= 1) + pixt = pixClone(pixs); + else + pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, + 1.0 / (l_float32)factor); + + /* Create the hue-value histogram */ + pixd = pixCreate(256, 240, 32); + lined32 = pixGetLinePtrs(pixd, NULL); + pixGetDimensions(pixt, &w, &h, NULL); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + for (j = 0; j < w; j++) { + pixel = linet[j]; + hval = (pixel >> L_RED_SHIFT) & 0xff; + vval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (pnahue) + numaShiftValue(nahue, hval, 1.0); + if (pnaval) + numaShiftValue(naval, vval, 1.0); + nd = GET_DATA_FOUR_BYTES(lined32[hval], vval); + SET_DATA_FOUR_BYTES(lined32[hval], vval, nd + 1); + } + } + + LEPT_FREE(lined32); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixMakeHistoSV() + * + * \param[in] pixs HSV colorspace + * \param[in] factor subsampling factor; integer + * \param[out] pnasat [optional] sat histogram + * \param[out] pnaval [optional] max intensity (value) histogram + * \return pixd 32 bpp histogram in sat and value, or NULL on error + * + *
+ * Notes:
+ *      (1) %pixs is a 32 bpp image in HSV colorspace; sat is in the "green"
+ *          byte, max intensity ("value") is in the "blue" byte.
+ *      (2) In %pixd, sat is displayed vertically; intensity horizontally.
+ *          The dimensions of %pixd are w = 256, h = 256, and the depth
+ *          is 32 bpp.  The value at each point is simply the number
+ *          of pixels found at that value of saturation and intensity.
+ * 
+ */ +PIX * +pixMakeHistoSV(PIX *pixs, + l_int32 factor, + NUMA **pnasat, + NUMA **pnaval) +{ +l_int32 i, j, w, h, wplt, sval, vval, nd; +l_uint32 pixel; +l_uint32 *datat, *linet; +void **lined32; +NUMA *nasat, *naval; +PIX *pixt, *pixd; + + PROCNAME("pixMakeHistoSV"); + + if (pnasat) *pnasat = NULL; + if (pnaval) *pnaval = NULL; + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + + if (pnasat) { + nasat = numaCreate(256); + numaSetCount(nasat, 256); + *pnasat = nasat; + } + if (pnaval) { + naval = numaCreate(256); + numaSetCount(naval, 256); + *pnaval = naval; + } + + if (factor <= 1) + pixt = pixClone(pixs); + else + pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, + 1.0 / (l_float32)factor); + + /* Create the hue-value histogram */ + pixd = pixCreate(256, 256, 32); + lined32 = pixGetLinePtrs(pixd, NULL); + pixGetDimensions(pixt, &w, &h, NULL); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + for (j = 0; j < w; j++) { + pixel = linet[j]; + sval = (pixel >> L_GREEN_SHIFT) & 0xff; + vval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (pnasat) + numaShiftValue(nasat, sval, 1.0); + if (pnaval) + numaShiftValue(naval, vval, 1.0); + nd = GET_DATA_FOUR_BYTES(lined32[sval], vval); + SET_DATA_FOUR_BYTES(lined32[sval], vval, nd + 1); + } + } + + LEPT_FREE(lined32); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixFindHistoPeaksHSV() + * + * \param[in] pixs 32 bpp; HS, HV or SV histogram; not changed + * \param[in] type L_HS_HISTO, L_HV_HISTO or L_SV_HISTO + * \param[in] width half width of sliding window + * \param[in] height half height of sliding window + * \param[in] npeaks number of peaks to look for + * \param[in] erasefactor ratio of erase window size to sliding window size + * \param[out] ppta locations of max for each integrated peak area + * \param[out] pnatot integrated peak areas + * \param[out] ppixa [optional] pixa for debugging; NULL to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) %pixs is a 32 bpp histogram in a pair of HSV colorspace.  It
+ *          should be thought of as a single sample with 32 bps (bits/sample).
+ *      (2) After each peak is found, the peak is erased with a window
+ *          that is centered on the peak and scaled from the sliding
+ *          window by %erasefactor.  Typically, %erasefactor is chosen
+ *          to be > 1.0.
+ *      (3) Data for a maximum of %npeaks is returned in %pta and %natot.
+ *      (4) For debugging, after the pixa is returned, display with:
+ *          pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2);
+ * 
+ */ +l_ok +pixFindHistoPeaksHSV(PIX *pixs, + l_int32 type, + l_int32 width, + l_int32 height, + l_int32 npeaks, + l_float32 erasefactor, + PTA **ppta, + NUMA **pnatot, + PIXA **ppixa) +{ +l_int32 i, xmax, ymax, ewidth, eheight; +l_uint32 maxval; +BOX *box; +NUMA *natot; +PIX *pixh, *pixw, *pix1, *pix2, *pix3; +PTA *pta; + + PROCNAME("pixFindHistoPeaksHSV"); + + if (ppixa) *ppixa = NULL; + if (ppta) *ppta = NULL; + if (pnatot) *pnatot = NULL; + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs undefined or not 32 bpp", procName, 1); + if (!ppta || !pnatot) + return ERROR_INT("&pta and &natot not both defined", procName, 1); + if (type != L_HS_HISTO && type != L_HV_HISTO && type != L_SV_HISTO) + return ERROR_INT("invalid HSV histo type", procName, 1); + + if ((pta = ptaCreate(npeaks)) == NULL) + return ERROR_INT("pta not made", procName, 1); + *ppta = pta; + if ((natot = numaCreate(npeaks)) == NULL) + return ERROR_INT("natot not made", procName, 1); + *pnatot = natot; + + *ppta = pta; + if (type == L_SV_HISTO) + pixh = pixAddMirroredBorder(pixs, width + 1, width + 1, height + 1, + height + 1); + else /* type == L_HS_HISTO or type == L_HV_HISTO */ + pixh = pixAddMixedBorder(pixs, width + 1, width + 1, height + 1, + height + 1); + + /* Get the total count in the sliding window. If the window + * fully covers the peak, this will be the integrated + * volume under the peak. */ + pixw = pixWindowedMean(pixh, width, height, 1, 0); + pixDestroy(&pixh); + + /* Sequentially identify and erase peaks in the histogram. + * If requested for debugging, save a pixa of the sequence of + * false color histograms. */ + if (ppixa) + *ppixa = pixaCreate(0); + for (i = 0; i < npeaks; i++) { + pixGetMaxValueInRect(pixw, NULL, &maxval, &xmax, &ymax); + if (maxval == 0) break; + numaAddNumber(natot, maxval); + ptaAddPt(pta, xmax, ymax); + ewidth = (l_int32)(width * erasefactor); + eheight = (l_int32)(height * erasefactor); + box = boxCreate(xmax - ewidth, ymax - eheight, 2 * ewidth + 1, + 2 * eheight + 1); + + if (ppixa) { + pix1 = pixMaxDynamicRange(pixw, L_LINEAR_SCALE); + pixaAddPix(*ppixa, pix1, L_INSERT); + pix2 = pixConvertGrayToFalseColor(pix1, 1.0); + pixaAddPix(*ppixa, pix2, L_INSERT); + pix1 = pixMaxDynamicRange(pixw, L_LOG_SCALE); + pix2 = pixConvertGrayToFalseColor(pix1, 1.0); + pixaAddPix(*ppixa, pix2, L_INSERT); + pix3 = pixConvertTo32(pix1); + pixRenderHashBoxArb(pix3, box, 6, 2, L_NEG_SLOPE_LINE, + 1, 255, 100, 100); + pixaAddPix(*ppixa, pix3, L_INSERT); + pixDestroy(&pix1); + } + + pixClearInRect(pixw, box); + boxDestroy(&box); + if (type == L_HS_HISTO || type == L_HV_HISTO) { + /* clear wraps at bottom and top */ + if (ymax - eheight < 0) { /* overlap to bottom */ + box = boxCreate(xmax - ewidth, 240 + ymax - eheight, + 2 * ewidth + 1, eheight - ymax); + } else if (ymax + eheight > 239) { /* overlap to top */ + box = boxCreate(xmax - ewidth, 0, 2 * ewidth + 1, + ymax + eheight - 239); + } else { + box = NULL; + } + if (box) { + pixClearInRect(pixw, box); + boxDestroy(&box); + } + } + } + + pixDestroy(&pixw); + return 0; +} + + +/*! + * \brief displayHSVColorRange() + * + * \param[in] hval hue center value; in range [0 ... 240] + * \param[in] sval saturation center value; in range [0 ... 255] + * \param[in] vval max intensity value; in range [0 ... 255] + * \param[in] huehw half-width of hue range; > 0 + * \param[in] sathw half-width of saturation range; > 0 + * \param[in] nsamp number of samplings in each half-width in hue and sat + * \param[in] factor linear size of each color square, in pixels; > 3 + * \return pixd 32 bpp set of color squares over input range; NULL on error + * + *
+ * Notes:
+ *      (1) The total number of color samplings in each of the hue
+ *          and saturation directions is 2 * nsamp + 1.
+ * 
+ */ +PIX * +displayHSVColorRange(l_int32 hval, + l_int32 sval, + l_int32 vval, + l_int32 huehw, + l_int32 sathw, + l_int32 nsamp, + l_int32 factor) +{ +l_int32 i, j, w, huedelta, satdelta, hue, sat, rval, gval, bval; +PIX *pixt, *pixd; + + PROCNAME("displayHSVColorRange"); + + if (hval < 0 || hval > 240) + return (PIX *)ERROR_PTR("invalid hval", procName, NULL); + if (huehw < 5 || huehw > 120) + return (PIX *)ERROR_PTR("invalid huehw", procName, NULL); + if (sval - sathw < 0 || sval + sathw > 255) + return (PIX *)ERROR_PTR("invalid sval/sathw", procName, NULL); + if (nsamp < 1 || factor < 3) + return (PIX *)ERROR_PTR("invalid nsamp or rep. factor", procName, NULL); + if (vval < 0 || vval > 255) + return (PIX *)ERROR_PTR("invalid vval", procName, NULL); + + w = (2 * nsamp + 1); + huedelta = (l_int32)((l_float32)huehw / (l_float32)nsamp); + satdelta = (l_int32)((l_float32)sathw / (l_float32)nsamp); + pixt = pixCreate(w, w, 32); + for (i = 0; i < w; i++) { + hue = hval + huedelta * (i - nsamp); + if (hue < 0) hue += 240; + if (hue >= 240) hue -= 240; + for (j = 0; j < w; j++) { + sat = sval + satdelta * (j - nsamp); + convertHSVToRGB(hue, sat, vval, &rval, &gval, &bval); + pixSetRGBPixel(pixt, j, i, rval, gval, bval); + } + } + + pixd = pixExpandReplicate(pixt, factor); + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Colorspace conversion between RGB and YUV * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToYUV() + * + * \param[in] pixd can be NULL; if not NULL, must == pixs + * \param[in] pixs + * \return pixd always + * + *
+ * Notes:
+ *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
+ *      (2) The Y, U and V values are stored in the same places as
+ *          the r, g and b values, respectively.  Here, they are explicitly
+ *          placed in the 3 MS bytes in the pixel.
+ *      (3) Normalizing to 1 and considering the r,g,b components,
+ *          a simple way to understand the YUV space is:
+ *           ~ Y = weighted sum of (r,g,b)
+ *           ~ U = weighted difference between Y and B
+ *           ~ V = weighted difference between Y and R
+ *      (4) Following video conventions, Y, U and V are in the range:
+ *             Y: [16, 235]
+ *             U: [16, 240]
+ *             V: [16, 240]
+ *      (5) For the coefficients in the transform matrices, see eq. 4 in
+ *          "Frequently Asked Questions about Color" by Charles Poynton,
+ *          //http://user.engineering.uiowa.edu/~aip/Misc/ColorFAQ.html
+ * 
+ */ +PIX * +pixConvertRGBToYUV(PIX *pixd, + PIX *pixs) +{ +l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; +l_uint32 *line, *data; +PIXCMAP *cmap; + + PROCNAME("pixConvertRGBToYUV"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); + + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("not cmapped or rgb", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + + cmap = pixGetColormap(pixd); + if (cmap) { /* just convert the colormap */ + pixcmapConvertRGBToYUV(cmap); + return pixd; + } + + /* Convert RGB image */ + pixGetDimensions(pixd, &w, &h, NULL); + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); + line[j] = (yval << 24) | (uval << 16) | (vval << 8); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertYUVToRGB() + * + * \param[in] pixd can be NULL; if not NULL, must == pixs + * \param[in] pixs + * \return pixd always + * + *
+ * Notes:
+ *      (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL.
+ *      (2) The user takes responsibility for making sure that pixs is
+ *          in YUV space.
+ *      (3) The Y, U and V values are stored in the same places as
+ *          the r, g and b values, respectively.  Here, they are explicitly
+ *          placed in the 3 MS bytes in the pixel.
+ * 
+ */ +PIX * +pixConvertYUVToRGB(PIX *pixd, + PIX *pixs) +{ +l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; +l_uint32 pixel; +l_uint32 *line, *data; +PIXCMAP *cmap; + + PROCNAME("pixConvertYUVToRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && pixd != pixs) + return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); + + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("not cmapped or hsv", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + + cmap = pixGetColormap(pixd); + if (cmap) { /* just convert the colormap */ + pixcmapConvertYUVToRGB(cmap); + return pixd; + } + + /* Convert YUV image */ + pixGetDimensions(pixd, &w, &h, NULL); + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + pixel = line[j]; + yval = pixel >> 24; + uval = (pixel >> 16) & 0xff; + vval = (pixel >> 8) & 0xff; + convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, line + j); + } + } + + return pixd; +} + + +/*! + * \brief convertRGBToYUV() + * + * \param[in] rval, gval, bval RGB input + * \param[out] pyval, puval, pvval equivalent YUV values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The range of returned values is:
+ *            Y [16 ... 235]
+ *            U [16 ... 240]
+ *            V [16 ... 240]
+ * 
+ */ +l_ok +convertRGBToYUV(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 *pyval, + l_int32 *puval, + l_int32 *pvval) +{ +l_float32 norm; + + PROCNAME("convertRGBToYUV"); + + if (pyval) *pyval = 0; + if (puval) *puval = 0; + if (pvval) *pvval = 0; + if (!pyval || !puval || !pvval) + return ERROR_INT("&yval, &uval, &vval not all defined", procName, 1); + + norm = 1.0 / 256.; + *pyval = (l_int32)(16.0 + + norm * (65.738 * rval + 129.057 * gval + 25.064 * bval) + 0.5); + *puval = (l_int32)(128.0 + + norm * (-37.945 * rval -74.494 * gval + 112.439 * bval) + 0.5); + *pvval = (l_int32)(128.0 + + norm * (112.439 * rval - 94.154 * gval - 18.285 * bval) + 0.5); + return 0; +} + + +/*! + * \brief convertYUVToRGB() + * + * \param[in] yval, uval, vval YUV input + * \param[out] prval, pgval, pbval equivalent RGB values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The range of valid input values is:
+ *            Y [16 ... 235]
+ *            U [16 ... 240]
+ *            V [16 ... 240]
+ *      (2) Conversion of RGB --> YUV --> RGB leaves the image unchanged.
+ *      (3) The YUV gamut is larger than the RBG gamut; many YUV values
+ *          will result in an invalid RGB value.  We clip individual
+ *          r,g,b components to the range [0, 255], and do not test input.
+ * 
+ */ +l_ok +convertYUVToRGB(l_int32 yval, + l_int32 uval, + l_int32 vval, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 rval, gval, bval; +l_float32 norm, ym, um, vm; + + PROCNAME("convertYUVToRGB"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval || !pgval || !pbval) + return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); + + norm = 1.0 / 256.; + ym = yval - 16.0; + um = uval - 128.0; + vm = vval - 128.0; + rval = (l_int32)(norm * (298.082 * ym + 408.583 * vm) + 0.5); + gval = (l_int32)(norm * (298.082 * ym - 100.291 * um - 208.120 * vm) + + 0.5); + bval = (l_int32)(norm * (298.082 * ym + 516.411 * um) + 0.5); + *prval = L_MIN(255, L_MAX(0, rval)); + *pgval = L_MIN(255, L_MAX(0, gval)); + *pbval = L_MIN(255, L_MAX(0, bval)); + + return 0; +} + + +/*! + * \brief pixcmapConvertRGBToYUV() + * + * \param[in] cmap + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      ~ in-place transform
+ *      ~ See convertRGBToYUV() for def'n of YUV space.
+ *      ~ replaces: r --> y, g --> u, b --> v
+ * 
+ */ +l_ok +pixcmapConvertRGBToYUV(PIXCMAP *cmap) +{ +l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; + + PROCNAME("pixcmapConvertRGBToYUV"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); + pixcmapResetColor(cmap, i, yval, uval, vval); + } + return 0; +} + + +/*! + * \brief pixcmapConvertYUVToRGB() + * + * \param[in] cmap + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      ~ in-place transform
+ *      ~ See convertRGBToYUV() for def'n of YUV space.
+ *      ~ replaces: y --> r, u --> g, v --> b
+ * 
+ */ +l_ok +pixcmapConvertYUVToRGB(PIXCMAP *cmap) +{ +l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; + + PROCNAME("pixcmapConvertYUVToRGB"); + + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &yval, &uval, &vval); + convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); + pixcmapResetColor(cmap, i, rval, gval, bval); + } + return 0; +} + + +/*---------------------------------------------------------------------------* + * Colorspace conversion between RGB and XYZ * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToXYZ() + * + * \param[in] pixs 32 bpp rgb + * \return fpixa xyz + * + *
+ * Notes:
+ *      (1) The [x,y,z] values are stored as float values in three fpix
+ *          that are returned in a fpixa.
+ *      (2) The XYZ color space was defined in 1931 as a reference model that
+ *          simulates human color perception.  When Y is taken as luminance,
+ *          the values of X and Z constitute a color plane representing
+ *          all the hues that can be perceived.  This gamut of colors
+ *          is larger than the gamuts that can be displayed or printed.
+ *          For example, although all rgb values map to XYZ, the converse
+ *          is not true.
+ *      (3) The value of the coefficients depends on the illuminant.  We use
+ *          coefficients for converting sRGB under D65 (the spectrum from
+ *          a 6500 degree K black body; an approximation to daylight color).
+ *          See, e.g.,
+ *             http://www.cs.rit.edu/~ncs/color/t_convert.html
+ *          For more general information on color transforms, see:
+ *             http://www.brucelindbloom.com/
+ *             http://user.engineering.uiowa.edu/~aip/Misc/ColorFAQ.html
+ *             http://en.wikipedia.org/wiki/CIE_1931_color_space
+ * 
+ */ +FPIXA * +pixConvertRGBToXYZ(PIX *pixs) +{ +l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; +l_uint32 *lines, *datas; +l_float32 fxval, fyval, fzval; +l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; +FPIX *fpix; +FPIXA *fpixa; + + PROCNAME("pixConvertRGBToXYZ"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (FPIXA *)ERROR_PTR("pixs undefined or not rgb", procName, NULL); + + /* Convert RGB image */ + pixGetDimensions(pixs, &w, &h, NULL); + fpixa = fpixaCreate(3); + for (i = 0; i < 3; i++) { + fpix = fpixCreate(w, h); + fpixaAddFPix(fpixa, fpix, L_INSERT); + } + wpls = pixGetWpl(pixs); + wpld = fpixGetWpl(fpix); + datas = pixGetData(pixs); + datax = fpixaGetData(fpixa, 0); + datay = fpixaGetData(fpixa, 1); + dataz = fpixaGetData(fpixa, 2); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linex = datax + i * wpld; + liney = datay + i * wpld; + linez = dataz + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + convertRGBToXYZ(rval, gval, bval, &fxval, &fyval, &fzval); + *(linex + j) = fxval; + *(liney + j) = fyval; + *(linez + j) = fzval; + } + } + + return fpixa; +} + + +/*! + * \brief fpixaConvertXYZToRGB() + * + * \param[in] fpixa three fpix: x,y,z + * \return pixd 32 bpp rgb + * + *
+ * Notes:
+ *      (1) The xyz image is stored in three fpix.
+ *      (2) For values of xyz that are out of gamut for rgb, the rgb
+ *          components are set to the closest valid color.
+ * 
+ */ +PIX * +fpixaConvertXYZToRGB(FPIXA *fpixa) +{ +l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; +l_float32 fxval, fyval, fzval; +l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; +l_uint32 *lined, *datad; +PIX *pixd; +FPIX *fpix; + + PROCNAME("fpixaConvertXYZToRGB"); + + if (!fpixa || fpixaGetCount(fpixa) != 3) + return (PIX *)ERROR_PTR("fpixa undefined or invalid", procName, NULL); + + /* Convert XYZ image */ + if (fpixaGetFPixDimensions(fpixa, 0, &w, &h)) + return (PIX *)ERROR_PTR("fpixa dimensions not found", procName, NULL); + pixd = pixCreate(w, h, 32); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + datax = fpixaGetData(fpixa, 0); + datay = fpixaGetData(fpixa, 1); + dataz = fpixaGetData(fpixa, 2); + fpix = fpixaGetFPix(fpixa, 0, L_CLONE); + wpls = fpixGetWpl(fpix); + fpixDestroy(&fpix); + for (i = 0; i < h; i++) { + linex = datax + i * wpls; + liney = datay + i * wpls; + linez = dataz + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + fxval = linex[j]; + fyval = liney[j]; + fzval = linez[j]; + convertXYZToRGB(fxval, fyval, fzval, 0, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + + return pixd; +} + + +/*! + * \brief convertRGBToXYZ() + * + * \param[in] rval, gval, bval rgb input + * \param[out] pfxval, pfyval, pfzval equivalent xyz values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) These conversions are for illuminant D65 acting on linear sRGB
+ *          values.
+ * 
+ */ +l_ok +convertRGBToXYZ(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_float32 *pfxval, + l_float32 *pfyval, + l_float32 *pfzval) +{ + PROCNAME("convertRGBToXYZ"); + + if (pfxval) *pfxval = 0.0; + if (pfyval) *pfyval = 0.0; + if (pfzval) *pfzval = 0.0; + if (!pfxval || !pfyval || !pfzval) + return ERROR_INT("&xval, &yval, &zval not all defined", procName, 1); + + *pfxval = 0.4125 * rval + 0.3576 * gval + 0.1804 * bval; + *pfyval = 0.2127 * rval + 0.7152 * gval + 0.0722 * bval; + *pfzval = 0.0193 * rval + 0.1192 * gval + 0.9502 * bval; + return 0; +} + + +/*! + * \brief convertXYZToRGB() + * + * \param[in] fxval, fyval, fzval + * \param[in] blackout 0 to output nearest color if out of gamut; + * 1 to output black + * \param[out] prval, pgval, pbval 32 bpp rgb values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For values of xyz that are out of gamut for rgb, at least
+ *          one of the r, g or b components will be either less than 0
+ *          or greater than 255.  For that situation:
+ *            * if %blackout == 0, the individual component(s) that are out
+ *              of gamut will be set to 0 or 255, respectively.
+ *            * if %blackout == 1, the output color will be set to black
+ * 
+ */ +l_ok +convertXYZToRGB(l_float32 fxval, + l_float32 fyval, + l_float32 fzval, + l_int32 blackout, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 rval, gval, bval; + + PROCNAME("convertXYZToRGB"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval || !pgval ||!pbval) + return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); + *prval = *pgval = *pbval = 0; + + rval = (l_int32)(3.2405 * fxval - 1.5372 * fyval - 0.4985 * fzval + 0.5); + gval = (l_int32)(-0.9693 * fxval + 1.8760 * fyval + 0.0416 * fzval + 0.5); + bval = (l_int32)(0.0556 * fxval - 0.2040 * fyval + 1.0573 * fzval + 0.5); + if (blackout == 0) { /* the usual situation; use nearest rgb color */ + *prval = L_MAX(0, L_MIN(rval, 255)); + *pgval = L_MAX(0, L_MIN(gval, 255)); + *pbval = L_MAX(0, L_MIN(bval, 255)); + } else { /* use black for out of gamut */ + if (rval >= 0 && rval < 256 && gval >= 0 && gval < 256 && + bval >= 0 && bval < 256) { /* in gamut */ + *prval = rval; + *pgval = gval; + *pbval = bval; + } + } + return 0; +} + + +/*---------------------------------------------------------------------------* + * Colorspace conversion between XYZ and LAB * + *---------------------------------------------------------------------------*/ +/*! + * \brief fpixaConvertXYZToLAB() + * + * \param[in] fpixas xyz + * \return fpixa lab + * + *
+ * Notes:
+ *      (1) The input [x,y,z] and output [l,a,b] values are stored as
+ *          float values, each set in three fpix.
+ *      (2) The CIE LAB color space was invented in 1976, as an
+ *          absolute reference for specifying colors that we can
+ *          perceive, independently of the rendering device.  It was
+ *          invented to align color display and print images.
+ *          For information, see:
+ *             http://www.brucelindbloom.com/
+ *             http://en.wikipedia.org/wiki/Lab_color_space
+ * 
+ */ +FPIXA * +fpixaConvertXYZToLAB(FPIXA *fpixas) +{ +l_int32 w, h, wpl, i, j; +l_float32 fxval, fyval, fzval, flval, faval, fbval; +l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; +l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; +FPIX *fpix; +FPIXA *fpixad; + + PROCNAME("fpixaConvertXYZToLAB"); + + if (!fpixas || fpixaGetCount(fpixas) != 3) + return (FPIXA *)ERROR_PTR("fpixas undefined/invalid", procName, NULL); + + /* Convert XYZ image */ + if (fpixaGetFPixDimensions(fpixas, 0, &w, &h)) + return (FPIXA *)ERROR_PTR("fpixas sizes not found", procName, NULL); + fpixad = fpixaCreate(3); + for (i = 0; i < 3; i++) { + fpix = fpixCreate(w, h); + fpixaAddFPix(fpixad, fpix, L_INSERT); + } + wpl = fpixGetWpl(fpix); + datax = fpixaGetData(fpixas, 0); + datay = fpixaGetData(fpixas, 1); + dataz = fpixaGetData(fpixas, 2); + datal = fpixaGetData(fpixad, 0); + dataa = fpixaGetData(fpixad, 1); + datab = fpixaGetData(fpixad, 2); + + /* Convert XYZ image */ + for (i = 0; i < h; i++) { + linex = datax + i * wpl; + liney = datay + i * wpl; + linez = dataz + i * wpl; + linel = datal + i * wpl; + linea = dataa + i * wpl; + lineb = datab + i * wpl; + for (j = 0; j < w; j++) { + fxval = *(linex + j); + fyval = *(liney + j); + fzval = *(linez + j); + convertXYZToLAB(fxval, fyval, fzval, &flval, &faval, &fbval); + *(linel + j) = flval; + *(linea + j) = faval; + *(lineb + j) = fbval; + } + } + + return fpixad; +} + + +/*! + * \brief fpixaConvertLABToXYZ() + * + * \param[in] fpixas lab + * \return fpixa xyz + * + *
+ * Notes:
+ *      (1) The input [l,a,b] and output [x,y,z] values are stored as
+ *          float values, each set in three fpix.
+ * 
+ */ +FPIXA * +fpixaConvertLABToXYZ(FPIXA *fpixas) +{ +l_int32 w, h, wpl, i, j; +l_float32 fxval, fyval, fzval, flval, faval, fbval; +l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; +l_float32 *linex, *liney, *linez, *datax, *datay, *dataz; +FPIX *fpix; +FPIXA *fpixad; + + PROCNAME("fpixaConvertLABToXYZ"); + + if (!fpixas || fpixaGetCount(fpixas) != 3) + return (FPIXA *)ERROR_PTR("fpixas undefined/invalid", procName, NULL); + + /* Convert LAB image */ + if (fpixaGetFPixDimensions(fpixas, 0, &w, &h)) + return (FPIXA *)ERROR_PTR("fpixas sizes not found", procName, NULL); + fpixad = fpixaCreate(3); + for (i = 0; i < 3; i++) { + fpix = fpixCreate(w, h); + fpixaAddFPix(fpixad, fpix, L_INSERT); + } + wpl = fpixGetWpl(fpix); + datal = fpixaGetData(fpixas, 0); + dataa = fpixaGetData(fpixas, 1); + datab = fpixaGetData(fpixas, 2); + datax = fpixaGetData(fpixad, 0); + datay = fpixaGetData(fpixad, 1); + dataz = fpixaGetData(fpixad, 2); + + /* Convert XYZ image */ + for (i = 0; i < h; i++) { + linel = datal + i * wpl; + linea = dataa + i * wpl; + lineb = datab + i * wpl; + linex = datax + i * wpl; + liney = datay + i * wpl; + linez = dataz + i * wpl; + for (j = 0; j < w; j++) { + flval = *(linel + j); + faval = *(linea + j); + fbval = *(lineb + j); + convertLABToXYZ(flval, faval, fbval, &fxval, &fyval, &fzval); + *(linex + j) = fxval; + *(liney + j) = fyval; + *(linez + j) = fzval; + } + } + + return fpixad; +} + + +/*! + * \brief convertXYZToLAB() + * + * \param[in] xval, yval, zval input xyz + * \param[out] plval, paval, pbval equivalent lab values + * \return 0 if OK, 1 on error + */ +l_ok +convertXYZToLAB(l_float32 xval, + l_float32 yval, + l_float32 zval, + l_float32 *plval, + l_float32 *paval, + l_float32 *pbval) +{ +l_float32 xn, yn, zn, fx, fy, fz; + + PROCNAME("convertXYZToLAB"); + + if (plval) *plval = 0.0; + if (paval) *paval = 0.0; + if (pbval) *pbval = 0.0; + if (!plval || !paval || !pbval) + return ERROR_INT("&lval, &aval, &bval not all defined", procName, 1); + + /* First normalize to the corresponding white values */ + xn = 0.0041259 * xval; + yn = 0.0039216 * yval; + zn = 0.0036012 * zval; + /* Then apply the lab_forward function */ + fx = lab_forward(xn); + fy = lab_forward(yn); + fz = lab_forward(zn); + *plval = 116.0 * fy - 16.0; + *paval = 500.0 * (fx - fy); + *pbval = 200.0 * (fy - fz); + return 0; +} + + +/*! + * \brief convertLABToXYZ() + * + * \param[in] lval, aval, bval input lab + * \param[out] pxval, pyval, pzval equivalent xyz values + * \return 0 if OK, 1 on error + */ +l_ok +convertLABToXYZ(l_float32 lval, + l_float32 aval, + l_float32 bval, + l_float32 *pxval, + l_float32 *pyval, + l_float32 *pzval) +{ +l_float32 fx, fy, fz; +l_float32 xw = 242.37; /* x component corresponding to rgb white */ +l_float32 yw = 255.0; /* y component corresponding to rgb white */ +l_float32 zw = 277.69; /* z component corresponding to rgb white */ + + PROCNAME("convertLABToXYZ"); + + if (pxval) *pxval = 0.0; + if (pyval) *pyval = 0.0; + if (pzval) *pzval = 0.0; + if (!pxval || !pyval || !pzval) + return ERROR_INT("&xval, &yval, &zval not all defined", procName, 1); + + fy = 0.0086207 * (16.0 + lval); + fx = fy + 0.002 * aval; + fz = fy - 0.005 * bval; + *pxval = xw * lab_reverse(fx); + *pyval = yw * lab_reverse(fy); + *pzval = zw * lab_reverse(fz); + return 0; +} + + +/* + * See http://en.wikipedia.org/wiki/Lab_color_space for formulas. + * This is the forward function: from xyz to lab. It includes a rational + * function approximation over [0.008856 ... 1] to the cube root, from + * "Fast Color Space Transformations Using Minimax Approximations", + * M. Celebi et al, http://arxiv.org/pdf/1009.0854v1.pdf. + */ +static l_float32 +lab_forward(l_float32 v) +{ +const l_float32 f_thresh = 0.008856; /* (6/29)^3 */ +const l_float32 f_factor = 7.787; /* (1/3) * (29/6)^2) */ +const l_float32 f_offset = 0.13793; /* 4/29 */ + + if (v > f_thresh) { +#if SLOW_CUBE_ROOT + return powf(v, 0.333333); +#else + l_float32 num, den; + num = 4.37089e-04 + v * (9.52695e-02 + v * (1.25201 + v * 1.30273)); + den = 3.91236e-03 + v * (2.95408e-01 + v * (1.71714 + v * 6.34341e-01)); + return num / den; +#endif + } else { + return f_factor * v + f_offset; + } +} + + +/* + * See http://en.wikipedia.org/wiki/Lab_color_space for formulas. + * This is the reverse (inverse) function: from lab to xyz. + */ +static l_float32 +lab_reverse(l_float32 v) +{ +const l_float32 r_thresh = 0.20690; /* 6/29 */ +const l_float32 r_factor = 0.12842; /* 3 * (6/29)^2 */ +const l_float32 r_offset = 0.13793; /* 4/29 */ + + if (v > r_thresh) { + return v * v * v; + } else { + return r_factor * (v - r_offset); + } +} + + +/*---------------------------------------------------------------------------* + * Colorspace conversion between RGB and LAB * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToLAB() + * + * \param[in] pixs 32 bpp rgb + * \return fpixa lab + * + *
+ * Notes:
+ *      (1) The [l,a,b] values are stored as float values in three fpix
+ *          that are returned in a fpixa.
+ * 
+ */ +FPIXA * +pixConvertRGBToLAB(PIX *pixs) +{ +l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; +l_uint32 *lines, *datas; +l_float32 flval, faval, fbval; +l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; +FPIX *fpix; +FPIXA *fpixa; + + PROCNAME("pixConvertRGBToLAB"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (FPIXA *)ERROR_PTR("pixs undefined or not rgb", procName, NULL); + + /* Convert RGB image */ + pixGetDimensions(pixs, &w, &h, NULL); + fpixa = fpixaCreate(3); + for (i = 0; i < 3; i++) { + fpix = fpixCreate(w, h); + fpixaAddFPix(fpixa, fpix, L_INSERT); + } + wpls = pixGetWpl(pixs); + wpld = fpixGetWpl(fpix); + datas = pixGetData(pixs); + datal = fpixaGetData(fpixa, 0); + dataa = fpixaGetData(fpixa, 1); + datab = fpixaGetData(fpixa, 2); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linel = datal + i * wpld; + linea = dataa + i * wpld; + lineb = datab + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + convertRGBToLAB(rval, gval, bval, &flval, &faval, &fbval); + *(linel + j) = flval; + *(linea + j) = faval; + *(lineb + j) = fbval; + } + } + + return fpixa; +} + + +/*! + * \brief fpixaConvertLABToRGB() + * + * \param[in] fpixa three fpix: l,a,b + * \return pixd 32 bpp rgb + * + *
+ * Notes:
+ *      (1) The lab image is stored in three fpix.
+ * 
+ */ +PIX * +fpixaConvertLABToRGB(FPIXA *fpixa) +{ +l_int32 w, h, wpls, wpld, i, j, rval, gval, bval; +l_float32 flval, faval, fbval; +l_float32 *linel, *linea, *lineb, *datal, *dataa, *datab; +l_uint32 *lined, *datad; +PIX *pixd; +FPIX *fpix; + + PROCNAME("fpixaConvertLABToRGB"); + + if (!fpixa || fpixaGetCount(fpixa) != 3) + return (PIX *)ERROR_PTR("fpixa undefined or invalid", procName, NULL); + + /* Convert LAB image */ + if (fpixaGetFPixDimensions(fpixa, 0, &w, &h)) + return (PIX *)ERROR_PTR("fpixa dimensions not found", procName, NULL); + pixd = pixCreate(w, h, 32); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + datal = fpixaGetData(fpixa, 0); + dataa = fpixaGetData(fpixa, 1); + datab = fpixaGetData(fpixa, 2); + fpix = fpixaGetFPix(fpixa, 0, L_CLONE); + wpls = fpixGetWpl(fpix); + fpixDestroy(&fpix); + for (i = 0; i < h; i++) { + linel = datal + i * wpls; + linea = dataa + i * wpls; + lineb = datab + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + flval = linel[j]; + faval = linea[j]; + fbval = lineb[j]; + convertLABToRGB(flval, faval, fbval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + + return pixd; +} + + +/*! + * \brief convertRGBToLAB() + * + * \param[in] rval, gval, bval rgb input + * \param[out] pflval, pfaval, pfbval equivalent lab values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) These conversions are for illuminant D65 acting on linear sRGB
+ *          values.
+ * 
+ */ +l_ok +convertRGBToLAB(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_float32 *pflval, + l_float32 *pfaval, + l_float32 *pfbval) +{ +l_float32 fxval, fyval, fzval; + + PROCNAME("convertRGBToLAB"); + + if (pflval) *pflval = 0.0; + if (pfaval) *pfaval = 0.0; + if (pfbval) *pfbval = 0.0; + if (!pflval || !pfaval || !pfbval) + return ERROR_INT("&flval, &faval, &fbval not all defined", procName, 1); + + convertRGBToXYZ(rval, gval, bval, &fxval, &fyval, &fzval); + convertXYZToLAB(fxval, fyval, fzval, pflval, pfaval, pfbval); + return 0; +} + + +/*! + * \brief convertLABToRGB() + * + * \param[in] flval, faval, fbval input lab + * \param[out] prval, pgval, pbval equivalent rgb values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For values of lab that are out of gamut for rgb, the rgb
+ *          components are set to the closest valid color.
+ * 
+ */ +l_ok +convertLABToRGB(l_float32 flval, + l_float32 faval, + l_float32 fbval, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_float32 fxval, fyval, fzval; + + PROCNAME("convertLABToRGB"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval || !pgval || !pbval) + return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); + + convertLABToXYZ(flval, faval, fbval, &fxval, &fyval, &fzval); + convertXYZToRGB(fxval, fyval, fzval, 0, prval, pgval, pbval); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/compare.c b/3rdparty/hgOCR/leptonica/compare.c new file mode 100644 index 00000000..b3952ec7 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/compare.c @@ -0,0 +1,3604 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file compare.c + *
+ *
+ *      Test for pix equality
+ *           l_int32     pixEqual()
+ *           l_int32     pixEqualWithAlpha()
+ *           l_int32     pixEqualWithCmap()
+ *           l_int32     cmapEqual()
+ *           l_int32     pixUsesCmapColor()
+ *
+ *      Binary correlation
+ *           l_int32     pixCorrelationBinary()
+ *
+ *      Difference of two images of same size
+ *           l_int32     pixDisplayDiffBinary()
+ *           l_int32     pixCompareBinary()
+ *           l_int32     pixCompareGrayOrRGB()
+ *           l_int32     pixCompareGray()
+ *           l_int32     pixCompareRGB()
+ *           l_int32     pixCompareTiled()
+ *
+ *      Other measures of the difference of two images of the same size
+ *           NUMA       *pixCompareRankDifference()
+ *           l_int32     pixTestForSimilarity()
+ *           l_int32     pixGetDifferenceStats()
+ *           NUMA       *pixGetDifferenceHistogram()
+ *           l_int32     pixGetPerceptualDiff()
+ *           l_int32     pixGetPSNR()
+ *
+ *      Comparison of photo regions by histogram
+ *           l_int32     pixaComparePhotoRegionsByHisto()  -- top-level
+ *           l_int32     pixComparePhotoRegionsByHisto()  -- top-level for 2
+ *           l_int32     pixGenPhotoHistos()
+ *           PIX        *pixPadToCenterCentroid()
+ *           l_int32     pixCentroid8()
+ *           l_int32     pixDecideIfPhotoImage()
+ *       static l_int32  findHistoGridDimensions()
+ *           l_int32     compareTilesByHisto()
+ *
+ *           l_int32     pixCompareGrayByHisto()  -- top-level for 2
+ *       static l_int32  pixCompareTilesByHisto()
+ *           l_int32     pixCropAlignedToCentroid()
+ *
+ *           l_uint8    *l_compressGrayHistograms()
+ *           NUMAA      *l_uncompressGrayHistograms()
+ *
+ *      Translated images at the same resolution
+ *           l_int32     pixCompareWithTranslation()
+ *           l_int32     pixBestCorrelation()
+ *
+ *  For comparing images using tiled histograms, essentially all the
+ *  computation goes into deciding if a region of an image is a photo,
+ *  whether that photo region is amenable to similarity measurements
+ *  using histograms, and finally the calculation of the gray histograms
+ *  for each of the tiled regions.  The actual comparison is essentially
+ *  instantaneous.  Therefore, with a large number of images to compare
+ *  with each other, it is important to first calculate the histograms
+ *  for each image.  Then the comparisons, which go as the square of the
+ *  number of images, actually takes no time.
+ *
+ *  A high level function that takes a pixa of images and does
+ *  all comparisons, pixaComparePhotosByHisto(), uses this split
+ *  approach.  It pads the images so that the centroid is in the center,
+ *  which will allow the tiles to be better aligned.
+ *
+ *  For testing purposes, two functions are given that do all the work
+ *  to compare just two photo regions:
+ *    *  pixComparePhotoRegionsByHisto() uses the split approach, qualifying
+ *       the images first with pixGenPhotoHistos(), and then comparing
+ *       with compareTilesByHisto().
+ *    *  pixCompareGrayByHisto() aligns the two images by centroid
+ *       and calls pixCompareTilesByHisto() to generate the histograms
+ *       and do the comparison.
+ *
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Small enough to consider equal to 0.0, for plot output */ +static const l_float32 TINY = 0.00001; + +static l_ok findHistoGridDimensions(l_int32 n, l_int32 w, l_int32 h, + l_int32 *pnx, l_int32 *pny, l_int32 debug); +static l_ok pixCompareTilesByHisto(PIX *pix1, PIX *pix2, l_int32 maxgray, + l_int32 factor, l_int32 n, + l_float32 *pscore, PIXA *pixadebug); + + +/*------------------------------------------------------------------* + * Test for pix equality * + *------------------------------------------------------------------*/ +/*! + * \brief pixEqual() + * + * \param[in] pix1 + * \param[in] pix2 + * \param[out] psame 1 if same; 0 if different + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Equality is defined as having the same pixel values for
+ *          each respective image pixel.
+ *      (2) This works on two pix of any depth.  If one or both pix
+ *          have a colormap, the depths can be different and the
+ *          two pix can still be equal.
+ *      (3) This ignores the alpha component for 32 bpp images.
+ *      (4) If both pix have colormaps and the depths are equal,
+ *          use the pixEqualWithCmap() function, which does a fast
+ *          comparison if the colormaps are identical and a relatively
+ *          slow comparison otherwise.
+ *      (5) In all other cases, any existing colormaps must first be
+ *          removed before doing pixel comparison.  After the colormaps
+ *          are removed, the resulting two images must have the same depth.
+ *          The "lowest common denominator" is RGB, but this is only
+ *          chosen when necessary, or when both have colormaps but
+ *          different depths.
+ *      (6) For images without colormaps that are not 32 bpp, all bits
+ *          in the image part of the data array must be identical.
+ * 
+ */ +l_ok +pixEqual(PIX *pix1, + PIX *pix2, + l_int32 *psame) +{ + return pixEqualWithAlpha(pix1, pix2, 0, psame); +} + + +/*! + * \brief pixEqualWithAlpha() + * + * \param[in] pix1 + * \param[in] pix2 + * \param[in] use_alpha 1 to compare alpha in RGBA; 0 to ignore + * \param[out] psame 1 if same; 0 if different + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See notes in pixEqual().
+ *      (2) This is more general than pixEqual(), in that for 32 bpp
+ *          RGBA images, where spp = 4, you can optionally include
+ *          the alpha component in the comparison.
+ * 
+ */ +l_ok +pixEqualWithAlpha(PIX *pix1, + PIX *pix2, + l_int32 use_alpha, + l_int32 *psame) +{ +l_int32 w1, h1, d1, w2, h2, d2, wpl1, wpl2; +l_int32 spp1, spp2, i, j, color, mismatch, opaque; +l_int32 fullwords, linebits, endbits; +l_uint32 endmask, wordmask; +l_uint32 *data1, *data2, *line1, *line2; +PIX *pixs1, *pixs2, *pixt1, *pixt2, *pixalpha; +PIXCMAP *cmap1, *cmap2; + + PROCNAME("pixEqualWithAlpha"); + + if (!psame) + return ERROR_INT("psame not defined", procName, 1); + *psame = 0; /* init to not equal */ + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + pixGetDimensions(pix1, &w1, &h1, &d1); + pixGetDimensions(pix2, &w2, &h2, &d2); + if (w1 != w2 || h1 != h2) { + L_INFO("pix sizes differ\n", procName); + return 0; + } + + /* Suppose the use_alpha flag is true. + * If only one of two 32 bpp images has spp == 4, we call that + * a "mismatch" of the alpha component. In the case of a mismatch, + * if the 4 bpp pix does not have all alpha components opaque (255), + * the images are not-equal. However if they are all opaque, + * this image is equivalent to spp == 3, so we allow the + * comparison to go forward, testing only for the RGB equality. */ + spp1 = pixGetSpp(pix1); + spp2 = pixGetSpp(pix2); + mismatch = 0; + if (use_alpha && d1 == 32 && d2 == 32) { + mismatch = ((spp1 == 4 && spp2 != 4) || (spp1 != 4 && spp2 == 4)); + if (mismatch) { + pixalpha = (spp1 == 4) ? pix1 : pix2; + pixAlphaIsOpaque(pixalpha, &opaque); + if (!opaque) { + L_INFO("just one pix has a non-opaque alpha layer\n", procName); + return 0; + } + } + } + + cmap1 = pixGetColormap(pix1); + cmap2 = pixGetColormap(pix2); + if (!cmap1 && !cmap2 && (d1 != d2) && (d1 == 32 || d2 == 32)) { + L_INFO("no colormaps, pix depths unequal, and one of them is RGB\n", + procName); + return 0; + } + + if (cmap1 && cmap2 && (d1 == d2)) /* use special function */ + return pixEqualWithCmap(pix1, pix2, psame); + + /* Must remove colormaps if they exist, and in the process + * end up with the resulting images having the same depth. */ + if (cmap1 && !cmap2) { + pixUsesCmapColor(pix1, &color); + if (color && d2 <= 8) /* can't be equal */ + return 0; + if (d2 < 8) + pixs2 = pixConvertTo8(pix2, FALSE); + else + pixs2 = pixClone(pix2); + if (d2 <= 8) + pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_GRAYSCALE); + else + pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); + } else if (!cmap1 && cmap2) { + pixUsesCmapColor(pix2, &color); + if (color && d1 <= 8) /* can't be equal */ + return 0; + if (d1 < 8) + pixs1 = pixConvertTo8(pix1, FALSE); + else + pixs1 = pixClone(pix1); + if (d1 <= 8) + pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_GRAYSCALE); + else + pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); + } else if (cmap1 && cmap2) { /* depths not equal; use rgb */ + pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); + pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); + } else { /* no colormaps */ + pixs1 = pixClone(pix1); + pixs2 = pixClone(pix2); + } + + /* OK, we have no colormaps, but the depths may still be different */ + d1 = pixGetDepth(pixs1); + d2 = pixGetDepth(pixs2); + if (d1 != d2) { + if (d1 == 16 || d2 == 16) { + L_INFO("one pix is 16 bpp\n", procName); + pixDestroy(&pixs1); + pixDestroy(&pixs2); + return 0; + } + pixt1 = pixConvertLossless(pixs1, 8); + pixt2 = pixConvertLossless(pixs2, 8); + if (!pixt1 || !pixt2) { + L_INFO("failure to convert to 8 bpp\n", procName); + pixDestroy(&pixs1); + pixDestroy(&pixs2); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return 0; + } + } else { + pixt1 = pixClone(pixs1); + pixt2 = pixClone(pixs2); + } + pixDestroy(&pixs1); + pixDestroy(&pixs2); + + /* No colormaps, equal depths; do pixel comparisons */ + d1 = pixGetDepth(pixt1); + d2 = pixGetDepth(pixt2); + wpl1 = pixGetWpl(pixt1); + wpl2 = pixGetWpl(pixt2); + data1 = pixGetData(pixt1); + data2 = pixGetData(pixt2); + + if (d1 == 32) { /* test either RGB or RGBA pixels */ + if (use_alpha && !mismatch) + wordmask = (spp1 == 3) ? 0xffffff00 : 0xffffffff; + else + wordmask = 0xffffff00; + for (i = 0; i < h1; i++) { + line1 = data1 + wpl1 * i; + line2 = data2 + wpl2 * i; + for (j = 0; j < wpl1; j++) { + if ((*line1 ^ *line2) & wordmask) { + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return 0; + } + line1++; + line2++; + } + } + } else { /* all bits count */ + linebits = d1 * w1; + fullwords = linebits / 32; + endbits = linebits & 31; + endmask = (endbits == 0) ? 0 : (0xffffffff << (32 - endbits)); + for (i = 0; i < h1; i++) { + line1 = data1 + wpl1 * i; + line2 = data2 + wpl2 * i; + for (j = 0; j < fullwords; j++) { + if (*line1 ^ *line2) { + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return 0; + } + line1++; + line2++; + } + if (endbits) { + if ((*line1 ^ *line2) & endmask) { + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return 0; + } + } + } + } + + pixDestroy(&pixt1); + pixDestroy(&pixt2); + *psame = 1; + return 0; +} + + +/*! + * \brief pixEqualWithCmap() + * + * \param[in] pix1 + * \param[in] pix2 + * \param[out] psame + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns same = TRUE if the images have identical content.
+ *      (2) Both pix must have a colormap, and be of equal size and depth.
+ *          If these conditions are not satisfied, it is not an error;
+ *          the returned result is same = FALSE.
+ *      (3) We then check whether the colormaps are the same; if so,
+ *          the comparison proceeds 32 bits at a time.
+ *      (4) If the colormaps are different, the comparison is done by
+ *          slow brute force.
+ * 
+ */ +l_ok +pixEqualWithCmap(PIX *pix1, + PIX *pix2, + l_int32 *psame) +{ +l_int32 d, w, h, wpl1, wpl2, i, j, linebits, fullwords, endbits; +l_int32 rval1, rval2, gval1, gval2, bval1, bval2, samecmaps; +l_uint32 endmask, val1, val2; +l_uint32 *data1, *data2, *line1, *line2; +PIXCMAP *cmap1, *cmap2; + + PROCNAME("pixEqualWithCmap"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + + if (pixSizesEqual(pix1, pix2) == 0) + return 0; + cmap1 = pixGetColormap(pix1); + cmap2 = pixGetColormap(pix2); + if (!cmap1 || !cmap2) { + L_INFO("both images don't have colormap\n", procName); + return 0; + } + pixGetDimensions(pix1, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8) { + L_INFO("pix depth not in {1, 2, 4, 8}\n", procName); + return 0; + } + + cmapEqual(cmap1, cmap2, 3, &samecmaps); + if (samecmaps == TRUE) { /* colormaps are identical; compare by words */ + linebits = d * w; + wpl1 = pixGetWpl(pix1); + wpl2 = pixGetWpl(pix2); + data1 = pixGetData(pix1); + data2 = pixGetData(pix2); + fullwords = linebits / 32; + endbits = linebits & 31; + endmask = (endbits == 0) ? 0 : (0xffffffff << (32 - endbits)); + for (i = 0; i < h; i++) { + line1 = data1 + wpl1 * i; + line2 = data2 + wpl2 * i; + for (j = 0; j < fullwords; j++) { + if (*line1 ^ *line2) + return 0; + line1++; + line2++; + } + if (endbits) { + if ((*line1 ^ *line2) & endmask) + return 0; + } + } + *psame = 1; + return 0; + } + + /* Colormaps aren't identical; compare pixel by pixel */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pix1, j, i, &val1); + pixGetPixel(pix2, j, i, &val2); + pixcmapGetColor(cmap1, val1, &rval1, &gval1, &bval1); + pixcmapGetColor(cmap2, val2, &rval2, &gval2, &bval2); + if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) + return 0; + } + } + + *psame = 1; + return 0; +} + + +/*! + * \brief cmapEqual() + * + * \param[in] cmap1 + * \param[in] cmap2 + * \param[in] ncomps 3 for RGB, 4 for RGBA + * \param[out] psame + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns %same = TRUE if the colormaps have identical entries.
+ *      (2) If %ncomps == 4, the alpha components of the colormaps are also
+ *          compared.
+ * 
+ */ +l_ok +cmapEqual(PIXCMAP *cmap1, + PIXCMAP *cmap2, + l_int32 ncomps, + l_int32 *psame) +{ +l_int32 n1, n2, i, rval1, rval2, gval1, gval2, bval1, bval2, aval1, aval2; + + PROCNAME("cmapEqual"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = FALSE; + if (!cmap1) + return ERROR_INT("cmap1 not defined", procName, 1); + if (!cmap2) + return ERROR_INT("cmap2 not defined", procName, 1); + if (ncomps != 3 && ncomps != 4) + return ERROR_INT("ncomps not 3 or 4", procName, 1); + + n1 = pixcmapGetCount(cmap1); + n2 = pixcmapGetCount(cmap2); + if (n1 != n2) { + L_INFO("colormap sizes are different\n", procName); + return 0; + } + + for (i = 0; i < n1; i++) { + pixcmapGetRGBA(cmap1, i, &rval1, &gval1, &bval1, &aval1); + pixcmapGetRGBA(cmap2, i, &rval2, &gval2, &bval2, &aval2); + if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) + return 0; + if (ncomps == 4 && aval1 != aval2) + return 0; + } + *psame = TRUE; + return 0; +} + + +/*! + * \brief pixUsesCmapColor() + * + * \param[in] pixs any depth, colormap + * \param[out] pcolor TRUE if color found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns color = TRUE if three things are obtained:
+ *          (a) the pix has a colormap
+ *          (b) the colormap has at least one color entry
+ *          (c) a color entry is actually used
+ *      (2) It is used in pixEqual() for comparing two images, in a
+ *          situation where it is required to know if the colormap
+ *          has color entries that are actually used in the image.
+ * 
+ */ +l_ok +pixUsesCmapColor(PIX *pixs, + l_int32 *pcolor) +{ +l_int32 n, i, rval, gval, bval, numpix; +NUMA *na; +PIXCMAP *cmap; + + PROCNAME("pixUsesCmapColor"); + + if (!pcolor) + return ERROR_INT("&color not defined", procName, 1); + *pcolor = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + if ((cmap = pixGetColormap(pixs)) == NULL) + return 0; + + pixcmapHasColor(cmap, pcolor); + if (*pcolor == 0) /* no color */ + return 0; + + /* The cmap has color entries. Are they used? */ + na = pixGetGrayHistogram(pixs, 1); + n = pixcmapGetCount(cmap); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + numaGetIValue(na, i, &numpix); + if ((rval != gval || rval != bval) && numpix) { /* color found! */ + *pcolor = 1; + break; + } + } + numaDestroy(&na); + + return 0; +} + + +/*------------------------------------------------------------------* + * Binary correlation * + *------------------------------------------------------------------*/ +/*! + * \brief pixCorrelationBinary() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \param[out] pval correlation + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The correlation is a number between 0.0 and 1.0,
+ *          based on foreground similarity:
+ *                           (|1 AND 2|)**2
+ *            correlation =  --------------
+ *                             |1| * |2|
+ *          where |x| is the count of foreground pixels in image x.
+ *          If the images are identical, this is 1.0.
+ *          If they have no fg pixels in common, this is 0.0.
+ *          If one or both images have no fg pixels, the correlation is 0.0.
+ *      (2) Typically the two images are of equal size, but this
+ *          is not enforced.  Instead, the UL corners are aligned.
+ * 
+ */ +l_ok +pixCorrelationBinary(PIX *pix1, + PIX *pix2, + l_float32 *pval) +{ +l_int32 count1, count2, countn; +l_int32 *tab8; +PIX *pixn; + + PROCNAME("pixCorrelationBinary"); + + if (!pval) + return ERROR_INT("&pval not defined", procName, 1); + *pval = 0.0; + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + + tab8 = makePixelSumTab8(); + pixCountPixels(pix1, &count1, tab8); + pixCountPixels(pix2, &count2, tab8); + if (count1 == 0 || count2 == 0) { + LEPT_FREE(tab8); + return 0; + } + pixn = pixAnd(NULL, pix1, pix2); + pixCountPixels(pixn, &countn, tab8); + *pval = (l_float32)countn * (l_float32)countn / + ((l_float32)count1 * (l_float32)count2); + LEPT_FREE(tab8); + pixDestroy(&pixn); + return 0; +} + + +/*------------------------------------------------------------------* + * Difference of two images * + *------------------------------------------------------------------*/ +/*! + * \brief pixDisplayDiffBinary() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \return pixd 4 bpp cmapped, or NULL on error + * + *
+ * Notes:
+ *      (1) This gives a color representation of the difference between
+ *          pix1 and pix2.  The color difference depends on the order.
+ *          The pixels in pixd have 4 colors:
+ *           * unchanged:  black (on), white (off)
+ *           * on in pix1, off in pix2: red
+ *           * on in pix2, off in pix1: green
+ *      (2) This aligns the UL corners of pix1 and pix2, and crops
+ *          to the overlapping pixels.
+ * 
+ */ +PIX * +pixDisplayDiffBinary(PIX *pix1, + PIX *pix2) +{ +l_int32 w1, h1, d1, w2, h2, d2, minw, minh; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixDisplayDiffBinary"); + + if (!pix1 || !pix2) + return (PIX *)ERROR_PTR("pix1, pix2 not both defined", procName, NULL); + pixGetDimensions(pix1, &w1, &h1, &d1); + pixGetDimensions(pix2, &w2, &h2, &d2); + if (d1 != 1 || d2 != 1) + return (PIX *)ERROR_PTR("pix1 and pix2 not 1 bpp", procName, NULL); + minw = L_MIN(w1, w2); + minh = L_MIN(h1, h2); + + pixd = pixCreate(minw, minh, 4); + cmap = pixcmapCreate(4); + pixcmapAddColor(cmap, 255, 255, 255); /* initialized to white */ + pixcmapAddColor(cmap, 0, 0, 0); + pixcmapAddColor(cmap, 255, 0, 0); + pixcmapAddColor(cmap, 0, 255, 0); + pixSetColormap(pixd, cmap); + + pixt = pixAnd(NULL, pix1, pix2); + pixPaintThroughMask(pixd, pixt, 0, 0, 0x0); /* black */ + pixSubtract(pixt, pix1, pix2); + pixPaintThroughMask(pixd, pixt, 0, 0, 0xff000000); /* red */ + pixSubtract(pixt, pix2, pix1); + pixPaintThroughMask(pixd, pixt, 0, 0, 0x00ff0000); /* green */ + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixCompareBinary() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \param[in] comptype L_COMPARE_XOR, L_COMPARE_SUBTRACT + * \param[out] pfract fraction of pixels that are different + * \param[out] ppixdiff [optional] pix of difference + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The two images are aligned at the UL corner, and do not
+ *          need to be the same size.
+ *      (2) If using L_COMPARE_SUBTRACT, pix2 is subtracted from pix1.
+ *      (3) The total number of pixels is determined by pix1.
+ *      (4) On error, the returned fraction is 1.0.
+ * 
+ */ +l_ok +pixCompareBinary(PIX *pix1, + PIX *pix2, + l_int32 comptype, + l_float32 *pfract, + PIX **ppixdiff) +{ +l_int32 w, h, count; +PIX *pixt; + + PROCNAME("pixCompareBinary"); + + if (ppixdiff) *ppixdiff = NULL; + if (!pfract) + return ERROR_INT("&pfract not defined", procName, 1); + *pfract = 1.0; /* initialize to max difference */ + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); + if (comptype != L_COMPARE_XOR && comptype != L_COMPARE_SUBTRACT) + return ERROR_INT("invalid comptype", procName, 1); + + if (comptype == L_COMPARE_XOR) + pixt = pixXor(NULL, pix1, pix2); + else /* comptype == L_COMPARE_SUBTRACT) */ + pixt = pixSubtract(NULL, pix1, pix2); + pixCountPixels(pixt, &count, NULL); + pixGetDimensions(pix1, &w, &h, NULL); + *pfract = (l_float32)(count) / (l_float32)(w * h); + + if (ppixdiff) + *ppixdiff = pixt; + else + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixCompareGrayOrRGB() + * + * \param[in] pix1 2,4,8,16 bpp gray, 32 bpp rgb, or colormapped + * \param[in] pix2 2,4,8,16 bpp gray, 32 bpp rgb, or colormapped + * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF + * \param[in] plottype gplot plot output type, or 0 for no plot + * \param[out] psame [optional] 1 if pixel values are identical + * \param[out] pdiff [optional] average difference + * \param[out] prmsdiff [optional] rms of difference + * \param[out] ppixdiff [optional] pix of difference + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The two images are aligned at the UL corner, and do not
+ *          need to be the same size.  If they are not the same size,
+ *          the comparison will be made over overlapping pixels.
+ *      (2) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (3) If RGB, each component is compared separately.
+ *      (4) If type is L_COMPARE_ABS_DIFF, pix2 is subtracted from pix1
+ *          and the absolute value is taken.
+ *      (5) If type is L_COMPARE_SUBTRACT, pix2 is subtracted from pix1
+ *          and the result is clipped to 0.
+ *      (6) The plot output types are specified in gplot.h.
+ *          Use 0 if no difference plot is to be made.
+ *      (7) If the images are pixelwise identical, no difference
+ *          plot is made, even if requested.  The result (TRUE or FALSE)
+ *          is optionally returned in the parameter 'same'.
+ *      (8) The average difference (either subtracting or absolute value)
+ *          is optionally returned in the parameter 'diff'.
+ *      (9) The RMS difference is optionally returned in the
+ *          parameter 'rmsdiff'.  For RGB, we return the average of
+ *          the RMS differences for each of the components.
+ *     (10) Because pixel values are compared, pix1 and pix2 can be equal when:
+ *          * they are both gray with different depth
+ *          * one is colormapped and the other is not
+ *          * they are both colormapped and have different size colormaps
+ * 
+ */ +l_ok +pixCompareGrayOrRGB(PIX *pix1, + PIX *pix2, + l_int32 comptype, + l_int32 plottype, + l_int32 *psame, + l_float32 *pdiff, + l_float32 *prmsdiff, + PIX **ppixdiff) +{ +l_int32 retval, d1, d2; +PIX *pixt1, *pixt2, *pixs1, *pixs2; + + PROCNAME("pixCompareGrayOrRGB"); + + if (psame) *psame = 0; + if (pdiff) *pdiff = 255.0; + if (prmsdiff) *prmsdiff = 255.0; + if (ppixdiff) *ppixdiff = NULL; + if (!pix1 || pixGetDepth(pix1) == 1) + return ERROR_INT("pix1 not defined or 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) == 1) + return ERROR_INT("pix2 not defined or 1 bpp", procName, 1); + if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) + return ERROR_INT("invalid comptype", procName, 1); + if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) + return ERROR_INT("invalid plottype", procName, 1); + + pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); + pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); + d1 = pixGetDepth(pixt1); + d2 = pixGetDepth(pixt2); + if (d1 < 8) + pixs1 = pixConvertTo8(pixt1, FALSE); + else + pixs1 = pixClone(pixt1); + if (d2 < 8) + pixs2 = pixConvertTo8(pixt2, FALSE); + else + pixs2 = pixClone(pixt2); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + d1 = pixGetDepth(pixs1); + d2 = pixGetDepth(pixs2); + if (d1 != d2) { + pixDestroy(&pixs1); + pixDestroy(&pixs2); + return ERROR_INT("intrinsic depths are not equal", procName, 1); + } + + if (d1 == 8 || d1 == 16) + retval = pixCompareGray(pixs1, pixs2, comptype, plottype, psame, + pdiff, prmsdiff, ppixdiff); + else /* d1 == 32 */ + retval = pixCompareRGB(pixs1, pixs2, comptype, plottype, psame, + pdiff, prmsdiff, ppixdiff); + pixDestroy(&pixs1); + pixDestroy(&pixs2); + return retval; +} + + +/*! + * \brief pixCompareGray() + * + * \param[in] pix1 8 or 16 bpp, not cmapped + * \param[in] pix2 8 or 16 bpp, not cmapped + * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF + * \param[in] plottype gplot plot output type, or 0 for no plot + * \param[out] psame [optional] 1 if pixel values are identical + * \param[out] pdiff [optional] average difference + * \param[out] prmsdiff [optional] rms of difference + * \param[out] ppixdiff [optional] pix of difference + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See pixCompareGrayOrRGB() for details.
+ *      (2) Use pixCompareGrayOrRGB() if the input pix are colormapped.
+ *      (3) Note: setting %plottype > 0 can result in writing named
+ *                output files.
+ * 
+ */ +l_ok +pixCompareGray(PIX *pix1, + PIX *pix2, + l_int32 comptype, + l_int32 plottype, + l_int32 *psame, + l_float32 *pdiff, + l_float32 *prmsdiff, + PIX **ppixdiff) +{ +char buf[64]; +static l_int32 index = 0; +l_int32 d1, d2, same, first, last; +GPLOT *gplot; +NUMA *na, *nac; +PIX *pixt; + + PROCNAME("pixCompareGray"); + + if (psame) *psame = 0; + if (pdiff) *pdiff = 255.0; + if (prmsdiff) *prmsdiff = 255.0; + if (ppixdiff) *ppixdiff = NULL; + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + d1 = pixGetDepth(pix1); + d2 = pixGetDepth(pix2); + if ((d1 != d2) || (d1 != 8 && d1 != 16)) + return ERROR_INT("depths unequal or not 8 or 16 bpp", procName, 1); + if (pixGetColormap(pix1) || pixGetColormap(pix2)) + return ERROR_INT("pix1 and/or pix2 are colormapped", procName, 1); + if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) + return ERROR_INT("invalid comptype", procName, 1); + if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) + return ERROR_INT("invalid plottype", procName, 1); + + lept_mkdir("lept/comp"); + + if (comptype == L_COMPARE_SUBTRACT) + pixt = pixSubtractGray(NULL, pix1, pix2); + else /* comptype == L_COMPARE_ABS_DIFF) */ + pixt = pixAbsDifference(pix1, pix2); + + pixZero(pixt, &same); + if (same) + L_INFO("Images are pixel-wise identical\n", procName); + if (psame) *psame = same; + + if (pdiff) + pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_MEAN_ABSVAL, pdiff); + + /* Don't bother to plot if the images are the same */ + if (plottype && !same) { + L_INFO("Images differ: output plots will be generated\n", procName); + na = pixGetGrayHistogram(pixt, 1); + numaGetNonzeroRange(na, TINY, &first, &last); + nac = numaClipToInterval(na, 0, last); + snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_gray%d", index); + gplot = gplotCreate(buf, plottype, + "Pixel Difference Histogram", "diff val", + "number of pixels"); + gplotAddPlot(gplot, NULL, nac, GPLOT_LINES, "gray"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_gray%d.png", + index++); + l_fileDisplay(buf, 100, 100, 1.0); + numaDestroy(&na); + numaDestroy(&nac); + } + + if (ppixdiff) + *ppixdiff = pixCopy(NULL, pixt); + + if (prmsdiff) { + if (comptype == L_COMPARE_SUBTRACT) { /* wrong type for rms diff */ + pixDestroy(&pixt); + pixt = pixAbsDifference(pix1, pix2); + } + pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, prmsdiff); + } + + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixCompareRGB() + * + * \param[in] pix1 32 bpp rgb + * \param[in] pix2 32 bpp rgb + * \param[in] comptype L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF + * \param[in] plottype gplot plot output type, or 0 for no plot + * \param[out] psame [optional] 1 if pixel values are identical + * \param[out] pdiff [optional] average difference + * \param[out] prmsdiff [optional] rms of difference + * \param[out] ppixdiff [optional] pix of difference + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See pixCompareGrayOrRGB() for details.
+ *      (2) Note: setting %plottype > 0 can result in writing named
+ *                output files.
+ * 
+ */ +l_ok +pixCompareRGB(PIX *pix1, + PIX *pix2, + l_int32 comptype, + l_int32 plottype, + l_int32 *psame, + l_float32 *pdiff, + l_float32 *prmsdiff, + PIX **ppixdiff) +{ +char buf[64]; +static l_int32 index = 0; +l_int32 rsame, gsame, bsame, same, first, rlast, glast, blast, last; +l_float32 rdiff, gdiff, bdiff; +GPLOT *gplot; +NUMA *nar, *nag, *nab, *narc, *nagc, *nabc; +PIX *pixr1, *pixr2, *pixg1, *pixg2, *pixb1, *pixb2; +PIX *pixr, *pixg, *pixb; + + PROCNAME("pixCompareRGB"); + + if (psame) *psame = 0; + if (pdiff) *pdiff = 0.0; + if (prmsdiff) *prmsdiff = 0.0; + if (ppixdiff) *ppixdiff = NULL; + if (!pix1 || pixGetDepth(pix1) != 32) + return ERROR_INT("pix1 not defined or not 32 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 32) + return ERROR_INT("pix2 not defined or not ew bpp", procName, 1); + if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) + return ERROR_INT("invalid comptype", procName, 1); + if (plottype < 0 || plottype >= NUM_GPLOT_OUTPUTS) + return ERROR_INT("invalid plottype", procName, 1); + + lept_mkdir("lept/comp"); + + pixr1 = pixGetRGBComponent(pix1, COLOR_RED); + pixr2 = pixGetRGBComponent(pix2, COLOR_RED); + pixg1 = pixGetRGBComponent(pix1, COLOR_GREEN); + pixg2 = pixGetRGBComponent(pix2, COLOR_GREEN); + pixb1 = pixGetRGBComponent(pix1, COLOR_BLUE); + pixb2 = pixGetRGBComponent(pix2, COLOR_BLUE); + if (comptype == L_COMPARE_SUBTRACT) { + pixr = pixSubtractGray(NULL, pixr1, pixr2); + pixg = pixSubtractGray(NULL, pixg1, pixg2); + pixb = pixSubtractGray(NULL, pixb1, pixb2); + } else { /* comptype == L_COMPARE_ABS_DIFF) */ + pixr = pixAbsDifference(pixr1, pixr2); + pixg = pixAbsDifference(pixg1, pixg2); + pixb = pixAbsDifference(pixb1, pixb2); + } + + pixZero(pixr, &rsame); + pixZero(pixg, &gsame); + pixZero(pixb, &bsame); + same = rsame && gsame && bsame; + if (same) + L_INFO("Images are pixel-wise identical\n", procName); + if (psame) *psame = same; + + if (pdiff) { + pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_MEAN_ABSVAL, &rdiff); + pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_MEAN_ABSVAL, &gdiff); + pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_MEAN_ABSVAL, &bdiff); + *pdiff = (rdiff + gdiff + bdiff) / 3.0; + } + + /* Don't bother to plot if the images are the same */ + if (plottype && !same) { + L_INFO("Images differ: output plots will be generated\n", procName); + nar = pixGetGrayHistogram(pixr, 1); + nag = pixGetGrayHistogram(pixg, 1); + nab = pixGetGrayHistogram(pixb, 1); + numaGetNonzeroRange(nar, TINY, &first, &rlast); + numaGetNonzeroRange(nag, TINY, &first, &glast); + numaGetNonzeroRange(nab, TINY, &first, &blast); + last = L_MAX(rlast, glast); + last = L_MAX(last, blast); + narc = numaClipToInterval(nar, 0, last); + nagc = numaClipToInterval(nag, 0, last); + nabc = numaClipToInterval(nab, 0, last); + snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_rgb%d", index); + gplot = gplotCreate(buf, plottype, + "Pixel Difference Histogram", "diff val", + "number of pixels"); + gplotAddPlot(gplot, NULL, narc, GPLOT_LINES, "red"); + gplotAddPlot(gplot, NULL, nagc, GPLOT_LINES, "green"); + gplotAddPlot(gplot, NULL, nabc, GPLOT_LINES, "blue"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + snprintf(buf, sizeof(buf), "/tmp/lept/comp/compare_rgb%d.png", + index++); + l_fileDisplay(buf, 100, 100, 1.0); + numaDestroy(&nar); + numaDestroy(&nag); + numaDestroy(&nab); + numaDestroy(&narc); + numaDestroy(&nagc); + numaDestroy(&nabc); + } + + if (ppixdiff) + *ppixdiff = pixCreateRGBImage(pixr, pixg, pixb); + + if (prmsdiff) { + if (comptype == L_COMPARE_SUBTRACT) { + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + pixr = pixAbsDifference(pixr1, pixr2); + pixg = pixAbsDifference(pixg1, pixg2); + pixb = pixAbsDifference(pixb1, pixb2); + } + pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &rdiff); + pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &gdiff); + pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &bdiff); + *prmsdiff = (rdiff + gdiff + bdiff) / 3.0; + } + + pixDestroy(&pixr1); + pixDestroy(&pixr2); + pixDestroy(&pixg1); + pixDestroy(&pixg2); + pixDestroy(&pixb1); + pixDestroy(&pixb2); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return 0; +} + + +/*! + * \brief pixCompareTiled() + * + * \param[in] pix1 8 bpp or 32 bpp rgb + * \param[in] pix2 8 bpp 32 bpp rgb + * \param[in] sx, sy tile size; must be > 1 in each dimension + * \param[in] type L_MEAN_ABSVAL or L_ROOT_MEAN_SQUARE + * \param[out] ppixdiff pix of difference + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) With L_MEAN_ABSVAL, we compute for each tile the
+ *          average abs value of the pixel component difference between
+ *          the two (aligned) images.  With L_ROOT_MEAN_SQUARE, we
+ *          compute instead the rms difference over all components.
+ *      (2) The two input pix must be the same depth.  Comparison is made
+ *          using UL corner alignment.
+ *      (3) For 32 bpp, the distance between corresponding tiles
+ *          is found by averaging the measured difference over all three
+ *          components of each pixel in the tile.
+ *      (4) The result, pixdiff, contains one pixel for each source tile.
+ * 
+ */ +l_ok +pixCompareTiled(PIX *pix1, + PIX *pix2, + l_int32 sx, + l_int32 sy, + l_int32 type, + PIX **ppixdiff) +{ +l_int32 d1, d2, w, h; +PIX *pixt, *pixr, *pixg, *pixb; +PIX *pixrdiff, *pixgdiff, *pixbdiff; +PIXACC *pixacc; + + PROCNAME("pixCompareTiled"); + + if (!ppixdiff) + return ERROR_INT("&pixdiff not defined", procName, 1); + *ppixdiff = NULL; + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + d1 = pixGetDepth(pix1); + d2 = pixGetDepth(pix2); + if (d1 != d2) + return ERROR_INT("depths not equal", procName, 1); + if (d1 != 8 && d1 != 32) + return ERROR_INT("pix1 not 8 or 32 bpp", procName, 1); + if (d2 != 8 && d2 != 32) + return ERROR_INT("pix2 not 8 or 32 bpp", procName, 1); + if (sx < 2 || sy < 2) + return ERROR_INT("sx and sy not both > 1", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE) + return ERROR_INT("invalid type", procName, 1); + + pixt = pixAbsDifference(pix1, pix2); + if (d1 == 8) { + *ppixdiff = pixGetAverageTiled(pixt, sx, sy, type); + } else { /* d1 == 32 */ + pixr = pixGetRGBComponent(pixt, COLOR_RED); + pixg = pixGetRGBComponent(pixt, COLOR_GREEN); + pixb = pixGetRGBComponent(pixt, COLOR_BLUE); + pixrdiff = pixGetAverageTiled(pixr, sx, sy, type); + pixgdiff = pixGetAverageTiled(pixg, sx, sy, type); + pixbdiff = pixGetAverageTiled(pixb, sx, sy, type); + pixGetDimensions(pixrdiff, &w, &h, NULL); + pixacc = pixaccCreate(w, h, 0); + pixaccAdd(pixacc, pixrdiff); + pixaccAdd(pixacc, pixgdiff); + pixaccAdd(pixacc, pixbdiff); + pixaccMultConst(pixacc, 1. / 3.); + *ppixdiff = pixaccFinal(pixacc, 8); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + pixDestroy(&pixrdiff); + pixDestroy(&pixgdiff); + pixDestroy(&pixbdiff); + pixaccDestroy(&pixacc); + } + pixDestroy(&pixt); + return 0; +} + + +/*------------------------------------------------------------------* + * Other measures of the difference of two images * + *------------------------------------------------------------------*/ +/*! + * \brief pixCompareRankDifference() + * + * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; use 0 or 1 for no subsampling + * \return narank numa of rank difference, or NULL on error + * + *
+ * Notes:
+ *      (1) This answers the question: if the pixel values in each
+ *          component are compared by absolute difference, for
+ *          any value of difference, what is the fraction of
+ *          pixel pairs that have a difference of this magnitude
+ *          or greater.  For a difference of 0, the fraction is 1.0.
+ *          In this sense, it is a mapping from pixel difference to
+ *          rank order of difference.
+ *      (2) The two images are aligned at the UL corner, and do not
+ *          need to be the same size.  If they are not the same size,
+ *          the comparison will be made over overlapping pixels.
+ *      (3) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (4) If RGB, pixel differences for each component are aggregated
+ *          into a single histogram.
+ * 
+ */ +NUMA * +pixCompareRankDifference(PIX *pix1, + PIX *pix2, + l_int32 factor) +{ +l_int32 i; +l_float32 *array1, *array2; +NUMA *nah, *nan, *nad; + + PROCNAME("pixCompareRankDifference"); + + if (!pix1) + return (NUMA *)ERROR_PTR("pix1 not defined", procName, NULL); + if (!pix2) + return (NUMA *)ERROR_PTR("pix2 not defined", procName, NULL); + + if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + + nan = numaNormalizeHistogram(nah, 1.0); + array1 = numaGetFArray(nan, L_NOCOPY); + + nad = numaCreate(256); + numaSetCount(nad, 256); /* all initialized to 0.0 */ + array2 = numaGetFArray(nad, L_NOCOPY); + + /* Do rank accumulation on normalized histo of diffs */ + array2[0] = 1.0; + for (i = 1; i < 256; i++) + array2[i] = array2[i - 1] - array1[i - 1]; + + numaDestroy(&nah); + numaDestroy(&nan); + return nad; +} + + +/*! + * \brief pixTestForSimilarity() + * + * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; use 0 or 1 for no subsampling + * \param[in] mindiff minimum pixel difference to be counted; > 0 + * \param[in] maxfract maximum fraction of pixels allowed to have + * diff greater than or equal to mindiff + * \param[in] maxave maximum average difference of pixels allowed for + * pixels with diff greater than or equal to + * mindiff, after subtracting mindiff + * \param[out] psimilar 1 if similar, 0 otherwise + * \param[in] details use 1 to give normalized histogram and other data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes 2 pix that are the same size and determines using
+ *          3 input parameters if they are "similar".  The first parameter
+ *          %mindiff establishes a criterion of pixel-to-pixel similarity:
+ *          two pixels are not similar if their difference in value is
+ *          at least mindiff.  Then %maxfract and %maxave are thresholds
+ *          on the number and distribution of dissimilar pixels
+ *          allowed for the two pix to be similar.   If the pix are
+ *          to be similar, neither threshold can be exceeded.
+ *      (2) In setting the %maxfract and %maxave thresholds, you have
+ *          these options:
+ *            (a) Base the comparison only on %maxfract.  Then set
+ *                %maxave = 0.0 or 256.0.  (If 0, we always ignore it.)
+ *            (b) Base the comparison only on %maxave.  Then set
+ *                %maxfract = 1.0.
+ *            (c) Base the comparison on both thresholds.
+ *      (3) Example of values that can be expected at mindiff = 15 when
+ *          comparing lossless png encoding with jpeg encoding, q=75:
+ *             (smoothish bg)       fractdiff = 0.01, avediff = 2.5
+ *             (natural scene)      fractdiff = 0.13, avediff = 3.5
+ *          To identify these images as 'similar', select maxfract
+ *          and maxave to be upper bounds of what you expect.
+ *      (4) See pixGetDifferenceStats() for a discussion of why we subtract
+ *          mindiff from the computed average diff of the nonsimilar pixels
+ *          to get the 'avediff' returned by that function.
+ *      (5) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (6) If RGB, the maximum difference between pixel components is
+ *          saved in the histogram.
+ * 
+ */ +l_ok +pixTestForSimilarity(PIX *pix1, + PIX *pix2, + l_int32 factor, + l_int32 mindiff, + l_float32 maxfract, + l_float32 maxave, + l_int32 *psimilar, + l_int32 details) +{ +l_float32 fractdiff, avediff; + + PROCNAME("pixTestForSimilarity"); + + if (!psimilar) + return ERROR_INT("&similar not defined", procName, 1); + *psimilar = 0; + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + if (pixSizesEqual(pix1, pix2) == 0) + return ERROR_INT("pix sizes not equal", procName, 1); + if (mindiff <= 0) + return ERROR_INT("mindiff must be > 0", procName, 1); + + if (pixGetDifferenceStats(pix1, pix2, factor, mindiff, + &fractdiff, &avediff, details)) + return ERROR_INT("diff stats not found", procName, 1); + + if (maxave <= 0.0) maxave = 256.0; + if (fractdiff <= maxfract && avediff <= maxave) + *psimilar = 1; + return 0; +} + + +/*! + * \brief pixGetDifferenceStats() + * + * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; use 0 or 1 for no subsampling + * \param[in] mindiff minimum pixel difference to be counted; > 0 + * \param[out] pfractdiff fraction of pixels with diff greater than or + * equal to mindiff + * \param[out] pavediff average difference of pixels with diff greater + * than or equal to mindiff, less mindiff + * \param[in] details use 1 to give normalized histogram and other data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes a threshold %mindiff and describes the difference
+ *          between two images in terms of two numbers:
+ *            (a) the fraction of pixels, %fractdiff, whose difference
+ *                equals or exceeds the threshold %mindiff, and
+ *            (b) the average value %avediff of the difference in pixel value
+ *                for the pixels in the set given by (a), after you subtract
+ *                %mindiff.  The reason for subtracting %mindiff is that
+ *                you then get a useful measure for the rate of falloff
+ *                of the distribution for larger differences.  For example,
+ *                if %mindiff = 10 and you find that %avediff = 2.5, it
+ *                says that of the pixels with diff > 10, the average of
+ *                their diffs is just mindiff + 2.5 = 12.5.  This is a
+ *                fast falloff in the histogram with increasing difference.
+ *      (2) The two images are aligned at the UL corner, and do not
+ *          need to be the same size.  If they are not the same size,
+ *          the comparison will be made over overlapping pixels.
+ *      (3) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (4) If RGB, the maximum difference between pixel components is
+ *          saved in the histogram.
+ *      (5) Set %details == 1 to see the difference histogram and get
+ *          an output that shows for each value of %mindiff, what are the
+ *          minimum values required for fractdiff and avediff in order
+ *          that the two pix will be considered similar.
+ * 
+ */ +l_ok +pixGetDifferenceStats(PIX *pix1, + PIX *pix2, + l_int32 factor, + l_int32 mindiff, + l_float32 *pfractdiff, + l_float32 *pavediff, + l_int32 details) +{ +l_int32 i, first, last, diff; +l_float32 fract, ave; +l_float32 *array; +NUMA *nah, *nan, *nac; + + PROCNAME("pixGetDifferenceStats"); + + if (pfractdiff) *pfractdiff = 0.0; + if (pavediff) *pavediff = 0.0; + if (!pfractdiff) + return ERROR_INT("&fractdiff not defined", procName, 1); + if (!pavediff) + return ERROR_INT("&avediff not defined", procName, 1); + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + if (mindiff <= 0) + return ERROR_INT("mindiff must be > 0", procName, 1); + + if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) + return ERROR_INT("na not made", procName, 1); + + if ((nan = numaNormalizeHistogram(nah, 1.0)) == NULL) { + numaDestroy(&nah); + return ERROR_INT("nan not made", procName, 1); + } + array = numaGetFArray(nan, L_NOCOPY); + + if (details) { + lept_mkdir("lept/comp"); + numaGetNonzeroRange(nan, 0.0, &first, &last); + nac = numaClipToInterval(nan, first, last); + gplotSimple1(nac, GPLOT_PNG, "/tmp/lept/comp/histo", + "Difference histogram"); + l_fileDisplay("/tmp/lept/comp/histo.png", 500, 0, 1.0); + fprintf(stderr, "\nNonzero values in normalized histogram:"); + numaWriteStream(stderr, nac); + numaDestroy(&nac); + fprintf(stderr, " Mindiff fractdiff avediff\n"); + fprintf(stderr, " -----------------------------------\n"); + for (diff = 1; diff < L_MIN(2 * mindiff, last); diff++) { + fract = 0.0; + ave = 0.0; + for (i = diff; i <= last; i++) { + fract += array[i]; + ave += (l_float32)i * array[i]; + } + ave = (fract == 0.0) ? 0.0 : ave / fract; + ave -= diff; + fprintf(stderr, "%5d %7.4f %7.4f\n", + diff, fract, ave); + } + fprintf(stderr, " -----------------------------------\n"); + } + + fract = 0.0; + ave = 0.0; + for (i = mindiff; i < 256; i++) { + fract += array[i]; + ave += (l_float32)i * array[i]; + } + ave = (fract == 0.0) ? 0.0 : ave / fract; + ave -= mindiff; + + *pfractdiff = fract; + *pavediff = ave; + + numaDestroy(&nah); + numaDestroy(&nan); + return 0; +} + + +/*! + * \brief pixGetDifferenceHistogram() + * + * \param[in] pix1 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] pix2 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; use 0 or 1 for no subsampling + * \return na Numa of histogram of differences, or NULL on error + * + *
+ * Notes:
+ *      (1) The two images are aligned at the UL corner, and do not
+ *          need to be the same size.  If they are not the same size,
+ *          the comparison will be made over overlapping pixels.
+ *      (2) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (3) If RGB, the maximum difference between pixel components is
+ *          saved in the histogram.
+ * 
+ */ +NUMA * +pixGetDifferenceHistogram(PIX *pix1, + PIX *pix2, + l_int32 factor) +{ +l_int32 w1, h1, d1, w2, h2, d2, w, h, wpl1, wpl2; +l_int32 i, j, val, val1, val2; +l_int32 rval1, rval2, gval1, gval2, bval1, bval2; +l_int32 rdiff, gdiff, bdiff, maxdiff; +l_uint32 *data1, *data2, *line1, *line2; +l_float32 *array; +NUMA *na; +PIX *pixt1, *pixt2; + + PROCNAME("pixGetDifferenceHistogram"); + + if (!pix1) + return (NUMA *)ERROR_PTR("pix1 not defined", procName, NULL); + if (!pix2) + return (NUMA *)ERROR_PTR("pix2 not defined", procName, NULL); + d1 = pixGetDepth(pix1); + d2 = pixGetDepth(pix2); + if (d1 == 16 || d2 == 16) + return (NUMA *)ERROR_PTR("d == 16 not supported", procName, NULL); + if (d1 < 8 && !pixGetColormap(pix1)) + return (NUMA *)ERROR_PTR("pix1 depth < 8 bpp and not cmapped", + procName, NULL); + if (d2 < 8 && !pixGetColormap(pix2)) + return (NUMA *)ERROR_PTR("pix2 depth < 8 bpp and not cmapped", + procName, NULL); + pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); + pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); + pixGetDimensions(pixt1, &w1, &h1, &d1); + pixGetDimensions(pixt2, &w2, &h2, &d2); + if (d1 != d2) { + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return (NUMA *)ERROR_PTR("pix depths not equal", procName, NULL); + } + if (factor < 1) factor = 1; + + na = numaCreate(256); + numaSetCount(na, 256); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + w = L_MIN(w1, w2); + h = L_MIN(h1, h2); + data1 = pixGetData(pixt1); + data2 = pixGetData(pixt2); + wpl1 = pixGetWpl(pixt1); + wpl2 = pixGetWpl(pixt2); + if (d1 == 8) { + for (i = 0; i < h; i += factor) { + line1 = data1 + i * wpl1; + line2 = data2 + i * wpl2; + for (j = 0; j < w; j += factor) { + val1 = GET_DATA_BYTE(line1, j); + val2 = GET_DATA_BYTE(line2, j); + val = L_ABS(val1 - val2); + array[val]++; + } + } + } else { /* d1 == 32 */ + for (i = 0; i < h; i += factor) { + line1 = data1 + i * wpl1; + line2 = data2 + i * wpl2; + for (j = 0; j < w; j += factor) { + extractRGBValues(line1[j], &rval1, &gval1, &bval1); + extractRGBValues(line2[j], &rval2, &gval2, &bval2); + rdiff = L_ABS(rval1 - rval2); + gdiff = L_ABS(gval1 - gval2); + bdiff = L_ABS(bval1 - bval2); + maxdiff = L_MAX(rdiff, gdiff); + maxdiff = L_MAX(maxdiff, bdiff); + array[maxdiff]++; + } + } + } + + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return na; +} + + +/*! + * \brief pixGetPerceptualDiff() + * + * \param[in] pixs1 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] pixs2 8 bpp gray or 32 bpp rgb, or colormapped + * \param[in] sampling subsampling factor; use 0 or 1 for no subsampling + * \param[in] dilation size of grayscale or color Sel; odd + * \param[in] mindiff minimum pixel difference to be counted; > 0 + * \param[out] pfract fraction of pixels with diff greater than mindiff + * \param[out] ppixdiff1 [optional] showing difference (gray or color) + * \param[out] ppixdiff2 [optional] showing pixels of sufficient diff + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes 2 pix and determines, using 2 input parameters:
+ *           * %dilation specifies the amount of grayscale or color
+ *             dilation to apply to the images, to compensate for
+ *             a small amount of misregistration.  A typical number might
+ *             be 5, which uses a 5x5 Sel.  Grayscale dilation expands
+ *             lighter pixels into darker pixel regions.
+ *           * %mindiff determines the threshold on the difference in
+ *             pixel values to be counted -- two pixels are not similar
+ *             if their difference in value is at least %mindiff.  For
+ *             color pixels, we use the maximum component difference.
+ *      (2) The pixelwise comparison is always done with the UL corners
+ *          aligned.  The sizes of pix1 and pix2 need not be the same,
+ *          although in practice it can be useful to scale to the same size.
+ *      (3) If there is a colormap, it is removed and the result
+ *          is either gray or RGB depending on the colormap.
+ *      (4) Two optional diff images can be retrieved (typ. for debugging):
+ *           pixdiff1: the gray or color difference
+ *           pixdiff2: thresholded to 1 bpp for pixels exceeding %mindiff
+ *      (5) The returned value of fract can be compared to some threshold,
+ *          which is application dependent.
+ *      (6) This method is in analogy to the two-sided hausdorff transform,
+ *          except here it is for d > 1.  For d == 1 (see pixRankHaustest()),
+ *          we verify that when one pix1 is dilated, it covers at least a
+ *          given fraction of the pixels in pix2, and v.v.; in that
+ *          case, the two pix are sufficiently similar.  Here, we
+ *          do an analogous thing: subtract the dilated pix1 from pix2 to
+ *          get a 1-sided hausdorff-like transform.  Then do it the
+ *          other way.  Take the component-wise max of the two results,
+ *          and threshold to get the fraction of pixels with a difference
+ *          below the threshold.
+ * 
+ */ +l_ok +pixGetPerceptualDiff(PIX *pixs1, + PIX *pixs2, + l_int32 sampling, + l_int32 dilation, + l_int32 mindiff, + l_float32 *pfract, + PIX **ppixdiff1, + PIX **ppixdiff2) +{ +l_int32 d1, d2, w, h, count; +PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; +PIX *pix10, *pix11; + + PROCNAME("pixGetPerceptualDiff"); + + if (ppixdiff1) *ppixdiff1 = NULL; + if (ppixdiff2) *ppixdiff2 = NULL; + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 1.0; /* init to completely different */ + if ((dilation & 1) == 0) + return ERROR_INT("dilation must be odd", procName, 1); + if (!pixs1) + return ERROR_INT("pixs1 not defined", procName, 1); + if (!pixs2) + return ERROR_INT("pixs2 not defined", procName, 1); + d1 = pixGetDepth(pixs1); + d2 = pixGetDepth(pixs2); + if (!pixGetColormap(pixs1) && d1 < 8) + return ERROR_INT("pixs1 not cmapped or >=8 bpp", procName, 1); + if (!pixGetColormap(pixs2) && d2 < 8) + return ERROR_INT("pixs2 not cmapped or >=8 bpp", procName, 1); + + /* Integer downsample if requested */ + if (sampling > 1) { + pix1 = pixScaleByIntSampling(pixs1, sampling); + pix2 = pixScaleByIntSampling(pixs2, sampling); + } else { + pix1 = pixClone(pixs1); + pix2 = pixClone(pixs2); + } + + /* Remove colormaps */ + if (pixGetColormap(pix1)) { + pix3 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); + d1 = pixGetDepth(pix3); + } else { + pix3 = pixClone(pix1); + } + if (pixGetColormap(pix2)) { + pix4 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); + d2 = pixGetDepth(pix4); + } else { + pix4 = pixClone(pix2); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + if (d1 != d2) { + pixDestroy(&pix3); + pixDestroy(&pix4); + return ERROR_INT("pix3 and pix4 depths not equal", procName, 1); + } + + /* In each direction, do a small dilation and subtract the dilated + * image from the other image to get a one-sided difference. + * Then take the max of the differences for each direction + * and clipping each component to 255 if necessary. Note that + * for RGB images, the dilations and max selection are done + * component-wise, and the conversion to grayscale also uses the + * maximum component. The resulting grayscale images are + * thresholded using %mindiff. */ + if (d1 == 8) { + pix5 = pixDilateGray(pix3, dilation, dilation); + pixCompareGray(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, + &pix7); + pix6 = pixDilateGray(pix4, dilation, dilation); + pixCompareGray(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, + &pix8); + pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); + pix10 = pixThresholdToBinary(pix9, mindiff); + pixInvert(pix10, pix10); + pixCountPixels(pix10, &count, NULL); + pixGetDimensions(pix10, &w, &h, NULL); + *pfract = (l_float32)count / (l_float32)(w * h); + pixDestroy(&pix5); + pixDestroy(&pix6); + pixDestroy(&pix7); + pixDestroy(&pix8); + if (ppixdiff1) + *ppixdiff1 = pix9; + else + pixDestroy(&pix9); + if (ppixdiff2) + *ppixdiff2 = pix10; + else + pixDestroy(&pix10); + } else { /* d1 == 32 */ + pix5 = pixColorMorph(pix3, L_MORPH_DILATE, dilation, dilation); + pixCompareRGB(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, + &pix7); + pix6 = pixColorMorph(pix4, L_MORPH_DILATE, dilation, dilation); + pixCompareRGB(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, + &pix8); + pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); + pix10 = pixConvertRGBToGrayMinMax(pix9, L_CHOOSE_MAX); + pix11 = pixThresholdToBinary(pix10, mindiff); + pixInvert(pix11, pix11); + pixCountPixels(pix11, &count, NULL); + pixGetDimensions(pix11, &w, &h, NULL); + *pfract = (l_float32)count / (l_float32)(w * h); + pixDestroy(&pix5); + pixDestroy(&pix6); + pixDestroy(&pix7); + pixDestroy(&pix8); + pixDestroy(&pix10); + if (ppixdiff1) + *ppixdiff1 = pix9; + else + pixDestroy(&pix9); + if (ppixdiff2) + *ppixdiff2 = pix11; + else + pixDestroy(&pix11); + + } + pixDestroy(&pix3); + pixDestroy(&pix4); + return 0; +} + + +/*! + * \brief pixGetPSNR() + * + * \param[in] pix1, pix2 8 or 32 bpp; no colormap + * \param[in] factor sampling factor; >= 1 + * \param[out] ppsnr power signal/noise ratio difference + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes the power S/N ratio, in dB, for the difference
+ *          between two images.  By convention, the power S/N
+ *          for a grayscale image is ('log' == log base 10,
+ *          and 'ln == log base e):
+ *            PSNR = 10 * log((255/MSE)^2)
+ *                 = 4.3429 * ln((255/MSE)^2)
+ *                 = -4.3429 * ln((MSE/255)^2)
+ *          where MSE is the mean squared error.
+ *          Here are some examples:
+ *             MSE             PSNR
+ *             ---             ----
+ *             10              28.1
+ *             3               38.6
+ *             1               48.1
+ *             0.1             68.1
+ *      (2) If pix1 and pix2 have the same pixel values, the MSE = 0.0
+ *          and the PSNR is infinity.  For that case, this returns
+ *          PSNR = 1000, which corresponds to the very small MSE of
+ *          about 10^(-48).
+ * 
+ */ +l_ok +pixGetPSNR(PIX *pix1, + PIX *pix2, + l_int32 factor, + l_float32 *ppsnr) +{ +l_int32 same, i, j, w, h, d, wpl1, wpl2, v1, v2, r1, g1, b1, r2, g2, b2; +l_uint32 *data1, *data2, *line1, *line2; +l_float32 mse; /* mean squared error */ + + PROCNAME("pixGetPSNR"); + + if (!ppsnr) + return ERROR_INT("&psnr not defined", procName, 1); + *ppsnr = 0.0; + if (!pix1 || !pix2) + return ERROR_INT("empty input pix", procName, 1); + if (!pixSizesEqual(pix1, pix2)) + return ERROR_INT("pix sizes unequal", procName, 1); + if (pixGetColormap(pix1)) + return ERROR_INT("pix1 has colormap", procName, 1); + if (pixGetColormap(pix2)) + return ERROR_INT("pix2 has colormap", procName, 1); + pixGetDimensions(pix1, &w, &h, &d); + if (d != 8 && d != 32) + return ERROR_INT("pix not 8 or 32 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("invalid sampling factor", procName, 1); + + pixEqual(pix1, pix2, &same); + if (same) { + *ppsnr = 1000.0; /* crazy big exponent */ + return 0; + } + + data1 = pixGetData(pix1); + data2 = pixGetData(pix2); + wpl1 = pixGetWpl(pix1); + wpl2 = pixGetWpl(pix2); + mse = 0.0; + if (d == 8) { + for (i = 0; i < h; i += factor) { + line1 = data1 + i * wpl1; + line2 = data2 + i * wpl2; + for (j = 0; j < w; j += factor) { + v1 = GET_DATA_BYTE(line1, j); + v2 = GET_DATA_BYTE(line2, j); + mse += (l_float32)(v1 - v2) * (v1 - v2); + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i += factor) { + line1 = data1 + i * wpl1; + line2 = data2 + i * wpl2; + for (j = 0; j < w; j += factor) { + extractRGBValues(line1[j], &r1, &g1, &b1); + extractRGBValues(line2[j], &r2, &g2, &b2); + mse += ((l_float32)(r1 - r2) * (r1 - r2) + + (g1 - g2) * (g1 - g2) + + (b1 - b2) * (b1 - b2)) / 3.0; + } + } + } + mse = mse / ((l_float32)(w) * h); + + *ppsnr = -4.3429448 * log(mse / (255 * 255)); + return 0; +} + + +/*------------------------------------------------------------------* + * Comparison of photo regions by histogram * + *------------------------------------------------------------------*/ +/*! + * \brief pixaComparePhotoRegionsByHisto() + * + * \param[in] pixa any depth; colormap OK + * \param[in] minratio requiring sizes be compatible; < 1.0 + * \param[in] textthresh threshold for text/photo; use 0 for default + * \param[in] factor subsampling; >= 1 + * \param[in] n in range {1, ... 7}. n^2 is the maximum number + * of subregions for histograms; typ. n = 3. + * \param[in] simthresh threshold for similarity; use 0 for default + * \param[out] pnai array giving similarity class indices + * \param[out] pscores [optional] score matrix as 1-D array of size N^2 + * \param[out] ppixd [optional] pix of similarity classes + * \param[in] debug 1 to output histograms; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function takes a pixa of cropped photo images and
+ *          compares each one to the others for similarity.
+ *          Each image is first tested to see if it is a photo that can
+ *          be compared by tiled histograms.  If so, it is padded to put
+ *          the centroid in the center of the image, and the histograms
+ *          are generated.  The final step of comparing each histogram
+ *          with all the others is very fast.
+ *      (2) To make the histograms, each image is subdivided in a maximum
+ *          of n^2 subimages.  The parameter %n specifies the "side" of
+ *          an n x n grid of such subimages.  If the subimages have an
+ *          aspect ratio larger than 2, the grid will change, again using n^2
+ *          as a maximum for the number of subimages.  For example,
+ *          if n == 3, but the image is 600 x 200 pixels, a 3x3 grid
+ *          would have subimages of 200 x 67 pixels, which is more
+ *          than 2:1, so we change to a 4x2 grid where each subimage
+ *          has 150 x 100 pixels.
+ *      (3) An initial filter gives %score = 0 if the ratio of widths
+ *          and heights (smallest / largest) does not exceed a
+ *          threshold %minratio.  If set at 1.0, both images must be
+ *          exactly the same size.  A typical value for %minratio is 0.9.
+ *      (4) The comparison score between two images is a value in [0.0 .. 1.0].
+ *          If the comparison score >= %simthresh, the images are placed in
+ *          the same similarity class.  Default value for %simthresh is 0.25.
+ *      (5) An array %nai of similarity class indices for pix in the
+ *          input pixa is returned.
+ *      (6) There are two debugging options:
+ *          * An optional 2D matrix of scores is returned as a 1D array.
+ *            A visualization of this is written to a temp file.
+ *          * An optional pix showing the similarity classes can be
+ *            returned.  Text in each input pix is reproduced.
+ *      (7) See the notes in pixComparePhotoRegionsByHisto() for details
+ *          on the implementation.
+ * 
+ */ +l_ok +pixaComparePhotoRegionsByHisto(PIXA *pixa, + l_float32 minratio, + l_float32 textthresh, + l_int32 factor, + l_int32 n, + l_float32 simthresh, + NUMA **pnai, + l_float32 **pscores, + PIX **ppixd, + l_int32 debug) +{ +char *text; +l_int32 i, j, nim, w, h, w1, h1, w2, h2, ival, index, classid; +l_float32 score; +l_float32 *scores; +NUMA *nai, *naw, *nah; +NUMAA *naa; +NUMAA **n3a; /* array of naa */ +PIX *pix; + + PROCNAME("pixaComparePhotoRegionsByHisto"); + + if (pscores) *pscores = NULL; + if (ppixd) *ppixd = NULL; + if (!pnai) + return ERROR_INT("&na not defined", procName, 1); + *pnai = NULL; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (minratio < 0.0 || minratio > 1.0) + return ERROR_INT("minratio not in [0.0 ... 1.0]", procName, 1); + if (textthresh <= 0.0) textthresh = 1.3; + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (n < 1 || n > 7) { + L_WARNING("n = %d is invalid; setting to 4\n", procName, n); + n = 4; + } + if (simthresh <= 0.0) simthresh = 0.25; + if (simthresh > 1.0) + return ERROR_INT("simthresh invalid; should be near 0.25", procName, 1); + + /* Prepare the histograms */ + nim = pixaGetCount(pixa); + if ((n3a = (NUMAA **)LEPT_CALLOC(nim, sizeof(NUMAA *))) == NULL) + return ERROR_INT("calloc fail for n3a", procName, 1); + naw = numaCreate(0); + nah = numaCreate(0); + for (i = 0; i < nim; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + text = pixGetText(pix); + pixSetResolution(pix, 150, 150); + index = (debug) ? i : 0; + pixGenPhotoHistos(pix, NULL, factor, textthresh, n, + &naa, &w, &h, index); + n3a[i] = naa; + numaAddNumber(naw, w); + numaAddNumber(nah, h); + if (naa) + fprintf(stderr, "Image %s is photo\n", text); + else + fprintf(stderr, "Image %s is NOT photo\n", text); + pixDestroy(&pix); + } + + /* Do the comparisons. We are making a set of classes, where + * all similar images are placed in the same class. There are + * 'nim' input images. The classes are labeled by 'classid' (all + * similar images get the same 'classid' value), and 'nai' maps + * the classid of the image in the input array to the classid + * of the similarity class. */ + if ((scores = + (l_float32 *)LEPT_CALLOC((size_t)nim * nim, sizeof(l_float32))) + == NULL) { + L_ERROR("calloc fail for scores\n", procName); + goto cleanup; + } + nai = numaMakeConstant(-1, nim); /* classid array */ + for (i = 0, classid = 0; i < nim; i++) { + scores[nim * i + i] = 1.0; + numaGetIValue(nai, i, &ival); + if (ival != -1) /* already set */ + continue; + numaSetValue(nai, i, classid); + if (n3a[i] == NULL) { /* not a photo */ + classid++; + continue; + } + numaGetIValue(naw, i, &w1); + numaGetIValue(nah, i, &h1); + for (j = i + 1; j < nim; j++) { + numaGetIValue(nai, j, &ival); + if (ival != -1) /* already set */ + continue; + if (n3a[j] == NULL) /* not a photo */ + continue; + numaGetIValue(naw, j, &w2); + numaGetIValue(nah, j, &h2); + compareTilesByHisto(n3a[i], n3a[j], minratio, w1, h1, w2, h2, + &score, NULL); + scores[nim * i + j] = score; + scores[nim * j + i] = score; /* the score array is symmetric */ +/* fprintf(stderr, "score = %5.3f\n", score); */ + if (score > simthresh) { + numaSetValue(nai, j, classid); + fprintf(stderr, + "Setting %d similar to %d, in class %d; score %5.3f\n", + j, i, classid, score); + } + } + classid++; + } + *pnai = nai; + + /* Debug: optionally save and display the score array. + * All images that are photos are represented by a point on + * the diagonal. Other images in the same similarity class + * are on the same horizontal raster line to the right. + * The array has been symmetrized, so images in the same + * same similarity class also appear on the same column below. */ + if (pscores) { + l_int32 wpl, fact; + l_uint32 *line, *data; + PIX *pix2, *pix3; + pix2 = pixCreate(nim, nim, 8); + data = pixGetData(pix2); + wpl = pixGetWpl(pix2); + for (i = 0; i < nim; i++) { + line = data + i * wpl; + for (j = 0; j < nim; j++) { + SET_DATA_BYTE(line, j, + L_MIN(255, 4.0 * 255 * scores[nim * i + j])); + } + } + fact = L_MAX(2, 1000 / nim); + pix3 = pixExpandReplicate(pix2, fact); + fprintf(stderr, "Writing to /tmp/lept/comp/scorearray.png\n"); + lept_mkdir("lept/comp"); + pixWrite("/tmp/lept/comp/scorearray.png", pix3, IFF_PNG); + pixDestroy(&pix2); + pixDestroy(&pix3); + *pscores = scores; + } else { + LEPT_FREE(scores); + } + + /* Debug: optionally display and save the image comparisons. + * Image similarity classes are displayed by column; similar + * images are displayed in the same column. */ + if (ppixd) + *ppixd = pixaDisplayTiledByIndex(pixa, nai, 200, 20, 2, 6, 0x0000ff00); + +cleanup: + numaDestroy(&naw); + numaDestroy(&nah); + for (i = 0; i < nim; i++) + numaaDestroy(&n3a[i]); + LEPT_FREE(n3a); + return 0; +} + + +/*! + * \brief pixComparePhotoRegionsByHisto() + * + * \param[in] pix1, pix2 any depth; colormap OK + * \param[in] box1, box2 [optional] photo regions from each; can be null + * \param[in] minratio requiring sizes be compatible; < 1.0 + * \param[in] factor subsampling factor; >= 1 + * \param[in] n in range {1, ... 7}. n^2 is the maximum number + * of subregions for histograms; typ. n = 3. + * \param[out] pscore similarity score of histograms + * \param[in] debugflag 1 for debug output; 0 for no debugging + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function compares two grayscale photo regions.  If a
+ *          box is given, the region is clipped; otherwise assume
+ *          the entire images are photo regions.  This is done with a
+ *          set of not more than n^2 spatially aligned histograms, which are
+ *          aligned using the centroid of the inverse image.
+ *      (2) The parameter %n specifies the "side" of an n x n grid
+ *          of subimages.  If the subimages have an aspect ratio larger
+ *          than 2, the grid will change, using n^2 as a maximum for
+ *          the number of subimages.  For example, if n == 3, but the
+ *          image is 600 x 200 pixels, a 3x3 grid would have subimages
+ *          of 200 x 67 pixels, which is more than 2:1, so we change
+ *          to a 4x2 grid where each subimage has 150 x 100 pixels.
+ *      (3) An initial filter gives %score = 0 if the ratio of widths
+ *          and heights (smallest / largest) does not exceed a
+ *          threshold %minratio.  This must be between 0.5 and 1.0.
+ *          If set at 1.0, both images must be exactly the same size.
+ *          A typical value for %minratio is 0.9.
+ *      (4) Because this function should not be used on text or
+ *          line graphics, which can give false positive results
+ *          (i.e., high scores for different images), filter the images
+ *          using pixGenPhotoHistos(), which returns tiled histograms
+ *          only if an image is not text and comparison is expected
+ *          to work with histograms.  If either image fails the test,
+ *          the comparison returns a score of 0.0.
+ *      (5) The white value counts in the histograms are removed; they
+ *          are typically pixels that were padded to achieve alignment.
+ *      (6) For an efficient representation of the histogram, normalize
+ *          using a multiplicative factor so that the number in the
+ *          maximum bucket is 255.  It then takes 256 bytes to store.
+ *      (7) When comparing the histograms of two regions, use the
+ *          Earth Mover distance (EMD), with the histograms normalized
+ *          so that the sum over bins is the same.  Further normalize
+ *          by dividing by 255, so that the result is in [0.0 ... 1.0].
+ *      (8) Get a similarity score S = 1.0 - k * D, where
+ *            k is a constant, say in the range 5-10
+ *            D = normalized EMD
+ *          and for multiple tiles, take the Min(S) to be the final score.
+ *          Using aligned tiles gives protection against accidental
+ *          similarity of the overall grayscale histograms.
+ *          A small number of aligned tiles works well.
+ *      (9) With debug on, you get a pdf that shows, for each tile,
+ *          the images, histograms and score.
+ * 
+ */ +l_ok +pixComparePhotoRegionsByHisto(PIX *pix1, + PIX *pix2, + BOX *box1, + BOX *box2, + l_float32 minratio, + l_int32 factor, + l_int32 n, + l_float32 *pscore, + l_int32 debugflag) +{ +l_int32 w1, h1, w2, h2, w1c, h1c, w2c, h2c, debugindex; +l_float32 wratio, hratio; +NUMAA *naa1, *naa2; +PIX *pix3, *pix4; +PIXA *pixa; + + PROCNAME("pixComparePhotoRegionsByHisto"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + if (minratio < 0.5 || minratio > 1.0) + return ERROR_INT("minratio not in [0.5 ... 1.0]", procName, 1); + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (n < 1 || n > 7) { + L_WARNING("n = %d is invalid; setting to 4\n", procName, n); + n = 4; + } + + debugindex = 0; + if (debugflag) { + lept_mkdir("lept/comp"); + debugindex = 666; /* arbitrary number used for naming output */ + } + + /* Initial filter by size */ + if (box1) + boxGetGeometry(box1, NULL, NULL, &w1, &h1); + else + pixGetDimensions(pix1, &w1, &h1, NULL); + if (box2) + boxGetGeometry(box2, NULL, NULL, &w2, &h2); + else + pixGetDimensions(pix1, &w2, &h2, NULL); + wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : + (l_float32)w2 / (l_float32)w1; + hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : + (l_float32)h2 / (l_float32)h1; + if (wratio < minratio || hratio < minratio) + return 0; + + /* Initial crop, if necessary, and make histos */ + if (box1) + pix3 = pixClipRectangle(pix1, box1, NULL); + else + pix3 = pixClone(pix1); + pixGenPhotoHistos(pix3, NULL, factor, 0, n, &naa1, &w1c, &h1c, debugindex); + pixDestroy(&pix3); + if (!naa1) return 0; + if (box2) + pix4 = pixClipRectangle(pix2, box2, NULL); + else + pix4 = pixClone(pix2); + pixGenPhotoHistos(pix4, NULL, factor, 0, n, &naa2, &w2c, &h2c, debugindex); + pixDestroy(&pix4); + if (!naa2) return 0; + + /* Compare histograms */ + pixa = (debugflag) ? pixaCreate(0) : NULL; + compareTilesByHisto(naa1, naa2, minratio, w1c, h1c, w2c, h2c, pscore, pixa); + pixaDestroy(&pixa); + return 0; +} + + +/*! + * \brief pixGenPhotoHistos() + * + * \param[in] pixs depth > 1 bpp; colormap OK + * \param[in] box [optional] region to be selected; can be null + * \param[in] factor subsampling; >= 1 + * \param[in] thresh threshold for photo/text; use 0 for default + * \param[in] n in range {1, ... 7}. n^2 is the maximum number + * of subregions for histograms; typ. n = 3. + * \param[out] pnaa nx * ny 256-entry gray histograms + * \param[out] pw width of image used to make histograms + * \param[out] ph height of image used to make histograms + * \param[in] debugindex 0 for no debugging; positive integer otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This crops and converts to 8 bpp if necessary.  It adds a
+ *          minimal white boundary such that the centroid of the
+ *          photo-inverted image is in the center. This allows
+ *          automatic alignment with histograms of other image regions.
+ *      (2) The parameter %n specifies the "side" of the n x n grid
+ *          of subimages.  If the subimages have an aspect ratio larger
+ *          than 2, the grid will change, using n^2 as a maximum for
+ *          the number of subimages.  For example, if n == 3, but the
+ *          image is 600 x 200 pixels, a 3x3 grid would have subimages
+ *          of 200 x 67 pixels, which is more than 2:1, so we change
+ *          to a 4x2 grid where each subimage has 150 x 100 pixels.
+ *      (3) The white value in the histogram is removed, because of
+ *          the padding.
+ *      (4) Use 0 for conservative default (1.3) for thresh.
+ *      (5) For an efficient representation of the histogram, normalize
+ *          using a multiplicative factor so that the number in the
+ *          maximum bucket is 255.  It then takes 256 bytes to store.
+ *      (6) With %debugindex > 0, this makes a pdf that shows, for each tile,
+ *          the images and histograms.
+ * 
+ */ +l_ok +pixGenPhotoHistos(PIX *pixs, + BOX *box, + l_int32 factor, + l_float32 thresh, + l_int32 n, + NUMAA **pnaa, + l_int32 *pw, + l_int32 *ph, + l_int32 debugindex) +{ +char buf[64]; +NUMAA *naa; +PIX *pix1, *pix2, *pix3, *pixm; +PIXA *pixa; + + PROCNAME("pixGenPhotoHistos"); + + if (pnaa) *pnaa = NULL; + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!pnaa) + return ERROR_INT("&naa not defined", procName, 1); + if (!pw || !ph) + return ERROR_INT("&w and &h not both defined", procName, 1); + if (!pixs || pixGetDepth(pixs) == 1) + return ERROR_INT("pixs not defined or 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (thresh <= 0.0) thresh = 1.3; /* default */ + if (n < 1 || n > 7) { + L_WARNING("n = %d is invalid; setting to 4\n", procName, n); + n = 4; + } + + pixa = NULL; + if (debugindex > 0) { + pixa = pixaCreate(0); + lept_mkdir("lept/comp"); + } + + /* Initial crop, if necessary */ + if (box) + pix1 = pixClipRectangle(pixs, box, NULL); + else + pix1 = pixClone(pixs); + + /* Convert to 8 bpp and pad to center the centroid */ + pix2 = pixConvertTo8(pix1, FALSE); + pix3 = pixPadToCenterCentroid(pix2, factor); + + /* Set to 255 all pixels above 230. Do this so that light gray + * pixels do not enter into the comparison. */ + pixm = pixThresholdToBinary(pix3, 230); + pixInvert(pixm, pixm); + pixSetMaskedGeneral(pix3, pixm, 255, 0, 0); + pixDestroy(&pixm); + + if (debugindex > 0) { + PIX *pix4, *pix5, *pix6, *pix7, *pix8; + PIXA *pixa2; + pix4 = pixConvertTo32(pix2); + pix5 = pixConvertTo32(pix3); + pix6 = pixScaleToSize(pix4, 400, 0); + pix7 = pixScaleToSize(pix5, 400, 0); + pixa2 = pixaCreate(2); + pixaAddPix(pixa2, pix6, L_INSERT); + pixaAddPix(pixa2, pix7, L_INSERT); + pix8 = pixaDisplayTiledInRows(pixa2, 32, 1000, 1.0, 0, 50, 3); + pixaAddPix(pixa, pix8, L_INSERT); + pixDestroy(&pix4); + pixDestroy(&pix5); + pixaDestroy(&pixa2); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Test if this is a photoimage */ + pixDecideIfPhotoImage(pix3, factor, thresh, n, &naa, pixa); + if (naa) { + *pnaa = naa; + *pw = pixGetWidth(pix3); + *ph = pixGetHeight(pix3); + } + + if (pixa) { + snprintf(buf, sizeof(buf), "/tmp/lept/comp/tiledhistos.%d.pdf", + debugindex); + fprintf(stderr, "Writing to %s\n", buf); + pixaConvertToPdf(pixa, 300, 1.0, L_FLATE_ENCODE, 0, NULL, buf); + pixaDestroy(&pixa); + } + + pixDestroy(&pix3); + return 0; +} + + +/*! + * \brief pixPadToCenterCentroid() + * + * \param[in] pixs any depth, colormap OK + * \param[in] factor subsampling for centroid; >= 1 + * \return pixd padded with white pixels, or NULL on error. + * + *
+ * Notes:
+ *      (1) This add minimum white padding to an 8 bpp pix, such that
+ *          the centroid of the photometric inverse is in the center of
+ *          the resulting image.  Thus in computing the centroid,
+ *          black pixels have weight 255, and white pixels have weight 0.
+ * 
+ */ +PIX * +pixPadToCenterCentroid(PIX *pixs, + l_int32 factor) + +{ +l_float32 cx, cy; +l_int32 xs, ys, delx, dely, icx, icy, ws, hs, wd, hd; +PIX *pix1, *pixd; + + PROCNAME("pixPadToCenterCentroid"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("invalid sampling factor", procName, NULL); + + pix1 = pixConvertTo8(pixs, FALSE); + pixCentroid8(pix1, factor, &cx, &cy); + icx = (l_int32)(cx + 0.5); + icy = (l_int32)(cy + 0.5); + pixGetDimensions(pix1, &ws, &hs, NULL); + delx = ws - 2 * icx; + dely = hs - 2 * icy; + xs = L_MAX(0, delx); + ys = L_MAX(0, dely); + wd = 2 * L_MAX(icx, ws - icx); + hd = 2 * L_MAX(icy, hs - icy); + pixd = pixCreate(wd, hd, 8); + pixSetAll(pixd); /* to white */ + pixCopyResolution(pixd, pixs); + pixRasterop(pixd, xs, ys, ws, hs, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + return pixd; +} + + +/*! + * \brief pixCentroid8() + * + * \param[in] pixs 8 bpp + * \param[in] factor subsampling factor; >= 1 + * \param[out] pcx x value of centroid + * \param[out] pcy y value of centroid + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This first does a photometric inversion (black = 255, white = 0).
+ *          It then finds the centroid of the result.  The inversion is
+ *          done because white is usually background, so the centroid
+ *          is computed based on the "foreground" gray pixels, and the
+ *          darker the pixel, the more weight it is given.
+ * 
+ */ +l_ok +pixCentroid8(PIX *pixs, + l_int32 factor, + l_float32 *pcx, + l_float32 *pcy) +{ +l_int32 i, j, w, h, wpl, val; +l_float32 sumx, sumy, sumv; +l_uint32 *data, *line; +PIX *pix1; + + PROCNAME("pixCentroid8"); + + if (pcx) *pcx = 0.0; + if (pcy) *pcy = 0.0; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (!pcx || !pcy) + return ERROR_INT("&cx and &cy not both defined", procName, 1); + + pix1 = pixInvert(NULL, pixs); + pixGetDimensions(pix1, &w, &h, NULL); + data = pixGetData(pix1); + wpl = pixGetWpl(pix1); + sumx = sumy = sumv = 0.0; + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(line, j); + sumx += val * j; + sumy += val * i; + sumv += val; + } + } + pixDestroy(&pix1); + + if (sumv == 0) { + L_INFO("input image is white\n", procName); + *pcx = (l_float32)(w) / 2; + *pcy = (l_float32)(h) / 2; + } else { + *pcx = sumx / sumv; + *pcy = sumy / sumv; + } + + return 0; +} + + +/*! + * \brief pixDecideIfPhotoImage() + * + * \param[in] pix 8 bpp, centroid in center + * \param[in] factor subsampling for histograms; >= 1 + * \param[in] thresh threshold for photo/text; use 0 for default + * \param[in] n in range {1, ... 7}. n^2 is the maximum number + * of subregions for histograms; typ. n = 3. + * \param[out] pnaa array of normalized histograms + * \param[in] pixadebug [optional] use only for debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input image must be 8 bpp (no colormap), and padded with
+ *          white pixels so the centroid of photo-inverted pixels is at
+ *          the center of the image.
+ *      (2) The parameter %n specifies the "side" of the n x n grid
+ *          of subimages.  If the subimages have an aspect ratio larger
+ *          than 2, the grid will change, using n^2 as a maximum for
+ *          the number of subimages.  For example, if n == 3, but the
+ *          image is 600 x 200 pixels, a 3x3 grid would have subimages
+ *          of 200 x 67 pixels, which is more than 2:1, so we change
+ *          to a 4x2 grid where each subimage has 150 x 100 pixels.
+ *      (3) If the pix is not almost certainly a photoimage, the returned
+ *          histograms (%naa) are null.
+ *      (4) If histograms are generated, the white (255) count is set
+ *          to 0.  This removes all pixels values above 230, including
+ *          white padding from the centroid matching operation, from
+ *          consideration.  The resulting histograms are then normalized
+ *          so the maximum count is 255.
+ *      (5) Default for %thresh is 1.3; this seems sufficiently conservative.
+ *      (6) Use %pixadebug == NULL unless debug output is requested.
+ * 
+ */ +l_ok +pixDecideIfPhotoImage(PIX *pix, + l_int32 factor, + l_float32 thresh, + l_int32 n, + NUMAA **pnaa, + PIXA *pixadebug) +{ +char buf[64]; +l_int32 i, w, h, nx, ny, ngrids, istext, isphoto; +l_float32 maxval, sum1, sum2, ratio; +L_BMF *bmf; +NUMA *na1, *na2, *na3, *narv; +NUMAA *naa; +PIX *pix1; +PIXA *pixa1, *pixa2, *pixa3; + + PROCNAME("pixDecideIfPhotoImage"); + + if (!pnaa) + return ERROR_INT("&naa not defined", procName, 1); + *pnaa = NULL; + if (!pix || pixGetDepth(pix) != 8 || pixGetColormap(pix)) + return ERROR_INT("pix undefined or invalid", procName, 1); + if (n < 1 || n > 7) { + L_WARNING("n = %d is invalid; setting to 4\n", procName, n); + n = 4; + } + if (thresh <= 0.0) thresh = 1.3; /* default */ + + /* Look for text lines */ + pixDecideIfText(pix, NULL, &istext, pixadebug); + if (istext) { + L_INFO("Image is text\n", procName); + return 0; + } + + /* Determine grid from n */ + pixGetDimensions(pix, &w, &h, NULL); + if (w == 0 || h == 0) + return ERROR_INT("invalid pix dimension", procName, 1); + findHistoGridDimensions(n, w, h, &nx, &ny, 1); + + /* Evaluate histograms in each tile */ + pixa1 = pixaSplitPix(pix, nx, ny, 0, 0); + ngrids = nx * ny; + bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; + naa = numaaCreate(ngrids); + if (pixadebug) { + lept_rmdir("lept/compplot"); + lept_mkdir("lept/compplot"); + } + for (i = 0; i < ngrids; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + + /* Get histograms, set white count to 0, normalize max to 255 */ + na1 = pixGetGrayHistogram(pix1, factor); + numaSetValue(na1, 255, 0); + na2 = numaWindowedMean(na1, 5); /* do some smoothing */ + numaGetMax(na2, &maxval, NULL); + na3 = numaTransform(na2, 0, 255.0 / maxval); + if (pixadebug) { + snprintf(buf, sizeof(buf), "/tmp/lept/compplot/plot.%d", i); + gplotSimple1(na3, GPLOT_PNG, buf, "Histos"); + } + + numaaAddNuma(naa, na3, L_INSERT); + numaDestroy(&na1); + numaDestroy(&na2); + pixDestroy(&pix1); + } + if (pixadebug) { + pix1 = pixaDisplayTiledInColumns(pixa1, nx, 1.0, 30, 2); + pixaAddPix(pixadebug, pix1, L_INSERT); + pixa2 = pixaReadFiles("/tmp/lept/compplot", ".png"); + pixa3 = pixaScale(pixa2, 0.4, 0.4); + pix1 = pixaDisplayTiledInColumns(pixa3, nx, 1.0, 30, 2); + pixaAddPix(pixadebug, pix1, L_INSERT); + pixaDestroy(&pixa2); + pixaDestroy(&pixa3); + } + + /* Compute the standard deviation between these histos to decide + * if the image is photo or something more like line art, + * which does not support good comparison by tiled histograms. */ + grayInterHistogramStats(naa, 5, NULL, NULL, NULL, &narv); + + /* For photos, the root variance has a larger weight of + * values in the range [50 ... 150] compared to [200 ... 230], + * than text or line art. For the latter, most of the variance + * between tiles is in the lightest parts of the image, well + * above 150. */ + numaGetSumOnInterval(narv, 50, 150, &sum1); + numaGetSumOnInterval(narv, 200, 230, &sum2); + if (sum2 == 0.0) { /* shouldn't happen */ + ratio = 0.001; /* anything very small for debug output */ + isphoto = 0; /* be conservative */ + } else { + ratio = sum1 / sum2; + isphoto = (ratio > thresh) ? 1 : 0; + } + if (pixadebug) { + if (isphoto) + L_INFO("ratio %f > %f; isphoto is true\n", + procName, ratio, thresh); + else + L_INFO("ratio %f < %f; isphoto is false\n", + procName, ratio, thresh); + } + if (isphoto) + *pnaa = naa; + else + numaaDestroy(&naa); + bmfDestroy(&bmf); + numaDestroy(&narv); + pixaDestroy(&pixa1); + return 0; +} + + +/*! + * \brief findHistoGridDimensions() + * + * \param[in] n max number of grid elements is n^2; typ. n = 3 + * \param[in] w width of image to be subdivided + * \param[in] h height of image to be subdivided + * \param[out] pnx number of grid elements in x direction + * \param[out] pny number of grid elements in y direction + * \param[in] debug 1 for debug output to stderr + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This determines the number of subdivisions to be used on
+ *          the image in each direction.  A histogram will be built
+ *          for each subimage.
+ *      (2) The parameter %n specifies the "side" of the n x n grid
+ *          of subimages.  If the subimages have an aspect ratio larger
+ *          than 2, the grid will change, using n^2 as a maximum for
+ *          the number of subimages.  For example, if n == 3, but the
+ *          image is 600 x 200 pixels, a 3x3 grid would have subimages
+ *          of 200 x 67 pixels, which is more than 2:1, so we change
+ *          to a 4x2 grid where each subimage has 150 x 100 pixels.
+ * 
+ */ +static l_ok +findHistoGridDimensions(l_int32 n, + l_int32 w, + l_int32 h, + l_int32 *pnx, + l_int32 *pny, + l_int32 debug) +{ +l_int32 nx, ny, max; +l_float32 ratio; + + ratio = (l_float32)w / (l_float32)h; + max = n * n; + nx = ny = n; + while (nx > 1 && ny > 1) { + if (ratio > 2.0) { /* reduce ny */ + ny--; + nx = max / ny; + if (debug) + fprintf(stderr, "nx = %d, ny = %d, ratio w/h = %4.2f\n", + nx, ny, ratio); + } else if (ratio < 0.5) { /* reduce nx */ + nx--; + ny = max / nx; + if (debug) + fprintf(stderr, "nx = %d, ny = %d, ratio w/h = %4.2f\n", + nx, ny, ratio); + } else { /* we're ok */ + if (debug) + fprintf(stderr, "nx = %d, ny = %d, ratio w/h = %4.2f\n", + nx, ny, ratio); + break; + } + ratio = (l_float32)(ny * w) / (l_float32)(nx * h); + } + *pnx = nx; + *pny = ny; + return 0; +} + + +/*! + * \brief compareTilesByHisto() + * + * \param[in] naa1, naa2 each is a set of 256 entry histograms + * \param[in] minratio requiring image sizes be compatible; < 1.0 + * \param[in] w1, h1, w2, h2 image sizes from which histograms were made + * \param[out] pscore similarity score of histograms + * \param[in] pixadebug [optional] use only for debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) naa1 and naa2 must be generated using pixGenPhotoHistos(),
+ *          using the same tile sizes.
+ *      (2) The image dimensions must be similar.  The score is 0.0
+ *          if the ratio of widths and heights (smallest / largest)
+ *          exceeds a threshold %minratio, which must be between
+ *          0.5 and 1.0.  If set at 1.0, both images must be exactly
+ *          the same size.  A typical value for %minratio is 0.9.
+ *      (3) The input pixadebug is null unless debug output is requested.
+ * 
+ */ +l_ok +compareTilesByHisto(NUMAA *naa1, + NUMAA *naa2, + l_float32 minratio, + l_int32 w1, + l_int32 h1, + l_int32 w2, + l_int32 h2, + l_float32 *pscore, + PIXA *pixadebug) +{ +char buf1[128], buf2[128]; +l_int32 i, n; +l_float32 wratio, hratio, score, minscore, dist; +L_BMF *bmf; +NUMA *na1, *na2, *nadist, *nascore; + + PROCNAME("compareTilesByHisto"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!naa1 || !naa2) + return ERROR_INT("naa1 and naa2 not both defined", procName, 1); + + /* Filter for different sizes */ + wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : + (l_float32)w2 / (l_float32)w1; + hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : + (l_float32)h2 / (l_float32)h1; + if (wratio < minratio || hratio < minratio) { + if (pixadebug) + L_INFO("Sizes differ: wratio = %f, hratio = %f\n", + procName, wratio, hratio); + return 0; + } + n = numaaGetCount(naa1); + if (n != numaaGetCount(naa2)) { /* due to differing w/h ratio */ + L_INFO("naa1 and naa2 sizes are different\n", procName); + return 0; + } + + if (pixadebug) { + lept_rmdir("lept/comptile"); + lept_mkdir("lept/comptile"); + } + + + /* Evaluate histograms in each tile. Remove white before + * computing EMD, because there are may be a lot of white + * pixels due to padding, and we don't want to include them. + * This also makes the debug histo plots more informative. */ + minscore = 1.0; + nadist = numaCreate(n); + nascore = numaCreate(n); + bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; + for (i = 0; i < n; i++) { + na1 = numaaGetNuma(naa1, i, L_CLONE); + na2 = numaaGetNuma(naa2, i, L_CLONE); + numaSetValue(na1, 255, 0.0); + numaSetValue(na2, 255, 0.0); + + /* To compare histograms, use the normalized earthmover distance. + * Further normalize to get the EM distance as a fraction of the + * maximum distance in the histogram (255). Finally, scale this + * up by 10.0, and subtract from 1.0 to get a similarity score. */ + numaEarthMoverDistance(na1, na2, &dist); + score = L_MAX(0.0, 1.0 - 10.0 * (dist / 255.)); + numaAddNumber(nadist, dist); + numaAddNumber(nascore, score); + minscore = L_MIN(minscore, score); + if (pixadebug) { + snprintf(buf1, sizeof(buf1), "/tmp/lept/comptile/plot.%d", i); + gplotSimple2(na1, na2, GPLOT_PNG, buf1, "Histos"); + } + numaDestroy(&na1); + numaDestroy(&na2); + } + *pscore = minscore; + + if (pixadebug) { + for (i = 0; i < n; i++) { + PIX *pix1, *pix2; + snprintf(buf1, sizeof(buf1), "/tmp/lept/comptile/plot.%d.png", i); + pix1 = pixRead(buf1); + numaGetFValue(nadist, i, &dist); + numaGetFValue(nascore, i, &score); + snprintf(buf2, sizeof(buf2), + "Image %d\ndist = %5.3f, score = %5.3f", i, dist, score); + pix2 = pixAddTextlines(pix1, bmf, buf2, 0x0000ff00, L_ADD_BELOW); + pixaAddPix(pixadebug, pix2, L_INSERT); + pixDestroy(&pix1); + } + fprintf(stderr, "Writing to /tmp/lept/comptile/comparegray.pdf\n"); + pixaConvertToPdf(pixadebug, 300, 1.0, L_FLATE_ENCODE, 0, NULL, + "/tmp/lept/comptile/comparegray.pdf"); + numaWriteDebug("/tmp/lept/comptile/scores.na", nascore); + numaWriteDebug("/tmp/lept/comptile/dists.na", nadist); + } + + bmfDestroy(&bmf); + numaDestroy(&nadist); + numaDestroy(&nascore); + return 0; +} + + +/*! + * \brief pixCompareGrayByHisto() + * + * \param[in] pix1, pix2 any depth; colormap OK + * \param[in] box1, box2 [optional] region selected from each; can be null + * \param[in] minratio requiring sizes be compatible; < 1.0 + * \param[in] maxgray max value to keep in histo; >= 200, 255 to keep all + * \param[in] factor subsampling factor; >= 1 + * \param[in] n in range {1, ... 7}. n^2 is the maximum number + * of subregions for histograms; typ. n = 3. + * \param[out] pscore similarity score of histograms + * \param[in] debugflag 1 for debug output; 0 for no debugging + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function compares two grayscale photo regions.  It can
+ *          do it with a single histogram from each region, or with a
+ *          set of spatially aligned histograms.  For both cases,
+ *          align the regions using the centroid of the inverse image,
+ *          and crop to the smallest of the two.
+ *      (2) The parameter %n specifies the "side" of an n x n grid
+ *          of subimages.  If the subimages have an aspect ratio larger
+ *          than 2, the grid will change, using n^2 as a maximum for
+ *          the number of subimages.  For example, if n == 3, but the
+ *          image is 600 x 200 pixels, a 3x3 grid would have subimages
+ *          of 200 x 67 pixels, which is more than 2:1, so we change
+ *          to a 4x2 grid where each subimage has 150 x 100 pixels.
+ *      (3) An initial filter gives %score = 0 if the ratio of widths
+ *          and heights (smallest / largest) does not exceed a
+ *          threshold %minratio.  This must be between 0.5 and 1.0.
+ *          If set at 1.0, both images must be exactly the same size.
+ *          A typical value for %minratio is 0.9.
+ *      (4) The lightest values in the histogram can be disregarded.
+ *          Set %maxgray to the lightest value to be kept.  For example,
+ *          to eliminate white (255), set %maxgray = 254.  %maxgray must
+ *          be >= 200.
+ *      (5) For an efficient representation of the histogram, normalize
+ *          using a multiplicative factor so that the number in the
+ *          maximum bucket is 255.  It then takes 256 bytes to store.
+ *      (6) When comparing the histograms of two regions:
+ *          ~ Use %maxgray = 254 to ignore the white pixels, the number
+ *            of which may be sensitive to the crop region if the pixels
+ *            outside that region are white.
+ *          ~ Use the Earth Mover distance (EMD), with the histograms
+ *            normalized so that the sum over bins is the same.
+ *            Further normalize by dividing by 255, so that the result
+ *            is in [0.0 ... 1.0].
+ *      (7) Get a similarity score S = 1.0 - k * D, where
+ *            k is a constant, say in the range 5-10
+ *            D = normalized EMD
+ *          and for multiple tiles, take the Min(S) to be the final score.
+ *          Using aligned tiles gives protection against accidental
+ *          similarity of the overall grayscale histograms.
+ *          A small number of aligned tiles works well.
+ *      (8) With debug on, you get a pdf that shows, for each tile,
+ *          the images, histograms and score.
+ *      (9) When to use:
+ *          (a) Because this function should not be used on text or
+ *              line graphics, which can give false positive results
+ *              (i.e., high scores for different images), the input
+ *              images should be filtered.
+ *          (b) To filter, first use pixDecideIfText().  If that function
+ *              says the image is text, do not use it.  If the function
+ *              says it is not text, it still may be line graphics, and
+ *              in that case, use:
+ *                 pixGetGrayHistogramTiled()
+ *                 grayInterHistogramStats()
+ *              to determine whether it is photo or line graphics.
+ * 
+ */ +l_ok +pixCompareGrayByHisto(PIX *pix1, + PIX *pix2, + BOX *box1, + BOX *box2, + l_float32 minratio, + l_int32 maxgray, + l_int32 factor, + l_int32 n, + l_float32 *pscore, + l_int32 debugflag) +{ +l_int32 w1, h1, w2, h2; +l_float32 wratio, hratio; +BOX *box3, *box4; +PIX *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; +PIXA *pixa; + + PROCNAME("pixCompareGrayByHisto"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + if (minratio < 0.5 || minratio > 1.0) + return ERROR_INT("minratio not in [0.5 ... 1.0]", procName, 1); + if (maxgray < 200) + return ERROR_INT("invalid maxgray; should be >= 200", procName, 1); + maxgray = L_MIN(255, maxgray); + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (n < 1 || n > 7) { + L_WARNING("n = %d is invalid; setting to 4\n", procName, n); + n = 4; + } + + if (debugflag) + lept_mkdir("lept/comp"); + + /* Initial filter by size */ + if (box1) + boxGetGeometry(box1, NULL, NULL, &w1, &h1); + else + pixGetDimensions(pix1, &w1, &h1, NULL); + if (box2) + boxGetGeometry(box2, NULL, NULL, &w2, &h2); + else + pixGetDimensions(pix1, &w2, &h2, NULL); + wratio = (w1 < w2) ? (l_float32)w1 / (l_float32)w2 : + (l_float32)w2 / (l_float32)w1; + hratio = (h1 < h2) ? (l_float32)h1 / (l_float32)h2 : + (l_float32)h2 / (l_float32)h1; + if (wratio < minratio || hratio < minratio) + return 0; + + /* Initial crop, if necessary */ + if (box1) + pix3 = pixClipRectangle(pix1, box1, NULL); + else + pix3 = pixClone(pix1); + if (box2) + pix4 = pixClipRectangle(pix2, box2, NULL); + else + pix4 = pixClone(pix2); + + /* Convert to 8 bpp, align centroids and do maximal crop */ + pix5 = pixConvertTo8(pix3, FALSE); + pix6 = pixConvertTo8(pix4, FALSE); + pixCropAlignedToCentroid(pix5, pix6, factor, &box3, &box4); + pix7 = pixClipRectangle(pix5, box3, NULL); + pix8 = pixClipRectangle(pix6, box4, NULL); + pixa = (debugflag) ? pixaCreate(0) : NULL; + if (debugflag) { + PIX *pix9, *pix10, *pix11, *pix12, *pix13; + PIXA *pixa2; + pix9 = pixConvertTo32(pix5); + pix10 = pixConvertTo32(pix6); + pixRenderBoxArb(pix9, box3, 2, 255, 0, 0); + pixRenderBoxArb(pix10, box4, 2, 255, 0, 0); + pix11 = pixScaleToSize(pix9, 400, 0); + pix12 = pixScaleToSize(pix10, 400, 0); + pixa2 = pixaCreate(2); + pixaAddPix(pixa2, pix11, L_INSERT); + pixaAddPix(pixa2, pix12, L_INSERT); + pix13 = pixaDisplayTiledInRows(pixa2, 32, 1000, 1.0, 0, 50, 0); + pixaAddPix(pixa, pix13, L_INSERT); + pixDestroy(&pix9); + pixDestroy(&pix10); + pixaDestroy(&pixa2); + } + pixDestroy(&pix3); + pixDestroy(&pix4); + pixDestroy(&pix5); + pixDestroy(&pix6); + boxDestroy(&box3); + boxDestroy(&box4); + + /* Tile and compare histograms */ + pixCompareTilesByHisto(pix7, pix8, maxgray, factor, n, pscore, pixa); + pixaDestroy(&pixa); + pixDestroy(&pix7); + pixDestroy(&pix8); + return 0; +} + + +/*! + * \brief pixCompareTilesByHisto() + * + * \param[in] pix1, pix2 8 bpp + * \param[in] maxgray max value to keep in histo; 255 to keep all + * \param[in] factor subsampling factor; >= 1 + * \param[in] n see pixCompareGrayByHisto() + * \param[out] pscore similarity score of histograms + * \param[in] pixadebug [optional] use only for debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This static function is only called from pixCompareGrayByHisto().
+ *          The input images have been converted to 8 bpp if necessary,
+ *          aligned and cropped.
+ *      (2) The input pixadebug is null unless debug output is requested.
+ *      (3) See pixCompareGrayByHisto() for details.
+ * 
+ */ +static l_ok +pixCompareTilesByHisto(PIX *pix1, + PIX *pix2, + l_int32 maxgray, + l_int32 factor, + l_int32 n, + l_float32 *pscore, + PIXA *pixadebug) +{ +char buf[64]; +l_int32 w, h, i, j, nx, ny, ngr; +l_float32 score, minscore, maxval1, maxval2, dist; +L_BMF *bmf; +NUMA *na1, *na2, *na3, *na4, *na5, *na6, *na7; +PIX *pix3, *pix4; +PIXA *pixa1, *pixa2; + + PROCNAME("pixCompareTilesByHisto"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + + /* Determine grid from n */ + pixGetDimensions(pix1, &w, &h, NULL); + findHistoGridDimensions(n, w, h, &nx, &ny, 1); + ngr = nx * ny; + + /* Evaluate histograms in each tile */ + pixa1 = pixaSplitPix(pix1, nx, ny, 0, 0); + pixa2 = pixaSplitPix(pix2, nx, ny, 0, 0); + na7 = (pixadebug) ? numaCreate(ngr) : NULL; + bmf = (pixadebug) ? bmfCreate(NULL, 6) : NULL; + minscore = 1.0; + for (i = 0; i < ngr; i++) { + pix3 = pixaGetPix(pixa1, i, L_CLONE); + pix4 = pixaGetPix(pixa2, i, L_CLONE); + + /* Get histograms, set white count to 0, normalize max to 255 */ + na1 = pixGetGrayHistogram(pix3, factor); + na2 = pixGetGrayHistogram(pix4, factor); + if (maxgray < 255) { + for (j = maxgray + 1; j <= 255; j++) { + numaSetValue(na1, j, 0); + numaSetValue(na2, j, 0); + } + } + na3 = numaWindowedMean(na1, 5); + na4 = numaWindowedMean(na2, 5); + numaGetMax(na3, &maxval1, NULL); + numaGetMax(na4, &maxval2, NULL); + na5 = numaTransform(na3, 0, 255.0 / maxval1); + na6 = numaTransform(na4, 0, 255.0 / maxval2); + if (pixadebug) { + gplotSimple2(na5, na6, GPLOT_PNG, "/tmp/lept/comp/plot1", "Histos"); + } + + /* To compare histograms, use the normalized earthmover distance. + * Further normalize to get the EM distance as a fraction of the + * maximum distance in the histogram (255). Finally, scale this + * up by 10.0, and subtract from 1.0 to get a similarity score. */ + numaEarthMoverDistance(na5, na6, &dist); + score = L_MAX(0.0, 1.0 - 8.0 * (dist / 255.)); + if (pixadebug) numaAddNumber(na7, score); + minscore = L_MIN(minscore, score); + if (pixadebug) { + PIX *pix5, *pix6, *pix7, *pix8, *pix9, *pix10; + PIXA *pixa3; + l_int32 w, h, wscale; + pixa3 = pixaCreate(3); + pixGetDimensions(pix3, &w, &h, NULL); + wscale = (w > h) ? 700 : 400; + pix5 = pixScaleToSize(pix3, wscale, 0); + pix6 = pixScaleToSize(pix4, wscale, 0); + pixaAddPix(pixa3, pix5, L_INSERT); + pixaAddPix(pixa3, pix6, L_INSERT); + pix7 = pixRead("/tmp/lept/comp/plot1.png"); + pix8 = pixScaleToSize(pix7, 700, 0); + snprintf(buf, sizeof(buf), "%5.3f", score); + pix9 = pixAddTextlines(pix8, bmf, buf, 0x0000ff00, L_ADD_RIGHT); + pixaAddPix(pixa3, pix9, L_INSERT); + pix10 = pixaDisplayTiledInRows(pixa3, 32, 1000, 1.0, 0, 50, 0); + pixaAddPix(pixadebug, pix10, L_INSERT); + pixDestroy(&pix7); + pixDestroy(&pix8); + pixaDestroy(&pixa3); + } + numaDestroy(&na1); + numaDestroy(&na2); + numaDestroy(&na3); + numaDestroy(&na4); + numaDestroy(&na5); + numaDestroy(&na6); + pixDestroy(&pix3); + pixDestroy(&pix4); + } + *pscore = minscore; + + if (pixadebug) { + pixaConvertToPdf(pixadebug, 300, 1.0, L_FLATE_ENCODE, 0, NULL, + "/tmp/lept/comp/comparegray.pdf"); + numaWriteDebug("/tmp/lept/comp/tilescores.na", na7); + } + + bmfDestroy(&bmf); + numaDestroy(&na7); + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + return 0; +} + + +/*! + * \brief pixCropAlignedToCentroid() + * + * \param[in] pix1, pix2 any depth; colormap OK + * \param[in] factor subsampling; >= 1 + * \param[out] pbox1 crop box for pix1 + * \param[out] pbox2 crop box for pix2 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This finds the maximum crop boxes for two 8 bpp images when
+ *          their centroids of their photometric inverses are aligned.
+ *          Black pixels have weight 255; white pixels have weight 0.
+ * 
+ */ +l_ok +pixCropAlignedToCentroid(PIX *pix1, + PIX *pix2, + l_int32 factor, + BOX **pbox1, + BOX **pbox2) +{ +l_float32 cx1, cy1, cx2, cy2; +l_int32 w1, h1, w2, h2, icx1, icy1, icx2, icy2; +l_int32 xm, xm1, xm2, xp, xp1, xp2, ym, ym1, ym2, yp, yp1, yp2; +PIX *pix3, *pix4; + + PROCNAME("pixCropAlignedToCentroid"); + + if (pbox1) *pbox1 = NULL; + if (pbox2) *pbox2 = NULL; + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + if (factor < 1) + return ERROR_INT("subsampling factor must be >= 1", procName, 1); + if (!pbox1 || !pbox2) + return ERROR_INT("&box1 and &box2 not both defined", procName, 1); + + pix3 = pixConvertTo8(pix1, FALSE); + pix4 = pixConvertTo8(pix2, FALSE); + pixCentroid8(pix3, factor, &cx1, &cy1); + pixCentroid8(pix4, factor, &cx2, &cy2); + pixGetDimensions(pix3, &w1, &h1, NULL); + pixGetDimensions(pix4, &w2, &h2, NULL); + pixDestroy(&pix3); + pixDestroy(&pix4); + + icx1 = (l_int32)(cx1 + 0.5); + icy1 = (l_int32)(cy1 + 0.5); + icx2 = (l_int32)(cx2 + 0.5); + icy2 = (l_int32)(cy2 + 0.5); + xm = L_MIN(icx1, icx2); + xm1 = icx1 - xm; + xm2 = icx2 - xm; + xp = L_MIN(w1 - icx1, w2 - icx2); /* one pixel beyond to the right */ + xp1 = icx1 + xp; + xp2 = icx2 + xp; + ym = L_MIN(icy1, icy2); + ym1 = icy1 - ym; + ym2 = icy2 - ym; + yp = L_MIN(h1 - icy1, h2 - icy2); /* one pixel below the bottom */ + yp1 = icy1 + yp; + yp2 = icy2 + yp; + *pbox1 = boxCreate(xm1, ym1, xp1 - xm1, yp1 - ym1); + *pbox2 = boxCreate(xm2, ym2, xp2 - xm2, yp2 - ym2); + return 0; +} + + +/*! + * \brief l_compressGrayHistograms() + * + * \param[in] naa set of 256-entry histograms + * \param[in] w, h size of image + * \param[out] psize size of byte array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This first writes w and h to the byte array as 4 byte ints.
+ *      (2) Then it normalizes each histogram to a max value of 255,
+ *          and saves each value as a byte.  If there are
+ *          N histograms, the output bytearray has 8 + 256 * N bytes.
+ *      (3) Further compression of the array with zlib yields only about
+ *          a 25% decrease in size, so we don't bother.  If size reduction
+ *          were important, a lossy transform using a 1-dimensional DCT
+ *          would be effective, because we don't care about the fine
+ *          details of these histograms.
+ * 
+ */ +l_uint8 * +l_compressGrayHistograms(NUMAA *naa, + l_int32 w, + l_int32 h, + size_t *psize) +{ +l_uint8 *bytea; +l_int32 i, j, n, nn, ival; +l_float32 maxval; +NUMA *na1, *na2; + + PROCNAME("l_compressGrayHistograms"); + + if (!psize) + return (l_uint8 *)ERROR_PTR("&size not defined", procName, NULL); + *psize = 0; + if (!naa) + return (l_uint8 *)ERROR_PTR("naa not defined", procName, NULL); + n = numaaGetCount(naa); + for (i = 0; i < n; i++) { + nn = numaaGetNumaCount(naa, i); + if (nn != 256) { + L_ERROR("%d numbers in numa[%d]\n", procName, nn, i); + return NULL; + } + } + + if ((bytea = (l_uint8 *)LEPT_CALLOC(8 + 256 * n, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("bytea not made", procName, NULL); + *psize = 8 + 256 * n; + l_setDataFourBytes(bytea, 0, w); + l_setDataFourBytes(bytea, 1, h); + for (i = 0; i < n; i++) { + na1 = numaaGetNuma(naa, i, L_COPY); + numaGetMax(na1, &maxval, NULL); + na2 = numaTransform(na1, 0, 255.0 / maxval); + for (j = 0; j < 256; j++) { + numaGetIValue(na2, j, &ival); + bytea[8 + 256 * i + j] = ival; + } + numaDestroy(&na1); + numaDestroy(&na2); + } + + return bytea; +} + + +/*! + * \brief l_uncompressGrayHistograms() + * + * \param[in] bytea byte array of size 8 + 256 * N, N an integer + * \param[in] size size of byte array + * \param[out] pw width of the image that generated the histograms + * \param[out] ph height of the image + * \return numaa representing N histograms, each with 256 bins, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) The first 8 bytes are read as two 32-bit ints.
+ *      (2) Then this constructs a numaa representing some number of
+ *          gray histograms that are normalized such that the max value
+ *          in each histogram is 255.  The data is stored as a byte
+ *          array, with 256 bytes holding the data for each histogram.
+ *          Each gray histogram was computed from a tile of a grayscale image.
+ * 
+ */ +NUMAA * +l_uncompressGrayHistograms(l_uint8 *bytea, + size_t size, + l_int32 *pw, + l_int32 *ph) +{ +l_int32 i, j, n; +NUMA *na; +NUMAA *naa; + + PROCNAME("l_uncompressGrayHistograms"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!pw || !ph) + return (NUMAA *)ERROR_PTR("&w and &h not both defined", procName, NULL); + if (!bytea) + return (NUMAA *)ERROR_PTR("bytea not defined", procName, NULL); + n = (size - 8) / 256; + if ((size - 8) % 256 != 0) + return (NUMAA *)ERROR_PTR("bytea size is invalid", procName, NULL); + + *pw = l_getDataFourBytes(bytea, 0); + *ph = l_getDataFourBytes(bytea, 1); + naa = numaaCreate(n); + for (i = 0; i < n; i++) { + na = numaCreate(256); + for (j = 0; j < 256; j++) + numaAddNumber(na, bytea[8 + 256 * i + j]); + numaaAddNuma(naa, na, L_INSERT); + } + + return naa; +} + + +/*------------------------------------------------------------------* + * Translated images at the same resolution * + *------------------------------------------------------------------*/ +/*! + * \brief pixCompareWithTranslation() + * + * \param[in] pix1, pix2 any depth; colormap OK + * \param[in] thresh threshold for converting to 1 bpp + * \param[out] pdelx x translation on pix2 to align with pix1 + * \param[out] pdely y translation on pix2 to align with pix1 + * \param[out] pscore correlation score at best alignment + * \param[in] debugflag 1 for debug output; 0 for no debugging + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a coarse-to-fine search for best translational
+ *          alignment of two images, measured by a scoring function
+ *          that is the correlation between the fg pixels.
+ *      (2) The threshold is used if the images aren't 1 bpp.
+ *      (3) With debug on, you get a pdf that shows, as a grayscale
+ *          image, the score as a function of shift from the initial
+ *          estimate, for each of the four levels.  The shift is 0 at
+ *          the center of the image.
+ *      (4) With debug on, you also get a pdf that shows the
+ *          difference at the best alignment between the two images,
+ *          at each of the four levels.  The red and green pixels
+ *          show locations where one image has a fg pixel and the
+ *          other doesn't.  The black pixels are where both images
+ *          have fg pixels, and white pixels are where neither image
+ *          has fg pixels.
+ * 
+ */ +l_ok +pixCompareWithTranslation(PIX *pix1, + PIX *pix2, + l_int32 thresh, + l_int32 *pdelx, + l_int32 *pdely, + l_float32 *pscore, + l_int32 debugflag) +{ +l_uint8 *subtab; +l_int32 i, level, area1, area2, delx, dely; +l_int32 etransx, etransy, maxshift, dbint; +l_int32 *stab, *ctab; +l_float32 cx1, cx2, cy1, cy2, score; +PIX *pixb1, *pixb2, *pixt1, *pixt2, *pixt3, *pixt4; +PIXA *pixa1, *pixa2, *pixadb; + + PROCNAME("pixCompareWithTranslation"); + + if (pdelx) *pdelx = 0; + if (pdely) *pdely = 0; + if (pscore) *pscore = 0.0; + if (!pdelx || !pdely) + return ERROR_INT("&delx and &dely not defined", procName, 1); + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + if (!pix1) + return ERROR_INT("pix1 not defined", procName, 1); + if (!pix2) + return ERROR_INT("pix2 not defined", procName, 1); + + /* Make tables */ + subtab = makeSubsampleTab2x(); + stab = makePixelSumTab8(); + ctab = makePixelCentroidTab8(); + + /* Binarize each image */ + pixb1 = pixConvertTo1(pix1, thresh); + pixb2 = pixConvertTo1(pix2, thresh); + + /* Make a cascade of 2x reduced images for each, thresholding + * with level 2 (neutral), down to 8x reduction */ + pixa1 = pixaCreate(4); + pixa2 = pixaCreate(4); + if (debugflag) + pixadb = pixaCreate(4); + pixaAddPix(pixa1, pixb1, L_INSERT); + pixaAddPix(pixa2, pixb2, L_INSERT); + for (i = 0; i < 3; i++) { + pixt1 = pixReduceRankBinary2(pixb1, 2, subtab); + pixt2 = pixReduceRankBinary2(pixb2, 2, subtab); + pixaAddPix(pixa1, pixt1, L_INSERT); + pixaAddPix(pixa2, pixt2, L_INSERT); + pixb1 = pixt1; + pixb2 = pixt2; + } + + /* At the lowest level, use the centroids with a maxshift of 6 + * to search for the best alignment. Then at higher levels, + * use the result from the level below as the initial approximation + * for the alignment, and search with a maxshift of 2. */ + for (level = 3; level >= 0; level--) { + pixt1 = pixaGetPix(pixa1, level, L_CLONE); + pixt2 = pixaGetPix(pixa2, level, L_CLONE); + pixCountPixels(pixt1, &area1, stab); + pixCountPixels(pixt2, &area2, stab); + if (level == 3) { + pixCentroid(pixt1, ctab, stab, &cx1, &cy1); + pixCentroid(pixt2, ctab, stab, &cx2, &cy2); + etransx = lept_roundftoi(cx1 - cx2); + etransy = lept_roundftoi(cy1 - cy2); + maxshift = 6; + } else { + etransx = 2 * delx; + etransy = 2 * dely; + maxshift = 2; + } + dbint = (debugflag) ? level + 1 : 0; + pixBestCorrelation(pixt1, pixt2, area1, area2, etransx, etransy, + maxshift, stab, &delx, &dely, &score, dbint); + if (debugflag) { + fprintf(stderr, "Level %d: delx = %d, dely = %d, score = %7.4f\n", + level, delx, dely, score); + pixRasteropIP(pixt2, delx, dely, L_BRING_IN_WHITE); + pixt3 = pixDisplayDiffBinary(pixt1, pixt2); + pixt4 = pixExpandReplicate(pixt3, 8 / (1 << (3 - level))); + pixaAddPix(pixadb, pixt4, L_INSERT); + pixDestroy(&pixt3); + } + pixDestroy(&pixt1); + pixDestroy(&pixt2); + } + + if (debugflag) { + pixaConvertToPdf(pixadb, 300, 1.0, L_FLATE_ENCODE, 0, NULL, + "/tmp/lept/comp/compare.pdf"); + convertFilesToPdf("/tmp/lept/comp", "correl_", 30, 1.0, L_FLATE_ENCODE, + 0, "Correlation scores at levels 1 through 5", + "/tmp/lept/comp/correl.pdf"); + pixaDestroy(&pixadb); + } + + *pdelx = delx; + *pdely = dely; + *pscore = score; + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + LEPT_FREE(subtab); + LEPT_FREE(stab); + LEPT_FREE(ctab); + return 0; +} + + +/*! + * \brief pixBestCorrelation() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \param[in] area1 number of on pixels in pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] etransx estimated x translation of pix2 to align with pix1 + * \param[in] etransy estimated y translation of pix2 to align with pix1 + * \param[in] maxshift max x and y shift of pix2, around the estimated + * alignment location, relative to pix1 + * \param[in] tab8 [optional] sum tab for ON pixels in byte; can be NULL + * \param[out] pdelx [optional] best x shift of pix2 relative to pix1 + * \param[out] pdely [optional] best y shift of pix2 relative to pix1 + * \param[out] pscore [optional] maximum score found; can be NULL + * \param[in] debugflag <= 0 to skip; positive to generate output. + * The integer is used to label the debug image. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This maximizes the correlation score between two 1 bpp images,
+ *          by starting with an estimate of the alignment
+ *          (%etransx, %etransy) and computing the correlation around this.
+ *          It optionally returns the shift (%delx, %dely) that maximizes
+ *          the correlation score when pix2 is shifted by this amount
+ *          relative to pix1.
+ *      (2) Get the centroids of pix1 and pix2, using pixCentroid(),
+ *          to compute (%etransx, %etransy).  Get the areas using
+ *          pixCountPixels().
+ *      (3) The centroid of pix2 is shifted with respect to the centroid
+ *          of pix1 by all values between -maxshiftx and maxshiftx,
+ *          and likewise for the y shifts.  Therefore, the number of
+ *          correlations computed is:
+ *               (2 * maxshiftx + 1) * (2 * maxshifty + 1)
+ *          Consequently, if pix1 and pix2 are large, you should do this
+ *          in a coarse-to-fine sequence.  See the use of this function
+ *          in pixCompareWithTranslation().
+ * 
+ */ +l_ok +pixBestCorrelation(PIX *pix1, + PIX *pix2, + l_int32 area1, + l_int32 area2, + l_int32 etransx, + l_int32 etransy, + l_int32 maxshift, + l_int32 *tab8, + l_int32 *pdelx, + l_int32 *pdely, + l_float32 *pscore, + l_int32 debugflag) +{ +l_int32 shiftx, shifty, delx, dely; +l_int32 *tab; +l_float32 maxscore, score; +FPIX *fpix; +PIX *pix3, *pix4; + + PROCNAME("pixBestCorrelation"); + + if (pdelx) *pdelx = 0; + if (pdely) *pdely = 0; + if (pscore) *pscore = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); + if (!area1 || !area2) + return ERROR_INT("areas must be > 0", procName, 1); + + if (debugflag > 0) + fpix = fpixCreate(2 * maxshift + 1, 2 * maxshift + 1); + + if (!tab8) + tab = makePixelSumTab8(); + else + tab = tab8; + + /* Search over a set of {shiftx, shifty} for the max */ + maxscore = 0; + delx = etransx; + dely = etransy; + for (shifty = -maxshift; shifty <= maxshift; shifty++) { + for (shiftx = -maxshift; shiftx <= maxshift; shiftx++) { + pixCorrelationScoreShifted(pix1, pix2, area1, area2, + etransx + shiftx, + etransy + shifty, tab, &score); + if (debugflag > 0) { + fpixSetPixel(fpix, maxshift + shiftx, maxshift + shifty, + 1000.0 * score); +/* fprintf(stderr, "(sx, sy) = (%d, %d): score = %6.4f\n", + shiftx, shifty, score); */ + } + if (score > maxscore) { + maxscore = score; + delx = etransx + shiftx; + dely = etransy + shifty; + } + } + } + + if (debugflag > 0) { + lept_mkdir("lept/comp"); + char buf[128]; + pix3 = fpixDisplayMaxDynamicRange(fpix); + pix4 = pixExpandReplicate(pix3, 20); + snprintf(buf, sizeof(buf), "/tmp/lept/comp/correl_%d.png", + debugflag); + pixWrite(buf, pix4, IFF_PNG); + pixDestroy(&pix3); + pixDestroy(&pix4); + fpixDestroy(&fpix); + } + + if (pdelx) *pdelx = delx; + if (pdely) *pdely = dely; + if (pscore) *pscore = maxscore; + if (!tab8) LEPT_FREE(tab); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/config_auto.h b/3rdparty/hgOCR/leptonica/config_auto.h new file mode 100644 index 00000000..63f9492f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/config_auto.h @@ -0,0 +1,9 @@ +#define HAVE_LIBJPEG 0 +#define HAVE_LIBTIFF 0 +#define HAVE_LIBPNG 0 +#define HAVE_LIBZ 1 +#define HAVE_LIBGIF 0 +#define HAVE_LIBUNGIF 0 +#define HAVE_LIBWEBP 0 +#define HAVE_LIBJP2K 0 +#define LIBJP2K_HEADER \ No newline at end of file diff --git a/3rdparty/hgOCR/leptonica/conncomp.c b/3rdparty/hgOCR/leptonica/conncomp.c new file mode 100644 index 00000000..bd7aecba --- /dev/null +++ b/3rdparty/hgOCR/leptonica/conncomp.c @@ -0,0 +1,1242 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file conncomp.c + *
+ *
+ *    Connected component counting and extraction, using Heckbert's
+ *    stack-based filling algorithm.
+ *
+ *      4- and 8-connected components: counts, bounding boxes and images
+ *
+ *      Top-level calls:
+ *            BOXA     *pixConnComp()
+ *            BOXA     *pixConnCompPixa()
+ *            BOXA     *pixConnCompBB()
+ *            l_int32   pixCountConnComp()
+ *
+ *      Identify the next c.c. to be erased:
+ *            l_int32   nextOnPixelInRaster()
+ *    static  l_int32   nextOnPixelInRasterLow()
+ *
+ *      Erase the c.c., saving the b.b.:
+ *            BOX      *pixSeedfillBB()
+ *            BOX      *pixSeedfill4BB()
+ *            BOX      *pixSeedfill8BB()
+ *
+ *      Just erase the c.c.:
+ *            l_int32   pixSeedfill()
+ *            l_int32   pixSeedfill4()
+ *            l_int32   pixSeedfill8()
+ *
+ *      Static stack helper functions for single raster line seedfill:
+ *            static void    pushFillsegBB()
+ *            static void    pushFillseg()
+ *            static void    popFillseg()
+ *
+ *  The basic method in pixConnCompBB() is very simple.  We scan the
+ *  image in raster order, looking for the next ON pixel.  When it
+ *  is found, we erase it and every pixel of the 4- or 8-connected
+ *  component to which it belongs, using Heckbert's seedfill
+ *  algorithm.  As pixels are erased, we keep track of the
+ *  minimum rectangle that encloses all erased pixels; after
+ *  the connected component has been erased, we save its
+ *  bounding box in an array of boxes.  When all pixels in the
+ *  image have been erased, we have an array that describes every
+ *  4- or 8-connected component in terms of its bounding box.
+ *
+ *  pixConnCompPixa() is a slight variation on pixConnCompBB(),
+ *  where we additionally save an array of images (in a Pixa)
+ *  of each of the 4- or 8-connected components.  This is done trivially
+ *  by maintaining two temporary images.  We erase a component from one,
+ *  and use the bounding box to extract the pixels within the b.b.
+ *  from each of the two images.  An XOR between these subimages
+ *  gives the erased component.  Then we erase the component from the
+ *  second image using the XOR again, with the extracted component
+ *  placed on the second image at the location of the bounding box.
+ *  Rasterop does all the work.  At the end, we have an array
+ *  of the 4- or 8-connected components, as well as an array of the
+ *  bounding boxes that describe where they came from in the original image.
+ *
+ *  If you just want the number of connected components, pixCountConnComp()
+ *  is a bit faster than pixConnCompBB(), because it doesn't have to
+ *  keep track of the bounding rectangles for each c.c.
+ * 
+ */ + +#include "allheaders.h" + +/*! + * \brief The struct FillSeg is used by the Heckbert seedfill algorithm to + * hold information about image segments that are waiting to be + * investigated. We use two Stacks, one to hold the FillSegs in use, + * and an auxiliary Stack as a reservoir to hold FillSegs for re-use. + */ +struct FillSeg +{ + l_int32 xleft; /*!< left edge of run */ + l_int32 xright; /*!< right edge of run */ + l_int32 y; /*!< run y */ + l_int32 dy; /*!< parent segment direction: 1 above, -1 below) */ +}; +typedef struct FillSeg FILLSEG; + +static l_int32 nextOnPixelInRasterLow(l_uint32 *data, l_int32 w, l_int32 h, + l_int32 wpl, l_int32 xstart, + l_int32 ystart, l_int32 *px, l_int32 *py); + + /* Static accessors for FillSegs on a stack */ +static void pushFillsegBB(L_STACK *stack, l_int32 xleft, l_int32 xright, + l_int32 y, l_int32 dy, l_int32 ymax, + l_int32 *pminx, l_int32 *pmaxx, + l_int32 *pminy, l_int32 *pmaxy); +static void pushFillseg(L_STACK *stack, l_int32 xleft, l_int32 xright, + l_int32 y, l_int32 dy, l_int32 ymax); +static void popFillseg(L_STACK *stack, l_int32 *pxleft, l_int32 *pxright, + l_int32 *py, l_int32 *pdy); + + +#ifndef NO_CONSOLE_IO +#define DEBUG 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-----------------------------------------------------------------------* + * Bounding boxes of 4 Connected Components * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixConnComp() + * + * \param[in] pixs 1 bpp + * \param[out] ppixa [optional] pixa of each c.c. + * \param[in] connectivity 4 or 8 + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This is the top-level call for getting bounding boxes or
+ *          a pixa of the components, and it can be used instead
+ *          of either pixConnCompBB() or pixConnCompPixa(), rsp.
+ * 
+ */ +BOXA * +pixConnComp(PIX *pixs, + PIXA **ppixa, + l_int32 connectivity) +{ + + PROCNAME("pixConnComp"); + + if (ppixa) *ppixa = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + if (!ppixa) + return pixConnCompBB(pixs, connectivity); + else + return pixConnCompPixa(pixs, ppixa, connectivity); +} + + +/*! + * \brief pixConnCompPixa() + * + * \param[in] pixs 1 bpp + * \param[out] ppixa pixa of each c.c. + * \param[in] connectivity 4 or 8 + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds bounding boxes of 4- or 8-connected components
+ *          in a binary image, and saves images of each c.c
+ *          in a pixa array.
+ *      (2) It sets up 2 temporary pix, and for each c.c. that is
+ *          located in raster order, it erases the c.c. from one pix,
+ *          then uses the b.b. to extract the c.c. from the two pix using
+ *          an XOR, and finally erases the c.c. from the second pix.
+ *      (3) A clone of the returned boxa (where all boxes in the array
+ *          are clones) is inserted into the pixa.
+ *      (4) If the input is valid, this always returns a boxa and a pixa.
+ *          If pixs is empty, the boxa and pixa will be empty.
+ * 
+ */ +BOXA * +pixConnCompPixa(PIX *pixs, + PIXA **ppixa, + l_int32 connectivity) +{ +l_int32 h, iszero; +l_int32 x, y, xstart, ystart; +PIX *pix1, *pix2, *pix3, *pix4; +PIXA *pixa; +BOX *box; +BOXA *boxa; +L_STACK *stack, *auxstack; + + PROCNAME("pixConnCompPixa"); + + if (!ppixa) + return (BOXA *)ERROR_PTR("&pixa not defined", procName, NULL); + *ppixa = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + pix1 = pix2 = pix3 = pix4 = NULL; + stack = NULL; + pixa = pixaCreate(0); + boxa = NULL; + *ppixa = pixa; + pixZero(pixs, &iszero); + if (iszero) + return boxaCreate(1); /* return empty boxa and empty pixa */ + + pixSetPadBits(pixs, 0); + pix1 = pixCopy(NULL, pixs); + pix2 = pixCopy(NULL, pixs); + if (!pix1 || !pix2) { + L_ERROR("pix1 or pix2 not made\n", procName); + pixaDestroy(ppixa); + goto cleanup; + } + + h = pixGetHeight(pixs); + if ((stack = lstackCreate(h)) == NULL) { + L_ERROR("stack not made\n", procName); + pixaDestroy(ppixa); + goto cleanup; + } + auxstack = lstackCreate(0); + stack->auxstack = auxstack; + boxa = boxaCreate(0); + + xstart = 0; + ystart = 0; + while (1) { + if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) + break; + + if ((box = pixSeedfillBB(pix1, stack, x, y, connectivity)) == NULL) { + boxaDestroy(&boxa); + pixaDestroy(ppixa); + L_ERROR("box not made\n", procName); + goto cleanup; + } + boxaAddBox(boxa, box, L_INSERT); + + /* Save the c.c. and remove from pix2 as well */ + pix3 = pixClipRectangle(pix1, box, NULL); + pix4 = pixClipRectangle(pix2, box, NULL); + pixXor(pix3, pix3, pix4); + pixRasterop(pix2, box->x, box->y, box->w, box->h, PIX_SRC ^ PIX_DST, + pix3, 0, 0); + pixaAddPix(pixa, pix3, L_INSERT); + pixDestroy(&pix4); + + xstart = x; + ystart = y; + } + +#if DEBUG + pixCountPixels(pix1, &iszero, NULL); + fprintf(stderr, "Number of remaining pixels = %d\n", iszero); + lept_mkdir("lept/cc"); + pixWriteDebug("/tmp/lept/cc/remain.png", pix1, IFF_PNG); +#endif /* DEBUG */ + + /* Remove old boxa of pixa and replace with a copy */ + boxaDestroy(&pixa->boxa); + pixa->boxa = boxaCopy(boxa, L_COPY); + *ppixa = pixa; + + /* Cleanup, freeing the fillsegs on each stack */ +cleanup: + lstackDestroy(&stack, TRUE); + pixDestroy(&pix1); + pixDestroy(&pix2); + return boxa; +} + + +/*! + * \brief pixConnCompBB() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *     (1) Finds bounding boxes of 4- or 8-connected components
+ *         in a binary image.
+ *     (2) This works on a copy of the input pix.  The c.c. are located
+ *         in raster order and erased one at a time.  In the process,
+ *         the b.b. is computed and saved.
+ * 
+ */ +BOXA * +pixConnCompBB(PIX *pixs, + l_int32 connectivity) +{ +l_int32 h, iszero; +l_int32 x, y, xstart, ystart; +PIX *pix1; +BOX *box; +BOXA *boxa; +L_STACK *stack, *auxstack; + + PROCNAME("pixConnCompBB"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + boxa = NULL; + pix1 = NULL; + stack = NULL; + pixZero(pixs, &iszero); + if (iszero) + return boxaCreate(1); /* return empty boxa */ + + pixSetPadBits(pixs, 0); + if ((pix1 = pixCopy(NULL, pixs)) == NULL) + return (BOXA *)ERROR_PTR("pix1 not made", procName, NULL); + + h = pixGetHeight(pixs); + if ((stack = lstackCreate(h)) == NULL) { + L_ERROR("stack not made\n", procName); + goto cleanup; + } + auxstack = lstackCreate(0); + stack->auxstack = auxstack; + boxa = boxaCreate(0); + + xstart = 0; + ystart = 0; + while (1) { + if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) + break; + + if ((box = pixSeedfillBB(pix1, stack, x, y, connectivity)) == NULL) { + L_ERROR("box not made\n", procName); + boxaDestroy(&boxa); + goto cleanup; + } + boxaAddBox(boxa, box, L_INSERT); + + xstart = x; + ystart = y; + } + +#if DEBUG + pixCountPixels(pix1, &iszero, NULL); + fprintf(stderr, "Number of remaining pixels = %d\n", iszero); + lept_mkdir("lept/cc"); + pixWriteDebug("/tmp/lept/cc/remain.png", pix1, IFF_PNG); +#endif /* DEBUG */ + + /* Cleanup, freeing the fillsegs on each stack */ +cleanup: + lstackDestroy(&stack, TRUE); + pixDestroy(&pix1); + return boxa; +} + + +/*! + * \brief pixCountConnComp() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \param[out] pcount + * \return 0 if OK, 1 on error + * + * Notes: + * (1 This is the top-level call for getting the number of + * 4- or 8-connected components in a 1 bpp image. + * 2 It works on a copy of the input pix. The c.c. are located + * in raster order and erased one at a time. + */ +l_ok +pixCountConnComp(PIX *pixs, + l_int32 connectivity, + l_int32 *pcount) +{ +l_int32 h, iszero; +l_int32 x, y, xstart, ystart; +PIX *pix1; +L_STACK *stack, *auxstack; + + PROCNAME("pixCountConnComp"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; /* initialize the count to 0 */ + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not 4 or 8", procName, 1); + + stack = NULL; + pixZero(pixs, &iszero); + if (iszero) + return 0; + + pixSetPadBits(pixs, 0); + if ((pix1 = pixCopy(NULL, pixs)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + h = pixGetHeight(pixs); + if ((stack = lstackCreate(h)) == NULL) { + pixDestroy(&pix1); + return ERROR_INT("stack not made\n", procName, 1); + } + auxstack = lstackCreate(0); + stack->auxstack = auxstack; + + xstart = 0; + ystart = 0; + while (1) { + if (!nextOnPixelInRaster(pix1, xstart, ystart, &x, &y)) + break; + + pixSeedfill(pix1, stack, x, y, connectivity); + (*pcount)++; + xstart = x; + ystart = y; + } + + /* Cleanup, freeing the fillsegs on each stack */ + lstackDestroy(&stack, TRUE); + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief nextOnPixelInRaster() + * + * \param[in] pixs 1 bpp + * \param[in] xstart, ystart starting point for search + * \param[out] px, py coord value of next ON pixel + * \return 1 if a pixel is found; 0 otherwise or on error + */ +l_int32 +nextOnPixelInRaster(PIX *pixs, + l_int32 xstart, + l_int32 ystart, + l_int32 *px, + l_int32 *py) +{ +l_int32 w, h, d, wpl; +l_uint32 *data; + + PROCNAME("nextOnPixelInRaster"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 0); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return ERROR_INT("pixs not 1 bpp", procName, 0); + + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + return nextOnPixelInRasterLow(data, w, h, wpl, xstart, ystart, px, py); +} + + +/*! + * \brief nextOnPixelInRasterLow() + * + * \param[in] data pix data + * \param[in] w, h width and height + * \param[in] wpl words per line + * \param[in] xstart, ystart starting point for search + * \param[out] px, py coord value of next ON pixel + * \return 1 if a pixel is found; 0 otherwise or on error + */ +static l_int32 +nextOnPixelInRasterLow(l_uint32 *data, + l_int32 w, + l_int32 h, + l_int32 wpl, + l_int32 xstart, + l_int32 ystart, + l_int32 *px, + l_int32 *py) +{ +l_int32 i, x, y, xend, startword; +l_uint32 *line, *pword; + + /* Look at the first word */ + line = data + ystart * wpl; + pword = line + (xstart / 32); + if (*pword) { + xend = xstart - (xstart % 32) + 31; + for (x = xstart; x <= xend && x < w; x++) { + if (GET_DATA_BIT(line, x)) { + *px = x; + *py = ystart; + return 1; + } + } + } + + /* Continue with the rest of the line */ + startword = (xstart / 32) + 1; + x = 32 * startword; + for (pword = line + startword; x < w; pword++, x += 32) { + if (*pword) { + for (i = 0; i < 32 && x < w; i++, x++) { + if (GET_DATA_BIT(line, x)) { + *px = x; + *py = ystart; + return 1; + } + } + } + } + + /* Continue with following lines */ + for (y = ystart + 1; y < h; y++) { + line = data + y * wpl; + for (pword = line, x = 0; x < w; pword++, x += 32) { + if (*pword) { + for (i = 0; i < 32 && x < w; i++, x++) { + if (GET_DATA_BIT(line, x)) { + *px = x; + *py = y; + return 1; + } + } + } + } + } + + return 0; +} + + +/*! + * \brief pixSeedfillBB() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \param[in] connectivity 4 or 8 + * \return box or NULL on error + * + *
+ * Notes:
+ *      (1) This is the high-level interface to Paul Heckbert's
+ *          stack-based seedfill algorithm.
+ * 
+ */ +BOX * +pixSeedfillBB(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y, + l_int32 connectivity) +{ +BOX *box; + + PROCNAME("pixSeedfillBB"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!stack) + return (BOX *)ERROR_PTR("stack not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (BOX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + if (connectivity == 4) { + if ((box = pixSeedfill4BB(pixs, stack, x, y)) == NULL) + return (BOX *)ERROR_PTR("box not made", procName, NULL); + } else if (connectivity == 8) { + if ((box = pixSeedfill8BB(pixs, stack, x, y)) == NULL) + return (BOX *)ERROR_PTR("box not made", procName, NULL); + } else { + return (BOX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + } + + return box; +} + + +/*! + * \brief pixSeedfill4BB() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \return box or NULL on error. + * + *
+ * Notes:
+ *      (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm.
+ *      (2) This operates on the input 1 bpp pix to remove the fg seed
+ *          pixel, at (x,y), and all pixels that are 4-connected to it.
+ *          The seed pixel at (x,y) must initially be ON.
+ *      (3) Returns the bounding box of the erased 4-cc component.
+ *      (4) Reference: see Paul Heckbert's stack-based seed fill algorithm
+ *          in "Graphic Gems", ed. Andrew Glassner, Academic
+ *          Press, 1990.  The algorithm description is given
+ *          on pp. 275-277; working C code is on pp. 721-722.)
+ *          The code here follows Heckbert's exactly, except
+ *          we use function calls instead of macros for
+ *          pushing data on and popping data off the stack.
+ *          This makes sense to do because Heckbert's fixed-size
+ *          stack with macros is dangerous: images exist that
+ *          will overrun the stack and crash.   The stack utility
+ *          here grows dynamically as needed, and the fillseg
+ *          structures that are not in use are stored in another
+ *          stack for reuse.  It should be noted that the
+ *          overhead in the function calls (vs. macros) is negligible.
+ * 
+ */ +BOX * +pixSeedfill4BB(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, xstart, wpl, x1, x2, dy; +l_int32 xmax, ymax; +l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ +l_uint32 *data, *line; +BOX *box; + + PROCNAME("pixSeedfill4BB"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!stack) + return (BOX *)ERROR_PTR("stack not defined", procName, NULL); + if (!stack->auxstack) + stack->auxstack = lstackCreate(0); + + pixGetDimensions(pixs, &w, &h, NULL); + xmax = w - 1; + ymax = h - 1; + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + line = data + y * wpl; + + /* Check pix value of seed; must be within the image and ON */ + if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) + return NULL; + + /* Init stack to seed: + * Must first init b.b. values to prevent valgrind from complaining; + * then init b.b. boundaries correctly to seed. */ + minx = miny = 100000; + maxx = maxy = 0; + pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); + pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); + minx = maxx = x; + miny = maxy = y; + + while (lstackGetCount(stack) > 0) { + /* Pop segment off stack and fill a neighboring scan line */ + popFillseg(stack, &x1, &x2, &y, &dy); + line = data + y * wpl; + + /* A segment of scanline y - dy for x1 <= x <= x2 was + * previously filled. We now explore adjacent pixels + * in scan line y. There are three regions: to the + * left of x1 - 1, between x1 and x2, and to the right of x2. + * These regions are handled differently. Leaks are + * possible expansions beyond the previous segment and + * going back in the -dy direction. These can happen + * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments + * are plugged with a push in the -dy (opposite) direction. + * And any segments found anywhere are always extended + * in the +dy direction. */ + for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) + CLEAR_DATA_BIT(line,x); + if (x >= x1) /* pix at x1 was off and was not cleared */ + goto skip; + xstart = x + 1; + if (xstart < x1 - 1) /* leak on left? */ + pushFillsegBB(stack, xstart, x1 - 1, y, -dy, + ymax, &minx, &maxx, &miny, &maxy); + + x = x1 + 1; + do { + for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) + CLEAR_DATA_BIT(line, x); + pushFillsegBB(stack, xstart, x - 1, y, dy, + ymax, &minx, &maxx, &miny, &maxy); + if (x > x2 + 1) /* leak on right? */ + pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, + ymax, &minx, &maxx, &miny, &maxy); + skip: for (x++; x <= x2 && + x <= xmax && + (GET_DATA_BIT(line, x) == 0); x++) + ; + xstart = x; + } while (x <= x2 && x <= xmax); + } + + if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) + == NULL) + return (BOX *)ERROR_PTR("box not made", procName, NULL); + return box; +} + + +/*! + * \brief pixSeedfill8BB() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \return box or NULL on error. + * + *
+ * Notes:
+ *      (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm.
+ *      (2) This operates on the input 1 bpp pix to remove the fg seed
+ *          pixel, at (x,y), and all pixels that are 8-connected to it.
+ *          The seed pixel at (x,y) must initially be ON.
+ *      (3) Returns the bounding box of the erased 8-cc component.
+ *      (4) Reference: see Paul Heckbert's stack-based seed fill algorithm
+ *          in "Graphic Gems", ed. Andrew Glassner, Academic
+ *          Press, 1990.  The algorithm description is given
+ *          on pp. 275-277; working C code is on pp. 721-722.)
+ *          The code here follows Heckbert's closely, except
+ *          the leak checks are changed for 8 connectivity.
+ *          See comments on pixSeedfill4BB() for more details.
+ * 
+ */ +BOX * +pixSeedfill8BB(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, xstart, wpl, x1, x2, dy; +l_int32 xmax, ymax; +l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ +l_uint32 *data, *line; +BOX *box; + + PROCNAME("pixSeedfill8BB"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!stack) + return (BOX *)ERROR_PTR("stack not defined", procName, NULL); + if (!stack->auxstack) + stack->auxstack = lstackCreate(0); + + pixGetDimensions(pixs, &w, &h, NULL); + xmax = w - 1; + ymax = h - 1; + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + line = data + y * wpl; + + /* Check pix value of seed; must be ON */ + if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) + return NULL; + + /* Init stack to seed: + * Must first init b.b. values to prevent valgrind from complaining; + * then init b.b. boundaries correctly to seed. */ + minx = miny = 100000; + maxx = maxy = 0; + pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); + pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); + minx = maxx = x; + miny = maxy = y; + + while (lstackGetCount(stack) > 0) { + /* Pop segment off stack and fill a neighboring scan line */ + popFillseg(stack, &x1, &x2, &y, &dy); + line = data + y * wpl; + + /* A segment of scanline y - dy for x1 <= x <= x2 was + * previously filled. We now explore adjacent pixels + * in scan line y. There are three regions: to the + * left of x1, between x1 and x2, and to the right of x2. + * These regions are handled differently. Leaks are + * possible expansions beyond the previous segment and + * going back in the -dy direction. These can happen + * for x < x1 and for x > x2. Any "leak" segments + * are plugged with a push in the -dy (opposite) direction. + * And any segments found anywhere are always extended + * in the +dy direction. */ + for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) + CLEAR_DATA_BIT(line,x); + if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ + goto skip; + xstart = x + 1; + if (xstart < x1) /* leak on left? */ + pushFillsegBB(stack, xstart, x1 - 1, y, -dy, + ymax, &minx, &maxx, &miny, &maxy); + + x = x1; + do { + for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) + CLEAR_DATA_BIT(line, x); + pushFillsegBB(stack, xstart, x - 1, y, dy, + ymax, &minx, &maxx, &miny, &maxy); + if (x > x2) /* leak on right? */ + pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, + ymax, &minx, &maxx, &miny, &maxy); + skip: for (x++; x <= x2 + 1 && + x <= xmax && + (GET_DATA_BIT(line, x) == 0); x++) + ; + xstart = x; + } while (x <= x2 + 1 && x <= xmax); + } + + if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) + == NULL) + return (BOX *)ERROR_PTR("box not made", procName, NULL); + return box; +} + + +/*! + * \brief pixSeedfill() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \param[in] connectivity 4 or 8 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes the component from pixs with a fg pixel at (x,y).
+ *      (2) See pixSeedfill4() and pixSeedfill8() for details.
+ * 
+ */ +l_ok +pixSeedfill(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y, + l_int32 connectivity) +{ +l_int32 retval; + + PROCNAME("pixSeedfill"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!stack) + return ERROR_INT("stack not defined", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not 4 or 8", procName, 1); + + if (connectivity == 4) + retval = pixSeedfill4(pixs, stack, x, y); + else /* connectivity == 8 */ + retval = pixSeedfill8(pixs, stack, x, y); + + return retval; +} + + +/*! + * \brief pixSeedfill4() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm.
+ *      (2) This operates on the input 1 bpp pix to remove the fg seed
+ *          pixel, at (x,y), and all pixels that are 4-connected to it.
+ *          The seed pixel at (x,y) must initially be ON.
+ *      (3) Reference: see pixSeedFill4BB()
+ * 
+ */ +l_ok +pixSeedfill4(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, xstart, wpl, x1, x2, dy; +l_int32 xmax, ymax; +l_uint32 *data, *line; + + PROCNAME("pixSeedfill4"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!stack) + return ERROR_INT("stack not defined", procName, 1); + if (!stack->auxstack) + stack->auxstack = lstackCreate(0); + + pixGetDimensions(pixs, &w, &h, NULL); + xmax = w - 1; + ymax = h - 1; + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + line = data + y * wpl; + + /* Check pix value of seed; must be within the image and ON */ + if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) + return 0; + + /* Init stack to seed */ + pushFillseg(stack, x, x, y, 1, ymax); + pushFillseg(stack, x, x, y + 1, -1, ymax); + + while (lstackGetCount(stack) > 0) { + /* Pop segment off stack and fill a neighboring scan line */ + popFillseg(stack, &x1, &x2, &y, &dy); + line = data + y * wpl; + + /* A segment of scanline y - dy for x1 <= x <= x2 was + * previously filled. We now explore adjacent pixels + * in scan line y. There are three regions: to the + * left of x1 - 1, between x1 and x2, and to the right of x2. + * These regions are handled differently. Leaks are + * possible expansions beyond the previous segment and + * going back in the -dy direction. These can happen + * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments + * are plugged with a push in the -dy (opposite) direction. + * And any segments found anywhere are always extended + * in the +dy direction. */ + for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) + CLEAR_DATA_BIT(line,x); + if (x >= x1) /* pix at x1 was off and was not cleared */ + goto skip; + xstart = x + 1; + if (xstart < x1 - 1) /* leak on left? */ + pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); + + x = x1 + 1; + do { + for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) + CLEAR_DATA_BIT(line, x); + pushFillseg(stack, xstart, x - 1, y, dy, ymax); + if (x > x2 + 1) /* leak on right? */ + pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); + skip: for (x++; x <= x2 && + x <= xmax && + (GET_DATA_BIT(line, x) == 0); x++) + ; + xstart = x; + } while (x <= x2 && x <= xmax); + } + + return 0; +} + + +/*! + * \brief pixSeedfill8() + * + * \param[in] pixs 1 bpp + * \param[in] stack for holding fillsegs + * \param[in] x,y location of seed pixel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm.
+ *      (2) This operates on the input 1 bpp pix to remove the fg seed
+ *          pixel, at (x,y), and all pixels that are 8-connected to it.
+ *          The seed pixel at (x,y) must initially be ON.
+ *      (3) Reference: see pixSeedFill8BB()
+ * 
+ */ +l_ok +pixSeedfill8(PIX *pixs, + L_STACK *stack, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, xstart, wpl, x1, x2, dy; +l_int32 xmax, ymax; +l_uint32 *data, *line; + + PROCNAME("pixSeedfill8"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!stack) + return ERROR_INT("stack not defined", procName, 1); + if (!stack->auxstack) + stack->auxstack = lstackCreate(0); + + pixGetDimensions(pixs, &w, &h, NULL); + xmax = w - 1; + ymax = h - 1; + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + line = data + y * wpl; + + /* Check pix value of seed; must be ON */ + if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) + return 0; + + /* Init stack to seed */ + pushFillseg(stack, x, x, y, 1, ymax); + pushFillseg(stack, x, x, y + 1, -1, ymax); + + while (lstackGetCount(stack) > 0) { + /* Pop segment off stack and fill a neighboring scan line */ + popFillseg(stack, &x1, &x2, &y, &dy); + line = data + y * wpl; + + /* A segment of scanline y - dy for x1 <= x <= x2 was + * previously filled. We now explore adjacent pixels + * in scan line y. There are three regions: to the + * left of x1, between x1 and x2, and to the right of x2. + * These regions are handled differently. Leaks are + * possible expansions beyond the previous segment and + * going back in the -dy direction. These can happen + * for x < x1 and for x > x2. Any "leak" segments + * are plugged with a push in the -dy (opposite) direction. + * And any segments found anywhere are always extended + * in the +dy direction. */ + for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) + CLEAR_DATA_BIT(line,x); + if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ + goto skip; + xstart = x + 1; + if (xstart < x1) /* leak on left? */ + pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); + + x = x1; + do { + for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) + CLEAR_DATA_BIT(line, x); + pushFillseg(stack, xstart, x - 1, y, dy, ymax); + if (x > x2) /* leak on right? */ + pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); + skip: for (x++; x <= x2 + 1 && + x <= xmax && + (GET_DATA_BIT(line, x) == 0); x++) + ; + xstart = x; + } while (x <= x2 + 1 && x <= xmax); + } + + return 0; +} + + + +/*-----------------------------------------------------------------------* + * Static stack helper functions: push and pop fillsegs * + *-----------------------------------------------------------------------*/ +/*! + * \brief pushFillsegBB() + * + * \param[in] stack + * \param[in] xleft, xright + * \param[in] y + * \param[in] dy + * \param[in] ymax + * \param[out] pminx minimum x + * \param[out] pmaxx maximum x + * \param[out] pminy minimum y + * \param[out] pmaxy maximum y + * \return void + * + *
+ * Notes:
+ *      (1) This adds a line segment to the stack, and returns its size.
+ *      (2) The auxiliary stack is used as a storage area to recycle
+ *          fillsegs that are no longer in use.  We only calloc new
+ *          fillsegs if the auxiliary stack is empty.
+ * 
+ */ +static void +pushFillsegBB(L_STACK *stack, + l_int32 xleft, + l_int32 xright, + l_int32 y, + l_int32 dy, + l_int32 ymax, + l_int32 *pminx, + l_int32 *pmaxx, + l_int32 *pminy, + l_int32 *pmaxy) +{ +FILLSEG *fseg; +L_STACK *auxstack; + + PROCNAME("pushFillsegBB"); + + if (!stack) { + L_ERROR("stack not defined\n", procName); + return; + } + + *pminx = L_MIN(*pminx, xleft); + *pmaxx = L_MAX(*pmaxx, xright); + *pminy = L_MIN(*pminy, y); + *pmaxy = L_MAX(*pmaxy, y); + + if (y + dy >= 0 && y + dy <= ymax) { + if ((auxstack = stack->auxstack) == NULL) { + L_ERROR("auxstack not defined\n", procName); + return; + } + + /* Get a fillseg to use */ + if (lstackGetCount(auxstack) > 0) + fseg = (FILLSEG *)lstackRemove(auxstack); + else + fseg = (FILLSEG *)LEPT_CALLOC(1, sizeof(FILLSEG)); + fseg->xleft = xleft; + fseg->xright = xright; + fseg->y = y; + fseg->dy = dy; + lstackAdd(stack, fseg); + } + return; +} + + +/*! + * \brief pushFillseg() + * + * \param[in] stack + * \param[in] xleft, xright + * \param[in] y + * \param[in] dy + * \param[in] ymax + * \return void + * + *
+ * Notes:
+ *      (1) This adds a line segment to the stack.
+ *      (2) The auxiliary stack is used as a storage area to recycle
+ *          fillsegs that are no longer in use.  We only calloc new
+ *          fillsegs if the auxiliary stack is empty.
+ * 
+ */ +static void +pushFillseg(L_STACK *stack, + l_int32 xleft, + l_int32 xright, + l_int32 y, + l_int32 dy, + l_int32 ymax) +{ +FILLSEG *fseg; +L_STACK *auxstack; + + PROCNAME("pushFillseg"); + + if (!stack) { + L_ERROR("stack not defined\n", procName); + return; + } + + if (y + dy >= 0 && y + dy <= ymax) { + if ((auxstack = stack->auxstack) == NULL) { + L_ERROR("auxstack not defined\n", procName); + return; + } + + /* Get a fillseg to use */ + if (lstackGetCount(auxstack) > 0) + fseg = (FILLSEG *)lstackRemove(auxstack); + else + fseg = (FILLSEG *)LEPT_CALLOC(1, sizeof(FILLSEG)); + fseg->xleft = xleft; + fseg->xright = xright; + fseg->y = y; + fseg->dy = dy; + lstackAdd(stack, fseg); + } + return; +} + + +/*! + * \brief popFillseg() + * + * \param[in] stack + * \param[out] pxleft left x + * \param[out] pxright right x + * \param[out] py y coordinate + * \param[out] pdy delta y + * \return void + * + *
+ * Notes:
+ *      (1) This removes a line segment from the stack, and returns its size.
+ *      (2) The surplussed fillseg is placed on the auxiliary stack
+ *          for future use.
+ * 
+ */ +static void +popFillseg(L_STACK *stack, + l_int32 *pxleft, + l_int32 *pxright, + l_int32 *py, + l_int32 *pdy) +{ +FILLSEG *fseg; +L_STACK *auxstack; + + PROCNAME("popFillseg"); + + if (!stack) { + L_ERROR("stack not defined\n", procName); + return; + } + if ((auxstack = stack->auxstack) == NULL) { + L_ERROR("auxstack not defined\n", procName); + return; + } + + if ((fseg = (FILLSEG *)lstackRemove(stack)) == NULL) + return; + + *pxleft = fseg->xleft; + *pxright = fseg->xright; + *py = fseg->y + fseg->dy; /* this now points to the new line */ + *pdy = fseg->dy; + + /* Save it for re-use */ + lstackAdd(auxstack, fseg); + return; +} diff --git a/3rdparty/hgOCR/leptonica/convertfiles.c b/3rdparty/hgOCR/leptonica/convertfiles.c new file mode 100644 index 00000000..186ce870 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/convertfiles.c @@ -0,0 +1,146 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file convertfiles.c + *
+ *
+ *      Conversion to 1 bpp
+ *          l_int32    convertFilesTo1bpp()
+ *
+ *  These are utility functions that will perform depth conversion
+ *  on selected files, writing the results to a specified directory.
+ *  We start with conversion to 1 bpp.
+ * 
+ */ + +#include +#include "allheaders.h" + + +/*------------------------------------------------------------------* + * Conversion to 1 bpp * + *------------------------------------------------------------------*/ +/*! + * \brief convertFilesTo1bpp() + * + * \param[in] dirin + * \param[in] substr [optional] substring filter on filenames; + 8 can be NULL + * \param[in] upscaling 1, 2 or 4; only for input color or grayscale + * \param[in] thresh global threshold for binarization; 0 for default + * \param[in] firstpage + * \param[in] npages use 0 to do all from %firstpage to the end + * \param[in] dirout + * \param[in] outformat IFF_PNG, IFF_TIFF_G4 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Images are sorted lexicographically, and the names in the
+ *          output directory are retained except for the extension.
+ * 
+ */ +l_ok +convertFilesTo1bpp(const char *dirin, + const char *substr, + l_int32 upscaling, + l_int32 thresh, + l_int32 firstpage, + l_int32 npages, + const char *dirout, + l_int32 outformat) +{ +l_int32 i, nfiles; +char buf[512]; +char *fname, *tail, *basename; +PIX *pixs, *pixg1, *pixg2, *pixb; +SARRAY *safiles; + + PROCNAME("convertFilesTo1bpp"); + + if (!dirin) + return ERROR_INT("dirin", procName, 1); + if (!dirout) + return ERROR_INT("dirout", procName, 1); + if (upscaling != 1 && upscaling != 2 && upscaling != 4) + return ERROR_INT("invalid upscaling factor", procName, 1); + if (thresh <= 0) thresh = 180; + if (firstpage < 0) firstpage = 0; + if (npages < 0) npages = 0; + if (outformat != IFF_TIFF_G4) + outformat = IFF_PNG; + + safiles = getSortedPathnamesInDirectory(dirin, substr, firstpage, npages); + if (!safiles) + return ERROR_INT("safiles not made", procName, 1); + if ((nfiles = sarrayGetCount(safiles)) == 0) { + sarrayDestroy(&safiles); + return ERROR_INT("no matching files in the directory", procName, 1); + } + + for (i = 0; i < nfiles; i++) { + fname = sarrayGetString(safiles, i, L_NOCOPY); + if ((pixs = pixRead(fname)) == NULL) { + L_WARNING("Couldn't read file %s\n", procName, fname); + continue; + } + if (pixGetDepth(pixs) == 32) + pixg1 = pixConvertRGBToLuminance(pixs); + else + pixg1 = pixClone(pixs); + pixg2 = pixRemoveColormap(pixg1, REMOVE_CMAP_TO_GRAYSCALE); + if (pixGetDepth(pixg2) == 1) { + pixb = pixClone(pixg2); + } else { + if (upscaling == 1) + pixb = pixThresholdToBinary(pixg2, thresh); + else if (upscaling == 2) + pixb = pixScaleGray2xLIThresh(pixg2, thresh); + else /* upscaling == 4 */ + pixb = pixScaleGray4xLIThresh(pixg2, thresh); + } + pixDestroy(&pixs); + pixDestroy(&pixg1); + pixDestroy(&pixg2); + + splitPathAtDirectory(fname, NULL, &tail); + splitPathAtExtension(tail, &basename, NULL); + if (outformat == IFF_TIFF_G4) { + snprintf(buf, sizeof(buf), "%s/%s.tif", dirout, basename); + pixWrite(buf, pixb, IFF_TIFF_G4); + } else { + snprintf(buf, sizeof(buf), "%s/%s.png", dirout, basename); + pixWrite(buf, pixb, IFF_PNG); + } + pixDestroy(&pixb); + LEPT_FREE(tail); + LEPT_FREE(basename); + } + + sarrayDestroy(&safiles); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/convolve.c b/3rdparty/hgOCR/leptonica/convolve.c new file mode 100644 index 00000000..0abae1e2 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/convolve.c @@ -0,0 +1,2576 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file convolve.c + *
+ *
+ *      Top level grayscale or color block convolution
+ *          PIX          *pixBlockconv()
+ *
+ *      Grayscale block convolution
+ *          PIX          *pixBlockconvGray()
+ *          static void   blockconvLow()
+ *
+ *      Accumulator for 1, 8 and 32 bpp convolution
+ *          PIX          *pixBlockconvAccum()
+ *          static void   blockconvAccumLow()
+ *
+ *      Un-normalized grayscale block convolution
+ *          PIX          *pixBlockconvGrayUnnormalized()
+ *
+ *      Tiled grayscale or color block convolution
+ *          PIX          *pixBlockconvTiled()
+ *          PIX          *pixBlockconvGrayTile()
+ *
+ *      Convolution for mean, mean square, variance and rms deviation
+ *      in specified window
+ *          l_int32       pixWindowedStats()
+ *          PIX          *pixWindowedMean()
+ *          PIX          *pixWindowedMeanSquare()
+ *          l_int32       pixWindowedVariance()
+ *          DPIX         *pixMeanSquareAccum()
+ *
+ *      Binary block sum and rank filter
+ *          PIX          *pixBlockrank()
+ *          PIX          *pixBlocksum()
+ *          static void   blocksumLow()
+ *
+ *      Census transform
+ *          PIX          *pixCensusTransform()
+ *
+ *      Generic convolution (with Pix)
+ *          PIX          *pixConvolve()
+ *          PIX          *pixConvolveSep()
+ *          PIX          *pixConvolveRGB()
+ *          PIX          *pixConvolveRGBSep()
+ *
+ *      Generic convolution (with float arrays)
+ *          FPIX         *fpixConvolve()
+ *          FPIX         *fpixConvolveSep()
+ *
+ *      Convolution with bias (for non-negative output)
+ *          PIX          *pixConvolveWithBias()
+ *
+ *      Set parameter for convolution subsampling
+ *          void          l_setConvolveSampling()
+ *
+ *      Additive gaussian noise
+ *          PIX          *pixAddGaussNoise()
+ *          l_float32     gaussDistribSampling()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* These globals determine the subsampling factors for + * generic convolution of pix and fpix. Declare extern to use. + * To change the values, use l_setConvolveSampling(). */ +LEPT_DLL l_int32 ConvolveSamplingFactX = 1; +LEPT_DLL l_int32 ConvolveSamplingFactY = 1; + + /* Low-level static functions */ +static void blockconvLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, + l_uint32 *dataa, l_int32 wpla, l_int32 wc, + l_int32 hc); +static void blockconvAccumLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 d, + l_int32 wpls); +static void blocksumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpl, + l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc); + + +/*----------------------------------------------------------------------* + * Top-level grayscale or color block convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockconv() + * + * \param[in] pix 8 or 32 bpp; or 2, 4 or 8 bpp with colormap + * \param[in] wc, hc half width/height of convolution kernel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1)
+ *      (2) Returns a copy if both wc and hc are 0
+ *      (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ * 
+ */ +PIX * +pixBlockconv(PIX *pix, + l_int32 wc, + l_int32 hc) +{ +l_int32 w, h, d; +PIX *pixs, *pixd, *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; + + PROCNAME("pixBlockconv"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + pixGetDimensions(pix, &w, &h, &d); + if (w < 2 * wc + 1 || h < 2 * hc + 1) { + wc = L_MIN(wc, (w - 1) / 2); + hc = L_MIN(hc, (h - 1) / 2); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) /* no-op */ + return pixCopy(NULL, pix); + + /* Remove colormap if necessary */ + if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { + L_WARNING("pix has colormap; removing\n", procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixs); + } else { + pixs = pixClone(pix); + } + + if (d != 8 && d != 32) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); + } + + if (d == 8) { + pixd = pixBlockconvGray(pixs, NULL, wc, hc); + } else { /* d == 32 */ + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixrc = pixBlockconvGray(pixr, NULL, wc, hc); + pixDestroy(&pixr); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixgc = pixBlockconvGray(pixg, NULL, wc, hc); + pixDestroy(&pixg); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + pixbc = pixBlockconvGray(pixb, NULL, wc, hc); + pixDestroy(&pixb); + pixd = pixCreateRGBImage(pixrc, pixgc, pixbc); + pixDestroy(&pixrc); + pixDestroy(&pixgc); + pixDestroy(&pixbc); + } + + pixDestroy(&pixs); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Grayscale block convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockconvGray() + * + * \param[in] pixs 8 bpp + * \param[in] pixacc pix 32 bpp; can be null + * \param[in] wc, hc half width/height of convolution kernel + * \return pix 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If accum pix is null, make one and destroy it before
+ *          returning; otherwise, just use the input accum pix.
+ *      (2) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1).
+ *      (3) Returns a copy if both wc and hc are 0.
+ *      (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ * 
+ */ +PIX * +pixBlockconvGray(PIX *pixs, + PIX *pixacc, + l_int32 wc, + l_int32 hc) +{ +l_int32 w, h, d, wpl, wpla; +l_uint32 *datad, *dataa; +PIX *pixd, *pixt; + + PROCNAME("pixBlockconvGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + if (w < 2 * wc + 1 || h < 2 * hc + 1) { + wc = L_MIN(wc, (w - 1) / 2); + hc = L_MIN(hc, (h - 1) / 2); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) /* no-op */ + return pixCopy(NULL, pixs); + + if (pixacc) { + if (pixGetDepth(pixacc) == 32) { + pixt = pixClone(pixacc); + } else { + L_WARNING("pixacc not 32 bpp; making new one\n", procName); + if ((pixt = pixBlockconvAccum(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + } else { + if ((pixt = pixBlockconvAccum(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + + if ((pixd = pixCreateTemplate(pixs)) == NULL) { + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + wpl = pixGetWpl(pixs); + wpla = pixGetWpl(pixt); + datad = pixGetData(pixd); + dataa = pixGetData(pixt); + blockconvLow(datad, w, h, wpl, dataa, wpla, wc, hc); + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief blockconvLow() + * + * \param[in] data data of input image, to be convolved + * \param[in] w, h, wpl + * \param[in] dataa data of 32 bpp accumulator + * \param[in] wpla accumulator + * \param[in] wc convolution "half-width" + * \param[in] hc convolution "half-height" + * \return void + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1).
+ *      (2) The lack of symmetry between the handling of the
+ *          first (hc + 1) lines and the last (hc) lines,
+ *          and similarly with the columns, is due to fact that
+ *          for the pixel at (x,y), the accumulator values are
+ *          taken at (x + wc, y + hc), (x - wc - 1, y + hc),
+ *          (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1).
+ *      (3) We compute sums, normalized as if there were no reduced
+ *          area at the boundary.  This under-estimates the value
+ *          of the boundary pixels, so we multiply them by another
+ *          normalization factor that is greater than 1.
+ *      (4) This second normalization is done first for the first
+ *          hc + 1 lines; then for the last hc lines; and finally
+ *          for the first wc + 1 and last wc columns in the intermediate
+ *          lines.
+ *      (5) The caller should verify that wc < w and hc < h.
+ *          Under those conditions, illegal reads and writes can occur.
+ *      (6) Implementation note: to get the same results in the interior
+ *          between this function and pixConvolve(), it is necessary to
+ *          add 0.5 for roundoff in the main loop that runs over all pixels.
+ *          However, if we do that and have white (255) pixels near the
+ *          image boundary, some overflow occurs for pixels very close
+ *          to the boundary.  We can't fix this by subtracting from the
+ *          normalized values for the boundary pixels, because this results
+ *          in underflow if the boundary pixels are black (0).  Empirically,
+ *          adding 0.25 (instead of 0.5) before truncating in the main
+ *          loop will not cause overflow, but this gives some
+ *          off-by-1-level errors in interior pixel values.  So we add
+ *          0.5 for roundoff in the main loop, and for pixels within a
+ *          half filter width of the boundary, use a L_MIN of the
+ *          computed value and 255 to avoid overflow during normalization.
+ * 
+ */ +static void +blockconvLow(l_uint32 *data, + l_int32 w, + l_int32 h, + l_int32 wpl, + l_uint32 *dataa, + l_int32 wpla, + l_int32 wc, + l_int32 hc) +{ +l_int32 i, j, imax, imin, jmax, jmin; +l_int32 wn, hn, fwc, fhc, wmwc, hmhc; +l_float32 norm, normh, normw; +l_uint32 val; +l_uint32 *linemina, *linemaxa, *line; + + PROCNAME("blockconvLow"); + + wmwc = w - wc; + hmhc = h - hc; + if (wmwc <= 0 || hmhc <= 0) { + L_ERROR("wc >= w || hc >=h\n", procName); + return; + } + fwc = 2 * wc + 1; + fhc = 2 * hc + 1; + norm = 1.0 / ((l_float32)(fwc) * fhc); + + /*------------------------------------------------------------* + * Compute, using b.c. only to set limits on the accum image * + *------------------------------------------------------------*/ + for (i = 0; i < h; i++) { + imin = L_MAX(i - 1 - hc, 0); + imax = L_MIN(i + hc, h - 1); + line = data + wpl * i; + linemina = dataa + wpla * imin; + linemaxa = dataa + wpla * imax; + for (j = 0; j < w; j++) { + jmin = L_MAX(j - 1 - wc, 0); + jmax = L_MIN(j + wc, w - 1); + val = linemaxa[jmax] - linemaxa[jmin] + + linemina[jmin] - linemina[jmax]; + val = (l_uint8)(norm * val + 0.5); /* see comment above */ + SET_DATA_BYTE(line, j, val); + } + } + + /*------------------------------------------------------------* + * Fix normalization for boundary pixels * + *------------------------------------------------------------*/ + for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ + hn = hc + i; + normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ + line = data + wpl * i; + for (j = 0; j <= wc; j++) { + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh * normw, 255); + SET_DATA_BYTE(line, j, val); + } + for (j = wc + 1; j < wmwc; j++) { + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh, 255); + SET_DATA_BYTE(line, j, val); + } + for (j = wmwc; j < w; j++) { + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh * normw, 255); + SET_DATA_BYTE(line, j, val); + } + } + + for (i = hmhc; i < h; i++) { /* last hc lines */ + hn = hc + h - i; + normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ + line = data + wpl * i; + for (j = 0; j <= wc; j++) { + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh * normw, 255); + SET_DATA_BYTE(line, j, val); + } + for (j = wc + 1; j < wmwc; j++) { + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh, 255); + SET_DATA_BYTE(line, j, val); + } + for (j = wmwc; j < w; j++) { + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normh * normw, 255); + SET_DATA_BYTE(line, j, val); + } + } + + for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ + line = data + wpl * i; + for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normw, 255); + SET_DATA_BYTE(line, j, val); + } + for (j = wmwc; j < w; j++) { /* last wc columns */ + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(line, j); + val = (l_uint8)L_MIN(val * normw, 255); + SET_DATA_BYTE(line, j, val); + } + } + + return; +} + + +/*----------------------------------------------------------------------* + * Accumulator for 1, 8 and 32 bpp convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockconvAccum() + * + * \param[in] pixs 1, 8 or 32 bpp + * \return accum pix 32 bpp, or NULL on error. + * + *
+ * Notes:
+ *      (1) The general recursion relation is
+ *            a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
+ *          For the first line, this reduces to the special case
+ *            a(i,j) = v(i,j) + a(i, j-1)
+ *          For the first column, the special case is
+ *            a(i,j) = v(i,j) + a(i-1, j)
+ * 
+ */ +PIX * +pixBlockconvAccum(PIX *pixs) +{ +l_int32 w, h, d, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixBlockconvAccum"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); + if ((pixd = pixCreate(w, h, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + blockconvAccumLow(datad, w, h, wpld, datas, d, wpls); + + return pixd; +} + + +/* + * \brief blockconvAccumLow() + * + * \param[in] datad 32 bpp dest + * \param[in] w, h, wpld of 32 bpp dest + * \param[in] datas 1, 8 or 32 bpp src + * \param[in] d bpp of src + * \param[in] wpls of src + * \return void + * + *
+ * Notes:
+ *      (1) The general recursion relation is
+ *             a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
+ *          For the first line, this reduces to the special case
+ *             a(0,j) = v(0,j) + a(0, j-1), j > 0
+ *          For the first column, the special case is
+ *             a(i,0) = v(i,0) + a(i-1, 0), i > 0
+ * 
+ */ +static void +blockconvAccumLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 d, + l_int32 wpls) +{ +l_uint8 val; +l_int32 i, j; +l_uint32 val32; +l_uint32 *lines, *lined, *linedp; + + PROCNAME("blockconvAccumLow"); + + lines = datas; + lined = datad; + + if (d == 1) { + /* Do the first line */ + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(lines, j); + if (j == 0) + lined[0] = val; + else + lined[j] = lined[j - 1] + val; + } + + /* Do the other lines */ + for (i = 1; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; /* curr dest line */ + linedp = lined - wpld; /* prev dest line */ + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(lines, j); + if (j == 0) + lined[0] = val + linedp[0]; + else + lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; + } + } + } else if (d == 8) { + /* Do the first line */ + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + if (j == 0) + lined[0] = val; + else + lined[j] = lined[j - 1] + val; + } + + /* Do the other lines */ + for (i = 1; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; /* curr dest line */ + linedp = lined - wpld; /* prev dest line */ + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + if (j == 0) + lined[0] = val + linedp[0]; + else + lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; + } + } + } else if (d == 32) { + /* Do the first line */ + for (j = 0; j < w; j++) { + val32 = lines[j]; + if (j == 0) + lined[0] = val32; + else + lined[j] = lined[j - 1] + val32; + } + + /* Do the other lines */ + for (i = 1; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; /* curr dest line */ + linedp = lined - wpld; /* prev dest line */ + for (j = 0; j < w; j++) { + val32 = lines[j]; + if (j == 0) + lined[0] = val32 + linedp[0]; + else + lined[j] = val32 + lined[j - 1] + linedp[j] - linedp[j - 1]; + } + } + } else { + L_ERROR("depth not 1, 8 or 32 bpp\n", procName); + } + + return; +} + + +/*----------------------------------------------------------------------* + * Un-normalized grayscale block convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockconvGrayUnnormalized() + * + * \param[in] pixs 8 bpp + * \param[in] wc, hc half width/height of convolution kernel + * \return pix 32 bpp; containing the convolution without normalizing + * for the window size, or NULL on error + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1).
+ *      (2) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ *      (3) Returns a copy if both wc and hc are 0.
+ *      (3) Adds mirrored border to avoid treating the boundary pixels
+ *          specially.  Note that we add wc + 1 pixels to the left
+ *          and wc to the right.  The added width is 2 * wc + 1 pixels,
+ *          and the particular choice simplifies the indexing in the loop.
+ *          Likewise, add hc + 1 pixels to the top and hc to the bottom.
+ *      (4) To get the normalized result, divide by the area of the
+ *          convolution kernel: (2 * wc + 1) * (2 * hc + 1)
+ *          Specifically, do this:
+ *               pixc = pixBlockconvGrayUnnormalized(pixs, wc, hc);
+ *               fract = 1. / ((2 * wc + 1) * (2 * hc + 1));
+ *               pixMultConstantGray(pixc, fract);
+ *               pixd = pixGetRGBComponent(pixc, L_ALPHA_CHANNEL);
+ *      (5) Unlike pixBlockconvGray(), this always computes the accumulation
+ *          pix because its size is tied to wc and hc.
+ *      (6) Compare this implementation with pixBlockconvGray(), where
+ *          most of the code in blockconvLow() is special casing for
+ *          efficiently handling the boundary.  Here, the use of
+ *          mirrored borders and destination indexing makes the
+ *          implementation very simple.
+ * 
+ */ +PIX * +pixBlockconvGrayUnnormalized(PIX *pixs, + l_int32 wc, + l_int32 hc) +{ +l_int32 i, j, w, h, d, wpla, wpld, jmax; +l_uint32 *linemina, *linemaxa, *lined, *dataa, *datad; +PIX *pixsb, *pixacc, *pixd; + + PROCNAME("pixBlockconvGrayUnnormalized"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + if (w < 2 * wc + 1 || h < 2 * hc + 1) { + wc = L_MIN(wc, (w - 1) / 2); + hc = L_MIN(hc, (h - 1) / 2); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) /* no-op */ + return pixCopy(NULL, pixs); + + if ((pixsb = pixAddMirroredBorder(pixs, wc + 1, wc, hc + 1, hc)) == NULL) + return (PIX *)ERROR_PTR("pixsb not made", procName, NULL); + pixacc = pixBlockconvAccum(pixsb); + pixDestroy(&pixsb); + if (!pixacc) + return (PIX *)ERROR_PTR("pixacc not made", procName, NULL); + if ((pixd = pixCreate(w, h, 32)) == NULL) { + pixDestroy(&pixacc); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + wpla = pixGetWpl(pixacc); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + dataa = pixGetData(pixacc); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linemina = dataa + i * wpla; + linemaxa = dataa + (i + 2 * hc + 1) * wpla; + for (j = 0; j < w; j++) { + jmax = j + 2 * wc + 1; + lined[j] = linemaxa[jmax] - linemaxa[j] - + linemina[jmax] + linemina[j]; + } + } + + pixDestroy(&pixacc); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Tiled grayscale or color block convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockconvTiled() + * + * \param[in] pix 8 or 32 bpp; or 2, 4 or 8 bpp with colormap + * \param[in] wc, hc half width/height of convolution kernel + * \param[in] nx, ny subdivision into tiles + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1)
+ *      (2) Returns a copy if both wc and hc are 0
+ *      (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ *      (4) For nx == ny == 1, this defaults to pixBlockconv(), which
+ *          is typically about twice as fast, and gives nearly
+ *          identical results as pixBlockconvGrayTile().
+ *      (5) If the tiles are too small, nx and/or ny are reduced
+ *          a minimum amount so that the tiles are expanded to the
+ *          smallest workable size in the problematic direction(s).
+ *      (6) Why a tiled version?  Three reasons:
+ *          (a) Because the accumulator is a uint32, overflow can occur
+ *              for an image with more than 16M pixels.
+ *          (b) The accumulator array for 16M pixels is 64 MB; using
+ *              tiles reduces the size of this array.
+ *          (c) Each tile can be processed independently, in parallel,
+ *              on a multicore processor.
+ * 
+ */ +PIX * +pixBlockconvTiled(PIX *pix, + l_int32 wc, + l_int32 hc, + l_int32 nx, + l_int32 ny) +{ +l_int32 i, j, w, h, d, xrat, yrat; +PIX *pixs, *pixd, *pixc, *pixt; +PIX *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; +PIXTILING *pt; + + PROCNAME("pixBlockconvTiled"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + pixGetDimensions(pix, &w, &h, &d); + if (w < 2 * wc + 3 || h < 2 * hc + 3) { + wc = L_MAX(0, L_MIN(wc, (w - 3) / 2)); + hc = L_MAX(0, L_MIN(hc, (h - 3) / 2)); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) /* no-op */ + return pixCopy(NULL, pix); + if (nx <= 1 && ny <= 1) + return pixBlockconv(pix, wc, hc); + + /* Test to see if the tiles are too small. The required + * condition is that the tile dimensions must be at least + * (wc + 2) x (hc + 2). */ + xrat = w / nx; + yrat = h / ny; + if (xrat < wc + 2) { + nx = w / (wc + 2); + L_WARNING("tile width too small; nx reduced to %d\n", procName, nx); + } + if (yrat < hc + 2) { + ny = h / (hc + 2); + L_WARNING("tile height too small; ny reduced to %d\n", procName, ny); + } + + /* Remove colormap if necessary */ + if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { + L_WARNING("pix has colormap; removing\n", procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixs); + } else { + pixs = pixClone(pix); + } + + if (d != 8 && d != 32) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); + } + + /* Note that the overlaps in the width and height that + * are added to the tile are (wc + 2) and (hc + 2). + * These overlaps are removed by pixTilingPaintTile(). + * They are larger than the extent of the filter because + * although the filter is symmetric with respect to its origin, + * the implementation is asymmetric -- see the implementation in + * pixBlockconvGrayTile(). */ + if ((pixd = pixCreateTemplate(pixs)) == NULL) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pt = pixTilingCreate(pixs, nx, ny, 0, 0, wc + 2, hc + 2); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + pixt = pixTilingGetTile(pt, i, j); + + /* Convolve over the tile */ + if (d == 8) { + pixc = pixBlockconvGrayTile(pixt, NULL, wc, hc); + } else { /* d == 32 */ + pixr = pixGetRGBComponent(pixt, COLOR_RED); + pixrc = pixBlockconvGrayTile(pixr, NULL, wc, hc); + pixDestroy(&pixr); + pixg = pixGetRGBComponent(pixt, COLOR_GREEN); + pixgc = pixBlockconvGrayTile(pixg, NULL, wc, hc); + pixDestroy(&pixg); + pixb = pixGetRGBComponent(pixt, COLOR_BLUE); + pixbc = pixBlockconvGrayTile(pixb, NULL, wc, hc); + pixDestroy(&pixb); + pixc = pixCreateRGBImage(pixrc, pixgc, pixbc); + pixDestroy(&pixrc); + pixDestroy(&pixgc); + pixDestroy(&pixbc); + } + + pixTilingPaintTile(pixd, i, j, pixc, pt); + pixDestroy(&pixt); + pixDestroy(&pixc); + } + } + + pixDestroy(&pixs); + pixTilingDestroy(&pt); + return pixd; +} + + +/*! + * \brief pixBlockconvGrayTile() + * + * \param[in] pixs 8 bpp gray + * \param[in] pixacc 32 bpp accum pix + * \param[in] wc, hc half width/height of convolution kernel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1)
+ *      (2) Assumes that the input pixs is padded with (wc + 1) pixels on
+ *          left and right, and with (hc + 1) pixels on top and bottom.
+ *          The returned pix has these stripped off; they are only used
+ *          for computation.
+ *      (3) Returns a copy if both wc and hc are 0
+ *      (4) Require that w > 2 * wc + 1 and h > 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ * 
+ */ +PIX * +pixBlockconvGrayTile(PIX *pixs, + PIX *pixacc, + l_int32 wc, + l_int32 hc) +{ +l_int32 w, h, d, wd, hd, i, j, imin, imax, jmin, jmax, wplt, wpld; +l_float32 norm; +l_uint32 val; +l_uint32 *datat, *datad, *lined, *linemint, *linemaxt; +PIX *pixt, *pixd; + + PROCNAME("pixBlockconvGrayTile"); + + if (!pixs) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + if (w < 2 * wc + 3 || h < 2 * hc + 3) { + wc = L_MAX(0, L_MIN(wc, (w - 3) / 2)); + hc = L_MAX(0, L_MIN(hc, (h - 3) / 2)); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) + return pixCopy(NULL, pixs); + wd = w - 2 * wc; + hd = h - 2 * hc; + + if (pixacc) { + if (pixGetDepth(pixacc) == 32) { + pixt = pixClone(pixacc); + } else { + L_WARNING("pixacc not 32 bpp; making new one\n", procName); + if ((pixt = pixBlockconvAccum(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + } else { + if ((pixt = pixBlockconvAccum(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + + if ((pixd = pixCreateTemplate(pixs)) == NULL) { + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + norm = 1. / (l_float32)((2 * wc + 1) * (2 * hc + 1)); + + /* Do the convolution over the subregion of size (wd - 2, hd - 2), + * which exactly corresponds to the size of the subregion that + * will be extracted by pixTilingPaintTile(). Note that the + * region in which points are computed is not symmetric about + * the center of the images; instead the computation in + * the accumulator image is shifted up and to the left by 1, + * relative to the center, because the 4 accumulator sampling + * points are taken at the LL corner of the filter and at 3 other + * points that are shifted -wc and -hc to the left and above. */ + for (i = hc; i < hc + hd - 2; i++) { + imin = L_MAX(i - hc - 1, 0); + imax = L_MIN(i + hc, h - 1); + lined = datad + i * wpld; + linemint = datat + imin * wplt; + linemaxt = datat + imax * wplt; + for (j = wc; j < wc + wd - 2; j++) { + jmin = L_MAX(j - wc - 1, 0); + jmax = L_MIN(j + wc, w - 1); + val = linemaxt[jmax] - linemaxt[jmin] + + linemint[jmin] - linemint[jmax]; + val = (l_uint8)(norm * val + 0.5); + SET_DATA_BYTE(lined, j, val); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Convolution for mean, mean square, variance and rms deviation * + *----------------------------------------------------------------------*/ +/*! + * \brief pixWindowedStats() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] wc, hc half width/height of convolution kernel + * \param[in] hasborder use 1 if it already has (wc + 1 border pixels + * on left and right, and hc + 1 on top and bottom; + * use 0 to add kernel-dependent border) + * \param[out] ppixm [optional] 8 bpp mean value in window + * \param[out] ppixms [optional] 32 bpp mean square value in window + * \param[out] pfpixv [optional] float variance in window + * \param[out] pfpixrv [optional] float rms deviation from the mean + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a high-level convenience function for calculating
+ *          any or all of these derived images.
+ *      (2) If %hasborder = 0, a border is added and the result is
+ *          computed over all pixels in pixs.  Otherwise, no border is
+ *          added and the border pixels are removed from the output images.
+ *      (3) These statistical measures over the pixels in the
+ *          rectangular window are:
+ *            ~ average value: 

(pixm) + * ~ average squared value: (pixms) + * ~ variance: <(p -

)*(p -

)> = -

*

(pixv) + * ~ square-root of variance: (pixrv) + * where the brackets < .. > indicate that the average value is + * to be taken over the window. + * (4) Note that the variance is just the mean square difference from + * the mean value; and the square root of the variance is the + * root mean square difference from the mean, sometimes also + * called the 'standard deviation'. + * (5) The added border, along with the use of an accumulator array, + * allows computation without special treatment of pixels near + * the image boundary, and runs in a time that is independent + * of the size of the convolution kernel. + *

+ */ +l_ok +pixWindowedStats(PIX *pixs, + l_int32 wc, + l_int32 hc, + l_int32 hasborder, + PIX **ppixm, + PIX **ppixms, + FPIX **pfpixv, + FPIX **pfpixrv) +{ +PIX *pixb, *pixm, *pixms; + + PROCNAME("pixWindowedStats"); + + if (!ppixm && !ppixms && !pfpixv && !pfpixrv) + return ERROR_INT("no output requested", procName, 1); + if (ppixm) *ppixm = NULL; + if (ppixms) *ppixms = NULL; + if (pfpixv) *pfpixv = NULL; + if (pfpixrv) *pfpixrv = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (wc < 2 || hc < 2) + return ERROR_INT("wc and hc not >= 2", procName, 1); + + /* Add border if requested */ + if (!hasborder) + pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); + else + pixb = pixClone(pixs); + + if (!pfpixv && !pfpixrv) { + if (ppixm) *ppixm = pixWindowedMean(pixb, wc, hc, 1, 1); + if (ppixms) *ppixms = pixWindowedMeanSquare(pixb, wc, hc, 1); + pixDestroy(&pixb); + return 0; + } + + pixm = pixWindowedMean(pixb, wc, hc, 1, 1); + pixms = pixWindowedMeanSquare(pixb, wc, hc, 1); + pixWindowedVariance(pixm, pixms, pfpixv, pfpixrv); + if (ppixm) + *ppixm = pixm; + else + pixDestroy(&pixm); + if (ppixms) + *ppixms = pixms; + else + pixDestroy(&pixms); + pixDestroy(&pixb); + return 0; +} + + +/*! + * \brief pixWindowedMean() + * + * \param[in] pixs 8 or 32 bpp grayscale + * \param[in] wc, hc half width/height of convolution kernel + * \param[in] hasborder use 1 if it already has (wc + 1 border pixels + * on left and right, and hc + 1 on top and bottom; + * use 0 to add kernel-dependent border) + * \param[in] normflag 1 for normalization to get average in window; + * 0 for the sum in the window (un-normalized) + * \return pixd 8 or 32 bpp, average over kernel window + * + *
+ * Notes:
+ *      (1) The input and output depths are the same.
+ *      (2) A set of border pixels of width (wc + 1) on left and right,
+ *          and of height (hc + 1) on top and bottom, must be on the
+ *          pix before the accumulator is found.  The output pixd
+ *          (after convolution) has this border removed.
+ *          If %hasborder = 0, the required border is added.
+ *      (3) Typically, %normflag == 1.  However, if you want the sum
+ *          within the window, rather than a normalized convolution,
+ *          use %normflag == 0.
+ *      (4) This builds a block accumulator pix, uses it here, and
+ *          destroys it.
+ *      (5) The added border, along with the use of an accumulator array,
+ *          allows computation without special treatment of pixels near
+ *          the image boundary, and runs in a time that is independent
+ *          of the size of the convolution kernel.
+ * 
+ */ +PIX * +pixWindowedMean(PIX *pixs, + l_int32 wc, + l_int32 hc, + l_int32 hasborder, + l_int32 normflag) +{ +l_int32 i, j, w, h, d, wd, hd, wplc, wpld, wincr, hincr; +l_uint32 val; +l_uint32 *datac, *datad, *linec1, *linec2, *lined; +l_float32 norm; +PIX *pixb, *pixc, *pixd; + + PROCNAME("pixWindowedMean"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (wc < 2 || hc < 2) + return (PIX *)ERROR_PTR("wc and hc not >= 2", procName, NULL); + + pixb = pixc = pixd = NULL; + + /* Add border if requested */ + if (!hasborder) + pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); + else + pixb = pixClone(pixs); + + /* Make the accumulator pix from pixb */ + if ((pixc = pixBlockconvAccum(pixb)) == NULL) { + L_ERROR("pixc not made\n", procName); + goto cleanup; + } + wplc = pixGetWpl(pixc); + datac = pixGetData(pixc); + + /* The output has wc + 1 border pixels stripped from each side + * of pixb, and hc + 1 border pixels stripped from top and bottom. */ + pixGetDimensions(pixb, &w, &h, NULL); + wd = w - 2 * (wc + 1); + hd = h - 2 * (hc + 1); + if (wd < 2 || hd < 2) { + L_ERROR("w or h is too small for the kernel\n", procName); + goto cleanup; + } + if ((pixd = pixCreate(wd, hd, d)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup; + } + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + wincr = 2 * wc + 1; + hincr = 2 * hc + 1; + norm = 1.0; /* use this for sum-in-window */ + if (normflag) + norm = 1.0 / ((l_float32)(wincr) * hincr); + for (i = 0; i < hd; i++) { + linec1 = datac + i * wplc; + linec2 = datac + (i + hincr) * wplc; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + val = linec2[j + wincr] - linec2[j] - linec1[j + wincr] + linec1[j]; + if (d == 8) { + val = (l_uint8)(norm * val); + SET_DATA_BYTE(lined, j, val); + } else { /* d == 32 */ + val = (l_uint32)(norm * val); + lined[j] = val; + } + } + } + +cleanup: + pixDestroy(&pixb); + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixWindowedMeanSquare() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] wc, hc half width/height of convolution kernel + * \param[in] hasborder use 1 if it already has (wc + 1 border pixels + * on left and right, and hc + 1 on top and bottom; + * use 0 to add kernel-dependent border) + * \return pixd 32 bpp, average over rectangular window of + * width = 2 * wc + 1 and height = 2 * hc + 1 + * + *
+ * Notes:
+ *      (1) A set of border pixels of width (wc + 1) on left and right,
+ *          and of height (hc + 1) on top and bottom, must be on the
+ *          pix before the accumulator is found.  The output pixd
+ *          (after convolution) has this border removed.
+ *          If %hasborder = 0, the required border is added.
+ *      (2) The advantage is that we are unaffected by the boundary, and
+ *          it is not necessary to treat pixels within %wc and %hc of the
+ *          border differently.  This is because processing for pixd
+ *          only takes place for pixels in pixs for which the
+ *          kernel is entirely contained in pixs.
+ *      (3) Why do we have an added border of width (%wc + 1) and
+ *          height (%hc + 1), when we only need %wc and %hc pixels
+ *          to satisfy this condition?  Answer: the accumulators
+ *          are asymmetric, requiring an extra row and column of
+ *          pixels at top and left to work accurately.
+ *      (4) The added border, along with the use of an accumulator array,
+ *          allows computation without special treatment of pixels near
+ *          the image boundary, and runs in a time that is independent
+ *          of the size of the convolution kernel.
+ * 
+ */ +PIX * +pixWindowedMeanSquare(PIX *pixs, + l_int32 wc, + l_int32 hc, + l_int32 hasborder) +{ +l_int32 i, j, w, h, wd, hd, wpl, wpld, wincr, hincr; +l_uint32 ival; +l_uint32 *datad, *lined; +l_float64 norm; +l_float64 val; +l_float64 *data, *line1, *line2; +DPIX *dpix; +PIX *pixb, *pixd; + + PROCNAME("pixWindowedMeanSquare"); + + if (!pixs || (pixGetDepth(pixs) != 8)) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (wc < 2 || hc < 2) + return (PIX *)ERROR_PTR("wc and hc not >= 2", procName, NULL); + + pixd = NULL; + + /* Add border if requested */ + if (!hasborder) + pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); + else + pixb = pixClone(pixs); + + if ((dpix = pixMeanSquareAccum(pixb)) == NULL) { + L_ERROR("dpix not made\n", procName); + goto cleanup; + } + wpl = dpixGetWpl(dpix); + data = dpixGetData(dpix); + + /* The output has wc + 1 border pixels stripped from each side + * of pixb, and hc + 1 border pixels stripped from top and bottom. */ + pixGetDimensions(pixb, &w, &h, NULL); + wd = w - 2 * (wc + 1); + hd = h - 2 * (hc + 1); + if (wd < 2 || hd < 2) { + L_ERROR("w or h too small for kernel\n", procName); + goto cleanup; + } + if ((pixd = pixCreate(wd, hd, 32)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup; + } + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + wincr = 2 * wc + 1; + hincr = 2 * hc + 1; + norm = 1.0 / ((l_float32)(wincr) * hincr); + for (i = 0; i < hd; i++) { + line1 = data + i * wpl; + line2 = data + (i + hincr) * wpl; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + val = line2[j + wincr] - line2[j] - line1[j + wincr] + line1[j]; + ival = (l_uint32)(norm * val + 0.5); /* to round up */ + lined[j] = ival; + } + } + +cleanup: + dpixDestroy(&dpix); + pixDestroy(&pixb); + return pixd; +} + + +/*! + * \brief pixWindowedVariance() + * + * \param[in] pixm mean over window; 8 or 32 bpp grayscale + * \param[in] pixms mean square over window; 32 bpp + * \param[out] pfpixv [optional] float variance -- the ms deviation + * from the mean + * \param[out] pfpixrv [optional] float rms deviation from the mean + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The mean and mean square values are precomputed, using
+ *          pixWindowedMean() and pixWindowedMeanSquare().
+ *      (2) Either or both of the variance and square-root of variance
+ *          are returned as an fpix, where the variance is the
+ *          average over the window of the mean square difference of
+ *          the pixel value from the mean:
+ *                <(p - 

)*(p -

)> = -

*

+ * (3) To visualize the results: + * ~ for both, use fpixDisplayMaxDynamicRange(). + * ~ for rms deviation, simply convert the output fpix to pix, + *

+ */ +l_ok +pixWindowedVariance(PIX *pixm, + PIX *pixms, + FPIX **pfpixv, + FPIX **pfpixrv) +{ +l_int32 i, j, w, h, ws, hs, ds, wplm, wplms, wplv, wplrv, valm, valms; +l_float32 var; +l_uint32 *linem, *linems, *datam, *datams; +l_float32 *linev, *linerv, *datav, *datarv; +FPIX *fpixv, *fpixrv; /* variance and square root of variance */ + + PROCNAME("pixWindowedVariance"); + + if (!pfpixv && !pfpixrv) + return ERROR_INT("no output requested", procName, 1); + if (pfpixv) *pfpixv = NULL; + if (pfpixrv) *pfpixrv = NULL; + if (!pixm || pixGetDepth(pixm) != 8) + return ERROR_INT("pixm undefined or not 8 bpp", procName, 1); + if (!pixms || pixGetDepth(pixms) != 32) + return ERROR_INT("pixms undefined or not 32 bpp", procName, 1); + pixGetDimensions(pixm, &w, &h, NULL); + pixGetDimensions(pixms, &ws, &hs, &ds); + if (w != ws || h != hs) + return ERROR_INT("pixm and pixms sizes differ", procName, 1); + + if (pfpixv) { + fpixv = fpixCreate(w, h); + *pfpixv = fpixv; + wplv = fpixGetWpl(fpixv); + datav = fpixGetData(fpixv); + } + if (pfpixrv) { + fpixrv = fpixCreate(w, h); + *pfpixrv = fpixrv; + wplrv = fpixGetWpl(fpixrv); + datarv = fpixGetData(fpixrv); + } + + wplm = pixGetWpl(pixm); + wplms = pixGetWpl(pixms); + datam = pixGetData(pixm); + datams = pixGetData(pixms); + for (i = 0; i < h; i++) { + linem = datam + i * wplm; + linems = datams + i * wplms; + if (pfpixv) + linev = datav + i * wplv; + if (pfpixrv) + linerv = datarv + i * wplrv; + for (j = 0; j < w; j++) { + valm = GET_DATA_BYTE(linem, j); + if (ds == 8) + valms = GET_DATA_BYTE(linems, j); + else /* ds == 32 */ + valms = (l_int32)linems[j]; + var = (l_float32)valms - (l_float32)valm * valm; + if (pfpixv) + linev[j] = var; + if (pfpixrv) + linerv[j] = (l_float32)sqrt(var); + } + } + + return 0; +} + + +/*! + * \brief pixMeanSquareAccum() + * + * \param[in] pixs 8 bpp grayscale + * \return dpix 64 bit array, or NULL on error + * + *
+ * Notes:
+ *      (1) Similar to pixBlockconvAccum(), this computes the
+ *          sum of the squares of the pixel values in such a way
+ *          that the value at (i,j) is the sum of all squares in
+ *          the rectangle from the origin to (i,j).
+ *      (2) The general recursion relation (v are squared pixel values) is
+ *            a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1)
+ *          For the first line, this reduces to the special case
+ *            a(i,j) = v(i,j) + a(i, j-1)
+ *          For the first column, the special case is
+ *            a(i,j) = v(i,j) + a(i-1, j)
+ * 
+ */ +DPIX * +pixMeanSquareAccum(PIX *pixs) +{ +l_int32 i, j, w, h, wpl, wpls, val; +l_uint32 *datas, *lines; +l_float64 *data, *line, *linep; +DPIX *dpix; + + PROCNAME("pixMeanSquareAccum"); + + + if (!pixs || (pixGetDepth(pixs) != 8)) + return (DPIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if ((dpix = dpixCreate(w, h)) == NULL) + return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + data = dpixGetData(dpix); + wpl = dpixGetWpl(dpix); + + lines = datas; + line = data; + for (j = 0; j < w; j++) { /* first line */ + val = GET_DATA_BYTE(lines, j); + if (j == 0) + line[0] = (l_float64)(val) * val; + else + line[j] = line[j - 1] + (l_float64)(val) * val; + } + + /* Do the other lines */ + for (i = 1; i < h; i++) { + lines = datas + i * wpls; + line = data + i * wpl; /* current dest line */ + linep = line - wpl;; /* prev dest line */ + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + if (j == 0) + line[0] = linep[0] + (l_float64)(val) * val; + else + line[j] = line[j - 1] + linep[j] - linep[j - 1] + + (l_float64)(val) * val; + } + } + + return dpix; +} + + +/*----------------------------------------------------------------------* + * Binary block sum/rank * + *----------------------------------------------------------------------*/ +/*! + * \brief pixBlockrank() + * + * \param[in] pixs 1 bpp + * \param[in] pixacc pix [optional] 32 bpp + * \param[in] wc, hc half width/height of block sum/rank kernel + * \param[in] rank between 0.0 and 1.0; 0.5 is median filter + * \return pixd 1 bpp + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1)
+ *      (2) This returns a pixd where each pixel is a 1 if the
+ *          neighborhood (2 * wc + 1) x (2 * hc + 1)) pixels
+ *          contains the rank fraction of 1 pixels.  Otherwise,
+ *          the returned pixel is 0.  Note that the special case
+ *          of rank = 0.0 is always satisfied, so the returned
+ *          pixd has all pixels with value 1.
+ *      (3) If accum pix is null, make one, use it, and destroy it
+ *          before returning; otherwise, just use the input accum pix
+ *      (4) If both wc and hc are 0, returns a copy unless rank == 0.0,
+ *          in which case this returns an all-ones image.
+ *      (5) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ * 
+ */ +PIX * +pixBlockrank(PIX *pixs, + PIX *pixacc, + l_int32 wc, + l_int32 hc, + l_float32 rank) +{ +l_int32 w, h, d, thresh; +PIX *pixt, *pixd; + + PROCNAME("pixBlockrank"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); + + if (rank == 0.0) { + pixd = pixCreateTemplate(pixs); + pixSetAll(pixd); + return pixd; + } + + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + if (w < 2 * wc + 1 || h < 2 * hc + 1) { + wc = L_MIN(wc, (w - 1) / 2); + hc = L_MIN(hc, (h - 1) / 2); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) + return pixCopy(NULL, pixs); + + if ((pixt = pixBlocksum(pixs, pixacc, wc, hc)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* 1 bpp block rank filter output. + * Must invert because threshold gives 1 for values < thresh, + * but we need a 1 if the value is >= thresh. */ + thresh = (l_int32)(255. * rank); + pixd = pixThresholdToBinary(pixt, thresh); + pixInvert(pixd, pixd); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixBlocksum() + * + * \param[in] pixs 1 bpp + * \param[in] pixacc pix [optional] 32 bpp + * \param[in] wc, hc half width/height of block sum/rank kernel + * \return pixd 8 bpp + * + *
+ * Notes:
+ *      (1) If accum pix is null, make one and destroy it before
+ *          returning; otherwise, just use the input accum pix
+ *      (2) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1)
+ *      (3) Use of wc = hc = 1, followed by pixInvert() on the
+ *          8 bpp result, gives a nice anti-aliased, and somewhat
+ *          darkened, result on text.
+ *      (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1,
+ *          where (w,h) are the dimensions of pixs.
+ *      (5) Returns in each dest pixel the sum of all src pixels
+ *          that are within a block of size of the kernel, centered
+ *          on the dest pixel.  This sum is the number of src ON
+ *          pixels in the block at each location, normalized to 255
+ *          for a block containing all ON pixels.  For pixels near
+ *          the boundary, where the block is not entirely contained
+ *          within the image, we then multiply by a second normalization
+ *          factor that is greater than one, so that all results
+ *          are normalized by the number of participating pixels
+ *          within the block.
+ * 
+ */ +PIX * +pixBlocksum(PIX *pixs, + PIX *pixacc, + l_int32 wc, + l_int32 hc) +{ +l_int32 w, h, d, wplt, wpld; +l_uint32 *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixBlocksum"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (wc < 0) wc = 0; + if (hc < 0) hc = 0; + if (w < 2 * wc + 1 || h < 2 * hc + 1) { + wc = L_MIN(wc, (w - 1) / 2); + hc = L_MIN(hc, (h - 1) / 2); + L_WARNING("kernel too large; reducing!\n", procName); + L_INFO("wc = %d, hc = %d\n", procName, wc, hc); + } + if (wc == 0 && hc == 0) + return pixCopy(NULL, pixs); + + if (pixacc) { + if (pixGetDepth(pixacc) != 32) + return (PIX *)ERROR_PTR("pixacc not 32 bpp", procName, NULL); + pixt = pixClone(pixacc); + } else { + if ((pixt = pixBlockconvAccum(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + + /* 8 bpp block sum output */ + if ((pixd = pixCreate(w, h, 8)) == NULL) { + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + + wpld = pixGetWpl(pixd); + wplt = pixGetWpl(pixt); + datad = pixGetData(pixd); + datat = pixGetData(pixt); + blocksumLow(datad, w, h, wpld, datat, wplt, wc, hc); + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief blocksumLow() + * + * \param[in] datad of 8 bpp dest + * \param[in] w, h, wpl of 8 bpp dest + * \param[in] dataa of 32 bpp accum + * \param[in] wpla of 32 bpp accum + * \param[in] wc, hc convolution "half-width" and "half-height" + * \return void + * + *
+ * Notes:
+ *      (1) The full width and height of the convolution kernel
+ *          are (2 * wc + 1) and (2 * hc + 1).
+ *      (2) The lack of symmetry between the handling of the
+ *          first (hc + 1) lines and the last (hc) lines,
+ *          and similarly with the columns, is due to fact that
+ *          for the pixel at (x,y), the accumulator values are
+ *          taken at (x + wc, y + hc), (x - wc - 1, y + hc),
+ *          (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1).
+ *      (3) Compute sums of ON pixels within the block filter size,
+ *          normalized between 0 and 255, as if there were no reduced
+ *          area at the boundary.  This under-estimates the value
+ *          of the boundary pixels, so we multiply them by another
+ *          normalization factor that is greater than 1.
+ *      (4) This second normalization is done first for the first
+ *          hc + 1 lines; then for the last hc lines; and finally
+ *          for the first wc + 1 and last wc columns in the intermediate
+ *          lines.
+ *      (5) Required constraints are: wc < w and hc < h.
+ * 
+ */ +static void +blocksumLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpl, + l_uint32 *dataa, + l_int32 wpla, + l_int32 wc, + l_int32 hc) +{ +l_int32 i, j, imax, imin, jmax, jmin; +l_int32 wn, hn, fwc, fhc, wmwc, hmhc; +l_float32 norm, normh, normw; +l_uint32 val; +l_uint32 *linemina, *linemaxa, *lined; + + PROCNAME("blocksumLow"); + + wmwc = w - wc; + hmhc = h - hc; + if (wmwc <= 0 || hmhc <= 0) { + L_ERROR("wc >= w || hc >=h\n", procName); + return; + } + fwc = 2 * wc + 1; + fhc = 2 * hc + 1; + norm = 255. / ((l_float32)(fwc) * fhc); + + /*------------------------------------------------------------* + * Compute, using b.c. only to set limits on the accum image * + *------------------------------------------------------------*/ + for (i = 0; i < h; i++) { + imin = L_MAX(i - 1 - hc, 0); + imax = L_MIN(i + hc, h - 1); + lined = datad + wpl * i; + linemina = dataa + wpla * imin; + linemaxa = dataa + wpla * imax; + for (j = 0; j < w; j++) { + jmin = L_MAX(j - 1 - wc, 0); + jmax = L_MIN(j + wc, w - 1); + val = linemaxa[jmax] - linemaxa[jmin] + - linemina[jmax] + linemina[jmin]; + val = (l_uint8)(norm * val); + SET_DATA_BYTE(lined, j, val); + } + } + + /*------------------------------------------------------------* + * Fix normalization for boundary pixels * + *------------------------------------------------------------*/ + for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ + hn = hc + i; + normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ + lined = datad + wpl * i; + for (j = 0; j <= wc; j++) { + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh * normw); + SET_DATA_BYTE(lined, j, val); + } + for (j = wc + 1; j < wmwc; j++) { + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh); + SET_DATA_BYTE(lined, j, val); + } + for (j = wmwc; j < w; j++) { + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh * normw); + SET_DATA_BYTE(lined, j, val); + } + } + + for (i = hmhc; i < h; i++) { /* last hc lines */ + hn = hc + h - i; + normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ + lined = datad + wpl * i; + for (j = 0; j <= wc; j++) { + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh * normw); + SET_DATA_BYTE(lined, j, val); + } + for (j = wc + 1; j < wmwc; j++) { + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh); + SET_DATA_BYTE(lined, j, val); + } + for (j = wmwc; j < w; j++) { + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normh * normw); + SET_DATA_BYTE(lined, j, val); + } + } + + for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ + lined = datad + wpl * i; + for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ + wn = wc + j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normw); + SET_DATA_BYTE(lined, j, val); + } + for (j = wmwc; j < w; j++) { /* last wc columns */ + wn = wc + w - j; + normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ + val = GET_DATA_BYTE(lined, j); + val = (l_uint8)(val * normw); + SET_DATA_BYTE(lined, j, val); + } + } + + return; +} + + +/*----------------------------------------------------------------------* + * Census transform * + *----------------------------------------------------------------------*/ +/*! + * \brief pixCensusTransform() + * + * \param[in] pixs 8 bpp + * \param[in] halfsize of square over which neighbors are averaged + * \param[in] pixacc [optional] 32 bpp pix + * \return pixd 1 bpp + * + *
+ * Notes:
+ *      (1) The Census transform was invented by Ramin Zabih and John Woodfill
+ *          ("Non-parametric local transforms for computing visual
+ *          correspondence", Third European Conference on Computer Vision,
+ *          Stockholm, Sweden, May 1994); see publications at
+ *             http://www.cs.cornell.edu/~rdz/index.htm
+ *          This compares each pixel against the average of its neighbors,
+ *          in a square of odd dimension centered on the pixel.
+ *          If the pixel is greater than the average of its neighbors,
+ *          the output pixel value is 1; otherwise it is 0.
+ *      (2) This can be used as an encoding for an image that is
+ *          fairly robust against slow illumination changes, with
+ *          applications in image comparison and mosaicing.
+ *      (3) The size of the convolution kernel is (2 * halfsize + 1)
+ *          on a side.  The halfsize parameter must be >= 1.
+ *      (4) If accum pix is null, make one, use it, and destroy it
+ *          before returning; otherwise, just use the input accum pix
+ * 
+ */ +PIX * +pixCensusTransform(PIX *pixs, + l_int32 halfsize, + PIX *pixacc) +{ +l_int32 i, j, w, h, wpls, wplv, wpld; +l_int32 vals, valv; +l_uint32 *datas, *datav, *datad, *lines, *linev, *lined; +PIX *pixav, *pixd; + + PROCNAME("pixCensusTransform"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (halfsize < 1) + return (PIX *)ERROR_PTR("halfsize must be >= 1", procName, NULL); + + /* Get the average of each pixel with its neighbors */ + if ((pixav = pixBlockconvGray(pixs, pixacc, halfsize, halfsize)) + == NULL) + return (PIX *)ERROR_PTR("pixav not made", procName, NULL); + + /* Subtract the pixel from the average, and then compare + * the pixel value with the remaining average */ + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 1)) == NULL) { + pixDestroy(&pixav); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + datas = pixGetData(pixs); + datav = pixGetData(pixav); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wplv = pixGetWpl(pixav); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linev = datav + i * wplv; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + valv = GET_DATA_BYTE(linev, j); + if (vals > valv) + SET_DATA_BIT(lined, j); + } + } + + pixDestroy(&pixav); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Generic convolution * + *----------------------------------------------------------------------*/ +/*! + * \brief pixConvolve() + * + * \param[in] pixs 8, 16, 32 bpp; no colormap + * \param[in] kel kernel + * \param[in] outdepth of pixd: 8, 16 or 32 + * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise + * \return pixd 8, 16 or 32 bpp + * + *
+ * Notes:
+ *      (1) This gives a convolution with an arbitrary kernel.
+ *      (2) The input pixs must have only one sample/pixel.
+ *          To do a convolution on an RGB image, use pixConvolveRGB().
+ *      (3) The parameter %outdepth determines the depth of the result.
+ *          If the kernel is normalized to unit sum, the output values
+ *          can never exceed 255, so an output depth of 8 bpp is sufficient.
+ *          If the kernel is not normalized, it may be necessary to use
+ *          16 or 32 bpp output to avoid overflow.
+ *      (4) If normflag == 1, the result is normalized by scaling all
+ *          kernel values for a unit sum.  If the sum of kernel values
+ *          is very close to zero, the kernel can not be normalized and
+ *          the convolution will not be performed.  A warning is issued.
+ *      (5) The kernel values can be positive or negative, but the
+ *          result for the convolution can only be stored as a positive
+ *          number.  Consequently, if it goes negative, the choices are
+ *          to clip to 0 or take the absolute value.  We're choosing
+ *          to take the absolute value.  (Another possibility would be
+ *          to output a second unsigned image for the negative values.)
+ *          If you want to get a clipped result, or to keep the negative
+ *          values in the result, use fpixConvolve(), with the
+ *          converters in fpix2.c between pix and fpix.
+ *      (6) This uses a mirrored border to avoid special casing on
+ *          the boundaries.
+ *      (7) To get a subsampled output, call l_setConvolveSampling().
+ *          The time to make a subsampled output is reduced by the
+ *          product of the sampling factors.
+ *      (8) The function is slow, running at about 12 machine cycles for
+ *          each pixel-op in the convolution.  For example, with a 3 GHz
+ *          cpu, a 1 Mpixel grayscale image, and a kernel with
+ *          (sx * sy) = 25 elements, the convolution takes about 100 msec.
+ * 
+ */ +PIX * +pixConvolve(PIX *pixs, + L_KERNEL *kel, + l_int32 outdepth, + l_int32 normflag) +{ +l_int32 i, j, id, jd, k, m, w, h, d, wd, hd, sx, sy, cx, cy, wplt, wpld; +l_int32 val; +l_uint32 *datat, *datad, *linet, *lined; +l_float32 sum; +L_KERNEL *keli, *keln; +PIX *pixt, *pixd; + + PROCNAME("pixConvolve"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", procName, NULL); + if (!kel) + return (PIX *)ERROR_PTR("kel not defined", procName, NULL); + + pixd = NULL; + + keli = kernelInvert(kel); + kernelGetParameters(keli, &sy, &sx, &cy, &cx); + if (normflag) + keln = kernelNormalize(keli, 1.0); + else + keln = kernelCopy(keli); + + if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) { + L_ERROR("pixt not made\n", procName); + goto cleanup; + } + + wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; + hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; + pixd = pixCreate(wd, hd, outdepth); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { + lined = datad + id * wpld; + for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { + sum = 0.0; + for (k = 0; k < sy; k++) { + linet = datat + (i + k) * wplt; + if (d == 8) { + for (m = 0; m < sx; m++) { + val = GET_DATA_BYTE(linet, j + m); + sum += val * keln->data[k][m]; + } + } else if (d == 16) { + for (m = 0; m < sx; m++) { + val = GET_DATA_TWO_BYTES(linet, j + m); + sum += val * keln->data[k][m]; + } + } else { /* d == 32 */ + for (m = 0; m < sx; m++) { + val = *(linet + j + m); + sum += val * keln->data[k][m]; + } + } + } + if (sum < 0.0) sum = -sum; /* make it non-negative */ + if (outdepth == 8) + SET_DATA_BYTE(lined, jd, (l_int32)(sum + 0.5)); + else if (outdepth == 16) + SET_DATA_TWO_BYTES(lined, jd, (l_int32)(sum + 0.5)); + else /* outdepth == 32 */ + *(lined + jd) = (l_uint32)(sum + 0.5); + } + } + +cleanup: + kernelDestroy(&keli); + kernelDestroy(&keln); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixConvolveSep() + * + * \param[in] pixs 8, 16, 32 bpp; no colormap + * \param[in] kelx x-dependent kernel + * \param[in] kely y-dependent kernel + * \param[in] outdepth of pixd: 8, 16 or 32 + * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise + * \return pixd 8, 16 or 32 bpp + * + *
+ * Notes:
+ *      (1) This does a convolution with a separable kernel that is
+ *          is a sequence of convolutions in x and y.  The two
+ *          one-dimensional kernel components must be input separately;
+ *          the full kernel is the product of these components.
+ *          The support for the full kernel is thus a rectangular region.
+ *      (2) The input pixs must have only one sample/pixel.
+ *          To do a convolution on an RGB image, use pixConvolveSepRGB().
+ *      (3) The parameter %outdepth determines the depth of the result.
+ *          If the kernel is normalized to unit sum, the output values
+ *          can never exceed 255, so an output depth of 8 bpp is sufficient.
+ *          If the kernel is not normalized, it may be necessary to use
+ *          16 or 32 bpp output to avoid overflow.
+ *      (2) The %normflag parameter is used as in pixConvolve().
+ *      (4) The kernel values can be positive or negative, but the
+ *          result for the convolution can only be stored as a positive
+ *          number.  Consequently, if it goes negative, the choices are
+ *          to clip to 0 or take the absolute value.  We're choosing
+ *          the former for now.  Another possibility would be to output
+ *          a second unsigned image for the negative values.
+ *      (5) Warning: if you use l_setConvolveSampling() to get a
+ *          subsampled output, and the sampling factor is larger than
+ *          the kernel half-width, it is faster to use the non-separable
+ *          version pixConvolve().  This is because the first convolution
+ *          here must be done on every raster line, regardless of the
+ *          vertical sampling factor.  If the sampling factor is smaller
+ *          than kernel half-width, it's faster to use the separable
+ *          convolution.
+ *      (6) This uses mirrored borders to avoid special casing on
+ *          the boundaries.
+ * 
+ */ +PIX * +pixConvolveSep(PIX *pixs, + L_KERNEL *kelx, + L_KERNEL *kely, + l_int32 outdepth, + l_int32 normflag) +{ +l_int32 d, xfact, yfact; +L_KERNEL *kelxn, *kelyn; +PIX *pixt, *pixd; + + PROCNAME("pixConvolveSep"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", procName, NULL); + if (!kelx) + return (PIX *)ERROR_PTR("kelx not defined", procName, NULL); + if (!kely) + return (PIX *)ERROR_PTR("kely not defined", procName, NULL); + + xfact = ConvolveSamplingFactX; + yfact = ConvolveSamplingFactY; + if (normflag) { + kelxn = kernelNormalize(kelx, 1000.0); + kelyn = kernelNormalize(kely, 0.001); + l_setConvolveSampling(xfact, 1); + pixt = pixConvolve(pixs, kelxn, 32, 0); + l_setConvolveSampling(1, yfact); + pixd = pixConvolve(pixt, kelyn, outdepth, 0); + l_setConvolveSampling(xfact, yfact); /* restore */ + kernelDestroy(&kelxn); + kernelDestroy(&kelyn); + } else { /* don't normalize */ + l_setConvolveSampling(xfact, 1); + pixt = pixConvolve(pixs, kelx, 32, 0); + l_setConvolveSampling(1, yfact); + pixd = pixConvolve(pixt, kely, outdepth, 0); + l_setConvolveSampling(xfact, yfact); + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixConvolveRGB() + * + * \param[in] pixs 32 bpp rgb + * \param[in] kel kernel + * \return pixd 32 bpp rgb + * + *
+ * Notes:
+ *      (1) This gives a convolution on an RGB image using an
+ *          arbitrary kernel (which we normalize to keep each
+ *          component within the range [0 ... 255].
+ *      (2) The input pixs must be RGB.
+ *      (3) The kernel values can be positive or negative, but the
+ *          result for the convolution can only be stored as a positive
+ *          number.  Consequently, if it goes negative, we clip the
+ *          result to 0.
+ *      (4) To get a subsampled output, call l_setConvolveSampling().
+ *          The time to make a subsampled output is reduced by the
+ *          product of the sampling factors.
+ *      (5) This uses a mirrored border to avoid special casing on
+ *          the boundaries.
+ * 
+ */ +PIX * +pixConvolveRGB(PIX *pixs, + L_KERNEL *kel) +{ +PIX *pixt, *pixr, *pixg, *pixb, *pixd; + + PROCNAME("pixConvolveRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, NULL); + if (!kel) + return (PIX *)ERROR_PTR("kel not defined", procName, NULL); + + pixt = pixGetRGBComponent(pixs, COLOR_RED); + pixr = pixConvolve(pixt, kel, 8, 1); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + pixg = pixConvolve(pixt, kel, 8, 1); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + pixb = pixConvolve(pixt, kel, 8, 1); + pixDestroy(&pixt); + pixd = pixCreateRGBImage(pixr, pixg, pixb); + + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; +} + + +/*! + * \brief pixConvolveRGBSep() + * + * \param[in] pixs 32 bpp rgb + * \param[in] kelx x-dependent kernel + * \param[in] kely y-dependent kernel + * \return pixd 32 bpp rgb + * + *
+ * Notes:
+ *      (1) This does a convolution on an RGB image using a separable
+ *          kernel that is a sequence of convolutions in x and y.  The two
+ *          one-dimensional kernel components must be input separately;
+ *          the full kernel is the product of these components.
+ *          The support for the full kernel is thus a rectangular region.
+ *      (2) The kernel values can be positive or negative, but the
+ *          result for the convolution can only be stored as a positive
+ *          number.  Consequently, if it goes negative, we clip the
+ *          result to 0.
+ *      (3) To get a subsampled output, call l_setConvolveSampling().
+ *          The time to make a subsampled output is reduced by the
+ *          product of the sampling factors.
+ *      (4) This uses a mirrored border to avoid special casing on
+ *          the boundaries.
+ * 
+ */ +PIX * +pixConvolveRGBSep(PIX *pixs, + L_KERNEL *kelx, + L_KERNEL *kely) +{ +PIX *pixt, *pixr, *pixg, *pixb, *pixd; + + PROCNAME("pixConvolveRGBSep"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, NULL); + if (!kelx || !kely) + return (PIX *)ERROR_PTR("kelx, kely not both defined", procName, NULL); + + pixt = pixGetRGBComponent(pixs, COLOR_RED); + pixr = pixConvolveSep(pixt, kelx, kely, 8, 1); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + pixg = pixConvolveSep(pixt, kelx, kely, 8, 1); + pixDestroy(&pixt); + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + pixb = pixConvolveSep(pixt, kelx, kely, 8, 1); + pixDestroy(&pixt); + pixd = pixCreateRGBImage(pixr, pixg, pixb); + + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Generic convolution with float array * + *----------------------------------------------------------------------*/ +/*! + * \brief fpixConvolve() + * + * \param[in] fpixs 32 bit float array + * \param[in] kel kernel + * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise + * \return fpixd 32 bit float array + * + *
+ * Notes:
+ *      (1) This gives a float convolution with an arbitrary kernel.
+ *      (2) If normflag == 1, the result is normalized by scaling all
+ *          kernel values for a unit sum.  If the sum of kernel values
+ *          is very close to zero, the kernel can not be normalized and
+ *          the convolution will not be performed.  A warning is issued.
+ *      (3) With the FPix, there are no issues about negative
+ *          array or kernel values.  The convolution is performed
+ *          with single precision arithmetic.
+ *      (4) To get a subsampled output, call l_setConvolveSampling().
+ *          The time to make a subsampled output is reduced by the
+ *          product of the sampling factors.
+ *      (5) This uses a mirrored border to avoid special casing on
+ *          the boundaries.
+ * 
+ */ +FPIX * +fpixConvolve(FPIX *fpixs, + L_KERNEL *kel, + l_int32 normflag) +{ +l_int32 i, j, id, jd, k, m, w, h, wd, hd, sx, sy, cx, cy, wplt, wpld; +l_float32 val; +l_float32 *datat, *datad, *linet, *lined; +l_float32 sum; +L_KERNEL *keli, *keln; +FPIX *fpixt, *fpixd; + + PROCNAME("fpixConvolve"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (!kel) + return (FPIX *)ERROR_PTR("kel not defined", procName, NULL); + + fpixd = NULL; + + keli = kernelInvert(kel); + kernelGetParameters(keli, &sy, &sx, &cy, &cx); + if (normflag) + keln = kernelNormalize(keli, 1.0); + else + keln = kernelCopy(keli); + + fpixGetDimensions(fpixs, &w, &h); + fpixt = fpixAddMirroredBorder(fpixs, cx, sx - cx, cy, sy - cy); + if (!fpixt) { + L_ERROR("fpixt not made\n", procName); + goto cleanup; + } + + wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; + hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; + fpixd = fpixCreate(wd, hd); + datat = fpixGetData(fpixt); + datad = fpixGetData(fpixd); + wplt = fpixGetWpl(fpixt); + wpld = fpixGetWpl(fpixd); + for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { + lined = datad + id * wpld; + for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { + sum = 0.0; + for (k = 0; k < sy; k++) { + linet = datat + (i + k) * wplt; + for (m = 0; m < sx; m++) { + val = *(linet + j + m); + sum += val * keln->data[k][m]; + } + } + *(lined + jd) = sum; + } + } + +cleanup: + kernelDestroy(&keli); + kernelDestroy(&keln); + fpixDestroy(&fpixt); + return fpixd; +} + + +/*! + * \brief fpixConvolveSep() + * + * \param[in] fpixs 32 bit float array + * \param[in] kelx x-dependent kernel + * \param[in] kely y-dependent kernel + * \param[in] normflag 1 to normalize kernel to unit sum; 0 otherwise + * \return fpixd 32 bit float array + * + *
+ * Notes:
+ *      (1) This does a convolution with a separable kernel that is
+ *          is a sequence of convolutions in x and y.  The two
+ *          one-dimensional kernel components must be input separately;
+ *          the full kernel is the product of these components.
+ *          The support for the full kernel is thus a rectangular region.
+ *      (2) The normflag parameter is used as in fpixConvolve().
+ *      (3) Warning: if you use l_setConvolveSampling() to get a
+ *          subsampled output, and the sampling factor is larger than
+ *          the kernel half-width, it is faster to use the non-separable
+ *          version pixConvolve().  This is because the first convolution
+ *          here must be done on every raster line, regardless of the
+ *          vertical sampling factor.  If the sampling factor is smaller
+ *          than kernel half-width, it's faster to use the separable
+ *          convolution.
+ *      (4) This uses mirrored borders to avoid special casing on
+ *          the boundaries.
+ * 
+ */ +FPIX * +fpixConvolveSep(FPIX *fpixs, + L_KERNEL *kelx, + L_KERNEL *kely, + l_int32 normflag) +{ +l_int32 xfact, yfact; +L_KERNEL *kelxn, *kelyn; +FPIX *fpixt, *fpixd; + + PROCNAME("fpixConvolveSep"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!kelx) + return (FPIX *)ERROR_PTR("kelx not defined", procName, NULL); + if (!kely) + return (FPIX *)ERROR_PTR("kely not defined", procName, NULL); + + xfact = ConvolveSamplingFactX; + yfact = ConvolveSamplingFactY; + if (normflag) { + kelxn = kernelNormalize(kelx, 1.0); + kelyn = kernelNormalize(kely, 1.0); + l_setConvolveSampling(xfact, 1); + fpixt = fpixConvolve(fpixs, kelxn, 0); + l_setConvolveSampling(1, yfact); + fpixd = fpixConvolve(fpixt, kelyn, 0); + l_setConvolveSampling(xfact, yfact); /* restore */ + kernelDestroy(&kelxn); + kernelDestroy(&kelyn); + } else { /* don't normalize */ + l_setConvolveSampling(xfact, 1); + fpixt = fpixConvolve(fpixs, kelx, 0); + l_setConvolveSampling(1, yfact); + fpixd = fpixConvolve(fpixt, kely, 0); + l_setConvolveSampling(xfact, yfact); + } + + fpixDestroy(&fpixt); + return fpixd; +} + + +/*------------------------------------------------------------------------* + * Convolution with bias (for non-negative output) * + *------------------------------------------------------------------------*/ +/*! + * \brief pixConvolveWithBias() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] kel1 + * \param[in] kel2 can be null; use if separable + * \param[in] force8 if 1, force output to 8 bpp; otherwise, determine + * output depth by the dynamic range of pixel values + * \param[out] pbias applied bias + * \return pixd 8 or 16 bpp + * + *
+ * Notes:
+ *      (1) This does a convolution with either a single kernel or
+ *          a pair of separable kernels, and automatically applies whatever
+ *          bias (shift) is required so that the resulting pixel values
+ *          are non-negative.
+ *      (2) The kernel is always normalized.  If there are no negative
+ *          values in the kernel, a standard normalized convolution is
+ *          performed, with 8 bpp output.  If the sum of kernel values is
+ *          very close to zero, the kernel can not be normalized and
+ *          the convolution will not be performed.  An error message results.
+ *      (3) If there are negative values in the kernel, the pix is
+ *          converted to an fpix, the convolution is done on the fpix, and
+ *          a bias (shift) may need to be applied.
+ *      (4) If force8 == TRUE and the range of values after the convolution
+ *          is > 255, the output values will be scaled to fit in [0 ... 255].
+ *          If force8 == FALSE, the output will be either 8 or 16 bpp,
+ *          to accommodate the dynamic range of output values without scaling.
+ * 
+ */ +PIX * +pixConvolveWithBias(PIX *pixs, + L_KERNEL *kel1, + L_KERNEL *kel2, + l_int32 force8, + l_int32 *pbias) +{ +l_int32 outdepth; +l_float32 min1, min2, min, minval, maxval, range; +FPIX *fpix1, *fpix2; +PIX *pixd; + + PROCNAME("pixConvolveWithBias"); + + if (!pbias) + return (PIX *)ERROR_PTR("&bias not defined", procName, NULL); + *pbias = 0; + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + if (!kel1) + return (PIX *)ERROR_PTR("kel1 not defined", procName, NULL); + + /* Determine if negative values can be produced in the convolution */ + kernelGetMinMax(kel1, &min1, NULL); + min2 = 0.0; + if (kel2) + kernelGetMinMax(kel2, &min2, NULL); + min = L_MIN(min1, min2); + + if (min >= 0.0) { + if (!kel2) + return pixConvolve(pixs, kel1, 8, 1); + else + return pixConvolveSep(pixs, kel1, kel2, 8, 1); + } + + /* Bias may need to be applied; convert to fpix and convolve */ + fpix1 = pixConvertToFPix(pixs, 1); + if (!kel2) + fpix2 = fpixConvolve(fpix1, kel1, 1); + else + fpix2 = fpixConvolveSep(fpix1, kel1, kel2, 1); + fpixDestroy(&fpix1); + + /* Determine the bias and the dynamic range. + * If the dynamic range is <= 255, just shift the values by the + * bias, if any. + * If the dynamic range is > 255, there are two cases: + * (1) the output depth is not forced to 8 bpp + * ==> apply the bias without scaling; outdepth = 16 + * (2) the output depth is forced to 8 + * ==> linearly map the pixel values to [0 ... 255]. */ + fpixGetMin(fpix2, &minval, NULL, NULL); + fpixGetMax(fpix2, &maxval, NULL, NULL); + range = maxval - minval; + *pbias = (minval < 0.0) ? -minval : 0.0; + fpixAddMultConstant(fpix2, *pbias, 1.0); /* shift: min val ==> 0 */ + if (range <= 255 || !force8) { /* no scaling of output values */ + outdepth = (range > 255) ? 16 : 8; + } else { /* scale output values to fit in 8 bpp */ + fpixAddMultConstant(fpix2, 0.0, (255.0 / range)); + outdepth = 8; + } + + /* Convert back to pix; it won't do any clipping */ + pixd = fpixConvertToPix(fpix2, outdepth, L_CLIP_TO_ZERO, 0); + fpixDestroy(&fpix2); + + return pixd; +} + + +/*------------------------------------------------------------------------* + * Set parameter for convolution subsampling * + *------------------------------------------------------------------------*/ +/*! + * \brief l_setConvolveSampling() + + * + * \param[in] xfact, yfact integer >= 1 + * \return void + * + *
+ * Notes:
+ *      (1) This sets the x and y output subsampling factors for generic pix
+ *          and fpix convolution.  The default values are 1 (no subsampling).
+ * 
+ */ +void +l_setConvolveSampling(l_int32 xfact, + l_int32 yfact) +{ + if (xfact < 1) xfact = 1; + if (yfact < 1) yfact = 1; + ConvolveSamplingFactX = xfact; + ConvolveSamplingFactY = yfact; +} + + +/*------------------------------------------------------------------------* + * Additive gaussian noise * + *------------------------------------------------------------------------*/ +/*! + * \brief pixAddGaussianNoise() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb; no colormap + * \param[in] stdev of noise + * \return pixd 8 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This adds noise to each pixel, taken from a normal
+ *          distribution with zero mean and specified standard deviation.
+ * 
+ */ +PIX * +pixAddGaussianNoise(PIX *pixs, + l_float32 stdev) +{ +l_int32 i, j, w, h, d, wpls, wpld, val, rval, gval, bval; +l_uint32 pixel; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixAddGaussianNoise"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + + pixd = pixCreateTemplateNoInit(pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 8) { + val = GET_DATA_BYTE(lines, j); + val += (l_int32)(stdev * gaussDistribSampling() + 0.5); + val = L_MIN(255, L_MAX(0, val)); + SET_DATA_BYTE(lined, j, val); + } else { /* d = 32 */ + pixel = *(lines + j); + extractRGBValues(pixel, &rval, &gval, &bval); + rval += (l_int32)(stdev * gaussDistribSampling() + 0.5); + rval = L_MIN(255, L_MAX(0, rval)); + gval += (l_int32)(stdev * gaussDistribSampling() + 0.5); + gval = L_MIN(255, L_MAX(0, gval)); + bval += (l_int32)(stdev * gaussDistribSampling() + 0.5); + bval = L_MIN(255, L_MAX(0, bval)); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + } + return pixd; +} + + +/*! + * \brief gaussDistribSampling() + * + * \return gaussian distributed variable with zero mean and unit stdev + * + *
+ * Notes:
+ *      (1) For an explanation of the Box-Muller method for generating
+ *          a normally distributed random variable with zero mean and
+ *          unit standard deviation, see Numerical Recipes in C,
+ *          2nd edition, p. 288ff.
+ *      (2) This can be called sequentially to get samples that can be
+ *          used for adding noise to each pixel of an image, for example.
+ * 
+ */ +l_float32 +gaussDistribSampling() +{ +static l_int32 select = 0; /* flips between 0 and 1 on successive calls */ +static l_float32 saveval; +l_float32 frand, xval, yval, rsq, factor; + + if (select == 0) { + while (1) { /* choose a point in a 2x2 square, centered at origin */ + frand = (l_float32)rand() / (l_float32)RAND_MAX; + xval = 2.0 * frand - 1.0; + frand = (l_float32)rand() / (l_float32)RAND_MAX; + yval = 2.0 * frand - 1.0; + rsq = xval * xval + yval * yval; + if (rsq > 0.0 && rsq < 1.0) /* point is inside the unit circle */ + break; + } + factor = sqrt(-2.0 * log(rsq) / rsq); + saveval = xval * factor; + select = 1; + return yval * factor; + } + else { + select = 0; + return saveval; + } +} diff --git a/3rdparty/hgOCR/leptonica/correlscore.c b/3rdparty/hgOCR/leptonica/correlscore.c new file mode 100644 index 00000000..3684f2cb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/correlscore.c @@ -0,0 +1,879 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * correlscore.c + * + * These are functions for computing correlation between + * pairs of 1 bpp images. + * + * Optimized 2 pix correlators (for jbig2 clustering) + * l_int32 pixCorrelationScore() + * l_int32 pixCorrelationScoreThresholded() + * + * Simple 2 pix correlators + * l_int32 pixCorrelationScoreSimple() + * l_int32 pixCorrelationScoreShifted() + * + * There are other, more application-oriented functions, that + * compute the correlation between two binary images, taking into + * account small translational shifts, between two binary images. + * These are: + * compare.c: pixBestCorrelation() + * Uses coarse-to-fine translations of full image + * recogident.c: pixCorrelationBestShift() + * Uses small shifts between c.c. centroids. + */ + +#include +#include "allheaders.h" + + +/* -------------------------------------------------------------------- * + * Optimized 2 pix correlators (for jbig2 clustering) * + * -------------------------------------------------------------------- */ +/*! + * \brief pixCorrelationScore() + * + * \param[in] pix1 test pix, 1 bpp + * \param[in] pix2 exemplar pix, 1 bpp + * \param[in] area1 number of on pixels in pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] delx x comp of centroid difference + * \param[in] dely y comp of centroid difference + * \param[in] maxdiffw max width difference of pix1 and pix2 + * \param[in] maxdiffh max height difference of pix1 and pix2 + * \param[in] tab sum tab for byte + * \param[out] pscore correlation score + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *  We check first that the two pix are roughly the same size.
+ *  For jbclass (jbig2) applications at roughly 300 ppi, maxdiffw and
+ *  maxdiffh should be at least 2.
+ *
+ *  Only if they meet that criterion do we compare the bitmaps.
+ *  The centroid difference is used to align the two images to the
+ *  nearest integer for the correlation.
+ *
+ *  The correlation score is the ratio of the square of the number of
+ *  pixels in the AND of the two bitmaps to the product of the number
+ *  of ON pixels in each.  Denote the number of ON pixels in pix1
+ *  by |1|, the number in pix2 by |2|, and the number in the AND
+ *  of pix1 and pix2 by |1 & 2|.  The correlation score is then
+ *  (|1 & 2|)**2 / (|1|*|2|).
+ *
+ *  This score is compared with an input threshold, which can
+ *  be modified depending on the weight of the template.
+ *  The modified threshold is
+ *     thresh + (1.0 - thresh) * weight * R
+ *  where
+ *     weight is a fixed input factor between 0.0 and 1.0
+ *     R = |2| / area(2)
+ *  and area(2) is the total number of pixels in 2 (i.e., width x height).
+ *
+ *  To understand why a weight factor is useful, consider what happens
+ *  with thick, sans-serif characters that look similar and have a value
+ *  of R near 1.  Different characters can have a high correlation value,
+ *  and the classifier will make incorrect substitutions.  The weight
+ *  factor raises the threshold for these characters.
+ *
+ *  Yet another approach to reduce such substitutions is to run the classifier
+ *  in a non-greedy way, matching to the template with the highest
+ *  score, not the first template with a score satisfying the matching
+ *  constraint.  However, this is not particularly effective.
+ *
+ *  The implementation here gives the same result as in
+ *  pixCorrelationScoreSimple(), where a temporary Pix is made to hold
+ *  the AND and implementation uses rasterop:
+ *      pixt = pixCreateTemplate(pix1);
+ *      pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0);
+ *      pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0);
+ *      pixCountPixels(pixt, &count, tab);
+ *      pixDestroy(&pixt);
+ *  However, here it is done in a streaming fashion, counting as it goes,
+ *  and touching memory exactly once, giving a 3-4x speedup over the
+ *  simple implementation.  This very fast correlation matcher was
+ *  contributed by William Rucklidge.
+ * 
+ */ +l_ok +pixCorrelationScore(PIX *pix1, + PIX *pix2, + l_int32 area1, + l_int32 area2, + l_float32 delx, /* x(1) - x(3) */ + l_float32 dely, /* y(1) - y(3) */ + l_int32 maxdiffw, + l_int32 maxdiffh, + l_int32 *tab, + l_float32 *pscore) +{ +l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; +l_int32 wpl1, wpl2, lorow, hirow, locol, hicol; +l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; +l_uint32 word1, word2, andw; +l_uint32 *row1, *row2; + + PROCNAME("pixCorrelationScore"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 undefined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 undefined or not 1 bpp", procName, 1); + if (!tab) + return ERROR_INT("tab not defined", procName, 1); + if (area1 <= 0 || area2 <= 0) + return ERROR_INT("areas must be > 0", procName, 1); + + /* Eliminate based on size difference */ + pixGetDimensions(pix1, &wi, &hi, NULL); + pixGetDimensions(pix2, &wt, &ht, NULL); + delw = L_ABS(wi - wt); + if (delw > maxdiffw) + return 0; + delh = L_ABS(hi - ht); + if (delh > maxdiffh) + return 0; + + /* Round difference to nearest integer */ + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + + count = 0; + wpl1 = pixGetWpl(pix1); + wpl2 = pixGetWpl(pix2); + rowwords2 = wpl2; + + /* What rows of pix1 need to be considered? Only those underlying the + * shifted pix2. */ + lorow = L_MAX(idely, 0); + hirow = L_MIN(ht + idely, hi); + + /* Get the pointer to the first row of each image that will be + * considered. */ + row1 = pixGetData(pix1) + wpl1 * lorow; + row2 = pixGetData(pix2) + wpl2 * (lorow - idely); + + /* Similarly, figure out which columns of pix1 will be considered. */ + locol = L_MAX(idelx, 0); + hicol = L_MIN(wt + idelx, wi); + + if (idelx >= 32) { + /* pix2 is shifted far enough to the right that pix1's first + * word(s) won't contribute to the count. Increment its + * pointer to point to the first word that will contribute, + * and adjust other values accordingly. */ + pix1lskip = idelx >> 5; /* # of words to skip on left */ + row1 += pix1lskip; + locol -= pix1lskip << 5; + hicol -= pix1lskip << 5; + idelx &= 31; + } else if (idelx <= -32) { + /* pix2 is shifted far enough to the left that its first word(s) + * won't contribute to the count. Increment its pointer + * to point to the first word that will contribute, + * and adjust other values accordingly. */ + pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ + row2 += pix2lskip; + rowwords2 -= pix2lskip; + idelx += pix2lskip << 5; + } + + if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ + count = 0; + } else { + /* How many words of each row of pix1 need to be considered? */ + rowwords1 = (hicol + 31) >> 5; + + if (idelx == 0) { + /* There's no lateral offset; simple case. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1; x++) { + andw = row1[x] & row2[x]; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + } + } else if (idelx > 0) { + /* pix2 is shifted to the right. word 0 of pix1 is touched by + * word 0 of pix2; word 1 of pix1 is touched by word 0 and word + * 1 of pix2, and so on up to the last word of pix1 (word N), + * which is touched by words N-1 and N of pix1... if there is a + * word N. Handle the two cases (pix2 has N-1 words and pix2 + * has at least N words) separately. + * + * Note: we know that pix2 has at least N-1 words (i.e., + * rowwords2 >= rowwords1 - 1) by the following logic. + * We can pretend that idelx <= 31 because the >= 32 logic + * above adjusted everything appropriately. Then + * hicol <= wt + idelx <= wt + 31, so + * hicol + 31 <= wt + 62 + * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 + * rowwords2 == (wt + 31) >> 5, so + * rowwords1 <= rowwords2 + 1 */ + if (rowwords2 < rowwords1) { + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + /* Do the first iteration so the loop can be + * branch-free. */ + word1 = row1[0]; + word2 = row2[0] >> idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + for (x = 1; x < rowwords2; x++) { + word1 = row1[x]; + word2 = (row2[x] >> idelx) | + (row2[x - 1] << (32 - idelx)); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + /* Now the last iteration - we know that this is safe + * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 + * > 0 (if it was 0, we'd have taken the "count = 0" + * fast-path out of here). */ + word1 = row1[x]; + word2 = row2[x - 1] << (32 - idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + } else { + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + /* Do the first iteration so the loop can be + * branch-free. This section is the same as above + * except for the different limit on the loop, since + * the last iteration is the same as all the other + * iterations (beyond the first). */ + word1 = row1[0]; + word2 = row2[0] >> idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + for (x = 1; x < rowwords1; x++) { + word1 = row1[x]; + word2 = (row2[x] >> idelx) | + (row2[x - 1] << (32 - idelx)); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + } + } + } else { + /* pix2 is shifted to the left. word 0 of pix1 is touched by + * word 0 and word 1 of pix2, and so on up to the last word of + * pix1 (word N), which is touched by words N and N+1 of + * pix2... if there is a word N+1. Handle the two cases (pix2 + * has N words and pix2 has at least N+1 words) separately. */ + if (rowwords1 < rowwords2) { + /* pix2 has at least N+1 words, so every iteration through + * the loop can be the same. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1; x++) { + word1 = row1[x]; + word2 = row2[x] << -idelx; + word2 |= row2[x + 1] >> (32 + idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + } + } else { + /* pix2 has only N words, so the last iteration is broken + * out. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1 - 1; x++) { + word1 = row1[x]; + word2 = row2[x] << -idelx; + word2 |= row2[x + 1] >> (32 + idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + word1 = row1[x]; + word2 = row2[x] << -idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + } + } + } + + *pscore = (l_float32)count * (l_float32)count / + ((l_float32)area1 * (l_float32)area2); +/* fprintf(stderr, "score = %5.3f, count = %d, area1 = %d, area2 = %d\n", + *pscore, count, area1, area2); */ + return 0; +} + + +/*! + * \brief pixCorrelationScoreThresholded() + * + * \param[in] pix1 test pix, 1 bpp + * \param[in] pix2 exemplar pix, 1 bpp + * \param[in] area1 number of on pixels in pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] delx x comp of centroid difference + * \param[in] dely y comp of centroid difference + * \param[in] maxdiffw max width difference of pix1 and pix2 + * \param[in] maxdiffh max height difference of pix1 and pix2 + * \param[in] tab sum tab for byte + * \param[in] downcount count of 1 pixels below each row of pix1 + * \param[in] score_threshold + * \return whether the correlation score is >= score_threshold + * + * + *
+ * Notes:
+ *  We check first that the two pix are roughly the same size.
+ *  Only if they meet that criterion do we compare the bitmaps.
+ *  The centroid difference is used to align the two images to the
+ *  nearest integer for the correlation.
+ *
+ *  The correlation score is the ratio of the square of the number of
+ *  pixels in the AND of the two bitmaps to the product of the number
+ *  of ON pixels in each.  Denote the number of ON pixels in pix1
+ *  by |1|, the number in pix2 by |2|, and the number in the AND
+ *  of pix1 and pix2 by |1 & 2|.  The correlation score is then
+ *  (|1 & 2|)**2 / (|1|*|2|).
+ *
+ *  This score is compared with an input threshold, which can
+ *  be modified depending on the weight of the template.
+ *  The modified threshold is
+ *     thresh + (1.0 - thresh) * weight * R
+ *  where
+ *     weight is a fixed input factor between 0.0 and 1.0
+ *     R = |2| / area(2)
+ *  and area(2) is the total number of pixels in 2 (i.e., width x height).
+ *
+ *  To understand why a weight factor is useful, consider what happens
+ *  with thick, sans-serif characters that look similar and have a value
+ *  of R near 1.  Different characters can have a high correlation value,
+ *  and the classifier will make incorrect substitutions.  The weight
+ *  factor raises the threshold for these characters.
+ *
+ *  Yet another approach to reduce such substitutions is to run the classifier
+ *  in a non-greedy way, matching to the template with the highest
+ *  score, not the first template with a score satisfying the matching
+ *  constraint.  However, this is not particularly effective.
+ *
+ *  This very fast correlation matcher was contributed by William Rucklidge.
+ * 
+ */ +l_int32 +pixCorrelationScoreThresholded(PIX *pix1, + PIX *pix2, + l_int32 area1, + l_int32 area2, + l_float32 delx, /* x(1) - x(3) */ + l_float32 dely, /* y(1) - y(3) */ + l_int32 maxdiffw, + l_int32 maxdiffh, + l_int32 *tab, + l_int32 *downcount, + l_float32 score_threshold) +{ +l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; +l_int32 wpl1, wpl2, lorow, hirow, locol, hicol, untouchable; +l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; +l_uint32 word1, word2, andw; +l_uint32 *row1, *row2; +l_float32 score; +l_int32 threshold; + + PROCNAME("pixCorrelationScoreThresholded"); + + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 undefined or not 1 bpp", procName, 0); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 undefined or not 1 bpp", procName, 0); + if (!tab) + return ERROR_INT("tab not defined", procName, 0); + if (area1 <= 0 || area2 <= 0) + return ERROR_INT("areas must be > 0", procName, 0); + + /* Eliminate based on size difference */ + pixGetDimensions(pix1, &wi, &hi, NULL); + pixGetDimensions(pix2, &wt, &ht, NULL); + delw = L_ABS(wi - wt); + if (delw > maxdiffw) + return FALSE; + delh = L_ABS(hi - ht); + if (delh > maxdiffh) + return FALSE; + + /* Round difference to nearest integer */ + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + + /* Compute the correlation count that is needed so that + * count * count / (area1 * area2) >= score_threshold */ + threshold = (l_int32)ceil(sqrt((l_float64)score_threshold * area1 * area2)); + + count = 0; + wpl1 = pixGetWpl(pix1); + wpl2 = pixGetWpl(pix2); + rowwords2 = wpl2; + + /* What rows of pix1 need to be considered? Only those underlying the + * shifted pix2. */ + lorow = L_MAX(idely, 0); + hirow = L_MIN(ht + idely, hi); + + /* Get the pointer to the first row of each image that will be + * considered. */ + row1 = pixGetData(pix1) + wpl1 * lorow; + row2 = pixGetData(pix2) + wpl2 * (lorow - idely); + if (hirow <= hi) { + /* Some rows of pix1 will never contribute to count */ + untouchable = downcount[hirow - 1]; + } + + /* Similarly, figure out which columns of pix1 will be considered. */ + locol = L_MAX(idelx, 0); + hicol = L_MIN(wt + idelx, wi); + + if (idelx >= 32) { + /* pix2 is shifted far enough to the right that pix1's first + * word(s) won't contribute to the count. Increment its + * pointer to point to the first word that will contribute, + * and adjust other values accordingly. */ + pix1lskip = idelx >> 5; /* # of words to skip on left */ + row1 += pix1lskip; + locol -= pix1lskip << 5; + hicol -= pix1lskip << 5; + idelx &= 31; + } else if (idelx <= -32) { + /* pix2 is shifted far enough to the left that its first word(s) + * won't contribute to the count. Increment its pointer + * to point to the first word that will contribute, + * and adjust other values accordingly. */ + pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ + row2 += pix2lskip; + rowwords2 -= pix2lskip; + idelx += pix2lskip << 5; + } + + if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ + count = 0; + } else { + /* How many words of each row of pix1 need to be considered? */ + rowwords1 = (hicol + 31) >> 5; + + if (idelx == 0) { + /* There's no lateral offset; simple case. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1; x++) { + andw = row1[x] & row2[x]; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + /* If the count is over the threshold, no need to + * calculate any further. Likewise, return early if the + * count plus the maximum count attainable from further + * rows is below the threshold. */ + if (count >= threshold) return TRUE; + if (count + downcount[y] - untouchable < threshold) { + return FALSE; + } + } + } else if (idelx > 0) { + /* pix2 is shifted to the right. word 0 of pix1 is touched by + * word 0 of pix2; word 1 of pix1 is touched by word 0 and word + * 1 of pix2, and so on up to the last word of pix1 (word N), + * which is touched by words N-1 and N of pix1... if there is a + * word N. Handle the two cases (pix2 has N-1 words and pix2 + * has at least N words) separately. + * + * Note: we know that pix2 has at least N-1 words (i.e., + * rowwords2 >= rowwords1 - 1) by the following logic. + * We can pretend that idelx <= 31 because the >= 32 logic + * above adjusted everything appropriately. Then + * hicol <= wt + idelx <= wt + 31, so + * hicol + 31 <= wt + 62 + * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 + * rowwords2 == (wt + 31) >> 5, so + * rowwords1 <= rowwords2 + 1 */ + if (rowwords2 < rowwords1) { + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + /* Do the first iteration so the loop can be + * branch-free. */ + word1 = row1[0]; + word2 = row2[0] >> idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + for (x = 1; x < rowwords2; x++) { + word1 = row1[x]; + word2 = (row2[x] >> idelx) | + (row2[x - 1] << (32 - idelx)); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + /* Now the last iteration - we know that this is safe + * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 + * > 0 (if it was 0, we'd have taken the "count = 0" + * fast-path out of here). */ + word1 = row1[x]; + word2 = row2[x - 1] << (32 - idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + if (count >= threshold) return TRUE; + if (count + downcount[y] - untouchable < threshold) { + return FALSE; + } + } + } else { + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + /* Do the first iteration so the loop can be + * branch-free. This section is the same as above + * except for the different limit on the loop, since + * the last iteration is the same as all the other + * iterations (beyond the first). */ + word1 = row1[0]; + word2 = row2[0] >> idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + for (x = 1; x < rowwords1; x++) { + word1 = row1[x]; + word2 = (row2[x] >> idelx) | + (row2[x - 1] << (32 - idelx)); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + if (count >= threshold) return TRUE; + if (count + downcount[y] - untouchable < threshold) { + return FALSE; + } + } + } + } else { + /* pix2 is shifted to the left. word 0 of pix1 is touched by + * word 0 and word 1 of pix2, and so on up to the last word of + * pix1 (word N), which is touched by words N and N+1 of + * pix2... if there is a word N+1. Handle the two cases (pix2 + * has N words and pix2 has at least N+1 words) separately. */ + if (rowwords1 < rowwords2) { + /* pix2 has at least N+1 words, so every iteration through + * the loop can be the same. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1; x++) { + word1 = row1[x]; + word2 = row2[x] << -idelx; + word2 |= row2[x + 1] >> (32 + idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + if (count >= threshold) return TRUE; + if (count + downcount[y] - untouchable < threshold) { + return FALSE; + } + } + } else { + /* pix2 has only N words, so the last iteration is broken + * out. */ + for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { + for (x = 0; x < rowwords1 - 1; x++) { + word1 = row1[x]; + word2 = row2[x] << -idelx; + word2 |= row2[x + 1] >> (32 + idelx); + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + } + + word1 = row1[x]; + word2 = row2[x] << -idelx; + andw = word1 & word2; + count += tab[andw & 0xff] + + tab[(andw >> 8) & 0xff] + + tab[(andw >> 16) & 0xff] + + tab[andw >> 24]; + + if (count >= threshold) return TRUE; + if (count + downcount[y] - untouchable < threshold) { + return FALSE; + } + } + } + } + } + + score = (l_float32)count * (l_float32)count / + ((l_float32)area1 * (l_float32)area2); + if (score >= score_threshold) { + fprintf(stderr, "count %d < threshold %d but score %g >= score_threshold %g\n", + count, threshold, score, score_threshold); + } + return FALSE; +} + + +/* -------------------------------------------------------------------- * + * Simple 2 pix correlators (for jbig2 clustering) * + * -------------------------------------------------------------------- */ +/*! + * \brief pixCorrelationScoreSimple() + * + * \param[in] pix1 test pix, 1 bpp + * \param[in] pix2 exemplar pix, 1 bpp + * \param[in] area1 number of on pixels in pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] delx x comp of centroid difference + * \param[in] dely y comp of centroid difference + * \param[in] maxdiffw max width difference of pix1 and pix2 + * \param[in] maxdiffh max height difference of pix1 and pix2 + * \param[in] tab sum tab for byte + * \param[out] pscore correlation score, in range [0.0 ... 1.0] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This calculates exactly the same value as pixCorrelationScore().
+ *          It is 2-3x slower, but much simpler to understand.
+ *      (2) The returned correlation score is 0.0 if the width or height
+ *          exceed %maxdiffw or %maxdiffh.
+ * 
+ */ +l_ok +pixCorrelationScoreSimple(PIX *pix1, + PIX *pix2, + l_int32 area1, + l_int32 area2, + l_float32 delx, /* x(1) - x(3) */ + l_float32 dely, /* y(1) - y(3) */ + l_int32 maxdiffw, + l_int32 maxdiffh, + l_int32 *tab, + l_float32 *pscore) +{ +l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; +PIX *pixt; + + PROCNAME("pixCorrelationScoreSimple"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 undefined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 undefined or not 1 bpp", procName, 1); + if (!tab) + return ERROR_INT("tab not defined", procName, 1); + if (!area1 || !area2) + return ERROR_INT("areas must be > 0", procName, 1); + + /* Eliminate based on size difference */ + pixGetDimensions(pix1, &wi, &hi, NULL); + pixGetDimensions(pix2, &wt, &ht, NULL); + delw = L_ABS(wi - wt); + if (delw > maxdiffw) + return 0; + delh = L_ABS(hi - ht); + if (delh > maxdiffh) + return 0; + + /* Round difference to nearest integer */ + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + + /* pixt = pixAnd(NULL, pix1, pix2), including shift. + * To insure that pixels are ON only within the + * intersection of pix1 and the shifted pix2: + * (1) Start with pixt cleared and equal in size to pix1. + * (2) Blit the shifted pix2 onto pixt. Then all ON pixels + * are within the intersection of pix1 and the shifted pix2. + * (3) AND pix1 with pixt. */ + pixt = pixCreateTemplate(pix1); + pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0); + pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0); + pixCountPixels(pixt, &count, tab); + pixDestroy(&pixt); + + *pscore = (l_float32)count * (l_float32)count / + ((l_float32)area1 * (l_float32)area2); +/* fprintf(stderr, "score = %5.3f, count = %d, area1 = %d, area2 = %d\n", + *pscore, count, area1, area2); */ + return 0; +} + + +/*! + * \brief pixCorrelationScoreShifted() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \param[in] area1 number of on pixels in pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] delx x translation of pix2 relative to pix1 + * \param[in] dely y translation of pix2 relative to pix1 + * \param[in] tab sum tab for byte + * \param[out] pscore correlation score + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This finds the correlation between two 1 bpp images,
+ *          when pix2 is shifted by (delx, dely) with respect
+ *          to each other.
+ *      (2) This is implemented by starting with a copy of pix1 and
+ *          ANDing its pixels with those of a shifted pix2.
+ *      (3) Get the pixel counts for area1 and area2 using piCountPixels().
+ *      (4) A good estimate for a shift that would maximize the correlation
+ *          is to align the centroids (cx1, cy1; cx2, cy2), giving the
+ *          relative translations etransx and etransy:
+ *             etransx = cx1 - cx2
+ *             etransy = cy1 - cy2
+ *          Typically delx is chosen to be near etransx; ditto for dely.
+ *          This function is used in pixBestCorrelation(), where the
+ *          translations delx and dely are varied to find the best alignment.
+ *      (5) We do not check the sizes of pix1 and pix2, because they should
+ *          be comparable.
+ * 
+ */ +l_ok +pixCorrelationScoreShifted(PIX *pix1, + PIX *pix2, + l_int32 area1, + l_int32 area2, + l_int32 delx, + l_int32 dely, + l_int32 *tab, + l_float32 *pscore) +{ +l_int32 w1, h1, w2, h2, count; +PIX *pixt; + + PROCNAME("pixCorrelationScoreShifted"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 undefined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 undefined or not 1 bpp", procName, 1); + if (!tab) + return ERROR_INT("tab not defined", procName, 1); + if (!area1 || !area2) + return ERROR_INT("areas must be > 0", procName, 1); + + pixGetDimensions(pix1, &w1, &h1, NULL); + pixGetDimensions(pix2, &w2, &h2, NULL); + + /* To insure that pixels are ON only within the + * intersection of pix1 and the shifted pix2: + * (1) Start with pixt cleared and equal in size to pix1. + * (2) Blit the shifted pix2 onto pixt. Then all ON pixels + * are within the intersection of pix1 and the shifted pix2. + * (3) AND pix1 with pixt. */ + pixt = pixCreateTemplate(pix1); + pixRasterop(pixt, delx, dely, w2, h2, PIX_SRC, pix2, 0, 0); + pixRasterop(pixt, 0, 0, w1, h1, PIX_SRC & PIX_DST, pix1, 0, 0); + pixCountPixels(pixt, &count, tab); + pixDestroy(&pixt); + + *pscore = (l_float32)count * (l_float32)count / + ((l_float32)area1 * (l_float32)area2); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/dewarp.h b/3rdparty/hgOCR/leptonica/dewarp.h new file mode 100644 index 00000000..37bfb632 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dewarp.h @@ -0,0 +1,191 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_DEWARP_H +#define LEPTONICA_DEWARP_H + +/*! + * \file dewarp.h + * + *
+ *     Data structure to hold arrays and results for generating
+ *     horizontal and vertical disparity arrays based on textlines.
+ *     Each disparity array is two-dimensional.  The vertical disparity
+ *     array gives a vertical displacement, relative to the lowest point
+ *     in the textlines.  The horizontal disparty array gives a horizontal
+ *     displacement, relative to the minimum values (for even pages)
+ *     or maximum values (for odd pages) of the left and right ends of
+ *     full textlines.  Horizontal alignment always involves translations
+ *     away from the book gutter.
+ *
+ *     We have intentionally separated the process of building models
+ *     from the rendering process that uses the models.  For any page,
+ *     the building operation either creates an actual model (that is,
+ *     a model with at least the vertical disparity being computed, and
+ *     for which the 'success' flag is set) or fails to create a model.
+ *     However, at rendering time, a page can have one of two different
+ *     types of models.
+ *     (1) A valid model is an actual model that meets the rendering
+ *         constraints, which are limits on model curvature parameters.
+ *         See dewarpaTestForValidModel() for details.
+ *         Valid models are identified by dewarpaInsertRefModels(),
+ *         which sets the 'vvalid' and 'hvalid' fields.  Only valid
+ *         models are used for rendering.
+ *     (2) A reference model is used by a page that doesn't have
+ *         a valid model, but has a nearby valid model of the same
+ *         parity (even/odd page) that it can use.  The range in pages
+ *         to search for a valid model is given by the 'maxdist' field.
+ *
+ *     At the rendering stage, vertical and horizontal disparities are
+ *     treated differently.  It is somewhat more robust to generate
+ *     vertical disparity models (VDM) than horizontal disparity
+ *     models (HDM). A valid VDM is required for any correction to
+ *     be made; if a valid VDM is not available, just use the input
+ *     image.  Otherwise, assuming it is available, the use of the
+ *     HDM is controlled by two fields: 'useboth' and 'check_columns'.
+ *       (a) With useboth == 0, we use only the VDM.
+ *       (b) With useboth == 1, we require using the VDM and, if a valid
+ *           horizontal disparity model (HDM) is available, we also use it.
+ *       (c) With check_columns == 1, check for multiple columns and if
+ *           true, only use the VDM, even if a valid HDM is available.
+ *           Note that 'check_columns' takes precedence over 'useboth'
+ *           when there is more than 1 column of text.  By default,
+ *           check_columns == 0.
+ *
+ *     The 'maxdist' parameter is input when the dewarpa is created.
+ *     The other rendering parameters have default values given in dewarp1.c.
+ *     All parameters used by rendering can be set (or reset) using accessors.
+ *
+ *     After dewarping, use of the VDM will cause all points on each
+ *     altered curve to have a y-value equal to the minimum.  Use of
+ *     the HDA will cause the left and right edges of the textlines
+ *     to be vertically aligned if they had been typeset flush-left
+ *     and flush-right, respectively.
+ *
+ *     The sampled disparity arrays are expanded to full resolution,
+ *     using linear interpolation, and this is further expanded
+ *     by slope continuation to the right and below if the image
+ *     is larger than the full resolution disparity arrays.  Then
+ *     the disparity correction can be applied to the input image.
+ *     If the input pix are 2x reduced, the expansion from sampled
+ *     to full res uses the product of (sampling) * (redfactor).
+ *
+ *     The most accurate results are produced at full resolution, and
+ *     this is generally recommended.
+ * 
+ */ + + /*! Dewarp version for serialization + *
+     * Note on versioning of the serialization of this data structure:
+     * The dewarping utility and the stored data can be expected to change.
+     * In most situations, the serialized version is ephemeral -- it is
+     * not needed after being used.  No functions will be provided to
+     * convert between different versions.
+     * 
+ */ +#define DEWARP_VERSION_NUMBER 4 + +/*! Data structure to hold a number of Dewarp */ +struct L_Dewarpa +{ + l_int32 nalloc; /*!< size of dewarp ptr array */ + l_int32 maxpage; /*!< maximum page number in array */ + struct L_Dewarp **dewarp; /*!< array of ptrs to page dewarp */ + struct L_Dewarp **dewarpcache; /*!< array of ptrs to cached dewarps */ + struct Numa *namodels; /*!< list of page numbers for pages */ + /*!< with page models */ + struct Numa *napages; /*!< list of page numbers with either */ + /*!< page models or ref page models */ + l_int32 redfactor; /*!< reduction factor of input: 1 or 2 */ + l_int32 sampling; /*!< disparity arrays sampling factor */ + l_int32 minlines; /*!< min number of long lines required */ + l_int32 maxdist; /*!< max distance for getting ref page */ + l_int32 max_linecurv; /*!< maximum abs line curvature, */ + /*!< in micro-units */ + l_int32 min_diff_linecurv; /*!< minimum abs diff line */ + /*!< curvature in micro-units */ + l_int32 max_diff_linecurv; /*!< maximum abs diff line */ + /*!< curvature in micro-units */ + l_int32 max_edgeslope; /*!< maximum abs left or right edge */ + /*!< slope, in milli-units */ + l_int32 max_edgecurv; /*!< maximum abs left or right edge */ + /*!< curvature, in micro-units */ + l_int32 max_diff_edgecurv; /*!< maximum abs diff left-right */ + /*!< edge curvature, in micro-units */ + l_int32 useboth; /*!< use both disparity arrays if */ + /*!< available; only vertical otherwise */ + l_int32 check_columns; /*!< if there are multiple columns, */ + /*!< only use the vertical disparity */ + /*!< array */ + l_int32 modelsready; /*!< invalid models have been removed */ + /*!< and refs built against valid set */ +}; +typedef struct L_Dewarpa L_DEWARPA; + + +/*! Data structure for a single dewarp */ +struct L_Dewarp +{ + struct L_Dewarpa *dewa; /*!< ptr to parent (not owned) */ + struct Pix *pixs; /*!< source pix, 1 bpp */ + struct FPix *sampvdispar; /*!< sampled vert disparity array */ + struct FPix *samphdispar; /*!< sampled horiz disparity array */ + struct FPix *sampydispar; /*!< sampled slope h-disparity array */ + struct FPix *fullvdispar; /*!< full vert disparity array */ + struct FPix *fullhdispar; /*!< full horiz disparity array */ + struct FPix *fullydispar; /*!< full slope h-disparity array */ + struct Numa *namidys; /*!< sorted y val of midpoint each line */ + struct Numa *nacurves; /*!< sorted curvature of each line */ + l_int32 w; /*!< width of source image */ + l_int32 h; /*!< height of source image */ + l_int32 pageno; /*!< page number; important for reuse */ + l_int32 sampling; /*!< sampling factor of disparity arrays */ + l_int32 redfactor; /*!< reduction factor of pixs: 1 or 2 */ + l_int32 minlines; /*!< min number of long lines required */ + l_int32 nlines; /*!< number of long lines found */ + l_int32 mincurv; /*!< min line curvature in micro-units */ + l_int32 maxcurv; /*!< max line curvature in micro-units */ + l_int32 leftslope; /*!< left edge slope in milli-units */ + l_int32 rightslope; /*!< right edge slope in milli-units */ + l_int32 leftcurv; /*!< left edge curvature in micro-units */ + l_int32 rightcurv; /*!< right edge curvature in micro-units*/ + l_int32 nx; /*!< number of sampling pts in x-dir */ + l_int32 ny; /*!< number of sampling pts in y-dir */ + l_int32 hasref; /*!< 0 if normal; 1 if has a refpage */ + l_int32 refpage; /*!< page with disparity model to use */ + l_int32 vsuccess; /*!< sets to 1 if vert disparity builds */ + l_int32 hsuccess; /*!< sets to 1 if horiz disparity builds */ + l_int32 ysuccess; /*!< sets to 1 if slope disparity builds */ + l_int32 vvalid; /*!< sets to 1 if valid vert disparity */ + l_int32 hvalid; /*!< sets to 1 if valid horiz disparity */ + l_int32 skip_horiz; /*!< if 1, skip horiz disparity */ + /*!< correction */ + l_int32 debug; /*!< set to 1 if debug output requested */ +}; +typedef struct L_Dewarp L_DEWARP; + +#endif /* LEPTONICA_DEWARP_H */ diff --git a/3rdparty/hgOCR/leptonica/dewarp1.c b/3rdparty/hgOCR/leptonica/dewarp1.c new file mode 100644 index 00000000..528033a4 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dewarp1.c @@ -0,0 +1,1697 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dewarp1.c + *
+ *
+ *    Basic operations and serialization
+ *
+ *      Create/destroy dewarp
+ *          L_DEWARP          *dewarpCreate()
+ *          L_DEWARP          *dewarpCreateRef()
+ *          void               dewarpDestroy()
+ *
+ *      Create/destroy dewarpa
+ *          L_DEWARPA         *dewarpaCreate()
+ *          L_DEWARPA         *dewarpaCreateFromPixacomp()
+ *          void               dewarpaDestroy()
+ *          l_int32            dewarpaDestroyDewarp()
+ *
+ *      Dewarpa insertion/extraction
+ *          l_int32            dewarpaInsertDewarp()
+ *          static l_int32     dewarpaExtendArraysToSize()
+ *          L_DEWARP          *dewarpaGetDewarp()
+ *
+ *      Setting parameters to control rendering from the model
+ *          l_int32            dewarpaSetCurvatures()
+ *          l_int32            dewarpaUseBothArrays()
+ *          l_int32            dewarpaSetCheckColumns()
+ *          l_int32            dewarpaSetMaxDistance()
+ *
+ *      Dewarp serialized I/O
+ *          L_DEWARP          *dewarpRead()
+ *          L_DEWARP          *dewarpReadStream()
+ *          L_DEWARP          *dewarpReadMem()
+ *          l_int32            dewarpWrite()
+ *          l_int32            dewarpWriteStream()
+ *          l_int32            dewarpWriteMem()
+ *
+ *      Dewarpa serialized I/O
+ *          L_DEWARPA         *dewarpaRead()
+ *          L_DEWARPA         *dewarpaReadStream()
+ *          L_DEWARPA         *dewarpaReadMem()
+ *          l_int32            dewarpaWrite()
+ *          l_int32            dewarpaWriteStream()
+ *          l_int32            dewarpaWriteMem()
+ *
+ *
+ *  Examples of usage
+ *  =================
+ *
+ *  See dewarpaCreateFromPixacomp() for an example of the basic
+ *  operations, starting from a set of 1 bpp images.
+ *
+ *  Basic functioning to dewarp a specific single page:
+ * \code
+ *     // Make the Dewarpa for the pages
+ *     L_Dewarpa *dewa = dewarpaCreate(1, 30, 1, 15, 50);
+ *     dewarpaSetCurvatures(dewa, -1, 5, -1, -1, -1, -1);
+ *     dewarpaUseBothArrays(dewa, 1);  // try to use both disparity
+ *                                     // arrays for this example
+ *
+ *     // Do the page: start with a binarized image
+ *     Pix *pixb = "binarize"(pixs);
+ *     // Initialize a Dewarp for this page (say, page 214)
+ *     L_Dewarp *dew = dewarpCreate(pixb, 214);
+ *     // Insert in Dewarpa and obtain parameters for building the model
+ *     dewarpaInsertDewarp(dewa, dew);
+ *     // Do the work
+ *     dewarpBuildPageModel(dew, NULL);  // no debugging
+ *     // Optionally set rendering parameters
+ *     // Apply model to the input pixs
+ *     Pix *pixd;
+ *     dewarpaApplyDisparity(dewa, 214, pixs, 255, 0, 0, &pixd, NULL);
+ *     pixDestroy(&pixb);
+ * \endcode
+ *
+ *  Basic functioning to dewarp many pages:
+ * \code
+ *     // Make the Dewarpa for the set of pages; use fullres 1 bpp
+ *     L_Dewarpa *dewa = dewarpaCreate(10, 30, 1, 15, 50);
+ *     // Optionally set rendering parameters
+ *     dewarpaSetCurvatures(dewa, -1, 10, -1, -1, -1, -1);
+ *     dewarpaUseBothArrays(dewa, 0);  // just use the vertical disparity
+ *                                     // array for this example
+ *
+ *     // Do first page: start with a binarized image
+ *     Pix *pixb = "binarize"(pixs);
+ *     // Initialize a Dewarp for this page (say, page 1)
+ *     L_Dewarp *dew = dewarpCreate(pixb, 1);
+ *     // Insert in Dewarpa and obtain parameters for building the model
+ *     dewarpaInsertDewarp(dewa, dew);
+ *     // Do the work
+ *     dewarpBuildPageModel(dew, NULL);  // no debugging
+ *     dewarpMinimze(dew);  // remove most heap storage
+ *     pixDestroy(&pixb);
+ *
+ *     // Do the other pages the same way
+ *     ...
+ *
+ *     // Apply models to each page; if the page model is invalid,
+ *     // try to use a valid neighboring model.  Note that the call
+ *     // to dewarpaInsertRefModels() is optional, because it is called
+ *     // by dewarpaApplyDisparity() on the first page it acts on.
+ *     dewarpaInsertRefModels(dewa, 0, 1); // use debug flag to get more
+ *                         // detailed information about the page models
+ *     [For each page, where pixs is the fullres image to be dewarped] {
+ *         L_Dewarp *dew = dewarpaGetDewarp(dewa, pageno);
+ *         if (dew) {  // disparity model exists
+ *             Pix *pixd;
+ *             dewarpaApplyDisparity(dewa, pageno, pixs, 255,
+ *                                   0, 0, &pixd, NULL);
+ *             dewarpMinimize(dew);  // clean out the pix and fpix arrays
+ *             // Squirrel pixd away somewhere ...)
+ *         }
+ *     }
+ * \endcode
+ *
+ *  Basic functioning to dewarp a small set of pages, potentially
+ *  using models from nearby pages:
+ * \code
+ *     // (1) Generate a set of binarized images in the vicinity of the
+ *     // pages to be dewarped.  We will attempt to compute models
+ *     // for pages from 'firstpage' to 'lastpage'.
+ *     // Store the binarized images in a compressed array of
+ *     // size 'n', where 'n' is the number of images to be stored,
+ *     // and where the offset is the first page.
+ *     PixaComp *pixac = pixacompCreateInitialized(n, firstpage, NULL,
+ *                                                 IFF_TIFF_G4);
+ *     for (i = firstpage; i <= lastpage; i++) {
+ *         Pix *pixb = "binarize"(pixs);
+ *         pixacompReplacePix(pixac, i, pixb, IFF_TIFF_G4);
+ *         pixDestroy(&pixb);
+ *     }
+ *
+ *     // (2) Make the Dewarpa for the pages.
+ *     L_Dewarpa *dewa =
+ *           dewarpaCreateFromPixacomp(pixac, 30, 15, 20);
+ *     dewarpaUseBothArrays(dewa, 1);  // try to use both disparity arrays
+ *                                     // in this example
+ *
+ *     // (3) Finally, apply the models.  For page 'firstpage' with image pixs:
+ *     L_Dewarp *dew = dewarpaGetDewarp(dewa, firstpage);
+ *     if (dew) {  // disparity model exists
+ *         Pix *pixd;
+ *         dewarpaApplyDisparity(dewa, firstpage, pixs, 255, 0, 0, &pixd, NULL);
+ *         dewarpMinimize(dew);
+ *     }
+ * \endcode
+ *
+ *  Because in general some pages will not have enough text to build a
+ *  model, we fill in for those pages with a reference to the page
+ *  model to use.  Both the target page and the reference page must
+ *  have the same parity.  We can also choose to use either a partial model
+ *  (with only vertical disparity) or the full model of a nearby page.
+ *
+ *  Minimizing the data in a model by stripping out images,
+ *  numas, and full resolution disparity arrays:
+ *     dewarpMinimize(dew);
+ *  This can be done at any time to save memory.  Serialization does
+ *  not use the data that is stripped.
+ *
+ *  You can apply any model (in a dew), stripped or not, to another image:
+ * \code
+ *     // For all pages with invalid models, assign the nearest valid
+ *     // page model with same parity.
+ *     dewarpaInsertRefModels(dewa, 0, 0);
+ *     // You can then apply to 'newpix' the page model that was assigned
+ *     // to 'pageno', giving the result in pixd:
+ *     Pix *pixd;
+ *     dewarpaApplyDisparity(dewa, pageno, newpix, 255, 0, 0, &pixd, NULL);
+ * \endcode
+ *
+ *  You can apply the disparity arrays to a deliberately undercropped
+ *  image.  Suppose that you undercrop by (left, right, top, bot), so
+ *  that the disparity arrays are aligned with their origin at (left, top).
+ *  Dewarp the undercropped image with:
+ * \code
+ *     Pix *pixd;
+ *     dewarpaApplyDisparity(dewa, pageno, undercropped_pix, 255,
+ *                           left, top, &pixd, NULL);
+ * \endcode
+ *
+ *  Description of the approach to analyzing page image distortion
+ *  ==============================================================
+ *
+ *  When a book page is scanned, there are several possible causes
+ *  for the text lines to appear to be curved:
+ *   (1) A barrel (fish-eye) effect because the camera is at
+ *       a finite distance from the page.  Take the normal from
+ *       the camera to the page (the 'optic axis').  Lines on
+ *       the page "below" this point will appear to curve upward
+ *       (negative curvature); lines "above" this will curve downward.
+ *   (2) Radial distortion from the camera lens.  Probably not
+ *       a big factor.
+ *   (3) Local curvature of the page in to (or out of) the image
+ *       plane (which is perpendicular to the optic axis).
+ *       This has no effect if the page is flat.
+ *
+ *  In the following, the optic axis is in the z direction and is
+ *  perpendicular to the xy plane;, the book is assumed to be aligned
+ *  so that y is approximately along the binding.
+ *  The goal is to compute the "disparity" field, D(x,y), which
+ *  is actually a vector composed of the horizontal and vertical
+ *  disparity fields H(x,y) and V(x,y).  Each of these is a local
+ *  function that gives the amount each point in the image is
+ *  required to move in order to rectify the horizontal and vertical
+ *  lines.  It would also be nice to "flatten" the page to compensate
+ *  for effect (3), foreshortening due to bending of the page into
+ *  the z direction, but that is more difficult.
+ *
+ *  Effects (1) and (2) can be directly compensated by calibrating
+ *  the scene, using a flat page with horizontal and vertical lines.
+ *  Then H(x,y) and V(x,y) can be found as two (non-parametric) arrays
+ *  of values.  Suppose this has been done.  Then the remaining
+ *  distortion is due to (3).
+ *
+ *  We consider the simple situation where the page bending is independent
+ *  of y, and is described by alpha(x), where alpha is the angle between
+ *  the normal to the page and the optic axis.  cos(alpha(x)) is the local
+ *  compression factor of the page image in the horizontal direction, at x.
+ *  Thus, if we know alpha(x), we can compute the disparity H(x) required
+ *  to flatten the image by simply integrating 1/cos(alpha), and we could
+ *  compute the remaining disparities, H(x,y) and V(x,y), from the
+ *  page content, as described below.  Unfortunately, we don't know
+ *  alpha.  What do we know?  If there are horizontal text lines
+ *  on the page, we can compute the vertical disparity, V(x,y), which
+ *  is the local translation required to make the text lines parallel
+ *  to the rasters.  If the margins are left and right aligned, we can
+ *  also estimate the horizontal disparity, H(x,y), required to have
+ *  uniform margins.  All that can be done from the image alone,
+ *  assuming we have text lines covering a sufficient part of the page.
+ *
+ *  What about alpha(x)?  The basic question relating to (3) is this:
+ *
+ *     Is it possible, using the shape of the text lines alone,
+ *     to compute both the vertical and horizontal disparity fields?
+ *
+ *  The underlying problem is to separate the line curvature effects due
+ *  to the camera view from those due to actual bending of the page.
+ *  I believe the proper way to do this is to make some measurements
+ *  based on the camera setup, which will depend mostly on the distance
+ *  of the camera from the page, and to a smaller extent on the location
+ *  of the optic axis with respect to the page.
+ *
+ *  Here is the procedure.  Photograph a page with a fine 2D line grid
+ *  several times, each with a different slope near the binding.
+ *  This can be done by placing the grid page on books that have
+ *  different shapes z(x) near the binding.  For each one you can
+ *  measure, near the binding:
+ *    (1) ds/dy, the vertical rate of change of slope of the horizontal lines
+ *    (2) the local horizontal compression of the vertical lines due
+ *        to the page angle dz/dx.
+ *  As mentioned above, the local horizontal compression is simply
+ *  cos(dz/dx).  But the measurement you can make on an actual book
+ *  page is (1).  The difficulty is to generate (2) from (1).
+ *
+ *  Back to the procedure.  The function in (1), ds/dy, likely needs
+ *  to be measured at a few y locations, because the relation
+ *  between (1) and (2) may weakly depend on the y-location with
+ *  respect to the y-coordinate of the optic axis of the camera.
+ *  From these measurements you can determine, for the camera setup
+ *  that you have, the local horizontal compression, cos(dz/dx), as a
+ *  function of the both vertical location (y) and your measured vertical
+ *  derivative of the text line slope there, ds/dy.  Then with
+ *  appropriate smoothing of your measured values, you can set up a
+ *  horizontal disparity array to correct for the compression due
+ *  to dz/dx.
+ *
+ *  Now consider V(x,0) and V(x,h), the vertical disparity along
+ *  the top and bottom of the image.  With a little thought you
+ *  can convince yourself that the local foreshortening,
+ *  as a function of x, is proportional to the difference
+ *  between the slope of V(x,0) and V(x,h).  The horizontal
+ *  disparity can then be computed by integrating the local foreshortening
+ *  over x.  Integration of the slope of V(x,0) and V(x,h) gives
+ *  the vertical disparity itself.  We have to normalize to h, the
+ *  height of the page.  So the very simple result is that
+ *
+ *      H(x) ~ (V(x,0) - V(x,h)) / h         [1]
+ *
+ *  which is easily computed.  There is a proportionality constant
+ *  that depends on the ratio of h to the distance to the camera.
+ *  Can we actually believe this for the case where the bending
+ *  is independent of y?  I believe the answer is yes,
+ *  as long as you first remove the apparent distortion due
+ *  to the camera being at a finite distance.
+ *
+ *  If you know the intersection of the optical axis with the page
+ *  and the distance to the camera, and if the page is perpendicular
+ *  to the optic axis, you can compute the horizontal and vertical
+ *  disparities due to (1) and (2) and remove them.  The resulting
+ *  distortion should be entirely due to bending (3), for which
+ *  the relation
+ *
+ *      Hx(x) dx = C * ((Vx(x,0) - Vx(x, h))/h) dx         [2]
+ *
+ *  holds for each point in x (Hx and Vx are partial derivatives w/rt x).
+ *  Integrating over x, and using H(0) = 0, we get the result [1].
+ *
+ *  I believe this result holds differentially for each value of y, so
+ *  that in the case where the bending is not independent of y,
+ *  the expression (V(x,0) - V(x,h)) / h goes over to Vy(x,y).  Then
+ *
+ *     H(x,y) = Integral(0,x) (Vyx(x,y) dx)         [3]
+ *
+ *  where Vyx() is the partial derivative of V w/rt both x and y.
+ *
+ *  It would be nice if there were a simple mathematical relation between
+ *  the horizontal and vertical disparities for the situation
+ *  where the paper bends without stretching or kinking.
+ *  I had hoped to get a relation between H and V, such as
+ *  Hx(x,y) ~ Vy(x,y), which would imply that H and V are real
+ *  and imaginary parts of a complex potential, each of which
+ *  satisfy the laplace equation.  But then the gradients of the
+ *  two potentials would be normal, and that does not appear to be the case.
+ *  Thus, the questions of proving the relations above (for small bending),
+ *  or finding a simpler relation between H and V than those equations,
+ *  remain open.  So far, we have only used [1] for the horizontal
+ *  disparity H(x).
+ *
+ *  In the version of the code that follows, we first use text lines
+ *  to find V(x,y).  Then, we try to compute H(x,y) that will align
+ *  the text vertically on the left and right margins.  This is not
+ *  always possible -- sometimes the right margin is not right justified.
+ *  By default, we don't require the horizontal disparity to have a
+ *  valid page model for dewarping a page, but this requirement can
+ *  be forced using dewarpaUseFullModel().
+ *
+ *  As described above, one can add a y-independent component of
+ *  the horizontal disparity H(x) to counter the foreshortening
+ *  effect due to the bending of the page near the binding.
+ *  This requires widening the image on the side near the binding,
+ *  and we do not provide this option here.  However, we do provide
+ *  a function that will generate this disparity field:
+ *       fpixExtraHorizDisparity()
+ *
+ *  Here is the basic outline for building the disparity arrays.
+ *
+ *  (1) Find lines going approximately through the center of the
+ *      text in each text line.  Accept only lines that are
+ *      close in length to the longest line.
+ *  (2) Use these lines to generate a regular and highly subsampled
+ *      vertical disparity field V(x,y).
+ *  (3) Interpolate this to generate a full resolution vertical
+ *      disparity field.
+ *  (4) For lines that are sufficiently long, assume they are approximately
+ *      left and right-justified, and construct a highly subsampled
+ *      horizontal disparity field H(x,y) that will bring them into alignment.
+ *  (5) Interpolate this to generate a full resolution horizontal
+ *      disparity field.
+ *  (6) Apply the vertical dewarping, followed by the horizontal dewarping.
+ *
+ *  Step (1) is clearly described by the code in pixGetTextlineCenters().
+ *
+ *  Steps (2) and (3) follow directly from the data in step (1),
+ *  and constitute the bulk of the work done in dewarpBuildPageModel().
+ *  Virtually all the noise in the data is smoothed out by doing
+ *  least-square quadratic fits, first horizontally to the data
+ *  points representing the text line centers, and then vertically.
+ *  The trick is to sample these lines on a regular grid.
+ *  First each horizontal line is sampled at equally spaced
+ *  intervals horizontally.  We thus get a set of points,
+ *  one in each line, that are vertically aligned, and
+ *  the data we represent is the vertical distance of each point
+ *  from the min or max value on the curve, depending on the
+ *  sign of the curvature component.  Each of these vertically
+ *  aligned sets of points constitutes a sampled vertical disparity,
+ *  and we do a LS quartic fit to each of them, followed by
+ *  vertical sampling at regular intervals.  We now have a subsampled
+ *  grid of points, all equally spaced, giving at each point the local
+ *  vertical disparity.  Finally, the full resolution vertical disparity
+ *  is formed by interpolation.  All the least square fits do a
+ *  great job of smoothing everything out, as can be observed by
+ *  the contour maps that are generated for the vertical disparity field.
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size); + + /* Parameter values used in dewarpaCreate() */ +static const l_int32 InitialPtrArraySize = 20; /* n'import quoi */ +static const l_int32 MaxPtrArraySize = 10000; +static const l_int32 DefaultArraySampling = 30; +static const l_int32 MinArraySampling = 8; +static const l_int32 DefaultMinLines = 15; +static const l_int32 MinMinLines = 4; +static const l_int32 DefaultMaxRefDist = 16; +static const l_int32 DefaultUseBoth = TRUE; +static const l_int32 DefaultCheckColumns = TRUE; + + /* Parameter values used in dewarpaSetCurvatures() */ +static const l_int32 DefaultMaxLineCurv = 150; +static const l_int32 DefaultMinDiffLineCurv = 0; +static const l_int32 DefaultMaxDiffLineCurv = 170; +static const l_int32 DefaultMaxEdgeCurv = 50; +static const l_int32 DefaultMaxDiffEdgeCurv = 40; +static const l_int32 DefaultMaxEdgeSlope = 80; + +/*----------------------------------------------------------------------* + * Create/destroy Dewarp * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpCreate() + * + * \param[in] pixs 1 bpp + * \param[in] pageno page number + * \return dew or NULL on error + * + *
+ * Notes:
+ *      (1) The input pixs is either full resolution or 2x reduced.
+ *      (2) The page number is typically 0-based.  If scanned from a book,
+ *          the even pages are usually on the left.  Disparity arrays
+ *          built for even pages should only be applied to even pages.
+ * 
+ */ +L_DEWARP * +dewarpCreate(PIX *pixs, + l_int32 pageno) +{ +L_DEWARP *dew; + + PROCNAME("dewarpCreate"); + + if (!pixs) + return (L_DEWARP *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (L_DEWARP *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); + dew->pixs = pixClone(pixs); + dew->pageno = pageno; + dew->w = pixGetWidth(pixs); + dew->h = pixGetHeight(pixs); + return dew; +} + + +/*! + * \brief dewarpCreateRef() + * + * \param[in] pageno this page number + * \param[in] refpage page number of dewarp disparity arrays to be used + * \return dew or NULL on error + * + *
+ * Notes:
+ *      (1) This specifies which dewarp struct should be used for
+ *          the given page.  It is placed in dewarpa for pages
+ *          for which no model can be built.
+ *      (2) This page and the reference page have the same parity and
+ *          the reference page is the closest page with a disparity model
+ *          to this page.
+ * 
+ */ +L_DEWARP * +dewarpCreateRef(l_int32 pageno, + l_int32 refpage) +{ +L_DEWARP *dew; + + PROCNAME("dewarpCreateRef"); + + dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); + dew->pageno = pageno; + dew->hasref = 1; + dew->refpage = refpage; + return dew; +} + + +/*! + * \brief dewarpDestroy() + * + * \param[in,out] pdew will be set to null before returning + * \return void + */ +void +dewarpDestroy(L_DEWARP **pdew) +{ +L_DEWARP *dew; + + PROCNAME("dewarpDestroy"); + + if (pdew == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + if ((dew = *pdew) == NULL) + return; + + pixDestroy(&dew->pixs); + fpixDestroy(&dew->sampvdispar); + fpixDestroy(&dew->samphdispar); + fpixDestroy(&dew->sampydispar); + fpixDestroy(&dew->fullvdispar); + fpixDestroy(&dew->fullhdispar); + fpixDestroy(&dew->fullydispar); + numaDestroy(&dew->namidys); + numaDestroy(&dew->nacurves); + LEPT_FREE(dew); + *pdew = NULL; + return; +} + + +/*----------------------------------------------------------------------* + * Create/destroy Dewarpa * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaCreate() + * + * \param[in] nptrs number of dewarp page ptrs; typ. the number of pages + * \param[in] sampling use 0 for default value; the minimum allowed is 8 + * \param[in] redfactor of input images: 1 is full res; 2 is 2x reduced + * \param[in] minlines minimum number of lines to accept; use 0 for default + * \param[in] maxdist for locating reference disparity; use -1 for default + * \return dewa or NULL on error + * + *
+ * Notes:
+ *      (1) The sampling, minlines and maxdist parameters will be
+ *          applied to all images.
+ *      (2) The sampling factor is used for generating the disparity arrays
+ *          from the input image.  For 2x reduced input, use a sampling
+ *          factor that is half the sampling you want on the full resolution
+ *          images.
+ *      (3) Use %redfactor = 1 for full resolution; 2 for 2x reduction.
+ *          All input images must be at one of these two resolutions.
+ *      (4) %minlines is the minimum number of nearly full-length lines
+ *          required to generate a vertical disparity array.  The default
+ *          number is 15.  Use a smaller number to accept a questionable
+ *          array, but not smaller than 4.
+ *      (5) When a model can't be built for a page, it looks up to %maxdist
+ *          in either direction for a valid model with the same page parity.
+ *          Use -1 for the default value of %maxdist; use 0 to avoid using
+ *          a ref model.
+ *      (6) The ptr array is expanded as necessary to accommodate page images.
+ * 
+ */ +L_DEWARPA * +dewarpaCreate(l_int32 nptrs, + l_int32 sampling, + l_int32 redfactor, + l_int32 minlines, + l_int32 maxdist) +{ +L_DEWARPA *dewa; + + PROCNAME("dewarpaCreate"); + + if (nptrs <= 0) + nptrs = InitialPtrArraySize; + if (nptrs > MaxPtrArraySize) + return (L_DEWARPA *)ERROR_PTR("too many pages", procName, NULL); + if (redfactor != 1 && redfactor != 2) + return (L_DEWARPA *)ERROR_PTR("redfactor not in {1,2}", + procName, NULL); + if (sampling == 0) { + sampling = DefaultArraySampling; + } else if (sampling < MinArraySampling) { + L_WARNING("sampling too small; setting to %d\n", procName, + MinArraySampling); + sampling = MinArraySampling; + } + if (minlines == 0) { + minlines = DefaultMinLines; + } else if (minlines < MinMinLines) { + L_WARNING("minlines too small; setting to %d\n", procName, + MinMinLines); + minlines = DefaultMinLines; + } + if (maxdist < 0) + maxdist = DefaultMaxRefDist; + + dewa = (L_DEWARPA *)LEPT_CALLOC(1, sizeof(L_DEWARPA)); + dewa->dewarp = (L_DEWARP **)LEPT_CALLOC(nptrs, sizeof(L_DEWARPA *)); + dewa->dewarpcache = (L_DEWARP **)LEPT_CALLOC(nptrs, sizeof(L_DEWARPA *)); + if (!dewa->dewarp || !dewa->dewarpcache) { + dewarpaDestroy(&dewa); + return (L_DEWARPA *)ERROR_PTR("dewarp ptrs not made", procName, NULL); + } + dewa->nalloc = nptrs; + dewa->sampling = sampling; + dewa->redfactor = redfactor; + dewa->minlines = minlines; + dewa->maxdist = maxdist; + dewa->max_linecurv = DefaultMaxLineCurv; + dewa->min_diff_linecurv = DefaultMinDiffLineCurv; + dewa->max_diff_linecurv = DefaultMaxDiffLineCurv; + dewa->max_edgeslope = DefaultMaxEdgeSlope; + dewa->max_edgecurv = DefaultMaxEdgeCurv; + dewa->max_diff_edgecurv = DefaultMaxDiffEdgeCurv; + dewa->check_columns = DefaultCheckColumns; + dewa->useboth = DefaultUseBoth; + return dewa; +} + + +/*! + * \brief dewarpaCreateFromPixacomp() + * + * \param[in] pixac pixacomp of G4, 1 bpp images; with 1x1x1 placeholders + * \param[in] useboth 0 for only vert disparity; 1 for both vert and horiz + * \param[in] sampling use -1 or 0 for default value; otherwise minimum of 5 + * \param[in] minlines minimum number of lines to accept; e.g., 10 + * \param[in] maxdist for locating reference disparity; use -1 for default + * \return dewa or NULL on error + * + *
+ * Notes:
+ *      (1) The returned dewa has disparity arrays calculated and
+ *          is ready for serialization or for use in dewarping.
+ *      (2) The sampling, minlines and maxdist parameters are
+ *          applied to all images.  See notes in dewarpaCreate() for details.
+ *      (3) The pixac is full.  Placeholders, if any, are w=h=d=1 images,
+ *          and the real input images are 1 bpp at full resolution.
+ *          They are assumed to be cropped to the actual page regions,
+ *          and may be arbitrarily sparse in the array.
+ *      (4) The output dewarpa is indexed by the page number.
+ *          The offset in the pixac gives the mapping between the
+ *          array index in the pixac and the page number.
+ *      (5) This adds the ref page models.
+ *      (6) This can be used to make models for any desired set of pages.
+ *          The direct models are only made for pages with images in
+ *          the pixacomp; the ref models are made for pages of the
+ *          same parity within %maxdist of the nearest direct model.
+ * 
+ */ +L_DEWARPA * +dewarpaCreateFromPixacomp(PIXAC *pixac, + l_int32 useboth, + l_int32 sampling, + l_int32 minlines, + l_int32 maxdist) +{ +l_int32 i, nptrs, pageno; +L_DEWARP *dew; +L_DEWARPA *dewa; +PIX *pixt; + + PROCNAME("dewarpaCreateFromPixacomp"); + + if (!pixac) + return (L_DEWARPA *)ERROR_PTR("pixac not defined", procName, NULL); + + nptrs = pixacompGetCount(pixac); + if ((dewa = dewarpaCreate(pixacompGetOffset(pixac) + nptrs, + sampling, 1, minlines, maxdist)) == NULL) + return (L_DEWARPA *)ERROR_PTR("dewa not made", procName, NULL); + dewarpaUseBothArrays(dewa, useboth); + + for (i = 0; i < nptrs; i++) { + pageno = pixacompGetOffset(pixac) + i; /* index into pixacomp */ + pixt = pixacompGetPix(pixac, pageno); + if (pixt && (pixGetWidth(pixt) > 1)) { + dew = dewarpCreate(pixt, pageno); + pixDestroy(&pixt); + if (!dew) { + ERROR_INT("unable to make dew!", procName, 1); + continue; + } + + /* Insert into dewa for this page */ + dewarpaInsertDewarp(dewa, dew); + + /* Build disparity arrays for this page */ + dewarpBuildPageModel(dew, NULL); + if (!dew->vsuccess) { /* will need to use model from nearby page */ + dewarpaDestroyDewarp(dewa, pageno); + L_ERROR("unable to build model for page %d\n", procName, i); + continue; + } + /* Remove all extraneous data */ + dewarpMinimize(dew); + } + pixDestroy(&pixt); + } + dewarpaInsertRefModels(dewa, 0, 0); + + return dewa; +} + + +/*! + * \brief dewarpaDestroy() + * + * \param[in,out] pdewa will be set to null before returning + * \return void + */ +void +dewarpaDestroy(L_DEWARPA **pdewa) +{ +l_int32 i; +L_DEWARP *dew; +L_DEWARPA *dewa; + + PROCNAME("dewarpaDestroy"); + + if (pdewa == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + if ((dewa = *pdewa) == NULL) + return; + + for (i = 0; i < dewa->nalloc; i++) { + if ((dew = dewa->dewarp[i]) != NULL) + dewarpDestroy(&dew); + if ((dew = dewa->dewarpcache[i]) != NULL) + dewarpDestroy(&dew); + } + numaDestroy(&dewa->namodels); + numaDestroy(&dewa->napages); + + LEPT_FREE(dewa->dewarp); + LEPT_FREE(dewa->dewarpcache); + LEPT_FREE(dewa); + *pdewa = NULL; + return; +} + + +/*! + * \brief dewarpaDestroyDewarp() + * + * \param[in] dewa + * \param[in] pageno of dew to be destroyed + * \return 0 if OK, 1 on error + */ +l_ok +dewarpaDestroyDewarp(L_DEWARPA *dewa, + l_int32 pageno) +{ +L_DEWARP *dew; + + PROCNAME("dewarpaDestroyDewarp"); + + if (!dewa) + return ERROR_INT("dewa or dew not defined", procName, 1); + if (pageno < 0 || pageno > dewa->maxpage) + return ERROR_INT("page out of bounds", procName, 1); + if ((dew = dewa->dewarp[pageno]) == NULL) + return ERROR_INT("dew not defined", procName, 1); + + dewarpDestroy(&dew); + dewa->dewarp[pageno] = NULL; + return 0; +} + + +/*----------------------------------------------------------------------* + * Dewarpa insertion/extraction * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaInsertDewarp() + * + * \param[in] dewa + * \param[in] dew to be added + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This inserts the dewarp into the array, which now owns it.
+ *          It also keeps track of the largest page number stored.
+ *          It must be done before the disparity model is built.
+ *      (2) Note that this differs from the usual method of filling out
+ *          arrays in leptonica, where the arrays are compact and
+ *          new elements are typically added to the end.  Here,
+ *          the dewarp can be added anywhere, even beyond the initial
+ *          allocation.
+ * 
+ */ +l_ok +dewarpaInsertDewarp(L_DEWARPA *dewa, + L_DEWARP *dew) +{ +l_int32 pageno, n, newsize; +L_DEWARP *prevdew; + + PROCNAME("dewarpaInsertDewarp"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + + dew->dewa = dewa; + pageno = dew->pageno; + if (pageno > MaxPtrArraySize) + return ERROR_INT("too many pages", procName, 1); + if (pageno > dewa->maxpage) + dewa->maxpage = pageno; + dewa->modelsready = 0; /* force re-evaluation at application time */ + + /* Extend ptr array if necessary */ + n = dewa->nalloc; + newsize = n; + if (pageno >= 2 * n) + newsize = 2 * pageno; + else if (pageno >= n) + newsize = 2 * n; + if (newsize > n) + dewarpaExtendArraysToSize(dewa, newsize); + + if ((prevdew = dewarpaGetDewarp(dewa, pageno)) != NULL) + dewarpDestroy(&prevdew); + dewa->dewarp[pageno] = dew; + + dew->sampling = dewa->sampling; + dew->redfactor = dewa->redfactor; + dew->minlines = dewa->minlines; + + /* Get the dimensions of the sampled array. This will be + * stored in an fpix, and the input resolution version is + * guaranteed to be larger than pixs. However, if you + * want to apply the disparity to an image with a width + * w > nx * s - 2 * s + 2 + * you will need to extend the input res fpix. + * And similarly for h. */ + dew->nx = (dew->w + 2 * dew->sampling - 2) / dew->sampling; + dew->ny = (dew->h + 2 * dew->sampling - 2) / dew->sampling; + return 0; +} + + +/*! + * \brief dewarpaExtendArraysToSize() + * + * \param[in] dewa + * \param[in] size new size of dewarpa array + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If necessary, reallocs main and cache dewarpa ptr arrays to %size.
+ * 
+ */ +static l_int32 +dewarpaExtendArraysToSize(L_DEWARPA *dewa, + l_int32 size) +{ + PROCNAME("dewarpaExtendArraysToSize"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + if (size > dewa->nalloc) { + if ((dewa->dewarp = (L_DEWARP **)reallocNew((void **)&dewa->dewarp, + sizeof(L_DEWARP *) * dewa->nalloc, + size * sizeof(L_DEWARP *))) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + if ((dewa->dewarpcache = + (L_DEWARP **)reallocNew((void **)&dewa->dewarpcache, + sizeof(L_DEWARP *) * dewa->nalloc, + size * sizeof(L_DEWARP *))) == NULL) + return ERROR_INT("new ptr cache array not returned", procName, 1); + dewa->nalloc = size; + } + return 0; +} + + +/*! + * \brief dewarpaGetDewarp() + * + * \param[in] dewa populated with dewarp structs for pages + * \param[in] index into dewa: this is the pageno + * \return dew handle; still owned by dewa, or NULL on error + */ +L_DEWARP * +dewarpaGetDewarp(L_DEWARPA *dewa, + l_int32 index) +{ + PROCNAME("dewarpaGetDewarp"); + + if (!dewa) + return (L_DEWARP *)ERROR_PTR("dewa not defined", procName, NULL); + if (index < 0 || index > dewa->maxpage) { + L_ERROR("index = %d is invalid; max index = %d\n", + procName, index, dewa->maxpage); + return NULL; + } + + return dewa->dewarp[index]; +} + + +/*----------------------------------------------------------------------* + * Setting parameters to control rendering from the model * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaSetCurvatures() + * + * \param[in] dewa + * \param[in] max_linecurv -1 for default + * \param[in] min_diff_linecurv -1 for default; 0 to accept all models + * \param[in] max_diff_linecurv -1 for default + * \param[in] max_edgecurv -1 for default + * \param[in] max_diff_edgecurv -1 for default + * \param[in] max_edgeslope -1 for default + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Approximating the line by a quadratic, the coefficient
+ *          of the quadratic term is the curvature, and distance
+ *          units are in pixels (of course).  The curvature is very
+ *          small, so we multiply by 10^6 and express the constraints
+ *          on the model curvatures in micro-units.
+ *      (2) This sets five curvature thresholds and a slope threshold:
+ *          * the maximum absolute value of the vertical disparity
+ *            line curvatures
+ *          * the minimum absolute value of the largest difference in
+ *            vertical disparity line curvatures (Use a value of 0
+ *            to accept all models.)
+ *          * the maximum absolute value of the largest difference in
+ *            vertical disparity line curvatures
+ *          * the maximum absolute value of the left and right edge
+ *            curvature for the horizontal disparity
+ *          * the maximum absolute value of the difference between
+ *            left and right edge curvature for the horizontal disparity
+ *          all in micro-units, for dewarping to take place.
+ *          Use -1 for default values.
+ *      (3) An image with a line curvature less than about 0.00001
+ *          has fairly straight textlines.  This is 10 micro-units.
+ *      (4) For example, if %max_linecurv == 100, this would prevent dewarping
+ *          if any of the lines has a curvature exceeding 100 micro-units.
+ *          A model having maximum line curvature larger than about 150
+ *          micro-units should probably not be used.
+ *      (5) A model having a left or right edge curvature larger than
+ *          about 50 micro-units should probably not be used.
+ * 
+ */ +l_ok +dewarpaSetCurvatures(L_DEWARPA *dewa, + l_int32 max_linecurv, + l_int32 min_diff_linecurv, + l_int32 max_diff_linecurv, + l_int32 max_edgecurv, + l_int32 max_diff_edgecurv, + l_int32 max_edgeslope) +{ + PROCNAME("dewarpaSetCurvatures"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + if (max_linecurv == -1) + dewa->max_linecurv = DefaultMaxLineCurv; + else + dewa->max_linecurv = L_ABS(max_linecurv); + + if (min_diff_linecurv == -1) + dewa->min_diff_linecurv = DefaultMinDiffLineCurv; + else + dewa->min_diff_linecurv = L_ABS(min_diff_linecurv); + + if (max_diff_linecurv == -1) + dewa->max_diff_linecurv = DefaultMaxDiffLineCurv; + else + dewa->max_diff_linecurv = L_ABS(max_diff_linecurv); + + if (max_edgecurv == -1) + dewa->max_edgecurv = DefaultMaxEdgeCurv; + else + dewa->max_edgecurv = L_ABS(max_edgecurv); + + if (max_diff_edgecurv == -1) + dewa->max_diff_edgecurv = DefaultMaxDiffEdgeCurv; + else + dewa->max_diff_edgecurv = L_ABS(max_diff_edgecurv); + + if (max_edgeslope == -1) + dewa->max_edgeslope = DefaultMaxEdgeSlope; + else + dewa->max_edgeslope = L_ABS(max_edgeslope); + + dewa->modelsready = 0; /* force validation */ + return 0; +} + + +/*! + * \brief dewarpaUseBothArrays() + * + * \param[in] dewa + * \param[in] useboth 0 for false, 1 for true + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This sets the useboth field.  If set, this will attempt
+ *          to apply both vertical and horizontal disparity arrays.
+ *          Note that a model with only a vertical disparity array will
+ *          always be valid.
+ * 
+ */ +l_ok +dewarpaUseBothArrays(L_DEWARPA *dewa, + l_int32 useboth) +{ + PROCNAME("dewarpaUseBothArrays"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + dewa->useboth = useboth; + dewa->modelsready = 0; /* force validation */ + return 0; +} + + +/*! + * \brief dewarpaSetCheckColumns() + * + * \param[in] dewa + * \param[in] check_columns 0 for false, 1 for true + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This sets the 'check_columns" field.  If set, and if
+ *          'useboth' is set, this will count the number of text
+ *          columns.  If the number is larger than 1, this will
+ *          prevent the application of horizontal disparity arrays
+ *          if they exist.  Note that the default value of check_columns
+ *          if 0 (FALSE).
+ *      (2) This field is set to 0 by default.  For horizontal disparity
+ *          correction to take place on a single column of text, you must have:
+ *           - a valid horizontal disparity array
+ *           - useboth = 1 (TRUE)
+ *          If there are multiple columns, additionally
+ *           - check_columns = 0 (FALSE)
+ *
+ * 
+ */ +l_ok +dewarpaSetCheckColumns(L_DEWARPA *dewa, + l_int32 check_columns) +{ + PROCNAME("dewarpaSetCheckColumns"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + dewa->check_columns = check_columns; + return 0; +} + + +/*! + * \brief dewarpaSetMaxDistance() + * + * \param[in] dewa + * \param[in] maxdist for using ref models + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This sets the maxdist field.
+ * 
+ */ +l_ok +dewarpaSetMaxDistance(L_DEWARPA *dewa, + l_int32 maxdist) +{ + PROCNAME("dewarpaSetMaxDistance"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + dewa->maxdist = maxdist; + dewa->modelsready = 0; /* force validation */ + return 0; +} + + +/*----------------------------------------------------------------------* + * Dewarp serialized I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpRead() + * + * \param[in] filename + * \return dew, or NULL on error + */ +L_DEWARP * +dewarpRead(const char *filename) +{ +FILE *fp; +L_DEWARP *dew; + + PROCNAME("dewarpRead"); + + if (!filename) + return (L_DEWARP *)ERROR_PTR("filename not defined", procName, NULL); + if ((fp = fopenReadStream(filename)) == NULL) + return (L_DEWARP *)ERROR_PTR("stream not opened", procName, NULL); + + if ((dew = dewarpReadStream(fp)) == NULL) { + fclose(fp); + return (L_DEWARP *)ERROR_PTR("dew not read", procName, NULL); + } + + fclose(fp); + return dew; +} + + +/*! + * \brief dewarpReadStream() + * + * \param[in] fp file stream + * \return dew dewarp, or NULL on error + * + *
+ * Notes:
+ *      (1) The dewarp struct is stored in minimized format, with only
+ *          subsampled disparity arrays.
+ *      (2) The sampling and extra horizontal disparity parameters are
+ *          stored here.  During generation of the dewarp struct, they
+ *          are passed in from the dewarpa.  In readback, it is assumed
+ *          that they are (a) the same for each page and (b) the same
+ *          as the values used to create the dewarpa.
+ * 
+ */ +L_DEWARP * +dewarpReadStream(FILE *fp) +{ +l_int32 version, sampling, redfactor, minlines, pageno, hasref, refpage; +l_int32 w, h, nx, ny, vdispar, hdispar, nlines; +l_int32 mincurv, maxcurv, leftslope, rightslope, leftcurv, rightcurv; +L_DEWARP *dew; +FPIX *fpixv, *fpixh; + + PROCNAME("dewarpReadStream"); + + if (!fp) + return (L_DEWARP *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nDewarp Version %d\n", &version) != 1) + return (L_DEWARP *)ERROR_PTR("not a dewarp file", procName, NULL); + if (version != DEWARP_VERSION_NUMBER) + return (L_DEWARP *)ERROR_PTR("invalid dewarp version", procName, NULL); + if (fscanf(fp, "pageno = %d\n", &pageno) != 1) + return (L_DEWARP *)ERROR_PTR("read fail for pageno", procName, NULL); + if (fscanf(fp, "hasref = %d, refpage = %d\n", &hasref, &refpage) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for hasref, refpage", + procName, NULL); + if (fscanf(fp, "sampling = %d, redfactor = %d\n", &sampling, &redfactor) + != 2) + return (L_DEWARP *)ERROR_PTR("read fail for sampling/redfactor", + procName, NULL); + if (fscanf(fp, "nlines = %d, minlines = %d\n", &nlines, &minlines) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for nlines/minlines", + procName, NULL); + if (fscanf(fp, "w = %d, h = %d\n", &w, &h) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for w, h", procName, NULL); + if (fscanf(fp, "nx = %d, ny = %d\n", &nx, &ny) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for nx, ny", procName, NULL); + if (fscanf(fp, "vert_dispar = %d, horiz_dispar = %d\n", &vdispar, &hdispar) + != 2) + return (L_DEWARP *)ERROR_PTR("read fail for flags", procName, NULL); + if (vdispar) { + if (fscanf(fp, "min line curvature = %d, max line curvature = %d\n", + &mincurv, &maxcurv) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for mincurv & maxcurv", + procName, NULL); + } + if (hdispar) { + if (fscanf(fp, "left edge slope = %d, right edge slope = %d\n", + &leftslope, &rightslope) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for leftslope & rightslope", + procName, NULL); + if (fscanf(fp, "left edge curvature = %d, right edge curvature = %d\n", + &leftcurv, &rightcurv) != 2) + return (L_DEWARP *)ERROR_PTR("read fail for leftcurv & rightcurv", + procName, NULL); + } + if (vdispar) { + if ((fpixv = fpixReadStream(fp)) == NULL) + return (L_DEWARP *)ERROR_PTR("read fail for vdispar", + procName, NULL); + } + if (hdispar) { + if ((fpixh = fpixReadStream(fp)) == NULL) + return (L_DEWARP *)ERROR_PTR("read fail for hdispar", + procName, NULL); + } + getc(fp); + + dew = (L_DEWARP *)LEPT_CALLOC(1, sizeof(L_DEWARP)); + dew->w = w; + dew->h = h; + dew->pageno = pageno; + dew->sampling = sampling; + dew->redfactor = redfactor; + dew->minlines = minlines; + dew->nlines = nlines; + dew->hasref = hasref; + dew->refpage = refpage; + if (hasref == 0) /* any dew without a ref has an actual model */ + dew->vsuccess = 1; + dew->nx = nx; + dew->ny = ny; + if (vdispar) { + dew->mincurv = mincurv; + dew->maxcurv = maxcurv; + dew->vsuccess = 1; + dew->sampvdispar = fpixv; + } + if (hdispar) { + dew->leftslope = leftslope; + dew->rightslope = rightslope; + dew->leftcurv = leftcurv; + dew->rightcurv = rightcurv; + dew->hsuccess = 1; + dew->samphdispar = fpixh; + } + + return dew; +} + + +/*! + * \brief dewarpReadMem() + * + * \param[in] data serialization of dewarp + * \param[in] size of data in bytes + * \return dew dewarp, or NULL on error + */ +L_DEWARP * +dewarpReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +L_DEWARP *dew; + + PROCNAME("dewarpReadMem"); + + if (!data) + return (L_DEWARP *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (L_DEWARP *)ERROR_PTR("stream not opened", procName, NULL); + + dew = dewarpReadStream(fp); + fclose(fp); + if (!dew) L_ERROR("dew not read\n", procName); + return dew; +} + + +/*! + * \brief dewarpWrite() + * + * \param[in] filename + * \param[in] dew + * \return 0 if OK, 1 on error + */ +l_ok +dewarpWrite(const char *filename, + L_DEWARP *dew) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dewarpWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dewarpWriteStream(fp, dew); + fclose(fp); + if (ret) + return ERROR_INT("dew not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief dewarpWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] dew + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This should not be written if there is no sampled
+ *          vertical disparity array, which means that no model has
+ *          been built for this page.
+ * 
+ */ +l_ok +dewarpWriteStream(FILE *fp, + L_DEWARP *dew) +{ +l_int32 vdispar, hdispar; + + PROCNAME("dewarpWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + + fprintf(fp, "\nDewarp Version %d\n", DEWARP_VERSION_NUMBER); + fprintf(fp, "pageno = %d\n", dew->pageno); + fprintf(fp, "hasref = %d, refpage = %d\n", dew->hasref, dew->refpage); + fprintf(fp, "sampling = %d, redfactor = %d\n", + dew->sampling, dew->redfactor); + fprintf(fp, "nlines = %d, minlines = %d\n", dew->nlines, dew->minlines); + fprintf(fp, "w = %d, h = %d\n", dew->w, dew->h); + fprintf(fp, "nx = %d, ny = %d\n", dew->nx, dew->ny); + vdispar = (dew->sampvdispar) ? 1 : 0; + hdispar = (dew->samphdispar) ? 1 : 0; + fprintf(fp, "vert_dispar = %d, horiz_dispar = %d\n", vdispar, hdispar); + if (vdispar) + fprintf(fp, "min line curvature = %d, max line curvature = %d\n", + dew->mincurv, dew->maxcurv); + if (hdispar) { + fprintf(fp, "left edge slope = %d, right edge slope = %d\n", + dew->leftslope, dew->rightslope); + fprintf(fp, "left edge curvature = %d, right edge curvature = %d\n", + dew->leftcurv, dew->rightcurv); + } + if (vdispar) fpixWriteStream(fp, dew->sampvdispar); + if (hdispar) fpixWriteStream(fp, dew->samphdispar); + fprintf(fp, "\n"); + + if (!vdispar) + L_WARNING("no disparity arrays!\n", procName); + return 0; +} + + +/*! + * \brief dewarpWriteMem() + * + * \param[out] pdata data of serialized dewarp (not ascii) + * \param[out] psize size of returned data + * \param[in] dew + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a dewarp in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +dewarpWriteMem(l_uint8 **pdata, + size_t *psize, + L_DEWARP *dew) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dewarpWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dewarpWriteStream(fp, dew); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = dewarpWriteStream(fp, dew); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*----------------------------------------------------------------------* + * Dewarpa serialized I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaRead() + * + * \param[in] filename + * \return dewa, or NULL on error + */ +L_DEWARPA * +dewarpaRead(const char *filename) +{ +FILE *fp; +L_DEWARPA *dewa; + + PROCNAME("dewarpaRead"); + + if (!filename) + return (L_DEWARPA *)ERROR_PTR("filename not defined", procName, NULL); + if ((fp = fopenReadStream(filename)) == NULL) + return (L_DEWARPA *)ERROR_PTR("stream not opened", procName, NULL); + + if ((dewa = dewarpaReadStream(fp)) == NULL) { + fclose(fp); + return (L_DEWARPA *)ERROR_PTR("dewa not read", procName, NULL); + } + + fclose(fp); + return dewa; +} + + +/*! + * \brief dewarpaReadStream() + * + * \param[in] fp file stream + * \return dewa, or NULL on error + * + *
+ * Notes:
+ *      (1) The serialized dewarp contains a Numa that gives the
+ *          (increasing) page number of the dewarp structs that are
+ *          contained.
+ *      (2) Reference pages are added in after readback.
+ * 
+ */ +L_DEWARPA * +dewarpaReadStream(FILE *fp) +{ +l_int32 i, version, ndewarp, maxpage; +l_int32 sampling, redfactor, minlines, maxdist, useboth; +l_int32 max_linecurv, min_diff_linecurv, max_diff_linecurv; +l_int32 max_edgeslope, max_edgecurv, max_diff_edgecurv; +L_DEWARP *dew; +L_DEWARPA *dewa; +NUMA *namodels; + + PROCNAME("dewarpaReadStream"); + + if (!fp) + return (L_DEWARPA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nDewarpa Version %d\n", &version) != 1) + return (L_DEWARPA *)ERROR_PTR("not a dewarpa file", procName, NULL); + if (version != DEWARP_VERSION_NUMBER) + return (L_DEWARPA *)ERROR_PTR("invalid dewarp version", procName, NULL); + + if (fscanf(fp, "ndewarp = %d, maxpage = %d\n", &ndewarp, &maxpage) != 2) + return (L_DEWARPA *)ERROR_PTR("read fail for maxpage+", procName, NULL); + if (fscanf(fp, + "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", + &sampling, &redfactor, &minlines, &maxdist) != 4) + return (L_DEWARPA *)ERROR_PTR("read fail for 4 params", procName, NULL); + if (fscanf(fp, + "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", + &max_linecurv, &min_diff_linecurv, &max_diff_linecurv) != 3) + return (L_DEWARPA *)ERROR_PTR("read fail for linecurv", procName, NULL); + if (fscanf(fp, + "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n", + &max_edgeslope, &max_edgecurv, &max_diff_edgecurv) != 3) + return (L_DEWARPA *)ERROR_PTR("read fail for edgecurv", procName, NULL); + if (fscanf(fp, "fullmodel = %d\n", &useboth) != 1) + return (L_DEWARPA *)ERROR_PTR("read fail for useboth", procName, NULL); + + if (ndewarp > MaxPtrArraySize) + return (L_DEWARPA *)ERROR_PTR("too many pages", procName, NULL); + + dewa = dewarpaCreate(maxpage + 1, sampling, redfactor, minlines, maxdist); + dewa->maxpage = maxpage; + dewa->max_linecurv = max_linecurv; + dewa->min_diff_linecurv = min_diff_linecurv; + dewa->max_diff_linecurv = max_diff_linecurv; + dewa->max_edgeslope = max_edgeslope; + dewa->max_edgecurv = max_edgecurv; + dewa->max_diff_edgecurv = max_diff_edgecurv; + dewa->useboth = useboth; + namodels = numaCreate(ndewarp); + dewa->namodels = namodels; + for (i = 0; i < ndewarp; i++) { + if ((dew = dewarpReadStream(fp)) == NULL) { + L_ERROR("read fail for dew[%d]\n", procName, i); + dewarpaDestroy(&dewa); + return NULL; + } + dewarpaInsertDewarp(dewa, dew); + numaAddNumber(namodels, dew->pageno); + } + + /* Validate the models and insert reference models */ + dewarpaInsertRefModels(dewa, 0, 0); + return dewa; +} + + +/*! + * \brief dewarpaReadMem() + * + * \param[in] data serialization of dewarpa + * \param[in] size of data in bytes + * \return dewa dewarpa, or NULL on error + */ +L_DEWARPA * +dewarpaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +L_DEWARPA *dewa; + + PROCNAME("dewarpaReadMem"); + + if (!data) + return (L_DEWARPA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (L_DEWARPA *)ERROR_PTR("stream not opened", procName, NULL); + + dewa = dewarpaReadStream(fp); + fclose(fp); + if (!dewa) L_ERROR("dewa not read\n", procName); + return dewa; +} + + +/*! + * \brief dewarpaWrite() + * + * \param[in] filename + * \param[in] dewa + * \return 0 if OK, 1 on error + */ +l_ok +dewarpaWrite(const char *filename, + L_DEWARPA *dewa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dewarpaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dewarpaWriteStream(fp, dewa); + fclose(fp); + if (ret) + return ERROR_INT("dewa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief dewarpaWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] dewa + * \return 0 if OK, 1 on error + */ +l_ok +dewarpaWriteStream(FILE *fp, + L_DEWARPA *dewa) +{ +l_int32 ndewarp, i, pageno; + + PROCNAME("dewarpaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + /* Generate the list of page numbers for which a model exists. + * Note that no attempt is made to determine if the model is + * valid, because that determination is associated with + * using the model to remove the warping, which typically + * can happen later, after all the models have been built. */ + dewarpaListPages(dewa); + if (!dewa->namodels) + return ERROR_INT("dewa->namodels not made", procName, 1); + ndewarp = numaGetCount(dewa->namodels); /* with actual page models */ + + fprintf(fp, "\nDewarpa Version %d\n", DEWARP_VERSION_NUMBER); + fprintf(fp, "ndewarp = %d, maxpage = %d\n", ndewarp, dewa->maxpage); + fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", + dewa->sampling, dewa->redfactor, dewa->minlines, dewa->maxdist); + fprintf(fp, + "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", + dewa->max_linecurv, dewa->min_diff_linecurv, dewa->max_diff_linecurv); + fprintf(fp, + "max_edgeslope = %d, max_edgecurv = %d, max_diff_edgecurv = %d\n", + dewa->max_edgeslope, dewa->max_edgecurv, dewa->max_diff_edgecurv); + fprintf(fp, "fullmodel = %d\n", dewa->useboth); + for (i = 0; i < ndewarp; i++) { + numaGetIValue(dewa->namodels, i, &pageno); + dewarpWriteStream(fp, dewarpaGetDewarp(dewa, pageno)); + } + + return 0; +} + + +/*! + * \brief dewarpaWriteMem() + * + * \param[out] pdata data of serialized dewarpa (not ascii) + * \param[out] psize size of returned data + * \param[in] dewa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a dewarpa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +dewarpaWriteMem(l_uint8 **pdata, + size_t *psize, + L_DEWARPA *dewa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dewarpaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dewarpaWriteStream(fp, dewa); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = dewarpaWriteStream(fp, dewa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} diff --git a/3rdparty/hgOCR/leptonica/dewarp2.c b/3rdparty/hgOCR/leptonica/dewarp2.c new file mode 100644 index 00000000..a638eda0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dewarp2.c @@ -0,0 +1,1912 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dewarp2.c + *
+ *
+ *    Build the page disparity model
+ *
+ *      Build basic page disparity model
+ *          l_int32            dewarpBuildPageModel()
+ *          l_int32            dewarpFindVertDisparity()
+ *          l_int32            dewarpFindHorizDisparity()
+ *          PTAA              *dewarpGetTextlineCenters()
+ *          static PTA        *dewarpGetMeanVerticals()
+ *          PTAA              *dewarpRemoveShortLines()
+ *          static l_int32     dewarpGetLineEndPoints()
+ *          static l_int32     dewarpFilterLineEndPoints()
+ *          static PTA        *dewarpRemoveBadEndPoints()
+ *          static l_int32     dewarpIsLineCoverageValid()
+ *          static l_int32     dewarpQuadraticLSF()
+ *
+ *      Build disparity model for slope near binding
+ *          l_int32            dewarpFindHorizSlopeDisparity()
+ *
+ *      Build the line disparity model
+ *          l_int32            dewarpBuildLineModel()
+ *
+ *      Query model status
+ *          l_int32            dewarpaModelStatus()
+ *
+ *      Rendering helpers
+ *          static l_int32     pixRenderMidYs()
+ *          static l_int32     pixRenderHorizEndPoints
+ * 
+ */ + +#include +#include "allheaders.h" + +static PTA *dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y); +static l_int32 dewarpGetLineEndPoints(l_int32 h, PTAA *ptaa, PTA **pptal, + PTA **pptar); +static l_int32 dewarpFilterLineEndPoints(L_DEWARP *dew, PTA *ptal1, PTA *ptar1, + PTA **pptal2, PTA **pptar2); +static PTA *dewarpRemoveBadEndPoints(l_int32 w, PTA *ptas); +static l_int32 dewarpIsLineCoverageValid(PTAA *ptaa2, l_int32 h, + l_int32 *pntop, l_int32 *pnbot, + l_int32 *pytop, l_int32 *pybot); +static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, + l_float32 *pc, l_float32 *pmederr); +static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew); +static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, + l_uint32 color); + + +#ifndef NO_CONSOLE_IO +#define DEBUG_TEXTLINE_CENTERS 0 /* set this to 1 for debugging */ +#define DEBUG_SHORT_LINES 0 /* ditto */ +#else +#define DEBUG_TEXTLINE_CENTERS 0 /* always must be 0 */ +#define DEBUG_SHORT_LINES 0 /* ditto */ +#endif /* !NO_CONSOLE_IO */ + + /* Special parameter values for reducing horizontal disparity */ +static const l_float32 MinRatioLinesToHeight = 0.45; +static const l_int32 MinLinesForHoriz1 = 10; /* initially */ +static const l_int32 MinLinesForHoriz2 = 3; /* after, in each half */ +static const l_float32 AllowedWidthFract = 0.05; /* no bigger */ + + +/*----------------------------------------------------------------------* + * Build basic page disparity model * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpBuildPageModel() + * + * \param[in] dew + * \param[in] debugfile use NULL to skip writing this + * \return 0 if OK, 1 if unable to build the model or on error + * + *
+ * Notes:
+ *      (1) This is the basic function that builds the horizontal and
+ *          vertical disparity arrays, which allow determination of the
+ *          src pixel in the input image corresponding to each
+ *          dest pixel in the dewarped image.
+ *      (2) Sets vsuccess = 1 if the vertical disparity array builds.
+ *          Always attempts to build the horizontal disparity array,
+ *          even if it will not be requested (useboth == 0).
+ *          Sets hsuccess = 1 if horizontal disparity builds.
+ *      (3) The method is as follows:
+ *          (a) Estimate the points along the centers of all the
+ *              long textlines.  If there are too few lines, no
+ *              disparity models are built.
+ *          (b) From the vertical deviation of the lines, estimate
+ *              the vertical disparity.
+ *          (c) From the ends of the lines, estimate the horizontal
+ *              disparity, assuming that the text is made of lines
+ *              that are close to left and right justified.
+ *          (d) One can also compute an additional contribution to the
+ *              horizontal disparity, inferred from slopes of the top
+ *              and bottom lines.  We do not do this.
+ *      (4) In more detail for the vertical disparity:
+ *          (a) Fit a LS quadratic to center locations along each line.
+ *              This smooths the curves.
+ *          (b) Sample each curve at a regular interval, find the y-value
+ *              of the mid-point on each curve, and subtract the sampled
+ *              curve value from this value.  This is the vertical
+ *              disparity at sampled points along each curve.
+ *          (c) Fit a LS quadratic to each set of vertically aligned
+ *              disparity samples.  This smooths the disparity values
+ *              in the vertical direction.  Then resample at the same
+ *              regular interval.  We now have a regular grid of smoothed
+ *              vertical disparity valuels.
+ *      (5) Once the sampled vertical disparity array is found, it can be
+ *          interpolated to get a full resolution vertical disparity map.
+ *          This can be applied directly to the src image pixels
+ *          to dewarp the image in the vertical direction, making
+ *          all textlines horizontal.  Likewise, the horizontal
+ *          disparity array is used to left- and right-align the
+ *          longest textlines.
+ * 
+ */ +l_ok +dewarpBuildPageModel(L_DEWARP *dew, + const char *debugfile) +{ +l_int32 linecount, ntop, nbot, ytop, ybot, ret; +PIX *pixs, *pix1, *pix2, *pix3; +PTA *pta; +PTAA *ptaa1, *ptaa2; + + PROCNAME("dewarpBuildPageModel"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + + dew->debug = (debugfile) ? 1 : 0; + dew->vsuccess = dew->hsuccess = 0; + pixs = dew->pixs; + if (debugfile) { + lept_rmdir("lept/dewmod"); /* erase previous images */ + lept_mkdir("lept/dewmod"); + pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); + pixWriteDebug("/tmp/lept/dewmod/0010.png", pixs, IFF_PNG); + } + + /* Make initial estimate of centers of textlines */ + ptaa1 = dewarpGetTextlineCenters(pixs, debugfile || DEBUG_TEXTLINE_CENTERS); + if (!ptaa1) { + L_WARNING("textline centers not found; model not built\n", procName); + return 1; + } + if (debugfile) { + pix1 = pixConvertTo32(pixs); + pta = generatePtaFilledCircle(1); + pix2 = pixGenerateFromPta(pta, 5, 5); + pix3 = pixDisplayPtaaPattern(NULL, pix1, ptaa1, pix2, 2, 2); + pixWriteDebug("/tmp/lept/dewmod/0020.png", pix3, IFF_PNG); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + ptaDestroy(&pta); + } + + /* Remove all lines that are not at least 0.8 times the length + * of the longest line. */ + ptaa2 = dewarpRemoveShortLines(pixs, ptaa1, 0.8, + debugfile || DEBUG_SHORT_LINES); + if (debugfile) { + pix1 = pixConvertTo32(pixs); + pta = generatePtaFilledCircle(1); + pix2 = pixGenerateFromPta(pta, 5, 5); + pix3 = pixDisplayPtaaPattern(NULL, pix1, ptaa2, pix2, 2, 2); + pixWriteDebug("/tmp/lept/dewmod/0030.png", pix3, IFF_PNG); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + ptaDestroy(&pta); + } + ptaaDestroy(&ptaa1); + + /* Verify that there are sufficient "long" lines */ + linecount = ptaaGetCount(ptaa2); + if (linecount < dew->minlines) { + ptaaDestroy(&ptaa2); + L_WARNING("linecount %d < min req'd number of lines (%d) for model\n", + procName, linecount, dew->minlines); + return 1; + } + + /* Verify that the lines have a reasonable coverage of the + * vertical extent of the page. */ + if (dewarpIsLineCoverageValid(ptaa2, pixGetHeight(pixs), + &ntop, &nbot, &ytop, &ybot) == FALSE) { + ptaaDestroy(&ptaa2); + L_WARNING("invalid line coverage: ntop = %d, nbot = %d;" + " spanning [%d ... %d] in height %d\n", procName, + ntop, nbot, ytop, ybot, pixGetHeight(pixs)); + return 1; + } + + /* Get the sampled vertical disparity from the textline centers. + * The disparity array will push pixels vertically so that each + * textline is flat and centered at the y-position of the mid-point. */ + if (dewarpFindVertDisparity(dew, ptaa2, 0) != 0) { + L_WARNING("vertical disparity not built\n", procName); + ptaaDestroy(&ptaa2); + return 1; + } + + /* Get the sampled horizontal disparity from the left and right + * edges of the text. The disparity array will expand the image + * linearly outward to align the text edges vertically. + * Do this even if useboth == 0; we still calculate it even + * if we don't plan to use it. */ + if ((ret = dewarpFindHorizDisparity(dew, ptaa2)) == 0) + L_INFO("hsuccess = 1\n", procName); + + /* Debug output */ + if (debugfile) { + dewarpPopulateFullRes(dew, NULL, 0, 0); + pix1 = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); + pixWriteDebug("/tmp/lept/dewmod/0060.png", pix1, IFF_PNG); + pixDisplay(pix1, 1000, 0); + pixDestroy(&pix1); + if (ret == 0) { + pix1 = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); + pixWriteDebug("/tmp/lept/dewmod/0070.png", pix1, IFF_PNG); + pixDisplay(pix1, 1000, 0); + pixDestroy(&pix1); + } + convertFilesToPdf("/tmp/lept/dewmod", NULL, 135, 1.0, 0, 0, + "Dewarp Build Model", debugfile); + fprintf(stderr, "pdf file: %s\n", debugfile); + } + + ptaaDestroy(&ptaa2); + return 0; +} + + +/*! + * \brief dewarpFindVertDisparity() + * + * \param[in] dew + * \param[in] ptaa unsmoothed lines, not vertically ordered + * \param[in] rotflag 0 if using dew->pixs; 1 if rotated by 90 degrees cw + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This starts with points along the centers of textlines.
+ *          It does quadratic fitting (and smoothing), first along the
+ *          lines and then in the vertical direction, to generate
+ *          the sampled vertical disparity map.  This can then be
+ *          interpolated to full resolution and used to remove
+ *          the vertical line warping.
+ *      (2) Use %rotflag == 1 if you are dewarping vertical lines, as
+ *          is done in dewarpBuildLineModel().  The usual case is for
+ *          %rotflag == 0.
+ *      (3) Note that this builds a vertical disparity model (VDM), but
+ *          does not check it against constraints for validity.
+ *          Constraint checking is done after building the models,
+ *          and before inserting reference models.
+ *      (4) This sets the vsuccess flag to 1 on success.
+ *      (5) Pix debug output goes to /tmp/dewvert/ for collection into
+ *          a pdf.  Non-pix debug output goes to /tmp.
+ * 
+ */ +l_ok +dewarpFindVertDisparity(L_DEWARP *dew, + PTAA *ptaa, + l_int32 rotflag) +{ +l_int32 i, j, nlines, npts, nx, ny, sampling; +l_float32 c0, c1, c2, x, y, midy, val, medval, meddev, minval, maxval; +l_float32 *famidys; +NUMA *nax, *nafit, *nacurve0, *nacurve1, *nacurves; +NUMA *namidy, *namidys, *namidysi; +PIX *pix1, *pix2, *pixcirc, *pixdb; +PTA *pta, *ptad, *ptacirc; +PTAA *ptaa0, *ptaa1, *ptaa2, *ptaa3, *ptaa4, *ptaa5, *ptaat; +FPIX *fpix; + + PROCNAME("dewarpFindVertDisparity"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + dew->vsuccess = 0; + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + if (dew->debug) L_INFO("finding vertical disparity\n", procName); + + /* Do quadratic fit to smooth each line. A single quadratic + * over the entire width of the line appears to be sufficient. + * Quartics tend to overfit to noise. Each line is thus + * represented by three coefficients: y(x) = c2 * x^2 + c1 * x + c0. + * Using the coefficients, sample each fitted curve uniformly + * across the full width of the image. The result is in ptaa0. */ + sampling = dew->sampling; + nx = (rotflag) ? dew->ny : dew->nx; + ny = (rotflag) ? dew->nx : dew->ny; + nlines = ptaaGetCount(ptaa); + dew->nlines = nlines; + ptaa0 = ptaaCreate(nlines); + nacurve0 = numaCreate(nlines); /* stores curvature coeff c2 */ + pixdb = (rotflag) ? pixRotateOrth(dew->pixs, 1) : pixClone(dew->pixs); + for (i = 0; i < nlines; i++) { /* for each line */ + pta = ptaaGetPta(ptaa, i, L_CLONE); + ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); + numaAddNumber(nacurve0, c2); + ptad = ptaCreate(nx); + for (j = 0; j < nx; j++) { /* uniformly sampled in x */ + x = j * sampling; + applyQuadraticFit(c2, c1, c0, x, &y); + ptaAddPt(ptad, x, y); + } + ptaaAddPta(ptaa0, ptad, L_INSERT); + ptaDestroy(&pta); + } + if (dew->debug) { + lept_mkdir("lept/dewarp"); + lept_mkdir("lept/dewdebug"); + lept_mkdir("lept/dewmod"); + ptaat = ptaaCreate(nlines); + for (i = 0; i < nlines; i++) { + pta = ptaaGetPta(ptaa, i, L_CLONE); + ptaGetArrays(pta, &nax, NULL); + ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit); + ptad = ptaCreateFromNuma(nax, nafit); + ptaaAddPta(ptaat, ptad, L_INSERT); + ptaDestroy(&pta); + numaDestroy(&nax); + numaDestroy(&nafit); + } + pix1 = pixConvertTo32(pixdb); + pta = generatePtaFilledCircle(1); + pixcirc = pixGenerateFromPta(pta, 5, 5); + pix2 = pixDisplayPtaaPattern(NULL, pix1, ptaat, pixcirc, 2, 2); + pixWriteDebug("/tmp/lept/dewmod/0041.png", pix2, IFF_PNG); + pixDestroy(&pix1); + pixDestroy(&pix2); + ptaDestroy(&pta); + pixDestroy(&pixcirc); + ptaaDestroy(&ptaat); + } + + /* Remove lines with outlier curvatures. + * Note that this is just looking for internal consistency in + * the line curvatures. It is not rejecting lines based on + * the magnitude of the curvature. That is done when constraints + * are applied for valid models. */ + numaGetMedianDevFromMedian(nacurve0, &medval, &meddev); + L_INFO("\nPage %d\n", procName, dew->pageno); + L_INFO("Pass 1: Curvature: medval = %f, meddev = %f\n", + procName, medval, meddev); + ptaa1 = ptaaCreate(nlines); + nacurve1 = numaCreate(nlines); + for (i = 0; i < nlines; i++) { /* for each line */ + numaGetFValue(nacurve0, i, &val); + if (L_ABS(val - medval) > 7.0 * meddev) /* TODO: reduce to ~ 3.0 */ + continue; + pta = ptaaGetPta(ptaa0, i, L_CLONE); + ptaaAddPta(ptaa1, pta, L_INSERT); + numaAddNumber(nacurve1, val); + } + nlines = ptaaGetCount(ptaa1); + numaDestroy(&nacurve0); + + /* Save the min and max curvature (in micro-units) */ + numaGetMin(nacurve1, &minval, NULL); + numaGetMax(nacurve1, &maxval, NULL); + dew->mincurv = lept_roundftoi(1000000. * minval); + dew->maxcurv = lept_roundftoi(1000000. * maxval); + L_INFO("Pass 2: Min/max curvature = (%d, %d)\n", procName, + dew->mincurv, dew->maxcurv); + + /* Find and save the y values at the mid-points in each curve. + * If the slope is zero anywhere, it will typically be here. */ + namidy = numaCreate(nlines); + for (i = 0; i < nlines; i++) { + pta = ptaaGetPta(ptaa1, i, L_CLONE); + npts = ptaGetCount(pta); + ptaGetPt(pta, npts / 2, NULL, &midy); + numaAddNumber(namidy, midy); + ptaDestroy(&pta); + } + + /* Sort the lines in ptaa1c by their vertical position, going down */ + namidysi = numaGetSortIndex(namidy, L_SORT_INCREASING); + namidys = numaSortByIndex(namidy, namidysi); + nacurves = numaSortByIndex(nacurve1, namidysi); + numaDestroy(&dew->namidys); /* in case previously made */ + numaDestroy(&dew->nacurves); + dew->namidys = namidys; + dew->nacurves = nacurves; + ptaa2 = ptaaSortByIndex(ptaa1, namidysi); + numaDestroy(&namidy); + numaDestroy(&nacurve1); + numaDestroy(&namidysi); + if (dew->debug) { + numaWriteDebug("/tmp/lept/dewdebug/midys.na", namidys); + numaWriteDebug("/tmp/lept/dewdebug/curves.na", nacurves); + pix1 = pixConvertTo32(pixdb); + ptacirc = generatePtaFilledCircle(5); + pixcirc = pixGenerateFromPta(ptacirc, 11, 11); + srand(3); + pixDisplayPtaaPattern(pix1, pix1, ptaa2, pixcirc, 5, 5); + srand(3); /* use the same colors for text and reference lines */ + pixRenderMidYs(pix1, namidys, 2); + pix2 = (rotflag) ? pixRotateOrth(pix1, 3) : pixClone(pix1); + pixWriteDebug("/tmp/lept/dewmod/0042.png", pix2, IFF_PNG); + pixDisplay(pix2, 0, 0); + ptaDestroy(&ptacirc); + pixDestroy(&pixcirc); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + pixDestroy(&pixdb); + + /* Convert the sampled points in ptaa2 to a sampled disparity with + * with respect to the y value at the mid point in the curve. + * The disparity is the distance the point needs to move; + * plus is downward. */ + ptaa3 = ptaaCreate(nlines); + for (i = 0; i < nlines; i++) { + pta = ptaaGetPta(ptaa2, i, L_CLONE); + numaGetFValue(namidys, i, &midy); + ptad = ptaCreate(nx); + for (j = 0; j < nx; j++) { + ptaGetPt(pta, j, &x, &y); + ptaAddPt(ptad, x, midy - y); + } + ptaaAddPta(ptaa3, ptad, L_INSERT); + ptaDestroy(&pta); + } + if (dew->debug) { + ptaaWriteDebug("/tmp/lept/dewdebug/ptaa3.ptaa", ptaa3, 0); + } + + /* Generate ptaa4 by taking vertical 'columns' from ptaa3. + * We want to fit the vertical disparity on the column to the + * vertical position of the line, which we call 'y' here and + * obtain from namidys. So each pta in ptaa4 is the set of + * vertical disparities down a column of points. The columns + * in ptaa4 are equally spaced in x. */ + ptaa4 = ptaaCreate(nx); + famidys = numaGetFArray(namidys, L_NOCOPY); + for (j = 0; j < nx; j++) { + pta = ptaCreate(nlines); + for (i = 0; i < nlines; i++) { + y = famidys[i]; + ptaaGetPt(ptaa3, i, j, NULL, &val); /* disparity value */ + ptaAddPt(pta, y, val); + } + ptaaAddPta(ptaa4, pta, L_INSERT); + } + if (dew->debug) { + ptaaWriteDebug("/tmp/lept/dewdebug/ptaa4.ptaa", ptaa4, 0); + } + + /* Do quadratic fit vertically on each of the pixel columns + * in ptaa4, for the vertical displacement (which identifies the + * src pixel(s) for each dest pixel) as a function of y (the + * y value of the mid-points for each line). Then generate + * ptaa5 by sampling the fitted vertical displacement on a + * regular grid in the vertical direction. Each pta in ptaa5 + * gives the vertical displacement for regularly sampled y values + * at a fixed x. */ + ptaa5 = ptaaCreate(nx); /* uniformly sampled across full height of image */ + for (j = 0; j < nx; j++) { /* for each column */ + pta = ptaaGetPta(ptaa4, j, L_CLONE); + ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); + ptad = ptaCreate(ny); + for (i = 0; i < ny; i++) { /* uniformly sampled in y */ + y = i * sampling; + applyQuadraticFit(c2, c1, c0, y, &val); + ptaAddPt(ptad, y, val); + } + ptaaAddPta(ptaa5, ptad, L_INSERT); + ptaDestroy(&pta); + } + if (dew->debug) { + ptaaWriteDebug("/tmp/lept/dewdebug/ptaa5.ptaa", ptaa5, 0); + convertFilesToPdf("/tmp/lept/dewmod", "004", 135, 1.0, 0, 0, + "Dewarp Vert Disparity", + "/tmp/lept/dewarp/vert_disparity.pdf"); + fprintf(stderr, "pdf file: /tmp/lept/dewarp/vert_disparity.pdf\n"); + } + + /* Save the result in a fpix at the specified subsampling */ + fpix = fpixCreate(nx, ny); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + ptaaGetPt(ptaa5, j, i, NULL, &val); + fpixSetPixel(fpix, j, i, val); + } + } + dew->sampvdispar = fpix; + dew->vsuccess = 1; + + ptaaDestroy(&ptaa0); + ptaaDestroy(&ptaa1); + ptaaDestroy(&ptaa2); + ptaaDestroy(&ptaa3); + ptaaDestroy(&ptaa4); + ptaaDestroy(&ptaa5); + return 0; +} + + +/*! + * \brief dewarpFindHorizDisparity() + * + * \param[in] dew + * \param[in] ptaa unsmoothed lines, not vertically ordered + * \return 0 if OK, 1 if horizontal disparity array is not built, or on error + * + *
+ * Notes:
+ *      (1) This builds a horizontal disparity model (HDM), but
+ *          does not check it against constraints for validity.
+ *          Constraint checking is done at rendering time.
+ *      (2) Horizontal disparity is not required for a successful model;
+ *          only the vertical disparity is required.  This will not be
+ *          called if the function to build the vertical disparity fails.
+ *      (3) This sets the hsuccess flag to 1 on success.
+ *      (4) Internally in ptal1, ptar1, ptal2, ptar2: x and y are reversed,
+ *          so the 'y' value is horizontal distance across the image width.
+ *      (5) Debug output goes to /tmp/lept/dewmod/ for collection into a pdf.
+ * 
+ */ +l_ok +dewarpFindHorizDisparity(L_DEWARP *dew, + PTAA *ptaa) +{ +l_int32 i, j, h, nx, ny, sampling, ret; +l_float32 c0, c1, cl0, cl1, cl2, cr0, cr1, cr2; +l_float32 x, y, refl, refr; +l_float32 val, mederr; +NUMA *nald, *nard; +PIX *pix1; +PTA *ptal1, *ptar1; /* left/right end points of lines; initial */ +PTA *ptal2, *ptar2; /* left/right end points; after filtering */ +PTA *ptal3, *ptar3; /* left and right block, fitted, uniform spacing */ +PTA *pta, *ptat, *pta1, *pta2; +PTAA *ptaah; +FPIX *fpix; + + PROCNAME("dewarpFindHorizDisparity"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + dew->hsuccess = 0; + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + if (dew->debug) L_INFO("finding horizontal disparity\n", procName); + + /* Get the endpoints of the lines, and sort from top to bottom */ + h = pixGetHeight(dew->pixs); + ret = dewarpGetLineEndPoints(h, ptaa, &ptal1, &ptar1); + if (ret) { + L_INFO("Horiz disparity not built\n", procName); + return 1; + } + if (dew->debug) { + lept_mkdir("lept/dewdebug"); + lept_mkdir("lept/dewarp"); + ptaWriteDebug("/tmp/lept/dewdebug/endpts_left1.pta", ptal1, 1); + ptaWriteDebug("/tmp/lept/dewdebug/endpts_right1.pta", ptar1, 1); + } + + /* Filter the points by x-location to prevent 2-column images + * from getting confused about left and right endpoints. We + * require valid left points to not be farther than + * 0.20 * (remaining distance to the right edge of the image) + * to the right of the leftmost endpoint, and similarly for + * the right endpoints. (Note: x and y are reversed in the pta.) + * Also require end points to be near the medians in the + * upper and lower halves. */ + ret = dewarpFilterLineEndPoints(dew, ptal1, ptar1, &ptal2, &ptar2); + ptaDestroy(&ptal1); + ptaDestroy(&ptar1); + if (ret) { + L_INFO("Not enough filtered end points\n", procName); + return 1; + } + + /* Do a quadratic fit to the left and right endpoints of the + * longest lines. Each line is represented by 3 coefficients: + * x(y) = c2 * y^2 + c1 * y + c0. + * Using the coefficients, sample each fitted curve uniformly + * along the full height of the image. */ + sampling = dew->sampling; + nx = dew->nx; + ny = dew->ny; + + /* Fit the left side, using quadratic LSF on the set of long + * lines. It is not necessary to use the noisy LSF fit + * function, because we've removed outlier end points by + * selecting the long lines. Then uniformly sample along + * this fitted curve. */ + dewarpQuadraticLSF(ptal2, &cl2, &cl1, &cl0, &mederr); + dew->leftslope = lept_roundftoi(1000. * cl1); /* milli-units */ + dew->leftcurv = lept_roundftoi(1000000. * cl2); /* micro-units */ + L_INFO("Left quad LSF median error = %5.2f\n", procName, mederr); + L_INFO("Left edge slope = %d\n", procName, dew->leftslope); + L_INFO("Left edge curvature = %d\n", procName, dew->leftcurv); + ptal3 = ptaCreate(ny); + for (i = 0; i < ny; i++) { /* uniformly sampled in y */ + y = i * sampling; + applyQuadraticFit(cl2, cl1, cl0, y, &x); + ptaAddPt(ptal3, x, y); + } + + /* Fit the right side in the same way. */ + dewarpQuadraticLSF(ptar2, &cr2, &cr1, &cr0, &mederr); + dew->rightslope = lept_roundftoi(1000.0 * cr1); /* milli-units */ + dew->rightcurv = lept_roundftoi(1000000. * cr2); /* micro-units */ + L_INFO("Right quad LSF median error = %5.2f\n", procName, mederr); + L_INFO("Right edge slope = %d\n", procName, dew->rightslope); + L_INFO("Right edge curvature = %d\n", procName, dew->rightcurv); + ptar3 = ptaCreate(ny); + for (i = 0; i < ny; i++) { /* uniformly sampled in y */ + y = i * sampling; + applyQuadraticFit(cr2, cr1, cr0, y, &x); + ptaAddPt(ptar3, x, y); + } + + if (dew->debug) { + PTA *ptalft, *ptarft; + h = pixGetHeight(dew->pixs); + pta1 = ptaCreate(h); + pta2 = ptaCreate(h); + for (i = 0; i < h; i++) { + applyQuadraticFit(cl2, cl1, cl0, i, &x); + ptaAddPt(pta1, x, i); + applyQuadraticFit(cr2, cr1, cr0, i, &x); + ptaAddPt(pta2, x, i); + } + pix1 = pixDisplayPta(NULL, dew->pixs, pta1); + pixDisplayPta(pix1, pix1, pta2); + pixRenderHorizEndPoints(pix1, ptal2, ptar2, 0xff000000); + pixDisplay(pix1, 600, 800); + pixWriteDebug("/tmp/lept/dewmod/0051.png", pix1, IFF_PNG); + pixDestroy(&pix1); + + pix1 = pixDisplayPta(NULL, dew->pixs, pta1); + pixDisplayPta(pix1, pix1, pta2); + ptalft = ptaTranspose(ptal3); + ptarft = ptaTranspose(ptar3); + pixRenderHorizEndPoints(pix1, ptalft, ptarft, 0x0000ff00); + pixDisplay(pix1, 800, 800); + pixWriteDebug("/tmp/lept/dewmod/0052.png", pix1, IFF_PNG); + convertFilesToPdf("/tmp/lept/dewmod", "005", 135, 1.0, 0, 0, + "Dewarp Horiz Disparity", + "/tmp/lept/dewarp/horiz_disparity.pdf"); + fprintf(stderr, "pdf file: /tmp/lept/dewarp/horiz_disparity.pdf\n"); + pixDestroy(&pix1); + ptaDestroy(&pta1); + ptaDestroy(&pta2); + ptaDestroy(&ptalft); + ptaDestroy(&ptarft); + } + + /* Find the x value at the midpoints (in y) of the two vertical lines, + * ptal3 and ptar3. These are the reference values for each of the + * lines. Then use the difference between the these midpoint + * values and the actual x coordinates of the lines to represent + * the horizontal disparity (nald, nard) on the vertical lines + * for the sampled y values. */ + ptaGetPt(ptal3, ny / 2, &refl, NULL); + ptaGetPt(ptar3, ny / 2, &refr, NULL); + nald = numaCreate(ny); + nard = numaCreate(ny); + for (i = 0; i < ny; i++) { + ptaGetPt(ptal3, i, &x, NULL); + numaAddNumber(nald, refl - x); + ptaGetPt(ptar3, i, &x, NULL); + numaAddNumber(nard, refr - x); + } + + /* Now for each pair of sampled values of the two lines (at the + * same value of y), do a linear interpolation to generate + * the horizontal disparity on all sampled points between them. */ + ptaah = ptaaCreate(ny); + for (i = 0; i < ny; i++) { + pta = ptaCreate(2); + numaGetFValue(nald, i, &val); + ptaAddPt(pta, refl, val); + numaGetFValue(nard, i, &val); + ptaAddPt(pta, refr, val); + ptaGetLinearLSF(pta, &c1, &c0, NULL); /* horiz disparity along line */ + ptat = ptaCreate(nx); + for (j = 0; j < nx; j++) { + x = j * sampling; + applyLinearFit(c1, c0, x, &val); + ptaAddPt(ptat, x, val); + } + ptaaAddPta(ptaah, ptat, L_INSERT); + ptaDestroy(&pta); + } + numaDestroy(&nald); + numaDestroy(&nard); + + /* Save the result in a fpix at the specified subsampling */ + fpix = fpixCreate(nx, ny); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + ptaaGetPt(ptaah, i, j, NULL, &val); + fpixSetPixel(fpix, j, i, val); + } + } + dew->samphdispar = fpix; + dew->hsuccess = 1; + ptaDestroy(&ptal2); + ptaDestroy(&ptar2); + ptaDestroy(&ptal3); + ptaDestroy(&ptar3); + ptaaDestroy(&ptaah); + return 0; +} + + +/*! + * \brief dewarpGetTextlineCenters() + * + * \param[in] pixs 1 bpp + * \param[in] debugflag 1 for debug output + * \return ptaa of center values of textlines + * + *
+ * Notes:
+ *      (1) This in general does not have a point for each value
+ *          of x, because there will be gaps between words.
+ *          It doesn't matter because we will fit a quadratic to the
+ *          points that we do have.
+ * 
+ */ +PTAA * +dewarpGetTextlineCenters(PIX *pixs, + l_int32 debugflag) +{ +char buf[64]; +l_int32 i, w, h, bx, by, nsegs, csize1, csize2; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixa1, *pixa2; +PTA *pta; +PTAA *ptaa; + + PROCNAME("dewarpGetTextlineCenters"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + + if (debugflag) L_INFO("finding text line centers\n", procName); + + /* Filter to solidify the text lines within the x-height region, + * and to remove most of the ascenders and descenders. + * We start with a small vertical opening to remove noise beyond + * the line that can cause an error in the line end points. + * The small closing (csize1) is used to bridge the gaps between + * letters. The large closing (csize2) bridges the gaps between + * words; using 1/30 of the page width usually suffices. */ + csize1 = L_MAX(15, w / 80); + csize2 = L_MAX(40, w / 30); + snprintf(buf, sizeof(buf), "o1.3 + c%d.1 + o%d.1 + c%d.1", + csize1, csize1, csize2); + pix1 = pixMorphSequence(pixs, buf, 0); + + /* Remove the components (e.g., embedded images) that have + * long vertical runs (>= 50 pixels). You can't use bounding + * boxes because connected component b.b. of lines can be quite + * tall due to slope and curvature. */ + pix2 = pixMorphSequence(pix1, "e1.50", 0); /* seed */ + pixSeedfillBinary(pix2, pix2, pix1, 8); /* tall components */ + pixXor(pix2, pix2, pix1); /* remove tall */ + + if (debugflag) { + lept_mkdir("lept/dewmod"); + pixWriteDebug("/tmp/lept/dewmod/0011.tif", pix1, IFF_TIFF_G4); + pixDisplayWithTitle(pix1, 0, 600, "pix1", 1); + pixWriteDebug("/tmp/lept/dewmod/0012.tif", pix2, IFF_TIFF_G4); + pixDisplayWithTitle(pix2, 0, 800, "pix2", 1); + } + pixDestroy(&pix1); + + /* Get the 8-connected components ... */ + boxa = pixConnComp(pix2, &pixa1, 8); + pixDestroy(&pix2); + boxaDestroy(&boxa); + if (pixaGetCount(pixa1) == 0) { + pixaDestroy(&pixa1); + return NULL; + } + + /* ... and remove the short width and very short height c.c */ + pixa2 = pixaSelectBySize(pixa1, 100, 4, L_SELECT_IF_BOTH, + L_SELECT_IF_GT, NULL); + if ((nsegs = pixaGetCount(pixa2)) == 0) { + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + return NULL; + } + if (debugflag) { + pix2 = pixaDisplay(pixa2, w, h); + pixWriteDebug("/tmp/lept/dewmod/0013.tif", pix2, IFF_TIFF_G4); + pixDisplayWithTitle(pix2, 0, 1000, "pix2", 1); + pixDestroy(&pix2); + } + + /* For each c.c., get the weighted center of each vertical column. + * The result is a set of points going approximately through + * the center of the x-height part of the text line. */ + ptaa = ptaaCreate(nsegs); + for (i = 0; i < nsegs; i++) { + pixaGetBoxGeometry(pixa2, i, &bx, &by, NULL, NULL); + pix2 = pixaGetPix(pixa2, i, L_CLONE); + pta = dewarpGetMeanVerticals(pix2, bx, by); + ptaaAddPta(ptaa, pta, L_INSERT); + pixDestroy(&pix2); + } + if (debugflag) { + pix1 = pixCreateTemplate(pixs); + pix2 = pixDisplayPtaa(pix1, ptaa); + pixWriteDebug("/tmp/lept/dewmod/0014.tif", pix2, IFF_PNG); + pixDisplayWithTitle(pix2, 0, 1200, "pix3", 1); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + return ptaa; +} + + +/*! + * \brief dewarpGetMeanVerticals() + * + * \param[in] pixs 1 bpp, single c.c. + * \param[in] x,y location of UL corner of pixs, relative to page image + * \return pta (mean y-values in component for each x-value, + * both translated by (x,y + */ +static PTA * +dewarpGetMeanVerticals(PIX *pixs, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, i, j, wpl, sum, count; +l_uint32 *line, *data; +PTA *pta; + + PROCNAME("pixGetMeanVerticals"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + pta = ptaCreate(w); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (j = 0; j < w; j++) { + line = data; + sum = count = 0; + for (i = 0; i < h; i++) { + if (GET_DATA_BIT(line, j) == 1) { + sum += i; + count += 1; + } + line += wpl; + } + if (count == 0) continue; + ptaAddPt(pta, x + j, y + (sum / count)); + } + + return pta; +} + + +/*! + * \brief dewarpRemoveShortLines() + * + * \param[in] pixs 1 bpp + * \param[in] ptaas input lines + * \param[in] fract minimum fraction of longest line to keep + * \param[in] debugflag + * \return ptaad containing only lines of sufficient length, + * or NULL on error + */ +PTAA * +dewarpRemoveShortLines(PIX *pixs, + PTAA *ptaas, + l_float32 fract, + l_int32 debugflag) +{ +l_int32 w, n, i, index, maxlen, len; +l_float32 minx, maxx; +NUMA *na, *naindex; +PIX *pix1, *pix2; +PTA *pta; +PTAA *ptaad; + + PROCNAME("dewarpRemoveShortLines"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!ptaas) + return (PTAA *)ERROR_PTR("ptaas undefined", procName, NULL); + + pixGetDimensions(pixs, &w, NULL, NULL); + n = ptaaGetCount(ptaas); + ptaad = ptaaCreate(n); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pta = ptaaGetPta(ptaas, i, L_CLONE); + ptaGetRange(pta, &minx, &maxx, NULL, NULL); + numaAddNumber(na, maxx - minx + 1); + ptaDestroy(&pta); + } + + /* Sort by length and find all that are long enough */ + naindex = numaGetSortIndex(na, L_SORT_DECREASING); + numaGetIValue(naindex, 0, &index); + numaGetIValue(na, index, &maxlen); + if (maxlen < 0.5 * w) + L_WARNING("lines are relatively short\n", procName); + pta = ptaaGetPta(ptaas, index, L_CLONE); + ptaaAddPta(ptaad, pta, L_INSERT); + for (i = 1; i < n; i++) { + numaGetIValue(naindex, i, &index); + numaGetIValue(na, index, &len); + if (len < fract * maxlen) break; + pta = ptaaGetPta(ptaas, index, L_CLONE); + ptaaAddPta(ptaad, pta, L_INSERT); + } + + if (debugflag) { + pix1 = pixCopy(NULL, pixs); + pix2 = pixDisplayPtaa(pix1, ptaad); + pixDisplayWithTitle(pix2, 0, 200, "pix4", 1); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + numaDestroy(&na); + numaDestroy(&naindex); + return ptaad; +} + + +/*! + * \brief dewarpGetLineEndPoints() + * + * \param[in] h height of pixs + * \param[in] ptaa lines + * \param[out] pptal left end points of each line + * \param[out] pptar right end points of each line + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) We require that the set of end points extends over 45% of the
+ *          height of the input image, to insure good coverage and
+ *          avoid extrapolating the curvature too far beyond the
+ *          actual textlines.  Large extrapolations are particularly
+ *          dangerous if used as a reference model.  We also require
+ *          at least 10 lines of text.
+ *      (2) We sort the lines from top to bottom (sort by x in the ptas).
+ *      (3) For fitting the endpoints, x = f(y), we transpose x and y.
+ *          Thus all these ptas have x and y swapped!
+ * 
+ */ +static l_int32 +dewarpGetLineEndPoints(l_int32 h, + PTAA *ptaa, + PTA **pptal, + PTA **pptar) +{ +l_int32 i, n, npt, x, y; +l_float32 miny, maxy, ratio; +PTA *pta, *ptal1, *ptar1; + + PROCNAME("dewarpGetLineEndPoints"); + + if (!pptal || !pptar) + return ERROR_INT("&ptal and &ptar not both defined", procName, 1); + *pptal = *pptar = NULL; + if (!ptaa) + return ERROR_INT("ptaa undefined", procName, 1); + + /* Are there at least 10 lines? */ + n = ptaaGetCount(ptaa); + if (n < MinLinesForHoriz1) { + L_INFO("only %d lines; too few\n", procName, n); + return 1; + } + + /* Extract the line end points, and transpose x and y values */ + ptal1 = ptaCreate(n); + ptar1 = ptaCreate(n); + for (i = 0; i < n; i++) { + pta = ptaaGetPta(ptaa, i, L_CLONE); + ptaGetIPt(pta, 0, &x, &y); + ptaAddPt(ptal1, y, x); /* transpose */ + npt = ptaGetCount(pta); + ptaGetIPt(pta, npt - 1, &x, &y); + ptaAddPt(ptar1, y, x); /* transpose */ + ptaDestroy(&pta); + } + + /* Use the min and max of the y value on the left side. */ + ptaGetRange(ptal1, &miny, &maxy, NULL, NULL); + ratio = (maxy - miny) / (l_float32)h; + if (ratio < MinRatioLinesToHeight) { + L_INFO("ratio lines to height, %f, too small\n", procName, ratio); + ptaDestroy(&ptal1); + ptaDestroy(&ptar1); + return 1; + } + + /* Sort from top to bottom */ + *pptal = ptaSort(ptal1, L_SORT_BY_X, L_SORT_INCREASING, NULL); + *pptar = ptaSort(ptar1, L_SORT_BY_X, L_SORT_INCREASING, NULL); + ptaDestroy(&ptal1); + ptaDestroy(&ptar1); + return 0; +} + + +/*! + * \brief dewarpFilterLineEndPoints() + * + * \param[in] dew + * \param[in] ptal input left end points of each line + * \param[in] ptar input right end points of each line + * \param[out] pptalf filtered left end points + * \param[out] pptarf filtered right end points + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) Avoid confusion with multiple columns by requiring that line
+ *          end points be close enough to leftmost and rightmost end points.
+ *          Must have at least 8 points on left and right after this step.
+ *      (2) Apply second filtering step, find the median positions in
+ *          top and bottom halves, and removing end points that are
+ *          displaced too much from these in the x direction.
+ *          Must have at least 6 points on left and right after this step.
+ *      (3) Reminder: x and y in the pta are transposed; think x = f(y).
+ * 
+ */ +static l_int32 +dewarpFilterLineEndPoints(L_DEWARP *dew, + PTA *ptal, + PTA *ptar, + PTA **pptalf, + PTA **pptarf) +{ +l_int32 w, i, n; +l_float32 ymin, ymax, xvall, xvalr, yvall, yvalr; +PTA *ptal1, *ptar1, *ptal2, *ptar2; + + PROCNAME("dewarpFilterLineEndPoints"); + if (!ptal || !ptar) + return ERROR_INT("ptal or ptar not defined", procName, 1); + *pptalf = *pptarf = NULL; + + /* First filter for lines near left and right margins */ + w = pixGetWidth(dew->pixs); + ptaGetMinMax(ptal, NULL, &ymin, NULL, NULL); + ptaGetMinMax(ptar, NULL, NULL, NULL, &ymax); + n = ptaGetCount(ptal); /* ptar is the same size; at least 10 */ + ptal1 = ptaCreate(n); + ptar1 = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(ptal, i, &xvall, &yvall); + ptaGetPt(ptar, i, &xvalr, &yvalr); + if (yvall < ymin + 0.20 * (w - ymin) && + yvalr > 0.80 * ymax) { + ptaAddPt(ptal1, xvall, yvall); + ptaAddPt(ptar1, xvalr, yvalr); + } + } + if (dew->debug) { + ptaWriteDebug("/tmp/lept/dewdebug/endpts_left2.pta", ptal1, 1); + ptaWriteDebug("/tmp/lept/dewdebug/endpts_right2.pta", ptar1, 1); + } + + n = L_MIN(ptaGetCount(ptal1), ptaGetCount(ptar1)); + if (n < MinLinesForHoriz1 - 2) { + ptaDestroy(&ptal1); + ptaDestroy(&ptar1); + L_INFO("First filter: only %d endpoints; needed 8\n", procName, n); + return 1; + } + + /* Remove outlier points */ + ptal2 = dewarpRemoveBadEndPoints(w, ptal1); + ptar2 = dewarpRemoveBadEndPoints(w, ptar1); + ptaDestroy(&ptal1); + ptaDestroy(&ptar1); + if (!ptal2 || !ptar2) { + ptaDestroy(&ptal2); + ptaDestroy(&ptar2); + L_INFO("Second filter: too few endpoints left after outliers removed\n", + procName); + return 1; + } + if (dew->debug) { + ptaWriteDebug("/tmp/lept/dewdebug/endpts_left3.pta", ptal2, 1); + ptaWriteDebug("/tmp/lept/dewdebug/endpts_right3.pta", ptar2, 1); + } + + *pptalf = ptal2; + *pptarf = ptar2; + return 0; +} + + +/*! + * \brief dewarpRemoveBadEndPoints() + * + * \param[in] w width of input image + * \param[in] ptas left or right line end points + * \return ptad filtered left or right end points, or NULL on error. + * + *
+ * Notes:
+ *      (1) The input set is sorted by line position (x value).
+ *          Break into two (upper and lower); for each find the median
+ *          horizontal (y value), and remove all points farther than
+ *          a fraction of the image width from this.  Make sure each
+ *          part still has at least 3 points, and join the two sections
+ *          before returning.
+ *      (2) Reminder: x and y in the pta are transposed; think x = f(y).
+ * 
+ */ +static PTA * +dewarpRemoveBadEndPoints(l_int32 w, + PTA *ptas) +{ +l_int32 i, n, nu, nd; +l_float32 rval, xval, yval, delta; +PTA *ptau1, *ptau2, *ptad1, *ptad2; + + PROCNAME("dewarpRemoveBadEndPoints"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + delta = AllowedWidthFract * w; + n = ptaGetCount(ptas); /* will be at least 8 */ + + /* Check the upper half */ + ptau1 = ptaSelectRange(ptas, 0, n / 2); + ptaGetRankValue(ptau1, 0.5, NULL, L_SORT_BY_Y, &rval); + nu = ptaGetCount(ptau1); + ptau2 = ptaCreate(nu); + for (i = 0; i < nu; i++) { + ptaGetPt(ptau1, i, &xval, &yval); /* transposed */ + if (L_ABS(rval - yval) <= delta) + ptaAddPt(ptau2, xval, yval); + } + ptaDestroy(&ptau1); + if (ptaGetCount(ptau2) < MinLinesForHoriz2) { + ptaDestroy(&ptau2); + L_INFO("Second filter: upper set is too small after outliers removed\n", + procName); + return NULL; + } + + /* Check the lower half */ + ptad1 = ptaSelectRange(ptas, n / 2 + 1, -1); + ptaGetRankValue(ptad1, 0.5, NULL, L_SORT_BY_Y, &rval); + nd = ptaGetCount(ptad1); + ptad2 = ptaCreate(nd); + for (i = 0; i < nd; i++) { + ptaGetPt(ptad1, i, &xval, &yval); /* transposed */ + if (L_ABS(rval - yval) <= delta) + ptaAddPt(ptad2, xval, yval); + } + ptaDestroy(&ptad1); + if (ptaGetCount(ptad2) < MinLinesForHoriz2) { + ptaDestroy(&ptau2); + ptaDestroy(&ptad2); + L_INFO("Second filter: lower set is too small after outliers removed\n", + procName); + return NULL; + } + + ptaJoin(ptau2, ptad2, 0, -1); + ptaDestroy(&ptad2); + return ptau2; +} + + +/*! + * \brief dewarpIsLineCoverageValid() + * + * \param[in] ptaa of validated lines + * \param[in] h height of pix + * \param[out] pntop number of lines in top half + * \param[out] pnbot number of lines in bottom half + * \param[out] pytop location of top line + * \param[out] pybot location of bottom line + * \return 1 if coverage is valid, 0 if not or on error. + * + *
+ * Notes:
+ *      (1) The criterion for valid coverage is:
+ *          (a) there must be at least 4 lines in each half (top and bottom)
+ *              of the image.
+ *          (b) the coverage must be at least 50% of the image height
+ * 
+ */ +static l_int32 +dewarpIsLineCoverageValid(PTAA *ptaa, + l_int32 h, + l_int32 *pntop, + l_int32 *pnbot, + l_int32 *pytop, + l_int32 *pybot) +{ +l_int32 i, n, iy, both_halves, ntop, nbot, ytop, ybot, nmin; +l_float32 y, fraction; +NUMA *na; + + PROCNAME("dewarpIsLineCoverageValid"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 0); + if ((n = ptaaGetCount(ptaa)) == 0) + return ERROR_INT("ptaa empty", procName, 0); + if (h <= 0) + return ERROR_INT("invalid h", procName, 0); + if (!pntop || !pnbot) + return ERROR_INT("&ntop and &nbot not defined", procName, 0); + if (!pytop || !pybot) + return ERROR_INT("&ytop and &ybot not defined", procName, 0); + + na = numaCreate(n); + for (i = 0; i < n; i++) { + ptaaGetPt(ptaa, i, 0, NULL, &y); + numaAddNumber(na, y); + } + numaSort(na, na, L_SORT_INCREASING); + for (i = 0, ntop = 0; i < n; i++) { + numaGetIValue(na, i, &iy); + if (i == 0) ytop = iy; + if (i == n - 1) ybot = iy; + if (iy < 0.5 * h) + ntop++; + } + numaDestroy(&na); + nbot = n - ntop; + *pntop = ntop; + *pnbot = nbot; + *pytop = ytop; + *pybot = ybot; + nmin = 4; /* minimum number of lines required in each half */ + both_halves = (ntop >= nmin) && (nbot >= nmin); + fraction = (l_float32)(ybot - ytop) / (l_float32)h; + if (both_halves && fraction > 0.50) + return 1; + return 0; +} + + +/*! + * \brief dewarpQuadraticLSF() + * + * \param[in] ptad left or right end points of longest lines + * \param[out] pa coeff a of LSF: y = ax^2 + bx + c + * \param[out] pb coeff b of LSF: y = ax^2 + bx + c + * \param[out] pc coeff c of LSF: y = ax^2 + bx + c + * \param[out] pmederr [optional] median error + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This is used for finding the left or right sides of
+ *          the text block, computed as a quadratic curve.
+ *          Only the longest lines are input, so there are
+ *          no outliers.
+ *      (2) The ptas for the end points all have x and y swapped.
+ * 
+ */ +static l_int32 +dewarpQuadraticLSF(PTA *ptad, + l_float32 *pa, + l_float32 *pb, + l_float32 *pc, + l_float32 *pmederr) +{ +l_int32 i, n; +l_float32 x, y, xp, c0, c1, c2; +NUMA *naerr; + + PROCNAME("dewarpQuadraticLSF"); + + if (pmederr) *pmederr = 0.0; + if (!pa || !pb || !pc) + return ERROR_INT("not all ptrs are defined", procName, 1); + *pa = *pb = *pc = 0.0; + if (!ptad) + return ERROR_INT("ptad not defined", procName, 1); + + /* Fit to the longest lines */ + ptaGetQuadraticLSF(ptad, &c2, &c1, &c0, NULL); + *pa = c2; + *pb = c1; + *pc = c0; + + /* Optionally, find the median error */ + if (pmederr) { + n = ptaGetCount(ptad); + naerr = numaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(ptad, i, &y, &xp); + applyQuadraticFit(c2, c1, c0, y, &x); + numaAddNumber(naerr, L_ABS(x - xp)); + } + numaGetMedian(naerr, pmederr); + numaDestroy(&naerr); + } + return 0; +} + +/*----------------------------------------------------------------------* + * Build disparity model for slope near binding * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpFindHorizSlopeDisparity() + * + * \param[in] dew + * \param[in] pixb 1 bpp, with vert and horiz disparity removed + * \param[in] fractthresh threshold fractional difference in density + * \param[in] parity 0 if even page, 1 if odd page + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) %fractthresh is a threshold on the fractional difference in stroke
+ *          density between between left and right sides.  Process this
+ *          disparity only if the absolute value of the fractional
+ *          difference equals or exceeds this threshold.
+ *      (2) %parity indicates where the binding is: on the left for
+ *          %parity == 0 and on the right for %parity == 1.
+ *      (3) This takes a 1 bpp %pixb where both vertical and horizontal
+ *          disparity have been applied, so the text lines are straight and,
+ *          more importantly, the line end points are vertically aligned.
+ *          It estimates the foreshortening of the characters on the
+ *          binding side, and if significant, computes a one-dimensional
+ *          horizontal disparity function to compensate.
+ *      (4) The first attempt was to use the average width of the
+ *          connected components (c.c.) in vertical slices.  This does not work
+ *          reliably, because the horizontal compression of the text is
+ *          often accompanied by horizontal joining of c.c.
+ *      (5) We use the density of vertical strokes, measured by first using
+ *          a vertical opening, which improves the signal.  The result
+ *          is relatively insensitive to the size of the opening; we use
+ *          a 10-pixel opening.  The relative density is measured by
+ *          finding the number of c.c. in a full height sliding window
+ *          of width 50 pixels, and compute every 25 pixels.  Similar results
+ *          are obtained counting c.c. that either intersect the window
+ *          or are fully contained within it.
+ *      (6) Debug output goes to /tmp/lept/dewmod/ for collection into a pdf.
+ * 
+ */ +l_ok +dewarpFindHorizSlopeDisparity(L_DEWARP *dew, + PIX *pixb, + l_float32 fractthresh, + l_int32 parity) +{ +l_int32 i, j, x, n1, n2, nb, ne, count, w, h, ival, prev; +l_int32 istart, iend, first, last, x0, x1, nx, ny; +l_float32 fract, delta, sum, aveval, fval, del, denom; +l_float32 ca, cb, cc, cd, ce, y; +BOX *box; +BOXA *boxa1, *boxa2; +NUMA *na1, *na2, *na3, *na4, *nasum; +PIX *pix1; +PTA *pta1; +FPIX *fpix; + + PROCNAME("dewarpFindHorizSlopeDisparity"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + if (!dew->vvalid || !dew->hvalid) + return ERROR_INT("invalid vert or horiz disparity model", procName, 1); + if (!pixb || pixGetDepth(pixb) != 1) + return ERROR_INT("pixb not defined or not 1 bpp", procName, 1); + + if (dew->debug) L_INFO("finding slope horizontal disparity\n", procName); + + /* Find the bounding boxes of the vertical strokes; remove noise */ + pix1 = pixMorphSequence(pixb, "o1.10", 0); + pixDisplay(pix1, 100, 100); + boxa1 = pixConnCompBB(pix1, 4); + boxa2 = boxaSelectBySize(boxa1, 0, 5, L_SELECT_HEIGHT, L_SELECT_IF_GT, + NULL); + nb = boxaGetCount(boxa2); + fprintf(stderr, "number of components: %d\n", nb); + boxaDestroy(&boxa1); + + /* Estimate the horizontal density of vertical strokes */ + na1 = numaCreate(0); + numaSetParameters(na1, 0, 25); + pixGetDimensions(pixb, &w, &h, NULL); + for (x = 0; x + 50 < w; x += 25) { + box = boxCreate(x, 0, 50, h); + boxaContainedInBoxCount(boxa2, box, &count); + numaAddNumber(na1, count); + boxDestroy(&box); + } + if (dew->debug) { + lept_mkdir("lept/dew"); + gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/dew/0091", NULL); + lept_mv("/tmp/lept/dew/0091.png", "lept/dewmod", NULL, NULL); + pixWriteDebug("/tmp/lept/dewmod/0090.png", pix1, IFF_PNG); + } + pixDestroy(&pix1); + boxaDestroy(&boxa2); + + /* Find the left and right end local maxima; if the difference + * is small, quit. */ + n1 = numaGetCount(na1); + prev = 0; + istart = 0; + first = 0; + for (i = 0; i < n1; i++) { + numaGetIValue(na1, i, &ival); + if (ival >= prev) { + prev = ival; + continue; + } else { + first = prev; + istart = i - 1; + break; + } + } + prev = 0; + last = 0; + iend = n1 - 1; + for (i = n1 - 1; i >= 0; i--) { + numaGetIValue(na1, i, &ival); + if (ival >= prev) { + prev = ival; + continue; + } else { + last = prev; + iend = i + 1; + break; + } + } + na2 = numaClipToInterval(na1, istart, iend); + numaDestroy(&na1); + n2 = numaGetCount(na2); + delta = (parity == 0) ? last - first : first - last; + denom = L_MAX(1.0, (l_float32)(L_MIN(first, last))); + fract = (l_float32)delta / denom; + if (dew->debug) { + L_INFO("Slope-disparity: first = %d, last = %d, fract = %7.3f\n", + procName, first, last, fract); + gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/dew/0092", NULL); + lept_mv("/tmp/lept/dew/0092.png", "lept/dewmod", NULL, NULL); + } + if (fract < fractthresh) { + L_INFO("Small slope-disparity: first = %d, last = %d, fract = %7.3f\n", + procName, first, last, fract); + numaDestroy(&na2); + return 0; + } + + /* Find the density far from the binding, and normalize to 1. */ + ne = n2 - n2 % 2; + if (parity == 0) + numaGetSumOnInterval(na2, 0, ne / 2 - 1, &sum); + else /* parity == 1 */ + numaGetSumOnInterval(na2, ne / 2, ne - 1, &sum); + denom = L_MAX(1.0, (l_float32)(ne / 2)); + aveval = sum / denom; + na3 = numaMakeConstant(aveval, n2); + numaArithOp(na2, na2, na3, L_ARITH_DIVIDE); + numaDestroy(&na3); + if (dew->debug) { + L_INFO("Average background density: %5.1f\n", procName, aveval); + gplotSimple1(na2, GPLOT_PNG, "/tmp/lept/dew/0093", NULL); + lept_mv("/tmp/lept/dew/0093.png", "lept/dewmod", NULL, NULL); + } + + /* Fit the normalized density curve to a quartic */ + pta1 = numaConvertToPta1(na2); + ptaWriteStream(stderr, pta1, 0); +/* ptaGetQuadraticLSF(pta1, NULL, NULL, NULL, &na3); */ + ptaGetQuarticLSF(pta1, &ca, &cb, &cc, &cd, &ce, &na3); + ptaGetArrays(pta1, &na4, NULL); + if (dew->debug) { + gplotSimpleXY1(na4, na3, GPLOT_LINES, GPLOT_PNG, + "/tmp/lept/dew/0094", NULL); + lept_mv("/tmp/lept/dew/0094.png", "lept/dewmod", NULL, NULL); + } + ptaDestroy(&pta1); + + /* Integrate from the high point down to 1 (or v.v) to get the + * disparity needed to make the density constant. */ + nasum = numaMakeConstant(0, w); /* area under the curve above 1.0 */ + if (parity == 0) { + for (i = n2 - 1; i >= 0; i--) { + numaGetFValue(na3, i, &fval); + if (fval < 1.0) break; + } + numaGetIValue(na4, i + 1, &x0); + numaGetIValue(na4, n2 - 1, &x1); + numaSetParameters(nasum, x0, 1); + sum = 0.0; + for (x = x0; x < x1; x++) { + applyQuarticFit(ca, cb, cc, cd, ce, (l_float32)x, &y); + sum += (y - 1.0); + numaReplaceNumber(nasum, x, sum); + } + for (x = x1; x < w; x++) + numaReplaceNumber(nasum, x, sum); + } else { /* parity == 1 */ + for (i = 0; i < n2; i++) { + numaGetFValue(na3, i, &fval); + if (fval < 1.0) break; + } + numaGetIValue(na4, 0, &x0); + numaGetIValue(na4, i - 1, &x1); + numaSetParameters(nasum, x0, 1); + sum = 0.0; + for (x = x1; x >= x0; x--) { + applyQuarticFit(ca, cb, cc, cd, ce, (l_float32)x, &y); + sum += (y - 1.0); + numaReplaceNumber(nasum, x, sum); + } + for (x = x0; x >= 0; x--) + numaReplaceNumber(nasum, x, sum); + } + + /* Save the result in a fpix at the specified subsampling */ + nx = dew->nx; + ny = dew->ny; + fpix = fpixCreate(nx, ny); + del = (l_float32)w / (l_float32)nx; + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + x = del * j; + numaGetFValue(nasum, x, &fval); + fpixSetPixel(fpix, j, i, fval); + } + } + dew->sampydispar = fpix; + dew->ysuccess = 1; + + numaDestroy(&na2); + numaDestroy(&na3); + numaDestroy(&na4); + numaDestroy(&nasum); + return 0; +} + + +/*----------------------------------------------------------------------* + * Build line disparity model * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpBuildLineModel() + * + * \param[in] dew + * \param[in] opensize size of opening to remove perpendicular lines + * \param[in] debugfile use NULL to skip writing this + * \return 0 if OK, 1 if unable to build the model or on error + * + *
+ * Notes:
+ *      (1) This builds the horizontal and vertical disparity arrays
+ *          for an input of ruled lines, typically for calibration.
+ *          In book scanning, you could lay the ruled paper over a page.
+ *          Then for that page and several below it, you can use the
+ *          disparity correction of the line model to dewarp the pages.
+ *      (2) The dew has been initialized with the image of ruled lines.
+ *          These lines must be continuous, but we do a small amount
+ *          of pre-processing here to insure that.
+ *      (3) %opensize is typically about 8.  It must be larger than
+ *          the thickness of the lines to be extracted.  This is the
+ *          default value, which is applied if %opensize < 3.
+ *      (4) Sets vsuccess = 1 and hsuccess = 1 if the vertical and/or
+ *          horizontal disparity arrays build.
+ *      (5) Similar to dewarpBuildPageModel(), except here the vertical
+ *          and horizontal disparity arrays are both built from ruled lines.
+ *          See notes there.
+ * 
+ */ +l_ok +dewarpBuildLineModel(L_DEWARP *dew, + l_int32 opensize, + const char *debugfile) +{ +char buf[64]; +l_int32 i, j, bx, by, ret, nlines; +BOXA *boxa; +PIX *pixs, *pixh, *pixv, *pix, *pix1, *pix2; +PIXA *pixa1, *pixa2; +PTA *pta; +PTAA *ptaa1, *ptaa2; + + PROCNAME("dewarpBuildLineModel"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + if (opensize < 3) { + L_WARNING("opensize should be >= 3; setting to 8\n", procName); + opensize = 8; /* default */ + } + + dew->debug = (debugfile) ? 1 : 0; + dew->vsuccess = dew->hsuccess = 0; + pixs = dew->pixs; + if (debugfile) { + lept_rmdir("lept/dewline"); /* erase previous images */ + lept_mkdir("lept/dewline"); + lept_rmdir("lept/dewmod"); /* erase previous images */ + lept_mkdir("lept/dewmod"); + lept_mkdir("lept/dewarp"); + pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); + pixWriteDebug("/tmp/lept/dewline/001.png", pixs, IFF_PNG); + } + + /* Extract and solidify the horizontal and vertical lines. We use + * the horizontal lines to derive the vertical disparity, and v.v. + * Both disparities are computed using the vertical disparity + * algorithm; the horizontal disparity is found from the + * vertical lines by rotating them clockwise by 90 degrees. + * On the first pass, we compute the horizontal disparity, from + * the vertical lines, by rotating them by 90 degrees (so they + * are horizontal) and computing the vertical disparity on them; + * we rotate the resulting fpix array for the horizontal disparity + * back by -90 degrees. On the second pass, we compute the vertical + * disparity from the horizontal lines in the usual fashion. */ + snprintf(buf, sizeof(buf), "d1.3 + c%d.1 + o%d.1", opensize - 2, opensize); + pixh = pixMorphSequence(pixs, buf, 0); /* horiz */ + snprintf(buf, sizeof(buf), "d3.1 + c1.%d + o1.%d", opensize - 2, opensize); + pix1 = pixMorphSequence(pixs, buf, 0); /* vert */ + pixv = pixRotateOrth(pix1, 1); /* vert rotated to horizontal */ + pixa1 = pixaCreate(2); + pixaAddPix(pixa1, pixv, L_INSERT); /* get horizontal disparity first */ + pixaAddPix(pixa1, pixh, L_INSERT); + pixDestroy(&pix1); + + /*--------------------------------------------------------------*/ + /* Process twice: first for horiz disparity, then for vert */ + /*--------------------------------------------------------------*/ + for (i = 0; i < 2; i++) { + pix = pixaGetPix(pixa1, i, L_CLONE); + pixDisplay(pix, 0, 900); + boxa = pixConnComp(pix, &pixa2, 8); + nlines = boxaGetCount(boxa); + boxaDestroy(&boxa); + if (nlines < dew->minlines) { + L_WARNING("only found %d lines\n", procName, nlines); + pixDestroy(&pix); + pixaDestroy(&pixa1); + continue; + } + + /* Identify the pixels along the skeleton of each line */ + ptaa1 = ptaaCreate(nlines); + for (j = 0; j < nlines; j++) { + pixaGetBoxGeometry(pixa2, j, &bx, &by, NULL, NULL); + pix1 = pixaGetPix(pixa2, j, L_CLONE); + pta = dewarpGetMeanVerticals(pix1, bx, by); + ptaaAddPta(ptaa1, pta, L_INSERT); + pixDestroy(&pix1); + } + pixaDestroy(&pixa2); + if (debugfile) { + pix1 = pixConvertTo32(pix); + pix2 = pixDisplayPtaa(pix1, ptaa1); + snprintf(buf, sizeof(buf), "/tmp/lept/dewline/%03d.png", 2 + 2 * i); + pixWriteDebug(buf, pix2, IFF_PNG); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + /* Remove all lines that are not at least 0.75 times the length + * of the longest line. */ + ptaa2 = dewarpRemoveShortLines(pix, ptaa1, 0.75, DEBUG_SHORT_LINES); + if (debugfile) { + pix1 = pixConvertTo32(pix); + pix2 = pixDisplayPtaa(pix1, ptaa2); + snprintf(buf, sizeof(buf), "/tmp/lept/dewline/%03d.png", 3 + 2 * i); + pixWriteDebug(buf, pix2, IFF_PNG); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + ptaaDestroy(&ptaa1); + nlines = ptaaGetCount(ptaa2); + if (nlines < dew->minlines) { + pixDestroy(&pix); + ptaaDestroy(&ptaa2); + L_WARNING("%d lines: too few to build model\n", procName, nlines); + continue; + } + + /* Get the sampled 'vertical' disparity from the textline + * centers. The disparity array will push pixels vertically + * so that each line is flat and centered at the y-position + * of the mid-point. */ + ret = dewarpFindVertDisparity(dew, ptaa2, 1 - i); + + /* If i == 0, move the result to the horizontal disparity, + * rotating it back by -90 degrees. */ + if (i == 0) { /* horizontal disparity, really */ + if (ret) { + L_WARNING("horizontal disparity not built\n", procName); + } else { + L_INFO("hsuccess = 1\n", procName); + dew->samphdispar = fpixRotateOrth(dew->sampvdispar, 3); + fpixDestroy(&dew->sampvdispar); + if (debugfile) + lept_mv("/tmp/lept/dewarp/vert_disparity.pdf", + "lept/dewarp", "horiz_disparity.pdf", NULL); + } + dew->hsuccess = dew->vsuccess; + dew->vsuccess = 0; + } else { /* i == 1 */ + if (ret) + L_WARNING("vertical disparity not built\n", procName); + else + L_INFO("vsuccess = 1\n", procName); + } + ptaaDestroy(&ptaa2); + pixDestroy(&pix); + } + pixaDestroy(&pixa1); + + /* Debug output */ + if (debugfile) { + if (dew->vsuccess == 1) { + dewarpPopulateFullRes(dew, NULL, 0, 0); + pix1 = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); + pixWriteDebug("/tmp/lept/dewline/006.png", pix1, IFF_PNG); + pixDisplay(pix1, 1000, 0); + pixDestroy(&pix1); + } + if (dew->hsuccess == 1) { + pix1 = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); + pixWriteDebug("/tmp/lept/dewline/007.png", pix1, IFF_PNG); + pixDisplay(pix1, 1000, 0); + pixDestroy(&pix1); + } + convertFilesToPdf("/tmp/lept/dewline", NULL, 135, 1.0, 0, 0, + "Dewarp Build Line Model", debugfile); + fprintf(stderr, "pdf file: %s\n", debugfile); + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Query model status * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaModelStatus() + * + * \param[in] dewa + * \param[in] pageno + * \param[out] pvsuccess [optional] 1 on success + * \param[out] phsuccess [optional] 1 on success + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This tests if a model has been built, not if it is valid.
+ * 
+ */ +l_ok +dewarpaModelStatus(L_DEWARPA *dewa, + l_int32 pageno, + l_int32 *pvsuccess, + l_int32 *phsuccess) +{ +L_DEWARP *dew; + + PROCNAME("dewarpaModelStatus"); + + if (pvsuccess) *pvsuccess = 0; + if (phsuccess) *phsuccess = 0; + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) + return ERROR_INT("dew not retrieved", procName, 1); + if (pvsuccess) *pvsuccess = dew->vsuccess; + if (phsuccess) *phsuccess = dew->hsuccess; + return 0; +} + + +/*----------------------------------------------------------------------* + * Rendering helpers * + *----------------------------------------------------------------------*/ +/*! + * \brief pixRenderMidYs() + * + * \param[in] pixs 32 bpp + * \param[in] namidys y location of reference lines for vertical disparity + * \param[in] linew width of rendered line; typ 2 + * \return 0 if OK, 1 on error + */ +static l_int32 +pixRenderMidYs(PIX *pixs, + NUMA *namidys, + l_int32 linew) +{ +l_int32 i, n, w, yval, rval, gval, bval; +PIXCMAP *cmap; + + PROCNAME("pixRenderMidYs"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!namidys) + return ERROR_INT("namidys not defined", procName, 1); + + w = pixGetWidth(pixs); + n = numaGetCount(namidys); + cmap = pixcmapCreateRandom(8, 0, 0); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i % 256, &rval, &gval, &bval); + numaGetIValue(namidys, i, &yval); + pixRenderLineArb(pixs, 0, yval, w, yval, linew, rval, gval, bval); + } + pixcmapDestroy(&cmap); + return 0; +} + + +/*! + * \brief pixRenderHorizEndPoints() + * + * \param[in] pixs 32 bpp + * \param[in] ptal left side line end points + * \param[in] ptar right side line end points + * \param[in] color 0xrrggbb00 + * \return 0 if OK, 1 on error + */ +static l_int32 +pixRenderHorizEndPoints(PIX *pixs, + PTA *ptal, + PTA *ptar, + l_uint32 color) +{ +PIX *pixcirc; +PTA *ptalt, *ptart, *ptacirc; + + PROCNAME("pixRenderHorizEndPoints"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!ptal || !ptar) + return ERROR_INT("ptal and ptar not both defined", procName, 1); + + ptacirc = generatePtaFilledCircle(5); + pixcirc = pixGenerateFromPta(ptacirc, 11, 11); + ptalt = ptaTranspose(ptal); + ptart = ptaTranspose(ptar); + + pixDisplayPtaPattern(pixs, pixs, ptalt, pixcirc, 5, 5, color); + pixDisplayPtaPattern(pixs, pixs, ptart, pixcirc, 5, 5, color); + ptaDestroy(&ptacirc); + ptaDestroy(&ptalt); + ptaDestroy(&ptart); + pixDestroy(&pixcirc); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/dewarp3.c b/3rdparty/hgOCR/leptonica/dewarp3.c new file mode 100644 index 00000000..0159a564 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dewarp3.c @@ -0,0 +1,1012 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dewarp3.c + *
+ *
+ *    Applying and stripping the page disparity model
+ *
+ *      Apply disparity array to pix
+ *          l_int32            dewarpaApplyDisparity()
+ *          static l_int32     dewarpaApplyInit()
+ *          static PIX        *pixApplyVertDisparity()
+ *          static PIX        *pixApplyHorizDisparity()
+ *
+ *      Apply disparity array to boxa
+ *          l_int32            dewarpaApplyDisparityBoxa()
+ *          static BOXA       *boxaApplyDisparity()
+ *
+ *      Stripping out data and populating full res disparity
+ *          l_int32            dewarpMinimize()
+ *          l_int32            dewarpPopulateFullRes()
+ *
+ *      Static functions not presently in use
+ *          static FPIX       *fpixSampledDisparity()
+ *          static FPIX       *fpixExtraHorizDisparity()
+ *
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_int32 dewarpaApplyInit(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, + l_int32 x, l_int32 y, L_DEWARP **pdew, + const char *debugfile); +static PIX *pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); +static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); +static BOXA *boxaApplyDisparity(L_DEWARP *dew, BOXA *boxa, l_int32 direction, + l_int32 mapdir); + +/*----------------------------------------------------------------------* + * Apply warping disparity array to pixa * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaApplyDisparity() + * + * \param[in] dewa + * \param[in] pageno of page model to be used; may be a ref model + * \param[in] pixs image to be modified; can be 1, 8 or 32 bpp + * \param[in] grayin gray value, from 0 to 255, for pixels brought in; + * use -1 to use pixels on the boundary of pixs + * \param[in] x, y origin for generation of disparity arrays + * \param[out] ppixd disparity corrected image + * \param[in] debugfile use NULL to skip writing this + * \return 0 if OK, 1 on error no models or ref models available + * + *
+ * Notes:
+ *      (1) This applies the disparity arrays to the specified image.
+ *      (2) Specify gray color for pixels brought in from the outside:
+ *          0 is black, 255 is white.  Use -1 to select pixels from the
+ *          boundary of the source image.
+ *      (3) If the models and ref models have not been validated, this
+ *          will do so by calling dewarpaInsertRefModels().
+ *      (4) This works with both stripped and full resolution page models.
+ *          If the full res disparity array(s) are missing, they are remade.
+ *      (5) The caller must handle errors that are returned because there
+ *          are no valid models or ref models for the page -- typically
+ *          by using the input pixs.
+ *      (6) If there is no model for %pageno, this will use the model for
+ *          'refpage' and put the result in the dew for %pageno.
+ *      (7) This populates the full resolution disparity arrays if
+ *          necessary.  If x and/or y are positive, they are used,
+ *          in conjunction with pixs, to determine the required
+ *          slope-based extension of the full resolution disparity
+ *          arrays in each direction.  When (x,y) == (0,0), all
+ *          extension is to the right and down.  Nonzero values of (x,y)
+ *          are useful for dewarping when pixs is deliberately undercropped.
+ *      (8) Important: when applying disparity to a number of images,
+ *          after calling this function and saving the resulting pixd,
+ *          you should call dewarpMinimize(dew) on the dew for %pageno.
+ *          This will remove pixs and pixd (or their clones) stored in dew,
+ *          as well as the full resolution disparity arrays.  Together,
+ *          these hold approximately 16 bytes for each pixel in pixs.
+ * 
+ */ +l_ok +dewarpaApplyDisparity(L_DEWARPA *dewa, + l_int32 pageno, + PIX *pixs, + l_int32 grayin, + l_int32 x, + l_int32 y, + PIX **ppixd, + const char *debugfile) +{ +L_DEWARP *dew1, *dew; +PIX *pixv, *pixh; + + PROCNAME("dewarpaApplyDisparity"); + + /* Initialize the output with the input, so we'll have that + * in case we can't apply the page model. */ + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = pixClone(pixs); + if (grayin > 255) { + L_WARNING("invalid grayin = %d; clipping at 255\n", procName, grayin); + grayin = 255; + } + + /* Find the appropriate dew to use and fully populate its array(s) */ + if (dewarpaApplyInit(dewa, pageno, pixs, x, y, &dew, debugfile)) + return ERROR_INT("no model available", procName, 1); + + /* Correct for vertical disparity and save the result */ + if ((pixv = pixApplyVertDisparity(dew, pixs, grayin)) == NULL) { + dewarpMinimize(dew); + return ERROR_INT("pixv not made", procName, 1); + } + pixDestroy(ppixd); + *ppixd = pixv; + if (debugfile) { + pixDisplayWithTitle(pixv, 300, 0, "pixv", 1); + lept_rmdir("lept/dewapply"); /* remove previous images */ + lept_mkdir("lept/dewapply"); + pixWriteDebug("/tmp/lept/dewapply/001.png", pixs, IFF_PNG); + pixWriteDebug("/tmp/lept/dewapply/002.png", pixv, IFF_PNG); + } + + /* Optionally, correct for horizontal disparity */ + if (dewa->useboth && dew->hsuccess && !dew->skip_horiz) { + if (dew->hvalid == FALSE) { + L_INFO("invalid horiz model for page %d\n", procName, pageno); + } else { + if ((pixh = pixApplyHorizDisparity(dew, pixv, grayin)) != NULL) { + pixDestroy(ppixd); + *ppixd = pixh; + if (debugfile) { + pixDisplayWithTitle(pixh, 600, 0, "pixh", 1); + pixWriteDebug("/tmp/lept/dewapply/003.png", pixh, IFF_PNG); + } + } else { + L_ERROR("horiz disparity failed on page %d\n", + procName, pageno); + } + } + } + + if (debugfile) { + dew1 = dewarpaGetDewarp(dewa, pageno); + dewarpDebug(dew1, "lept/dewapply", 0); + convertFilesToPdf("/tmp/lept/dewapply", NULL, 250, 1.0, 0, 0, + "Dewarp Apply Disparity", debugfile); + fprintf(stderr, "pdf file: %s\n", debugfile); + } + + /* Get rid of the large full res disparity arrays */ + dewarpMinimize(dew); + + return 0; +} + + +/*! + * \brief dewarpaApplyInit() + * + * \param[in] dewa + * \param[in] pageno of page model to be used; may be a ref model + * \param[in] pixs image to be modified; can be 1, 8 or 32 bpp + * \param[in] x, y origin for generation of disparity arrays + * \param[out] pdew dewarp to be used for this page + * \param[in] debugfile use NULL to skip writing this + * \return 0 if OK, 1 on error no models or ref models available + * + *
+ * Notes:
+ *      (1) This prepares pixs for being dewarped.  It returns 1 if
+ *          no dewarping model exists.
+ *      (2) The returned %dew contains the model to be used for this page
+ *          image.  The %dew is owned by dewa; do not destroy.
+ *      (3) If both the 'useboth' and 'check_columns' fields are true,
+ *          this checks for multiple text columns and if found, sets
+ *          the 'skip_horiz' field in the %dew for this page.
+ * 
+ */ +static l_int32 +dewarpaApplyInit(L_DEWARPA *dewa, + l_int32 pageno, + PIX *pixs, + l_int32 x, + l_int32 y, + L_DEWARP **pdew, + const char *debugfile) +{ +l_int32 ncols, debug; +L_DEWARP *dew1, *dew2; +PIX *pix1; + + PROCNAME("dewarpaApplyInit"); + + if (!pdew) + return ERROR_INT("&dew not defined", procName, 1); + *pdew = NULL; + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + if (pageno < 0 || pageno > dewa->maxpage) + return ERROR_INT("invalid pageno", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (x < 0) x = 0; + if (y < 0) y = 0; + debug = (debugfile) ? 1 : 0; + + /* Make sure all models are valid and all refmodels have + * been added to dewa */ + if (dewa->modelsready == FALSE) + dewarpaInsertRefModels(dewa, 0, debug); + + /* Check for the existence of a valid model; we don't expect + * all pages to have them. */ + if ((dew1 = dewarpaGetDewarp(dewa, pageno)) == NULL) { + L_INFO("no valid dew model for page %d\n", procName, pageno); + return 1; + } + + /* Get the page model that we will use and sanity-check that + * it is valid. The ultimate result will be put in dew1->pixd. */ + if (dew1->hasref) /* point to another page with a model */ + dew2 = dewarpaGetDewarp(dewa, dew1->refpage); + else + dew2 = dew1; + if (dew2->vvalid == FALSE) + return ERROR_INT("no model; shouldn't happen", procName, 1); + *pdew = dew2; + + /* If check_columns is TRUE and useboth is TRUE, check for + * multiple columns. If there is more than one column, we + * only apply vertical disparity. */ + if (dewa->useboth && dewa->check_columns) { + pix1 = pixConvertTo1(pixs, 140); + pixCountTextColumns(pix1, 0.3, 0.5, 0.1, &ncols, NULL); + pixDestroy(&pix1); + if (ncols > 1) { + L_INFO("found %d columns; not correcting horiz disparity\n", + procName, ncols); + dew2->skip_horiz = TRUE; + } else { + dew2->skip_horiz = FALSE; + } + } + + /* Generate the full res disparity arrays if they don't exist + * (e.g., if they've been minimized or read from file), or if + * they are too small for the current image. */ + dewarpPopulateFullRes(dew2, pixs, x, y); + return 0; +} + + +/*! + * \brief pixApplyVertDisparity() + * + * \param[in] dew + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] grayin gray value, from 0 to 255, for pixels brought in; + * use -1 to use pixels on the boundary of pixs + * \return pixd modified to remove vertical disparity, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies the vertical disparity array to the specified
+ *          image.  For src pixels above the image, we use the pixels
+ *          in the first raster line.
+ *      (2) Specify gray color for pixels brought in from the outside:
+ *          0 is black, 255 is white.  Use -1 to select pixels from the
+ *          boundary of the source image.
+ * 
+ */ +static PIX * +pixApplyVertDisparity(L_DEWARP *dew, + PIX *pixs, + l_int32 grayin) +{ +l_int32 i, j, w, h, d, fw, fh, wpld, wplf, isrc, val8; +l_uint32 *datad, *lined; +l_float32 *dataf, *linef; +void **lineptrs; +FPIX *fpix; +PIX *pixd; + + PROCNAME("pixApplyVertDisparity"); + + if (!dew) + return (PIX *)ERROR_PTR("dew not defined", procName, NULL); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", procName, NULL); + if ((fpix = dew->fullvdispar) == NULL) + return (PIX *)ERROR_PTR("fullvdispar not defined", procName, NULL); + fpixGetDimensions(fpix, &fw, &fh); + if (fw < w || fh < h) { + fprintf(stderr, "fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); + return (PIX *)ERROR_PTR("invalid fpix size", procName, NULL); + } + + /* Two choices for requested pixels outside pixs: (1) use pixels' + * from the boundary of pixs; use white or light gray pixels. */ + pixd = pixCreateTemplate(pixs); + if (grayin >= 0) + pixSetAllGray(pixd, grayin); + datad = pixGetData(pixd); + dataf = fpixGetData(fpix); + wpld = pixGetWpl(pixd); + wplf = fpixGetWpl(fpix); + if (d == 1) { + lineptrs = pixGetLinePtrs(pixs, NULL); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + isrc = (l_int32)(i - linef[j] + 0.5); + if (grayin < 0) /* use value at boundary if outside */ + isrc = L_MIN(L_MAX(isrc, 0), h - 1); + if (isrc >= 0 && isrc < h) { /* remains gray if outside */ + if (GET_DATA_BIT(lineptrs[isrc], j)) + SET_DATA_BIT(lined, j); + } + } + } + } else if (d == 8) { + lineptrs = pixGetLinePtrs(pixs, NULL); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + isrc = (l_int32)(i - linef[j] + 0.5); + if (grayin < 0) + isrc = L_MIN(L_MAX(isrc, 0), h - 1); + if (isrc >= 0 && isrc < h) { + val8 = GET_DATA_BYTE(lineptrs[isrc], j); + SET_DATA_BYTE(lined, j, val8); + } + } + } + } else { /* d == 32 */ + lineptrs = pixGetLinePtrs(pixs, NULL); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + isrc = (l_int32)(i - linef[j] + 0.5); + if (grayin < 0) + isrc = L_MIN(L_MAX(isrc, 0), h - 1); + if (isrc >= 0 && isrc < h) + lined[j] = GET_DATA_FOUR_BYTES(lineptrs[isrc], j); + } + } + } + + LEPT_FREE(lineptrs); + return pixd; +} + + +/*! + * \brief pixApplyHorizDisparity() + * + * \param[in] dew + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] grayin gray value, from 0 to 255, for pixels brought in; + * use -1 to use pixels on the boundary of pixs + * \return pixd modified to remove horizontal disparity if possible, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) This applies the horizontal disparity array to the specified
+ *          image.
+ *      (2) Specify gray color for pixels brought in from the outside:
+ *          0 is black, 255 is white.  Use -1 to select pixels from the
+ *          boundary of the source image.
+ *      (3) The input pixs has already been corrected for vertical disparity.
+ *          If the horizontal disparity array doesn't exist, this returns
+ *          a clone of %pixs.
+ * 
+ */ +static PIX * +pixApplyHorizDisparity(L_DEWARP *dew, + PIX *pixs, + l_int32 grayin) +{ +l_int32 i, j, w, h, d, fw, fh, wpls, wpld, wplf, jsrc, val8; +l_uint32 *datas, *lines, *datad, *lined; +l_float32 *dataf, *linef; +FPIX *fpix; +PIX *pixd; + + PROCNAME("pixApplyHorizDisparity"); + + if (!dew) + return (PIX *)ERROR_PTR("dew not defined", procName, pixs); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", procName, NULL); + if ((fpix = dew->fullhdispar) == NULL) + return (PIX *)ERROR_PTR("fullhdispar not defined", procName, NULL); + fpixGetDimensions(fpix, &fw, &fh); + if (fw < w || fh < h) { + fprintf(stderr, "fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); + return (PIX *)ERROR_PTR("invalid fpix size", procName, NULL); + } + + /* Two choices for requested pixels outside pixs: (1) use pixels' + * from the boundary of pixs; use white or light gray pixels. */ + pixd = pixCreateTemplate(pixs); + if (grayin >= 0) + pixSetAllGray(pixd, grayin); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + dataf = fpixGetData(fpix); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + wplf = fpixGetWpl(fpix); + if (d == 1) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + jsrc = (l_int32)(j - linef[j] + 0.5); + if (grayin < 0) /* use value at boundary if outside */ + jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); + if (jsrc >= 0 && jsrc < w) { /* remains gray if outside */ + if (GET_DATA_BIT(lines, jsrc)) + SET_DATA_BIT(lined, j); + } + } + } + } else if (d == 8) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + jsrc = (l_int32)(j - linef[j] + 0.5); + if (grayin < 0) + jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); + if (jsrc >= 0 && jsrc < w) { + val8 = GET_DATA_BYTE(lines, jsrc); + SET_DATA_BYTE(lined, j, val8); + } + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + linef = dataf + i * wplf; + for (j = 0; j < w; j++) { + jsrc = (l_int32)(j - linef[j] + 0.5); + if (grayin < 0) + jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); + if (jsrc >= 0 && jsrc < w) + lined[j] = lines[jsrc]; + } + } + } + + return pixd; +} + + +/*----------------------------------------------------------------------* + * Apply warping disparity array to boxa * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaApplyDisparityBoxa() + * + * \param[in] dewa + * \param[in] pageno of page model to be used; may be a ref model + * \param[in] pixs initial pix reference; for alignment and debugging + * \param[in] boxas boxa to be mapped + * \param[in] mapdir 1 if mapping forward from original to dewarped; + * 0 if backward + * \param[in] x, y origin for generation of disparity arrays with + * respect to the source region + * \param[out] pboxad disparity corrected boxa + * \param[in] debugfile use NULL to skip writing this + * \return 0 if OK, 1 on error no models or ref models available + * + *
+ * Notes:
+ *      (1) This applies the disparity arrays in one of two mapping directions
+ *          to the specified boxa.  It can be used in the backward direction
+ *          to locate a box in the original coordinates that would have
+ *          been dewarped to to the specified image.
+ *      (2) If there is no model for %pageno, this will use the model for
+ *          'refpage' and put the result in the dew for %pageno.
+ *      (3) This works with both stripped and full resolution page models.
+ *          If the full res disparity array(s) are missing, they are remade.
+ *      (4) If an error occurs, a copy of the input boxa is returned.
+ * 
+ */ +l_ok +dewarpaApplyDisparityBoxa(L_DEWARPA *dewa, + l_int32 pageno, + PIX *pixs, + BOXA *boxas, + l_int32 mapdir, + l_int32 x, + l_int32 y, + BOXA **pboxad, + const char *debugfile) +{ +l_int32 debug_out; +L_DEWARP *dew1, *dew; +BOXA *boxav, *boxah; +PIX *pixv, *pixh; + + PROCNAME("dewarpaApplyDisparityBoxa"); + + /* Initialize the output with the input, so we'll have that + * in case we can't apply the page model. */ + if (!pboxad) + return ERROR_INT("&boxad not defined", procName, 1); + *pboxad = boxaCopy(boxas, L_CLONE); + + /* Find the appropriate dew to use and fully populate its array(s) */ + if (dewarpaApplyInit(dewa, pageno, pixs, x, y, &dew, debugfile)) + return ERROR_INT("no model available", procName, 1); + + /* Correct for vertical disparity and save the result */ + if ((boxav = boxaApplyDisparity(dew, boxas, L_VERT, mapdir)) == NULL) { + dewarpMinimize(dew); + return ERROR_INT("boxa1 not made", procName, 1); + } + boxaDestroy(pboxad); + *pboxad = boxav; + pixv = NULL; + pixh = NULL; + if (debugfile && mapdir != 1) + L_INFO("Reverse map direction; no debug output\n", procName); + debug_out = debugfile && (mapdir == 1); + if (debug_out) { + PIX *pix1; + lept_rmdir("lept/dewboxa"); /* remove previous images */ + lept_mkdir("lept/dewboxa"); + pix1 = pixConvertTo32(pixs); + pixRenderBoxaArb(pix1, boxas, 2, 255, 0, 0); + pixWriteDebug("/tmp/lept/dewboxa/01.png", pix1, IFF_PNG); + pixDestroy(&pix1); + pixv = pixApplyVertDisparity(dew, pixs, 255); + pix1 = pixConvertTo32(pixv); + pixRenderBoxaArb(pix1, boxav, 2, 0, 255, 0); + pixWriteDebug("/tmp/lept/dewboxa/02.png", pix1, IFF_PNG); + pixDestroy(&pix1); + } + + /* Optionally, correct for horizontal disparity */ + if (dewa->useboth && dew->hsuccess && !dew->skip_horiz) { + if (dew->hvalid == FALSE) { + L_INFO("invalid horiz model for page %d\n", procName, pageno); + } else { + boxah = boxaApplyDisparity(dew, boxav, L_HORIZ, mapdir); + if (!boxah) { + L_ERROR("horiz disparity fails on page %d\n", procName, pageno); + } else { + boxaDestroy(pboxad); + *pboxad = boxah; + if (debug_out) { + PIX *pix1; + pixh = pixApplyHorizDisparity(dew, pixv, 255); + pix1 = pixConvertTo32(pixh); + pixRenderBoxaArb(pix1, boxah, 2, 0, 0, 255); + pixWriteDebug("/tmp/lept/dewboxa/03.png", pix1, IFF_PNG); + pixDestroy(&pixh); + pixDestroy(&pix1); + } + } + } + } + + if (debug_out) { + pixDestroy(&pixv); + dew1 = dewarpaGetDewarp(dewa, pageno); + dewarpDebug(dew1, "lept/dewapply", 0); + convertFilesToPdf("/tmp/lept/dewboxa", NULL, 135, 1.0, 0, 0, + "Dewarp Apply Disparity Boxa", debugfile); + fprintf(stderr, "Dewarp Apply Disparity Boxa pdf file: %s\n", + debugfile); + } + + /* Get rid of the large full res disparity arrays */ + dewarpMinimize(dew); + + return 0; +} + + +/*! + * \brief boxaApplyDisparity() + * + * \param[in] dew + * \param[in] boxa + * \param[in] direction L_HORIZ or L_VERT + * \param[in] mapdir 1 if mapping forward from original to dewarped; + * 0 if backward + * \return boxad modified by the disparity, or NULL on error + */ +static BOXA * +boxaApplyDisparity(L_DEWARP *dew, + BOXA *boxa, + l_int32 direction, + l_int32 mapdir) +{ +l_int32 x, y, w, h, ib, ip, nbox, wpl; +l_float32 xn, yn; +l_float32 *data, *line; +BOX *boxs, *boxd; +BOXA *boxad; +FPIX *fpix; +PTA *ptas, *ptad; + + PROCNAME("boxaApplyDisparity"); + + if (!dew) + return (BOXA *)ERROR_PTR("dew not defined", procName, NULL); + if (!boxa) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + if (direction == L_VERT) + fpix = dew->fullvdispar; + else if (direction == L_HORIZ) + fpix = dew->fullhdispar; + else + return (BOXA *)ERROR_PTR("invalid direction", procName, NULL); + if (!fpix) + return (BOXA *)ERROR_PTR("full disparity not defined", procName, NULL); + fpixGetDimensions(fpix, &w, &h); + + /* Clip the output to the positive quadrant because all box + * coordinates must be non-negative. */ + data = fpixGetData(fpix); + wpl = fpixGetWpl(fpix); + nbox = boxaGetCount(boxa); + boxad = boxaCreate(nbox); + for (ib = 0; ib < nbox; ib++) { + boxs = boxaGetBox(boxa, ib, L_COPY); + ptas = boxConvertToPta(boxs, 4); + ptad = ptaCreate(4); + for (ip = 0; ip < 4; ip++) { + ptaGetIPt(ptas, ip, &x, &y); + line = data + y * wpl; + if (direction == L_VERT) { + if (mapdir == 0) + yn = y - line[x]; + else + yn = y + line[x]; + yn = L_MAX(0, yn); + ptaAddPt(ptad, x, yn); + } else { /* direction == L_HORIZ */ + if (mapdir == 0) + xn = x - line[x]; + else + xn = x + line[x]; + xn = L_MAX(0, xn); + ptaAddPt(ptad, xn, y); + } + } + boxd = ptaConvertToBox(ptad); + boxaAddBox(boxad, boxd, L_INSERT); + boxDestroy(&boxs); + ptaDestroy(&ptas); + ptaDestroy(&ptad); + } + + return boxad; +} + + +/*----------------------------------------------------------------------* + * Stripping out data and populating full res disparity * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpMinimize() + * + * \param[in] dew + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes all data that is not needed for serialization.
+ *          It keeps the subsampled disparity array(s), so the full
+ *          resolution arrays can be reconstructed.
+ * 
+ */ +l_ok +dewarpMinimize(L_DEWARP *dew) +{ +L_DEWARP *dewt; + + PROCNAME("dewarpMinimize"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + + /* If dew is a ref, minimize the actual dewarp */ + if (dew->hasref) + dewt = dewarpaGetDewarp(dew->dewa, dew->refpage); + else + dewt = dew; + if (!dewt) + return ERROR_INT("dewt not found", procName, 1); + + pixDestroy(&dewt->pixs); + fpixDestroy(&dewt->fullvdispar); + fpixDestroy(&dewt->fullhdispar); + numaDestroy(&dewt->namidys); + numaDestroy(&dewt->nacurves); + return 0; +} + + +/*! + * \brief dewarpPopulateFullRes() + * + * \param[in] dew + * \param[in] pix [optional], to give size of actual image + * \param[in] x, y origin for generation of disparity arrays + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the full resolution vertical and horizontal disparity
+ *          arrays do not exist, they are built from the subsampled ones.
+ *      (2) If pixs is not given, the size of the arrays is determined
+ *          by the original image from which the sampled version was
+ *          generated.  Any values of (x,y) are ignored.
+ *      (3) If pixs is given, the full resolution disparity arrays must
+ *          be large enough to accommodate it.
+ *          (a) If the arrays do not exist, the value of (x,y) determines
+ *              the origin of the full resolution arrays without extension,
+ *              relative to pixs.  Thus, (x,y) gives the amount of
+ *              slope extension in (left, top).  The (right, bottom)
+ *              extension is then determined by the size of pixs and
+ *              (x,y); the values should never be < 0.
+ *          (b) If the arrays exist and pixs is too large, the existing
+ *              full res arrays are destroyed and new ones are made,
+ *              again using (x,y) to determine the extension in the
+ *              four directions.
+ * 
+ */ +l_ok +dewarpPopulateFullRes(L_DEWARP *dew, + PIX *pix, + l_int32 x, + l_int32 y) +{ +l_int32 width, height, fw, fh, deltaw, deltah, redfactor; +FPIX *fpixt1, *fpixt2; + + PROCNAME("dewarpPopulateFullRes"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + if (!dew->sampvdispar) + return ERROR_INT("no sampled vert disparity", procName, 1); + if (x < 0) x = 0; + if (y < 0) y = 0; + + /* Establish the target size for the full res arrays */ + if (pix) + pixGetDimensions(pix, &width, &height, NULL); + else { + width = dew->w; + height = dew->h; + } + + /* Destroy the existing arrays if they are too small */ + if (dew->fullvdispar) { + fpixGetDimensions(dew->fullvdispar, &fw, &fh); + if (width > fw || height > fw) + fpixDestroy(&dew->fullvdispar); + } + if (dew->fullhdispar) { + fpixGetDimensions(dew->fullhdispar, &fw, &fh); + if (width > fw || height > fw) + fpixDestroy(&dew->fullhdispar); + } + + /* Find the required width and height expansion deltas */ + deltaw = width - dew->sampling * (dew->nx - 1) + 2; + deltah = height - dew->sampling * (dew->ny - 1) + 2; + redfactor = dew->redfactor; + deltaw = redfactor * L_MAX(0, deltaw); + deltah = redfactor * L_MAX(0, deltah); + + /* Generate the full res vertical array if it doesn't exist, + * extending it as required to make it big enough. Use x,y + * to determine the amounts on each side. */ + if (!dew->fullvdispar) { + fpixt1 = fpixCopy(NULL, dew->sampvdispar); + if (redfactor == 2) + fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); + fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); + fpixDestroy(&fpixt1); + if (deltah == 0 && deltaw == 0) { + dew->fullvdispar = fpixt2; + } + else { + dew->fullvdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, + y, deltah - y); + fpixDestroy(&fpixt2); + } + } + + /* Similarly, generate the full res horizontal array if it + * doesn't exist. Do this even if useboth == 1, but + * not if required to skip running horizontal disparity. */ + if (!dew->fullhdispar && dew->samphdispar && !dew->skip_horiz) { + fpixt1 = fpixCopy(NULL, dew->samphdispar); + if (redfactor == 2) + fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); + fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); + fpixDestroy(&fpixt1); + if (deltah == 0 && deltaw == 0) { + dew->fullhdispar = fpixt2; + } + else { + dew->fullhdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, + y, deltah - y); + fpixDestroy(&fpixt2); + } + } + + return 0; +} + + +#if 0 +/*----------------------------------------------------------------------* + * Static functions not presently in use * + *----------------------------------------------------------------------*/ +/*! + * \brief fpixSampledDisparity() + * + * \param[in] fpixs full resolution disparity model + * \param[in] sampling sampling factor + * \return fpixd sampled disparity model, or NULL on error + * + *
+ * Notes:
+ *      (1) This converts full to sampled disparity.
+ *      (2) The input array is sampled at the right and top edges, and
+ *          at every %sampling pixels horizontally and vertically.
+ *      (3) The sampled array may not extend to the right and bottom
+ *          pixels in fpixs.  This will occur if fpixs was generated
+ *          with slope extension because the image on that page was
+ *          larger than normal.  This is fine, because in use the
+ *          sampled array will be interpolated back to full resolution
+ *          and then extended as required.  So the operations of
+ *          sampling and interpolation will be idempotent.
+ *      (4) There must be at least 3 sampled points horizontally and
+ *          vertically.
+ * 
+ */ +static FPIX * +fpixSampledDisparity(FPIX *fpixs, + l_int32 sampling) +{ +l_int32 w, h, wd, hd, i, j, is, js; +l_float32 val; +FPIX *fpixd; + + PROCNAME("fpixSampledDisparity"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (sampling < 1) + return (FPIX *)ERROR_PTR("sampling < 1", procName, NULL); + + fpixGetDimensions(fpixs, &w, &h); + wd = 1 + (w + sampling - 2) / sampling; + hd = 1 + (h + sampling - 2) / sampling; + if (wd < 3 || hd < 3) + return (FPIX *)ERROR_PTR("wd < 3 or hd < 3", procName, NULL); + fpixd = fpixCreate(wd, hd); + for (i = 0; i < hd; i++) { + is = sampling * i; + if (is >= h) continue; + for (j = 0; j < wd; j++) { + js = sampling * j; + if (js >= w) continue; + fpixGetPixel(fpixs, js, is, &val); + fpixSetPixel(fpixd, j, i, val); + } + } + + return fpixd; +} + +static const l_float32 DefaultSlopeFactor = 0.1; /* just a guess; fix it */ + +/*! + * \brief fpixExtraHorizDisparity() + * + * \param[in] fpixv vertical disparity model + * \param[in] factor conversion factor for vertical disparity slope; + * use 0 for default + * \param[out] pxwid extra width to be added to dewarped pix + * \return fpixh, or NULL on error + * + *
+ * Notes:
+ *      (1) This takes the difference in vertical disparity at top
+ *          and bottom of the image, and converts it to an assumed
+ *          horizontal disparity.  In use, we add this to the
+ *          horizontal disparity determined by the left and right
+ *          ends of textlines.
+ *      (2) Usage:
+ *            l_int32 xwid = [extra width to be added to fpix and image]
+ *            FPix *fpix = fpixExtraHorizDisparity(dew->fullvdispar, 0, &xwid);
+ *            fpixLinearCombination(dew->fullhdispar, dew->fullhdispar,
+ *                                  fpix, 1.0, 1.0);
+ * 
+ */ +static FPIX * +fpixExtraHorizDisparity(FPIX *fpixv, + l_float32 factor, + l_int32 *pxwid) +{ +l_int32 w, h, i, j, fw, wpl, maxloc; +l_float32 val1, val2, vdisp, vdisp0, maxval; +l_float32 *data, *line, *fadiff; +NUMA *nadiff; +FPIX *fpixh; + + PROCNAME("fpixExtraHorizDisparity"); + + if (!fpixv) + return (FPIX *)ERROR_PTR("fpixv not defined", procName, NULL); + if (!pxwid) + return (FPIX *)ERROR_PTR("&xwid not defined", procName, NULL); + if (factor == 0.0) + factor = DefaultSlopeFactor; + + /* Estimate horizontal disparity from the vertical disparity + * difference between the top and bottom, normalized to the + * image height. Add the maximum value to the width of the + * output image, so that all src pixels can be mapped + * into the dest. */ + fpixGetDimensions(fpixv, &w, &h); + nadiff = numaCreate(w); + for (j = 0; j < w; j++) { + fpixGetPixel(fpixv, j, 0, &val1); + fpixGetPixel(fpixv, j, h - 1, &val2); + vdisp = factor * (val2 - val1) / (l_float32)h; + if (j == 0) vdisp0 = vdisp; + vdisp = vdisp0 - vdisp; + numaAddNumber(nadiff, vdisp); + } + numaGetMax(nadiff, &maxval, &maxloc); + *pxwid = (l_int32)(maxval + 0.5); + + fw = w + *pxwid; + fpixh = fpixCreate(fw, h); + data = fpixGetData(fpixh); + wpl = fpixGetWpl(fpixh); + fadiff = numaGetFArray(nadiff, L_NOCOPY); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < fw; j++) { + if (j < maxloc) /* this may not work for even pages */ + line[j] = fadiff[j]; + else /* keep it at the max value the rest of the way across */ + line[j] = maxval; + } + } + + numaDestroy(&nadiff); + return fpixh; +} +#endif diff --git a/3rdparty/hgOCR/leptonica/dewarp4.c b/3rdparty/hgOCR/leptonica/dewarp4.c new file mode 100644 index 00000000..1bdc8591 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dewarp4.c @@ -0,0 +1,1172 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dewarp4.c + *
+ *
+ *    Single page dewarper
+ *
+ *    Reference model (book-level, dewarpa) operations and debugging output
+ *
+ *      Top-level single page dewarper
+ *          l_int32            dewarpSinglePage()
+ *          l_int32            dewarpSinglePageInit()
+ *          l_int32            dewarpSinglePageRun()
+ *
+ *      Operations on dewarpa
+ *          l_int32            dewarpaListPages()
+ *          l_int32            dewarpaSetValidModels()
+ *          l_int32            dewarpaInsertRefModels()
+ *          l_int32            dewarpaStripRefModels()
+ *          l_int32            dewarpaRestoreModels()
+ *
+ *      Dewarp debugging output
+ *          l_int32            dewarpaInfo()
+ *          l_int32            dewarpaModelStats()
+ *          static l_int32     dewarpaTestForValidModel()
+ *          l_int32            dewarpaShowArrays()
+ *          l_int32            dewarpDebug()
+ *          l_int32            dewarpShowResults()
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_int32 dewarpaTestForValidModel(L_DEWARPA *dewa, L_DEWARP *dew, + l_int32 notests); + +#ifndef NO_CONSOLE_IO +#define DEBUG_INVALID_MODELS 0 /* set this to 1 for debugging */ +#endif /* !NO_CONSOLE_IO */ + + /* Special parameter value */ +static const l_int32 GrayInValue = 200; + + +/*----------------------------------------------------------------------* + * Top-level single page dewarper * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpSinglePage() + * + * \param[in] pixs with text, any depth + * \param[in] thresh for global thresh to 1 bpp; ignore otherwise + * \param[in] adaptive 1 for adaptive thresh; 0 for global threshold + * \param[in] useboth 1 for both horiz and vert; 0 for vertical only + * \param[in] check_columns 1 to skip horizontal if multiple columns; + * 0 otherwise; default is to skip + * \param[out] ppixd dewarped result + * \param[out] pdewa [optional] dewa with single page; NULL to skip + * \param[in] debug 1 for debugging output, 0 otherwise + * \return 0 if OK, 1 on error list of page numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) Dewarps pixs and returns the result in &pixd.
+ *      (2) This uses default values for all model parameters.
+ *      (3) If pixs is 1 bpp, the parameters %adaptive and %thresh are ignored.
+ *      (4) If it can't build a model, returns a copy of pixs in &pixd.
+ * 
+ */ +l_ok +dewarpSinglePage(PIX *pixs, + l_int32 thresh, + l_int32 adaptive, + l_int32 useboth, + l_int32 check_columns, + PIX **ppixd, + L_DEWARPA **pdewa, + l_int32 debug) +{ +L_DEWARPA *dewa; +PIX *pixb; + + PROCNAME("dewarpSinglePage"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (pdewa) *pdewa = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + dewarpSinglePageInit(pixs, thresh, adaptive, useboth, + check_columns, &pixb, &dewa); + if (!pixb) { + dewarpaDestroy(&dewa); + return ERROR_INT("pixb not made", procName, 1); + } + + dewarpSinglePageRun(pixs, pixb, dewa, ppixd, debug); + + if (pdewa) + *pdewa = dewa; + else + dewarpaDestroy(&dewa); + pixDestroy(&pixb); + return 0; +} + + +/*! + * \brief dewarpSinglePageInit() + * + * \param[in] pixs with text, any depth + * \param[in] thresh for global thresh to 1 bpp; ignore otherwise + * \param[in] adaptive 1 for adaptive thresh; 0 for global threshold + * \param[in] useboth 1 for both horiz and vert; 0 for vertical only + * \param[in] check_columns 1 to skip horizontal if multiple columns; + * 0 otherwise; default is to skip + * \param[out] ppixb 1 bpp debug image + * \param[out] pdewa initialized dewa + * \return 0 if OK, 1 on error list of page numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) This binarizes the input pixs if necessary, returning the
+ *          binarized image.  It also initializes the dewa to default values
+ *          for the model parameters.
+ *      (2) If pixs is 1 bpp, the parameters %adaptive and %thresh are ignored.
+ *      (3) To change the model parameters, call dewarpaSetCurvatures()
+ *          before running dewarpSinglePageRun().  For example:
+ *             dewarpSinglePageInit(pixs, 0, 1, 1, 1, &pixb, &dewa);
+ *             dewarpaSetCurvatures(dewa, 250, -1, -1, 80, 70, 150);
+ *             dewarpSinglePageRun(pixs, pixb, dewa, &pixd, 0);
+ *             dewarpaDestroy(&dewa);
+ *             pixDestroy(&pixb);
+ * 
+ */ +l_ok +dewarpSinglePageInit(PIX *pixs, + l_int32 thresh, + l_int32 adaptive, + l_int32 useboth, + l_int32 check_columns, + PIX **ppixb, + L_DEWARPA **pdewa) +{ +PIX *pix1; + + PROCNAME("dewarpSinglePageInit"); + + if (ppixb) *ppixb = NULL; + if (pdewa) *pdewa = NULL; + if (!ppixb || !pdewa) + return ERROR_INT("&pixb and &dewa not both defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + *pdewa = dewarpaCreate(1, 0, 1, 0, -1); + dewarpaUseBothArrays(*pdewa, useboth); + dewarpaSetCheckColumns(*pdewa, check_columns); + + /* Generate a binary image, if necessary */ + if (pixGetDepth(pixs) > 1) { + pix1 = pixConvertTo8(pixs, 0); + if (adaptive) + *ppixb = pixAdaptThresholdToBinary(pix1, NULL, 1.0); + else + *ppixb = pixThresholdToBinary(pix1, thresh); + pixDestroy(&pix1); + } else { + *ppixb = pixClone(pixs); + } + return 0; +} + + +/*! + * \brief dewarpSinglePageRun() + * + * \param[in] pixs any depth + * \param[in] pixb 1 bpp + * \param[in] dewa initialized + * \param[out] ppixd dewarped result + * \param[in] debug 1 for debugging output, 0 otherwise + * \return 0 if OK, 1 on error list of page numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) Dewarps pixs and returns the result in &pixd.
+ *      (2) The 1 bpp version %pixb and %dewa are conveniently generated by
+ *          dewarpSinglePageInit().
+ *      (3) Non-default model parameters must be set before calling this.
+ *      (4) If a model cannot be built, this returns a copy of pixs in &pixd.
+ * 
+ */ +l_ok +dewarpSinglePageRun(PIX *pixs, + PIX *pixb, + L_DEWARPA *dewa, + PIX **ppixd, + l_int32 debug) +{ +const char *debugfile; +l_int32 vsuccess, ret; +L_DEWARP *dew; + + PROCNAME("dewarpSinglePageRun"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixb) + return ERROR_INT("pixb not defined", procName, 1); + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + if (debug) + lept_mkdir("lept/dewarp"); + + /* Generate the page model */ + dew = dewarpCreate(pixb, 0); + dewarpaInsertDewarp(dewa, dew); + debugfile = (debug) ? "/tmp/lept/dewarp/singlepage_model.pdf" : NULL; + dewarpBuildPageModel(dew, debugfile); + dewarpaModelStatus(dewa, 0, &vsuccess, NULL); + if (vsuccess == 0) { + L_ERROR("failure to build model for vertical disparity\n", procName); + *ppixd = pixCopy(NULL, pixs); + return 0; + } + + /* Apply the page model */ + debugfile = (debug) ? "/tmp/lept/dewarp/singlepage_apply.pdf" : NULL; + ret = dewarpaApplyDisparity(dewa, 0, pixs, 255, 0, 0, ppixd, debugfile); + if (ret) + L_ERROR("invalid model; failure to apply disparity\n", procName); + return 0; +} + + +/*----------------------------------------------------------------------* + * Operations on dewarpa * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaListPages() + * + * \param[in] dewa populated with dewarp structs for pages + * \return 0 if OK, 1 on error list of page numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates two numas, stored in the dewarpa, that give:
+ *          (a) the page number for each dew that has a page model.
+ *          (b) the page number for each dew that has either a page
+ *              model or a reference model.
+ *          It can be called at any time.
+ *      (2) It is called by the dewarpa serializer before writing.
+ * 
+ */ +l_ok +dewarpaListPages(L_DEWARPA *dewa) +{ +l_int32 i; +L_DEWARP *dew; +NUMA *namodels, *napages; + + PROCNAME("dewarpaListPages"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + numaDestroy(&dewa->namodels); + numaDestroy(&dewa->napages); + namodels = numaCreate(dewa->maxpage + 1); + napages = numaCreate(dewa->maxpage + 1); + dewa->namodels = namodels; + dewa->napages = napages; + for (i = 0; i <= dewa->maxpage; i++) { + if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { + if (dew->hasref == 0) + numaAddNumber(namodels, dew->pageno); + numaAddNumber(napages, dew->pageno); + } + } + return 0; +} + + +/*! + * \brief dewarpaSetValidModels() + * + * \param[in] dewa + * \param[in] notests + * \param[in] debug 1 to output information on invalid page models + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) A valid model must meet the rendering requirements, which
+ *          include whether or not a vertical disparity model exists
+ *          and conditions on curvatures for vertical and horizontal
+ *          disparity models.
+ *      (2) If %notests == 1, this ignores the curvature constraints
+ *          and assumes that all successfully built models are valid.
+ *      (3) This function does not need to be called by the application.
+ *          It is called by dewarpaInsertRefModels(), which
+ *          will destroy all invalid dewarps.  Consequently, to inspect
+ *          an invalid dewarp model, it must be done before calling
+ *          dewarpaInsertRefModels().
+ * 
+ */ +l_ok +dewarpaSetValidModels(L_DEWARPA *dewa, + l_int32 notests, + l_int32 debug) +{ +l_int32 i, n, maxcurv, diffcurv, diffedge; +L_DEWARP *dew; + + PROCNAME("dewarpaSetValidModels"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + n = dewa->maxpage + 1; + for (i = 0; i < n; i++) { + if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) + continue; + + if (debug) { + if (dew->hasref == 1) { + L_INFO("page %d: has only a ref model\n", procName, i); + } else if (dew->vsuccess == 0) { + L_INFO("page %d: no model successfully built\n", + procName, i); + } else if (!notests) { + maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); + diffcurv = dew->maxcurv - dew->mincurv; + if (dewa->useboth && !dew->hsuccess) + L_INFO("page %d: useboth, but no horiz disparity\n", + procName, i); + if (maxcurv > dewa->max_linecurv) + L_INFO("page %d: max curvature %d > max_linecurv\n", + procName, i, diffcurv); + if (diffcurv < dewa->min_diff_linecurv) + L_INFO("page %d: diff curv %d < min_diff_linecurv\n", + procName, i, diffcurv); + if (diffcurv > dewa->max_diff_linecurv) + L_INFO("page %d: abs diff curv %d > max_diff_linecurv\n", + procName, i, diffcurv); + if (dew->hsuccess) { + if (L_ABS(dew->leftslope) > dewa->max_edgeslope) + L_INFO("page %d: abs left slope %d > max_edgeslope\n", + procName, i, dew->leftslope); + if (L_ABS(dew->rightslope) > dewa->max_edgeslope) + L_INFO("page %d: abs right slope %d > max_edgeslope\n", + procName, i, dew->rightslope); + diffedge = L_ABS(dew->leftcurv - dew->rightcurv); + if (L_ABS(dew->leftcurv) > dewa->max_edgecurv) + L_INFO("page %d: left curvature %d > max_edgecurv\n", + procName, i, dew->leftcurv); + if (L_ABS(dew->rightcurv) > dewa->max_edgecurv) + L_INFO("page %d: right curvature %d > max_edgecurv\n", + procName, i, dew->rightcurv); + if (diffedge > dewa->max_diff_edgecurv) + L_INFO("page %d: abs diff left-right curv %d > " + "max_diff_edgecurv\n", procName, i, diffedge); + } + } + } + + dewarpaTestForValidModel(dewa, dew, notests); + } + + return 0; +} + + +/*! + * \brief dewarpaInsertRefModels() + * + * \param[in] dewa + * \param[in] notests if 1, ignore curvature constraints on model + * \param[in] debug 1 to output information on invalid page models + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys all dewarp models that are invalid, and then
+ *          inserts reference models where possible.
+ *      (2) If %notests == 1, this ignores the curvature constraints
+ *          and assumes that all successfully built models are valid.
+ *      (3) If useboth == 0, it uses the closest valid model within the
+ *          distance and parity constraints.  If useboth == 1, it tries
+ *          to use the closest allowed hvalid model; if it doesn't find
+ *          an hvalid model, it uses the closest valid model.
+ *      (4) For all pages without a model, this clears out any existing
+ *          invalid and reference dewarps, finds the nearest valid model
+ *          with the same parity, and inserts an empty dewarp with the
+ *          reference page.
+ *      (5) Then if it is requested to use both vertical and horizontal
+ *          disparity arrays (useboth == 1), it tries to replace any
+ *          hvalid == 0 model or reference with an hvalid == 1 reference.
+ *      (6) The distance constraint is that any reference model must
+ *          be within maxdist.  Note that with the parity constraint,
+ *          no reference models will be used if maxdist < 2.
+ *      (7) This function must be called, even if reference models will
+ *          not be used.  It should be called after building models on all
+ *          available pages, and after setting the rendering parameters.
+ *      (8) If the dewa has been serialized, this function is called by
+ *          dewarpaRead() when it is read back.  It is also called
+ *          any time the rendering parameters are changed.
+ *      (9) Note: if this has been called with useboth == 1, and useboth
+ *          is reset to 0, you should first call dewarpaRestoreModels()
+ *          to bring real models from the cache back to the primary array.
+ * 
+ */ +l_ok +dewarpaInsertRefModels(L_DEWARPA *dewa, + l_int32 notests, + l_int32 debug) +{ +l_int32 i, j, n, val, min, distdown, distup; +L_DEWARP *dew; +NUMA *na, *nah; + + PROCNAME("dewarpaInsertRefModels"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + if (dewa->maxdist < 2) + L_INFO("maxdist < 2; no ref models can be used\n", procName); + + /* Make an indicator numa for pages with valid models. */ + dewarpaSetValidModels(dewa, notests, debug); + n = dewa->maxpage + 1; + na = numaMakeConstant(0, n); + for (i = 0; i < n; i++) { + dew = dewarpaGetDewarp(dewa, i); + if (dew && dew->vvalid) + numaReplaceNumber(na, i, 1); + } + + /* Remove all existing ref models and restore models from cache */ + dewarpaRestoreModels(dewa); + + /* Move invalid models to the cache, and insert reference dewarps + * for pages that need to borrow a model. + * First, try to find a valid model for each page. */ + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &val); + if (val == 1) continue; /* already has a valid model */ + if ((dew = dewa->dewarp[i]) != NULL) { /* exists but is not valid; */ + dewa->dewarpcache[i] = dew; /* move it to the cache */ + dewa->dewarp[i] = NULL; + } + if (dewa->maxdist < 2) continue; /* can't use a ref model */ + /* Look back for nearest model */ + distdown = distup = dewa->maxdist + 1; + for (j = i - 2; j >= 0 && distdown > dewa->maxdist; j -= 2) { + numaGetIValue(na, j, &val); + if (val == 1) distdown = i - j; + } + /* Look ahead for nearest model */ + for (j = i + 2; j < n && distup > dewa->maxdist; j += 2) { + numaGetIValue(na, j, &val); + if (val == 1) distup = j - i; + } + min = L_MIN(distdown, distup); + if (min > dewa->maxdist) continue; /* no valid model in range */ + if (distdown <= distup) + dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); + else + dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); + } + numaDestroy(&na); + + /* If a valid model will do, we're finished. */ + if (dewa->useboth == 0) { + dewa->modelsready = 1; /* validated */ + return 0; + } + + /* The request is useboth == 1. Now try to find an hvalid model */ + nah = numaMakeConstant(0, n); + for (i = 0; i < n; i++) { + dew = dewarpaGetDewarp(dewa, i); + if (dew && dew->hvalid) + numaReplaceNumber(nah, i, 1); + } + for (i = 0; i < n; i++) { + numaGetIValue(nah, i, &val); + if (val == 1) continue; /* already has a hvalid model */ + if (dewa->maxdist < 2) continue; /* can't use a ref model */ + distdown = distup = 100000; + for (j = i - 2; j >= 0; j -= 2) { /* look back for nearest model */ + numaGetIValue(nah, j, &val); + if (val == 1) { + distdown = i - j; + break; + } + } + for (j = i + 2; j < n; j += 2) { /* look ahead for nearest model */ + numaGetIValue(nah, j, &val); + if (val == 1) { + distup = j - i; + break; + } + } + min = L_MIN(distdown, distup); + if (min > dewa->maxdist) continue; /* no hvalid model within range */ + + /* We can replace the existing valid model with an hvalid model. + * If it's not a reference, save it in the cache. */ + if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) { + L_ERROR("dew is null for page %d!\n", procName, i); + } else { + if (dew->hasref == 0) { /* not a ref model */ + dewa->dewarpcache[i] = dew; /* move it to the cache */ + dewa->dewarp[i] = NULL; /* must null the ptr */ + } + } + if (distdown <= distup) /* insert the hvalid ref model */ + dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); + else + dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); + } + numaDestroy(&nah); + + dewa->modelsready = 1; /* validated */ + return 0; +} + + +/*! + * \brief dewarpaStripRefModels() + * + * \param[in] dewa populated with dewarp structs for pages + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This examines each dew in a dewarpa, and removes
+ *          all that don't have their own page model (i.e., all
+ *          that have "references" to nearby pages with valid models).
+ *          These references were generated by dewarpaInsertRefModels(dewa).
+ * 
+ */ +l_ok +dewarpaStripRefModels(L_DEWARPA *dewa) +{ +l_int32 i; +L_DEWARP *dew; + + PROCNAME("dewarpaStripRefModels"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + for (i = 0; i <= dewa->maxpage; i++) { + if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { + if (dew->hasref) + dewarpDestroy(&dewa->dewarp[i]); + } + } + dewa->modelsready = 0; + + /* Regenerate the page lists */ + dewarpaListPages(dewa); + return 0; +} + + +/*! + * \brief dewarpaRestoreModels() + * + * \param[in] dewa populated with dewarp structs for pages + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This puts all real models (and only real models) in the
+ *          primary dewarpa array.  First remove all dewarps that are
+ *          only references to other page models.  Then move all models
+ *          that had been cached back into the primary dewarp array.
+ *      (2) After this is done, we still need to recompute and insert
+ *          the reference models before dewa->modelsready is true.
+ * 
+ */ +l_ok +dewarpaRestoreModels(L_DEWARPA *dewa) +{ +l_int32 i; +L_DEWARP *dew; + + PROCNAME("dewarpaRestoreModels"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + /* Strip out ref models. Then only real models will be in the + * primary dewarp array. */ + dewarpaStripRefModels(dewa); + + /* The cache holds only real models, which are not necessarily valid. */ + for (i = 0; i <= dewa->maxpage; i++) { + if ((dew = dewa->dewarpcache[i]) != NULL) { + if (dewa->dewarp[i]) { + L_ERROR("dew in both cache and main array!: page %d\n", + procName, i); + } else { + dewa->dewarp[i] = dew; + dewa->dewarpcache[i] = NULL; + } + } + } + dewa->modelsready = 0; /* new ref models not yet inserted */ + + /* Regenerate the page lists */ + dewarpaListPages(dewa); + return 0; +} + + +/*----------------------------------------------------------------------* + * Dewarp debugging output * + *----------------------------------------------------------------------*/ +/*! + * \brief dewarpaInfo() + * + * \param[in] fp + * \param[in] dewa + * \return 0 if OK, 1 on error + */ +l_ok +dewarpaInfo(FILE *fp, + L_DEWARPA *dewa) +{ +l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; +L_DEWARP *dew; + + PROCNAME("dewarpaInfo"); + + if (!fp) + return ERROR_INT("dewa not defined", procName, 1); + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + fprintf(fp, "\nDewarpaInfo: %p\n", dewa); + fprintf(fp, "nalloc = %d, maxpage = %d\n", dewa->nalloc, dewa->maxpage); + fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d\n", + dewa->sampling, dewa->redfactor, dewa->minlines); + fprintf(fp, "maxdist = %d, useboth = %d\n", + dewa->maxdist, dewa->useboth); + + dewarpaModelStats(dewa, &nnone, &nvsuccess, &nvvalid, + &nhsuccess, &nhvalid, &nref); + n = numaGetCount(dewa->napages); + fprintf(stderr, "Total number of pages with a dew = %d\n", n); + fprintf(stderr, "Number of pages without any models = %d\n", nnone); + fprintf(stderr, "Number of pages with a vert model = %d\n", nvsuccess); + fprintf(stderr, "Number of pages with a valid vert model = %d\n", nvvalid); + fprintf(stderr, "Number of pages with both models = %d\n", nhsuccess); + fprintf(stderr, "Number of pages with both models valid = %d\n", nhvalid); + fprintf(stderr, "Number of pages with a ref model = %d\n", nref); + + for (i = 0; i < n; i++) { + numaGetIValue(dewa->napages, i, &pageno); + if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) + continue; + fprintf(stderr, "Page: %d\n", dew->pageno); + fprintf(stderr, " hasref = %d, refpage = %d\n", + dew->hasref, dew->refpage); + fprintf(stderr, " nlines = %d\n", dew->nlines); + fprintf(stderr, " w = %d, h = %d, nx = %d, ny = %d\n", + dew->w, dew->h, dew->nx, dew->ny); + if (dew->sampvdispar) + fprintf(stderr, " Vertical disparity builds:\n" + " (min,max,abs-diff) line curvature = (%d,%d,%d)\n", + dew->mincurv, dew->maxcurv, dew->maxcurv - dew->mincurv); + if (dew->samphdispar) + fprintf(stderr, " Horizontal disparity builds:\n" + " left edge slope = %d, right edge slope = %d\n" + " (left,right,abs-diff) edge curvature = (%d,%d,%d)\n", + dew->leftslope, dew->rightslope, dew->leftcurv, + dew->rightcurv, L_ABS(dew->leftcurv - dew->rightcurv)); + } + return 0; +} + + +/*! + * \brief dewarpaModelStats() + * + * \param[in] dewa + * \param[out] pnnone [optional] number without any model + * \param[out] pnvsuccess [optional] number with a vert model + * \param[out] pnvvalid [optional] number with a valid vert model + * \param[out] pnhsuccess [optional] number with both models + * \param[out] pnhvalid [optional] number with both models valid + * \param[out] pnref [optional] number with a reference model + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) A page without a model has no dew.  It most likely failed to
+ *          generate a vertical model, and has not been assigned a ref
+ *          model from a neighboring page with a valid vertical model.
+ *      (2) A page has vsuccess == 1 if there is at least a model of the
+ *          vertical disparity.  The model may be invalid, in which case
+ *          dewarpaInsertRefModels() will stash it in the cache and
+ *          attempt to replace it by a valid ref model.
+ *      (3) A vvvalid model is a vertical disparity model whose parameters
+ *          satisfy the constraints given in dewarpaSetValidModels().
+ *      (4) A page has hsuccess == 1 if both the vertical and horizontal
+ *          disparity arrays have been constructed.
+ *      (5) An  hvalid model has vertical and horizontal disparity
+ *          models whose parameters satisfy the constraints given
+ *          in dewarpaSetValidModels().
+ *      (6) A page has a ref model if it failed to generate a valid
+ *          model but was assigned a vvalid or hvalid model on another
+ *          page (within maxdist) by dewarpaInsertRefModel().
+ *      (7) This calls dewarpaTestForValidModel(); it ignores the vvalid
+ *          and hvalid fields.
+ * 
+ */ +l_ok +dewarpaModelStats(L_DEWARPA *dewa, + l_int32 *pnnone, + l_int32 *pnvsuccess, + l_int32 *pnvvalid, + l_int32 *pnhsuccess, + l_int32 *pnhvalid, + l_int32 *pnref) +{ +l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; +L_DEWARP *dew; + + PROCNAME("dewarpaModelStats"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + + dewarpaListPages(dewa); + n = numaGetCount(dewa->napages); + nnone = nref = nvsuccess = nvvalid = nhsuccess = nhvalid = 0; + for (i = 0; i < n; i++) { + numaGetIValue(dewa->napages, i, &pageno); + dew = dewarpaGetDewarp(dewa, pageno); + if (!dew) { + nnone++; + continue; + } + if (dew->hasref == 1) + nref++; + if (dew->vsuccess == 1) + nvsuccess++; + if (dew->hsuccess == 1) + nhsuccess++; + dewarpaTestForValidModel(dewa, dew, 0); + if (dew->vvalid == 1) + nvvalid++; + if (dew->hvalid == 1) + nhvalid++; + } + + if (pnnone) *pnnone = nnone; + if (pnref) *pnref = nref; + if (pnvsuccess) *pnvsuccess = nvsuccess; + if (pnvvalid) *pnvvalid = nvvalid; + if (pnhsuccess) *pnhsuccess = nhsuccess; + if (pnhvalid) *pnhvalid = nhvalid; + return 0; +} + + +/*! + * \brief dewarpaTestForValidModel() + * + * \param[in] dewa + * \param[in] dew + * \param[in] notests + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Computes validity of vertical (vvalid) model and both
+ *          vertical and horizontal (hvalid) models.
+ *      (2) If %notests == 1, this ignores the curvature constraints
+ *          and assumes that all successfully built models are valid.
+ *      (3) This is just about the models, not the rendering process,
+ *          so the value of useboth is not considered here.
+ * 
+ */ +static l_int32 +dewarpaTestForValidModel(L_DEWARPA *dewa, + L_DEWARP *dew, + l_int32 notests) +{ +l_int32 maxcurv, diffcurv, diffedge; + + PROCNAME("dewarpaTestForValidModel"); + + if (!dewa || !dew) + return ERROR_INT("dewa and dew not both defined", procName, 1); + + if (notests) { + dew->vvalid = dew->vsuccess; + dew->hvalid = dew->hsuccess; + return 0; + } + + /* No actual model was built */ + if (dew->vsuccess == 0) return 0; + + /* Was previously found not to have a valid model */ + if (dew->hasref == 1) return 0; + + /* vsuccess == 1; a vertical (line) model exists. + * First test that the vertical curvatures are within allowed + * bounds. Note that all curvatures are signed.*/ + maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); + diffcurv = dew->maxcurv - dew->mincurv; + if (maxcurv <= dewa->max_linecurv && + diffcurv >= dewa->min_diff_linecurv && + diffcurv <= dewa->max_diff_linecurv) { + dew->vvalid = 1; + } else { + L_INFO("invalid vert model for page %d:\n", procName, dew->pageno); +#if DEBUG_INVALID_MODELS + fprintf(stderr, " max line curv = %d, max allowed = %d\n", + maxcurv, dewa->max_linecurv); + fprintf(stderr, " diff line curv = %d, max allowed = %d\n", + diffcurv, dewa->max_diff_linecurv); +#endif /* DEBUG_INVALID_MODELS */ + } + + /* If a horizontal (edge) model exists, test for validity. */ + if (dew->hsuccess) { + diffedge = L_ABS(dew->leftcurv - dew->rightcurv); + if (L_ABS(dew->leftslope) <= dewa->max_edgeslope && + L_ABS(dew->rightslope) <= dewa->max_edgeslope && + L_ABS(dew->leftcurv) <= dewa->max_edgecurv && + L_ABS(dew->rightcurv) <= dewa->max_edgecurv && + diffedge <= dewa->max_diff_edgecurv) { + dew->hvalid = 1; + } else { + L_INFO("invalid horiz model for page %d:\n", procName, dew->pageno); +#if DEBUG_INVALID_MODELS + fprintf(stderr, " left edge slope = %d, max allowed = %d\n", + dew->leftslope, dewa->max_edgeslope); + fprintf(stderr, " right edge slope = %d, max allowed = %d\n", + dew->rightslope, dewa->max_edgeslope); + fprintf(stderr, " left edge curv = %d, max allowed = %d\n", + dew->leftcurv, dewa->max_edgecurv); + fprintf(stderr, " right edge curv = %d, max allowed = %d\n", + dew->rightcurv, dewa->max_edgecurv); + fprintf(stderr, " diff edge curv = %d, max allowed = %d\n", + diffedge, dewa->max_diff_edgecurv); +#endif /* DEBUG_INVALID_MODELS */ + } + } + + return 0; +} + + +/*! + * \brief dewarpaShowArrays() + * + * \param[in] dewa + * \param[in] scalefact on contour images; typ. 0.5 + * \param[in] first first page model to render + * \param[in] last last page model to render; use 0 to go to end + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates a pdf of contour plots of the disparity arrays.
+ *      (2) This only shows actual models; not ref models
+ * 
+ */ +l_ok +dewarpaShowArrays(L_DEWARPA *dewa, + l_float32 scalefact, + l_int32 first, + l_int32 last) +{ +char buf[256]; +l_int32 i, svd, shd; +L_BMF *bmf; +L_DEWARP *dew; +PIX *pixv, *pixvs, *pixh, *pixhs, *pixt, *pixd; +PIXA *pixa; + + PROCNAME("dewarpaShowArrays"); + + if (!dewa) + return ERROR_INT("dew not defined", procName, 1); + if (first < 0 || first > dewa->maxpage) + return ERROR_INT("first out of bounds", procName, 1); + if (last <= 0 || last > dewa->maxpage) last = dewa->maxpage; + if (last < first) + return ERROR_INT("last < first", procName, 1); + + lept_rmdir("lept/dewarp1"); /* temp directory for contour plots */ + lept_mkdir("lept/dewarp1"); + if ((bmf = bmfCreate(NULL, 8)) == NULL) + L_ERROR("bmf not made; page info not displayed", procName); + + fprintf(stderr, "Generating contour plots\n"); + for (i = first; i <= last; i++) { + if (i && ((i % 10) == 0)) + fprintf(stderr, " .. %d", i); + dew = dewarpaGetDewarp(dewa, i); + if (!dew) continue; + if (dew->hasref == 1) continue; + svd = shd = 0; + if (dew->sampvdispar) svd = 1; + if (dew->samphdispar) shd = 1; + if (!svd) { + L_ERROR("sampvdispar not made for page %d!\n", procName, i); + continue; + } + + /* Generate contour plots at reduced resolution */ + dewarpPopulateFullRes(dew, NULL, 0, 0); + pixv = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); + pixvs = pixScaleBySampling(pixv, scalefact, scalefact); + pixDestroy(&pixv); + if (shd) { + pixh = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); + pixhs = pixScaleBySampling(pixh, scalefact, scalefact); + pixDestroy(&pixh); + } + dewarpMinimize(dew); + + /* Save side-by-side */ + pixa = pixaCreate(2); + pixaAddPix(pixa, pixvs, L_INSERT); + if (shd) + pixaAddPix(pixa, pixhs, L_INSERT); + pixt = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); + snprintf(buf, sizeof(buf), "Page %d", i); + pixd = pixAddSingleTextblock(pixt, bmf, buf, 0x0000ff00, + L_ADD_BELOW, NULL); + snprintf(buf, sizeof(buf), "/tmp/lept/dewarp1/arrays_%04d.png", i); + pixWriteDebug(buf, pixd, IFF_PNG); + pixaDestroy(&pixa); + pixDestroy(&pixt); + pixDestroy(&pixd); + } + bmfDestroy(&bmf); + fprintf(stderr, "\n"); + + fprintf(stderr, "Generating pdf of contour plots\n"); + convertFilesToPdf("/tmp/lept/dewarp1", "arrays_", 90, 1.0, L_FLATE_ENCODE, + 0, "Disparity arrays", "/tmp/lept/disparity_arrays.pdf"); + fprintf(stderr, "Output written to: /tmp/lept/disparity_arrays.pdf\n"); + return 0; +} + + +/*! + * \brief dewarpDebug() + * + * \param[in] dew + * \param[in] subdirs one or more subdirectories of /tmp; e.g., "dew1" + * \param[in] index to help label output images; e.g., the page number + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Prints dewarp fields and generates disparity array contour images.
+ *          The contour images are written to file:
+ *                /tmp/[subdirs]/pixv_[index].png
+ * 
+ */ +l_ok +dewarpDebug(L_DEWARP *dew, + const char *subdirs, + l_int32 index) +{ +char fname[256]; +char *outdir; +l_int32 svd, shd; +PIX *pixv, *pixh; + + PROCNAME("dewarpDebug"); + + if (!dew) + return ERROR_INT("dew not defined", procName, 1); + if (!subdirs) + return ERROR_INT("subdirs not defined", procName, 1); + + fprintf(stderr, "pageno = %d, hasref = %d, refpage = %d\n", + dew->pageno, dew->hasref, dew->refpage); + fprintf(stderr, "sampling = %d, redfactor = %d, minlines = %d\n", + dew->sampling, dew->redfactor, dew->minlines); + svd = shd = 0; + if (!dew->hasref) { + if (dew->sampvdispar) svd = 1; + if (dew->samphdispar) shd = 1; + fprintf(stderr, "sampv = %d, samph = %d\n", svd, shd); + fprintf(stderr, "w = %d, h = %d\n", dew->w, dew->h); + fprintf(stderr, "nx = %d, ny = %d\n", dew->nx, dew->ny); + fprintf(stderr, "nlines = %d\n", dew->nlines); + if (svd) { + fprintf(stderr, "(min,max,abs-diff) line curvature = (%d,%d,%d)\n", + dew->mincurv, dew->maxcurv, dew->maxcurv - dew->mincurv); + } + if (shd) { + fprintf(stderr, "(left edge slope = %d, right edge slope = %d\n", + dew->leftslope, dew->rightslope); + fprintf(stderr, "(left,right,abs-diff) edge curvature = " + "(%d,%d,%d)\n", dew->leftcurv, dew->rightcurv, + L_ABS(dew->leftcurv - dew->rightcurv)); + } + } + if (!svd && !shd) { + fprintf(stderr, "No disparity arrays\n"); + return 0; + } + + dewarpPopulateFullRes(dew, NULL, 0, 0); + lept_mkdir(subdirs); + outdir = pathJoin("/tmp", subdirs); + if (svd) { + pixv = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); + snprintf(fname, sizeof(fname), "%s/pixv_%d.png", outdir, index); + pixWriteDebug(fname, pixv, IFF_PNG); + pixDestroy(&pixv); + } + if (shd) { + pixh = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); + snprintf(fname, sizeof(fname), "%s/pixh_%d.png", outdir, index); + pixWriteDebug(fname, pixh, IFF_PNG); + pixDestroy(&pixh); + } + LEPT_FREE(outdir); + return 0; +} + + +/*! + * \brief dewarpShowResults() + * + * \param[in] dewa + * \param[in] sa of indexed input images + * \param[in] boxa crop boxes for input images; can be null + * \param[in] firstpage + * \param[in] lastpage + * \param[in] pdfout filename + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a pdf of image pairs (before, after) for
+ *          the designated set of input pages.
+ *      (2) If the boxa exists, its elements are aligned with numbers
+ *          in the filenames in %sa.  It is used to crop the input images.
+ *          It is assumed that the dewa was generated from the cropped
+ *          images.  No undercropping is applied before rendering.
+ * 
+ */ +l_ok +dewarpShowResults(L_DEWARPA *dewa, + SARRAY *sa, + BOXA *boxa, + l_int32 firstpage, + l_int32 lastpage, + const char *pdfout) +{ +char bufstr[256]; +l_int32 i, modelpage; +L_BMF *bmf; +BOX *box; +L_DEWARP *dew; +PIX *pixs, *pixc, *pixd, *pixt1, *pixt2; +PIXA *pixa; + + PROCNAME("dewarpShowResults"); + + if (!dewa) + return ERROR_INT("dewa not defined", procName, 1); + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pdfout) + return ERROR_INT("pdfout not defined", procName, 1); + if (firstpage > lastpage) + return ERROR_INT("invalid first/last page numbers", procName, 1); + + lept_rmdir("lept/dewarp_pdfout"); + lept_mkdir("lept/dewarp_pdfout"); + bmf = bmfCreate(NULL, 6); + + fprintf(stderr, "Dewarping and generating s/by/s view\n"); + for (i = firstpage; i <= lastpage; i++) { + if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); + pixs = pixReadIndexed(sa, i); + if (boxa) { + box = boxaGetBox(boxa, i, L_CLONE); + pixc = pixClipRectangle(pixs, box, NULL); + boxDestroy(&box); + } + else + pixc = pixClone(pixs); + dew = dewarpaGetDewarp(dewa, i); + pixd = NULL; + if (dew) { + dewarpaApplyDisparity(dewa, dew->pageno, pixc, + GrayInValue, 0, 0, &pixd, NULL); + dewarpMinimize(dew); + } + pixa = pixaCreate(2); + pixaAddPix(pixa, pixc, L_INSERT); + if (pixd) + pixaAddPix(pixa, pixd, L_INSERT); + pixt1 = pixaDisplayTiledAndScaled(pixa, 32, 500, 2, 0, 35, 2); + if (dew) { + modelpage = (dew->hasref) ? dew->refpage : dew->pageno; + snprintf(bufstr, sizeof(bufstr), "Page %d; using %d\n", + i, modelpage); + } + else + snprintf(bufstr, sizeof(bufstr), "Page %d; no dewarp\n", i); + pixt2 = pixAddSingleTextblock(pixt1, bmf, bufstr, 0x0000ff00, + L_ADD_BELOW, 0); + snprintf(bufstr, sizeof(bufstr), "/tmp/lept/dewarp_pdfout/%05d", i); + pixWriteDebug(bufstr, pixt2, IFF_JFIF_JPEG); + pixaDestroy(&pixa); + pixDestroy(&pixs); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + } + fprintf(stderr, "\n"); + + fprintf(stderr, "Generating pdf of result\n"); + convertFilesToPdf("/tmp/lept/dewarp_pdfout", NULL, 100, 1.0, L_JPEG_ENCODE, + 0, "Dewarp sequence", pdfout); + fprintf(stderr, "Output written to: %s\n", pdfout); + bmfDestroy(&bmf); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/dnabasic.c b/3rdparty/hgOCR/leptonica/dnabasic.c new file mode 100644 index 00000000..35fa550a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dnabasic.c @@ -0,0 +1,1682 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dnabasic.c + *
+ *
+ *      Dna creation, destruction, copy, clone, etc.
+ *          L_DNA       *l_dnaCreate()
+ *          L_DNA       *l_dnaCreateFromIArray()
+ *          L_DNA       *l_dnaCreateFromDArray()
+ *          L_DNA       *l_dnaMakeSequence()
+ *          void        *l_dnaDestroy()
+ *          L_DNA       *l_dnaCopy()
+ *          L_DNA       *l_dnaClone()
+ *          l_int32      l_dnaEmpty()
+ *
+ *      Dna: add/remove number and extend array
+ *          l_int32      l_dnaAddNumber()
+ *          static l_int32  l_dnaExtendArray()
+ *          l_int32      l_dnaInsertNumber()
+ *          l_int32      l_dnaRemoveNumber()
+ *          l_int32      l_dnaReplaceNumber()
+ *
+ *      Dna accessors
+ *          l_int32      l_dnaGetCount()
+ *          l_int32      l_dnaSetCount()
+ *          l_int32      l_dnaGetIValue()
+ *          l_int32      l_dnaGetDValue()
+ *          l_int32      l_dnaSetValue()
+ *          l_int32      l_dnaShiftValue()
+ *          l_int32     *l_dnaGetIArray()
+ *          l_float64   *l_dnaGetDArray()
+ *          l_int32      l_dnaGetRefcount()
+ *          l_int32      l_dnaChangeRefcount()
+ *          l_int32      l_dnaGetParameters()
+ *          l_int32      l_dnaSetParameters()
+ *          l_int32      l_dnaCopyParameters()
+ *
+ *      Serialize Dna for I/O
+ *          L_DNA       *l_dnaRead()
+ *          L_DNA       *l_dnaReadStream()
+ *          l_int32      l_dnaWrite()
+ *          l_int32      l_dnaWriteStream()
+ *
+ *      Dnaa creation, destruction
+ *          L_DNAA      *l_dnaaCreate()
+ *          L_DNAA      *l_dnaaCreateFull()
+ *          l_int32      l_dnaaTruncate()
+ *          void        *l_dnaaDestroy()
+ *
+ *      Add Dna to Dnaa
+ *          l_int32      l_dnaaAddDna()
+ *          static l_int32  l_dnaaExtendArray()
+ *
+ *      Dnaa accessors
+ *          l_int32      l_dnaaGetCount()
+ *          l_int32      l_dnaaGetDnaCount()
+ *          l_int32      l_dnaaGetNumberCount()
+ *          L_DNA       *l_dnaaGetDna()
+ *          L_DNA       *l_dnaaReplaceDna()
+ *          l_int32      l_dnaaGetValue()
+ *          l_int32      l_dnaaAddNumber()
+ *
+ *      Serialize Dnaa for I/O
+ *          L_DNAA      *l_dnaaRead()
+ *          L_DNAA      *l_dnaaReadStream()
+ *          l_int32      l_dnaaWrite()
+ *          l_int32      l_dnaaWriteStream()
+ *
+ *    (1) The Dna is a struct holding an array of doubles.  It can also
+ *        be used to store l_int32 values, up to the full precision
+ *        of int32.  Always use it whenever integers larger than a
+ *        few million need to be stored.
+ *
+ *    (2) Always use the accessors in this file, never the fields directly.
+ *
+ *    (3) Storing and retrieving numbers:
+ *
+ *       * to append a new number to the array, use l_dnaAddNumber().  If
+ *         the number is an int, it will will automatically be converted
+ *         to l_float64 and stored.
+ *
+ *       * to reset a value stored in the array, use l_dnaSetValue().
+ *
+ *       * to increment or decrement a value stored in the array,
+ *         use l_dnaShiftValue().
+ *
+ *       * to obtain a value from the array, use either l_dnaGetIValue()
+ *         or l_dnaGetDValue(), depending on whether you are retrieving
+ *         an integer or a float64.  This avoids doing an explicit cast,
+ *         such as
+ *           (a) return a l_float64 and cast it to an l_int32
+ *           (b) cast the return directly to (l_float64 *) to
+ *               satisfy the function prototype, as in
+ *                 l_dnaGetDValue(da, index, (l_float64 *)&ival);   [ugly!]
+ *
+ *    (4) int <--> double conversions:
+ *
+ *        Conversions go automatically from l_int32 --> l_float64,
+ *        without loss of precision.  You must cast (l_int32)
+ *        to go from l_float64 --> l_int32 because you're truncating
+ *        to the integer value.
+ *
+ *    (5) As with other arrays in leptonica, the l_dna has both an allocated
+ *        size and a count of the stored numbers.  When you add a number, it
+ *        goes on the end of the array, and causes a realloc if the array
+ *        is already filled.  However, in situations where you want to
+ *        add numbers randomly into an array, such as when you build a
+ *        histogram, you must set the count of stored numbers in advance.
+ *        This is done with l_dnaSetCount().  If you set a count larger
+ *        than the allocated array, it does a realloc to the size requested.
+ *
+ *    (6) In situations where the data in a l_dna correspond to a function
+ *        y(x), the values can be either at equal spacings in x or at
+ *        arbitrary spacings.  For the former, we can represent all x values
+ *        by two parameters: startx (corresponding to y[0]) and delx
+ *        for the change in x for adjacent values y[i] and y[i+1].
+ *        startx and delx are initialized to 0.0 and 1.0, rsp.
+ *        For arbitrary spacings, we use a second l_dna, and the two
+ *        l_dnas are typically denoted dnay and dnax.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxArraySize = 100000000; /* dna */ +static const l_uint32 MaxPtrArraySize = 10000; /* dnaa */ +static const l_int32 InitialArraySize = 50; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 l_dnaExtendArray(L_DNA *da); +static l_int32 l_dnaaExtendArray(L_DNAA *daa); + + +/*--------------------------------------------------------------------------* + * Dna creation, destruction, copy, clone, etc. * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaCreate() + * + * \param[in] n size of number array to be alloc'd; 0 for default + * \return da, or NULL on error + */ +L_DNA * +l_dnaCreate(l_int32 n) +{ +L_DNA *da; + + PROCNAME("l_dnaCreate"); + + if (n <= 0 || n > MaxArraySize) + n = InitialArraySize; + + da = (L_DNA *)LEPT_CALLOC(1, sizeof(L_DNA)); + if ((da->array = (l_float64 *)LEPT_CALLOC(n, sizeof(l_float64))) == NULL) { + l_dnaDestroy(&da); + return (L_DNA *)ERROR_PTR("double array not made", procName, NULL); + } + + da->nalloc = n; + da->n = 0; + da->refcount = 1; + da->startx = 0.0; + da->delx = 1.0; + + return da; +} + + +/*! + * \brief l_dnaCreateFromIArray() + * + * \param[in] iarray integer array + * \param[in] size of the array + * \return da, or NULL on error + * + *
+ * Notes:
+ *      (1) We can't insert this int array into the l_dna, because a l_dna
+ *          takes a double array.  So this just copies the data from the
+ *          input array into the l_dna.  The input array continues to be
+ *          owned by the caller.
+ * 
+ */ +L_DNA * +l_dnaCreateFromIArray(l_int32 *iarray, + l_int32 size) +{ +l_int32 i; +L_DNA *da; + + PROCNAME("l_dnaCreateFromIArray"); + + if (!iarray) + return (L_DNA *)ERROR_PTR("iarray not defined", procName, NULL); + if (size <= 0) + return (L_DNA *)ERROR_PTR("size must be > 0", procName, NULL); + + da = l_dnaCreate(size); + for (i = 0; i < size; i++) + l_dnaAddNumber(da, iarray[i]); + + return da; +} + + +/*! + * \brief l_dnaCreateFromDArray() + * + * \param[in] darray float + * \param[in] size of the array + * \param[in] copyflag L_INSERT or L_COPY + * \return da, or NULL on error + * + *
+ * Notes:
+ *      (1) With L_INSERT, ownership of the input array is transferred
+ *          to the returned l_dna, and all %size elements are considered
+ *          to be valid.
+ * 
+ */ +L_DNA * +l_dnaCreateFromDArray(l_float64 *darray, + l_int32 size, + l_int32 copyflag) +{ +l_int32 i; +L_DNA *da; + + PROCNAME("l_dnaCreateFromDArray"); + + if (!darray) + return (L_DNA *)ERROR_PTR("darray not defined", procName, NULL); + if (size <= 0) + return (L_DNA *)ERROR_PTR("size must be > 0", procName, NULL); + if (copyflag != L_INSERT && copyflag != L_COPY) + return (L_DNA *)ERROR_PTR("invalid copyflag", procName, NULL); + + da = l_dnaCreate(size); + if (copyflag == L_INSERT) { + if (da->array) LEPT_FREE(da->array); + da->array = darray; + da->n = size; + } else { /* just copy the contents */ + for (i = 0; i < size; i++) + l_dnaAddNumber(da, darray[i]); + } + + return da; +} + + +/*! + * \brief l_dnaMakeSequence() + * + * \param[in] startval + * \param[in] increment + * \param[in] size of sequence + * \return l_dna of sequence of evenly spaced values, or NULL on error + */ +L_DNA * +l_dnaMakeSequence(l_float64 startval, + l_float64 increment, + l_int32 size) +{ +l_int32 i; +l_float64 val; +L_DNA *da; + + PROCNAME("l_dnaMakeSequence"); + + if ((da = l_dnaCreate(size)) == NULL) + return (L_DNA *)ERROR_PTR("da not made", procName, NULL); + + for (i = 0; i < size; i++) { + val = startval + i * increment; + l_dnaAddNumber(da, val); + } + + return da; +} + + +/*! + * \brief l_dnaDestroy() + * + * \param[in,out] pda will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the l_dna.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +l_dnaDestroy(L_DNA **pda) +{ +L_DNA *da; + + PROCNAME("l_dnaDestroy"); + + if (pda == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + + if ((da = *pda) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the l_dna. */ + l_dnaChangeRefcount(da, -1); + if (l_dnaGetRefcount(da) <= 0) { + if (da->array) + LEPT_FREE(da->array); + LEPT_FREE(da); + } + + *pda = NULL; + return; +} + + +/*! + * \brief l_dnaCopy() + * + * \param[in] da + * \return copy of da, or NULL on error + * + *
+ * Notes:
+ *      (1) This removes unused ptrs above da->n.
+ * 
+ */ +L_DNA * +l_dnaCopy(L_DNA *da) +{ +l_int32 i; +L_DNA *dac; + + PROCNAME("l_dnaCopy"); + + if (!da) + return (L_DNA *)ERROR_PTR("da not defined", procName, NULL); + + if ((dac = l_dnaCreate(da->n)) == NULL) + return (L_DNA *)ERROR_PTR("dac not made", procName, NULL); + dac->startx = da->startx; + dac->delx = da->delx; + + for (i = 0; i < da->n; i++) + l_dnaAddNumber(dac, da->array[i]); + + return dac; +} + + +/*! + * \brief l_dnaClone() + * + * \param[in] da + * \return ptr to same da, or NULL on error + */ +L_DNA * +l_dnaClone(L_DNA *da) +{ + PROCNAME("l_dnaClone"); + + if (!da) + return (L_DNA *)ERROR_PTR("da not defined", procName, NULL); + + l_dnaChangeRefcount(da, 1); + return da; +} + + +/*! + * \brief l_dnaEmpty() + * + * \param[in] da + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This does not change the allocation of the array.
+ *          It just clears the number of stored numbers, so that
+ *          the array appears to be empty.
+ * 
+ */ +l_ok +l_dnaEmpty(L_DNA *da) +{ + PROCNAME("l_dnaEmpty"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + + da->n = 0; + return 0; +} + + + +/*--------------------------------------------------------------------------* + * Dna: add/remove number and extend array * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaAddNumber() + * + * \param[in] da + * \param[in] val float or int to be added; stored as a float + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaAddNumber(L_DNA *da, + l_float64 val) +{ +l_int32 n; + + PROCNAME("l_dnaAddNumber"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + + n = l_dnaGetCount(da); + if (n >= da->nalloc) + l_dnaExtendArray(da); + da->array[n] = val; + da->n++; + return 0; +} + + +/*! + * \brief l_dnaExtendArray() + * + * \param[in] da + * \return 0 if OK, 1 on error + */ +static l_int32 +l_dnaExtendArray(L_DNA *da) +{ + PROCNAME("l_dnaExtendArray"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if ((da->array = (l_float64 *)reallocNew((void **)&da->array, + sizeof(l_float64) * da->nalloc, + 2 * sizeof(l_float64) * da->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + da->nalloc *= 2; + return 0; +} + + +/*! + * \brief l_dnaInsertNumber() + * + * \param[in] da + * \param[in] index location in da to insert new value + * \param[in] val float64 or integer to be added + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts da[i] --> da[i + 1] for all i >= %index,
+ *          and then inserts %val as da[%index].
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ *
+ * 
+ */ +l_ok +l_dnaInsertNumber(L_DNA *da, + l_int32 index, + l_float64 val) +{ +l_int32 i, n; + + PROCNAME("l_dnaInsertNumber"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + n = l_dnaGetCount(da); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + + if (n >= da->nalloc) + l_dnaExtendArray(da); + for (i = n; i > index; i--) + da->array[i] = da->array[i - 1]; + da->array[index] = val; + da->n++; + return 0; +} + + +/*! + * \brief l_dnaRemoveNumber() + * + * \param[in] da + * \param[in] index element to be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts da[i] --> da[i - 1] for all i > %index.
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +l_dnaRemoveNumber(L_DNA *da, + l_int32 index) +{ +l_int32 i, n; + + PROCNAME("l_dnaRemoveNumber"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + n = l_dnaGetCount(da); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + for (i = index + 1; i < n; i++) + da->array[i - 1] = da->array[i]; + da->n--; + return 0; +} + + +/*! + * \brief l_dnaReplaceNumber() + * + * \param[in] da + * \param[in] index element to be replaced + * \param[in] val new value to replace old one + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaReplaceNumber(L_DNA *da, + l_int32 index, + l_float64 val) +{ +l_int32 n; + + PROCNAME("l_dnaReplaceNumber"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + n = l_dnaGetCount(da); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + da->array[index] = val; + return 0; +} + + +/*----------------------------------------------------------------------* + * Dna accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaGetCount() + * + * \param[in] da + * \return count, or 0 if no numbers or on error + */ +l_int32 +l_dnaGetCount(L_DNA *da) +{ + PROCNAME("l_dnaGetCount"); + + if (!da) + return ERROR_INT("da not defined", procName, 0); + return da->n; +} + + +/*! + * \brief l_dnaSetCount() + * + * \param[in] da + * \param[in] newcount + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %newcount <= da->nalloc, this resets da->n.
+ *          Using %newcount = 0 is equivalent to l_dnaEmpty().
+ *      (2) If %newcount > da->nalloc, this causes a realloc
+ *          to a size da->nalloc = %newcount.
+ *      (3) All the previously unused values in da are set to 0.0.
+ * 
+ */ +l_ok +l_dnaSetCount(L_DNA *da, + l_int32 newcount) +{ + PROCNAME("l_dnaSetCount"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + if (newcount > da->nalloc) { + if ((da->array = (l_float64 *)reallocNew((void **)&da->array, + sizeof(l_float64) * da->nalloc, + sizeof(l_float64) * newcount)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + da->nalloc = newcount; + } + da->n = newcount; + return 0; +} + + +/*! + * \brief l_dnaGetDValue() + * + * \param[in] da + * \param[in] index into l_dna + * \param[out] pval double value; 0.0 on error + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caller may need to check the function return value to
+ *          decide if a 0.0 in the returned ival is valid.
+ * 
+ */ +l_ok +l_dnaGetDValue(L_DNA *da, + l_int32 index, + l_float64 *pval) +{ + PROCNAME("l_dnaGetDValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if (index < 0 || index >= da->n) + return ERROR_INT("index not valid", procName, 1); + + *pval = da->array[index]; + return 0; +} + + +/*! + * \brief l_dnaGetIValue() + * + * \param[in] da + * \param[in] index into l_dna + * \param[out] pival integer value; 0 on error + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caller may need to check the function return value to
+ *          decide if a 0 in the returned ival is valid.
+ * 
+ */ +l_ok +l_dnaGetIValue(L_DNA *da, + l_int32 index, + l_int32 *pival) +{ +l_float64 val; + + PROCNAME("l_dnaGetIValue"); + + if (!pival) + return ERROR_INT("&ival not defined", procName, 1); + *pival = 0; + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if (index < 0 || index >= da->n) + return ERROR_INT("index not valid", procName, 1); + + val = da->array[index]; + *pival = (l_int32)(val + L_SIGN(val) * 0.5); + return 0; +} + + +/*! + * \brief l_dnaSetValue() + * + * \param[in] da + * \param[in] index to element to be set + * \param[in] val to set element + * \return 0 if OK; 1 on error + */ +l_ok +l_dnaSetValue(L_DNA *da, + l_int32 index, + l_float64 val) +{ + PROCNAME("l_dnaSetValue"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + if (index < 0 || index >= da->n) + return ERROR_INT("index not valid", procName, 1); + + da->array[index] = val; + return 0; +} + + +/*! + * \brief l_dnaShiftValue() + * + * \param[in] da + * \param[in] index to element to change relative to the current value + * \param[in] diff increment if diff > 0 or decrement if diff < 0 + * \return 0 if OK; 1 on error + */ +l_ok +l_dnaShiftValue(L_DNA *da, + l_int32 index, + l_float64 diff) +{ + PROCNAME("l_dnaShiftValue"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + if (index < 0 || index >= da->n) + return ERROR_INT("index not valid", procName, 1); + + da->array[index] += diff; + return 0; +} + + +/*! + * \brief l_dnaGetIArray() + * + * \param[in] da + * \return a copy of the bare internal array, integerized + * by rounding, or NULL on error + *
+ * Notes:
+ *      (1) A copy of the array is made, because we need to
+ *          generate an integer array from the bare double array.
+ *          The caller is responsible for freeing the array.
+ *      (2) The array size is determined by the number of stored numbers,
+ *          not by the size of the allocated array in the l_dna.
+ *      (3) This function is provided to simplify calculations
+ *          using the bare internal array, rather than continually
+ *          calling accessors on the l_dna.  It is typically used
+ *          on an array of size 256.
+ * 
+ */ +l_int32 * +l_dnaGetIArray(L_DNA *da) +{ +l_int32 i, n, ival; +l_int32 *array; + + PROCNAME("l_dnaGetIArray"); + + if (!da) + return (l_int32 *)ERROR_PTR("da not defined", procName, NULL); + + n = l_dnaGetCount(da); + if ((array = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) + return (l_int32 *)ERROR_PTR("array not made", procName, NULL); + for (i = 0; i < n; i++) { + l_dnaGetIValue(da, i, &ival); + array[i] = ival; + } + + return array; +} + + +/*! + * \brief l_dnaGetDArray() + * + * \param[in] da + * \param[in] copyflag L_NOCOPY or L_COPY + * \return either the bare internal array or a copy of it, or NULL on error + * + *
+ * Notes:
+ *      (1) If %copyflag == L_COPY, it makes a copy which the caller
+ *          is responsible for freeing.  Otherwise, it operates
+ *          directly on the bare array of the l_dna.
+ *      (2) Very important: for L_NOCOPY, any writes to the array
+ *          will be in the l_dna.  Do not write beyond the size of
+ *          the count field, because it will not be accessible
+ *          from the l_dna!  If necessary, be sure to set the count
+ *          field to a larger number (such as the alloc size)
+ *          BEFORE calling this function.  Creating with l_dnaMakeConstant()
+ *          is another way to insure full initialization.
+ * 
+ */ +l_float64 * +l_dnaGetDArray(L_DNA *da, + l_int32 copyflag) +{ +l_int32 i, n; +l_float64 *array; + + PROCNAME("l_dnaGetDArray"); + + if (!da) + return (l_float64 *)ERROR_PTR("da not defined", procName, NULL); + + if (copyflag == L_NOCOPY) { + array = da->array; + } else { /* copyflag == L_COPY */ + n = l_dnaGetCount(da); + if ((array = (l_float64 *)LEPT_CALLOC(n, sizeof(l_float64))) == NULL) + return (l_float64 *)ERROR_PTR("array not made", procName, NULL); + for (i = 0; i < n; i++) + array[i] = da->array[i]; + } + + return array; +} + + +/*! + * \brief l_dnaGetRefCount() + * + * \param[in] da + * \return refcount, or UNDEF on error + */ +l_int32 +l_dnaGetRefcount(L_DNA *da) +{ + PROCNAME("l_dnaGetRefcount"); + + if (!da) + return ERROR_INT("da not defined", procName, UNDEF); + return da->refcount; +} + + +/*! + * \brief l_dnaChangeRefCount() + * + * \param[in] da + * \param[in] delta change to be applied + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaChangeRefcount(L_DNA *da, + l_int32 delta) +{ + PROCNAME("l_dnaChangeRefcount"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + da->refcount += delta; + return 0; +} + + +/*! + * \brief l_dnaGetParameters() + * + * \param[in] da + * \param[out] pstartx [optional] startx + * \param[out] pdelx [optional] delx + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaGetParameters(L_DNA *da, + l_float64 *pstartx, + l_float64 *pdelx) +{ + PROCNAME("l_dnaGetParameters"); + + if (pstartx) *pstartx = 0.0; + if (pdelx) *pdelx = 1.0; + if (!pstartx && !pdelx) + return ERROR_INT("neither &startx nor &delx are defined", procName, 1); + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if (pstartx) *pstartx = da->startx; + if (pdelx) *pdelx = da->delx; + return 0; +} + + +/*! + * \brief l_dnaSetParameters() + * + * \param[in] da + * \param[in] startx x value corresponding to da[0] + * \param[in] delx difference in x values for the situation where the + * elements of da correspond to the evaulation of a + * function at equal intervals of size %delx + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaSetParameters(L_DNA *da, + l_float64 startx, + l_float64 delx) +{ + PROCNAME("l_dnaSetParameters"); + + if (!da) + return ERROR_INT("da not defined", procName, 1); + + da->startx = startx; + da->delx = delx; + return 0; +} + + +/*! + * \brief l_dnaCopyParameters() + * + * \param[in] dad destination DNuma + * \param[in] das source DNuma + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaCopyParameters(L_DNA *dad, + L_DNA *das) +{ +l_float64 start, binsize; + + PROCNAME("l_dnaCopyParameters"); + + if (!das || !dad) + return ERROR_INT("das and dad not both defined", procName, 1); + + l_dnaGetParameters(das, &start, &binsize); + l_dnaSetParameters(dad, start, binsize); + return 0; +} + + +/*----------------------------------------------------------------------* + * Serialize Dna for I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaRead() + * + * \param[in] filename + * \return da, or NULL on error + */ +L_DNA * +l_dnaRead(const char *filename) +{ +FILE *fp; +L_DNA *da; + + PROCNAME("l_dnaRead"); + + if (!filename) + return (L_DNA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (L_DNA *)ERROR_PTR("stream not opened", procName, NULL); + da = l_dnaReadStream(fp); + fclose(fp); + if (!da) + return (L_DNA *)ERROR_PTR("da not read", procName, NULL); + return da; +} + + +/*! + * \brief l_dnaReadStream() + * + * \param[in] fp file stream + * \return da, or NULL on error + * + *
+ * Notes:
+ *      (1) fscanf takes %lf to read a double; fprintf takes %f to write it.
+ * 
+ */ +L_DNA * +l_dnaReadStream(FILE *fp) +{ +l_int32 i, n, index, ret, version; +l_float64 val, startx, delx; +L_DNA *da; + + PROCNAME("l_dnaReadStream"); + + if (!fp) + return (L_DNA *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, "\nL_Dna Version %d\n", &version); + if (ret != 1) + return (L_DNA *)ERROR_PTR("not a l_dna file", procName, NULL); + if (version != DNA_VERSION_NUMBER) + return (L_DNA *)ERROR_PTR("invalid l_dna version", procName, NULL); + if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) + return (L_DNA *)ERROR_PTR("invalid number of numbers", procName, NULL); + + if (n > MaxArraySize) { + L_ERROR("n = %d > %d\n", procName, n, MaxArraySize); + return NULL; + } + if ((da = l_dnaCreate(n)) == NULL) + return (L_DNA *)ERROR_PTR("da not made", procName, NULL); + for (i = 0; i < n; i++) { + if (fscanf(fp, " [%d] = %lf\n", &index, &val) != 2) { + l_dnaDestroy(&da); + return (L_DNA *)ERROR_PTR("bad input data", procName, NULL); + } + l_dnaAddNumber(da, val); + } + + /* Optional data */ + if (fscanf(fp, "startx = %lf, delx = %lf\n", &startx, &delx) == 2) + l_dnaSetParameters(da, startx, delx); + return da; +} + + +/*! + * \brief l_dnaWrite() + * + * \param[in] filename + * \param[in] da + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaWrite(const char *filename, + L_DNA *da) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("l_dnaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = l_dnaWriteStream(fp, da); + fclose(fp); + if (ret) + return ERROR_INT("da not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief l_dnaWriteStream() + * + * \param[in] fp file stream + * \param[in] da + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaWriteStream(FILE *fp, + L_DNA *da) +{ +l_int32 i, n; +l_float64 startx, delx; + + PROCNAME("l_dnaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!da) + return ERROR_INT("da not defined", procName, 1); + + n = l_dnaGetCount(da); + fprintf(fp, "\nL_Dna Version %d\n", DNA_VERSION_NUMBER); + fprintf(fp, "Number of numbers = %d\n", n); + for (i = 0; i < n; i++) + fprintf(fp, " [%d] = %f\n", i, da->array[i]); + fprintf(fp, "\n"); + + /* Optional data */ + l_dnaGetParameters(da, &startx, &delx); + if (startx != 0.0 || delx != 1.0) + fprintf(fp, "startx = %f, delx = %f\n", startx, delx); + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Dnaa creation, destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaaCreate() + * + * \param[in] n size of l_dna ptr array to be alloc'd 0 for default + * \return daa, or NULL on error + * + */ +L_DNAA * +l_dnaaCreate(l_int32 n) +{ +L_DNAA *daa; + + PROCNAME("l_dnaaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialArraySize; + + daa = (L_DNAA *)LEPT_CALLOC(1, sizeof(L_DNAA)); + if ((daa->dna = (L_DNA **)LEPT_CALLOC(n, sizeof(L_DNA *))) == NULL) { + l_dnaaDestroy(&daa); + return (L_DNAA *)ERROR_PTR("l_dna ptr array not made", procName, NULL); + } + daa->nalloc = n; + daa->n = 0; + return daa; +} + + +/*! + * \brief l_dnaaCreateFull() + * + * \param[in] nptr size of dna ptr array to be alloc'd + * \param[in] n size of individual dna arrays to be alloc'd 0 for default + * \return daa, or NULL on error + * + *
+ * Notes:
+ *      (1) This allocates a dnaa and fills the array with allocated dnas.
+ *          In use, after calling this function, use
+ *              l_dnaaAddNumber(dnaa, index, val);
+ *          to add val to the index-th dna in dnaa.
+ * 
+ */ +L_DNAA * +l_dnaaCreateFull(l_int32 nptr, + l_int32 n) +{ +l_int32 i; +L_DNAA *daa; +L_DNA *da; + + daa = l_dnaaCreate(nptr); + for (i = 0; i < nptr; i++) { + da = l_dnaCreate(n); + l_dnaaAddDna(daa, da, L_INSERT); + } + + return daa; +} + + +/*! + * \brief l_dnaaTruncate() + * + * \param[in] daa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This identifies the largest index containing a dna that
+ *          has any numbers within it, destroys all dna beyond that
+ *          index, and resets the count.
+ * 
+ */ +l_ok +l_dnaaTruncate(L_DNAA *daa) +{ +l_int32 i, n, nn; +L_DNA *da; + + PROCNAME("l_dnaaTruncate"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + + n = l_dnaaGetCount(daa); + for (i = n - 1; i >= 0; i--) { + da = l_dnaaGetDna(daa, i, L_CLONE); + if (!da) + continue; + nn = l_dnaGetCount(da); + l_dnaDestroy(&da); /* the clone */ + if (nn == 0) + l_dnaDestroy(&daa->dna[i]); + else + break; + } + daa->n = i + 1; + return 0; +} + + +/*! + * \brief l_dnaaDestroy() + * + * \param[in,out] pdaa will be set to null before returning + * \return void + */ +void +l_dnaaDestroy(L_DNAA **pdaa) +{ +l_int32 i; +L_DNAA *daa; + + PROCNAME("l_dnaaDestroy"); + + if (pdaa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((daa = *pdaa) == NULL) + return; + + for (i = 0; i < daa->n; i++) + l_dnaDestroy(&daa->dna[i]); + LEPT_FREE(daa->dna); + LEPT_FREE(daa); + *pdaa = NULL; + + return; +} + + +/*--------------------------------------------------------------------------* + * Add Dna to Dnaa * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaaAddDna() + * + * \param[in] daa + * \param[in] da to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaaAddDna(L_DNAA *daa, + L_DNA *da, + l_int32 copyflag) +{ +l_int32 n; +L_DNA *dac; + + PROCNAME("l_dnaaAddDna"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + if (!da) + return ERROR_INT("da not defined", procName, 1); + + if (copyflag == L_INSERT) { + dac = da; + } else if (copyflag == L_COPY) { + if ((dac = l_dnaCopy(da)) == NULL) + return ERROR_INT("dac not made", procName, 1); + } else if (copyflag == L_CLONE) { + dac = l_dnaClone(da); + } else { + return ERROR_INT("invalid copyflag", procName, 1); + } + + n = l_dnaaGetCount(daa); + if (n >= daa->nalloc) + l_dnaaExtendArray(daa); + daa->dna[n] = dac; + daa->n++; + return 0; +} + + +/*! + * \brief l_dnaaExtendArray() + * + * \param[in] daa + * \return 0 if OK, 1 on error + */ +static l_int32 +l_dnaaExtendArray(L_DNAA *daa) +{ + PROCNAME("l_dnaaExtendArray"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + + if ((daa->dna = (L_DNA **)reallocNew((void **)&daa->dna, + sizeof(L_DNA *) * daa->nalloc, + 2 * sizeof(L_DNA *) * daa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + daa->nalloc *= 2; + return 0; +} + + +/*----------------------------------------------------------------------* + * DNumaa accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaaGetCount() + * + * \param[in] daa + * \return count number of l_dna, or 0 if no l_dna or on error + */ +l_int32 +l_dnaaGetCount(L_DNAA *daa) +{ + PROCNAME("l_dnaaGetCount"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 0); + return daa->n; +} + + +/*! + * \brief l_dnaaGetDnaCount() + * + * \param[in] daa + * \param[in] index of l_dna in daa + * \return count of numbers in the referenced l_dna, or 0 on error. + */ +l_int32 +l_dnaaGetDnaCount(L_DNAA *daa, + l_int32 index) +{ + PROCNAME("l_dnaaGetDnaCount"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 0); + if (index < 0 || index >= daa->n) + return ERROR_INT("invalid index into daa", procName, 0); + return l_dnaGetCount(daa->dna[index]); +} + + +/*! + * \brief l_dnaaGetNumberCount() + * + * \param[in] daa + * \return count total number of numbers in the l_dnaa, + * or 0 if no numbers or on error + */ +l_int32 +l_dnaaGetNumberCount(L_DNAA *daa) +{ +L_DNA *da; +l_int32 n, sum, i; + + PROCNAME("l_dnaaGetNumberCount"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 0); + + n = l_dnaaGetCount(daa); + for (sum = 0, i = 0; i < n; i++) { + da = l_dnaaGetDna(daa, i, L_CLONE); + sum += l_dnaGetCount(da); + l_dnaDestroy(&da); + } + + return sum; +} + + +/*! + * \brief l_dnaaGetDna() + * + * \param[in] daa + * \param[in] index to the index-th l_dna + * \param[in] accessflag L_COPY or L_CLONE + * \return l_dna, or NULL on error + */ +L_DNA * +l_dnaaGetDna(L_DNAA *daa, + l_int32 index, + l_int32 accessflag) +{ + PROCNAME("l_dnaaGetDna"); + + if (!daa) + return (L_DNA *)ERROR_PTR("daa not defined", procName, NULL); + if (index < 0 || index >= daa->n) + return (L_DNA *)ERROR_PTR("index not valid", procName, NULL); + + if (accessflag == L_COPY) + return l_dnaCopy(daa->dna[index]); + else if (accessflag == L_CLONE) + return l_dnaClone(daa->dna[index]); + else + return (L_DNA *)ERROR_PTR("invalid accessflag", procName, NULL); +} + + +/*! + * \brief l_dnaaReplaceDna() + * + * \param[in] daa + * \param[in] index to the index-th l_dna + * \param[in] da insert and replace any existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Any existing l_dna is destroyed, and the input one
+ *          is inserted in its place.
+ *      (2) If %index is invalid, return 1 (error)
+ * 
+ */ +l_ok +l_dnaaReplaceDna(L_DNAA *daa, + l_int32 index, + L_DNA *da) +{ +l_int32 n; + + PROCNAME("l_dnaaReplaceDna"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + if (!da) + return ERROR_INT("da not defined", procName, 1); + n = l_dnaaGetCount(daa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + + l_dnaDestroy(&daa->dna[index]); + daa->dna[index] = da; + return 0; +} + + +/*! + * \brief l_dnaaGetValue() + * + * \param[in] daa + * \param[in] i index of l_dna within l_dnaa + * \param[in] j index into l_dna + * \param[out] pval double value + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaaGetValue(L_DNAA *daa, + l_int32 i, + l_int32 j, + l_float64 *pval) +{ +l_int32 n; +L_DNA *da; + + PROCNAME("l_dnaaGetValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + n = l_dnaaGetCount(daa); + if (i < 0 || i >= n) + return ERROR_INT("invalid index into daa", procName, 1); + da = daa->dna[i]; + if (j < 0 || j >= da->n) + return ERROR_INT("invalid index into da", procName, 1); + *pval = da->array[j]; + return 0; +} + + +/*! + * \brief l_dnaaAddNumber() + * + * \param[in] daa + * \param[in] index of l_dna within l_dnaa + * \param[in] val number to be added; stored as a double + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Adds to an existing l_dna only.
+ * 
+ */ +l_ok +l_dnaaAddNumber(L_DNAA *daa, + l_int32 index, + l_float64 val) +{ +l_int32 n; +L_DNA *da; + + PROCNAME("l_dnaaAddNumber"); + + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + n = l_dnaaGetCount(daa); + if (index < 0 || index >= n) + return ERROR_INT("invalid index in daa", procName, 1); + + da = l_dnaaGetDna(daa, index, L_CLONE); + l_dnaAddNumber(da, val); + l_dnaDestroy(&da); + return 0; +} + + +/*----------------------------------------------------------------------* + * Serialize Dna for I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaaRead() + * + * \param[in] filename + * \return daa, or NULL on error + */ +L_DNAA * +l_dnaaRead(const char *filename) +{ +FILE *fp; +L_DNAA *daa; + + PROCNAME("l_dnaaRead"); + + if (!filename) + return (L_DNAA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (L_DNAA *)ERROR_PTR("stream not opened", procName, NULL); + daa = l_dnaaReadStream(fp); + fclose(fp); + if (!daa) + return (L_DNAA *)ERROR_PTR("daa not read", procName, NULL); + return daa; +} + + +/*! + * \brief l_dnaaReadStream() + * + * \param[in] fp file stream + * \return daa, or NULL on error + */ +L_DNAA * +l_dnaaReadStream(FILE *fp) +{ +l_int32 i, n, index, ret, version; +L_DNA *da; +L_DNAA *daa; + + PROCNAME("l_dnaaReadStream"); + + if (!fp) + return (L_DNAA *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, "\nL_Dnaa Version %d\n", &version); + if (ret != 1) + return (L_DNAA *)ERROR_PTR("not a l_dna file", procName, NULL); + if (version != DNA_VERSION_NUMBER) + return (L_DNAA *)ERROR_PTR("invalid l_dnaa version", procName, NULL); + if (fscanf(fp, "Number of L_Dna = %d\n\n", &n) != 1) + return (L_DNAA *)ERROR_PTR("invalid number of l_dna", procName, NULL); + + if (n > MaxPtrArraySize) { + L_ERROR("n = %d > %d\n", procName, n, MaxPtrArraySize); + return NULL; + } + if ((daa = l_dnaaCreate(n)) == NULL) + return (L_DNAA *)ERROR_PTR("daa not made", procName, NULL); + + for (i = 0; i < n; i++) { + if (fscanf(fp, "L_Dna[%d]:", &index) != 1) { + l_dnaaDestroy(&daa); + return (L_DNAA *)ERROR_PTR("invalid l_dna header", procName, NULL); + } + if ((da = l_dnaReadStream(fp)) == NULL) { + l_dnaaDestroy(&daa); + return (L_DNAA *)ERROR_PTR("da not made", procName, NULL); + } + l_dnaaAddDna(daa, da, L_INSERT); + } + + return daa; +} + + +/*! + * \brief l_dnaaWrite() + * + * \param[in] filename + * \param[in] daa + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaaWrite(const char *filename, + L_DNAA *daa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("l_dnaaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = l_dnaaWriteStream(fp, daa); + fclose(fp); + if (ret) + return ERROR_INT("daa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief l_dnaaWriteStream() + * + * \param[in] fp file stream + * \param[in] daa + * \return 0 if OK, 1 on error + */ +l_ok +l_dnaaWriteStream(FILE *fp, + L_DNAA *daa) +{ +l_int32 i, n; +L_DNA *da; + + PROCNAME("l_dnaaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!daa) + return ERROR_INT("daa not defined", procName, 1); + + n = l_dnaaGetCount(daa); + fprintf(fp, "\nL_Dnaa Version %d\n", DNA_VERSION_NUMBER); + fprintf(fp, "Number of L_Dna = %d\n\n", n); + for (i = 0; i < n; i++) { + if ((da = l_dnaaGetDna(daa, i, L_CLONE)) == NULL) + return ERROR_INT("da not found", procName, 1); + fprintf(fp, "L_Dna[%d]:", i); + l_dnaWriteStream(fp, da); + l_dnaDestroy(&da); + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/dnafunc1.c b/3rdparty/hgOCR/leptonica/dnafunc1.c new file mode 100644 index 00000000..0a05ebc7 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dnafunc1.c @@ -0,0 +1,404 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dnafunc1.c + *
+ *
+ *      Rearrangements
+ *          l_int32     *l_dnaJoin()
+ *          l_int32     *l_dnaaFlattenToDna()
+ *
+ *      Conversion between numa and dna
+ *          NUMA        *l_dnaConvertToNuma()
+ *          L_DNA       *numaConvertToDna()
+ *
+ *      Set operations using aset (rbtree)
+ *          L_DNA       *l_dnaUnionByAset()
+ *          L_DNA       *l_dnaRemoveDupsByAset()
+ *          L_DNA       *l_dnaIntersectionByAset()
+ *          L_ASET      *l_asetCreateFromDna()
+ *
+ *      Miscellaneous operations
+ *          L_DNA       *l_dnaDiffAdjValues()
+ *
+ *
+ * This file contains an implementation on sets of doubles (or integers)
+ * that uses an underlying tree (rbtree).  The keys stored in the tree
+ * are simply the double array values in the dna.  Use of a DnaHash
+ * is typically more efficient, with O(1) in lookup and insertion.
+ *
+ * 
+ */ + +#include "allheaders.h" + +/*----------------------------------------------------------------------* + * Rearrangements * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaJoin() + * + * \param[in] dad dest dna; add to this one + * \param[in] das [optional] source dna; add from this one + * \param[in] istart starting index in das + * \param[in] iend ending index in das; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (2) iend < 0 means 'read to the end'
+ *      (3) if das == NULL, this is a no-op
+ * 
+ */ +l_ok +l_dnaJoin(L_DNA *dad, + L_DNA *das, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +l_float64 val; + + PROCNAME("l_dnaJoin"); + + if (!dad) + return ERROR_INT("dad not defined", procName, 1); + if (!das) + return 0; + + if (istart < 0) + istart = 0; + n = l_dnaGetCount(das); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + l_dnaGetDValue(das, i, &val); + l_dnaAddNumber(dad, val); + } + + return 0; +} + + +/*! + * \brief l_dnaaFlattenToDna() + * + * \param[in] daa + * \return dad, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the dnaa to a dna, by joining successively
+ *          each dna in the dnaa.
+ *      (2) It leaves the input dnaa unchanged.
+ * 
+ */ +L_DNA * +l_dnaaFlattenToDna(L_DNAA *daa) +{ +l_int32 i, nalloc; +L_DNA *da, *dad; +L_DNA **array; + + PROCNAME("l_dnaaFlattenToDna"); + + if (!daa) + return (L_DNA *)ERROR_PTR("daa not defined", procName, NULL); + + nalloc = daa->nalloc; + array = daa->dna; + dad = l_dnaCreate(0); + for (i = 0; i < nalloc; i++) { + da = array[i]; + if (!da) continue; + l_dnaJoin(dad, da, 0, -1); + } + + return dad; +} + + +/*----------------------------------------------------------------------* + * Conversion between numa and dna * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaConvertToNuma() + * + * \param[in] da + * \return na, or NULL on error + */ +NUMA * +l_dnaConvertToNuma(L_DNA *da) +{ +l_int32 i, n; +l_float64 val; +NUMA *na; + + PROCNAME("l_dnaConvertToNuma"); + + if (!da) + return (NUMA *)ERROR_PTR("da not defined", procName, NULL); + + n = l_dnaGetCount(da); + na = numaCreate(n); + for (i = 0; i < n; i++) { + l_dnaGetDValue(da, i, &val); + numaAddNumber(na, val); + } + return na; +} + + +/*! + * \brief numaConvertToDna + * + * \param[in] na + * \return da, or NULL on error + */ +L_DNA * +numaConvertToDna(NUMA *na) +{ +l_int32 i, n; +l_float32 val; +L_DNA *da; + + PROCNAME("numaConvertToDna"); + + if (!na) + return (L_DNA *)ERROR_PTR("na not defined", procName, NULL); + + n = numaGetCount(na); + da = l_dnaCreate(n); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + l_dnaAddNumber(da, val); + } + return da; +} + + +/*----------------------------------------------------------------------* + * Set operations using aset (rbtree) * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaUnionByAset() + * + * \param[in] da1, da2 + * \return dad with the union of the set of numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) See sarrayUnionByAset() for the approach.
+ *      (2) Here, the key in building the sorted tree is the number itself.
+ *      (3) Operations using an underlying tree are O(nlogn), which is
+ *          typically less efficient than hashing, which is O(n).
+ * 
+ */ +L_DNA * +l_dnaUnionByAset(L_DNA *da1, + L_DNA *da2) +{ +L_DNA *da3, *dad; + + PROCNAME("l_dnaUnionByAset"); + + if (!da1) + return (L_DNA *)ERROR_PTR("da1 not defined", procName, NULL); + if (!da2) + return (L_DNA *)ERROR_PTR("da2 not defined", procName, NULL); + + /* Join */ + da3 = l_dnaCopy(da1); + l_dnaJoin(da3, da2, 0, -1); + + /* Eliminate duplicates */ + dad = l_dnaRemoveDupsByAset(da3); + l_dnaDestroy(&da3); + return dad; +} + + +/*! + * \brief l_dnaRemoveDupsByAset() + * + * \param[in] das + * \return dad with duplicates removed, or NULL on error + */ +L_DNA * +l_dnaRemoveDupsByAset(L_DNA *das) +{ +l_int32 i, n; +l_float64 val; +L_DNA *dad; +L_ASET *set; +RB_TYPE key; + + PROCNAME("l_dnaRemoveDupsByAset"); + + if (!das) + return (L_DNA *)ERROR_PTR("das not defined", procName, NULL); + + set = l_asetCreate(L_FLOAT_TYPE); + dad = l_dnaCreate(0); + n = l_dnaGetCount(das); + for (i = 0; i < n; i++) { + l_dnaGetDValue(das, i, &val); + key.ftype = val; + if (!l_asetFind(set, key)) { + l_dnaAddNumber(dad, val); + l_asetInsert(set, key); + } + } + + l_asetDestroy(&set); + return dad; +} + + +/*! + * \brief l_dnaIntersectionByAset() + * + * \param[in] da1, da2 + * \return dad with the intersection of the two arrays, or NULL on error + * + *
+ * Notes:
+ *      (1) See sarrayIntersection() for the approach.
+ *      (2) Here, the key in building the sorted tree is the number itself.
+ *      (3) Operations using an underlying tree are O(nlogn), which is
+ *          typically less efficient than hashing, which is O(n).
+ * 
+ */ +L_DNA * +l_dnaIntersectionByAset(L_DNA *da1, + L_DNA *da2) +{ +l_int32 n1, n2, i, n; +l_float64 val; +L_ASET *set1, *set2; +RB_TYPE key; +L_DNA *da_small, *da_big, *dad; + + PROCNAME("l_dnaIntersectionByAset"); + + if (!da1) + return (L_DNA *)ERROR_PTR("da1 not defined", procName, NULL); + if (!da2) + return (L_DNA *)ERROR_PTR("da2 not defined", procName, NULL); + + /* Put the elements of the largest array into a set */ + n1 = l_dnaGetCount(da1); + n2 = l_dnaGetCount(da2); + da_small = (n1 < n2) ? da1 : da2; /* do not destroy da_small */ + da_big = (n1 < n2) ? da2 : da1; /* do not destroy da_big */ + set1 = l_asetCreateFromDna(da_big); + + /* Build up the intersection of floats */ + dad = l_dnaCreate(0); + n = l_dnaGetCount(da_small); + set2 = l_asetCreate(L_FLOAT_TYPE); + for (i = 0; i < n; i++) { + l_dnaGetDValue(da_small, i, &val); + key.ftype = val; + if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { + l_dnaAddNumber(dad, val); + l_asetInsert(set2, key); + } + } + + l_asetDestroy(&set1); + l_asetDestroy(&set2); + return dad; +} + + +/*! + * \brief l_asetCreateFromDna() + * + * \param[in] da source dna + * \return set using the doubles in %da as keys + */ +L_ASET * +l_asetCreateFromDna(L_DNA *da) +{ +l_int32 i, n; +l_float64 val; +L_ASET *set; +RB_TYPE key; + + PROCNAME("l_asetCreateFromDna"); + + if (!da) + return (L_ASET *)ERROR_PTR("da not defined", procName, NULL); + + set = l_asetCreate(L_FLOAT_TYPE); + n = l_dnaGetCount(da); + for (i = 0; i < n; i++) { + l_dnaGetDValue(da, i, &val); + key.ftype = val; + l_asetInsert(set, key); + } + + return set; +} + + +/*----------------------------------------------------------------------* + * Miscellaneous operations * + *----------------------------------------------------------------------*/ +/*! + * \brief l_dnaDiffAdjValues() + * + * \param[in] das input l_dna + * \return dad of difference values val[i+1] - val[i], + * or NULL on error + */ +L_DNA * +l_dnaDiffAdjValues(L_DNA *das) +{ +l_int32 i, n, prev, cur; +L_DNA *dad; + + PROCNAME("l_dnaDiffAdjValues"); + + if (!das) + return (L_DNA *)ERROR_PTR("das not defined", procName, NULL); + n = l_dnaGetCount(das); + dad = l_dnaCreate(n - 1); + prev = 0; + for (i = 1; i < n; i++) { + l_dnaGetIValue(das, i, &cur); + l_dnaAddNumber(dad, cur - prev); + prev = cur; + } + return dad; +} + diff --git a/3rdparty/hgOCR/leptonica/dnahash.c b/3rdparty/hgOCR/leptonica/dnahash.c new file mode 100644 index 00000000..ecac0676 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dnahash.c @@ -0,0 +1,589 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file dnahash.c + *
+ *
+ *      DnaHash creation, destruction
+ *          L_DNAHASH   *l_dnaHashCreate()
+ *          void         l_dnaHashDestroy()
+ *
+ *      DnaHash: Accessors and modifiers                      *
+ *          l_int32      l_dnaHashGetCount()
+ *          l_int32      l_dnaHashGetTotalCount()
+ *          L_DNA       *l_dnaHashGetDna()
+ *          void         l_dnaHashAdd()
+ *
+ *      DnaHash: Operations on Dna
+ *          L_DNAHASH   *l_dnaHashCreateFromDna()
+ *          l_int32      l_dnaRemoveDupsByHash()
+ *          l_int32      l_dnaMakeHistoByHash()
+ *          L_DNA       *l_dnaIntersectionByHash()
+ *          l_int32      l_dnaFindValByHash()
+ *
+ *    (1) The DnaHash is an array of Dna.  It is useful for fast
+ *        storage and lookup for sets and maps.  If the set or map
+ *        is on a Dna itself, the hash is a simple function that
+ *        maps a double to a l_uint64; otherwise the function will
+ *        map a string or a (x,y) point to a l_uint64.  The result of
+ *        the map is the "key", which is then used with the mod
+ *        function to select which Dna array is to be used.  The
+ *        number of arrays in a DnaHash should be a prime number.
+ *        If there are N items, we set up the DnaHash array to have
+ *        approximately N/20 Dna, so the average size of these arrays
+ *        will be about 20 when fully populated.  The number 20 was
+ *        found empirically to be in a broad maximum of efficiency.
+ *    (2) Note that the word "hash" is overloaded.  There are actually
+ *        two hashing steps: the first hashes the object to a l_uint64,
+ *        called the "key", and the second uses the mod function to
+ *        "hash" the "key" to the index of a particular Dna in the
+ *        DnaHash array.
+ *    (3) Insertion and lookup time for DnaHash is O(1).  Hash collisions
+ *        are easily handled (we expect an average of 20 for each key),
+ *        so we can use simple (fast) hash functions: we deal with
+ *        collisions by storing an array for each hash key.
+ *        This can be contrasted with using rbtree for sets and
+ *        maps, where insertion and lookup are O(logN) and hash functions
+ *        are slower because they must be good enough (i.e, random
+ *        enough with arbitrary input) to avoid collisions.
+ *    (4) Hash functions that map points, strings and floats to l_uint64
+ *        are given in utils.c.
+ *    (5) The use of the DnaHash (and RBTree) with strings and
+ *        (x,y) points can be found in string2.c and ptafunc2.c, rsp.
+ *        This file has similar hash set functions, using DnaHash on
+ *        two input Dna, for removing duplicates and finding the
+ *        intersection.  It also uses DnaHash as a hash map to find
+ *        a histogram of counts from an input Dna.
+ *    (6) Comparisons in running time, between DnaHash and RBTree, for
+ *        large sets of strings and points, are given in prog/hashtest.c.
+ *    (7) This is a very simple implementation, that expects that you
+ *        know approximately (i.e., within a factor of 2 or 3) how many
+ *        items are to be stored when you initialize the DnaHash.
+ *        (It would be nice to modify the l_dnaHashAdd() function
+ *        to increase the number of bins when the average occupation
+ *        exceeds 40 or so.)
+ *    (8) Useful rule of thumb for hashing collisions:
+ *        For a random hashing function (say, from strings to l_uint64),
+ *        the probability of a collision increases as N^2 for N much
+ *        less than 2^32.  The quadratic behavior switches over to
+ *        approaching 1.0 around 2^32, which is the square root of 2^64.
+ *        So, for example, if you have 10^7 strings, the probability
+ *        of a single collision using an l_uint64 key is on the order of
+ *            (10^7/10^9)^2 ~ 10^-4.
+ *        For a million strings you don't need to worry about collisons
+ *        (~10-6 probability), and for most applications can use the
+ *        RBTree (sorting) implementation with confidence.
+ * 
+ */ + +#include "allheaders.h" + +/*--------------------------------------------------------------------------* + * Dna hash: Creation and destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaHashCreate() + * + * \param[in] nbuckets the number of buckets in the hash table, + * which should be prime. + * \param[in] initsize initial size of each allocated dna; 0 for default + * \return ptr to new dnahash, or NULL on error + * + *
+ * Notes:
+ *      (1) Actual dna are created only as required by l_dnaHashAdd()
+ * 
+ */ +L_DNAHASH * +l_dnaHashCreate(l_int32 nbuckets, + l_int32 initsize) +{ +L_DNAHASH *dahash; + + PROCNAME("l_dnaHashCreate"); + + if (nbuckets <= 0) + return (L_DNAHASH *)ERROR_PTR("negative hash size", procName, NULL); + dahash = (L_DNAHASH *)LEPT_CALLOC(1, sizeof(L_DNAHASH)); + if ((dahash->dna = (L_DNA **)LEPT_CALLOC(nbuckets, sizeof(L_DNA *))) + == NULL) { + LEPT_FREE(dahash); + return (L_DNAHASH *)ERROR_PTR("dna ptr array not made", procName, NULL); + } + + dahash->nbuckets = nbuckets; + dahash->initsize = initsize; + return dahash; +} + + +/*! + * \brief l_dnaHashDestroy() + * + * \param[in,out] pdahash will be set to null before returning + * \return void + */ +void +l_dnaHashDestroy(L_DNAHASH **pdahash) +{ +L_DNAHASH *dahash; +l_int32 i; + + PROCNAME("l_dnaHashDestroy"); + + if (pdahash == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((dahash = *pdahash) == NULL) + return; + + for (i = 0; i < dahash->nbuckets; i++) + l_dnaDestroy(&dahash->dna[i]); + LEPT_FREE(dahash->dna); + LEPT_FREE(dahash); + *pdahash = NULL; +} + + +/*--------------------------------------------------------------------------* + * Dna hash: Accessors and modifiers * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaHashGetCount() + * + * \param[in] dahash + * \return nbuckets allocated, or 0 on error + */ +l_int32 +l_dnaHashGetCount(L_DNAHASH *dahash) +{ + + PROCNAME("l_dnaHashGetCount"); + + if (!dahash) + return ERROR_INT("dahash not defined", procName, 0); + return dahash->nbuckets; +} + + +/*! + * \brief l_dnaHashGetTotalCount() + * + * \param[in] dahash + * \return n number of numbers in all dna, or 0 on error + */ +l_int32 +l_dnaHashGetTotalCount(L_DNAHASH *dahash) +{ +l_int32 i, n; +L_DNA *da; + + PROCNAME("l_dnaHashGetTotalCount"); + + if (!dahash) + return ERROR_INT("dahash not defined", procName, 0); + + for (i = 0, n = 0; i < dahash->nbuckets; i++) { + da = l_dnaHashGetDna(dahash, i, L_NOCOPY); + if (da) + n += l_dnaGetCount(da); + } + + return n; +} + + +/*! + * \brief l_dnaHashGetDna() + * + * \param[in] dahash + * \param[in] key key to be hashed into a bucket number + * \param[in] copyflag L_NOCOPY, L_COPY, L_CLONE + * \return ptr to dna + */ +L_DNA * +l_dnaHashGetDna(L_DNAHASH *dahash, + l_uint64 key, + l_int32 copyflag) +{ +l_int32 bucket; +L_DNA *da; + + PROCNAME("l_dnaHashGetDna"); + + if (!dahash) + return (L_DNA *)ERROR_PTR("dahash not defined", procName, NULL); + bucket = key % dahash->nbuckets; + da = dahash->dna[bucket]; + if (da) { + if (copyflag == L_NOCOPY) + return da; + else if (copyflag == L_COPY) + return l_dnaCopy(da); + else + return l_dnaClone(da); + } + else + return NULL; +} + + +/*! + * \brief l_dnaHashAdd() + * + * \param[in] dahash + * \param[in] key key to be hashed into a bucket number + * \param[in] value float value to be appended to the specific dna + * \return 0 if OK; 1 on error + */ +l_ok +l_dnaHashAdd(L_DNAHASH *dahash, + l_uint64 key, + l_float64 value) +{ +l_int32 bucket; +L_DNA *da; + + PROCNAME("l_dnaHashAdd"); + + if (!dahash) + return ERROR_INT("dahash not defined", procName, 1); + bucket = key % dahash->nbuckets; + da = dahash->dna[bucket]; + if (!da) { + if ((da = l_dnaCreate(dahash->initsize)) == NULL) + return ERROR_INT("da not made", procName, 1); + dahash->dna[bucket] = da; + } + l_dnaAddNumber(da, value); + return 0; +} + + +/*--------------------------------------------------------------------------* + * DnaHash: Operations on Dna * + *--------------------------------------------------------------------------*/ +/*! + * \brief l_dnaHashCreateFromDna() + * + * \param[in] da + * \return dahash if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The values stored in the %dahash are indices into %da;
+ *          %dahash has no use without %da.
+ * 
+ */ +L_DNAHASH * +l_dnaHashCreateFromDna(L_DNA *da) +{ +l_int32 i, n; +l_uint32 nsize; +l_uint64 key; +l_float64 val; +L_DNAHASH *dahash; + + PROCNAME("l_dnaHashCreateFromDna"); + + if (!da) + return (L_DNAHASH *)ERROR_PTR("da not defined", procName, NULL); + + n = l_dnaGetCount(da); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ + + dahash = l_dnaHashCreate(nsize, 8); + for (i = 0; i < n; i++) { + l_dnaGetDValue(da, i, &val); + l_hashFloat64ToUint64(nsize, val, &key); + l_dnaHashAdd(dahash, key, (l_float64)i); + } + + return dahash; +} + + +/*! + * \brief l_dnaRemoveDupsByHash() + * + * \param[in] das + * \param[out] pdad hash set + * \param[out] pdahash [optional] dnahash used for lookup + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Generates a dna with unique values.
+ *      (2) The dnahash is built up with dad to assure uniqueness.
+ *          It can be used to find if an element is in the set:
+ *              l_dnaFindValByHash(dad, dahash, val, &index)
+ * 
+ */ +l_ok +l_dnaRemoveDupsByHash(L_DNA *das, + L_DNA **pdad, + L_DNAHASH **pdahash) +{ +l_int32 i, n, index, items; +l_uint32 nsize; +l_uint64 key; +l_float64 val; +L_DNA *dad; +L_DNAHASH *dahash; + + PROCNAME("l_dnaRemoveDupsByHash"); + + if (pdahash) *pdahash = NULL; + if (!pdad) + return ERROR_INT("&dad not defined", procName, 1); + *pdad = NULL; + if (!das) + return ERROR_INT("das not defined", procName, 1); + + n = l_dnaGetCount(das); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ + dahash = l_dnaHashCreate(nsize, 8); + dad = l_dnaCreate(n); + *pdad = dad; + for (i = 0, items = 0; i < n; i++) { + l_dnaGetDValue(das, i, &val); + l_dnaFindValByHash(dad, dahash, val, &index); + if (index < 0) { /* not found */ + l_hashFloat64ToUint64(nsize, val, &key); + l_dnaHashAdd(dahash, key, (l_float64)items); + l_dnaAddNumber(dad, val); + items++; + } + } + + if (pdahash) + *pdahash = dahash; + else + l_dnaHashDestroy(&dahash); + return 0; +} + + +/*! + * \brief l_dnaMakeHistoByHash() + * + * \param[in] das + * \param[out] pdahash hash map: val --> index + * \param[out] pdav array of values: index --> val + * \param[out] pdac histo array of counts: index --> count + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Generates and returns a dna of occurrences (histogram),
+ *          an aligned dna of values, and an associated hashmap.
+ *          The hashmap takes %dav and a value, and points into the
+ *          histogram in %dac.
+ *      (2) The dna of values, %dav, is aligned with the histogram %dac,
+ *          and is needed for fast lookup.  It is a hash set, because
+ *          the values are unique.
+ *      (3) Lookup is simple:
+ *              l_dnaFindValByHash(dav, dahash, val, &index);
+ *              if (index >= 0)
+ *                  l_dnaGetIValue(dac, index, &icount);
+ *              else
+ *                  icount = 0;
+ * 
+ */ +l_ok +l_dnaMakeHistoByHash(L_DNA *das, + L_DNAHASH **pdahash, + L_DNA **pdav, + L_DNA **pdac) +{ +l_int32 i, n, nitems, index, count; +l_uint32 nsize; +l_uint64 key; +l_float64 val; +L_DNA *dac, *dav; +L_DNAHASH *dahash; + + PROCNAME("l_dnaMakeHistoByHash"); + + if (pdahash) *pdahash = NULL; + if (pdac) *pdac = NULL; + if (pdav) *pdav = NULL; + if (!pdahash || !pdac || !pdav) + return ERROR_INT("&dahash, &dac, &dav not all defined", procName, 1); + if (!das) + return ERROR_INT("das not defined", procName, 1); + if ((n = l_dnaGetCount(das)) == 0) + return ERROR_INT("no data in das", procName, 1); + + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ + dahash = l_dnaHashCreate(nsize, 8); + dac = l_dnaCreate(n); /* histogram */ + dav = l_dnaCreate(n); /* the values */ + for (i = 0, nitems = 0; i < n; i++) { + l_dnaGetDValue(das, i, &val); + /* Is this value already stored in dav? */ + l_dnaFindValByHash(dav, dahash, val, &index); + if (index >= 0) { /* found */ + l_dnaGetIValue(dac, (l_float64)index, &count); + l_dnaSetValue(dac, (l_float64)index, count + 1); + } else { /* not found */ + l_hashFloat64ToUint64(nsize, val, &key); + l_dnaHashAdd(dahash, key, (l_float64)nitems); + l_dnaAddNumber(dav, val); + l_dnaAddNumber(dac, 1); + nitems++; + } + } + + *pdahash = dahash; + *pdac = dac; + *pdav = dav; + return 0; +} + + +/*! + * \brief l_dnaIntersectionByHash() + * + * \param[in] da1, da2 + * \return dad intersection of the number arrays, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses the same method for building the intersection set
+ *          as ptaIntersectionByHash() and sarrayIntersectionByHash().
+ * 
+ */ +L_DNA * +l_dnaIntersectionByHash(L_DNA *da1, + L_DNA *da2) +{ +l_int32 n1, n2, nsmall, nbuckets, i, index1, index2; +l_uint32 nsize2; +l_uint64 key; +l_float64 val; +L_DNAHASH *dahash1, *dahash2; +L_DNA *da_small, *da_big, *dad; + + PROCNAME("l_dnaIntersectionByHash"); + + if (!da1) + return (L_DNA *)ERROR_PTR("da1 not defined", procName, NULL); + if (!da2) + return (L_DNA *)ERROR_PTR("da2 not defined", procName, NULL); + + /* Put the elements of the biggest array into a dnahash */ + n1 = l_dnaGetCount(da1); + n2 = l_dnaGetCount(da2); + da_small = (n1 < n2) ? da1 : da2; /* do not destroy da_small */ + da_big = (n1 < n2) ? da2 : da1; /* do not destroy da_big */ + dahash1 = l_dnaHashCreateFromDna(da_big); + + /* Build up the intersection of numbers. Add to %dad + * if the number is in da_big (using dahash1) but hasn't + * yet been seen in the traversal of da_small (using dahash2). */ + dad = l_dnaCreate(0); + nsmall = l_dnaGetCount(da_small); + findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ + dahash2 = l_dnaHashCreate(nsize2, 0); + nbuckets = l_dnaHashGetCount(dahash2); + for (i = 0; i < nsmall; i++) { + l_dnaGetDValue(da_small, i, &val); + l_dnaFindValByHash(da_big, dahash1, val, &index1); + if (index1 >= 0) { /* found */ + l_dnaFindValByHash(da_small, dahash2, val, &index2); + if (index2 == -1) { /* not found */ + l_dnaAddNumber(dad, val); + l_hashFloat64ToUint64(nbuckets, val, &key); + l_dnaHashAdd(dahash2, key, (l_float64)i); + } + } + } + + l_dnaHashDestroy(&dahash1); + l_dnaHashDestroy(&dahash2); + return dad; +} + + +/*! + * \brief l_dnaFindValByHash() + * + * \param[in] da + * \param[in] dahash containing indices into %da + * \param[in] val searching for this number in %da + * \param[out] pindex index into da if found; -1 otherwise + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Algo: hash %val into a key; hash the key to get the dna
+ *                in %dahash (that holds indices into %da); traverse
+ *                the dna of indices looking for %val in %da.
+ * 
+ */ +l_ok +l_dnaFindValByHash(L_DNA *da, + L_DNAHASH *dahash, + l_float64 val, + l_int32 *pindex) +{ +l_int32 i, nbuckets, nvals, indexval; +l_float64 vali; +l_uint64 key; +L_DNA *da1; + + PROCNAME("l_dnaFindValByHash"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = -1; + if (!da) + return ERROR_INT("da not defined", procName, 1); + if (!dahash) + return ERROR_INT("dahash not defined", procName, 1); + + nbuckets = l_dnaHashGetCount(dahash); + l_hashFloat64ToUint64(nbuckets, val, &key); + da1 = l_dnaHashGetDna(dahash, key, L_NOCOPY); + if (!da1) return 0; + + /* Run through da1, looking for this %val */ + nvals = l_dnaGetCount(da1); + for (i = 0; i < nvals; i++) { + l_dnaGetIValue(da1, i, &indexval); + l_dnaGetDValue(da, indexval, &vali); + if (val == vali) { + *pindex = indexval; + return 0; + } + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/dwacomb.2.c b/3rdparty/hgOCR/leptonica/dwacomb.2.c new file mode 100644 index 00000000..438e3f0a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dwacomb.2.c @@ -0,0 +1,295 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Top-level fast binary morphology with auto-generated sels + * + * PIX *pixMorphDwa_2() + * PIX *pixFMorphopGen_2() + */ + +#include +#include "allheaders.h" + +PIX *pixMorphDwa_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); +PIX *pixFMorphopGen_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); +l_int32 fmorphopgen_low_2(l_uint32 *datad, l_int32 w, + l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, + l_int32 index); + +static l_int32 NUM_SELS_GENERATED = 76; +static char SEL_NAMES[][80] = { + "sel_comb_4h", + "sel_comb_4v", + "sel_comb_5h", + "sel_comb_5v", + "sel_comb_6h", + "sel_comb_6v", + "sel_comb_7h", + "sel_comb_7v", + "sel_comb_8h", + "sel_comb_8v", + "sel_comb_9h", + "sel_comb_9v", + "sel_comb_10h", + "sel_comb_10v", + "sel_comb_12h", + "sel_comb_12v", + "sel_comb_14h", + "sel_comb_14v", + "sel_comb_15h", + "sel_comb_15v", + "sel_comb_16h", + "sel_comb_16v", + "sel_comb_18h", + "sel_comb_18v", + "sel_comb_20h", + "sel_comb_20v", + "sel_comb_21h", + "sel_comb_21v", + "sel_comb_22h", + "sel_comb_22v", + "sel_comb_24h", + "sel_comb_24v", + "sel_comb_25h", + "sel_comb_25v", + "sel_comb_27h", + "sel_comb_27v", + "sel_comb_28h", + "sel_comb_28v", + "sel_comb_30h", + "sel_comb_30v", + "sel_comb_32h", + "sel_comb_32v", + "sel_comb_33h", + "sel_comb_33v", + "sel_comb_35h", + "sel_comb_35v", + "sel_comb_36h", + "sel_comb_36v", + "sel_comb_39h", + "sel_comb_39v", + "sel_comb_40h", + "sel_comb_40v", + "sel_comb_42h", + "sel_comb_42v", + "sel_comb_44h", + "sel_comb_44v", + "sel_comb_45h", + "sel_comb_45v", + "sel_comb_48h", + "sel_comb_48v", + "sel_comb_49h", + "sel_comb_49v", + "sel_comb_50h", + "sel_comb_50v", + "sel_comb_52h", + "sel_comb_52v", + "sel_comb_54h", + "sel_comb_54v", + "sel_comb_55h", + "sel_comb_55v", + "sel_comb_56h", + "sel_comb_56v", + "sel_comb_60h", + "sel_comb_60v", + "sel_comb_63h", + "sel_comb_63v"}; + +/*! + * \brief pixMorphDwa_2() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, + * L_MORPH_OPEN, L_MORPH_CLOSE + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This simply adds a border, calls the appropriate
+ *          pixFMorphopGen_*(), and removes the border.
+ *          See the notes for that function.
+ *      (2) The size of the border depends on the operation
+ *          and the boundary conditions.
+ * 
+ */ +PIX * +pixMorphDwa_2(PIX *pixd, + PIX *pixs, + l_int32 operation, + char *selname) +{ +l_int32 bordercolor, bordersize; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixMorphDwa_2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + /* Set the border size */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + bordersize = 32; + if (bordercolor == 0 && operation == L_MORPH_CLOSE) + bordersize += 32; + + pixt1 = pixAddBorder(pixs, bordersize, 0); + pixt2 = pixFMorphopGen_2(NULL, pixt1, operation, selname); + pixt3 = pixRemoveBorder(pixt2, bordersize); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixCopy(pixd, pixt3); + pixDestroy(&pixt3); + return pixd; +} + + +/*! + * \brief pixFMorphopGen_2() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, + * L_MORPH_OPEN, L_MORPH_CLOSE + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This is a dwa operation, and the Sels must be limited in
+ *          size to not more than 31 pixels about the origin.
+ *      (2) A border of appropriate size (32 pixels, or 64 pixels
+ *          for safe closing with asymmetric b.c.) must be added before
+ *          this function is called.
+ *      (3) This handles all required setting of the border pixels
+ *          before erosion and dilation.
+ *      (4) The closing operation is safe; no pixels can be removed
+ *          near the boundary.
+ * 
+ */ +PIX * +pixFMorphopGen_2(PIX *pixd, + PIX *pixs, + l_int32 operation, + char *selname) +{ +l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; +l_uint32 *datad, *datas, *datat; +PIX *pixt; + + PROCNAME("pixFMorphopGen_2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + /* Get boundary colors to use */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + if (bordercolor == 1) + erodeop = PIX_SET; + else + erodeop = PIX_CLR; + + found = FALSE; + for (i = 0; i < NUM_SELS_GENERATED; i++) { + if (strcmp(selname, SEL_NAMES[i]) == 0) { + found = TRUE; + index = 2 * i; + break; + } + } + if (found == FALSE) + return (PIX *)ERROR_PTR("sel index not found", procName, pixd); + + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + else /* for in-place or pre-allocated */ + pixResizeImageData(pixd, pixs); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + /* The images must be surrounded, in advance, with a border of + * size 32 pixels (or 64, for closing), that we'll read from. + * Fabricate a "proper" image as the subimage within the 32 + * pixel border, having the following parameters: */ + w = pixGetWidth(pixs) - 64; + h = pixGetHeight(pixs) - 64; + datas = pixGetData(pixs) + 32 * wpls + 1; + datad = pixGetData(pixd) + 32 * wpld + 1; + + if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { + borderop = PIX_CLR; + if (operation == L_MORPH_ERODE) { + borderop = erodeop; + index++; + } + if (pixd == pixs) { /* in-place; generate a temp image */ + if ((pixt = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + 32 * wpls + 1; + pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); + fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); + pixDestroy(&pixt); + } + else { /* not in-place */ + pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); + fmorphopgen_low_2(datad, w, h, wpld, datas, wpls, index); + } + } + else { /* opening or closing; generate a temp image */ + if ((pixt = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + 32 * wpls + 1; + if (operation == L_MORPH_OPEN) { + pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); + fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index+1); + pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); + fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); + } + else { /* closing */ + pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); + fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index); + pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); + fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index+1); + } + pixDestroy(&pixt); + } + + return pixd; +} + diff --git a/3rdparty/hgOCR/leptonica/dwacomblow.2.c b/3rdparty/hgOCR/leptonica/dwacomblow.2.c new file mode 100644 index 00000000..2831b9bb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/dwacomblow.2.c @@ -0,0 +1,4966 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Low-level fast binary morphology with auto-generated sels + * + * Dispatcher: + * l_int32 fmorphopgen_low_2() + * + * Static Low-level: + * void fdilate_2_*() + * void ferode_2_*() + */ + +#include "allheaders.h" + +static void fdilate_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); + + +/*---------------------------------------------------------------------* + * Fast morph dispatcher * + *---------------------------------------------------------------------*/ +/*! + * fmorphopgen_low_2() + * + * a dispatcher to appropriate low-level code + */ +l_int32 +fmorphopgen_low_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 index) +{ + + switch (index) + { + case 0: + fdilate_2_0(datad, w, h, wpld, datas, wpls); + break; + case 1: + ferode_2_0(datad, w, h, wpld, datas, wpls); + break; + case 2: + fdilate_2_1(datad, w, h, wpld, datas, wpls); + break; + case 3: + ferode_2_1(datad, w, h, wpld, datas, wpls); + break; + case 4: + fdilate_2_2(datad, w, h, wpld, datas, wpls); + break; + case 5: + ferode_2_2(datad, w, h, wpld, datas, wpls); + break; + case 6: + fdilate_2_3(datad, w, h, wpld, datas, wpls); + break; + case 7: + ferode_2_3(datad, w, h, wpld, datas, wpls); + break; + case 8: + fdilate_2_4(datad, w, h, wpld, datas, wpls); + break; + case 9: + ferode_2_4(datad, w, h, wpld, datas, wpls); + break; + case 10: + fdilate_2_5(datad, w, h, wpld, datas, wpls); + break; + case 11: + ferode_2_5(datad, w, h, wpld, datas, wpls); + break; + case 12: + fdilate_2_6(datad, w, h, wpld, datas, wpls); + break; + case 13: + ferode_2_6(datad, w, h, wpld, datas, wpls); + break; + case 14: + fdilate_2_7(datad, w, h, wpld, datas, wpls); + break; + case 15: + ferode_2_7(datad, w, h, wpld, datas, wpls); + break; + case 16: + fdilate_2_8(datad, w, h, wpld, datas, wpls); + break; + case 17: + ferode_2_8(datad, w, h, wpld, datas, wpls); + break; + case 18: + fdilate_2_9(datad, w, h, wpld, datas, wpls); + break; + case 19: + ferode_2_9(datad, w, h, wpld, datas, wpls); + break; + case 20: + fdilate_2_10(datad, w, h, wpld, datas, wpls); + break; + case 21: + ferode_2_10(datad, w, h, wpld, datas, wpls); + break; + case 22: + fdilate_2_11(datad, w, h, wpld, datas, wpls); + break; + case 23: + ferode_2_11(datad, w, h, wpld, datas, wpls); + break; + case 24: + fdilate_2_12(datad, w, h, wpld, datas, wpls); + break; + case 25: + ferode_2_12(datad, w, h, wpld, datas, wpls); + break; + case 26: + fdilate_2_13(datad, w, h, wpld, datas, wpls); + break; + case 27: + ferode_2_13(datad, w, h, wpld, datas, wpls); + break; + case 28: + fdilate_2_14(datad, w, h, wpld, datas, wpls); + break; + case 29: + ferode_2_14(datad, w, h, wpld, datas, wpls); + break; + case 30: + fdilate_2_15(datad, w, h, wpld, datas, wpls); + break; + case 31: + ferode_2_15(datad, w, h, wpld, datas, wpls); + break; + case 32: + fdilate_2_16(datad, w, h, wpld, datas, wpls); + break; + case 33: + ferode_2_16(datad, w, h, wpld, datas, wpls); + break; + case 34: + fdilate_2_17(datad, w, h, wpld, datas, wpls); + break; + case 35: + ferode_2_17(datad, w, h, wpld, datas, wpls); + break; + case 36: + fdilate_2_18(datad, w, h, wpld, datas, wpls); + break; + case 37: + ferode_2_18(datad, w, h, wpld, datas, wpls); + break; + case 38: + fdilate_2_19(datad, w, h, wpld, datas, wpls); + break; + case 39: + ferode_2_19(datad, w, h, wpld, datas, wpls); + break; + case 40: + fdilate_2_20(datad, w, h, wpld, datas, wpls); + break; + case 41: + ferode_2_20(datad, w, h, wpld, datas, wpls); + break; + case 42: + fdilate_2_21(datad, w, h, wpld, datas, wpls); + break; + case 43: + ferode_2_21(datad, w, h, wpld, datas, wpls); + break; + case 44: + fdilate_2_22(datad, w, h, wpld, datas, wpls); + break; + case 45: + ferode_2_22(datad, w, h, wpld, datas, wpls); + break; + case 46: + fdilate_2_23(datad, w, h, wpld, datas, wpls); + break; + case 47: + ferode_2_23(datad, w, h, wpld, datas, wpls); + break; + case 48: + fdilate_2_24(datad, w, h, wpld, datas, wpls); + break; + case 49: + ferode_2_24(datad, w, h, wpld, datas, wpls); + break; + case 50: + fdilate_2_25(datad, w, h, wpld, datas, wpls); + break; + case 51: + ferode_2_25(datad, w, h, wpld, datas, wpls); + break; + case 52: + fdilate_2_26(datad, w, h, wpld, datas, wpls); + break; + case 53: + ferode_2_26(datad, w, h, wpld, datas, wpls); + break; + case 54: + fdilate_2_27(datad, w, h, wpld, datas, wpls); + break; + case 55: + ferode_2_27(datad, w, h, wpld, datas, wpls); + break; + case 56: + fdilate_2_28(datad, w, h, wpld, datas, wpls); + break; + case 57: + ferode_2_28(datad, w, h, wpld, datas, wpls); + break; + case 58: + fdilate_2_29(datad, w, h, wpld, datas, wpls); + break; + case 59: + ferode_2_29(datad, w, h, wpld, datas, wpls); + break; + case 60: + fdilate_2_30(datad, w, h, wpld, datas, wpls); + break; + case 61: + ferode_2_30(datad, w, h, wpld, datas, wpls); + break; + case 62: + fdilate_2_31(datad, w, h, wpld, datas, wpls); + break; + case 63: + ferode_2_31(datad, w, h, wpld, datas, wpls); + break; + case 64: + fdilate_2_32(datad, w, h, wpld, datas, wpls); + break; + case 65: + ferode_2_32(datad, w, h, wpld, datas, wpls); + break; + case 66: + fdilate_2_33(datad, w, h, wpld, datas, wpls); + break; + case 67: + ferode_2_33(datad, w, h, wpld, datas, wpls); + break; + case 68: + fdilate_2_34(datad, w, h, wpld, datas, wpls); + break; + case 69: + ferode_2_34(datad, w, h, wpld, datas, wpls); + break; + case 70: + fdilate_2_35(datad, w, h, wpld, datas, wpls); + break; + case 71: + ferode_2_35(datad, w, h, wpld, datas, wpls); + break; + case 72: + fdilate_2_36(datad, w, h, wpld, datas, wpls); + break; + case 73: + ferode_2_36(datad, w, h, wpld, datas, wpls); + break; + case 74: + fdilate_2_37(datad, w, h, wpld, datas, wpls); + break; + case 75: + ferode_2_37(datad, w, h, wpld, datas, wpls); + break; + case 76: + fdilate_2_38(datad, w, h, wpld, datas, wpls); + break; + case 77: + ferode_2_38(datad, w, h, wpld, datas, wpls); + break; + case 78: + fdilate_2_39(datad, w, h, wpld, datas, wpls); + break; + case 79: + ferode_2_39(datad, w, h, wpld, datas, wpls); + break; + case 80: + fdilate_2_40(datad, w, h, wpld, datas, wpls); + break; + case 81: + ferode_2_40(datad, w, h, wpld, datas, wpls); + break; + case 82: + fdilate_2_41(datad, w, h, wpld, datas, wpls); + break; + case 83: + ferode_2_41(datad, w, h, wpld, datas, wpls); + break; + case 84: + fdilate_2_42(datad, w, h, wpld, datas, wpls); + break; + case 85: + ferode_2_42(datad, w, h, wpld, datas, wpls); + break; + case 86: + fdilate_2_43(datad, w, h, wpld, datas, wpls); + break; + case 87: + ferode_2_43(datad, w, h, wpld, datas, wpls); + break; + case 88: + fdilate_2_44(datad, w, h, wpld, datas, wpls); + break; + case 89: + ferode_2_44(datad, w, h, wpld, datas, wpls); + break; + case 90: + fdilate_2_45(datad, w, h, wpld, datas, wpls); + break; + case 91: + ferode_2_45(datad, w, h, wpld, datas, wpls); + break; + case 92: + fdilate_2_46(datad, w, h, wpld, datas, wpls); + break; + case 93: + ferode_2_46(datad, w, h, wpld, datas, wpls); + break; + case 94: + fdilate_2_47(datad, w, h, wpld, datas, wpls); + break; + case 95: + ferode_2_47(datad, w, h, wpld, datas, wpls); + break; + case 96: + fdilate_2_48(datad, w, h, wpld, datas, wpls); + break; + case 97: + ferode_2_48(datad, w, h, wpld, datas, wpls); + break; + case 98: + fdilate_2_49(datad, w, h, wpld, datas, wpls); + break; + case 99: + ferode_2_49(datad, w, h, wpld, datas, wpls); + break; + case 100: + fdilate_2_50(datad, w, h, wpld, datas, wpls); + break; + case 101: + ferode_2_50(datad, w, h, wpld, datas, wpls); + break; + case 102: + fdilate_2_51(datad, w, h, wpld, datas, wpls); + break; + case 103: + ferode_2_51(datad, w, h, wpld, datas, wpls); + break; + case 104: + fdilate_2_52(datad, w, h, wpld, datas, wpls); + break; + case 105: + ferode_2_52(datad, w, h, wpld, datas, wpls); + break; + case 106: + fdilate_2_53(datad, w, h, wpld, datas, wpls); + break; + case 107: + ferode_2_53(datad, w, h, wpld, datas, wpls); + break; + case 108: + fdilate_2_54(datad, w, h, wpld, datas, wpls); + break; + case 109: + ferode_2_54(datad, w, h, wpld, datas, wpls); + break; + case 110: + fdilate_2_55(datad, w, h, wpld, datas, wpls); + break; + case 111: + ferode_2_55(datad, w, h, wpld, datas, wpls); + break; + case 112: + fdilate_2_56(datad, w, h, wpld, datas, wpls); + break; + case 113: + ferode_2_56(datad, w, h, wpld, datas, wpls); + break; + case 114: + fdilate_2_57(datad, w, h, wpld, datas, wpls); + break; + case 115: + ferode_2_57(datad, w, h, wpld, datas, wpls); + break; + case 116: + fdilate_2_58(datad, w, h, wpld, datas, wpls); + break; + case 117: + ferode_2_58(datad, w, h, wpld, datas, wpls); + break; + case 118: + fdilate_2_59(datad, w, h, wpld, datas, wpls); + break; + case 119: + ferode_2_59(datad, w, h, wpld, datas, wpls); + break; + case 120: + fdilate_2_60(datad, w, h, wpld, datas, wpls); + break; + case 121: + ferode_2_60(datad, w, h, wpld, datas, wpls); + break; + case 122: + fdilate_2_61(datad, w, h, wpld, datas, wpls); + break; + case 123: + ferode_2_61(datad, w, h, wpld, datas, wpls); + break; + case 124: + fdilate_2_62(datad, w, h, wpld, datas, wpls); + break; + case 125: + ferode_2_62(datad, w, h, wpld, datas, wpls); + break; + case 126: + fdilate_2_63(datad, w, h, wpld, datas, wpls); + break; + case 127: + ferode_2_63(datad, w, h, wpld, datas, wpls); + break; + case 128: + fdilate_2_64(datad, w, h, wpld, datas, wpls); + break; + case 129: + ferode_2_64(datad, w, h, wpld, datas, wpls); + break; + case 130: + fdilate_2_65(datad, w, h, wpld, datas, wpls); + break; + case 131: + ferode_2_65(datad, w, h, wpld, datas, wpls); + break; + case 132: + fdilate_2_66(datad, w, h, wpld, datas, wpls); + break; + case 133: + ferode_2_66(datad, w, h, wpld, datas, wpls); + break; + case 134: + fdilate_2_67(datad, w, h, wpld, datas, wpls); + break; + case 135: + ferode_2_67(datad, w, h, wpld, datas, wpls); + break; + case 136: + fdilate_2_68(datad, w, h, wpld, datas, wpls); + break; + case 137: + ferode_2_68(datad, w, h, wpld, datas, wpls); + break; + case 138: + fdilate_2_69(datad, w, h, wpld, datas, wpls); + break; + case 139: + ferode_2_69(datad, w, h, wpld, datas, wpls); + break; + case 140: + fdilate_2_70(datad, w, h, wpld, datas, wpls); + break; + case 141: + ferode_2_70(datad, w, h, wpld, datas, wpls); + break; + case 142: + fdilate_2_71(datad, w, h, wpld, datas, wpls); + break; + case 143: + ferode_2_71(datad, w, h, wpld, datas, wpls); + break; + case 144: + fdilate_2_72(datad, w, h, wpld, datas, wpls); + break; + case 145: + ferode_2_72(datad, w, h, wpld, datas, wpls); + break; + case 146: + fdilate_2_73(datad, w, h, wpld, datas, wpls); + break; + case 147: + ferode_2_73(datad, w, h, wpld, datas, wpls); + break; + case 148: + fdilate_2_74(datad, w, h, wpld, datas, wpls); + break; + case 149: + ferode_2_74(datad, w, h, wpld, datas, wpls); + break; + case 150: + fdilate_2_75(datad, w, h, wpld, datas, wpls); + break; + case 151: + ferode_2_75(datad, w, h, wpld, datas, wpls); + break; + } + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Low-level auto-generated static routines * + *--------------------------------------------------------------------------*/ +/* + * N.B. In all the low-level routines, the part of the image + * that is accessed has been clipped by 32 pixels on + * all four sides. This is done in the higher level + * code by redefining w and h smaller and by moving the + * start-of-image pointers up to the beginning of this + * interior rectangle. + */ +static void +fdilate_2_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)); + } + } +} + +static void +ferode_2_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)); + } + } +} + +static void +fdilate_2_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls)) | + (*(sptr - wpls)); + } + } +} + +static void +ferode_2_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls)) & + (*(sptr + wpls)); + } + } +} + +static void +fdilate_2_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +ferode_2_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +fdilate_2_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +ferode_2_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +fdilate_2_4(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)); + } + } +} + +static void +ferode_2_4(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)); + } + } +} + +static void +fdilate_2_5(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls2)) | + (*(sptr - wpls)); + } + } +} + +static void +ferode_2_5(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls2)) & + (*(sptr + wpls)); + } + } +} + +static void +fdilate_2_6(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +ferode_2_6(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +fdilate_2_7(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +ferode_2_7(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr); + } + } +} + +static void +fdilate_2_8(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)); + } + } +} + +static void +ferode_2_8(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)); + } + } +} + +static void +fdilate_2_9(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls2)) | + (*(sptr - wpls2)); + } + } +} + +static void +ferode_2_9(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls2)) & + (*(sptr + wpls2)); + } + } +} + +static void +fdilate_2_10(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + (*sptr) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)); + } + } +} + +static void +ferode_2_10(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + (*sptr) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)); + } + } +} + +static void +fdilate_2_11(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; + + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls3)) | + (*sptr) | + (*(sptr - wpls3)); + } + } +} + +static void +ferode_2_11(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; + + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls3)) & + (*sptr) & + (*(sptr + wpls3)); + } + } +} + +static void +fdilate_2_12(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)); + } + } +} + +static void +ferode_2_12(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)); + } + } +} + +static void +fdilate_2_13(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls3)) | + (*(sptr - wpls2)); + } + } +} + +static void +ferode_2_13(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls3)) & + (*(sptr + wpls2)); + } + } +} + +static void +fdilate_2_14(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + (*sptr) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)); + } + } +} + +static void +ferode_2_14(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + (*sptr) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)); + } + } +} + +static void +fdilate_2_15(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; + + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls4)) | + (*sptr) | + (*(sptr - wpls4)); + } + } +} + +static void +ferode_2_15(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; + + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls4)) & + (*sptr) & + (*(sptr + wpls4)); + } + } +} + +static void +fdilate_2_16(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)); + } + } +} + +static void +ferode_2_16(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)); + } + } +} + +static void +fdilate_2_17(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls4)) | + (*(sptr - wpls3)); + } + } +} + +static void +ferode_2_17(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls4)) & + (*(sptr + wpls3)); + } + } +} + +static void +fdilate_2_18(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + (*sptr) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)); + } + } +} + +static void +ferode_2_18(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + (*sptr) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)); + } + } +} + +static void +fdilate_2_19(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; + + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls5)) | + (*sptr) | + (*(sptr - wpls5)); + } + } +} + +static void +ferode_2_19(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; + + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls5)) & + (*sptr) & + (*(sptr + wpls5)); + } + } +} + +static void +fdilate_2_20(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)); + } + } +} + +static void +ferode_2_20(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)); + } + } +} + +static void +fdilate_2_21(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls6; + + wpls2 = 2 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls6)) | + (*(sptr + wpls2)) | + (*(sptr - wpls2)) | + (*(sptr - wpls6)); + } + } +} + +static void +ferode_2_21(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls6; + + wpls2 = 2 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls6)) & + (*(sptr - wpls2)) & + (*(sptr + wpls2)) & + (*(sptr + wpls6)); + } + } +} + +static void +fdilate_2_22(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + (*sptr) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)); + } + } +} + +static void +ferode_2_22(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + (*sptr) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)); + } + } +} + +static void +fdilate_2_23(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; + + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls6)) | + (*sptr) | + (*(sptr - wpls6)); + } + } +} + +static void +ferode_2_23(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; + + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls6)) & + (*sptr) & + (*(sptr + wpls6)); + } + } +} + +static void +fdilate_2_24(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)); + } + } +} + +static void +ferode_2_24(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)); + } + } +} + +static void +fdilate_2_25(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls3; +l_int32 wpls7; +l_int32 wpls8; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls8)) | + (*(sptr + wpls3)) | + (*(sptr - wpls2)) | + (*(sptr - wpls7)); + } + } +} + +static void +ferode_2_25(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; +l_int32 wpls3; +l_int32 wpls7; +l_int32 wpls8; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls8)) & + (*(sptr - wpls3)) & + (*(sptr + wpls2)) & + (*(sptr + wpls7)); + } + } +} + +static void +fdilate_2_26(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + (*sptr) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)); + } + } +} + +static void +ferode_2_26(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + (*sptr) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)); + } + } +} + +static void +fdilate_2_27(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; + + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls7)) | + (*sptr) | + (*(sptr - wpls7)); + } + } +} + +static void +ferode_2_27(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; + + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls7)) & + (*sptr) & + (*(sptr + wpls7)); + } + } +} + +static void +fdilate_2_28(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)); + } + } +} + +static void +ferode_2_28(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)); + } + } +} + +static void +fdilate_2_29(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls6; + + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls6)) | + (*(sptr - wpls5)); + } + } +} + +static void +ferode_2_29(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls6; + + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls6)) & + (*(sptr + wpls5)); + } + } +} + +static void +fdilate_2_30(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)); + } + } +} + +static void +ferode_2_30(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)); + } + } +} + +static void +fdilate_2_31(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls9; + + wpls3 = 3 * wpls; + wpls9 = 9 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls9)) | + (*(sptr + wpls3)) | + (*(sptr - wpls3)) | + (*(sptr - wpls9)); + } + } +} + +static void +ferode_2_31(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls9; + + wpls3 = 3 * wpls; + wpls9 = 9 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls9)) & + (*(sptr - wpls3)) & + (*(sptr + wpls3)) & + (*(sptr + wpls9)); + } + } +} + +static void +fdilate_2_32(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + (*sptr) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)); + } + } +} + +static void +ferode_2_32(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + (*sptr) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)); + } + } +} + +static void +fdilate_2_33(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls10; + + wpls5 = 5 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls10)) | + (*(sptr + wpls5)) | + (*sptr) | + (*(sptr - wpls5)) | + (*(sptr - wpls10)); + } + } +} + +static void +ferode_2_33(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls10; + + wpls5 = 5 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls10)) & + (*(sptr - wpls5)) & + (*sptr) & + (*(sptr + wpls5)) & + (*(sptr + wpls10)); + } + } +} + +static void +fdilate_2_34(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + (*sptr) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)); + } + } +} + +static void +ferode_2_34(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + (*sptr) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)); + } + } +} + +static void +fdilate_2_35(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; + + wpls9 = 9 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls9)) | + (*sptr) | + (*(sptr - wpls9)); + } + } +} + +static void +ferode_2_35(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; + + wpls9 = 9 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls9)) & + (*sptr) & + (*(sptr + wpls9)); + } + } +} + +static void +fdilate_2_36(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)); + } + } +} + +static void +ferode_2_36(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)); + } + } +} + +static void +fdilate_2_37(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; +l_int32 wpls10; +l_int32 wpls11; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls11)) | + (*(sptr + wpls4)) | + (*(sptr - wpls3)) | + (*(sptr - wpls10)); + } + } +} + +static void +ferode_2_37(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; +l_int32 wpls10; +l_int32 wpls11; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls11)) & + (*(sptr - wpls4)) & + (*(sptr + wpls3)) & + (*(sptr + wpls10)); + } + } +} + +static void +fdilate_2_38(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + (*sptr) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)); + } + } +} + +static void +ferode_2_38(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + (*sptr) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)); + } + } +} + +static void +fdilate_2_39(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; +l_int32 wpls12; + + wpls6 = 6 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls12)) | + (*(sptr + wpls6)) | + (*sptr) | + (*(sptr - wpls6)) | + (*(sptr - wpls12)); + } + } +} + +static void +ferode_2_39(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; +l_int32 wpls12; + + wpls6 = 6 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls12)) & + (*(sptr - wpls6)) & + (*sptr) & + (*(sptr + wpls6)) & + (*(sptr + wpls12)); + } + } +} + +static void +fdilate_2_40(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)); + } + } +} + +static void +ferode_2_40(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)); + } + } +} + +static void +fdilate_2_41(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls12; + + wpls4 = 4 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls12)) | + (*(sptr + wpls4)) | + (*(sptr - wpls4)) | + (*(sptr - wpls12)); + } + } +} + +static void +ferode_2_41(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls12; + + wpls4 = 4 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls12)) & + (*(sptr - wpls4)) & + (*(sptr + wpls4)) & + (*(sptr + wpls12)); + } + } +} + +static void +fdilate_2_42(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + (*sptr) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)); + } + } +} + +static void +ferode_2_42(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + (*sptr) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)); + } + } +} + +static void +fdilate_2_43(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls11; + + wpls11 = 11 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls11)) | + (*sptr) | + (*(sptr - wpls11)); + } + } +} + +static void +ferode_2_43(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls11; + + wpls11 = 11 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls11)) & + (*sptr) & + (*(sptr + wpls11)); + } + } +} + +static void +fdilate_2_44(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + (*sptr) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)); + } + } +} + +static void +ferode_2_44(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + (*sptr) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)); + } + } +} + +static void +fdilate_2_45(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; +l_int32 wpls14; + + wpls7 = 7 * wpls; + wpls14 = 14 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls14)) | + (*(sptr + wpls7)) | + (*sptr) | + (*(sptr - wpls7)) | + (*(sptr - wpls14)); + } + } +} + +static void +ferode_2_45(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; +l_int32 wpls14; + + wpls7 = 7 * wpls; + wpls14 = 14 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls14)) & + (*(sptr - wpls7)) & + (*sptr) & + (*(sptr + wpls7)) & + (*(sptr + wpls14)); + } + } +} + +static void +fdilate_2_46(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)); + } + } +} + +static void +ferode_2_46(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)); + } + } +} + +static void +fdilate_2_47(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls9; +l_int32 wpls15; + + wpls3 = 3 * wpls; + wpls9 = 9 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls15)) | + (*(sptr + wpls9)) | + (*(sptr + wpls3)) | + (*(sptr - wpls3)) | + (*(sptr - wpls9)) | + (*(sptr - wpls15)); + } + } +} + +static void +ferode_2_47(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls9; +l_int32 wpls15; + + wpls3 = 3 * wpls; + wpls9 = 9 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls15)) & + (*(sptr - wpls9)) & + (*(sptr - wpls3)) & + (*(sptr + wpls3)) & + (*(sptr + wpls9)) & + (*(sptr + wpls15)); + } + } +} + +static void +fdilate_2_48(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + (*sptr) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)); + } + } +} + +static void +ferode_2_48(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + (*sptr) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)); + } + } +} + +static void +fdilate_2_49(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls13; + + wpls13 = 13 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls13)) | + (*sptr) | + (*(sptr - wpls13)); + } + } +} + +static void +ferode_2_49(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls13; + + wpls13 = 13 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls13)) & + (*sptr) & + (*(sptr + wpls13)); + } + } +} + +static void +fdilate_2_50(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + (*sptr) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)); + } + } +} + +static void +ferode_2_50(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + (*sptr) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)); + } + } +} + +static void +fdilate_2_51(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls8; +l_int32 wpls16; + + wpls8 = 8 * wpls; + wpls16 = 16 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls16)) | + (*(sptr + wpls8)) | + (*sptr) | + (*(sptr - wpls8)) | + (*(sptr - wpls16)); + } + } +} + +static void +ferode_2_51(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls8; +l_int32 wpls16; + + wpls8 = 8 * wpls; + wpls16 = 16 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls16)) & + (*(sptr - wpls8)) & + (*sptr) & + (*(sptr + wpls8)) & + (*(sptr + wpls16)); + } + } +} + +static void +fdilate_2_52(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)); + } + } +} + +static void +ferode_2_52(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)); + } + } +} + +static void +fdilate_2_53(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; +l_int32 wpls10; +l_int32 wpls11; +l_int32 wpls17; +l_int32 wpls18; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls18)) | + (*(sptr + wpls11)) | + (*(sptr + wpls4)) | + (*(sptr - wpls3)) | + (*(sptr - wpls10)) | + (*(sptr - wpls17)); + } + } +} + +static void +ferode_2_53(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls3; +l_int32 wpls4; +l_int32 wpls10; +l_int32 wpls11; +l_int32 wpls17; +l_int32 wpls18; + + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls18)) & + (*(sptr - wpls11)) & + (*(sptr - wpls4)) & + (*(sptr + wpls3)) & + (*(sptr + wpls10)) & + (*(sptr + wpls17)); + } + } +} + +static void +fdilate_2_54(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)); + } + } +} + +static void +ferode_2_54(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)); + } + } +} + +static void +fdilate_2_55(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls6; +l_int32 wpls16; +l_int32 wpls17; + + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls17)) | + (*(sptr + wpls6)) | + (*(sptr - wpls5)) | + (*(sptr - wpls16)); + } + } +} + +static void +ferode_2_55(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls6; +l_int32 wpls16; +l_int32 wpls17; + + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls17)) & + (*(sptr - wpls6)) & + (*(sptr + wpls5)) & + (*(sptr + wpls16)); + } + } +} + +static void +fdilate_2_56(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + (*sptr) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)); + } + } +} + +static void +ferode_2_56(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + (*sptr) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)); + } + } +} + +static void +fdilate_2_57(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; +l_int32 wpls18; + + wpls9 = 9 * wpls; + wpls18 = 18 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls18)) | + (*(sptr + wpls9)) | + (*sptr) | + (*(sptr - wpls9)) | + (*(sptr - wpls18)); + } + } +} + +static void +ferode_2_57(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; +l_int32 wpls18; + + wpls9 = 9 * wpls; + wpls18 = 18 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls18)) & + (*(sptr - wpls9)) & + (*sptr) & + (*(sptr + wpls9)) & + (*(sptr + wpls18)); + } + } +} + +static void +fdilate_2_58(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)); + } + } +} + +static void +ferode_2_58(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)); + } + } +} + +static void +fdilate_2_59(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls12; +l_int32 wpls20; + + wpls4 = 4 * wpls; + wpls12 = 12 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls20)) | + (*(sptr + wpls12)) | + (*(sptr + wpls4)) | + (*(sptr - wpls4)) | + (*(sptr - wpls12)) | + (*(sptr - wpls20)); + } + } +} + +static void +ferode_2_59(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls12; +l_int32 wpls20; + + wpls4 = 4 * wpls; + wpls12 = 12 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls20)) & + (*(sptr - wpls12)) & + (*(sptr - wpls4)) & + (*(sptr + wpls4)) & + (*(sptr + wpls12)) & + (*(sptr + wpls20)); + } + } +} + +static void +fdilate_2_60(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + (*sptr) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 21) | (*(sptr - 1) << 11)); + } + } +} + +static void +ferode_2_60(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + (*sptr) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 21) | (*(sptr + 1) >> 11)); + } + } +} + +static void +fdilate_2_61(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; +l_int32 wpls14; +l_int32 wpls21; + + wpls7 = 7 * wpls; + wpls14 = 14 * wpls; + wpls21 = 21 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls21)) | + (*(sptr + wpls14)) | + (*(sptr + wpls7)) | + (*sptr) | + (*(sptr - wpls7)) | + (*(sptr - wpls14)) | + (*(sptr - wpls21)); + } + } +} + +static void +ferode_2_61(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls7; +l_int32 wpls14; +l_int32 wpls21; + + wpls7 = 7 * wpls; + wpls14 = 14 * wpls; + wpls21 = 21 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls21)) & + (*(sptr - wpls14)) & + (*(sptr - wpls7)) & + (*sptr) & + (*(sptr + wpls7)) & + (*(sptr + wpls14)) & + (*(sptr + wpls21)); + } + } +} + +static void +fdilate_2_62(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + (*sptr) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)); + } + } +} + +static void +ferode_2_62(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + (*sptr) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)); + } + } +} + +static void +fdilate_2_63(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls10; +l_int32 wpls20; + + wpls10 = 10 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls20)) | + (*(sptr + wpls10)) | + (*sptr) | + (*(sptr - wpls10)) | + (*(sptr - wpls20)); + } + } +} + +static void +ferode_2_63(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls10; +l_int32 wpls20; + + wpls10 = 10 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls20)) & + (*(sptr - wpls10)) & + (*sptr) & + (*(sptr + wpls10)) & + (*(sptr + wpls20)); + } + } +} + +static void +fdilate_2_64(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)); + } + } +} + +static void +ferode_2_64(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)); + } + } +} + +static void +fdilate_2_65(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; +l_int32 wpls7; +l_int32 wpls19; +l_int32 wpls20; + + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls20)) | + (*(sptr + wpls7)) | + (*(sptr - wpls6)) | + (*(sptr - wpls19)); + } + } +} + +static void +ferode_2_65(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls6; +l_int32 wpls7; +l_int32 wpls19; +l_int32 wpls20; + + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls20)) & + (*(sptr - wpls7)) & + (*(sptr + wpls6)) & + (*(sptr + wpls19)); + } + } +} + +static void +fdilate_2_66(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 22) | (*(sptr - 1) << 10)); + } + } +} + +static void +ferode_2_66(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 22) | (*(sptr + 1) >> 10)); + } + } +} + +static void +fdilate_2_67(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls5; +l_int32 wpls13; +l_int32 wpls14; +l_int32 wpls22; +l_int32 wpls23; + + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls23)) | + (*(sptr + wpls14)) | + (*(sptr + wpls5)) | + (*(sptr - wpls4)) | + (*(sptr - wpls13)) | + (*(sptr - wpls22)); + } + } +} + +static void +ferode_2_67(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls4; +l_int32 wpls5; +l_int32 wpls13; +l_int32 wpls14; +l_int32 wpls22; +l_int32 wpls23; + + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls23)) & + (*(sptr - wpls14)) & + (*(sptr - wpls5)) & + (*(sptr + wpls4)) & + (*(sptr + wpls13)) & + (*(sptr + wpls22)); + } + } +} + +static void +fdilate_2_68(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + (*sptr) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 22) | (*(sptr - 1) << 10)); + } + } +} + +static void +ferode_2_68(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + (*sptr) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 22) | (*(sptr + 1) >> 10)); + } + } +} + +static void +fdilate_2_69(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls11; +l_int32 wpls22; + + wpls11 = 11 * wpls; + wpls22 = 22 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls22)) | + (*(sptr + wpls11)) | + (*sptr) | + (*(sptr - wpls11)) | + (*(sptr - wpls22)); + } + } +} + +static void +ferode_2_69(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls11; +l_int32 wpls22; + + wpls11 = 11 * wpls; + wpls22 = 22 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls22)) & + (*(sptr - wpls11)) & + (*sptr) & + (*(sptr + wpls11)) & + (*(sptr + wpls22)); + } + } +} + +static void +fdilate_2_70(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + (*sptr) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 24) | (*(sptr - 1) << 8)); + } + } +} + +static void +ferode_2_70(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + (*sptr) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 24) | (*(sptr + 1) >> 8)); + } + } +} + +static void +fdilate_2_71(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls8; +l_int32 wpls16; +l_int32 wpls24; + + wpls8 = 8 * wpls; + wpls16 = 16 * wpls; + wpls24 = 24 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls24)) | + (*(sptr + wpls16)) | + (*(sptr + wpls8)) | + (*sptr) | + (*(sptr - wpls8)) | + (*(sptr - wpls16)) | + (*(sptr - wpls24)); + } + } +} + +static void +ferode_2_71(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls8; +l_int32 wpls16; +l_int32 wpls24; + + wpls8 = 8 * wpls; + wpls16 = 16 * wpls; + wpls24 = 24 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls24)) & + (*(sptr - wpls16)) & + (*(sptr - wpls8)) & + (*sptr) & + (*(sptr + wpls8)) & + (*(sptr + wpls16)) & + (*(sptr + wpls24)); + } + } +} + +static void +fdilate_2_72(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 25) | (*(sptr - 1) << 7)); + } + } +} + +static void +ferode_2_72(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 25) | (*(sptr + 1) >> 7)); + } + } +} + +static void +fdilate_2_73(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls15; +l_int32 wpls25; + + wpls5 = 5 * wpls; + wpls15 = 15 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls25)) | + (*(sptr + wpls15)) | + (*(sptr + wpls5)) | + (*(sptr - wpls5)) | + (*(sptr - wpls15)) | + (*(sptr - wpls25)); + } + } +} + +static void +ferode_2_73(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls5; +l_int32 wpls15; +l_int32 wpls25; + + wpls5 = 5 * wpls; + wpls15 = 15 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls25)) & + (*(sptr - wpls15)) & + (*(sptr - wpls5)) & + (*(sptr + wpls5)) & + (*(sptr + wpls15)) & + (*(sptr + wpls25)); + } + } +} + +static void +fdilate_2_74(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + (*sptr) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 27) | (*(sptr - 1) << 5)); + } + } +} + +static void +ferode_2_74(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + (*sptr) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 27) | (*(sptr + 1) >> 5)); + } + } +} + +static void +fdilate_2_75(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; +l_int32 wpls18; +l_int32 wpls27; + + wpls9 = 9 * wpls; + wpls18 = 18 * wpls; + wpls27 = 27 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls27)) | + (*(sptr + wpls18)) | + (*(sptr + wpls9)) | + (*sptr) | + (*(sptr - wpls9)) | + (*(sptr - wpls18)) | + (*(sptr - wpls27)); + } + } +} + +static void +ferode_2_75(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls9; +l_int32 wpls18; +l_int32 wpls27; + + wpls9 = 9 * wpls; + wpls18 = 18 * wpls; + wpls27 = 27 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls27)) & + (*(sptr - wpls18)) & + (*(sptr - wpls9)) & + (*sptr) & + (*(sptr + wpls9)) & + (*(sptr + wpls18)) & + (*(sptr + wpls27)); + } + } +} + diff --git a/3rdparty/hgOCR/leptonica/edge.c b/3rdparty/hgOCR/leptonica/edge.c new file mode 100644 index 00000000..d620cb8f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/edge.c @@ -0,0 +1,644 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file edge.c + *
+ *
+ *      Sobel edge detecting filter
+ *          PIX      *pixSobelEdgeFilter()
+ *
+ *      Two-sided edge gradient filter
+ *          PIX      *pixTwoSidedEdgeFilter()
+ *
+ *      Measurement of edge smoothness
+ *          l_int32   pixMeasureEdgeSmoothness()
+ *          NUMA     *pixGetEdgeProfile()
+ *          l_int32   pixGetLastOffPixelInRun()
+ *          l_int32   pixGetLastOnPixelInRun()
+ *
+ *
+ *  The Sobel edge detector uses these two simple gradient filters.
+ *
+ *       1    2    1             1    0   -1
+ *       0    0    0             2    0   -2
+ *      -1   -2   -1             1    0   -1
+ *
+ *      (horizontal)             (vertical)
+ *
+ *  To use both the vertical and horizontal filters, set the orientation
+ *  flag to L_ALL_EDGES; this sums the abs. value of their outputs,
+ *  clipped to 255.
+ *
+ *  See comments below for displaying the resulting image with
+ *  the edges dark, both for 8 bpp and 1 bpp.
+ * 
+ */ + +#include "allheaders.h" + + +/*----------------------------------------------------------------------* + * Sobel edge detecting filter * + *----------------------------------------------------------------------*/ +/*! + * \brief pixSobelEdgeFilter() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] orientflag L_HORIZONTAL_EDGES, L_VERTICAL_EDGES, L_ALL_EDGES + * \return pixd 8 bpp, edges are brighter, or NULL on error + * + *
+ * Notes:
+ *      (1) Invert pixd to see larger gradients as darker (grayscale).
+ *      (2) To generate a binary image of the edges, threshold
+ *          the result using pixThresholdToBinary().  If the high
+ *          edge values are to be fg (1), invert after running
+ *          pixThresholdToBinary().
+ *      (3) Label the pixels as follows:
+ *              1    4    7
+ *              2    5    8
+ *              3    6    9
+ *          Read the data incrementally across the image and unroll
+ *          the loop.
+ *      (4) This runs at about 45 Mpix/sec on a 3 GHz processor.
+ * 
+ */ +PIX * +pixSobelEdgeFilter(PIX *pixs, + l_int32 orientflag) +{ +l_int32 w, h, d, i, j, wplt, wpld, gx, gy, vald; +l_int32 val1, val2, val3, val4, val5, val6, val7, val8, val9; +l_uint32 *datat, *linet, *datad, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixSobelEdgeFilter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES && + orientflag != L_ALL_EDGES) + return (PIX *)ERROR_PTR("invalid orientflag", procName, NULL); + + /* Add 1 pixel (mirrored) to each side of the image. */ + if ((pixt = pixAddMirroredBorder(pixs, 1, 1, 1, 1)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* Compute filter output at each location. */ + pixd = pixCreateTemplate(pixs); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (j == 0) { /* start a new row */ + val1 = GET_DATA_BYTE(linet, j); + val2 = GET_DATA_BYTE(linet + wplt, j); + val3 = GET_DATA_BYTE(linet + 2 * wplt, j); + val4 = GET_DATA_BYTE(linet, j + 1); + val5 = GET_DATA_BYTE(linet + wplt, j + 1); + val6 = GET_DATA_BYTE(linet + 2 * wplt, j + 1); + val7 = GET_DATA_BYTE(linet, j + 2); + val8 = GET_DATA_BYTE(linet + wplt, j + 2); + val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); + } else { /* shift right by 1 pixel; update incrementally */ + val1 = val4; + val2 = val5; + val3 = val6; + val4 = val7; + val5 = val8; + val6 = val9; + val7 = GET_DATA_BYTE(linet, j + 2); + val8 = GET_DATA_BYTE(linet + wplt, j + 2); + val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); + } + if (orientflag == L_HORIZONTAL_EDGES) + vald = L_ABS(val1 + 2 * val4 + val7 + - val3 - 2 * val6 - val9) >> 3; + else if (orientflag == L_VERTICAL_EDGES) + vald = L_ABS(val1 + 2 * val2 + val3 - val7 + - 2 * val8 - val9) >> 3; + else { /* L_ALL_EDGES */ + gx = L_ABS(val1 + 2 * val2 + val3 - val7 + - 2 * val8 - val9) >> 3; + gy = L_ABS(val1 + 2 * val4 + val7 + - val3 - 2 * val6 - val9) >> 3; + vald = L_MIN(255, gx + gy); + } + SET_DATA_BYTE(lined, j, vald); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Two-sided edge gradient filter * + *----------------------------------------------------------------------*/ +/*! + * \brief pixTwoSidedEdgeFilter() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] orientflag L_HORIZONTAL_EDGES, L_VERTICAL_EDGES + * \return pixd 8 bpp, edges are brighter, or NULL on error + * + *
+ * Notes:
+ *      (1) For detecting vertical edges, this considers the
+ *          difference of the central pixel from those on the left
+ *          and right.  For situations where the gradient is the same
+ *          sign on both sides, this computes and stores the minimum
+ *          (absolute value of the) difference.  The reason for
+ *          checking the sign is that we are looking for pixels within
+ *          a transition.  By contrast, for single pixel noise, the pixel
+ *          value is either larger than or smaller than its neighbors,
+ *          so the gradient would change direction on each side.  Horizontal
+ *          edges are handled similarly, looking for vertical gradients.
+ *      (2) To generate a binary image of the edges, threshold
+ *          the result using pixThresholdToBinary().  If the high
+ *          edge values are to be fg (1), invert after running
+ *          pixThresholdToBinary().
+ *      (3) This runs at about 60 Mpix/sec on a 3 GHz processor.
+ *          It is about 30% faster than Sobel, and the results are
+ *          similar.
+ * 
+ */ +PIX * +pixTwoSidedEdgeFilter(PIX *pixs, + l_int32 orientflag) +{ +l_int32 w, h, d, i, j, wpls, wpld; +l_int32 cval, rval, bval, val, lgrad, rgrad, tgrad, bgrad; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixd; + + PROCNAME("pixTwoSidedEdgeFilter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES) + return (PIX *)ERROR_PTR("invalid orientflag", procName, NULL); + + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + if (orientflag == L_VERTICAL_EDGES) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + cval = GET_DATA_BYTE(lines, 1); + lgrad = cval - GET_DATA_BYTE(lines, 0); + for (j = 1; j < w - 1; j++) { + rval = GET_DATA_BYTE(lines, j + 1); + rgrad = rval - cval; + if (lgrad * rgrad > 0) { + if (lgrad < 0) + val = -L_MAX(lgrad, rgrad); + else + val = L_MIN(lgrad, rgrad); + SET_DATA_BYTE(lined, j, val); + } + lgrad = rgrad; + cval = rval; + } + } + } + else { /* L_HORIZONTAL_EDGES) */ + for (j = 0; j < w; j++) { + lines = datas + wpls; + cval = GET_DATA_BYTE(lines, j); /* for line 1 */ + tgrad = cval - GET_DATA_BYTE(datas, j); + for (i = 1; i < h - 1; i++) { + lines += wpls; /* for line i + 1 */ + lined = datad + i * wpld; + bval = GET_DATA_BYTE(lines, j); + bgrad = bval - cval; + if (tgrad * bgrad > 0) { + if (tgrad < 0) + val = -L_MAX(tgrad, bgrad); + else + val = L_MIN(tgrad, bgrad); + SET_DATA_BYTE(lined, j, val); + } + tgrad = bgrad; + cval = bval; + } + } + } + + return pixd; +} + + +/*----------------------------------------------------------------------* + * Measurement of edge smoothness * + *----------------------------------------------------------------------*/ +/*! + * \brief pixMeasureEdgeSmoothness() + * + * \param[in] pixs 1 bpp + * \param[in] side L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT + * \param[in] minjump minimum jump to be counted; >= 1 + * \param[in] minreversal minimum reversal size for new peak or valley + * \param[out] pjpl [optional] jumps/length: number of jumps, + * normalized to length of component side + * \param[out] pjspl [optional] jumpsum/length: sum of all + * sufficiently large jumps, normalized to length + * of component side + * \param[out] prpl [optional] reversals/length: number of + * peak-to-valley or valley-to-peak reversals, + * normalized to length of component side + * \param[in] debugfile [optional] displays constructed edge; use NULL + * for no output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes three measures of smoothness of the edge of a
+ *          connected component:
+ *            * jumps/length: (jpl) the number of jumps of size >= %minjump,
+ *              normalized to the length of the side
+ *            * jump sum/length: (jspl) the sum of all jump lengths of
+ *              size >= %minjump, normalized to the length of the side
+ *            * reversals/length: (rpl) the number of peak <--> valley
+ *              reversals, using %minreverse as a minimum deviation of
+ *              the peak or valley from its preceding extremum,
+ *              normalized to the length of the side
+ *      (2) The input pix should be a single connected component, but
+ *          this is not required.
+ * 
+ */ +l_ok +pixMeasureEdgeSmoothness(PIX *pixs, + l_int32 side, + l_int32 minjump, + l_int32 minreversal, + l_float32 *pjpl, + l_float32 *pjspl, + l_float32 *prpl, + const char *debugfile) +{ +l_int32 i, n, val, nval, diff, njumps, jumpsum, nreversal; +NUMA *na, *nae; + + PROCNAME("pixMeasureEdgeSmoothness"); + + if (pjpl) *pjpl = 0.0; + if (pjspl) *pjspl = 0.0; + if (prpl) *prpl = 0.0; + if (!pjpl && !pjspl && !prpl && !debugfile) + return ERROR_INT("no output requested", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (side != L_FROM_LEFT && side != L_FROM_RIGHT && + side != L_FROM_TOP && side != L_FROM_BOT) + return ERROR_INT("invalid side", procName, 1); + if (minjump < 1) + return ERROR_INT("invalid minjump; must be >= 1", procName, 1); + if (minreversal < 1) + return ERROR_INT("invalid minreversal; must be >= 1", procName, 1); + + if ((na = pixGetEdgeProfile(pixs, side, debugfile)) == NULL) + return ERROR_INT("edge profile not made", procName, 1); + if ((n = numaGetCount(na)) < 2) { + numaDestroy(&na); + return 0; + } + + if (pjpl || pjspl) { + jumpsum = 0; + njumps = 0; + numaGetIValue(na, 0, &val); + for (i = 1; i < n; i++) { + numaGetIValue(na, i, &nval); + diff = L_ABS(nval - val); + if (diff >= minjump) { + njumps++; + jumpsum += diff; + } + val = nval; + } + if (pjpl) + *pjpl = (l_float32)njumps / (l_float32)(n - 1); + if (pjspl) + *pjspl = (l_float32)jumpsum / (l_float32)(n - 1); + } + + if (prpl) { + nae = numaFindExtrema(na, minreversal, NULL); + nreversal = numaGetCount(nae) - 1; + *prpl = (l_float32)nreversal / (l_float32)(n - 1); + numaDestroy(&nae); + } + + numaDestroy(&na); + return 0; +} + + +/*! + * \brief pixGetEdgeProfile() + * + * \param[in] pixs 1 bpp + * \param[in] side L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT + * \param[in] debugfile [optional] displays constructed edge; use NULL + * for no output + * \return na of fg edge pixel locations, or NULL on error + */ +NUMA * +pixGetEdgeProfile(PIX *pixs, + l_int32 side, + const char *debugfile) +{ +l_int32 x, y, w, h, loc, index, ival; +l_uint32 val; +NUMA *na; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGetEdgeProfile"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (side != L_FROM_LEFT && side != L_FROM_RIGHT && + side != L_FROM_TOP && side != L_FROM_BOT) + return (NUMA *)ERROR_PTR("invalid side", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (side == L_FROM_LEFT || side == L_FROM_RIGHT) + na = numaCreate(h); + else + na = numaCreate(w); + if (side == L_FROM_LEFT) { + pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_LEFT, &loc); + loc = (loc == w - 1) ? 0 : loc + 1; /* back to the left edge */ + numaAddNumber(na, loc); + for (y = 1; y < h; y++) { + pixGetPixel(pixs, loc, y, &val); + if (val == 1) { + pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); + } else { + pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); + loc = (loc == w - 1) ? 0 : loc + 1; + } + numaAddNumber(na, loc); + } + } + else if (side == L_FROM_RIGHT) { + pixGetLastOffPixelInRun(pixs, w - 1, 0, L_FROM_RIGHT, &loc); + loc = (loc == 0) ? w - 1 : loc - 1; /* back to the right edge */ + numaAddNumber(na, loc); + for (y = 1; y < h; y++) { + pixGetPixel(pixs, loc, y, &val); + if (val == 1) { + pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); + } else { + pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); + loc = (loc == 0) ? w - 1 : loc - 1; + } + numaAddNumber(na, loc); + } + } + else if (side == L_FROM_TOP) { + pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_TOP, &loc); + loc = (loc == h - 1) ? 0 : loc + 1; /* back to the top edge */ + numaAddNumber(na, loc); + for (x = 1; x < w; x++) { + pixGetPixel(pixs, x, loc, &val); + if (val == 1) { + pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); + } else { + pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); + loc = (loc == h - 1) ? 0 : loc + 1; + } + numaAddNumber(na, loc); + } + } + else { /* side == L_FROM_BOT */ + pixGetLastOffPixelInRun(pixs, 0, h - 1, L_FROM_BOT, &loc); + loc = (loc == 0) ? h - 1 : loc - 1; /* back to the bottom edge */ + numaAddNumber(na, loc); + for (x = 1; x < w; x++) { + pixGetPixel(pixs, x, loc, &val); + if (val == 1) { + pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); + } else { + pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); + loc = (loc == 0) ? h - 1 : loc - 1; + } + numaAddNumber(na, loc); + } + } + + if (debugfile) { + pixt = pixConvertTo8(pixs, TRUE); + cmap = pixGetColormap(pixt); + pixcmapAddColor(cmap, 255, 0, 0); + index = pixcmapGetCount(cmap) - 1; + if (side == L_FROM_LEFT || side == L_FROM_RIGHT) { + for (y = 0; y < h; y++) { + numaGetIValue(na, y, &ival); + pixSetPixel(pixt, ival, y, index); + } + } else { /* L_FROM_TOP or L_FROM_BOT */ + for (x = 0; x < w; x++) { + numaGetIValue(na, x, &ival); + pixSetPixel(pixt, x, ival, index); + } + } + pixWrite(debugfile, pixt, IFF_PNG); + pixDestroy(&pixt); + } + + return na; +} + + +/* + * \brief pixGetLastOffPixelInRun() + * + * \param[in] pixs 1 bpp + * \param[in] x, y starting location + * \param[in] direction L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT + * \param[out] ploc location in scan direction coordinate + * of last OFF pixel found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Search starts from the pixel at (x, y), which is OFF.
+ *      (2) It returns the location in the scan direction of the last
+ *          pixel in the current run that is OFF.
+ *      (3) The interface for these pixel run functions is cleaner when
+ *          you ask for the last pixel in the current run, rather than the
+ *          first pixel of opposite polarity that is found, because the
+ *          current run may go to the edge of the image, in which case
+ *          no pixel of opposite polarity is found.
+ * 
+ */ +l_ok +pixGetLastOffPixelInRun(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 direction, + l_int32 *ploc) +{ +l_int32 loc, w, h; +l_uint32 val; + + PROCNAME("pixGetLastOffPixelInRun"); + + if (!ploc) + return ERROR_INT("&loc not defined", procName, 1); + *ploc = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && + direction != L_FROM_TOP && direction != L_FROM_BOT) + return ERROR_INT("invalid side", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + if (direction == L_FROM_LEFT) { + for (loc = x; loc < w; loc++) { + pixGetPixel(pixs, loc, y, &val); + if (val == 1) + break; + } + *ploc = loc - 1; + } else if (direction == L_FROM_RIGHT) { + for (loc = x; loc >= 0; loc--) { + pixGetPixel(pixs, loc, y, &val); + if (val == 1) + break; + } + *ploc = loc + 1; + } + else if (direction == L_FROM_TOP) { + for (loc = y; loc < h; loc++) { + pixGetPixel(pixs, x, loc, &val); + if (val == 1) + break; + } + *ploc = loc - 1; + } + else if (direction == L_FROM_BOT) { + for (loc = y; loc >= 0; loc--) { + pixGetPixel(pixs, x, loc, &val); + if (val == 1) + break; + } + *ploc = loc + 1; + } + return 0; +} + + +/* + * \brief pixGetLastOnPixelInRun() + * + * \param[in] pixs 1 bpp + * \param[in] x, y starting location + * \param[in] direction L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT + * \param[out] ploc location in scan direction coordinate + * of first ON pixel found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Search starts from the pixel at (x, y), which is ON.
+ *      (2) It returns the location in the scan direction of the last
+ *          pixel in the current run that is ON.
+ * 
+ */ +l_int32 +pixGetLastOnPixelInRun(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 direction, + l_int32 *ploc) +{ +l_int32 loc, w, h; +l_uint32 val; + + PROCNAME("pixLastOnPixelInRun"); + + if (!ploc) + return ERROR_INT("&loc not defined", procName, 1); + *ploc = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && + direction != L_FROM_TOP && direction != L_FROM_BOT) + return ERROR_INT("invalid side", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + if (direction == L_FROM_LEFT) { + for (loc = x; loc < w; loc++) { + pixGetPixel(pixs, loc, y, &val); + if (val == 0) + break; + } + *ploc = loc - 1; + } else if (direction == L_FROM_RIGHT) { + for (loc = x; loc >= 0; loc--) { + pixGetPixel(pixs, loc, y, &val); + if (val == 0) + break; + } + *ploc = loc + 1; + } + else if (direction == L_FROM_TOP) { + for (loc = y; loc < h; loc++) { + pixGetPixel(pixs, x, loc, &val); + if (val == 0) + break; + } + *ploc = loc - 1; + } + else if (direction == L_FROM_BOT) { + for (loc = y; loc >= 0; loc--) { + pixGetPixel(pixs, x, loc, &val); + if (val == 0) + break; + } + *ploc = loc + 1; + } + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/encoding.c b/3rdparty/hgOCR/leptonica/encoding.c new file mode 100644 index 00000000..d940413a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/encoding.c @@ -0,0 +1,649 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - This software is distributed in the hope that it will be + - useful, but with NO WARRANTY OF ANY KIND. + - No author or distributor accepts responsibility to anyone for the + - consequences of using this software, or for whether it serves any + - particular purpose or works at all, unless he or she says so in + - writing. Everyone is granted permission to copy, modify and + - redistribute this source code, for commercial or non-commercial + - purposes, with the following restrictions: (1) the origin of this + - source code must not be misrepresented; (2) modified versions must + - be plainly marked as such; and (3) this notice may not be removed + - or altered from any source or modified source distribution. + *====================================================================*/ + +/* + * encodings.c + * + * Base64 + * char *encodeBase64() + * l_uint8 *decodeBase64() + * static l_int32 isBase64() + * static l_int32 *genReverseTab64() + * static void byteConvert3to4() + * static void byteConvert4to3() + * + * Ascii85 + * char *encodeAscii85() + * l_uint8 *decodeAscii85() + * static l_int32 convertChunkToAscii85() + * + * String reformatting for base 64 encoded data + * char *reformatPacked64() + * + * Base64 encoding is useful for encding binary data in a restricted set of + * 64 printable ascii symbols, that includes the 62 alphanumerics and '+' + * and '/'. Notably it does not include quotes, so that base64 encoded + * strings can be used in situations where quotes are used for formatting. + * 64 symbols was chosen because it is the smallest number that can be used + * in 4-for-3 byte encoding of binary data: + * log2(64) / log2(256) = 0.75 = 3/4 + * + * Ascii85 encoding is used in PostScript and some pdf files for + * representing binary data (for example, a compressed image) in printable + * ascii symbols. It has a dictionary of 85 symbols; 85 was chosen because + * it is the smallest number that can be used in 5-for-4 byte encoding + * of binary data (256 possible input values). This can be seen from + * the max information content in such a sequence: + * log2(84) / log2(256) = 0.799 < 4/5 + * log2(85) / log2(256) = 0.801 > 4/5 + */ + +#include +#include "allheaders.h" + + /* Base64 encoding table in string representation */ +static const l_int32 MAX_BASE64_LINE = 72; /* max line length base64 */ +static const char *tablechar64 = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + +static l_int32 isBase64(char); +static l_int32 *genReverseTab64(void); +static void byteConvert3to4(l_uint8 *in3, l_uint8 *out4); +static void byteConvert4to3(l_uint8 *in4, l_uint8 *out3); + + /* Ascii85 encoding */ +static const l_int32 MAX_ASCII85_LINE = 64; /* max line length ascii85 */ +static const l_uint32 power85[5] = {1, + 85, + 85 * 85, + 85 * 85 * 85, + 85 * 85 * 85 * 85}; + +static l_int32 convertChunkToAscii85(const l_uint8 *inarray, l_int32 insize, + l_int32 *pindex, char *outbuf, + l_int32 *pnbout); + + +/*-------------------------------------------------------------* + * Utility for encoding and decoding data with base64 * + *-------------------------------------------------------------*/ +/*! + * \brief encodeBase64() + * + * \param[in] inarray input binary data + * \param[in] insize number of bytes in input array + * \param[out] poutsize number of bytes in output char array + * \return chara with MAX_BASE64_LINE characters + \n in each line + * + *
+ * Notes:
+ *      (1) The input character data is unrestricted binary.
+ *          The output encoded data consists of the 64 characters
+ *          in the base64 set, plus newlines and the pad character '='.
+ * 
+ */ +char * +encodeBase64(const l_uint8 *inarray, + l_int32 insize, + l_int32 *poutsize) +{ +char *chara; +const l_uint8 *bytea; +l_uint8 array3[3], array4[4]; +l_int32 outsize, i, j, index, linecount; + + PROCNAME("encodeBase64"); + + if (!poutsize) + return (char *)ERROR_PTR("&outsize not defined", procName, NULL); + *poutsize = 0; + if (!inarray) + return (char *)ERROR_PTR("inarray not defined", procName, NULL); + if (insize <= 0) + return (char *)ERROR_PTR("insize not > 0", procName, NULL); + + /* The output array is padded to a multiple of 4 bytes, not + * counting the newlines. We just need to allocate a large + * enough array, and add 4 bytes to make sure it is big enough. */ + outsize = 4 * ((insize + 2) / 3); /* without newlines */ + outsize += outsize / MAX_BASE64_LINE + 4; /* with the newlines */ + if ((chara = (char *)LEPT_CALLOC(outsize, sizeof(char))) == NULL) + return (char *)ERROR_PTR("chara not made", procName, NULL); + + /* Read all the input data, and convert in sets of 3 input + * bytes --> 4 output bytes. */ + i = index = linecount = 0; + bytea = inarray; + while (insize--) { + if (linecount == MAX_BASE64_LINE) { + chara[index++] = '\n'; + linecount = 0; + } + array3[i++] = *bytea++; + if (i == 3) { /* convert 3 to 4 and save */ + byteConvert3to4(array3, array4); + for (j = 0; j < 4; j++) + chara[index++] = tablechar64[array4[j]]; + i = 0; + linecount += 4; + } + } + + /* Suppose 1 or 2 bytes has been read but not yet processed. + * If 1 byte has been read, this will generate 2 bytes of + * output, with 6 bits to the first byte and 2 bits to the second. + * We will add two bytes of '=' for padding. + * If 2 bytes has been read, this will generate 3 bytes of output, + * with 6 bits to the first 2 bytes and 4 bits to the third, and + * we add a fourth padding byte ('='). */ + if (i > 0) { /* left-over 1 or 2 input bytes */ + for (j = i; j < 3; j++) + array3[j] = '\0'; /* zero the remaining input bytes */ + byteConvert3to4(array3, array4); + for (j = 0; j <= i; j++) + chara[index++] = tablechar64[array4[j]]; + for (j = i + 1; j < 4; j++) + chara[index++] = '='; + } + *poutsize = index; + + return chara; +} + + +/*! + * \brief decodeBase64() + * + * \param[in] inarray input encoded char data, with 72 chars/line) + * \param[in] insize number of bytes in input array + * \param[out] poutsize number of bytes in output byte array + * \return bytea decoded byte data, or NULL on error + * + *
+ * Notes:
+ *      (1) The input character data should have only 66 different characters:
+ *          The 64 character set for base64 encoding, plus the pad
+ *          character '=' and newlines for formatting with fixed line
+ *          lengths.  If there are any other characters, the decoder
+ *          will declare the input data to be invalid and return NULL.
+ *      (2) The decoder ignores newlines and, for a valid input string,
+ *          stops reading input when a pad byte is found.
+ * 
+ */ +l_uint8 * +decodeBase64(const char *inarray, + l_int32 insize, + l_int32 *poutsize) +{ +char inchar; +l_uint8 *bytea; +l_uint8 array3[3], array4[4]; +l_int32 *rtable64; +l_int32 i, j, outsize, in_index, out_index; + + PROCNAME("decodeBase64"); + + if (!poutsize) + return (l_uint8 *)ERROR_PTR("&outsize not defined", procName, NULL); + *poutsize = 0; + if (!inarray) + return (l_uint8 *)ERROR_PTR("inarray not defined", procName, NULL); + if (insize <= 0) + return (l_uint8 *)ERROR_PTR("insize not > 0", procName, NULL); + + /* Validate the input data */ + for (i = 0; i < insize; i++) { + inchar = inarray[i]; + if (inchar == '\n') continue; + if (isBase64(inchar) == 0 && inchar != '=') + return (l_uint8 *)ERROR_PTR("invalid char in inarray", + procName, NULL); + } + + /* The input array typically is made with a newline every + * MAX_BASE64_LINE input bytes. However, as a printed string, the + * newlines would be stripped. So when we allocate the output + * array, assume the input array is all data, but strip + * out the newlines during decoding. This guarantees that + * the allocated array is large enough. */ + outsize = 3 * ((insize + 3) / 4) + 4; + if ((bytea = (l_uint8 *)LEPT_CALLOC(outsize, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("bytea not made", procName, NULL); + + /* The number of encoded input data bytes is always a multiple of 4. + * Read all the data, until you reach either the end or + * the first pad character '='. The data is processed in + * units of 4 input bytes, generating 3 output decoded bytes + * of binary data. Newlines are ignored. If there are no + * pad bytes, i == 0 at the end of this section. */ + rtable64 = genReverseTab64(); + i = in_index = out_index = 0; + for (in_index = 0; in_index < insize; in_index++) { + inchar = inarray[in_index]; + if (inchar == '\n') continue; + if (inchar == '=') break; + array4[i++] = rtable64[(unsigned char)inchar]; + if (i < 4) { + continue; + } else { /* i == 4; convert 4 to 3 and save */ + byteConvert4to3(array4, array3); + for (j = 0; j < 3; j++) + bytea[out_index++] = array3[j]; + i = 0; + } + } + + /* If i > 0, we ran into pad bytes ('='). If i == 2, there are + * two input pad bytes and one output data byte. If i == 3, + * there is one input pad byte and two output data bytes. */ + if (i > 0) { + for (j = i; j < 4; j++) + array4[j] = '\0'; /* zero the remaining input bytes */ + byteConvert4to3(array4, array3); + for (j = 0; j < i - 1; j++) + bytea[out_index++] = array3[j]; + } + *poutsize = out_index; + + LEPT_FREE(rtable64); + return bytea; +} + + +/*! + * \brief isBase64() + */ +static l_int32 +isBase64(char c) +{ + return (isalnum(((int)c)) || ((c) == '+') || ((c) == '/')) ? 1 : 0; +} + +/*! + * \brief genReverseTab64() + */ +static l_int32 * +genReverseTab64() +{ +l_int32 i; +l_int32 *rtable64; + + rtable64 = (l_int32 *)LEPT_CALLOC(128, sizeof(l_int32)); + for (i = 0; i < 64; i++) { + rtable64[(unsigned char)tablechar64[i]] = i; + } + return rtable64; +} + +/*! + * \brief byteConvert3to4() + */ +static void +byteConvert3to4(l_uint8 *in3, + l_uint8 *out4) +{ + out4[0] = in3[0] >> 2; + out4[1] = ((in3[0] & 0x03) << 4) | (in3[1] >> 4); + out4[2] = ((in3[1] & 0x0f) << 2) | (in3[2] >> 6); + out4[3] = in3[2] & 0x3f; + return; +} + +/*! + * \brief byteConvert4to3() + */ +static void +byteConvert4to3(l_uint8 *in4, + l_uint8 *out3) +{ + out3[0] = (in4[0] << 2) | (in4[1] >> 4); + out3[1] = ((in4[1] & 0x0f) << 4) | (in4[2] >> 2); + out3[2] = ((in4[2] & 0x03) << 6) | in4[3]; + return; +} + + +/*-------------------------------------------------------------* + * Utility for encoding and decoding data with ascii85 * + *-------------------------------------------------------------*/ +/*! + * \brief encodeAscii85() + * + * \param[in] inarray input data + * \param[in] insize number of bytes in input array + * \param[out] poutsize number of bytes in output char array + * \return chara with 64 characters + \n in each line + * + *
+ * Notes:
+ *      (1) Ghostscript has a stack break if the last line of
+ *          data only has a '>', so we avoid the problem by
+ *          always putting '~>' on the last line.
+ * 
+ */ +char * +encodeAscii85(const l_uint8 *inarray, + l_int32 insize, + l_int32 *poutsize) +{ +char *chara; +char outbuf[8]; +l_int32 maxsize, i, index, outindex, linecount, nbout, eof; + + PROCNAME("encodeAscii85"); + + if (!poutsize) + return (char *)ERROR_PTR("&outsize not defined", procName, NULL); + *poutsize = 0; + if (!inarray) + return (char *)ERROR_PTR("inarray not defined", procName, NULL); + if (insize <= 0) + return (char *)ERROR_PTR("insize not > 0", procName, NULL); + + /* Accumulate results in char array */ + maxsize = (l_int32)(80. + (insize * 5. / 4.) * + (1. + 2. / MAX_ASCII85_LINE)); + if ((chara = (char *)LEPT_CALLOC(maxsize, sizeof(char))) == NULL) + return (char *)ERROR_PTR("chara not made", procName, NULL); + + linecount = 0; + index = 0; + outindex = 0; + while (1) { + eof = convertChunkToAscii85(inarray, insize, &index, outbuf, &nbout); + for (i = 0; i < nbout; i++) { + chara[outindex++] = outbuf[i]; + linecount++; + if (linecount >= MAX_ASCII85_LINE) { + chara[outindex++] = '\n'; + linecount = 0; + } + } + if (eof == TRUE) { + if (linecount != 0) + chara[outindex++] = '\n'; + chara[outindex++] = '~'; + chara[outindex++] = '>'; + chara[outindex++] = '\n'; + break; + } + } + + *poutsize = outindex; + return chara; +} + + +/*! + * \brief convertChunkToAscii85() + * + * \param[in] inarray input data + * \param[in] insize number of bytes in input array + * \param[out] pindex use and -- ptr + * \param[in] outbuf holds 8 ascii chars; we use no more than 7 + * \param[out] pnbsout number of bytes written to outbuf + * \return boolean for eof 0 if more data, 1 if end of file + * + *
+ * Notes:
+ *      (1) Attempts to read 4 bytes and write 5.
+ *      (2) Writes 1 byte if the value is 0.
+ * 
+ */ +static l_int32 +convertChunkToAscii85(const l_uint8 *inarray, + l_int32 insize, + l_int32 *pindex, + char *outbuf, + l_int32 *pnbout) +{ +l_uint8 inbyte; +l_uint32 inword, val; +l_int32 eof, index, nread, nbout, i; + + eof = FALSE; + index = *pindex; + nread = L_MIN(4, (insize - index)); + if (insize == index + nread) + eof = TRUE; + *pindex += nread; /* save new index */ + + /* Read input data and save in l_uint32 */ + inword = 0; + for (i = 0; i < nread; i++) { + inbyte = inarray[index + i]; + inword += inbyte << (8 * (3 - i)); + } + +#if 0 + fprintf(stderr, "index = %d, nread = %d\n", index, nread); + fprintf(stderr, "inword = %x\n", inword); + fprintf(stderr, "eof = %d\n", eof); +#endif + + /* Special case: output 1 byte only */ + if (inword == 0) { + outbuf[0] = 'z'; + nbout = 1; + } else { /* output nread + 1 bytes */ + for (i = 4; i >= 4 - nread; i--) { + val = inword / power85[i]; + outbuf[4 - i] = (l_uint8)(val + '!'); + inword -= val * power85[i]; + } + nbout = nread + 1; + } + *pnbout = nbout; + + return eof; +} + + +/*! + * \brief decodeAscii85() + * + * \param[in] inarray ascii85 input data + * \param[in] insize number of bytes in input array + * \param[out] poutsize number of bytes in output l_uint8 array + * \return outarray binary + * + *
+ * Notes:
+ *      (1) We assume the data is properly encoded, so we do not check
+ *          for invalid characters or the final '>' character.
+ *      (2) We permit whitespace to be added to the encoding in an
+ *          arbitrary way.
+ * 
+ */ +l_uint8 * +decodeAscii85(const char *inarray, + l_int32 insize, + l_int32 *poutsize) +{ +char inc; +const char *pin; +l_uint8 val; +l_uint8 *outa; +l_int32 maxsize, ocount, bytecount, index; +l_uint32 oword; + + PROCNAME("decodeAscii85"); + + if (!poutsize) + return (l_uint8 *)ERROR_PTR("&outsize not defined", procName, NULL); + *poutsize = 0; + if (!inarray) + return (l_uint8 *)ERROR_PTR("inarray not defined", procName, NULL); + if (insize <= 0) + return (l_uint8 *)ERROR_PTR("insize not > 0", procName, NULL); + + /* Accumulate results in outa */ + maxsize = (l_int32)(80. + (insize * 4. / 5.)); /* plenty big */ + if ((outa = (l_uint8 *)LEPT_CALLOC(maxsize, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("outa not made", procName, NULL); + + pin = inarray; + ocount = 0; /* byte index into outa */ + oword = 0; + for (index = 0, bytecount = 0; index < insize; index++, pin++) { + inc = *pin; + + if (inc == ' ' || inc == '\t' || inc == '\n' || + inc == '\f' || inc == '\r' || inc == '\v') /* ignore white space */ + continue; + + val = inc - '!'; + if (val < 85) { + oword = oword * 85 + val; + if (bytecount < 4) { + bytecount++; + } else { /* we have all 5 input chars for the oword */ + outa[ocount] = (oword >> 24) & 0xff; + outa[ocount + 1] = (oword >> 16) & 0xff; + outa[ocount + 2] = (oword >> 8) & 0xff; + outa[ocount + 3] = oword & 0xff; + ocount += 4; + bytecount = 0; + oword = 0; + } + } else if (inc == 'z' && bytecount == 0) { + outa[ocount] = 0; + outa[ocount + 1] = 0; + outa[ocount + 2] = 0; + outa[ocount + 3] = 0; + ocount += 4; + } else if (inc == '~') { /* end of data */ + L_INFO(" %d extra bytes output\n", procName, bytecount - 1); + switch (bytecount) { + case 0: /* normal eof */ + case 1: /* error */ + break; + case 2: /* 1 extra byte */ + oword = oword * power85[3] + 0xffffff; + outa[ocount] = (oword >> 24) & 0xff; + break; + case 3: /* 2 extra bytes */ + oword = oword * power85[2] + 0xffff; + outa[ocount] = (oword >> 24) & 0xff; + outa[ocount + 1] = (oword >> 16) & 0xff; + break; + case 4: /* 3 extra bytes */ + oword = oword * 85 + 0xff; + outa[ocount] = (oword >> 24) & 0xff; + outa[ocount + 1] = (oword >> 16) & 0xff; + outa[ocount + 2] = (oword >> 8) & 0xff; + break; + } + if (bytecount > 1) + ocount += (bytecount - 1); + break; + } + } + *poutsize = ocount; + + return outa; +} + + +/*-------------------------------------------------------------* + * String reformatting for base 64 encoded data * + *-------------------------------------------------------------*/ +/*! + * \brief reformatPacked64() + * + * \param[in] inarray base64 encoded string with newlines + * \param[in] insize number of bytes in input array + * \param[in] leadspace number of spaces in each line before the data + * \param[in] linechars number of bytes of data in each line; multiple of 4 + * \param[in] addquotes 1 to add quotes to each line of data; 0 to skip + * \param[out] poutsize number of bytes in output char array + * \return outarray ascii + * + *
+ * Notes:
+ *      (1) Each line in the output array has %leadspace space characters,
+ *          followed optionally by a double-quote, followed by %linechars
+ *          bytes of base64 data, followed optionally by a double-quote,
+ *          followed by a newline.
+ *      (2) This can be used to convert a base64 encoded string to a
+ *          string formatted for inclusion in a C source file.
+ * 
+ */ +char * +reformatPacked64(const char *inarray, + l_int32 insize, + l_int32 leadspace, + l_int32 linechars, + l_int32 addquotes, + l_int32 *poutsize) +{ +char *flata, *outa; +l_int32 i, j, flatindex, flatsize, outindex, nlines, linewithpad, linecount; + + PROCNAME("reformatPacked64"); + + if (!poutsize) + return (char *)ERROR_PTR("&outsize not defined", procName, NULL); + *poutsize = 0; + if (!inarray) + return (char *)ERROR_PTR("inarray not defined", procName, NULL); + if (insize <= 0) + return (char *)ERROR_PTR("insize not > 0", procName, NULL); + if (leadspace < 0) + return (char *)ERROR_PTR("leadspace must be >= 0", procName, NULL); + if (linechars % 4) + return (char *)ERROR_PTR("linechars % 4 must be 0", procName, NULL); + + /* Remove all white space */ + if ((flata = (char *)LEPT_CALLOC(insize, sizeof(char))) == NULL) + return (char *)ERROR_PTR("flata not made", procName, NULL); + for (i = 0, flatindex = 0; i < insize; i++) { + if (isBase64(inarray[i]) || inarray[i] == '=') + flata[flatindex++] = inarray[i]; + } + + /* Generate output string */ + flatsize = flatindex; + nlines = (flatsize + linechars - 1) / linechars; + linewithpad = leadspace + linechars + 1; /* including newline */ + if (addquotes) linewithpad += 2; + if ((outa = (char *)LEPT_CALLOC((size_t)nlines * linewithpad, + sizeof(char))) == NULL) { + LEPT_FREE(flata); + return (char *)ERROR_PTR("outa not made", procName, NULL); + } + for (j = 0, outindex = 0; j < leadspace; j++) + outa[outindex++] = ' '; + if (addquotes) outa[outindex++] = '"'; + for (i = 0, linecount = 0; i < flatsize; i++) { + if (linecount == linechars) { + if (addquotes) outa[outindex++] = '"'; + outa[outindex++] = '\n'; + for (j = 0; j < leadspace; j++) + outa[outindex++] = ' '; + if (addquotes) outa[outindex++] = '"'; + linecount = 0; + } + outa[outindex++] = flata[i]; + linecount++; + } + if (addquotes) outa[outindex++] = '"'; + *poutsize = outindex; + + LEPT_FREE(flata); + return outa; +} diff --git a/3rdparty/hgOCR/leptonica/endianness.h b/3rdparty/hgOCR/leptonica/endianness.h new file mode 100644 index 00000000..e9eaba90 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/endianness.h @@ -0,0 +1,11 @@ +#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN) +# if 0 +# ifdef __BIG_ENDIAN__ +# define L_BIG_ENDIAN +# else +# define L_LITTLE_ENDIAN +# endif +# else +# define L_LITTLE_ENDIAN +# endif +#endif diff --git a/3rdparty/hgOCR/leptonica/enhance.c b/3rdparty/hgOCR/leptonica/enhance.c new file mode 100644 index 00000000..a34cd550 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/enhance.c @@ -0,0 +1,2353 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file enhance.c + *
+ *
+ *      Gamma TRC (tone reproduction curve) mapping
+ *           PIX     *pixGammaTRC()
+ *           PIX     *pixGammaTRCMasked()
+ *           PIX     *pixGammaTRCWithAlpha()
+ *           NUMA    *numaGammaTRC()
+ *
+ *      Contrast enhancement
+ *           PIX     *pixContrastTRC()
+ *           PIX     *pixContrastTRCMasked()
+ *           NUMA    *numaContrastTRC()
+ *
+ *      Histogram equalization
+ *           PIX     *pixEqualizeTRC()
+ *           NUMA    *numaEqualizeTRC()
+ *
+ *      Generic TRC mapper
+ *           PIX     *pixTRCMap()
+ *           PIX     *pixTRCMapGeneral()
+ *
+ *      Unsharp-masking
+ *           PIX     *pixUnsharpMasking()
+ *           PIX     *pixUnsharpMaskingGray()
+ *           PIX     *pixUnsharpMaskingFast()
+ *           PIX     *pixUnsharpMaskingGrayFast()
+ *           PIX     *pixUnsharpMaskingGray1D()
+ *           PIX     *pixUnsharpMaskingGray2D()
+ *
+ *      Hue and saturation modification
+ *           PIX     *pixModifyHue()
+ *           PIX     *pixModifySaturation()
+ *           l_int32  pixMeasureSaturation()
+ *           PIX     *pixModifyBrightness()
+ *
+ *      Color shifting
+ *           PIX     *pixMosaicColorShiftRGB()
+ *           PIX     *pixColorShiftRGB()
+ *
+ *      Darken gray (unsaturated) pixels
+ *           PIX     *pixDarkenGray()
+ *
+ *      General multiplicative constant color transform
+ *           PIX     *pixMultConstantColor()
+ *           PIX     *pixMultMatrixColor()
+ *
+ *      Edge by bandpass
+ *           PIX     *pixHalfEdgeByBandpass()
+ *
+ *      Gamma correction, contrast enhancement and histogram equalization
+ *      apply a simple mapping function to each pixel (or, for color
+ *      images, to each sample (i.e., r,g,b) of the pixel).
+ *
+ *       ~ Gamma correction either lightens the image or darkens
+ *         it, depending on whether the gamma factor is greater
+ *         or less than 1.0, respectively.
+ *
+ *       ~ Contrast enhancement darkens the pixels that are already
+ *         darker than the middle of the dynamic range (128)
+ *         and lightens pixels that are lighter than 128.
+ *
+ *       ~ Histogram equalization remaps to have the same number
+ *         of image pixels at each of 256 intensity values.  This is
+ *         a quick and dirty method of adjusting contrast and brightness
+ *         to bring out details in both light and dark regions.
+ *
+ *      Unsharp masking is a more complicated enhancement.
+ *      A "high frequency" image, generated by subtracting
+ *      the smoothed ("low frequency") part of the image from
+ *      itself, has all the energy at the edges.  This "edge image"
+ *      has 0 average value.  A fraction of the edge image is
+ *      then added to the original, enhancing the differences
+ *      between pixel values at edges.  Because we represent
+ *      images as l_uint8 arrays, we preserve dynamic range and
+ *      handle negative values by doing all the arithmetic on
+ *      shifted l_uint16 arrays; the l_uint8 values are recovered
+ *      at the end.
+ *
+ *      Hue and saturation modification work in HSV space.  Because
+ *      this is too large for efficient table lookup, each pixel value
+ *      is transformed to HSV, modified, and transformed back.
+ *      It's not the fastest way to do this, but the method is
+ *      easily understood.
+ *
+ *      Unsharp masking is never in-place, and returns a clone if no
+ *      operation is to be performed.
+ * 
+ */ + + +#include +#include "allheaders.h" + + /* Scales contrast enhancement factor to have a useful range + * between 0.0 and 1.0 */ +static const l_float32 EnhanceScaleFactor = 5.0; + +/*-------------------------------------------------------------* + * Gamma TRC (tone reproduction curve) mapping * + *-------------------------------------------------------------*/ +/*! + * \brief pixGammaTRC() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap + * \param[in] gamma gamma correction; must be > 0.0 + * \param[in] minval input value that gives 0 for output; can be < 0 + * \param[in] maxval input value that gives 255 for output; can be > 255 + * \return pixd always + * + *
+ * Notes:
+ *      (1) pixd must either be null or equal to pixs.
+ *          For in-place operation, set pixd == pixs:
+ *             pixGammaTRC(pixs, pixs, ...);
+ *          To get a new image, set pixd == null:
+ *             pixd = pixGammaTRC(NULL, pixs, ...);
+ *      (2) If pixs is colormapped, the colormap is transformed,
+ *          either in-place or in a copy of pixs.
+ *      (3) We use a gamma mapping between minval and maxval.
+ *      (4) If gamma < 1.0, the image will appear darker;
+ *          if gamma > 1.0, the image will appear lighter;
+ *      (5) If gamma = 1.0 and minval = 0 and maxval = 255, no
+ *          enhancement is performed; return a copy unless in-place,
+ *          in which case this is a no-op.
+ *      (6) For color images that are not colormapped, the mapping
+ *          is applied to each component.
+ *      (7) minval and maxval are not restricted to the interval [0, 255].
+ *          If minval < 0, an input value of 0 is mapped to a
+ *          nonzero output.  This will turn black to gray.
+ *          If maxval > 255, an input value of 255 is mapped to
+ *          an output value less than 255.  This will turn
+ *          white (e.g., in the background) to gray.
+ *      (8) Increasing minval darkens the image.
+ *      (9) Decreasing maxval bleaches the image.
+ *      (10) Simultaneously increasing minval and decreasing maxval
+ *           will darken the image and make the colors more intense;
+ *           e.g., minval = 50, maxval = 200.
+ *      (11) See numaGammaTRC() for further examples of use.
+ *      (12) Use pixTRCMapGeneral() if applying different mappings
+ *           to each channel in an RGB image.
+ * 
+ */ +PIX * +pixGammaTRC(PIX *pixd, + PIX *pixs, + l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +l_int32 d; +NUMA *nag; +PIXCMAP *cmap; + + PROCNAME("pixGammaTRC"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + if (gamma <= 0.0) { + L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); + gamma = 1.0; + } + if (minval >= maxval) + return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + if (!cmap && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); + + if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ + return pixCopy(pixd, pixs); + + if (!pixd) /* start with a copy if not in-place */ + pixd = pixCopy(NULL, pixs); + + if (cmap) { + pixcmapGammaTRC(pixGetColormap(pixd), gamma, minval, maxval); + return pixd; + } + + /* pixd is 8 or 32 bpp */ + if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) + return (PIX *)ERROR_PTR("nag not made", procName, pixd); + pixTRCMap(pixd, NULL, nag); + numaDestroy(&nag); + + return pixd; +} + + +/*! + * \brief pixGammaTRCMasked() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 8 or 32 bpp; not colormapped + * \param[in] pixm [optional] null or 1 bpp + * \param[in] gamma gamma correction; must be > 0.0 + * \param[in] minval input value that gives 0 for output; can be < 0 + * \param[in] maxval input value that gives 255 for output; can be > 255 + * \return pixd always + * + *
+ * Notes:
+ *      (1) Same as pixGammaTRC() except mapping is optionally over
+ *          a subset of pixels described by pixm.
+ *      (2) Masking does not work for colormapped images.
+ *      (3) See pixGammaTRC() for details on how to use the parameters.
+ * 
+ */ +PIX * +pixGammaTRCMasked(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +l_int32 d; +NUMA *nag; + + PROCNAME("pixGammaTRCMasked"); + + if (!pixm) + return pixGammaTRC(pixd, pixs, gamma, minval, maxval); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("invalid: pixs has a colormap", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); + if (minval >= maxval) + return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); + if (gamma <= 0.0) { + L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); + gamma = 1.0; + } + + if (gamma == 1.0 && minval == 0 && maxval == 255) + return pixCopy(pixd, pixs); + + if (!pixd) /* start with a copy if not in-place */ + pixd = pixCopy(NULL, pixs); + + if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) + return (PIX *)ERROR_PTR("nag not made", procName, pixd); + pixTRCMap(pixd, pixm, nag); + numaDestroy(&nag); + + return pixd; +} + + +/*! + * \brief pixGammaTRCWithAlpha() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 32 bpp + * \param[in] gamma gamma correction; must be > 0.0 + * \param[in] minval input value that gives 0 for output; can be < 0 + * \param[in] maxval input value that gives 255 for output; can be > 255 + * \return pixd always + * + *
+ * Notes:
+ *      (1) See usage notes in pixGammaTRC().
+ *      (2) This version saves the alpha channel.  It is only valid
+ *          for 32 bpp (no colormap), and is a bit slower.
+ * 
+ */ +PIX * +pixGammaTRCWithAlpha(PIX *pixd, + PIX *pixs, + l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +NUMA *nag; +PIX *pixalpha; + + PROCNAME("pixGammaTRCWithAlpha"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + if (gamma <= 0.0) { + L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); + gamma = 1.0; + } + if (minval >= maxval) + return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); + + if (gamma == 1.0 && minval == 0 && maxval == 255) + return pixCopy(pixd, pixs); + if (!pixd) /* start with a copy if not in-place */ + pixd = pixCopy(NULL, pixs); + + pixalpha = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* save */ + if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) + return (PIX *)ERROR_PTR("nag not made", procName, pixd); + pixTRCMap(pixd, NULL, nag); + pixSetRGBComponent(pixd, pixalpha, L_ALPHA_CHANNEL); /* restore */ + pixSetSpp(pixd, 4); + + numaDestroy(&nag); + pixDestroy(&pixalpha); + return pixd; +} + + +/*! + * \brief numaGammaTRC() + * + * \param[in] gamma gamma factor; must be > 0.0 + * \param[in] minval input value that gives 0 for output + * \param[in] maxval input value that gives 255 for output + * \return na, or NULL on error + * + *
+ * Notes:
+ *      (1) The map is returned as a numa; values are clipped to [0, 255].
+ *      (2) To force all intensities into a range within fraction delta
+ *          of white, use: minval = -256 * (1 - delta) / delta
+ *                         maxval = 255
+ *      (3) To force all intensities into a range within fraction delta
+ *          of black, use: minval = 0
+ *                         maxval = 256 * (1 - delta) / delta
+ * 
+ */ +NUMA * +numaGammaTRC(l_float32 gamma, + l_int32 minval, + l_int32 maxval) +{ +l_int32 i, val; +l_float32 x, invgamma; +NUMA *na; + + PROCNAME("numaGammaTRC"); + + if (minval >= maxval) + return (NUMA *)ERROR_PTR("minval not < maxval", procName, NULL); + if (gamma <= 0.0) { + L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); + gamma = 1.0; + } + + invgamma = 1. / gamma; + na = numaCreate(256); + for (i = 0; i < minval; i++) + numaAddNumber(na, 0); + for (i = minval; i <= maxval; i++) { + if (i < 0) continue; + if (i > 255) continue; + x = (l_float32)(i - minval) / (l_float32)(maxval - minval); + val = (l_int32)(255. * powf(x, invgamma) + 0.5); + val = L_MAX(val, 0); + val = L_MIN(val, 255); + numaAddNumber(na, val); + } + for (i = maxval + 1; i < 256; i++) + numaAddNumber(na, 255); + + return na; +} + + +/*-------------------------------------------------------------* + * Contrast enhancement * + *-------------------------------------------------------------*/ +/*! + * \brief pixContrastTRC() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap + * \param[in] factor 0.0 is no enhancement + * \return pixd always + * + *
+ * Notes:
+ *      (1) pixd must either be null or equal to pixs.
+ *          For in-place operation, set pixd == pixs:
+ *             pixContrastTRC(pixs, pixs, ...);
+ *          To get a new image, set pixd == null:
+ *             pixd = pixContrastTRC(NULL, pixs, ...);
+ *      (2) If pixs is colormapped, the colormap is transformed,
+ *          either in-place or in a copy of pixs.
+ *      (3) Contrast is enhanced by mapping each color component
+ *          using an atan function with maximum slope at 127.
+ *          Pixels below 127 are lowered in intensity and pixels
+ *          above 127 are increased.
+ *      (4) The useful range for the contrast factor is scaled to
+ *          be in (0.0 to 1.0), but larger values can also be used.
+ *      (5) If factor == 0.0, no enhancement is performed; return a copy
+ *          unless in-place, in which case this is a no-op.
+ *      (6) For color images that are not colormapped, the mapping
+ *          is applied to each component.
+ * 
+ */ +PIX * +pixContrastTRC(PIX *pixd, + PIX *pixs, + l_float32 factor) +{ +l_int32 d; +NUMA *nac; +PIXCMAP *cmap; + + PROCNAME("pixContrastTRC"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + if (factor < 0.0) { + L_WARNING("factor must be >= 0.0; using 0.0\n", procName); + factor = 0.0; + } + if (factor == 0.0) + return pixCopy(pixd, pixs); + + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + if (!cmap && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); + + if (!pixd) /* start with a copy if not in-place */ + pixd = pixCopy(NULL, pixs); + + if (cmap) { + pixcmapContrastTRC(pixGetColormap(pixd), factor); + return pixd; + } + + /* pixd is 8 or 32 bpp */ + if ((nac = numaContrastTRC(factor)) == NULL) + return (PIX *)ERROR_PTR("nac not made", procName, pixd); + pixTRCMap(pixd, NULL, nac); + numaDestroy(&nac); + + return pixd; +} + + +/*! + * \brief pixContrastTRCMasked() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 8 or 32 bpp; or 2, 4 or 8 bpp with colormap + * \param[in] pixm [optional] null or 1 bpp + * \param[in] factor 0.0 is no enhancement + * \return pixd always + * + *
+ * Notes:
+ *      (1) Same as pixContrastTRC() except mapping is optionally over
+ *          a subset of pixels described by pixm.
+ *      (2) Masking does not work for colormapped images.
+ *      (3) See pixContrastTRC() for details on how to use the parameters.
+ * 
+ */ +PIX * +pixContrastTRCMasked(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_float32 factor) +{ +l_int32 d; +NUMA *nac; + + PROCNAME("pixContrastTRCMasked"); + + if (!pixm) + return pixContrastTRC(pixd, pixs, factor); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("invalid: pixs has a colormap", procName, pixd); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); + + if (factor < 0.0) { + L_WARNING("factor must be >= 0.0; using 0.0\n", procName); + factor = 0.0; + } + if (factor == 0.0) + return pixCopy(pixd, pixs); + + if (!pixd) /* start with a copy if not in-place */ + pixd = pixCopy(NULL, pixs); + + if ((nac = numaContrastTRC(factor)) == NULL) + return (PIX *)ERROR_PTR("nac not made", procName, pixd); + pixTRCMap(pixd, pixm, nac); + numaDestroy(&nac); + + return pixd; +} + + +/*! + * \brief numaContrastTRC() + * + * \param[in] factor generally between 0.0 [no enhancement] + * and 1.0, but can be larger than 1.0 + * \return na, or NULL on error + * + *
+ * Notes:
+ *      (1) The mapping is monotonic increasing, where 0 is mapped
+ *          to 0 and 255 is mapped to 255.
+ *      (2) As 'factor' is increased from 0.0 (where the mapping is linear),
+ *          the map gets closer to its limit as a step function that
+ *          jumps from 0 to 255 at the center (input value = 127).
+ * 
+ */ +NUMA * +numaContrastTRC(l_float32 factor) +{ +l_int32 i, val; +l_float64 x, ymax, ymin, dely, scale; +NUMA *na; + + PROCNAME("numaContrastTRC"); + + if (factor < 0.0) { + L_WARNING("factor must be >= 0.0; using 0.0; no enhancement\n", + procName); + factor = 0.0; + } + if (factor == 0.0) + return numaMakeSequence(0, 1, 256); /* linear map */ + + scale = EnhanceScaleFactor; + ymax = atan((l_float64)(1.0 * factor * scale)); + ymin = atan((l_float64)(-127. * factor * scale / 128.)); + dely = ymax - ymin; + na = numaCreate(256); + for (i = 0; i < 256; i++) { + x = (l_float64)i; + val = (l_int32)((255. / dely) * + (-ymin + atan((l_float64)(factor * scale * (x - 127.) / 128.))) + + 0.5); + numaAddNumber(na, val); + } + + return na; +} + + +/*-------------------------------------------------------------* + * Histogram equalization * + *-------------------------------------------------------------*/ +/*! + * \brief pixEqualizeTRC() + * + * \param[in] pixd [optional] null or equal to pixs + * \param[in] pixs 8 bpp gray, 32 bpp rgb, or colormapped + * \param[in] fract fraction of equalization movement of pixel values + * \param[in] factor subsampling factor; integer >= 1 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) pixd must either be null or equal to pixs.
+ *          For in-place operation, set pixd == pixs:
+ *             pixEqualizeTRC(pixs, pixs, ...);
+ *          To get a new image, set pixd == null:
+ *             pixd = pixEqualizeTRC(NULL, pixs, ...);
+ *      (2) In histogram equalization, a tone reproduction curve
+ *          mapping is used to make the number of pixels at each
+ *          intensity equal.
+ *      (3) If fract == 0.0, no equalization is performed; return a copy
+ *          unless in-place, in which case this is a no-op.
+ *          If fract == 1.0, equalization is complete.
+ *      (4) Set the subsampling factor > 1 to reduce the amount of computation.
+ *      (5) If pixs is colormapped, the colormap is removed and
+ *          converted to rgb or grayscale.
+ *      (6) If pixs has color, equalization is done in each channel
+ *          separately.
+ *      (7) Note that even if there is a colormap, we can get an
+ *          in-place operation because the intermediate image pixt
+ *          is copied back to pixs (which for in-place is the same
+ *          as pixd).
+ * 
+ */ +PIX * +pixEqualizeTRC(PIX *pixd, + PIX *pixs, + l_float32 fract, + l_int32 factor) +{ +l_int32 d; +NUMA *na; +PIX *pixt, *pix8; +PIXCMAP *cmap; + + PROCNAME("pixEqualizeTRC"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + if (d != 8 && d != 32 && !cmap) + return (PIX *)ERROR_PTR("pixs not 8/32 bpp or cmapped", procName, NULL); + if (fract < 0.0 || fract > 1.0) + return (PIX *)ERROR_PTR("fract not in [0.0 ... 1.0]", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("sampling factor < 1", procName, NULL); + + if (fract == 0.0) + return pixCopy(pixd, pixs); + + /* If there is a colormap, remove it. */ + if (cmap) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pixt = pixClone(pixs); + + /* Make a copy if necessary */ + pixd = pixCopy(pixd, pixt); + pixDestroy(&pixt); + + d = pixGetDepth(pixd); + if (d == 8) { + na = numaEqualizeTRC(pixd, fract, factor); + pixTRCMap(pixd, NULL, na); + numaDestroy(&na); + } else { /* 32 bpp */ + pix8 = pixGetRGBComponent(pixd, COLOR_RED); + na = numaEqualizeTRC(pix8, fract, factor); + pixTRCMap(pix8, NULL, na); + pixSetRGBComponent(pixd, pix8, COLOR_RED); + numaDestroy(&na); + pixDestroy(&pix8); + pix8 = pixGetRGBComponent(pixd, COLOR_GREEN); + na = numaEqualizeTRC(pix8, fract, factor); + pixTRCMap(pix8, NULL, na); + pixSetRGBComponent(pixd, pix8, COLOR_GREEN); + numaDestroy(&na); + pixDestroy(&pix8); + pix8 = pixGetRGBComponent(pixd, COLOR_BLUE); + na = numaEqualizeTRC(pix8, fract, factor); + pixTRCMap(pix8, NULL, na); + pixSetRGBComponent(pixd, pix8, COLOR_BLUE); + numaDestroy(&na); + pixDestroy(&pix8); + } + + return pixd; +} + + +/*! + * \brief numaEqualizeTRC() + * + * \param[in] pix 8 bpp, no colormap + * \param[in] fract fraction of equalization movement of pixel values + * \param[in] factor subsampling factor; integer >= 1 + * \return nad, or NULL on error + * + *
+ * Notes:
+ *      (1) If fract == 0.0, no equalization will be performed.
+ *          If fract == 1.0, equalization is complete.
+ *      (2) Set the subsampling factor > 1 to reduce the amount of computation.
+ *      (3) The map is returned as a numa with 256 values, specifying
+ *          the equalized value (array value) for every input value
+ *          (the array index).
+ * 
+ */ +NUMA * +numaEqualizeTRC(PIX *pix, + l_float32 fract, + l_int32 factor) +{ +l_int32 iin, iout, itarg; +l_float32 val, sum; +NUMA *nah, *nasum, *nad; + + PROCNAME("numaEqualizeTRC"); + + if (!pix) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + if (pixGetDepth(pix) != 8) + return (NUMA *)ERROR_PTR("pix not 8 bpp", procName, NULL); + if (fract < 0.0 || fract > 1.0) + return (NUMA *)ERROR_PTR("fract not in [0.0 ... 1.0]", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); + + if (fract == 0.0) + L_WARNING("fract = 0.0; no equalization requested\n", procName); + + if ((nah = pixGetGrayHistogram(pix, factor)) == NULL) + return (NUMA *)ERROR_PTR("histogram not made", procName, NULL); + numaGetSum(nah, &sum); + nasum = numaGetPartialSums(nah); + + nad = numaCreate(256); + for (iin = 0; iin < 256; iin++) { + numaGetFValue(nasum, iin, &val); + itarg = (l_int32)(255. * val / sum + 0.5); + iout = iin + (l_int32)(fract * (itarg - iin)); + iout = L_MIN(iout, 255); /* to be safe */ + numaAddNumber(nad, iout); + } + + numaDestroy(&nah); + numaDestroy(&nasum); + return nad; +} + + +/*-------------------------------------------------------------* + * Generic TRC mapping * + *-------------------------------------------------------------*/ +/*! + * \brief pixTRCMap() + * + * \param[in] pixs 8 grayscale or 32 bpp rgb; not colormapped + * \param[in] pixm [optional] 1 bpp mask + * \param[in] na mapping array + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This operation is in-place on pixs.
+ *      (2) For 32 bpp, this applies the same map to each of the r,g,b
+ *          components.
+ *      (3) The mapping array is of size 256, and it maps the input
+ *          index into values in the range [0, 255].
+ *      (4) If defined, the optional 1 bpp mask pixm has its origin
+ *          aligned with pixs, and the map function is applied only
+ *          to pixels in pixs under the fg of pixm.
+ *      (5) For 32 bpp, this does not save the alpha channel.
+ * 
+ */ +l_int32 +pixTRCMap(PIX *pixs, + PIX *pixm, + NUMA *na) +{ +l_int32 w, h, d, wm, hm, wpl, wplm, i, j, sval8, dval8; +l_uint32 sval32, dval32; +l_uint32 *data, *datam, *line, *linem, *tab; + + PROCNAME("pixTRCMap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (numaGetCount(na) != 256) + return ERROR_INT("na not of size 256", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32) + return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); + if (pixm) { + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + } + + tab = (l_uint32 *)numaGetIArray(na); /* get the array for efficiency */ + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + if (!pixm) { + if (d == 8) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + sval8 = GET_DATA_BYTE(line, j); + dval8 = tab[sval8]; + SET_DATA_BYTE(line, j, dval8); + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + sval32 = *(line + j); + dval32 = + tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | + tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | + tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; + *(line + j) = dval32; + } + } + } + } else { + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixm, &wm, &hm, NULL); + if (d == 8) { + for (i = 0; i < h; i++) { + if (i >= hm) + break; + line = data + i * wpl; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if (j >= wm) + break; + if (GET_DATA_BIT(linem, j) == 0) + continue; + sval8 = GET_DATA_BYTE(line, j); + dval8 = tab[sval8]; + SET_DATA_BYTE(line, j, dval8); + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i++) { + if (i >= hm) + break; + line = data + i * wpl; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if (j >= wm) + break; + if (GET_DATA_BIT(linem, j) == 0) + continue; + sval32 = *(line + j); + dval32 = + tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | + tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | + tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; + *(line + j) = dval32; + } + } + } + } + + LEPT_FREE(tab); + return 0; +} + + +/*! + * \brief pixTRCMapGeneral() + * + * \param[in] pixs 32 bpp rgb; not colormapped + * \param[in] pixm [optional] 1 bpp mask + * \param[in] nar, nag, nab mapping arrays + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This operation is in-place on %pixs.
+ *      (2) Each of the r,g,b mapping arrays is of size 256. They map the
+ *          input value for that color component into values in the
+ *          range [0, 255].
+ *      (3) In the special case where the r, g and b mapping arrays are
+ *          all the same, call pixTRCMap() instead.
+ *      (4) If defined, the optional 1 bpp mask %pixm has its origin
+ *          aligned with %pixs, and the map function is applied only
+ *          to pixels in %pixs under the fg of pixm.
+ *      (5) The alpha channel is not saved.
+ * 
+ */ +l_int32 +pixTRCMapGeneral(PIX *pixs, + PIX *pixm, + NUMA *nar, + NUMA *nag, + NUMA *nab) +{ +l_int32 w, h, wm, hm, wpl, wplm, i, j; +l_uint32 sval32, dval32; +l_uint32 *data, *datam, *line, *linem, *tabr, *tabg, *tabb; + + PROCNAME("pixTRCMapGeneral"); + + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm defined and not 1 bpp", procName, 1); + if (!nar || !nag || !nab) + return ERROR_INT("na{r,g,b} not all defined", procName, 1); + if (numaGetCount(nar) != 256 || numaGetCount(nag) != 256 || + numaGetCount(nab) != 256) + return ERROR_INT("na{r,g,b} not all of size 256", procName, 1); + + /* Get the arrays for efficiency */ + tabr = (l_uint32 *)numaGetIArray(nar); + tabg = (l_uint32 *)numaGetIArray(nag); + tabb = (l_uint32 *)numaGetIArray(nab); + pixGetDimensions(pixs, &w, &h, NULL); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + if (!pixm) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + sval32 = *(line + j); + dval32 = + tabr[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | + tabg[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | + tabb[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; + *(line + j) = dval32; + } + } + } else { + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixm, &wm, &hm, NULL); + for (i = 0; i < h; i++) { + if (i >= hm) + break; + line = data + i * wpl; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if (j >= wm) + break; + if (GET_DATA_BIT(linem, j) == 0) + continue; + sval32 = *(line + j); + dval32 = + tabr[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | + tabg[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | + tabb[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; + *(line + j) = dval32; + } + } + } + + LEPT_FREE(tabr); + LEPT_FREE(tabg); + LEPT_FREE(tabb); + return 0; +} + + + +/*-----------------------------------------------------------------------* + * Unsharp masking * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixUnsharpMasking() + * + * \param[in] pixs all depths except 1 bpp; with or without colormaps + * \param[in] halfwidth "half-width" of smoothing filter + * \param[in] fract fraction of edge added back into image + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) We use symmetric smoothing filters of odd dimension,
+ *          typically use sizes of 3, 5, 7, etc.  The %halfwidth parameter
+ *          for these is (size - 1)/2; i.e., 1, 2, 3, etc.
+ *      (2) The fract parameter is typically taken in the
+ *          range:  0.2 < fract < 0.7
+ *      (3) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMasking(PIX *pixs, + l_int32 halfwidth, + l_float32 fract) +{ +l_int32 d; +PIX *pixt, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; + + PROCNAME("pixUnsharpMasking"); + + if (!pixs || (pixGetDepth(pixs) == 1)) + return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + + if (halfwidth == 1 || halfwidth == 2) + return pixUnsharpMaskingFast(pixs, halfwidth, fract, L_BOTH_DIRECTIONS); + + /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ + if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* Sharpen */ + d = pixGetDepth(pixt); + if (d == 8) { + pixd = pixUnsharpMaskingGray(pixt, halfwidth, fract); + } else { /* d == 32 */ + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixrs = pixUnsharpMaskingGray(pixr, halfwidth, fract); + pixDestroy(&pixr); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixgs = pixUnsharpMaskingGray(pixg, halfwidth, fract); + pixDestroy(&pixg); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + pixbs = pixUnsharpMaskingGray(pixb, halfwidth, fract); + pixDestroy(&pixb); + pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); + pixDestroy(&pixrs); + pixDestroy(&pixgs); + pixDestroy(&pixbs); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixUnsharpMaskingGray() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] halfwidth "half-width" of smoothing filter + * \param[in] fract fraction of edge added back into image + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) We use symmetric smoothing filters of odd dimension,
+ *          typically use sizes of 3, 5, 7, etc.  The %halfwidth parameter
+ *          for these is (size - 1)/2; i.e., 1, 2, 3, etc.
+ *      (2) The fract parameter is typically taken in the range:
+ *          0.2 < fract < 0.7
+ *      (3) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMaskingGray(PIX *pixs, + l_int32 halfwidth, + l_float32 fract) +{ +l_int32 w, h, d; +PIX *pixc, *pixd; +PIXACC *pixacc; + + PROCNAME("pixUnsharpMaskingGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 || pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + if (halfwidth == 1 || halfwidth == 2) + return pixUnsharpMaskingGrayFast(pixs, halfwidth, fract, + L_BOTH_DIRECTIONS); + + if ((pixc = pixBlockconvGray(pixs, NULL, halfwidth, halfwidth)) == NULL) + return (PIX *)ERROR_PTR("pixc not made", procName, NULL); + + /* Steps: + * (1) edge image is pixs - pixc (this is highpass part) + * (2) multiply edge image by fract + * (3) add fraction of edge to pixs + * + * To show how this is done with both interfaces to arithmetic + * on integer Pix, here is the implementation in the lower-level + * function calls: + * pixt = pixInitAccumulate(w, h, 0x10000000)) == NULL) + * pixAccumulate(pixt, pixs, L_ARITH_ADD); + * pixAccumulate(pixt, pixc, L_ARITH_SUBTRACT); + * pixMultConstAccumulate(pixt, fract, 0x10000000); + * pixAccumulate(pixt, pixs, L_ARITH_ADD); + * pixd = pixFinalAccumulate(pixt, 0x10000000, 8)) == NULL) + * pixDestroy(&pixt); + * + * The code below does the same thing using the Pixacc accumulator, + * hiding the details of the offset that is needed for subtraction. + */ + pixacc = pixaccCreate(w, h, 1); + pixaccAdd(pixacc, pixs); + pixaccSubtract(pixacc, pixc); + pixaccMultConst(pixacc, fract); + pixaccAdd(pixacc, pixs); + pixd = pixaccFinal(pixacc, 8); + pixaccDestroy(&pixacc); + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixUnsharpMaskingFast() + * + * \param[in] pixs all depths except 1 bpp; with or without colormaps + * \param[in] halfwidth "half-width" of smoothing filter; 1 and 2 only + * \param[in] fract fraction of high frequency added to image + * \param[in] direction L_HORIZ, L_VERT, L_BOTH_DIRECTIONS + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The fast version uses separable 1-D filters directly on
+ *          the input image.  The halfwidth is either 1 (full width = 3)
+ *          or 2 (full width = 5).
+ *      (2) The fract parameter is typically taken in the
+ *            range:  0.2 < fract < 0.7
+ *      (3) To skip horizontal sharpening, use %fracth = 0.0; ditto for %fractv
+ *      (4) For one dimensional filtering (as an example):
+ *          For %halfwidth = 1, the low-pass filter is
+ *              L:    1/3    1/3   1/3
+ *          and the high-pass filter is
+ *              H = I - L:   -1/3   2/3   -1/3
+ *          For %halfwidth = 2, the low-pass filter is
+ *              L:    1/5    1/5   1/5    1/5    1/5
+ *          and the high-pass filter is
+ *              H = I - L:   -1/5  -1/5   4/5  -1/5   -1/5
+ *          The new sharpened pixel value is found by adding some fraction
+ *          of the high-pass filter value (which sums to 0) to the
+ *          initial pixel value:
+ *              N = I + fract * H
+ *      (5) For 2D, the sharpening filter is not separable, because the
+ *          vertical filter depends on the horizontal location relative
+ *          to the filter origin, and v.v.   So we either do the full
+ *          2D filter (for %halfwidth == 1) or do the low-pass
+ *          convolution separably and then compose with the original pix.
+ *      (6) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMaskingFast(PIX *pixs, + l_int32 halfwidth, + l_float32 fract, + l_int32 direction) +{ +l_int32 d; +PIX *pixt, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; + + PROCNAME("pixUnsharpMaskingFast"); + + if (!pixs || (pixGetDepth(pixs) == 1)) + return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + if (halfwidth != 1 && halfwidth != 2) + return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT && + direction != L_BOTH_DIRECTIONS) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + + /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ + if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* Sharpen */ + d = pixGetDepth(pixt); + if (d == 8) { + pixd = pixUnsharpMaskingGrayFast(pixt, halfwidth, fract, direction); + } else { /* d == 32 */ + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixrs = pixUnsharpMaskingGrayFast(pixr, halfwidth, fract, direction); + pixDestroy(&pixr); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixgs = pixUnsharpMaskingGrayFast(pixg, halfwidth, fract, direction); + pixDestroy(&pixg); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + pixbs = pixUnsharpMaskingGrayFast(pixb, halfwidth, fract, direction); + pixDestroy(&pixb); + pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); + pixDestroy(&pixrs); + pixDestroy(&pixgs); + pixDestroy(&pixbs); + } + + pixDestroy(&pixt); + return pixd; +} + + + +/*! + * \brief pixUnsharpMaskingGrayFast() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 + * \param[in] fract fraction of high frequency added to image + * \param[in] direction L_HORIZ, L_VERT, L_BOTH_DIRECTIONS + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) For usage and explanation of the algorithm, see notes
+ *          in pixUnsharpMaskingFast().
+ *      (2) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMaskingGrayFast(PIX *pixs, + l_int32 halfwidth, + l_float32 fract, + l_int32 direction) +{ +PIX *pixd; + + PROCNAME("pixUnsharpMaskingGrayFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8 || pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + if (halfwidth != 1 && halfwidth != 2) + return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT && + direction != L_BOTH_DIRECTIONS) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + + if (direction != L_BOTH_DIRECTIONS) + pixd = pixUnsharpMaskingGray1D(pixs, halfwidth, fract, direction); + else /* 2D sharpening */ + pixd = pixUnsharpMaskingGray2D(pixs, halfwidth, fract); + + return pixd; +} + + +/*! + * \brief pixUnsharpMaskingGray1D() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 + * \param[in] fract fraction of high frequency added to image + * \param[in] direction filtering direction; use L_HORIZ or L_VERT + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) For usage and explanation of the algorithm, see notes
+ *          in pixUnsharpMaskingFast().
+ *      (2) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMaskingGray1D(PIX *pixs, + l_int32 halfwidth, + l_float32 fract, + l_int32 direction) +{ +l_int32 w, h, d, wpls, wpld, i, j, ival; +l_uint32 *datas, *datad; +l_uint32 *lines, *lines0, *lines1, *lines2, *lines3, *lines4, *lined; +l_float32 val, a[5]; +PIX *pixd; + + PROCNAME("pixUnsharpMaskingGray1D"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 || pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + if (halfwidth != 1 && halfwidth != 2) + return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); + + /* Initialize pixd with pixels from pixs that will not be + * set when computing the sharpened values. */ + pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, + halfwidth, halfwidth); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + if (halfwidth == 1) { + a[0] = -fract / 3.0; + a[1] = 1.0 + fract * 2.0 / 3.0; + a[2] = a[0]; + } else { /* halfwidth == 2 */ + a[0] = -fract / 5.0; + a[1] = a[0]; + a[2] = 1.0 + fract * 4.0 / 5.0; + a[3] = a[0]; + a[4] = a[0]; + } + + if (direction == L_HORIZ) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (halfwidth == 1) { + for (j = 1; j < w - 1; j++) { + val = a[0] * GET_DATA_BYTE(lines, j - 1) + + a[1] * GET_DATA_BYTE(lines, j) + + a[2] * GET_DATA_BYTE(lines, j + 1); + ival = (l_int32)val; + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } else { /* halfwidth == 2 */ + for (j = 2; j < w - 2; j++) { + val = a[0] * GET_DATA_BYTE(lines, j - 2) + + a[1] * GET_DATA_BYTE(lines, j - 1) + + a[2] * GET_DATA_BYTE(lines, j) + + a[3] * GET_DATA_BYTE(lines, j + 1) + + a[4] * GET_DATA_BYTE(lines, j + 2); + ival = (l_int32)val; + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } + } + } else { /* direction == L_VERT */ + if (halfwidth == 1) { + for (i = 1; i < h - 1; i++) { + lines0 = datas + (i - 1) * wpls; + lines1 = datas + i * wpls; + lines2 = datas + (i + 1) * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = a[0] * GET_DATA_BYTE(lines0, j) + + a[1] * GET_DATA_BYTE(lines1, j) + + a[2] * GET_DATA_BYTE(lines2, j); + ival = (l_int32)val; + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } + } else { /* halfwidth == 2 */ + for (i = 2; i < h - 2; i++) { + lines0 = datas + (i - 2) * wpls; + lines1 = datas + (i - 1) * wpls; + lines2 = datas + i * wpls; + lines3 = datas + (i + 1) * wpls; + lines4 = datas + (i + 2) * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = a[0] * GET_DATA_BYTE(lines0, j) + + a[1] * GET_DATA_BYTE(lines1, j) + + a[2] * GET_DATA_BYTE(lines2, j) + + a[3] * GET_DATA_BYTE(lines3, j) + + a[4] * GET_DATA_BYTE(lines4, j); + ival = (l_int32)val; + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } + } + } + + return pixd; +} + + +/*! + * \brief pixUnsharpMaskingGray2D() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] halfwidth "half-width" of smoothing filter: 1 or 2 + * \param[in] fract fraction of high frequency added to image + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is for %halfwidth == 1, 2.
+ *      (2) The lowpass filter is implemented separably.
+ *      (3) Returns a clone if no sharpening is requested.
+ * 
+ */ +PIX * +pixUnsharpMaskingGray2D(PIX *pixs, + l_int32 halfwidth, + l_float32 fract) +{ +l_int32 w, h, d, wpls, wpld, wplf, i, j, ival, sval; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 val, norm; +l_float32 *dataf, *linef, *linef0, *linef1, *linef2, *linef3, *linef4; +PIX *pixd; +FPIX *fpix; + + PROCNAME("pixUnsharpMaskingGray2D"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 || pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); + if (fract <= 0.0 || halfwidth <= 0) { + L_WARNING("no sharpening requested; clone returned\n", procName); + return pixClone(pixs); + } + if (halfwidth != 1 && halfwidth != 2) + return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); + + if ((pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, + halfwidth, halfwidth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Do the low pass separably. Store the result of horizontal + * smoothing in an intermediate fpix. */ + if ((fpix = fpixCreate(w, h)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("fpix not made", procName, NULL); + } + dataf = fpixGetData(fpix); + wplf = fpixGetWpl(fpix); + if (halfwidth == 1) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linef = dataf + i * wplf; + for (j = 1; j < w - 1; j++) { + val = GET_DATA_BYTE(lines, j - 1) + + GET_DATA_BYTE(lines, j) + + GET_DATA_BYTE(lines, j + 1); + linef[j] = val; + } + } + } else { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linef = dataf + i * wplf; + for (j = 2; j < w - 2; j++) { + val = GET_DATA_BYTE(lines, j - 2) + + GET_DATA_BYTE(lines, j - 1) + + GET_DATA_BYTE(lines, j) + + GET_DATA_BYTE(lines, j + 1) + + GET_DATA_BYTE(lines, j + 2); + linef[j] = val; + } + } + } + + /* Do vertical smoothing to finish the low-pass filter. + * At each pixel, if L is the lowpass value, I is the + * src pixel value and f is the fraction of highpass to + * be added to I, then the highpass filter value is + * H = I - L + * and the new sharpened value is + * N = I + f * H. */ + if (halfwidth == 1) { + for (i = 1; i < h - 1; i++) { + linef0 = dataf + (i - 1) * wplf; + linef1 = dataf + i * wplf; + linef2 = dataf + (i + 1) * wplf; + lined = datad + i * wpld; + lines = datas + i * wpls; + norm = 1.0 / 9.0; + for (j = 1; j < w - 1; j++) { + val = norm * (linef0[j] + linef1[j] + + linef2[j]); /* L: lowpass filter value */ + sval = GET_DATA_BYTE(lines, j); /* I: source pixel */ + ival = (l_int32)(sval + fract * (sval - val) + 0.5); + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } + } else { + for (i = 2; i < h - 2; i++) { + linef0 = dataf + (i - 2) * wplf; + linef1 = dataf + (i - 1) * wplf; + linef2 = dataf + i * wplf; + linef3 = dataf + (i + 1) * wplf; + linef4 = dataf + (i + 2) * wplf; + lined = datad + i * wpld; + lines = datas + i * wpls; + norm = 1.0 / 25.0; + for (j = 2; j < w - 2; j++) { + val = norm * (linef0[j] + linef1[j] + linef2[j] + linef3[j] + + linef4[j]); /* L: lowpass filter value */ + sval = GET_DATA_BYTE(lines, j); /* I: source pixel */ + ival = (l_int32)(sval + fract * (sval - val) + 0.5); + ival = L_MAX(0, ival); + ival = L_MIN(255, ival); + SET_DATA_BYTE(lined, j, ival); + } + } + } + + fpixDestroy(&fpix); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Hue and saturation modification * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixModifyHue() + * + * \param[in] pixd [optional] can be null or equal to pixs + * \param[in] pixs 32 bpp rgb + * \param[in] fract between -1.0 and 1.0 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) pixd must either be null or equal to pixs.
+ *          For in-place operation, set pixd == pixs:
+ *             pixEqualizeTRC(pixs, pixs, ...);
+ *          To get a new image, set pixd == null:
+ *             pixd = pixEqualizeTRC(NULL, pixs, ...);
+ *      (1) Use fract > 0.0 to increase hue value; < 0.0 to decrease it.
+ *          1.0 (or -1.0) represents a 360 degree rotation; i.e., no change.
+ *      (2) If no modification is requested (fract = -1.0 or 0 or 1.0),
+ *          return a copy unless in-place, in which case this is a no-op.
+ *      (3) See discussion of color-modification methods, in coloring.c.
+ * 
+ */ +PIX * +pixModifyHue(PIX *pixd, + PIX *pixs, + l_float32 fract) +{ +l_int32 w, h, d, i, j, wpl, delhue; +l_int32 rval, gval, bval, hval, sval, vval; +l_uint32 *data, *line; + + PROCNAME("pixModifyHue"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs colormapped", procName, NULL); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (L_ABS(fract) > 1.0) + return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); + + pixd = pixCopy(pixd, pixs); + + delhue = (l_int32)(240 * fract); + if (delhue == 0 || delhue == 240 || delhue == -240) { + L_WARNING("no change requested in hue\n", procName); + return pixd; + } + if (delhue < 0) + delhue += 240; + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + hval = (hval + delhue) % 240; + convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, line + j); + } + } + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); + + return pixd; +} + + +/*! + * \brief pixModifySaturation() + * + * \param[in] pixd [optional] can be null, existing or equal to pixs + * \param[in] pixs 32 bpp rgb + * \param[in] fract between -1.0 and 1.0 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If fract > 0.0, it gives the fraction that the pixel
+ *          saturation is moved from its initial value toward 255.
+ *          If fract < 0.0, it gives the fraction that the pixel
+ *          saturation is moved from its initial value toward 0.
+ *          The limiting values for fract = -1.0 (1.0) thus set the
+ *          saturation to 0 (255).
+ *      (2) If fract = 0, no modification is requested; return a copy
+ *          unless in-place, in which case this is a no-op.
+ *      (3) See discussion of color-modification methods, in coloring.c.
+ * 
+ */ +PIX * +pixModifySaturation(PIX *pixd, + PIX *pixs, + l_float32 fract) +{ +l_int32 w, h, d, i, j, wpl; +l_int32 rval, gval, bval, hval, sval, vval; +l_uint32 *data, *line; + + PROCNAME("pixModifySaturation"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (L_ABS(fract) > 1.0) + return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); + + pixd = pixCopy(pixd, pixs); + if (fract == 0.0) { + L_WARNING("no change requested in saturation\n", procName); + return pixd; + } + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + if (fract < 0.0) + sval = (l_int32)(sval * (1.0 + fract)); + else + sval = (l_int32)(sval + fract * (255 - sval)); + convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, line + j); + } + } + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); + + return pixd; +} + + +/*! + * \brief pixMeasureSaturation() + * + * \param[in] pixs 32 bpp rgb + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] psat average saturation + * \return 0 if OK, 1 on error + */ +l_int32 +pixMeasureSaturation(PIX *pixs, + l_int32 factor, + l_float32 *psat) +{ +l_int32 w, h, d, i, j, wpl, sum, count; +l_int32 rval, gval, bval, hval, sval, vval; +l_uint32 *data, *line; + + PROCNAME("pixMeasureSaturation"); + + if (!psat) + return ERROR_INT("pixs not defined", procName, 1); + *psat = 0.0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("subsampling factor < 1", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0, sum = 0, count = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + sum += sval; + count++; + } + } + + if (count > 0) + *psat = (l_float32)sum / (l_float32)count; + return 0; +} + + +/*! + * \brief pixModifyBrightness() + * + * \param[in] pixd [optional] can be null, existing or equal to pixs + * \param[in] pixs 32 bpp rgb + * \param[in] fract between -1.0 and 1.0 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If fract > 0.0, it gives the fraction that the v-parameter,
+ *          which is max(r,g,b), is moved from its initial value toward 255.
+ *          If fract < 0.0, it gives the fraction that the v-parameter
+ *          is moved from its initial value toward 0.
+ *          The limiting values for fract = -1.0 (1.0) thus set the
+ *          v-parameter to 0 (255).
+ *      (2) If fract = 0, no modification is requested; return a copy
+ *          unless in-place, in which case this is a no-op.
+ *      (3) See discussion of color-modification methods, in coloring.c.
+ * 
+ */ +PIX * +pixModifyBrightness(PIX *pixd, + PIX *pixs, + l_float32 fract) +{ +l_int32 w, h, d, i, j, wpl; +l_int32 rval, gval, bval, hval, sval, vval; +l_uint32 *data, *line; + + PROCNAME("pixModifyBrightness"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (L_ABS(fract) > 1.0) + return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); + + pixd = pixCopy(pixd, pixs); + if (fract == 0.0) { + L_WARNING("no change requested in brightness\n", procName); + return pixd; + } + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + extractRGBValues(line[j], &rval, &gval, &bval); + convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); + if (fract > 0.0) + vval = (l_int32)(vval + fract * (255.0 - vval)); + else + vval = (l_int32)(vval * (1.0 + fract)); + convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, line + j); + } + } + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Color shifting * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixMosaicColorShiftRGB() + * + * \param[in] pixs 32 bpp rgb + * \param[in] roff center offset of red component + * \param[in] goff center offset of green component + * \param[in] boff center offset of blue component + * \param[in] delta increments from center offsets [0.0 - 0.1]; + * use 0.0 to get the default (0.04) + * \param[in] nincr number of increments in each (positive and negative) + * direction; use 0 to get the default (2). + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a mosaic view of the effect of shifting the RGB
+ *          components.  See pixColorShiftRGB() for details on the shifting.
+ *      (2) The offsets (%roff, %goff, %boff) set the color center point,
+ *          and the deviations from this are shown separately for deltas
+ *          in r, g and b.  For each component, we show 2 * %nincr + 1
+ *          images.
+ *      (3) Usage: color prints differ from the original due to three factors:
+ *          illumination, calibration of the camera in acquisition,
+ *          and calibration of the printer.  This function can be used
+ *          to iteratively match a color print to the original.  On each
+ *          iteration, the center offsets are set to the best match so
+ *          far, and the %delta increments are typically reduced.
+ * 
+ */ +PIX * +pixMosaicColorShiftRGB(PIX *pixs, + l_float32 roff, + l_float32 goff, + l_float32 boff, + l_float32 delta, + l_int32 nincr) +{ +char buf[64]; +l_int32 i; +l_float32 del; +L_BMF *bmf; +PIX *pix1, *pix2, *pix3; +PIXA *pixa; + + PROCNAME("pixMosaicColorShiftRGB"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not rgb", procName, NULL); + if (roff < -1.0 || roff > 1.0) + return (PIX *)ERROR_PTR("roff not in [-1.0, 1.0]", procName, NULL); + if (goff < -1.0 || goff > 1.0) + return (PIX *)ERROR_PTR("goff not in [-1.0, 1.0]", procName, NULL); + if (boff < -1.0 || boff > 1.0) + return (PIX *)ERROR_PTR("boff not in [-1.0, 1.0]", procName, NULL); + if (delta < 0.0 || delta > 0.1) + return (PIX *)ERROR_PTR("delta not in [0.0, 0.1]", procName, NULL); + if (delta == 0.0) delta = 0.04; + if (nincr < 0 || nincr > 6) + return (PIX *)ERROR_PTR("nincr not in [0, 6]", procName, NULL); + if (nincr == 0) nincr = 2; + + pixa = pixaCreate(3 * (2 * nincr + 1)); + bmf = bmfCreate(NULL, 8); + pix1 = pixScaleToSize(pixs, 400, 0); + for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { + pix2 = pixColorShiftRGB(pix1, roff + del, goff, boff); + snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", + roff + del, goff, boff); + pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, + L_ADD_BELOW, 0); + pixaAddPix(pixa, pix3, L_INSERT); + pixDestroy(&pix2); + } + for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { + pix2 = pixColorShiftRGB(pix1, roff, goff + del, boff); + snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", + roff, goff + del, boff); + pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, + L_ADD_BELOW, 0); + pixaAddPix(pixa, pix3, L_INSERT); + pixDestroy(&pix2); + } + for (i = 0, del = - nincr * delta; i < 2 * nincr + 1; i++, del += delta) { + pix2 = pixColorShiftRGB(pix1, roff, goff, boff + del); + snprintf(buf, sizeof(buf), "%4.2f, %4.2f, %4.2f", + roff, goff, boff + del); + pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, + L_ADD_BELOW, 0); + pixaAddPix(pixa, pix3, L_INSERT); + pixDestroy(&pix2); + } + pixDestroy(&pix1); + + pix1 = pixaDisplayTiledAndScaled(pixa, 32, 300, 2 * nincr + 1, 0, 30, 2); + pixaDestroy(&pixa); + bmfDestroy(&bmf); + return pix1; +} + + +/*! + * \brief pixColorShiftRGB() + * + * \param[in] pixs 32 bpp rgb + * \param[in] rfract fractional shift in red component + * \param[in] gfract fractional shift in green component + * \param[in] bfract fractional shift in blue component + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This allows independent fractional shifts of the r,g and b
+ *          components.  A positive shift pushes to saturation (255);
+ *          a negative shift pushes toward 0 (black).
+ *      (2) The effect can be imagined using a color wheel that consists
+ *          (for our purposes) of these 6 colors, separated by 60 degrees:
+ *             red, magenta, blue, cyan, green, yellow
+ *      (3) So, for example, a negative shift of the blue component
+ *          (bfract < 0) could be accompanied by positive shifts
+ *          of red and green to make an image more yellow.
+ *      (4) Examples of limiting cases:
+ *            rfract = 1 ==> r = 255
+ *            rfract = -1 ==> r = 0
+ * 
+ */ +PIX * +pixColorShiftRGB(PIX *pixs, + l_float32 rfract, + l_float32 gfract, + l_float32 bfract) +{ +l_int32 w, h, i, j, wpls, wpld, rval, gval, bval; +l_int32 *rlut, *glut, *blut; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 fi; +PIX *pixd; + + PROCNAME("pixColorShiftRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (rfract < -1.0 || rfract > 1.0) + return (PIX *)ERROR_PTR("rfract not in [-1.0, 1.0]", procName, NULL); + if (gfract < -1.0 || gfract > 1.0) + return (PIX *)ERROR_PTR("gfract not in [-1.0, 1.0]", procName, NULL); + if (bfract < -1.0 || bfract > 1.0) + return (PIX *)ERROR_PTR("bfract not in [-1.0, 1.0]", procName, NULL); + if (rfract == 0.0 && gfract == 0.0 && bfract == 0.0) + return pixCopy(NULL, pixs); + + rlut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + glut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + blut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) { + fi = i; + if (rfract >= 0) { + rlut[i] = (l_int32)(fi + (255.0 - fi) * rfract); + } else { + rlut[i] = (l_int32)(fi * (1.0 + rfract)); + } + if (gfract >= 0) { + glut[i] = (l_int32)(fi + (255.0 - fi) * gfract); + } else { + glut[i] = (l_int32)(fi * (1.0 + gfract)); + } + if (bfract >= 0) { + blut[i] = (l_int32)(fi + (255.0 - fi) * bfract); + } else { + blut[i] = (l_int32)(fi * (1.0 + bfract)); + } + } + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreate(w, h, 32); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + composeRGBPixel(rlut[rval], glut[gval], blut[bval], lined + j); + } + } + + LEPT_FREE(rlut); + LEPT_FREE(glut); + LEPT_FREE(blut); + return pixd; +} + +/*-----------------------------------------------------------------------* + * Darken gray (unsaturated) pixels + *-----------------------------------------------------------------------*/ +/*! + * \brief pixDarkenGray() + * + * \param[in] pixd [optional] can be null or equal to pixs + * \param[in] pixs 32 bpp rgb + * \param[in] thresh pixels with max component >= %thresh are unchanged + * \param[in] satlimit pixels with saturation >= %satlimit are unchanged + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This darkens gray pixels, by a fraction (sat/%satlimit), where
+ *          the saturation, sat, is the component difference (max - min).
+ *          The pixel value is unchanged if sat >= %satlimit.  A typical
+ *          value of %satlimit might be 40; the larger the value, the
+ *          more that pixels with a smaller saturation will be darkened.
+ *      (2) Pixels with max component >= %thresh are unchanged. This can be
+ *          used to prevent bright pixels with low saturation from being
+ *          darkened.  Setting thresh == 0 is a no-op; setting %thresh == 255
+ *          causes the darkening to be applied to all pixels.
+ *      (3) This function is useful to enhance pixels relative to a
+ *          gray background.
+ *      (4) A related function that builds a 1 bpp mask over the gray
+ *          pixels is pixMaskOverGrayPixels().
+ * 
+ */ +PIX * +pixDarkenGray(PIX *pixd, + PIX *pixs, + l_int32 thresh, + l_int32 satlimit) +{ +l_int32 w, h, i, j, wpls, wpld; +l_int32 rval, gval, bval, minrg, min, maxrg, max, sat; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 ratio; + + PROCNAME("pixDarkenGray"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (thresh < 0 || thresh > 255) + return (PIX *)ERROR_PTR("invalid thresh", procName, NULL); + if (satlimit < 1) + return (PIX *)ERROR_PTR("invalid satlimit", procName, NULL); + if (pixd && (pixs != pixd)) + return (PIX *)ERROR_PTR("not new or in-place", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + sat = max - min; + if (max >= thresh || sat >= satlimit) + continue; + ratio = (l_float32)sat / (l_float32)satlimit; + composeRGBPixel((l_int32)(ratio * rval), (l_int32)(ratio * gval), + (l_int32)(ratio * bval), &lined[j]); + } + } + return pixd; +} + + +/*-----------------------------------------------------------------------* + * General multiplicative constant color transform * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixMultConstantColor() + * + * \param[in] pixs colormapped or rgb + * \param[in] rfact red multiplicative factor + * \param[in] gfact green multiplicative factor + * \param[in] bfact blue multiplicative factor + * \return pixd colormapped or rgb, with colors scaled, or NULL on error + * + *
+ * Notes:
+ *      (1) rfact, gfact and bfact can only have non-negative values.
+ *          They can be greater than 1.0.  All transformed component
+ *          values are clipped to the interval [0, 255].
+ *      (2) For multiplication with a general 3x3 matrix of constants,
+ *          use pixMultMatrixColor().
+ * 
+ */ +PIX * +pixMultConstantColor(PIX *pixs, + l_float32 rfact, + l_float32 gfact, + l_float32 bfact) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; +l_uint32 nval; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMultConstantColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + rfact = L_MAX(0.0, rfact); + gfact = L_MAX(0.0, gfact); + bfact = L_MAX(0.0, bfact); + + if (cmap) { + if ((pixd = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixGetColormap(pixd); + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + nrval = (l_int32)(rfact * rval); + ngval = (l_int32)(gfact * gval); + nbval = (l_int32)(bfact * bval); + nrval = L_MIN(255, nrval); + ngval = L_MIN(255, ngval); + nbval = L_MIN(255, nbval); + pixcmapResetColor(cmap, i, nrval, ngval, nbval); + } + return pixd; + } + + if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + nrval = (l_int32)(rfact * rval); + ngval = (l_int32)(gfact * gval); + nbval = (l_int32)(bfact * bval); + nrval = L_MIN(255, nrval); + ngval = L_MIN(255, ngval); + nbval = L_MIN(255, nbval); + composeRGBPixel(nrval, ngval, nbval, &nval); + *(lined + j) = nval; + } + } + + return pixd; +} + + +/*! + * \brief pixMultMatrixColor() + * + * \param[in] pixs colormapped or rgb + * \param[in] kel kernel 3x3 matrix of floats + * \return pixd colormapped or rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) The kernel is a data structure used mostly for floating point
+ *          convolution.  Here it is a 3x3 matrix of floats that are used
+ *          to transform the pixel values by matrix multiplication:
+ *            nrval = a[0,0] * rval + a[0,1] * gval + a[0,2] * bval
+ *            ngval = a[1,0] * rval + a[1,1] * gval + a[1,2] * bval
+ *            nbval = a[2,0] * rval + a[2,1] * gval + a[2,2] * bval
+ *      (2) The matrix can be generated in several ways.
+ *          See kernel.c for details.  Here are two of them:
+ *            (a) kel = kernelCreate(3, 3);
+ *                kernelSetElement(kel, 0, 0, val00);
+ *                kernelSetElement(kel, 0, 1, val01);
+ *                ...
+ *            (b) from a static string; e.g.,:
+ *                const char *kdata = " 0.6  0.3 -0.2 "
+ *                                    " 0.1  1.2  0.4 "
+ *                                    " -0.4 0.2  0.9 ";
+ *                kel = kernelCreateFromString(3, 3, 0, 0, kdata);
+ *      (3) For the special case where the matrix is diagonal, it is easier
+ *          to use pixMultConstantColor().
+ *      (4) Matrix entries can have positive and negative values, and can
+ *          be larger than 1.0.  All transformed component values
+ *          are clipped to [0, 255].
+ * 
+ */ +PIX * +pixMultMatrixColor(PIX *pixs, + L_KERNEL *kel) +{ +l_int32 i, j, index, kw, kh, w, h, d, wpls, wpld; +l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; +l_uint32 nval; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 v[9]; /* use linear array for convenience */ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixMultMatrixColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!kel) + return (PIX *)ERROR_PTR("kel not defined", procName, NULL); + kernelGetParameters(kel, &kw, &kh, NULL, NULL); + if (kw != 3 || kh != 3) + return (PIX *)ERROR_PTR("matrix not 3x3", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (!cmap && d != 32) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + + for (i = 0, index = 0; i < 3; i++) + for (j = 0; j < 3; j++, index++) + kernelGetElement(kel, i, j, v + index); + + if (cmap) { + if ((pixd = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixGetColormap(pixd); + ncolors = pixcmapGetCount(cmap); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); + ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); + nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); + nrval = L_MAX(0, L_MIN(255, nrval)); + ngval = L_MAX(0, L_MIN(255, ngval)); + nbval = L_MAX(0, L_MIN(255, nbval)); + pixcmapResetColor(cmap, i, nrval, ngval, nbval); + } + return pixd; + } + + if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); + ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); + nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); + nrval = L_MAX(0, L_MIN(255, nrval)); + ngval = L_MAX(0, L_MIN(255, ngval)); + nbval = L_MAX(0, L_MIN(255, nbval)); + composeRGBPixel(nrval, ngval, nbval, &nval); + *(lined + j) = nval; + } + } + + return pixd; +} + + +/*-------------------------------------------------------------* + * Half-edge by bandpass * + *-------------------------------------------------------------*/ +/*! + * \brief pixHalfEdgeByBandpass() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb + * \param[in] sm1h, sm1v "half-widths" of smoothing filter sm1 + * \param[in] sm2h, sm2v "half-widths" of smoothing filter sm2; + * require sm2 != sm1 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) We use symmetric smoothing filters of odd dimension,
+ *          typically use 3, 5, 7, etc.  The smoothing parameters
+ *          for these are 1, 2, 3, etc.  The filter size is related
+ *          to the smoothing parameter by
+ *               size = 2 * smoothing + 1
+ *      (2) Because we take the difference of two lowpass filters,
+ *          this is actually a bandpass filter.
+ *      (3) We allow both filters to be anisotropic.
+ *      (4) Consider either the h or v component of the 2 filters.
+ *          Depending on whether sm1 > sm2 or sm2 > sm1, we get
+ *          different halves of the smoothed gradients (or "edges").
+ *          This difference of smoothed signals looks more like
+ *          a second derivative of a transition, which we rectify
+ *          by not allowing the signal to go below zero.  If sm1 < sm2,
+ *          the sm2 transition is broader, so the difference between
+ *          sm1 and sm2 signals is positive on the upper half of
+ *          the transition.  Likewise, if sm1 > sm2, the sm1 - sm2
+ *          signal difference is positive on the lower half of
+ *          the transition.
+ * 
+ */ +PIX * +pixHalfEdgeByBandpass(PIX *pixs, + l_int32 sm1h, + l_int32 sm1v, + l_int32 sm2h, + l_int32 sm2v) +{ +l_int32 d; +PIX *pixg, *pixacc, *pixc1, *pixc2; + + PROCNAME("pixHalfEdgeByBandpass"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (sm1h == sm2h && sm1v == sm2v) + return (PIX *)ERROR_PTR("sm2 = sm1", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (d == 32) + pixg = pixConvertRGBToLuminance(pixs); + else /* d == 8 */ + pixg = pixClone(pixs); + + /* Make a convolution accumulator and use it twice */ + if ((pixacc = pixBlockconvAccum(pixg)) == NULL) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("pixacc not made", procName, NULL); + } + if ((pixc1 = pixBlockconvGray(pixg, pixacc, sm1h, sm1v)) == NULL) { + pixDestroy(&pixg); + pixDestroy(&pixacc); + return (PIX *)ERROR_PTR("pixc1 not made", procName, NULL); + } + pixc2 = pixBlockconvGray(pixg, pixacc, sm2h, sm2v); + pixDestroy(&pixg); + pixDestroy(&pixacc); + if (!pixc2) { + pixDestroy(&pixc1); + return (PIX *)ERROR_PTR("pixc2 not made", procName, NULL); + } + + /* Compute the half-edge using pixc1 - pixc2. */ + pixSubtractGray(pixc1, pixc1, pixc2); + pixDestroy(&pixc2); + return pixc1; +} diff --git a/3rdparty/hgOCR/leptonica/environ.h b/3rdparty/hgOCR/leptonica/environ.h new file mode 100644 index 00000000..20e61fa0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/environ.h @@ -0,0 +1,554 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_ENVIRON_H +#define LEPTONICA_ENVIRON_H + +/*------------------------------------------------------------------------* + * Defines and includes differ for Unix and Windows. Also for Windows, * + * differentiate between conditionals based on platform and compiler. * + * For platforms: * + * _WIN32 => Windows, 32- or 64-bit * + * _WIN64 => Windows, 64-bit only * + * __CYGWIN__ => Cygwin * + * For compilers: * + * __GNUC__ => gcc * + * _MSC_VER => msvc * + *------------------------------------------------------------------------*/ + +/* MS VC++ does not provide stdint.h, so define the missing types here */ + + +#ifndef _MSC_VER +#include + +#else +/* Note that _WIN32 is defined for both 32 and 64 bit applications, + whereas _WIN64 is defined only for the latter */ + +#ifdef _WIN64 +typedef __int64 intptr_t; +typedef unsigned __int64 uintptr_t; +#else +typedef int intptr_t; +typedef unsigned int uintptr_t; +#endif + +/* VC++6 doesn't seem to have powf, expf. */ +#if (_MSC_VER < 1400) +#define powf(x, y) (float)pow((double)(x), (double)(y)) +#define expf(x) (float)exp((double)(x)) +#endif + +#endif /* _MSC_VER */ + +/* Windows specifics */ +#ifdef _WIN32 + /* DLL EXPORTS and IMPORTS */ + #if defined(LIBLEPT_EXPORTS) + #define LEPT_DLL __declspec(dllexport) + #elif defined(LIBLEPT_IMPORTS) + #define LEPT_DLL __declspec(dllimport) + #else + #define LEPT_DLL + #endif +#else /* non-Windows specifics */ + #include + #define LEPT_DLL +#endif /* _WIN32 */ + +typedef intptr_t l_intptr_t; +typedef uintptr_t l_uintptr_t; + + +/*--------------------------------------------------------------------* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* + * USER CONFIGURABLE * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* + * Environment variables with I/O libraries * + * Manual Configuration Only: NOT AUTO_CONF * + *--------------------------------------------------------------------*/ +/* + * Leptonica provides interfaces to link to several external image + * I/O libraries, plus zlib. Setting any of these to 0 here causes + * non-functioning stubs to be linked. + */ +#if !defined(HAVE_CONFIG_H) && !defined(ANDROID_BUILD) && !defined(OS_IOS) + + #if !defined(HAVE_LIBJPEG) + #define HAVE_LIBJPEG 0 + #endif + #if !defined(HAVE_LIBTIFF) + #define HAVE_LIBTIFF 0 + #endif + #if !defined(HAVE_LIBPNG) + #define HAVE_LIBPNG 0 + #endif + #if !defined(HAVE_LIBZ) + #define HAVE_LIBZ 1 + #endif + #if !defined(HAVE_LIBGIF) + #define HAVE_LIBGIF 0 + #endif + #if !defined(HAVE_LIBUNGIF) + #define HAVE_LIBUNGIF 0 + #endif + #if !defined(HAVE_LIBWEBP) + #define HAVE_LIBWEBP 0 + #endif + #if !defined(HAVE_LIBWEBP_ANIM) + #define HAVE_LIBWEBP_ANIM 0 + #endif + #if !defined(HAVE_LIBJP2K) + #define HAVE_LIBJP2K 0 + #endif + + /*-----------------------------------------------------------------------* + * Leptonica supports OpenJPEG 2.0+. If you have a version of openjpeg * + * (HAVE_LIBJP2K == 1) that is >= 2.0, set the path to the openjpeg.h * + * header in angle brackets here. * + *-----------------------------------------------------------------------*/ + #define LIBJP2K_HEADER + +#endif /* ! HAVE_CONFIG_H etc. */ + +/*--------------------------------------------------------------------* + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* + * USER CONFIGURABLE * + * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* + * Environ variables for image I/O without external libraries * + *--------------------------------------------------------------------*/ +/* + * Leptonica supplies I/O support without using external libraries for: + * * image read/write for bmp, pnm + * * header read for jp2k + * * image wrapping write for pdf and ps. + * Setting any of these to 0 causes non-functioning stubs to be linked. + */ +#define USE_BMPIO 1 +#define USE_PNMIO 1 +#define USE_JP2KHEADER 1 +#define USE_PDFIO 1 +#define USE_PSIO 1 + + +/*-------------------------------------------------------------------------* + * On linux systems, you can do I/O between Pix and memory. Specifically, + * you can compress (write compressed data to memory from a Pix) and + * uncompress (read from compressed data in memory to a Pix). + * For jpeg, png, jp2k, gif, pnm and bmp, these use the non-posix GNU + * functions fmemopen() and open_memstream(). These functions are not + * available on other systems. + * To use these functions in linux, you must define HAVE_FMEMOPEN to 1. + * To use them on MacOS, which does not support these functions, set it to 0. + *-------------------------------------------------------------------------*/ +#if !defined(HAVE_CONFIG_H) && !defined(ANDROID_BUILD) && !defined(OS_IOS) && \ + !defined(_WIN32) +#define HAVE_FMEMOPEN 1 +#endif /* ! HAVE_CONFIG_H etc. */ + +/*-------------------------------------------------------------------------* + * fstatat() is defined by POSIX, but some systems do not support it. * + * One example is older macOS systems (pre-10.10). * + * Play it safe and set the default value to 0. * + *-------------------------------------------------------------------------*/ +#if !defined(HAVE_CONFIG_H) +#define HAVE_FSTATAT 0 +#endif /* ! HAVE_CONFIG_H */ + +/*--------------------------------------------------------------------* + * It is desirable on Windows to have all temp files written to the same + * subdirectory of the Windows directory, because files under + * persist after reboot, and the regression tests write a lot of files. + * We write all test files to /tmp/lept or subdirectories of /tmp/lept. + * Windows temp files are specified as in unix, but have the translation + * /tmp/lept/xxx --> /lept/xxx + *--------------------------------------------------------------------*/ + + +/*--------------------------------------------------------------------* + * Built-in types * + *--------------------------------------------------------------------*/ +typedef int l_ok; /*!< return type 0 if OK, 1 on error */ +typedef signed char l_int8; /*!< signed 8-bit value */ +typedef unsigned char l_uint8; /*!< unsigned 8-bit value */ +typedef short l_int16; /*!< signed 16-bit value */ +typedef unsigned short l_uint16; /*!< unsigned 16-bit value */ +typedef int l_int32; /*!< signed 32-bit value */ +typedef unsigned int l_uint32; /*!< unsigned 32-bit value */ +typedef float l_float32; /*!< 32-bit floating point value */ +typedef double l_float64; /*!< 64-bit floating point value */ +#ifdef COMPILER_MSVC +typedef __int64 l_int64; /*!< signed 64-bit value */ +typedef unsigned __int64 l_uint64; /*!< unsigned 64-bit value */ +#else +typedef long long l_int64; /*!< signed 64-bit value */ +typedef unsigned long long l_uint64; /*!< unsigned 64-bit value */ +#endif /* COMPILER_MSVC */ + + +/*-------------------------------------------------------------------------* + * For security, the library is distributed in a configuration that does * + * not permit (1) forking with 'system', which is used for displaying * + * images and generating gnuplots, and (2) writing files with specified * + * compiled-in file names. All such writes are with functions such as * + * pixWriteDebug() where the "Debug" is appended to the usual name. * + * Whether the "Debug" version defaults to the standard version or is a * + * no-op depends on the value of this global variable. The default value * + * of LeptDebugOK is 0, and it is set in writefile.c. This value can be * + * over-ridden, for development and debugging, by setLeptDebugOK(). * + *-------------------------------------------------------------------------*/ +LEPT_DLL extern l_int32 LeptDebugOK; /* default is 0 */ + + +/*------------------------------------------------------------------------* + * Standard macros * + *------------------------------------------------------------------------*/ +#ifndef L_MIN +/*! Minimum of %x and %y */ +#define L_MIN(x, y) (((x) < (y)) ? (x) : (y)) +#endif + +#ifndef L_MAX +/*! Maximum of %x and %y */ +#define L_MAX(x, y) (((x) > (y)) ? (x) : (y)) +#endif + +#ifndef L_ABS +/*! Absolute value of %x */ +#define L_ABS(x) (((x) < 0) ? (-1 * (x)) : (x)) +#endif + +#ifndef L_SIGN +/*! Sign of %x */ +#define L_SIGN(x) (((x) < 0) ? -1 : 1) +#endif + +#ifndef UNDEF +/*! Undefined value */ +#define UNDEF -1 +#endif + +#ifndef NULL +/*! NULL value */ +#define NULL 0 +#endif + +#ifndef TRUE +/*! True value */ +#define TRUE 1 +#endif + +#ifndef FALSE +/*! False value */ +#define FALSE 0 +#endif + + +/*--------------------------------------------------------------------* + * Environment variables for endian dependence * + *--------------------------------------------------------------------*/ +/* + * To control conditional compilation, one of two variables + * + * L_LITTLE_ENDIAN (e.g., for Intel X86) + * L_BIG_ENDIAN (e.g., for Sun SPARC, Mac Power PC) + * + * is defined when the GCC compiler is invoked. + * All code should compile properly for both hardware architectures. + */ + + +/*------------------------------------------------------------------------* + * Simple search state variables * + *------------------------------------------------------------------------*/ +/*! Search State */ +enum { + L_NOT_FOUND = 0, + L_FOUND = 1 +}; + + +/*------------------------------------------------------------------------* + * Path separator conversion * + *------------------------------------------------------------------------*/ +/*! Path Separators */ +enum { + UNIX_PATH_SEPCHAR = 0, + WIN_PATH_SEPCHAR = 1 +}; + + +/*------------------------------------------------------------------------* + * Timing structs * + *------------------------------------------------------------------------*/ +typedef void *L_TIMER; + +/*! Timing struct */ +struct L_WallTimer { + l_int32 start_sec; + l_int32 start_usec; + l_int32 stop_sec; + l_int32 stop_usec; +}; +typedef struct L_WallTimer L_WALLTIMER; + + +/*------------------------------------------------------------------------* + * Standard memory allocation * + * * + * These specify the memory management functions that are used * + * on all heap data except for Pix. Memory management for Pix * + * also defaults to malloc and free. See pix1.c for details. * + *------------------------------------------------------------------------*/ +#define LEPT_MALLOC(blocksize) malloc(blocksize) +#define LEPT_CALLOC(numelem, elemsize) calloc(numelem, elemsize) +#define LEPT_REALLOC(ptr, blocksize) realloc(ptr, blocksize) +#define LEPT_FREE(ptr) free(ptr) + + +/*------------------------------------------------------------------------* + * Control printing of error, warning, and info messages * + * * + * To omit all messages to stderr, simply define NO_CONSOLE_IO on the * + * command line. For finer grained control, we have a mechanism * + * based on the message severity level. The following assumes that * + * NO_CONSOLE_IO is not defined. * + * * + * Messages are printed if the message severity is greater than or equal * + * to the current severity threshold. The current severity threshold * + * is the greater of the compile-time severity, which is the minimum * + * severity that can be reported, and the run-time severity, which is * + * the severity threshold at the moment. * + * * + * The compile-time threshold determines which messages are compiled * + * into the library for potential printing. Messages below the * + * compile-time threshold are omitted and can never be printed. The * + * default compile-time threshold is L_SEVERITY_INFO, but this may be * + * overridden by defining MINIMUM_SEVERITY to the desired enumeration * + * identifier on the compiler command line. Defining NO_CONSOLE_IO on * + * the command line is the same as setting MINIMUM_SEVERITY to * + * L_SEVERITY_NONE. * + * * + * The run-time threshold determines which messages are printed during * + * library execution. It defaults to the compile-time threshold but * + * may be changed either statically by defining DEFAULT_SEVERITY to * + * the desired enumeration identifier on the compiler command line, or * + * dynamically by calling setMsgSeverity() to specify a new threshold. * + * The run-time threshold may also be set from the value of the * + * environment variable LEPT_MSG_SEVERITY by calling setMsgSeverity() * + * and specifying L_SEVERITY_EXTERNAL. * + * * + * In effect, the compile-time threshold setting says, "Generate code * + * to permit messages of equal or greater severity than this to be * + * printed, if desired," whereas the run-time threshold setting says, * + * "Print messages that have an equal or greater severity than this." * + *------------------------------------------------------------------------*/ + + /*! Control printing of error, warning and info messages */ +/*! Message Control */ +enum { + L_SEVERITY_EXTERNAL = 0, /* Get the severity from the environment */ + L_SEVERITY_ALL = 1, /* Lowest severity: print all messages */ + L_SEVERITY_DEBUG = 2, /* Print debugging and higher messages */ + L_SEVERITY_INFO = 3, /* Print informational and higher messages */ + L_SEVERITY_WARNING = 4, /* Print warning and higher messages */ + L_SEVERITY_ERROR = 5, /* Print error and higher messages */ + L_SEVERITY_NONE = 6 /* Highest severity: print no messages */ +}; + +/* No message less than the compile-time threshold will ever be + * reported, regardless of the current run-time threshold. This allows + * selection of the set of messages to include in the library. For + * example, setting the threshold to L_SEVERITY_WARNING eliminates all + * informational messages from the library. With that setting, both + * warning and error messages would be printed unless setMsgSeverity() + * was called, or DEFAULT_SEVERITY was redefined, to set the run-time + * severity to L_SEVERITY_ERROR. In that case, only error messages + * would be printed. + * + * This mechanism makes the library smaller and faster, by eliminating + * undesired message reporting and the associated run-time overhead for + * message threshold checking, because code for messages whose severity + * is lower than MINIMUM_SEVERITY won't be generated. + * + * A production library might typically permit ERROR messages to be + * generated, and a development library might permit DEBUG and higher. + * The actual messages printed (as opposed to generated) would depend + * on the current run-time severity threshold. + * + * This is a complex mechanism and a few examples may help. + * (1) No output permitted under any circumstances. + * Use: -DNO_CONSOLE_IO or -DMINIMUM_SEVERITY=6 + * (2) Suppose you want to only allow error messages, and you don't + * want to permit info or warning messages at runtime. + * Use: -DMINIMUM_SEVERITY=5 + * (3) Suppose you want to only allow error messages by default, + * but you will permit this to be over-ridden at runtime. + * Use: -DDEFAULT_SEVERITY=5 + * and to allow info and warning override: + * setMsgSeverity(L_SEVERITY_INFO); + */ + +#ifdef NO_CONSOLE_IO + #undef MINIMUM_SEVERITY + #undef DEFAULT_SEVERITY + + #define MINIMUM_SEVERITY L_SEVERITY_NONE /*!< Compile-time default */ + #define DEFAULT_SEVERITY L_SEVERITY_NONE /*!< Run-time default */ + +#else + #ifndef MINIMUM_SEVERITY + #define MINIMUM_SEVERITY L_SEVERITY_INFO /*!< Compile-time default */ + #endif + + #ifndef DEFAULT_SEVERITY + #define DEFAULT_SEVERITY MINIMUM_SEVERITY /*!< Run-time default */ + #endif +#endif + + +/*! The run-time message severity threshold is defined in utils.c. */ +LEPT_DLL extern l_int32 LeptMsgSeverity; + +/* + *
+ *  Usage
+ *  =====
+ *  Messages are of two types.
+ *
+ *  (1) The messages
+ *      ERROR_INT(a,b,c)       : returns l_int32
+ *      ERROR_FLOAT(a,b,c)     : returns l_float32
+ *      ERROR_PTR(a,b,c)       : returns void*
+ *  are used to return from functions and take a fixed set of parameters:
+ *      a : 
+ *      b : procName
+ *      c : 
+ *  where procName is the name of the local variable naming the function.
+ *
+ *  (2) The purely informational L_* messages
+ *      L_ERROR(a,...)
+ *      L_WARNING(a,...)
+ *      L_INFO(a,...)
+ *  do not take a return value, but they take at least two parameters:
+ *      a  :   with optional format conversions
+ *      v1 : procName    (this must be included as the first vararg)
+ *      v2, ... :  optional varargs to match format converters in the message
+ *
+ *  To return an error from a function that returns void, use:
+ *      L_ERROR(, procName, [...])
+ *      return;
+ *
+ *  Implementation details
+ *  ======================
+ *  Messages are defined with the IF_SEV macro.  The first parameter is
+ *  the message severity, the second is the function to call if the
+ *  message is to be printed, and the third is the return value if the
+ *  message is to be suppressed.  For example, we might have an
+ *  informational message defined as:
+ *
+ *    IF_SEV(L_SEVERITY_INFO, fprintf(.......), 0)
+ *
+ *  The macro expands into a conditional.  Because the first comparison
+ *  is between two constants, an optimizing compiler will remove either
+ *  the comparison (if it's true) or the entire macro expansion (if it
+ *  is false).  This means that there is no run-time overhead for
+ *  messages whose severity falls below the minimum specified at compile
+ *  time, and for others the overhead is one (not two) comparisons.
+ *
+ *  The L_nnn() macros below do not return a value, but because the
+ *  conditional operator requires one for the false condition, we
+ *  specify a void expression.
+ * 
+ */ + +#ifdef NO_CONSOLE_IO + + #define PROCNAME(name) + #define ERROR_INT(a, b, c) ((l_int32)(c)) + #define ERROR_FLOAT(a, b, c) ((l_float32)(c)) + #define ERROR_PTR(a, b, c) ((void *)(c)) + #define L_ERROR(a, ...) + #define L_WARNING(a, ...) + #define L_INFO(a, ...) + +#else + + #define PROCNAME(name) static const char procName[] = name + #define IF_SEV(l, t, f) \ + ((l) >= MINIMUM_SEVERITY && (l) >= LeptMsgSeverity ? (t) : (f)) + + #define ERROR_INT(a, b, c) \ + IF_SEV(L_SEVERITY_ERROR, returnErrorInt((a), (b), (c)), (l_int32)(c)) + #define ERROR_FLOAT(a, b, c) \ + IF_SEV(L_SEVERITY_ERROR, returnErrorFloat((a), (b), (c)), (l_float32)(c)) + #define ERROR_PTR(a, b, c) \ + IF_SEV(L_SEVERITY_ERROR, returnErrorPtr((a), (b), (c)), (void *)(c)) + + #define L_ERROR(a, ...) \ + IF_SEV(L_SEVERITY_ERROR, \ + (void)fprintf(stderr, "Error in %s: " a, __VA_ARGS__), \ + (void)0) + #define L_WARNING(a, ...) \ + IF_SEV(L_SEVERITY_WARNING, \ + (void)fprintf(stderr, "Warning in %s: " a, __VA_ARGS__), \ + (void)0) + #define L_INFO(a, ...) \ + IF_SEV(L_SEVERITY_INFO, \ + (void)fprintf(stderr, "Info in %s: " a, __VA_ARGS__), \ + (void)0) + +#if 0 /* Alternative method for controlling L_* message output */ + #define L_ERROR(a, ...) \ + { if (L_SEVERITY_ERROR >= MINIMUM_SEVERITY && \ + L_SEVERITY_ERROR >= LeptMsgSeverity) \ + fprintf(stderr, "Error in %s: " a, __VA_ARGS__) \ + } + #define L_WARNING(a, ...) \ + { if (L_SEVERITY_WARNING >= MINIMUM_SEVERITY && \ + L_SEVERITY_WARNING >= LeptMsgSeverity) \ + fprintf(stderr, "Warning in %s: " a, __VA_ARGS__) \ + } + #define L_INFO(a, ...) \ + { if (L_SEVERITY_INFO >= MINIMUM_SEVERITY && \ + L_SEVERITY_INFO >= LeptMsgSeverity) \ + fprintf(stderr, "Info in %s: " a, __VA_ARGS__) \ + } +#endif + +#endif /* NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------------* + * snprintf() renamed in MSVC (pre-VS2015) * + *------------------------------------------------------------------------*/ +#if defined _MSC_VER && _MSC_VER < 1900 +#define snprintf(buf, size, ...) _snprintf_s(buf, size, _TRUNCATE, __VA_ARGS__) +#endif + + +#endif /* LEPTONICA_ENVIRON_H */ diff --git a/3rdparty/hgOCR/leptonica/fhmtauto.c b/3rdparty/hgOCR/leptonica/fhmtauto.c new file mode 100644 index 00000000..f8b0d433 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fhmtauto.c @@ -0,0 +1,817 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file fhmtauto.c + *
+ *
+ *    Main function calls:
+ *       l_int32             fhmtautogen()
+ *       l_int32             fhmtautogen1()
+ *       l_int32             fhmtautogen2()
+ *
+ *    Static helpers:
+ *       static SARRAY      *sarrayMakeWplsCode()
+ *       static SARRAY      *sarrayMakeInnerLoopDWACode()
+ *       static char        *makeBarrelshiftString()
+ *
+ *    This automatically generates dwa code for the hit-miss transform.
+ *    Here's a road map for how it all works.
+ *
+ *    (1) You generate an array (a SELA) of hit-miss transform SELs.
+ *        This can be done in several ways, including
+ *           (a) calling the function selaAddHitMiss() for
+ *               pre-compiled SELs
+ *           (b) generating the SELA in code in line
+ *           (c) reading in a SELA from file, using selaRead()
+ *               or various other formats.
+ *
+ *    (2) You call fhmtautogen1() and fhmtautogen2() on this SELA.
+ *        This uses the text files hmttemplate1.txt and
+ *        hmttemplate2.txt for building up the source code.  See the file
+ *        prog/fhmtautogen.c for an example of how this is done.
+ *        The output is written to files named fhmtgen.*.c
+ *        and fhmtgenlow.*.c, where "*" is an integer that you
+ *        input to this function.  That integer labels both
+ *        the output files, as well as all the functions that
+ *        are generated.  That way, using different integers,
+ *        you can invoke fhmtautogen() any number of times
+ *        to get functions that all have different names so that
+ *        they can be linked into one program.
+ *
+ *    (3) You copy the generated source code back to your src
+ *        directory for compilation.  Put their names in the
+ *        Makefile, regnerate the prototypes, and recompile
+ *        the libraries.  Look at the Makefile to see how I've
+ *        included fhmtgen.1.c and fhmtgenlow.1.c.  These files
+ *        provide the high-level interfaces for the hmt, and
+ *        the low-level interfaces to do the actual work.
+ *
+ *    (4) In an application, you now use this interface.  Again
+ *        for the example files generated, using integer "1":
+ *
+ *           PIX   *pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname);
+ *
+ *              or
+ *
+ *           PIX   *pixFHMTGen_1(PIX *pixd, PIX *pixs, const char *selname);
+ *
+ *        where the selname is one of the set that were defined
+ *        as the name field of sels.  This set is listed at the
+ *        beginning of the file fhmtgen.1.c.
+ *        As an example, see the file prog/fmtauto_reg.c, which
+ *        verifies the correctness of the implementation by
+ *        comparing the dwa result with that of full-image
+ *        rasterops.
+ * 
+ */ + +#include +#include "allheaders.h" + +#define OUTROOT "fhmtgen" +#define TEMPLATE1 "hmttemplate1.txt" +#define TEMPLATE2 "hmttemplate2.txt" + +#define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" + +//static const l_int32 L_BUF_SIZE = 512; +#define L_BUF_SIZE 512 + +static char * makeBarrelshiftString(l_int32 delx, l_int32 dely, l_int32 type); +static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 nhits, l_int32 nmisses); +static SARRAY * sarrayMakeWplsCode(SEL *sel); + +static char wpldecls[][60] = { + "l_int32 wpls2;", + "l_int32 wpls2, wpls3;", + "l_int32 wpls2, wpls3, wpls4;", + "l_int32 wpls5;", + "l_int32 wpls5, wpls6;", + "l_int32 wpls5, wpls6, wpls7;", + "l_int32 wpls5, wpls6, wpls7, wpls8;", + "l_int32 wpls9;", + "l_int32 wpls9, wpls10;", + "l_int32 wpls9, wpls10, wpls11;", + "l_int32 wpls9, wpls10, wpls11, wpls12;", + "l_int32 wpls13;", + "l_int32 wpls13, wpls14;", + "l_int32 wpls13, wpls14, wpls15;", + "l_int32 wpls13, wpls14, wpls15, wpls16;", + "l_int32 wpls17;", + "l_int32 wpls17, wpls18;", + "l_int32 wpls17, wpls18, wpls19;", + "l_int32 wpls17, wpls18, wpls19, wpls20;", + "l_int32 wpls21;", + "l_int32 wpls21, wpls22;", + "l_int32 wpls21, wpls22, wpls23;", + "l_int32 wpls21, wpls22, wpls23, wpls24;", + "l_int32 wpls25;", + "l_int32 wpls25, wpls26;", + "l_int32 wpls25, wpls26, wpls27;", + "l_int32 wpls25, wpls26, wpls27, wpls28;", + "l_int32 wpls29;", + "l_int32 wpls29, wpls30;", + "l_int32 wpls29, wpls30, wpls31;"}; + +static char wpldefs[][24] = { + " wpls2 = 2 * wpls;", + " wpls3 = 3 * wpls;", + " wpls4 = 4 * wpls;", + " wpls5 = 5 * wpls;", + " wpls6 = 6 * wpls;", + " wpls7 = 7 * wpls;", + " wpls8 = 8 * wpls;", + " wpls9 = 9 * wpls;", + " wpls10 = 10 * wpls;", + " wpls11 = 11 * wpls;", + " wpls12 = 12 * wpls;", + " wpls13 = 13 * wpls;", + " wpls14 = 14 * wpls;", + " wpls15 = 15 * wpls;", + " wpls16 = 16 * wpls;", + " wpls17 = 17 * wpls;", + " wpls18 = 18 * wpls;", + " wpls19 = 19 * wpls;", + " wpls20 = 20 * wpls;", + " wpls21 = 21 * wpls;", + " wpls22 = 22 * wpls;", + " wpls23 = 23 * wpls;", + " wpls24 = 24 * wpls;", + " wpls25 = 25 * wpls;", + " wpls26 = 26 * wpls;", + " wpls27 = 27 * wpls;", + " wpls28 = 28 * wpls;", + " wpls29 = 29 * wpls;", + " wpls30 = 30 * wpls;", + " wpls31 = 31 * wpls;"}; + +static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", + "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", + "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", + "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", + "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", + "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", + "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", + "+ wpls29", "+ wpls30", "+ wpls31"}; + +static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", + "- wpls5", "- wpls6", "- wpls7", "- wpls8", + "- wpls9", "- wpls10", "- wpls11", "- wpls12", + "- wpls13", "- wpls14", "- wpls15", "- wpls16", + "- wpls17", "- wpls18", "- wpls19", "- wpls20", + "- wpls21", "- wpls22", "- wpls23", "- wpls24", + "- wpls25", "- wpls26", "- wpls27", "- wpls28", + "- wpls29", "- wpls30", "- wpls31"}; + + +/*! + * \brief fhmtautogen() + * + * \param[in] sela + * \param[in] fileindex + * \param[in] filename [optional]; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This function generates all the code for implementing
+ *          dwa morphological operations using all the sels in the sela.
+ *      (2) See fhmtautogen1() and fhmtautogen2() for details.
+ * 
+ */ +l_ok +fhmtautogen(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +l_int32 ret1, ret2; + + PROCNAME("fhmtautogen"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + ret1 = fhmtautogen1(sela, fileindex, filename); + ret2 = fhmtautogen2(sela, fileindex, filename); + if (ret1 || ret2) + return ERROR_INT("code generation problem", procName, 1); + return 0; +} + + +/*! + * \brief fhmtautogen1() + * + * \param[in] sela array + * \param[in] fileindex + * \param[in] filename [optional]; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This function uses hmttemplate1.txt to create a
+ *          top-level file that contains two functions that carry
+ *          out the hit-miss transform for any of the sels in
+ *          the input sela.
+ *      (2) The fileindex parameter is inserted into the output
+ *          filename, as described below.
+ *      (3) If filename == NULL, the output file is fhmtgen.[n].c,
+ *          where [n] is equal to the 'fileindex' parameter.
+ *      (4) If filename != NULL, the output file is [filename].[n].c.
+ *      (5) Each sel must have at least one hit.  A sel with only misses
+ *          generates code that will abort the operation if it is called.
+ * 
+ */ +l_ok +fhmtautogen1(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +char *filestr; +char *str_proto1, *str_proto2, *str_proto3; +char *str_doc1, *str_doc2, *str_doc3, *str_doc4; +char *str_def1, *str_def2, *str_proc1, *str_proc2; +char *str_dwa1, *str_low_dt, *str_low_ds; +char bigbuf[L_BUF_SIZE]; +l_int32 i, nsels, nbytes, actstart, end, newstart; +size_t size; +SARRAY *sa1, *sa2, *sa3; + + PROCNAME("fhmtautogen1"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + if (fileindex < 0) + fileindex = 0; + if ((nsels = selaGetCount(sela)) == 0) + return ERROR_INT("no sels in sela", procName, 1); + + /* Make array of textlines from from hmttemplate1.txt */ + if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) + return ERROR_INT("filestr not made", procName, 1); + sa2 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + if (!sa2) + return ERROR_INT("sa2 not made", procName, 1); + + /* Make array of sel names */ + sa1 = selaGetSelnames(sela); + + /* Make strings containing function call names */ + sprintf(bigbuf, "PIX *pixHMTDwa_%d(PIX *pixd, PIX *pixs, " + "const char *selname);", fileindex); + str_proto1 = stringNew(bigbuf); + sprintf(bigbuf, "PIX *pixFHMTGen_%d(PIX *pixd, PIX *pixs, " + "const char *selname);", fileindex); + str_proto2 = stringNew(bigbuf); + sprintf(bigbuf, "l_int32 fhmtgen_low_%d(l_uint32 *datad, l_int32 w,\n" + " l_int32 h, l_int32 wpld,\n" + " l_uint32 *datas, l_int32 wpls,\n" + " l_int32 index);", fileindex); + str_proto3 = stringNew(bigbuf); + sprintf(bigbuf, " * PIX *pixHMTDwa_%d()", fileindex); + str_doc1 = stringNew(bigbuf); + sprintf(bigbuf, " * PIX *pixFHMTGen_%d()", fileindex); + str_doc2 = stringNew(bigbuf); + sprintf(bigbuf, " * \\brief pixHMTDwa_%d()", fileindex); + str_doc3 = stringNew(bigbuf); + sprintf(bigbuf, " * \\brief pixFHMTGen_%d()", fileindex); + str_doc4 = stringNew(bigbuf); + sprintf(bigbuf, "pixHMTDwa_%d(PIX *pixd,", fileindex); + str_def1 = stringNew(bigbuf); + sprintf(bigbuf, "pixFHMTGen_%d(PIX *pixd,", fileindex); + str_def2 = stringNew(bigbuf); + sprintf(bigbuf, " PROCNAME(\"pixHMTDwa_%d\");", fileindex); + str_proc1 = stringNew(bigbuf); + sprintf(bigbuf, " PROCNAME(\"pixFHMTGen_%d\");", fileindex); + str_proc2 = stringNew(bigbuf); + sprintf(bigbuf, " pixt2 = pixFHMTGen_%d(NULL, pixt1, selname);", + fileindex); + str_dwa1 = stringNew(bigbuf); + sprintf(bigbuf, + " fhmtgen_low_%d(datad, w, h, wpld, datat, wpls, index);", + fileindex); + str_low_dt = stringNew(bigbuf); + sprintf(bigbuf, + " fhmtgen_low_%d(datad, w, h, wpld, datas, wpls, index);", + fileindex); + str_low_ds = stringNew(bigbuf); + + /* Make the output sa */ + sa3 = sarrayCreate(0); + + /* Copyright notice and info header */ + sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Insert function names as documentation */ + sarrayAddString(sa3, str_doc1, L_INSERT); + sarrayAddString(sa3, str_doc2, L_INSERT); + + /* Add '#include's */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Insert function prototypes */ + sarrayAddString(sa3, str_proto1, L_INSERT); + sarrayAddString(sa3, str_proto2, L_INSERT); + sarrayAddString(sa3, str_proto3, L_INSERT); + + /* Add static globals */ + sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); + sarrayAddString(sa3, bigbuf, L_COPY); + sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); + sarrayAddString(sa3, bigbuf, L_COPY); + for (i = 0; i < nsels - 1; i++) { + sprintf(bigbuf, " \"%s\",", + sarrayGetString(sa1, i, L_NOCOPY)); + sarrayAddString(sa3, bigbuf, L_COPY); + } + sprintf(bigbuf, " \"%s\"};", + sarrayGetString(sa1, i, L_NOCOPY)); + sarrayAddString(sa3, bigbuf, L_COPY); + + /* Start pixHMTDwa_*() function description */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_doc3, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Finish pixHMTDwa_*() function definition */ + sarrayAddString(sa3, str_def1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_proc1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_dwa1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Start pixFHMTGen_*() function description */ + sarrayAddString(sa3, str_doc4, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Finish pixFHMTGen_*() function description */ + sarrayAddString(sa3, str_def2, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_proc2, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_dt, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_ds, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + filestr = sarrayToString(sa3, 1); + nbytes = strlen(filestr); + if (filename) + snprintf(bigbuf, L_BUF_SIZE, "%s.%d.c", filename, fileindex); + else + sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); + l_binaryWrite(bigbuf, "w", filestr, nbytes); + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + LEPT_FREE(filestr); + return 0; +} + + +/*! + * \brief fhmtautogen2() + * + * \param[in] sela array + * \param[in] fileindex + * \param[in] filename [optional]; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This function uses hmttemplate2.txt to create a
+ *          low-level file that contains the low-level functions for
+ *          implementing the hit-miss transform for every sel
+ *          in the input sela.
+ *      (2) The fileindex parameter is inserted into the output
+ *          filename, as described below.
+ *      (3) If filename == NULL, the output file is fhmtgenlow.[n].c,
+ *          where [n] is equal to the %fileindex parameter.
+ *      (4) If filename != NULL, the output file is [filename]low.[n].c.
+ * 
+ */ +l_ok +fhmtautogen2(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +char *filestr, *fname, *linestr; +char *str_doc1, *str_doc2, *str_doc3, *str_def1; +char bigbuf[L_BUF_SIZE]; +char breakstring[] = " break;"; +char staticstring[] = "static void"; +l_int32 i, k, l, nsels, nbytes, nhits, nmisses; +l_int32 actstart, end, newstart; +l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; +size_t size; +SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; +SEL *sel; + + PROCNAME("fhmtautogen2"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + if (fileindex < 0) + fileindex = 0; + if ((nsels = selaGetCount(sela)) == 0) + return ERROR_INT("no sels in sela", procName, 1); + + /* Make the array of textlines from hmttemplate2.txt */ + if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) + return ERROR_INT("filestr not made", procName, 1); + sa1 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + if (!sa1) + return ERROR_INT("sa1 not made", procName, 1); + + /* Make the array of static function names */ + if ((sa2 = sarrayCreate(nsels)) == NULL) { + sarrayDestroy(&sa1); + return ERROR_INT("sa2 not made", procName, 1); + } + for (i = 0; i < nsels; i++) { + sprintf(bigbuf, "fhmt_%d_%d", fileindex, i); + sarrayAddString(sa2, bigbuf, L_COPY); + } + + /* Make the static prototype strings */ + sa3 = sarrayCreate(2 * nsels); /* should be ok */ + for (i = 0; i < nsels; i++) { + fname = sarrayGetString(sa2, i, L_NOCOPY); + sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); + sarrayAddString(sa3, bigbuf, L_COPY); + } + + /* Make strings containing function names */ + sprintf(bigbuf, " * l_int32 fhmtgen_low_%d()", + fileindex); + str_doc1 = stringNew(bigbuf); + sprintf(bigbuf, " * void fhmt_%d_*()", fileindex); + str_doc2 = stringNew(bigbuf); + + /* Output to this sa */ + sa4 = sarrayCreate(0); + + /* Copyright notice and info header */ + sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Insert function names as documentation */ + sarrayAddString(sa4, str_doc1, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_doc2, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Insert static protos */ + for (i = 0; i < nsels; i++) { + if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) { + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + return ERROR_INT("linestr not retrieved", procName, 1); + } + sarrayAddString(sa4, linestr, L_INSERT); + } + + /* Make more strings containing function names */ + sprintf(bigbuf, " * fhmtgen_low_%d()", fileindex); + str_doc3 = stringNew(bigbuf); + sprintf(bigbuf, "fhmtgen_low_%d(l_uint32 *datad,", fileindex); + str_def1 = stringNew(bigbuf); + + /* Insert function header */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_doc3, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_def1, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Generate and insert the dispatcher code */ + for (i = 0; i < nsels; i++) { + sprintf(bigbuf, " case %d:", i); + sarrayAddString(sa4, bigbuf, L_COPY); + sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", + sarrayGetString(sa2, i, L_NOCOPY)); + sarrayAddString(sa4, bigbuf, L_COPY); + sarrayAddString(sa4, breakstring, L_COPY); + } + + /* Finish the dispatcher and introduce the low-level code */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Get the range for the args common to all functions */ + sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); + + /* Get the range for the loop code common to all functions */ + sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); + + /* Get the range for the ending code common to all functions */ + sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); + + /* Do all the static functions */ + for (i = 0; i < nsels; i++) { + /* Generate the function header and add the common args */ + sarrayAddString(sa4, staticstring, L_COPY); + fname = sarrayGetString(sa2, i, L_NOCOPY); + sprintf(bigbuf, "%s(l_uint32 *datad,", fname); + sarrayAddString(sa4, bigbuf, L_COPY); + sarrayAppendRange(sa4, sa1, argstart, argend); + + /* Declare and define wplsN args, as necessary */ + if ((sel = selaGetSel(sela, i)) == NULL) { + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + return ERROR_INT("sel not returned", procName, 1); + } + sa5 = sarrayMakeWplsCode(sel); + sarrayJoin(sa4, sa5); + sarrayDestroy(&sa5); + + /* Make sure sel has at least one hit */ + nhits = 0; + nmisses = 0; + for (k = 0; k < sel->sy; k++) { + for (l = 0; l < sel->sx; l++) { + if (sel->data[k][l] == 1) + nhits++; + else if (sel->data[k][l] == 2) + nmisses++; + } + } + if (nhits == 0) { + linestr = stringNew(" fprintf(stderr, \"Error in HMT: no hits in sel!\\n\");\n}\n\n"); + sarrayAddString(sa4, linestr, L_INSERT); + continue; + } + + /* Add the function loop code */ + sarrayAppendRange(sa4, sa1, loopstart, loopend); + + /* Insert barrel-op code for *dptr */ + if ((sa6 = sarrayMakeInnerLoopDWACode(sel, nhits, nmisses)) == NULL) { + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + return ERROR_INT("sa6 not made", procName, 1); + } + sarrayJoin(sa4, sa6); + sarrayDestroy(&sa6); + + /* Finish the function code */ + sarrayAppendRange(sa4, sa1, finalstart, finalend); + } + + /* Output to file */ + filestr = sarrayToString(sa4, 1); + nbytes = strlen(filestr); + if (filename) + snprintf(bigbuf, L_BUF_SIZE, "%slow.%d.c", filename, fileindex); + else + sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); + l_binaryWrite(bigbuf, "w", filestr, nbytes); + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + LEPT_FREE(filestr); + return 0; +} + + + +/*--------------------------------------------------------------------------* + * Helper code for sel * + *--------------------------------------------------------------------------*/ +/*! + * \brief sarrayMakeWplsCode() + */ +static SARRAY * +sarrayMakeWplsCode(SEL *sel) +{ +char emptystring[] = ""; +l_int32 i, j, ymax, dely; +SARRAY *sa; + + PROCNAME("sarrayMakeWplsCode"); + + if (!sel) + return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); + + ymax = 0; + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + if (sel->data[i][j] == 1 || sel->data[i][j] == 2) { + dely = L_ABS(i - sel->cy); + ymax = L_MAX(ymax, dely); + } + } + } + if (ymax > 31) { + L_WARNING("ymax > 31; truncating to 31\n", procName); + ymax = 31; + } + + sa = sarrayCreate(0); + + /* Declarations */ + if (ymax > 4) + sarrayAddString(sa, wpldecls[2], L_COPY); + if (ymax > 8) + sarrayAddString(sa, wpldecls[6], L_COPY); + if (ymax > 12) + sarrayAddString(sa, wpldecls[10], L_COPY); + if (ymax > 16) + sarrayAddString(sa, wpldecls[14], L_COPY); + if (ymax > 20) + sarrayAddString(sa, wpldecls[18], L_COPY); + if (ymax > 24) + sarrayAddString(sa, wpldecls[22], L_COPY); + if (ymax > 28) + sarrayAddString(sa, wpldecls[26], L_COPY); + if (ymax > 1) + sarrayAddString(sa, wpldecls[ymax - 2], L_COPY); + + sarrayAddString(sa, emptystring, L_COPY); + + /* Definitions */ + for (i = 2; i <= ymax; i++) + sarrayAddString(sa, wpldefs[i - 2], L_COPY); + + return sa; +} + + +/*! + * \brief sarrayMakeInnerLoopDWACode() + */ +static SARRAY * +sarrayMakeInnerLoopDWACode(SEL *sel, + l_int32 nhits, + l_int32 nmisses) +{ +char *string; +char land[] = "&"; +char bigbuf[L_BUF_SIZE]; +l_int32 i, j, ntot, nfound, type, delx, dely; +SARRAY *sa; + + PROCNAME("sarrayMakeInnerLoopDWACode"); + + if (!sel) + return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); + + sa = sarrayCreate(0); + ntot = nhits + nmisses; + nfound = 0; + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + type = sel->data[i][j]; + if (type == SEL_HIT || type == SEL_MISS) { + nfound++; + dely = i - sel->cy; + delx = j - sel->cx; + if ((string = makeBarrelshiftString(delx, dely, type)) + == NULL) { + L_WARNING("barrel shift string not made\n", procName); + continue; + } + if (ntot == 1) /* just one item */ + sprintf(bigbuf, " *dptr = %s;", string); + else if (nfound == 1) + sprintf(bigbuf, " *dptr = %s %s", string, land); + else if (nfound < ntot) + sprintf(bigbuf, " %s %s", string, land); + else /* nfound == ntot */ + sprintf(bigbuf, " %s;", string); + sarrayAddString(sa, bigbuf, L_COPY); + LEPT_FREE(string); + } + } + } + + return sa; +} + + +/*! + * \brief makeBarrelshiftString() + */ +static char * +makeBarrelshiftString(l_int32 delx, /* j - cx */ + l_int32 dely, /* i - cy */ + l_int32 type) /* SEL_HIT or SEL_MISS */ +{ +l_int32 absx, absy; +char bigbuf[L_BUF_SIZE]; + + PROCNAME("makeBarrelshiftString"); + + if (delx < -31 || delx > 31) + return (char *)ERROR_PTR("delx out of bounds", procName, NULL); + if (dely < -31 || dely > 31) + return (char *)ERROR_PTR("dely out of bounds", procName, NULL); + absx = L_ABS(delx); + absy = L_ABS(dely); + + if (type == SEL_HIT) { + if ((delx == 0) && (dely == 0)) + sprintf(bigbuf, "(*sptr)"); + else if ((delx == 0) && (dely < 0)) + sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); + else if ((delx == 0) && (dely > 0)) + sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); + else if ((delx < 0) && (dely == 0)) + sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", + absx, 32 - absx); + else if ((delx > 0) && (dely == 0)) + sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", + absx, 32 - absx); + else if ((delx < 0) && (dely < 0)) + sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx > 0) && (dely < 0)) + sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx < 0) && (dely > 0)) + sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + else /* ((delx > 0) && (dely > 0)) */ + sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + } else { /* type == SEL_MISS */ + if ((delx == 0) && (dely == 0)) + sprintf(bigbuf, "(~*sptr)"); + else if ((delx == 0) && (dely < 0)) + sprintf(bigbuf, "(~*(sptr %s))", wplstrm[absy - 1]); + else if ((delx == 0) && (dely > 0)) + sprintf(bigbuf, "(~*(sptr %s))", wplstrp[absy - 1]); + else if ((delx < 0) && (dely == 0)) + sprintf(bigbuf, "((~*(sptr) >> %d) | (~*(sptr - 1) << %d))", + absx, 32 - absx); + else if ((delx > 0) && (dely == 0)) + sprintf(bigbuf, "((~*(sptr) << %d) | (~*(sptr + 1) >> %d))", + absx, 32 - absx); + else if ((delx < 0) && (dely < 0)) + sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx > 0) && (dely < 0)) + sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx < 0) && (dely > 0)) + sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + else /* ((delx > 0) && (dely > 0)) */ + sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + } + + return stringNew(bigbuf); +} diff --git a/3rdparty/hgOCR/leptonica/fhmtgen.1.c b/3rdparty/hgOCR/leptonica/fhmtgen.1.c new file mode 100644 index 00000000..8a1fcab8 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fhmtgen.1.c @@ -0,0 +1,177 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Top-level fast hit-miss transform with auto-generated sels + * + * PIX *pixHMTDwa_1() + * PIX *pixFHMTGen_1() + */ + +#include +#include "allheaders.h" + +PIX *pixHMTDwa_1(PIX *pixd, PIX *pixs, const char *selname); +PIX *pixFHMTGen_1(PIX *pixd, PIX *pixs, const char *selname); +l_int32 fhmtgen_low_1(l_uint32 *datad, l_int32 w, + l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, + l_int32 index); + +static l_int32 NUM_SELS_GENERATED = 10; +static char SEL_NAMES[][80] = { + "sel_3hm", + "sel_3de", + "sel_3ue", + "sel_3re", + "sel_3le", + "sel_sl1", + "sel_ulc", + "sel_urc", + "sel_llc", + "sel_lrc"}; + +/*! + * \brief pixHMTDwa_1() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This simply adds a 32 pixel border, calls the appropriate
+ *          pixFHMTGen_*(), and removes the border.
+ *          See notes below for that function.
+ * 
+ */ +PIX * +pixHMTDwa_1(PIX *pixd, + PIX *pixs, + const char *selname) +{ +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixHMTDwa_1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + pixt1 = pixAddBorder(pixs, 32, 0); + pixt2 = pixFHMTGen_1(NULL, pixt1, selname); + pixt3 = pixRemoveBorder(pixt2, 32); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixCopy(pixd, pixt3); + pixDestroy(&pixt3); + return pixd; +} + + +/*! + * \brief pixFHMTGen_1() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This is a dwa implementation of the hit-miss transform
+ *          on pixs by the sel.
+ *      (2) The sel must be limited in size to not more than 31 pixels
+ *          about the origin.  It must have at least one hit, and it
+ *          can have any number of misses.
+ *      (3) This handles all required setting of the border pixels
+ *          before erosion and dilation.
+ * 
+ */ +PIX * +pixFHMTGen_1(PIX *pixd, + PIX *pixs, + const char *selname) +{ +l_int32 i, index, found, w, h, wpls, wpld; +l_uint32 *datad, *datas, *datat; +PIX *pixt; + + PROCNAME("pixFHMTGen_1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + found = FALSE; + for (i = 0; i < NUM_SELS_GENERATED; i++) { + if (strcmp(selname, SEL_NAMES[i]) == 0) { + found = TRUE; + index = i; + break; + } + } + if (found == FALSE) + return (PIX *)ERROR_PTR("sel index not found", procName, pixd); + + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + else /* for in-place or pre-allocated */ + pixResizeImageData(pixd, pixs); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + /* The images must be surrounded with 32 additional border + * pixels, that we'll read from. We fabricate a "proper" + * image as the subimage within the border, having the + * following parameters: */ + w = pixGetWidth(pixs) - 64; + h = pixGetHeight(pixs) - 64; + datas = pixGetData(pixs) + 32 * wpls + 1; + datad = pixGetData(pixd) + 32 * wpld + 1; + + if (pixd == pixs) { /* need temp image if in-place */ + if ((pixt = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + 32 * wpls + 1; + fhmtgen_low_1(datad, w, h, wpld, datat, wpls, index); + pixDestroy(&pixt); + } + else { /* not in-place */ + fhmtgen_low_1(datad, w, h, wpld, datas, wpls, index); + } + + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/fhmtgenlow.1.c b/3rdparty/hgOCR/leptonica/fhmtgenlow.1.c new file mode 100644 index 00000000..b1c863cf --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fhmtgenlow.1.c @@ -0,0 +1,445 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Low-level fast hit-miss transform with auto-generated sels + * + * Dispatcher: + * l_int32 fhmtgen_low_1() + * + * Static Low-level: + * void fhmt_1_*() + */ + +#include "allheaders.h" + +static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); + + +/*---------------------------------------------------------------------* + * Fast hmt dispatcher * + *---------------------------------------------------------------------*/ +/*! + * fhmtgen_low_1() + * + * a dispatcher to appropriate low-level code + */ +l_int32 +fhmtgen_low_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 index) +{ + + switch (index) + { + case 0: + fhmt_1_0(datad, w, h, wpld, datas, wpls); + break; + case 1: + fhmt_1_1(datad, w, h, wpld, datas, wpls); + break; + case 2: + fhmt_1_2(datad, w, h, wpld, datas, wpls); + break; + case 3: + fhmt_1_3(datad, w, h, wpld, datas, wpls); + break; + case 4: + fhmt_1_4(datad, w, h, wpld, datas, wpls); + break; + case 5: + fhmt_1_5(datad, w, h, wpld, datas, wpls); + break; + case 6: + fhmt_1_6(datad, w, h, wpld, datas, wpls); + break; + case 7: + fhmt_1_7(datad, w, h, wpld, datas, wpls); + break; + case 8: + fhmt_1_8(datad, w, h, wpld, datas, wpls); + break; + case 9: + fhmt_1_9(datad, w, h, wpld, datas, wpls); + break; + } + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Low-level auto-generated static routines * + *--------------------------------------------------------------------------*/ +/* + * N.B. In all the low-level routines, the part of the image + * that is accessed has been clipped by 32 pixels on + * all four sides. This is done in the higher level + * code by redefining w and h smaller and by moving the + * start-of-image pointers up to the beginning of this + * interior rectangle. + */ +static void +fhmt_1_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (~*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (~*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fhmt_1_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (~*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fhmt_1_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (~*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)); + } + } +} + +static void +fhmt_1_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + (*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + (*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fhmt_1_4(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (*(sptr - wpls)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (*sptr) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (*(sptr + wpls)); + } + } +} + +static void +fhmt_1_5(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls6) << 1) | (~*(sptr - wpls6 + 1) >> 31)) & + ((*(sptr - wpls6) << 3) | (*(sptr - wpls6 + 1) >> 29)) & + (~*(sptr - wpls2)) & + ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & + ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & + ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & + ((~*(sptr + wpls6) >> 2) | (~*(sptr + wpls6 - 1) << 30)) & + (*(sptr + wpls6)); + } + } +} + +static void +fhmt_1_6(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (~*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((~*(sptr - wpls) << 2) | (~*(sptr - wpls + 1) >> 30)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & + ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & + ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & + (*(sptr + wpls2)) & + ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & + ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); + } + } +} + +static void +fhmt_1_7(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 2) | (~*(sptr - wpls - 1) << 30)) & + ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (~*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & + ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & + ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & + (*(sptr + wpls2)) & + ((~*(sptr + wpls2) << 1) | (~*(sptr + wpls2 + 1) >> 31)); + } + } +} + +static void +fhmt_1_8(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls2) >> 1) | (~*(sptr - wpls2 - 1) << 31)) & + (*(sptr - wpls2)) & + ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & + ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & + ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & + ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (~*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & + ((~*(sptr + wpls) << 2) | (~*(sptr + wpls + 1) >> 30)); + } + } +} + +static void +fhmt_1_9(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & + ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & + (*(sptr - wpls2)) & + ((~*(sptr - wpls2) << 1) | (~*(sptr - wpls2 + 1) >> 31)) & + ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((~*(sptr + wpls) >> 2) | (~*(sptr + wpls - 1) << 30)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (~*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); + } + } +} + diff --git a/3rdparty/hgOCR/leptonica/finditalic.c b/3rdparty/hgOCR/leptonica/finditalic.c new file mode 100644 index 00000000..1e0d48d5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/finditalic.c @@ -0,0 +1,239 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * \file finditalic.c + *
+ *
+ *      l_int32   pixItalicWords()
+ *
+ *    Locate italic words.  This is an example of the use of
+ *    hit-miss binary morphology with binary reconstruction
+ *    (filling from a seed into a mask).
+ *
+ *    To see how this works, run with prog/italic.png.
+ * 
+ */ + +#include "allheaders.h" + + /* --------------------------------------------------------------- * + * These hit-miss sels match the slanted edge of italic characters * + * --------------------------------------------------------------- */ +static const char *str_ital1 = " o x" + " " + " " + " " + " o x " + " " + " C " + " " + " o x " + " " + " " + " " + "o x "; + +static const char *str_ital2 = " o x" + " " + " " + " o x " + " C " + " " + " o x " + " " + " " + "o x "; + + /* ------------------------------------------------------------- * + * This sel removes noise that is not oriented as a slanted edge * + * ------------------------------------------------------------- */ +static const char *str_ital3 = " x" + "Cx" + "x " + "x "; + +/*! + * \brief pixItalicWords() + * + * \param[in] pixs 1 bpp + * \param[in] boxaw [optional] word bounding boxes; can be NULL + * \param[in] pixw [optional] word box mask; can be NULL + * \param[out] pboxa boxa of italic words + * \param[in] debugflag 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) You can input the bounding boxes for the words in one of
+ *          two forms: as bounding boxes (%boxaw) or as a word mask with
+ *          the word bounding boxes filled (%pixw).  For example,
+ *          to compute %pixw, you can use pixWordMaskByDilation().
+ *      (2) Alternatively, you can set both of these inputs to NULL,
+ *          in which case the word mask is generated here.  This is
+ *          done by dilating and closing the input image to connect
+ *          letters within a word, while leaving the words separated.
+ *          The parameters are chosen under the assumption that the
+ *          input is 10 to 12 pt text, scanned at about 300 ppi.
+ *      (3) sel_ital1 and sel_ital2 detect the right edges that are
+ *          nearly vertical, at approximately the angle of italic
+ *          strokes.  We use the right edge to avoid getting seeds
+ *          from lower-case 'y'.  The typical italic slant has a smaller
+ *          angle with the vertical than the 'W', so in most cases we
+ *          will not trigger on the slanted lines in the 'W'.
+ *      (4) Note that sel_ital2 is shorter than sel_ital1.  It is
+ *          more appropriate for a typical font scanned at 200 ppi.
+ * 
+ */ +l_ok +pixItalicWords(PIX *pixs, + BOXA *boxaw, + PIX *pixw, + BOXA **pboxa, + l_int32 debugflag) +{ +char opstring[32]; +l_int32 size; +BOXA *boxa; +PIX *pixsd, *pixm, *pixd; +SEL *sel_ital1, *sel_ital2, *sel_ital3; + + PROCNAME("pixItalicWords"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pboxa) + return ERROR_INT("&boxa not defined", procName, 1); + if (boxaw && pixw) + return ERROR_INT("both boxaw and pixw are defined", procName, 1); + + sel_ital1 = selCreateFromString(str_ital1, 13, 6, NULL); + sel_ital2 = selCreateFromString(str_ital2, 10, 6, NULL); + sel_ital3 = selCreateFromString(str_ital3, 4, 2, NULL); + + /* Make the italic seed: extract with HMT; remove noise. + * The noise removal close/open is important to exclude + * situations where a small slanted line accidentally + * matches sel_ital1. */ + pixsd = pixHMT(NULL, pixs, sel_ital1); + pixClose(pixsd, pixsd, sel_ital3); + pixOpen(pixsd, pixsd, sel_ital3); + + /* Make the word mask. Use input boxes or mask if given. */ + size = 0; /* init */ + if (boxaw) { + pixm = pixCreateTemplate(pixs); + pixMaskBoxa(pixm, pixm, boxaw, L_SET_PIXELS); + } else if (pixw) { + pixm = pixClone(pixw); + } else { + pixWordMaskByDilation(pixs, NULL, &size, NULL); + L_INFO("dilation size = %d\n", procName, size); + snprintf(opstring, sizeof(opstring), "d1.5 + c%d.1", size); + pixm = pixMorphSequence(pixs, opstring, 0); + } + + /* Binary reconstruction to fill in those word mask + * components for which there is at least one seed pixel. */ + pixd = pixSeedfillBinary(NULL, pixsd, pixm, 8); + boxa = pixConnComp(pixd, NULL, 8); + *pboxa = boxa; + + if (debugflag) { + /* Save results at at 2x reduction */ + lept_mkdir("lept/ital"); + l_int32 res, upper; + BOXA *boxat; + GPLOT *gplot; + NUMA *na; + PIXA *pad; + PIX *pix1, *pix2, *pix3; + pad = pixaCreate(0); + boxat = pixConnComp(pixm, NULL, 8); + boxaWriteDebug("/tmp/lept/ital/ital.ba", boxat); + pixSaveTiledOutline(pixs, pad, 0.5, 1, 20, 2, 32); /* orig */ + pixSaveTiledOutline(pixsd, pad, 0.5, 1, 20, 2, 0); /* seed */ + pix1 = pixConvertTo32(pixm); + pixRenderBoxaArb(pix1, boxat, 3, 255, 0, 0); + pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* mask + outline */ + pixDestroy(&pix1); + pixSaveTiledOutline(pixd, pad, 0.5, 1, 20, 2, 0); /* ital mask */ + pix1 = pixConvertTo32(pixs); + pixRenderBoxaArb(pix1, boxa, 3, 255, 0, 0); + pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* orig + outline */ + pixDestroy(&pix1); + pix1 = pixCreateTemplate(pixs); + pix2 = pixSetBlackOrWhiteBoxa(pix1, boxa, L_SET_BLACK); + pixCopy(pix1, pixs); + pix3 = pixDilateBrick(NULL, pixs, 3, 3); + pixCombineMasked(pix1, pix3, pix2); + pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* ital bolded */ + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pix2 = pixaDisplay(pad, 0, 0); + pixWriteDebug("/tmp/lept/ital/ital.png", pix2, IFF_PNG); + pixDestroy(&pix2); + + /* Assuming the image represents 6 inches of actual page width, + * the pixs resolution is approximately + * (width of pixs in pixels) / 6 + * and the images have been saved at half this resolution. */ + res = pixGetWidth(pixs) / 12; + L_INFO("resolution = %d\n", procName, res); + l_pdfSetDateAndVersion(0); + pixaConvertToPdf(pad, res, 1.0, L_FLATE_ENCODE, 75, "Italic Finder", + "/tmp/lept/ital/ital.pdf"); + l_pdfSetDateAndVersion(1); + pixaDestroy(&pad); + boxaDestroy(&boxat); + + /* Plot histogram of horizontal white run sizes. A small + * initial vertical dilation removes most runs that are neither + * inter-character nor inter-word. The larger first peak is + * from inter-character runs, and the smaller second peak is + * from inter-word runs. */ + pix1 = pixDilateBrick(NULL, pixs, 1, 15); + upper = L_MAX(30, 3 * size); + na = pixRunHistogramMorph(pix1, L_RUN_OFF, L_HORIZ, upper); + pixDestroy(&pix1); + gplot = gplotCreate("/tmp/lept/ital/runhisto", GPLOT_PNG, + "Histogram of horizontal runs of white pixels, vs length", + "run length", "number of runs"); + gplotAddPlot(gplot, NULL, na, GPLOT_LINES, "plot1"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + numaDestroy(&na); + } + + selDestroy(&sel_ital1); + selDestroy(&sel_ital2); + selDestroy(&sel_ital3); + pixDestroy(&pixsd); + pixDestroy(&pixm); + pixDestroy(&pixd); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/flipdetect.c b/3rdparty/hgOCR/leptonica/flipdetect.c new file mode 100644 index 00000000..34786c66 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/flipdetect.c @@ -0,0 +1,1130 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file flipdetect.c + *
+ *
+ *      High-level interface for detection and correction
+ *          l_int32      pixOrientCorrect()
+ *
+ *      Page orientation detection (pure rotation by 90 degree increments):
+ *          l_int32      pixOrientDetect()
+ *          l_int32      makeOrientDecision()
+ *          l_int32      pixUpDownDetect()
+ *          l_int32      pixUpDownDetectGeneral()
+ *          l_int32      pixOrientDetectDwa()
+ *          l_int32      pixUpDownDetectDwa()
+ *          l_int32      pixUpDownDetectGeneralDwa()
+ *
+ *      Page mirror detection (flip 180 degrees about line in plane of image):
+ *          l_int32      pixMirrorDetect()
+ *          l_int32      pixMirrorDetectDwa()
+ *
+ *      Static debug helper
+ *          void         pixDebugFlipDetect()
+ *
+ *  ===================================================================
+ *
+ *  Page transformation detection:
+ *
+ *  Once a page is deskewed, there are 8 possible states that it
+ *  can be in, shown symbolically below.  Suppose state 0 is correct.
+ *
+ *      0: correct     1          2          3
+ *      +------+   +------+   +------+   +------+
+ *      | **** |   | *    |   | **** |   |    * |
+ *      | *    |   | *    |   |    * |   |    * |
+ *      | *    |   | **** |   |    * |   | **** |
+ *      +------+   +------+   +------+   +------+
+ *
+ *         4          5          6          7
+ *      +-----+    +-----+    +-----+    +-----+
+ *      | *** |    |   * |    | *** |    | *   |
+ *      |   * |    |   * |    | *   |    | *   |
+ *      |   * |    |   * |    | *   |    | *   |
+ *      |   * |    | *** |    | *   |    | *** |
+ *      +-----+    +-----+    +-----+    +-----+
+ *
+ *  Each of the other seven can be derived from state 0 by applying some
+ *  combination of a 90 degree clockwise rotation, a flip about
+ *  a horizontal line, and a flip about a vertical line,
+ *  all abbreviated as:
+ *      R = Rotation (about a line perpendicular to the image)
+ *      H = Horizontal flip (about a vertical line in the plane of the image)
+ *      V = Vertical flip (about a horizontal line in the plane of the image)
+ *
+ *  We get these transformations:
+ *      RHV
+ *      000  -> 0
+ *      001  -> 1
+ *      010  -> 2
+ *      011  -> 3
+ *      100  -> 4
+ *      101  -> 5
+ *      110  -> 6
+ *      111  -> 7
+ *
+ *  Note that in four of these, the sum of H and V is 1 (odd).
+ *  For these four, we have a change in parity (handedness) of
+ *  the image, and the transformation cannot be performed by
+ *  rotation about a vertical line out of the page.   Under
+ *  rotation R, the set of 8 transformations decomposes into
+ *  two subgroups linking {0, 3, 4, 7} and {1, 2, 5, 6} independently.
+ *
+ *  pixOrientDetect*() tests for a pure rotation (0, 90, 180, 270 degrees).
+ *  It doesn't change parity.
+ *
+ *  pixMirrorDetect*() tests for a horizontal flip about the vertical axis.
+ *  It changes parity.
+ *
+ *  The landscape/portrait rotation can be detected in two ways:
+ *
+ *    (1) Compute the deskew confidence for an image segment,
+ *        both as is and rotated 90 degrees  (see skew.c).
+ *
+ *    (2) Compute the ascender/descender signal for the image,
+ *        both as is and rotated 90 degrees  (implemented here).
+ *
+ *  The ascender/descender signal is useful for determining text
+ *  orientation in Roman alphabets because the incidence of letters
+ *  with straight-line ascenders (b, d, h, k, l, 't') outnumber
+ *  those with descenders ('g', p, q).  The letters 't' and 'g'
+ *  will respond variably to the filter, depending on the type face.
+ *
+ *  What about the mirror image situations?  These aren't common
+ *  unless you're dealing with film, for example.
+ *  But you can reliably test if the image has undergone a
+ *  parity-changing flip once about some axis in the plane
+ *  of the image, using pixMirrorDetect*().  This works ostensibly by
+ *  counting the number of characters with ascenders that
+ *  stick out to the left and right of the ascender.  Characters
+ *  that are not mirror flipped are more likely to extend to the
+ *  right (b, h, k) than to the left (d).  Of course, that is for
+ *  text that is rightside-up.  So before you apply the mirror
+ *  test, it is necessary to insure that the text has the ascenders
+ *  going up, and not down or to the left or right.  But here's
+ *  what *really* happens.  It turns out that the pre-filtering before
+ *  the hit-miss transform (HMT) is crucial, and surprisingly, when
+ *  the pre-filtering is chosen to generate a large signal, the majority
+ *  of the signal comes from open regions of common lower-case
+ *  letters such as 'e', 'c' and 'f'.
+ *
+ *  All operations are given in two implementations whose results are
+ *  identical: rasterop morphology and dwa morphology.  The dwa
+ *  implementations are between 2x and 3x faster.
+ *
+ *  The set of operations you actually use depends on your prior knowledge:
+ *
+ *  (1) If the page is known to be either rightside-up or upside-down, use
+ *      either pixOrientDetect*() with pleftconf = NULL, or
+ *      pixUpDownDetect*().   [The '*' refers to either the rasterop
+ *      or dwa versions.]
+ *
+ *  (2) If any of the four orientations are possible, use pixOrientDetect*().
+ *
+ *  (3) If the text is horizontal and rightside-up, the only remaining
+ *      degree of freedom is a left-right mirror flip: use
+ *      pixMirrorDetect*().
+ *
+ *  (4) If you have a relatively large amount of numbers on the page,
+ *      us the slower pixUpDownDetectGeneral().
+ *
+ *  We summarize the full orientation and mirror flip detection process:
+ *
+ *  (1) First determine which of the four 90 degree rotations
+ *      causes the text to be rightside-up.  This can be done
+ *      with either skew confidence or the pixOrientDetect*()
+ *      signals.  For the latter, see the table for pixOrientDetect().
+ *
+ *  (2) Then, with ascenders pointing up, apply pixMirrorDetect*().
+ *      In the normal situation the confidence confidence will be
+ *      large and positive.  However, if mirror flipped, the
+ *      confidence will be large and negative.
+ *
+ *  A high-level interface, pixOrientCorrect() combines the detection
+ *  of the orientation with the rotation decision and the rotation itself.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Sels for pixOrientDetect() and pixMirrorDetect() */ +static const char *textsel1 = "x oo " + "x oOo " + "x o " + "x " + "xxxxxx"; + +static const char *textsel2 = " oo x" + " oOo x" + " o x" + " x" + "xxxxxx"; + +static const char *textsel3 = "xxxxxx" + "x " + "x o " + "x oOo " + "x oo "; + +static const char *textsel4 = "xxxxxx" + " x" + " o x" + " oOo x" + " oo x"; + + /* Parameters for determining orientation */ +static const l_int32 DefaultMinUpDownCount = 70; +static const l_float32 DefaultMinUpDownConf = 8.0; +static const l_float32 DefaultMinUpDownRatio = 2.5; + + /* Parameters for determining mirror flip */ +static const l_int32 DefaultMinMirrorFlipCount = 100; +static const l_float32 DefaultMinMirrorFlipConf = 5.0; + + /* Static debug function */ +static void pixDebugFlipDetect(const char *filename, PIX *pixs, + PIX *pixhm, l_int32 enable); + + +/*----------------------------------------------------------------* + * High-level interface for detection and correction * + *----------------------------------------------------------------*/ +/*! + * \brief pixOrientCorrect() + * + * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi + * \param[in] minupconf minimum value for which a decision can be made + * \param[in] minratio minimum conf ratio required for a decision + * \param[out] pupconf [optional] ; use NULL to skip + * \param[out] pleftconf [optional] ; use NULL to skip + * \param[out] protation [optional] ; use NULL to skip + * \param[in] debug 1 for debug output; 0 otherwise + * \return pixd may be rotated by 90, 180 or 270; null on error + * + *
+ * Notes:
+ *      (1) Simple top-level function to detect if Roman text is in
+ *          reading orientation, and to rotate the image accordingly if not.
+ *      (2) Returns a copy if no rotation is needed.
+ *      (3) See notes for pixOrientDetect() and pixOrientDecision().
+ *          Use 0.0 for default values for %minupconf and %minratio
+ *      (4) Optional output of intermediate confidence results and
+ *          the rotation performed on pixs.
+ * 
+ */ +PIX * +pixOrientCorrect(PIX *pixs, + l_float32 minupconf, + l_float32 minratio, + l_float32 *pupconf, + l_float32 *pleftconf, + l_int32 *protation, + l_int32 debug) +{ +l_int32 orient; +l_float32 upconf, leftconf; +PIX *pix1; + + PROCNAME("pixOrientCorrect"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + /* Get confidences for orientation */ + pixUpDownDetectDwa(pixs, &upconf, 0, debug); + pix1 = pixRotate90(pixs, 1); + pixUpDownDetectDwa(pix1, &leftconf, 0, debug); + pixDestroy(&pix1); + if (pupconf) *pupconf = upconf; + if (pleftconf) *pleftconf = leftconf; + + /* Decide what to do */ + makeOrientDecision(upconf,leftconf, minupconf, minratio, &orient, debug); + + /* Do it */ + switch (orient) + { + case L_TEXT_ORIENT_UNKNOWN: + L_INFO("text orientation not determined; no rotation\n", procName); + if (protation) *protation = 0; + return pixCopy(NULL, pixs); + break; + case L_TEXT_ORIENT_UP: + L_INFO("text is oriented up; no rotation\n", procName); + if (protation) *protation = 0; + return pixCopy(NULL, pixs); + break; + case L_TEXT_ORIENT_LEFT: + L_INFO("landscape; text oriented left; 90 cw rotation\n", procName); + if (protation) *protation = 90; + return pixRotateOrth(pixs, 1); + break; + case L_TEXT_ORIENT_DOWN: + L_INFO("text oriented down; 180 cw rotation\n", procName); + if (protation) *protation = 180; + return pixRotateOrth(pixs, 2); + break; + case L_TEXT_ORIENT_RIGHT: + L_INFO("landscape; text oriented right; 270 cw rotation\n", procName); + if (protation) *protation = 270; + return pixRotateOrth(pixs, 3); + break; + default: + L_ERROR("invalid orient flag!\n", procName); + return pixCopy(NULL, pixs); + } +} + + +/*----------------------------------------------------------------* + * Orientation detection (four 90 degree angles) * + * Rasterop implementation * + *----------------------------------------------------------------*/ +/*! + * \brief pixOrientDetect() + * + * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi + * \param[out] pupconf [optional] ; may be NULL + * \param[out] pleftconf [optional] ; may be NULL + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See "Measuring document image skew and orientation"
+ *          Dan S. Bloomberg, Gary E. Kopec and Lakshmi Dasari
+ *          IS&T/SPIE EI'95, Conference 2422: Document Recognition II
+ *          pp 302-316, Feb 6-7, 1995, San Jose, CA
+ *      (2) upconf is the normalized difference between up ascenders
+ *          and down ascenders.  The image is analyzed without rotation
+ *          for being rightside-up or upside-down.  Set &upconf to null
+ *          to skip this operation.
+ *      (3) leftconf is the normalized difference between up ascenders
+ *          and down ascenders in the image after it has been
+ *          rotated 90 degrees clockwise.  With that rotation, ascenders
+ *          projecting to the left in the source image will project up
+ *          in the rotated image.  We compute this by rotating 90 degrees
+ *          clockwise and testing for up and down ascenders.  Set
+ *          &leftconf to null to skip this operation.
+ *      (4) Note that upconf and leftconf are not linear measures of
+ *          confidence, e.g., in a range between 0 and 100.  They
+ *          measure how far you are out on the tail of a (presumably)
+ *          normal distribution.  For example, a confidence of 10 means
+ *          that it is nearly certain that the difference did not
+ *          happen at random.  However, these values must be interpreted
+ *          cautiously, taking into consideration the estimated prior
+ *          for a particular orientation or mirror flip.   The up-down
+ *          signal is very strong if applied to text with ascenders
+ *          up and down, and relatively weak for text at 90 degrees,
+ *          but even at 90 degrees, the difference can look significant.
+ *          For example, suppose the ascenders are oriented horizontally,
+ *          but the test is done vertically.  Then upconf can
+ *          be < -MIN_CONF_FOR_UP_DOWN, suggesting the text may be
+ *          upside-down.  However, if instead the test were done
+ *          horizontally, leftconf will be very much larger
+ *          (in absolute value), giving the correct orientation.
+ *      (5) If you compute both upconf and leftconf, and there is
+ *          sufficient signal, the following table determines the
+ *          cw angle necessary to rotate pixs so that the text is
+ *          rightside-up:
+ *             0 deg :           upconf >> 1,    abs(upconf) >> abs(leftconf)
+ *             90 deg :          leftconf >> 1,  abs(leftconf) >> abs(upconf)
+ *             180 deg :         upconf << -1,   abs(upconf) >> abs(leftconf)
+ *             270 deg :         leftconf << -1, abs(leftconf) >> abs(upconf)
+ *      (6) One should probably not interpret the direction unless
+ *          there are a sufficient number of counts for both orientations,
+ *          in which case neither upconf nor leftconf will be 0.0.
+ *      (7) This algorithm will fail on some images, such as tables,
+ *          where most of the characters are numbers and appear as
+ *          uppercase, but there are some repeated words that give a
+ *          biased signal.  It may be advisable to run a table detector
+ *          first (e.g., pixDecideIfTable()), and not run the orientation
+ *          detector if it is a table.
+ *      (8) Uses rasterop implementation of HMT.
+ * 
+ */ +l_ok +pixOrientDetect(PIX *pixs, + l_float32 *pupconf, + l_float32 *pleftconf, + l_int32 mincount, + l_int32 debug) +{ +PIX *pix1; + + PROCNAME("pixOrientDetect"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!pupconf && !pleftconf) + return ERROR_INT("nothing to do", procName, 1); + if (mincount == 0) + mincount = DefaultMinUpDownCount; + + if (pupconf) + pixUpDownDetect(pixs, pupconf, mincount, debug); + if (pleftconf) { + pix1 = pixRotate90(pixs, 1); + pixUpDownDetect(pix1, pleftconf, mincount, debug); + pixDestroy(&pix1); + } + + return 0; +} + + +/*! + * \brief makeOrientDecision() + * + * \param[in] upconf nonzero + * \param[in] leftconf nonzero + * \param[in] minupconf minimum value for which a decision can be made + * \param[in] minratio minimum conf ratio required for a decision + * \param[out] porient text orientation enum {0,1,2,3,4} + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This can be run after pixOrientDetect()
+ *      (2) Both upconf and leftconf must be nonzero; otherwise the
+ *          orientation cannot be determined.
+ *      (3) The abs values of the input confidences are compared to
+ *          minupconf.
+ *      (4) The abs value of the largest of (upconf/leftconf) and
+ *          (leftconf/upconf) is compared with minratio.
+ *      (5) Input 0.0 for the default values for minupconf and minratio.
+ *      (6) The return value of orient is interpreted thus:
+ *            L_TEXT_ORIENT_UNKNOWN:  not enough evidence to determine
+ *            L_TEXT_ORIENT_UP:       text rightside-up
+ *            L_TEXT_ORIENT_LEFT:     landscape, text up facing left
+ *            L_TEXT_ORIENT_DOWN:     text upside-down
+ *            L_TEXT_ORIENT_RIGHT:    landscape, text up facing right
+ * 
+ */ +l_ok +makeOrientDecision(l_float32 upconf, + l_float32 leftconf, + l_float32 minupconf, + l_float32 minratio, + l_int32 *porient, + l_int32 debug) +{ +l_float32 absupconf, absleftconf; + + PROCNAME("makeOrientDecision"); + + if (!porient) + return ERROR_INT("&orient not defined", procName, 1); + *porient = L_TEXT_ORIENT_UNKNOWN; /* default: no decision */ + if (upconf == 0.0 || leftconf == 0.0) { + L_INFO("not enough confidence to get orientation\n", procName); + return 0; + } + + if (minupconf == 0.0) + minupconf = DefaultMinUpDownConf; + if (minratio == 0.0) + minratio = DefaultMinUpDownRatio; + absupconf = L_ABS(upconf); + absleftconf = L_ABS(leftconf); + + /* Here are the four possible orientation decisions, based + * on satisfaction of two threshold constraints. */ + if (upconf > minupconf && absupconf > minratio * absleftconf) + *porient = L_TEXT_ORIENT_UP; + else if (leftconf > minupconf && absleftconf > minratio * absupconf) + *porient = L_TEXT_ORIENT_LEFT; + else if (upconf < -minupconf && absupconf > minratio * absleftconf) + *porient = L_TEXT_ORIENT_DOWN; + else if (leftconf < -minupconf && absleftconf > minratio * absupconf) + *porient = L_TEXT_ORIENT_RIGHT; + + if (debug) { + fprintf(stderr, "upconf = %7.3f, leftconf = %7.3f\n", upconf, leftconf); + if (*porient == L_TEXT_ORIENT_UNKNOWN) + fprintf(stderr, "Confidence is low; no determination is made\n"); + else if (*porient == L_TEXT_ORIENT_UP) + fprintf(stderr, "Text is rightside-up\n"); + else if (*porient == L_TEXT_ORIENT_LEFT) + fprintf(stderr, "Text is rotated 90 deg ccw\n"); + else if (*porient == L_TEXT_ORIENT_DOWN) + fprintf(stderr, "Text is upside-down\n"); + else /* *porient == L_TEXT_ORIENT_RIGHT */ + fprintf(stderr, "Text is rotated 90 deg cw\n"); + } + + return 0; +} + + +/*! + * \brief pixUpDownDetect() + * + * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi + * \param[out] pconf confidence that text is rightside-up + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Special (typical, slightly faster) case, where the pixels
+ *          identified through the HMT (hit-miss transform) are not
+ *          clipped by a truncated word mask pixm.  See pixOrientDetect()
+ *          and pixUpDownDetectGeneral() for details.
+ *      (2) The returned confidence is the normalized difference
+ *          between the number of detected up and down ascenders,
+ *          assuming that the text is either rightside-up or upside-down
+ *          and not rotated at a 90 degree angle.
+ * 
+ */ +l_ok +pixUpDownDetect(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 debug) +{ + return pixUpDownDetectGeneral(pixs, pconf, mincount, 0, debug); +} + + +/*! + * \brief pixUpDownDetectGeneral() + * + * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi + * \param[out] pconf confidence that text is rightside-up + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] npixels number of pixels removed from each side of word box + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixOrientDetect() for other details.
+ *      (2) %conf is the normalized difference between the number of
+ *          detected up and down ascenders, assuming that the text
+ *          is either rightside-up or upside-down and not rotated
+ *          at a 90 degree angle.
+ *      (3) The typical mode of operation is %npixels == 0.
+ *          If %npixels > 0, this removes HMT matches at the
+ *          beginning and ending of "words."  This is useful for
+ *          pages that may have mostly digits, because if npixels == 0,
+ *          leading "1" and "3" digits can register as having
+ *          ascenders or descenders, and "7" digits can match descenders.
+ *          Consequently, a page image of only digits may register
+ *          as being upside-down.
+ *      (4) We want to count the number of instances found using the HMT.
+ *          An expensive way to do this would be to count the
+ *          number of connected components.  A cheap way is to do a rank
+ *          reduction cascade that reduces each component to a single
+ *          pixel, and results (after two or three 2x reductions)
+ *          in one pixel for each of the original components.
+ *          After the reduction, you have a much smaller pix over
+ *          which to count pixels.  We do only 2 reductions, because
+ *          this function is designed to work for input pix between
+ *          150 and 300 ppi, and an 8x reduction on a 150 ppi image
+ *          is going too far -- components will get merged.
+ * 
+ */ +l_ok +pixUpDownDetectGeneral(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 npixels, + l_int32 debug) +{ +l_int32 countup, countdown, nmax; +l_float32 nup, ndown; +PIX *pix0, *pix1, *pix2, *pix3, *pixm; +SEL *sel1, *sel2, *sel3, *sel4; + + PROCNAME("pixUpDownDetectGeneral"); + + if (!pconf) + return ERROR_INT("&conf not defined", procName, 1); + *pconf = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (mincount == 0) + mincount = DefaultMinUpDownCount; + if (npixels < 0) + npixels = 0; + + if (debug) { + lept_mkdir("lept/orient"); + } + + sel1 = selCreateFromString(textsel1, 5, 6, NULL); + sel2 = selCreateFromString(textsel2, 5, 6, NULL); + sel3 = selCreateFromString(textsel3, 5, 6, NULL); + sel4 = selCreateFromString(textsel4, 5, 6, NULL); + + /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). + * This closes holes in x-height characters and joins them at + * the x-height. There is more noise in the descender detection + * from this, but it works fairly well. */ + pix0 = pixMorphCompSequence(pixs, "c1.8 + c30.1", 0); + + /* Optionally, make a mask of the word bounding boxes, shortening + * each of them by a fixed amount at each end. */ + pixm = NULL; + if (npixels > 0) { + l_int32 i, nbox, x, y, w, h; + BOX *box; + BOXA *boxa; + pix1 = pixMorphSequence(pix0, "o10.1", 0); + boxa = pixConnComp(pix1, NULL, 8); + pixm = pixCreateTemplate(pix1); + pixDestroy(&pix1); + nbox = boxaGetCount(boxa); + for (i = 0; i < nbox; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + if (w > 2 * npixels) + pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, + PIX_SET, NULL, 0, 0); + boxDestroy(&box); + } + boxaDestroy(&boxa); + } + + /* Find the ascenders and optionally filter with pixm. + * For an explanation of the procedure used for counting the result + * of the HMT, see comments at the beginning of this function. */ + pix1 = pixHMT(NULL, pix0, sel1); + pix2 = pixHMT(NULL, pix0, sel2); + pixOr(pix1, pix1, pix2); + if (pixm) + pixAnd(pix1, pix1, pixm); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &countup, NULL); + pixDebugFlipDetect("/tmp/lept/orient/up.png", pixs, pix1, debug); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Find the ascenders and optionally filter with pixm. */ + pix1 = pixHMT(NULL, pix0, sel3); + pix2 = pixHMT(NULL, pix0, sel4); + pixOr(pix1, pix1, pix2); + if (pixm) + pixAnd(pix1, pix1, pixm); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &countdown, NULL); + pixDebugFlipDetect("/tmp/lept/orient/down.png", pixs, pix1, debug); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Evaluate statistically, generating a confidence that is + * related to the probability with a gaussian distribution. */ + nup = (l_float32)(countup); + ndown = (l_float32)(countdown); + nmax = L_MAX(countup, countdown); + if (nmax > mincount) + *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); + + if (debug) { + if (pixm) pixWriteDebug("/tmp/lept/orient/pixm1.png", pixm, IFF_PNG); + fprintf(stderr, "nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", + nup, ndown, *pconf); + if (*pconf > DefaultMinUpDownConf) + fprintf(stderr, "Text is rightside-up\n"); + if (*pconf < -DefaultMinUpDownConf) + fprintf(stderr, "Text is upside-down\n"); + } + + pixDestroy(&pix0); + pixDestroy(&pixm); + selDestroy(&sel1); + selDestroy(&sel2); + selDestroy(&sel3); + selDestroy(&sel4); + return 0; +} + + +/*----------------------------------------------------------------* + * Orientation detection (four 90 degree angles) * + * DWA implementation * + *----------------------------------------------------------------*/ +/*! + * \brief pixOrientDetectDwa() + * + * \param[in] pixs 1 bpp, deskewed, English text + * \param[out] pupconf [optional] ; may be NULL + * \param[out] pleftconf [optional] ; may be NULL + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Same interface as for pixOrientDetect().  See notes
+ *          there for usage.
+ *      (2) Uses auto-gen'd code for the Sels defined at the
+ *          top of this file, with some renaming of functions.
+ *          The auto-gen'd code is in fliphmtgen.c, and can
+ *          be generated by a simple executable; see prog/flipselgen.c.
+ *      (3) This runs about 2.5 times faster than the pixOrientDetect().
+ * 
+ */ +l_ok +pixOrientDetectDwa(PIX *pixs, + l_float32 *pupconf, + l_float32 *pleftconf, + l_int32 mincount, + l_int32 debug) +{ +PIX *pix1; + + PROCNAME("pixOrientDetectDwa"); + + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!pupconf && !pleftconf) + return ERROR_INT("nothing to do", procName, 1); + if (mincount == 0) + mincount = DefaultMinUpDownCount; + + if (pupconf) + pixUpDownDetectDwa(pixs, pupconf, mincount, debug); + if (pleftconf) { + pix1 = pixRotate90(pixs, 1); + pixUpDownDetectDwa(pix1, pleftconf, mincount, debug); + pixDestroy(&pix1); + } + + return 0; +} + + +/*! + * \brief pixUpDownDetectDwa() + * + * \param[in] pixs 1 bpp, deskewed, English text, 150 - 300 ppi + * \param[out] pconf confidence that text is rightside-up + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Faster (DWA) version of pixUpDownDetect().
+ *      (2) This is a special case (but typical and slightly faster) of
+ *          pixUpDownDetectGeneralDwa(), where the pixels identified
+ *          through the HMT (hit-miss transform) are not clipped by
+ *          a truncated word mask pixm.  See pixUpDownDetectGeneral()
+ *          for usage and other details.
+ *      (3) The returned confidence is the normalized difference
+ *          between the number of detected up and down ascenders,
+ *          assuming that the text is either rightside-up or upside-down
+ *          and not rotated at a 90 degree angle.
+ * 
+ */ +l_ok +pixUpDownDetectDwa(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 debug) +{ + return pixUpDownDetectGeneralDwa(pixs, pconf, mincount, 0, debug); +} + + +/*! + * \brief pixUpDownDetectGeneralDwa() + * + * \param[in] pixs 1 bpp, deskewed, English text + * \param[out] pconf confidence that text is rightside-up + * \param[in] mincount min number of up + down; use 0 for default + * \param[in] npixels number of pixels removed from each side of word box + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See the notes in pixUpDownDetectGeneral() for usage.
+ * 
+ */ +l_ok +pixUpDownDetectGeneralDwa(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 npixels, + l_int32 debug) +{ +char flipsel1[] = "flipsel1"; +char flipsel2[] = "flipsel2"; +char flipsel3[] = "flipsel3"; +char flipsel4[] = "flipsel4"; +l_int32 countup, countdown, nmax; +l_float32 nup, ndown; +PIX *pixt, *pix0, *pix1, *pix2, *pix3, *pixm; + + PROCNAME("pixUpDownDetectGeneralDwa"); + + if (!pconf) + return ERROR_INT("&conf not defined", procName, 1); + *pconf = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (mincount == 0) + mincount = DefaultMinUpDownCount; + if (npixels < 0) + npixels = 0; + + /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). + * This closes holes in x-height characters and joins them at + * the x-height. There is more noise in the descender detection + * from this, but it works fairly well. */ + pixt = pixMorphSequenceDwa(pixs, "c1.8 + c30.1", 0); + + /* Be sure to add the border before the flip DWA operations! */ + pix0 = pixAddBorderGeneral(pixt, ADDED_BORDER, ADDED_BORDER, + ADDED_BORDER, ADDED_BORDER, 0); + pixDestroy(&pixt); + + /* Optionally, make a mask of the word bounding boxes, shortening + * each of them by a fixed amount at each end. */ + pixm = NULL; + if (npixels > 0) { + l_int32 i, nbox, x, y, w, h; + BOX *box; + BOXA *boxa; + pix1 = pixMorphSequenceDwa(pix0, "o10.1", 0); + boxa = pixConnComp(pix1, NULL, 8); + pixm = pixCreateTemplate(pix1); + pixDestroy(&pix1); + nbox = boxaGetCount(boxa); + for (i = 0; i < nbox; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + if (w > 2 * npixels) + pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, + PIX_SET, NULL, 0, 0); + boxDestroy(&box); + } + boxaDestroy(&boxa); + } + + /* Find the ascenders and optionally filter with pixm. + * For an explanation of the procedure used for counting the result + * of the HMT, see comments in pixUpDownDetectGeneral(). */ + pix1 = pixFlipFHMTGen(NULL, pix0, flipsel1); + pix2 = pixFlipFHMTGen(NULL, pix0, flipsel2); + pixOr(pix1, pix1, pix2); + if (pixm) + pixAnd(pix1, pix1, pixm); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &countup, NULL); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Find the ascenders and optionally filter with pixm. */ + pix1 = pixFlipFHMTGen(NULL, pix0, flipsel3); + pix2 = pixFlipFHMTGen(NULL, pix0, flipsel4); + pixOr(pix1, pix1, pix2); + if (pixm) + pixAnd(pix1, pix1, pixm); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &countdown, NULL); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + + /* Evaluate statistically, generating a confidence that is + * related to the probability with a gaussian distribution. */ + nup = (l_float32)(countup); + ndown = (l_float32)(countdown); + nmax = L_MAX(countup, countdown); + if (nmax > mincount) + *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); + + if (debug) { + if (pixm) { + lept_mkdir("lept/orient"); + pixWriteDebug("/tmp/lept/orient/pixm2.png", pixm, IFF_PNG); + } + fprintf(stderr, "nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", + nup, ndown, *pconf); + if (*pconf > DefaultMinUpDownConf) + fprintf(stderr, "Text is rightside-up\n"); + if (*pconf < -DefaultMinUpDownConf) + fprintf(stderr, "Text is upside-down\n"); + } + + pixDestroy(&pix0); + pixDestroy(&pixm); + return 0; +} + + + +/*----------------------------------------------------------------* + * Left-right mirror detection * + * Rasterop implementation * + *----------------------------------------------------------------*/ +/*! + * \brief pixMirrorDetect() + * + * \param[in] pixs 1 bpp, deskewed, English text + * \param[out] pconf confidence that text is not LR mirror reversed + * \param[in] mincount min number of left + right; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For this test, it is necessary that the text is horizontally
+ *          oriented, with ascenders going up.
+ *      (2) conf is the normalized difference between the number of
+ *          right and left facing characters with ascenders.
+ *          Left-facing are {d}; right-facing are {b, h, k}.
+ *          At least that was the expectation.  In practice, we can
+ *          really just say that it is the normalized difference in
+ *          hits using two specific hit-miss filters, textsel1 and textsel2,
+ *          after the image has been suitably pre-filtered so that
+ *          these filters are effective.  See (4) for what's really happening.
+ *      (3) A large positive conf value indicates normal text, whereas
+ *          a large negative conf value means the page is mirror reversed.
+ *      (4) The implementation is a bit tricky.  The general idea is
+ *          to fill the x-height part of characters, but not the space
+ *          between them, before doing the HMT.  This is done by
+ *          finding pixels added using two different operations -- a
+ *          horizontal close and a vertical dilation -- and adding
+ *          the intersection of these sets to the original.  It turns
+ *          out that the original intuition about the signal was largely
+ *          in error: much of the signal for right-facing characters
+ *          comes from the lower part of common x-height characters, like
+ *          the e and c, that remain open after these operations.
+ *          So it's important that the operations to close the x-height
+ *          parts of the characters are purposely weakened sufficiently
+ *          to allow these characters to remain open.  The wonders
+ *          of morphology!
+ * 
+ */ +l_ok +pixMirrorDetect(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 debug) +{ +l_int32 count1, count2, nmax; +l_float32 nleft, nright; +PIX *pix0, *pix1, *pix2, *pix3; +SEL *sel1, *sel2; + + PROCNAME("pixMirrorDetect"); + + if (!pconf) + return ERROR_INT("&conf not defined", procName, 1); + *pconf = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (mincount == 0) + mincount = DefaultMinMirrorFlipCount; + + if (debug) { + lept_mkdir("lept/orient"); + } + + sel1 = selCreateFromString(textsel1, 5, 6, NULL); + sel2 = selCreateFromString(textsel2, 5, 6, NULL); + + /* Fill x-height characters but not space between them, sort of. */ + pix3 = pixMorphCompSequence(pixs, "d1.30", 0); + pixXor(pix3, pix3, pixs); + pix0 = pixMorphCompSequence(pixs, "c15.1", 0); + pixXor(pix0, pix0, pixs); + pixAnd(pix0, pix0, pix3); + pixOr(pix0, pix0, pixs); + pixDestroy(&pix3); + + /* Filter the right-facing characters. */ + pix1 = pixHMT(NULL, pix0, sel1); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &count1, NULL); + pixDebugFlipDetect("/tmp/lept/orient/right.png", pixs, pix1, debug); + pixDestroy(&pix1); + pixDestroy(&pix3); + + /* Filter the left-facing characters. */ + pix2 = pixHMT(NULL, pix0, sel2); + pix3 = pixReduceRankBinaryCascade(pix2, 1, 1, 0, 0); + pixCountPixels(pix3, &count2, NULL); + pixDebugFlipDetect("/tmp/lept/orient/left.png", pixs, pix2, debug); + pixDestroy(&pix2); + pixDestroy(&pix3); + + nright = (l_float32)count1; + nleft = (l_float32)count2; + nmax = L_MAX(count1, count2); + pixDestroy(&pix0); + selDestroy(&sel1); + selDestroy(&sel2); + + if (nmax > mincount) + *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); + + if (debug) { + fprintf(stderr, "nright = %f, nleft = %f\n", nright, nleft); + if (*pconf > DefaultMinMirrorFlipConf) + fprintf(stderr, "Text is not mirror reversed\n"); + if (*pconf < -DefaultMinMirrorFlipConf) + fprintf(stderr, "Text is mirror reversed\n"); + } + + return 0; +} + + +/*----------------------------------------------------------------* + * Left-right mirror detection * + * DWA implementation * + *----------------------------------------------------------------*/ +/*! + * \brief pixMirrorDetectDwa() + * + * \param[in] pixs 1 bpp, deskewed, English text + * \param[out] pconf confidence that text is not LR mirror reversed + * \param[in] mincount min number of left + right; use 0 for default + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We assume the text is horizontally oriented, with
+ *          ascenders going up.
+ *      (2) See notes in pixMirrorDetect().
+ * 
+ */ +l_ok +pixMirrorDetectDwa(PIX *pixs, + l_float32 *pconf, + l_int32 mincount, + l_int32 debug) +{ +char flipsel1[] = "flipsel1"; +char flipsel2[] = "flipsel2"; +l_int32 count1, count2, nmax; +l_float32 nleft, nright; +PIX *pix0, *pix1, *pix2, *pix3; + + PROCNAME("pixMirrorDetectDwa"); + + if (!pconf) + return ERROR_INT("&conf not defined", procName, 1); + *pconf = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (mincount == 0) + mincount = DefaultMinMirrorFlipCount; + + /* Fill x-height characters but not space between them, sort of. */ + pix3 = pixMorphSequenceDwa(pixs, "d1.30", 0); + pixXor(pix3, pix3, pixs); + pix0 = pixMorphSequenceDwa(pixs, "c15.1", 0); + pixXor(pix0, pix0, pixs); + pixAnd(pix0, pix0, pix3); + pixOr(pix3, pix0, pixs); + pixDestroy(&pix0); + pix0 = pixAddBorderGeneral(pix3, ADDED_BORDER, ADDED_BORDER, + ADDED_BORDER, ADDED_BORDER, 0); + pixDestroy(&pix3); + + /* Filter the right-facing characters. */ + pix1 = pixFlipFHMTGen(NULL, pix0, flipsel1); + pix3 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + pixCountPixels(pix3, &count1, NULL); + pixDestroy(&pix1); + pixDestroy(&pix3); + + /* Filter the left-facing characters. */ + pix2 = pixFlipFHMTGen(NULL, pix0, flipsel2); + pix3 = pixReduceRankBinaryCascade(pix2, 1, 1, 0, 0); + pixCountPixels(pix3, &count2, NULL); + pixDestroy(&pix2); + pixDestroy(&pix3); + + pixDestroy(&pix0); + nright = (l_float32)count1; + nleft = (l_float32)count2; + nmax = L_MAX(count1, count2); + + if (nmax > mincount) + *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); + + if (debug) { + fprintf(stderr, "nright = %f, nleft = %f\n", nright, nleft); + if (*pconf > DefaultMinMirrorFlipConf) + fprintf(stderr, "Text is not mirror reversed\n"); + if (*pconf < -DefaultMinMirrorFlipConf) + fprintf(stderr, "Text is mirror reversed\n"); + } + + return 0; +} + + +/*----------------------------------------------------------------* + * Static debug helper * + *----------------------------------------------------------------*/ +/* + * \brief pixDebugFlipDetect() + * + * \param[in] filename for output debug file + * \param[in] pixs input to pix*Detect + * \param[in] pixhm hit-miss result from ascenders or descenders + * \param[in] enable 1 to enable this function; 0 to disable + * \return void + */ +static void +pixDebugFlipDetect(const char *filename, + PIX *pixs, + PIX *pixhm, + l_int32 enable) +{ +PIX *pixt, *pixthm; + + if (!enable) return; + + /* Display with red dot at counted locations */ + pixt = pixConvert1To4Cmap(pixs); + pixthm = pixMorphSequence(pixhm, "d5.5", 0); + pixSetMaskedCmap(pixt, pixthm, 0, 0, 255, 0, 0); + + pixWriteDebug(filename, pixt, IFF_PNG); + pixDestroy(&pixthm); + pixDestroy(&pixt); + return; +} diff --git a/3rdparty/hgOCR/leptonica/fliphmtgen.c b/3rdparty/hgOCR/leptonica/fliphmtgen.c new file mode 100644 index 00000000..25e1219e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fliphmtgen.c @@ -0,0 +1,352 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * fliphmtgen.c + * + * DWA implementation of hit-miss transforms with auto-generated sels + * for pixOrientDetectDwa() and pixUpDownDetectDwa() in flipdetect.c + * + * PIX *pixFlipFHMTGen() + * static l_int32 flipfhmtgen_low() -- dispatcher + * static void fhmt_1_0() + * static void fhmt_1_1() + * static void fhmt_1_2() + * static void fhmt_1_3() + * + * The code (rearranged) was generated by prog/flipselgen.c + */ + +#include +#include "allheaders.h" + +static l_int32 NUM_SELS_GENERATED = 4; +static char SEL_NAMES[][10] = {"flipsel1", + "flipsel2", + "flipsel3", + "flipsel4"}; + +static l_int32 flipfhmtgen_low(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32, l_int32); + +static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); + + +/*---------------------------------------------------------------------* + * Top-level hmt functions * + *---------------------------------------------------------------------*/ +/* + * pixFlipFHMTGen() + * + * Input: pixd (usual 3 choices: null, == pixs, != pixs) + * pixs + * sel name (one of four defined in SEL_NAMES[]) + * Return: pixd + * + * Notes: + * Action: hit-miss transform on pixs by the sel + * N.B.: the sel must have at least one hit, and it + * can have any number of misses. + */ +PIX * +pixFlipFHMTGen(PIX *pixd, + PIX *pixs, + const char *selname) +{ +l_int32 i, index, found, w, h, wpls, wpld; +l_uint32 *datad, *datas, *datat; +PIX *pixt; + + PROCNAME("pixFlipFHMTGen"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + found = FALSE; + for (i = 0; i < NUM_SELS_GENERATED; i++) { + if (strcmp(selname, SEL_NAMES[i]) == 0) { + found = TRUE; + index = i; + break; + } + } + if (found == FALSE) + return (PIX *)ERROR_PTR("sel index not found", procName, pixd); + + if (pixd) { + if (!pixSizesEqual(pixs, pixd)) + return (PIX *)ERROR_PTR("sizes not equal", procName, pixd); + } else { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + /* The images must be surrounded with ADDED_BORDER white pixels, + * that we'll read from. We fabricate a "proper" + * image as the subimage within the border, having the + * following parameters: */ + w = pixGetWidth(pixs) - 2 * ADDED_BORDER; + h = pixGetHeight(pixs) - 2 * ADDED_BORDER; + datas = pixGetData(pixs) + ADDED_BORDER * wpls + ADDED_BORDER / 32; + datad = pixGetData(pixd) + ADDED_BORDER * wpld + ADDED_BORDER / 32; + + if (pixd == pixs) { /* need temp image if in-place */ + if ((pixt = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + ADDED_BORDER * wpls + ADDED_BORDER / 32; + flipfhmtgen_low(datad, w, h, wpld, datat, wpls, index); + pixDestroy(&pixt); + } else { /* simple and not in-place */ + flipfhmtgen_low(datad, w, h, wpld, datas, wpls, index); + } + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Fast hmt dispatcher * + *---------------------------------------------------------------------*/ +/* + * flipfhmtgen_low() + * + * A dispatcher to appropriate low-level code for flip hmt ops + */ +static l_int32 +flipfhmtgen_low(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 index) +{ + + switch (index) + { + case 0: + fhmt_1_0(datad, w, h, wpld, datas, wpls); + break; + case 1: + fhmt_1_1(datad, w, h, wpld, datas, wpls); + break; + case 2: + fhmt_1_2(datad, w, h, wpld, datas, wpls); + break; + case 3: + fhmt_1_3(datad, w, h, wpld, datas, wpls); + break; + } + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Low-level auto-generated hmt routines * + *--------------------------------------------------------------------------*/ +/* + * N.B. in all the low-level routines, the part of the image + * that is accessed has been clipped by ADDED_BORDER pixels + * on all four sides. This is done in the higher level + * code by redefining w and h smaller and by moving the + * start-of-image pointers up to the beginning of this + * interior rectangle. + */ + +static void +fhmt_1_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & + (~*(sptr - wpls)) & + ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (~*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & + (~*(sptr + wpls)) & + ((*(sptr + wpls2) >> 3) | (*(sptr + wpls2 - 1) << 29)) & + ((*(sptr + wpls3) >> 3) | (*(sptr + wpls3 - 1) << 29)) & + ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & + ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & + (*(sptr + wpls3)) & + ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & + ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)); + } + } +} + + +static void +fhmt_1_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & + (~*(sptr - wpls)) & + ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (~*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + (~*(sptr + wpls)) & + ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)) & + ((*(sptr + wpls2) << 3) | (*(sptr + wpls2 + 1) >> 29)) & + ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & + ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & + (*(sptr + wpls3)) & + ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & + ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)) & + ((*(sptr + wpls3) << 3) | (*(sptr + wpls3 + 1) >> 29)); + } + } +} + + +static void +fhmt_1_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls3) >> 3) | (*(sptr - wpls3 - 1) << 29)) & + ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & + ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & + (*(sptr - wpls3)) & + ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & + ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & + ((*(sptr - wpls2) >> 3) | (*(sptr - wpls2 - 1) << 29)) & + ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & + (~*(sptr - wpls)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (~*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & + (~*(sptr + wpls)) & + ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); + } + } +} + + +static void +fhmt_1_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & + ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & + (*(sptr - wpls3)) & + ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & + ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & + ((*(sptr - wpls3) << 3) | (*(sptr - wpls3 + 1) >> 29)) & + ((*(sptr - wpls2) << 3) | (*(sptr - wpls2 + 1) >> 29)) & + (~*(sptr - wpls)) & + ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & + ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & + (~*sptr) & + ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & + (~*(sptr + wpls)) & + ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)); + } + } +} diff --git a/3rdparty/hgOCR/leptonica/fmorphauto.c b/3rdparty/hgOCR/leptonica/fmorphauto.c new file mode 100644 index 00000000..20592797 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fmorphauto.c @@ -0,0 +1,874 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file fmorphauto.c + *
+ *
+ *    Main function calls:
+ *       l_int32             fmorphautogen()
+ *       l_int32             fmorphautogen1()
+ *       l_int32             fmorphautogen2()
+ *
+ *    Static helpers:
+ *       static SARRAY      *sarrayMakeWplsCode()
+ *       static SARRAY      *sarrayMakeInnerLoopDWACode()
+ *       static char        *makeBarrelshiftString()
+ *
+ *
+ *    This automatically generates dwa code for erosion and dilation.
+ *    Here's a road map for how it all works.
+ *
+ *    (1) You generate an array (a SELA) of structuring elements (SELs).
+ *        This can be done in several ways, including
+ *           (a) calling the function selaAddBasic() for
+ *               pre-compiled SELs
+ *           (b) generating the SELA in code in line
+ *           (c) reading in a SELA from file, using selaRead() or
+ *               various other formats.
+ *
+ *    (2) You call fmorphautogen1() and fmorphautogen2() on this SELA.
+ *        These use the text files morphtemplate1.txt and
+ *        morphtemplate2.txt for building up the source code.  See the file
+ *        prog/fmorphautogen.c for an example of how this is done.
+ *        The output is written to files named fmorphgen.*.c
+ *        and fmorphgenlow.*.c, where "*" is an integer that you
+ *        input to this function.  That integer labels both
+ *        the output files, as well as all the functions that
+ *        are generated.  That way, using different integers,
+ *        you can invoke fmorphautogen() any number of times
+ *        to get functions that all have different names so that
+ *        they can be linked into one program.
+ *
+ *    (3) You copy the generated source files back to your src
+ *        directory for compilation.  Put their names in the
+ *        Makefile, regenerate the prototypes, and recompile
+ *        the library.  Look at the Makefile to see how I've
+ *        included morphgen.1.c and fmorphgenlow.1.c.  These files
+ *        provide the high-level interfaces for erosion, dilation,
+ *        opening and closing, and the low-level interfaces to
+ *        do the actual work, for all 58 SELs in the SEL array.
+ *
+ *    (4) In an application, you now use this interface.  Again
+ *        for the example files in the library, using integer "1":
+ *
+ *            PIX   *pixMorphDwa_1(PIX *pixd, PIX, *pixs,
+ *                                 l_int32 operation, char *selname);
+ *
+ *                 or
+ *
+ *            PIX   *pixFMorphopGen_1(PIX *pixd, PIX *pixs,
+ *                                    l_int32 operation, char *selname);
+ *
+ *        where the operation is one of {L_MORPH_DILATE, L_MORPH_ERODE.
+ *        L_MORPH_OPEN, L_MORPH_CLOSE}, and the selname is one
+ *        of the set that were defined as the name field of sels.
+ *        This set is listed at the beginning of the file fmorphgen.1.c.
+ *        For examples of use, see the file prog/binmorph_reg1.c, which
+ *        verifies the consistency of the various implementations by
+ *        comparing the dwa result with that of full-image rasterops.
+ * 
+ */ + +#include +#include "allheaders.h" + +#define OUTROOT "fmorphgen" +#define TEMPLATE1 "morphtemplate1.txt" +#define TEMPLATE2 "morphtemplate2.txt" + +#define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" + +//static const l_int32 L_BUF_SIZE = 512; +#define L_BUF_SIZE 512 + +static char * makeBarrelshiftString(l_int32 delx, l_int32 dely); +static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 index); +static SARRAY * sarrayMakeWplsCode(SEL *sel); + +static char wpldecls[][53] = { + "l_int32 wpls2;", + "l_int32 wpls2, wpls3;", + "l_int32 wpls2, wpls3, wpls4;", + "l_int32 wpls5;", + "l_int32 wpls5, wpls6;", + "l_int32 wpls5, wpls6, wpls7;", + "l_int32 wpls5, wpls6, wpls7, wpls8;", + "l_int32 wpls9;", + "l_int32 wpls9, wpls10;", + "l_int32 wpls9, wpls10, wpls11;", + "l_int32 wpls9, wpls10, wpls11, wpls12;", + "l_int32 wpls13;", + "l_int32 wpls13, wpls14;", + "l_int32 wpls13, wpls14, wpls15;", + "l_int32 wpls13, wpls14, wpls15, wpls16;", + "l_int32 wpls17;", + "l_int32 wpls17, wpls18;", + "l_int32 wpls17, wpls18, wpls19;", + "l_int32 wpls17, wpls18, wpls19, wpls20;", + "l_int32 wpls21;", + "l_int32 wpls21, wpls22;", + "l_int32 wpls21, wpls22, wpls23;", + "l_int32 wpls21, wpls22, wpls23, wpls24;", + "l_int32 wpls25;", + "l_int32 wpls25, wpls26;", + "l_int32 wpls25, wpls26, wpls27;", + "l_int32 wpls25, wpls26, wpls27, wpls28;", + "l_int32 wpls29;", + "l_int32 wpls29, wpls30;", + "l_int32 wpls29, wpls30, wpls31;"}; + +static char wplgendecls[][30] = { + "l_int32 wpls2;", + "l_int32 wpls3;", + "l_int32 wpls4;", + "l_int32 wpls5;", + "l_int32 wpls6;", + "l_int32 wpls7;", + "l_int32 wpls8;", + "l_int32 wpls9;", + "l_int32 wpls10;", + "l_int32 wpls11;", + "l_int32 wpls12;", + "l_int32 wpls13;", + "l_int32 wpls14;", + "l_int32 wpls15;", + "l_int32 wpls16;", + "l_int32 wpls17;", + "l_int32 wpls18;", + "l_int32 wpls19;", + "l_int32 wpls20;", + "l_int32 wpls21;", + "l_int32 wpls22;", + "l_int32 wpls23;", + "l_int32 wpls24;", + "l_int32 wpls25;", + "l_int32 wpls26;", + "l_int32 wpls27;", + "l_int32 wpls28;", + "l_int32 wpls29;", + "l_int32 wpls30;", + "l_int32 wpls31;"}; + +static char wpldefs[][25] = { + " wpls2 = 2 * wpls;", + " wpls3 = 3 * wpls;", + " wpls4 = 4 * wpls;", + " wpls5 = 5 * wpls;", + " wpls6 = 6 * wpls;", + " wpls7 = 7 * wpls;", + " wpls8 = 8 * wpls;", + " wpls9 = 9 * wpls;", + " wpls10 = 10 * wpls;", + " wpls11 = 11 * wpls;", + " wpls12 = 12 * wpls;", + " wpls13 = 13 * wpls;", + " wpls14 = 14 * wpls;", + " wpls15 = 15 * wpls;", + " wpls16 = 16 * wpls;", + " wpls17 = 17 * wpls;", + " wpls18 = 18 * wpls;", + " wpls19 = 19 * wpls;", + " wpls20 = 20 * wpls;", + " wpls21 = 21 * wpls;", + " wpls22 = 22 * wpls;", + " wpls23 = 23 * wpls;", + " wpls24 = 24 * wpls;", + " wpls25 = 25 * wpls;", + " wpls26 = 26 * wpls;", + " wpls27 = 27 * wpls;", + " wpls28 = 28 * wpls;", + " wpls29 = 29 * wpls;", + " wpls30 = 30 * wpls;", + " wpls31 = 31 * wpls;"}; + +static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", + "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", + "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", + "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", + "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", + "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", + "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", + "+ wpls29", "+ wpls30", "+ wpls31"}; + +static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", + "- wpls5", "- wpls6", "- wpls7", "- wpls8", + "- wpls9", "- wpls10", "- wpls11", "- wpls12", + "- wpls13", "- wpls14", "- wpls15", "- wpls16", + "- wpls17", "- wpls18", "- wpls19", "- wpls20", + "- wpls21", "- wpls22", "- wpls23", "- wpls24", + "- wpls25", "- wpls26", "- wpls27", "- wpls28", + "- wpls29", "- wpls30", "- wpls31"}; + + +/*! + * \brief fmorphautogen() + * + * \param[in] sela + * \param[in] fileindex + * \param[in] filename [optional]; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This function generates all the code for implementing
+ *          dwa morphological operations using all the sels in the sela.
+ *      (2) See fmorphautogen1() and fmorphautogen2() for details.
+ * 
+ */ +l_ok +fmorphautogen(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +l_int32 ret1, ret2; + + PROCNAME("fmorphautogen"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + ret1 = fmorphautogen1(sela, fileindex, filename); + ret2 = fmorphautogen2(sela, fileindex, filename); + if (ret1 || ret2) + return ERROR_INT("code generation problem", procName, 1); + return 0; +} + + +/*! + * \brief fmorphautogen1() + * + * \param[in] sela + * \param[in] fileindex + * \param[in] filename [optional]; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This function uses morphtemplate1.txt to create a
+ *          top-level file that contains two functions.  These
+ *          functions will carry out dilation, erosion,
+ *          opening or closing for any of the sels in the input sela.
+ *      (2) The fileindex parameter is inserted into the output
+ *          filename, as described below.
+ *      (3) If filename == NULL, the output file is fmorphgen.[n].c,
+ *          where [n] is equal to the %fileindex parameter.
+ *      (4) If filename != NULL, the output file is [%filename].[n].c.
+ * 
+ */ +l_ok +fmorphautogen1(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +char *filestr; +char *str_proto1, *str_proto2, *str_proto3; +char *str_doc1, *str_doc2, *str_doc3, *str_doc4; +char *str_def1, *str_def2, *str_proc1, *str_proc2; +char *str_dwa1, *str_low_dt, *str_low_ds, *str_low_ts; +char *str_low_tsp1, *str_low_dtp1; +char bigbuf[L_BUF_SIZE]; +l_int32 i, nsels, nbytes, actstart, end, newstart; +size_t size; +SARRAY *sa1, *sa2, *sa3; + + PROCNAME("fmorphautogen1"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + if (fileindex < 0) + fileindex = 0; + if ((nsels = selaGetCount(sela)) == 0) + return ERROR_INT("no sels in sela", procName, 1); + + /* Make array of textlines from morphtemplate1.txt */ + if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) + return ERROR_INT("filestr not made", procName, 1); + sa2 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + if (!sa2) + return ERROR_INT("sa2 not made", procName, 1); + + /* Make array of sel names */ + sa1 = selaGetSelnames(sela); + + /* Make strings containing function call names */ + sprintf(bigbuf, "PIX *pixMorphDwa_%d(PIX *pixd, PIX *pixs, " + "l_int32 operation, char *selname);", fileindex); + str_proto1 = stringNew(bigbuf); + sprintf(bigbuf, "PIX *pixFMorphopGen_%d(PIX *pixd, PIX *pixs, " + "l_int32 operation, char *selname);", fileindex); + str_proto2 = stringNew(bigbuf); + sprintf(bigbuf, "l_int32 fmorphopgen_low_%d(l_uint32 *datad, l_int32 w,\n" + " l_int32 h, l_int32 wpld,\n" + " l_uint32 *datas, l_int32 wpls,\n" + " l_int32 index);", fileindex); + str_proto3 = stringNew(bigbuf); + sprintf(bigbuf, " * PIX *pixMorphDwa_%d()", fileindex); + str_doc1 = stringNew(bigbuf); + sprintf(bigbuf, " * PIX *pixFMorphopGen_%d()", fileindex); + str_doc2 = stringNew(bigbuf); + sprintf(bigbuf, " * \\brief pixMorphDwa_%d()", fileindex); + str_doc3 = stringNew(bigbuf); + sprintf(bigbuf, " * \\brief pixFMorphopGen_%d()", fileindex); + str_doc4 = stringNew(bigbuf); + sprintf(bigbuf, "pixMorphDwa_%d(PIX *pixd,", fileindex); + str_def1 = stringNew(bigbuf); + sprintf(bigbuf, "pixFMorphopGen_%d(PIX *pixd,", fileindex); + str_def2 = stringNew(bigbuf); + sprintf(bigbuf, " PROCNAME(\"pixMorphDwa_%d\");", fileindex); + str_proc1 = stringNew(bigbuf); + sprintf(bigbuf, " PROCNAME(\"pixFMorphopGen_%d\");", fileindex); + str_proc2 = stringNew(bigbuf); + sprintf(bigbuf, + " pixt2 = pixFMorphopGen_%d(NULL, pixt1, operation, selname);", + fileindex); + str_dwa1 = stringNew(bigbuf); + sprintf(bigbuf, + " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index);", + fileindex); + str_low_dt = stringNew(bigbuf); + sprintf(bigbuf, + " fmorphopgen_low_%d(datad, w, h, wpld, datas, wpls, index);", + fileindex); + str_low_ds = stringNew(bigbuf); + sprintf(bigbuf, + " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index+1);", + fileindex); + str_low_tsp1 = stringNew(bigbuf); + sprintf(bigbuf, + " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index);", + fileindex); + str_low_ts = stringNew(bigbuf); + sprintf(bigbuf, + " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index+1);", + fileindex); + str_low_dtp1 = stringNew(bigbuf); + + /* Make the output sa */ + sa3 = sarrayCreate(0); + + /* Copyright notice and info header */ + sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Insert function names as documentation */ + sarrayAddString(sa3, str_doc1, L_INSERT); + sarrayAddString(sa3, str_doc2, L_INSERT); + + /* Add '#include's */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Insert function prototypes */ + sarrayAddString(sa3, str_proto1, L_INSERT); + sarrayAddString(sa3, str_proto2, L_INSERT); + sarrayAddString(sa3, str_proto3, L_INSERT); + + /* Add static globals */ + sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); + sarrayAddString(sa3, bigbuf, L_COPY); + sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); + sarrayAddString(sa3, bigbuf, L_COPY); + for (i = 0; i < nsels - 1; i++) { + sprintf(bigbuf, " \"%s\",", + sarrayGetString(sa1, i, L_NOCOPY)); + sarrayAddString(sa3, bigbuf, L_COPY); + } + sprintf(bigbuf, " \"%s\"};", + sarrayGetString(sa1, i, L_NOCOPY)); + sarrayAddString(sa3, bigbuf, L_COPY); + + /* Start pixMorphDwa_*() function description */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_doc3, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Finish pixMorphDwa_*() function definition */ + sarrayAddString(sa3, str_def1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_proc1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_dwa1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Start pixFMorphopGen_*() function description */ + sarrayAddString(sa3, str_doc4, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Finish pixFMorphopGen_*() function definition */ + sarrayAddString(sa3, str_def2, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_proc2, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_dt, L_COPY); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_ds, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_tsp1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_dt, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_ts, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + sarrayAddString(sa3, str_low_dtp1, L_INSERT); + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Output to file */ + filestr = sarrayToString(sa3, 1); + nbytes = strlen(filestr); + if (filename) + snprintf(bigbuf, L_BUF_SIZE, "%s.%d.c", filename, fileindex); + else + sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); + l_binaryWrite(bigbuf, "w", filestr, nbytes); + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + LEPT_FREE(filestr); + return 0; +} + + +/* + * fmorphautogen2() + * + * Input: sela + * fileindex + * filename (; can be null) + * Return: 0 if OK; 1 on error + * + * Notes: + * (1) This function uses morphtemplate2.txt to create a + * low-level file that contains the low-level functions for + * implementing dilation and erosion for every sel + * in the input sela. + * (2) The fileindex parameter is inserted into the output + * filename, as described below. + * (3) If filename == NULL, the output file is fmorphgenlow.[n].c, + * where [n] is equal to the 'fileindex' parameter. + * (4) If filename != NULL, the output file is [filename]low.[n].c. + */ +l_int32 +fmorphautogen2(SELA *sela, + l_int32 fileindex, + const char *filename) +{ +char *filestr, *linestr, *fname; +char *str_doc1, *str_doc2, *str_doc3, *str_doc4, *str_def1; +char bigbuf[L_BUF_SIZE]; +char breakstring[] = " break;"; +char staticstring[] = "static void"; +l_int32 i, nsels, nbytes, actstart, end, newstart; +l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; +size_t size; +SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; +SEL *sel; + + PROCNAME("fmorphautogen2"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + if (fileindex < 0) + fileindex = 0; + if ((nsels = selaGetCount(sela)) == 0) + return ERROR_INT("no sels in sela", procName, 1); + + /* Make the array of textlines from morphtemplate2.txt */ + if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) + return ERROR_INT("filestr not made", procName, 1); + sa1 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + if (!sa1) + return ERROR_INT("sa1 not made", procName, 1); + + /* Make the array of static function names */ + if ((sa2 = sarrayCreate(2 * nsels)) == NULL) { + sarrayDestroy(&sa1); + return ERROR_INT("sa2 not made", procName, 1); + } + for (i = 0; i < nsels; i++) { + sprintf(bigbuf, "fdilate_%d_%d", fileindex, i); + sarrayAddString(sa2, bigbuf, L_COPY); + sprintf(bigbuf, "ferode_%d_%d", fileindex, i); + sarrayAddString(sa2, bigbuf, L_COPY); + } + + /* Make the static prototype strings */ + sa3 = sarrayCreate(2 * nsels); /* should be ok */ + for (i = 0; i < 2 * nsels; i++) { + fname = sarrayGetString(sa2, i, L_NOCOPY); + sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); + sarrayAddString(sa3, bigbuf, L_COPY); + } + + /* Make strings containing function names */ + sprintf(bigbuf, " * l_int32 fmorphopgen_low_%d()", + fileindex); + str_doc1 = stringNew(bigbuf); + sprintf(bigbuf, " * void fdilate_%d_*()", fileindex); + str_doc2 = stringNew(bigbuf); + sprintf(bigbuf, " * void ferode_%d_*()", fileindex); + str_doc3 = stringNew(bigbuf); + + /* Output to this sa */ + sa4 = sarrayCreate(0); + + /* Copyright notice and info header */ + sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Insert function names as documentation */ + sarrayAddString(sa4, str_doc1, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_doc2, L_INSERT); + sarrayAddString(sa4, str_doc3, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Insert static protos */ + for (i = 0; i < 2 * nsels; i++) { + if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) { + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + return ERROR_INT("linestr not retrieved", procName, 1); + } + sarrayAddString(sa4, linestr, L_INSERT); + } + + /* More strings with function names */ + sprintf(bigbuf, " * fmorphopgen_low_%d()", fileindex); + str_doc4 = stringNew(bigbuf); + sprintf(bigbuf, "fmorphopgen_low_%d(l_uint32 *datad,", fileindex); + str_def1 = stringNew(bigbuf); + + /* Insert function header */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_doc4, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + sarrayAddString(sa4, str_def1, L_INSERT); + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Generate and insert the dispatcher code */ + for (i = 0; i < 2 * nsels; i++) { + sprintf(bigbuf, " case %d:", i); + sarrayAddString(sa4, bigbuf, L_COPY); + sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", + sarrayGetString(sa2, i, L_NOCOPY)); + sarrayAddString(sa4, bigbuf, L_COPY); + sarrayAddString(sa4, breakstring, L_COPY); + } + + /* Finish the dispatcher and introduce the low-level code */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa4, sa1, actstart, end); + + /* Get the range for the args common to all functions */ + sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); + + /* Get the range for the loop code common to all functions */ + sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); + + /* Get the range for the ending code common to all functions */ + sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); + + /* Do all the static functions */ + for (i = 0; i < 2 * nsels; i++) { + /* Generate the function header and add the common args */ + sarrayAddString(sa4, staticstring, L_COPY); + fname = sarrayGetString(sa2, i, L_NOCOPY); + sprintf(bigbuf, "%s(l_uint32 *datad,", fname); + sarrayAddString(sa4, bigbuf, L_COPY); + sarrayAppendRange(sa4, sa1, argstart, argend); + + /* Declare and define wplsN args, as necessary */ + if ((sel = selaGetSel(sela, i/2)) == NULL) { + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + return ERROR_INT("sel not returned", procName, 1); + } + sa5 = sarrayMakeWplsCode(sel); + sarrayJoin(sa4, sa5); + sarrayDestroy(&sa5); + + /* Add the function loop code */ + sarrayAppendRange(sa4, sa1, loopstart, loopend); + + /* Insert barrel-op code for *dptr */ + sa6 = sarrayMakeInnerLoopDWACode(sel, i); + sarrayJoin(sa4, sa6); + sarrayDestroy(&sa6); + + /* Finish the function code */ + sarrayAppendRange(sa4, sa1, finalstart, finalend); + } + + /* Output to file */ + filestr = sarrayToString(sa4, 1); + nbytes = strlen(filestr); + if (filename) + snprintf(bigbuf, L_BUF_SIZE, "%slow.%d.c", filename, fileindex); + else + sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); + l_binaryWrite(bigbuf, "w", filestr, nbytes); + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + sarrayDestroy(&sa4); + LEPT_FREE(filestr); + return 0; +} + + +/*--------------------------------------------------------------------------* + * Helper code for sel * + *--------------------------------------------------------------------------*/ +/*! + * \brief sarrayMakeWplsCode() + */ +static SARRAY * +sarrayMakeWplsCode(SEL *sel) +{ +char emptystring[] = ""; +l_int32 i, j, ymax, dely, allvshifts; +l_int32 vshift[32]; +SARRAY *sa; + + PROCNAME("sarrayMakeWplsCode"); + + if (!sel) + return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); + + for (i = 0; i < 32; i++) + vshift[i] = 0; + ymax = 0; + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + if (sel->data[i][j] == 1) { + dely = L_ABS(i - sel->cy); + if (dely < 32) + vshift[dely] = 1; + ymax = L_MAX(ymax, dely); + } + } + } + if (ymax > 31) { + L_WARNING("ymax > 31; truncating to 31\n", procName); + ymax = 31; + } + + /* Test if this is a vertical brick */ + allvshifts = TRUE; + for (i = 0; i < ymax; i++) { + if (vshift[i] == 0) { + allvshifts = FALSE; + break; + } + } + + sa = sarrayCreate(0); + + /* Add declarations */ + if (allvshifts == TRUE) { /* packs them as well as possible */ + if (ymax > 4) + sarrayAddString(sa, wpldecls[2], L_COPY); + if (ymax > 8) + sarrayAddString(sa, wpldecls[6], L_COPY); + if (ymax > 12) + sarrayAddString(sa, wpldecls[10], L_COPY); + if (ymax > 16) + sarrayAddString(sa, wpldecls[14], L_COPY); + if (ymax > 20) + sarrayAddString(sa, wpldecls[18], L_COPY); + if (ymax > 24) + sarrayAddString(sa, wpldecls[22], L_COPY); + if (ymax > 28) + sarrayAddString(sa, wpldecls[26], L_COPY); + if (ymax > 1) + sarrayAddString(sa, wpldecls[ymax - 2], L_COPY); + } else { /* puts them one/line */ + for (i = 2; i <= ymax; i++) { + if (vshift[i]) + sarrayAddString(sa, wplgendecls[i - 2], L_COPY); + } + } + + sarrayAddString(sa, emptystring, L_COPY); + + /* Add definitions */ + for (i = 2; i <= ymax; i++) { + if (vshift[i]) + sarrayAddString(sa, wpldefs[i - 2], L_COPY); + } + + return sa; +} + + +/*! + * \brief sarrayMakeInnerLoopDWACode() + */ +static SARRAY * +sarrayMakeInnerLoopDWACode(SEL *sel, + l_int32 index) +{ +char *tstr, *string; +char logicalor[] = "|"; +char logicaland[] = "&"; +char bigbuf[L_BUF_SIZE]; +l_int32 i, j, optype, count, nfound, delx, dely; +SARRAY *sa; + + PROCNAME("sarrayMakeInnerLoopDWACode"); + + if (!sel) + return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); + + if (index % 2 == 0) { + optype = L_MORPH_DILATE; + tstr = logicalor; + } else { + optype = L_MORPH_ERODE; + tstr = logicaland; + } + + count = 0; + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + if (sel->data[i][j] == 1) + count++; + } + } + + sa = sarrayCreate(0); + if (count == 0) { + L_WARNING("no hits in Sel %d\n", procName, index); + return sa; /* no code inside! */ + } + + nfound = 0; + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + if (sel->data[i][j] == 1) { + nfound++; + if (optype == L_MORPH_DILATE) { + dely = sel->cy - i; + delx = sel->cx - j; + } else { /* optype == L_MORPH_ERODE */ + dely = i - sel->cy; + delx = j - sel->cx; + } + if ((string = makeBarrelshiftString(delx, dely)) == NULL) { + L_WARNING("barrel shift string not made\n", procName); + continue; + } + if (count == 1) /* just one item */ + sprintf(bigbuf, " *dptr = %s;", string); + else if (nfound == 1) + sprintf(bigbuf, " *dptr = %s %s", string, tstr); + else if (nfound < count) + sprintf(bigbuf, " %s %s", string, tstr); + else /* nfound == count */ + sprintf(bigbuf, " %s;", string); + sarrayAddString(sa, bigbuf, L_COPY); + LEPT_FREE(string); + } + } + } + + return sa; +} + + +/*! + * \brief makeBarrelshiftString() + */ +static char * +makeBarrelshiftString(l_int32 delx, /* j - cx */ + l_int32 dely) /* i - cy */ +{ +l_int32 absx, absy; +char bigbuf[L_BUF_SIZE]; + + PROCNAME("makeBarrelshiftString"); + + if (delx < -31 || delx > 31) + return (char *)ERROR_PTR("delx out of bounds", procName, NULL); + if (dely < -31 || dely > 31) + return (char *)ERROR_PTR("dely out of bounds", procName, NULL); + absx = L_ABS(delx); + absy = L_ABS(dely); + + if ((delx == 0) && (dely == 0)) + sprintf(bigbuf, "(*sptr)"); + else if ((delx == 0) && (dely < 0)) + sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); + else if ((delx == 0) && (dely > 0)) + sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); + else if ((delx < 0) && (dely == 0)) + sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", + absx, 32 - absx); + else if ((delx > 0) && (dely == 0)) + sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", + absx, 32 - absx); + else if ((delx < 0) && (dely < 0)) + sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx > 0) && (dely < 0)) + sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", + wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); + else if ((delx < 0) && (dely > 0)) + sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + else /* ((delx > 0) && (dely > 0)) */ + sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", + wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); + + return stringNew(bigbuf); +} diff --git a/3rdparty/hgOCR/leptonica/fmorphgen.1.c b/3rdparty/hgOCR/leptonica/fmorphgen.1.c new file mode 100644 index 00000000..f0bf9aec --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fmorphgen.1.c @@ -0,0 +1,277 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Top-level fast binary morphology with auto-generated sels + * + * PIX *pixMorphDwa_1() + * PIX *pixFMorphopGen_1() + */ + +#include +#include "allheaders.h" + +PIX *pixMorphDwa_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); +PIX *pixFMorphopGen_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); +l_int32 fmorphopgen_low_1(l_uint32 *datad, l_int32 w, + l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, + l_int32 index); + +static l_int32 NUM_SELS_GENERATED = 58; +static char SEL_NAMES[][80] = { + "sel_2h", + "sel_3h", + "sel_4h", + "sel_5h", + "sel_6h", + "sel_7h", + "sel_8h", + "sel_9h", + "sel_10h", + "sel_11h", + "sel_12h", + "sel_13h", + "sel_14h", + "sel_15h", + "sel_20h", + "sel_21h", + "sel_25h", + "sel_30h", + "sel_31h", + "sel_35h", + "sel_40h", + "sel_41h", + "sel_45h", + "sel_50h", + "sel_51h", + "sel_2v", + "sel_3v", + "sel_4v", + "sel_5v", + "sel_6v", + "sel_7v", + "sel_8v", + "sel_9v", + "sel_10v", + "sel_11v", + "sel_12v", + "sel_13v", + "sel_14v", + "sel_15v", + "sel_20v", + "sel_21v", + "sel_25v", + "sel_30v", + "sel_31v", + "sel_35v", + "sel_40v", + "sel_41v", + "sel_45v", + "sel_50v", + "sel_51v", + "sel_2", + "sel_3", + "sel_4", + "sel_5", + "sel_2dp", + "sel_2dm", + "sel_5dp", + "sel_5dm"}; + +/*! + * \brief pixMorphDwa_1() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, + * L_MORPH_OPEN, L_MORPH_CLOSE + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This simply adds a border, calls the appropriate
+ *          pixFMorphopGen_*(), and removes the border.
+ *          See the notes for that function.
+ *      (2) The size of the border depends on the operation
+ *          and the boundary conditions.
+ * 
+ */ +PIX * +pixMorphDwa_1(PIX *pixd, + PIX *pixs, + l_int32 operation, + char *selname) +{ +l_int32 bordercolor, bordersize; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixMorphDwa_1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + /* Set the border size */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + bordersize = 32; + if (bordercolor == 0 && operation == L_MORPH_CLOSE) + bordersize += 32; + + pixt1 = pixAddBorder(pixs, bordersize, 0); + pixt2 = pixFMorphopGen_1(NULL, pixt1, operation, selname); + pixt3 = pixRemoveBorder(pixt2, bordersize); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixCopy(pixd, pixt3); + pixDestroy(&pixt3); + return pixd; +} + + +/*! + * \brief pixFMorphopGen_1() + * + * \param[in] pixd usual 3 choices: null, == pixs, != pixs + * \param[in] pixs 1 bpp + * \param[in] operation L_MORPH_DILATE, L_MORPH_ERODE, + * L_MORPH_OPEN, L_MORPH_CLOSE + * \param[in] sel name + * \return pixd + * + *
+ * Notes:
+ *      (1) This is a dwa operation, and the Sels must be limited in
+ *          size to not more than 31 pixels about the origin.
+ *      (2) A border of appropriate size (32 pixels, or 64 pixels
+ *          for safe closing with asymmetric b.c.) must be added before
+ *          this function is called.
+ *      (3) This handles all required setting of the border pixels
+ *          before erosion and dilation.
+ *      (4) The closing operation is safe; no pixels can be removed
+ *          near the boundary.
+ * 
+ */ +PIX * +pixFMorphopGen_1(PIX *pixd, + PIX *pixs, + l_int32 operation, + char *selname) +{ +l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; +l_uint32 *datad, *datas, *datat; +PIX *pixt; + + PROCNAME("pixFMorphopGen_1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); + + /* Get boundary colors to use */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + if (bordercolor == 1) + erodeop = PIX_SET; + else + erodeop = PIX_CLR; + + found = FALSE; + for (i = 0; i < NUM_SELS_GENERATED; i++) { + if (strcmp(selname, SEL_NAMES[i]) == 0) { + found = TRUE; + index = 2 * i; + break; + } + } + if (found == FALSE) + return (PIX *)ERROR_PTR("sel index not found", procName, pixd); + + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + else /* for in-place or pre-allocated */ + pixResizeImageData(pixd, pixs); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + /* The images must be surrounded, in advance, with a border of + * size 32 pixels (or 64, for closing), that we'll read from. + * Fabricate a "proper" image as the subimage within the 32 + * pixel border, having the following parameters: */ + w = pixGetWidth(pixs) - 64; + h = pixGetHeight(pixs) - 64; + datas = pixGetData(pixs) + 32 * wpls + 1; + datad = pixGetData(pixd) + 32 * wpld + 1; + + if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { + borderop = PIX_CLR; + if (operation == L_MORPH_ERODE) { + borderop = erodeop; + index++; + } + if (pixd == pixs) { /* in-place; generate a temp image */ + if ((pixt = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + 32 * wpls + 1; + pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); + fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); + pixDestroy(&pixt); + } + else { /* not in-place */ + pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); + fmorphopgen_low_1(datad, w, h, wpld, datas, wpls, index); + } + } + else { /* opening or closing; generate a temp image */ + if ((pixt = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + datat = pixGetData(pixt) + 32 * wpls + 1; + if (operation == L_MORPH_OPEN) { + pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); + fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index+1); + pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); + fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); + } + else { /* closing */ + pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); + fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index); + pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); + fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index+1); + } + pixDestroy(&pixt); + } + + return pixd; +} + diff --git a/3rdparty/hgOCR/leptonica/fmorphgenlow.1.c b/3rdparty/hgOCR/leptonica/fmorphgenlow.1.c new file mode 100644 index 00000000..dd43da2e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fmorphgenlow.1.c @@ -0,0 +1,5862 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * Low-level fast binary morphology with auto-generated sels + * + * Dispatcher: + * l_int32 fmorphopgen_low_1() + * + * Static Low-level: + * void fdilate_1_*() + * void ferode_1_*() + */ + +#include "allheaders.h" + +static void fdilate_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void fdilate_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); +static void ferode_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); + + +/*---------------------------------------------------------------------* + * Fast morph dispatcher * + *---------------------------------------------------------------------*/ +/*! + * fmorphopgen_low_1() + * + * a dispatcher to appropriate low-level code + */ +l_int32 +fmorphopgen_low_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 index) +{ + + switch (index) + { + case 0: + fdilate_1_0(datad, w, h, wpld, datas, wpls); + break; + case 1: + ferode_1_0(datad, w, h, wpld, datas, wpls); + break; + case 2: + fdilate_1_1(datad, w, h, wpld, datas, wpls); + break; + case 3: + ferode_1_1(datad, w, h, wpld, datas, wpls); + break; + case 4: + fdilate_1_2(datad, w, h, wpld, datas, wpls); + break; + case 5: + ferode_1_2(datad, w, h, wpld, datas, wpls); + break; + case 6: + fdilate_1_3(datad, w, h, wpld, datas, wpls); + break; + case 7: + ferode_1_3(datad, w, h, wpld, datas, wpls); + break; + case 8: + fdilate_1_4(datad, w, h, wpld, datas, wpls); + break; + case 9: + ferode_1_4(datad, w, h, wpld, datas, wpls); + break; + case 10: + fdilate_1_5(datad, w, h, wpld, datas, wpls); + break; + case 11: + ferode_1_5(datad, w, h, wpld, datas, wpls); + break; + case 12: + fdilate_1_6(datad, w, h, wpld, datas, wpls); + break; + case 13: + ferode_1_6(datad, w, h, wpld, datas, wpls); + break; + case 14: + fdilate_1_7(datad, w, h, wpld, datas, wpls); + break; + case 15: + ferode_1_7(datad, w, h, wpld, datas, wpls); + break; + case 16: + fdilate_1_8(datad, w, h, wpld, datas, wpls); + break; + case 17: + ferode_1_8(datad, w, h, wpld, datas, wpls); + break; + case 18: + fdilate_1_9(datad, w, h, wpld, datas, wpls); + break; + case 19: + ferode_1_9(datad, w, h, wpld, datas, wpls); + break; + case 20: + fdilate_1_10(datad, w, h, wpld, datas, wpls); + break; + case 21: + ferode_1_10(datad, w, h, wpld, datas, wpls); + break; + case 22: + fdilate_1_11(datad, w, h, wpld, datas, wpls); + break; + case 23: + ferode_1_11(datad, w, h, wpld, datas, wpls); + break; + case 24: + fdilate_1_12(datad, w, h, wpld, datas, wpls); + break; + case 25: + ferode_1_12(datad, w, h, wpld, datas, wpls); + break; + case 26: + fdilate_1_13(datad, w, h, wpld, datas, wpls); + break; + case 27: + ferode_1_13(datad, w, h, wpld, datas, wpls); + break; + case 28: + fdilate_1_14(datad, w, h, wpld, datas, wpls); + break; + case 29: + ferode_1_14(datad, w, h, wpld, datas, wpls); + break; + case 30: + fdilate_1_15(datad, w, h, wpld, datas, wpls); + break; + case 31: + ferode_1_15(datad, w, h, wpld, datas, wpls); + break; + case 32: + fdilate_1_16(datad, w, h, wpld, datas, wpls); + break; + case 33: + ferode_1_16(datad, w, h, wpld, datas, wpls); + break; + case 34: + fdilate_1_17(datad, w, h, wpld, datas, wpls); + break; + case 35: + ferode_1_17(datad, w, h, wpld, datas, wpls); + break; + case 36: + fdilate_1_18(datad, w, h, wpld, datas, wpls); + break; + case 37: + ferode_1_18(datad, w, h, wpld, datas, wpls); + break; + case 38: + fdilate_1_19(datad, w, h, wpld, datas, wpls); + break; + case 39: + ferode_1_19(datad, w, h, wpld, datas, wpls); + break; + case 40: + fdilate_1_20(datad, w, h, wpld, datas, wpls); + break; + case 41: + ferode_1_20(datad, w, h, wpld, datas, wpls); + break; + case 42: + fdilate_1_21(datad, w, h, wpld, datas, wpls); + break; + case 43: + ferode_1_21(datad, w, h, wpld, datas, wpls); + break; + case 44: + fdilate_1_22(datad, w, h, wpld, datas, wpls); + break; + case 45: + ferode_1_22(datad, w, h, wpld, datas, wpls); + break; + case 46: + fdilate_1_23(datad, w, h, wpld, datas, wpls); + break; + case 47: + ferode_1_23(datad, w, h, wpld, datas, wpls); + break; + case 48: + fdilate_1_24(datad, w, h, wpld, datas, wpls); + break; + case 49: + ferode_1_24(datad, w, h, wpld, datas, wpls); + break; + case 50: + fdilate_1_25(datad, w, h, wpld, datas, wpls); + break; + case 51: + ferode_1_25(datad, w, h, wpld, datas, wpls); + break; + case 52: + fdilate_1_26(datad, w, h, wpld, datas, wpls); + break; + case 53: + ferode_1_26(datad, w, h, wpld, datas, wpls); + break; + case 54: + fdilate_1_27(datad, w, h, wpld, datas, wpls); + break; + case 55: + ferode_1_27(datad, w, h, wpld, datas, wpls); + break; + case 56: + fdilate_1_28(datad, w, h, wpld, datas, wpls); + break; + case 57: + ferode_1_28(datad, w, h, wpld, datas, wpls); + break; + case 58: + fdilate_1_29(datad, w, h, wpld, datas, wpls); + break; + case 59: + ferode_1_29(datad, w, h, wpld, datas, wpls); + break; + case 60: + fdilate_1_30(datad, w, h, wpld, datas, wpls); + break; + case 61: + ferode_1_30(datad, w, h, wpld, datas, wpls); + break; + case 62: + fdilate_1_31(datad, w, h, wpld, datas, wpls); + break; + case 63: + ferode_1_31(datad, w, h, wpld, datas, wpls); + break; + case 64: + fdilate_1_32(datad, w, h, wpld, datas, wpls); + break; + case 65: + ferode_1_32(datad, w, h, wpld, datas, wpls); + break; + case 66: + fdilate_1_33(datad, w, h, wpld, datas, wpls); + break; + case 67: + ferode_1_33(datad, w, h, wpld, datas, wpls); + break; + case 68: + fdilate_1_34(datad, w, h, wpld, datas, wpls); + break; + case 69: + ferode_1_34(datad, w, h, wpld, datas, wpls); + break; + case 70: + fdilate_1_35(datad, w, h, wpld, datas, wpls); + break; + case 71: + ferode_1_35(datad, w, h, wpld, datas, wpls); + break; + case 72: + fdilate_1_36(datad, w, h, wpld, datas, wpls); + break; + case 73: + ferode_1_36(datad, w, h, wpld, datas, wpls); + break; + case 74: + fdilate_1_37(datad, w, h, wpld, datas, wpls); + break; + case 75: + ferode_1_37(datad, w, h, wpld, datas, wpls); + break; + case 76: + fdilate_1_38(datad, w, h, wpld, datas, wpls); + break; + case 77: + ferode_1_38(datad, w, h, wpld, datas, wpls); + break; + case 78: + fdilate_1_39(datad, w, h, wpld, datas, wpls); + break; + case 79: + ferode_1_39(datad, w, h, wpld, datas, wpls); + break; + case 80: + fdilate_1_40(datad, w, h, wpld, datas, wpls); + break; + case 81: + ferode_1_40(datad, w, h, wpld, datas, wpls); + break; + case 82: + fdilate_1_41(datad, w, h, wpld, datas, wpls); + break; + case 83: + ferode_1_41(datad, w, h, wpld, datas, wpls); + break; + case 84: + fdilate_1_42(datad, w, h, wpld, datas, wpls); + break; + case 85: + ferode_1_42(datad, w, h, wpld, datas, wpls); + break; + case 86: + fdilate_1_43(datad, w, h, wpld, datas, wpls); + break; + case 87: + ferode_1_43(datad, w, h, wpld, datas, wpls); + break; + case 88: + fdilate_1_44(datad, w, h, wpld, datas, wpls); + break; + case 89: + ferode_1_44(datad, w, h, wpld, datas, wpls); + break; + case 90: + fdilate_1_45(datad, w, h, wpld, datas, wpls); + break; + case 91: + ferode_1_45(datad, w, h, wpld, datas, wpls); + break; + case 92: + fdilate_1_46(datad, w, h, wpld, datas, wpls); + break; + case 93: + ferode_1_46(datad, w, h, wpld, datas, wpls); + break; + case 94: + fdilate_1_47(datad, w, h, wpld, datas, wpls); + break; + case 95: + ferode_1_47(datad, w, h, wpld, datas, wpls); + break; + case 96: + fdilate_1_48(datad, w, h, wpld, datas, wpls); + break; + case 97: + ferode_1_48(datad, w, h, wpld, datas, wpls); + break; + case 98: + fdilate_1_49(datad, w, h, wpld, datas, wpls); + break; + case 99: + ferode_1_49(datad, w, h, wpld, datas, wpls); + break; + case 100: + fdilate_1_50(datad, w, h, wpld, datas, wpls); + break; + case 101: + ferode_1_50(datad, w, h, wpld, datas, wpls); + break; + case 102: + fdilate_1_51(datad, w, h, wpld, datas, wpls); + break; + case 103: + ferode_1_51(datad, w, h, wpld, datas, wpls); + break; + case 104: + fdilate_1_52(datad, w, h, wpld, datas, wpls); + break; + case 105: + ferode_1_52(datad, w, h, wpld, datas, wpls); + break; + case 106: + fdilate_1_53(datad, w, h, wpld, datas, wpls); + break; + case 107: + ferode_1_53(datad, w, h, wpld, datas, wpls); + break; + case 108: + fdilate_1_54(datad, w, h, wpld, datas, wpls); + break; + case 109: + ferode_1_54(datad, w, h, wpld, datas, wpls); + break; + case 110: + fdilate_1_55(datad, w, h, wpld, datas, wpls); + break; + case 111: + ferode_1_55(datad, w, h, wpld, datas, wpls); + break; + case 112: + fdilate_1_56(datad, w, h, wpld, datas, wpls); + break; + case 113: + ferode_1_56(datad, w, h, wpld, datas, wpls); + break; + case 114: + fdilate_1_57(datad, w, h, wpld, datas, wpls); + break; + case 115: + ferode_1_57(datad, w, h, wpld, datas, wpls); + break; + } + + return 0; +} + + +/*--------------------------------------------------------------------------* + * Low-level auto-generated static routines * + *--------------------------------------------------------------------------*/ +/* + * N.B. In all the low-level routines, the part of the image + * that is accessed has been clipped by 32 pixels on + * all four sides. This is done in the higher level + * code by redefining w and h smaller and by moving the + * start-of-image pointers up to the beginning of this + * interior rectangle. + */ +static void +fdilate_1_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr); + } + } +} + +static void +ferode_1_0(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr); + } + } +} + +static void +fdilate_1_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)); + } + } +} + +static void +ferode_1_1(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)); + } + } +} + +static void +fdilate_1_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)); + } + } +} + +static void +ferode_1_2(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)); + } + } +} + +static void +fdilate_1_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)); + } + } +} + +static void +ferode_1_3(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)); + } + } +} + +static void +fdilate_1_4(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)); + } + } +} + +static void +ferode_1_4(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)); + } + } +} + +static void +fdilate_1_5(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)); + } + } +} + +static void +ferode_1_5(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)); + } + } +} + +static void +fdilate_1_6(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)); + } + } +} + +static void +ferode_1_6(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)); + } + } +} + +static void +fdilate_1_7(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)); + } + } +} + +static void +ferode_1_7(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)); + } + } +} + +static void +fdilate_1_8(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)); + } + } +} + +static void +ferode_1_8(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)); + } + } +} + +static void +fdilate_1_9(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)); + } + } +} + +static void +ferode_1_9(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)); + } + } +} + +static void +fdilate_1_10(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)); + } + } +} + +static void +ferode_1_10(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)); + } + } +} + +static void +fdilate_1_11(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)); + } + } +} + +static void +ferode_1_11(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)); + } + } +} + +static void +fdilate_1_12(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)); + } + } +} + +static void +ferode_1_12(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)); + } + } +} + +static void +fdilate_1_13(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)); + } + } +} + +static void +ferode_1_13(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)); + } + } +} + +static void +fdilate_1_14(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)); + } + } +} + +static void +ferode_1_14(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)); + } + } +} + +static void +fdilate_1_15(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)); + } + } +} + +static void +ferode_1_15(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)); + } + } +} + +static void +fdilate_1_16(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)); + } + } +} + +static void +ferode_1_16(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)); + } + } +} + +static void +fdilate_1_17(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)); + } + } +} + +static void +ferode_1_17(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)); + } + } +} + +static void +fdilate_1_18(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)); + } + } +} + +static void +ferode_1_18(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)); + } + } +} + +static void +fdilate_1_19(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)); + } + } +} + +static void +ferode_1_19(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)); + } + } +} + +static void +fdilate_1_20(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)); + } + } +} + +static void +ferode_1_20(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)); + } + } +} + +static void +fdilate_1_21(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)); + } + } +} + +static void +ferode_1_21(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)); + } + } +} + +static void +fdilate_1_22(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | + ((*(sptr) >> 22) | (*(sptr - 1) << 10)); + } + } +} + +static void +ferode_1_22(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & + ((*(sptr) << 22) | (*(sptr + 1) >> 10)); + } + } +} + +static void +fdilate_1_23(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | + ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | + ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | + ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | + ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | + ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | + ((*(sptr) >> 24) | (*(sptr - 1) << 8)); + } + } +} + +static void +ferode_1_23(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & + ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & + ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & + ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & + ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & + ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & + ((*(sptr) << 24) | (*(sptr + 1) >> 8)); + } + } +} + +static void +fdilate_1_24(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | + ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | + ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | + ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | + ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | + ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | + ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | + ((*(sptr) >> 25) | (*(sptr - 1) << 7)); + } + } +} + +static void +ferode_1_24(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & + ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & + ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & + ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & + ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & + ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & + ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & + ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & + ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & + ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & + ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & + ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & + ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & + ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & + ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & + ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & + ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & + ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & + ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & + ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & + ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & + ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & + ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & + ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & + ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & + ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & + ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & + ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & + ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & + ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & + ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & + ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & + ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & + ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & + ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & + ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & + ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & + ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & + ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & + ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & + ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & + ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & + ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & + ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & + ((*(sptr) << 25) | (*(sptr + 1) >> 7)); + } + } +} + +static void +fdilate_1_25(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls)) | + (*sptr); + } + } +} + +static void +ferode_1_25(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls)) & + (*sptr); + } + } +} + +static void +fdilate_1_26(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)); + } + } +} + +static void +ferode_1_26(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)); + } + } +} + +static void +fdilate_1_27(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)); + } + } +} + +static void +ferode_1_27(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)); + } + } +} + +static void +fdilate_1_28(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)); + } + } +} + +static void +ferode_1_28(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)); + } + } +} + +static void +fdilate_1_29(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)); + } + } +} + +static void +ferode_1_29(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)); + } + } +} + +static void +fdilate_1_30(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)); + } + } +} + +static void +ferode_1_30(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)); + } + } +} + +static void +fdilate_1_31(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)); + } + } +} + +static void +ferode_1_31(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)); + } + } +} + +static void +fdilate_1_32(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)); + } + } +} + +static void +ferode_1_32(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)); + } + } +} + +static void +fdilate_1_33(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)); + } + } +} + +static void +ferode_1_33(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)); + } + } +} + +static void +fdilate_1_34(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)); + } + } +} + +static void +ferode_1_34(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)); + } + } +} + +static void +fdilate_1_35(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)); + } + } +} + +static void +ferode_1_35(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)); + } + } +} + +static void +fdilate_1_36(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)); + } + } +} + +static void +ferode_1_36(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)); + } + } +} + +static void +fdilate_1_37(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)); + } + } +} + +static void +ferode_1_37(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)); + } + } +} + +static void +fdilate_1_38(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)); + } + } +} + +static void +ferode_1_38(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)); + } + } +} + +static void +fdilate_1_39(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)); + } + } +} + +static void +ferode_1_39(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)); + } + } +} + +static void +fdilate_1_40(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)); + } + } +} + +static void +ferode_1_40(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)); + } + } +} + +static void +fdilate_1_41(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)); + } + } +} + +static void +ferode_1_41(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)); + } + } +} + +static void +fdilate_1_42(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)); + } + } +} + +static void +ferode_1_42(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)); + } + } +} + +static void +fdilate_1_43(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)); + } + } +} + +static void +ferode_1_43(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)); + } + } +} + +static void +fdilate_1_44(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)); + } + } +} + +static void +ferode_1_44(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)); + } + } +} + +static void +fdilate_1_45(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls20)) | + (*(sptr + wpls19)) | + (*(sptr + wpls18)) | + (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)) | + (*(sptr - wpls18)) | + (*(sptr - wpls19)); + } + } +} + +static void +ferode_1_45(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls20)) & + (*(sptr - wpls19)) & + (*(sptr - wpls18)) & + (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)) & + (*(sptr + wpls18)) & + (*(sptr + wpls19)); + } + } +} + +static void +fdilate_1_46(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls20)) | + (*(sptr + wpls19)) | + (*(sptr + wpls18)) | + (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)) | + (*(sptr - wpls18)) | + (*(sptr - wpls19)) | + (*(sptr - wpls20)); + } + } +} + +static void +ferode_1_46(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls20)) & + (*(sptr - wpls19)) & + (*(sptr - wpls18)) & + (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)) & + (*(sptr + wpls18)) & + (*(sptr + wpls19)) & + (*(sptr + wpls20)); + } + } +} + +static void +fdilate_1_47(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls22)) | + (*(sptr + wpls21)) | + (*(sptr + wpls20)) | + (*(sptr + wpls19)) | + (*(sptr + wpls18)) | + (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)) | + (*(sptr - wpls18)) | + (*(sptr - wpls19)) | + (*(sptr - wpls20)) | + (*(sptr - wpls21)) | + (*(sptr - wpls22)); + } + } +} + +static void +ferode_1_47(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls22)) & + (*(sptr - wpls21)) & + (*(sptr - wpls20)) & + (*(sptr - wpls19)) & + (*(sptr - wpls18)) & + (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)) & + (*(sptr + wpls18)) & + (*(sptr + wpls19)) & + (*(sptr + wpls20)) & + (*(sptr + wpls21)) & + (*(sptr + wpls22)); + } + } +} + +static void +fdilate_1_48(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22, wpls23, wpls24; +l_int32 wpls25; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + wpls24 = 24 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls25)) | + (*(sptr + wpls24)) | + (*(sptr + wpls23)) | + (*(sptr + wpls22)) | + (*(sptr + wpls21)) | + (*(sptr + wpls20)) | + (*(sptr + wpls19)) | + (*(sptr + wpls18)) | + (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)) | + (*(sptr - wpls18)) | + (*(sptr - wpls19)) | + (*(sptr - wpls20)) | + (*(sptr - wpls21)) | + (*(sptr - wpls22)) | + (*(sptr - wpls23)) | + (*(sptr - wpls24)); + } + } +} + +static void +ferode_1_48(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22, wpls23, wpls24; +l_int32 wpls25; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + wpls24 = 24 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls25)) & + (*(sptr - wpls24)) & + (*(sptr - wpls23)) & + (*(sptr - wpls22)) & + (*(sptr - wpls21)) & + (*(sptr - wpls20)) & + (*(sptr - wpls19)) & + (*(sptr - wpls18)) & + (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)) & + (*(sptr + wpls18)) & + (*(sptr + wpls19)) & + (*(sptr + wpls20)) & + (*(sptr + wpls21)) & + (*(sptr + wpls22)) & + (*(sptr + wpls23)) & + (*(sptr + wpls24)); + } + } +} + +static void +fdilate_1_49(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22, wpls23, wpls24; +l_int32 wpls25; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + wpls24 = 24 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr + wpls25)) | + (*(sptr + wpls24)) | + (*(sptr + wpls23)) | + (*(sptr + wpls22)) | + (*(sptr + wpls21)) | + (*(sptr + wpls20)) | + (*(sptr + wpls19)) | + (*(sptr + wpls18)) | + (*(sptr + wpls17)) | + (*(sptr + wpls16)) | + (*(sptr + wpls15)) | + (*(sptr + wpls14)) | + (*(sptr + wpls13)) | + (*(sptr + wpls12)) | + (*(sptr + wpls11)) | + (*(sptr + wpls10)) | + (*(sptr + wpls9)) | + (*(sptr + wpls8)) | + (*(sptr + wpls7)) | + (*(sptr + wpls6)) | + (*(sptr + wpls5)) | + (*(sptr + wpls4)) | + (*(sptr + wpls3)) | + (*(sptr + wpls2)) | + (*(sptr + wpls)) | + (*sptr) | + (*(sptr - wpls)) | + (*(sptr - wpls2)) | + (*(sptr - wpls3)) | + (*(sptr - wpls4)) | + (*(sptr - wpls5)) | + (*(sptr - wpls6)) | + (*(sptr - wpls7)) | + (*(sptr - wpls8)) | + (*(sptr - wpls9)) | + (*(sptr - wpls10)) | + (*(sptr - wpls11)) | + (*(sptr - wpls12)) | + (*(sptr - wpls13)) | + (*(sptr - wpls14)) | + (*(sptr - wpls15)) | + (*(sptr - wpls16)) | + (*(sptr - wpls17)) | + (*(sptr - wpls18)) | + (*(sptr - wpls19)) | + (*(sptr - wpls20)) | + (*(sptr - wpls21)) | + (*(sptr - wpls22)) | + (*(sptr - wpls23)) | + (*(sptr - wpls24)) | + (*(sptr - wpls25)); + } + } +} + +static void +ferode_1_49(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2, wpls3, wpls4; +l_int32 wpls5, wpls6, wpls7, wpls8; +l_int32 wpls9, wpls10, wpls11, wpls12; +l_int32 wpls13, wpls14, wpls15, wpls16; +l_int32 wpls17, wpls18, wpls19, wpls20; +l_int32 wpls21, wpls22, wpls23, wpls24; +l_int32 wpls25; + + wpls2 = 2 * wpls; + wpls3 = 3 * wpls; + wpls4 = 4 * wpls; + wpls5 = 5 * wpls; + wpls6 = 6 * wpls; + wpls7 = 7 * wpls; + wpls8 = 8 * wpls; + wpls9 = 9 * wpls; + wpls10 = 10 * wpls; + wpls11 = 11 * wpls; + wpls12 = 12 * wpls; + wpls13 = 13 * wpls; + wpls14 = 14 * wpls; + wpls15 = 15 * wpls; + wpls16 = 16 * wpls; + wpls17 = 17 * wpls; + wpls18 = 18 * wpls; + wpls19 = 19 * wpls; + wpls20 = 20 * wpls; + wpls21 = 21 * wpls; + wpls22 = 22 * wpls; + wpls23 = 23 * wpls; + wpls24 = 24 * wpls; + wpls25 = 25 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*(sptr - wpls25)) & + (*(sptr - wpls24)) & + (*(sptr - wpls23)) & + (*(sptr - wpls22)) & + (*(sptr - wpls21)) & + (*(sptr - wpls20)) & + (*(sptr - wpls19)) & + (*(sptr - wpls18)) & + (*(sptr - wpls17)) & + (*(sptr - wpls16)) & + (*(sptr - wpls15)) & + (*(sptr - wpls14)) & + (*(sptr - wpls13)) & + (*(sptr - wpls12)) & + (*(sptr - wpls11)) & + (*(sptr - wpls10)) & + (*(sptr - wpls9)) & + (*(sptr - wpls8)) & + (*(sptr - wpls7)) & + (*(sptr - wpls6)) & + (*(sptr - wpls5)) & + (*(sptr - wpls4)) & + (*(sptr - wpls3)) & + (*(sptr - wpls2)) & + (*(sptr - wpls)) & + (*sptr) & + (*(sptr + wpls)) & + (*(sptr + wpls2)) & + (*(sptr + wpls3)) & + (*(sptr + wpls4)) & + (*(sptr + wpls5)) & + (*(sptr + wpls6)) & + (*(sptr + wpls7)) & + (*(sptr + wpls8)) & + (*(sptr + wpls9)) & + (*(sptr + wpls10)) & + (*(sptr + wpls11)) & + (*(sptr + wpls12)) & + (*(sptr + wpls13)) & + (*(sptr + wpls14)) & + (*(sptr + wpls15)) & + (*(sptr + wpls16)) & + (*(sptr + wpls17)) & + (*(sptr + wpls18)) & + (*(sptr + wpls19)) & + (*(sptr + wpls20)) & + (*(sptr + wpls21)) & + (*(sptr + wpls22)) & + (*(sptr + wpls23)) & + (*(sptr + wpls24)) & + (*(sptr + wpls25)); + } + } +} + +static void +fdilate_1_50(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | + (*(sptr + wpls)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr); + } + } +} + +static void +ferode_1_50(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + (*(sptr - wpls)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr); + } + } +} + +static void +fdilate_1_51(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | + (*(sptr + wpls)) | + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | + (*(sptr - wpls)) | + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); + } + } +} + +static void +ferode_1_51(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + (*(sptr - wpls)) & + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & + (*(sptr + wpls)) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fdilate_1_52(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | + ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | + (*(sptr + wpls2)) | + ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | + ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | + (*(sptr + wpls)) | + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | + (*(sptr - wpls)) | + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); + } + } +} + +static void +ferode_1_52(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & + ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & + (*(sptr - wpls2)) & + ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & + ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + (*(sptr - wpls)) & + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & + (*(sptr + wpls)) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fdilate_1_53(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | + ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | + (*(sptr + wpls2)) | + ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | + ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | + ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | + (*(sptr + wpls)) | + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | + ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) | + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | + (*sptr) | + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | + ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | + (*(sptr - wpls)) | + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | + ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) | + ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) | + ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) | + (*(sptr - wpls2)) | + ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) | + ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); + } + } +} + +static void +ferode_1_53(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & + ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & + (*(sptr - wpls2)) & + ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & + ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & + ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + (*(sptr - wpls)) & + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & + ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & + ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & + ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & + (*sptr) & + ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & + ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & + (*(sptr + wpls)) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & + ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & + ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & + ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & + (*(sptr + wpls2)) & + ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & + ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); + } + } +} + +static void +fdilate_1_54(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | + (*(sptr - wpls)); + } + } +} + +static void +ferode_1_54(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & + (*(sptr + wpls)); + } + } +} + +static void +fdilate_1_55(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr) | + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); + } + } +} + +static void +ferode_1_55(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; + + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = (*sptr) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); + } + } +} + +static void +fdilate_1_56(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | + (*sptr) | + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | + ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)); + } + } +} + +static void +ferode_1_56(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & + ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & + (*sptr) & + ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & + ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)); + } + } +} + +static void +fdilate_1_57(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | + (*sptr) | + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | + ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); + } + } +} + +static void +ferode_1_57(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls) +{ +l_int32 i; +l_int32 j, pwpls; +l_uint32 *sptr, *dptr; +l_int32 wpls2; + + wpls2 = 2 * wpls; + pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ + + for (i = 0; i < h; i++) { + sptr = datas + i * wpls; + dptr = datad + i * wpld; + for (j = 0; j < pwpls; j++, sptr++, dptr++) { + *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & + ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & + (*sptr) & + ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & + ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); + } + } +} + diff --git a/3rdparty/hgOCR/leptonica/fpix1.c b/3rdparty/hgOCR/leptonica/fpix1.c new file mode 100644 index 00000000..5c24f5e9 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fpix1.c @@ -0,0 +1,2339 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file fpix1.c + *
+ *
+ *    ---------------------------------------------------
+ *    This file has these FPix, FPixa and DPix utilities:
+ *         - creation and destruction
+ *         - accessors
+ *         - serialization and deserialization
+ *    ---------------------------------------------------
+ *
+ *    FPix Create/copy/destroy
+ *          FPIX          *fpixCreate()
+ *          FPIX          *fpixCreateTemplate()
+ *          FPIX          *fpixClone()
+ *          FPIX          *fpixCopy()
+ *          l_int32        fpixResizeImageData()
+ *          void           fpixDestroy()
+ *
+ *    FPix accessors
+ *          l_int32        fpixGetDimensions()
+ *          l_int32        fpixSetDimensions()
+ *          l_int32        fpixGetWpl()
+ *          l_int32        fpixSetWpl()
+ *          l_int32        fpixGetRefcount()
+ *          l_int32        fpixChangeRefcount()
+ *          l_int32        fpixGetResolution()
+ *          l_int32        fpixSetResolution()
+ *          l_int32        fpixCopyResolution()
+ *          l_float32     *fpixGetData()
+ *          l_int32        fpixSetData()
+ *          l_int32        fpixGetPixel()
+ *          l_int32        fpixSetPixel()
+ *
+ *    FPixa Create/copy/destroy
+ *          FPIXA         *fpixaCreate()
+ *          FPIXA         *fpixaCopy()
+ *          void           fpixaDestroy()
+ *
+ *    FPixa addition
+ *          l_int32        fpixaAddFPix()
+ *          static l_int32 fpixaExtendArray()
+ *          static l_int32 fpixaExtendArrayToSize()
+ *
+ *    FPixa accessors
+ *          l_int32        fpixaGetCount()
+ *          l_int32        fpixaChangeRefcount()
+ *          FPIX          *fpixaGetFPix()
+ *          l_int32        fpixaGetFPixDimensions()
+ *          l_float32     *fpixaGetData()
+ *          l_int32        fpixaGetPixel()
+ *          l_int32        fpixaSetPixel()
+ *
+ *    DPix Create/copy/destroy
+ *          DPIX          *dpixCreate()
+ *          DPIX          *dpixCreateTemplate()
+ *          DPIX          *dpixClone()
+ *          DPIX          *dpixCopy()
+ *          l_int32        dpixResizeImageData()
+ *          void           dpixDestroy()
+ *
+ *    DPix accessors
+ *          l_int32        dpixGetDimensions()
+ *          l_int32        dpixSetDimensions()
+ *          l_int32        dpixGetWpl()
+ *          l_int32        dpixSetWpl()
+ *          l_int32        dpixGetRefcount()
+ *          l_int32        dpixChangeRefcount()
+ *          l_int32        dpixGetResolution()
+ *          l_int32        dpixSetResolution()
+ *          l_int32        dpixCopyResolution()
+ *          l_float64     *dpixGetData()
+ *          l_int32        dpixSetData()
+ *          l_int32        dpixGetPixel()
+ *          l_int32        dpixSetPixel()
+ *
+ *    FPix serialized I/O
+ *          FPIX          *fpixRead()
+ *          FPIX          *fpixReadStream()
+ *          FPIX          *fpixReadMem()
+ *          l_int32        fpixWrite()
+ *          l_int32        fpixWriteStream()
+ *          l_int32        fpixWriteMem()
+ *          FPIX          *fpixEndianByteSwap()
+ *
+ *    DPix serialized I/O
+ *          DPIX          *dpixRead()
+ *          DPIX          *dpixReadStream()
+ *          DPIX          *dpixReadMem()
+ *          l_int32        dpixWrite()
+ *          l_int32        dpixWriteStream()
+ *          l_int32        dpixWriteMem()
+ *          DPIX          *dpixEndianByteSwap()
+ *
+ *    Print FPix (subsampled, for debugging)
+ *          l_int32        fpixPrintStream()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 fpixaExtendArray(FPIXA *fpixa); +static l_int32 fpixaExtendArrayToSize(FPIXA *fpixa, l_int32 size); + + +/*--------------------------------------------------------------------* + * FPix Create/copy/destroy * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixCreate() + * + * \param[in] width, height + * \return fpixd with data allocated and initialized to 0, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a FPix of specified size, with the data array
+ *          allocated and initialized to 0.
+ *      (2) The number of pixels must be less than 2^29.
+ * 
+ */ +FPIX * +fpixCreate(l_int32 width, + l_int32 height) +{ +l_float32 *data; +l_uint64 npix64; +FPIX *fpixd; + + PROCNAME("fpixCreate"); + + if (width <= 0) + return (FPIX *)ERROR_PTR("width must be > 0", procName, NULL); + if (height <= 0) + return (FPIX *)ERROR_PTR("height must be > 0", procName, NULL); + + /* Avoid overflow in malloc arg, malicious or otherwise */ + npix64 = (l_uint64)width * (l_uint64)height; /* # of 4-byte pixels */ + if (npix64 >= (1LL << 29)) { + L_ERROR("requested w = %d, h = %d\n", procName, width, height); + return (FPIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); + } + + fpixd = (FPIX *)LEPT_CALLOC(1, sizeof(FPIX)); + fpixSetDimensions(fpixd, width, height); + fpixSetWpl(fpixd, width); /* 4-byte words */ + fpixd->refcount = 1; + + data = (l_float32 *)LEPT_CALLOC((size_t)width * height, sizeof(l_float32)); + if (!data) { + fpixDestroy(&fpixd); + return (FPIX *)ERROR_PTR("calloc fail for data", procName, NULL); + } + fpixSetData(fpixd, data); + return fpixd; +} + + +/*! + * \brief fpixCreateTemplate() + * + * \param[in] fpixs + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a FPix of the same size as the input FPix, with the
+ *          data array allocated and initialized to 0.
+ *      (2) Copies the resolution.
+ * 
+ */ +FPIX * +fpixCreateTemplate(FPIX *fpixs) +{ +l_int32 w, h; +FPIX *fpixd; + + PROCNAME("fpixCreateTemplate"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixGetDimensions(fpixs, &w, &h); + if ((fpixd = fpixCreate(w, h)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + fpixCopyResolution(fpixd, fpixs); + return fpixd; +} + + +/*! + * \brief fpixClone() + * + * \param[in] fpix + * \return same fpix ptr, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixClone() for definition and usage.
+ * 
+ */ +FPIX * +fpixClone(FPIX *fpix) +{ + PROCNAME("fpixClone"); + + if (!fpix) + return (FPIX *)ERROR_PTR("fpix not defined", procName, NULL); + fpixChangeRefcount(fpix, 1); + + return fpix; +} + + +/*! + * \brief fpixCopy() + * + * \param[in] fpixd [optional] can be null, or equal to fpixs, + * or different from fpixs + * \param[in] fpixs + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) There are three cases:
+ *            (a) fpixd == null  (makes a new fpix; refcount = 1)
+ *            (b) fpixd == fpixs  (no-op)
+ *            (c) fpixd != fpixs  (data copy; no change in refcount)
+ *          If the refcount of fpixd > 1, case (c) will side-effect
+ *          these handles.
+ *      (2) The general pattern of use is:
+ *             fpixd = fpixCopy(fpixd, fpixs);
+ *          This will work for all three cases.
+ *          For clarity when the case is known, you can use:
+ *            (a) fpixd = fpixCopy(NULL, fpixs);
+ *            (c) fpixCopy(fpixd, fpixs);
+ *      (3) For case (c), we check if fpixs and fpixd are the same size.
+ *          If so, the data is copied directly.
+ *          Otherwise, the data is reallocated to the correct size
+ *          and the copy proceeds.  The refcount of fpixd is unchanged.
+ *      (4) This operation, like all others that may involve a pre-existing
+ *          fpixd, will side-effect any existing clones of fpixd.
+ * 
+ */ +FPIX * +fpixCopy(FPIX *fpixd, /* can be null */ + FPIX *fpixs) +{ +l_int32 w, h, bytes; +l_float32 *datas, *datad; + + PROCNAME("fpixCopy"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (fpixs == fpixd) + return fpixd; + + /* Total bytes in image data */ + fpixGetDimensions(fpixs, &w, &h); + bytes = 4 * w * h; + + /* If we're making a new fpix ... */ + if (!fpixd) { + if ((fpixd = fpixCreateTemplate(fpixs)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + datas = fpixGetData(fpixs); + datad = fpixGetData(fpixd); + memcpy(datad, datas, bytes); + return fpixd; + } + + /* Reallocate image data if sizes are different */ + fpixResizeImageData(fpixd, fpixs); + + /* Copy data */ + fpixCopyResolution(fpixd, fpixs); + datas = fpixGetData(fpixs); + datad = fpixGetData(fpixd); + memcpy(datad, datas, bytes); + return fpixd; +} + + +/*! + * \brief fpixResizeImageData() + * + * \param[in] fpixd, fpixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the data sizes differ, this destroys the existing
+ *          data in fpixd and allocates a new, uninitialized, data array
+ *          of the same size as the data in fpixs.  Otherwise, this
+ *          doesn't do anything.
+ * 
+ */ +l_ok +fpixResizeImageData(FPIX *fpixd, + FPIX *fpixs) +{ +l_int32 ws, hs, wd, hd, bytes; +l_float32 *data; + + PROCNAME("fpixResizeImageData"); + + if (!fpixs) + return ERROR_INT("fpixs not defined", procName, 1); + if (!fpixd) + return ERROR_INT("fpixd not defined", procName, 1); + + fpixGetDimensions(fpixs, &ws, &hs); + fpixGetDimensions(fpixd, &wd, &hd); + if (ws == wd && hs == hd) /* nothing to do */ + return 0; + + fpixSetDimensions(fpixd, ws, hs); + fpixSetWpl(fpixd, ws); + bytes = 4 * ws * hs; + data = fpixGetData(fpixd); + if (data) LEPT_FREE(data); + if ((data = (l_float32 *)LEPT_MALLOC(bytes)) == NULL) + return ERROR_INT("LEPT_MALLOC fail for data", procName, 1); + fpixSetData(fpixd, data); + return 0; +} + + +/*! + * \brief fpixDestroy() + * + * \param[in,out] pfpix will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the fpix.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +fpixDestroy(FPIX **pfpix) +{ +l_float32 *data; +FPIX *fpix; + + PROCNAME("fpixDestroy"); + + if (!pfpix) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((fpix = *pfpix) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the fpix. */ + fpixChangeRefcount(fpix, -1); + if (fpixGetRefcount(fpix) <= 0) { + if ((data = fpixGetData(fpix)) != NULL) + LEPT_FREE(data); + LEPT_FREE(fpix); + } + + *pfpix = NULL; + return; +} + + +/*--------------------------------------------------------------------* + * FPix Accessors * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixGetDimensions() + * + * \param[in] fpix + * \param[out] pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +fpixGetDimensions(FPIX *fpix, + l_int32 *pw, + l_int32 *ph) +{ + PROCNAME("fpixGetDimensions"); + + if (!pw && !ph) + return ERROR_INT("no return val requested", procName, 1); + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + if (pw) *pw = fpix->w; + if (ph) *ph = fpix->h; + return 0; +} + + +/*! + * \brief fpixSetDimensions() + * + * \param[in] fpix + * \param[in] w, h + * \return 0 if OK, 1 on error + */ +l_ok +fpixSetDimensions(FPIX *fpix, + l_int32 w, + l_int32 h) +{ + PROCNAME("fpixSetDimensions"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + fpix->w = w; + fpix->h = h; + return 0; +} + + +/*! + * \brief fpixGetWpl() + * + * \param[in] fpix + * \return wpl, or UNDEF on error + */ +l_int32 +fpixGetWpl(FPIX *fpix) +{ + PROCNAME("fpixGetWpl"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, UNDEF); + return fpix->wpl; +} + + +/*! + * \brief fpixSetWpl() + * + * \param[in] fpix + * \param[in] wpl + * \return 0 if OK, 1 on error + */ +l_ok +fpixSetWpl(FPIX *fpix, + l_int32 wpl) +{ + PROCNAME("fpixSetWpl"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpix->wpl = wpl; + return 0; +} + + +/*! + * \brief fpixGetRefcount() + * + * \param[in] fpix + * \return refcount, or UNDEF on error + */ +l_int32 +fpixGetRefcount(FPIX *fpix) +{ + PROCNAME("fpixGetRefcount"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, UNDEF); + return fpix->refcount; +} + + +/*! + * \brief fpixChangeRefcount() + * + * \param[in] fpix + * \param[in] delta + * \return 0 if OK, 1 on error + */ +l_ok +fpixChangeRefcount(FPIX *fpix, + l_int32 delta) +{ + PROCNAME("fpixChangeRefcount"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpix->refcount += delta; + return 0; +} + + +/*! + * \brief fpixGetResolution() + * + * \param[in] fpix + * \param[out] pxres, pyres [optional] x and y resolution + * \return 0 if OK, 1 on error + */ +l_ok +fpixGetResolution(FPIX *fpix, + l_int32 *pxres, + l_int32 *pyres) +{ + PROCNAME("fpixGetResolution"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + if (pxres) *pxres = fpix->xres; + if (pyres) *pyres = fpix->yres; + return 0; +} + + +/*! + * \brief fpixSetResolution() + * + * \param[in] fpix + * \param[in] xres, yres x and y resolution + * \return 0 if OK, 1 on error + */ +l_ok +fpixSetResolution(FPIX *fpix, + l_int32 xres, + l_int32 yres) +{ + PROCNAME("fpixSetResolution"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpix->xres = xres; + fpix->yres = yres; + return 0; +} + + +/*! + * \brief fpixCopyResolution() + * + * \param[in] fpixd, fpixs + * \return 0 if OK, 1 on error + */ +l_ok +fpixCopyResolution(FPIX *fpixd, + FPIX *fpixs) +{ +l_int32 xres, yres; + PROCNAME("fpixCopyResolution"); + + if (!fpixs || !fpixd) + return ERROR_INT("fpixs and fpixd not both defined", procName, 1); + + fpixGetResolution(fpixs, &xres, &yres); + fpixSetResolution(fpixd, xres, yres); + return 0; +} + + +/*! + * \brief fpixGetData() + * + * \param[in] fpix + * \return ptr to fpix data, or NULL on error + */ +l_float32 * +fpixGetData(FPIX *fpix) +{ + PROCNAME("fpixGetData"); + + if (!fpix) + return (l_float32 *)ERROR_PTR("fpix not defined", procName, NULL); + return fpix->data; +} + + +/*! + * \brief fpixSetData() + * + * \param[in] fpix + * \param[in] data + * \return 0 if OK, 1 on error + */ +l_ok +fpixSetData(FPIX *fpix, + l_float32 *data) +{ + PROCNAME("fpixSetData"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpix->data = data; + return 0; +} + + +/*! + * \brief fpixGetPixel() + * + * \param[in] fpix + * \param[in] x,y pixel coords + * \param[out] pval pixel value + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0.0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +fpixGetPixel(FPIX *fpix, + l_int32 x, + l_int32 y, + l_float32 *pval) +{ +l_int32 w, h; + + PROCNAME("fpixGetPixel"); + + if (!pval) + return ERROR_INT("pval not defined", procName, 1); + *pval = 0.0; + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpixGetDimensions(fpix, &w, &h); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + *pval = *(fpix->data + y * w + x); + return 0; +} + + +/*! + * \brief fpixSetPixel() + * + * \param[in] fpix + * \param[in] x,y pixel coords + * \param[in] val pixel value + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0.0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +fpixSetPixel(FPIX *fpix, + l_int32 x, + l_int32 y, + l_float32 val) +{ +l_int32 w, h; + + PROCNAME("fpixSetPixel"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpixGetDimensions(fpix, &w, &h); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + *(fpix->data + y * w + x) = val; + return 0; +} + + +/*--------------------------------------------------------------------* + * FPixa Create/copy/destroy * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixaCreate() + * + * \param[in] n initial number of ptrs + * \return fpixa, or NULL on error + */ +FPIXA * +fpixaCreate(l_int32 n) +{ +FPIXA *fpixa; + + PROCNAME("fpixaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + fpixa = (FPIXA *)LEPT_CALLOC(1, sizeof(FPIXA)); + fpixa->n = 0; + fpixa->nalloc = n; + fpixa->refcount = 1; + if ((fpixa->fpix = (FPIX **)LEPT_CALLOC(n, sizeof(FPIX *))) == NULL) { + fpixaDestroy(&fpixa); + return (FPIXA *)ERROR_PTR("fpixa ptrs not made", procName, NULL); + } + + return fpixa; +} + + +/*! + * \brief fpixaCopy() + * + * \param[in] fpixa + * \param[in] copyflag L_COPY, L_CLODE or L_COPY_CLONE + * \return new fpixa, or NULL on error + * + *
+ * Notes:
+ *      copyflag may be one of
+ *        ~ L_COPY makes a new fpixa and copies each fpix
+ *        ~ L_CLONE gives a new ref-counted handle to the input fpixa
+ *        ~ L_COPY_CLONE makes a new fpixa with clones of all fpix
+ * 
+ */ +FPIXA * +fpixaCopy(FPIXA *fpixa, + l_int32 copyflag) +{ +l_int32 i; +FPIX *fpixc; +FPIXA *fpixac; + + PROCNAME("fpixaCopy"); + + if (!fpixa) + return (FPIXA *)ERROR_PTR("fpixa not defined", procName, NULL); + + if (copyflag == L_CLONE) { + fpixaChangeRefcount(fpixa, 1); + return fpixa; + } + + if (copyflag != L_COPY && copyflag != L_COPY_CLONE) + return (FPIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + if ((fpixac = fpixaCreate(fpixa->n)) == NULL) + return (FPIXA *)ERROR_PTR("fpixac not made", procName, NULL); + for (i = 0; i < fpixa->n; i++) { + if (copyflag == L_COPY) + fpixc = fpixaGetFPix(fpixa, i, L_COPY); + else /* copy-clone */ + fpixc = fpixaGetFPix(fpixa, i, L_CLONE); + fpixaAddFPix(fpixac, fpixc, L_INSERT); + } + + return fpixac; +} + + +/*! + * \brief fpixaDestroy() + * + * \param[in,out] pfpixa will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the fpixa.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +fpixaDestroy(FPIXA **pfpixa) +{ +l_int32 i; +FPIXA *fpixa; + + PROCNAME("fpixaDestroy"); + + if (pfpixa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((fpixa = *pfpixa) == NULL) + return; + + /* Decrement the refcount. If it is 0, destroy the pixa. */ + fpixaChangeRefcount(fpixa, -1); + if (fpixa->refcount <= 0) { + for (i = 0; i < fpixa->n; i++) + fpixDestroy(&fpixa->fpix[i]); + LEPT_FREE(fpixa->fpix); + LEPT_FREE(fpixa); + } + + *pfpixa = NULL; + return; +} + + +/*--------------------------------------------------------------------* + * FPixa addition * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixaAddFPix() + * + * \param[in] fpixa + * \param[in] fpix to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK; 1 on error + */ +l_ok +fpixaAddFPix(FPIXA *fpixa, + FPIX *fpix, + l_int32 copyflag) +{ +l_int32 n; +FPIX *fpixc; + + PROCNAME("fpixaAddFPix"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + if (copyflag == L_INSERT) + fpixc = fpix; + else if (copyflag == L_COPY) + fpixc = fpixCopy(NULL, fpix); + else if (copyflag == L_CLONE) + fpixc = fpixClone(fpix); + else + return ERROR_INT("invalid copyflag", procName, 1); + if (!fpixc) + return ERROR_INT("fpixc not made", procName, 1); + + n = fpixaGetCount(fpixa); + if (n >= fpixa->nalloc) + fpixaExtendArray(fpixa); + fpixa->fpix[n] = fpixc; + fpixa->n++; + + return 0; +} + + +/*! + * \brief fpixaExtendArray() + * + * \param[in] fpixa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Doubles the size of the fpixa ptr array.
+ * 
+ */ +static l_int32 +fpixaExtendArray(FPIXA *fpixa) +{ + PROCNAME("fpixaExtendArray"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + + return fpixaExtendArrayToSize(fpixa, 2 * fpixa->nalloc); +} + + +/*! + * \brief fpixaExtendArrayToSize() + * + * \param[in] fpixa + * \param[in] size new ptr array size + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If necessary, reallocs new fpixa ptrs array to %size.
+ * 
+ */ +static l_int32 +fpixaExtendArrayToSize(FPIXA *fpixa, + l_int32 size) +{ + PROCNAME("fpixaExtendArrayToSize"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + + if (size > fpixa->nalloc) { + if ((fpixa->fpix = (FPIX **)reallocNew((void **)&fpixa->fpix, + sizeof(FPIX *) * fpixa->nalloc, + size * sizeof(FPIX *))) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + fpixa->nalloc = size; + } + return 0; +} + + +/*--------------------------------------------------------------------* + * FPixa accessors * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixaGetCount() + * + * \param[in] fpixa + * \return count, or 0 if no pixa + */ +l_int32 +fpixaGetCount(FPIXA *fpixa) +{ + PROCNAME("fpixaGetCount"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 0); + + return fpixa->n; +} + + +/*! + * \brief fpixaChangeRefcount() + * + * \param[in] fpixa + * \param[in] delta + * \return 0 if OK, 1 on error + */ +l_ok +fpixaChangeRefcount(FPIXA *fpixa, + l_int32 delta) +{ + PROCNAME("fpixaChangeRefcount"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + + fpixa->refcount += delta; + return 0; +} + + +/*! + * \brief fpixaGetFPix() + * + * \param[in] fpixa + * \param[in] index to the index-th fpix + * \param[in] accesstype L_COPY or L_CLONE + * \return fpix, or NULL on error + */ +FPIX * +fpixaGetFPix(FPIXA *fpixa, + l_int32 index, + l_int32 accesstype) +{ + PROCNAME("fpixaGetFPix"); + + if (!fpixa) + return (FPIX *)ERROR_PTR("fpixa not defined", procName, NULL); + if (index < 0 || index >= fpixa->n) + return (FPIX *)ERROR_PTR("index not valid", procName, NULL); + + if (accesstype == L_COPY) + return fpixCopy(NULL, fpixa->fpix[index]); + else if (accesstype == L_CLONE) + return fpixClone(fpixa->fpix[index]); + else + return (FPIX *)ERROR_PTR("invalid accesstype", procName, NULL); +} + + +/*! + * \brief fpixaGetFPixDimensions() + * + * \param[in] fpixa + * \param[in] index to the index-th box + * \param[out] pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +fpixaGetFPixDimensions(FPIXA *fpixa, + l_int32 index, + l_int32 *pw, + l_int32 *ph) +{ +FPIX *fpix; + + PROCNAME("fpixaGetFPixDimensions"); + + if (!pw && !ph) + return ERROR_INT("no return val requested", procName, 1); + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + if (index < 0 || index >= fpixa->n) + return ERROR_INT("index not valid", procName, 1); + + if ((fpix = fpixaGetFPix(fpixa, index, L_CLONE)) == NULL) + return ERROR_INT("fpix not found!", procName, 1); + fpixGetDimensions(fpix, pw, ph); + fpixDestroy(&fpix); + return 0; +} + + +/*! + * \brief fpixaGetData() + * + * \param[in] fpixa + * \param[in] index into fpixa array + * \return data not a copy, or NULL on error + */ +l_float32 * +fpixaGetData(FPIXA *fpixa, + l_int32 index) +{ +l_int32 n; +l_float32 *data; +FPIX *fpix; + + PROCNAME("fpixaGetData"); + + if (!fpixa) + return (l_float32 *)ERROR_PTR("fpixa not defined", procName, NULL); + n = fpixaGetCount(fpixa); + if (index < 0 || index >= n) + return (l_float32 *)ERROR_PTR("invalid index", procName, NULL); + + fpix = fpixaGetFPix(fpixa, index, L_CLONE); + data = fpixGetData(fpix); + fpixDestroy(&fpix); + return data; +} + + +/*! + * \brief fpixaGetPixel() + * + * \param[in] fpixa + * \param[in] index into fpixa array + * \param[in] x,y pixel coords + * \param[out] pval pixel value + * \return 0 if OK; 1 on error + */ +l_ok +fpixaGetPixel(FPIXA *fpixa, + l_int32 index, + l_int32 x, + l_int32 y, + l_float32 *pval) +{ +l_int32 n, ret; +FPIX *fpix; + + PROCNAME("fpixaGetPixel"); + + if (!pval) + return ERROR_INT("pval not defined", procName, 1); + *pval = 0.0; + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + n = fpixaGetCount(fpixa); + if (index < 0 || index >= n) + return ERROR_INT("invalid index into fpixa", procName, 1); + + fpix = fpixaGetFPix(fpixa, index, L_CLONE); + ret = fpixGetPixel(fpix, x, y, pval); + fpixDestroy(&fpix); + return ret; +} + + +/*! + * \brief fpixaSetPixel() + * + * \param[in] fpixa + * \param[in] index into fpixa array + * \param[in] x,y pixel coords + * \param[in] val pixel value + * \return 0 if OK; 1 on error + */ +l_ok +fpixaSetPixel(FPIXA *fpixa, + l_int32 index, + l_int32 x, + l_int32 y, + l_float32 val) +{ +l_int32 n, ret; +FPIX *fpix; + + PROCNAME("fpixaSetPixel"); + + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + n = fpixaGetCount(fpixa); + if (index < 0 || index >= n) + return ERROR_INT("invalid index into fpixa", procName, 1); + + fpix = fpixaGetFPix(fpixa, index, L_CLONE); + ret = fpixSetPixel(fpix, x, y, val); + fpixDestroy(&fpix); + return ret; +} + + +/*--------------------------------------------------------------------* + * DPix Create/copy/destroy * + *--------------------------------------------------------------------*/ +/*! + * \brief dpixCreate() + * + * \param[in] width, height + * \return dpix with data allocated and initialized to 0, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a DPix of specified size, with the data array
+ *          allocated and initialized to 0.
+ *      (2) The number of pixels must be less than 2^28.
+ * 
+ */ +DPIX * +dpixCreate(l_int32 width, + l_int32 height) +{ +l_float64 *data; +l_uint64 npix64; +DPIX *dpix; + + PROCNAME("dpixCreate"); + + if (width <= 0) + return (DPIX *)ERROR_PTR("width must be > 0", procName, NULL); + if (height <= 0) + return (DPIX *)ERROR_PTR("height must be > 0", procName, NULL); + + /* Avoid overflow in malloc arg, malicious or otherwise */ + npix64 = (l_uint64)width * (l_uint64)height; /* # of 8 byte pixels */ + if (npix64 >= (1LL << 28)) { + L_ERROR("requested w = %d, h = %d\n", procName, width, height); + return (DPIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); + } + + dpix = (DPIX *)LEPT_CALLOC(1, sizeof(DPIX)); + dpixSetDimensions(dpix, width, height); + dpixSetWpl(dpix, width); /* 8 byte words */ + dpix->refcount = 1; + + data = (l_float64 *)LEPT_CALLOC((size_t)width * height, sizeof(l_float64)); + if (!data) { + dpixDestroy(&dpix); + return (DPIX *)ERROR_PTR("calloc fail for data", procName, NULL); + } + dpixSetData(dpix, data); + return dpix; +} + + +/*! + * \brief dpixCreateTemplate() + * + * \param[in] dpixs + * \return dpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a DPix of the same size as the input DPix, with the
+ *          data array allocated and initialized to 0.
+ *      (2) Copies the resolution.
+ * 
+ */ +DPIX * +dpixCreateTemplate(DPIX *dpixs) +{ +l_int32 w, h; +DPIX *dpixd; + + PROCNAME("dpixCreateTemplate"); + + if (!dpixs) + return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); + + dpixGetDimensions(dpixs, &w, &h); + dpixd = dpixCreate(w, h); + dpixCopyResolution(dpixd, dpixs); + return dpixd; +} + + +/*! + * \brief dpixClone() + * + * \param[in] dpix + * \return same dpix ptr, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixClone() for definition and usage.
+ * 
+ */ +DPIX * +dpixClone(DPIX *dpix) +{ + PROCNAME("dpixClone"); + + if (!dpix) + return (DPIX *)ERROR_PTR("dpix not defined", procName, NULL); + dpixChangeRefcount(dpix, 1); + + return dpix; +} + + +/*! + * \brief dpixCopy() + * + * \param[in] dpixd [optional] can be null, or equal to dpixs, + * or different from dpixs + * \param[in] dpixs + * \return dpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) There are three cases:
+ *            (a) dpixd == null  (makes a new dpix; refcount = 1)
+ *            (b) dpixd == dpixs  (no-op)
+ *            (c) dpixd != dpixs  (data copy; no change in refcount)
+ *          If the refcount of dpixd > 1, case (c) will side-effect
+ *          these handles.
+ *      (2) The general pattern of use is:
+ *             dpixd = dpixCopy(dpixd, dpixs);
+ *          This will work for all three cases.
+ *          For clarity when the case is known, you can use:
+ *            (a) dpixd = dpixCopy(NULL, dpixs);
+ *            (c) dpixCopy(dpixd, dpixs);
+ *      (3) For case (c), we check if dpixs and dpixd are the same size.
+ *          If so, the data is copied directly.
+ *          Otherwise, the data is reallocated to the correct size
+ *          and the copy proceeds.  The refcount of dpixd is unchanged.
+ *      (4) This operation, like all others that may involve a pre-existing
+ *          dpixd, will side-effect any existing clones of dpixd.
+ * 
+ */ +DPIX * +dpixCopy(DPIX *dpixd, /* can be null */ + DPIX *dpixs) +{ +l_int32 w, h, bytes; +l_float64 *datas, *datad; + + PROCNAME("dpixCopy"); + + if (!dpixs) + return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); + if (dpixs == dpixd) + return dpixd; + + /* Total bytes in image data */ + dpixGetDimensions(dpixs, &w, &h); + bytes = 8 * w * h; + + /* If we're making a new dpix ... */ + if (!dpixd) { + if ((dpixd = dpixCreateTemplate(dpixs)) == NULL) + return (DPIX *)ERROR_PTR("dpixd not made", procName, NULL); + datas = dpixGetData(dpixs); + datad = dpixGetData(dpixd); + memcpy(datad, datas, bytes); + return dpixd; + } + + /* Reallocate image data if sizes are different */ + dpixResizeImageData(dpixd, dpixs); + + /* Copy data */ + dpixCopyResolution(dpixd, dpixs); + datas = dpixGetData(dpixs); + datad = dpixGetData(dpixd); + memcpy(datad, datas, bytes); + return dpixd; +} + + +/*! + * \brief dpixResizeImageData() + * + * \param[in] dpixd, dpixs + * \return 0 if OK, 1 on error + */ +l_ok +dpixResizeImageData(DPIX *dpixd, + DPIX *dpixs) +{ +l_int32 ws, hs, wd, hd, bytes; +l_float64 *data; + + PROCNAME("dpixResizeImageData"); + + if (!dpixs) + return ERROR_INT("dpixs not defined", procName, 1); + if (!dpixd) + return ERROR_INT("dpixd not defined", procName, 1); + + dpixGetDimensions(dpixs, &ws, &hs); + dpixGetDimensions(dpixd, &wd, &hd); + if (ws == wd && hs == hd) /* nothing to do */ + return 0; + + dpixSetDimensions(dpixd, ws, hs); + dpixSetWpl(dpixd, ws); /* 8 byte words */ + bytes = 8 * ws * hs; + data = dpixGetData(dpixd); + if (data) LEPT_FREE(data); + if ((data = (l_float64 *)LEPT_MALLOC(bytes)) == NULL) + return ERROR_INT("LEPT_MALLOC fail for data", procName, 1); + dpixSetData(dpixd, data); + return 0; +} + + +/*! + * \brief dpixDestroy() + * + * \param[in,out] pdpix will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the dpix.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +dpixDestroy(DPIX **pdpix) +{ +l_float64 *data; +DPIX *dpix; + + PROCNAME("dpixDestroy"); + + if (!pdpix) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((dpix = *pdpix) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the dpix. */ + dpixChangeRefcount(dpix, -1); + if (dpixGetRefcount(dpix) <= 0) { + if ((data = dpixGetData(dpix)) != NULL) + LEPT_FREE(data); + LEPT_FREE(dpix); + } + + *pdpix = NULL; + return; +} + + +/*--------------------------------------------------------------------* + * DPix Accessors * + *--------------------------------------------------------------------*/ +/*! + * \brief dpixGetDimensions() + * + * \param[in] dpix + * \param[out] pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +dpixGetDimensions(DPIX *dpix, + l_int32 *pw, + l_int32 *ph) +{ + PROCNAME("dpixGetDimensions"); + + if (!pw && !ph) + return ERROR_INT("no return val requested", procName, 1); + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + if (pw) *pw = dpix->w; + if (ph) *ph = dpix->h; + return 0; +} + + +/*! + * \brief dpixSetDimensions() + * + * \param[in] dpix + * \param[in] w, h + * \return 0 if OK, 1 on error + */ +l_ok +dpixSetDimensions(DPIX *dpix, + l_int32 w, + l_int32 h) +{ + PROCNAME("dpixSetDimensions"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + dpix->w = w; + dpix->h = h; + return 0; +} + + +/*! + * \brief dpixGetWpl() + * + * \param[in] dpix + * \return wpl, or UNDEF on error + */ +l_int32 +dpixGetWpl(DPIX *dpix) +{ + PROCNAME("dpixGetWpl"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + return dpix->wpl; +} + + +/*! + * \brief dpixSetWpl() + * + * \param[in] dpix + * \param[in] wpl + * \return 0 if OK, 1 on error + */ +l_ok +dpixSetWpl(DPIX *dpix, + l_int32 wpl) +{ + PROCNAME("dpixSetWpl"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpix->wpl = wpl; + return 0; +} + + +/*! + * \brief dpixGetRefcount() + * + * \param[in] dpix + * \return refcount, or UNDEF on error + */ +l_int32 +dpixGetRefcount(DPIX *dpix) +{ + PROCNAME("dpixGetRefcount"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, UNDEF); + return dpix->refcount; +} + + +/*! + * \brief dpixChangeRefcount() + * + * \param[in] dpix + * \param[in] delta + * \return 0 if OK, 1 on error + */ +l_ok +dpixChangeRefcount(DPIX *dpix, + l_int32 delta) +{ + PROCNAME("dpixChangeRefcount"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpix->refcount += delta; + return 0; +} + + +/*! + * \brief dpixGetResolution() + * + * \param[in] dpix + * \param[out] pxres, pyres [optional] x and y resolution + * \return 0 if OK, 1 on error + */ +l_ok +dpixGetResolution(DPIX *dpix, + l_int32 *pxres, + l_int32 *pyres) +{ + PROCNAME("dpixGetResolution"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + if (pxres) *pxres = dpix->xres; + if (pyres) *pyres = dpix->yres; + return 0; +} + + +/*! + * \brief dpixSetResolution() + * + * \param[in] dpix + * \param[in] xres, yres x and y resolution + * \return 0 if OK, 1 on error + */ +l_ok +dpixSetResolution(DPIX *dpix, + l_int32 xres, + l_int32 yres) +{ + PROCNAME("dpixSetResolution"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpix->xres = xres; + dpix->yres = yres; + return 0; +} + + +/*! + * \brief dpixCopyResolution() + * + * \param[in] dpixd, dpixs + * \return 0 if OK, 1 on error + */ +l_ok +dpixCopyResolution(DPIX *dpixd, + DPIX *dpixs) +{ +l_int32 xres, yres; + PROCNAME("dpixCopyResolution"); + + if (!dpixs || !dpixd) + return ERROR_INT("dpixs and dpixd not both defined", procName, 1); + + dpixGetResolution(dpixs, &xres, &yres); + dpixSetResolution(dpixd, xres, yres); + return 0; +} + + +/*! + * \brief dpixGetData() + * + * \param[in] dpix + * \return ptr to dpix data, or NULL on error + */ +l_float64 * +dpixGetData(DPIX *dpix) +{ + PROCNAME("dpixGetData"); + + if (!dpix) + return (l_float64 *)ERROR_PTR("dpix not defined", procName, NULL); + return dpix->data; +} + + +/*! + * \brief dpixSetData() + * + * \param[in] dpix + * \param[in] data + * \return 0 if OK, 1 on error + */ +l_ok +dpixSetData(DPIX *dpix, + l_float64 *data) +{ + PROCNAME("dpixSetData"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpix->data = data; + return 0; +} + + +/*! + * \brief dpixGetPixel() + * + * \param[in] dpix + * \param[in] x,y pixel coords + * \param[out] pval pixel value + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0.0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +dpixGetPixel(DPIX *dpix, + l_int32 x, + l_int32 y, + l_float64 *pval) +{ +l_int32 w, h; + + PROCNAME("dpixGetPixel"); + + if (!pval) + return ERROR_INT("pval not defined", procName, 1); + *pval = 0.0; + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpixGetDimensions(dpix, &w, &h); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + *pval = *(dpix->data + y * w + x); + return 0; +} + + +/*! + * \brief dpixSetPixel() + * + * \param[in] dpix + * \param[in] x,y pixel coords + * \param[in] val pixel value + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0.0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +dpixSetPixel(DPIX *dpix, + l_int32 x, + l_int32 y, + l_float64 val) +{ +l_int32 w, h; + + PROCNAME("dpixSetPixel"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpixGetDimensions(dpix, &w, &h); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + *(dpix->data + y * w + x) = val; + return 0; +} + + +/*--------------------------------------------------------------------* + * FPix serialized I/O * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixRead() + * + * \param[in] filename + * \return fpix, or NULL on error + */ +FPIX * +fpixRead(const char *filename) +{ +FILE *fp; +FPIX *fpix; + + PROCNAME("fpixRead"); + + if (!filename) + return (FPIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (FPIX *)ERROR_PTR("stream not opened", procName, NULL); + fpix = fpixReadStream(fp); + fclose(fp); + if (!fpix) + return (FPIX *)ERROR_PTR("fpix not read", procName, NULL); + return fpix; +} + + +/*! + * \brief fpixReadStream() + * + * \param[in] fp file stream + * \return fpix, or NULL on error + */ +FPIX * +fpixReadStream(FILE *fp) +{ +char buf[256]; +l_int32 w, h, nbytes, xres, yres, version; +l_float32 *data; +FPIX *fpix; + + PROCNAME("fpixReadStream"); + + if (!fp) + return (FPIX *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nFPix Version %d\n", &version) != 1) + return (FPIX *)ERROR_PTR("not a fpix file", procName, NULL); + if (version != FPIX_VERSION_NUMBER) + return (FPIX *)ERROR_PTR("invalid fpix version", procName, NULL); + if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) + return (FPIX *)ERROR_PTR("read fail for data size", procName, NULL); + + /* Use fgets() and sscanf(); not fscanf(), for the last + * bit of header data before the float data. The reason is + * that fscanf throws away white space, and if the float data + * happens to begin with ascii character(s) that are white + * space, it will swallow them and all will be lost! */ + if (fgets(buf, sizeof(buf), fp) == NULL) + return (FPIX *)ERROR_PTR("fgets read fail", procName, NULL); + if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) + return (FPIX *)ERROR_PTR("read fail for xres, yres", procName, NULL); + + if ((fpix = fpixCreate(w, h)) == NULL) + return (FPIX *)ERROR_PTR("fpix not made", procName, NULL); + fpixSetResolution(fpix, xres, yres); + data = fpixGetData(fpix); + if (fread(data, 1, nbytes, fp) != nbytes) { + fpixDestroy(&fpix); + return (FPIX *)ERROR_PTR("read error for nbytes", procName, NULL); + } + fgetc(fp); /* ending nl */ + + /* Convert to little-endian if necessary */ + fpixEndianByteSwap(fpix, fpix); + return fpix; +} + + +/*! + * \brief fpixReadMem() + * + * \param[in] data of serialized fpix + * \param[in] size of data in bytes + * \return fpix, or NULL on error + */ +FPIX * +fpixReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +FPIX *fpix; + + PROCNAME("fpixReadMem"); + + if (!data) + return (FPIX *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (FPIX *)ERROR_PTR("stream not opened", procName, NULL); + + fpix = fpixReadStream(fp); + fclose(fp); + if (!fpix) L_ERROR("fpix not read\n", procName); + return fpix; +} + + +/*! + * \brief fpixWrite() + * + * \param[in] filename + * \param[in] fpix + * \return 0 if OK, 1 on error + */ +l_ok +fpixWrite(const char *filename, + FPIX *fpix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("fpixWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = fpixWriteStream(fp, fpix); + fclose(fp); + if (ret) + return ERROR_INT("fpix not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief fpixWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] fpix + * \return 0 if OK, 1 on error + */ +l_ok +fpixWriteStream(FILE *fp, + FPIX *fpix) +{ +l_int32 w, h, xres, yres; +l_uint32 nbytes; +l_float32 *data; +FPIX *fpixt; + + PROCNAME("fpixWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + /* Convert to little-endian if necessary */ + fpixt = fpixEndianByteSwap(NULL, fpix); + + fpixGetDimensions(fpixt, &w, &h); + data = fpixGetData(fpixt); + nbytes = sizeof(l_float32) * w * h; + fpixGetResolution(fpixt, &xres, &yres); + fprintf(fp, "\nFPix Version %d\n", FPIX_VERSION_NUMBER); + fprintf(fp, "w = %d, h = %d, nbytes = %u\n", w, h, nbytes); + fprintf(fp, "xres = %d, yres = %d\n", xres, yres); + fwrite(data, 1, nbytes, fp); + fprintf(fp, "\n"); + + fpixDestroy(&fpixt); + return 0; +} + + +/*! + * \brief fpixWriteMem() + * + * \param[out] pdata data of serialized fpix + * \param[out] psize size of returned data + * \param[in] fpix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a fpix in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +fpixWriteMem(l_uint8 **pdata, + size_t *psize, + FPIX *fpix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("fpixWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = fpixWriteStream(fp, fpix); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = fpixWriteStream(fp, fpix); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief fpixEndianByteSwap() + * + * \param[in] fpixd can be equal to fpixs or NULL + * \param[in] fpixs + * \return fpixd always + * + *
+ * Notes:
+ *      (1) On big-endian hardware, this does byte-swapping on each of
+ *          the 4-byte floats in the fpix data.  On little-endians,
+ *          the data is unchanged.  This is used for serialization
+ *          of fpix; the data is serialized in little-endian byte
+ *          order because most hardware is little-endian.
+ *      (2) The operation can be either in-place or, if fpixd == NULL,
+ *          a new fpix is made.  If not in-place, caller must catch
+ *          the returned pointer.
+ * 
+ */ +FPIX * +fpixEndianByteSwap(FPIX *fpixd, + FPIX *fpixs) +{ + PROCNAME("fpixEndianByteSwap"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, fpixd); + if (fpixd && (fpixs != fpixd)) + return (FPIX *)ERROR_PTR("fpixd != fpixs", procName, fpixd); + +#ifdef L_BIG_ENDIAN + { + l_uint32 *data; + l_int32 i, j, w, h; + l_uint32 word; + + fpixGetDimensions(fpixs, &w, &h); + fpixd = fpixCopy(fpixd, fpixs); /* no copy if fpixd == fpixs */ + + data = (l_uint32 *)fpixGetData(fpixd); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++, data++) { + word = *data; + *data = (word >> 24) | + ((word >> 8) & 0x0000ff00) | + ((word << 8) & 0x00ff0000) | + (word << 24); + } + } + return fpixd; + } +#else /* L_LITTLE_ENDIAN */ + + if (fpixd) + return fpixd; /* no-op */ + else + return fpixClone(fpixs); + +#endif /* L_BIG_ENDIAN */ +} + + +/*--------------------------------------------------------------------* + * DPix serialized I/O * + *--------------------------------------------------------------------*/ +/*! + * \brief dpixRead() + * + * \param[in] filename + * \return dpix, or NULL on error + */ +DPIX * +dpixRead(const char *filename) +{ +FILE *fp; +DPIX *dpix; + + PROCNAME("dpixRead"); + + if (!filename) + return (DPIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (DPIX *)ERROR_PTR("stream not opened", procName, NULL); + dpix = dpixReadStream(fp); + fclose(fp); + if (!dpix) + return (DPIX *)ERROR_PTR("dpix not read", procName, NULL); + return dpix; +} + + +/*! + * \brief dpixReadStream() + * + * \param[in] fp file stream + * \return dpix, or NULL on error + */ +DPIX * +dpixReadStream(FILE *fp) +{ +char buf[256]; +l_int32 w, h, nbytes, version, xres, yres; +l_float64 *data; +DPIX *dpix; + + PROCNAME("dpixReadStream"); + + if (!fp) + return (DPIX *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nDPix Version %d\n", &version) != 1) + return (DPIX *)ERROR_PTR("not a dpix file", procName, NULL); + if (version != DPIX_VERSION_NUMBER) + return (DPIX *)ERROR_PTR("invalid dpix version", procName, NULL); + if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) + return (DPIX *)ERROR_PTR("read fail for data size", procName, NULL); + + /* Use fgets() and sscanf(); not fscanf(), for the last + * bit of header data before the float data. The reason is + * that fscanf throws away white space, and if the float data + * happens to begin with ascii character(s) that are white + * space, it will swallow them and all will be lost! */ + if (fgets(buf, sizeof(buf), fp) == NULL) + return (DPIX *)ERROR_PTR("fgets read fail", procName, NULL); + if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) + return (DPIX *)ERROR_PTR("read fail for xres, yres", procName, NULL); + + if ((dpix = dpixCreate(w, h)) == NULL) + return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); + dpixSetResolution(dpix, xres, yres); + data = dpixGetData(dpix); + if (fread(data, 1, nbytes, fp) != nbytes) { + dpixDestroy(&dpix); + return (DPIX *)ERROR_PTR("read error for nbytes", procName, NULL); + } + fgetc(fp); /* ending nl */ + + /* Convert to little-endian if necessary */ + dpixEndianByteSwap(dpix, dpix); + return dpix; +} + + +/*! + * \brief dpixReadMem() + * + * \param[in] data of serialized dpix + * \param[in] size of data in bytes + * \return dpix, or NULL on error + */ +DPIX * +dpixReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +DPIX *dpix; + + PROCNAME("dpixReadMem"); + + if (!data) + return (DPIX *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (DPIX *)ERROR_PTR("stream not opened", procName, NULL); + + dpix = dpixReadStream(fp); + fclose(fp); + if (!dpix) L_ERROR("dpix not read\n", procName); + return dpix; +} + + +/*! + * \brief dpixWrite() + * + * \param[in] filename + * \param[in] dpix + * \return 0 if OK, 1 on error + */ +l_ok +dpixWrite(const char *filename, + DPIX *dpix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dpixWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dpixWriteStream(fp, dpix); + fclose(fp); + if (ret) + return ERROR_INT("dpix not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief dpixWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] dpix + * \return 0 if OK, 1 on error + */ +l_ok +dpixWriteStream(FILE *fp, + DPIX *dpix) +{ +l_int32 w, h, xres, yres; +l_uint32 nbytes; +l_float64 *data; +DPIX *dpixt; + + PROCNAME("dpixWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + /* Convert to little-endian if necessary */ + dpixt = dpixEndianByteSwap(NULL, dpix); + + dpixGetDimensions(dpixt, &w, &h); + dpixGetResolution(dpixt, &xres, &yres); + data = dpixGetData(dpixt); + nbytes = sizeof(l_float64) * w * h; + fprintf(fp, "\nDPix Version %d\n", DPIX_VERSION_NUMBER); + fprintf(fp, "w = %d, h = %d, nbytes = %u\n", w, h, nbytes); + fprintf(fp, "xres = %d, yres = %d\n", xres, yres); + fwrite(data, 1, nbytes, fp); + fprintf(fp, "\n"); + + dpixDestroy(&dpixt); + return 0; +} + + +/*! + * \brief dpixWriteMem() + * + * \param[out] pdata data of serialized dpix + * \param[out] psize size of returned data + * \param[in] dpix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a dpix in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +dpixWriteMem(l_uint8 **pdata, + size_t *psize, + DPIX *dpix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("dpixWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = dpixWriteStream(fp, dpix); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = dpixWriteStream(fp, dpix); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief dpixEndianByteSwap() + * + * \param[in] dpixd can be equal to dpixs or NULL + * \param[in] dpixs + * \return dpixd always + * + *
+ * Notes:
+ *      (1) On big-endian hardware, this does byte-swapping on each of
+ *          the 4-byte words in the dpix data.  On little-endians,
+ *          the data is unchanged.  This is used for serialization
+ *          of dpix; the data is serialized in little-endian byte
+ *          order because most hardware is little-endian.
+ *      (2) The operation can be either in-place or, if dpixd == NULL,
+ *          a new dpix is made.  If not in-place, caller must catch
+ *          the returned pointer.
+ * 
+ */ +DPIX * +dpixEndianByteSwap(DPIX *dpixd, + DPIX *dpixs) +{ + PROCNAME("dpixEndianByteSwap"); + + if (!dpixs) + return (DPIX *)ERROR_PTR("dpixs not defined", procName, dpixd); + if (dpixd && (dpixs != dpixd)) + return (DPIX *)ERROR_PTR("dpixd != dpixs", procName, dpixd); + +#ifdef L_BIG_ENDIAN + { + l_uint32 *data; + l_int32 i, j, w, h; + l_uint32 word; + + dpixGetDimensions(dpixs, &w, &h); + dpixd = dpixCopy(dpixd, dpixs); /* no copy if dpixd == dpixs */ + + data = (l_uint32 *)dpixGetData(dpixd); + for (i = 0; i < h; i++) { + for (j = 0; j < 2 * w; j++, data++) { + word = *data; + *data = (word >> 24) | + ((word >> 8) & 0x0000ff00) | + ((word << 8) & 0x00ff0000) | + (word << 24); + } + } + return dpixd; + } +#else /* L_LITTLE_ENDIAN */ + + if (dpixd) + return dpixd; /* no-op */ + else + return dpixClone(dpixs); + +#endif /* L_BIG_ENDIAN */ +} + + +/*--------------------------------------------------------------------* + * Print FPix (subsampled, for debugging) * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixPrintStream() + * + * \param[in] fp file stream + * \param[in] fpix + * \param[in] factor for subsampling + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Subsampled printout of fpix for debugging.
+ * 
+ */ +l_ok +fpixPrintStream(FILE *fp, + FPIX *fpix, + l_int32 factor) +{ +l_int32 i, j, w, h, count; +l_float32 val; + + PROCNAME("fpixPrintStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor < 1f", procName, 1); + + fpixGetDimensions(fpix, &w, &h); + fprintf(fp, "\nFPix: w = %d, h = %d\n", w, h); + for (i = 0; i < h; i += factor) { + for (count = 0, j = 0; j < w; j += factor, count++) { + fpixGetPixel(fpix, j, i, &val); + fprintf(fp, "val[%d, %d] = %f ", i, j, val); + if ((count + 1) % 3 == 0) fprintf(fp, "\n"); + } + if (count % 3) fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/fpix2.c b/3rdparty/hgOCR/leptonica/fpix2.c new file mode 100644 index 00000000..47f9e6c2 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/fpix2.c @@ -0,0 +1,2467 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file fpix2.c + *
+ *
+ *    ------------------------------------------
+ *    This file has these FPix utilities:
+ *       ~ interconversions with pix, fpix, dpix
+ *       ~ min and max values
+ *       ~ integer scaling
+ *       ~ arithmetic operations
+ *       ~ set all
+ *       ~ border functions
+ *       ~ simple rasterop (source --> dest)
+ *       ~ geometric transforms
+ *    ------------------------------------------
+ *
+ *    Interconversions between Pix, FPix and DPix
+ *          FPIX          *pixConvertToFPix()
+ *          DPIX          *pixConvertToDPix()
+ *          PIX           *fpixConvertToPix()
+ *          PIX           *fpixDisplayMaxDynamicRange()  [useful for debugging]
+ *          DPIX          *fpixConvertToDPix()
+ *          PIX           *dpixConvertToPix()
+ *          FPIX          *dpixConvertToFPix()
+ *
+ *    Min/max value
+ *          l_int32        fpixGetMin()
+ *          l_int32        fpixGetMax()
+ *          l_int32        dpixGetMin()
+ *          l_int32        dpixGetMax()
+ *
+ *    Integer scaling
+ *          FPIX          *fpixScaleByInteger()
+ *          DPIX          *dpixScaleByInteger()
+ *
+ *    Arithmetic operations
+ *          FPIX          *fpixLinearCombination()
+ *          l_int32        fpixAddMultConstant()
+ *          DPIX          *dpixLinearCombination()
+ *          l_int32        dpixAddMultConstant()
+ *
+ *    Set all
+ *          l_int32        fpixSetAllArbitrary()
+ *          l_int32        dpixSetAllArbitrary()
+ *
+ *    FPix border functions
+ *          FPIX          *fpixAddBorder()
+ *          FPIX          *fpixRemoveBorder()
+ *          FPIX          *fpixAddMirroredBorder()
+ *          FPIX          *fpixAddContinuedBorder()
+ *          FPIX          *fpixAddSlopeBorder()
+ *
+ *    FPix simple rasterop
+ *          l_int32        fpixRasterop()
+ *
+ *    FPix rotation by multiples of 90 degrees
+ *          FPIX          *fpixRotateOrth()
+ *          FPIX          *fpixRotate180()
+ *          FPIX          *fpixRotate90()
+ *          FPIX          *fpixFlipLR()
+ *          FPIX          *fpixFlipTB()
+ *
+ *    FPix affine and projective interpolated transforms
+ *          FPIX          *fpixAffinePta()
+ *          FPIX          *fpixAffine()
+ *          FPIX          *fpixProjectivePta()
+ *          FPIX          *fpixProjective()
+ *          l_int32        linearInterpolatePixelFloat()
+ *
+ *    Thresholding to 1 bpp Pix
+ *          PIX           *fpixThresholdToPix()
+ *
+ *    Generate function from components
+ *          FPIX          *pixComponentFunction()
+ * 
+ */ + +#include +#include "allheaders.h" + +/*--------------------------------------------------------------------* + * FPix <--> Pix conversions * + *--------------------------------------------------------------------*/ +/*! + * \brief pixConvertToFPix() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] ncomps number of components: 3 for RGB, 1 otherwise + * \return fpix, or NULL on error + * + *
+ * Notes:
+ *      (1) If colormapped, remove to grayscale.
+ *      (2) If 32 bpp and %ncomps == 3, this is RGB; convert to luminance.
+ *          In all other cases the src image is treated as having a single
+ *          component of pixel values.
+ * 
+ */ +FPIX * +pixConvertToFPix(PIX *pixs, + l_int32 ncomps) +{ +l_int32 w, h, d, i, j, val, wplt, wpld; +l_uint32 uval; +l_uint32 *datat, *linet; +l_float32 *datad, *lined; +PIX *pixt; +FPIX *fpixd; + + PROCNAME("pixConvertToFPix"); + + if (!pixs) + return (FPIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Convert to a single component */ + if (pixGetColormap(pixs)) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else if (pixGetDepth(pixs) == 32 && ncomps == 3) + pixt = pixConvertRGBToLuminance(pixs); + else + pixt = pixClone(pixs); + pixGetDimensions(pixt, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { + pixDestroy(&pixt); + return (FPIX *)ERROR_PTR("invalid depth", procName, NULL); + } + + if ((fpixd = fpixCreate(w, h)) == NULL) { + pixDestroy(&pixt); + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + } + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = fpixGetData(fpixd); + wpld = fpixGetWpl(fpixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + if (d == 1) { + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(linet, j); + lined[j] = (l_float32)val; + } + } else if (d == 2) { + for (j = 0; j < w; j++) { + val = GET_DATA_DIBIT(linet, j); + lined[j] = (l_float32)val; + } + } else if (d == 4) { + for (j = 0; j < w; j++) { + val = GET_DATA_QBIT(linet, j); + lined[j] = (l_float32)val; + } + } else if (d == 8) { + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linet, j); + lined[j] = (l_float32)val; + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + val = GET_DATA_TWO_BYTES(linet, j); + lined[j] = (l_float32)val; + } + } else { /* d == 32 */ + for (j = 0; j < w; j++) { + uval = GET_DATA_FOUR_BYTES(linet, j); + lined[j] = (l_float32)uval; + } + } + } + + pixDestroy(&pixt); + return fpixd; +} + + +/*! + * \brief pixConvertToDPix() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] ncomps number of components: 3 for RGB, 1 otherwise + * \return dpix, or NULL on error + * + *
+ * Notes:
+ *      (1) If colormapped, remove to grayscale.
+ *      (2) If 32 bpp and %ncomps == 3, this is RGB; convert to luminance.
+ *          In all other cases the src image is treated as having a single
+ *          component of pixel values.
+ * 
+ */ +DPIX * +pixConvertToDPix(PIX *pixs, + l_int32 ncomps) +{ +l_int32 w, h, d, i, j, val, wplt, wpld; +l_uint32 uval; +l_uint32 *datat, *linet; +l_float64 *datad, *lined; +PIX *pixt; +DPIX *dpixd; + + PROCNAME("pixConvertToDPix"); + + if (!pixs) + return (DPIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Convert to a single component */ + if (pixGetColormap(pixs)) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else if (pixGetDepth(pixs) == 32 && ncomps == 3) + pixt = pixConvertRGBToLuminance(pixs); + else + pixt = pixClone(pixs); + pixGetDimensions(pixt, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { + pixDestroy(&pixt); + return (DPIX *)ERROR_PTR("invalid depth", procName, NULL); + } + + if ((dpixd = dpixCreate(w, h)) == NULL) { + pixDestroy(&pixt); + return (DPIX *)ERROR_PTR("dpixd not made", procName, NULL); + } + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = dpixGetData(dpixd); + wpld = dpixGetWpl(dpixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + if (d == 1) { + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(linet, j); + lined[j] = (l_float64)val; + } + } else if (d == 2) { + for (j = 0; j < w; j++) { + val = GET_DATA_DIBIT(linet, j); + lined[j] = (l_float64)val; + } + } else if (d == 4) { + for (j = 0; j < w; j++) { + val = GET_DATA_QBIT(linet, j); + lined[j] = (l_float64)val; + } + } else if (d == 8) { + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linet, j); + lined[j] = (l_float64)val; + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + val = GET_DATA_TWO_BYTES(linet, j); + lined[j] = (l_float64)val; + } + } else { /* d == 32 */ + for (j = 0; j < w; j++) { + uval = GET_DATA_FOUR_BYTES(linet, j); + lined[j] = (l_float64)uval; + } + } + } + + pixDestroy(&pixt); + return dpixd; +} + + +/*! + * \brief fpixConvertToPix() + * + * \param[in] fpixs + * \param[in] outdepth 0, 8, 16 or 32 bpp + * \param[in] negvals L_CLIP_TO_ZERO, L_TAKE_ABSVAL + * \param[in] errorflag 1 to output error stats; 0 otherwise + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %outdepth = 0 to programmatically determine the
+ *          output depth.  If no values are greater than 255,
+ *          it will set outdepth = 8; otherwise to 16 or 32.
+ *      (2) Because we are converting a float to an unsigned int
+ *          with a specified dynamic range (8, 16 or 32 bits), errors
+ *          can occur.  If errorflag == TRUE, output the number
+ *          of values out of range, both negative and positive.
+ *      (3) If a pixel value is positive and out of range, clip to
+ *          the maximum value represented at the outdepth of 8, 16
+ *          or 32 bits.
+ * 
+ */ +PIX * +fpixConvertToPix(FPIX *fpixs, + l_int32 outdepth, + l_int32 negvals, + l_int32 errorflag) +{ +l_int32 w, h, i, j, wpls, wpld; +l_uint32 vald, maxval; +l_float32 val; +l_float32 *datas, *lines; +l_uint32 *datad, *lined; +PIX *pixd; + + PROCNAME("fpixConvertToPix"); + + if (!fpixs) + return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) + return (PIX *)ERROR_PTR("invalid negvals", procName, NULL); + if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) + return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", procName, NULL); + + fpixGetDimensions(fpixs, &w, &h); + datas = fpixGetData(fpixs); + wpls = fpixGetWpl(fpixs); + + /* Adaptive determination of output depth */ + if (outdepth == 0) { + outdepth = 8; + for (i = 0; i < h && outdepth < 32; i++) { + lines = datas + i * wpls; + for (j = 0; j < w && outdepth < 32; j++) { + if (lines[j] > 65535.5) + outdepth = 32; + else if (lines[j] > 255.5) + outdepth = 16; + } + } + } + if (outdepth == 8) + maxval = 0xff; + else if (outdepth == 16) + maxval = 0xffff; + else /* outdepth == 32 */ + maxval = 0xffffffff; + + /* Gather statistics if %errorflag = TRUE */ + if (errorflag) { + l_int32 negs = 0; + l_int32 overvals = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val = lines[j]; + if (val < 0.0) + negs++; + else if (val > maxval) + overvals++; + } + } + if (negs > 0) + L_ERROR("Number of negative values: %d\n", procName, negs); + if (overvals > 0) + L_ERROR("Number of too-large values: %d\n", procName, overvals); + } + + /* Make the pix and convert the data */ + if ((pixd = pixCreate(w, h, outdepth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j]; + if (val >= 0.0) + vald = (l_uint32)(val + 0.5); + else if (negvals == L_CLIP_TO_ZERO) /* and val < 0.0 */ + vald = 0; + else + vald = (l_uint32)(-val + 0.5); + if (vald > maxval) + vald = maxval; + + if (outdepth == 8) + SET_DATA_BYTE(lined, j, vald); + else if (outdepth == 16) + SET_DATA_TWO_BYTES(lined, j, vald); + else /* outdepth == 32 */ + SET_DATA_FOUR_BYTES(lined, j, vald); + } + } + + return pixd; +} + + +/*! + * \brief fpixDisplayMaxDynamicRange() + * + * \param[in] fpixs + * \return pixd 8 bpp, or NULL on error + */ +PIX * +fpixDisplayMaxDynamicRange(FPIX *fpixs) +{ +l_uint8 dval; +l_int32 i, j, w, h, wpls, wpld; +l_float32 factor, sval, maxval; +l_float32 *lines, *datas; +l_uint32 *lined, *datad; +PIX *pixd; + + PROCNAME("fpixDisplayMaxDynamicRange"); + + if (!fpixs) + return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixGetDimensions(fpixs, &w, &h); + datas = fpixGetData(fpixs); + wpls = fpixGetWpl(fpixs); + + maxval = 0.0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + sval = *(lines + j); + if (sval > maxval) + maxval = sval; + } + } + + pixd = pixCreate(w, h, 8); + if (maxval == 0.0) + return pixd; /* all pixels are 0 */ + + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + factor = 255. / maxval; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = *(lines + j); + if (sval < 0.0) sval = 0.0; + dval = (l_uint8)(factor * sval + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + + return pixd; +} + + +/*! + * \brief fpixConvertToDPix() + * + * \param[in] fpix + * \return dpix, or NULL on error + */ +DPIX * +fpixConvertToDPix(FPIX *fpix) +{ +l_int32 w, h, i, j, wpls, wpld; +l_float32 val; +l_float32 *datas, *lines; +l_float64 *datad, *lined; +DPIX *dpix; + + PROCNAME("fpixConvertToDPix"); + + if (!fpix) + return (DPIX *)ERROR_PTR("fpix not defined", procName, NULL); + + fpixGetDimensions(fpix, &w, &h); + if ((dpix = dpixCreate(w, h)) == NULL) + return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); + + datas = fpixGetData(fpix); + datad = dpixGetData(dpix); + wpls = fpixGetWpl(fpix); + wpld = dpixGetWpl(dpix); /* 8 byte words */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j]; + lined[j] = val; + } + } + + return dpix; +} + + +/*! + * \brief dpixConvertToPix() + * + * \param[in] dpixs + * \param[in] outdepth 0, 8, 16 or 32 bpp + * \param[in] negvals L_CLIP_TO_ZERO, L_TAKE_ABSVAL + * \param[in] errorflag 1 to output error stats; 0 otherwise + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %outdepth = 0 to programmatically determine the
+ *          output depth.  If no values are greater than 255,
+ *          it will set outdepth = 8; otherwise to 16 or 32.
+ *      (2) Because we are converting a float to an unsigned int
+ *          with a specified dynamic range (8, 16 or 32 bits), errors
+ *          can occur.  If errorflag == TRUE, output the number
+ *          of values out of range, both negative and positive.
+ *      (3) If a pixel value is positive and out of range, clip to
+ *          the maximum value represented at the outdepth of 8, 16
+ *          or 32 bits.
+ * 
+ */ +PIX * +dpixConvertToPix(DPIX *dpixs, + l_int32 outdepth, + l_int32 negvals, + l_int32 errorflag) +{ +l_int32 w, h, i, j, wpls, wpld, maxval; +l_uint32 vald; +l_float64 val; +l_float64 *datas, *lines; +l_uint32 *datad, *lined; +PIX *pixd; + + PROCNAME("dpixConvertToPix"); + + if (!dpixs) + return (PIX *)ERROR_PTR("dpixs not defined", procName, NULL); + if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) + return (PIX *)ERROR_PTR("invalid negvals", procName, NULL); + if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) + return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", procName, NULL); + + dpixGetDimensions(dpixs, &w, &h); + datas = dpixGetData(dpixs); + wpls = dpixGetWpl(dpixs); + + /* Adaptive determination of output depth */ + if (outdepth == 0) { + outdepth = 8; + for (i = 0; i < h && outdepth < 32; i++) { + lines = datas + i * wpls; + for (j = 0; j < w && outdepth < 32; j++) { + if (lines[j] > 65535.5) + outdepth = 32; + else if (lines[j] > 255.5) + outdepth = 16; + } + } + } + maxval = 0xff; + if (outdepth == 16) + maxval = 0xffff; + else /* outdepth == 32 */ + maxval = 0xffffffff; + + /* Gather statistics if %errorflag = TRUE */ + if (errorflag) { + l_int32 negs = 0; + l_int32 overvals = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val = lines[j]; + if (val < 0.0) + negs++; + else if (val > maxval) + overvals++; + } + } + if (negs > 0) + L_ERROR("Number of negative values: %d\n", procName, negs); + if (overvals > 0) + L_ERROR("Number of too-large values: %d\n", procName, overvals); + } + + /* Make the pix and convert the data */ + if ((pixd = pixCreate(w, h, outdepth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j]; + if (val >= 0.0) { + vald = (l_uint32)(val + 0.5); + } else { /* val < 0.0 */ + if (negvals == L_CLIP_TO_ZERO) + vald = 0; + else + vald = (l_uint32)(-val + 0.5); + } + if (vald > maxval) + vald = maxval; + if (outdepth == 8) + SET_DATA_BYTE(lined, j, vald); + else if (outdepth == 16) + SET_DATA_TWO_BYTES(lined, j, vald); + else /* outdepth == 32 */ + SET_DATA_FOUR_BYTES(lined, j, vald); + } + } + + return pixd; +} + + +/*! + * \brief dpixConvertToFPix() + * + * \param[in] dpix + * \return fpix, or NULL on error + */ +FPIX * +dpixConvertToFPix(DPIX *dpix) +{ +l_int32 w, h, i, j, wpls, wpld; +l_float64 val; +l_float32 *datad, *lined; +l_float64 *datas, *lines; +FPIX *fpix; + + PROCNAME("dpixConvertToFPix"); + + if (!dpix) + return (FPIX *)ERROR_PTR("dpix not defined", procName, NULL); + + dpixGetDimensions(dpix, &w, &h); + if ((fpix = fpixCreate(w, h)) == NULL) + return (FPIX *)ERROR_PTR("fpix not made", procName, NULL); + + datas = dpixGetData(dpix); + datad = fpixGetData(fpix); + wpls = dpixGetWpl(dpix); /* 8 byte words */ + wpld = fpixGetWpl(fpix); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j]; + lined[j] = (l_float32)val; + } + } + + return fpix; +} + + + +/*--------------------------------------------------------------------* + * Min/max value * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixGetMin() + * + * \param[in] fpix + * \param[out] pminval [optional] min value + * \param[out] pxminloc [optional] x location of min + * \param[out] pyminloc [optional] y location of min + * \return 0 if OK; 1 on error + */ +l_ok +fpixGetMin(FPIX *fpix, + l_float32 *pminval, + l_int32 *pxminloc, + l_int32 *pyminloc) +{ +l_int32 i, j, w, h, wpl, xminloc, yminloc; +l_float32 *data, *line; +l_float32 minval; + + PROCNAME("fpixGetMin"); + + if (!pminval && !pxminloc && !pyminloc) + return ERROR_INT("no return val requested", procName, 1); + if (pminval) *pminval = 0.0; + if (pxminloc) *pxminloc = 0; + if (pyminloc) *pyminloc = 0; + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + minval = +1.0e20; + xminloc = 0; + yminloc = 0; + fpixGetDimensions(fpix, &w, &h); + data = fpixGetData(fpix); + wpl = fpixGetWpl(fpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + if (line[j] < minval) { + minval = line[j]; + xminloc = j; + yminloc = i; + } + } + } + + if (pminval) *pminval = minval; + if (pxminloc) *pxminloc = xminloc; + if (pyminloc) *pyminloc = yminloc; + return 0; +} + + +/*! + * \brief fpixGetMax() + * + * \param[in] fpix + * \param[out] pmaxval [optional] max value + * \param[out] pxmaxloc [optional] x location of max + * \param[out] pymaxloc [optional] y location of max + * \return 0 if OK; 1 on error + */ +l_ok +fpixGetMax(FPIX *fpix, + l_float32 *pmaxval, + l_int32 *pxmaxloc, + l_int32 *pymaxloc) +{ +l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; +l_float32 *data, *line; +l_float32 maxval; + + PROCNAME("fpixGetMax"); + + if (!pmaxval && !pxmaxloc && !pymaxloc) + return ERROR_INT("no return val requested", procName, 1); + if (pmaxval) *pmaxval = 0.0; + if (pxmaxloc) *pxmaxloc = 0; + if (pymaxloc) *pymaxloc = 0; + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + maxval = -1.0e20; + xmaxloc = 0; + ymaxloc = 0; + fpixGetDimensions(fpix, &w, &h); + data = fpixGetData(fpix); + wpl = fpixGetWpl(fpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + if (line[j] > maxval) { + maxval = line[j]; + xmaxloc = j; + ymaxloc = i; + } + } + } + + if (pmaxval) *pmaxval = maxval; + if (pxmaxloc) *pxmaxloc = xmaxloc; + if (pymaxloc) *pymaxloc = ymaxloc; + return 0; +} + + +/*! + * \brief dpixGetMin() + * + * \param[in] dpix + * \param[out] pminval [optional] min value + * \param[out] pxminloc [optional] x location of min + * \param[out] pyminloc [optional] y location of min + * \return 0 if OK; 1 on error + */ +l_ok +dpixGetMin(DPIX *dpix, + l_float64 *pminval, + l_int32 *pxminloc, + l_int32 *pyminloc) +{ +l_int32 i, j, w, h, wpl, xminloc, yminloc; +l_float64 *data, *line; +l_float64 minval; + + PROCNAME("dpixGetMin"); + + if (!pminval && !pxminloc && !pyminloc) + return ERROR_INT("no return val requested", procName, 1); + if (pminval) *pminval = 0.0; + if (pxminloc) *pxminloc = 0; + if (pyminloc) *pyminloc = 0; + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + minval = +1.0e300; + xminloc = 0; + yminloc = 0; + dpixGetDimensions(dpix, &w, &h); + data = dpixGetData(dpix); + wpl = dpixGetWpl(dpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + if (line[j] < minval) { + minval = line[j]; + xminloc = j; + yminloc = i; + } + } + } + + if (pminval) *pminval = minval; + if (pxminloc) *pxminloc = xminloc; + if (pyminloc) *pyminloc = yminloc; + return 0; +} + + +/*! + * \brief dpixGetMax() + * + * \param[in] dpix + * \param[out] pmaxval [optional] max value + * \param[out] pxmaxloc [optional] x location of max + * \param[out] pymaxloc [optional] y location of max + * \return 0 if OK; 1 on error + */ +l_ok +dpixGetMax(DPIX *dpix, + l_float64 *pmaxval, + l_int32 *pxmaxloc, + l_int32 *pymaxloc) +{ +l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; +l_float64 *data, *line; +l_float64 maxval; + + PROCNAME("dpixGetMax"); + + if (!pmaxval && !pxmaxloc && !pymaxloc) + return ERROR_INT("no return val requested", procName, 1); + if (pmaxval) *pmaxval = 0.0; + if (pxmaxloc) *pxmaxloc = 0; + if (pymaxloc) *pymaxloc = 0; + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + maxval = -1.0e20; + xmaxloc = 0; + ymaxloc = 0; + dpixGetDimensions(dpix, &w, &h); + data = dpixGetData(dpix); + wpl = dpixGetWpl(dpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + if (line[j] > maxval) { + maxval = line[j]; + xmaxloc = j; + ymaxloc = i; + } + } + } + + if (pmaxval) *pmaxval = maxval; + if (pxmaxloc) *pxmaxloc = xmaxloc; + if (pymaxloc) *pymaxloc = ymaxloc; + return 0; +} + + +/*--------------------------------------------------------------------* + * Special integer scaling * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixScaleByInteger() + * + * \param[in] fpixs typically low resolution + * \param[in] factor integer scaling factor + * \return fpixd interpolated result, or NULL on error + * + *
+ * Notes:
+ *      (1) The width wd of fpixd is related to ws of fpixs by:
+ *              wd = factor * (ws - 1) + 1   (and ditto for the height)
+ *          We avoid special-casing boundary pixels in the interpolation
+ *          by constructing fpixd by inserting (factor - 1) interpolated
+ *          pixels between each pixel in fpixs.  Then
+ *               wd = ws + (ws - 1) * (factor - 1)    (same as above)
+ *          This also has the advantage that if we subsample by %factor,
+ *          throwing out all the interpolated pixels, we regain the
+ *          original low resolution fpix.
+ * 
+ */ +FPIX * +fpixScaleByInteger(FPIX *fpixs, + l_int32 factor) +{ +l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; +l_float32 val0, val1, val2, val3; +l_float32 *datas, *datad, *lines, *lined, *fract; +FPIX *fpixd; + + PROCNAME("fpixScaleByInteger"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixGetDimensions(fpixs, &ws, &hs); + wd = factor * (ws - 1) + 1; + hd = factor * (hs - 1) + 1; + fpixd = fpixCreate(wd, hd); + datas = fpixGetData(fpixs); + datad = fpixGetData(fpixd); + wpls = fpixGetWpl(fpixs); + wpld = fpixGetWpl(fpixd); + fract = (l_float32 *)LEPT_CALLOC(factor, sizeof(l_float32)); + for (i = 0; i < factor; i++) + fract[i] = i / (l_float32)factor; + for (i = 0; i < hs - 1; i++) { + lines = datas + i * wpls; + for (j = 0; j < ws - 1; j++) { + val0 = lines[j]; + val1 = lines[j + 1]; + val2 = lines[wpls + j]; + val3 = lines[wpls + j + 1]; + for (k = 0; k < factor; k++) { /* rows of sub-block */ + lined = datad + (i * factor + k) * wpld; + for (m = 0; m < factor; m++) { /* cols of sub-block */ + lined[j * factor + m] = + val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + + val1 * fract[m] * (1.0 - fract[k]) + + val2 * (1.0 - fract[m]) * fract[k] + + val3 * fract[m] * fract[k]; + } + } + } + } + + /* Do the right-most column of fpixd, skipping LR corner */ + for (i = 0; i < hs - 1; i++) { + lines = datas + i * wpls; + val0 = lines[ws - 1]; + val1 = lines[wpls + ws - 1]; + for (k = 0; k < factor; k++) { + lined = datad + (i * factor + k) * wpld; + lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; + } + } + + /* Do the bottom-most row of fpixd */ + lines = datas + (hs - 1) * wpls; + lined = datad + (hd - 1) * wpld; + for (j = 0; j < ws - 1; j++) { + val0 = lines[j]; + val1 = lines[j + 1]; + for (m = 0; m < factor; m++) + lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; + lined[wd - 1] = lines[ws - 1]; /* LR corner */ + } + + LEPT_FREE(fract); + return fpixd; +} + + +/*! + * \brief dpixScaleByInteger() + * + * \param[in] dpixs typically low resolution + * \param[in] factor integer scaling factor + * \return dpixd interpolated result, or NULL on error + * + *
+ * Notes:
+ *      (1) The width wd of dpixd is related to ws of dpixs by:
+ *              wd = factor * (ws - 1) + 1   (and ditto for the height)
+ *          We avoid special-casing boundary pixels in the interpolation
+ *          by constructing fpixd by inserting (factor - 1) interpolated
+ *          pixels between each pixel in fpixs.  Then
+ *               wd = ws + (ws - 1) * (factor - 1)    (same as above)
+ *          This also has the advantage that if we subsample by %factor,
+ *          throwing out all the interpolated pixels, we regain the
+ *          original low resolution dpix.
+ * 
+ */ +DPIX * +dpixScaleByInteger(DPIX *dpixs, + l_int32 factor) +{ +l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; +l_float64 val0, val1, val2, val3; +l_float64 *datas, *datad, *lines, *lined, *fract; +DPIX *dpixd; + + PROCNAME("dpixScaleByInteger"); + + if (!dpixs) + return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); + + dpixGetDimensions(dpixs, &ws, &hs); + wd = factor * (ws - 1) + 1; + hd = factor * (hs - 1) + 1; + dpixd = dpixCreate(wd, hd); + datas = dpixGetData(dpixs); + datad = dpixGetData(dpixd); + wpls = dpixGetWpl(dpixs); + wpld = dpixGetWpl(dpixd); + fract = (l_float64 *)LEPT_CALLOC(factor, sizeof(l_float64)); + for (i = 0; i < factor; i++) + fract[i] = i / (l_float64)factor; + for (i = 0; i < hs - 1; i++) { + lines = datas + i * wpls; + for (j = 0; j < ws - 1; j++) { + val0 = lines[j]; + val1 = lines[j + 1]; + val2 = lines[wpls + j]; + val3 = lines[wpls + j + 1]; + for (k = 0; k < factor; k++) { /* rows of sub-block */ + lined = datad + (i * factor + k) * wpld; + for (m = 0; m < factor; m++) { /* cols of sub-block */ + lined[j * factor + m] = + val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + + val1 * fract[m] * (1.0 - fract[k]) + + val2 * (1.0 - fract[m]) * fract[k] + + val3 * fract[m] * fract[k]; + } + } + } + } + + /* Do the right-most column of dpixd, skipping LR corner */ + for (i = 0; i < hs - 1; i++) { + lines = datas + i * wpls; + val0 = lines[ws - 1]; + val1 = lines[wpls + ws - 1]; + for (k = 0; k < factor; k++) { + lined = datad + (i * factor + k) * wpld; + lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; + } + } + + /* Do the bottom-most row of dpixd */ + lines = datas + (hs - 1) * wpls; + lined = datad + (hd - 1) * wpld; + for (j = 0; j < ws - 1; j++) { + val0 = lines[j]; + val1 = lines[j + 1]; + for (m = 0; m < factor; m++) + lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; + lined[wd - 1] = lines[ws - 1]; /* LR corner */ + } + + LEPT_FREE(fract); + return dpixd; +} + + +/*--------------------------------------------------------------------* + * Arithmetic operations * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixLinearCombination() + * + * \param[in] fpixd [optional] this can be null, equal to fpixs1, or + * different from fpixs1 + * \param[in] fpixs1 can be equal to fpixd + * \param[in] fpixs2 + * \param[in] a, b multiplication factors on fpixs1 and fpixs2, rsp. + * \return fpixd always + * + *
+ * Notes:
+ *      (1) Computes pixelwise linear combination: a * src1 + b * src2
+ *      (2) Alignment is to UL corner.
+ *      (3) There are 3 cases.  The result can go to a new dest,
+ *          in-place to fpixs1, or to an existing input dest:
+ *          * fpixd == null:   (src1 + src2) --> new fpixd
+ *          * fpixd == fpixs1:  (src1 + src2) --> src1  (in-place)
+ *          * fpixd != fpixs1: (src1 + src2) --> input fpixd
+ *      (4) fpixs2 must be different from both fpixd and fpixs1.
+ * 
+ */ +FPIX * +fpixLinearCombination(FPIX *fpixd, + FPIX *fpixs1, + FPIX *fpixs2, + l_float32 a, + l_float32 b) +{ +l_int32 i, j, ws, hs, w, h, wpls, wpld; +l_float32 *datas, *datad, *lines, *lined; + + PROCNAME("fpixLinearCombination"); + + if (!fpixs1) + return (FPIX *)ERROR_PTR("fpixs1 not defined", procName, fpixd); + if (!fpixs2) + return (FPIX *)ERROR_PTR("fpixs2 not defined", procName, fpixd); + if (fpixs1 == fpixs2) + return (FPIX *)ERROR_PTR("fpixs1 == fpixs2", procName, fpixd); + if (fpixs2 == fpixd) + return (FPIX *)ERROR_PTR("fpixs2 == fpixd", procName, fpixd); + + if (fpixs1 != fpixd) + fpixd = fpixCopy(fpixd, fpixs1); + + datas = fpixGetData(fpixs2); + datad = fpixGetData(fpixd); + wpls = fpixGetWpl(fpixs2); + wpld = fpixGetWpl(fpixd); + fpixGetDimensions(fpixs2, &ws, &hs); + fpixGetDimensions(fpixd, &w, &h); + w = L_MIN(ws, w); + h = L_MIN(hs, h); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) + lined[j] = a * lined[j] + b * lines[j]; + } + + return fpixd; +} + + +/*! + * \brief fpixAddMultConstant() + * + * \param[in] fpix + * \param[in] addc use 0.0 to skip the operation + * \param[in] multc use 1.0 to skip the operation + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) It can be used to multiply each pixel by a constant,
+ *          and also to add a constant to each pixel.  Multiplication
+ *          is done first.
+ * 
+ */ +l_ok +fpixAddMultConstant(FPIX *fpix, + l_float32 addc, + l_float32 multc) +{ +l_int32 i, j, w, h, wpl; +l_float32 *line, *data; + + PROCNAME("fpixAddMultConstant"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + if (addc == 0.0 && multc == 1.0) + return 0; + + fpixGetDimensions(fpix, &w, &h); + data = fpixGetData(fpix); + wpl = fpixGetWpl(fpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (addc == 0.0) { + for (j = 0; j < w; j++) + line[j] *= multc; + } else if (multc == 1.0) { + for (j = 0; j < w; j++) + line[j] += addc; + } else { + for (j = 0; j < w; j++) { + line[j] = multc * line[j] + addc; + } + } + } + + return 0; +} + + +/*! + * \brief dpixLinearCombination() + * + * \param[in] dpixd [optional] this can be null, equal to dpixs1, or + * different from dpixs1 + * \param[in] dpixs1 can be equal to dpixd + * \param[in] dpixs2 + * \param[in] a, b multiplication factors on dpixs1 and dpixs2, rsp. + * \return dpixd always + * + *
+ * Notes:
+ *      (1) Computes pixelwise linear combination: a * src1 + b * src2
+ *      (2) Alignment is to UL corner.
+ *      (3) There are 3 cases.  The result can go to a new dest,
+ *          in-place to dpixs1, or to an existing input dest:
+ *          * dpixd == null:   (src1 + src2) --> new dpixd
+ *          * dpixd == dpixs1:  (src1 + src2) --> src1  (in-place)
+ *          * dpixd != dpixs1: (src1 + src2) --> input dpixd
+ *      (4) dpixs2 must be different from both dpixd and dpixs1.
+ * 
+ */ +DPIX * +dpixLinearCombination(DPIX *dpixd, + DPIX *dpixs1, + DPIX *dpixs2, + l_float32 a, + l_float32 b) +{ +l_int32 i, j, ws, hs, w, h, wpls, wpld; +l_float64 *datas, *datad, *lines, *lined; + + PROCNAME("dpixLinearCombination"); + + if (!dpixs1) + return (DPIX *)ERROR_PTR("dpixs1 not defined", procName, dpixd); + if (!dpixs2) + return (DPIX *)ERROR_PTR("dpixs2 not defined", procName, dpixd); + if (dpixs1 == dpixs2) + return (DPIX *)ERROR_PTR("dpixs1 == dpixs2", procName, dpixd); + if (dpixs2 == dpixd) + return (DPIX *)ERROR_PTR("dpixs2 == dpixd", procName, dpixd); + + if (dpixs1 != dpixd) + dpixd = dpixCopy(dpixd, dpixs1); + + datas = dpixGetData(dpixs2); + datad = dpixGetData(dpixd); + wpls = dpixGetWpl(dpixs2); + wpld = dpixGetWpl(dpixd); + dpixGetDimensions(dpixs2, &ws, &hs); + dpixGetDimensions(dpixd, &w, &h); + w = L_MIN(ws, w); + h = L_MIN(hs, h); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) + lined[j] = a * lined[j] + b * lines[j]; + } + + return dpixd; +} + + +/*! + * \brief dpixAddMultConstant() + * + * \param[in] dpix + * \param[in] addc use 0.0 to skip the operation + * \param[in] multc use 1.0 to skip the operation + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) It can be used to multiply each pixel by a constant,
+ *          and also to add a constant to each pixel.  Multiplication
+ *          is done first.
+ * 
+ */ +l_ok +dpixAddMultConstant(DPIX *dpix, + l_float64 addc, + l_float64 multc) +{ +l_int32 i, j, w, h, wpl; +l_float64 *line, *data; + + PROCNAME("dpixAddMultConstant"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + if (addc == 0.0 && multc == 1.0) + return 0; + + dpixGetDimensions(dpix, &w, &h); + data = dpixGetData(dpix); + wpl = dpixGetWpl(dpix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (addc == 0.0) { + for (j = 0; j < w; j++) + line[j] *= multc; + } else if (multc == 1.0) { + for (j = 0; j < w; j++) + line[j] += addc; + } else { + for (j = 0; j < w; j++) + line[j] = multc * line[j] + addc; + } + } + + return 0; +} + + +/*--------------------------------------------------------------------* + * Set all * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixSetAllArbitrary() + * + * \param[in] fpix + * \param[in] inval to set at each pixel + * \return 0 if OK, 1 on error + */ +l_ok +fpixSetAllArbitrary(FPIX *fpix, + l_float32 inval) +{ +l_int32 i, j, w, h; +l_float32 *data, *line; + + PROCNAME("fpixSetAllArbitrary"); + + if (!fpix) + return ERROR_INT("fpix not defined", procName, 1); + + fpixGetDimensions(fpix, &w, &h); + data = fpixGetData(fpix); + for (i = 0; i < h; i++) { + line = data + i * w; + for (j = 0; j < w; j++) + *(line + j) = inval; + } + + return 0; +} + + +/*! + * \brief dpixSetAllArbitrary() + * + * \param[in] dpix + * \param[in] inval to set at each pixel + * \return 0 if OK, 1 on error + */ +l_ok +dpixSetAllArbitrary(DPIX *dpix, + l_float64 inval) +{ +l_int32 i, j, w, h; +l_float64 *data, *line; + + PROCNAME("dpixSetAllArbitrary"); + + if (!dpix) + return ERROR_INT("dpix not defined", procName, 1); + + dpixGetDimensions(dpix, &w, &h); + data = dpixGetData(dpix); + for (i = 0; i < h; i++) { + line = data + i * w; + for (j = 0; j < w; j++) + *(line + j) = inval; + } + + return 0; +} + + +/*--------------------------------------------------------------------* + * Border functions * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixAddBorder() + * + * \param[in] fpixs + * \param[in] left, right, top, bot pixels on each side to be added + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds border of '0' 32-bit pixels
+ * 
+ */ +FPIX * +fpixAddBorder(FPIX *fpixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 ws, hs, wd, hd; +FPIX *fpixd; + + PROCNAME("fpixAddBorder"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) + return fpixCopy(NULL, fpixs); + fpixGetDimensions(fpixs, &ws, &hs); + wd = ws + left + right; + hd = hs + top + bot; + if ((fpixd = fpixCreate(wd, hd)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + + fpixCopyResolution(fpixd, fpixs); + fpixRasterop(fpixd, left, top, ws, hs, fpixs, 0, 0); + return fpixd; +} + + +/*! + * \brief fpixRemoveBorder() + * + * \param[in] fpixs + * \param[in] left, right, top, bot pixels on each side to be removed + * \return fpixd, or NULL on error + */ +FPIX * +fpixRemoveBorder(FPIX *fpixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 ws, hs, wd, hd; +FPIX *fpixd; + + PROCNAME("fpixRemoveBorder"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) + return fpixCopy(NULL, fpixs); + fpixGetDimensions(fpixs, &ws, &hs); + wd = ws - left - right; + hd = hs - top - bot; + if (wd <= 0 || hd <= 0) + return (FPIX *)ERROR_PTR("width & height not both > 0", procName, NULL); + if ((fpixd = fpixCreate(wd, hd)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + + fpixCopyResolution(fpixd, fpixs); + fpixRasterop(fpixd, 0, 0, wd, hd, fpixs, left, top); + return fpixd; +} + + + +/*! + * \brief fpixAddMirroredBorder() + * + * \param[in] fpixs + * \param[in] left, right, top, bot pixels on each side to be added + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixAddMirroredBorder() for situations of usage.
+ * 
+ */ +FPIX * +fpixAddMirroredBorder(FPIX *fpixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h; +FPIX *fpixd; + + PROCNAME("fpixAddMirroredBorder"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixd = fpixAddBorder(fpixs, left, right, top, bot); + fpixGetDimensions(fpixs, &w, &h); + for (j = 0; j < left; j++) + fpixRasterop(fpixd, left - 1 - j, top, 1, h, + fpixd, left + j, top); + for (j = 0; j < right; j++) + fpixRasterop(fpixd, left + w + j, top, 1, h, + fpixd, left + w - 1 - j, top); + for (i = 0; i < top; i++) + fpixRasterop(fpixd, 0, top - 1 - i, left + w + right, 1, + fpixd, 0, top + i); + for (i = 0; i < bot; i++) + fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, + fpixd, 0, top + h - 1 - i); + + return fpixd; +} + + +/*! + * \brief fpixAddContinuedBorder() + * + * \param[in] fpixs + * \param[in] left, right, top, bot pixels on each side to be added + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This adds pixels on each side whose values are equal to
+ *          the value on the closest boundary pixel.
+ * 
+ */ +FPIX * +fpixAddContinuedBorder(FPIX *fpixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h; +FPIX *fpixd; + + PROCNAME("fpixAddContinuedBorder"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixd = fpixAddBorder(fpixs, left, right, top, bot); + fpixGetDimensions(fpixs, &w, &h); + for (j = 0; j < left; j++) + fpixRasterop(fpixd, j, top, 1, h, fpixd, left, top); + for (j = 0; j < right; j++) + fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1, top); + for (i = 0; i < top; i++) + fpixRasterop(fpixd, 0, i, left + w + right, 1, fpixd, 0, top); + for (i = 0; i < bot; i++) + fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, + fpixd, 0, top + h - 1); + + return fpixd; +} + + +/*! + * \brief fpixAddSlopeBorder() + * + * \param[in] fpixs + * \param[in] left, right, top, bot pixels on each side to be added + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This adds pixels on each side whose values have a normal
+ *          derivative equal to the normal derivative at the boundary
+ *          of fpixs.
+ * 
+ */ +FPIX * +fpixAddSlopeBorder(FPIX *fpixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h, fullw, fullh; +l_float32 val1, val2, del; +FPIX *fpixd; + + PROCNAME("fpixAddSlopeBorder"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixd = fpixAddBorder(fpixs, left, right, top, bot); + fpixGetDimensions(fpixs, &w, &h); + + /* Left */ + for (i = top; i < top + h; i++) { + fpixGetPixel(fpixd, left, i, &val1); + fpixGetPixel(fpixd, left + 1, i, &val2); + del = val1 - val2; + for (j = 0; j < left; j++) + fpixSetPixel(fpixd, j, i, val1 + del * (left - j)); + } + + /* Right */ + fullw = left + w + right; + for (i = top; i < top + h; i++) { + fpixGetPixel(fpixd, left + w - 1, i, &val1); + fpixGetPixel(fpixd, left + w - 2, i, &val2); + del = val1 - val2; + for (j = left + w; j < fullw; j++) + fpixSetPixel(fpixd, j, i, val1 + del * (j - left - w + 1)); + } + + /* Top */ + for (j = 0; j < fullw; j++) { + fpixGetPixel(fpixd, j, top, &val1); + fpixGetPixel(fpixd, j, top + 1, &val2); + del = val1 - val2; + for (i = 0; i < top; i++) + fpixSetPixel(fpixd, j, i, val1 + del * (top - i)); + } + + /* Bottom */ + fullh = top + h + bot; + for (j = 0; j < fullw; j++) { + fpixGetPixel(fpixd, j, top + h - 1, &val1); + fpixGetPixel(fpixd, j, top + h - 2, &val2); + del = val1 - val2; + for (i = top + h; i < fullh; i++) + fpixSetPixel(fpixd, j, i, val1 + del * (i - top - h + 1)); + } + + return fpixd; +} + + +/*--------------------------------------------------------------------* + * Simple rasterop * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixRasterop() + * + * \param[in] fpixd dest fpix + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] fpixs src fpix + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return 0 if OK; 1 on error. + * + *
+ * Notes:
+ *      (1) This is similar in structure to pixRasterop(), except
+ *          it only allows copying from the source into the destination.
+ *          For that reason, no op code is necessary.  Additionally,
+ *          all pixels are 32 bit words (float values), which makes
+ *          the copy very simple.
+ *      (2) Clipping of both src and dest fpix are done automatically.
+ *      (3) This allows in-place copying, without checking to see if
+ *          the result is valid:  use for in-place with caution!
+ * 
+ */ +l_ok +fpixRasterop(FPIX *fpixd, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + FPIX *fpixs, + l_int32 sx, + l_int32 sy) +{ +l_int32 fsw, fsh, fdw, fdh, dhangw, shangw, dhangh, shangh; +l_int32 i, j, wpls, wpld; +l_float32 *datas, *datad, *lines, *lined; + + PROCNAME("fpixRasterop"); + + if (!fpixs) + return ERROR_INT("fpixs not defined", procName, 1); + if (!fpixd) + return ERROR_INT("fpixd not defined", procName, 1); + + /* -------------------------------------------------------- * + * Clip to maximum rectangle with both src and dest * + * -------------------------------------------------------- */ + fpixGetDimensions(fpixs, &fsw, &fsh); + fpixGetDimensions(fpixd, &fdw, &fdh); + + /* First clip horizontally (sx, dx, dw) */ + if (dx < 0) { + sx -= dx; /* increase sx */ + dw += dx; /* reduce dw */ + dx = 0; + } + if (sx < 0) { + dx -= sx; /* increase dx */ + dw += sx; /* reduce dw */ + sx = 0; + } + dhangw = dx + dw - fdw; /* rect overhang of dest to right */ + if (dhangw > 0) + dw -= dhangw; /* reduce dw */ + shangw = sx + dw - fsw; /* rect overhang of src to right */ + if (shangw > 0) + dw -= shangw; /* reduce dw */ + + /* Then clip vertically (sy, dy, dh) */ + if (dy < 0) { + sy -= dy; /* increase sy */ + dh += dy; /* reduce dh */ + dy = 0; + } + if (sy < 0) { + dy -= sy; /* increase dy */ + dh += sy; /* reduce dh */ + sy = 0; + } + dhangh = dy + dh - fdh; /* rect overhang of dest below */ + if (dhangh > 0) + dh -= dhangh; /* reduce dh */ + shangh = sy + dh - fsh; /* rect overhang of src below */ + if (shangh > 0) + dh -= shangh; /* reduce dh */ + + /* if clipped entirely, quit */ + if ((dw <= 0) || (dh <= 0)) + return 0; + + /* -------------------------------------------------------- * + * Copy block of data * + * -------------------------------------------------------- */ + datas = fpixGetData(fpixs); + datad = fpixGetData(fpixd); + wpls = fpixGetWpl(fpixs); + wpld = fpixGetWpl(fpixd); + datas += sy * wpls + sx; /* at UL corner of block */ + datad += dy * wpld + dx; /* at UL corner of block */ + for (i = 0; i < dh; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < dw; j++) { + *lined = *lines; + lines++; + lined++; + } + } + + return 0; +} + + +/*--------------------------------------------------------------------* + * Rotation by multiples of 90 degrees * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixRotateOrth() + * + * \param[in] fpixs + * \param[in] quads 0-3; number of 90 degree cw rotations + * \return fpixd, or NULL on error + */ +FPIX * +fpixRotateOrth(FPIX *fpixs, + l_int32 quads) +{ + PROCNAME("fpixRotateOrth"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (quads < 0 || quads > 3) + return (FPIX *)ERROR_PTR("quads not in {0,1,2,3}", procName, NULL); + + if (quads == 0) + return fpixCopy(NULL, fpixs); + else if (quads == 1) + return fpixRotate90(fpixs, 1); + else if (quads == 2) + return fpixRotate180(NULL, fpixs); + else /* quads == 3 */ + return fpixRotate90(fpixs, -1); +} + + +/*! + * \brief fpixRotate180() + * + * \param[in] fpixd [optional] can be null, equal to fpixs, + * or different from fpixs + * \param[in] fpixs + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a 180 rotation of the image about the center,
+ *          which is equivalent to a left-right flip about a vertical
+ *          line through the image center, followed by a top-bottom
+ *          flip about a horizontal line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) fpixd == null (creates a new fpixd)
+ *          (b) fpixd == fpixs (in-place operation)
+ *          (c) fpixd != fpixs (existing fpixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) fpixd = fpixRotate180(NULL, fpixs);
+ *          (b) fpixRotate180(fpixs, fpixs);
+ *          (c) fpixRotate180(fpixd, fpixs);
+ * 
+ */ +FPIX * +fpixRotate180(FPIX *fpixd, + FPIX *fpixs) +{ + PROCNAME("fpixRotate180"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + + fpixFlipLR(fpixd, fpixd); + fpixFlipTB(fpixd, fpixd); + return fpixd; +} + + +/*! + * \brief fpixRotate90() + * + * \param[in] fpixs + * \param[in] direction 1 = clockwise; -1 = counter-clockwise + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a 90 degree rotation of the image about the center,
+ *          either cw or ccw, returning a new pix.
+ *      (2) The direction must be either 1 (cw) or -1 (ccw).
+ * 
+ */ +FPIX * +fpixRotate90(FPIX *fpixs, + l_int32 direction) +{ +l_int32 i, j, wd, hd, wpls, wpld; +l_float32 *datas, *datad, *lines, *lined; +FPIX *fpixd; + + PROCNAME("fpixRotate90"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (direction != 1 && direction != -1) + return (FPIX *)ERROR_PTR("invalid direction", procName, NULL); + + fpixGetDimensions(fpixs, &hd, &wd); + if ((fpixd = fpixCreate(wd, hd)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + fpixCopyResolution(fpixd, fpixs); + + datas = fpixGetData(fpixs); + wpls = fpixGetWpl(fpixs); + datad = fpixGetData(fpixd); + wpld = fpixGetWpl(fpixd); + if (direction == 1) { /* clockwise */ + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + lined[j] = lines[i]; + lines -= wpls; + } + } + } else { /* ccw */ + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + lined[j] = lines[hd - 1 - i]; + lines += wpls; + } + } + } + + return fpixd; +} + + +/*! + * \brief pixFlipLR() + * + * \param[in] fpixd [optional] can be null, equal to fpixs, + * or different from fpixs + * \param[in] fpixs + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a left-right flip of the image, which is
+ *          equivalent to a rotation out of the plane about a
+ *          vertical line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) fpixd == null (creates a new fpixd)
+ *          (b) fpixd == fpixs (in-place operation)
+ *          (c) fpixd != fpixs (existing fpixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) fpixd = fpixFlipLR(NULL, fpixs);
+ *          (b) fpixFlipLR(fpixs, fpixs);
+ *          (c) fpixFlipLR(fpixd, fpixs);
+ *      (4) If an existing fpixd is not the same size as fpixs, the
+ *          image data will be reallocated.
+ * 
+ */ +FPIX * +fpixFlipLR(FPIX *fpixd, + FPIX *fpixs) +{ +l_int32 i, j, w, h, wpl, bpl; +l_float32 *line, *data, *buffer; + + PROCNAME("fpixFlipLR"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + fpixGetDimensions(fpixs, &w, &h); + + /* Prepare fpixd for in-place operation */ + if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + + data = fpixGetData(fpixd); + wpl = fpixGetWpl(fpixd); /* 4-byte words */ + bpl = 4 * wpl; + if ((buffer = (l_float32 *)LEPT_CALLOC(wpl, sizeof(l_float32))) == NULL) { + fpixDestroy(&fpixd); + return (FPIX *)ERROR_PTR("buffer not made", procName, NULL); + } + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < w; j++) + line[j] = buffer[w - 1 - j]; + } + LEPT_FREE(buffer); + return fpixd; +} + + +/*! + * \brief fpixFlipTB() + * + * \param[in] fpixd [optional] can be null, equal to fpixs, + * or different from fpixs + * \param[in] fpixs + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a top-bottom flip of the image, which is
+ *          equivalent to a rotation out of the plane about a
+ *          horizontal line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) fpixd == null (creates a new fpixd)
+ *          (b) fpixd == fpixs (in-place operation)
+ *          (c) fpixd != fpixs (existing fpixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) fpixd = fpixFlipTB(NULL, fpixs);
+ *          (b) fpixFlipTB(fpixs, fpixs);
+ *          (c) fpixFlipTB(fpixd, fpixs);
+ *      (4) If an existing fpixd is not the same size as fpixs, the
+ *          image data will be reallocated.
+ * 
+ */ +FPIX * +fpixFlipTB(FPIX *fpixd, + FPIX *fpixs) +{ +l_int32 i, k, h, h2, wpl, bpl; +l_float32 *linet, *lineb, *data, *buffer; + + PROCNAME("fpixFlipTB"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + + /* Prepare fpixd for in-place operation */ + if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) + return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); + + data = fpixGetData(fpixd); + wpl = fpixGetWpl(fpixd); + fpixGetDimensions(fpixd, NULL, &h); + if ((buffer = (l_float32 *)LEPT_CALLOC(wpl, sizeof(l_float32))) == NULL) { + fpixDestroy(&fpixd); + return (FPIX *)ERROR_PTR("buffer not made", procName, NULL); + } + h2 = h / 2; + bpl = 4 * wpl; + for (i = 0, k = h - 1; i < h2; i++, k--) { + linet = data + i * wpl; + lineb = data + k * wpl; + memcpy(buffer, linet, bpl); + memcpy(linet, lineb, bpl); + memcpy(lineb, buffer, bpl); + } + LEPT_FREE(buffer); + return fpixd; +} + + +/*--------------------------------------------------------------------* + * Affine and projective interpolated transforms * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixAffinePta() + * + * \param[in] fpixs 8 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] border size of extension with constant normal derivative + * \param[in] inval value brought in; typ. 0 + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If %border > 0, all four sides are extended by that distance,
+ *          and removed after the transformation is finished.  Pixels
+ *          that would be brought in to the trimmed result from outside
+ *          the extended region are assigned %inval.  The purpose of
+ *          extending the image is to avoid such assignments.
+ *      (2) On the other hand, you may want to give all pixels that
+ *          are brought in from outside fpixs a specific value.  In that
+ *          case, set %border == 0.
+ * 
+ */ +FPIX * +fpixAffinePta(FPIX *fpixs, + PTA *ptad, + PTA *ptas, + l_int32 border, + l_float32 inval) +{ +l_float32 *vc; +PTA *ptas2, *ptad2; +FPIX *fpixs2, *fpixd, *fpixd2; + + PROCNAME("fpixAffinePta"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (!ptas) + return (FPIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (FPIX *)ERROR_PTR("ptad not defined", procName, NULL); + + /* If a border is to be added, also translate the ptas */ + if (border > 0) { + ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); + ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); + fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); + } else { + ptas2 = ptaClone(ptas); + ptad2 = ptaClone(ptad); + fpixs2 = fpixClone(fpixs); + } + + /* Get backwards transform from dest to src, and apply it */ + getAffineXformCoeffs(ptad2, ptas2, &vc); + fpixd2 = fpixAffine(fpixs2, vc, inval); + fpixDestroy(&fpixs2); + ptaDestroy(&ptas2); + ptaDestroy(&ptad2); + LEPT_FREE(vc); + + if (border == 0) + return fpixd2; + + /* Remove the added border */ + fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); + fpixDestroy(&fpixd2); + return fpixd; +} + + +/*! + * \brief fpixAffine() + * + * \param[in] fpixs 8 bpp + * \param[in] vc vector of 8 coefficients for projective transformation + * \param[in] inval value brought in; typ. 0 + * \return fpixd, or NULL on error + */ +FPIX * +fpixAffine(FPIX *fpixs, + l_float32 *vc, + l_float32 inval) +{ +l_int32 i, j, w, h, wpld; +l_float32 val; +l_float32 *datas, *datad, *lined; +l_float32 x, y; +FPIX *fpixd; + + PROCNAME("fpixAffine"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + fpixGetDimensions(fpixs, &w, &h); + if (!vc) + return (FPIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = fpixGetData(fpixs); + fpixd = fpixCreateTemplate(fpixs); + fpixSetAllArbitrary(fpixd, inval); + datad = fpixGetData(fpixd); + wpld = fpixGetWpl(fpixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + affineXformPt(vc, j, i, &x, &y); + linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); + *(lined + j) = val; + } + } + + return fpixd; +} + + +/*! + * \brief fpixProjectivePta() + * + * \param[in] fpixs 8 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] border size of extension with constant normal derivative + * \param[in] inval value brought in; typ. 0 + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If %border > 0, all four sides are extended by that distance,
+ *          and removed after the transformation is finished.  Pixels
+ *          that would be brought in to the trimmed result from outside
+ *          the extended region are assigned %inval.  The purpose of
+ *          extending the image is to avoid such assignments.
+ *      (2) On the other hand, you may want to give all pixels that
+ *          are brought in from outside fpixs a specific value.  In that
+ *          case, set %border == 0.
+ * 
+ */ +FPIX * +fpixProjectivePta(FPIX *fpixs, + PTA *ptad, + PTA *ptas, + l_int32 border, + l_float32 inval) +{ +l_float32 *vc; +PTA *ptas2, *ptad2; +FPIX *fpixs2, *fpixd, *fpixd2; + + PROCNAME("fpixProjectivePta"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (!ptas) + return (FPIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (FPIX *)ERROR_PTR("ptad not defined", procName, NULL); + + /* If a border is to be added, also translate the ptas */ + if (border > 0) { + ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); + ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); + fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); + } else { + ptas2 = ptaClone(ptas); + ptad2 = ptaClone(ptad); + fpixs2 = fpixClone(fpixs); + } + + /* Get backwards transform from dest to src, and apply it */ + getProjectiveXformCoeffs(ptad2, ptas2, &vc); + fpixd2 = fpixProjective(fpixs2, vc, inval); + fpixDestroy(&fpixs2); + ptaDestroy(&ptas2); + ptaDestroy(&ptad2); + LEPT_FREE(vc); + + if (border == 0) + return fpixd2; + + /* Remove the added border */ + fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); + fpixDestroy(&fpixd2); + return fpixd; +} + + +/*! + * \brief fpixProjective() + * + * \param[in] fpixs 8 bpp + * \param[in] vc vector of 8 coefficients for projective transform + * \param[in] inval value brought in; typ. 0 + * \return fpixd, or NULL on error + */ +FPIX * +fpixProjective(FPIX *fpixs, + l_float32 *vc, + l_float32 inval) +{ +l_int32 i, j, w, h, wpld; +l_float32 val; +l_float32 *datas, *datad, *lined; +l_float32 x, y; +FPIX *fpixd; + + PROCNAME("fpixProjective"); + + if (!fpixs) + return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); + fpixGetDimensions(fpixs, &w, &h); + if (!vc) + return (FPIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = fpixGetData(fpixs); + fpixd = fpixCreateTemplate(fpixs); + fpixSetAllArbitrary(fpixd, inval); + datad = fpixGetData(fpixd); + wpld = fpixGetWpl(fpixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + projectiveXformPt(vc, j, i, &x, &y); + linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); + *(lined + j) = val; + } + } + + return fpixd; +} + + +/*! + * \brief linearInterpolatePixelFloat() + * + * \param[in] datas ptr to beginning of float image data + * \param[in] w, h dimensions of image + * \param[in] x, y floating pt location for evaluation + * \param[in] inval float value brought in from the outside when the + * input x,y location is outside the image + * \param[out] pval interpolated float value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a standard linear interpolation function.  It is
+ *          equivalent to area weighting on each component, and
+ *          avoids "jaggies" when rendering sharp edges.
+ * 
+ */ +l_ok +linearInterpolatePixelFloat(l_float32 *datas, + l_int32 w, + l_int32 h, + l_float32 x, + l_float32 y, + l_float32 inval, + l_float32 *pval) +{ +l_int32 xpm, ypm, xp, yp, xf, yf; +l_float32 v00, v01, v10, v11; +l_float32 *lines; + + PROCNAME("linearInterpolatePixelFloat"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = inval; + if (!datas) + return ERROR_INT("datas not defined", procName, 1); + + /* Skip if off the edge */ + if (x < 0.0 || y < 0.0 || x > w - 2.0 || y > h - 2.0) + return 0; + + xpm = (l_int32)(16.0 * x + 0.5); + ypm = (l_int32)(16.0 * y + 0.5); + xp = xpm >> 4; + yp = ypm >> 4; + xf = xpm & 0x0f; + yf = ypm & 0x0f; + +#if DEBUG + if (xf < 0 || yf < 0) + fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); +#endif /* DEBUG */ + + /* Interpolate by area weighting. */ + lines = datas + yp * w; + v00 = (16.0 - xf) * (16.0 - yf) * (*(lines + xp)); + v10 = xf * (16.0 - yf) * (*(lines + xp + 1)); + v01 = (16.0 - xf) * yf * (*(lines + w + xp)); + v11 = (l_float32)(xf) * yf * (*(lines + w + xp + 1)); + *pval = (v00 + v01 + v10 + v11) / 256.0; + return 0; +} + + +/*--------------------------------------------------------------------* + * Thresholding to 1 bpp Pix * + *--------------------------------------------------------------------*/ +/*! + * \brief fpixThresholdToPix() + * + * \param[in] fpix + * \param[in] thresh + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) For all values of fpix that are <= thresh, sets the pixel
+ *          in pixd to 1.
+ * 
+ */ +PIX * +fpixThresholdToPix(FPIX *fpix, + l_float32 thresh) +{ +l_int32 i, j, w, h, wpls, wpld; +l_float32 *datas, *lines; +l_uint32 *datad, *lined; +PIX *pixd; + + PROCNAME("fpixThresholdToPix"); + + if (!fpix) + return (PIX *)ERROR_PTR("fpix not defined", procName, NULL); + + fpixGetDimensions(fpix, &w, &h); + datas = fpixGetData(fpix); + wpls = fpixGetWpl(fpix); + pixd = pixCreate(w, h, 1); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (lines[j] <= thresh) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*--------------------------------------------------------------------* + * Generate function from components * + *--------------------------------------------------------------------*/ +/*! + * \brief pixComponentFunction() + * + * \param[in] pix 32 bpp rgb + * \param[in] rnum, gnum, bnum coefficients for numerator + * \param[in] rdenom, gdenom, bdenom coefficients for denominator + * \return fpixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This stores a function of the component values of each
+ *          input pixel in %fpixd.
+ *      (2) The function is a ratio of linear combinations of component values.
+ *          There are two special cases for denominator coefficients:
+ *          (a) The denominator is 1.0: input 0 for all denominator coefficients
+ *          (b) Only one component is used in the denominator: input 1.0
+ *              for that denominator component and 0.0 for the other two.
+ *      (3) If the denominator is 0, multiply by an arbitrary number that
+ *          is much larger than 1.  Choose 256 "arbitrarily".
+ *
+ * 
+ */ +FPIX * +pixComponentFunction(PIX *pix, + l_float32 rnum, + l_float32 gnum, + l_float32 bnum, + l_float32 rdenom, + l_float32 gdenom, + l_float32 bdenom) +{ +l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, zerodenom, onedenom; +l_float32 fnum, fdenom; +l_uint32 *datas, *lines; +l_float32 *datad, *lined, *recip; +FPIX *fpixd; + + PROCNAME("pixComponentFunction"); + + if (!pix || pixGetDepth(pix) != 32) + return (FPIX *)ERROR_PTR("pix undefined or not 32 bpp", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + datas = pixGetData(pix); + wpls = pixGetWpl(pix); + fpixd = fpixCreate(w, h); + datad = fpixGetData(fpixd); + wpld = fpixGetWpl(fpixd); + zerodenom = (rdenom == 0.0 && gdenom == 0.0 && bdenom == 0.0) ? 1: 0; + onedenom = ((rdenom == 1.0 && gdenom == 0.0 && bdenom == 0.0) || + (rdenom == 0.0 && gdenom == 1.0 && bdenom == 0.0) || + (rdenom == 0.0 && gdenom == 0.0 && bdenom == 1.0)) ? 1 : 0; + recip = NULL; + if (onedenom) { + recip = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); + recip[0] = 256; /* arbitrary large number */ + for (i = 1; i < 256; i++) + recip[i] = 1.0 / (l_float32)i; + } + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (zerodenom) { + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + lined[j] = rnum * rval + gnum * gval + bnum * bval; + } + } else if (onedenom && rdenom == 1.0) { + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + lined[j] + = recip[rval] * (rnum * rval + gnum * gval + bnum * bval); + } + } else if (onedenom && gdenom == 1.0) { + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + lined[j] + = recip[gval] * (rnum * rval + gnum * gval + bnum * bval); + } + } else if (onedenom && bdenom == 1.0) { + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + lined[j] + = recip[bval] * (rnum * rval + gnum * gval + bnum * bval); + } + } else { /* general case */ + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + fnum = rnum * rval + gnum * gval + bnum * bval; + fdenom = rdenom * rval + gdenom * gval + bdenom * bval; + lined[j] = (fdenom == 0) ? 256.0 * fnum : fnum / fdenom; + } + } + } + + LEPT_FREE(recip); + return fpixd; +} diff --git a/3rdparty/hgOCR/leptonica/gifio.c b/3rdparty/hgOCR/leptonica/gifio.c new file mode 100644 index 00000000..b3d15d40 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/gifio.c @@ -0,0 +1,675 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file gifio.c + *
+ *
+ *    Reading gif
+ *          PIX            *pixReadStreamGif()
+ *          PIX            *pixReadMemGif()
+ *          static l_int32  gifReadFunc()
+ *          static PIX     *gifToPix()
+ *
+ *    Writing gif
+ *          l_int32         pixWriteStreamGif()
+ *          l_int32         pixWriteMemGif()
+ *          static l_int32  gifWriteFunc()
+ *          static l_int32  pixToGif()
+ *
+ *    The initial version of this module was generously contribued by
+ *    Antony Dovgal.
+ *
+ *    The functions that read and write from pix to gif-compressed memory,
+ *    using gif internal functions DGifOpen() and EGifOpen() that are
+ *    available in 5.1 and later, were contributed by Tobias Peirick.
+ *
+ *    Version information:
+ *
+ *    (1) This supports the gif library, version 5.1 or later, for which
+ *        gif read-from-mem and write-to-mem allow these operations
+ *        without writing temporary files.
+ *    (2) There has never been a gif stream interface.  For versions
+ *        before 5.1, it was necessary to use a file descriptor, and to
+ *        generate a file stream from the low-level descriptor.  With the
+ *        memory interface in 5.1 that can be used on all platforms, it
+ *        is no longer necessary to use any API code with file descriptors.
+ *    (3) The public interface changed with 5.0 and with 5.1, and we
+ *        no longer support 4.6.1 and 5.0.
+ *    (4) Version 5.1.2 came out on Jan 7, 2016.  Leptonica cannot
+ *        successfully read gif files that it writes with this version;
+ *        DGifSlurp() gets an internal error from an uninitialized array
+ *        and returns failure.  The problem was fixed in 5.1.3.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + +/* --------------------------------------------------------------------*/ +#if HAVE_LIBGIF || HAVE_LIBUNGIF /* defined in environ.h */ +/* --------------------------------------------------------------------*/ + +#include "gif_lib.h" + + /* Interface that enables low-level GIF support for reading from memory */ +static PIX * gifToPix(GifFileType *gif); + /* Interface that enables low-level GIF support for writing to memory */ +static l_int32 pixToGif(PIX *pix, GifFileType *gif); + + /*! For in-memory decoding of GIF; 5.1+ */ +typedef struct GifReadBuffer +{ + size_t size; /*!< size of buffer */ + size_t pos; /*!< position relative to beginning of buffer */ + const l_uint8 *cdata; /*!< data in the buffer */ +} GifReadBuffer; + + /*! Low-level callback for in-memory decoding */ +static l_int32 gifReadFunc(GifFileType *gif, GifByteType *dest, + l_int32 bytesToRead); + /*! Low-level callback for in-memory encoding */ +static l_int32 gifWriteFunc(GifFileType *gif, const GifByteType *src, + l_int32 bytesToWrite); + + +/*---------------------------------------------------------------------* + * Reading gif * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadStreamGif() + * + * \param[in] fp file stream opened for reading + * \return pix, or NULL on error + */ +PIX * +pixReadStreamGif(FILE *fp) +{ +l_uint8 *filedata; +size_t filesize; +PIX *pix; + + PROCNAME("pixReadStreamGif"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + + /* Read data into memory from file */ + rewind(fp); + if ((filedata = l_binaryReadStream(fp, &filesize)) == NULL) + return (PIX *)ERROR_PTR("filedata not read", procName, NULL); + + /* Uncompress from memory */ + pix = pixReadMemGif(filedata, filesize); + LEPT_FREE(filedata); + if (!pix) + L_ERROR("failed to read gif from file data\n", procName); + return pix; +} + + +/*! + * \brief pixReadMemGif() + * + * \param[in] cdata const; gif-encoded + * \param[in] size bytes data + * \return pix, or NULL on error + * + *
+ * Notes:
+ *     (1) For libgif version >= 5.1, this uses the DGifOpen() buffer
+ *         interface.  No temp files are required.
+ *     (2) For libgif version < 5.1, it was necessary to write the compressed
+ *         data to file and read it back, and we couldn't use the GNU
+ *         runtime extension fmemopen() because libgif doesn't have a file
+ *         stream interface.
+ * 
+ */ +PIX * +pixReadMemGif(const l_uint8 *cdata, + size_t size) +{ +GifFileType *gif; +GifReadBuffer buffer; + + PROCNAME("pixReadMemGif"); + + /* 5.1+ and not 5.1.2 */ +#if (GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)) + L_ERROR("Require giflib-5.1 or later\n", procName); + return NULL; +#endif /* < 5.1 */ +#if GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 1 && GIFLIB_RELEASE == 2 /* 5.1.2 */ + L_ERROR("Can't use giflib-5.1.2; suggest 5.1.3 or later\n", procName); + return NULL; +#endif /* 5.1.2 */ + + if (!cdata) + return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); + + buffer.cdata = cdata; + buffer.size = size; + buffer.pos = 0; + if ((gif = DGifOpen((void*)&buffer, gifReadFunc, NULL)) == NULL) + return (PIX *)ERROR_PTR("could not open gif stream from memory", + procName, NULL); + + return gifToPix(gif); +} + + +static l_int32 +gifReadFunc(GifFileType *gif, + GifByteType *dest, + l_int32 bytesToRead) +{ +GifReadBuffer *buffer; +l_int32 bytesRead; + + PROCNAME("gifReadFunc"); + + if ((buffer = (GifReadBuffer*)gif->UserData) == NULL) + return ERROR_INT("UserData not set", procName, -1); + + if(buffer->pos >= buffer->size || bytesToRead > buffer->size) + return -1; + + bytesRead = (buffer->pos < buffer->size - bytesToRead) + ? bytesToRead : buffer->size - buffer->pos; + memcpy(dest, buffer->cdata + buffer->pos, bytesRead); + buffer->pos += bytesRead; + return bytesRead; +} + + +/*! + * \brief gifToPix() + * + * \param[in] gif opened gif stream + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This decodes the pix from the compressed gif stream and
+ *          closes the stream.
+ *      (2) It is static so that the stream is not exposed to clients.
+ * 
+ */ +static PIX * +gifToPix(GifFileType *gif) +{ +l_int32 wpl, i, j, w, h, d, cindex, ncolors; +l_int32 rval, gval, bval; +l_uint32 *data, *line; +PIX *pixd; +PIXCMAP *cmap; +ColorMapObject *gif_cmap; +SavedImage si; +int giferr; + + PROCNAME("gifToPix"); + + /* Read all the data, but use only the first image found */ + if (DGifSlurp(gif) != GIF_OK) { + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("failed to read GIF data", procName, NULL); + } + + if (gif->SavedImages == NULL) { + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("no images found in GIF", procName, NULL); + } + + si = gif->SavedImages[0]; + w = si.ImageDesc.Width; + h = si.ImageDesc.Height; + if (w <= 0 || h <= 0) { + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("invalid image dimensions", procName, NULL); + } + + if (si.RasterBits == NULL) { + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("no raster data in GIF", procName, NULL); + } + + if (si.ImageDesc.ColorMap) { + /* private cmap for this image */ + gif_cmap = si.ImageDesc.ColorMap; + } else if (gif->SColorMap) { + /* global cmap for whole picture */ + gif_cmap = gif->SColorMap; + } else { + /* don't know where to take cmap from */ + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("color map is missing", procName, NULL); + } + + ncolors = gif_cmap->ColorCount; + if (ncolors <= 2) + d = 1; + else if (ncolors <= 4) + d = 2; + else if (ncolors <= 16) + d = 4; + else + d = 8; + if ((cmap = pixcmapCreate(d)) == NULL) { + DGifCloseFile(gif, &giferr); + return (PIX *)ERROR_PTR("cmap creation failed", procName, NULL); + } + + for (cindex = 0; cindex < ncolors; cindex++) { + rval = gif_cmap->Colors[cindex].Red; + gval = gif_cmap->Colors[cindex].Green; + bval = gif_cmap->Colors[cindex].Blue; + pixcmapAddColor(cmap, rval, gval, bval); + } + + if ((pixd = pixCreate(w, h, d)) == NULL) { + DGifCloseFile(gif, &giferr); + pixcmapDestroy(&cmap); + return (PIX *)ERROR_PTR("failed to allocate pixd", procName, NULL); + } + pixSetInputFormat(pixd, IFF_GIF); + pixSetColormap(pixd, cmap); + + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (d == 1) { + for (j = 0; j < w; j++) { + if (si.RasterBits[i * w + j]) + SET_DATA_BIT(line, j); + } + } else if (d == 2) { + for (j = 0; j < w; j++) + SET_DATA_DIBIT(line, j, si.RasterBits[i * w + j]); + } else if (d == 4) { + for (j = 0; j < w; j++) + SET_DATA_QBIT(line, j, si.RasterBits[i * w + j]); + } else { /* d == 8 */ + for (j = 0; j < w; j++) + SET_DATA_BYTE(line, j, si.RasterBits[i * w + j]); + } + } + + /* Versions before 5.0 required un-interlacing to restore + * the raster lines to normal order if the image + * had been interlaced (for viewing in a browser): + if (gif->Image.Interlace) { + PIX *pixdi = pixUninterlaceGIF(pixd); + pixTransferAllData(pixd, &pixdi, 0, 0); + } + * This is no longer required. */ + + DGifCloseFile(gif, &giferr); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Writing gif * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteStreamGif() + * + * \param[in] fp file stream opened for writing + * \param[in] pix 1, 2, 4, 8, 16 or 32 bpp + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) All output gif have colormaps.  If the pix is 32 bpp rgb,
+ *          this quantizes the colors and writes out 8 bpp.
+ *          If the pix is 16 bpp grayscale, it converts to 8 bpp first.
+ * 
+ */ +l_ok +pixWriteStreamGif(FILE *fp, + PIX *pix) +{ +l_uint8 *filedata; +size_t filebytes, nbytes; + + PROCNAME("pixWriteStreamGif"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixSetPadBits(pix, 0); + if (pixWriteMemGif(&filedata, &filebytes, pix) != 0) { + LEPT_FREE(filedata); + return ERROR_INT("failure to gif encode pix", procName, 1); + } + + rewind(fp); + nbytes = fwrite(filedata, 1, filebytes, fp); + LEPT_FREE(filedata); + if (nbytes != filebytes) + return ERROR_INT("write error", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteMemGif() + * + * \param[out] pdata data of gif compressed image + * \param[out] psize size of returned data + * \param[in] pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See comments in pixReadMemGif()
+ * 
+ */ +l_ok +pixWriteMemGif(l_uint8 **pdata, + size_t *psize, + PIX *pix) +{ +int giferr; +l_int32 result; +GifFileType *gif; +L_BBUFFER *buffer; + + PROCNAME("pixWriteMemGif"); + + /* 5.1+ and not 5.1.2 */ +#if (GIFLIB_MAJOR < 5 || (GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 0)) + L_ERROR("Require giflib-5.1 or later\n", procName); + return 1; +#endif /* < 5.1 */ +#if GIFLIB_MAJOR == 5 && GIFLIB_MINOR == 1 && GIFLIB_RELEASE == 2 /* 5.1.2 */ + L_ERROR("Can't use giflib-5.1.2; suggest 5.1.3 or later\n", procName); + return 1; +#endif /* 5.1.2 */ + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + *pdata = NULL; + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + *psize = 0; + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + + if ((buffer = bbufferCreate(NULL, 0)) == NULL) + return ERROR_INT("failed to create buffer", procName, 1); + + if ((gif = EGifOpen((void*)buffer, gifWriteFunc, NULL)) == NULL) { + bbufferDestroy(&buffer); + return ERROR_INT("failed to create GIF image handle", procName, 1); + } + + result = pixToGif(pix, gif); + EGifCloseFile(gif, &giferr); + + if (result == 0) { + *pdata = bbufferDestroyAndSaveData(&buffer, psize); + } else { + bbufferDestroy(&buffer); + } + return result; +} + + +static l_int32 +gifWriteFunc(GifFileType *gif, + const GifByteType *src, + l_int32 bytesToWrite) +{ +L_BBUFFER *buffer; + + PROCNAME("gifWriteFunc"); + + if ((buffer = (L_BBUFFER*)gif->UserData) == NULL) + return ERROR_INT("UserData not set", procName, -1); + + if(bbufferRead(buffer, (l_uint8*)src, bytesToWrite) == 0) + return bytesToWrite; + return 0; +} + + +/*! + * \brief pixToGif() + * + * \param[in] pix 1, 2, 4, 8, 16 or 32 bpp + * \param[in] gif opened gif stream + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This encodes the pix to the gif stream. The stream is not
+ *          closed by this function.
+ *      (2) It is static to make this function private.
+ * 
+ */ +static l_int32 +pixToGif(PIX *pix, + GifFileType *gif) +{ +char *text; +l_int32 wpl, i, j, w, h, d, ncolor, rval, gval, bval; +l_int32 gif_ncolor = 0; +l_uint32 *data, *line; +PIX *pixd; +PIXCMAP *cmap; +ColorMapObject *gif_cmap; +GifByteType *gif_line; + + PROCNAME("pixToGif"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!gif) + return ERROR_INT("gif not defined", procName, 1); + + d = pixGetDepth(pix); + if (d == 32) { + pixd = pixConvertRGBToColormap(pix, 1); + } else if (d > 1) { + pixd = pixConvertTo8(pix, TRUE); + } else { /* d == 1; make sure there's a colormap */ + pixd = pixClone(pix); + if (!pixGetColormap(pixd)) { + cmap = pixcmapCreate(1); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixSetColormap(pixd, cmap); + } + } + + if (!pixd) + return ERROR_INT("failed to convert image to indexed", procName, 1); + d = pixGetDepth(pixd); + + if ((cmap = pixGetColormap(pixd)) == NULL) { + pixDestroy(&pixd); + return ERROR_INT("cmap is missing", procName, 1); + } + + /* 'Round' the number of gif colors up to a power of 2 */ + ncolor = pixcmapGetCount(cmap); + for (i = 0; i <= 8; i++) { + if ((1 << i) >= ncolor) { + gif_ncolor = (1 << i); + break; + } + } + if (gif_ncolor < 1) { + pixDestroy(&pixd); + return ERROR_INT("number of colors is invalid", procName, 1); + } + + /* Save the cmap colors in a gif_cmap */ + if ((gif_cmap = GifMakeMapObject(gif_ncolor, NULL)) == NULL) { + pixDestroy(&pixd); + return ERROR_INT("failed to create GIF color map", procName, 1); + } + for (i = 0; i < gif_ncolor; i++) { + rval = gval = bval = 0; + if (ncolor > 0) { + if (pixcmapGetColor(cmap, i, &rval, &gval, &bval) != 0) { + pixDestroy(&pixd); + GifFreeMapObject(gif_cmap); + return ERROR_INT("failed to get color from color map", + procName, 1); + } + ncolor--; + } + gif_cmap->Colors[i].Red = rval; + gif_cmap->Colors[i].Green = gval; + gif_cmap->Colors[i].Blue = bval; + } + + pixGetDimensions(pixd, &w, &h, NULL); + if (EGifPutScreenDesc(gif, w, h, gif_cmap->BitsPerPixel, 0, gif_cmap) + != GIF_OK) { + pixDestroy(&pixd); + GifFreeMapObject(gif_cmap); + return ERROR_INT("failed to write screen description", procName, 1); + } + GifFreeMapObject(gif_cmap); /* not needed after this point */ + + if (EGifPutImageDesc(gif, 0, 0, w, h, FALSE, NULL) != GIF_OK) { + pixDestroy(&pixd); + return ERROR_INT("failed to image screen description", procName, 1); + } + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + if (d != 1 && d != 2 && d != 4 && d != 8) { + pixDestroy(&pixd); + return ERROR_INT("image depth is not in {1, 2, 4, 8}", procName, 1); + } + + if ((gif_line = (GifByteType *)LEPT_CALLOC(sizeof(GifByteType), w)) + == NULL) { + pixDestroy(&pixd); + return ERROR_INT("mem alloc fail for data line", procName, 1); + } + + for (i = 0; i < h; i++) { + line = data + i * wpl; + /* Gif's way of setting the raster line up for compression */ + for (j = 0; j < w; j++) { + switch(d) + { + case 8: + gif_line[j] = GET_DATA_BYTE(line, j); + break; + case 4: + gif_line[j] = GET_DATA_QBIT(line, j); + break; + case 2: + gif_line[j] = GET_DATA_DIBIT(line, j); + break; + case 1: + gif_line[j] = GET_DATA_BIT(line, j); + break; + } + } + + /* Compress and save the line */ + if (EGifPutLine(gif, gif_line, w) != GIF_OK) { + LEPT_FREE(gif_line); + pixDestroy(&pixd); + return ERROR_INT("failed to write data line into GIF", procName, 1); + } + } + + /* Write a text comment. This must be placed after writing the + * data (!!) Note that because libgif does not provide a function + * for reading comments from file, you will need another way + * to read comments. */ + if ((text = pixGetText(pix)) != NULL) { + if (EGifPutComment(gif, text) != GIF_OK) + L_WARNING("gif comment not written\n", procName); + } + + LEPT_FREE(gif_line); + pixDestroy(&pixd); + return 0; +} + + +#if 0 +/*---------------------------------------------------------------------* + * Removing interlacing (reference only; not used) * + *---------------------------------------------------------------------*/ + /* GIF supports 4-way interlacing by raster lines. + * Before 5.0, it was necessary for leptonica to restore interlaced + * data to normal raster order when reading to a pix. With 5.0, + * the de-interlacing is done by the library read function. + * It is here only as a reference. */ +static const l_int32 InterlacedOffset[] = {0, 4, 2, 1}; +static const l_int32 InterlacedJumps[] = {8, 8, 4, 2}; + +static PIX * +pixUninterlaceGIF(PIX *pixs) +{ +l_int32 w, h, d, wpl, j, k, srow, drow; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixUninterlaceGIF"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + wpl = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + for (k = 0, srow = 0; k < 4; k++) { + for (drow = InterlacedOffset[k]; drow < h; + drow += InterlacedJumps[k], srow++) { + lines = datas + srow * wpl; + lined = datad + drow * wpl; + for (j = 0; j < w; j++) + memcpy(lined, lines, 4 * wpl); + } + } + + return pixd; +} +#endif + + +/* -----------------------------------------------------------------*/ +#endif /* HAVE_LIBGIF || HAVE_LIBUNGIF */ diff --git a/3rdparty/hgOCR/leptonica/gifiostub.c b/3rdparty/hgOCR/leptonica/gifiostub.c new file mode 100644 index 00000000..6f695257 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/gifiostub.c @@ -0,0 +1,72 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file gifiostub.c + *
+ *
+ *     Stubs for gifio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* -----------------------------------------------------------------*/ +#if (!HAVE_LIBGIF) && (!HAVE_LIBUNGIF) /* defined in environ.h */ +/* -----------------------------------------------------------------*/ + +PIX * pixReadStreamGif(FILE *fp) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamGif", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemGif(const l_uint8 *cdata, size_t size) +{ + return (PIX *)ERROR_PTR("function not present", "pixReadMemGif", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamGif(FILE *fp, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteStreamGif", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemGif(l_uint8 **pdata, size_t *psize, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteMemGif", 1); +} + +/* -----------------------------------------------------------------*/ +#endif /* !HAVE_LIBGIF && !HAVE_LIBUNGIF */ diff --git a/3rdparty/hgOCR/leptonica/gplot.c b/3rdparty/hgOCR/leptonica/gplot.c new file mode 100644 index 00000000..108300af --- /dev/null +++ b/3rdparty/hgOCR/leptonica/gplot.c @@ -0,0 +1,957 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + /*! + * \file gplot.c + *
+  *
+  *     Basic plotting functions
+  *          GPLOT      *gplotCreate()
+  *          void        gplotDestroy()
+  *          l_int32     gplotAddPlot()
+  *          l_int32     gplotSetScaling()
+  *          l_int32     gplotMakeOutput()
+  *          l_int32     gplotGenCommandFile()
+  *          l_int32     gplotGenDataFiles()
+  *
+  *     Quick and dirty plots
+  *          l_int32     gplotSimple1()
+  *          l_int32     gplotSimple2()
+  *          l_int32     gplotSimpleN()
+  *          l_int32     gplotSimpleXY1()
+  *          l_int32     gplotSimpleXY2()
+  *          l_int32     gplotSimpleXYN()
+  *
+  *     Serialize for I/O
+  *          GPLOT      *gplotRead()
+  *          l_int32     gplotWrite()
+  *
+  *
+  *     Utility for programmatic plotting using gnuplot 4.6 or later
+  *     Enabled:
+  *         ~ output to png (color), ps and eps (mono), latex (mono)
+  *         ~ optional title for graph
+  *         ~ optional x and y axis labels
+  *         ~ multiple plots on one frame
+  *         ~ optional title for each plot on the frame
+  *         ~ optional log scaling on either or both axes
+  *         ~ choice of 5 plot styles for each plot
+  *         ~ choice of 2 plot modes, either using one input array
+  *           (Y vs index) or two input arrays (Y vs X).  This
+  *           choice is made implicitly depending on the number of
+  *           input arrays.
+  *
+  *     Usage:
+  *         gplotCreate() initializes for plotting
+  *         gplotAddPlot() for each plot on the frame
+  *         gplotMakeOutput() to generate all output files and run gnuplot
+  *         gplotDestroy() to clean up
+  *
+  *     Example of use:
+  *         gplot = gplotCreate("tempskew", GPLOT_PNG, "Skew score vs angle",
+  *                    "angle (deg)", "score");
+  *         gplotAddPlot(gplot, natheta, nascore1, GPLOT_LINES, "plot 1");
+  *         gplotAddPlot(gplot, natheta, nascore2, GPLOT_POINTS, "plot 2");
+  *         gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y);
+  *         gplotMakeOutput(gplot);
+  *         gplotDestroy(&gplot);
+  *
+  *     Note for output to GPLOT_LATEX:
+  *         This creates latex output of the plot, named .tex.
+  *         It needs to be placed in a latex file .tex
+  *         that precedes the plot output with, at a minimum:
+  *           \documentclass{article}
+  *           \begin{document}
+  *         and ends with
+  *           \end{document}
+  *         You can then generate a dvi file .dvi using
+  *           latex .tex
+  *         and a PostScript file .ps from that using
+  *           dvips -o .ps .dvi
+  *
+  *     N.B. To generate plots, it is necessary to have gnuplot installed on
+  *          your Unix system, or wgnuplot on Windows.
+  * 
+ */ + +#include +#include "allheaders.h" + +//static const l_int32 Bufsize = 512; /* hardcoded below in fscanf */ +#define Bufsize 512 + +const char *gplotstylenames[] = { "with lines", + "with points", + "with impulses", + "with linespoints", + "with dots" }; +const char *gplotfileoutputs[] = { "", + "PNG", + "PS", + "EPS", + "LATEX" }; + + +/*-----------------------------------------------------------------* + * Basic Plotting Functions * + *-----------------------------------------------------------------*/ + /*! + * \brief gplotCreate() + * + * \param[in] rootname root for all output files + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] title [optional] overall title + * \param[in] xlabel [optional] x axis label + * \param[in] ylabel [optional] y axis label + * \return gplot, or NULL on error + * + *
+  * Notes:
+  *      (1) This initializes the plot.
+  *      (2) The 'title', 'xlabel' and 'ylabel' strings can have spaces,
+  *          double quotes and backquotes, but not single quotes.
+  * 
+ */ +GPLOT * +gplotCreate(const char *rootname, + l_int32 outformat, + const char *title, + const char *xlabel, + const char *ylabel) +{ + char *newroot; + char buf[Bufsize]; + l_int32 badchar; + GPLOT *gplot; + + PROCNAME("gplotCreate"); + + if (!rootname) + return (GPLOT *)ERROR_PTR("rootname not defined", procName, NULL); + if (outformat != GPLOT_PNG && outformat != GPLOT_PS && + outformat != GPLOT_EPS && outformat != GPLOT_LATEX) + return (GPLOT *)ERROR_PTR("outformat invalid", procName, NULL); + stringCheckForChars(rootname, "`;&|><\"?*$()", &badchar); + if (badchar) /* danger of command injection */ + return (GPLOT *)ERROR_PTR("invalid rootname", procName, NULL); + + gplot = (GPLOT *)LEPT_CALLOC(1, sizeof(GPLOT)); + gplot->cmddata = sarrayCreate(0); + gplot->datanames = sarrayCreate(0); + gplot->plotdata = sarrayCreate(0); + gplot->plottitles = sarrayCreate(0); + gplot->plotstyles = numaCreate(0); + + /* Save title, labels, rootname, outformat, cmdname, outname */ + newroot = genPathname(rootname, NULL); + gplot->rootname = newroot; + gplot->outformat = outformat; + snprintf(buf, Bufsize, "%s.cmd", rootname); + gplot->cmdname = stringNew(buf); + if (outformat == GPLOT_PNG) + snprintf(buf, Bufsize, "%s.png", newroot); + else if (outformat == GPLOT_PS) + snprintf(buf, Bufsize, "%s.ps", newroot); + else if (outformat == GPLOT_EPS) + snprintf(buf, Bufsize, "%s.eps", newroot); + else if (outformat == GPLOT_LATEX) + snprintf(buf, Bufsize, "%s.tex", newroot); + gplot->outname = stringNew(buf); + if (title) gplot->title = stringNew(title); + if (xlabel) gplot->xlabel = stringNew(xlabel); + if (ylabel) gplot->ylabel = stringNew(ylabel); + + return gplot; +} + + +/*! + * \brief gplotDestroy() + * + * \param[in,out] pgplot will be set to null before returning + */ +void +gplotDestroy(GPLOT **pgplot) +{ + GPLOT *gplot; + + PROCNAME("gplotDestroy"); + + if (pgplot == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((gplot = *pgplot) == NULL) + return; + + LEPT_FREE(gplot->rootname); + LEPT_FREE(gplot->cmdname); + sarrayDestroy(&gplot->cmddata); + sarrayDestroy(&gplot->datanames); + sarrayDestroy(&gplot->plotdata); + sarrayDestroy(&gplot->plottitles); + numaDestroy(&gplot->plotstyles); + LEPT_FREE(gplot->outname); + if (gplot->title) + LEPT_FREE(gplot->title); + if (gplot->xlabel) + LEPT_FREE(gplot->xlabel); + if (gplot->ylabel) + LEPT_FREE(gplot->ylabel); + + LEPT_FREE(gplot); + *pgplot = NULL; + return; +} + + +/*! + * \brief gplotAddPlot() + * + * \param[in] gplot + * \param[in] nax [optional] numa: set to null for Y_VS_I; + * required for Y_VS_X + * \param[in] nay numa; required for both Y_VS_I and Y_VS_X + * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, + * GPLOT_LINESPOINTS, GPLOT_DOTS + * \param[in] plottitle [optional] title for individual plot + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) There are 2 options for (x,y) values:
+ *            o  To plot an array vs a linear function of the
+ *               index, set %nax = NULL.
+ *            o  To plot one array vs another, use both %nax and %nay.
+ *      (2) If %nax is NULL, the x value corresponding to the i-th
+ *          value of %nay is found from the startx and delx fields
+ *          in %nay:
+ *               x = startx + i * delx
+ *          These are set with numaSetParameters().  Their default
+ *          values are startx = 0.0, delx = 1.0.
+ *      (3) If %nax is defined, it must be the same size as %nay, and
+ *          must have at least one number.
+ *      (4) The 'plottitle' string can have spaces, double
+ *          quotes and backquotes, but not single quotes.
+ * 
+ */ +l_ok +gplotAddPlot(GPLOT *gplot, + NUMA *nax, + NUMA *nay, + l_int32 plotstyle, + const char *plottitle) +{ + char buf[Bufsize]; + char emptystring[] = ""; + char *datastr, *title; + l_int32 n, i; + l_float32 valx, valy, startx, delx; + SARRAY *sa; + + PROCNAME("gplotAddPlot"); + + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) + return ERROR_INT("invalid plotstyle", procName, 1); + + if ((n = numaGetCount(nay)) == 0) + return ERROR_INT("no points to plot", procName, 1); + if (nax && (n != numaGetCount(nax))) + return ERROR_INT("nax and nay sizes differ", procName, 1); + if (n == 1 && plotstyle == GPLOT_LINES) { + L_INFO("only 1 pt; changing style to points\n", procName); + plotstyle = GPLOT_POINTS; + } + + /* Save plotstyle and plottitle */ + numaGetParameters(nay, &startx, &delx); + numaAddNumber(gplot->plotstyles, plotstyle); + if (plottitle) { + title = stringNew(plottitle); + sarrayAddString(gplot->plottitles, title, L_INSERT); + } + else { + sarrayAddString(gplot->plottitles, emptystring, L_COPY); + } + + /* Generate and save data filename */ + gplot->nplots++; + snprintf(buf, Bufsize, "%s.data.%d", gplot->rootname, gplot->nplots); + sarrayAddString(gplot->datanames, buf, L_COPY); + + /* Generate data and save as a string */ + sa = sarrayCreate(n); + for (i = 0; i < n; i++) { + if (nax) + numaGetFValue(nax, i, &valx); + else + valx = startx + i * delx; + numaGetFValue(nay, i, &valy); + snprintf(buf, Bufsize, "%f %f\n", valx, valy); + sarrayAddString(sa, buf, L_COPY); + } + datastr = sarrayToString(sa, 0); + sarrayAddString(gplot->plotdata, datastr, L_INSERT); + sarrayDestroy(&sa); + + return 0; +} + + +/*! + * \brief gplotSetScaling() + * + * \param[in] gplot + * \param[in] scaling GPLOT_LINEAR_SCALE, GPLOT_LOG_SCALE_X, + * GPLOT_LOG_SCALE_Y, GPLOT_LOG_SCALE_X_Y + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) By default, the x and y axis scaling is linear.
+ *      (2) Call this function to set semi-log or log-log scaling.
+ * 
+ */ +l_ok +gplotSetScaling(GPLOT *gplot, + l_int32 scaling) +{ + PROCNAME("gplotSetScaling"); + + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + if (scaling != GPLOT_LINEAR_SCALE && + scaling != GPLOT_LOG_SCALE_X && + scaling != GPLOT_LOG_SCALE_Y && + scaling != GPLOT_LOG_SCALE_X_Y) + return ERROR_INT("invalid gplot scaling", procName, 1); + gplot->scaling = scaling; + return 0; +} + + +/*! + * \brief gplotMakeOutput() + * + * \param[in] gplot + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This uses gplot and the new arrays to add a plot
+ *          to the output, by writing a new data file and appending
+ *          the appropriate plot commands to the command file.
+ *      (2) This is the only function in this file that requires the
+ *          gnuplot executable, to actually generate the plot.
+ *      (3) The command file name for unix is canonical (i.e., directory /tmp)
+ *          but the temp filename paths in the command file must be correct.
+ *      (4) The gnuplot program for windows is wgnuplot.exe.
+ * 
+ */ +l_ok +gplotMakeOutput(GPLOT *gplot) +{ + char buf[Bufsize]; + char *cmdname; + + PROCNAME("gplotMakeOutput"); + + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + + if (!LeptDebugOK) { + L_INFO("running gnuplot is disabled; " + "use setLeptDebugOK(1) to enable\n", procName); + return 0; + } + +#ifdef OS_IOS /* iOS 11 does not support system() */ + return ERROR_INT("iOS 11 does not support system()", procName, 0); +#endif /* OS_IOS */ + + gplotGenCommandFile(gplot); + gplotGenDataFiles(gplot); + cmdname = genPathname(gplot->cmdname, NULL); + +#ifndef _WIN32 + snprintf(buf, Bufsize, "gnuplot %s", cmdname); +#else + snprintf(buf, Bufsize, "wgnuplot %s", cmdname); +#endif /* _WIN32 */ + + callSystemDebug(buf); /* gnuplot || wgnuplot */ + LEPT_FREE(cmdname); + return 0; +} + + +/*! + * \brief gplotGenCommandFile() + * + * \param[in] gplot + * \return 0 if OK, 1 on error + */ +l_ok +gplotGenCommandFile(GPLOT *gplot) +{ + char buf[Bufsize]; + char *cmdstr, *plottitle, *dataname; + l_int32 i, plotstyle, nplots; + FILE *fp; + + PROCNAME("gplotGenCommandFile"); + + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + + /* Remove any previous command data */ + sarrayClear(gplot->cmddata); + + /* Generate command data instructions */ + if (gplot->title) { /* set title */ + snprintf(buf, Bufsize, "set title '%s'", gplot->title); + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + if (gplot->xlabel) { /* set xlabel */ + snprintf(buf, Bufsize, "set xlabel '%s'", gplot->xlabel); + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + if (gplot->ylabel) { /* set ylabel */ + snprintf(buf, Bufsize, "set ylabel '%s'", gplot->ylabel); + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + + /* Set terminal type and output */ + if (gplot->outformat == GPLOT_PNG) { + snprintf(buf, Bufsize, "set terminal png; set output '%s'", + gplot->outname); + } + else if (gplot->outformat == GPLOT_PS) { + snprintf(buf, Bufsize, "set terminal postscript; set output '%s'", + gplot->outname); + } + else if (gplot->outformat == GPLOT_EPS) { + snprintf(buf, Bufsize, + "set terminal postscript eps; set output '%s'", + gplot->outname); + } + else if (gplot->outformat == GPLOT_LATEX) { + snprintf(buf, Bufsize, "set terminal latex; set output '%s'", + gplot->outname); + } + sarrayAddString(gplot->cmddata, buf, L_COPY); + + if (gplot->scaling == GPLOT_LOG_SCALE_X || + gplot->scaling == GPLOT_LOG_SCALE_X_Y) { + snprintf(buf, Bufsize, "set logscale x"); + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + if (gplot->scaling == GPLOT_LOG_SCALE_Y || + gplot->scaling == GPLOT_LOG_SCALE_X_Y) { + snprintf(buf, Bufsize, "set logscale y"); + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + + nplots = sarrayGetCount(gplot->datanames); + for (i = 0; i < nplots; i++) { + plottitle = sarrayGetString(gplot->plottitles, i, L_NOCOPY); + dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); + numaGetIValue(gplot->plotstyles, i, &plotstyle); + if (nplots == 1) { + snprintf(buf, Bufsize, "plot '%s' title '%s' %s", + dataname, plottitle, gplotstylenames[plotstyle]); + } + else { + if (i == 0) + snprintf(buf, Bufsize, "plot '%s' title '%s' %s, \\", + dataname, plottitle, gplotstylenames[plotstyle]); + else if (i < nplots - 1) + snprintf(buf, Bufsize, " '%s' title '%s' %s, \\", + dataname, plottitle, gplotstylenames[plotstyle]); + else + snprintf(buf, Bufsize, " '%s' title '%s' %s", + dataname, plottitle, gplotstylenames[plotstyle]); + } + sarrayAddString(gplot->cmddata, buf, L_COPY); + } + + /* Write command data to file */ + cmdstr = sarrayToString(gplot->cmddata, 1); + if ((fp = fopenWriteStream(gplot->cmdname, "w")) == NULL) { + LEPT_FREE(cmdstr); + return ERROR_INT("cmd stream not opened", procName, 1); + } + fwrite(cmdstr, 1, strlen(cmdstr), fp); + fclose(fp); + LEPT_FREE(cmdstr); + return 0; +} + + +/*! + * \brief gplotGenDataFiles() + * + * \param[in] gplot + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pathnames in the gplot command file are actual pathnames,
+ *          which can be in temp directories.  Consequently, they must not be
+ *          rewritten by calling fopenWriteStream(), and we use fopen().
+ * 
+ */ +l_ok +gplotGenDataFiles(GPLOT *gplot) +{ + char *plotdata, *dataname; + l_int32 i, nplots; + FILE *fp; + + PROCNAME("gplotGenDataFiles"); + + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + + nplots = sarrayGetCount(gplot->datanames); + for (i = 0; i < nplots; i++) { + plotdata = sarrayGetString(gplot->plotdata, i, L_NOCOPY); + dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); + if ((fp = fopen(dataname, "w")) == NULL) + return ERROR_INT("datafile stream not opened", procName, 1); + fwrite(plotdata, 1, strlen(plotdata), fp); + fclose(fp); + } + + return 0; +} + + +/*-----------------------------------------------------------------* + * Quick and Dirty Plots * + *-----------------------------------------------------------------*/ + /*! + * \brief gplotSimple1() + * + * \param[in] na numa; plot Y_VS_I + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional], can be NULL + * \return 0 if OK, 1 on error + * + *
+  * Notes:
+  *      (1) This gives a line plot of a numa, where the array value
+  *          is plotted vs the array index.  The plot is generated
+  *          in the specified output format; the title  is optional.
+  *      (2) When calling these simple plot functions more than once, use
+  *          different %outroot to avoid overwriting the output files.
+  * 
+ */ +l_ok +gplotSimple1(NUMA *na, + l_int32 outformat, + const char *outroot, + const char *title) +{ + return gplotSimpleXY1(NULL, na, GPLOT_LINES, outformat, outroot, title); +} + + +/*! + * \brief gplotSimple2() + * + * \param[in] na1 numa; plot with Y_VS_I + * \param[in] na2 ditto + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives a line plot of two numa, where the array values
+ *          are each plotted vs the array index.  The plot is generated
+ *          in the specified output format; the title  is optional.
+ *      (2) When calling these simple plot functions more than once, use
+ *          different %outroot to avoid overwriting the output files.
+ * 
+ */ +l_ok +gplotSimple2(NUMA *na1, + NUMA *na2, + l_int32 outformat, + const char *outroot, + const char *title) +{ + return gplotSimpleXY2(NULL, na1, na2, GPLOT_LINES, + outformat, outroot, title); +} + + +/*! + * \brief gplotSimpleN() + * + * \param[in] naa numaa; we plotted with Y_VS_I for each numa + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives a line plot of all numas in a numaa (array of numa),
+ *          where the array values are each plotted vs the array index.
+ *          The plot is generated in the specified output format;
+ *          the title  is optional.
+ *      (2) When calling these simple plot functions more than once, use
+ *          different %outroot to avoid overwriting the output files.
+ * 
+ */ +l_ok +gplotSimpleN(NUMAA *naa, + l_int32 outformat, + const char *outroot, + const char *title) +{ + return gplotSimpleXYN(NULL, naa, GPLOT_LINES, outformat, outroot, title); +} + + +/*! + * \brief gplotSimpleXY1() + * + * \param[in] nax [optional] + * \param[in] nay [required] + * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, + * GPLOT_LINESPOINTS, GPLOT_DOTS + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional], can be NULL + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives a plot of a %nay vs %nax, generated in
+ *          the specified output format.  The title is optional.
+ *      (2) Use 0 for default plotstyle (lines).
+ *      (3) %nax is optional.  If NULL, %nay is plotted against
+ *          the array index.
+ *      (4) When calling these simple plot functions more than once, use
+ *          different %outroot to avoid overwriting the output files.
+ * 
+ */ +l_ok +gplotSimpleXY1(NUMA *nax, + NUMA *nay, + l_int32 plotstyle, + l_int32 outformat, + const char *outroot, + const char *title) +{ + GPLOT *gplot; + + PROCNAME("gplotSimpleXY1"); + + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) + return ERROR_INT("invalid plotstyle", procName, 1); + if (outformat != GPLOT_PNG && outformat != GPLOT_PS && + outformat != GPLOT_EPS && outformat != GPLOT_LATEX) + return ERROR_INT("invalid outformat", procName, 1); + if (!outroot) + return ERROR_INT("outroot not specified", procName, 1); + + if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) + return ERROR_INT("gplot not made", procName, 1); + gplotAddPlot(gplot, nax, nay, plotstyle, NULL); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + return 0; +} + + +/*! + * \brief gplotSimpleXY2() + * + * \param[in] nax [optional], can be NULL + * \param[in] nay1 + * \param[in] nay2 + * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, + * GPLOT_LINESPOINTS, GPLOT_DOTS + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives plots of %nay1 and %nay2 against %nax, generated
+ *          in the specified output format.  The title is optional.
+ *      (2) Use 0 for default plotstyle (lines).
+ *      (3) %nax is optional.  If NULL, %nay1 and %nay2 are plotted
+ *          against the array index.
+ *      (4) When calling these simple plot functions more than once, use
+ *          different %outroot to avoid overwriting the output files.
+ * 
+ */ +l_ok +gplotSimpleXY2(NUMA *nax, + NUMA *nay1, + NUMA *nay2, + l_int32 plotstyle, + l_int32 outformat, + const char *outroot, + const char *title) +{ + GPLOT *gplot; + + PROCNAME("gplotSimpleXY2"); + + if (!nay1 || !nay2) + return ERROR_INT("nay1 and nay2 not both defined", procName, 1); + if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) + return ERROR_INT("invalid plotstyle", procName, 1); + if (outformat != GPLOT_PNG && outformat != GPLOT_PS && + outformat != GPLOT_EPS && outformat != GPLOT_LATEX) + return ERROR_INT("invalid outformat", procName, 1); + if (!outroot) + return ERROR_INT("outroot not specified", procName, 1); + + if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) + return ERROR_INT("gplot not made", procName, 1); + gplotAddPlot(gplot, nax, nay1, plotstyle, NULL); + gplotAddPlot(gplot, nax, nay2, plotstyle, NULL); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + return 0; +} + + +/*! + * \brief gplotSimpleXYN() + * + * \param[in] nax [optional]; can be NULL + * \param[in] naay numaa of arrays to plot against %nax + * \param[in] plotstyle GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, + * GPLOT_LINESPOINTS, GPLOT_DOTS + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] outroot root of output files + * \param[in] title [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives plots of each Numa in %naa against %nax,
+ *          generated in the specified output format.  The title is optional.
+ *      (2) Use 0 for default plotstyle (lines).
+ *      (3) %nax is optional.  If NULL, each Numa array is plotted against
+ *          the array index.
+ *      (4) When calling these simple plot functions more than once, use
+ *          different %outroot to avoid overwriting the output files.
+ * 
+ */ +l_ok +gplotSimpleXYN(NUMA *nax, + NUMAA *naay, + l_int32 plotstyle, + l_int32 outformat, + const char *outroot, + const char *title) +{ + l_int32 i, n; + GPLOT *gplot; + NUMA *nay; + + PROCNAME("gplotSimpleXYN"); + + if (!naay) + return ERROR_INT("naay not defined", procName, 1); + if ((n = numaaGetCount(naay)) == 0) + return ERROR_INT("no numa in array", procName, 1); + if (plotstyle < 0 || plotstyle >= NUM_GPLOT_STYLES) + return ERROR_INT("invalid plotstyle", procName, 1); + if (outformat != GPLOT_PNG && outformat != GPLOT_PS && + outformat != GPLOT_EPS && outformat != GPLOT_LATEX) + return ERROR_INT("invalid outformat", procName, 1); + if (!outroot) + return ERROR_INT("outroot not specified", procName, 1); + + if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) + return ERROR_INT("gplot not made", procName, 1); + for (i = 0; i < n; i++) { + nay = numaaGetNuma(naay, i, L_CLONE); + gplotAddPlot(gplot, nax, nay, plotstyle, NULL); + numaDestroy(&nay); + } + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + return 0; +} + + +/*-----------------------------------------------------------------* + * Serialize for I/O * + *-----------------------------------------------------------------*/ + /*! + * \brief gplotRead() + * + * \param[in] filename + * \return gplot, or NULL on error + */ +GPLOT * +gplotRead(const char *filename) +{ + char buf[Bufsize]; + char *rootname, *title, *xlabel, *ylabel, *ignores; + l_int32 outformat, ret, version, ignore; + FILE *fp; + GPLOT *gplot; + + PROCNAME("gplotRead"); + + if (!filename) + return (GPLOT *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (GPLOT *)ERROR_PTR("stream not opened", procName, NULL); + + ret = fscanf(fp, "Gplot Version %d\n", &version); + if (ret != 1) { + fclose(fp); + return (GPLOT *)ERROR_PTR("not a gplot file", procName, NULL); + } + if (version != GPLOT_VERSION_NUMBER) { + fclose(fp); + return (GPLOT *)ERROR_PTR("invalid gplot version", procName, NULL); + } + + ignore = fscanf(fp, "Rootname: %511s\n", buf); /* Bufsize - 1 */ + rootname = stringNew(buf); + ignore = fscanf(fp, "Output format: %d\n", &outformat); + ignores = fgets(buf, Bufsize, fp); /* Title: ... */ + title = stringNew(buf + 7); + title[strlen(title) - 1] = '\0'; + ignores = fgets(buf, Bufsize, fp); /* X axis label: ... */ + xlabel = stringNew(buf + 14); + xlabel[strlen(xlabel) - 1] = '\0'; + ignores = fgets(buf, Bufsize, fp); /* Y axis label: ... */ + ylabel = stringNew(buf + 14); + ylabel[strlen(ylabel) - 1] = '\0'; + + gplot = gplotCreate(rootname, outformat, title, xlabel, ylabel); + LEPT_FREE(rootname); + LEPT_FREE(title); + LEPT_FREE(xlabel); + LEPT_FREE(ylabel); + if (!gplot) { + fclose(fp); + return (GPLOT *)ERROR_PTR("gplot not made", procName, NULL); + } + sarrayDestroy(&gplot->cmddata); + sarrayDestroy(&gplot->datanames); + sarrayDestroy(&gplot->plotdata); + sarrayDestroy(&gplot->plottitles); + numaDestroy(&gplot->plotstyles); + + ignore = fscanf(fp, "Commandfile name: %511s\n", buf); /* Bufsize - 1 */ + stringReplace(&gplot->cmdname, buf); + ignore = fscanf(fp, "\nCommandfile data:"); + gplot->cmddata = sarrayReadStream(fp); + ignore = fscanf(fp, "\nDatafile names:"); + gplot->datanames = sarrayReadStream(fp); + ignore = fscanf(fp, "\nPlot data:"); + gplot->plotdata = sarrayReadStream(fp); + ignore = fscanf(fp, "\nPlot titles:"); + gplot->plottitles = sarrayReadStream(fp); + ignore = fscanf(fp, "\nPlot styles:"); + gplot->plotstyles = numaReadStream(fp); + + ignore = fscanf(fp, "Number of plots: %d\n", &gplot->nplots); + ignore = fscanf(fp, "Output file name: %511s\n", buf); + stringReplace(&gplot->outname, buf); + ignore = fscanf(fp, "Axis scaling: %d\n", &gplot->scaling); + + fclose(fp); + return gplot; +} + + +/*! + * \brief gplotWrite() + * + * \param[in] filename + * \param[in] gplot + * \return 0 if OK; 1 on error + */ +l_ok +gplotWrite(const char *filename, + GPLOT *gplot) +{ + FILE *fp; + + PROCNAME("gplotWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!gplot) + return ERROR_INT("gplot not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + + fprintf(fp, "Gplot Version %d\n", GPLOT_VERSION_NUMBER); + fprintf(fp, "Rootname: %s\n", gplot->rootname); + fprintf(fp, "Output format: %d\n", gplot->outformat); + fprintf(fp, "Title: %s\n", gplot->title); + fprintf(fp, "X axis label: %s\n", gplot->xlabel); + fprintf(fp, "Y axis label: %s\n", gplot->ylabel); + + fprintf(fp, "Commandfile name: %s\n", gplot->cmdname); + fprintf(fp, "\nCommandfile data:"); + sarrayWriteStream(fp, gplot->cmddata); + fprintf(fp, "\nDatafile names:"); + sarrayWriteStream(fp, gplot->datanames); + fprintf(fp, "\nPlot data:"); + sarrayWriteStream(fp, gplot->plotdata); + fprintf(fp, "\nPlot titles:"); + sarrayWriteStream(fp, gplot->plottitles); + fprintf(fp, "\nPlot styles:"); + numaWriteStream(fp, gplot->plotstyles); + + fprintf(fp, "Number of plots: %d\n", gplot->nplots); + fprintf(fp, "Output file name: %s\n", gplot->outname); + fprintf(fp, "Axis scaling: %d\n", gplot->scaling); + + fclose(fp); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/gplot.h b/3rdparty/hgOCR/leptonica/gplot.h new file mode 100644 index 00000000..8cf6b864 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/gplot.h @@ -0,0 +1,95 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_GPLOT_H +#define LEPTONICA_GPLOT_H + +/*! + * \file gplot.h + * + *
+ *   Data structures and parameters for generating gnuplot files
+ *
+ *   We used to support X11 output, but recent versions of gnuplot do not
+ *   support the X11 terminal.  To get display to your screen, use
+ *   GPLOT_PNG output; e.g.,
+ *       gplotSimple1(na, GPLOT_PNG, "/tmp/someroot", ...);
+ *       l_fileDisplay("/tmp/someroot.png", ...);
+ * 
+ */ + +#define GPLOT_VERSION_NUMBER 1 + +#define NUM_GPLOT_STYLES 5 +enum GPLOT_STYLE { + GPLOT_LINES = 0, + GPLOT_POINTS = 1, + GPLOT_IMPULSES = 2, + GPLOT_LINESPOINTS = 3, + GPLOT_DOTS = 4 +}; + +#define NUM_GPLOT_OUTPUTS 5 +enum GPLOT_OUTPUT { + GPLOT_NONE = 0, + GPLOT_PNG = 1, + GPLOT_PS = 2, + GPLOT_EPS = 3, + GPLOT_LATEX = 4 +}; + +enum GPLOT_SCALING { + GPLOT_LINEAR_SCALE = 0, /*!< default */ + GPLOT_LOG_SCALE_X = 1, + GPLOT_LOG_SCALE_Y = 2, + GPLOT_LOG_SCALE_X_Y = 3 +}; + +extern const char *gplotstylenames[]; /*!< used in gnuplot cmd file */ +extern const char *gplotfileoutputs[]; /*!< used in simple file input */ + +/*! Data structure for generating gnuplot files */ +struct GPlot +{ + char *rootname; /*!< for cmd, data, output */ + char *cmdname; /*!< command file name */ + struct Sarray *cmddata; /*!< command file contents */ + struct Sarray *datanames; /*!< data file names */ + struct Sarray *plotdata; /*!< plot data (1 string/file) */ + struct Sarray *plottitles; /*!< title for each individual plot */ + struct Numa *plotstyles; /*!< plot style for individual plots */ + l_int32 nplots; /*!< current number of plots */ + char *outname; /*!< output file name */ + l_int32 outformat; /*!< GPLOT_OUTPUT values */ + l_int32 scaling; /*!< GPLOT_SCALING values */ + char *title; /*!< optional */ + char *xlabel; /*!< optional x axis label */ + char *ylabel; /*!< optional y axis label */ +}; +typedef struct GPlot GPLOT; + + +#endif /* LEPTONICA_GPLOT_H */ diff --git a/3rdparty/hgOCR/leptonica/graphics.c b/3rdparty/hgOCR/leptonica/graphics.c new file mode 100644 index 00000000..c746cfb3 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/graphics.c @@ -0,0 +1,2900 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file graphics.c + *
+ *
+ *      Pta generation for arbitrary shapes built with lines
+ *          PTA        *generatePtaLine()
+ *          PTA        *generatePtaWideLine()
+ *          PTA        *generatePtaBox()
+ *          PTA        *generatePtaBoxa()
+ *          PTA        *generatePtaHashBox()
+ *          PTA        *generatePtaHashBoxa()
+ *          PTAA       *generatePtaaBoxa()
+ *          PTAA       *generatePtaaHashBoxa()
+ *          PTA        *generatePtaPolyline()
+ *          PTA        *generatePtaGrid()
+ *          PTA        *convertPtaLineTo4cc()
+ *          PTA        *generatePtaFilledCircle()
+ *          PTA        *generatePtaFilledSquare()
+ *          PTA        *generatePtaLineFromPt()
+ *          l_int32     locatePtRadially()
+ *
+ *      Rendering function plots directly on images
+ *          l_int32     pixRenderPlotFromNuma()
+ *          l_int32     pixRenderPlotFromNumaGen()
+ *          PTA        *makePlotPtaFromNuma()
+ *          PTA        *makePlotPtaFromNumaGen()
+ *
+ *      Pta rendering
+ *          l_int32     pixRenderPta()
+ *          l_int32     pixRenderPtaArb()
+ *          l_int32     pixRenderPtaBlend()
+ *
+ *      Rendering of arbitrary shapes built with lines
+ *          l_int32     pixRenderLine()
+ *          l_int32     pixRenderLineArb()
+ *          l_int32     pixRenderLineBlend()
+ *
+ *          l_int32     pixRenderBox()
+ *          l_int32     pixRenderBoxArb()
+ *          l_int32     pixRenderBoxBlend()
+ *
+ *          l_int32     pixRenderBoxa()
+ *          l_int32     pixRenderBoxaArb()
+ *          l_int32     pixRenderBoxaBlend()
+ *
+ *          l_int32     pixRenderHashBox()
+ *          l_int32     pixRenderHashBoxArb()
+ *          l_int32     pixRenderHashBoxBlend()
+ *          l_int32     pixRenderHashMaskArb()
+ *
+ *          l_int32     pixRenderHashBoxa()
+ *          l_int32     pixRenderHashBoxaArb()
+ *          l_int32     pixRenderHashBoxaBlend()
+ *
+ *          l_int32     pixRenderPolyline()
+ *          l_int32     pixRenderPolylineArb()
+ *          l_int32     pixRenderPolylineBlend()
+ *
+ *          l_int32     pixRenderGrid()
+ *
+ *          l_int32     pixRenderRandomCmapPtaa()
+ *
+ *      Rendering and filling of polygons
+ *          PIX        *pixRenderPolygon()
+ *          PIX        *pixFillPolygon()
+ *
+ *      Contour rendering on grayscale images
+ *          PIX        *pixRenderContours()
+ *          PIX        *fpixAutoRenderContours()
+ *          PIX        *fpixRenderContours()
+ *
+ *      Boundary pt generation on 1 bpp images
+ *          PTA        *pixGeneratePtaBoundary()
+ *
+ *  The line rendering functions are relatively crude, but they
+ *  get the job done for most simple situations.  We use the pta
+ *  (array of points) as an intermediate data structure.  For example,
+ *  to render a line we first generate a pta.
+ *
+ *  Some rendering functions come in sets of three.  For example
+ *       pixRenderLine() -- render on 1 bpp pix
+ *       pixRenderLineArb() -- render on 32 bpp pix with arbitrary (r,g,b)
+ *       pixRenderLineBlend() -- render on 32 bpp pix, blending the
+ *               (r,g,b) graphic object with the underlying rgb pixels.
+ *
+ *  There are also procedures for plotting a function, computed
+ *  from the row or column pixels, directly on the image.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + +/*------------------------------------------------------------------* + * Pta generation for arbitrary shapes built with lines * + *------------------------------------------------------------------*/ +/*! + * \brief generatePtaLine() + * + * \param[in] x1, y1 end point 1 + * \param[in] x2, y2 end point 2 + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Uses Bresenham line drawing, which results in an 8-connected line.
+ * 
+ */ +PTA * +generatePtaLine(l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2) +{ +l_int32 npts, diff, getyofx, sign, i, x, y; +l_float32 slope; +PTA *pta; + + PROCNAME("generatePtaLine"); + + /* Generate line parameters */ + if (x1 == x2 && y1 == y2) { /* same point */ + getyofx = TRUE; + npts = 1; + } else if (L_ABS(x2 - x1) >= L_ABS(y2 - y1)) { + getyofx = TRUE; + npts = L_ABS(x2 - x1) + 1; + diff = x2 - x1; + sign = L_SIGN(x2 - x1); + slope = (l_float32)(sign * (y2 - y1)) / (l_float32)diff; + } else { + getyofx = FALSE; + npts = L_ABS(y2 - y1) + 1; + diff = y2 - y1; + sign = L_SIGN(y2 - y1); + slope = (l_float32)(sign * (x2 - x1)) / (l_float32)diff; + } + + if ((pta = ptaCreate(npts)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + + if (npts == 1) { /* degenerate case */ + ptaAddPt(pta, x1, y1); + return pta; + } + + /* Generate the set of points */ + if (getyofx) { /* y = y(x) */ + for (i = 0; i < npts; i++) { + x = x1 + sign * i; + y = (l_int32)(y1 + (l_float32)i * slope + 0.5); + ptaAddPt(pta, x, y); + } + } else { /* x = x(y) */ + for (i = 0; i < npts; i++) { + x = (l_int32)(x1 + (l_float32)i * slope + 0.5); + y = y1 + sign * i; + ptaAddPt(pta, x, y); + } + } + + return pta; +} + + +/*! + * \brief generatePtaWideLine() + * + * \param[in] x1, y1 end point 1 + * \param[in] x2, y2 end point 2 + * \param[in] width + * \return ptaj, or NULL on error + */ +PTA * +generatePtaWideLine(l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 width) +{ +l_int32 i, x1a, x2a, y1a, y2a; +PTA *pta, *ptaj; + + PROCNAME("generatePtaWideLine"); + + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((ptaj = generatePtaLine(x1, y1, x2, y2)) == NULL) + return (PTA *)ERROR_PTR("ptaj not made", procName, NULL); + if (width == 1) + return ptaj; + + /* width > 1; estimate line direction & join */ + if (L_ABS(x1 - x2) > L_ABS(y1 - y2)) { /* "horizontal" line */ + for (i = 1; i < width; i++) { + if ((i & 1) == 1) { /* place above */ + y1a = y1 - (i + 1) / 2; + y2a = y2 - (i + 1) / 2; + } else { /* place below */ + y1a = y1 + (i + 1) / 2; + y2a = y2 + (i + 1) / 2; + } + if ((pta = generatePtaLine(x1, y1a, x2, y2a)) != NULL) { + ptaJoin(ptaj, pta, 0, -1); + ptaDestroy(&pta); + } + } + } else { /* "vertical" line */ + for (i = 1; i < width; i++) { + if ((i & 1) == 1) { /* place to left */ + x1a = x1 - (i + 1) / 2; + x2a = x2 - (i + 1) / 2; + } else { /* place to right */ + x1a = x1 + (i + 1) / 2; + x2a = x2 + (i + 1) / 2; + } + if ((pta = generatePtaLine(x1a, y1, x2a, y2)) != NULL) { + ptaJoin(ptaj, pta, 0, -1); + ptaDestroy(&pta); + } + } + } + + return ptaj; +} + + +/*! + * \brief generatePtaBox() + * + * \param[in] box + * \param[in] width of line + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) Because the box is constructed so that we don't have any
+ *          overlapping lines, there is no need to remove duplicates.
+ * 
+ */ +PTA * +generatePtaBox(BOX *box, + l_int32 width) +{ +l_int32 x, y, w, h; +PTA *ptad, *pta; + + PROCNAME("generatePtaBox"); + + if (!box) + return (PTA *)ERROR_PTR("box not defined", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + /* Generate line points and add them to the pta. */ + boxGetGeometry(box, &x, &y, &w, &h); + if (w == 0 || h == 0) + return (PTA *)ERROR_PTR("box has w = 0 or h = 0", procName, NULL); + ptad = ptaCreate(0); + if ((width & 1) == 1) { /* odd width */ + pta = generatePtaWideLine(x - width / 2, y, + x + w - 1 + width / 2, y, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x + w - 1, y + 1 + width / 2, + x + w - 1, y + h - 2 - width / 2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x + w - 1 + width / 2, y + h - 1, + x - width / 2, y + h - 1, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x, y + h - 2 - width / 2, + x, y + 1 + width / 2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } else { /* even width */ + pta = generatePtaWideLine(x - width / 2, y, + x + w - 2 + width / 2, y, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x + w - 1, y + 0 + width / 2, + x + w - 1, y + h - 2 - width / 2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x + w - 2 + width / 2, y + h - 1, + x - width / 2, y + h - 1, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + pta = generatePtaWideLine(x, y + h - 2 - width / 2, + x, y + 0 + width / 2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + + return ptad; +} + + +/*! + * \brief generatePtaBoxa() + * + * \param[in] boxa + * \param[in] width + * \param[in] removedups 1 to remove, 0 to leave + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) If %boxa has overlapping boxes, and if blending will
+ *          be used to give a transparent effect, transparency
+ *          artifacts at line intersections can be removed using
+ *          %removedups = 1.
+ * 
+ */ +PTA * +generatePtaBoxa(BOXA *boxa, + l_int32 width, + l_int32 removedups) +{ +l_int32 i, n; +BOX *box; +PTA *ptad, *ptat, *pta; + + PROCNAME("generatePtaBoxa"); + + if (!boxa) + return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + n = boxaGetCount(boxa); + ptat = ptaCreate(0); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pta = generatePtaBox(box, width); + ptaJoin(ptat, pta, 0, -1); + ptaDestroy(&pta); + boxDestroy(&box); + } + + if (removedups) + ptad = ptaRemoveDupsByAset(ptat); + else + ptad = ptaClone(ptat); + + ptaDestroy(&ptat); + return ptad; +} + + +/*! + * \brief generatePtaHashBox() + * + * \param[in] box + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width of line + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
+ *          slope +1, slope -1).
+ *      (2) The full outline is also drawn if %outline = 1.
+ * 
+ */ +PTA * +generatePtaHashBox(BOX *box, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline) +{ +l_int32 bx, by, bh, bw, x, y, x1, y1, x2, y2, i, n, npts; +PTA *ptad, *pta; + + PROCNAME("generatePtaHashBox"); + + if (!box) + return (PTA *)ERROR_PTR("box not defined", procName, NULL); + if (spacing <= 1) + return (PTA *)ERROR_PTR("spacing not > 1", procName, NULL); + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return (PTA *)ERROR_PTR("invalid line orientation", procName, NULL); + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (bw == 0 || bh == 0) + return (PTA *)ERROR_PTR("box has bw = 0 or bh = 0", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + /* Generate line points and add them to the pta. */ + ptad = ptaCreate(0); + if (outline) { + pta = generatePtaBox(box, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + if (orient == L_HORIZONTAL_LINE) { + n = 1 + bh / spacing; + for (i = 0; i < n; i++) { + y = by + (i * (bh - 1)) / (n - 1); + pta = generatePtaWideLine(bx, y, bx + bw - 1, y, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + } else if (orient == L_VERTICAL_LINE) { + n = 1 + bw / spacing; + for (i = 0; i < n; i++) { + x = bx + (i * (bw - 1)) / (n - 1); + pta = generatePtaWideLine(x, by, x, by + bh - 1, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + } else if (orient == L_POS_SLOPE_LINE) { + n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); + for (i = 0; i < n; i++) { + x = (l_int32)(bx + (i + 0.5) * 1.4 * spacing); + boxIntersectByLine(box, x, by - 1, 1.0, &x1, &y1, &x2, &y2, &npts); + if (npts == 2) { + pta = generatePtaWideLine(x1, y1, x2, y2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + } + } else { /* orient == L_NEG_SLOPE_LINE */ + n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); + for (i = 0; i < n; i++) { + x = (l_int32)(bx - bh + (i + 0.5) * 1.4 * spacing); + boxIntersectByLine(box, x, by - 1, -1.0, &x1, &y1, &x2, &y2, &npts); + if (npts == 2) { + pta = generatePtaWideLine(x1, y1, x2, y2, width); + ptaJoin(ptad, pta, 0, -1); + ptaDestroy(&pta); + } + } + } + + return ptad; +} + + +/*! + * \brief generatePtaHashBoxa() + * + * \param[in] boxa + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width of line + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \param[in] removedups 1 to remove, 0 to leave + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
+ *          slope +1, slope -1).
+ *      (2) The full outline is also drawn if %outline = 1.
+ *      (3) If the boxa has overlapping boxes, and if blending will
+ *          be used to give a transparent effect, transparency
+ *          artifacts at line intersections can be removed using
+ *          %removedups = 1.
+ * 
+ */ +PTA * +generatePtaHashBoxa(BOXA *boxa, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 removedups) +{ +l_int32 i, n; +BOX *box; +PTA *ptad, *ptat, *pta; + + PROCNAME("generatePtaHashBoxa"); + + if (!boxa) + return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); + if (spacing <= 1) + return (PTA *)ERROR_PTR("spacing not > 1", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return (PTA *)ERROR_PTR("invalid line orientation", procName, NULL); + + n = boxaGetCount(boxa); + ptat = ptaCreate(0); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pta = generatePtaHashBox(box, spacing, width, orient, outline); + ptaJoin(ptat, pta, 0, -1); + ptaDestroy(&pta); + boxDestroy(&box); + } + + if (removedups) + ptad = ptaRemoveDupsByAset(ptat); + else + ptad = ptaClone(ptat); + + ptaDestroy(&ptat); + return ptad; +} + + +/*! + * \brief generatePtaaBoxa() + * + * \param[in] boxa + * \return ptaa, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a pta of the four corners for each box in
+ *          the boxa.
+ *      (2) Each of these pta can be rendered onto a pix with random colors,
+ *          by using pixRenderRandomCmapPtaa() with closeflag = 1.
+ * 
+ */ +PTAA * +generatePtaaBoxa(BOXA *boxa) +{ +l_int32 i, n, x, y, w, h; +BOX *box; +PTA *pta; +PTAA *ptaa; + + PROCNAME("generatePtaaBoxa"); + + if (!boxa) + return (PTAA *)ERROR_PTR("boxa not defined", procName, NULL); + + n = boxaGetCount(boxa); + ptaa = ptaaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + pta = ptaCreate(4); + ptaAddPt(pta, x, y); + ptaAddPt(pta, x + w - 1, y); + ptaAddPt(pta, x + w - 1, y + h - 1); + ptaAddPt(pta, x, y + h - 1); + ptaaAddPta(ptaa, pta, L_INSERT); + boxDestroy(&box); + } + + return ptaa; +} + + +/*! + * \brief generatePtaaHashBoxa() + * + * \param[in] boxa + * \param[in] spacing spacing between hash lines; must be > 1 + * \param[in] width hash line width + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \return ptaa, or NULL on error + * + *
+ * Notes:
+ *      (1) The orientation takes on one of 4 orientations (horiz, vertical,
+ *          slope +1, slope -1).
+ *      (2) The full outline is also drawn if %outline = 1.
+ *      (3) Each of these pta can be rendered onto a pix with random colors,
+ *          by using pixRenderRandomCmapPtaa() with closeflag = 1.
+ *
+ * 
+ */ +PTAA * +generatePtaaHashBoxa(BOXA *boxa, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline) +{ +l_int32 i, n; +BOX *box; +PTA *pta; +PTAA *ptaa; + + PROCNAME("generatePtaaHashBoxa"); + + if (!boxa) + return (PTAA *)ERROR_PTR("boxa not defined", procName, NULL); + if (spacing <= 1) + return (PTAA *)ERROR_PTR("spacing not > 1", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return (PTAA *)ERROR_PTR("invalid line orientation", procName, NULL); + + n = boxaGetCount(boxa); + ptaa = ptaaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pta = generatePtaHashBox(box, spacing, width, orient, outline); + ptaaAddPta(ptaa, pta, L_INSERT); + boxDestroy(&box); + } + + return ptaa; +} + + +/*! + * \brief generatePtaPolyline() + * + * \param[in] ptas vertices of polyline + * \param[in] width + * \param[in] closeflag 1 to close the contour; 0 otherwise + * \param[in] removedups 1 to remove, 0 to leave + * \return ptad, or NULL on error + */ +PTA * +generatePtaPolyline(PTA *ptas, + l_int32 width, + l_int32 closeflag, + l_int32 removedups) +{ +l_int32 i, n, x1, y1, x2, y2; +PTA *ptad, *ptat, *pta; + + PROCNAME("generatePtaPolyline"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + n = ptaGetCount(ptas); + ptat = ptaCreate(0); + if (n < 2) /* nothing to do */ + return ptat; + + ptaGetIPt(ptas, 0, &x1, &y1); + for (i = 1; i < n; i++) { + ptaGetIPt(ptas, i, &x2, &y2); + pta = generatePtaWideLine(x1, y1, x2, y2, width); + ptaJoin(ptat, pta, 0, -1); + ptaDestroy(&pta); + x1 = x2; + y1 = y2; + } + + if (closeflag) { + ptaGetIPt(ptas, 0, &x2, &y2); + pta = generatePtaWideLine(x1, y1, x2, y2, width); + ptaJoin(ptat, pta, 0, -1); + ptaDestroy(&pta); + } + + if (removedups) + ptad = ptaRemoveDupsByAset(ptat); + else + ptad = ptaClone(ptat); + + ptaDestroy(&ptat); + return ptad; +} + + +/*! + * \brief generatePtaGrid() + * + * \param[in] w, h of region where grid will be displayed + * \param[in] nx, ny number of rectangles in each direction in grid + * \param[in] width of rendered lines + * \return ptad, or NULL on error + */ +PTA * +generatePtaGrid(l_int32 w, + l_int32 h, + l_int32 nx, + l_int32 ny, + l_int32 width) +{ +l_int32 i, j, bx, by, x1, x2, y1, y2; +BOX *box; +BOXA *boxa; +PTA *pta; + + PROCNAME("generatePtaGrid"); + + if (nx < 1 || ny < 1) + return (PTA *)ERROR_PTR("nx and ny must be > 0", procName, NULL); + if (w < 2 * nx || h < 2 * ny) + return (PTA *)ERROR_PTR("w and/or h too small", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + boxa = boxaCreate(nx * ny); + bx = (w + nx - 1) / nx; + by = (h + ny - 1) / ny; + for (i = 0; i < ny; i++) { + y1 = by * i; + y2 = L_MIN(y1 + by, h - 1); + for (j = 0; j < nx; j++) { + x1 = bx * j; + x2 = L_MIN(x1 + bx, w - 1); + box = boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); + boxaAddBox(boxa, box, L_INSERT); + } + } + + pta = generatePtaBoxa(boxa, width, 1); + boxaDestroy(&boxa); + return pta; +} + + +/*! + * \brief convertPtaLineTo4cc() + * + * \param[in] ptas 8-connected line of points + * \return ptad 4-connected line, or NULL on error + * + *
+ * Notes:
+ *      (1) When a polyline is generated with width = 1, the resulting
+ *          line is not 4-connected in general.  This function adds
+ *          points as necessary to convert the line to 4-cconnected.
+ *          It is useful when rendering 1 bpp on a pix.
+ *      (2) Do not use this for lines generated with width > 1.
+ * 
+ */ +PTA * +convertPtaLineTo4cc(PTA *ptas) +{ +l_int32 i, n, x, y, xp, yp; +PTA *ptad; + + PROCNAME("convertPtaLineTo4cc"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + ptaGetIPt(ptas, 0, &xp, &yp); + ptaAddPt(ptad, xp, yp); + for (i = 1; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + if (x != xp && y != yp) /* diagonal */ + ptaAddPt(ptad, x, yp); + ptaAddPt(ptad, x, y); + xp = x; + yp = y; + } + + return ptad; +} + + +/*! + * \brief generatePtaFilledCircle() + * + * \param[in] radius + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) The circle is has diameter = 2 * radius + 1.
+ *      (2) It is located with the center of the circle at the
+ *          point (%radius, %radius).
+ *      (3) Consequently, it typically must be translated if
+ *          it is to represent a set of pixels in an image.
+ * 
+ */ +PTA * +generatePtaFilledCircle(l_int32 radius) +{ +l_int32 x, y; +l_float32 radthresh, sqdist; +PTA *pta; + + PROCNAME("generatePtaFilledCircle"); + + if (radius < 1) + return (PTA *)ERROR_PTR("radius must be >= 1", procName, NULL); + + pta = ptaCreate(0); + radthresh = (radius + 0.5) * (radius + 0.5); + for (y = 0; y <= 2 * radius; y++) { + for (x = 0; x <= 2 * radius; x++) { + sqdist = (l_float32)((y - radius) * (y - radius) + + (x - radius) * (x - radius)); + if (sqdist <= radthresh) + ptaAddPt(pta, x, y); + } + } + + return pta; +} + + +/*! + * \brief generatePtaFilledSquare() + * + * \param[in] side + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) The center of the square can be chosen to be at
+ *          (side / 2, side / 2).  It must be translated by this amount
+ *          when used for replication.
+ * 
+ */ +PTA * +generatePtaFilledSquare(l_int32 side) +{ +l_int32 x, y; +PTA *pta; + + PROCNAME("generatePtaFilledSquare"); + if (side < 1) + return (PTA *)ERROR_PTR("side must be > 0", procName, NULL); + + pta = ptaCreate(0); + for (y = 0; y < side; y++) + for (x = 0; x < side; x++) + ptaAddPt(pta, x, y); + + return pta; +} + + +/*! + * \brief generatePtaLineFromPt() + * + * \param[in] x, y point of origination + * \param[in] length of line, including starting point + * \param[in] radang angle in radians, CW from horizontal + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) %length of the line is 1 greater than the distance
+ *          used in locatePtRadially().  Example: a distance of 1
+ *          gives rise to a length of 2.
+ * 
+ */ +PTA * +generatePtaLineFromPt(l_int32 x, + l_int32 y, + l_float64 length, + l_float64 radang) +{ +l_int32 x2, y2; /* the point at the other end of the line */ + + x2 = x + (l_int32)((length - 1.0) * cos(radang)); + y2 = y + (l_int32)((length - 1.0) * sin(radang)); + return generatePtaLine(x, y, x2, y2); +} + + +/*! + * \brief locatePtRadially() + * + * \param[in] xr, yr reference point + * \param[in] radang angle in radians, CW from horizontal + * \param[in] dist distance of point from reference point along + * line given by the specified angle + * \param[out] px, py location of point + * \return 0 if OK, 1 on error + */ +l_ok +locatePtRadially(l_int32 xr, + l_int32 yr, + l_float64 dist, + l_float64 radang, + l_float64 *px, + l_float64 *py) +{ + PROCNAME("locatePtRadially"); + + if (!px || !py) + return ERROR_INT("&x and &y not both defined", procName, 1); + + *px = xr + dist * cos(radang); + *py = yr + dist * sin(radang); + return 0; +} + + +/*------------------------------------------------------------------* + * Rendering function plots directly on images * + *------------------------------------------------------------------*/ +/*! + * \brief pixRenderPlotFromNuma() + * + * \param[in,out] ppix any type; replaced if not 32 bpp rgb + * \param[in] na to be plotted + * \param[in] plotloc location of plot: L_PLOT_AT_TOP, etc + * \param[in] linewidth width of "line" that is drawn; between 1 and 7 + * \param[in] max maximum excursion in pixels from baseline + * \param[in] color plot color: 0xrrggbb00 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simplified interface for plotting row or column aligned data
+ *          on a pix.
+ *      (2) This replaces %pix with a 32 bpp rgb version if it is not
+ *          already 32 bpp.  It then draws the plot on the pix.
+ *      (3) See makePlotPtaFromNumaGen() for more details.
+ * 
+ */ +l_ok +pixRenderPlotFromNuma(PIX **ppix, + NUMA *na, + l_int32 plotloc, + l_int32 linewidth, + l_int32 max, + l_uint32 color) +{ +l_int32 w, h, size, rval, gval, bval; +PIX *pix1; +PTA *pta; + + PROCNAME("pixRenderPlotFromNuma"); + + if (!ppix) + return ERROR_INT("&pix not defined", procName, 1); + if (*ppix == NULL) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(*ppix, &w, &h, NULL); + size = (plotloc == L_PLOT_AT_TOP || plotloc == L_PLOT_AT_MID_HORIZ || + plotloc == L_PLOT_AT_BOT) ? h : w; + pta = makePlotPtaFromNuma(na, size, plotloc, linewidth, max); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + + if (pixGetDepth(*ppix) != 32) { + pix1 = pixConvertTo32(*ppix); + pixDestroy(ppix); + *ppix = pix1; + } + extractRGBValues(color, &rval, &gval, &bval); + pixRenderPtaArb(*ppix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief makePlotPtaFromNuma() + * + * \param[in] na + * \param[in] size pix height for horizontal plot; pix width + * for vertical plot + * \param[in] plotloc location of plot: L_PLOT_AT_TOP, etc + * \param[in] linewidth width of "line" that is drawn; between 1 and 7 + * \param[in] max maximum excursion in pixels from baseline + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates points from %numa representing y(x) or x(y)
+ *          with respect to a pix.  A horizontal plot y(x) is drawn for
+ *          a function of column position, and a vertical plot is drawn
+ *          for a function x(y) of row position.  The baseline is located
+ *          so that all plot points will fit in the pix.
+ *      (2) See makePlotPtaFromNumaGen() for more details.
+ * 
+ */ +PTA * +makePlotPtaFromNuma(NUMA *na, + l_int32 size, + l_int32 plotloc, + l_int32 linewidth, + l_int32 max) +{ +l_int32 orient, refpos; + + PROCNAME("makePlotPtaFromNuma"); + + if (!na) + return (PTA *)ERROR_PTR("na not defined", procName, NULL); + if (plotloc == L_PLOT_AT_TOP || plotloc == L_PLOT_AT_MID_HORIZ || + plotloc == L_PLOT_AT_BOT) { + orient = L_HORIZONTAL_LINE; + } else if (plotloc == L_PLOT_AT_LEFT || plotloc == L_PLOT_AT_MID_VERT || + plotloc == L_PLOT_AT_RIGHT) { + orient = L_VERTICAL_LINE; + } else { + return (PTA *)ERROR_PTR("invalid plotloc", procName, NULL); + } + + if (plotloc == L_PLOT_AT_LEFT || plotloc == L_PLOT_AT_TOP) + refpos = max; + else if (plotloc == L_PLOT_AT_MID_VERT || plotloc == L_PLOT_AT_MID_HORIZ) + refpos = size / 2; + else /* L_PLOT_AT_RIGHT || L_PLOT_AT_BOT */ + refpos = size - max - 1; + + return makePlotPtaFromNumaGen(na, orient, linewidth, refpos, max, 1); +} + + +/*! + * \brief pixRenderPlotFromNumaGen() + * + * \param[in,out] ppix any type; replaced if not 32 bpp rgb + * \param[in] na to be plotted + * \param[in] orient L_HORIZONTAL_LINE, L_VERTICAL_LINE + * \param[in] linewidth width of "line" that is drawn; between 1 and 7 + * \param[in] refpos reference position: y for horizontal; + * x for vertical + * \param[in] max maximum excursion in pixels from baseline + * \param[in] drawref 1 to draw the reference line and its normal + * \param[in] color plot color: 0xrrggbb00 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) General interface for plotting row or column aligned data
+ *          on a pix.
+ *      (2) This replaces %pix with a 32 bpp rgb version if it is not
+ *          already 32 bpp.  It then draws the plot on the pix.
+ *      (3) See makePlotPtaFromNumaGen() for other input parameters.
+ * 
+ */ +l_ok +pixRenderPlotFromNumaGen(PIX **ppix, + NUMA *na, + l_int32 orient, + l_int32 linewidth, + l_int32 refpos, + l_int32 max, + l_int32 drawref, + l_uint32 color) +{ +l_int32 rval, gval, bval; +PIX *pix1; +PTA *pta; + + PROCNAME("pixRenderPlotFromNumaGen"); + + if (!ppix) + return ERROR_INT("&pix not defined", procName, 1); + if (*ppix == NULL) + return ERROR_INT("pix not defined", procName, 1); + + pta = makePlotPtaFromNumaGen(na, orient, linewidth, refpos, max, drawref); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + + if (pixGetDepth(*ppix) != 32) { + pix1 = pixConvertTo32(*ppix); + pixDestroy(ppix); + *ppix = pix1; + } + extractRGBValues(color, &rval, &gval, &bval); + pixRenderPtaArb(*ppix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief makePlotPtaFromNumaGen() + * + * \param[in] na + * \param[in] orient L_HORIZONTAL_LINE, L_VERTICAL_LINE + * \param[in] linewidth width of "line" that is drawn; between 1 and 7 + * \param[in] refpos reference position: y for horizontal; + * x for vertical + * \param[in] max maximum excursion in pixels from baseline + * \param[in] drawref 1 to draw the reference line and its normal + * \return ptad, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates points from %numa representing y(x) or x(y)
+ *          with respect to a pix.  For y(x), we draw a horizontal line
+ *          at the reference position and a vertical line at the edge; then
+ *          we draw the values of %numa, scaled so that the maximum
+ *          excursion from the reference position is %max pixels.
+ *      (2) The start and delx parameters of %numa are used to refer
+ *          its values to the raster lines (L_VERTICAL_LINE) or columns
+ *          (L_HORIZONTAL_LINE).
+ *      (3) The linewidth is chosen in the interval [1 ... 7].
+ *      (4) %refpos should be chosen so the plot is entirely within the pix
+ *          that it will be painted onto.
+ *      (5) This would typically be used to plot, in place, a function
+ *          computed along pixel rows or columns.
+ * 
+ */ +PTA * +makePlotPtaFromNumaGen(NUMA *na, + l_int32 orient, + l_int32 linewidth, + l_int32 refpos, + l_int32 max, + l_int32 drawref) +{ +l_int32 i, n, maxw, maxh; +l_float32 minval, maxval, absval, val, scale, start, del; +PTA *pta1, *pta2, *ptad; + + PROCNAME("makePlotPtaFromNumaGen"); + + if (!na) + return (PTA *)ERROR_PTR("na not defined", procName, NULL); + if (orient != L_HORIZONTAL_LINE && orient != L_VERTICAL_LINE) + return (PTA *)ERROR_PTR("invalid orient", procName, NULL); + if (linewidth < 1) { + L_WARNING("linewidth < 1; setting to 1\n", procName); + linewidth = 1; + } + if (linewidth > 7) { + L_WARNING("linewidth > 7; setting to 7\n", procName); + linewidth = 7; + } + + numaGetMin(na, &minval, NULL); + numaGetMax(na, &maxval, NULL); + absval = L_MAX(L_ABS(minval), L_ABS(maxval)); + scale = (l_float32)max / (l_float32)absval; + n = numaGetCount(na); + numaGetParameters(na, &start, &del); + + /* Generate the plot points */ + pta1 = ptaCreate(n); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (orient == L_HORIZONTAL_LINE) { + ptaAddPt(pta1, start + i * del, refpos + scale * val); + maxw = (del >= 0) ? start + n * del + linewidth + : start + linewidth; + maxh = refpos + max + linewidth; + } else { /* vertical line */ + ptaAddPt(pta1, refpos + scale * val, start + i * del); + maxw = refpos + max + linewidth; + maxh = (del >= 0) ? start + n * del + linewidth + : start + linewidth; + } + } + + /* Optionally, widen the plot */ + if (linewidth > 1) { + if (linewidth % 2 == 0) /* even linewidth; use side of a square */ + pta2 = generatePtaFilledSquare(linewidth); + else /* odd linewidth; use radius of a circle */ + pta2 = generatePtaFilledCircle(linewidth / 2); + ptad = ptaReplicatePattern(pta1, NULL, pta2, linewidth / 2, + linewidth / 2, maxw, maxh); + ptaDestroy(&pta2); + } else { + ptad = ptaClone(pta1); + } + ptaDestroy(&pta1); + + /* Optionally, add the reference lines */ + if (drawref) { + if (orient == L_HORIZONTAL_LINE) { + pta1 = generatePtaLine(start, refpos, start + n * del, refpos); + ptaJoin(ptad, pta1, 0, -1); + ptaDestroy(&pta1); + pta1 = generatePtaLine(start, refpos - max, + start, refpos + max); + ptaJoin(ptad, pta1, 0, -1); + } else { /* vertical line */ + pta1 = generatePtaLine(refpos, start, refpos, start + n * del); + ptaJoin(ptad, pta1, 0, -1); + ptaDestroy(&pta1); + pta1 = generatePtaLine(refpos - max, start, + refpos + max, start); + ptaJoin(ptad, pta1, 0, -1); + } + ptaDestroy(&pta1); + } + + return ptad; +} + + +/*------------------------------------------------------------------* + * Pta generation for arbitrary shapes built with lines * + *------------------------------------------------------------------*/ +/*! + * \brief pixRenderPta() + * + * \param[in] pix any depth, not cmapped + * \param[in] pta arbitrary set of points + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) L_SET_PIXELS puts all image bits in each pixel to 1
+ *          (black for 1 bpp; white for depth > 1)
+ *      (2) L_CLEAR_PIXELS puts all image bits in each pixel to 0
+ *          (white for 1 bpp; black for depth > 1)
+ *      (3) L_FLIP_PIXELS reverses all image bits in each pixel
+ *      (4) This function clips the rendering to the pix.  It performs
+ *          clipping for functions such as pixRenderLine(),
+ *          pixRenderBox() and pixRenderBoxa(), that call pixRenderPta().
+ * 
+ */ +l_ok +pixRenderPta(PIX *pix, + PTA *pta, + l_int32 op) +{ +l_int32 i, n, x, y, w, h, d, maxval; + + PROCNAME("pixRenderPta"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (pixGetColormap(pix)) + return ERROR_INT("pix is colormapped", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + maxval = 1; + if (op == L_SET_PIXELS) { + switch (d) + { + case 2: + maxval = 0x3; + break; + case 4: + maxval = 0xf; + break; + case 8: + maxval = 0xff; + break; + case 16: + maxval = 0xffff; + break; + case 32: + maxval = 0xffffffff; + break; + } + } + + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w) + continue; + if (y < 0 || y >= h) + continue; + switch (op) + { + case L_SET_PIXELS: + pixSetPixel(pix, x, y, maxval); + break; + case L_CLEAR_PIXELS: + pixClearPixel(pix, x, y); + break; + case L_FLIP_PIXELS: + pixFlipPixel(pix, x, y); + break; + default: + break; + } + } + + return 0; +} + + +/*! + * \brief pixRenderPtaArb() + * + * \param[in] pix any depth, cmapped ok + * \param[in] pta arbitrary set of points + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %pix is colormapped, render this color (or the nearest
+ *          color if the cmap is full) on each pixel.
+ *      (2) The rgb components have the standard dynamic range [0 ... 255]
+ *      (3) If pix is not colormapped, do the best job you can using
+ *          the input colors:
+ *          ~ d = 1: set the pixels
+ *          ~ d = 2, 4, 8: average the input rgb value
+ *          ~ d = 32: use the input rgb value
+ *      (4) This function clips the rendering to %pix.
+ * 
+ */ +l_ok +pixRenderPtaArb(PIX *pix, + PTA *pta, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval) +{ +l_int32 i, n, x, y, w, h, d, index; +l_uint8 val; +l_uint32 val32; +PIXCMAP *cmap; + + PROCNAME("pixRenderPtaArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + d = pixGetDepth(pix); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return ERROR_INT("depth not in {1,2,4,8,32}", procName, 1); + + if (d == 1) { + pixRenderPta(pix, pta, L_SET_PIXELS); + return 0; + } + + cmap = pixGetColormap(pix); + pixGetDimensions(pix, &w, &h, &d); + if (cmap) { + pixcmapAddNearestColor(cmap, rval, gval, bval, &index); + } else { + if (d == 2) + val = (rval + gval + bval) / (3 * 64); + else if (d == 4) + val = (rval + gval + bval) / (3 * 16); + else if (d == 8) + val = (rval + gval + bval) / 3; + else /* d == 32 */ + composeRGBPixel(rval, gval, bval, &val32); + } + + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w) + continue; + if (y < 0 || y >= h) + continue; + if (cmap) + pixSetPixel(pix, x, y, index); + else if (d == 32) + pixSetPixel(pix, x, y, val32); + else + pixSetPixel(pix, x, y, val); + } + + return 0; +} + + +/*! + * \brief pixRenderPtaBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] pta arbitrary set of points + * \param[in] rval, gval, bval + * \param[in] fract + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function clips the rendering to %pix.
+ * 
+ */ +l_ok +pixRenderPtaBlend(PIX *pix, + PTA *pta, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_float32 fract) +{ +l_int32 i, n, x, y, w, h; +l_uint8 nrval, ngval, nbval; +l_uint32 val32; +l_float32 frval, fgval, fbval; + + PROCNAME("pixRenderPtaBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (pixGetDepth(pix) != 32) + return ERROR_INT("depth not 32 bpp", procName, 1); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); + fract = 0.5; + } + + pixGetDimensions(pix, &w, &h, NULL); + n = ptaGetCount(pta); + frval = fract * rval; + fgval = fract * gval; + fbval = fract * bval; + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w) + continue; + if (y < 0 || y >= h) + continue; + pixGetPixel(pix, x, y, &val32); + nrval = GET_DATA_BYTE(&val32, COLOR_RED); + nrval = (l_uint8)((1. - fract) * nrval + frval); + ngval = GET_DATA_BYTE(&val32, COLOR_GREEN); + ngval = (l_uint8)((1. - fract) * ngval + fgval); + nbval = GET_DATA_BYTE(&val32, COLOR_BLUE); + nbval = (l_uint8)((1. - fract) * nbval + fbval); + composeRGBPixel(nrval, ngval, nbval, &val32); + pixSetPixel(pix, x, y, val32); + } + + return 0; +} + + +/*------------------------------------------------------------------* + * Rendering of arbitrary shapes built with lines * + *------------------------------------------------------------------*/ +/*! + * \brief pixRenderLine() + * + * \param[in] pix any depth, not cmapped + * \param[in] x1, y1 + * \param[in] x2, y2 + * \param[in] width thickness of line + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderLine(PIX *pix, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 width, + l_int32 op) +{ +PTA *pta; + + PROCNAME("pixRenderLine"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (width < 1) { + L_WARNING("width must be > 0; setting to 1\n", procName); + width = 1; + } + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderLineArb() + * + * \param[in] pix any depth, cmapped ok + * \param[in] x1, y1 + * \param[in] x2, y2 + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderLineArb(PIX *pix, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval) +{ +PTA *pta; + + PROCNAME("pixRenderLineArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (width < 1) { + L_WARNING("width must be > 0; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderLineBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] x1, y1 + * \param[in] x2, y2 + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \param[in] fract + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderLineBlend(PIX *pix, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_float32 fract) +{ +PTA *pta; + + PROCNAME("pixRenderLineBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (width < 1) { + L_WARNING("width must be > 0; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBox() + * + * \param[in] pix any depth, not cmapped + * \param[in] box + * \param[in] width thickness of box lines + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBox(PIX *pix, + BOX *box, + l_int32 width, + l_int32 op) +{ +PTA *pta; + + PROCNAME("pixRenderBox"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + if ((pta = generatePtaBox(box, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBoxArb() + * + * \param[in] pix any depth, cmapped ok + * \param[in] box + * \param[in] width thickness of box lines + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBoxArb(PIX *pix, + BOX *box, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval) +{ +PTA *pta; + + PROCNAME("pixRenderBoxArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaBox(box, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBoxBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] box + * \param[in] width thickness of box lines + * \param[in] rval, gval, bval + * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; + * 0.0 is complete transparency (no effect) + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBoxBlend(PIX *pix, + BOX *box, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_float32 fract) +{ +PTA *pta; + + PROCNAME("pixRenderBoxBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaBox(box, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBoxa() + * + * \param[in] pix any depth, not cmapped + * \param[in] boxa + * \param[in] width thickness of line + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBoxa(PIX *pix, + BOXA *boxa, + l_int32 width, + l_int32 op) +{ +PTA *pta; + + PROCNAME("pixRenderBoxa"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBoxaArb() + * + * \param[in] pix any depth; colormapped is ok + * \param[in] boxa + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBoxaArb(PIX *pix, + BOXA *boxa, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval) +{ +PTA *pta; + + PROCNAME("pixRenderBoxaArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderBoxaBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] boxa + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; + * 0.0 is complete transparency (no effect) + * \param[in] removedups 1 to remove; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderBoxaBlend(PIX *pix, + BOXA *boxa, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_float32 fract, + l_int32 removedups) +{ +PTA *pta; + + PROCNAME("pixRenderBoxaBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaBoxa(boxa, width, removedups)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashBox() + * + * \param[in] pix any depth, not cmapped + * \param[in] box + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... + * \param[in] outline 0 to skip drawing box outline + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBox(PIX *pix, + BOX *box, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 op) +{ +PTA *pta; + + PROCNAME("pixRenderHashBox"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + pta = generatePtaHashBox(box, spacing, width, orient, outline); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashBoxArb() + * + * \param[in] pix any depth; cmapped ok + * \param[in] box + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... + * \param[in] outline 0 to skip drawing box outline + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBoxArb(PIX *pix, + BOX *box, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +PTA *pta; + + PROCNAME("pixRenderHashBoxArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + + pta = generatePtaHashBox(box, spacing, width, orient, outline); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashBoxBlend() + * + * \param[in] pix 32 bpp + * \param[in] box + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, ... + * \param[in] outline 0 to skip drawing box outline + * \param[in] rval, gval, bval + * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; + * 0.0 is complete transparency (no effect) + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBoxBlend(PIX *pix, + BOX *box, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_float32 fract) +{ +PTA *pta; + + PROCNAME("pixRenderHashBoxBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + + pta = generatePtaHashBox(box, spacing, width, orient, outline); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashMaskArb() + * + * \param[in] pix any depth; cmapped ok + * \param[in] pixm 1 bpp clipping mask for hash marks + * \param[in] x,y UL corner of %pixm with respect to %pix + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + *
+ * Notes:
+ *      (1) This is an in-place operation that renders hash lines
+ *          through a mask %pixm onto %pix.  The mask origin is
+ *          translated by (%x,%y) relative to the origin of %pix.
+ * 
+ */ +l_ok +pixRenderHashMaskArb(PIX *pix, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 w, h; +BOX *box1, *box2; +PIX *pix1; +PTA *pta1, *pta2; + + PROCNAME("pixRenderHashMaskArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not defined or not 1 bpp", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + + /* Get the points for masked hash lines */ + pixGetDimensions(pixm, &w, &h, NULL); + box1 = boxCreate(0, 0, w, h); + pta1 = generatePtaHashBox(box1, spacing, width, orient, outline); + pta2 = ptaCropToMask(pta1, pixm); + boxDestroy(&box1); + ptaDestroy(&pta1); + + /* Clip out the region and apply the hash lines */ + box2 = boxCreate(x, y, w, h); + pix1 = pixClipRectangle(pix, box2, NULL); + pixRenderPtaArb(pix1, pta2, rval, gval, bval); + ptaDestroy(&pta2); + boxDestroy(&box2); + + /* Rasterop the altered rectangle back in place */ + pixRasterop(pix, x, y, w, h, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief pixRenderHashBoxa() + * + * \param[in] pix any depth, not cmapped + * \param[in] boxa + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBoxa(PIX *pix, + BOXA *boxa, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 op) + { +PTA *pta; + + PROCNAME("pixRenderHashBoxa"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashBoxaArb() + * + * \param[in] pix any depth; cmapped ok + * \param[in] box + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBoxaArb(PIX *pix, + BOXA *boxa, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +PTA *pta; + + PROCNAME("pixRenderHashBoxArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + + pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderHashBoxaBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] boxa + * \param[in] spacing spacing between lines; must be > 1 + * \param[in] width thickness of box and hash lines + * \param[in] orient orientation of lines: L_HORIZONTAL_LINE, + * L_POS_SLOPE_LINE, L_VERTICAL_LINE, + * L_NEG_SLOPE_LINE + * \param[in] outline 0 to skip drawing box outline + * \param[in] rval, gval, bval + * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; + * 0.0 is complete transparency (no effect) + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderHashBoxaBlend(PIX *pix, + BOXA *boxa, + l_int32 spacing, + l_int32 width, + l_int32 orient, + l_int32 outline, + l_int32 rval, + l_int32 gval, + l_int32 bval, + l_float32 fract) +{ +PTA *pta; + + PROCNAME("pixRenderHashBoxaBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (spacing <= 1) + return ERROR_INT("spacing not > 1", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && + orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) + return ERROR_INT("invalid line orientation", procName, 1); + + pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); + if (!pta) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderPolyline() + * + * \param[in] pix any depth, not cmapped + * \param[in] ptas + * \param[in] width thickness of line + * \param[in] op one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS + * \param[in] closeflag 1 to close the contour; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      This renders a closed contour.
+ * 
+ */ +l_ok +pixRenderPolyline(PIX *pix, + PTA *ptas, + l_int32 width, + l_int32 op, + l_int32 closeflag) +{ +PTA *pta; + + PROCNAME("pixRenderPolyline"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) + return ERROR_INT("invalid op", procName, 1); + + if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPta(pix, pta, op); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderPolylineArb() + * + * \param[in] pix any depth; cmapped ok + * \param[in] ptas + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \param[in] closeflag 1 to close the contour; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      This renders a closed contour.
+ * 
+ */ +l_ok +pixRenderPolylineArb(PIX *pix, + PTA *ptas, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_int32 closeflag) +{ +PTA *pta; + + PROCNAME("pixRenderPolylineArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderPolylineBlend() + * + * \param[in] pix 32 bpp rgb + * \param[in] ptas + * \param[in] width thickness of line + * \param[in] rval, gval, bval + * \param[in] fract in [0.0 - 1.0]: 1.0 is no transparency; + * 0.0 is complete transparency (no effect) + * \param[in] closeflag 1 to close the contour; 0 otherwise + * \param[in] removedups 1 to remove; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderPolylineBlend(PIX *pix, + PTA *ptas, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval, + l_float32 fract, + l_int32 closeflag, + l_int32 removedups) +{ +PTA *pta; + + PROCNAME("pixRenderPolylineBlend"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + if ((pta = generatePtaPolyline(ptas, width, closeflag, removedups)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderGridArb() + * + * \param[in] pix any depth, cmapped ok + * \param[in] nx, ny number of rectangles in each direction + * \param[in] width thickness of grid lines + * \param[in] rval, gval, bval + * \return 0 if OK, 1 on error + */ +l_ok +pixRenderGridArb(PIX *pix, + l_int32 nx, + l_int32 ny, + l_int32 width, + l_uint8 rval, + l_uint8 gval, + l_uint8 bval) +{ +l_int32 w, h; +PTA *pta; + + PROCNAME("pixRenderGridArb"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (nx < 1 || ny < 1) + return ERROR_INT("nx, ny must be > 0", procName, 1); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + pixGetDimensions(pix, &w, &h, NULL); + if ((pta = generatePtaGrid(w, h, nx, ny, width)) == NULL) + return ERROR_INT("pta not made", procName, 1); + pixRenderPtaArb(pix, pta, rval, gval, bval); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief pixRenderRandomCmapPtaa() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] ptaa + * \param[in] polyflag 1 to interpret each Pta as a polyline; + * 0 to simply render the Pta as a set of pixels + * \param[in] width thickness of line; use only for polyline + * \param[in] closeflag 1 to close the contour; 0 otherwise; + * use only for polyline mode + * \return pixd cmapped, 8 bpp or NULL on error + * + *
+ * Notes:
+ *      (1) This is a debugging routine, that displays a set of
+ *          pixels, selected by the set of Ptas in a Ptaa,
+ *          in a random color in a pix.
+ *      (2) If %polyflag == 1, each Pta is considered to be a polyline,
+ *          and is rendered using %width and %closeflag.  Each polyline
+ *          is rendered in a random color.
+ *      (3) If %polyflag == 0, all points in each Pta are rendered in a
+ *          random color.  The %width and %closeflag parameters are ignored.
+ *      (4) The output pix is 8 bpp and colormapped.  Up to 254
+ *          different, randomly selected colors, can be used.
+ *      (5) The rendered pixels replace the input pixels.  They will
+ *          be clipped silently to the input pix.
+ * 
+ */ +PIX * +pixRenderRandomCmapPtaa(PIX *pix, + PTAA *ptaa, + l_int32 polyflag, + l_int32 width, + l_int32 closeflag) +{ +l_int32 i, n, index, rval, gval, bval; +PIXCMAP *cmap; +PTA *pta, *ptat; +PIX *pixd; + + PROCNAME("pixRenderRandomCmapPtaa"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + if (!ptaa) + return (PIX *)ERROR_PTR("ptaa not defined", procName, NULL); + if (polyflag != 0 && width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + pixd = pixConvertTo8(pix, FALSE); + cmap = pixcmapCreateRandom(8, 1, 1); + pixSetColormap(pixd, cmap); + + if ((n = ptaaGetCount(ptaa)) == 0) + return pixd; + + for (i = 0; i < n; i++) { + index = 1 + (i % 254); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + pta = ptaaGetPta(ptaa, i, L_CLONE); + if (polyflag) + ptat = generatePtaPolyline(pta, width, closeflag, 0); + else + ptat = ptaClone(pta); + pixRenderPtaArb(pixd, ptat, rval, gval, bval); + ptaDestroy(&pta); + ptaDestroy(&ptat); + } + + return pixd; +} + + + +/*------------------------------------------------------------------* + * Rendering and filling of polygons * + *------------------------------------------------------------------*/ +/*! + * \brief pixRenderPolygon() + * + * \param[in] ptas of vertices, none repeated + * \param[in] width of polygon outline + * \param[out] pxmin [optional] min x value of input pts + * \param[out] pymin [optional] min y value of input pts + * \return pix 1 bpp, with outline generated, or NULL on error + * + *
+ * Notes:
+ *      (1) The pix is the minimum size required to contain the origin
+ *          and the polygon.  For example, the max x value of the input
+ *          points is w - 1, where w is the pix width.
+ *      (2) The rendered line is 4-connected, so that an interior or
+ *          exterior 8-c.c. flood fill operation works properly.
+ * 
+ */ +PIX * +pixRenderPolygon(PTA *ptas, + l_int32 width, + l_int32 *pxmin, + l_int32 *pymin) +{ +l_float32 fxmin, fxmax, fymin, fymax; +PIX *pixd; +PTA *pta1, *pta2; + + PROCNAME("pixRenderPolygon"); + + if (pxmin) *pxmin = 0; + if (pymin) *pymin = 0; + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + + /* Generate a 4-connected polygon line */ + if ((pta1 = generatePtaPolyline(ptas, width, 1, 0)) == NULL) + return (PIX *)ERROR_PTR("pta1 not made", procName, NULL); + if (width < 2) + pta2 = convertPtaLineTo4cc(pta1); + else + pta2 = ptaClone(pta1); + + /* Render onto a minimum-sized pix */ + ptaGetRange(pta2, &fxmin, &fxmax, &fymin, &fymax); + if (pxmin) *pxmin = (l_int32)(fxmin + 0.5); + if (pymin) *pymin = (l_int32)(fymin + 0.5); + pixd = pixCreate((l_int32)(fxmax + 0.5) + 1, (l_int32)(fymax + 0.5) + 1, 1); + pixRenderPolyline(pixd, pta2, width, L_SET_PIXELS, 1); + ptaDestroy(&pta1); + ptaDestroy(&pta2); + return pixd; +} + + +/*! + * \brief pixFillPolygon() + * + * \param[in] pixs 1 bpp, with 4-connected polygon outline + * \param[in] pta vertices of the polygon + * \param[in] xmin, ymin min values of vertices of polygon + * \return pixd with outline filled, or NULL on error + * + *
+ * Notes:
+ *      (1) This fills the interior of the polygon, returning a
+ *          new pix.  It works for both convex and non-convex polygons.
+ *      (2) To generate a filled polygon from %pta:
+ *            PIX *pixt = pixRenderPolygon(pta, 1, &xmin, &ymin);
+ *            PIX *pixd = pixFillPolygon(pixt, pta, xmin, ymin);
+ *            pixDestroy(&pixt);
+ * 
+ */ +PIX * +pixFillPolygon(PIX *pixs, + PTA *pta, + l_int32 xmin, + l_int32 ymin) +{ +l_int32 w, h, i, n, inside, found; +l_int32 *xstart, *xend; +PIX *pixi, *pixd; + + PROCNAME("pixFillPolygon"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!pta) + return (PIX *)ERROR_PTR("pta not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + xstart = (l_int32 *)LEPT_CALLOC(w / 2, sizeof(l_int32)); + xend = (l_int32 *)LEPT_CALLOC(w / 2, sizeof(l_int32)); + + /* Find a raster with 2 or more black runs. The first background + * pixel after the end of the first run is likely to be inside + * the polygon, and can be used as a seed pixel. */ + found = FALSE; + for (i = ymin + 1; i < h; i++) { + pixFindHorizontalRuns(pixs, i, xstart, xend, &n); + if (n > 1) { + ptaPtInsidePolygon(pta, xend[0] + 1, i, &inside); + if (inside) { + found = TRUE; + break; + } + } + } + if (!found) { + L_WARNING("nothing found to fill\n", procName); + LEPT_FREE(xstart); + LEPT_FREE(xend); + return 0; + } + + /* Place the seed pixel in the output image */ + pixd = pixCreateTemplate(pixs); + pixSetPixel(pixd, xend[0] + 1, i, 1); + + /* Invert pixs to make a filling mask, and fill from the seed */ + pixi = pixInvert(NULL, pixs); + pixSeedfillBinary(pixd, pixd, pixi, 4); + + /* Add the pixels of the original polygon outline */ + pixOr(pixd, pixd, pixs); + + pixDestroy(&pixi); + LEPT_FREE(xstart); + LEPT_FREE(xend); + return pixd; +} + + +/*------------------------------------------------------------------* + * Contour rendering on grayscale images * + *------------------------------------------------------------------*/ +/*! + * \brief pixRenderContours() + * + * \param[in] pixs 8 or 16 bpp; no colormap + * \param[in] startval value of lowest contour; must be in [0 ... maxval] + * \param[in] incr increment to next contour; must be > 0 + * \param[in] outdepth either 1 or depth of pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The output can be either 1 bpp, showing just the contour
+ *          lines, or a copy of the input pixs with the contour lines
+ *          superposed.
+ * 
+ */ +PIX * +pixRenderContours(PIX *pixs, + l_int32 startval, + l_int32 incr, + l_int32 outdepth) +{ +l_int32 w, h, d, maxval, wpls, wpld, i, j, val, test; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixRenderContours"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16) + return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); + if (outdepth != 1 && outdepth != d) { + L_WARNING("invalid outdepth; setting to 1\n", procName); + outdepth = 1; + } + maxval = (1 << d) - 1; + if (startval < 0 || startval > maxval) + return (PIX *)ERROR_PTR("startval not in [0 ... maxval]", + procName, NULL); + if (incr < 1) + return (PIX *)ERROR_PTR("incr < 1", procName, NULL); + + if (outdepth == d) + pixd = pixCopy(NULL, pixs); + else + pixd = pixCreate(w, h, 1); + + pixCopyResolution(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + switch (d) + { + case 8: + if (outdepth == 1) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + if (val < startval) + continue; + test = (val - startval) % incr; + if (!test) + SET_DATA_BIT(lined, j); + } + } + } else { /* outdepth == d */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + if (val < startval) + continue; + test = (val - startval) % incr; + if (!test) + SET_DATA_BYTE(lined, j, 0); + } + } + } + break; + + case 16: + if (outdepth == 1) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_TWO_BYTES(lines, j); + if (val < startval) + continue; + test = (val - startval) % incr; + if (!test) + SET_DATA_BIT(lined, j); + } + } + } else { /* outdepth == d */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_TWO_BYTES(lines, j); + if (val < startval) + continue; + test = (val - startval) % incr; + if (!test) + SET_DATA_TWO_BYTES(lined, j, 0); + } + } + } + break; + + default: + return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); + } + + return pixd; +} + + +/*! + * \brief fpixAutoRenderContours() + * + * \param[in] fpix + * \param[in] ncontours in [2 ... 500]; typically about 50 + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) The increment is set to get approximately %ncontours.
+ *      (2) The proximity to the target value for contour display
+ *          is set to 0.15.
+ *      (3) Negative values are rendered in red; positive values as black.
+ * 
+ */ +PIX * +fpixAutoRenderContours(FPIX *fpix, + l_int32 ncontours) +{ +l_float32 minval, maxval, incr; + + PROCNAME("fpixAutoRenderContours"); + + if (!fpix) + return (PIX *)ERROR_PTR("fpix not defined", procName, NULL); + if (ncontours < 2 || ncontours > 500) + return (PIX *)ERROR_PTR("ncontours < 2 or > 500", procName, NULL); + + fpixGetMin(fpix, &minval, NULL, NULL); + fpixGetMax(fpix, &maxval, NULL, NULL); + if (minval == maxval) + return (PIX *)ERROR_PTR("all values in fpix are equal", procName, NULL); + incr = (maxval - minval) / ((l_float32)ncontours - 1); + return fpixRenderContours(fpix, incr, 0.15); +} + + +/*! + * \brief fpixRenderContours() + * + * \param[in] fpixs + * \param[in] incr increment between contours; must be > 0.0 + * \param[in] proxim required proximity to target value; default 0.15 + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Values are displayed when val/incr is within +-proxim
+ *          to an integer.  The default value is 0.15; smaller values
+ *          result in thinner contour lines.
+ *      (2) Negative values are rendered in red; positive values as black.
+ * 
+ */ +PIX * +fpixRenderContours(FPIX *fpixs, + l_float32 incr, + l_float32 proxim) +{ +l_int32 i, j, w, h, wpls, wpld; +l_float32 val, invincr, finter, above, below, diff; +l_uint32 *datad, *lined; +l_float32 *datas, *lines; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("fpixRenderContours"); + + if (!fpixs) + return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); + if (incr <= 0.0) + return (PIX *)ERROR_PTR("incr <= 0.0", procName, NULL); + if (proxim <= 0.0) + proxim = 0.15; /* default */ + + fpixGetDimensions(fpixs, &w, &h); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(8); + pixSetColormap(pixd, cmap); + pixcmapAddColor(cmap, 255, 255, 255); /* white */ + pixcmapAddColor(cmap, 0, 0, 0); /* black */ + pixcmapAddColor(cmap, 255, 0, 0); /* red */ + + datas = fpixGetData(fpixs); + wpls = fpixGetWpl(fpixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + invincr = 1.0 / incr; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j]; + finter = invincr * val; + above = finter - floorf(finter); + below = ceilf(finter) - finter; + diff = L_MIN(above, below); + if (diff <= proxim) { + if (val < 0.0) + SET_DATA_BYTE(lined, j, 2); + else + SET_DATA_BYTE(lined, j, 1); + } + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Boundary pt generation on 1 bpp images * + *------------------------------------------------------------------*/ +/*! + * \brief pixGeneratePtaBoundary() + * + * \param[in] pixs 1 bpp + * \param[in] width of boundary line + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Similar to ptaGetBoundaryPixels(), except here:
+ *          * we only get pixels in the foreground
+ *          * we can have a "line" width greater than 1 pixel.
+ *      (2) Once generated, this can be applied to a random 1 bpp image
+ *          to add a color boundary as follows:
+ *             Pta *pta = pixGeneratePtaBoundary(pixs, width);
+ *             Pix *pix1 = pixConvert1To8Cmap(pixs);
+ *             pixRenderPtaArb(pix1, pta, rval, gval, bval);
+ * 
+ */ +PTA * +pixGeneratePtaBoundary(PIX *pixs, + l_int32 width) +{ +PIX *pix1; +PTA *pta; + + PROCNAME("pixGeneratePtaBoundary"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (width < 1) { + L_WARNING("width < 1; setting to 1\n", procName); + width = 1; + } + + pix1 = pixErodeBrick(NULL, pixs, 2 * width + 1, 2 * width + 1); + pixXor(pix1, pix1, pixs); + pta = ptaGetPixelsFromPix(pix1, NULL); + pixDestroy(&pix1); + return pta; +} diff --git a/3rdparty/hgOCR/leptonica/graymorph.c b/3rdparty/hgOCR/leptonica/graymorph.c new file mode 100644 index 00000000..c2e33035 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/graymorph.c @@ -0,0 +1,1372 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file graymorph.c + *
+ *
+ *      Top-level grayscale morphological operations (van Herk / Gil-Werman)
+ *            PIX           *pixErodeGray()
+ *            PIX           *pixDilateGray()
+ *            PIX           *pixOpenGray()
+ *            PIX           *pixCloseGray()
+ *
+ *      Special operations for 1x3, 3x1 and 3x3 Sels  (direct)
+ *            PIX           *pixErodeGray3()
+ *            static PIX    *pixErodeGray3h()
+ *            static PIX    *pixErodeGray3v()
+ *            PIX           *pixDilateGray3()
+ *            static PIX    *pixDilateGray3h()
+ *            static PIX    *pixDilateGray3v()
+ *            PIX           *pixOpenGray3()
+ *            PIX           *pixCloseGray3()
+ *
+ *      Low-level grayscale morphological operations
+ *            static void    dilateGrayLow()
+ *            static void    erodeGrayLow()
+ *
+ *
+ *      Method: Algorithm by van Herk and Gil and Werman, 1992
+ *
+ *      Measured speed of the vH/G-W implementation is about 1 output
+ *      pixel per 120 PIII clock cycles, for a horizontal or vertical
+ *      erosion or dilation.  The computation time doubles for opening
+ *      or closing, or for a square SE, as expected, and is independent
+ *      of the size of the SE.
+ *
+ *      A faster implementation can be made directly for brick Sels
+ *      of maximum size 3.  We unroll the computation for sets of 8 bytes.
+ *      It needs to be called explicitly; the general functions do not
+ *      default for the size 3 brick Sels.
+ *
+ *      We use the van Herk/Gil-Werman (vHGW) algorithm, [van Herk,
+ *      Patt. Recog. Let. 13, pp. 517-521, 1992; Gil and Werman,
+ *      IEEE Trans PAMI 15(5), pp. 504-507, 1993.]
+ *      This was the first grayscale morphology
+ *      algorithm to compute dilation and erosion with
+ *      complexity independent of the size of the structuring
+ *      element.  It is simple and elegant, and surprising that
+ *      it was discovered as recently as 1992.  It works for
+ *      SEs composed of horizontal and/or vertical lines.  The
+ *      general case requires finding the Min or Max over an
+ *      arbitrary set of pixels, and this requires a number of
+ *      pixel comparisons equal to the SE "size" at each pixel
+ *      in the image.  The vHGW algorithm requires not
+ *      more than 3 comparisons at each point.  The algorithm has been
+ *      recently refined by Gil and Kimmel ("Efficient Dilation
+ *      Erosion, Opening and Closing Algorithms", in "Mathematical
+ *      Morphology and its Applications to Image and Signal Processing",
+ *      the proceedings of the International Symposium on Mathematical
+ *      Morphology, Palo Alto, CA, June 2000, Kluwer Academic
+ *      Publishers, pp. 301-310).  They bring this number down below
+ *      1.5 comparisons per output pixel but at a cost of significantly
+ *      increased complexity, so I don't bother with that here.
+ *
+ *      In brief, the method is as follows.  We evaluate the dilation
+ *      in groups of "size" pixels, equal to the size of the SE.
+ *      For horizontal, we start at x = "size"/2 and go
+ *      (w - 2 * ("size"/2))/"size" steps.  This means that
+ *      we don't evaluate the first 0.5 * "size" pixels and, worst
+ *      case, the last 1.5 * "size" pixels.  Thus we embed the
+ *      image in a larger image with these augmented dimensions, where
+ *      the new border pixels are appropriately initialized (0 for
+ *      dilation; 255 for erosion), and remove the boundary at the end.
+ *      (For vertical, use h instead of w.)   Then for each group
+ *      of "size" pixels, we form an array of length 2 * "size" + 1,
+ *      consisting of backward and forward partial maxima (for
+ *      dilation) or minima (for erosion).  This represents a
+ *      jumping window computed from the source image, over which
+ *      the SE will slide.  The center of the array gets the source
+ *      pixel at the center of the SE.  Call this the center pixel
+ *      of the window.  Array values to left of center get
+ *      the maxima(minima) of the pixels from the center
+ *      one and going to the left an equal distance.  Array
+ *      values to the right of center get the maxima(minima) to
+ *      the pixels from the center one and going to the right
+ *      an equal distance.  These are computed sequentially starting
+ *      from the center one.  The SE (of length "size") can slide over this
+ *      window (of length 2 * "size + 1) at "size" different places.
+ *      At each place, the maxima(minima) of the values in the window
+ *      that correspond to the end points of the SE give the extremal
+ *      values over that interval, and these are stored at the dest
+ *      pixel corresponding to the SE center.  A picture is worth
+ *      at least this many words, so if this isn't clear, see the
+ *      leptonica documentation on grayscale morphology.
+ * 
+ */ + +#include "allheaders.h" + + /* Special static operations for 3x1, 1x3 and 3x3 structuring elements */ +static PIX *pixErodeGray3h(PIX *pixs); +static PIX *pixErodeGray3v(PIX *pixs); +static PIX *pixDilateGray3h(PIX *pixs); +static PIX *pixDilateGray3v(PIX *pixs); + + /* Low-level gray morphological operations */ +static void dilateGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_int32 size, l_int32 direction, l_uint8 *buffer, + l_uint8 *maxarray); +static void erodeGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_int32 size, l_int32 direction, l_uint8 *buffer, + l_uint8 *minarray); + +/*-----------------------------------------------------------------* + * Top-level grayscale morphological operations * + *-----------------------------------------------------------------*/ +/*! + * \brief pixErodeGray() + * + * \param[in] pixs + * \param[in] hsize of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixErodeGray(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_uint8 *buffer, *minarray; +l_int32 w, h, wplb, wplt; +l_int32 leftpix, rightpix, toppix, bottompix, maxsize; +l_uint32 *datab, *datat; +PIX *pixb, *pixt, *pixd; + + PROCNAME("pixErodeGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + pixb = pixt = pixd = NULL; + buffer = minarray = NULL; + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + if (vsize == 1) { /* horizontal sel */ + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = 0; + bottompix = 0; + } else if (hsize == 1) { /* vertical sel */ + leftpix = 0; + rightpix = 0; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } else { + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } + + pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255); + pixt = pixCreateTemplate(pixb); + if (!pixb || !pixt) { + L_ERROR("pixb and pixt not made\n", procName); + goto cleanup; + } + + pixGetDimensions(pixt, &w, &h, NULL); + datab = pixGetData(pixb); + datat = pixGetData(pixt); + wplb = pixGetWpl(pixb); + wplt = pixGetWpl(pixt); + + buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); + maxsize = L_MAX(hsize, vsize); + minarray = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); + if (!buffer || !minarray) { + L_ERROR("buffer and minarray not made\n", procName); + goto cleanup; + } + + if (vsize == 1) { + erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, minarray); + } else if (hsize == 1) { + erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, + buffer, minarray); + } else { + erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, minarray); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, minarray); + pixDestroy(&pixt); + pixt = pixClone(pixb); + } + + pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix); + if (!pixd) + L_ERROR("pixd not made\n", procName); + +cleanup: + LEPT_FREE(buffer); + LEPT_FREE(minarray); + pixDestroy(&pixb); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixDilateGray() + * + * \param[in] pixs + * \param[in] hsize of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixDilateGray(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_uint8 *buffer, *maxarray; +l_int32 w, h, wplb, wplt; +l_int32 leftpix, rightpix, toppix, bottompix, maxsize; +l_uint32 *datab, *datat; +PIX *pixb, *pixt, *pixd; + + PROCNAME("pixDilateGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + pixb = pixt = pixd = NULL; + buffer = maxarray = NULL; + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + if (vsize == 1) { /* horizontal sel */ + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = 0; + bottompix = 0; + } else if (hsize == 1) { /* vertical sel */ + leftpix = 0; + rightpix = 0; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } else { + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } + + pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0); + pixt = pixCreateTemplate(pixb); + if (!pixb || !pixt) { + L_ERROR("pixb and pixt not made\n", procName); + goto cleanup; + } + + pixGetDimensions(pixt, &w, &h, NULL); + datab = pixGetData(pixb); + datat = pixGetData(pixt); + wplb = pixGetWpl(pixb); + wplt = pixGetWpl(pixt); + + buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); + maxsize = L_MAX(hsize, vsize); + maxarray = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); + if (!buffer || !maxarray) { + L_ERROR("buffer and maxarray not made\n", procName); + goto cleanup; + } + + if (vsize == 1) { + dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, maxarray); + } else if (hsize == 1) { + dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, + buffer, maxarray); + } else { + dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, maxarray); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, maxarray); + pixDestroy(&pixt); + pixt = pixClone(pixb); + } + + pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix); + if (!pixd) + L_ERROR("pixd not made\n", procName); + +cleanup: + LEPT_FREE(buffer); + LEPT_FREE(maxarray); + pixDestroy(&pixb); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixOpenGray() + * + * \param[in] pixs + * \param[in] hsize of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixOpenGray(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_uint8 *buffer; +l_uint8 *array; /* used to find either min or max in interval */ +l_int32 w, h, wplb, wplt; +l_int32 leftpix, rightpix, toppix, bottompix, maxsize; +l_uint32 *datab, *datat; +PIX *pixb, *pixt, *pixd; + + PROCNAME("pixOpenGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + pixb = pixt = pixd = NULL; + buffer = array = NULL; + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + if (vsize == 1) { /* horizontal sel */ + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = 0; + bottompix = 0; + } else if (hsize == 1) { /* vertical sel */ + leftpix = 0; + rightpix = 0; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } else { + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } + + pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255); + pixt = pixCreateTemplate(pixb); + if (!pixb || !pixt) { + L_ERROR("pixb and pixt not made\n", procName); + goto cleanup; + } + + pixGetDimensions(pixt, &w, &h, NULL); + datab = pixGetData(pixb); + datat = pixGetData(pixt); + wplb = pixGetWpl(pixb); + wplt = pixGetWpl(pixt); + + buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); + maxsize = L_MAX(hsize, vsize); + array = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); + if (!buffer || !array) { + L_ERROR("buffer and array not made\n", procName); + goto cleanup; + } + + if (vsize == 1) { + erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, + buffer, array); + } + else if (hsize == 1) { + erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + } else { + erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + } + + pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix); + if (!pixd) + L_ERROR("pixd not made\n", procName); + +cleanup: + LEPT_FREE(buffer); + LEPT_FREE(array); + pixDestroy(&pixb); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixCloseGray() + * + * \param[in] pixs + * \param[in] hsize of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixCloseGray(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_uint8 *buffer; +l_uint8 *array; /* used to find either min or max in interval */ +l_int32 w, h, wplb, wplt; +l_int32 leftpix, rightpix, toppix, bottompix, maxsize; +l_uint32 *datab, *datat; +PIX *pixb, *pixt, *pixd; + + PROCNAME("pixCloseGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + pixb = pixt = pixd = NULL; + buffer = array = NULL; + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + if (vsize == 1) { /* horizontal sel */ + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = 0; + bottompix = 0; + } else if (hsize == 1) { /* vertical sel */ + leftpix = 0; + rightpix = 0; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } else { + leftpix = (hsize + 1) / 2; + rightpix = (3 * hsize + 1) / 2; + toppix = (vsize + 1) / 2; + bottompix = (3 * vsize + 1) / 2; + } + + pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0); + pixt = pixCreateTemplate(pixb); + if (!pixb || !pixt) { + L_ERROR("pixb and pixt not made\n", procName); + goto cleanup; + } + + pixGetDimensions(pixt, &w, &h, NULL); + datab = pixGetData(pixb); + datat = pixGetData(pixt); + wplb = pixGetWpl(pixb); + wplt = pixGetWpl(pixt); + + buffer = (l_uint8 *)LEPT_CALLOC(L_MAX(w, h), sizeof(l_uint8)); + maxsize = L_MAX(hsize, vsize); + array = (l_uint8 *)LEPT_CALLOC(2 * maxsize, sizeof(l_uint8)); + if (!buffer || !array) { + L_ERROR("buffer and array not made\n", procName); + goto cleanup; + } + + if (vsize == 1) { + dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, + buffer, array); + } else if (hsize == 1) { + dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + } else { + dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_CLR); + dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, + buffer, array); + pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, + PIX_SET); + erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, + buffer, array); + } + + pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix); + if (!pixd) + L_ERROR("pixd not made\n", procName); + +cleanup: + LEPT_FREE(buffer); + LEPT_FREE(array); + pixDestroy(&pixb); + pixDestroy(&pixt); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Special operations for 1x3, 3x1 and 3x3 Sels * + *-----------------------------------------------------------------*/ +/*! + * \brief pixErodeGray3() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] hsize 1 or 3 + * \param[in] vsize 1 or 3 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ *      (3) It would be nice not to add a border, but it is required
+ *          if we want the same results as from the general case.
+ *          We add 4 bytes on the left to speed up the copying, and
+ *          8 bytes at the right and bottom to allow unrolling of
+ *          the computation of 8 pixels.
+ * 
+ */ +PIX * +pixErodeGray3(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt, *pixb, *pixbd, *pixd; + + PROCNAME("pixErodeGray3"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); + if ((hsize != 1 && hsize != 3) || + (vsize != 1 && vsize != 3)) + return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); + + if (vsize == 1) + pixbd = pixErodeGray3h(pixb); + else if (hsize == 1) + pixbd = pixErodeGray3v(pixb); + else { /* vize == hsize == 3 */ + pixt = pixErodeGray3h(pixb); + pixbd = pixErodeGray3v(pixt); + pixDestroy(&pixt); + } + + pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); + pixDestroy(&pixb); + pixDestroy(&pixbd); + return pixd; +} + + +/*! + * \brief pixErodeGray3h() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for horizontal 3x1 brick Sel;
+ *          also used as the first step for the 3x3 brick Sel.
+ * 
+ */ +static PIX * +pixErodeGray3h(PIX *pixs) +{ +l_uint32 *datas, *datad, *lines, *lined; +l_int32 w, h, wpl, i, j; +l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; +PIX *pixd; + + PROCNAME("pixErodeGray3h"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpl; + lined = datad + i * wpl; + for (j = 1; j < w - 8; j += 8) { + val0 = GET_DATA_BYTE(lines, j - 1); + val1 = GET_DATA_BYTE(lines, j); + val2 = GET_DATA_BYTE(lines, j + 1); + val3 = GET_DATA_BYTE(lines, j + 2); + val4 = GET_DATA_BYTE(lines, j + 3); + val5 = GET_DATA_BYTE(lines, j + 4); + val6 = GET_DATA_BYTE(lines, j + 5); + val7 = GET_DATA_BYTE(lines, j + 6); + val8 = GET_DATA_BYTE(lines, j + 7); + val9 = GET_DATA_BYTE(lines, j + 8); + minval = L_MIN(val1, val2); + SET_DATA_BYTE(lined, j, L_MIN(val0, minval)); + SET_DATA_BYTE(lined, j + 1, L_MIN(minval, val3)); + minval = L_MIN(val3, val4); + SET_DATA_BYTE(lined, j + 2, L_MIN(val2, minval)); + SET_DATA_BYTE(lined, j + 3, L_MIN(minval, val5)); + minval = L_MIN(val5, val6); + SET_DATA_BYTE(lined, j + 4, L_MIN(val4, minval)); + SET_DATA_BYTE(lined, j + 5, L_MIN(minval, val7)); + minval = L_MIN(val7, val8); + SET_DATA_BYTE(lined, j + 6, L_MIN(val6, minval)); + SET_DATA_BYTE(lined, j + 7, L_MIN(minval, val9)); + } + } + return pixd; +} + + +/*! + * \brief pixErodeGray3v() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for vertical 1x3 brick Sel;
+ *          also used as the second step for the 3x3 brick Sel.
+ *      (2) Surprisingly, this is faster than setting up the
+ *          lineptrs array and accessing into it; e.g.,
+ *              val4 = GET_DATA_BYTE(lines8[i + 3], j);
+ * 
+ */ +static PIX * +pixErodeGray3v(PIX *pixs) +{ +l_uint32 *datas, *datad, *linesi, *linedi; +l_int32 w, h, wpl, i, j; +l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; +PIX *pixd; + + PROCNAME("pixErodeGray3v"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpl = pixGetWpl(pixs); + for (j = 0; j < w; j++) { + for (i = 1; i < h - 8; i += 8) { + linesi = datas + i * wpl; + linedi = datad + i * wpl; + val0 = GET_DATA_BYTE(linesi - wpl, j); + val1 = GET_DATA_BYTE(linesi, j); + val2 = GET_DATA_BYTE(linesi + wpl, j); + val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); + val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); + val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); + val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); + val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); + val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); + val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); + minval = L_MIN(val1, val2); + SET_DATA_BYTE(linedi, j, L_MIN(val0, minval)); + SET_DATA_BYTE(linedi + wpl, j, L_MIN(minval, val3)); + minval = L_MIN(val3, val4); + SET_DATA_BYTE(linedi + 2 * wpl, j, L_MIN(val2, minval)); + SET_DATA_BYTE(linedi + 3 * wpl, j, L_MIN(minval, val5)); + minval = L_MIN(val5, val6); + SET_DATA_BYTE(linedi + 4 * wpl, j, L_MIN(val4, minval)); + SET_DATA_BYTE(linedi + 5 * wpl, j, L_MIN(minval, val7)); + minval = L_MIN(val7, val8); + SET_DATA_BYTE(linedi + 6 * wpl, j, L_MIN(val6, minval)); + SET_DATA_BYTE(linedi + 7 * wpl, j, L_MIN(minval, val9)); + } + } + return pixd; +} + + +/*! + * \brief pixDilateGray3() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] hsize 1 or 3 + * \param[in] vsize 1 or 3 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixDilateGray3(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt, *pixb, *pixbd, *pixd; + + PROCNAME("pixDilateGray3"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); + if ((hsize != 1 && hsize != 3) || + (vsize != 1 && vsize != 3)) + return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); + + if (vsize == 1) + pixbd = pixDilateGray3h(pixb); + else if (hsize == 1) + pixbd = pixDilateGray3v(pixb); + else { /* vize == hsize == 3 */ + pixt = pixDilateGray3h(pixb); + pixbd = pixDilateGray3v(pixt); + pixDestroy(&pixt); + } + + pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); + pixDestroy(&pixb); + pixDestroy(&pixbd); + return pixd; +} + + +/*! + * \brief pixDilateGray3h() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for horizontal 3x1 brick Sel;
+ *          also used as the first step for the 3x3 brick Sel.
+ * 
+ */ +static PIX * +pixDilateGray3h(PIX *pixs) +{ +l_uint32 *datas, *datad, *lines, *lined; +l_int32 w, h, wpl, i, j; +l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; +PIX *pixd; + + PROCNAME("pixDilateGray3h"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + lines = datas + i * wpl; + lined = datad + i * wpl; + for (j = 1; j < w - 8; j += 8) { + val0 = GET_DATA_BYTE(lines, j - 1); + val1 = GET_DATA_BYTE(lines, j); + val2 = GET_DATA_BYTE(lines, j + 1); + val3 = GET_DATA_BYTE(lines, j + 2); + val4 = GET_DATA_BYTE(lines, j + 3); + val5 = GET_DATA_BYTE(lines, j + 4); + val6 = GET_DATA_BYTE(lines, j + 5); + val7 = GET_DATA_BYTE(lines, j + 6); + val8 = GET_DATA_BYTE(lines, j + 7); + val9 = GET_DATA_BYTE(lines, j + 8); + maxval = L_MAX(val1, val2); + SET_DATA_BYTE(lined, j, L_MAX(val0, maxval)); + SET_DATA_BYTE(lined, j + 1, L_MAX(maxval, val3)); + maxval = L_MAX(val3, val4); + SET_DATA_BYTE(lined, j + 2, L_MAX(val2, maxval)); + SET_DATA_BYTE(lined, j + 3, L_MAX(maxval, val5)); + maxval = L_MAX(val5, val6); + SET_DATA_BYTE(lined, j + 4, L_MAX(val4, maxval)); + SET_DATA_BYTE(lined, j + 5, L_MAX(maxval, val7)); + maxval = L_MAX(val7, val8); + SET_DATA_BYTE(lined, j + 6, L_MAX(val6, maxval)); + SET_DATA_BYTE(lined, j + 7, L_MAX(maxval, val9)); + } + } + return pixd; +} + + +/*! + * \brief pixDilateGray3v() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for vertical 1x3 brick Sel;
+ *          also used as the second step for the 3x3 brick Sel.
+ * 
+ */ +static PIX * +pixDilateGray3v(PIX *pixs) +{ +l_uint32 *datas, *datad, *linesi, *linedi; +l_int32 w, h, wpl, i, j; +l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; +PIX *pixd; + + PROCNAME("pixDilateGray3v"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpl = pixGetWpl(pixs); + for (j = 0; j < w; j++) { + for (i = 1; i < h - 8; i += 8) { + linesi = datas + i * wpl; + linedi = datad + i * wpl; + val0 = GET_DATA_BYTE(linesi - wpl, j); + val1 = GET_DATA_BYTE(linesi, j); + val2 = GET_DATA_BYTE(linesi + wpl, j); + val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); + val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); + val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); + val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); + val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); + val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); + val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); + maxval = L_MAX(val1, val2); + SET_DATA_BYTE(linedi, j, L_MAX(val0, maxval)); + SET_DATA_BYTE(linedi + wpl, j, L_MAX(maxval, val3)); + maxval = L_MAX(val3, val4); + SET_DATA_BYTE(linedi + 2 * wpl, j, L_MAX(val2, maxval)); + SET_DATA_BYTE(linedi + 3 * wpl, j, L_MAX(maxval, val5)); + maxval = L_MAX(val5, val6); + SET_DATA_BYTE(linedi + 4 * wpl, j, L_MAX(val4, maxval)); + SET_DATA_BYTE(linedi + 5 * wpl, j, L_MAX(maxval, val7)); + maxval = L_MAX(val7, val8); + SET_DATA_BYTE(linedi + 6 * wpl, j, L_MAX(val6, maxval)); + SET_DATA_BYTE(linedi + 7 * wpl, j, L_MAX(maxval, val9)); + } + } + return pixd; +} + + +/*! + * \brief pixOpenGray3() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] hsize 1 or 3 + * \param[in] vsize 1 or 3 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ *      (3) It would be nice not to add a border, but it is required
+ *          to get the same results as for the general case.
+ * 
+ */ +PIX * +pixOpenGray3(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt, *pixb, *pixbd, *pixd; + + PROCNAME("pixOpenGray3"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); + if ((hsize != 1 && hsize != 3) || + (vsize != 1 && vsize != 3)) + return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); /* set to max */ + + if (vsize == 1) { + pixt = pixErodeGray3h(pixb); + pixSetBorderVal(pixt, 4, 8, 2, 8, 0); /* set to min */ + pixbd = pixDilateGray3h(pixt); + pixDestroy(&pixt); + } else if (hsize == 1) { + pixt = pixErodeGray3v(pixb); + pixSetBorderVal(pixt, 4, 8, 2, 8, 0); + pixbd = pixDilateGray3v(pixt); + pixDestroy(&pixt); + } else { /* vize == hsize == 3 */ + pixt = pixErodeGray3h(pixb); + pixbd = pixErodeGray3v(pixt); + pixDestroy(&pixt); + pixSetBorderVal(pixbd, 4, 8, 2, 8, 0); + pixt = pixDilateGray3h(pixbd); + pixDestroy(&pixbd); + pixbd = pixDilateGray3v(pixt); + pixDestroy(&pixt); + } + + pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); + pixDestroy(&pixb); + pixDestroy(&pixbd); + return pixd; +} + + +/*! + * \brief pixCloseGray3() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] hsize 1 or 3 + * \param[in] vsize 1 or 3 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits)
+ *      (2) If hsize = vsize = 1, just returns a copy.
+ * 
+ */ +PIX * +pixCloseGray3(PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt, *pixb, *pixbd, *pixd; + + PROCNAME("pixCloseGray3"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); + if ((hsize != 1 && hsize != 3) || + (vsize != 1 && vsize != 3)) + return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); + + if (hsize == 1 && vsize == 1) + return pixCopy(NULL, pixs); + + pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); /* set to min */ + + if (vsize == 1) { + pixt = pixDilateGray3h(pixb); + pixSetBorderVal(pixt, 4, 8, 2, 8, 255); /* set to max */ + pixbd = pixErodeGray3h(pixt); + pixDestroy(&pixt); + } else if (hsize == 1) { + pixt = pixDilateGray3v(pixb); + pixSetBorderVal(pixt, 4, 8, 2, 8, 255); + pixbd = pixErodeGray3v(pixt); + pixDestroy(&pixt); + } else { /* vize == hsize == 3 */ + pixt = pixDilateGray3h(pixb); + pixbd = pixDilateGray3v(pixt); + pixDestroy(&pixt); + pixSetBorderVal(pixbd, 4, 8, 2, 8, 255); + pixt = pixErodeGray3h(pixbd); + pixDestroy(&pixbd); + pixbd = pixErodeGray3v(pixt); + pixDestroy(&pixt); + } + + pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); + pixDestroy(&pixb); + pixDestroy(&pixbd); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Low-level gray morphological operations * + *-----------------------------------------------------------------*/ +/*! + * \brief dilateGrayLow() + * + * \param[in] datad 8 bpp dsst image + * \param[in] w, h dimensions of src and dest + * \param[in] wpld words/line of dest + * \param[in] datas 8 bpp src image + * \param[in] wpls words/line of src + * \param[in] size full length of SEL; restricted to odd numbers + * \param[in] direction L_HORIZ or L_VERT + * \param[in] buffer holds full line or column of src image pixels + * \param[in] maxarray array of dimension 2*size+1 + * \return void + * + *
+ * Notes:
+ *        (1) To eliminate border effects on the actual image, these images
+ *            are prepared with an additional border of dimensions:
+ *               leftpix = 0.5 * size
+ *               rightpix = 1.5 * size
+ *               toppix = 0.5 * size
+ *               bottompix = 1.5 * size
+ *            and we initialize the src border pixels to 0.
+ *            This allows full processing over the actual image; at
+ *            the end the border is removed.
+ *        (2) Uses algorithm of van Herk, Gil and Werman
+ * 
+ */ +static void +dilateGrayLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 size, + l_int32 direction, + l_uint8 *buffer, + l_uint8 *maxarray) +{ +l_int32 i, j, k; +l_int32 hsize, nsteps, startmax, startx, starty; +l_uint8 maxval; +l_uint32 *lines, *lined; + + if (direction == L_HORIZ) { + hsize = size / 2; + nsteps = (w - 2 * hsize) / size; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + + /* fill buffer with pixels in byte order */ + for (j = 0; j < w; j++) + buffer[j] = GET_DATA_BYTE(lines, j); + + for (j = 0; j < nsteps; j++) { + /* refill the minarray */ + startmax = (j + 1) * size - 1; + maxarray[size - 1] = buffer[startmax]; + for (k = 1; k < size; k++) { + maxarray[size - 1 - k] = + L_MAX(maxarray[size - k], buffer[startmax - k]); + maxarray[size - 1 + k] = + L_MAX(maxarray[size + k - 2], buffer[startmax + k]); + } + + /* compute dilation values */ + startx = hsize + j * size; + SET_DATA_BYTE(lined, startx, maxarray[0]); + SET_DATA_BYTE(lined, startx + size - 1, maxarray[2 * size - 2]); + for (k = 1; k < size - 1; k++) { + maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); + SET_DATA_BYTE(lined, startx + k, maxval); + } + } + } + } else { /* direction == L_VERT */ + hsize = size / 2; + nsteps = (h - 2 * hsize) / size; + for (j = 0; j < w; j++) { + /* fill buffer with pixels in byte order */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + buffer[i] = GET_DATA_BYTE(lines, j); + } + + for (i = 0; i < nsteps; i++) { + /* refill the minarray */ + startmax = (i + 1) * size - 1; + maxarray[size - 1] = buffer[startmax]; + for (k = 1; k < size; k++) { + maxarray[size - 1 - k] = + L_MAX(maxarray[size - k], buffer[startmax - k]); + maxarray[size - 1 + k] = + L_MAX(maxarray[size + k - 2], buffer[startmax + k]); + } + + /* compute dilation values */ + starty = hsize + i * size; + lined = datad + starty * wpld; + SET_DATA_BYTE(lined, j, maxarray[0]); + SET_DATA_BYTE(lined + (size - 1) * wpld, j, + maxarray[2 * size - 2]); + for (k = 1; k < size - 1; k++) { + maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); + SET_DATA_BYTE(lined + wpld * k, j, maxval); + } + } + } + } + + return; +} + + +/*! + * \brief erodeGrayLow() + * + * \param[in] datad 8 bpp dsst image + * \param[in] w, h dimensions of src and dest + * \param[in] wpld words/line of dest + * \param[in] datas 8 bpp src image + * \param[in] wpls words/line of src + * \param[in] size full length of SEL; restricted to odd numbers + * \param[in] direction L_HORIZ or L_VERT + * \param[in] buffer holds full line or column of src image pixels + * \param[in] minarray array of dimension 2*size+1 + * \return void + * + *
+ * Notes:
+ *        (1) See notes in dilateGrayLow()
+ * 
+ */ +static void +erodeGrayLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 size, + l_int32 direction, + l_uint8 *buffer, + l_uint8 *minarray) +{ +l_int32 i, j, k; +l_int32 hsize, nsteps, startmin, startx, starty; +l_uint8 minval; +l_uint32 *lines, *lined; + + if (direction == L_HORIZ) { + hsize = size / 2; + nsteps = (w - 2 * hsize) / size; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + + /* fill buffer with pixels in byte order */ + for (j = 0; j < w; j++) + buffer[j] = GET_DATA_BYTE(lines, j); + + for (j = 0; j < nsteps; j++) { + /* refill the minarray */ + startmin = (j + 1) * size - 1; + minarray[size - 1] = buffer[startmin]; + for (k = 1; k < size; k++) { + minarray[size - 1 - k] = + L_MIN(minarray[size - k], buffer[startmin - k]); + minarray[size - 1 + k] = + L_MIN(minarray[size + k - 2], buffer[startmin + k]); + } + + /* compute erosion values */ + startx = hsize + j * size; + SET_DATA_BYTE(lined, startx, minarray[0]); + SET_DATA_BYTE(lined, startx + size - 1, minarray[2 * size - 2]); + for (k = 1; k < size - 1; k++) { + minval = L_MIN(minarray[k], minarray[k + size - 1]); + SET_DATA_BYTE(lined, startx + k, minval); + } + } + } + } else { /* direction == L_VERT */ + hsize = size / 2; + nsteps = (h - 2 * hsize) / size; + for (j = 0; j < w; j++) { + /* fill buffer with pixels in byte order */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + buffer[i] = GET_DATA_BYTE(lines, j); + } + + for (i = 0; i < nsteps; i++) { + /* refill the minarray */ + startmin = (i + 1) * size - 1; + minarray[size - 1] = buffer[startmin]; + for (k = 1; k < size; k++) { + minarray[size - 1 - k] = + L_MIN(minarray[size - k], buffer[startmin - k]); + minarray[size - 1 + k] = + L_MIN(minarray[size + k - 2], buffer[startmin + k]); + } + + /* compute erosion values */ + starty = hsize + i * size; + lined = datad + starty * wpld; + SET_DATA_BYTE(lined, j, minarray[0]); + SET_DATA_BYTE(lined + (size - 1) * wpld, j, + minarray[2 * size - 2]); + for (k = 1; k < size - 1; k++) { + minval = L_MIN(minarray[k], minarray[k + size - 1]); + SET_DATA_BYTE(lined + wpld * k, j, minval); + } + } + } + } + + return; +} diff --git a/3rdparty/hgOCR/leptonica/grayquant.c b/3rdparty/hgOCR/leptonica/grayquant.c new file mode 100644 index 00000000..d8b02d30 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/grayquant.c @@ -0,0 +1,2908 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file grayquant.c + *
+ *
+ *      Thresholding from 8 bpp to 1 bpp
+ *
+ *          Floyd-Steinberg dithering to binary
+ *              PIX         *pixDitherToBinary()
+ *              PIX         *pixDitherToBinarySpec()
+ *              static void  ditherToBinaryLow()
+ *              void         ditherToBinaryLineLow()
+ *
+ *          Simple (pixelwise) binarization with fixed threshold
+ *              PIX         *pixThresholdToBinary()
+ *              static void  thresholdToBinaryLow()
+ *              void         thresholdToBinaryLineLow()
+ *
+ *          Binarization with variable threshold
+ *              PIX         *pixVarThresholdToBinary()
+ *
+ *          Binarization by adaptive mapping
+ *              PIX         *pixAdaptThresholdToBinary()
+ *              PIX         *pixAdaptThresholdToBinaryGen()
+ *
+ *          Generate a binary mask from pixels of particular values
+ *              PIX         *pixGenerateMaskByValue()
+ *              PIX         *pixGenerateMaskByBand()
+ *
+ *      Thresholding from 8 bpp to 2 bpp
+ *
+ *          Floyd-Steinberg-like dithering to 2 bpp
+ *              PIX         *pixDitherTo2bpp()
+ *              PIX         *pixDitherTo2bppSpec()
+ *              static void  ditherTo2bppLow()
+ *              static void  ditherTo2bppLineLow()
+ *              static l_int32  make8To2DitherTables()
+ *
+ *          Simple (pixelwise) thresholding to 2 bpp with optional cmap
+ *              PIX         *pixThresholdTo2bpp()
+ *              static void  thresholdTo2bppLow()
+ *
+ *      Simple (pixelwise) thresholding from 8 bpp to 4 bpp
+ *              PIX         *pixThresholdTo4bpp()
+ *              static void  thresholdTo4bppLow()
+ *
+ *      Simple (pixelwise) quantization on 8 bpp grayscale
+ *              PIX         *pixThresholdOn8bpp()
+ *
+ *      Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp
+ *              PIX         *pixThresholdGrayArb()
+ *
+ *      Quantization tables for linear thresholds of grayscale images
+ *              l_int32     *makeGrayQuantIndexTable()
+ *              static l_int32  *makeGrayQuantTargetTable()
+ *
+ *      Quantization table for arbitrary thresholding of grayscale images
+ *              l_int32      makeGrayQuantTableArb()
+ *              static l_int32   makeGrayQuantColormapArb()
+ *
+ *      Thresholding from 32 bpp rgb to 1 bpp
+ *      (really color quantization, but it's better placed in this file)
+ *              PIX         *pixGenerateMaskByBand32()
+ *              PIX         *pixGenerateMaskByDiscr32()
+ *
+ *      Histogram-based grayscale quantization
+ *              PIX         *pixGrayQuantFromHisto()
+ *              static l_int32  numaFillCmapFromHisto()
+ *
+ *      Color quantize grayscale image using existing colormap
+ *              PIX         *pixGrayQuantFromCmap()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +static void ditherToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_uint32 *bufs1, l_uint32 *bufs2, + l_int32 lowerclip, l_int32 upperclip); +static void thresholdToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 d, + l_int32 wpls, l_int32 thresh); +static void ditherTo2bppLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, + l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, + l_int32 *tab14); +static void ditherTo2bppLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, + l_uint32 *bufs2, l_int32 *tabval, + l_int32 *tab38, l_int32 *tab14, + l_int32 lastlineflag); +static l_int32 make8To2DitherTables(l_int32 **ptabval, l_int32 **ptab38, + l_int32 **ptab14, l_int32 cliptoblack, + l_int32 cliptowhite); +static void thresholdTo2bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, l_int32 *tab); +static void thresholdTo4bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, l_int32 *tab); +static l_int32 *makeGrayQuantTargetTable(l_int32 nlevels, l_int32 depth); +static l_int32 makeGrayQuantColormapArb(PIX *pixs, l_int32 *tab, + l_int32 outdepth, PIXCMAP **pcmap); +static l_int32 numaFillCmapFromHisto(NUMA *na, PIXCMAP *cmap, + l_float32 minfract, l_int32 maxsize, + l_int32 **plut); + +#ifndef NO_CONSOLE_IO +#define DEBUG_UNROLLING 0 +#endif /* ~NO_CONSOLE_IO */ + +/*------------------------------------------------------------------* + * Binarization by Floyd-Steinberg dithering * + *------------------------------------------------------------------*/ +/*! + * \brief pixDitherToBinary() + * + * \param[in] pixs + * \return pixd dithered binary, or NULL on error + * + * The Floyd-Steinberg error diffusion dithering algorithm + * binarizes an 8 bpp grayscale image to a threshold of 128. + * If a pixel has a value above 127, it is binarized to white + * and the excess below 255 is subtracted from three + * neighboring pixels in the fractions 3/8 to i, j+1, + * 3/8 to i+1, j) and 1/4 to (i+1,j+1, truncating to 0 + * if necessary. Likewise, if it the pixel has a value + * below 128, it is binarized to black and the excess above 0 + * is added to the neighboring pixels, truncating to 255 if necessary. + * + * This function differs from straight dithering in that it allows + * clipping of grayscale to 0 or 255 if the values are + * sufficiently close, without distribution of the excess. + * This uses default values to specify the range of lower + * and upper values near 0 and 255, rsp that are clipped + * to black and white without propagating the excess. + * Not propagating the excess has the effect of reducing the + * snake patterns in parts of the image that are nearly black or white; + * however, it also prevents the attempt to reproduce gray for those values. + * + * The implementation is straightforward. It uses a pair of + * line buffers to avoid changing pixs. It is about the same speed + * as pixDitherToBinaryLUT(), which uses three LUTs. + */ +PIX * +pixDitherToBinary(PIX *pixs) +{ + PROCNAME("pixDitherToBinary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); + + return pixDitherToBinarySpec(pixs, DEFAULT_CLIP_LOWER_1, + DEFAULT_CLIP_UPPER_1); +} + + +/*! + * \brief pixDitherToBinarySpec() + * + * \param[in] pixs + * \param[in] lowerclip lower clip distance to black; use 0 for default + * \param[in] upperclip upper clip distance to white; use 0 for default + * \return pixd dithered binary, or NULL on error + * + *
+ * Notes:
+ *      (1) See comments above in pixDitherToBinary() for details.
+ *      (2) The input parameters lowerclip and upperclip specify the range
+ *          of lower and upper values (near 0 and 255, rsp) that are
+ *          clipped to black and white without propagating the excess.
+ *          For that reason, lowerclip and upperclip should be small numbers.
+ * 
+ */ +PIX * +pixDitherToBinarySpec(PIX *pixs, + l_int32 lowerclip, + l_int32 upperclip) +{ +l_int32 w, h, d, wplt, wpld; +l_uint32 *datat, *datad; +l_uint32 *bufs1, *bufs2; +PIX *pixt, *pixd; + + PROCNAME("pixDitherToBinarySpec"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); + if (lowerclip < 0 || lowerclip > 255) + return (PIX *)ERROR_PTR("invalid value for lowerclip", procName, NULL); + if (upperclip < 0 || upperclip > 255) + return (PIX *)ERROR_PTR("invalid value for upperclip", procName, NULL); + + if ((pixd = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Remove colormap if it exists */ + if ((pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + } + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Two line buffers, 1 for current line and 2 for next line */ + bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + if (!bufs1 || !bufs2) { + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + pixDestroy(&pixd); + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", procName, NULL); + } + + ditherToBinaryLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, + lowerclip, upperclip); + + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief ditherToBinaryLow() + * + * See comments in pixDitherToBinary() in binarize.c + */ +static void +ditherToBinaryLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 lowerclip, + l_int32 upperclip) +{ +l_int32 i; +l_uint32 *lined; + + /* do all lines except last line */ + memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ + for (i = 0; i < h - 1; i++) { + memcpy(bufs1, bufs2, 4 * wpls); + memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); + lined = datad + i * wpld; + ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 0); + } + + /* do last line */ + memcpy(bufs1, bufs2, 4 * wpls); + lined = datad + (h - 1) * wpld; + ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 1); +} + + +/*! + * \brief ditherToBinaryLineLow() + * + * \param[in] lined ptr to beginning of dest line + * \param[in] w width of image in pixels + * \param[in] bufs1 buffer of current source line + * \param[in] bufs2 buffer of next source line + * \param[in] lowerclip lower clip distance to black + * \param[in] upperclip upper clip distance to white + * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line + * \return void + * + * Dispatches FS error diffusion dithering for + * a single line of the image. If lastlineflag == 0, + * both source buffers are used; otherwise, only bufs1 + * is used. We use source buffers because the error + * is propagated into them, and we don't want to change + * the input src image. + * + * We break dithering out line by line to make it + * easier to combine functions like interpolative + * scaling and error diffusion dithering, as such a + * combination of operations obviates the need to + * generate a 2x grayscale image as an intermediary. + */ +void +ditherToBinaryLineLow(l_uint32 *lined, + l_int32 w, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 lowerclip, + l_int32 upperclip, + l_int32 lastlineflag) +{ +l_int32 j; +l_int32 oval, eval; +l_uint8 fval1, fval2, rval, bval, dval; + + if (lastlineflag == 0) { + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + if (oval > 127) { /* binarize to OFF */ + if ((eval = 255 - oval) > upperclip) { + /* subtract from neighbors */ + fval1 = (3 * eval) / 8; + fval2 = eval / 4; + rval = GET_DATA_BYTE(bufs1, j + 1); + rval = L_MAX(0, rval - fval1); + SET_DATA_BYTE(bufs1, j + 1, rval); + bval = GET_DATA_BYTE(bufs2, j); + bval = L_MAX(0, bval - fval1); + SET_DATA_BYTE(bufs2, j, bval); + dval = GET_DATA_BYTE(bufs2, j + 1); + dval = L_MAX(0, dval - fval2); + SET_DATA_BYTE(bufs2, j + 1, dval); + } + } else { /* oval <= 127; binarize to ON */ + SET_DATA_BIT(lined, j); /* ON pixel */ + if (oval > lowerclip) { + /* add to neighbors */ + fval1 = (3 * oval) / 8; + fval2 = oval / 4; + rval = GET_DATA_BYTE(bufs1, j + 1); + rval = L_MIN(255, rval + fval1); + SET_DATA_BYTE(bufs1, j + 1, rval); + bval = GET_DATA_BYTE(bufs2, j); + bval = L_MIN(255, bval + fval1); + SET_DATA_BYTE(bufs2, j, bval); + dval = GET_DATA_BYTE(bufs2, j + 1); + dval = L_MIN(255, dval + fval2); + SET_DATA_BYTE(bufs2, j + 1, dval); + } + } + } + + /* do last column: j = w - 1 */ + oval = GET_DATA_BYTE(bufs1, j); + if (oval > 127) { /* binarize to OFF */ + if ((eval = 255 - oval) > upperclip) { + /* subtract from neighbors */ + fval1 = (3 * eval) / 8; + bval = GET_DATA_BYTE(bufs2, j); + bval = L_MAX(0, bval - fval1); + SET_DATA_BYTE(bufs2, j, bval); + } + } else { /*oval <= 127; binarize to ON */ + SET_DATA_BIT(lined, j); /* ON pixel */ + if (oval > lowerclip) { + /* add to neighbors */ + fval1 = (3 * oval) / 8; + bval = GET_DATA_BYTE(bufs2, j); + bval = L_MIN(255, bval + fval1); + SET_DATA_BYTE(bufs2, j, bval); + } + } + } else { /* lastlineflag == 1 */ + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + if (oval > 127) { /* binarize to OFF */ + if ((eval = 255 - oval) > upperclip) { + /* subtract from neighbors */ + fval1 = (3 * eval) / 8; + rval = GET_DATA_BYTE(bufs1, j + 1); + rval = L_MAX(0, rval - fval1); + SET_DATA_BYTE(bufs1, j + 1, rval); + } + } else { /* oval <= 127; binarize to ON */ + SET_DATA_BIT(lined, j); /* ON pixel */ + if (oval > lowerclip) { + /* add to neighbors */ + fval1 = (3 * oval) / 8; + rval = GET_DATA_BYTE(bufs1, j + 1); + rval = L_MIN(255, rval + fval1); + SET_DATA_BYTE(bufs1, j + 1, rval); + } + } + } + + /* do last pixel: (i, j) = (h - 1, w - 1) */ + oval = GET_DATA_BYTE(bufs1, j); + if (oval < 128) + SET_DATA_BIT(lined, j); /* ON pixel */ + } +} + + +/*------------------------------------------------------------------* + * Simple (pixelwise) binarization with fixed threshold * + *------------------------------------------------------------------*/ +/*! + * \brief pixThresholdToBinary() + * + * \param[in] pixs 4 or 8 bpp + * \param[in] thresh threshold value + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If the source pixel is less than the threshold value,
+ *          the dest will be 1; otherwise, it will be 0.
+ *      (2) For example, for 8 bpp src pix, if %thresh == 256, the dest
+ *          1 bpp pix is all ones (fg), and if %thresh == 0, the dest
+ *          pix is all zeros (bg).
+ *
+ * 
+ */ +PIX * +pixThresholdToBinary(PIX *pixs, + l_int32 thresh) +{ +l_int32 d, w, h, wplt, wpld; +l_uint32 *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixThresholdToBinary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 4 && d != 8) + return (PIX *)ERROR_PTR("pixs must be 4 or 8 bpp", procName, NULL); + if (thresh < 0) + return (PIX *)ERROR_PTR("thresh must be non-negative", procName, NULL); + if (d == 4 && thresh > 16) + return (PIX *)ERROR_PTR("4 bpp thresh not in {0-16}", procName, NULL); + if (d == 8 && thresh > 256) + return (PIX *)ERROR_PTR("8 bpp thresh not in {0-256}", procName, NULL); + + if ((pixd = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Remove colormap if it exists. If there is a colormap, + * pixt will be 8 bpp regardless of the depth of pixs. */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + if (pixGetColormap(pixs) && d == 4) { /* promoted to 8 bpp */ + d = 8; + thresh *= 16; + } + + thresholdToBinaryLow(datad, w, h, wpld, datat, d, wplt, thresh); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief thresholdToBinaryLow() + * + * If the source pixel is less than thresh, + * the dest will be 1; otherwise, it will be 0 + */ +static void +thresholdToBinaryLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 d, + l_int32 wpls, + l_int32 thresh) +{ +l_int32 i; +l_uint32 *lines, *lined; + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + thresholdToBinaryLineLow(lined, w, lines, d, thresh); + } +} + + +/* + * thresholdToBinaryLineLow() + * + */ +void +thresholdToBinaryLineLow(l_uint32 *lined, + l_int32 w, + l_uint32 *lines, + l_int32 d, + l_int32 thresh) +{ +l_int32 j, k, gval, scount, dcount; +l_uint32 sword, dword; + + PROCNAME("thresholdToBinaryLineLow"); + + switch (d) + { + case 4: + /* Unrolled as 4 source words, 1 dest word */ + for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { + dword = 0; + for (k = 0; k < 4; k++) { + sword = lines[scount++]; + dword <<= 8; + gval = (sword >> 28) & 0xf; + /* Trick used here and below: if gval < thresh then + * gval - thresh < 0, so its high-order bit is 1, and + * ((gval - thresh) >> 31) & 1 == 1; likewise, if + * gval >= thresh, then ((gval - thresh) >> 31) & 1 == 0 + * Doing it this way avoids a random (and thus easily + * mispredicted) branch on each pixel. */ + dword |= ((gval - thresh) >> 24) & 128; + gval = (sword >> 24) & 0xf; + dword |= ((gval - thresh) >> 25) & 64; + gval = (sword >> 20) & 0xf; + dword |= ((gval - thresh) >> 26) & 32; + gval = (sword >> 16) & 0xf; + dword |= ((gval - thresh) >> 27) & 16; + gval = (sword >> 12) & 0xf; + dword |= ((gval - thresh) >> 28) & 8; + gval = (sword >> 8) & 0xf; + dword |= ((gval - thresh) >> 29) & 4; + gval = (sword >> 4) & 0xf; + dword |= ((gval - thresh) >> 30) & 2; + gval = sword & 0xf; + dword |= ((gval - thresh) >> 31) & 1; + } + lined[dcount++] = dword; + } + + if (j < w) { + dword = 0; + for (; j < w; j++) { + if ((j & 7) == 0) { + sword = lines[scount++]; + } + gval = (sword >> 28) & 0xf; + sword <<= 4; + dword |= (((gval - thresh) >> 31) & 1) << (31 - (j & 31)); + } + lined[dcount] = dword; + } +#if DEBUG_UNROLLING +#define CHECK_BIT(a, b, c) if (GET_DATA_BIT(a, b) != c) { \ + fprintf(stderr, "Error: mismatch at %d/%d(%d), %d vs %d\n", \ + j, w, d, GET_DATA_BIT(a, b), c); } + for (j = 0; j < w; j++) { + gval = GET_DATA_QBIT(lines, j); + CHECK_BIT(lined, j, gval < thresh ? 1 : 0); + } +#endif + break; + case 8: + /* Unrolled as 8 source words, 1 dest word */ + for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { + dword = 0; + for (k = 0; k < 8; k++) { + sword = lines[scount++]; + dword <<= 4; + gval = (sword >> 24) & 0xff; + dword |= ((gval - thresh) >> 28) & 8; + gval = (sword >> 16) & 0xff; + dword |= ((gval - thresh) >> 29) & 4; + gval = (sword >> 8) & 0xff; + dword |= ((gval - thresh) >> 30) & 2; + gval = sword & 0xff; + dword |= ((gval - thresh) >> 31) & 1; + } + lined[dcount++] = dword; + } + + if (j < w) { + dword = 0; + for (; j < w; j++) { + if ((j & 3) == 0) { + sword = lines[scount++]; + } + gval = (sword >> 24) & 0xff; + sword <<= 8; + dword |= (l_uint64)(((gval - thresh) >> 31) & 1) + << (31 - (j & 31)); + } + lined[dcount] = dword; + } +#if DEBUG_UNROLLING + for (j = 0; j < w; j++) { + gval = GET_DATA_BYTE(lines, j); + CHECK_BIT(lined, j, gval < thresh ? 1 : 0); + } +#undef CHECK_BIT +#endif + break; + default: + L_ERROR("src depth not 4 or 8 bpp\n", procName); + break; + } +} + + +/*------------------------------------------------------------------* + * Binarization with variable threshold * + *------------------------------------------------------------------*/ +/*! + * \brief pixVarThresholdToBinary() + * + * \param[in] pixs 8 bpp + * \param[in] pixg 8 bpp; contains threshold values for each pixel + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If the pixel in pixs is less than the corresponding pixel
+ *          in pixg, the dest will be 1; otherwise it will be 0.
+ * 
+ */ +PIX * +pixVarThresholdToBinary(PIX *pixs, + PIX *pixg) +{ +l_int32 i, j, vals, valg, w, h, d, wpls, wplg, wpld; +l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; +PIX *pixd; + + PROCNAME("pixVarThresholdToBinary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixg) + return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); + if (!pixSizesEqual(pixs, pixg)) + return (PIX *)ERROR_PTR("pix sizes not equal", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lineg = datag + i * wplg; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + valg = GET_DATA_BYTE(lineg, j); + if (vals < valg) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Binarization by adaptive mapping * + *------------------------------------------------------------------*/ +/*! + * \brief pixAdaptThresholdToBinary() + * + * \param[in] pixs 8 bpp + * \param[in] pixm [optional] 1 bpp image mask; can be null + * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a simple convenience function for doing adaptive
+ *          thresholding on a grayscale image with variable background.
+ *          It uses default parameters appropriate for typical text images.
+ *      (2) %pixm is a 1 bpp mask over "image" regions, which are not
+ *          expected to have a white background.  The mask inhibits
+ *          background finding under the fg pixels of the mask.  For
+ *          images with both text and image, the image regions would
+ *          be binarized (or quantized) by a different set of operations.
+ *      (3) As %gamma is increased, the foreground pixels are reduced.
+ *      (4) Under the covers:  The default background value for normalization
+ *          is 200, so we choose 170 for 'maxval' in pixGammaTRC.  Likewise,
+ *          the default foreground threshold for normalization is 60,
+ *          so we choose 50 for 'minval' in pixGammaTRC.  Because
+ *          170 was mapped to 255, choosing 200 for the threshold is
+ *          quite safe for avoiding speckle noise from the background.
+ * 
+ */ +PIX * +pixAdaptThresholdToBinary(PIX *pixs, + PIX *pixm, + l_float32 gamma) +{ + PROCNAME("pixAdaptThresholdToBinary"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + return pixAdaptThresholdToBinaryGen(pixs, pixm, gamma, 50, 170, 200); +} + + +/*! + * \brief pixAdaptThresholdToBinaryGen() + * + * \param[in] pixs 8 bpp + * \param[in] pixm [optional] 1 bpp image mask; can be null + * \param[in] gamma gamma correction; must be > 0.0; typically ~1.0 + * \param[in] blackval dark value to set to black (0) + * \param[in] whiteval light value to set to white (255) + * \param[in] thresh final threshold for binarization + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a convenience function for doing adaptive thresholding
+ *          on a grayscale image with variable background.  Also see notes
+ *          in pixAdaptThresholdToBinary().
+ *      (2) Reducing %gamma increases the foreground (text) pixels.
+ *          Use a low value (e.g., 0.5) for images with light text.
+ *      (3) For normal images, see default args in pixAdaptThresholdToBinary().
+ *          For images with very light text, these values are appropriate:
+ *             gamma     ~0.5
+ *             blackval  ~70
+ *             whiteval  ~190
+ *             thresh    ~200
+ * 
+ */ +PIX * +pixAdaptThresholdToBinaryGen(PIX *pixs, + PIX *pixm, + l_float32 gamma, + l_int32 blackval, + l_int32 whiteval, + l_int32 thresh) +{ +PIX *pix1, *pixd; + + PROCNAME("pixAdaptThresholdToBinaryGen"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + pix1 = pixBackgroundNormSimple(pixs, pixm, NULL); + pixGammaTRC(pix1, pix1, gamma, blackval, whiteval); + pixd = pixThresholdToBinary(pix1, thresh); + pixDestroy(&pix1); + return pixd; +} + + +/*--------------------------------------------------------------------* + * Generate a binary mask from pixels of particular value(s) * + *--------------------------------------------------------------------*/ +/*! + * \brief pixGenerateMaskByValue() + * + * \param[in] pixs 2, 4 or 8 bpp, or colormapped + * \param[in] val of pixels for which we set 1 in dest + * \param[in] usecmap 1 to retain cmap values; 0 to convert to gray + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) %val is the pixel value that we are selecting.  It can be
+ *          either a gray value or a colormap index.
+ *      (2) If pixs is colormapped, %usecmap determines if the colormap
+ *          index values are used, or if the colormap is removed to gray and
+ *          the gray values are used.  For the latter, it generates
+ *          an approximate grayscale value for each pixel, and then looks
+ *          for gray pixels with the value %val.
+ * 
+ */ +PIX * +pixGenerateMaskByValue(PIX *pixs, + l_int32 val, + l_int32 usecmap) +{ +l_int32 i, j, w, h, d, wplg, wpld; +l_uint32 *datag, *datad, *lineg, *lined; +PIX *pixg, *pixd; + + PROCNAME("pixGenerateMaskByValue"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", procName, NULL); + + if (!usecmap && pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + pixGetDimensions(pixg, &w, &h, &d); + if (d == 8 && (val < 0 || val > 255)) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("val out of 8 bpp range", procName, NULL); + } + if (d == 4 && (val < 0 || val > 15)) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("val out of 4 bpp range", procName, NULL); + } + if (d == 2 && (val < 0 || val > 3)) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("val out of 2 bpp range", procName, NULL); + } + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixg); + pixCopyInputFormat(pixd, pixs); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lineg = datag + i * wplg; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 8) { + if (GET_DATA_BYTE(lineg, j) == val) + SET_DATA_BIT(lined, j); + } else if (d == 4) { + if (GET_DATA_QBIT(lineg, j) == val) + SET_DATA_BIT(lined, j); + } else { /* d == 2 */ + if (GET_DATA_DIBIT(lineg, j) == val) + SET_DATA_BIT(lined, j); + } + } + } + + pixDestroy(&pixg); + return pixd; +} + + +/*! + * \brief pixGenerateMaskByBand() + * + * \param[in] pixs 2, 4 or 8 bpp, or colormapped + * \param[in] lower, upper two pixel values from which a range, either + * between (inband) or outside of (!inband), + * determines which pixels in pixs cause us to + * set a 1 in the dest mask + * \param[in] inband 1 for finding pixels in [lower, upper]; + * 0 for finding pixels in + * [0, lower) union (upper, 255] + * \param[in] usecmap 1 to retain cmap values; 0 to convert to gray + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
+ *          the fg pixels in the mask are those either within the specified
+ *          band (for inband == 1) or outside the specified band
+ *          (for inband == 0).
+ *      (2) If pixs is colormapped, %usecmap determines if the colormap
+ *          values are used, or if the colormap is removed to gray and
+ *          the gray values are used.  For the latter, it generates
+ *          an approximate grayscale value for each pixel, and then looks
+ *          for gray pixels with the value %val.
+ * 
+ */ +PIX * +pixGenerateMaskByBand(PIX *pixs, + l_int32 lower, + l_int32 upper, + l_int32 inband, + l_int32 usecmap) +{ +l_int32 i, j, w, h, d, wplg, wpld, val; +l_uint32 *datag, *datad, *lineg, *lined; +PIX *pixg, *pixd; + + PROCNAME("pixGenerateMaskByBand"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", procName, NULL); + if (lower < 0 || lower > upper) + return (PIX *)ERROR_PTR("lower < 0 or lower > upper!", procName, NULL); + + if (!usecmap && pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + pixGetDimensions(pixg, &w, &h, &d); + if (d == 8 && upper > 255) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("d == 8 and upper > 255", procName, NULL); + } + if (d == 4 && upper > 15) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("d == 4 and upper > 15", procName, NULL); + } + if (d == 2 && upper > 3) { + pixDestroy(&pixg); + return (PIX *)ERROR_PTR("d == 2 and upper > 3", procName, NULL); + } + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixg); + pixCopyInputFormat(pixd, pixs); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lineg = datag + i * wplg; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 8) + val = GET_DATA_BYTE(lineg, j); + else if (d == 4) + val = GET_DATA_QBIT(lineg, j); + else /* d == 2 */ + val = GET_DATA_DIBIT(lineg, j); + if (inband) { + if (val >= lower && val <= upper) + SET_DATA_BIT(lined, j); + } else { /* out of band */ + if (val < lower || val > upper) + SET_DATA_BIT(lined, j); + } + } + } + + pixDestroy(&pixg); + return pixd; +} + + +/*------------------------------------------------------------------* + * Thresholding to 2 bpp by dithering * + *------------------------------------------------------------------*/ +/*! + * \brief pixDitherTo2bpp() + * + * \param[in] pixs 8 bpp + * \param[in] cmapflag 1 to generate a colormap + * \return pixd dithered 2 bpp, or NULL on error + * + * An analog of the Floyd-Steinberg error diffusion dithering + * algorithm is used to "dibitize" an 8 bpp grayscale image + * to 2 bpp, using equally spaced gray values of 0, 85, 170, and 255, + * which are served by thresholds of 43, 128 and 213. + * If cmapflag == 1, the colormap values are set to 0, 85, 170 and 255. + * If a pixel has a value between 0 and 42, it is dibitized + * to 0, and the excess above 0 is added to the + * three neighboring pixels, in the fractions 3/8 to i, j+1, + * 3/8 to i+1, j) and 1/4 to (i+1, j+1, truncating to 255 if + * necessary. If a pixel has a value between 43 and 127, it is + * dibitized to 1, and the excess above 85 is added to the three + * neighboring pixels as before. If the value is below 85, the + * excess is subtracted. With a value between 128 + * and 212, it is dibitized to 2, with the excess on either side + * of 170 distributed as before. Finally, with a value between + * 213 and 255, it is dibitized to 3, with the excess below 255 + * subtracted from the neighbors. We always truncate to 0 or 255. + * The details can be seen in the lookup table generation. + * + * This function differs from straight dithering in that it allows + * clipping of grayscale to 0 or 255 if the values are + * sufficiently close, without distribution of the excess. + * This uses default values from pix.h to specify the range of lower + * and upper values near 0 and 255, rsp that are clipped to black + * and white without propagating the excess. + * Not propagating the excess has the effect of reducing the snake + * patterns in parts of the image that are nearly black or white; + * however, it also prevents any attempt to reproduce gray for those values. + * + * The implementation uses 3 lookup tables for simplicity, and + * a pair of line buffers to avoid modifying pixs. + */ +PIX * +pixDitherTo2bpp(PIX *pixs, + l_int32 cmapflag) +{ + PROCNAME("pixDitherTo2bpp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); + + return pixDitherTo2bppSpec(pixs, DEFAULT_CLIP_LOWER_2, + DEFAULT_CLIP_UPPER_2, cmapflag); +} + + +/*! + * \brief pixDitherTo2bppSpec() + * + * \param[in] pixs 8 bpp + * \param[in] lowerclip lower clip distance to black; use 0 for default + * \param[in] upperclip upper clip distance to white; use 0 for default + * \param[in] cmapflag 1 to generate a colormap + * \return pixd dithered 2 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) See comments above in pixDitherTo2bpp() for details.
+ *      (2) The input parameters lowerclip and upperclip specify the range
+ *          of lower and upper values (near 0 and 255, rsp) that are
+ *          clipped to black and white without propagating the excess.
+ *          For that reason, lowerclip and upperclip should be small numbers.
+ * 
+ */ +PIX * +pixDitherTo2bppSpec(PIX *pixs, + l_int32 lowerclip, + l_int32 upperclip, + l_int32 cmapflag) +{ +l_int32 w, h, d, wplt, wpld; +l_int32 *tabval, *tab38, *tab14; +l_uint32 *datat, *datad; +l_uint32 *bufs1, *bufs2; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixDitherTo2bppSpec"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); + if (lowerclip < 0 || lowerclip > 255) + return (PIX *)ERROR_PTR("invalid value for lowerclip", procName, NULL); + if (upperclip < 0 || upperclip > 255) + return (PIX *)ERROR_PTR("invalid value for upperclip", procName, NULL); + + if ((pixd = pixCreate(w, h, 2)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* If there is a colormap, remove it */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Two line buffers, 1 for current line and 2 for next line */ + bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + if (!bufs1 || !bufs2) { + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + pixDestroy(&pixd); + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", procName, NULL); + } + + /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ + make8To2DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); + + ditherTo2bppLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, + tabval, tab38, tab14); + + if (cmapflag) { + cmap = pixcmapCreateLinear(2, 4); + pixSetColormap(pixd, cmap); + } + + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + LEPT_FREE(tabval); + LEPT_FREE(tab38); + LEPT_FREE(tab14); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief ditherTo2bppLow() + * + * Low-level function for doing Floyd-Steinberg error diffusion + * dithering from 8 bpp (datas) to 2 bpp (datad). Two source + * line buffers, bufs1 and bufs2, are provided, along with three + * 256-entry lookup tables: tabval gives the output pixel value, + * tab38 gives the extra (plus or minus) transferred to the pixels + * directly to the left and below, and tab14 gives the extra + * transferred to the diagonal below. The choice of 3/8 and 1/4 + * is traditional but arbitrary when you use a lookup table; the + * only constraint is that the sum is 1. See other comments + * below and in grayquant.c. + */ +static void +ditherTo2bppLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 *tabval, + l_int32 *tab38, + l_int32 *tab14) +{ +l_int32 i; +l_uint32 *lined; + + /* do all lines except last line */ + memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ + for (i = 0; i < h - 1; i++) { + memcpy(bufs1, bufs2, 4 * wpls); + memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); + lined = datad + i * wpld; + ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 0); + } + + /* do last line */ + memcpy(bufs1, bufs2, 4 * wpls); + lined = datad + (h - 1) * wpld; + ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); +} + + +/*! + * \brief ditherTo2bppLineLow() + * + * \param[in] lined ptr to beginning of dest line + * \param[in] w width of image in pixels + * \param[in] bufs1 buffer of current source line + * \param[in] bufs2 buffer of next source line + * \param[in] tabval value to assign for current pixel + * \param[in] tab38 excess value to give to neighboring 3/8 pixels + * \param[in] tab14 excess value to give to neighboring 1/4 pixel + * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line + * \return void + * + * Dispatches error diffusion dithering for + * a single line of the image. If lastlineflag == 0, + * both source buffers are used; otherwise, only bufs1 + * is used. We use source buffers because the error + * is propagated into them, and we don't want to change + * the input src image. + * + * We break dithering out line by line to make it + * easier to combine functions like interpolative + * scaling and error diffusion dithering, as such a + * combination of operations obviates the need to + * generate a 2x grayscale image as an intermediary. + */ +static void +ditherTo2bppLineLow(l_uint32 *lined, + l_int32 w, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 *tabval, + l_int32 *tab38, + l_int32 *tab14, + l_int32 lastlineflag) +{ +l_int32 j; +l_int32 oval, tab38val, tab14val; +l_uint8 rval, bval, dval; + + if (lastlineflag == 0) { + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + SET_DATA_DIBIT(lined, j, tabval[oval]); + rval = GET_DATA_BYTE(bufs1, j + 1); + bval = GET_DATA_BYTE(bufs2, j); + dval = GET_DATA_BYTE(bufs2, j + 1); + tab38val = tab38[oval]; + tab14val = tab14[oval]; + if (tab38val < 0) { + rval = L_MAX(0, rval + tab38val); + bval = L_MAX(0, bval + tab38val); + dval = L_MAX(0, dval + tab14val); + } else { + rval = L_MIN(255, rval + tab38val); + bval = L_MIN(255, bval + tab38val); + dval = L_MIN(255, dval + tab14val); + } + SET_DATA_BYTE(bufs1, j + 1, rval); + SET_DATA_BYTE(bufs2, j, bval); + SET_DATA_BYTE(bufs2, j + 1, dval); + } + + /* do last column: j = w - 1 */ + oval = GET_DATA_BYTE(bufs1, j); + SET_DATA_DIBIT(lined, j, tabval[oval]); + bval = GET_DATA_BYTE(bufs2, j); + tab38val = tab38[oval]; + if (tab38val < 0) + bval = L_MAX(0, bval + tab38val); + else + bval = L_MIN(255, bval + tab38val); + SET_DATA_BYTE(bufs2, j, bval); + } else { /* lastlineflag == 1 */ + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + SET_DATA_DIBIT(lined, j, tabval[oval]); + rval = GET_DATA_BYTE(bufs1, j + 1); + tab38val = tab38[oval]; + if (tab38val < 0) + rval = L_MAX(0, rval + tab38val); + else + rval = L_MIN(255, rval + tab38val); + SET_DATA_BYTE(bufs1, j + 1, rval); + } + + /* do last pixel: (i, j) = (h - 1, w - 1) */ + oval = GET_DATA_BYTE(bufs1, j); + SET_DATA_DIBIT(lined, j, tabval[oval]); + } +} + + +/*! + * \brief make8To2DitherTables() + * + * \param[out] ptabval value assigned to output pixel; 0, 1, 2 or 3 + * \param[out] ptab38 amount propagated to pixels left and below + * \param[out] ptab14 amount propagated to pixel to left and down + * \param[in] cliptoblack values near 0 where the excess is not propagated + * \param[in] cliptowhite values near 255 where the deficit is not propagated + * + * \return 0 if OK, 1 on error + */ +static l_int32 +make8To2DitherTables(l_int32 **ptabval, + l_int32 **ptab38, + l_int32 **ptab14, + l_int32 cliptoblack, + l_int32 cliptowhite) +{ +l_int32 i; +l_int32 *tabval, *tab38, *tab14; + + /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ + tabval = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + tab38 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + tab14 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + *ptabval = tabval; + *ptab38 = tab38; + *ptab14 = tab14; + + for (i = 0; i < 256; i++) { + if (i <= cliptoblack) { + tabval[i] = 0; + tab38[i] = 0; + tab14[i] = 0; + } else if (i < 43) { + tabval[i] = 0; + tab38[i] = (3 * i + 4) / 8; + tab14[i] = (i + 2) / 4; + } else if (i < 85) { + tabval[i] = 1; + tab38[i] = (3 * (i - 85) - 4) / 8; + tab14[i] = ((i - 85) - 2) / 4; + } else if (i < 128) { + tabval[i] = 1; + tab38[i] = (3 * (i - 85) + 4) / 8; + tab14[i] = ((i - 85) + 2) / 4; + } else if (i < 170) { + tabval[i] = 2; + tab38[i] = (3 * (i - 170) - 4) / 8; + tab14[i] = ((i - 170) - 2) / 4; + } else if (i < 213) { + tabval[i] = 2; + tab38[i] = (3 * (i - 170) + 4) / 8; + tab14[i] = ((i - 170) + 2) / 4; + } else if (i < 255 - cliptowhite) { + tabval[i] = 3; + tab38[i] = (3 * (i - 255) - 4) / 8; + tab14[i] = ((i - 255) - 2) / 4; + } else { /* i >= 255 - cliptowhite */ + tabval[i] = 3; + tab38[i] = 0; + tab14[i] = 0; + } + } + + return 0; +} + + +/*--------------------------------------------------------------------* + * Simple (pixelwise) thresholding to 2 bpp with optional colormap * + *--------------------------------------------------------------------*/ +/*! + * \brief pixThresholdTo2bpp() + * + * \param[in] pixs 8 bpp + * \param[in] nlevels equally spaced; must be between 2 and 4 + * \param[in] cmapflag 1 to build colormap; 0 otherwise + * \return pixd 2 bpp, optionally with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Valid values for nlevels is the set {2, 3, 4}.
+ *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
+ *      (3) This function is typically invoked with cmapflag == 1.
+ *          In the situation where no colormap is desired, nlevels is
+ *          ignored and pixs is thresholded to 4 levels.
+ *      (4) The target output colors are equally spaced, with the
+ *          darkest at 0 and the lightest at 255.  The thresholds are
+ *          chosen halfway between adjacent output values.  A table
+ *          is built that specifies the mapping from src to dest.
+ *      (5) If cmapflag == 1, a colormap of size 'nlevels' is made,
+ *          and the pixel values in pixs are replaced by their
+ *          appropriate color indices.  The number of holdouts,
+ *          4 - nlevels, will be between 0 and 2.
+ *      (6) If you don't want the thresholding to be equally spaced,
+ *          either first transform the 8 bpp src using pixGammaTRC().
+ *          or, if cmapflag == 1, after calling this function you can use
+ *          pixcmapResetColor() to change any individual colors.
+ *      (7) If a colormap is generated, it will specify (to display
+ *          programs) exactly how each level is to be represented in RGB
+ *          space.  When representing text, 3 levels is far better than
+ *          2 because of the antialiasing of the single gray level,
+ *          and 4 levels (black, white and 2 gray levels) is getting
+ *          close to the perceptual quality of a (nearly continuous)
+ *          grayscale image.  With 2 bpp, you can set up a colormap
+ *          and allocate from 2 to 4 levels to represent antialiased text.
+ *          Any left over colormap entries can be used for coloring regions.
+ *          For the same number of levels, the file size of a 2 bpp image
+ *          is about 10% smaller than that of a 4 bpp result for the same
+ *          number of levels.  For both 2 bpp and 4 bpp, using 4 levels you
+ *          get compression far better than that of jpeg, because the
+ *          quantization to 4 levels will remove the jpeg ringing in the
+ *          background near character edges.
+ * 
+ */ +PIX * +pixThresholdTo2bpp(PIX *pixs, + l_int32 nlevels, + l_int32 cmapflag) +{ +l_int32 *qtab; +l_int32 w, h, d, wplt, wpld; +l_uint32 *datat, *datad; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixThresholdTo2bpp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (nlevels < 2 || nlevels > 4) + return (PIX *)ERROR_PTR("nlevels not in {2, 3, 4}", procName, NULL); + + if ((pixd = pixCreate(w, h, 2)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + if (cmapflag) { /* hold out (4 - nlevels) cmap entries */ + cmap = pixcmapCreateLinear(2, nlevels); + pixSetColormap(pixd, cmap); + } + + /* If there is a colormap in the src, remove it */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Make the appropriate table */ + if (cmapflag) + qtab = makeGrayQuantIndexTable(nlevels); + else + qtab = makeGrayQuantTargetTable(4, 2); + + thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); + + LEPT_FREE(qtab); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief thresholdTo2bppLow() + * + * Low-level function for thresholding from 8 bpp (datas) to + * 2 bpp (datad), using thresholds implicitly defined through %tab, + * a 256-entry lookup table that gives a 2-bit output value + * for each possible input. + * + * For each line, unroll the loop so that for each 32 bit src word, + * representing four consecutive 8-bit pixels, we compose one byte + * of output consisiting of four 2-bit pixels. + */ +static void +thresholdTo2bppLow(l_uint32 *datad, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 *tab) +{ +l_uint8 sval1, sval2, sval3, sval4, dval; +l_int32 i, j, k; +l_uint32 *lines, *lined; + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wpls; j++) { + k = 4 * j; + sval1 = GET_DATA_BYTE(lines, k); + sval2 = GET_DATA_BYTE(lines, k + 1); + sval3 = GET_DATA_BYTE(lines, k + 2); + sval4 = GET_DATA_BYTE(lines, k + 3); + dval = (tab[sval1] << 6) | (tab[sval2] << 4) | + (tab[sval3] << 2) | tab[sval4]; + SET_DATA_BYTE(lined, j, dval); + } + } +} + + +/*----------------------------------------------------------------------* + * Simple (pixelwise) thresholding to 4 bpp * + *----------------------------------------------------------------------*/ +/*! + * \brief pixThresholdTo4bpp() + * + * \param[in] pixs 8 bpp, can have colormap + * \param[in] nlevels equally spaced; must be between 2 and 16 + * \param[in] cmapflag 1 to build colormap; 0 otherwise + * \return pixd 4 bpp, optionally with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Valid values for nlevels is the set {2, ... 16}.
+ *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
+ *      (3) This function is typically invoked with cmapflag == 1.
+ *          In the situation where no colormap is desired, nlevels is
+ *          ignored and pixs is thresholded to 16 levels.
+ *      (4) The target output colors are equally spaced, with the
+ *          darkest at 0 and the lightest at 255.  The thresholds are
+ *          chosen halfway between adjacent output values.  A table
+ *          is built that specifies the mapping from src to dest.
+ *      (5) If cmapflag == 1, a colormap of size 'nlevels' is made,
+ *          and the pixel values in pixs are replaced by their
+ *          appropriate color indices.  The number of holdouts,
+ *          16 - nlevels, will be between 0 and 14.
+ *      (6) If you don't want the thresholding to be equally spaced,
+ *          either first transform the 8 bpp src using pixGammaTRC().
+ *          or, if cmapflag == 1, after calling this function you can use
+ *          pixcmapResetColor() to change any individual colors.
+ *      (7) If a colormap is generated, it will specify, to display
+ *          programs, exactly how each level is to be represented in RGB
+ *          space.  When representing text, 3 levels is far better than
+ *          2 because of the antialiasing of the single gray level,
+ *          and 4 levels (black, white and 2 gray levels) is getting
+ *          close to the perceptual quality of a (nearly continuous)
+ *          grayscale image.  Therefore, with 4 bpp, you can set up a
+ *          colormap, allocate a relatively small fraction of the 16
+ *          possible values to represent antialiased text, and use the
+ *          other colormap entries for other things, such as coloring
+ *          text or background.  Two other reasons for using a small number
+ *          of gray values for antialiased text are (1) PNG compression
+ *          gets worse as the number of levels that are used is increased,
+ *          and (2) using a small number of levels will filter out most of
+ *          the jpeg ringing that is typically introduced near sharp edges
+ *          of text.  This filtering is partly responsible for the improved
+ *          compression.
+ * 
+ */ +PIX * +pixThresholdTo4bpp(PIX *pixs, + l_int32 nlevels, + l_int32 cmapflag) +{ +l_int32 *qtab; +l_int32 w, h, d, wplt, wpld; +l_uint32 *datat, *datad; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixThresholdTo4bpp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (nlevels < 2 || nlevels > 16) + return (PIX *)ERROR_PTR("nlevels not in [2,...,16]", procName, NULL); + + if ((pixd = pixCreate(w, h, 4)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + if (cmapflag) { /* hold out (16 - nlevels) cmap entries */ + cmap = pixcmapCreateLinear(4, nlevels); + pixSetColormap(pixd, cmap); + } + + /* If there is a colormap in the src, remove it */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Make the appropriate table */ + if (cmapflag) + qtab = makeGrayQuantIndexTable(nlevels); + else + qtab = makeGrayQuantTargetTable(16, 4); + + thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); + + LEPT_FREE(qtab); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief thresholdTo4bppLow() + * + * Low-level function for thresholding from 8 bpp (datas) to + * 4 bpp (datad), using thresholds implicitly defined through %tab, + * a 256-entry lookup table that gives a 4-bit output value + * for each possible input. + * + * For each line, unroll the loop so that for each 32 bit src word, + * representing four consecutive 8-bit pixels, we compose two bytes + * of output consisiting of four 4-bit pixels. + */ +static void +thresholdTo4bppLow(l_uint32 *datad, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 *tab) +{ +l_uint8 sval1, sval2, sval3, sval4; +l_uint16 dval; +l_int32 i, j, k; +l_uint32 *lines, *lined; + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wpls; j++) { + k = 4 * j; + sval1 = GET_DATA_BYTE(lines, k); + sval2 = GET_DATA_BYTE(lines, k + 1); + sval3 = GET_DATA_BYTE(lines, k + 2); + sval4 = GET_DATA_BYTE(lines, k + 3); + dval = (tab[sval1] << 12) | (tab[sval2] << 8) | + (tab[sval3] << 4) | tab[sval4]; + SET_DATA_TWO_BYTES(lined, j, dval); + } + } +} + + +/*----------------------------------------------------------------------* + * Simple (pixelwise) thresholding on 8 bpp with optional colormap * + *----------------------------------------------------------------------*/ +/*! + * \brief pixThresholdOn8bpp() + * + * \param[in] pixs 8 bpp, can have colormap + * \param[in] nlevels equally spaced; must be between 2 and 256 + * \param[in] cmapflag 1 to build colormap; 0 otherwise + * \return pixd 8 bpp, optionally with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Valid values for nlevels is the set {2,...,256}.
+ *      (2) Any colormap on the input pixs is removed to 8 bpp grayscale.
+ *      (3) If cmapflag == 1, a colormap of size 'nlevels' is made,
+ *          and the pixel values in pixs are replaced by their
+ *          appropriate color indices.  Otherwise, the pixel values
+ *          are the actual thresholded (i.e., quantized) grayscale values.
+ *      (4) If you don't want the thresholding to be equally spaced,
+ *          first transform the input 8 bpp src using pixGammaTRC().
+ * 
+ */ +PIX * +pixThresholdOn8bpp(PIX *pixs, + l_int32 nlevels, + l_int32 cmapflag) +{ +l_int32 *qtab; /* quantization table */ +l_int32 i, j, w, h, wpld, val, newval; +l_uint32 *datad, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixThresholdOn8bpp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (nlevels < 2 || nlevels > 256) + return (PIX *)ERROR_PTR("nlevels not in [2,...,256]", procName, NULL); + + /* Get a new pixd; if there is a colormap in the src, remove it */ + if (pixGetColormap(pixs)) + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixd = pixCopy(NULL, pixs); + + if (cmapflag) { /* hold out (256 - nlevels) cmap entries */ + cmap = pixcmapCreateLinear(8, nlevels); + pixSetColormap(pixd, cmap); + } + + if (cmapflag) + qtab = makeGrayQuantIndexTable(nlevels); + else + qtab = makeGrayQuantTargetTable(nlevels, 8); + + pixGetDimensions(pixd, &w, &h, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lined, j); + newval = qtab[val]; + SET_DATA_BYTE(lined, j, newval); + } + } + + LEPT_FREE(qtab); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp * + *----------------------------------------------------------------------*/ +/*! + * \brief pixThresholdGrayArb() + * + * \param[in] pixs 8 bpp grayscale; can have colormap + * \param[in] edgevals string giving edge value of each bin + * \param[in] outdepth 0, 2, 4 or 8 bpp; 0 is default for min depth + * \param[in] use_average 1 if use the average pixel value in colormap + * \param[in] setblack 1 if darkest color is set to black + * \param[in] setwhite 1 if lightest color is set to white + * \return pixd 2, 4 or 8 bpp quantized image with colormap, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This function allows exact specification of the quantization bins.
+ *          The string %edgevals is a space-separated set of values
+ *          specifying the dividing points between output quantization bins.
+ *          These threshold values are assigned to the bin with higher
+ *          values, so that each of them is the smallest value in their bin.
+ *      (2) The output image (pixd) depth is specified by %outdepth.  The
+ *          number of bins is the number of edgevals + 1.  The
+ *          relation between outdepth and the number of bins is:
+ *               outdepth = 2       nbins <= 4
+ *               outdepth = 4       nbins <= 16
+ *               outdepth = 8       nbins <= 256
+ *          With %outdepth == 0, the minimum required depth for the
+ *          given number of bins is used.
+ *          The output pixd has a colormap.
+ *      (3) The last 3 args determine the specific values that go into
+ *          the colormap.
+ *      (4) For %use_average:
+ *            ~ if TRUE, the average value of pixels falling in the bin is
+ *              chosen as the representative gray value.  Otherwise,
+ *            ~ if FALSE, the central value of each bin is chosen as
+ *              the representative value.
+ *          The colormap holds the representative value.
+ *      (5) For %setblack, if TRUE the darkest color is set to (0,0,0).
+ *      (6) For %setwhite, if TRUE the lightest color is set to (255,255,255).
+ *      (7) An alternative to using this function to quantize to
+ *          unequally-spaced bins is to first transform the 8 bpp pixs
+ *          using pixGammaTRC(), and follow this with pixThresholdTo4bpp().
+ * 
+ */ +PIX * +pixThresholdGrayArb(PIX *pixs, + const char *edgevals, + l_int32 outdepth, + l_int32 use_average, + l_int32 setblack, + l_int32 setwhite) +{ +l_int32 *qtab; +l_int32 w, h, d, i, j, n, wplt, wpld, val, newval; +l_uint32 *datat, *datad, *linet, *lined; +NUMA *na; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixThresholdGrayArb"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (!edgevals) + return (PIX *)ERROR_PTR("edgevals not defined", procName, NULL); + if (outdepth != 0 && outdepth != 2 && outdepth != 4 && outdepth != 8) + return (PIX *)ERROR_PTR("invalid outdepth", procName, NULL); + + /* Parse and sort (if required) the bin edge values */ + na = parseStringForNumbers(edgevals, " \t\n,"); + n = numaGetCount(na); + if (n > 255) { + numaDestroy(&na); + return (PIX *)ERROR_PTR("more than 256 levels", procName, NULL); + } + if (outdepth == 0) { + if (n <= 3) + outdepth = 2; + else if (n <= 15) + outdepth = 4; + else + outdepth = 8; + } else if (n + 1 > (1 << outdepth)) { + L_WARNING("outdepth too small; setting to 8 bpp\n", procName); + outdepth = 8; + } + numaSort(na, na, L_SORT_INCREASING); + + /* Make the quantization LUT and the colormap */ + makeGrayQuantTableArb(na, outdepth, &qtab, &cmap); + if (use_average) { /* use the average value in each bin */ + pixcmapDestroy(&cmap); + makeGrayQuantColormapArb(pixs, qtab, outdepth, &cmap); + } + pixcmapSetBlackAndWhite(cmap, setblack, setwhite); + numaDestroy(&na); + + if ((pixd = pixCreate(w, h, outdepth)) == NULL) { + LEPT_FREE(qtab); + pixcmapDestroy(&cmap); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixSetColormap(pixd, cmap); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* If there is a colormap in the src, remove it */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + if (outdepth == 2) { + thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); + } else if (outdepth == 4) { + thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); + } else { + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linet = datat + i * wplt; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linet, j); + newval = qtab[val]; + SET_DATA_BYTE(lined, j, newval); + } + } + } + + LEPT_FREE(qtab); + pixDestroy(&pixt); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Quantization tables for linear thresholds of grayscale images * + *----------------------------------------------------------------------*/ +/*! + * \brief makeGrayQuantIndexTable() + * + * \param[in] nlevels number of output levels + * \return table maps input gray level to colormap index, + * or NULL on error + *
+ * Notes:
+ *      (1) 'nlevels' is some number between 2 and 256 (typically 8 or less).
+ *      (2) The table is typically used for quantizing 2, 4 and 8 bpp
+ *          grayscale src pix, and generating a colormapped dest pix.
+ * 
+ */ +l_int32 * +makeGrayQuantIndexTable(l_int32 nlevels) +{ +l_int32 *tab; +l_int32 i, j, thresh; + + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) { + for (j = 0; j < nlevels; j++) { + thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); + if (i <= thresh) { + tab[i] = j; +/* fprintf(stderr, "tab[%d] = %d\n", i, j); */ + break; + } + } + } + return tab; +} + + +/*! + * \brief makeGrayQuantTargetTable() + * + * \param[in] nlevels number of output levels + * \param[in] depth of dest pix, in bpp; 2, 4 or 8 bpp + * \return table maps input gray level to thresholded gray level, + * or NULL on error + * + *
+ * Notes:
+ *      (1) nlevels is some number between 2 and 2^(depth)
+ *      (2) The table is used in two similar ways:
+ *           ~ for 8 bpp, it quantizes to a given number of target levels
+ *           ~ for 2 and 4 bpp, it thresholds to appropriate target values
+ *             that will use the full dynamic range of the dest pix.
+ *      (3) For depth = 8, the number of thresholds chosen is
+ *          ('nlevels' - 1), and the 'nlevels' values stored in the
+ *          table are at the two at the extreme ends, (0, 255), plus
+ *          plus ('nlevels' - 2) values chosen at equal intervals between.
+ *          For example, for depth = 8 and 'nlevels' = 3, the two
+ *          threshold values are 3f and bf, and the three target pixel
+ *          values are 0, 7f and ff.
+ *      (4) For depth < 8, we ignore nlevels, and always use the maximum
+ *          number of levels, which is 2^(depth).
+ *          If you want nlevels < the maximum number, you should always
+ *          use a colormap.
+ * 
+ */ +static l_int32 * +makeGrayQuantTargetTable(l_int32 nlevels, + l_int32 depth) +{ +l_int32 *tab; +l_int32 i, j, thresh, maxval, quantval; + + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + maxval = (1 << depth) - 1; + if (depth < 8) + nlevels = 1 << depth; + for (i = 0; i < 256; i++) { + for (j = 0; j < nlevels; j++) { + thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); + if (i <= thresh) { + quantval = maxval * j / (nlevels - 1); + tab[i] = quantval; +/* fprintf(stderr, "tab[%d] = %d\n", i, tab[i]); */ + break; + } + } + } + return tab; +} + + +/*----------------------------------------------------------------------* + * Quantization table for arbitrary thresholding of grayscale images * + *----------------------------------------------------------------------*/ +/*! + * \brief makeGrayQuantTableArb() + * + * \param[in] na numa of bin boundaries + * \param[in] outdepth of colormap: 1, 2, 4 or 8 + * \param[out] ptab table mapping input gray level to cmap index + * \param[out] pcmap colormap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The number of bins is the count of %na + 1.
+ *      (2) The bin boundaries in na must be sorted in increasing order.
+ *      (3) The table is an inverse colormap: it maps input gray level
+ *          to colormap index (the bin number).
+ *      (4) The colormap generated here has quantized values at the
+ *          center of each bin.  If you want to use the average gray
+ *          value of pixels within the bin, discard the colormap and
+ *          compute it using makeGrayQuantColormapArb().
+ *      (5) Returns an error if there are not enough levels in the
+ *          output colormap for the number of bins.  The number
+ *          of bins must not exceed 2^outdepth.
+ * 
+ */ +l_ok +makeGrayQuantTableArb(NUMA *na, + l_int32 outdepth, + l_int32 **ptab, + PIXCMAP **pcmap) +{ +l_int32 i, j, n, jstart, ave, val; +l_int32 *tab; +PIXCMAP *cmap; + + PROCNAME("makeGrayQuantTableArb"); + + if (!ptab) + return ERROR_INT("&tab not defined", procName, 1); + *ptab = NULL; + if (!pcmap) + return ERROR_INT("&cmap not defined", procName, 1); + *pcmap = NULL; + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (n + 1 > (1 << outdepth)) + return ERROR_INT("more bins than cmap levels", procName, 1); + + if ((cmap = pixcmapCreate(outdepth)) == NULL) + return ERROR_INT("cmap not made", procName, 1); + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + *ptab = tab; + *pcmap = cmap; + + /* First n bins */ + jstart = 0; + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &val); + ave = (jstart + val) / 2; + pixcmapAddColor(cmap, ave, ave, ave); + for (j = jstart; j < val; j++) + tab[j] = i; + jstart = val; + } + + /* Last bin */ + ave = (jstart + 255) / 2; + pixcmapAddColor(cmap, ave, ave, ave); + for (j = jstart; j < 256; j++) + tab[j] = n; + + return 0; +} + + +/*! + * \brief makeGrayQuantColormapArb() + * + * \param[in] pixs 8 bpp + * \param[in] tab table mapping input gray level to cmap index + * \param[in] outdepth of colormap: 1, 2, 4 or 8 + * \param[out] pcmap colormap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The table is a 256-entry inverse colormap: it maps input gray
+ *          level to colormap index (the bin number).  It is computed
+ *          using makeGrayQuantTableArb().
+ *      (2) The colormap generated here has quantized values at the
+ *          average gray value of the pixels that are in each bin.
+ *      (3) Returns an error if there are not enough levels in the
+ *          output colormap for the number of bins.  The number
+ *          of bins must not exceed 2^outdepth.
+ * 
+ */ +static l_int32 +makeGrayQuantColormapArb(PIX *pixs, + l_int32 *tab, + l_int32 outdepth, + PIXCMAP **pcmap) +{ +l_int32 i, j, index, w, h, d, nbins, wpl, factor, val; +l_int32 *bincount, *binave, *binstart; +l_uint32 *line, *data; + + PROCNAME("makeGrayQuantColormapArb"); + + if (!pcmap) + return ERROR_INT("&cmap not defined", procName, 1); + *pcmap = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return ERROR_INT("pixs not 8 bpp", procName, 1); + if (!tab) + return ERROR_INT("tab not defined", procName, 1); + nbins = tab[255] + 1; + if (nbins > (1 << outdepth)) + return ERROR_INT("more bins than cmap levels", procName, 1); + + /* Find the count and weighted count for each bin */ + if ((bincount = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32))) == NULL) + return ERROR_INT("calloc fail for bincount", procName, 1); + if ((binave = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32))) == NULL) { + LEPT_FREE(bincount); + return ERROR_INT("calloc fail for binave", procName, 1); + } + factor = (l_int32)(sqrt((l_float64)(w * h) / 30000.) + 0.5); + factor = L_MAX(1, factor); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + val = GET_DATA_BYTE(line, j); + bincount[tab[val]]++; + binave[tab[val]] += val; + } + } + + /* Find the smallest gray values in each bin */ + binstart = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); + for (i = 1, index = 1; i < 256; i++) { + if (tab[i] < index) continue; + if (tab[i] == index) + binstart[index++] = i; + } + + /* Get the averages. If there are no samples in a bin, use + * the center value of the bin. */ + *pcmap = pixcmapCreate(outdepth); + for (i = 0; i < nbins; i++) { + if (bincount[i]) { + val = binave[i] / bincount[i]; + } else { /* no samples in the bin */ + if (i < nbins - 1) + val = (binstart[i] + binstart[i + 1]) / 2; + else /* last bin */ + val = (binstart[i] + 255) / 2; + } + pixcmapAddColor(*pcmap, val, val, val); + } + + LEPT_FREE(bincount); + LEPT_FREE(binave); + LEPT_FREE(binstart); + return 0; +} + + +/*--------------------------------------------------------------------* + * Thresholding from 32 bpp rgb to 1 bpp * + *--------------------------------------------------------------------*/ +/*! + * \brief pixGenerateMaskByBand32() + * + * \param[in] pixs 32 bpp + * \param[in] refval reference rgb value + * \param[in] delm max amount below the ref value for any component + * \param[in] delp max amount above the ref value for any component + * \param[in] fractm fractional amount below ref value for all components + * \param[in] fractp fractional amount above ref value for all components + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
+ *          the fg pixels in the mask within a band of rgb values
+ *          surrounding %refval.  The band can be chosen in two ways
+ *          for each component:
+ *          (a) Use (%delm, %delp) to specify how many levels down and up
+ *          (b) Use (%fractm, %fractp) to specify the fractional
+ *              distance toward 0 and 255, respectively.
+ *          Note that %delm and %delp must be in [0 ... 255], whereas
+ *          %fractm and %fractp must be in [0.0 - 1.0].
+ *      (2) Either (%delm, %delp) or (%fractm, %fractp) can be used.
+ *          Set each value in the other pair to 0.
+ * 
+ */ +PIX * +pixGenerateMaskByBand32(PIX *pixs, + l_uint32 refval, + l_int32 delm, + l_int32 delp, + l_float32 fractm, + l_float32 fractp) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_int32 rref, gref, bref, rval, gval, bval; +l_int32 rmin, gmin, bmin, rmax, gmax, bmax; +l_uint32 pixel; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixGenerateMaskByBand32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("not 32 bpp", procName, NULL); + if (delm < 0 || delp < 0) + return (PIX *)ERROR_PTR("delm and delp must be >= 0", procName, NULL); + if (fractm < 0.0 || fractm > 1.0 || fractp < 0.0 || fractp > 1.0) + return (PIX *)ERROR_PTR("fractm and/or fractp invalid", procName, NULL); + + extractRGBValues(refval, &rref, &gref, &bref); + if (fractm == 0.0 && fractp == 0.0) { + rmin = rref - delm; + gmin = gref - delm; + bmin = bref - delm; + rmax = rref + delm; + gmax = gref + delm; + bmax = bref + delm; + } else if (delm == 0 && delp == 0) { + rmin = (l_int32)((1.0 - fractm) * rref); + gmin = (l_int32)((1.0 - fractm) * gref); + bmin = (l_int32)((1.0 - fractm) * bref); + rmax = rref + (l_int32)(fractp * (255 - rref)); + gmax = gref + (l_int32)(fractp * (255 - gref)); + bmax = bref + (l_int32)(fractp * (255 - bref)); + } else { + L_ERROR("bad input: either (delm, delp) or (fractm, fractp) " + "must be 0\n", procName); + return NULL; + } + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = lines[j]; + rval = (pixel >> L_RED_SHIFT) & 0xff; + if (rval < rmin || rval > rmax) + continue; + gval = (pixel >> L_GREEN_SHIFT) & 0xff; + if (gval < gmin || gval > gmax) + continue; + bval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (bval < bmin || bval > bmax) + continue; + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*! + * \brief pixGenerateMaskByDiscr32() + * + * \param[in] pixs 32 bpp + * \param[in] refval1 reference rgb value + * \param[in] refval2 reference rgb value + * \param[in] distflag L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a 1 bpp mask pixd, the same size as pixs, where
+ *          the fg pixels in the mask are those where the pixel in pixs
+ *          is "closer" to refval1 than to refval2.
+ *      (2) "Closer" can be defined in several ways, such as:
+ *            ~ manhattan distance (L1)
+ *            ~ euclidean distance (L2)
+ *            ~ majority vote of the individual components
+ *          Here, we have a choice of L1 or L2.
+ * 
+ */ +PIX * +pixGenerateMaskByDiscr32(PIX *pixs, + l_uint32 refval1, + l_uint32 refval2, + l_int32 distflag) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_int32 rref1, gref1, bref1, rref2, gref2, bref2, rval, gval, bval; +l_uint32 pixel, dist1, dist2; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixGenerateMaskByDiscr32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("not 32 bpp", procName, NULL); + if (distflag != L_MANHATTAN_DISTANCE && distflag != L_EUCLIDEAN_DISTANCE) + return (PIX *)ERROR_PTR("invalid distflag", procName, NULL); + + extractRGBValues(refval1, &rref1, &gref1, &bref1); + extractRGBValues(refval2, &rref2, &gref2, &bref2); + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + pixel = lines[j]; + extractRGBValues(pixel, &rval, &gval, &bval); + if (distflag == L_MANHATTAN_DISTANCE) { + dist1 = L_ABS(rref1 - rval); + dist2 = L_ABS(rref2 - rval); + dist1 += L_ABS(gref1 - gval); + dist2 += L_ABS(gref2 - gval); + dist1 += L_ABS(bref1 - bval); + dist2 += L_ABS(bref2 - bval); + } else { + dist1 = (rref1 - rval) * (rref1 - rval); + dist2 = (rref2 - rval) * (rref2 - rval); + dist1 += (gref1 - gval) * (gref1 - gval); + dist2 += (gref2 - gval) * (gref2 - gval); + dist1 += (bref1 - bval) * (bref1 - bval); + dist2 += (bref2 - bval) * (bref2 - bval); + } + if (dist1 < dist2) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*----------------------------------------------------------------------* + * Histogram-based grayscale quantization * + *----------------------------------------------------------------------*/ +/*! + * \brief pixGrayQuantFromHisto() + * + * \param[in] pixd [optional] quantized pix with cmap; can be null + * \param[in] pixs 8 bpp gray input pix; not cmapped + * \param[in] pixm [optional] mask over pixels in pixs to quantize + * \param[in] minfract minimum fraction of pixels in a set of adjacent + * histo bins that causes the set to be automatically + * set aside as a color in the colormap; must be + * at least 0.01 + * \param[in] maxsize maximum number of adjacent bins allowed to represent + * a color, regardless of the population of pixels + * in the bins; must be at least 2 + * \return pixd 8 bpp, cmapped, or NULL on error + * + *
+ * Notes:
+ *      (1) This is useful for quantizing images with relatively few
+ *          colors, but which may have both color and gray pixels.
+ *          If there are color pixels, it is assumed that an input
+ *          rgb image has been color quantized first so that:
+ *            ~ pixd has a colormap describing the color pixels
+ *            ~ pixm is a mask over the non-color pixels in pixd
+ *            ~ the colormap in pixd, and the color pixels in pixd,
+ *              have been repacked to go from 0 to n-1 (n colors)
+ *          If there are no color pixels, pixd and pixm are both null,
+ *          and all pixels in pixs are quantized to gray.
+ *      (2) A 256-entry histogram is built of the gray values in pixs.
+ *          If pixm exists, the pixels contributing to the histogram are
+ *          restricted to the fg of pixm.  A colormap and LUT are generated
+ *          from this histogram.  We break up the array into a set
+ *          of intervals, each one constituting a color in the colormap:
+ *          An interval is identified by summing histogram bins until
+ *          either the sum equals or exceeds the %minfract of the total
+ *          number of pixels, or the span itself equals or exceeds %maxsize.
+ *          The color of each bin is always an average of the pixels
+ *          that constitute it.
+ *      (3) Note that we do not specify the number of gray colors in
+ *          the colormap.  Instead, we specify two parameters that
+ *          describe the accuracy of the color assignments; this and
+ *          the actual image determine the number of resulting colors.
+ *      (4) If a mask exists and it is not the same size as pixs, make
+ *          a new mask the same size as pixs, with the original mask
+ *          aligned at the UL corners.  Set all additional pixels
+ *          in the (larger) new mask set to 1, causing those pixels
+ *          in pixd to be set as gray.
+ *      (5) We estimate the total number of colors (color plus gray);
+ *          if it exceeds 255, return null.
+ * 
+ */ +PIX * +pixGrayQuantFromHisto(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_float32 minfract, + l_int32 maxsize) +{ +l_int32 w, h, wd, hd, wm, hm, wpls, wplm, wpld; +l_int32 nc, nestim, i, j, vals, vald; +l_int32 *lut; +l_uint32 *datas, *datam, *datad, *lines, *linem, *lined; +NUMA *na; +PIX *pixmr; /* resized mask */ +PIXCMAP *cmap; + + PROCNAME("pixGrayQuantFromHisto"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (minfract < 0.01) { + L_WARNING("minfract < 0.01; setting to 0.05\n", procName); + minfract = 0.05; + } + if (maxsize < 2) { + L_WARNING("maxsize < 2; setting to 10\n", procName); + maxsize = 10; + } + if ((pixd && !pixm) || (!pixd && pixm)) + return (PIX *)ERROR_PTR("(pixd,pixm) not defined together", + procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm not 1 bpp", procName, NULL); + if ((cmap = pixGetColormap(pixd)) == NULL) + return (PIX *)ERROR_PTR("pixd not cmapped", procName, NULL); + pixGetDimensions(pixd, &wd, &hd, NULL); + if (w != wd || h != hd) + return (PIX *)ERROR_PTR("pixs, pixd sizes differ", procName, NULL); + nc = pixcmapGetCount(cmap); + nestim = nc + (l_int32)(1.5 * 255 / maxsize); + fprintf(stderr, "nestim = %d\n", nestim); + if (nestim > 255) { + L_ERROR("Estimate %d colors!\n", procName, nestim); + return (PIX *)ERROR_PTR("probably too many colors", procName, NULL); + } + pixGetDimensions(pixm, &wm, &hm, NULL); + if (w != wm || h != hm) { /* resize the mask */ + L_WARNING("mask and dest sizes not equal\n", procName); + pixmr = pixCreateNoInit(w, h, 1); + pixRasterop(pixmr, 0, 0, wm, hm, PIX_SRC, pixm, 0, 0); + pixRasterop(pixmr, wm, 0, w - wm, h, PIX_SET, NULL, 0, 0); + pixRasterop(pixmr, 0, hm, wm, h - hm, PIX_SET, NULL, 0, 0); + } else { + pixmr = pixClone(pixm); + } + } else { + pixd = pixCreateTemplate(pixs); + cmap = pixcmapCreate(8); + pixSetColormap(pixd, cmap); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Use original mask, if it exists, to select gray pixels */ + na = pixGetGrayHistogramMasked(pixs, pixm, 0, 0, 1); + + /* Fill out the cmap with gray colors, and generate the lut + * for pixel assignment. Issue a warning on failure. */ + if (numaFillCmapFromHisto(na, cmap, minfract, maxsize, &lut)) + L_ERROR("ran out of colors in cmap!\n", procName); + numaDestroy(&na); + + /* Assign the gray pixels to their cmap indices */ + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + if (!pixm) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + vald = lut[vals]; + SET_DATA_BYTE(lined, j, vald); + } + } + LEPT_FREE(lut); + return pixd; + } + + datam = pixGetData(pixmr); + wplm = pixGetWpl(pixmr); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (!GET_DATA_BIT(linem, j)) + continue; + vals = GET_DATA_BYTE(lines, j); + vald = lut[vals]; + SET_DATA_BYTE(lined, j, vald); + } + } + pixDestroy(&pixmr); + LEPT_FREE(lut); + return pixd; +} + + +/*! + * \brief numaFillCmapFromHisto() + * + * \param[in] na histogram of gray values + * \param[in] cmap 8 bpp cmap, possibly initialized with color value + * \param[in] minfract minimum fraction of pixels in a set of adjacent + * histo bins that causes the set to be automatically + * set aside as a color in the colormap; must be + * at least 0.01 + * \param[in] maxsize maximum number of adjacent bins allowed to represent + * a color, regardless of the population of pixels + * in the bins; must be at least 2 + * \param[out] plut lookup table from gray value to colormap index + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This static function must be called from pixGrayQuantFromHisto()
+ * 
+ */ +static l_int32 +numaFillCmapFromHisto(NUMA *na, + PIXCMAP *cmap, + l_float32 minfract, + l_int32 maxsize, + l_int32 **plut) +{ +l_int32 mincount, index, sum, wtsum, span, istart, i, val, ret; +l_int32 *iahisto, *lut; +l_float32 total; + + PROCNAME("numaFillCmapFromHisto"); + + if (!plut) + return ERROR_INT("&lut not defined", procName, 1); + *plut = NULL; + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + + numaGetSum(na, &total); + mincount = (l_int32)(minfract * total); + iahisto = numaGetIArray(na); + lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + *plut = lut; + index = pixcmapGetCount(cmap); /* start with number of colors + * already reserved */ + + /* March through, associating colors with sets of adjacent + * gray levels. During the process, the LUT that gives + * the colormap index for each gray level is computed. + * To complete a color, either the total count must equal + * or exceed %mincount, or the current span of colors must + * equal or exceed %maxsize. An empty span is not converted + * into a color; it is simply ignored. When a span is completed for a + * color, the weighted color in the span is added to the colormap. */ + sum = 0; + wtsum = 0; + istart = 0; + ret = 0; + for (i = 0; i < 256; i++) { + lut[i] = index; + sum += iahisto[i]; + wtsum += i * iahisto[i]; + span = i - istart + 1; + if (sum < mincount && span < maxsize) + continue; + + if (sum == 0) { /* empty span; don't save */ + istart = i + 1; + continue; + } + + /* Found new color; sum > 0 */ + val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); + ret = pixcmapAddColor(cmap, val, val, val); + istart = i + 1; + sum = 0; + wtsum = 0; + index++; + } + if (istart < 256 && sum > 0) { /* last one */ + span = 256 - istart; + val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); + ret = pixcmapAddColor(cmap, val, val, val); + } + + LEPT_FREE(iahisto); + return ret; +} + + +/*----------------------------------------------------------------------* + * Color quantize grayscale image using existing colormap * + *----------------------------------------------------------------------*/ +/*! + * \brief pixGrayQuantFromCmap() + * + * \param[in] pixs 8 bpp grayscale without cmap + * \param[in] cmap to quantize to; of dest pix + * \param[in] mindepth minimum depth of pixd: can be 2, 4 or 8 bpp + * \return pixd 2, 4 or 8 bpp, colormapped, or NULL on error + * + *
+ * Notes:
+ *      (1) In use, pixs is an 8 bpp grayscale image without a colormap.
+ *          If there is an existing colormap, a warning is issued and
+ *          a copy of the input pixs is returned.
+ * 
+ */ +PIX * +pixGrayQuantFromCmap(PIX *pixs, + PIXCMAP *cmap, + l_int32 mindepth) +{ +l_int32 i, j, index, w, h, d, depth, wpls, wpld; +l_int32 hascolor, vals, vald; +l_int32 *tab; +l_uint32 *datas, *datad, *lines, *lined; +PIXCMAP *cmapd; +PIX *pixd; + + PROCNAME("pixGrayQuantFromCmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) { + L_WARNING("pixs already has a colormap; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (!cmap) + return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); + if (mindepth != 2 && mindepth != 4 && mindepth != 8) + return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); + + /* Make sure the colormap is gray */ + pixcmapHasColor(cmap, &hascolor); + if (hascolor) { + L_WARNING("Converting colormap colors to gray\n", procName); + cmapd = pixcmapColorToGray(cmap, 0.3, 0.5, 0.2); + } else { + cmapd = pixcmapCopy(cmap); + } + + /* Make LUT into colormap */ + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) { + pixcmapGetNearestGrayIndex(cmapd, i, &index); + tab[i] = index; + } + + pixcmapGetMinDepth(cmap, &depth); + depth = L_MAX(depth, mindepth); + pixd = pixCreate(w, h, depth); + pixSetColormap(pixd, cmapd); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + vald = tab[vals]; + if (depth == 2) + SET_DATA_DIBIT(lined, j, vald); + else if (depth == 4) + SET_DATA_QBIT(lined, j, vald); + else /* depth == 8 */ + SET_DATA_BYTE(lined, j, vald); + } + } + + LEPT_FREE(tab); + return pixd; +} + + +#if 0 /* Documentation */ +/*--------------------------------------------------------------------* + * Implementation of binarization by dithering using LUTs * + * It is archived here. * + *--------------------------------------------------------------------*/ +/*! + * \brief pixDitherToBinaryLUT() + * + * \param[in] pixs + * \param[in] lowerclip lower clip distance to black; use -1 for default + * \param[in] upperclip upper clip distance to white; use -1 for default + * \return pixd dithered binary, or NULL on error + * + * We don't need two implementations of Floyd-Steinberg dithering, + * and this one with LUTs is a little more complicated than + * pixDitherToBinary(). It uses three lookup tables to generate the + * output pixel value and the excess or deficit carried over to the + * neighboring pixels. It's here for pedagogical reasons only. + */ +PIX * +pixDitherToBinaryLUT(PIX *pixs, + l_int32 lowerclip, + l_int32 upperclip) +{ +l_int32 w, h, d, wplt, wpld; +l_int32 *tabval, *tab38, *tab14; +l_uint32 *datat, *datad; +l_uint32 *bufs1, *bufs2; +PIX *pixt, *pixd; + + PROCNAME("pixDitherToBinaryLUT"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); + if (lowerclip < 0) + lowerclip = DEFAULT_CLIP_LOWER_1; + if (upperclip < 0) + upperclip = DEFAULT_CLIP_UPPER_1; + + if ((pixd = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Remove colormap if it exists */ + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Two line buffers, 1 for current line and 2 for next line */ + bufs1 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + bufs2 = (l_uint32 *)LEPT_CALLOC(wplt, sizeof(l_uint32)); + if (!bufs1 || !bufs2) { + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + pixDestroy(&pixd); + pixDestroy(&pixt); + return (PIX *)ERROR_PTR("bufs1, bufs2 not both made", procName, NULL); + } + + /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ + make8To1DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); + + ditherToBinaryLUTLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, + tabval, tab38, tab14); + + LEPT_FREE(bufs1); + LEPT_FREE(bufs2); + LEPT_FREE(tabval); + LEPT_FREE(tab38); + LEPT_FREE(tab14); + pixDestroy(&pixt); + return pixd; +} + +/*! + * \brief ditherToBinaryLUTLow() + * + * Low-level function for doing Floyd-Steinberg error diffusion + * dithering from 8 bpp (datas) to 1 bpp (datad). Two source + * line buffers, bufs1 and bufs2, are provided, along with three + * 256-entry lookup tables: tabval gives the output pixel value, + * tab38 gives the extra (plus or minus) transferred to the pixels + * directly to the left and below, and tab14 gives the extra + * transferred to the diagonal below. The choice of 3/8 and 1/4 + * is traditional but arbitrary when you use a lookup table; the + * only constraint is that the sum is 1. See other comments below. + */ +void +ditherToBinaryLUTLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 *tabval, + l_int32 *tab38, + l_int32 *tab14) +{ +l_int32 i; +l_uint32 *lined; + + /* do all lines except last line */ + memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ + for (i = 0; i < h - 1; i++) { + memcpy(bufs1, bufs2, 4 * wpls); + memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); + lined = datad + i * wpld; + ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, + tabval, tab38, tab14, 0); + } + + /* do last line */ + memcpy(bufs1, bufs2, 4 * wpls); + lined = datad + (h - 1) * wpld; + ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); + return; +} + +/*! + * \brief ditherToBinaryLineLUTLow() + * + * \param[in] lined ptr to beginning of dest line + * \param[in] w width of image in pixels + * \param[in] bufs1 buffer of current source line + * \param[in] bufs2 buffer of next source line + * \param[in] tabval value to assign for current pixel + * \param[in] tab38 excess value to give to neighboring 3/8 pixels + * \param[in] tab14 excess value to give to neighboring 1/4 pixel + * \param[in] lastlineflag 0 if not last dest line, 1 if last dest line + * \return void + */ +void +ditherToBinaryLineLUTLow(l_uint32 *lined, + l_int32 w, + l_uint32 *bufs1, + l_uint32 *bufs2, + l_int32 *tabval, + l_int32 *tab38, + l_int32 *tab14, + l_int32 lastlineflag) +{ +l_int32 j; +l_int32 oval, tab38val, tab14val; +l_uint8 rval, bval, dval; + + if (lastlineflag == 0) { + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + if (tabval[oval]) + SET_DATA_BIT(lined, j); + rval = GET_DATA_BYTE(bufs1, j + 1); + bval = GET_DATA_BYTE(bufs2, j); + dval = GET_DATA_BYTE(bufs2, j + 1); + tab38val = tab38[oval]; + if (tab38val == 0) + continue; + tab14val = tab14[oval]; + if (tab38val < 0) { + rval = L_MAX(0, rval + tab38val); + bval = L_MAX(0, bval + tab38val); + dval = L_MAX(0, dval + tab14val); + } else { + rval = L_MIN(255, rval + tab38val); + bval = L_MIN(255, bval + tab38val); + dval = L_MIN(255, dval + tab14val); + } + SET_DATA_BYTE(bufs1, j + 1, rval); + SET_DATA_BYTE(bufs2, j, bval); + SET_DATA_BYTE(bufs2, j + 1, dval); + } + + /* do last column: j = w - 1 */ + oval = GET_DATA_BYTE(bufs1, j); + if (tabval[oval]) + SET_DATA_BIT(lined, j); + bval = GET_DATA_BYTE(bufs2, j); + tab38val = tab38[oval]; + if (tab38val < 0) { + bval = L_MAX(0, bval + tab38val); + SET_DATA_BYTE(bufs2, j, bval); + } else if (tab38val > 0 ) { + bval = L_MIN(255, bval + tab38val); + SET_DATA_BYTE(bufs2, j, bval); + } + } else { /* lastlineflag == 1 */ + for (j = 0; j < w - 1; j++) { + oval = GET_DATA_BYTE(bufs1, j); + if (tabval[oval]) + SET_DATA_BIT(lined, j); + rval = GET_DATA_BYTE(bufs1, j + 1); + tab38val = tab38[oval]; + if (tab38val == 0) + continue; + if (tab38val < 0) + rval = L_MAX(0, rval + tab38val); + else + rval = L_MIN(255, rval + tab38val); + SET_DATA_BYTE(bufs1, j + 1, rval); + } + + /* do last pixel: (i, j) = (h - 1, w - 1) */ + oval = GET_DATA_BYTE(bufs1, j); + if (tabval[oval]) + SET_DATA_BIT(lined, j); + } + + return; +} + +/*! + * \brief make8To1DitherTables() + * + * \param[out] ptabval value assigned to output pixel; 0 or 1 + * \param[out] ptab38 amount propagated to pixels left and below + * \param[out] ptab14 amount propagated to pixel to left and down + * \param[in] lowerclip values near 0 where the excess is not propagated + * \param[in] upperclip values near 255 where the deficit is not propagated + * + * \return 0 if OK, 1 on error + */ +l_ok +make8To1DitherTables(l_int32 **ptabval, + l_int32 **ptab38, + l_int32 **ptab14, + l_int32 lowerclip, + l_int32 upperclip) +{ +l_int32 i; +l_int32 *tabval, *tab38, *tab14; + + PROCNAME("make8To1DitherTables"); + + if (ptabval) *ptabval = NULL; + if (ptab38) *ptab38 = NULL; + if (ptab14) *ptab14 = NULL; + if (!ptabval || !ptab38 || !ptab14) + return ERROR_INT("table ptrs not all defined", procName, 1); + + /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ + tabval = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + tab38 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + tab14 = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (!tabval || !tab38 || !tab14) + return ERROR_INT("calloc failure to make small table", procName, 1); + *ptabval = tabval; + *ptab38 = tab38; + *ptab14 = tab14; + + for (i = 0; i < 256; i++) { + if (i <= lowerclip) { + tabval[i] = 1; + tab38[i] = 0; + tab14[i] = 0; + } else if (i < 128) { + tabval[i] = 1; + tab38[i] = (3 * i + 4) / 8; + tab14[i] = (i + 2) / 4; + } else if (i < 255 - upperclip) { + tabval[i] = 0; + tab38[i] = (3 * (i - 255) + 4) / 8; + tab14[i] = ((i - 255) + 2) / 4; + } else { /* i >= 255 - upperclip */ + tabval[i] = 0; + tab38[i] = 0; + tab14[i] = 0; + } + } + + return 0; +} +#endif /* Documentation */ diff --git a/3rdparty/hgOCR/leptonica/heap.c b/3rdparty/hgOCR/leptonica/heap.c new file mode 100644 index 00000000..e089a96c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/heap.c @@ -0,0 +1,545 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file heap.c + *
+ *
+ *      Create/Destroy L_Heap
+ *          L_HEAP         *lheapCreate()
+ *          void           *lheapDestroy()
+ *
+ *      Operations to add/remove to/from the heap
+ *          l_int32         lheapAdd()
+ *          static l_int32  lheapExtendArray()
+ *          void           *lheapRemove()
+ *
+ *      Heap operations
+ *          l_int32         lheapSwapUp()
+ *          l_int32         lheapSwapDown()
+ *          l_int32         lheapSort()
+ *          l_int32         lheapSortStrictOrder()
+ *
+ *      Accessors
+ *          l_int32         lheapGetCount()
+ *
+ *      Debug output
+ *          l_int32         lheapPrint()
+ *
+ *    The L_Heap is useful to implement a priority queue, that is sorted
+ *    on a key in each element of the heap.  The heap is an array
+ *    of nearly arbitrary structs, with a l_float32 the first field.
+ *    This field is the key on which the heap is sorted.
+ *
+ *    Internally, we keep track of the heap size, n.  The item at the
+ *    root of the heap is at the head of the array.  Items are removed
+ *    from the head of the array and added to the end of the array.
+ *    When an item is removed from the head, the item at the end
+ *    of the array is moved to the head.  When items are either
+ *    added or removed, it is usually necessary to swap array items
+ *    to restore the heap order.  It is guaranteed that the number
+ *    of swaps does not exceed log(n).
+ *
+ *    --------------------------  N.B.  ------------------------------
+ *    The items on the heap (or, equivalently, in the array) are cast
+ *    to void*.  Their key is a l_float32, and it is REQUIRED that the
+ *    key be the first field in the struct.  That allows us to get the
+ *    key by simply dereferencing the struct.  Alternatively, we could
+ *    choose (but don't) to pass an application-specific comparison
+ *    function into the heap operation functions.
+ *    --------------------------  N.B.  ------------------------------
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + +#define SWAP_ITEMS(i, j) { void *tempitem = lh->array[(i)]; \ + lh->array[(i)] = lh->array[(j)]; \ + lh->array[(j)] = tempitem; } + + /* Static function */ +static l_int32 lheapExtendArray(L_HEAP *lh); + + +/*--------------------------------------------------------------------------* + * L_Heap create/destroy * + *--------------------------------------------------------------------------*/ +/*! + * \brief lheapCreate() + * + * \param[in] n size of ptr array to be alloc'd; use 0 for default + * \param[in] direction L_SORT_INCREASING, L_SORT_DECREASING + * \return lheap, or NULL on error + */ +L_HEAP * +lheapCreate(l_int32 n, + l_int32 direction) +{ +L_HEAP *lh; + + PROCNAME("lheapCreate"); + + if (n < InitialPtrArraySize || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + /* Allocate ptr array and initialize counters. */ + lh = (L_HEAP *)LEPT_CALLOC(1, sizeof(L_HEAP)); + if ((lh->array = (void **)LEPT_CALLOC(n, sizeof(void *))) == NULL) { + lheapDestroy(&lh, FALSE); + return (L_HEAP *)ERROR_PTR("ptr array not made", procName, NULL); + } + lh->nalloc = n; + lh->n = 0; + lh->direction = direction; + return lh; +} + + +/*! + * \brief lheapDestroy() + * + * \param[in,out] plh will be set to null before returning + * \param[in] freeflag TRUE to free each remaining struct in the array + * \return void + * + *
+ * Notes:
+ *      (1) Use %freeflag == TRUE when the items in the array can be
+ *          simply destroyed using free.  If those items require their
+ *          own destroy function, they must be destroyed before
+ *          calling this function, and then this function is called
+ *          with %freeflag == FALSE.
+ *      (2) To destroy the lheap, we destroy the ptr array, then
+ *          the lheap, and then null the contents of the input ptr.
+ * 
+ */ +void +lheapDestroy(L_HEAP **plh, + l_int32 freeflag) +{ +l_int32 i; +L_HEAP *lh; + + PROCNAME("lheapDestroy"); + + if (plh == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((lh = *plh) == NULL) + return; + + if (freeflag) { /* free each struct in the array */ + for (i = 0; i < lh->n; i++) + LEPT_FREE(lh->array[i]); + } else if (lh->n > 0) { /* freeflag == FALSE but elements exist on array */ + L_WARNING("memory leak of %d items in lheap!\n", procName, lh->n); + } + + if (lh->array) + LEPT_FREE(lh->array); + LEPT_FREE(lh); + *plh = NULL; + + return; +} + +/*--------------------------------------------------------------------------* + * Accessors * + *--------------------------------------------------------------------------*/ +/*! + * \brief lheapAdd() + * + * \param[in] lh heap + * \param[in] item to be added to the tail of the heap + * \return 0 if OK, 1 on error + */ +l_ok +lheapAdd(L_HEAP *lh, + void *item) +{ + PROCNAME("lheapAdd"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + if (!item) + return ERROR_INT("item not defined", procName, 1); + + /* If necessary, expand the allocated array by a factor of 2 */ + if (lh->n >= lh->nalloc) + lheapExtendArray(lh); + + /* Add the item */ + lh->array[lh->n] = item; + lh->n++; + + /* Restore the heap */ + lheapSwapUp(lh, lh->n - 1); + return 0; +} + + +/*! + * \brief lheapExtendArray() + * + * \param[in] lh heap + * \return 0 if OK, 1 on error + */ +static l_int32 +lheapExtendArray(L_HEAP *lh) +{ + PROCNAME("lheapExtendArray"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + + if ((lh->array = (void **)reallocNew((void **)&lh->array, + sizeof(void *) * lh->nalloc, + 2 * sizeof(void *) * lh->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + lh->nalloc = 2 * lh->nalloc; + return 0; +} + + +/*! + * \brief lheapRemove() + * + * \param[in] lh heap + * \return ptr to item popped from the root of the heap, + * or NULL if the heap is empty or on error + */ +void * +lheapRemove(L_HEAP *lh) +{ +void *item; + + PROCNAME("lheapRemove"); + + if (!lh) + return (void *)ERROR_PTR("lh not defined", procName, NULL); + + if (lh->n == 0) + return NULL; + + item = lh->array[0]; + lh->array[0] = lh->array[lh->n - 1]; /* move last to the head */ + lh->array[lh->n - 1] = NULL; /* set ptr to null */ + lh->n--; + + lheapSwapDown(lh); /* restore the heap */ + return item; +} + + +/*! + * \brief lheapGetCount() + * + * \param[in] lh heap + * \return count, or 0 on error + */ +l_int32 +lheapGetCount(L_HEAP *lh) +{ + PROCNAME("lheapGetCount"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 0); + + return lh->n; +} + + + +/*--------------------------------------------------------------------------* + * Heap operations * + *--------------------------------------------------------------------------*/ +/*! + * \brief lheapSwapUp() + * + * \param[in] lh heap + * \param[in] index of array corresponding to node to be swapped up + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is called after a new item is put on the heap, at the
+ *          bottom of a complete tree.
+ *      (2) To regain the heap order, we let it bubble up,
+ *          iteratively swapping with its parent, until it either
+ *          reaches the root of the heap or it finds a parent that
+ *          is in the correct position already vis-a-vis the child.
+ * 
+ */ +l_ok +lheapSwapUp(L_HEAP *lh, + l_int32 index) +{ +l_int32 ip; /* index to heap for parent; 1 larger than array index */ +l_int32 ic; /* index into heap for child */ +l_float32 valp, valc; + + PROCNAME("lheapSwapUp"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + if (index < 0 || index >= lh->n) + return ERROR_INT("invalid index", procName, 1); + + ic = index + 1; /* index into heap: add 1 to array index */ + if (lh->direction == L_SORT_INCREASING) { + while (1) { + if (ic == 1) /* root of heap */ + break; + ip = ic / 2; + valc = *(l_float32 *)(lh->array[ic - 1]); + valp = *(l_float32 *)(lh->array[ip - 1]); + if (valp <= valc) + break; + SWAP_ITEMS(ip - 1, ic - 1); + ic = ip; + } + } else { /* lh->direction == L_SORT_DECREASING */ + while (1) { + if (ic == 1) /* root of heap */ + break; + ip = ic / 2; + valc = *(l_float32 *)(lh->array[ic - 1]); + valp = *(l_float32 *)(lh->array[ip - 1]); + if (valp >= valc) + break; + SWAP_ITEMS(ip - 1, ic - 1); + ic = ip; + } + } + return 0; +} + + +/*! + * \brief lheapSwapDown() + * + * \param[in] lh heap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is called after an item has been popped off the
+ *          root of the heap, and the last item in the heap has
+ *          been placed at the root.
+ *      (2) To regain the heap order, we let it bubble down,
+ *          iteratively swapping with one of its children.  For a
+ *          decreasing sort, it swaps with the largest child; for
+ *          an increasing sort, the smallest.  This continues until
+ *          it either reaches the lowest level in the heap, or the
+ *          parent finds that neither child should swap with it
+ *          (e.g., for a decreasing heap, the parent is larger
+ *          than or equal to both children).
+ * 
+ */ +l_ok +lheapSwapDown(L_HEAP *lh) +{ +l_int32 ip; /* index to heap for parent; 1 larger than array index */ +l_int32 icr, icl; /* index into heap for left/right children */ +l_float32 valp, valcl, valcr; + + PROCNAME("lheapSwapDown"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + if (lheapGetCount(lh) < 1) + return 0; + + ip = 1; /* index into top of heap: corresponds to array[0] */ + if (lh->direction == L_SORT_INCREASING) { + while (1) { + icl = 2 * ip; + if (icl > lh->n) + break; + valp = *(l_float32 *)(lh->array[ip - 1]); + valcl = *(l_float32 *)(lh->array[icl - 1]); + icr = icl + 1; + if (icr > lh->n) { /* only a left child; no iters below */ + if (valp > valcl) + SWAP_ITEMS(ip - 1, icl - 1); + break; + } else { /* both children exist; swap with the smallest if bigger */ + valcr = *(l_float32 *)(lh->array[icr - 1]); + if (valp <= valcl && valp <= valcr) /* smaller than both */ + break; + if (valcl <= valcr) { /* left smaller; swap */ + SWAP_ITEMS(ip - 1, icl - 1); + ip = icl; + } else { /* right smaller; swap */ + SWAP_ITEMS(ip - 1, icr - 1); + ip = icr; + } + } + } + } else { /* lh->direction == L_SORT_DECREASING */ + while (1) { + icl = 2 * ip; + if (icl > lh->n) + break; + valp = *(l_float32 *)(lh->array[ip - 1]); + valcl = *(l_float32 *)(lh->array[icl - 1]); + icr = icl + 1; + if (icr > lh->n) { /* only a left child; no iters below */ + if (valp < valcl) + SWAP_ITEMS(ip - 1, icl - 1); + break; + } else { /* both children exist; swap with the biggest if smaller */ + valcr = *(l_float32 *)(lh->array[icr - 1]); + if (valp >= valcl && valp >= valcr) /* bigger than both */ + break; + if (valcl >= valcr) { /* left bigger; swap */ + SWAP_ITEMS(ip - 1, icl - 1); + ip = icl; + } else { /* right bigger; swap */ + SWAP_ITEMS(ip - 1, icr - 1); + ip = icr; + } + } + } + } + + return 0; +} + + +/*! + * \brief lheapSort() + * + * \param[in] lh heap, with internal array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This sorts an array into heap order.  If the heap is already
+ *          in heap order for the direction given, this has no effect.
+ * 
+ */ +l_ok +lheapSort(L_HEAP *lh) +{ +l_int32 i; + + PROCNAME("lheapSort"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + + for (i = 0; i < lh->n; i++) + lheapSwapUp(lh, i); + + return 0; +} + + +/*! + * \brief lheapSortStrictOrder() + * + * \param[in] lh heap, with internal array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This sorts a heap into strict order.
+ *      (2) For each element, starting at the end of the array and
+ *          working forward, the element is swapped with the head
+ *          element and then allowed to swap down onto a heap of
+ *          size reduced by one.  The result is that the heap is
+ *          reversed but in strict order.  The array elements are
+ *          then reversed to put it in the original order.
+ * 
+ */ +l_ok +lheapSortStrictOrder(L_HEAP *lh) +{ +l_int32 i, index, size; + + PROCNAME("lheapSortStrictOrder"); + + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + + /* Start from a sorted heap */ + lheapSort(lh); + + size = lh->n; /* save the actual size */ + for (i = 0; i < size; i++) { + index = size - i; + SWAP_ITEMS(0, index - 1); + lh->n--; /* reduce the apparent heap size by 1 */ + lheapSwapDown(lh); + } + lh->n = size; /* restore the size */ + + for (i = 0; i < size / 2; i++) /* reverse */ + SWAP_ITEMS(i, size - i - 1); + + return 0; +} + + + +/*---------------------------------------------------------------------* + * Debug output * + *---------------------------------------------------------------------*/ +/*! + * \brief lheapPrint() + * + * \param[in] fp file stream + * \param[in] lh heap + * \return 0 if OK; 1 on error + */ +l_ok +lheapPrint(FILE *fp, + L_HEAP *lh) +{ +l_int32 i; + + PROCNAME("lheapPrint"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!lh) + return ERROR_INT("lh not defined", procName, 1); + + fprintf(fp, "\n L_Heap: nalloc = %d, n = %d, array = %p\n", + lh->nalloc, lh->n, lh->array); + for (i = 0; i < lh->n; i++) + fprintf(fp, "keyval[%d] = %f\n", i, *(l_float32 *)lh->array[i]); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/heap.h b/3rdparty/hgOCR/leptonica/heap.h new file mode 100644 index 00000000..d39b06b9 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/heap.h @@ -0,0 +1,87 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_HEAP_H +#define LEPTONICA_HEAP_H + +/*! + * \file heap.h + * + *
+ *      Expandable priority queue configured as a heap for arbitrary void* data
+ *
+ *      The L_Heap is used to implement a priority queue.  The elements
+ *      in the heap are ordered in either increasing or decreasing key value.
+ *      The key is a float field 'keyval' that is required to be
+ *      contained in the elements of the queue.
+ *
+ *      The heap is a simple binary tree with the following constraints:
+ *         - the key of each node is >= the keys of the two children
+ *         - the tree is complete, meaning that each level (1, 2, 4, ...)
+ *           is filled and the last level is filled from left to right
+ *
+ *      The tree structure is implicit in the queue array, with the
+ *      array elements numbered as a breadth-first search of the tree
+ *      from left to right.  It is thus guaranteed that the largest
+ *      (or smallest) key belongs to the first element in the array.
+ *
+ *      Heap sort is used to sort the array.  Once an array has been
+ *      sorted as a heap, it is convenient to use it as a priority queue,
+ *      because the min (or max) elements are always at the root of
+ *      the tree (element 0), and once removed, the heap can be
+ *      resorted in not more than log[n] steps, where n is the number
+ *      of elements on the heap.  Likewise, if an arbitrary element is
+ *      added to the end of the array A, the sorted heap can be restored
+ *      in not more than log[n] steps.
+ *
+ *      A L_Heap differs from a L_Queue in that the elements in the former
+ *      are sorted by a key.  Internally, the array is maintained
+ *      as a queue, with a pointer to the end of the array.  The
+ *      head of the array always remains at array[0].  The array is
+ *      maintained (sorted) as a heap.  When an item is removed from
+ *      the head, the last item takes its place (thus reducing the
+ *      array length by 1), and this is followed by array element
+ *      swaps to restore the heap property.   When an item is added,
+ *      it goes at the end of the array, and is swapped up to restore
+ *      the heap.  If the ptr array is full, adding another item causes
+ *      the ptr array size to double.
+ *
+ *      For further implementation details, see heap.c.
+ * 
+ */ + +/*! Heap of arbitrary void* data */ +struct L_Heap +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 n; /*!< number of elements stored in the heap */ + void **array; /*!< ptr array */ + l_int32 direction; /*!< L_SORT_INCREASING or L_SORT_DECREASING */ +}; +typedef struct L_Heap L_HEAP; + + +#endif /* LEPTONICA_HEAP_H */ diff --git a/3rdparty/hgOCR/leptonica/imageio.h b/3rdparty/hgOCR/leptonica/imageio.h new file mode 100644 index 00000000..b79d4533 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/imageio.h @@ -0,0 +1,238 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file imageio.h + * + *
+ *  General features of image I/O in leptonica
+ *
+ *  At present, there are 9 file formats for images that can be read
+ *  and written:
+ *      png (requires libpng, libz)
+ *      jpeg (requires libjpeg)
+ *      tiff (requires libtiff, libz)
+ *      gif (requires libgif)
+ *      webp (requires libwebp)
+ *      jp2 (requires libopenjp2)
+ *      bmp (no library required)
+ *      pnm (no library required)
+ *      spix (no library required)
+ *  Additionally, there are two file formats for writing (only) images:
+ *      PostScript (requires libpng, libz, libjpeg, libtiff)
+ *      pdf (requires libpng, libz, libjpeg, libtiff)
+ *
+ *  For all 9 read/write formats, leptonica provides interconversion
+ *  between pix (with raster data) and formatted image data:
+ *      Conversion from pix (typically compression):
+ *          pixWrite():        pix --> file
+ *          pixWriteStream():  pix --> filestream (aka FILE*)
+ *          pixWriteMem():     pix --> memory buffer
+ *      Conversion to pix (typically decompression):
+ *          pixRead():         file --> pix
+ *          pixReadStream():   filestream --> pix
+ *          pixReadMem():      memory buffer --> pix
+ *
+ *  Conversions for which the image data is not compressed are:
+ *     * uncompressed tiff   (IFF_TIFF)
+ *     * bmp
+ *     * pnm
+ *     * spix (fast serialization that copies the pix raster data)
+ *
+ *  The image header (metadata) information can be read from either
+ *  the compressed file or a memory buffer, for all 9 formats.
+ * 
+ */ + +#ifndef LEPTONICA_IMAGEIO_H +#define LEPTONICA_IMAGEIO_H + +/* --------------------------------------------------------------- * + * Image file format types * + * --------------------------------------------------------------- */ +/* + * The IFF_DEFAULT flag is used to write the file out in the + * same (input) file format that the pix was read from. If the pix + * was not read from file, the input format field will be + * IFF_UNKNOWN and the output file format will be chosen to + * be compressed and lossless; namely, IFF_TIFF_G4 for d = 1 + * and IFF_PNG for everything else. + * + * In the future, new format types that have defined extensions + * will be added before IFF_DEFAULT, and will be kept in sync with + * the file format extensions in writefile.c. The positions of + * file formats before IFF_DEFAULT will remain invariant. + */ + +/*! Image Formats */ +enum { + IFF_UNKNOWN = 0, + IFF_BMP = 1, + IFF_JFIF_JPEG = 2, + IFF_PNG = 3, + IFF_TIFF = 4, + IFF_TIFF_PACKBITS = 5, + IFF_TIFF_RLE = 6, + IFF_TIFF_G3 = 7, + IFF_TIFF_G4 = 8, + IFF_TIFF_LZW = 9, + IFF_TIFF_ZIP = 10, + IFF_PNM = 11, + IFF_PS = 12, + IFF_GIF = 13, + IFF_JP2 = 14, + IFF_WEBP = 15, + IFF_LPDF = 16, + IFF_TIFF_JPEG = 17, + IFF_DEFAULT = 18, + IFF_SPIX = 19 +}; + + +/* --------------------------------------------------------------- * + * Format header ids * + * --------------------------------------------------------------- */ + +/*! Header Ids */ +enum { + BMP_ID = 0x4d42, /*!< BM - for bitmaps */ + TIFF_BIGEND_ID = 0x4d4d, /*!< MM - for 'motorola' */ + TIFF_LITTLEEND_ID = 0x4949 /*!< II - for 'intel' */ +}; + + +/* --------------------------------------------------------------- * + * Hinting bit flags in jpeg reader * + * --------------------------------------------------------------- */ + +/*! Jpeg Hints */ +enum { + L_JPEG_READ_LUMINANCE = 1, /*!< only want luminance data; no chroma */ + L_JPEG_FAIL_ON_BAD_DATA = 2 /*!< don't return possibly damaged pix */ +}; + + +/* --------------------------------------------------------------- * + * Pdf formatted encoding types * + * --------------------------------------------------------------- */ + +/*! Pdf Encoding */ +enum { + L_DEFAULT_ENCODE = 0, /*!< use default encoding based on image */ + L_JPEG_ENCODE = 1, /*!< use dct encoding: 8 and 32 bpp, no cmap */ + L_G4_ENCODE = 2, /*!< use ccitt g4 fax encoding: 1 bpp */ + L_FLATE_ENCODE = 3, /*!< use flate encoding: any depth, cmap ok */ + L_JP2K_ENCODE = 4 /*!< use jp2k encoding: 8 and 32 bpp, no cmap */ +}; + + +/* --------------------------------------------------------------- * + * Compressed image data * + * --------------------------------------------------------------- */ +/* + * In use, either datacomp or data85 will be produced, depending + * on whether the data needs to be ascii85 encoded. PostScript + * requires ascii85 encoding; pdf does not. + * + * For the colormap (flate compression only), PostScript uses ascii85 + * encoding and pdf uses a bracketed array of space-separated + * hex-encoded rgb triples. Only tiff g4 (type == L_G4_ENCODE) uses + * the minisblack field. + */ + +/*! Compressed image data */ +struct L_Compressed_Data +{ + l_int32 type; /*!< encoding type: L_JPEG_ENCODE, etc */ + l_uint8 *datacomp; /*!< gzipped raster data */ + size_t nbytescomp; /*!< number of compressed bytes */ + char *data85; /*!< ascii85-encoded gzipped raster data */ + size_t nbytes85; /*!< number of ascii85 encoded bytes */ + char *cmapdata85; /*!< ascii85-encoded uncompressed cmap */ + char *cmapdatahex; /*!< hex pdf array for the cmap */ + l_int32 ncolors; /*!< number of colors in cmap */ + l_int32 w; /*!< image width */ + l_int32 h; /*!< image height */ + l_int32 bps; /*!< bits/sample; typ. 1, 2, 4 or 8 */ + l_int32 spp; /*!< samples/pixel; typ. 1 or 3 */ + l_int32 minisblack; /*!< tiff g4 photometry */ + l_int32 predictor; /*!< flate data has PNG predictors */ + size_t nbytes; /*!< number of uncompressed raster bytes */ + l_int32 res; /*!< resolution (ppi) */ +}; +typedef struct L_Compressed_Data L_COMP_DATA; + + +/* ------------------------------------------------------------------------- * + * Pdf multi image flags * + * ------------------------------------------------------------------------- */ + +/*! Pdf MultiImage */ +enum { + L_FIRST_IMAGE = 1, /*!< first image to be used */ + L_NEXT_IMAGE = 2, /*!< intermediate image; not first or last */ + L_LAST_IMAGE = 3 /*!< last image to be used */ +}; + + +/* ------------------------------------------------------------------------- * + * Intermediate pdf generation data * + * ------------------------------------------------------------------------- */ +/* + * This accumulates data for generating a pdf of a single page consisting + * of an arbitrary number of images. + * + * None of the strings have a trailing newline. + */ + +/*! Intermediate pdf generation data */ +struct L_Pdf_Data +{ + char *title; /*!< optional title for pdf */ + l_int32 n; /*!< number of images */ + l_int32 ncmap; /*!< number of colormaps */ + struct L_Ptra *cida; /*!< array of compressed image data */ + char *id; /*!< %PDF-1.2 id string */ + char *obj1; /*!< catalog string */ + char *obj2; /*!< metadata string */ + char *obj3; /*!< pages string */ + char *obj4; /*!< page string (variable data) */ + char *obj5; /*!< content string (variable data) */ + char *poststream; /*!< post-binary-stream string */ + char *trailer; /*!< trailer string (variable data) */ + struct Pta *xy; /*!< store (xpt, ypt) array */ + struct Pta *wh; /*!< store (wpt, hpt) array */ + struct Box *mediabox; /*!< bounding region for all images */ + struct Sarray *saprex; /*!< pre-binary-stream xobject strings */ + struct Sarray *sacmap; /*!< colormap pdf object strings */ + struct L_Dna *objsize; /*!< sizes of each pdf string object */ + struct L_Dna *objloc; /*!< location of each pdf string object */ + l_int32 xrefloc; /*!< location of xref */ +}; +typedef struct L_Pdf_Data L_PDF_DATA; + + +#endif /* LEPTONICA_IMAGEIO_H */ diff --git a/3rdparty/hgOCR/leptonica/include/crc32.h b/3rdparty/hgOCR/leptonica/include/crc32.h new file mode 100644 index 00000000..9e0c7781 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/crc32.h @@ -0,0 +1,441 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const z_crc_t FAR crc_table[TBLS][256] = +{ + { + 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL, + 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL, + 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL, + 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL, + 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL, + 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL, + 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL, + 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL, + 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL, + 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL, + 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL, + 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL, + 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL, + 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL, + 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL, + 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL, + 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL, + 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL, + 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL, + 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL, + 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL, + 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL, + 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL, + 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL, + 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL, + 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL, + 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL, + 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL, + 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL, + 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL, + 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL, + 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL, + 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL, + 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL, + 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL, + 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL, + 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL, + 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL, + 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL, + 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL, + 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL, + 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL, + 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL, + 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL, + 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL, + 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL, + 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL, + 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL, + 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL, + 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL, + 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL, + 0x2d02ef8dUL +#ifdef BYFOUR + }, + { + 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL, + 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL, + 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL, + 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL, + 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL, + 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL, + 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL, + 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL, + 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL, + 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL, + 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL, + 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL, + 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL, + 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL, + 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL, + 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL, + 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL, + 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL, + 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL, + 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL, + 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL, + 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL, + 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL, + 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL, + 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL, + 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL, + 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL, + 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL, + 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL, + 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL, + 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL, + 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL, + 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL, + 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL, + 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL, + 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL, + 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL, + 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL, + 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL, + 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL, + 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL, + 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL, + 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL, + 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL, + 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL, + 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL, + 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL, + 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL, + 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL, + 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL, + 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL, + 0x9324fd72UL + }, + { + 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL, + 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL, + 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL, + 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL, + 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL, + 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL, + 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL, + 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL, + 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL, + 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL, + 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL, + 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL, + 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL, + 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL, + 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL, + 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL, + 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL, + 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL, + 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL, + 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL, + 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL, + 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL, + 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL, + 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL, + 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL, + 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL, + 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL, + 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL, + 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL, + 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL, + 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL, + 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL, + 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL, + 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL, + 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL, + 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL, + 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL, + 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL, + 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL, + 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL, + 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL, + 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL, + 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL, + 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL, + 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL, + 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL, + 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL, + 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL, + 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL, + 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL, + 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL, + 0xbe9834edUL + }, + { + 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL, + 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL, + 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL, + 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL, + 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL, + 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL, + 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL, + 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL, + 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL, + 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL, + 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL, + 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL, + 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL, + 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL, + 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL, + 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL, + 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL, + 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL, + 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL, + 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL, + 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL, + 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL, + 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL, + 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL, + 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL, + 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL, + 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL, + 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL, + 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL, + 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL, + 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL, + 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL, + 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL, + 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL, + 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL, + 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL, + 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL, + 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL, + 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL, + 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL, + 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL, + 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL, + 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL, + 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL, + 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL, + 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL, + 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL, + 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL, + 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL, + 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL, + 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL, + 0xde0506f1UL + }, + { + 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL, + 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL, + 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL, + 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL, + 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL, + 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL, + 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL, + 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL, + 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL, + 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL, + 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL, + 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL, + 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL, + 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL, + 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL, + 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL, + 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL, + 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL, + 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL, + 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL, + 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL, + 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL, + 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL, + 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL, + 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL, + 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL, + 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL, + 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL, + 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL, + 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL, + 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL, + 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL, + 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL, + 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL, + 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL, + 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL, + 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL, + 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL, + 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL, + 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL, + 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL, + 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL, + 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL, + 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL, + 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL, + 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL, + 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL, + 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL, + 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL, + 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL, + 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL, + 0x8def022dUL + }, + { + 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL, + 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL, + 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL, + 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL, + 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL, + 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL, + 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL, + 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL, + 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL, + 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL, + 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL, + 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL, + 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL, + 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL, + 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL, + 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL, + 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL, + 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL, + 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL, + 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL, + 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL, + 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL, + 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL, + 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL, + 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL, + 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL, + 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL, + 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL, + 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL, + 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL, + 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL, + 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL, + 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL, + 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL, + 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL, + 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL, + 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL, + 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL, + 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL, + 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL, + 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL, + 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL, + 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL, + 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL, + 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL, + 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL, + 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL, + 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL, + 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL, + 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL, + 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL, + 0x72fd2493UL + }, + { + 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL, + 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL, + 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL, + 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL, + 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL, + 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL, + 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL, + 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL, + 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL, + 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL, + 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL, + 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL, + 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL, + 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL, + 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL, + 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL, + 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL, + 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL, + 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL, + 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL, + 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL, + 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL, + 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL, + 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL, + 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL, + 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL, + 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL, + 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL, + 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL, + 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL, + 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL, + 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL, + 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL, + 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL, + 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL, + 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL, + 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL, + 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL, + 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL, + 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL, + 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL, + 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL, + 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL, + 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL, + 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL, + 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL, + 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL, + 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL, + 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL, + 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL, + 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL, + 0xed3498beUL + }, + { + 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL, + 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL, + 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL, + 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL, + 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL, + 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL, + 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL, + 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL, + 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL, + 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL, + 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL, + 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL, + 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL, + 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL, + 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL, + 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL, + 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL, + 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL, + 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL, + 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL, + 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL, + 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL, + 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL, + 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL, + 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL, + 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL, + 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL, + 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL, + 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL, + 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL, + 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL, + 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL, + 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL, + 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL, + 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL, + 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL, + 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL, + 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL, + 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL, + 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL, + 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL, + 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL, + 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL, + 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL, + 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL, + 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL, + 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL, + 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL, + 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL, + 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL, + 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL, + 0xf10605deUL +#endif + } +}; diff --git a/3rdparty/hgOCR/leptonica/include/deflate.h b/3rdparty/hgOCR/leptonica/include/deflate.h new file mode 100644 index 00000000..23ecdd31 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/deflate.h @@ -0,0 +1,349 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2016 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + ulg pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + uchf *l_buf; /* buffer for literals or lengths */ + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt last_lit; /* running index in l_buf */ + + ushf *d_buf; + /* Buffer for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ + +#ifdef ZLIB_DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + + /* in trees.c */ +void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); +int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); +void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); +void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, + ulg stored_len, int last)); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef ZLIB_DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch ZLIB_INTERNAL _length_code[]; + extern uch ZLIB_INTERNAL _dist_code[]; +#else + extern const uch ZLIB_INTERNAL _length_code[]; + extern const uch ZLIB_INTERNAL _dist_code[]; +#endif + +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->last_lit] = 0; \ + s->l_buf[s->last_lit++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->last_lit] = dist; \ + s->l_buf[s->last_lit++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->last_lit == s->lit_bufsize-1); \ + } +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/3rdparty/hgOCR/leptonica/include/gzguts.h b/3rdparty/hgOCR/leptonica/include/gzguts.h new file mode 100644 index 00000000..990a4d25 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/gzguts.h @@ -0,0 +1,218 @@ +/* gzguts.h -- zlib internal header definitions for gz* operations + * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# ifdef _FILE_OFFSET_BITS +# undef _FILE_OFFSET_BITS +# endif +#endif + +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include +#include "zlib.h" +#ifdef STDC +# include +# include +# include +#endif + +#ifndef _POSIX_SOURCE +# define _POSIX_SOURCE +#endif +#include + +#ifdef _WIN32 +# include +#endif + +#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) +# include +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +# define WIDECHAR +#endif + +#ifdef WINAPI_FAMILY +# define open _open +# define read _read +# define write _write +# define close _close +#endif + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS +/* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 +/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) +# define vsnprintf _vsnprintf +# endif +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +# ifdef VMS +# define NO_vsnprintf +# endif +# ifdef __OS400__ +# define NO_vsnprintf +# endif +# ifdef __MVS__ +# define NO_vsnprintf +# endif +#endif + +/* unlike snprintf (which is required in C99), _snprintf does not guarantee + null termination of the result -- however this is only used in gzlib.c where + the result is assured to fit in the space provided */ +#if defined(_MSC_VER) && _MSC_VER < 1900 +# define snprintf _snprintf +#endif + +#ifndef local +# define local static +#endif +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ + +/* gz* functions always use library allocation functions */ +#ifndef STDC + extern voidp malloc OF((uInt size)); + extern void free OF((voidpf ptr)); +#endif + +/* get errno and strerror definition */ +#if defined UNDER_CE +# include +# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#else +# ifndef NO_STRERROR +# include +# define zstrerror() strerror(errno) +# else +# define zstrerror() "stdio error (consult errno)" +# endif +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); +#endif + +/* default memLevel */ +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif + +/* default i/o buffer size -- double this for output when reading (this and + twice this must be able to fit in an unsigned type) */ +#define GZBUFSIZE 8192 + +/* gzip modes, also provide a little integrity check on the passed structure */ +#define GZ_NONE 0 +#define GZ_READ 7247 +#define GZ_WRITE 31153 +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ + +/* values for gz_state how */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ + +/* internal gzip file state data structure */ +typedef struct { + /* exposed contents for gzgetc() macro */ + struct gzFile_s x; /* "x" for exposed */ + /* x.have: number of bytes available at x.next */ + /* x.next: next output data to deliver or write */ + /* x.pos: current position in uncompressed data */ + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer (double-sized when writing) */ + unsigned char *out; /* output buffer (double-sized when reading) */ + int direct; /* 0 if processing gzip, 1 if transparent */ + /* just for reading */ + int how; /* 0: get header, 1: copy, 2: decompress */ + z_off64_t start; /* where the gzip data started, for rewinding */ + int eof; /* true if end of input file reached */ + int past; /* true if read requested past end */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ +} gz_state; +typedef gz_state FAR *gz_statep; + +/* shared functions */ +void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +#if defined UNDER_CE +char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +#endif + +/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +#ifdef INT_MAX +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) +#else +unsigned ZLIB_INTERNAL gz_intmax OF((void)); +# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) +#endif diff --git a/3rdparty/hgOCR/leptonica/include/inffast.h b/3rdparty/hgOCR/leptonica/include/inffast.h new file mode 100644 index 00000000..e5c1aa4c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); diff --git a/3rdparty/hgOCR/leptonica/include/inffixed.h b/3rdparty/hgOCR/leptonica/include/inffixed.h new file mode 100644 index 00000000..d6283277 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/3rdparty/hgOCR/leptonica/include/inflate.h b/3rdparty/hgOCR/leptonica/include/inflate.h new file mode 100644 index 00000000..a46cce6b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/inflate.h @@ -0,0 +1,125 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD = 16180, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to BAD or MEM on error -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + (raw) -> TYPEDO + Read deflate blocks: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ +struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags (0 if zlib) */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; diff --git a/3rdparty/hgOCR/leptonica/include/inftrees.h b/3rdparty/hgOCR/leptonica/include/inftrees.h new file mode 100644 index 00000000..baa53a0b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/inftrees.h @@ -0,0 +1,62 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribtution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns returns 852, and "enough 30 6 15" for distance codes returns 592. + The initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work)); diff --git a/3rdparty/hgOCR/leptonica/include/trees.h b/3rdparty/hgOCR/leptonica/include/trees.h new file mode 100644 index 00000000..d35639d8 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/3rdparty/hgOCR/leptonica/include/zconf.h b/3rdparty/hgOCR/leptonica/include/zconf.h new file mode 100644 index 00000000..5e1d68a0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/zconf.h @@ -0,0 +1,534 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO + typedef unsigned long z_size_t; +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +#ifndef Z_ARG /* function prototypes for stdarg */ +# if defined(STDC) || defined(Z_HAVE_STDARG_H) +# define Z_ARG(args) args +# else +# define Z_ARG(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#if defined(__WATCOMC__) && !defined(Z_HAVE_UNISTD_H) +# define Z_HAVE_UNISTD_H +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) || defined(_LARGEFILE64_SOURCE) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/3rdparty/hgOCR/leptonica/include/zlib.h b/3rdparty/hgOCR/leptonica/include/zlib.h new file mode 100644 index 00000000..f09cdaf1 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/zlib.h @@ -0,0 +1,1912 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.2.11, January 15th, 2017 + + Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.2.11" +#define ZLIB_VERNUM 0x12b0 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 2 +#define ZLIB_VER_REVISION 11 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip and raw deflate streams in + memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. +*/ + +typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); +typedef void (*free_func) OF((voidpf opaque, voidpf address)); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion OF((void)); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more ouput + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six to avoid repeated flush markers due to + avail_out == 0 on return. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy)); + + This is another version of deflateInit with more compression options. The + fields next_in, zalloc, zfree and opaque must be initialized before by the + caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, + int level, + int strategy)); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if any input has been consumed in a previous + deflate() call, then the input available so far is compressed with the old + level and strategy using deflate(strm, Z_BLOCK). There are three approaches + for the compression levels 0, 1..3, and 4..9 respectively. The new level + and strategy will take effect at the next call of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune OF((z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain)); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, + uLong sourceLen)); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending OF((z_streamp strm, + unsigned *pending, + int *bits)); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader OF((z_streamp strm, + gz_headerp head)); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to 255, with no extra, name, or comment + fields. The gzip header is returned to the default state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, + int windowBits)); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will not automatically decode concatenated gzip streams. + inflate() will return Z_STREAM_END at the end of the gzip stream. The state + would need to be reset to continue decoding a subsequent gzip stream. + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, + const Bytef *dictionary, + uInt dictLength)); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary OF((z_streamp strm, + Bytef *dictionary, + uInt *dictLength)); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similary, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current current value of + total_in which indicates where valid compressed data was found. In the + error case, the application may repeatedly call inflateSync, providing more + input each time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy OF((z_streamp dest, + z_streamp source)); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2 OF((z_streamp strm, + int windowBits)); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime OF((z_streamp strm, + int bits, + int value)); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark OF((z_streamp strm)); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader OF((z_streamp strm, + gz_headerp head)); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit OF((z_streamp strm, int windowBits, + unsigned char FAR *window)); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func) OF((void FAR *, + z_const unsigned char FAR * FAR *)); +typedef int (*out_func) OF((void FAR *, unsigned char FAR *, unsigned)); + +ZEXTERN int ZEXPORT inflateBack OF((z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc)); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd OF((z_streamp strm)); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags OF((void)); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level)); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound OF((uLong sourceLen)); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen)); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2 OF((Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen)); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); + + Opens a gzip (.gz) file for reading or writing. The mode parameter is as + in fopen ("rb" or "wb") but can also include a compression level ("wb9") or + a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman-only + compression as in "wb1h", 'R' for run-length encoding as in "wb1R", or 'F' + for fixed code compression as in "wb9F". (See the description of + deflateInit2 for more information about the strategy parameter.) 'T' will + request transparent writing or appending with no compression and not using + the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); +/* + gzdopen associates a gzFile with the file descriptor fd. File descriptors + are obtained from calls like open, dup, creat, pipe or fileno (if the file + has been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer OF((gzFile file, unsigned size)); +/* + Set the internal buffer size used by this library's functions. The + default buffer size is 8192 bytes. This function must be called after + gzopen() or gzdopen(), and before any other calls that read or write the + file. The buffer memory allocation is always deferred to the first read or + write. Three times that size in buffer space is allocated. A larger buffer + size of, for example, 64K or 128K bytes will noticeably increase the speed + of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); +/* + Dynamically update the compression level or strategy. See the description + of deflateInit2 for the meaning of these parameters. Previously provided + data is flushed before the parameter change. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); +/* + Reads the given number of uncompressed bytes from the compressed file. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread OF((voidp buf, z_size_t size, z_size_t nitems, + gzFile file)); +/* + Read up to nitems items of size size from file to buf, otherwise operating + as gzread() does. This duplicates the interface of stdio's fread(), with + size_t request and return types. If the library defines size_t, then + z_size_t is identical to size_t. If not, then z_size_t is an unsigned + integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevetheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, reseting and retrying on end-of-file, when size is not 1. +*/ + +ZEXTERN int ZEXPORT gzwrite OF((gzFile file, + voidpc buf, unsigned len)); +/* + Writes the given number of uncompressed bytes into the compressed file. + gzwrite returns the number of uncompressed bytes written or 0 in case of + error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite OF((voidpc buf, z_size_t size, + z_size_t nitems, gzFile file)); +/* + gzfwrite() writes nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + +ZEXTERN int ZEXPORTVA gzprintf Z_ARG((gzFile file, const char *format, ...)); +/* + Converts, formats, and writes the arguments to the compressed file under + control of the format string, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf() + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); +/* + Writes the given null-terminated string to the compressed file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); +/* + Reads bytes from the compressed file until len-1 characters are read, or a + newline character is read and transferred to buf, or an end-of-file + condition is encountered. If any characters are read or if len == 1, the + string is terminated with a null character. If no characters are read due + to an end-of-file or len < 1, then the buffer is left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); +/* + Writes c, converted to an unsigned char, into the compressed file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); +/* + Reads one byte from the compressed file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc OF((int c, gzFile file)); +/* + Push one character back onto the stream to be read as the first character + on the next read. At least one character of push-back is allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); +/* + Flushes all pending output into the compressed file. The parameter flush + is as in the deflate() function. The return value is the zlib error number + (see function gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, + z_off_t offset, int whence)); + + Sets the starting position for the next gzread or gzwrite on the given + compressed file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); +/* + Rewinds the given file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); + + Returns the starting position for the next gzread or gzwrite on the given + compressed file. This position represents a number of bytes in the + uncompressed data stream, and is zero when starting, even if appending or + reading a gzip stream from the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile file)); + + Returns the current offset in the file being read or written. This offset + includes the count of bytes that precede the gzip stream, for example when + appending or when using gzdopen() for reading. When reading, the offset + does not include as yet unused buffered input. This information can be used + for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof OF((gzFile file)); +/* + Returns true (1) if the end-of-file indicator has been set while reading, + false (0) otherwise. Note that the end-of-file indicator is set only if the + read tried to go past the end of the input, but came up short. Therefore, + just like feof(), gzeof() may return false even if there is no more data to + read, in the event that the last read request was for the exact number of + bytes remaining in the input file. This will happen if the input file size + is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect OF((gzFile file)); +/* + Returns true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose OF((gzFile file)); +/* + Flushes all pending output if necessary, closes the compressed file and + deallocates the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r OF((gzFile file)); +ZEXTERN int ZEXPORT gzclose_w OF((gzFile file)); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); +/* + Returns the error message for the last error which occurred on the given + compressed file. errnum is set to zlib error number. If an error occurred + in the file system and not in the compression library, errnum is set to + Z_ERRNO and the application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr OF((gzFile file)); +/* + Clears the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. If buf is Z_NULL, this function returns the + required initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as adler32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine OF((uLong adler1, uLong adler2, + z_off_t len2)); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. If buf is Z_NULL, this function returns the required + initial value for the crc. Pre- and post-conditioning (one's complement) is + performed within this function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z OF((uLong adler, const Bytef *buf, + z_size_t len)); +/* + Same as crc32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine OF((uLong crc1, uLong crc2, z_off_t len2)); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size)); +ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, + const char *version, int stream_size)); +ZEXTERN int ZEXPORT inflateBackInit_ OF((z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size)); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_ OF((gzFile file)); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); + ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off64_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off64_t)); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek64 OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell64 OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen OF((const char *, const char *)); + ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile, z_off_t, int)); + ZEXTERN z_off_t ZEXPORT gztell OF((gzFile)); + ZEXTERN z_off_t ZEXPORT gzoffset OF((gzFile)); + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine OF((uLong, uLong, z_off_t)); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError OF((int)); +ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp)); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table OF((void)); +ZEXTERN int ZEXPORT inflateUndermine OF((z_streamp, int)); +ZEXTERN int ZEXPORT inflateValidate OF((z_streamp, int)); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed OF ((z_streamp)); +ZEXTERN int ZEXPORT inflateResetKeep OF((z_streamp)); +ZEXTERN int ZEXPORT deflateResetKeep OF((z_streamp)); +#if (defined(_WIN32) || defined(__CYGWIN__)) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w OF((const wchar_t *path, + const char *mode)); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf Z_ARG((gzFile file, + const char *format, + va_list va)); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/3rdparty/hgOCR/leptonica/include/zutil.h b/3rdparty/hgOCR/leptonica/include/zutil.h new file mode 100644 index 00000000..b079ea6a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/include/zutil.h @@ -0,0 +1,271 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include "zlib.h" + +#if defined(STDC) && !defined(Z_SOLO) +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) +# include +# endif +# include +# include +#endif + +#ifdef Z_SOLO + typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ +#endif + +#ifndef local +# define local static +#endif +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# ifndef Z_SOLO +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 1 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 2 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#ifdef __370__ +# if __TARGET_LIB__ < 0x20000000 +# define OS_CODE 4 +# elif __TARGET_LIB__ < 0x40000000 +# define OS_CODE 11 +# else +# define OS_CODE 8 +# endif +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 5 +#endif + +#ifdef OS2 +# define OS_CODE 6 +# if defined(M_I86) && !defined(Z_SOLO) +# include +# endif +#endif + +#if defined(MACOS) || defined(TARGET_OS_MAC) +# define OS_CODE 7 +# ifndef Z_SOLO +# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fdopen */ +# else +# ifndef fdopen +# define fdopen(fd,mode) NULL /* No fdopen() */ +# endif +# endif +# endif +#endif + +#ifdef __acorn +# define OS_CODE 13 +#endif + +#if defined(WIN32) && !defined(__CYGWIN__) +# define OS_CODE 10 +#endif + +#ifdef _BEOS_ +# define OS_CODE 16 +#endif + +#ifdef __TOS_OS400__ +# define OS_CODE 18 +#endif + +#ifdef __APPLE__ +# define OS_CODE 19 +#endif + +#if defined(_BEOS_) || defined(RISCOS) +# define fdopen(fd,mode) NULL /* No fdopen() */ +#endif + +#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX +# if defined(_WIN32_WCE) +# define fdopen(fd,mode) NULL /* No fdopen() */ +# ifndef _PTRDIFF_T_DEFINED + typedef int ptrdiff_t; +# define _PTRDIFF_T_DEFINED +# endif +# else +# define fdopen(fd,type) _fdopen(fd,type) +# endif +#endif + +#if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_WIN32) && \ + (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) + ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); + ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 3 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(pyr) || defined(Z_SOLO) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); + int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); + void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); +#endif + +/* Diagnostic functions */ +#ifdef ZLIB_DEBUG +# include + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error OF((char *m)); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + +#ifndef Z_SOLO + voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, + unsigned size)); + void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); +#endif + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +#endif /* ZUTIL_H */ diff --git a/3rdparty/hgOCR/leptonica/jbclass.c b/3rdparty/hgOCR/leptonica/jbclass.c new file mode 100644 index 00000000..e673550c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jbclass.c @@ -0,0 +1,2576 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * jbclass.c + * + * These are functions for unsupervised classification of + * collections of connected components -- either characters or + * words -- in binary images. They can be used as image + * processing steps in jbig2 compression. + * + * Initialization + * + * JBCLASSER *jbRankHausInit() [rank hausdorff encoder] + * JBCLASSER *jbCorrelationInit() [correlation encoder] + * JBCLASSER *jbCorrelationInitWithoutComponents() [ditto] + * static JBCLASSER *jbCorrelationInitInternal() + * + * Classify the pages + * + * l_int32 jbAddPages() + * l_int32 jbAddPage() + * l_int32 jbAddPageComponents() + * + * Rank hausdorff classifier + * + * l_int32 jbClassifyRankHaus() + * l_int32 pixHaustest() + * l_int32 pixRankHaustest() + * + * Binary correlation classifier + * + * l_int32 jbClassifyCorrelation() + * + * Determine the image components we start with + * + * l_int32 jbGetComponents() + * l_int32 pixWordMaskByDilation() + * l_int32 pixWordBoxesByDilation() + * + * Build grayscale composites (templates) + * + * PIXA *jbAccumulateComposites + * PIXA *jbTemplatesFromComposites + * + * Utility functions for Classer + * + * JBCLASSER *jbClasserCreate() + * void jbClasserDestroy() + * + * Utility functions for Data + * + * JBDATA *jbDataSave() + * void jbDataDestroy() + * l_int32 jbDataWrite() + * JBDATA *jbDataRead() + * PIXA *jbDataRender() + * l_int32 jbGetULCorners() + * l_int32 jbGetLLCorners() + * + * Static helpers + * + * static JBFINDCTX *findSimilarSizedTemplatesInit() + * static l_int32 findSimilarSizedTemplatesNext() + * static void findSimilarSizedTemplatesDestroy() + * static l_int32 finalPositioningForAlignment() + * + * Note: this is NOT an implementation of the JPEG jbig2 + * proposed standard encoder, the specifications for which + * can be found at http://www.jpeg.org/jbigpt2.html. + * (See below for a full implementation.) + * It is an implementation of the lower-level part of an encoder that: + * + * (1) identifies connected components that are going to be used + * (2) puts them in similarity classes (this is an unsupervised + * classifier), and + * (3) stores the result in a simple file format (2 files, + * one for templates and one for page/coordinate/template-index + * quartets). + * + * An actual implementation of the official jbig2 encoder could + * start with parts (1) and (2), and would then compress the quartets + * according to the standards requirements (e.g., Huffman or + * arithmetic coding of coordinate differences and image templates). + * + * The low-level part of the encoder provided here has the + * following useful features: + * + * ~ It is accurate in the identification of templates + * and classes because it uses a windowed hausdorff + * distance metric. + * ~ It is accurate in the placement of the connected + * components, doing a two step process of first aligning + * the the centroids of the template with those of each instance, + * and then making a further correction of up to +- 1 pixel + * in each direction to best align the templates. + * ~ It is fast because it uses a morphologically based + * matching algorithm to implement the hausdorff criterion, + * and it selects the patterns that are possible matches + * based on their size. + * + * We provide two different matching functions, one using Hausdorff + * distance and one using a simple image correlation. + * The Hausdorff method sometimes produces better results for the + * same number of classes, because it gives a relatively small + * effective weight to foreground pixels near the boundary, + * and a relatively large weight to foreground pixels that are + * not near the boundary. By effectively ignoring these boundary + * pixels, Hausdorff weighting corresponds better to the expected + * probabilities of the pixel values in a scanned image, where the + * variations in instances of the same printed character are much + * more likely to be in pixels near the boundary. By contrast, + * the correlation method gives equal weight to all foreground pixels. + * + * For best results, use the correlation method. Correlation takes + * the number of fg pixels in the AND of instance and template, + * divided by the product of the number of fg pixels in instance + * and template. It compares this with a threshold that, in + * general, depends on the fractional coverage of the template. + * For heavy text, the threshold is raised above that for light + * text, By using both these parameters (basic threshold and + * adjustment factor for text weight), one has more flexibility + * and can arrive at the fewest substitution errors, although + * this comes at the price of more templates. + * + * The strict Hausdorff scoring is not a rank weighting, because a + * single pixel beyond the given distance will cause a match + * failure. A rank Hausdorff is more robust to non-boundary noise, + * but it is also more susceptible to confusing components that + * should be in different classes. For implementing a jbig2 + * application for visually lossless binary image compression, + * you have two choices: + * + * (1) use a 3x3 structuring element (size = 3) and a strict + * Hausdorff comparison (rank = 1.0 in the rank Hausdorff + * function). This will result in a minimal number of classes, + * but confusion of small characters, such as italic and + * non-italic lower-case 'o', can still occur. + * (2) use the correlation method with a threshold of 0.85 + * and a weighting factor of about 0.7. This will result in + * a larger number of classes, but should not be confused + * either by similar small characters or by extremely + * thick sans serif characters, such as in prog/cootoots.png. + * + * As mentioned above, if visual substitution errors must be + * avoided, you should use the correlation method. + * + * We provide executables that show how to do the encoding: + * prog/jbrankhaus.c + * prog/jbcorrelation.c + * + * The basic flow for correlation classification goes as follows, + * where specific choices have been made for parameters (Hausdorff + * is the same except for initialization): + * + * // Initialize and save data in the classer + * JBCLASSER *classer = + * jbCorrelationInit(JB_CONN_COMPS, 0, 0, 0.8, 0.7); + * SARRAY *safiles = getSortedPathnamesInDirectory(directory, + * NULL, 0, 0); + * jbAddPages(classer, safiles); + * + * // Save the data in a data structure for serialization, + * // and write it into two files. + * JBDATA *data = jbDataSave(classer); + * jbDataWrite(rootname, data); + * + * // Reconstruct (render) the pages from the encoded data. + * PIXA *pixa = jbDataRender(data, FALSE); + * + * Adam Langley has built a jbig2 standards-compliant encoder, the + * first one to appear in open source. You can get this encoder at: + * http://www.imperialviolet.org/jbig2.html + * + * It uses arithmetic encoding throughout. It encodes binary images + * losslessly with a single arithmetic coding over the full image. + * It also does both lossy and lossless encoding from connected + * components, using leptonica to generate the templates representing + * each cluster. + */ + +#include +#include +#include "allheaders.h" + +//static const l_int32 L_BUF_SIZE = 512; +#define L_BUF_SIZE 512 + + /* For jbClassifyRankHaus(): size of border added around + * pix of each c.c., to allow further processing. This + * should be at least the sum of the MAX_DIFF_HEIGHT + * (or MAX_DIFF_WIDTH) and one-half the size of the Sel */ +static const l_int32 JB_ADDED_PIXELS = 6; + + /* For pixHaustest(), pixRankHaustest() and pixCorrelationScore(): + * choose these to be 2 or greater */ +static const l_int32 MAX_DIFF_WIDTH = 2; /* use at least 2 */ +static const l_int32 MAX_DIFF_HEIGHT = 2; /* use at least 2 */ + + /* In initialization, you have the option to discard components + * (cc, characters or words) that have either width or height larger + * than a given size. This is convenient for jbDataSave(), because + * the components are placed onto a regular lattice with cell + * dimension equal to the maximum component size. The default + * values are given here. If you want to save all components, + * use a sufficiently large set of dimensions. */ +static const l_int32 MAX_CONN_COMP_WIDTH = 350; /* default max cc width */ +static const l_int32 MAX_CHAR_COMP_WIDTH = 350; /* default max char width */ +static const l_int32 MAX_WORD_COMP_WIDTH = 1000; /* default max word width */ +static const l_int32 MAX_COMP_HEIGHT = 120; /* default max component height */ + + /* This stores the state of a state machine which fetches + * similar sized templates */ +struct JbFindTemplatesState +{ + JBCLASSER *classer; /* classer */ + l_int32 w; /* desired width */ + l_int32 h; /* desired height */ + l_int32 i; /* index into two_by_two step array */ + L_DNA *dna; /* current number array */ + l_int32 n; /* current element of dna */ +}; +typedef struct JbFindTemplatesState JBFINDCTX; + + /* Static initialization function */ +static JBCLASSER * jbCorrelationInitInternal(l_int32 components, + l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, + l_float32 weightfactor, l_int32 keep_components); + + /* Static helper functions */ +static JBFINDCTX * findSimilarSizedTemplatesInit(JBCLASSER *classer, PIX *pixs); +static l_int32 findSimilarSizedTemplatesNext(JBFINDCTX *context); +static void findSimilarSizedTemplatesDestroy(JBFINDCTX **pcontext); +static l_int32 finalPositioningForAlignment(PIX *pixs, l_int32 x, l_int32 y, + l_int32 idelx, l_int32 idely, PIX *pixt, + l_int32 *sumtab, l_int32 *pdx, l_int32 *pdy); + +#ifndef NO_CONSOLE_IO +#define DEBUG_CORRELATION_SCORE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*----------------------------------------------------------------------* + * Initialization * + *----------------------------------------------------------------------*/ +/*! + * \brief jbRankHausInit() + * + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] maxwidth of component; use 0 for default + * \param[in] maxheight of component; use 0 for default + * \param[in] size of square structuring element; 2, representing + * 2x2 sel, is necessary for reasonable accuracy of + * small components; combine this with rank ~ 0.97 + * to avoid undue class expansion + * \param[in] rank rank val of match, each way; in [0.5 - 1.0]; + * when using size = 2, 0.97 is a reasonable value + * \return jbclasser if OK; NULL on error + */ +JBCLASSER * +jbRankHausInit(l_int32 components, + l_int32 maxwidth, + l_int32 maxheight, + l_int32 size, + l_float32 rank) +{ +JBCLASSER *classer; + + PROCNAME("jbRankHausInit"); + + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return (JBCLASSER *)ERROR_PTR("invalid components", procName, NULL); + if (size < 1 || size > 10) + return (JBCLASSER *)ERROR_PTR("size not reasonable", procName, NULL); + if (rank < 0.5 || rank > 1.0) + return (JBCLASSER *)ERROR_PTR("rank not in [0.5-1.0]", procName, NULL); + if (maxwidth == 0) { + if (components == JB_CONN_COMPS) + maxwidth = MAX_CONN_COMP_WIDTH; + else if (components == JB_CHARACTERS) + maxwidth = MAX_CHAR_COMP_WIDTH; + else /* JB_WORDS */ + maxwidth = MAX_WORD_COMP_WIDTH; + } + if (maxheight == 0) + maxheight = MAX_COMP_HEIGHT; + + if ((classer = jbClasserCreate(JB_RANKHAUS, components)) == NULL) + return (JBCLASSER *)ERROR_PTR("classer not made", procName, NULL); + classer->maxwidth = maxwidth; + classer->maxheight = maxheight; + classer->sizehaus = size; + classer->rankhaus = rank; + classer->dahash = l_dnaHashCreate(5507, 4); /* 5507 is prime */ + classer->keep_pixaa = 1; /* keep all components in pixaa */ + return classer; +} + + +/*! + * \brief jbCorrelationInit() + * + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] maxwidth of component; use 0 for default + * \param[in] maxheight of component; use 0 for default + * \param[in] thresh value for correlation score: in [0.4 - 0.98] + * \param[in] weightfactor corrects thresh for thick characters [0.0 - 1.0] + * \return jbclasser if OK; NULL on error + * + *
+ * Notes:
+ *      (1) For scanned text, suggested input values are:
+ *            thresh ~ [0.8 - 0.85]
+ *            weightfactor ~ [0.5 - 0.6]
+ *      (2) For electronically generated fonts (e.g., rasterized pdf),
+ *          a very high thresh (e.g., 0.95) will not cause a significant
+ *          increase in the number of classes.
+ * 
+ */ +JBCLASSER * +jbCorrelationInit(l_int32 components, + l_int32 maxwidth, + l_int32 maxheight, + l_float32 thresh, + l_float32 weightfactor) +{ + return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, + weightfactor, 1); +} + +/*! + * \brief jbCorrelationInitWithoutComponents() + * + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] maxwidth of component; use 0 for default + * \param[in] maxheight of component; use 0 for default + * \param[in] thresh value for correlation score: in [0.4 - 0.98] + * \param[in] weightfactor corrects thresh for thick characters [0.0 - 1.0] + * \return jbclasser if OK; NULL on error + * + *
+ * Notes:
+ *      Acts the same as jbCorrelationInit(), but the resulting
+ *      object doesn't keep a list of all the components.
+ * 
+ */ +JBCLASSER * +jbCorrelationInitWithoutComponents(l_int32 components, + l_int32 maxwidth, + l_int32 maxheight, + l_float32 thresh, + l_float32 weightfactor) +{ + return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, + weightfactor, 0); +} + + +static JBCLASSER * +jbCorrelationInitInternal(l_int32 components, + l_int32 maxwidth, + l_int32 maxheight, + l_float32 thresh, + l_float32 weightfactor, + l_int32 keep_components) +{ +JBCLASSER *classer; + + PROCNAME("jbCorrelationInitInternal"); + + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return (JBCLASSER *)ERROR_PTR("invalid components", procName, NULL); + if (thresh < 0.4 || thresh > 0.98) + return (JBCLASSER *)ERROR_PTR("thresh not in range [0.4 - 0.98]", + procName, NULL); + if (weightfactor < 0.0 || weightfactor > 1.0) + return (JBCLASSER *)ERROR_PTR("weightfactor not in range [0.0 - 1.0]", + procName, NULL); + if (maxwidth == 0) { + if (components == JB_CONN_COMPS) + maxwidth = MAX_CONN_COMP_WIDTH; + else if (components == JB_CHARACTERS) + maxwidth = MAX_CHAR_COMP_WIDTH; + else /* JB_WORDS */ + maxwidth = MAX_WORD_COMP_WIDTH; + } + if (maxheight == 0) + maxheight = MAX_COMP_HEIGHT; + + + if ((classer = jbClasserCreate(JB_CORRELATION, components)) == NULL) + return (JBCLASSER *)ERROR_PTR("classer not made", procName, NULL); + classer->maxwidth = maxwidth; + classer->maxheight = maxheight; + classer->thresh = thresh; + classer->weightfactor = weightfactor; + classer->dahash = l_dnaHashCreate(5507, 4); /* 5507 is prime */ + classer->keep_pixaa = keep_components; + return classer; +} + + +/*----------------------------------------------------------------------* + * Classify the pages * + *----------------------------------------------------------------------*/ +/*! + * \brief jbAddPages() + * + * \param[in] jbclasser + * \param[in] safiles of page image file names + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) jbclasser makes a copy of the array of file names.
+ *      (2) The caller is still responsible for destroying the input array.
+ * 
+ */ +l_ok +jbAddPages(JBCLASSER *classer, + SARRAY *safiles) +{ +l_int32 i, nfiles; +char *fname; +PIX *pix; + + PROCNAME("jbAddPages"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + if (!safiles) + return ERROR_INT("safiles not defined", procName, 1); + + classer->safiles = sarrayCopy(safiles); + nfiles = sarrayGetCount(safiles); + for (i = 0; i < nfiles; i++) { + fname = sarrayGetString(safiles, i, L_NOCOPY); + if ((pix = pixRead(fname)) == NULL) { + L_WARNING("image file %d not read\n", procName, i); + continue; + } + if (pixGetDepth(pix) != 1) { + L_WARNING("image file %d not 1 bpp\n", procName, i); + continue; + } + jbAddPage(classer, pix); + pixDestroy(&pix); + } + + return 0; +} + + +/*! + * \brief jbAddPage() + * + * \param[in] jbclasser + * \param[in] pixs input page + * \return 0 if OK; 1 on error + */ +l_ok +jbAddPage(JBCLASSER *classer, + PIX *pixs) +{ +BOXA *boxas; +PIXA *pixas; + + PROCNAME("jbAddPage"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + classer->w = pixGetWidth(pixs); + classer->h = pixGetHeight(pixs); + + /* Get the appropriate components and their bounding boxes */ + if (jbGetComponents(pixs, classer->components, classer->maxwidth, + classer->maxheight, &boxas, &pixas)) { + return ERROR_INT("components not made", procName, 1); + } + + jbAddPageComponents(classer, pixs, boxas, pixas); + boxaDestroy(&boxas); + pixaDestroy(&pixas); + return 0; +} + + +/*! + * \brief jbAddPageComponents() + * + * \param[in] jbclasser + * \param[in] pixs input page + * \param[in] boxas b.b. of components for this page + * \param[in] pixas components for this page + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If there are no components on the page, we don't require input
+ *          of empty boxas or pixas, although that's the typical situation.
+ * 
+ */ +l_ok +jbAddPageComponents(JBCLASSER *classer, + PIX *pixs, + BOXA *boxas, + PIXA *pixas) +{ +l_int32 n; + + PROCNAME("jbAddPageComponents"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + if (!pixs) + return ERROR_INT("pix not defined", procName, 1); + + /* Test for no components on the current page. Always update the + * number of pages processed, even if nothing is on it. */ + if (!boxas || !pixas || (boxaGetCount(boxas) == 0)) { + classer->npages++; + return 0; + } + + /* Get classes. For hausdorff, it uses a specified size of + * structuring element and specified rank. For correlation, + * it uses a specified threshold. */ + if (classer->method == JB_RANKHAUS) { + if (jbClassifyRankHaus(classer, boxas, pixas)) + return ERROR_INT("rankhaus classification failed", procName, 1); + } else { /* classer->method == JB_CORRELATION */ + if (jbClassifyCorrelation(classer, boxas, pixas)) + return ERROR_INT("correlation classification failed", procName, 1); + } + + /* Find the global UL corners, adjusted for each instance so + * that the class template and instance will have their + * centroids in the same place. Then the template can be + * used to replace the instance. */ + if (jbGetULCorners(classer, pixs, boxas)) + return ERROR_INT("UL corners not found", procName, 1); + + /* Update total component counts and number of pages processed. */ + n = boxaGetCount(boxas); + classer->baseindex += n; + numaAddNumber(classer->nacomps, n); + classer->npages++; + return 0; +} + + +/*----------------------------------------------------------------------* + * Classification using windowed rank hausdorff metric * + *----------------------------------------------------------------------*/ +/*! + * \brief jbClassifyRankHaus() + * + * \param[in] jbclasser + * \param[in] boxa new components for classification + * \param[in] pixas new components for classification + * \return 0 if OK; 1 on error + */ +l_ok +jbClassifyRankHaus(JBCLASSER *classer, + BOXA *boxa, + PIXA *pixas) +{ +l_int32 n, nt, i, wt, ht, iclass, size, found, testval; +l_int32 npages, area1, area3; +l_int32 *tab8; +l_float32 rank, x1, y1, x2, y2; +BOX *box; +NUMA *naclass, *napage; +NUMA *nafg; /* fg area of all instances */ +NUMA *nafgt; /* fg area of all templates */ +JBFINDCTX *findcontext; +L_DNAHASH *dahash; +PIX *pix, *pix1, *pix2, *pix3, *pix4; +PIXA *pixa, *pixa1, *pixa2, *pixat, *pixatd; +PIXAA *pixaa; +PTA *pta, *ptac, *ptact; +SEL *sel; + + PROCNAME("jbClassifyRankHaus"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (!pixas) + return ERROR_INT("pixas not defined", procName, 1); + if ((n = pixaGetCount(pixas)) == 0) + return ERROR_INT("pixas is empty", procName, 1); + if ((nafg = pixaCountPixels(pixas)) == NULL) /* areas for this page */ + return ERROR_INT("fg counting failed", procName, 1); + + npages = classer->npages; + size = classer->sizehaus; + sel = selCreateBrick(size, size, size / 2, size / 2, SEL_HIT); + + /* Generate the bordered pixa, with and without dilation. + * pixa1 and pixa2 contain all the input components. */ + pixa1 = pixaCreate(n); + pixa2 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, + JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); + pix2 = pixDilate(NULL, pix1, sel); + pixaAddPix(pixa1, pix1, L_INSERT); /* un-dilated */ + pixaAddPix(pixa2, pix2, L_INSERT); /* dilated */ + pixDestroy(&pix); + } + + /* Get the centroids of all the bordered images. + * These are relative to the UL corner of each (bordered) pix. */ + pta = pixaCentroids(pixa1); /* centroids for this page; use here */ + ptac = classer->ptac; /* holds centroids of components up to this page */ + ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ + ptact = classer->ptact; /* holds centroids of templates */ + + /* Use these to save the class and page of each component. */ + naclass = classer->naclass; + napage = classer->napage; + + /* Store the unbordered pix in a pixaa, in a hierarchical + * set of arrays. There is one pixa for each class, + * and the pix in each pixa are all the instances found + * of that class. This is actually more than one would need + * for a jbig2 encoder, but there are two reasons to keep + * them around: (1) the set of instances for each class + * can be used to make an improved binary (or, better, + * a grayscale) template, rather than simply using the first + * one in the set; (2) we can investigate the failures + * of the classifier. This pixaa grows as we process + * successive pages. */ + pixaa = classer->pixaa; + + /* arrays to store class exemplars (templates) */ + pixat = classer->pixat; /* un-dilated */ + pixatd = classer->pixatd; /* dilated */ + + /* Fill up the pixaa tree with the template exemplars as + * the first pix in each pixa. As we add each pix, + * we also add the associated box to the pixa. + * We also keep track of the centroid of each pix, + * and use the difference between centroids (of the + * pix with the exemplar we are checking it with) + * to align the two when checking that the Hausdorff + * distance does not exceed a threshold. + * The threshold is set by the Sel used for dilating. + * For example, a 3x3 brick, sel_3, corresponds to a + * Hausdorff distance of 1. In general, for an NxN brick, + * with N odd, corresponds to a Hausdorff distance of (N - 1)/2. + * It turns out that we actually need to use a sel of size 2x2 + * to avoid small bad components when there is a halftone image + * from which components can be chosen. + * The larger the Sel you use, the fewer the number of classes, + * and the greater the likelihood of putting semantically + * different objects in the same class. For simplicity, + * we do this separately for the case of rank == 1.0 (exact + * match within the Hausdorff distance) and rank < 1.0. */ + rank = classer->rankhaus; + dahash = classer->dahash; + if (rank == 1.0) { + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + pix2 = pixaGetPix(pixa2, i, L_CLONE); + ptaGetPt(pta, i, &x1, &y1); + nt = pixaGetCount(pixat); /* number of templates */ + found = FALSE; + findcontext = findSimilarSizedTemplatesInit(classer, pix1); + while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { + /* Find score for this template */ + pix3 = pixaGetPix(pixat, iclass, L_CLONE); + pix4 = pixaGetPix(pixatd, iclass, L_CLONE); + ptaGetPt(ptact, iclass, &x2, &y2); + testval = pixHaustest(pix1, pix2, pix3, pix4, x1 - x2, y1 - y2, + MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT); + pixDestroy(&pix3); + pixDestroy(&pix4); + if (testval == 1) { + found = TRUE; + numaAddNumber(naclass, iclass); + numaAddNumber(napage, npages); + if (classer->keep_pixaa) { + pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); + pix = pixaGetPix(pixas, i, L_CLONE); + pixaAddPix(pixa, pix, L_INSERT); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaDestroy(&pixa); + } + break; + } + } + findSimilarSizedTemplatesDestroy(&findcontext); + if (found == FALSE) { /* new class */ + numaAddNumber(naclass, nt); + numaAddNumber(napage, npages); + pixa = pixaCreate(0); + pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ + pixaAddPix(pixa, pix, L_INSERT); + wt = pixGetWidth(pix); + ht = pixGetHeight(pix); + l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ + ptaAddPt(ptact, x1, y1); + pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ + pixaAddPix(pixatd, pix2, L_INSERT); /* bordered dil template */ + } else { /* don't save them */ + pixDestroy(&pix1); + pixDestroy(&pix2); + } + } + } else { /* rank < 1.0 */ + nafgt = classer->nafgt; + tab8 = makePixelSumTab8(); + for (i = 0; i < n; i++) { /* all instances on this page */ + pix1 = pixaGetPix(pixa1, i, L_CLONE); + numaGetIValue(nafg, i, &area1); + pix2 = pixaGetPix(pixa2, i, L_CLONE); + ptaGetPt(pta, i, &x1, &y1); /* use pta for this page */ + nt = pixaGetCount(pixat); /* number of templates */ + found = FALSE; + findcontext = findSimilarSizedTemplatesInit(classer, pix1); + while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { + /* Find score for this template */ + pix3 = pixaGetPix(pixat, iclass, L_CLONE); + numaGetIValue(nafgt, iclass, &area3); + pix4 = pixaGetPix(pixatd, iclass, L_CLONE); + ptaGetPt(ptact, iclass, &x2, &y2); + testval = pixRankHaustest(pix1, pix2, pix3, pix4, + x1 - x2, y1 - y2, + MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, + area1, area3, rank, tab8); + pixDestroy(&pix3); + pixDestroy(&pix4); + if (testval == 1) { /* greedy match; take the first */ + found = TRUE; + numaAddNumber(naclass, iclass); + numaAddNumber(napage, npages); + if (classer->keep_pixaa) { + pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); + pix = pixaGetPix(pixas, i, L_CLONE); + pixaAddPix(pixa, pix, L_INSERT); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaDestroy(&pixa); + } + break; + } + } + findSimilarSizedTemplatesDestroy(&findcontext); + if (found == FALSE) { /* new class */ + numaAddNumber(naclass, nt); + numaAddNumber(napage, npages); + pixa = pixaCreate(0); + pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ + pixaAddPix(pixa, pix, L_INSERT); + wt = pixGetWidth(pix); + ht = pixGetHeight(pix); + l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ + ptaAddPt(ptact, x1, y1); + pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ + pixaAddPix(pixatd, pix2, L_INSERT); /* ditto */ + numaAddNumber(nafgt, area1); + } else { /* don't save them */ + pixDestroy(&pix1); + pixDestroy(&pix2); + } + } + LEPT_FREE(tab8); + } + classer->nclass = pixaGetCount(pixat); + + numaDestroy(&nafg); + ptaDestroy(&pta); + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + selDestroy(&sel); + return 0; +} + + +/*! + * \brief pixHaustest() + * + * \param[in] pix1 new pix, not dilated + * \param[in] pix2 new pix, dilated + * \param[in] pix3 exemplar pix, not dilated + * \param[in] pix4 exemplar pix, dilated + * \param[in] delx x comp of centroid difference + * \param[in] dely y comp of centroid difference + * \param[in] maxdiffw max width difference of pix1 and pix2 + * \param[in] maxdiffh max height difference of pix1 and pix2 + * \return 0 FALSE) if no match, 1 (TRUE if the new + * pix is in the same class as the exemplar. + * + *
+ * Notes:
+ *  We check first that the two pix are roughly
+ *  the same size.  Only if they meet that criterion do
+ *  we compare the bitmaps.  The Hausdorff is a 2-way
+ *  check.  The centroid difference is used to align the two
+ *  images to the nearest integer for each of the checks.
+ *  These check that the dilated image of one contains
+ *  ALL the pixels of the undilated image of the other.
+ *  Checks are done in both direction.  A single pixel not
+ *  contained in either direction results in failure of the test.
+ * 
+ */ +l_int32 +pixHaustest(PIX *pix1, + PIX *pix2, + PIX *pix3, + PIX *pix4, + l_float32 delx, /* x(1) - x(3) */ + l_float32 dely, /* y(1) - y(3) */ + l_int32 maxdiffw, + l_int32 maxdiffh) +{ +l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; +PIX *pixt; + + /* Eliminate possible matches based on size difference */ + wi = pixGetWidth(pix1); + hi = pixGetHeight(pix1); + wt = pixGetWidth(pix3); + ht = pixGetHeight(pix3); + delw = L_ABS(wi - wt); + if (delw > maxdiffw) + return FALSE; + delh = L_ABS(hi - ht); + if (delh > maxdiffh) + return FALSE; + + /* Round difference in centroid location to nearest integer; + * use this as a shift when doing the matching. */ + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + + /* Do 1-direction hausdorff, checking that every pixel in pix1 + * is within a dilation distance of some pixel in pix3. Namely, + * that pix4 entirely covers pix1: + * pixt = pixSubtract(NULL, pix1, pix4), including shift + * where pixt has no ON pixels. */ + pixt = pixCreateTemplate(pix1); + pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); + pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), + pix4, 0, 0); + pixZero(pixt, &boolmatch); + if (boolmatch == 0) { + pixDestroy(&pixt); + return FALSE; + } + + /* Do 1-direction hausdorff, checking that every pixel in pix3 + * is within a dilation distance of some pixel in pix1. Namely, + * that pix2 entirely covers pix3: + * pixSubtract(pixt, pix3, pix2), including shift + * where pixt has no ON pixels. */ + pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); + pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); + pixZero(pixt, &boolmatch); + pixDestroy(&pixt); + return boolmatch; +} + + +/*! + * \brief pixRankHaustest() + * + * \param[in] pix1 new pix, not dilated + * \param[in] pix2 new pix, dilated + * \param[in] pix3 exemplar pix, not dilated + * \param[in] pix4 exemplar pix, dilated + * \param[in] delx x comp of centroid difference + * \param[in] dely y comp of centroid difference + * \param[in] maxdiffw max width difference of pix1 and pix2 + * \param[in] maxdiffh max height difference of pix1 and pix2 + * \param[in] area1 fg pixels in pix1 + * \param[in] area3 fg pixels in pix3 + * \param[in] rank rank value of test, each way + * \param[in] tab8 table of pixel sums for byte + * \return 0 FALSE) if no match, 1 (TRUE if the new + * pix is in the same class as the exemplar. + * + *
+ * Notes:
+ *  We check first that the two pix are roughly
+ *  the same size.  Only if they meet that criterion do
+ *  we compare the bitmaps.  We convert the rank value to
+ *  a number of pixels by multiplying the rank fraction by the number
+ *  of pixels in the undilated image.  The Hausdorff is a 2-way
+ *  check.  The centroid difference is used to align the two
+ *  images to the nearest integer for each of the checks.
+ *  The rank hausdorff checks that the dilated image of one
+ *  contains the rank fraction of the pixels of the undilated
+ *  image of the other.   Checks are done in both direction.
+ *  Failure of the test in either direction results in failure
+ *  of the test.
+ * 
+ */ +l_int32 +pixRankHaustest(PIX *pix1, + PIX *pix2, + PIX *pix3, + PIX *pix4, + l_float32 delx, /* x(1) - x(3) */ + l_float32 dely, /* y(1) - y(3) */ + l_int32 maxdiffw, + l_int32 maxdiffh, + l_int32 area1, + l_int32 area3, + l_float32 rank, + l_int32 *tab8) +{ +l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; +l_int32 thresh1, thresh3; +PIX *pixt; + + /* Eliminate possible matches based on size difference */ + wi = pixGetWidth(pix1); + hi = pixGetHeight(pix1); + wt = pixGetWidth(pix3); + ht = pixGetHeight(pix3); + delw = L_ABS(wi - wt); + if (delw > maxdiffw) + return FALSE; + delh = L_ABS(hi - ht); + if (delh > maxdiffh) + return FALSE; + + /* Upper bounds in remaining pixels for allowable match */ + thresh1 = (l_int32)(area1 * (1. - rank) + 0.5); + thresh3 = (l_int32)(area3 * (1. - rank) + 0.5); + + /* Round difference in centroid location to nearest integer; + * use this as a shift when doing the matching. */ + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + + /* Do 1-direction hausdorff, checking that every pixel in pix1 + * is within a dilation distance of some pixel in pix3. Namely, + * that pix4 entirely covers pix1: + * pixt = pixSubtract(NULL, pix1, pix4), including shift + * where pixt has no ON pixels. */ + pixt = pixCreateTemplate(pix1); + pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); + pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), + pix4, 0, 0); + pixThresholdPixelSum(pixt, thresh1, &boolmatch, tab8); + if (boolmatch == 1) { /* above thresh1 */ + pixDestroy(&pixt); + return FALSE; + } + + /* Do 1-direction hausdorff, checking that every pixel in pix3 + * is within a dilation distance of some pixel in pix1. Namely, + * that pix2 entirely covers pix3: + * pixSubtract(pixt, pix3, pix2), including shift + * where pixt has no ON pixels. */ + pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); + pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); + pixThresholdPixelSum(pixt, thresh3, &boolmatch, tab8); + pixDestroy(&pixt); + if (boolmatch == 1) /* above thresh3 */ + return FALSE; + else + return TRUE; +} + + +/*----------------------------------------------------------------------* + * Classification using windowed correlation score * + *----------------------------------------------------------------------*/ +/*! + * \brief jbClassifyCorrelation() + * + * \param[in] jbclasser + * \param[in] boxa new components for classification + * \param[in] pixas new components for classification + * \return 0 if OK; 1 on error + */ +l_ok +jbClassifyCorrelation(JBCLASSER *classer, + BOXA *boxa, + PIXA *pixas) +{ +l_int32 n, nt, i, iclass, wt, ht, found, area, area1, area2, npages, + overthreshold; +l_int32 *sumtab, *centtab; +l_uint32 *row, word; +l_float32 x1, y1, x2, y2, xsum, ysum; +l_float32 thresh, weight, threshold; +BOX *box; +NUMA *naclass, *napage; +NUMA *nafgt; /* fg area of all templates */ +NUMA *naarea; /* w * h area of all templates */ +JBFINDCTX *findcontext; +L_DNAHASH *dahash; +PIX *pix, *pix1, *pix2; +PIXA *pixa, *pixa1, *pixat; +PIXAA *pixaa; +PTA *pta, *ptac, *ptact; +l_int32 *pixcts; /* pixel counts of each pixa */ +l_int32 **pixrowcts; /* row-by-row pixel counts of each pixa */ +l_int32 x, y, rowcount, downcount, wpl; +l_uint8 byte; + + PROCNAME("jbClassifyCorrelation"); + + if (!classer) + return ERROR_INT("classer not found", procName, 1); + if (!boxa) + return ERROR_INT("boxa not found", procName, 1); + if (!pixas) + return ERROR_INT("pixas not found", procName, 1); + + npages = classer->npages; + + /* Generate the bordered pixa, which contains all the the + * input components. This will not be saved. */ + if ((n = pixaGetCount(pixas)) == 0) { + L_WARNING("pixas is empty\n", procName); + return 0; + } + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, + JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); + pixaAddPix(pixa1, pix1, L_INSERT); + pixDestroy(&pix); + } + + /* Use these to save the class and page of each component. */ + naclass = classer->naclass; + napage = classer->napage; + + /* Get the number of fg pixels in each component. */ + nafgt = classer->nafgt; /* holds fg areas of the templates */ + sumtab = makePixelSumTab8(); + + pixcts = (l_int32 *)LEPT_CALLOC(n, sizeof(*pixcts)); + pixrowcts = (l_int32 **)LEPT_CALLOC(n, sizeof(*pixrowcts)); + centtab = makePixelCentroidTab8(); + + /* Count the "1" pixels in each row of the pix in pixa1; this + * allows pixCorrelationScoreThresholded to abort early if a match + * is impossible. This loop merges three calculations: the total + * number of "1" pixels, the number of "1" pixels in each row, and + * the centroid. The centroids are relative to the UL corner of + * each (bordered) pix. The pixrowcts[i][y] are the total number + * of fg pixels in pixa[i] below row y. */ + pta = ptaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa1, i, L_CLONE); + pixrowcts[i] = (l_int32 *)LEPT_CALLOC(pixGetHeight(pix), + sizeof(**pixrowcts)); + xsum = 0; + ysum = 0; + wpl = pixGetWpl(pix); + row = pixGetData(pix) + (pixGetHeight(pix) - 1) * wpl; + downcount = 0; + for (y = pixGetHeight(pix) - 1; y >= 0; y--, row -= wpl) { + pixrowcts[i][y] = downcount; + rowcount = 0; + for (x = 0; x < wpl; x++) { + word = row[x]; + byte = word & 0xff; + rowcount += sumtab[byte]; + xsum += centtab[byte] + (x * 32 + 24) * sumtab[byte]; + byte = (word >> 8) & 0xff; + rowcount += sumtab[byte]; + xsum += centtab[byte] + (x * 32 + 16) * sumtab[byte]; + byte = (word >> 16) & 0xff; + rowcount += sumtab[byte]; + xsum += centtab[byte] + (x * 32 + 8) * sumtab[byte]; + byte = (word >> 24) & 0xff; + rowcount += sumtab[byte]; + xsum += centtab[byte] + x * 32 * sumtab[byte]; + } + downcount += rowcount; + ysum += rowcount * y; + } + pixcts[i] = downcount; + if (downcount > 0) { + ptaAddPt(pta, + xsum / (l_float32)downcount, ysum / (l_float32)downcount); + } else { /* no pixels; shouldn't happen */ + L_ERROR("downcount == 0 !\n", procName); + ptaAddPt(pta, pixGetWidth(pix) / 2, pixGetHeight(pix) / 2); + } + pixDestroy(&pix); + } + + ptac = classer->ptac; /* holds centroids of components up to this page */ + ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ + ptact = classer->ptact; /* holds centroids of templates */ + + /* Store the unbordered pix in a pixaa, in a hierarchical + * set of arrays. There is one pixa for each class, + * and the pix in each pixa are all the instances found + * of that class. This is actually more than one would need + * for a jbig2 encoder, but there are two reasons to keep + * them around: (1) the set of instances for each class + * can be used to make an improved binary (or, better, + * a grayscale) template, rather than simply using the first + * one in the set; (2) we can investigate the failures + * of the classifier. This pixaa grows as we process + * successive pages. */ + pixaa = classer->pixaa; + + /* Array to store class exemplars */ + pixat = classer->pixat; + + /* Fill up the pixaa tree with the template exemplars as + * the first pix in each pixa. As we add each pix, + * we also add the associated box to the pixa. + * We also keep track of the centroid of each pix, + * and use the difference between centroids (of the + * pix with the exemplar we are checking it with) + * to align the two when checking that the correlation + * score exceeds a threshold. The correlation score + * is given by the square of the area of the AND + * between aligned instance and template, divided by + * the product of areas of each image. For identical + * template and instance, the score is 1.0. + * If the threshold is too small, non-equivalent instances + * will be placed in the same class; if too large, there will + * be an unnecessary division of classes representing the + * same character. The weightfactor adds in some of the + * difference (1.0 - thresh), depending on the heaviness + * of the template (measured as the fraction of fg pixels). */ + thresh = classer->thresh; + weight = classer->weightfactor; + naarea = classer->naarea; + dahash = classer->dahash; + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + area1 = pixcts[i]; + ptaGetPt(pta, i, &x1, &y1); /* centroid for this instance */ + nt = pixaGetCount(pixat); + found = FALSE; + findcontext = findSimilarSizedTemplatesInit(classer, pix1); + while ( (iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { + /* Get the template */ + pix2 = pixaGetPix(pixat, iclass, L_CLONE); + numaGetIValue(nafgt, iclass, &area2); + ptaGetPt(ptact, iclass, &x2, &y2); /* template centroid */ + + /* Find threshold for this template */ + if (weight > 0.0) { + numaGetIValue(naarea, iclass, &area); + threshold = thresh + (1. - thresh) * weight * area2 / area; + } else { + threshold = thresh; + } + + /* Find score for this template */ + overthreshold = pixCorrelationScoreThresholded(pix1, pix2, + area1, area2, x1 - x2, y1 - y2, + MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, + sumtab, pixrowcts[i], threshold); +#if DEBUG_CORRELATION_SCORE + { + l_float32 score, testscore; + l_int32 count, testcount; + pixCorrelationScore(pix1, pix2, area1, area2, x1 - x2, y1 - y2, + MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, + sumtab, &score); + + pixCorrelationScoreSimple(pix1, pix2, area1, area2, + x1 - x2, y1 - y2, MAX_DIFF_WIDTH, + MAX_DIFF_HEIGHT, sumtab, &testscore); + count = (l_int32)rint(sqrt(score * area1 * area2)); + testcount = (l_int32)rint(sqrt(testscore * area1 * area2)); + if ((score >= threshold) != (testscore >= threshold)) { + fprintf(stderr, "Correlation score mismatch: " + "%d(%g,%d) vs %d(%g,%d) (%g)\n", + count, score, score >= threshold, + testcount, testscore, testscore >= threshold, + score - testscore); + } + + if ((score >= threshold) != overthreshold) { + fprintf(stderr, "Mismatch between correlation/threshold " + "comparison: %g(%g,%d) >= %g(%g) vs %s\n", + score, score*area1*area2, count, threshold, + threshold*area1*area2, + (overthreshold ? "true" : "false")); + } + } +#endif /* DEBUG_CORRELATION_SCORE */ + pixDestroy(&pix2); + + if (overthreshold) { /* greedy match */ + found = TRUE; + numaAddNumber(naclass, iclass); + numaAddNumber(napage, npages); + if (classer->keep_pixaa) { + /* We are keeping a record of all components */ + pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); + pix = pixaGetPix(pixas, i, L_CLONE); + pixaAddPix(pixa, pix, L_INSERT); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaDestroy(&pixa); + } + break; + } + } + findSimilarSizedTemplatesDestroy(&findcontext); + if (found == FALSE) { /* new class */ + numaAddNumber(naclass, nt); + numaAddNumber(napage, npages); + pixa = pixaCreate(0); + pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ + pixaAddPix(pixa, pix, L_INSERT); + wt = pixGetWidth(pix); + ht = pixGetHeight(pix); + l_dnaHashAdd(dahash, (l_uint64)ht * wt, nt); + box = boxaGetBox(boxa, i, L_CLONE); + pixaAddBox(pixa, box, L_INSERT); + pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ + ptaAddPt(ptact, x1, y1); + numaAddNumber(nafgt, area1); + pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ + area = (pixGetWidth(pix1) - 2 * JB_ADDED_PIXELS) * + (pixGetHeight(pix1) - 2 * JB_ADDED_PIXELS); + numaAddNumber(naarea, area); + } else { /* don't save it */ + pixDestroy(&pix1); + } + } + classer->nclass = pixaGetCount(pixat); + + LEPT_FREE(pixcts); + LEPT_FREE(centtab); + for (i = 0; i < n; i++) { + LEPT_FREE(pixrowcts[i]); + } + LEPT_FREE(pixrowcts); + + LEPT_FREE(sumtab); + ptaDestroy(&pta); + pixaDestroy(&pixa1); + return 0; +} + + +/*----------------------------------------------------------------------* + * Determine the image components we start with * + *----------------------------------------------------------------------*/ +/*! + * \brief jbGetComponents() + * + * \param[in] pixs 1 bpp + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \param[in] maxwidth of saved components; larger are discarded + * \param[in] maxheight of saved components; larger are discarded + * \param[out] ppboxa b.b. of component items + * \param[out] pppixa component items + * \return 0 if OK, 1 on error + */ +l_ok +jbGetComponents(PIX *pixs, + l_int32 components, + l_int32 maxwidth, + l_int32 maxheight, + BOXA **pboxad, + PIXA **ppixad) +{ +l_int32 empty, res, redfactor; +BOXA *boxa; +PIX *pix1, *pix2, *pix3; +PIXA *pixa, *pixat; + + PROCNAME("jbGetComponents"); + + if (!pboxad) + return ERROR_INT("&boxad not defined", procName, 1); + *pboxad = NULL; + if (!ppixad) + return ERROR_INT("&pixad not defined", procName, 1); + *ppixad = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return ERROR_INT("invalid components", procName, 1); + + pixZero(pixs, &empty); + if (empty) { + *pboxad = boxaCreate(0); + *ppixad = pixaCreate(0); + return 0; + } + + /* If required, preprocess input pixs. The method for both + * characters and words is to generate a connected component + * mask over the units that we want to aggregrate, which are, + * in general, sets of related connected components in pixs. + * For characters, we want to include the dots with + * 'i', 'j' and '!', so we do a small vertical closing to + * generate the mask. For words, we make a mask over all + * characters in each word. This is a bit more tricky, because + * the spacing between words is difficult to predict a priori, + * and words can be typeset with variable spacing that can + * in some cases be barely larger than the space between + * characters. The first step is to generate the mask and + * identify each of its connected components. */ + if (components == JB_CONN_COMPS) { /* no preprocessing */ + boxa = pixConnComp(pixs, &pixa, 8); + } else if (components == JB_CHARACTERS) { + pix1 = pixMorphSequence(pixs, "c1.6", 0); + boxa = pixConnComp(pix1, &pixat, 8); + pixa = pixaClipToPix(pixat, pixs); + pixDestroy(&pix1); + pixaDestroy(&pixat); + } else { /* components == JB_WORDS */ + + /* Do the operations at about 150 ppi resolution. + * It is much faster at 75 ppi, but the results are + * more accurate at 150 ppi. This will segment the + * words in body text. It can be expected that relatively + * infrequent words in a larger font will be split. */ + res = pixGetXRes(pixs); + if (res <= 200) { + redfactor = 1; + pix1 = pixClone(pixs); + } else if (res <= 400) { + redfactor = 2; + pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); + } else { + redfactor = 4; + pix1 = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); + } + + /* Estimate the word mask, at approximately 150 ppi. + * This has both very large and very small components left in. */ + pixWordMaskByDilation(pix1, &pix2, NULL, NULL); + + /* Expand the optimally dilated word mask to full res. */ + pix3 = pixExpandReplicate(pix2, redfactor); + + /* Pull out the pixels in pixs corresponding to the mask + * components in pix3. Note that above we used threshold + * levels in the reduction of 1 to insure that the resulting + * mask fully covers the input pixs. The downside of using + * a threshold of 1 is that very close characters from adjacent + * lines can be joined. But with a level of 2 or greater, + * it is necessary to use a seedfill, followed by a pixOr(): + * pixt4 = pixSeedfillBinary(NULL, pix3, pixs, 8); + * pixOr(pix3, pix3, pixt4); + * to insure that the mask coverage is complete over pixs. */ + boxa = pixConnComp(pix3, &pixat, 4); + pixa = pixaClipToPix(pixat, pixs); + pixaDestroy(&pixat); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + } + + /* Remove large components, and save the results. */ + *ppixad = pixaSelectBySize(pixa, maxwidth, maxheight, L_SELECT_IF_BOTH, + L_SELECT_IF_LTE, NULL); + *pboxad = boxaSelectBySize(boxa, maxwidth, maxheight, L_SELECT_IF_BOTH, + L_SELECT_IF_LTE, NULL); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + + return 0; +} + + +/*! + * \brief pixWordMaskByDilation() + * + * \param[in] pixs 1 bpp; typ. at 75 to 150 ppi + * \param[out] pmask [optional] dilated word mask + * \param[out] psize [optional] size of good horizontal dilation + * \param[out] pixadb [optional] debug: pixa of intermediate steps + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives an estimate of the word masks.  See
+ *          pixWordBoxesByDilation() for further filtering of the word boxes.
+ *      (2) The resolution should be between 75 and 150 ppi, and the optimal
+ *          dilation will be between 3 and 10.
+ *      (3) A good size for dilating to get word masks is optionally returned.
+ *      (4) Typically, the number of c.c. reduced with each successive
+ *          dilation (stored in nadiff) decreases quickly to a minimum
+ *          (where the characters in a word are joined), and then
+ *          increases again as the smaller number of words are joined.
+ *          For the typical case, you can then look for this minimum
+ *          and dilate to get the word mask.  However, there are many
+ *          cases where the function is not so simple. For example, if the
+ *          pix has been upscaled 2x, the nadiff function oscillates, with
+ *          every other value being zero!  And for some images it tails
+ *          off without a clear minimum to indicate where to break.
+ *          So a more simple and robust method is to find the dilation
+ *          where the initial number of c.c. has been reduced by some
+ *          fraction (we use a 70% reduction).
+ * 
+ */ +l_ok +pixWordMaskByDilation(PIX *pixs, + PIX **ppixm, + l_int32 *psize, + PIXA *pixadb) +{ +l_int32 i, n, ndil, maxdiff, diff, ibest; +l_int32 check, count, total, xres; +l_int32 ncc[13]; /* max dilation + 1 */ +l_int32 *diffa; +BOXA *boxa; +NUMA *nacc, *nadiff; +PIX *pix1, *pix2; + + PROCNAME("pixWordMaskByDilation"); + + if (ppixm) *ppixm = NULL; + if (psize) *psize = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (!ppixm && !psize) + return ERROR_INT("no output requested", procName, 1); + + /* Find a good dilation to create the word mask, by successively + * increasing dilation size and counting the connected components. */ + pix1 = pixCopy(NULL, pixs); + ndil = 12; /* appropriate for 75 to 150 ppi */ + nacc = numaCreate(ndil + 1); + nadiff = numaCreate(ndil + 1); + for (i = 0; i <= ndil; i++) { + if (i == 0) /* first one not dilated */ + pix2 = pixCopy(NULL, pix1); + else /* successive dilation by sel_2h */ + pix2 = pixMorphSequence(pix1, "d2.1", 0); + boxa = pixConnCompBB(pix2, 4); + ncc[i] = boxaGetCount(boxa); + numaAddNumber(nacc, ncc[i]); + if (i == 0) total = ncc[0]; + if (i > 0) { + diff = ncc[i - 1] - ncc[i]; + numaAddNumber(nadiff, diff); + } + pixDestroy(&pix1); + pix1 = pix2; + boxaDestroy(&boxa); + } + pixDestroy(&pix1); + + /* Find the dilation at which the c.c. count has reduced + * to 30% of the initial value. Although 30% seems high, + * it seems better to use this but add one to ibest. */ + diffa = numaGetIArray(nadiff); + n = numaGetCount(nadiff); + maxdiff = 0; + check = TRUE; + ibest = 2; + for (i = 1; i < n; i++) { + numaGetIValue(nacc, i, &count); + if (check && count < 0.3 * total) { + ibest = i + 1; + check = FALSE; + } + diff = diffa[i]; + if (diff > maxdiff) + maxdiff = diff; + } + LEPT_FREE(diffa); + + /* Add small compensation for higher resolution */ + xres = pixGetXRes(pixs); + if (xres == 0) xres = 150; + if (xres > 110) ibest++; + if (ibest < 2) { + L_INFO("setting ibest to minimum allowed value of 2\n", procName); + ibest = 2; + } + + if (pixadb) { + lept_mkdir("lept/jb"); + {GPLOT *gplot; + NUMA *naseq; + PIX *pix3, *pix4; + L_INFO("Best dilation: %d\n", procName, L_MAX(3, ibest + 1)); + naseq = numaMakeSequence(1, 1, numaGetCount(nacc)); + gplot = gplotCreate("/tmp/lept/jb/numcc", GPLOT_PNG, + "Number of cc vs. horizontal dilation", + "Sel horiz", "Number of cc"); + gplotAddPlot(gplot, naseq, nacc, GPLOT_LINES, ""); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + pix3 = pixRead("/tmp/lept/jb/numcc.png"); + pixaAddPix(pixadb, pix3, L_INSERT); + numaDestroy(&naseq); + naseq = numaMakeSequence(1, 1, numaGetCount(nadiff)); + gplot = gplotCreate("/tmp/lept/jb/diffcc", GPLOT_PNG, + "Diff count of cc vs. horizontal dilation", + "Sel horiz", "Diff in cc"); + gplotAddPlot(gplot, naseq, nadiff, GPLOT_LINES, ""); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + pix3 = pixRead("/tmp/lept/jb/diffcc.png"); + pixaAddPix(pixadb, pix3, L_INSERT); + numaDestroy(&naseq); + pix3 = pixCloseBrick(NULL, pixs, ibest + 1, 1); + pix4 = pixScaleToSize(pix3, 600, 0); + pixaAddPix(pixadb, pix4, L_INSERT); + pixDestroy(&pix3); + } + } + + if (psize) *psize = ibest + 1; + if (ppixm) + *ppixm = pixCloseBrick(NULL, pixs, ibest + 1, 1); + + numaDestroy(&nacc); + numaDestroy(&nadiff); + return 0; +} + + +/*! + * \brief pixWordBoxesByDilation() + * + * \param[in] pixs 1 bpp; typ. 75 - 200 ppi + * \param[in] minwidth saved components; smaller are discarded + * \param[in] minheight saved components; smaller are discarded + * \param[in] maxwidth saved components; larger are discarded + * \param[in] maxheight saved components; larger are discarded + * \param[out] pboxa of dilated word mask + * \param[out] psize [optional] size of good horizontal dilation + * \param[out] pixadb [optional] debug: pixa of intermediate steps + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Returns a pruned set of word boxes.
+ *      (2) See pixWordMaskByDilation().
+ * 
+ */ +l_ok +pixWordBoxesByDilation(PIX *pixs, + l_int32 minwidth, + l_int32 minheight, + l_int32 maxwidth, + l_int32 maxheight, + BOXA **pboxa, + l_int32 *psize, + PIXA *pixadb) +{ +BOXA *boxa1, *boxa2; +PIX *pix1, *pix2; + + PROCNAME("pixWordBoxesByDilation"); + + if (psize) *psize = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (!pboxa) + return ERROR_INT("&boxa not defined", procName, 1); + *pboxa = NULL; + + /* Make a first estimate of the word mask */ + if (pixWordMaskByDilation(pixs, &pix1, psize, pixadb)) + return ERROR_INT("pixWordMaskByDilation() failed", procName, 1); + + /* Prune the word mask. Get the bounding boxes of the words. + * Remove the small ones, which can be due to punctuation + * that was not joined to a word. Also remove the large ones, + * which are not likely to be words. */ + boxa1 = pixConnComp(pix1, NULL, 8); + boxa2 = boxaSelectBySize(boxa1, minwidth, minheight, L_SELECT_IF_BOTH, + L_SELECT_IF_GTE, NULL); + *pboxa = boxaSelectBySize(boxa2, maxwidth, maxheight, L_SELECT_IF_BOTH, + L_SELECT_IF_LTE, NULL); + if (pixadb) { + pix2 = pixUnpackBinary(pixs, 32, 1); + pixRenderBoxaArb(pix2, boxa1, 2, 255, 0, 0); + pixaAddPix(pixadb, pix2, L_INSERT); + pix2 = pixUnpackBinary(pixs, 32, 1); + pixRenderBoxaArb(pix2, boxa2, 2, 0, 255, 0); + pixaAddPix(pixadb, pix2, L_INSERT); + } + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + pixDestroy(&pix1); + return 0; +} + + +/*----------------------------------------------------------------------* + * Build grayscale composites (templates) * + *----------------------------------------------------------------------*/ +/*! + * \brief jbAccumulateComposites() + * + * \param[in] pixaa one pixa for each class + * \param[out] ppna number of samples used to build each composite + * \param[out] pptat centroids of bordered composites + * \return pixad accumulated sum of samples in each class, or NULL on error + * + */ +PIXA * +jbAccumulateComposites(PIXAA *pixaa, + NUMA **pna, + PTA **pptat) +{ +l_int32 n, nt, i, j, d, minw, maxw, minh, maxh, xdiff, ydiff; +l_float32 x, y, xave, yave; +NUMA *na; +PIX *pix, *pixt1, *pixt2, *pixsum; +PIXA *pixa, *pixad; +PTA *ptat, *pta; + + PROCNAME("jbAccumulateComposites"); + + if (!pptat) + return (PIXA *)ERROR_PTR("&ptat not defined", procName, NULL); + *pptat = NULL; + if (!pna) + return (PIXA *)ERROR_PTR("&na not defined", procName, NULL); + *pna = NULL; + if (!pixaa) + return (PIXA *)ERROR_PTR("pixaa not defined", procName, NULL); + + n = pixaaGetCount(pixaa, NULL); + if ((ptat = ptaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("ptat not made", procName, NULL); + *pptat = ptat; + pixad = pixaCreate(n); + na = numaCreate(n); + *pna = na; + + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(pixaa, i, L_CLONE); + nt = pixaGetCount(pixa); + numaAddNumber(na, nt); + if (nt == 0) { + L_WARNING("empty pixa found!\n", procName); + pixaDestroy(&pixa); + continue; + } + pixaSizeRange(pixa, &minw, &minh, &maxw, &maxh); + pix = pixaGetPix(pixa, 0, L_CLONE); + d = pixGetDepth(pix); + pixDestroy(&pix); + pixt1 = pixCreate(maxw, maxh, d); + pixsum = pixInitAccumulate(maxw, maxh, 0); + pta = pixaCentroids(pixa); + + /* Find the average value of the centroids ... */ + xave = yave = 0; + for (j = 0; j < nt; j++) { + ptaGetPt(pta, j, &x, &y); + xave += x; + yave += y; + } + xave = xave / (l_float32)nt; + yave = yave / (l_float32)nt; + + /* and place all centroids at their average value */ + for (j = 0; j < nt; j++) { + pixt2 = pixaGetPix(pixa, j, L_CLONE); + ptaGetPt(pta, j, &x, &y); + xdiff = (l_int32)(x - xave); + ydiff = (l_int32)(y - yave); + pixClearAll(pixt1); + pixRasterop(pixt1, xdiff, ydiff, maxw, maxh, PIX_SRC, + pixt2, 0, 0); + pixAccumulate(pixsum, pixt1, L_ARITH_ADD); + pixDestroy(&pixt2); + } + pixaAddPix(pixad, pixsum, L_INSERT); + ptaAddPt(ptat, xave, yave); + + pixaDestroy(&pixa); + pixDestroy(&pixt1); + ptaDestroy(&pta); + } + + return pixad; +} + + +/*! + * \brief jbTemplatesFromComposites() + * + * \param[in] pixac one pix of composites for each class + * \param[in] na number of samples used for each class composite + * \return pixad 8 bpp templates for each class, or NULL on error + * + */ +PIXA * +jbTemplatesFromComposites(PIXA *pixac, + NUMA *na) +{ +l_int32 n, i; +l_float32 nt; /* number of samples in the composite; always an integer */ +l_float32 factor; +PIX *pixsum; /* accumulated composite */ +PIX *pixd; +PIXA *pixad; + + PROCNAME("jbTemplatesFromComposites"); + + if (!pixac) + return (PIXA *)ERROR_PTR("pixac not defined", procName, NULL); + if (!na) + return (PIXA *)ERROR_PTR("na not defined", procName, NULL); + + n = pixaGetCount(pixac); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pixsum = pixaGetPix(pixac, i, L_COPY); /* changed internally */ + numaGetFValue(na, i, &nt); + factor = 255. / nt; + pixMultConstAccumulate(pixsum, factor, 0); /* changes pixsum */ + pixd = pixFinalAccumulate(pixsum, 0, 8); + pixaAddPix(pixad, pixd, L_INSERT); + pixDestroy(&pixsum); + } + + return pixad; +} + + + +/*----------------------------------------------------------------------* + * jbig2 utility routines * + *----------------------------------------------------------------------*/ +/*! + * \brief jbClasserCreate() + * + * \param[in] method JB_RANKHAUS, JB_CORRELATION + * \param[in] components JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS + * \return jbclasser, or NULL on error + */ +JBCLASSER * +jbClasserCreate(l_int32 method, + l_int32 components) +{ +JBCLASSER *classer; + + PROCNAME("jbClasserCreate"); + + if (method != JB_RANKHAUS && method != JB_CORRELATION) + return (JBCLASSER *)ERROR_PTR("invalid method", procName, NULL); + if (components != JB_CONN_COMPS && components != JB_CHARACTERS && + components != JB_WORDS) + return (JBCLASSER *)ERROR_PTR("invalid component", procName, NULL); + + classer = (JBCLASSER *)LEPT_CALLOC(1, sizeof(JBCLASSER)); + classer->method = method; + classer->components = components; + classer->nacomps = numaCreate(0); + classer->pixaa = pixaaCreate(0); + classer->pixat = pixaCreate(0); + classer->pixatd = pixaCreate(0); + classer->nafgt = numaCreate(0); + classer->naarea = numaCreate(0); + classer->ptac = ptaCreate(0); + classer->ptact = ptaCreate(0); + classer->naclass = numaCreate(0); + classer->napage = numaCreate(0); + classer->ptaul = ptaCreate(0); + return classer; +} + + +/* + * \brief jbClasserDestroy() + * + * \param[in,out] pclasser will be set to null before returning + * \return void + */ +void +jbClasserDestroy(JBCLASSER **pclasser) +{ +JBCLASSER *classer; + + if (!pclasser) + return; + if ((classer = *pclasser) == NULL) + return; + + sarrayDestroy(&classer->safiles); + numaDestroy(&classer->nacomps); + pixaaDestroy(&classer->pixaa); + pixaDestroy(&classer->pixat); + pixaDestroy(&classer->pixatd); + l_dnaHashDestroy(&classer->dahash); + numaDestroy(&classer->nafgt); + numaDestroy(&classer->naarea); + ptaDestroy(&classer->ptac); + ptaDestroy(&classer->ptact); + numaDestroy(&classer->naclass); + numaDestroy(&classer->napage); + ptaDestroy(&classer->ptaul); + ptaDestroy(&classer->ptall); + LEPT_FREE(classer); + *pclasser = NULL; + return; +} + + +/*! + * \brief jbDataSave() + * + * \param[in] jbclasser + * \param[in] latticew cell width used to store each connected + * component in the composite + * \param[in] latticeh ditto for cell height + * \return jbdata, or NULL on error + * + *
+ * Notes:
+ *      (1) This routine stores the jbig2-type data required for
+ *          generating a lossy jbig2 version of the image.
+ *          It can be losslessly written to (and read from) two files.
+ *      (2) It generates and stores the mosaic of templates.
+ *      (3) It clones the Numa and Pta arrays, so these must all
+ *          be destroyed by the caller.
+ *      (4) Input 0 to use the default values for latticew and/or latticeh,
+ * 
+ */ +JBDATA * +jbDataSave(JBCLASSER *classer) +{ +l_int32 maxw, maxh; +JBDATA *data; +PIX *pix; + + PROCNAME("jbDataSave"); + + if (!classer) + return (JBDATA *)ERROR_PTR("classer not defined", procName, NULL); + + /* Write the templates into an array. */ + pixaSizeRange(classer->pixat, NULL, NULL, &maxw, &maxh); + pix = pixaDisplayOnLattice(classer->pixat, maxw + 1, maxh + 1, + NULL, NULL); + if (!pix) + return (JBDATA *)ERROR_PTR("data not made", procName, NULL); + + data = (JBDATA *)LEPT_CALLOC(1, sizeof(JBDATA)); + data->pix = pix; + data->npages = classer->npages; + data->w = classer->w; + data->h = classer->h; + data->nclass = classer->nclass; + data->latticew = maxw + 1; + data->latticeh = maxh + 1; + data->naclass = numaClone(classer->naclass); + data->napage = numaClone(classer->napage); + data->ptaul = ptaClone(classer->ptaul); + return data; +} + + +/* + * \brief jbDataDestroy() + * + * \param[in,out] pdata will be set to null before returning + * \return void + */ +void +jbDataDestroy(JBDATA **pdata) +{ +JBDATA *data; + + if (!pdata) + return; + if ((data = *pdata) == NULL) + return; + + pixDestroy(&data->pix); + numaDestroy(&data->naclass); + numaDestroy(&data->napage); + ptaDestroy(&data->ptaul); + LEPT_FREE(data); + *pdata = NULL; + return; +} + + +/*! + * \brief jbDataWrite() + * + * \param[in] rootname for output files; everything but the extension + * \param[in] jbdata + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serialization function that writes data in jbdata to file.
+ * 
+ */ +l_ok +jbDataWrite(const char *rootout, + JBDATA *jbdata) +{ +char buf[L_BUF_SIZE]; +l_int32 w, h, nclass, npages, cellw, cellh, ncomp, i, x, y, iclass, ipage; +NUMA *naclass, *napage; +PTA *ptaul; +PIX *pixt; +FILE *fp; + + PROCNAME("jbDataWrite"); + + if (!rootout) + return ERROR_INT("no rootout", procName, 1); + if (!jbdata) + return ERROR_INT("no jbdata", procName, 1); + + npages = jbdata->npages; + w = jbdata->w; + h = jbdata->h; + pixt = jbdata->pix; + nclass = jbdata->nclass; + cellw = jbdata->latticew; + cellh = jbdata->latticeh; + naclass = jbdata->naclass; + napage = jbdata->napage; + ptaul = jbdata->ptaul; + + snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_TEMPLATE_EXT); + pixWrite(buf, pixt, IFF_PNG); + + snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_DATA_EXT); + if ((fp = fopenWriteStream(buf, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ncomp = ptaGetCount(ptaul); + fprintf(fp, "jb data file\n"); + fprintf(fp, "num pages = %d\n", npages); + fprintf(fp, "page size: w = %d, h = %d\n", w, h); + fprintf(fp, "num components = %d\n", ncomp); + fprintf(fp, "num classes = %d\n", nclass); + fprintf(fp, "template lattice size: w = %d, h = %d\n", cellw, cellh); + for (i = 0; i < ncomp; i++) { + numaGetIValue(napage, i, &ipage); + numaGetIValue(naclass, i, &iclass); + ptaGetIPt(ptaul, i, &x, &y); + fprintf(fp, "%d %d %d %d\n", ipage, iclass, x, y); + } + fclose(fp); + + return 0; +} + + +/*! + * \brief jbDataRead() + * + * \param[in] rootname for template and data files + * \return jbdata, or NULL on error + */ +JBDATA * +jbDataRead(const char *rootname) +{ +char fname[L_BUF_SIZE]; +char *linestr; +l_uint8 *data; +l_int32 nsa, i, w, h, cellw, cellh, x, y, iclass, ipage; +l_int32 npages, nclass, ncomp, ninit; +size_t size; +JBDATA *jbdata; +NUMA *naclass, *napage; +PIX *pixs; +PTA *ptaul; +SARRAY *sa; + + PROCNAME("jbDataRead"); + + if (!rootname) + return (JBDATA *)ERROR_PTR("rootname not defined", procName, NULL); + + snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_TEMPLATE_EXT); + if ((pixs = pixRead(fname)) == NULL) + return (JBDATA *)ERROR_PTR("pix not read", procName, NULL); + + snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_DATA_EXT); + if ((data = l_binaryRead(fname, &size)) == NULL) { + pixDestroy(&pixs); + return (JBDATA *)ERROR_PTR("data not read", procName, NULL); + } + + if ((sa = sarrayCreateLinesFromString((char *)data, 0)) == NULL) { + pixDestroy(&pixs); + LEPT_FREE(data); + return (JBDATA *)ERROR_PTR("sa not made", procName, NULL); + } + nsa = sarrayGetCount(sa); /* number of cc + 6 */ + linestr = sarrayGetString(sa, 0, L_NOCOPY); + if (strcmp(linestr, "jb data file") != 0) { + pixDestroy(&pixs); + LEPT_FREE(data); + sarrayDestroy(&sa); + return (JBDATA *)ERROR_PTR("invalid jb data file", procName, NULL); + } + linestr = sarrayGetString(sa, 1, L_NOCOPY); + sscanf(linestr, "num pages = %d", &npages); + linestr = sarrayGetString(sa, 2, L_NOCOPY); + sscanf(linestr, "page size: w = %d, h = %d", &w, &h); + linestr = sarrayGetString(sa, 3, L_NOCOPY); + sscanf(linestr, "num components = %d", &ncomp); + linestr = sarrayGetString(sa, 4, L_NOCOPY); + sscanf(linestr, "num classes = %d\n", &nclass); + linestr = sarrayGetString(sa, 5, L_NOCOPY); + sscanf(linestr, "template lattice size: w = %d, h = %d\n", &cellw, &cellh); + +#if 1 + fprintf(stderr, "num pages = %d\n", npages); + fprintf(stderr, "page size: w = %d, h = %d\n", w, h); + fprintf(stderr, "num components = %d\n", ncomp); + fprintf(stderr, "num classes = %d\n", nclass); + fprintf(stderr, "template lattice size: w = %d, h = %d\n", cellw, cellh); +#endif + + ninit = ncomp; + if (ncomp > 1000000) { /* fuzz protection */ + L_WARNING("ncomp > 1M\n", procName); + ninit = 1000000; + } + naclass = numaCreate(ninit); + napage = numaCreate(ninit); + ptaul = ptaCreate(ninit); + for (i = 6; i < nsa; i++) { + linestr = sarrayGetString(sa, i, L_NOCOPY); + sscanf(linestr, "%d %d %d %d\n", &ipage, &iclass, &x, &y); + numaAddNumber(napage, ipage); + numaAddNumber(naclass, iclass); + ptaAddPt(ptaul, x, y); + } + + jbdata = (JBDATA *)LEPT_CALLOC(1, sizeof(JBDATA)); + jbdata->pix = pixs; + jbdata->npages = npages; + jbdata->w = w; + jbdata->h = h; + jbdata->nclass = nclass; + jbdata->latticew = cellw; + jbdata->latticeh = cellh; + jbdata->naclass = naclass; + jbdata->napage = napage; + jbdata->ptaul = ptaul; + + LEPT_FREE(data); + sarrayDestroy(&sa); + return jbdata; +} + + +/*! + * \brief jbDataRender() + * + * \param[in] jbdata + * \param[in] debugflag if TRUE, writes into 2 bpp pix and adds + * component outlines in color + * \return pixa reconstruction of original images, using templates or + * NULL on error + */ +PIXA * +jbDataRender(JBDATA *data, + l_int32 debugflag) +{ +l_int32 i, w, h, cellw, cellh, x, y, iclass, ipage; +l_int32 npages, nclass, ncomp, wp, hp; +BOX *box; +NUMA *naclass, *napage; +PIX *pixt, *pixt2, *pix, *pixd; +PIXA *pixat; /* pixa of templates */ +PIXA *pixad; /* pixa of output images */ +PIXCMAP *cmap; +PTA *ptaul; + + PROCNAME("jbDataRender"); + + if (!data) + return (PIXA *)ERROR_PTR("data not defined", procName, NULL); + + npages = data->npages; + w = data->w; + h = data->h; + pixt = data->pix; + nclass = data->nclass; + cellw = data->latticew; + cellh = data->latticeh; + naclass = data->naclass; + napage = data->napage; + ptaul = data->ptaul; + ncomp = numaGetCount(naclass); + + /* Reconstruct the original set of images from the templates + * and the data associated with each component. First, + * generate the output pixa as a set of empty pix. */ + if ((pixad = pixaCreate(npages)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + for (i = 0; i < npages; i++) { + if (debugflag == FALSE) { + pix = pixCreate(w, h, 1); + } else { + pix = pixCreate(w, h, 2); + cmap = pixcmapCreate(2); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixcmapAddColor(cmap, 255, 0, 0); /* for box outlines */ + pixSetColormap(pix, cmap); + } + pixaAddPix(pixad, pix, L_INSERT); + } + + /* Put the class templates into a pixa. */ + if ((pixat = pixaCreateFromPix(pixt, nclass, cellw, cellh)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pixat not made", procName, NULL); + } + + /* Place each component in the right location on its page. */ + for (i = 0; i < ncomp; i++) { + numaGetIValue(napage, i, &ipage); + numaGetIValue(naclass, i, &iclass); + pix = pixaGetPix(pixat, iclass, L_CLONE); /* the template */ + wp = pixGetWidth(pix); + hp = pixGetHeight(pix); + ptaGetIPt(ptaul, i, &x, &y); + pixd = pixaGetPix(pixad, ipage, L_CLONE); /* the output page */ + if (debugflag == FALSE) { + pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pix, 0, 0); + } else { + pixt2 = pixConvert1To2Cmap(pix); + pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pixt2, 0, 0); + box = boxCreate(x, y, wp, hp); + pixRenderBoxArb(pixd, box, 1, 255, 0, 0); + pixDestroy(&pixt2); + boxDestroy(&box); + } + pixDestroy(&pix); /* the clone only */ + pixDestroy(&pixd); /* the clone only */ + } + + pixaDestroy(&pixat); + return pixad; +} + + +/*! + * \brief jbGetULCorners() + * + * \param[in] jbclasser + * \param[in] pixs full res image + * \param[in] boxa of c.c. bounding rectangles for this page + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes the ptaul field, which has the global UL corners,
+ *          adjusted for each specific component, so that each component
+ *          can be replaced by the template for its class and have the
+ *          centroid in the template in the same position as the
+ *          centroid of the original connected component.  It is important
+ *          that this be done properly to avoid a wavy baseline in the
+ *          result.
+ *      (2) The array fields ptac and ptact give the centroids of
+ *          those components relative to the UL corner of each component.
+ *          Here, we compute the difference in each component, round to
+ *          nearest integer, and correct the box->x and box->y by
+ *          the appropriate integral difference.
+ *      (3) The templates and stored instances are all bordered.
+ * 
+ */ +l_ok +jbGetULCorners(JBCLASSER *classer, + PIX *pixs, + BOXA *boxa) +{ +l_int32 i, baseindex, index, n, iclass, idelx, idely, x, y, dx, dy; +l_int32 *sumtab; +l_float32 x1, x2, y1, y2, delx, dely; +BOX *box; +NUMA *naclass; +PIX *pixt; +PTA *ptac, *ptact, *ptaul; + + PROCNAME("jbGetULCorners"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + + n = boxaGetCount(boxa); + ptaul = classer->ptaul; + naclass = classer->naclass; + ptac = classer->ptac; + ptact = classer->ptact; + baseindex = classer->baseindex; /* num components before this page */ + sumtab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + index = baseindex + i; + ptaGetPt(ptac, index, &x1, &y1); + numaGetIValue(naclass, index, &iclass); + ptaGetPt(ptact, iclass, &x2, &y2); + delx = x2 - x1; + dely = y2 - y1; + if (delx >= 0) + idelx = (l_int32)(delx + 0.5); + else + idelx = (l_int32)(delx - 0.5); + if (dely >= 0) + idely = (l_int32)(dely + 0.5); + else + idely = (l_int32)(dely - 0.5); + if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) { + LEPT_FREE(sumtab); + return ERROR_INT("box not found", procName, 1); + } + boxGetGeometry(box, &x, &y, NULL, NULL); + + /* Get final increments dx and dy for best alignment */ + pixt = pixaGetPix(classer->pixat, iclass, L_CLONE); + finalPositioningForAlignment(pixs, x, y, idelx, idely, + pixt, sumtab, &dx, &dy); +/* if (i % 20 == 0) + fprintf(stderr, "dx = %d, dy = %d\n", dx, dy); */ + ptaAddPt(ptaul, x - idelx + dx, y - idely + dy); + boxDestroy(&box); + pixDestroy(&pixt); + } + + LEPT_FREE(sumtab); + return 0; +} + + +/*! + * \brief jbGetLLCorners() + * + * \param[in] jbclasser + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes the ptall field, which has the global LL corners,
+ *          adjusted for each specific component, so that each component
+ *          can be replaced by the template for its class and have the
+ *          centroid in the template in the same position as the
+ *          centroid of the original connected component. It is important
+ *          that this be done properly to avoid a wavy baseline in the result.
+ *      (2) It is computed here from the corresponding UL corners, where
+ *          the input templates and stored instances are all bordered.
+ *          This should be done after all pages have been processed.
+ *      (3) For proper substitution, the templates whose LL corners are
+ *          placed in these locations must be UN-bordered.
+ *          This is available for a realistic jbig2 encoder, which would
+ *          (1) encode each template without a border, and (2) encode
+ *          the position using the LL corner (rather than the UL
+ *          corner) because the difference between y-values
+ *          of successive instances is typically close to zero.
+ * 
+ */ +l_ok +jbGetLLCorners(JBCLASSER *classer) +{ +l_int32 i, iclass, n, x1, y1, h; +NUMA *naclass; +PIX *pix; +PIXA *pixat; +PTA *ptaul, *ptall; + + PROCNAME("jbGetLLCorners"); + + if (!classer) + return ERROR_INT("classer not defined", procName, 1); + + ptaul = classer->ptaul; + naclass = classer->naclass; + pixat = classer->pixat; + + ptaDestroy(&classer->ptall); + n = ptaGetCount(ptaul); + ptall = ptaCreate(n); + classer->ptall = ptall; + + /* If the templates were bordered, we would add h - 1 to the UL + * corner y-value. However, because the templates to be used + * here have their borders removed, and the borders are + * JB_ADDED_PIXELS on each side, we add h - 1 - 2 * JB_ADDED_PIXELS + * to the UL corner y-value. */ + for (i = 0; i < n; i++) { + ptaGetIPt(ptaul, i, &x1, &y1); + numaGetIValue(naclass, i, &iclass); + pix = pixaGetPix(pixat, iclass, L_CLONE); + h = pixGetHeight(pix); + ptaAddPt(ptall, x1, y1 + h - 1 - 2 * JB_ADDED_PIXELS); + pixDestroy(&pix); + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Static helpers * + *----------------------------------------------------------------------*/ +/* When looking for similar matches we check templates whose size is +/- 2 in + * each direction. This involves 25 possible sizes. This array contains the + * offsets for each of those positions in a spiral pattern. There are 25 pairs + * of numbers in this array: even positions are x values. */ +static int two_by_two_walk[50] = { + 0, 0, + 0, 1, + -1, 0, + 0, -1, + 1, 0, + -1, 1, + 1, 1, + -1, -1, + 1, -1, + 0, -2, + 2, 0, + 0, 2, + -2, 0, + -1, -2, + 1, -2, + 2, -1, + 2, 1, + 1, 2, + -1, 2, + -2, 1, + -2, -1, + -2, -2, + 2, -2, + 2, 2, + -2, 2}; + + +/*! + * \brief findSimilarSizedTemplatesInit() + * + * \param[in] classer + * \param[in] pixs instance to be matched + * \return Allocated context to be used with findSimilar* + */ +static JBFINDCTX * +findSimilarSizedTemplatesInit(JBCLASSER *classer, + PIX *pixs) +{ +JBFINDCTX *state; + + state = (JBFINDCTX *)LEPT_CALLOC(1, sizeof(JBFINDCTX)); + state->w = pixGetWidth(pixs) - 2 * JB_ADDED_PIXELS; + state->h = pixGetHeight(pixs) - 2 * JB_ADDED_PIXELS; + state->classer = classer; + return state; +} + + +static void +findSimilarSizedTemplatesDestroy(JBFINDCTX **pstate) +{ +JBFINDCTX *state; + + PROCNAME("findSimilarSizedTemplatesDestroy"); + + if (pstate == NULL) { + L_WARNING("ptr address is null\n", procName); + return; + } + if ((state = *pstate) == NULL) + return; + + l_dnaDestroy(&state->dna); + LEPT_FREE(state); + *pstate = NULL; + return; +} + + +/*! + * \brief findSimilarSizedTemplatesNext() + * + * \param[in] state from findSimilarSizedTemplatesInit + * \return next template number, or -1 when finished + * + * We have a dna hash table that maps template area to a list of template + * numbers with that area. We wish to find similar sized templates, + * so we first look for templates with the same width and height, and + * then with width + 1, etc. This walk is guided by the + * two_by_two_walk array, above. + * + * We don't want to have to collect the whole list of templates first, + * because we hope to find a well-matching template quickly. So we + * keep the context for this walk in an explictit state structure, + * and this function acts like a generator. + */ +static l_int32 +findSimilarSizedTemplatesNext(JBFINDCTX *state) +{ +l_int32 desiredh, desiredw, size, templ; +PIX *pixt; + + while(1) { /* Continue the walk over step 'i' */ + if (state->i >= 25) { /* all done; didn't find a good match */ + return -1; + } + + desiredw = state->w + two_by_two_walk[2 * state->i]; + desiredh = state->h + two_by_two_walk[2 * state->i + 1]; + if (desiredh < 1 || desiredw < 1) { /* invalid size */ + state->i++; + continue; + } + + if (!state->dna) { + /* We have yet to start walking the array for the step 'i' */ + state->dna = l_dnaHashGetDna(state->classer->dahash, + (l_uint64)desiredh * desiredw, L_CLONE); + if (!state->dna) { /* nothing there */ + state->i++; + continue; + } + + state->n = 0; /* OK, we got a dna. */ + } + + /* Continue working on this dna */ + size = l_dnaGetCount(state->dna); + for ( ; state->n < size; ) { + templ = (l_int32)(state->dna->array[state->n++] + 0.5); + pixt = pixaGetPix(state->classer->pixat, templ, L_CLONE); + if (pixGetWidth(pixt) - 2 * JB_ADDED_PIXELS == desiredw && + pixGetHeight(pixt) - 2 * JB_ADDED_PIXELS == desiredh) { + pixDestroy(&pixt); + return templ; + } + pixDestroy(&pixt); + } + + /* Exhausted the dna (no match found); take another step and + * try again. */ + state->i++; + l_dnaDestroy(&state->dna); + continue; + } +} + + +/*! + * \brief finalPositioningForAlignment() + * + * \param[in] pixs input page image + * \param[in] x, y location of UL corner of bb of component in pixs + * \param[in] idelx, idely compensation to match centroids of component + * and template + * \param[in] pixt template, with JB_ADDED_PIXELS of padding + * on all sides + * \param[in] sumtab for summing fg pixels in an image + * \param[in] pdx, pdy return delta on position for best match; each + * one is in the set {-1, 0, 1} + * \return 0 if OK, 1 on error + * + */ +static l_int32 +finalPositioningForAlignment(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 idelx, + l_int32 idely, + PIX *pixt, + l_int32 *sumtab, + l_int32 *pdx, + l_int32 *pdy) +{ +l_int32 w, h, i, j, minx, miny, count, mincount; +PIX *pixi; /* clipped from source pixs */ +PIX *pixr; /* temporary storage */ +BOX *box; + + PROCNAME("finalPositioningForAlignment"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixt) + return ERROR_INT("pixt not defined", procName, 1); + if (!pdx || !pdy) + return ERROR_INT("&dx and &dy not both defined", procName, 1); + if (!sumtab) + return ERROR_INT("sumtab not defined", procName, 1); + *pdx = *pdy = 0; + + /* Use JB_ADDED_PIXELS pixels padding on each side */ + pixGetDimensions(pixt, &w, &h, NULL); + box = boxCreate(x - idelx - JB_ADDED_PIXELS, + y - idely - JB_ADDED_PIXELS, w, h); + pixi = pixClipRectangle(pixs, box, NULL); + boxDestroy(&box); + if (!pixi) + return ERROR_INT("pixi not made", procName, 1); + + pixr = pixCreate(pixGetWidth(pixi), pixGetHeight(pixi), 1); + mincount = 0x7fffffff; + for (i = -1; i <= 1; i++) { + for (j = -1; j <= 1; j++) { + pixCopy(pixr, pixi); + pixRasterop(pixr, j, i, w, h, PIX_SRC ^ PIX_DST, pixt, 0, 0); + pixCountPixels(pixr, &count, sumtab); + if (count < mincount) { + minx = j; + miny = i; + mincount = count; + } + } + } + pixDestroy(&pixi); + pixDestroy(&pixr); + + *pdx = minx; + *pdy = miny; + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/jbclass.h b/3rdparty/hgOCR/leptonica/jbclass.h new file mode 100644 index 00000000..62aad60a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jbclass.h @@ -0,0 +1,142 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_JBCLASS_H +#define LEPTONICA_JBCLASS_H + +/*! + * \file jbclass.h + * + * JbClasser + * JbData + */ + + + /*! + *
+     * The JbClasser struct holds all the data accumulated during the
+     * classification process that can be used for a compressed
+     * jbig2-type representation of a set of images.  This is created
+     * in an initialization process and added to as the selected components
+     * on each successive page are analyzed.
+     * 
+ */ +struct JbClasser +{ + struct Sarray *safiles; /*!< input page image file names */ + l_int32 method; /*!< JB_RANKHAUS, JB_CORRELATION */ + l_int32 components; /*!< JB_CONN_COMPS, JB_CHARACTERS or */ + /*!< JB_WORDS */ + l_int32 maxwidth; /*!< max component width allowed */ + l_int32 maxheight; /*!< max component height allowed */ + l_int32 npages; /*!< number of pages already processed */ + l_int32 baseindex; /*!< number components already processed */ + /*!< on fully processed pages */ + struct Numa *nacomps; /*!< number of components on each page */ + l_int32 sizehaus; /*!< size of square struct elem for haus */ + l_float32 rankhaus; /*!< rank val of haus match, each way */ + l_float32 thresh; /*!< thresh value for correlation score */ + l_float32 weightfactor; /*!< corrects thresh value for heaver */ + /*!< components; use 0 for no correction */ + struct Numa *naarea; /*!< w * h of each template, without */ + /*!< extra border pixels */ + l_int32 w; /*!< max width of original src images */ + l_int32 h; /*!< max height of original src images */ + l_int32 nclass; /*!< current number of classes */ + l_int32 keep_pixaa; /*!< If zero, pixaa isn't filled */ + struct Pixaa *pixaa; /*!< instances for each class; unbordered */ + struct Pixa *pixat; /*!< templates for each class; bordered */ + /*!< and not dilated */ + struct Pixa *pixatd; /*!< templates for each class; bordered */ + /*!< and dilated */ + struct L_DnaHash *dahash; /*!< Hash table to find templates by size */ + struct Numa *nafgt; /*!< fg areas of undilated templates; */ + /*!< only used for rank < 1.0 */ + struct Pta *ptac; /*!< centroids of all bordered cc */ + struct Pta *ptact; /*!< centroids of all bordered template cc */ + struct Numa *naclass; /*!< array of class ids for each component */ + struct Numa *napage; /*!< array of page nums for each component */ + struct Pta *ptaul; /*!< array of UL corners at which the */ + /*!< template is to be placed for each */ + /*!< component */ + struct Pta *ptall; /*!< similar to ptaul, but for LL corners */ +}; +typedef struct JbClasser JBCLASSER; + + + /*! + *
+     * The JbData struct holds all the data required for
+     * the compressed jbig-type representation of a set of images.
+     * The data can be written to file, read back, and used
+     * to regenerate an approximate version of the original,
+     * which differs in two ways from the original:
+     *   (1) It uses a template image for each c.c. instead of the
+     *       original instance, for each occurrence on each page.
+     *   (2) It discards components with either a height or width larger
+     *       than the maximuma, given here by the lattice dimensions
+     *       used for storing the templates.
+     * 
+ */ +struct JbData +{ + struct Pix *pix; /*!< template composite for all classes */ + l_int32 npages; /*!< number of pages */ + l_int32 w; /*!< max width of original page images */ + l_int32 h; /*!< max height of original page images */ + l_int32 nclass; /*!< number of classes */ + l_int32 latticew; /*!< lattice width for template composite */ + l_int32 latticeh; /*!< lattice height for template composite */ + struct Numa *naclass; /*!< array of class ids for each component */ + struct Numa *napage; /*!< array of page nums for each component */ + struct Pta *ptaul; /*!< array of UL corners at which the */ + /*!< template is to be placed for each */ + /*!< component */ +}; +typedef struct JbData JBDATA; + + +/*! JB Classifier */ +enum { + JB_RANKHAUS = 0, + JB_CORRELATION = 1 +}; + + /*! For jbGetComponents(): type of component to extract from images */ +/*! JB Component */ +enum { + JB_CONN_COMPS = 0, + JB_CHARACTERS = 1, + JB_WORDS = 2 +}; + + /*! These parameters are used for naming the two files + * in which the jbig2-like compressed data is stored. */ +#define JB_TEMPLATE_EXT ".templates.png" +#define JB_DATA_EXT ".data" + + +#endif /* LEPTONICA_JBCLASS_H */ diff --git a/3rdparty/hgOCR/leptonica/jp2kheader.c b/3rdparty/hgOCR/leptonica/jp2kheader.c new file mode 100644 index 00000000..25704812 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jp2kheader.c @@ -0,0 +1,312 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file jp2kheader.c + *
+ *
+ *      Read header
+ *          l_int32          readHeaderJp2k()
+ *          l_int32          freadHeaderJp2k()
+ *          l_int32          readHeaderMemJp2k()
+ *          l_int32          fgetJp2kResolution()
+ *
+ *  Note: these function read image metadata from a jp2k file, without
+ *  using any jp2k libraries.
+ *
+ *  To read and write jp2k data, using the OpenJPEG library
+ *  (http://www.openjpeg.org), see jpegio.c.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +#ifndef NO_CONSOLE_IO +#define DEBUG_IHDR 0 +#endif /* ~NO_CONSOLE_IO */ + +/* --------------------------------------------*/ +#if USE_JP2KHEADER /* defined in environ.h */ +/* --------------------------------------------*/ + + /* a sanity check on the size read from file */ +static const l_int32 MAX_JP2K_WIDTH = 100000; +static const l_int32 MAX_JP2K_HEIGHT = 100000; + +/*--------------------------------------------------------------------* + * Stream interface * + *--------------------------------------------------------------------*/ +/*! + * \brief readHeaderJp2k() + * + * \param[in] filename + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderJp2k(const char *filename, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderJp2k"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderJp2k(fp, pw, ph, pbps, pspp); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderJp2k() + * + * \param[in] fp file stream opened for read + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + */ +l_ok +freadHeaderJp2k(FILE *fp, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp) +{ +l_uint8 buf[80]; /* just need the first 80 bytes */ +l_int32 nread, ret; + + PROCNAME("freadHeaderJp2k"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + + rewind(fp); + nread = fread(buf, 1, sizeof(buf), fp); + if (nread != sizeof(buf)) + return ERROR_INT("read failure", procName, 1); + + ret = readHeaderMemJp2k(buf, sizeof(buf), pw, ph, pbps, pspp); + rewind(fp); + return ret; +} + + +/*! + * \brief readHeaderMemJp2k() + * + * \param[in] data + * \param[in] size at least 80 + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The ISO/IEC reference for jpeg2000 is
+ *               http://www.jpeg.org/public/15444-1annexi.pdf
+ *          and the file format syntax begins at page 127.
+ *      (2) The Image Header Box begins with 'ihdr' = 0x69686472 in
+ *          big-endian order.  This typically, but not always, starts
+ *          byte 44, with the big-endian data fields beginning at byte 48:
+ *               h:    4 bytes
+ *               w:    4 bytes
+ *               spp:  2 bytes
+ *               bps:  1 byte   (contains bps - 1)
+ * 
+ */ +l_ok +readHeaderMemJp2k(const l_uint8 *data, + size_t size, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp) +{ +l_int32 format, val, w, h, bps, spp, loc, found, windex; +l_uint8 ihdr[4] = {0x69, 0x68, 0x64, 0x72}; /* 'ihdr' */ + + PROCNAME("readHeaderMemJp2k"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (size < 80) + return ERROR_INT("size < 80", procName, 1); + findFileFormatBuffer(data, &format); + if (format != IFF_JP2) + return ERROR_INT("not jp2 file", procName, 1); + + /* Search for beginning of the Image Header Box: 'ihdr' */ + arrayFindSequence(data, size, ihdr, 4, &loc, &found); + if (!found) + return ERROR_INT("image parameters not found", procName, 1); +#if DEBUG_IHDR + if (loc != 44) + L_INFO("Beginning of ihdr is at byte %d\n", procName, loc); +#endif /* DEBUG_IHDR */ + + windex = loc / 4 + 1; + if (4 * (windex + 2) + 2 >= size) + return ERROR_INT("image parameters end are outside of header", + procName, 1); + val = *((l_uint32 *)data + windex); + h = convertOnLittleEnd32(val); + val = *((l_uint32 *)data + windex + 1); + w = convertOnLittleEnd32(val); + val = *((l_uint16 *)data + 2 * (windex + 2)); + spp = convertOnLittleEnd16(val); + bps = *(data + 4 * (windex + 2) + 2) + 1; + if (w < 1 || h < 1) + return ERROR_INT("w and h must both be > 0", procName, 1); + if (w > MAX_JP2K_WIDTH || h > MAX_JP2K_HEIGHT) + return ERROR_INT("unrealistically large sizes", procName, 1); + if (spp != 1 && spp != 3 && spp != 4) + return ERROR_INT("spp must be in 1, 3 or 4", procName, 1); + if (bps != 8 && bps != 16) + return ERROR_INT("bps must be 8 or 16", procName, 1); + if (pw) *pw = w; + if (ph) *ph = h; + if (pspp) *pspp = spp; + if (pbps) *pbps = bps; + return 0; +} + + +/* + * fgetJp2kResolution() + * + * Input: fp (file stream opened for read) + * &xres, &yres ( resolution in ppi) + * Return: 0 if found; 1 if not found or on error + * + * Notes: + * (1) If the capture resolution field is not set, this is not an error; + * the returned resolution values are 0 (designating 'unknown'). + * (2) Side-effect: this rewinds the stream. + * (3) The capture resolution box is optional in the jp2 spec, and + * it is usually not written. + * (4) The big-endian data fields that follow the 4 bytes of 'resc' are: + * ynum: 2 bytes + * ydenom: 2 bytes + * xnum: 2 bytes + * xdenom: 2 bytes + * yexp: 1 byte + * xexp: 1 byte + */ +l_int32 +fgetJp2kResolution(FILE *fp, + l_int32 *pxres, + l_int32 *pyres) +{ +l_uint8 xexp, yexp; +l_uint8 *data; +l_uint16 xnum, ynum, xdenom, ydenom; /* these jp2k fields are 2-byte */ +l_int32 loc, found; +l_uint8 resc[4] = {0x72, 0x65, 0x73, 0x63}; /* 'resc' */ +size_t nbytes; +l_float64 xres, yres, maxres; + + PROCNAME("fgetJp2kResolution"); + + if (pxres) *pxres = 0; + if (pyres) *pyres = 0; + if (!pxres || !pyres) + return ERROR_INT("&xres and &yres not both defined", procName, 1); + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + + rewind(fp); + data = l_binaryReadStream(fp, &nbytes); + rewind(fp); + + /* Search for the start of the first capture resolution box: 'resc' */ + arrayFindSequence(data, nbytes, resc, 4, &loc, &found); + if (!found) { + L_WARNING("image resolution not found\n", procName); + LEPT_FREE(data); + return 1; + } + if (nbytes < 80 || loc >= nbytes - 13) { + L_WARNING("image resolution found without enough space\n", procName); + LEPT_FREE(data); + return 1; + } + + /* Extract the fields and calculate the resolution in pixels/meter. + * See section 1.5.3.7.1 of JPEG 2000 ISO/IEC 15444-1 spec. */ + ynum = data[loc + 5] << 8 | data[loc + 4]; + ynum = convertOnLittleEnd16(ynum); + ydenom = data[loc + 7] << 8 | data[loc + 6]; + ydenom = convertOnLittleEnd16(ydenom); + xnum = data[loc + 9] << 8 | data[loc + 8]; + xnum = convertOnLittleEnd16(xnum); + xdenom = data[loc + 11] << 8 | data[loc + 10]; + xdenom = convertOnLittleEnd16(xdenom); + yexp = data[loc + 12]; + xexp = data[loc + 13]; + yres = ((l_float64)ynum / (l_float64)ydenom) * pow(10.0, (l_float64)yexp); + xres = ((l_float64)xnum / (l_float64)xdenom) * pow(10.0, (l_float64)xexp); + + /* Convert from pixels/meter to ppi */ + yres *= (300.0 / 11811.0); + xres *= (300.0 / 11811.0); + + /* Sanity check for bad data */ + maxres = 100000.0; /* ppi */ + if (xres > maxres || yres > maxres) { + L_WARNING("ridiculously large resolution\n", procName); + } else { + *pyres = (l_int32)(yres + 0.5); + *pxres = (l_int32)(xres + 0.5); + } + + LEPT_FREE(data); + return 0; +} + +/* --------------------------------------------*/ +#endif /* USE_JP2KHEADER */ diff --git a/3rdparty/hgOCR/leptonica/jp2kheaderstub.c b/3rdparty/hgOCR/leptonica/jp2kheaderstub.c new file mode 100644 index 00000000..13421501 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jp2kheaderstub.c @@ -0,0 +1,71 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file jp2kheaderstub.c + *
+ *
+ *     Stubs for jp2kheader.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_JP2KHEADER /* defined in environ.h */ +/* --------------------------------------------*/ + +l_ok readHeaderJp2k(const char *filename, l_int32 *pw, l_int32 *ph, + l_int32 *pbps, l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok freadHeaderJp2k(FILE *fp, l_int32 *pw, l_int32 *ph, + l_int32 *pbps, l_int32 *pspp) +{ + return ERROR_INT("function not present", "freadHeaderJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemJp2k(const l_uint8 *cdata, size_t size, l_int32 *pw, + l_int32 *ph, l_int32 *pbps, l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderMemJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_int32 fgetJp2kResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) +{ + return ERROR_INT("function not present", "fgetJp2kResolution", 1); +} + +/* --------------------------------------------*/ +#endif /* !USE_JP2KHEADER */ diff --git a/3rdparty/hgOCR/leptonica/jp2kio.c b/3rdparty/hgOCR/leptonica/jp2kio.c new file mode 100644 index 00000000..73603295 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jp2kio.c @@ -0,0 +1,949 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file jp2kio.c + *
+ *
+ *    Read jp2k from file
+ *          PIX                *pixReadJp2k()  [special top level]
+ *          PIX                *pixReadStreamJp2k()
+ *
+ *    Write jp2k to file
+ *          l_int32             pixWriteJp2k()  [special top level]
+ *          l_int32             pixWriteStreamJp2k()
+ *          static opj_image_t *pixConvertToOpjImage()
+ *
+ *    Read/write to memory
+ *          PIX                *pixReadMemJp2k()
+ *          l_int32             pixWriteMemJp2k()
+ *
+ *    Static functions from opj 2.0 to retain file stream interface
+ *          static opj_stream_t  *opjCreateStream()
+ *          [other static helpers]
+ *
+ *    Based on the OpenJPEG distribution:
+ *        http://www.openjpeg.org/
+ *    The ISO/IEC reference for jpeg2000 is:
+ *        http://www.jpeg.org/public/15444-1annexi.pdf
+ *
+ *    Compressing to memory and decompressing from memory
+ *    ---------------------------------------------------
+ *    On systems like windows without fmemopen() and open_memstream(),
+ *    we write data to a temp file and read it back for operations
+ *    between pix and compressed-data, such as pixReadMemJp2k() and
+ *    pixWriteMemJp2k().
+ *
+ *    Pdf can accept jp2k compressed strings directly
+ *    -----------------------------------------------
+ *    Transcoding (with the uncompress/compress cycle) is not required
+ *    to wrap images that have already been compressed with jp2k in pdf,
+ *    because the pdf format for jp2k includes the full string of the
+ *    jp2k compressed images.  This is also true for jpeg compressed
+ *    strings.
+ *
+ *    N.B.
+ *    * This is based on the most recent openjpeg release: 2.1.
+ *    * The openjpeg interface was massively changed from 1.X.  The debian
+ *      distribution is way back at 1.3.  We have inquired but are unable
+ *      to determine if or when a debian distribution will be built for 2.1.
+ *    * For version 2.1, the openjpeg.h file is installed in an
+ *      openjpeg-2.1 subdirectory, which is hard to support.
+ *    * In openjpeg-2.1, reading is slow compared to jpeg or webp,
+ *      and writing is very slow compared to jpeg or webp.  This is expected
+ *      to improve significantly in future versions.
+ *    * Reading and writing jp2k are supported here for 2.1.
+ *      The high-level interface to openjpeg continues to change.
+ *      From 2.0 to 2.1, the ability to interface to a C file stream
+ *      was removed permanently.  Leptonica supports both file stream
+ *      and memory buffer interfaces for every image I/O library, and
+ *      it requires the libraries to support at least one of these.
+ *      However, openjpeg-2.1 provides neither, so we have brought
+ *      several static functions over from openjpeg-2.0 in order to
+ *      retain the file stream interface.  See our static function
+ *      opjCreateStream().
+ *    * Specifying a quality factor for jpeg2000 requires caution.  Unlike
+ *      jpeg and webp, which have a sensible scale that goes from 0 (very poor)
+ *      to 100 (nearly lossless), kakadu and openjpeg use idiosyncratic and
+ *      non-intuitive numbers.  kakadu uses "rate/distortion" numbers in
+ *      a narrow range around 50,000; openjpeg (and our write interface)
+ *      use SNR.  The visually apparent artifacts introduced by compression
+ *      are strongly content-dependent and vary in a highly non-linear
+ *      way with SNR.  We take SNR = 34 as default, roughly similar in
+ *      quality to jpeg's default standard of 75.  For document images,
+ *      SNR = 25 is very poor, whereas SNR = 45 is nearly lossless.  If you
+ *      use the latter, you will pay dearly in the size of the compressed file.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if HAVE_LIBJP2K /* defined in environ.h */ +/* --------------------------------------------*/ + + /* Leptonica supports versions 2.0 and newer */ +#ifdef LIBJP2K_HEADER +#include LIBJP2K_HEADER +#else +#include +#endif + + /* 2.0 didn't define OPJ_VERSION_MINOR. */ +#ifndef OPJ_VERSION_MINOR +#define OPJ_VERSION_MINOR 0 +#endif + + /* Static generator of opj_stream from file stream. + * In 2.0.1, this functionality is provided by + * opj_stream_create_default_file_stream(), + * but it was removed in 2.1.0. Because we must have either + * a file stream or a memory interface to the compressed data, + * it is necessary to recreate the stream interface here. */ +static opj_stream_t *opjCreateStream(FILE *fp, l_int32 is_read); + + /* Static converter pix --> opj_image. Used for compressing pix, + * because the codec works on data stored in their raster format. */ +static opj_image_t *pixConvertToOpjImage(PIX *pix); + +/*---------------------------------------------------------------------* + * Callback event handlers * + *---------------------------------------------------------------------*/ +static void error_callback(const char *msg, void *client_data) { + (void)client_data; + fprintf(stdout, "[ERROR] %s", msg); +} + +static void warning_callback(const char *msg, void *client_data) { + (void)client_data; + fprintf(stdout, "[WARNING] %s", msg); +} + +static void info_callback(const char *msg, void *client_data) { + (void)client_data; + fprintf(stdout, "[INFO] %s", msg); +} + + +/*---------------------------------------------------------------------* + * Read jp2k from file (special function) * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadJp2k() + * + * \param[in] filename + * \param[in] reduction scaling factor: 1, 2, 4, 8, 16 + * \param[in] box [optional] for extracting a subregion, can be null + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return pix 8 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a special function for reading jp2k files.
+ *          The high-level pixReadStream() uses default values:
+ *             %reduction = 1
+ *             %box = NULL
+ *      (2) This decodes at either full resolution or at a reduction by
+ *          a power of 2.  The default value %reduction == 1 gives a full
+ *          resolution image.  Use %reduction > 1 to get a reduced image.
+ *          The actual values of %reduction that can be used on an image
+ *          depend on the number of resolution levels chosen when the
+ *          image was compressed.  Typical values might be 1, 2, 4, 8 and 16.
+ *          Using a value representing a reduction level that was not
+ *          stored when the file was written will fail with the message:
+ *          "failed to read the header".
+ *      (3) Use %box to decode only a part of the image.  The box is defined
+ *          at full resolution.  It is reduced internally by %reduction,
+ *          and clipping to the right and bottom of the image is automatic.
+ *      (4) We presently only handle images with 8 bits/sample (bps).
+ *          If the image has 16 bps, the read will fail.
+ *      (5) There are 4 possible values of samples/pixel (spp).
+ *          The values in brackets give the pixel values in the Pix:
+ *           spp = 1  ==>  grayscale           [8 bpp grayscale]
+ *           spp = 2  ==>  grayscale + alpha   [32 bpp rgba]
+ *           spp = 3  ==>  rgb                 [32 bpp rgb]
+ *           spp = 4  ==>  rgba                [32 bpp rgba]
+ *      (6) The %hint parameter is reserved for future use.
+ * 
+ */ +PIX * +pixReadJp2k(const char *filename, + l_uint32 reduction, + BOX *box, + l_int32 hint, + l_int32 debug) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadJp2k"); + + if (!filename) + return (PIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIX *)ERROR_PTR("image file not found", procName, NULL); + pix = pixReadStreamJp2k(fp, reduction, box, hint, debug); + fclose(fp); + + if (!pix) + return (PIX *)ERROR_PTR("image not returned", procName, NULL); + return pix; +} + + +/*! + * \brief pixReadStreamJp2k() + * + * \param[in] fp file stream + * \param[in] reduction scaling factor: 1, 2, 4, 8 + * \param[in] box [optional] for extracting a subregion, can be null + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return pix 8 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixReadJp2k() for usage.
+ * 
+ */ +PIX * +pixReadStreamJp2k(FILE *fp, + l_uint32 reduction, + BOX *box, + l_int32 hint, + l_int32 debug) +{ +const char *opjVersion; +l_int32 i, j, index, bx, by, bw, bh, val, rval, gval, bval, aval; +l_int32 w, h, wpl, bps, spp, xres, yres, reduce, prec, colorspace; +l_uint32 pixel; +l_uint32 *data, *line; +opj_dparameters_t parameters; /* decompression parameters */ +opj_image_t *image = NULL; +opj_codec_t *l_codec = NULL; /* handle to decompressor */ +opj_stream_t *l_stream = NULL; /* opj stream */ +PIX *pix = NULL; + + PROCNAME("pixReadStreamJp2k"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + + opjVersion = opj_version(); + if (opjVersion[0] != '2') { + L_ERROR("version is %s; must be 2.0 or higher\n", procName, opjVersion); + return NULL; + } + if ((opjVersion[2] - 0x30) != OPJ_VERSION_MINOR) { + L_ERROR("version %s: differs from minor = %d\n", + procName, opjVersion, OPJ_VERSION_MINOR); + return NULL; + } + + /* Get the resolution and the bits/sample */ + rewind(fp); + fgetJp2kResolution(fp, &xres, &yres); + freadHeaderJp2k(fp, NULL, NULL, &bps, NULL); + rewind(fp); + + if (bps > 8) { + L_ERROR("found %d bps; can only handle 8 bps\n", procName, bps); + return NULL; + } + + /* Set decoding parameters to default values */ + opj_set_default_decoder_parameters(¶meters); + + /* Find and set the reduce parameter, which is log2(reduction). + * Valid reductions are powers of 2, and are determined when the + * compressed string is made. A request for an invalid reduction + * will cause an error in opj_read_header(), and no image will + * be returned. */ + for (reduce = 0; (1L << reduce) < reduction; reduce++) { } + if ((1L << reduce) != reduction) { + L_ERROR("invalid reduction %d; not power of 2\n", procName, reduction); + return NULL; + } + parameters.cp_reduce = reduce; + + /* Get a decoder handle */ + if ((l_codec = opj_create_decompress(OPJ_CODEC_JP2)) == NULL) { + L_ERROR("failed to make the codec\n", procName); + return NULL; + } + + /* Catch and report events using callbacks */ + if (debug) { + opj_set_info_handler(l_codec, info_callback, NULL); + opj_set_warning_handler(l_codec, warning_callback, NULL); + opj_set_error_handler(l_codec, error_callback, NULL); + } + + /* Setup the decoding parameters using user parameters */ + if (!opj_setup_decoder(l_codec, ¶meters)){ + L_ERROR("failed to set up decoder\n", procName); + opj_destroy_codec(l_codec); + return NULL; + } + + /* Open decompression 'stream'. In 2.0, we could call this: + * opj_stream_create_default_file_stream(fp, 1) + * but the file stream interface was removed in 2.1. */ + if ((l_stream = opjCreateStream(fp, 1)) == NULL) { + L_ERROR("failed to open the stream\n", procName); + opj_destroy_codec(l_codec); + return NULL; + } + + /* Read the main header of the codestream and, if necessary, + * the JP2 boxes */ + if(!opj_read_header(l_stream, l_codec, &image)){ + L_ERROR("failed to read the header\n", procName); + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + opj_image_destroy(image); + return NULL; + } + + /* Set up to decode a rectangular region */ + if (box) { + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (!opj_set_decode_area(l_codec, image, bx, by, + bx + bw, by + bh)) { + L_ERROR("failed to set the region for decoding\n", procName); + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + opj_image_destroy(image); + return NULL; + } + } + + /* Get the decoded image */ + if (!(opj_decode(l_codec, l_stream, image) && + opj_end_decompress(l_codec, l_stream))) { + L_ERROR("failed to decode the image\n", procName); + opj_destroy_codec(l_codec); + opj_stream_destroy(l_stream); + opj_image_destroy(image); + return NULL; + } + + /* Finished with the byte stream and the codec */ + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + + /* Get the image parameters */ + spp = image->numcomps; + w = image->comps[0].w; + h = image->comps[0].h; + prec = image->comps[0].prec; + if (prec != bps) + L_WARNING("precision %d != bps %d!\n", procName, prec, bps); + if (debug) { + L_INFO("w = %d, h = %d, bps = %d, spp = %d\n", + procName, w, h, bps, spp); + colorspace = image->color_space; + if (colorspace == OPJ_CLRSPC_SRGB) + L_INFO("colorspace is sRGB\n", procName); + else if (colorspace == OPJ_CLRSPC_GRAY) + L_INFO("colorspace is grayscale\n", procName); + else if (colorspace == OPJ_CLRSPC_SYCC) + L_INFO("colorspace is YUV\n", procName); + } + + /* Convert the image to a pix */ + if (spp == 1) + pix = pixCreate(w, h, 8); + else + pix = pixCreate(w, h, 32); + pixSetInputFormat(pix, IFF_JP2); + pixSetResolution(pix, xres, yres); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + index = 0; + if (spp == 1) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + val = image->comps[0].data[index]; + SET_DATA_BYTE(line, j, val); + index++; + } + } + } else if (spp == 2) { /* convert to RGBA */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + val = image->comps[0].data[index]; + aval = image->comps[1].data[index]; + composeRGBAPixel(val, val, val, aval, &pixel); + line[j] = pixel; + index++; + } + } + } else if (spp >= 3) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + rval = image->comps[0].data[index]; + gval = image->comps[1].data[index]; + bval = image->comps[2].data[index]; + if (spp == 3) { + composeRGBPixel(rval, gval, bval, &pixel); + } else { /* spp == 4 */ + aval = image->comps[3].data[index]; + composeRGBAPixel(rval, gval, bval, aval, &pixel); + } + line[j] = pixel; + index++; + } + } + } + + /* Free the opj image data structure */ + opj_image_destroy(image); + + return pix; +} + + +/*---------------------------------------------------------------------* + * Write jp2k to file * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteJp2k() + * + * \param[in] filename + * \param[in] pix any depth, cmap is OK + * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless + * \param[in] nlevels resolution levels; <= 10; default = 5 + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The %quality parameter is the SNR.  The useful range is narrow:
+ *             SNR < 27  (terrible quality)
+ *             SNR = 34  (default; approximately equivalent to jpeg quality 75)
+ *             SNR = 40  (very high quality)
+ *             SNR = 45  (nearly lossless)
+ *          Use 0 for default; 100 for lossless.
+ *      (2) The %nlevels parameter is the number of resolution levels
+ *          to be written.  For example, with nlevels == 5, images with
+ *          reduction factors of 1, 2, 4, 8 and 16 are encoded, and retrieval
+ *          is done at the level requested when reading.  For default,
+ *          use either 5 or 0.
+ *      (3) The %hint parameter is not yet in use.
+ *      (4) For now, we only support 1 "layer" for quality.
+ * 
+ */ +l_ok +pixWriteJp2k(const char *filename, + PIX *pix, + l_int32 quality, + l_int32 nlevels, + l_int32 hint, + l_int32 debug) +{ +FILE *fp; + + PROCNAME("pixWriteJp2k"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + + if (pixWriteStreamJp2k(fp, pix, quality, nlevels, hint, debug)) { + fclose(fp); + return ERROR_INT("pix not written to stream", procName, 1); + } + + fclose(fp); + return 0; +} + + +/*! + * \brief pixWriteStreamJp2k() + * + * \param[in] fp file stream + * \param[in] pix any depth, cmap is OK + * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless + * \param[in] nlevels <= 10 + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return 0 if OK, 1 on error + *
+ * Notes:
+ *      (1) See pixWriteJp2k() for usage.
+ *      (2) For an encoder with more encoding options, see, e.g.,
+ *    https://github.com/OpenJPEG/openjpeg/blob/master/tests/test_tile_encoder.c
+ * 
+ */ +l_ok +pixWriteStreamJp2k(FILE *fp, + PIX *pix, + l_int32 quality, + l_int32 nlevels, + l_int32 hint, + l_int32 debug) +{ +l_int32 w, h, d, success; +l_float32 snr; +const char *opjVersion; +PIX *pixs; +opj_cparameters_t parameters; /* compression parameters */ +opj_stream_t *l_stream = NULL; +opj_codec_t* l_codec = NULL;; +opj_image_t *image = NULL; + + PROCNAME("pixWriteStreamJp2k"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + snr = (l_float32)quality; + if (snr <= 0) snr = 34.0; /* default */ + if (snr < 27) + L_WARNING("SNR = %d < 27; very low\n", procName, (l_int32)snr); + if (snr == 100) snr = 0; /* for lossless */ + if (snr > 45) { + L_WARNING("SNR > 45; using lossless encoding\n", procName); + snr = 0; + } + + if (nlevels <= 0) nlevels = 5; /* default */ + if (nlevels > 10) { + L_WARNING("nlevels = %d > 10; setting to 10\n", procName, nlevels); + nlevels = 10; + } + + opjVersion = opj_version(); + if (opjVersion[0] != '2') { + L_ERROR("version is %s; must be 2.0 or higher\n", procName, opjVersion); + return 1; + } + if ((opjVersion[2] - 0x30) != OPJ_VERSION_MINOR) { + L_ERROR("version %s: differs from minor = %d\n", + procName, opjVersion, OPJ_VERSION_MINOR); + return 1; + } + + /* Remove colormap if it exists; result is 8 or 32 bpp */ + pixGetDimensions(pix, &w, &h, &d); + if (d == 24) { + pixs = pixConvert24To32(pix); + } else if (d == 32) { + pixs = pixClone(pix); + } else if (pixGetColormap(pix) == NULL) { + pixs = pixConvertTo8(pix, 0); + } else { /* colormap */ + L_INFO("removing colormap; may be better to compress losslessly\n", + procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + } + + /* Convert to opj image format. */ + pixSetPadBits(pixs, 0); + image = pixConvertToOpjImage(pixs); + pixDestroy(&pixs); + + /* Set encoding parameters to default values. + * We use one layer with the input SNR. */ + opj_set_default_encoder_parameters(¶meters); + parameters.cp_fixed_quality = 1; + parameters.cp_disto_alloc = 0; + parameters.cp_fixed_alloc = 0; + parameters.tcp_distoratio[0] = snr; + parameters.tcp_numlayers = 1; + parameters.numresolution = nlevels + 1; + + /* Create comment for codestream */ + if (parameters.cp_comment == NULL) { + const char comment1[] = "Created by Leptonica, version "; + const char comment2[] = "; using OpenJPEG, version "; + size_t len1 = strlen(comment1); + size_t len2 = strlen(comment2); + char *version1 = getLeptonicaVersion(); + const char *version2 = opj_version(); + len1 += len2 + strlen(version1) + strlen(version2) + 1; + parameters.cp_comment = (char *)LEPT_MALLOC(len1); + snprintf(parameters.cp_comment, len1, "%s%s%s%s", comment1, version1, + comment2, version2); + LEPT_FREE(version1); + } + + /* Get the encoder handle */ + if ((l_codec = opj_create_compress(OPJ_CODEC_JP2)) == NULL) { + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + return ERROR_INT("failed to get the encoder handle\n", procName, 1); + } + + /* Catch and report events using callbacks */ + if (debug) { + opj_set_info_handler(l_codec, info_callback, NULL); + opj_set_warning_handler(l_codec, warning_callback, NULL); + opj_set_error_handler(l_codec, error_callback, NULL); + } + + /* Set up the encoder */ + if (!opj_setup_encoder(l_codec, ¶meters, image)) { + opj_destroy_codec(l_codec); + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + return ERROR_INT("failed to set up the encoder\n", procName, 1); + } + + /* Open a compression stream for writing. In 2.0 we could use this: + * opj_stream_create_default_file_stream(fp, 0) + * but the file stream interface was removed in 2.1. */ + rewind(fp); + if ((l_stream = opjCreateStream(fp, 0)) == NULL) { + opj_destroy_codec(l_codec); + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + return ERROR_INT("failed to open l_stream\n", procName, 1); + } + + /* Encode the image */ + if (!opj_start_compress(l_codec, image, l_stream)) { + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + return ERROR_INT("opj_start_compress failed\n", procName, 1); + } + if (!opj_encode(l_codec, l_stream)) { + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + return ERROR_INT("opj_encode failed\n", procName, 1); + } + success = opj_end_compress(l_codec, l_stream); + + /* Clean up */ + opj_stream_destroy(l_stream); + opj_destroy_codec(l_codec); + opj_image_destroy(image); + LEPT_FREE(parameters.cp_comment); + if (success) + return 0; + else + return ERROR_INT("opj_end_compress failed\n", procName, 1); +} + + +/*! + * \brief pixConvertToOpjImage() + * + * \param[in] pix 8 or 32 bpp + * \return opj_image, or NULL on error + * + *
+ * Notes:
+ *      (1) Input pix is 8 bpp grayscale, 32 bpp rgb, or 32 bpp rgba.
+ *      (2) Gray + alpha pix are all represented as rgba.
+ * 
+ */ +static opj_image_t * +pixConvertToOpjImage(PIX *pix) +{ +l_int32 i, j, k, w, h, d, spp, wpl; +OPJ_COLOR_SPACE colorspace; +l_int32 *ir = NULL; +l_int32 *ig = NULL; +l_int32 *ib = NULL; +l_int32 *ia = NULL; +l_uint32 *line, *data; +opj_image_t *image; +opj_image_cmptparm_t cmptparm[4]; + + PROCNAME("pixConvertToOpjImage"); + + if (!pix) + return (opj_image_t *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 8 && d != 32) { + L_ERROR("invalid depth: %d\n", procName, d); + return NULL; + } + + /* Allocate the opj_image. */ + spp = pixGetSpp(pix); + memset(&cmptparm[0], 0, 4 * sizeof(opj_image_cmptparm_t)); + for (i = 0; i < spp; i++) { + cmptparm[i].prec = 8; + cmptparm[i].bpp = 8; + cmptparm[i].sgnd = 0; + cmptparm[i].dx = 1; + cmptparm[i].dy = 1; + cmptparm[i].w = w; + cmptparm[i].h = h; + } + colorspace = (spp == 1) ? OPJ_CLRSPC_GRAY : OPJ_CLRSPC_SRGB; + if ((image = opj_image_create(spp, &cmptparm[0], colorspace)) == NULL) + return (opj_image_t *)ERROR_PTR("image not made", procName, NULL); + image->x0 = 0; + image->y0 = 0; + image->x1 = w; + image->y1 = h; + + /* Set the component pointers */ + ir = image->comps[0].data; + if (spp > 1) { + ig = image->comps[1].data; + ib = image->comps[2].data; + } + if(spp == 4) + ia = image->comps[3].data; + + /* Transfer the data from the pix */ + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0, k = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++, k++) { + if (spp == 1) { + ir[k] = GET_DATA_BYTE(line, j); + } else if (spp > 1) { + ir[k] = GET_DATA_BYTE(line + j, COLOR_RED); + ig[k] = GET_DATA_BYTE(line + j, COLOR_GREEN); + ib[k] = GET_DATA_BYTE(line + j, COLOR_BLUE); + } + if (spp == 4) + ia[k] = GET_DATA_BYTE(line + j, L_ALPHA_CHANNEL); + } + } + + return image; +} + + +/*---------------------------------------------------------------------* + * Read/write to memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadMemJp2k() + * + * \param[in] data const; jpeg-encoded + * \param[in] size of data + * \param[in] reduction scaling factor: 1, 2, 4, 8 + * \param[in] box [optional] for extracting a subregion, can be null + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This crashes when reading through the fmemopen cookie.
+ *          Until we can fix this, we use the file-based work-around.
+ *          And fixing this may take some time, because the basic
+ *          stream interface is no longer supported in openjpeg.
+ *      (2) See pixReadJp2k() for usage.
+ * 
+ */ +PIX * +pixReadMemJp2k(const l_uint8 *data, + size_t size, + l_uint32 reduction, + BOX *box, + l_int32 hint, + l_int32 debug) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadMemJp2k"); + + if (!data) + return (PIX *)ERROR_PTR("data not defined", procName, NULL); + + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIX *)ERROR_PTR("stream not opened", procName, NULL); + pix = pixReadStreamJp2k(fp, reduction, box, hint, debug); + fclose(fp); + if (!pix) L_ERROR("pix not read\n", procName); + return pix; +} + + +/*! + * \brief pixWriteMemJp2k() + * + * \param[out] pdata data of jpeg compressed image + * \param[out] psize size of returned data + * \param[in] pix 8 or 32 bpp + * \param[in] quality SNR > 0; 0 for default (34); 100 for lossless + * \param[in] nlevels 0 for default + * \param[in] hint a bitwise OR of L_JP2K_* values; 0 for default + * \param[in] debug output callback messages, etc + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteJp2k() for usage.  This version writes to
+ *          memory instead of to a file stream.
+ * 
+ */ +l_ok +pixWriteMemJp2k(l_uint8 **pdata, + size_t *psize, + PIX *pix, + l_int32 quality, + l_int32 nlevels, + l_int32 hint, + l_int32 debug) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixWriteMemJp2k"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixWriteStreamJp2k(fp, pix, quality, nlevels, hint, debug); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = pixWriteStreamJp2k(fp, pix, quality, nlevels, hint, debug); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*---------------------------------------------------------------------* + * Static functions from opj 2.0 to retain file stream interface * + *---------------------------------------------------------------------*/ +static l_uint64 +opj_get_user_data_length(FILE *fp) { + OPJ_OFF_T length = 0; + fseek(fp, 0, SEEK_END); + length = (OPJ_OFF_T)ftell(fp); + fseek(fp, 0, SEEK_SET); + return (l_uint64)length; +} + +static OPJ_SIZE_T +opj_read_from_file(void *p_buffer, OPJ_SIZE_T p_nb_bytes, FILE *fp) { + OPJ_SIZE_T l_nb_read = fread(p_buffer, 1, p_nb_bytes, fp); + return l_nb_read ? l_nb_read : (OPJ_SIZE_T) - 1; +} + +static OPJ_SIZE_T +opj_write_from_file(void *p_buffer, OPJ_SIZE_T p_nb_bytes, FILE *fp) +{ + return fwrite(p_buffer, 1, p_nb_bytes, fp); +} + +static OPJ_OFF_T +opj_skip_from_file(OPJ_OFF_T offset, FILE *fp) { + if (fseek(fp, offset, SEEK_CUR)) { + return -1; + } + return offset; +} + +static l_int32 +opj_seek_from_file(OPJ_OFF_T offset, FILE *fp) { + if (fseek(fp, offset, SEEK_SET)) { + return 0; + } + return 1; +} + + /* Static generator of opj_stream from file stream */ +static opj_stream_t * +opjCreateStream(FILE *fp, + l_int32 is_read_stream) +{ +opj_stream_t *l_stream; + + PROCNAME("opjCreateStream"); + + if (!fp) + return (opj_stream_t *)ERROR_PTR("fp not defined", procName, NULL); + + l_stream = opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, is_read_stream); + if (!l_stream) + return (opj_stream_t *)ERROR_PTR("stream not made", procName, NULL); + +#if OPJ_VERSION_MINOR == 0 + opj_stream_set_user_data(l_stream, fp); +#else + opj_stream_set_user_data(l_stream, fp, + (opj_stream_free_user_data_fn)NULL); +#endif + opj_stream_set_user_data_length(l_stream, opj_get_user_data_length(fp)); + opj_stream_set_read_function(l_stream, + (opj_stream_read_fn)opj_read_from_file); + opj_stream_set_write_function(l_stream, + (opj_stream_write_fn)opj_write_from_file); + opj_stream_set_skip_function(l_stream, + (opj_stream_skip_fn)opj_skip_from_file); + opj_stream_set_seek_function(l_stream, + (opj_stream_seek_fn)opj_seek_from_file); + + return l_stream; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBJP2K */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/jp2kiostub.c b/3rdparty/hgOCR/leptonica/jp2kiostub.c new file mode 100644 index 00000000..ef611288 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jp2kiostub.c @@ -0,0 +1,98 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file jp2kiostub.c + *
+ *
+ *     Stubs for jp2kio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBJP2K /* defined in environ.h */ +/* --------------------------------------------*/ + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadJp2k(const char *filename, l_uint32 reduction, BOX *box, + l_int32 hint, l_int32 debug) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadJp2k", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadStreamJp2k(FILE *fp, l_uint32 reduction, BOX *box, + l_int32 hint, l_int32 debug) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamJp2k", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteJp2k(const char *filename, PIX *pix, l_int32 quality, + l_int32 nlevels, l_int32 hint, l_int32 debug) +{ + return ERROR_INT("function not present", "pixWriteJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamJp2k(FILE *fp, PIX *pix, l_int32 quality, + l_int32 nlevels, l_int32 hint, l_int32 debug) +{ + return ERROR_INT("function not present", "pixWriteStreamJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemJp2k(const l_uint8 *data, size_t size, l_uint32 reduction, + BOX *box, l_int32 hint, l_int32 debug) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadMemJp2k", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemJp2k(l_uint8 **pdata, size_t *psize, PIX *pix, + l_int32 quality, l_int32 nlevels, l_int32 hint, + l_int32 debug) +{ + return ERROR_INT("function not present", "pixWriteMemJp2k", 1); +} + +/* ----------------------------------------------------------------------*/ + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBJP2K */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/jpegio.c b/3rdparty/hgOCR/leptonica/jpegio.c new file mode 100644 index 00000000..03ba2843 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jpegio.c @@ -0,0 +1,1321 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + /*! + * \file jpegio.c + *
+  *
+  *    Read jpeg from file
+  *          PIX             *pixReadJpeg()  [special top level]
+  *          PIX             *pixReadStreamJpeg()
+  *
+  *    Read jpeg metadata from file
+  *          l_int32          readHeaderJpeg()
+  *          l_int32          freadHeaderJpeg()
+  *          l_int32          fgetJpegResolution()
+  *          l_int32          fgetJpegComment()
+  *
+  *    Write jpeg to file
+  *          l_int32          pixWriteJpeg()  [special top level]
+  *          l_int32          pixWriteStreamJpeg()
+  *
+  *    Read/write to memory
+  *          PIX             *pixReadMemJpeg()
+  *          l_int32          readHeaderMemJpeg()
+  *          l_int32          readResolutionMemJpeg()
+  *          l_int32          pixWriteMemJpeg()
+  *
+  *    Setting special flag for chroma sampling on write
+  *          l_int32          pixSetChromaSampling()
+  *
+  *    Static system helpers
+  *          static void      jpeg_error_catch_all_1()
+  *          static void      jpeg_error_catch_all_2()
+  *          static l_uint8   jpeg_getc()
+  *          static l_int32   jpeg_comment_callback()
+  *
+  *    Documentation: libjpeg.doc can be found, along with all
+  *    source code, at ftp://ftp.uu.net/graphics/jpeg
+  *    Download and untar the file:  jpegsrc.v6b.tar.gz
+  *    A good paper on jpeg can also be found there: wallace.ps.gz
+  *
+  *    The functions in libjpeg make it very simple to compress
+  *    and decompress images.  On input (decompression from file),
+  *    3 component color images can be read into either an 8 bpp Pix
+  *    with a colormap or a 32 bpp Pix with RGB components.  For output
+  *    (compression to file), all color Pix, whether 8 bpp with a
+  *    colormap or 32 bpp, are written compressed as a set of three
+  *    8 bpp (rgb) images.
+  *
+  *    Low-level error handling
+  *    ------------------------
+  *    The default behavior of the jpeg library is to call exit.
+  *    This is often undesirable, and the caller should make the
+  *    decision when to abort a process.  To prevent the jpeg library
+  *    from calling exit(), setjmp() has been inserted into all
+  *    readers and writers, and the cinfo struct has been set up so that
+  *    the low-level jpeg library will call a special error handler
+  *    that doesn't exit, instead of the default function error_exit().
+  *
+  *    To avoid race conditions and make these functions thread-safe in
+  *    the rare situation where calls to two threads are simultaneously
+  *    failing on bad jpegs, we insert a local copy of the jmp_buf struct
+  *    into the cinfo.client_data field, and use this on longjmp.
+  *    For extracting the jpeg comment, we have the added complication
+  *    that the client_data field must also return the jpeg comment,
+  *    and we use a different error handler.
+  *
+  *    How to avoid subsampling the chroma channels
+  *    --------------------------------------------
+  *    When writing, you can avoid subsampling the U,V (chroma)
+  *    channels.  This gives higher quality for the color, which is
+  *    important for some situations.  The default subsampling is 2x2 on
+  *    both channels.  Before writing, call pixSetChromaSampling(pix, 0)
+  *    to prevent chroma subsampling.
+  *
+  *    How to extract just the luminance channel in reading RGB
+  *    --------------------------------------------------------
+  *    For higher resolution and faster decoding of an RGB image, you
+  *    can extract just the 8 bpp luminance channel, using pixReadJpeg(),
+  *    where you use L_JPEG_READ_LUMINANCE for the %hint arg.
+  *
+  *    How to fail to read if the data is corrupted
+  *    ---------------------------------------------
+  *    By default, if the low-level jpeg library functions do not abort,
+  *    a pix will be returned, even if the data is corrupted and warnings
+  *    are issued.  In order to be most likely to fail to read when there
+  *    is data corruption, use L_JPEG_FAIL_ON_BAD_DATA in the %hint arg.
+  *
+  *    Compressing to memory and decompressing from memory
+  *    ---------------------------------------------------
+  *    On systems like windows without fmemopen() and open_memstream(),
+  *    we write data to a temp file and read it back for operations
+  *    between pix and compressed-data, such as pixReadMemJpeg() and
+  *    pixWriteMemJpeg().
+  *
+  *    Vestigial code: parsing the jpeg file for header metadata
+  *    ---------------------------------------------------------
+  *    For extracting header metadata, we previously parsed the file, looking
+  *    for specific markers.  This is error-prone because of non-standard
+  *    jpeg files, and we now use readHeaderJpeg() and readHeaderMemJpeg().
+  *    The vestigial code is retained in jpegio_notused.c to help you
+  *    understand a bit about how to parse jpeg markers.  It is not compiled
+  *    into the library.
+  * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + + /* --------------------------------------------*/ +#if HAVE_LIBJPEG /* defined in environ.h */ +/* --------------------------------------------*/ + +#include + + /* jconfig.h makes the error of setting + * #define HAVE_STDLIB_H + * which conflicts with config_auto.h (where it is set to 1) and results + * for some gcc compiler versions in a warning. The conflict is harmless + * but we suppress it by undefining the variable. */ +#undef HAVE_STDLIB_H +#include "jpeglib.h" + +static void jpeg_error_catch_all_1(j_common_ptr cinfo); +static void jpeg_error_catch_all_2(j_common_ptr cinfo); +static l_uint8 jpeg_getc(j_decompress_ptr cinfo); + +/* Note: 'boolean' is defined in jmorecfg.h. We use it explicitly + * here because for windows where __MINGW32__ is defined, + * the prototype for jpeg_comment_callback() is given as + * returning a boolean. */ +static boolean jpeg_comment_callback(j_decompress_ptr cinfo); + +/* This is saved in the client_data field of cinfo, and used both + * to retrieve the comment from its callback and to handle + * exceptions with a longjmp. */ +struct callback_data { + jmp_buf jmpbuf; + l_uint8 *comment; +}; + +#ifndef NO_CONSOLE_IO +#define DEBUG_INFO 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * Read jpeg from file (special function) * + *---------------------------------------------------------------------*/ + /*! + * \brief pixReadJpeg() + * + * \param[in] filename + * \param[in] cmapflag 0 for no colormap in returned pix; + * 1 to return an 8 bpp cmapped pix if spp = 3 or 4 + * \param[in] reduction scaling factor: 1, 2, 4 or 8 + * \param[out] pnwarn [optional] number of warnings about + * corrupted data + * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default + * \return pix, or NULL on error + * + *
+  * Notes:
+  *      (1) This is a special function for reading jpeg files.
+  *      (2) Use this if you want the jpeg library to create
+  *          an 8 bpp colormapped image.
+  *      (3) Images reduced by factors of 2, 4 or 8 can be returned
+  *          significantly faster than full resolution images.
+  *      (4) If the jpeg data is bad, the jpeg library will continue
+  *          silently, or return warnings, or attempt to exit.  Depending
+  *          on the severity of the data corruption, there are two possible
+  *          outcomes:
+  *          (a) a possibly damaged pix can be generated, along with zero
+  *              or more warnings, or
+  *          (b) the library will attempt to exit (caught by our error
+  *              handler) and no pix will be returned.
+  *          If a pix is generated with at least one warning of data
+  *          corruption, and if L_JPEG_FAIL_ON_BAD_DATA is included in %hint,
+  *          no pix will be returned.
+  *      (5) The possible hint values are given in the enum in imageio.h:
+  *            * L_JPEG_READ_LUMINANCE
+  *            * L_JPEG_FAIL_ON_BAD_DATA
+  *          Default (0) is to do neither.
+  * 
+ */ +PIX * +pixReadJpeg(const char *filename, + l_int32 cmapflag, + l_int32 reduction, + l_int32 *pnwarn, + l_int32 hint) +{ + l_int32 ret; + l_uint8 *comment; + FILE *fp; + PIX *pix; + + PROCNAME("pixReadJpeg"); + + if (pnwarn) *pnwarn = 0; + if (!filename) + return (PIX *)ERROR_PTR("filename not defined", procName, NULL); + if (cmapflag != 0 && cmapflag != 1) + cmapflag = 0; /* default */ + if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) + return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIX *)ERROR_PTR("image file not found", procName, NULL); + pix = pixReadStreamJpeg(fp, cmapflag, reduction, pnwarn, hint); + if (pix) { + ret = fgetJpegComment(fp, &comment); + if (!ret && comment) + pixSetText(pix, (char *)comment); + LEPT_FREE(comment); + } + fclose(fp); + + if (!pix) + return (PIX *)ERROR_PTR("image not returned", procName, NULL); + return pix; +} + + +/*! + * \brief pixReadStreamJpeg() + * + * \param[in] fp file stream + * \param[in] cmapflag 0 for no colormap in returned pix; + * 1 to return an 8 bpp cmapped pix if spp = 3 or 4 + * \param[in] reduction scaling factor: 1, 2, 4 or 8 + * \param[out] pnwarn [optional] number of warnings + * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default + * \return pix, or NULL on error + * + * Usage: see pixReadJpeg + *
+ * Notes:
+ *      (1) The jpeg comment, if it exists, is not stored in the pix.
+ * 
+ */ +PIX * +pixReadStreamJpeg(FILE *fp, + l_int32 cmapflag, + l_int32 reduction, + l_int32 *pnwarn, + l_int32 hint) +{ + l_int32 cyan, yellow, magenta, black, nwarn; + l_int32 i, j, k, rval, gval, bval; + l_int32 w, h, wpl, spp, ncolors, cindex, ycck, cmyk; + l_uint32 *data; + l_uint32 *line, *ppixel; + JSAMPROW rowbuffer; + PIX *pix; + PIXCMAP *cmap; + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + jmp_buf jmpbuf; /* must be local to the function */ + + PROCNAME("pixReadStreamJpeg"); + + if (pnwarn) *pnwarn = 0; + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + if (cmapflag != 0 && cmapflag != 1) + cmapflag = 0; /* default */ + if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) + return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", procName, NULL); + + if (BITS_IN_JSAMPLE != 8) /* set in jmorecfg.h */ + return (PIX *)ERROR_PTR("BITS_IN_JSAMPLE != 8", procName, NULL); + + rewind(fp); + pix = NULL; + rowbuffer = NULL; + + /* Modify the jpeg error handling to catch fatal errors */ + cinfo.err = jpeg_std_error(&jerr); + jerr.error_exit = jpeg_error_catch_all_1; + cinfo.client_data = (void *)&jmpbuf; + if (setjmp(jmpbuf)) { + pixDestroy(&pix); + LEPT_FREE(rowbuffer); + return (PIX *)ERROR_PTR("internal jpeg error", procName, NULL); + } + + /* Initialize jpeg structs for decompression */ + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, fp); + jpeg_read_header(&cinfo, TRUE); + cinfo.scale_denom = reduction; + cinfo.scale_num = 1; + jpeg_calc_output_dimensions(&cinfo); + if (hint & L_JPEG_READ_LUMINANCE) { + cinfo.out_color_space = JCS_GRAYSCALE; + spp = 1; + L_INFO("reading luminance channel only\n", procName); + } + else { + spp = cinfo.out_color_components; + } + + /* Allocate the image and a row buffer */ + w = cinfo.output_width; + h = cinfo.output_height; + ycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4 && cmapflag == 0); + cmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4 && cmapflag == 0); + if (spp != 1 && spp != 3 && !ycck && !cmyk) { + return (PIX *)ERROR_PTR("spp must be 1 or 3, or YCCK or CMYK", + procName, NULL); + } + if ((spp == 3 && cmapflag == 0) || ycck || cmyk) { /* rgb or 4 bpp color */ + rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), (size_t)spp * w); + pix = pixCreate(w, h, 32); + } + else { /* 8 bpp gray or colormapped */ + rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), w); + pix = pixCreate(w, h, 8); + } + pixSetInputFormat(pix, IFF_JFIF_JPEG); + if (!rowbuffer || !pix) { + LEPT_FREE(rowbuffer); + pixDestroy(&pix); + return (PIX *)ERROR_PTR("rowbuffer or pix not made", procName, NULL); + } + + /* Initialize decompression. Set up a colormap for color + * quantization if requested. */ + if (spp == 1) { /* Grayscale or colormapped */ + jpeg_start_decompress(&cinfo); + } + else { /* Color; spp == 3 or YCCK or CMYK */ + if (cmapflag == 0) { /* 24 bit color in 32 bit pix or YCCK/CMYK */ + cinfo.quantize_colors = FALSE; + jpeg_start_decompress(&cinfo); + } + else { /* Color quantize to 8 bits */ + cinfo.quantize_colors = TRUE; + cinfo.desired_number_of_colors = 256; + jpeg_start_decompress(&cinfo); + + /* Construct a pix cmap */ + cmap = pixcmapCreate(8); + ncolors = cinfo.actual_number_of_colors; + for (cindex = 0; cindex < ncolors; cindex++) { + rval = cinfo.colormap[0][cindex]; + gval = cinfo.colormap[1][cindex]; + bval = cinfo.colormap[2][cindex]; + pixcmapAddColor(cmap, rval, gval, bval); + } + pixSetColormap(pix, cmap); + } + } + wpl = pixGetWpl(pix); + data = pixGetData(pix); + + /* Decompress. Unfortunately, we cannot use the return value + * from jpeg_read_scanlines() to determine if there was a problem + * with the data; it always appears to return 1. We can only + * tell from the warnings during decoding, such as "premature + * end of data segment". The default behavior is to return an + * image even if there are warnings. However, by setting the + * hint to have the same bit flag as L_JPEG_FAIL_ON_BAD_DATA, + * no image will be returned if there are any warnings. */ + for (i = 0; i < h; i++) { + if (jpeg_read_scanlines(&cinfo, &rowbuffer, (JDIMENSION)1) == 0) { + L_ERROR("read error at scanline %d\n", procName, i); + pixDestroy(&pix); + jpeg_destroy_decompress(&cinfo); + LEPT_FREE(rowbuffer); + return (PIX *)ERROR_PTR("bad data", procName, NULL); + } + + /* -- 24 bit color -- */ + if ((spp == 3 && cmapflag == 0) || ycck || cmyk) { + ppixel = data + i * wpl; + if (spp == 3) { + for (j = k = 0; j < w; j++) { + SET_DATA_BYTE(ppixel, COLOR_RED, rowbuffer[k++]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowbuffer[k++]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowbuffer[k++]); + /* should not use alpha byte, but for buggy readers, + * set it to opaque */ + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, 255); + ppixel++; + } + } + else { + /* This is a conversion from CMYK -> RGB that ignores + color profiles, and is invoked when the image header + claims to be in CMYK or YCCK colorspace. If in YCCK, + libjpeg may be doing YCCK -> CMYK under the hood. + To understand why the colors need to be inverted on + read-in for the Adobe marker, see the "Special + color spaces" section of "Using the IJG JPEG + Library" by Thomas G. Lane: + http://www.jpegcameras.com/libjpeg/libjpeg-3.html#ss3.1 + The non-Adobe conversion is equivalent to: + rval = black - black * cyan / 255 + ... + The Adobe conversion is equivalent to: + rval = black - black * (255 - cyan) / 255 + ... + Note that cyan is the complement to red, and we + are subtracting the complement color (weighted + by black) from black. For Adobe conversions, + where they've already inverted the CMY but not + the K, we have to invert again. The results + must be clipped to [0 ... 255]. */ + for (j = k = 0; j < w; j++) { + cyan = rowbuffer[k++]; + magenta = rowbuffer[k++]; + yellow = rowbuffer[k++]; + black = rowbuffer[k++]; + if (cinfo.saw_Adobe_marker) { + rval = (black * cyan) / 255; + gval = (black * magenta) / 255; + bval = (black * yellow) / 255; + } + else { + rval = black * (255 - cyan) / 255; + gval = black * (255 - magenta) / 255; + bval = black * (255 - yellow) / 255; + } + rval = L_MIN(L_MAX(rval, 0), 255); + gval = L_MIN(L_MAX(gval, 0), 255); + bval = L_MIN(L_MAX(bval, 0), 255); + composeRGBPixel(rval, gval, bval, ppixel); + ppixel++; + } + } + } + else { /* 8 bpp grayscale or colormapped pix */ + line = data + i * wpl; + for (j = 0; j < w; j++) + SET_DATA_BYTE(line, j, rowbuffer[j]); + } + } + + nwarn = cinfo.err->num_warnings; + if (pnwarn) *pnwarn = nwarn; + + /* If the pixel density is neither 1 nor 2, it may not be defined. + * In that case, don't set the resolution. */ + if (cinfo.density_unit == 1) { /* pixels per inch */ + pixSetXRes(pix, cinfo.X_density); + pixSetYRes(pix, cinfo.Y_density); + } + else if (cinfo.density_unit == 2) { /* pixels per centimeter */ + pixSetXRes(pix, (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5)); + pixSetYRes(pix, (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5)); + } + + if (cinfo.output_components != spp) + fprintf(stderr, "output spp = %d, spp = %d\n", + cinfo.output_components, spp); + + jpeg_finish_decompress(&cinfo); + jpeg_destroy_decompress(&cinfo); + LEPT_FREE(rowbuffer); + + if (nwarn > 0) { + if (hint & L_JPEG_FAIL_ON_BAD_DATA) { + L_ERROR("fail with %d warning(s) of bad data\n", procName, nwarn); + pixDestroy(&pix); + } + else { + L_WARNING("%d warning(s) of bad data\n", procName, nwarn); + } + } + + return pix; +} + + +/*---------------------------------------------------------------------* + * Read jpeg metadata from file * + *---------------------------------------------------------------------*/ + /*! + * \brief readHeaderJpeg() + * + * \param[in] filename + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pspp [optional] samples/pixel + * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise + * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderJpeg(const char *filename, + l_int32 *pw, + l_int32 *ph, + l_int32 *pspp, + l_int32 *pycck, + l_int32 *pcmyk) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("readHeaderJpeg"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pspp) *pspp = 0; + if (pycck) *pycck = 0; + if (pcmyk) *pcmyk = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pw && !ph && !pspp && !pycck && !pcmyk) + return ERROR_INT("no results requested", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderJpeg() + * + * \param[in] fp file stream + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pspp [optional] samples/pixel + * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise + * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +freadHeaderJpeg(FILE *fp, + l_int32 *pw, + l_int32 *ph, + l_int32 *pspp, + l_int32 *pycck, + l_int32 *pcmyk) +{ + l_int32 spp, w, h; + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + jmp_buf jmpbuf; /* must be local to the function */ + + PROCNAME("freadHeaderJpeg"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pspp) *pspp = 0; + if (pycck) *pycck = 0; + if (pcmyk) *pcmyk = 0; + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pw && !ph && !pspp && !pycck && !pcmyk) + return ERROR_INT("no results requested", procName, 1); + + rewind(fp); + + /* Modify the jpeg error handling to catch fatal errors */ + cinfo.err = jpeg_std_error(&jerr); + cinfo.client_data = (void *)&jmpbuf; + jerr.error_exit = jpeg_error_catch_all_1; + if (setjmp(jmpbuf)) + return ERROR_INT("internal jpeg error", procName, 1); + + /* Initialize the jpeg structs for reading the header */ + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, fp); + jpeg_read_header(&cinfo, TRUE); + jpeg_calc_output_dimensions(&cinfo); + spp = cinfo.out_color_components; + w = cinfo.output_width; + h = cinfo.output_height; + if (w < 1 || h < 1 || spp < 1 || spp > 4) { + jpeg_destroy_decompress(&cinfo); + rewind(fp); + return ERROR_INT("bad jpeg image parameters", procName, 1); + } + + if (pspp) *pspp = spp; + if (pw) *pw = cinfo.output_width; + if (ph) *ph = cinfo.output_height; + if (pycck) *pycck = + (cinfo.jpeg_color_space == JCS_YCCK && spp == 4); + if (pcmyk) *pcmyk = + (cinfo.jpeg_color_space == JCS_CMYK && spp == 4); + + jpeg_destroy_decompress(&cinfo); + rewind(fp); + return 0; +} + + +/* + * \brief fgetJpegResolution() + * + * \param[in] fp file stream + * \param[out] pxres, pyres resolutions + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If neither resolution field is set, this is not an error;
+ *          the returned resolution values are 0 (designating 'unknown').
+ *      (2) Side-effect: this rewinds the stream.
+ * 
+ */ +l_int32 +fgetJpegResolution(FILE *fp, + l_int32 *pxres, + l_int32 *pyres) +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + jmp_buf jmpbuf; /* must be local to the function */ + + PROCNAME("fgetJpegResolution"); + + if (pxres) *pxres = 0; + if (pyres) *pyres = 0; + if (!pxres || !pyres) + return ERROR_INT("&xres and &yres not both defined", procName, 1); + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + + rewind(fp); + + /* Modify the jpeg error handling to catch fatal errors */ + cinfo.err = jpeg_std_error(&jerr); + cinfo.client_data = (void *)&jmpbuf; + jerr.error_exit = jpeg_error_catch_all_1; + if (setjmp(jmpbuf)) + return ERROR_INT("internal jpeg error", procName, 1); + + /* Initialize the jpeg structs for reading the header */ + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, fp); + jpeg_read_header(&cinfo, TRUE); + + /* It is common for the input resolution to be omitted from the + * jpeg file. If density_unit is not 1 or 2, simply return 0. */ + if (cinfo.density_unit == 1) { /* pixels/inch */ + *pxres = cinfo.X_density; + *pyres = cinfo.Y_density; + } + else if (cinfo.density_unit == 2) { /* pixels/cm */ + *pxres = (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5); + *pyres = (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5); + } + + jpeg_destroy_decompress(&cinfo); + rewind(fp); + return 0; +} + + +/* + * \brief fgetJpegComment() + * + * \param[in] fp file stream opened for read + * \param[out] pcomment comment + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Side-effect: this rewinds the stream.
+ * 
+ */ +l_int32 +fgetJpegComment(FILE *fp, + l_uint8 **pcomment) +{ + struct jpeg_decompress_struct cinfo; + struct jpeg_error_mgr jerr; + struct callback_data cb_data; /* contains local jmp_buf */ + + PROCNAME("fgetJpegComment"); + + if (!pcomment) + return ERROR_INT("&comment not defined", procName, 1); + *pcomment = NULL; + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + + rewind(fp); + + /* Modify the jpeg error handling to catch fatal errors */ + cinfo.err = jpeg_std_error(&jerr); + jerr.error_exit = jpeg_error_catch_all_2; + cb_data.comment = NULL; + cinfo.client_data = (void *)&cb_data; + if (setjmp(cb_data.jmpbuf)) { + LEPT_FREE(cb_data.comment); + return ERROR_INT("internal jpeg error", procName, 1); + } + + /* Initialize the jpeg structs for reading the header */ + jpeg_create_decompress(&cinfo); + jpeg_set_marker_processor(&cinfo, JPEG_COM, jpeg_comment_callback); + jpeg_stdio_src(&cinfo, fp); + jpeg_read_header(&cinfo, TRUE); + + /* Save the result */ + *pcomment = cb_data.comment; + jpeg_destroy_decompress(&cinfo); + rewind(fp); + return 0; +} + + +/*---------------------------------------------------------------------* + * Writing Jpeg * + *---------------------------------------------------------------------*/ + /*! + * \brief pixWriteJpeg() + * + * \param[in] filename + * \param[in] pix any depth; cmap is OK + * \param[in] quality 1 - 100; 75 is default + * \param[in] progressive 0 for baseline sequential; 1 for progressive + * \return 0 if OK; 1 on error + */ +l_ok +pixWriteJpeg(const char *filename, + PIX *pix, + l_int32 quality, + l_int32 progressive) +{ + FILE *fp; + + PROCNAME("pixWriteJpeg"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + + if (pixWriteStreamJpeg(fp, pix, quality, progressive)) { + fclose(fp); + return ERROR_INT("pix not written to stream", procName, 1); + } + + fclose(fp); + return 0; +} + + +/*! + * \brief pixWriteStreamJpeg() + * + * \param[in] fp file stream + * \param[in] pixs any depth; cmap is OK + * \param[in] quality 1 - 100; 75 is default value; 0 is also default + * \param[in] progressive 0 for baseline sequential; 1 for progressive + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Progressive encoding gives better compression, at the
+ *          expense of slower encoding and decoding.
+ *      (2) Standard chroma subsampling is 2x2 on both the U and V
+ *          channels.  For highest quality, use no subsampling; this
+ *          option is set by pixSetChromaSampling(pix, 0).
+ *      (3) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
+ *          and 32 bpp.  However, it is possible, and in some cases desirable,
+ *          to write out a jpeg file using an rgb pix that has 24 bpp.
+ *          This can be created by appending the raster data for a 24 bpp
+ *          image (with proper scanline padding) directly to a 24 bpp
+ *          pix that was created without a data array.
+ *      (4) There are two compression paths in this function:
+ *          * Grayscale image, no colormap: compress as 8 bpp image.
+ *          * rgb full color image: copy each line into the color
+ *            line buffer, and compress as three 8 bpp images.
+ *      (5) Under the covers, the jpeg library transforms rgb to a
+ *          luminance-chromaticity triple, each component of which is
+ *          also 8 bits, and compresses that.  It uses 2 Huffman tables,
+ *          a higher resolution one (with more quantization levels)
+ *          for luminosity and a lower resolution one for the chromas.
+ * 
+ */ +l_ok +pixWriteStreamJpeg(FILE *fp, + PIX *pixs, + l_int32 quality, + l_int32 progressive) +{ + l_int32 xres, yres; + l_int32 i, j, k; + l_int32 w, h, d, wpl, spp, colorflag, rowsamples; + l_uint32 *ppixel, *line, *data; + JSAMPROW rowbuffer; + PIX *pix; + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr jerr; + char *text; + jmp_buf jmpbuf; /* must be local to the function */ + + PROCNAME("pixWriteStreamJpeg"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (quality <= 0) quality = 75; /* default */ + if (quality > 100) { + L_ERROR("invalid jpeg quality; setting to 75\n", procName); + quality = 75; + } + + /* If necessary, convert the pix so that it can be jpeg compressed. + * The colormap is removed based on the source, so if the colormap + * has only gray colors, the image will be compressed with spp = 1. */ + pixGetDimensions(pixs, &w, &h, &d); + pix = NULL; + if (pixGetColormap(pixs) != NULL) { + L_INFO("removing colormap; may be better to compress losslessly\n", + procName); + pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + } + else if (d >= 8 && d != 16) { /* normal case; no rewrite */ + pix = pixClone(pixs); + } + else if (d < 8 || d == 16) { + L_INFO("converting from %d to 8 bpp\n", procName, d); + pix = pixConvertTo8(pixs, 0); /* 8 bpp, no cmap */ + } + else { + L_ERROR("unknown pix type with d = %d and no cmap\n", procName, d); + return 1; + } + if (!pix) + return ERROR_INT("pix not made", procName, 1); + pixSetPadBits(pix, 0); + + rewind(fp); + rowbuffer = NULL; + + /* Modify the jpeg error handling to catch fatal errors */ + cinfo.err = jpeg_std_error(&jerr); + cinfo.client_data = (void *)&jmpbuf; + jerr.error_exit = jpeg_error_catch_all_1; + if (setjmp(jmpbuf)) { + LEPT_FREE(rowbuffer); + pixDestroy(&pix); + return ERROR_INT("internal jpeg error", procName, 1); + } + + /* Initialize the jpeg structs for compression */ + jpeg_create_compress(&cinfo); + jpeg_stdio_dest(&cinfo, fp); + cinfo.image_width = w; + cinfo.image_height = h; + + /* Set the color space and number of components */ + d = pixGetDepth(pix); + if (d == 8) { + colorflag = 0; /* 8 bpp grayscale; no cmap */ + cinfo.input_components = 1; + cinfo.in_color_space = JCS_GRAYSCALE; + } + else { /* d == 32 || d == 24 */ + colorflag = 1; /* rgb */ + cinfo.input_components = 3; + cinfo.in_color_space = JCS_RGB; + } + + jpeg_set_defaults(&cinfo); + + /* Setting optimize_coding to TRUE seems to improve compression + * by approx 2-4 percent, and increases comp time by approx 20%. */ + cinfo.optimize_coding = FALSE; + + /* Set resolution in pixels/in (density_unit: 1 = in, 2 = cm) */ + xres = pixGetXRes(pix); + yres = pixGetYRes(pix); + if ((xres != 0) && (yres != 0)) { + cinfo.density_unit = 1; /* designates pixels per inch */ + cinfo.X_density = xres; + cinfo.Y_density = yres; + } + + /* Set the quality and progressive parameters */ + jpeg_set_quality(&cinfo, quality, TRUE); + if (progressive) + jpeg_simple_progression(&cinfo); + + /* Set the chroma subsampling parameters. This is done in + * YUV color space. The Y (intensity) channel is never subsampled. + * The standard subsampling is 2x2 on both the U and V channels. + * Notation on this is confusing. For a nice illustrations, see + * http://en.wikipedia.org/wiki/Chroma_subsampling + * The standard subsampling is written as 4:2:0. + * We allow high quality where there is no subsampling on the + * chroma channels: denoted as 4:4:4. */ + if (pixs->special == L_NO_CHROMA_SAMPLING_JPEG) { + cinfo.comp_info[0].h_samp_factor = 1; + cinfo.comp_info[0].v_samp_factor = 1; + cinfo.comp_info[1].h_samp_factor = 1; + cinfo.comp_info[1].v_samp_factor = 1; + cinfo.comp_info[2].h_samp_factor = 1; + cinfo.comp_info[2].v_samp_factor = 1; + } + + jpeg_start_compress(&cinfo, TRUE); + + /* Cap the text the length limit, 65533, for JPEG_COM payload. + * Just to be safe, subtract 100 to cover the Adobe name space. */ + if ((text = pixGetText(pix)) != NULL) { + if (strlen(text) > 65433) { + L_WARNING("text is %zu bytes; clipping to 65433\n", + procName, strlen(text)); + text[65433] = '\0'; + } + jpeg_write_marker(&cinfo, JPEG_COM, (const JOCTET *)text, strlen(text)); + } + + /* Allocate row buffer */ + spp = cinfo.input_components; + rowsamples = spp * w; + if ((rowbuffer = (JSAMPROW)LEPT_CALLOC(sizeof(JSAMPLE), rowsamples)) + == NULL) { + pixDestroy(&pix); + return ERROR_INT("calloc fail for rowbuffer", procName, 1); + } + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (colorflag == 0) { /* 8 bpp gray */ + for (j = 0; j < w; j++) + rowbuffer[j] = GET_DATA_BYTE(line, j); + } + else { /* colorflag == 1 */ + if (d == 24) { /* See note 3 above; special case of 24 bpp rgb */ + jpeg_write_scanlines(&cinfo, (JSAMPROW *)&line, 1); + } + else { /* standard 32 bpp rgb */ + ppixel = line; + for (j = k = 0; j < w; j++) { + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); + ppixel++; + } + } + } + if (d != 24) + jpeg_write_scanlines(&cinfo, &rowbuffer, 1); + } + jpeg_finish_compress(&cinfo); + + pixDestroy(&pix); + LEPT_FREE(rowbuffer); + jpeg_destroy_compress(&cinfo); + return 0; +} + + +/*---------------------------------------------------------------------* + * Read/write to memory * + *---------------------------------------------------------------------*/ + + /*! + * \brief pixReadMemJpeg() + * + * \param[in] data const; jpeg-encoded + * \param[in] size of data + * \param[in] cmflag colormap flag 0 means return RGB image if color; + * 1 means create a colormap and return + * an 8 bpp colormapped image if color + * \param[in] reduction scaling factor: 1, 2, 4 or 8 + * \param[out] pnwarn [optional] number of warnings + * \param[in] hint a bitwise OR of L_JPEG_* values; 0 for default + * \return pix, or NULL on error + * + *
+  * Notes:
+  *      (1) The %size byte of %data must be a null character.
+  *      (2) The only hint flag so far is L_JPEG_READ_LUMINANCE,
+  *          given in the enum in imageio.h.
+  *      (3) See pixReadJpeg() for usage.
+  * 
+ */ +PIX * +pixReadMemJpeg(const l_uint8 *data, + size_t size, + l_int32 cmflag, + l_int32 reduction, + l_int32 *pnwarn, + l_int32 hint) +{ + l_int32 ret; + l_uint8 *comment; + FILE *fp; + PIX *pix; + + PROCNAME("pixReadMemJpeg"); + + if (pnwarn) *pnwarn = 0; + if (!data) + return (PIX *)ERROR_PTR("data not defined", procName, NULL); + + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIX *)ERROR_PTR("stream not opened", procName, NULL); + pix = pixReadStreamJpeg(fp, cmflag, reduction, pnwarn, hint); + if (pix) { + ret = fgetJpegComment(fp, &comment); + if (!ret && comment) { + pixSetText(pix, (char *)comment); + LEPT_FREE(comment); + } + } + fclose(fp); + if (!pix) L_ERROR("pix not read\n", procName); + return pix; +} + + +/*! + * \brief readHeaderMemJpeg() + * + * \param[in] data const; jpeg-encoded + * \param[in] size of data + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pspp [optional] samples/pixel + * \param[out] pycck [optional] 1 if ycck color space; 0 otherwise + * \param[out] pcmyk [optional] 1 if cmyk color space; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderMemJpeg(const l_uint8 *data, + size_t size, + l_int32 *pw, + l_int32 *ph, + l_int32 *pspp, + l_int32 *pycck, + l_int32 *pcmyk) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("readHeaderMemJpeg"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pspp) *pspp = 0; + if (pycck) *pycck = 0; + if (pcmyk) *pcmyk = 0; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (!pw && !ph && !pspp && !pycck && !pcmyk) + return ERROR_INT("no results requested", procName, 1); + + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); + fclose(fp); + return ret; +} + + +/*! + * \brief readResolutionMemJpeg() + * + * \param[in] data const; jpeg-encoded + * \param[in] size of data + * \param[out] pxres [optional] + * \param[out] pyres [optional] + * \return 0 if OK, 1 on error + */ +l_ok +readResolutionMemJpeg(const l_uint8 *data, + size_t size, + l_int32 *pxres, + l_int32 *pyres) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("readResolutionMemJpeg"); + + if (pxres) *pxres = 0; + if (pyres) *pyres = 0; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (!pxres && !pyres) + return ERROR_INT("no results requested", procName, 1); + + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = fgetJpegResolution(fp, pxres, pyres); + fclose(fp); + return ret; +} + + +/*! + * \brief pixWriteMemJpeg() + * + * \param[out] pdata data of jpeg compressed image + * \param[out] psize size of returned data + * \param[in] pix any depth; cmap is OK + * \param[in] quality 1 - 100; 75 is default value; 0 is also default + * \param[in] progressive 0 for baseline sequential; 1 for progressive + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStreamJpeg() for usage.  This version writes to
+ *          memory instead of to a file stream.
+ * 
+ */ +l_ok +pixWriteMemJpeg(l_uint8 **pdata, + size_t *psize, + PIX *pix, + l_int32 quality, + l_int32 progressive) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("pixWriteMemJpeg"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixWriteStreamJpeg(fp, pix, quality, progressive); +#else + L_INFO("work-around: writing to a temp file\n", procName); +#ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#endif /* _WIN32 */ + ret = pixWriteStreamJpeg(fp, pix, quality, progressive); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*---------------------------------------------------------------------* + * Setting special flag for chroma sampling on write * + *---------------------------------------------------------------------*/ + /*! + * \brief pixSetChromaSampling() + * + * \param[in] pix + * \param[in] sampling 1 for subsampling; 0 for no subsampling + * \return 0 if OK, 1 on error + * + *
+  * Notes:
+  *      (1) The default is for 2x2 chroma subsampling because the files are
+  *          considerably smaller and the appearance is typically satisfactory.
+  *          To get full resolution output in the chroma channels for
+  *          jpeg writing, call this with %sampling == 0.
+  * 
+ */ +l_ok +pixSetChromaSampling(PIX *pix, + l_int32 sampling) +{ + PROCNAME("pixSetChromaSampling"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (sampling) + pixSetSpecial(pix, 0); /* default */ + else + pixSetSpecial(pix, L_NO_CHROMA_SAMPLING_JPEG); + return 0; +} + + +/*---------------------------------------------------------------------* + * Static system helpers * + *---------------------------------------------------------------------*/ + /*! + * \brief jpeg_error_catch_all_1() + * + * Notes: + * (1) The default jpeg error_exit() kills the process, but we + * never want a call to leptonica to kill a process. If you + * do want this behavior, remove the calls to these error handlers. + * (2) This is used where cinfo->client_data holds only jmpbuf. + */ +static void +jpeg_error_catch_all_1(j_common_ptr cinfo) +{ + jmp_buf *pjmpbuf = (jmp_buf *)cinfo->client_data; + (*cinfo->err->output_message) (cinfo); + jpeg_destroy(cinfo); + longjmp(*pjmpbuf, 1); + return; +} + +/*! + * \brief jpeg_error_catch_all_2() + * + * Notes: + * (1) This is used where cinfo->client_data needs to hold both + * the jmpbuf and the jpeg comment data. + * (2) On error, the comment data will be freed by the caller. + */ +static void +jpeg_error_catch_all_2(j_common_ptr cinfo) +{ + struct callback_data *pcb_data; + + pcb_data = (struct callback_data *)cinfo->client_data; + (*cinfo->err->output_message) (cinfo); + jpeg_destroy(cinfo); + longjmp(pcb_data->jmpbuf, 1); + return; +} + +/* This function was borrowed from libjpeg */ +static l_uint8 +jpeg_getc(j_decompress_ptr cinfo) +{ + struct jpeg_source_mgr *datasrc; + + datasrc = cinfo->src; + if (datasrc->bytes_in_buffer == 0) { + if (!(*datasrc->fill_input_buffer) (cinfo)) { + return 0; + } + } + datasrc->bytes_in_buffer--; + return GETJOCTET(*datasrc->next_input_byte++); +} + +/*! + * \brief jpeg_comment_callback() + * + * Notes: + * (1) This is used to read the jpeg comment (JPEG_COM). + * See the note above the declaration for why it returns + * a "boolean". + */ +static boolean +jpeg_comment_callback(j_decompress_ptr cinfo) +{ + l_int32 length, i; + l_uint8 *comment; + struct callback_data *pcb_data; + + /* Get the size of the comment */ + length = jpeg_getc(cinfo) << 8; + length += jpeg_getc(cinfo); + length -= 2; + if (length <= 0) + return 1; + + /* Extract the comment from the file */ + if ((comment = (l_uint8 *)LEPT_CALLOC(length + 1, sizeof(l_uint8))) == NULL) + return 0; + for (i = 0; i < length; i++) + comment[i] = jpeg_getc(cinfo); + + /* Save the comment and return */ + pcb_data = (struct callback_data *)cinfo->client_data; + if (pcb_data->comment) { /* clear before overwriting previous comment */ + LEPT_FREE(pcb_data->comment); + pcb_data->comment = NULL; + } + pcb_data->comment = comment; + return 1; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBJPEG */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/jpegiostub.c b/3rdparty/hgOCR/leptonica/jpegiostub.c new file mode 100644 index 00000000..dc31c161 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/jpegiostub.c @@ -0,0 +1,151 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file jpegiostub.c + *
+ *
+ *     Stubs for jpegio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBJPEG /* defined in environ.h */ +/* --------------------------------------------*/ + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadJpeg(const char *filename, l_int32 cmflag, l_int32 reduction, + l_int32 *pnwarn, l_int32 hint) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadJpeg", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmflag, l_int32 reduction, + l_int32 *pnwarn, l_int32 hint) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamJpeg", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderJpeg(const char *filename, l_int32 *pw, l_int32 *ph, + l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) +{ + return ERROR_INT("function not present", "readHeaderJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok freadHeaderJpeg(FILE *fp, l_int32 *pw, l_int32 *ph, + l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) +{ + return ERROR_INT("function not present", "freadHeaderJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_int32 fgetJpegResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) +{ + return ERROR_INT("function not present", "fgetJpegResolution", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_int32 fgetJpegComment(FILE *fp, l_uint8 **pcomment) +{ + return ERROR_INT("function not present", "fgetJpegComment", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteJpeg(const char *filename, PIX *pix, l_int32 quality, + l_int32 progressive) +{ + return ERROR_INT("function not present", "pixWriteJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamJpeg(FILE *fp, PIX *pix, l_int32 quality, + l_int32 progressive) +{ + return ERROR_INT("function not present", "pixWriteStreamJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemJpeg(const l_uint8 *cdata, size_t size, l_int32 cmflag, + l_int32 reduction, l_int32 *pnwarn, l_int32 hint) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadMemJpeg", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemJpeg(const l_uint8 *cdata, size_t size, + l_int32 *pw, l_int32 *ph, l_int32 *pspp, + l_int32 *pycck, l_int32 *pcmyk) +{ + return ERROR_INT("function not present", "readHeaderMemJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readResolutionMemJpeg(const l_uint8 *data, size_t size, + l_int32 *pxres, l_int32 *pyres) +{ + return ERROR_INT("function not present", "readResolutionMemJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemJpeg(l_uint8 **pdata, size_t *psize, PIX *pix, + l_int32 quality, l_int32 progressive) +{ + return ERROR_INT("function not present", "pixWriteMemJpeg", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixSetChromaSampling(PIX *pix, l_int32 sampling) +{ + return ERROR_INT("function not present", "pixSetChromaSampling", 1); +} + +/* ----------------------------------------------------------------------*/ + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBJPEG */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/kernel.c b/3rdparty/hgOCR/leptonica/kernel.c new file mode 100644 index 00000000..9e34e27d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/kernel.c @@ -0,0 +1,1284 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file kernel.c + *
+ *
+ *      Basic operations on kernels for image convolution
+ *
+ *         Create/destroy/copy
+ *            L_KERNEL   *kernelCreate()
+ *            void        kernelDestroy()
+ *            L_KERNEL   *kernelCopy()
+ *
+ *         Accessors:
+ *            l_int32     kernelGetElement()
+ *            l_int32     kernelSetElement()
+ *            l_int32     kernelGetParameters()
+ *            l_int32     kernelSetOrigin()
+ *            l_int32     kernelGetSum()
+ *            l_int32     kernelGetMinMax()
+ *
+ *         Normalize/invert
+ *            L_KERNEL   *kernelNormalize()
+ *            L_KERNEL   *kernelInvert()
+ *
+ *         Helper function
+ *            l_float32 **create2dFloatArray()
+ *
+ *         Serialized I/O
+ *            L_KERNEL   *kernelRead()
+ *            L_KERNEL   *kernelReadStream()
+ *            l_int32     kernelWrite()
+ *            l_int32     kernelWriteStream()
+ *
+ *         Making a kernel from a compiled string
+ *            L_KERNEL   *kernelCreateFromString()
+ *
+ *         Making a kernel from a simple file format
+ *            L_KERNEL   *kernelCreateFromFile()
+ *
+ *         Making a kernel from a Pix
+ *            L_KERNEL   *kernelCreateFromPix()
+ *
+ *         Display a kernel in a pix
+ *            PIX        *kernelDisplayInPix()
+ *
+ *         Parse string to extract numbers
+ *            NUMA       *parseStringForNumbers()
+ *
+ *      Simple parametric kernels
+ *            L_KERNEL   *makeFlatKernel()
+ *            L_KERNEL   *makeGaussianKernel()
+ *            L_KERNEL   *makeGaussianKernelSep()
+ *            L_KERNEL   *makeDoGKernel()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Array size must be > 0 and not larger than this */ +static const l_uint32 MaxArraySize = 100000; + + +/*------------------------------------------------------------------------* + * Create / Destroy * + *------------------------------------------------------------------------*/ +/*! + * \brief kernelCreate() + * + * \param[in] height, width + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) kernelCreate() initializes all values to 0.
+ *      (2) After this call, (cy,cx) and nonzero data values must be
+ *          assigned.
+ *      (2) The number of kernel elements must be less than 2^29.
+ * 
+ */ +L_KERNEL * +kernelCreate(l_int32 height, + l_int32 width) +{ +l_uint64 size64; +L_KERNEL *kel; + + PROCNAME("kernelCreate"); + + if (width <= 0) + return (L_KERNEL *)ERROR_PTR("width must be > 0", procName, NULL); + if (height <= 0) + return (L_KERNEL *)ERROR_PTR("height must be > 0", procName, NULL); + + /* Avoid overflow in malloc arg */ + size64 = (l_uint64)width * (l_uint64)height; + if (size64 >= (1LL << 29)) { + L_ERROR("requested width = %d, height = %d\n", procName, width, height); + return (L_KERNEL *)ERROR_PTR("size >= 2^29", procName, NULL); + } + + kel = (L_KERNEL *)LEPT_CALLOC(1, sizeof(L_KERNEL)); + kel->sy = height; + kel->sx = width; + if ((kel->data = create2dFloatArray(height, width)) == NULL) { + LEPT_FREE(kel); + return (L_KERNEL *)ERROR_PTR("data not allocated", procName, NULL); + } + return kel; +} + + +/*! + * \brief kernelDestroy() + * + * \param[in,out] pkel will be set to null before returning + * \return void + */ +void +kernelDestroy(L_KERNEL **pkel) +{ +l_int32 i; +L_KERNEL *kel; + + PROCNAME("kernelDestroy"); + + if (pkel == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + if ((kel = *pkel) == NULL) + return; + + for (i = 0; i < kel->sy; i++) + LEPT_FREE(kel->data[i]); + LEPT_FREE(kel->data); + LEPT_FREE(kel); + + *pkel = NULL; + return; +} + + +/*! + * \brief kernelCopy() + * + * \param[in] kels source kernel + * \return keld copy of kels, or NULL on error + */ +L_KERNEL * +kernelCopy(L_KERNEL *kels) +{ +l_int32 i, j, sx, sy, cx, cy; +L_KERNEL *keld; + + PROCNAME("kernelCopy"); + + if (!kels) + return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); + + kernelGetParameters(kels, &sy, &sx, &cy, &cx); + if ((keld = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); + keld->cy = cy; + keld->cx = cx; + for (i = 0; i < sy; i++) + for (j = 0; j < sx; j++) + keld->data[i][j] = kels->data[i][j]; + + return keld; +} + + +/*----------------------------------------------------------------------* + * Accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelGetElement() + * + * \param[in] kel + * \param[in] row + * \param[in] col + * \param[out] pval + * \return 0 if OK; 1 on error + */ +l_ok +kernelGetElement(L_KERNEL *kel, + l_int32 row, + l_int32 col, + l_float32 *pval) +{ + PROCNAME("kernelGetElement"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!kel) + return ERROR_INT("kernel not defined", procName, 1); + if (row < 0 || row >= kel->sy) + return ERROR_INT("kernel row out of bounds", procName, 1); + if (col < 0 || col >= kel->sx) + return ERROR_INT("kernel col out of bounds", procName, 1); + + *pval = kel->data[row][col]; + return 0; +} + + +/*! + * \brief kernelSetElement() + * + * \param[in] kel kernel + * \param[in] row + * \param[in] col + * \param[in] val + * \return 0 if OK; 1 on error + */ +l_ok +kernelSetElement(L_KERNEL *kel, + l_int32 row, + l_int32 col, + l_float32 val) +{ + PROCNAME("kernelSetElement"); + + if (!kel) + return ERROR_INT("kel not defined", procName, 1); + if (row < 0 || row >= kel->sy) + return ERROR_INT("kernel row out of bounds", procName, 1); + if (col < 0 || col >= kel->sx) + return ERROR_INT("kernel col out of bounds", procName, 1); + + kel->data[row][col] = val; + return 0; +} + + +/*! + * \brief kernelGetParameters() + * + * \param[in] kel kernel + * \param[out] psy, psx, pcy, pcx [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +kernelGetParameters(L_KERNEL *kel, + l_int32 *psy, + l_int32 *psx, + l_int32 *pcy, + l_int32 *pcx) +{ + PROCNAME("kernelGetParameters"); + + if (psy) *psy = 0; + if (psx) *psx = 0; + if (pcy) *pcy = 0; + if (pcx) *pcx = 0; + if (!kel) + return ERROR_INT("kernel not defined", procName, 1); + if (psy) *psy = kel->sy; + if (psx) *psx = kel->sx; + if (pcy) *pcy = kel->cy; + if (pcx) *pcx = kel->cx; + return 0; +} + + +/*! + * \brief kernelSetOrigin() + * + * \param[in] kel kernel + * \param[in] cy, cx + * \return 0 if OK; 1 on error + */ +l_ok +kernelSetOrigin(L_KERNEL *kel, + l_int32 cy, + l_int32 cx) +{ + PROCNAME("kernelSetOrigin"); + + if (!kel) + return ERROR_INT("kel not defined", procName, 1); + kel->cy = cy; + kel->cx = cx; + return 0; +} + + +/*! + * \brief kernelGetSum() + * + * \param[in] kel kernel + * \param[out] psum sum of all kernel values + * \return 0 if OK, 1 on error + */ +l_ok +kernelGetSum(L_KERNEL *kel, + l_float32 *psum) +{ +l_int32 sx, sy, i, j; + + PROCNAME("kernelGetSum"); + + if (!psum) + return ERROR_INT("&sum not defined", procName, 1); + *psum = 0.0; + if (!kel) + return ERROR_INT("kernel not defined", procName, 1); + + kernelGetParameters(kel, &sy, &sx, NULL, NULL); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + *psum += kel->data[i][j]; + } + } + return 0; +} + + +/*! + * \brief kernelGetMinMax() + * + * \param[in] kel kernel + * \param[out] pmin [optional] minimum value + * \param[out] pmax [optional] maximum value + * \return 0 if OK, 1 on error + */ +l_ok +kernelGetMinMax(L_KERNEL *kel, + l_float32 *pmin, + l_float32 *pmax) +{ +l_int32 sx, sy, i, j; +l_float32 val, minval, maxval; + + PROCNAME("kernelGetMinmax"); + + if (!pmin && !pmax) + return ERROR_INT("neither &min nor &max defined", procName, 1); + if (pmin) *pmin = 0.0; + if (pmax) *pmax = 0.0; + if (!kel) + return ERROR_INT("kernel not defined", procName, 1); + + kernelGetParameters(kel, &sy, &sx, NULL, NULL); + minval = 10000000.0; + maxval = -10000000.0; + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + val = kel->data[i][j]; + if (val < minval) + minval = val; + if (val > maxval) + maxval = val; + } + } + if (pmin) + *pmin = minval; + if (pmax) + *pmax = maxval; + + return 0; +} + + +/*----------------------------------------------------------------------* + * Normalize/Invert * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelNormalize() + * + * \param[in] kels source kel, to be normalized + * \param[in] normsum desired sum of elements in keld + * \return keld normalized version of kels, or NULL on error + * or if sum of elements is very close to 0) + * + *
+ * Notes:
+ *      (1) If the sum of kernel elements is close to 0, do not
+ *          try to calculate the normalized kernel.  Instead,
+ *          return a copy of the input kernel, with a warning.
+ * 
+ */ +L_KERNEL * +kernelNormalize(L_KERNEL *kels, + l_float32 normsum) +{ +l_int32 i, j, sx, sy, cx, cy; +l_float32 sum, factor; +L_KERNEL *keld; + + PROCNAME("kernelNormalize"); + + if (!kels) + return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); + + kernelGetSum(kels, &sum); + if (L_ABS(sum) < 0.00001) { + L_WARNING("null sum; not normalizing; returning a copy\n", procName); + return kernelCopy(kels); + } + + kernelGetParameters(kels, &sy, &sx, &cy, &cx); + if ((keld = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); + keld->cy = cy; + keld->cx = cx; + + factor = normsum / sum; + for (i = 0; i < sy; i++) + for (j = 0; j < sx; j++) + keld->data[i][j] = factor * kels->data[i][j]; + + return keld; +} + + +/*! + * \brief kernelInvert() + * + * \param[in] kels source kel, to be inverted + * \return keld spatially inverted, about the origin, or NULL on error + * + *
+ * Notes:
+ *      (1) For convolution, the kernel is spatially inverted before
+ *          a "correlation" operation is done between the kernel and the image.
+ * 
+ */ +L_KERNEL * +kernelInvert(L_KERNEL *kels) +{ +l_int32 i, j, sx, sy, cx, cy; +L_KERNEL *keld; + + PROCNAME("kernelInvert"); + + if (!kels) + return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); + + kernelGetParameters(kels, &sy, &sx, &cy, &cx); + if ((keld = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); + keld->cy = sy - 1 - cy; + keld->cx = sx - 1 - cx; + + for (i = 0; i < sy; i++) + for (j = 0; j < sx; j++) + keld->data[i][j] = kels->data[sy - 1 - i][sx - 1 - j]; + + return keld; +} + + +/*----------------------------------------------------------------------* + * Helper function * + *----------------------------------------------------------------------*/ +/*! + * \brief create2dFloatArray() + * + * \param[in] sy rows == height + * \param[in] sx columns == width + * \return doubly indexed array i.e., an array of sy row pointers, + * each of which points to an array of sx floats + * + *
+ * Notes:
+ *      (1) The array[%sy][%sx] is indexed in standard "matrix notation",
+ *          with the row index first.
+ *      (2) The caller kernelCreate() limits the size to < 2^29 pixels.
+ * 
+ */ +l_float32 ** +create2dFloatArray(l_int32 sy, + l_int32 sx) +{ +l_int32 i; +l_float32 **array; + + PROCNAME("create2dFloatArray"); + + if (sx <= 0 || sx > MaxArraySize) + return (l_float32 **)ERROR_PTR("sx out of bounds", procName, NULL); + if (sy <= 0 || sy > MaxArraySize) + return (l_float32 **)ERROR_PTR("sy out of bounds", procName, NULL); + + if ((array = (l_float32 **)LEPT_CALLOC(sy, sizeof(l_float32 *))) == NULL) + return (l_float32 **)ERROR_PTR("ptr array not made", procName, NULL); + for (i = 0; i < sy; i++) + array[i] = (l_float32 *)LEPT_CALLOC(sx, sizeof(l_float32)); + return array; +} + + +/*----------------------------------------------------------------------* + * Kernel serialized I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelRead() + * + * \param[in] fname filename + * \return kernel, or NULL on error + */ +L_KERNEL * +kernelRead(const char *fname) +{ +FILE *fp; +L_KERNEL *kel; + + PROCNAME("kernelRead"); + + if (!fname) + return (L_KERNEL *)ERROR_PTR("fname not defined", procName, NULL); + + if ((fp = fopenReadStream(fname)) == NULL) + return (L_KERNEL *)ERROR_PTR("stream not opened", procName, NULL); + if ((kel = kernelReadStream(fp)) == NULL) { + fclose(fp); + return (L_KERNEL *)ERROR_PTR("kel not returned", procName, NULL); + } + fclose(fp); + + return kel; +} + + +/*! + * \brief kernelReadStream() + * + * \param[in] fp file stream + * \return kernel, or NULL on error + */ +L_KERNEL * +kernelReadStream(FILE *fp) +{ +l_int32 sy, sx, cy, cx, i, j, ret, version, ignore; +L_KERNEL *kel; + + PROCNAME("kernelReadStream"); + + if (!fp) + return (L_KERNEL *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, " Kernel Version %d\n", &version); + if (ret != 1) + return (L_KERNEL *)ERROR_PTR("not a kernel file", procName, NULL); + if (version != KERNEL_VERSION_NUMBER) + return (L_KERNEL *)ERROR_PTR("invalid kernel version", procName, NULL); + + if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", + &sy, &sx, &cy, &cx) != 4) + return (L_KERNEL *)ERROR_PTR("dimensions not read", procName, NULL); + if (sx > MaxArraySize || sy > MaxArraySize) { + L_ERROR("sx = %d or sy = %d > %d\n", procName, sx, sy, MaxArraySize); + return NULL; + } + if ((kel = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); + kernelSetOrigin(kel, cy, cx); + + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) + ignore = fscanf(fp, "%15f", &kel->data[i][j]); + ignore = fscanf(fp, "\n"); + } + ignore = fscanf(fp, "\n"); + + return kel; +} + + +/*! + * \brief kernelWrite() + * + * \param[in] fname output file + * \param[in] kel kernel + * \return 0 if OK, 1 on error + */ +l_ok +kernelWrite(const char *fname, + L_KERNEL *kel) +{ +FILE *fp; + + PROCNAME("kernelWrite"); + + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (!kel) + return ERROR_INT("kel not defined", procName, 1); + + if ((fp = fopenWriteStream(fname, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + kernelWriteStream(fp, kel); + fclose(fp); + + return 0; +} + + +/*! + * \brief kernelWriteStream() + * + * \param[in] fp file stream + * \param[in] kel + * \return 0 if OK, 1 on error + */ +l_ok +kernelWriteStream(FILE *fp, + L_KERNEL *kel) +{ +l_int32 sx, sy, cx, cy, i, j; + + PROCNAME("kernelWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!kel) + return ERROR_INT("kel not defined", procName, 1); + kernelGetParameters(kel, &sy, &sx, &cy, &cx); + + fprintf(fp, " Kernel Version %d\n", KERNEL_VERSION_NUMBER); + fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) + fprintf(fp, "%15.4f", kel->data[i][j]); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + return 0; +} + + +/*----------------------------------------------------------------------* + * Making a kernel from a compiled string * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelCreateFromString() + * + * \param[in] h, w height, width + * \param[in] cy, cx origin + * \param[in] kdata + * \return kernel of the given size, or NULL on error + * + *
+ * Notes:
+ *      (1) The data is an array of chars, in row-major order, giving
+ *          space separated integers in the range [-255 ... 255].
+ *      (2) The only other formatting limitation is that you must
+ *          leave space between the last number in each row and
+ *          the double-quote.  If possible, it's also nice to have each
+ *          line in the string represent a line in the kernel; e.g.,
+ *              static const char *kdata =
+ *                  " 20   50   20 "
+ *                  " 70  140   70 "
+ *                  " 20   50   20 ";
+ * 
+ */ +L_KERNEL * +kernelCreateFromString(l_int32 h, + l_int32 w, + l_int32 cy, + l_int32 cx, + const char *kdata) +{ +l_int32 n, i, j, index; +l_float32 val; +L_KERNEL *kel; +NUMA *na; + + PROCNAME("kernelCreateFromString"); + + if (h < 1) + return (L_KERNEL *)ERROR_PTR("height must be > 0", procName, NULL); + if (w < 1) + return (L_KERNEL *)ERROR_PTR("width must be > 0", procName, NULL); + if (cy < 0 || cy >= h) + return (L_KERNEL *)ERROR_PTR("cy invalid", procName, NULL); + if (cx < 0 || cx >= w) + return (L_KERNEL *)ERROR_PTR("cx invalid", procName, NULL); + + kel = kernelCreate(h, w); + kernelSetOrigin(kel, cy, cx); + na = parseStringForNumbers(kdata, " \t\n"); + n = numaGetCount(na); + if (n != w * h) { + kernelDestroy(&kel); + numaDestroy(&na); + fprintf(stderr, "w = %d, h = %d, num ints = %d\n", w, h, n); + return (L_KERNEL *)ERROR_PTR("invalid integer data", procName, NULL); + } + + index = 0; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + numaGetFValue(na, index, &val); + kernelSetElement(kel, i, j, val); + index++; + } + } + + numaDestroy(&na); + return kel; +} + + +/*----------------------------------------------------------------------* + * Making a kernel from a simple file format * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelCreateFromFile() + * + * \param[in] filename + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) The file contains, in the following order:
+ *           ~ Any number of comment lines starting with '#' are ignored
+ *           ~ The height and width of the kernel
+ *           ~ The y and x values of the kernel origin
+ *           ~ The kernel data, formatted as lines of numbers (integers
+ *             or floats) for the kernel values in row-major order,
+ *             and with no other punctuation.
+ *             (Note: this differs from kernelCreateFromString(),
+ *             where each line must begin and end with a double-quote
+ *             to tell the compiler it's part of a string.)
+ *           ~ The kernel specification ends when a blank line,
+ *             a comment line, or the end of file is reached.
+ *      (2) All lines must be left-justified.
+ *      (3) See kernelCreateFromString() for a description of the string
+ *          format for the kernel data.  As an example, here are the lines
+ *          of a valid kernel description file  In the file, all lines
+ *          are left-justified:
+ * \code
+ *                    # small 3x3 kernel
+ *                    3 3
+ *                    1 1
+ *                    25.5   51    24.3
+ *                    70.2  146.3  73.4
+ *                    20     50.9  18.4
+ * \endcode
+ * 
+ */ +L_KERNEL * +kernelCreateFromFile(const char *filename) +{ +char *filestr, *line; +l_int32 nlines, i, j, first, index, w, h, cx, cy, n; +l_float32 val; +size_t size; +NUMA *na, *nat; +SARRAY *sa; +L_KERNEL *kel; + + PROCNAME("kernelCreateFromFile"); + + if (!filename) + return (L_KERNEL *)ERROR_PTR("filename not defined", procName, NULL); + + if ((filestr = (char *)l_binaryRead(filename, &size)) == NULL) + return (L_KERNEL *)ERROR_PTR("file not found", procName, NULL); + if (size == 0) { + LEPT_FREE(filestr); + return (L_KERNEL *)ERROR_PTR("file is empty", procName, NULL); + } + + sa = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + nlines = sarrayGetCount(sa); + + /* Find the first data line. */ + for (i = 0, first = 0; i < nlines; i++) { + line = sarrayGetString(sa, i, L_NOCOPY); + if (line[0] != '#') { + first = i; + break; + } + } + + /* Find the kernel dimensions and origin location. */ + line = sarrayGetString(sa, first, L_NOCOPY); + if (sscanf(line, "%d %d", &h, &w) != 2) { + sarrayDestroy(&sa); + return (L_KERNEL *)ERROR_PTR("error reading h,w", procName, NULL); + } + if (h > MaxArraySize || w > MaxArraySize) { + L_ERROR("h = %d or w = %d > %d\n", procName, h, w, MaxArraySize); + return NULL; + } + line = sarrayGetString(sa, first + 1, L_NOCOPY); + if (sscanf(line, "%d %d", &cy, &cx) != 2) { + sarrayDestroy(&sa); + return (L_KERNEL *)ERROR_PTR("error reading cy,cx", procName, NULL); + } + + /* Extract the data. This ends when we reach eof, or when we + * encounter a line of data that is either a null string or + * contains just a newline. */ + na = numaCreate(0); + for (i = first + 2; i < nlines; i++) { + line = sarrayGetString(sa, i, L_NOCOPY); + if (line[0] == '\0' || line[0] == '\n' || line[0] == '#') + break; + nat = parseStringForNumbers(line, " \t\n"); + numaJoin(na, nat, 0, -1); + numaDestroy(&nat); + } + sarrayDestroy(&sa); + + n = numaGetCount(na); + if (n != w * h) { + numaDestroy(&na); + fprintf(stderr, "w = %d, h = %d, num ints = %d\n", w, h, n); + return (L_KERNEL *)ERROR_PTR("invalid integer data", procName, NULL); + } + + kel = kernelCreate(h, w); + kernelSetOrigin(kel, cy, cx); + index = 0; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + numaGetFValue(na, index, &val); + kernelSetElement(kel, i, j, val); + index++; + } + } + + numaDestroy(&na); + return kel; +} + + +/*----------------------------------------------------------------------* + * Making a kernel from a Pix * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelCreateFromPix() + * + * \param[in] pix + * \param[in] cy, cx origin of kernel + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) The origin must be positive and within the dimensions of the pix.
+ * 
+ */ +L_KERNEL * +kernelCreateFromPix(PIX *pix, + l_int32 cy, + l_int32 cx) +{ +l_int32 i, j, w, h, d; +l_uint32 val; +L_KERNEL *kel; + + PROCNAME("kernelCreateFromPix"); + + if (!pix) + return (L_KERNEL *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 8) + return (L_KERNEL *)ERROR_PTR("pix not 8 bpp", procName, NULL); + if (cy < 0 || cx < 0 || cy >= h || cx >= w) + return (L_KERNEL *)ERROR_PTR("(cy, cx) invalid", procName, NULL); + + kel = kernelCreate(h, w); + kernelSetOrigin(kel, cy, cx); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pix, j, i, &val); + kernelSetElement(kel, i, j, (l_float32)val); + } + } + + return kel; +} + + +/*----------------------------------------------------------------------* + * Display a kernel in a pix * + *----------------------------------------------------------------------*/ +/*! + * \brief kernelDisplayInPix() + * + * \param[in] kel kernel + * \param[in] size of grid interiors; odd; either 1 or a minimum size + * of 17 is enforced + * \param[in] gthick grid thickness; either 0 or a minimum size of 2 + * is enforced + * \return pix display of kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) This gives a visual representation of a kernel.
+ *      (2) There are two modes of display:
+ *          (a) Grid lines of minimum width 2, surrounding regions
+ *              representing kernel elements of minimum size 17,
+ *              with a "plus" mark at the kernel origin, or
+ *          (b) A pix without grid lines and using 1 pixel per kernel element.
+ *      (3) For both cases, the kernel absolute value is displayed,
+ *          normalized such that the maximum absolute value is 255.
+ *      (4) Large 2D separable kernels should be used for convolution
+ *          with two 1D kernels.  However, for the bilateral filter,
+ *          the computation time is independent of the size of the
+ *          2D content kernel.
+ * 
+ */ +PIX * +kernelDisplayInPix(L_KERNEL *kel, + l_int32 size, + l_int32 gthick) +{ +l_int32 i, j, w, h, sx, sy, cx, cy, width, x0, y0; +l_int32 normval; +l_float32 minval, maxval, max, val, norm; +PIX *pixd, *pixt0, *pixt1; + + PROCNAME("kernelDisplayInPix"); + + if (!kel) + return (PIX *)ERROR_PTR("kernel not defined", procName, NULL); + + /* Normalize the max value to be 255 for display */ + kernelGetParameters(kel, &sy, &sx, &cy, &cx); + kernelGetMinMax(kel, &minval, &maxval); + max = L_MAX(maxval, -minval); + if (max == 0.0) + return (PIX *)ERROR_PTR("kernel elements all 0.0", procName, NULL); + norm = 255. / (l_float32)max; + + /* Handle the 1 element/pixel case; typically with large kernels */ + if (size == 1 && gthick == 0) { + pixd = pixCreate(sx, sy, 8); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + kernelGetElement(kel, i, j, &val); + normval = (l_int32)(norm * L_ABS(val)); + pixSetPixel(pixd, j, i, normval); + } + } + return pixd; + } + + /* Enforce the constraints for the grid line version */ + if (size < 17) { + L_WARNING("size < 17; setting to 17\n", procName); + size = 17; + } + if (size % 2 == 0) + size++; + if (gthick < 2) { + L_WARNING("grid thickness < 2; setting to 2\n", procName); + gthick = 2; + } + + w = size * sx + gthick * (sx + 1); + h = size * sy + gthick * (sy + 1); + pixd = pixCreate(w, h, 8); + + /* Generate grid lines */ + for (i = 0; i <= sy; i++) + pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), + w - 1, gthick / 2 + i * (size + gthick), + gthick, L_SET_PIXELS); + for (j = 0; j <= sx; j++) + pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, + gthick / 2 + j * (size + gthick), h - 1, + gthick, L_SET_PIXELS); + + /* Generate mask for each element */ + pixt0 = pixCreate(size, size, 1); + pixSetAll(pixt0); + + /* Generate crossed lines for origin pattern */ + pixt1 = pixCreate(size, size, 1); + width = size / 8; + pixRenderLine(pixt1, size / 2, (l_int32)(0.12 * size), + size / 2, (l_int32)(0.88 * size), + width, L_SET_PIXELS); + pixRenderLine(pixt1, (l_int32)(0.15 * size), size / 2, + (l_int32)(0.85 * size), size / 2, + width, L_FLIP_PIXELS); + pixRasterop(pixt1, size / 2 - width, size / 2 - width, + 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); + + /* Paste the patterns in */ + y0 = gthick; + for (i = 0; i < sy; i++) { + x0 = gthick; + for (j = 0; j < sx; j++) { + kernelGetElement(kel, i, j, &val); + normval = (l_int32)(norm * L_ABS(val)); + pixSetMaskedGeneral(pixd, pixt0, normval, x0, y0); + if (i == cy && j == cx) + pixPaintThroughMask(pixd, pixt1, x0, y0, 255 - normval); + x0 += size + gthick; + } + y0 += size + gthick; + } + + pixDestroy(&pixt0); + pixDestroy(&pixt1); + return pixd; +} + + +/*------------------------------------------------------------------------* + * Parse string to extract numbers * + *------------------------------------------------------------------------*/ +/*! + * \brief parseStringForNumbers() + * + * \param[in] str string containing numbers; not changed + * \param[in] seps string of characters that can be used between ints + * \return numa of numbers found, or NULL on error + * + *
+ * Notes:
+ *     (1) The numbers can be ints or floats.
+ * 
+ */ +NUMA * +parseStringForNumbers(const char *str, + const char *seps) +{ +char *newstr, *head; +char *tail = NULL; +l_float32 val; +NUMA *na; + + PROCNAME("parseStringForNumbers"); + + if (!str) + return (NUMA *)ERROR_PTR("str not defined", procName, NULL); + + newstr = stringNew(str); /* to enforce const-ness of str */ + na = numaCreate(0); + head = strtokSafe(newstr, seps, &tail); + val = atof(head); + numaAddNumber(na, val); + LEPT_FREE(head); + while ((head = strtokSafe(NULL, seps, &tail)) != NULL) { + val = atof(head); + numaAddNumber(na, val); + LEPT_FREE(head); + } + + LEPT_FREE(newstr); + return na; +} + + +/*------------------------------------------------------------------------* + * Simple parametric kernels * + *------------------------------------------------------------------------*/ +/*! + * \brief makeFlatKernel() + * + * \param[in] height, width + * \param[in] cy, cx origin of kernel + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) This is the same low-pass filtering kernel that is used
+ *          in the block convolution functions.
+ *      (2) The kernel origin (%cy, %cx) is typically placed as near
+ *          the center of the kernel as possible.  If height and
+ *          width are odd, then using %cy = height / 2 and
+ *          %cx = width / 2 places the origin at the exact center.
+ *      (3) This returns a normalized kernel.
+ * 
+ */ +L_KERNEL * +makeFlatKernel(l_int32 height, + l_int32 width, + l_int32 cy, + l_int32 cx) +{ +l_int32 i, j; +l_float32 normval; +L_KERNEL *kel; + + PROCNAME("makeFlatKernel"); + + if ((kel = kernelCreate(height, width)) == NULL) + return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); + kernelSetOrigin(kel, cy, cx); + normval = 1.0 / (l_float32)(height * width); + for (i = 0; i < height; i++) { + for (j = 0; j < width; j++) { + kernelSetElement(kel, i, j, normval); + } + } + + return kel; +} + + +/*! + * \brief makeGaussianKernel() + * + * \param[in] halfh sy = 2 * halfh + 1 + * \param[in] halfw sx = 2 * halfw + 1 + * \param[in] stdev standard deviation + * \param[in] max value at (cx,cy) + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) The kernel size (sx, sy) = (2 * %halfw + 1, 2 * %halfh + 1)
+ *      (2) The kernel center (cx, cy) = (%halfw, %halfh).
+ *      (3) %halfw and %halfh are typically equal, and
+ *          are typically several times larger than the standard deviation.
+ *      (4) If pixConvolve() is invoked with normalization (the sum of
+ *          kernel elements = 1.0), use 1.0 for max (or any number that's
+ *          not too small or too large).
+ * 
+ */ +L_KERNEL * +makeGaussianKernel(l_int32 halfh, + l_int32 halfw, + l_float32 stdev, + l_float32 max) +{ +l_int32 sx, sy, i, j; +l_float32 val; +L_KERNEL *kel; + + PROCNAME("makeGaussianKernel"); + + sx = 2 * halfw + 1; + sy = 2 * halfh + 1; + if ((kel = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); + kernelSetOrigin(kel, halfh, halfw); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + val = expf(-(l_float32)((i - halfh) * (i - halfh) + + (j - halfw) * (j - halfw)) / + (2. * stdev * stdev)); + kernelSetElement(kel, i, j, max * val); + } + } + + return kel; +} + + +/*! + * \brief makeGaussianKernelSep() + * + * \param[in] halfh sy = 2 * halfh + 1 + * \param[in] halfw sx = 2 * halfw + 1 + * \param[in] stdev standard deviation + * \param[in] max value at (cx,cy) + * \param[out] pkelx x part of kernel + * \param[out] pkely y part of kernel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See makeGaussianKernel() for description of input parameters.
+ *      (2) These kernels are constructed so that the result of both
+ *          normalized and un-normalized convolution will be the same
+ *          as when convolving with pixConvolve() using the full kernel.
+ *      (3) The trick for the un-normalized convolution is to have the
+ *          product of the two kernel elemets at (cx,cy) be equal to %max,
+ *          not max**2.  That's why %max for kely is 1.0.  If instead
+ *          we use sqrt(%max) for both, the results are slightly less
+ *          accurate, when compared to using the full kernel in
+ *          makeGaussianKernel().
+ * 
+ */ +l_ok +makeGaussianKernelSep(l_int32 halfh, + l_int32 halfw, + l_float32 stdev, + l_float32 max, + L_KERNEL **pkelx, + L_KERNEL **pkely) +{ + PROCNAME("makeGaussianKernelSep"); + + if (!pkelx || !pkely) + return ERROR_INT("&kelx and &kely not defined", procName, 1); + + *pkelx = makeGaussianKernel(0, halfw, stdev, max); + *pkely = makeGaussianKernel(halfh, 0, stdev, 1.0); + return 0; +} + + +/*! + * \brief makeDoGKernel() + * + * \param[in] halfh sy = 2 * halfh + 1 + * \param[in] halfw sx = 2 * halfw + 1 + * \param[in] stdev standard deviation of narrower gaussian + * \param[in] ratio of stdev for wide filter to stdev for narrow one + * \return kernel, or NULL on error + * + *
+ * Notes:
+ *      (1) The DoG (difference of gaussians) is a wavelet mother
+ *          function with null total sum.  By subtracting two blurred
+ *          versions of the image, it acts as a bandpass filter for
+ *          frequencies passed by the narrow gaussian but stopped
+ *          by the wide one.See:
+ *               http://en.wikipedia.org/wiki/Difference_of_Gaussians
+ *      (2) The kernel size (sx, sy) = (2 * halfw + 1, 2 * halfh + 1).
+ *      (3) The kernel center (cx, cy) = (halfw, halfh).
+ *      (4) %halfw and %halfh are typically equal, and are typically
+ *          several times larger than the standard deviation.
+ *      (5) %ratio is the ratio of standard deviations of the wide
+ *          to narrow gaussian.  It must be >= 1.0; 1.0 is a no-op.
+ *      (6) Because the kernel is a null sum, it must be invoked without
+ *          normalization in pixConvolve().
+ * 
+ */ +L_KERNEL * +makeDoGKernel(l_int32 halfh, + l_int32 halfw, + l_float32 stdev, + l_float32 ratio) +{ +l_int32 sx, sy, i, j; +l_float32 pi, squaredist, highnorm, lownorm, val; +L_KERNEL *kel; + + PROCNAME("makeDoGKernel"); + + sx = 2 * halfw + 1; + sy = 2 * halfh + 1; + if ((kel = kernelCreate(sy, sx)) == NULL) + return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); + kernelSetOrigin(kel, halfh, halfw); + + pi = 3.1415926535; + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + squaredist = (l_float32)((i - halfh) * (i - halfh) + + (j - halfw) * (j - halfw)); + highnorm = 1. / (2 * stdev * stdev); + lownorm = highnorm / (ratio * ratio); + val = (highnorm / pi) * expf(-(highnorm * squaredist)) + - (lownorm / pi) * expf(-(lownorm * squaredist)); + kernelSetElement(kel, i, j, val); + } + } + + return kel; +} diff --git a/3rdparty/hgOCR/leptonica/leptwin.c b/3rdparty/hgOCR/leptonica/leptwin.c new file mode 100644 index 00000000..72643a0b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/leptwin.c @@ -0,0 +1,368 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file leptwin.c + *
+ *
+ *    This file contains Leptonica routines needed only on Microsoft Windows
+ *
+ *    Currently it only contains one public function
+ *    (based on dibsectn.c by jmh, 03-30-98):
+ *
+ *      HBITMAP    pixGetWindowsHBITMAP(PIX *pix)
+ * 
+ */ + +#ifdef _WIN32 +#include +#include +#include "allheaders.h" +#include "leptwin.h" + +/* Macro to determine the number of bytes per line in the DIB bits. + * This accounts for DWORD alignment by adding 31 bits, + * then dividing by 32, then rounding up to the next highest + * count of 4-bytes. Then, we multiply by 4 to get the total byte count. */ +#define BYTESPERLINE(Width, BPP) ((l_int32)((((DWORD)(Width) * (DWORD)(BPP) + 31) >> 5)) << 2) + + +/* ********************************************************************** + DWORD DSImageBitsSize(LPBITMAPINFO pbmi) + + PARAMETERS: + LPBITMAPINFO - pointer to a BITMAPINFO describing a DIB + + RETURNS: + DWORD - the size, in bytes, of the DIB's image bits + + REMARKS: + Calculates and returns the size, in bytes, of the image bits for + the DIB described by the BITMAPINFO. +********************************************************************** */ +static DWORD +DSImageBitsSize(LPBITMAPINFO pbmi) +{ + switch(pbmi->bmiHeader.biCompression) + { + case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or + * CreateDIBSection with this pbmi */ + case BI_RLE4: + return pbmi->bmiHeader.biSizeImage; + break; + default: /* should not have to use "default" */ + case BI_RGB: + case BI_BITFIELDS: + return BYTESPERLINE(pbmi->bmiHeader.biWidth, \ + pbmi->bmiHeader.biBitCount * pbmi->bmiHeader.biPlanes) * + pbmi->bmiHeader.biHeight; + break; + } + return 0; +} + +/* ********************************************************************** + DWORD ImageBitsSize(HBITMAP hbitmap) + + PARAMETERS: + HBITMAP - hbitmap + + RETURNS: + DWORD - the size, in bytes, of the HBITMAP's image bits + + REMARKS: + Calculates and returns the size, in bytes, of the image bits for + the DIB described by the HBITMAP. +********************************************************************** */ +static DWORD +ImageBitsSize(HBITMAP hBitmap) +{ + DIBSECTION ds; + + GetObject(hBitmap, sizeof(DIBSECTION), &ds); + switch( ds.dsBmih.biCompression ) + { + case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or + * CreateDIBSection with this pbmi */ + case BI_RLE4: + return ds.dsBmih.biSizeImage; + break; + default: /* should not have to use "default" */ + case BI_RGB: + case BI_BITFIELDS: + return BYTESPERLINE(ds.dsBmih.biWidth, \ + ds.dsBmih.biBitCount * ds.dsBmih.biPlanes) * + ds.dsBmih.biHeight; + break; + } + return 0; +} + +/*! + * \brief setColormap(LPBITMAPINFO pbmi, PIXCMAP *cmap) + * + * \param[in] pbmi pointer to a BITMAPINFO describing a DIB + * \param[in] cmap leptonica colormap + * \return number of colors in cmap + */ +static int +setColormap(LPBITMAPINFO pbmi, + PIXCMAP *cmap) +{ +l_int32 i, nColors, rval, gval, bval; + + nColors = pixcmapGetCount(cmap); + for (i = 0; i < nColors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + pbmi->bmiColors[i].rgbRed = rval; + pbmi->bmiColors[i].rgbGreen = gval; + pbmi->bmiColors[i].rgbBlue = bval; + pbmi->bmiColors[i].rgbReserved = 0; + } + pbmi->bmiHeader.biClrUsed = nColors; + return nColors; +} + +/* ********************************************************************** + HBITMAP DSCreateBitmapInfo(l_int32 width, l_int32 height, l_int32 depth, + PIXCMAP *cmap) + + PARAMETERS: + l_int32 width - Desired width of the DIBSection + l_int32 height - Desired height of the DIBSection + l_int32 depth - Desired bit-depth of the DIBSection + PIXCMAP cmap - leptonica colormap for depths < 16 + + RETURNS: + LPBITMAPINFO - a ptr to BITMAPINFO of the desired size and bit-depth + NULL on failure + + REMARKS: + Creates a BITMAPINFO based on the criteria passed in as parameters. + +********************************************************************** */ +static LPBITMAPINFO +DSCreateBitmapInfo(l_int32 width, + l_int32 height, + l_int32 depth, + PIXCMAP *cmap) +{ +l_int32 nInfoSize; +LPBITMAPINFO pbmi; +LPDWORD pMasks; + + nInfoSize = sizeof(BITMAPINFOHEADER); + if( depth <= 8 ) + nInfoSize += sizeof(RGBQUAD) * (1 << depth); + if((depth == 16) || (depth == 32)) + nInfoSize += (3 * sizeof(DWORD)); + + /* Create the header big enough to contain color table and + * bitmasks if needed. */ + pbmi = (LPBITMAPINFO)malloc(nInfoSize); + if (!pbmi) + return NULL; + + ZeroMemory(pbmi, nInfoSize); + pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + pbmi->bmiHeader.biWidth = width; + pbmi->bmiHeader.biHeight = height; + pbmi->bmiHeader.biPlanes = 1; + pbmi->bmiHeader.biBitCount = depth; + + /* override below for 16 and 32 bpp */ + pbmi->bmiHeader.biCompression = BI_RGB; + + /* ?? not sure if this is right? */ + pbmi->bmiHeader.biSizeImage = DSImageBitsSize(pbmi); + + pbmi->bmiHeader.biXPelsPerMeter = 0; + pbmi->bmiHeader.biYPelsPerMeter = 0; + pbmi->bmiHeader.biClrUsed = 0; /* override below */ + pbmi->bmiHeader.biClrImportant = 0; + + switch(depth) + { + case 24: + /* 24bpp requires no special handling */ + break; + case 16: + /* if it's 16bpp, fill in the masks and override the + * compression. These are the default masks -- you + * could change them if needed. */ + pMasks = (LPDWORD)(pbmi->bmiColors); + pMasks[0] = 0x00007c00; + pMasks[1] = 0x000003e0; + pMasks[2] = 0x0000001f; + pbmi->bmiHeader.biCompression = BI_BITFIELDS; + break; + case 32: + /* if it's 32 bpp, fill in the masks and override + * the compression */ + pMasks = (LPDWORD)(pbmi->bmiColors); + /*pMasks[0] = 0x00ff0000; */ + /*pMasks[1] = 0x0000ff00; */ + /*pMasks[2] = 0x000000ff; */ + pMasks[0] = 0xff000000; + pMasks[1] = 0x00ff0000; + pMasks[2] = 0x0000ff00; + + pbmi->bmiHeader.biCompression = BI_BITFIELDS; + break; + case 8: + case 4: + case 1: + setColormap(pbmi, cmap); + break; + } + return pbmi; +} + +/* ********************************************************************** + HBITMAP DSCreateDIBSection(l_int32 width, l_int32 height, l_int32 depth, + PIXCMAP *cmap) + + PARAMETERS: + l_int32 width - Desired width of the DIBSection + l_int32 height - Desired height of the DIBSection + l_int32 depth - Desired bit-depth of the DIBSection + PIXCMAP cmap - leptonica colormap for depths < 16 + + RETURNS: + HBITMAP - a DIBSection HBITMAP of the desired size and bit-depth + NULL on failure + + REMARKS: + Creates a DIBSection based on the criteria passed in as parameters. + +********************************************************************** */ +static HBITMAP +DSCreateDIBSection(l_int32 width, + l_int32 height, + l_int32 depth, + PIXCMAP *cmap) +{ +HBITMAP hBitmap; +l_int32 nInfoSize; +LPBITMAPINFO pbmi; +HDC hRefDC; +LPBYTE pBits; + + pbmi = DSCreateBitmapInfo (width, height, depth, cmap); + if (!pbmi) + return NULL; + + hRefDC = GetDC(NULL); + hBitmap = CreateDIBSection(hRefDC, pbmi, DIB_RGB_COLORS, + (void **) &pBits, NULL, 0); + nInfoSize = GetLastError(); + ReleaseDC(NULL, hRefDC); + free(pbmi); + + return hBitmap; +} + + +/*! + * \brief pixGetWindowsHBITMAP() + * + * \param[in] pix + * \return Windows hBitmap, or NULL on error + * + *
+ * Notes:
+ *      (1) It's the responsibility of the caller to destroy the
+ *          returned hBitmap with a call to DeleteObject (or with
+ *          something that eventually calls DeleteObject).
+ * 
+ */ +HBITMAP +pixGetWindowsHBITMAP(PIX *pix) +{ +l_int32 width, height, depth; +l_uint32 *data; +HBITMAP hBitmap = NULL; +BITMAP bm; +DWORD imageBitsSize; +PIX *pixt = NULL; +PIXCMAP *cmap; + + PROCNAME("pixGetWindowsHBITMAP"); + if (!pix) + return (HBITMAP)ERROR_PTR("pix not defined", procName, NULL); + + pixGetDimensions(pix, &width, &height, &depth); + cmap = pixGetColormap(pix); + + if (depth == 24) depth = 32; + if (depth == 2) { + pixt = pixConvert2To8(pix, 0, 85, 170, 255, TRUE); + if (!pixt) + return (HBITMAP)ERROR_PTR("unable to convert pix from 2bpp to 8bpp", + procName, NULL); + depth = pixGetDepth(pixt); + cmap = pixGetColormap(pixt); + } + + if (depth < 16) { + if (!cmap) + cmap = pixcmapCreateLinear(depth, 1< + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +LEPT_DLL extern HBITMAP pixGetWindowsHBITMAP( PIX *pixs ); + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* LEPTONICA_LEPTWIN_H */ +#endif /* _WIN32 */ diff --git a/3rdparty/hgOCR/leptonica/libversions.c b/3rdparty/hgOCR/leptonica/libversions.c new file mode 100644 index 00000000..cbad4fa0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/libversions.c @@ -0,0 +1,204 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file libversions.c + *
+ *
+ *       Image library version number
+ *           char      *getImagelibVersions()
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +#if HAVE_LIBGIF +#include "gif_lib.h" +#endif + +#if HAVE_LIBJPEG +/* jpeglib.h includes jconfig.h, which makes the error of setting + * #define HAVE_STDLIB_H + * which conflicts with config_auto.h (where it is set to 1) and results + * for some gcc compiler versions in a warning. The conflict is harmless + * but we suppress it by undefining the variable. */ +#undef HAVE_STDLIB_H +#include "jpeglib.h" +#include "jerror.h" +#endif + +#if HAVE_LIBPNG +#include "png.h" +#endif + +#if HAVE_LIBTIFF +#include "tiffio.h" +#endif + +#if HAVE_LIBZ +#include "zlib.h" +#endif + +#if HAVE_LIBWEBP +#include "webp/encode.h" +#endif + +#if HAVE_LIBJP2K +#ifdef LIBJP2K_HEADER +#include LIBJP2K_HEADER +#else +#include +#endif +#endif + + +/*---------------------------------------------------------------------* + * Image Library Version number * + *---------------------------------------------------------------------*/ +/*! + * \brief getImagelibVersions() + * + *
+ * Notes:
+ *      (1) This returns a string of version numbers; e.g.,
+ *            libgif 5.0.3
+ *            libjpeg 8b (libjpeg-turbo 1.3.0)
+ *            libpng 1.4.3
+ *            libtiff 3.9.5
+ *            zlib 1.2.5
+ *            libwebp 0.3.0
+ *            libopenjp2 2.1.0
+ *      (2) The caller must free the memory.
+ * 
+ */ +char * +getImagelibVersions() +{ +char buf[128]; +l_int32 first = TRUE; +char *versionNumP; +char *nextTokenP; +char *versionStrP = NULL; + +#if HAVE_LIBGIF + first = FALSE; + stringJoinIP(&versionStrP, "libgif "); + #ifdef GIFLIB_MAJOR + snprintf(buf, sizeof(buf), "%d.%d.%d", GIFLIB_MAJOR, GIFLIB_MINOR, + GIFLIB_RELEASE); + #else + stringCopy(buf, "4.1.6(?)", sizeof(buf)); + #endif + stringJoinIP(&versionStrP, buf); +#endif /* HAVE_LIBGIF */ + +#if HAVE_LIBJPEG + { + struct jpeg_compress_struct cinfo; + struct jpeg_error_mgr err; + char buffer[JMSG_LENGTH_MAX]; + cinfo.err = jpeg_std_error(&err); + err.msg_code = JMSG_VERSION; + (*err.format_message) ((j_common_ptr ) &cinfo, buffer); + + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "libjpeg "); + versionNumP = strtokSafe(buffer, " ", &nextTokenP); + stringJoinIP(&versionStrP, versionNumP); + LEPT_FREE(versionNumP); + + #if defined(LIBJPEG_TURBO_VERSION) + /* To stringify the result of expansion of a macro argument, + * you must use two levels of macros. See: + * https://gcc.gnu.org/onlinedocs/cpp/Stringification.html */ + #define l_xstr(s) l_str(s) + #define l_str(s) #s + snprintf(buf, sizeof(buf), " (libjpeg-turbo %s)", + l_xstr(LIBJPEG_TURBO_VERSION)); + stringJoinIP(&versionStrP, buf); + #endif /* LIBJPEG_TURBO_VERSION */ + } +#endif /* HAVE_LIBJPEG */ + +#if HAVE_LIBPNG + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "libpng "); + stringJoinIP(&versionStrP, png_get_libpng_ver(NULL)); +#endif /* HAVE_LIBPNG */ + +#if HAVE_LIBTIFF + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "libtiff "); + versionNumP = strtokSafe((char *)TIFFGetVersion(), " \n", &nextTokenP); + LEPT_FREE(versionNumP); + versionNumP = strtokSafe(NULL, " \n", &nextTokenP); + LEPT_FREE(versionNumP); + versionNumP = strtokSafe(NULL, " \n", &nextTokenP); + stringJoinIP(&versionStrP, versionNumP); + LEPT_FREE(versionNumP); +#endif /* HAVE_LIBTIFF */ + +#if HAVE_LIBZ + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "zlib "); + stringJoinIP(&versionStrP, zlibVersion()); +#endif /* HAVE_LIBZ */ + +#if HAVE_LIBWEBP + { + l_int32 val; + char buf[32]; + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "libwebp "); + val = WebPGetEncoderVersion(); + snprintf(buf, sizeof(buf), "%d.%d.%d", val >> 16, (val >> 8) & 0xff, + val & 0xff); + stringJoinIP(&versionStrP, buf); + } +#endif /* HAVE_LIBWEBP */ + +#if HAVE_LIBJP2K + { + const char *version; + if (!first) stringJoinIP(&versionStrP, " : "); + first = FALSE; + stringJoinIP(&versionStrP, "libopenjp2 "); + version = opj_version(); + stringJoinIP(&versionStrP, version); + } +#endif /* HAVE_LIBJP2K */ + + return versionStrP; +} diff --git a/3rdparty/hgOCR/leptonica/list.c b/3rdparty/hgOCR/leptonica/list.c new file mode 100644 index 00000000..87eb24ea --- /dev/null +++ b/3rdparty/hgOCR/leptonica/list.c @@ -0,0 +1,812 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file list.c + *
+ *
+ *      Inserting and removing elements
+ *
+ *           void      listDestroy()
+ *           DLLIST   *listAddToHead()
+ *           l_int32   listAddToTail()
+ *           l_int32   listInsertBefore()
+ *           l_int32   listInsertAfter()
+ *           void     *listRemoveElement()
+ *           void     *listRemoveFromHead()
+ *           void     *listRemoveFromTail()
+ *
+ *      Other list operations
+ *
+ *           DLLIST   *listFindElement()
+ *           DLLIST   *listFindTail()
+ *           l_int32   listGetCount()
+ *           l_int32   listReverse()
+ *           DLLIST   *listJoin()
+ *
+ *      Lists are much harder to handle than arrays.  There is
+ *      more overhead for the programmer, both cognitive and
+ *      codewise, and more likelihood that an error can be made.
+ *      For that reason, lists should only be used when it is
+ *      inefficient to use arrays, such as when elements are
+ *      routinely inserted or deleted from inside arrays whose
+ *      average size is greater than about 10.
+ *
+ *      A list of data structures can be implemented in a number
+ *      of ways.  The two most popular are:
+ *
+ *         (1) The list can be composed of a linked list of
+ *             pointer cells ("cons cells"), where the data structures
+ *             are hung off the cells.  This is more difficult
+ *             to use because you have to keep track of both
+ *             your hanging data and the cell structures.
+ *             It requires 3 pointers for every data structure
+ *             that is put in a list.  There is no problem
+ *             cloning (using reference counts) for structures that
+ *             are put in such a list.  We implement lists by this
+ *             method here.
+ *
+ *         (2) The list pointers can be inserted directly into
+ *             the data structures.  This is easy to implement
+ *             and easier to use, but it adds 2 ptrs of overhead
+ *             to every data structure in which the ptrs are embedded.
+ *             It also requires special care not to put the ptrs
+ *             in any data that is cloned with a reference count;
+ *             else your lists will break.
+ *
+ *      Writing C code that uses list pointers explicitly to make
+ *      and alter lists is difficult and prone to error.
+ *      Consequently, a generic list utility that handles lists
+ *      of arbitrary objects and doesn't force the programmer to
+ *      touch the "next" and "prev" pointers, is quite useful.
+ *      Such functions are provided here.   However, the usual
+ *      situation requires traversing a list and applying some
+ *      function to one or more of the list elements.  Macros
+ *      for traversing the list are, in general, necessary, to
+ *      achieve the goal of invisibly handling all "next" and "prev"
+ *      pointers in generic lists.  We provide macros for
+ *      traversing a list in both forward and reverse directions.
+ *
+ *      Because of the typing in C, implementation of a general
+ *      list utility requires casting.  If macros are used, the
+ *      casting can be done implicitly; otherwise, using functions,
+ *      some of the casts must be explicit.  Fortunately, this
+ *      can be implemented with void* so the programmer using
+ *      the library will not have to make any casts!  (Unless you
+ *      compile with g++, in which case the rules on implicit
+ *      conversion are more strict.)
+ *
+ *      For example, to add an arbitrary data structure foo to the
+ *      tail of a list, use
+ *             listAddToTail(&head, &tail, pfoo);
+ *      where head and tail are list cell ptrs and pfoo is
+ *      a pointer to the foo object.
+ *      And to remove an arbitrary data structure foo from a
+ *      list, when you know the list cell element it is hanging from,
+ *      use
+ *             pfoo = listRemoveElement(&head, elem)
+ *      where head and elem are list cell ptrs and pfoo is a pointer
+ *      to the foo object.  No casts are required for foo in
+ *      either direction in ANSI C.  (However, casts are
+ *      required for ANSI C++).
+ *
+ *      We use lists that are composed of doubly-linked
+ *      cells with data structures hanging off the cells.
+ *      We use doubly-linked cells to simplify insertion
+ *      and deletion, and to allow operations to proceed in either
+ *      direction along the list.  With doubly-linked lists,
+ *      it is tempting to make them circular, by setting head->prev
+ *      to the tail of the list and tail->next to the head.
+ *      The circular list costs nothing extra in storage, and
+ *      allows operations to proceed from either end of the list
+ *      with equal speed.  However, the circular link adds
+ *      cognitive overhead for the application programmer in
+ *      general, and it greatly complicates list traversal when
+ *      arbitrary list elements can be added or removed as you
+ *      move through.  It can be done, but in the spirit of
+ *      simplicity, we avoid the temptation.  The price to be paid
+ *      is the extra cost to find the tail of a list -- a full
+ *      traversal -- before the tail can be used.  This is a
+ *      cheap price to pay to avoid major headaches and buggy code.
+ *
+ *      When you are only applying some function to each element
+ *      in a list, you can go either forwards or backwards.
+ *      To run through a list forwards, use:
+ * \code
+ *          for (elem = head; elem; elem = nextelem) {
+ *              nextelem = elem->next;   (in case we destroy elem)
+ *              data>
+ *          }
+ * \endcode
+ *      To run through a list backwards, find the tail and use:
+ *
+ *          for (elem = tail; elem; elem = prevelem) {
+ #              prevelem = elem->prev;  (in case we destroy elem)
+ *              data>
+ *          }
+ *
+ *      Even though these patterns are very simple, they are so common
+ *      that we've provided macros for them in list.h.  Using the
+ *      macros, this becomes:
+ * \code
+ *          L_BEGIN_LIST_FORWARD(head, elem)
+ *              data>
+ *          L_END_LIST
+ *
+ *          L_BEGIN_LIST_REVERSE(tail, elem)
+ *              data>
+ *          L_END_LIST
+ * \endcode
+ *      Note again that with macros, the application programmer does
+ *      not need to refer explicitly to next and prev fields.  Also,
+ *      in the reverse case, note that we do not explicitly
+ *      show the head of the list.  However, the head of the list
+ *      is always in scope, and functions can be called within the
+ *      iterator that change the head.
+ *
+ *      Some special cases are simpler.  For example, when
+ *      removing all items from the head of the list, you can use
+ * \code
+ *          while (head) {
+ *              obj = listRemoveFromHead(&head);
+ *              
+ *          }
+ * \endcode
+ *      Removing successive elements from the tail is equally simple:
+ * \code
+ *          while (tail) {
+ *              obj = listRemoveFromTail(&head, &tail);
+ *              
+ *          }
+ * \endcode
+ *      When removing an arbitrary element from a list, use
+ * \code
+ *              obj = listRemoveElement(&head, elem);
+ * \endcode
+ *      All the listRemove*() functions hand you the object,
+ *      destroy the list cell to which it was attached, and
+ *      reset the list pointers if necessary.
+ *
+ *      Several other list operations, that do not involve
+ *      inserting or removing objects, are also provided.
+ *      The function listFindElement() locates a list pointer
+ *      by matching the object hanging on it to a given
+ *      object.  The function listFindTail() gets a handle
+ *      to the tail list ptr, allowing backwards traversals of
+ *      the list.  listGetCount() gives the number of elements
+ *      in a list.  Functions that reverse a list and concatenate
+ *      two lists are also provided.
+ *
+ *      These functions can be modified for efficiency in the
+ *      situation where there is a large amount of creation and
+ *      destruction of list cells.  If millions of cells are
+ *      made and destroyed, but a relatively small number are
+ *      around at any time, the list cells can be stored for
+ *      later re-use in a stack (see the generic stack functions
+ *      in stack.c).
+ * 
+ */ + +#include +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Inserting and removing elements * + *---------------------------------------------------------------------*/ +/*! + * \brief listDestroy() + * + * \param[in,out] phead head of list; will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) This only destroys the cons cells.  Before destroying
+ *          the list, it is necessary to remove all data and set the
+ *          data pointers in each cons cell to NULL.
+ *      (2) listDestroy() will give a warning message for each data
+ *          ptr that is not NULL.
+ * 
+ */ +void +listDestroy(DLLIST **phead) +{ +DLLIST *elem, *next, *head; + + PROCNAME("listDestroy"); + + if (phead == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((head = *phead) == NULL) + return; + + for (elem = head; elem; elem = next) { + if (elem->data) + L_WARNING("list data ptr is not null\n", procName); + next = elem->next; + LEPT_FREE(elem); + } + *phead = NULL; + return; +} + + +/*! + * \brief listAddToHead() + * + * \param[in,out] phead [optional] input head + * \param[in] data void* ptr, to be added + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This makes a new cell, attaches %data, and adds the
+ *          cell to the head of the list.
+ *      (2) When consing from NULL, be sure to initialize head to NULL
+ *          before calling this function.
+ * 
+ */ +l_ok +listAddToHead(DLLIST **phead, + void *data) +{ +DLLIST *cell, *head; + + PROCNAME("listAddToHead"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + head = *phead; + if (!data) + return ERROR_INT("data not defined", procName, 1); + + cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); + cell->data = data; + if (!head) { /* start the list; initialize the ptrs */ + cell->prev = NULL; + cell->next = NULL; + } else { + cell->prev = NULL; + cell->next = head; + head->prev = cell; + } + *phead = cell; + return 0; +} + + +/*! + * \brief listAddToTail() + * + * \param[in,out] phead [may be updated], can be NULL + * \param[in,out] ptail [updated], can be NULL + * \param[in] data void* ptr, to be hung on tail cons cell + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This makes a new cell, attaches %data, and adds the
+ *          cell to the tail of the list.
+ *      (2) &head is input to allow the list to be "cons'd" up from NULL.
+ *      (3) &tail is input to allow the tail to be updated
+ *          for efficient sequential operation with this function.
+ *      (4) We assume that if *phead and/or *ptail are not NULL,
+ *          then they are valid addresses.  Therefore:
+ *           (a) when consing from NULL, be sure to initialize both
+ *               head and tail to NULL.
+ *           (b) when tail == NULL for an existing list, the tail
+ *               will be found and updated.
+ * 
+ */ +l_ok +listAddToTail(DLLIST **phead, + DLLIST **ptail, + void *data) +{ +DLLIST *cell, *head, *tail; + + PROCNAME("listAddToTail"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + head = *phead; + if (!ptail) + return ERROR_INT("&tail not defined", procName, 1); + if (!data) + return ERROR_INT("data not defined", procName, 1); + + cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); + cell->data = data; + if (!head) { /* Start the list and initialize the ptrs. *ptail + * should also have been initialized to NULL */ + cell->prev = NULL; + cell->next = NULL; + *phead = cell; + *ptail = cell; + } else { + if ((tail = *ptail) == NULL) + tail = listFindTail(head); + cell->prev = tail; + cell->next = NULL; + tail->next = cell; + *ptail = cell; + } + + return 0; +} + + +/*! + * \brief listInsertBefore() + * + * \param[in,out] phead [optional] input head + * \param[in] elem list element to be inserted in front of; + * must be NULL if head is NULL + * \param[in] data void* address, to be added + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This can be called on a null list, in which case both
+ *          head and elem must be null.
+ *      (2) If you are searching through a list, looking for a condition
+ *          to add an element, you can do something like this:
+ * \code
+ *            L_BEGIN_LIST_FORWARD(head, elem)
+ *                
+ *                listInsertBefore(&head, elem, data);
+ *            L_END_LIST
+ * \endcode
+ * 
+ */ +l_ok +listInsertBefore(DLLIST **phead, + DLLIST *elem, + void *data) +{ +DLLIST *cell, *head; + + PROCNAME("listInsertBefore"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + head = *phead; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if ((!head && elem) || (head && !elem)) + return ERROR_INT("head and elem not consistent", procName, 1); + + /* New cell to insert */ + cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); + cell->data = data; + if (!head) { /* start the list; initialize the ptrs */ + cell->prev = NULL; + cell->next = NULL; + *phead = cell; + } else if (head == elem) { /* insert before head of list */ + cell->prev = NULL; + cell->next = head; + head->prev = cell; + *phead = cell; + } else { /* insert before elem and after head of list */ + cell->prev = elem->prev; + cell->next = elem; + elem->prev->next = cell; + elem->prev = cell; + } + return 0; +} + + +/*! + * \brief listInsertAfter() + * + * \param[in,out] phead [optional] input head + * \param[in] elem list element to be inserted after; + * must be NULL if head is NULL + * \param[in] data void* ptr, to be added + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This can be called on a null list, in which case both
+ *          head and elem must be null.  The head is included
+ *          in the call to allow "consing" up from NULL.
+ *      (2) If you are searching through a list, looking for a condition
+ *          to add an element, you can do something like this:
+ * \code
+ *            L_BEGIN_LIST_FORWARD(head, elem)
+ *                
+ *                listInsertAfter(&head, elem, data);
+ *            L_END_LIST
+ * \endcode
+ * 
+ */ +l_ok +listInsertAfter(DLLIST **phead, + DLLIST *elem, + void *data) +{ +DLLIST *cell, *head; + + PROCNAME("listInsertAfter"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + head = *phead; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if ((!head && elem) || (head && !elem)) + return ERROR_INT("head and elem not consistent", procName, 1); + + /* New cell to insert */ + cell = (DLLIST *)LEPT_CALLOC(1, sizeof(DLLIST)); + cell->data = data; + if (!head) { /* start the list; initialize the ptrs */ + cell->prev = NULL; + cell->next = NULL; + *phead = cell; + } else if (elem->next == NULL) { /* insert after last */ + cell->prev = elem; + cell->next = NULL; + elem->next = cell; + } else { /* insert after elem and before the end */ + cell->prev = elem; + cell->next = elem->next; + elem->next->prev = cell; + elem->next = cell; + } + return 0; +} + + +/*! + * \brief listRemoveElement() + * + * \param[in,out] phead input head; can be changed + * \param[in] elem list element to be removed + * \return data void* struct on cell + * + *
+ * Notes:
+ *      (1) in ANSI C, it is not necessary to cast return to actual type; e.g.,
+ *             pix = listRemoveElement(&head, elem);
+ *          but in ANSI C++, it is necessary to do the cast:
+ *             pix = (Pix *)listRemoveElement(&head, elem);
+ * 
+ */ +void * +listRemoveElement(DLLIST **phead, + DLLIST *elem) +{ +void *data; +DLLIST *head; + + PROCNAME("listRemoveElement"); + + if (!phead) + return (void *)ERROR_PTR("&head not defined", procName, NULL); + head = *phead; + if (!head) + return (void *)ERROR_PTR("head not defined", procName, NULL); + if (!elem) + return (void *)ERROR_PTR("elem not defined", procName, NULL); + + data = elem->data; + + if (head->next == NULL) { /* only one */ + if (elem != head) + return (void *)ERROR_PTR("elem must be head", procName, NULL); + *phead = NULL; + } else if (head == elem) { /* first one */ + elem->next->prev = NULL; + *phead = elem->next; + } else if (elem->next == NULL) { /* last one */ + elem->prev->next = NULL; + } else { /* neither the first nor the last one */ + elem->next->prev = elem->prev; + elem->prev->next = elem->next; + } + + LEPT_FREE(elem); + return data; +} + + +/*! + * \brief listRemoveFromHead() + * + * \param[in,out] phead head of list; updated + * \return data void* struct on cell, or NULL on error + * + *
+ * Notes:
+ *      (1) in ANSI C, it is not necessary to cast return to actual type; e.g.,
+ *            pix = listRemoveFromHead(&head);
+ *          but in ANSI C++, it is necessary to do the cast; e.g.,
+ *            pix = (Pix *)listRemoveFromHead(&head);
+ * 
+ */ +void * +listRemoveFromHead(DLLIST **phead) +{ +DLLIST *head; +void *data; + + PROCNAME("listRemoveFromHead"); + + if (!phead) + return (void *)ERROR_PTR("&head not defined", procName, NULL); + if ((head = *phead) == NULL) + return (void *)ERROR_PTR("head not defined", procName, NULL); + + if (head->next == NULL) { /* only one */ + *phead = NULL; + } else { + head->next->prev = NULL; + *phead = head->next; + } + + data = head->data; + LEPT_FREE(head); + return data; +} + + +/*! + * \brief listRemoveFromTail() + * + * \param[in,out] phead list head must NOT be NULL; may be changed + * \param[in,out] ptail list tail may be NULL; always updated + * \return data void* struct on cell or NULL on error + * + *
+ * Notes:
+ *      (1) We include &head so that it can be set to NULL if
+ *          if the only element in the list is removed.
+ *      (2) The function is relying on the fact that if tail is
+ *          not NULL, then is is a valid address.  You can use
+ *          this function with tail == NULL for an existing list, in
+ *          which case  the tail is found and updated, and the
+ *          removed element is returned.
+ *      (3) In ANSI C, it is not necessary to cast return to actual type; e.g.,
+ *            pix = listRemoveFromTail(&head, &tail);
+ *          but in ANSI C++, it is necessary to do the cast; e.g.,
+ *            pix = (Pix *)listRemoveFromTail(&head, &tail);
+ * 
+ */ +void * +listRemoveFromTail(DLLIST **phead, + DLLIST **ptail) +{ +DLLIST *head, *tail; +void *data; + + PROCNAME("listRemoveFromTail"); + + if (!phead) + return (void *)ERROR_PTR("&head not defined", procName, NULL); + if ((head = *phead) == NULL) + return (void *)ERROR_PTR("head not defined", procName, NULL); + if (!ptail) + return (void *)ERROR_PTR("&tail not defined", procName, NULL); + if ((tail = *ptail) == NULL) + tail = listFindTail(head); + + if (head->next == NULL) { /* only one */ + *phead = NULL; + *ptail = NULL; + } else { + tail->prev->next = NULL; + *ptail = tail->prev; + } + + data = tail->data; + LEPT_FREE(tail); + return data; +} + + + +/*---------------------------------------------------------------------* + * Other list operations * + *---------------------------------------------------------------------*/ +/*! + * \brief listFindElement() + * + * \param[in] head list head + * \param[in] data void* address, to be searched for + * \return cell the containing cell, or NULL if not found or on error + * + *
+ * Notes:
+ *      (1) This returns a ptr to the cell, which is still embedded in
+ *          the list.
+ *      (2) This handle and the attached data have not been copied or
+ *          reference counted, so they must not be destroyed.  This
+ *          violates our basic rule that every handle returned from a
+ *          function is owned by that function and must be destroyed,
+ *          but if rules aren't there to be broken, why have them?
+ * 
+ */ +DLLIST * +listFindElement(DLLIST *head, + void *data) +{ +DLLIST *cell; + + PROCNAME("listFindElement"); + + if (!head) + return (DLLIST *)ERROR_PTR("head not defined", procName, NULL); + if (!data) + return (DLLIST *)ERROR_PTR("data not defined", procName, NULL); + + for (cell = head; cell; cell = cell->next) { + if (cell->data == data) + return cell; + } + + return NULL; +} + + +/*! + * \brief listFindTail() + * + * \param[in] head + * \return tail, or NULL on error + */ +DLLIST * +listFindTail(DLLIST *head) +{ +DLLIST *cell; + + PROCNAME("listFindTail"); + + if (!head) + return (DLLIST *)ERROR_PTR("head not defined", procName, NULL); + + for (cell = head; cell; cell = cell->next) { + if (cell->next == NULL) + return cell; + } + + return (DLLIST *)ERROR_PTR("tail not found !!", procName, NULL); +} + + +/*! + * \brief listGetCount() + * + * \param[in] head of list + * \return number of elements; 0 if no list or on error + */ +l_int32 +listGetCount(DLLIST *head) +{ +l_int32 count; +DLLIST *elem; + + PROCNAME("listGetCount"); + + if (!head) + return ERROR_INT("head not defined", procName, 0); + + count = 0; + for (elem = head; elem; elem = elem->next) + count++; + + return count; +} + + +/*! + * \brief listReverse() + * + * \param[in,out] phead list head; may be changed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This reverses the list in-place.
+ * 
+ */ +l_ok +listReverse(DLLIST **phead) +{ +void *obj; /* whatever */ +DLLIST *head, *rhead; + + PROCNAME("listReverse"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + if ((head = *phead) == NULL) + return ERROR_INT("head not defined", procName, 1); + + rhead = NULL; + while (head) { + obj = listRemoveFromHead(&head); + listAddToHead(&rhead, obj); + } + + *phead = rhead; + return 0; +} + + +/*! + * \brief listJoin() + * + * \param[in,out] phead1 head of first list; may be changed + * \param[in,out] phead2 head of second list; to be nulled + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The concatenated list is returned with head1 as the new head.
+ *      (2) Both input ptrs must exist, though either can have the value NULL.
+ * 
+ */ +l_ok +listJoin(DLLIST **phead1, + DLLIST **phead2) +{ +void *obj; +DLLIST *head1, *head2, *tail1; + + PROCNAME("listJoin"); + + if (!phead1) + return ERROR_INT("&head1 not defined", procName, 1); + if (!phead2) + return ERROR_INT("&head2 not defined", procName, 1); + + /* If no list2, just return list1 unchanged */ + if ((head2 = *phead2) == NULL) + return 0; + + /* If no list1, just return list2 */ + if ((head1 = *phead1) == NULL) { + *phead1 = head2; + *phead2 = NULL; + return 0; + } + + /* General case for concatenation into list 1 */ + tail1 = listFindTail(head1); + while (head2) { + obj = listRemoveFromHead(&head2); + listAddToTail(&head1, &tail1, obj); + } + *phead2 = NULL; + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/list.h b/3rdparty/hgOCR/leptonica/list.h new file mode 100644 index 00000000..d207e79f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/list.h @@ -0,0 +1,90 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +#ifndef LEPTONICA_LIST_H +#define LEPTONICA_LIST_H + +/*! + * \file list.h + * + *
+ *       Cell for double-linked lists
+ *
+ *       This allows composition of a list of cells with
+ *           prev, next and data pointers.  Generic data
+ *           structures hang on the list cell data pointers.
+ *
+ *       The list is not circular because that would add much
+ *           complexity in traversing the list under general
+ *           conditions where list cells can be added and removed.
+ *           The only disadvantage of not having the head point to
+ *           the last cell is that the list must be traversed to
+ *           find its tail.  However, this traversal is fast, and
+ *           the listRemoveFromTail() function updates the tail
+ *           so there is no searching overhead with repeated use.
+ *
+ *       The list macros are used to run through a list, and their
+ *       use is encouraged.  They are invoked, e.g., as
+ *
+ *             DLLIST  *head, *elem;
+ *             ...
+ *             L_BEGIN_LIST_FORWARD(head, elem)
+ *                 data >
+ *             L_END_LIST
+ * 
+ */ + +struct DoubleLinkedList +{ + struct DoubleLinkedList *prev; + struct DoubleLinkedList *next; + void *data; +}; +typedef struct DoubleLinkedList DLLIST; + + + /*! Simple list traverse macro - forward */ +#define L_BEGIN_LIST_FORWARD(head, element) \ + { \ + DLLIST *_leptvar_nextelem_; \ + for ((element) = (head); (element); (element) = _leptvar_nextelem_) { \ + _leptvar_nextelem_ = (element)->next; + + + /*! Simple list traverse macro - reverse */ +#define L_BEGIN_LIST_REVERSE(tail, element) \ + { \ + DLLIST *_leptvar_prevelem_; \ + for ((element) = (tail); (element); (element) = _leptvar_prevelem_) { \ + _leptvar_prevelem_ = (element)->prev; + + + /*! Simple list traverse macro - end of a list traverse */ +#define L_END_LIST }} + + +#endif /* LEPTONICA_LIST_H */ diff --git a/3rdparty/hgOCR/leptonica/map.c b/3rdparty/hgOCR/leptonica/map.c new file mode 100644 index 00000000..71b39230 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/map.c @@ -0,0 +1,260 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file map.c + *
+ *
+ *  This is an interface for map and set functions, based on using
+ *  red-black binary search trees.  Because these trees are sorted,
+ *  they are O(nlogn) to build.  They allow logn insertion, find
+ *  and deletion of elements.
+ *
+ *  Both the map and set are ordered by key value, with unique keys.
+ *  For the map, the elements are key/value pairs.
+ *  For the set we only store unique, ordered keys, and the value
+ *  (set to 0 in the implementation) is ignored.
+ *
+ *  The keys for the map and set can be any of the three types in the
+ *  l_rbtree_keytype enum.  The values stored can be any of the four
+ *  types in the rb_type union.
+ *
+ *  In-order forward and reverse iterators are provided for maps and sets.
+ *  To forward iterate over the map for any type of key (in this example,
+ *  uint32), extracting integer values:
+ *
+ *      L_AMAP  *m = l_amapCreate(L_UINT_TYPE);
+ *      [add elements to the map ...]
+ *      L_AMAP_NODE  *n = l_amapGetFirst(m);
+ *      while (n) {
+ *          l_int32 val = n->value.itype;
+ *          // do something ...
+ *          n = l_amapGetNext(n);
+ *      }
+ *
+ *  If the nodes are deleted during the iteration:
+ *
+ *      L_AMAP  *m = l_amapCreate(L_UINT_TYPE);
+ *      [add elements to the map ...]
+ *      L_AMAP_NODE  *n = l_amapGetFirst(m);
+ *      L_AMAP_NODE  *nn;
+ *      while (n) {
+ *          nn = l_amapGetNext(n);
+ *          l_int32 val = n->value.itype;
+ *          l_uint32 key = n->key.utype;
+ *          // do something ...
+ *          l_amapDelete(m, n->key);
+ *          n = nn;
+ *      }
+ *
+ *  See prog/maptest.c and prog/settest.c for more examples of usage.
+ *
+ *  Interface to (a) map using a general key and storing general values
+ *           L_AMAP        *l_amapCreate()
+ *           RB_TYPE       *l_amapFind()
+ *           void           l_amapInsert()
+ *           void           l_amapDelete()
+ *           void           l_amapDestroy()
+ *           L_AMAP_NODE   *l_amapGetFirst()
+ *           L_AMAP_NODE   *l_amapGetNext()
+ *           L_AMAP_NODE   *l_amapGetLast()
+ *           L_AMAP_NODE   *l_amapGetPrev()
+ *           l_int32        l_amapSize()
+ *
+ *  Interface to (a) set using a general key
+ *           L_ASET        *l_asetCreate()
+ *           RB_TYPE       *l_asetFind()
+ *           void           l_asetInsert()
+ *           void           l_asetDelete()
+ *           void           l_asetDestroy()
+ *           L_ASET_NODE   *l_asetGetFirst()
+ *           L_ASET_NODE   *l_asetGetNext()
+ *           L_ASET_NODE   *l_asetGetLast()
+ *           L_ASET_NODE   *l_asetGetPrev()
+ *           l_int32        l_asetSize()
+ * 
+ */ + +#include "allheaders.h" + +/* ------------------------------------------------------------- * + * Interface to Map * + * ------------------------------------------------------------- */ +L_AMAP * +l_amapCreate(l_int32 keytype) +{ + PROCNAME("l_amapCreate"); + + if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && + keytype != L_FLOAT_TYPE) + return (L_AMAP *)ERROR_PTR("invalid keytype", procName, NULL); + + L_AMAP *m = (L_AMAP *)LEPT_CALLOC(1, sizeof(L_AMAP)); + m->keytype = keytype; + return m; +} + +RB_TYPE * +l_amapFind(L_AMAP *m, + RB_TYPE key) +{ + return l_rbtreeLookup(m, key); +} + +void +l_amapInsert(L_AMAP *m, + RB_TYPE key, + RB_TYPE value) +{ + return l_rbtreeInsert(m, key, value); +} + +void +l_amapDelete(L_AMAP *m, + RB_TYPE key) +{ + l_rbtreeDelete(m, key); +} + +void +l_amapDestroy(L_AMAP **pm) +{ + l_rbtreeDestroy(pm); +} + +L_AMAP_NODE * +l_amapGetFirst(L_AMAP *m) +{ + return l_rbtreeGetFirst(m); +} + +L_AMAP_NODE * +l_amapGetNext(L_AMAP_NODE *n) +{ + return l_rbtreeGetNext(n); +} + +L_AMAP_NODE * +l_amapGetLast(L_AMAP *m) +{ + return l_rbtreeGetLast(m); +} + +L_AMAP_NODE * +l_amapGetPrev(L_AMAP_NODE *n) +{ + return l_rbtreeGetPrev(n); +} + +l_int32 +l_amapSize(L_AMAP *m) +{ + return l_rbtreeGetCount(m); +} + + +/* ------------------------------------------------------------- * + * Interface to Set * + * ------------------------------------------------------------- */ +L_ASET * +l_asetCreate(l_int32 keytype) +{ + PROCNAME("l_asetCreate"); + + if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && + keytype != L_FLOAT_TYPE) + return (L_ASET *)ERROR_PTR("invalid keytype", procName, NULL); + + L_ASET *s = (L_ASET *)LEPT_CALLOC(1, sizeof(L_ASET)); + s->keytype = keytype; + return s; +} + +/* + * l_asetFind() + * + * This returns NULL if not found, non-null if it is. In the latter + * case, the value stored in the returned pointer has no significance. + */ +RB_TYPE * +l_asetFind(L_ASET *s, + RB_TYPE key) +{ + return l_rbtreeLookup(s, key); +} + +void +l_asetInsert(L_ASET *s, + RB_TYPE key) +{ +RB_TYPE value; + + value.itype = 0; /* meaningless */ + return l_rbtreeInsert(s, key, value); +} + +void +l_asetDelete(L_ASET *s, + RB_TYPE key) +{ + l_rbtreeDelete(s, key); +} + +void +l_asetDestroy(L_ASET **ps) +{ + l_rbtreeDestroy(ps); +} + +L_ASET_NODE * +l_asetGetFirst(L_ASET *s) +{ + return l_rbtreeGetFirst(s); +} + +L_ASET_NODE * +l_asetGetNext(L_ASET_NODE *n) +{ + return l_rbtreeGetNext(n); +} + +L_ASET_NODE * +l_asetGetLast(L_ASET *s) +{ + return l_rbtreeGetLast(s); +} + +L_ASET_NODE * +l_asetGetPrev(L_ASET_NODE *n) +{ + return l_rbtreeGetPrev(n); +} + +l_int32 +l_asetSize(L_ASET *s) +{ + return l_rbtreeGetCount(s); +} diff --git a/3rdparty/hgOCR/leptonica/maze.c b/3rdparty/hgOCR/leptonica/maze.c new file mode 100644 index 00000000..20bd60bb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/maze.c @@ -0,0 +1,906 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file maze.c + *
+ *
+ *      This is a game with a pedagogical slant.  A maze is represented
+ *      by a binary image.  The ON pixels (fg) are walls.  The goal is
+ *      to navigate on OFF pixels (bg), using Manhattan steps
+ *      (N, S, E, W), between arbitrary start and end positions.
+ *      The problem is thus to find the shortest route between two points
+ *      in a binary image that are 4-connected in the bg.  This is done
+ *      with a breadth-first search, implemented with a queue.
+ *      We also use a queue of pointers to generate the maze (image).
+ *
+ *          PIX             *generateBinaryMaze()
+ *          static MAZEEL   *mazeelCreate()
+ *
+ *          PIX             *pixSearchBinaryMaze()
+ *          static l_int32   localSearchForBackground()
+ *
+ *      Generalizing a maze to a grayscale image, the search is
+ *      now for the "shortest" or least cost path, for some given
+ *      cost function.
+ *
+ *          PIX             *pixSearchGrayMaze()
+ * 
+ */ + +#include +#ifdef _WIN32 +#include +#include +#endif /* _WIN32 */ +#include "allheaders.h" + +static const l_int32 MinMazeWidth = 50; +static const l_int32 MinMazeHeight = 50; + +static const l_float32 DefaultWallProbability = 0.65; +static const l_float32 DefaultAnisotropyRatio = 0.25; + +enum { /* direction from parent to newly created element */ + START_LOC = 0, + DIR_NORTH = 1, + DIR_SOUTH = 2, + DIR_WEST = 3, + DIR_EAST = 4 +}; + +struct MazeElement { + l_float32 distance; + l_int32 x; + l_int32 y; + l_uint32 val; /* value of maze pixel at this location */ + l_int32 dir; /* direction from parent to child */ +}; +typedef struct MazeElement MAZEEL; + + +static MAZEEL *mazeelCreate(l_int32 x, l_int32 y, l_int32 dir); +static l_int32 localSearchForBackground(PIX *pix, l_int32 *px, + l_int32 *py, l_int32 maxrad); + +#ifndef NO_CONSOLE_IO +#define DEBUG_PATH 0 +#define DEBUG_MAZE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * Binary maze generation as cellular automaton * + *---------------------------------------------------------------------*/ +/*! + * \brief generateBinaryMaze() + * + * \param[in] w, h size of maze + * \param[in] xi, yi initial location + * \param[in] wallps probability that a pixel to the side is ON + * \param[in] ranis ratio of prob that pixel in forward direction + * is a wall to the probability that pixel in + * side directions is a wall + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) We have two input probability factors that determine the
+ *          density of walls and average length of straight passages.
+ *          When ranis < 1.0, you are more likely to generate a wall
+ *          to the side than going forward.  Enter 0.0 for either if
+ *          you want to use the default values.
+ *      (2) This is a type of percolation problem, and exhibits
+ *          different phases for different parameters wallps and ranis.
+ *          For larger values of these parameters, regions in the maze
+ *          are not explored because the maze generator walls them
+ *          off and cannot get through.  The boundary between the
+ *          two phases in this two-dimensional parameter space goes
+ *          near these values:
+ *                wallps       ranis
+ *                0.35         1.00
+ *                0.40         0.85
+ *                0.45         0.70
+ *                0.50         0.50
+ *                0.55         0.40
+ *                0.60         0.30
+ *                0.65         0.25
+ *                0.70         0.19
+ *                0.75         0.15
+ *                0.80         0.11
+ *      (3) Because there is a considerable amount of overhead in calling
+ *          pixGetPixel() and pixSetPixel(), this function can be sped
+ *          up with little effort using raster line pointers and the
+ *          GET_DATA* and SET_DATA* macros.
+ * 
+ */ +PIX * +generateBinaryMaze(l_int32 w, + l_int32 h, + l_int32 xi, + l_int32 yi, + l_float32 wallps, + l_float32 ranis) +{ +l_int32 x, y, dir; +l_uint32 val; +l_float32 frand, wallpf, testp; +MAZEEL *el, *elp; +PIX *pixd; /* the destination maze */ +PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ +L_QUEUE *lq; + + /* On Windows, seeding is apparently necessary to get decent mazes. + * Windows rand() returns a value up to 2^15 - 1, whereas unix + * rand() returns a value up to 2^31 - 1. Therefore the generated + * mazes will differ on the two platforms. */ +#ifdef _WIN32 + srand(28*333); +#endif /* _WIN32 */ + + if (w < MinMazeWidth) + w = MinMazeWidth; + if (h < MinMazeHeight) + h = MinMazeHeight; + if (xi <= 0 || xi >= w) + xi = w / 6; + if (yi <= 0 || yi >= h) + yi = h / 5; + if (wallps < 0.05 || wallps > 0.95) + wallps = DefaultWallProbability; + if (ranis < 0.05 || ranis > 1.0) + ranis = DefaultAnisotropyRatio; + wallpf = wallps * ranis; + +#if DEBUG_MAZE + fprintf(stderr, "(w, h) = (%d, %d), (xi, yi) = (%d, %d)\n", w, h, xi, yi); + fprintf(stderr, "Using: prob(wall) = %7.4f, anisotropy factor = %7.4f\n", + wallps, ranis); +#endif /* DEBUG_MAZE */ + + /* These are initialized to OFF */ + pixd = pixCreate(w, h, 1); + pixm = pixCreate(w, h, 1); + + lq = lqueueCreate(0); + + /* Prime the queue with the first pixel; it is OFF */ + el = mazeelCreate(xi, yi, START_LOC); + pixSetPixel(pixm, xi, yi, 1); /* mark visited */ + lqueueAdd(lq, el); + + /* While we're at it ... */ + while (lqueueGetCount(lq) > 0) { + elp = (MAZEEL *)lqueueRemove(lq); + x = elp->x; + y = elp->y; + dir = elp->dir; + if (x > 0) { /* check west */ + pixGetPixel(pixm, x - 1, y, &val); + if (val == 0) { /* not yet visited */ + pixSetPixel(pixm, x - 1, y, 1); /* mark visited */ + frand = (l_float32)rand() / (l_float32)RAND_MAX; + testp = wallps; + if (dir == DIR_WEST) + testp = wallpf; + if (frand <= testp) { /* make it a wall */ + pixSetPixel(pixd, x - 1, y, 1); + } else { /* not a wall */ + el = mazeelCreate(x - 1, y, DIR_WEST); + lqueueAdd(lq, el); + } + } + } + if (y > 0) { /* check north */ + pixGetPixel(pixm, x, y - 1, &val); + if (val == 0) { /* not yet visited */ + pixSetPixel(pixm, x, y - 1, 1); /* mark visited */ + frand = (l_float32)rand() / (l_float32)RAND_MAX; + testp = wallps; + if (dir == DIR_NORTH) + testp = wallpf; + if (frand <= testp) { /* make it a wall */ + pixSetPixel(pixd, x, y - 1, 1); + } else { /* not a wall */ + el = mazeelCreate(x, y - 1, DIR_NORTH); + lqueueAdd(lq, el); + } + } + } + if (x < w - 1) { /* check east */ + pixGetPixel(pixm, x + 1, y, &val); + if (val == 0) { /* not yet visited */ + pixSetPixel(pixm, x + 1, y, 1); /* mark visited */ + frand = (l_float32)rand() / (l_float32)RAND_MAX; + testp = wallps; + if (dir == DIR_EAST) + testp = wallpf; + if (frand <= testp) { /* make it a wall */ + pixSetPixel(pixd, x + 1, y, 1); + } else { /* not a wall */ + el = mazeelCreate(x + 1, y, DIR_EAST); + lqueueAdd(lq, el); + } + } + } + if (y < h - 1) { /* check south */ + pixGetPixel(pixm, x, y + 1, &val); + if (val == 0) { /* not yet visited */ + pixSetPixel(pixm, x, y + 1, 1); /* mark visited */ + frand = (l_float32)rand() / (l_float32)RAND_MAX; + testp = wallps; + if (dir == DIR_SOUTH) + testp = wallpf; + if (frand <= testp) { /* make it a wall */ + pixSetPixel(pixd, x, y + 1, 1); + } else { /* not a wall */ + el = mazeelCreate(x, y + 1, DIR_SOUTH); + lqueueAdd(lq, el); + } + } + } + LEPT_FREE(elp); + } + + lqueueDestroy(&lq, TRUE); + pixDestroy(&pixm); + return pixd; +} + + +static MAZEEL * +mazeelCreate(l_int32 x, + l_int32 y, + l_int32 dir) +{ +MAZEEL *el; + + el = (MAZEEL *)LEPT_CALLOC(1, sizeof(MAZEEL)); + el->x = x; + el->y = y; + el->dir = dir; + return el; +} + + +/*---------------------------------------------------------------------* + * Binary maze search * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSearchBinaryMaze() + * + * \param[in] pixs 1 bpp, maze + * \param[in] xi, yi beginning point; use same initial point + * that was used to generate the maze + * \param[in] xf, yf end point, or close to it + * \param[out] ppixd [optional] maze with path illustrated, or + * if no path possible, the part of the maze + * that was searched + * \return pta shortest path, or NULL if either no path + * exists or on error + * + *
+ * Notes:
+ *      (1) Because of the overhead in calling pixGetPixel() and
+ *          pixSetPixel(), we have used raster line pointers and the
+ *          GET_DATA* and SET_DATA* macros for many of the pix accesses.
+ *      (2) Commentary:
+ *            The goal is to find the shortest path between beginning and
+ *          end points, without going through walls, and there are many
+ *          ways to solve this problem.
+ *            We use a queue to implement a breadth-first search.  Two auxiliary
+ *          "image" data structures can be used: one to mark the visited
+ *          pixels and one to give the direction to the parent for each
+ *          visited pixel.  The first structure is used to avoid putting
+ *          pixels on the queue more than once, and the second is used
+ *          for retracing back to the origin, like the breadcrumbs in
+ *          Hansel and Gretel.  Each pixel taken off the queue is destroyed
+ *          after it is used to locate the allowed neighbors.  In fact,
+ *          only one distance image is required, if you initialize it
+ *          to some value that signifies "not yet visited."  (We use
+ *          a binary image for marking visited pixels because it is clearer.)
+ *          This method for a simple search of a binary maze is implemented in
+ *          pixSearchBinaryMaze().
+ *            An alternative method would store the (manhattan) distance
+ *          from the start point with each pixel on the queue.  The children
+ *          of each pixel get a distance one larger than the parent.  These
+ *          values can be stored in an auxiliary distance map image
+ *          that is constructed simultaneously with the search.  Once the
+ *          end point is reached, the distance map is used to backtrack
+ *          along a minimum path.  There may be several equal length
+ *          minimum paths, any one of which can be chosen this way.
+ * 
+ */ +PTA * +pixSearchBinaryMaze(PIX *pixs, + l_int32 xi, + l_int32 yi, + l_int32 xf, + l_int32 yf, + PIX **ppixd) +{ +l_int32 i, j, x, y, w, h, d, found; +l_uint32 val, rpixel, gpixel, bpixel; +void **lines1, **linem1, **linep8, **lined32; +MAZEEL *el, *elp; +PIX *pixd; /* the shortest path written on the maze image */ +PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ +PIX *pixp; /* for bookkeeping, to indicate direction to parent */ +L_QUEUE *lq; +PTA *pta; + + PROCNAME("pixSearchBinaryMaze"); + + if (ppixd) *ppixd = NULL; + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (xi <= 0 || xi >= w) + return (PTA *)ERROR_PTR("xi not valid", procName, NULL); + if (yi <= 0 || yi >= h) + return (PTA *)ERROR_PTR("yi not valid", procName, NULL); + pixGetPixel(pixs, xi, yi, &val); + if (val != 0) + return (PTA *)ERROR_PTR("(xi,yi) not bg pixel", procName, NULL); + pixd = NULL; + pta = NULL; + + /* Find a bg pixel near input point (xf, yf) */ + localSearchForBackground(pixs, &xf, &yf, 5); + +#if DEBUG_MAZE + fprintf(stderr, "(xi, yi) = (%d, %d), (xf, yf) = (%d, %d)\n", + xi, yi, xf, yf); +#endif /* DEBUG_MAZE */ + + pixm = pixCreate(w, h, 1); /* initialized to OFF */ + pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ + lines1 = pixGetLinePtrs(pixs, NULL); + linem1 = pixGetLinePtrs(pixm, NULL); + linep8 = pixGetLinePtrs(pixp, NULL); + + lq = lqueueCreate(0); + + /* Prime the queue with the first pixel; it is OFF */ + el = mazeelCreate(xi, yi, 0); /* don't need direction here */ + pixSetPixel(pixm, xi, yi, 1); /* mark visited */ + lqueueAdd(lq, el); + + /* Fill up the pix storing directions to parents, + * stopping when we hit the point (xf, yf) */ + found = FALSE; + while (lqueueGetCount(lq) > 0) { + elp = (MAZEEL *)lqueueRemove(lq); + x = elp->x; + y = elp->y; + if (x == xf && y == yf) { + found = TRUE; + LEPT_FREE(elp); + break; + } + + if (x > 0) { /* check to west */ + val = GET_DATA_BIT(linem1[y], x - 1); + if (val == 0) { /* not yet visited */ + SET_DATA_BIT(linem1[y], x - 1); /* mark visited */ + val = GET_DATA_BIT(lines1[y], x - 1); + if (val == 0) { /* bg, not a wall */ + SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent E */ + el = mazeelCreate(x - 1, y, 0); + lqueueAdd(lq, el); + } + } + } + if (y > 0) { /* check north */ + val = GET_DATA_BIT(linem1[y - 1], x); + if (val == 0) { /* not yet visited */ + SET_DATA_BIT(linem1[y - 1], x); /* mark visited */ + val = GET_DATA_BIT(lines1[y - 1], x); + if (val == 0) { /* bg, not a wall */ + SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent S */ + el = mazeelCreate(x, y - 1, 0); + lqueueAdd(lq, el); + } + } + } + if (x < w - 1) { /* check east */ + val = GET_DATA_BIT(linem1[y], x + 1); + if (val == 0) { /* not yet visited */ + SET_DATA_BIT(linem1[y], x + 1); /* mark visited */ + val = GET_DATA_BIT(lines1[y], x + 1); + if (val == 0) { /* bg, not a wall */ + SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent W */ + el = mazeelCreate(x + 1, y, 0); + lqueueAdd(lq, el); + } + } + } + if (y < h - 1) { /* check south */ + val = GET_DATA_BIT(linem1[y + 1], x); + if (val == 0) { /* not yet visited */ + SET_DATA_BIT(linem1[y + 1], x); /* mark visited */ + val = GET_DATA_BIT(lines1[y + 1], x); + if (val == 0) { /* bg, not a wall */ + SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent N */ + el = mazeelCreate(x, y + 1, 0); + lqueueAdd(lq, el); + } + } + } + LEPT_FREE(elp); + } + + lqueueDestroy(&lq, TRUE); + pixDestroy(&pixm); + LEPT_FREE(linem1); + + if (ppixd) { + pixd = pixUnpackBinary(pixs, 32, 1); + *ppixd = pixd; + } + composeRGBPixel(255, 0, 0, &rpixel); /* start point */ + composeRGBPixel(0, 255, 0, &gpixel); + composeRGBPixel(0, 0, 255, &bpixel); /* end point */ + + if (found) { + L_INFO(" Path found\n", procName); + pta = ptaCreate(0); + x = xf; + y = yf; + while (1) { + ptaAddPt(pta, x, y); + if (x == xi && y == yi) + break; + if (pixd) /* write 'gpixel' onto the path */ + pixSetPixel(pixd, x, y, gpixel); + pixGetPixel(pixp, x, y, &val); + if (val == DIR_NORTH) + y--; + else if (val == DIR_SOUTH) + y++; + else if (val == DIR_EAST) + x++; + else if (val == DIR_WEST) + x--; + } + } else { + L_INFO(" No path found\n", procName); + if (pixd) { /* paint all visited locations */ + lined32 = pixGetLinePtrs(pixd, NULL); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (GET_DATA_BYTE(linep8[i], j) != 0) + SET_DATA_FOUR_BYTES(lined32[i], j, gpixel); + } + } + LEPT_FREE(lined32); + } + } + if (pixd) { + pixSetPixel(pixd, xi, yi, rpixel); + pixSetPixel(pixd, xf, yf, bpixel); + } + + pixDestroy(&pixp); + LEPT_FREE(lines1); + LEPT_FREE(linep8); + return pta; +} + + +/*! + * \brief localSearchForBackground() + * + * \param[in] pix + * \param[out] px, py starting position for search; return found position + * \param[in] maxrad max distance to search from starting location + * \return 0 if bg pixel found; 1 if not found + */ +static l_int32 +localSearchForBackground(PIX *pix, + l_int32 *px, + l_int32 *py, + l_int32 maxrad) +{ +l_int32 x, y, w, h, r, i, j; +l_uint32 val; + + x = *px; + y = *py; + pixGetPixel(pix, x, y, &val); + if (val == 0) return 0; + + /* For each value of r, restrict the search to the boundary + * pixels in a square centered on (x,y), clipping to the + * image boundaries if necessary. */ + pixGetDimensions(pix, &w, &h, NULL); + for (r = 1; r < maxrad; r++) { + for (i = -r; i <= r; i++) { + if (y + i < 0 || y + i >= h) + continue; + for (j = -r; j <= r; j++) { + if (x + j < 0 || x + j >= w) + continue; + if (L_ABS(i) != r && L_ABS(j) != r) /* not on "r ring" */ + continue; + pixGetPixel(pix, x + j, y + i, &val); + if (val == 0) { + *px = x + j; + *py = y + i; + return 0; + } + } + } + } + return 1; +} + + + +/*---------------------------------------------------------------------* + * Gray maze search * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSearchGrayMaze() + * + * \param[in] pixs 1 bpp, maze + * \param[in] xi, yi beginning point; use same initial point + * that was used to generate the maze + * \param[in] xf, yf end point, or close to it + * \param[out] ppixd [optional] maze with path illustrated, or + * if no path possible, the part of the maze + * that was searched + * \return pta shortest path, or NULL if either no path + * exists or on error + * + * Commentary: + * Consider first a slight generalization of the binary maze + * search problem. Suppose that you can go through walls, + * but the cost is higher say, an increment of 3 to go into + * a wall pixel rather than 1? You're still trying to find + * the shortest path. One way to do this is with an ordered + * queue, and a simple way to visualize an ordered queue is as + * a set of stacks, each stack being marked with the distance + * of each pixel in the stack from the start. We place the + * start pixel in stack 0, pop it, and process its 4 children. + * Each pixel is given a distance that is incremented from that + * of its parent 0 in this case, depending on if it is a wall + * pixel or not. That value may be recorded on a distance map, + * according to the algorithm below. For children of the first + * pixel, those not on a wall go in stack 1, and wall + * children go in stack 3. Stack 0 being emptied, the process + * then continues with pixels being popped from stack 1. + * Here is the algorithm for each child pixel. The pixel's + * distance value, were it to be placed on a stack, is compared + * with the value for it that is on the distance map. There + * are three possible cases: + * 1 If the pixel has not yet been registered, it is pushed + * on its stack and the distance is written to the map. + * 2 If it has previously been registered with a higher distance, + * the distance on the map is relaxed to that of the + * current pixel, which is then placed on its stack. + * 3 If it has previously been registered with an equal + * or lower value, the pixel is discarded. + * The pixels are popped and processed successively from + * stack 1, and when stack 1 is empty, popping starts on stack 2. + * This continues until the destination pixel is popped off + * a stack. The minimum path is then derived from the distance map, + * going back from the end point as before. This is just Dijkstra's + * algorithm for a directed graph; here, the underlying graph + * consisting of the pixels and four edges connecting each pixel + * to its 4-neighbor is a special case of a directed graph, where + * each edge is bi-directional. The implementation of this generalized + * maze search is left as an exercise to the reader. + * + * Let's generalize a bit further. Suppose the "maze" is just + * a grayscale image -- think of it as an elevation map. The cost + * of moving on this surface depends on the height, or the gradient, + * or whatever you want. All that is required is that the cost + * is specified and non-negative on each link between adjacent + * pixels. Now the problem becomes: find the least cost path + * moving on this surface between two specified end points. + * For example, if the cost across an edge between two pixels + * depends on the "gradient", you can use: + * cost = 1 + L_ABSdeltaV + * where deltaV is the difference in value between two adjacent + * pixels. If the costs are all integers, we can still use an array + * of stacks to avoid ordering the queue e.g., by using a heap sort. + * This is a neat problem, because you don't even have to build a + * maze -- you can can use it on any grayscale image! + * + * Rather than using an array of stacks, a more practical + * approach is to implement with a priority queue, which is + * a queue that is sorted so that the elements with the largest + * or smallest key values always come off first. The + * priority queue is efficiently implemented as a heap, and + * this is how we do it. Suppose you run the algorithm + * using a priority queue, doing the bookkeeping with an + * auxiliary image data structure that saves the distance of + * each pixel put on the queue as before, according to the method + * described above. We implement it as a 2-way choice by + * initializing the distance array to a large value and putting + * a pixel on the queue if its distance is less than the value + * found on the array. When you finally pop the end pixel from + * the queue, you're done, and you can trace the path backward, + * either always going downhill or using an auxiliary image to + * give you the direction to go at each step. This is implemented + * here in searchGrayMaze. + * + * Do we really have to use a sorted queue? Can we solve this + * generalized maze with an unsorted queue of pixels? Or even + * an unsorted stack, doing a depth-first search (DFS)? + * Consider a different algorithm for this generalized maze, where + * we travel again breadth first, but this time use a single, + * unsorted queue. An auxiliary image is used as before to + * store the distances and to determine if pixels get pushed + * on the stack or dropped. As before, we must allow pixels + * to be revisited, with relaxation of the distance if a shorter + * path arrives later. As a result, we will in general have + * multiple instances of the same pixel on the stack with different + * distances. However, because the queue is not ordered, some of + * these pixels will be popped when another instance with a lower + * distance is still on the stack. Here, we're just popping them + * in the order they go on, rather than setting up a priority + * based on minimum distance. Thus, unlike the priority queue, + * when a pixel is popped we have to check the distance map to + * see if a pixel with a lower distance has been put on the queue, + * and, if so, we discard the pixel we just popped. So the + * "while" loop looks like this: + * ~ pop a pixel from the queue + * ~ check its distance against the distance stored in the + * distance map; if larger, discard + * ~ otherwise, for each of its neighbors: + * ~ compute its distance from the start pixel + * ~ compare this distance with that on the distance map: + * ~ if the distance map value higher, relax the distance + * and push the pixel on the queue + * ~ if the distance map value is lower, discard the pixel + * + * How does this loop terminate? Before, with an ordered queue, + * it terminates when you pop the end pixel. But with an unordered + * queue or stack, the first time you hit the end pixel, the + * distance is not guaranteed to be correct, because the pixels + * along the shortest path may not have yet been visited and relaxed. + * Because the shortest path can theoretically go anywhere, + * we must keep going. How do we know when to stop? Dijkstra + * uses an ordered queue to systematically remove nodes from + * further consideration. Each time a pixel is popped, we're + * done with it; it's "finalized" in the Dijkstra sense because + * we know the shortest path to it. However, with an unordered + * queue, the brute force answer is: stop when the queue + * or stack is empty, because then every pixel in the image + * has been assigned its minimum "distance" from the start pixel. + * + * This is similar to the situation when you use a stack for the + * simpler uniform-step problem: with breadth-first search BFS + * the pixels on the queue are automatically ordered, so you are + * done when you locate the end pixel as a neighbor of a popped pixel; + * whereas depth-first search DFS, using a stack, requires, + * in general, a search of every accessible pixel. Further, if + * a pixel is revisited with a smaller distance, that distance is + * recorded and the pixel is put on the stack again. + * + * But surely, you ask, can't we stop sooner? What if the + * start and end pixels are very close to each other? + * OK, suppose they are, and you have very high walls and a + * long snaking level path that is actually the minimum cost. + * That long path can wind back and forth across the entire + * maze many times before ending up at the end point, which + * could be just over a wall from the start. With the unordered + * queue, you very quickly get a high distance for the end + * pixel, which will be relaxed to the minimum distance only + * after all the pixels of the path have been visited and placed + * on the queue, multiple times for many of them. So that's the + * price for not ordering the queue! + */ +PTA * +pixSearchGrayMaze(PIX *pixs, + l_int32 xi, + l_int32 yi, + l_int32 xf, + l_int32 yf, + PIX **ppixd) +{ +l_int32 x, y, w, h, d; +l_uint32 val, valr, vals, rpixel, gpixel, bpixel; +void **lines8, **liner32, **linep8; +l_int32 cost, dist, distparent, sival, sivals; +MAZEEL *el, *elp; +PIX *pixd; /* optionally plot the path on this RGB version of pixs */ +PIX *pixr; /* for bookkeeping, to indicate the minimum distance */ + /* to pixels already visited */ +PIX *pixp; /* for bookkeeping, to indicate direction to parent */ +L_HEAP *lh; +PTA *pta; + + PROCNAME("pixSearchGrayMaze"); + + if (ppixd) *ppixd = NULL; + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PTA *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (xi <= 0 || xi >= w) + return (PTA *)ERROR_PTR("xi not valid", procName, NULL); + if (yi <= 0 || yi >= h) + return (PTA *)ERROR_PTR("yi not valid", procName, NULL); + pixd = NULL; + pta = NULL; + + /* Allocate stuff */ + pixr = pixCreate(w, h, 32); + pixSetAll(pixr); /* initialize to max value */ + pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ + lines8 = pixGetLinePtrs(pixs, NULL); + linep8 = pixGetLinePtrs(pixp, NULL); + liner32 = pixGetLinePtrs(pixr, NULL); + lh = lheapCreate(0, L_SORT_INCREASING); /* always remove closest pixels */ + + /* Prime the heap with the first pixel */ + pixGetPixel(pixs, xi, yi, &val); + el = mazeelCreate(xi, yi, 0); /* don't need direction here */ + el->distance = 0; + pixGetPixel(pixs, xi, yi, &val); + el->val = val; + pixSetPixel(pixr, xi, yi, 0); /* distance is 0 */ + lheapAdd(lh, el); + + /* Breadth-first search with priority queue (implemented by + a heap), labeling direction to parents in pixp and minimum + distance to visited pixels in pixr. Stop when we pull + the destination point (xf, yf) off the queue. */ + while (lheapGetCount(lh) > 0) { + elp = (MAZEEL *)lheapRemove(lh); + if (!elp) { + L_ERROR("heap broken!!\n", procName); + goto cleanup_stuff; + } + x = elp->x; + y = elp->y; + if (x == xf && y == yf) { /* exit condition */ + LEPT_FREE(elp); + break; + } + distparent = (l_int32)elp->distance; + val = elp->val; + sival = val; + + if (x > 0) { /* check to west */ + vals = GET_DATA_BYTE(lines8[y], x - 1); + valr = GET_DATA_FOUR_BYTES(liner32[y], x - 1); + sivals = (l_int32)vals; + cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ + dist = distparent + cost; + if (dist < valr) { /* shortest path so far to this pixel */ + SET_DATA_FOUR_BYTES(liner32[y], x - 1, dist); /* new dist */ + SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent to E */ + el = mazeelCreate(x - 1, y, 0); + el->val = vals; + el->distance = dist; + lheapAdd(lh, el); + } + } + if (y > 0) { /* check north */ + vals = GET_DATA_BYTE(lines8[y - 1], x); + valr = GET_DATA_FOUR_BYTES(liner32[y - 1], x); + sivals = (l_int32)vals; + cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ + dist = distparent + cost; + if (dist < valr) { /* shortest path so far to this pixel */ + SET_DATA_FOUR_BYTES(liner32[y - 1], x, dist); /* new dist */ + SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent to S */ + el = mazeelCreate(x, y - 1, 0); + el->val = vals; + el->distance = dist; + lheapAdd(lh, el); + } + } + if (x < w - 1) { /* check east */ + vals = GET_DATA_BYTE(lines8[y], x + 1); + valr = GET_DATA_FOUR_BYTES(liner32[y], x + 1); + sivals = (l_int32)vals; + cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ + dist = distparent + cost; + if (dist < valr) { /* shortest path so far to this pixel */ + SET_DATA_FOUR_BYTES(liner32[y], x + 1, dist); /* new dist */ + SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent to W */ + el = mazeelCreate(x + 1, y, 0); + el->val = vals; + el->distance = dist; + lheapAdd(lh, el); + } + } + if (y < h - 1) { /* check south */ + vals = GET_DATA_BYTE(lines8[y + 1], x); + valr = GET_DATA_FOUR_BYTES(liner32[y + 1], x); + sivals = (l_int32)vals; + cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ + dist = distparent + cost; + if (dist < valr) { /* shortest path so far to this pixel */ + SET_DATA_FOUR_BYTES(liner32[y + 1], x, dist); /* new dist */ + SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent to N */ + el = mazeelCreate(x, y + 1, 0); + el->val = vals; + el->distance = dist; + lheapAdd(lh, el); + } + } + LEPT_FREE(elp); + } + + lheapDestroy(&lh, TRUE); + + if (ppixd) { + pixd = pixConvert8To32(pixs); + *ppixd = pixd; + } + composeRGBPixel(255, 0, 0, &rpixel); /* start point */ + composeRGBPixel(0, 255, 0, &gpixel); + composeRGBPixel(0, 0, 255, &bpixel); /* end point */ + + x = xf; + y = yf; + pta = ptaCreate(0); + while (1) { /* write path onto pixd */ + ptaAddPt(pta, x, y); + if (x == xi && y == yi) + break; + if (pixd) + pixSetPixel(pixd, x, y, gpixel); + pixGetPixel(pixp, x, y, &val); + if (val == DIR_NORTH) + y--; + else if (val == DIR_SOUTH) + y++; + else if (val == DIR_EAST) + x++; + else if (val == DIR_WEST) + x--; + pixGetPixel(pixr, x, y, &val); + +#if DEBUG_PATH + fprintf(stderr, "(x,y) = (%d, %d); dist = %d\n", x, y, val); +#endif /* DEBUG_PATH */ + + } + if (pixd) { + pixSetPixel(pixd, xi, yi, rpixel); + pixSetPixel(pixd, xf, yf, bpixel); + } + +cleanup_stuff: + lheapDestroy(&lh, TRUE); + pixDestroy(&pixp); + pixDestroy(&pixr); + LEPT_FREE(lines8); + LEPT_FREE(linep8); + LEPT_FREE(liner32); + return pta; +} diff --git a/3rdparty/hgOCR/leptonica/morph.c b/3rdparty/hgOCR/leptonica/morph.c new file mode 100644 index 00000000..8a0d6741 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/morph.c @@ -0,0 +1,1822 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file morph.c + *
+ *
+ *     Generic binary morphological ops implemented with rasterop
+ *         PIX     *pixDilate()
+ *         PIX     *pixErode()
+ *         PIX     *pixHMT()
+ *         PIX     *pixOpen()
+ *         PIX     *pixClose()
+ *         PIX     *pixCloseSafe()
+ *         PIX     *pixOpenGeneralized()
+ *         PIX     *pixCloseGeneralized()
+ *
+ *     Binary morphological (raster) ops with brick Sels
+ *         PIX     *pixDilateBrick()
+ *         PIX     *pixErodeBrick()
+ *         PIX     *pixOpenBrick()
+ *         PIX     *pixCloseBrick()
+ *         PIX     *pixCloseSafeBrick()
+ *
+ *     Binary composed morphological (raster) ops with brick Sels
+ *         l_int32  selectComposableSels()
+ *         l_int32  selectComposableSizes()
+ *         PIX     *pixDilateCompBrick()
+ *         PIX     *pixErodeCompBrick()
+ *         PIX     *pixOpenCompBrick()
+ *         PIX     *pixCloseCompBrick()
+ *         PIX     *pixCloseSafeCompBrick()
+ *
+ *     Functions associated with boundary conditions
+ *         void     resetMorphBoundaryCondition()
+ *         l_int32  getMorphBorderPixelColor()
+ *
+ *     Static helpers for arg processing
+ *         static PIX     *processMorphArgs1()
+ *         static PIX     *processMorphArgs2()
+ *
+ *  You are provided with many simple ways to do binary morphology.
+ *  In particular, if you are using brick Sels, there are six
+ *  convenient methods, all specially tailored for separable operations
+ *  on brick Sels.  A "brick" Sel is a Sel that is a rectangle
+ *  of solid SEL_HITs with the origin at or near the center.
+ *  Note that a brick Sel can have one dimension of size 1.
+ *  This is very common.  All the brick Sel operations are
+ *  separable, meaning the operation is done first in the horizontal
+ *  direction and then in the vertical direction.  If one of the
+ *  dimensions is 1, this is a special case where the operation is
+ *  only performed in the other direction.
+ *
+ *  These six brick Sel methods are enumerated as follows:
+ *
+ *  (1) Brick Sels: pix*Brick(), where * = {Dilate, Erode, Open, Close}.
+ *      These are separable rasterop implementations.  The Sels are
+ *      automatically generated, used, and destroyed at the end.
+ *      You can get the result as a new Pix, in-place back into the src Pix,
+ *      or written to another existing Pix.
+ *
+ *  (2) Brick Sels: pix*CompBrick(), where * = {Dilate, Erode, Open, Close}.
+ *      These are separable, 2-way composite, rasterop implementations.
+ *      The Sels are automatically generated, used, and destroyed at the end.
+ *      You can get the result as a new Pix, in-place back into the src Pix,
+ *      or written to another existing Pix.  For large Sels, these are
+ *      considerably faster than the corresponding pix*Brick() functions.
+ *      N.B.:  The size of the Sels that are actually used are typically
+ *      close to, but not exactly equal to, the size input to the function.
+ *
+ *  (3) Brick Sels: pix*BrickDwa(), where * = {Dilate, Erode, Open, Close}.
+ *      These are separable dwa (destination word accumulation)
+ *      implementations.  They use auto-gen'd dwa code.  You can get
+ *      the result as a new Pix, in-place back into the src Pix,
+ *      or written to another existing Pix.  This is typically
+ *      about 3x faster than the analogous rasterop pix*Brick()
+ *      function, but it has the limitation that the Sel size must
+ *      be less than 63.  This is pre-set to work on a number
+ *      of pre-generated Sels.  If you want to use other Sels, the
+ *      code can be auto-gen'd for them; see the instructions in morphdwa.c.
+ *
+ *  (4) Same as (1), but you run it through pixMorphSequence(), with
+ *      the sequence string either compiled in or generated using snprintf.
+ *      All intermediate images and Sels are created, used and destroyed.
+ *      You always get the result as a new Pix.  For example, you can
+ *      specify a separable 11 x 17 brick opening as "o11.17",
+ *      or you can specify the horizontal and vertical operations
+ *      explicitly as "o11.1 + o1.11".  See morphseq.c for details.
+ *
+ *  (5) Same as (2), but you run it through pixMorphCompSequence(), with
+ *      the sequence string either compiled in or generated using snprintf.
+ *      All intermediate images and Sels are created, used and destroyed.
+ *      You always get the result as a new Pix.  See morphseq.c for details.
+ *
+ *  (6) Same as (3), but you run it through pixMorphSequenceDwa(), with
+ *      the sequence string either compiled in or generated using snprintf.
+ *      All intermediate images and Sels are created, used and destroyed.
+ *      You always get the result as a new Pix.  See morphseq.c for details.
+ *
+ *  If you are using Sels that are not bricks, you have two choices:
+ *      (a) simplest: use the basic rasterop implementations (pixDilate(), ...)
+ *      (b) fastest: generate the destination word accumumlation (dwa)
+ *          code for your Sels and compile it with the library.
+ *
+ *      For an example, see flipdetect.c, which gives implementations
+ *      using hit-miss Sels with both the rasterop and dwa versions.
+ *      For the latter, the dwa code resides in fliphmtgen.c, and it
+ *      was generated by prog/flipselgen.c.  Both the rasterop and dwa
+ *      implementations are tested by prog/fliptest.c.
+ *
+ *  A global constant MORPH_BC is used to set the boundary conditions
+ *  for rasterop-based binary morphology.  MORPH_BC, in morph.c,
+ *  is set by default to ASYMMETRIC_MORPH_BC for a non-symmetric
+ *  convention for boundary pixels in dilation and erosion:
+ *      All pixels outside the image are assumed to be OFF
+ *      for both dilation and erosion.
+ *  To use a symmetric definition, see comments in pixErode()
+ *  and reset MORPH_BC to SYMMETRIC_MORPH_BC, using
+ *  resetMorphBoundaryCondition().
+ *
+ *  Boundary artifacts are possible in closing when the non-symmetric
+ *  boundary conditions are used, because foreground pixels very close
+ *  to the edge can be removed.  This can be avoided by using either
+ *  the symmetric boundary conditions or the function pixCloseSafe(),
+ *  which adds a border before the operation and removes it afterwards.
+ *
+ *  The hit-miss transform (HMT) is the bit-and of 2 erosions:
+ *     (erosion of the src by the hits)  &  (erosion of the bit-inverted
+ *                                           src by the misses)
+ *
+ *  The 'generalized opening' is an HMT followed by a dilation that uses
+ *  only the hits of the hit-miss Sel.
+ *  The 'generalized closing' is a dilation (again, with the hits
+ *  of a hit-miss Sel), followed by the HMT.
+ *  Both of these 'generalized' functions are idempotent.
+ *
+ *  These functions are extensively tested in prog/binmorph1_reg.c,
+ *  prog/binmorph2_reg.c, and prog/binmorph3_reg.c.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Global constant; initialized here; must be declared extern + * in other files to access it directly. However, in most + * cases that is not necessary, because it can be reset + * using resetMorphBoundaryCondition(). */ +LEPT_DLL l_int32 MORPH_BC = ASYMMETRIC_MORPH_BC; + + /* We accept this cost in extra rasterops for decomposing exactly. */ +static const l_int32 ACCEPTABLE_COST = 5; + + /* Static helpers for arg processing */ +static PIX * processMorphArgs1(PIX *pixd, PIX *pixs, SEL *sel, PIX **ppixt); +static PIX * processMorphArgs2(PIX *pixd, PIX *pixs, SEL *sel); + + +/*-----------------------------------------------------------------* + * Generic binary morphological ops implemented with rasterop * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDilate() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) This dilates src using hits in Sel.
+ *      (2) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (3) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixDilate(NULL, pixs, ...);
+ *          (b) pixDilate(pixs, pixs, ...);
+ *          (c) pixDilate(pixd, pixs, ...);
+ *      (4) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixDilate(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +l_int32 i, j, w, h, sx, sy, cx, cy, seldata; +PIX *pixt; + + PROCNAME("pixDilate"); + + if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) + return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + selGetParameters(sel, &sy, &sx, &cy, &cx); + pixClearAll(pixd); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + seldata = sel->data[i][j]; + if (seldata == 1) { /* src | dst */ + pixRasterop(pixd, j - cx, i - cy, w, h, PIX_SRC | PIX_DST, + pixt, 0, 0); + } + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixErode() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) This erodes src using hits in Sel.
+ *      (2) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (3) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixErode(NULL, pixs, ...);
+ *          (b) pixErode(pixs, pixs, ...);
+ *          (c) pixErode(pixd, pixs, ...);
+ *      (4) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixErode(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +l_int32 i, j, w, h, sx, sy, cx, cy, seldata; +l_int32 xp, yp, xn, yn; +PIX *pixt; + + PROCNAME("pixErode"); + + if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) + return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + selGetParameters(sel, &sy, &sx, &cy, &cx); + pixSetAll(pixd); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + seldata = sel->data[i][j]; + if (seldata == 1) { /* src & dst */ + pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, + pixt, 0, 0); + } + } + } + + /* Clear near edges. We do this for the asymmetric boundary + * condition convention that implements erosion assuming all + * pixels surrounding the image are OFF. If you use a + * use a symmetric b.c. convention, where the erosion is + * implemented assuming pixels surrounding the image + * are ON, these operations are omitted. */ + if (MORPH_BC == ASYMMETRIC_MORPH_BC) { + selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); + if (xp > 0) + pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); + if (xn > 0) + pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); + if (yp > 0) + pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); + if (yn > 0) + pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixHMT() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) The hit-miss transform erodes the src, using both hits
+ *          and misses in the Sel.  It ANDs the shifted src for hits
+ *          and ANDs the inverted shifted src for misses.
+ *      (2) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (3) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixHMT(NULL, pixs, ...);
+ *          (b) pixHMT(pixs, pixs, ...);
+ *          (c) pixHMT(pixd, pixs, ...);
+ *      (4) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixHMT(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +l_int32 i, j, w, h, sx, sy, cx, cy, firstrasterop, seldata; +l_int32 xp, yp, xn, yn; +PIX *pixt; + + PROCNAME("pixHMT"); + + if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) + return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + selGetParameters(sel, &sy, &sx, &cy, &cx); + firstrasterop = TRUE; + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + seldata = sel->data[i][j]; + if (seldata == 1) { /* hit */ + if (firstrasterop == TRUE) { /* src only */ + pixClearAll(pixd); + pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC, + pixt, 0, 0); + firstrasterop = FALSE; + } else { /* src & dst */ + pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, + pixt, 0, 0); + } + } else if (seldata == 2) { /* miss */ + if (firstrasterop == TRUE) { /* ~src only */ + pixSetAll(pixd); + pixRasterop(pixd, cx - j, cy - i, w, h, PIX_NOT(PIX_SRC), + pixt, 0, 0); + firstrasterop = FALSE; + } else { /* ~src & dst */ + pixRasterop(pixd, cx - j, cy - i, w, h, + PIX_NOT(PIX_SRC) & PIX_DST, + pixt, 0, 0); + } + } + } + } + + /* Clear near edges */ + selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); + if (xp > 0) + pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); + if (xn > 0) + pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); + if (yp > 0) + pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); + if (yn > 0) + pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixOpen() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Generic morphological opening, using hits in the Sel.
+ *      (2) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (3) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpen(NULL, pixs, ...);
+ *          (b) pixOpen(pixs, pixs, ...);
+ *          (c) pixOpen(pixd, pixs, ...);
+ *      (4) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixOpen(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +PIX *pixt; + + PROCNAME("pixOpen"); + + if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); + + if ((pixt = pixErode(NULL, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + pixDilate(pixd, pixt, sel); + pixDestroy(&pixt); + + return pixd; +} + + +/*! + * \brief pixClose() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Generic morphological closing, using hits in the Sel.
+ *      (2) This implementation is a strict dual of the opening if
+ *          symmetric boundary conditions are used (see notes at top
+ *          of this file).
+ *      (3) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (4) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixClose(NULL, pixs, ...);
+ *          (b) pixClose(pixs, pixs, ...);
+ *          (c) pixClose(pixd, pixs, ...);
+ *      (5) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixClose(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +PIX *pixt; + + PROCNAME("pixClose"); + + if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); + + if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + pixErode(pixd, pixt, sel); + pixDestroy(&pixt); + + return pixd; +} + + +/*! + * \brief pixCloseSafe() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Generic morphological closing, using hits in the Sel.
+ *      (2) If non-symmetric boundary conditions are used, this
+ *          function adds a border of OFF pixels that is of
+ *          sufficient size to avoid losing pixels from the dilation,
+ *          and it removes the border after the operation is finished.
+ *          It thus enforces a correct extensive result for closing.
+ *      (3) If symmetric b.c. are used, it is not necessary to add
+ *          and remove this border.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseSafe(NULL, pixs, ...);
+ *          (b) pixCloseSafe(pixs, pixs, ...);
+ *          (c) pixCloseSafe(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixCloseSafe(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +l_int32 xp, yp, xn, yn, xmax, xbord; +PIX *pixt1, *pixt2; + + PROCNAME("pixCloseSafe"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!sel) + return (PIX *)ERROR_PTR("sel not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + /* Symmetric b.c. handles correctly without added pixels */ + if (MORPH_BC == SYMMETRIC_MORPH_BC) + return pixClose(pixd, pixs, sel); + + selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); + xmax = L_MAX(xp, xn); + xbord = 32 * ((xmax + 31) / 32); /* full 32 bit words */ + + if ((pixt1 = pixAddBorderGeneral(pixs, xbord, xbord, yp, yn, 0)) == NULL) + return (PIX *)ERROR_PTR("pixt1 not made", procName, pixd); + pixClose(pixt1, pixt1, sel); + if ((pixt2 = pixRemoveBorderGeneral(pixt1, xbord, xbord, yp, yn)) == NULL) + return (PIX *)ERROR_PTR("pixt2 not made", procName, pixd); + pixDestroy(&pixt1); + + if (!pixd) + return pixt2; + + pixCopy(pixd, pixt2); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixOpenGeneralized() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Generalized morphological opening, using both hits and
+ *          misses in the Sel.
+ *      (2) This does a hit-miss transform, followed by a dilation
+ *          using the hits.
+ *      (3) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (4) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpenGeneralized(NULL, pixs, ...);
+ *          (b) pixOpenGeneralized(pixs, pixs, ...);
+ *          (c) pixOpenGeneralized(pixd, pixs, ...);
+ *      (5) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixOpenGeneralized(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +PIX *pixt; + + PROCNAME("pixOpenGeneralized"); + + if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); + + if ((pixt = pixHMT(NULL, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + pixDilate(pixd, pixt, sel); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixCloseGeneralized() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Generalized morphological closing, using both hits and
+ *          misses in the Sel.
+ *      (2) This does a dilation using the hits, followed by a
+ *          hit-miss transform.
+ *      (3) This operation is a dual of the generalized opening.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseGeneralized(NULL, pixs, ...);
+ *          (b) pixCloseGeneralized(pixs, pixs, ...);
+ *          (c) pixCloseGeneralized(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixCloseGeneralized(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +PIX *pixt; + + PROCNAME("pixCloseGeneralized"); + + if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); + + if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + pixHMT(pixd, pixt, sel); + pixDestroy(&pixt); + + return pixd; +} + + +/*-----------------------------------------------------------------* + * Binary morphological (raster) ops with brick Sels * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDilateBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do separably if both hsize and vsize are > 1.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixDilateBrick(NULL, pixs, ...);
+ *          (b) pixDilateBrick(pixs, pixs, ...);
+ *          (c) pixDilateBrick(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixDilateBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *sel, *selh, *selv; + + PROCNAME("pixDilateBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize == 1 || vsize == 1) { /* no intermediate result */ + sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); + pixd = pixDilate(pixd, pixs, sel); + selDestroy(&sel); + } else { + selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); + selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); + pixt = pixDilate(NULL, pixs, selh); + pixd = pixDilate(pixd, pixt, selv); + pixDestroy(&pixt); + selDestroy(&selh); + selDestroy(&selv); + } + + return pixd; +} + + +/*! + * \brief pixErodeBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do separably if both hsize and vsize are > 1.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixErodeBrick(NULL, pixs, ...);
+ *          (b) pixErodeBrick(pixs, pixs, ...);
+ *          (c) pixErodeBrick(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixErodeBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *sel, *selh, *selv; + + PROCNAME("pixErodeBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize == 1 || vsize == 1) { /* no intermediate result */ + sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); + pixd = pixErode(pixd, pixs, sel); + selDestroy(&sel); + } else { + selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); + selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); + pixt = pixErode(NULL, pixs, selh); + pixd = pixErode(pixd, pixt, selv); + pixDestroy(&pixt); + selDestroy(&selh); + selDestroy(&selv); + } + + return pixd; +} + + +/*! + * \brief pixOpenBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do separably if both hsize and vsize are > 1.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpenBrick(NULL, pixs, ...);
+ *          (b) pixOpenBrick(pixs, pixs, ...);
+ *          (c) pixOpenBrick(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixOpenBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *sel, *selh, *selv; + + PROCNAME("pixOpenBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize == 1 || vsize == 1) { /* no intermediate result */ + sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); + pixd = pixOpen(pixd, pixs, sel); + selDestroy(&sel); + } else { /* do separably */ + selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); + selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); + pixt = pixErode(NULL, pixs, selh); + pixd = pixErode(pixd, pixt, selv); + pixDilate(pixt, pixd, selh); + pixDilate(pixd, pixt, selv); + pixDestroy(&pixt); + selDestroy(&selh); + selDestroy(&selv); + } + + return pixd; +} + + +/*! + * \brief pixCloseBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do separably if both hsize and vsize are > 1.
+ *      (4) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (5) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseBrick(NULL, pixs, ...);
+ *          (b) pixCloseBrick(pixs, pixs, ...);
+ *          (c) pixCloseBrick(pixd, pixs, ...);
+ *      (6) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixCloseBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *sel, *selh, *selv; + + PROCNAME("pixCloseBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize == 1 || vsize == 1) { /* no intermediate result */ + sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); + pixd = pixClose(pixd, pixs, sel); + selDestroy(&sel); + } else { /* do separably */ + selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); + selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); + pixt = pixDilate(NULL, pixs, selh); + pixd = pixDilate(pixd, pixt, selv); + pixErode(pixt, pixd, selh); + pixErode(pixd, pixt, selv); + pixDestroy(&pixt); + selDestroy(&selh); + selDestroy(&selv); + } + + return pixd; +} + + +/*! + * \brief pixCloseSafeBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do separably if both hsize and vsize are > 1.
+ *      (4) Safe closing adds a border of 0 pixels, of sufficient size so
+ *          that all pixels in input image are processed within
+ *          32-bit words in the expanded image.  As a result, there is
+ *          no special processing for pixels near the boundary, and there
+ *          are no boundary effects.  The border is removed at the end.
+ *      (5) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (6) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseBrick(NULL, pixs, ...);
+ *          (b) pixCloseBrick(pixs, pixs, ...);
+ *          (c) pixCloseBrick(pixd, pixs, ...);
+ *      (7) The size of the result is determined by pixs.
+ * 
+ */ +PIX * +pixCloseSafeBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 maxtrans, bordsize; +PIX *pixsb, *pixt, *pixdb; +SEL *sel, *selh, *selv; + + PROCNAME("pixCloseSafeBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + /* Symmetric b.c. handles correctly without added pixels */ + if (MORPH_BC == SYMMETRIC_MORPH_BC) + return pixCloseBrick(pixd, pixs, hsize, vsize); + + maxtrans = L_MAX(hsize / 2, vsize / 2); + bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ + pixsb = pixAddBorder(pixs, bordsize, 0); + + if (hsize == 1 || vsize == 1) { /* no intermediate result */ + sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); + pixdb = pixClose(NULL, pixsb, sel); + selDestroy(&sel); + } else { /* do separably */ + selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); + selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); + pixt = pixDilate(NULL, pixsb, selh); + pixdb = pixDilate(NULL, pixt, selv); + pixErode(pixt, pixdb, selh); + pixErode(pixdb, pixt, selv); + pixDestroy(&pixt); + selDestroy(&selh); + selDestroy(&selv); + } + + pixt = pixRemoveBorder(pixdb, bordsize); + pixDestroy(&pixsb); + pixDestroy(&pixdb); + + if (!pixd) { + pixd = pixt; + } else { + pixCopy(pixd, pixt); + pixDestroy(&pixt); + } + + return pixd; +} + + +/*-----------------------------------------------------------------* + * Binary composed morphological (raster) ops with brick Sels * + *-----------------------------------------------------------------*/ +/* \brief selectComposableSels() + * + * \param[in] size of composed sel + * \param[in] direction L_HORIZ, L_VERT + * \param[out] psel1 [optional] contiguous sel; can be null + * \param[out] psel2 [optional] comb sel; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) When using composable Sels, where the original Sel is
+ *          decomposed into two, the best you can do in terms
+ *          of reducing the computation is by a factor:
+ *
+ *               2 * sqrt(size) / size
+ *
+ *          In practice, you get quite close to this.  E.g.,
+ *
+ *             Sel size     |   Optimum reduction factor
+ *             --------         ------------------------
+ *                36        |          1/3
+ *                64        |          1/4
+ *               144        |          1/6
+ *               256        |          1/8
+ * 
+ */ +l_int32 +selectComposableSels(l_int32 size, + l_int32 direction, + SEL **psel1, + SEL **psel2) +{ +l_int32 factor1, factor2; + + PROCNAME("selectComposableSels"); + + if (!psel1 && !psel2) + return ERROR_INT("neither &sel1 nor &sel2 are defined", procName, 1); + if (psel1) *psel1 = NULL; + if (psel2) *psel2 = NULL; + if (size < 1 || size > 250 * 250) + return ERROR_INT("size < 1", procName, 1); + if (direction != L_HORIZ && direction != L_VERT) + return ERROR_INT("invalid direction", procName, 1); + + if (selectComposableSizes(size, &factor1, &factor2)) + return ERROR_INT("factors not found", procName, 1); + + if (psel1) { + if (direction == L_HORIZ) + *psel1 = selCreateBrick(1, factor1, 0, factor1 / 2, SEL_HIT); + else + *psel1 = selCreateBrick(factor1, 1, factor1 / 2 , 0, SEL_HIT); + } + if (psel2) + *psel2 = selCreateComb(factor1, factor2, direction); + return 0; +} + + +/*! + * \brief selectComposableSizes() + * + * \param[in] size of sel to be decomposed + * \param[out] pfactor1 larger factor + * \param[out] pfactor2 smaller factor + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This works for Sel sizes up to 62500, which seems sufficient.
+ *      (2) The composable sel size is typically within +- 1 of
+ *          the requested size.  Up to size = 300, the maximum difference
+ *          is +- 2.
+ *      (3) We choose an overall cost function where the penalty for
+ *          the size difference between input and actual is 4 times
+ *          the penalty for additional rasterops.
+ *      (4) Returned values: factor1 >= factor2
+ *          If size > 1, then factor1 > 1.
+ * 
+ */ +l_ok +selectComposableSizes(l_int32 size, + l_int32 *pfactor1, + l_int32 *pfactor2) +{ +l_int32 i, midval, val1, val2m, val2p; +l_int32 index, prodm, prodp; +l_int32 mincost, totcost, rastcostm, rastcostp, diffm, diffp; +l_int32 lowval[256]; +l_int32 hival[256]; +l_int32 rastcost[256]; /* excess in sum of sizes (extra rasterops) */ +l_int32 diff[256]; /* diff between product (sel size) and input size */ + + PROCNAME("selectComposableSizes"); + + if (size < 1 || size > 250 * 250) + return ERROR_INT("size < 1", procName, 1); + if (!pfactor1 || !pfactor2) + return ERROR_INT("&factor1 or &factor2 not defined", procName, 1); + + midval = (l_int32)(sqrt((l_float64)size) + 0.001); + if (midval * midval == size) { + *pfactor1 = *pfactor2 = midval; + return 0; + } + + /* Set up arrays. For each val1, optimize for lowest diff, + * and save the rastcost, the diff, and the two factors. */ + for (val1 = midval + 1, i = 0; val1 > 0; val1--, i++) { + val2m = size / val1; + val2p = val2m + 1; + prodm = val1 * val2m; + prodp = val1 * val2p; + rastcostm = val1 + val2m - 2 * midval; + rastcostp = val1 + val2p - 2 * midval; + diffm = L_ABS(size - prodm); + diffp = L_ABS(size - prodp); + if (diffm <= diffp) { + lowval[i] = L_MIN(val1, val2m); + hival[i] = L_MAX(val1, val2m); + rastcost[i] = rastcostm; + diff[i] = diffm; + } else { + lowval[i] = L_MIN(val1, val2p); + hival[i] = L_MAX(val1, val2p); + rastcost[i] = rastcostp; + diff[i] = diffp; + } + } + + /* Choose the optimum factors; use cost ratio 4 on diff */ + mincost = 10000; + index = 1; /* unimportant initial value */ + for (i = 0; i < midval + 1; i++) { + if (diff[i] == 0 && rastcost[i] < ACCEPTABLE_COST) { + *pfactor1 = hival[i]; + *pfactor2 = lowval[i]; + return 0; + } + totcost = 4 * diff[i] + rastcost[i]; + if (totcost < mincost) { + mincost = totcost; + index = i; + } + } + *pfactor1 = hival[index]; + *pfactor2 = lowval[index]; + + return 0; +} + + +/*! + * \brief pixDilateCompBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do compositely for each dimension > 1.
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (6) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixDilateCompBrick(NULL, pixs, ...);
+ *          (b) pixDilateCompBrick(pixs, pixs, ...);
+ *          (c) pixDilateCompBrick(pixd, pixs, ...);
+ *      (7) The dimensions of the resulting image are determined by pixs.
+ *      (8) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *          but not necessarily equal to it.  It attempts to optimize:
+ *             (a) for consistency with the input values: the product
+ *                 of terms is close to the input size
+ *             (b) for efficiency of the operation: the sum of the
+ *                 terms is small; ideally about twice the square
+ *                 root of the input size.
+ *          So, for example, if the input hsize = 37, which is
+ *          a prime number, the decomposer will break this into two
+ *          terms, 6 and 6, so that the net result is a dilation
+ *          with hsize = 36.
+ * 
+ */ +PIX * +pixDilateCompBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pix1, *pix2, *pix3; +SEL *selh1, *selh2, *selv1, *selv2; + + PROCNAME("pixDilateCompBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize > 1) + selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); + if (vsize > 1) + selectComposableSels(vsize, L_VERT, &selv1, &selv2); + + pix1 = pixAddBorder(pixs, 32, 0); + if (vsize == 1) { + pix2 = pixDilate(NULL, pix1, selh1); + pix3 = pixDilate(NULL, pix2, selh2); + } else if (hsize == 1) { + pix2 = pixDilate(NULL, pix1, selv1); + pix3 = pixDilate(NULL, pix2, selv2); + } else { + pix2 = pixDilate(NULL, pix1, selh1); + pix3 = pixDilate(NULL, pix2, selh2); + pixDilate(pix2, pix3, selv1); + pixDilate(pix3, pix2, selv2); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + + if (hsize > 1) { + selDestroy(&selh1); + selDestroy(&selh2); + } + if (vsize > 1) { + selDestroy(&selv1); + selDestroy(&selv2); + } + + pix1 = pixRemoveBorder(pix3, 32); + pixDestroy(&pix3); + if (!pixd) + return pix1; + pixCopy(pixd, pix1); + pixDestroy(&pix1); + return pixd; +} + + +/*! + * \brief pixErodeCompBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do compositely for each dimension > 1.
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (6) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixErodeCompBrick(NULL, pixs, ...);
+ *          (b) pixErodeCompBrick(pixs, pixs, ...);
+ *          (c) pixErodeCompBrick(pixd, pixs, ...);
+ *      (7) The dimensions of the resulting image are determined by pixs.
+ *      (8) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *          but not necessarily equal to it.  It attempts to optimize:
+ *             (a) for consistency with the input values: the product
+ *                 of terms is close to the input size
+ *             (b) for efficiency of the operation: the sum of the
+ *                 terms is small; ideally about twice the square
+ *                 root of the input size.
+ *          So, for example, if the input hsize = 37, which is
+ *          a prime number, the decomposer will break this into two
+ *          terms, 6 and 6, so that the net result is a dilation
+ *          with hsize = 36.
+ * 
+ */ +PIX * +pixErodeCompBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *selh1, *selh2, *selv1, *selv2; + + PROCNAME("pixErodeCompBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize > 1) + selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); + if (vsize > 1) + selectComposableSels(vsize, L_VERT, &selv1, &selv2); + if (vsize == 1) { + pixt = pixErode(NULL, pixs, selh1); + pixd = pixErode(pixd, pixt, selh2); + } else if (hsize == 1) { + pixt = pixErode(NULL, pixs, selv1); + pixd = pixErode(pixd, pixt, selv2); + } else { + pixt = pixErode(NULL, pixs, selh1); + pixd = pixErode(pixd, pixt, selh2); + pixErode(pixt, pixd, selv1); + pixErode(pixd, pixt, selv2); + } + pixDestroy(&pixt); + + if (hsize > 1) { + selDestroy(&selh1); + selDestroy(&selh2); + } + if (vsize > 1) { + selDestroy(&selv1); + selDestroy(&selv2); + } + + return pixd; +} + + +/*! + * \brief pixOpenCompBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do compositely for each dimension > 1.
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (6) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpenCompBrick(NULL, pixs, ...);
+ *          (b) pixOpenCompBrick(pixs, pixs, ...);
+ *          (c) pixOpenCompBrick(pixd, pixs, ...);
+ *      (7) The dimensions of the resulting image are determined by pixs.
+ *      (8) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *          but not necessarily equal to it.  It attempts to optimize:
+ *             (a) for consistency with the input values: the product
+ *                 of terms is close to the input size
+ *             (b) for efficiency of the operation: the sum of the
+ *                 terms is small; ideally about twice the square
+ *                 root of the input size.
+ *          So, for example, if the input hsize = 37, which is
+ *          a prime number, the decomposer will break this into two
+ *          terms, 6 and 6, so that the net result is a dilation
+ *          with hsize = 36.
+ * 
+ */ +PIX * +pixOpenCompBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *selh1, *selh2, *selv1, *selv2; + + PROCNAME("pixOpenCompBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize > 1) + selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); + if (vsize > 1) + selectComposableSels(vsize, L_VERT, &selv1, &selv2); + if (vsize == 1) { + pixt = pixErode(NULL, pixs, selh1); + pixd = pixErode(pixd, pixt, selh2); + pixDilate(pixt, pixd, selh1); + pixDilate(pixd, pixt, selh2); + } else if (hsize == 1) { + pixt = pixErode(NULL, pixs, selv1); + pixd = pixErode(pixd, pixt, selv2); + pixDilate(pixt, pixd, selv1); + pixDilate(pixd, pixt, selv2); + } else { /* do separably */ + pixt = pixErode(NULL, pixs, selh1); + pixd = pixErode(pixd, pixt, selh2); + pixErode(pixt, pixd, selv1); + pixErode(pixd, pixt, selv2); + pixDilate(pixt, pixd, selh1); + pixDilate(pixd, pixt, selh2); + pixDilate(pixt, pixd, selv1); + pixDilate(pixd, pixt, selv2); + } + pixDestroy(&pixt); + + if (hsize > 1) { + selDestroy(&selh1); + selDestroy(&selh2); + } + if (vsize > 1) { + selDestroy(&selv1); + selDestroy(&selv2); + } + + return pixd; +} + + +/*! + * \brief pixCloseCompBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do compositely for each dimension > 1.
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (6) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseCompBrick(NULL, pixs, ...);
+ *          (b) pixCloseCompBrick(pixs, pixs, ...);
+ *          (c) pixCloseCompBrick(pixd, pixs, ...);
+ *      (7) The dimensions of the resulting image are determined by pixs.
+ *      (8) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *          but not necessarily equal to it.  It attempts to optimize:
+ *             (a) for consistency with the input values: the product
+ *                 of terms is close to the input size
+ *             (b) for efficiency of the operation: the sum of the
+ *                 terms is small; ideally about twice the square
+ *                 root of the input size.
+ *          So, for example, if the input hsize = 37, which is
+ *          a prime number, the decomposer will break this into two
+ *          terms, 6 and 6, so that the net result is a dilation
+ *          with hsize = 36.
+ * 
+ */ +PIX * +pixCloseCompBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; +SEL *selh1, *selh2, *selv1, *selv2; + + PROCNAME("pixCloseCompBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + if (hsize > 1) + selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); + if (vsize > 1) + selectComposableSels(vsize, L_VERT, &selv1, &selv2); + if (vsize == 1) { + pixt = pixDilate(NULL, pixs, selh1); + pixd = pixDilate(pixd, pixt, selh2); + pixErode(pixt, pixd, selh1); + pixErode(pixd, pixt, selh2); + } else if (hsize == 1) { + pixt = pixDilate(NULL, pixs, selv1); + pixd = pixDilate(pixd, pixt, selv2); + pixErode(pixt, pixd, selv1); + pixErode(pixd, pixt, selv2); + } else { /* do separably */ + pixt = pixDilate(NULL, pixs, selh1); + pixd = pixDilate(pixd, pixt, selh2); + pixDilate(pixt, pixd, selv1); + pixDilate(pixd, pixt, selv2); + pixErode(pixt, pixd, selh1); + pixErode(pixd, pixt, selh2); + pixErode(pixt, pixd, selv1); + pixErode(pixd, pixt, selv2); + } + pixDestroy(&pixt); + + if (hsize > 1) { + selDestroy(&selh1); + selDestroy(&selh2); + } + if (vsize > 1) { + selDestroy(&selv1); + selDestroy(&selv2); + } + + return pixd; +} + + +/*! + * \brief pixCloseSafeCompBrick() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) The origin is at (x, y) = (hsize/2, vsize/2)
+ *      (3) Do compositely for each dimension > 1.
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) Safe closing adds a border of 0 pixels, of sufficient size so
+ *          that all pixels in input image are processed within
+ *          32-bit words in the expanded image.  As a result, there is
+ *          no special processing for pixels near the boundary, and there
+ *          are no boundary effects.  The border is removed at the end.
+ *      (6) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (7) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseSafeCompBrick(NULL, pixs, ...);
+ *          (b) pixCloseSafeCompBrick(pixs, pixs, ...);
+ *          (c) pixCloseSafeCompBrick(pixd, pixs, ...);
+ *      (8) The dimensions of the resulting image are determined by pixs.
+ *      (9) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *          but not necessarily equal to it.  It attempts to optimize:
+ *             (a) for consistency with the input values: the product
+ *                 of terms is close to the input size
+ *             (b) for efficiency of the operation: the sum of the
+ *                 terms is small; ideally about twice the square
+ *                 root of the input size.
+ *          So, for example, if the input hsize = 37, which is
+ *          a prime number, the decomposer will break this into two
+ *          terms, 6 and 6, so that the net result is a dilation
+ *          with hsize = 36.
+ * 
+ */ +PIX * +pixCloseSafeCompBrick(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 maxtrans, bordsize; +PIX *pixsb, *pixt, *pixdb; +SEL *selh1, *selh2, *selv1, *selv2; + + PROCNAME("pixCloseSafeCompBrick"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + /* Symmetric b.c. handles correctly without added pixels */ + if (MORPH_BC == SYMMETRIC_MORPH_BC) + return pixCloseCompBrick(pixd, pixs, hsize, vsize); + + maxtrans = L_MAX(hsize / 2, vsize / 2); + bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ + pixsb = pixAddBorder(pixs, bordsize, 0); + + if (hsize > 1) + selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); + if (vsize > 1) + selectComposableSels(vsize, L_VERT, &selv1, &selv2); + if (vsize == 1) { + pixt = pixDilate(NULL, pixsb, selh1); + pixdb = pixDilate(NULL, pixt, selh2); + pixErode(pixt, pixdb, selh1); + pixErode(pixdb, pixt, selh2); + } else if (hsize == 1) { + pixt = pixDilate(NULL, pixsb, selv1); + pixdb = pixDilate(NULL, pixt, selv2); + pixErode(pixt, pixdb, selv1); + pixErode(pixdb, pixt, selv2); + } else { /* do separably */ + pixt = pixDilate(NULL, pixsb, selh1); + pixdb = pixDilate(NULL, pixt, selh2); + pixDilate(pixt, pixdb, selv1); + pixDilate(pixdb, pixt, selv2); + pixErode(pixt, pixdb, selh1); + pixErode(pixdb, pixt, selh2); + pixErode(pixt, pixdb, selv1); + pixErode(pixdb, pixt, selv2); + } + pixDestroy(&pixt); + + pixt = pixRemoveBorder(pixdb, bordsize); + pixDestroy(&pixsb); + pixDestroy(&pixdb); + + if (!pixd) { + pixd = pixt; + } else { + pixCopy(pixd, pixt); + pixDestroy(&pixt); + } + + if (hsize > 1) { + selDestroy(&selh1); + selDestroy(&selh2); + } + if (vsize > 1) { + selDestroy(&selv1); + selDestroy(&selv2); + } + + return pixd; +} + + +/*-----------------------------------------------------------------* + * Functions associated with boundary conditions * + *-----------------------------------------------------------------*/ +/*! + * \brief resetMorphBoundaryCondition() + * + * \param[in] bc SYMMETRIC_MORPH_BC, ASYMMETRIC_MORPH_BC + * \return void + */ +void +resetMorphBoundaryCondition(l_int32 bc) +{ + PROCNAME("resetMorphBoundaryCondition"); + + if (bc != SYMMETRIC_MORPH_BC && bc != ASYMMETRIC_MORPH_BC) { + L_WARNING("invalid bc; using asymmetric\n", procName); + bc = ASYMMETRIC_MORPH_BC; + } + MORPH_BC = bc; + return; +} + + +/*! + * \brief getMorphBorderPixelColor() + * + * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE + * \param[in] depth of pix + * \return color of border pixels for this operation + */ +l_uint32 +getMorphBorderPixelColor(l_int32 type, + l_int32 depth) +{ + PROCNAME("getMorphBorderPixelColor"); + + if (type != L_MORPH_DILATE && type != L_MORPH_ERODE) + return ERROR_INT("invalid type", procName, 0); + if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && + depth != 16 && depth != 32) + return ERROR_INT("invalid depth", procName, 0); + + if (MORPH_BC == ASYMMETRIC_MORPH_BC || type == L_MORPH_DILATE) + return 0; + + /* Symmetric & erosion */ + if (depth < 32) + return ((1 << depth) - 1); + else /* depth == 32 */ + return 0xffffff00; +} + + +/*-----------------------------------------------------------------* + * Static helpers for arg processing * + *-----------------------------------------------------------------*/ +/*! + * \brief processMorphArgs1() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] sel + * \param[out] ppixt copy or clone of %pixs + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) This is used for generic erosion, dilation and HMT.
+ * 
+ */ +static PIX * +processMorphArgs1(PIX *pixd, + PIX *pixs, + SEL *sel, + PIX **ppixt) +{ +l_int32 sx, sy; + + PROCNAME("processMorphArgs1"); + + if (!ppixt) + return (PIX *)ERROR_PTR("&pixt not defined", procName, pixd); + *ppixt = NULL; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!sel) + return (PIX *)ERROR_PTR("sel not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + selGetParameters(sel, &sx, &sy, NULL, NULL); + if (sx == 0 || sy == 0) + return (PIX *)ERROR_PTR("sel of size 0", procName, pixd); + + /* We require pixd to exist and to be the same size as pixs. + * Further, pixt must be a copy (or clone) of pixs. */ + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + *ppixt = pixClone(pixs); + } else { + pixResizeImageData(pixd, pixs); + if (pixd == pixs) { /* in-place; must make a copy of pixs */ + if ((*ppixt = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + } else { + *ppixt = pixClone(pixs); + } + } + return pixd; +} + + +/*! + * \brief processMorphArgs2() + * + * This is used for generic openings and closings. + */ +static PIX * +processMorphArgs2(PIX *pixd, + PIX *pixs, + SEL *sel) +{ +l_int32 sx, sy; + + PROCNAME("processMorphArgs2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!sel) + return (PIX *)ERROR_PTR("sel not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + selGetParameters(sel, &sx, &sy, NULL, NULL); + if (sx == 0 || sy == 0) + return (PIX *)ERROR_PTR("sel of size 0", procName, pixd); + + if (!pixd) + return pixCreateTemplate(pixs); + pixResizeImageData(pixd, pixs); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/morph.h b/3rdparty/hgOCR/leptonica/morph.h new file mode 100644 index 00000000..d17723fb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/morph.h @@ -0,0 +1,248 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_MORPH_H +#define LEPTONICA_MORPH_H + +/*! + * \file morph.h + * + *
+ *  Contains the following structs:
+ *      struct Sel
+ *      struct Sela
+ *      struct Kernel
+ *
+ *  Contains definitions for:
+ *      morphological b.c. flags
+ *      structuring element types
+ *      runlength flags for granulometry
+ *      direction flags for grayscale morphology
+ *      morphological operation flags
+ *      standard border size
+ *      grayscale intensity scaling flags
+ *      morphological tophat flags
+ *      arithmetic and logical operator flags
+ *      grayscale morphology selection flags
+ *      distance function b.c. flags
+ *      image comparison flags
+ *      color content flags
+ * 
+ */ + +/*-------------------------------------------------------------------------* + * Sel and Sel array * + *-------------------------------------------------------------------------*/ +#define SEL_VERSION_NUMBER 1 + +/*! Selection */ +struct Sel +{ + l_int32 sy; /*!< sel height */ + l_int32 sx; /*!< sel width */ + l_int32 cy; /*!< y location of sel origin */ + l_int32 cx; /*!< x location of sel origin */ + l_int32 **data; /*!< {0,1,2}; data[i][j] in [row][col] order */ + char *name; /*!< used to find sel by name */ +}; +typedef struct Sel SEL; + +/*! Array of Sel */ +struct Sela +{ + l_int32 n; /*!< number of sel actually stored */ + l_int32 nalloc; /*!< size of allocated ptr array */ + struct Sel **sel; /*!< sel ptr array */ +}; +typedef struct Sela SELA; + + +/*-------------------------------------------------------------------------* + * Kernel * + *-------------------------------------------------------------------------*/ +#define KERNEL_VERSION_NUMBER 2 + +/*! Kernel */ +struct L_Kernel +{ + l_int32 sy; /*!< kernel height */ + l_int32 sx; /*!< kernel width */ + l_int32 cy; /*!< y location of kernel origin */ + l_int32 cx; /*!< x location of kernel origin */ + l_float32 **data; /*!< data[i][j] in [row][col] order */ +}; +typedef struct L_Kernel L_KERNEL; + + +/*-------------------------------------------------------------------------* + * Morphological boundary condition flags * + * * + * Two types of boundary condition for erosion. * + * The global variable MORPH_BC takes on one of these two values. * + * See notes in morph.c for usage. * + *-------------------------------------------------------------------------*/ + +/*! Morph Boundary */ +enum { + SYMMETRIC_MORPH_BC = 0, + ASYMMETRIC_MORPH_BC = 1 +}; + +/*-------------------------------------------------------------------------* + * Structuring element vals * + *-------------------------------------------------------------------------*/ + +/*! SEL Vals */ +enum { + SEL_DONT_CARE = 0, + SEL_HIT = 1, + SEL_MISS = 2 +}; + +/*-------------------------------------------------------------------------* + * Runlength flags for granulometry * + *-------------------------------------------------------------------------*/ + +/*! Runlength Polarity */ +enum { + L_RUN_OFF = 0, + L_RUN_ON = 1 +}; + +/*-------------------------------------------------------------------------* + * Direction flags for grayscale morphology, granulometry, * + * composable Sels, convolution, etc. * + *-------------------------------------------------------------------------*/ + +/*! Direction Flags */ +enum { + L_HORIZ = 1, + L_VERT = 2, + L_BOTH_DIRECTIONS = 3 +}; + +/*-------------------------------------------------------------------------* + * Morphological operation flags * + *-------------------------------------------------------------------------*/ + +/*! Morph Operator */ +enum { + L_MORPH_DILATE = 1, + L_MORPH_ERODE = 2, + L_MORPH_OPEN = 3, + L_MORPH_CLOSE = 4, + L_MORPH_HMT = 5 +}; + +/*-------------------------------------------------------------------------* + * Grayscale intensity scaling flags * + *-------------------------------------------------------------------------*/ + +/*! Pixel Value Scaling */ +enum { + L_LINEAR_SCALE = 1, + L_LOG_SCALE = 2 +}; + +/*-------------------------------------------------------------------------* + * Morphological tophat flags * + *-------------------------------------------------------------------------*/ + +/*! Morph Tophat */ +enum { + L_TOPHAT_WHITE = 0, + L_TOPHAT_BLACK = 1 +}; + +/*-------------------------------------------------------------------------* + * Arithmetic and logical operator flags * + * (use on grayscale images and Numas) * + *-------------------------------------------------------------------------*/ + +/*! ArithLogical Ops */ +enum { + L_ARITH_ADD = 1, + L_ARITH_SUBTRACT = 2, + L_ARITH_MULTIPLY = 3, /* on numas only */ + L_ARITH_DIVIDE = 4, /* on numas only */ + L_UNION = 5, /* on numas only */ + L_INTERSECTION = 6, /* on numas only */ + L_SUBTRACTION = 7, /* on numas only */ + L_EXCLUSIVE_OR = 8 /* on numas only */ +}; + +/*-------------------------------------------------------------------------* + * Min/max selection flags * + *-------------------------------------------------------------------------*/ + +/*! MinMax Selection */ +enum { + L_CHOOSE_MIN = 1, /* useful in a downscaling "erosion" */ + L_CHOOSE_MAX = 2, /* useful in a downscaling "dilation" */ + L_CHOOSE_MAXDIFF = 3, /* useful in a downscaling contrast */ + L_CHOOSE_MIN_BOOST = 4, /* use a modification of the min value */ + L_CHOOSE_MAX_BOOST = 5 /* use a modification of the max value */ +}; + +/*-------------------------------------------------------------------------* + * Exterior value b.c. for distance function flags * + *-------------------------------------------------------------------------*/ + +/*! Exterior Value */ +enum { + L_BOUNDARY_BG = 1, /* assume bg outside image */ + L_BOUNDARY_FG = 2 /* assume fg outside image */ +}; + +/*-------------------------------------------------------------------------* + * Image comparison flags * + *-------------------------------------------------------------------------*/ + +/*! Image Comparison */ +enum { + L_COMPARE_XOR = 1, + L_COMPARE_SUBTRACT = 2, + L_COMPARE_ABS_DIFF = 3 +}; + +/*-------------------------------------------------------------------------* + * Color content flags * + *-------------------------------------------------------------------------*/ + +/*! Color Content */ +enum { + L_MAX_DIFF_FROM_AVERAGE_2 = 1, + L_MAX_MIN_DIFF_FROM_2 = 2, + L_MAX_DIFF = 3 +}; + +/*-------------------------------------------------------------------------* + * Standard size of border added around images for special processing * + *-------------------------------------------------------------------------*/ +static const l_int32 ADDED_BORDER = 32; /*!< pixels, not bits */ + + +#endif /* LEPTONICA_MORPH_H */ diff --git a/3rdparty/hgOCR/leptonica/morphapp.c b/3rdparty/hgOCR/leptonica/morphapp.c new file mode 100644 index 00000000..9730584e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/morphapp.c @@ -0,0 +1,1633 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file morphapp.c + *
+ *
+ *      These are some useful and/or interesting composite
+ *      image processing operations, of the type that are often
+ *      useful in applications.  Most are morphological in
+ *      nature.
+ *
+ *      Extraction of boundary pixels
+ *            PIX       *pixExtractBoundary()
+ *
+ *      Selective morph sequence operation under mask
+ *            PIX       *pixMorphSequenceMasked()
+ *
+ *      Selective morph sequence operation on each component
+ *            PIX       *pixMorphSequenceByComponent()
+ *            PIXA      *pixaMorphSequenceByComponent()
+ *
+ *      Selective morph sequence operation on each region
+ *            PIX       *pixMorphSequenceByRegion()
+ *            PIXA      *pixaMorphSequenceByRegion()
+ *
+ *      Union and intersection of parallel composite operations
+ *            PIX       *pixUnionOfMorphOps()
+ *            PIX       *pixIntersectionOfMorphOps()
+ *
+ *      Selective connected component filling
+ *            PIX       *pixSelectiveConnCompFill()
+ *
+ *      Removal of matched patterns
+ *            PIX       *pixRemoveMatchedPattern()
+ *
+ *      Display of matched patterns
+ *            PIX       *pixDisplayMatchedPattern()
+ *
+ *      Extension of pixa by iterative erosion or dilation (and by scaling)
+ *            PIXA      *pixaExtendByMorph()
+ *            PIXA      *pixaExtendByScaling()
+ *
+ *      Iterative morphological seed filling (don't use for real work)
+ *            PIX       *pixSeedfillMorph()
+ *
+ *      Granulometry on binary images
+ *            NUMA      *pixRunHistogramMorph()
+ *
+ *      Composite operations on grayscale images
+ *            PIX       *pixTophat()
+ *            PIX       *pixHDome()
+ *            PIX       *pixFastTophat()
+ *            PIX       *pixMorphGradient()
+ *
+ *      Centroid of component
+ *            PTA       *pixaCentroids()
+ *            l_int32    pixCentroid()
+ * 
+ */ + +#include "allheaders.h" + +#define SWAP(x, y) {temp = (x); (x) = (y); (y) = temp;} + + +/*-----------------------------------------------------------------* + * Extraction of boundary pixels * + *-----------------------------------------------------------------*/ +/*! + * \brief pixExtractBoundary() + * + * \param[in] pixs 1 bpp + * \param[in] type 0 for background pixels; 1 for foreground pixels + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Extracts the fg or bg boundary pixels for each component.
+ *          Components are assumed to end at the boundary of pixs.
+ * 
+ */ +PIX * +pixExtractBoundary(PIX *pixs, + l_int32 type) +{ +PIX *pixd; + + PROCNAME("pixExtractBoundary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (type == 0) + pixd = pixDilateBrick(NULL, pixs, 3, 3); + else + pixd = pixErodeBrick(NULL, pixs, 3, 3); + pixXor(pixd, pixd, pixs); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Selective morph sequence operation under mask * + *-----------------------------------------------------------------*/ +/*! + * \brief pixMorphSequenceMasked() + * + * \param[in] pixs 1 bpp + * \param[in] pixm [optional] 1 bpp mask + * \param[in] sequence string specifying sequence of operations + * \param[in] dispsep horizontal separation in pixels between + * successive displays; use zero to suppress display + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies the morph sequence to the image, but only allows
+ *          changes in pixs for pixels under the background of pixm.
+ *      (5) If pixm is NULL, this is just pixMorphSequence().
+ * 
+ */ +PIX * +pixMorphSequenceMasked(PIX *pixs, + PIX *pixm, + const char *sequence, + l_int32 dispsep) +{ +PIX *pixd; + + PROCNAME("pixMorphSequenceMasked"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + pixd = pixMorphSequence(pixs, sequence, dispsep); + pixCombineMasked(pixd, pixs, pixm); /* restore src pixels under mask fg */ + return pixd; +} + + +/*-----------------------------------------------------------------* + * Morph sequence operation on each component * + *-----------------------------------------------------------------*/ +/*! + * \brief pixMorphSequenceByComponent() + * + * \param[in] pixs 1 bpp + * \param[in] sequence string specifying sequence + * \param[in] connectivity 4 or 8 + * \param[in] minw min width to consider; use 0 or 1 for any width + * \param[in] minh min height to consider; use 0 or 1 for any height + * \param[out] pboxa [optional] return boxa of c.c. in pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixMorphSequence() for composing operation sequences.
+ *      (2) This operates separately on each c.c. in the input pix.
+ *      (3) The dilation does NOT increase the c.c. size; it is clipped
+ *          to the size of the original c.c.   This is necessary to
+ *          keep the c.c. independent after the operation.
+ *      (4) You can specify that the width and/or height must equal
+ *          or exceed a minimum size for the operation to take place.
+ *      (5) Use NULL for boxa to avoid returning the boxa.
+ * 
+ */ +PIX * +pixMorphSequenceByComponent(PIX *pixs, + const char *sequence, + l_int32 connectivity, + l_int32 minw, + l_int32 minh, + BOXA **pboxa) +{ +l_int32 n, i, x, y, w, h; +BOXA *boxa; +PIX *pix, *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixMorphSequenceByComponent"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + if (minw <= 0) minw = 1; + if (minh <= 0) minh = 1; + + /* Get the c.c. */ + if ((boxa = pixConnComp(pixs, &pixas, connectivity)) == NULL) + return (PIX *)ERROR_PTR("boxa not made", procName, NULL); + + /* Operate on each c.c. independently */ + pixad = pixaMorphSequenceByComponent(pixas, sequence, minw, minh); + pixaDestroy(&pixas); + boxaDestroy(&boxa); + if (!pixad) + return (PIX *)ERROR_PTR("pixad not made", procName, NULL); + + /* Display the result out into pixd */ + pixd = pixCreateTemplate(pixs); + n = pixaGetCount(pixad); + for (i = 0; i < n; i++) { + pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); + pix = pixaGetPix(pixad, i, L_CLONE); + pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); + pixDestroy(&pix); + } + + if (pboxa) + *pboxa = pixaGetBoxa(pixad, L_CLONE); + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaMorphSequenceByComponent() + * + * \param[in] pixas of 1 bpp pix + * \param[in] sequence string specifying sequence + * \param[in] minw min width to consider; use 0 or 1 for any width + * \param[in] minh min height to consider; use 0 or 1 for any height + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixMorphSequence() for composing operation sequences.
+ *      (2) This operates separately on each c.c. in the input pixa.
+ *      (3) You can specify that the width and/or height must equal
+ *          or exceed a minimum size for the operation to take place.
+ *      (4) The input pixa should have a boxa giving the locations
+ *          of the pix components.
+ * 
+ */ +PIXA * +pixaMorphSequenceByComponent(PIXA *pixas, + const char *sequence, + l_int32 minw, + l_int32 minh) +{ +l_int32 n, i, w, h, d; +BOX *box; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaMorphSequenceByComponent"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if ((n = pixaGetCount(pixas)) == 0) + return (PIXA *)ERROR_PTR("no pix in pixas", procName, NULL); + if (n != pixaGetBoxaCount(pixas)) + L_WARNING("boxa size != n\n", procName); + pixaGetPixDimensions(pixas, 0, NULL, NULL, &d); + if (d != 1) + return (PIXA *)ERROR_PTR("depth not 1 bpp", procName, NULL); + + if (!sequence) + return (PIXA *)ERROR_PTR("sequence not defined", procName, NULL); + if (minw <= 0) minw = 1; + if (minh <= 0) minh = 1; + + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + for (i = 0; i < n; i++) { + pixaGetPixDimensions(pixas, i, &w, &h, NULL); + if (w >= minw && h >= minh) { + if ((pix1 = pixaGetPix(pixas, i, L_CLONE)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pix1 not found", procName, NULL); + } + if ((pix2 = pixMorphCompSequence(pix1, sequence, 0)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pix2 not made", procName, NULL); + } + pixaAddPix(pixad, pix2, L_INSERT); + box = pixaGetBox(pixas, i, L_COPY); + pixaAddBox(pixad, box, L_INSERT); + pixDestroy(&pix1); + } + } + + return pixad; +} + + +/*-----------------------------------------------------------------* + * Morph sequence operation on each region * + *-----------------------------------------------------------------*/ +/*! + * \brief pixMorphSequenceByRegion() + * + * \param[in] pixs 1 bpp + * \param[in] pixm mask specifying regions + * \param[in] sequence string specifying sequence + * \param[in] connectivity 4 or 8, used on mask + * \param[in] minw min width to consider; use 0 or 1 for any width + * \param[in] minh min height to consider; use 0 or 1 for any height + * \param[out] pboxa [optional] return boxa of c.c. in pixm + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixMorphCompSequence() for composing operation sequences.
+ *      (2) This operates separately on the region in pixs corresponding
+ *          to each c.c. in the mask pixm.  It differs from
+ *          pixMorphSequenceByComponent() in that the latter does not have
+ *          a pixm (mask), but instead operates independently on each
+ *          component in pixs.
+ *      (3) Dilation will NOT increase the region size; the result
+ *          is clipped to the size of the mask region.  This is necessary
+ *          to make regions independent after the operation.
+ *      (4) You can specify that the width and/or height of a region must
+ *          equal or exceed a minimum size for the operation to take place.
+ *      (5) Use NULL for %pboxa to avoid returning the boxa.
+ * 
+ */ +PIX * +pixMorphSequenceByRegion(PIX *pixs, + PIX *pixm, + const char *sequence, + l_int32 connectivity, + l_int32 minw, + l_int32 minh, + BOXA **pboxa) +{ +l_int32 n, i, x, y, w, h; +BOXA *boxa; +PIX *pix, *pixd; +PIXA *pixam, *pixad; + + PROCNAME("pixMorphSequenceByRegion"); + + if (pboxa) *pboxa = NULL; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixm) + return (PIX *)ERROR_PTR("pixm not defined", procName, NULL); + if (pixGetDepth(pixs) != 1 || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixs and pixm not both 1 bpp", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + if (minw <= 0) minw = 1; + if (minh <= 0) minh = 1; + + /* Get the c.c. of the mask */ + if ((boxa = pixConnComp(pixm, &pixam, connectivity)) == NULL) + return (PIX *)ERROR_PTR("boxa not made", procName, NULL); + + /* Operate on each region in pixs independently */ + pixad = pixaMorphSequenceByRegion(pixs, pixam, sequence, minw, minh); + pixaDestroy(&pixam); + boxaDestroy(&boxa); + if (!pixad) + return (PIX *)ERROR_PTR("pixad not made", procName, NULL); + + /* Display the result out into pixd */ + pixd = pixCreateTemplate(pixs); + n = pixaGetCount(pixad); + for (i = 0; i < n; i++) { + pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); + pix = pixaGetPix(pixad, i, L_CLONE); + pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); + pixDestroy(&pix); + } + + if (pboxa) + *pboxa = pixaGetBoxa(pixad, L_CLONE); + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaMorphSequenceByRegion() + * + * \param[in] pixs 1 bpp + * \param[in] pixam of 1 bpp mask elements + * \param[in] sequence string specifying sequence + * \param[in] minw min width to consider; use 0 or 1 for any width + * \param[in] minh min height to consider; use 0 or 1 for any height + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixMorphSequence() for composing operation sequences.
+ *      (2) This operates separately on each region in the input pixs
+ *          defined by the components in pixam.
+ *      (3) You can specify that the width and/or height of a mask
+ *          component must equal or exceed a minimum size for the
+ *          operation to take place.
+ *      (4) The input pixam should have a boxa giving the locations
+ *          of the regions in pixs.
+ * 
+ */ +PIXA * +pixaMorphSequenceByRegion(PIX *pixs, + PIXA *pixam, + const char *sequence, + l_int32 minw, + l_int32 minh) +{ +l_int32 n, i, w, h, same, maxd, fullpa, fullba; +BOX *box; +PIX *pix1, *pix2, *pix3; +PIXA *pixad; + + PROCNAME("pixaMorphSequenceByRegion"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIXA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (!sequence) + return (PIXA *)ERROR_PTR("sequence not defined", procName, NULL); + if (!pixam) + return (PIXA *)ERROR_PTR("pixam not defined", procName, NULL); + pixaVerifyDepth(pixam, &same, &maxd); + if (maxd != 1) + return (PIXA *)ERROR_PTR("mask depth not 1 bpp", procName, NULL); + pixaIsFull(pixam, &fullpa, &fullba); + if (!fullpa || !fullba) + return (PIXA *)ERROR_PTR("missing comps in pixam", procName, NULL); + n = pixaGetCount(pixam); + if (minw <= 0) minw = 1; + if (minh <= 0) minh = 1; + + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + + /* Use the rectangle to remove the appropriate part of pixs; + * then AND with the mask component to get the actual fg + * of pixs that is under the mask component. */ + for (i = 0; i < n; i++) { + pixaGetPixDimensions(pixam, i, &w, &h, NULL); + if (w >= minw && h >= minh) { + pix1 = pixaGetPix(pixam, i, L_CLONE); + box = pixaGetBox(pixam, i, L_COPY); + pix2 = pixClipRectangle(pixs, box, NULL); + pixAnd(pix2, pix2, pix1); + pix3 = pixMorphCompSequence(pix2, sequence, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (!pix3) { + boxDestroy(&box); + pixaDestroy(&pixad); + L_ERROR("pix3 not made in iter %d; aborting\n", procName, i); + break; + } + pixaAddPix(pixad, pix3, L_INSERT); + pixaAddBox(pixad, box, L_INSERT); + } + } + + return pixad; +} + + +/*-----------------------------------------------------------------* + * Union and intersection of parallel composite operations * + *-----------------------------------------------------------------*/ +/*! + * \brief pixUnionOfMorphOps() + * + * \param[in] pixs 1 bpp + * \param[in] sela + * \param[in] type L_MORPH_DILATE, etc. + * \return pixd union of the specified morphological operation + * on pixs for each Sel in the Sela, or NULL on error + */ +PIX * +pixUnionOfMorphOps(PIX *pixs, + SELA *sela, + l_int32 type) +{ +l_int32 n, i; +PIX *pixt, *pixd; +SEL *sel; + + PROCNAME("pixUnionOfMorphOps"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!sela) + return (PIX *)ERROR_PTR("sela not defined", procName, NULL); + n = selaGetCount(sela); + if (n == 0) + return (PIX *)ERROR_PTR("no sels in sela", procName, NULL); + if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && + type != L_MORPH_OPEN && type != L_MORPH_CLOSE && + type != L_MORPH_HMT) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + pixd = pixCreateTemplate(pixs); + for (i = 0; i < n; i++) { + sel = selaGetSel(sela, i); + if (type == L_MORPH_DILATE) + pixt = pixDilate(NULL, pixs, sel); + else if (type == L_MORPH_ERODE) + pixt = pixErode(NULL, pixs, sel); + else if (type == L_MORPH_OPEN) + pixt = pixOpen(NULL, pixs, sel); + else if (type == L_MORPH_CLOSE) + pixt = pixClose(NULL, pixs, sel); + else /* type == L_MORPH_HMT */ + pixt = pixHMT(NULL, pixs, sel); + pixOr(pixd, pixd, pixt); + pixDestroy(&pixt); + } + + return pixd; +} + + +/*! + * \brief pixIntersectionOfMorphOps() + * + * \param[in] pixs 1 bpp + * \param[in] sela + * \param[in] type L_MORPH_DILATE, etc. + * \return pixd intersection of the specified morphological operation + * on pixs for each Sel in the Sela, or NULL on error + */ +PIX * +pixIntersectionOfMorphOps(PIX *pixs, + SELA *sela, + l_int32 type) +{ +l_int32 n, i; +PIX *pixt, *pixd; +SEL *sel; + + PROCNAME("pixIntersectionOfMorphOps"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!sela) + return (PIX *)ERROR_PTR("sela not defined", procName, NULL); + n = selaGetCount(sela); + if (n == 0) + return (PIX *)ERROR_PTR("no sels in sela", procName, NULL); + if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && + type != L_MORPH_OPEN && type != L_MORPH_CLOSE && + type != L_MORPH_HMT) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixSetAll(pixd); + for (i = 0; i < n; i++) { + sel = selaGetSel(sela, i); + if (type == L_MORPH_DILATE) + pixt = pixDilate(NULL, pixs, sel); + else if (type == L_MORPH_ERODE) + pixt = pixErode(NULL, pixs, sel); + else if (type == L_MORPH_OPEN) + pixt = pixOpen(NULL, pixs, sel); + else if (type == L_MORPH_CLOSE) + pixt = pixClose(NULL, pixs, sel); + else /* type == L_MORPH_HMT */ + pixt = pixHMT(NULL, pixs, sel); + pixAnd(pixd, pixd, pixt); + pixDestroy(&pixt); + } + + return pixd; +} + + + +/*-----------------------------------------------------------------* + * Selective connected component filling * + *-----------------------------------------------------------------*/ +/*! + * \brief pixSelectiveConnCompFill() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \param[in] minw min width to consider; use 0 or 1 for any width + * \param[in] minh min height to consider; use 0 or 1 for any height + * \return pix with holes filled in selected c.c., or NULL on error + */ +PIX * +pixSelectiveConnCompFill(PIX *pixs, + l_int32 connectivity, + l_int32 minw, + l_int32 minh) +{ +l_int32 n, i, x, y, w, h; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixa; + + PROCNAME("pixSelectiveConnCompFill"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (minw <= 0) minw = 1; + if (minh <= 0) minh = 1; + + if ((boxa = pixConnComp(pixs, &pixa, connectivity)) == NULL) + return (PIX *)ERROR_PTR("boxa not made", procName, NULL); + n = boxaGetCount(boxa); + pixd = pixCopy(NULL, pixs); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + if (w >= minw && h >= minh) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + if ((pix2 = pixHolesByFilling(pix1, 12 - connectivity)) == NULL) { + L_ERROR("pix2 not made in iter %d\n", procName, i); + pixDestroy(&pix1); + continue; + } + pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix2, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + } + pixaDestroy(&pixa); + boxaDestroy(&boxa); + + return pixd; +} + + +/*-----------------------------------------------------------------* + * Removal of matched patterns * + *-----------------------------------------------------------------*/ +/*! + * \brief pixRemoveMatchedPattern() + * + * \param[in] pixs input image, 1 bpp + * \param[in] pixp pattern to be removed from image, 1 bpp + * \param[in] pixe image after erosion by Sel that approximates pixp + * \param[in] x0, y0 center of Sel + * \param[in] dsize number of pixels on each side by which pixp is + * dilated before being subtracted from pixs; + * valid values are {0, 1, 2, 3, 4} + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *    (1) This is in-place.
+ *    (2) You can use various functions in selgen to create a Sel
+ *        that is used to generate pixe from pixs.
+ *    (3) This function is applied after pixe has been computed.
+ *        It finds the centroid of each c.c., and subtracts
+ *        (the appropriately dilated version of) pixp, with the center
+ *        of the Sel used to align pixp with pixs.
+ * 
+ */ +l_ok +pixRemoveMatchedPattern(PIX *pixs, + PIX *pixp, + PIX *pixe, + l_int32 x0, + l_int32 y0, + l_int32 dsize) +{ +l_int32 i, nc, x, y, w, h, xb, yb; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixa; +PTA *pta; +SEL *sel; + + PROCNAME("pixRemoveMatchedPattern"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixp) + return ERROR_INT("pixp not defined", procName, 1); + if (!pixe) + return ERROR_INT("pixe not defined", procName, 1); + if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || + pixGetDepth(pixe) != 1) + return ERROR_INT("all input pix not 1 bpp", procName, 1); + if (dsize < 0 || dsize > 4) + return ERROR_INT("dsize not in {0,1,2,3,4}", procName, 1); + + /* Find the connected components and their centroids */ + boxa = pixConnComp(pixe, &pixa, 8); + if ((nc = boxaGetCount(boxa)) == 0) { + L_WARNING("no matched patterns\n", procName); + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return 0; + } + pta = pixaCentroids(pixa); + pixaDestroy(&pixa); + + /* Optionally dilate the pattern, first adding a border that + * is large enough to accommodate the dilated pixels */ + sel = NULL; + if (dsize > 0) { + sel = selCreateBrick(2 * dsize + 1, 2 * dsize + 1, dsize, dsize, + SEL_HIT); + pix1 = pixAddBorder(pixp, dsize, 0); + pix2 = pixDilate(NULL, pix1, sel); + selDestroy(&sel); + pixDestroy(&pix1); + } else { + pix2 = pixClone(pixp); + } + + /* Subtract out each dilated pattern. The centroid of each + * component is located at: + * (box->x + x, box->y + y) + * and the 'center' of the pattern used in making pixe is located at + * (x0 + dsize, (y0 + dsize) + * relative to the UL corner of the pattern. The center of the + * pattern is placed at the center of the component. */ + pixGetDimensions(pix2, &w, &h, NULL); + for (i = 0; i < nc; i++) { + ptaGetIPt(pta, i, &x, &y); + boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); + pixRasterop(pixs, xb + x - x0 - dsize, yb + y - y0 - dsize, + w, h, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); + } + + boxaDestroy(&boxa); + ptaDestroy(&pta); + pixDestroy(&pix2); + return 0; +} + + +/*-----------------------------------------------------------------* + * Display of matched patterns * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDisplayMatchedPattern() + * + * \param[in] pixs input image, 1 bpp + * \param[in] pixp pattern to be removed from image, 1 bpp + * \param[in] pixe image after erosion by Sel that approximates pixp + * \param[in] x0, y0 center of Sel + * \param[in] color to paint the matched patterns; 0xrrggbb00 + * \param[in] scale reduction factor for output pixd + * \param[in] nlevels if scale < 1.0, threshold to this number of levels + * \return pixd 8 bpp, colormapped, or NULL on error + * + *
+ * Notes:
+ *    (1) A 4 bpp colormapped image is generated.
+ *    (2) If scale <= 1.0, do scale to gray for the output, and threshold
+ *        to nlevels of gray.
+ *    (3) You can use various functions in selgen to create a Sel
+ *        that will generate pixe from pixs.
+ *    (4) This function is applied after pixe has been computed.
+ *        It finds the centroid of each c.c., and colors the output
+ *        pixels using pixp (appropriately aligned) as a stencil.
+ *        Alignment is done using the origin of the Sel and the
+ *        centroid of the eroded image to place the stencil pixp.
+ * 
+ */ +PIX * +pixDisplayMatchedPattern(PIX *pixs, + PIX *pixp, + PIX *pixe, + l_int32 x0, + l_int32 y0, + l_uint32 color, + l_float32 scale, + l_int32 nlevels) +{ +l_int32 i, nc, xb, yb, x, y, xi, yi, rval, gval, bval; +BOXA *boxa; +PIX *pixd, *pixt, *pixps; +PIXA *pixa; +PTA *pta; +PIXCMAP *cmap; + + PROCNAME("pixDisplayMatchedPattern"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixp) + return (PIX *)ERROR_PTR("pixp not defined", procName, NULL); + if (!pixe) + return (PIX *)ERROR_PTR("pixe not defined", procName, NULL); + if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || + pixGetDepth(pixe) != 1) + return (PIX *)ERROR_PTR("all input pix not 1 bpp", procName, NULL); + if (scale > 1.0 || scale <= 0.0) { + L_WARNING("scale > 1.0 or < 0.0; setting to 1.0\n", procName); + scale = 1.0; + } + + /* Find the connected components and their centroids */ + boxa = pixConnComp(pixe, &pixa, 8); + if ((nc = boxaGetCount(boxa)) == 0) { + L_WARNING("no matched patterns\n", procName); + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return 0; + } + pta = pixaCentroids(pixa); + + extractRGBValues(color, &rval, &gval, &bval); + if (scale == 1.0) { /* output 4 bpp at full resolution */ + pixd = pixConvert1To4(NULL, pixs, 0, 1); + cmap = pixcmapCreate(4); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixSetColormap(pixd, cmap); + + /* Paint through pixp for each match location. The centroid of each + * component in pixe is located at: + * (box->x + x, box->y + y) + * and the 'center' of the pattern used in making pixe is located at + * (x0, y0) + * relative to the UL corner of the pattern. The center of the + * pattern is placed at the center of the component. */ + for (i = 0; i < nc; i++) { + ptaGetIPt(pta, i, &x, &y); + boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); + pixSetMaskedCmap(pixd, pixp, xb + x - x0, yb + y - y0, + rval, gval, bval); + } + } else { /* output 4 bpp downscaled */ + pixt = pixScaleToGray(pixs, scale); + pixd = pixThresholdTo4bpp(pixt, nlevels, 1); + pixps = pixScaleBySampling(pixp, scale, scale); + + for (i = 0; i < nc; i++) { + ptaGetIPt(pta, i, &x, &y); + boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); + xi = (l_int32)(scale * (xb + x - x0)); + yi = (l_int32)(scale * (yb + y - y0)); + pixSetMaskedCmap(pixd, pixps, xi, yi, rval, gval, bval); + } + pixDestroy(&pixt); + pixDestroy(&pixps); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + ptaDestroy(&pta); + return pixd; +} + + +/*------------------------------------------------------------------------* + * Extension of pixa by iterative erosion or dilation (and by scaling) * + *------------------------------------------------------------------------*/ +/*! + * \brief pixaExtendByMorph() + * + * \param[in] pixas + * \param[in] type L_MORPH_DILATE, L_MORPH_ERODE + * \param[in] niters + * \param[in] sel used for dilation, erosion; uses 2x2 if null + * \param[in] include 1 to include a copy of the input pixas in pixad; + * 0 to omit + * \return pixad with derived pix, using all iterations, or NULL on error + * + *
+ * Notes:
+ *    (1) This dilates or erodes every pix in %pixas, iteratively,
+ *        using the input Sel (or, if null, a 2x2 Sel by default),
+ *        and puts the results in %pixad.
+ *    (2) If %niters <= 0, this is a no-op; it returns a clone of pixas.
+ *    (3) If %include == 1, the output %pixad contains all the pix
+ *        in %pixas.  Otherwise, it doesn't, but pixaJoin() can be
+ *        used later to join pixas with pixad.
+ * 
+ */ +PIXA * +pixaExtendByMorph(PIXA *pixas, + l_int32 type, + l_int32 niters, + SEL *sel, + l_int32 include) +{ +l_int32 maxdepth, i, j, n; +PIX *pix0, *pix1, *pix2; +SEL *selt; +PIXA *pixad; + + PROCNAME("pixaExtendByMorph"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas undefined", procName, NULL); + if (niters <= 0) { + L_INFO("niters = %d; nothing to do\n", procName, niters); + return pixaCopy(pixas, L_CLONE); + } + if (type != L_MORPH_DILATE && type != L_MORPH_ERODE) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + pixaGetDepthInfo(pixas, &maxdepth, NULL); + if (maxdepth > 1) + return (PIXA *)ERROR_PTR("some pix have bpp > 1", procName, NULL); + + if (!sel) + selt = selCreateBrick(2, 2, 0, 0, SEL_HIT); /* default */ + else + selt = selCopy(sel); + n = pixaGetCount(pixas); + pixad = pixaCreate(n * niters); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + if (include) pixaAddPix(pixad, pix1, L_COPY); + pix0 = pix1; /* need to keep the handle to destroy the clone */ + for (j = 0; j < niters; j++) { + if (type == L_MORPH_DILATE) { + pix2 = pixDilate(NULL, pix1, selt); + } else { /* L_MORPH_ERODE */ + pix2 = pixErode(NULL, pix1, selt); + } + pixaAddPix(pixad, pix2, L_INSERT); + pix1 = pix2; /* owned by pixad; do not destroy */ + } + pixDestroy(&pix0); + } + + selDestroy(&selt); + return pixad; +} + + +/*! + * \brief pixaExtendByScaling() + * + * \param[in] pixas + * \param[in] nasc numa of scaling factors + * \param[in] type L_HORIZ, L_VERT, L_BOTH_DIRECTIONS + * \param[in] include 1 to include a copy of the input pixas in pixad; + * 0 to omit + * \return pixad with derived pix, using all scalings, or NULL on error + * + *
+ * Notes:
+ *    (1) This scales every pix in %pixas by each factor in %nasc.
+ *        and puts the results in %pixad.
+ *    (2) If %include == 1, the output %pixad contains all the pix
+ *        in %pixas.  Otherwise, it doesn't, but pixaJoin() can be
+ *        used later to join pixas with pixad.
+ * 
+ */ +PIXA * +pixaExtendByScaling(PIXA *pixas, + NUMA *nasc, + l_int32 type, + l_int32 include) +{ +l_int32 i, j, n, nsc, w, h, scalew, scaleh; +l_float32 scalefact; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaExtendByScaling"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas undefined", procName, NULL); + if (!nasc || numaGetCount(nasc) == 0) + return (PIXA *)ERROR_PTR("nasc undefined or empty", procName, NULL); + if (type != L_HORIZ && type != L_VERT && type != L_BOTH_DIRECTIONS) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + + n = pixaGetCount(pixas); + nsc = numaGetCount(nasc); + if ((pixad = pixaCreate(n * (nsc + 1))) == NULL) { + L_ERROR("pixad not made: n = %d, nsc = %d\n", procName, n, nsc); + return NULL; + } + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + if (include) pixaAddPix(pixad, pix1, L_COPY); + pixGetDimensions(pix1, &w, &h, NULL); + for (j = 0; j < nsc; j++) { + numaGetFValue(nasc, j, &scalefact); + scalew = w; + scaleh = h; + if (type == L_HORIZ || type == L_BOTH_DIRECTIONS) + scalew = w * scalefact; + if (type == L_VERT || type == L_BOTH_DIRECTIONS) + scaleh = h * scalefact; + pix2 = pixScaleToSize(pix1, scalew, scaleh); + pixaAddPix(pixad, pix2, L_INSERT); + } + pixDestroy(&pix1); + } + return pixad; +} + + +/*-----------------------------------------------------------------* + * Iterative morphological seed filling * + *-----------------------------------------------------------------*/ +/*! + * \brief pixSeedfillMorph() + * + * \param[in] pixs seed + * \param[in] pixm mask + * \param[in] maxiters use 0 to go to completion + * \param[in] connectivity 4 or 8 + * \return pixd after filling into the mask or NULL on error + * + *
+ * Notes:
+ *    (1) This is in general a very inefficient method for filling
+ *        from a seed into a mask.  Use it for a small number of iterations,
+ *        but if you expect more than a few iterations, use
+ *        pixSeedfillBinary().
+ *    (2) We use a 3x3 brick SEL for 8-cc filling and a 3x3 plus SEL for 4-cc.
+ * 
+ */ +PIX * +pixSeedfillMorph(PIX *pixs, + PIX *pixm, + l_int32 maxiters, + l_int32 connectivity) +{ +l_int32 same, i; +PIX *pixt, *pixd, *temp; +SEL *sel_3; + + PROCNAME("pixSeedfillMorph"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!pixm) + return (PIX *)ERROR_PTR("mask pix not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, NULL); + if (maxiters <= 0) maxiters = 1000; + if (pixSizesEqual(pixs, pixm) == 0) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, NULL); + + if ((sel_3 = selCreateBrick(3, 3, 1, 1, SEL_HIT)) == NULL) + return (PIX *)ERROR_PTR("sel_3 not made", procName, NULL); + if (connectivity == 4) { /* remove corner hits to make a '+' */ + selSetElement(sel_3, 0, 0, SEL_DONT_CARE); + selSetElement(sel_3, 2, 2, SEL_DONT_CARE); + selSetElement(sel_3, 2, 0, SEL_DONT_CARE); + selSetElement(sel_3, 0, 2, SEL_DONT_CARE); + } + + pixt = pixCopy(NULL, pixs); + pixd = pixCreateTemplate(pixs); + for (i = 1; i <= maxiters; i++) { + pixDilate(pixd, pixt, sel_3); + pixAnd(pixd, pixd, pixm); + pixEqual(pixd, pixt, &same); + if (same || i == maxiters) + break; + else + SWAP(pixt, pixd); + } + fprintf(stderr, " Num iters in binary reconstruction = %d\n", i); + + pixDestroy(&pixt); + selDestroy(&sel_3); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Granulometry on binary images * + *-----------------------------------------------------------------*/ +/*! + * \brief pixRunHistogramMorph() + * + * \param[in] pixs 1 bpp + * \param[in] runtype L_RUN_OFF, L_RUN_ON + * \param[in] direction L_HORIZ, L_VERT + * \param[in] maxsize size of largest runlength counted + * \return numa of run-lengths + */ +NUMA * +pixRunHistogramMorph(PIX *pixs, + l_int32 runtype, + l_int32 direction, + l_int32 maxsize) +{ +l_int32 count, i, size; +l_float32 val; +NUMA *na, *nah; +PIX *pix1, *pix2, *pix3; +SEL *sel_2a; + + PROCNAME("pixRunHistogramMorph"); + + if (!pixs) + return (NUMA *)ERROR_PTR("seed pix not defined", procName, NULL); + if (runtype != L_RUN_OFF && runtype != L_RUN_ON) + return (NUMA *)ERROR_PTR("invalid run type", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT) + return (NUMA *)ERROR_PTR("direction not in {L_HORIZ, L_VERT}", + procName, NULL); + if (pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs must be binary", procName, NULL); + + if (direction == L_HORIZ) + sel_2a = selCreateBrick(1, 2, 0, 0, SEL_HIT); + else /* direction == L_VERT */ + sel_2a = selCreateBrick(2, 1, 0, 0, SEL_HIT); + if (!sel_2a) + return (NUMA *)ERROR_PTR("sel_2a not made", procName, NULL); + + if (runtype == L_RUN_OFF) { + if ((pix1 = pixCopy(NULL, pixs)) == NULL) { + selDestroy(&sel_2a); + return (NUMA *)ERROR_PTR("pix1 not made", procName, NULL); + } + pixInvert(pix1, pix1); + } else { /* runtype == L_RUN_ON */ + pix1 = pixClone(pixs); + } + + /* Get pixel counts at different stages of erosion */ + na = numaCreate(0); + pix2 = pixCreateTemplate(pixs); + pix3 = pixCreateTemplate(pixs); + pixCountPixels(pix1, &count, NULL); + numaAddNumber(na, count); + pixErode(pix2, pix1, sel_2a); + pixCountPixels(pix2, &count, NULL); + numaAddNumber(na, count); + for (i = 0; i < maxsize / 2; i++) { + pixErode(pix3, pix2, sel_2a); + pixCountPixels(pix3, &count, NULL); + numaAddNumber(na, count); + pixErode(pix2, pix3, sel_2a); + pixCountPixels(pix2, &count, NULL); + numaAddNumber(na, count); + } + + /* Compute length histogram */ + size = numaGetCount(na); + nah = numaCreate(size); + numaAddNumber(nah, 0); /* number at length 0 */ + for (i = 1; i < size - 1; i++) { + val = na->array[i+1] - 2 * na->array[i] + na->array[i-1]; + numaAddNumber(nah, val); + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + selDestroy(&sel_2a); + numaDestroy(&na); + return nah; +} + + +/*-----------------------------------------------------------------* + * Composite operations on grayscale images * + *-----------------------------------------------------------------*/ +/*! + * \brief pixTophat() + * + * \param[in] pixs 1 bpp + * \param[in] hsize of Sel; must be odd; origin implicitly in center + * \param[in] vsize ditto + * \param[in] type L_TOPHAT_WHITE: image - opening + * L_TOPHAT_BLACK: closing - image + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Sel is a brick with all elements being hits
+ *      (2) If hsize = vsize = 1, returns an image with all 0 data.
+ *      (3) The L_TOPHAT_WHITE flag emphasizes small bright regions,
+ *          whereas the L_TOPHAT_BLACK flag emphasizes small dark regions.
+ *          The L_TOPHAT_WHITE tophat can be accomplished by doing a
+ *          L_TOPHAT_BLACK tophat on the inverse, or v.v.
+ * 
+ */ +PIX * +pixTophat(PIX *pixs, + l_int32 hsize, + l_int32 vsize, + l_int32 type) +{ +PIX *pixt, *pixd; + + PROCNAME("pixTophat"); + + if (!pixs) + return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) + return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", + procName, NULL); + + if (hsize == 1 && vsize == 1) + return pixCreateTemplate(pixs); + + switch (type) + { + case L_TOPHAT_WHITE: + if ((pixt = pixOpenGray(pixs, hsize, vsize)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixSubtractGray(NULL, pixs, pixt); + pixDestroy(&pixt); + break; + case L_TOPHAT_BLACK: + if ((pixd = pixCloseGray(pixs, hsize, vsize)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSubtractGray(pixd, pixd, pixs); + break; + default: + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + } + + return pixd; +} + + +/*! + * \brief pixHDome() + * + * \param[in] pixs 8 bpp, filling mask + * \param[in] height of seed below the filling maskhdome; must be >= 0 + * \param[in] connectivity 4 or 8 + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) It is more efficient to use a connectivity of 4 for the fill.
+ *      (2) This fills bumps to some level, and extracts the unfilled
+ *          part of the bump.  To extract the troughs of basins, first
+ *          invert pixs and then apply pixHDome().
+ *      (3) It is useful to compare the HDome operation with the TopHat.
+ *          The latter extracts peaks or valleys that have a width
+ *          not exceeding the size of the structuring element used
+ *          in the opening or closing, rsp.  The height of the peak is
+ *          irrelevant.  By contrast, for the HDome, the gray seedfill
+ *          is used to extract all peaks that have a height not exceeding
+ *          a given value, regardless of their width!
+ *      (4) Slightly more precisely, suppose you set 'height' = 40.
+ *          Then all bumps in pixs with a height greater than or equal
+ *          to 40 become, in pixd, bumps with a max value of exactly 40.
+ *          All shorter bumps have a max value in pixd equal to the height
+ *          of the bump.
+ *      (5) The method: the filling mask, pixs, is the image whose peaks
+ *          are to be extracted.  The height of a peak is the distance
+ *          between the top of the peak and the highest "leak" to the
+ *          outside -- think of a sombrero, where the leak occurs
+ *          at the highest point on the rim.
+ *            (a) Generate a seed, pixd, by subtracting some value, p, from
+ *                each pixel in the filling mask, pixs.  The value p is
+ *                the 'height' input to this function.
+ *            (b) Fill in pixd starting with this seed, clipping by pixs,
+ *                in the way described in seedfillGrayLow().  The filling
+ *                stops before the peaks in pixs are filled.
+ *                For peaks that have a height > p, pixd is filled to
+ *                the level equal to the (top-of-the-peak - p).
+ *                For peaks of height < p, the peak is left unfilled
+ *                from its highest saddle point (the leak to the outside).
+ *            (c) Subtract the filled seed (pixd) from the filling mask (pixs).
+ *          Note that in this procedure, everything is done starting
+ *          with the filling mask, pixs.
+ *      (6) For segmentation, the resulting image, pixd, can be thresholded
+ *          and used as a seed for another filling operation.
+ * 
+ */ +PIX * +pixHDome(PIX *pixs, + l_int32 height, + l_int32 connectivity) +{ +PIX *pixsd, *pixd; + + PROCNAME("pixHDome"); + + if (!pixs) + return (PIX *)ERROR_PTR("src pix not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (height < 0) + return (PIX *)ERROR_PTR("height not >= 0", procName, NULL); + if (height == 0) + return pixCreateTemplate(pixs); + + if ((pixsd = pixCopy(NULL, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixsd not made", procName, NULL); + pixAddConstantGray(pixsd, -height); + pixSeedfillGray(pixsd, pixs, connectivity); + pixd = pixSubtractGray(NULL, pixs, pixsd); + pixDestroy(&pixsd); + return pixd; +} + + +/*! + * \brief pixFastTophat() + * + * \param[in] pixs 8 bpp + * \param[in] xsize width of max/min op, smoothing; any integer >= 1 + * \param[in] ysize height of max/min op, smoothing; any integer >= 1 + * \param[in] type L_TOPHAT_WHITE: image - min + * L_TOPHAT_BLACK: max - image + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Don't be fooled. This is NOT a tophat.  It is a tophat-like
+ *          operation, where the result is similar to what you'd get
+ *          if you used an erosion instead of an opening, or a dilation
+ *          instead of a closing.
+ *      (2) Instead of opening or closing at full resolution, it does
+ *          a fast downscale/minmax operation, then a quick small smoothing
+ *          at low res, a replicative expansion of the "background"
+ *          to full res, and finally a removal of the background level
+ *          from the input image.  The smoothing step may not be important.
+ *      (3) It does not remove noise as well as a tophat, but it is
+ *          5 to 10 times faster.
+ *          If you need the preciseness of the tophat, don't use this.
+ *      (4) The L_TOPHAT_WHITE flag emphasizes small bright regions,
+ *          whereas the L_TOPHAT_BLACK flag emphasizes small dark regions.
+ * 
+ */ +PIX * +pixFastTophat(PIX *pixs, + l_int32 xsize, + l_int32 ysize, + l_int32 type) +{ +PIX *pix1, *pix2, *pix3, *pixd; + + PROCNAME("pixFastTophat"); + + if (!pixs) + return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (xsize < 1 || ysize < 1) + return (PIX *)ERROR_PTR("size < 1", procName, NULL); + if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) + return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", + procName, NULL); + + if (xsize == 1 && ysize == 1) + return pixCreateTemplate(pixs); + + switch (type) + { + case L_TOPHAT_WHITE: + if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MIN)) + == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ + pix3 = pixScaleBySampling(pix2, xsize, ysize); + pixd = pixSubtractGray(NULL, pixs, pix3); + pixDestroy(&pix3); + break; + case L_TOPHAT_BLACK: + if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MAX)) + == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ + pixd = pixScaleBySampling(pix2, xsize, ysize); + pixSubtractGray(pixd, pixd, pixs); + break; + default: + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief pixMorphGradient() + * + * \param[in] pixs 8 bpp + * \param[in] hsize sel width; must be odd; origin implicitly in center + * \param[in] vsize sel height + * \param[in] smoothing half-width of convolution smoothing filter. + * The width is (2 * smoothing + 1, so 0 is no-op. + * \return pixd, or NULL on error + */ +PIX * +pixMorphGradient(PIX *pixs, + l_int32 hsize, + l_int32 vsize, + l_int32 smoothing) +{ +PIX *pixg, *pixd; + + PROCNAME("pixMorphGradient"); + + if (!pixs) + return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); + if ((hsize & 1) == 0 ) { + L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); + hsize++; + } + if ((vsize & 1) == 0 ) { + L_WARNING("vert sel size must be odd; increasing by 1\n", procName); + vsize++; + } + + /* Optionally smooth first to remove noise. + * If smoothing is 0, just get a copy */ + pixg = pixBlockconvGray(pixs, NULL, smoothing, smoothing); + + /* This gives approximately the gradient of a transition */ + pixd = pixDilateGray(pixg, hsize, vsize); + pixSubtractGray(pixd, pixd, pixg); + pixDestroy(&pixg); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Centroid of component * + *-----------------------------------------------------------------*/ +/*! + * \brief pixaCentroids() + * + * \param[in] pixa of components; 1 or 8 bpp + * \return pta of centroids relative to the UL corner of + * each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) An error message is returned if any pix has something other
+ *          than 1 bpp or 8 bpp depth, and the centroid from that pix
+ *          is saved as (0, 0).
+ * 
+ */ +PTA * +pixaCentroids(PIXA *pixa) +{ +l_int32 i, n; +l_int32 *centtab = NULL; +l_int32 *sumtab = NULL; +l_float32 x, y; +PIX *pix; +PTA *pta; + + PROCNAME("pixaCentroids"); + + if (!pixa) + return (PTA *)ERROR_PTR("pixa not defined", procName, NULL); + if ((n = pixaGetCount(pixa)) == 0) + return (PTA *)ERROR_PTR("no pix in pixa", procName, NULL); + + if ((pta = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("pta not defined", procName, NULL); + centtab = makePixelCentroidTab8(); + sumtab = makePixelSumTab8(); + + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + if (pixCentroid(pix, centtab, sumtab, &x, &y) == 1) + L_ERROR("centroid failure for pix %d\n", procName, i); + pixDestroy(&pix); + ptaAddPt(pta, x, y); + } + + LEPT_FREE(centtab); + LEPT_FREE(sumtab); + return pta; +} + + +/*! + * \brief pixCentroid() + * + * \param[in] pix 1 or 8 bpp + * \param[in] centtab [optional] table for finding centroids; can be null + * \param[in] sumtab [optional] table for finding pixel sums; can be null + * \param[out] pxave x coordinate of centroid, relative to the UL corner + * of the pix + * \param[out] pyave y coordinate of centroid, relative to the UL corner + * of the pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The sum and centroid tables are only used for 1 bpp.
+ *      (2) Any table not passed in will be made internally and destroyed
+ *          after use.
+ * 
+ */ +l_ok +pixCentroid(PIX *pix, + l_int32 *centtab, + l_int32 *sumtab, + l_float32 *pxave, + l_float32 *pyave) +{ +l_int32 w, h, d, i, j, wpl, pixsum, rowsum, val; +l_float32 xsum, ysum; +l_uint32 *data, *line; +l_uint32 word; +l_uint8 byte; +l_int32 *ctab, *stab; + + PROCNAME("pixCentroid"); + + if (!pxave || !pyave) + return ERROR_INT("&pxave and &pyave not defined", procName, 1); + *pxave = *pyave = 0.0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 8) + return ERROR_INT("pix not 1 or 8 bpp", procName, 1); + + ctab = centtab; + stab = sumtab; + if (d == 1) { + pixSetPadBits(pix, 0); + if (!centtab) + ctab = makePixelCentroidTab8(); + if (!sumtab) + stab = makePixelSumTab8(); + } + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + xsum = ysum = 0.0; + pixsum = 0; + if (d == 1) { + for (i = 0; i < h; i++) { + /* The body of this loop computes the sum of the set + * (1) bits on this row, weighted by their distance + * from the left edge of pix, and accumulates that into + * xsum; it accumulates their distance from the top + * edge of pix into ysum, and their total count into + * pixsum. It's equivalent to + * for (j = 0; j < w; j++) { + * if (GET_DATA_BIT(line, j)) { + * xsum += j; + * ysum += i; + * pixsum++; + * } + * } + */ + line = data + wpl * i; + rowsum = 0; + for (j = 0; j < wpl; j++) { + word = line[j]; + if (word) { + byte = word & 0xff; + rowsum += stab[byte]; + xsum += ctab[byte] + (j * 32 + 24) * stab[byte]; + byte = (word >> 8) & 0xff; + rowsum += stab[byte]; + xsum += ctab[byte] + (j * 32 + 16) * stab[byte]; + byte = (word >> 16) & 0xff; + rowsum += stab[byte]; + xsum += ctab[byte] + (j * 32 + 8) * stab[byte]; + byte = (word >> 24) & 0xff; + rowsum += stab[byte]; + xsum += ctab[byte] + j * 32 * stab[byte]; + } + } + pixsum += rowsum; + ysum += rowsum * i; + } + if (pixsum == 0) { + L_WARNING("no ON pixels in pix\n", procName); + } else { + *pxave = xsum / (l_float32)pixsum; + *pyave = ysum / (l_float32)pixsum; + } + } else { /* d == 8 */ + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(line, j); + xsum += val * j; + ysum += val * i; + pixsum += val; + } + } + if (pixsum == 0) { + L_WARNING("all pixels are 0\n", procName); + } else { + *pxave = xsum / (l_float32)pixsum; + *pyave = ysum / (l_float32)pixsum; + } + } + + if (!centtab) LEPT_FREE(ctab); + if (!sumtab) LEPT_FREE(stab); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/morphdwa.c b/3rdparty/hgOCR/leptonica/morphdwa.c new file mode 100644 index 00000000..b5da0b37 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/morphdwa.c @@ -0,0 +1,1596 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file morphdwa.c + *
+ *
+ *    Binary morphological (dwa) ops with brick Sels
+ *         PIX     *pixDilateBrickDwa()
+ *         PIX     *pixErodeBrickDwa()
+ *         PIX     *pixOpenBrickDwa()
+ *         PIX     *pixCloseBrickDwa()
+ *
+ *    Binary composite morphological (dwa) ops with brick Sels
+ *         PIX     *pixDilateCompBrickDwa()
+ *         PIX     *pixErodeCompBrickDwa()
+ *         PIX     *pixOpenCompBrickDwa()
+ *         PIX     *pixCloseCompBrickDwa()
+ *
+ *    Binary extended composite morphological (dwa) ops with brick Sels
+ *         PIX     *pixDilateCompBrickExtendDwa()
+ *         PIX     *pixErodeCompBrickExtendDwa()
+ *         PIX     *pixOpenCompBrickExtendDwa()
+ *         PIX     *pixCloseCompBrickExtendDwa()
+ *         l_int32  getExtendedCompositeParameters()
+ *
+ *    These are higher-level interfaces for dwa morphology with brick Sels.
+ *    Because many morphological operations are performed using
+ *    separable brick Sels, it is useful to have a simple interface
+ *    for this.
+ *
+ *    We have included all 58 of the brick Sels that are generated
+ *    by selaAddBasic().  These are sufficient for all the decomposable
+ *    bricks up to size 63, which is the limit for dwa Sels with
+ *    origins at the center of the Sel.
+ *
+ *    All three sets can be used as the basic interface for general
+ *    brick operations.  Here are the internal calling sequences:
+ *
+ *      (1) If you try to apply a non-decomposable operation, such as
+ *          pixErodeBrickDwa(), with a Sel size that doesn't exist,
+ *          this calls a decomposable operation, pixErodeCompBrickDwa(),
+ *          instead.  This can differ in linear Sel size by up to
+ *          2 pixels from the request.
+ *
+ *      (2) If either Sel brick dimension is greater than 63, the extended
+ *          composite function is called.
+ *
+ *      (3) The extended composite function calls the composite function
+ *          a number of times with size 63, and once with size < 63.
+ *          Because each operation with a size of 63 is done compositely
+ *          with 7 x 9 (exactly 63), the net result is correct in
+ *          length to within 2 pixels.
+ *
+ *    For composite operations, both using a comb and extended (beyond 63),
+ *    horizontal and vertical operations are composed separately
+ *    and sequentially.
+ *
+ *    We have also included use of all the 76 comb Sels that are generated
+ *    by selaAddDwaCombs().  The generated code is in dwacomb.2.c
+ *    and dwacomblow.2.c.  These are used for the composite dwa
+ *    brick operations.
+ *
+ *    The non-composite brick operations, such as pixDilateBrickDwa(),
+ *    will call the associated composite operation in situations where
+ *    the requisite brick Sel has not been compiled into fmorphgen*.1.c.
+ *
+ *    If you want to use brick Sels that are not represented in the
+ *    basic set of 58, you must generate the dwa code to implement them.
+ *    You have three choices for how to use these:
+ *
+ *    (1) Add both the new Sels and the dwa code to the library:
+ *        ~ For simplicity, add your new brick Sels to those defined
+ *          in selaAddBasic().
+ *        ~ Recompile the library.
+ *        ~ Make prog/fmorphautogen.
+ *        ~ Run prog/fmorphautogen, to generate new versions of the
+ *          dwa code in fmorphgen.1.c and fmorphgenlow.1.c.
+ *        ~ Copy these two files to src.
+ *        ~ Recompile the library again.
+ *        ~ Use the new brick Sels in your program and compile it.
+ *
+ *    (2) Make both the new Sels and dwa code outside the library,
+ *        and link it directly to an executable:
+ *        ~ Write a function to generate the new Sels in a Sela, and call
+ *          fmorphautogen(sela, , filename) to generate the code.
+ *        ~ Compile your program that uses the newly generated function
+ *          pixMorphDwa_(), and link to the two new C files.
+ *
+ *    (3) Make the new Sels in the library and use the dwa code outside it:
+ *        ~ Add code in the library to generate your new brick Sels.
+ *          (It is suggested that you NOT add these Sels to the
+ *          selaAddBasic() function; write a new function that generates
+ *          a new Sela.)
+ *        ~ Recompile the library.
+ *        ~ Write a small program that generates the Sela and calls
+ *          fmorphautogen(sela, , filename) to generate the code.
+ *        ~ Compile your program that uses the newly generated function
+ *          pixMorphDwa_(), and link to the two new C files.
+ *       As an example of this approach, see prog/dwamorph*_reg.c:
+ *        ~ added selaAddDwaLinear() to sel2.c
+ *        ~ wrote dwamorph1_reg.c, to generate the dwa code.
+ *        ~ compiled and linked the generated code with the application,
+ *          dwamorph2_reg.c.  (Note: because this was a regression test,
+ *          dwamorph1_reg also builds and runs the application program.)
+ * 
+ */ + +#include "allheaders.h" + +#ifndef NO_CONSOLE_IO +#define DEBUG_SEL_LOOKUP 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-----------------------------------------------------------------* + * Binary morphological (dwa) ops with brick Sels * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDilateBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement 2D brick Sels, using linear Sels generated
+ *          with selaAddBasic().
+ *      (2) A brick Sel has hits for all elements.
+ *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (6) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (7) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixDilateBrickDwa(NULL, pixs, ...);
+ *          (b) pixDilateBrickDwa(pixs, pixs, ...);
+ *          (c) pixDilateBrickDwa(pixd, pixs, ...);
+ *      (8) The size of pixd is determined by pixs.
+ *      (9) If either linear Sel is not found, this calls
+ *          the appropriate decomposible function.
+ * 
+ */ +PIX * +pixDilateBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 found; +char *selnameh, *selnamev; +SELA *sela; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixDilateBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + sela = selaAddBasic(NULL); + found = TRUE; + selnameh = selnamev = NULL; + if (hsize > 1) { + selnameh = selaGetBrickName(sela, hsize, 1); + if (!selnameh) found = FALSE; + } + if (vsize > 1) { + selnamev = selaGetBrickName(sela, 1, vsize); + if (!selnamev) found = FALSE; + } + selaDestroy(&sela); + if (!found) { + L_INFO("Calling the decomposable dwa function\n", procName); + if (selnameh) LEPT_FREE(selnameh); + if (selnamev) LEPT_FREE(selnamev); + return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); + } + + if (vsize == 1) { + pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); + LEPT_FREE(selnameh); + } else if (hsize == 1) { + pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnamev); + LEPT_FREE(selnamev); + } else { + pixt1 = pixAddBorder(pixs, 32, 0); + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); + pixFMorphopGen_1(pixt1, pixt3, L_MORPH_DILATE, selnamev); + pixt2 = pixRemoveBorder(pixt1, 32); + pixDestroy(&pixt1); + pixDestroy(&pixt3); + LEPT_FREE(selnameh); + LEPT_FREE(selnamev); + } + + if (!pixd) + return pixt2; + + pixTransferAllData(pixd, &pixt2, 0, 0); + return pixd; +} + + +/*! + * \brief pixErodeBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement 2D brick Sels, using linear Sels generated
+ *          with selaAddBasic().
+ *      (2) A brick Sel has hits for all elements.
+ *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (6) Note that we must always set or clear the border pixels
+ *          before each operation, depending on the the b.c.
+ *          (symmetric or asymmetric).
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixErodeBrickDwa(NULL, pixs, ...);
+ *          (b) pixErodeBrickDwa(pixs, pixs, ...);
+ *          (c) pixErodeBrickDwa(pixd, pixs, ...);
+ *      (9) The size of the result is determined by pixs.
+ *      (10) If either linear Sel is not found, this calls
+ *           the appropriate decomposible function.
+ * 
+ */ +PIX * +pixErodeBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 found; +char *selnameh, *selnamev; +SELA *sela; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixErodeBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + sela = selaAddBasic(NULL); + found = TRUE; + selnameh = selnamev = NULL; + if (hsize > 1) { + selnameh = selaGetBrickName(sela, hsize, 1); + if (!selnameh) found = FALSE; + } + if (vsize > 1) { + selnamev = selaGetBrickName(sela, 1, vsize); + if (!selnamev) found = FALSE; + } + selaDestroy(&sela); + if (!found) { + L_INFO("Calling the decomposable dwa function\n", procName); + if (selnameh) LEPT_FREE(selnameh); + if (selnamev) LEPT_FREE(selnamev); + return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); + } + + if (vsize == 1) { + pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); + LEPT_FREE(selnameh); + } else if (hsize == 1) { + pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnamev); + LEPT_FREE(selnamev); + } else { + pixt1 = pixAddBorder(pixs, 32, 0); + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); + pixFMorphopGen_1(pixt1, pixt3, L_MORPH_ERODE, selnamev); + pixt2 = pixRemoveBorder(pixt1, 32); + pixDestroy(&pixt1); + pixDestroy(&pixt3); + LEPT_FREE(selnameh); + LEPT_FREE(selnamev); + } + + if (!pixd) + return pixt2; + + pixTransferAllData(pixd, &pixt2, 0, 0); + return pixd; +} + + +/*! + * \brief pixOpenBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement 2D brick Sels, using linear Sels generated
+ *          with selaAddBasic().
+ *      (2) A brick Sel has hits for all elements.
+ *      (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (4) Do separably if both hsize and vsize are > 1.
+ *      (5) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (6) Note that we must always set or clear the border pixels
+ *          before each operation, depending on the the b.c.
+ *          (symmetric or asymmetric).
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpenBrickDwa(NULL, pixs, ...);
+ *          (b) pixOpenBrickDwa(pixs, pixs, ...);
+ *          (c) pixOpenBrickDwa(pixd, pixs, ...);
+ *      (9) The size of the result is determined by pixs.
+ *      (10) If either linear Sel is not found, this calls
+ *           the appropriate decomposible function.
+ * 
+ */ +PIX * +pixOpenBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 found; +char *selnameh, *selnamev; +SELA *sela; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixOpenBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + sela = selaAddBasic(NULL); + found = TRUE; + selnameh = selnamev = NULL; + if (hsize > 1) { + selnameh = selaGetBrickName(sela, hsize, 1); + if (!selnameh) found = FALSE; + } + if (vsize > 1) { + selnamev = selaGetBrickName(sela, 1, vsize); + if (!selnamev) found = FALSE; + } + selaDestroy(&sela); + if (!found) { + L_INFO("Calling the decomposable dwa function\n", procName); + if (selnameh) LEPT_FREE(selnameh); + if (selnamev) LEPT_FREE(selnamev); + return pixOpenCompBrickDwa(pixd, pixs, hsize, vsize); + } + + pixt1 = pixAddBorder(pixs, 32, 0); + if (vsize == 1) { /* horizontal only */ + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnameh); + LEPT_FREE(selnameh); + } else if (hsize == 1) { /* vertical only */ + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnamev); + LEPT_FREE(selnamev); + } else { /* do separable */ + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev); + LEPT_FREE(selnameh); + LEPT_FREE(selnamev); + pixDestroy(&pixt3); + } + pixt3 = pixRemoveBorder(pixt2, 32); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixTransferAllData(pixd, &pixt3, 0, 0); + return pixd; +} + + +/*! + * \brief pixCloseBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) This is a 'safe' closing; we add an extra border of 32 OFF
+ *          pixels for the standard asymmetric b.c.
+ *      (2) These implement 2D brick Sels, using linear Sels generated
+ *          with selaAddBasic().
+ *      (3) A brick Sel has hits for all elements.
+ *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (5) Do separably if both hsize and vsize are > 1.
+ *      (6) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (7) Note that we must always set or clear the border pixels
+ *          before each operation, depending on the the b.c.
+ *          (symmetric or asymmetric).
+ *      (8) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (9) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseBrickDwa(NULL, pixs, ...);
+ *          (b) pixCloseBrickDwa(pixs, pixs, ...);
+ *          (c) pixCloseBrickDwa(pixd, pixs, ...);
+ *      (10) The size of the result is determined by pixs.
+ *      (11) If either linear Sel is not found, this calls
+ *           the appropriate decomposible function.
+ * 
+ */ +PIX * +pixCloseBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 bordercolor, bordersize, found; +char *selnameh, *selnamev; +SELA *sela; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixCloseBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + sela = selaAddBasic(NULL); + found = TRUE; + selnameh = selnamev = NULL; + if (hsize > 1) { + selnameh = selaGetBrickName(sela, hsize, 1); + if (!selnameh) found = FALSE; + } + if (vsize > 1) { + selnamev = selaGetBrickName(sela, 1, vsize); + if (!selnamev) found = FALSE; + } + selaDestroy(&sela); + if (!found) { + L_INFO("Calling the decomposable dwa function\n", procName); + if (selnameh) LEPT_FREE(selnameh); + if (selnamev) LEPT_FREE(selnamev); + return pixCloseCompBrickDwa(pixd, pixs, hsize, vsize); + } + + /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need + * an extra 32 OFF pixels around the image (in addition to + * the 32 added pixels for all dwa operations), whereas with + * SYMMETRIC_MORPH_BC this is not necessary. */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + if (bordercolor == 0) /* asymmetric b.c. */ + bordersize = 64; + else /* symmetric b.c. */ + bordersize = 32; + pixt1 = pixAddBorder(pixs, bordersize, 0); + + if (vsize == 1) { /* horizontal only */ + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh); + LEPT_FREE(selnameh); + } else if (hsize == 1) { /* vertical only */ + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev); + LEPT_FREE(selnamev); + } else { /* do separable */ + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev); + LEPT_FREE(selnameh); + LEPT_FREE(selnamev); + pixDestroy(&pixt3); + } + pixt3 = pixRemoveBorder(pixt2, bordersize); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixTransferAllData(pixd, &pixt3, 0, 0); + return pixd; +} + + +/*-----------------------------------------------------------------* + * Binary composite morphological (dwa) ops with brick Sels * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDilateCompBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement a separable composite dilation with 2D brick Sels.
+ *      (2) For efficiency, it may decompose each linear morphological
+ *          operation into two (brick + comb).
+ *      (3) A brick Sel has hits for all elements.
+ *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (5) Do separably if both hsize and vsize are > 1.
+ *      (6) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixDilateCompBrickDwa(NULL, pixs, ...);
+ *          (b) pixDilateCompBrickDwa(pixs, pixs, ...);
+ *          (c) pixDilateCompBrickDwa(pixd, pixs, ...);
+ *      (9) The size of pixd is determined by pixs.
+ *      (10) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *           but not necessarily equal to it.  It attempts to optimize:
+ *              (a) for consistency with the input values: the product
+ *                  of terms is close to the input size
+ *              (b) for efficiency of the operation: the sum of the
+ *                  terms is small; ideally about twice the square
+ *                   root of the input size.
+ *           So, for example, if the input hsize = 37, which is
+ *           a prime number, the decomposer will break this into two
+ *           terms, 6 and 6, so that the net result is a dilation
+ *           with hsize = 36.
+ * 
+ */ +PIX * +pixDilateCompBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +char *selnameh1, *selnameh2, *selnamev1, *selnamev2; +l_int32 hsize1, hsize2, vsize1, vsize2; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixDilateCompBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + if (hsize > 63 || vsize > 63) + return pixDilateCompBrickExtendDwa(pixd, pixs, hsize, vsize); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + hsize1 = hsize2 = vsize1 = vsize2 = 1; + selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; + if (hsize > 1) + getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, + &selnameh2, NULL, NULL); + if (vsize > 1) + getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, + &selnamev1, &selnamev2); + +#if DEBUG_SEL_LOOKUP + fprintf(stderr, "nameh1=%s, nameh2=%s, namev1=%s, namev2=%s\n", + selnameh1, selnameh2, selnamev1, selnamev2); + fprintf(stderr, "hsize1=%d, hsize2=%d, vsize1=%d, vsize2=%d\n", + hsize1, hsize2, vsize1, vsize2); +#endif /* DEBUG_SEL_LOOKUP */ + + pixt1 = pixAddBorder(pixs, 64, 0); + if (vsize == 1) { + if (hsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); + pixDestroy(&pixt3); + } + } else if (hsize == 1) { + if (vsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); + pixDestroy(&pixt3); + } + } else { /* vsize and hsize both > 1 */ + if (hsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + } else { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_DILATE, selnameh2); + pixDestroy(&pixt2); + } + if (vsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); + } else { + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt2, pixt2, L_MORPH_DILATE, selnamev2); + } + pixDestroy(&pixt3); + } + pixDestroy(&pixt1); + pixt1 = pixRemoveBorder(pixt2, 64); + pixDestroy(&pixt2); + if (selnameh1) LEPT_FREE(selnameh1); + if (selnameh2) LEPT_FREE(selnameh2); + if (selnamev1) LEPT_FREE(selnamev1); + if (selnamev2) LEPT_FREE(selnamev2); + + if (!pixd) + return pixt1; + + pixTransferAllData(pixd, &pixt1, 0, 0); + return pixd; +} + + +/*! + * \brief pixErodeCompBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement a separable composite erosion with 2D brick Sels.
+ *      (2) For efficiency, it may decompose each linear morphological
+ *          operation into two (brick + comb).
+ *      (3) A brick Sel has hits for all elements.
+ *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (5) Do separably if both hsize and vsize are > 1.
+ *      (6) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixErodeCompBrickDwa(NULL, pixs, ...);
+ *          (b) pixErodeCompBrickDwa(pixs, pixs, ...);
+ *          (c) pixErodeCompBrickDwa(pixd, pixs, ...);
+ *      (9) The size of pixd is determined by pixs.
+ *      (10) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *           but not necessarily equal to it.  It attempts to optimize:
+ *              (a) for consistency with the input values: the product
+ *                  of terms is close to the input size
+ *              (b) for efficiency of the operation: the sum of the
+ *                  terms is small; ideally about twice the square
+ *                   root of the input size.
+ *           So, for example, if the input hsize = 37, which is
+ *           a prime number, the decomposer will break this into two
+ *           terms, 6 and 6, so that the net result is a dilation
+ *           with hsize = 36.
+ * 
+ */ +PIX * +pixErodeCompBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +char *selnameh1, *selnameh2, *selnamev1, *selnamev2; +l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixErodeCompBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + if (hsize > 63 || vsize > 63) + return pixErodeCompBrickExtendDwa(pixd, pixs, hsize, vsize); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + hsize1 = hsize2 = vsize1 = vsize2 = 1; + selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; + if (hsize > 1) + getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, + &selnameh2, NULL, NULL); + if (vsize > 1) + getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, + &selnamev1, &selnamev2); + + /* For symmetric b.c., bordercolor == 1 for erosion */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + pixt1 = pixAddBorder(pixs, 64, bordercolor); + + if (vsize == 1) { + if (hsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); + pixDestroy(&pixt3); + } + } else if (hsize == 1) { + if (vsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); + pixDestroy(&pixt3); + } + } else { /* vsize and hsize both > 1 */ + if (hsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + } else { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_ERODE, selnameh2); + pixDestroy(&pixt2); + } + if (vsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); + } else { + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt2, pixt2, L_MORPH_ERODE, selnamev2); + } + pixDestroy(&pixt3); + } + pixDestroy(&pixt1); + pixt1 = pixRemoveBorder(pixt2, 64); + pixDestroy(&pixt2); + if (selnameh1) LEPT_FREE(selnameh1); + if (selnameh2) LEPT_FREE(selnameh2); + if (selnamev1) LEPT_FREE(selnamev1); + if (selnamev2) LEPT_FREE(selnamev2); + + if (!pixd) + return pixt1; + + pixTransferAllData(pixd, &pixt1, 0, 0); + return pixd; +} + + +/*! + * \brief pixOpenCompBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) These implement a separable composite opening with 2D brick Sels.
+ *      (2) For efficiency, it may decompose each linear morphological
+ *          operation into two (brick + comb).
+ *      (3) A brick Sel has hits for all elements.
+ *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (5) Do separably if both hsize and vsize are > 1.
+ *      (6) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixOpenCompBrickDwa(NULL, pixs, ...);
+ *          (b) pixOpenCompBrickDwa(pixs, pixs, ...);
+ *          (c) pixOpenCompBrickDwa(pixd, pixs, ...);
+ *      (9) The size of pixd is determined by pixs.
+ *      (10) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *           but not necessarily equal to it.  It attempts to optimize:
+ *              (a) for consistency with the input values: the product
+ *                  of terms is close to the input size
+ *              (b) for efficiency of the operation: the sum of the
+ *                  terms is small; ideally about twice the square
+ *                   root of the input size.
+ *           So, for example, if the input hsize = 37, which is
+ *           a prime number, the decomposer will break this into two
+ *           terms, 6 and 6, so that the net result is a dilation
+ *           with hsize = 36.
+ * 
+ */ +PIX * +pixOpenCompBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +char *selnameh1, *selnameh2, *selnamev1, *selnamev2; +l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixOpenCompBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + if (hsize > 63 || vsize > 63) + return pixOpenCompBrickExtendDwa(pixd, pixs, hsize, vsize); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + hsize1 = hsize2 = vsize1 = vsize2 = 1; + selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; + if (hsize > 1) + getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, + &selnameh2, NULL, NULL); + if (vsize > 1) + getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, + &selnamev1, &selnamev2); + + /* For symmetric b.c., initialize erosion with bordercolor == 1 */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + pixt1 = pixAddBorder(pixs, 64, bordercolor); + + if (vsize == 1) { + if (hsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + if (bordercolor == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnameh1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); + if (bordercolor == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); + } + } else if (hsize == 1) { + if (vsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); + if (bordercolor == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); + if (bordercolor == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); + } + } else { /* vsize and hsize both > 1 */ + if (hsize2 == 1 && vsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); + if (bordercolor == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); + } else if (vsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); + if (bordercolor == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); + pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnameh2); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); + } else if (hsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnamev2); + if (bordercolor == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); + } else { /* both directions are combed */ + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); + if (bordercolor == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); + } + } + pixDestroy(&pixt3); + + pixDestroy(&pixt1); + pixt1 = pixRemoveBorder(pixt2, 64); + pixDestroy(&pixt2); + if (selnameh1) LEPT_FREE(selnameh1); + if (selnameh2) LEPT_FREE(selnameh2); + if (selnamev1) LEPT_FREE(selnamev1); + if (selnamev2) LEPT_FREE(selnamev2); + + if (!pixd) + return pixt1; + + pixTransferAllData(pixd, &pixt1, 0, 0); + return pixd; +} + + +/*! + * \brief pixCloseCompBrickDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) This implements a separable composite safe closing with 2D
+ *          brick Sels.
+ *      (2) For efficiency, it may decompose each linear morphological
+ *          operation into two (brick + comb).
+ *      (3) A brick Sel has hits for all elements.
+ *      (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2)
+ *      (5) Do separably if both hsize and vsize are > 1.
+ *      (6) It is necessary that both horizontal and vertical Sels
+ *          of the input size are defined in the basic sela.
+ *      (7) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (8) For clarity, if the case is known, use these patterns:
+ *          (a) pixd = pixCloseCompBrickDwa(NULL, pixs, ...);
+ *          (b) pixCloseCompBrickDwa(pixs, pixs, ...);
+ *          (c) pixCloseCompBrickDwa(pixd, pixs, ...);
+ *      (9) The size of pixd is determined by pixs.
+ *      (10) CAUTION: both hsize and vsize are being decomposed.
+ *          The decomposer chooses a product of sizes (call them
+ *          'terms') for each that is close to the input size,
+ *           but not necessarily equal to it.  It attempts to optimize:
+ *              (a) for consistency with the input values: the product
+ *                  of terms is close to the input size
+ *              (b) for efficiency of the operation: the sum of the
+ *                  terms is small; ideally about twice the square
+ *                   root of the input size.
+ *           So, for example, if the input hsize = 37, which is
+ *           a prime number, the decomposer will break this into two
+ *           terms, 6 and 6, so that the net result is a dilation
+ *           with hsize = 36.
+ * 
+ */ +PIX * +pixCloseCompBrickDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +char *selnameh1, *selnameh2, *selnamev1, *selnamev2; +l_int32 hsize1, hsize2, vsize1, vsize2, setborder; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixCloseCompBrickDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + if (hsize > 63 || vsize > 63) + return pixCloseCompBrickExtendDwa(pixd, pixs, hsize, vsize); + + if (hsize == 1 && vsize == 1) + return pixCopy(pixd, pixs); + + hsize1 = hsize2 = vsize1 = vsize2 = 1; + selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; + if (hsize > 1) + getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, + &selnameh2, NULL, NULL); + if (vsize > 1) + getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, + &selnamev1, &selnamev2); + + pixt3 = NULL; + /* For symmetric b.c., PIX_SET border for erosions */ + setborder = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + pixt1 = pixAddBorder(pixs, 64, 0); + + if (vsize == 1) { + if (hsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); + if (setborder == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); + } + } else if (hsize == 1) { + if (vsize2 == 1) { + pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev1); + } else { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); + if (setborder == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); + } + } else { /* vsize and hsize both > 1 */ + if (hsize2 == 1 && vsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); + if (setborder == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); + } else if (vsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); + if (setborder == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); + pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnameh2); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); + } else if (hsize2 == 1) { + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnamev2); + if (setborder == 1) + pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); + } else { /* both directions are combed */ + pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); + pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); + if (setborder == 1) + pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); + pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); + pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); + } + } + pixDestroy(&pixt3); + + pixDestroy(&pixt1); + pixt1 = pixRemoveBorder(pixt2, 64); + pixDestroy(&pixt2); + if (selnameh1) LEPT_FREE(selnameh1); + if (selnameh2) LEPT_FREE(selnameh2); + if (selnamev1) LEPT_FREE(selnamev1); + if (selnamev2) LEPT_FREE(selnamev2); + + if (!pixd) + return pixt1; + + pixTransferAllData(pixd, &pixt1, 0, 0); + return pixd; +} + + +/*--------------------------------------------------------------------------* + * Binary expanded composite morphological (dwa) ops with brick Sels * + *--------------------------------------------------------------------------*/ +/*! + * \brief pixDilateCompBrickExtendDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) Ankur Jain suggested and implemented extending the composite
+ *          DWA operations beyond the 63 pixel limit.  This is a
+ *          simplified and approximate implementation of the extension.
+ *          This allows arbitrary Dwa morph operations using brick Sels,
+ *          by decomposing the horizontal and vertical dilations into
+ *          a sequence of 63-element dilations plus a dilation of size
+ *          between 3 and 62.
+ *      (2) The 63-element dilations are exact, whereas the extra dilation
+ *          is approximate, because the underlying decomposition is
+ *          in pixDilateCompBrickDwa().  See there for further details.
+ *      (3) There are three cases:
+ *          (a) pixd == null   (result into new pixd)
+ *          (b) pixd == pixs   (in-place; writes result back to pixs)
+ *          (c) pixd != pixs   (puts result into existing pixd)
+ *      (4) There is no need to call this directly:  pixDilateCompBrickDwa()
+ *          calls this function if either brick dimension exceeds 63.
+ * 
+ */ +PIX * +pixDilateCompBrickExtendDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 i, nops, nh, extrah, nv, extrav; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixDilateCompBrickExtendDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize < 64 && vsize < 64) + return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); + + if (hsize > 63) + getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); + if (vsize > 63) + getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); + + /* Horizontal dilation first: pixs --> pixt2. Do not alter pixs. */ + pixt1 = pixCreateTemplate(pixs); /* temp image */ + if (hsize == 1) { + pixt2 = pixClone(pixs); + } else if (hsize < 64) { + pixt2 = pixDilateCompBrickDwa(NULL, pixs, hsize, 1); + } else if (hsize == 64) { /* approximate */ + pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); + } else { + nops = (extrah < 3) ? nh : nh + 1; + if (nops & 1) { /* odd */ + if (extrah > 2) + pixt2 = pixDilateCompBrickDwa(NULL, pixs, extrah, 1); + else + pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); + for (i = 0; i < nops / 2; i++) { + pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); + pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); + } + } else { /* nops even */ + if (extrah > 2) { + pixDilateCompBrickDwa(pixt1, pixs, extrah, 1); + pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); + } else { /* they're all 63s */ + pixDilateCompBrickDwa(pixt1, pixs, 63, 1); + pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); + } + for (i = 0; i < nops / 2 - 1; i++) { + pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); + pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); + } + } + } + + /* Vertical dilation: pixt2 --> pixt3. */ + if (vsize == 1) { + pixt3 = pixClone(pixt2); + } else if (vsize < 64) { + pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, vsize); + } else if (vsize == 64) { /* approximate */ + pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); + } else { + nops = (extrav < 3) ? nv : nv + 1; + if (nops & 1) { /* odd */ + if (extrav > 2) + pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, extrav); + else + pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); + for (i = 0; i < nops / 2; i++) { + pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); + pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); + } + } else { /* nops even */ + if (extrav > 2) { + pixDilateCompBrickDwa(pixt1, pixt2, 1, extrav); + pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); + } else { /* they're all 63s */ + pixDilateCompBrickDwa(pixt1, pixt2, 1, 63); + pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); + } + for (i = 0; i < nops / 2 - 1; i++) { + pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); + pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); + } + } + } + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixTransferAllData(pixd, &pixt3, 0, 0); + return pixd; +} + + +/*! + * \brief pixErodeCompBrickExtendDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      (1) See pixDilateCompBrickExtendDwa() for usage.
+ *      (2) There is no need to call this directly:  pixErodeCompBrickDwa()
+ *          calls this function if either brick dimension exceeds 63.
+ * 
+ */ +PIX * +pixErodeCompBrickExtendDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 i, nops, nh, extrah, nv, extrav; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixErodeCompBrickExtendDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + if (hsize < 64 && vsize < 64) + return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); + + if (hsize > 63) + getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); + if (vsize > 63) + getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); + + /* Horizontal erosion first: pixs --> pixt2. Do not alter pixs. */ + pixt1 = pixCreateTemplate(pixs); /* temp image */ + if (hsize == 1) { + pixt2 = pixClone(pixs); + } else if (hsize < 64) { + pixt2 = pixErodeCompBrickDwa(NULL, pixs, hsize, 1); + } else if (hsize == 64) { /* approximate */ + pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); + } else { + nops = (extrah < 3) ? nh : nh + 1; + if (nops & 1) { /* odd */ + if (extrah > 2) + pixt2 = pixErodeCompBrickDwa(NULL, pixs, extrah, 1); + else + pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); + for (i = 0; i < nops / 2; i++) { + pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); + pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); + } + } else { /* nops even */ + if (extrah > 2) { + pixErodeCompBrickDwa(pixt1, pixs, extrah, 1); + pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); + } else { /* they're all 63s */ + pixErodeCompBrickDwa(pixt1, pixs, 63, 1); + pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); + } + for (i = 0; i < nops / 2 - 1; i++) { + pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); + pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); + } + } + } + + /* Vertical erosion: pixt2 --> pixt3. */ + if (vsize == 1) { + pixt3 = pixClone(pixt2); + } else if (vsize < 64) { + pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, vsize); + } else if (vsize == 64) { /* approximate */ + pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); + } else { + nops = (extrav < 3) ? nv : nv + 1; + if (nops & 1) { /* odd */ + if (extrav > 2) + pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, extrav); + else + pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); + for (i = 0; i < nops / 2; i++) { + pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); + pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); + } + } else { /* nops even */ + if (extrav > 2) { + pixErodeCompBrickDwa(pixt1, pixt2, 1, extrav); + pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); + } else { /* they're all 63s */ + pixErodeCompBrickDwa(pixt1, pixt2, 1, 63); + pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); + } + for (i = 0; i < nops / 2 - 1; i++) { + pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); + pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); + } + } + } + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixTransferAllData(pixd, &pixt3, 0, 0); + return pixd; +} + + +/*! + * \brief pixOpenCompBrickExtendDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      1) There are three cases:
+ *          a) pixd == null   (result into new pixd
+ *          b) pixd == pixs   (in-place; writes result back to pixs
+ *          c) pixd != pixs   (puts result into existing pixd
+ *      2) There is no need to call this directly:  pixOpenCompBrickDwa(
+ *          calls this function if either brick dimension exceeds 63.
+ * 
+ */ +PIX * +pixOpenCompBrickExtendDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +PIX *pixt; + + PROCNAME("pixOpenCompBrickExtendDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + pixt = pixErodeCompBrickExtendDwa(NULL, pixs, hsize, vsize); + pixd = pixDilateCompBrickExtendDwa(pixd, pixt, hsize, vsize); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixCloseCompBrickExtendDwa() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs 1 bpp + * \param[in] hsize width of brick Sel + * \param[in] vsize height of brick Sel + * \return pixd + * + *
+ * Notes:
+ *      1) There are three cases:
+ *          a) pixd == null   (result into new pixd
+ *          b) pixd == pixs   (in-place; writes result back to pixs
+ *          c) pixd != pixs   (puts result into existing pixd
+ *      2) There is no need to call this directly:  pixCloseCompBrickDwa(
+ *          calls this function if either brick dimension exceeds 63.
+ * 
+ */ +PIX * +pixCloseCompBrickExtendDwa(PIX *pixd, + PIX *pixs, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 bordercolor, borderx, bordery; +PIX *pixt1, *pixt2, *pixt3; + + PROCNAME("pixCloseCompBrickExtendDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + if (hsize < 1 || vsize < 1) + return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); + + /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need + * an extra 32 OFF pixels around the image (in addition to + * the 32 added pixels for all dwa operations), whereas with + * SYMMETRIC_MORPH_BC this is not necessary. */ + bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); + if (bordercolor == 0) { /* asymmetric b.c. */ + borderx = 32 + (hsize / 64) * 32; + bordery = 32 + (vsize / 64) * 32; + } else { /* symmetric b.c. */ + borderx = bordery = 32; + } + pixt1 = pixAddBorderGeneral(pixs, borderx, borderx, bordery, bordery, 0); + + pixt2 = pixDilateCompBrickExtendDwa(NULL, pixt1, hsize, vsize); + pixErodeCompBrickExtendDwa(pixt1, pixt2, hsize, vsize); + + pixt3 = pixRemoveBorderGeneral(pixt1, borderx, borderx, bordery, bordery); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + + if (!pixd) + return pixt3; + + pixTransferAllData(pixd, &pixt3, 0, 0); + return pixd; +} + + +/*! + * \brief getExtendedCompositeParameters() + * + * \param[in] size of linear Sel + * \param[out] pn number of 63 wide convolutions + * \param[out] pextra size of extra Sel + * \param[out] pactualsize [optional] actual size used in operation + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The DWA implementation allows Sels to be used with hits
+ *          up to 31 pixels from the origin, either horizontally or
+ *          vertically.  Larger Sels can be used if decomposed into
+ *          a set of operations with Sels not exceeding 63 pixels
+ *          in either width or height (and with the origin as close
+ *          to the center of the Sel as possible).
+ *      (2) This returns the decomposition of a linear Sel of length
+ *          %size into a set of %n Sels of length 63 plus an extra
+ *          Sel of length %extra.
+ *      (3) For notation, let w == %size, n == %n, and e == %extra.
+ *          We have 1 < e < 63.
+ *
+ *          Then if w < 64, we have n = 0 and e = w.
+ *          The general formula for w > 63 is:
+ *             w = 63 + (n - 1) * 62 + (e - 1)
+ *
+ *          Where did this come from?  Each successive convolution with
+ *          a Sel of length L adds a total length (L - 1) to w.
+ *          This accounts for using 62 for each additional Sel of size 63,
+ *          and using (e - 1) for the additional Sel of size e.
+ *
+ *          Solving for n and e for w > 63:
+ *             n = 1 + Int((w - 63) / 62)
+ *             e = w - 63 - (n - 1) * 62 + 1
+ *
+ *          The extra part is decomposed into two factors f1 and f2,
+ *          and the actual size of the extra part is
+ *             e' = f1 * f2
+ *          Then the actual width is:
+ *             w' = 63 + (n - 1) * 62 + f1 * f2 - 1
+ * 
+ */ +l_ok +getExtendedCompositeParameters(l_int32 size, + l_int32 *pn, + l_int32 *pextra, + l_int32 *pactualsize) +{ +l_int32 n, extra, fact1, fact2; + + PROCNAME("getExtendedCompositeParameters"); + + if (!pn || !pextra) + return ERROR_INT("&n and &extra not both defined", procName, 1); + + if (size <= 63) { + n = 0; + extra = L_MIN(1, size); + } else { /* size > 63 */ + n = 1 + (l_int32)((size - 63) / 62); + extra = size - 63 - (n - 1) * 62 + 1; + } + + if (pactualsize) { + selectComposableSizes(extra, &fact1, &fact2); + *pactualsize = 63 + (n - 1) * 62 + fact1 * fact2 - 1; + } + + *pn = n; + *pextra = extra; + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/morphseq.c b/3rdparty/hgOCR/leptonica/morphseq.c new file mode 100644 index 00000000..cb401a69 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/morphseq.c @@ -0,0 +1,1244 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file morphseq.c + *
+ *
+ *      Run a sequence of binary rasterop morphological operations
+ *            PIX     *pixMorphSequence()
+ *
+ *      Run a sequence of binary composite rasterop morphological operations
+ *            PIX     *pixMorphCompSequence()
+ *
+ *      Run a sequence of binary dwa morphological operations
+ *            PIX     *pixMorphSequenceDwa()
+ *
+ *      Run a sequence of binary composite dwa morphological operations
+ *            PIX     *pixMorphCompSequenceDwa()
+ *
+ *      Parser verifier for binary morphological operations
+ *            l_int32  morphSequenceVerify()
+ *
+ *      Run a sequence of grayscale morphological operations
+ *            PIX     *pixGrayMorphSequence()
+ *
+ *      Run a sequence of color morphological operations
+ *            PIX     *pixColorMorphSequence()
+ * 
+ */ + +#include +#include "allheaders.h" + +/*-------------------------------------------------------------------------* + * Run a sequence of binary rasterop morphological operations * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixMorphSequence() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does rasterop morphology on binary images.
+ *      (2) This runs a pipeline of operations; no branching is allowed.
+ *      (3) This only uses brick Sels, which are created on the fly.
+ *          In the future this will be generalized to extract Sels from
+ *          a Sela by name.
+ *      (4) A new image is always produced; the input image is not changed.
+ *      (5) This contains an interpreter, allowing sequences to be
+ *          generated and run.
+ *      (6) The format of the sequence string is defined below.
+ *      (7) In addition to morphological operations, rank order reduction
+ *          and replicated expansion allow operations to take place
+ *          downscaled by a power of 2.
+ *      (8) Intermediate results can optionally be displayed.
+ *      (9) Thanks to Dar-Shyang Lee, who had the idea for this and
+ *          built the first implementation.
+ *      (10) The sequence string is formatted as follows:
+ *            ~ An arbitrary number of operations,  each separated
+ *              by a '+' character.  White space is ignored.
+ *            ~ Each operation begins with a case-independent character
+ *              specifying the operation:
+ *                 d or D  (dilation)
+ *                 e or E  (erosion)
+ *                 o or O  (opening)
+ *                 c or C  (closing)
+ *                 r or R  (rank binary reduction)
+ *                 x or X  (replicative binary expansion)
+ *                 b or B  (add a border of 0 pixels of this size)
+ *            ~ The args to the morphological operations are bricks of hits,
+ *              and are formatted as a.b, where a and b are horizontal and
+ *              vertical dimensions, rsp.
+ *            ~ The args to the reduction are a sequence of up to 4 integers,
+ *              each from 1 to 4.
+ *            ~ The arg to the expansion is a power of two, in the set
+ *              {2, 4, 8, 16}.
+ *      (11) An example valid sequence is:
+ *               "b32 + o1.3 + C3.1 + r23 + e2.2 + D3.2 + X4"
+ *           In this example, the following operation sequence is carried out:
+ *             * b32: Add a 32 pixel border around the input image
+ *             * o1.3: Opening with vert sel of length 3 (e.g., 1 x 3)
+ *             * C3.1: Closing with horiz sel of length 3  (e.g., 3 x 1)
+ *             * r23: Two successive 2x2 reductions with rank 2 in the first
+ *                    and rank 3 in the second.  The result is a 4x reduced pix.
+ *             * e2.2: Erosion with a 2x2 sel (origin will be at x,y: 0,0)
+ *             * d3.2: Dilation with a 3x2 sel (origin will be at x,y: 1,0)
+ *             * X4: 4x replicative expansion, back to original resolution
+ *      (12) The safe closing is used.  However, if you implement a
+ *           closing as separable dilations followed by separable erosions,
+ *           it will not be safe.  For that situation, you need to add
+ *           a sufficiently large border as the first operation in
+ *           the sequence.  This will be removed automatically at the
+ *           end.  There are two cautions:
+ *              ~ When computing what is sufficient, remember that if
+ *                reductions are carried out, the border is also reduced.
+ *              ~ The border is removed at the end, so if a border is
+ *                added at the beginning, the result must be at the
+ *                same resolution as the input!
+ * 
+ */ +PIX * +pixMorphSequence(PIX *pixs, + const char *sequence, + l_int32 dispsep) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; +l_int32 level[4]; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixMorphSequence"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + if (!morphSequenceVerify(sa)) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + border = 0; + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixDilateBrick(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixErodeBrick(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pixOpenBrick(pix1, pix1, w, h); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pixCloseSafeBrick(pix1, pix1, w, h); + break; + case 'r': + case 'R': + nred = strlen(op) - 1; + for (j = 0; j < nred; j++) + level[j] = op[j + 1] - '0'; + for (j = nred; j < 4; j++) + level[j] = 0; + pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], + level[2], level[3]); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'x': + case 'X': + sscanf(&op[1], "%d", &fact); + pix2 = pixExpandReplicate(pix1, fact); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'b': + case 'B': + sscanf(&op[1], "%d", &border); + pix2 = pixAddBorder(pix1, border, 0); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, 0); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + if (border > 0) { + pix2 = pixRemoveBorder(pix1, border); + pixSwapAndDestroy(&pix1, &pix2); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} + + +/*-------------------------------------------------------------------------* + * Run a sequence of binary composite rasterop morphological operations * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixMorphCompSequence() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display of results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does rasterop morphology on binary images, using composite
+ *          operations for extra speed on large Sels.
+ *      (2) Safe closing is used atomically.  However, if you implement a
+ *          closing as a sequence with a dilation followed by an
+ *          erosion, it will not be safe, and to ensure that you have
+ *          no boundary effects you must add a border in advance and
+ *          remove it at the end.
+ *      (3) For other usage details, see the notes for pixMorphSequence().
+ *      (4) The sequence string is formatted as follows:
+ *            ~ An arbitrary number of operations,  each separated
+ *              by a '+' character.  White space is ignored.
+ *            ~ Each operation begins with a case-independent character
+ *              specifying the operation:
+ *                 d or D  (dilation)
+ *                 e or E  (erosion)
+ *                 o or O  (opening)
+ *                 c or C  (closing)
+ *                 r or R  (rank binary reduction)
+ *                 x or X  (replicative binary expansion)
+ *                 b or B  (add a border of 0 pixels of this size)
+ *            ~ The args to the morphological operations are bricks of hits,
+ *              and are formatted as a.b, where a and b are horizontal and
+ *              vertical dimensions, rsp.
+ *            ~ The args to the reduction are a sequence of up to 4 integers,
+ *              each from 1 to 4.
+ *            ~ The arg to the expansion is a power of two, in the set
+ *              {2, 4, 8, 16}.
+ * 
+ */ +PIX * +pixMorphCompSequence(PIX *pixs, + const char *sequence, + l_int32 dispsep) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; +l_int32 level[4]; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixMorphCompSequence"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + + if (!morphSequenceVerify(sa)) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + border = 0; + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixDilateCompBrick(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixErodeCompBrick(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pixOpenCompBrick(pix1, pix1, w, h); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pixCloseSafeCompBrick(pix1, pix1, w, h); + break; + case 'r': + case 'R': + nred = strlen(op) - 1; + for (j = 0; j < nred; j++) + level[j] = op[j + 1] - '0'; + for (j = nred; j < 4; j++) + level[j] = 0; + pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], + level[2], level[3]); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'x': + case 'X': + sscanf(&op[1], "%d", &fact); + pix2 = pixExpandReplicate(pix1, fact); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'b': + case 'B': + sscanf(&op[1], "%d", &border); + pix2 = pixAddBorder(pix1, border, 0); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, 0); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + if (border > 0) { + pix2 = pixRemoveBorder(pix1, border); + pixSwapAndDestroy(&pix1, &pix2); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} + + +/*-------------------------------------------------------------------------* + * Run a sequence of binary dwa morphological operations * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixMorphSequenceDwa() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display of results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does dwa morphology on binary images.
+ *      (2) This runs a pipeline of operations; no branching is allowed.
+ *      (3) This only uses brick Sels that have been pre-compiled with
+ *          dwa code.
+ *      (4) A new image is always produced; the input image is not changed.
+ *      (5) This contains an interpreter, allowing sequences to be
+ *          generated and run.
+ *      (6) See pixMorphSequence() for further information about usage.
+ * 
+ */ +PIX * +pixMorphSequenceDwa(PIX *pixs, + const char *sequence, + l_int32 dispsep) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; +l_int32 level[4]; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixMorphSequenceDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + + if (!morphSequenceVerify(sa)) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + border = 0; + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixDilateBrickDwa(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixErodeBrickDwa(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pixOpenBrickDwa(pix1, pix1, w, h); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pixCloseBrickDwa(pix1, pix1, w, h); + break; + case 'r': + case 'R': + nred = strlen(op) - 1; + for (j = 0; j < nred; j++) + level[j] = op[j + 1] - '0'; + for (j = nred; j < 4; j++) + level[j] = 0; + pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], + level[2], level[3]); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'x': + case 'X': + sscanf(&op[1], "%d", &fact); + pix2 = pixExpandReplicate(pix1, fact); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'b': + case 'B': + sscanf(&op[1], "%d", &border); + pix2 = pixAddBorder(pix1, border, 0); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, 0); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + if (border > 0) { + pix2 = pixRemoveBorder(pix1, border); + pixSwapAndDestroy(&pix1, &pix2); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} + + +/*-------------------------------------------------------------------------* + * Run a sequence of binary composite dwa morphological operations * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixMorphCompSequenceDwa() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display of results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does dwa morphology on binary images, using brick Sels.
+ *      (2) This runs a pipeline of operations; no branching is allowed.
+ *      (3) It implements all brick Sels that have dimensions up to 63
+ *          on each side, using a composite (linear + comb) when useful.
+ *      (4) A new image is always produced; the input image is not changed.
+ *      (5) This contains an interpreter, allowing sequences to be
+ *          generated and run.
+ *      (6) See pixMorphSequence() for further information about usage.
+ * 
+ */ +PIX * +pixMorphCompSequenceDwa(PIX *pixs, + const char *sequence, + l_int32 dispsep) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, j, nred, fact, w, h, x, border, pdfout; +l_int32 level[4]; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixMorphCompSequenceDwa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + + if (!morphSequenceVerify(sa)) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + border = 0; + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixDilateCompBrickDwa(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixErodeCompBrickDwa(NULL, pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pixOpenCompBrickDwa(pix1, pix1, w, h); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pixCloseCompBrickDwa(pix1, pix1, w, h); + break; + case 'r': + case 'R': + nred = strlen(op) - 1; + for (j = 0; j < nred; j++) + level[j] = op[j + 1] - '0'; + for (j = nred; j < 4; j++) + level[j] = 0; + pix2 = pixReduceRankBinaryCascade(pix1, level[0], level[1], + level[2], level[3]); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'x': + case 'X': + sscanf(&op[1], "%d", &fact); + pix2 = pixExpandReplicate(pix1, fact); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'b': + case 'B': + sscanf(&op[1], "%d", &border); + pix2 = pixAddBorder(pix1, border, 0); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, 0); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + if (border > 0) { + pix2 = pixRemoveBorder(pix1, border); + pixSwapAndDestroy(&pix1, &pix2); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} + + +/*-------------------------------------------------------------------------* + * Parser verifier for binary morphological operations * + *-------------------------------------------------------------------------*/ +/*! + * \brief morphSequenceVerify() + * + * \param[in] sa string array of operation sequence + * \return TRUE if valid; FALSE otherwise or on error + * + *
+ * Notes:
+ *      (1) This does verification of valid binary morphological
+ *          operation sequences.
+ *      (2) See pixMorphSequence() for notes on valid operations
+ *          in the sequence.
+ * 
+ */ +l_int32 +morphSequenceVerify(SARRAY *sa) +{ +char *rawop, *op; +l_int32 nops, i, j, nred, fact, valid, w, h, netred, border; +l_int32 level[4]; +l_int32 intlogbase2[5] = {1, 2, 3, 0, 4}; /* of arg/4 */ + + PROCNAME("morphSequenceVerify"); + + if (!sa) + return ERROR_INT("sa not defined", procName, FALSE); + + nops = sarrayGetCount(sa); + valid = TRUE; + netred = 0; + border = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + case 'e': + case 'E': + case 'o': + case 'O': + case 'c': + case 'C': + if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { + fprintf(stderr, "*** op: %s invalid\n", op); + valid = FALSE; + break; + } + if (w <= 0 || h <= 0) { + fprintf(stderr, + "*** op: %s; w = %d, h = %d; must both be > 0\n", + op, w, h); + valid = FALSE; + break; + } +/* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ + break; + case 'r': + case 'R': + nred = strlen(op) - 1; + netred += nred; + if (nred < 1 || nred > 4) { + fprintf(stderr, + "*** op = %s; num reduct = %d; must be in {1,2,3,4}\n", + op, nred); + valid = FALSE; + break; + } + for (j = 0; j < nred; j++) { + level[j] = op[j + 1] - '0'; + if (level[j] < 1 || level[j] > 4) { + fprintf(stderr, "*** op = %s; level[%d] = %d is invalid\n", + op, j, level[j]); + valid = FALSE; + break; + } + } + if (!valid) + break; +/* fprintf(stderr, "op = %s", op); */ + for (j = 0; j < nred; j++) { + level[j] = op[j + 1] - '0'; +/* fprintf(stderr, ", level[%d] = %d", j, level[j]); */ + } +/* fprintf(stderr, "\n"); */ + break; + case 'x': + case 'X': + if (sscanf(&op[1], "%d", &fact) != 1) { + fprintf(stderr, "*** op: %s; fact invalid\n", op); + valid = FALSE; + break; + } + if (fact != 2 && fact != 4 && fact != 8 && fact != 16) { + fprintf(stderr, "*** op = %s; invalid fact = %d\n", op, fact); + valid = FALSE; + break; + } + netred -= intlogbase2[fact / 4]; +/* fprintf(stderr, "op = %s; fact = %d\n", op, fact); */ + break; + case 'b': + case 'B': + if (sscanf(&op[1], "%d", &fact) != 1) { + fprintf(stderr, "*** op: %s; fact invalid\n", op); + valid = FALSE; + break; + } + if (i > 0) { + fprintf(stderr, "*** op = %s; must be first op\n", op); + valid = FALSE; + break; + } + if (fact < 1) { + fprintf(stderr, "*** op = %s; invalid fact = %d\n", op, fact); + valid = FALSE; + break; + } + border = fact; +/* fprintf(stderr, "op = %s; fact = %d\n", op, fact); */ + break; + default: + fprintf(stderr, "*** nonexistent op = %s\n", op); + valid = FALSE; + } + LEPT_FREE(op); + } + + if (border != 0 && netred != 0) { + fprintf(stderr, + "*** op = %s; border added but net reduction not 0\n", op); + valid = FALSE; + } + return valid; +} + + +/*-----------------------------------------------------------------* + * Run a sequence of grayscale morphological operations * + *-----------------------------------------------------------------*/ +/*! + * \brief pixGrayMorphSequence() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display of results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \param[in] dispy if dispsep > 0, this gives the y-value of the + * UL corner for display; otherwise it is ignored + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This works on 8 bpp grayscale images.
+ *      (2) This runs a pipeline of operations; no branching is allowed.
+ *      (3) This only uses brick SELs.
+ *      (4) A new image is always produced; the input image is not changed.
+ *      (5) This contains an interpreter, allowing sequences to be
+ *          generated and run.
+ *      (6) The format of the sequence string is defined below.
+ *      (7) In addition to morphological operations, the composite
+ *          morph/subtract tophat can be performed.
+ *      (8) Sel sizes (width, height) must each be odd numbers.
+ *      (9) Intermediate results can optionally be displayed
+ *      (10) The sequence string is formatted as follows:
+ *            ~ An arbitrary number of operations,  each separated
+ *              by a '+' character.  White space is ignored.
+ *            ~ Each operation begins with a case-independent character
+ *              specifying the operation:
+ *                 d or D  (dilation)
+ *                 e or E  (erosion)
+ *                 o or O  (opening)
+ *                 c or C  (closing)
+ *                 t or T  (tophat)
+ *            ~ The args to the morphological operations are bricks of hits,
+ *              and are formatted as a.b, where a and b are horizontal and
+ *              vertical dimensions, rsp. (each must be an odd number)
+ *            ~ The args to the tophat are w or W (for white tophat)
+ *              or b or B (for black tophat), followed by a.b as for
+ *              the dilation, erosion, opening and closing.
+ *           Example valid sequences are:
+ *             "c5.3 + o7.5"
+ *             "c9.9 + tw9.9"
+ * 
+ */ +PIX * +pixGrayMorphSequence(PIX *pixs, + const char *sequence, + l_int32 dispsep, + l_int32 dispy) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, valid, w, h, x, pdfout; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixGrayMorphSequence"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + + /* Verify that the operation sequence is valid */ + valid = TRUE; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + case 'e': + case 'E': + case 'o': + case 'O': + case 'c': + case 'C': + if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { + fprintf(stderr, "*** op: %s invalid\n", op); + valid = FALSE; + break; + } + if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { + fprintf(stderr, + "*** op: %s; w = %d, h = %d; must both be odd\n", + op, w, h); + valid = FALSE; + break; + } +/* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ + break; + case 't': + case 'T': + if (op[1] != 'w' && op[1] != 'W' && + op[1] != 'b' && op[1] != 'B') { + fprintf(stderr, + "*** op = %s; arg %c must be 'w' or 'b'\n", op, op[1]); + valid = FALSE; + break; + } + sscanf(&op[2], "%d.%d", &w, &h); + if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { + fprintf(stderr, + "*** op: %s; w = %d, h = %d; must both be odd\n", + op, w, h); + valid = FALSE; + break; + } +/* fprintf(stderr, "op = %s", op); */ + break; + default: + fprintf(stderr, "*** nonexistent op = %s\n", op); + valid = FALSE; + } + LEPT_FREE(op); + } + if (!valid) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence invalid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixDilateGray(pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixErodeGray(pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixOpenGray(pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixCloseGray(pix1, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 't': + case 'T': + sscanf(&op[2], "%d.%d", &w, &h); + if (op[1] == 'w' || op[1] == 'W') + pix2 = pixTophat(pix1, w, h, L_TOPHAT_WHITE); + else /* 'b' or 'B' */ + pix2 = pixTophat(pix1, w, h, L_TOPHAT_BLACK); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, dispy); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} + + +/*-----------------------------------------------------------------* + * Run a sequence of color morphological operations * + *-----------------------------------------------------------------*/ +/*! + * \brief pixColorMorphSequence() + * + * \param[in] pixs + * \param[in] sequence string specifying sequence + * \param[in] dispsep controls debug display of results in the sequence: + * 0: no output + * > 0: gives horizontal separation in pixels between + * successive displays + * < 0: pdf output; abs(dispsep) is used for naming + * \param[in] dispy if dispsep > 0, this gives the y-value of the + * UL corner for display; otherwise it is ignored + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This works on 32 bpp rgb images.
+ *      (2) Each component is processed separately.
+ *      (3) This runs a pipeline of operations; no branching is allowed.
+ *      (4) This only uses brick SELs.
+ *      (5) A new image is always produced; the input image is not changed.
+ *      (6) This contains an interpreter, allowing sequences to be
+ *          generated and run.
+ *      (7) Sel sizes (width, height) must each be odd numbers.
+ *      (8) The format of the sequence string is defined below.
+ *      (9) Intermediate results can optionally be displayed.
+ *      (10) The sequence string is formatted as follows:
+ *            ~ An arbitrary number of operations,  each separated
+ *              by a '+' character.  White space is ignored.
+ *            ~ Each operation begins with a case-independent character
+ *              specifying the operation:
+ *                 d or D  (dilation)
+ *                 e or E  (erosion)
+ *                 o or O  (opening)
+ *                 c or C  (closing)
+ *            ~ The args to the morphological operations are bricks of hits,
+ *              and are formatted as a.b, where a and b are horizontal and
+ *              vertical dimensions, rsp. (each must be an odd number)
+ *           Example valid sequences are:
+ *             "c5.3 + o7.5"
+ *             "D9.1"
+ * 
+ */ +PIX * +pixColorMorphSequence(PIX *pixs, + const char *sequence, + l_int32 dispsep, + l_int32 dispy) +{ +char *rawop, *op; +char fname[256]; +l_int32 nops, i, valid, w, h, x, pdfout; +PIX *pix1, *pix2; +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixColorMorphSequence"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sequence) + return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); + + /* Split sequence into individual operations */ + sa = sarrayCreate(0); + sarraySplitString(sa, sequence, "+"); + nops = sarrayGetCount(sa); + pdfout = (dispsep < 0) ? 1 : 0; + + /* Verify that the operation sequence is valid */ + valid = TRUE; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + case 'e': + case 'E': + case 'o': + case 'O': + case 'c': + case 'C': + if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { + fprintf(stderr, "*** op: %s invalid\n", op); + valid = FALSE; + break; + } + if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { + fprintf(stderr, + "*** op: %s; w = %d, h = %d; must both be odd\n", + op, w, h); + valid = FALSE; + break; + } +/* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ + break; + default: + fprintf(stderr, "*** nonexistent op = %s\n", op); + valid = FALSE; + } + LEPT_FREE(op); + } + if (!valid) { + sarrayDestroy(&sa); + return (PIX *)ERROR_PTR("sequence invalid", procName, NULL); + } + + /* Parse and operate */ + pixa = NULL; + if (pdfout) { + pixa = pixaCreate(0); + pixaAddPix(pixa, pixs, L_CLONE); + } + pix1 = pixCopy(NULL, pixs); + pix2 = NULL; + x = 0; + for (i = 0; i < nops; i++) { + rawop = sarrayGetString(sa, i, L_NOCOPY); + op = stringRemoveChars(rawop, " \n\t"); + switch (op[0]) + { + case 'd': + case 'D': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixColorMorph(pix1, L_MORPH_DILATE, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'e': + case 'E': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixColorMorph(pix1, L_MORPH_ERODE, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'o': + case 'O': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixColorMorph(pix1, L_MORPH_OPEN, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + case 'c': + case 'C': + sscanf(&op[1], "%d.%d", &w, &h); + pix2 = pixColorMorph(pix1, L_MORPH_CLOSE, w, h); + pixSwapAndDestroy(&pix1, &pix2); + break; + default: + /* All invalid ops are caught in the first pass */ + break; + } + LEPT_FREE(op); + + /* Debug output */ + if (dispsep > 0) { + pixDisplay(pix1, x, dispy); + x += dispsep; + } + if (pdfout) + pixaAddPix(pixa, pix1, L_COPY); + } + + if (pdfout) { + snprintf(fname, sizeof(fname), "/tmp/lept/seq_output_%d.pdf", + L_ABS(dispsep)); + pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); + pixaDestroy(&pixa); + } + + sarrayDestroy(&sa); + return pix1; +} diff --git a/3rdparty/hgOCR/leptonica/numabasic.c b/3rdparty/hgOCR/leptonica/numabasic.c new file mode 100644 index 00000000..84339c05 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/numabasic.c @@ -0,0 +1,2023 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file numabasic.c + *
+ *
+ *      Numa creation, destruction, copy, clone, etc.
+ *          NUMA        *numaCreate()
+ *          NUMA        *numaCreateFromIArray()
+ *          NUMA        *numaCreateFromFArray()
+ *          NUMA        *numaCreateFromString()
+ *          void        *numaDestroy()
+ *          NUMA        *numaCopy()
+ *          NUMA        *numaClone()
+ *          l_int32      numaEmpty()
+ *
+ *      Add/remove number (float or integer)
+ *          l_int32      numaAddNumber()
+ *          static l_int32  numaExtendArray()
+ *          l_int32      numaInsertNumber()
+ *          l_int32      numaRemoveNumber()
+ *          l_int32      numaReplaceNumber()
+ *
+ *      Numa accessors
+ *          l_int32      numaGetCount()
+ *          l_int32      numaSetCount()
+ *          l_int32      numaGetIValue()
+ *          l_int32      numaGetFValue()
+ *          l_int32      numaSetValue()
+ *          l_int32      numaShiftValue()
+ *          l_int32     *numaGetIArray()
+ *          l_float32   *numaGetFArray()
+ *          l_int32      numaGetRefcount()
+ *          l_int32      numaChangeRefcount()
+ *          l_int32      numaGetParameters()
+ *          l_int32      numaSetParameters()
+ *          l_int32      numaCopyParameters()
+ *
+ *      Convert to string array
+ *          SARRAY      *numaConvertToSarray()
+ *
+ *      Serialize numa for I/O
+ *          NUMA        *numaRead()
+ *          NUMA        *numaReadStream()
+ *          NUMA        *numaReadMem()
+ *          l_int32      numaWriteDebug()
+ *          l_int32      numaWrite()
+ *          l_int32      numaWriteStream()
+ *          l_int32      numaWriteMem()
+ *
+ *      Numaa creation, destruction, truncation
+ *          NUMAA       *numaaCreate()
+ *          NUMAA       *numaaCreateFull()
+ *          NUMAA       *numaaTruncate()
+ *          void        *numaaDestroy()
+ *
+ *      Add Numa to Numaa
+ *          l_int32      numaaAddNuma()
+ *          static l_int32   numaaExtendArray()
+ *
+ *      Numaa accessors
+ *          l_int32      numaaGetCount()
+ *          l_int32      numaaGetNumaCount()
+ *          l_int32      numaaGetNumberCount()
+ *          NUMA       **numaaGetPtrArray()
+ *          NUMA        *numaaGetNuma()
+ *          NUMA        *numaaReplaceNuma()
+ *          l_int32      numaaGetValue()
+ *          l_int32      numaaAddNumber()
+ *
+ *      Serialize numaa for I/O
+ *          NUMAA       *numaaRead()
+ *          NUMAA       *numaaReadStream()
+ *          NUMAA       *numaaReadMem()
+ *          l_int32      numaaWrite()
+ *          l_int32      numaaWriteStream()
+ *          l_int32      numaaWriteMem()
+ *
+ *    (1) The Numa is a struct holding an array of floats.  It can also
+ *        be used to store l_int32 values, with some loss of precision
+ *        for floats larger than about 10 million.  Use the L_Dna instead
+ *        if integers larger than a few million need to be stored.
+ *
+ *    (2) Always use the accessors in this file, never the fields directly.
+ *
+ *    (3) Storing and retrieving numbers:
+ *
+ *       * to append a new number to the array, use numaAddNumber().  If
+ *         the number is an int, it will will automatically be converted
+ *         to l_float32 and stored.
+ *
+ *       * to reset a value stored in the array, use numaSetValue().
+ *
+ *       * to increment or decrement a value stored in the array,
+ *         use numaShiftValue().
+ *
+ *       * to obtain a value from the array, use either numaGetIValue()
+ *         or numaGetFValue(), depending on whether you are retrieving
+ *         an integer or a float.  This avoids doing an explicit cast,
+ *         such as
+ *           (a) return a l_float32 and cast it to an l_int32
+ *           (b) cast the return directly to (l_float32 *) to
+ *               satisfy the function prototype, as in
+ *                 numaGetFValue(na, index, (l_float32 *)&ival);   [ugly!]
+ *
+ *    (4) int <--> float conversions:
+ *
+ *        Tradition dictates that type conversions go automatically from
+ *        l_int32 --> l_float32, even though it is possible to lose
+ *        precision for large integers, whereas you must cast (l_int32)
+ *        to go from l_float32 --> l_int32 because you're truncating
+ *        to the integer value.
+ *
+ *    (5) As with other arrays in leptonica, the numa has both an allocated
+ *        size and a count of the stored numbers.  When you add a number, it
+ *        goes on the end of the array, and causes a realloc if the array
+ *        is already filled.  However, in situations where you want to
+ *        add numbers randomly into an array, such as when you build a
+ *        histogram, you must set the count of stored numbers in advance.
+ *        This is done with numaSetCount().  If you set a count larger
+ *        than the allocated array, it does a realloc to the size requested.
+ *
+ *    (6) In situations where the data in a numa correspond to a function
+ *        y(x), the values can be either at equal spacings in x or at
+ *        arbitrary spacings.  For the former, we can represent all x values
+ *        by two parameters: startx (corresponding to y[0]) and delx
+ *        for the change in x for adjacent values y[i] and y[i+1].
+ *        startx and delx are initialized to 0.0 and 1.0, rsp.
+ *        For arbitrary spacings, we use a second numa, and the two
+ *        numas are typically denoted nay and nax.
+ *
+ *    (7) The numa is also the basic struct used for histograms.  Every numa
+ *        has startx and delx fields, initialized to 0.0 and 1.0, that can
+ *        be used to represent the "x" value for the location of the
+ *        first bin and the bin width, respectively.  Accessors are the
+ *        numa*Parameters() functions.  All functions that make numa
+ *        histograms must set these fields properly, and many functions
+ *        that use numa histograms rely on the correctness of these values.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxArraySize = 100000000; /* for numa */ +static const l_uint32 MaxPtrArraySize = 10000; /* for numaa */ +static const l_int32 InitialArraySize = 50; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 numaExtendArray(NUMA *na); +static l_int32 numaaExtendArray(NUMAA *naa); + +/*--------------------------------------------------------------------------* + * Numa creation, destruction, copy, clone, etc. * + *--------------------------------------------------------------------------*/ +/*! + * \brief numaCreate() + * + * \param[in] n size of number array to be alloc'd 0 for default + * \return na, or NULL on error + */ +NUMA * +numaCreate(l_int32 n) +{ +NUMA *na; + + PROCNAME("numaCreate"); + + if (n <= 0 || n > MaxArraySize) + n = InitialArraySize; + + na = (NUMA *)LEPT_CALLOC(1, sizeof(NUMA)); + if ((na->array = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) { + numaDestroy(&na); + return (NUMA *)ERROR_PTR("number array not made", procName, NULL); + } + + na->nalloc = n; + na->n = 0; + na->refcount = 1; + na->startx = 0.0; + na->delx = 1.0; + return na; +} + + +/*! + * \brief numaCreateFromIArray() + * + * \param[in] iarray integer array + * \param[in] size of the array + * \return na, or NULL on error + * + *
+ * Notes:
+ *      (1) We can't insert this int array into the numa, because a numa
+ *          takes a float array.  So this just copies the data from the
+ *          input array into the numa.  The input array continues to be
+ *          owned by the caller.
+ * 
+ */ +NUMA * +numaCreateFromIArray(l_int32 *iarray, + l_int32 size) +{ +l_int32 i; +NUMA *na; + + PROCNAME("numaCreateFromIArray"); + + if (!iarray) + return (NUMA *)ERROR_PTR("iarray not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + + na = numaCreate(size); + for (i = 0; i < size; i++) + numaAddNumber(na, iarray[i]); + + return na; +} + + +/*! + * \brief numaCreateFromFArray() + * + * \param[in] farray float array + * \param[in] size of the array + * \param[in] copyflag L_INSERT or L_COPY + * \return na, or NULL on error + * + *
+ * Notes:
+ *      (1) With L_INSERT, ownership of the input array is transferred
+ *          to the returned numa, and all %size elements are considered
+ *          to be valid.
+ * 
+ */ +NUMA * +numaCreateFromFArray(l_float32 *farray, + l_int32 size, + l_int32 copyflag) +{ +l_int32 i; +NUMA *na; + + PROCNAME("numaCreateFromFArray"); + + if (!farray) + return (NUMA *)ERROR_PTR("farray not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + if (copyflag != L_INSERT && copyflag != L_COPY) + return (NUMA *)ERROR_PTR("invalid copyflag", procName, NULL); + + na = numaCreate(size); + if (copyflag == L_INSERT) { + if (na->array) LEPT_FREE(na->array); + na->array = farray; + na->n = size; + } else { /* just copy the contents */ + for (i = 0; i < size; i++) + numaAddNumber(na, farray[i]); + } + + return na; +} + + +/*! + * \brief numaCreateFromString() + * + * \param[in] str string of comma-separated numbers + * \return na, or NULL on error + * + *
+ * Notes:
+ *      (1) The numbers can be ints or floats; they will be interpreted
+ *          and stored as floats.  To use them as integers (e.g., for
+ *          indexing into arrays), use numaGetIValue(...).
+ * 
+ */ +NUMA * +numaCreateFromString(const char *str) +{ +char *substr; +l_int32 i, n, nerrors; +l_float32 val; +NUMA *na; +SARRAY *sa; + + PROCNAME("numaCreateFromString"); + + if (!str || (strlen(str) == 0)) + return (NUMA *)ERROR_PTR("str not defined or empty", procName, NULL); + + sa = sarrayCreate(0); + sarraySplitString(sa, str, ","); + n = sarrayGetCount(sa); + na = numaCreate(n); + nerrors = 0; + for (i = 0; i < n; i++) { + substr = sarrayGetString(sa, i, L_NOCOPY); + if (sscanf(substr, "%f", &val) != 1) { + L_ERROR("substr %d not float\n", procName, i); + nerrors++; + } else { + numaAddNumber(na, val); + } + } + + sarrayDestroy(&sa); + if (nerrors > 0) { + numaDestroy(&na); + return (NUMA *)ERROR_PTR("non-floats in string", procName, NULL); + } + + return na; +} + + +/*! + * \brief numaDestroy() + * + * \param[in,out] pna numa to be destroyed and nulled if it exists + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the numa.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +numaDestroy(NUMA **pna) +{ +NUMA *na; + + PROCNAME("numaDestroy"); + + if (pna == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + + if ((na = *pna) == NULL) + return; + + /* Decrement the ref count. If it is 0, destroy the numa. */ + numaChangeRefcount(na, -1); + if (numaGetRefcount(na) <= 0) { + if (na->array) + LEPT_FREE(na->array); + LEPT_FREE(na); + } + + *pna = NULL; + return; +} + + +/*! + * \brief numaCopy() + * + * \param[in] na + * \return copy of numa, or NULL on error + */ +NUMA * +numaCopy(NUMA *na) +{ +l_int32 i; +NUMA *cna; + + PROCNAME("numaCopy"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + + if ((cna = numaCreate(na->nalloc)) == NULL) + return (NUMA *)ERROR_PTR("cna not made", procName, NULL); + cna->startx = na->startx; + cna->delx = na->delx; + + for (i = 0; i < na->n; i++) + numaAddNumber(cna, na->array[i]); + + return cna; +} + + +/*! + * \brief numaClone() + * + * \param[in] na + * \return ptr to same numa, or NULL on error + */ +NUMA * +numaClone(NUMA *na) +{ + PROCNAME("numaClone"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + + numaChangeRefcount(na, 1); + return na; +} + + +/*! + * \brief numaEmpty() + * + * \param[in] na + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This does not change the allocation of the array.
+ *          It just clears the number of stored numbers, so that
+ *          the array appears to be empty.
+ * 
+ */ +l_ok +numaEmpty(NUMA *na) +{ + PROCNAME("numaEmpty"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + + na->n = 0; + return 0; +} + + + +/*--------------------------------------------------------------------------* + * Number array: add number and extend array * + *--------------------------------------------------------------------------*/ +/*! + * \brief numaAddNumber() + * + * \param[in] na + * \param[in] val float or int to be added; stored as a float + * \return 0 if OK, 1 on error + */ +l_ok +numaAddNumber(NUMA *na, + l_float32 val) +{ +l_int32 n; + + PROCNAME("numaAddNumber"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + + n = numaGetCount(na); + if (n >= na->nalloc) + numaExtendArray(na); + na->array[n] = val; + na->n++; + return 0; +} + + +/*! + * \brief numaExtendArray() + * + * \param[in] na + * \return 0 if OK, 1 on error + */ +static l_int32 +numaExtendArray(NUMA *na) +{ + PROCNAME("numaExtendArray"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if ((na->array = (l_float32 *)reallocNew((void **)&na->array, + sizeof(l_float32) * na->nalloc, + 2 * sizeof(l_float32) * na->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + na->nalloc *= 2; + return 0; +} + + +/*! + * \brief numaInsertNumber() + * + * \param[in] na + * \param[in] index location in na to insert new value + * \param[in] val float32 or integer to be added + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts na[i] --> na[i + 1] for all i >= index,
+ *          and then inserts val as na[index].
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ *
+ * 
+ */ +l_ok +numaInsertNumber(NUMA *na, + l_int32 index, + l_float32 val) +{ +l_int32 i, n; + + PROCNAME("numaInsertNumber"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + + if (n >= na->nalloc) + numaExtendArray(na); + for (i = n; i > index; i--) + na->array[i] = na->array[i - 1]; + na->array[index] = val; + na->n++; + return 0; +} + + +/*! + * \brief numaRemoveNumber() + * + * \param[in] na + * \param[in] index element to be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts na[i] --> na[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +numaRemoveNumber(NUMA *na, + l_int32 index) +{ +l_int32 i, n; + + PROCNAME("numaRemoveNumber"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + for (i = index + 1; i < n; i++) + na->array[i - 1] = na->array[i]; + na->n--; + return 0; +} + + +/*! + * \brief numaReplaceNumber() + * + * \param[in] na + * \param[in] index element to be replaced + * \param[in] val new value to replace old one + * \return 0 if OK, 1 on error + */ +l_ok +numaReplaceNumber(NUMA *na, + l_int32 index, + l_float32 val) +{ +l_int32 n; + + PROCNAME("numaReplaceNumber"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + na->array[index] = val; + return 0; +} + + +/*----------------------------------------------------------------------* + * Numa accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief numaGetCount() + * + * \param[in] na + * \return count, or 0 if no numbers or on error + */ +l_int32 +numaGetCount(NUMA *na) +{ + PROCNAME("numaGetCount"); + + if (!na) + return ERROR_INT("na not defined", procName, 0); + return na->n; +} + + +/*! + * \brief numaSetCount() + * + * \param[in] na + * \param[in] newcount + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If newcount <= na->nalloc, this resets na->n.
+ *          Using newcount = 0 is equivalent to numaEmpty().
+ *      (2) If newcount > na->nalloc, this causes a realloc
+ *          to a size na->nalloc = newcount.
+ *      (3) All the previously unused values in na are set to 0.0.
+ * 
+ */ +l_ok +numaSetCount(NUMA *na, + l_int32 newcount) +{ + PROCNAME("numaSetCount"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (newcount > na->nalloc) { + if ((na->array = (l_float32 *)reallocNew((void **)&na->array, + sizeof(l_float32) * na->nalloc, + sizeof(l_float32) * newcount)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + na->nalloc = newcount; + } + na->n = newcount; + return 0; +} + + +/*! + * \brief numaGetFValue() + * + * \param[in] na + * \param[in] index into numa + * \param[out] pval float value; set to 0.0 on error + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caller may need to check the function return value to
+ *          decide if a 0.0 in the returned ival is valid.
+ * 
+ */ +l_ok +numaGetFValue(NUMA *na, + l_int32 index, + l_float32 *pval) +{ + PROCNAME("numaGetFValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if (index < 0 || index >= na->n) + return ERROR_INT("index not valid", procName, 1); + + *pval = na->array[index]; + return 0; +} + + +/*! + * \brief numaGetIValue() + * + * \param[in] na + * \param[in] index into numa + * \param[out] pival integer value; set to 0 on error + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caller may need to check the function return value to
+ *          decide if a 0 in the returned ival is valid.
+ * 
+ */ +l_ok +numaGetIValue(NUMA *na, + l_int32 index, + l_int32 *pival) +{ +l_float32 val; + + PROCNAME("numaGetIValue"); + + if (!pival) + return ERROR_INT("&ival not defined", procName, 1); + *pival = 0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if (index < 0 || index >= na->n) + return ERROR_INT("index not valid", procName, 1); + + val = na->array[index]; + *pival = (l_int32)(val + L_SIGN(val) * 0.5); + return 0; +} + + +/*! + * \brief numaSetValue() + * + * \param[in] na + * \param[in] index to element to be set + * \param[in] val to set + * \return 0 if OK; 1 on error + */ +l_ok +numaSetValue(NUMA *na, + l_int32 index, + l_float32 val) +{ + PROCNAME("numaSetValue"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (index < 0 || index >= na->n) + return ERROR_INT("index not valid", procName, 1); + + na->array[index] = val; + return 0; +} + + +/*! + * \brief numaShiftValue() + * + * \param[in] na + * \param[in] index to element to change relative to the current value + * \param[in] diff increment if diff > 0 or decrement if diff < 0 + * \return 0 if OK; 1 on error + */ +l_ok +numaShiftValue(NUMA *na, + l_int32 index, + l_float32 diff) +{ + PROCNAME("numaShiftValue"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (index < 0 || index >= na->n) + return ERROR_INT("index not valid", procName, 1); + + na->array[index] += diff; + return 0; +} + + +/*! + * \brief numaGetIArray() + * + * \param[in] na + * \return a copy of the bare internal array, integerized + * by rounding, or NULL on error + *
+ * Notes:
+ *      (1) A copy of the array is always made, because we need to
+ *          generate an integer array from the bare float array.
+ *          The caller is responsible for freeing the array.
+ *      (2) The array size is determined by the number of stored numbers,
+ *          not by the size of the allocated array in the Numa.
+ *      (3) This function is provided to simplify calculations
+ *          using the bare internal array, rather than continually
+ *          calling accessors on the numa.  It is typically used
+ *          on an array of size 256.
+ * 
+ */ +l_int32 * +numaGetIArray(NUMA *na) +{ +l_int32 i, n, ival; +l_int32 *array; + + PROCNAME("numaGetIArray"); + + if (!na) + return (l_int32 *)ERROR_PTR("na not defined", procName, NULL); + + n = numaGetCount(na); + if ((array = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32))) == NULL) + return (l_int32 *)ERROR_PTR("array not made", procName, NULL); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + array[i] = ival; + } + + return array; +} + + +/*! + * \brief numaGetFArray() + * + * \param[in] na + * \param[in] copyflag L_NOCOPY or L_COPY + * \return either the bare internal array or a copy of it, + * or NULL on error + * + *
+ * Notes:
+ *      (1) If copyflag == L_COPY, it makes a copy which the caller
+ *          is responsible for freeing.  Otherwise, it operates
+ *          directly on the bare array of the numa.
+ *      (2) Very important: for L_NOCOPY, any writes to the array
+ *          will be in the numa.  Do not write beyond the size of
+ *          the count field, because it will not be accessible
+ *          from the numa!  If necessary, be sure to set the count
+ *          field to a larger number (such as the alloc size)
+ *          BEFORE calling this function.  Creating with numaMakeConstant()
+ *          is another way to insure full initialization.
+ * 
+ */ +l_float32 * +numaGetFArray(NUMA *na, + l_int32 copyflag) +{ +l_int32 i, n; +l_float32 *array; + + PROCNAME("numaGetFArray"); + + if (!na) + return (l_float32 *)ERROR_PTR("na not defined", procName, NULL); + + if (copyflag == L_NOCOPY) { + array = na->array; + } else { /* copyflag == L_COPY */ + n = numaGetCount(na); + if ((array = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) + return (l_float32 *)ERROR_PTR("array not made", procName, NULL); + for (i = 0; i < n; i++) + array[i] = na->array[i]; + } + + return array; +} + + +/*! + * \brief numaGetRefCount() + * + * \param[in] na + * \return refcount, or UNDEF on error + */ +l_int32 +numaGetRefcount(NUMA *na) +{ + PROCNAME("numaGetRefcount"); + + if (!na) + return ERROR_INT("na not defined", procName, UNDEF); + return na->refcount; +} + + +/*! + * \brief numaChangeRefCount() + * + * \param[in] na + * \param[in] delta change to be applied + * \return 0 if OK, 1 on error + */ +l_ok +numaChangeRefcount(NUMA *na, + l_int32 delta) +{ + PROCNAME("numaChangeRefcount"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + na->refcount += delta; + return 0; +} + + +/*! + * \brief numaGetParameters() + * + * \param[in] na + * \param[out] pstartx [optional] startx + * \param[out] pdelx [optional] delx + * \return 0 if OK, 1 on error + */ +l_ok +numaGetParameters(NUMA *na, + l_float32 *pstartx, + l_float32 *pdelx) +{ + PROCNAME("numaGetParameters"); + + if (!pdelx && !pstartx) + return ERROR_INT("no return val requested", procName, 1); + if (pstartx) *pstartx = 0.0; + if (pdelx) *pdelx = 1.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if (pstartx) *pstartx = na->startx; + if (pdelx) *pdelx = na->delx; + return 0; +} + + +/*! + * \brief numaSetParameters() + * + * \param[in] na + * \param[in] startx x value corresponding to na[0] + * \param[in] delx difference in x values for the situation where the + * elements of na correspond to the evaulation of a + * function at equal intervals of size %delx + * \return 0 if OK, 1 on error + */ +l_ok +numaSetParameters(NUMA *na, + l_float32 startx, + l_float32 delx) +{ + PROCNAME("numaSetParameters"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + + na->startx = startx; + na->delx = delx; + return 0; +} + + +/*! + * \brief numaCopyParameters() + * + * \param[in] nad destination Numa + * \param[in] nas source Numa + * \return 0 if OK, 1 on error + */ +l_ok +numaCopyParameters(NUMA *nad, + NUMA *nas) +{ +l_float32 start, binsize; + + PROCNAME("numaCopyParameters"); + + if (!nas || !nad) + return ERROR_INT("nas and nad not both defined", procName, 1); + + numaGetParameters(nas, &start, &binsize); + numaSetParameters(nad, start, binsize); + return 0; +} + + +/*----------------------------------------------------------------------* + * Convert to string array * + *----------------------------------------------------------------------*/ +/*! + * \brief numaConvertToSarray() + * + * \param[in] na + * \param[in] size1 size of conversion field + * \param[in] size2 for float conversion: size of field to the right + * of the decimal point + * \param[in] addzeros for integer conversion: to add lead zeros + * \param[in] type L_INTEGER_VALUE, L_FLOAT_VALUE + * \return a sarray of the float values converted to strings + * representing either integer or float values; or NULL on error. + * + *
+ * Notes:
+ *      (1) For integer conversion, size2 is ignored.
+ *          For float conversion, addzeroes is ignored.
+ * 
+ */ +SARRAY * +numaConvertToSarray(NUMA *na, + l_int32 size1, + l_int32 size2, + l_int32 addzeros, + l_int32 type) +{ +char fmt[32], strbuf[64]; +l_int32 i, n, ival; +l_float32 fval; +SARRAY *sa; + + PROCNAME("numaConvertToSarray"); + + if (!na) + return (SARRAY *)ERROR_PTR("na not defined", procName, NULL); + if (type != L_INTEGER_VALUE && type != L_FLOAT_VALUE) + return (SARRAY *)ERROR_PTR("invalid type", procName, NULL); + + if (type == L_INTEGER_VALUE) { + if (addzeros) + snprintf(fmt, sizeof(fmt), "%%0%dd", size1); + else + snprintf(fmt, sizeof(fmt), "%%%dd", size1); + } else { /* L_FLOAT_VALUE */ + snprintf(fmt, sizeof(fmt), "%%%d.%df", size1, size2); + } + + n = numaGetCount(na); + if ((sa = sarrayCreate(n)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + + for (i = 0; i < n; i++) { + if (type == L_INTEGER_VALUE) { + numaGetIValue(na, i, &ival); + snprintf(strbuf, sizeof(strbuf), fmt, ival); + } else { /* L_FLOAT_VALUE */ + numaGetFValue(na, i, &fval); + snprintf(strbuf, sizeof(strbuf), fmt, fval); + } + sarrayAddString(sa, strbuf, L_COPY); + } + + return sa; +} + + +/*----------------------------------------------------------------------* + * Serialize numa for I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief numaRead() + * + * \param[in] filename + * \return na, or NULL on error + */ +NUMA * +numaRead(const char *filename) +{ +FILE *fp; +NUMA *na; + + PROCNAME("numaRead"); + + if (!filename) + return (NUMA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (NUMA *)ERROR_PTR("stream not opened", procName, NULL); + na = numaReadStream(fp); + fclose(fp); + if (!na) + return (NUMA *)ERROR_PTR("na not read", procName, NULL); + return na; +} + + +/*! + * \brief numaReadStream() + * + * \param[in] fp file stream + * \return numa, or NULL on error + */ +NUMA * +numaReadStream(FILE *fp) +{ +l_int32 i, n, index, ret, version; +l_float32 val, startx, delx; +NUMA *na; + + PROCNAME("numaReadStream"); + + if (!fp) + return (NUMA *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, "\nNuma Version %d\n", &version); + if (ret != 1) + return (NUMA *)ERROR_PTR("not a numa file", procName, NULL); + if (version != NUMA_VERSION_NUMBER) + return (NUMA *)ERROR_PTR("invalid numa version", procName, NULL); + if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) + return (NUMA *)ERROR_PTR("invalid number of numbers", procName, NULL); + + if (n > MaxArraySize) { + L_ERROR("n = %d > %d\n", procName, n, MaxArraySize); + return NULL; + } + if ((na = numaCreate(n)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + + for (i = 0; i < n; i++) { + if (fscanf(fp, " [%d] = %f\n", &index, &val) != 2) { + numaDestroy(&na); + return (NUMA *)ERROR_PTR("bad input data", procName, NULL); + } + numaAddNumber(na, val); + } + + /* Optional data */ + if (fscanf(fp, "startx = %f, delx = %f\n", &startx, &delx) == 2) + numaSetParameters(na, startx, delx); + + return na; +} + + +/*! + * \brief numaReadMem() + * + * \param[in] data numa serialization; in ascii + * \param[in] size of data; can use strlen to get it + * \return na, or NULL on error + */ +NUMA * +numaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +NUMA *na; + + PROCNAME("numaReadMem"); + + if (!data) + return (NUMA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (NUMA *)ERROR_PTR("stream not opened", procName, NULL); + + na = numaReadStream(fp); + fclose(fp); + if (!na) L_ERROR("numa not read\n", procName); + return na; +} + + +/*! + * \brief numaWriteDebug() + * + * \param[in] filename + * \param[in] na + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of numaWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +numaWriteDebug(const char *filename, + NUMA *na) +{ + PROCNAME("numaWriteDebug"); + + if (LeptDebugOK) { + return numaWrite(filename, na); + } else { + L_INFO("write to named temp file %s is disabled\n", procName, filename); + return 0; + } +} + + +/*! + * \brief numaWrite() + * + * \param[in] filename + * \param[in] na + * \return 0 if OK, 1 on error + */ +l_ok +numaWrite(const char *filename, + NUMA *na) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("numaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = numaWriteStream(fp, na); + fclose(fp); + if (ret) + return ERROR_INT("na not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief numaWriteStream() + * + * \param[in] fp file stream + * \param[in] na + * \return 0 if OK, 1 on error + */ +l_ok +numaWriteStream(FILE *fp, + NUMA *na) +{ +l_int32 i, n; +l_float32 startx, delx; + + PROCNAME("numaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + + n = numaGetCount(na); + fprintf(fp, "\nNuma Version %d\n", NUMA_VERSION_NUMBER); + fprintf(fp, "Number of numbers = %d\n", n); + for (i = 0; i < n; i++) + fprintf(fp, " [%d] = %f\n", i, na->array[i]); + fprintf(fp, "\n"); + + /* Optional data */ + numaGetParameters(na, &startx, &delx); + if (startx != 0.0 || delx != 1.0) + fprintf(fp, "startx = %f, delx = %f\n", startx, delx); + + return 0; +} + + +/*! + * \brief numaWriteMem() + * + * \param[out] pdata data of serialized numa; ascii + * \param[out] psize size of returned data + * \param[in] na + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a numa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +numaWriteMem(l_uint8 **pdata, + size_t *psize, + NUMA *na) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("numaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = numaWriteStream(fp, na); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = numaWriteStream(fp, na); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*--------------------------------------------------------------------------* + * Numaa creation, destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief numaaCreate() + * + * \param[in] n size of numa ptr array to be alloc'd 0 for default + * \return naa, or NULL on error + * + */ +NUMAA * +numaaCreate(l_int32 n) +{ +NUMAA *naa; + + PROCNAME("numaaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialArraySize; + + naa = (NUMAA *)LEPT_CALLOC(1, sizeof(NUMAA)); + if ((naa->numa = (NUMA **)LEPT_CALLOC(n, sizeof(NUMA *))) == NULL) { + numaaDestroy(&naa); + return (NUMAA *)ERROR_PTR("numa ptr array not made", procName, NULL); + } + + naa->nalloc = n; + naa->n = 0; + return naa; +} + + +/*! + * \brief numaaCreateFull() + * + * \param[in] nptr size of numa ptr array to be alloc'd + * \param[in] n size of individual numa arrays to be allocated + * to 0 for default + * \return naa, or NULL on error + * + *
+ * Notes:
+ *      (1) This allocates numaa and fills the array with allocated numas.
+ *          In use, after calling this function, use
+ *              numaaAddNumber(naa, index, val);
+ *          to add val to the index-th numa in naa.
+ * 
+ */ +NUMAA * +numaaCreateFull(l_int32 nptr, + l_int32 n) +{ +l_int32 i; +NUMAA *naa; +NUMA *na; + + naa = numaaCreate(nptr); + for (i = 0; i < nptr; i++) { + na = numaCreate(n); + numaaAddNuma(naa, na, L_INSERT); + } + + return naa; +} + + +/*! + * \brief numaaTruncate() + * + * \param[in] naa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This identifies the largest index containing a numa that
+ *          has any numbers within it, destroys all numa beyond that
+ *          index, and resets the count.
+ * 
+ */ +l_ok +numaaTruncate(NUMAA *naa) +{ +l_int32 i, n, nn; +NUMA *na; + + PROCNAME("numaaTruncate"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + + n = numaaGetCount(naa); + for (i = n - 1; i >= 0; i--) { + na = numaaGetNuma(naa, i, L_CLONE); + if (!na) + continue; + nn = numaGetCount(na); + numaDestroy(&na); + if (nn == 0) + numaDestroy(&naa->numa[i]); + else + break; + } + naa->n = i + 1; + return 0; +} + + +/*! + * \brief numaaDestroy() + * + * \param[in,out] pnaa to be destroyed and nulled, if it exists + * \return void + */ +void +numaaDestroy(NUMAA **pnaa) +{ +l_int32 i; +NUMAA *naa; + + PROCNAME("numaaDestroy"); + + if (pnaa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((naa = *pnaa) == NULL) + return; + + for (i = 0; i < naa->n; i++) + numaDestroy(&naa->numa[i]); + LEPT_FREE(naa->numa); + LEPT_FREE(naa); + *pnaa = NULL; + + return; +} + + + +/*--------------------------------------------------------------------------* + * Add Numa to Numaa * + *--------------------------------------------------------------------------*/ +/*! + * \brief numaaAddNuma() + * + * \param[in] naa + * \param[in] na to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +numaaAddNuma(NUMAA *naa, + NUMA *na, + l_int32 copyflag) +{ +l_int32 n; +NUMA *nac; + + PROCNAME("numaaAddNuma"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if (copyflag == L_INSERT) { + nac = na; + } else if (copyflag == L_COPY) { + if ((nac = numaCopy(na)) == NULL) + return ERROR_INT("nac not made", procName, 1); + } else if (copyflag == L_CLONE) { + nac = numaClone(na); + } else { + return ERROR_INT("invalid copyflag", procName, 1); + } + + n = numaaGetCount(naa); + if (n >= naa->nalloc) + numaaExtendArray(naa); + naa->numa[n] = nac; + naa->n++; + return 0; +} + + +/*! + * \brief numaaExtendArray() + * + * \param[in] naa + * \return 0 if OK, 1 on error + */ +static l_int32 +numaaExtendArray(NUMAA *naa) +{ + PROCNAME("numaaExtendArray"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + + if ((naa->numa = (NUMA **)reallocNew((void **)&naa->numa, + sizeof(NUMA *) * naa->nalloc, + 2 * sizeof(NUMA *) * naa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + naa->nalloc *= 2; + return 0; +} + + +/*----------------------------------------------------------------------* + * Numaa accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief numaaGetCount() + * + * \param[in] naa + * \return count number of numa, or 0 if no numa or on error + */ +l_int32 +numaaGetCount(NUMAA *naa) +{ + PROCNAME("numaaGetCount"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 0); + return naa->n; +} + + +/*! + * \brief numaaGetNumaCount() + * + * \param[in] naa + * \param[in] index of numa in naa + * \return count of numbers in the referenced numa, or 0 on error. + */ +l_int32 +numaaGetNumaCount(NUMAA *naa, + l_int32 index) +{ + PROCNAME("numaaGetNumaCount"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 0); + if (index < 0 || index >= naa->n) + return ERROR_INT("invalid index into naa", procName, 0); + return numaGetCount(naa->numa[index]); +} + + +/*! + * \brief numaaGetNumberCount() + * + * \param[in] naa + * \return count total number of numbers in the numaa, + * or 0 if no numbers or on error + */ +l_int32 +numaaGetNumberCount(NUMAA *naa) +{ +NUMA *na; +l_int32 n, sum, i; + + PROCNAME("numaaGetNumberCount"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 0); + + n = numaaGetCount(naa); + for (sum = 0, i = 0; i < n; i++) { + na = numaaGetNuma(naa, i, L_CLONE); + sum += numaGetCount(na); + numaDestroy(&na); + } + + return sum; +} + + +/*! + * \brief numaaGetPtrArray() + * + * \param[in] naa + * \return the internal array of ptrs to Numa, or NULL on error + * + *
+ * Notes:
+ *      (1) This function is convenient for doing direct manipulation on
+ *          a fixed size array of Numas.  To do this, it sets the count
+ *          to the full size of the allocated array of Numa ptrs.
+ *          The originating Numaa owns this array: DO NOT free it!
+ *      (2) Intended usage:
+ *            Numaa *naa = numaaCreate(n);
+ *            Numa **array = numaaGetPtrArray(naa);
+ *             ...  [manipulate Numas directly on the array]
+ *            numaaDestroy(&naa);
+ *      (3) Cautions:
+ *           ~ Do not free this array; it is owned by tne Numaa.
+ *           ~ Do not call any functions on the Numaa, other than
+ *             numaaDestroy() when you're finished with the array.
+ *             Adding a Numa will force a resize, destroying the ptr array.
+ *           ~ Do not address the array outside its allocated size.
+ *             With the bare array, there are no protections.  If the
+ *             allocated size is n, array[n] is an error.
+ * 
+ */ +NUMA ** +numaaGetPtrArray(NUMAA *naa) +{ + PROCNAME("numaaGetPtrArray"); + + if (!naa) + return (NUMA **)ERROR_PTR("naa not defined", procName, NULL); + + naa->n = naa->nalloc; + return naa->numa; +} + + +/*! + * \brief numaaGetNuma() + * + * \param[in] naa + * \param[in] index to the index-th numa + * \param[in] accessflag L_COPY or L_CLONE + * \return numa, or NULL on error + */ +NUMA * +numaaGetNuma(NUMAA *naa, + l_int32 index, + l_int32 accessflag) +{ + PROCNAME("numaaGetNuma"); + + if (!naa) + return (NUMA *)ERROR_PTR("naa not defined", procName, NULL); + if (index < 0 || index >= naa->n) + return (NUMA *)ERROR_PTR("index not valid", procName, NULL); + + if (accessflag == L_COPY) + return numaCopy(naa->numa[index]); + else if (accessflag == L_CLONE) + return numaClone(naa->numa[index]); + else + return (NUMA *)ERROR_PTR("invalid accessflag", procName, NULL); +} + + +/*! + * \brief numaaReplaceNuma() + * + * \param[in] naa + * \param[in] index to the index-th numa + * \param[in] na insert and replace any existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Any existing numa is destroyed, and the input one
+ *          is inserted in its place.
+ *      (2) If the index is invalid, return 1 (error)
+ * 
+ */ +l_ok +numaaReplaceNuma(NUMAA *naa, + l_int32 index, + NUMA *na) +{ +l_int32 n; + + PROCNAME("numaaReplaceNuma"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaaGetCount(naa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + + numaDestroy(&naa->numa[index]); + naa->numa[index] = na; + return 0; +} + + +/*! + * \brief numaaGetValue() + * + * \param[in] naa + * \param[in] i index of numa within numaa + * \param[in] j index into numa + * \param[out] pfval [optional] float value + * \param[out] pival [optional] int value + * \return 0 if OK, 1 on error + */ +l_ok +numaaGetValue(NUMAA *naa, + l_int32 i, + l_int32 j, + l_float32 *pfval, + l_int32 *pival) +{ +l_int32 n; +NUMA *na; + + PROCNAME("numaaGetValue"); + + if (!pfval && !pival) + return ERROR_INT("no return val requested", procName, 1); + if (pfval) *pfval = 0.0; + if (pival) *pival = 0; + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + n = numaaGetCount(naa); + if (i < 0 || i >= n) + return ERROR_INT("invalid index into naa", procName, 1); + na = naa->numa[i]; + if (j < 0 || j >= na->n) + return ERROR_INT("invalid index into na", procName, 1); + if (pfval) *pfval = na->array[j]; + if (pival) *pival = (l_int32)(na->array[j]); + return 0; +} + + +/*! + * \brief numaaAddNumber() + * + * \param[in] naa + * \param[in] index of numa within numaa + * \param[in] val float or int to be added; stored as a float + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Adds to an existing numa only.
+ * 
+ */ +l_ok +numaaAddNumber(NUMAA *naa, + l_int32 index, + l_float32 val) +{ +l_int32 n; +NUMA *na; + + PROCNAME("numaaAddNumber"); + + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + n = numaaGetCount(naa); + if (index < 0 || index >= n) + return ERROR_INT("invalid index in naa", procName, 1); + + na = numaaGetNuma(naa, index, L_CLONE); + numaAddNumber(na, val); + numaDestroy(&na); + return 0; +} + + +/*----------------------------------------------------------------------* + * Serialize numaa for I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief numaaRead() + * + * \param[in] filename + * \return naa, or NULL on error + */ +NUMAA * +numaaRead(const char *filename) +{ +FILE *fp; +NUMAA *naa; + + PROCNAME("numaaRead"); + + if (!filename) + return (NUMAA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (NUMAA *)ERROR_PTR("stream not opened", procName, NULL); + naa = numaaReadStream(fp); + fclose(fp); + if (!naa) + return (NUMAA *)ERROR_PTR("naa not read", procName, NULL); + return naa; +} + + +/*! + * \brief numaaReadStream() + * + * \param[in] fp file stream + * \return naa, or NULL on error + */ +NUMAA * +numaaReadStream(FILE *fp) +{ +l_int32 i, n, index, ret, version; +NUMA *na; +NUMAA *naa; + + PROCNAME("numaaReadStream"); + + if (!fp) + return (NUMAA *)ERROR_PTR("stream not defined", procName, NULL); + + ret = fscanf(fp, "\nNumaa Version %d\n", &version); + if (ret != 1) + return (NUMAA *)ERROR_PTR("not a numa file", procName, NULL); + if (version != NUMA_VERSION_NUMBER) + return (NUMAA *)ERROR_PTR("invalid numaa version", procName, NULL); + if (fscanf(fp, "Number of numa = %d\n\n", &n) != 1) + return (NUMAA *)ERROR_PTR("invalid number of numa", procName, NULL); + + if (n > MaxPtrArraySize) { + L_ERROR("n = %d > %d\n", procName, n, MaxPtrArraySize); + return NULL; + } + if ((naa = numaaCreate(n)) == NULL) + return (NUMAA *)ERROR_PTR("naa not made", procName, NULL); + + for (i = 0; i < n; i++) { + if (fscanf(fp, "Numa[%d]:", &index) != 1) { + numaaDestroy(&naa); + return (NUMAA *)ERROR_PTR("invalid numa header", procName, NULL); + } + if ((na = numaReadStream(fp)) == NULL) { + numaaDestroy(&naa); + return (NUMAA *)ERROR_PTR("na not made", procName, NULL); + } + numaaAddNuma(naa, na, L_INSERT); + } + + return naa; +} + + +/*! + * \brief numaaReadMem() + * + * \param[in] data numaa serialization; in ascii + * \param[in] size of data; can use strlen to get it + * \return naa, or NULL on error + */ +NUMAA * +numaaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +NUMAA *naa; + + PROCNAME("numaaReadMem"); + + if (!data) + return (NUMAA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (NUMAA *)ERROR_PTR("stream not opened", procName, NULL); + + naa = numaaReadStream(fp); + fclose(fp); + if (!naa) L_ERROR("naa not read\n", procName); + return naa; +} + + +/*! + * \brief numaaWrite() + * + * \param[in] filename + * \param[in] naa + * \return 0 if OK, 1 on error + */ +l_ok +numaaWrite(const char *filename, + NUMAA *naa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("numaaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = numaaWriteStream(fp, naa); + fclose(fp); + if (ret) + return ERROR_INT("naa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief numaaWriteStream() + * + * \param[in] fp file stream + * \param[in] naa + * \return 0 if OK, 1 on error + */ +l_ok +numaaWriteStream(FILE *fp, + NUMAA *naa) +{ +l_int32 i, n; +NUMA *na; + + PROCNAME("numaaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + + n = numaaGetCount(naa); + fprintf(fp, "\nNumaa Version %d\n", NUMA_VERSION_NUMBER); + fprintf(fp, "Number of numa = %d\n\n", n); + for (i = 0; i < n; i++) { + if ((na = numaaGetNuma(naa, i, L_CLONE)) == NULL) + return ERROR_INT("na not found", procName, 1); + fprintf(fp, "Numa[%d]:", i); + numaWriteStream(fp, na); + numaDestroy(&na); + } + + return 0; +} + + +/*! + * \brief numaaWriteMem() + * + * \param[out] pdata data of serialized numaa; ascii + * \param[out] psize size of returned data + * \param[in] naa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a numaa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +numaaWriteMem(l_uint8 **pdata, + size_t *psize, + NUMAA *naa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("numaaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = numaaWriteStream(fp, naa); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = numaaWriteStream(fp, naa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + diff --git a/3rdparty/hgOCR/leptonica/numafunc1.c b/3rdparty/hgOCR/leptonica/numafunc1.c new file mode 100644 index 00000000..e46092bb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/numafunc1.c @@ -0,0 +1,3488 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file numafunc1.c + *
+ *
+ *      --------------------------------------
+ *      This file has these Numa utilities:
+ *         - arithmetic operations
+ *         - simple data analysis
+ *         - generation of special sequences
+ *         - permutations
+ *         - interpolation
+ *         - sorting
+ *         - data analysis requiring sorting
+ *         - joins and rearrangements
+ *      --------------------------------------
+ *
+ *      Arithmetic and logic
+ *          NUMA        *numaArithOp()
+ *          NUMA        *numaLogicalOp()
+ *          NUMA        *numaInvert()
+ *          l_int32      numaSimilar()
+ *          l_int32      numaAddToNumber()
+ *
+ *      Simple extractions
+ *          l_int32      numaGetMin()
+ *          l_int32      numaGetMax()
+ *          l_int32      numaGetSum()
+ *          NUMA        *numaGetPartialSums()
+ *          l_int32      numaGetSumOnInterval()
+ *          l_int32      numaHasOnlyIntegers()
+ *          NUMA        *numaSubsample()
+ *          NUMA        *numaMakeDelta()
+ *          NUMA        *numaMakeSequence()
+ *          NUMA        *numaMakeConstant()
+ *          NUMA        *numaMakeAbsValue()
+ *          NUMA        *numaAddBorder()
+ *          NUMA        *numaAddSpecifiedBorder()
+ *          NUMA        *numaRemoveBorder()
+ *          l_int32      numaCountNonzeroRuns()
+ *          l_int32      numaGetNonzeroRange()
+ *          l_int32      numaGetCountRelativeToZero()
+ *          NUMA        *numaClipToInterval()
+ *          NUMA        *numaMakeThresholdIndicator()
+ *          NUMA        *numaUniformSampling()
+ *          NUMA        *numaReverse()
+ *
+ *      Signal feature extraction
+ *          NUMA        *numaLowPassIntervals()
+ *          NUMA        *numaThresholdEdges()
+ *          NUMA        *numaGetSpanValues()
+ *          NUMA        *numaGetEdgeValues()
+ *
+ *      Interpolation
+ *          l_int32      numaInterpolateEqxVal()
+ *          l_int32      numaInterpolateEqxInterval()
+ *          l_int32      numaInterpolateArbxVal()
+ *          l_int32      numaInterpolateArbxInterval()
+ *
+ *      Functions requiring interpolation
+ *          l_int32      numaFitMax()
+ *          l_int32      numaDifferentiateInterval()
+ *          l_int32      numaIntegrateInterval()
+ *
+ *      Sorting
+ *          NUMA        *numaSortGeneral()
+ *          NUMA        *numaSortAutoSelect()
+ *          NUMA        *numaSortIndexAutoSelect()
+ *          l_int32      numaChooseSortType()
+ *          NUMA        *numaSort()
+ *          NUMA        *numaBinSort()
+ *          NUMA        *numaGetSortIndex()
+ *          NUMA        *numaGetBinSortIndex()
+ *          NUMA        *numaSortByIndex()
+ *          l_int32      numaIsSorted()
+ *          l_int32      numaSortPair()
+ *          NUMA        *numaInvertMap()
+ *
+ *      Random permutation
+ *          NUMA        *numaPseudorandomSequence()
+ *          NUMA        *numaRandomPermutation()
+ *
+ *      Functions requiring sorting
+ *          l_int32      numaGetRankValue()
+ *          l_int32      numaGetMedian()
+ *          l_int32      numaGetBinnedMedian()
+ *          l_int32      numaGetMeanDevFromMedian()
+ *          l_int32      numaGetMedianDevFromMedian()
+ *          l_int32      numaGetMode()
+ *
+ *      Rearrangements
+ *          l_int32      numaJoin()
+ *          l_int32      numaaJoin()
+ *          NUMA        *numaaFlattenToNuma()
+ *
+ *    Things to remember when using the Numa:
+ *
+ *    (1) The numa is a struct, not an array.  Always use accessors
+ *        (see numabasic.c), never the fields directly.
+ *
+ *    (2) The number array holds l_float32 values.  It can also
+ *        be used to store l_int32 values.  See numabasic.c for
+ *        details on using the accessors.
+ *
+ *    (3) If you use numaCreate(), no numbers are stored and the size is 0.
+ *        You have to add numbers to increase the size.
+ *        If you want to start with a numa of a fixed size, with each
+ *        entry initialized to the same value, use numaMakeConstant().
+ *
+ *    (4) Occasionally, in the comments we denote the i-th element of a
+ *        numa by na[i].  This is conceptual only -- the numa is not an array!
+ * 
+ */ + +#include +#include "allheaders.h" + + +/*----------------------------------------------------------------------* + * Arithmetic and logical ops on Numas * + *----------------------------------------------------------------------*/ +/*! + * \brief numaArithOp() + * + * \param[in] nad [optional] can be null or equal to na1 (in-place + * \param[in] na1 + * \param[in] na2 + * \param[in] op L_ARITH_ADD, L_ARITH_SUBTRACT, + * L_ARITH_MULTIPLY, L_ARITH_DIVIDE + * \return nad always: operation applied to na1 and na2 + * + *
+ * Notes:
+ *      (1) The sizes of na1 and na2 must be equal.
+ *      (2) nad can only null or equal to na1.
+ *      (3) To add a constant to a numa, or to multipy a numa by
+ *          a constant, use numaTransform().
+ * 
+ */ +NUMA * +numaArithOp(NUMA *nad, + NUMA *na1, + NUMA *na2, + l_int32 op) +{ +l_int32 i, n; +l_float32 val1, val2; + + PROCNAME("numaArithOp"); + + if (!na1 || !na2) + return (NUMA *)ERROR_PTR("na1, na2 not both defined", procName, nad); + n = numaGetCount(na1); + if (n != numaGetCount(na2)) + return (NUMA *)ERROR_PTR("na1, na2 sizes differ", procName, nad); + if (nad && nad != na1) + return (NUMA *)ERROR_PTR("nad defined but not in-place", procName, nad); + if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT && + op != L_ARITH_MULTIPLY && op != L_ARITH_DIVIDE) + return (NUMA *)ERROR_PTR("invalid op", procName, nad); + if (op == L_ARITH_DIVIDE) { + for (i = 0; i < n; i++) { + numaGetFValue(na2, i, &val2); + if (val2 == 0.0) + return (NUMA *)ERROR_PTR("na2 has 0 element", procName, nad); + } + } + + /* If nad is not identical to na1, make it an identical copy */ + if (!nad) + nad = numaCopy(na1); + + for (i = 0; i < n; i++) { + numaGetFValue(nad, i, &val1); + numaGetFValue(na2, i, &val2); + switch (op) { + case L_ARITH_ADD: + numaSetValue(nad, i, val1 + val2); + break; + case L_ARITH_SUBTRACT: + numaSetValue(nad, i, val1 - val2); + break; + case L_ARITH_MULTIPLY: + numaSetValue(nad, i, val1 * val2); + break; + case L_ARITH_DIVIDE: + numaSetValue(nad, i, val1 / val2); + break; + default: + fprintf(stderr, " Unknown arith op: %d\n", op); + return nad; + } + } + + return nad; +} + + +/*! + * \brief numaLogicalOp() + * + * \param[in] nad [optional] can be null or equal to na1 (in-place + * \param[in] na1 + * \param[in] na2 + * \param[in] op L_UNION, L_INTERSECTION, L_SUBTRACTION, L_EXCLUSIVE_OR + * \return nad always: operation applied to na1 and na2 + * + *
+ * Notes:
+ *      (1) The sizes of na1 and na2 must be equal.
+ *      (2) nad can only be null or equal to na1.
+ *      (3) This is intended for use with indicator arrays (0s and 1s).
+ *          Input data is extracted as integers (0 == false, anything
+ *          else == true); output results are 0 and 1.
+ *      (4) L_SUBTRACTION is subtraction of val2 from val1.  For bit logical
+ *          arithmetic this is (val1 & ~val2), but because these values
+ *          are integers, we use (val1 && !val2).
+ * 
+ */ +NUMA * +numaLogicalOp(NUMA *nad, + NUMA *na1, + NUMA *na2, + l_int32 op) +{ +l_int32 i, n, val1, val2, val; + + PROCNAME("numaLogicalOp"); + + if (!na1 || !na2) + return (NUMA *)ERROR_PTR("na1, na2 not both defined", procName, nad); + n = numaGetCount(na1); + if (n != numaGetCount(na2)) + return (NUMA *)ERROR_PTR("na1, na2 sizes differ", procName, nad); + if (nad && nad != na1) + return (NUMA *)ERROR_PTR("nad defined; not in-place", procName, nad); + if (op != L_UNION && op != L_INTERSECTION && + op != L_SUBTRACTION && op != L_EXCLUSIVE_OR) + return (NUMA *)ERROR_PTR("invalid op", procName, nad); + + /* If nad is not identical to na1, make it an identical copy */ + if (!nad) + nad = numaCopy(na1); + + for (i = 0; i < n; i++) { + numaGetIValue(nad, i, &val1); + numaGetIValue(na2, i, &val2); + val1 = (val1 == 0) ? 0 : 1; + val2 = (val2 == 0) ? 0 : 1; + switch (op) { + case L_UNION: + val = (val1 || val2) ? 1 : 0; + numaSetValue(nad, i, val); + break; + case L_INTERSECTION: + val = (val1 && val2) ? 1 : 0; + numaSetValue(nad, i, val); + break; + case L_SUBTRACTION: + val = (val1 && !val2) ? 1 : 0; + numaSetValue(nad, i, val); + break; + case L_EXCLUSIVE_OR: + val = (val1 != val2) ? 1 : 0; + numaSetValue(nad, i, val); + break; + default: + fprintf(stderr, " Unknown logical op: %d\n", op); + return nad; + } + } + + return nad; +} + + +/*! + * \brief numaInvert() + * + * \param[in] nad [optional] can be null or equal to nas (in-place + * \param[in] nas + * \return nad always: 'inverts' nas + * + *
+ * Notes:
+ *      (1) This is intended for use with indicator arrays (0s and 1s).
+ *          It gives a boolean-type output, taking the input as
+ *          an integer and inverting it:
+ *              0              -->  1
+ *              anything else  -->   0
+ * 
+ */ +NUMA * +numaInvert(NUMA *nad, + NUMA *nas) +{ +l_int32 i, n, val; + + PROCNAME("numaInvert"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, nad); + if (nad && nad != nas) + return (NUMA *)ERROR_PTR("nad defined; not in-place", procName, nad); + + if (!nad) + nad = numaCopy(nas); + n = numaGetCount(nad); + for (i = 0; i < n; i++) { + numaGetIValue(nad, i, &val); + if (!val) + val = 1; + else + val = 0; + numaSetValue(nad, i, val); + } + + return nad; +} + + +/*! + * \brief numaSimilar() + * + * \param[in] na1 + * \param[in] na2 + * \param[in] maxdiff use 0.0 for exact equality + * \param[out] psimilar 1 if similar; 0 if different + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Float values can differ slightly due to roundoff and
+ *          accumulated errors.  Using %maxdiff > 0.0 allows similar
+ *          arrays to be identified.
+ * 
+*/ +l_int32 +numaSimilar(NUMA *na1, + NUMA *na2, + l_float32 maxdiff, + l_int32 *psimilar) +{ +l_int32 i, n; +l_float32 val1, val2; + + PROCNAME("numaSimilar"); + + if (!psimilar) + return ERROR_INT("&similar not defined", procName, 1); + *psimilar = 0; + if (!na1 || !na2) + return ERROR_INT("na1 and na2 not both defined", procName, 1); + maxdiff = L_ABS(maxdiff); + + n = numaGetCount(na1); + if (n != numaGetCount(na2)) return 0; + + for (i = 0; i < n; i++) { + numaGetFValue(na1, i, &val1); + numaGetFValue(na2, i, &val2); + if (L_ABS(val1 - val2) > maxdiff) return 0; + } + + *psimilar = 1; + return 0; +} + + +/*! + * \brief numaAddToNumber() + * + * \param[in] na source numa + * \param[in] index element to be changed + * \param[in] val new value to be added + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is useful for accumulating sums, regardless of the index
+ *          order in which the values are made available.
+ *      (2) Before use, the numa has to be filled up to %index.  This would
+ *          typically be used by creating the numa with the full sized
+ *          array, initialized to 0.0, using numaMakeConstant().
+ * 
+ */ +l_ok +numaAddToNumber(NUMA *na, + l_int32 index, + l_float32 val) +{ +l_int32 n; + + PROCNAME("numaAddToNumber"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + na->array[index] += val; + return 0; +} + + +/*----------------------------------------------------------------------* + * Simple extractions * + *----------------------------------------------------------------------*/ +/*! + * \brief numaGetMin() + * + * \param[in] na source numa + * \param[out] pminval [optional] min value + * \param[out] piminloc [optional] index of min location + * \return 0 if OK; 1 on error + */ +l_ok +numaGetMin(NUMA *na, + l_float32 *pminval, + l_int32 *piminloc) +{ +l_int32 i, n, iminloc; +l_float32 val, minval; + + PROCNAME("numaGetMin"); + + if (!pminval && !piminloc) + return ERROR_INT("nothing to do", procName, 1); + if (pminval) *pminval = 0.0; + if (piminloc) *piminloc = 0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + minval = +1000000000.; + iminloc = 0; + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (val < minval) { + minval = val; + iminloc = i; + } + } + + if (pminval) *pminval = minval; + if (piminloc) *piminloc = iminloc; + return 0; +} + + +/*! + * \brief numaGetMax() + * + * \param[in] na source numa + * \param[out] pmaxval [optional] max value + * \param[out] pimaxloc [optional] index of max location + * \return 0 if OK; 1 on error + */ +l_ok +numaGetMax(NUMA *na, + l_float32 *pmaxval, + l_int32 *pimaxloc) +{ +l_int32 i, n, imaxloc; +l_float32 val, maxval; + + PROCNAME("numaGetMax"); + + if (!pmaxval && !pimaxloc) + return ERROR_INT("nothing to do", procName, 1); + if (pmaxval) *pmaxval = 0.0; + if (pimaxloc) *pimaxloc = 0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + maxval = -1000000000.; + imaxloc = 0; + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (val > maxval) { + maxval = val; + imaxloc = i; + } + } + + if (pmaxval) *pmaxval = maxval; + if (pimaxloc) *pimaxloc = imaxloc; + return 0; +} + + +/*! + * \brief numaGetSum() + * + * \param[in] na source numa + * \param[out] psum sum of values + * \return 0 if OK, 1 on error + */ +l_ok +numaGetSum(NUMA *na, + l_float32 *psum) +{ +l_int32 i, n; +l_float32 val, sum; + + PROCNAME("numaGetSum"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (!psum) + return ERROR_INT("&sum not defined", procName, 1); + + sum = 0.0; + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + sum += val; + } + *psum = sum; + return 0; +} + + +/*! + * \brief numaGetPartialSums() + * + * \param[in] na source numa + * \return nasum, or NULL on error + * + *
+ * Notes:
+ *      (1) nasum[i] is the sum for all j <= i of na[j].
+ *          So nasum[0] = na[0].
+ *      (2) If you want to generate a rank function, where rank[0] - 0.0,
+ *          insert a 0.0 at the beginning of the nasum array.
+ * 
+ */ +NUMA * +numaGetPartialSums(NUMA *na) +{ +l_int32 i, n; +l_float32 val, sum; +NUMA *nasum; + + PROCNAME("numaGetPartialSums"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + + n = numaGetCount(na); + nasum = numaCreate(n); + sum = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + sum += val; + numaAddNumber(nasum, sum); + } + return nasum; +} + + +/*! + * \brief numaGetSumOnInterval() + * + * \param[in] na source numa + * \param[in] first beginning index + * \param[in] last final index + * \param[out] psum sum of values in the index interval range + * \return 0 if OK, 1 on error + */ +l_ok +numaGetSumOnInterval(NUMA *na, + l_int32 first, + l_int32 last, + l_float32 *psum) +{ +l_int32 i, n, truelast; +l_float32 val, sum; + + PROCNAME("numaGetSumOnInterval"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (!psum) + return ERROR_INT("&sum not defined", procName, 1); + *psum = 0.0; + + sum = 0.0; + n = numaGetCount(na); + if (first >= n) /* not an error */ + return 0; + truelast = L_MIN(last, n - 1); + + for (i = first; i <= truelast; i++) { + numaGetFValue(na, i, &val); + sum += val; + } + *psum = sum; + return 0; +} + + +/*! + * \brief numaHasOnlyIntegers() + * + * \param[in] na source numa + * \param[in] maxsamples maximum number of samples to check + * \param[out] pallints 1 if all sampled values are ints; else 0 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Set %maxsamples == 0 to check every integer in na.  Otherwise,
+ *          this samples no more than %maxsamples.
+ * 
+ */ +l_ok +numaHasOnlyIntegers(NUMA *na, + l_int32 maxsamples, + l_int32 *pallints) +{ +l_int32 i, n, incr; +l_float32 val; + + PROCNAME("numaHasOnlyIntegers"); + + if (!pallints) + return ERROR_INT("&allints not defined", procName, 1); + *pallints = TRUE; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + if ((n = numaGetCount(na)) == 0) + return ERROR_INT("na empty", procName, 1); + if (maxsamples <= 0) + incr = 1; + else + incr = (l_int32)((n + maxsamples - 1) / maxsamples); + for (i = 0; i < n; i += incr) { + numaGetFValue(na, i, &val); + if (val != (l_int32)val) { + *pallints = FALSE; + return 0; + } + } + + return 0; +} + + +/*! + * \brief numaSubsample() + * + * \param[in] nas + * \param[in] subfactor subsample factor, >= 1 + * \return nad evenly sampled values from nas, or NULL on error + */ +NUMA * +numaSubsample(NUMA *nas, + l_int32 subfactor) +{ +l_int32 i, n; +l_float32 val; +NUMA *nad; + + PROCNAME("numaSubsample"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (subfactor < 1) + return (NUMA *)ERROR_PTR("subfactor < 1", procName, NULL); + + nad = numaCreate(0); + n = numaGetCount(nas); + for (i = 0; i < n; i++) { + if (i % subfactor != 0) continue; + numaGetFValue(nas, i, &val); + numaAddNumber(nad, val); + } + + return nad; +} + + +/*! + * \brief numaMakeDelta() + * + * \param[in] nas input numa + * \return numa of difference values val[i+1] - val[i], + * or NULL on error + */ +NUMA * +numaMakeDelta(NUMA *nas) +{ +l_int32 i, n, prev, cur; +NUMA *nad; + + PROCNAME("numaMakeDelta"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + nad = numaCreate(n - 1); + prev = 0; + for (i = 1; i < n; i++) { + numaGetIValue(nas, i, &cur); + numaAddNumber(nad, cur - prev); + prev = cur; + } + return nad; +} + + +/*! + * \brief numaMakeSequence() + * + * \param[in] startval + * \param[in] increment + * \param[in] size of sequence + * \return numa of sequence of evenly spaced values, or NULL on error + */ +NUMA * +numaMakeSequence(l_float32 startval, + l_float32 increment, + l_int32 size) +{ +l_int32 i; +l_float32 val; +NUMA *na; + + PROCNAME("numaMakeSequence"); + + if ((na = numaCreate(size)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + + for (i = 0; i < size; i++) { + val = startval + i * increment; + numaAddNumber(na, val); + } + + return na; +} + + +/*! + * \brief numaMakeConstant() + * + * \param[in] val + * \param[in] size of numa + * \return numa of given size with all entries equal to 'val', + * or NULL on error + */ +NUMA * +numaMakeConstant(l_float32 val, + l_int32 size) +{ + return numaMakeSequence(val, 0.0, size); +} + + +/*! + * \brief numaMakeAbsValue() + * + * \param[in] nad can be null for new array, or the same as nas for inplace + * \param[in] nas input numa + * \return nad with all numbers being the absval of the input, + * or NULL on error + */ +NUMA * +numaMakeAbsValue(NUMA *nad, + NUMA *nas) +{ +l_int32 i, n; +l_float32 val; + + PROCNAME("numaMakeAbsValue"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (nad && nad != nas) + return (NUMA *)ERROR_PTR("nad and not in-place", procName, NULL); + + if (!nad) + nad = numaCopy(nas); + n = numaGetCount(nad); + for (i = 0; i < n; i++) { + val = nad->array[i]; + nad->array[i] = L_ABS(val); + } + + return nad; +} + + +/*! + * \brief numaAddBorder() + * + * \param[in] nas + * \param[in] left number of elements to add before the start + * \param[in] right number of elements to add after the end + * \param[in] val initialize border elements + * \return nad with added elements at left and right, or NULL on error + */ +NUMA * +numaAddBorder(NUMA *nas, + l_int32 left, + l_int32 right, + l_float32 val) +{ +l_int32 i, n, len; +l_float32 startx, delx; +l_float32 *fas, *fad; +NUMA *nad; + + PROCNAME("numaAddBorder"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (left < 0) left = 0; + if (right < 0) right = 0; + if (left == 0 && right == 0) + return numaCopy(nas); + + n = numaGetCount(nas); + len = n + left + right; + nad = numaMakeConstant(val, len); + numaGetParameters(nas, &startx, &delx); + numaSetParameters(nad, startx - delx * left, delx); + fas = numaGetFArray(nas, L_NOCOPY); + fad = numaGetFArray(nad, L_NOCOPY); + for (i = 0; i < n; i++) + fad[left + i] = fas[i]; + + return nad; +} + + +/*! + * \brief numaAddSpecifiedBorder() + * + * \param[in] nas + * \param[in] left number of elements to add before the start + * \param[in] right number of elements to add after the end + * \param[in] type L_CONTINUED_BORDER, L_MIRRORED_BORDER + * \return nad with added elements at left and right, or NULL on error + */ +NUMA * +numaAddSpecifiedBorder(NUMA *nas, + l_int32 left, + l_int32 right, + l_int32 type) +{ +l_int32 i, n; +l_float32 *fa; +NUMA *nad; + + PROCNAME("numaAddSpecifiedBorder"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (left < 0) left = 0; + if (right < 0) right = 0; + if (left == 0 && right == 0) + return numaCopy(nas); + if (type != L_CONTINUED_BORDER && type != L_MIRRORED_BORDER) + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + n = numaGetCount(nas); + if (type == L_MIRRORED_BORDER && (left > n || right > n)) + return (NUMA *)ERROR_PTR("border too large", procName, NULL); + + nad = numaAddBorder(nas, left, right, 0); + n = numaGetCount(nad); + fa = numaGetFArray(nad, L_NOCOPY); + if (type == L_CONTINUED_BORDER) { + for (i = 0; i < left; i++) + fa[i] = fa[left]; + for (i = n - right; i < n; i++) + fa[i] = fa[n - right - 1]; + } else { /* type == L_MIRRORED_BORDER */ + for (i = 0; i < left; i++) + fa[i] = fa[2 * left - 1 - i]; + for (i = 0; i < right; i++) + fa[n - right + i] = fa[n - right - i - 1]; + } + + return nad; +} + + +/*! + * \brief numaRemoveBorder() + * + * \param[in] nas + * \param[in] left number of elements to remove from the start + * \param[in] right number of elements to remove up to the end + * \return nad with removed elements at left and right, or NULL on error + */ +NUMA * +numaRemoveBorder(NUMA *nas, + l_int32 left, + l_int32 right) +{ +l_int32 i, n, len; +l_float32 startx, delx; +l_float32 *fas, *fad; +NUMA *nad; + + PROCNAME("numaRemoveBorder"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (left < 0) left = 0; + if (right < 0) right = 0; + if (left == 0 && right == 0) + return numaCopy(nas); + + n = numaGetCount(nas); + if ((len = n - left - right) < 0) + return (NUMA *)ERROR_PTR("len < 0 after removal", procName, NULL); + nad = numaMakeConstant(0, len); + numaGetParameters(nas, &startx, &delx); + numaSetParameters(nad, startx + delx * left, delx); + fas = numaGetFArray(nas, L_NOCOPY); + fad = numaGetFArray(nad, L_NOCOPY); + for (i = 0; i < len; i++) + fad[i] = fas[left + i]; + + return nad; +} + + +/*! + * \brief numaCountNonzeroRuns() + * + * \param[in] na e.g., of pixel counts in rows or columns + * \param[out] pcount number of nonzero runs + * \return 0 if OK, 1 on error + */ +l_ok +numaCountNonzeroRuns(NUMA *na, + l_int32 *pcount) +{ +l_int32 n, i, val, count, inrun; + + PROCNAME("numaCountNonzeroRuns"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + count = 0; + inrun = FALSE; + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &val); + if (!inrun && val > 0) { + count++; + inrun = TRUE; + } else if (inrun && val == 0) { + inrun = FALSE; + } + } + *pcount = count; + return 0; +} + + +/*! + * \brief numaGetNonzeroRange() + * + * \param[in] na source numa + * \param[in] eps largest value considered to be zero + * \param[out] pfirst, plast interval of array indices + * where values are nonzero + * \return 0 if OK, 1 on error or if no nonzero range is found. + */ +l_ok +numaGetNonzeroRange(NUMA *na, + l_float32 eps, + l_int32 *pfirst, + l_int32 *plast) +{ +l_int32 n, i, found; +l_float32 val; + + PROCNAME("numaGetNonzeroRange"); + + if (pfirst) *pfirst = 0; + if (plast) *plast = 0; + if (!pfirst || !plast) + return ERROR_INT("pfirst and plast not both defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + found = FALSE; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (val > eps) { + found = TRUE; + break; + } + } + if (!found) { + *pfirst = n - 1; + *plast = 0; + return 1; + } + + *pfirst = i; + for (i = n - 1; i >= 0; i--) { + numaGetFValue(na, i, &val); + if (val > eps) + break; + } + *plast = i; + return 0; +} + + +/*! + * \brief numaGetCountRelativeToZero() + * + * \param[in] na source numa + * \param[in] type L_LESS_THAN_ZERO, L_EQUAL_TO_ZERO, L_GREATER_THAN_ZERO + * \param[out] pcount count of values of given type + * \return 0 if OK, 1 on error + */ +l_ok +numaGetCountRelativeToZero(NUMA *na, + l_int32 type, + l_int32 *pcount) +{ +l_int32 n, i, count; +l_float32 val; + + PROCNAME("numaGetCountRelativeToZero"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + for (i = 0, count = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (type == L_LESS_THAN_ZERO && val < 0.0) + count++; + else if (type == L_EQUAL_TO_ZERO && val == 0.0) + count++; + else if (type == L_GREATER_THAN_ZERO && val > 0.0) + count++; + } + + *pcount = count; + return 0; +} + + +/*! + * \brief numaClipToInterval() + * + * \param[in] nas + * \param[in] first, last clipping interval + * \return numa with the same values as the input, but clipped + * to the specified interval + * + *
+ * Notes:
+ *        If you want the indices of the array values to be unchanged,
+ *        use first = 0.
+ *  Usage:
+ *        This is useful to clip a histogram that has a few nonzero
+ *        values to its nonzero range.
+ * 
+ */ +NUMA * +numaClipToInterval(NUMA *nas, + l_int32 first, + l_int32 last) +{ +l_int32 n, i, truelast; +l_float32 val, startx, delx; +NUMA *nad; + + PROCNAME("numaClipToInterval"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (first > last) + return (NUMA *)ERROR_PTR("range not valid", procName, NULL); + + n = numaGetCount(nas); + if (first >= n) + return (NUMA *)ERROR_PTR("no elements in range", procName, NULL); + truelast = L_MIN(last, n - 1); + if ((nad = numaCreate(truelast - first + 1)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + for (i = first; i <= truelast; i++) { + numaGetFValue(nas, i, &val); + numaAddNumber(nad, val); + } + numaGetParameters(nas, &startx, &delx); + numaSetParameters(nad, startx + first * delx, delx); + return nad; +} + + +/*! + * \brief numaMakeThresholdIndicator() + * + * \param[in] nas input numa + * \param[in] thresh threshold value + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return nad : indicator array: values are 0 and 1 + * + *
+ * Notes:
+ *      (1) For each element in nas, if the constraint given by 'type'
+ *          correctly specifies its relation to thresh, a value of 1
+ *          is recorded in nad.
+ * 
+ */ +NUMA * +numaMakeThresholdIndicator(NUMA *nas, + l_float32 thresh, + l_int32 type) +{ +l_int32 n, i, ival; +l_float32 fval; +NUMA *nai; + + PROCNAME("numaMakeThresholdIndicator"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + nai = numaCreate(n); + for (i = 0; i < n; i++) { + numaGetFValue(nas, i, &fval); + ival = 0; + switch (type) + { + case L_SELECT_IF_LT: + if (fval < thresh) ival = 1; + break; + case L_SELECT_IF_GT: + if (fval > thresh) ival = 1; + break; + case L_SELECT_IF_LTE: + if (fval <= thresh) ival = 1; + break; + case L_SELECT_IF_GTE: + if (fval >= thresh) ival = 1; + break; + default: + numaDestroy(&nai); + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + } + numaAddNumber(nai, ival); + } + + return nai; +} + + +/*! + * \brief numaUniformSampling() + * + * \param[in] nas input numa + * \param[in] nsamp number of samples + * \return nad : resampled array, or NULL on error + * + *
+ * Notes:
+ *      (1) This resamples the values in the array, using %nsamp
+ *          equal divisions.
+ * 
+ */ +NUMA * +numaUniformSampling(NUMA *nas, + l_int32 nsamp) +{ +l_int32 n, i, j, ileft, iright; +l_float32 left, right, binsize, lfract, rfract, sum, startx, delx; +l_float32 *array; +NUMA *nad; + + PROCNAME("numaUniformSampling"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (nsamp <= 0) + return (NUMA *)ERROR_PTR("nsamp must be > 0", procName, NULL); + + n = numaGetCount(nas); + nad = numaCreate(nsamp); + array = numaGetFArray(nas, L_NOCOPY); + binsize = (l_float32)n / (l_float32)nsamp; + numaGetParameters(nas, &startx, &delx); + numaSetParameters(nad, startx, binsize * delx); + left = 0.0; + for (i = 0; i < nsamp; i++) { + sum = 0.0; + right = left + binsize; + ileft = (l_int32)left; + lfract = 1.0 - left + ileft; + if (lfract >= 1.0) /* on left bin boundary */ + lfract = 0.0; + iright = (l_int32)right; + rfract = right - iright; + iright = L_MIN(iright, n - 1); + if (ileft == iright) { /* both are within the same original sample */ + sum += (lfract + rfract - 1.0) * array[ileft]; + } else { + if (lfract > 0.0001) /* left fraction */ + sum += lfract * array[ileft]; + if (rfract > 0.0001) /* right fraction */ + sum += rfract * array[iright]; + for (j = ileft + 1; j < iright; j++) /* entire pixels */ + sum += array[j]; + } + + numaAddNumber(nad, sum); + left = right; + } + return nad; +} + + +/*! + * \brief numaReverse() + * + * \param[in] nad [optional] can be null or equal to nas + * \param[in] nas input numa + * \return nad : reversed, or NULL on error + * + *
+ * Notes:
+ *      (1) Usage:
+ *            numaReverse(nas, nas);   // in-place
+ *            nad = numaReverse(NULL, nas);  // makes a new one
+ * 
+ */ +NUMA * +numaReverse(NUMA *nad, + NUMA *nas) +{ +l_int32 n, i; +l_float32 val1, val2; + + PROCNAME("numaReverse"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (nad && nas != nad) + return (NUMA *)ERROR_PTR("nad defined but != nas", procName, NULL); + + n = numaGetCount(nas); + if (nad) { /* in-place */ + for (i = 0; i < n / 2; i++) { + numaGetFValue(nad, i, &val1); + numaGetFValue(nad, n - i - 1, &val2); + numaSetValue(nad, i, val2); + numaSetValue(nad, n - i - 1, val1); + } + } else { + nad = numaCreate(n); + for (i = n - 1; i >= 0; i--) { + numaGetFValue(nas, i, &val1); + numaAddNumber(nad, val1); + } + } + + /* Reverse the startx and delx fields */ + nad->startx = nas->startx + (n - 1) * nas->delx; + nad->delx = -nas->delx; + return nad; +} + + +/*----------------------------------------------------------------------* + * Signal feature extraction * + *----------------------------------------------------------------------*/ +/*! + * \brief numaLowPassIntervals() + * + * \param[in] nas input numa + * \param[in] thresh threshold fraction of max; in [0.0 ... 1.0] + * \param[in] maxn for normalizing; set maxn = 0.0 to use the max in nas + * \return nad : interval abscissa pairs, or NULL on error + * + *
+ * Notes:
+ *      (1) For each interval where the value is less than a specified
+ *          fraction of the maximum, this records the left and right "x"
+ *          value.
+ * 
+ */ +NUMA * +numaLowPassIntervals(NUMA *nas, + l_float32 thresh, + l_float32 maxn) +{ +l_int32 n, i, inrun; +l_float32 maxval, threshval, fval, startx, delx, x0, x1; +NUMA *nad; + + PROCNAME("numaLowPassIntervals"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (thresh < 0.0 || thresh > 1.0) + return (NUMA *)ERROR_PTR("invalid thresh", procName, NULL); + + /* The input threshold is a fraction of the max. + * The first entry in nad is the value of the max. */ + n = numaGetCount(nas); + if (maxn == 0.0) + numaGetMax(nas, &maxval, NULL); + else + maxval = maxn; + numaGetParameters(nas, &startx, &delx); + threshval = thresh * maxval; + nad = numaCreate(0); + numaAddNumber(nad, maxval); + + /* Write pairs of pts (x0, x1) for the intervals */ + inrun = FALSE; + for (i = 0; i < n; i++) { + numaGetFValue(nas, i, &fval); + if (fval < threshval && inrun == FALSE) { /* start a new run */ + inrun = TRUE; + x0 = startx + i * delx; + } else if (fval > threshval && inrun == TRUE) { /* end the run */ + inrun = FALSE; + x1 = startx + i * delx; + numaAddNumber(nad, x0); + numaAddNumber(nad, x1); + } + } + if (inrun == TRUE) { /* must end the last run */ + x1 = startx + (n - 1) * delx; + numaAddNumber(nad, x0); + numaAddNumber(nad, x1); + } + + return nad; +} + + +/*! + * \brief numaThresholdEdges() + * + * \param[in] nas input numa + * \param[in] thresh1 low threshold as fraction of max; in [0.0 ... 1.0] + * \param[in] thresh2 high threshold as fraction of max; in [0.0 ... 1.0] + * \param[in] maxn for normalizing; set maxn = 0.0 to use the max in nas + * \return nad edge interval triplets, or NULL on error + * + *
+ * Notes:
+ *      (1) For each edge interval, where where the value is less
+ *          than %thresh1 on one side, greater than %thresh2 on
+ *          the other, and between these thresholds throughout the
+ *          interval, this records a triplet of values: the
+ *          'left' and 'right' edges, and either +1 or -1, depending
+ *          on whether the edge is rising or falling.
+ *      (2) No assumption is made about the value outside the array,
+ *          so if the value at the array edge is between the threshold
+ *          values, it is not considered part of an edge.  We start
+ *          looking for edge intervals only after leaving the thresholded
+ *          band.
+ * 
+ */ +NUMA * +numaThresholdEdges(NUMA *nas, + l_float32 thresh1, + l_float32 thresh2, + l_float32 maxn) +{ +l_int32 n, i, istart, inband, output, sign; +l_int32 startbelow, below, above, belowlast, abovelast; +l_float32 maxval, threshval1, threshval2, fval, startx, delx, x0, x1; +NUMA *nad; + + PROCNAME("numaThresholdEdges"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (thresh1 < 0.0 || thresh1 > 1.0 || thresh2 < 0.0 || thresh2 > 1.0) + return (NUMA *)ERROR_PTR("invalid thresholds", procName, NULL); + if (thresh2 < thresh1) + return (NUMA *)ERROR_PTR("thresh2 < thresh1", procName, NULL); + + /* The input thresholds are fractions of the max. + * The first entry in nad is the value of the max used + * here for normalization. */ + n = numaGetCount(nas); + if (maxn == 0.0) + numaGetMax(nas, &maxval, NULL); + else + maxval = maxn; + numaGetMax(nas, &maxval, NULL); + numaGetParameters(nas, &startx, &delx); + threshval1 = thresh1 * maxval; + threshval2 = thresh2 * maxval; + nad = numaCreate(0); + numaAddNumber(nad, maxval); + + /* Write triplets of pts (x0, x1, sign) for the edges. + * First make sure we start search from outside the band. + * Only one of {belowlast, abovelast} is true. */ + for (i = 0; i < n; i++) { + istart = i; + numaGetFValue(nas, i, &fval); + belowlast = (fval < threshval1) ? TRUE : FALSE; + abovelast = (fval > threshval2) ? TRUE : FALSE; + if (belowlast == TRUE || abovelast == TRUE) + break; + } + if (istart == n) /* no intervals found */ + return nad; + + /* x0 and x1 can only be set from outside the edge. + * They are the values just before entering the band, + * and just after entering the band. We can jump through + * the band, in which case they differ by one index in nas. */ + inband = FALSE; + startbelow = belowlast; /* one of these is true */ + output = FALSE; + x0 = startx + istart * delx; + for (i = istart + 1; i < n; i++) { + numaGetFValue(nas, i, &fval); + below = (fval < threshval1) ? TRUE : FALSE; + above = (fval > threshval2) ? TRUE : FALSE; + if (!inband && belowlast && above) { /* full jump up */ + x1 = startx + i * delx; + sign = 1; + startbelow = FALSE; /* for the next transition */ + output = TRUE; + } else if (!inband && abovelast && below) { /* full jump down */ + x1 = startx + i * delx; + sign = -1; + startbelow = TRUE; /* for the next transition */ + output = TRUE; + } else if (inband && startbelow && above) { /* exit rising; success */ + x1 = startx + i * delx; + sign = 1; + inband = FALSE; + startbelow = FALSE; /* for the next transition */ + output = TRUE; + } else if (inband && !startbelow && below) { + /* exit falling; success */ + x1 = startx + i * delx; + sign = -1; + inband = FALSE; + startbelow = TRUE; /* for the next transition */ + output = TRUE; + } else if (inband && !startbelow && above) { /* exit rising; failure */ + x0 = startx + i * delx; + inband = FALSE; + } else if (inband && startbelow && below) { /* exit falling; failure */ + x0 = startx + i * delx; + inband = FALSE; + } else if (!inband && !above && !below) { /* enter */ + inband = TRUE; + startbelow = belowlast; + } else if (!inband && (above || below)) { /* outside and remaining */ + x0 = startx + i * delx; /* update position */ + } + belowlast = below; + abovelast = above; + if (output) { /* we have exited; save new x0 */ + numaAddNumber(nad, x0); + numaAddNumber(nad, x1); + numaAddNumber(nad, sign); + output = FALSE; + x0 = startx + i * delx; + } + } + + return nad; +} + + +/*! + * \brief numaGetSpanValues() + * + * \param[in] na numa that is output of numaLowPassIntervals() + * \param[in] span span number, zero-based + * \param[out] pstart [optional] location of start of transition + * \param[out] pend [optional] location of end of transition + * \return 0 if OK, 1 on error + */ +l_int32 +numaGetSpanValues(NUMA *na, + l_int32 span, + l_int32 *pstart, + l_int32 *pend) +{ +l_int32 n, nspans; + + PROCNAME("numaGetSpanValues"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (n % 2 != 1) + return ERROR_INT("n is not odd", procName, 1); + nspans = n / 2; + if (nspans < 0 || span >= nspans) + return ERROR_INT("invalid span", procName, 1); + + if (pstart) numaGetIValue(na, 2 * span + 1, pstart); + if (pend) numaGetIValue(na, 2 * span + 2, pend); + return 0; +} + + +/*! + * \brief numaGetEdgeValues() + * + * \param[in] na numa that is output of numaThresholdEdges() + * \param[in] edge edge number, zero-based + * \param[out] pstart [optional] location of start of transition + * \param[out] pend [optional] location of end of transition + * \param[out] psign [optional] transition sign: +1 is rising, + * -1 is falling + * \return 0 if OK, 1 on error + */ +l_int32 +numaGetEdgeValues(NUMA *na, + l_int32 edge, + l_int32 *pstart, + l_int32 *pend, + l_int32 *psign) +{ +l_int32 n, nedges; + + PROCNAME("numaGetEdgeValues"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = numaGetCount(na); + if (n % 3 != 1) + return ERROR_INT("n % 3 is not 1", procName, 1); + nedges = (n - 1) / 3; + if (edge < 0 || edge >= nedges) + return ERROR_INT("invalid edge", procName, 1); + + if (pstart) numaGetIValue(na, 3 * edge + 1, pstart); + if (pend) numaGetIValue(na, 3 * edge + 2, pend); + if (psign) numaGetIValue(na, 3 * edge + 3, psign); + return 0; +} + + +/*----------------------------------------------------------------------* + * Interpolation * + *----------------------------------------------------------------------*/ +/*! + * \brief numaInterpolateEqxVal() + * + * \param[in] startx xval corresponding to first element in array + * \param[in] deltax x increment between array elements + * \param[in] nay numa of ordinate values, assumed equally spaced + * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP + * \param[in] xval + * \param[out] pyval interpolated value + * \return 0 if OK, 1 on error e.g., if xval is outside range + * + *
+ * Notes:
+ *      (1) Considering nay as a function of x, the x values
+ *          are equally spaced
+ *      (2) Caller should check for valid return.
+ *
+ *  For linear Lagrangian interpolation (through 2 data pts):
+ *         y(x) = y1(x-x2)/(x1-x2) + y2(x-x1)/(x2-x1)
+ *
+ *  For quadratic Lagrangian interpolation (through 3 data pts):
+ *         y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) +
+ *                y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) +
+ *                y3(x-x1)(x-x2)/((x3-x1)(x3-x2))
+ *
+ * 
+ */ +l_ok +numaInterpolateEqxVal(l_float32 startx, + l_float32 deltax, + NUMA *nay, + l_int32 type, + l_float32 xval, + l_float32 *pyval) +{ +l_int32 i, n, i1, i2, i3; +l_float32 x1, x2, x3, fy1, fy2, fy3, d1, d2, d3, del, fi, maxx; +l_float32 *fa; + + PROCNAME("numaInterpolateEqxVal"); + + if (!pyval) + return ERROR_INT("&yval not defined", procName, 1); + *pyval = 0.0; + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (deltax <= 0.0) + return ERROR_INT("deltax not > 0", procName, 1); + if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) + return ERROR_INT("invalid interp type", procName, 1); + n = numaGetCount(nay); + if (n < 2) + return ERROR_INT("not enough points", procName, 1); + if (type == L_QUADRATIC_INTERP && n == 2) { + type = L_LINEAR_INTERP; + L_WARNING("only 2 points; using linear interp\n", procName); + } + maxx = startx + deltax * (n - 1); + if (xval < startx || xval > maxx) + return ERROR_INT("xval is out of bounds", procName, 1); + + fa = numaGetFArray(nay, L_NOCOPY); + fi = (xval - startx) / deltax; + i = (l_int32)fi; + del = fi - i; + if (del == 0.0) { /* no interpolation required */ + *pyval = fa[i]; + return 0; + } + + if (type == L_LINEAR_INTERP) { + *pyval = fa[i] + del * (fa[i + 1] - fa[i]); + return 0; + } + + /* Quadratic interpolation */ + d1 = d3 = 0.5 / (deltax * deltax); + d2 = -2. * d1; + if (i == 0) { + i1 = i; + i2 = i + 1; + i3 = i + 2; + } else { + i1 = i - 1; + i2 = i; + i3 = i + 1; + } + x1 = startx + i1 * deltax; + x2 = startx + i2 * deltax; + x3 = startx + i3 * deltax; + fy1 = d1 * fa[i1]; + fy2 = d2 * fa[i2]; + fy3 = d3 * fa[i3]; + *pyval = fy1 * (xval - x2) * (xval - x3) + + fy2 * (xval - x1) * (xval - x3) + + fy3 * (xval - x1) * (xval - x2); + return 0; +} + + +/*! + * \brief numaInterpolateArbxVal() + * + * \param[in] nax numa of abscissa values + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP + * \param[in] xval + * \param[out] pyval interpolated value + * \return 0 if OK, 1 on error e.g., if xval is outside range + * + *
+ * Notes:
+ *      (1) The values in nax must be sorted in increasing order.
+ *          If, additionally, they are equally spaced, you can use
+ *          numaInterpolateEqxVal().
+ *      (2) Caller should check for valid return.
+ *      (3) Uses lagrangian interpolation.  See numaInterpolateEqxVal()
+ *          for formulas.
+ * 
+ */ +l_ok +numaInterpolateArbxVal(NUMA *nax, + NUMA *nay, + l_int32 type, + l_float32 xval, + l_float32 *pyval) +{ +l_int32 i, im, nx, ny, i1, i2, i3; +l_float32 delu, dell, fract, d1, d2, d3; +l_float32 minx, maxx; +l_float32 *fax, *fay; + + PROCNAME("numaInterpolateArbxVal"); + + if (!pyval) + return ERROR_INT("&yval not defined", procName, 1); + *pyval = 0.0; + if (!nax) + return ERROR_INT("nax not defined", procName, 1); + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) + return ERROR_INT("invalid interp type", procName, 1); + ny = numaGetCount(nay); + nx = numaGetCount(nax); + if (nx != ny) + return ERROR_INT("nax and nay not same size arrays", procName, 1); + if (ny < 2) + return ERROR_INT("not enough points", procName, 1); + if (type == L_QUADRATIC_INTERP && ny == 2) { + type = L_LINEAR_INTERP; + L_WARNING("only 2 points; using linear interp\n", procName); + } + numaGetFValue(nax, 0, &minx); + numaGetFValue(nax, nx - 1, &maxx); + if (xval < minx || xval > maxx) + return ERROR_INT("xval is out of bounds", procName, 1); + + fax = numaGetFArray(nax, L_NOCOPY); + fay = numaGetFArray(nay, L_NOCOPY); + + /* Linear search for interval. We are guaranteed + * to either return or break out of the loop. + * In addition, we are assured that fax[i] - fax[im] > 0.0 */ + if (xval == fax[0]) { + *pyval = fay[0]; + return 0; + } + im = 0; + dell = 0.0; + for (i = 1; i < nx; i++) { + delu = fax[i] - xval; + if (delu >= 0.0) { /* we've passed it */ + if (delu == 0.0) { + *pyval = fay[i]; + return 0; + } + im = i - 1; + dell = xval - fax[im]; /* >= 0 */ + break; + } + } + fract = dell / (fax[i] - fax[im]); + + if (type == L_LINEAR_INTERP) { + *pyval = fay[i] + fract * (fay[i + 1] - fay[i]); + return 0; + } + + /* Quadratic interpolation */ + if (im == 0) { + i1 = im; + i2 = im + 1; + i3 = im + 2; + } else { + i1 = im - 1; + i2 = im; + i3 = im + 1; + } + d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); + d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); + d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); + *pyval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; + return 0; +} + + +/*! + * \brief numaInterpolateEqxInterval() + * + * \param[in] startx xval corresponding to first element in nas + * \param[in] deltax x increment between array elements in nas + * \param[in] nasy numa of ordinate values, assumed equally spaced + * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP + * \param[in] x0 start value of interval + * \param[in] x1 end value of interval + * \param[in] npts number of points to evaluate function in interval + * \param[out] pnax [optional] array of x values in interval + * \param[out] pnay array of y values in interval + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Considering nasy as a function of x, the x values
+ *          are equally spaced.
+ *      (2) This creates nay (and optionally nax) of interpolated
+ *          values over the specified interval (x0, x1).
+ *      (3) If the interval (x0, x1) lies partially outside the array
+ *          nasy (as interpreted by startx and deltax), it is an
+ *          error and returns 1.
+ *      (4) Note that deltax is the intrinsic x-increment for the input
+ *          array nasy, whereas delx is the intrinsic x-increment for the
+ *          output interpolated array nay.
+ * 
+ */ +l_ok +numaInterpolateEqxInterval(l_float32 startx, + l_float32 deltax, + NUMA *nasy, + l_int32 type, + l_float32 x0, + l_float32 x1, + l_int32 npts, + NUMA **pnax, + NUMA **pnay) +{ +l_int32 i, n; +l_float32 x, yval, maxx, delx; +NUMA *nax, *nay; + + PROCNAME("numaInterpolateEqxInterval"); + + if (pnax) *pnax = NULL; + if (!pnay) + return ERROR_INT("&nay not defined", procName, 1); + *pnay = NULL; + if (!nasy) + return ERROR_INT("nasy not defined", procName, 1); + if (deltax <= 0.0) + return ERROR_INT("deltax not > 0", procName, 1); + if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) + return ERROR_INT("invalid interp type", procName, 1); + n = numaGetCount(nasy); + if (type == L_QUADRATIC_INTERP && n == 2) { + type = L_LINEAR_INTERP; + L_WARNING("only 2 points; using linear interp\n", procName); + } + maxx = startx + deltax * (n - 1); + if (x0 < startx || x1 > maxx || x1 <= x0) + return ERROR_INT("[x0 ... x1] is not valid", procName, 1); + if (npts < 3) + return ERROR_INT("npts < 3", procName, 1); + delx = (x1 - x0) / (l_float32)(npts - 1); /* delx is for output nay */ + + if ((nay = numaCreate(npts)) == NULL) + return ERROR_INT("nay not made", procName, 1); + numaSetParameters(nay, x0, delx); + *pnay = nay; + if (pnax) { + nax = numaCreate(npts); + *pnax = nax; + } + + for (i = 0; i < npts; i++) { + x = x0 + i * delx; + if (pnax) + numaAddNumber(nax, x); + numaInterpolateEqxVal(startx, deltax, nasy, type, x, &yval); + numaAddNumber(nay, yval); + } + + return 0; +} + + +/*! + * \brief numaInterpolateArbxInterval() + * + * \param[in] nax numa of abscissa values + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] type L_LINEAR_INTERP, L_QUADRATIC_INTERP + * \param[in] x0 start value of interval + * \param[in] x1 end value of interval + * \param[in] npts number of points to evaluate function in interval + * \param[out] pnadx [optional] array of x values in interval + * \param[out] pnady array of y values in interval + * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range + * + *
+ * Notes:
+ *      (1) The values in nax must be sorted in increasing order.
+ *          If they are not sorted, we do it here, and complain.
+ *      (2) If the values in nax are equally spaced, you can use
+ *          numaInterpolateEqxInterval().
+ *      (3) Caller should check for valid return.
+ *      (4) We don't call numaInterpolateArbxVal() for each output
+ *          point, because that requires an O(n) search for
+ *          each point.  Instead, we do a single O(n) pass through
+ *          nax, saving the indices to be used for each output yval.
+ *      (5) Uses lagrangian interpolation.  See numaInterpolateEqxVal()
+ *          for formulas.
+ * 
+ */ +l_ok +numaInterpolateArbxInterval(NUMA *nax, + NUMA *nay, + l_int32 type, + l_float32 x0, + l_float32 x1, + l_int32 npts, + NUMA **pnadx, + NUMA **pnady) +{ +l_int32 i, im, j, nx, ny, i1, i2, i3, sorted; +l_int32 *index; +l_float32 del, xval, yval, excess, fract, minx, maxx, d1, d2, d3; +l_float32 *fax, *fay; +NUMA *nasx, *nasy, *nadx, *nady; + + PROCNAME("numaInterpolateArbxInterval"); + + if (pnadx) *pnadx = NULL; + if (!pnady) + return ERROR_INT("&nady not defined", procName, 1); + *pnady = NULL; + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (!nax) + return ERROR_INT("nax not defined", procName, 1); + if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) + return ERROR_INT("invalid interp type", procName, 1); + if (x0 > x1) + return ERROR_INT("x0 > x1", procName, 1); + ny = numaGetCount(nay); + nx = numaGetCount(nax); + if (nx != ny) + return ERROR_INT("nax and nay not same size arrays", procName, 1); + if (ny < 2) + return ERROR_INT("not enough points", procName, 1); + if (type == L_QUADRATIC_INTERP && ny == 2) { + type = L_LINEAR_INTERP; + L_WARNING("only 2 points; using linear interp\n", procName); + } + numaGetMin(nax, &minx, NULL); + numaGetMax(nax, &maxx, NULL); + if (x0 < minx || x1 > maxx) + return ERROR_INT("xval is out of bounds", procName, 1); + + /* Make sure that nax is sorted in increasing order */ + numaIsSorted(nax, L_SORT_INCREASING, &sorted); + if (!sorted) { + L_WARNING("we are sorting nax in increasing order\n", procName); + numaSortPair(nax, nay, L_SORT_INCREASING, &nasx, &nasy); + } else { + nasx = numaClone(nax); + nasy = numaClone(nay); + } + + fax = numaGetFArray(nasx, L_NOCOPY); + fay = numaGetFArray(nasy, L_NOCOPY); + + /* Get array of indices into fax for interpolated locations */ + if ((index = (l_int32 *)LEPT_CALLOC(npts, sizeof(l_int32))) == NULL) { + numaDestroy(&nasx); + numaDestroy(&nasy); + return ERROR_INT("ind not made", procName, 1); + } + del = (x1 - x0) / (npts - 1.0); + for (i = 0, j = 0; j < nx && i < npts; i++) { + xval = x0 + i * del; + while (j < nx - 1 && xval > fax[j]) + j++; + if (xval == fax[j]) + index[i] = L_MIN(j, nx - 1); + else /* the index of fax[] is just below xval */ + index[i] = L_MAX(j - 1, 0); + } + + /* For each point to be interpolated, get the y value */ + nady = numaCreate(npts); + *pnady = nady; + if (pnadx) { + nadx = numaCreate(npts); + *pnadx = nadx; + } + for (i = 0; i < npts; i++) { + xval = x0 + i * del; + if (pnadx) + numaAddNumber(nadx, xval); + im = index[i]; + excess = xval - fax[im]; + if (excess == 0.0) { + numaAddNumber(nady, fay[im]); + continue; + } + fract = excess / (fax[im + 1] - fax[im]); + + if (type == L_LINEAR_INTERP) { + yval = fay[im] + fract * (fay[im + 1] - fay[im]); + numaAddNumber(nady, yval); + continue; + } + + /* Quadratic interpolation */ + if (im == 0) { + i1 = im; + i2 = im + 1; + i3 = im + 2; + } else { + i1 = im - 1; + i2 = im; + i3 = im + 1; + } + d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); + d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); + d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); + yval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; + numaAddNumber(nady, yval); + } + + LEPT_FREE(index); + numaDestroy(&nasx); + numaDestroy(&nasy); + return 0; +} + + +/*----------------------------------------------------------------------* + * Functions requiring interpolation * + *----------------------------------------------------------------------*/ +/*! + * \brief numaFitMax() + * + * \param[in] na numa of ordinate values, to fit a max to + * \param[out] pmaxval max value + * \param[in] naloc [optional] associated numa of abscissa values + * \param[out] pmaxloc abscissa value that gives max value in na; + * if naloc == null, this is given as an interpolated + * index value + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *        If %naloc is given, there is no requirement that the
+ *        data points are evenly spaced.  Lagrangian interpolation
+ *        handles that.  The only requirement is that the
+ *        data points are ordered so that the values in naloc
+ *        are either increasing or decreasing.  We test to make
+ *        sure that the sizes of na and naloc are equal, and it
+ *        is assumed that the correspondences %na[i] as a function
+ *        of %naloc[i] are properly arranged for all i.
+ *
+ *  The formula for Lagrangian interpolation through 3 data pts is:
+ *       y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) +
+ *              y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) +
+ *              y3(x-x1)(x-x2)/((x3-x1)(x3-x2))
+ *
+ *  Then the derivative, using the constants (c1,c2,c3) defined below,
+ *  is set to 0:
+ *       y'(x) = 2x(c1+c2+c3) - c1(x2+x3) - c2(x1+x3) - c3(x1+x2) = 0
+ * 
+ */ +l_ok +numaFitMax(NUMA *na, + l_float32 *pmaxval, + NUMA *naloc, + l_float32 *pmaxloc) +{ +l_float32 val; +l_float32 smaxval; /* start value of maximum sample, before interpolating */ +l_int32 n, imaxloc; +l_float32 x1, x2, x3, y1, y2, y3, c1, c2, c3, a, b, xmax, ymax; + + PROCNAME("numaFitMax"); + + if (pmaxval) *pmaxval = 0.0; + if (pmaxloc) *pmaxloc = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (!pmaxval) + return ERROR_INT("&maxval not defined", procName, 1); + if (!pmaxloc) + return ERROR_INT("&maxloc not defined", procName, 1); + + n = numaGetCount(na); + if (naloc) { + if (n != numaGetCount(naloc)) + return ERROR_INT("na and naloc of unequal size", procName, 1); + } + numaGetMax(na, &smaxval, &imaxloc); + + /* Simple case: max is at end point */ + if (imaxloc == 0 || imaxloc == n - 1) { + *pmaxval = smaxval; + if (naloc) { + numaGetFValue(naloc, imaxloc, &val); + *pmaxloc = val; + } else { + *pmaxloc = imaxloc; + } + return 0; + } + + /* Interior point; use quadratic interpolation */ + y2 = smaxval; + numaGetFValue(na, imaxloc - 1, &val); + y1 = val; + numaGetFValue(na, imaxloc + 1, &val); + y3 = val; + if (naloc) { + numaGetFValue(naloc, imaxloc - 1, &val); + x1 = val; + numaGetFValue(naloc, imaxloc, &val); + x2 = val; + numaGetFValue(naloc, imaxloc + 1, &val); + x3 = val; + } else { + x1 = imaxloc - 1; + x2 = imaxloc; + x3 = imaxloc + 1; + } + + /* Can't interpolate; just use the max val in na + * and the corresponding one in naloc */ + if (x1 == x2 || x1 == x3 || x2 == x3) { + *pmaxval = y2; + *pmaxloc = x2; + return 0; + } + + /* Use lagrangian interpolation; set dy/dx = 0 */ + c1 = y1 / ((x1 - x2) * (x1 - x3)); + c2 = y2 / ((x2 - x1) * (x2 - x3)); + c3 = y3 / ((x3 - x1) * (x3 - x2)); + a = c1 + c2 + c3; + b = c1 * (x2 + x3) + c2 * (x1 + x3) + c3 * (x1 + x2); + xmax = b / (2 * a); + ymax = c1 * (xmax - x2) * (xmax - x3) + + c2 * (xmax - x1) * (xmax - x3) + + c3 * (xmax - x1) * (xmax - x2); + *pmaxval = ymax; + *pmaxloc = xmax; + + return 0; +} + + +/*! + * \brief numaDifferentiateInterval() + * + * \param[in] nax numa of abscissa values + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] x0 start value of interval + * \param[in] x1 end value of interval + * \param[in] npts number of points to evaluate function in interval + * \param[out] pnadx [optional] array of x values in interval + * \param[out] pnady array of derivatives in interval + * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range + * + *
+ * Notes:
+ *      (1) The values in nax must be sorted in increasing order.
+ *          If they are not sorted, it is done in the interpolation
+ *          step, and a warning is issued.
+ *      (2) Caller should check for valid return.
+ * 
+ */ +l_ok +numaDifferentiateInterval(NUMA *nax, + NUMA *nay, + l_float32 x0, + l_float32 x1, + l_int32 npts, + NUMA **pnadx, + NUMA **pnady) +{ +l_int32 i, nx, ny; +l_float32 minx, maxx, der, invdel; +l_float32 *fay; +NUMA *nady, *naiy; + + PROCNAME("numaDifferentiateInterval"); + + if (pnadx) *pnadx = NULL; + if (!pnady) + return ERROR_INT("&nady not defined", procName, 1); + *pnady = NULL; + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (!nax) + return ERROR_INT("nax not defined", procName, 1); + if (x0 > x1) + return ERROR_INT("x0 > x1", procName, 1); + ny = numaGetCount(nay); + nx = numaGetCount(nax); + if (nx != ny) + return ERROR_INT("nax and nay not same size arrays", procName, 1); + if (ny < 2) + return ERROR_INT("not enough points", procName, 1); + numaGetMin(nax, &minx, NULL); + numaGetMax(nax, &maxx, NULL); + if (x0 < minx || x1 > maxx) + return ERROR_INT("xval is out of bounds", procName, 1); + if (npts < 2) + return ERROR_INT("npts < 2", procName, 1); + + /* Generate interpolated array over specified interval */ + if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, + npts, pnadx, &naiy)) + return ERROR_INT("interpolation failed", procName, 1); + + nady = numaCreate(npts); + *pnady = nady; + invdel = 0.5 * ((l_float32)npts - 1.0) / (x1 - x0); + fay = numaGetFArray(naiy, L_NOCOPY); + + /* Compute and save derivatives */ + der = 0.5 * invdel * (fay[1] - fay[0]); + numaAddNumber(nady, der); + for (i = 1; i < npts - 1; i++) { + der = invdel * (fay[i + 1] - fay[i - 1]); + numaAddNumber(nady, der); + } + der = 0.5 * invdel * (fay[npts - 1] - fay[npts - 2]); + numaAddNumber(nady, der); + + numaDestroy(&naiy); + return 0; +} + + +/*! + * \brief numaIntegrateInterval() + * + * \param[in] nax numa of abscissa values + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] x0 start value of interval + * \param[in] x1 end value of interval + * \param[in] npts number of points to evaluate function in interval + * \param[out] psum integral of function over interval + * \return 0 if OK, 1 on error e.g., if x0 or x1 is outside range + * + *
+ * Notes:
+ *      (1) The values in nax must be sorted in increasing order.
+ *          If they are not sorted, it is done in the interpolation
+ *          step, and a warning is issued.
+ *      (2) Caller should check for valid return.
+ * 
+ */ +l_ok +numaIntegrateInterval(NUMA *nax, + NUMA *nay, + l_float32 x0, + l_float32 x1, + l_int32 npts, + l_float32 *psum) +{ +l_int32 i, nx, ny; +l_float32 minx, maxx, sum, del; +l_float32 *fay; +NUMA *naiy; + + PROCNAME("numaIntegrateInterval"); + + if (!psum) + return ERROR_INT("&sum not defined", procName, 1); + *psum = 0.0; + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (!nax) + return ERROR_INT("nax not defined", procName, 1); + if (x0 > x1) + return ERROR_INT("x0 > x1", procName, 1); + if (npts < 2) + return ERROR_INT("npts < 2", procName, 1); + ny = numaGetCount(nay); + nx = numaGetCount(nax); + if (nx != ny) + return ERROR_INT("nax and nay not same size arrays", procName, 1); + if (ny < 2) + return ERROR_INT("not enough points", procName, 1); + numaGetMin(nax, &minx, NULL); + numaGetMax(nax, &maxx, NULL); + if (x0 < minx || x1 > maxx) + return ERROR_INT("xval is out of bounds", procName, 1); + + /* Generate interpolated array over specified interval */ + if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, + npts, NULL, &naiy)) + return ERROR_INT("interpolation failed", procName, 1); + + del = (x1 - x0) / ((l_float32)npts - 1.0); + fay = numaGetFArray(naiy, L_NOCOPY); + + /* Compute integral (simple trapezoid) */ + sum = 0.5 * (fay[0] + fay[npts - 1]); + for (i = 1; i < npts - 1; i++) + sum += fay[i]; + *psum = del * sum; + + numaDestroy(&naiy); + return 0; +} + + +/*----------------------------------------------------------------------* + * Sorting * + *----------------------------------------------------------------------*/ +/*! + * \brief numaSortGeneral() + * + * \param[in] na source numa + * \param[out] pnasort [optional] sorted numa + * \param[out] pnaindex [optional] index of elements in na associated + * with each element of nasort + * \param[out] pnainvert [optional] index of elements in nasort associated + * with each element of na + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \param[in] sorttype L_SHELL_SORT or L_BIN_SORT + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Sorting can be confusing.  Here's an array of five values with
+ *          the results shown for the 3 output arrays.
+ *
+ *          na      nasort   naindex   nainvert
+ *          -----------------------------------
+ *          3         9         2         3
+ *          4         6         3         2
+ *          9         4         1         0
+ *          6         3         0         1
+ *          1         1         4         4
+ *
+ *          Note that naindex is a LUT into na for the sorted array values,
+ *          and nainvert directly gives the sorted index values for the
+ *          input array.  It is useful to view naindex is as a map:
+ *                 0  -->  2
+ *                 1  -->  3
+ *                 2  -->  1
+ *                 3  -->  0
+ *                 4  -->  4
+ *          and nainvert, the inverse of this map:
+ *                 0  -->  3
+ *                 1  -->  2
+ *                 2  -->  0
+ *                 3  -->  1
+ *                 4  -->  4
+ *
+ *          We can write these relations symbolically as:
+ *              nasort[i] = na[naindex[i]]
+ *              na[i] = nasort[nainvert[i]]
+ * 
+ */ +l_ok +numaSortGeneral(NUMA *na, + NUMA **pnasort, + NUMA **pnaindex, + NUMA **pnainvert, + l_int32 sortorder, + l_int32 sorttype) +{ +NUMA *naindex; + + PROCNAME("numaSortGeneral"); + + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return ERROR_INT("invalid sort order", procName, 1); + if (sorttype != L_SHELL_SORT && sorttype != L_BIN_SORT) + return ERROR_INT("invalid sort type", procName, 1); + if (!pnasort && !pnaindex && !pnainvert) + return ERROR_INT("nothing to do", procName, 1); + if (pnasort) *pnasort = NULL; + if (pnaindex) *pnaindex = NULL; + if (pnainvert) *pnainvert = NULL; + + if (sorttype == L_SHELL_SORT) + naindex = numaGetSortIndex(na, sortorder); + else /* sorttype == L_BIN_SORT */ + naindex = numaGetBinSortIndex(na, sortorder); + + if (pnasort) + *pnasort = numaSortByIndex(na, naindex); + if (pnainvert) + *pnainvert = numaInvertMap(naindex); + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + return 0; +} + + +/*! + * \brief numaSortAutoSelect() + * + * \param[in] nas input numa + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return naout output sorted numa, or NULL on error + * + *
+ * Notes:
+ *      (1) This does either a shell sort or a bin sort, depending on
+ *          the number of elements in nas and the dynamic range.
+ * 
+ */ +NUMA * +numaSortAutoSelect(NUMA *nas, + l_int32 sortorder) +{ +l_int32 type; + + PROCNAME("numaSortAutoSelect"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); + + type = numaChooseSortType(nas); + if (type == L_SHELL_SORT) + return numaSort(NULL, nas, sortorder); + else if (type == L_BIN_SORT) + return numaBinSort(nas, sortorder); + else + return (NUMA *)ERROR_PTR("invalid sort type", procName, NULL); +} + + +/*! + * \brief numaSortIndexAutoSelect() + * + * \param[in] nas + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return nad indices of nas, sorted by value in nas, or NULL on error + * + *
+ * Notes:
+ *      (1) This does either a shell sort or a bin sort, depending on
+ *          the number of elements in nas and the dynamic range.
+ * 
+ */ +NUMA * +numaSortIndexAutoSelect(NUMA *nas, + l_int32 sortorder) +{ +l_int32 type; + + PROCNAME("numaSortIndexAutoSelect"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); + + type = numaChooseSortType(nas); + if (type == L_SHELL_SORT) + return numaGetSortIndex(nas, sortorder); + else if (type == L_BIN_SORT) + return numaGetBinSortIndex(nas, sortorder); + else + return (NUMA *)ERROR_PTR("invalid sort type", procName, NULL); +} + + +/*! + * \brief numaChooseSortType() + * + * \param[in] nas to be sorted + * \return sorttype L_SHELL_SORT or L_BIN_SORT, or UNDEF on error. + * + *
+ * Notes:
+ *      (1) This selects either a shell sort or a bin sort, depending on
+ *          the number of elements in nas and the dynamic range.
+ *      (2) If there are negative values in nas, it selects shell sort.
+ * 
+ */ +l_int32 +numaChooseSortType(NUMA *nas) +{ +l_int32 n, type; +l_float32 minval, maxval; + + PROCNAME("numaChooseSortType"); + + if (!nas) + return ERROR_INT("nas not defined", procName, UNDEF); + + numaGetMin(nas, &minval, NULL); + n = numaGetCount(nas); + + /* Very small histogram; use shell sort */ + if (minval < 0.0 || n < 200) { + L_INFO("Shell sort chosen\n", procName); + return L_SHELL_SORT; + } + + /* Need to compare nlog(n) with maxval. The factor of 0.003 + * was determined by comparing times for different histogram + * sizes and maxval. It is very small because binsort is fast + * and shell sort gets slow for large n. */ + numaGetMax(nas, &maxval, NULL); + if (n * log((l_float32)n) < 0.003 * maxval) { + type = L_SHELL_SORT; + L_INFO("Shell sort chosen\n", procName); + } else { + type = L_BIN_SORT; + L_INFO("Bin sort chosen\n", procName); + } + return type; +} + + +/*! + * \brief numaSort() + * + * \param[in] naout output numa; can be NULL or equal to nain + * \param[in] nain input numa + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return naout output sorted numa, or NULL on error + * + *
+ * Notes:
+ *      (1) Set naout = nain for in-place; otherwise, set naout = NULL.
+ *      (2) Source: Shell sort, modified from K&R, 2nd edition, p.62.
+ *          Slow but simple O(n logn) sort.
+ * 
+ */ +NUMA * +numaSort(NUMA *naout, + NUMA *nain, + l_int32 sortorder) +{ +l_int32 i, n, gap, j; +l_float32 tmp; +l_float32 *array; + + PROCNAME("numaSort"); + + if (!nain) + return (NUMA *)ERROR_PTR("nain not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); + + /* Make naout if necessary; otherwise do in-place */ + if (!naout) + naout = numaCopy(nain); + else if (nain != naout) + return (NUMA *)ERROR_PTR("invalid: not in-place", procName, NULL); + array = naout->array; /* operate directly on the array */ + n = numaGetCount(naout); + + /* Shell sort */ + for (gap = n/2; gap > 0; gap = gap / 2) { + for (i = gap; i < n; i++) { + for (j = i - gap; j >= 0; j -= gap) { + if ((sortorder == L_SORT_INCREASING && + array[j] > array[j + gap]) || + (sortorder == L_SORT_DECREASING && + array[j] < array[j + gap])) + { + tmp = array[j]; + array[j] = array[j + gap]; + array[j + gap] = tmp; + } + } + } + } + + return naout; +} + + +/*! + * \brief numaBinSort() + * + * \param[in] nas of non-negative integers with a max that is + * typically less than 50,000 + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return na sorted, or NULL on error + * + *
+ * Notes:
+ *      (1) Because this uses a bin sort with buckets of size 1, it
+ *          is not appropriate for sorting either small arrays or
+ *          arrays containing very large integer values.  For such
+ *          arrays, use a standard general sort function like
+ *          numaSort().
+ * 
+ */ +NUMA * +numaBinSort(NUMA *nas, + l_int32 sortorder) +{ +NUMA *nat, *nad; + + PROCNAME("numaBinSort"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); + + nat = numaGetBinSortIndex(nas, sortorder); + nad = numaSortByIndex(nas, nat); + numaDestroy(&nat); + return nad; +} + + +/*! + * \brief numaGetSortIndex() + * + * \param[in] na source numa + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return na giving an array of indices that would sort + * the input array, or NULL on error + */ +NUMA * +numaGetSortIndex(NUMA *na, + l_int32 sortorder) +{ +l_int32 i, n, gap, j; +l_float32 tmp; +l_float32 *array; /* copy of input array */ +l_float32 *iarray; /* array of indices */ +NUMA *naisort; + + PROCNAME("numaGetSortIndex"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sortorder", procName, NULL); + + n = numaGetCount(na); + if ((array = numaGetFArray(na, L_COPY)) == NULL) + return (NUMA *)ERROR_PTR("array not made", procName, NULL); + if ((iarray = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32))) == NULL) { + LEPT_FREE(array); + return (NUMA *)ERROR_PTR("iarray not made", procName, NULL); + } + for (i = 0; i < n; i++) + iarray[i] = i; + + /* Shell sort */ + for (gap = n/2; gap > 0; gap = gap / 2) { + for (i = gap; i < n; i++) { + for (j = i - gap; j >= 0; j -= gap) { + if ((sortorder == L_SORT_INCREASING && + array[j] > array[j + gap]) || + (sortorder == L_SORT_DECREASING && + array[j] < array[j + gap])) + { + tmp = array[j]; + array[j] = array[j + gap]; + array[j + gap] = tmp; + tmp = iarray[j]; + iarray[j] = iarray[j + gap]; + iarray[j + gap] = tmp; + } + } + } + } + + naisort = numaCreate(n); + for (i = 0; i < n; i++) + numaAddNumber(naisort, iarray[i]); + + LEPT_FREE(array); + LEPT_FREE(iarray); + return naisort; +} + + +/*! + * \brief numaGetBinSortIndex() + * + * \param[in] nas of non-negative integers with a max that is + * typically less than 1,000,000 + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return na sorted, or NULL on error + * + *
+ * Notes:
+ *      (1) This creates an array (or lookup table) that contains
+ *          the sorted position of the elements in the input Numa.
+ *      (2) Because it uses a bin sort with buckets of size 1, it
+ *          is not appropriate for sorting either small arrays or
+ *          arrays containing very large integer values.  For such
+ *          arrays, use a standard general sort function like
+ *          numaGetSortIndex().
+ * 
+ */ +NUMA * +numaGetBinSortIndex(NUMA *nas, + l_int32 sortorder) +{ +l_int32 i, n, isize, ival, imax; +l_float32 size; +NUMA *na, *nai, *nad; +L_PTRA *paindex; + + PROCNAME("numaGetBinSortIndex"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); + + /* Set up a ptra holding numa at indices for which there + * are values in nas. Suppose nas has the value 230 at index + * 7355. A numa holding the index 7355 is created and stored + * at the ptra index 230. If there is another value of 230 + * in nas, its index is added to the same numa (at index 230 + * in the ptra). When finished, the ptra can be scanned for numa, + * and the original indices in the nas can be read out. In this + * way, the ptra effectively sorts the input numbers in the nas. */ + numaGetMax(nas, &size, NULL); + isize = (l_int32)size; + if (isize > 1000000) + L_WARNING("large array: %d elements\n", procName, isize); + paindex = ptraCreate(isize + 1); + n = numaGetCount(nas); + for (i = 0; i < n; i++) { + numaGetIValue(nas, i, &ival); + nai = (NUMA *)ptraGetPtrToItem(paindex, ival); + if (!nai) { /* make it; no shifting will occur */ + nai = numaCreate(1); + ptraInsert(paindex, ival, nai, L_MIN_DOWNSHIFT); + } + numaAddNumber(nai, i); + } + + /* Sort by scanning the ptra, extracting numas and pulling + * the (index into nas) numbers out of each numa, taken + * successively in requested order. */ + ptraGetMaxIndex(paindex, &imax); + nad = numaCreate(0); + if (sortorder == L_SORT_INCREASING) { + for (i = 0; i <= imax; i++) { + na = (NUMA *)ptraRemove(paindex, i, L_NO_COMPACTION); + if (!na) continue; + numaJoin(nad, na, 0, -1); + numaDestroy(&na); + } + } else { /* L_SORT_DECREASING */ + for (i = imax; i >= 0; i--) { + na = (NUMA *)ptraRemoveLast(paindex); + if (!na) break; /* they've all been removed */ + numaJoin(nad, na, 0, -1); + numaDestroy(&na); + } + } + + ptraDestroy(&paindex, FALSE, FALSE); + return nad; +} + + +/*! + * \brief numaSortByIndex() + * + * \param[in] nas + * \param[in] naindex na that maps from the new numa to the input numa + * \return nad sorted, or NULL on error + */ +NUMA * +numaSortByIndex(NUMA *nas, + NUMA *naindex) +{ +l_int32 i, n, index; +l_float32 val; +NUMA *nad; + + PROCNAME("numaSortByIndex"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (!naindex) + return (NUMA *)ERROR_PTR("naindex not defined", procName, NULL); + + n = numaGetCount(nas); + nad = numaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + numaGetFValue(nas, index, &val); + numaAddNumber(nad, val); + } + + return nad; +} + + +/*! + * \brief numaIsSorted() + * + * \param[in] nas + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \param[out] psorted 1 if sorted; 0 if not + * \return 1 if OK; 0 on error + * + *
+ * Notes:
+ *      (1) This is a quick O(n) test if nas is sorted.  It is useful
+ *          in situations where the array is likely to be already
+ *          sorted, and a sort operation can be avoided.
+ * 
+ */ +l_int32 +numaIsSorted(NUMA *nas, + l_int32 sortorder, + l_int32 *psorted) +{ +l_int32 i, n; +l_float32 prevval, val; + + PROCNAME("numaIsSorted"); + + if (!psorted) + return ERROR_INT("&sorted not defined", procName, 1); + *psorted = FALSE; + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return ERROR_INT("invalid sortorder", procName, 1); + + n = numaGetCount(nas); + numaGetFValue(nas, 0, &prevval); + for (i = 1; i < n; i++) { + numaGetFValue(nas, i, &val); + if ((sortorder == L_SORT_INCREASING && val < prevval) || + (sortorder == L_SORT_DECREASING && val > prevval)) + return 0; + } + + *psorted = TRUE; + return 0; +} + + +/*! + * \brief numaSortPair() + * + * \param[in] nax, nay input arrays + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \param[out] pnasx sorted + * \param[out] pnasy sorted exactly in order of nasx + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function sorts the two input arrays, nax and nay,
+ *          together, using nax as the key for sorting.
+ * 
+ */ +l_ok +numaSortPair(NUMA *nax, + NUMA *nay, + l_int32 sortorder, + NUMA **pnasx, + NUMA **pnasy) +{ +l_int32 sorted; +NUMA *naindex; + + PROCNAME("numaSortPair"); + + if (pnasx) *pnasx = NULL; + if (pnasy) *pnasy = NULL; + if (!pnasx || !pnasy) + return ERROR_INT("&nasx and/or &nasy not defined", procName, 1); + if (!nax) + return ERROR_INT("nax not defined", procName, 1); + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return ERROR_INT("invalid sortorder", procName, 1); + + numaIsSorted(nax, sortorder, &sorted); + if (sorted == TRUE) { + *pnasx = numaCopy(nax); + *pnasy = numaCopy(nay); + } else { + naindex = numaGetSortIndex(nax, sortorder); + *pnasx = numaSortByIndex(nax, naindex); + *pnasy = numaSortByIndex(nay, naindex); + numaDestroy(&naindex); + } + + return 0; +} + + +/*! + * \brief numaInvertMap() + * + * \param[in] nas + * \return nad the inverted map, or NULL on error or if not invertible + * + *
+ * Notes:
+ *      (1) This requires that nas contain each integer from 0 to n-1.
+ *          The array is typically an index array into a sort or permutation
+ *          of another array.
+ * 
+ */ +NUMA * +numaInvertMap(NUMA *nas) +{ +l_int32 i, n, val, error; +l_int32 *test; +NUMA *nad; + + PROCNAME("numaInvertMap"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + + n = numaGetCount(nas); + nad = numaMakeConstant(0.0, n); + test = (l_int32 *)LEPT_CALLOC(n, sizeof(l_int32)); + error = 0; + for (i = 0; i < n; i++) { + numaGetIValue(nas, i, &val); + if (val >= n) { + error = 1; + break; + } + numaReplaceNumber(nad, val, i); + if (test[val] == 0) { + test[val] = 1; + } else { + error = 1; + break; + } + } + + LEPT_FREE(test); + if (error) { + numaDestroy(&nad); + return (NUMA *)ERROR_PTR("nas not invertible", procName, NULL); + } + + return nad; +} + + +/*----------------------------------------------------------------------* + * Random permutation * + *----------------------------------------------------------------------*/ +/*! + * \brief numaPseudorandomSequence() + * + * \param[in] size of sequence + * \param[in] seed for random number generation + * \return na pseudorandom on {0,...,size - 1}, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses the Durstenfeld shuffle.
+ *          See: http://en.wikipedia.org/wiki/Fisher–Yates_shuffle.
+ *          Result is a pseudorandom permutation of the sequence of integers
+ *          from 0 to size - 1.
+ * 
+ */ +NUMA * +numaPseudorandomSequence(l_int32 size, + l_int32 seed) +{ +l_int32 i, index, temp; +l_int32 *array; +NUMA *na; + + PROCNAME("numaPseudorandomSequence"); + + if (size <= 0) + return (NUMA *)ERROR_PTR("size <= 0", procName, NULL); + + if ((array = (l_int32 *)LEPT_CALLOC(size, sizeof(l_int32))) == NULL) + return (NUMA *)ERROR_PTR("array not made", procName, NULL); + for (i = 0; i < size; i++) + array[i] = i; + srand(seed); + for (i = size - 1; i > 0; i--) { + index = (l_int32)((i + 1) * ((l_float64)rand() / (l_float64)RAND_MAX)); + index = L_MIN(index, i); + temp = array[i]; + array[i] = array[index]; + array[index] = temp; + } + + na = numaCreateFromIArray(array, size); + LEPT_FREE(array); + return na; +} + + +/*! + * \brief numaRandomPermutation() + * + * \param[in] nas input array + * \param[in] seed for random number generation + * \return nas randomly shuffled array, or NULL on error + */ +NUMA * +numaRandomPermutation(NUMA *nas, + l_int32 seed) +{ +l_int32 i, index, size; +l_float32 val; +NUMA *naindex, *nad; + + PROCNAME("numaRandomPermutation"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + + size = numaGetCount(nas); + naindex = numaPseudorandomSequence(size, seed); + nad = numaCreate(size); + for (i = 0; i < size; i++) { + numaGetIValue(naindex, i, &index); + numaGetFValue(nas, index, &val); + numaAddNumber(nad, val); + } + + numaDestroy(&naindex); + return nad; +} + + +/*----------------------------------------------------------------------* + * Functions requiring sorting * + *----------------------------------------------------------------------*/ +/*! + * \brief numaGetRankValue() + * + * \param[in] na source numa + * \param[in] fract use 0.0 for smallest, 1.0 for largest + * \param[in] nasort [optional] increasing sorted version of na + * \param[in] usebins 0 for general sort; 1 for bin sort + * \param[out] pval rank val + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Computes the rank value of a number in the %na, which is
+ *          the number that is a fraction %fract from the small
+ *          end of the sorted version of %na.
+ *      (2) If you do this multiple times for different rank values,
+ *          sort the array in advance and use that for %nasort;
+ *          if you're only calling this once, input %nasort == NULL.
+ *      (3) If %usebins == 1, this uses a bin sorting method.
+ *          Use this only where:
+ *           * the numbers are non-negative integers
+ *           * there are over 100 numbers
+ *           * the maximum value is less than about 50,000
+ *      (4) The advantage of using a bin sort is that it is O(n),
+ *          instead of O(nlogn) for general sort routines.
+ * 
+ */ +l_ok +numaGetRankValue(NUMA *na, + l_float32 fract, + NUMA *nasort, + l_int32 usebins, + l_float32 *pval) +{ +l_int32 n, index; +NUMA *nas; + + PROCNAME("numaGetRankValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; /* init */ + if (!na) + return ERROR_INT("na not defined", procName, 1); + if ((n = numaGetCount(na)) == 0) + return ERROR_INT("na empty", procName, 1); + if (fract < 0.0 || fract > 1.0) + return ERROR_INT("fract not in [0.0 ... 1.0]", procName, 1); + + if (nasort) { + nas = nasort; + } else { + if (usebins == 0) + nas = numaSort(NULL, na, L_SORT_INCREASING); + else + nas = numaBinSort(na, L_SORT_INCREASING); + if (!nas) + return ERROR_INT("nas not made", procName, 1); + } + index = (l_int32)(fract * (l_float32)(n - 1) + 0.5); + numaGetFValue(nas, index, pval); + + if (!nasort) numaDestroy(&nas); + return 0; +} + + +/*! + * \brief numaGetMedian() + * + * \param[in] na source numa + * \param[out] pval median value + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Computes the median value of the numbers in the numa, by
+ *          sorting and finding the middle value in the sorted array.
+ * 
+ */ +l_ok +numaGetMedian(NUMA *na, + l_float32 *pval) +{ + PROCNAME("numaGetMedian"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; /* init */ + if (!na) + return ERROR_INT("na not defined", procName, 1); + + return numaGetRankValue(na, 0.5, NULL, 0, pval); +} + + +/*! + * \brief numaGetBinnedMedian() + * + * \param[in] na source numa + * \param[out] pval integer median value + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Computes the median value of the numbers in the numa,
+ *          using bin sort and finding the middle value in the sorted array.
+ *      (2) See numaGetRankValue() for conditions on na for which
+ *          this should be used.  Otherwise, use numaGetMedian().
+ * 
+ */ +l_ok +numaGetBinnedMedian(NUMA *na, + l_int32 *pval) +{ +l_int32 ret; +l_float32 fval; + + PROCNAME("numaGetBinnedMedian"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; /* init */ + if (!na) + return ERROR_INT("na not defined", procName, 1); + + ret = numaGetRankValue(na, 0.5, NULL, 1, &fval); + *pval = lept_roundftoi(fval); + return ret; +} + + +/*! + * \brief numaGetMeanDevFromMedian() + * + * \param[in] na source numa + * \param[in] med median value + * \param[out] pdev average absolute value deviation from median value + * \return 0 if OK; 1 on error + */ +l_ok +numaGetMeanDevFromMedian(NUMA *na, + l_float32 med, + l_float32 *pdev) +{ +l_int32 i, n; +l_float32 val, dev; + + PROCNAME("numaGetMeanDevFromMedian"); + + if (!pdev) + return ERROR_INT("&dev not defined", procName, 1); + *pdev = 0.0; /* init */ + if (!na) + return ERROR_INT("na not defined", procName, 1); + if ((n = numaGetCount(na)) == 0) + return ERROR_INT("na is empty", procName, 1); + + dev = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + dev += L_ABS(val - med); + } + *pdev = dev / (l_float32)n; + return 0; +} + + +/*! + * \brief numaGetMedianDevFromMedian() + * + * \param[in] na source numa + * \param[out] pmed [optional] median value + * \param[out] pdev median deviation from median val + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Finds the median of the absolute value of the deviation from
+ *          the median value in the array.  Why take the absolute value?
+ *          Consider the case where you have values equally distributed
+ *          about both sides of a median value.  Without taking the absolute
+ *          value of the differences, you will get 0 for the deviation,
+ *          and this is not useful.
+ * 
+ */ +l_ok +numaGetMedianDevFromMedian(NUMA *na, + l_float32 *pmed, + l_float32 *pdev) +{ +l_int32 n, i; +l_float32 val, med; +NUMA *nadev; + + PROCNAME("numaGetMedianDevFromMedian"); + + if (pmed) *pmed = 0.0; + if (!pdev) + return ERROR_INT("&dev not defined", procName, 1); + *pdev = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + numaGetMedian(na, &med); + if (pmed) *pmed = med; + n = numaGetCount(na); + nadev = numaCreate(n); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + numaAddNumber(nadev, L_ABS(val - med)); + } + numaGetMedian(nadev, pdev); + + numaDestroy(&nadev); + return 0; +} + + +/*! + * \brief numaGetMode() + * + * \param[in] na source numa + * \param[out] pval mode val + * \param[out] pcount [optional] mode count + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Computes the mode value of the numbers in the numa, by
+ *          sorting and finding the value of the number with the
+ *          largest count.
+ *      (2) Optionally, also returns that count.
+ * 
+ */ +l_ok +numaGetMode(NUMA *na, + l_float32 *pval, + l_int32 *pcount) +{ +l_int32 i, n, maxcount, prevcount; +l_float32 val, maxval, prevval; +l_float32 *array; +NUMA *nasort; + + PROCNAME("numaGetMode"); + + if (pcount) *pcount = 0; + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + if ((n = numaGetCount(na)) == 0) + return 1; + + if ((nasort = numaSort(NULL, na, L_SORT_DECREASING)) == NULL) + return ERROR_INT("nas not made", procName, 1); + array = numaGetFArray(nasort, L_NOCOPY); + + /* Initialize with array[0] */ + prevval = array[0]; + prevcount = 1; + maxval = prevval; + maxcount = prevcount; + + /* Scan the sorted array, aggregating duplicates */ + for (i = 1; i < n; i++) { + val = array[i]; + if (val == prevval) { + prevcount++; + } else { /* new value */ + if (prevcount > maxcount) { /* new max */ + maxcount = prevcount; + maxval = prevval; + } + prevval = val; + prevcount = 1; + } + } + + /* Was the mode the last run of elements? */ + if (prevcount > maxcount) { + maxcount = prevcount; + maxval = prevval; + } + + *pval = maxval; + if (pcount) + *pcount = maxcount; + + numaDestroy(&nasort); + return 0; +} + + +/*----------------------------------------------------------------------* + * Rearrangements * + *----------------------------------------------------------------------*/ +/*! + * \brief numaJoin() + * + * \param[in] nad dest numa; add to this one + * \param[in] nas [optional] source numa; add from this one + * \param[in] istart starting index in nas + * \param[in] iend ending index in nas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (2) iend < 0 means 'read to the end'
+ *      (3) if nas == NULL, this is a no-op
+ * 
+ */ +l_ok +numaJoin(NUMA *nad, + NUMA *nas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +l_float32 val; + + PROCNAME("numaJoin"); + + if (!nad) + return ERROR_INT("nad not defined", procName, 1); + if (!nas) + return 0; + + if (istart < 0) + istart = 0; + n = numaGetCount(nas); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + numaGetFValue(nas, i, &val); + numaAddNumber(nad, val); + } + + return 0; +} + + +/*! + * \brief numaaJoin() + * + * \param[in] naad dest naa; add to this one + * \param[in] naas [optional] source naa; add from this one + * \param[in] istart starting index in nas + * \param[in] iend ending index in naas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (2) iend < 0 means 'read to the end'
+ *      (3) if naas == NULL, this is a no-op
+ * 
+ */ +l_ok +numaaJoin(NUMAA *naad, + NUMAA *naas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +NUMA *na; + + PROCNAME("numaaJoin"); + + if (!naad) + return ERROR_INT("naad not defined", procName, 1); + if (!naas) + return 0; + + if (istart < 0) + istart = 0; + n = numaaGetCount(naas); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + na = numaaGetNuma(naas, i, L_CLONE); + numaaAddNuma(naad, na, L_INSERT); + } + + return 0; +} + + +/*! + * \brief numaaFlattenToNuma() + * + * \param[in] naa + * \return numa, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the Numaa to a Numa, by joining successively
+ *          each Numa in the Numaa.
+ *      (2) It doesn't make any assumptions about the location of the
+ *          Numas in the Numaa array, unlike most Numaa functions.
+ *      (3) It leaves the input Numaa unchanged.
+ * 
+ */ +NUMA * +numaaFlattenToNuma(NUMAA *naa) +{ +l_int32 i, nalloc; +NUMA *na, *nad; +NUMA **array; + + PROCNAME("numaaFlattenToNuma"); + + if (!naa) + return (NUMA *)ERROR_PTR("naa not defined", procName, NULL); + + nalloc = naa->nalloc; + array = numaaGetPtrArray(naa); + nad = numaCreate(0); + for (i = 0; i < nalloc; i++) { + na = array[i]; + if (!na) continue; + numaJoin(nad, na, 0, -1); + } + + return nad; +} + diff --git a/3rdparty/hgOCR/leptonica/numafunc2.c b/3rdparty/hgOCR/leptonica/numafunc2.c new file mode 100644 index 00000000..5f37df7a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/numafunc2.c @@ -0,0 +1,3139 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file numafunc2.c + *
+ *
+ *      --------------------------------------
+ *      This file has these Numa utilities:
+ *         - morphological operations
+ *         - arithmetic transforms
+ *         - windowed statistical operations
+ *         - histogram extraction
+ *         - histogram comparison
+ *         - extrema finding
+ *         - frequency and crossing analysis
+ *      --------------------------------------
+
+ *      Morphological (min/max) operations
+ *          NUMA        *numaErode()
+ *          NUMA        *numaDilate()
+ *          NUMA        *numaOpen()
+ *          NUMA        *numaClose()
+ *
+ *      Other transforms
+ *          NUMA        *numaTransform()
+ *          l_int32      numaSimpleStats()
+ *          l_int32      numaWindowedStats()
+ *          NUMA        *numaWindowedMean()
+ *          NUMA        *numaWindowedMeanSquare()
+ *          l_int32      numaWindowedVariance()
+ *          NUMA        *numaWindowedMedian()
+ *          NUMA        *numaConvertToInt()
+ *
+ *      Histogram generation and statistics
+ *          NUMA        *numaMakeHistogram()
+ *          NUMA        *numaMakeHistogramAuto()
+ *          NUMA        *numaMakeHistogramClipped()
+ *          NUMA        *numaRebinHistogram()
+ *          NUMA        *numaNormalizeHistogram()
+ *          l_int32      numaGetStatsUsingHistogram()
+ *          l_int32      numaGetHistogramStats()
+ *          l_int32      numaGetHistogramStatsOnInterval()
+ *          l_int32      numaMakeRankFromHistogram()
+ *          l_int32      numaHistogramGetRankFromVal()
+ *          l_int32      numaHistogramGetValFromRank()
+ *          l_int32      numaDiscretizeRankAndIntensity()
+ *          l_int32      numaGetRankBinValues()
+ *
+ *      Splitting a distribution
+ *          l_int32      numaSplitDistribution()
+ *
+ *      Comparing histograms
+ *          l_int32      grayHistogramsToEMD()
+ *          l_int32      numaEarthMoverDistance()
+ *          l_int32      grayInterHistogramStats()
+ *
+ *      Extrema finding
+ *          NUMA        *numaFindPeaks()
+ *          NUMA        *numaFindExtrema()
+ *          l_int32     *numaCountReversals()
+ *
+ *      Threshold crossings and frequency analysis
+ *          l_int32      numaSelectCrossingThreshold()
+ *          NUMA        *numaCrossingsByThreshold()
+ *          NUMA        *numaCrossingsByPeaks()
+ *          NUMA        *numaEvalBestHaarParameters()
+ *          l_int32      numaEvalHaarSum()
+ *
+ *      Generating numbers in a range under constraints
+ *          NUMA        *genConstrainedNumaInRange()
+ *
+ *    Things to remember when using the Numa:
+ *
+ *    (1) The numa is a struct, not an array.  Always use accessors
+ *        (see numabasic.c), never the fields directly.
+ *
+ *    (2) The number array holds l_float32 values.  It can also
+ *        be used to store l_int32 values.  See numabasic.c for
+ *        details on using the accessors.  Integers larger than
+ *        about 10M will lose accuracy due on retrieval due to round-off.
+ *        For large integers, use the dna (array of l_float64) instead.
+ *
+ *    (3) Occasionally, in the comments we denote the i-th element of a
+ *        numa by na[i].  This is conceptual only -- the numa is not an array!
+ *
+ *    Some general comments on histograms:
+ *
+ *    (1) Histograms are the generic statistical representation of
+ *        the data about some attribute.  Typically they're not
+ *        normalized -- they simply give the number of occurrences
+ *        within each range of values of the attribute.  This range
+ *        of values is referred to as a 'bucket'.  For example,
+ *        the histogram could specify how many connected components
+ *        are found for each value of their width; in that case,
+ *        the bucket size is 1.
+ *
+ *    (2) In leptonica, all buckets have the same size.  Histograms
+ *        are therefore specified by a numa of occurrences, along
+ *        with two other numbers: the 'value' associated with the
+ *        occupants of the first bucket and the size (i.e., 'width')
+ *        of each bucket.  These two numbers then allow us to calculate
+ *        the value associated with the occupants of each bucket.
+ *        These numbers are fields in the numa, initialized to
+ *        a startx value of 0.0 and a binsize of 1.0.  Accessors for
+ *        these fields are functions numa*Parameters().  All histograms
+ *        must have these two numbers properly set.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* bin sizes in numaMakeHistogram() */ +static const l_int32 BinSizeArray[] = {2, 5, 10, 20, 50, 100, 200, 500, 1000,\ + 2000, 5000, 10000, 20000, 50000, 100000, 200000,\ + 500000, 1000000, 2000000, 5000000, 10000000,\ + 200000000, 50000000, 100000000}; +static const l_int32 NBinSizes = 24; + + +#ifndef NO_CONSOLE_IO +#define DEBUG_HISTO 0 +#define DEBUG_CROSSINGS 0 +#define DEBUG_FREQUENCY 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*----------------------------------------------------------------------* + * Morphological operations * + *----------------------------------------------------------------------*/ +/*! + * \brief numaErode() + * + * \param[in] nas + * \param[in] size of sel; greater than 0, odd. The origin + * is implicitly in the center. + * \return nad eroded, or NULL on error + * + *
+ * Notes:
+ *      (1) The structuring element (sel) is linear, all "hits"
+ *      (2) If size == 1, this returns a copy
+ *      (3) General comment.  The morphological operations are equivalent
+ *          to those that would be performed on a 1-dimensional fpix.
+ *          However, because we have not implemented morphological
+ *          operations on fpix, we do this here.  Because it is only
+ *          1 dimensional, there is no reason to use the more
+ *          complicated van Herk/Gil-Werman algorithm, and we do it
+ *          by brute force.
+ * 
+ */ +NUMA * +numaErode(NUMA *nas, + l_int32 size) +{ +l_int32 i, j, n, hsize, len; +l_float32 minval; +l_float32 *fa, *fas, *fad; +NUMA *nad; + + PROCNAME("numaErode"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + if ((size & 1) == 0 ) { + L_WARNING("sel size must be odd; increasing by 1\n", procName); + size++; + } + + if (size == 1) + return numaCopy(nas); + + /* Make a source fa (fas) that has an added (size / 2) boundary + * on left and right, contains a copy of nas in the interior region + * (between 'size' and 'size + n', and has large values + * inserted in the boundary (because it is an erosion). */ + n = numaGetCount(nas); + hsize = size / 2; + len = n + 2 * hsize; + if ((fas = (l_float32 *)LEPT_CALLOC(len, sizeof(l_float32))) == NULL) + return (NUMA *)ERROR_PTR("fas not made", procName, NULL); + for (i = 0; i < hsize; i++) + fas[i] = 1.0e37; + for (i = hsize + n; i < len; i++) + fas[i] = 1.0e37; + fa = numaGetFArray(nas, L_NOCOPY); + for (i = 0; i < n; i++) + fas[hsize + i] = fa[i]; + + nad = numaMakeConstant(0, n); + numaCopyParameters(nad, nas); + fad = numaGetFArray(nad, L_NOCOPY); + for (i = 0; i < n; i++) { + minval = 1.0e37; /* start big */ + for (j = 0; j < size; j++) + minval = L_MIN(minval, fas[i + j]); + fad[i] = minval; + } + + LEPT_FREE(fas); + return nad; +} + + +/*! + * \brief numaDilate() + * + * \param[in] nas + * \param[in] size of sel; greater than 0, odd. The origin + * is implicitly in the center. + * \return nad dilated, or NULL on error + * + *
+ * Notes:
+ *      (1) The structuring element (sel) is linear, all "hits"
+ *      (2) If size == 1, this returns a copy
+ * 
+ */ +NUMA * +numaDilate(NUMA *nas, + l_int32 size) +{ +l_int32 i, j, n, hsize, len; +l_float32 maxval; +l_float32 *fa, *fas, *fad; +NUMA *nad; + + PROCNAME("numaDilate"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + if ((size & 1) == 0 ) { + L_WARNING("sel size must be odd; increasing by 1\n", procName); + size++; + } + + if (size == 1) + return numaCopy(nas); + + /* Make a source fa (fas) that has an added (size / 2) boundary + * on left and right, contains a copy of nas in the interior region + * (between 'size' and 'size + n', and has small values + * inserted in the boundary (because it is a dilation). */ + n = numaGetCount(nas); + hsize = size / 2; + len = n + 2 * hsize; + if ((fas = (l_float32 *)LEPT_CALLOC(len, sizeof(l_float32))) == NULL) + return (NUMA *)ERROR_PTR("fas not made", procName, NULL); + for (i = 0; i < hsize; i++) + fas[i] = -1.0e37; + for (i = hsize + n; i < len; i++) + fas[i] = -1.0e37; + fa = numaGetFArray(nas, L_NOCOPY); + for (i = 0; i < n; i++) + fas[hsize + i] = fa[i]; + + nad = numaMakeConstant(0, n); + numaCopyParameters(nad, nas); + fad = numaGetFArray(nad, L_NOCOPY); + for (i = 0; i < n; i++) { + maxval = -1.0e37; /* start small */ + for (j = 0; j < size; j++) + maxval = L_MAX(maxval, fas[i + j]); + fad[i] = maxval; + } + + LEPT_FREE(fas); + return nad; +} + + +/*! + * \brief numaOpen() + * + * \param[in] nas + * \param[in] size of sel; greater than 0, odd. The origin + * is implicitly in the center. + * \return nad opened, or NULL on error + * + *
+ * Notes:
+ *      (1) The structuring element (sel) is linear, all "hits"
+ *      (2) If size == 1, this returns a copy
+ * 
+ */ +NUMA * +numaOpen(NUMA *nas, + l_int32 size) +{ +NUMA *nat, *nad; + + PROCNAME("numaOpen"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + if ((size & 1) == 0 ) { + L_WARNING("sel size must be odd; increasing by 1\n", procName); + size++; + } + + if (size == 1) + return numaCopy(nas); + + nat = numaErode(nas, size); + nad = numaDilate(nat, size); + numaDestroy(&nat); + return nad; +} + + +/*! + * \brief numaClose() + * + * \param[in] nas + * \param[in] size of sel; greater than 0, odd. The origin + * is implicitly in the center. + * \return nad closed, or NULL on error + * + *
+ * Notes:
+ *      (1) The structuring element (sel) is linear, all "hits"
+ *      (2) If size == 1, this returns a copy
+ *      (3) We add a border before doing this operation, for the same
+ *          reason that we add a border to a pix before doing a safe closing.
+ *          Without the border, a small component near the border gets
+ *          clipped at the border on dilation, and can be entirely removed
+ *          by the following erosion, violating the basic extensivity
+ *          property of closing.
+ * 
+ */ +NUMA * +numaClose(NUMA *nas, + l_int32 size) +{ +NUMA *nab, *nat1, *nat2, *nad; + + PROCNAME("numaClose"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (size <= 0) + return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); + if ((size & 1) == 0 ) { + L_WARNING("sel size must be odd; increasing by 1\n", procName); + size++; + } + + if (size == 1) + return numaCopy(nas); + + nab = numaAddBorder(nas, size, size, 0); /* to preserve extensivity */ + nat1 = numaDilate(nab, size); + nat2 = numaErode(nat1, size); + nad = numaRemoveBorder(nat2, size, size); + numaDestroy(&nab); + numaDestroy(&nat1); + numaDestroy(&nat2); + return nad; +} + + +/*----------------------------------------------------------------------* + * Other transforms * + *----------------------------------------------------------------------*/ +/*! + * \brief numaTransform() + * + * \param[in] nas + * \param[in] shift add this to each number + * \param[in] scale multiply each number by this + * \return nad with all values shifted and scaled, or NULL on error + * + *
+ * Notes:
+ *      (1) Each number is shifted before scaling.
+ * 
+ */ +NUMA * +numaTransform(NUMA *nas, + l_float32 shift, + l_float32 scale) +{ +l_int32 i, n; +l_float32 val; +NUMA *nad; + + PROCNAME("numaTransform"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + if ((nad = numaCreate(n)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + numaCopyParameters(nad, nas); + for (i = 0; i < n; i++) { + numaGetFValue(nas, i, &val); + val = scale * (val + shift); + numaAddNumber(nad, val); + } + return nad; +} + + +/*! + * \brief numaSimpleStats() + * + * \param[in] na input numa + * \param[in] first first element to use + * \param[in] last last element to use; -1 to go to the end + * \param[out] pmean [optional] mean value + * \param[out] pvar [optional] variance + * \param[out] prvar [optional] rms deviation from the mean + * \return 0 if OK, 1 on error + */ +l_ok +numaSimpleStats(NUMA *na, + l_int32 first, + l_int32 last, + l_float32 *pmean, + l_float32 *pvar, + l_float32 *prvar) +{ +l_int32 i, n, ni; +l_float32 sum, sumsq, val, mean, var; + + PROCNAME("numaSimpleStats"); + + if (pmean) *pmean = 0.0; + if (pvar) *pvar = 0.0; + if (prvar) *prvar = 0.0; + if (!pmean && !pvar && !prvar) + return ERROR_INT("nothing requested", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + if ((n = numaGetCount(na)) == 0) + return ERROR_INT("na is empty", procName, 1); + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return ERROR_INT("invalid first", procName, 1); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return ERROR_INT("first > last\n", procName, 1); + ni = last - first + 1; + sum = sumsq = 0.0; + for (i = first; i <= last; i++) { + numaGetFValue(na, i, &val); + sum += val; + sumsq += val * val; + } + + mean = sum / ni; + if (pmean) + *pmean = mean; + if (pvar || prvar) { + var = sumsq / ni - mean * mean; + if (pvar) *pvar = var; + if (prvar) *prvar = sqrtf(var); + } + + return 0; +} + + +/*! + * \brief numaWindowedStats() + * + * \param[in] nas input numa + * \param[in] wc half width of the window + * \param[out] pnam [optional] mean value in window + * \param[out] pnams [optional] mean square value in window + * \param[out] pnav [optional] variance in window + * \param[out] pnarv [optional] rms deviation from the mean + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a high-level convenience function for calculating
+ *          any or all of these derived arrays.
+ *      (2) These statistical measures over the values in the
+ *          rectangular window are:
+ *            ~ average value: [x]  (nam)
+ *            ~ average squared value: [x*x] (nams)
+ *            ~ variance: [(x - [x])*(x - [x])] = [x*x] - [x]*[x]  (nav)
+ *            ~ square-root of variance: (narv)
+ *          where the brackets [ .. ] indicate that the average value is
+ *          to be taken over the window.
+ *      (3) Note that the variance is just the mean square difference from
+ *          the mean value; and the square root of the variance is the
+ *          root mean square difference from the mean, sometimes also
+ *          called the 'standard deviation'.
+ *      (4) Internally, use mirrored borders to handle values near the
+ *          end of each array.
+ * 
+ */ +l_ok +numaWindowedStats(NUMA *nas, + l_int32 wc, + NUMA **pnam, + NUMA **pnams, + NUMA **pnav, + NUMA **pnarv) +{ +NUMA *nam, *nams; + + PROCNAME("numaWindowedStats"); + + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if (2 * wc + 1 > numaGetCount(nas)) + L_WARNING("filter wider than input array!\n", procName); + + if (!pnav && !pnarv) { + if (pnam) *pnam = numaWindowedMean(nas, wc); + if (pnams) *pnams = numaWindowedMeanSquare(nas, wc); + return 0; + } + + nam = numaWindowedMean(nas, wc); + nams = numaWindowedMeanSquare(nas, wc); + numaWindowedVariance(nam, nams, pnav, pnarv); + if (pnam) + *pnam = nam; + else + numaDestroy(&nam); + if (pnams) + *pnams = nams; + else + numaDestroy(&nams); + return 0; +} + + +/*! + * \brief numaWindowedMean() + * + * \param[in] nas + * \param[in] wc half width of the convolution window + * \return nad after low-pass filtering, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a convolution.  The window has width = 2 * %wc + 1.
+ *      (2) We add a mirrored border of size %wc to each end of the array.
+ * 
+ */ +NUMA * +numaWindowedMean(NUMA *nas, + l_int32 wc) +{ +l_int32 i, n, n1, width; +l_float32 sum, norm; +l_float32 *fa1, *fad, *suma; +NUMA *na1, *nad; + + PROCNAME("numaWindowedMean"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + width = 2 * wc + 1; /* filter width */ + if (width > n) + L_WARNING("filter wider than input array!\n", procName); + + na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); + n1 = n + 2 * wc; + fa1 = numaGetFArray(na1, L_NOCOPY); + nad = numaMakeConstant(0, n); + fad = numaGetFArray(nad, L_NOCOPY); + + /* Make sum array; note the indexing */ + if ((suma = (l_float32 *)LEPT_CALLOC(n1 + 1, sizeof(l_float32))) == NULL) { + numaDestroy(&na1); + numaDestroy(&nad); + return (NUMA *)ERROR_PTR("suma not made", procName, NULL); + } + sum = 0.0; + suma[0] = 0.0; + for (i = 0; i < n1; i++) { + sum += fa1[i]; + suma[i + 1] = sum; + } + + norm = 1. / (2 * wc + 1); + for (i = 0; i < n; i++) + fad[i] = norm * (suma[width + i] - suma[i]); + + LEPT_FREE(suma); + numaDestroy(&na1); + return nad; +} + + +/*! + * \brief numaWindowedMeanSquare() + * + * \param[in] nas + * \param[in] wc half width of the window + * \return nad containing windowed mean square values, or NULL on error + * + *
+ * Notes:
+ *      (1) The window has width = 2 * %wc + 1.
+ *      (2) We add a mirrored border of size %wc to each end of the array.
+ * 
+ */ +NUMA * +numaWindowedMeanSquare(NUMA *nas, + l_int32 wc) +{ +l_int32 i, n, n1, width; +l_float32 sum, norm; +l_float32 *fa1, *fad, *suma; +NUMA *na1, *nad; + + PROCNAME("numaWindowedMeanSquare"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + width = 2 * wc + 1; /* filter width */ + if (width > n) + L_WARNING("filter wider than input array!\n", procName); + + na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); + n1 = n + 2 * wc; + fa1 = numaGetFArray(na1, L_NOCOPY); + nad = numaMakeConstant(0, n); + fad = numaGetFArray(nad, L_NOCOPY); + + /* Make sum array; note the indexing */ + if ((suma = (l_float32 *)LEPT_CALLOC(n1 + 1, sizeof(l_float32))) == NULL) { + numaDestroy(&na1); + numaDestroy(&nad); + return (NUMA *)ERROR_PTR("suma not made", procName, NULL); + } + sum = 0.0; + suma[0] = 0.0; + for (i = 0; i < n1; i++) { + sum += fa1[i] * fa1[i]; + suma[i + 1] = sum; + } + + norm = 1. / (2 * wc + 1); + for (i = 0; i < n; i++) + fad[i] = norm * (suma[width + i] - suma[i]); + + LEPT_FREE(suma); + numaDestroy(&na1); + return nad; +} + + +/*! + * \brief numaWindowedVariance() + * + * \param[in] nam windowed mean values + * \param[in] nams windowed mean square values + * \param[out] pnav [optional] numa of variance -- the ms deviation + * from the mean + * \param[out] pnarv [optional] numa of rms deviation from the mean + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The numas of windowed mean and mean square are precomputed,
+ *          using numaWindowedMean() and numaWindowedMeanSquare().
+ *      (2) Either or both of the variance and square-root of variance
+ *          are returned, where the variance is the average over the
+ *          window of the mean square difference of the pixel value
+ *          from the mean:
+ *                [(x - [x])*(x - [x])] = [x*x] - [x]*[x]
+ * 
+ */ +l_ok +numaWindowedVariance(NUMA *nam, + NUMA *nams, + NUMA **pnav, + NUMA **pnarv) +{ +l_int32 i, nm, nms; +l_float32 var; +l_float32 *fam, *fams, *fav, *farv; +NUMA *nav, *narv; /* variance and square root of variance */ + + PROCNAME("numaWindowedVariance"); + + if (pnav) *pnav = NULL; + if (pnarv) *pnarv = NULL; + if (!pnav && !pnarv) + return ERROR_INT("neither &nav nor &narv are defined", procName, 1); + if (!nam) + return ERROR_INT("nam not defined", procName, 1); + if (!nams) + return ERROR_INT("nams not defined", procName, 1); + nm = numaGetCount(nam); + nms = numaGetCount(nams); + if (nm != nms) + return ERROR_INT("sizes of nam and nams differ", procName, 1); + + if (pnav) { + nav = numaMakeConstant(0, nm); + *pnav = nav; + fav = numaGetFArray(nav, L_NOCOPY); + } + if (pnarv) { + narv = numaMakeConstant(0, nm); + *pnarv = narv; + farv = numaGetFArray(narv, L_NOCOPY); + } + fam = numaGetFArray(nam, L_NOCOPY); + fams = numaGetFArray(nams, L_NOCOPY); + + for (i = 0; i < nm; i++) { + var = fams[i] - fam[i] * fam[i]; + if (pnav) + fav[i] = var; + if (pnarv) + farv[i] = sqrtf(var); + } + + return 0; +} + + +/*! + * \brief numaWindowedMedian() + * + * \param[in] nas + * \param[in] halfwin half width of window over which the median is found + * \return nad after windowed median filtering, or NULL on error + * + *
+ * Notes:
+ *      (1) The requested window has width = 2 * %halfwin + 1.
+ *      (2) If the input nas has less then 3 elements, return a copy.
+ *      (3) If the filter is too small (%halfwin <= 0), return a copy.
+ *      (4) If the filter is too large, it is reduced in size.
+ *      (5) We add a mirrored border of size %halfwin to each end of
+ *          the array to simplify the calculation by avoiding end-effects.
+ * 
+ */ +NUMA * +numaWindowedMedian(NUMA *nas, + l_int32 halfwin) +{ +l_int32 i, n; +l_float32 medval; +NUMA *na1, *na2, *nad; + + PROCNAME("numaWindowedMedian"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if ((n = numaGetCount(nas)) < 3) + return numaCopy(nas); + if (halfwin <= 0) { + L_ERROR("filter too small; returning a copy\n", procName); + return numaCopy(nas); + } + + if (halfwin > (n - 1) / 2) { + halfwin = (n - 1) / 2; + L_INFO("reducing filter to halfwin = %d\n", procName, halfwin); + } + + /* Add a border to both ends */ + na1 = numaAddSpecifiedBorder(nas, halfwin, halfwin, L_MIRRORED_BORDER); + + /* Get the median value at the center of each window, corresponding + * to locations in the input nas. */ + nad = numaCreate(n); + for (i = 0; i < n; i++) { + na2 = numaClipToInterval(na1, i, i + 2 * halfwin); + numaGetMedian(na2, &medval); + numaAddNumber(nad, medval); + numaDestroy(&na2); + } + + numaDestroy(&na1); + return nad; +} + + +/*! + * \brief numaConvertToInt() + * + * \param[in] nas source numa + * \return na with all values rounded to nearest integer, or + * NULL on error + */ +NUMA * +numaConvertToInt(NUMA *nas) +{ +l_int32 i, n, ival; +NUMA *nad; + + PROCNAME("numaConvertToInt"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + + n = numaGetCount(nas); + if ((nad = numaCreate(n)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + numaCopyParameters(nad, nas); + for (i = 0; i < n; i++) { + numaGetIValue(nas, i, &ival); + numaAddNumber(nad, ival); + } + return nad; +} + + +/*----------------------------------------------------------------------* + * Histogram generation and statistics * + *----------------------------------------------------------------------*/ +/*! + * \brief numaMakeHistogram() + * + * \param[in] na + * \param[in] maxbins max number of histogram bins + * \param[out] pbinsize size of histogram bins + * \param[out] pbinstart [optional] start val of minimum bin; + * input NULL to force start at 0 + * \return na consisiting of histogram of integerized values, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) This simple interface is designed for integer data.
+ *          The bins are of integer width and start on integer boundaries,
+ *          so the results on float data will not have high precision.
+ *      (2) Specify the max number of input bins.   Then %binsize,
+ *          the size of bins necessary to accommodate the input data,
+ *          is returned.  It is one of the sequence:
+ *                {1, 2, 5, 10, 20, 50, ...}.
+ *      (3) If &binstart is given, all values are accommodated,
+ *          and the min value of the starting bin is returned.
+ *          Otherwise, all negative values are discarded and
+ *          the histogram bins start at 0.
+ * 
+ */ +NUMA * +numaMakeHistogram(NUMA *na, + l_int32 maxbins, + l_int32 *pbinsize, + l_int32 *pbinstart) +{ +l_int32 i, n, ival, hval; +l_int32 iminval, imaxval, range, binsize, nbins, ibin; +l_float32 val, ratio; +NUMA *nai, *nahist; + + PROCNAME("numaMakeHistogram"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + if (!pbinsize) + return (NUMA *)ERROR_PTR("&binsize not defined", procName, NULL); + + /* Determine input range */ + numaGetMin(na, &val, NULL); + iminval = (l_int32)(val + 0.5); + numaGetMax(na, &val, NULL); + imaxval = (l_int32)(val + 0.5); + if (pbinstart == NULL) { /* clip negative vals; start from 0 */ + iminval = 0; + if (imaxval < 0) + return (NUMA *)ERROR_PTR("all values < 0", procName, NULL); + } + + /* Determine binsize */ + range = imaxval - iminval + 1; + if (range > maxbins - 1) { + ratio = (l_float64)range / (l_float64)maxbins; + binsize = 0; + for (i = 0; i < NBinSizes; i++) { + if (ratio < BinSizeArray[i]) { + binsize = BinSizeArray[i]; + break; + } + } + if (binsize == 0) + return (NUMA *)ERROR_PTR("numbers too large", procName, NULL); + } else { + binsize = 1; + } + *pbinsize = binsize; + nbins = 1 + range / binsize; /* +1 seems to be sufficient */ + + /* Redetermine iminval */ + if (pbinstart && binsize > 1) { + if (iminval >= 0) + iminval = binsize * (iminval / binsize); + else + iminval = binsize * ((iminval - binsize + 1) / binsize); + } + if (pbinstart) + *pbinstart = iminval; + +#if DEBUG_HISTO + fprintf(stderr, " imaxval = %d, range = %d, nbins = %d\n", + imaxval, range, nbins); +#endif /* DEBUG_HISTO */ + + /* Use integerized data for input */ + if ((nai = numaConvertToInt(na)) == NULL) + return (NUMA *)ERROR_PTR("nai not made", procName, NULL); + n = numaGetCount(nai); + + /* Make histogram, converting value in input array + * into a bin number for this histogram array. */ + if ((nahist = numaCreate(nbins)) == NULL) { + numaDestroy(&nai); + return (NUMA *)ERROR_PTR("nahist not made", procName, NULL); + } + numaSetCount(nahist, nbins); + numaSetParameters(nahist, iminval, binsize); + for (i = 0; i < n; i++) { + numaGetIValue(nai, i, &ival); + ibin = (ival - iminval) / binsize; + if (ibin >= 0 && ibin < nbins) { + numaGetIValue(nahist, ibin, &hval); + numaSetValue(nahist, ibin, hval + 1.0); + } + } + + numaDestroy(&nai); + return nahist; +} + + +/*! + * \brief numaMakeHistogramAuto() + * + * \param[in] na numa of floats; these may be integers + * \param[in] maxbins max number of histogram bins; >= 1 + * \return na consisiting of histogram of quantized float values, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) This simple interface is designed for accurate binning
+ *          of both integer and float data.
+ *      (2) If the array data is integers, and the range of integers
+ *          is smaller than %maxbins, they are binned as they fall,
+ *          with binsize = 1.
+ *      (3) If the range of data, (maxval - minval), is larger than
+ *          %maxbins, or if the data is floats, they are binned into
+ *          exactly %maxbins bins.
+ *      (4) Unlike numaMakeHistogram(), these bins in general have
+ *          non-integer location and width, even for integer data.
+ * 
+ */ +NUMA * +numaMakeHistogramAuto(NUMA *na, + l_int32 maxbins) +{ +l_int32 i, n, imin, imax, irange, ibin, ival, allints; +l_float32 minval, maxval, range, binsize, fval; +NUMA *nah; + + PROCNAME("numaMakeHistogramAuto"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + maxbins = L_MAX(1, maxbins); + + /* Determine input range */ + numaGetMin(na, &minval, NULL); + numaGetMax(na, &maxval, NULL); + + /* Determine if values are all integers */ + n = numaGetCount(na); + numaHasOnlyIntegers(na, maxbins, &allints); + + /* Do simple integer binning if possible */ + if (allints && (maxval - minval < maxbins)) { + imin = (l_int32)minval; + imax = (l_int32)maxval; + irange = imax - imin + 1; + nah = numaCreate(irange); + numaSetCount(nah, irange); /* init */ + numaSetParameters(nah, minval, 1.0); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + ibin = ival - imin; + numaGetIValue(nah, ibin, &ival); + numaSetValue(nah, ibin, ival + 1.0); + } + + return nah; + } + + /* Do float binning, even if the data is integers. */ + range = maxval - minval; + binsize = range / (l_float32)maxbins; + if (range == 0.0) { + nah = numaCreate(1); + numaSetParameters(nah, minval, binsize); + numaAddNumber(nah, n); + return nah; + } + nah = numaCreate(maxbins); + numaSetCount(nah, maxbins); + numaSetParameters(nah, minval, binsize); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &fval); + ibin = (l_int32)((fval - minval) / binsize); + ibin = L_MIN(ibin, maxbins - 1); /* "edge" case; stay in bounds */ + numaGetIValue(nah, ibin, &ival); + numaSetValue(nah, ibin, ival + 1.0); + } + + return nah; +} + + +/*! + * \brief numaMakeHistogramClipped() + * + * \param[in] na + * \param[in] binsize typically 1.0 + * \param[in] maxsize of histogram ordinate + * \return na histogram of bins of size %binsize, starting with + * the na[0] (x = 0.0 and going up to a maximum of + * x = %maxsize, by increments of %binsize), or NULL on error + * + *
+ * Notes:
+ *      (1) This simple function generates a histogram of values
+ *          from na, discarding all values < 0.0 or greater than
+ *          min(%maxsize, maxval), where maxval is the maximum value in na.
+ *          The histogram data is put in bins of size delx = %binsize,
+ *          starting at x = 0.0.  We use as many bins as are
+ *          needed to hold the data.
+ * 
+ */ +NUMA * +numaMakeHistogramClipped(NUMA *na, + l_float32 binsize, + l_float32 maxsize) +{ +l_int32 i, n, nbins, ival, ibin; +l_float32 val, maxval; +NUMA *nad; + + PROCNAME("numaMakeHistogramClipped"); + + if (!na) + return (NUMA *)ERROR_PTR("na not defined", procName, NULL); + if (binsize <= 0.0) + return (NUMA *)ERROR_PTR("binsize must be > 0.0", procName, NULL); + if (binsize > maxsize) + binsize = maxsize; /* just one bin */ + + numaGetMax(na, &maxval, NULL); + n = numaGetCount(na); + maxsize = L_MIN(maxsize, maxval); + nbins = (l_int32)(maxsize / binsize) + 1; + +/* fprintf(stderr, "maxsize = %7.3f, nbins = %d\n", maxsize, nbins); */ + + if ((nad = numaCreate(nbins)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + numaSetParameters(nad, 0.0, binsize); + numaSetCount(nad, nbins); /* interpret zeroes in bins as data */ + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + ibin = (l_int32)(val / binsize); + if (ibin >= 0 && ibin < nbins) { + numaGetIValue(nad, ibin, &ival); + numaSetValue(nad, ibin, ival + 1.0); + } + } + + return nad; +} + + +/*! + * \brief numaRebinHistogram() + * + * \param[in] nas input histogram + * \param[in] newsize number of old bins contained in each new bin + * \return nad more coarsely re-binned histogram, or NULL on error + */ +NUMA * +numaRebinHistogram(NUMA *nas, + l_int32 newsize) +{ +l_int32 i, j, ns, nd, index, count, val; +l_float32 start, oldsize; +NUMA *nad; + + PROCNAME("numaRebinHistogram"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (newsize <= 1) + return (NUMA *)ERROR_PTR("newsize must be > 1", procName, NULL); + if ((ns = numaGetCount(nas)) == 0) + return (NUMA *)ERROR_PTR("no bins in nas", procName, NULL); + + nd = (ns + newsize - 1) / newsize; + if ((nad = numaCreate(nd)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + numaGetParameters(nad, &start, &oldsize); + numaSetParameters(nad, start, oldsize * newsize); + + for (i = 0; i < nd; i++) { /* new bins */ + count = 0; + index = i * newsize; + for (j = 0; j < newsize; j++) { + if (index < ns) { + numaGetIValue(nas, index, &val); + count += val; + index++; + } + } + numaAddNumber(nad, count); + } + + return nad; +} + + +/*! + * \brief numaNormalizeHistogram() + * + * \param[in] nas input histogram + * \param[in] tsum target sum of all numbers in dest histogram; e.g., use + * %tsum= 1.0 if this represents a probability distribution + * \return nad normalized histogram, or NULL on error + */ +NUMA * +numaNormalizeHistogram(NUMA *nas, + l_float32 tsum) +{ +l_int32 i, ns; +l_float32 sum, factor, fval; +NUMA *nad; + + PROCNAME("numaNormalizeHistogram"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (tsum <= 0.0) + return (NUMA *)ERROR_PTR("tsum must be > 0.0", procName, NULL); + if ((ns = numaGetCount(nas)) == 0) + return (NUMA *)ERROR_PTR("no bins in nas", procName, NULL); + + numaGetSum(nas, &sum); + factor = tsum / sum; + + if ((nad = numaCreate(ns)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + numaCopyParameters(nad, nas); + + for (i = 0; i < ns; i++) { + numaGetFValue(nas, i, &fval); + fval *= factor; + numaAddNumber(nad, fval); + } + + return nad; +} + + +/*! + * \brief numaGetStatsUsingHistogram() + * + * \param[in] na an arbitrary set of numbers; not ordered and not + * a histogram + * \param[in] maxbins the maximum number of bins to be allowed in + * the histogram; use an integer larger than the + * largest number in %na for consecutive integer bins + * \param[out] pmin [optional] min value of set + * \param[out] pmax [optional] max value of set + * \param[out] pmean [optional] mean value of set + * \param[out] pvariance [optional] variance + * \param[out] pmedian [optional] median value of set + * \param[in] rank in [0.0 ... 1.0]; median has a rank 0.5; + * ignored if &rval == NULL + * \param[out] prval [optional] value in na corresponding to %rank + * \param[out] phisto [optional] Numa histogram; use NULL to prevent + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a simple interface for gathering statistics
+ *          from a numa, where a histogram is used 'under the covers'
+ *          to avoid sorting if a rank value is requested.  In that case,
+ *          by using a histogram we are trading speed for accuracy, because
+ *          the values in %na are quantized to the center of a set of bins.
+ *      (2) If the median, other rank value, or histogram are not requested,
+ *          the calculation is all performed on the input Numa.
+ *      (3) The variance is the average of the square of the
+ *          difference from the mean.  The median is the value in na
+ *          with rank 0.5.
+ *      (4) There are two situations where this gives rank results with
+ *          accuracy comparable to computing stastics directly on the input
+ *          data, without binning into a histogram:
+ *           (a) the data is integers and the range of data is less than
+ *               %maxbins, and
+ *           (b) the data is floats and the range is small compared to
+ *               %maxbins, so that the binsize is much less than 1.
+ *      (5) If a histogram is used and the numbers in the Numa extend
+ *          over a large range, you can limit the required storage by
+ *          specifying the maximum number of bins in the histogram.
+ *          Use %maxbins == 0 to force the bin size to be 1.
+ *      (6) This optionally returns the median and one arbitrary rank value.
+ *          If you need several rank values, return the histogram and use
+ *               numaHistogramGetValFromRank(nah, rank, &rval)
+ *          multiple times.
+ * 
+ */ +l_ok +numaGetStatsUsingHistogram(NUMA *na, + l_int32 maxbins, + l_float32 *pmin, + l_float32 *pmax, + l_float32 *pmean, + l_float32 *pvariance, + l_float32 *pmedian, + l_float32 rank, + l_float32 *prval, + NUMA **phisto) +{ +l_int32 i, n; +l_float32 minval, maxval, fval, mean, sum; +NUMA *nah; + + PROCNAME("numaGetStatsUsingHistogram"); + + if (pmin) *pmin = 0.0; + if (pmax) *pmax = 0.0; + if (pmean) *pmean = 0.0; + if (pvariance) *pvariance = 0.0; + if (pmedian) *pmedian = 0.0; + if (prval) *prval = 0.0; + if (phisto) *phisto = NULL; + if (!na) + return ERROR_INT("na not defined", procName, 1); + if ((n = numaGetCount(na)) == 0) + return ERROR_INT("numa is empty", procName, 1); + + numaGetMin(na, &minval, NULL); + numaGetMax(na, &maxval, NULL); + if (pmin) *pmin = minval; + if (pmax) *pmax = maxval; + if (pmean || pvariance) { + sum = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &fval); + sum += fval; + } + mean = sum / (l_float32)n; + if (pmean) *pmean = mean; + } + if (pvariance) { + sum = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &fval); + sum += fval * fval; + } + *pvariance = sum / (l_float32)n - mean * mean; + } + + if (!pmedian && !prval && !phisto) + return 0; + + nah = numaMakeHistogramAuto(na, maxbins); + if (pmedian) + numaHistogramGetValFromRank(nah, 0.5, pmedian); + if (prval) + numaHistogramGetValFromRank(nah, rank, prval); + if (phisto) + *phisto = nah; + else + numaDestroy(&nah); + return 0; +} + + +/*! + * \brief numaGetHistogramStats() + * + * \param[in] nahisto histogram: y(x(i)), i = 0 ... nbins - 1 + * \param[in] startx x value of first bin: x(0) + * \param[in] deltax x increment between bins; the bin size; x(1) - x(0) + * \param[out] pxmean [optional] mean value of histogram + * \param[out] pxmedian [optional] median value of histogram + * \param[out] pxmode [optional] mode value of histogram: + * xmode = x(imode), where y(xmode) >= y(x(i)) for + * all i != imode + * \param[out] pxvariance [optional] variance of x + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the histogram represents the relation y(x), the
+ *          computed values that are returned are the x values.
+ *          These are NOT the bucket indices i; they are related to the
+ *          bucket indices by
+ *                x(i) = startx + i * deltax
+ * 
+ */ +l_ok +numaGetHistogramStats(NUMA *nahisto, + l_float32 startx, + l_float32 deltax, + l_float32 *pxmean, + l_float32 *pxmedian, + l_float32 *pxmode, + l_float32 *pxvariance) +{ + PROCNAME("numaGetHistogramStats"); + + if (pxmean) *pxmean = 0.0; + if (pxmedian) *pxmedian = 0.0; + if (pxmode) *pxmode = 0.0; + if (pxvariance) *pxvariance = 0.0; + if (!nahisto) + return ERROR_INT("nahisto not defined", procName, 1); + + return numaGetHistogramStatsOnInterval(nahisto, startx, deltax, 0, -1, + pxmean, pxmedian, pxmode, + pxvariance); +} + + +/*! + * \brief numaGetHistogramStatsOnInterval() + * + * \param[in] nahisto histogram: y(x(i)), i = 0 ... nbins - 1 + * \param[in] startx x value of first bin: x(0) + * \param[in] deltax x increment between bins; the bin size; x(1) - x(0) + * \param[in] ifirst first bin to use for collecting stats + * \param[in] ilast last bin for collecting stats; -1 to go to the end + * \param[out] pxmean [optional] mean value of histogram + * \param[out] pxmedian [optional] median value of histogram + * \param[out] pxmode [optional] mode value of histogram: + * xmode = x(imode), where y(xmode) >= y(x(i)) for + * all i != imode + * \param[out] pxvariance [optional] variance of x + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the histogram represents the relation y(x), the
+ *          computed values that are returned are the x values.
+ *          These are NOT the bucket indices i; they are related to the
+ *          bucket indices by
+ *                x(i) = startx + i * deltax
+ * 
+ */ +l_ok +numaGetHistogramStatsOnInterval(NUMA *nahisto, + l_float32 startx, + l_float32 deltax, + l_int32 ifirst, + l_int32 ilast, + l_float32 *pxmean, + l_float32 *pxmedian, + l_float32 *pxmode, + l_float32 *pxvariance) +{ +l_int32 i, n, imax; +l_float32 sum, sumval, halfsum, moment, var, x, y, ymax; + + PROCNAME("numaGetHistogramStatsOnInterval"); + + if (pxmean) *pxmean = 0.0; + if (pxmedian) *pxmedian = 0.0; + if (pxmode) *pxmode = 0.0; + if (pxvariance) *pxvariance = 0.0; + if (!nahisto) + return ERROR_INT("nahisto not defined", procName, 1); + if (!pxmean && !pxmedian && !pxmode && !pxvariance) + return ERROR_INT("nothing to compute", procName, 1); + + n = numaGetCount(nahisto); + ifirst = L_MAX(0, ifirst); + if (ilast < 0) ilast = n - 1; + if (ifirst >= n) + return ERROR_INT("invalid ifirst", procName, 1); + if (ilast >= n) { + L_WARNING("ilast = %d is beyond max index = %d; adjusting\n", + procName, ilast, n - 1); + ilast = n - 1; + } + if (ifirst > ilast) + return ERROR_INT("ifirst > ilast", procName, 1); + for (sum = 0.0, moment = 0.0, var = 0.0, i = ifirst; i <= ilast ; i++) { + x = startx + i * deltax; + numaGetFValue(nahisto, i, &y); + sum += y; + moment += x * y; + var += x * x * y; + } + if (sum == 0.0) { + L_INFO("sum is 0\n", procName); + return 0; + } + + if (pxmean) + *pxmean = moment / sum; + if (pxvariance) + *pxvariance = var / sum - moment * moment / (sum * sum); + + if (pxmedian) { + halfsum = sum / 2.0; + for (sumval = 0.0, i = ifirst; i <= ilast; i++) { + numaGetFValue(nahisto, i, &y); + sumval += y; + if (sumval >= halfsum) { + *pxmedian = startx + i * deltax; + break; + } + } + } + + if (pxmode) { + imax = -1; + ymax = -1.0e10; + for (i = ifirst; i <= ilast; i++) { + numaGetFValue(nahisto, i, &y); + if (y > ymax) { + ymax = y; + imax = i; + } + } + *pxmode = startx + imax * deltax; + } + + return 0; +} + + +/*! + * \brief numaMakeRankFromHistogram() + * + * \param[in] startx xval corresponding to first element in nay + * \param[in] deltax x increment between array elements in nay + * \param[in] nasy input histogram, assumed equally spaced + * \param[in] npts number of points to evaluate rank function + * \param[out] pnax [optional] array of x values in range + * \param[out] pnay rank array of specified npts + * \return 0 if OK, 1 on error + */ +l_ok +numaMakeRankFromHistogram(l_float32 startx, + l_float32 deltax, + NUMA *nasy, + l_int32 npts, + NUMA **pnax, + NUMA **pnay) +{ +l_int32 i, n; +l_float32 sum, fval; +NUMA *nan, *nar; + + PROCNAME("numaMakeRankFromHistogram"); + + if (pnax) *pnax = NULL; + if (!pnay) + return ERROR_INT("&nay not defined", procName, 1); + *pnay = NULL; + if (!nasy) + return ERROR_INT("nasy not defined", procName, 1); + if ((n = numaGetCount(nasy)) == 0) + return ERROR_INT("no bins in nas", procName, 1); + + /* Normalize and generate the rank array corresponding to + * the binned histogram. */ + nan = numaNormalizeHistogram(nasy, 1.0); + nar = numaCreate(n + 1); /* rank numa corresponding to nan */ + sum = 0.0; + numaAddNumber(nar, sum); /* first element is 0.0 */ + for (i = 0; i < n; i++) { + numaGetFValue(nan, i, &fval); + sum += fval; + numaAddNumber(nar, sum); + } + + /* Compute rank array on full range with specified + * number of points and correspondence to x-values. */ + numaInterpolateEqxInterval(startx, deltax, nar, L_LINEAR_INTERP, + startx, startx + n * deltax, npts, + pnax, pnay); + numaDestroy(&nan); + numaDestroy(&nar); + return 0; +} + + +/*! + * \brief numaHistogramGetRankFromVal() + * + * \param[in] na histogram + * \param[in] rval value of input sample for which we want the rank + * \param[out] prank fraction of total samples below rval + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If we think of the histogram as a function y(x), normalized
+ *          to 1, for a given input value of x, this computes the
+ *          rank of x, which is the integral of y(x) from the start
+ *          value of x to the input value.
+ *      (2) This function only makes sense when applied to a Numa that
+ *          is a histogram.  The values in the histogram can be ints and
+ *          floats, and are computed as floats.  The rank is returned
+ *          as a float between 0.0 and 1.0.
+ *      (3) The numa parameters startx and binsize are used to
+ *          compute x from the Numa index i.
+ * 
+ */ +l_ok +numaHistogramGetRankFromVal(NUMA *na, + l_float32 rval, + l_float32 *prank) +{ +l_int32 i, ibinval, n; +l_float32 startval, binsize, binval, maxval, fractval, total, sum, val; + + PROCNAME("numaHistogramGetRankFromVal"); + + if (!prank) + return ERROR_INT("prank not defined", procName, 1); + *prank = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + numaGetParameters(na, &startval, &binsize); + n = numaGetCount(na); + if (rval < startval) + return 0; + maxval = startval + n * binsize; + if (rval > maxval) { + *prank = 1.0; + return 0; + } + + binval = (rval - startval) / binsize; + ibinval = (l_int32)binval; + if (ibinval >= n) { + *prank = 1.0; + return 0; + } + fractval = binval - (l_float32)ibinval; + + sum = 0.0; + for (i = 0; i < ibinval; i++) { + numaGetFValue(na, i, &val); + sum += val; + } + numaGetFValue(na, ibinval, &val); + sum += fractval * val; + numaGetSum(na, &total); + *prank = sum / total; + +/* fprintf(stderr, "binval = %7.3f, rank = %7.3f\n", binval, *prank); */ + + return 0; +} + + +/*! + * \brief numaHistogramGetValFromRank() + * + * \param[in] na histogram + * \param[in] rank fraction of total samples + * \param[out] prval approx. to the bin value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If we think of the histogram as a function y(x), this returns
+ *          the value x such that the integral of y(x) from the start
+ *          value to x gives the fraction 'rank' of the integral
+ *          of y(x) over all bins.
+ *      (2) This function only makes sense when applied to a Numa that
+ *          is a histogram.  The values in the histogram can be ints and
+ *          floats, and are computed as floats.  The val is returned
+ *          as a float, even though the buckets are of integer width.
+ *      (3) The numa parameters startx and binsize are used to
+ *          compute x from the Numa index i.
+ * 
+ */ +l_ok +numaHistogramGetValFromRank(NUMA *na, + l_float32 rank, + l_float32 *prval) +{ +l_int32 i, n; +l_float32 startval, binsize, rankcount, total, sum, fract, val; + + PROCNAME("numaHistogramGetValFromRank"); + + if (!prval) + return ERROR_INT("prval not defined", procName, 1); + *prval = 0.0; + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (rank < 0.0) { + L_WARNING("rank < 0; setting to 0.0\n", procName); + rank = 0.0; + } + if (rank > 1.0) { + L_WARNING("rank > 1.0; setting to 1.0\n", procName); + rank = 1.0; + } + + n = numaGetCount(na); + numaGetParameters(na, &startval, &binsize); + numaGetSum(na, &total); + rankcount = rank * total; /* count that corresponds to rank */ + sum = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + if (sum + val >= rankcount) + break; + sum += val; + } + if (val <= 0.0) /* can == 0 if rank == 0.0 */ + fract = 0.0; + else /* sum + fract * val = rankcount */ + fract = (rankcount - sum) / val; + + /* The use of the fraction of a bin allows a simple calculation + * for the histogram value at the given rank. */ + *prval = startval + binsize * ((l_float32)i + fract); + +/* fprintf(stderr, "rank = %7.3f, val = %7.3f\n", rank, *prval); */ + + return 0; +} + + +/*! + * \brief numaDiscretizeRankAndIntensity() + * + * \param[in] na normalized histo of probability density vs intensity + * \param[in] nbins number of bins at which the rank is divided + * \param[out] pnarbin [optional] rank bin value vs intensity + * \param[out] pnam [optional] median intensity in a bin vs rank bin + * value, with %nbins of discretized rank values + * \param[out] pnar [optional] rank vs intensity; this is + * a cumulative norm histogram + * \param[out] pnabb [optional] intensity at the right bin boundary + * vs rank bin + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We are inverting the rank(intensity) function to get
+ *          the intensity(rank) function at %nbins equally spaced
+ *          values of rank between 0.0 and 1.0.  We save integer values
+ *          for the intensity.
+ *      (2) We are using the word "intensity" to describe the type of
+ *          array values, but any array of non-negative numbers will work.
+ *      (3) The output arrays give the following mappings, where the
+ *          input is a normalized histogram of array values:
+ *             array values     -->  rank bin number  (narbin)
+ *             rank bin number  -->  median array value in bin (nam)
+ *             array values     -->  cumulative norm = rank  (nar)
+ *             rank bin number  -->  array value at right bin edge (nabb)
+ * 
+ */ +l_ok +numaDiscretizeRankAndIntensity(NUMA *na, + l_int32 nbins, + NUMA **pnarbin, + NUMA **pnam, + NUMA **pnar, + NUMA **pnabb) +{ +NUMA *nar; /* rank value as function of intensity */ +NUMA *nam; /* median intensity in the rank bins */ +NUMA *nabb; /* rank bin right boundaries (in intensity) */ +NUMA *narbin; /* binned rank value as a function of intensity */ +l_int32 i, j, npts, start, midfound, mcount, rightedge; +l_float32 sum, midrank, endrank, val; + + PROCNAME("numaDiscretizeRankAndIntensity"); + + if (pnarbin) *pnarbin = NULL; + if (pnam) *pnam = NULL; + if (pnar) *pnar = NULL; + if (pnabb) *pnabb = NULL; + if (!pnarbin && !pnam && !pnar && !pnabb) + return ERROR_INT("no output requested", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (nbins < 2) + return ERROR_INT("nbins must be > 1", procName, 1); + + /* Get cumulative normalized histogram (rank vs intensity value). + * For a normalized histogram from an 8 bpp grayscale image + * as input, we have 256 bins and 257 points in the + * cumulative (rank) histogram. */ + npts = numaGetCount(na); + if ((nar = numaCreate(npts + 1)) == NULL) + return ERROR_INT("nar not made", procName, 1); + sum = 0.0; + numaAddNumber(nar, sum); /* left side of first bin */ + for (i = 0; i < npts; i++) { + numaGetFValue(na, i, &val); + sum += val; + numaAddNumber(nar, sum); + } + + nam = numaCreate(nbins); + narbin = numaCreate(npts); + nabb = numaCreate(nbins); + if (!nam || !narbin || !nabb) { + numaDestroy(&nar); + numaDestroy(&nam); + numaDestroy(&narbin); + numaDestroy(&nabb); + return ERROR_INT("numa not made", procName, 1); + } + + /* We find the intensity value at the right edge of each of + * the rank bins. We also find the median intensity in the bin, + * where approximately half the samples are lower and half are + * higher. This can be considered as a simple approximation + * for the average intensity in the bin. */ + start = 0; /* index in nar */ + mcount = 0; /* count of median values in rank bins; not to exceed nbins */ + for (i = 0; i < nbins; i++) { + midrank = (l_float32)(i + 0.5) / (l_float32)(nbins); + endrank = (l_float32)(i + 1.0) / (l_float32)(nbins); + endrank = L_MAX(0.0, L_MIN(endrank - 0.001, 1.0)); + midfound = FALSE; + for (j = start; j < npts; j++) { /* scan up for each bin value */ + numaGetFValue(nar, j, &val); + /* Use (j == npts - 1) tests in case all weight is at top end */ + if ((!midfound && val >= midrank) || + (mcount < nbins && j == npts - 1)) { + midfound = TRUE; + numaAddNumber(nam, j); + mcount++; + } + if ((val >= endrank) || (j == npts - 1)) { + numaAddNumber(nabb, j); + if (val == endrank) + start = j; + else + start = j - 1; + break; + } + } + } + numaSetValue(nabb, nbins - 1, npts - 1); /* extend to max */ + + /* Error checking: did we get data in all bins? */ + if (mcount != nbins) + L_WARNING("found data for %d bins; should be %d\n", + procName, mcount, nbins); + + /* Generate LUT that maps from intensity to bin number */ + start = 0; + for (i = 0; i < nbins; i++) { + numaGetIValue(nabb, i, &rightedge); + for (j = start; j < npts; j++) { + if (j <= rightedge) + numaAddNumber(narbin, i); + if (j > rightedge) { + start = j; + break; + } + if (j == npts - 1) { /* we're done */ + start = j + 1; + break; + } + } + } + + if (pnarbin) + *pnarbin = narbin; + else + numaDestroy(&narbin); + if (pnam) + *pnam = nam; + else + numaDestroy(&nam); + if (pnar) + *pnar = nar; + else + numaDestroy(&nar); + if (pnabb) + *pnabb = nabb; + else + numaDestroy(&nabb); + return 0; +} + + +/*! + * \brief numaGetRankBinValues() + * + * \param[in] na an array of values + * \param[in] nbins number of bins at which the rank is divided + * \param[out] pnarbin [optional] rank bin value vs array value + * \param[out] pnam [optional] median intensity in a bin vs rank bin + * value, with %nbins of discretized rank values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simple interface for getting a binned rank representation
+ *          of an input array of values.  This returns two mappings:
+ *             array value     -->  rank bin number  (narbin)
+ *             rank bin number -->  median array value in each rank bin (nam)
+ * 
+ */ +l_ok +numaGetRankBinValues(NUMA *na, + l_int32 nbins, + NUMA **pnarbin, + NUMA **pnam) +{ +NUMA *nah, *nan; /* histo and normalized histo */ +l_int32 maxbins, discardval; +l_float32 maxval, delx; + + PROCNAME("numaGetRankBinValues"); + + if (pnarbin) *pnarbin = NULL; + if (pnam) *pnam = NULL; + if (!pnarbin && !pnam) + return ERROR_INT("no output requested", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + if (numaGetCount(na) == 0) + return ERROR_INT("na is empty", procName, 1); + if (nbins < 2) + return ERROR_INT("nbins must be > 1", procName, 1); + + /* Get normalized histogram */ + numaGetMax(na, &maxval, NULL); + maxbins = L_MIN(100002, (l_int32)maxval + 2); + nah = numaMakeHistogram(na, maxbins, &discardval, NULL); + nan = numaNormalizeHistogram(nah, 1.0); + + /* Warn if there is a scale change. This shouldn't happen + * unless the max value is above 100000. */ + numaGetParameters(nan, NULL, &delx); + if (delx > 1.0) + L_WARNING("scale change: delx = %6.2f\n", procName, delx); + + /* Rank bin the results */ + numaDiscretizeRankAndIntensity(nan, nbins, pnarbin, pnam, NULL, NULL); + numaDestroy(&nah); + numaDestroy(&nan); + return 0; +} + + +/*----------------------------------------------------------------------* + * Splitting a distribution * + *----------------------------------------------------------------------*/ +/*! + * \brief numaSplitDistribution() + * + * \param[in] na histogram + * \param[in] scorefract fraction of the max score, used to determine + * range over which the histogram min is searched + * \param[out] psplitindex [optional] index for splitting + * \param[out] pave1 [optional] average of lower distribution + * \param[out] pave2 [optional] average of upper distribution + * \param[out] pnum1 [optional] population of lower distribution + * \param[out] pnum2 [optional] population of upper distribution + * \param[out] pnascore [optional] for debugging; otherwise use NULL + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function is intended to be used on a distribution of
+ *          values that represent two sets, such as a histogram of
+ *          pixel values for an image with a fg and bg, and the goal
+ *          is to determine the averages of the two sets and the
+ *          best splitting point.
+ *      (2) The Otsu method finds a split point that divides the distribution
+ *          into two parts by maximizing a score function that is the
+ *          product of two terms:
+ *            (a) the square of the difference of centroids, (ave1 - ave2)^2
+ *            (b) fract1 * (1 - fract1)
+ *          where fract1 is the fraction in the lower distribution.
+ *      (3) This works well for images where the fg and bg are
+ *          each relatively homogeneous and well-separated in color.
+ *          However, if the actual fg and bg sets are very different
+ *          in size, and the bg is highly varied, as can occur in some
+ *          scanned document images, this will bias the split point
+ *          into the larger "bump" (i.e., toward the point where the
+ *          (b) term reaches its maximum of 0.25 at fract1 = 0.5.
+ *          To avoid this, we define a range of values near the
+ *          maximum of the score function, and choose the value within
+ *          this range such that the histogram itself has a minimum value.
+ *          The range is determined by scorefract: we include all abscissa
+ *          values to the left and right of the value that maximizes the
+ *          score, such that the score stays above (1 - scorefract) * maxscore.
+ *          The intuition behind this modification is to try to find
+ *          a split point that both has a high variance score and is
+ *          at or near a minimum in the histogram, so that the histogram
+ *          slope is small at the split point.
+ *      (4) We normalize the score so that if the two distributions
+ *          were of equal size and at opposite ends of the numa, the
+ *          score would be 1.0.
+ * 
+ */ +l_ok +numaSplitDistribution(NUMA *na, + l_float32 scorefract, + l_int32 *psplitindex, + l_float32 *pave1, + l_float32 *pave2, + l_float32 *pnum1, + l_float32 *pnum2, + NUMA **pnascore) +{ +l_int32 i, n, bestsplit, minrange, maxrange, maxindex; +l_float32 ave1, ave2, ave1prev, ave2prev; +l_float32 num1, num2, num1prev, num2prev; +l_float32 val, minval, sum, fract1; +l_float32 norm, score, minscore, maxscore; +NUMA *nascore, *naave1, *naave2, *nanum1, *nanum2; + + PROCNAME("numaSplitDistribution"); + + if (psplitindex) *psplitindex = 0; + if (pave1) *pave1 = 0.0; + if (pave2) *pave2 = 0.0; + if (pnum1) *pnum1 = 0.0; + if (pnum2) *pnum2 = 0.0; + if (pnascore) *pnascore = NULL; + if (!na) + return ERROR_INT("na not defined", procName, 1); + + n = numaGetCount(na); + if (n <= 1) + return ERROR_INT("n = 1 in histogram", procName, 1); + numaGetSum(na, &sum); + if (sum <= 0.0) + return ERROR_INT("sum <= 0.0", procName, 1); + norm = 4.0 / ((l_float32)(n - 1) * (n - 1)); + ave1prev = 0.0; + numaGetHistogramStats(na, 0.0, 1.0, &ave2prev, NULL, NULL, NULL); + num1prev = 0.0; + num2prev = sum; + maxindex = n / 2; /* initialize with something */ + + /* Split the histogram with [0 ... i] in the lower part + * and [i+1 ... n-1] in upper part. First, compute an otsu + * score for each possible splitting. */ + if ((nascore = numaCreate(n)) == NULL) + return ERROR_INT("nascore not made", procName, 1); + naave1 = (pave1) ? numaCreate(n) : NULL; + naave2 = (pave2) ? numaCreate(n) : NULL; + nanum1 = (pnum1) ? numaCreate(n) : NULL; + nanum2 = (pnum2) ? numaCreate(n) : NULL; + maxscore = 0.0; + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + num1 = num1prev + val; + if (num1 == 0) + ave1 = ave1prev; + else + ave1 = (num1prev * ave1prev + i * val) / num1; + num2 = num2prev - val; + if (num2 == 0) + ave2 = ave2prev; + else + ave2 = (num2prev * ave2prev - i * val) / num2; + fract1 = num1 / sum; + score = norm * (fract1 * (1 - fract1)) * (ave2 - ave1) * (ave2 - ave1); + numaAddNumber(nascore, score); + if (pave1) numaAddNumber(naave1, ave1); + if (pave2) numaAddNumber(naave2, ave2); + if (pnum1) numaAddNumber(nanum1, num1); + if (pnum2) numaAddNumber(nanum2, num2); + if (score > maxscore) { + maxscore = score; + maxindex = i; + } + num1prev = num1; + num2prev = num2; + ave1prev = ave1; + ave2prev = ave2; + } + + /* Next, for all contiguous scores within a specified fraction + * of the max, choose the split point as the value with the + * minimum in the histogram. */ + minscore = (1. - scorefract) * maxscore; + for (i = maxindex - 1; i >= 0; i--) { + numaGetFValue(nascore, i, &val); + if (val < minscore) + break; + } + minrange = i + 1; + for (i = maxindex + 1; i < n; i++) { + numaGetFValue(nascore, i, &val); + if (val < minscore) + break; + } + maxrange = i - 1; + numaGetFValue(na, minrange, &minval); + bestsplit = minrange; + for (i = minrange + 1; i <= maxrange; i++) { + numaGetFValue(na, i, &val); + if (val < minval) { + minval = val; + bestsplit = i; + } + } + + /* Add one to the bestsplit value to get the threshold value, + * because when we take a threshold, as in pixThresholdToBinary(), + * we always choose the set with values below the threshold. */ + bestsplit = L_MIN(255, bestsplit + 1); + + if (psplitindex) *psplitindex = bestsplit; + if (pave1) numaGetFValue(naave1, bestsplit, pave1); + if (pave2) numaGetFValue(naave2, bestsplit, pave2); + if (pnum1) numaGetFValue(nanum1, bestsplit, pnum1); + if (pnum2) numaGetFValue(nanum2, bestsplit, pnum2); + + if (pnascore) { /* debug mode */ + fprintf(stderr, "minrange = %d, maxrange = %d\n", minrange, maxrange); + fprintf(stderr, "minval = %10.0f\n", minval); + gplotSimple1(nascore, GPLOT_PNG, "/tmp/lept/nascore", + "Score for split distribution"); + *pnascore = nascore; + } else { + numaDestroy(&nascore); + } + + if (pave1) numaDestroy(&naave1); + if (pave2) numaDestroy(&naave2); + if (pnum1) numaDestroy(&nanum1); + if (pnum2) numaDestroy(&nanum2); + return 0; +} + + +/*----------------------------------------------------------------------* + * Comparing histograms * + *----------------------------------------------------------------------*/ +/*! + * \brief grayHistogramsToEMD() + * + * \param[in] naa1, naa2 two numaa, each with one or more 256-element + * histograms + * \param[out] pnad nad of EM distances for each histogram + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) The two numaas must be the same size and have corresponding
+ *         256-element histograms.  Pairs do not need to be normalized
+ *         to the same sum.
+ *     (2) This is typically used on two sets of histograms from
+ *         corresponding tiles of two images.  The similarity of two
+ *         images can be found with the scoring function used in
+ *         pixCompareGrayByHisto():
+ *             score S = 1.0 - k * D, where
+ *                 k is a constant, say in the range 5-10
+ *                 D = EMD
+ *             for each tile; for multiple tiles, take the Min(S) over
+ *             the set of tiles to be the final score.
+ * 
+ */ +l_ok +grayHistogramsToEMD(NUMAA *naa1, + NUMAA *naa2, + NUMA **pnad) +{ +l_int32 i, n, nt; +l_float32 dist; +NUMA *na1, *na2, *nad; + + PROCNAME("grayHistogramsToEMD"); + + if (!pnad) + return ERROR_INT("&nad not defined", procName, 1); + *pnad = NULL; + if (!naa1 || !naa2) + return ERROR_INT("na1 and na2 not both defined", procName, 1); + n = numaaGetCount(naa1); + if (n != numaaGetCount(naa2)) + return ERROR_INT("naa1 and naa2 numa counts differ", procName, 1); + nt = numaaGetNumberCount(naa1); + if (nt != numaaGetNumberCount(naa2)) + return ERROR_INT("naa1 and naa2 number counts differ", procName, 1); + if (256 * n != nt) /* good enough check */ + return ERROR_INT("na sizes must be 256", procName, 1); + + nad = numaCreate(n); + *pnad = nad; + for (i = 0; i < n; i++) { + na1 = numaaGetNuma(naa1, i, L_CLONE); + na2 = numaaGetNuma(naa2, i, L_CLONE); + numaEarthMoverDistance(na1, na2, &dist); + numaAddNumber(nad, dist / 255.); /* normalize to [0.0 - 1.0] */ + numaDestroy(&na1); + numaDestroy(&na2); + } + return 0; +} + + +/*! + * \brief numaEarthMoverDistance() + * + * \param[in] na1, na2 two numas of the same size, typically histograms + * \param[out] pdist earthmover distance + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) The two numas must have the same size.  They do not need to be
+ *         normalized to the same sum before applying the function.
+ *     (2) For a 1D discrete function, the implementation of the EMD
+ *         is trivial.  Just keep filling or emptying buckets in one numa
+ *         to match the amount in the other, moving sequentially along
+ *         both arrays.
+ *     (3) We divide the sum of the absolute value of everything moved
+ *         (by 1 unit at a time) by the sum of the numa (amount of "earth")
+ *         to get the average distance that the "earth" was moved.
+ *         This is the value returned here.
+ *     (4) The caller can do a further normalization, by the number of
+ *         buckets (minus 1), to get the EM distance as a fraction of
+ *         the maximum possible distance, which is n-1.  This fraction
+ *         is 1.0 for the situation where all the 'earth' in the first
+ *         array is at one end, and all in the second array is at the
+ *         other end.
+ * 
+ */ +l_ok +numaEarthMoverDistance(NUMA *na1, + NUMA *na2, + l_float32 *pdist) +{ +l_int32 n, norm, i; +l_float32 sum1, sum2, diff, total; +l_float32 *array1, *array3; +NUMA *na3; + + PROCNAME("numaEarthMoverDistance"); + + if (!pdist) + return ERROR_INT("&dist not defined", procName, 1); + *pdist = 0.0; + if (!na1 || !na2) + return ERROR_INT("na1 and na2 not both defined", procName, 1); + n = numaGetCount(na1); + if (n != numaGetCount(na2)) + return ERROR_INT("na1 and na2 have different size", procName, 1); + + /* Generate na3; normalize to na1 if necessary */ + numaGetSum(na1, &sum1); + numaGetSum(na2, &sum2); + norm = (L_ABS(sum1 - sum2) < 0.00001 * L_ABS(sum1)) ? 1 : 0; + if (!norm) + na3 = numaTransform(na2, 0, sum1 / sum2); + else + na3 = numaCopy(na2); + array1 = numaGetFArray(na1, L_NOCOPY); + array3 = numaGetFArray(na3, L_NOCOPY); + + /* Move earth in n3 from array elements, to match n1 */ + total = 0; + for (i = 1; i < n; i++) { + diff = array1[i - 1] - array3[i - 1]; + array3[i] -= diff; + total += L_ABS(diff); + } + *pdist = total / sum1; + + numaDestroy(&na3); + return 0; +} + + +/*! + * \brief grayInterHistogramStats() + * + * \param[in] naa numaa with two or more 256-element histograms + * \param[in] wc half-width of the smoothing window + * \param[out] pnam [optional] mean values + * \param[out] pnams [optional] mean square values + * \param[out] pnav [optional] variances + * \param[out] pnarv [optional] rms deviations from the mean + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) The %naa has two or more 256-element numa histograms, which
+ *         are to be compared value-wise at each of the 256 gray levels.
+ *         The result are stats (mean, mean square, variance, root variance)
+ *         aggregated across the set of histograms, and each is output
+ *         as a 256 entry numa.  Think of these histograms as a matrix,
+ *         where each histogram is one row of the array.  The stats are
+ *         then aggregated column-wise, between the histograms.
+ *     (2) These stats are:
+ *            ~ average value:   (nam)
+ *            ~ average squared value:  (nams)
+ *            ~ variance: <(v - )*(v - )> =  - *  (nav)
+ *            ~ square-root of variance: (narv)
+ *         where the brackets < .. > indicate that the average value is
+ *         to be taken over each column of the array.
+ *     (3) The input histograms are optionally smoothed before these
+ *         statistical operations.
+ *     (4) The input histograms are normalized to a sum of 10000.  By
+ *         doing this, the resulting numbers are independent of the
+ *         number of samples used in building the individual histograms.
+ *     (5) A typical application is on a set of histograms from tiles
+ *         of an image, to distinguish between text/tables and photo
+ *         regions.  If the tiles are much larger than the text line
+ *         spacing, text/table regions typically have smaller variance
+ *         across tiles than photo regions.  For this application, it
+ *         may be useful to ignore values near white, which are large for
+ *         text and would magnify the variance due to variations in
+ *         illumination.  However, because the variance of a drawing or
+ *         a light photo can be similar to that of grayscale text, this
+ *         function is only a discriminator between darker photos/drawings
+ *         and light photos/text/line-graphics.
+ * 
+ */ +l_ok +grayInterHistogramStats(NUMAA *naa, + l_int32 wc, + NUMA **pnam, + NUMA **pnams, + NUMA **pnav, + NUMA **pnarv) +{ +l_int32 i, j, n, nn; +l_float32 **arrays; +l_float32 mean, var, rvar; +NUMA *na1, *na2, *na3, *na4; + + PROCNAME("grayInterHistogramStats"); + + if (pnam) *pnam = NULL; + if (pnams) *pnams = NULL; + if (pnav) *pnav = NULL; + if (pnarv) *pnarv = NULL; + if (!pnam && !pnams && !pnav && !pnarv) + return ERROR_INT("nothing requested", procName, 1); + if (!naa) + return ERROR_INT("naa not defined", procName, 1); + n = numaaGetCount(naa); + for (i = 0; i < n; i++) { + nn = numaaGetNumaCount(naa, i); + if (nn != 256) { + L_ERROR("%d numbers in numa[%d]\n", procName, nn, i); + return 1; + } + } + + if (pnam) *pnam = numaCreate(256); + if (pnams) *pnams = numaCreate(256); + if (pnav) *pnav = numaCreate(256); + if (pnarv) *pnarv = numaCreate(256); + + /* First, use mean smoothing, normalize each histogram, + * and save all results in a 2D matrix. */ + arrays = (l_float32 **)LEPT_CALLOC(n, sizeof(l_float32 *)); + for (i = 0; i < n; i++) { + na1 = numaaGetNuma(naa, i, L_CLONE); + na2 = numaWindowedMean(na1, wc); + na3 = numaNormalizeHistogram(na2, 10000.); + arrays[i] = numaGetFArray(na3, L_COPY); + numaDestroy(&na1); + numaDestroy(&na2); + numaDestroy(&na3); + } + + /* Get stats between histograms */ + for (j = 0; j < 256; j++) { + na4 = numaCreate(n); + for (i = 0; i < n; i++) { + numaAddNumber(na4, arrays[i][j]); + } + numaSimpleStats(na4, 0, -1, &mean, &var, &rvar); + if (pnam) numaAddNumber(*pnam, mean); + if (pnams) numaAddNumber(*pnams, mean * mean); + if (pnav) numaAddNumber(*pnav, var); + if (pnarv) numaAddNumber(*pnarv, rvar); + numaDestroy(&na4); + } + + for (i = 0; i < n; i++) + LEPT_FREE(arrays[i]); + LEPT_FREE(arrays); + return 0; +} + + +/*----------------------------------------------------------------------* + * Extrema finding * + *----------------------------------------------------------------------*/ +/*! + * \brief numaFindPeaks() + * + * \param[in] nas source numa + * \param[in] nmax max number of peaks to be found + * \param[in] fract1 min fraction of peak value + * \param[in] fract2 min slope + * \return peak na, or NULL on error. + * + *
+ * Notes:
+ *     (1) The returned na consists of sets of four numbers representing
+ *         the peak, in the following order:
+ *            left edge; peak center; right edge; normalized peak area
+ * 
+ */ +NUMA * +numaFindPeaks(NUMA *nas, + l_int32 nmax, + l_float32 fract1, + l_float32 fract2) +{ +l_int32 i, k, n, maxloc, lloc, rloc; +l_float32 fmaxval, sum, total, newtotal, val, lastval; +l_float32 peakfract; +NUMA *na, *napeak; + + PROCNAME("numaFindPeaks"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + numaGetSum(nas, &total); + + /* We munge this copy */ + if ((na = numaCopy(nas)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + if ((napeak = numaCreate(4 * nmax)) == NULL) { + numaDestroy(&na); + return (NUMA *)ERROR_PTR("napeak not made", procName, NULL); + } + + for (k = 0; k < nmax; k++) { + numaGetSum(na, &newtotal); + if (newtotal == 0.0) /* sanity check */ + break; + numaGetMax(na, &fmaxval, &maxloc); + sum = fmaxval; + lastval = fmaxval; + lloc = 0; + for (i = maxloc - 1; i >= 0; --i) { + numaGetFValue(na, i, &val); + if (val == 0.0) { + lloc = i + 1; + break; + } + if (val > fract1 * fmaxval) { + sum += val; + lastval = val; + continue; + } + if (lastval - val > fract2 * lastval) { + sum += val; + lastval = val; + continue; + } + lloc = i; + break; + } + lastval = fmaxval; + rloc = n - 1; + for (i = maxloc + 1; i < n; ++i) { + numaGetFValue(na, i, &val); + if (val == 0.0) { + rloc = i - 1; + break; + } + if (val > fract1 * fmaxval) { + sum += val; + lastval = val; + continue; + } + if (lastval - val > fract2 * lastval) { + sum += val; + lastval = val; + continue; + } + rloc = i; + break; + } + peakfract = sum / total; + numaAddNumber(napeak, lloc); + numaAddNumber(napeak, maxloc); + numaAddNumber(napeak, rloc); + numaAddNumber(napeak, peakfract); + + for (i = lloc; i <= rloc; i++) + numaSetValue(na, i, 0.0); + } + + numaDestroy(&na); + return napeak; +} + + +/*! + * \brief numaFindExtrema() + * + * \param[in] nas input values + * \param[in] delta relative amount to resolve peaks and valleys + * \param[out] pnav [optional] values of extrema + * \return nad (locations of extrema, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a sequence of extrema (peaks and valleys).
+ *      (2) The algorithm is analogous to that for determining
+ *          mountain peaks.  Suppose we have a local peak, with
+ *          bumps on the side.  Under what conditions can we consider
+ *          those 'bumps' to be actual peaks?  The answer: if the
+ *          bump is separated from the peak by a saddle that is at
+ *          least 500 feet below the bump.
+ *      (3) Operationally, suppose we are looking for a peak.
+ *          We are keeping the largest value we've seen since the
+ *          last valley, and are looking for a value that is delta
+ *          BELOW our current peak.  When we find such a value,
+ *          we label the peak, use the current value to label the
+ *          valley, and then do the same operation in reverse (looking
+ *          for a valley).
+ * 
+ */ +NUMA * +numaFindExtrema(NUMA *nas, + l_float32 delta, + NUMA **pnav) +{ +l_int32 i, n, found, loc, direction; +l_float32 startval, val, maxval, minval; +NUMA *nav, *nad; + + PROCNAME("numaFindExtrema"); + + if (pnav) *pnav = NULL; + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (delta < 0.0) + return (NUMA *)ERROR_PTR("delta < 0", procName, NULL); + + n = numaGetCount(nas); + nad = numaCreate(0); + nav = NULL; + if (pnav) { + nav = numaCreate(0); + *pnav = nav; + } + + /* We don't know if we'll find a peak or valley first, + * but use the first element of nas as the reference point. + * Break when we deviate by 'delta' from the first point. */ + numaGetFValue(nas, 0, &startval); + found = FALSE; + for (i = 1; i < n; i++) { + numaGetFValue(nas, i, &val); + if (L_ABS(val - startval) >= delta) { + found = TRUE; + break; + } + } + + if (!found) + return nad; /* it's empty */ + + /* Are we looking for a peak or a valley? */ + if (val > startval) { /* peak */ + direction = 1; + maxval = val; + } else { + direction = -1; + minval = val; + } + loc = i; + + /* Sweep through the rest of the array, recording alternating + * peak/valley extrema. */ + for (i = i + 1; i < n; i++) { + numaGetFValue(nas, i, &val); + if (direction == 1 && val > maxval ) { /* new local max */ + maxval = val; + loc = i; + } else if (direction == -1 && val < minval ) { /* new local min */ + minval = val; + loc = i; + } else if (direction == 1 && (maxval - val >= delta)) { + numaAddNumber(nad, loc); /* save the current max location */ + if (nav) numaAddNumber(nav, maxval); + direction = -1; /* reverse: start looking for a min */ + minval = val; + loc = i; /* current min location */ + } else if (direction == -1 && (val - minval >= delta)) { + numaAddNumber(nad, loc); /* save the current min location */ + if (nav) numaAddNumber(nav, minval); + direction = 1; /* reverse: start looking for a max */ + maxval = val; + loc = i; /* current max location */ + } + } + + /* Save the final extremum */ +/* numaAddNumber(nad, loc); */ + return nad; +} + + +/*! + * \brief numaCountReversals() + * + * \param[in] nas input values + * \param[in] minreversal relative amount to resolve peaks and valleys + * \param[out] pnr [optional] number of reversals + * \param[out] prd [optional] reversal density: reversals/length + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input numa is can be generated from pixExtractAlongLine().
+ *          If so, the x parameters can be used to find the reversal
+ *          frequency along a line.
+ *      (2) If the input numa was generated from a 1 bpp pix, the
+ *          values will be 0 and 1.  Use %minreversal == 1 to get
+ *          the number of pixel flips.  If the only values are 0 and 1,
+ *          but %minreversal > 1, set the reversal count to 0 and
+ *          issue a warning.
+ * 
+ */ +l_ok +numaCountReversals(NUMA *nas, + l_float32 minreversal, + l_int32 *pnr, + l_float32 *prd) +{ +l_int32 i, n, nr, ival, binvals; +l_int32 *ia; +l_float32 fval, delx, len; +NUMA *nat; + + PROCNAME("numaCountReversals"); + + if (pnr) *pnr = 0; + if (prd) *prd = 0.0; + if (!pnr && !prd) + return ERROR_INT("neither &nr nor &rd are defined", procName, 1); + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if ((n = numaGetCount(nas)) == 0) { + L_INFO("nas is empty\n", procName); + return 0; + } + if (minreversal < 0.0) + return ERROR_INT("minreversal < 0", procName, 1); + + /* Decide if the only values are 0 and 1 */ + binvals = TRUE; + for (i = 0; i < n; i++) { + numaGetFValue(nas, i, &fval); + if (fval != 0.0 && fval != 1.0) { + binvals = FALSE; + break; + } + } + + nr = 0; + if (binvals) { + if (minreversal > 1.0) { + L_WARNING("binary values but minreversal > 1\n", procName); + } else { + ia = numaGetIArray(nas); + ival = ia[0]; + for (i = 1; i < n; i++) { + if (ia[i] != ival) { + nr++; + ival = ia[i]; + } + } + LEPT_FREE(ia); + } + } else { + nat = numaFindExtrema(nas, minreversal, NULL); + nr = numaGetCount(nat); + numaDestroy(&nat); + } + if (pnr) *pnr = nr; + if (prd) { + numaGetParameters(nas, NULL, &delx); + len = delx * n; + *prd = (l_float32)nr / len; + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Threshold crossings and frequency analysis * + *----------------------------------------------------------------------*/ +/*! + * \brief numaSelectCrossingThreshold() + * + * \param[in] nax [optional] numa of abscissa values; can be NULL + * \param[in] nay signal + * \param[in] estthresh estimated pixel threshold for crossing: + * e.g., for images, white <--> black; typ. ~120 + * \param[out] pbestthresh robust estimate of threshold to use + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) When a valid threshold is used, the number of crossings is
+ *         a maximum, because none are missed.  If no threshold intersects
+ *         all the crossings, the crossings must be determined with
+ *         numaCrossingsByPeaks().
+ *     (2) %estthresh is an input estimate of the threshold that should
+ *         be used.  We compute the crossings with 41 thresholds
+ *         (20 below and 20 above).  There is a range in which the
+ *         number of crossings is a maximum.  Return a threshold
+ *         in the center of this stable plateau of crossings.
+ *         This can then be used with numaCrossingsByThreshold()
+ *         to get a good estimate of crossing locations.
+ * 
+ */ +l_ok +numaSelectCrossingThreshold(NUMA *nax, + NUMA *nay, + l_float32 estthresh, + l_float32 *pbestthresh) +{ +l_int32 i, inrun, istart, iend, maxstart, maxend, runlen, maxrunlen; +l_int32 val, maxval, nmax, count; +l_float32 thresh, fmaxval, fmodeval; +NUMA *nat, *nac; + + PROCNAME("numaSelectCrossingThreshold"); + + if (!pbestthresh) + return ERROR_INT("&bestthresh not defined", procName, 1); + *pbestthresh = 0.0; + if (!nay) + return ERROR_INT("nay not defined", procName, 1); + + /* Compute the number of crossings for different thresholds */ + nat = numaCreate(41); + for (i = 0; i < 41; i++) { + thresh = estthresh - 80.0 + 4.0 * i; + nac = numaCrossingsByThreshold(nax, nay, thresh); + numaAddNumber(nat, numaGetCount(nac)); + numaDestroy(&nac); + } + + /* Find the center of the plateau of max crossings, which + * extends from thresh[istart] to thresh[iend]. */ + numaGetMax(nat, &fmaxval, NULL); + maxval = (l_int32)fmaxval; + nmax = 0; + for (i = 0; i < 41; i++) { + numaGetIValue(nat, i, &val); + if (val == maxval) + nmax++; + } + if (nmax < 3) { /* likely accidental max; try the mode */ + numaGetMode(nat, &fmodeval, &count); + if (count > nmax && fmodeval > 0.5 * fmaxval) + maxval = (l_int32)fmodeval; /* use the mode */ + } + + inrun = FALSE; + iend = 40; + maxrunlen = 0, maxstart = 0, maxend = 0; + for (i = 0; i < 41; i++) { + numaGetIValue(nat, i, &val); + if (val == maxval) { + if (!inrun) { + istart = i; + inrun = TRUE; + } + continue; + } + if (inrun && (val != maxval)) { + iend = i - 1; + runlen = iend - istart + 1; + inrun = FALSE; + if (runlen > maxrunlen) { + maxstart = istart; + maxend = iend; + maxrunlen = runlen; + } + } + } + if (inrun) { + runlen = i - istart; + if (runlen > maxrunlen) { + maxstart = istart; + maxend = i - 1; + maxrunlen = runlen; + } + } + + *pbestthresh = estthresh - 80.0 + 2.0 * (l_float32)(maxstart + maxend); + +#if DEBUG_CROSSINGS + fprintf(stderr, "\nCrossings attain a maximum at %d thresholds, between:\n" + " thresh[%d] = %5.1f and thresh[%d] = %5.1f\n", + nmax, maxstart, estthresh - 80.0 + 4.0 * maxstart, + maxend, estthresh - 80.0 + 4.0 * maxend); + fprintf(stderr, "The best choice: %5.1f\n", *pbestthresh); + fprintf(stderr, "Number of crossings at the 41 thresholds:"); + numaWriteStream(stderr, nat); +#endif /* DEBUG_CROSSINGS */ + + numaDestroy(&nat); + return 0; +} + + +/*! + * \brief numaCrossingsByThreshold() + * + * \param[in] nax [optional] numa of abscissa values; can be NULL + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] thresh threshold value for nay + * \return nad abscissa pts at threshold, or NULL on error + * + *
+ * Notes:
+ *      (1) If nax == NULL, we use startx and delx from nay to compute
+ *          the crossing values in nad.
+ * 
+ */ +NUMA * +numaCrossingsByThreshold(NUMA *nax, + NUMA *nay, + l_float32 thresh) +{ +l_int32 i, n; +l_float32 startx, delx; +l_float32 xval1, xval2, yval1, yval2, delta1, delta2, crossval, fract; +NUMA *nad; + + PROCNAME("numaCrossingsByThreshold"); + + if (!nay) + return (NUMA *)ERROR_PTR("nay not defined", procName, NULL); + n = numaGetCount(nay); + + if (nax && (numaGetCount(nax) != n)) + return (NUMA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); + + nad = numaCreate(0); + numaGetFValue(nay, 0, &yval1); + numaGetParameters(nay, &startx, &delx); + if (nax) + numaGetFValue(nax, 0, &xval1); + else + xval1 = startx; + for (i = 1; i < n; i++) { + numaGetFValue(nay, i, &yval2); + if (nax) + numaGetFValue(nax, i, &xval2); + else + xval2 = startx + i * delx; + delta1 = yval1 - thresh; + delta2 = yval2 - thresh; + if (delta1 == 0.0) { + numaAddNumber(nad, xval1); + } else if (delta2 == 0.0) { + numaAddNumber(nad, xval2); + } else if (delta1 * delta2 < 0.0) { /* crossing */ + fract = L_ABS(delta1) / L_ABS(yval1 - yval2); + crossval = xval1 + fract * (xval2 - xval1); + numaAddNumber(nad, crossval); + } + xval1 = xval2; + yval1 = yval2; + } + + return nad; +} + + +/*! + * \brief numaCrossingsByPeaks() + * + * \param[in] nax [optional] numa of abscissa values + * \param[in] nay numa of ordinate values, corresponding to nax + * \param[in] delta parameter used to identify when a new peak can be found + * \return nad abscissa pts at threshold, or NULL on error + * + *
+ * Notes:
+ *      (1) If nax == NULL, we use startx and delx from nay to compute
+ *          the crossing values in nad.
+ * 
+ */ +NUMA * +numaCrossingsByPeaks(NUMA *nax, + NUMA *nay, + l_float32 delta) +{ +l_int32 i, j, n, np, previndex, curindex; +l_float32 startx, delx; +l_float32 xval1, xval2, yval1, yval2, delta1, delta2; +l_float32 prevval, curval, thresh, crossval, fract; +NUMA *nap, *nad; + + PROCNAME("numaCrossingsByPeaks"); + + if (!nay) + return (NUMA *)ERROR_PTR("nay not defined", procName, NULL); + + n = numaGetCount(nay); + if (nax && (numaGetCount(nax) != n)) + return (NUMA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); + + /* Find the extrema. Also add last point in nay to get + * the last transition (from the last peak to the end). + * The number of crossings is 1 more than the number of extrema. */ + nap = numaFindExtrema(nay, delta, NULL); + numaAddNumber(nap, n - 1); + np = numaGetCount(nap); + L_INFO("Number of crossings: %d\n", procName, np); + + /* Do all computation in index units of nax or the delx of nay */ + nad = numaCreate(np); /* output crossing locations, in nax units */ + previndex = 0; /* prime the search with 1st point */ + numaGetFValue(nay, 0, &prevval); /* prime the search with 1st point */ + numaGetParameters(nay, &startx, &delx); + for (i = 0; i < np; i++) { + numaGetIValue(nap, i, &curindex); + numaGetFValue(nay, curindex, &curval); + thresh = (prevval + curval) / 2.0; + if (nax) + numaGetFValue(nax, previndex, &xval1); + else + xval1 = startx + previndex * delx; + numaGetFValue(nay, previndex, &yval1); + for (j = previndex + 1; j <= curindex; j++) { + if (nax) + numaGetFValue(nax, j, &xval2); + else + xval2 = startx + j * delx; + numaGetFValue(nay, j, &yval2); + delta1 = yval1 - thresh; + delta2 = yval2 - thresh; + if (delta1 == 0.0) { + numaAddNumber(nad, xval1); + break; + } else if (delta2 == 0.0) { + numaAddNumber(nad, xval2); + break; + } else if (delta1 * delta2 < 0.0) { /* crossing */ + fract = L_ABS(delta1) / L_ABS(yval1 - yval2); + crossval = xval1 + fract * (xval2 - xval1); + numaAddNumber(nad, crossval); + break; + } + xval1 = xval2; + yval1 = yval2; + } + previndex = curindex; + prevval = curval; + } + + numaDestroy(&nap); + return nad; +} + + +/*! + * \brief numaEvalBestHaarParameters() + * + * \param[in] nas numa of non-negative signal values + * \param[in] relweight relative weight of (-1 comb) / (+1 comb) + * contributions to the 'convolution'. In effect, + * the convolution kernel is a comb consisting of + * alternating +1 and -weight. + * \param[in] nwidth number of widths to consider + * \param[in] nshift number of shifts to consider for each width + * \param[in] minwidth smallest width to consider + * \param[in] maxwidth largest width to consider + * \param[out] pbestwidth width giving largest score + * \param[out] pbestshift shift giving largest score + * \param[out] pbestscore [optional] convolution with "Haar"-like comb + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a linear sweep of widths, evaluating at %nshift
+ *          shifts for each width, computing the score from a convolution
+ *          with a long comb, and finding the (width, shift) pair that
+ *          gives the maximum score.  The best width is the "half-wavelength"
+ *          of the signal.
+ *      (2) The convolving function is a comb of alternating values
+ *          +1 and -1 * relweight, separated by the width and phased by
+ *          the shift.  This is similar to a Haar transform, except
+ *          there the convolution is performed with a square wave.
+ *      (3) The function is useful for finding the line spacing
+ *          and strength of line signal from pixel sum projections.
+ *      (4) The score is normalized to the size of nas divided by
+ *          the number of half-widths.  For image applications, the input is
+ *          typically an array of pixel projections, so one should
+ *          normalize by dividing the score by the image width in the
+ *          pixel projection direction.
+ * 
+ */ +l_ok +numaEvalBestHaarParameters(NUMA *nas, + l_float32 relweight, + l_int32 nwidth, + l_int32 nshift, + l_float32 minwidth, + l_float32 maxwidth, + l_float32 *pbestwidth, + l_float32 *pbestshift, + l_float32 *pbestscore) +{ +l_int32 i, j; +l_float32 delwidth, delshift, width, shift, score; +l_float32 bestwidth, bestshift, bestscore; + + PROCNAME("numaEvalBestHaarParameters"); + + if (pbestscore) *pbestscore = 0.0; + if (pbestwidth) *pbestwidth = 0.0; + if (pbestshift) *pbestshift = 0.0; + if (!pbestwidth || !pbestshift) + return ERROR_INT("&bestwidth and &bestshift not defined", procName, 1); + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + + bestscore = bestwidth = bestshift = 0.0; + delwidth = (maxwidth - minwidth) / (nwidth - 1.0); + for (i = 0; i < nwidth; i++) { + width = minwidth + delwidth * i; + delshift = width / (l_float32)(nshift); + for (j = 0; j < nshift; j++) { + shift = j * delshift; + numaEvalHaarSum(nas, width, shift, relweight, &score); + if (score > bestscore) { + bestscore = score; + bestwidth = width; + bestshift = shift; +#if DEBUG_FREQUENCY + fprintf(stderr, "width = %7.3f, shift = %7.3f, score = %7.3f\n", + width, shift, score); +#endif /* DEBUG_FREQUENCY */ + } + } + } + + *pbestwidth = bestwidth; + *pbestshift = bestshift; + if (pbestscore) + *pbestscore = bestscore; + return 0; +} + + +/*! + * \brief numaEvalHaarSum() + * + * \param[in] nas numa of non-negative signal values + * \param[in] width distance between +1 and -1 in convolution comb + * \param[in] shift phase of the comb: location of first +1 + * \param[in] relweight relative weight of (-1 comb) / (+1 comb) + * contributions to the 'convolution'. In effect, + * the convolution kernel is a comb consisting of + * alternating +1 and -weight. + * \param[out] pscore convolution with "Haar"-like comb + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a convolution with a comb of alternating values
+ *          +1 and -relweight, separated by the width and phased by the shift.
+ *          This is similar to a Haar transform, except that for Haar,
+ *            (1) the convolution kernel is symmetric about 0, so the
+ *                relweight is 1.0, and
+ *            (2) the convolution is performed with a square wave.
+ *      (2) The score is normalized to the size of nas divided by
+ *          twice the "width".  For image applications, the input is
+ *          typically an array of pixel projections, so one should
+ *          normalize by dividing the score by the image width in the
+ *          pixel projection direction.
+ *      (3) To get a Haar-like result, use relweight = 1.0.  For detecting
+ *          signals where you expect every other sample to be close to
+ *          zero, as with barcodes or filtered text lines, you can
+ *          use relweight > 1.0.
+ * 
+ */ +l_ok +numaEvalHaarSum(NUMA *nas, + l_float32 width, + l_float32 shift, + l_float32 relweight, + l_float32 *pscore) +{ +l_int32 i, n, nsamp, index; +l_float32 score, weight, val; + + PROCNAME("numaEvalHaarSum"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = 0.0; + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if ((n = numaGetCount(nas)) < 2 * width) + return ERROR_INT("nas size too small", procName, 1); + + score = 0.0; + nsamp = (l_int32)((n - shift) / width); + for (i = 0; i < nsamp; i++) { + index = (l_int32)(shift + i * width); + weight = (i % 2) ? 1.0 : -1.0 * relweight; + numaGetFValue(nas, index, &val); + score += weight * val; + } + + *pscore = 2.0 * width * score / (l_float32)n; + return 0; +} + + +/*----------------------------------------------------------------------* + * Generating numbers in a range under constraints * + *----------------------------------------------------------------------*/ +/*! + * \brief genConstrainedNumaInRange() + * + * \param[in] first first number to choose; >= 0 + * \param[in] last biggest possible number to reach; >= first + * \param[in] nmax maximum number of numbers to select; > 0 + * \param[in] use_pairs 1 = select pairs of adjacent numbers; + * 0 = select individual numbers + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) Selection is made uniformly in the range.  This can be used
+ *         to select pages distributed as uniformly as possible
+ *         through a book, where you are constrained to:
+ *          ~ choose between [first, ... biggest],
+ *          ~ choose no more than nmax numbers, and
+ *         and you have the option of requiring pairs of adjacent numbers.
+ * 
+ */ +NUMA * +genConstrainedNumaInRange(l_int32 first, + l_int32 last, + l_int32 nmax, + l_int32 use_pairs) +{ +l_int32 i, nsets, val; +l_float32 delta; +NUMA *na; + + PROCNAME("genConstrainedNumaInRange"); + + first = L_MAX(0, first); + if (last < first) + return (NUMA *)ERROR_PTR("last < first!", procName, NULL); + if (nmax < 1) + return (NUMA *)ERROR_PTR("nmax < 1!", procName, NULL); + + nsets = L_MIN(nmax, last - first + 1); + if (use_pairs == 1) + nsets = nsets / 2; + if (nsets == 0) + return (NUMA *)ERROR_PTR("nsets == 0", procName, NULL); + + /* Select delta so that selection covers the full range if possible */ + if (nsets == 1) { + delta = 0.0; + } else { + if (use_pairs == 0) + delta = (l_float32)(last - first) / (nsets - 1); + else + delta = (l_float32)(last - first - 1) / (nsets - 1); + } + + na = numaCreate(nsets); + for (i = 0; i < nsets; i++) { + val = (l_int32)(first + i * delta + 0.5); + numaAddNumber(na, val); + if (use_pairs == 1) + numaAddNumber(na, val + 1); + } + + return na; +} diff --git a/3rdparty/hgOCR/leptonica/pageseg.c b/3rdparty/hgOCR/leptonica/pageseg.c new file mode 100644 index 00000000..43164507 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pageseg.c @@ -0,0 +1,2360 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pageseg.c + *
+ *
+ *      Top level page segmentation
+ *          l_int32   pixGetRegionsBinary()
+ *
+ *      Halftone region extraction
+ *          PIX      *pixGenHalftoneMask()    **Deprecated wrapper**
+ *          PIX      *pixGenerateHalftoneMask()
+ *
+ *      Textline extraction
+ *          PIX      *pixGenTextlineMask()
+ *
+ *      Textblock extraction
+ *          PIX      *pixGenTextblockMask()
+ *
+ *      Location of page foreground
+ *          PIX      *pixFindPageForeground()
+ *
+ *      Extraction of characters from image with only text
+ *          l_int32   pixSplitIntoCharacters()
+ *          BOXA     *pixSplitComponentWithProfile()
+ *
+ *      Extraction of lines of text
+ *          PIXA     *pixExtractTextlines()
+ *          PIXA     *pixExtractRawTextlines()
+ *
+ *      How many text columns
+ *          l_int32   pixCountTextColumns()
+ *
+ *      Decision: text vs photo
+ *          l_int32   pixDecideIfText()
+ *          l_int32   pixFindThreshFgExtent()
+ *
+ *      Decision: table vs text
+ *          l_int32   pixDecideIfTable()
+ *          Pix      *pixPrepare1bpp()
+ *
+ *      Estimate the grayscale background value
+ *          l_int32   pixEstimateBackground()
+ *
+ *      Largest white or black rectangles in an image
+ *          l_int32   pixFindLargeRectangles()
+ *          l_int32   pixFindLargestRectangle()
+ *
+ *      Generate rectangle inside connected component
+ *          BOX      *pixFindRectangleInCC()
+ * 
+ */ + +#include "allheaders.h" +#include "math.h" + + /* These functions are not intended to work on very low-res images */ +static const l_int32 MinWidth = 100; +static const l_int32 MinHeight = 100; + +/*------------------------------------------------------------------* + * Top level page segmentation * + *------------------------------------------------------------------*/ +/*! + * \brief pixGetRegionsBinary() + * + * \param[in] pixs 1 bpp, assumed to be 300 to 400 ppi + * \param[out] ppixhm [optional] halftone mask + * \param[out] ppixtm [optional] textline mask + * \param[out] ppixtb [optional] textblock mask + * \param[in] pixadb input for collecting debug pix; use NULL to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is best to deskew the image before segmenting.
+ *      (2) Passing in %pixadb enables debug output.
+ * 
+ */ +l_ok +pixGetRegionsBinary(PIX *pixs, + PIX **ppixhm, + PIX **ppixtm, + PIX **ppixtb, + PIXA *pixadb) +{ +l_int32 w, h, htfound, tlfound; +PIX *pixr, *pix1, *pix2; +PIX *pixtext; /* text pixels only */ +PIX *pixhm2; /* halftone mask; 2x reduction */ +PIX *pixhm; /* halftone mask; */ +PIX *pixtm2; /* textline mask; 2x reduction */ +PIX *pixtm; /* textline mask */ +PIX *pixvws; /* vertical white space mask */ +PIX *pixtb2; /* textblock mask; 2x reduction */ +PIX *pixtbf2; /* textblock mask; 2x reduction; small comps filtered */ +PIX *pixtb; /* textblock mask */ + + PROCNAME("pixGetRegionsBinary"); + + if (ppixhm) *ppixhm = NULL; + if (ppixtm) *ppixtm = NULL; + if (ppixtb) *ppixtb = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinWidth || h < MinHeight) { + L_ERROR("pix too small: w = %d, h = %d\n", procName, w, h); + return 1; + } + + /* 2x reduce, to 150 -200 ppi */ + pixr = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); + if (pixadb) pixaAddPix(pixadb, pixr, L_COPY); + + /* Get the halftone mask */ + pixhm2 = pixGenerateHalftoneMask(pixr, &pixtext, &htfound, pixadb); + + /* Get the textline mask from the text pixels */ + pixtm2 = pixGenTextlineMask(pixtext, &pixvws, &tlfound, pixadb); + + /* Get the textblock mask from the textline mask */ + pixtb2 = pixGenTextblockMask(pixtm2, pixvws, pixadb); + pixDestroy(&pixr); + pixDestroy(&pixtext); + pixDestroy(&pixvws); + + /* Remove small components from the mask, where a small + * component is defined as one with both width and height < 60 */ + pixtbf2 = NULL; + if (pixtb2) { + pixtbf2 = pixSelectBySize(pixtb2, 60, 60, 4, L_SELECT_IF_EITHER, + L_SELECT_IF_GTE, NULL); + pixDestroy(&pixtb2); + if (pixadb) pixaAddPix(pixadb, pixtbf2, L_COPY); + } + + /* Expand all masks to full resolution, and do filling or + * small dilations for better coverage. */ + pixhm = pixExpandReplicate(pixhm2, 2); + pix1 = pixSeedfillBinary(NULL, pixhm, pixs, 8); + pixOr(pixhm, pixhm, pix1); + pixDestroy(&pixhm2); + pixDestroy(&pix1); + if (pixadb) pixaAddPix(pixadb, pixhm, L_COPY); + + pix1 = pixExpandReplicate(pixtm2, 2); + pixtm = pixDilateBrick(NULL, pix1, 3, 3); + pixDestroy(&pixtm2); + pixDestroy(&pix1); + if (pixadb) pixaAddPix(pixadb, pixtm, L_COPY); + + if (pixtbf2) { + pix1 = pixExpandReplicate(pixtbf2, 2); + pixtb = pixDilateBrick(NULL, pix1, 3, 3); + pixDestroy(&pixtbf2); + pixDestroy(&pix1); + if (pixadb) pixaAddPix(pixadb, pixtb, L_COPY); + } else { + pixtb = pixCreateTemplate(pixs); /* empty mask */ + } + + /* Debug: identify objects that are neither text nor halftone image */ + if (pixadb) { + pix1 = pixSubtract(NULL, pixs, pixtm); /* remove text pixels */ + pix2 = pixSubtract(NULL, pix1, pixhm); /* remove halftone pixels */ + pixaAddPix(pixadb, pix2, L_INSERT); + pixDestroy(&pix1); + } + + /* Debug: display textline components with random colors */ + if (pixadb) { + l_int32 w, h; + BOXA *boxa; + PIXA *pixa; + boxa = pixConnComp(pixtm, &pixa, 8); + pixGetDimensions(pixtm, &w, &h, NULL); + pix1 = pixaDisplayRandomCmap(pixa, w, h); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + } + + /* Debug: identify the outlines of each textblock */ + if (pixadb) { + PIXCMAP *cmap; + PTAA *ptaa; + ptaa = pixGetOuterBordersPtaa(pixtb); + lept_mkdir("lept/pageseg"); + ptaaWriteDebug("/tmp/lept/pageseg/tb_outlines.ptaa", ptaa, 1); + pix1 = pixRenderRandomCmapPtaa(pixtb, ptaa, 1, 16, 1); + cmap = pixGetColormap(pix1); + pixcmapResetColor(cmap, 0, 130, 130, 130); + pixaAddPix(pixadb, pix1, L_INSERT); + ptaaDestroy(&ptaa); + } + + /* Debug: get b.b. for all mask components */ + if (pixadb) { + BOXA *bahm, *batm, *batb; + bahm = pixConnComp(pixhm, NULL, 4); + batm = pixConnComp(pixtm, NULL, 4); + batb = pixConnComp(pixtb, NULL, 4); + boxaWriteDebug("/tmp/lept/pageseg/htmask.boxa", bahm); + boxaWriteDebug("/tmp/lept/pageseg/textmask.boxa", batm); + boxaWriteDebug("/tmp/lept/pageseg/textblock.boxa", batb); + boxaDestroy(&bahm); + boxaDestroy(&batm); + boxaDestroy(&batb); + } + if (pixadb) { + pixaConvertToPdf(pixadb, 0, 1.0, 0, 0, "Debug page segmentation", + "/tmp/lept/pageseg/debug.pdf"); + L_INFO("Writing debug pdf to /tmp/lept/pageseg/debug.pdf\n", procName); + } + + if (ppixhm) + *ppixhm = pixhm; + else + pixDestroy(&pixhm); + if (ppixtm) + *ppixtm = pixtm; + else + pixDestroy(&pixtm); + if (ppixtb) + *ppixtb = pixtb; + else + pixDestroy(&pixtb); + + return 0; +} + + +/*------------------------------------------------------------------* + * Halftone region extraction * + *------------------------------------------------------------------*/ +/*! + * \brief pixGenHalftoneMask() + * + *
+ * Deprecated:
+ *   This wrapper avoids an ABI change with tesseract 3.0.4.
+ *   It should be removed when we no longer need to support 3.0.4.
+ *   The debug parameter is ignored (assumed 0).
+ * 
+ */ +PIX * +pixGenHalftoneMask(PIX *pixs, + PIX **ppixtext, + l_int32 *phtfound, + l_int32 debug) +{ + return pixGenerateHalftoneMask(pixs, ppixtext, phtfound, NULL); +} + + +/*! + * \brief pixGenerateHalftoneMask() + * + * \param[in] pixs 1 bpp, assumed to be 150 to 200 ppi + * \param[out] ppixtext [optional] text part of pixs + * \param[out] phtfound [optional] 1 if the mask is not empty + * \param[in] pixadb input for collecting debug pix; use NULL to skip + * \return pixd halftone mask, or NULL on error + * + *
+ * Notes:
+ *      (1) This is not intended to work on small thumbnails.  The
+ *          dimensions of pixs must be at least MinWidth x MinHeight.
+ * 
+ */ +PIX * +pixGenerateHalftoneMask(PIX *pixs, + PIX **ppixtext, + l_int32 *phtfound, + PIXA *pixadb) +{ +l_int32 w, h, empty; +PIX *pix1, *pix2, *pixhs, *pixhm, *pixd; + + PROCNAME("pixGenerateHalftoneMask"); + + if (ppixtext) *ppixtext = NULL; + if (phtfound) *phtfound = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinWidth || h < MinHeight) { + L_ERROR("pix too small: w = %d, h = %d\n", procName, w, h); + return NULL; + } + + /* Compute seed for halftone parts at 8x reduction */ + pix1 = pixReduceRankBinaryCascade(pixs, 4, 4, 3, 0); + pix2 = pixOpenBrick(NULL, pix1, 5, 5); + pixhs = pixExpandReplicate(pix2, 8); /* back to 2x reduction */ + pixDestroy(&pix1); + pixDestroy(&pix2); + if (pixadb) pixaAddPix(pixadb, pixhs, L_COPY); + + /* Compute mask for connected regions */ + pixhm = pixCloseSafeBrick(NULL, pixs, 4, 4); + if (pixadb) pixaAddPix(pixadb, pixhm, L_COPY); + + /* Fill seed into mask to get halftone mask */ + pixd = pixSeedfillBinary(NULL, pixhs, pixhm, 4); + +#if 0 + /* Moderate opening to remove thin lines, etc. */ + pixOpenBrick(pixd, pixd, 10, 10); +#endif + + /* Check if mask is empty */ + pixZero(pixd, &empty); + if (phtfound && !empty) + *phtfound = 1; + + /* Optionally, get all pixels that are not under the halftone mask */ + if (ppixtext) { + if (empty) + *ppixtext = pixCopy(NULL, pixs); + else + *ppixtext = pixSubtract(NULL, pixs, pixd); + if (pixadb) pixaAddPix(pixadb, *ppixtext, L_COPY); + } + + pixDestroy(&pixhs); + pixDestroy(&pixhm); + return pixd; +} + + +/*------------------------------------------------------------------* + * Textline extraction * + *------------------------------------------------------------------*/ +/*! + * \brief pixGenTextlineMask() + * + * \param[in] pixs 1 bpp, assumed to be 150 to 200 ppi + * \param[out] ppixvws vertical whitespace mask + * \param[out] ptlfound [optional] 1 if the mask is not empty + * \param[in] pixadb input for collecting debug pix; use NULL to skip + * \return pixd textline mask, or NULL on error + * + *
+ * Notes:
+ *      (1) The input pixs should be deskewed.
+ *      (2) pixs should have no halftone pixels.
+ *      (3) This is not intended to work on small thumbnails.  The
+ *          dimensions of pixs must be at least MinWidth x MinHeight.
+ *      (4) Both the input image and the returned textline mask
+ *          are at the same resolution.
+ * 
+ */ +PIX * +pixGenTextlineMask(PIX *pixs, + PIX **ppixvws, + l_int32 *ptlfound, + PIXA *pixadb) +{ +l_int32 w, h, empty; +PIX *pix1, *pix2, *pixvws, *pixd; + + PROCNAME("pixGenTextlineMask"); + + if (ptlfound) *ptlfound = 0; + if (!ppixvws) + return (PIX *)ERROR_PTR("&pixvws not defined", procName, NULL); + *ppixvws = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinWidth || h < MinHeight) { + L_ERROR("pix too small: w = %d, h = %d\n", procName, w, h); + return NULL; + } + + /* First we need a vertical whitespace mask. Invert the image. */ + pix1 = pixInvert(NULL, pixs); + + /* The whitespace mask will break textlines where there + * is a large amount of white space below or above. + * This can be prevented by identifying regions of the + * inverted image that have large horizontal extent (bigger than + * the separation between columns) and significant + * vertical extent (bigger than the separation between + * textlines), and subtracting this from the bg. */ + pix2 = pixMorphCompSequence(pix1, "o80.60", 0); + pixSubtract(pix1, pix1, pix2); + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + pixDestroy(&pix2); + + /* Identify vertical whitespace by opening the remaining bg. + * o5.1 removes thin vertical bg lines and o1.200 extracts + * long vertical bg lines. */ + pixvws = pixMorphCompSequence(pix1, "o5.1 + o1.200", 0); + *ppixvws = pixvws; + if (pixadb) pixaAddPix(pixadb, pixvws, L_COPY); + pixDestroy(&pix1); + + /* Three steps to getting text line mask: + * (1) close the characters and words in the textlines + * (2) open the vertical whitespace corridors back up + * (3) small opening to remove noise */ + pix1 = pixMorphSequence(pixs, "c30.1", 0); + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + pixd = pixSubtract(NULL, pix1, pixvws); + pixOpenBrick(pixd, pixd, 3, 3); + if (pixadb) pixaAddPix(pixadb, pixd, L_COPY); + pixDestroy(&pix1); + + /* Check if text line mask is empty */ + if (ptlfound) { + pixZero(pixd, &empty); + if (!empty) + *ptlfound = 1; + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Textblock extraction * + *------------------------------------------------------------------*/ +/*! + * \brief pixGenTextblockMask() + * + * \param[in] pixs 1 bpp, textline mask, assumed to be 150 to 200 ppi + * \param[in] pixvws vertical white space mask + * \param[in] pixadb input for collecting debug pix; use NULL to skip + * \return pixd textblock mask, or NULL if empty or on error + * + *
+ * Notes:
+ *      (1) Both the input masks (textline and vertical white space) and
+ *          the returned textblock mask are at the same resolution.
+ *      (2) This is not intended to work on small thumbnails.  The
+ *          dimensions of pixs must be at least MinWidth x MinHeight.
+ *      (3) The result is somewhat noisy, in that small "blocks" of
+ *          text may be included.  These can be removed by post-processing,
+ *          using, e.g.,
+ *             pixSelectBySize(pix, 60, 60, 4, L_SELECT_IF_EITHER,
+ *                             L_SELECT_IF_GTE, NULL);
+ * 
+ */ +PIX * +pixGenTextblockMask(PIX *pixs, + PIX *pixvws, + PIXA *pixadb) +{ +l_int32 w, h, empty; +PIX *pix1, *pix2, *pix3, *pixd; + + PROCNAME("pixGenTextblockMask"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinWidth || h < MinHeight) { + L_ERROR("pix too small: w = %d, h = %d\n", procName, w, h); + return NULL; + } + if (!pixvws) + return (PIX *)ERROR_PTR("pixvws not defined", procName, NULL); + + /* Join pixels vertically to make a textblock mask */ + pix1 = pixMorphSequence(pixs, "c1.10 + o4.1", 0); + pixZero(pix1, &empty); + if (empty) { + pixDestroy(&pix1); + L_INFO("no fg pixels in textblock mask\n", procName); + return NULL; + } + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + + /* Solidify the textblock mask and remove noise: + * (1) For each cc, close the blocks and dilate slightly + * to form a solid mask. + * (2) Small horizontal closing between components. + * (3) Open the white space between columns, again. + * (4) Remove small components. */ + pix2 = pixMorphSequenceByComponent(pix1, "c30.30 + d3.3", 8, 0, 0, NULL); + pixCloseSafeBrick(pix2, pix2, 10, 1); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + pix3 = pixSubtract(NULL, pix2, pixvws); + if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); + pixd = pixSelectBySize(pix3, 25, 5, 8, L_SELECT_IF_BOTH, + L_SELECT_IF_GTE, NULL); + if (pixadb) pixaAddPix(pixadb, pixd, L_COPY); + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + return pixd; +} + + +/*------------------------------------------------------------------* + * Location of page foreground * + *------------------------------------------------------------------*/ +/*! + * \brief pixFindPageForeground() + * + * \param[in] pixs full resolution (any type or depth + * \param[in] threshold for binarization; typically about 128 + * \param[in] mindist min distance of text from border to allow + * cleaning near border; at 2x reduction, this + * should be larger than 50; typically about 70 + * \param[in] erasedist when conditions are satisfied, erase anything + * within this distance of the edge; + * typically 20-30 at 2x reduction + * \param[in] showmorph debug: set to a negative integer to show steps + * in generating masks; this is typically used + * for debugging region extraction + * \param[in] pixac debug: allocate outside and pass this in to + * accumulate results of each call to this function, + * which can be displayed in a mosaic or a pdf. + * \return box region including foreground, with some pixel noise + * removed, or NULL if not found + * + *
+ * Notes:
+ *      (1) This doesn't simply crop to the fg.  It attempts to remove
+ *          pixel noise and junk at the edge of the image before cropping.
+ *          The input %threshold is used if pixs is not 1 bpp.
+ *      (2) This is not intended to work on small thumbnails.  The
+ *          dimensions of pixs must be at least MinWidth x MinHeight.
+ *      (3) Debug: set showmorph to display the intermediate image in
+ *          the morphological operations on this page.
+ *      (4) Debug: to get pdf output of results when called repeatedly,
+ *          call with an existing pixac, which will add an image of this page,
+ *          with the fg outlined.  If no foreground is found, there is
+ *          no output for this page image.
+ * 
+ */ +BOX * +pixFindPageForeground(PIX *pixs, + l_int32 threshold, + l_int32 mindist, + l_int32 erasedist, + l_int32 showmorph, + PIXAC *pixac) +{ +l_int32 flag, nbox, intersects; +l_int32 w, h, bx, by, bw, bh, left, right, top, bottom; +PIX *pixb, *pixb2, *pixseed, *pixsf, *pixm, *pix1, *pixg2; +BOX *box, *boxfg, *boxin, *boxd; +BOXA *ba1, *ba2; + + PROCNAME("pixFindPageForeground"); + + if (!pixs) + return (BOX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (w < MinWidth || h < MinHeight) { + L_ERROR("pix too small: w = %d, h = %d\n", procName, w, h); + return NULL; + } + + /* Binarize, downscale by 0.5, remove the noise to generate a seed, + * and do a seedfill back from the seed into those 8-connected + * components of the binarized image for which there was at least + * one seed pixel. Also clear out any components that are within + * 10 pixels of the edge at 2x reduction. */ + flag = (showmorph) ? 100 : 0; + pixb = pixConvertTo1(pixs, threshold); + pixb2 = pixScale(pixb, 0.5, 0.5); + pixseed = pixMorphSequence(pixb2, "o1.2 + c9.9 + o3.3", flag); + pix1 = pixMorphSequence(pixb2, "o50.1", 0); + pixOr(pixseed, pixseed, pix1); + pixDestroy(&pix1); + pix1 = pixMorphSequence(pixb2, "o1.50", 0); + pixOr(pixseed, pixseed, pix1); + pixDestroy(&pix1); + pixsf = pixSeedfillBinary(NULL, pixseed, pixb2, 8); + pixSetOrClearBorder(pixsf, 10, 10, 10, 10, PIX_SET); + pixm = pixRemoveBorderConnComps(pixsf, 8); + + /* Now, where is the main block of text? We want to remove noise near + * the edge of the image, but to do that, we have to be convinced that + * (1) there is noise and (2) it is far enough from the text block + * and close enough to the edge. For each edge, if the block + * is more than mindist from that edge, then clean 'erasedist' + * pixels from the edge. */ + pix1 = pixMorphSequence(pixm, "c50.50", flag); + ba1 = pixConnComp(pix1, NULL, 8); + ba2 = boxaSort(ba1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); + pixGetDimensions(pix1, &w, &h, NULL); + nbox = boxaGetCount(ba2); + if (nbox > 1) { + box = boxaGetBox(ba2, 0, L_CLONE); + boxGetGeometry(box, &bx, &by, &bw, &bh); + left = (bx > mindist) ? erasedist : 0; + right = (w - bx - bw > mindist) ? erasedist : 0; + top = (by > mindist) ? erasedist : 0; + bottom = (h - by - bh > mindist) ? erasedist : 0; + pixSetOrClearBorder(pixm, left, right, top, bottom, PIX_CLR); + boxDestroy(&box); + } + pixDestroy(&pix1); + boxaDestroy(&ba1); + boxaDestroy(&ba2); + + /* Locate the foreground region; don't bother cropping */ + pixClipToForeground(pixm, NULL, &boxfg); + + /* Sanity check the fg region. Make sure it's not confined + * to a thin boundary on the left and right sides of the image, + * in which case it is likely to be noise. */ + if (boxfg) { + boxin = boxCreate(0.1 * w, 0, 0.8 * w, h); + boxIntersects(boxfg, boxin, &intersects); + boxDestroy(&boxin); + if (!intersects) boxDestroy(&boxfg); + } + + boxd = NULL; + if (boxfg) { + boxAdjustSides(boxfg, boxfg, -2, 2, -2, 2); /* tiny expansion */ + boxd = boxTransform(boxfg, 0, 0, 2.0, 2.0); + + /* Save the debug image showing the box for this page */ + if (pixac) { + pixg2 = pixConvert1To4Cmap(pixb); + pixRenderBoxArb(pixg2, boxd, 3, 255, 0, 0); + pixacompAddPix(pixac, pixg2, IFF_DEFAULT); + pixDestroy(&pixg2); + } + } + + pixDestroy(&pixb); + pixDestroy(&pixb2); + pixDestroy(&pixseed); + pixDestroy(&pixsf); + pixDestroy(&pixm); + boxDestroy(&boxfg); + return boxd; +} + + +/*------------------------------------------------------------------* + * Extraction of characters from image with only text * + *------------------------------------------------------------------*/ +/*! + * \brief pixSplitIntoCharacters() + * + * \param[in] pixs 1 bpp, contains only deskewed text + * \param[in] minw min component width for initial filtering; typ. 4 + * \param[in] minh min component height for initial filtering; typ. 4 + * \param[out] pboxa [optional] character bounding boxes + * \param[out] ppixa [optional] character images + * \param[out] ppixdebug [optional] showing splittings + * + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a simple function that attempts to find split points
+ *          based on vertical pixel profiles.
+ *      (2) It should be given an image that has an arbitrary number
+ *          of text characters.
+ *      (3) The returned pixa includes the boxes from which the
+ *          (possibly split) components are extracted.
+ * 
+ */ +l_ok +pixSplitIntoCharacters(PIX *pixs, + l_int32 minw, + l_int32 minh, + BOXA **pboxa, + PIXA **ppixa, + PIX **ppixdebug) +{ +l_int32 ncomp, i, xoff, yoff; +BOXA *boxa1, *boxa2, *boxat1, *boxat2, *boxad; +BOXAA *baa; +PIX *pix, *pix1, *pix2, *pixdb; +PIXA *pixa1, *pixadb; + + PROCNAME("pixSplitIntoCharacters"); + + if (pboxa) *pboxa = NULL; + if (ppixa) *ppixa = NULL; + if (ppixdebug) *ppixdebug = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + /* Remove the small stuff */ + pix1 = pixSelectBySize(pixs, minw, minh, 8, L_SELECT_IF_BOTH, + L_SELECT_IF_GT, NULL); + + /* Small vertical close for consolidation */ + pix2 = pixMorphSequence(pix1, "c1.10", 0); + pixDestroy(&pix1); + + /* Get the 8-connected components */ + boxa1 = pixConnComp(pix2, &pixa1, 8); + pixDestroy(&pix2); + boxaDestroy(&boxa1); + + /* Split the components if obvious */ + ncomp = pixaGetCount(pixa1); + boxa2 = boxaCreate(ncomp); + pixadb = (ppixdebug) ? pixaCreate(ncomp) : NULL; + for (i = 0; i < ncomp; i++) { + pix = pixaGetPix(pixa1, i, L_CLONE); + if (ppixdebug) { + boxat1 = pixSplitComponentWithProfile(pix, 10, 7, &pixdb); + if (pixdb) + pixaAddPix(pixadb, pixdb, L_INSERT); + } else { + boxat1 = pixSplitComponentWithProfile(pix, 10, 7, NULL); + } + pixaGetBoxGeometry(pixa1, i, &xoff, &yoff, NULL, NULL); + boxat2 = boxaTransform(boxat1, xoff, yoff, 1.0, 1.0); + boxaJoin(boxa2, boxat2, 0, -1); + pixDestroy(&pix); + boxaDestroy(&boxat1); + boxaDestroy(&boxat2); + } + pixaDestroy(&pixa1); + + /* Generate the debug image */ + if (ppixdebug) { + if (pixaGetCount(pixadb) > 0) { + *ppixdebug = pixaDisplayTiledInRows(pixadb, 32, 1500, + 1.0, 0, 20, 1); + } + pixaDestroy(&pixadb); + } + + /* Do a 2D sort on the bounding boxes, and flatten the result to 1D */ + baa = boxaSort2d(boxa2, NULL, 0, 0, 5); + boxad = boxaaFlattenToBoxa(baa, NULL, L_CLONE); + boxaaDestroy(&baa); + boxaDestroy(&boxa2); + + /* Optionally extract the pieces from the input image */ + if (ppixa) + *ppixa = pixClipRectangles(pixs, boxad); + if (pboxa) + *pboxa = boxad; + else + boxaDestroy(&boxad); + return 0; +} + + +/*! + * \brief pixSplitComponentWithProfile() + * + * \param[in] pixs 1 bpp, exactly one connected component + * \param[in] delta distance used in extrema finding in a numa; typ. 10 + * \param[in] mindel minimum required difference between profile + * minimum and profile values +2 and -2 away; typ. 7 + * \param[out] ppixdebug [optional] debug image of splitting + * \return boxa of c.c. after splitting, or NULL on error + * + *
+ * Notes:
+ *      (1) This will split the most obvious cases of touching characters.
+ *          The split points it is searching for are narrow and deep
+ *          minimima in the vertical pixel projection profile, after a
+ *          large vertical closing has been applied to the component.
+ * 
+ */ +BOXA * +pixSplitComponentWithProfile(PIX *pixs, + l_int32 delta, + l_int32 mindel, + PIX **ppixdebug) +{ +l_int32 w, h, n2, i, firstmin, xmin, xshift; +l_int32 nmin, nleft, nright, nsplit, isplit, ncomp; +l_int32 *array1, *array2; +BOX *box; +BOXA *boxad; +NUMA *na1, *na2, *nasplit; +PIX *pix1, *pixdb; + + PROCNAME("pixSplitComponentsWithProfile"); + + if (ppixdebug) *ppixdebug = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixa undefined or not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + + /* Closing to consolidate characters vertically */ + pix1 = pixCloseSafeBrick(NULL, pixs, 1, 100); + + /* Get extrema of column projections */ + boxad = boxaCreate(2); + na1 = pixCountPixelsByColumn(pix1); /* w elements */ + pixDestroy(&pix1); + na2 = numaFindExtrema(na1, delta, NULL); + n2 = numaGetCount(na2); + if (n2 < 3) { /* no split possible */ + box = boxCreate(0, 0, w, h); + boxaAddBox(boxad, box, L_INSERT); + numaDestroy(&na1); + numaDestroy(&na2); + return boxad; + } + + /* Look for sufficiently deep and narrow minima. + * All minima of of interest must be surrounded by max on each + * side. firstmin is the index of first possible minimum. */ + array1 = numaGetIArray(na1); + array2 = numaGetIArray(na2); + if (ppixdebug) numaWriteStream(stderr, na2); + firstmin = (array1[array2[0]] > array1[array2[1]]) ? 1 : 2; + nasplit = numaCreate(n2); /* will hold split locations */ + for (i = firstmin; i < n2 - 1; i+= 2) { + xmin = array2[i]; + nmin = array1[xmin]; + if (xmin + 2 >= w) break; /* no more splits possible */ + nleft = array1[xmin - 2]; + nright = array1[xmin + 2]; + if (ppixdebug) { + fprintf(stderr, + "Splitting: xmin = %d, w = %d; nl = %d, nmin = %d, nr = %d\n", + xmin, w, nleft, nmin, nright); + } + if (nleft - nmin >= mindel && nright - nmin >= mindel) /* split */ + numaAddNumber(nasplit, xmin); + } + nsplit = numaGetCount(nasplit); + +#if 0 + if (ppixdebug && nsplit > 0) { + lept_mkdir("lept/split"); + gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/split/split", NULL); + } +#endif + + numaDestroy(&na1); + numaDestroy(&na2); + LEPT_FREE(array1); + LEPT_FREE(array2); + + if (nsplit == 0) { /* no splitting */ + numaDestroy(&nasplit); + box = boxCreate(0, 0, w, h); + boxaAddBox(boxad, box, L_INSERT); + return boxad; + } + + /* Use split points to generate b.b. after splitting */ + for (i = 0, xshift = 0; i < nsplit; i++) { + numaGetIValue(nasplit, i, &isplit); + box = boxCreate(xshift, 0, isplit - xshift, h); + boxaAddBox(boxad, box, L_INSERT); + xshift = isplit + 1; + } + box = boxCreate(xshift, 0, w - xshift, h); + boxaAddBox(boxad, box, L_INSERT); + numaDestroy(&nasplit); + + if (ppixdebug) { + pixdb = pixConvertTo32(pixs); + ncomp = boxaGetCount(boxad); + for (i = 0; i < ncomp; i++) { + box = boxaGetBox(boxad, i, L_CLONE); + pixRenderBoxBlend(pixdb, box, 1, 255, 0, 0, 0.5); + boxDestroy(&box); + } + *ppixdebug = pixdb; + } + + return boxad; +} + + +/*------------------------------------------------------------------* + * Extraction of lines of text * + *------------------------------------------------------------------*/ +/*! + * \brief pixExtractTextlines() + * + * \param[in] pixs any depth, assumed to have nearly horizontal text + * \param[in] maxw, maxh initial filtering: remove any components in pixs + * with components larger than maxw or maxh + * \param[in] minw, minh final filtering: remove extracted 'lines' + * with sizes smaller than minw or minh; use + * 0 for default. + * \param[in] adjw, adjh final adjustment of boxes representing each + * text line. If > 0, these increase the box + * size at each edge by this amount. + * \param[in] pixadb pixa for saving intermediate steps; NULL to omit + * \return pixa of textline images, including bounding boxes, or + * NULL on error + * + *
+ * Notes:
+ *      (1) This function assumes that textline fragments have sufficient
+ *          vertical separation and small enough skew so that a
+ *          horizontal dilation sufficient to join words will not join
+ *          textlines.  It does not guarantee that horizontally adjacent
+ *          textline fragments on the same line will be joined.
+ *      (2) For images with multiple columns, it attempts to avoid joining
+ *          textlines across the space between columns.  If that is not
+ *          a concern, you can also use pixExtractRawTextlines(),
+ *          which will join them with alacrity.
+ *      (3) This first removes components from pixs that are either
+ *          wide (> %maxw) or tall (> %maxh).
+ *      (4) A final filtering operation removes small components, such
+ *          that width < %minw or height < %minh.
+ *      (5) For reasonable accuracy, the resolution of pixs should be
+ *          at least 100 ppi.  For reasonable efficiency, the resolution
+ *          should not exceed 600 ppi.
+ *      (6) This can be used to determine if some region of a scanned
+ *          image is horizontal text.
+ *      (7) As an example, for a pix with resolution 300 ppi, a reasonable
+ *          set of parameters is:
+ *             pixExtractTextlines(pix, 150, 150, 36, 20, 5, 5, NULL);
+ *          The defaults minw and minh for 300 ppi are about 36 and 20,
+ *          so the same result is obtained with:
+ *             pixExtractTextlines(pix, 150, 150, 0, 0, 5, 5, NULL);
+ *      (8) The output pixa is composed of subimages, one for each textline,
+ *          and the boxa in the pixa tells where in %pixs each textline goes.
+ * 
+ */ +PIXA * +pixExtractTextlines(PIX *pixs, + l_int32 maxw, + l_int32 maxh, + l_int32 minw, + l_int32 minh, + l_int32 adjw, + l_int32 adjh, + PIXA *pixadb) +{ +char buf[64]; +l_int32 res, csize, empty; +BOXA *boxa1, *boxa2, *boxa3; +PIX *pix1, *pix2, *pix3; +PIXA *pixa1, *pixa2, *pixa3; + + PROCNAME("pixExtractTextlines"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Binarize carefully, if necessary */ + if (pixGetDepth(pixs) > 1) { + pix2 = pixConvertTo8(pixs, FALSE); + pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 190); + pix1 = pixThresholdToBinary(pix3, 150); + pixDestroy(&pix2); + pixDestroy(&pix3); + } else { + pix1 = pixClone(pixs); + } + pixZero(pix1, &empty); + if (empty) { + pixDestroy(&pix1); + L_INFO("no fg pixels in input image\n", procName); + return NULL; + } + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + + /* Remove any very tall or very wide connected components */ + pix2 = pixSelectBySize(pix1, maxw, maxh, 8, L_SELECT_IF_BOTH, + L_SELECT_IF_LT, NULL); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + pixDestroy(&pix1); + + /* Filter to solidify the text lines within the x-height region. + * The closing (csize) bridges gaps between words. The opening + * removes isolated bridges between textlines. */ + if ((res = pixGetXRes(pixs)) == 0) { + L_INFO("Resolution is not set: setting to 300 ppi\n", procName); + res = 300; + } + csize = L_MIN(120., 60.0 * res / 300.0); + snprintf(buf, sizeof(buf), "c%d.1 + o%d.1", csize, csize / 3); + pix3 = pixMorphCompSequence(pix2, buf, 0); + if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); + + /* Extract the connected components. These should be dilated lines */ + boxa1 = pixConnComp(pix3, &pixa1, 4); + if (pixadb) { + pix1 = pixaDisplayRandomCmap(pixa1, 0, 0); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + /* Set minw, minh if default is requested */ + minw = (minw != 0) ? minw : (l_int32)(0.12 * res); + minh = (minh != 0) ? minh : (l_int32)(0.07 * res); + + /* Remove line components that are too small */ + pixa2 = pixaSelectBySize(pixa1, minw, minh, L_SELECT_IF_BOTH, + L_SELECT_IF_GTE, NULL); + if (pixadb) { + pix1 = pixaDisplayRandomCmap(pixa2, 0, 0); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + pix1 = pixConvertTo32(pix2); + pixRenderBoxaArb(pix1, pixa2->boxa, 2, 255, 0, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + /* Selectively AND with the version before dilation, and save */ + boxa2 = pixaGetBoxa(pixa2, L_CLONE); + boxa3 = boxaAdjustSides(boxa2, -adjw, adjw, -adjh, adjh); + pixa3 = pixClipRectangles(pix2, boxa3); + if (pixadb) { + pix1 = pixaDisplayRandomCmap(pixa3, 0, 0); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + pixDestroy(&pix2); + pixDestroy(&pix3); + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + return pixa3; +} + + +/*! + * \brief pixExtractRawTextlines() + * + * \param[in] pixs any depth, assumed to have nearly horizontal text + * \param[in] maxw, maxh initial filtering: remove any components in pixs + * with components larger than maxw or maxh; + * use 0 for default values. + * \param[in] adjw, adjh final adjustment of boxes representing each + * text line. If > 0, these increase the box + * size at each edge by this amount. + * \param[in] pixadb pixa for saving intermediate steps; NULL to omit + * \return pixa of textline images, including bounding boxes, or + * NULL on error + * + *
+ * Notes:
+ *      (1) This function assumes that textlines have sufficient
+ *          vertical separation and small enough skew so that a
+ *          horizontal dilation sufficient to join words will not join
+ *          textlines.  It aggressively joins textlines across multiple
+ *          columns, so if that is not desired, you must either (a) make
+ *          sure that %pixs is a single column of text or (b) use instead
+ *          pixExtractTextlines(), which is more conservative
+ *          about joining text fragments that have vertical overlap.
+ *      (2) This first removes components from pixs that are either
+ *          very wide (> %maxw) or very tall (> %maxh).
+ *      (3) For reasonable accuracy, the resolution of pixs should be
+ *          at least 100 ppi.  For reasonable efficiency, the resolution
+ *          should not exceed 600 ppi.
+ *      (4) This can be used to determine if some region of a scanned
+ *          image is horizontal text.
+ *      (5) As an example, for a pix with resolution 300 ppi, a reasonable
+ *          set of parameters is:
+ *             pixExtractRawTextlines(pix, 150, 150, 0, 0, NULL);
+ *      (6) The output pixa is composed of subimages, one for each textline,
+ *          and the boxa in the pixa tells where in %pixs each textline goes.
+ * 
+ */ +PIXA * +pixExtractRawTextlines(PIX *pixs, + l_int32 maxw, + l_int32 maxh, + l_int32 adjw, + l_int32 adjh, + PIXA *pixadb) +{ +char buf[64]; +l_int32 res, csize, empty; +BOXA *boxa1, *boxa2, *boxa3; +BOXAA *baa1; +PIX *pix1, *pix2, *pix3; +PIXA *pixa1, *pixa2; + + PROCNAME("pixExtractRawTextlines"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Set maxw, maxh if default is requested */ + if ((res = pixGetXRes(pixs)) == 0) { + L_INFO("Resolution is not set: setting to 300 ppi\n", procName); + res = 300; + } + maxw = (maxw != 0) ? maxw : (l_int32)(0.5 * res); + maxh = (maxh != 0) ? maxh : (l_int32)(0.5 * res); + + /* Binarize carefully, if necessary */ + if (pixGetDepth(pixs) > 1) { + pix2 = pixConvertTo8(pixs, FALSE); + pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 190); + pix1 = pixThresholdToBinary(pix3, 150); + pixDestroy(&pix2); + pixDestroy(&pix3); + } else { + pix1 = pixClone(pixs); + } + pixZero(pix1, &empty); + if (empty) { + pixDestroy(&pix1); + L_INFO("no fg pixels in input image\n", procName); + return NULL; + } + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + + /* Remove any very tall or very wide connected components */ + pix2 = pixSelectBySize(pix1, maxw, maxh, 8, L_SELECT_IF_BOTH, + L_SELECT_IF_LT, NULL); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + pixDestroy(&pix1); + + /* Filter to solidify the text lines within the x-height region. + * The closing (csize) bridges gaps between words. */ + csize = L_MIN(120., 60.0 * res / 300.0); + snprintf(buf, sizeof(buf), "c%d.1", csize); + pix3 = pixMorphCompSequence(pix2, buf, 0); + if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); + + /* Extract the connected components. These should be dilated lines */ + boxa1 = pixConnComp(pix3, &pixa1, 4); + if (pixadb) { + pix1 = pixaDisplayRandomCmap(pixa1, 0, 0); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + /* Do a 2-d sort, and generate a bounding box for each set of text + * line segments that is aligned horizontally (i.e., has vertical + * overlap) into a box representing a single text line. */ + baa1 = boxaSort2d(boxa1, NULL, -1, -1, 5); + boxaaGetExtent(baa1, NULL, NULL, NULL, &boxa2); + if (pixadb) { + pix1 = pixConvertTo32(pix2); + pixRenderBoxaArb(pix1, boxa2, 2, 255, 0, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + /* Optionally adjust the sides of each text line box, and then + * use the boxes to generate a pixa of the text lines. */ + boxa3 = boxaAdjustSides(boxa2, -adjw, adjw, -adjh, adjh); + pixa2 = pixClipRectangles(pix2, boxa3); + if (pixadb) { + pix1 = pixaDisplayRandomCmap(pixa2, 0, 0); + pixcmapResetColor(pixGetColormap(pix1), 0, 255, 255, 255); + pixaAddPix(pixadb, pix1, L_INSERT); + } + + pixDestroy(&pix2); + pixDestroy(&pix3); + pixaDestroy(&pixa1); + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + boxaaDestroy(&baa1); + return pixa2; +} + + +/*------------------------------------------------------------------* + * How many text columns * + *------------------------------------------------------------------*/ +/*! + * \brief pixCountTextColumns() + * + * \param[in] pixs 1 bpp + * \param[in] deltafract fraction of (max - min) to be used in the delta + * for extrema finding; typ 0.3 + * \param[in] peakfract fraction of (max - min) to be used to threshold + * the peak value; typ. 0.5 + * \param[in] clipfract fraction of image dimension removed on each side; + * typ. 0.1, which leaves w and h reduced by 0.8 + * \param[out] pncols number of columns; -1 if not determined + * \param[in] pixadb [optional] pre-allocated, for showing + * intermediate computation; use null to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is assumed that pixs has the correct resolution set.
+ *          If the resolution is 0, we set to 300 and issue a warning.
+ *      (2) If necessary, the image is scaled to between 37 and 75 ppi;
+ *          most of the processing is done at this resolution.
+ *      (3) If no text is found (essentially a blank page),
+ *          this returns ncols = 0.
+ *      (4) For debug output, input a pre-allocated pixa.
+ * 
+ */ +l_ok +pixCountTextColumns(PIX *pixs, + l_float32 deltafract, + l_float32 peakfract, + l_float32 clipfract, + l_int32 *pncols, + PIXA *pixadb) +{ +l_int32 w, h, res, i, n, npeak; +l_float32 scalefact, redfact, minval, maxval, val4, val5, fract; +BOX *box; +NUMA *na1, *na2, *na3, *na4, *na5; +PIX *pix1, *pix2, *pix3, *pix4, *pix5; + + PROCNAME("pixCountTextColumns"); + + if (!pncols) + return ERROR_INT("&ncols not defined", procName, 1); + *pncols = -1; /* init */ + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (deltafract < 0.15 || deltafract > 0.75) + L_WARNING("deltafract not in [0.15 ... 0.75]\n", procName); + if (peakfract < 0.25 || peakfract > 0.9) + L_WARNING("peakfract not in [0.25 ... 0.9]\n", procName); + if (clipfract < 0.0 || clipfract >= 0.5) + return ERROR_INT("clipfract not in [0.0 ... 0.5)\n", procName, 1); + if (pixadb) pixaAddPix(pixadb, pixs, L_COPY); + + /* Scale to between 37.5 and 75 ppi */ + if ((res = pixGetXRes(pixs)) == 0) { + L_WARNING("resolution undefined; set to 300\n", procName); + pixSetResolution(pixs, 300, 300); + res = 300; + } + if (res < 37) { + L_WARNING("resolution %d very low\n", procName, res); + scalefact = 37.5 / res; + pix1 = pixScale(pixs, scalefact, scalefact); + } else { + redfact = (l_float32)res / 37.5; + if (redfact < 2.0) + pix1 = pixClone(pixs); + else if (redfact < 4.0) + pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); + else if (redfact < 8.0) + pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 0, 0); + else if (redfact < 16.0) + pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 2, 0); + else + pix1 = pixReduceRankBinaryCascade(pixs, 1, 2, 2, 2); + } + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + + /* Crop inner 80% of image */ + pixGetDimensions(pix1, &w, &h, NULL); + box = boxCreate(clipfract * w, clipfract * h, + (1.0 - 2 * clipfract) * w, (1.0 - 2 * clipfract) * h); + pix2 = pixClipRectangle(pix1, box, NULL); + pixGetDimensions(pix2, &w, &h, NULL); + boxDestroy(&box); + if (pixadb) pixaAddPix(pixadb, pix2, L_COPY); + + /* Deskew */ + pix3 = pixDeskew(pix2, 0); + if (pixadb) pixaAddPix(pixadb, pix3, L_COPY); + + /* Close to increase column counts for text */ + pix4 = pixCloseSafeBrick(NULL, pix3, 5, 21); + if (pixadb) pixaAddPix(pixadb, pix4, L_COPY); + pixInvert(pix4, pix4); + na1 = pixCountByColumn(pix4, NULL); + + if (pixadb) { + gplotSimple1(na1, GPLOT_PNG, "/tmp/lept/plot", NULL); + pix5 = pixRead("/tmp/lept/plot.png"); + pixaAddPix(pixadb, pix5, L_INSERT); + } + + /* Analyze the column counts. na4 gives the locations of + * the extrema in normalized units (0.0 to 1.0) across the + * cropped image. na5 gives the magnitude of the + * extrema, normalized to the dynamic range. The peaks + * are values that are at least peakfract of (max - min). */ + numaGetMax(na1, &maxval, NULL); + numaGetMin(na1, &minval, NULL); + fract = (l_float32)(maxval - minval) / h; /* is there much at all? */ + if (fract < 0.05) { + L_INFO("very little content on page; 0 text columns\n", procName); + *pncols = 0; + } else { + na2 = numaFindExtrema(na1, deltafract * (maxval - minval), &na3); + na4 = numaTransform(na2, 0, 1.0 / w); + na5 = numaTransform(na3, -minval, 1.0 / (maxval - minval)); + n = numaGetCount(na4); + for (i = 0, npeak = 0; i < n; i++) { + numaGetFValue(na4, i, &val4); + numaGetFValue(na5, i, &val5); + if (val4 > 0.3 && val4 < 0.7 && val5 >= peakfract) { + npeak++; + L_INFO("Peak(loc,val) = (%5.3f,%5.3f)\n", procName, val4, val5); + } + } + *pncols = npeak + 1; + numaDestroy(&na2); + numaDestroy(&na3); + numaDestroy(&na4); + numaDestroy(&na5); + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + numaDestroy(&na1); + return 0; +} + + +/*------------------------------------------------------------------* + * Decision text vs photo * + *------------------------------------------------------------------*/ +/*! + * \brief pixDecideIfText() + * + * \param[in] pixs any depth + * \param[in] box [optional] if null, use entire pixs + * \param[out] pistext 1 if text; 0 if photo; -1 if not determined or empty + * \param[in] pixadb [optional] pre-allocated, for showing intermediate + * computation; use NULL to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is assumed that pixs has the correct resolution set.
+ *          If the resolution is 0, we set to 300 and issue a warning.
+ *      (2) If necessary, the image is scaled to 300 ppi; most of the
+ *          processing is done at this resolution.
+ *      (3) Text is assumed to be in horizontal lines.
+ *      (4) Because thin vertical lines are removed before filtering for
+ *          text lines, this should identify tables as text.
+ *      (5) If %box is null and pixs contains both text lines and line art,
+ *          this function might return %istext == true.
+ *      (6) If the input pixs is empty, or for some other reason the
+ *          result can not be determined, return -1.
+ *      (7) For debug output, input a pre-allocated pixa.
+ * 
+ */ +l_ok +pixDecideIfText(PIX *pixs, + BOX *box, + l_int32 *pistext, + PIXA *pixadb) +{ +l_int32 i, empty, maxw, w, h, n1, n2, n3, minlines, big_comp; +l_float32 ratio1, ratio2; +L_BMF *bmf; +BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxa5; +PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; +PIXA *pixa1; +SEL *sel1; + + PROCNAME("pixDecideIfText"); + + if (!pistext) + return ERROR_INT("&istext not defined", procName, 1); + *pistext = -1; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Crop, convert to 1 bpp, 300 ppi */ + if ((pix1 = pixPrepare1bpp(pixs, box, 0.1, 300)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + + pixZero(pix1, &empty); + if (empty) { + pixDestroy(&pix1); + L_INFO("pix is empty\n", procName); + return 0; + } + w = pixGetWidth(pix1); + + /* Identify and remove tall, thin vertical lines (as found in tables) + * that are up to 9 pixels wide. Make a hit-miss sel with an + * 81 pixel vertical set of hits and with 3 pairs of misses that + * are 10 pixels apart horizontally. It is necessary to use a + * hit-miss transform; if we only opened with a vertical line of + * hits, we would remove solid regions of pixels that are not + * text or vertical lines. */ + pix2 = pixCreate(11, 81, 1); + for (i = 0; i < 81; i++) + pixSetPixel(pix2, 5, i, 1); + sel1 = selCreateFromPix(pix2, 40, 5, NULL); + selSetElement(sel1, 20, 0, SEL_MISS); + selSetElement(sel1, 20, 10, SEL_MISS); + selSetElement(sel1, 40, 0, SEL_MISS); + selSetElement(sel1, 40, 10, SEL_MISS); + selSetElement(sel1, 60, 0, SEL_MISS); + selSetElement(sel1, 60, 10, SEL_MISS); + pix3 = pixHMT(NULL, pix1, sel1); + pix4 = pixSeedfillBinaryRestricted(NULL, pix3, pix1, 8, 5, 1000); + pix5 = pixXor(NULL, pix1, pix4); + pixDestroy(&pix2); + selDestroy(&sel1); + + /* Convert the text lines to separate long horizontal components */ + pix6 = pixMorphCompSequence(pix5, "c30.1 + o15.1 + c60.1 + o2.2", 0); + + /* Estimate the distance to the bottom of the significant region */ + if (box) { /* use full height */ + pixGetDimensions(pix6, NULL, &h, NULL); + } else { /* use height of region that has text lines */ + pixFindThreshFgExtent(pix6, 400, NULL, &h); + } + + if (pixadb) { + bmf = bmfCreate(NULL, 6); + pixaAddPixWithText(pixadb, pix1, 1, bmf, "threshold/crop to binary", + 0x0000ff00, L_ADD_BELOW); + pixaAddPixWithText(pixadb, pix3, 2, bmf, "hit-miss for vertical line", + 0x0000ff00, L_ADD_BELOW); + pixaAddPixWithText(pixadb, pix4, 2, bmf, "restricted seed-fill", + 0x0000ff00, L_ADD_BELOW); + pixaAddPixWithText(pixadb, pix5, 2, bmf, "remove using xor", + 0x0000ff00, L_ADD_BELOW); + pixaAddPixWithText(pixadb, pix6, 2, bmf, "make long horiz components", + 0x0000ff00, L_ADD_BELOW); + } + + /* Extract the connected components */ + if (pixadb) { + boxa1 = pixConnComp(pix6, &pixa1, 8); + pix7 = pixaDisplayRandomCmap(pixa1, 0, 0); + pixcmapResetColor(pixGetColormap(pix7), 0, 255, 255, 255); + pixaAddPixWithText(pixadb, pix7, 2, bmf, "show connected components", + 0x0000ff00, L_ADD_BELOW); + pixDestroy(&pix7); + pixaDestroy(&pixa1); + bmfDestroy(&bmf); + } else { + boxa1 = pixConnComp(pix6, NULL, 8); + } + + /* Analyze the connected components. The following conditions + * at 300 ppi must be satisfied if the image is text: + * (1) There are no components that are wider than 400 pixels and + * taller than 175 pixels. + * (2) The second longest component is at least 60% of the + * (possibly cropped) image width. This catches images + * that don't have any significant content. + * (3) Of the components that are at least 40% of the length + * of the longest (n2), at least 80% of them must not exceed + * 60 pixels in height. + * (4) The number of those long, thin components (n3) must + * equal or exceed a minimum that scales linearly with the + * image height. + * Most images that are not text fail more than one of these + * conditions. */ + boxa2 = boxaSort(boxa1, L_SORT_BY_WIDTH, L_SORT_DECREASING, NULL); + boxaGetBoxGeometry(boxa2, 1, NULL, NULL, &maxw, NULL); /* 2nd longest */ + boxa3 = boxaSelectBySize(boxa1, 0.4 * maxw, 0, L_SELECT_WIDTH, + L_SELECT_IF_GTE, NULL); + boxa4 = boxaSelectBySize(boxa3, 0, 60, L_SELECT_HEIGHT, + L_SELECT_IF_LTE, NULL); + boxa5 = boxaSelectBySize(boxa1, 400, 175, L_SELECT_IF_BOTH, + L_SELECT_IF_GT, NULL); + big_comp = (boxaGetCount(boxa5) == 0) ? 0 : 1; + n1 = boxaGetCount(boxa1); + n2 = boxaGetCount(boxa3); + n3 = boxaGetCount(boxa4); + ratio1 = (l_float32)maxw / (l_float32)w; + ratio2 = (l_float32)n3 / (l_float32)n2; + minlines = L_MAX(2, h / 125); + if (big_comp || ratio1 < 0.6 || ratio2 < 0.8 || n3 < minlines) + *pistext = 0; + else + *pistext = 1; + if (pixadb) { + if (*pistext == 1) { + L_INFO("This is text: \n n1 = %d, n2 = %d, n3 = %d, " + "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " + "big_comp = %d\n", procName, n1, n2, n3, minlines, + maxw, ratio1, h, big_comp); + } else { + L_INFO("This is not text: \n n1 = %d, n2 = %d, n3 = %d, " + "minlines = %d\n maxw = %d, ratio1 = %4.2f, h = %d, " + "big_comp = %d\n", procName, n1, n2, n3, minlines, + maxw, ratio1, h, big_comp); + } + } + + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + boxaDestroy(&boxa4); + boxaDestroy(&boxa5); + pixDestroy(&pix1); + pixDestroy(&pix3); + pixDestroy(&pix4); + pixDestroy(&pix5); + pixDestroy(&pix6); + return 0; +} + + +/*! + * \brief pixFindThreshFgExtent() + * + * \param[in] pixs 1 bpp + * \param[in] thresh threshold number of pixels in row + * \param[out] ptop [optional] location of top of region + * \param[out] pbot [optional] location of bottom of region + * \return 0 if OK, 1 on error + */ +l_ok +pixFindThreshFgExtent(PIX *pixs, + l_int32 thresh, + l_int32 *ptop, + l_int32 *pbot) +{ +l_int32 i, n; +l_int32 *array; +NUMA *na; + + PROCNAME("pixFindThreshFgExtent"); + + if (ptop) *ptop = 0; + if (pbot) *pbot = 0; + if (!ptop && !pbot) + return ERROR_INT("nothing to determine", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + na = pixCountPixelsByRow(pixs, NULL); + n = numaGetCount(na); + array = numaGetIArray(na); + if (ptop) { + for (i = 0; i < n; i++) { + if (array[i] >= thresh) { + *ptop = i; + break; + } + } + } + if (pbot) { + for (i = n - 1; i >= 0; i--) { + if (array[i] >= thresh) { + *pbot = i; + break; + } + } + } + LEPT_FREE(array); + numaDestroy(&na); + return 0; +} + + +/*------------------------------------------------------------------* + * Decision: table vs text * + *------------------------------------------------------------------*/ +/*! + * \brief pixDecideIfTable() + * + * \param[in] pixs any depth, any resolution >= 75 ppi + * \param[in] box [optional] if null, use entire pixs + * \param[in] orient L_PORTRAIT_MODE, L_LANDSCAPE_MODE + * \param[out] pscore 0 - 4; -1 if not determined + * \param[in] pixadb [optional] pre-allocated, for showing intermediate + * computation; use NULL to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is assumed that pixs has the correct resolution set.
+ *          If the resolution is 0, we assume it is 300 ppi and issue a warning.
+ *      (2) If %orient == L_LANDSCAPE_MODE, the image is rotated 90 degrees
+ *          clockwise before being analyzed.
+ *      (3) The interpretation of the returned score:
+ *            -1     undetermined
+ *             0     no table
+ *             1     unlikely to have a table
+ *             2     likely to have a table
+ *             3     even more likely to have a table
+ *             4     extremely likely to have a table
+ *          * Setting the condition for finding a table at score >= 2 works
+ *            well, except for false positives on kanji and landscape text.
+ *          * These false positives can be removed by setting the condition
+ *            at score >= 3, but recall is lowered because it will not find
+ *            tables without either horizontal or vertical lines.
+ *      (4) Most of the processing takes place at 75 ppi.
+ *      (5) Internally, three numbers are determined, for horizontal and
+ *          vertical fg lines, and for vertical bg lines.  From these,
+ *          four tests are made to decide if there is a table occupying
+ *          a significant part of the image.
+ *      (6) Images have arbitrary content and would be likely to trigger
+ *          this detector, so they are checked for first, and if found,
+ *          return with a 0 (no table) score.
+ *      (7) Musical scores (tablature) are likely to trigger the detector.
+ *      (8) Tables of content with more than 2 columns are likely to
+ *          trigger the detector.
+ *      (9) For debug output, input a pre-allocated pixa.
+ * 
+ */ +l_ok +pixDecideIfTable(PIX *pixs, + BOX *box, + l_int32 orient, + l_int32 *pscore, + PIXA *pixadb) +{ +l_int32 empty, nhb, nvb, nvw, score, htfound; +PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; + + PROCNAME("pixDecideIfTable"); + + if (!pscore) + return ERROR_INT("&score not defined", procName, 1); + *pscore = -1; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Check if there is an image region. First convert to 1 bpp + * at 175 ppi. If an image is found, assume there is no table. */ + pix1 = pixPrepare1bpp(pixs, box, 0.1, 175); + pix2 = pixGenerateHalftoneMask(pix1, NULL, &htfound, NULL); + if (htfound && pixadb) pixaAddPix(pixadb, pix2, L_COPY); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (htfound) { + *pscore = 0; + L_INFO("pix has an image region\n", procName); + return 0; + } + + /* Crop, convert to 1 bpp, 75 ppi */ + if ((pix1 = pixPrepare1bpp(pixs, box, 0.05, 75)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + + pixZero(pix1, &empty); + if (empty) { + *pscore = 0; + pixDestroy(&pix1); + L_INFO("pix is empty\n", procName); + return 0; + } + + /* The 2x2 dilation on 75 ppi makes these two approaches very similar: + * (1) pix1 = pixPrepare1bpp(..., 300); // 300 ppi resolution + * pix2 = pixReduceRankBinaryCascade(pix1, 1, 1, 0, 0); + * (2) pix1 = pixPrepare1bpp(..., 75); // 75 ppi resolution + * pix2 = pixDilateBrick(NULL, pix1, 2, 2); + * But (2) is more efficient if the input image to pixPrepare1bpp() + * is not at 300 ppi. */ + pix2 = pixDilateBrick(NULL, pix1, 2, 2); + + /* Deskew both horizontally and vertically; rotate by 90 + * degrees if in landscape mode. */ + pix3 = pixDeskewBoth(pix2, 1); + if (pixadb) { + pixaAddPix(pixadb, pix2, L_COPY); + pixaAddPix(pixadb, pix3, L_COPY); + } + if (orient == L_LANDSCAPE_MODE) + pix4 = pixRotate90(pix3, 1); + else + pix4 = pixClone(pix3); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pix1 = pixClone(pix4); + pixDestroy(&pix4); + + /* Look for horizontal and vertical lines */ + pix2 = pixMorphSequence(pix1, "o100.1 + c1.4", 0); + pix3 = pixSeedfillBinary(NULL, pix2, pix1, 8); + pix4 = pixMorphSequence(pix1, "o1.100 + c4.1", 0); + pix5 = pixSeedfillBinary(NULL, pix4, pix1, 8); + pix6 = pixOr(NULL, pix3, pix5); + if (pixadb) { + pixaAddPix(pixadb, pix2, L_COPY); + pixaAddPix(pixadb, pix4, L_COPY); + pixaAddPix(pixadb, pix3, L_COPY); + pixaAddPix(pixadb, pix5, L_COPY); + pixaAddPix(pixadb, pix6, L_COPY); + } + pixCountConnComp(pix2, 8, &nhb); /* number of horizontal black lines */ + pixCountConnComp(pix4, 8, &nvb); /* number of vertical black lines */ + + /* Remove the lines */ + pixSubtract(pix1, pix1, pix6); + if (pixadb) pixaAddPix(pixadb, pix1, L_COPY); + + /* Remove noise pixels */ + pix7 = pixMorphSequence(pix1, "c4.1 + o8.1", 0); + if (pixadb) pixaAddPix(pixadb, pix7, L_COPY); + + /* Look for vertical white space. Invert to convert white bg + * to fg. Use a single rank-1 2x reduction, which closes small + * fg holes, for the final processing at 37.5 ppi. + * The vertical opening is then about 3 inches on a 300 ppi image. + * We also remove vertical whitespace that is less than 5 pixels + * wide at this resolution (about 0.1 inches) */ + pixInvert(pix7, pix7); + pix8 = pixMorphSequence(pix7, "r1 + o1.100", 0); + pix9 = pixSelectBySize(pix8, 5, 0, 8, L_SELECT_WIDTH, + L_SELECT_IF_GTE, NULL); + pixCountConnComp(pix9, 8, &nvw); /* number of vertical white lines */ + if (pixadb) { + pixaAddPix(pixadb, pixScale(pix8, 2.0, 2.0), L_INSERT); + pixaAddPix(pixadb, pixScale(pix9, 2.0, 2.0), L_INSERT); + } + + /* Require at least 2 of the following 4 conditions for a table. + * Some tables do not have black (fg) lines, and for those we + * require more than 6 long vertical whitespace (bg) lines. */ + score = 0; + if (nhb > 1) score++; + if (nvb > 2) score++; + if (nvw > 3) score++; + if (nvw > 6) score++; + *pscore = score; + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + pixDestroy(&pix5); + pixDestroy(&pix6); + pixDestroy(&pix7); + pixDestroy(&pix8); + pixDestroy(&pix9); + return 0; +} + + +/*! + * \brief pixPrepare1bpp() + * + * \param[in] pixs any depth + * \param[in] box [optional] if null, use entire pixs + * \param[in] cropfract fraction to be removed from the boundary; + * use 0.0 to retain the entire image + * \param[in] outres desired resolution of output image; if the + * input image resolution is not set, assume + * 300 ppi; use 0 to skip scaling. + * \return pixd if OK, NULL on error + * + *
+ * Notes:
+ *      (1) This handles some common pre-processing operations,
+ *          where the page segmentation algorithm takes a 1 bpp image.
+ * 
+ */ +PIX * +pixPrepare1bpp(PIX *pixs, + BOX *box, + l_float32 cropfract, + l_int32 outres) +{ +l_int32 w, h, res; +l_float32 factor; +BOX *box1; +PIX *pix1, *pix2, *pix3, *pix4, *pix5; + + PROCNAME("pixPrepare1bpp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Crop the image. If no box is given, use %cropfract to remove + * pixels near the image boundary; this helps avoid false + * negatives from noise that is often found there. */ + if (box) { + pix1 = pixClipRectangle(pixs, box, NULL); + } else { + pixGetDimensions(pixs, &w, &h, NULL); + box1 = boxCreate((l_int32)(cropfract * w), (l_int32)(cropfract * h), + (l_int32)((1.0 - 2 * cropfract) * w), + (l_int32)((1.0 - 2 * cropfract) * h)); + pix1 = pixClipRectangle(pixs, box1, NULL); + boxDestroy(&box1); + } + + /* Convert to 1 bpp with adaptive background cleaning */ + if (pixGetDepth(pixs) > 1) { + pix2 = pixConvertTo8(pix1, 0); + pix3 = pixCleanBackgroundToWhite(pix2, NULL, NULL, 1.0, 70, 160); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (!pix3) { + L_INFO("pix cleaning failed\n", procName); + return NULL; + } + pix4 = pixThresholdToBinary(pix3, 200); + pixDestroy(&pix3); + } else { + pix4 = pixClone(pix1); + pixDestroy(&pix1); + } + + /* Scale the image to the requested output resolution; + do not scale if %outres <= 0 */ + if (outres <= 0) + return pix4; + if ((res = pixGetXRes(pixs)) == 0) { + L_WARNING("Resolution is not set: using 300 ppi\n", procName); + res = 300; + } + if (res != outres) { + factor = (l_float32)outres / (l_float32)res; + pix5 = pixScale(pix4, factor, factor); + } else { + pix5 = pixClone(pix4); + } + pixDestroy(&pix4); + return pix5; +} + + +/*------------------------------------------------------------------* + * Estimate the grayscale background value * + *------------------------------------------------------------------*/ +/*! + * \brief pixEstimateBackground() + * + * \param[in] pixs 8 bpp, with or without colormap + * \param[in] darkthresh pixels below this value are never considered + * part of the background; typ. 70; use 0 to skip + * \param[in] edgecrop fraction of half-width on each side, and of + * half-height at top and bottom, that are cropped + * \param[out] pbg estimated background, or 0 on error + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Caller should check that return bg value is > 0.
+ * 
+ */ +l_ok +pixEstimateBackground(PIX *pixs, + l_int32 darkthresh, + l_float32 edgecrop, + l_int32 *pbg) +{ +l_int32 w, h, sampling; +l_float32 fbg; +BOX *box; +PIX *pix1, *pix2, *pixm; + + PROCNAME("pixEstimateBackground"); + + if (!pbg) + return ERROR_INT("&bg not defined", procName, 1); + *pbg = 0; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (darkthresh > 128) + L_WARNING("darkthresh unusually large\n", procName); + if (edgecrop < 0.0 || edgecrop >= 1.0) + return ERROR_INT("edgecrop not in [0.0 ... 1.0)", procName, 1); + + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + pixGetDimensions(pix1, &w, &h, NULL); + + /* Optionally crop inner part of image */ + if (edgecrop > 0.0) { + box = boxCreate(0.5 * edgecrop * w, 0.5 * edgecrop * h, + (1.0 - edgecrop) * w, (1.0 - edgecrop) * h); + pix2 = pixClipRectangle(pix1, box, NULL); + boxDestroy(&box); + } else { + pix2 = pixClone(pix1); + } + + /* We will use no more than 50K samples */ + sampling = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5)); + + /* Optionally make a mask over all pixels lighter than %darkthresh */ + pixm = NULL; + if (darkthresh > 0) { + pixm = pixThresholdToBinary(pix2, darkthresh); + pixInvert(pixm, pixm); + } + + pixGetRankValueMasked(pix2, pixm, 0, 0, sampling, 0.5, &fbg, NULL); + *pbg = (l_int32)(fbg + 0.5); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pixm); + return 0; +} + + +/*---------------------------------------------------------------------* + * Largest white or black rectangles in an image * + *---------------------------------------------------------------------*/ +/*! + * \brief pixFindLargeRectangles() + * + * \param[in] pixs 1 bpp + * \param[in] polarity 0 within background, 1 within foreground + * \param[in] nrect number of rectangles to be found + * \param[out] pboxa largest rectangles, sorted by decreasing area + * \param[in,out] ppixdb optional return output with rectangles drawn on it + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a greedy search to find the largest rectangles,
+ *          either black or white and without overlaps, in %pix.
+ *      (2) See pixFindLargestRectangle(), which is called multiple
+ *          times, for details.  On each call, the largest rectangle
+ *          found is painted, so that none of its pixels can be
+ *          used later, before calling it again.
+ *      (3) This function is surprisingly fast.  Although
+ *          pixFindLargestRectangle() runs at about 50 MPix/sec, when it
+ *          is run multiple times by pixFindLargeRectangles(), it processes
+ *          at 150 - 250 MPix/sec, and the time is approximately linear
+ *          in %nrect.  For example, for a 1 MPix image, searching for
+ *          the largest 50 boxes takes about 0.2 seconds.
+ * 
+ */ +l_ok +pixFindLargeRectangles(PIX *pixs, + l_int32 polarity, + l_int32 nrect, + BOXA **pboxa, + PIX **ppixdb) +{ +l_int32 i, op, bx, by, bw, bh; +BOX *box; +BOXA *boxa; +PIX *pix; + + PROCNAME("pixFindLargeRectangles"); + + if (ppixdb) *ppixdb = NULL; + if (!pboxa) + return ERROR_INT("&boxa not defined", procName, 1); + *pboxa = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (polarity != 0 && polarity != 1) + return ERROR_INT("invalid polarity", procName, 1); + if (nrect > 1000) { + L_WARNING("large num rectangles = %d requested; using 1000\n", + procName, nrect); + nrect = 1000; + } + + pix = pixCopy(NULL, pixs); + boxa = boxaCreate(nrect); + *pboxa = boxa; + + /* Sequentially find largest rectangle and fill with opposite color */ + for (i = 0; i < nrect; i++) { + if (pixFindLargestRectangle(pix, polarity, &box, NULL) == 1) { + boxDestroy(&box); + L_ERROR("failure in pixFindLargestRectangle\n", procName); + break; + } + boxaAddBox(boxa, box, L_INSERT); + op = (polarity == 0) ? PIX_SET : PIX_CLR; + boxGetGeometry(box, &bx, &by, &bw, &bh); + pixRasterop(pix, bx, by, bw, bh, op, NULL, 0, 0); + } + + if (ppixdb) + *ppixdb = pixDrawBoxaRandom(pixs, boxa, 3); + + pixDestroy(&pix); + return 0; +} + + +/*! + * \brief pixFindLargestRectangle() + * + * \param[in] pixs 1 bpp + * \param[in] polarity 0 within background, 1 within foreground + * \param[out] pbox largest area rectangle + * \param[in,out] ppixdb optional return output with rectangle drawn on it + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a simple and elegant solution to a problem in
+ *          computational geometry that at first appears to be quite
+ *          difficult: what is the largest rectangle that can be
+ *          placed in the image, covering only pixels of one polarity
+ *          (bg or fg)?  The solution is O(n), where n is the number
+ *          of pixels in the image, and it requires nothing more than
+ *          using a simple recursion relation in a single sweep of the image.
+ *      (2) In a sweep from UL to LR with left-to-right being the fast
+ *          direction, calculate the largest white rectangle at (x, y),
+ *          using previously calculated values at pixels #1 and #2:
+ *             #1:    (x, y - 1)
+ *             #2:    (x - 1, y)
+ *          We also need the most recent "black" pixels that were seen
+ *          in the current row and column.
+ *          Consider the largest area.  There are only two possibilities:
+ *             (a)  Min(w(1), horizdist) * (h(1) + 1)
+ *             (b)  Min(h(2), vertdist) * (w(2) + 1)
+ *          where
+ *             horizdist: the distance from the rightmost "black" pixel seen
+ *                        in the current row across to the current pixel
+ *             vertdist: the distance from the lowest "black" pixel seen
+ *                       in the current column down to the current pixel
+ *          and we choose the Max of (a) and (b).
+ *      (3) To convince yourself that these recursion relations are correct,
+ *          it helps to draw the maximum rectangles at #1 and #2.
+ *          Then for #1, you try to extend the rectangle down one line,
+ *          so that the height is h(1) + 1.  Do you get the full
+ *          width of #1, w(1)?  It depends on where the black pixels are
+ *          in the current row.  You know the final width is bounded by w(1)
+ *          and w(2) + 1, but the actual value depends on the distribution
+ *          of black pixels in the current row that are at a distance
+ *          from the current pixel that is between these limits.
+ *          We call that value "horizdist", and the area is then given
+ *          by the expression (a) above.  Using similar reasoning for #2,
+ *          where you attempt to extend the rectangle to the right
+ *          by 1 pixel, you arrive at (b).  The largest rectangle is
+ *          then found by taking the Max.
+ * 
+ */ +l_ok +pixFindLargestRectangle(PIX *pixs, + l_int32 polarity, + BOX **pbox, + PIX **ppixdb) +{ +l_int32 i, j, w, h, d, wpls, val; +l_int32 wp, hp, w1, w2, h1, h2, wmin, hmin, area1, area2; +l_int32 xmax, ymax; /* LR corner of the largest rectangle */ +l_int32 maxarea, wmax, hmax, vertdist, horizdist, prevfg; +l_int32 *lowestfg; +l_uint32 *datas, *lines; +l_uint32 **linew, **lineh; +BOX *box; +PIX *pixw, *pixh; /* keeps the width and height for the largest */ + /* rectangles whose LR corner is located there. */ + + PROCNAME("pixFindLargestRectangle"); + + if (ppixdb) *ppixdb = NULL; + if (!pbox) + return ERROR_INT("&box not defined", procName, 1); + *pbox = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1) + return ERROR_INT("pixs not 1 bpp", procName, 1); + if (polarity != 0 && polarity != 1) + return ERROR_INT("invalid polarity", procName, 1); + + /* Initialize lowest "fg" seen so far for each column */ + lowestfg = (l_int32 *)LEPT_CALLOC(w, sizeof(l_int32)); + for (i = 0; i < w; i++) + lowestfg[i] = -1; + + /* The combination (val ^ polarity) is the color for which we + * are searching for the maximum rectangle. For polarity == 0, + * we search in the bg (white). */ + pixw = pixCreate(w, h, 32); /* stores width */ + pixh = pixCreate(w, h, 32); /* stores height */ + linew = (l_uint32 **)pixGetLinePtrs(pixw, NULL); + lineh = (l_uint32 **)pixGetLinePtrs(pixh, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + maxarea = xmax = ymax = wmax = hmax = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + prevfg = -1; + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(lines, j); + if ((val ^ polarity) == 0) { /* bg (0) if polarity == 0, etc. */ + if (i == 0 && j == 0) { + wp = hp = 1; + } else if (i == 0) { + wp = linew[i][j - 1] + 1; + hp = 1; + } else if (j == 0) { + wp = 1; + hp = lineh[i - 1][j] + 1; + } else { + /* Expand #1 prev rectangle down */ + w1 = linew[i - 1][j]; + h1 = lineh[i - 1][j]; + horizdist = j - prevfg; + wmin = L_MIN(w1, horizdist); /* width of new rectangle */ + area1 = wmin * (h1 + 1); + + /* Expand #2 prev rectangle to right */ + w2 = linew[i][j - 1]; + h2 = lineh[i][j - 1]; + vertdist = i - lowestfg[j]; + hmin = L_MIN(h2, vertdist); /* height of new rectangle */ + area2 = hmin * (w2 + 1); + + if (area1 > area2) { + wp = wmin; + hp = h1 + 1; + } else { + wp = w2 + 1; + hp = hmin; + } + } + } else { /* fg (1) if polarity == 0; bg (0) if polarity == 1 */ + prevfg = j; + lowestfg[j] = i; + wp = hp = 0; + } + linew[i][j] = wp; + lineh[i][j] = hp; + if (wp * hp > maxarea) { + maxarea = wp * hp; + xmax = j; + ymax = i; + wmax = wp; + hmax = hp; + } + } + } + + /* Translate from LR corner to Box coords (UL corner, w, h) */ + box = boxCreate(xmax - wmax + 1, ymax - hmax + 1, wmax, hmax); + *pbox = box; + + if (ppixdb) { + *ppixdb = pixConvertTo8(pixs, TRUE); + pixRenderHashBoxArb(*ppixdb, box, 6, 2, L_NEG_SLOPE_LINE, 1, 255, 0, 0); + } + + LEPT_FREE(linew); + LEPT_FREE(lineh); + LEPT_FREE(lowestfg); + pixDestroy(&pixw); + pixDestroy(&pixh); + return 0; +} + + +/*---------------------------------------------------------------------* + * Generate rectangle inside connected component * + *---------------------------------------------------------------------*/ +/*! + * \brief pixFindRectangleInCC() + * + * \param[in] pixs 1 bpp, with sufficient closings to make the fg be + * a single c.c. that is a convex hull + * \param[in] boxs [optional] if NULL, %pixs should be a minimum + * container of a single c.c. + * \param[in] fract first and all consecutive lines found must be at + * least this fraction of the fast scan dimension + * \param[in] dir L_SCAN_HORIZONTAL, L_SCAN_VERTICAL; direction of + * fast scan + * \param[in] select L_GEOMETRIC_UNION, L_GEOMETRIC_INTERSECTION, + * L_LARGEST_AREA, L_SMALEST_AREA + * \param[in] debug if 1, generates output pdf showing intermediate + * computation and final result + * \return box of included rectangle, or NULL on error + * + *
+ * Notes:
+ *      (1) Computation is similar to pixFindLargestRectangle(), but allows
+ *          a different set of results to choose from.
+ *      (2) Select the fast scan direction.  Then, scanning in the slow
+ *          direction, finds the longest run of ON pixels in the fast
+ *          scan direction and look for the first first run that is longer
+ *          than %fract of the dimension.  Continues until a shorter run
+ *          is found.  This generates a box of ON pixels fitting into the c.c.
+ *      (3) Do this from both slow scan directions and use %select to get
+ *          a resulting box from these two.
+ *      (4) The extracted rectangle is not necessarily the largest that
+ *          can fit in the c.c.  To get that, use pixFindLargestRectangle().
+ */
+BOX *
+pixFindRectangleInCC(PIX       *pixs,
+                     BOX       *boxs,
+                     l_float32  fract,
+                     l_int32    dir,
+                     l_int32    select,
+                     l_int32    debug)
+{
+l_int32  x, y, i, j, w, h, w1, h1, w2, h2, found, res;
+l_int32  xfirst, xlast, xstart, yfirst, ylast, length;
+BOX     *box1, *box2, *box3, *box4, *box5;
+PIX     *pix1, *pix2, *pixdb1, *pixdb2;
+PIXA    *pixadb;
+
+    PROCNAME("pixFindRectangleInCC");
+
+    if (!pixs || pixGetDepth(pixs) != 1)
+        return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL);
+    if (fract <= 0.0 || fract > 1.0)
+        return (BOX *)ERROR_PTR("invalid fraction", procName, NULL);
+    if (dir != L_SCAN_VERTICAL && dir != L_SCAN_HORIZONTAL)
+        return (BOX *)ERROR_PTR("invalid scan direction", procName, NULL);
+    if (select != L_GEOMETRIC_UNION && select != L_GEOMETRIC_INTERSECTION &&
+        select != L_LARGEST_AREA && select != L_SMALLEST_AREA)
+        return (BOX *)ERROR_PTR("invalid select", procName, NULL);
+
+        /* Extract the c.c. if necessary */
+    x = y = 0;
+    if (boxs) {
+        pix1 = pixClipRectangle(pixs, boxs, NULL);
+        boxGetGeometry(boxs, &x, &y, NULL, NULL);
+    } else {
+        pix1 = pixClone(pixs);
+    }
+
+        /* All fast scans are horizontal; rotate 90 deg cw if necessary */
+    if (dir == L_SCAN_VERTICAL)
+        pix2 = pixRotate90(pix1, 1);
+    else  /* L_SCAN_HORIZONTAL */
+        pix2 = pixClone(pix1);
+    pixGetDimensions(pix2, &w, &h, NULL);
+
+    pixadb = (debug) ? pixaCreate(0) : NULL;
+    pixdb1 = NULL;
+    if (pixadb) {
+        lept_mkdir("lept/rect");
+        pixaAddPix(pixadb, pix1, L_CLONE);
+        pixdb1 = pixConvertTo32(pix2);
+    }
+    pixDestroy(&pix1);
+
+        /* Scanning down, find the first scanline with a long enough run.
+         * That run goes from (xfirst, yfirst) to (xlast, yfirst).  */
+    found = FALSE;
+    for (i = 0; i < h; i++) {
+        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
+        if (length >= (l_int32)(fract * w + 0.5)) {
+            yfirst = i;
+            xfirst = xstart;
+            xlast = xfirst + length - 1;
+            found = TRUE;
+            break;
+        }
+    }
+    if (!found) {
+        L_WARNING("no run of sufficient size was found\n", procName);
+        pixDestroy(&pix2);
+        pixDestroy(&pixdb1);
+        pixaDestroy(&pixadb);
+        return NULL;
+    }
+
+         /* Continue down until the condition fails */
+    w1 = xlast - xfirst + 1;
+    h1 = h - yfirst;  /* initialize */
+    for (i = yfirst + 1; i < h; i++) {
+        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
+        if (xstart > xfirst || (xstart + length - 1 < xlast) ||
+            i == h - 1) {
+            ylast = i - 1;
+            h1 = ylast - yfirst + 1;
+            break;
+        }
+    }
+    box1 = boxCreate(xfirst, yfirst, w1, h1);
+
+        /* Scanning up, find the first scanline with a long enough run.
+         * That run goes from (xfirst, ylast) to (xlast, ylast).  */
+    for (i = h - 1; i >= 0; i--) {
+        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
+        if (length >= (l_int32)(fract * w + 0.5)) {
+            ylast = i;
+            xfirst = xstart;
+            xlast = xfirst + length - 1;
+            break;
+        }
+    }
+
+         /* Continue up until the condition fails */
+    w2 = xlast - xfirst + 1;
+    h2 = ylast + 1;  /* initialize */
+    for (i = ylast - 1; i >= 0; i--) {
+        pixFindMaxHorizontalRunOnLine(pix2, i, &xstart, &length);
+        if (xstart > xfirst || (xstart + length - 1 < xlast) ||
+            i == 0) {
+            yfirst = i + 1;
+            h2 = ylast - yfirst + 1;
+            break;
+        }
+    }
+    box2 = boxCreate(xfirst, yfirst, w2, h2);
+    pixDestroy(&pix2);
+
+    if (pixadb) {
+        pixRenderBoxArb(pixdb1, box1, 2, 255, 0, 0);
+        pixRenderBoxArb(pixdb1, box2, 2, 0, 255, 0);
+        pixaAddPix(pixadb, pixdb1, L_INSERT);
+    }
+
+        /* Select the final result from the two boxes */
+    if (select == L_GEOMETRIC_UNION)
+        box3 = boxBoundingRegion(box1, box2);
+    else if (select == L_GEOMETRIC_INTERSECTION)
+        box3 = boxOverlapRegion(box1, box2);
+    else if (select == L_LARGEST_AREA)
+        box3 = (w1 * h1 >= w2 * h2) ? boxCopy(box1) : boxCopy(box2);
+    else  /* select == L_SMALLEST_AREA) */
+        box3 = (w1 * h1 <= w2 * h2) ? boxCopy(box1) : boxCopy(box2);
+    boxDestroy(&box1);
+    boxDestroy(&box2);
+
+        /* Rotate the box 90 degrees ccw if necessary */
+    box4 = NULL;
+    if (box3) {
+        if (dir == L_SCAN_VERTICAL)
+            box4 = boxRotateOrth(box3, w, h, 3);
+        else
+            box4 = boxCopy(box3);
+    }
+
+        /* Transform back to global coordinates if %boxs exists */
+    box5 = (box4) ? boxTransform(box4, x, y, 1.0, 1.0) : NULL;
+    boxDestroy(&box3);
+    boxDestroy(&box4);
+
+        /* Debug output */
+    if (pixadb) {
+        pixdb1 = pixConvertTo8(pixs, 0);
+        pixAddConstantGray(pixdb1, 190);
+        pixdb2 = pixConvertTo32(pixdb1);
+        if (box5) pixRenderBoxArb(pixdb2, box5, 4, 0, 0, 255);
+        pixaAddPix(pixadb, pixdb2, L_INSERT);
+        res = pixGetXRes(pixs);
+        L_INFO("Writing debug files to /tmp/lept/rect/\n", procName);
+        pixaConvertToPdf(pixadb, res, 1.0, L_DEFAULT_ENCODE, 75, NULL,
+                        "/tmp/lept/rect/fitrect.pdf");
+        pix1 = pixaDisplayTiledAndScaled(pixadb, 32, 800, 1, 0, 40, 2);
+        pixWrite("/tmp/lept/rect/fitrect.png", pix1, IFF_PNG);
+        pixDestroy(&pix1);
+        pixDestroy(&pixdb1);
+        pixaDestroy(&pixadb);
+    }
+
+    return box5;
+}
+
diff --git a/3rdparty/hgOCR/leptonica/paintcmap.c b/3rdparty/hgOCR/leptonica/paintcmap.c
new file mode 100644
index 00000000..1e919e01
--- /dev/null
+++ b/3rdparty/hgOCR/leptonica/paintcmap.c
@@ -0,0 +1,761 @@
+/*====================================================================*
+ -  Copyright (C) 2001 Leptonica.  All rights reserved.
+ -
+ -  Redistribution and use in source and binary forms, with or without
+ -  modification, are permitted provided that the following conditions
+ -  are met:
+ -  1. Redistributions of source code must retain the above copyright
+ -     notice, this list of conditions and the following disclaimer.
+ -  2. Redistributions in binary form must reproduce the above
+ -     copyright notice, this list of conditions and the following
+ -     disclaimer in the documentation and/or other materials
+ -     provided with the distribution.
+ -
+ -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ -  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ -  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ -  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ANY
+ -  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ -  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ -  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ -  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ -  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ -  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ -  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *====================================================================*/
+
+/*!
+ * \file paintcmap.c
+ * 
+ *
+ *      These in-place functions paint onto colormap images.
+ *
+ *      Repaint selected pixels in region
+ *           l_int32     pixSetSelectCmap()
+ *
+ *      Repaint non-white pixels in region
+ *           l_int32     pixColorGrayRegionsCmap()
+ *           l_int32     pixColorGrayCmap()
+ *           l_int32     pixColorGrayMaskedCmap()
+ *           l_int32     addColorizedGrayToCmap()
+ *
+ *      Repaint selected pixels through mask
+ *           l_int32     pixSetSelectMaskedCmap()
+ *
+ *      Repaint all pixels through mask
+ *           l_int32     pixSetMaskedCmap()
+ *
+ *
+ *  The 'set select' functions condition the setting on a specific
+ *  pixel value (i.e., index into the colormap) of the underyling
+ *  Pix that is being modified.  The same conditioning is used in
+ *  pixBlendCmap().
+ *
+ *  The pixColorGrayCmap() function sets all truly gray (r = g = b) pixels,
+ *  with the exception of either black or white pixels, to a new color.
+ *
+ *  The pixSetSelectMaskedCmap() function conditions pixel painting
+ *  on both a specific pixel value and location within the fg mask.
+ *  By contrast, pixSetMaskedCmap() sets all pixels under the
+ *  mask foreground, without considering the initial pixel values.
+ * 
+ */ + +#include +#include "allheaders.h" + +/*-------------------------------------------------------------* + * Repaint selected pixels in region * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetSelectCmap() + * + * \param[in] pixs 1, 2, 4 or 8 bpp, with colormap + * \param[in] box [optional] region to set color; can be NULL + * \param[in] sindex colormap index of pixels to be changed + * \param[in] rval, gval, bval new color to paint + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) It sets all pixels in region that have the color specified
+ *          by the colormap index %sindex to the new color.
+ *      (3) %sindex must be in the existing colormap; otherwise an
+ *          error is returned.
+ *      (4) If the new color exists in the colormap, it is used;
+ *          otherwise, it is added to the colormap.  If it cannot be
+ *          added because the colormap is full, an error is returned.
+ *      (5) If %box is NULL, applies function to the entire image; otherwise,
+ *          clips the operation to the intersection of the box and pix.
+ *      (6) An example of use would be to set to a specific color all
+ *          the light (background) pixels within a certain region of
+ *          a 3-level 2 bpp image, while leaving light pixels outside
+ *          this region unchanged.
+ * 
+ */ +l_ok +pixSetSelectCmap(PIX *pixs, + BOX *box, + l_int32 sindex, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, w, h, d, n, x1, y1, x2, y2, bw, bh, val, wpls; +l_int32 index; /* of new color to be set */ +l_uint32 *lines, *datas; +PIXCMAP *cmap; + + PROCNAME("pixSetSelectCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap", procName, 1); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8) + return ERROR_INT("depth not in {1,2,4,8}", procName, 1); + + /* Add new color if necessary; get index of this color in cmap */ + n = pixcmapGetCount(cmap); + if (sindex >= n) + return ERROR_INT("sindex too large; no cmap entry", procName, 1); + if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ + if (pixcmapAddColor(cmap, rval, gval, bval)) + return ERROR_INT("error adding cmap entry", procName, 1); + else + index = n; /* we've added one color */ + } + + /* Determine the region of substitution */ + pixGetDimensions(pixs, &w, &h, NULL); + if (!box) { + x1 = y1 = 0; + x2 = w; + y2 = h; + } else { + boxGetGeometry(box, &x1, &y1, &bw, &bh); + x2 = x1 + bw - 1; + y2 = y1 + bh - 1; + } + + /* Replace pixel value sindex by index in the region */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + for (i = y1; i <= y2; i++) { + if (i < 0 || i >= h) /* clip */ + continue; + lines = datas + i * wpls; + for (j = x1; j <= x2; j++) { + if (j < 0 || j >= w) /* clip */ + continue; + switch (d) { + case 1: + val = GET_DATA_BIT(lines, j); + if (val == sindex) { + if (index == 0) + CLEAR_DATA_BIT(lines, j); + else + SET_DATA_BIT(lines, j); + } + break; + case 2: + val = GET_DATA_DIBIT(lines, j); + if (val == sindex) + SET_DATA_DIBIT(lines, j, index); + break; + case 4: + val = GET_DATA_QBIT(lines, j); + if (val == sindex) + SET_DATA_QBIT(lines, j, index); + break; + case 8: + val = GET_DATA_BYTE(lines, j); + if (val == sindex) + SET_DATA_BYTE(lines, j, index); + break; + default: + return ERROR_INT("depth not in {1,2,4,8}", procName, 1); + } + } + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Repaint gray pixels in region * + *-------------------------------------------------------------*/ +/*! + * \brief pixColorGrayRegionsCmap() + * + * \param[in] pixs 8 bpp, with colormap + * \param[in] boxa of regions in which to apply color + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] rval, gval, bval target color + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
+ *          preserving antialiasing.
+ *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
+ *          preserving antialiasing.  See pixColorGrayCmap() for details.
+ *      (3) This can also be called through pixColorGrayRegions().
+ *      (4) This increases the colormap size by the number of
+ *          different gray (non-black or non-white) colors in the
+ *          selected regions of pixs.  If there is not enough room in
+ *          the colormap for this expansion, it returns 1 (error),
+ *          and the caller should check the return value.
+ *      (5) Because two boxes in %boxa can overlap, pixels that
+ *          are colorized in the first box must be excluded in the
+ *          second because their value exceeds the size of the map.
+ * 
+ */ +l_ok +pixColorGrayRegionsCmap(PIX *pixs, + BOXA *boxa, + l_int32 type, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, k, w, h, n, nc, x1, y1, x2, y2, bw, bh, wpl; +l_int32 val, nval; +l_int32 *map; +l_uint32 *line, *data; +BOX *box; +NUMA *na; +PIXCMAP *cmap; + + PROCNAME("pixColorGrayRegionsCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap", procName, 1); + if (pixGetDepth(pixs) != 8) + return ERROR_INT("depth not 8 bpp", procName, 1); + if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) + return ERROR_INT("invalid type", procName, 1); + + nc = pixcmapGetCount(cmap); + if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) + return ERROR_INT("no room; cmap full", procName, 1); + map = numaGetIArray(na); + numaDestroy(&na); + if (!map) + return ERROR_INT("map not made", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + n = boxaGetCount(boxa); + for (k = 0; k < n; k++) { + box = boxaGetBox(boxa, k, L_CLONE); + boxGetGeometry(box, &x1, &y1, &bw, &bh); + x2 = x1 + bw - 1; + y2 = y1 + bh - 1; + + /* Remap gray pixels in the region */ + for (i = y1; i <= y2; i++) { + if (i < 0 || i >= h) /* clip */ + continue; + line = data + i * wpl; + for (j = x1; j <= x2; j++) { + if (j < 0 || j >= w) /* clip */ + continue; + val = GET_DATA_BYTE(line, j); + if (val >= nc) continue; /* from overlapping b.b. */ + nval = map[val]; + if (nval != 256) + SET_DATA_BYTE(line, j, nval); + } + } + boxDestroy(&box); + } + + LEPT_FREE(map); + return 0; +} + + +/*! + * \brief pixColorGrayCmap() + * + * \param[in] pixs 2, 4 or 8 bpp, with colormap + * \param[in] box [optional] region to set color; can be NULL + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] rval, gval, bval target color + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
+ *          preserving antialiasing.
+ *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
+ *          preserving antialiasing.
+ *      (3) %box gives the region to apply color; if NULL, this
+ *          colorizes the entire image.
+ *      (4) If the cmap is only 2 or 4 bpp, pixs is converted in-place
+ *          to an 8 bpp cmap.  A 1 bpp cmap is not a valid input pix.
+ *      (5) This can also be called through pixColorGray().
+ *      (6) This operation increases the colormap size by the number of
+ *          different gray (non-black or non-white) colors in the
+ *          input colormap.  If there is not enough room in the colormap
+ *          for this expansion, it returns 1 (error), and the caller
+ *          should check the return value.
+ *      (7) Using the darkness of each original pixel in the rect,
+ *          it generates a new color (based on the input rgb values).
+ *          If %type == L_PAINT_LIGHT, the new color is a (generally)
+ *          darken-to-black version of the input rgb color, where the
+ *          amount of darkening increases with the darkness of the
+ *          original pixel color.
+ *          If %type == L_PAINT_DARK, the new color is a (generally)
+ *          faded-to-white version of the input rgb color, where the
+ *          amount of fading increases with the brightness of the
+ *          original pixel color.
+ * 
+ */ +l_ok +pixColorGrayCmap(PIX *pixs, + BOX *box, + l_int32 type, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 w, h, d, ret; +PIX *pixt; +BOXA *boxa; +PIXCMAP *cmap; + + PROCNAME("pixColorGrayCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return ERROR_INT("depth not in {2, 4, 8}", procName, 1); + if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) + return ERROR_INT("invalid type", procName, 1); + + /* If 2 bpp or 4 bpp, convert in-place to 8 bpp. */ + if (d == 2 || d == 4) { + pixt = pixConvertTo8(pixs, 1); + pixTransferAllData(pixs, &pixt, 0, 0); + } + + /* If box == NULL, color the entire image */ + boxa = boxaCreate(1); + if (box) { + boxaAddBox(boxa, box, L_COPY); + } else { + box = boxCreate(0, 0, w, h); + boxaAddBox(boxa, box, L_INSERT); + } + ret = pixColorGrayRegionsCmap(pixs, boxa, type, rval, gval, bval); + + boxaDestroy(&boxa); + return ret; +} + + +/*! + * \brief pixColorGrayMaskedCmap() + * + * \param[in] pixs 8 bpp, with colormap + * \param[in] pixm 1 bpp mask, through which to apply color + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] rval, gval, bval target color + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
+ *          preserving antialiasing.
+ *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
+ *          preserving antialiasing.  See pixColorGrayCmap() for details.
+ *      (3) This increases the colormap size by the number of
+ *          different gray (non-black or non-white) colors in the
+ *          input colormap.  If there is not enough room in the colormap
+ *          for this expansion, it returns 1 (error).
+ * 
+ */ +l_ok +pixColorGrayMaskedCmap(PIX *pixs, + PIX *pixm, + l_int32 type, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, w, h, wm, hm, wmin, hmin, wpl, wplm; +l_int32 val, nval; +l_int32 *map; +l_uint32 *line, *data, *linem, *datam; +NUMA *na; +PIXCMAP *cmap; + + PROCNAME("pixColorGrayMaskedCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm undefined or not 1 bpp", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap", procName, 1); + if (pixGetDepth(pixs) != 8) + return ERROR_INT("depth not 8 bpp", procName, 1); + if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) + return ERROR_INT("invalid type", procName, 1); + + if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) + return ERROR_INT("no room; cmap full", procName, 1); + map = numaGetIArray(na); + numaDestroy(&na); + if (!map) + return ERROR_INT("map not made", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + pixGetDimensions(pixm, &wm, &hm, NULL); + if (wm != w) + L_WARNING("wm = %d differs from w = %d\n", procName, wm, w); + if (hm != h) + L_WARNING("hm = %d differs from h = %d\n", procName, hm, h); + wmin = L_MIN(w, wm); + hmin = L_MIN(h, hm); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + + /* Remap gray pixels in the region */ + for (i = 0; i < hmin; i++) { + line = data + i * wpl; + linem = datam + i * wplm; + for (j = 0; j < wmin; j++) { + if (GET_DATA_BIT(linem, j) == 0) + continue; + val = GET_DATA_BYTE(line, j); + nval = map[val]; + if (nval != 256) + SET_DATA_BYTE(line, j, nval); + } + } + + LEPT_FREE(map); + return 0; +} + + +/*! + * \brief addColorizedGrayToCmap() + * + * \param[in] cmap from 2 or 4 bpp pix + * \param[in] type L_PAINT_LIGHT, L_PAINT_DARK + * \param[in] rval, gval, bval target color + * \param[out] pna [optional] table for mapping new cmap entries + * \return 0 if OK; 1 on error; 2 if new colors will not fit in cmap. + * + *
+ * Notes:
+ *      (1) If %type == L_PAINT_LIGHT, it colorizes non-black pixels,
+ *          preserving antialiasing.
+ *          If %type == L_PAINT_DARK, it colorizes non-white pixels,
+ *          preserving antialiasing.
+ *      (2) This increases the colormap size by the number of
+ *          different gray (non-black or non-white) colors in the
+ *          input colormap.  If there is not enough room in the colormap
+ *          for this expansion, it returns 1 (treated as a warning);
+ *          the caller should check the return value.
+ *      (3) This can be used to determine if the new colors will fit in
+ *          the cmap, using null for &na.  Returns 0 if they fit; 2 if
+ *          they don't fit.
+ *      (4) The mapping table contains, for each gray color found, the
+ *          index of the corresponding colorized pixel.  Non-gray
+ *          pixels are assigned the invalid index 256.
+ *      (5) See pixColorGrayCmap() for usage.
+ * 
+ */ +l_ok +addColorizedGrayToCmap(PIXCMAP *cmap, + l_int32 type, + l_int32 rval, + l_int32 gval, + l_int32 bval, + NUMA **pna) +{ +l_int32 i, n, erval, egval, ebval, nrval, ngval, nbval, newindex; +NUMA *na; + + PROCNAME("addColorizedGrayToCmap"); + + if (pna) *pna = NULL; + if (!cmap) + return ERROR_INT("cmap not defined", procName, 1); + if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) + return ERROR_INT("invalid type", procName, 1); + + n = pixcmapGetCount(cmap); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pixcmapGetColor(cmap, i, &erval, &egval, &ebval); + if (type == L_PAINT_LIGHT) { + if (erval == egval && erval == ebval && erval != 0) { + nrval = (l_int32)(rval * (l_float32)erval / 255.); + ngval = (l_int32)(gval * (l_float32)egval / 255.); + nbval = (l_int32)(bval * (l_float32)ebval / 255.); + if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { + numaDestroy(&na); + L_WARNING("no room; colormap full\n", procName); + return 2; + } + numaAddNumber(na, newindex); + } else { + numaAddNumber(na, 256); /* invalid number; not gray */ + } + } else { /* L_PAINT_DARK */ + if (erval == egval && erval == ebval && erval != 255) { + nrval = rval + + (l_int32)((255. - rval) * (l_float32)erval / 255.); + ngval = gval + + (l_int32)((255. - gval) * (l_float32)egval / 255.); + nbval = bval + + (l_int32)((255. - bval) * (l_float32)ebval / 255.); + if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { + numaDestroy(&na); + L_WARNING("no room; colormap full\n", procName); + return 2; + } + numaAddNumber(na, newindex); + } else { + numaAddNumber(na, 256); /* invalid number; not gray */ + } + } + } + + if (pna) + *pna = na; + else + numaDestroy(&na); + return 0; +} + + +/*-------------------------------------------------------------* + * Repaint selected pixels through mask * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetSelectMaskedCmap() + * + * \param[in] pixs 2, 4 or 8 bpp, with colormap + * \param[in] pixm [optional] 1 bpp mask; no-op if NULL + * \param[in] x, y UL corner of mask relative to pixs + * \param[in] sindex cmap index of pixels in pixs to be changed + * \param[in] rval, gval, bval new color to substitute + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) This paints through the fg of pixm and replaces all pixels
+ *          in pixs that have the value %sindex with the new color.
+ *      (3) If pixm == NULL, a warning is given.
+ *      (4) %sindex must be in the existing colormap; otherwise an
+ *          error is returned.
+ *      (5) If the new color exists in the colormap, it is used;
+ *          otherwise, it is added to the colormap.  If the colormap
+ *          is full, an error is returned.
+ * 
+ */ +l_ok +pixSetSelectMaskedCmap(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 sindex, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 i, j, w, h, d, n, wm, hm, wpls, wplm, val; +l_int32 index; /* of new color to be set */ +l_uint32 *lines, *linem, *datas, *datam; +PIXCMAP *cmap; + + PROCNAME("pixSetSelectMaskedCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap", procName, 1); + if (!pixm) { + L_WARNING("no mask; nothing to do\n", procName); + return 0; + } + + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return ERROR_INT("depth not in {2, 4, 8}", procName, 1); + + /* add new color if necessary; get index of this color in cmap */ + n = pixcmapGetCount(cmap); + if (sindex >= n) + return ERROR_INT("sindex too large; no cmap entry", procName, 1); + if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ + if (pixcmapAddColor(cmap, rval, gval, bval)) + return ERROR_INT("error adding cmap entry", procName, 1); + else + index = n; /* we've added one color */ + } + + /* replace pixel value sindex by index when fg pixel in pixmc + * overlays it */ + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wm = pixGetWidth(pixm); + hm = pixGetHeight(pixm); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + for (i = 0; i < hm; i++) { + if (i + y < 0 || i + y >= h) continue; + lines = datas + (y + i) * wpls; + linem = datam + i * wplm; + for (j = 0; j < wm; j++) { + if (j + x < 0 || j + x >= w) continue; + if (GET_DATA_BIT(linem, j)) { + switch (d) { + case 2: + val = GET_DATA_DIBIT(lines, x + j); + if (val == sindex) + SET_DATA_DIBIT(lines, x + j, index); + break; + case 4: + val = GET_DATA_QBIT(lines, x + j); + if (val == sindex) + SET_DATA_QBIT(lines, x + j, index); + break; + case 8: + val = GET_DATA_BYTE(lines, x + j); + if (val == sindex) + SET_DATA_BYTE(lines, x + j, index); + break; + default: + return ERROR_INT("depth not in {1,2,4,8}", procName, 1); + } + } + } + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Repaint all pixels through mask * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetMaskedCmap() + * + * \param[in] pixs 2, 4 or 8 bpp, colormapped + * \param[in] pixm [optional] 1 bpp mask; no-op if NULL + * \param[in] x, y origin of pixm relative to pixs; + * can be negative + * \param[in] rval, gval, bval new color to set at each masked pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) It paints a single color through the mask (as a stencil).
+ *      (3) The mask origin is placed at (%x,%y) on %pixs, and the
+ *          operation is clipped to the intersection of the mask and pixs.
+ *      (4) If %pixm == NULL, a warning is given.
+ *      (5) Typically, %pixm is a small binary mask located somewhere
+ *          on the larger %pixs.
+ *      (6) If the color is in the colormap, it is used.  Otherwise,
+ *          it is added if possible; an error is returned if the
+ *          colormap is already full.
+ * 
+ */ +l_ok +pixSetMaskedCmap(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 w, h, d, wpl, wm, hm, wplm; +l_int32 i, j, index; +l_uint32 *data, *datam, *line, *linem; +PIXCMAP *cmap; + + PROCNAME("pixSetMaskedCmap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if ((cmap = pixGetColormap(pixs)) == NULL) + return ERROR_INT("no colormap in pixs", procName, 1); + if (!pixm) { + L_WARNING("no mask; nothing to do\n", procName); + return 0; + } + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return ERROR_INT("depth not in {2,4,8}", procName, 1); + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + + /* Add new color if necessary; store in 'index' */ + if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ + if (pixcmapAddColor(cmap, rval, gval, bval)) + return ERROR_INT("no room in cmap", procName, 1); + index = pixcmapGetCount(cmap) - 1; + } + + pixGetDimensions(pixs, &w, &h, NULL); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + pixGetDimensions(pixm, &wm, &hm, NULL); + wplm = pixGetWpl(pixm); + datam = pixGetData(pixm); + for (i = 0; i < hm; i++) { + if (i + y < 0 || i + y >= h) continue; + line = data + (i + y) * wpl; + linem = datam + i * wplm; + for (j = 0; j < wm; j++) { + if (j + x < 0 || j + x >= w) continue; + if (GET_DATA_BIT(linem, j)) { /* paint color */ + switch (d) { + case 2: + SET_DATA_DIBIT(line, j + x, index); + break; + case 4: + SET_DATA_QBIT(line, j + x, index); + break; + case 8: + SET_DATA_BYTE(line, j + x, index); + break; + default: + return ERROR_INT("depth not in {2,4,8}", procName, 1); + } + } + } + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/parseprotos.c b/3rdparty/hgOCR/leptonica/parseprotos.c new file mode 100644 index 00000000..17db265f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/parseprotos.c @@ -0,0 +1,975 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * \file parseprotos.c + *
+ *
+ *       char             *parseForProtos()
+ *
+ *    Static helpers
+ *       static l_int32    getNextNonCommentLine()
+ *       static l_int32    getNextNonBlankLine()
+ *       static l_int32    getNextNonDoubleSlashLine()
+ *       static l_int32    searchForProtoSignature()
+ *       static char      *captureProtoSignature()
+ *       static char      *cleanProtoSignature()
+ *       static l_int32    skipToEndOfFunction()
+ *       static l_int32    skipToMatchingBrace()
+ *       static l_int32    skipToSemicolon()
+ *       static l_int32    getOffsetForCharacter()
+ *       static l_int32    getOffsetForMatchingRP()
+ * 
+ */ + +#include +#include "allheaders.h" + +//static const l_int32 Bufsize = 2048; /* max token size */ +#define Bufsize 2048 + +static l_int32 getNextNonCommentLine(SARRAY *sa, l_int32 start, l_int32 *pnext); +static l_int32 getNextNonBlankLine(SARRAY *sa, l_int32 start, l_int32 *pnext); +static l_int32 getNextNonDoubleSlashLine(SARRAY *sa, l_int32 start, + l_int32 *pnext); +static l_int32 searchForProtoSignature(SARRAY *sa, l_int32 begin, + l_int32 *pstart, l_int32 *pstop, l_int32 *pcharindex, + l_int32 *pfound); +static char * captureProtoSignature(SARRAY *sa, l_int32 start, l_int32 stop, + l_int32 charindex); +static char * cleanProtoSignature(char *str); +static l_int32 skipToEndOfFunction(SARRAY *sa, l_int32 start, + l_int32 charindex, l_int32 *pnext); +static l_int32 skipToMatchingBrace(SARRAY *sa, l_int32 start, + l_int32 lbindex, l_int32 *prbline, l_int32 *prbindex); +static l_int32 skipToSemicolon(SARRAY *sa, l_int32 start, + l_int32 charindex, l_int32 *pnext); +static l_int32 getOffsetForCharacter(SARRAY *sa, l_int32 start, char tchar, + l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); +static l_int32 getOffsetForMatchingRP(SARRAY *sa, l_int32 start, + l_int32 soffsetlp, l_int32 boffsetlp, l_int32 toffsetlp, + l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); + + +/* + * \brief parseForProtos() + * + * \param[in] filein output of cpp + * \param[in] prestring [optional] string that prefaces each decl; + * use NULL to omit + * \return parsestr string of function prototypes, or NULL on error + * + *
+ * Notes:
+ *      (1) We parse the output of cpp:
+ *              cpp -ansi 
+ *          Three plans were attempted, with success on the third.
+ *      (2) Plan 1.  A cursory examination of the cpp output indicated that
+ *          every function was preceded by a cpp comment statement.
+ *          So we just need to look at statements beginning after comments.
+ *          Unfortunately, this is NOT the case.  Some functions start
+ *          without cpp comment lines, typically when there are no
+ *          comments in the source that immediately precede the function.
+ *      (3) Plan 2.  Consider the keywords in the language that start
+ *          parts of the cpp file.  Some, like 'enum', 'union' and
+ *          'struct', are followed after a while by '{', and eventually
+ *          end with '}, plus an optional token and a final ';'.
+ *          Others, like 'extern', 'static' and 'typedef', are never
+ *          the beginnings of global function definitions.   Function
+ *          prototypes have one or more sets of '(' followed eventually
+ *          by a ')', and end with ';'.  But function definitions have
+ *          tokens, followed by '(', more tokens, ')' and then
+ *          immediately a '{'.  We would generate a prototype from this
+ *          by adding a ';' to all tokens up to the ')'.  So we use
+ *          these special tokens to decide what we are parsing.  And
+ *          whenever a function definition is found and the prototype
+ *          extracted, we skip through the rest of the function
+ *          past the corresponding '}'.  This token ends a line, and
+ *          is often on a line of its own.  But as it turns out,
+ *          the only keyword we need to consider is 'static'.
+ *      (4) Plan 3.  Consider the parentheses and braces for various
+ *          declarations.  A struct, enum, or union has a pair of
+ *          braces followed by a semicolon.  With the exception of an
+ *          __attribute__ declaration for a struct, they cannot have parentheses
+ *          before the left brace, but a struct can have lots of parentheses
+ *          within the brace set.  A function prototype has no braces.
+ *          A function declaration can have sets of left and right
+ *          parentheses, but these are followed by a left brace.
+ *          So plan 3 looks at the way parentheses and braces are
+ *          organized.  Once the beginning of a function definition
+ *          is found, the prototype is extracted and we search for
+ *          the ending right brace.
+ *      (5) To find the ending right brace, it is necessary to do some
+ *          careful parsing.  For example, in this file, we have
+ *          left and right braces as characters, and these must not
+ *          be counted.  Somewhat more tricky, the file fhmtauto.c
+ *          generates code, and includes a right brace in a string.
+ *          So we must not include braces that are in strings.  But how
+ *          do we know if something is inside a string?  Keep state,
+ *          starting with not-inside, and every time you hit a double quote
+ *          that is not escaped, toggle the condition.  Any brace
+ *          found in the state of being within a string is ignored.
+ *      (6) When a prototype is extracted, it is put in a canonical
+ *          form (i.e., cleaned up).  Finally, we check that it is
+ *          not static and save it.  (If static, it is ignored).
+ *      (7) The %prestring for unix is NULL; it is included here so that
+ *          you can use Microsoft's declaration for importing or
+ *          exporting to a dll.  See environ.h for examples of use.
+ *          Here, we set: %prestring = "LEPT_DLL ".  Note in particular
+ *          the space character that will separate 'LEPT_DLL' from
+ *          the standard unix prototype that follows.
+ * 
+ */ +char * +parseForProtos(const char *filein, + const char *prestring) +{ +char *strdata, *str, *newstr, *parsestr, *secondword; +l_int32 start, next, stop, charindex, found; +size_t nbytes; +SARRAY *sa, *saout, *satest; + + PROCNAME("parseForProtos"); + + if (!filein) + return (char *)ERROR_PTR("filein not defined", procName, NULL); + + /* Read in the cpp output into memory, one string for each + * line in the file, omitting blank lines. */ + strdata = (char *)l_binaryRead(filein, &nbytes); + sa = sarrayCreateLinesFromString(strdata, 0); + + saout = sarrayCreate(0); + next = 0; + while (1) { /* repeat after each non-static prototype is extracted */ + searchForProtoSignature(sa, next, &start, &stop, &charindex, &found); + if (!found) + break; +/* fprintf(stderr, " start = %d, stop = %d, charindex = %d\n", + start, stop, charindex); */ + str = captureProtoSignature(sa, start, stop, charindex); + + /* Make sure that the signature found by cpp does not begin with + * static, extern or typedef. We get 'extern' declarations + * from header files, and with some versions of cpp running on + * #include we get something of the form: + * extern ... (( ... )) ... ( ... ) { ... + * For this, the 1st '(' is the lp, the 2nd ')' is the rp, + * and there is a lot of garbage between the rp and the lp. + * It is easiest to simply reject any signature that starts + * with 'extern'. Note also that an 'extern' token has been + * prepended to each prototype, so the 'static' or + * 'extern' keywords we are looking for, if they exist, + * would be the second word. We also have a typedef in + * bmpio.c that has the form: + * typedef struct __attribute__((....)) { ...} ... ; + * This is avoided by blacklisting 'typedef' along with 'extern' + * and 'static'. */ + satest = sarrayCreateWordsFromString(str); + secondword = sarrayGetString(satest, 1, L_NOCOPY); + if (strcmp(secondword, "static") && /* not static */ + strcmp(secondword, "extern") && /* not extern */ + strcmp(secondword, "typedef")) { /* not typedef */ + if (prestring) { /* prepend it to the prototype */ + newstr = stringJoin(prestring, str); + sarrayAddString(saout, newstr, L_INSERT); + LEPT_FREE(str); + } else { + sarrayAddString(saout, str, L_INSERT); + } + } else { + LEPT_FREE(str); + } + sarrayDestroy(&satest); + + skipToEndOfFunction(sa, stop, charindex, &next); + if (next == -1) break; + } + + /* Flatten into a string with newlines between prototypes */ + parsestr = sarrayToString(saout, 1); + LEPT_FREE(strdata); + sarrayDestroy(&sa); + sarrayDestroy(&saout); + + return parsestr; +} + + +/* + * \brief getNextNonCommentLine() + * + * \param[in] sa output from cpp, by line) + * \param[in] start starting index to search) + * \param[out] pnext index of first uncommented line after the start line + * \return 0 if OK, o on error + * + *
+ * Notes:
+ *      (1) Skips over all consecutive comment lines, beginning at 'start'
+ *      (2) If all lines to the end are '#' comments, return next = -1
+ * 
+ */ +static l_int32 +getNextNonCommentLine(SARRAY *sa, + l_int32 start, + l_int32 *pnext) +{ +char *str; +l_int32 i, n; + + PROCNAME("getNextNonCommentLine"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pnext) + return ERROR_INT("&pnext not defined", procName, 1); + + /* Init for situation where this line and all following are comments */ + *pnext = -1; + + n = sarrayGetCount(sa); + for (i = start; i < n; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return ERROR_INT("str not returned; shouldn't happen", procName, 1); + if (str[0] != '#') { + *pnext = i; + return 0; + } + } + + return 0; +} + + +/* + * \brief getNextNonBlankLine() + * + * \param[in] sa output from cpp, by line + * \param[in] start starting index to search + * \param[out] pnext index of first nonblank line after the start line + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Skips over all consecutive blank lines, beginning at 'start'
+ *      (2) A blank line has only whitespace characters (' ', '\t', '\n', '\r')
+ *      (3) If all lines to the end are blank, return next = -1
+ * 
+ */ +static l_int32 +getNextNonBlankLine(SARRAY *sa, + l_int32 start, + l_int32 *pnext) +{ +char *str; +l_int32 i, j, n, len; + + PROCNAME("getNextNonBlankLine"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pnext) + return ERROR_INT("&pnext not defined", procName, 1); + + /* Init for situation where this line and all following are blank */ + *pnext = -1; + + n = sarrayGetCount(sa); + for (i = start; i < n; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return ERROR_INT("str not returned; shouldn't happen", procName, 1); + len = strlen(str); + for (j = 0; j < len; j++) { + if (str[j] != ' ' && str[j] != '\t' + && str[j] != '\n' && str[j] != '\r') { /* non-blank */ + *pnext = i; + return 0; + } + } + } + + return 0; +} + + +/* + * \brief getNextNonDoubleSlashLine() + * + * \param[in] sa output from cpp, by line + * \param[in] start starting index to search + * \param[out] pnext index of first uncommented line after the start line + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Skips over all consecutive '//' lines, beginning at 'start'
+ *      (2) If all lines to the end start with '//', return next = -1
+ * 
+ */ +static l_int32 +getNextNonDoubleSlashLine(SARRAY *sa, + l_int32 start, + l_int32 *pnext) +{ +char *str; +l_int32 i, n, len; + + PROCNAME("getNextNonDoubleSlashLine"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pnext) + return ERROR_INT("&pnext not defined", procName, 1); + + /* Init for situation where this line and all following + * start with '//' */ + *pnext = -1; + + n = sarrayGetCount(sa); + for (i = start; i < n; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return ERROR_INT("str not returned; shouldn't happen", procName, 1); + len = strlen(str); + if (len < 2 || str[0] != '/' || str[1] != '/') { + *pnext = i; + return 0; + } + } + + return 0; +} + + +/* + * \brief searchForProtoSignature() + * + * \param[in] sa output from cpp, by line + * \param[in] begin beginning index to search + * \param[out] pstart starting index for function definition + * \param[out] pstop index of line on which proto is completed + * \param[out] pcharindex char index of completing ')' character + * \param[out] pfound 1 if valid signature is found; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If this returns found == 0, it means that there are no
+ *          more function definitions in the file.  Caller must check
+ *          this value and exit the loop over the entire cpp file.
+ *      (2) This follows plan 3 (see above).  We skip comment and blank
+ *          lines at the beginning.  Then we don't check for keywords.
+ *          Instead, find the relative locations of the first occurrences
+ *          of these four tokens: left parenthesis (lp), right
+ *          parenthesis (rp), left brace (lb) and semicolon (sc).
+ *      (3) The signature of a function definition looks like this:
+ *               .... '(' .... ')' '{'
+ *          where the lp and rp must both precede the lb, with only
+ *          whitespace between the rp and the lb.  The '....'
+ *          are sets of tokens that have no braces.
+ *      (4) If a function definition is found, this returns found = 1,
+ *          with 'start' being the first line of the definition and
+ *          'charindex' being the position of the ')' in line 'stop'
+ *          at the end of the arg list.
+ * 
+ */ +static l_int32 +searchForProtoSignature(SARRAY *sa, + l_int32 begin, + l_int32 *pstart, + l_int32 *pstop, + l_int32 *pcharindex, + l_int32 *pfound) +{ +l_int32 next, rbline, rbindex, scline; +l_int32 soffsetlp, soffsetrp, soffsetlb, soffsetsc; +l_int32 boffsetlp, boffsetrp, boffsetlb, boffsetsc; +l_int32 toffsetlp, toffsetrp, toffsetlb, toffsetsc; + + PROCNAME("searchForProtoSignature"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pstart) + return ERROR_INT("&start not defined", procName, 1); + if (!pstop) + return ERROR_INT("&stop not defined", procName, 1); + if (!pcharindex) + return ERROR_INT("&charindex not defined", procName, 1); + if (!pfound) + return ERROR_INT("&found not defined", procName, 1); + + *pfound = FALSE; + + while (1) { + + /* Skip over sequential '#' comment lines */ + getNextNonCommentLine(sa, begin, &next); + if (next == -1) return 0; + if (next != begin) { + begin = next; + continue; + } + + /* Skip over sequential blank lines */ + getNextNonBlankLine(sa, begin, &next); + if (next == -1) return 0; + if (next != begin) { + begin = next; + continue; + } + + /* Skip over sequential lines starting with '//' */ + getNextNonDoubleSlashLine(sa, begin, &next); + if (next == -1) return 0; + if (next != begin) { + begin = next; + continue; + } + + /* Search for specific character sequence patterns; namely + * a lp, a matching rp, a lb and a semicolon. + * Abort the search if no lp is found. */ + getOffsetForCharacter(sa, next, '(', &soffsetlp, &boffsetlp, + &toffsetlp); + if (soffsetlp == -1) + break; + getOffsetForMatchingRP(sa, next, soffsetlp, boffsetlp, toffsetlp, + &soffsetrp, &boffsetrp, &toffsetrp); + getOffsetForCharacter(sa, next, '{', &soffsetlb, &boffsetlb, + &toffsetlb); + getOffsetForCharacter(sa, next, ';', &soffsetsc, &boffsetsc, + &toffsetsc); + + /* We've found a lp. Now weed out the case where a matching + * rp and a lb are not both found. */ + if (soffsetrp == -1 || soffsetlb == -1) + break; + + /* Check if a left brace occurs before a left parenthesis; + * if so, skip it */ + if (toffsetlb < toffsetlp) { + skipToMatchingBrace(sa, next + soffsetlb, boffsetlb, + &rbline, &rbindex); + skipToSemicolon(sa, rbline, rbindex, &scline); + begin = scline + 1; + continue; + } + + /* Check if a semicolon occurs before a left brace or + * a left parenthesis; if so, skip it */ + if ((soffsetsc != -1) && + (toffsetsc < toffsetlb || toffsetsc < toffsetlp)) { + skipToSemicolon(sa, next, 0, &scline); + begin = scline + 1; + continue; + } + + /* OK, it should be a function definition. We haven't + * checked that there is only white space between the + * rp and lb, but we've only seen problems with two + * extern inlines in sys/stat.h, and this is handled + * later by eliminating any prototype beginning with 'extern'. */ + *pstart = next; + *pstop = next + soffsetrp; + *pcharindex = boffsetrp; + *pfound = TRUE; + break; + } + + return 0; +} + + +/* + * \brief captureProtoSignature() + * + * \param[in] sa output from cpp, by line + * \param[in] start starting index to search; never a comment line + * \param[in] stop index of line on which pattern is completed + * \param[in] charindex char index of completing ')' character + * \return cleanstr prototype string, or NULL on error + * + *
+ * Notes:
+ *      (1) Return all characters, ending with a ';' after the ')'
+ * 
+ */ +static char * +captureProtoSignature(SARRAY *sa, + l_int32 start, + l_int32 stop, + l_int32 charindex) +{ +char *str, *newstr, *protostr, *cleanstr; +SARRAY *sap; +l_int32 i; + + PROCNAME("captureProtoSignature"); + + if (!sa) + return (char *)ERROR_PTR("sa not defined", procName, NULL); + + sap = sarrayCreate(0); + for (i = start; i < stop; i++) { + str = sarrayGetString(sa, i, L_COPY); + sarrayAddString(sap, str, L_INSERT); + } + str = sarrayGetString(sa, stop, L_COPY); + str[charindex + 1] = '\0'; + newstr = stringJoin(str, ";"); + sarrayAddString(sap, newstr, L_INSERT); + LEPT_FREE(str); + protostr = sarrayToString(sap, 2); + sarrayDestroy(&sap); + cleanstr = cleanProtoSignature(protostr); + LEPT_FREE(protostr); + + return cleanstr; +} + + +/* + * \brief cleanProtoSignature() + * + * \param[in] instr input prototype string + * \return cleanstr clean prototype string, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds 'extern' at beginning and regularizes spaces
+ *          between tokens.
+ * 
+ */ +static char * +cleanProtoSignature(char *instr) +{ +char *str, *cleanstr; +char buf[Bufsize]; +char externstring[] = "extern"; +l_int32 i, j, nwords, nchars, index, len; +SARRAY *sa, *saout; + + PROCNAME("cleanProtoSignature"); + + if (!instr) + return (char *)ERROR_PTR("instr not defined", procName, NULL); + + sa = sarrayCreateWordsFromString(instr); + nwords = sarrayGetCount(sa); + saout = sarrayCreate(0); + sarrayAddString(saout, externstring, L_COPY); + for (i = 0; i < nwords; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + nchars = strlen(str); + index = 0; + for (j = 0; j < nchars; j++) { + if (index > Bufsize - 6) { + sarrayDestroy(&sa); + sarrayDestroy(&saout); + return (char *)ERROR_PTR("token too large", procName, NULL); + } + if (str[j] == '(') { + buf[index++] = ' '; + buf[index++] = '('; + buf[index++] = ' '; + } else if (str[j] == ')') { + buf[index++] = ' '; + buf[index++] = ')'; + } else { + buf[index++] = str[j]; + } + } + buf[index] = '\0'; + sarrayAddString(saout, buf, L_COPY); + } + + /* Flatten to a prototype string with spaces added after + * each word, and remove the last space */ + cleanstr = sarrayToString(saout, 2); + len = strlen(cleanstr); + cleanstr[len - 1] = '\0'; + + sarrayDestroy(&sa); + sarrayDestroy(&saout); + return cleanstr; +} + + +/* + * \brief skipToEndOfFunction() + * + * \param[in] sa output from cpp, by line + * \param[in] start index of starting line with left bracket to search + * \param[in] lbindex starting char index for left bracket + * \param[out] pnext index of line following the ending '}' for function + * \return 0 if OK, 1 on error + */ +static l_int32 +skipToEndOfFunction(SARRAY *sa, + l_int32 start, + l_int32 lbindex, + l_int32 *pnext) +{ +l_int32 end, rbindex; +l_int32 soffsetlb, boffsetlb, toffsetlb; + + PROCNAME("skipToEndOfFunction"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pnext) + return ERROR_INT("&next not defined", procName, 1); + + getOffsetForCharacter(sa, start, '{', &soffsetlb, &boffsetlb, + &toffsetlb); + skipToMatchingBrace(sa, start + soffsetlb, boffsetlb, &end, &rbindex); + if (end == -1) { /* shouldn't happen! */ + *pnext = -1; + return 1; + } + + *pnext = end + 1; + return 0; +} + + +/* + * \brief skipToMatchingBrace() + * + * \param[in] sa output from cpp, by line + * \param[in] start index of starting line with left bracket to search + * \param[in] lbindex starting char index for left bracket + * \param[out] pstop index of line with the matching right bracket + * \param[out] prbindex char index of matching right bracket + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the matching right brace is not found, returns
+ *          stop = -1.  This shouldn't happen.
+ * 
+ */ +static l_int32 +skipToMatchingBrace(SARRAY *sa, + l_int32 start, + l_int32 lbindex, + l_int32 *pstop, + l_int32 *prbindex) +{ +char *str; +l_int32 i, j, jstart, n, sumbrace, found, instring, nchars; + + PROCNAME("skipToMatchingBrace"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pstop) + return ERROR_INT("&stop not defined", procName, 1); + if (!prbindex) + return ERROR_INT("&rbindex not defined", procName, 1); + + instring = 0; /* init to FALSE; toggle on double quotes */ + *pstop = -1; + n = sarrayGetCount(sa); + sumbrace = 1; + found = FALSE; + for (i = start; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + jstart = 0; + if (i == start) + jstart = lbindex + 1; + nchars = strlen(str); + for (j = jstart; j < nchars; j++) { + /* Toggle the instring state every time you encounter + * a double quote that is NOT escaped. */ + if (j == jstart && str[j] == '\"') + instring = 1 - instring; + if (j > jstart && str[j] == '\"' && str[j-1] != '\\') + instring = 1 - instring; + /* Record the braces if they are neither a literal character + * nor within a string. */ + if (str[j] == '{' && str[j+1] != '\'' && !instring) { + sumbrace++; + } else if (str[j] == '}' && str[j+1] != '\'' && !instring) { + sumbrace--; + if (sumbrace == 0) { + found = TRUE; + *prbindex = j; + break; + } + } + } + if (found) { + *pstop = i; + return 0; + } + } + + return ERROR_INT("matching right brace not found", procName, 1); +} + + +/* + * \brief skipToSemicolon() + * + * \param[in] sa output from cpp, by line + * \param[in] start index of starting line to search + * \param[in] charindex starting char index for search + * \param[out] pnext index of line containing the next ';' + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the semicolon isn't found, returns next = -1.
+ *          This shouldn't happen.
+ *      (2) This is only used in contexts where the semicolon is
+ *          not within a string.
+ * 
+ */ +static l_int32 +skipToSemicolon(SARRAY *sa, + l_int32 start, + l_int32 charindex, + l_int32 *pnext) +{ +char *str; +l_int32 i, j, n, jstart, nchars, found; + + PROCNAME("skipToSemicolon"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pnext) + return ERROR_INT("&next not defined", procName, 1); + + *pnext = -1; + n = sarrayGetCount(sa); + found = FALSE; + for (i = start; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + jstart = 0; + if (i == start) + jstart = charindex + 1; + nchars = strlen(str); + for (j = jstart; j < nchars; j++) { + if (str[j] == ';') { + found = TRUE;; + break; + } + } + if (found) { + *pnext = i; + return 0; + } + } + + return ERROR_INT("semicolon not found", procName, 1); +} + + +/* + * \brief getOffsetForCharacter() + * + * \param[in] sa output from cpp, by line + * \param[in] start starting index in sa to search; + * never a comment line + * \param[in] tchar we are searching for the first instance of this + * \param[out] psoffset offset in strings from start index + * \param[out] pboffset offset in bytes within string in which + * the character is first found + * \param[out] ptoffset offset in total bytes from beginning of string + * indexed by 'start' to the location where + * the character is first found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We are searching for the first instance of 'tchar', starting
+ *          at the beginning of the string indexed by start.
+ *      (2) If the character is not found, soffset is returned as -1,
+ *          and the other offsets are set to very large numbers.  The
+ *          caller must check the value of soffset.
+ *      (3) This is only used in contexts where it is not necessary to
+ *          consider if the character is inside a string.
+ * 
+ */ +static l_int32 +getOffsetForCharacter(SARRAY *sa, + l_int32 start, + char tchar, + l_int32 *psoffset, + l_int32 *pboffset, + l_int32 *ptoffset) +{ +char *str; +l_int32 i, j, n, nchars, totchars, found; + + PROCNAME("getOffsetForCharacter"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!psoffset) + return ERROR_INT("&soffset not defined", procName, 1); + if (!pboffset) + return ERROR_INT("&boffset not defined", procName, 1); + if (!ptoffset) + return ERROR_INT("&toffset not defined", procName, 1); + + *psoffset = -1; /* init to not found */ + *pboffset = 100000000; + *ptoffset = 100000000; + + n = sarrayGetCount(sa); + found = FALSE; + totchars = 0; + for (i = start; i < n; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return ERROR_INT("str not returned; shouldn't happen", procName, 1); + nchars = strlen(str); + for (j = 0; j < nchars; j++) { + if (str[j] == tchar) { + found = TRUE; + break; + } + } + if (found) + break; + totchars += nchars; + } + + if (found) { + *psoffset = i - start; + *pboffset = j; + *ptoffset = totchars + j; + } + + return 0; +} + + +/* + * \brief getOffsetForMatchingRP() + * + * \param[in] sa output from cpp, by line + * \param[in] start starting index in sa to search; + * never a comment line + * \param[in] soffsetlp string offset to first LP + * \param[in] boffsetlp byte offset within string to first LP + * \param[in] toffsetlp total byte offset to first LP + * \param[out] psoffset offset in strings from start index + * \param[out] pboffset offset in bytes within string in which + * the matching RP is found + * \param[out] ptoffset offset in total bytes from beginning of string + * indexed by 'start' to the location where + * the matching RP is found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We are searching for the matching right parenthesis (RP) that
+ *          corresponds to the first LP found beginning at the string
+ *          indexed by start.
+ *      (2) If the matching RP is not found, soffset is returned as -1,
+ *          and the other offsets are set to very large numbers.  The
+ *          caller must check the value of soffset.
+ *      (3) This is only used in contexts where it is not necessary to
+ *          consider if the character is inside a string.
+ *      (4) We must do this because although most arg lists have a single
+ *          left and right parenthesis, it is possible to construct
+ *          more complicated prototype declarations, such as those
+ *          where functions are passed in.  The C++ rules for prototypes
+ *          are strict, and require that for functions passed in as args,
+ *          the function name arg be placed in parenthesis, as well
+ *          as its arg list, thus incurring two extra levels of parentheses.
+ * 
+ */ +static l_int32 +getOffsetForMatchingRP(SARRAY *sa, + l_int32 start, + l_int32 soffsetlp, + l_int32 boffsetlp, + l_int32 toffsetlp, + l_int32 *psoffset, + l_int32 *pboffset, + l_int32 *ptoffset) +{ +char *str; +l_int32 i, j, n, nchars, totchars, leftmatch, firstline, jstart, found; + + PROCNAME("getOffsetForMatchingRP"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!psoffset) + return ERROR_INT("&soffset not defined", procName, 1); + if (!pboffset) + return ERROR_INT("&boffset not defined", procName, 1); + if (!ptoffset) + return ERROR_INT("&toffset not defined", procName, 1); + + *psoffset = -1; /* init to not found */ + *pboffset = 100000000; + *ptoffset = 100000000; + + n = sarrayGetCount(sa); + found = FALSE; + totchars = toffsetlp; + leftmatch = 1; /* count of (LP - RP); we're finished when it goes to 0. */ + firstline = start + soffsetlp; + for (i = firstline; i < n; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return ERROR_INT("str not returned; shouldn't happen", procName, 1); + nchars = strlen(str); + jstart = 0; + if (i == firstline) + jstart = boffsetlp + 1; + for (j = jstart; j < nchars; j++) { + if (str[j] == '(') + leftmatch++; + else if (str[j] == ')') + leftmatch--; + if (leftmatch == 0) { + found = TRUE; + break; + } + } + if (found) + break; + if (i == firstline) + totchars += nchars - boffsetlp; + else + totchars += nchars; + } + + if (found) { + *psoffset = i - start; + *pboffset = j; + *ptoffset = totchars + j; + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/partify.c b/3rdparty/hgOCR/leptonica/partify.c new file mode 100644 index 00000000..6c074c07 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/partify.c @@ -0,0 +1,312 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file partify.c + *
+ *
+ *     Top level
+ *         l_int32          partifyFiles()
+ *         l_int32          partifyPixac()
+ *
+ *     Helpers
+ *         static BOXA     *pixLocateStaveSets()
+ *         static l_int32   boxaRemoveVGaps()
+ * 
+ */ + +#include "allheaders.h" + + /* Static helplers */ +static BOXA *pixLocateStaveSets(PIX *pixs, l_int32 pageno, PIXA *pixadb); +static l_ok boxaRemoveVGaps(BOXA *boxa); + + +/*---------------------------------------------------------------------* + * Top level * + *---------------------------------------------------------------------*/ +/*! + * \brief partifyFiles() + * + * \param[in] dirname directory of files + * \param[in] substr required filename substring; use NULL for all files + * \param[in] nparts number of parts to generate (counting from top) + * \param[in] outroot root name of output pdf files + * \param[in] debugfile [optional] set to NULL for no debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) All page images are compressed in png format into a pixacomp.
+ *      (2) Each page image is deskewed, binarized at 300 ppi,
+ *          partified into %nparts, and saved in a set of pixacomps
+ *          in tiff-g4 format.
+ *      (3) Each partified pixacomp is rendered into a set of page images,
+ *          and output as a pdf.
+ * 
+ */ +l_ok +partifyFiles(const char *dirname, + const char *substr, + l_int32 nparts, + const char *outroot, + const char *debugfile) +{ +PIXA *pixadb; +PIXAC *pixac; + + PROCNAME("partifyFiles"); + + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + if (nparts < 0 || nparts > 10) + return ERROR_INT("nparts not in [1 ... 10]", procName, 1); + if (!outroot || outroot[0] == '\n') + return ERROR_INT("outroot undefined or empty", procName, 1); + + pixadb = (debugfile) ? pixaCreate(0) : NULL; + pixac = pixacompCreateFromFiles(dirname, substr, IFF_PNG); + partifyPixac(pixac, nparts, outroot, pixadb); + if (pixadb) { + L_INFO("writing debug output to %s\n", procName, debugfile); + pixaConvertToPdf(pixadb, 300, 1.0, L_FLATE_ENCODE, 0, + "Partify Debug", debugfile); + } + pixacompDestroy(&pixac); + pixaDestroy(&pixadb); + return 0; +} + + +/*! + * \brief partifyPixac() + * + * \param[in] pixac with at least one image + * \param[in] nparts number of parts to generate (counting from top) + * \param[in] outroot root name of output pdf files + * \param[in] pixadb [optional] debug pixa; can be NULL + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See partifyPixac().
+ *      (2) If the image files do not have a resolution, 300 ppi is assumed.
+ * 
+ */ +l_ok +partifyPixac(PIXAC *pixac, + l_int32 nparts, + const char *outroot, + PIXA *pixadb) +{ +char buf[512]; +l_int32 i, j, pageno, res, npage, nbox, icount, line; +l_float32 factor; +L_BMF *bmf; +BOX *box1, *box2; +BOXA *boxa1, *boxa2, *boxa3; +PIX *pix1, *pix2, *pix3, *pix4, *pix5; +PIXAC **pixaca; + + PROCNAME("partifyPixac"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + if ((npage = pixacompGetCount(pixac)) == 0) + return ERROR_INT("pixac is empty", procName, 1); + if (nparts < 1 || nparts > 10) + return ERROR_INT("nparts not in [1 ... 10]", procName, 1); + if (!outroot || outroot[0] == '\n') + return ERROR_INT("outroot undefined or empty", procName, 1); + + /* Initialize the output array for each of the nparts */ + pixaca = (PIXAC **)LEPT_CALLOC(nparts, sizeof(PIXAC *)); + for (i = 0; i < nparts; i++) + pixaca[i] = pixacompCreate(0); + + /* Process each page */ + line = 1; + bmf = bmfCreate(NULL, 10); + for (pageno = 0; pageno < npage; pageno++) { + if ((pix1 = pixacompGetPix(pixac, pageno)) == NULL) { + L_ERROR("pix for page %d not found\n", procName, pageno); + continue; + } + + /* Scale, binarize and deskew */ + res = pixGetXRes(pix1); + if (res == 0 || res == 300 || res > 600) { + pix2 = pixClone(pix1); + } else { + factor = 300.0 / (l_float32)res; + if (factor > 3) + L_WARNING("resolution is very low\n", procName); + pix2 = pixScale(pix1, factor, factor); + } + pix3 = pixConvertTo1Adaptive(pix2); + pix4 = pixDeskew(pix3, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + if (!pix4) { + L_ERROR("pix for page %d not deskewed\n", procName, pageno); + continue; + } + pix1 = pixClone(pix4); /* rename */ + pixDestroy(&pix4); + + /* Find the stave sets at 4x reduction */ + boxa1 = pixLocateStaveSets(pix1, pageno, pixadb); + + /* Break each stave set into the separate staves (parts). + * A typical set will have more than one part, but if one of + * the parts is a keyboard, it will usually have two staves + * (also called a Grand Staff), composed of treble and + * bass staves. For example, a classical violin sonata + * could have a staff for the violin and two staves for + * the piano. We would set nparts == 2, and extract both + * of the piano staves as the piano part. */ + nbox = boxaGetCount(boxa1); + fprintf(stderr, "number of boxes in page %d: %d\n", pageno, nbox); + for (i = 0; i < nbox; i++, line++) { + snprintf(buf, sizeof(buf), "%d", line); + box1 = boxaGetBox(boxa1, i, L_COPY); + pix2 = pixClipRectangle(pix1, box1, NULL); + pix3 = pixMorphSequence(pix2, "d1.20 + o50.1 + o1.30", 0); + boxa2 = pixConnCompBB(pix3, 8); + boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); + boxaRemoveVGaps(boxa3); + icount = boxaGetCount(boxa3); + if (icount < nparts) + L_WARNING("nparts requested = %d, but only found %d\n", + procName, nparts, icount); + for (j = 0; j < icount && j < nparts; j++) { + box2 = boxaGetBox(boxa3, j, L_COPY); + if (j == nparts - 1) /* extend the box to the bottom */ + boxSetSideLocations(box2, -1, -1, -1, + pixGetHeight(pix1) - 1); + pix4 = pixClipRectangle(pix2, box2, NULL); + pix5 = pixAddTextlines(pix4, bmf, buf, 1, L_ADD_LEFT); + pixacompAddPix(pixaca[j], pix5, IFF_TIFF_G4); + boxDestroy(&box2); + pixDestroy(&pix4); + pixDestroy(&pix5); + } + boxaDestroy(&boxa2); + boxaDestroy(&boxa3); + boxDestroy(&box1); + pixDestroy(&pix2); + pixDestroy(&pix3); + } + boxaDestroy(&boxa1); + pixDestroy(&pix1); + } + + /* Output separate pdfs for each part */ + for (i = 0; i < nparts; i++) { + snprintf(buf, sizeof(buf), "%s-%d.pdf", outroot, i); + L_INFO("writing part %d: %s\n", procName, i, buf); + pixacompConvertToPdf(pixaca[i], 300, 1.0, L_G4_ENCODE, 0, NULL, buf); + pixacompDestroy(&pixaca[i]); + } + LEPT_FREE(pixaca); + bmfDestroy(&bmf); + return 0; +} + + +/* + * \brief pixLocateStaveSets() + * + * \param[in] pixs 1 bpp, 300 ppi, deskewed + * \param[in] pageno page number; used for debug output + * \param[in] pixadb [optional] debug pixa; can be NULL + * \return boxa containing the stave sets at full resolution + */ +static BOXA * +pixLocateStaveSets(PIX *pixs, + l_int32 pageno, + PIXA *pixadb) +{ +BOXA *boxa1, *boxa2, *boxa3, *boxa4; +PIX *pix1, *pix2; + + /* Find the stave sets at 4x reduction */ + pix1 = pixMorphSequence(pixs, "r11", 0); + boxa1 = pixConnCompBB(pix1, 8); + boxa2 = boxaSelectByArea(boxa1, 15000, L_SELECT_IF_GT, NULL); + boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); + if (pixadb) { + pix2 = pixConvertTo32(pix1); + pixRenderBoxaArb(pix2, boxa3, 2, 255, 0, 0); + pixaAddPix(pixadb, pix2, L_INSERT); + pixDisplay(pix2, 100 * pageno, 100); + } + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + + boxaRemoveVGaps(boxa3); + if (pixadb) { + pix2 = pixConvertTo32(pix1); + pixRenderBoxaArb(pix2, boxa3, 2, 0, 255, 0); + pixaAddPix(pixadb, pix2, L_INSERT); + pixDisplay(pix2, 100 * pageno, 600); + } + boxa4 = boxaTransform(boxa3, 0, 0, 4.0, 4.0); /* back to full res */ + boxaDestroy(&boxa3); + pixDestroy(&pix1); + return boxa4; +} + + +/* + * \brief boxaRemoveVGaps() + * + * \param[in] boxa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The boxes in %boxa are aligned vertically.  Move the horizontal
+ *          edges vertically to remove the gaps between boxes.
+ * 
+ */ +static l_ok +boxaRemoveVGaps(BOXA *boxa) +{ +l_int32 nbox, i, y1, h1, y2, h2, delta; + + nbox = boxaGetCount(boxa); + for (i = 0; i < nbox - 1; i++) { + boxaGetBoxGeometry(boxa, i, NULL, &y1, NULL, &h1); + boxaGetBoxGeometry(boxa, i + 1, NULL, &y2, NULL, &h2); + delta = (y2 - y1 - h1) / 2; + boxaAdjustBoxSides(boxa, i, 0, 0, 0, delta); + boxaAdjustBoxSides(boxa, i + 1, 0, 0, -delta, 0); + } + boxaAdjustBoxSides(boxa, nbox - 1, 0, 0, 0, delta); /* bot of last */ + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/partition.c b/3rdparty/hgOCR/leptonica/partition.c new file mode 100644 index 00000000..040eaebf --- /dev/null +++ b/3rdparty/hgOCR/leptonica/partition.c @@ -0,0 +1,659 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file partition.c + *
+ *
+ *      Whitespace block extraction
+ *          BOXA            *boxaGetWhiteblocks()
+ *
+ *      Helpers
+ *          static PARTEL   *partelCreate()
+ *          static void      partelDestroy()
+ *          static l_int32   partelSetSize()
+ *          static BOXA     *boxaGenerateSubboxes()
+ *          static BOX      *boxaSelectPivotBox()
+ *          static l_int32   boxaCheckIfOverlapIsSmall()
+ *          BOXA            *boxaPruneSortedOnOverlap()
+ * 
+ */ + +#include "allheaders.h" + +/*! Partition element */ +struct PartitionElement { + l_float32 size; /* sorting key */ + BOX *box; /* region of the element */ + BOXA *boxa; /* set of intersecting boxes */ +}; +typedef struct PartitionElement PARTEL; + +static PARTEL * partelCreate(BOX *box); +static void partelDestroy(PARTEL **ppartel); +static l_int32 partelSetSize(PARTEL *partel, l_int32 sortflag); +static BOXA * boxaGenerateSubboxes(BOX *box, BOXA *boxa, l_int32 maxperim, + l_float32 fract); +static BOX * boxaSelectPivotBox(BOX *box, BOXA *boxa, l_int32 maxperim, + l_float32 fract); +static l_int32 boxCheckIfOverlapIsBig(BOX *box, BOXA *boxa, + l_float32 maxoverlap); + +static const l_int32 DefaultMaxPops = 20000; + + +#ifndef NO_CONSOLE_IO +#define OUTPUT_HEAP_STATS 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------* + * Whitespace block extraction * + *------------------------------------------------------------------*/ +/*! + * \brief boxaGetWhiteblocks() + * + * \param[in] boxas typ. a set of bounding boxes of fg components + * \param[in] box initial region; typically including all boxes + * in boxas; if null, it computes the region to + * include all boxes in boxas + * \param[in] sortflag L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, + * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, + * L_SORT_BY_PERIMETER, L_SORT_BY_AREA + * \param[in] maxboxes max number of output whitespace boxes; e.g., 100 + * \param[in] maxoverlap maximum fractional overlap of a box by any + * of the larger boxes; e.g., 0.2 + * \param[in] maxperim maximum half-perimeter, in pixels, for which + * pivot is selected by proximity to box centroid; + * e.g., 200 + * \param[in] fract fraction of box diagonal that is an acceptable + * distance from the box centroid to select + * the pivot; e.g., 0.2 + * \param[in] maxpops max number of pops from the heap; use 0 as default + * \return boxa of sorted whitespace boxes, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses the elegant Breuel algorithm, found in "Two
+ *          Geometric Algorithms for Layout Analysis", 2002,
+ *          url: "citeseer.ist.psu.edu/breuel02two.html".
+ *          It starts with the bounding boxes (b.b.) of the connected
+ *          components (c.c.) in a region, along with the rectangle
+ *          representing that region.  It repeatedly divides the
+ *          rectangle into four maximal rectangles that exclude a
+ *          pivot rectangle, sorting them in a priority queue
+ *          according to one of the six sort flags.  It returns a boxa
+ *          of the "largest" set that have no intersection with boxes
+ *          from the input boxas.
+ *      (2) If box == NULL, the initial region is the minimal region
+ *          that includes the origin and every box in boxas.
+ *      (3) maxboxes is the maximum number of whitespace boxes that will
+ *          be returned.  The actual number will depend on the image
+ *          and the values chosen for maxoverlap and maxpops.  In many
+ *          cases, the actual number will be 'maxboxes'.
+ *      (4) maxoverlap allows pruning of whitespace boxes depending on
+ *          the overlap.  To avoid all pruning, use maxoverlap = 1.0.
+ *          To select only boxes that have no overlap with each other
+ *          (maximal pruning), choose maxoverlap = 0.0.
+ *          Otherwise, no box can have more than the 'maxoverlap' fraction
+ *          of its area overlapped by any larger (in the sense of the
+ *          sortflag) box.
+ *      (5) Choose maxperim (actually, maximum half-perimeter) to
+ *          represent a c.c. that is small enough so that you don't care
+ *          about the white space that could be inside of it.  For all such
+ *          c.c., the pivot for 'quadfurcation' of a rectangle is selected
+ *          as having a reasonable proximity to the rectangle centroid.
+ *      (6) Use fract in the range [0.0 ... 1.0].  Set fract = 0.0
+ *          to choose the small box nearest the centroid as the pivot.
+ *          If you choose fract > 0.0, it is suggested that you call
+ *          boxaPermuteRandom() first, to permute the boxes (see usage below).
+ *          This should reduce the search time for each of the pivot boxes.
+ *      (7) Choose maxpops to be the maximum number of rectangles that
+ *          are popped from the heap.  This is an indirect way to limit the
+ *          execution time.  Use 0 for default (a fairly large number).
+ *          At any time, you can expect the heap to contain about
+ *          2.5 times as many boxes as have been popped off.
+ *      (8) The output result is a sorted set of overlapping
+ *          boxes, constrained by 'maxboxes', 'maxoverlap' and 'maxpops'.
+ *      (9) The main defect of the method is that it abstracts out the
+ *          actual components, retaining only the b.b. for analysis.
+ *          Consider a component with a large b.b.  If this is chosen
+ *          as a pivot, all white space inside is immediately taken
+ *          out of consideration.  Furthermore, even if it is never chosen
+ *          as a pivot, as the partitioning continues, at no time will
+ *          any of the whitespace inside this component be part of a
+ *          rectangle with zero overlapping boxes.  Thus, the interiors
+ *          of all boxes are necessarily excluded from the union of
+ *          the returned whitespace boxes.
+ *     (10) It should be noted that the algorithm puts a large number
+ *          of partels on the queue.  Setting a limit of X partels to
+ *          remove from the queue, one typically finds that there will be
+ *          several times that number (say, 2X - 3X) left on the queue.
+ *          For an efficient algorithm to find the largest white or
+ *          or black rectangles, without permitting them to overlap,
+ *          see pixFindLargeRectangles().
+ *     (11) USAGE: One way to accommodate to this weakness is to remove such
+ *          large b.b. before starting the computation.  For example,
+ *          if 'box' is an input image region containing 'boxa' b.b. of c.c.:
+ *
+ *                   // Faster pivot choosing
+ *               boxaPermuteRandom(boxa, boxa);
+ *
+ *                   // Remove anything either large width or height
+ *               boxat = boxaSelectBySize(boxa, maxwidth, maxheight,
+ *                                        L_SELECT_IF_BOTH, L_SELECT_IF_LT,
+ *                                        NULL);
+ *
+ *               boxad = boxaGetWhiteblocks(boxat, box, type, maxboxes,
+ *                                          maxoverlap, maxperim, fract,
+ *                                          maxpops);
+ *
+ *          The result will be rectangular regions of "white space" that
+ *          extend into (and often through) the excluded components.
+ *     (11) As a simple example, suppose you wish to find the columns on a page.
+ *          First exclude large c.c. that may block the columns, and then call:
+ *
+ *               boxad = boxaGetWhiteblocks(boxa, box, L_SORT_BY_HEIGHT,
+ *                                          20, 0.15, 200, 0.2, 2000);
+ *
+ *          to get the 20 tallest boxes with no more than 0.15 overlap
+ *          between a box and any of the taller ones, and avoiding the
+ *          use of any c.c. with a b.b. half perimeter greater than 200
+ *          as a pivot.
+ * 
+ */ +BOXA * +boxaGetWhiteblocks(BOXA *boxas, + BOX *box, + l_int32 sortflag, + l_int32 maxboxes, + l_float32 maxoverlap, + l_int32 maxperim, + l_float32 fract, + l_int32 maxpops) +{ +l_int32 i, w, h, n, nsub, npush, npop; +BOX *boxsub; +BOXA *boxa, *boxa4, *boxasub, *boxad; +PARTEL *partel; +L_HEAP *lh; + + PROCNAME("boxaGetWhiteblocks"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (sortflag != L_SORT_BY_WIDTH && sortflag != L_SORT_BY_HEIGHT && + sortflag != L_SORT_BY_MIN_DIMENSION && + sortflag != L_SORT_BY_MAX_DIMENSION && + sortflag != L_SORT_BY_PERIMETER && sortflag != L_SORT_BY_AREA) + return (BOXA *)ERROR_PTR("invalid sort flag", procName, NULL); + if (maxboxes < 1) { + maxboxes = 1; + L_WARNING("setting maxboxes = 1\n", procName); + } + if (maxoverlap < 0.0 || maxoverlap > 1.0) + return (BOXA *)ERROR_PTR("invalid maxoverlap", procName, NULL); + if (maxpops == 0) + maxpops = DefaultMaxPops; + + if (!box) { + boxaGetExtent(boxas, &w, &h, NULL); + box = boxCreate(0, 0, w, h); + } + + /* Prime the heap */ + lh = lheapCreate(20, L_SORT_DECREASING); + partel = partelCreate(box); + partel->boxa = boxaCopy(boxas, L_CLONE); + partelSetSize(partel, sortflag); + lheapAdd(lh, partel); + + npush = 1; + npop = 0; + boxad = boxaCreate(0); + while (1) { + if ((partel = (PARTEL *)lheapRemove(lh)) == NULL) /* we're done */ + break; + + npop++; /* How many boxes have we retrieved from the queue? */ + if (npop > maxpops) { + partelDestroy(&partel); + break; + } + + /* Extract the contents */ + boxa = boxaCopy(partel->boxa, L_CLONE); + box = boxClone(partel->box); + partelDestroy(&partel); + + /* Can we output this one? */ + n = boxaGetCount(boxa); + if (n == 0) { + if (boxCheckIfOverlapIsBig(box, boxad, maxoverlap) == 0) + boxaAddBox(boxad, box, L_INSERT); + else + boxDestroy(&box); + boxaDestroy(&boxa); + if (boxaGetCount(boxad) >= maxboxes) /* we're done */ + break; + continue; + } + + + /* Generate up to 4 subboxes and put them on the heap */ + boxa4 = boxaGenerateSubboxes(box, boxa, maxperim, fract); + boxDestroy(&box); + nsub = boxaGetCount(boxa4); + for (i = 0; i < nsub; i++) { + boxsub = boxaGetBox(boxa4, i, L_CLONE); + boxasub = boxaIntersectsBox(boxa, boxsub); + partel = partelCreate(boxsub); + partel->boxa = boxasub; + partelSetSize(partel, sortflag); + lheapAdd(lh, partel); + boxDestroy(&boxsub); + } + npush += nsub; /* How many boxes have we put on the queue? */ + +/* boxaWriteStream(stderr, boxa4); */ + + boxaDestroy(&boxa4); + boxaDestroy(&boxa); + } + +#if OUTPUT_HEAP_STATS + fprintf(stderr, "Heap statistics:\n"); + fprintf(stderr, " Number of boxes pushed: %d\n", npush); + fprintf(stderr, " Number of boxes popped: %d\n", npop); + fprintf(stderr, " Number of boxes on heap: %d\n", lheapGetCount(lh)); +#endif /* OUTPUT_HEAP_STATS */ + + /* Clean up the heap */ + while ((partel = (PARTEL *)lheapRemove(lh)) != NULL) + partelDestroy(&partel); + lheapDestroy(&lh, FALSE); + + return boxad; +} + + +/*------------------------------------------------------------------* + * Helpers * + *------------------------------------------------------------------*/ +/*! + * \brief partelCreate() + * + * \param[in] box region; inserts a copy + * \return partel, or NULL on error + */ +static PARTEL * +partelCreate(BOX *box) +{ +PARTEL *partel; + + partel = (PARTEL *)LEPT_CALLOC(1, sizeof(PARTEL)); + partel->box = boxCopy(box); + return partel; +} + + +/*! + * \brief partelDestroy() + * + * \param[in,out] ppartel contents will be set to null before returning + * \return void + */ +static void +partelDestroy(PARTEL **ppartel) +{ +PARTEL *partel; + + PROCNAME("partelDestroy"); + + if (ppartel == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((partel = *ppartel) == NULL) + return; + + boxDestroy(&partel->box); + boxaDestroy(&partel->boxa); + LEPT_FREE(partel); + *ppartel = NULL; + return; +} + + +/*! + * \brief partelSetSize() + * + * \param[in] partel + * \param[in] sortflag L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, + * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, + * L_SORT_BY_PERIMETER, L_SORT_BY_AREA + * \return 0 if OK, 1 on error + */ +static l_int32 +partelSetSize(PARTEL *partel, + l_int32 sortflag) +{ +l_int32 w, h; + + PROCNAME("partelSetSize"); + + if (!partel) + return ERROR_INT("partel not defined", procName, 1); + + boxGetGeometry(partel->box, NULL, NULL, &w, &h); + if (sortflag == L_SORT_BY_WIDTH) + partel->size = (l_float32)w; + else if (sortflag == L_SORT_BY_HEIGHT) + partel->size = (l_float32)h; + else if (sortflag == L_SORT_BY_MIN_DIMENSION) + partel->size = (l_float32)L_MIN(w, h); + else if (sortflag == L_SORT_BY_MAX_DIMENSION) + partel->size = (l_float32)L_MAX(w, h); + else if (sortflag == L_SORT_BY_PERIMETER) + partel->size = (l_float32)(w + h); + else if (sortflag == L_SORT_BY_AREA) + partel->size = (l_float32)(w * h); + else + return ERROR_INT("invalid sortflag", procName, 1); + return 0; +} + + +/*! + * \brief boxaGenerateSubboxes() + * + * \param[in] box region to be split into up to four overlapping + * subregions + * \param[in] boxa boxes of rectangles intersecting the box + * \param[in] maxperim maximum half-perimeter for which pivot + * is selected by proximity to box centroid + * \param[in] fract fraction of box diagonal that is an acceptable + * distance from the box centroid to select the pivot + * \return boxa of four or less overlapping subrectangles of + * the box, or NULL on error + */ +static BOXA * +boxaGenerateSubboxes(BOX *box, + BOXA *boxa, + l_int32 maxperim, + l_float32 fract) +{ +l_int32 x, y, w, h, xp, yp, wp, hp; +BOX *boxp; /* pivot box */ +BOX *boxsub; +BOXA *boxa4; + + PROCNAME("boxaGenerateSubboxes"); + + if (!box) + return (BOXA *)ERROR_PTR("box not defined", procName, NULL); + if (!boxa) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + + boxa4 = boxaCreate(4); + boxp = boxaSelectPivotBox(box, boxa, maxperim, fract); + boxGetGeometry(box, &x, &y, &w, &h); + boxGetGeometry(boxp, &xp, &yp, &wp, &hp); + boxDestroy(&boxp); + if (xp > x) { /* left sub-box */ + boxsub = boxCreate(x, y, xp - x, h); + boxaAddBox(boxa4, boxsub, L_INSERT); + } + if (yp > y) { /* top sub-box */ + boxsub = boxCreate(x, y, w, yp - y); + boxaAddBox(boxa4, boxsub, L_INSERT); + } + if (xp + wp < x + w) { /* right sub-box */ + boxsub = boxCreate(xp + wp, y, x + w - xp - wp, h); + boxaAddBox(boxa4, boxsub, L_INSERT); + } + if (yp + hp < y + h) { /* bottom sub-box */ + boxsub = boxCreate(x, yp + hp, w, y + h - yp - hp); + boxaAddBox(boxa4, boxsub, L_INSERT); + } + + return boxa4; +} + + +/*! + * \brief boxaSelectPivotBox() + * + * \param[in] box containing box; to be split by the pivot box + * \param[in] boxa boxes of rectangles, from which 1 is to be chosen + * \param[in] maxperim maximum half-perimeter for which pivot + * is selected by proximity to box centroid + * \param[in] fract fraction of box diagonal that is an acceptable + * distance from the box centroid to select the pivot + * \return box pivot box for subdivision into 4 rectangles, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This is a tricky piece that wasn't discussed in the
+ *          Breuel's 2002 paper.
+ *      (2) Selects a box from boxa whose centroid is reasonably close to
+ *          the centroid of the containing box (xc, yc) and whose
+ *          half-perimeter does not exceed the maxperim value.
+ *      (3) If there are no boxes in the boxa that are small enough,
+ *          then it selects the smallest of the larger boxes,
+ *          without reference to its location in the containing box.
+ *      (4) If a small box has a centroid at a distance from the
+ *          centroid of the containing box that is not more than
+ *          the fraction 'fract' of the diagonal of the containing
+ *          box, that box is chosen as the pivot, terminating the
+ *          search for the nearest small box.
+ *      (5) Use fract in the range [0.0 ... 1.0].  Set fract = 0.0
+ *          to choose the small box nearest the centroid.
+ *      (6) Choose maxperim to represent a connected component that is
+ *          small enough so that you don't care about the white space
+ *          that could be inside of it.
+ * 
+ */ +static BOX * +boxaSelectPivotBox(BOX *box, + BOXA *boxa, + l_int32 maxperim, + l_float32 fract) +{ +l_int32 i, n, bw, bh, w, h; +l_int32 smallfound, minindex, perim, minsize; +l_float32 delx, dely, mindist, threshdist, dist, x, y, cx, cy; +BOX *boxt; + + PROCNAME("boxaSelectPivotBox"); + + if (!box) + return (BOX *)ERROR_PTR("box not defined", procName, NULL); + if (!boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + n = boxaGetCount(boxa); + if (n == 0) + return (BOX *)ERROR_PTR("no boxes in boxa", procName, NULL); + if (fract < 0.0 || fract > 1.0) { + L_WARNING("fract out of bounds; using 0.0\n", procName); + fract = 0.0; + } + + boxGetGeometry(box, NULL, NULL, &w, &h); + boxGetCenter(box, &x, &y); + threshdist = fract * (w * w + h * h); + mindist = 1000000000.; + minindex = 0; + smallfound = FALSE; + for (i = 0; i < n; i++) { + boxt = boxaGetBox(boxa, i, L_CLONE); + boxGetGeometry(boxt, NULL, NULL, &bw, &bh); + boxGetCenter(boxt, &cx, &cy); + boxDestroy(&boxt); + if (bw + bh > maxperim) + continue; + smallfound = TRUE; + delx = cx - x; + dely = cy - y; + dist = delx * delx + dely * dely; + if (dist <= threshdist) + return boxaGetBox(boxa, i, L_COPY); + if (dist < mindist) { + minindex = i; + mindist = dist; + } + } + + /* If there are small boxes but none are within 'fract' of the + * centroid, return the nearest one. */ + if (smallfound == TRUE) + return boxaGetBox(boxa, minindex, L_COPY); + + /* No small boxes; return the smallest of the large boxes */ + minsize = 1000000000; + minindex = 0; + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, NULL, NULL, &bw, &bh); + perim = bw + bh; + if (perim < minsize) { + minsize = perim; + minindex = i; + } + } + return boxaGetBox(boxa, minindex, L_COPY); +} + + +/*! + * \brief boxCheckIfOverlapIsBig() + * + * \param[in] box to be tested + * \param[in] boxa of boxes already stored + * \param[in] maxoverlap maximum fractional overlap of the input box + * by any of the boxes in boxa + * \return 0 if box has small overlap with every box in boxa; + * 1 otherwise or on error + */ +static l_int32 +boxCheckIfOverlapIsBig(BOX *box, + BOXA *boxa, + l_float32 maxoverlap) +{ +l_int32 i, n, bigoverlap; +l_float32 fract; +BOX *boxt; + + PROCNAME("boxCheckIfOverlapIsBig"); + + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (maxoverlap < 0.0 || maxoverlap > 1.0) + return ERROR_INT("invalid maxoverlap", procName, 1); + + n = boxaGetCount(boxa); + if (n == 0 || maxoverlap == 1.0) + return 0; + + bigoverlap = 0; + for (i = 0; i < n; i++) { + boxt = boxaGetBox(boxa, i, L_CLONE); + boxOverlapFraction(boxt, box, &fract); + boxDestroy(&boxt); + if (fract > maxoverlap) { + bigoverlap = 1; + break; + } + } + + return bigoverlap; +} + + +/*! + * \brief boxaPruneSortedOnOverlap() + * + * \param[in] boxas sorted by size in decreasing order + * \param[in] maxoverlap maximum fractional overlap of a box by any + * of the larger boxes + * \return boxad pruned, or NULL on error + * + *
+ * Notes:
+ *      (1) This selectively removes smaller boxes when they are overlapped
+ *          by any larger box by more than the input 'maxoverlap' fraction.
+ *      (2) To avoid all pruning, use maxoverlap = 1.0.  To select only
+ *          boxes that have no overlap with each other (maximal pruning),
+ *          set maxoverlap = 0.0.
+ *      (3) If there are no boxes in boxas, returns an empty boxa.
+ * 
+ */ +BOXA * +boxaPruneSortedOnOverlap(BOXA *boxas, + l_float32 maxoverlap) +{ +l_int32 i, j, n, remove; +l_float32 fract; +BOX *box1, *box2; +BOXA *boxad; + + PROCNAME("boxaPruneSortedOnOverlap"); + + if (!boxas) + return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); + if (maxoverlap < 0.0 || maxoverlap > 1.0) + return (BOXA *)ERROR_PTR("invalid maxoverlap", procName, NULL); + + n = boxaGetCount(boxas); + if (n == 0 || maxoverlap == 1.0) + return boxaCopy(boxas, L_COPY); + + boxad = boxaCreate(0); + box2 = boxaGetBox(boxas, 0, L_COPY); + boxaAddBox(boxad, box2, L_INSERT); + for (j = 1; j < n; j++) { /* prune on j */ + box2 = boxaGetBox(boxas, j, L_COPY); + remove = FALSE; + for (i = 0; i < j; i++) { /* test on i */ + box1 = boxaGetBox(boxas, i, L_CLONE); + boxOverlapFraction(box1, box2, &fract); + boxDestroy(&box1); + if (fract > maxoverlap) { + remove = TRUE; + break; + } + } + if (remove == TRUE) + boxDestroy(&box2); + else + boxaAddBox(boxad, box2, L_INSERT); + } + + return boxad; +} diff --git a/3rdparty/hgOCR/leptonica/pdfio1.c b/3rdparty/hgOCR/leptonica/pdfio1.c new file mode 100644 index 00000000..2dd95c4d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pdfio1.c @@ -0,0 +1,2252 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pdfio1.c + *
+ *
+ *    Higher-level operations for generating pdf from images.
+ *    Use poppler's pdfimages to invert the process, extracting
+ *    raster images from pdf.
+ *
+ *    |=============================================================|
+ *    |                        Important notes                      |
+ *    |=============================================================|
+ *    | Some of these functions require I/O libraries such as       |
+ *    | libtiff, libjpeg, libpng, libz and libopenjp2.  If you do   |
+ *    | not have these libraries, some calls will fail.  For        |
+ *    | example, if you do not have libopenjp2, you cannot write a  |
+ *    | pdf where transcoding is required to incorporate a          |
+ *    | jp2k image.                                                 |
+ *    |                                                             |
+ *    | You can manually deactivate all pdf writing by setting      |
+ *    | this in environ.h:                                          |
+ *    | \code                                                       |
+ *    |      #define  USE_PDFIO     0                               |
+ *    | \endcode                                                    |
+ *    | This will link the stub file pdfiostub.c.                   |
+ *    |=============================================================|
+ *
+ *     Set 1. These functions convert a set of image files
+ *     to a multi-page pdf file, with one image on each page.
+ *     All images are rendered at the same (input) resolution.
+ *     The images can be specified as being in a directory, or they
+ *     can be in an sarray.  The output pdf can be either a file
+ *     or an array of bytes in memory.
+ *
+ *     Set 2. These functions are a special case of set 1, where
+ *     no scaling or change in quality is required.  For jpeg and jp2k
+ *     images, the bytes in each file can be directly incorporated
+ *     into the output pdf, and the wrapping up of multiple image
+ *     files is very fast.  For non-interlaced png, the data bytes
+ *     including the predictors can also be written directly into the
+ *     flate pdf data.  For other image formats (e.g., tiff-g4),
+ *     transcoding is required, where the image data is first decompressed
+ *     and then the G4 or Flate (gzip) encodings are generated.
+ *
+ *     Set 3. These functions convert a set of images in memory
+ *     to a multi-page pdf, with one image on each page.  The pdf
+ *     output can be either a file or an array of bytes in memory.
+ *
+ *     Set 4. These functions implement a pdf output "device driver"
+ *     for wrapping (encoding) any number of images on a single page
+ *     in pdf.  The input can be either an image file or a Pix;
+ *     the pdf output can be either a file or an array of bytes in memory.
+ *
+ *     Set 5. These "segmented" functions take a set of image
+ *     files, along with optional segmentation information, and
+ *     generate a multi-page pdf file, where each page consists
+ *     in general of a mixed raster pdf of image and non-image regions.
+ *     The segmentation information for each page can be input as
+ *     either a mask over the image parts, or as a Boxa of those
+ *     regions.
+ *
+ *     Set 6. These "segmented" functions convert an image and
+ *     an optional Boxa of image regions into a mixed raster pdf file
+ *     for the page.  The input image can be either a file or a Pix.
+ *
+ *     Set 7. These functions take a set of single-page pdf files
+ *     and concatenates it into a multi-page pdf.  The input can be
+ *     a set of either single page pdf files or pdf 'strings' in memory.
+ *     The output can be either a file or an array of bytes in memory.
+ *
+ *     The images in the pdf file can be rendered using a pdf viewer,
+ *     such as evince, gv, xpdf or acroread.
+ *
+ *     Reference on the pdf file format:
+ *         http://www.adobe.com/devnet/pdf/pdf_reference_archive.html
+ *
+ *     1. Convert specified image files to pdf (one image file per page)
+ *          l_int32             convertFilesToPdf()
+ *          l_int32             saConvertFilesToPdf()
+ *          l_int32             saConvertFilesToPdfData()
+ *          l_int32             selectDefaultPdfEncoding()
+ *
+ *     2. Convert specified image files to pdf without scaling
+ *          l_int32             convertUnscaledFilesToPdf()
+ *          l_int32             saConvertUnscaledFilesToPdf()
+ *          l_int32             saConvertUnscaledFilesToPdfData()
+ *          l_int32             convertUnscaledToPdfData()
+ *
+ *     3. Convert multiple images to pdf (one image per page)
+ *          l_int32             pixaConvertToPdf()
+ *          l_int32             pixaConvertToPdfData()
+ *
+ *     4. Single page, multi-image converters
+ *          l_int32             convertToPdf()
+ *          l_int32             convertImageDataToPdf()
+ *          l_int32             convertToPdfData()
+ *          l_int32             convertImageDataToPdfData()
+ *          l_int32             pixConvertToPdf()
+ *          l_int32             pixWriteStreamPdf()
+ *          l_int32             pixWriteMemPdf()
+ *
+ *     5. Segmented multi-page, multi-image converter
+ *          l_int32             convertSegmentedFilesToPdf()
+ *          BOXAA              *convertNumberedMasksToBoxaa()
+ *
+ *     6. Segmented single page, multi-image converters
+ *          l_int32             convertToPdfSegmented()
+ *          l_int32             pixConvertToPdfSegmented()
+ *          l_int32             convertToPdfDataSegmented()
+ *          l_int32             pixConvertToPdfDataSegmented()
+ *
+ *     7. Multipage concatenation
+ *          l_int32             concatenatePdf()
+ *          l_int32             saConcatenatePdf()
+ *          l_int32             ptraConcatenatePdf()
+ *          l_int32             concatenatePdfToData()
+ *          l_int32             saConcatenatePdfToData()
+ *
+ *     The top-level multi-image functions can be visualized as follows:
+ *          Output pdf data to file:
+ *             convertToPdf()  and  convertImageDataToPdf()
+ *                     --> pixConvertToPdf()
+ *                           --> pixConvertToPdfData()
+ *
+ *          Output pdf data to array in memory:
+ *             convertToPdfData()  and  convertImageDataToPdfData()
+ *                     --> pixConvertToPdfData()
+ *
+ *     The top-level segmented image functions can be visualized as follows:
+ *          Output pdf data to file:
+ *             convertToPdfSegmented()
+ *                     --> pixConvertToPdfSegmented()
+ *                           --> pixConvertToPdfDataSegmented()
+ *
+ *          Output pdf data to array in memory:
+ *             convertToPdfDataSegmented()
+ *                     --> pixConvertToPdfDataSegmented()
+ *
+ *     For multi-page concatenation, there are three different types of input
+ *        (1) directory and optional filename filter
+ *        (2) sarray of filenames
+ *        (3) ptra of byte arrays of pdf data
+ *     and two types of output for the concatenated pdf data
+ *        (1) filename
+ *        (2) data array and size
+ *     High-level interfaces are given for each of the six combinations.
+ *
+ *     Note: When wrapping small images into pdf, it is useful to give
+ *     them a relatively low resolution value, to avoid rounding errors
+ *     when rendering the images.  For example, if you want an image
+ *     of width w pixels to be 5 inches wide on a screen, choose a
+ *     resolution w/5.
+ *
+ *     The very fast functions in section (2) require neither transcoding
+ *     nor parsing of the compressed jpeg file.  With three types of image
+ *     compression, the compressed strings can be incorporated into
+ *     the pdf data without decompression and re-encoding: jpeg, jp2k
+ *     and png.  The DCTDecode and JPXDecode filters can handle the
+ *     entire jpeg and jp2k encoded string as a byte array in the pdf file.
+ *     The FlateDecode filter can handle the png compressed image data,
+ *     including predictors that occur as the first byte in each
+ *     raster line, but it is necessary to store only the png IDAT chunk
+ *     data in the pdf array.  The alternative for wrapping png images
+ *     is to transcode them: uncompress into a raster (a pix) and then
+ *     gzip the raster data.  This typically results in a larger pdf file
+ *     because it doesn't use the two-dimensional png predictor.
+ *     Colormaps, which are found in png PLTE chunks, must always be
+ *     pulled out and included separately in the pdf.  For CCITT-G4
+ *     compression, you can not simply include a tiff G4 file -- you must
+ *     either parse it and extract the G4 compressed data within it,
+ *     or uncompress to a raster and G4 compress again.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if USE_PDFIO /* defined in environ.h */ + /* --------------------------------------------*/ + + /* Typical scan resolution in ppi (pixels/inch) */ +static const l_int32 DefaultInputRes = 300; + + +/*---------------------------------------------------------------------* + * Convert specified image files to pdf (one image file per page) * + *---------------------------------------------------------------------*/ +/*! + * \brief convertFilesToPdf() + * + * \param[in] dirname directory name containing images + * \param[in] substr [optional] substring filter on filenames; + * can be NULL + * \param[in] res input resolution of all images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE or + * L_DEFAULT_ENCODE for default) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] title [optional] pdf title; if null, taken from + * the first image filename + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %substr is not NULL, only image filenames that contain
+ *          the substring can be used.  If %substr == NULL, all files
+ *          in the directory are used.
+ *      (2) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order
+ *          before concatenation.
+ *      (3) The scalefactor is applied to each image before encoding.
+ *          If you enter a value <= 0.0, it will be set to 1.0.
+ *      (4) Specifying one of the four encoding types for %type forces
+ *          all images to be compressed with that type.  Use 0 to have
+ *          the type determined for each image based on depth and whether
+ *          or not it has a colormap.
+ * 
+ */ +l_ok +convertFilesToPdf(const char *dirname, + const char *substr, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + const char *fileout) +{ +l_int32 ret; +SARRAY *sa; + + PROCNAME("convertFilesToPdf"); + + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return ERROR_INT("sa not made", procName, 1); + ret = saConvertFilesToPdf(sa, res, scalefactor, type, quality, + title, fileout); + sarrayDestroy(&sa); + return ret; +} + + +/*! + * \brief saConvertFilesToPdf() + * + * \param[in] sa string array of pathnames for images + * \param[in] res input resolution of all images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE or + * L_DEFAULT_ENCODE for default) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] title [optional] pdf title; if null, taken from + * the first image filename + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertFilesToPdf().
+ * 
+ */ +l_ok +saConvertFilesToPdf(SARRAY *sa, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("saConvertFilesToPdf"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + ret = saConvertFilesToPdfData(sa, res, scalefactor, type, quality, + title, &data, &nbytes); + if (ret) { + if (data) LEPT_FREE(data); + return ERROR_INT("pdf data not made", procName, 1); + } + + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + L_ERROR("pdf data not written to file\n", procName); + return ret; +} + + +/*! + * \brief saConvertFilesToPdfData() + * + * \param[in] sa string array of pathnames for images + * \param[in] res input resolution of all images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE or + * L_DEFAULT_ENCODE for default) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] title [optional] pdf title; if null, taken from + * the first image filename + * \param[out] pdata output pdf data (of all images + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertFilesToPdf().
+ * 
+ */ +l_ok +saConvertFilesToPdfData(SARRAY *sa, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +char *fname; +const char *pdftitle; +l_uint8 *imdata; +l_int32 i, n, ret, pagetype, npages, scaledres; +size_t imbytes; +L_BYTEA *ba; +PIX *pixs, *pix; +L_PTRA *pa_data; + + PROCNAME("saConvertFilesToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (scalefactor <= 0.0) scalefactor = 1.0; + if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { + type = L_DEFAULT_ENCODE; + } + + /* Generate all the encoded pdf strings */ + n = sarrayGetCount(sa); + pa_data = ptraCreate(n); + pdftitle = NULL; + for (i = 0; i < n; i++) { + if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); + fname = sarrayGetString(sa, i, L_NOCOPY); + if ((pixs = pixRead(fname)) == NULL) { + L_ERROR("image not readable from file %s\n", procName, fname); + continue; + } + if (!pdftitle) + pdftitle = (title) ? title : fname; + if (scalefactor != 1.0) + pix = pixScale(pixs, scalefactor, scalefactor); + else + pix = pixClone(pixs); + pixDestroy(&pixs); + scaledres = (l_int32)(res * scalefactor); + + /* Select the encoding type */ + if (type != L_DEFAULT_ENCODE) { + pagetype = type; + } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { + pixDestroy(&pix); + L_ERROR("encoding type selection failed for file %s\n", + procName, fname); + continue; + } + + ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, + 0, 0, scaledres, pdftitle, NULL, 0); + pixDestroy(&pix); + if (ret) { + LEPT_FREE(imdata); + L_ERROR("pdf encoding failed for %s\n", procName, fname); + continue; + } + ba = l_byteaInitFromMem(imdata, imbytes); + LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + ptraGetActualCount(pa_data, &npages); + if (npages == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate them */ + fprintf(stderr, "\nconcatenating ... "); + ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); + fprintf(stderr, "done\n"); + + ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ + for (i = 0; i < npages; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + + +/*! + * \brief selectDefaultPdfEncoding() + * + * \param[in] pix + * \param[out] ptype L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This attempts to choose an encoding for the pix that results
+ *          in the smallest file, assuming that if jpeg encoded, it will
+ *          use quality = 75.  The decision is approximate, in that
+ *          (a) all colormapped images will be losslessly encoded with
+ *          gzip (flate), and (b) an image with less than about 20 colors
+ *          is likely to be smaller if flate encoded than if encoded
+ *          as a jpeg (dct).  For example, an image made by pixScaleToGray3()
+ *          will have 10 colors, and flate encoding will give about
+ *          twice the compression as jpeg with quality = 75.
+ * 
+ */ +l_ok +selectDefaultPdfEncoding(PIX *pix, + l_int32 *ptype) +{ +l_int32 w, h, d, factor, ncolors; +PIXCMAP *cmap; + + PROCNAME("selectDefaultPdfEncoding"); + + if (!ptype) + return ERROR_INT("&type not defined", procName, 1); + *ptype = L_FLATE_ENCODE; /* default universal encoding */ + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + cmap = pixGetColormap(pix); + if (d == 8 && !cmap) { + factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 20000.)); + pixNumColors(pix, factor, &ncolors); + if (ncolors < 20) + *ptype = L_FLATE_ENCODE; + else + *ptype = L_JPEG_ENCODE; + } else if (d == 1) { + *ptype = L_G4_ENCODE; + } else if (cmap || d == 2 || d == 4) { + *ptype = L_FLATE_ENCODE; + } else if (d == 8 || d == 32) { + *ptype = L_JPEG_ENCODE; + } else { + return ERROR_INT("type selection failure", procName, 1); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Convert specified image files to pdf without scaling * + *---------------------------------------------------------------------*/ +/*! + * \brief convertUnscaledFilesToPdf() + * + * \param[in] dirname directory name containing images + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] title [optional] pdf title; if null, taken from the first + * image filename + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %substr is not NULL, only image filenames that contain
+ *          the substring can be used.  If %substr == NULL, all files
+ *          in the directory are used.
+ *      (2) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order
+ *          before concatenation.
+ *      (3) This is very fast for jpeg, jp2k and some png files, because
+ *          the compressed data is wrapped up and concatenated.  For tiffg4
+ *          and other types of png, the images must be read and recompressed.
+ * 
+ */ +l_ok +convertUnscaledFilesToPdf(const char *dirname, + const char *substr, + const char *title, + const char *fileout) +{ +l_int32 ret; +SARRAY *sa; + + PROCNAME("convertUnscaledFilesToPdf"); + + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return ERROR_INT("sa not made", procName, 1); + ret = saConvertUnscaledFilesToPdf(sa, title, fileout); + sarrayDestroy(&sa); + return ret; +} + + +/*! + * \brief saConvertUnscaledFilesToPdf() + * + * \param[in] sa string array of pathnames for images + * \param[in] title [optional] pdf title; if null, taken from the first + * image filename + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertUnscaledFilesToPdf().
+ * 
+ */ +l_ok +saConvertUnscaledFilesToPdf(SARRAY *sa, + const char *title, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("saConvertUnscaledFilesToPdf"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + ret = saConvertUnscaledFilesToPdfData(sa, title, &data, &nbytes); + if (ret) { + if (data) LEPT_FREE(data); + return ERROR_INT("pdf data not made", procName, 1); + } + + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + L_ERROR("pdf data not written to file\n", procName); + return ret; +} + + +/*! + * \brief saConvertUnscaledFilesToPdfData() + * + * \param[in] sa string array of pathnames for image files + * \param[in] title [optional] pdf title; if null, taken from the first + * image filename + * \param[out] pdata output pdf data (of all images) + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is very fast for jpeg, jp2k and some png files, because
+ *          the compressed data is wrapped up and concatenated.  For tiffg4
+ *          and other types of png, the images must be read and recompressed.
+ * 
+ */ +l_ok +saConvertUnscaledFilesToPdfData(SARRAY *sa, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +char *fname; +l_uint8 *imdata; +l_int32 i, n, ret, npages; +size_t imbytes; +L_BYTEA *ba; +L_PTRA *pa_data; + + PROCNAME("saConvertUnscaledFilesToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + /* Generate all the encoded pdf strings */ + n = sarrayGetCount(sa); + pa_data = ptraCreate(n); + for (i = 0; i < n; i++) { + if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); + fname = sarrayGetString(sa, i, L_NOCOPY); + + /* Generate the pdf data */ + if (convertUnscaledToPdfData(fname, title, &imdata, &imbytes)) + continue; + + /* ... and add it to the array of single page data */ + ba = l_byteaInitFromMem(imdata, imbytes); + if (imdata) LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + ptraGetActualCount(pa_data, &npages); + if (npages == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate to generate a multipage pdf */ + fprintf(stderr, "\nconcatenating ... "); + ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); + fprintf(stderr, "done\n"); + + /* Clean up */ + ptraGetActualCount(pa_data, &npages); /* maybe failed to read some files */ + for (i = 0; i < npages; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + + +/*! + * \brief convertUnscaledToPdfData() + * + * \param[in] fname of image file in all formats + * \param[in] title [optional] pdf title; can be NULL + * \param[out] pdata output pdf data for image + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is very fast for jpeg, jp2k and some png files, because
+ *          the compressed data is wrapped up and concatenated.  For tiffg4
+ *          and other types of png, the images must be read and recompressed.
+ * 
+ */ +l_ok +convertUnscaledToPdfData(const char *fname, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +const char *pdftitle = NULL; +char *tail = NULL; +l_int32 format; +L_COMP_DATA *cid; + + PROCNAME("convertUnscaledToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + + findFileFormat(fname, &format); + if (format == IFF_UNKNOWN) { + L_WARNING("file %s format is unknown; skip\n", procName, fname); + return 1; + } + if (format == IFF_PS || format == IFF_LPDF) { + L_WARNING("file %s format is %d; skip\n", procName, fname, format); + return 1; + } + + /* Generate the image data required for pdf generation, always + * in binary (not ascii85) coding. Note that jpeg, jp2k and + * some png files are not transcoded. */ + l_generateCIDataForPdf(fname, NULL, 0, &cid); + if (!cid) { + L_ERROR("file %s format is %d; unreadable\n", procName, fname, format); + return 1; + } + + /* If %title == NULL, use the tail of %fname. */ + if (title) { + pdftitle = title; + } else { + splitPathAtDirectory(fname, NULL, &tail); + pdftitle = tail; + } + + /* Generate the pdf string for this page (image). This destroys + * the cid by attaching it to an lpd and destroying the lpd. */ + cidConvertToPdfData(cid, pdftitle, pdata, pnbytes); + LEPT_FREE(tail); + return 0; +} + + +/*---------------------------------------------------------------------* + * Convert multiple images to pdf (one image per page) * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaConvertToPdf() + * + * \param[in] pixa containing images all at the same resolution + * \param[in] res override the resolution of each input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE, or + * L_DEFAULT_ENCODE for default) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] title [optional] pdf title + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
+ *          colormap and many colors, or 32 bpp; FLATE for anything else.
+ *      (2) The scalefactor must be > 0.0; otherwise it is set to 1.0.
+ *      (3) Specifying one of the three encoding types for %type forces
+ *          all images to be compressed with that type.  Use 0 to have
+ *          the type determined for each image based on depth and whether
+ *          or not it has a colormap.
+ * 
+ */ +l_ok +pixaConvertToPdf(PIXA *pixa, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("pixaConvertToPdf"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + ret = pixaConvertToPdfData(pixa, res, scalefactor, type, quality, + title, &data, &nbytes); + if (ret) { + LEPT_FREE(data); + return ERROR_INT("conversion to pdf failed", procName, 1); + } + + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + L_ERROR("pdf data not written to file\n", procName); + return ret; +} + + +/*! + * \brief pixaConvertToPdfData() + * + * \param[in] pixa containing images all at the same resolution + * \param[in] res input resolution of all images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE, or + * L_DEFAULT_ENCODE for default) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] title [optional] pdf title + * \param[out] pdata output pdf data of all images + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixaConvertToPdf().
+ * 
+ */ +l_ok +pixaConvertToPdfData(PIXA *pixa, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_uint8 *imdata; +l_int32 i, n, ret, scaledres, pagetype; +size_t imbytes; +L_BYTEA *ba; +PIX *pixs, *pix; +L_PTRA *pa_data; + + PROCNAME("pixaConvertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (scalefactor <= 0.0) scalefactor = 1.0; + if (type != L_DEFAULT_ENCODE && type != L_JPEG_ENCODE && + type != L_G4_ENCODE && type != L_FLATE_ENCODE && + type != L_JP2K_ENCODE) { + L_WARNING("invalid compression type; using per-page default\n", + procName); + type = L_DEFAULT_ENCODE; + } + + /* Generate all the encoded pdf strings */ + n = pixaGetCount(pixa); + pa_data = ptraCreate(n); + for (i = 0; i < n; i++) { + if ((pixs = pixaGetPix(pixa, i, L_CLONE)) == NULL) { + L_ERROR("pix[%d] not retrieved\n", procName, i); + continue; + } + if (scalefactor != 1.0) + pix = pixScale(pixs, scalefactor, scalefactor); + else + pix = pixClone(pixs); + pixDestroy(&pixs); + scaledres = (l_int32)(res * scalefactor); + + /* Select the encoding type */ + if (type != L_DEFAULT_ENCODE) { + pagetype = type; + } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { + L_ERROR("encoding type selection failed for pix[%d]\n", + procName, i); + pixDestroy(&pix); + continue; + } + + ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, + 0, 0, scaledres, title, NULL, 0); + pixDestroy(&pix); + if (ret) { + LEPT_FREE(imdata); + L_ERROR("pdf encoding failed for pix[%d]\n", procName, i); + continue; + } + ba = l_byteaInitFromMem(imdata, imbytes); + LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + ptraGetActualCount(pa_data, &n); + if (n == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate them */ + ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); + + ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ + for (i = 0; i < n; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + + +/*---------------------------------------------------------------------* + * Single page, multi-image converters * + *---------------------------------------------------------------------*/ +/*! + * \brief convertToPdf() + * + * \param[in] filein input image file -- any format + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, or L_JP2K_ENCODE) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] fileout output pdf file; only required on last + * image on page + * \param[in] x, y location of lower-left corner of image, + * in pixels, relative to the PostScript origin + * (0,0) at the lower-left corner of the page + * \param[in] res override the resolution of the input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] title [optional] pdf title; if null, taken from filein + * \param[in,out] plpd ptr to lpd, which is created on the first + * invocation and returned until last image is + * processed, at which time it is destroyed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) To wrap only one image in pdf, input %plpd = NULL, and
+ *          the value of %position will be ignored:
+ *            convertToPdf(...  type, quality, x, y, res, NULL, 0);
+ *      (2) To wrap multiple images on a single pdf page, this is called
+ *          once for each successive image.  Do it this way:
+ *            L_PDF_DATA   *lpd;
+ *            convertToPdf(...  type, quality, x, y, res, &lpd, L_FIRST_IMAGE);
+ *            convertToPdf(...  type, quality, x, y, res, &lpd, L_NEXT_IMAGE);
+ *            ...
+ *            convertToPdf(...  type, quality, x, y, res, &lpd, L_LAST_IMAGE);
+ *          This will write the result to the value of %fileout specified
+ *          in the first call; succeeding values of %fileout are ignored.
+ *          On the last call: the pdf data bytes are computed and written
+ *          to %fileout, lpd is destroyed internally, and the returned
+ *          value of lpd is null.  So the client has nothing to clean up.
+ *      (3) (a) Set %res == 0 to respect the resolution embedded in the
+ *              image file.  If no resolution is embedded, it will be set
+ *              to the default value.
+ *          (b) Set %res to some other value to override the file resolution.
+ *      (4) (a) If the input %res and the resolution of the output device
+ *              are equal, the image will be "displayed" at the same size
+ *              as the original.
+ *          (b) If the input %res is 72, the output device will render
+ *              the image at 1 pt/pixel.
+ *          (c) Some possible choices for the default input pix resolution are:
+ *                 72 ppi     Render pix on any output device at one pt/pixel
+ *                 96 ppi     Windows default for generated display images
+ *                300 ppi     Typical default for scanned images.
+ *              We choose 300, which is sensible for rendering page images.
+ *              However,  images come from a variety of sources, and
+ *              some are explicitly created for viewing on a display.
+ * 
+ */ +l_ok +convertToPdf(const char *filein, + l_int32 type, + l_int32 quality, + const char *fileout, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("convertToPdf"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!plpd || (position == L_LAST_IMAGE)) { + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + } + + if (convertToPdfData(filein, type, quality, &data, &nbytes, x, y, + res, title, plpd, position)) + return ERROR_INT("pdf data not made", procName, 1); + + if (!plpd || (position == L_LAST_IMAGE)) { + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + return ERROR_INT("pdf data not written to file", procName, 1); + } + + return 0; +} + + +/*! + * \brief convertImageDataToPdf() + * + * \param[in] imdata array of formatted image data; e.g., png, jpeg + * \param[in] size size of image data + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, or L_JP2K_ENCODE) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] fileout output pdf file; only required on last + * image on page + * \param[in] x, y location of lower-left corner of image, + * in pixels, relative to the PostScript origin + * (0,0) at the lower-left corner of the page + * \param[in] res override the resolution of the input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] title [optional] pdf title + * \param[in,out] plpd ptr to lpd, which is created on the first + * invocation and returned until last image is + * processed, at which time it is destroyed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %res == 0 and the input resolution field is 0,
+ *          this will use DefaultInputRes.
+ *      (2) See comments in convertToPdf().
+ * 
+ */ +l_ok +convertImageDataToPdf(l_uint8 *imdata, + size_t size, + l_int32 type, + l_int32 quality, + const char *fileout, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +l_int32 ret; +PIX *pix; + + PROCNAME("convertImageDataToPdf"); + + if (!imdata) + return ERROR_INT("image data not defined", procName, 1); + if (!plpd || (position == L_LAST_IMAGE)) { + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + } + + if ((pix = pixReadMem(imdata, size)) == NULL) + return ERROR_INT("pix not read", procName, 1); + if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { + selectDefaultPdfEncoding(pix, &type); + } + ret = pixConvertToPdf(pix, type, quality, fileout, x, y, res, + title, plpd, position); + pixDestroy(&pix); + return ret; +} + + +/*! + * \brief convertToPdfData() + * + * \param[in] filein input image file -- any format + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, or L_JP2K_ENCODE) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[out] pdata pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \param[in] x, y location of lower-left corner of image, + * in pixels, relative to the PostScript origin + * (0,0) at the lower-left corner of the page + * \param[in] res override the resolution of the input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] title [optional] pdf title; if null, use filein + * \param[in,out] plpd ptr to lpd, which is created on the first + * invocation and returned until last image is + * processed, at which time it is destroyed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %res == 0 and the input resolution field is 0,
+ *          this will use DefaultInputRes.
+ *      (2) See comments in convertToPdf().
+ * 
+ */ +l_ok +convertToPdfData(const char *filein, + l_int32 type, + l_int32 quality, + l_uint8 **pdata, + size_t *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +PIX *pix; + + PROCNAME("convertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + + if ((pix = pixRead(filein)) == NULL) + return ERROR_INT("pix not made", procName, 1); + + pixConvertToPdfData(pix, type, quality, pdata, pnbytes, + x, y, res, (title) ? title : filein, plpd, position); + pixDestroy(&pix); + return 0; +} + + +/*! + * \brief convertImageDataToPdfData() + * + * \param[in] imdata array of formatted image data; e.g., png, jpeg + * \param[in] size size of image data + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, or L_JP2K_ENCODE) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[out] pdata pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \param[in] x, y location of lower-left corner of image, + * in pixels, relative to the PostScript origin + * (0,0) at the lower-left corner of the page + * \param[in] res override the resolution of the input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] title [optional] pdf title + * \param[out] plpd ptr to lpd, which is created on the first + * invocation and returned until last image is + * processed, at which time it is destroyed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %res == 0 and the input resolution field is 0,
+ *          this will use DefaultInputRes.
+ *      (2) See comments in convertToPdf().
+ * 
+ */ +l_ok +convertImageDataToPdfData(l_uint8 *imdata, + size_t size, + l_int32 type, + l_int32 quality, + l_uint8 **pdata, + size_t *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +l_int32 ret; +PIX *pix; + + PROCNAME("convertImageDataToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!imdata) + return ERROR_INT("image data not defined", procName, 1); + if (plpd) { /* part of multi-page invocation */ + if (position == L_FIRST_IMAGE) + *plpd = NULL; + } + + if ((pix = pixReadMem(imdata, size)) == NULL) + return ERROR_INT("pix not read", procName, 1); + if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { + selectDefaultPdfEncoding(pix, &type); + } + ret = pixConvertToPdfData(pix, type, quality, pdata, pnbytes, + x, y, res, title, plpd, position); + pixDestroy(&pix); + return ret; +} + + +/*! + * \brief pixConvertToPdf() + * + * \param[in] pix + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE) + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[in] fileout output pdf file; only required on last + * image on page + * \param[in] x, y location of lower-left corner of image, + * in pixels, relative to the PostScript origin + * (0,0) at the lower-left corner of the page + * \param[in] res override the resolution of the input image, + * in ppi; use 0 to respect the resolution + * embedded in the input images + * \param[in] title [optional] pdf title + * \param[in,out] plpd ptr to lpd, which is created on the first + * invocation and returned until last image is + * processed, at which time it is destroyed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %res == 0 and the input resolution field is 0,
+ *          this will use DefaultInputRes.
+ *      (2) This only writes data to fileout if it is the last
+ *          image to be written on the page.
+ *      (3) See comments in convertToPdf().
+ * 
+ */ +l_ok +pixConvertToPdf(PIX *pix, + l_int32 type, + l_int32 quality, + const char *fileout, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("pixConvertToPdf"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!plpd || (position == L_LAST_IMAGE)) { + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + } + + if (pixConvertToPdfData(pix, type, quality, &data, &nbytes, + x, y, res, title, plpd, position)) { + LEPT_FREE(data); + return ERROR_INT("pdf data not made", procName, 1); + } + + if (!plpd || (position == L_LAST_IMAGE)) { + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + return ERROR_INT("pdf data not written to file", procName, 1); + } + return 0; +} + + +/*! + * \brief pixWriteStreamPdf() + * + * \param[in] fp file stream opened for writing + * \param[in] pix all depths, cmap OK + * \param[in] res override the resolution of the input image, in ppi; + * use 0 to respect the resolution embedded in the input + * \param[in] title [optional] pdf title; taken from the first image + * placed on a page; e.g., an input image filename + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is the simplest interface for writing a single image
+ *          with pdf encoding to a stream.  It uses G4 encoding for 1 bpp,
+ *          JPEG encoding for 8 bpp (no cmap) and 32 bpp, and FLATE
+ *          encoding for everything else.
+ * 
+ */ +l_ok +pixWriteStreamPdf(FILE *fp, + PIX *pix, + l_int32 res, + const char *title) +{ +l_uint8 *data; +size_t nbytes, nbytes_written; + + PROCNAME("pixWriteStreamPdf"); + + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (pixWriteMemPdf(&data, &nbytes, pix, res, title) != 0) { + LEPT_FREE(data); + return ERROR_INT("pdf data not made", procName, 1); + } + + nbytes_written = fwrite(data, 1, nbytes, fp); + LEPT_FREE(data); + if (nbytes != nbytes_written) + return ERROR_INT("failure writing pdf data to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteMemPdf() + * + * \param[out] pdata pdf as byte array + * \param[out] pnbytes number of bytes in pdf array + * \param[in] pix all depths, cmap OK + * \param[in] res override the resolution of the input image, in ppi; + * use 0 to respect the res embedded in the input + * \param[in] title [optional] pdf title; taken from the first image + * placed on a page; e.g., an input image filename + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is the simplest interface for writing a single image
+ *          with pdf encoding to memory.  It uses G4 encoding for 1 bpp,
+ *          and makes a guess whether to use JPEG or FLATE encoding for
+ *          everything else.
+ * 
+ */ +l_ok +pixWriteMemPdf(l_uint8 **pdata, + size_t *pnbytes, + PIX *pix, + l_int32 res, + const char *title) +{ +l_int32 ret, type; + + PROCNAME("pixWriteMemPdf"); + + if (pdata) *pdata = NULL; + if (pnbytes) *pnbytes = 0; + if (!pdata || !pnbytes) + return ERROR_INT("&data or &nbytes not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + selectDefaultPdfEncoding(pix, &type); + ret = pixConvertToPdfData(pix, type, 75, pdata, pnbytes, + 0, 0, res, title, NULL, 0); + if (ret) + return ERROR_INT("pdf data not made", procName, 1); + return 0; +} + + +/*---------------------------------------------------------------------* + * Segmented multi-page, multi-image converter * + *---------------------------------------------------------------------*/ +/*! + * \brief convertSegmentedFilesToPdf() + * + * \param[in] dirname directory name containing images + * \param[in] substr [optional] substring filter on filenames; + * can be NULL + * \param[in] res input resolution of all images + * \param[in] type compression type for non-image regions; the + * image regions are always compressed with + * L_JPEG_ENCODE + * \param[in] thresh used for converting gray --> 1 bpp with + * L_G4_ENCODE + * \param[in] baa [optional] boxaa of image regions + * \param[in] quality used for JPEG only; 0 for default (75) + * \param[in] scalefactor scaling factor applied to each image region + * \param[in] title [optional] pdf title; if null, taken from + * the first image filename + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %substr is not NULL, only image filenames that contain
+ *          the substring can be used.  If %substr == NULL, all files
+ *          in the directory are used.
+ *      (2) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order
+ *          before concatenation.
+ *      (3) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
+ *          colormap and many colors, or 32 bpp; FLATE for anything else.
+ *      (4) The boxaa, if it exists, contains one boxa of "image regions"
+ *          for each image file.  The boxa must be aligned with the
+ *          sorted set of images.
+ *      (5) The scalefactor is applied to each image region.  It is
+ *          typically < 1.0, to save bytes in the final pdf, because
+ *          the resolution is often not critical in non-text regions.
+ *      (6) If the non-image regions have pixel depth > 1 and the encoding
+ *          type is G4, they are automatically scaled up by 2x and
+ *          thresholded.  Otherwise, no scaling is performed on them.
+ *      (7) Note that this function can be used to generate multipage
+ *          G4 compressed pdf from any input, by using %boxaa == NULL
+ *          and %type == L_G4_ENCODE.
+ * 
+ */ +l_ok +convertSegmentedFilesToPdf(const char *dirname, + const char *substr, + l_int32 res, + l_int32 type, + l_int32 thresh, + BOXAA *baa, + l_int32 quality, + l_float32 scalefactor, + const char *title, + const char *fileout) +{ +char *fname; +l_uint8 *imdata, *data; +l_int32 i, npages, nboxa, nboxes, ret; +size_t imbytes, databytes; +BOXA *boxa; +L_BYTEA *ba; +L_PTRA *pa_data; +SARRAY *sa; + + PROCNAME("convertSegmentedFilesToPdf"); + + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((sa = getNumberedPathnamesInDirectory(dirname, substr, 0, 0, 10000)) + == NULL) + return ERROR_INT("sa not made", procName, 1); + + npages = sarrayGetCount(sa); + /* If necessary, extend the boxaa, which is page-aligned with + * the image files, to be as large as the set of images. */ + if (baa) { + nboxa = boxaaGetCount(baa); + if (nboxa < npages) { + boxa = boxaCreate(1); + boxaaExtendWithInit(baa, npages, boxa); + boxaDestroy(&boxa); + } + } + + /* Generate and save all the encoded pdf strings */ + pa_data = ptraCreate(npages); + for (i = 0; i < npages; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + if (!strcmp(fname, "")) continue; + boxa = NULL; + if (baa) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + nboxes = boxaGetCount(boxa); + if (nboxes == 0) + boxaDestroy(&boxa); + } + ret = convertToPdfDataSegmented(fname, res, type, thresh, boxa, + quality, scalefactor, title, + &imdata, &imbytes); + boxaDestroy(&boxa); /* safe; in case nboxes > 0 */ + if (ret) { + L_ERROR("pdf encoding failed for %s\n", procName, fname); + continue; + } + ba = l_byteaInitFromMem(imdata, imbytes); + if (imdata) LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + sarrayDestroy(&sa); + + ptraGetActualCount(pa_data, &npages); + if (npages == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate */ + ret = ptraConcatenatePdfToData(pa_data, NULL, &data, &databytes); + + /* Clean up */ + ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ + for (i = 0; i < npages; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + + if (ret) { + if (data) LEPT_FREE(data); + return ERROR_INT("pdf data not made", procName, 1); + } + + ret = l_binaryWrite(fileout, "w", data, databytes); + LEPT_FREE(data); + if (ret) + L_ERROR("pdf data not written to file\n", procName); + return ret; +} + + +/*! + * \brief convertNumberedMasksToBoxaa() + * + * \param[in] dirname directory name containing mask images + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] numpre number of characters in name before number + * \param[in] numpost number of characters in name after number, up + * to a dot before an extension + * \return boxaa of mask regions, or NULL on error + * + *
+ * Notes:
+ *      (1) This is conveniently used to generate the input boxaa
+ *          for convertSegmentedFilesToPdf().  It guarantees that the
+ *          boxa will be aligned with the page images, even if some
+ *          of the boxa are empty.
+ * 
+ */ +BOXAA * +convertNumberedMasksToBoxaa(const char *dirname, + const char *substr, + l_int32 numpre, + l_int32 numpost) +{ +char *fname; +l_int32 i, n; +BOXA *boxa; +BOXAA *baa; +PIX *pix; +SARRAY *sa; + + PROCNAME("convertNumberedMasksToBoxaa"); + + if (!dirname) + return (BOXAA *)ERROR_PTR("dirname not defined", procName, NULL); + + if ((sa = getNumberedPathnamesInDirectory(dirname, substr, numpre, + numpost, 10000)) == NULL) + return (BOXAA *)ERROR_PTR("sa not made", procName, NULL); + + /* Generate and save all the encoded pdf strings */ + n = sarrayGetCount(sa); + baa = boxaaCreate(n); + boxa = boxaCreate(1); + boxaaInitFull(baa, boxa); + boxaDestroy(&boxa); + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + if (!strcmp(fname, "")) continue; + if ((pix = pixRead(fname)) == NULL) { + L_WARNING("invalid image on page %d\n", procName, i); + continue; + } + boxa = pixConnComp(pix, NULL, 8); + boxaaReplaceBoxa(baa, i, boxa); + pixDestroy(&pix); + } + + sarrayDestroy(&sa); + return baa; +} + + +/*---------------------------------------------------------------------* + * Segmented single page, multi-image converters * + *---------------------------------------------------------------------*/ +/*! + * \brief convertToPdfSegmented() + * + * \param[in] filein input image file -- any format + * \param[in] res input image resolution; typ. 300 ppi; + * use 0 for default + * \param[in] type compression type for non-image regions; image + * regions are always compressed with L_JPEG_ENCODE + * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE + * \param[in] boxa [optional] of image regions; can be null + * \param[in] quality used for jpeg image regions; 0 for default + * \param[in] scalefactor used for jpeg regions; must be <= 1.0 + * \param[in] title [optional] pdf title; typically taken from the + * input file for the pix + * \param[in] fileout output pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there are no image regions, set %boxa == NULL;
+ *          %quality and %scalefactor are ignored.
+ *      (2) Typically, %scalefactor is < 1.0, because the image regions
+ *          can be rendered at a lower resolution (for better compression)
+ *          than the text regions.  If %scalefactor == 0, we use 1.0.
+ *          If the input image is 1 bpp and scalefactor < 1.0, we
+ *          use scaleToGray() to downsample the image regions to gray
+ *          before compressing them.
+ *      (3) If the compression type for non-image regions is L_G4_ENCODE
+ *          and bpp > 1, the image is upscaled 2x and thresholded
+ *          to 1 bpp.  That is the only situation where %thresh is used.
+ *      (4) The parameter %quality is only used for image regions.
+ *          If %type == L_JPEG_ENCODE, default jpeg quality (75) is
+ *          used for the non-image regions.
+ *      (5) Processing matrix for non-image regions.
+ *
+ *          Input           G4              JPEG                FLATE
+ *          ----------|---------------------------------------------------
+ *          1 bpp     |  1x, 1 bpp       1x flate, 1 bpp     1x, 1 bpp
+ *                    |
+ *          cmap      |  2x, 1 bpp       1x flate, cmap      1x, cmap
+ *                    |
+ *          2,4 bpp   |  2x, 1 bpp       1x flate            1x, 2,4 bpp
+ *          no cmap   |                  2,4 bpp
+ *                    |
+ *          8,32 bpp  |  2x, 1 bpp       1x (jpeg)           1x, 8,32 bpp
+ *          no cmap   |                  8,32 bpp
+ *
+ *          Summary:
+ *          (a) if G4 is requested, G4 is used, with 2x upscaling
+ *              for all cases except 1 bpp.
+ *          (b) if JPEG is requested, use flate encoding for all cases
+ *              except 8 bpp without cmap and 32 bpp (rgb).
+ *          (c) if FLATE is requested, use flate with no transformation
+ *              of the raster data.
+ *      (6) Calling options/sequence for these functions:
+ *              file  -->  file      (convertToPdfSegmented)
+ *                  pix  -->  file      (pixConvertToPdfSegmented)
+ *                      pix  -->  data      (pixConvertToPdfDataSegmented)
+ *              file  -->  data      (convertToPdfDataSegmented)
+ *                      pix  -->  data      (pixConvertToPdfDataSegmented)
+ * 
+ */ +l_ok +convertToPdfSegmented(const char *filein, + l_int32 res, + l_int32 type, + l_int32 thresh, + BOXA *boxa, + l_int32 quality, + l_float32 scalefactor, + const char *title, + const char *fileout) +{ +l_int32 ret; +PIX *pixs; + + PROCNAME("convertToPdfSegmented"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE) + return ERROR_INT("invalid conversion type", procName, 1); + if (boxa && scalefactor > 1.0) { + L_WARNING("setting scalefactor to 1.0\n", procName); + scalefactor = 1.0; + } + + if ((pixs = pixRead(filein)) == NULL) + return ERROR_INT("pixs not made", procName, 1); + + ret = pixConvertToPdfSegmented(pixs, res, type, thresh, boxa, quality, + scalefactor, (title) ? title : filein, + fileout); + pixDestroy(&pixs); + return ret; +} + + +/*! + * \brief pixConvertToPdfSegmented() + * + * \param[in] pixs any depth, cmap OK + * \param[in] res input image resolution; typ. 300 ppi; + * use 0 for default + * \param[in] type compression type for non-image regions; image + * regions are always compressed with L_JPEG_ENCODE + * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE + * \param[in] boxa [optional] of image regions; can be null + * \param[in] quality used for jpeg image regions; 0 for default + * \param[in] scalefactor used for jpeg regions; must be <= 1.0 + * \param[in] title [optional] pdf title; typically taken from the + * input file for the pix + * \param[in] fileout output pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertToPdfSegmented() for details.
+ * 
+ */ +l_ok +pixConvertToPdfSegmented(PIX *pixs, + l_int32 res, + l_int32 type, + l_int32 thresh, + BOXA *boxa, + l_int32 quality, + l_float32 scalefactor, + const char *title, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("pixConvertToPdfSegmented"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE) + return ERROR_INT("invalid conversion type", procName, 1); + if (boxa && scalefactor > 1.0) { + L_WARNING("setting scalefactor to 1.0\n", procName); + scalefactor = 1.0; + } + + ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, quality, + scalefactor, title, &data, &nbytes); + if (ret) + return ERROR_INT("pdf generation failure", procName, 1); + + ret = l_binaryWrite(fileout, "w", data, nbytes); + if (data) LEPT_FREE(data); + return ret; +} + + +/*! + * \brief convertToPdfDataSegmented() + * + * \param[in] filein input image file -- any format + * \param[in] res input image resolution; typ. 300 ppi; + * use 0 for default + * \param[in] type compression type for non-image regions; image + * regions are always compressed with L_JPEG_ENCODE + * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE + * \param[in] boxa [optional] image regions; can be null + * \param[in] quality used for jpeg image regions; 0 for default + * \param[in] scalefactor used for jpeg regions; must be <= 1.0 + * \param[in] title [optional] pdf title; if null, uses filein + * \param[out] pdata pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there are no image regions, set %boxa == NULL;
+ *          %quality and %scalefactor are ignored.
+ *      (2) Typically, %scalefactor is < 1.0.  The image regions are
+ * 
+ */ +l_ok +convertToPdfDataSegmented(const char *filein, + l_int32 res, + l_int32 type, + l_int32 thresh, + BOXA *boxa, + l_int32 quality, + l_float32 scalefactor, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_int32 ret; +PIX *pixs; + + PROCNAME("convertToPdfDataSegmented"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE) + return ERROR_INT("invalid conversion type", procName, 1); + if (boxa && scalefactor > 1.0) { + L_WARNING("setting scalefactor to 1.0\n", procName); + scalefactor = 1.0; + } + + if ((pixs = pixRead(filein)) == NULL) + return ERROR_INT("pixs not made", procName, 1); + + ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, + quality, scalefactor, + (title) ? title : filein, + pdata, pnbytes); + pixDestroy(&pixs); + return ret; +} + + +/*! + * \brief pixConvertToPdfDataSegmented() + * + * \param[in] pixs any depth, cmap OK + * \param[in] res input image resolution; typ. 300 ppi; + * use 0 for default + * \param[in] type compression type for non-image regions; image + * regions are always compressed with L_JPEG_ENCODE + * \param[in] thresh for converting gray --> 1 bpp with L_G4_ENCODE + * \param[in] boxa [optional] of image regions; can be null + * \param[in] quality used for jpeg image regions; 0 for default + * \param[in] scalefactor used for jpeg regions; must be <= 1.0 + * \param[in] title [optional] pdf title; typically taken from the + * input file for the pix + * \param[out] pdata pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See convertToPdfSegmented() for details.
+ * 
+ */ +l_ok +pixConvertToPdfDataSegmented(PIX *pixs, + l_int32 res, + l_int32 type, + l_int32 thresh, + BOXA *boxa, + l_int32 quality, + l_float32 scalefactor, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_int32 i, nbox, seq, bx, by, bw, bh, upscale; +l_float32 scale; +BOX *box, *boxc, *box2; +PIX *pix, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; +PIXCMAP *cmap; +L_PDF_DATA *lpd; + + PROCNAME("pixConvertToPdfDataSegmented"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE) + return ERROR_INT("invalid conversion type", procName, 1); + if (boxa && (scalefactor <= 0.0 || scalefactor > 1.0)) { + L_WARNING("setting scalefactor to 1.0\n", procName); + scalefactor = 1.0; + } + + /* Adjust scalefactor so that the product with res gives an integer */ + if (res <= 0) + res = DefaultInputRes; + scale = (l_float32)((l_int32)(scalefactor * res + 0.5)) / (l_float32)res; + cmap = pixGetColormap(pixs); + + /* Simple case: single image to be encoded */ + if (!boxa || boxaGetCount(boxa) == 0) { + if (pixGetDepth(pixs) > 1 && type == L_G4_ENCODE) { + if (cmap) + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixt1 = pixConvertTo8(pixs, FALSE); + pixt2 = pixScaleGray2xLIThresh(pixt1, thresh); + pixConvertToPdfData(pixt2, type, quality, pdata, pnbytes, + 0, 0, 2 * res, title, NULL, 0); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + } else { + pixConvertToPdfData(pixs, type, quality, pdata, pnbytes, + 0, 0, res, title, NULL, 0); + } + return 0; + } + + /* Multiple images to be encoded. If %type == L_G4_ENCODE, + * jpeg encode a version of pixs that is blanked in the non-image + * regions, and paint the scaled non-image part onto it through a mask. + * Otherwise, we must put the non-image part down first and + * then render all the image regions separately on top of it, + * at their own resolution. */ + pixt1 = pixSetBlackOrWhiteBoxa(pixs, boxa, L_SET_WHITE); /* non-image */ + nbox = boxaGetCount(boxa); + if (type == L_G4_ENCODE) { + pixt2 = pixCreateTemplate(pixs); /* only image regions */ + pixSetBlackOrWhite(pixt2, L_SET_WHITE); + for (i = 0; i < nbox; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pix = pixClipRectangle(pixs, box, &boxc); + boxGetGeometry(boxc, &bx, &by, &bw, &bh); + pixRasterop(pixt2, bx, by, bw, bh, PIX_SRC, pix, 0, 0); + pixDestroy(&pix); + boxDestroy(&box); + boxDestroy(&boxc); + } + pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pixt3) == 1) + pixt4 = pixScaleToGray(pixt3, scale); + else + pixt4 = pixScale(pixt3, scale, scale); + pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, + 0, 0, (l_int32)(scale * res), title, + &lpd, L_FIRST_IMAGE); + + if (pixGetDepth(pixt1) == 1) { + pixt5 = pixClone(pixt1); + upscale = 1; + } else { + pixt6 = pixConvertTo8(pixt1, 0); + pixt5 = pixScaleGray2xLIThresh(pixt6, thresh); + pixDestroy(&pixt6); + upscale = 2; + } + pixConvertToPdfData(pixt5, L_G4_ENCODE, quality, pdata, pnbytes, + 0, 0, upscale * res, title, &lpd, L_LAST_IMAGE); + pixDestroy(&pixt2); + pixDestroy(&pixt3); + pixDestroy(&pixt4); + pixDestroy(&pixt5); + } else { + /* Put the non-image part down first. This is the full + size of the page, so we can use it to find the page + height in pixels, which is required for determining + the LL corner of the image relative to the LL corner + of the page. */ + pixConvertToPdfData(pixt1, type, quality, pdata, pnbytes, 0, 0, + res, title, &lpd, L_FIRST_IMAGE); + for (i = 0; i < nbox; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pixt2 = pixClipRectangle(pixs, box, &boxc); + pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); + if (pixGetDepth(pixt3) == 1) + pixt4 = pixScaleToGray(pixt3, scale); + else + pixt4 = pixScale(pixt3, scale, scale); + box2 = boxTransform(boxc, 0, 0, scale, scale); + boxGetGeometry(box2, &bx, &by, NULL, &bh); + seq = (i == nbox - 1) ? L_LAST_IMAGE : L_NEXT_IMAGE; + pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, + bx, by, (l_int32)(scale * res), title, + &lpd, seq); + pixDestroy(&pixt2); + pixDestroy(&pixt3); + pixDestroy(&pixt4); + boxDestroy(&box); + boxDestroy(&boxc); + boxDestroy(&box2); + } + } + + pixDestroy(&pixt1); + return 0; +} + + +/*---------------------------------------------------------------------* + * Multi-page concatenation * + *---------------------------------------------------------------------*/ +/*! + * \brief concatenatePdf() + * + * \param[in] dirname directory name containing single-page pdf files + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] fileout concatenated pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ *      (2) If %substr is not NULL, only filenames that contain
+ *          the substring can be returned.  If %substr == NULL,
+ *          none of the filenames are filtered out.
+ *      (3) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order
+ *          before concatenation.
+ * 
+ */ +l_ok +concatenatePdf(const char *dirname, + const char *substr, + const char *fileout) +{ +l_int32 ret; +SARRAY *sa; + + PROCNAME("concatenatePdf"); + + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return ERROR_INT("sa not made", procName, 1); + ret = saConcatenatePdf(sa, fileout); + sarrayDestroy(&sa); + return ret; +} + + +/*! + * \brief saConcatenatePdf() + * + * \param[in] sa string array of pathnames for single-page pdf files + * \param[in] fileout concatenated pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ * 
+ */ +l_ok +saConcatenatePdf(SARRAY *sa, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("saConcatenatePdf"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + ret = saConcatenatePdfToData(sa, &data, &nbytes); + if (ret) + return ERROR_INT("pdf data not made", procName, 1); + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + return ret; +} + + +/*! + * \brief ptraConcatenatePdf() + * + * \param[in] pa array of pdf strings, each for a single-page pdf file + * \param[in] fileout concatenated pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ * 
+ */ +l_ok +ptraConcatenatePdf(L_PTRA *pa, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("ptraConcatenatePdf"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + ret = ptraConcatenatePdfToData(pa, NULL, &data, &nbytes); + if (ret) + return ERROR_INT("pdf data not made", procName, 1); + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + return ret; +} + + +/*! + * \brief concatenatePdfToData() + * + * \param[in] dirname directory name containing single-page pdf files + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[out] pdata concatenated pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ *      (2) If %substr is not NULL, only filenames that contain
+ *          the substring can be returned.  If %substr == NULL,
+ *          none of the filenames are filtered out.
+ *      (3) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order
+ *          before concatenation.
+ * 
+ */ +l_ok +concatenatePdfToData(const char *dirname, + const char *substr, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_int32 ret; +SARRAY *sa; + + PROCNAME("concatenatePdfToData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!dirname) + return ERROR_INT("dirname not defined", procName, 1); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return ERROR_INT("sa not made", procName, 1); + ret = saConcatenatePdfToData(sa, pdata, pnbytes); + sarrayDestroy(&sa); + return ret; +} + + +/*! + * \brief saConcatenatePdfToData() + * + * \param[in] sa string array of pathnames for single-page pdf files + * \param[out] pdata concatenated pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ * 
+ */ +l_ok +saConcatenatePdfToData(SARRAY *sa, + l_uint8 **pdata, + size_t *pnbytes) +{ +char *fname; +l_int32 i, npages, ret; +L_BYTEA *bas; +L_PTRA *pa_data; /* input pdf data for each page */ + + PROCNAME("saConcatenatePdfToData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + /* Read the pdf files into memory */ + if ((npages = sarrayGetCount(sa)) == 0) + return ERROR_INT("no filenames found", procName, 1); + pa_data = ptraCreate(npages); + for (i = 0; i < npages; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + bas = l_byteaInitFromFile(fname); + ptraAdd(pa_data, bas); + } + + ret = ptraConcatenatePdfToData(pa_data, sa, pdata, pnbytes); + + /* Cleanup: some pages could have been removed */ + ptraGetActualCount(pa_data, &npages); + for (i = 0; i < npages; i++) { + bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&bas); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + +/* --------------------------------------------*/ +#endif /* USE_PDFIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pdfio1stub.c b/3rdparty/hgOCR/leptonica/pdfio1stub.c new file mode 100644 index 00000000..a56def84 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pdfio1stub.c @@ -0,0 +1,305 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pdfio1stub.c + *
+ *
+ *     Stubs for pdfio1.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_PDFIO /* defined in environ.h */ +/* --------------------------------------------*/ + +/* ----------------------------------------------------------------------*/ + +l_ok convertFilesToPdf(const char *dirname, const char *substr, + l_int32 res, l_float32 scalefactor, + l_int32 type, l_int32 quality, + const char *title, const char *fileout) +{ + return ERROR_INT("function not present", "convertFilesToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConvertFilesToPdf(SARRAY *sa, l_int32 res, l_float32 scalefactor, + l_int32 type, l_int32 quality, + const char *title, const char *fileout) +{ + return ERROR_INT("function not present", "saConvertFilesToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConvertFilesToPdfData(SARRAY *sa, l_int32 res, + l_float32 scalefactor, l_int32 type, + l_int32 quality, const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "saConvertFilesToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok selectDefaultPdfEncoding(PIX *pix, l_int32 *ptype) +{ + return ERROR_INT("function not present", "selectDefaultPdfEncoding", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertUnscaledFilesToPdf(const char *dirname, const char *substr, + const char *title, const char *fileout) +{ + return ERROR_INT("function not present", "convertUnscaledFilesToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConvertUnscaledFilesToPdf(SARRAY *sa, const char *title, + const char *fileout) +{ + return ERROR_INT("function not present", "saConvertUnscaledFilesToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConvertUnscaledFilesToPdfData(SARRAY *sa, const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", + "saConvertUnscaledFilesToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertUnscaledToPdfData(const char *fname, const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "convertUnscaledToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, + l_int32 type, l_int32 quality, + const char *title, const char *fileout) +{ + return ERROR_INT("function not present", "pixaConvertToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaConvertToPdfData(PIXA *pixa, l_int32 res, l_float32 scalefactor, + l_int32 type, l_int32 quality, const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "pixaConvertToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertToPdf(const char *filein, + l_int32 type, l_int32 quality, + const char *fileout, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "convertToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertImageDataToPdf(l_uint8 *imdata, size_t size, + l_int32 type, l_int32 quality, + const char *fileout, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "convertImageDataToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertToPdfData(const char *filein, + l_int32 type, l_int32 quality, + l_uint8 **pdata, size_t *pnbytes, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "convertToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertImageDataToPdfData(l_uint8 *imdata, size_t size, + l_int32 type, l_int32 quality, + l_uint8 **pdata, size_t *pnbytes, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "convertImageDataToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixConvertToPdf(PIX *pix, l_int32 type, l_int32 quality, + const char *fileout, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "pixConvertToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamPdf(FILE *fp, PIX *pix, l_int32 res, const char *title) +{ + return ERROR_INT("function not present", "pixWriteStreamPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemPdf(l_uint8 **pdata, size_t *pnbytes, PIX *pix, + l_int32 res, const char *title) +{ + return ERROR_INT("function not present", "pixWriteMemPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertSegmentedFilesToPdf(const char *dirname, const char *substr, + l_int32 res, l_int32 type, l_int32 thresh, + BOXAA *baa, l_int32 quality, + l_float32 scalefactor, const char *title, + const char *fileout) +{ + return ERROR_INT("function not present", "convertSegmentedFilesToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +BOXAA * convertNumberedMasksToBoxaa(const char *dirname, const char *substr, + l_int32 numpre, l_int32 numpost) +{ + return (BOXAA *)ERROR_PTR("function not present", + "convertNumberedMasksToBoxaa", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertToPdfSegmented(const char *filein, l_int32 res, l_int32 type, + l_int32 thresh, BOXA *boxa, l_int32 quality, + l_float32 scalefactor, const char *title, + const char *fileout) +{ + return ERROR_INT("function not present", "convertToPdfSegmented", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixConvertToPdfSegmented(PIX *pixs, l_int32 res, l_int32 type, + l_int32 thresh, BOXA *boxa, l_int32 quality, + l_float32 scalefactor, const char *title, + const char *fileout) +{ + return ERROR_INT("function not present", "pixConvertToPdfSegmented", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertToPdfDataSegmented(const char *filein, l_int32 res, + l_int32 type, l_int32 thresh, BOXA *boxa, + l_int32 quality, l_float32 scalefactor, + const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "convertToPdfDataSegmented", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixConvertToPdfDataSegmented(PIX *pixs, l_int32 res, l_int32 type, + l_int32 thresh, BOXA *boxa, + l_int32 quality, l_float32 scalefactor, + const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "pixConvertToPdfDataSegmented", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok concatenatePdf(const char *dirname, const char *substr, + const char *fileout) +{ + return ERROR_INT("function not present", "concatenatePdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConcatenatePdf(SARRAY *sa, const char *fileout) +{ + return ERROR_INT("function not present", "saConcatenatePdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok ptraConcatenatePdf(L_PTRA *pa, const char *fileout) +{ + return ERROR_INT("function not present", "ptraConcatenatePdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok concatenatePdfToData(const char *dirname, const char *substr, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "concatenatePdfToData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok saConcatenatePdfToData(SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "saConcatenatePdfToData", 1); +} + +/* ----------------------------------------------------------------------*/ + +/* --------------------------------------------*/ +#endif /* !USE_PDFIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pdfio2.c b/3rdparty/hgOCR/leptonica/pdfio2.c new file mode 100644 index 00000000..9fbc540a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pdfio2.c @@ -0,0 +1,2560 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pdfio2.c + *
+ *
+ *    Lower-level operations for generating pdf.
+ *
+ *     Intermediate function for single page, multi-image conversion
+ *          l_int32              pixConvertToPdfData()
+ *
+ *     Intermediate function for generating multipage pdf output
+ *          l_int32              ptraConcatenatePdfToData()
+ *
+ *     Convert tiff multipage to pdf file
+ *          l_int32              convertTiffMultipageToPdf()
+ *
+ *     Low-level CID-based operations
+ *
+ *       Without transcoding
+ *          l_int32              l_generateCIDataForPdf()
+ *          L_COMP_DATA         *l_generateFlateDataPdf()
+ *          L_COMP_DATA         *l_generateJpegData()
+ *          L_COMP_DATA         *l_generateJpegDataMem()
+ *          static L_COMP_DATA  *l_generateJp2kData()
+ *
+ *       With transcoding
+ *          l_int32              l_generateCIData()
+ *          l_int32              pixGenerateCIData()
+ *          L_COMP_DATA         *l_generateFlateData()
+ *          static L_COMP_DATA  *pixGenerateFlateData()
+ *          static L_COMP_DATA  *pixGenerateJpegData()
+ *          static L_COMP_DATA  *pixGenerateJp2kData()
+ *          static L_COMP_DATA  *pixGenerateG4Data()
+ *          L_COMP_DATA         *l_generateG4Data()
+ *
+ *       Other
+ *          l_int32              cidConvertToPdfData()
+ *          void                 l_CIDataDestroy()
+ *
+ *     Helper functions for generating the output pdf string
+ *          static l_int32       l_generatePdf()
+ *          static void          generateFixedStringsPdf()
+ *          static char         *generateEscapeString()
+ *          static void          generateMediaboxPdf()
+ *          static l_int32       generatePageStringPdf()
+ *          static l_int32       generateContentStringPdf()
+ *          static l_int32       generatePreXStringsPdf()
+ *          static l_int32       generateColormapStringsPdf()
+ *          static void          generateTrailerPdf()
+ *          static l_int32       makeTrailerStringPdf()
+ *          static l_int32       generateOutputDataPdf()
+ *
+ *     Helper functions for generating multipage pdf output
+ *          static l_int32       parseTrailerPdf()
+ *          static char         *generatePagesObjStringPdf()
+ *          static L_BYTEA      *substituteObjectNumbers()
+ *
+ *     Create/destroy/access pdf data
+ *          static L_PDF_DATA   *pdfdataCreate()
+ *          static void          pdfdataDestroy()
+ *          static L_COMP_DATA  *pdfdataGetCid()
+ *
+ *     Set flags for special modes
+ *          void                 l_pdfSetG4ImageMask()
+ *          void                 l_pdfSetDateAndVersion()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if USE_PDFIO /* defined in environ.h */ + /* --------------------------------------------*/ + + /* Typical scan resolution in ppi (pixels/inch) */ +static const l_int32 DefaultInputRes = 300; + + /* Static helpers */ +static L_COMP_DATA *l_generateJp2kData(const char *fname); +static L_COMP_DATA *pixGenerateFlateData(PIX *pixs, l_int32 ascii85flag); +static L_COMP_DATA *pixGenerateJpegData(PIX *pixs, l_int32 ascii85flag, + l_int32 quality); +static L_COMP_DATA *pixGenerateJp2kData(PIX *pixs, l_int32 quality); +static L_COMP_DATA *pixGenerateG4Data(PIX *pixs, l_int32 ascii85flag); + +static l_int32 l_generatePdf(l_uint8 **pdata, size_t *pnbytes, + L_PDF_DATA *lpd); +static void generateFixedStringsPdf(L_PDF_DATA *lpd); +static char *generateEscapeString(const char *str); +static void generateMediaboxPdf(L_PDF_DATA *lpd); +static l_int32 generatePageStringPdf(L_PDF_DATA *lpd); +static l_int32 generateContentStringPdf(L_PDF_DATA *lpd); +static l_int32 generatePreXStringsPdf(L_PDF_DATA *lpd); +static l_int32 generateColormapStringsPdf(L_PDF_DATA *lpd); +static void generateTrailerPdf(L_PDF_DATA *lpd); +static char *makeTrailerStringPdf(L_DNA *daloc); +static l_int32 generateOutputDataPdf(l_uint8 **pdata, size_t *pnbytes, + L_PDF_DATA *lpd); + +static l_int32 parseTrailerPdf(L_BYTEA *bas, L_DNA **pda); +static char *generatePagesObjStringPdf(NUMA *napage); +static L_BYTEA *substituteObjectNumbers(L_BYTEA *bas, NUMA *na_objs); + +static L_PDF_DATA *pdfdataCreate(const char *title); +static void pdfdataDestroy(L_PDF_DATA **plpd); +static L_COMP_DATA *pdfdataGetCid(L_PDF_DATA *lpd, l_int32 index); + + +/* ---------------- Defaults for rendering options ----------------- */ + /* Output G4 as writing through image mask; this is the default */ +static l_int32 var_WRITE_G4_IMAGE_MASK = 1; + /* Write date/time and lib version into pdf; this is the default */ +static l_int32 var_WRITE_DATE_AND_VERSION = 1; + +#define L_SMALLBUF 256 +#define L_BIGBUF 2048 /* must be able to hold hex colormap */ + + +#ifndef NO_CONSOLE_IO +#define DEBUG_MULTIPAGE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * Intermediate function for generating multipage pdf output * + *---------------------------------------------------------------------*/ +/*! + * \brief pixConvertToPdfData() + * + * \param[in] pix all depths; cmap OK + * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE, + * L_JP2K_ENCODE + * \param[in] quality for jpeg: 1-100; 0 for default (75) + * for jp2k: 27-45; 0 for default (34) + * \param[out] pdata pdf array + * \param[out] pnbytes number of bytes in pdf array + * \param[in] x, y location of lower-left corner of image, in pixels, + * relative to the PostScript origin (0,0) at + * the lower-left corner of the page) + * \param[in] res override the resolution of the input image, in ppi; + * use 0 to respect resolution embedded in the input + * \param[in] title [optional] pdf title; can be null + * \param[in,out] plpd ptr to lpd; created on the first invocation and + * returned until last image is processed + * \param[in] position in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, + * L_LAST_IMAGE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %res == 0 and the input resolution field is 0,
+ *          this will use DefaultInputRes.
+ *      (2) This only writes %data if it is the last image to be
+ *          written on the page.
+ *      (3) See comments in convertToPdf().
+ * 
+ */ +l_ok +pixConvertToPdfData(PIX *pix, + l_int32 type, + l_int32 quality, + l_uint8 **pdata, + size_t *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + const char *title, + L_PDF_DATA **plpd, + l_int32 position) +{ +l_int32 pixres, w, h, ret; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid = NULL; +L_PDF_DATA *lpd = NULL; + + PROCNAME("pixConvertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (type != L_JPEG_ENCODE && type != L_G4_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { + selectDefaultPdfEncoding(pix, &type); + } + if (plpd) { /* part of multi-page invocation */ + if (position == L_FIRST_IMAGE) + *plpd = NULL; + } + + /* Generate the compressed image data. It must NOT + * be ascii85 encoded. */ + pixGenerateCIData(pix, type, quality, 0, &cid); + if (!cid) + return ERROR_INT("cid not made", procName, 1); + + /* Get media box in pts. Guess the input image resolution + * based on the input parameter %res, the resolution data in + * the pix, and the size of the image. */ + pixres = cid->res; + w = cid->w; + h = cid->h; + if (res <= 0.0) { + if (pixres > 0) + res = pixres; + else + res = DefaultInputRes; + } + xpt = x * 72. / res; + ypt = y * 72. / res; + wpt = w * 72. / res; + hpt = h * 72. / res; + + /* Set up lpd */ + if (!plpd) { /* single image */ + if ((lpd = pdfdataCreate(title)) == NULL) + return ERROR_INT("lpd not made", procName, 1); + } else if (position == L_FIRST_IMAGE) { /* first of multiple images */ + if ((lpd = pdfdataCreate(title)) == NULL) + return ERROR_INT("lpd not made", procName, 1); + *plpd = lpd; + } else { /* not the first of multiple images */ + lpd = *plpd; + } + + /* Add the data to the lpd */ + ptraAdd(lpd->cida, cid); + lpd->n++; + ptaAddPt(lpd->xy, xpt, ypt); + ptaAddPt(lpd->wh, wpt, hpt); + + /* If a single image or the last of multiple images, + * generate the pdf and destroy the lpd */ + if (!plpd || (position == L_LAST_IMAGE)) { + ret = l_generatePdf(pdata, pnbytes, lpd); + pdfdataDestroy(&lpd); + if (plpd) *plpd = NULL; + if (ret) + return ERROR_INT("pdf output not made", procName, 1); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Intermediate function for generating multipage pdf output * + *---------------------------------------------------------------------*/ +/*! + * \brief ptraConcatenatePdfToData() + * + * \param[in] pa_data ptra array of pdf strings, each for a + * single-page pdf file + * \param[in] sa [optional] string array of pathnames for + * input pdf files; can be null + * \param[out] pdata concatenated pdf data in memory + * \param[out] pnbytes number of bytes in pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This only works with leptonica-formatted single-page pdf files.
+ *          pdf files generated by other programs will have unpredictable
+ *          (and usually bad) results.  The requirements for each pdf file:
+ *            (a) The Catalog and Info objects are the first two.
+ *            (b) Object 3 is Pages
+ *            (c) Object 4 is Page
+ *            (d) The remaining objects are Contents, XObjects, and ColorSpace
+ *      (2) We remove trailers from each page, and append the full trailer
+ *          for all pages at the end.
+ *      (3) For all but the first file, remove the ID and the first 3
+ *          objects (catalog, info, pages), so that each subsequent
+ *          file has only objects of these classes:
+ *              Page, Contents, XObject, ColorSpace (Indexed RGB).
+ *          For those objects, we substitute these refs to objects
+ *          in the local file:
+ *              Page:  Parent(object 3), Contents, XObject(typically multiple)
+ *              XObject:  [ColorSpace if indexed]
+ *          The Pages object on the first page (object 3) has a Kids array
+ *          of references to all the Page objects, with a Count equal
+ *          to the number of pages.  Each Page object refers back to
+ *          this parent.
+ * 
+ */ +l_ok +ptraConcatenatePdfToData(L_PTRA *pa_data, + SARRAY *sa, + l_uint8 **pdata, + size_t *pnbytes) +{ +char *fname, *str_pages, *str_trailer; +l_uint8 *pdfdata, *data; +l_int32 i, j, index, nobj, npages; +l_int32 *sizes, *locs; +size_t size; +L_BYTEA *bas, *bad, *bat1, *bat2; +L_DNA *da_locs, *da_sizes, *da_outlocs, *da; +L_DNAA *daa_locs; /* object locations on each page */ +NUMA *na_objs, *napage; +NUMAA *naa_objs; /* object mapping numbers to new values */ + + PROCNAME("ptraConcatenatePdfToData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pa_data) + return ERROR_INT("pa_data not defined", procName, 1); + + /* Parse the files and find the object locations. + * Remove file data that cannot be parsed. */ + ptraGetActualCount(pa_data, &npages); + daa_locs = l_dnaaCreate(npages); + for (i = 0; i < npages; i++) { + bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); + if (parseTrailerPdf(bas, &da_locs) != 0) { + bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&bas); + if (sa) { + fname = sarrayGetString(sa, i, L_NOCOPY); + L_ERROR("can't parse file %s; skipping\n", procName, fname); + } else { + L_ERROR("can't parse file %d; skipping\n", procName, i); + } + } else { + l_dnaaAddDna(daa_locs, da_locs, L_INSERT); + } + } + + /* Recompute npages in case some of the files were not pdf */ + ptraCompactArray(pa_data); + ptraGetActualCount(pa_data, &npages); + if (npages == 0) { + l_dnaaDestroy(&daa_locs); + return ERROR_INT("no parsable pdf files found", procName, 1); + } + + /* Find the mapping from initial to final object numbers */ + naa_objs = numaaCreate(npages); /* stores final object numbers */ + napage = numaCreate(npages); /* stores "Page" object numbers */ + index = 0; + for (i = 0; i < npages; i++) { + da = l_dnaaGetDna(daa_locs, i, L_CLONE); + nobj = l_dnaGetCount(da); + if (i == 0) { + numaAddNumber(napage, 4); /* object 4 on first page */ + na_objs = numaMakeSequence(0.0, 1.0, nobj - 1); + index = nobj - 1; + } else { /* skip the first 3 objects in each file */ + numaAddNumber(napage, index); /* Page object is first we add */ + na_objs = numaMakeConstant(0.0, nobj - 1); + numaReplaceNumber(na_objs, 3, 3); /* refers to parent of all */ + for (j = 4; j < nobj - 1; j++) + numaSetValue(na_objs, j, index++); + } + numaaAddNuma(naa_objs, na_objs, L_INSERT); + l_dnaDestroy(&da); + } + + /* Make the Pages object (#3) */ + str_pages = generatePagesObjStringPdf(napage); + + /* Build the output */ + bad = l_byteaCreate(5000); + da_outlocs = l_dnaCreate(0); /* locations of all output objects */ + for (i = 0; i < npages; i++) { + bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); + pdfdata = l_byteaGetData(bas, &size); + da_locs = l_dnaaGetDna(daa_locs, i, L_CLONE); /* locs on this page */ + na_objs = numaaGetNuma(naa_objs, i, L_CLONE); /* obj # on this page */ + nobj = l_dnaGetCount(da_locs) - 1; + da_sizes = l_dnaDiffAdjValues(da_locs); /* object sizes on this page */ + sizes = l_dnaGetIArray(da_sizes); + locs = l_dnaGetIArray(da_locs); + if (i == 0) { + l_byteaAppendData(bad, pdfdata, sizes[0]); + l_byteaAppendData(bad, pdfdata + locs[1], sizes[1]); + l_byteaAppendData(bad, pdfdata + locs[2], sizes[2]); + l_byteaAppendString(bad, str_pages); + for (j = 0; j < 4; j++) + l_dnaAddNumber(da_outlocs, locs[j]); + } + for (j = 4; j < nobj; j++) { + l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); + bat1 = l_byteaInitFromMem(pdfdata + locs[j], sizes[j]); + bat2 = substituteObjectNumbers(bat1, na_objs); + data = l_byteaGetData(bat2, &size); + l_byteaAppendData(bad, data, size); + l_byteaDestroy(&bat1); + l_byteaDestroy(&bat2); + } + if (i == npages - 1) /* last one */ + l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); + LEPT_FREE(sizes); + LEPT_FREE(locs); + l_dnaDestroy(&da_locs); + numaDestroy(&na_objs); + l_dnaDestroy(&da_sizes); + } + + /* Add the trailer */ + str_trailer = makeTrailerStringPdf(da_outlocs); + l_byteaAppendString(bad, str_trailer); + + /* Transfer the output data */ + *pdata = l_byteaCopyData(bad, pnbytes); + l_byteaDestroy(&bad); + +#if DEBUG_MULTIPAGE + fprintf(stderr, "******** object mapper **********"); + numaaWriteStream(stderr, naa_objs); + + fprintf(stderr, "******** Page object numbers ***********"); + numaWriteStream(stderr, napage); + + fprintf(stderr, "******** Pages object ***********\n"); + fprintf(stderr, "%s\n", str_pages); +#endif /* DEBUG_MULTIPAGE */ + + numaDestroy(&napage); + numaaDestroy(&naa_objs); + l_dnaDestroy(&da_outlocs); + l_dnaaDestroy(&daa_locs); + LEPT_FREE(str_pages); + LEPT_FREE(str_trailer); + return 0; +} + + +/*---------------------------------------------------------------------* + * Convert tiff multipage to pdf file * + *---------------------------------------------------------------------*/ +/*! + * \brief convertTiffMultipageToPdf() + * + * \param[in] filein (tiff) + * \param[in] fileout (pdf) + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) A multipage tiff file can also be converted to PS, using
+ *          convertTiffMultipageToPS()
+ * 
+ */ +l_ok +convertTiffMultipageToPdf(const char *filein, + const char *fileout) +{ +l_int32 istiff; +PIXA *pixa; +FILE *fp; + + PROCNAME("convertTiffMultipageToPdf"); + + if ((fp = fopenReadStream(filein)) == NULL) + return ERROR_INT("file not found", procName, 1); + istiff = fileFormatIsTiff(fp); + fclose(fp); + if (!istiff) + return ERROR_INT("file not tiff format", procName, 1); + + pixa = pixaReadMultipageTiff(filein); + pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "weasel2", fileout); + pixaDestroy(&pixa); + return 0; +} + + +/*---------------------------------------------------------------------* + * Low-level CID-based operations * + *---------------------------------------------------------------------*/ +/*! + * \brief l_generateCIDataForPdf() + * + * \param[in] fname [optional] can be null + * \param[in] pix [optional] can be null + * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) + * for jp2k if transcoded: 27-45; 0 for default (34) + * \param[out] pcid compressed data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) You must set either filename or pix.
+ *      (2) Given an image file and optionally a pix raster of that data,
+ *          this provides a CID that is compatible with PDF, preferably
+ *          without transcoding.
+ *      (3) The pix is included for efficiency, in case transcoding
+ *          is required and the pix is available to the caller.
+ *      (4) We don't try to open files named "stdin" or "-" for Tesseract
+ *          compatibility reasons. We may remove this restriction
+ *          in the future.
+ * 
+ */ +l_ok +l_generateCIDataForPdf(const char *fname, + PIX *pix, + l_int32 quality, + L_COMP_DATA **pcid) +{ +l_int32 format, type; +L_COMP_DATA *cid; +PIX *pixt; + + PROCNAME("l_generateCIDataForPdf"); + + //FILE* file = fopenWriteStream("aaa.bmp", "w"); + //pixWriteStreamBmp(file, pix); + //fclose(file); + if (!pcid) + return ERROR_INT("&cid not defined", procName, 1); + *pcid = cid = NULL; + if (!fname && !pix) + return ERROR_INT("neither fname nor pix are defined", procName, 1); + + /* If a compressed file is given that is not 'stdin', see if we + * can generate the pdf output without transcoding. */ + if (fname && strcmp(fname, "-") != 0 && strcmp(fname, "stdin") != 0) { + findFileFormat(fname, &format); + if (format == IFF_UNKNOWN) + L_WARNING("file %s format is unknown\n", procName, fname); + if (format == IFF_PS || format == IFF_LPDF) { + L_ERROR("file %s is unsupported format %d\n", + procName, fname, format); + return 1; + } + if (format == IFF_JFIF_JPEG) { + cid = l_generateJpegData(fname, 0); + } else if (format == IFF_JP2) { + cid = l_generateJp2kData(fname); + } else if (format == IFF_PNG) { + cid = l_generateFlateDataPdf(fname, pix); + } + + } + + /* Otherwise, use the pix to generate the pdf output */ + if (!cid) { + if (!pix) + pixt = pixRead(fname); + else + pixt = pixClone(pix); + if (!pixt) + return ERROR_INT("pixt not made", procName, 1); + if (selectDefaultPdfEncoding(pixt, &type)) { + pixDestroy(&pixt); + return 1; + } + pixGenerateCIData(pixt, type, quality, 0, &cid); + pixDestroy(&pixt); + } + if (!cid) { + L_ERROR("totally kerflummoxed\n", procName); + return 1; + } + *pcid = cid; + return 0; +} + + +/*! + * \brief l_generateFlateDataPdf() + * + * \param[in] fname preferably png + * \param[in] pixs [optional] can be null + * \return cid containing png data, or NULL on error + * + *
+ * Notes:
+ *      (1) If you hand this a png file, you are going to get
+ *          png predictors embedded in the flate data. So it has
+ *          come to this. http://xkcd.com/1022/
+ *      (2) Exception: if the png is interlaced or if it is RGBA,
+ *          it will be transcoded.
+ *      (3) If transcoding is required, this will not have to read from
+ *          file if you also input a pix.
+ * 
+ */ +L_COMP_DATA * +l_generateFlateDataPdf(const char *fname, + PIX *pixs) +{ +l_uint8 *pngcomp = NULL; /* entire PNG compressed file */ +l_uint8 *datacomp = NULL; /* gzipped raster data */ +l_uint8 *cmapdata = NULL; /* uncompressed colormap */ +char *cmapdatahex = NULL; /* hex ascii uncompressed colormap */ +l_uint32 i, j, n; +l_int32 format, interlaced; +l_int32 ncolors; /* in colormap */ +l_int32 bps; /* bits/sample: usually 8 */ +l_int32 spp; /* samples/pixel: 1-grayscale/cmap); 3-rgb; 4-rgba */ +l_int32 w, h, cmapflag; +l_int32 xres, yres; +size_t nbytescomp = 0, nbytespng = 0; +FILE *fp; +L_COMP_DATA *cid; +PIX *pix; +PIXCMAP *cmap = NULL; + + PROCNAME("l_generateFlateDataPdf"); + + if (!fname) + return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); + + findFileFormat(fname, &format); + spp = 0; /* init to spp != 4 if not png */ + interlaced = 0; /* initialize to no interlacing */ + bps = 0; /* initialize to a nonsense value */ + if (format == IFF_PNG) { + isPngInterlaced(fname, &interlaced); + if (readHeaderPng(fname, NULL, NULL, &bps, &spp, NULL)) + return (L_COMP_DATA *)ERROR_PTR("bad png input", procName, NULL); + } + + /* PDF is capable of inlining some types of PNG files, but not all + of them. We need to transcode anything with interlacing, an + alpha channel, or 1 bpp (which would otherwise be photo-inverted). + + Be careful with spp. Any PNG image file with an alpha + channel is converted on reading to RGBA (spp == 4). This + includes the (gray + alpha) format with spp == 2. You + will get different results if you look at spp via + readHeaderPng() versus pixGetSpp() */ + if (format != IFF_PNG || interlaced || bps == 1 || spp == 4 || spp == 2) { + if (!pixs) + pix = pixRead(fname); + else + pix = pixClone(pixs); + if (!pix) + return (L_COMP_DATA *)ERROR_PTR("pix not made", procName, NULL); + cid = pixGenerateFlateData(pix, 0); + pixDestroy(&pix); + return cid; + } + + /* It's png. Generate the pdf data without transcoding. + * Implementation by Jeff Breidenbach. + * First, read the metadata */ + if ((fp = fopenReadStream(fname)) == NULL) + return (L_COMP_DATA *)ERROR_PTR("stream not opened", procName, NULL); + freadHeaderPng(fp, &w, &h, &bps, &spp, &cmapflag); + fgetPngResolution(fp, &xres, &yres); + fclose(fp); + + /* We get pdf corruption when inlining the data from 16 bpp png. */ + if (bps == 16) + return l_generateFlateData(fname, 0); + + /* Read the entire png file */ + if ((pngcomp = l_binaryRead(fname, &nbytespng)) == NULL) + return (L_COMP_DATA *)ERROR_PTR("unable to read file", + procName, NULL); + + /* Extract flate data, copying portions of it to memory, including + * the predictor information in a byte at the beginning of each + * raster line. The flate data makes up the vast majority of + * the png file, so after extraction we expect datacomp to + * be nearly full (i.e., nbytescomp will be only slightly less + * than nbytespng). Also extract the colormap if present. */ + if ((datacomp = (l_uint8 *)LEPT_CALLOC(1, nbytespng)) == NULL) { + LEPT_FREE(pngcomp); + return (L_COMP_DATA *)ERROR_PTR("unable to allocate memory", + procName, NULL); + } + + /* Parse the png file. Each chunk consists of: + * length: 4 bytes + * name: 4 bytes (e.g., "IDAT") + * data: n bytes + * CRC: 4 bytes + * Start at the beginning of the data section of the first chunk, + * byte 16, because the png file begins with 8 bytes of header, + * followed by the first 8 bytes of the first chunk + * (length and name). On each loop, increment by 12 bytes to + * skip over the CRC, length and name of the next chunk. */ + for (i = 16; i < nbytespng; i += 12) { /* do each successive chunk */ + /* Get the chunk length */ + n = pngcomp[i - 8] << 24; + n += pngcomp[i - 7] << 16; + n += pngcomp[i - 6] << 8; + n += pngcomp[i - 5] << 0; + if (n >= nbytespng - i) { /* "n + i" can overflow */ + LEPT_FREE(pngcomp); + LEPT_FREE(datacomp); + pixcmapDestroy(&cmap); + L_ERROR("invalid png: i = %d, n = %d, nbytes = %zu\n", procName, + i, n, nbytespng); + return NULL; + } + + /* Is it a data chunk? */ + if (memcmp(pngcomp + i - 4, "IDAT", 4) == 0) { + memcpy(datacomp + nbytescomp, pngcomp + i, n); + nbytescomp += n; + } + + /* Is it a palette chunk? */ + if (cmapflag && !cmap && + memcmp(pngcomp + i - 4, "PLTE", 4) == 0) { + if ((n / 3) > (1 << bps)) { + LEPT_FREE(pngcomp); + LEPT_FREE(datacomp); + pixcmapDestroy(&cmap); + L_ERROR("invalid png: i = %d, n = %d, cmapsize = %d\n", + procName, i, n, (1 << bps)); + return NULL; + } + cmap = pixcmapCreate(bps); + for (j = i; j < i + n; j += 3) { + pixcmapAddColor(cmap, pngcomp[j], pngcomp[j + 1], + pngcomp[j + 2]); + } + } + i += n; /* move to the end of the data chunk */ + } + LEPT_FREE(pngcomp); + + if (nbytescomp == 0) { + LEPT_FREE(datacomp); + pixcmapDestroy(&cmap); + return (L_COMP_DATA *)ERROR_PTR("invalid PNG file", procName, NULL); + } + + /* Extract and encode the colormap data as hexascii */ + ncolors = 0; + if (cmap) { + pixcmapSerializeToMemory(cmap, 3, &ncolors, &cmapdata); + pixcmapDestroy(&cmap); + if (!cmapdata) { + LEPT_FREE(datacomp); + return (L_COMP_DATA *)ERROR_PTR("cmapdata not made", + procName, NULL); + } + cmapdatahex = pixcmapConvertToHex(cmapdata, ncolors); + LEPT_FREE(cmapdata); + } + + /* Note that this is the only situation where the predictor + * field of the CID is set to 1. Adobe's predictor values on + * p. 76 of pdf_reference_1-7.pdf give 1 for no predictor and + * 10-14 for inline predictors, the specifics of which are + * ignored by the pdf interpreter, which just needs to know that + * the first byte on each compressed scanline is some predictor + * whose type can be inferred from the byte itself. */ + cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); + cid->datacomp = datacomp; + cid->type = L_FLATE_ENCODE; + cid->cmapdatahex = cmapdatahex; + cid->nbytescomp = nbytescomp; + cid->ncolors = ncolors; + cid->predictor = TRUE; + cid->w = w; + cid->h = h; + cid->bps = bps; + cid->spp = spp; + cid->res = xres; + return cid; +} + + +/*! + * \brief l_generateJpegData() + * + * \param[in] fname of jpeg file + * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg + * \return cid containing jpeg data, or NULL on error + * + *
+ * Notes:
+ *      (1) Set ascii85flag:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ *               (not permitted in pdf)
+ *      (2) Do not free the data.  l_generateJpegDataMem() will free
+ *          the data if the data is invalid, or if it does not use
+ *          ascii encoding.
+ * 
+ */ +L_COMP_DATA * +l_generateJpegData(const char *fname, + l_int32 ascii85flag) +{ +l_uint8 *data = NULL; +size_t nbytes; + + PROCNAME("l_generateJpegData"); + + if (!fname) + return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); + + /* The returned jpeg data in memory is the entire jpeg file, + * which starts with ffd8 and ends with ffd9 */ + if ((data = l_binaryRead(fname, &nbytes)) == NULL) + return (L_COMP_DATA *)ERROR_PTR("data not extracted", procName, NULL); + + return l_generateJpegDataMem(data, nbytes, ascii85flag); +} + + +/*! + * \brief l_generateJpegDataMem() + * + * \param[in] data of jpeg file + * \param[in] nbytes of jpeg file + * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg + * \return cid containing jpeg data, or NULL on error + * + *
+ * Notes:
+ *      (1) See l_generateJpegData().
+ * 
+ */ +L_COMP_DATA * +l_generateJpegDataMem(l_uint8 *data, + size_t nbytes, + l_int32 ascii85flag) +{ +char *data85 = NULL; /* ascii85 encoded jpeg compressed file */ +l_int32 w, h, xres, yres, bps, spp; +l_int32 nbytes85; +L_COMP_DATA *cid; + + PROCNAME("l_generateJpegDataMem"); + + if (!data) + return (L_COMP_DATA *)ERROR_PTR("data not defined", procName, NULL); + + /* Read the metadata */ + if (readHeaderMemJpeg(data, nbytes, &w, &h, &spp, NULL, NULL)) { + LEPT_FREE(data); + return (L_COMP_DATA *)ERROR_PTR("bad jpeg metadata", procName, NULL); + } + bps = 8; + readResolutionMemJpeg(data, nbytes, &xres, &yres); + + /* Optionally, encode the compressed data */ + if (ascii85flag == 1) { + data85 = encodeAscii85(data, nbytes, &nbytes85); + LEPT_FREE(data); + if (!data85) + return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); + else + data85[nbytes85 - 1] = '\0'; /* remove the newline */ + } + + cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); + if (ascii85flag == 0) { + cid->datacomp = data; + } else { /* ascii85 */ + cid->data85 = data85; + cid->nbytes85 = nbytes85; + } + cid->type = L_JPEG_ENCODE; + cid->nbytescomp = nbytes; + cid->w = w; + cid->h = h; + cid->bps = bps; + cid->spp = spp; + cid->res = xres; + return cid; +} + + +/*! + * \brief l_generateJp2kData() + * + * \param[in] fname of jp2k file + * \return cid containing jp2k data, or NULL on error + * + *
+ * Notes:
+ *      (1) This is only called after the file is verified to be jp2k.
+ * 
+ */ +static L_COMP_DATA * +l_generateJp2kData(const char *fname) +{ +l_int32 w, h, bps, spp, xres, yres; +size_t nbytes; +L_COMP_DATA *cid; +FILE *fp; + + PROCNAME("l_generateJp2kData"); + + if (!fname) + return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); + + if (readHeaderJp2k(fname, &w, &h, &bps, &spp)) + return (L_COMP_DATA *)ERROR_PTR("bad jp2k metadata", procName, NULL); + + if ((cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA))) == NULL) + return (L_COMP_DATA *)ERROR_PTR("cid not made", procName, NULL); + + /* The returned jp2k data in memory is the entire jp2k file */ + if ((cid->datacomp = l_binaryRead(fname, &nbytes)) == NULL) { + l_CIDataDestroy(&cid); + return (L_COMP_DATA *)ERROR_PTR("data not extracted", procName, NULL); + } + + xres = yres = 0; + if ((fp = fopenReadStream(fname)) != NULL) { + fgetJp2kResolution(fp, &xres, &yres); + fclose(fp); + } + cid->type = L_JP2K_ENCODE; + cid->nbytescomp = nbytes; + cid->w = w; + cid->h = h; + cid->bps = bps; + cid->spp = spp; + cid->res = xres; + return cid; +} + + +/*! + * \brief l_generateCIData() + * + * \param[in] fname + * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE, + * L_JP2K_ENCODE + * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) + * for jp2k if transcoded: 27-45; 0 for default (34) + * \param[in] ascii85 0 for binary; 1 for ascii85-encoded + * \param[out] pcid compressed data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This can be used for both PostScript and pdf.
+ *      (1) Set ascii85:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ *      (2) This attempts to compress according to the requested type.
+ *          If this can't be done, it falls back to ordinary flate encoding.
+ *      (3) This differs from l_generateCIDataPdf(), which determines
+ *          the format and attempts to generate the CID without transcoding.
+ * 
+ */ +l_ok +l_generateCIData(const char *fname, + l_int32 type, + l_int32 quality, + l_int32 ascii85, + L_COMP_DATA **pcid) +{ +l_int32 format, d, bps, spp, iscmap; +L_COMP_DATA *cid; +PIX *pix; + + PROCNAME("l_generateCIData"); + + if (!pcid) + return ERROR_INT("&cid not defined", procName, 1); + *pcid = NULL; + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) + return ERROR_INT("invalid conversion type", procName, 1); + if (ascii85 != 0 && ascii85 != 1) + return ERROR_INT("invalid ascii85", procName, 1); + + /* Sanity check on requested encoding */ + pixReadHeader(fname, &format, NULL, NULL, &bps, &spp, &iscmap); + d = bps * spp; + if (d == 24) d = 32; + if (iscmap && type != L_FLATE_ENCODE) { + L_WARNING("pixs has cmap; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } else if (d < 8 && type == L_JPEG_ENCODE) { + L_WARNING("pixs has < 8 bpp; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } else if (d < 8 && type == L_JP2K_ENCODE) { + L_WARNING("pixs has < 8 bpp; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } else if (d > 1 && type == L_G4_ENCODE) { + L_WARNING("pixs has > 1 bpp; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } + + if (type == L_JPEG_ENCODE) { + if (format == IFF_JFIF_JPEG) { /* do not transcode */ + cid = l_generateJpegData(fname, ascii85); + } else { + if ((pix = pixRead(fname)) == NULL) + return ERROR_INT("pix not returned", procName, 1); + cid = pixGenerateJpegData(pix, ascii85, quality); + pixDestroy(&pix); + } + if (!cid) + return ERROR_INT("jpeg data not made", procName, 1); + } else if (type == L_JP2K_ENCODE) { + if (format == IFF_JP2) { /* do not transcode */ + cid = l_generateJp2kData(fname); + } else { + if ((pix = pixRead(fname)) == NULL) + return ERROR_INT("pix not returned", procName, 1); + cid = pixGenerateJp2kData(pix, quality); + pixDestroy(&pix); + } + if (!cid) + return ERROR_INT("jp2k data not made", procName, 1); + } else if (type == L_G4_ENCODE) { + if ((cid = l_generateG4Data(fname, ascii85)) == NULL) + return ERROR_INT("g4 data not made", procName, 1); + } else if (type == L_FLATE_ENCODE) { + if ((cid = l_generateFlateData(fname, ascii85)) == NULL) + return ERROR_INT("flate data not made", procName, 1); + } else { + return ERROR_INT("invalid conversion type", procName, 1); + } + *pcid = cid; + + return 0; +} + + +/*! + * \brief pixGenerateCIData() + * + * \param[in] pixs 8 or 32 bpp, no colormap + * \param[in] type L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE or + * L_JP2K_ENCODE + * \param[in] quality for jpeg if transcoded: 1-100; 0 for default (75) + * for jp2k if transcoded: 27-45; 0 for default (34) + * \param[in] ascii85 0 for binary; 1 for ascii85-encoded + * \param[out] pcid compressed data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Set ascii85:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ * 
+ */ +l_ok +pixGenerateCIData(PIX *pixs, + l_int32 type, + l_int32 quality, + l_int32 ascii85, + L_COMP_DATA **pcid) +{ +l_int32 d; +PIXCMAP *cmap; + + PROCNAME("pixGenerateCIData"); + + if (!pcid) + return ERROR_INT("&cid not defined", procName, 1); + *pcid = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && + type != L_FLATE_ENCODE && type != L_JP2K_ENCODE) { + selectDefaultPdfEncoding(pixs, &type); + } + if (ascii85 != 0 && ascii85 != 1) + return ERROR_INT("invalid ascii85", procName, 1); + + /* Sanity check on requested encoding */ + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (cmap && type != L_FLATE_ENCODE) { + L_WARNING("pixs has cmap; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } else if (d < 8 && (type == L_JPEG_ENCODE || type == L_JP2K_ENCODE)) { + L_WARNING("pixs has < 8 bpp; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } else if (d > 1 && type == L_G4_ENCODE) { + L_WARNING("pixs has > 1 bpp; using flate encoding\n", procName); + type = L_FLATE_ENCODE; + } + + if (type == L_JPEG_ENCODE) { + if ((*pcid = pixGenerateJpegData(pixs, ascii85, quality)) == NULL) + return ERROR_INT("jpeg data not made", procName, 1); + } else if (type == L_JP2K_ENCODE) { + if ((*pcid = pixGenerateJp2kData(pixs, quality)) == NULL) + return ERROR_INT("jp2k data not made", procName, 1); + } else if (type == L_G4_ENCODE) { + if ((*pcid = pixGenerateG4Data(pixs, ascii85)) == NULL) + return ERROR_INT("g4 data not made", procName, 1); + } else { /* type == L_FLATE_ENCODE */ + if ((*pcid = pixGenerateFlateData(pixs, ascii85)) == NULL) + return ERROR_INT("flate data not made", procName, 1); + } + return 0; +} + + +/*! + * \brief l_generateFlateData() + * + * \param[in] fname + * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped + * \return cid flate compressed image data, or NULL on error + * + *
+ * Notes:
+ *      (1) The input image is converted to one of these 4 types:
+ *           ~ 1 bpp
+ *           ~ 8 bpp, no colormap
+ *           ~ 8 bpp, colormap
+ *           ~ 32 bpp rgb
+ *      (2) Set ascii85flag:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ * 
+ */ +L_COMP_DATA * +l_generateFlateData(const char *fname, + l_int32 ascii85flag) +{ +L_COMP_DATA *cid; +PIX *pixs; + + PROCNAME("l_generateFlateData"); + + if (!fname) + return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); + + if ((pixs = pixRead(fname)) == NULL) + return (L_COMP_DATA *)ERROR_PTR("pixs not made", procName, NULL); + cid = pixGenerateFlateData(pixs, ascii85flag); + pixDestroy(&pixs); + return cid; +} + + +/*! + * \brief pixGenerateFlateData() + * + * \param[in] pixs + * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped + * \return cid flate compressed image data, or NULL on error + * + * Notes: + * 1) This should not be called with an RGBA pix (spp == 4; it + * will ignore the alpha channel. Likewise, if called with a + * colormapped pix, the alpha component in the colormap will + * be ignored as it is for all leptonica operations + * on colormapped pix. + */ +static L_COMP_DATA * +pixGenerateFlateData(PIX *pixs, + l_int32 ascii85flag) +{ +l_uint8 *data = NULL; /* uncompressed raster data in required format */ +l_uint8 *datacomp = NULL; /* gzipped raster data */ +char *data85 = NULL; /* ascii85 encoded gzipped raster data */ +l_uint8 *cmapdata = NULL; /* uncompressed colormap */ +char *cmapdata85 = NULL; /* ascii85 encoded uncompressed colormap */ +char *cmapdatahex = NULL; /* hex ascii uncompressed colormap */ +l_int32 ncolors; /* in colormap; not used if cmapdata85 is null */ +l_int32 bps; /* bits/sample: usually 8 */ +l_int32 spp; /* samples/pixel: 1-grayscale/cmap); 3-rgb */ +l_int32 w, h, d, cmapflag; +l_int32 ncmapbytes85 = 0; +l_int32 nbytes85 = 0; +size_t nbytes, nbytescomp; +L_COMP_DATA *cid; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGenerateFlateData"); + + if (!pixs) + return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Convert the image to one of these 4 types: + * 1 bpp + * 8 bpp, no colormap + * 8 bpp, colormap + * 32 bpp rgb */ + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + cmapflag = (cmap) ? 1 : 0; + if (d == 2 || d == 4 || d == 16) { + pixt = pixConvertTo8(pixs, cmapflag); + cmap = pixGetColormap(pixt); + d = pixGetDepth(pixt); + } else { + pixt = pixClone(pixs); + } + spp = (d == 32) ? 3 : 1; /* ignores alpha */ + bps = (d == 32) ? 8 : d; + + /* Extract and encode the colormap data as both ascii85 and hexascii */ + ncolors = 0; + if (cmap) { + pixcmapSerializeToMemory(cmap, 3, &ncolors, &cmapdata); + if (!cmapdata) { + pixDestroy(&pixt); + return (L_COMP_DATA *)ERROR_PTR("cmapdata not made", + procName, NULL); + } + + cmapdata85 = encodeAscii85(cmapdata, 3 * ncolors, &ncmapbytes85); + cmapdatahex = pixcmapConvertToHex(cmapdata, ncolors); + LEPT_FREE(cmapdata); + } + + /* Extract and compress the raster data */ + pixGetRasterData(pixt, &data, &nbytes); + pixDestroy(&pixt); + datacomp = zlibCompress(data, nbytes, &nbytescomp); + LEPT_FREE(data); + if (!datacomp) { + LEPT_FREE(cmapdata85); + LEPT_FREE(cmapdatahex); + return (L_COMP_DATA *)ERROR_PTR("datacomp not made", procName, NULL); + } + + /* Optionally, encode the compressed data */ + if (ascii85flag == 1) { + data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); + LEPT_FREE(datacomp); + if (!data85) { + LEPT_FREE(cmapdata85); + LEPT_FREE(cmapdatahex); + return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); + } else { + data85[nbytes85 - 1] = '\0'; /* remove the newline */ + } + } + + cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); + if (ascii85flag == 0) { + cid->datacomp = datacomp; + } else { /* ascii85 */ + cid->data85 = data85; + cid->nbytes85 = nbytes85; + } + cid->type = L_FLATE_ENCODE; + cid->cmapdatahex = cmapdatahex; + cid->cmapdata85 = cmapdata85; + cid->nbytescomp = nbytescomp; + cid->ncolors = ncolors; + cid->w = w; + cid->h = h; + cid->bps = bps; + cid->spp = spp; + cid->res = pixGetXRes(pixs); + cid->nbytes = nbytes; /* only for debugging */ + return cid; +} + + +/*! + * \brief pixGenerateJpegData() + * + * \param[in] pixs 8 or 32 bpp, no colormap + * \param[in] ascii85flag 0 for jpeg; 1 for ascii85-encoded jpeg + * \param[in] quality 0 for default, which is 75 + * \return cid jpeg compressed data, or NULL on error + * + *
+ * Notes:
+ *      (1) Set ascii85flag:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ * 
+ */ +static L_COMP_DATA * +pixGenerateJpegData(PIX *pixs, + l_int32 ascii85flag, + l_int32 quality) +{ +l_int32 d; +char *fname; +L_COMP_DATA *cid; + + PROCNAME("pixGenerateJpegData"); + + if (!pixs) + return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (L_COMP_DATA *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + + /* Compress to a temp jpeg file */ + fname = l_makeTempFilename(); + if (pixWriteJpeg(fname, pixs, quality, 0)) { + LEPT_FREE(fname); + return NULL; + } + + /* Generate the data */ + cid = l_generateJpegData(fname, ascii85flag); + if (lept_rmfile(fname) != 0) + L_ERROR("temp file %s was not deleted\n", procName, fname); + LEPT_FREE(fname); + return cid; +} + + +/*! + * \brief pixGenerateJp2kData() + * + * \param[in] pixs 8 or 32 bpp, no colormap + * \param[in] quality 0 for default, which is 34 + * \return cid jp2k compressed data, or NULL on error + * + *
+ * Notes:
+ *      (1) The quality can be set between 27 (very poor) and 45
+ *          (nearly perfect).  Use 0 for default (34). Use 100 for lossless,
+ *          but this is very expensive and not recommended.
+ * 
+ */ +static L_COMP_DATA * +pixGenerateJp2kData(PIX *pixs, + l_int32 quality) +{ +l_int32 d; +char *fname; +L_COMP_DATA *cid; + + PROCNAME("pixGenerateJp2kData"); + + if (!pixs) + return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (L_COMP_DATA *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + + /* Compress to a temp jp2k file */ + fname = l_makeTempFilename(); + if (pixWriteJp2k(fname, pixs, quality, 5, 0, 0)) { + LEPT_FREE(fname); + return NULL; + } + + /* Generate the data */ + cid = l_generateJp2kData(fname); + if (lept_rmfile(fname) != 0) + L_ERROR("temp file %s was not deleted\n", procName, fname); + LEPT_FREE(fname); + return cid; +} + + +/*! + * \brief pixGenerateG4Data() + * + * \param[in] pixs 1 bpp + * \param[in] ascii85flag 0 for gzipped; 1 for ascii85-encoded gzipped + * \return cid g4 compressed image data, or NULL on error + * + *
+ * Notes:
+ *      (1) Set ascii85flag:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ * 
+ */ +static L_COMP_DATA * +pixGenerateG4Data(PIX *pixs, + l_int32 ascii85flag) +{ +char *fname; +L_COMP_DATA *cid; + + PROCNAME("pixGenerateG4Data"); + + if (!pixs) + return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (L_COMP_DATA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + /* Compress to a temp tiff g4 file */ + fname = l_makeTempFilename(); + if (pixWrite(fname, pixs, IFF_TIFF_G4)) { + LEPT_FREE(fname); + return NULL; + } + + cid = l_generateG4Data(fname, ascii85flag); + if (lept_rmfile(fname) != 0) + L_ERROR("temp file %s was not deleted\n", procName, fname); + LEPT_FREE(fname); + return cid; +} + + +/*! + * \brief l_generateG4Data() + * + * \param[in] fname of g4 compressed file + * \param[in] ascii85flag 0 for g4 compressed; 1 for ascii85-encoded g4 + * \return cid g4 compressed image data, or NULL on error + * + *
+ * Notes:
+ *      (1) Set ascii85flag:
+ *           ~ 0 for binary data (not permitted in PostScript)
+ *           ~ 1 for ascii85 (5 for 4) encoded binary data
+ *             (not permitted in pdf)
+ * 
+ */ +L_COMP_DATA * +l_generateG4Data(const char *fname, + l_int32 ascii85flag) +{ +l_uint8 *datacomp = NULL; /* g4 compressed raster data */ +char *data85 = NULL; /* ascii85 encoded g4 compressed data */ +l_int32 w, h, xres, yres; +l_int32 minisblack; /* TRUE or FALSE */ +l_int32 nbytes85; +size_t nbytescomp; +L_COMP_DATA *cid; +FILE *fp; + + PROCNAME("l_generateG4Data"); + + if (!fname) + return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); + + /* Read the resolution */ + if ((fp = fopenReadStream(fname)) == NULL) + return (L_COMP_DATA *)ERROR_PTR("stream not opened", procName, NULL); + getTiffResolution(fp, &xres, &yres); + fclose(fp); + + /* The returned ccitt g4 data in memory is the block of + * bytes in the tiff file, starting after 8 bytes and + * ending before the directory. */ + if (extractG4DataFromFile(fname, &datacomp, &nbytescomp, + &w, &h, &minisblack)) { + return (L_COMP_DATA *)ERROR_PTR("datacomp not extracted", + procName, NULL); + } + + /* Optionally, encode the compressed data */ + if (ascii85flag == 1) { + data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); + LEPT_FREE(datacomp); + if (!data85) + return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); + else + data85[nbytes85 - 1] = '\0'; /* remove the newline */ + } + + cid = (L_COMP_DATA *)LEPT_CALLOC(1, sizeof(L_COMP_DATA)); + if (ascii85flag == 0) { + cid->datacomp = datacomp; + } else { /* ascii85 */ + cid->data85 = data85; + cid->nbytes85 = nbytes85; + } + cid->type = L_G4_ENCODE; + cid->nbytescomp = nbytescomp; + cid->w = w; + cid->h = h; + cid->bps = 1; + cid->spp = 1; + cid->minisblack = minisblack; + cid->res = xres; + return cid; +} + + +/*! + * \brief cidConvertToPdfData() + * + * \param[in] cid compressed image data + * \param[in] title [optional] pdf title; can be NULL + * \param[out] pdata output pdf data for image + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Caller must not destroy the cid.  It is absorbed in the
+ *          lpd and destroyed by this function.
+ * 
+ */ +l_ok +cidConvertToPdfData(L_COMP_DATA *cid, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_int32 res, ret; +l_float32 wpt, hpt; +L_PDF_DATA *lpd = NULL; + + PROCNAME("cidConvertToPdfData"); + + if (!pdata || !pnbytes) + return ERROR_INT("&data and &nbytes not both defined", procName, 1); + *pdata = NULL; + *pnbytes = 0; + if (!cid) + return ERROR_INT("cid not defined", procName, 1); + + /* Get media box parameters, in pts */ + res = cid->res; + if (res <= 0) + res = DefaultInputRes; + wpt = cid->w * 72. / res; + hpt = cid->h * 72. / res; + + /* Set up the pdf data struct (lpd) */ + if ((lpd = pdfdataCreate(title)) == NULL) + return ERROR_INT("lpd not made", procName, 1); + ptraAdd(lpd->cida, cid); + lpd->n++; + ptaAddPt(lpd->xy, 0, 0); /* xpt = ypt = 0 */ + ptaAddPt(lpd->wh, wpt, hpt); + + /* Generate the pdf string and destroy the lpd */ + ret = l_generatePdf(pdata, pnbytes, lpd); + pdfdataDestroy(&lpd); + if (ret) + return ERROR_INT("pdf output not made", procName, 1); + return 0; +} + + +/*! + * \brief l_CIDataDestroy() + * + * \param[in,out] pcid will be set to null before returning + * \return void + */ +void +l_CIDataDestroy(L_COMP_DATA **pcid) +{ +L_COMP_DATA *cid; + + PROCNAME("l_CIDataDestroy"); + + if (pcid == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + if ((cid = *pcid) == NULL) + return; + + if (cid->datacomp) LEPT_FREE(cid->datacomp); + if (cid->data85) LEPT_FREE(cid->data85); + if (cid->cmapdata85) LEPT_FREE(cid->cmapdata85); + if (cid->cmapdatahex) LEPT_FREE(cid->cmapdatahex); + LEPT_FREE(cid); + *pcid = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Helper functions for generating the output pdf string * + *---------------------------------------------------------------------*/ +/*! + * \brief l_generatePdf() + * + * \param[out] pdata pdf array + * \param[out] pnbytes number of bytes in pdf array + * \param[in] lpd all the required input image data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) On error, no data is returned.
+ *      (2) The objects are:
+ *            1: Catalog
+ *            2: Info
+ *            3: Pages
+ *            4: Page
+ *            5: Contents  (rendering command)
+ *            6 to 6+n-1: n XObjects
+ *            6+n to 6+n+m-1: m colormaps
+ * 
+ */ +static l_int32 +l_generatePdf(l_uint8 **pdata, + size_t *pnbytes, + L_PDF_DATA *lpd) +{ + PROCNAME("l_generatePdf"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!lpd) + return ERROR_INT("lpd not defined", procName, 1); + + generateFixedStringsPdf(lpd); + generateMediaboxPdf(lpd); + generatePageStringPdf(lpd); + generateContentStringPdf(lpd); + generatePreXStringsPdf(lpd); + generateColormapStringsPdf(lpd); + generateTrailerPdf(lpd); + return generateOutputDataPdf(pdata, pnbytes, lpd); +} + + +static void +generateFixedStringsPdf(L_PDF_DATA *lpd) +{ +char buf[L_SMALLBUF]; +char *version, *datestr; +SARRAY *sa; + + PROCNAME("generateFixedStringsPdf"); + + /* Accumulate data for the header and objects 1-3 */ + lpd->id = stringNew("%PDF-1.5\n"); + l_dnaAddNumber(lpd->objsize, strlen(lpd->id)); + + lpd->obj1 = stringNew("1 0 obj\n" + "<<\n" + "/Type /Catalog\n" + "/Pages 3 0 R\n" + ">>\n" + "endobj\n"); + l_dnaAddNumber(lpd->objsize, strlen(lpd->obj1)); + + sa = sarrayCreate(0); + sarrayAddString(sa, "2 0 obj\n" + "<<\n", L_COPY); + if (var_WRITE_DATE_AND_VERSION) { + datestr = l_getFormattedDate(); + snprintf(buf, sizeof(buf), "/CreationDate (D:%s)\n", datestr); + sarrayAddString(sa, buf, L_COPY); + LEPT_FREE(datestr); + version = getLeptonicaVersion(); + snprintf(buf, sizeof(buf), + "/Producer (leptonica: %s)\n", version); + LEPT_FREE(version); + } else { + snprintf(buf, sizeof(buf), "/Producer (leptonica)\n"); + } + sarrayAddString(sa, buf, L_COPY); + if (lpd->title) { + char *hexstr; + if ((hexstr = generateEscapeString(lpd->title)) != NULL) { + snprintf(buf, sizeof(buf), "/Title %s\n", hexstr); + sarrayAddString(sa, buf, L_COPY); + } else { + L_ERROR("title string is not ascii\n", procName); + } + LEPT_FREE(hexstr); + } + sarrayAddString(sa, ">>\n" + "endobj\n", L_COPY); + lpd->obj2 = sarrayToString(sa, 0); + l_dnaAddNumber(lpd->objsize, strlen(lpd->obj2)); + sarrayDestroy(&sa); + + lpd->obj3 = stringNew("3 0 obj\n" + "<<\n" + "/Type /Pages\n" + "/Kids [ 4 0 R ]\n" + "/Count 1\n" + ">>\n"); + l_dnaAddNumber(lpd->objsize, strlen(lpd->obj3)); + + /* Do the post-datastream string */ + lpd->poststream = stringNew("\n" + "endstream\n" + "endobj\n"); + return; +} + + +/*! + * \brief generateEscapeString() + * + * \param[in] str input string + * \return hex escape string, or null on error + * + *
+ * Notes:
+ *      (1) If the input string is not ascii, returns null.
+ *      (2) This takes an input ascii string and generates a hex
+ *          ascii output string with 4 bytes out for each byte in.
+ *          The feff code at the beginning tells the pdf interpreter
+ *          that the data is to be interpreted as big-endian, 4 bytes
+ *          at a time.  For ascii, the first two bytes are 0 and the
+ *          last two bytes are less than 0x80.
+ * 
+ */ +static char * +generateEscapeString(const char *str) +{ +char smallbuf[8]; +char *buffer; +l_int32 i, nchar, buflen; + + PROCNAME("generateEscapeString"); + + if (!str) + return (char *)ERROR_PTR("str not defined", procName, NULL); + nchar = strlen(str); + for (i = 0; i < nchar; i++) { + if (str[i] < 0) + return (char *)ERROR_PTR("str not all ascii", procName, NULL); + } + + buflen = 4 * nchar + 10; + buffer = (char *)LEPT_CALLOC(buflen, sizeof(char)); + stringCat(buffer, buflen, ""); + return buffer; +} + + +static void +generateMediaboxPdf(L_PDF_DATA *lpd) +{ +l_int32 i; +l_float32 xpt, ypt, wpt, hpt, maxx, maxy; + + /* First get the full extent of all the images. + * This is the mediabox, in pts. */ + maxx = maxy = 0; + for (i = 0; i < lpd->n; i++) { + ptaGetPt(lpd->xy, i, &xpt, &ypt); + ptaGetPt(lpd->wh, i, &wpt, &hpt); + maxx = L_MAX(maxx, xpt + wpt); + maxy = L_MAX(maxy, ypt + hpt); + } + + lpd->mediabox = boxCreate(0, 0, (l_int32)(maxx + 0.5), + (l_int32)(maxy + 0.5)); + + /* ypt is in standard image coordinates: the location of + * the UL image corner with respect to the UL media box corner. + * Rewrite each ypt for PostScript coordinates: the location of + * the LL image corner with respect to the LL media box corner. */ + for (i = 0; i < lpd->n; i++) { + ptaGetPt(lpd->xy, i, &xpt, &ypt); + ptaGetPt(lpd->wh, i, &wpt, &hpt); + ptaSetPt(lpd->xy, i, xpt, maxy - ypt - hpt); + } + + return; +} + + +static l_int32 +generatePageStringPdf(L_PDF_DATA *lpd) +{ +char *buf; +char *xstr; +l_int32 bufsize, i, wpt, hpt; +SARRAY *sa; + + PROCNAME("generatePageStringPdf"); + + /* Allocate 1000 bytes for the boilerplate text, and + * 50 bytes for each reference to an image in the + * ProcSet array. */ + bufsize = 1000 + 50 * lpd->n; + if ((buf = (char *)LEPT_CALLOC(bufsize, sizeof(char))) == NULL) + return ERROR_INT("calloc fail for buf", procName, 1); + + boxGetGeometry(lpd->mediabox, NULL, NULL, &wpt, &hpt); + sa = sarrayCreate(lpd->n); + for (i = 0; i < lpd->n; i++) { + snprintf(buf, bufsize, "/Im%d %d 0 R ", i + 1, 6 + i); + sarrayAddString(sa, buf, L_COPY); + } + xstr = sarrayToString(sa, 0); + sarrayDestroy(&sa); + if (!xstr) { + LEPT_FREE(buf); + return ERROR_INT("xstr not made", procName, 1); + } + + snprintf(buf, bufsize, "4 0 obj\n" + "<<\n" + "/Type /Page\n" + "/Parent 3 0 R\n" + "/MediaBox [%d %d %d %d]\n" + "/Contents 5 0 R\n" + "/Resources\n" + "<<\n" + "/XObject << %s >>\n" + "/ProcSet [ /ImageB /ImageI /ImageC ]\n" + ">>\n" + ">>\n" + "endobj\n", + 0, 0, wpt, hpt, xstr); + + lpd->obj4 = stringNew(buf); + l_dnaAddNumber(lpd->objsize, strlen(lpd->obj4)); + sarrayDestroy(&sa); + LEPT_FREE(buf); + LEPT_FREE(xstr); + return 0; +} + + +static l_int32 +generateContentStringPdf(L_PDF_DATA *lpd) +{ +char *buf; +char *cstr; +l_int32 i, bufsize; +l_float32 xpt, ypt, wpt, hpt; +SARRAY *sa; + + PROCNAME("generateContentStringPdf"); + + bufsize = 1000 + 200 * lpd->n; + if ((buf = (char *)LEPT_CALLOC(bufsize, sizeof(char))) == NULL) + return ERROR_INT("calloc fail for buf", procName, 1); + + sa = sarrayCreate(lpd->n); + for (i = 0; i < lpd->n; i++) { + ptaGetPt(lpd->xy, i, &xpt, &ypt); + ptaGetPt(lpd->wh, i, &wpt, &hpt); + snprintf(buf, bufsize, + "q %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d Do Q\n", + wpt, 0.0, 0.0, hpt, xpt, ypt, i + 1); + sarrayAddString(sa, buf, L_COPY); + } + cstr = sarrayToString(sa, 0); + sarrayDestroy(&sa); + if (!cstr) { + LEPT_FREE(buf); + return ERROR_INT("cstr not made", procName, 1); + } + + snprintf(buf, bufsize, "5 0 obj\n" + "<< /Length %d >>\n" + "stream\n" + "%s" + "endstream\n" + "endobj\n", + (l_int32)strlen(cstr), cstr); + + lpd->obj5 = stringNew(buf); + l_dnaAddNumber(lpd->objsize, strlen(lpd->obj5)); + sarrayDestroy(&sa); + LEPT_FREE(buf); + LEPT_FREE(cstr); + return 0; +} + + +static l_int32 +generatePreXStringsPdf(L_PDF_DATA *lpd) +{ +char buff[256]; +char buf[L_BIGBUF]; +char *cstr, *bstr, *fstr, *pstr, *xstr; +l_int32 i, cmindex; +L_COMP_DATA *cid; +SARRAY *sa; + + PROCNAME("generatePreXStringsPdf"); + + sa = lpd->saprex; + cmindex = 6 + lpd->n; /* starting value */ + for (i = 0; i < lpd->n; i++) { + pstr = cstr = NULL; + if ((cid = pdfdataGetCid(lpd, i)) == NULL) + return ERROR_INT("cid not found", procName, 1); + + if (cid->type == L_G4_ENCODE) { + if (var_WRITE_G4_IMAGE_MASK) { + cstr = stringNew("/ImageMask true\n" + "/ColorSpace /DeviceGray"); + } else { + cstr = stringNew("/ColorSpace /DeviceGray"); + } + bstr = stringNew("/BitsPerComponent 1\n" + "/Interpolate true"); + snprintf(buff, sizeof(buff), + "/Filter /CCITTFaxDecode\n" + "/DecodeParms\n" + "<<\n" + "/K -1\n" + "/Columns %d\n" + ">>", cid->w); + fstr = stringNew(buff); + } else if (cid->type == L_JPEG_ENCODE) { + if (cid->spp == 1) + cstr = stringNew("/ColorSpace /DeviceGray"); + else if (cid->spp == 3) + cstr = stringNew("/ColorSpace /DeviceRGB"); + else if (cid->spp == 4) /* pdf supports cmyk */ + cstr = stringNew("/ColorSpace /DeviceCMYK"); + else + L_ERROR("in jpeg: spp != 1, 3 or 4\n", procName); + bstr = stringNew("/BitsPerComponent 8"); + fstr = stringNew("/Filter /DCTDecode"); + } else if (cid->type == L_JP2K_ENCODE) { + if (cid->spp == 1) + cstr = stringNew("/ColorSpace /DeviceGray"); + else if (cid->spp == 3) + cstr = stringNew("/ColorSpace /DeviceRGB"); + else + L_ERROR("in jp2k: spp != 1 && spp != 3\n", procName); + bstr = stringNew("/BitsPerComponent 8"); + fstr = stringNew("/Filter /JPXDecode"); + } else { /* type == L_FLATE_ENCODE */ + if (cid->ncolors > 0) { /* cmapped */ + snprintf(buff, sizeof(buff), "/ColorSpace %d 0 R", cmindex++); + cstr = stringNew(buff); + } else { + if (cid->spp == 1 && cid->bps == 1) + cstr = stringNew("/ColorSpace /DeviceGray\n" + "/Decode [1 0]"); + else if (cid->spp == 1) /* 8 bpp */ + cstr = stringNew("/ColorSpace /DeviceGray"); + else if (cid->spp == 3) + cstr = stringNew("/ColorSpace /DeviceRGB"); + else + L_ERROR("unknown colorspace: spp = %d\n", + procName, cid->spp); + } + snprintf(buff, sizeof(buff), "/BitsPerComponent %d", cid->bps); + bstr = stringNew(buff); + fstr = stringNew("/Filter /FlateDecode"); + if (cid->predictor == TRUE) { + snprintf(buff, sizeof(buff), + "/DecodeParms\n" + "<<\n" + " /Columns %d\n" + " /Predictor 14\n" + " /Colors %d\n" + " /BitsPerComponent %d\n" + ">>\n", cid->w, cid->spp, cid->bps); + pstr = stringNew(buff); + } + } + if (!pstr) /* no decode parameters */ + pstr = stringNew(""); + + snprintf(buf, sizeof(buf), + "%d 0 obj\n" + "<<\n" + "/Length %zu\n" + "/Subtype /Image\n" + "%s\n" /* colorspace */ + "/Width %d\n" + "/Height %d\n" + "%s\n" /* bits/component */ + "%s\n" /* filter */ + "%s" /* decode parms; can be empty */ + ">>\n" + "stream\n", + 6 + i, cid->nbytescomp, cstr, + cid->w, cid->h, bstr, fstr, pstr); + xstr = stringNew(buf); + sarrayAddString(sa, xstr, L_INSERT); + l_dnaAddNumber(lpd->objsize, + strlen(xstr) + cid->nbytescomp + strlen(lpd->poststream)); + LEPT_FREE(cstr); + LEPT_FREE(bstr); + LEPT_FREE(fstr); + LEPT_FREE(pstr); + } + + return 0; +} + + +static l_int32 +generateColormapStringsPdf(L_PDF_DATA *lpd) +{ +char buf[L_BIGBUF]; +char *cmstr; +l_int32 i, cmindex, ncmap; +L_COMP_DATA *cid; +SARRAY *sa; + + PROCNAME("generateColormapStringsPdf"); + + /* In our canonical format, we have 5 objects, followed + * by n XObjects, followed by m colormaps, so the index of + * the first colormap object is 6 + n. */ + sa = lpd->sacmap; + cmindex = 6 + lpd->n; /* starting value */ + ncmap = 0; + for (i = 0; i < lpd->n; i++) { + if ((cid = pdfdataGetCid(lpd, i)) == NULL) + return ERROR_INT("cid not found", procName, 1); + if (cid->ncolors == 0) continue; + + ncmap++; + snprintf(buf, sizeof(buf), "%d 0 obj\n" + "[ /Indexed /DeviceRGB\n" + "%d\n" + "%s\n" + "]\n" + "endobj\n", + cmindex, cid->ncolors - 1, cid->cmapdatahex); + cmindex++; + cmstr = stringNew(buf); + l_dnaAddNumber(lpd->objsize, strlen(cmstr)); + sarrayAddString(sa, cmstr, L_INSERT); + } + + lpd->ncmap = ncmap; + return 0; +} + + +static void +generateTrailerPdf(L_PDF_DATA *lpd) +{ +l_int32 i, n, size, linestart; +L_DNA *daloc, *dasize; + + /* Let nobj be the number of numbered objects. These numbered + * objects are indexed by their pdf number in arrays naloc[] + * and nasize[]. The 0th object is the 9 byte header. Then + * the number of objects in nasize, which includes the header, + * is n = nobj + 1. The array naloc[] has n + 1 elements, + * because it includes as the last element the starting + * location of xref. The indexing of these objects, their + * starting locations and sizes are: + * + * Object number Starting location Size + * ------------- ----------------- -------------- + * 0 daloc[0] = 0 dasize[0] = 9 + * 1 daloc[1] = 9 dasize[1] = 49 + * n daloc[n] dasize[n] + * xref daloc[n+1] + * + * We first generate daloc. + */ + dasize = lpd->objsize; + daloc = lpd->objloc; + linestart = 0; + l_dnaAddNumber(daloc, linestart); /* header */ + n = l_dnaGetCount(dasize); + for (i = 0; i < n; i++) { + l_dnaGetIValue(dasize, i, &size); + linestart += size; + l_dnaAddNumber(daloc, linestart); + } + l_dnaGetIValue(daloc, n, &lpd->xrefloc); /* save it */ + + /* Now make the actual trailer string */ + lpd->trailer = makeTrailerStringPdf(daloc); +} + + +static char * +makeTrailerStringPdf(L_DNA *daloc) +{ +char *outstr; +char buf[L_BIGBUF]; +l_int32 i, n, linestart, xrefloc; +SARRAY *sa; + + PROCNAME("makeTrailerStringPdf"); + + if (!daloc) + return (char *)ERROR_PTR("daloc not defined", procName, NULL); + n = l_dnaGetCount(daloc) - 1; /* numbered objects + 1 (yes, +1) */ + + sa = sarrayCreate(0); + snprintf(buf, sizeof(buf), "xref\n" + "0 %d\n" + "0000000000 65535 f \n", n); + sarrayAddString(sa, buf, L_COPY); + for (i = 1; i < n; i++) { + l_dnaGetIValue(daloc, i, &linestart); + snprintf(buf, sizeof(buf), "%010d 00000 n \n", linestart); + sarrayAddString(sa, buf, L_COPY); + } + + l_dnaGetIValue(daloc, n, &xrefloc); + snprintf(buf, sizeof(buf), "trailer\n" + "<<\n" + "/Size %d\n" + "/Root 1 0 R\n" + "/Info 2 0 R\n" + ">>\n" + "startxref\n" + "%d\n" + "%%%%EOF\n", n, xrefloc); + sarrayAddString(sa, buf, L_COPY); + outstr = sarrayToString(sa, 0); + sarrayDestroy(&sa); + return outstr; +} + + +/*! + * \brief generateOutputDataPdf() + * + * \param[out] pdata pdf data array + * \param[out] pnbytes size of pdf data array + * \param[in] lpd input data used to make pdf + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Only called from l_generatePdf().  On error, no data is returned.
+ * 
+ */ +static l_int32 +generateOutputDataPdf(l_uint8 **pdata, + size_t *pnbytes, + L_PDF_DATA *lpd) +{ +char *str; +l_uint8 *data; +l_int32 nimages, i, len; +l_int32 *sizes, *locs; +size_t nbytes; +L_COMP_DATA *cid; + + PROCNAME("generateOutputDataPdf"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + nbytes = lpd->xrefloc + strlen(lpd->trailer); + *pnbytes = nbytes; + if ((data = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) + return ERROR_INT("calloc fail for data", procName, 1); + *pdata = data; + + sizes = l_dnaGetIArray(lpd->objsize); + locs = l_dnaGetIArray(lpd->objloc); + memcpy(data, lpd->id, sizes[0]); + memcpy(data + locs[1], lpd->obj1, sizes[1]); + memcpy(data + locs[2], lpd->obj2, sizes[2]); + memcpy(data + locs[3], lpd->obj3, sizes[3]); + memcpy(data + locs[4], lpd->obj4, sizes[4]); + memcpy(data + locs[5], lpd->obj5, sizes[5]); + + /* Each image has 3 parts: variable preamble, the compressed + * data stream, and the fixed poststream. */ + nimages = lpd->n; + for (i = 0; i < nimages; i++) { + if ((cid = pdfdataGetCid(lpd, i)) == NULL) { /* should not happen */ + LEPT_FREE(sizes); + LEPT_FREE(locs); + return ERROR_INT("cid not found", procName, 1); + } + str = sarrayGetString(lpd->saprex, i, L_NOCOPY); + len = strlen(str); + memcpy(data + locs[6 + i], str, len); + memcpy(data + locs[6 + i] + len, + cid->datacomp, cid->nbytescomp); + memcpy(data + locs[6 + i] + len + cid->nbytescomp, + lpd->poststream, strlen(lpd->poststream)); + } + + /* Each colormap is simply a stored string */ + for (i = 0; i < lpd->ncmap; i++) { + str = sarrayGetString(lpd->sacmap, i, L_NOCOPY); + memcpy(data + locs[6 + nimages + i], str, strlen(str)); + } + + /* And finally the trailer */ + memcpy(data + lpd->xrefloc, lpd->trailer, strlen(lpd->trailer)); + LEPT_FREE(sizes); + LEPT_FREE(locs); + return 0; +} + + +/*---------------------------------------------------------------------* + * Helper functions for generating multipage pdf output * + *---------------------------------------------------------------------*/ +/*! + * \brief parseTrailerPdf() + * + * \param[in] bas lba of a pdf file + * \param[out] pda byte locations of the beginning of each object + * \return 0 if OK, 1 on error + */ +static l_int32 +parseTrailerPdf(L_BYTEA *bas, + L_DNA **pda) +{ +char *str; +l_uint8 nl = '\n'; +l_uint8 *data; +l_int32 i, j, start, startloc, xrefloc, found, loc, nobj, objno, trailer_ok; +size_t size; +L_DNA *da, *daobj, *daxref; +SARRAY *sa; + + PROCNAME("parseTrailerPdf"); + + if (!pda) + return ERROR_INT("&da not defined", procName, 1); + *pda = NULL; + if (!bas) + return ERROR_INT("bas not defined", procName, 1); + data = l_byteaGetData(bas, &size); + if (memcmp(data, "%PDF-1.", 7) != 0) + return ERROR_INT("PDF header signature not found", procName, 1); + + /* Search for "startxref" starting 50 bytes from the EOF */ + start = 0; + if (size > 50) + start = size - 50; + arrayFindSequence(data + start, size - start, + (l_uint8 *)"startxref\n", 10, &loc, &found); + if (!found) + return ERROR_INT("startxref not found!", procName, 1); + if (sscanf((char *)(data + start + loc + 10), "%d\n", &xrefloc) != 1) + return ERROR_INT("xrefloc not found!", procName, 1); + if (xrefloc < 0 || xrefloc >= size) + return ERROR_INT("invalid xrefloc!", procName, 1); + sa = sarrayCreateLinesFromString((char *)(data + xrefloc), 0); + str = sarrayGetString(sa, 1, L_NOCOPY); + if ((sscanf(str, "0 %d", &nobj)) != 1) { + sarrayDestroy(&sa); + return ERROR_INT("nobj not found", procName, 1); + } + + /* Get starting locations. The numa index is the + * object number. loc[0] is the ID; loc[nobj + 1] is xrefloc. */ + da = l_dnaCreate(nobj + 1); + *pda = da; + for (i = 0; i < nobj; i++) { + str = sarrayGetString(sa, i + 2, L_NOCOPY); + sscanf(str, "%d", &startloc); + l_dnaAddNumber(da, startloc); + } + l_dnaAddNumber(da, xrefloc); + +#if DEBUG_MULTIPAGE + fprintf(stderr, "************** Trailer string ************\n"); + fprintf(stderr, "xrefloc = %d", xrefloc); + sarrayWriteStream(stderr, sa); + + fprintf(stderr, "************** Object locations ************"); + l_dnaWriteStream(stderr, da); +#endif /* DEBUG_MULTIPAGE */ + sarrayDestroy(&sa); + + /* Verify correct parsing */ + trailer_ok = TRUE; + for (i = 1; i < nobj; i++) { + l_dnaGetIValue(da, i, &startloc); + if ((sscanf((char *)(data + startloc), "%d 0 obj", &objno)) != 1) { + L_ERROR("bad trailer for object %d\n", procName, i); + trailer_ok = FALSE; + break; + } + } + + /* If the trailer is broken, reconstruct the correct obj locations */ + if (!trailer_ok) { + L_INFO("rebuilding pdf trailer\n", procName); + l_dnaEmpty(da); + l_dnaAddNumber(da, 0); + l_byteaFindEachSequence(bas, (l_uint8 *)" 0 obj\n", 7, &daobj); + nobj = l_dnaGetCount(daobj); + for (i = 0; i < nobj; i++) { + l_dnaGetIValue(daobj, i, &loc); + for (j = loc - 1; j > 0; j--) { + if (data[j] == nl) + break; + } + l_dnaAddNumber(da, j + 1); + } + l_byteaFindEachSequence(bas, (l_uint8 *)"xref", 4, &daxref); + l_dnaGetIValue(daxref, 0, &loc); + l_dnaAddNumber(da, loc); + l_dnaDestroy(&daobj); + l_dnaDestroy(&daxref); + } + + return 0; +} + + +static char * +generatePagesObjStringPdf(NUMA *napage) +{ +char *str; +char *buf; +l_int32 i, n, index, bufsize; +SARRAY *sa; + + PROCNAME("generatePagesObjStringPdf"); + + if (!napage) + return (char *)ERROR_PTR("napage not defined", procName, NULL); + + n = numaGetCount(napage); + bufsize = 100 + 16 * n; /* large enough to hold the output string */ + buf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); + sa = sarrayCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(napage, i, &index); + snprintf(buf, bufsize, " %d 0 R ", index); + sarrayAddString(sa, buf, L_COPY); + } + + str = sarrayToString(sa, 0); + snprintf(buf, bufsize - 1, "3 0 obj\n" + "<<\n" + "/Type /Pages\n" + "/Kids [%s]\n" + "/Count %d\n" + ">>\n", str, n); + sarrayDestroy(&sa); + LEPT_FREE(str); + return buf; +} + + +/*! + * \brief substituteObjectNumbers() + * + * \param[in] bas lba of a pdf object + * \param[in] na_objs object number mapping array + * \return bad lba of rewritten pdf for the object + * + *
+ * Notes:
+ *      (1) Interpret the first set of bytes as the object number,
+ *          map to the new number, and write it out.
+ *      (2) Find all occurrences of this 4-byte sequence: " 0 R"
+ *      (3) Find the location and value of the integer preceding this,
+ *          and map it to the new value.
+ *      (4) Rewrite the object with new object numbers.
+ * 
+ */ +static L_BYTEA * +substituteObjectNumbers(L_BYTEA *bas, + NUMA *na_objs) +{ +l_uint8 space = ' '; +l_uint8 *datas; +l_uint8 buf[32]; /* only needs to hold one integer in ascii format */ +l_int32 start, nrepl, i, j, objin, objout, found; +l_int32 *objs, *matches; +size_t size; +L_BYTEA *bad; +L_DNA *da_match; + + datas = l_byteaGetData(bas, &size); + bad = l_byteaCreate(100); + objs = numaGetIArray(na_objs); /* object number mapper */ + + /* Substitute the object number on the first line */ + sscanf((char *)datas, "%d", &objin); + objout = objs[objin]; + snprintf((char *)buf, 32, "%d", objout); + l_byteaAppendString(bad, (char *)buf); + + /* Find the set of matching locations for object references */ + arrayFindSequence(datas, size, &space, 1, &start, &found); + da_match = arrayFindEachSequence(datas, size, (l_uint8 *)" 0 R", 4); + if (!da_match) { + l_byteaAppendData(bad, datas + start, size - start); + LEPT_FREE(objs); + return bad; + } + + /* Substitute all the object reference numbers */ + nrepl = l_dnaGetCount(da_match); + matches = l_dnaGetIArray(da_match); + for (i = 0; i < nrepl; i++) { + /* Find the first space before the object number */ + for (j = matches[i] - 1; j > 0; j--) { + if (datas[j] == space) + break; + } + /* Copy bytes from 'start' up to the object number */ + l_byteaAppendData(bad, datas + start, j - start + 1); + sscanf((char *)(datas + j + 1), "%d", &objin); + objout = objs[objin]; + snprintf((char *)buf, 32, "%d", objout); + l_byteaAppendString(bad, (char *)buf); + start = matches[i]; + } + l_byteaAppendData(bad, datas + start, size - start); + + LEPT_FREE(objs); + LEPT_FREE(matches); + l_dnaDestroy(&da_match); + return bad; +} + + +/*---------------------------------------------------------------------* + * Create/destroy/access pdf data * + *---------------------------------------------------------------------*/ +static L_PDF_DATA * +pdfdataCreate(const char *title) +{ +L_PDF_DATA *lpd; + + lpd = (L_PDF_DATA *)LEPT_CALLOC(1, sizeof(L_PDF_DATA)); + if (title) lpd->title = stringNew(title); + lpd->cida = ptraCreate(10); + lpd->xy = ptaCreate(10); + lpd->wh = ptaCreate(10); + lpd->saprex = sarrayCreate(10); + lpd->sacmap = sarrayCreate(10); + lpd->objsize = l_dnaCreate(20); + lpd->objloc = l_dnaCreate(20); + return lpd; +} + +static void +pdfdataDestroy(L_PDF_DATA **plpd) +{ +l_int32 i; +L_COMP_DATA *cid; +L_PDF_DATA *lpd; + + PROCNAME("pdfdataDestroy"); + + if (plpd== NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + if ((lpd = *plpd) == NULL) + return; + + if (lpd->title) LEPT_FREE(lpd->title); + for (i = 0; i < lpd->n; i++) { + cid = (L_COMP_DATA *)ptraRemove(lpd->cida, i, L_NO_COMPACTION); + l_CIDataDestroy(&cid); + } + + ptraDestroy(&lpd->cida, 0, 0); + if (lpd->id) LEPT_FREE(lpd->id); + if (lpd->obj1) LEPT_FREE(lpd->obj1); + if (lpd->obj2) LEPT_FREE(lpd->obj2); + if (lpd->obj3) LEPT_FREE(lpd->obj3); + if (lpd->obj4) LEPT_FREE(lpd->obj4); + if (lpd->obj5) LEPT_FREE(lpd->obj5); + if (lpd->poststream) LEPT_FREE(lpd->poststream); + if (lpd->trailer) LEPT_FREE(lpd->trailer); + if (lpd->xy) ptaDestroy(&lpd->xy); + if (lpd->wh) ptaDestroy(&lpd->wh); + if (lpd->mediabox) boxDestroy(&lpd->mediabox); + if (lpd->saprex) sarrayDestroy(&lpd->saprex); + if (lpd->sacmap) sarrayDestroy(&lpd->sacmap); + if (lpd->objsize) l_dnaDestroy(&lpd->objsize); + if (lpd->objloc) l_dnaDestroy(&lpd->objloc); + LEPT_FREE(lpd); + *plpd = NULL; + return; +} + + +static L_COMP_DATA * +pdfdataGetCid(L_PDF_DATA *lpd, + l_int32 index) +{ + PROCNAME("pdfdataGetCid"); + + if (!lpd) + return (L_COMP_DATA *)ERROR_PTR("lpd not defined", procName, NULL); + if (index < 0 || index >= lpd->n) + return (L_COMP_DATA *)ERROR_PTR("invalid image index", procName, NULL); + + return (L_COMP_DATA *)ptraGetPtrToItem(lpd->cida, index); +} + + +/*---------------------------------------------------------------------* + * Set flags for special modes * + *---------------------------------------------------------------------*/ +/*! + * \brief l_pdfSetG4ImageMask() + * + * \param[in] flag 1 for writing g4 data as fg only through a mask; + * 0 for writing fg and bg + * \return void + * + *
+ * Notes:
+ *      (1) The default is for writing only the fg (through the mask).
+ *          That way when you write a 1 bpp image, the bg is transparent,
+ *          so any previously written image remains visible behind it.
+ * 
+ */ +void +l_pdfSetG4ImageMask(l_int32 flag) +{ + var_WRITE_G4_IMAGE_MASK = flag; +} + + +/*! + * \brief l_pdfSetDateAndVersion() + * + * \param[in] flag 1 for writing date/time and leptonica version; + * 0 for omitting this from the metadata + * \return void + * + *
+ * Notes:
+ *      (1) The default is for writing this data.  For regression tests
+ *          that compare output against golden files, it is useful to omit.
+ * 
+ */ +void +l_pdfSetDateAndVersion(l_int32 flag) +{ + var_WRITE_DATE_AND_VERSION = flag; +} + +/* --------------------------------------------*/ +#endif /* USE_PDFIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pdfio2stub.c b/3rdparty/hgOCR/leptonica/pdfio2stub.c new file mode 100644 index 00000000..d9a53dc8 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pdfio2stub.c @@ -0,0 +1,168 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pdfio2stub.c + *
+ *
+ *     Stubs for pdfio2.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_PDFIO /* defined in environ.h */ +/* --------------------------------------------*/ + +/* ----------------------------------------------------------------------*/ + +l_ok pixConvertToPdfData(PIX *pix, l_int32 type, l_int32 quality, + l_uint8 **pdata, size_t *pnbytes, + l_int32 x, l_int32 y, l_int32 res, + const char *title, + L_PDF_DATA **plpd, l_int32 position) +{ + return ERROR_INT("function not present", "pixConvertToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok ptraConcatenatePdfToData(L_PTRA *pa_data, SARRAY *sa, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "ptraConcatenatePdfToData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertTiffMultipageToPdf(const char *filein, const char *fileout) +{ + return ERROR_INT("function not present", "convertTiffMultipageToPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok l_generateCIDataForPdf(const char *fname, PIX *pix, l_int32 quality, + L_COMP_DATA **pcid) +{ + return ERROR_INT("function not present", "l_generateCIDataForPdf", 1); +} + +/* ----------------------------------------------------------------------*/ + +L_COMP_DATA * l_generateFlateDataPdf(const char *fname, PIX *pix) +{ + return (L_COMP_DATA *)ERROR_PTR("function not present", + "l_generateFlateDataPdf", NULL); +} + +/* ----------------------------------------------------------------------*/ + +L_COMP_DATA * l_generateJpegData(const char *fname, l_int32 ascii85flag) +{ + return (L_COMP_DATA *)ERROR_PTR("function not present", + "l_generateJpegData", NULL); +} + +/* ----------------------------------------------------------------------*/ + +L_COMP_DATA * l_generateJpegDataMem(l_uint8 *data, size_t nbytes, + l_int32 ascii85flag) +{ + return (L_COMP_DATA *)ERROR_PTR("function not present", + "l_generateJpegDataMem", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok l_generateCIData(const char *fname, l_int32 type, l_int32 quality, + l_int32 ascii85, L_COMP_DATA **pcid) +{ + return ERROR_INT("function not present", "l_generateCIData", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixGenerateCIData(PIX *pixs, l_int32 type, l_int32 quality, + l_int32 ascii85, L_COMP_DATA **pcid) +{ + return ERROR_INT("function not present", "pixGenerateCIData", 1); +} + +/* ----------------------------------------------------------------------*/ + +L_COMP_DATA * l_generateFlateData(const char *fname, l_int32 ascii85flag) +{ + return (L_COMP_DATA *)ERROR_PTR("function not present", + "l_generateFlateData", NULL); +} + +/* ----------------------------------------------------------------------*/ + +L_COMP_DATA * l_generateG4Data(const char *fname, l_int32 ascii85flag) +{ + return (L_COMP_DATA *)ERROR_PTR("function not present", + "l_generateG4Data", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok cidConvertToPdfData(L_COMP_DATA *cid, const char *title, + l_uint8 **pdata, size_t *pnbytes) +{ + return ERROR_INT("function not present", "cidConvertToPdfData", 1); +} + +/* ----------------------------------------------------------------------*/ + +void l_CIDataDestroy(L_COMP_DATA **pcid) +{ + L_ERROR("function not present\n", "l_CIDataDestroy"); + return; +} + +/* ----------------------------------------------------------------------*/ + +void l_pdfSetG4ImageMask(l_int32 flag) +{ + L_ERROR("function not present\n", "l_pdfSetG4ImageMask"); + return; +} + +/* ----------------------------------------------------------------------*/ + +void l_pdfSetDateAndVersion(l_int32 flag) +{ + L_ERROR("function not present\n", "l_pdfSetDateAndVersion"); + return; +} + +/* ----------------------------------------------------------------------*/ + +/* --------------------------------------------*/ +#endif /* !USE_PDFIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pix.h b/3rdparty/hgOCR/leptonica/pix.h new file mode 100644 index 00000000..d1d75c95 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix.h @@ -0,0 +1,1341 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_PIX_H +#define LEPTONICA_PIX_H + +/*! + * \file pix.h + * + *
+ *   Valid image types in leptonica:
+ *       Pix: 1 bpp, with and without colormap
+ *       Pix: 2 bpp, with and without colormap
+ *       Pix: 4 bpp, with and without colormap
+ *       Pix: 8 bpp, with and without colormap
+ *       Pix: 16 bpp (1 spp)
+ *       Pix: 32 bpp (rgb, 3 spp)
+ *       Pix: 32 bpp (rgba, 4 spp)
+ *       FPix: 32 bpp float
+ *       DPix: 64 bpp double
+ *       Notes:
+ *          (1) The only valid Pix image type with alpha is rgba.
+ *              In particular, the alpha component is not used in
+ *              cmapped images.
+ *          (2) PixComp can hold any Pix with IFF_PNG encoding.
+ *
+ *   Contents:
+ *
+ *   (1) This file defines most of the image-related structs used in leptonica:
+ *         struct Pix
+ *         struct PixColormap
+ *         struct RGBA_Quad
+ *         struct Pixa
+ *         struct Pixaa
+ *         struct Box
+ *         struct Boxa
+ *         struct Boxaa
+ *         struct Pta
+ *         struct Ptaa
+ *         struct Pixacc
+ *         struct PixTiling
+ *         struct FPix
+ *         struct FPixa
+ *         struct DPix
+ *         struct PixComp
+ *         struct PixaComp
+ *
+ *   (2) This file has definitions for:
+ *         Colors for RGBA
+ *         Colors for drawing boxes
+ *         Perceptual color weights
+ *         Colormap conversion flags
+ *         Rasterop bit flags
+ *         Structure access flags (for insert, copy, clone, copy-clone)
+ *         Sorting flags (by type and direction)
+ *         Blending flags
+ *         Graphics pixel setting flags
+ *         Size and location filter flags
+ *         Color component selection flags
+ *         16-bit conversion flags
+ *         Rotation and shear flags
+ *         Affine transform order flags
+ *         Grayscale filling flags
+ *         Flags for setting to white or black
+ *         Flags for getting white or black pixel value
+ *         Flags for 8 and 16 bit pixel sums
+ *         Dithering flags
+ *         Distance flags
+ *         Value flags
+ *         Statistical measures
+ *         Set selection flags
+ *         Text orientation flags
+ *         Edge orientation flags
+ *         Line orientation flags
+ *         Image orientation flags
+ *         Scan direction flags
+ *         Box size adjustment flags
+ *         Flags for modifying box boundaries using a second box
+ *         Handling overlapping bounding boxes in boxa
+ *         Selecting or making a box from two (intersecting) boxes
+ *         Flags for replacing invalid boxes
+ *         Flags for box corners
+ *         Horizontal warp
+ *         Pixel selection for resampling
+ *         Thinning flags
+ *         Runlength flags
+ *         Edge filter flags
+ *         Subpixel color component ordering in LCD display
+ *         HSV histogram flags
+ *         Region flags (inclusion, exclusion)
+ *         Flags for adding text to a pix
+ *         Flags for plotting on a pix
+ *         Flags for making simple masks
+ *         Flags for selecting display program
+ *         Flags in the 'special' pix field for non-default operations
+ *         Handling negative values in conversion to unsigned int
+ *         Relative to zero flags
+ *         Flags for adding or removing trailing slash from string
+ *
+ *   (3) This file has typedefs for the pix allocator and deallocator functions
+ *         alloc_fn()
+ *         dealloc_fn().
+ * 
+ */ + + +/*-------------------------------------------------------------------------* + * Basic Pix * + *-------------------------------------------------------------------------*/ + /* The 'special' field is by default 0, but it can hold integers + * that direct non-default actions, e.g., in png and jpeg I/O. */ + +/*! Basic Pix */ +struct Pix +{ + l_uint32 w; /*!< width in pixels */ + l_uint32 h; /*!< height in pixels */ + l_uint32 d; /*!< depth in bits (bpp) */ + l_uint32 spp; /*!< number of samples per pixel */ + l_uint32 wpl; /*!< 32-bit words/line */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + l_int32 xres; /*!< image res (ppi) in x direction */ + /*!< (use 0 if unknown) */ + l_int32 yres; /*!< image res (ppi) in y direction */ + /*!< (use 0 if unknown) */ + l_int32 informat; /*!< input file format, IFF_* */ + l_int32 special; /*!< special instructions for I/O, etc */ + char *text; /*!< text string associated with pix */ + struct PixColormap *colormap; /*!< colormap (may be null) */ + l_uint32 *data; /*!< the image data */ +}; +typedef struct Pix PIX; + +/*! Colormap of a Pix */ +struct PixColormap +{ + void *array; /*!< colormap table (array of RGBA_QUAD) */ + l_int32 depth; /*!< of pix (1, 2, 4 or 8 bpp) */ + l_int32 nalloc; /*!< number of color entries allocated */ + l_int32 n; /*!< number of color entries used */ +}; +typedef struct PixColormap PIXCMAP; + + + /*! Colormap table entry (after the BMP version). + * Note that the BMP format stores the colormap table exactly + * as it appears here, with color samples being stored sequentially, + * in the order (b,g,r,a). */ +struct RGBA_Quad +{ + l_uint8 blue; /*!< blue value */ + l_uint8 green; /*!< green value */ + l_uint8 red; /*!< red value */ + l_uint8 alpha; /*!< alpha value */ +}; +typedef struct RGBA_Quad RGBA_QUAD; + + +/*-------------------------------------------------------------------------* + * Colors for 32 RGBA * + *-------------------------------------------------------------------------*/ +/*
+ *  Notes:
+ *      (1) These are the byte indices for colors in 32 bpp images.
+ *          They are used through the GET/SET_DATA_BYTE accessors.
+ *          The 4th byte, typically known as the "alpha channel" and used
+ *          for blending, is used to a small extent in leptonica.
+ *      (2) Do not change these values!  If you redefine them, functions
+ *          that have the shifts hardcoded for efficiency and conciseness
+ *          (instead of using the constants below) will break.  These
+ *          functions are labelled with "***"  next to their names at
+ *          the top of the files in which they are defined.
+ *      (3) The shifts to extract the red, green, blue and alpha components
+ *          from a 32 bit pixel are defined here.
+ * 
+ */ + +/*! RGBA Color */ +enum { + COLOR_RED = 0, /*!< red color index in RGBA_QUAD */ + COLOR_GREEN = 1, /*!< green color index in RGBA_QUAD */ + COLOR_BLUE = 2, /*!< blue color index in RGBA_QUAD */ + L_ALPHA_CHANNEL = 3 /*!< alpha value index in RGBA_QUAD */ +}; + +static const l_int32 L_RED_SHIFT = + 8 * (sizeof(l_uint32) - 1 - COLOR_RED); /* 24 */ +static const l_int32 L_GREEN_SHIFT = + 8 * (sizeof(l_uint32) - 1 - COLOR_GREEN); /* 16 */ +static const l_int32 L_BLUE_SHIFT = + 8 * (sizeof(l_uint32) - 1 - COLOR_BLUE); /* 8 */ +static const l_int32 L_ALPHA_SHIFT = + 8 * (sizeof(l_uint32) - 1 - L_ALPHA_CHANNEL); /* 0 */ + + +/*-------------------------------------------------------------------------* + * Colors for drawing boxes * + *-------------------------------------------------------------------------*/ +/*! Box Color */ +enum { + L_DRAW_RED = 0, /*!< draw in red */ + L_DRAW_GREEN = 1, /*!< draw in green */ + L_DRAW_BLUE = 2, /*!< draw in blue */ + L_DRAW_SPECIFIED = 3, /*!< draw specified color */ + L_DRAW_RGB = 4, /*!< draw as sequence of r,g,b */ + L_DRAW_RANDOM = 5 /*!< draw randomly chosen colors */ +}; + + +/*-------------------------------------------------------------------------* + * Perceptual color weights * + *-------------------------------------------------------------------------*/ +/*
+ *  Notes:
+ *      (1) These perceptual weighting factors are ad-hoc, but they do
+ *          add up to 1.  Unlike, for example, the weighting factors for
+ *          converting RGB to luminance, or more specifically to Y in the
+ *          YUV colorspace.  Those numbers come from the
+ *          International Telecommunications Union, via ITU-R.
+ * 
+ */ +static const l_float32 L_RED_WEIGHT = 0.3f; /*!< Percept. weight for red */ +static const l_float32 L_GREEN_WEIGHT = 0.5f; /*!< Percept. weight for green */ +static const l_float32 L_BLUE_WEIGHT = 0.2f; /*!< Percept. weight for blue */ + + +/*-------------------------------------------------------------------------* + * Flags for colormap conversion * + *-------------------------------------------------------------------------*/ +/*! Cmap Conversion */ +enum { + REMOVE_CMAP_TO_BINARY = 0, /*!< remove colormap for conv to 1 bpp */ + REMOVE_CMAP_TO_GRAYSCALE = 1, /*!< remove colormap for conv to 8 bpp */ + REMOVE_CMAP_TO_FULL_COLOR = 2, /*!< remove colormap for conv to 32 bpp */ + REMOVE_CMAP_WITH_ALPHA = 3, /*!< remove colormap and alpha */ + REMOVE_CMAP_BASED_ON_SRC = 4 /*!< remove depending on src format */ +}; + + +/*------------------------------------------------------------------------* + *! + *
+ * The following operation bit flags have been modified from
+ * Sun's pixrect.h.
+ *
+ * The 'op' in 'rasterop' is represented by an integer
+ * composed with Boolean functions using the set of five integers
+ * given below.  The integers, and the op codes resulting from
+ * boolean expressions on them, need only be in the range from 0 to 15.
+ * The function is applied on a per-pixel basis.
+ *
+ * Examples: the op code representing ORing the src and dest
+ * is computed using the bit OR, as PIX_SRC | PIX_DST;  the op
+ * code representing XORing src and dest is found from
+ * PIX_SRC ^ PIX_DST;  the op code representing ANDing src and dest
+ * is found from PIX_SRC & PIX_DST.  Note that
+ * PIX_NOT(PIX_CLR) = PIX_SET, and v.v., as they must be.
+ *
+ * We use the following set of definitions:
+ *
+ *      #define   PIX_SRC      0xc
+ *      #define   PIX_DST      0xa
+ *      #define   PIX_NOT(op)  (op) ^ 0xf
+ *      #define   PIX_CLR      0x0
+ *      #define   PIX_SET      0xf
+ *
+ * These definitions differ from Sun's, in that Sun left-shifted
+ * each value by 1 pixel, and used the least significant bit as a
+ * flag for the "pseudo-operation" of clipping.  We don't need
+ * this bit, because it is both efficient and safe ALWAYS to clip
+ * the rectangles to the src and dest images, which is what we do.
+ * See the notes in rop.h on the general choice of these bit flags.
+ *
+ * [If for some reason you need compatibility with Sun's xview package,
+ * you can adopt the original Sun definitions to avoid redefinition conflicts:
+ *
+ *      #define   PIX_SRC      (0xc << 1)
+ *      #define   PIX_DST      (0xa << 1)
+ *      #define   PIX_NOT(op)  ((op) ^ 0x1e)
+ *      #define   PIX_CLR      (0x0 << 1)
+ *      #define   PIX_SET      (0xf << 1)
+ * ]
+ *
+ * We have, for reference, the following 16 unique op flags:
+ *
+ *      PIX_CLR                           0000             0x0
+ *      PIX_SET                           1111             0xf
+ *      PIX_SRC                           1100             0xc
+ *      PIX_DST                           1010             0xa
+ *      PIX_NOT(PIX_SRC)                  0011             0x3
+ *      PIX_NOT(PIX_DST)                  0101             0x5
+ *      PIX_SRC | PIX_DST                 1110             0xe
+ *      PIX_SRC & PIX_DST                 1000             0x8
+ *      PIX_SRC ^ PIX_DST                 0110             0x6
+ *      PIX_NOT(PIX_SRC) | PIX_DST        1011             0xb
+ *      PIX_NOT(PIX_SRC) & PIX_DST        0010             0x2
+ *      PIX_SRC | PIX_NOT(PIX_DST)        1101             0xd
+ *      PIX_SRC & PIX_NOT(PIX_DST)        0100             0x4
+ *      PIX_NOT(PIX_SRC | PIX_DST)        0001             0x1
+ *      PIX_NOT(PIX_SRC & PIX_DST)        0111             0x7
+ *      PIX_NOT(PIX_SRC ^ PIX_DST)        1001             0x9
+ *
+ * 
+ *-------------------------------------------------------------------------*/ + +#define PIX_SRC (0xc) /*!< use source pixels */ +#define PIX_DST (0xa) /*!< use destination pixels */ +#define PIX_NOT(op) ((op) ^ 0x0f) /*!< invert operation %op */ +#define PIX_CLR (0x0) /*!< clear pixels */ +#define PIX_SET (0xf) /*!< set pixels */ + +#define PIX_PAINT (PIX_SRC | PIX_DST) /*!< paint = src | dst */ +#define PIX_MASK (PIX_SRC & PIX_DST) /*!< mask = src & dst */ +#define PIX_SUBTRACT (PIX_DST & PIX_NOT(PIX_SRC)) /*!< subtract = */ + /*!< src & !dst */ +#define PIX_XOR (PIX_SRC ^ PIX_DST) /*!< xor = src ^ dst */ + + +/*-------------------------------------------------------------------------* + *
+ *   Important Notes:
+ *
+ *       (1) The image data is stored in a single contiguous
+ *           array of l_uint32, into which the pixels are packed.
+ *           By "packed" we mean that there are no unused bits
+ *           between pixels, except for end-of-line padding to
+ *           satisfy item (2) below.
+ *
+ *       (2) Every image raster line begins on a 32-bit word
+ *           boundary within this array.
+ *
+ *       (3) Pix image data is stored in 32-bit units, with the
+ *           pixels ordered from left to right in the image being
+ *           stored in order from the MSB to LSB within the word,
+ *           for both big-endian and little-endian machines.
+ *           This is the natural ordering for big-endian machines,
+ *           as successive bytes are stored and fetched progressively
+ *           to the right.  However, for little-endians, when storing
+ *           we re-order the bytes from this byte stream order, and
+ *           reshuffle again for byte access on 32-bit entities.
+ *           So if the bytes come in sequence from left to right, we
+ *           store them on little-endians in byte order:
+ *                3 2 1 0 7 6 5 4 ...
+ *           This MSB to LSB ordering allows left and right shift
+ *           operations on 32 bit words to move the pixels properly.
+ *
+ *       (4) We use 32 bit pixels for both RGB and RGBA color images.
+ *           The A (alpha) byte is ignored in most leptonica functions
+ *           operating on color images.  Within each 4 byte pixel, the
+ *           color samples are ordered from MSB to LSB, as follows:
+ *
+ *                |  MSB  |  2nd MSB  |  3rd MSB  |  LSB  |
+ *                   red      green       blue      alpha
+ *                    0         1           2         3   (big-endian)
+ *                    3         2           1         0   (little-endian)
+ *
+ *           Because we use MSB to LSB ordering within the 32-bit word,
+ *           the individual 8-bit samples can be accessed with
+ *           GET_DATA_BYTE and SET_DATA_BYTE macros, using the
+ *           (implicitly big-ending) ordering
+ *                 red:    byte 0  (MSB)
+ *                 green:  byte 1  (2nd MSB)
+ *                 blue:   byte 2  (3rd MSB)
+ *                 alpha:  byte 3  (LSB)
+ *
+ *           The specific color assignment is made in this file,
+ *           through the definitions of COLOR_RED, etc.  Then the R, G
+ *           B and A sample values can be retrieved using
+ *                 redval = GET_DATA_BYTE(&pixel, COLOR_RED);
+ *                 greenval = GET_DATA_BYTE(&pixel, COLOR_GREEN);
+ *                 blueval = GET_DATA_BYTE(&pixel, COLOR_BLUE);
+ *                 alphaval = GET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL);
+ *           and they can be set with
+ *                 SET_DATA_BYTE(&pixel, COLOR_RED, redval);
+ *                 SET_DATA_BYTE(&pixel, COLOR_GREEN, greenval);
+ *                 SET_DATA_BYTE(&pixel, COLOR_BLUE, blueval);
+ *                 SET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL, alphaval);
+ *
+ *           More efficiently, these components can be extracted directly
+ *           by shifting and masking, explicitly using the values in
+ *           L_RED_SHIFT, etc.:
+ *                 (pixel32 >> L_RED_SHIFT) & 0xff;         (red)
+ *                 (pixel32 >> L_GREEN_SHIFT) & 0xff;       (green)
+ *                 (pixel32 >> L_BLUE_SHIFT) & 0xff;        (blue)
+ *                 (pixel32 >> L_ALPHA_SHIFT) & 0xff;       (alpha)
+ *           The functions extractRGBValues() and extractRGBAValues() are
+ *           provided to do this.  Likewise, the pixels can be set
+ *           directly by shifting, using composeRGBPixel() and
+ *           composeRGBAPixel().
+ *
+ *           All these operations work properly on both big- and little-endians.
+ *
+ *       (5) A reference count is held within each pix, giving the
+ *           number of ptrs to the pix.  When a pixClone() call
+ *           is made, the ref count is increased by 1, and
+ *           when a pixDestroy() call is made, the reference count
+ *           of the pix is decremented.  The pix is only destroyed
+ *           when the reference count goes to zero.
+ *
+ *       (6) The version numbers (below) are used in the serialization
+ *           of these data structures.  They are placed in the files,
+ *           and rarely (if ever) change.  Provision is currently made for
+ *           backward compatibility in reading from boxaa version 2.
+ *
+ *       (7) The serialization dependencies are as follows:
+ *               pixaa  :  pixa  :  boxa
+ *               boxaa  :  boxa
+ *           So, for example, pixaa and boxaa can be changed without
+ *           forcing a change in pixa or boxa.  However, if pixa is
+ *           changed, it forces a change in pixaa, and if boxa is
+ *           changed, if forces a change in the other three.
+ *           We define four version numbers:
+ *               PIXAA_VERSION_NUMBER
+ *               PIXA_VERSION_NUMBER
+ *               BOXAA_VERSION_NUMBER
+ *               BOXA_VERSION_NUMBER
+ * 
+ *-------------------------------------------------------------------------*/ + + + +/*-------------------------------------------------------------------------* + * Array of pix * + *-------------------------------------------------------------------------*/ + + /* Serialization for primary data structures */ +#define PIXAA_VERSION_NUMBER 2 /*!< Version for Pixaa serialization */ +#define PIXA_VERSION_NUMBER 2 /*!< Version for Pixa serialization */ +#define BOXA_VERSION_NUMBER 2 /*!< Version for Boxa serialization */ +#define BOXAA_VERSION_NUMBER 3 /*!< Version for Boxaa serialization */ + +/*! Array of pix */ +struct Pixa +{ + l_int32 n; /*!< number of Pix in ptr array */ + l_int32 nalloc; /*!< number of Pix ptrs allocated */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + struct Pix **pix; /*!< the array of ptrs to pix */ + struct Boxa *boxa; /*!< array of boxes */ +}; +typedef struct Pixa PIXA; + +/*! Array of arrays of pix */ +struct Pixaa +{ + l_int32 n; /*!< number of Pixa in ptr array */ + l_int32 nalloc; /*!< number of Pixa ptrs allocated */ + struct Pixa **pixa; /*!< array of ptrs to pixa */ + struct Boxa *boxa; /*!< array of boxes */ +}; +typedef struct Pixaa PIXAA; + + +/*-------------------------------------------------------------------------* + * Basic rectangle and rectangle arrays * + *-------------------------------------------------------------------------*/ + +/*! Basic rectangle */ +struct Box +{ + l_int32 x; /*!< left coordinate */ + l_int32 y; /*!< top coordinate */ + l_int32 w; /*!< box width */ + l_int32 h; /*!< box height */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ +}; +typedef struct Box BOX; + +/*! Array of Box */ +struct Boxa +{ + l_int32 n; /*!< number of box in ptr array */ + l_int32 nalloc; /*!< number of box ptrs allocated */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + struct Box **box; /*!< box ptr array */ +}; +typedef struct Boxa BOXA; + +/*! Array of Boxa */ +struct Boxaa +{ + l_int32 n; /*!< number of boxa in ptr array */ + l_int32 nalloc; /*!< number of boxa ptrs allocated */ + struct Boxa **boxa; /*!< boxa ptr array */ +}; +typedef struct Boxaa BOXAA; + + +/*-------------------------------------------------------------------------* + * Array of points * + *-------------------------------------------------------------------------*/ +#define PTA_VERSION_NUMBER 1 /*!< Version for Pta serialization */ + +/*! Array of points */ +struct Pta +{ + l_int32 n; /*!< actual number of pts */ + l_int32 nalloc; /*!< size of allocated arrays */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + l_float32 *x, *y; /*!< arrays of floats */ +}; +typedef struct Pta PTA; + + +/*-------------------------------------------------------------------------* + * Array of Pta * + *-------------------------------------------------------------------------*/ + +/*! Array of Pta */ +struct Ptaa +{ + l_int32 n; /*!< number of pta in ptr array */ + l_int32 nalloc; /*!< number of pta ptrs allocated */ + struct Pta **pta; /*!< pta ptr array */ +}; +typedef struct Ptaa PTAA; + + +/*-------------------------------------------------------------------------* + * Pix accumulator container * + *-------------------------------------------------------------------------*/ + +/*! Pix accumulator container */ +struct Pixacc +{ + l_int32 w; /*!< array width */ + l_int32 h; /*!< array height */ + l_int32 offset; /*!< used to allow negative */ + /*!< intermediate results */ + struct Pix *pix; /*!< the 32 bit accumulator pix */ +}; +typedef struct Pixacc PIXACC; + + +/*-------------------------------------------------------------------------* + * Pix tiling * + *-------------------------------------------------------------------------*/ + +/*! Pix tiling */ +struct PixTiling +{ + struct Pix *pix; /*!< input pix (a clone) */ + l_int32 nx; /*!< number of tiles horizontally */ + l_int32 ny; /*!< number of tiles vertically */ + l_int32 w; /*!< tile width */ + l_int32 h; /*!< tile height */ + l_int32 xoverlap; /*!< overlap on left and right */ + l_int32 yoverlap; /*!< overlap on top and bottom */ + l_int32 strip; /*!< strip for paint; default is TRUE */ +}; +typedef struct PixTiling PIXTILING; + + +/*-------------------------------------------------------------------------* + * FPix: pix with float array * + *-------------------------------------------------------------------------*/ +#define FPIX_VERSION_NUMBER 2 /*!< Version for FPix serialization */ + +/*! Pix with float array */ +struct FPix +{ + l_int32 w; /*!< width in pixels */ + l_int32 h; /*!< height in pixels */ + l_int32 wpl; /*!< 32-bit words/line */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + l_int32 xres; /*!< image res (ppi) in x direction */ + /*!< (use 0 if unknown) */ + l_int32 yres; /*!< image res (ppi) in y direction */ + /*!< (use 0 if unknown) */ + l_float32 *data; /*!< the float image data */ +}; +typedef struct FPix FPIX; + +/*! Array of FPix */ +struct FPixa +{ + l_int32 n; /*!< number of fpix in ptr array */ + l_int32 nalloc; /*!< number of fpix ptrs allocated */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + struct FPix **fpix; /*!< the array of ptrs to fpix */ +}; +typedef struct FPixa FPIXA; + + +/*-------------------------------------------------------------------------* + * DPix: pix with double array * + *-------------------------------------------------------------------------*/ +#define DPIX_VERSION_NUMBER 2 /*!< Version for DPix serialization */ + +/*! Pix with double array */ +struct DPix +{ + l_int32 w; /*!< width in pixels */ + l_int32 h; /*!< height in pixels */ + l_int32 wpl; /*!< 32-bit words/line */ + l_uint32 refcount; /*!< reference count (1 if no clones) */ + l_int32 xres; /*!< image res (ppi) in x direction */ + /*!< (use 0 if unknown) */ + l_int32 yres; /*!< image res (ppi) in y direction */ + /*!< (use 0 if unknown) */ + l_float64 *data; /*!< the double image data */ +}; +typedef struct DPix DPIX; + + +/*-------------------------------------------------------------------------* + * PixComp: compressed pix * + *-------------------------------------------------------------------------*/ + +/*! Compressed Pix */ +struct PixComp +{ + l_int32 w; /*!< width in pixels */ + l_int32 h; /*!< height in pixels */ + l_int32 d; /*!< depth in bits */ + l_int32 xres; /*!< image res (ppi) in x direction */ + /*!< (use 0 if unknown) */ + l_int32 yres; /*!< image res (ppi) in y direction */ + /*!< (use 0 if unknown) */ + l_int32 comptype; /*!< compressed format (IFF_TIFF_G4, */ + /*!< IFF_PNG, IFF_JFIF_JPEG) */ + char *text; /*!< text string associated with pix */ + l_int32 cmapflag; /*!< flag (1 for cmap, 0 otherwise) */ + l_uint8 *data; /*!< the compressed image data */ + size_t size; /*!< size of the data array */ +}; +typedef struct PixComp PIXC; + + +/*-------------------------------------------------------------------------* + * PixaComp: array of compressed pix * + *-------------------------------------------------------------------------*/ +#define PIXACOMP_VERSION_NUMBER 2 /*!< Version for PixaComp serialization */ + +/*! Array of compressed pix */ +struct PixaComp +{ + l_int32 n; /*!< number of PixComp in ptr array */ + l_int32 nalloc; /*!< number of PixComp ptrs allocated */ + l_int32 offset; /*!< indexing offset into ptr array */ + struct PixComp **pixc; /*!< the array of ptrs to PixComp */ + struct Boxa *boxa; /*!< array of boxes */ +}; +typedef struct PixaComp PIXAC; + + +/*-------------------------------------------------------------------------* + * Access and storage flags * + *-------------------------------------------------------------------------*/ +/* + *
+ *  For Pix, Box, Pta and Numa, there are 3 standard methods for handling
+ *  the retrieval or insertion of a struct:
+ *     (1) direct insertion (Don't do this if there is another handle
+ *                           somewhere to this same struct!)
+ *     (2) copy (Always safe, sets up a refcount of 1 on the new object.
+ *               Can be undesirable if very large, such as an image or
+ *               an array of images.)
+ *     (3) clone (Makes another handle to the same struct, and bumps the
+ *                refcount up by 1.  OK to use except in two situations:
+ *                (a) You change data through one of the handles but don't
+ *                    want those changes to be seen by the other handle.
+ *                (b) The application is multi-threaded.  Because the clone
+ *                    operation is not atomic (e.g., locked with a mutex),
+ *                    it is possible to end up with an incorrect ref count,
+ *                    causing either a memory leak or a crash.
+ *
+ *  For Pixa and Boxa, which are structs that hold an array of clonable
+ *  structs, there is an additional method:
+ *     (4) copy-clone (Makes a new higher-level struct with a refcount
+ *                     of 1, but clones all the structs in the array.)
+ *
+ *  Unlike the other structs, when retrieving a string from an Sarray,
+ *  you are allowed to get a handle without a copy or clone (i.e., the
+ *  string is not owned by the handle).  You must not either free the string
+ *  or insert it in some other struct that would own it.  Specifically,
+ *  for an Sarray, the copyflag for retrieval is either:
+ *         L_COPY or L_NOCOPY
+ *  and for insertion, the copyflag is either:
+ *         L_COPY or one of {L_INSERT , L_NOCOPY} (the latter are equivalent
+ *                                                 for insertion))
+ *  Typical patterns are:
+ *  (1) Reference a string in an Sarray with L_NOCOPY and insert a copy
+ *      of it in another Sarray with L_COPY.
+ *  (2) Copy a string from an Sarray with L_COPY and insert it in
+ *      another Sarray with L_INSERT (or L_NOCOPY).
+ *  In both cases, a copy is made and both Sarrays own their instance
+ *  of that string.
+ * 
+ */ + +/*! Object Access */ +enum { + L_NOCOPY = 0, /*!< do not copy the object; do not delete the ptr */ + L_INSERT = L_NOCOPY, /*!< stuff it in; do not copy or clone */ + L_COPY = 1, /*!< make/use a copy of the object */ + L_CLONE = 2, /*!< make/use clone (ref count) of the object */ + L_COPY_CLONE = 3 /*!< make a new array object (e.g., pixa) and fill */ + /*!< the array with clones (e.g., pix) */ +}; + + +/*----------------------------------------------------------------------------* + * Sort flags * + *----------------------------------------------------------------------------*/ +/*! Sort Mode */ +enum { + L_SHELL_SORT = 1, /*!< use shell sort */ + L_BIN_SORT = 2 /*!< use bin sort */ +}; + +/*! Sort Order */ +enum { + L_SORT_INCREASING = 1, /*!< sort in increasing order */ + L_SORT_DECREASING = 2 /*!< sort in decreasing order */ +}; + +/*! Sort Type */ +enum { + L_SORT_BY_X = 1, /*!< sort box or c.c. by left edge location */ + L_SORT_BY_Y = 2, /*!< sort box or c.c. by top edge location */ + L_SORT_BY_RIGHT = 3, /*!< sort box or c.c. by right edge location */ + L_SORT_BY_BOT = 4, /*!< sort box or c.c. by bot edge location */ + L_SORT_BY_WIDTH = 5, /*!< sort box or c.c. by width */ + L_SORT_BY_HEIGHT = 6, /*!< sort box or c.c. by height */ + L_SORT_BY_MIN_DIMENSION = 7, /*!< sort box or c.c. by min dimension */ + L_SORT_BY_MAX_DIMENSION = 8, /*!< sort box or c.c. by max dimension */ + L_SORT_BY_PERIMETER = 9, /*!< sort box or c.c. by perimeter */ + L_SORT_BY_AREA = 10, /*!< sort box or c.c. by area */ + L_SORT_BY_ASPECT_RATIO = 11 /*!< sort box or c.c. by width/height ratio */ +}; + + +/*---------------------------------------------------------------------------* + * Blend flags * + *---------------------------------------------------------------------------*/ +/*! Blend Types */ +enum { + L_BLEND_WITH_INVERSE = 1, /*!< add some of src inverse to itself */ + L_BLEND_TO_WHITE = 2, /*!< shift src colors towards white */ + L_BLEND_TO_BLACK = 3, /*!< shift src colors towards black */ + L_BLEND_GRAY = 4, /*!< blend src directly with blender */ + L_BLEND_GRAY_WITH_INVERSE = 5 /*!< add amount of src inverse to itself, */ + /*!< based on blender pix value */ +}; + +/*! Paint Selection */ +enum { + L_PAINT_LIGHT = 1, /*!< colorize non-black pixels */ + L_PAINT_DARK = 2 /*!< colorize non-white pixels */ +}; + + +/*-------------------------------------------------------------------------* + * Graphics pixel setting * + *-------------------------------------------------------------------------*/ +/*! Pixel Setting */ +enum { + L_SET_PIXELS = 1, /*!< set all bits in each pixel to 1 */ + L_CLEAR_PIXELS = 2, /*!< set all bits in each pixel to 0 */ + L_FLIP_PIXELS = 3 /*!< flip all bits in each pixel */ +}; + + +/*-------------------------------------------------------------------------* + * Size and location filter flags * + *-------------------------------------------------------------------------*/ +/*! Size Comparison */ +enum { + L_SELECT_IF_LT = 1, /*!< save if value is less than threshold */ + L_SELECT_IF_GT = 2, /*!< save if value is more than threshold */ + L_SELECT_IF_LTE = 3, /*!< save if value is <= to the threshold */ + L_SELECT_IF_GTE = 4 /*!< save if value is >= to the threshold */ +}; + +/*! Size Selection */ +enum { + L_SELECT_BY_WIDTH = 1, /*!< select by width; 1 bpp */ + L_SELECT_BY_HEIGHT = 2, /*!< select by height; 1 bpp */ + L_SELECT_BY_MAX_DIMENSION = 3, /*!< select by max of width and */ + /*!< height; 1 bpp */ + L_SELECT_BY_AREA = 4, /*!< select by foreground area; 1 bpp */ + L_SELECT_BY_PERIMETER = 5 /*!< select by perimeter; 1 bpp */ +}; + +/*! Location Filter */ +enum { + L_SELECT_WIDTH = 1, /*!< width must satisfy constraint */ + L_SELECT_HEIGHT = 2, /*!< height must satisfy constraint */ + L_SELECT_XVAL = 3, /*!< x value must satisfy constraint */ + L_SELECT_YVAL = 4, /*!< y value must satisfy constraint */ + L_SELECT_IF_EITHER = 5, /*!< either width or height (or xval */ + /*!< or yval) can satisfy constraint */ + L_SELECT_IF_BOTH = 6 /*!< both width and height (or xval */ + /*!< and yval must satisfy constraint */ +}; + +/*! Boxa Check */ +enum { + L_CHECK_WIDTH = 1, /*!< check and possibly modify width */ + L_CHECK_HEIGHT = 2, /*!< check and possibly modify height */ + L_CHECK_BOTH = 3 /*!< check and possibly modify both */ +}; + + +/*-------------------------------------------------------------------------* + * Color component selection flags * + *-------------------------------------------------------------------------*/ +/*! Color Selection */ +enum { + L_SELECT_RED = 1, /*!< use red component */ + L_SELECT_GREEN = 2, /*!< use green component */ + L_SELECT_BLUE = 3, /*!< use blue component */ + L_SELECT_MIN = 4, /*!< use min color component */ + L_SELECT_MAX = 5, /*!< use max color component */ + L_SELECT_AVERAGE = 6, /*!< use average of color components */ + L_SELECT_HUE = 7, /*!< use hue value (in HSV color space) */ + L_SELECT_SATURATION = 8 /*!< use saturation value (in HSV space) */ +}; + + +/*-------------------------------------------------------------------------* + * 16-bit conversion flags * + *-------------------------------------------------------------------------*/ +/*! 16-bit Conversion */ +enum { + L_LS_BYTE = 1, /*!< use LSB */ + L_MS_BYTE = 2, /*!< use MSB */ + L_AUTO_BYTE = 3, /*!< use LSB if max(val) < 256; else MSB */ + L_CLIP_TO_FF = 4, /*!< use max(val, 255) */ + L_LS_TWO_BYTES = 5, /*!< use two LSB */ + L_MS_TWO_BYTES = 6, /*!< use two MSB */ + L_CLIP_TO_FFFF = 7 /*!< use max(val, 65535) */ +}; + + +/*-------------------------------------------------------------------------* + * Rotate and shear flags * + *-------------------------------------------------------------------------*/ +/*! Rotation Type */ +enum { + L_ROTATE_AREA_MAP = 1, /*!< use area map rotation, if possible */ + L_ROTATE_SHEAR = 2, /*!< use shear rotation */ + L_ROTATE_SAMPLING = 3 /*!< use sampling */ +}; + +/*! Background Color */ +enum { + L_BRING_IN_WHITE = 1, /*!< bring in white pixels from the outside */ + L_BRING_IN_BLACK = 2 /*!< bring in black pixels from the outside */ +}; + +/*! Shear Point */ +enum { + L_SHEAR_ABOUT_CORNER = 1, /*!< shear image about UL corner */ + L_SHEAR_ABOUT_CENTER = 2 /*!< shear image about center */ +}; + + +/*-------------------------------------------------------------------------* + * Affine transform order flags * + *-------------------------------------------------------------------------*/ +/*! Affine Transform Order */ +enum { + L_TR_SC_RO = 1, /*!< translate, scale, rotate */ + L_SC_RO_TR = 2, /*!< scale, rotate, translate */ + L_RO_TR_SC = 3, /*!< rotate, translate, scale */ + L_TR_RO_SC = 4, /*!< translate, rotate, scale */ + L_RO_SC_TR = 5, /*!< rotate, scale, translate */ + L_SC_TR_RO = 6 /*!< scale, translate, rotate */ +}; + + +/*-------------------------------------------------------------------------* + * Grayscale filling flags * + *-------------------------------------------------------------------------*/ +/*! Grayscale Fill */ +enum { + L_FILL_WHITE = 1, /*!< fill white pixels (e.g, in fg map) */ + L_FILL_BLACK = 2 /*!< fill black pixels (e.g., in bg map) */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for setting to white or black * + *-------------------------------------------------------------------------*/ +/*! BlackWhite Set */ +enum { + L_SET_WHITE = 1, /*!< set pixels to white */ + L_SET_BLACK = 2 /*!< set pixels to black */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for getting white or black value * + *-------------------------------------------------------------------------*/ +/*! BlackWhite Get */ +enum { + L_GET_WHITE_VAL = 1, /*!< get white pixel value */ + L_GET_BLACK_VAL = 2 /*!< get black pixel value */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for 8 bit and 16 bit pixel sums * + *-------------------------------------------------------------------------*/ +/*! BlackWhite Sum */ +enum { + L_WHITE_IS_MAX = 1, /*!< white pixels are 0xff or 0xffff; black are 0 */ + L_BLACK_IS_MAX = 2 /*!< black pixels are 0xff or 0xffff; white are 0 */ +}; + + +/*-------------------------------------------------------------------------* + * Dither parameters * + * If within this grayscale distance from black or white, * + * do not propagate excess or deficit to neighboring pixels. * + *-------------------------------------------------------------------------*/ +/*! Dither Distance */ +enum { + DEFAULT_CLIP_LOWER_1 = 10, /*!< dist to black with no prop; 1 bpp */ + DEFAULT_CLIP_UPPER_1 = 10, /*!< dist to black with no prop; 1 bpp */ + DEFAULT_CLIP_LOWER_2 = 5, /*!< dist to black with no prop; 2 bpp */ + DEFAULT_CLIP_UPPER_2 = 5 /*!< dist to black with no prop; 2 bpp */ +}; + + +/*-------------------------------------------------------------------------* + * Distance type flags * + *-------------------------------------------------------------------------*/ +/*! Distance Type */ +enum { + L_MANHATTAN_DISTANCE = 1, /*!< L1 distance (e.g., in color space) */ + L_EUCLIDEAN_DISTANCE = 2 /*!< L2 distance */ +}; + + +/*-------------------------------------------------------------------------* + * Distance Value flags * + *-------------------------------------------------------------------------*/ +/*! Distance Value */ +enum { + L_NEGATIVE = 1, /*!< values < 0 */ + L_NON_NEGATIVE = 2, /*!< values >= 0 */ + L_POSITIVE = 3, /*!< values > 0 */ + L_NON_POSITIVE = 4, /*!< values <= 0 */ + L_ZERO = 5, /*!< values = 0 */ + L_ALL = 6 /*!< all values */ +}; + + +/*-------------------------------------------------------------------------* + * Statistical measures * + *-------------------------------------------------------------------------*/ +/*! Stats Type */ +enum { + L_MEAN_ABSVAL = 1, /*!< average of abs values */ + L_MEDIAN_VAL = 2, /*!< median value of set */ + L_MODE_VAL = 3, /*!< mode value of set */ + L_MODE_COUNT = 4, /*!< mode count of set */ + L_ROOT_MEAN_SQUARE = 5, /*!< rms of values */ + L_STANDARD_DEVIATION = 6, /*!< standard deviation from mean */ + L_VARIANCE = 7 /*!< variance of values */ +}; + + +/*-------------------------------------------------------------------------* + * Set index selection flags * + *-------------------------------------------------------------------------*/ +/*! Index Selection */ +enum { + L_CHOOSE_CONSECUTIVE = 1, /*!< select 'n' consecutive */ + L_CHOOSE_SKIP_BY = 2 /*!< select at intervals of 'n' */ +}; + + +/*-------------------------------------------------------------------------* + * Text orientation flags * + *-------------------------------------------------------------------------*/ +/*! Text Orientation */ +enum { + L_TEXT_ORIENT_UNKNOWN = 0, /*!< low confidence on text orientation */ + L_TEXT_ORIENT_UP = 1, /*!< portrait, text rightside-up */ + L_TEXT_ORIENT_LEFT = 2, /*!< landscape, text up to left */ + L_TEXT_ORIENT_DOWN = 3, /*!< portrait, text upside-down */ + L_TEXT_ORIENT_RIGHT = 4 /*!< landscape, text up to right */ +}; + + +/*-------------------------------------------------------------------------* + * Edge orientation flags * + *-------------------------------------------------------------------------*/ +/*! Edge Orientation */ +enum { + L_HORIZONTAL_EDGES = 0, /*!< filters for horizontal edges */ + L_VERTICAL_EDGES = 1, /*!< filters for vertical edges */ + L_ALL_EDGES = 2 /*!< filters for all edges */ +}; + + +/*-------------------------------------------------------------------------* + * Line orientation flags * + *-------------------------------------------------------------------------*/ +/*! Line Orientation */ +enum { + L_HORIZONTAL_LINE = 0, /*!< horizontal line */ + L_POS_SLOPE_LINE = 1, /*!< 45 degree line with positive slope */ + L_VERTICAL_LINE = 2, /*!< vertical line */ + L_NEG_SLOPE_LINE = 3, /*!< 45 degree line with negative slope */ + L_OBLIQUE_LINE = 4 /*!< neither horizontal nor vertical */ +}; + + +/*-------------------------------------------------------------------------* + * Image orientation flags * + *-------------------------------------------------------------------------*/ +/*! Image Orientation */ +enum { + L_PORTRAIT_MODE = 0, /*!< typical: page is viewed with height > width */ + L_LANDSCAPE_MODE = 1 /*!< page is viewed at 90 deg to portrait mode */ +}; + + +/*-------------------------------------------------------------------------* + * Scan direction flags * + *-------------------------------------------------------------------------*/ +/*! Scan Direction */ +enum { + L_FROM_LEFT = 0, /*!< scan from left */ + L_FROM_RIGHT = 1, /*!< scan from right */ + L_FROM_TOP = 2, /*!< scan from top */ + L_FROM_BOT = 3, /*!< scan from bottom */ + L_SCAN_NEGATIVE = 4, /*!< scan in negative direction */ + L_SCAN_POSITIVE = 5, /*!< scan in positive direction */ + L_SCAN_BOTH = 6, /*!< scan in both directions */ + L_SCAN_HORIZONTAL = 7, /*!< horizontal scan (direction unimportant) */ + L_SCAN_VERTICAL = 8 /*!< vertical scan (direction unimportant) */ +}; + + +/*-------------------------------------------------------------------------* + * Box size adjustment and location flags * + *-------------------------------------------------------------------------*/ +/*! Box Adjustment */ +enum { + L_ADJUST_SKIP = 0, /*!< do not adjust */ + L_ADJUST_LEFT = 1, /*!< adjust left edge */ + L_ADJUST_RIGHT = 2, /*!< adjust right edge */ + L_ADJUST_LEFT_AND_RIGHT = 3, /*!< adjust both left and right edges */ + L_ADJUST_TOP = 4, /*!< adjust top edge */ + L_ADJUST_BOT = 5, /*!< adjust bottom edge */ + L_ADJUST_TOP_AND_BOT = 6, /*!< adjust both top and bottom edges */ + L_ADJUST_CHOOSE_MIN = 7, /*!< choose the min median value */ + L_ADJUST_CHOOSE_MAX = 8, /*!< choose the max median value */ + L_SET_LEFT = 9, /*!< set left side to a given value */ + L_SET_RIGHT = 10, /*!< set right side to a given value */ + L_SET_TOP = 11, /*!< set top side to a given value */ + L_SET_BOT = 12, /*!< set bottom side to a given value */ + L_GET_LEFT = 13, /*!< get left side location */ + L_GET_RIGHT = 14, /*!< get right side location */ + L_GET_TOP = 15, /*!< get top side location */ + L_GET_BOT = 16 /*!< get bottom side location */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for modifying box boundaries using a second box * + *-------------------------------------------------------------------------*/ +/*! Box Boundary Mod */ +enum { + L_USE_MINSIZE = 1, /*!< use boundaries giving min size */ + L_USE_MAXSIZE = 2, /*!< use boundaries giving max size */ + L_SUB_ON_LOC_DIFF = 3, /*!< modify boundary if big location diff */ + L_SUB_ON_SIZE_DIFF = 4, /*!< modify boundary if big size diff */ + L_USE_CAPPED_MIN = 5, /*!< modify boundary with capped min */ + L_USE_CAPPED_MAX = 6 /*!< modify boundary with capped max */ +}; + + +/*-------------------------------------------------------------------------* + * Handling overlapping bounding boxes in boxa * + *-------------------------------------------------------------------------*/ +/*! Box Overlap Mod */ +enum { + L_COMBINE = 1, /*!< resize to bounding region; remove smaller */ + L_REMOVE_SMALL = 2 /*!< only remove smaller */ +}; + + +/*-------------------------------------------------------------------------* + * Selecting or making a box from two (intersecting) boxes * + *-------------------------------------------------------------------------*/ +/*! Box Combine or Select */ +enum { + L_GEOMETRIC_UNION = 1, /*!< use union of two boxes */ + L_GEOMETRIC_INTERSECTION = 2, /*!< use intersection of two boxes */ + L_LARGEST_AREA = 3, /*!< use box with largest area */ + L_SMALLEST_AREA = 4 /*!< use box with smallest area */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for replacing invalid boxes * + *-------------------------------------------------------------------------*/ +/*! Box Replacement */ +enum { + L_USE_ALL_BOXES = 1, /*!< consider all boxes in the sequence */ + L_USE_SAME_PARITY_BOXES = 2 /*!< consider boxes with the same parity */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for box corners * + *-------------------------------------------------------------------------*/ +/*! Box Corners */ +enum { + L_UPPER_LEFT = 1, /*!< UL corner */ + L_UPPER_RIGHT = 2, /*!< UR corner */ + L_LOWER_LEFT = 3, /*!< LL corner */ + L_LOWER_RIGHT = 4 /*!< LR corner */ +}; + + +/*-------------------------------------------------------------------------* + * Horizontal warp * + *-------------------------------------------------------------------------*/ +/*! Horiz Warp Stretch */ +enum { + L_WARP_TO_LEFT = 1, /*!< increasing stretch or contraction to left */ + L_WARP_TO_RIGHT = 2 /*!< increasing stretch or contraction to right */ +}; + +/*! Horiz Warp Mode */ +enum { + L_LINEAR_WARP = 1, /*!< stretch or contraction grows linearly */ + L_QUADRATIC_WARP = 2 /*!< stretch or contraction grows quadratically */ +}; + + +/*-------------------------------------------------------------------------* + * Pixel selection for resampling * + *-------------------------------------------------------------------------*/ +/*! Pixel Selection */ +enum { + L_INTERPOLATED = 1, /*!< linear interpolation from src pixels */ + L_SAMPLED = 2 /*!< nearest src pixel sampling only */ +}; + + +/*-------------------------------------------------------------------------* + * Thinning flags * + *-------------------------------------------------------------------------*/ +/*! Thinning Polarity */ +enum { + L_THIN_FG = 1, /*!< thin foreground of 1 bpp image */ + L_THIN_BG = 2 /*!< thin background of 1 bpp image */ +}; + + +/*-------------------------------------------------------------------------* + * Runlength flags * + *-------------------------------------------------------------------------*/ +/*! Runlength Direction */ +enum { + L_HORIZONTAL_RUNS = 0, /*!< determine runlengths of horizontal runs */ + L_VERTICAL_RUNS = 1 /*!< determine runlengths of vertical runs */ +}; + + +/*-------------------------------------------------------------------------* + * Edge filter flags * + *-------------------------------------------------------------------------*/ +/*! Edge Filter */ +enum { + L_SOBEL_EDGE = 1, /*!< Sobel edge filter */ + L_TWO_SIDED_EDGE = 2 /*!< Two-sided edge filter */ +}; + + +/*-------------------------------------------------------------------------* + * Subpixel color component ordering in LCD display * + *-------------------------------------------------------------------------*/ +/*! Subpixel Color Order */ +enum { + L_SUBPIXEL_ORDER_RGB = 1, /*!< sensor order left-to-right RGB */ + L_SUBPIXEL_ORDER_BGR = 2, /*!< sensor order left-to-right BGR */ + L_SUBPIXEL_ORDER_VRGB = 3, /*!< sensor order top-to-bottom RGB */ + L_SUBPIXEL_ORDER_VBGR = 4 /*!< sensor order top-to-bottom BGR */ +}; + + +/*-------------------------------------------------------------------------* + * HSV histogram flags * + *-------------------------------------------------------------------------*/ +/*! HSV Histogram */ +enum { + L_HS_HISTO = 1, /*!< Use hue-saturation histogram */ + L_HV_HISTO = 2, /*!< Use hue-value histogram */ + L_SV_HISTO = 3 /*!< Use saturation-value histogram */ +}; + + +/*-------------------------------------------------------------------------* + * HSV Region flags (inclusion, exclusion) * + *-------------------------------------------------------------------------*/ +/*! HSV Region */ +enum { + L_INCLUDE_REGION = 1, /*!< Use pixels with specified HSV region */ + L_EXCLUDE_REGION = 2 /*!< Use pixels outside HSV region */ +}; + + +/*-------------------------------------------------------------------------* + * Location flags for adding text to a pix * + *-------------------------------------------------------------------------*/ +/*! Add Text Location */ +enum { + L_ADD_ABOVE = 1, /*!< Add text above the image */ + L_ADD_BELOW = 2, /*!< Add text below the image */ + L_ADD_LEFT = 3, /*!< Add text to the left of the image */ + L_ADD_RIGHT = 4, /*!< Add text to the right of the image */ + L_ADD_AT_TOP = 5, /*!< Add text over the top of the image */ + L_ADD_AT_BOT = 6, /*!< Add text over the bottom of the image */ + L_ADD_AT_LEFT = 7, /*!< Add text over left side of the image */ + L_ADD_AT_RIGHT = 8 /*!< Add text over right side of the image */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for plotting on a pix * + *-------------------------------------------------------------------------*/ +/*! Pix Plot */ +enum { + L_PLOT_AT_TOP = 1, /*!< Plot horizontally at top */ + L_PLOT_AT_MID_HORIZ = 2, /*!< Plot horizontally at middle */ + L_PLOT_AT_BOT = 3, /*!< Plot horizontally at bottom */ + L_PLOT_AT_LEFT = 4, /*!< Plot vertically at left */ + L_PLOT_AT_MID_VERT = 5, /*!< Plot vertically at middle */ + L_PLOT_AT_RIGHT = 6 /*!< Plot vertically at right */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for making simple masks * + *-------------------------------------------------------------------------*/ +/*! Mask Generation */ +enum { + L_USE_INNER = 1, /*!< Select the interior part */ + L_USE_OUTER = 2 /*!< Select the outer part (e.g., a frame) */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for selecting display program * + *-------------------------------------------------------------------------*/ +/*! Display Program */ +enum { + L_DISPLAY_WITH_XZGV = 1, /*!< Use xzgv with pixDisplay() */ + L_DISPLAY_WITH_XLI = 2, /*!< Use xli with pixDisplay() */ + L_DISPLAY_WITH_XV = 3, /*!< Use xv with pixDisplay() */ + L_DISPLAY_WITH_IV = 4, /*!< Use irfvanview (win) with pixDisplay() */ + L_DISPLAY_WITH_OPEN = 5 /*!< Use open (apple) with pixDisplay() */ +}; + +/*-------------------------------------------------------------------------* + * Flag(s) used in the 'special' pix field for non-default operations * + * - 0 is default for chroma sampling in jpeg * + * - 10-19 are used for zlib compression in png write * + * - 4 and 8 are used for specifying connectivity in labelling * + *-------------------------------------------------------------------------*/ +/*! Flags used in Pix::special */ +enum { + L_NO_CHROMA_SAMPLING_JPEG = 1 /*!< Write full resolution chroma */ +}; + + +/*-------------------------------------------------------------------------* + * Handling negative values in conversion to unsigned int * + *-------------------------------------------------------------------------*/ +/*! Negative Value */ +enum { + L_CLIP_TO_ZERO = 1, /*!< Clip negative values to 0 */ + L_TAKE_ABSVAL = 2 /*!< Convert to positive using L_ABS() */ +}; + + +/*-------------------------------------------------------------------------* + * Relative to zero flags * + *-------------------------------------------------------------------------*/ +/*! Relative To Zero */ +enum { + L_LESS_THAN_ZERO = 1, /*!< Choose values less than zero */ + L_EQUAL_TO_ZERO = 2, /*!< Choose values equal to zero */ + L_GREATER_THAN_ZERO = 3 /*!< Choose values greater than zero */ +}; + + +/*-------------------------------------------------------------------------* + * Flags for adding or removing trailing slash from string * + *-------------------------------------------------------------------------*/ +/*! Trailing Slash */ +enum { + L_ADD_TRAIL_SLASH = 1, /*!< Add trailing slash to string */ + L_REMOVE_TRAIL_SLASH = 2 /*!< Remove trailing slash from string */ +}; + + +/*-------------------------------------------------------------------------* + * Pix allocator and deallocator function types * + *-------------------------------------------------------------------------*/ +/*! Allocator function type */ +typedef void *(*alloc_fn)(size_t); + +/*! Deallocator function type */ +typedef void (*dealloc_fn)(void *); + + +#endif /* LEPTONICA_PIX_H */ diff --git a/3rdparty/hgOCR/leptonica/pix1.c b/3rdparty/hgOCR/leptonica/pix1.c new file mode 100644 index 00000000..ca4fe9b2 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix1.c @@ -0,0 +1,1877 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pix1.c + *
+ *
+ *    The pixN.c {N = 1,2,3,4,5} files are sorted by the type of operation.
+ *    The primary functions in these files are:
+ *
+ *        pix1.c: constructors, destructors and field accessors
+ *        pix2.c: pixel poking of image, pad and border pixels
+ *        pix3.c: masking and logical ops, counting, mirrored tiling
+ *        pix4.c: histograms, statistics, fg/bg estimation
+ *        pix5.c: property measurements, rectangle extraction
+ *
+ *
+ *    This file has the basic constructors, destructors and field accessors
+ *
+ *    Pix memory management (allows custom allocator and deallocator)
+ *          static void  *pix_malloc()
+ *          static void   pix_free()
+ *          void          setPixMemoryManager()
+ *
+ *    Pix creation
+ *          PIX          *pixCreate()
+ *          PIX          *pixCreateNoInit()
+ *          PIX          *pixCreateTemplate()
+ *          PIX          *pixCreateTemplateNoInit()
+ *          PIX          *pixCreateHeader()
+ *          PIX          *pixClone()
+ *
+ *    Pix destruction
+ *          void          pixDestroy()
+ *          static void   pixFree()
+ *
+ *    Pix copy
+ *          PIX          *pixCopy()
+ *          l_int32       pixResizeImageData()
+ *          l_int32       pixCopyColormap()
+ *          l_int32       pixSizesEqual()
+ *          l_int32       pixTransferAllData()
+ *          l_int32       pixSwapAndDestroy()
+ *
+ *    Pix accessors
+ *          l_int32       pixGetWidth()
+ *          l_int32       pixSetWidth()
+ *          l_int32       pixGetHeight()
+ *          l_int32       pixSetHeight()
+ *          l_int32       pixGetDepth()
+ *          l_int32       pixSetDepth()
+ *          l_int32       pixGetDimensions()
+ *          l_int32       pixSetDimensions()
+ *          l_int32       pixCopyDimensions()
+ *          l_int32       pixGetSpp()
+ *          l_int32       pixSetSpp()
+ *          l_int32       pixCopySpp()
+ *          l_int32       pixGetWpl()
+ *          l_int32       pixSetWpl()
+ *          l_int32       pixGetRefcount()
+ *          l_int32       pixChangeRefcount()
+ *          l_uint32      pixGetXRes()
+ *          l_int32       pixSetXRes()
+ *          l_uint32      pixGetYRes()
+ *          l_int32       pixSetYRes()
+ *          l_int32       pixGetResolution()
+ *          l_int32       pixSetResolution()
+ *          l_int32       pixCopyResolution()
+ *          l_int32       pixScaleResolution()
+ *          l_int32       pixGetInputFormat()
+ *          l_int32       pixSetInputFormat()
+ *          l_int32       pixCopyInputFormat()
+ *          l_int32       pixSetSpecial()
+ *          char         *pixGetText()
+ *          l_int32       pixSetText()
+ *          l_int32       pixAddText()
+ *          l_int32       pixCopyText()
+ *          PIXCMAP      *pixGetColormap()
+ *          l_int32       pixSetColormap()
+ *          l_int32       pixDestroyColormap()
+ *          l_uint32     *pixGetData()
+ *          l_int32       pixSetData()
+ *          l_uint32     *pixExtractData()
+ *          l_int32       pixFreeData()
+ *
+ *    Pix line ptrs
+ *          void        **pixGetLinePtrs()
+ *
+ *    Pix debug
+ *          l_int32       pixPrintStreamInfo()
+ *
+ *
+ *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *      Important notes on direct management of pix image data
+ *  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ *
+ *  Custom allocator and deallocator
+ *  --------------------------------
+ *
+ *  At the lowest level, you can specify the function that does the
+ *  allocation and deallocation of the data field in the pix.
+ *  By default, this is malloc and free.  However, by calling
+ *  setPixMemoryManager(), custom functions can be substituted.
+ *  When using this, keep two things in mind:
+ *
+ *   (1) Call setPixMemoryManager() before any pix have been allocated
+ *   (2) Destroy all pix as usual, in order to prevent leaks.
+ *
+ *  In pixalloc.c, we provide an example custom allocator and deallocator.
+ *  To use it, you must call pmsCreate() before any pix have been allocated
+ *  and pmsDestroy() at the end after all pix have been destroyed.
+ *
+ *
+ *  Direct manipulation of the pix data field
+ *  -----------------------------------------
+ *
+ *  Memory management of the (image) data field in the pix is
+ *  handled differently from that in the colormap or text fields.
+ *  For colormap and text, the functions pixSetColormap() and
+ *  pixSetText() remove the existing heap data and insert the
+ *  new data.  For the image data, pixSetData() just reassigns the
+ *  data field; any existing data will be lost if there isn't
+ *  another handle for it.
+ *
+ *  Why is pixSetData() limited in this way?  Because the image
+ *  data can be very large, we need flexible ways to handle it,
+ *  particularly when you want to re-use the data in a different
+ *  context without making a copy.  Here are some different
+ *  things you might want to do:
+ *
+ *  (1) Use pixCopy(pixd, pixs) where pixd is not the same size
+ *      as pixs.  This will remove the data in pixd, allocate a
+ *      new data field in pixd, and copy the data from pixs, leaving
+ *      pixs unchanged.
+ *
+ *  (2) Use pixTransferAllData(pixd, &pixs, ...) to transfer the
+ *      data from pixs to pixd without making a copy of it.  If
+ *      pixs is not cloned, this will do the transfer and destroy pixs.
+ *      But if the refcount of pixs is greater than 1, it just copies
+ *      the data and decrements the ref count.
+ *
+ *  (3) Use pixSwapAndDestroy(pixd, &pixs) to replace pixs by an
+ *      existing pixd.  This is similar to pixTransferAllData(), but
+ *      simpler, in that it never makes any copies and if pixs is
+ *      cloned, the other references are not changed by this operation.
+ *
+ *  (4) Use pixExtractData() to extract the image data from the pix
+ *      without copying if possible.  This could be used, for example,
+ *      to convert from a pix to some other data structure with minimal
+ *      heap allocation.  After the data is extracated, the pixels can
+ *      be munged and used in another context.  However, the danger
+ *      here is that the pix might have a refcount > 1, in which case
+ *      a copy of the data must be made and the input pix left unchanged.
+ *      If there are no clones, the image data can be extracted without
+ *      a copy, and the data ptr in the pix must be nulled before
+ *      destroying it because the pix will no longer 'own' the data.
+ *
+ *  We have provided accessors and functions here that should be
+ *  sufficient so that you can do anything you want without
+ *  explicitly referencing any of the pix member fields.
+ *
+ *  However, to avoid memory smashes and leaks when doing special operations
+ *  on the pix data field, look carefully at the behavior of the image
+ *  data accessors and keep in mind that when you invoke pixDestroy(),
+ *  the pix considers itself the owner of all its heap data.
+ * 
+ */ + +#include +#include "allheaders.h" + +static void pixFree(PIX *pix); + + +/*-------------------------------------------------------------------------* + * Pix Memory Management * + * * + * These functions give you the freedom to specify at compile or run * + * time the allocator and deallocator to be used for pix. It has no * + * effect on memory management for other data structs, which are * + * controlled by the #defines in environ.h. Likewise, the #defines * + * in environ.h have no effect on the pix memory management. * + * The default functions are malloc and free. Use setPixMemoryManager() * + * to specify other functions to use. * + *-------------------------------------------------------------------------*/ + +/*! Pix memory manager */ + /* + *
+     * Notes:
+     *      (1) The allocator and deallocator function types,
+     *          alloc_fn and dealloc_fn, are defined in pix.h.
+     * 
+ */ +struct PixMemoryManager +{ + alloc_fn allocator; + dealloc_fn deallocator; +}; + +/*! Default Pix memory manager */ +static struct PixMemoryManager pix_mem_manager = { + &malloc, + &free +}; + +static void * +pix_malloc(size_t size) +{ +#ifndef _MSC_VER + return (*pix_mem_manager.allocator)(size); +#else /* _MSC_VER */ + /* Under MSVC++, pix_mem_manager is initialized after a call + * to pix_malloc. Just ignore the custom allocator feature. */ + return malloc(size); +#endif /* _MSC_VER */ +} + +static void +pix_free(void *ptr) +{ +#ifndef _MSC_VER + (*pix_mem_manager.deallocator)(ptr); + return; +#else /* _MSC_VER */ + /* Under MSVC++, pix_mem_manager is initialized after a call + * to pix_malloc. Just ignore the custom allocator feature. */ + free(ptr); + return; +#endif /* _MSC_VER */ +} + +/*! + * \brief setPixMemoryManager() + * + * \param[in] allocator [optional] use NULL to skip + * \param[in] deallocator [optional] use NULL to skip + * \return void + * + *
+ * Notes:
+ *      (1) Use this to change the alloc and/or dealloc functions;
+ *          e.g., setPixMemoryManager(my_malloc, my_free).
+ *      (2) The C99 standard (section 6.7.5.3, par. 8) says:
+ *            A declaration of a parameter as "function returning type"
+ *            shall be adjusted to "pointer to function returning type"
+ *          so that it can be in either of these two forms:
+ *            (a) type (function-ptr(type, ...))
+ *            (b) type ((*function-ptr)(type, ...))
+ *          because form (a) is implictly converted to form (b), as in the
+ *          definition of struct PixMemoryManager above.  So, for example,
+ *          we should be able to declare either of these:
+ *            (a) void *(allocator(size_t))
+ *            (b) void *((*allocator)(size_t))
+ *          However, MSVC++ only accepts the second version.
+ * 
+ */ +void +setPixMemoryManager(alloc_fn allocator, + dealloc_fn deallocator) +{ + if (allocator) pix_mem_manager.allocator = allocator; + if (deallocator) pix_mem_manager.deallocator = deallocator; + return; +} + + +/*--------------------------------------------------------------------* + * Pix Creation * + *--------------------------------------------------------------------*/ +/*! + * \brief pixCreate() + * + * \param[in] width, height, depth + * \return pixd with data allocated and initialized to 0, + * or NULL on error + */ +PIX * +pixCreate(l_int32 width, + l_int32 height, + l_int32 depth) +{ +PIX *pixd; + + PROCNAME("pixCreate"); + + if ((pixd = pixCreateNoInit(width, height, depth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + memset(pixd->data, 0, 4LL * pixd->wpl * pixd->h); + return pixd; +} + + +/*! + * \brief pixCreateNoInit() + * + * \param[in] width, height, depth + * \return pixd with data allocated but not initialized, + * or NULL on error + * + *
+ * Notes:
+ *      (1) Must set pad bits to avoid reading uninitialized data, because
+ *          some optimized routines (e.g., pixConnComp()) read from pad bits.
+ * 
+ */ +PIX * +pixCreateNoInit(l_int32 width, + l_int32 height, + l_int32 depth) +{ +l_int32 wpl; +PIX *pixd; +l_uint32 *data; + + PROCNAME("pixCreateNoInit"); + if ((pixd = pixCreateHeader(width, height, depth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + wpl = pixGetWpl(pixd); + if ((data = (l_uint32 *)pix_malloc(4LL * wpl * height)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pix_malloc fail for data", procName, NULL); + } + pixSetData(pixd, data); + pixSetPadBits(pixd, 0); + return pixd; +} + + +/*! + * \brief pixCreateTemplate() + * + * \param[in] pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a Pix of the same size as the input Pix, with the
+ *          data array allocated and initialized to 0.
+ *      (2) Copies the other fields, including colormap if it exists.
+ * 
+ */ +PIX * +pixCreateTemplate(const PIX *pixs) +{ +PIX *pixd; + + PROCNAME("pixCreateTemplate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + memset(pixd->data, 0, 4LL * pixd->wpl * pixd->h); + return pixd; +} + + +/*! + * \brief pixCreateTemplateNoInit() + * + * \param[in] pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Makes a Pix of the same size as the input Pix, with
+ *          the data array allocated but not initialized to 0.
+ *      (2) Copies the other fields, including colormap if it exists.
+ * 
+ */ +PIX * +pixCreateTemplateNoInit(const PIX *pixs) +{ +l_int32 w, h, d; +PIX *pixd; + + PROCNAME("pixCreateTemplateNoInit"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &d); + if ((pixd = pixCreateNoInit(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopySpp(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixCreateHeader() + * + * \param[in] width, height, depth + * \return pixd with no data allocated, or NULL on error + * + *
+ * Notes:
+ *      (1) It is assumed that all 32 bit pix have 3 spp.  If there is
+ *          a valid alpha channel, this will be set to 4 spp later.
+ *      (2) All pixCreate*() functions call pixCreateHeader().
+            If the number of bytes to be allocated is larger than the
+ *          maximum value in an int32, we can get overflow, resulting
+ *          in a smaller amount of memory actually being allocated.
+ *          Later, an attempt to access memory that wasn't allocated will
+ *          cause a crash.  So to avoid crashing a program (or worse)
+ *          with bad (or malicious) input, we limit the requested
+ *          allocation of image data in a typesafe way.
+ * 
+ */ +PIX * +pixCreateHeader(l_int32 width, + l_int32 height, + l_int32 depth) +{ +l_int32 wpl; +l_uint64 wpl64, bignum; +PIX *pixd; + + PROCNAME("pixCreateHeader"); + + if ((depth != 1) && (depth != 2) && (depth != 4) && (depth != 8) + && (depth != 16) && (depth != 24) && (depth != 32)) + return (PIX *)ERROR_PTR("depth must be {1, 2, 4, 8, 16, 24, 32}", + procName, NULL); + if (width <= 0) + return (PIX *)ERROR_PTR("width must be > 0", procName, NULL); + if (height <= 0) + return (PIX *)ERROR_PTR("height must be > 0", procName, NULL); + + /* Avoid overflow in malloc, malicious or otherwise */ + wpl64 = ((l_uint64)width * (l_uint64)depth + 31) / 32; + if (wpl64 > ((1LL << 29) - 1)) { + L_ERROR("requested w = %d, h = %d, d = %d\n", + procName, width, height, depth); + return (PIX *)ERROR_PTR("wpl >= 2^29", procName, NULL); + } + wpl = (l_int32)wpl64; + bignum = 4LL * wpl * height; /* number of bytes to be requested */ + if (bignum > ((1LL << 31) - 1)) { + L_ERROR("requested w = %d, h = %d, d = %d\n", + procName, width, height, depth); + return (PIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); + } + + pixd = (PIX *)LEPT_CALLOC(1, sizeof(PIX)); + pixSetWidth(pixd, width); + pixSetHeight(pixd, height); + pixSetDepth(pixd, depth); + pixSetWpl(pixd, wpl); + if (depth == 24 || depth == 32) + pixSetSpp(pixd, 3); + else + pixSetSpp(pixd, 1); + pixd->refcount = 1; + pixd->informat = IFF_UNKNOWN; + return pixd; +} + + +/*! + * \brief pixClone() + * + * \param[in] pixs + * \return same pix ptr, or NULL on error + * + *
+ * Notes:
+ *      (1) A "clone" is simply a handle (ptr) to an existing pix.
+ *          It is implemented because (a) images can be large and
+ *          hence expensive to copy, and (b) extra handles to a data
+ *          structure need to be made with a simple policy to avoid
+ *          both double frees and memory leaks.  Pix are reference
+ *          counted.  The side effect of pixClone() is an increase
+ *          by 1 in the ref count.
+ *      (2) The protocol to be used is:
+ *          (a) Whenever you want a new handle to an existing image,
+ *              call pixClone(), which just bumps a ref count.
+ *          (b) Always call pixDestroy() on all handles.  This
+ *              decrements the ref count, nulls the handle, and
+ *              only destroys the pix when pixDestroy() has been
+ *              called on all handles.
+ * 
+ */ +PIX * +pixClone(PIX *pixs) +{ + PROCNAME("pixClone"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixChangeRefcount(pixs, 1); + + return pixs; +} + + +/*--------------------------------------------------------------------* + * Pix Destruction * + *--------------------------------------------------------------------*/ +/*! + * \brief pixDestroy() + * + * \param[in,out] ppix will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the pix.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +pixDestroy(PIX **ppix) +{ +PIX *pix; + + PROCNAME("pixDestroy"); + + if (!ppix) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((pix = *ppix) == NULL) + return; + pixFree(pix); + *ppix = NULL; + return; +} + + +/*! + * \brief pixFree() + * + * \param[in] pix + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the pix.
+ * 
+ */ +static void +pixFree(PIX *pix) +{ +l_uint32 *data; +char *text; + + if (!pix) return; + + pixChangeRefcount(pix, -1); + if (pixGetRefcount(pix) <= 0) { + if ((data = pixGetData(pix)) != NULL) + pix_free(data); + if ((text = pixGetText(pix)) != NULL) + LEPT_FREE(text); + pixDestroyColormap(pix); + LEPT_FREE(pix); + } + return; +} + + +/*-------------------------------------------------------------------------* + * Pix Copy * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixCopy() + * + * \param[in] pixd [optional] can be null, equal to pixs, + * different from pixs + * \param[in] pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) There are three cases:
+ *            (a) pixd == null  (makes a new pix; refcount = 1)
+ *            (b) pixd == pixs  (no-op)
+ *            (c) pixd != pixs  (data copy; no change in refcount)
+ *          If the refcount of pixd > 1, case (c) will side-effect
+ *          these handles.
+ *      (2) The general pattern of use is:
+ *             pixd = pixCopy(pixd, pixs);
+ *          This will work for all three cases.
+ *          For clarity when the case is known, you can use:
+ *            (a) pixd = pixCopy(NULL, pixs);
+ *            (c) pixCopy(pixd, pixs);
+ *      (3) For case (c), we check if pixs and pixd are the same
+ *          size (w,h,d).  If so, the data is copied directly.
+ *          Otherwise, the data is reallocated to the correct size
+ *          and the copy proceeds.  The refcount of pixd is unchanged.
+ *      (4) This operation, like all others that may involve a pre-existing
+ *          pixd, will side-effect any existing clones of pixd.
+ * 
+ */ +PIX * +pixCopy(PIX *pixd, /* can be null */ + const PIX *pixs) +{ +l_int32 bytes; + + PROCNAME("pixCopy"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixs == pixd) + return pixd; + + /* Total bytes in image data */ + bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); + + /* If we're making a new pix ... */ + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + memcpy(pixd->data, pixs->data, bytes); + return pixd; + } + + /* Reallocate image data if sizes are different. If this fails, + * pixd hasn't been changed. But we want to signal that the copy + * failed, so return NULL. This will cause a memory leak if the + * return ptr is assigned to pixd, but that is preferred to proceeding + * with an incorrect pixd, and in any event this use case of + * pixCopy() -- reallocating into an existing pix -- is infrequent. */ + if (pixResizeImageData(pixd, pixs) == 1) + return (PIX *)ERROR_PTR("reallocation of data failed", procName, NULL); + + /* Copy non-image data fields */ + pixCopyColormap(pixd, pixs); + pixCopySpp(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixCopyText(pixd, pixs); + + /* Copy image data */ + memcpy(pixd->data, pixs->data, bytes); + return pixd; +} + + +/*! + * \brief pixResizeImageData() + * + * \param[in] pixd gets new uninitialized buffer for image data + * \param[in] pixs determines the size of the buffer; not changed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the sizes of data in pixs and pixd are unequal, this
+ *          frees the existing image data in pixd and allocates
+ *          an uninitialized buffer that will hold the required amount
+ *          of image data in pixs.  The image data from pixs is not
+ *          copied into the new buffer.
+ *      (2) On failure to allocate, pixd is unchanged.
+ * 
+ */ +l_ok +pixResizeImageData(PIX *pixd, + const PIX *pixs) +{ +l_int32 w, h, d, wpl, bytes; +l_uint32 *data; + + PROCNAME("pixResizeImageData"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + + if (pixSizesEqual(pixs, pixd)) /* nothing to do */ + return 0; + + /* Make sure we can copy the data */ + pixGetDimensions(pixs, &w, &h, &d); + wpl = pixGetWpl(pixs); + bytes = 4 * wpl * h; + if ((data = (l_uint32 *)pix_malloc(bytes)) == NULL) + return ERROR_INT("pix_malloc fail for data", procName, 1); + + /* OK, do it */ + pixSetWidth(pixd, w); + pixSetHeight(pixd, h); + pixSetDepth(pixd, d); + pixSetWpl(pixd, wpl); + pixFreeData(pixd); /* free any existing image data */ + pixSetData(pixd, data); /* set the uninitialized memory buffer */ + pixCopyResolution(pixd, pixs); + return 0; +} + + +/*! + * \brief pixCopyColormap() + * + * \param[in] pixd + * \param[in] pixs copies the colormap to %pixd + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys the colormap in pixd, unless the operation is a no-op
+ * 
+ */ +l_ok +pixCopyColormap(PIX *pixd, + const PIX *pixs) +{ +l_int32 valid; +const PIXCMAP *cmaps; +PIXCMAP *cmapd; + + PROCNAME("pixCopyColormap"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixDestroyColormap(pixd); + if ((cmaps = pixs->colormap) == NULL) /* not an error */ + return 0; + pixcmapIsValid(cmaps, &valid); + if (!valid) + return ERROR_INT("cmap not valid", procName, 1); + + if ((cmapd = pixcmapCopy(cmaps)) == NULL) + return ERROR_INT("cmapd not made", procName, 1); + pixSetColormap(pixd, cmapd); + return 0; +} + + +/*! + * \brief pixSizesEqual() + * + * \param[in] pix1, pix2 + * \return 1 if the two pix have same {h, w, d}; 0 otherwise. + */ +l_int32 +pixSizesEqual(const PIX *pix1, + const PIX *pix2) +{ + PROCNAME("pixSizesEqual"); + + if (!pix1 || !pix2) + return ERROR_INT("pix1 and pix2 not both defined", procName, 0); + + if (pix1 == pix2) + return 1; + + if ((pixGetWidth(pix1) != pixGetWidth(pix2)) || + (pixGetHeight(pix1) != pixGetHeight(pix2)) || + (pixGetDepth(pix1) != pixGetDepth(pix2))) + return 0; + else + return 1; +} + + +/*! + * \brief pixTransferAllData() + * + * \param[in] pixd must be different from pixs + * \param[in,out] ppixs will be nulled if refcount goes to 0 + * \param[in] copytext 1 to copy the text field; 0 to skip + * \param[in] copyformat 1 to copy the informat field; 0 to skip + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a complete data transfer from pixs to pixd,
+ *          followed by the destruction of pixs (refcount permitting).
+ *      (2) If the refcount of pixs is 1, pixs is destroyed.  Otherwise,
+ *          the data in pixs is copied (rather than transferred) to pixd.
+ *      (3) This operation, like all others with a pre-existing pixd,
+ *          will side-effect any existing clones of pixd.  The pixd
+ *          refcount does not change.
+ *      (4) When might you use this?  Suppose you have an in-place Pix
+ *          function (returning void) with the typical signature:
+ *              void function-inplace(PIX *pix, ...)
+ *          where "..." are non-pointer input parameters, and suppose
+ *          further that you sometimes want to return an arbitrary Pix
+ *          in place of the input Pix.  There are two ways you can do this:
+ *          (a) The straightforward way is to change the function
+ *              signature to take the address of the Pix ptr:
+ * \code
+ *                  void function-inplace(PIX **ppix, ...) {
+ *                      PIX *pixt = function-makenew(*ppix);
+ *                      pixDestroy(ppix);
+ *                      *ppix = pixt;
+ *                      return;
+ *                  }
+ * \endcode
+ *              Here, the input and returned pix are different, as viewed
+ *              by the calling function, and the inplace function is
+ *              expected to destroy the input pix to avoid a memory leak.
+ *          (b) Keep the signature the same and use pixTransferAllData()
+ *              to return the new Pix in the input Pix struct:
+ * \code
+ *                  void function-inplace(PIX *pix, ...) {
+ *                      PIX *pixt = function-makenew(pix);
+ *                      pixTransferAllData(pix, &pixt, 0, 0);
+ *                               // pixDestroy() is called on pixt
+ *                      return;
+ *                  }
+ * \endcode
+ *              Here, the input and returned pix are the same, as viewed
+ *              by the calling function, and the inplace function must
+ *              never destroy the input pix, because the calling function
+ *              maintains an unchanged handle to it.
+ * 
+ */ +l_ok +pixTransferAllData(PIX *pixd, + PIX **ppixs, + l_int32 copytext, + l_int32 copyformat) +{ +l_int32 nbytes; +PIX *pixs; + + PROCNAME("pixTransferAllData"); + + if (!ppixs) + return ERROR_INT("&pixs not defined", procName, 1); + if ((pixs = *ppixs) == NULL) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixs == pixd) /* no-op */ + return ERROR_INT("pixd == pixs", procName, 1); + + if (pixGetRefcount(pixs) == 1) { /* transfer the data, cmap, text */ + pixFreeData(pixd); /* dealloc any existing data */ + pixSetData(pixd, pixGetData(pixs)); /* transfer new data from pixs */ + pixs->data = NULL; /* pixs no longer owns data */ + pixSetColormap(pixd, pixGetColormap(pixs)); /* frees old; sets new */ + pixs->colormap = NULL; /* pixs no longer owns colormap */ + if (copytext) { + pixSetText(pixd, pixGetText(pixs)); + pixSetText(pixs, NULL); + } + } else { /* preserve pixs by making a copy of the data, cmap, text */ + pixResizeImageData(pixd, pixs); + nbytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); + memcpy(pixGetData(pixd), pixGetData(pixs), nbytes); + pixCopyColormap(pixd, pixs); + if (copytext) + pixCopyText(pixd, pixs); + } + + pixCopySpp(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyDimensions(pixd, pixs); + if (copyformat) + pixCopyInputFormat(pixd, pixs); + + /* This will destroy pixs if data was transferred; + * otherwise, it just decrements its refcount. */ + pixDestroy(ppixs); + return 0; +} + + +/*! + * \brief pixSwapAndDestroy() + * + * \param[out] ppixd [optional] input pixd can be null, + * and it must be different from pixs + * \param[in,out] ppixs will be nulled after the swap + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simple operation to change the handle name safely.
+ *          After this operation, the original image in pixd has
+ *          been destroyed, pixd points to what was pixs, and
+ *          the input pixs ptr has been nulled.
+ *      (2) This works safely whether or not pixs and pixd are cloned.
+ *          If pixs is cloned, the other handles still point to
+ *          the original image, with the ref count reduced by 1.
+ *      (3) Usage example:
+ * \code
+ *            Pix *pix1 = pixRead("...");
+ *            Pix *pix2 = function(pix1, ...);
+ *            pixSwapAndDestroy(&pix1, &pix2);
+ *            pixDestroy(&pix1);  // holds what was in pix2
+ * \endcode
+ *          Example with clones ([] shows ref count of image generated
+ *                               by the function):
+ * \code
+ *            Pix *pixs = pixRead("...");
+ *            Pix *pix1 = pixClone(pixs);
+ *            Pix *pix2 = function(pix1, ...);   [1]
+ *            Pix *pix3 = pixClone(pix2);   [1] --> [2]
+ *            pixSwapAndDestroy(&pix1, &pix2);
+ *            pixDestroy(&pixs);  // still holds read image
+ *            pixDestroy(&pix1);  // holds what was in pix2  [2] --> [1]
+ *            pixDestroy(&pix3);  // holds what was in pix2  [1] --> [0]
+ * \endcode
+ * 
+ */ +l_ok +pixSwapAndDestroy(PIX **ppixd, + PIX **ppixs) +{ + PROCNAME("pixSwapAndDestroy"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + if (!ppixs) + return ERROR_INT("&pixs not defined", procName, 1); + if (*ppixs == NULL) + return ERROR_INT("pixs not defined", procName, 1); + if (ppixs == ppixd) /* no-op */ + return ERROR_INT("&pixd == &pixs", procName, 1); + + pixDestroy(ppixd); + *ppixd = pixClone(*ppixs); + pixDestroy(ppixs); + return 0; +} + + +/*--------------------------------------------------------------------* + * Accessors * + *--------------------------------------------------------------------*/ +l_int32 +pixGetWidth(const PIX *pix) +{ + PROCNAME("pixGetWidth"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + return pix->w; +} + + +l_int32 +pixSetWidth(PIX *pix, + l_int32 width) +{ + PROCNAME("pixSetWidth"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (width < 0) { + pix->w = 0; + return ERROR_INT("width must be >= 0", procName, 1); + } + + pix->w = width; + return 0; +} + + +l_int32 +pixGetHeight(const PIX *pix) +{ + PROCNAME("pixGetHeight"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + return pix->h; +} + + +l_int32 +pixSetHeight(PIX *pix, + l_int32 height) +{ + PROCNAME("pixSetHeight"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (height < 0) { + pix->h = 0; + return ERROR_INT("h must be >= 0", procName, 1); + } + + pix->h = height; + return 0; +} + + +l_int32 +pixGetDepth(const PIX *pix) +{ + PROCNAME("pixGetDepth"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + return pix->d; +} + + +l_int32 +pixSetDepth(PIX *pix, + l_int32 depth) +{ + PROCNAME("pixSetDepth"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (depth < 1) + return ERROR_INT("d must be >= 1", procName, 1); + + pix->d = depth; + return 0; +} + + +/*! + * \brief pixGetDimensions() + * + * \param[in] pix + * \param[out] pw, ph, pd [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixGetDimensions(const PIX *pix, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd) +{ + PROCNAME("pixGetDimensions"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pd) *pd = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (pw) *pw = pix->w; + if (ph) *ph = pix->h; + if (pd) *pd = pix->d; + return 0; +} + + +/*! + * \brief pixSetDimensions() + * + * \param[in] pix + * \param[in] w, h, d use 0 to skip the setting for any of these + * \return 0 if OK, 1 on error + */ +l_ok +pixSetDimensions(PIX *pix, + l_int32 w, + l_int32 h, + l_int32 d) +{ + PROCNAME("pixSetDimensions"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (w > 0) pixSetWidth(pix, w); + if (h > 0) pixSetHeight(pix, h); + if (d > 0) pixSetDepth(pix, d); + return 0; +} + + +/*! + * \brief pixCopyDimensions() + * + * \param[in] pixd + * \param[in] pixs + * \return 0 if OK, 1 on error + */ +l_ok +pixCopyDimensions(PIX *pixd, + const PIX *pixs) +{ + PROCNAME("pixCopyDimensions"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixSetWidth(pixd, pixGetWidth(pixs)); + pixSetHeight(pixd, pixGetHeight(pixs)); + pixSetDepth(pixd, pixGetDepth(pixs)); + pixSetWpl(pixd, pixGetWpl(pixs)); + return 0; +} + + +l_int32 +pixGetSpp(const PIX *pix) +{ + PROCNAME("pixGetSpp"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + return pix->spp; +} + + +/* + * \brief pixSetSpp() + * + * \param[in] pix + * \param[in] spp 1, 3 or 4 samples + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For a 32 bpp pix, this can be used to ignore the
+ *          alpha sample (spp == 3) or to use it (spp == 4).
+ *          For example, to write a spp == 4 image without the alpha
+ *          sample (as an rgb pix), call pixSetSpp(pix, 3) and
+ *          then write it out as a png.
+ * 
+ */ +l_int32 +pixSetSpp(PIX *pix, + l_int32 spp) +{ + PROCNAME("pixSetSpp"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (spp < 1) + return ERROR_INT("spp must be >= 1", procName, 1); + + pix->spp = spp; + return 0; +} + + +/*! + * \brief pixCopySpp() + * + * \param[in] pixd + * \param[in] pixs + * \return 0 if OK, 1 on error + */ +l_ok +pixCopySpp(PIX *pixd, + const PIX *pixs) +{ + PROCNAME("pixCopySpp"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixSetSpp(pixd, pixGetSpp(pixs)); + return 0; +} + + +l_int32 +pixGetWpl(const PIX *pix) +{ + PROCNAME("pixGetWpl"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + return pix->wpl; +} + + +l_int32 +pixSetWpl(PIX *pix, + l_int32 wpl) +{ + PROCNAME("pixSetWpl"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pix->wpl = wpl; + return 0; +} + + +l_int32 +pixGetRefcount(const PIX *pix) +{ + PROCNAME("pixGetRefcount"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + return pix->refcount; +} + + +l_int32 +pixChangeRefcount(PIX *pix, + l_int32 delta) +{ + PROCNAME("pixChangeRefcount"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pix->refcount += delta; + return 0; +} + + +l_int32 +pixGetXRes(const PIX *pix) +{ + PROCNAME("pixGetXRes"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + return pix->xres; +} + + +l_int32 +pixSetXRes(PIX *pix, + l_int32 res) +{ + PROCNAME("pixSetXRes"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pix->xres = res; + return 0; +} + + +l_int32 +pixGetYRes(const PIX *pix) +{ + PROCNAME("pixGetYRes"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + return pix->yres; +} + + +l_int32 +pixSetYRes(PIX *pix, + l_int32 res) +{ + PROCNAME("pixSetYRes"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pix->yres = res; + return 0; +} + + +/*! + * \brief pixGetResolution() + * + * \param[in] pix + * \param[out] pxres, pyres [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixGetResolution(const PIX *pix, + l_int32 *pxres, + l_int32 *pyres) +{ + PROCNAME("pixGetResolution"); + + if (pxres) *pxres = 0; + if (pyres) *pyres = 0; + if (!pxres && !pyres) + return ERROR_INT("no output requested", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (pxres) *pxres = pix->xres; + if (pyres) *pyres = pix->yres; + return 0; +} + + +/*! + * \brief pixSetResolution() + * + * \param[in] pix + * \param[in] xres, yres use 0 to skip setting a value for either of these + * \return 0 if OK, 1 on error + */ +l_ok +pixSetResolution(PIX *pix, + l_int32 xres, + l_int32 yres) +{ + PROCNAME("pixSetResolution"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (xres > 0) pix->xres = xres; + if (yres > 0) pix->yres = yres; + return 0; +} + + +l_int32 +pixCopyResolution(PIX *pixd, + const PIX *pixs) +{ + PROCNAME("pixCopyResolution"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixSetXRes(pixd, pixGetXRes(pixs)); + pixSetYRes(pixd, pixGetYRes(pixs)); + return 0; +} + + +l_int32 +pixScaleResolution(PIX *pix, + l_float32 xscale, + l_float32 yscale) +{ + PROCNAME("pixScaleResolution"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (pix->xres != 0 && pix->yres != 0) { + pix->xres = (l_uint32)(xscale * (l_float32)(pix->xres) + 0.5); + pix->yres = (l_uint32)(yscale * (l_float32)(pix->yres) + 0.5); + } + return 0; +} + + +l_int32 +pixGetInputFormat(const PIX *pix) +{ + PROCNAME("pixGetInputFormat"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + return pix->informat; +} + + +l_int32 +pixSetInputFormat(PIX *pix, + l_int32 informat) +{ + PROCNAME("pixSetInputFormat"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pix->informat = informat; + return 0; +} + + +l_int32 +pixCopyInputFormat(PIX *pixd, + const PIX *pixs) +{ + PROCNAME("pixCopyInputFormat"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixSetInputFormat(pixd, pixGetInputFormat(pixs)); + return 0; +} + + +l_int32 +pixSetSpecial(PIX *pix, + l_int32 special) +{ + PROCNAME("pixSetSpecial"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pix->special = special; + return 0; +} + + +/*! + * \brief pixGetText() + * + * \param[in] pix + * \return ptr to existing text string + * + *
+ * Notes:
+ *      (1) The text string belongs to the pix:
+ *          * the caller must NOT free it
+ *          * it must not be used after the pix is destroyed
+ * 
+ */ +char * +pixGetText(PIX *pix) +{ + PROCNAME("pixGetText"); + + if (!pix) + return (char *)ERROR_PTR("pix not defined", procName, NULL); + return pix->text; +} + + +/*! + * \brief pixSetText() + * + * \param[in] pix + * \param[in] textstring can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This removes any existing textstring and puts a copy of
+ *          the input textstring there.
+ * 
+ */ +l_ok +pixSetText(PIX *pix, + const char *textstring) +{ + PROCNAME("pixSetText"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + stringReplace(&pix->text, textstring); + return 0; +} + + +/*! + * \brief pixAddText() + * + * \param[in] pix + * \param[in] textstring can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This adds the new textstring to any existing text.
+ *      (2) Either or both the existing text and the new text
+ *          string can be null.
+ * 
+ */ +l_ok +pixAddText(PIX *pix, + const char *textstring) +{ +char *newstring; + + PROCNAME("pixAddText"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + newstring = stringJoin(pixGetText(pix), textstring); + stringReplace(&pix->text, newstring); + LEPT_FREE(newstring); + return 0; +} + + +l_int32 +pixCopyText(PIX *pixd, + const PIX *pixs) +{ + PROCNAME("pixCopyText"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixs == pixd) + return 0; /* no-op */ + + pixSetText(pixd, pixs->text); + return 0; +} + + +PIXCMAP * +pixGetColormap(PIX *pix) +{ + PROCNAME("pixGetColormap"); + + if (!pix) + return (PIXCMAP *)ERROR_PTR("pix not defined", procName, NULL); + return pix->colormap; +} + + +/*! + * \brief pixSetColormap() + * + * \param[in] pix + * \param[in] colormap to be assigned + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) Unlike with the pix data field, pixSetColormap() destroys
+ *          any existing colormap before assigning the new one.
+ *          Because colormaps are not ref counted, it is important that
+ *          the new colormap does not belong to any other pix.
+ * 
+ */ +l_ok +pixSetColormap(PIX *pix, + PIXCMAP *colormap) +{ + PROCNAME("pixSetColormap"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixDestroyColormap(pix); + pix->colormap = colormap; + return 0; +} + + +/*! + * \brief pixDestroyColormap() + * + * \param[in] pix + * \return 0 if OK, 1 on error + */ +l_ok +pixDestroyColormap(PIX *pix) +{ +PIXCMAP *cmap; + + PROCNAME("pixDestroyColormap"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if ((cmap = pix->colormap) != NULL) { + pixcmapDestroy(&cmap); + pix->colormap = NULL; + } + return 0; +} + + +/*! + * \brief pixGetData() + * + * \param[in] pix + * \return ptr to image data + * + *
+ * Notes:
+ *      (1) This gives a new handle for the data.  The data is still
+ *          owned by the pix, so do not call LEPT_FREE() on it.
+ * 
+ */ +l_uint32 * +pixGetData(PIX *pix) +{ + PROCNAME("pixGetData"); + + if (!pix) + return (l_uint32 *)ERROR_PTR("pix not defined", procName, NULL); + return pix->data; +} + + +/*! + * \brief pixSetData() + * + * \param[in] pix + * \param[in] data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does not free any existing data.  To free existing
+ *          data, use pixFreeData() before pixSetData().
+ * 
+ */ +l_int32 +pixSetData(PIX *pix, + l_uint32 *data) +{ + PROCNAME("pixSetData"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pix->data = data; + return 0; +} + + +/*! + * \brief pixExtractData() + * + * \param[in] pix + * \return ptr to data, or null on error + * + *
+ * Notes:
+ *      (1) This extracts the pix image data for use in another context.
+ *          The caller still needs to use pixDestroy() on the input pix.
+ *      (2) If refcount == 1, the data is extracted and the
+ *          pix->data ptr is set to NULL.
+ *      (3) If refcount > 1, this simply returns a copy of the data,
+ *          using the pix allocator, and leaving the input pix unchanged.
+ * 
+ */ +l_uint32 * +pixExtractData(PIX *pixs) +{ +l_int32 count, bytes; +l_uint32 *data, *datas; + + PROCNAME("pixExtractData"); + + if (!pixs) + return (l_uint32 *)ERROR_PTR("pixs not defined", procName, NULL); + + count = pixGetRefcount(pixs); + if (count == 1) { /* extract */ + data = pixGetData(pixs); + pixSetData(pixs, NULL); + } else { /* refcount > 1; copy */ + bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); + datas = pixGetData(pixs); + if ((data = (l_uint32 *)pix_malloc(bytes)) == NULL) + return (l_uint32 *)ERROR_PTR("data not made", procName, NULL); + memcpy(data, datas, bytes); + } + + return data; +} + + +/*! + * \brief pixFreeData() + * + * \param[in] pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This frees the data and sets the pix data ptr to null.
+ *          It should be used before pixSetData() in the situation where
+ *          you want to free any existing data before doing
+ *          a subsequent assignment with pixSetData().
+ * 
+ */ +l_int32 +pixFreeData(PIX *pix) +{ +l_uint32 *data; + + PROCNAME("pixFreeData"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if ((data = pixGetData(pix)) != NULL) { + pix_free(data); + pix->data = NULL; + } + return 0; +} + + +/*--------------------------------------------------------------------* + * Pix line ptrs * + *--------------------------------------------------------------------*/ +/*! + * \brief pixGetLinePtrs() + * + * \param[in] pix + * \param[out] psize [optional] array size, which is the pix height + * \return array of line ptrs, or NULL on error + * + *
+ * Notes:
+ *      (1) This is intended to be used for fast random pixel access.
+ *          For example, for an 8 bpp image,
+ *              val = GET_DATA_BYTE(lines8[i], j);
+ *          is equivalent to, but much faster than,
+ *              pixGetPixel(pix, j, i, &val);
+ *      (2) How much faster?  For 1 bpp, it's from 6 to 10x faster.
+ *          For 8 bpp, it's an amazing 30x faster.  So if you are
+ *          doing random access over a substantial part of the image,
+ *          use this line ptr array.
+ *      (3) When random access is used in conjunction with a stack,
+ *          queue or heap, the overall computation time depends on
+ *          the operations performed on each struct that is popped
+ *          or pushed, and whether we are using a priority queue (O(logn))
+ *          or a queue or stack (O(1)).  For example, for maze search,
+ *          the overall ratio of time for line ptrs vs. pixGet/Set* is
+ *             Maze type     Type                   Time ratio
+ *               binary      queue                     0.4
+ *               gray        heap (priority queue)     0.6
+ *      (4) Because this returns a void** and the accessors take void*,
+ *          the compiler cannot check the pointer types.  It is
+ *          strongly recommended that you adopt a naming scheme for
+ *          the returned ptr arrays that indicates the pixel depth.
+ *          (This follows the original intent of Simonyi's "Hungarian"
+ *          application notation, where naming is used proactively
+ *          to make errors visibly obvious.)  By doing this, you can
+ *          tell by inspection if the correct accessor is used.
+ *          For example, for an 8 bpp pixg:
+ *              void **lineg8 = pixGetLinePtrs(pixg, NULL);
+ *              val = GET_DATA_BYTE(lineg8[i], j);  // fast access; BYTE, 8
+ *              ...
+ *              LEPT_FREE(lineg8);  // don't forget this
+ *      (5) These are convenient for accessing bytes sequentially in an
+ *          8 bpp grayscale image.  People who write image processing code
+ *          on 8 bpp images are accustomed to grabbing pixels directly out
+ *          of the raster array.  Note that for little endians, you first
+ *          need to reverse the byte order in each 32-bit word.
+ *          Here's a typical usage pattern:
+ *              pixEndianByteSwap(pix);   // always safe; no-op on big-endians
+ *              l_uint8 **lineptrs = (l_uint8 **)pixGetLinePtrs(pix, NULL);
+ *              pixGetDimensions(pix, &w, &h, NULL);
+ *              for (i = 0; i < h; i++) {
+ *                  l_uint8 *line = lineptrs[i];
+ *                  for (j = 0; j < w; j++) {
+ *                      val = line[j];
+ *                      ...
+ *                  }
+ *              }
+ *              pixEndianByteSwap(pix);  // restore big-endian order
+ *              LEPT_FREE(lineptrs);
+ *          This can be done even more simply as follows:
+ *              l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h);
+ *              for (i = 0; i < h; i++) {
+ *                  l_uint8 *line = lineptrs[i];
+ *                  for (j = 0; j < w; j++) {
+ *                      val = line[j];
+ *                      ...
+ *                  }
+ *              }
+ *              pixCleanupByteProcessing(pix, lineptrs);
+ * 
+ */ +void ** +pixGetLinePtrs(PIX *pix, + l_int32 *psize) +{ +l_int32 i, h, wpl; +l_uint32 *data; +void **lines; + + PROCNAME("pixGetLinePtrs"); + + if (psize) *psize = 0; + if (!pix) + return (void **)ERROR_PTR("pix not defined", procName, NULL); + + h = pixGetHeight(pix); + if (psize) *psize = h; + if ((lines = (void **)LEPT_CALLOC(h, sizeof(void *))) == NULL) + return (void **)ERROR_PTR("lines not made", procName, NULL); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + for (i = 0; i < h; i++) + lines[i] = (void *)(data + i * wpl); + + return lines; +} + + +/*--------------------------------------------------------------------* + * Print output for debugging * + *--------------------------------------------------------------------*/ +extern const char *ImageFileFormatExtensions[]; + +/*! + * \brief pixPrintStreamInfo() + * + * \param[in] fp file stream + * \param[in] pix + * \param[in] text [optional] identifying string; can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixPrintStreamInfo(FILE *fp, + const PIX *pix, + const char *text) +{ +l_int32 informat; +const PIXCMAP *cmap; + + PROCNAME("pixPrintStreamInfo"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (text) + fprintf(fp, " Pix Info for %s:\n", text); + fprintf(fp, " width = %d, height = %d, depth = %d, spp = %d\n", + pixGetWidth(pix), pixGetHeight(pix), pixGetDepth(pix), + pixGetSpp(pix)); + fprintf(fp, " wpl = %d, data = %p, refcount = %d\n", + pixGetWpl(pix), pix->data, pixGetRefcount(pix)); + fprintf(fp, " xres = %d, yres = %d\n", pixGetXRes(pix), pixGetYRes(pix)); + if ((cmap = pix->colormap) != NULL) + pixcmapWriteStream(fp, cmap); + else + fprintf(fp, " no colormap\n"); + informat = pixGetInputFormat(pix); + fprintf(fp, " input format: %d (%s)\n", informat, + ImageFileFormatExtensions[informat]); + if (pix->text != NULL) + fprintf(fp, " text: %s\n", pix->text); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/pix2.c b/3rdparty/hgOCR/leptonica/pix2.c new file mode 100644 index 00000000..1f037364 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix2.c @@ -0,0 +1,3390 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pix2.c + *
+ *
+ *    This file has these basic operations:
+ *
+ *      (1) Get and set: individual pixels, full image, rectangular region,
+ *          pad pixels, border pixels, and color components for RGB
+ *      (2) Add and remove border pixels
+ *      (3) Endian byte swaps
+ *      (4) Simple method for byte-processing images (instead of words)
+ *
+ *      Pixel poking
+ *           l_int32     pixGetPixel()
+ *           l_int32     pixSetPixel()
+ *           l_int32     pixGetRGBPixel()
+ *           l_int32     pixSetRGBPixel()
+ *           l_int32     pixGetRandomPixel()
+ *           l_int32     pixClearPixel()
+ *           l_int32     pixFlipPixel()
+ *           void        setPixelLow()
+ *
+ *      Find black or white value
+ *           l_int32     pixGetBlackOrWhiteVal()
+ *
+ *      Full image clear/set/set-to-arbitrary-value
+ *           l_int32     pixClearAll()
+ *           l_int32     pixSetAll()
+ *           l_int32     pixSetAllGray()
+ *           l_int32     pixSetAllArbitrary()
+ *           l_int32     pixSetBlackOrWhite()
+ *           l_int32     pixSetComponentArbitrary()
+ *
+ *      Rectangular region clear/set/set-to-arbitrary-value/blend
+ *           l_int32     pixClearInRect()
+ *           l_int32     pixSetInRect()
+ *           l_int32     pixSetInRectArbitrary()
+ *           l_int32     pixBlendInRect()
+ *
+ *      Set pad bits
+ *           l_int32     pixSetPadBits()
+ *           l_int32     pixSetPadBitsBand()
+ *
+ *      Assign border pixels
+ *           l_int32     pixSetOrClearBorder()
+ *           l_int32     pixSetBorderVal()
+ *           l_int32     pixSetBorderRingVal()
+ *           l_int32     pixSetMirroredBorder()
+ *           PIX        *pixCopyBorder()
+ *
+ *      Add and remove border
+ *           PIX        *pixAddBorder()
+ *           PIX        *pixAddBlackOrWhiteBorder()
+ *           PIX        *pixAddBorderGeneral()
+ *           PIX        *pixRemoveBorder()
+ *           PIX        *pixRemoveBorderGeneral()
+ *           PIX        *pixRemoveBorderToSize()
+ *           PIX        *pixAddMirroredBorder()
+ *           PIX        *pixAddRepeatedBorder()
+ *           PIX        *pixAddMixedBorder()
+ *           PIX        *pixAddContinuedBorder()
+ *
+ *      Helper functions using alpha
+ *           l_int32     pixShiftAndTransferAlpha()
+ *           PIX        *pixDisplayLayersRGBA()
+ *
+ *      Color sample setting and extraction
+ *           PIX        *pixCreateRGBImage()
+ *           PIX        *pixGetRGBComponent()
+ *           l_int32     pixSetRGBComponent()
+ *           PIX        *pixGetRGBComponentCmap()
+ *           l_int32     pixCopyRGBComponent()
+ *           l_int32     composeRGBPixel()
+ *           l_int32     composeRGBAPixel()
+ *           void        extractRGBValues()
+ *           void        extractRGBAValues()
+ *           l_int32     extractMinMaxComponent()
+ *           l_int32     pixGetRGBLine()
+ *
+ *      Conversion between big and little endians
+ *           PIX        *pixEndianByteSwapNew()
+ *           l_int32     pixEndianByteSwap()
+ *           l_int32     lineEndianByteSwap()
+ *           PIX        *pixEndianTwoByteSwapNew()
+ *           l_int32     pixEndianTwoByteSwap()
+ *
+ *      Extract raster data as binary string
+ *           l_int32     pixGetRasterData()
+ *
+ *      Test alpha component opaqueness
+ *           l_int32     pixAlphaIsOpaque
+ *
+ *      Setup helpers for 8 bpp byte processing
+ *           l_uint8   **pixSetupByteProcessing()
+ *           l_int32     pixCleanupByteProcessing()
+ *
+ *      Setting parameters for antialias masking with alpha transforms
+ *           void        l_setAlphaMaskBorder()
+ * 
+ */ + + +#include +#include "allheaders.h" + +static const l_uint32 rmask32[] = {0x0, + 0x00000001, 0x00000003, 0x00000007, 0x0000000f, + 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, + 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, + 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, + 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, + 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, + 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, + 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; + + /* This is a global that determines the default 8 bpp alpha mask values + * for rings at distance 1 and 2 from the border. Declare extern + * to use. To change the values, use l_setAlphaMaskBorder(). */ +LEPT_DLL l_float32 AlphaMaskBorderVals[2] = {0.0, 0.5}; + + +#ifndef NO_CONSOLE_IO +#define DEBUG_SERIALIZE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * Pixel poking * + *-------------------------------------------------------------*/ +/*! + * \brief pixGetPixel() + * + * \param[in] pix + * \param[in] x,y pixel coords + * \param[out] pval pixel value + * \return 0 if OK; 1 or 2 on error + * + *
+ * Notes:
+ *      (1) This returns the value in the data array.  If the pix is
+ *          colormapped, it returns the colormap index, not the rgb value.
+ *      (2) Because of the function overhead and the parameter checking,
+ *          this is much slower than using the GET_DATA_*() macros directly.
+ *          Speed on a 1 Mpixel RGB image, using a 3 GHz machine:
+ *            * pixGet/pixSet: ~25 Mpix/sec
+ *            * GET_DATA/SET_DATA: ~350 MPix/sec
+ *          If speed is important and you're doing random access into
+ *          the pix, use pixGetLinePtrs() and the array access macros.
+ *      (3) If the point is outside the image, this returns an error (2),
+ *          with 0 in %pval.  To avoid spamming output, it fails silently.
+ * 
+ */ +l_ok +pixGetPixel(PIX *pix, + l_int32 x, + l_int32 y, + l_uint32 *pval) +{ +l_int32 w, h, d, wpl, val; +l_uint32 *line, *data; + + PROCNAME("pixGetPixel"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + line = data + y * wpl; + switch (d) + { + case 1: + val = GET_DATA_BIT(line, x); + break; + case 2: + val = GET_DATA_DIBIT(line, x); + break; + case 4: + val = GET_DATA_QBIT(line, x); + break; + case 8: + val = GET_DATA_BYTE(line, x); + break; + case 16: + val = GET_DATA_TWO_BYTES(line, x); + break; + case 32: + val = line[x]; + break; + default: + return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); + } + + *pval = val; + return 0; +} + + +/*! + * \brief pixSetPixel() + * + * \param[in] pix + * \param[in] x,y pixel coords + * \param[in] val value to be inserted + * \return 0 if OK; 1 or 2 on error + * + *
+ * Notes:
+ *      (1) Warning: the input value is not checked for overflow with respect
+ *          the the depth of %pix, and the sign bit (if any) is ignored.
+ *          * For d == 1, %val > 0 sets the bit on.
+ *          * For d == 2, 4, 8 and 16, %val is masked to the maximum allowable
+ *            pixel value, and any (invalid) higher order bits are discarded.
+ *      (2) See pixGetPixel() for information on performance.
+ *      (3) If the point is outside the image, this returns an error (2),
+ *          with 0 in %pval.  To avoid spamming output, it fails silently.
+ * 
+ */ +l_ok +pixSetPixel(PIX *pix, + l_int32 x, + l_int32 y, + l_uint32 val) +{ +l_int32 w, h, d, wpl; +l_uint32 *line, *data; + + PROCNAME("pixSetPixel"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + line = data + y * wpl; + switch (d) + { + case 1: + if (val) + SET_DATA_BIT(line, x); + else + CLEAR_DATA_BIT(line, x); + break; + case 2: + SET_DATA_DIBIT(line, x, val); + break; + case 4: + SET_DATA_QBIT(line, x, val); + break; + case 8: + SET_DATA_BYTE(line, x, val); + break; + case 16: + SET_DATA_TWO_BYTES(line, x, val); + break; + case 32: + line[x] = val; + break; + default: + return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); + } + + return 0; +} + + +/*! + * \brief pixGetRGBPixel() + * + * \param[in] pix 32 bpp rgb, not colormapped + * \param[in] x,y pixel coords + * \param[out] prval [optional] red component + * \param[out] pgval [optional] green component + * \param[out] pbval [optional] blue component + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +pixGetRGBPixel(PIX *pix, + l_int32 x, + l_int32 y, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ +l_int32 w, h, d, wpl; +l_uint32 *data, *ppixel; + + PROCNAME("pixGetRGBPixel"); + + if (prval) *prval = 0; + if (pgval) *pgval = 0; + if (pbval) *pbval = 0; + if (!prval && !pgval && !pbval) + return ERROR_INT("no output requested", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 32) + return ERROR_INT("pix not 32 bpp", procName, 1); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + ppixel = data + y * wpl + x; + if (prval) *prval = GET_DATA_BYTE(ppixel, COLOR_RED); + if (pgval) *pgval = GET_DATA_BYTE(ppixel, COLOR_GREEN); + if (pbval) *pbval = GET_DATA_BYTE(ppixel, COLOR_BLUE); + return 0; +} + + +/*! + * \brief pixSetRGBPixel() + * + * \param[in] pix 32 bpp rgb + * \param[in] x,y pixel coords + * \param[in] rval red component + * \param[in] gval green component + * \param[in] bval blue component + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +pixSetRGBPixel(PIX *pix, + l_int32 x, + l_int32 y, + l_int32 rval, + l_int32 gval, + l_int32 bval) +{ +l_int32 w, h, d, wpl; +l_uint32 pixel; +l_uint32 *data, *line; + + PROCNAME("pixSetRGBPixel"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 32) + return ERROR_INT("pix not 32 bpp", procName, 1); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + line = data + y * wpl; + composeRGBPixel(rval, gval, bval, &pixel); + *(line + x) = pixel; + return 0; +} + + +/*! + * \brief pixGetRandomPixel() + * + * \param[in] pix any depth; can be colormapped + * \param[out] pval [optional] pixel value + * \param[out] px [optional] x coordinate chosen; can be null + * \param[out] py [optional] y coordinate chosen; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If the pix is colormapped, it returns the rgb value.
+ * 
+ */ +l_ok +pixGetRandomPixel(PIX *pix, + l_uint32 *pval, + l_int32 *px, + l_int32 *py) +{ +l_int32 w, h, x, y, rval, gval, bval; +l_uint32 val; +PIXCMAP *cmap; + + PROCNAME("pixGetRandomPixel"); + + if (pval) *pval = 0; + if (px) *px = 0; + if (py) *py = 0; + if (!pval && !px && !py) + return ERROR_INT("no output requested", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, NULL); + x = rand() % w; + y = rand() % h; + if (px) *px = x; + if (py) *py = y; + if (pval) { + pixGetPixel(pix, x, y, &val); + if ((cmap = pixGetColormap(pix)) != NULL) { + pixcmapGetColor(cmap, val, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, pval); + } else { + *pval = val; + } + } + + return 0; +} + + +/*! + * \brief pixClearPixel() + * + * \param[in] pix any depth; warning if colormapped + * \param[in] x,y pixel coords + * \return 0 if OK; 1 or 2 on error. + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +pixClearPixel(PIX *pix, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, d, wpl; +l_uint32 *line, *data; + + PROCNAME("pixClearPixel"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (pixGetColormap(pix)) + L_WARNING("cmapped: setting to 0 may not be intended\n", procName); + pixGetDimensions(pix, &w, &h, &d); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + line = data + y * wpl; + switch (d) + { + case 1: + CLEAR_DATA_BIT(line, x); + break; + case 2: + CLEAR_DATA_DIBIT(line, x); + break; + case 4: + CLEAR_DATA_QBIT(line, x); + break; + case 8: + SET_DATA_BYTE(line, x, 0); + break; + case 16: + SET_DATA_TWO_BYTES(line, x, 0); + break; + case 32: + line[x] = 0; + break; + default: + return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); + } + + return 0; +} + + +/*! + * \brief pixFlipPixel() + * + * \param[in] pix any depth, warning if colormapped + * \param[in] x,y pixel coords + * \return 0 if OK; 1 or 2 on error + * + * Notes: + * (1) If the point is outside the image, this returns an error (2), + * with 0 in %pval. To avoid spamming output, it fails silently. + */ +l_ok +pixFlipPixel(PIX *pix, + l_int32 x, + l_int32 y) +{ +l_int32 w, h, d, wpl; +l_uint32 val; +l_uint32 *line, *data; + + PROCNAME("pixFlipPixel"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (pixGetColormap(pix)) + L_WARNING("cmapped: setting to 0 may not be intended\n", procName); + pixGetDimensions(pix, &w, &h, &d); + if (x < 0 || x >= w || y < 0 || y >= h) + return 2; + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + line = data + y * wpl; + switch (d) + { + case 1: + val = GET_DATA_BIT(line, x); + if (val) + CLEAR_DATA_BIT(line, x); + else + SET_DATA_BIT(line, x); + break; + case 2: + val = GET_DATA_DIBIT(line, x); + val ^= 0x3; + SET_DATA_DIBIT(line, x, val); + break; + case 4: + val = GET_DATA_QBIT(line, x); + val ^= 0xf; + SET_DATA_QBIT(line, x, val); + break; + case 8: + val = GET_DATA_BYTE(line, x); + val ^= 0xff; + SET_DATA_BYTE(line, x, val); + break; + case 16: + val = GET_DATA_TWO_BYTES(line, x); + val ^= 0xffff; + SET_DATA_TWO_BYTES(line, x, val); + break; + case 32: + val = line[x] ^ 0xffffffff; + line[x] = val; + break; + default: + return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); + } + + return 0; +} + + +/*! + * \brief setPixelLow() + * + * \param[in] line ptr to beginning of line, + * \param[in] x pixel location in line + * \param[in] depth bpp + * \param[in] val to be inserted + * \return void + * + *
+ * Notes:
+ *      (1) Caution: input variables are not checked!
+ * 
+ */ +void +setPixelLow(l_uint32 *line, + l_int32 x, + l_int32 depth, + l_uint32 val) +{ + switch (depth) + { + case 1: + if (val) + SET_DATA_BIT(line, x); + else + CLEAR_DATA_BIT(line, x); + break; + case 2: + SET_DATA_DIBIT(line, x, val); + break; + case 4: + SET_DATA_QBIT(line, x, val); + break; + case 8: + SET_DATA_BYTE(line, x, val); + break; + case 16: + SET_DATA_TWO_BYTES(line, x, val); + break; + case 32: + line[x] = val; + break; + default: + fprintf(stderr, "illegal depth in setPixelLow()\n"); + } + + return; +} + + +/*-------------------------------------------------------------* + * Find black or white value * + *-------------------------------------------------------------*/ +/*! + * \brief pixGetBlackOrWhiteVal() + * + * \param[in] pixs all depths; cmap ok + * \param[in] op L_GET_BLACK_VAL, L_GET_WHITE_VAL + * \param[out] pval pixel value + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Side effect.  For a colormapped image, if the requested
+ *          color is not present and there is room to add it in the cmap,
+ *          it is added and the new index is returned.  If there is no room,
+ *          the index of the closest color in intensity is returned.
+ * 
+ */ +l_ok +pixGetBlackOrWhiteVal(PIX *pixs, + l_int32 op, + l_uint32 *pval) +{ +l_int32 d, val; +PIXCMAP *cmap; + + PROCNAME("pixGetBlackOrWhiteVal"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) + return ERROR_INT("invalid op", procName, 1); + + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + if (!cmap) { + if ((d == 1 && op == L_GET_WHITE_VAL) || + (d > 1 && op == L_GET_BLACK_VAL)) { /* min val */ + val = 0; + } else { /* max val */ + val = (d == 32) ? 0xffffff00 : (1 << d) - 1; + } + } else { /* handle colormap */ + if (op == L_GET_BLACK_VAL) + pixcmapAddBlackOrWhite(cmap, 0, &val); + else /* L_GET_WHITE_VAL */ + pixcmapAddBlackOrWhite(cmap, 1, &val); + } + *pval = val; + + return 0; +} + + +/*-------------------------------------------------------------* + * Full image clear/set/set-to-arbitrary-value/invert * + *-------------------------------------------------------------*/ +/*! + * \brief pixClearAll() + * + * \param[in] pix all depths; use cmapped with caution + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Clears all data to 0.  For 1 bpp, this is white; for grayscale
+ *          or color, this is black.
+ *      (2) Caution: for colormapped pix, this sets the color to the first
+ *          one in the colormap.  Be sure that this is the intended color!
+ * 
+ */ +l_ok +pixClearAll(PIX *pix) +{ + PROCNAME("pixClearAll"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix), + PIX_CLR, NULL, 0, 0); + return 0; +} + + +/*! + * \brief pixSetAll() + * + * \param[in] pix all depths; use cmapped with caution + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Sets all data to 1.  For 1 bpp, this is black; for grayscale
+ *          or color, this is white.
+ *      (2) Caution: for colormapped pix, this sets the pixel value to the
+ *          maximum value supported by the colormap: 2^d - 1.  However, this
+ *          color may not be defined, because the colormap may not be full.
+ * 
+ */ +l_ok +pixSetAll(PIX *pix) +{ +l_int32 n; +PIXCMAP *cmap; + + PROCNAME("pixSetAll"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if ((cmap = pixGetColormap(pix)) != NULL) { + n = pixcmapGetCount(cmap); + if (n < cmap->nalloc) /* cmap is not full */ + return ERROR_INT("cmap entry does not exist", procName, 1); + } + + pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix), + PIX_SET, NULL, 0, 0); + return 0; +} + + +/*! + * \brief pixSetAllGray() + * + * \param[in] pix all depths, cmap ok + * \param[in] grayval in range 0 ... 255 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) N.B.  For all images, %grayval == 0 represents black and
+ *          %grayval == 255 represents white.
+ *      (2) For depth < 8, we do our best to approximate the gray level.
+ *          For 1 bpp images, any %grayval < 128 is black; >= 128 is white.
+ *          For 32 bpp images, each r,g,b component is set to %grayval,
+ *          and the alpha component is preserved.
+ *      (3) If pix is colormapped, it adds the gray value, replicated in
+ *          all components, to the colormap if it's not there and there
+ *          is room.  If the colormap is full, it finds the closest color in
+ *          L2 distance of components.  This index is written to all pixels.
+ * 
+ */ +l_ok +pixSetAllGray(PIX *pix, + l_int32 grayval) +{ +l_int32 d, spp, index; +l_uint32 val32; +PIX *alpha; +PIXCMAP *cmap; + + PROCNAME("pixSetAllGray"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (grayval < 0) { + L_WARNING("grayval < 0; setting to 0\n", procName); + grayval = 0; + } else if (grayval > 255) { + L_WARNING("grayval > 255; setting to 255\n", procName); + grayval = 255; + } + + /* Handle the colormap case */ + cmap = pixGetColormap(pix); + if (cmap) { + pixcmapAddNearestColor(cmap, grayval, grayval, grayval, &index); + pixSetAllArbitrary(pix, index); + return 0; + } + + /* Non-cmapped */ + d = pixGetDepth(pix); + spp = pixGetSpp(pix); + if (d == 1) { + if (grayval < 128) /* black */ + pixSetAll(pix); + else + pixClearAll(pix); /* white */ + } else if (d < 8) { + grayval >>= 8 - d; + pixSetAllArbitrary(pix, grayval); + } else if (d == 8) { + pixSetAllArbitrary(pix, grayval); + } else if (d == 16) { + grayval |= (grayval << 8); + pixSetAllArbitrary(pix, grayval); + } else if (d == 32 && spp == 3) { + composeRGBPixel(grayval, grayval, grayval, &val32); + pixSetAllArbitrary(pix, val32); + } else if (d == 32 && spp == 4) { + alpha = pixGetRGBComponent(pix, L_ALPHA_CHANNEL); + composeRGBPixel(grayval, grayval, grayval, &val32); + pixSetAllArbitrary(pix, val32); + pixSetRGBComponent(pix, alpha, L_ALPHA_CHANNEL); + pixDestroy(&alpha); + } else { + L_ERROR("invalid depth: %d\n", procName, d); + return 1; + } + + return 0; +} + + +/*! + * \brief pixSetAllArbitrary() + * + * \param[in] pix all depths; use cmapped with caution + * \param[in] val value to set all pixels + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caution 1!  For colormapped pix, %val is used as an index
+ *          into a colormap.  Be sure that index refers to the intended color.
+ *          If the color is not in the colormap, you should first add it
+ *          and then call this function.
+ *      (2) Caution 2!  For 32 bpp pix, the interpretation of the LSB
+ *          of %val depends on whether spp == 3 (RGB) or spp == 4 (RGBA).
+ *          For RGB, the LSB is ignored in image transformations.
+ *          For RGBA, the LSB is interpreted as the alpha (transparency)
+ *          component; full transparency has alpha == 0x0, whereas
+ *          full opacity has alpha = 0xff.  An RGBA image with full
+ *          opacity behaves like an RGB image.
+ *      (3) As an example of (2), suppose you want to initialize a 32 bpp
+ *          pix with partial opacity, say 0xee337788.  If the pix is 3 spp,
+ *          the 0x88 alpha component will be ignored and may be changed
+ *          in subsequent processing.  However, if the pix is 4 spp, the
+ *          alpha component will be retained and used. The function
+ *          pixCreate(w, h, 32) makes an RGB image by default, and
+ *          pixSetSpp(pix, 4) can be used to promote an RGB image to RGBA.
+ * 
+ */ +l_ok +pixSetAllArbitrary(PIX *pix, + l_uint32 val) +{ +l_int32 n, i, j, w, h, d, wpl, npix; +l_uint32 maxval, wordval; +l_uint32 *data, *line; +PIXCMAP *cmap; + + PROCNAME("pixSetAllArbitrary"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + /* If colormapped, make sure that val is less than the size + * of the cmap array. */ + if ((cmap = pixGetColormap(pix)) != NULL) { + n = pixcmapGetCount(cmap); + if (val >= n) { + L_WARNING("index not in colormap; using last color\n", procName); + val = n - 1; + } + } + + /* Make sure val isn't too large for the pixel depth. + * If it is too large, set the pixel color to white. */ + pixGetDimensions(pix, &w, &h, &d); + if (d < 32) { + maxval = (1 << d) - 1; + if (val > maxval) { + L_WARNING("val = %d too large for depth; using maxval = %d\n", + procName, val, maxval); + val = maxval; + } + } + + /* Set up word to tile with */ + wordval = 0; + npix = 32 / d; /* number of pixels per 32 bit word */ + for (j = 0; j < npix; j++) + wordval |= (val << (j * d)); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + *(line + j) = wordval; + } + } + return 0; +} + + +/*! + * \brief pixSetBlackOrWhite() + * + * \param[in] pixs all depths; cmap ok + * \param[in] op L_SET_BLACK, L_SET_WHITE + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Function for setting all pixels in an image to either black
+ *          or white.
+ *      (2) If pixs is colormapped, it adds black or white to the
+ *          colormap if it's not there and there is room.  If the colormap
+ *          is full, it finds the closest color in intensity.
+ *          This index is written to all pixels.
+ * 
+ */ +l_ok +pixSetBlackOrWhite(PIX *pixs, + l_int32 op) +{ +l_int32 d, index; +PIXCMAP *cmap; + + PROCNAME("pixSetBlackOrWhite"); + + if (!pixs) + return ERROR_INT("pix not defined", procName, 1); + if (op != L_SET_BLACK && op != L_SET_WHITE) + return ERROR_INT("invalid op", procName, 1); + + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + if (!cmap) { + if ((d == 1 && op == L_SET_BLACK) || (d > 1 && op == L_SET_WHITE)) + pixSetAll(pixs); + else + pixClearAll(pixs); + } else { /* handle colormap */ + if (op == L_SET_BLACK) + pixcmapAddBlackOrWhite(cmap, 0, &index); + else /* L_SET_WHITE */ + pixcmapAddBlackOrWhite(cmap, 1, &index); + pixSetAllArbitrary(pixs, index); + } + + return 0; +} + + +/*! + * \brief pixSetComponentArbitrary() + * + * \param[in] pix 32 bpp + * \param[in] comp COLOR_RED, COLOR_GREEN, COLOR_BLUE, L_ALPHA_CHANNEL + * \param[in] val value to set this component + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) For example, this can be used to set the alpha component to opaque:
+ *              pixSetComponentArbitrary(pix, L_ALPHA_CHANNEL, 255)
+ * 
+ */ +l_ok +pixSetComponentArbitrary(PIX *pix, + l_int32 comp, + l_int32 val) +{ +l_int32 i, nwords; +l_uint32 mask1, mask2; +l_uint32 *data; + + PROCNAME("pixSetComponentArbitrary"); + + if (!pix || pixGetDepth(pix) != 32) + return ERROR_INT("pix not defined or not 32 bpp", procName, 1); + if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && + comp != L_ALPHA_CHANNEL) + return ERROR_INT("invalid component", procName, 1); + if (val < 0 || val > 255) + return ERROR_INT("val not in [0 ... 255]", procName, 1); + + mask1 = ~(255 << (8 * (3 - comp))); + mask2 = val << (8 * (3 - comp)); + nwords = pixGetHeight(pix) * pixGetWpl(pix); + data = pixGetData(pix); + for (i = 0; i < nwords; i++) { + data[i] &= mask1; /* clear out the component */ + data[i] |= mask2; /* insert the new component value */ + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Rectangular region clear/set/set-to-arbitrary-value * + *-------------------------------------------------------------*/ +/*! + * \brief pixClearInRect() + * + * \param[in] pix all depths; can be cmapped + * \param[in] box in which all pixels will be cleared + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Clears all data in rect to 0.  For 1 bpp, this is white;
+ *          for grayscale or color, this is black.
+ *      (2) Caution: for colormapped pix, this sets the color to the first
+ *          one in the colormap.  Be sure that this is the intended color!
+ * 
+ */ +l_ok +pixClearInRect(PIX *pix, + BOX *box) +{ +l_int32 x, y, w, h; + + PROCNAME("pixClearInRect"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pix, x, y, w, h, PIX_CLR, NULL, 0, 0); + return 0; +} + + +/*! + * \brief pixSetInRect() + * + * \param[in] pix all depths, can be cmapped + * \param[in] box in which all pixels will be set + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Sets all data in rect to 1.  For 1 bpp, this is black;
+ *          for grayscale or color, this is white.
+ *      (2) Caution: for colormapped pix, this sets the pixel value to the
+ *          maximum value supported by the colormap: 2^d - 1.  However, this
+ *          color may not be defined, because the colormap may not be full.
+ * 
+ */ +l_ok +pixSetInRect(PIX *pix, + BOX *box) +{ +l_int32 n, x, y, w, h; +PIXCMAP *cmap; + + PROCNAME("pixSetInRect"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if ((cmap = pixGetColormap(pix)) != NULL) { + n = pixcmapGetCount(cmap); + if (n < cmap->nalloc) /* cmap is not full */ + return ERROR_INT("cmap entry does not exist", procName, 1); + } + + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pix, x, y, w, h, PIX_SET, NULL, 0, 0); + return 0; +} + + +/*! + * \brief pixSetInRectArbitrary() + * + * \param[in] pix all depths; can be cmapped + * \param[in] box in which all pixels will be set to val + * \param[in] val value to set all pixels + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) For colormapped pix, be sure the value is the intended
+ *          one in the colormap.
+ *      (2) Caution: for colormapped pix, this sets each pixel in the
+ *          rect to the color at the index equal to val.  Be sure that
+ *          this index exists in the colormap and that it is the intended one!
+ * 
+ */ +l_ok +pixSetInRectArbitrary(PIX *pix, + BOX *box, + l_uint32 val) +{ +l_int32 n, x, y, xstart, xend, ystart, yend, bw, bh, w, h, d, wpl, maxval; +l_uint32 *data, *line; +BOX *boxc; +PIXCMAP *cmap; + + PROCNAME("pixSetInRectArbitrary"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d !=8 && d != 16 && d != 32) + return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); + if ((cmap = pixGetColormap(pix)) != NULL) { + n = pixcmapGetCount(cmap); + if (val >= n) { + L_WARNING("index not in colormap; using last color\n", procName); + val = n - 1; + } + } + + maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; + if (val > maxval) val = maxval; + + /* Handle the simple cases: the min and max values */ + if (val == 0) { + pixClearInRect(pix, box); + return 0; + } + if (d == 1 || + (d == 2 && val == 3) || + (d == 4 && val == 0xf) || + (d == 8 && val == 0xff) || + (d == 16 && val == 0xffff) || + (d == 32 && ((val ^ 0xffffff00) >> 8 == 0))) { + pixSetInRect(pix, box); + return 0; + } + + /* Find the overlap of box with the input pix */ + if ((boxc = boxClipToRectangle(box, w, h)) == NULL) + return ERROR_INT("no overlap of box with image", procName, 1); + boxGetGeometry(boxc, &xstart, &ystart, &bw, &bh); + xend = xstart + bw - 1; + yend = ystart + bh - 1; + boxDestroy(&boxc); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + for (y = ystart; y <= yend; y++) { + line = data + y * wpl; + for (x = xstart; x <= xend; x++) { + switch(d) + { + case 2: + SET_DATA_DIBIT(line, x, val); + break; + case 4: + SET_DATA_QBIT(line, x, val); + break; + case 8: + SET_DATA_BYTE(line, x, val); + break; + case 16: + SET_DATA_TWO_BYTES(line, x, val); + break; + case 32: + line[x] = val; + break; + default: + return ERROR_INT("depth not 2|4|8|16|32 bpp", procName, 1); + } + } + } + + return 0; +} + + +/*! + * \brief pixBlendInRect() + * + * \param[in] pixs 32 bpp rgb + * \param[in] box [optional] in which all pixels will be blended + * \param[in] val blend value; 0xrrggbb00 + * \param[in] fract fraction of color to be blended with each pixel in pixs + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place function.  It blends the input color %val
+ *          with the pixels in pixs in the specified rectangle.
+ *          If no rectangle is specified, it blends over the entire image.
+ * 
+ */ +l_ok +pixBlendInRect(PIX *pixs, + BOX *box, + l_uint32 val, + l_float32 fract) +{ +l_int32 i, j, bx, by, bw, bh, w, h, wpls; +l_int32 prval, pgval, pbval, rval, gval, bval; +l_uint32 val32; +l_uint32 *datas, *lines; + + PROCNAME("pixBlendInRect"); + + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + + extractRGBValues(val, &rval, &gval, &bval); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (!box) { + for (i = 0; i < h; i++) { /* scan over box */ + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val32 = *(lines + j); + extractRGBValues(val32, &prval, &pgval, &pbval); + prval = (l_int32)((1. - fract) * prval + fract * rval); + pgval = (l_int32)((1. - fract) * pgval + fract * gval); + pbval = (l_int32)((1. - fract) * pbval + fract * bval); + composeRGBPixel(prval, pgval, pbval, &val32); + *(lines + j) = val32; + } + } + return 0; + } + + boxGetGeometry(box, &bx, &by, &bw, &bh); + for (i = 0; i < bh; i++) { /* scan over box */ + if (by + i < 0 || by + i >= h) continue; + lines = datas + (by + i) * wpls; + for (j = 0; j < bw; j++) { + if (bx + j < 0 || bx + j >= w) continue; + val32 = *(lines + bx + j); + extractRGBValues(val32, &prval, &pgval, &pbval); + prval = (l_int32)((1. - fract) * prval + fract * rval); + pgval = (l_int32)((1. - fract) * pgval + fract * gval); + pbval = (l_int32)((1. - fract) * pbval + fract * bval); + composeRGBPixel(prval, pgval, pbval, &val32); + *(lines + bx + j) = val32; + } + } + return 0; +} + + +/*-------------------------------------------------------------* + * Set pad bits * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetPadBits() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] val 0 or 1 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The pad bits are the bits that expand each scanline to a
+ *          multiple of 32 bits.  They are usually not used in
+ *          image processing operations.  When boundary conditions
+ *          are important, as in seedfill, they must be set properly.
+ *      (2) This sets the value of the pad bits (if any) in the last
+ *          32-bit word in each scanline.
+ *      (3) For 32 bpp pix, there are no pad bits, so this is a no-op.
+ *      (4) When writing formatted output, such as tiff, png or jpeg,
+ *          the pad bits have no effect on the raster image that is
+ *          generated by reading back from the file.  However, in some
+ *          cases, the compressed file itself will depend on the pad
+ *          bits.  This is seen, for example, in Windows with 2 and 4 bpp
+ *          tiff-compressed images that have pad bits on each scanline.
+ *          It is sometimes convenient to use a golden file with a
+ *          byte-by-byte check to verify invariance.  Consequently,
+ *          and because setting the pad bits is cheap, the pad bits are
+ *          set to 0 before writing these compressed files.
+ * 
+ */ +l_ok +pixSetPadBits(PIX *pix, + l_int32 val) +{ +l_int32 i, w, h, d, wpl, endbits, fullwords; +l_uint32 mask; +l_uint32 *data, *pword; + + PROCNAME("pixSetPadBits"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (d == 32) /* no padding exists for 32 bpp */ + return 0; + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + endbits = 32 - (((l_int64)w * d) % 32); + if (endbits == 32) /* no partial word */ + return 0; + fullwords = (1LL * w * d) / 32; + mask = rmask32[endbits]; + if (val == 0) + mask = ~mask; + + for (i = 0; i < h; i++) { + pword = data + i * wpl + fullwords; + if (val == 0) /* clear */ + *pword = *pword & mask; + else /* set */ + *pword = *pword | mask; + } + + return 0; +} + + +/*! + * \brief pixSetPadBitsBand() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] by starting y value of band + * \param[in] bh height of band + * \param[in] val 0 or 1 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The pad bits are the bits that expand each scanline to a
+ *          multiple of 32 bits.  They are usually not used in
+ *          image processing operations.  When boundary conditions
+ *          are important, as in seedfill, they must be set properly.
+ *      (2) This sets the value of the pad bits (if any) in the last
+ *          32-bit word in each scanline, within the specified
+ *          band of raster lines.
+ *      (3) For 32 bpp pix, there are no pad bits, so this is a no-op.
+ * 
+ */ +l_ok +pixSetPadBitsBand(PIX *pix, + l_int32 by, + l_int32 bh, + l_int32 val) +{ +l_int32 i, w, h, d, wpl, endbits, fullwords; +l_uint32 mask; +l_uint32 *data, *pword; + + PROCNAME("pixSetPadBitsBand"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (d == 32) /* no padding exists for 32 bpp */ + return 0; + + if (by < 0) + by = 0; + if (by >= h) + return ERROR_INT("start y not in image", procName, 1); + if (by + bh > h) + bh = h - by; + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + endbits = 32 - (((l_int64)w * d) % 32); + if (endbits == 32) /* no partial word */ + return 0; + fullwords = (l_int64)w * d / 32; + + mask = rmask32[endbits]; + if (val == 0) + mask = ~mask; + + for (i = by; i < by + bh; i++) { + pword = data + i * wpl + fullwords; + if (val == 0) /* clear */ + *pword = *pword & mask; + else /* set */ + *pword = *pword | mask; + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Set border pixels * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetOrClearBorder() + * + * \param[in] pixs all depths + * \param[in] left, right, top, bot amount to set or clear + * \param[in] op operation PIX_SET or PIX_CLR + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The border region is defined to be the region in the
+ *          image within a specific distance of each edge.  Here, we
+ *          allow the pixels within a specified distance of each
+ *          edge to be set independently.  This either sets or
+ *          clears all pixels in the border region.
+ *      (2) For binary images, use PIX_SET for black and PIX_CLR for white.
+ *      (3) For grayscale or color images, use PIX_SET for white
+ *          and PIX_CLR for black.
+ * 
+ */ +l_ok +pixSetOrClearBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot, + l_int32 op) +{ +l_int32 w, h; + + PROCNAME("pixSetOrClearBorder"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (op != PIX_SET && op != PIX_CLR) + return ERROR_INT("op must be PIX_SET or PIX_CLR", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + pixRasterop(pixs, 0, 0, left, h, op, NULL, 0, 0); + pixRasterop(pixs, w - right, 0, right, h, op, NULL, 0, 0); + pixRasterop(pixs, 0, 0, w, top, op, NULL, 0, 0); + pixRasterop(pixs, 0, h - bot, w, bot, op, NULL, 0, 0); + + return 0; +} + + +/*! + * \brief pixSetBorderVal() + * + * \param[in] pixs 8, 16 or 32 bpp + * \param[in] left, right, top, bot amount to set + * \param[in] val value to set at each border pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The border region is defined to be the region in the
+ *          image within a specific distance of each edge.  Here, we
+ *          allow the pixels within a specified distance of each
+ *          edge to be set independently.  This sets the pixels
+ *          in the border region to the given input value.
+ *      (2) For efficiency, use pixSetOrClearBorder() if
+ *          you're setting the border to either black or white.
+ *      (3) If d != 32, the input value should be masked off
+ *          to the appropriate number of least significant bits.
+ *      (4) The code is easily generalized for 2 or 4 bpp.
+ * 
+ */ +l_ok +pixSetBorderVal(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot, + l_uint32 val) +{ +l_int32 w, h, d, wpls, i, j, bstart, rstart; +l_uint32 *datas, *lines; + + PROCNAME("pixSetBorderVal"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16 && d != 32) + return ERROR_INT("depth must be 8, 16 or 32 bpp", procName, 1); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (d == 8) { + val &= 0xff; + for (i = 0; i < top; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + SET_DATA_BYTE(lines, j, val); + } + rstart = w - right; + bstart = h - bot; + for (i = top; i < bstart; i++) { + lines = datas + i * wpls; + for (j = 0; j < left; j++) + SET_DATA_BYTE(lines, j, val); + for (j = rstart; j < w; j++) + SET_DATA_BYTE(lines, j, val); + } + for (i = bstart; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + SET_DATA_BYTE(lines, j, val); + } + } else if (d == 16) { + val &= 0xffff; + for (i = 0; i < top; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + SET_DATA_TWO_BYTES(lines, j, val); + } + rstart = w - right; + bstart = h - bot; + for (i = top; i < bstart; i++) { + lines = datas + i * wpls; + for (j = 0; j < left; j++) + SET_DATA_TWO_BYTES(lines, j, val); + for (j = rstart; j < w; j++) + SET_DATA_TWO_BYTES(lines, j, val); + } + for (i = bstart; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + SET_DATA_TWO_BYTES(lines, j, val); + } + } else { /* d == 32 */ + for (i = 0; i < top; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + *(lines + j) = val; + } + rstart = w - right; + bstart = h - bot; + for (i = top; i < bstart; i++) { + lines = datas + i * wpls; + for (j = 0; j < left; j++) + *(lines + j) = val; + for (j = rstart; j < w; j++) + *(lines + j) = val; + } + for (i = bstart; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) + *(lines + j) = val; + } + } + + return 0; +} + + +/*! + * \brief pixSetBorderRingVal() + * + * \param[in] pixs any depth; cmap OK + * \param[in] dist distance from outside; must be > 0; first ring is 1 + * \param[in] val value to set at each border pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The rings are single-pixel-wide rectangular sets of
+ *          pixels at a given distance from the edge of the pix.
+ *          This sets all pixels in a given ring to a value.
+ * 
+ */ +l_ok +pixSetBorderRingVal(PIX *pixs, + l_int32 dist, + l_uint32 val) +{ +l_int32 w, h, d, i, j, xend, yend; + + PROCNAME("pixSetBorderRingVal"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (dist < 1) + return ERROR_INT("dist must be > 0", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (w < 2 * dist + 1 || h < 2 * dist + 1) + return ERROR_INT("ring doesn't exist", procName, 1); + if (d < 32 && (val >= (1 << d))) + return ERROR_INT("invalid pixel value", procName, 1); + + xend = w - dist; + yend = h - dist; + for (j = dist - 1; j <= xend; j++) + pixSetPixel(pixs, j, dist - 1, val); + for (j = dist - 1; j <= xend; j++) + pixSetPixel(pixs, j, yend, val); + for (i = dist - 1; i <= yend; i++) + pixSetPixel(pixs, dist - 1, i, val); + for (i = dist - 1; i <= yend; i++) + pixSetPixel(pixs, xend, i, val); + + return 0; +} + + +/*! + * \brief pixSetMirroredBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels to set + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This applies what is effectively mirror boundary conditions
+ *          to a border region in the image.  It is in-place.
+ *      (2) This is useful for setting pixels near the border to a
+ *          value representative of the near pixels to the interior.
+ *      (3) The general pixRasterop() is used for an in-place operation here
+ *          because there is no overlap between the src and dest rectangles.
+ * 
+ */ +l_ok +pixSetMirroredBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h; + + PROCNAME("pixSetMirroredBorder"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + for (j = 0; j < left; j++) + pixRasterop(pixs, left - 1 - j, top, 1, h - top - bot, PIX_SRC, + pixs, left + j, top); + for (j = 0; j < right; j++) + pixRasterop(pixs, w - right + j, top, 1, h - top - bot, PIX_SRC, + pixs, w - right - 1 - j, top); + for (i = 0; i < top; i++) + pixRasterop(pixs, 0, top - 1 - i, w, 1, PIX_SRC, + pixs, 0, top + i); + for (i = 0; i < bot; i++) + pixRasterop(pixs, 0, h - bot + i, w, 1, PIX_SRC, + pixs, 0, h - bot - 1 - i); + + return 0; +} + + +/*! + * \brief pixCopyBorder() + * + * \param[in] pixd all depths; colormap ok; can be NULL + * \param[in] pixs same depth and size as pixd + * \param[in] left, right, top, bot number of pixels to copy + * \return pixd, or NULL on error if pixd is not defined + * + *
+ * Notes:
+ *      (1) pixd can be null, but otherwise it must be the same size
+ *          and depth as pixs.  Always returns pixd.
+ *      (2) This is useful in situations where by setting a few border
+ *          pixels we can avoid having to copy all pixels in pixs into
+ *          pixd as an initialization step for some operation.
+ *          Nevertheless, for safety, if making a new pixd, all the
+ *          non-border pixels are initialized to 0.
+ * 
+ */ +PIX * +pixCopyBorder(PIX *pixd, + PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 w, h; + + PROCNAME("pixCopyBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + + if (pixd) { + if (pixd == pixs) { + L_WARNING("same: nothing to do\n", procName); + return pixd; + } else if (!pixSizesEqual(pixs, pixd)) { + return (PIX *)ERROR_PTR("pixs and pixd sizes differ", + procName, pixd); + } + } else { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, pixd); + } + + pixGetDimensions(pixs, &w, &h, NULL); + pixRasterop(pixd, 0, 0, left, h, PIX_SRC, pixs, 0, 0); + pixRasterop(pixd, w - right, 0, right, h, PIX_SRC, pixs, w - right, 0); + pixRasterop(pixd, 0, 0, w, top, PIX_SRC, pixs, 0, 0); + pixRasterop(pixd, 0, h - bot, w, bot, PIX_SRC, pixs, 0, h - bot); + return pixd; +} + + + +/*-------------------------------------------------------------* + * Add and remove border * + *-------------------------------------------------------------*/ +/*! + * \brief pixAddBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] npix number of pixels to be added to each side + * \param[in] val value of added border pixels + * \return pixd with the added exterior pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixGetBlackOrWhiteVal() for values of black and white pixels.
+ * 
+ */ +PIX * +pixAddBorder(PIX *pixs, + l_int32 npix, + l_uint32 val) +{ + PROCNAME("pixAddBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (npix == 0) + return pixClone(pixs); + return pixAddBorderGeneral(pixs, npix, npix, npix, npix, val); +} + + +/*! + * \brief pixAddBlackOrWhiteBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \param[in] op L_GET_BLACK_VAL, L_GET_WHITE_VAL + * \return pixd with the added exterior pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixGetBlackOrWhiteVal() for possible side effect (adding
+ *          a color to a colormap).
+ *      (2) The only complication is that pixs may have a colormap.
+ *          There are two ways to add the black or white border:
+ *          (a) As done here (simplest, most efficient)
+ *          (b) l_int32 ws, hs, d;
+ *              pixGetDimensions(pixs, &ws, &hs, &d);
+ *              Pix *pixd = pixCreate(ws + left + right, hs + top + bot, d);
+ *              PixColormap *cmap = pixGetColormap(pixs);
+ *              if (cmap != NULL)
+ *                  pixSetColormap(pixd, pixcmapCopy(cmap));
+ *              pixSetBlackOrWhite(pixd, L_SET_WHITE);  // uses cmap
+ *              pixRasterop(pixd, left, top, ws, hs, PIX_SET, pixs, 0, 0);
+ * 
+ */ +PIX * +pixAddBlackOrWhiteBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot, + l_int32 op) +{ +l_uint32 val; + + PROCNAME("pixAddBlackOrWhiteBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) + return (PIX *)ERROR_PTR("invalid op", procName, NULL); + + pixGetBlackOrWhiteVal(pixs, op, &val); + return pixAddBorderGeneral(pixs, left, right, top, bot, val); +} + + +/*! + * \brief pixAddBorderGeneral() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \param[in] val value of added border pixels + * \return pixd with the added exterior pixels, or NULL on error + * + *
+ * Notes:
+ *      (1) For binary images:
+ *             white:  val = 0
+ *             black:  val = 1
+ *          For grayscale images:
+ *             white:  val = 2 ** d - 1
+ *             black:  val = 0
+ *          For rgb color images:
+ *             white:  val = 0xffffff00
+ *             black:  val = 0
+ *          For colormapped images, set val to the appropriate colormap index.
+ *      (2) If the added border is either black or white, you can use
+ *             pixAddBlackOrWhiteBorder()
+ *          The black and white values for all images can be found with
+ *             pixGetBlackOrWhiteVal()
+ *          which, if pixs is cmapped, may add an entry to the colormap.
+ *          Alternatively, if pixs has a colormap, you can find the index
+ *          of the pixel whose intensity is closest to white or black:
+ *             white: pixcmapGetRankIntensity(cmap, 1.0, &index);
+ *             black: pixcmapGetRankIntensity(cmap, 0.0, &index);
+ *          and use that for val.
+ * 
+ */ +PIX * +pixAddBorderGeneral(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot, + l_uint32 val) +{ +l_int32 ws, hs, wd, hd, d, maxval, op; +PIX *pixd; + + PROCNAME("pixAddBorderGeneral"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (left < 0 || right < 0 || top < 0 || bot < 0) + return (PIX *)ERROR_PTR("negative border added!", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, &d); + wd = ws + left + right; + hd = hs + top + bot; + if ((pixd = pixCreateNoInit(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + + /* Set the new border pixels */ + maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; + op = UNDEF; + if (val == 0) + op = PIX_CLR; + else if (val >= maxval) + op = PIX_SET; + if (op == UNDEF) { + pixSetAllArbitrary(pixd, val); + } else { /* just set or clear the border pixels */ + pixRasterop(pixd, 0, 0, left, hd, op, NULL, 0, 0); + pixRasterop(pixd, wd - right, 0, right, hd, op, NULL, 0, 0); + pixRasterop(pixd, 0, 0, wd, top, op, NULL, 0, 0); + pixRasterop(pixd, 0, hd - bot, wd, bot, op, NULL, 0, 0); + } + + /* Copy pixs into the interior */ + pixRasterop(pixd, left, top, ws, hs, PIX_SRC, pixs, 0, 0); + return pixd; +} + + +/*! + * \brief pixRemoveBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] npix number to be removed from each of the 4 sides + * \return pixd with pixels removed around border, or NULL on error + */ +PIX * +pixRemoveBorder(PIX *pixs, + l_int32 npix) +{ + PROCNAME("pixRemoveBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (npix == 0) + return pixClone(pixs); + return pixRemoveBorderGeneral(pixs, npix, npix, npix, npix); +} + + +/*! + * \brief pixRemoveBorderGeneral() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels removed + * \return pixd with pixels removed around border, or NULL on error + */ +PIX * +pixRemoveBorderGeneral(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 ws, hs, wd, hd, d; +PIX *pixd; + + PROCNAME("pixRemoveBorderGeneral"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (left < 0 || right < 0 || top < 0 || bot < 0) + return (PIX *)ERROR_PTR("negative border removed!", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, &d); + wd = ws - left - right; + hd = hs - top - bot; + if (wd <= 0) + return (PIX *)ERROR_PTR("width must be > 0", procName, NULL); + if (hd <= 0) + return (PIX *)ERROR_PTR("height must be > 0", procName, NULL); + if ((pixd = pixCreateNoInit(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopySpp(pixd, pixs); + pixCopyColormap(pixd, pixs); + + pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, left, top); + if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) + pixShiftAndTransferAlpha(pixd, pixs, -left, -top); + return pixd; +} + + +/*! + * \brief pixRemoveBorderToSize() + * + * \param[in] pixs all depths; colormap ok + * \param[in] wd target width; use 0 if only removing from height + * \param[in] hd target height; use 0 if only removing from width + * \return pixd with pixels removed around border, or NULL on error + * + *
+ * Notes:
+ *      (1) Removes pixels as evenly as possible from the sides of the
+ *          image, leaving the central part.
+ *      (2) Returns clone if no pixels requested removed, or the target
+ *          sizes are larger than the image.
+ * 
+ */ +PIX * +pixRemoveBorderToSize(PIX *pixs, + l_int32 wd, + l_int32 hd) +{ +l_int32 w, h, top, bot, left, right, delta; + + PROCNAME("pixRemoveBorderToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((wd <= 0 || wd >= w) && (hd <= 0 || hd >= h)) + return pixClone(pixs); + + left = right = (w - wd) / 2; + delta = w - 2 * left - wd; + right += delta; + top = bot = (h - hd) / 2; + delta = h - hd - 2 * top; + bot += delta; + if (wd <= 0 || wd > w) + left = right = 0; + else if (hd <= 0 || hd > h) + top = bot = 0; + + return pixRemoveBorderGeneral(pixs, left, right, top, bot); +} + + +/*! + * \brief pixAddMirroredBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies what is effectively mirror boundary conditions.
+ *          For the added border pixels in pixd, the pixels in pixs
+ *          near the border are mirror-copied into the border region.
+ *      (2) This is useful for avoiding special operations near
+ *          boundaries when doing image processing operations
+ *          such as rank filters and convolution.  In use, one first
+ *          adds mirrored pixels to each side of the image.  The number
+ *          of pixels added on each side is half the filter dimension.
+ *          Then the image processing operations proceed over a
+ *          region equal to the size of the original image, and
+ *          write directly into a dest pix of the same size as pixs.
+ *      (3) The general pixRasterop() is used for an in-place operation here
+ *          because there is no overlap between the src and dest rectangles.
+ * 
+ */ +PIX * +pixAddMirroredBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h; +PIX *pixd; + + PROCNAME("pixAddMirroredBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (left > w || right > w || top > h || bot > h) + return (PIX *)ERROR_PTR("border too large", procName, NULL); + + /* Set pixels on left, right, top and bottom, in that order */ + pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); + for (j = 0; j < left; j++) + pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, + pixd, left + j, top); + for (j = 0; j < right; j++) + pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, + pixd, left + w - 1 - j, top); + for (i = 0; i < top; i++) + pixRasterop(pixd, 0, top - 1 - i, left + w + right, 1, PIX_SRC, + pixd, 0, top + i); + for (i = 0; i < bot; i++) + pixRasterop(pixd, 0, top + h + i, left + w + right, 1, PIX_SRC, + pixd, 0, top + h - 1 - i); + + return pixd; +} + + +/*! + * \brief pixAddRepeatedBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies a repeated border, as if the central part of
+ *          the image is tiled over the plane.  So, for example, the
+ *          pixels in the left border come from the right side of the image.
+ *      (2) The general pixRasterop() is used for an in-place operation here
+ *          because there is no overlap between the src and dest rectangles.
+ * 
+ */ +PIX * +pixAddRepeatedBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 w, h; +PIX *pixd; + + PROCNAME("pixAddRepeatedBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (left > w || right > w || top > h || bot > h) + return (PIX *)ERROR_PTR("border too large", procName, NULL); + + pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); + + /* Set pixels on left, right, top and bottom, in that order */ + pixRasterop(pixd, 0, top, left, h, PIX_SRC, pixd, w, top); + pixRasterop(pixd, left + w, top, right, h, PIX_SRC, pixd, left, top); + pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); + pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); + + return pixd; +} + + +/*! + * \brief pixAddMixedBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies mirrored boundary conditions horizontally
+ *          and repeated b.c. vertically.
+ *      (2) It is specifically used for avoiding special operations
+ *          near boundaries when convolving a hue-saturation histogram
+ *          with a given window size.  The repeated b.c. are used
+ *          vertically for hue, and the mirrored b.c. are used
+ *          horizontally for saturation.  The number of pixels added
+ *          on each side is approximately (but not quite) half the
+ *          filter dimension.  The image processing operations can
+ *          then proceed over a region equal to the size of the original
+ *          image, and write directly into a dest pix of the same
+ *          size as pixs.
+ *      (3) The general pixRasterop() can be used for an in-place
+ *          operation here because there is no overlap between the
+ *          src and dest rectangles.
+ * 
+ */ +PIX * +pixAddMixedBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 j, w, h; +PIX *pixd; + + PROCNAME("pixAddMixedBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (left > w || right > w || top > h || bot > h) + return (PIX *)ERROR_PTR("border too large", procName, NULL); + + /* Set mirrored pixels on left and right; + * then set repeated pixels on top and bottom. */ + pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); + for (j = 0; j < left; j++) + pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, + pixd, left + j, top); + for (j = 0; j < right; j++) + pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, + pixd, left + w - 1 - j, top); + pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); + pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); + + return pixd; +} + + +/*! + * \brief pixAddContinuedBorder() + * + * \param[in] pixs all depths; colormap ok + * \param[in] left, right, top, bot pixels on each side to be added + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This adds pixels on each side whose values are equal to
+ *          the value on the closest boundary pixel.
+ * 
+ */ +PIX * +pixAddContinuedBorder(PIX *pixs, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot) +{ +l_int32 i, j, w, h; +PIX *pixd; + + PROCNAME("pixAddContinuedBorder"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); + pixGetDimensions(pixs, &w, &h, NULL); + for (j = 0; j < left; j++) + pixRasterop(pixd, j, top, 1, h, PIX_SRC, pixd, left, top); + for (j = 0; j < right; j++) + pixRasterop(pixd, left + w + j, top, 1, h, + PIX_SRC, pixd, left + w - 1, top); + for (i = 0; i < top; i++) + pixRasterop(pixd, 0, i, left + w + right, 1, PIX_SRC, pixd, 0, top); + for (i = 0; i < bot; i++) + pixRasterop(pixd, 0, top + h + i, left + w + right, 1, + PIX_SRC, pixd, 0, top + h - 1); + + return pixd; +} + + +/*-------------------------------------------------------------------* + * Helper functions using alpha * + *-------------------------------------------------------------------*/ +/*! + * \brief pixShiftAndTransferAlpha() + * + * \param[in] pixd 32 bpp + * \param[in] pixs 32 bpp + * \param[in] shiftx, shifty + * \return 0 if OK; 1 on error + */ +l_ok +pixShiftAndTransferAlpha(PIX *pixd, + PIX *pixs, + l_float32 shiftx, + l_float32 shifty) +{ +l_int32 w, h; +PIX *pix1, *pix2; + + PROCNAME("pixShiftAndTransferAlpha"); + + if (!pixs || !pixd) + return ERROR_INT("pixs and pixd not both defined", procName, 1); + if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) + return ERROR_INT("pixs not 32 bpp and 4 spp", procName, 1); + if (pixGetDepth(pixd) != 32) + return ERROR_INT("pixd not 32 bpp", procName, 1); + + if (shiftx == 0 && shifty == 0) { + pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); + return 0; + } + + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pixGetDimensions(pixd, &w, &h, NULL); + pix2 = pixCreate(w, h, 8); + pixRasterop(pix2, 0, 0, w, h, PIX_SRC, pix1, -shiftx, -shifty); + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + return 0; +} + + +/*! + * \brief pixDisplayLayersRGBA() + * + * \param[in] pixs cmap or 32 bpp rgba + * \param[in] val 32 bit unsigned color to use as background + * \param[in] maxw max output image width; 0 for no scaling + * \return pixd showing various image views, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %val == 0xffffff00 for white background.
+ *      (2) Three views are given:
+ *           ~ the image with a fully opaque alpha
+ *           ~ the alpha layer
+ *           ~ the image as it would appear with a white background.
+ * 
+ */ +PIX * +pixDisplayLayersRGBA(PIX *pixs, + l_uint32 val, + l_int32 maxw) +{ +l_int32 w, width; +l_float32 scalefact; +PIX *pix1, *pix2, *pixd; +PIXA *pixa; +PIXCMAP *cmap; + + PROCNAME("pixDisplayLayersRGBA"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + cmap = pixGetColormap(pixs); + if (!cmap && !(pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4)) + return (PIX *)ERROR_PTR("pixs not cmap and not 32 bpp rgba", + procName, NULL); + if ((w = pixGetWidth(pixs)) == 0) + return (PIX *)ERROR_PTR("pixs width 0 !!", procName, NULL); + + if (cmap) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); + else + pix1 = pixCopy(NULL, pixs); + + /* Scale if necessary so the output width is not larger than maxw */ + scalefact = (maxw == 0) ? 1.0 : L_MIN(1.0, (l_float32)(maxw) / w); + width = (l_int32)(scalefact * w); + + pixa = pixaCreate(3); + pixSetSpp(pix1, 3); + pixaAddPix(pixa, pix1, L_INSERT); /* show the rgb values */ + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixa, pix2, L_INSERT); /* show the alpha channel */ + pixDestroy(&pix1); + pix1 = pixAlphaBlendUniform(pixs, (val & 0xffffff00)); + pixaAddPix(pixa, pix1, L_INSERT); /* with %val color bg showing */ + pixd = pixaDisplayTiledInRows(pixa, 32, width, scalefact, 0, 25, 2); + pixaDestroy(&pixa); + return pixd; +} + + +/*-------------------------------------------------------------* + * Color sample setting and extraction * + *-------------------------------------------------------------*/ +/*! + * \brief pixCreateRGBImage() + * + * \param[in] pixr 8 bpp red pix + * \param[in] pixg 8 bpp green pix + * \param[in] pixb 8 bpp blue pix + * \return 32 bpp pix, interleaved with 4 samples/pixel, + * or NULL on error + * + *
+ * Notes:
+ *      (1) the 4th byte, sometimes called the "alpha channel",
+ *          and which is often used for blending between different
+ *          images, is left with 0 value.
+ *      (2) see Note (4) in pix.h for details on storage of
+ *          8-bit samples within each 32-bit word.
+ *      (3) This implementation, setting the r, g and b components
+ *          sequentially, is much faster than setting them in parallel
+ *          by constructing an RGB dest pixel and writing it to dest.
+ *          The reason is there are many more cache misses when reading
+ *          from 3 input images simultaneously.
+ * 
+ */ +PIX * +pixCreateRGBImage(PIX *pixr, + PIX *pixg, + PIX *pixb) +{ +l_int32 wr, wg, wb, hr, hg, hb, dr, dg, db; +PIX *pixd; + + PROCNAME("pixCreateRGBImage"); + + if (!pixr) + return (PIX *)ERROR_PTR("pixr not defined", procName, NULL); + if (!pixg) + return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); + if (!pixb) + return (PIX *)ERROR_PTR("pixb not defined", procName, NULL); + pixGetDimensions(pixr, &wr, &hr, &dr); + pixGetDimensions(pixg, &wg, &hg, &dg); + pixGetDimensions(pixb, &wb, &hb, &db); + if (dr != 8 || dg != 8 || db != 8) + return (PIX *)ERROR_PTR("input pix not all 8 bpp", procName, NULL); + if (wr != wg || wr != wb) + return (PIX *)ERROR_PTR("widths not the same", procName, NULL); + if (hr != hg || hr != hb) + return (PIX *)ERROR_PTR("heights not the same", procName, NULL); + + if ((pixd = pixCreate(wr, hr, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixr); + pixSetRGBComponent(pixd, pixr, COLOR_RED); + pixSetRGBComponent(pixd, pixg, COLOR_GREEN); + pixSetRGBComponent(pixd, pixb, COLOR_BLUE); + + return pixd; +} + + +/*! + * \brief pixGetRGBComponent() + * + * \param[in] pixs 32 bpp, or colormapped + * \param[in] comp one of {COLOR_RED, COLOR_GREEN, COLOR_BLUE, + * L_ALPHA_CHANNEL} + * \return pixd the selected 8 bpp component image of the + * input 32 bpp image or NULL on error + * + *
+ * Notes:
+ *      (1) Three calls to this function generate the r, g and b 8 bpp
+ *          component images.  This is much faster than generating the
+ *          three images in parallel, by extracting a src pixel and setting
+ *          the pixels of each component image from it.  The reason is
+ *          there are many more cache misses when writing to three
+ *          output images simultaneously.
+ * 
+ */ +PIX * +pixGetRGBComponent(PIX *pixs, + l_int32 comp) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *lines, *lined; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixGetRGBComponent"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return pixGetRGBComponentCmap(pixs, comp); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (comp != COLOR_RED && comp != COLOR_GREEN && + comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) + return (PIX *)ERROR_PTR("invalid comp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines + j, comp); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*! + * \brief pixSetRGBComponent() + * + * \param[in] pixd 32 bpp + * \param[in] pixs 8 bpp + * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, + * COLOR_BLUE, L_ALPHA_CHANNEL} + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This places the 8 bpp pixel in pixs into the
+ *          specified component (properly interleaved) in pixd,
+ *      (2) The two images are registered to the UL corner; the sizes
+ *          need not be the same, but a warning is issued if they differ.
+ * 
+ */ +l_ok +pixSetRGBComponent(PIX *pixd, + PIX *pixs, + l_int32 comp) +{ +l_uint8 srcbyte; +l_int32 i, j, w, h, ws, hs, wd, hd; +l_int32 wpls, wpld; +l_uint32 *lines, *lined; +l_uint32 *datas, *datad; + + PROCNAME("pixSetRGBComponent"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixd) != 32) + return ERROR_INT("pixd not 32 bpp", procName, 1); + if (pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not 8 bpp", procName, 1); + if (comp != COLOR_RED && comp != COLOR_GREEN && + comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) + return ERROR_INT("invalid comp", procName, 1); + pixGetDimensions(pixs, &ws, &hs, NULL); + pixGetDimensions(pixd, &wd, &hd, NULL); + if (ws != wd || hs != hd) + L_WARNING("images sizes not equal\n", procName); + w = L_MIN(ws, wd); + h = L_MIN(hs, hd); + if (comp == L_ALPHA_CHANNEL) + pixSetSpp(pixd, 4); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + srcbyte = GET_DATA_BYTE(lines, j); + SET_DATA_BYTE(lined + j, comp, srcbyte); + } + } + + return 0; +} + + +/*! + * \brief pixGetRGBComponentCmap() + * + * \param[in] pixs colormapped + * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, COLOR_BLUE} + * \return pixd the selected 8 bpp component image of the + * input cmapped image, or NULL on error + * + *
+ * Notes:
+ *      (1) In leptonica, we do not support alpha in colormaps.
+ * 
+ */ +PIX * +pixGetRGBComponentCmap(PIX *pixs, + l_int32 comp) +{ +l_int32 i, j, w, h, val, index; +l_int32 wplc, wpld; +l_uint32 *linec, *lined; +l_uint32 *datac, *datad; +PIX *pixc, *pixd; +PIXCMAP *cmap; +RGBA_QUAD *cta; + + PROCNAME("pixGetRGBComponentCmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if ((cmap = pixGetColormap(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixs not cmapped", procName, NULL); + if (comp == L_ALPHA_CHANNEL) + return (PIX *)ERROR_PTR("alpha in cmaps not supported", procName, NULL); + if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE) + return (PIX *)ERROR_PTR("invalid comp", procName, NULL); + + /* If not 8 bpp, make a cmapped 8 bpp pix */ + if (pixGetDepth(pixs) == 8) + pixc = pixClone(pixs); + else + pixc = pixConvertTo8(pixs, TRUE); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreateNoInit(w, h, 8)) == NULL) { + pixDestroy(&pixc); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + wplc = pixGetWpl(pixc); + wpld = pixGetWpl(pixd); + datac = pixGetData(pixc); + datad = pixGetData(pixd); + cta = (RGBA_QUAD *)cmap->array; + + for (i = 0; i < h; i++) { + linec = datac + i * wplc; + lined = datad + i * wpld; + if (comp == COLOR_RED) { + for (j = 0; j < w; j++) { + index = GET_DATA_BYTE(linec, j); + val = cta[index].red; + SET_DATA_BYTE(lined, j, val); + } + } else if (comp == COLOR_GREEN) { + for (j = 0; j < w; j++) { + index = GET_DATA_BYTE(linec, j); + val = cta[index].green; + SET_DATA_BYTE(lined, j, val); + } + } else if (comp == COLOR_BLUE) { + for (j = 0; j < w; j++) { + index = GET_DATA_BYTE(linec, j); + val = cta[index].blue; + SET_DATA_BYTE(lined, j, val); + } + } + } + + pixDestroy(&pixc); + return pixd; +} + + +/*! + * \brief pixCopyRGBComponent() + * + * \param[in] pixd 32 bpp + * \param[in] pixs 32 bpp + * \param[in] comp one of the set: {COLOR_RED, COLOR_GREEN, + * COLOR_BLUE, L_ALPHA_CHANNEL} + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The two images are registered to the UL corner.  The sizes
+ *          are usually the same, and a warning is issued if they differ.
+ * 
+ */ +l_ok +pixCopyRGBComponent(PIX *pixd, + PIX *pixs, + l_int32 comp) +{ +l_int32 i, j, w, h, ws, hs, wd, hd, val; +l_int32 wpls, wpld; +l_uint32 *lines, *lined; +l_uint32 *datas, *datad; + + PROCNAME("pixCopyRGBComponent"); + + if (!pixd && pixGetDepth(pixd) != 32) + return ERROR_INT("pixd not defined or not 32 bpp", procName, 1); + if (!pixs && pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (comp != COLOR_RED && comp != COLOR_GREEN && + comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) + return ERROR_INT("invalid component", procName, 1); + pixGetDimensions(pixs, &ws, &hs, NULL); + pixGetDimensions(pixd, &wd, &hd, NULL); + if (ws != wd || hs != hd) + L_WARNING("images sizes not equal\n", procName); + w = L_MIN(ws, wd); + h = L_MIN(hs, hd); + if (comp == L_ALPHA_CHANNEL) + pixSetSpp(pixd, 4); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines + j, comp); + SET_DATA_BYTE(lined + j, comp, val); + } + } + return 0; +} + + +/*! + * \brief composeRGBPixel() + * + * \param[in] rval, gval, bval + * \param[out] ppixel 32-bit pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) All channels are 8 bits: the input values must be between
+ *          0 and 255.  For speed, this is not enforced by masking
+ *          with 0xff before shifting.
+ *      (2) A slower implementation uses macros:
+ *            SET_DATA_BYTE(ppixel, COLOR_RED, rval);
+ *            SET_DATA_BYTE(ppixel, COLOR_GREEN, gval);
+ *            SET_DATA_BYTE(ppixel, COLOR_BLUE, bval);
+ * 
+ */ +l_ok +composeRGBPixel(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_uint32 *ppixel) +{ + PROCNAME("composeRGBPixel"); + + if (!ppixel) + return ERROR_INT("&pixel not defined", procName, 1); + + *ppixel = ((l_uint32)rval << L_RED_SHIFT) | + ((l_uint32)gval << L_GREEN_SHIFT) | + ((l_uint32)bval << L_BLUE_SHIFT); + return 0; +} + + +/*! + * \brief composeRGBAPixel() + * + * \param[in] rval, gval, bval, aval + * \param[out] ppixel 32-bit pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) All channels are 8 bits: the input values must be between
+ *          0 and 255.  For speed, this is not enforced by masking
+ *          with 0xff before shifting.
+ * 
+ */ +l_ok +composeRGBAPixel(l_int32 rval, + l_int32 gval, + l_int32 bval, + l_int32 aval, + l_uint32 *ppixel) +{ + PROCNAME("composeRGBAPixel"); + + if (!ppixel) + return ERROR_INT("&pixel not defined", procName, 1); + + *ppixel = ((l_uint32)rval << L_RED_SHIFT) | + ((l_uint32)gval << L_GREEN_SHIFT) | + ((l_uint32)bval << L_BLUE_SHIFT) | + aval; + return 0; +} + + +/*! + * \brief extractRGBValues() + * + * \param[in] pixel 32 bit + * \param[out] prval [optional] red component + * \param[out] pgval [optional] green component + * \param[out] pbval [optional] blue component + * \return void + * + *
+ * Notes:
+ *      (1) A slower implementation uses macros:
+ *             *prval = GET_DATA_BYTE(&pixel, COLOR_RED);
+ *             *pgval = GET_DATA_BYTE(&pixel, COLOR_GREEN);
+ *             *pbval = GET_DATA_BYTE(&pixel, COLOR_BLUE);
+ * 
+ */ +void +extractRGBValues(l_uint32 pixel, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval) +{ + if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; + if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; + if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; + return; +} + + +/*! + * \brief extractRGBAValues() + * + * \param[in] pixel 32 bit + * \param[out] prval [optional] red component + * \param[out] pgval [optional] green component + * \param[out] pbval [optional] blue component + * \param[out] paval [optional] alpha component + * \return void + */ +void +extractRGBAValues(l_uint32 pixel, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval, + l_int32 *paval) +{ + if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; + if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; + if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; + if (paval) *paval = (pixel >> L_ALPHA_SHIFT) & 0xff; + return; +} + + +/*! + * \brief extractMinMaxComponent() + * + * \param[in] pixel 32 bpp RGB + * \param[in] type L_CHOOSE_MIN or L_CHOOSE_MAX + * \return component in range [0 ... 255], or NULL on error + */ +l_int32 +extractMinMaxComponent(l_uint32 pixel, + l_int32 type) +{ +l_int32 rval, gval, bval, val; + + extractRGBValues(pixel, &rval, &gval, &bval); + if (type == L_CHOOSE_MIN) { + val = L_MIN(rval, gval); + val = L_MIN(val, bval); + } else { /* type == L_CHOOSE_MAX */ + val = L_MAX(rval, gval); + val = L_MAX(val, bval); + } + return val; +} + + +/*! + * \brief pixGetRGBLine() + * + * \param[in] pixs 32 bpp + * \param[in] row + * \param[in] bufr array of red samples; size w bytes + * \param[in] bufg array of green samples; size w bytes + * \param[in] bufb array of blue samples; size w bytes + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This puts rgb components from the input line in pixs
+ *          into the given buffers.
+ * 
+ */ +l_ok +pixGetRGBLine(PIX *pixs, + l_int32 row, + l_uint8 *bufr, + l_uint8 *bufg, + l_uint8 *bufb) +{ +l_uint32 *lines; +l_int32 j, w, h; +l_int32 wpls; + + PROCNAME("pixGetRGBLine"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (!bufr || !bufg || !bufb) + return ERROR_INT("buffer not defined", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + if (row < 0 || row >= h) + return ERROR_INT("row out of bounds", procName, 1); + wpls = pixGetWpl(pixs); + lines = pixGetData(pixs) + row * wpls; + + for (j = 0; j < w; j++) { + bufr[j] = GET_DATA_BYTE(lines + j, COLOR_RED); + bufg[j] = GET_DATA_BYTE(lines + j, COLOR_GREEN); + bufb[j] = GET_DATA_BYTE(lines + j, COLOR_BLUE); + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Pixel endian conversion * + *-------------------------------------------------------------*/ +/*! + * \brief pixEndianByteSwapNew() + * + * \param[in] pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is used to convert the data in a pix to a
+ *          serialized byte buffer in raster order, and, for RGB,
+ *          in order RGBA.  This requires flipping bytes within
+ *          each 32-bit word for little-endian platforms, because the
+ *          words have a MSB-to-the-left rule, whereas byte raster-order
+ *          requires the left-most byte in each word to be byte 0.
+ *          For big-endians, no swap is necessary, so this returns a clone.
+ *      (2) Unlike pixEndianByteSwap(), which swaps the bytes in-place,
+ *          this returns a new pix (or a clone).  We provide this
+ *          because often when serialization is done, the source
+ *          pix needs to be restored to canonical little-endian order,
+ *          and this requires a second byte swap.  In such a situation,
+ *          it is twice as fast to make a new pix in big-endian order,
+ *          use it, and destroy it.
+ * 
+ */ +PIX * +pixEndianByteSwapNew(PIX *pixs) +{ +l_uint32 *datas, *datad; +l_int32 i, j, h, wpl; +l_uint32 word; +PIX *pixd; + + PROCNAME("pixEndianByteSwapNew"); + +#ifdef L_BIG_ENDIAN + + return pixClone(pixs); + +#else /* L_LITTLE_ENDIAN */ + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + datas = pixGetData(pixs); + wpl = pixGetWpl(pixs); + h = pixGetHeight(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + for (j = 0; j < wpl; j++, datas++, datad++) { + word = *datas; + *datad = (word >> 24) | + ((word >> 8) & 0x0000ff00) | + ((word << 8) & 0x00ff0000) | + (word << 24); + } + } + + return pixd; + +#endif /* L_BIG_ENDIAN */ + +} + + +/*! + * \brief pixEndianByteSwap() + * + * \param[in] pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used on little-endian platforms to swap
+ *          the bytes within a word; bytes 0 and 3 are swapped,
+ *          and bytes 1 and 2 are swapped.
+ *      (2) This is required for little-endians in situations
+ *          where we convert from a serialized byte order that is
+ *          in raster order, as one typically has in file formats,
+ *          to one with MSB-to-the-left in each 32-bit word, or v.v.
+ *          See pix.h for a description of the canonical format
+ *          (MSB-to-the left) that is used for both little-endian
+ *          and big-endian platforms.   For big-endians, the
+ *          MSB-to-the-left word order has the bytes in raster
+ *          order when serialized, so no byte flipping is required.
+ * 
+ */ +l_ok +pixEndianByteSwap(PIX *pixs) +{ +l_uint32 *data; +l_int32 i, j, h, wpl; +l_uint32 word; + + PROCNAME("pixEndianByteSwap"); + +#ifdef L_BIG_ENDIAN + + return 0; + +#else /* L_LITTLE_ENDIAN */ + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + h = pixGetHeight(pixs); + for (i = 0; i < h; i++) { + for (j = 0; j < wpl; j++, data++) { + word = *data; + *data = (word >> 24) | + ((word >> 8) & 0x0000ff00) | + ((word << 8) & 0x00ff0000) | + (word << 24); + } + } + + return 0; + +#endif /* L_BIG_ENDIAN */ + +} + + +/*! + * \brief lineEndianByteSwap() + * + * \param[in] datad dest byte array data, reordered on little-endians + * \param[in] datas a src line of pix data) + * \param[in] wpl number of 32 bit words in the line + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used on little-endian platforms to swap
+ *          the bytes within each word in the line of image data.
+ *          Bytes 0 <==> 3 and 1 <==> 2 are swapped in the dest
+ *          byte array data8d, relative to the pix data in datas.
+ *      (2) The bytes represent 8 bit pixel values.  They are swapped
+ *          for little endians so that when the dest array datad
+ *          is addressed by bytes, the pixels are chosen sequentially
+ *          from left to right in the image.
+ * 
+ */ +l_int32 +lineEndianByteSwap(l_uint32 *datad, + l_uint32 *datas, + l_int32 wpl) +{ +l_int32 j; +l_uint32 word; + + PROCNAME("lineEndianByteSwap"); + + if (!datad || !datas) + return ERROR_INT("datad and datas not both defined", procName, 1); + +#ifdef L_BIG_ENDIAN + + memcpy(datad, datas, 4 * wpl); + return 0; + +#else /* L_LITTLE_ENDIAN */ + + for (j = 0; j < wpl; j++, datas++, datad++) { + word = *datas; + *datad = (word >> 24) | + ((word >> 8) & 0x0000ff00) | + ((word << 8) & 0x00ff0000) | + (word << 24); + } + return 0; + +#endif /* L_BIG_ENDIAN */ + +} + + +/*! + * \brief pixEndianTwoByteSwapNew() + * + * \param[in] pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used on little-endian platforms to swap the
+ *          2-byte entities within a 32-bit word.
+ *      (2) This is equivalent to a full byte swap, as performed
+ *          by pixEndianByteSwap(), followed by byte swaps in
+ *          each of the 16-bit entities separately.
+ *      (3) Unlike pixEndianTwoByteSwap(), which swaps the shorts in-place,
+ *          this returns a new pix (or a clone).  We provide this
+ *          to avoid having to swap twice in situations where the input
+ *          pix must be restored to canonical little-endian order.
+ * 
+ */ +PIX * +pixEndianTwoByteSwapNew(PIX *pixs) +{ +l_uint32 *datas, *datad; +l_int32 i, j, h, wpl; +l_uint32 word; +PIX *pixd; + + PROCNAME("pixEndianTwoByteSwapNew"); + +#ifdef L_BIG_ENDIAN + + return pixClone(pixs); + +#else /* L_LITTLE_ENDIAN */ + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + datas = pixGetData(pixs); + wpl = pixGetWpl(pixs); + h = pixGetHeight(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + for (i = 0; i < h; i++) { + for (j = 0; j < wpl; j++, datas++, datad++) { + word = *datas; + *datad = (word << 16) | (word >> 16); + } + } + + return pixd; + +#endif /* L_BIG_ENDIAN */ + +} + + +/*! + * \brief pixEndianTwoByteSwap() + * + * \param[in] pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used on little-endian platforms to swap the
+ *          2-byte entities within a 32-bit word.
+ *      (2) This is equivalent to a full byte swap, as performed
+ *          by pixEndianByteSwap(), followed by byte swaps in
+ *          each of the 16-bit entities separately.
+ * 
+ */ +l_ok +pixEndianTwoByteSwap(PIX *pixs) +{ +l_uint32 *data; +l_int32 i, j, h, wpl; +l_uint32 word; + + PROCNAME("pixEndianTwoByteSwap"); + +#ifdef L_BIG_ENDIAN + + return 0; + +#else /* L_LITTLE_ENDIAN */ + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + h = pixGetHeight(pixs); + for (i = 0; i < h; i++) { + for (j = 0; j < wpl; j++, data++) { + word = *data; + *data = (word << 16) | (word >> 16); + } + } + + return 0; + +#endif /* L_BIG_ENDIAN */ + +} + + +/*-------------------------------------------------------------* + * Extract raster data as binary string * + *-------------------------------------------------------------*/ +/*! + * \brief pixGetRasterData() + * + * \param[in] pixs 1, 8, 32 bpp + * \param[out] pdata raster data in memory + * \param[out] pnbytes number of bytes in data string + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns the raster data as a byte string, padded to the
+ *          byte.  For 1 bpp, the first pixel is the MSbit in the first byte.
+ *          For rgb, the bytes are in (rgb) order.  This is the format
+ *          required for flate encoding of pixels in a PostScript file.
+ * 
+ */ +l_ok +pixGetRasterData(PIX *pixs, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_int32 w, h, d, wpl, i, j, rval, gval, bval; +l_int32 databpl; /* bytes for each raster line in returned data */ +l_uint8 *line, *data; /* packed data in returned array */ +l_uint32 *rline, *rdata; /* data in pix raster */ + + PROCNAME("pixGetRasterData"); + + if (pdata) *pdata = NULL; + if (pnbytes) *pnbytes = 0; + if (!pdata || !pnbytes) + return ERROR_INT("&data and &nbytes not both defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return ERROR_INT("depth not in {1,2,4,8,16,32}", procName, 1); + rdata = pixGetData(pixs); + wpl = pixGetWpl(pixs); + if (d == 1) + databpl = (w + 7) / 8; + else if (d == 2) + databpl = (w + 3) / 4; + else if (d == 4) + databpl = (w + 1) / 2; + else if (d == 8 || d == 16) + databpl = w * (d / 8); + else /* d == 32 bpp rgb */ + databpl = 3 * w; + if ((data = (l_uint8 *)LEPT_CALLOC((size_t)databpl * h, sizeof(l_uint8))) + == NULL) + return ERROR_INT("data not allocated", procName, 1); + *pdata = data; + *pnbytes = (size_t)databpl * h; + + for (i = 0; i < h; i++) { + rline = rdata + i * wpl; + line = data + i * databpl; + if (d <= 8) { + for (j = 0; j < databpl; j++) + line[j] = GET_DATA_BYTE(rline, j); + } else if (d == 16) { + for (j = 0; j < w; j++) + line[2 * j] = GET_DATA_TWO_BYTES(rline, j); + } else { /* d == 32 bpp rgb */ + for (j = 0; j < w; j++) { + extractRGBValues(rline[j], &rval, &gval, &bval); + *(line + 3 * j) = rval; + *(line + 3 * j + 1) = gval; + *(line + 3 * j + 2) = bval; + } + } + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Test alpha component opaqueness * + *-------------------------------------------------------------*/ +/*! + * \brief pixAlphaIsOpaque() + * + * \param[in] pix 32 bpp, spp == 4 + * \param[out] popaque 1 if spp == 4 and all alpha component + * values are 255 (opaque); 0 otherwise + * \return 0 if OK, 1 on error + * Notes: + * 1) On error, opaque is returned as 0 (FALSE). + */ +l_ok +pixAlphaIsOpaque(PIX *pix, + l_int32 *popaque) +{ +l_int32 w, h, wpl, i, j, alpha; +l_uint32 *data, *line; + + PROCNAME("pixAlphaIsOpaque"); + + if (!popaque) + return ERROR_INT("&opaque not defined", procName, 1); + *popaque = FALSE; + if (!pix) + return ERROR_INT("&pix not defined", procName, 1); + if (pixGetDepth(pix) != 32) + return ERROR_INT("&pix not 32 bpp", procName, 1); + if (pixGetSpp(pix) != 4) + return ERROR_INT("&pix not 4 spp", procName, 1); + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + pixGetDimensions(pix, &w, &h, NULL); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + alpha = GET_DATA_BYTE(line + j, L_ALPHA_CHANNEL); + if (alpha ^ 0xff) /* not opaque */ + return 0; + } + } + + *popaque = TRUE; + return 0; +} + + +/*-------------------------------------------------------------* + * Setup helpers for 8 bpp byte processing * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetupByteProcessing() + * + * \param[in] pix 8 bpp, no colormap + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \return line ptr array, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a simple helper for processing 8 bpp images with
+ *          direct byte access.  It can swap byte order within each word.
+ *      (2) After processing, you must call pixCleanupByteProcessing(),
+ *          which frees the lineptr array and restores byte order.
+ *      (3) Usage:
+ *              l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h);
+ *              for (i = 0; i < h; i++) {
+ *                  l_uint8 *line = lineptrs[i];
+ *                  for (j = 0; j < w; j++) {
+ *                      val = line[j];
+ *                      ...
+ *                  }
+ *              }
+ *              pixCleanupByteProcessing(pix, lineptrs);
+ * 
+ */ +l_uint8 ** +pixSetupByteProcessing(PIX *pix, + l_int32 *pw, + l_int32 *ph) +{ +l_int32 w, h; + + PROCNAME("pixSetupByteProcessing"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!pix || pixGetDepth(pix) != 8) + return (l_uint8 **)ERROR_PTR("pix not defined or not 8 bpp", + procName, NULL); + pixGetDimensions(pix, &w, &h, NULL); + if (pw) *pw = w; + if (ph) *ph = h; + if (pixGetColormap(pix)) + return (l_uint8 **)ERROR_PTR("pix has colormap", procName, NULL); + + pixEndianByteSwap(pix); + return (l_uint8 **)pixGetLinePtrs(pix, NULL); +} + + +/*! + * \brief pixCleanupByteProcessing() + * + * \param[in] pix 8 bpp, no colormap + * \param[in] lineptrs ptrs to the beginning of each raster line of data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This must be called after processing that was initiated
+ *          by pixSetupByteProcessing() has finished.
+ * 
+ */ +l_ok +pixCleanupByteProcessing(PIX *pix, + l_uint8 **lineptrs) +{ + PROCNAME("pixCleanupByteProcessing"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!lineptrs) + return ERROR_INT("lineptrs not defined", procName, 1); + + pixEndianByteSwap(pix); + LEPT_FREE(lineptrs); + return 0; +} + + +/*------------------------------------------------------------------------* + * Setting parameters for antialias masking with alpha transforms * + *------------------------------------------------------------------------*/ +/*! + * \brief l_setAlphaMaskBorder() + * + * \param[in] val1, val2 in [0.0 ... 1.0] + * \return void + * + *
+ * Notes:
+ *      (1) This sets the opacity values used to generate the two outer
+ *          boundary rings in the alpha mask associated with geometric
+ *          transforms such as pixRotateWithAlpha().
+ *      (2) The default values are val1 = 0.0 (completely transparent
+ *          in the outermost ring) and val2 = 0.5 (half transparent
+ *          in the second ring).  When the image is blended, this
+ *          completely removes the outer ring (shrinking the image by
+ *          2 in each direction), and alpha-blends with 0.5 the second ring.
+ *          Using val1 = 0.25 and val2 = 0.75 gives a slightly more
+ *          blurred border, with no perceptual difference at screen resolution.
+ *      (3) The actual mask values are found by multiplying these
+ *          normalized opacity values by 255.
+ * 
+ */ +void +l_setAlphaMaskBorder(l_float32 val1, + l_float32 val2) +{ + val1 = L_MAX(0.0, L_MIN(1.0, val1)); + val2 = L_MAX(0.0, L_MIN(1.0, val2)); + AlphaMaskBorderVals[0] = val1; + AlphaMaskBorderVals[1] = val2; +} diff --git a/3rdparty/hgOCR/leptonica/pix3.c b/3rdparty/hgOCR/leptonica/pix3.c new file mode 100644 index 00000000..39d171f1 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix3.c @@ -0,0 +1,3507 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pix3.c + *
+ *
+ *    This file has these operations:
+ *
+ *      (1) Mask-directed operations
+ *      (2) Full-image bit-logical operations
+ *      (3) Foreground pixel counting operations on 1 bpp images
+ *      (4) Average and variance of pixel values
+ *      (5) Mirrored tiling of a smaller image
+ *
+ *
+ *    Masked operations
+ *           l_int32     pixSetMasked()
+ *           l_int32     pixSetMaskedGeneral()
+ *           l_int32     pixCombineMasked()
+ *           l_int32     pixCombineMaskedGeneral()
+ *           l_int32     pixPaintThroughMask()
+ *           l_int32     pixCopyWithBoxa()  -- this is boxa-directed
+ *           PIX        *pixPaintSelfThroughMask()
+ *           PIX        *pixMakeMaskFromVal()
+ *           PIX        *pixMakeMaskFromLUT()
+ *           PIX        *pixMakeArbMaskFromRGB()
+ *           PIX        *pixSetUnderTransparency()
+ *           PIX        *pixMakeAlphaFromMask()
+ *           l_int32     pixGetColorNearMaskBoundary()
+ *
+ *    One and two-image boolean operations on arbitrary depth images
+ *           PIX        *pixInvert()
+ *           PIX        *pixOr()
+ *           PIX        *pixAnd()
+ *           PIX        *pixXor()
+ *           PIX        *pixSubtract()
+ *
+ *    Foreground pixel counting in 1 bpp images
+ *           l_int32     pixZero()
+ *           l_int32     pixForegroundFraction()
+ *           NUMA       *pixaCountPixels()
+ *           l_int32     pixCountPixels()
+ *           l_int32     pixCountPixelsInRect()
+ *           NUMA       *pixCountByRow()
+ *           NUMA       *pixCountByColumn()
+ *           NUMA       *pixCountPixelsByRow()
+ *           NUMA       *pixCountPixelsByColumn()
+ *           l_int32     pixCountPixelsInRow()
+ *           NUMA       *pixGetMomentByColumn()
+ *           l_int32     pixThresholdPixelSum()
+ *           l_int32    *makePixelSumTab8()
+ *           l_int32    *makePixelCentroidTab8()
+ *
+ *    Average of pixel values in gray images
+ *           NUMA       *pixAverageByRow()
+ *           NUMA       *pixAverageByColumn()
+ *           l_int32     pixAverageInRect()
+ *
+ *    Variance of pixel values in gray images
+ *           NUMA       *pixVarianceByRow()
+ *           NUMA       *pixVarianceByColumn()
+ *           l_int32     pixVarianceInRect()
+ *
+ *    Average of absolute value of pixel differences in gray images
+ *           NUMA       *pixAbsDiffByRow()
+ *           NUMA       *pixAbsDiffByColumn()
+ *           l_int32     pixAbsDiffInRect()
+ *           l_int32     pixAbsDiffOnLine()
+ *
+ *    Count of pixels with specific value
+ *           l_int32     pixCountArbInRect()
+ *
+ *    Mirrored tiling
+ *           PIX        *pixMirroredTiling()
+ *
+ *    Representative tile near but outside region
+ *           l_int32     pixFindRepCloseTile()
+ *
+ *    Static helper function
+ *           static BOXA    *findTileRegionsForSearch()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +static BOXA *findTileRegionsForSearch(BOX *box, l_int32 w, l_int32 h, + l_int32 searchdir, l_int32 mindist, + l_int32 tsize, l_int32 ntiles); + +#ifndef NO_CONSOLE_IO +#define EQUAL_SIZE_WARNING 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * Masked operations * + *-------------------------------------------------------------*/ +/*! + * \brief pixSetMasked() + * + * \param[in] pixd 1, 2, 4, 8, 16 or 32 bpp; or colormapped + * \param[in] pixm [optional] 1 bpp mask; no operation if NULL + * \param[in] val value to set at each masked pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation.
+ *      (2) NOTE: For cmapped images, this calls pixSetMaskedCmap().
+ *          %val must be the 32-bit color representation of the RGB pixel.
+ *          It is not the index into the colormap!
+ *      (2) If pixm == NULL, a warning is given.
+ *      (3) This is an implicitly aligned operation, where the UL
+ *          corners of pixd and pixm coincide.  A warning is
+ *          issued if the two image sizes differ significantly,
+ *          but the operation proceeds.
+ *      (4) Each pixel in pixd that co-locates with an ON pixel
+ *          in pixm is set to the specified input value.
+ *          Other pixels in pixd are not changed.
+ *      (5) You can visualize this as painting the color through
+ *          the mask, as a stencil.
+ *      (6) If you do not want to have the UL corners aligned,
+ *          use the function pixSetMaskedGeneral(), which requires
+ *          you to input the UL corner of pixm relative to pixd.
+ *      (7) Implementation details: see comments in pixPaintThroughMask()
+ *          for when we use rasterop to do the painting.
+ * 
+ */ +l_ok +pixSetMasked(PIX *pixd, + PIX *pixm, + l_uint32 val) +{ +l_int32 wd, hd, wm, hm, w, h, d, wpld, wplm; +l_int32 i, j, rval, gval, bval; +l_uint32 *datad, *datam, *lined, *linem; + + PROCNAME("pixSetMasked"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixm) { + L_WARNING("no mask; nothing to do\n", procName); + return 0; + } + if (pixGetColormap(pixd)) { + extractRGBValues(val, &rval, &gval, &bval); + return pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); + } + + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + d = pixGetDepth(pixd); + if (d == 1) + val &= 1; + else if (d == 2) + val &= 3; + else if (d == 4) + val &= 0x0f; + else if (d == 8) + val &= 0xff; + else if (d == 16) + val &= 0xffff; + else if (d != 32) + return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1); + pixGetDimensions(pixm, &wm, &hm, NULL); + + /* If d == 1, use rasterop; it's about 25x faster */ + if (d == 1) { + if (val == 0) { + PIX *pixmi = pixInvert(NULL, pixm); + pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmi, 0, 0); + pixDestroy(&pixmi); + } else { /* val == 1 */ + pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixm, 0, 0); + } + return 0; + } + + /* For d < 32, use rasterop for val == 0 (black); ~3x faster. */ + if (d < 32 && val == 0) { + PIX *pixmd = pixUnpackBinary(pixm, d, 1); + pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmd, 0, 0); + pixDestroy(&pixmd); + return 0; + } + + /* For d < 32, use rasterop for val == maxval (white); ~3x faster. */ + if (d < 32 && val == ((1 << d) - 1)) { + PIX *pixmd = pixUnpackBinary(pixm, d, 0); + pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixmd, 0, 0); + pixDestroy(&pixmd); + return 0; + } + + pixGetDimensions(pixd, &wd, &hd, &d); + w = L_MIN(wd, wm); + h = L_MIN(hd, hm); + if (L_ABS(wd - wm) > 7 || L_ABS(hd - hm) > 7) /* allow a small tolerance */ + L_WARNING("pixd and pixm sizes differ\n", procName); + + datad = pixGetData(pixd); + datam = pixGetData(pixm); + wpld = pixGetWpl(pixd); + wplm = pixGetWpl(pixm); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if (GET_DATA_BIT(linem, j)) { + switch(d) + { + case 2: + SET_DATA_DIBIT(lined, j, val); + break; + case 4: + SET_DATA_QBIT(lined, j, val); + break; + case 8: + SET_DATA_BYTE(lined, j, val); + break; + case 16: + SET_DATA_TWO_BYTES(lined, j, val); + break; + case 32: + *(lined + j) = val; + break; + default: + return ERROR_INT("shouldn't get here", procName, 1); + } + } + } + } + + return 0; +} + + +/*! + * \brief pixSetMaskedGeneral() + * + * \param[in] pixd 8, 16 or 32 bpp + * \param[in] pixm [optional] 1 bpp mask; no operation if null + * \param[in] val value to set at each masked pixel + * \param[in] x, y location of UL corner of pixm relative to pixd; + * can be negative + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place operation.
+ *      (2) Alignment is explicit.  If you want the UL corners of
+ *          the two images to be aligned, use pixSetMasked().
+ *      (3) A typical use would be painting through the foreground
+ *          of a small binary mask pixm, located somewhere on a
+ *          larger pixd.  Other pixels in pixd are not changed.
+ *      (4) You can visualize this as painting the color through
+ *          the mask, as a stencil.
+ *      (5) This uses rasterop to handle clipping and different depths of pixd.
+ *      (6) If pixd has a colormap, you should call pixPaintThroughMask().
+ *      (7) Why is this function here, if pixPaintThroughMask() does the
+ *          same thing, and does it more generally?  I've retained it here
+ *          to show how one can paint through a mask using only full
+ *          image rasterops, rather than pixel peeking in pixm and poking
+ *          in pixd.  It's somewhat baroque, but I found it amusing.
+ * 
+ */ +l_ok +pixSetMaskedGeneral(PIX *pixd, + PIX *pixm, + l_uint32 val, + l_int32 x, + l_int32 y) +{ +l_int32 wm, hm, d; +PIX *pixmu, *pixc; + + PROCNAME("pixSetMaskedGeneral"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixm) /* nothing to do */ + return 0; + + d = pixGetDepth(pixd); + if (d != 8 && d != 16 && d != 32) + return ERROR_INT("pixd not 8, 16 or 32 bpp", procName, 1); + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + + /* Unpack binary to depth d, with inversion: 1 --> 0, 0 --> 0xff... */ + if ((pixmu = pixUnpackBinary(pixm, d, 1)) == NULL) + return ERROR_INT("pixmu not made", procName, 1); + + /* Clear stenciled pixels in pixd */ + pixGetDimensions(pixm, &wm, &hm, NULL); + pixRasterop(pixd, x, y, wm, hm, PIX_SRC & PIX_DST, pixmu, 0, 0); + + /* Generate image with requisite color */ + if ((pixc = pixCreateTemplate(pixmu)) == NULL) { + pixDestroy(&pixmu); + return ERROR_INT("pixc not made", procName, 1); + } + pixSetAllArbitrary(pixc, val); + + /* Invert stencil mask, and paint color color into stencil */ + pixInvert(pixmu, pixmu); + pixAnd(pixmu, pixmu, pixc); + + /* Finally, repaint stenciled pixels, with val, in pixd */ + pixRasterop(pixd, x, y, wm, hm, PIX_SRC | PIX_DST, pixmu, 0, 0); + + pixDestroy(&pixmu); + pixDestroy(&pixc); + return 0; +} + + +/*! + * \brief pixCombineMasked() + * + * \param[in] pixd 1 bpp, 8 bpp gray or 32 bpp rgb; no cmap + * \param[in] pixs 1 bpp, 8 bpp gray or 32 bpp rgb; no cmap + * \param[in] pixm [optional] 1 bpp mask; no operation if NULL + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation; pixd is changed.
+ *      (2) This sets each pixel in pixd that co-locates with an ON
+ *          pixel in pixm to the corresponding value of pixs.
+ *      (3) pixs and pixd must be the same depth and not colormapped.
+ *      (4) All three input pix are aligned at the UL corner, and the
+ *          operation is clipped to the intersection of all three images.
+ *      (5) If pixm == NULL, it's a no-op.
+ *      (6) Implementation: see notes in pixCombineMaskedGeneral().
+ *          For 8 bpp selective masking, you might guess that it
+ *          would be faster to generate an 8 bpp version of pixm,
+ *          using pixConvert1To8(pixm, 0, 255), and then use a
+ *          general combine operation
+ *               d = (d & ~m) | (s & m)
+ *          on a word-by-word basis.  Not always.  The word-by-word
+ *          combine takes a time that is independent of the mask data.
+ *          If the mask is relatively sparse, the byte-check method
+ *          is actually faster!
+ * 
+ */ +l_ok +pixCombineMasked(PIX *pixd, + PIX *pixs, + PIX *pixm) +{ +l_int32 w, h, d, ws, hs, ds, wm, hm, dm, wmin, hmin; +l_int32 wpl, wpls, wplm, i, j, val; +l_uint32 *data, *datas, *datam, *line, *lines, *linem; +PIX *pixt; + + PROCNAME("pixCombineMasked"); + + if (!pixm) /* nothing to do */ + return 0; + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixd, &w, &h, &d); + pixGetDimensions(pixs, &ws, &hs, &ds); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (d != ds) + return ERROR_INT("pixs and pixd depths differ", procName, 1); + if (dm != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (d != 1 && d != 8 && d != 32) + return ERROR_INT("pixd not 1, 8 or 32 bpp", procName, 1); + if (pixGetColormap(pixd) || pixGetColormap(pixs)) + return ERROR_INT("pixs and/or pixd is cmapped", procName, 1); + + /* For d = 1, use rasterop. pixt is the part from pixs, under + * the fg of pixm, that is to be combined with pixd. We also + * use pixt to remove all fg of pixd that is under the fg of pixm. + * Then pixt and pixd are combined by ORing. */ + wmin = L_MIN(w, L_MIN(ws, wm)); + hmin = L_MIN(h, L_MIN(hs, hm)); + if (d == 1) { + pixt = pixAnd(NULL, pixs, pixm); + pixRasterop(pixd, 0, 0, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), + pixm, 0, 0); + pixRasterop(pixd, 0, 0, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); + pixDestroy(&pixt); + return 0; + } + + data = pixGetData(pixd); + datas = pixGetData(pixs); + datam = pixGetData(pixm); + wpl = pixGetWpl(pixd); + wpls = pixGetWpl(pixs); + wplm = pixGetWpl(pixm); + if (d == 8) { + for (i = 0; i < hmin; i++) { + line = data + i * wpl; + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < wmin; j++) { + if (GET_DATA_BIT(linem, j)) { + val = GET_DATA_BYTE(lines, j); + SET_DATA_BYTE(line, j, val); + } + } + } + } else { /* d == 32 */ + for (i = 0; i < hmin; i++) { + line = data + i * wpl; + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < wmin; j++) { + if (GET_DATA_BIT(linem, j)) + line[j] = lines[j]; + } + } + } + + return 0; +} + + +/*! + * \brief pixCombineMaskedGeneral() + * + * \param[in] pixd 1 bpp, 8 bpp gray or 32 bpp rgb + * \param[in] pixs 1 bpp, 8 bpp gray or 32 bpp rgb + * \param[in] pixm [optional] 1 bpp mask + * \param[in] x, y origin of pixs and pixm relative to pixd; can be negative + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation; pixd is changed.
+ *      (2) This is a generalized version of pixCombinedMasked(), where
+ *          the source and mask can be placed at the same (arbitrary)
+ *          location relative to pixd.
+ *      (3) pixs and pixd must be the same depth and not colormapped.
+ *      (4) The UL corners of both pixs and pixm are aligned with
+ *          the point (x, y) of pixd, and the operation is clipped to
+ *          the intersection of all three images.
+ *      (5) If pixm == NULL, it's a no-op.
+ *      (6) Implementation.  There are two ways to do these.  In the first,
+ *          we use rasterop, ORing the part of pixs under the mask
+ *          with pixd (which has been appropriately cleared there first).
+ *          In the second, the mask is used one pixel at a time to
+ *          selectively replace pixels of pixd with those of pixs.
+ *          Here, we use rasterop for 1 bpp and pixel-wise replacement
+ *          for 8 and 32 bpp.  To use rasterop for 8 bpp, for example,
+ *          we must first generate an 8 bpp version of the mask.
+ *          The code is simple:
+ *
+ *             Pix *pixm8 = pixConvert1To8(NULL, pixm, 0, 255);
+ *             Pix *pixt = pixAnd(NULL, pixs, pixm8);
+ *             pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC),
+ *                         pixm8, 0, 0);
+ *             pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST,
+ *                         pixt, 0, 0);
+ *             pixDestroy(&pixt);
+ *             pixDestroy(&pixm8);
+ * 
+ */ +l_ok +pixCombineMaskedGeneral(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y) +{ +l_int32 d, w, h, ws, hs, ds, wm, hm, dm, wmin, hmin; +l_int32 wpl, wpls, wplm, i, j, val; +l_uint32 *data, *datas, *datam, *line, *lines, *linem; +PIX *pixt; + + PROCNAME("pixCombineMaskedGeneral"); + + if (!pixm) /* nothing to do */ + return 0; + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixd, &w, &h, &d); + pixGetDimensions(pixs, &ws, &hs, &ds); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (d != ds) + return ERROR_INT("pixs and pixd depths differ", procName, 1); + if (dm != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (d != 1 && d != 8 && d != 32) + return ERROR_INT("pixd not 1, 8 or 32 bpp", procName, 1); + if (pixGetColormap(pixd) || pixGetColormap(pixs)) + return ERROR_INT("pixs and/or pixd is cmapped", procName, 1); + + /* For d = 1, use rasterop. pixt is the part from pixs, under + * the fg of pixm, that is to be combined with pixd. We also + * use pixt to remove all fg of pixd that is under the fg of pixm. + * Then pixt and pixd are combined by ORing. */ + wmin = L_MIN(ws, wm); + hmin = L_MIN(hs, hm); + if (d == 1) { + pixt = pixAnd(NULL, pixs, pixm); + pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), + pixm, 0, 0); + pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); + pixDestroy(&pixt); + return 0; + } + + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wplm = pixGetWpl(pixm); + datam = pixGetData(pixm); + + for (i = 0; i < hmin; i++) { + if (y + i < 0 || y + i >= h) continue; + line = data + (y + i) * wpl; + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < wmin; j++) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + switch (d) + { + case 8: + val = GET_DATA_BYTE(lines, j); + SET_DATA_BYTE(line, x + j, val); + break; + case 32: + *(line + x + j) = *(lines + j); + break; + default: + return ERROR_INT("shouldn't get here", procName, 1); + } + } + } + } + + return 0; +} + + +/*! + * \brief pixPaintThroughMask() + * + * \param[in] pixd 1, 2, 4, 8, 16 or 32 bpp; or colormapped + * \param[in] pixm [optional] 1 bpp mask + * \param[in] x, y origin of pixm relative to pixd; can be negative + * \param[in] val pixel value to set at each masked pixel + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation.  Calls pixSetMaskedCmap() for colormapped
+ *          images.
+ *      (2) For 1, 2, 4, 8 and 16 bpp gray, we take the appropriate
+ *          number of least significant bits of val.
+ *      (3) If pixm == NULL, it's a no-op.
+ *      (4) The mask origin is placed at (x,y) on pixd, and the
+ *          operation is clipped to the intersection of rectangles.
+ *      (5) For rgb, the components in val are in the canonical locations,
+ *          with red in location COLOR_RED, etc.
+ *      (6) Implementation detail 1:
+ *          For painting with val == 0 or val == maxval, you can use rasterop.
+ *          If val == 0, invert the mask so that it's 0 over the region
+ *          into which you want to write, and use PIX_SRC & PIX_DST to
+ *          clear those pixels.  To write with val = maxval (all 1's),
+ *          use PIX_SRC | PIX_DST to set all bits under the mask.
+ *      (7) Implementation detail 2:
+ *          The rasterop trick can be used for depth > 1 as well.
+ *          For val == 0, generate the mask for depth d from the binary
+ *          mask using
+ *              pixmd = pixUnpackBinary(pixm, d, 1);
+ *          and use pixRasterop() with PIX_MASK.  For val == maxval,
+ *              pixmd = pixUnpackBinary(pixm, d, 0);
+ *          and use pixRasterop() with PIX_PAINT.
+ *          But note that if d == 32 bpp, it is about 3x faster to use
+ *          the general implementation (not pixRasterop()).
+ *      (8) Implementation detail 3:
+ *          It might be expected that the switch in the inner loop will
+ *          cause large branching delays and should be avoided.
+ *          This is not the case, because the entrance is always the
+ *          same and the compiler can correctly predict the jump.
+ * 
+ */ +l_ok +pixPaintThroughMask(PIX *pixd, + PIX *pixm, + l_int32 x, + l_int32 y, + l_uint32 val) +{ +l_int32 d, w, h, wm, hm, wpl, wplm, i, j, rval, gval, bval; +l_uint32 *data, *datam, *line, *linem; + + PROCNAME("pixPaintThroughMask"); + + if (!pixm) /* nothing to do */ + return 0; + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixGetColormap(pixd)) { + extractRGBValues(val, &rval, &gval, &bval); + return pixSetMaskedCmap(pixd, pixm, x, y, rval, gval, bval); + } + + if (pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + d = pixGetDepth(pixd); + if (d == 1) + val &= 1; + else if (d == 2) + val &= 3; + else if (d == 4) + val &= 0x0f; + else if (d == 8) + val &= 0xff; + else if (d == 16) + val &= 0xffff; + else if (d != 32) + return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1); + pixGetDimensions(pixm, &wm, &hm, NULL); + + /* If d == 1, use rasterop; it's about 25x faster. */ + if (d == 1) { + if (val == 0) { + PIX *pixmi = pixInvert(NULL, pixm); + pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmi, 0, 0); + pixDestroy(&pixmi); + } else { /* val == 1 */ + pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixm, 0, 0); + } + return 0; + } + + /* For d < 32, use rasterop if val == 0 (black); ~3x faster. */ + if (d < 32 && val == 0) { + PIX *pixmd = pixUnpackBinary(pixm, d, 1); + pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmd, 0, 0); + pixDestroy(&pixmd); + return 0; + } + + /* For d < 32, use rasterop if val == maxval (white); ~3x faster. */ + if (d < 32 && val == ((1 << d) - 1)) { + PIX *pixmd = pixUnpackBinary(pixm, d, 0); + pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixmd, 0, 0); + pixDestroy(&pixmd); + return 0; + } + + /* All other cases */ + pixGetDimensions(pixd, &w, &h, NULL); + wpl = pixGetWpl(pixd); + data = pixGetData(pixd); + wplm = pixGetWpl(pixm); + datam = pixGetData(pixm); + for (i = 0; i < hm; i++) { + if (y + i < 0 || y + i >= h) continue; + line = data + (y + i) * wpl; + linem = datam + i * wplm; + for (j = 0; j < wm; j++) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + switch (d) + { + case 2: + SET_DATA_DIBIT(line, x + j, val); + break; + case 4: + SET_DATA_QBIT(line, x + j, val); + break; + case 8: + SET_DATA_BYTE(line, x + j, val); + break; + case 16: + SET_DATA_TWO_BYTES(line, x + j, val); + break; + case 32: + *(line + x + j) = val; + break; + default: + return ERROR_INT("shouldn't get here", procName, 1); + } + } + } + } + + return 0; +} + + +/*! + * \brief pixCopyWithBoxa() + * + * \param[in] pixs all depths; cmap ok + * \param[in] boxa e.g., from components of a photomask + * \param[in] background L_SET_WHITE or L_SET_BLACK + * \return pixd or NULL on error + * + *
+ * Notes:
+ *      (1) Pixels from pixs are copied ("blitted") through each box into pixd.
+ *      (2) Pixels not copied are preset to either white or black.
+ *      (3) This fast and simple implementation can use rasterop because
+ *          each region to be copied is rectangular.
+ *      (4) A much slower implemention that doesn't use rasterop would make
+ *          a 1 bpp mask from the boxa and then copy, pixel by pixel,
+ *          through the mask:
+ *             pixGetDimensions(pixs, &w, &h, NULL);
+ *             pixm = pixCreate(w, h, 1);
+ *             pixm = pixMaskBoxa(pixm, pixm, boxa);
+ *             pixd = pixCreateTemplate(pixs);
+ *             pixSetBlackOrWhite(pixd, background);
+ *             pixCombineMasked(pixd, pixs, pixm);
+ *             pixDestroy(&pixm);
+ * 
+ */ +PIX * +pixCopyWithBoxa(PIX *pixs, + BOXA *boxa, + l_int32 background) +{ +l_int32 i, n, x, y, w, h; +PIX *pixd; + + PROCNAME("pixCopyWithBoxa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); + if (background != L_SET_WHITE && background != L_SET_BLACK) + return (PIX *)ERROR_PTR("invalid background", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixSetBlackOrWhite(pixd, background); + n = boxaGetCount(boxa); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + pixRasterop(pixd, x, y, w, h, PIX_SRC, pixs, x, y); + } + return pixd; +} + + +/*! + * \brief pixPaintSelfThroughMask() + * + * \param[in] pixd 8 bpp gray or 32 bpp rgb; not colormapped + * \param[in] pixm 1 bpp mask + * \param[in] x, y origin of pixm relative to pixd; must not be negative + * \param[in] searchdir L_HORIZ, L_VERT or L_BOTH_DIRECTIONS + * \param[in] mindist min distance of nearest tile edge to box; >= 0 + * \param[in] tilesize requested size for tiling; may be reduced + * \param[in] ntiles number of tiles tested in each row/column + * \param[in] distblend distance outside the fg used for blending with pixs + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation; pixd is changed.
+ *      (2) If pixm == NULL, it's a no-op.
+ *      (3) The mask origin is placed at (x,y) on pixd, and the
+ *          operation is clipped to the intersection of pixd and the
+ *          fg of the mask.
+ *      (4) %tsize is the the requested size for tiling.  The actual
+ *          actual size for each c.c. will be bounded by the minimum
+ *          dimension of the c.c.
+ *      (5) For %mindist, %searchdir and %ntiles, see pixFindRepCloseTile().
+ *          They determine the set of possible tiles that can be used
+ *          to build a larger mirrored tile to paint onto pixd through
+ *          the c.c. of pixm.
+ *      (6) %distblend is used for alpha blending.  It is only applied
+ *          if there is exactly one c.c. in the mask.  Use distblend == 0
+ *          to skip blending and just paint through the 1 bpp mask.
+ *      (7) To apply blending to more than 1 component, call this function
+ *          repeatedly with %pixm, %x and %y representing one component of
+ *          the mask each time.  This would be done as follows, for an
+ *          underlying image pixs and mask pixm of components to fill:
+ *              Boxa *boxa = pixConnComp(pixm, &pixa, 8);
+ *              n = boxaGetCount(boxa);
+ *              for (i = 0; i < n; i++) {
+ *                  Pix *pix = pixaGetPix(pixa, i, L_CLONE);
+ *                  Box *box = pixaGetBox(pixa, i, L_CLONE);
+ *                  boxGetGeometry(box, &bx, &by, &bw, &bh);
+ *                  pixPaintSelfThroughMask(pixs, pix, bx, by, searchdir,
+ *                                     mindist, tilesize, ntiles, distblend);
+ *                  pixDestroy(&pix);
+ *                  boxDestroy(&box);
+ *              }
+ *              pixaDestroy(&pixa);
+ *              boxaDestroy(&boxa);
+ *      (8) If no tiles can be found, this falls back to estimating the
+ *          color near the boundary of the region to be textured.
+ *      (9) This can be used to replace the pixels in some regions of
+ *          an image by selected neighboring pixels.  The mask represents
+ *          the pixels to be replaced.  For each connected component in
+ *          the mask, this function selects up to two tiles of neighboring
+ *          pixels to be used for replacement of pixels represented by
+ *          the component (i.e., under the FG of that component in the mask).
+ *          After selection, mirror replication is used to generate an
+ *          image that is large enough to cover the component.  Alpha
+ *          blending can also be used outside of the component, but near the
+ *          edge, to blur the transition between painted and original pixels.
+ * 
+ */ +l_ok +pixPaintSelfThroughMask(PIX *pixd, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 searchdir, + l_int32 mindist, + l_int32 tilesize, + l_int32 ntiles, + l_int32 distblend) +{ +l_int32 w, h, d, wm, hm, dm, i, n, bx, by, bw, bh, edgeblend, retval, minside; +l_uint32 pixval; +BOX *box, *boxv, *boxh; +BOXA *boxa; +PIX *pixf, *pixv, *pixh, *pix1, *pix2, *pix3, *pix4, *pix5; +PIXA *pixa; + + PROCNAME("pixPaintSelfThroughMask"); + + if (!pixm) /* nothing to do */ + return 0; + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (pixGetColormap(pixd) != NULL) + return ERROR_INT("pixd has colormap", procName, 1); + pixGetDimensions(pixd, &w, &h, &d); + if (d != 8 && d != 32) + return ERROR_INT("pixd not 8 or 32 bpp", procName, 1); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (dm != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (x < 0 || y < 0) + return ERROR_INT("x and y must be non-negative", procName, 1); + if (searchdir != L_HORIZ && searchdir != L_VERT && + searchdir != L_BOTH_DIRECTIONS) + return ERROR_INT("invalid searchdir", procName, 1); + if (tilesize < 2) + return ERROR_INT("tilesize must be >= 2", procName, 1); + if (distblend < 0) + return ERROR_INT("distblend must be >= 0", procName, 1); + + /* Embed mask in full sized mask */ + if (wm < w || hm < h) { + pixf = pixCreate(w, h, 1); + pixRasterop(pixf, x, y, wm, hm, PIX_SRC, pixm, 0, 0); + } else { + pixf = pixCopy(NULL, pixm); + } + + /* Get connected components of mask */ + boxa = pixConnComp(pixf, &pixa, 8); + if ((n = pixaGetCount(pixa)) == 0) { + L_WARNING("no fg in mask\n", procName); + pixDestroy(&pixf); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + return 1; + } + boxaDestroy(&boxa); + + /* For each c.c., generate one or two representative tiles for + * texturizing and apply through the mask. The input 'tilesize' + * is the requested value. Note that if there is exactly one + * component, and blending at the edge is requested, an alpha mask + * is generated, which is larger than the bounding box of the c.c. */ + edgeblend = (n == 1 && distblend > 0) ? 1 : 0; + if (distblend > 0 && n > 1) + L_WARNING("%d components; can not blend at edges\n", procName, n); + retval = 0; + for (i = 0; i < n; i++) { + if (edgeblend) { + pix1 = pixMakeAlphaFromMask(pixf, distblend, &box); + } else { + pix1 = pixaGetPix(pixa, i, L_CLONE); + box = pixaGetBox(pixa, i, L_CLONE); + } + boxGetGeometry(box, &bx, &by, &bw, &bh); + minside = L_MIN(bw, bh); + + boxh = boxv = NULL; + if (searchdir == L_HORIZ || searchdir == L_BOTH_DIRECTIONS) { + pixFindRepCloseTile(pixd, box, L_HORIZ, mindist, + L_MIN(minside, tilesize), ntiles, &boxh, 0); + } + if (searchdir == L_VERT || searchdir == L_BOTH_DIRECTIONS) { + pixFindRepCloseTile(pixd, box, L_VERT, mindist, + L_MIN(minside, tilesize), ntiles, &boxv, 0); + } + if (!boxh && !boxv) { + L_WARNING("tile region not selected; paint color near boundary\n", + procName); + pixDestroy(&pix1); + pix1 = pixaGetPix(pixa, i, L_CLONE); + pixaGetBoxGeometry(pixa, i, &bx, &by, NULL, NULL); + retval = pixGetColorNearMaskBoundary(pixd, pixm, box, distblend, + &pixval, 0); + pixSetMaskedGeneral(pixd, pix1, pixval, bx, by); + pixDestroy(&pix1); + boxDestroy(&box); + continue; + } + + /* Extract the selected squares from pixd */ + pixh = (boxh) ? pixClipRectangle(pixd, boxh, NULL) : NULL; + pixv = (boxv) ? pixClipRectangle(pixd, boxv, NULL) : NULL; + if (pixh && pixv) + pix2 = pixBlend(pixh, pixv, 0, 0, 0.5); + else if (pixh) + pix2 = pixClone(pixh); + else /* pixv */ + pix2 = pixClone(pixv); + pixDestroy(&pixh); + pixDestroy(&pixv); + boxDestroy(&boxh); + boxDestroy(&boxv); + + /* Generate an image the size of the b.b. of the c.c., + * possibly extended by the blending distance, which + * is then either painted through the c.c. mask or + * blended using the alpha mask for that c.c. */ + pix3 = pixMirroredTiling(pix2, bw, bh); + if (edgeblend) { + pix4 = pixClipRectangle(pixd, box, NULL); + pix5 = pixBlendWithGrayMask(pix4, pix3, pix1, 0, 0); + pixRasterop(pixd, bx, by, bw, bh, PIX_SRC, pix5, 0, 0); + pixDestroy(&pix4); + pixDestroy(&pix5); + } else { + pixCombineMaskedGeneral(pixd, pix3, pix1, bx, by); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + boxDestroy(&box); + } + + pixaDestroy(&pixa); + pixDestroy(&pixf); + return retval; +} + + +/*! + * \brief pixMakeMaskFromVal() + * + * \param[in] pixs 2, 4 or 8 bpp; can be colormapped + * \param[in] val pixel value + * \return pixd 1 bpp mask, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a 1 bpp mask image, where a 1 is written in
+ *          the mask for each pixel in pixs that has a value %val.
+ *      (2) If no pixels have the value, an empty mask is generated.
+ * 
+ */ +PIX * +pixMakeMaskFromVal(PIX *pixs, + l_int32 val) +{ +l_int32 w, h, d, i, j, sval, wpls, wpld; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixMakeMaskFromVal"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("pix not 2, 4 or 8 bpp", procName, NULL); + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 2) + sval = GET_DATA_DIBIT(lines, j); + else if (d == 4) + sval = GET_DATA_QBIT(lines, j); + else /* d == 8 */ + sval = GET_DATA_BYTE(lines, j); + if (sval == val) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*! + * \brief pixMakeMaskFromLUT() + * + * \param[in] pixs 2, 4 or 8 bpp; can be colormapped + * \param[in] tab 256-entry LUT; 1 means to write to mask + * \return pixd 1 bpp mask, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a 1 bpp mask image, where a 1 is written in
+ *          the mask for each pixel in pixs that has a value corresponding
+ *          to a 1 in the LUT.
+ *      (2) The LUT should be of size 256.
+ * 
+ */ +PIX * +pixMakeMaskFromLUT(PIX *pixs, + l_int32 *tab) +{ +l_int32 w, h, d, i, j, val, wpls, wpld; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixMakeMaskFromLUT"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!tab) + return (PIX *)ERROR_PTR("tab not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("pix not 2, 4 or 8 bpp", procName, NULL); + + pixd = pixCreate(w, h, 1); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 2) + val = GET_DATA_DIBIT(lines, j); + else if (d == 4) + val = GET_DATA_QBIT(lines, j); + else /* d == 8 */ + val = GET_DATA_BYTE(lines, j); + if (tab[val] == 1) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*! + * \brief pixMakeArbMaskFromRGB() + * + * \param[in] pixs 32 bpp RGB + * \param[in] rc, gc, bc arithmetic factors; can be negative + * \param[in] thresh lower threshold on weighted sum of components + * \return pixd 1 bpp mask, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a 1 bpp mask image, where a 1 is written in
+ *          the mask for each pixel in pixs that satisfies
+ *               rc * rval + gc * gval + bc * bval > thresh
+ *          where rval is the red component, etc.
+ *      (2) Unlike with pixConvertToGray(), there are no constraints
+ *          on the color coefficients, which can be negative.  For
+ *          example, a mask that discriminates against red and in favor
+ *          of blue will have rc < 0.0 and bc > 0.0.
+ *      (3) To make the result independent of intensity (the 'V' in HSV),
+ *          select coefficients so that %thresh = 0.  Then the result
+ *          is not changed when all components are multiplied by the
+ *          same constant (as long as nothing saturates).  This can be
+ *          useful if, for example, the illumination is not uniform.
+ * 
+ */ +PIX * +pixMakeArbMaskFromRGB(PIX *pixs, + l_float32 rc, + l_float32 gc, + l_float32 bc, + l_float32 thresh) +{ +PIX *pix1, *pix2; + + PROCNAME("pixMakeArbMaskFromRGB"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (thresh >= 255.0) thresh = 254.0; /* avoid 8 bit overflow */ + + if ((pix1 = pixConvertRGBToGrayArb(pixs, rc, gc, bc)) == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + pix2 = pixThresholdToBinary(pix1, thresh + 1); + pixInvert(pix2, pix2); + pixDestroy(&pix1); + return pix2; +} + + +/*! + * \brief pixSetUnderTransparency() + * + * \param[in] pixs 32 bpp rgba + * \param[in] val 32 bit unsigned color to use where alpha == 0 + * \param[in] debug displays layers of pixs + * \return pixd 32 bpp rgba, or NULL on error + * + *
+ * Notes:
+ *      (1) This sets the r, g and b components under every fully
+ *          transparent alpha component to %val.  The alpha components
+ *          are unchanged.
+ *      (2) Full transparency is denoted by alpha == 0.  Setting
+ *          all pixels to a constant %val where alpha is transparent
+ *          can improve compressibility by reducing the entropy.
+ *      (3) The visual result depends on how the image is displayed.
+ *          (a) For display devices that respect the use of the alpha
+ *              layer, this will not affect the appearance.
+ *          (b) For typical leptonica operations, alpha is ignored,
+ *              so there will be a change in appearance because this
+ *              resets the rgb values in the fully transparent region.
+ *      (4) pixRead() and pixWrite() will, by default, read and write
+ *          4-component (rgba) pix in png format.  To ignore the alpha
+ *          component after reading, or omit it on writing, pixSetSpp(..., 3).
+ *      (5) Here are some examples:
+ *          * To convert all fully transparent pixels in a 4 component
+ *            (rgba) png file to white:
+ *              pixs = pixRead();
+ *              pixd = pixSetUnderTransparency(pixs, 0xffffff00, 0);
+ *          * To write pixd with the alpha component:
+ *              pixWrite(, pixd, IFF_PNG);
+ *          * To write and rgba image without the alpha component, first do:
+ *              pixSetSpp(pixd, 3);
+ *            If you later want to use the alpha, spp must be reset to 4.
+ *          * (fancier) To remove the alpha by blending the image over
+ *            a white background:
+ *              pixRemoveAlpha()
+ *            This changes all pixel values where the alpha component is
+ *            not opaque (255).
+ *      (6) Caution.  rgb images in leptonica typically have value 0 in
+ *          the alpha channel, which is fully transparent.  If spp for
+ *          such an image were changed from 3 to 4, the image becomes
+ *          fully transparent, and this function will set each pixel to %val.
+ *          If you really want to set every pixel to the same value,
+ *          use pixSetAllArbitrary().
+ *      (7) This is useful for compressing an RGBA image where the part
+ *          of the image that is fully transparent is random junk; compression
+ *          is typically improved by setting that region to a constant.
+ *          For rendering as a 3 component RGB image over a uniform
+ *          background of arbitrary color, use pixAlphaBlendUniform().
+ * 
+ */ +PIX * +pixSetUnderTransparency(PIX *pixs, + l_uint32 val, + l_int32 debug) +{ +PIX *pixg, *pixm, *pixt, *pixd; + + PROCNAME("pixSetUnderTransparency"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not defined or not 32 bpp", + procName, NULL); + + if (pixGetSpp(pixs) != 4) { + L_WARNING("no alpha channel; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + /* Make a mask from the alpha component with ON pixels + * wherever the alpha component is fully transparent (0). + * The hard way: + * l_int32 *lut = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + * lut[0] = 1; + * pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + * pixm = pixMakeMaskFromLUT(pixg, lut); + * LEPT_FREE(lut); + * But there's an easier way to set pixels in a mask where + * the alpha component is 0 ... */ + pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pixm = pixThresholdToBinary(pixg, 1); + + if (debug) { + pixt = pixDisplayLayersRGBA(pixs, 0xffffff00, 600); + pixDisplay(pixt, 0, 0); + pixDestroy(&pixt); + } + + pixd = pixCopy(NULL, pixs); + pixSetMasked(pixd, pixm, (val & 0xffffff00)); + pixDestroy(&pixg); + pixDestroy(&pixm); + return pixd; +} + + +/*! + * \brief pixMakeAlphaFromMask() + * + * \param[in] pixs 1 bpp + * \param[in] dist blending distance; typically 10 - 30 + * \param[out] pbox [optional] use NULL to get the full size + * \return pixd (8 bpp gray, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a 8 bpp alpha layer that is opaque (256)
+ *          over the FG of pixs, and goes transparent linearly away
+ *          from the FG pixels, decaying to 0 (transparent) is an
+ *          8-connected distance given by %dist.  If %dist == 0,
+ *          this does a simple conversion from 1 to 8 bpp.
+ *      (2) If &box == NULL, this returns an alpha mask that is the
+ *          full size of pixs.  Otherwise, the returned mask pixd covers
+ *          just the FG pixels of pixs, expanded by %dist in each
+ *          direction (if possible), and the returned box gives the
+ *          location of the returned mask relative to pixs.
+ *      (3) This is useful for painting through a mask and allowing
+ *          blending of the painted image with an underlying image
+ *          in the mask background for pixels near foreground mask pixels.
+ *          For example, with an underlying rgb image pix1, an overlaying
+ *          image rgb pix2, binary mask pixm, and dist > 0, this
+ *          blending is achieved with:
+ *              pix3 = pixMakeAlphaFromMask(pixm, dist, &box);
+ *              boxGetGeometry(box, &x, &y, NULL, NULL);
+ *              pix4 = pixBlendWithGrayMask(pix1, pix2, pix3, x, y);
+ * 
+ */ +PIX * +pixMakeAlphaFromMask(PIX *pixs, + l_int32 dist, + BOX **pbox) +{ +l_int32 w, h; +BOX *box1, *box2; +PIX *pix1, *pixd; + + PROCNAME("pixMakeAlphaFromMask"); + + if (pbox) *pbox = NULL; + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (dist < 0) + return (PIX *)ERROR_PTR("dist must be >= 0", procName, NULL); + + /* If requested, extract just the region to be affected by the mask */ + if (pbox) { + pixClipToForeground(pixs, NULL, &box1); + if (!box1) { + L_WARNING("no ON pixels in mask\n", procName); + return pixCreateTemplate(pixs); /* all background (0) */ + } + + boxAdjustSides(box1, box1, -dist, dist, -dist, dist); + pixGetDimensions(pixs, &w, &h, NULL); + box2 = boxClipToRectangle(box1, w, h); + *pbox = box2; + pix1 = pixClipRectangle(pixs, box2, NULL); + boxDestroy(&box1); + } else { + pix1 = pixCopy(NULL, pixs); + } + + if (dist == 0) { + pixd = pixConvert1To8(NULL, pix1, 0, 255); + pixDestroy(&pix1); + return pixd; + } + + /* Blur the boundary of the input mask */ + pixInvert(pix1, pix1); + pixd = pixDistanceFunction(pix1, 8, 8, L_BOUNDARY_FG); + pixMultConstantGray(pixd, 256.0 / dist); + pixInvert(pixd, pixd); + pixDestroy(&pix1); + return pixd; +} + + +/*! + * \brief pixGetColorNearMaskBoundary() + * + * \param[in] pixs 32 bpp rgb + * \param[in] pixm 1 bpp mask, full image + * \param[in] box region of mask; typically b.b. of a component + * \param[in] dist distance into BG from mask boundary to use + * \param[out] pval average pixel value + * \param[in] debug 1 to output mask images + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This finds the average color in a set of pixels that are
+ *          roughly a distance %dist from the c.c. boundary and in the
+ *          background of the mask image.
+ * 
+ */ +l_ok +pixGetColorNearMaskBoundary(PIX *pixs, + PIX *pixm, + BOX *box, + l_int32 dist, + l_uint32 *pval, + l_int32 debug) +{ +char op[64]; +l_int32 empty, bx, by; +l_float32 rval, gval, bval; +BOX *box1, *box2; +PIX *pix1, *pix2, *pix3; + + PROCNAME("pixGetColorNearMaskBoundary"); + + if (!pval) + return ERROR_INT("&pval not defined", procName, 1); + *pval = 0xffffff00; /* white */ + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs undefined or not 32 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm undefined or not 1 bpp", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (dist < 0) + return ERROR_INT("dist must be >= 0", procName, 1); + + /* Clip mask piece, expanded beyond %box by (%dist + 5) on each side. + * box1 is the region requested; box2 is the actual region retrieved, + * which is clipped to %pixm */ + box1 = boxAdjustSides(NULL, box, -dist - 5, dist + 5, -dist - 5, dist + 5); + pix1 = pixClipRectangle(pixm, box1, &box2); + + /* Expand FG by %dist into the BG */ + if (dist == 0) { + pix2 = pixCopy(NULL, pix1); + } else { + snprintf(op, sizeof(op), "d%d.%d", 2 * dist, 2 * dist); + pix2 = pixMorphSequence(pix1, op, 0); + } + + /* Expand again by 5 pixels on all sides (dilate 11x11) and XOR, + * getting the annulus of FG pixels between %dist and %dist + 5 */ + pix3 = pixCopy(NULL, pix2); + pixDilateBrick(pix3, pix3, 11, 11); + pixXor(pix3, pix3, pix2); + pixZero(pix3, &empty); + if (!empty) { + /* Scan the same region in %pixs, to get average under FG in pix3 */ + boxGetGeometry(box2, &bx, &by, NULL, NULL); + pixGetAverageMaskedRGB(pixs, pix3, bx, by, 1, L_MEAN_ABSVAL, + &rval, &gval, &bval); + composeRGBPixel((l_int32)(rval + 0.5), (l_int32)(gval + 0.5), + (l_int32)(bval + 0.5), pval); + } else { + L_WARNING("no pixels found\n", procName); + } + + if (debug) { + lept_rmdir("masknear"); /* erase previous images */ + lept_mkdir("masknear"); + pixWriteDebug("/tmp/masknear/input.png", pix1, IFF_PNG); + pixWriteDebug("/tmp/masknear/adjusted.png", pix2, IFF_PNG); + pixWriteDebug("/tmp/masknear/outerfive.png", pix3, IFF_PNG); + fprintf(stderr, "Input box; with adjusted sides; clipped\n"); + boxPrintStreamInfo(stderr, box); + boxPrintStreamInfo(stderr, box1); + boxPrintStreamInfo(stderr, box2); + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + boxDestroy(&box1); + boxDestroy(&box2); + return 0; +} + + +/*-------------------------------------------------------------* + * One and two-image boolean ops on arbitrary depth images * + *-------------------------------------------------------------*/ +/*! + * \brief pixInvert() + * + * \param[in] pixd [optional]; this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This inverts pixs, for all pixel depths.
+ *      (2) There are 3 cases:
+ *           (a) pixd == null,   ~src --> new pixd
+ *           (b) pixd == pixs,   ~src --> src  (in-place)
+ *           (c) pixd != pixs,   ~src --> input pixd
+ *      (3) For clarity, if the case is known, use these patterns:
+ *           (a) pixd = pixInvert(NULL, pixs);
+ *           (b) pixInvert(pixs, pixs);
+ *           (c) pixInvert(pixd, pixs);
+ * 
+ */ +PIX * +pixInvert(PIX *pixd, + PIX *pixs) +{ + PROCNAME("pixInvert"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), + PIX_NOT(PIX_DST), NULL, 0, 0); /* invert pixd */ + + return pixd; +} + + +/*! + * \brief pixOr() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, + * different from pixs1 + * \param[in] pixs1 can be == pixd + * \param[in] pixs2 must be != pixd + * \return pixd always + * + *
+ * Notes:
+ *      (1) This gives the union of two images with equal depth,
+ *          aligning them to the the UL corner.  pixs1 and pixs2
+ *          need not have the same width and height.
+ *      (2) There are 3 cases:
+ *            (a) pixd == null,   (src1 | src2) --> new pixd
+ *            (b) pixd == pixs1,  (src1 | src2) --> src1  (in-place)
+ *            (c) pixd != pixs1,  (src1 | src2) --> input pixd
+ *      (3) For clarity, if the case is known, use these patterns:
+ *            (a) pixd = pixOr(NULL, pixs1, pixs2);
+ *            (b) pixOr(pixs1, pixs1, pixs2);
+ *            (c) pixOr(pixd, pixs1, pixs2);
+ *      (4) The size of the result is determined by pixs1.
+ *      (5) The depths of pixs1 and pixs2 must be equal.
+ *      (6) Note carefully that the order of pixs1 and pixs2 only matters
+ *          for the in-place case.  For in-place, you must have
+ *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
+ *          result: the copy puts pixs1 image data in pixs2, and
+ *          the rasterop is then between pixs2 and pixs2 (a no-op).
+ * 
+ */ +PIX * +pixOr(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ + PROCNAME("pixOr"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixd == pixs2) + return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); + if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) + return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); + +#if EQUAL_SIZE_WARNING + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); +#endif /* EQUAL_SIZE_WARNING */ + + /* Prepare pixd to be a copy of pixs1 */ + if ((pixd = pixCopy(pixd, pixs1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, pixd); + + /* src1 | src2 --> dest */ + pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), + PIX_SRC | PIX_DST, pixs2, 0, 0); + + return pixd; +} + + +/*! + * \brief pixAnd() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, + * different from pixs1 + * \param[in] pixs1 can be == pixd + * \param[in] pixs2 must be != pixd + * \return pixd always + * + *
+ * Notes:
+ *      (1) This gives the intersection of two images with equal depth,
+ *          aligning them to the the UL corner.  pixs1 and pixs2
+ *          need not have the same width and height.
+ *      (2) There are 3 cases:
+ *            (a) pixd == null,   (src1 & src2) --> new pixd
+ *            (b) pixd == pixs1,  (src1 & src2) --> src1  (in-place)
+ *            (c) pixd != pixs1,  (src1 & src2) --> input pixd
+ *      (3) For clarity, if the case is known, use these patterns:
+ *            (a) pixd = pixAnd(NULL, pixs1, pixs2);
+ *            (b) pixAnd(pixs1, pixs1, pixs2);
+ *            (c) pixAnd(pixd, pixs1, pixs2);
+ *      (4) The size of the result is determined by pixs1.
+ *      (5) The depths of pixs1 and pixs2 must be equal.
+ *      (6) Note carefully that the order of pixs1 and pixs2 only matters
+ *          for the in-place case.  For in-place, you must have
+ *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
+ *          result: the copy puts pixs1 image data in pixs2, and
+ *          the rasterop is then between pixs2 and pixs2 (a no-op).
+ * 
+ */ +PIX * +pixAnd(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ + PROCNAME("pixAnd"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixd == pixs2) + return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); + if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) + return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); + +#if EQUAL_SIZE_WARNING + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); +#endif /* EQUAL_SIZE_WARNING */ + + /* Prepare pixd to be a copy of pixs1 */ + if ((pixd = pixCopy(pixd, pixs1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, pixd); + + /* src1 & src2 --> dest */ + pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), + PIX_SRC & PIX_DST, pixs2, 0, 0); + + return pixd; +} + + +/*! + * \brief pixXor() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, + * different from pixs1 + * \param[in] pixs1 can be == pixd + * \param[in] pixs2 must be != pixd + * \return pixd always + * + *
+ * Notes:
+ *      (1) This gives the XOR of two images with equal depth,
+ *          aligning them to the the UL corner.  pixs1 and pixs2
+ *          need not have the same width and height.
+ *      (2) There are 3 cases:
+ *            (a) pixd == null,   (src1 ^ src2) --> new pixd
+ *            (b) pixd == pixs1,  (src1 ^ src2) --> src1  (in-place)
+ *            (c) pixd != pixs1,  (src1 ^ src2) --> input pixd
+ *      (3) For clarity, if the case is known, use these patterns:
+ *            (a) pixd = pixXor(NULL, pixs1, pixs2);
+ *            (b) pixXor(pixs1, pixs1, pixs2);
+ *            (c) pixXor(pixd, pixs1, pixs2);
+ *      (4) The size of the result is determined by pixs1.
+ *      (5) The depths of pixs1 and pixs2 must be equal.
+ *      (6) Note carefully that the order of pixs1 and pixs2 only matters
+ *          for the in-place case.  For in-place, you must have
+ *          pixd == pixs1.  Setting pixd == pixs2 gives an incorrect
+ *          result: the copy puts pixs1 image data in pixs2, and
+ *          the rasterop is then between pixs2 and pixs2 (a no-op).
+ * 
+ */ +PIX * +pixXor(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ + PROCNAME("pixXor"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixd == pixs2) + return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); + if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) + return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); + +#if EQUAL_SIZE_WARNING + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); +#endif /* EQUAL_SIZE_WARNING */ + + /* Prepare pixd to be a copy of pixs1 */ + if ((pixd = pixCopy(pixd, pixs1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, pixd); + + /* src1 ^ src2 --> dest */ + pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), + PIX_SRC ^ PIX_DST, pixs2, 0, 0); + + return pixd; +} + + +/*! + * \brief pixSubtract() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, + * equal to pixs2, or different from both pixs1 and pixs2 + * \param[in] pixs1 can be == pixd + * \param[in] pixs2 can be == pixd + * \return pixd always + * + *
+ * Notes:
+ *      (1) This gives the set subtraction of two images with equal depth,
+ *          aligning them to the the UL corner.  pixs1 and pixs2
+ *          need not have the same width and height.
+ *      (2) Source pixs2 is always subtracted from source pixs1.
+ *          The result is
+ *                  pixs1 \ pixs2 = pixs1 & (~pixs2)
+ *      (3) There are 4 cases:
+ *            (a) pixd == null,   (src1 - src2) --> new pixd
+ *            (b) pixd == pixs1,  (src1 - src2) --> src1  (in-place)
+ *            (c) pixd == pixs2,  (src1 - src2) --> src2  (in-place)
+ *            (d) pixd != pixs1 && pixd != pixs2),
+ *                                 (src1 - src2) --> input pixd
+ *      (4) For clarity, if the case is known, use these patterns:
+ *            (a) pixd = pixSubtract(NULL, pixs1, pixs2);
+ *            (b) pixSubtract(pixs1, pixs1, pixs2);
+ *            (c) pixSubtract(pixs2, pixs1, pixs2);
+ *            (d) pixSubtract(pixd, pixs1, pixs2);
+ *      (5) The size of the result is determined by pixs1.
+ *      (6) The depths of pixs1 and pixs2 must be equal.
+ * 
+ */ +PIX * +pixSubtract(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ +l_int32 w, h; + + PROCNAME("pixSubtract"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) + return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); + +#if EQUAL_SIZE_WARNING + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); +#endif /* EQUAL_SIZE_WARNING */ + + pixGetDimensions(pixs1, &w, &h, NULL); + if (!pixd) { + pixd = pixCopy(NULL, pixs1); + pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), + pixs2, 0, 0); /* src1 & (~src2) */ + } else if (pixd == pixs1) { + pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), + pixs2, 0, 0); /* src1 & (~src2) */ + } else if (pixd == pixs2) { + pixRasterop(pixd, 0, 0, w, h, PIX_NOT(PIX_DST) & PIX_SRC, + pixs1, 0, 0); /* src1 & (~src2) */ + } else { /* pixd != pixs1 && pixd != pixs2 */ + pixCopy(pixd, pixs1); /* sizes pixd to pixs1 if unequal */ + pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), + pixs2, 0, 0); /* src1 & (~src2) */ + } + + return pixd; +} + + +/*-------------------------------------------------------------* + * Pixel counting * + *-------------------------------------------------------------*/ +/*! + * \brief pixZero() + * + * \param[in] pix all depths; colormap OK + * \param[out] pempty 1 if all bits in image data field are 0; 0 otherwise + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) For a binary image, if there are no fg (black) pixels, empty = 1.
+ *      (2) For a grayscale image, if all pixels are black (0), empty = 1.
+ *      (3) For an RGB image, if all 4 components in every pixel is 0,
+ *          empty = 1.
+ *      (4) For a colormapped image, pixel values are 0.  The colormap
+ *          is ignored.
+ * 
+ */ +l_ok +pixZero(PIX *pix, + l_int32 *pempty) +{ +l_int32 w, h, wpl, i, j, fullwords, endbits; +l_uint32 endmask; +l_uint32 *data, *line; + + PROCNAME("pixZero"); + + if (!pempty) + return ERROR_INT("&empty not defined", procName, 1); + *pempty = 1; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + w = pixGetWidth(pix) * pixGetDepth(pix); /* in bits */ + h = pixGetHeight(pix); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + fullwords = w / 32; + endbits = w & 31; + endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); + + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < fullwords; j++) + if (*line++) { + *pempty = 0; + return 0; + } + if (endbits) { + if (*line & endmask) { + *pempty = 0; + return 0; + } + } + } + + return 0; +} + + +/*! + * \brief pixForegroundFraction() + * + * \param[in] pix 1 bpp + * \param[out] pfract fraction of ON pixels + * \return 0 if OK; 1 on error + */ +l_ok +pixForegroundFraction(PIX *pix, + l_float32 *pfract) +{ +l_int32 w, h, count; + + PROCNAME("pixForegroundFraction"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp", procName, 1); + + pixCountPixels(pix, &count, NULL); + pixGetDimensions(pix, &w, &h, NULL); + *pfract = (l_float32)count / (l_float32)(w * h); + return 0; +} + + +/*! + * \brief pixaCountPixels() + * + * \param[in] pixa array of 1 bpp pix + * \return na of ON pixels in each pix, or NULL on error + */ +NUMA * +pixaCountPixels(PIXA *pixa) +{ +l_int32 d, i, n, count; +l_int32 *tab; +NUMA *na; +PIX *pix; + + PROCNAME("pixaCountPixels"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + + if ((n = pixaGetCount(pixa)) == 0) + return numaCreate(1); + + pix = pixaGetPix(pixa, 0, L_CLONE); + d = pixGetDepth(pix); + pixDestroy(&pix); + if (d != 1) + return (NUMA *)ERROR_PTR("pixa not 1 bpp", procName, NULL); + + if ((na = numaCreate(n)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + tab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixCountPixels(pix, &count, tab); + numaAddNumber(na, count); + pixDestroy(&pix); + } + + LEPT_FREE(tab); + return na; +} + + +/*! + * \brief pixCountPixels() + * + * \param[in] pixs 1 bpp + * \param[out] pcount count of ON pixels + * \param[in] tab8 [optional] 8-bit pixel lookup table + * \return 0 if OK; 1 on error + */ +l_ok +pixCountPixels(PIX *pixs, + l_int32 *pcount, + l_int32 *tab8) +{ +l_uint32 endmask; +l_int32 w, h, wpl, i, j; +l_int32 fullwords, endbits, sum; +l_int32 *tab; +l_uint32 *data; + + PROCNAME("pixCountPixels"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + pixGetDimensions(pixs, &w, &h, NULL); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + fullwords = w >> 5; + endbits = w & 31; + endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); + + sum = 0; + for (i = 0; i < h; i++, data += wpl) { + for (j = 0; j < fullwords; j++) { + l_uint32 word = data[j]; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + if (endbits) { + l_uint32 word = data[j] & endmask; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + } + *pcount = sum; + + if (!tab8) LEPT_FREE(tab); + return 0; +} + + +/*! + * \brief pixCountPixelsInRect() + * + * \param[in] pixs 1 bpp + * \param[in] box (can be null) + * \param[out] pcount count of ON pixels + * \param[in] tab8 [optional] 8-bit pixel lookup table + * \return 0 if OK; 1 on error + */ +l_ok +pixCountPixelsInRect(PIX *pixs, + BOX *box, + l_int32 *pcount, + l_int32 *tab8) +{ +l_int32 bx, by, bw, bh; +PIX *pix1; + + PROCNAME("pixCountPixelsInRect"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (box) { + boxGetGeometry(box, &bx, &by, &bw, &bh); + pix1 = pixCreate(bw, bh, 1); + pixRasterop(pix1, 0, 0, bw, bh, PIX_SRC, pixs, bx, by); + pixCountPixels(pix1, pcount, tab8); + pixDestroy(&pix1); + } else { + pixCountPixels(pixs, pcount, tab8); + } + + return 0; +} + + +/*! + * \brief pixCountByRow() + * + * \param[in] pix 1 bpp + * \param[in] box [optional] clipping box for count; can be null + * \return na of number of ON pixels by row, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ * 
+ */ +NUMA * +pixCountByRow(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; +l_uint32 *line, *data; +NUMA *na; + + PROCNAME("pixCountByRow"); + + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + if (!box) + return pixCountPixelsByRow(pix, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + if ((na = numaCreate(bh)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, ystart, 1); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = ystart; i < yend; i++) { + count = 0; + line = data + i * wpl; + for (j = xstart; j < xend; j++) { + if (GET_DATA_BIT(line, j)) + count++; + } + numaAddNumber(na, count); + } + + return na; +} + + +/*! + * \brief pixCountByColumn() + * + * \param[in] pix 1 bpp + * \param[in] box [optional] clipping box for count; can be null + * \return na of number of ON pixels by column, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ * 
+ */ +NUMA * +pixCountByColumn(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; +l_uint32 *line, *data; +NUMA *na; + + PROCNAME("pixCountByColumn"); + + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + if (!box) + return pixCountPixelsByColumn(pix); + + pixGetDimensions(pix, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + if ((na = numaCreate(bw)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, xstart, 1); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (j = xstart; j < xend; j++) { + count = 0; + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + if (GET_DATA_BIT(line, j)) + count++; + } + numaAddNumber(na, count); + } + + return na; +} + + +/*! + * \brief pixCountPixelsByRow() + * + * \param[in] pix 1 bpp + * \param[in] tab8 [optional] 8-bit pixel lookup table + * \return na of counts, or NULL on error + */ +NUMA * +pixCountPixelsByRow(PIX *pix, + l_int32 *tab8) +{ +l_int32 h, i, count; +l_int32 *tab; +NUMA *na; + + PROCNAME("pixCountPixelsByRow"); + + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + + h = pixGetHeight(pix); + if ((na = numaCreate(h)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + for (i = 0; i < h; i++) { + pixCountPixelsInRow(pix, i, &count, tab); + numaAddNumber(na, count); + } + + if (!tab8) LEPT_FREE(tab); + return na; +} + + +/*! + * \brief pixCountPixelsByColumn() + * + * \param[in] pix 1 bpp + * \return na of counts in each column, or NULL on error + */ +NUMA * +pixCountPixelsByColumn(PIX *pix) +{ +l_int32 i, j, w, h, wpl; +l_uint32 *line, *data; +l_float32 *array; +NUMA *na; + + PROCNAME("pixCountPixelsByColumn"); + + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + if ((na = numaCreate(w)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, w); + array = numaGetFArray(na, L_NOCOPY); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < w; j++) { + if (GET_DATA_BIT(line, j)) + array[j] += 1.0; + } + } + + return na; +} + + +/*! + * \brief pixCountPixelsInRow() + * + * \param[in] pix 1 bpp + * \param[in] row number + * \param[out] pcount sum of ON pixels in raster line + * \param[in] tab8 [optional] 8-bit pixel lookup table + * \return 0 if OK; 1 on error + */ +l_ok +pixCountPixelsInRow(PIX *pix, + l_int32 row, + l_int32 *pcount, + l_int32 *tab8) +{ +l_uint32 word, endmask; +l_int32 j, w, h, wpl; +l_int32 fullwords, endbits, sum; +l_int32 *tab; +l_uint32 *line; + + PROCNAME("pixCountPixelsInRow"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp", procName, 1); + + pixGetDimensions(pix, &w, &h, NULL); + if (row < 0 || row >= h) + return ERROR_INT("row out of bounds", procName, 1); + wpl = pixGetWpl(pix); + line = pixGetData(pix) + row * wpl; + fullwords = w >> 5; + endbits = w & 31; + endmask = (endbits == 0) ? 0 : (0xffffffffU << (32 - endbits)); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + sum = 0; + for (j = 0; j < fullwords; j++) { + word = line[j]; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + if (endbits) { + word = line[j] & endmask; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + *pcount = sum; + + if (!tab8) LEPT_FREE(tab); + return 0; +} + + +/*! + * \brief pixGetMomentByColumn() + * + * \param[in] pix 1 bpp + * \param[in] order of moment, either 1 or 2 + * \return na of first moment of fg pixels, by column, or NULL on error + */ +NUMA * +pixGetMomentByColumn(PIX *pix, + l_int32 order) +{ +l_int32 i, j, w, h, wpl; +l_uint32 *line, *data; +l_float32 *array; +NUMA *na; + + PROCNAME("pixGetMomentByColumn"); + + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + if (order != 1 && order != 2) + return (NUMA *)ERROR_PTR("order of moment not 1 or 2", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + if ((na = numaCreate(w)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, w); + array = numaGetFArray(na, L_NOCOPY); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < w; j++) { + if (GET_DATA_BIT(line, j)) { + if (order == 1) + array[j] += i; + else /* order == 2 */ + array[j] += i * i; + } + } + } + + return na; +} + + +/*! + * \brief pixThresholdPixelSum() + * + * \param[in] pix 1 bpp + * \param[in] thresh threshold + * \param[out] pabove 1 if above threshold; + * 0 if equal to or less than threshold + * \param[in] tab8 [optional] 8-bit pixel lookup table + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This sums the ON pixels and returns immediately if the count
+ *          goes above threshold.  It is therefore more efficient
+ *          for matching images (by running this function on the xor of
+ *          the 2 images) than using pixCountPixels(), which counts all
+ *          pixels before returning.
+ * 
+ */ +l_ok +pixThresholdPixelSum(PIX *pix, + l_int32 thresh, + l_int32 *pabove, + l_int32 *tab8) +{ +l_uint32 word, endmask; +l_int32 *tab; +l_int32 w, h, wpl, i, j; +l_int32 fullwords, endbits, sum; +l_uint32 *line, *data; + + PROCNAME("pixThresholdPixelSum"); + + if (!pabove) + return ERROR_INT("&above not defined", procName, 1); + *pabove = 0; + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp", procName, 1); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + pixGetDimensions(pix, &w, &h, NULL); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + fullwords = w >> 5; + endbits = w & 31; + endmask = 0xffffffff << (32 - endbits); + + sum = 0; + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < fullwords; j++) { + word = line[j]; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + if (endbits) { + word = line[j] & endmask; + if (word) { + sum += tab[word & 0xff] + + tab[(word >> 8) & 0xff] + + tab[(word >> 16) & 0xff] + + tab[(word >> 24) & 0xff]; + } + } + if (sum > thresh) { + *pabove = 1; + if (!tab8) LEPT_FREE(tab); + return 0; + } + } + + if (!tab8) LEPT_FREE(tab); + return 0; +} + + +/*! + * \brief makePixelSumTab8() + * + * \return table of 256 l_int32. + * + *
+ * Notes:
+ *      (1) This table of integers gives the number of 1 bits
+ *          in the 8 bit index.
+ * 
+ */ +l_int32 * +makePixelSumTab8(void) +{ +l_uint8 byte; +l_int32 i; +l_int32 *tab; + + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) { + byte = (l_uint8)i; + tab[i] = (byte & 0x1) + + ((byte >> 1) & 0x1) + + ((byte >> 2) & 0x1) + + ((byte >> 3) & 0x1) + + ((byte >> 4) & 0x1) + + ((byte >> 5) & 0x1) + + ((byte >> 6) & 0x1) + + ((byte >> 7) & 0x1); + } + return tab; +} + + +/*! + * \brief makePixelCentroidTab8() + * + * \return table of 256 l_int32. + * + *
+ * Notes:
+ *      (1) This table of integers gives the centroid weight of the 1 bits
+ *          in the 8 bit index.  In other words, if sumtab is obtained by
+ *          makePixelSumTab8, and centroidtab is obtained by
+ *          makePixelCentroidTab8, then, for 1 <= i <= 255,
+ *          centroidtab[i] / (float)sumtab[i]
+ *          is the centroid of the 1 bits in the 8-bit index i, where the
+ *          MSB is considered to have position 0 and the LSB is considered
+ *          to have position 7.
+ * 
+ */ +l_int32 * +makePixelCentroidTab8(void) +{ +l_int32 i; +l_int32 *tab; + + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + tab[0] = 0; + tab[1] = 7; + for (i = 2; i < 4; i++) { + tab[i] = tab[i - 2] + 6; + } + for (i = 4; i < 8; i++) { + tab[i] = tab[i - 4] + 5; + } + for (i = 8; i < 16; i++) { + tab[i] = tab[i - 8] + 4; + } + for (i = 16; i < 32; i++) { + tab[i] = tab[i - 16] + 3; + } + for (i = 32; i < 64; i++) { + tab[i] = tab[i - 32] + 2; + } + for (i = 64; i < 128; i++) { + tab[i] = tab[i - 64] + 1; + } + for (i = 128; i < 256; i++) { + tab[i] = tab[i - 128]; + } + return tab; +} + + +/*-------------------------------------------------------------* + * Average of pixel values in gray images * + *-------------------------------------------------------------*/ +/*! + * \brief pixAverageByRow() + * + * \param[in] pix 8 or 16 bpp; no colormap + * \param[in] box [optional] clipping box for sum; can be null + * \param[in] type L_WHITE_IS_MAX, L_BLACK_IS_MAX + * \return na of pixel averages by row, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ *      (2) If type == L_BLACK_IS_MAX, black pixels get the maximum
+ *          value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0.
+ * 
+ */ +NUMA * +pixAverageByRow(PIX *pix, + BOX *box, + l_int32 type) +{ +l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; +l_uint32 *line, *data; +l_float64 norm, sum; +NUMA *na; + + PROCNAME("pixAverageByRow"); + + if (!pix) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 8 && d != 16) + return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); + if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + norm = 1. / (l_float32)bw; + if ((na = numaCreate(bh)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, ystart, 1); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = ystart; i < yend; i++) { + sum = 0.0; + line = data + i * wpl; + if (d == 8) { + for (j = xstart; j < xend; j++) + sum += GET_DATA_BYTE(line, j); + if (type == L_BLACK_IS_MAX) + sum = bw * 255 - sum; + } else { /* d == 16 */ + for (j = xstart; j < xend; j++) + sum += GET_DATA_TWO_BYTES(line, j); + if (type == L_BLACK_IS_MAX) + sum = bw * 0xffff - sum; + } + numaAddNumber(na, (l_float32)(norm * sum)); + } + + return na; +} + + +/*! + * \brief pixAverageByColumn() + * + * \param[in] pix 8 or 16 bpp; no colormap + * \param[in] box [optional] clipping box for sum; can be null + * \param[in] type L_WHITE_IS_MAX, L_BLACK_IS_MAX + * \return na of pixel averages by column, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ *      (2) If type == L_BLACK_IS_MAX, black pixels get the maximum
+ *          value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0.
+ * 
+ */ +NUMA * +pixAverageByColumn(PIX *pix, + BOX *box, + l_int32 type) +{ +l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; +l_uint32 *line, *data; +l_float32 norm, sum; +NUMA *na; + + PROCNAME("pixAverageByColumn"); + + if (!pix) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + + if (d != 8 && d != 16) + return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); + if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + if ((na = numaCreate(bw)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, xstart, 1); + norm = 1. / (l_float32)bh; + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (j = xstart; j < xend; j++) { + sum = 0.0; + if (d == 8) { + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + sum += GET_DATA_BYTE(line, j); + } + if (type == L_BLACK_IS_MAX) + sum = bh * 255 - sum; + } else { /* d == 16 */ + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + sum += GET_DATA_TWO_BYTES(line, j); + } + if (type == L_BLACK_IS_MAX) + sum = bh * 0xffff - sum; + } + numaAddNumber(na, (l_float32)(norm * sum)); + } + + return na; +} + + +/*! + * \brief pixAverageInRect() + * + * \param[in] pix 1, 2, 4, 8 bpp; not cmapped + * \param[in] box [optional] if null, use entire image + * \param[out] pave average of pixel values in region + * \return 0 if OK; 1 on error + */ +l_ok +pixAverageInRect(PIX *pix, + BOX *box, + l_float32 *pave) +{ +l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh; +l_uint32 *data, *line; +l_float64 ave; + + PROCNAME("pixAverageInRect"); + + if (!pave) + return ERROR_INT("&ave not defined", procName, 1); + *pave = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8) + return ERROR_INT("pix not 1, 2, 4 or 8 bpp", procName, 1); + if (pixGetColormap(pix) != NULL) + return ERROR_INT("pix is colormapped", procName, 1); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return ERROR_INT("invalid clipping box", procName, 1); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + ave = 0; + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + for (j = xstart; j < xend; j++) { + if (d == 1) + ave += GET_DATA_BIT(line, j); + else if (d == 2) + ave += GET_DATA_DIBIT(line, j); + else if (d == 4) + ave += GET_DATA_QBIT(line, j); + else /* d == 8 */ + ave += GET_DATA_BYTE(line, j); + } + } + + *pave = ave / ((l_float32)(bw) * bh); + return 0; +} + + +/*------------------------------------------------------------------* + * Variance of pixel values in gray images * + *------------------------------------------------------------------*/ +/*! + * \brief pixVarianceByRow() + * + * \param[in] pix 8 or 16 bpp; no colormap + * \param[in] box [optional] clipping box for variance; can be null + * \return na of rmsdev by row, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ *      (2) We are actually computing the RMS deviation in each row.
+ *          This is the square root of the variance.
+ * 
+ */ +NUMA * +pixVarianceByRow(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; +l_uint32 *line, *data; +l_float64 sum1, sum2, norm, ave, var, rootvar; +NUMA *na; + + PROCNAME("pixVarianceByRow"); + + if (!pix) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 8 && d != 16) + return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + if ((na = numaCreate(bh)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, ystart, 1); + norm = 1. / (l_float32)bw; + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = ystart; i < yend; i++) { + sum1 = sum2 = 0.0; + line = data + i * wpl; + for (j = xstart; j < xend; j++) { + if (d == 8) + val = GET_DATA_BYTE(line, j); + else /* d == 16 */ + val = GET_DATA_TWO_BYTES(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } + ave = norm * sum1; + var = norm * sum2 - ave * ave; + rootvar = sqrt(var); + numaAddNumber(na, (l_float32)rootvar); + } + + return na; +} + + +/*! + * \brief pixVarianceByColumn() + * + * \param[in] pix 8 or 16 bpp; no colormap + * \param[in] box [optional] clipping box for variance; can be null + * \return na of rmsdev by column, or NULL on error + * + *
+ * Notes:
+ *      (1) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ *      (2) We are actually computing the RMS deviation in each row.
+ *          This is the square root of the variance.
+ * 
+ */ +NUMA * +pixVarianceByColumn(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; +l_uint32 *line, *data; +l_float64 sum1, sum2, norm, ave, var, rootvar; +NUMA *na; + + PROCNAME("pixVarianceByColumn"); + + if (!pix) + return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 8 && d != 16) + return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + + if ((na = numaCreate(bw)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, xstart, 1); + norm = 1. / (l_float32)bh; + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (j = xstart; j < xend; j++) { + sum1 = sum2 = 0.0; + for (i = ystart; i < yend; i++) { + line = data + wpl * i; + if (d == 8) + val = GET_DATA_BYTE(line, j); + else /* d == 16 */ + val = GET_DATA_TWO_BYTES(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } + ave = norm * sum1; + var = norm * sum2 - ave * ave; + rootvar = sqrt(var); + numaAddNumber(na, (l_float32)rootvar); + } + + return na; +} + + +/*! + * \brief pixVarianceInRect() + * + * \param[in] pix 1, 2, 4, 8 bpp; not cmapped + * \param[in] box [optional] if null, use entire image + * \param[out] prootvar sqrt variance of pixel values in region + * \return 0 if OK; 1 on error + */ +l_ok +pixVarianceInRect(PIX *pix, + BOX *box, + l_float32 *prootvar) +{ +l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val; +l_uint32 *data, *line; +l_float64 sum1, sum2, norm, ave, var; + + PROCNAME("pixVarianceInRect"); + + if (!prootvar) + return ERROR_INT("&rootvar not defined", procName, 1); + *prootvar = 0.0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8) + return ERROR_INT("pix not 1, 2, 4 or 8 bpp", procName, 1); + if (pixGetColormap(pix) != NULL) + return ERROR_INT("pix is colormapped", procName, 1); + + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return ERROR_INT("invalid clipping box", procName, 1); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + sum1 = sum2 = 0.0; + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + for (j = xstart; j < xend; j++) { + if (d == 1) { + val = GET_DATA_BIT(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } else if (d == 2) { + val = GET_DATA_DIBIT(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } else if (d == 4) { + val = GET_DATA_QBIT(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } else { /* d == 8 */ + val = GET_DATA_BYTE(line, j); + sum1 += val; + sum2 += (l_float64)(val) * val; + } + } + } + norm = 1.0 / ((l_float64)(bw) * bh); + ave = norm * sum1; + var = norm * sum2 - ave * ave; + *prootvar = (l_float32)sqrt(var); + return 0; +} + + +/*---------------------------------------------------------------------* + * Average of absolute value of pixel differences in gray images * + *---------------------------------------------------------------------*/ +/*! + * \brief pixAbsDiffByRow() + * + * \param[in] pix 8 bpp; no colormap + * \param[in] box [optional] clipping box for region; can be null + * \return na of abs val pixel difference averages by row, or NULL on error + * + *
+ * Notes:
+ *      (1) This is an average over differences of adjacent pixels along
+ *          each row.
+ *      (2) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ * 
+ */ +NUMA * +pixAbsDiffByRow(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; +l_uint32 *line, *data; +l_float64 norm, sum; +NUMA *na; + + PROCNAME("pixAbsDiffByRow"); + + if (!pix || pixGetDepth(pix) != 8) + return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + if (bw < 2) + return (NUMA *)ERROR_PTR("row width must be >= 2", procName, NULL); + + norm = 1. / (l_float32)(bw - 1); + if ((na = numaCreate(bh)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, ystart, 1); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = ystart; i < yend; i++) { + sum = 0.0; + line = data + i * wpl; + val0 = GET_DATA_BYTE(line, xstart); + for (j = xstart + 1; j < xend; j++) { + val1 = GET_DATA_BYTE(line, j); + sum += L_ABS(val1 - val0); + val0 = val1; + } + numaAddNumber(na, (l_float32)(norm * sum)); + } + + return na; +} + + +/*! + * \brief pixAbsDiffByColumn() + * + * \param[in] pix 8 bpp; no colormap + * \param[in] box [optional] clipping box for region; can be null + * \return na of abs val pixel difference averages by column, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This is an average over differences of adjacent pixels along
+ *          each column.
+ *      (2) To resample for a bin size different from 1, use
+ *          numaUniformSampling() on the result of this function.
+ * 
+ */ +NUMA * +pixAbsDiffByColumn(PIX *pix, + BOX *box) +{ +l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; +l_uint32 *line, *data; +l_float64 norm, sum; +NUMA *na; + + PROCNAME("pixAbsDiffByColumn"); + + if (!pix || pixGetDepth(pix) != 8) + return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); + if (pixGetColormap(pix) != NULL) + return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); + if (bh < 2) + return (NUMA *)ERROR_PTR("column height must be >= 2", procName, NULL); + + norm = 1. / (l_float32)(bh - 1); + if ((na = numaCreate(bw)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetParameters(na, xstart, 1); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (j = xstart; j < xend; j++) { + sum = 0.0; + line = data + ystart * wpl; + val0 = GET_DATA_BYTE(line, j); + for (i = ystart + 1; i < yend; i++) { + line = data + i * wpl; + val1 = GET_DATA_BYTE(line, j); + sum += L_ABS(val1 - val0); + val0 = val1; + } + numaAddNumber(na, (l_float32)(norm * sum)); + } + + return na; +} + + +/*! + * \brief pixAbsDiffInRect() + * + * \param[in] pix 8 bpp; not cmapped + * \param[in] box [optional] if null, use entire image + * \param[in] dir differences along L_HORIZONTAL_LINE or L_VERTICAL_LINE + * \param[out] pabsdiff average of abs diff pixel values in region + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This gives the average over the abs val of differences of
+ *          adjacent pixels values, along either each
+ *             row:     dir == L_HORIZONTAL_LINE
+ *             column:  dir == L_VERTICAL_LINE
+ * 
+ */ +l_ok +pixAbsDiffInRect(PIX *pix, + BOX *box, + l_int32 dir, + l_float32 *pabsdiff) +{ +l_int32 w, h, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val0, val1; +l_uint32 *data, *line; +l_float64 norm, sum; + + PROCNAME("pixAbsDiffInRect"); + + if (!pabsdiff) + return ERROR_INT("&absdiff not defined", procName, 1); + *pabsdiff = 0.0; + if (!pix || pixGetDepth(pix) != 8) + return ERROR_INT("pix undefined or not 8 bpp", procName, 1); + if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) + return ERROR_INT("invalid direction", procName, 1); + if (pixGetColormap(pix) != NULL) + return ERROR_INT("pix is colormapped", procName, 1); + + pixGetDimensions(pix, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return ERROR_INT("invalid clipping box", procName, 1); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + if (dir == L_HORIZONTAL_LINE) { + norm = 1. / (l_float32)(bh * (bw - 1)); + sum = 0.0; + for (i = ystart; i < yend; i++) { + line = data + i * wpl; + val0 = GET_DATA_BYTE(line, xstart); + for (j = xstart + 1; j < xend; j++) { + val1 = GET_DATA_BYTE(line, j); + sum += L_ABS(val1 - val0); + val0 = val1; + } + } + } else { /* vertical line */ + norm = 1. / (l_float32)(bw * (bh - 1)); + sum = 0.0; + for (j = xstart; j < xend; j++) { + line = data + ystart * wpl; + val0 = GET_DATA_BYTE(line, j); + for (i = ystart + 1; i < yend; i++) { + line = data + i * wpl; + val1 = GET_DATA_BYTE(line, j); + sum += L_ABS(val1 - val0); + val0 = val1; + } + } + } + *pabsdiff = (l_float32)(norm * sum); + return 0; +} + + +/*! + * \brief pixAbsDiffOnLine() + * + * \param[in] pix 8 bpp; not cmapped + * \param[in] x1, y1 first point; x1 <= x2, y1 <= y2 + * \param[in] x2, y2 first point + * \param[out] pabsdiff average of abs diff pixel values on line + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This gives the average over the abs val of differences of
+ *          adjacent pixels values, along a line that is either horizontal
+ *          or vertical.
+ *      (2) If horizontal, require x1 < x2; if vertical, require y1 < y2.
+ * 
+ */ +l_ok +pixAbsDiffOnLine(PIX *pix, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_float32 *pabsdiff) +{ +l_int32 w, h, i, j, dir, size, sum; +l_uint32 val0, val1; + + PROCNAME("pixAbsDiffOnLine"); + + if (!pabsdiff) + return ERROR_INT("&absdiff not defined", procName, 1); + *pabsdiff = 0.0; + if (!pix || pixGetDepth(pix) != 8) + return ERROR_INT("pix undefined or not 8 bpp", procName, 1); + if (y1 == y2) { + dir = L_HORIZONTAL_LINE; + } else if (x1 == x2) { + dir = L_VERTICAL_LINE; + } else { + return ERROR_INT("line is neither horiz nor vert", procName, 1); + } + if (pixGetColormap(pix) != NULL) + return ERROR_INT("pix is colormapped", procName, 1); + + pixGetDimensions(pix, &w, &h, NULL); + sum = 0; + if (dir == L_HORIZONTAL_LINE) { + x1 = L_MAX(x1, 0); + x2 = L_MIN(x2, w - 1); + if (x1 >= x2) + return ERROR_INT("x1 >= x2", procName, 1); + size = x2 - x1; + pixGetPixel(pix, x1, y1, &val0); + for (j = x1 + 1; j <= x2; j++) { + pixGetPixel(pix, j, y1, &val1); + sum += L_ABS((l_int32)val1 - (l_int32)val0); + val0 = val1; + } + } else { /* vertical */ + y1 = L_MAX(y1, 0); + y2 = L_MIN(y2, h - 1); + if (y1 >= y2) + return ERROR_INT("y1 >= y2", procName, 1); + size = y2 - y1; + pixGetPixel(pix, x1, y1, &val0); + for (i = y1 + 1; i <= y2; i++) { + pixGetPixel(pix, x1, i, &val1); + sum += L_ABS((l_int32)val1 - (l_int32)val0); + val0 = val1; + } + } + *pabsdiff = (l_float32)sum / (l_float32)size; + return 0; +} + + +/*-------------------------------------------------------------* + * Count of pixels with specific value * + *-------------------------------------------------------------*/ +/*! + * \brief pixCountArbInRect() + * + * \param[in] pixs 8 bpp, or colormapped + * \param[in] box [optional] over which count is made; + * use entire image if NULL + * \param[in] val pixel value to count + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] pcount count; estimate it if factor > 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is cmapped, %val is compared to the colormap index;
+ *          otherwise, %val is compared to the grayscale value.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ *          If %factor > 1, multiply the count by %factor * %factor.
+ * 
+ */ +l_int32 +pixCountArbInRect(PIX *pixs, + BOX *box, + l_int32 val, + l_int32 factor, + l_int32 *pcount) +{ +l_int32 i, j, bx, by, bw, bh, w, h, wpl, pixval; +l_uint32 *data, *line; + + PROCNAME("pixCountArbInRect"); + + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) + return ERROR_INT("pixs neither 8 bpp nor colormapped", + procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor < 1", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + + if (!box) { + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + pixval = GET_DATA_BYTE(line, j); + if (pixval == val) (*pcount)++; + } + } + } else { + boxGetGeometry(box, &bx, &by, &bw, &bh); + for (i = 0; i < bh; i += factor) { + if (by + i < 0 || by + i >= h) continue; + line = data + (by + i) * wpl; + for (j = 0; j < bw; j += factor) { + if (bx + j < 0 || bx + j >= w) continue; + pixval = GET_DATA_BYTE(line, bx + j); + if (pixval == val) (*pcount)++; + } + } + } + + if (factor > 1) /* assume pixel color is randomly distributed */ + *pcount = *pcount * factor * factor; + return 0; +} + + +/*-------------------------------------------------------------* + * Mirrored tiling of a smaller image * + *-------------------------------------------------------------*/ +/*! + * \brief pixMirroredTiling() + * + * \param[in] pixs 8 or 32 bpp, small tile; to be replicated + * \param[in] w, h dimensions of output pix + * \return pixd usually larger pix, mirror-tiled with pixs, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This uses mirrored tiling, where each row alternates
+ *          with LR flips and every column alternates with TB
+ *          flips, such that the result is a tiling with identical
+ *          2 x 2 tiles, each of which is composed of these transforms:
+ *                  -----------------
+ *                  | 1    |  LR    |
+ *                  -----------------
+ *                  | TB   |  LR/TB |
+ *                  -----------------
+ * 
+ */ +PIX * +pixMirroredTiling(PIX *pixs, + l_int32 w, + l_int32 h) +{ +l_int32 wt, ht, d, i, j, nx, ny; +PIX *pixd, *pixsfx, *pixsfy, *pixsfxy, *pix; + + PROCNAME("pixMirroredTiling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &wt, &ht, &d); + if (wt <= 0 || ht <= 0) + return (PIX *)ERROR_PTR("pixs size illegal", procName, NULL); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopySpp(pixd, pixs); + + nx = (w + wt - 1) / wt; + ny = (h + ht - 1) / ht; + pixsfx = pixFlipLR(NULL, pixs); + pixsfy = pixFlipTB(NULL, pixs); + pixsfxy = pixFlipTB(NULL, pixsfx); + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + pix = pixs; + if ((i & 1) && !(j & 1)) + pix = pixsfy; + else if (!(i & 1) && (j & 1)) + pix = pixsfx; + else if ((i & 1) && (j & 1)) + pix = pixsfxy; + pixRasterop(pixd, j * wt, i * ht, wt, ht, PIX_SRC, pix, 0, 0); + } + } + + pixDestroy(&pixsfx); + pixDestroy(&pixsfy); + pixDestroy(&pixsfxy); + return pixd; +} + + +/*! + * \brief pixFindRepCloseTile() + * + * \param[in] pixs 32 bpp rgb + * \param[in] box region of pixs to search around + * \param[in] searchdir L_HORIZ or L_VERT; direction to search + * \param[in] mindist min distance of selected tile edge from box; >= 0 + * \param[in] tsize tile size; > 1; even; typically ~50 + * \param[in] ntiles number of tiles tested in each row/column + * \param[out] pboxtile region of best tile + * \param[in] debug 1 for debug output + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This looks for one or two square tiles with conforming median
+ *          intensity and low variance, that is outside but near the input box.
+ *      (2) %mindist specifies the gap between the box and the
+ *          potential tiles.  The tiles are given an overlap of 50%.
+ *          %ntiles specifies the number of tiles that are tested
+ *          beyond %mindist for each row or column.
+ *      (3) For example, if %mindist = 20, %tilesize = 50 and %ntiles = 3,
+ *          a horizontal search to the right will have 3 tiles in each row,
+ *          with left edges at 20, 45 and 70 from the right edge of the
+ *          input %box.  The number of rows of tiles is determined by
+ *          the height of %box and %tsize, with the 50% overlap..
+ * 
+ */ +l_ok +pixFindRepCloseTile(PIX *pixs, + BOX *box, + l_int32 searchdir, + l_int32 mindist, + l_int32 tsize, + l_int32 ntiles, + BOX **pboxtile, + l_int32 debug) +{ +l_int32 w, h, i, n, bestindex; +l_float32 var_of_mean, median_of_mean, median_of_stdev, mean_val, stdev_val; +l_float32 mindels, bestdelm, delm, dels, mean, stdev; +BOXA *boxa; +NUMA *namean, *nastdev; +PIX *pix, *pixg; +PIXA *pixa; + + PROCNAME("pixFindRepCloseTile"); + + if (!pboxtile) + return ERROR_INT("&boxtile not defined", procName, 1); + *pboxtile = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (searchdir != L_HORIZ && searchdir != L_VERT) + return ERROR_INT("invalid searchdir", procName, 1); + if (mindist < 0) + return ERROR_INT("mindist must be >= 0", procName, 1); + if (tsize < 2) + return ERROR_INT("tsize must be > 1", procName, 1); + if (ntiles > 7) { + L_WARNING("ntiles = %d; larger than suggested max of 7\n", + procName, ntiles); + } + + /* Locate tile regions */ + pixGetDimensions(pixs, &w, &h, NULL); + boxa = findTileRegionsForSearch(box, w, h, searchdir, mindist, + tsize, ntiles); + if (!boxa) + return ERROR_INT("no tiles found", procName, 1); + + /* Generate the tiles and the mean and stdev of intensity */ + pixa = pixClipRectangles(pixs, boxa); + n = pixaGetCount(pixa); + namean = numaCreate(n); + nastdev = numaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixg = pixConvertRGBToGray(pix, 0.33, 0.34, 0.33); + pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_MEAN_ABSVAL, &mean); + pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_STANDARD_DEVIATION, &stdev); + numaAddNumber(namean, mean); + numaAddNumber(nastdev, stdev); + pixDestroy(&pix); + pixDestroy(&pixg); + } + + /* Find the median and variance of the averages. We require + * the best tile to have a mean pixel intensity within a standard + * deviation of the median of mean intensities, and choose the + * tile in that set with the smallest stdev of pixel intensities + * (as a proxy for the tile with least visible structure). + * The median of the stdev is used, for debugging, as a normalizing + * factor for the stdev of intensities within a tile. */ + numaGetStatsUsingHistogram(namean, 256, NULL, NULL, NULL, &var_of_mean, + &median_of_mean, 0.0, NULL, NULL); + numaGetStatsUsingHistogram(nastdev, 256, NULL, NULL, NULL, NULL, + &median_of_stdev, 0.0, NULL, NULL); + mindels = 1000.0; + bestdelm = 1000.0; + bestindex = 0; + for (i = 0; i < n; i++) { + numaGetFValue(namean, i, &mean_val); + numaGetFValue(nastdev, i, &stdev_val); + if (var_of_mean == 0.0) { /* uniform color; any box will do */ + delm = 0.0; /* any value < 1.01 */ + dels = 1.0; /* n'importe quoi */ + } else { + delm = L_ABS(mean_val - median_of_mean) / sqrt(var_of_mean); + dels = stdev_val / median_of_stdev; + } + if (delm < 1.01) { + if (dels < mindels) { + if (debug) { + fprintf(stderr, "i = %d, mean = %7.3f, delm = %7.3f," + " stdev = %7.3f, dels = %7.3f\n", + i, mean_val, delm, stdev_val, dels); + } + mindels = dels; + bestdelm = delm; + bestindex = i; + } + } + } + *pboxtile = boxaGetBox(boxa, bestindex, L_COPY); + + if (debug) { + L_INFO("median of mean = %7.3f\n", procName, median_of_mean); + L_INFO("standard dev of mean = %7.3f\n", procName, sqrt(var_of_mean)); + L_INFO("median of stdev = %7.3f\n", procName, median_of_stdev); + L_INFO("best tile: index = %d\n", procName, bestindex); + L_INFO("delta from median in units of stdev = %5.3f\n", + procName, bestdelm); + L_INFO("stdev as fraction of median stdev = %5.3f\n", + procName, mindels); + } + + numaDestroy(&namean); + numaDestroy(&nastdev); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + return 0; +} + + +/*! + * \brief findTileRegionsForSearch() + * + * \param[in] box region of Pix to search around + * \param[in] w, h dimensions of Pix + * \param[in] searchdir L_HORIZ or L_VERT; direction to search + * \param[in] mindist min distance of selected tile edge from box; >= 0 + * \param[in] tsize tile size; > 1; even; typically ~50 + * \param[in] ntiles number of tiles tested in each row/column + * \return boxa if OK, or NULL on error + * + *
+ * Notes:
+ *      (1) See calling function pixfindRepCloseTile().
+ * 
+ */ +static BOXA * +findTileRegionsForSearch(BOX *box, + l_int32 w, + l_int32 h, + l_int32 searchdir, + l_int32 mindist, + l_int32 tsize, + l_int32 ntiles) +{ +l_int32 bx, by, bw, bh, left, right, top, bot, i, j, nrows, ncols; +l_int32 x0, y0, x, y, w_avail, w_needed, h_avail, h_needed, t_avail; +BOX *box1; +BOXA *boxa; + + PROCNAME("findTileRegionsForSearch"); + + if (!box) + return (BOXA *)ERROR_PTR("box not defined", procName, NULL); + if (ntiles == 0) + return (BOXA *)ERROR_PTR("no tiles requested", procName, NULL); + + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (searchdir == L_HORIZ) { + /* Find the tile parameters for the search. Note that the + * tiles are overlapping by 50% in each direction. */ + left = bx; /* distance to left of box */ + right = w - bx - bw + 1; /* distance to right of box */ + w_avail = L_MAX(left, right) - mindist; + if (tsize & 1) tsize++; /* be sure it's even */ + if (w_avail < tsize) { + L_ERROR("tsize = %d, w_avail = %d\n", procName, tsize, w_avail); + return NULL; + } + w_needed = tsize + (ntiles - 1) * (tsize / 2); + if (w_needed > w_avail) { + t_avail = 1 + 2 * (w_avail - tsize) / tsize; + L_WARNING("ntiles = %d; room for only %d\n", procName, + ntiles, t_avail); + ntiles = t_avail; + w_needed = tsize + (ntiles - 1) * (tsize / 2); + } + nrows = L_MAX(1, 1 + 2 * (bh - tsize) / tsize); + + /* Generate the tile regions to search */ + boxa = boxaCreate(0); + if (left > right) /* search to left */ + x0 = bx - w_needed; + else /* search to right */ + x0 = bx + bw + mindist; + for (i = 0; i < nrows; i++) { + y = by + i * tsize / 2; + for (j = 0; j < ntiles; j++) { + x = x0 + j * tsize / 2; + box1 = boxCreate(x, y, tsize, tsize); + boxaAddBox(boxa, box1, L_INSERT); + } + } + } else { /* L_VERT */ + /* Find the tile parameters for the search */ + top = by; /* distance above box */ + bot = h - by - bh + 1; /* distance below box */ + h_avail = L_MAX(top, bot) - mindist; + if (h_avail < tsize) { + L_ERROR("tsize = %d, h_avail = %d\n", procName, tsize, h_avail); + return NULL; + } + h_needed = tsize + (ntiles - 1) * (tsize / 2); + if (h_needed > h_avail) { + t_avail = 1 + 2 * (h_avail - tsize) / tsize; + L_WARNING("ntiles = %d; room for only %d\n", procName, + ntiles, t_avail); + ntiles = t_avail; + h_needed = tsize + (ntiles - 1) * (tsize / 2); + } + ncols = L_MAX(1, 1 + 2 * (bw - tsize) / tsize); + + /* Generate the tile regions to search */ + boxa = boxaCreate(0); + if (top > bot) /* search above */ + y0 = by - h_needed; + else /* search below */ + y0 = by + bh + mindist; + for (j = 0; j < ncols; j++) { + x = bx + j * tsize / 2; + for (i = 0; i < ntiles; i++) { + y = y0 + i * tsize / 2; + box1 = boxCreate(x, y, tsize, tsize); + boxaAddBox(boxa, box1, L_INSERT); + } + } + } + return boxa; +} diff --git a/3rdparty/hgOCR/leptonica/pix4.c b/3rdparty/hgOCR/leptonica/pix4.c new file mode 100644 index 00000000..526232a0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix4.c @@ -0,0 +1,3437 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pix4.c + *
+ *
+ *    This file has these operations:
+ *
+ *      (1) Pixel histograms
+ *      (2) Pixel row/column statistics
+ *      (3) Foreground/background estimation
+ *
+ *    Pixel histogram, rank val, averaging and min/max
+ *           NUMA       *pixGetGrayHistogram()
+ *           NUMA       *pixGetGrayHistogramMasked()
+ *           NUMA       *pixGetGrayHistogramInRect()
+ *           NUMAA      *pixGetGrayHistogramTiled()
+ *           l_int32     pixGetColorHistogram()
+ *           l_int32     pixGetColorHistogramMasked()
+ *           NUMA       *pixGetCmapHistogram()
+ *           NUMA       *pixGetCmapHistogramMasked()
+ *           NUMA       *pixGetCmapHistogramInRect()
+ *           l_int32     pixCountRGBColors()
+ *           L_AMAP     *pixGetColorAmapHistogram()
+ *           l_int32     amapGetCountForColor()
+ *           l_int32     pixGetRankValue()
+ *           l_int32     pixGetRankValueMaskedRGB()
+ *           l_int32     pixGetRankValueMasked()
+ *           l_int32     pixGetPixelAverage()
+ *           l_int32     pixGetPixelStats()
+ *           l_int32     pixGetAverageMaskedRGB()
+ *           l_int32     pixGetAverageMasked()
+ *           l_int32     pixGetAverageTiledRGB()
+ *           PIX        *pixGetAverageTiled()
+ *           NUMA       *pixRowStats()
+ *           NUMA       *pixColumnStats()
+ *           l_int32     pixGetRangeValues()
+ *           l_int32     pixGetExtremeValue()
+ *           l_int32     pixGetMaxValueInRect()
+ *           l_int32     pixGetBinnedComponentRange()
+ *           l_int32     pixGetRankColorArray()
+ *           l_int32     pixGetBinnedColor()
+ *           PIX        *pixDisplayColorArray()
+ *           PIX        *pixRankBinByStrip()
+ *
+ *    Pixelwise aligned statistics
+ *           PIX        *pixaGetAlignedStats()
+ *           l_int32     pixaExtractColumnFromEachPix()
+ *           l_int32     pixGetRowStats()
+ *           l_int32     pixGetColumnStats()
+ *           l_int32     pixSetPixelColumn()
+ *
+ *    Foreground/background estimation
+ *           l_int32     pixThresholdForFgBg()
+ *           l_int32     pixSplitDistributionFgBg()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + +/*------------------------------------------------------------------* + * Pixel histogram and averaging * + *------------------------------------------------------------------*/ +/*! + * \brief pixGetGrayHistogram() + * + * \param[in] pixs 1, 2, 4, 8, 16 bpp; can be colormapped + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, it is converted to 8 bpp gray.
+ *          If you want a histogram of the colormap indices, use
+ *          pixGetCmapHistogram().
+ *      (2) If pixs does not have a colormap, the output histogram is
+ *          of size 2^d, where d is the depth of pixs.
+ *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
+ * 
+ */ +NUMA * +pixGetGrayHistogram(PIX *pixs, + l_int32 factor) +{ +l_int32 i, j, w, h, d, wpl, val, size, count; +l_uint32 *data, *line; +l_float32 *array; +NUMA *na; +PIX *pixg; + + PROCNAME("pixGetGrayHistogram"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d > 16) + return (NUMA *)ERROR_PTR("depth not in {1,2,4,8,16}", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + + if (pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + + pixGetDimensions(pixg, &w, &h, &d); + size = 1 << d; + if ((na = numaCreate(size)) == NULL) { + pixDestroy(&pixg); + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + } + numaSetCount(na, size); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + if (d == 1) { /* special case */ + pixCountPixels(pixg, &count, NULL); + array[0] = w * h - count; + array[1] = count; + pixDestroy(&pixg); + return na; + } + + wpl = pixGetWpl(pixg); + data = pixGetData(pixg); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + if (d == 2) { + for (j = 0; j < w; j += factor) { + val = GET_DATA_DIBIT(line, j); + array[val] += 1.0; + } + } else if (d == 4) { + for (j = 0; j < w; j += factor) { + val = GET_DATA_QBIT(line, j); + array[val] += 1.0; + } + } else if (d == 8) { + for (j = 0; j < w; j += factor) { + val = GET_DATA_BYTE(line, j); + array[val] += 1.0; + } + } else { /* d == 16 */ + for (j = 0; j < w; j += factor) { + val = GET_DATA_TWO_BYTES(line, j); + array[val] += 1.0; + } + } + } + + pixDestroy(&pixg); + return na; +} + + +/*! + * \brief pixGetGrayHistogramMasked() + * + * \param[in] pixs 8 bpp, or colormapped + * \param[in] pixm [optional] 1 bpp mask over which histogram is + * to be computed; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0; these values are ignored if pixm is null + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
+ *          If you want a histogram of the colormap indices, use
+ *          pixGetCmapHistogramMasked().
+ *      (2) This always returns a 256-value histogram of pixel values.
+ *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
+ *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
+ *      (5) Input x,y are ignored unless pixm exists.
+ * 
+ */ +NUMA * +pixGetGrayHistogramMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor) +{ +l_int32 i, j, w, h, wm, hm, dm, wplg, wplm, val; +l_uint32 *datag, *datam, *lineg, *linem; +l_float32 *array; +NUMA *na; +PIX *pixg; + + PROCNAME("pixGetGrayHistogramMasked"); + + if (!pixm) + return pixGetGrayHistogram(pixs, factor); + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) + return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", + procName, NULL); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (dm != 1) + return (NUMA *)ERROR_PTR("pixm not 1 bpp", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + + if ((na = numaCreate(256)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, 256); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + if (pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + pixGetDimensions(pixg, &w, &h, NULL); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + + /* Generate the histogram */ + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + lineg = datag + (y + i) * wplg; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + val = GET_DATA_BYTE(lineg, x + j); + array[val] += 1.0; + } + } + } + + pixDestroy(&pixg); + return na; +} + + +/*! + * \brief pixGetGrayHistogramInRect() + * + * \param[in] pixs 8 bpp, or colormapped + * \param[in] box [optional] over which histogram is to be computed; + * use full image if NULL + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
+ *          If you want a histogram of the colormap indices, use
+ *          pixGetCmapHistogramInRect().
+ *      (2) This always returns a 256-value histogram of pixel values.
+ *      (3) Set the subsampling %factor > 1 to reduce the amount of computation.
+ * 
+ */ +NUMA * +pixGetGrayHistogramInRect(PIX *pixs, + BOX *box, + l_int32 factor) +{ +l_int32 i, j, bx, by, bw, bh, w, h, wplg, val; +l_uint32 *datag, *lineg; +l_float32 *array; +NUMA *na; +PIX *pixg; + + PROCNAME("pixGetGrayHistogramInRect"); + + if (!box) + return pixGetGrayHistogram(pixs, factor); + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) + return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", + procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + + if ((na = numaCreate(256)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, 256); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + if (pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + pixGetDimensions(pixg, &w, &h, NULL); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + boxGetGeometry(box, &bx, &by, &bw, &bh); + + /* Generate the histogram */ + for (i = 0; i < bh; i += factor) { + if (by + i < 0 || by + i >= h) continue; + lineg = datag + (by + i) * wplg; + for (j = 0; j < bw; j += factor) { + if (bx + j < 0 || bx + j >= w) continue; + val = GET_DATA_BYTE(lineg, bx + j); + array[val] += 1.0; + } + } + + pixDestroy(&pixg); + return na; +} + + +/*! + * \brief pixGetGrayHistogramTiled() + * + * \param[in] pixs any depth, colormap OK + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] nx, ny tiling; >= 1; typically small + * \return naa set of histograms, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is cmapped, it is converted to 8 bpp gray.
+ *      (2) This returns a set of 256-value histograms of pixel values.
+ *      (3) Set the subsampling factor > 1 to reduce the amount of computation.
+ * 
+ */ +NUMAA * +pixGetGrayHistogramTiled(PIX *pixs, + l_int32 factor, + l_int32 nx, + l_int32 ny) +{ +l_int32 i, n; +NUMA *na; +NUMAA *naa; +PIX *pix1, *pix2; +PIXA *pixa; + + PROCNAME("pixGetGrayHistogramTiled"); + + if (!pixs) + return (NUMAA *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (NUMAA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + if (nx < 1 || ny < 1) + return (NUMAA *)ERROR_PTR("nx and ny must both be > 0", procName, NULL); + + n = nx * ny; + if ((naa = numaaCreate(n)) == NULL) + return (NUMAA *)ERROR_PTR("naa not made", procName, NULL); + + pix1 = pixConvertTo8(pixs, FALSE); + pixa = pixaSplitPix(pix1, nx, ny, 0, 0); + for (i = 0; i < n; i++) { + pix2 = pixaGetPix(pixa, i, L_CLONE); + na = pixGetGrayHistogram(pix2, factor); + numaaAddNuma(naa, na, L_INSERT); + pixDestroy(&pix2); + } + + pixDestroy(&pix1); + pixaDestroy(&pixa); + return naa; +} + + +/*! + * \brief pixGetColorHistogram() + * + * \param[in] pixs rgb or colormapped + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] pnar red histogram + * \param[out] pnag green histogram + * \param[out] pnab blue histogram + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a set of three 256 entry histograms,
+ *          one for each color component (r,g,b).
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ * 
+ */ +l_ok +pixGetColorHistogram(PIX *pixs, + l_int32 factor, + NUMA **pnar, + NUMA **pnag, + NUMA **pnab) +{ +l_int32 i, j, w, h, d, wpl, index, rval, gval, bval; +l_uint32 *data, *line; +l_float32 *rarray, *garray, *barray; +NUMA *nar, *nag, *nab; +PIXCMAP *cmap; + + PROCNAME("pixGetColorHistogram"); + + if (pnar) *pnar = NULL; + if (pnag) *pnag = NULL; + if (pnab) *pnab = NULL; + if (!pnar || !pnag || !pnab) + return ERROR_INT("&nar, &nag, &nab not all defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (cmap && (d != 2 && d != 4 && d != 8)) + return ERROR_INT("colormap and not 2, 4, or 8 bpp", procName, 1); + if (!cmap && d != 32) + return ERROR_INT("no colormap and not rgb", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + + /* Set up the histogram arrays */ + nar = numaCreate(256); + nag = numaCreate(256); + nab = numaCreate(256); + numaSetCount(nar, 256); + numaSetCount(nag, 256); + numaSetCount(nab, 256); + rarray = numaGetFArray(nar, L_NOCOPY); + garray = numaGetFArray(nag, L_NOCOPY); + barray = numaGetFArray(nab, L_NOCOPY); + *pnar = nar; + *pnag = nag; + *pnab = nab; + + /* Generate the color histograms */ + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + if (cmap) { + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + if (d == 8) + index = GET_DATA_BYTE(line, j); + else if (d == 4) + index = GET_DATA_QBIT(line, j); + else /* 2 bpp */ + index = GET_DATA_DIBIT(line, j); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + rarray[rval] += 1.0; + garray[gval] += 1.0; + barray[bval] += 1.0; + } + } + } else { /* 32 bpp rgb */ + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + extractRGBValues(line[j], &rval, &gval, &bval); + rarray[rval] += 1.0; + garray[gval] += 1.0; + barray[bval] += 1.0; + } + } + } + + return 0; +} + + +/*! + * \brief pixGetColorHistogramMasked() + * + * \param[in] pixs 32 bpp rgb, or colormapped + * \param[in] pixm [optional] 1 bpp mask over which histogram is + * to be computed; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0; these values are ignored if pixm is null + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] pnar red histogram + * \param[out] pnag green histogram + * \param[out] pnab blue histogram + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a set of three 256 entry histograms,
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ *      (3) Clipping of pixm (if it exists) to pixs is done in the inner loop.
+ *      (4) Input x,y are ignored unless pixm exists.
+ * 
+ */ +l_ok +pixGetColorHistogramMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + NUMA **pnar, + NUMA **pnag, + NUMA **pnab) +{ +l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, index, rval, gval, bval; +l_uint32 *datas, *datam, *lines, *linem; +l_float32 *rarray, *garray, *barray; +NUMA *nar, *nag, *nab; +PIXCMAP *cmap; + + PROCNAME("pixGetColorHistogramMasked"); + + if (!pixm) + return pixGetColorHistogram(pixs, factor, pnar, pnag, pnab); + + if (pnar) *pnar = NULL; + if (pnag) *pnag = NULL; + if (pnab) *pnab = NULL; + if (!pnar || !pnag || !pnab) + return ERROR_INT("&nar, &nag, &nab not all defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (cmap && (d != 2 && d != 4 && d != 8)) + return ERROR_INT("colormap and not 2, 4, or 8 bpp", procName, 1); + if (!cmap && d != 32) + return ERROR_INT("no colormap and not rgb", procName, 1); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (dm != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + + /* Set up the histogram arrays */ + nar = numaCreate(256); + nag = numaCreate(256); + nab = numaCreate(256); + numaSetCount(nar, 256); + numaSetCount(nag, 256); + numaSetCount(nab, 256); + rarray = numaGetFArray(nar, L_NOCOPY); + garray = numaGetFArray(nag, L_NOCOPY); + barray = numaGetFArray(nab, L_NOCOPY); + *pnar = nar; + *pnag = nag; + *pnab = nab; + + /* Generate the color histograms */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + if (cmap) { + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + lines = datas + (y + i) * wpls; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + if (d == 8) + index = GET_DATA_BYTE(lines, x + j); + else if (d == 4) + index = GET_DATA_QBIT(lines, x + j); + else /* 2 bpp */ + index = GET_DATA_DIBIT(lines, x + j); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + rarray[rval] += 1.0; + garray[gval] += 1.0; + barray[bval] += 1.0; + } + } + } + } else { /* 32 bpp rgb */ + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + lines = datas + (y + i) * wpls; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + extractRGBValues(lines[x + j], &rval, &gval, &bval); + rarray[rval] += 1.0; + garray[gval] += 1.0; + barray[bval] += 1.0; + } + } + } + } + + return 0; +} + + +/*! + * \brief pixGetCmapHistogram() + * + * \param[in] pixs colormapped: d = 2, 4 or 8 + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram of cmap indices, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a histogram of colormap pixel indices,
+ *          and is of size 2^d.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ * 
+ */ +NUMA * +pixGetCmapHistogram(PIX *pixs, + l_int32 factor) +{ +l_int32 i, j, w, h, d, wpl, val, size; +l_uint32 *data, *line; +l_float32 *array; +NUMA *na; + + PROCNAME("pixGetCmapHistogram"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) == NULL) + return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); + + size = 1 << d; + if ((na = numaCreate(size)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, size); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + if (d == 8) + val = GET_DATA_BYTE(line, j); + else if (d == 4) + val = GET_DATA_QBIT(line, j); + else /* d == 2 */ + val = GET_DATA_DIBIT(line, j); + array[val] += 1.0; + } + } + + return na; +} + + +/*! + * \brief pixGetCmapHistogramMasked() + * + * \param[in] pixs colormapped: d = 2, 4 or 8 + * \param[in] pixm [optional] 1 bpp mask over which histogram is + * to be computed; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0; these values are ignored if pixm is null + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a histogram of colormap pixel indices,
+ *          and is of size 2^d.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ *      (3) Clipping of pixm to pixs is done in the inner loop.
+ * 
+ */ +NUMA * +pixGetCmapHistogramMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor) +{ +l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, val, size; +l_uint32 *datas, *datam, *lines, *linem; +l_float32 *array; +NUMA *na; + + PROCNAME("pixGetCmapHistogramMasked"); + + if (!pixm) + return pixGetCmapHistogram(pixs, factor); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) == NULL) + return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); + pixGetDimensions(pixm, &wm, &hm, &dm); + if (dm != 1) + return (NUMA *)ERROR_PTR("pixm not 1 bpp", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); + + size = 1 << d; + if ((na = numaCreate(size)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, size); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + lines = datas + (y + i) * wpls; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + if (d == 8) + val = GET_DATA_BYTE(lines, x + j); + else if (d == 4) + val = GET_DATA_QBIT(lines, x + j); + else /* d == 2 */ + val = GET_DATA_DIBIT(lines, x + j); + array[val] += 1.0; + } + } + } + + return na; +} + + +/*! + * \brief pixGetCmapHistogramInRect() + * + * \param[in] pixs colormapped: d = 2, 4 or 8 + * \param[in] box [optional] over which histogram is to be computed; + * use full image if NULL + * \param[in] factor subsampling factor; integer >= 1 + * \return na histogram, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a histogram of colormap pixel indices,
+ *          and is of size 2^d.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of computation.
+ *      (3) Clipping to the box is done in the inner loop.
+ * 
+ */ +NUMA * +pixGetCmapHistogramInRect(PIX *pixs, + BOX *box, + l_int32 factor) +{ +l_int32 i, j, bx, by, bw, bh, w, h, d, wpls, val, size; +l_uint32 *datas, *lines; +l_float32 *array; +NUMA *na; + + PROCNAME("pixGetCmapHistogramInRect"); + + if (!box) + return pixGetCmapHistogram(pixs, factor); + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) == NULL) + return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); + if (factor < 1) + return (NUMA *)ERROR_PTR("sampling must be >= 1", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 2 && d != 4 && d != 8) + return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); + + size = 1 << d; + if ((na = numaCreate(size)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + numaSetCount(na, size); /* all initialized to 0.0 */ + array = numaGetFArray(na, L_NOCOPY); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + boxGetGeometry(box, &bx, &by, &bw, &bh); + + for (i = 0; i < bh; i += factor) { + if (by + i < 0 || by + i >= h) continue; + lines = datas + (by + i) * wpls; + for (j = 0; j < bw; j += factor) { + if (bx + j < 0 || bx + j >= w) continue; + if (d == 8) + val = GET_DATA_BYTE(lines, bx + j); + else if (d == 4) + val = GET_DATA_QBIT(lines, bx + j); + else /* d == 2 */ + val = GET_DATA_DIBIT(lines, bx + j); + array[val] += 1.0; + } + } + + return na; +} + + +/*! + * \brief pixCountRGBColors() + * + * \param[in] pixs rgb or rgba + * \return ncolors, or -1 on error + */ +l_int32 +pixCountRGBColors(PIX *pixs) +{ +l_int32 ncolors; +L_AMAP *amap; + + PROCNAME("pixCountRGBColors"); + + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, -1); + amap = pixGetColorAmapHistogram(pixs, 1); + ncolors = l_amapSize(amap); + l_amapDestroy(&amap); + return ncolors; +} + + +/*! + * \brief pixGetColorAmapHistogram() + * + * \param[in] pixs rgb or rgba + * \param[in] factor subsampling factor; integer >= 1 + * \return amap, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates an ordered map from pixel value to histogram count.
+ *      (2) Use amapGetCountForColor() to use the map to look up a count.
+ * 
+ */ +L_AMAP * +pixGetColorAmapHistogram(PIX *pixs, + l_int32 factor) +{ +l_int32 i, j, w, h, wpl; +l_uint32 *data, *line; +L_AMAP *amap; +RB_TYPE key, value; +RB_TYPE *pval; + + PROCNAME("pixGetColorAmapHistogram"); + + if (!pixs) + return (L_AMAP *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (L_AMAP *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + amap = l_amapCreate(L_UINT_TYPE); + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + key.utype = line[j]; + pval = l_amapFind(amap, key); + if (!pval) + value.itype = 1; + else + value.itype = 1 + pval->itype; + l_amapInsert(amap, key, value); + } + } + + return amap; +} + + +/*! + * \brief amapGetCountForColor() + * + * \param[in] amap map from pixel value to count + * \param[in] val rgb or rgba pixel value + * \return count, or -1 on error + * + *
+ * Notes:
+ *      (1) The ordered map is made by pixGetColorAmapHistogram().
+ * 
+ */ +l_int32 +amapGetCountForColor(L_AMAP *amap, + l_uint32 val) +{ +RB_TYPE key; +RB_TYPE *pval; + + PROCNAME("amapGetCountForColor"); + + if (!amap) + return ERROR_INT("amap not defined", procName, -1); + + key.utype = val; + pval = l_amapFind(amap, key); + return (pval) ? pval->itype : 0; +} + + +/*! + * \brief pixGetRankValue() + * + * \param[in] pixs 8 bpp, 32 bpp or colormapped + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest + * \param[out] pvalue pixel value corresponding to input rank + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simple function to get rank values of an image.
+ *          For a color image, the median value (rank = 0.5) can be
+ *          used to linearly remap the colors based on the median
+ *          of a target image, using pixLinearMapToTargetColor().
+ * 
+ */ +l_ok +pixGetRankValue(PIX *pixs, + l_int32 factor, + l_float32 rank, + l_uint32 *pvalue) +{ +l_int32 d; +l_float32 val, rval, gval, bval; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGetRankValue"); + + if (!pvalue) + return ERROR_INT("&value not defined", procName, 1); + *pvalue = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d != 8 && d != 32 && !cmap) + return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", procName, 1); + if (cmap) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pixt = pixClone(pixs); + d = pixGetDepth(pixt); + + if (d == 8) { + pixGetRankValueMasked(pixt, NULL, 0, 0, factor, rank, &val, NULL); + *pvalue = lept_roundftoi(val); + } else { + pixGetRankValueMaskedRGB(pixt, NULL, 0, 0, factor, rank, + &rval, &gval, &bval); + composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), + lept_roundftoi(bval), pvalue); + } + + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixGetRankValueMaskedRGB() + * + * \param[in] pixs 32 bpp + * \param[in] pixm [optional] 1 bpp mask over which rank val is to be taken; + * use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0; these values are ignored if pixm is null + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest + * \param[out] prval [optional] red component val for input rank + * \param[out] pgval [optional] green component val for input rank + * \param[out] pbval [optional] blue component val for input rank + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Computes the rank component values of pixels in pixs that
+ *          are under the fg of the optional mask.  If the mask is null, it
+ *          computes the average of the pixels in pixs.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of
+ *          computation.
+ *      (4) Input x,y are ignored unless pixm exists.
+ *      (5) The rank must be in [0.0 ... 1.0], where the brightest pixel
+ *          has rank 1.0.  For the median pixel value, use 0.5.
+ * 
+ */ +l_ok +pixGetRankValueMaskedRGB(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + l_float32 rank, + l_float32 *prval, + l_float32 *pgval, + l_float32 *pbval) +{ +l_float32 scale; +PIX *pixmt, *pixt; + + PROCNAME("pixGetRankValueMaskedRGB"); + + if (prval) *prval = 0.0; + if (pgval) *pgval = 0.0; + if (pbval) *pbval = 0.0; + if (!prval && !pgval && !pbval) + return ERROR_INT("no results requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (rank < 0.0 || rank > 1.0) + return ERROR_INT("rank not in [0.0 ... 1.0]", procName, 1); + + pixmt = NULL; + if (pixm) { + scale = 1.0 / (l_float32)factor; + pixmt = pixScale(pixm, scale, scale); + } + if (prval) { + pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_RED); + pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, + factor, rank, prval, NULL); + pixDestroy(&pixt); + } + if (pgval) { + pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_GREEN); + pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, + factor, rank, pgval, NULL); + pixDestroy(&pixt); + } + if (pbval) { + pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_BLUE); + pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, + factor, rank, pbval, NULL); + pixDestroy(&pixt); + } + pixDestroy(&pixmt); + return 0; +} + + +/*! + * \brief pixGetRankValueMasked() + * + * \param[in] pixs 8 bpp, or colormapped + * \param[in] pixm [optional] 1 bpp mask, over which the rank val + * is to be taken; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0; these values are ignored if pixm is null + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] rank between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest + * \param[out] pval pixel value corresponding to input rank + * \param[out] pna [optional] of histogram + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Computes the rank value of pixels in pixs that are under
+ *          the fg of the optional mask.  If the mask is null, it
+ *          computes the average of the pixels in pixs.
+ *      (2) Set the subsampling %factor > 1 to reduce the amount of
+ *          computation.
+ *      (3) Clipping of pixm (if it exists) to pixs is done in the inner loop.
+ *      (4) Input x,y are ignored unless pixm exists.
+ *      (5) The rank must be in [0.0 ... 1.0], where the brightest pixel
+ *          has rank 1.0.  For the median pixel value, use 0.5.
+ *      (6) The histogram can optionally be returned, so that other rank
+ *          values can be extracted without recomputing the histogram.
+ *          In that case, just use
+ *              numaHistogramGetValFromRank(na, rank, &val);
+ *          on the returned Numa for additional rank values.
+ * 
+ */ +l_ok +pixGetRankValueMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + l_float32 rank, + l_float32 *pval, + NUMA **pna) +{ +NUMA *na; + + PROCNAME("pixGetRankValueMasked"); + + if (pna) *pna = NULL; + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) + return ERROR_INT("pixs neither 8 bpp nor colormapped", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (rank < 0.0 || rank > 1.0) + return ERROR_INT("rank not in [0.0 ... 1.0]", procName, 1); + + if ((na = pixGetGrayHistogramMasked(pixs, pixm, x, y, factor)) == NULL) + return ERROR_INT("na not made", procName, 1); + numaHistogramGetValFromRank(na, rank, pval); + if (pna) + *pna = na; + else + numaDestroy(&na); + + return 0; +} + + +/*! + * \brief pixGetPixelAverage() + * + * \param[in] pixs 8 or 32 bpp, or colormapped + * \param[in] pixm [optional] 1 bpp mask over which average is + * to be taken; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0 + * \param[in] factor subsampling factor; >= 1 + * \param[out] pval average pixel value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For rgb pix, this is a more direct computation of the
+ *          average value of the pixels in %pixs that are under the
+ *          mask %pixm. It is faster than pixGetPixelStats(), which
+ *          calls pixGetAverageMaskedRGB() and has the overhead of
+ *          generating a temporary pix of each of the three components;
+ *          this can take most of the time if %factor > 1.
+ *      (2) If %pixm is null, this gives the average value of all
+ *          pixels in %pixs.  The returned value is an integer.
+ *      (3) For color %pixs, the returned pixel value is in the standard
+ *          uint32 RGBA packing.
+ *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
+ *      (5) Input x,y are ignored if %pixm does not exist.
+ * 
+ */ +l_ok +pixGetPixelAverage(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + l_uint32 *pval) +{ +l_int32 i, j, w, h, d, wm, hm, wpl1, wplm, val, rval, gval, bval, count; +l_uint32 *data1, *datam, *line1, *linem; +l_float64 sum, rsum, gsum, bsum; +PIX *pix1; + + PROCNAME("pixGetPixelAverage"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + if (d != 32 && !pixGetColormap(pixs)) + return ERROR_INT("pixs not rgb or colormapped", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + + if (pixGetColormap(pixs)) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix1 = pixClone(pixs); + pixGetDimensions(pix1, &w, &h, &d); + if (d == 1) { + pixDestroy(&pix1); + return ERROR_INT("pix1 is just 1 bpp", procName, 1); + } + data1 = pixGetData(pix1); + wpl1 = pixGetWpl(pix1); + + sum = rsum = gsum = bsum = 0.0; + count = 0; + if (!pixm) { + for (i = 0; i < h; i += factor) { + line1 = data1 + i * wpl1; + for (j = 0; j < w; j += factor) { + if (d == 8) { + val = GET_DATA_BYTE(line1, j); + sum += val; + } else { /* rgb */ + extractRGBValues(*(line1 + j), &rval, &gval, &bval); + rsum += rval; + gsum += gval; + bsum += bval; + } + count++; + } + } + } else { /* masked */ + pixGetDimensions(pixm, &wm, &hm, NULL); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + line1 = data1 + (y + i) * wpl1; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + if (d == 8) { + val = GET_DATA_BYTE(line1, x + j); + sum += val; + } else { /* rgb */ + extractRGBValues(*(line1 + x + j), &rval, &gval, &bval); + rsum += rval; + gsum += gval; + bsum += bval; + } + count++; + } + } + } + } + + pixDestroy(&pix1); + if (count == 0) + return ERROR_INT("no pixels sampled", procName, 1); + if (d == 8) { + *pval = (l_uint32)((l_float64)sum / (l_float64)count); + } else { /* d == 32 */ + rval = (l_uint32)((l_float64)rsum / (l_float64)count); + gval = (l_uint32)((l_float64)gsum / (l_float64)count); + bval = (l_uint32)((l_float64)bsum / (l_float64)count); + composeRGBPixel(rval, gval, bval, pval); + } + + return 0; +} + + +/*! + * \brief pixGetPixelStats() + * + * \param[in] pixs 8 bpp, 32 bpp or colormapped + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, + * L_STANDARD_DEVIATION, L_VARIANCE + * \param[out] pvalue pixel value corresponding to input type + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simple function to get one of four statistical values of an image.
+ *      (2) It does not take a mask: it uses the entire image.
+ *      (3) To get the average pixel value of an RGB image, suggest using
+ *          pixGetPixelAverage(), which is considerably faster.
+ * 
+ */ +l_ok +pixGetPixelStats(PIX *pixs, + l_int32 factor, + l_int32 type, + l_uint32 *pvalue) +{ +l_int32 d; +l_float32 val, rval, gval, bval; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGetPixelStats"); + + if (!pvalue) + return ERROR_INT("&value not defined", procName, 1); + *pvalue = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d != 8 && d != 32 && !cmap) + return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", procName, 1); + if (cmap) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pixt = pixClone(pixs); + d = pixGetDepth(pixt); + + if (d == 8) { + pixGetAverageMasked(pixt, NULL, 0, 0, factor, type, &val); + *pvalue = lept_roundftoi(val); + } else { + pixGetAverageMaskedRGB(pixt, NULL, 0, 0, factor, type, + &rval, &gval, &bval); + composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), + lept_roundftoi(bval), pvalue); + } + + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixGetAverageMaskedRGB() + * + * \param[in] pixs 32 bpp, or colormapped + * \param[in] pixm [optional] 1 bpp mask over which average is + * to be taken; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0 + * \param[in] factor subsampling factor; >= 1 + * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, + * L_STANDARD_DEVIATION, L_VARIANCE + * \param[out] prval [optional] measured red value of given 'type' + * \param[out] pgval [optional] measured green value of given 'type' + * \param[out] pbval [optional] measured blue value of given 'type' + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For usage, see pixGetAverageMasked().
+ *      (2) If there is a colormap, it is removed before the 8 bpp
+ *          component images are extracted.
+ *      (3) A better name for this would be: pixGetPixelStatsRGB()
+ * 
+ */ +l_ok +pixGetAverageMaskedRGB(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + l_int32 type, + l_float32 *prval, + l_float32 *pgval, + l_float32 *pbval) +{ +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGetAverageMaskedRGB"); + + if (prval) *prval = 0.0; + if (pgval) *pgval = 0.0; + if (pbval) *pbval = 0.0; + if (!prval && !pgval && !pbval) + return ERROR_INT("no values requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + cmap = pixGetColormap(pixs); + if (pixGetDepth(pixs) != 32 && !cmap) + return ERROR_INT("pixs neither 32 bpp nor colormapped", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && + type != L_STANDARD_DEVIATION && type != L_VARIANCE) + return ERROR_INT("invalid measure type", procName, 1); + + if (prval) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); + else + pixt = pixGetRGBComponent(pixs, COLOR_RED); + pixGetAverageMasked(pixt, pixm, x, y, factor, type, prval); + pixDestroy(&pixt); + } + if (pgval) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); + else + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + pixGetAverageMasked(pixt, pixm, x, y, factor, type, pgval); + pixDestroy(&pixt); + } + if (pbval) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); + else + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + pixGetAverageMasked(pixt, pixm, x, y, factor, type, pbval); + pixDestroy(&pixt); + } + + return 0; +} + + +/*! + * \brief pixGetAverageMasked() + * + * \param[in] pixs 8 or 16 bpp, or colormapped + * \param[in] pixm [optional] 1 bpp mask over which average is + * to be taken; use all pixels if null + * \param[in] x, y UL corner of pixm relative to the UL corner of pixs; + * can be < 0 + * \param[in] factor subsampling factor; >= 1 + * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, + * L_STANDARD_DEVIATION, L_VARIANCE + * \param[out] pval measured value of given 'type' + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Use L_MEAN_ABSVAL to get the average value of pixels in pixs
+ *          that are under the fg of the optional mask.  If the mask
+ *          is null, it finds the average of the pixels in pixs.
+ *      (2) Likewise, use L_ROOT_MEAN_SQUARE to get the rms value of
+ *          pixels in pixs, either masked or not; L_STANDARD_DEVIATION
+ *          to get the standard deviation from the mean of the pixels;
+ *          L_VARIANCE to get the average squared difference from the
+ *          expected value.  The variance is the square of the stdev.
+ *          For the standard deviation, we use
+ *              sqrt([([x] - x)]^2) = sqrt([x^2] - [x]^2)
+ *      (3) Set the subsampling %factor > 1 to reduce the amount of
+ *          computation.
+ *      (4) Clipping of pixm (if it exists) to pixs is done in the inner loop.
+ *      (5) Input x,y are ignored unless pixm exists.
+ *      (6) A better name for this would be: pixGetPixelStatsGray()
+ * 
+ */ +l_ok +pixGetAverageMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_int32 factor, + l_int32 type, + l_float32 *pval) +{ +l_int32 i, j, w, h, d, wm, hm, wplg, wplm, val, count; +l_uint32 *datag, *datam, *lineg, *linem; +l_float64 sumave, summs, ave, meansq, var; +PIX *pixg; + + PROCNAME("pixGetAverageMasked"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + if (d != 8 && d != 16 && !pixGetColormap(pixs)) + return ERROR_INT("pixs not 8 or 16 bpp or colormapped", procName, 1); + if (pixm && pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not 1 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && + type != L_STANDARD_DEVIATION && type != L_VARIANCE) + return ERROR_INT("invalid measure type", procName, 1); + + if (pixGetColormap(pixs)) + pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixg = pixClone(pixs); + pixGetDimensions(pixg, &w, &h, &d); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + + sumave = summs = 0.0; + count = 0; + if (!pixm) { + for (i = 0; i < h; i += factor) { + lineg = datag + i * wplg; + for (j = 0; j < w; j += factor) { + if (d == 8) + val = GET_DATA_BYTE(lineg, j); + else /* d == 16 */ + val = GET_DATA_TWO_BYTES(lineg, j); + if (type != L_ROOT_MEAN_SQUARE) + sumave += val; + if (type != L_MEAN_ABSVAL) + summs += (l_float64)(val) * val; + count++; + } + } + } else { + pixGetDimensions(pixm, &wm, &hm, NULL); + datam = pixGetData(pixm); + wplm = pixGetWpl(pixm); + for (i = 0; i < hm; i += factor) { + if (y + i < 0 || y + i >= h) continue; + lineg = datag + (y + i) * wplg; + linem = datam + i * wplm; + for (j = 0; j < wm; j += factor) { + if (x + j < 0 || x + j >= w) continue; + if (GET_DATA_BIT(linem, j)) { + if (d == 8) + val = GET_DATA_BYTE(lineg, x + j); + else /* d == 16 */ + val = GET_DATA_TWO_BYTES(lineg, x + j); + if (type != L_ROOT_MEAN_SQUARE) + sumave += val; + if (type != L_MEAN_ABSVAL) + summs += (l_float64)(val) * val; + count++; + } + } + } + } + + pixDestroy(&pixg); + if (count == 0) + return ERROR_INT("no pixels sampled", procName, 1); + ave = sumave / (l_float64)count; + meansq = summs / (l_float64)count; + var = meansq - ave * ave; + if (type == L_MEAN_ABSVAL) + *pval = (l_float32)ave; + else if (type == L_ROOT_MEAN_SQUARE) + *pval = (l_float32)sqrt(meansq); + else if (type == L_STANDARD_DEVIATION) + *pval = (l_float32)sqrt(var); + else /* type == L_VARIANCE */ + *pval = (l_float32)var; + + return 0; +} + + +/*! + * \brief pixGetAverageTiledRGB() + * + * \param[in] pixs 32 bpp, or colormapped + * \param[in] sx, sy tile size; must be at least 2 x 2 + * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION + * \param[out] ppixr [optional] tiled 'average' of red component + * \param[out] ppixg [optional] tiled 'average' of green component + * \param[out] ppixb [optional] tiled 'average' of blue component + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For usage, see pixGetAverageTiled().
+ *      (2) If there is a colormap, it is removed before the 8 bpp
+ *          component images are extracted.
+ * 
+ */ +l_ok +pixGetAverageTiledRGB(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 type, + PIX **ppixr, + PIX **ppixg, + PIX **ppixb) +{ +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixGetAverageTiledRGB"); + + if (ppixr) *ppixr = NULL; + if (ppixg) *ppixg = NULL; + if (ppixb) *ppixb = NULL; + if (!ppixr && !ppixg && !ppixb) + return ERROR_INT("no data requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + cmap = pixGetColormap(pixs); + if (pixGetDepth(pixs) != 32 && !cmap) + return ERROR_INT("pixs neither 32 bpp nor colormapped", procName, 1); + if (sx < 2 || sy < 2) + return ERROR_INT("sx and sy not both > 1", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && + type != L_STANDARD_DEVIATION) + return ERROR_INT("invalid measure type", procName, 1); + + if (ppixr) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); + else + pixt = pixGetRGBComponent(pixs, COLOR_RED); + *ppixr = pixGetAverageTiled(pixt, sx, sy, type); + pixDestroy(&pixt); + } + if (ppixg) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); + else + pixt = pixGetRGBComponent(pixs, COLOR_GREEN); + *ppixg = pixGetAverageTiled(pixt, sx, sy, type); + pixDestroy(&pixt); + } + if (ppixb) { + if (cmap) + pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); + else + pixt = pixGetRGBComponent(pixs, COLOR_BLUE); + *ppixb = pixGetAverageTiled(pixt, sx, sy, type); + pixDestroy(&pixt); + } + + return 0; +} + + +/*! + * \brief pixGetAverageTiled() + * + * \param[in] pixs 8 bpp, or colormapped + * \param[in] sx, sy tile size; must be at least 2 x 2 + * \param[in] type L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION + * \return pixd average values in each tile, or NULL on error + * + *
+ * Notes:
+ *      (1) Only computes for tiles that are entirely contained in pixs.
+ *      (2) Use L_MEAN_ABSVAL to get the average abs value within the tile;
+ *          L_ROOT_MEAN_SQUARE to get the rms value within each tile;
+ *          L_STANDARD_DEVIATION to get the standard dev. from the average
+ *          within each tile.
+ *      (3) If colormapped, converts to 8 bpp gray.
+ * 
+ */ +PIX * +pixGetAverageTiled(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 type) +{ +l_int32 i, j, k, m, w, h, wd, hd, d, pos, wplt, wpld, valt; +l_uint32 *datat, *datad, *linet, *lined, *startt; +l_float64 sumave, summs, ave, meansq, normfact; +PIX *pixt, *pixd; + + PROCNAME("pixGetAverageTiled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", procName, NULL); + if (sx < 2 || sy < 2) + return (PIX *)ERROR_PTR("sx and sy not both > 1", procName, NULL); + wd = w / sx; + hd = h / sy; + if (wd < 1 || hd < 1) + return (PIX *)ERROR_PTR("wd or hd == 0", procName, NULL); + if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && + type != L_STANDARD_DEVIATION) + return (PIX *)ERROR_PTR("invalid measure type", procName, NULL); + + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + pixd = pixCreate(wd, hd, 8); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + normfact = 1. / (l_float64)(sx * sy); + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + linet = datat + i * sy * wplt; + for (j = 0; j < wd; j++) { + if (type == L_MEAN_ABSVAL || type == L_STANDARD_DEVIATION) { + sumave = 0.0; + for (k = 0; k < sy; k++) { + startt = linet + k * wplt; + for (m = 0; m < sx; m++) { + pos = j * sx + m; + valt = GET_DATA_BYTE(startt, pos); + sumave += valt; + } + } + ave = normfact * sumave; + } + if (type == L_ROOT_MEAN_SQUARE || type == L_STANDARD_DEVIATION) { + summs = 0.0; + for (k = 0; k < sy; k++) { + startt = linet + k * wplt; + for (m = 0; m < sx; m++) { + pos = j * sx + m; + valt = GET_DATA_BYTE(startt, pos); + summs += (l_float64)(valt) * valt; + } + } + meansq = normfact * summs; + } + if (type == L_MEAN_ABSVAL) + valt = (l_int32)(ave + 0.5); + else if (type == L_ROOT_MEAN_SQUARE) + valt = (l_int32)(sqrt(meansq) + 0.5); + else /* type == L_STANDARD_DEVIATION */ + valt = (l_int32)(sqrt(meansq - ave * ave) + 0.5); + SET_DATA_BYTE(lined, j, valt); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixRowStats() + * + * \param[in] pixs 8 bpp; not cmapped + * \param[in] box [optional] clipping box; can be null + * \param[out] pnamean [optional] numa of mean values + * \param[out] pnamedian [optional] numa of median values + * \param[out] pnamode [optional] numa of mode intensity values + * \param[out] pnamodecount [optional] numa of mode counts + * \param[out] pnavar [optional] numa of variance + * \param[out] pnarootvar [optional] numa of square root of variance + * \return na numa of requested statistic for each row, or NULL on error + * + *
+ * Notes:
+ *      (1) This computes numas that represent column vectors of statistics,
+ *          with each of its values derived from the corresponding row of a Pix.
+ *      (2) Use NULL on input to prevent computation of any of the 5 numas.
+ *      (3) Other functions that compute pixel row statistics are:
+ *             pixCountPixelsByRow()
+ *             pixAverageByRow()
+ *             pixVarianceByRow()
+ *             pixGetRowStats()
+ * 
+ */ +l_int32 +pixRowStats(PIX *pixs, + BOX *box, + NUMA **pnamean, + NUMA **pnamedian, + NUMA **pnamode, + NUMA **pnamodecount, + NUMA **pnavar, + NUMA **pnarootvar) +{ +l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; +l_int32 xstart, xend, ystart, yend, bw, bh; +l_int32 *histo; +l_uint32 *lines, *datas; +l_float32 norm; +l_float32 *famean, *fameansq, *favar, *farootvar; +l_float32 *famedian, *famode, *famodecount; + + PROCNAME("pixRowStats"); + + if (pnamean) *pnamean = NULL; + if (pnamedian) *pnamedian = NULL; + if (pnamode) *pnamode = NULL; + if (pnamodecount) *pnamodecount = NULL; + if (pnavar) *pnavar = NULL; + if (pnarootvar) *pnarootvar = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + famean = fameansq = favar = farootvar = NULL; + famedian = famode = famodecount = NULL; + + pixGetDimensions(pixs, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return ERROR_INT("invalid clipping box", procName, 1); + + /* We need the mean for variance and root variance */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (pnamean || pnavar || pnarootvar) { + norm = 1. / (l_float32)bw; + famean = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); + fameansq = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); + if (pnavar || pnarootvar) { + favar = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); + if (pnarootvar) + farootvar = (l_float32 *)LEPT_CALLOC(bh, sizeof(l_float32)); + } + for (i = ystart; i < yend; i++) { + sum = sumsq = 0; + lines = datas + i * wpls; + for (j = xstart; j < xend; j++) { + val = GET_DATA_BYTE(lines, j); + sum += val; + sumsq += val * val; + } + famean[i] = norm * sum; + fameansq[i] = norm * sumsq; + if (pnavar || pnarootvar) { + favar[i] = fameansq[i] - famean[i] * famean[i]; + if (pnarootvar) + farootvar[i] = sqrtf(favar[i]); + } + } + LEPT_FREE(fameansq); + if (pnamean) + *pnamean = numaCreateFromFArray(famean, bh, L_INSERT); + else + LEPT_FREE(famean); + if (pnavar) + *pnavar = numaCreateFromFArray(favar, bh, L_INSERT); + else + LEPT_FREE(favar); + if (pnarootvar) + *pnarootvar = numaCreateFromFArray(farootvar, bh, L_INSERT); + } + + /* We need a histogram to find the median and/or mode values */ + if (pnamedian || pnamode || pnamodecount) { + histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (pnamedian) { + *pnamedian = numaMakeConstant(0, bh); + famedian = numaGetFArray(*pnamedian, L_NOCOPY); + } + if (pnamode) { + *pnamode = numaMakeConstant(0, bh); + famode = numaGetFArray(*pnamode, L_NOCOPY); + } + if (pnamodecount) { + *pnamodecount = numaMakeConstant(0, bh); + famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); + } + for (i = ystart; i < yend; i++) { + lines = datas + i * wpls; + memset(histo, 0, 1024); + for (j = xstart; j < xend; j++) { + val = GET_DATA_BYTE(lines, j); + histo[val]++; + } + + if (pnamedian) { + sum = 0; + target = (bw + 1) / 2; + for (k = 0; k < 256; k++) { + sum += histo[k]; + if (sum >= target) { + famedian[i] = k; + break; + } + } + } + + if (pnamode || pnamodecount) { + max = 0; + modeval = 0; + for (k = 0; k < 256; k++) { + if (histo[k] > max) { + max = histo[k]; + modeval = k; + } + } + if (pnamode) + famode[i] = modeval; + if (pnamodecount) + famodecount[i] = max; + } + } + LEPT_FREE(histo); + } + + return 0; +} + + +/*! + * \brief pixColumnStats() + * + * \param[in] pixs 8 bpp; not cmapped + * \param[in] box [optional] clipping box; can be null + * \param[out] pnamean [optional] numa of mean values + * \param[out] pnamedian [optional] numa of median values + * \param[out] pnamode [optional] numa of mode intensity values + * \param[out] pnamodecount [optional] numa of mode counts + * \param[out] pnavar [optional] numa of variance + * \param[out] pnarootvar [optional] numa of square root of variance + * \return na numa of requested statistic for each column, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This computes numas that represent row vectors of statistics,
+ *          with each of its values derived from the corresponding col of a Pix.
+ *      (2) Use NULL on input to prevent computation of any of the 5 numas.
+ *      (3) Other functions that compute pixel column statistics are:
+ *             pixCountPixelsByColumn()
+ *             pixAverageByColumn()
+ *             pixVarianceByColumn()
+ *             pixGetColumnStats()
+ * 
+ */ +l_int32 +pixColumnStats(PIX *pixs, + BOX *box, + NUMA **pnamean, + NUMA **pnamedian, + NUMA **pnamode, + NUMA **pnamodecount, + NUMA **pnavar, + NUMA **pnarootvar) +{ +l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; +l_int32 xstart, xend, ystart, yend, bw, bh; +l_int32 *histo; +l_uint32 *lines, *datas; +l_float32 norm; +l_float32 *famean, *fameansq, *favar, *farootvar; +l_float32 *famedian, *famode, *famodecount; + + PROCNAME("pixColumnStats"); + + if (pnamean) *pnamean = NULL; + if (pnamedian) *pnamedian = NULL; + if (pnamode) *pnamode = NULL; + if (pnamodecount) *pnamodecount = NULL; + if (pnavar) *pnavar = NULL; + if (pnarootvar) *pnarootvar = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + famean = fameansq = favar = farootvar = NULL; + famedian = famode = famodecount = NULL; + + pixGetDimensions(pixs, &w, &h, NULL); + if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, + &bw, &bh) == 1) + return ERROR_INT("invalid clipping box", procName, 1); + + /* We need the mean for variance and root variance */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (pnamean || pnavar || pnarootvar) { + norm = 1. / (l_float32)bh; + famean = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); + fameansq = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); + if (pnavar || pnarootvar) { + favar = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); + if (pnarootvar) + farootvar = (l_float32 *)LEPT_CALLOC(bw, sizeof(l_float32)); + } + for (j = xstart; j < xend; j++) { + sum = sumsq = 0; + for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { + val = GET_DATA_BYTE(lines, j); + sum += val; + sumsq += val * val; + } + famean[j] = norm * sum; + fameansq[j] = norm * sumsq; + if (pnavar || pnarootvar) { + favar[j] = fameansq[j] - famean[j] * famean[j]; + if (pnarootvar) + farootvar[j] = sqrtf(favar[j]); + } + } + LEPT_FREE(fameansq); + if (pnamean) + *pnamean = numaCreateFromFArray(famean, bw, L_INSERT); + else + LEPT_FREE(famean); + if (pnavar) + *pnavar = numaCreateFromFArray(favar, bw, L_INSERT); + else + LEPT_FREE(favar); + if (pnarootvar) + *pnarootvar = numaCreateFromFArray(farootvar, bw, L_INSERT); + } + + /* We need a histogram to find the median and/or mode values */ + if (pnamedian || pnamode || pnamodecount) { + histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + if (pnamedian) { + *pnamedian = numaMakeConstant(0, bw); + famedian = numaGetFArray(*pnamedian, L_NOCOPY); + } + if (pnamode) { + *pnamode = numaMakeConstant(0, bw); + famode = numaGetFArray(*pnamode, L_NOCOPY); + } + if (pnamodecount) { + *pnamodecount = numaMakeConstant(0, bw); + famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); + } + for (j = xstart; j < xend; j++) { + memset(histo, 0, 1024); + for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { + val = GET_DATA_BYTE(lines, j); + histo[val]++; + } + + if (pnamedian) { + sum = 0; + target = (bh + 1) / 2; + for (k = 0; k < 256; k++) { + sum += histo[k]; + if (sum >= target) { + famedian[j] = k; + break; + } + } + } + + if (pnamode || pnamodecount) { + max = 0; + modeval = 0; + for (k = 0; k < 256; k++) { + if (histo[k] > max) { + max = histo[k]; + modeval = k; + } + } + if (pnamode) + famode[j] = modeval; + if (pnamodecount) + famodecount[j] = max; + } + } + LEPT_FREE(histo); + } + + return 0; +} + + +/*! + * \brief pixGetRangeValues() + * + * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; >= 1; ignored if colormapped + * \param[in] color L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE + * \param[out] pminval [optional] minimum value of component + * \param[out] pmaxval [optional] maximum value of component + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If pixs is 8 bpp grayscale, the color selection type is ignored.
+ * 
+ */ +l_ok +pixGetRangeValues(PIX *pixs, + l_int32 factor, + l_int32 color, + l_int32 *pminval, + l_int32 *pmaxval) +{ +l_int32 d; +PIXCMAP *cmap; + + PROCNAME("pixGetRangeValues"); + + if (pminval) *pminval = 0; + if (pmaxval) *pmaxval = 0; + if (!pminval && !pmaxval) + return ERROR_INT("no result requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + cmap = pixGetColormap(pixs); + if (cmap) + return pixcmapGetRangeValues(cmap, color, pminval, pmaxval, + NULL, NULL); + + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); + + if (d == 8) { + pixGetExtremeValue(pixs, factor, L_SELECT_MIN, + NULL, NULL, NULL, pminval); + pixGetExtremeValue(pixs, factor, L_SELECT_MAX, + NULL, NULL, NULL, pmaxval); + } else if (color == L_SELECT_RED) { + pixGetExtremeValue(pixs, factor, L_SELECT_MIN, + pminval, NULL, NULL, NULL); + pixGetExtremeValue(pixs, factor, L_SELECT_MAX, + pmaxval, NULL, NULL, NULL); + } else if (color == L_SELECT_GREEN) { + pixGetExtremeValue(pixs, factor, L_SELECT_MIN, + NULL, pminval, NULL, NULL); + pixGetExtremeValue(pixs, factor, L_SELECT_MAX, + NULL, pmaxval, NULL, NULL); + } else if (color == L_SELECT_BLUE) { + pixGetExtremeValue(pixs, factor, L_SELECT_MIN, + NULL, NULL, pminval, NULL); + pixGetExtremeValue(pixs, factor, L_SELECT_MAX, + NULL, NULL, pmaxval, NULL); + } else { + return ERROR_INT("invalid color", procName, 1); + } + + return 0; +} + + +/*! + * \brief pixGetExtremeValue() + * + * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped + * \param[in] factor subsampling factor; >= 1; ignored if colormapped + * \param[in] type L_SELECT_MIN or L_SELECT_MAX + * \param[out] prval [optional] red component + * \param[out] pgval [optional] green component + * \param[out] pbval [optional] blue component + * \param[out] pgrayval [optional] min or max gray value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If pixs is grayscale, the result is returned in &grayval.
+ *          Otherwise, if there is a colormap or d == 32,
+ *          each requested color component is returned.  At least
+ *          one color component (address) must be input.
+ * 
+ */ +l_ok +pixGetExtremeValue(PIX *pixs, + l_int32 factor, + l_int32 type, + l_int32 *prval, + l_int32 *pgval, + l_int32 *pbval, + l_int32 *pgrayval) +{ +l_int32 i, j, w, h, d, wpl; +l_int32 val, extval, rval, gval, bval, extrval, extgval, extbval; +l_uint32 pixel; +l_uint32 *data, *line; +PIXCMAP *cmap; + + PROCNAME("pixGetExtremeValue"); + + if (prval) *prval = -1; + if (pgval) *pgval = -1; + if (pbval) *pbval = -1; + if (pgrayval) *pgrayval = -1; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (type != L_SELECT_MIN && type != L_SELECT_MAX) + return ERROR_INT("invalid type", procName, 1); + + cmap = pixGetColormap(pixs); + if (cmap) { + if (type == L_SELECT_MIN) { + if (prval) pixcmapGetRangeValues(cmap, L_SELECT_RED, prval, NULL, + NULL, NULL); + if (pgval) pixcmapGetRangeValues(cmap, L_SELECT_GREEN, pgval, NULL, + NULL, NULL); + if (pbval) pixcmapGetRangeValues(cmap, L_SELECT_BLUE, pbval, NULL, + NULL, NULL); + } else { /* type == L_SELECT_MAX */ + if (prval) pixcmapGetRangeValues(cmap, L_SELECT_RED, NULL, prval, + NULL, NULL); + if (pgval) pixcmapGetRangeValues(cmap, L_SELECT_GREEN, NULL, pgval, + NULL, NULL); + if (pbval) pixcmapGetRangeValues(cmap, L_SELECT_BLUE, NULL, pbval, + NULL, NULL); + } + return 0; + } + + pixGetDimensions(pixs, &w, &h, &d); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (d != 8 && d != 32) + return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); + if (d == 8 && !pgrayval) + return ERROR_INT("can't return result in grayval", procName, 1); + if (d == 32 && !prval && !pgval && !pbval) + return ERROR_INT("can't return result in r/g/b-val", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + if (d == 8) { + if (type == L_SELECT_MIN) + extval = 100000; + else /* get max */ + extval = -1; + + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + val = GET_DATA_BYTE(line, j); + if ((type == L_SELECT_MIN && val < extval) || + (type == L_SELECT_MAX && val > extval)) + extval = val; + } + } + *pgrayval = extval; + return 0; + } + + /* 32 bpp rgb */ + if (type == L_SELECT_MIN) { + extrval = 100000; + extgval = 100000; + extbval = 100000; + } else { + extrval = -1; + extgval = -1; + extbval = -1; + } + for (i = 0; i < h; i += factor) { + line = data + i * wpl; + for (j = 0; j < w; j += factor) { + pixel = line[j]; + if (prval) { + rval = (pixel >> L_RED_SHIFT) & 0xff; + if ((type == L_SELECT_MIN && rval < extrval) || + (type == L_SELECT_MAX && rval > extrval)) + extrval = rval; + } + if (pgval) { + gval = (pixel >> L_GREEN_SHIFT) & 0xff; + if ((type == L_SELECT_MIN && gval < extgval) || + (type == L_SELECT_MAX && gval > extgval)) + extgval = gval; + } + if (pbval) { + bval = (pixel >> L_BLUE_SHIFT) & 0xff; + if ((type == L_SELECT_MIN && bval < extbval) || + (type == L_SELECT_MAX && bval > extbval)) + extbval = bval; + } + } + } + if (prval) *prval = extrval; + if (pgval) *pgval = extgval; + if (pbval) *pbval = extbval; + return 0; +} + + +/*! + * \brief pixGetMaxValueInRect() + * + * \param[in] pixs 8, 16 or 32 bpp grayscale; no color space components + * \param[in] box [optional] region; set box = NULL to use entire pixs + * \param[out] pmaxval [optional] max value in region + * \param[out] pxmax [optional] x location of max value + * \param[out] pymax [optional] y location of max value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This can be used to find the maximum and its location
+ *          in a 2-dimensional histogram, where the x and y directions
+ *          represent two color components (e.g., saturation and hue).
+ *      (2) Note that here a 32 bpp pixs has pixel values that are simply
+ *          numbers.  They are not 8 bpp components in a colorspace.
+ * 
+ */ +l_ok +pixGetMaxValueInRect(PIX *pixs, + BOX *box, + l_uint32 *pmaxval, + l_int32 *pxmax, + l_int32 *pymax) +{ +l_int32 i, j, w, h, d, wpl, bw, bh; +l_int32 xstart, ystart, xend, yend, xmax, ymax; +l_uint32 val, maxval; +l_uint32 *data, *line; + + PROCNAME("pixGetMaxValueInRect"); + + if (pmaxval) *pmaxval = 0; + if (pxmax) *pxmax = 0; + if (pymax) *pymax = 0; + if (!pmaxval && !pxmax && !pymax) + return ERROR_INT("no data requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetColormap(pixs) != NULL) + return ERROR_INT("pixs has colormap", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16 && d != 32) + return ERROR_INT("pixs not 8, 16 or 32 bpp", procName, 1); + + xstart = ystart = 0; + xend = w - 1; + yend = h - 1; + if (box) { + boxGetGeometry(box, &xstart, &ystart, &bw, &bh); + xend = xstart + bw - 1; + yend = ystart + bh - 1; + } + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + maxval = 0; + xmax = ymax = 0; + for (i = ystart; i <= yend; i++) { + line = data + i * wpl; + for (j = xstart; j <= xend; j++) { + if (d == 8) + val = GET_DATA_BYTE(line, j); + else if (d == 16) + val = GET_DATA_TWO_BYTES(line, j); + else /* d == 32 */ + val = line[j]; + if (val > maxval) { + maxval = val; + xmax = j; + ymax = i; + } + } + } + if (maxval == 0) { /* no counts; pick the center of the rectangle */ + xmax = (xstart + xend) / 2; + ymax = (ystart + yend) / 2; + } + + if (pmaxval) *pmaxval = maxval; + if (pxmax) *pxmax = xmax; + if (pymax) *pymax = ymax; + return 0; +} + + +/*! + * \brief pixGetBinnedComponentRange() + * + * \param[in] pixs 32 bpp rgb + * \param[in] nbins number of equal population bins; must be > 1 + * \param[in] factor subsampling factor; >= 1 + * \param[in] color L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE + * \param[out] pminval [optional] minimum value of component + * \param[out] pmaxval [optional] maximum value of component + * \param[out] pcarray [optional] color array of bins + * \param[in] fontsize [optional] 0 for no debug; for debug, valid set + * is {4,6,8,10,12,14,16,18,20}. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns the min and max average values of the
+ *          selected color component in the set of rank bins,
+ *          where the ranking is done using the specified component.
+ * 
+ */ +l_ok +pixGetBinnedComponentRange(PIX *pixs, + l_int32 nbins, + l_int32 factor, + l_int32 color, + l_int32 *pminval, + l_int32 *pmaxval, + l_uint32 **pcarray, + l_int32 fontsize) +{ +l_int32 i, minval, maxval, rval, gval, bval; +l_uint32 *carray; +PIX *pixt; + + PROCNAME("pixGetBinnedComponentRange"); + + if (pminval) *pminval = 0; + if (pmaxval) *pmaxval = 0; + if (pcarray) *pcarray = NULL; + if (!pminval && !pmaxval) + return ERROR_INT("no result requested", procName, 1); + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (color != L_SELECT_RED && color != L_SELECT_GREEN && + color != L_SELECT_BLUE) + return ERROR_INT("invalid color", procName, 1); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return ERROR_INT("invalid fontsize", procName, 1); + + pixGetRankColorArray(pixs, nbins, color, factor, &carray, 0, 0); + if (fontsize > 0) { + for (i = 0; i < nbins; i++) + L_INFO("c[%d] = %x\n", procName, i, carray[i]); + pixt = pixDisplayColorArray(carray, nbins, 200, 5, fontsize); + pixDisplay(pixt, 100, 100); + pixDestroy(&pixt); + } + + extractRGBValues(carray[0], &rval, &gval, &bval); + minval = rval; + if (color == L_SELECT_GREEN) + minval = gval; + else if (color == L_SELECT_BLUE) + minval = bval; + extractRGBValues(carray[nbins - 1], &rval, &gval, &bval); + maxval = rval; + if (color == L_SELECT_GREEN) + maxval = gval; + else if (color == L_SELECT_BLUE) + maxval = bval; + + if (pminval) *pminval = minval; + if (pmaxval) *pmaxval = maxval; + if (pcarray) + *pcarray = carray; + else + LEPT_FREE(carray); + return 0; +} + + +/*! + * \brief pixGetRankColorArray() + * + * \param[in] pixs 32 bpp or cmapped + * \param[in] nbins number of equal population bins; must be > 1 + * \param[in] type color selection flag + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] pcarray array of colors, ranked by intensity + * \param[in] debugflag 1 to display color squares and plots of color + * components; 2 to write them as png to file + * \param[in] fontsize [optional] 0 for no debug; for debug, valid set + * is {4,6,8,10,12,14,16,18,20}. Ignored if + * debugflag == 0. fontsize == 6 is typical. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN,
+ *          L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX, L_SELECT_AVERAGE,
+ *          L_SELECT_HUE, L_SELECT_SATURATION.
+ *      (2) Then it finds the histogram of the selected color type in each
+ *          RGB pixel.  For each of the %nbins sets of pixels,
+ *          ordered by this color type value, find the average RGB color,
+ *          and return this as a "rank color" array.  The output array
+ *          has %nbins colors.
+ *      (3) Set the subsampling factor > 1 to reduce the amount of
+ *          computation.  Typically you want at least 10,000 pixels
+ *          for reasonable statistics.
+ *      (4) The rank color as a function of rank can then be found from
+ *             rankint = (l_int32)(rank * (nbins - 1) + 0.5);
+ *             extractRGBValues(array[rankint], &rval, &gval, &bval);
+ *          where the rank is in [0.0 ... 1.0].
+ *          This function is meant to be simple and approximate.
+ *      (5) Compare this with pixGetBinnedColor(), which generates equal
+ *          width intensity bins and finds the average color in each bin.
+ * 
+ */ +l_ok +pixGetRankColorArray(PIX *pixs, + l_int32 nbins, + l_int32 type, + l_int32 factor, + l_uint32 **pcarray, + l_int32 debugflag, + l_int32 fontsize) +{ +l_int32 ret; +l_uint32 *array; +NUMA *na, *nan, *narbin; +PIX *pixt, *pixc, *pixg, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixGetRankColorArray"); + + if (!pcarray) + return ERROR_INT("&carray not defined", procName, 1); + *pcarray = NULL; + if (factor < 1) + return ERROR_INT("sampling factor must be >= 1", procName, 1); + if (nbins < 2) + return ERROR_INT("nbins must be at least 2", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + cmap = pixGetColormap(pixs); + if (pixGetDepth(pixs) != 32 && !cmap) + return ERROR_INT("pixs neither 32 bpp nor cmapped", procName, 1); + if (type != L_SELECT_RED && type != L_SELECT_GREEN && + type != L_SELECT_BLUE && type != L_SELECT_MIN && + type != L_SELECT_MAX && type != L_SELECT_AVERAGE && + type != L_SELECT_HUE && type != L_SELECT_SATURATION) + return ERROR_INT("invalid type", procName, 1); + if (debugflag > 0) { + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return ERROR_INT("invalid fontsize", procName, 1); + } + + /* Downscale by factor and remove colormap if it exists */ + pixt = pixScaleByIntSampling(pixs, factor); + if (cmap) + pixc = pixRemoveColormap(pixt, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc = pixClone(pixt); + pixDestroy(&pixt); + + /* Get normalized histogram of the selected component */ + if (type == L_SELECT_RED) + pixg = pixGetRGBComponent(pixc, COLOR_RED); + else if (type == L_SELECT_GREEN) + pixg = pixGetRGBComponent(pixc, COLOR_GREEN); + else if (type == L_SELECT_BLUE) + pixg = pixGetRGBComponent(pixc, COLOR_BLUE); + else if (type == L_SELECT_MIN) + pixg = pixConvertRGBToGrayMinMax(pixc, L_CHOOSE_MIN); + else if (type == L_SELECT_MAX) + pixg = pixConvertRGBToGrayMinMax(pixc, L_CHOOSE_MAX); + else if (type == L_SELECT_AVERAGE) + pixg = pixConvertRGBToGray(pixc, 0.34, 0.33, 0.33); + else if (type == L_SELECT_HUE) + pixg = pixConvertRGBToHue(pixc); + else /* L_SELECT_SATURATION */ + pixg = pixConvertRGBToSaturation(pixc); + if ((na = pixGetGrayHistogram(pixg, 1)) == NULL) { + pixDestroy(&pixc); + pixDestroy(&pixg); + return ERROR_INT("na not made", procName, 1); + } + nan = numaNormalizeHistogram(na, 1.0); + + /* Get the following arrays: + * (1) nar: cumulative normalized histogram (rank vs intensity value). + * With 256 intensity values, we have 257 rank values. + * (2) nai: "average" intensity as function of rank bin, for + * %nbins equally spaced in rank between 0.0 and 1.0. + * (3) narbin: bin number of discretized rank as a function of + * intensity. This is the 'inverse' of nai. + * (4) nabb: intensity value of the right bin boundary, for each + * of the %nbins discretized rank bins. */ + if (!debugflag) { + numaDiscretizeRankAndIntensity(nan, nbins, &narbin, NULL, NULL, NULL); + } else { + NUMA *nai, *nar, *nabb; + numaDiscretizeRankAndIntensity(nan, nbins, &narbin, &nai, &nar, &nabb); + lept_mkdir("lept/regout"); + gplotSimple1(nan, GPLOT_PNG, "/tmp/lept/regout/rtnan", + "Normalized Histogram"); + gplotSimple1(nar, GPLOT_PNG, "/tmp/lept/regout/rtnar", + "Cumulative Histogram"); + gplotSimple1(nai, GPLOT_PNG, "/tmp/lept/regout/rtnai", + "Intensity vs. rank bin"); + gplotSimple1(narbin, GPLOT_PNG, "/tmp/lept/regout/rtnarbin", + "LUT: rank bin vs. Intensity"); + gplotSimple1(nabb, GPLOT_PNG, "/tmp/lept/regout/rtnabb", + "Intensity of right edge vs. rank bin"); + numaDestroy(&nai); + numaDestroy(&nar); + numaDestroy(&nabb); + } + + /* Get the average color in each bin for pixels whose grayscale + * values fall in the bin range. %narbin is the LUT that + * determines the bin number from the grayscale version of + * the image. Because this mapping may not be unique, + * some bins may not be represented in the LUT. In use, to get fair + * allocation into all the bins, bin population is monitored + * as pixels are accumulated, and when bins fill up, + * pixels are required to overflow into succeeding bins. */ + pixGetBinnedColor(pixc, pixg, 1, nbins, narbin, pcarray, debugflag); + ret = 0; + if ((array = *pcarray) == NULL) { + L_ERROR("color array not returned\n", procName); + ret = 1; + debugflag = 0; /* make sure to skip the following */ + } + if (debugflag) { + pixd = pixDisplayColorArray(array, nbins, 200, 5, fontsize); + if (debugflag == 1) + pixDisplayWithTitle(pixd, 0, 500, "binned colors", 1); + else /* debugflag == 2 */ + pixWriteDebug("/tmp/lept/regout/rankhisto.png", pixd, IFF_PNG); + pixDestroy(&pixd); + } + + pixDestroy(&pixc); + pixDestroy(&pixg); + numaDestroy(&na); + numaDestroy(&nan); + numaDestroy(&narbin); + return ret; +} + + +/*! + * \brief pixGetBinnedColor() + * + * \param[in] pixs 32 bpp + * \param[in] pixg 8 bpp grayscale version of pixs + * \param[in] factor sampling factor along pixel counting direction + * \param[in] nbins number of intensity bins + * \param[in] nalut LUT for mapping from intensity to bin number + * \param[out] pcarray array of average color values in each bin + * \param[in] debugflag 1 to display output debug plots of color + * components; 2 to write them as png to file + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This takes a color image, a grayscale (intensity) version,
+ *          a LUT from intensity to bin number, and the number of bins.
+ *          It computes the average color for pixels whose intensity
+ *          is in each bin.  This is returned as an array of l_uint32
+ *          colors in our standard RGBA ordering.
+ *      (2) This function generates equal width intensity bins and
+ *          finds the average color in each bin.  Compare this with
+ *          pixGetRankColorArray(), which rank orders the pixels
+ *          by the value of the selected component in each pixel,
+ *          sets up bins with equal population (not intensity width!),
+ *          and gets the average color in each bin.
+ * 
+ */ +l_ok +pixGetBinnedColor(PIX *pixs, + PIX *pixg, + l_int32 factor, + l_int32 nbins, + NUMA *nalut, + l_uint32 **pcarray, + l_int32 debugflag) +{ +l_int32 i, j, w, h, wpls, wplg, grayval, bin, rval, gval, bval, success; +l_int32 npts, avepts, maxpts; +l_uint32 *datas, *datag, *lines, *lineg, *carray; +l_float64 norm; +l_float64 *rarray, *garray, *barray, *narray; + + PROCNAME("pixGetBinnedColor"); + + if (!pcarray) + return ERROR_INT("&carray not defined", procName, 1); + *pcarray = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixg) + return ERROR_INT("pixg not defined", procName, 1); + if (!nalut) + return ERROR_INT("nalut not defined", procName, 1); + if (factor < 1) { + L_WARNING("sampling factor less than 1; setting to 1\n", procName); + factor = 1; + } + + /* Find the color for each rank bin. Note that we can have + * multiple bins filled with pixels having the same gray value. + * Therefore, because in general the mapping from gray value + * to bin number is not unique, if a bin fills up (actually, + * we allow it to slightly overfill), we roll the excess + * over to the next bin, etc. */ + pixGetDimensions(pixs, &w, &h, NULL); + npts = (w + factor - 1) * (h + factor - 1) / (factor * factor); + avepts = (npts + nbins - 1) / nbins; /* average number of pts in a bin */ + maxpts = (l_int32)((1.0 + 0.5 / (l_float32)nbins) * avepts); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + rarray = (l_float64 *)LEPT_CALLOC(nbins, sizeof(l_float64)); + garray = (l_float64 *)LEPT_CALLOC(nbins, sizeof(l_float64)); + barray = (l_float64 *)LEPT_CALLOC(nbins, sizeof(l_float64)); + narray = (l_float64 *)LEPT_CALLOC(nbins, sizeof(l_float64)); + for (i = 0; i < h; i += factor) { + lines = datas + i * wpls; + lineg = datag + i * wplg; + for (j = 0; j < w; j += factor) { + grayval = GET_DATA_BYTE(lineg, j); + numaGetIValue(nalut, grayval, &bin); + extractRGBValues(lines[j], &rval, &gval, &bval); + while (narray[bin] >= maxpts && bin < nbins - 1) + bin++; + rarray[bin] += rval; + garray[bin] += gval; + barray[bin] += bval; + narray[bin] += 1.0; /* count samples in each bin */ + } + } + + for (i = 0; i < nbins; i++) { + norm = 1. / narray[i]; + rarray[i] *= norm; + garray[i] *= norm; + barray[i] *= norm; +/* fprintf(stderr, "narray[%d] = %f\n", i, narray[i]); */ + } + + if (debugflag) { + NUMA *nared, *nagreen, *nablue; + nared = numaCreate(nbins); + nagreen = numaCreate(nbins); + nablue = numaCreate(nbins); + for (i = 0; i < nbins; i++) { + numaAddNumber(nared, rarray[i]); + numaAddNumber(nagreen, garray[i]); + numaAddNumber(nablue, barray[i]); + } + lept_mkdir("lept/regout"); + gplotSimple1(nared, GPLOT_PNG, "/tmp/lept/regout/rtnared", + "Average red val vs. rank bin"); + gplotSimple1(nagreen, GPLOT_PNG, "/tmp/lept/regout/rtnagreen", + "Average green val vs. rank bin"); + gplotSimple1(nablue, GPLOT_PNG, "/tmp/lept/regout/rtnablue", + "Average blue val vs. rank bin"); + numaDestroy(&nared); + numaDestroy(&nagreen); + numaDestroy(&nablue); + } + + /* Save colors for all bins in a single array */ + success = TRUE; + if ((carray = (l_uint32 *)LEPT_CALLOC(nbins, sizeof(l_uint32))) == NULL) { + success = FALSE; + L_ERROR("carray not made\n", procName); + goto cleanup_arrays; + } + *pcarray = carray; + for (i = 0; i < nbins; i++) { + rval = (l_int32)(rarray[i] + 0.5); + gval = (l_int32)(garray[i] + 0.5); + bval = (l_int32)(barray[i] + 0.5); + composeRGBPixel(rval, gval, bval, carray + i); + } + +cleanup_arrays: + LEPT_FREE(rarray); + LEPT_FREE(garray); + LEPT_FREE(barray); + LEPT_FREE(narray); + return (success) ? 0 : 1; +} + + +/*! + * \brief pixDisplayColorArray() + * + * \param[in] carray array of colors: 0xrrggbb00 + * \param[in] ncolors size of array + * \param[in] side size of each color square; suggest 200 + * \param[in] ncols number of columns in output color matrix + * \param[in] fontsize to label each square with text. Valid set is + * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \return pixd color array, or NULL on error + */ +PIX * +pixDisplayColorArray(l_uint32 *carray, + l_int32 ncolors, + l_int32 side, + l_int32 ncols, + l_int32 fontsize) +{ +char textstr[256]; +l_int32 i, rval, gval, bval; +L_BMF *bmf; +PIX *pixt, *pixd; +PIXA *pixa; + + PROCNAME("pixDisplayColorArray"); + + if (!carray) + return (PIX *)ERROR_PTR("carray not defined", procName, NULL); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return (PIX *)ERROR_PTR("invalid fontsize", procName, NULL); + + bmf = (fontsize == 0) ? NULL : bmfCreate(NULL, fontsize); + pixa = pixaCreate(ncolors); + for (i = 0; i < ncolors; i++) { + pixt = pixCreate(side, side, 32); + pixSetAllArbitrary(pixt, carray[i]); + if (bmf) { + extractRGBValues(carray[i], &rval, &gval, &bval); + snprintf(textstr, sizeof(textstr), + "%d: (%d %d %d)", i, rval, gval, bval); + pixSaveTiledWithText(pixt, pixa, side, (i % ncols == 0) ? 1 : 0, + 20, 2, bmf, textstr, 0xff000000, L_ADD_BELOW); + } else { + pixSaveTiled(pixt, pixa, 1.0, (i % ncols == 0) ? 1 : 0, 20, 32); + } + pixDestroy(&pixt); + } + pixd = pixaDisplay(pixa, 0, 0); + + pixaDestroy(&pixa); + bmfDestroy(&bmf); + return pixd; +} + + +/*! + * \brief pixRankBinByStrip() + * + * \param[in] pixs 32 bpp or cmapped + * \param[in] direction L_SCAN_HORIZONTAL or L_SCAN_VERTICAL + * \param[in] size of strips in scan direction + * \param[in] nbins number of equal population bins; must be > 1 + * \param[in] type color selection flag + * \return pixd result, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a pix where each column represents a strip of
+ *          the input image.  If %direction == L_SCAN_HORIZONTAL, the
+ *          input impage is tiled into vertical strips of width %size,
+ *          where %size is a compromise between getting better spatial
+ *          columnwise resolution (small %size) and getting better
+ *          columnwise statistical information (larger %size).  Likewise
+ *          with rows of the image if %direction == L_SCAN_VERTICAL.
+ *      (2) For L_HORIZONTAL_SCAN, the output pix contains rank binned
+ *          median colors in each column that correspond to a vertical
+ *          strip of width %size in the input image.
+ *      (3) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN,
+ *          L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX, L_SELECT_AVERAGE.
+ *          It determines how the rank ordering is done.
+ *      (4) Typical input values might be %size = 5, %nbins = 10.
+ * 
+ */ +PIX * +pixRankBinByStrip(PIX *pixs, + l_int32 direction, + l_int32 size, + l_int32 nbins, + l_int32 type) +{ +l_int32 i, j, w, h, nstrips; +l_uint32 *array; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixa; +PIXCMAP *cmap; + + PROCNAME("pixRankBinByStrip"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + cmap = pixGetColormap(pixs); + if (pixGetDepth(pixs) != 32 && !cmap) + return (PIX *)ERROR_PTR("pixs neither 32 bpp nor cmapped", + procName, NULL); + if (direction != L_SCAN_HORIZONTAL && direction != L_SCAN_VERTICAL) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (size < 1) + return (PIX *)ERROR_PTR("size < 1", procName, NULL); + if (nbins < 2) + return (PIX *)ERROR_PTR("nbins must be at least 2", procName, NULL); + if (type != L_SELECT_RED && type != L_SELECT_GREEN && + type != L_SELECT_BLUE && type != L_SELECT_MIN && + type != L_SELECT_MAX && type != L_SELECT_AVERAGE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + /* Downscale by factor and remove colormap if it exists */ + if (cmap) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + else + pix1 = pixClone(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + + pixd = NULL; + boxa = makeMosaicStrips(w, h, direction, size); + pixa = pixClipRectangles(pix1, boxa); + nstrips = pixaGetCount(pixa); + if (direction == L_SCAN_HORIZONTAL) { + pixd = pixCreate(nstrips, nbins, 32); + for (i = 0; i < nstrips; i++) { + pix2 = pixaGetPix(pixa, i, L_CLONE); + pixGetRankColorArray(pix2, nbins, type, 1, &array, 0, 0); + for (j = 0; j < nbins; j++) + pixSetPixel(pixd, i, j, array[j]); + LEPT_FREE(array); + pixDestroy(&pix2); + } + } else { /* L_SCAN_VERTICAL */ + pixd = pixCreate(nbins, nstrips, 32); + for (i = 0; i < nstrips; i++) { + pix2 = pixaGetPix(pixa, i, L_CLONE); + pixGetRankColorArray(pix2, nbins, type, 1, &array, 0, 0); + for (j = 0; j < nbins; j++) + pixSetPixel(pixd, j, i, array[j]); + LEPT_FREE(array); + pixDestroy(&pix2); + } + } + pixDestroy(&pix1); + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return pixd; +} + + + +/*-------------------------------------------------------------* + * Pixelwise aligned statistics * + *-------------------------------------------------------------*/ +/*! + * \brief pixaGetAlignedStats() + * + * \param[in] pixa of identically sized, 8 bpp pix; not cmapped + * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT + * \param[in] nbins of histogram for median and mode; ignored for mean + * \param[in] thresh on histogram for mode val; ignored for all other types + * \return pix with pixelwise aligned stats, or NULL on error. + * + *
+ * Notes:
+ *      (1) Each pixel in the returned pix represents an average
+ *          (or median, or mode) over the corresponding pixels in each
+ *          pix in the pixa.
+ *      (2) The %thresh parameter works with L_MODE_VAL only, and
+ *          sets a minimum occupancy of the mode bin.
+ *          If the occupancy of the mode bin is less than %thresh, the
+ *          mode value is returned as 0.  To always return the actual
+ *          mode value, set %thresh = 0.  See pixGetRowStats().
+ * 
+ */ +PIX * +pixaGetAlignedStats(PIXA *pixa, + l_int32 type, + l_int32 nbins, + l_int32 thresh) +{ +l_int32 j, n, w, h, d; +l_float32 *colvect; +PIX *pixt, *pixd; + + PROCNAME("pixaGetAlignedStats"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && + type != L_MODE_VAL && type != L_MODE_COUNT) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + n = pixaGetCount(pixa); + if (n == 0) + return (PIX *)ERROR_PTR("no pix in pixa", procName, NULL); + pixaGetPixDimensions(pixa, 0, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pix not 8 bpp", procName, NULL); + + pixd = pixCreate(w, h, 8); + pixt = pixCreate(n, h, 8); + colvect = (l_float32 *)LEPT_CALLOC(h, sizeof(l_float32)); + for (j = 0; j < w; j++) { + pixaExtractColumnFromEachPix(pixa, j, pixt); + pixGetRowStats(pixt, type, nbins, thresh, colvect); + pixSetPixelColumn(pixd, j, colvect); + } + + LEPT_FREE(colvect); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixaExtractColumnFromEachPix() + * + * \param[in] pixa of identically sized, 8 bpp; not cmapped + * \param[in] col column index + * \param[in] pixd pix into which each column is inserted + * \return 0 if OK, 1 on error + */ +l_ok +pixaExtractColumnFromEachPix(PIXA *pixa, + l_int32 col, + PIX *pixd) +{ +l_int32 i, k, n, w, h, ht, val, wplt, wpld; +l_uint32 *datad, *datat; +PIX *pixt; + + PROCNAME("pixaExtractColumnFromEachPix"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!pixd || pixGetDepth(pixd) != 8) + return ERROR_INT("pixd not defined or not 8 bpp", procName, 1); + n = pixaGetCount(pixa); + pixGetDimensions(pixd, &w, &h, NULL); + if (n != w) + return ERROR_INT("pix width != n", procName, 1); + pixt = pixaGetPix(pixa, 0, L_CLONE); + wplt = pixGetWpl(pixt); + pixGetDimensions(pixt, NULL, &ht, NULL); + pixDestroy(&pixt); + if (h != ht) + return ERROR_INT("pixd height != column height", procName, 1); + + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (k = 0; k < n; k++) { + pixt = pixaGetPix(pixa, k, L_CLONE); + datat = pixGetData(pixt); + for (i = 0; i < h; i++) { + val = GET_DATA_BYTE(datat, col); + SET_DATA_BYTE(datad + i * wpld, k, val); + datat += wplt; + } + pixDestroy(&pixt); + } + + return 0; +} + + +/*! + * \brief pixGetRowStats() + * + * \param[in] pixs 8 bpp; not cmapped + * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT + * \param[in] nbins of histogram for median and mode; ignored for mean + * \param[in] thresh on histogram for mode; ignored for mean and median + * \param[in] colvect vector of results gathered across the rows of pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes a column vector of statistics using each
+ *          row of a Pix.  The result is put in %colvect.
+ *      (2) The %thresh parameter works with L_MODE_VAL only, and
+ *          sets a minimum occupancy of the mode bin.
+ *          If the occupancy of the mode bin is less than %thresh, the
+ *          mode value is returned as 0.  To always return the actual
+ *          mode value, set %thresh = 0.
+ *      (3) What is the meaning of this %thresh parameter?
+ *          For each row, the total count in the histogram is w, the
+ *          image width.  So %thresh, relative to w, gives a measure
+ *          of the ratio of the bin width to the width of the distribution.
+ *          The larger %thresh, the narrower the distribution must be
+ *          for the mode value to be returned (instead of returning 0).
+ *      (4) If the Pix consists of a set of corresponding columns,
+ *          one for each Pix in a Pixa, the width of the Pix is the
+ *          number of Pix in the Pixa and the column vector can
+ *          be stored as a column in a Pix of the same size as
+ *          each Pix in the Pixa.
+ * 
+ */ +l_ok +pixGetRowStats(PIX *pixs, + l_int32 type, + l_int32 nbins, + l_int32 thresh, + l_float32 *colvect) +{ +l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; +l_int32 *histo, *gray2bin, *bin2gray; +l_uint32 *lines, *datas; + + PROCNAME("pixGetRowStats"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!colvect) + return ERROR_INT("colvect not defined", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && + type != L_MODE_VAL && type != L_MODE_COUNT) + return ERROR_INT("invalid type", procName, 1); + if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) + return ERROR_INT("invalid nbins", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (type == L_MEAN_ABSVAL) { + for (i = 0; i < h; i++) { + sum = 0; + lines = datas + i * wpls; + for (j = 0; j < w; j++) + sum += GET_DATA_BYTE(lines, j); + colvect[i] = (l_float32)sum / (l_float32)w; + } + return 0; + } + + /* We need a histogram; binwidth ~ 256 / nbins */ + histo = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); + gray2bin = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + bin2gray = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); + for (i = 0; i < 256; i++) /* gray value --> histo bin */ + gray2bin[i] = (i * nbins) / 256; + for (i = 0; i < nbins; i++) /* histo bin --> gray value */ + bin2gray[i] = (i * 256 + 128) / nbins; + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (k = 0; k < nbins; k++) + histo[k] = 0; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + histo[gray2bin[val]]++; + } + + if (type == L_MEDIAN_VAL) { + sum = 0; + target = (w + 1) / 2; + for (k = 0; k < nbins; k++) { + sum += histo[k]; + if (sum >= target) { + colvect[i] = bin2gray[k]; + break; + } + } + } else if (type == L_MODE_VAL) { + max = 0; + modeval = 0; + for (k = 0; k < nbins; k++) { + if (histo[k] > max) { + max = histo[k]; + modeval = k; + } + } + if (max < thresh) + colvect[i] = 0; + else + colvect[i] = bin2gray[modeval]; + } else { /* type == L_MODE_COUNT */ + max = 0; + for (k = 0; k < nbins; k++) { + if (histo[k] > max) + max = histo[k]; + } + colvect[i] = max; + } + } + + LEPT_FREE(histo); + LEPT_FREE(gray2bin); + LEPT_FREE(bin2gray); + return 0; +} + + +/*! + * \brief pixGetColumnStats() + * + * \param[in] pixs 8 bpp; not cmapped + * \param[in] type L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT + * \param[in] nbins of histogram for median and mode; ignored for mean + * \param[in] thresh on histogram for mode val; ignored for all other types + * \param[in] rowvect vector of results gathered down the columns of pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes a row vector of statistics using each
+ *          column of a Pix.  The result is put in %rowvect.
+ *      (2) The %thresh parameter works with L_MODE_VAL only, and
+ *          sets a minimum occupancy of the mode bin.
+ *          If the occupancy of the mode bin is less than %thresh, the
+ *          mode value is returned as 0.  To always return the actual
+ *          mode value, set %thresh = 0.
+ *      (3) What is the meaning of this %thresh parameter?
+ *          For each column, the total count in the histogram is h, the
+ *          image height.  So %thresh, relative to h, gives a measure
+ *          of the ratio of the bin width to the width of the distribution.
+ *          The larger %thresh, the narrower the distribution must be
+ *          for the mode value to be returned (instead of returning 0).
+ * 
+ */ +l_ok +pixGetColumnStats(PIX *pixs, + l_int32 type, + l_int32 nbins, + l_int32 thresh, + l_float32 *rowvect) +{ +l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; +l_int32 *histo, *gray2bin, *bin2gray; +l_uint32 *datas; + + PROCNAME("pixGetColumnStats"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!rowvect) + return ERROR_INT("rowvect not defined", procName, 1); + if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && + type != L_MODE_VAL && type != L_MODE_COUNT) + return ERROR_INT("invalid type", procName, 1); + if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) + return ERROR_INT("invalid nbins", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (type == L_MEAN_ABSVAL) { + for (j = 0; j < w; j++) { + sum = 0; + for (i = 0; i < h; i++) + sum += GET_DATA_BYTE(datas + i * wpls, j); + rowvect[j] = (l_float32)sum / (l_float32)h; + } + return 0; + } + + /* We need a histogram; binwidth ~ 256 / nbins */ + histo = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); + gray2bin = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + bin2gray = (l_int32 *)LEPT_CALLOC(nbins, sizeof(l_int32)); + for (i = 0; i < 256; i++) /* gray value --> histo bin */ + gray2bin[i] = (i * nbins) / 256; + for (i = 0; i < nbins; i++) /* histo bin --> gray value */ + bin2gray[i] = (i * 256 + 128) / nbins; + + for (j = 0; j < w; j++) { + for (i = 0; i < h; i++) { + val = GET_DATA_BYTE(datas + i * wpls, j); + histo[gray2bin[val]]++; + } + + if (type == L_MEDIAN_VAL) { + sum = 0; + target = (h + 1) / 2; + for (k = 0; k < nbins; k++) { + sum += histo[k]; + if (sum >= target) { + rowvect[j] = bin2gray[k]; + break; + } + } + } else if (type == L_MODE_VAL) { + max = 0; + modeval = 0; + for (k = 0; k < nbins; k++) { + if (histo[k] > max) { + max = histo[k]; + modeval = k; + } + } + if (max < thresh) + rowvect[j] = 0; + else + rowvect[j] = bin2gray[modeval]; + } else { /* type == L_MODE_COUNT */ + max = 0; + for (k = 0; k < nbins; k++) { + if (histo[k] > max) + max = histo[k]; + } + rowvect[j] = max; + } + for (k = 0; k < nbins; k++) + histo[k] = 0; + } + + LEPT_FREE(histo); + LEPT_FREE(gray2bin); + LEPT_FREE(bin2gray); + return 0; +} + + +/*! + * \brief pixSetPixelColumn() + * + * \param[in] pix 8 bpp; not cmapped + * \param[in] col column index + * \param[in] colvect vector of floats + * \return 0 if OK, 1 on error + */ +l_ok +pixSetPixelColumn(PIX *pix, + l_int32 col, + l_float32 *colvect) +{ +l_int32 i, w, h, wpl; +l_uint32 *data; + + PROCNAME("pixSetCPixelColumn"); + + if (!pix || pixGetDepth(pix) != 8) + return ERROR_INT("pix not defined or not 8 bpp", procName, 1); + if (!colvect) + return ERROR_INT("colvect not defined", procName, 1); + pixGetDimensions(pix, &w, &h, NULL); + if (col < 0 || col > w) + return ERROR_INT("invalid col", procName, 1); + + data = pixGetData(pix); + wpl = pixGetWpl(pix); + for (i = 0; i < h; i++) + SET_DATA_BYTE(data + i * wpl, col, (l_int32)colvect[i]); + + return 0; +} + + +/*-------------------------------------------------------------* + * Foreground/background estimation * + *-------------------------------------------------------------*/ +/*! + * \brief pixThresholdForFgBg() + * + * \param[in] pixs any depth; cmapped ok + * \param[in] factor subsampling factor; integer >= 1 + * \param[in] thresh threshold for generating foreground mask + * \param[out] pfgval [optional] average foreground value + * \param[out] pbgval [optional] average background value + * \return 0 if OK, 1 on error + */ +l_ok +pixThresholdForFgBg(PIX *pixs, + l_int32 factor, + l_int32 thresh, + l_int32 *pfgval, + l_int32 *pbgval) +{ +l_float32 fval; +PIX *pixg, *pixm; + + PROCNAME("pixThresholdForFgBg"); + + if (pfgval) *pfgval = 0; + if (pbgval) *pbgval = 0; + if (!pfgval && !pbgval) + return ERROR_INT("no data requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Generate a subsampled 8 bpp version and a mask over the fg */ + pixg = pixConvertTo8BySampling(pixs, factor, 0); + pixm = pixThresholdToBinary(pixg, thresh); + + if (pfgval) { + pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); + *pfgval = (l_int32)(fval + 0.5); + } + + if (pbgval) { + pixInvert(pixm, pixm); + pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); + *pbgval = (l_int32)(fval + 0.5); + } + + pixDestroy(&pixg); + pixDestroy(&pixm); + return 0; +} + + +/*! + * \brief pixSplitDistributionFgBg() + * + * \param[in] pixs any depth; cmapped ok + * \param[in] scorefract fraction of the max score, used to determine + * the range over which the histogram min is searched + * \param[in] factor subsampling factor; integer >= 1 + * \param[out] pthresh [optional] best threshold for separating + * \param[out] pfgval [optional] average foreground value + * \param[out] pbgval [optional] average background value + * \param[out] ppixdb [optional] plot of distribution and split point + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See numaSplitDistribution() for details on the underlying
+ *          method of choosing a threshold.
+ * 
+ */ +l_ok +pixSplitDistributionFgBg(PIX *pixs, + l_float32 scorefract, + l_int32 factor, + l_int32 *pthresh, + l_int32 *pfgval, + l_int32 *pbgval, + PIX **ppixdb) +{ +char buf[256]; +l_int32 thresh; +l_float32 avefg, avebg, maxnum; +GPLOT *gplot; +NUMA *na, *nascore, *nax, *nay; +PIX *pixg; + + PROCNAME("pixSplitDistributionFgBg"); + + if (pthresh) *pthresh = 0; + if (pfgval) *pfgval = 0; + if (pbgval) *pbgval = 0; + if (ppixdb) *ppixdb = NULL; + if (!pthresh && !pfgval && !pbgval) + return ERROR_INT("no data requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Generate a subsampled 8 bpp version */ + pixg = pixConvertTo8BySampling(pixs, factor, 0); + + /* Make the fg/bg estimates */ + na = pixGetGrayHistogram(pixg, 1); + if (ppixdb) { + numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, + NULL, NULL, &nascore); + numaDestroy(&nascore); + } else { + numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, + NULL, NULL, NULL); + } + + if (pthresh) *pthresh = thresh; + if (pfgval) *pfgval = (l_int32)(avefg + 0.5); + if (pbgval) *pbgval = (l_int32)(avebg + 0.5); + + if (ppixdb) { + lept_mkdir("lept/redout"); + gplot = gplotCreate("/tmp/lept/redout/histplot", GPLOT_PNG, "Histogram", + "Grayscale value", "Number of pixels"); + gplotAddPlot(gplot, NULL, na, GPLOT_LINES, NULL); + nax = numaMakeConstant(thresh, 2); + numaGetMax(na, &maxnum, NULL); + nay = numaMakeConstant(0, 2); + numaReplaceNumber(nay, 1, (l_int32)(0.5 * maxnum)); + snprintf(buf, sizeof(buf), "score fract = %3.1f", scorefract); + gplotAddPlot(gplot, nax, nay, GPLOT_LINES, buf); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + numaDestroy(&nax); + numaDestroy(&nay); + *ppixdb = pixRead("/tmp/lept/redout/histplot.png"); + } + + pixDestroy(&pixg); + numaDestroy(&na); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/pix5.c b/3rdparty/hgOCR/leptonica/pix5.c new file mode 100644 index 00000000..11aabb03 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pix5.c @@ -0,0 +1,3153 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pix5.c + *
+ *
+ *    This file has these operations:
+ *
+ *      (1) Measurement of 1 bpp image properties
+ *      (2) Extract rectangular regions
+ *      (3) Clip to foreground
+ *      (4) Extract pixel averages, reversals and variance along lines
+ *      (5) Rank row and column transforms
+ *
+ *    Measurement of properties
+ *           l_int32     pixaFindDimensions()
+ *           l_int32     pixFindAreaPerimRatio()
+ *           NUMA       *pixaFindPerimToAreaRatio()
+ *           l_int32     pixFindPerimToAreaRatio()
+ *           NUMA       *pixaFindPerimSizeRatio()
+ *           l_int32     pixFindPerimSizeRatio()
+ *           NUMA       *pixaFindAreaFraction()
+ *           l_int32     pixFindAreaFraction()
+ *           NUMA       *pixaFindAreaFractionMasked()
+ *           l_int32     pixFindAreaFractionMasked()
+ *           NUMA       *pixaFindWidthHeightRatio()
+ *           NUMA       *pixaFindWidthHeightProduct()
+ *           l_int32     pixFindOverlapFraction()
+ *           BOXA       *pixFindRectangleComps()
+ *           l_int32     pixConformsToRectangle()
+ *
+ *    Extract rectangular region
+ *           PIXA       *pixClipRectangles()
+ *           PIX        *pixClipRectangle()
+ *           PIX        *pixClipMasked()
+ *           l_int32     pixCropToMatch()
+ *           PIX        *pixCropToSize()
+ *           PIX        *pixResizeToMatch()
+ *
+ *    Select a connected component by size
+ *           PIX        *pixSelectComponentBySize()
+ *           PIX        *pixFilterComponentBySize()
+ *
+ *    Make special masks
+ *           PIX        *pixMakeSymmetricMask()
+ *           PIX        *pixMakeFrameMask()
+ *
+ *    Generate a covering of rectangles over connected components
+ *           PIX        * pixMakeCoveringOfRectangles()
+ *
+ *    Fraction of Fg pixels under a mask
+ *           l_int32     pixFractionFgInMask()
+ *
+ *    Clip to foreground
+ *           PIX        *pixClipToForeground()
+ *           l_int32     pixTestClipToForeground()
+ *           l_int32     pixClipBoxToForeground()
+ *           l_int32     pixScanForForeground()
+ *           l_int32     pixClipBoxToEdges()
+ *           l_int32     pixScanForEdge()
+ *
+ *    Extract pixel averages and reversals along lines
+ *           NUMA       *pixExtractOnLine()
+ *           l_float32   pixAverageOnLine()
+ *           NUMA       *pixAverageIntensityProfile()
+ *           NUMA       *pixReversalProfile()
+ *
+ *    Extract windowed variance along a line
+ *           NUMA       *pixWindowedVarianceOnLine()
+ *
+ *    Extract min/max of pixel values near lines
+ *           l_int32     pixMinMaxNearLine()
+ *
+ *    Rank row and column transforms
+ *           PIX        *pixRankRowTransform()
+ *           PIX        *pixRankColumnTransform()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +static const l_uint32 rmask32[] = {0x0, + 0x00000001, 0x00000003, 0x00000007, 0x0000000f, + 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, + 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, + 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, + 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, + 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, + 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, + 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; + +#ifndef NO_CONSOLE_IO +#define DEBUG_EDGES 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * Measurement of properties * + *-------------------------------------------------------------*/ +/*! + * \brief pixaFindDimensions() + * + * \param[in] pixa + * \param[out] pnaw [optional] numa of pix widths + * \param[out] pnah [optional] numa of pix heights + * \return 0 if OK, 1 on error + */ +l_ok +pixaFindDimensions(PIXA *pixa, + NUMA **pnaw, + NUMA **pnah) +{ +l_int32 i, n, w, h; +PIX *pixt; + + PROCNAME("pixaFindDimensions"); + + if (pnaw) *pnaw = NULL; + if (pnah) *pnah = NULL; + if (!pnaw && !pnah) + return ERROR_INT("no output requested", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + if (pnaw) *pnaw = numaCreate(n); + if (pnah) *pnah = numaCreate(n); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pixt, &w, &h, NULL); + if (pnaw) + numaAddNumber(*pnaw, w); + if (pnah) + numaAddNumber(*pnah, h); + pixDestroy(&pixt); + } + return 0; +} + + +/*! + * \brief pixFindAreaPerimRatio() + * + * \param[in] pixs 1 bpp + * \param[in] tab [optional] pixel sum table, can be NULL + * \param[out] pfract area/perimeter ratio + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The area is the number of fg pixels that are not on the
+ *          boundary (i.e., are not 8-connected to a bg pixel), and the
+ *          perimeter is the number of fg boundary pixels.  Returns
+ *          0.0 if there are no fg pixels.
+ *      (2) This function is retained because clients are using it.
+ * 
+ */ +l_ok +pixFindAreaPerimRatio(PIX *pixs, + l_int32 *tab, + l_float32 *pfract) +{ +l_int32 *tab8; +l_int32 nfg, nbound; +PIX *pixt; + + PROCNAME("pixFindAreaPerimRatio"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + + pixt = pixErodeBrick(NULL, pixs, 3, 3); + pixCountPixels(pixt, &nfg, tab8); + if (nfg == 0) { + pixDestroy(&pixt); + if (!tab) LEPT_FREE(tab8); + return 0; + } + pixXor(pixt, pixt, pixs); + pixCountPixels(pixt, &nbound, tab8); + *pfract = (l_float32)nfg / (l_float32)nbound; + pixDestroy(&pixt); + + if (!tab) LEPT_FREE(tab8); + return 0; +} + + +/*! + * \brief pixaFindPerimToAreaRatio() + * + * \param[in] pixa of 1 bpp pix + * \return na of perimeter/arear ratio for each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components.
+ * 
+ */ +NUMA * +pixaFindPerimToAreaRatio(PIXA *pixa) +{ +l_int32 i, n; +l_int32 *tab; +l_float32 fract; +NUMA *na; +PIX *pixt; + + PROCNAME("pixaFindPerimToAreaRatio"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + tab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixFindPerimToAreaRatio(pixt, tab, &fract); + numaAddNumber(na, fract); + pixDestroy(&pixt); + } + LEPT_FREE(tab); + return na; +} + + +/*! + * \brief pixFindPerimToAreaRatio() + * + * \param[in] pixs 1 bpp + * \param[in] tab [optional] pixel sum table, can be NULL + * \param[out] pfract perimeter/area ratio + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The perimeter is the number of fg boundary pixels, and the
+ *          area is the number of fg pixels.  This returns 0.0 if
+ *          there are no fg pixels.
+ *      (2) Unlike pixFindAreaPerimRatio(), this uses the full set of
+ *          fg pixels for the area, and the ratio is taken in the opposite
+ *          order.
+ *      (3) This is typically used for a single connected component.
+ *          This always has a value <= 1.0, and if the average distance
+ *          of a fg pixel from the nearest bg pixel is d, this has
+ *          a value ~1/d.
+ * 
+ */ +l_ok +pixFindPerimToAreaRatio(PIX *pixs, + l_int32 *tab, + l_float32 *pfract) +{ +l_int32 *tab8; +l_int32 nfg, nbound; +PIX *pixt; + + PROCNAME("pixFindPerimToAreaRatio"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + + pixCountPixels(pixs, &nfg, tab8); + if (nfg == 0) { + if (!tab) LEPT_FREE(tab8); + return 0; + } + pixt = pixErodeBrick(NULL, pixs, 3, 3); + pixXor(pixt, pixt, pixs); + pixCountPixels(pixt, &nbound, tab8); + *pfract = (l_float32)nbound / (l_float32)nfg; + pixDestroy(&pixt); + + if (!tab) LEPT_FREE(tab8); + return 0; +} + + +/*! + * \brief pixaFindPerimSizeRatio() + * + * \param[in] pixa of 1 bpp pix + * \return na of fg perimeter/(2*(w+h)) ratio for each pix, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components.
+ *      (2) This has a minimum value for a circle of pi/4; a value for
+ *          a rectangle component of approx. 1.0; and a value much larger
+ *          than 1.0 for a component with a highly irregular boundary.
+ * 
+ */ +NUMA * +pixaFindPerimSizeRatio(PIXA *pixa) +{ +l_int32 i, n; +l_int32 *tab; +l_float32 ratio; +NUMA *na; +PIX *pixt; + + PROCNAME("pixaFindPerimSizeRatio"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + tab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixFindPerimSizeRatio(pixt, tab, &ratio); + numaAddNumber(na, ratio); + pixDestroy(&pixt); + } + LEPT_FREE(tab); + return na; +} + + +/*! + * \brief pixFindPerimSizeRatio() + * + * \param[in] pixs 1 bpp + * \param[in] tab [optional] pixel sum table, can be NULL + * \param[out] pratio perimeter/size ratio + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We take the 'size' as twice the sum of the width and
+ *          height of pixs, and the perimeter is the number of fg
+ *          boundary pixels.  We use the fg pixels of the boundary
+ *          because the pix may be clipped to the boundary, so an
+ *          erosion is required to count all boundary pixels.
+ *      (2) This has a large value for dendritic, fractal-like components
+ *          with highly irregular boundaries.
+ *      (3) This is typically used for a single connected component.
+ *          It has a value of about 1.0 for rectangular components with
+ *          relatively smooth boundaries.
+ * 
+ */ +l_ok +pixFindPerimSizeRatio(PIX *pixs, + l_int32 *tab, + l_float32 *pratio) +{ +l_int32 *tab8; +l_int32 w, h, nbound; +PIX *pixt; + + PROCNAME("pixFindPerimSizeRatio"); + + if (!pratio) + return ERROR_INT("&ratio not defined", procName, 1); + *pratio = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + + pixt = pixErodeBrick(NULL, pixs, 3, 3); + pixXor(pixt, pixt, pixs); + pixCountPixels(pixt, &nbound, tab8); + pixGetDimensions(pixs, &w, &h, NULL); + *pratio = (0.5 * nbound) / (l_float32)(w + h); + pixDestroy(&pixt); + + if (!tab) LEPT_FREE(tab8); + return 0; +} + + +/*! + * \brief pixaFindAreaFraction() + * + * \param[in] pixa of 1 bpp pix + * \return na of area fractions for each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components.
+ * 
+ */ +NUMA * +pixaFindAreaFraction(PIXA *pixa) +{ +l_int32 i, n; +l_int32 *tab; +l_float32 fract; +NUMA *na; +PIX *pixt; + + PROCNAME("pixaFindAreaFraction"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + tab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixFindAreaFraction(pixt, tab, &fract); + numaAddNumber(na, fract); + pixDestroy(&pixt); + } + LEPT_FREE(tab); + return na; +} + + +/*! + * \brief pixFindAreaFraction() + * + * \param[in] pixs 1 bpp + * \param[in] tab [optional] pixel sum table, can be NULL + * \param[out] pfract fg area/size ratio + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This finds the ratio of the number of fg pixels to the
+ *          size of the pix (w * h).  It is typically used for a
+ *          single connected component.
+ * 
+ */ +l_ok +pixFindAreaFraction(PIX *pixs, + l_int32 *tab, + l_float32 *pfract) +{ +l_int32 w, h, sum; +l_int32 *tab8; + + PROCNAME("pixFindAreaFraction"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + pixGetDimensions(pixs, &w, &h, NULL); + pixCountPixels(pixs, &sum, tab8); + *pfract = (l_float32)sum / (l_float32)(w * h); + + if (!tab) LEPT_FREE(tab8); + return 0; +} + + +/*! + * \brief pixaFindAreaFractionMasked() + * + * \param[in] pixa of 1 bpp pix + * \param[in] pixm mask image + * \param[in] debug 1 for output, 0 to suppress + * \return na of ratio masked/total fractions for each pix, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components, which has an associated
+ *          boxa giving the location of the components relative
+ *          to the mask origin.
+ *      (2) The debug flag displays in green and red the masked and
+ *          unmasked parts of the image from which pixa was derived.
+ * 
+ */ +NUMA * +pixaFindAreaFractionMasked(PIXA *pixa, + PIX *pixm, + l_int32 debug) +{ +l_int32 i, n, full; +l_int32 *tab; +l_float32 fract; +BOX *box; +NUMA *na; +PIX *pix; + + PROCNAME("pixaFindAreaFractionMasked"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 1) + return (NUMA *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + tab = makePixelSumTab8(); + pixaIsFull(pixa, NULL, &full); /* check boxa */ + box = NULL; + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + if (full) + box = pixaGetBox(pixa, i, L_CLONE); + pixFindAreaFractionMasked(pix, box, pixm, tab, &fract); + numaAddNumber(na, fract); + boxDestroy(&box); + pixDestroy(&pix); + } + LEPT_FREE(tab); + + if (debug) { + l_int32 w, h; + PIX *pix1, *pix2; + pixGetDimensions(pixm, &w, &h, NULL); + pix1 = pixaDisplay(pixa, w, h); /* recover original image */ + pix2 = pixCreate(w, h, 8); /* make an 8 bpp white image ... */ + pixSetColormap(pix2, pixcmapCreate(8)); /* that's cmapped ... */ + pixSetBlackOrWhite(pix2, L_SET_WHITE); /* and init to white */ + pixSetMaskedCmap(pix2, pix1, 0, 0, 255, 0, 0); /* color all fg red */ + pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, 0, 0); + pixSetMaskedCmap(pix2, pix1, 0, 0, 0, 255, 0); /* turn masked green */ + pixDisplay(pix2, 100, 100); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return na; +} + + +/*! + * \brief pixFindAreaFractionMasked() + * + * \param[in] pixs 1 bpp, typically a single component + * \param[in] box [optional] for pixs relative to pixm + * \param[in] pixm 1 bpp mask, typically over the entire image from + * which the component pixs was extracted + * \param[in] tab [optional] pixel sum table, can be NULL + * \param[out] pfract fg area/size ratio + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This finds the ratio of the number of masked fg pixels
+ *          in pixs to the total number of fg pixels in pixs.
+ *          It is typically used for a single connected component.
+ *          If there are no fg pixels, this returns a ratio of 0.0.
+ *      (2) The box gives the location of the pix relative to that
+ *          of the UL corner of the mask.  Therefore, the rasterop
+ *          is performed with the pix translated to its location
+ *          (x, y) in the mask before ANDing.
+ *          If box == NULL, the UL corners of pixs and pixm are aligned.
+ * 
+ */ +l_ok +pixFindAreaFractionMasked(PIX *pixs, + BOX *box, + PIX *pixm, + l_int32 *tab, + l_float32 *pfract) +{ +l_int32 x, y, w, h, sum, masksum; +l_int32 *tab8; +PIX *pix1; + + PROCNAME("pixFindAreaFractionMasked"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + x = y = 0; + if (box) + boxGetGeometry(box, &x, &y, NULL, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + + pix1 = pixCopy(NULL, pixs); + pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, x, y); + pixCountPixels(pixs, &sum, tab8); + if (sum == 0) { + pixDestroy(&pix1); + if (!tab) LEPT_FREE(tab8); + return 0; + } + pixCountPixels(pix1, &masksum, tab8); + *pfract = (l_float32)masksum / (l_float32)sum; + + if (!tab) LEPT_FREE(tab8); + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief pixaFindWidthHeightRatio() + * + * \param[in] pixa of 1 bpp pix + * \return na of width/height ratios for each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components.
+ * 
+ */ +NUMA * +pixaFindWidthHeightRatio(PIXA *pixa) +{ +l_int32 i, n, w, h; +NUMA *na; +PIX *pixt; + + PROCNAME("pixaFindWidthHeightRatio"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pixt, &w, &h, NULL); + numaAddNumber(na, (l_float32)w / (l_float32)h); + pixDestroy(&pixt); + } + return na; +} + + +/*! + * \brief pixaFindWidthHeightProduct() + * + * \param[in] pixa of 1 bpp pix + * \return na of width*height products for each pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is typically used for a pixa consisting of
+ *          1 bpp connected components.
+ * 
+ */ +NUMA * +pixaFindWidthHeightProduct(PIXA *pixa) +{ +l_int32 i, n, w, h; +NUMA *na; +PIX *pixt; + + PROCNAME("pixaFindWidthHeightProduct"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pixt, &w, &h, NULL); + numaAddNumber(na, w * h); + pixDestroy(&pixt); + } + return na; +} + + +/*! + * \brief pixFindOverlapFraction() + * + * \param[in] pixs1, pixs2 1 bpp + * \param[in] x2, y2 location in pixs1 of UL corner of pixs2 + * \param[in] tab [optional] pixel sum table, can be null + * \param[out] pratio ratio fg intersection to fg union + * \param[out] pnoverlap [optional] number of overlapping pixels + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The UL corner of pixs2 is placed at (x2, y2) in pixs1.
+ *      (2) This measure is similar to the correlation.
+ * 
+ */ +l_ok +pixFindOverlapFraction(PIX *pixs1, + PIX *pixs2, + l_int32 x2, + l_int32 y2, + l_int32 *tab, + l_float32 *pratio, + l_int32 *pnoverlap) +{ +l_int32 *tab8; +l_int32 w, h, nintersect, nunion; +PIX *pixt; + + PROCNAME("pixFindOverlapFraction"); + + if (pnoverlap) *pnoverlap = 0; + if (!pratio) + return ERROR_INT("&ratio not defined", procName, 1); + *pratio = 0.0; + if (!pixs1 || pixGetDepth(pixs1) != 1) + return ERROR_INT("pixs1 not defined or not 1 bpp", procName, 1); + if (!pixs2 || pixGetDepth(pixs2) != 1) + return ERROR_INT("pixs2 not defined or not 1 bpp", procName, 1); + + if (!tab) + tab8 = makePixelSumTab8(); + else + tab8 = tab; + + pixGetDimensions(pixs2, &w, &h, NULL); + pixt = pixCopy(NULL, pixs1); + pixRasterop(pixt, x2, y2, w, h, PIX_MASK, pixs2, 0, 0); /* AND */ + pixCountPixels(pixt, &nintersect, tab8); + if (pnoverlap) + *pnoverlap = nintersect; + pixCopy(pixt, pixs1); + pixRasterop(pixt, x2, y2, w, h, PIX_PAINT, pixs2, 0, 0); /* OR */ + pixCountPixels(pixt, &nunion, tab8); + if (!tab) LEPT_FREE(tab8); + pixDestroy(&pixt); + + if (nunion > 0) + *pratio = (l_float32)nintersect / (l_float32)nunion; + return 0; +} + + +/*! + * \brief pixFindRectangleComps() + * + * \param[in] pixs 1 bpp + * \param[in] dist max distance allowed between bounding box + * and nearest foreground pixel within it + * \param[in] minw, minh minimum size in each direction as a requirement + * for a conforming rectangle + * \return boxa of components that conform, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies the function pixConformsToRectangle() to
+ *          each 8-c.c. in pixs, and returns a boxa containing the
+ *          regions of all components that are conforming.
+ *      (2) Conforming components must satisfy both the size constraint
+ *          given by %minsize and the slop in conforming to a rectangle
+ *          determined by %dist.
+ * 
+ */ +BOXA * +pixFindRectangleComps(PIX *pixs, + l_int32 dist, + l_int32 minw, + l_int32 minh) +{ +l_int32 w, h, i, n, conforms; +BOX *box; +BOXA *boxa, *boxad; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixFindRectangleComps"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (dist < 0) + return (BOXA *)ERROR_PTR("dist must be >= 0", procName, NULL); + if (minw <= 2 * dist && minh <= 2 * dist) + return (BOXA *)ERROR_PTR("invalid parameters", procName, NULL); + + boxa = pixConnComp(pixs, &pixa, 8); + boxad = boxaCreate(0); + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pix, &w, &h, NULL); + if (w < minw || h < minh) { + pixDestroy(&pix); + continue; + } + pixConformsToRectangle(pix, NULL, dist, &conforms); + if (conforms) { + box = boxaGetBox(boxa, i, L_COPY); + boxaAddBox(boxad, box, L_INSERT); + } + pixDestroy(&pix); + } + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return boxad; +} + + +/*! + * \brief pixConformsToRectangle() + * + * \param[in] pixs 1 bpp + * \param[in] box [optional] if null, use the entire pixs + * \param[in] dist max distance allowed between bounding box and + * nearest foreground pixel within it + * \param[out] pconforms 0 (false) if not conforming; + * 1 (true) if conforming + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) There are several ways to test if a connected component has
+ *          an essentially rectangular boundary, such as:
+ *           a. Fraction of fill into the bounding box
+ *           b. Max-min distance of fg pixel from periphery of bounding box
+ *           c. Max depth of bg intrusions into component within bounding box
+ *          The weakness of (a) is that it is highly sensitive to holes
+ *          within the c.c.  The weakness of (b) is that it can have
+ *          arbitrarily large intrusions into the c.c.  Method (c) tests
+ *          the integrity of the outer boundary of the c.c., with respect
+ *          to the enclosing bounding box, so we use it.
+ *      (2) This tests if the connected component within the box conforms
+ *          to the box at all points on the periphery within %dist.
+ *          Inside, at a distance from the box boundary that is greater
+ *          than %dist, we don't care about the pixels in the c.c.
+ *      (3) We can think of the conforming condition as follows:
+ *          No pixel inside a distance %dist from the boundary
+ *          can connect to the boundary through a path through the bg.
+ *          To implement this, we need to do a flood fill.  We can go
+ *          either from inside toward the boundary, or the other direction.
+ *          It's easiest to fill from the boundary, and then verify that
+ *          there are no filled pixels farther than %dist from the boundary.
+ * 
+ */ +l_ok +pixConformsToRectangle(PIX *pixs, + BOX *box, + l_int32 dist, + l_int32 *pconforms) +{ +l_int32 w, h, empty; +PIX *pix1, *pix2; + + PROCNAME("pixConformsToRectangle"); + + if (!pconforms) + return ERROR_INT("&conforms not defined", procName, 1); + *pconforms = 0; + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (dist < 0) + return ERROR_INT("dist must be >= 0", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (w <= 2 * dist || h <= 2 * dist) { + L_WARNING("automatic conformation: distance too large\n", procName); + *pconforms = 1; + return 0; + } + + /* Extract the region, if necessary */ + if (box) + pix1 = pixClipRectangle(pixs, box, NULL); + else + pix1 = pixCopy(NULL, pixs); + + /* Invert and fill from the boundary into the interior. + * Because we're considering the connected component in an + * 8-connected sense, we do the background filling as 4 c.c. */ + pixInvert(pix1, pix1); + pix2 = pixExtractBorderConnComps(pix1, 4); + + /* Mask out all pixels within a distance %dist from the box + * boundary. Any remaining pixels are from filling that goes + * more than %dist from the boundary. If no pixels remain, + * the component conforms to the bounding rectangle within + * a distance %dist. */ + pixSetOrClearBorder(pix2, dist, dist, dist, dist, PIX_CLR); + pixZero(pix2, &empty); + pixDestroy(&pix1); + pixDestroy(&pix2); + *pconforms = (empty) ? 1 : 0; + return 0; +} + + +/*-----------------------------------------------------------------------* + * Extract rectangular region * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixClipRectangles() + * + * \param[in] pixs + * \param[in] boxa requested clipping regions + * \return pixa consisting of requested regions, or NULL on error + * + *
+ * Notes:
+ *     (1) The returned pixa includes the actual regions clipped out from
+ *         the input pixs.
+ * 
+ */ +PIXA * +pixClipRectangles(PIX *pixs, + BOXA *boxa) +{ +l_int32 i, n; +BOX *box, *boxc; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixClipRectangles"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIXA *)ERROR_PTR("boxa not defined", procName, NULL); + + n = boxaGetCount(boxa); + pixa = pixaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pix = pixClipRectangle(pixs, box, &boxc); + pixaAddPix(pixa, pix, L_INSERT); + pixaAddBox(pixa, boxc, L_INSERT); + boxDestroy(&box); + } + + return pixa; +} + + +/*! + * \brief pixClipRectangle() + * + * \param[in] pixs + * \param[in] box requested clipping region; const + * \param[out] pboxc [optional] actual box of clipped region + * \return clipped pix, or NULL on error or if rectangle + * doesn't intersect pixs + * + *
+ * Notes:
+ *
+ *  This should be simple, but there are choices to be made.
+ *  The box is defined relative to the pix coordinates.  However,
+ *  if the box is not contained within the pix, we have two choices:
+ *
+ *      (1) clip the box to the pix
+ *      (2) make a new pix equal to the full box dimensions,
+ *          but let rasterop do the clipping and positioning
+ *          of the src with respect to the dest
+ *
+ *  Choice (2) immediately brings up the problem of what pixel values
+ *  to use that were not taken from the src.  For example, on a grayscale
+ *  image, do you want the pixels not taken from the src to be black
+ *  or white or something else?  To implement choice 2, one needs to
+ *  specify the color of these extra pixels.
+ *
+ *  So we adopt (1), and clip the box first, if necessary,
+ *  before making the dest pix and doing the rasterop.  But there
+ *  is another issue to consider.  If you want to paste the
+ *  clipped pix back into pixs, it must be properly aligned, and
+ *  it is necessary to use the clipped box for alignment.
+ *  Accordingly, this function has a third (optional) argument, which is
+ *  the input box clipped to the src pix.
+ * 
+ */ +PIX * +pixClipRectangle(PIX *pixs, + BOX *box, + BOX **pboxc) +{ +l_int32 w, h, d, bx, by, bw, bh; +BOX *boxc; +PIX *pixd; + + PROCNAME("pixClipRectangle"); + + if (pboxc) *pboxc = NULL; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!box) + return (PIX *)ERROR_PTR("box not defined", procName, NULL); + + /* Clip the input box to the pix */ + pixGetDimensions(pixs, &w, &h, &d); + if ((boxc = boxClipToRectangle(box, w, h)) == NULL) { + L_WARNING("box doesn't overlap pix\n", procName); + return NULL; + } + boxGetGeometry(boxc, &bx, &by, &bw, &bh); + + /* Extract the block */ + if ((pixd = pixCreate(bw, bh, d)) == NULL) { + boxDestroy(&boxc); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixRasterop(pixd, 0, 0, bw, bh, PIX_SRC, pixs, bx, by); + + if (pboxc) + *pboxc = boxc; + else + boxDestroy(&boxc); + + return pixd; +} + + +/*! + * \brief pixClipMasked() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp; colormap ok + * \param[in] pixm clipping mask, 1 bpp + * \param[in] x, y origin of clipping mask relative to pixs + * \param[in] outval val to use for pixels that are outside the mask + * \return pixd, clipped pix or NULL on error or if pixm doesn't + * intersect pixs + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, it is preserved in pixd.
+ *      (2) The depth of pixd is the same as that of pixs.
+ *      (3) If the depth of pixs is 1, use %outval = 0 for white background
+ *          and 1 for black; otherwise, use the max value for white
+ *          and 0 for black.  If pixs has a colormap, the max value for
+ *          %outval is 0xffffffff; otherwise, it is 2^d - 1.
+ *      (4) When using 1 bpp pixs, this is a simple clip and
+ *          blend operation.  For example, if both pix1 and pix2 are
+ *          black text on white background, and you want to OR the
+ *          fg on the two images, let pixm be the inverse of pix2.
+ *          Then the operation takes all of pix1 that's in the bg of
+ *          pix2, and for the remainder (which are the pixels
+ *          corresponding to the fg of the pix2), paint them black
+ *          (1) in pix1.  The function call looks like
+ *             pixClipMasked(pix2, pixInvert(pix1, pix1), x, y, 1);
+ * 
+ */ +PIX * +pixClipMasked(PIX *pixs, + PIX *pixm, + l_int32 x, + l_int32 y, + l_uint32 outval) +{ +l_int32 wm, hm, index, rval, gval, bval; +l_uint32 pixel; +BOX *box; +PIX *pixmi, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixClipMasked"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); + + /* Clip out the region specified by pixm and (x,y) */ + pixGetDimensions(pixm, &wm, &hm, NULL); + box = boxCreate(x, y, wm, hm); + pixd = pixClipRectangle(pixs, box, NULL); + + /* Paint 'outval' (or something close to it if cmapped) through + * the pixels not masked by pixm */ + cmap = pixGetColormap(pixd); + pixmi = pixInvert(NULL, pixm); + if (cmap) { + extractRGBValues(outval, &rval, &gval, &bval); + pixcmapGetNearestIndex(cmap, rval, gval, bval, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &pixel); + pixPaintThroughMask(pixd, pixmi, 0, 0, pixel); + } else { + pixPaintThroughMask(pixd, pixmi, 0, 0, outval); + } + + boxDestroy(&box); + pixDestroy(&pixmi); + return pixd; +} + + +/*! + * \brief pixCropToMatch() + * + * \param[in] pixs1 any depth, colormap OK + * \param[in] pixs2 any depth, colormap OK + * \param[out] ppixd1 may be a clone + * \param[out] ppixd2 may be a clone + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This resizes pixs1 and/or pixs2 by cropping at the right
+ *          and bottom, so that they're the same size.
+ *      (2) If a pix doesn't need to be cropped, a clone is returned.
+ *      (3) Note: the images are implicitly aligned to the UL corner.
+ * 
+ */ +l_ok +pixCropToMatch(PIX *pixs1, + PIX *pixs2, + PIX **ppixd1, + PIX **ppixd2) +{ +l_int32 w1, h1, w2, h2, w, h; + + PROCNAME("pixCropToMatch"); + + if (!ppixd1 || !ppixd2) + return ERROR_INT("&pixd1 and &pixd2 not both defined", procName, 1); + *ppixd1 = *ppixd2 = NULL; + if (!pixs1 || !pixs2) + return ERROR_INT("pixs1 and pixs2 not defined", procName, 1); + + pixGetDimensions(pixs1, &w1, &h1, NULL); + pixGetDimensions(pixs2, &w2, &h2, NULL); + w = L_MIN(w1, w2); + h = L_MIN(h1, h2); + + *ppixd1 = pixCropToSize(pixs1, w, h); + *ppixd2 = pixCropToSize(pixs2, w, h); + if (*ppixd1 == NULL || *ppixd2 == NULL) + return ERROR_INT("cropped image failure", procName, 1); + return 0; +} + + +/*! + * \brief pixCropToSize() + * + * \param[in] pixs any depth, colormap OK + * \param[in] w, h max dimensions of cropped image + * \return pixd cropped if necessary or NULL on error. + * + *
+ * Notes:
+ *      (1) If either w or h is smaller than the corresponding dimension
+ *          of pixs, this returns a cropped image; otherwise it returns
+ *          a clone of pixs.
+ * 
+ */ +PIX * +pixCropToSize(PIX *pixs, + l_int32 w, + l_int32 h) +{ +l_int32 ws, hs, wd, hd, d; +PIX *pixd; + + PROCNAME("pixCropToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, &d); + if (ws <= w && hs <= h) /* no cropping necessary */ + return pixClone(pixs); + + wd = L_MIN(ws, w); + hd = L_MIN(hs, h); + if ((pixd = pixCreate(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, 0, 0); + return pixd; +} + + +/*! + * \brief pixResizeToMatch() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp; colormap ok + * \param[in] pixt can be null; we use only the size + * \param[in] w, h ignored if pixt is defined + * \return pixd resized to match or NULL on error + * + *
+ * Notes:
+ *      (1) This resizes pixs to make pixd, without scaling, by either
+ *          cropping or extending separately in both width and height.
+ *          Extension is done by replicating the last row or column.
+ *          This is useful in a situation where, due to scaling
+ *          operations, two images that are expected to be the
+ *          same size can differ slightly in each dimension.
+ *      (2) You can use either an existing pixt or specify
+ *          both %w and %h.  If pixt is defined, the values
+ *          in %w and %h are ignored.
+ *      (3) If pixt is larger than pixs (or if w and/or d is larger
+ *          than the dimension of pixs, replicate the outer row and
+ *          column of pixels in pixs into pixd.
+ * 
+ */ +PIX * +pixResizeToMatch(PIX *pixs, + PIX *pixt, + l_int32 w, + l_int32 h) +{ +l_int32 i, j, ws, hs, d; +PIX *pixd; + + PROCNAME("pixResizeToMatch"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!pixt && (w <= 0 || h <= 0)) + return (PIX *)ERROR_PTR("both w and h not > 0", procName, NULL); + + if (pixt) /* redefine w, h */ + pixGetDimensions(pixt, &w, &h, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (ws == w && hs == h) + return pixCopy(NULL, pixs); + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixRasterop(pixd, 0, 0, ws, hs, PIX_SRC, pixs, 0, 0); + if (ws >= w && hs >= h) + return pixd; + + /* Replicate the last column and then the last row */ + if (ws < w) { + for (j = ws; j < w; j++) + pixRasterop(pixd, j, 0, 1, h, PIX_SRC, pixd, ws - 1, 0); + } + if (hs < h) { + for (i = hs; i < h; i++) + pixRasterop(pixd, 0, i, w, 1, PIX_SRC, pixd, 0, hs - 1); + } + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Select a connected component by size * + *---------------------------------------------------------------------*/ +/*! + * \brief pixSelectComponentBySize() + * + * \param[in] pixs 1 bpp + * \param[in] rankorder in decreasing size: 0 for largest. + * \param[in] type L_SELECT_BY_WIDTH, L_SELECT_BY_HEIGHT, + * L_SELECT_BY_MAX_DIMENSION, + * L_SELECT_BY_AREA, L_SELECT_BY_PERIMETER + * \param[in] connectivity 4 or 8 + * \param[out] pbox [optional] location of returned component + * \return pix of rank order connected component, or NULL on error. + * + *
+ * Notes:
+ *      (1) This selects the Nth largest connected component, based on
+ *          the selection type and connectivity.
+ *      (2) Note that %rankorder is an integer.  Use %rankorder = 0 for
+ *          the largest component and %rankorder = -1 for the smallest.
+ *          If %rankorder >= number of components, select the smallest.
+ */
+PIX *
+pixSelectComponentBySize(PIX     *pixs,
+                         l_int32  rankorder,
+                         l_int32  type,
+                         l_int32  connectivity,
+                         BOX    **pbox)
+{
+l_int32  n, empty, sorttype, index;
+BOXA    *boxa1;
+NUMA    *naindex;
+PIX     *pixd;
+PIXA    *pixa1, *pixa2;
+
+    PROCNAME("pixSelectComponentBySize");
+
+    if (pbox) *pbox = NULL;
+    if (!pixs || pixGetDepth(pixs) != 1)
+        return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL);
+    if (type == L_SELECT_BY_WIDTH)
+        sorttype = L_SORT_BY_WIDTH;
+    else if (type == L_SELECT_BY_HEIGHT)
+        sorttype = L_SORT_BY_HEIGHT;
+    else if (type == L_SELECT_BY_MAX_DIMENSION)
+        sorttype = L_SORT_BY_MAX_DIMENSION;
+    else if (type == L_SELECT_BY_AREA)
+        sorttype = L_SORT_BY_AREA;
+    else if (type == L_SELECT_BY_PERIMETER)
+        sorttype = L_SORT_BY_PERIMETER;
+    else
+        return (PIX *)ERROR_PTR("invalid selection type", procName, NULL);
+    if (connectivity != 4 && connectivity != 8)
+        return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL);
+    pixZero(pixs, &empty);
+    if (empty)
+        return (PIX *)ERROR_PTR("no foreground pixels", procName, NULL);
+
+    boxa1 = pixConnComp(pixs, &pixa1, connectivity);
+    n = boxaGetCount(boxa1);
+    if (rankorder < 0 || rankorder >= n)
+        rankorder = n - 1;  /* smallest */
+    pixa2 = pixaSort(pixa1, sorttype, L_SORT_DECREASING, &naindex, L_CLONE);
+    pixd = pixaGetPix(pixa2, rankorder, L_COPY);
+    if (pbox) {
+        numaGetIValue(naindex, rankorder, &index);
+        *pbox = boxaGetBox(boxa1, index, L_COPY);
+    }
+
+    numaDestroy(&naindex);
+    boxaDestroy(&boxa1);
+    pixaDestroy(&pixa1);
+    pixaDestroy(&pixa2);
+    return pixd;
+}
+
+
+/*!
+ * \brief   pixFilterComponentBySize()
+ *
+ * \param[in]    pixs          1 bpp
+ * \param[in]    rankorder     in decreasing size: 0 for largest.
+ * \param[in]    type          L_SELECT_BY_WIDTH, L_SELECT_BY_HEIGHT,
+ *                             L_SELECT_BY_MAX_DIMENSION,
+ *                             L_SELECT_BY_AREA, L_SELECT_BY_PERIMETER
+ * \param[in]    connectivity  4 or 8
+ * \param[out]   pbox          [optional] location of returned component
+ * \return  pix with all other components removed, or NULL on error.
+ *
+ * 
+ * Notes:
+ *      (1) See notes in pixSelectComponentBySize().
+ *      (2) This returns a copy of %pixs, with all components removed
+ *          except for the selected one.
+ */
+PIX *
+pixFilterComponentBySize(PIX     *pixs,
+                         l_int32  rankorder,
+                         l_int32  type,
+                         l_int32  connectivity,
+                         BOX    **pbox)
+{
+l_int32  x, y, w, h;
+BOX     *box;
+PIX     *pix1, *pix2;
+
+    PROCNAME("pixFilterComponentBySize");
+
+    if (!pixs || pixGetDepth(pixs) != 1)
+        return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL);
+
+    pix1 = pixSelectComponentBySize(pixs, rankorder, type, connectivity, &box);
+    if (!pix1) {
+        boxDestroy(&box);
+        return (PIX *)ERROR_PTR("pix1 not made", procName, NULL);
+    }
+
+        /* Put the selected component in a new pix at the same
+         * location as it had in %pixs */
+    boxGetGeometry(box, &x, &y, &w, &h);
+    pix2 = pixCreateTemplate(pixs);
+    pixRasterop(pix2, x, y, w, h, PIX_SRC, pix1, 0, 0);
+    if (pbox)
+        *pbox = box;
+    else
+        boxDestroy(&box);
+    pixDestroy(&pix1);
+    return pix2;
+}
+
+
+/*---------------------------------------------------------------------*
+ *                         Make special masks                          *
+ *---------------------------------------------------------------------*/
+/*!
+ * \brief   pixMakeSymmetricMask()
+ *
+ * \param[in]    w, h    dimensions of output 1 bpp pix
+ * \param[in]    hf      horizontal fraction of half-width
+ * \param[in]    vf      vertical fraction of half-height
+ * \param[in]    type    L_USE_INNER, L_USE_OUTER
+ * \return  pixd 1 bpp, or NULL on error.
+ *
+ * 
+ * Notes:
+ *      (1) This is a convenience function for generating masks with
+ *          horizontal and vertical reflection symmetry, over either
+ *          the inner or outer parts of an image.
+ *      (2) Using L_USE_INNER to generate a mask over the inner part
+ *          of the image, the mask is a solid rectangle, and the fractions
+ *          describe the distance between the boundary of the image and
+ *          the rectangle boundary.  For example, with hf == vf == 0.0,
+ *          the mask covers the full image.
+ *      (3) Using L_USE_OUTER to generate a mask over an outer frame
+ *          of the image, the mask touches the boundary of the image,
+ *          and the fractions describe the location of the inner
+ *          boundary of the frame.  For example, with hf == vf == 1.0,
+ *          the inner boundary is at the center of the image, so the
+ *          mask covers the full image.
+ *      (4) More examples:
+ *           * mask covering the inner 70%: hf = vf = 0.3, type = L_USE_INNER
+ *           * frame covering the outer 30%: hf = vf = 0.3, type = L_USE_OUTER
+ * 
+ */ +PIX * +pixMakeSymmetricMask(l_int32 w, + l_int32 h, + l_float32 hf, + l_float32 vf, + l_int32 type) +{ + PROCNAME("pixMakeSymmetricMask"); + + if (w <= 0 || h <= 0) + return (PIX *)ERROR_PTR("mask size 0", procName, NULL); + if (hf < 0.0 || hf > 1.0) + return (PIX *)ERROR_PTR("invalid horiz fractions", procName, NULL); + if (vf < 0.0 || vf > 1.0) + return (PIX *)ERROR_PTR("invalid vert fractions", procName, NULL); + + if (type == L_USE_INNER) + return pixMakeFrameMask(w, h, hf, 1.0, vf, 1.0); + else if (type == L_USE_OUTER) + return pixMakeFrameMask(w, h, 0.0, hf, 0.0, vf); + else + return (PIX *)ERROR_PTR("invalid type", procName, NULL); +} + + +/*! + * \brief pixMakeFrameMask() + * + * \param[in] w, h dimensions of output 1 bpp pix + * \param[in] hf1 horizontal fraction of half-width at outer frame bdry + * \param[in] hf2 horizontal fraction of half-width at inner frame bdry + * \param[in] vf1 vertical fraction of half-width at outer frame bdry + * \param[in] vf2 vertical fraction of half-width at inner frame bdry + * \return pixd 1 bpp, or NULL on error. + * + *
+ * Notes:
+ *      (1) This makes an arbitrary 1-component mask with a centered fg
+ *          frame, which can have both an inner and an outer boundary.
+ *          All input fractional distances are measured from the image
+ *          border to the frame boundary, in units of the image half-width
+ *          for hf1 and hf2 and the image half-height for vf1 and vf2.
+ *          The distances to the outer frame boundary are given by hf1
+ *          and vf1; to the inner frame boundary, by hf2 and vf2.
+ *          Input fractions are thus in [0.0 ... 1.0], with hf1 <= hf2
+ *          and vf1 <= vf2.  Horizontal and vertical frame widths are
+ *          thus independently specified.
+ *      (2) Special cases:
+ *           * full fg mask: hf1 = vf1 = 0.0, hf2 = vf2 = 1.0.
+ *           * empty fg (zero width) mask: set  hf1 = hf2  and vf1 = vf2.
+ *           * fg rectangle with no hole: set hf2 = vf2 = 1.0.
+ *           * frame touching outer boundary: set hf1 = vf1 = 0.0.
+ *      (3) The vertical thickness of the horizontal mask parts
+ *          is 0.5 * (vf2 - vf1) * h.  The horizontal thickness of the
+ *          vertical mask parts is 0.5 * (hf2 - hf1) * w.
+ * 
+ */ +PIX * +pixMakeFrameMask(l_int32 w, + l_int32 h, + l_float32 hf1, + l_float32 hf2, + l_float32 vf1, + l_float32 vf2) +{ +l_int32 h1, h2, v1, v2; +PIX *pixd; + + PROCNAME("pixMakeFrameMask"); + + if (w <= 0 || h <= 0) + return (PIX *)ERROR_PTR("mask size 0", procName, NULL); + if (hf1 < 0.0 || hf1 > 1.0 || hf2 < 0.0 || hf2 > 1.0) + return (PIX *)ERROR_PTR("invalid horiz fractions", procName, NULL); + if (vf1 < 0.0 || vf1 > 1.0 || vf2 < 0.0 || vf2 > 1.0) + return (PIX *)ERROR_PTR("invalid vert fractions", procName, NULL); + if (hf1 > hf2 || vf1 > vf2) + return (PIX *)ERROR_PTR("invalid relative sizes", procName, NULL); + + pixd = pixCreate(w, h, 1); + + /* Special cases */ + if (hf1 == 0.0 && vf1 == 0.0 && hf2 == 1.0 && vf2 == 1.0) { /* full */ + pixSetAll(pixd); + return pixd; + } + if (hf1 == hf2 && vf1 == vf2) { /* empty */ + return pixd; + } + + /* General case */ + h1 = 0.5 * hf1 * w; + h2 = 0.5 * hf2 * w; + v1 = 0.5 * vf1 * h; + v2 = 0.5 * vf2 * h; + pixRasterop(pixd, h1, v1, w - 2 * h1, h - 2 * v1, PIX_SET, NULL, 0, 0); + if (hf2 < 1.0 && vf2 < 1.0) + pixRasterop(pixd, h2, v2, w - 2 * h2, h - 2 * v2, PIX_CLR, NULL, 0, 0); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Generate a covering of rectangles over connected components * + *---------------------------------------------------------------------*/ +/*! + * \brief pixMakeCoveringOfRectangles() + * + * \param[in] pixs 1 bpp + * \param[in] maxiters max iterations: use 0 to iterate to completion + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This iteratively finds the bounding boxes of the connected
+ *          components and generates a mask from them.  Two iterations
+ *          should suffice for most situations.
+ *      (2) Returns an empty pix if %pixs is empty.
+ *      (3) If there are many small components in proximity, it may
+ *          be useful to merge them with a morphological closing before
+ *          calling this one.
+ * 
+ */ +PIX * +pixMakeCoveringOfRectangles(PIX *pixs, + l_int32 maxiters) +{ +l_int32 empty, same, niters; +BOXA *boxa; +PIX *pix1, *pix2; + + PROCNAME("pixMakeCoveringOfRectangles"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (maxiters < 0) + return (PIX *)ERROR_PTR("maxiters must be >= 0", procName, NULL); + if (maxiters == 0) maxiters = 50; /* ridiculously large number */ + + pixZero(pixs, &empty); + pix1 = pixCreateTemplate(pixs); + if (empty) return pix1; + + /* Do first iteration */ + boxa = pixConnCompBB(pixs, 8); + pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); + boxaDestroy(&boxa); + if (maxiters == 1) return pix1; + + niters = 1; + while (niters < maxiters) { /* continue to add pixels to pix1 */ + niters++; + boxa = pixConnCompBB(pix1, 8); + pix2 = pixCopy(NULL, pix1); + pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); + boxaDestroy(&boxa); + pixEqual(pix1, pix2, &same); + pixDestroy(&pix2); + if (same) { + L_INFO("%d iterations\n", procName, niters - 1); + return pix1; + } + } + L_INFO("maxiters = %d reached\n", procName, niters); + return pix1; +} + + +/*---------------------------------------------------------------------* + * Fraction of Fg pixels under a mask * + *---------------------------------------------------------------------*/ +/*! + * \brief pixFractionFgInMask() + * + * \param[in] pix1 1 bpp + * \param[in] pix2 1 bpp + * \param[out] pfract fraction of fg pixels in 1 that are + * aligned with the fg of 2 + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This gives the fraction of fg pixels in pix1 that are in
+ *          the intersection (i.e., under the fg) of pix2:
+ *          |1 & 2|/|1|, where |...| means the number of fg pixels.
+ *          Note that this is different from the situation where
+ *          pix1 and pix2 are reversed.
+ *      (2) Both pix1 and pix2 are registered to the UL corners.  A warning
+ *          is issued if pix1 and pix2 have different sizes.
+ *      (3) This can also be used to find the fraction of fg pixels in pix1
+ *          that are NOT under the fg of pix2: 1.0 - |1 & 2|/|1|
+ *      (4) If pix1 or pix2 are empty, this returns %fract = 0.0.
+ *      (5) For example, pix2 could be a frame around the outside of the
+ *          image, made from pixMakeFrameMask().
+ * 
+ */ +l_ok +pixFractionFgInMask(PIX *pix1, + PIX *pix2, + l_float32 *pfract) +{ +l_int32 w1, h1, w2, h2, empty, count1, count3; +PIX *pix3; + + PROCNAME("pixFractionFgInMask"); + + if (!pfract) + return ERROR_INT("&fract not defined", procName, 1); + *pfract = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); + + pixGetDimensions(pix1, &w1, &h1, NULL); + pixGetDimensions(pix2, &w2, &h2, NULL); + if (w1 != w2 || h1 != h2) { + L_INFO("sizes unequal: (w1,w2) = (%d,%d), (h1,h2) = (%d,%d)\n", + procName, w1, w2, h1, h2); + } + pixZero(pix1, &empty); + if (empty) return 0; + pixZero(pix2, &empty); + if (empty) return 0; + + pix3 = pixCopy(NULL, pix1); + pixAnd(pix3, pix3, pix2); + pixCountPixels(pix1, &count1, NULL); /* |1| */ + pixCountPixels(pix3, &count3, NULL); /* |1 & 2| */ + *pfract = (l_float32)count3 / (l_float32)count1; + pixDestroy(&pix3); + return 0; +} + + +/*---------------------------------------------------------------------* + * Clip to Foreground * + *---------------------------------------------------------------------*/ +/*! + * \brief pixClipToForeground() + * + * \param[in] pixs 1 bpp + * \param[out] ppixd [optional] clipped pix returned + * \param[out] pbox [optional] bounding box + * \return 0 if OK; 1 on error or if there are no fg pixels + * + *
+ * Notes:
+ *      (1) At least one of {&pixd, &box} must be specified.
+ *      (2) If there are no fg pixels, the returned ptrs are null.
+ * 
+ */ +l_ok +pixClipToForeground(PIX *pixs, + PIX **ppixd, + BOX **pbox) +{ +l_int32 w, h, wpl, nfullwords, extra, i, j; +l_int32 minx, miny, maxx, maxy; +l_uint32 result, mask; +l_uint32 *data, *line; +BOX *box; + + PROCNAME("pixClipToForeground"); + + if (ppixd) *ppixd = NULL; + if (pbox) *pbox = NULL; + if (!ppixd && !pbox) + return ERROR_INT("no output requested", procName, 1); + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + nfullwords = w / 32; + extra = w & 31; + mask = ~rmask32[32 - extra]; + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + + result = 0; + for (i = 0, miny = 0; i < h; i++, miny++) { + line = data + i * wpl; + for (j = 0; j < nfullwords; j++) + result |= line[j]; + if (extra) + result |= (line[j] & mask); + if (result) + break; + } + if (miny == h) /* no ON pixels */ + return 1; + + result = 0; + for (i = h - 1, maxy = h - 1; i >= 0; i--, maxy--) { + line = data + i * wpl; + for (j = 0; j < nfullwords; j++) + result |= line[j]; + if (extra) + result |= (line[j] & mask); + if (result) + break; + } + + minx = 0; + for (j = 0, minx = 0; j < w; j++, minx++) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (GET_DATA_BIT(line, j)) + goto minx_found; + } + } + +minx_found: + for (j = w - 1, maxx = w - 1; j >= 0; j--, maxx--) { + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (GET_DATA_BIT(line, j)) + goto maxx_found; + } + } + +maxx_found: + box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); + + if (ppixd) + *ppixd = pixClipRectangle(pixs, box, NULL); + if (pbox) + *pbox = box; + else + boxDestroy(&box); + + return 0; +} + + +/*! + * \brief pixTestClipToForeground() + * + * \param[in] pixs 1 bpp + * \param[out] pcanclip 1 if fg does not extend to all four edges + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is a lightweight test to determine if a 1 bpp image
+ *          can be further cropped without loss of fg pixels.
+ *          If it cannot, canclip is set to 0.
+ *      (2) It does not test for the existence of any fg pixels.
+ *          If there are no fg pixels, it will return %canclip = 1.
+ *          Check the output of the subsequent call to pixClipToForeground().
+ * 
+ */ +l_ok +pixTestClipToForeground(PIX *pixs, + l_int32 *pcanclip) +{ +l_int32 i, j, w, h, wpl, found; +l_uint32 *data, *line; + + PROCNAME("pixTestClipToForeground"); + + if (!pcanclip) + return ERROR_INT("&canclip not defined", procName, 1); + *pcanclip = 0; + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + /* Check top and bottom raster lines */ + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + found = FALSE; + for (j = 0; found == FALSE && j < w; j++) + found = GET_DATA_BIT(data, j); + if (!found) { + *pcanclip = 1; + return 0; + } + + line = data + (h - 1) * wpl; + found = FALSE; + for (j = 0; found == FALSE && j < w; j++) + found = GET_DATA_BIT(data, j); + if (!found) { + *pcanclip = 1; + return 0; + } + + /* Check left and right edges */ + found = FALSE; + for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) + found = GET_DATA_BIT(line, 0); + if (!found) { + *pcanclip = 1; + return 0; + } + + found = FALSE; + for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) + found = GET_DATA_BIT(line, w - 1); + if (!found) + *pcanclip = 1; + + return 0; /* fg pixels found on all edges */ +} + + +/*! + * \brief pixClipBoxToForeground() + * + * \param[in] pixs 1 bpp + * \param[in] boxs [optional] use full image if null + * \param[out] ppixd [optional] clipped pix returned + * \param[out] pboxd [optional] bounding box + * \return 0 if OK; 1 on error or if there are no fg pixels + * + *
+ * Notes:
+ *      (1) At least one of {&pixd, &boxd} must be specified.
+ *      (2) If there are no fg pixels, the returned ptrs are null.
+ *      (3) Do not use &pixs for the 3rd arg or &boxs for the 4th arg;
+ *          this will leak memory.
+ * 
+ */ +l_ok +pixClipBoxToForeground(PIX *pixs, + BOX *boxs, + PIX **ppixd, + BOX **pboxd) +{ +l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; +BOX *boxt, *boxd; + + PROCNAME("pixClipBoxToForeground"); + + if (ppixd) *ppixd = NULL; + if (pboxd) *pboxd = NULL; + if (!ppixd && !pboxd) + return ERROR_INT("no output requested", procName, 1); + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + if (!boxs) + return pixClipToForeground(pixs, ppixd, pboxd); + + pixGetDimensions(pixs, &w, &h, NULL); + boxGetGeometry(boxs, &bx, &by, &bw, &bh); + cbw = L_MIN(bw, w - bx); + cbh = L_MIN(bh, h - by); + if (cbw < 0 || cbh < 0) + return ERROR_INT("box not within image", procName, 1); + boxt = boxCreate(bx, by, cbw, cbh); + + if (pixScanForForeground(pixs, boxt, L_FROM_LEFT, &left)) { + boxDestroy(&boxt); + return 1; + } + pixScanForForeground(pixs, boxt, L_FROM_RIGHT, &right); + pixScanForForeground(pixs, boxt, L_FROM_TOP, &top); + pixScanForForeground(pixs, boxt, L_FROM_BOT, &bottom); + + boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); + if (ppixd) + *ppixd = pixClipRectangle(pixs, boxd, NULL); + if (pboxd) + *pboxd = boxd; + else + boxDestroy(&boxd); + + boxDestroy(&boxt); + return 0; +} + + +/*! + * \brief pixScanForForeground() + * + * \param[in] pixs 1 bpp + * \param[in] box [optional] within which the search is conducted + * \param[in] scanflag direction of scan; e.g., L_FROM_LEFT + * \param[out] ploc location in scan direction of first black pixel + * \return 0 if OK; 1 on error or if no fg pixels are found + * + *
+ * Notes:
+ *      (1) If there are no fg pixels, the position is set to 0.
+ *          Caller must check the return value!
+ *      (2) Use %box == NULL to scan from edge of pixs
+ * 
+ */ +l_ok +pixScanForForeground(PIX *pixs, + BOX *box, + l_int32 scanflag, + l_int32 *ploc) +{ +l_int32 bx, by, bw, bh, x, xstart, xend, y, ystart, yend, wpl; +l_uint32 *data, *line; +BOX *boxt; + + PROCNAME("pixScanForForeground"); + + if (!ploc) + return ERROR_INT("&loc not defined", procName, 1); + *ploc = 0; + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + /* Clip box to pixs if it exists */ + pixGetDimensions(pixs, &bw, &bh, NULL); + if (box) { + if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) + return ERROR_INT("invalid box", procName, 1); + boxGetGeometry(boxt, &bx, &by, &bw, &bh); + boxDestroy(&boxt); + } else { + bx = by = 0; + } + xstart = bx; + ystart = by; + xend = bx + bw - 1; + yend = by + bh - 1; + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + if (scanflag == L_FROM_LEFT) { + for (x = xstart; x <= xend; x++) { + for (y = ystart; y <= yend; y++) { + line = data + y * wpl; + if (GET_DATA_BIT(line, x)) { + *ploc = x; + return 0; + } + } + } + } else if (scanflag == L_FROM_RIGHT) { + for (x = xend; x >= xstart; x--) { + for (y = ystart; y <= yend; y++) { + line = data + y * wpl; + if (GET_DATA_BIT(line, x)) { + *ploc = x; + return 0; + } + } + } + } else if (scanflag == L_FROM_TOP) { + for (y = ystart; y <= yend; y++) { + line = data + y * wpl; + for (x = xstart; x <= xend; x++) { + if (GET_DATA_BIT(line, x)) { + *ploc = y; + return 0; + } + } + } + } else if (scanflag == L_FROM_BOT) { + for (y = yend; y >= ystart; y--) { + line = data + y * wpl; + for (x = xstart; x <= xend; x++) { + if (GET_DATA_BIT(line, x)) { + *ploc = y; + return 0; + } + } + } + } else { + return ERROR_INT("invalid scanflag", procName, 1); + } + + return 1; /* no fg found */ +} + + +/*! + * \brief pixClipBoxToEdges() + * + * \param[in] pixs 1 bpp + * \param[in] boxs [optional] ; use full image if null + * \param[in] lowthresh threshold to choose clipping location + * \param[in] highthresh threshold required to find an edge + * \param[in] maxwidth max allowed width between low and high thresh locs + * \param[in] factor sampling factor along pixel counting direction + * \param[out] ppixd [optional] clipped pix returned + * \param[out] pboxd [optional] bounding box + * \return 0 if OK; 1 on error or if a fg edge is not found from + * all four sides. + * + *
+ * Notes:
+ *      (1) At least one of {&pixd, &boxd} must be specified.
+ *      (2) If there are no fg pixels, the returned ptrs are null.
+ *      (3) This function attempts to locate rectangular "image" regions
+ *          of high-density fg pixels, that have well-defined edges
+ *          on the four sides.
+ *      (4) Edges are searched for on each side, iterating in order
+ *          from left, right, top and bottom.  As each new edge is
+ *          found, the search box is resized to use that location.
+ *          Once an edge is found, it is held.  If no more edges
+ *          are found in one iteration, the search fails.
+ *      (5) See pixScanForEdge() for usage of the thresholds and %maxwidth.
+ *      (6) The thresholds must be at least 1, and the low threshold
+ *          cannot be larger than the high threshold.
+ *      (7) If the low and high thresholds are both 1, this is equivalent
+ *          to pixClipBoxToForeground().
+ * 
+ */ +l_ok +pixClipBoxToEdges(PIX *pixs, + BOX *boxs, + l_int32 lowthresh, + l_int32 highthresh, + l_int32 maxwidth, + l_int32 factor, + PIX **ppixd, + BOX **pboxd) +{ +l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; +l_int32 lfound, rfound, tfound, bfound, change; +BOX *boxt, *boxd; + + PROCNAME("pixClipBoxToEdges"); + + if (ppixd) *ppixd = NULL; + if (pboxd) *pboxd = NULL; + if (!ppixd && !pboxd) + return ERROR_INT("no output requested", procName, 1); + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (lowthresh < 1 || highthresh < 1 || + lowthresh > highthresh || maxwidth < 1) + return ERROR_INT("invalid thresholds", procName, 1); + factor = L_MIN(1, factor); + + if (lowthresh == 1 && highthresh == 1) + return pixClipBoxToForeground(pixs, boxs, ppixd, pboxd); + + pixGetDimensions(pixs, &w, &h, NULL); + if (boxs) { + boxGetGeometry(boxs, &bx, &by, &bw, &bh); + cbw = L_MIN(bw, w - bx); + cbh = L_MIN(bh, h - by); + if (cbw < 0 || cbh < 0) + return ERROR_INT("box not within image", procName, 1); + boxt = boxCreate(bx, by, cbw, cbh); + } else { + boxt = boxCreate(0, 0, w, h); + } + + lfound = rfound = tfound = bfound = 0; + while (!lfound || !rfound || !tfound || !bfound) { + change = 0; + if (!lfound) { + if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, + factor, L_FROM_LEFT, &left)) { + lfound = 1; + change = 1; + boxRelocateOneSide(boxt, boxt, left, L_FROM_LEFT); + } + } + if (!rfound) { + if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, + factor, L_FROM_RIGHT, &right)) { + rfound = 1; + change = 1; + boxRelocateOneSide(boxt, boxt, right, L_FROM_RIGHT); + } + } + if (!tfound) { + if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, + factor, L_FROM_TOP, &top)) { + tfound = 1; + change = 1; + boxRelocateOneSide(boxt, boxt, top, L_FROM_TOP); + } + } + if (!bfound) { + if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, + factor, L_FROM_BOT, &bottom)) { + bfound = 1; + change = 1; + boxRelocateOneSide(boxt, boxt, bottom, L_FROM_BOT); + } + } + +#if DEBUG_EDGES + fprintf(stderr, "iter: %d %d %d %d\n", lfound, rfound, tfound, bfound); +#endif /* DEBUG_EDGES */ + + if (change == 0) break; + } + boxDestroy(&boxt); + + if (change == 0) + return ERROR_INT("not all edges found", procName, 1); + + boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); + if (ppixd) + *ppixd = pixClipRectangle(pixs, boxd, NULL); + if (pboxd) + *pboxd = boxd; + else + boxDestroy(&boxd); + + return 0; +} + + +/*! + * \brief pixScanForEdge() + * + * \param[in] pixs 1 bpp + * \param[in] box [optional] within which the search is conducted + * \param[in] lowthresh threshold to choose clipping location + * \param[in] highthresh threshold required to find an edge + * \param[in] maxwidth max allowed width between low and high thresh locs + * \param[in] factor sampling factor along pixel counting direction + * \param[in] scanflag direction of scan; e.g., L_FROM_LEFT + * \param[out] ploc location in scan direction of first black pixel + * \return 0 if OK; 1 on error or if the edge is not found + * + *
+ * Notes:
+ *      (1) If there are no fg pixels, the position is set to 0.
+ *          Caller must check the return value!
+ *      (2) Use %box == NULL to scan from edge of pixs
+ *      (3) As the scan progresses, the location where the sum of
+ *          pixels equals or excees %lowthresh is noted (loc).  The
+ *          scan is stopped when the sum of pixels equals or exceeds
+ *          %highthresh.  If the scan distance between loc and that
+ *          point does not exceed %maxwidth, an edge is found and
+ *          its position is taken to be loc.  %maxwidth implicitly
+ *          sets a minimum on the required gradient of the edge.
+ *      (4) The thresholds must be at least 1, and the low threshold
+ *          cannot be larger than the high threshold.
+ * 
+ */ +l_ok +pixScanForEdge(PIX *pixs, + BOX *box, + l_int32 lowthresh, + l_int32 highthresh, + l_int32 maxwidth, + l_int32 factor, + l_int32 scanflag, + l_int32 *ploc) +{ +l_int32 bx, by, bw, bh, foundmin, loc, sum, wpl; +l_int32 x, xstart, xend, y, ystart, yend; +l_uint32 *data, *line; +BOX *boxt; + + PROCNAME("pixScanForEdge"); + + if (!ploc) + return ERROR_INT("&ploc not defined", procName, 1); + *ploc = 0; + if (!pixs || (pixGetDepth(pixs) != 1)) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (lowthresh < 1 || highthresh < 1 || + lowthresh > highthresh || maxwidth < 1) + return ERROR_INT("invalid thresholds", procName, 1); + factor = L_MIN(1, factor); + + /* Clip box to pixs if it exists */ + pixGetDimensions(pixs, &bw, &bh, NULL); + if (box) { + if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) + return ERROR_INT("invalid box", procName, 1); + boxGetGeometry(boxt, &bx, &by, &bw, &bh); + boxDestroy(&boxt); + } else { + bx = by = 0; + } + xstart = bx; + ystart = by; + xend = bx + bw - 1; + yend = by + bh - 1; + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + foundmin = 0; + if (scanflag == L_FROM_LEFT) { + for (x = xstart; x <= xend; x++) { + sum = 0; + for (y = ystart; y <= yend; y += factor) { + line = data + y * wpl; + if (GET_DATA_BIT(line, x)) + sum++; + } + if (!foundmin && sum < lowthresh) + continue; + if (!foundmin) { /* save the loc of the beginning of the edge */ + foundmin = 1; + loc = x; + } + if (sum >= highthresh) { +#if DEBUG_EDGES + fprintf(stderr, "Left: x = %d, loc = %d\n", x, loc); +#endif /* DEBUG_EDGES */ + if (x - loc < maxwidth) { + *ploc = loc; + return 0; + } else { + return 1; + } + } + } + } else if (scanflag == L_FROM_RIGHT) { + for (x = xend; x >= xstart; x--) { + sum = 0; + for (y = ystart; y <= yend; y += factor) { + line = data + y * wpl; + if (GET_DATA_BIT(line, x)) + sum++; + } + if (!foundmin && sum < lowthresh) + continue; + if (!foundmin) { + foundmin = 1; + loc = x; + } + if (sum >= highthresh) { +#if DEBUG_EDGES + fprintf(stderr, "Right: x = %d, loc = %d\n", x, loc); +#endif /* DEBUG_EDGES */ + if (loc - x < maxwidth) { + *ploc = loc; + return 0; + } else { + return 1; + } + } + } + } else if (scanflag == L_FROM_TOP) { + for (y = ystart; y <= yend; y++) { + sum = 0; + line = data + y * wpl; + for (x = xstart; x <= xend; x += factor) { + if (GET_DATA_BIT(line, x)) + sum++; + } + if (!foundmin && sum < lowthresh) + continue; + if (!foundmin) { + foundmin = 1; + loc = y; + } + if (sum >= highthresh) { +#if DEBUG_EDGES + fprintf(stderr, "Top: y = %d, loc = %d\n", y, loc); +#endif /* DEBUG_EDGES */ + if (y - loc < maxwidth) { + *ploc = loc; + return 0; + } else { + return 1; + } + } + } + } else if (scanflag == L_FROM_BOT) { + for (y = yend; y >= ystart; y--) { + sum = 0; + line = data + y * wpl; + for (x = xstart; x <= xend; x += factor) { + if (GET_DATA_BIT(line, x)) + sum++; + } + if (!foundmin && sum < lowthresh) + continue; + if (!foundmin) { + foundmin = 1; + loc = y; + } + if (sum >= highthresh) { +#if DEBUG_EDGES + fprintf(stderr, "Bottom: y = %d, loc = %d\n", y, loc); +#endif /* DEBUG_EDGES */ + if (loc - y < maxwidth) { + *ploc = loc; + return 0; + } else { + return 1; + } + } + } + } else { + return ERROR_INT("invalid scanflag", procName, 1); + } + + return 1; /* edge not found */ +} + + +/*---------------------------------------------------------------------* + * Extract pixel averages and reversals along lines * + *---------------------------------------------------------------------*/ +/*! + * \brief pixExtractOnLine() + * + * \param[in] pixs 1 bpp or 8 bpp; no colormap + * \param[in] x1, y1 one end point for line + * \param[in] x2, y2 another end pt for line + * \param[in] factor sampling; >= 1 + * \return na of pixel values along line, or NULL on error. + * + *
+ * Notes:
+ *      (1) Input end points are clipped to the pix.
+ *      (2) If the line is either horizontal, or closer to horizontal
+ *          than to vertical, the points will be extracted from left
+ *          to right in the pix.  Likewise, if the line is vertical,
+ *          or closer to vertical than to horizontal, the points will
+ *          be extracted from top to bottom.
+ *      (3) Can be used with numaCountReverals(), for example, to
+ *          characterize the intensity smoothness along a line.
+ * 
+ */ +NUMA * +pixExtractOnLine(PIX *pixs, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 factor) +{ +l_int32 i, w, h, d, xmin, ymin, xmax, ymax, npts, direction; +l_uint32 val; +l_float32 x, y; +l_float64 slope; +NUMA *na; +PTA *pta; + + PROCNAME("pixExtractOnLine"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8) + return (NUMA *)ERROR_PTR("d not 1 or 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (NUMA *)ERROR_PTR("pixs has a colormap", procName, NULL); + if (factor < 1) { + L_WARNING("factor must be >= 1; setting to 1\n", procName); + factor = 1; + } + + /* Clip line to the image */ + x1 = L_MAX(0, L_MIN(x1, w - 1)); + x2 = L_MAX(0, L_MIN(x2, w - 1)); + y1 = L_MAX(0, L_MIN(y1, h - 1)); + y2 = L_MAX(0, L_MIN(y2, h - 1)); + + if (x1 == x2 && y1 == y2) { + pixGetPixel(pixs, x1, y1, &val); + na = numaCreate(1); + numaAddNumber(na, val); + return na; + } + + if (y1 == y2) + direction = L_HORIZONTAL_LINE; + else if (x1 == x2) + direction = L_VERTICAL_LINE; + else + direction = L_OBLIQUE_LINE; + + na = numaCreate(0); + if (direction == L_HORIZONTAL_LINE) { /* plot against x */ + xmin = L_MIN(x1, x2); + xmax = L_MAX(x1, x2); + numaSetParameters(na, xmin, factor); + for (i = xmin; i <= xmax; i += factor) { + pixGetPixel(pixs, i, y1, &val); + numaAddNumber(na, val); + } + } else if (direction == L_VERTICAL_LINE) { /* plot against y */ + ymin = L_MIN(y1, y2); + ymax = L_MAX(y1, y2); + numaSetParameters(na, ymin, factor); + for (i = ymin; i <= ymax; i += factor) { + pixGetPixel(pixs, x1, i, &val); + numaAddNumber(na, val); + } + } else { /* direction == L_OBLIQUE_LINE */ + slope = (l_float64)((y2 - y1) / (x2 - x1)); + if (L_ABS(slope) < 1.0) { /* quasi-horizontal */ + xmin = L_MIN(x1, x2); + xmax = L_MAX(x1, x2); + ymin = (xmin == x1) ? y1 : y2; /* pt that goes with xmin */ + ymax = (ymin == y1) ? y2 : y1; /* pt that goes with xmax */ + pta = generatePtaLine(xmin, ymin, xmax, ymax); + numaSetParameters(na, xmin, (l_float32)factor); + } else { /* quasi-vertical */ + ymin = L_MIN(y1, y2); + ymax = L_MAX(y1, y2); + xmin = (ymin == y1) ? x1 : x2; /* pt that goes with ymin */ + xmax = (xmin == x1) ? x2 : x1; /* pt that goes with ymax */ + pta = generatePtaLine(xmin, ymin, xmax, ymax); + numaSetParameters(na, ymin, (l_float32)factor); + } + npts = ptaGetCount(pta); + for (i = 0; i < npts; i += factor) { + ptaGetPt(pta, i, &x, &y); + pixGetPixel(pixs, (l_int32)x, (l_int32)y, &val); + numaAddNumber(na, val); + } + +#if 0 /* debugging */ + pixPlotAlongPta(pixs, pta, GPLOT_PNG, NULL); +#endif + + ptaDestroy(&pta); + } + + return na; +} + + +/*! + * \brief pixAverageOnLine() + * + * \param[in] pixs 1 bpp or 8 bpp; no colormap + * \param[in] x1, y1 starting pt for line + * \param[in] x2, y2 end pt for line + * \param[in] factor sampling; >= 1 + * \return average of pixel values along line, or NULL on error. + * + *
+ * Notes:
+ *      (1) The line must be either horizontal or vertical, so either
+ *          y1 == y2 (horizontal) or x1 == x2 (vertical).
+ *      (2) If horizontal, x1 must be <= x2.
+ *          If vertical, y1 must be <= y2.
+ *          characterize the intensity smoothness along a line.
+ *      (3) Input end points are clipped to the pix.
+ * 
+ */ +l_float32 +pixAverageOnLine(PIX *pixs, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 factor) +{ +l_int32 i, j, w, h, d, direction, count, wpl; +l_uint32 *data, *line; +l_float32 sum; + + PROCNAME("pixAverageOnLine"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8) + return ERROR_INT("d not 1 or 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs has a colormap", procName, 1); + if (x1 > x2 || y1 > y2) + return ERROR_INT("x1 > x2 or y1 > y2", procName, 1); + + if (y1 == y2) { + x1 = L_MAX(0, x1); + x2 = L_MIN(w - 1, x2); + y1 = L_MAX(0, L_MIN(y1, h - 1)); + direction = L_HORIZONTAL_LINE; + } else if (x1 == x2) { + y1 = L_MAX(0, y1); + y2 = L_MIN(h - 1, y2); + x1 = L_MAX(0, L_MIN(x1, w - 1)); + direction = L_VERTICAL_LINE; + } else { + return ERROR_INT("line neither horiz nor vert", procName, 1); + } + + if (factor < 1) { + L_WARNING("factor must be >= 1; setting to 1\n", procName); + factor = 1; + } + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + sum = 0; + count = 0; + if (direction == L_HORIZONTAL_LINE) { + line = data + y1 * wpl; + for (j = x1, count = 0; j <= x2; count++, j += factor) { + if (d == 1) + sum += GET_DATA_BIT(line, j); + else /* d == 8 */ + sum += GET_DATA_BYTE(line, j); + } + } else if (direction == L_VERTICAL_LINE) { + for (i = y1, count = 0; i <= y2; count++, i += factor) { + line = data + i * wpl; + if (d == 1) + sum += GET_DATA_BIT(line, x1); + else /* d == 8 */ + sum += GET_DATA_BYTE(line, x1); + } + } + + return sum / (l_float32)count; +} + + +/*! + * \brief pixAverageIntensityProfile() + * + * \param[in] pixs any depth; colormap OK + * \param[in] fract fraction of image width or height to be used + * \param[in] dir averaging direction: L_HORIZONTAL_LINE or + * L_VERTICAL_LINE + * \param[in] first, last span of rows or columns to measure + * \param[in] factor1 sampling along fast scan direction; >= 1 + * \param[in] factor2 sampling along slow scan direction; >= 1 + * \return na of reversal profile, or NULL on error. + * + *
+ * Notes:
+ *      (1) If d != 1 bpp, colormaps are removed and the result
+ *          is converted to 8 bpp.
+ *      (2) If %dir == L_HORIZONTAL_LINE, the intensity is averaged
+ *          along each horizontal raster line (sampled by %factor1),
+ *          and the profile is the array of these averages in the
+ *          vertical direction between %first and %last raster lines,
+ *          and sampled by %factor2.
+ *      (3) If %dir == L_VERTICAL_LINE, the intensity is averaged
+ *          along each vertical line (sampled by %factor1),
+ *          and the profile is the array of these averages in the
+ *          horizontal direction between %first and %last columns,
+ *          and sampled by %factor2.
+ *      (4) The averages are measured over the central %fract of the image.
+ *          Use %fract == 1.0 to average across the entire width or height.
+ * 
+ */ +NUMA * +pixAverageIntensityProfile(PIX *pixs, + l_float32 fract, + l_int32 dir, + l_int32 first, + l_int32 last, + l_int32 factor1, + l_int32 factor2) +{ +l_int32 i, j, w, h, d, start, end; +l_float32 ave; +NUMA *nad; +PIX *pixr, *pixg; + + PROCNAME("pixAverageIntensityProfile"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (fract < 0.0 || fract > 1.0) + return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", procName, NULL); + if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) + return (NUMA *)ERROR_PTR("invalid direction", procName, NULL); + if (first < 0) first = 0; + if (last < first) + return (NUMA *)ERROR_PTR("last must be >= first", procName, NULL); + if (factor1 < 1) { + L_WARNING("factor1 must be >= 1; setting to 1\n", procName); + factor1 = 1; + } + if (factor2 < 1) { + L_WARNING("factor2 must be >= 1; setting to 1\n", procName); + factor2 = 1; + } + + /* Use 1 or 8 bpp, without colormap */ + if (pixGetColormap(pixs)) + pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixr = pixClone(pixs); + pixGetDimensions(pixr, &w, &h, &d); + if (d == 1) + pixg = pixClone(pixr); + else + pixg = pixConvertTo8(pixr, 0); + + nad = numaCreate(0); /* output: samples in slow scan direction */ + numaSetParameters(nad, 0, factor2); + if (dir == L_HORIZONTAL_LINE) { + start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); + end = w - start; + if (last > h - 1) { + L_WARNING("last > h - 1; clipping\n", procName); + last = h - 1; + } + for (i = first; i <= last; i += factor2) { + ave = pixAverageOnLine(pixg, start, i, end, i, factor1); + numaAddNumber(nad, ave); + } + } else if (dir == L_VERTICAL_LINE) { + start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); + end = h - start; + if (last > w - 1) { + L_WARNING("last > w - 1; clipping\n", procName); + last = w - 1; + } + for (j = first; j <= last; j += factor2) { + ave = pixAverageOnLine(pixg, j, start, j, end, factor1); + numaAddNumber(nad, ave); + } + } + + pixDestroy(&pixr); + pixDestroy(&pixg); + return nad; +} + + +/*! + * \brief pixReversalProfile() + * + * \param[in] pixs any depth; colormap OK + * \param[in] fract fraction of image width or height to be used + * \param[in] dir profile direction: L_HORIZONTAL_LINE or + * L_VERTICAL_LINE + * \param[in] first, last span of rows or columns to measure + * \param[in] minreversal minimum change in intensity to trigger a reversal + * \param[in] factor1 sampling along raster line (fast scan); >= 1 + * \param[in] factor2 sampling of raster lines (slow scan); >= 1 + * \return na of reversal profile, or NULL on error. + * + *
+ * Notes:
+ *      (1) If d != 1 bpp, colormaps are removed and the result
+ *          is converted to 8 bpp.
+ *      (2) If %dir == L_HORIZONTAL_LINE, the the reversals are counted
+ *          along each horizontal raster line (sampled by %factor1),
+ *          and the profile is the array of these sums in the
+ *          vertical direction between %first and %last raster lines,
+ *          and sampled by %factor2.
+ *      (3) If %dir == L_VERTICAL_LINE, the the reversals are counted
+ *          along each vertical column (sampled by %factor1),
+ *          and the profile is the array of these sums in the
+ *          horizontal direction between %first and %last columns,
+ *          and sampled by %factor2.
+ *      (4) For each row or column, the reversals are summed over the
+ *          central %fract of the image.  Use %fract == 1.0 to sum
+ *          across the entire width (of row) or height (of column).
+ *      (5) %minreversal is the relative change in intensity that is
+ *          required to resolve peaks and valleys.  A typical number for
+ *          locating text in 8 bpp might be 50.  For 1 bpp, minreversal
+ *          must be 1.
+ *      (6) The reversal profile is simply the number of reversals
+ *          in a row or column, vs the row or column index.
+ * 
+ */ +NUMA * +pixReversalProfile(PIX *pixs, + l_float32 fract, + l_int32 dir, + l_int32 first, + l_int32 last, + l_int32 minreversal, + l_int32 factor1, + l_int32 factor2) +{ +l_int32 i, j, w, h, d, start, end, nr; +NUMA *naline, *nad; +PIX *pixr, *pixg; + + PROCNAME("pixReversalProfile"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (fract < 0.0 || fract > 1.0) + return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", procName, NULL); + if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) + return (NUMA *)ERROR_PTR("invalid direction", procName, NULL); + if (first < 0) first = 0; + if (last < first) + return (NUMA *)ERROR_PTR("last must be >= first", procName, NULL); + if (factor1 < 1) { + L_WARNING("factor1 must be >= 1; setting to 1\n", procName); + factor1 = 1; + } + if (factor2 < 1) { + L_WARNING("factor2 must be >= 1; setting to 1\n", procName); + factor2 = 1; + } + + /* Use 1 or 8 bpp, without colormap */ + if (pixGetColormap(pixs)) + pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixr = pixClone(pixs); + pixGetDimensions(pixr, &w, &h, &d); + if (d == 1) { + pixg = pixClone(pixr); + minreversal = 1; /* enforce this */ + } else { + pixg = pixConvertTo8(pixr, 0); + } + + nad = numaCreate(0); /* output: samples in slow scan direction */ + numaSetParameters(nad, 0, factor2); + if (dir == L_HORIZONTAL_LINE) { + start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); + end = w - start; + if (last > h - 1) { + L_WARNING("last > h - 1; clipping\n", procName); + last = h - 1; + } + for (i = first; i <= last; i += factor2) { + naline = pixExtractOnLine(pixg, start, i, end, i, factor1); + numaCountReversals(naline, minreversal, &nr, NULL); + numaAddNumber(nad, nr); + numaDestroy(&naline); + } + } else if (dir == L_VERTICAL_LINE) { + start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); + end = h - start; + if (last > w - 1) { + L_WARNING("last > w - 1; clipping\n", procName); + last = w - 1; + } + for (j = first; j <= last; j += factor2) { + naline = pixExtractOnLine(pixg, j, start, j, end, factor1); + numaCountReversals(naline, minreversal, &nr, NULL); + numaAddNumber(nad, nr); + numaDestroy(&naline); + } + } + + pixDestroy(&pixr); + pixDestroy(&pixg); + return nad; +} + + +/*---------------------------------------------------------------------* + * Extract windowed variance along a line * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWindowedVarianceOnLine() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] dir L_HORIZONTAL_LINE or L_VERTICAL_LINE + * \param[in] loc location of the constant coordinate for the line + * \param[in] c1, c2 end point coordinates for the line + * \param[in] size window size; must be > 1 + * \param[out] pnad windowed square root of variance + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The returned variance array traverses the line starting
+ *          from the smallest coordinate, min(c1,c2).
+ *      (2) Line end points are clipped to pixs.
+ *      (3) The reference point for the variance calculation is the center of
+ *          the window.  Therefore, the numa start parameter from
+ *          pixExtractOnLine() is incremented by %size/2,
+ *          to align the variance values with the pixel coordinate.
+ *      (4) The square root of the variance is the RMS deviation from the mean.
+ * 
+ */ +l_ok +pixWindowedVarianceOnLine(PIX *pixs, + l_int32 dir, + l_int32 loc, + l_int32 c1, + l_int32 c2, + l_int32 size, + NUMA **pnad) +{ +l_int32 i, j, w, h, cmin, cmax, maxloc, n, x, y; +l_uint32 val; +l_float32 norm, rootvar; +l_float32 *array; +l_float64 sum1, sum2, ave, var; +NUMA *na1, *nad; +PTA *pta; + + PROCNAME("pixWindowedVarianceOnLine"); + + if (!pnad) + return ERROR_INT("&nad not defined", procName, 1); + *pnad = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8bpp", procName, 1); + if (size < 2) + return ERROR_INT("window size must be > 1", procName, 1); + if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) + return ERROR_INT("invalid direction", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + maxloc = (dir == L_HORIZONTAL_LINE) ? h - 1 : w - 1; + if (loc < 0 || loc > maxloc) + return ERROR_INT("invalid line position", procName, 1); + + /* Clip line to the image */ + cmin = L_MIN(c1, c2); + cmax = L_MAX(c1, c2); + maxloc = (dir == L_HORIZONTAL_LINE) ? w - 1 : h - 1; + cmin = L_MAX(0, L_MIN(cmin, maxloc)); + cmax = L_MAX(0, L_MIN(cmax, maxloc)); + n = cmax - cmin + 1; + + /* Generate pta along the line */ + pta = ptaCreate(n); + if (dir == L_HORIZONTAL_LINE) { + for (i = cmin; i <= cmax; i++) + ptaAddPt(pta, i, loc); + } else { /* vertical line */ + for (i = cmin; i <= cmax; i++) + ptaAddPt(pta, loc, i); + } + + /* Get numa of pixel values on the line */ + na1 = numaCreate(n); + numaSetParameters(na1, cmin, 1); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + pixGetPixel(pixs, x, y, &val); + numaAddNumber(na1, val); + } + array = numaGetFArray(na1, L_NOCOPY); + ptaDestroy(&pta); + + /* Compute root variance on overlapping windows */ + nad = numaCreate(n); + *pnad = nad; + numaSetParameters(nad, cmin + size / 2, 1); + norm = 1.0 / (l_float32)size; + for (i = 0; i < n - size; i++) { /* along the line */ + sum1 = sum2 = 0; + for (j = 0; j < size; j++) { /* over the window */ + val = array[i + j]; + sum1 += val; + sum2 += (l_float64)(val) * val; + } + ave = norm * sum1; + var = norm * sum2 - ave * ave; + rootvar = (l_float32)sqrt(var); + numaAddNumber(nad, rootvar); + } + + numaDestroy(&na1); + return 0; +} + + +/*---------------------------------------------------------------------* + * Extract min/max of pixel values near lines * + *---------------------------------------------------------------------*/ +/*! + * \brief pixMinMaxNearLine() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] x1, y1 starting pt for line + * \param[in] x2, y2 end pt for line + * \param[in] dist distance to search from line in each direction + * \param[in] direction L_SCAN_NEGATIVE, L_SCAN_POSITIVE, L_SCAN_BOTH + * \param[out] pnamin [optional] minimum values + * \param[out] pnamax [optional] maximum values + * \param[out] pminave [optional] average of minimum values + * \param[out] pmaxave [optional] average of maximum values + * \return 0 if OK; 1 on error or if there are no sampled points + * within the image. + * + *
+ * Notes:
+ *      (1) If the line is more horizontal than vertical, the values
+ *          are computed for [x1, x2], and the pixels are taken
+ *          below and/or above the local y-value.  Otherwise, the
+ *          values are computed for [y1, y2] and the pixels are taken
+ *          to the left and/or right of the local x value.
+ *      (2) %direction specifies which side (or both sides) of the
+ *          line are scanned for min and max values.
+ *      (3) There are two ways to tell if the returned values of min
+ *          and max averages are valid: the returned values cannot be
+ *          negative and the function must return 0.
+ *      (4) All accessed pixels are clipped to the pix.
+ * 
+ */ +l_ok +pixMinMaxNearLine(PIX *pixs, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2, + l_int32 dist, + l_int32 direction, + NUMA **pnamin, + NUMA **pnamax, + l_float32 *pminave, + l_float32 *pmaxave) +{ +l_int32 i, j, w, h, d, x, y, n, dir, found, minval, maxval, negloc, posloc; +l_uint32 val; +l_float32 sum; +NUMA *namin, *namax; +PTA *pta; + + PROCNAME("pixMinMaxNearLine"); + + if (pnamin) *pnamin = NULL; + if (pnamax) *pnamax = NULL; + if (pminave) *pminave = UNDEF; + if (pmaxave) *pmaxave = UNDEF; + if (!pnamin && !pnamax && !pminave && !pmaxave) + return ERROR_INT("no output requested", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 || pixGetColormap(pixs)) + return ERROR_INT("pixs not 8 bpp or has colormap", procName, 1); + dist = L_ABS(dist); + if (direction != L_SCAN_NEGATIVE && direction != L_SCAN_POSITIVE && + direction != L_SCAN_BOTH) + return ERROR_INT("invalid direction", procName, 1); + + pta = generatePtaLine(x1, y1, x2, y2); + n = ptaGetCount(pta); + dir = (L_ABS(x1 - x2) == n - 1) ? L_HORIZ : L_VERT; + namin = numaCreate(n); + namax = numaCreate(n); + negloc = -dist; + posloc = dist; + if (direction == L_SCAN_NEGATIVE) + posloc = 0; + else if (direction == L_SCAN_POSITIVE) + negloc = 0; + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + minval = 255; + maxval = 0; + found = FALSE; + if (dir == L_HORIZ) { + if (x < 0 || x >= w) continue; + for (j = negloc; j <= posloc; j++) { + if (y + j < 0 || y + j >= h) continue; + pixGetPixel(pixs, x, y + j, &val); + found = TRUE; + if (val < minval) minval = val; + if (val > maxval) maxval = val; + } + } else { /* dir == L_VERT */ + if (y < 0 || y >= h) continue; + for (j = negloc; j <= posloc; j++) { + if (x + j < 0 || x + j >= w) continue; + pixGetPixel(pixs, x + j, y, &val); + found = TRUE; + if (val < minval) minval = val; + if (val > maxval) maxval = val; + } + } + if (found) { + numaAddNumber(namin, minval); + numaAddNumber(namax, maxval); + } + } + + n = numaGetCount(namin); + if (n == 0) { + numaDestroy(&namin); + numaDestroy(&namax); + ptaDestroy(&pta); + return ERROR_INT("no output from this line", procName, 1); + } + + if (pminave) { + numaGetSum(namin, &sum); + *pminave = sum / n; + } + if (pmaxave) { + numaGetSum(namax, &sum); + *pmaxave = sum / n; + } + if (pnamin) + *pnamin = namin; + else + numaDestroy(&namin); + if (pnamax) + *pnamax = namax; + else + numaDestroy(&namax); + ptaDestroy(&pta); + return 0; +} + + +/*---------------------------------------------------------------------* + * Rank row and column transforms * + *---------------------------------------------------------------------*/ +/*! + * \brief pixRankRowTransform() + * + * \param[in] pixs 8 bpp; no colormap + * \return pixd with pixels sorted in each row, from + * min to max value + * + *
+ * Notes:
+ *     (1) The time is O(n) in the number of pixels and runs about
+ *         100 Mpixels/sec on a 3 GHz machine.
+ * 
+ */ +PIX * +pixRankRowTransform(PIX *pixs) +{ +l_int32 i, j, k, m, w, h, wpl, val; +l_int32 histo[256]; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixRankRowTransform"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has a colormap", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + memset(histo, 0, 1024); + lines = datas + i * wpl; + lined = datad + i * wpl; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + histo[val]++; + } + for (m = 0, j = 0; m < 256; m++) { + for (k = 0; k < histo[m]; k++, j++) + SET_DATA_BYTE(lined, j, m); + } + } + + return pixd; +} + + +/*! + * \brief pixRankColumnTransform() + * + * \param[in] pixs 8 bpp; no colormap + * \return pixd with pixels sorted in each column, from + * min to max value + * + *
+ * Notes:
+ *     (1) The time is O(n) in the number of pixels and runs about
+ *         50 Mpixels/sec on a 3 GHz machine.
+ * 
+ */ +PIX * +pixRankColumnTransform(PIX *pixs) +{ +l_int32 i, j, k, m, w, h, val; +l_int32 histo[256]; +void **lines8, **lined8; +PIX *pixd; + + PROCNAME("pixRankColumnTransform"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has a colormap", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreateTemplate(pixs); + lines8 = pixGetLinePtrs(pixs, NULL); + lined8 = pixGetLinePtrs(pixd, NULL); + for (j = 0; j < w; j++) { + memset(histo, 0, 1024); + for (i = 0; i < h; i++) { + val = GET_DATA_BYTE(lines8[i], j); + histo[val]++; + } + for (m = 0, i = 0; m < 256; m++) { + for (k = 0; k < histo[m]; k++, i++) + SET_DATA_BYTE(lined8[i], j, m); + } + } + + LEPT_FREE(lines8); + LEPT_FREE(lined8); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/pixabasic.c b/3rdparty/hgOCR/leptonica/pixabasic.c new file mode 100644 index 00000000..007550de --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixabasic.c @@ -0,0 +1,3243 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + /*! + * \file pixabasic.c + *
+  *
+  *      Pixa creation, destruction, copying
+  *           PIXA     *pixaCreate()
+  *           PIXA     *pixaCreateFromPix()
+  *           PIXA     *pixaCreateFromBoxa()
+  *           PIXA     *pixaSplitPix()
+  *           void      pixaDestroy()
+  *           PIXA     *pixaCopy()
+  *
+  *      Pixa addition
+  *           l_int32   pixaAddPix()
+  *           l_int32   pixaAddBox()
+  *           static l_int32   pixaExtendArray()
+  *           l_int32   pixaExtendArrayToSize()
+  *
+  *      Pixa accessors
+  *           l_int32   pixaGetCount()
+  *           l_int32   pixaChangeRefcount()
+  *           PIX      *pixaGetPix()
+  *           l_int32   pixaGetPixDimensions()
+  *           BOXA     *pixaGetBoxa()
+  *           l_int32   pixaGetBoxaCount()
+  *           BOX      *pixaGetBox()
+  *           l_int32   pixaGetBoxGeometry()
+  *           l_int32   pixaSetBoxa()
+  *           PIX     **pixaGetPixArray()
+  *           l_int32   pixaVerifyDepth()
+  *           l_int32   pixaVerifyDimensions()
+  *           l_int32   pixaIsFull()
+  *           l_int32   pixaCountText()
+  *           l_int32   pixaSetText()
+  *           void   ***pixaGetLinePtrs()
+  *
+  *      Pixa output info
+  *           l_int32   pixaWriteStreamInfo()
+  *
+  *      Pixa array modifiers
+  *           l_int32   pixaReplacePix()
+  *           l_int32   pixaInsertPix()
+  *           l_int32   pixaRemovePix()
+  *           l_int32   pixaRemovePixAndSave()
+  *           l_int32   pixaRemoveSelected()
+  *           l_int32   pixaInitFull()
+  *           l_int32   pixaClear()
+  *
+  *      Pixa and Pixaa combination
+  *           l_int32   pixaJoin()
+  *           PIXA     *pixaInterleave()
+  *           l_int32   pixaaJoin()
+  *
+  *      Pixaa creation, destruction
+  *           PIXAA    *pixaaCreate()
+  *           PIXAA    *pixaaCreateFromPixa()
+  *           void      pixaaDestroy()
+  *
+  *      Pixaa addition
+  *           l_int32   pixaaAddPixa()
+  *           l_int32   pixaaExtendArray()
+  *           l_int32   pixaaAddPix()
+  *           l_int32   pixaaAddBox()
+  *
+  *      Pixaa accessors
+  *           l_int32   pixaaGetCount()
+  *           PIXA     *pixaaGetPixa()
+  *           BOXA     *pixaaGetBoxa()
+  *           PIX      *pixaaGetPix()
+  *           l_int32   pixaaVerifyDepth()
+  *           l_int32   pixaaVerifyDimensions()
+  *           l_int32   pixaaIsFull()
+  *
+  *      Pixaa array modifiers
+  *           l_int32   pixaaInitFull()
+  *           l_int32   pixaaReplacePixa()
+  *           l_int32   pixaaClear()
+  *           l_int32   pixaaTruncate()
+  *
+  *      Pixa serialized I/O  (requires png support)
+  *           PIXA     *pixaRead()
+  *           PIXA     *pixaReadStream()
+  *           PIXA     *pixaReadMem()
+  *           l_int32   pixaWriteDebug()
+  *           l_int32   pixaWrite()
+  *           l_int32   pixaWriteStream()
+  *           l_int32   pixaWriteMem()
+  *           PIXA     *pixaReadBoth()
+  *
+  *      Pixaa serialized I/O  (requires png support)
+  *           PIXAA    *pixaaReadFromFiles()
+  *           PIXAA    *pixaaRead()
+  *           PIXAA    *pixaaReadStream()
+  *           PIXAA    *pixaaReadMem()
+  *           l_int32   pixaaWrite()
+  *           l_int32   pixaaWriteStream()
+  *           l_int32   pixaaWriteMem()
+  *
+  *
+  *   Important note on reference counting:
+  *     Reference counting for the Pixa is analogous to that for the Boxa.
+  *     See pix.h for details.   pixaCopy() provides three possible modes
+  *     of copy.  The basic rule is that however a Pixa is obtained
+  *     (e.g., from pixaCreate*(), pixaCopy(), or a Pixaa accessor),
+  *     it is necessary to call pixaDestroy() on it.
+  * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 pixaExtendArray(PIXA *pixa); + +/*---------------------------------------------------------------------* + * Pixa creation, destruction, copy * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaCreate() + * + * \param[in] n initial number of ptrs + * \return pixa, or NULL on error + * + *
+  * Notes:
+  *      (1) This creates an empty boxa.
+  * 
+ */ +PIXA * +pixaCreate(l_int32 n) +{ + PIXA *pixa; + + PROCNAME("pixaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + pixa = (PIXA *)LEPT_CALLOC(1, sizeof(PIXA)); + pixa->n = 0; + pixa->nalloc = n; + pixa->refcount = 1; + pixa->pix = (PIX **)LEPT_CALLOC(n, sizeof(PIX *)); + pixa->boxa = boxaCreate(n); + if (!pixa->pix || !pixa->boxa) { + pixaDestroy(&pixa); + return (PIXA *)ERROR_PTR("pix or boxa not made", procName, NULL); + } + return pixa; +} + + +/*! + * \brief pixaCreateFromPix() + * + * \param[in] pixs with individual components on a lattice + * \param[in] n number of components + * \param[in] cellw width of each cell + * \param[in] cellh height of each cell + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) For bpp = 1, we truncate each retrieved pix to the ON
+ *          pixels, which we assume for now start at (0,0)
+ * 
+ */ +PIXA * +pixaCreateFromPix(PIX *pixs, + l_int32 n, + l_int32 cellw, + l_int32 cellh) +{ + l_int32 w, h, d, nw, nh, i, j, index; + PIX *pix1, *pix2; + PIXA *pixa; + + PROCNAME("pixaCreateFromPix"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (n <= 0) + return (PIXA *)ERROR_PTR("n must be > 0", procName, NULL); + + if ((pixa = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if ((pix1 = pixCreate(cellw, cellh, d)) == NULL) { + pixaDestroy(&pixa); + return (PIXA *)ERROR_PTR("pix1 not made", procName, NULL); + } + + nw = (w + cellw - 1) / cellw; + nh = (h + cellh - 1) / cellh; + for (i = 0, index = 0; i < nh; i++) { + for (j = 0; j < nw && index < n; j++, index++) { + pixRasterop(pix1, 0, 0, cellw, cellh, PIX_SRC, pixs, + j * cellw, i * cellh); + if (d == 1 && !pixClipToForeground(pix1, &pix2, NULL)) + pixaAddPix(pixa, pix2, L_INSERT); + else + pixaAddPix(pixa, pix1, L_COPY); + } + } + + pixDestroy(&pix1); + return pixa; +} + + +/*! + * \brief pixaCreateFromBoxa() + * + * \param[in] pixs + * \param[in] boxa + * \param[in] start first box to use + * \param[in] num number of boxes; use 0 to go to the end + * \param[out] pcropwarn [optional] TRUE if the boxa extent + * is larger than pixs. + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) This simply extracts from pixs the region corresponding to each
+ *          box in the boxa.  To extract all the regions, set both %start
+ *          and %num to 0.
+ *      (2) The 5th arg is optional.  If the extent of the boxa exceeds the
+ *          size of the pixa, so that some boxes are either clipped
+ *          or entirely outside the pix, a warning is returned as TRUE.
+ *      (3) pixad will have only the properly clipped elements, and
+ *          the internal boxa will be correct.
+ * 
+ */ +PIXA * +pixaCreateFromBoxa(PIX *pixs, + BOXA *boxa, + l_int32 start, + l_int32 num, + l_int32 *pcropwarn) +{ + l_int32 i, n, end, w, h, wbox, hbox, cropwarn; + BOX *box, *boxc; + PIX *pixd; + PIXA *pixad; + + PROCNAME("pixaCreateFromBoxa"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa) + return (PIXA *)ERROR_PTR("boxa not defined", procName, NULL); + if (num < 0) + return (PIXA *)ERROR_PTR("num must be >= 0", procName, NULL); + + n = boxaGetCount(boxa); + end = (num == 0) ? n - 1 : L_MIN(start + num - 1, n - 1); + if ((pixad = pixaCreate(end - start + 1)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + + boxaGetExtent(boxa, &wbox, &hbox, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + cropwarn = FALSE; + if (wbox > w || hbox > h) + cropwarn = TRUE; + if (pcropwarn) + *pcropwarn = cropwarn; + + for (i = start; i <= end; i++) { + box = boxaGetBox(boxa, i, L_COPY); + if (cropwarn) { /* if box is outside pixs, pixd is NULL */ + pixd = pixClipRectangle(pixs, box, &boxc); /* may be NULL */ + if (pixd) { + pixaAddPix(pixad, pixd, L_INSERT); + pixaAddBox(pixad, boxc, L_INSERT); + } + boxDestroy(&box); + } + else { + pixd = pixClipRectangle(pixs, box, NULL); + pixaAddPix(pixad, pixd, L_INSERT); + pixaAddBox(pixad, box, L_INSERT); + } + } + + return pixad; +} + + +/*! + * \brief pixaSplitPix() + * + * \param[in] pixs with individual components on a lattice + * \param[in] nx number of mosaic cells horizontally + * \param[in] ny number of mosaic cells vertically + * \param[in] borderwidth of added border on all sides + * \param[in] bordercolor in our RGBA format: 0xrrggbbaa + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a variant on pixaCreateFromPix(), where we
+ *          simply divide the image up into (approximately) equal
+ *          subunits.  If you want the subimages to have essentially
+ *          the same aspect ratio as the input pix, use nx = ny.
+ *      (2) If borderwidth is 0, we ignore the input bordercolor and
+ *          redefine it to white.
+ *      (3) The bordercolor is always used to initialize each tiled pix,
+ *          so that if the src is clipped, the unblitted part will
+ *          be this color.  This avoids 1 pixel wide black stripes at the
+ *          left and lower edges.
+ * 
+ */ +PIXA * +pixaSplitPix(PIX *pixs, + l_int32 nx, + l_int32 ny, + l_int32 borderwidth, + l_uint32 bordercolor) +{ + l_int32 w, h, d, cellw, cellh, i, j; + PIX *pix1; + PIXA *pixa; + + PROCNAME("pixaSplitPix"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (nx <= 0 || ny <= 0) + return (PIXA *)ERROR_PTR("nx and ny must be > 0", procName, NULL); + borderwidth = L_MAX(0, borderwidth); + + if ((pixa = pixaCreate(nx * ny)) == NULL) + return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + cellw = (w + nx - 1) / nx; /* round up */ + cellh = (h + ny - 1) / ny; + + for (i = 0; i < ny; i++) { + for (j = 0; j < nx; j++) { + if ((pix1 = pixCreate(cellw + 2 * borderwidth, + cellh + 2 * borderwidth, d)) == NULL) { + pixaDestroy(&pixa); + return (PIXA *)ERROR_PTR("pix1 not made", procName, NULL); + } + pixCopyColormap(pix1, pixs); + if (borderwidth == 0) { /* initialize full image to white */ + if (d == 1) + pixClearAll(pix1); + else + pixSetAll(pix1); + } + else { + pixSetAllArbitrary(pix1, bordercolor); + } + pixRasterop(pix1, borderwidth, borderwidth, cellw, cellh, + PIX_SRC, pixs, j * cellw, i * cellh); + pixaAddPix(pixa, pix1, L_INSERT); + } + } + + return pixa; +} + + +/*! + * \brief pixaDestroy() + * + * \param[in,out] ppixa use ptr address so it will be nulled + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the pixa.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +pixaDestroy(PIXA **ppixa) +{ + l_int32 i; + PIXA *pixa; + + PROCNAME("pixaDestroy"); + + if (ppixa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((pixa = *ppixa) == NULL) + return; + + /* Decrement the refcount. If it is 0, destroy the pixa. */ + pixaChangeRefcount(pixa, -1); + if (pixa->refcount <= 0) { + for (i = 0; i < pixa->n; i++) + pixDestroy(&pixa->pix[i]); + LEPT_FREE(pixa->pix); + boxaDestroy(&pixa->boxa); + LEPT_FREE(pixa); + } + + *ppixa = NULL; + return; +} + + +/*! + * \brief pixaCopy() + * + * \param[in] pixa + * \param[in] copyflag see pix.h for details: + * L_COPY makes a new pixa and copies each pix and each box; + * L_CLONE gives a new ref-counted handle to the input pixa; + * L_COPY_CLONE makes a new pixa and inserts clones of + * all pix and boxes + * \return new pixa, or NULL on error + */ +PIXA * +pixaCopy(PIXA *pixa, + l_int32 copyflag) +{ + l_int32 i, nb; + BOX *boxc; + PIX *pixc; + PIXA *pixac; + + PROCNAME("pixaCopy"); + + if (!pixa) + return (PIXA *)ERROR_PTR("pixa not defined", procName, NULL); + + if (copyflag == L_CLONE) { + pixaChangeRefcount(pixa, 1); + return pixa; + } + + if (copyflag != L_COPY && copyflag != L_COPY_CLONE) + return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + if ((pixac = pixaCreate(pixa->n)) == NULL) + return (PIXA *)ERROR_PTR("pixac not made", procName, NULL); + nb = pixaGetBoxaCount(pixa); + for (i = 0; i < pixa->n; i++) { + if (copyflag == L_COPY) { + pixc = pixaGetPix(pixa, i, L_COPY); + if (i < nb) boxc = pixaGetBox(pixa, i, L_COPY); + } + else { /* copy-clone */ + pixc = pixaGetPix(pixa, i, L_CLONE); + if (i < nb) boxc = pixaGetBox(pixa, i, L_CLONE); + } + pixaAddPix(pixac, pixc, L_INSERT); + if (i < nb) pixaAddBox(pixac, boxc, L_INSERT); + } + + return pixac; +} + + + +/*---------------------------------------------------------------------* + * Pixa addition * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaAddPix() + * + * \param[in] pixa + * \param[in] pix to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK; 1 on error + */ +l_ok +pixaAddPix(PIXA *pixa, + PIX *pix, + l_int32 copyflag) +{ + l_int32 n; + PIX *pixc; + + PROCNAME("pixaAddPix"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (copyflag == L_INSERT) + pixc = pix; + else if (copyflag == L_COPY) + pixc = pixCopy(NULL, pix); + else if (copyflag == L_CLONE) + pixc = pixClone(pix); + else + return ERROR_INT("invalid copyflag", procName, 1); + if (!pixc) + return ERROR_INT("pixc not made", procName, 1); + + n = pixaGetCount(pixa); + if (n >= pixa->nalloc) + pixaExtendArray(pixa); + pixa->pix[n] = pixc; + pixa->n++; + + return 0; +} + + +/*! + * \brief pixaAddBox() + * + * \param[in] pixa + * \param[in] box + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +pixaAddBox(PIXA *pixa, + BOX *box, + l_int32 copyflag) +{ + PROCNAME("pixaAddBox"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) + return ERROR_INT("invalid copyflag", procName, 1); + + boxaAddBox(pixa->boxa, box, copyflag); + return 0; +} + + +/*! + * \brief pixaExtendArray() + * + * \param[in] pixa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Doubles the size of the pixa and boxa ptr arrays.
+ * 
+ */ +static l_int32 +pixaExtendArray(PIXA *pixa) +{ + PROCNAME("pixaExtendArray"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + return pixaExtendArrayToSize(pixa, 2 * pixa->nalloc); +} + + +/*! + * \brief pixaExtendArrayToSize() + * + * \param[in] pixa + * \param[in] size + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If necessary, reallocs new pixa and boxa ptrs arrays to %size.
+ *          The pixa and boxa ptr arrays must always be equal in size.
+ * 
+ */ +l_ok +pixaExtendArrayToSize(PIXA *pixa, + l_int32 size) +{ + PROCNAME("pixaExtendArrayToSize"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + if (size > pixa->nalloc) { + if ((pixa->pix = (PIX **)reallocNew((void **)&pixa->pix, + sizeof(PIX *) * pixa->nalloc, + size * sizeof(PIX *))) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + pixa->nalloc = size; + } + return boxaExtendArrayToSize(pixa->boxa, size); +} + + +/*---------------------------------------------------------------------* + * Pixa accessors * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaGetCount() + * + * \param[in] pixa + * \return count, or 0 if no pixa + */ +l_int32 +pixaGetCount(PIXA *pixa) +{ + PROCNAME("pixaGetCount"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 0); + + return pixa->n; +} + + +/*! + * \brief pixaChangeRefcount() + * + * \param[in] pixa + * \param[in] delta + * \return 0 if OK, 1 on error + */ +l_ok +pixaChangeRefcount(PIXA *pixa, + l_int32 delta) +{ + PROCNAME("pixaChangeRefcount"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + pixa->refcount += delta; + return 0; +} + + +/*! + * \brief pixaGetPix() + * + * \param[in] pixa + * \param[in] index to the index-th pix + * \param[in] accesstype L_COPY or L_CLONE + * \return pix, or NULL on error + */ +PIX * +pixaGetPix(PIXA *pixa, + l_int32 index, + l_int32 accesstype) +{ + PIX *pix; + + PROCNAME("pixaGetPix"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (index < 0 || index >= pixa->n) + return (PIX *)ERROR_PTR("index not valid", procName, NULL); + if ((pix = pixa->pix[index]) == NULL) { + L_ERROR("no pix at pixa[%d]\n", procName, index); + return (PIX *)ERROR_PTR("pix not found!", procName, NULL); + } + + if (accesstype == L_COPY) + return pixCopy(NULL, pix); + else if (accesstype == L_CLONE) + return pixClone(pix); + else + return (PIX *)ERROR_PTR("invalid accesstype", procName, NULL); +} + + +/*! + * \brief pixaGetPixDimensions() + * + * \param[in] pixa + * \param[in] index to the index-th box + * \param[out] pw, ph, pd [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixaGetPixDimensions(PIXA *pixa, + l_int32 index, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd) +{ + PIX *pix; + + PROCNAME("pixaGetPixDimensions"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pd) *pd = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (index < 0 || index >= pixa->n) + return ERROR_INT("index not valid", procName, 1); + + if ((pix = pixaGetPix(pixa, index, L_CLONE)) == NULL) + return ERROR_INT("pix not found!", procName, 1); + pixGetDimensions(pix, pw, ph, pd); + pixDestroy(&pix); + return 0; +} + + +/*! + * \brief pixaGetBoxa() + * + * \param[in] pixa + * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE + * \return boxa, or NULL on error + */ +BOXA * +pixaGetBoxa(PIXA *pixa, + l_int32 accesstype) +{ + PROCNAME("pixaGetBoxa"); + + if (!pixa) + return (BOXA *)ERROR_PTR("pixa not defined", procName, NULL); + if (!pixa->boxa) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE && + accesstype != L_COPY_CLONE) + return (BOXA *)ERROR_PTR("invalid accesstype", procName, NULL); + + return boxaCopy(pixa->boxa, accesstype); +} + + +/*! + * \brief pixaGetBoxaCount() + * + * \param[in] pixa + * \return count, or 0 on error + */ +l_int32 +pixaGetBoxaCount(PIXA *pixa) +{ + PROCNAME("pixaGetBoxaCount"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 0); + + return boxaGetCount(pixa->boxa); +} + + +/*! + * \brief pixaGetBox() + * + * \param[in] pixa + * \param[in] index to the index-th pix + * \param[in] accesstype L_COPY or L_CLONE + * \return box if null, not automatically an error, or NULL on error + * + *
+ * Notes:
+ *      (1) There is always a boxa with a pixa, and it is initialized so
+ *          that each box ptr is NULL.
+ *      (2) In general, we expect that there is either a box associated
+ *          with each pix, or no boxes at all in the boxa.
+ *      (3) Having no boxes is thus not an automatic error.  Whether it
+ *          is an actual error is determined by the calling program.
+ *          If the caller expects to get a box, it is an error; see, e.g.,
+ *          pixaGetBoxGeometry().
+ * 
+ */ +BOX * +pixaGetBox(PIXA *pixa, + l_int32 index, + l_int32 accesstype) +{ + BOX *box; + + PROCNAME("pixaGetBox"); + + if (!pixa) + return (BOX *)ERROR_PTR("pixa not defined", procName, NULL); + if (!pixa->boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + if (index < 0 || index >= pixa->boxa->n) + return (BOX *)ERROR_PTR("index not valid", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE) + return (BOX *)ERROR_PTR("invalid accesstype", procName, NULL); + + box = pixa->boxa->box[index]; + if (box) { + if (accesstype == L_COPY) + return boxCopy(box); + else /* accesstype == L_CLONE */ + return boxClone(box); + } + else { + return NULL; + } +} + + +/*! + * \brief pixaGetBoxGeometry() + * + * \param[in] pixa + * \param[in] index to the index-th box + * \param[out] px, py, pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixaGetBoxGeometry(PIXA *pixa, + l_int32 index, + l_int32 *px, + l_int32 *py, + l_int32 *pw, + l_int32 *ph) +{ + BOX *box; + + PROCNAME("pixaGetBoxGeometry"); + + if (px) *px = 0; + if (py) *py = 0; + if (pw) *pw = 0; + if (ph) *ph = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (index < 0 || index >= pixa->n) + return ERROR_INT("index not valid", procName, 1); + + if ((box = pixaGetBox(pixa, index, L_CLONE)) == NULL) + return ERROR_INT("box not found!", procName, 1); + boxGetGeometry(box, px, py, pw, ph); + boxDestroy(&box); + return 0; +} + + +/*! + * \brief pixaSetBoxa() + * + * \param[in] pixa + * \param[in] boxa + * \param[in] accesstype L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys the existing boxa in the pixa.
+ * 
+ */ +l_ok +pixaSetBoxa(PIXA *pixa, + BOXA *boxa, + l_int32 accesstype) +{ + PROCNAME("pixaSetBoxa"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!boxa) + return ERROR_INT("boxa not defined", procName, 1); + if (accesstype != L_INSERT && accesstype != L_COPY && + accesstype != L_CLONE) + return ERROR_INT("invalid access type", procName, 1); + + boxaDestroy(&pixa->boxa); + if (accesstype == L_INSERT) + pixa->boxa = boxa; + else + pixa->boxa = boxaCopy(boxa, accesstype); + + return 0; +} + + +/*! + * \brief pixaGetPixArray() + * + * \param[in] pixa + * \return pix array, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a ptr to the actual array.  The array is
+ *          owned by the pixa, so it must not be destroyed.
+ *      (2) The caller should always check if the return value is NULL
+ *          before accessing any of the pix ptrs in this array!
+ * 
+ */ +PIX ** +pixaGetPixArray(PIXA *pixa) +{ + PROCNAME("pixaGetPixArray"); + + if (!pixa) + return (PIX **)ERROR_PTR("pixa not defined", procName, NULL); + + return pixa->pix; +} + + +/*! + * \brief pixaVerifyDepth() + * + * \param[in] pixa + * \param[out] psame 1 if depth is the same for all pix; 0 otherwise + * \param[out] pmaxd [optional] max depth of all pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is considered to be an error if there are no pix.
+ * 
+ */ +l_ok +pixaVerifyDepth(PIXA *pixa, + l_int32 *psame, + l_int32 *pmaxd) +{ + l_int32 i, n, d, maxd, same; + + PROCNAME("pixaVerifyDepth"); + + if (pmaxd) *pmaxd = 0; + if (!psame) + return ERROR_INT("psame not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if ((n = pixaGetCount(pixa)) == 0) + return ERROR_INT("no pix in pixa", procName, 1); + + same = 1; + pixaGetPixDimensions(pixa, 0, NULL, NULL, &maxd); + for (i = 1; i < n; i++) { + if (pixaGetPixDimensions(pixa, i, NULL, NULL, &d)) + return ERROR_INT("pix depth not found", procName, 1); + maxd = L_MAX(maxd, d); + if (d != maxd) + same = 0; + } + *psame = same; + if (pmaxd) *pmaxd = maxd; + return 0; +} + + +/*! + * \brief pixaVerifyDimensions() + * + * \param[in] pixa + * \param[out] psame 1 if dimensions are the same for all pix; 0 otherwise + * \param[out] pmaxw [optional] max width of all pix + * \param[out] pmaxh [optional] max height of all pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is considered to be an error if there are no pix.
+ * 
+ */ +l_ok +pixaVerifyDimensions(PIXA *pixa, + l_int32 *psame, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ + l_int32 i, n, w, h, maxw, maxh, same; + + PROCNAME("pixaVerifyDimensions"); + + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!psame) + return ERROR_INT("psame not defined", procName, 1); + *psame = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if ((n = pixaGetCount(pixa)) == 0) + return ERROR_INT("no pix in pixa", procName, 1); + + same = 1; + pixaGetPixDimensions(pixa, 0, &maxw, &maxh, NULL); + for (i = 1; i < n; i++) { + if (pixaGetPixDimensions(pixa, i, &w, &h, NULL)) + return ERROR_INT("pix dimensions not found", procName, 1); + maxw = L_MAX(maxw, w); + maxh = L_MAX(maxh, h); + if (w != maxw || h != maxh) + same = 0; + } + *psame = same; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + return 0; +} + + +/*! + * \brief pixaIsFull() + * + * \param[in] pixa + * \param[out] pfullpa [optional] 1 if pixa is full + * \param[out] pfullba [optional] 1 if boxa is full + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) A pixa is "full" if the array of pix is fully
+ *          occupied from index 0 to index (pixa->n - 1).
+ * 
+ */ +l_ok +pixaIsFull(PIXA *pixa, + l_int32 *pfullpa, + l_int32 *pfullba) +{ + l_int32 i, n, full; + BOXA *boxa; + PIX *pix; + + PROCNAME("pixaIsFull"); + + if (pfullpa) *pfullpa = 0; + if (pfullba) *pfullba = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + if (pfullpa) { + full = 1; + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { + full = 0; + break; + } + pixDestroy(&pix); + } + *pfullpa = full; + } + if (pfullba) { + boxa = pixaGetBoxa(pixa, L_CLONE); + boxaIsFull(boxa, pfullba); + boxaDestroy(&boxa); + } + return 0; +} + + +/*! + * \brief pixaCountText() + * + * \param[in] pixa + * \param[out] pntext number of pix with non-empty text strings + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) All pix have non-empty text strings if the returned value %ntext
+ *          equals the pixa count.
+ * 
+ */ +l_ok +pixaCountText(PIXA *pixa, + l_int32 *pntext) +{ + char *text; + l_int32 i, n; + PIX *pix; + + PROCNAME("pixaCountText"); + + if (!pntext) + return ERROR_INT("&ntext not defined", procName, 1); + *pntext = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + continue; + text = pixGetText(pix); + if (text && strlen(text) > 0) + (*pntext)++; + pixDestroy(&pix); + } + + return 0; +} + + +/*! + * \brief pixaSetText() + * + * \param[in] pixa + * \param[in] text [optional] single text string, to insert in each pix + * \param[in] sa [optional] array of text strings, to insert in each pix + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) To clear all the text fields, use %sa == NULL and %text == NULL.
+ *      (2) To set all the text fields to the same value %text, use %sa = NULL.
+ *      (3) If %sa is defined, we ignore %text and use it; %sa must have
+ *          the same count as %pixa.
+ * 
+ */ +l_ok +pixaSetText(PIXA *pixa, + const char *text, + SARRAY *sa) +{ + char *str; + l_int32 i, n; + PIX *pix; + + PROCNAME("pixaSetText"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + if (sa && (sarrayGetCount(sa) != n)) + return ERROR_INT("pixa and sa sizes differ", procName, 1); + + if (!sa) { + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + continue; + pixSetText(pix, text); + pixDestroy(&pix); + } + return 0; + } + + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + continue; + str = sarrayGetString(sa, i, L_NOCOPY); + pixSetText(pix, str); + pixDestroy(&pix); + } + + return 0; +} + + +/*! + * \brief pixaGetLinePtrs() + * + * \param[in] pixa of pix that all have the same depth + * \param[out] psize [optional] number of pix in the pixa + * \return array of array of line ptrs, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixGetLinePtrs() for details.
+ *      (2) It is best if all pix in the pixa are the same size.
+ *          The size of each line ptr array is equal to the height
+ *          of the pix that it refers to.
+ *      (3) This is an array of arrays.  To destroy it:
+ *            for (i = 0; i < size; i++)
+ *                LEPT_FREE(lineset[i]);
+ *            LEPT_FREE(lineset);
+ * 
+ */ +void *** +pixaGetLinePtrs(PIXA *pixa, + l_int32 *psize) +{ + l_int32 i, n, same; + void **lineptrs; + void ***lineset; + PIX *pix; + + PROCNAME("pixaGetLinePtrs"); + + if (psize) *psize = 0; + if (!pixa) + return (void ***)ERROR_PTR("pixa not defined", procName, NULL); + pixaVerifyDepth(pixa, &same, NULL); + if (!same) + return (void ***)ERROR_PTR("pixa not all same depth", procName, NULL); + n = pixaGetCount(pixa); + if (psize) *psize = n; + if ((lineset = (void ***)LEPT_CALLOC(n, sizeof(void **))) == NULL) + return (void ***)ERROR_PTR("lineset not made", procName, NULL); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + lineptrs = pixGetLinePtrs(pix, NULL); + lineset[i] = lineptrs; + pixDestroy(&pix); + } + + return lineset; +} + + +/*---------------------------------------------------------------------* + * Pixa output info * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaWriteStreamInfo() + * + * \param[in] fp file stream + * \param[in] pixa + * \return 0 if OK, 1 on error. + * + *
+  * Notes:
+  *      (1) For each pix in the pixa, write out the pix dimensions, spp,
+  *          text string (if it exists), and cmap info.
+  * 
+ */ +l_ok +pixaWriteStreamInfo(FILE *fp, + PIXA *pixa) +{ + char *text; + l_int32 i, n, w, h, d, spp, count, hastext; + PIX *pix; + PIXCMAP *cmap; + + PROCNAME("pixaWriteStreamInfo"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { + fprintf(fp, "%d: no pix at this index\n", i); + continue; + } + pixGetDimensions(pix, &w, &h, &d); + spp = pixGetSpp(pix); + text = pixGetText(pix); + hastext = (text && strlen(text) > 0); + if ((cmap = pixGetColormap(pix)) != NULL) + count = pixcmapGetCount(cmap); + fprintf(fp, "Pix %d: w = %d, h = %d, d = %d, spp = %d", + i, w, h, d, spp); + if (cmap) fprintf(fp, ", cmap(%d colors)", count); + if (hastext) fprintf(fp, ", text = %s", text); + fprintf(fp, "\n"); + pixDestroy(&pix); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixa array modifiers * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaReplacePix() + * + * \param[in] pixa + * \param[in] index to the index-th pix + * \param[in] pix insert to replace existing one + * \param[in] box [optional] insert to replace existing + * \return 0 if OK, 1 on error + * + *
+  * Notes:
+  *      (1) In-place replacement of one pix.
+  *      (2) The previous pix at that location is destroyed.
+  * 
+ */ +l_ok +pixaReplacePix(PIXA *pixa, + l_int32 index, + PIX *pix, + BOX *box) +{ + BOXA *boxa; + + PROCNAME("pixaReplacePix"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (index < 0 || index >= pixa->n) + return ERROR_INT("index not valid", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixDestroy(&(pixa->pix[index])); + pixa->pix[index] = pix; + + if (box) { + boxa = pixa->boxa; + if (index > boxa->n) + return ERROR_INT("boxa index not valid", procName, 1); + boxaReplaceBox(boxa, index, box); + } + + return 0; +} + + +/*! + * \brief pixaInsertPix() + * + * \param[in] pixa + * \param[in] index at which pix is to be inserted + * \param[in] pixs new pix to be inserted + * \param[in] box [optional] new box to be inserted + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts pixa[i] --> pixa[i + 1] for all i >= index,
+ *          and then inserts at pixa[index].
+ *      (2) To insert at the beginning of the array, set index = 0.
+ *      (3) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ *      (4) To append a pix to a pixa, it's easier to use pixaAddPix().
+ * 
+ */ +l_ok +pixaInsertPix(PIXA *pixa, + l_int32 index, + PIX *pixs, + BOX *box) +{ + l_int32 i, n; + + PROCNAME("pixaInsertPix"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + n = pixaGetCount(pixa); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + if (n >= pixa->nalloc) { /* extend both ptr arrays */ + pixaExtendArray(pixa); + boxaExtendArray(pixa->boxa); + } + pixa->n++; + for (i = n; i > index; i--) + pixa->pix[i] = pixa->pix[i - 1]; + pixa->pix[index] = pixs; + + /* Optionally, insert the box */ + if (box) + boxaInsertBox(pixa->boxa, index, box); + + return 0; +} + + +/*! + * \brief pixaRemovePix() + * + * \param[in] pixa + * \param[in] index of pix to be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts pixa[i] --> pixa[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ *      (3) The corresponding box is removed as well, if it exists.
+ * 
+ */ +l_ok +pixaRemovePix(PIXA *pixa, + l_int32 index) +{ + l_int32 i, n, nbox; + BOXA *boxa; + PIX **array; + + PROCNAME("pixaRemovePix"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + n = pixaGetCount(pixa); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + /* Remove the pix */ + array = pixa->pix; + pixDestroy(&array[index]); + for (i = index + 1; i < n; i++) + array[i - 1] = array[i]; + array[n - 1] = NULL; + pixa->n--; + + /* Remove the box if it exists */ + boxa = pixa->boxa; + nbox = boxaGetCount(boxa); + if (index < nbox) + boxaRemoveBox(boxa, index); + + return 0; +} + + +/*! + * \brief pixaRemovePixAndSave() + * + * \param[in] pixa + * \param[in] index of pix to be removed + * \param[out] ppix [optional] removed pix + * \param[out] pbox [optional] removed box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts pixa[i] --> pixa[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ *      (3) The corresponding box is removed as well, if it exists.
+ *      (4) The removed pix and box can either be retained or destroyed.
+ * 
+ */ +l_ok +pixaRemovePixAndSave(PIXA *pixa, + l_int32 index, + PIX **ppix, + BOX **pbox) +{ + l_int32 i, n, nbox; + BOXA *boxa; + PIX **array; + + PROCNAME("pixaRemovePixAndSave"); + + if (ppix) *ppix = NULL; + if (pbox) *pbox = NULL; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + n = pixaGetCount(pixa); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + /* Remove the pix */ + array = pixa->pix; + if (ppix) + *ppix = pixaGetPix(pixa, index, L_CLONE); + pixDestroy(&array[index]); + for (i = index + 1; i < n; i++) + array[i - 1] = array[i]; + array[n - 1] = NULL; + pixa->n--; + + /* Remove the box if it exists */ + boxa = pixa->boxa; + nbox = boxaGetCount(boxa); + if (index < nbox) + boxaRemoveBoxAndSave(boxa, index, pbox); + + return 0; +} + + +/*! + * \brief pixaRemoveSelected() + * + * \param[in] pixa + * \param[in] naindex numa of indices of pix to be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives error messages for invalid indices
+ * 
+ */ +l_ok +pixaRemoveSelected(PIXA *pixa, + NUMA *naindex) +{ + l_int32 i, n, index; + NUMA *na1; + + PROCNAME("pixaRemoveSelected"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!naindex) + return ERROR_INT("naindex not defined", procName, 1); + if ((n = numaGetCount(naindex)) == 0) + return ERROR_INT("naindex is empty", procName, 1); + + /* Remove from highest indices first */ + na1 = numaSort(NULL, naindex, L_SORT_DECREASING); + for (i = 0; i < n; i++) { + numaGetIValue(na1, i, &index); + pixaRemovePix(pixa, index); + } + numaDestroy(&na1); + return 0; +} + + +/*! + * \brief pixaInitFull() + * + * \param[in] pixa typically empty + * \param[in] pix [optional] to be replicated to the entire pixa ptr array + * \param[in] box [optional] to be replicated to the entire boxa ptr array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This initializes a pixa by filling up the entire pix ptr array
+ *          with copies of %pix.  If %pix == NULL, we use a tiny placeholder
+ *          pix (w = h = d = 1).  Any existing pix are destroyed.
+ *          It also optionally fills the boxa with copies of %box.
+ *          After this operation, the numbers of pix and (optionally)
+ *          boxes are equal to the number of allocated ptrs.
+ *      (2) Note that we use pixaReplacePix() instead of pixaInsertPix().
+ *          They both have the same effect when inserting into a NULL ptr
+ *          in the pixa ptr array:
+ *      (3) If the boxa is not initialized (i.e., filled with boxes),
+ *          later insertion of boxes will cause an error, because the
+ *          'n' field is 0.
+ *      (4) Example usage.  This function is useful to prepare for a
+ *          random insertion (or replacement) of pix into a pixa.
+ *          To randomly insert pix into a pixa, without boxes, up to
+ *          some index "max":
+ *             Pixa *pixa = pixaCreate(max);
+ *             pixaInitFull(pixa, NULL, NULL);
+ *          An existing pixa with a smaller ptr array can also be reused:
+ *             pixaExtendArrayToSize(pixa, max);
+ *             pixaInitFull(pixa, NULL, NULL);
+ *          The initialization allows the pixa to always be properly
+ *          filled, even if all pix (and boxes) are not later replaced.
+ * 
+ */ +l_ok +pixaInitFull(PIXA *pixa, + PIX *pix, + BOX *box) +{ + l_int32 i, n; + PIX *pix1; + + PROCNAME("pixaInitFull"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixa->nalloc; + pixa->n = n; + for (i = 0; i < n; i++) { + if (pix) + pix1 = pixCopy(NULL, pix); + else + pix1 = pixCreate(1, 1, 1); + pixaReplacePix(pixa, i, pix1, NULL); + } + if (box) + boxaInitFull(pixa->boxa, box); + + return 0; +} + + +/*! + * \brief pixaClear() + * + * \param[in] pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys all pix in the pixa, as well as
+ *          all boxes in the boxa.  The ptrs in the pix ptr array
+ *          are all null'd.  The number of allocated pix, n, is set to 0.
+ * 
+ */ +l_ok +pixaClear(PIXA *pixa) +{ + l_int32 i, n; + + PROCNAME("pixaClear"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) + pixDestroy(&pixa->pix[i]); + pixa->n = 0; + return boxaClear(pixa->boxa); +} + + +/*---------------------------------------------------------------------* + * Pixa and Pixaa combination * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaJoin() + * + * \param[in] pixad dest pixa; add to this one + * \param[in] pixas [optional] source pixa; add from this one + * \param[in] istart starting index in pixas + * \param[in] iend ending index in pixas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+  * Notes:
+  *      (1) This appends a clone of each indicated pix in pixas to pixad
+  *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
+  *      (3) iend < 0 means 'read to the end'
+  *      (4) If pixas is NULL or contains no pix, this is a no-op.
+  * 
+ */ +l_ok +pixaJoin(PIXA *pixad, + PIXA *pixas, + l_int32 istart, + l_int32 iend) +{ + l_int32 i, n, nb; + BOXA *boxas, *boxad; + PIX *pix; + + PROCNAME("pixaJoin"); + + if (!pixad) + return ERROR_INT("pixad not defined", procName, 1); + if (!pixas || ((n = pixaGetCount(pixas)) == 0)) + return 0; + + if (istart < 0) + istart = 0; + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + pixaAddPix(pixad, pix, L_INSERT); + } + + boxas = pixaGetBoxa(pixas, L_CLONE); + boxad = pixaGetBoxa(pixad, L_CLONE); + nb = pixaGetBoxaCount(pixas); + iend = L_MIN(iend, nb - 1); + boxaJoin(boxad, boxas, istart, iend); + boxaDestroy(&boxas); /* just the clones */ + boxaDestroy(&boxad); + return 0; +} + + +/*! + * \brief pixaInterleave() + * + * \param[in] pixa1 first src pixa + * \param[in] pixa2 second src pixa + * \param[in] copyflag L_CLONE, L_COPY + * \return pixa interleaved from sources, or NULL on error. + * + *
+ * Notes:
+ *      (1) %copyflag determines if the pix are copied or cloned.
+ *          The boxes, if they exist, are copied.
+ *      (2) If the two pixa have different sizes, a warning is issued,
+ *          and the number of pairs returned is the minimum size.
+ * 
+ */ +PIXA * +pixaInterleave(PIXA *pixa1, + PIXA *pixa2, + l_int32 copyflag) +{ + l_int32 i, n1, n2, n, nb1, nb2; + BOX *box; + PIX *pix; + PIXA *pixad; + + PROCNAME("pixaInterleave"); + + if (!pixa1) + return (PIXA *)ERROR_PTR("pixa1 not defined", procName, NULL); + if (!pixa2) + return (PIXA *)ERROR_PTR("pixa2 not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + n1 = pixaGetCount(pixa1); + n2 = pixaGetCount(pixa2); + n = L_MIN(n1, n2); + if (n == 0) + return (PIXA *)ERROR_PTR("at least one input pixa is empty", + procName, NULL); + if (n1 != n2) + L_WARNING("counts differ: %d != %d\n", procName, n1, n2); + + pixad = pixaCreate(2 * n); + nb1 = pixaGetBoxaCount(pixa1); + nb2 = pixaGetBoxaCount(pixa2); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa1, i, copyflag); + pixaAddPix(pixad, pix, L_INSERT); + if (i < nb1) { + box = pixaGetBox(pixa1, i, L_COPY); + pixaAddBox(pixad, box, L_INSERT); + } + pix = pixaGetPix(pixa2, i, copyflag); + pixaAddPix(pixad, pix, L_INSERT); + if (i < nb2) { + box = pixaGetBox(pixa2, i, L_COPY); + pixaAddBox(pixad, box, L_INSERT); + } + } + + return pixad; +} + + +/*! + * \brief pixaaJoin() + * + * \param[in] paad dest pixaa; add to this one + * \param[in] paas [optional] source pixaa; add from this one + * \param[in] istart starting index in pixaas + * \param[in] iend ending index in pixaas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This appends a clone of each indicated pixa in paas to pixaad
+ *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (3) iend < 0 means 'read to the end'
+ * 
+ */ +l_ok +pixaaJoin(PIXAA *paad, + PIXAA *paas, + l_int32 istart, + l_int32 iend) +{ + l_int32 i, n; + PIXA *pixa; + + PROCNAME("pixaaJoin"); + + if (!paad) + return ERROR_INT("pixaad not defined", procName, 1); + if (!paas) + return 0; + + if (istart < 0) + istart = 0; + n = pixaaGetCount(paas, NULL); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + pixa = pixaaGetPixa(paas, i, L_CLONE); + pixaaAddPixa(paad, pixa, L_INSERT); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixaa creation and destruction * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaaCreate() + * + * \param[in] n initial number of pixa ptrs + * \return paa, or NULL on error + * + *
+  * Notes:
+  *      (1) A pixaa provides a 2-level hierarchy of images.
+  *          A common use is for segmentation masks, which are
+  *          inexpensive to store in png format.
+  *      (2) For example, suppose you want a mask for each textline
+  *          in a two-column page.  The textline masks for each column
+  *          can be represented by a pixa, of which there are 2 in the pixaa.
+  *          The boxes for the textline mask components within a column
+  *          can have their origin referred to the column rather than the page.
+  *          Then the boxa field can be used to represent the two box (regions)
+  *          for the columns, and the (x,y) components of each box can
+  *          be used to get the absolute position of the textlines on
+  *          the page.
+  * 
+ */ +PIXAA * +pixaaCreate(l_int32 n) +{ + PIXAA *paa; + + PROCNAME("pixaaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + paa = (PIXAA *)LEPT_CALLOC(1, sizeof(PIXAA)); + paa->n = 0; + paa->nalloc = n; + if ((paa->pixa = (PIXA **)LEPT_CALLOC(n, sizeof(PIXA *))) == NULL) { + pixaaDestroy(&paa); + return (PIXAA *)ERROR_PTR("pixa ptrs not made", procName, NULL); + } + paa->boxa = boxaCreate(n); + + return paa; +} + + +/*! + * \brief pixaaCreateFromPixa() + * + * \param[in] pixa + * \param[in] n number specifying subdivision of pixa + * \param[in] type L_CHOOSE_CONSECUTIVE, L_CHOOSE_SKIP_BY + * \param[in] copyflag L_CLONE, L_COPY + * \return paa, or NULL on error + * + *
+ * Notes:
+ *      (1) This subdivides a pixa into a set of smaller pixa that
+ *          are accumulated into a pixaa.
+ *      (2) If type == L_CHOOSE_CONSECUTIVE, the first 'n' pix are
+ *          put in a pixa and added to pixaa, then the next 'n', etc.
+ *          If type == L_CHOOSE_SKIP_BY, the first pixa is made by
+ *          aggregating pix[0], pix[n], pix[2*n], etc.
+ *      (3) The copyflag specifies if each new pix is a copy or a clone.
+ * 
+ */ +PIXAA * +pixaaCreateFromPixa(PIXA *pixa, + l_int32 n, + l_int32 type, + l_int32 copyflag) +{ + l_int32 count, i, j, npixa; + PIX *pix; + PIXA *pixat; + PIXAA *paa; + + PROCNAME("pixaaCreateFromPixa"); + + if (!pixa) + return (PIXAA *)ERROR_PTR("pixa not defined", procName, NULL); + count = pixaGetCount(pixa); + if (count == 0) + return (PIXAA *)ERROR_PTR("no pix in pixa", procName, NULL); + if (n <= 0) + return (PIXAA *)ERROR_PTR("n must be > 0", procName, NULL); + if (type != L_CHOOSE_CONSECUTIVE && type != L_CHOOSE_SKIP_BY) + return (PIXAA *)ERROR_PTR("invalid type", procName, NULL); + if (copyflag != L_CLONE && copyflag != L_COPY) + return (PIXAA *)ERROR_PTR("invalid copyflag", procName, NULL); + + if (type == L_CHOOSE_CONSECUTIVE) + npixa = (count + n - 1) / n; + else /* L_CHOOSE_SKIP_BY */ + npixa = L_MIN(n, count); + paa = pixaaCreate(npixa); + if (type == L_CHOOSE_CONSECUTIVE) { + for (i = 0; i < count; i++) { + if (i % n == 0) + pixat = pixaCreate(n); + pix = pixaGetPix(pixa, i, copyflag); + pixaAddPix(pixat, pix, L_INSERT); + if (i % n == n - 1) + pixaaAddPixa(paa, pixat, L_INSERT); + } + if (i % n != 0) + pixaaAddPixa(paa, pixat, L_INSERT); + } + else { /* L_CHOOSE_SKIP_BY */ + for (i = 0; i < npixa; i++) { + pixat = pixaCreate(count / npixa + 1); + for (j = i; j < count; j += n) { + pix = pixaGetPix(pixa, j, copyflag); + pixaAddPix(pixat, pix, L_INSERT); + } + pixaaAddPixa(paa, pixat, L_INSERT); + } + } + + return paa; +} + + +/*! + * \brief pixaaDestroy() + * + * \param[in,out] ppaa use ptr address so it will be nulled + * \return void + */ +void +pixaaDestroy(PIXAA **ppaa) +{ + l_int32 i; + PIXAA *paa; + + PROCNAME("pixaaDestroy"); + + if (ppaa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((paa = *ppaa) == NULL) + return; + + for (i = 0; i < paa->n; i++) + pixaDestroy(&paa->pixa[i]); + LEPT_FREE(paa->pixa); + boxaDestroy(&paa->boxa); + + LEPT_FREE(paa); + *ppaa = NULL; + + return; +} + + +/*---------------------------------------------------------------------* + * Pixaa addition * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaaAddPixa() + * + * \param[in] paa + * \param[in] pixa to be added + * \param[in] copyflag: + * L_INSERT inserts the pixa directly; + * L_COPY makes a new pixa and copies each pix and each box; + * L_CLONE gives a new handle to the input pixa; + * L_COPY_CLONE makes a new pixa and inserts clones of + * all pix and boxes + * \return 0 if OK; 1 on error + */ +l_ok +pixaaAddPixa(PIXAA *paa, + PIXA *pixa, + l_int32 copyflag) +{ + l_int32 n; + PIXA *pixac; + + PROCNAME("pixaaAddPixa"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY && + copyflag != L_CLONE && copyflag != L_COPY_CLONE) + return ERROR_INT("invalid copyflag", procName, 1); + + if (copyflag == L_INSERT) { + pixac = pixa; + } + else { + if ((pixac = pixaCopy(pixa, copyflag)) == NULL) + return ERROR_INT("pixac not made", procName, 1); + } + + n = pixaaGetCount(paa, NULL); + if (n >= paa->nalloc) + pixaaExtendArray(paa); + paa->pixa[n] = pixac; + paa->n++; + + return 0; +} + + +/*! + * \brief pixaaExtendArray() + * + * \param[in] paa + * \return 0 if OK; 1 on error + */ +l_ok +pixaaExtendArray(PIXAA *paa) +{ + PROCNAME("pixaaExtendArray"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + + if ((paa->pixa = (PIXA **)reallocNew((void **)&paa->pixa, + sizeof(PIXA *) * paa->nalloc, + 2 * sizeof(PIXA *) * paa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + paa->nalloc = 2 * paa->nalloc; + return 0; +} + + +/*! + * \brief pixaaAddPix() + * + * \param[in] paa input paa + * \param[in] index index of pixa in paa + * \param[in] pix to be added + * \param[in] box [optional] to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK; 1 on error + */ +l_ok +pixaaAddPix(PIXAA *paa, + l_int32 index, + PIX *pix, + BOX *box, + l_int32 copyflag) +{ + PIXA *pixa; + + PROCNAME("pixaaAddPix"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) + return ERROR_INT("pixa not found", procName, 1); + pixaAddPix(pixa, pix, copyflag); + if (box) pixaAddBox(pixa, box, copyflag); + pixaDestroy(&pixa); + return 0; +} + + +/*! + * \brief pixaaAddBox() + * + * \param[in] paa + * \param[in] box + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The box can be used, for example, to hold the support region
+ *          of a pixa that is being added to the pixaa.
+ * 
+ */ +l_ok +pixaaAddBox(PIXAA *paa, + BOX *box, + l_int32 copyflag) +{ + PROCNAME("pixaaAddBox"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) + return ERROR_INT("invalid copyflag", procName, 1); + + boxaAddBox(paa->boxa, box, copyflag); + return 0; +} + + + +/*---------------------------------------------------------------------* + * Pixaa accessors * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaaGetCount() + * + * \param[in] paa + * \param[out] pna [optional] number of pix in each pixa + * \return count, or 0 if no pixaa + * + *
+  * Notes:
+  *      (1) If paa is empty, a returned na will also be empty.
+  * 
+ */ +l_int32 +pixaaGetCount(PIXAA *paa, + NUMA **pna) +{ + l_int32 i, n; + NUMA *na; + PIXA *pixa; + + PROCNAME("pixaaGetCount"); + + if (pna) *pna = NULL; + if (!paa) + return ERROR_INT("paa not defined", procName, 0); + + n = paa->n; + if (pna) { + if ((na = numaCreate(n)) == NULL) + return ERROR_INT("na not made", procName, 0); + *pna = na; + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + numaAddNumber(na, pixaGetCount(pixa)); + pixaDestroy(&pixa); + } + } + return n; +} + + +/*! + * \brief pixaaGetPixa() + * + * \param[in] paa + * \param[in] index to the index-th pixa + * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) L_COPY makes a new pixa with a copy of every pix
+ *      (2) L_CLONE just makes a new reference to the pixa,
+ *          and bumps the counter.  You would use this, for example,
+ *          when you need to extract some data from a pix within a
+ *          pixa within a pixaa.
+ *      (3) L_COPY_CLONE makes a new pixa with a clone of every pix
+ *          and box
+ *      (4) In all cases, you must invoke pixaDestroy() on the returned pixa
+ * 
+ */ +PIXA * +pixaaGetPixa(PIXAA *paa, + l_int32 index, + l_int32 accesstype) +{ + PIXA *pixa; + + PROCNAME("pixaaGetPixa"); + + if (!paa) + return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); + if (index < 0 || index >= paa->n) + return (PIXA *)ERROR_PTR("index not valid", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE && + accesstype != L_COPY_CLONE) + return (PIXA *)ERROR_PTR("invalid accesstype", procName, NULL); + + if ((pixa = paa->pixa[index]) == NULL) { /* shouldn't happen! */ + L_ERROR("missing pixa[%d]\n", procName, index); + return (PIXA *)ERROR_PTR("pixa not found at index", procName, NULL); + } + return pixaCopy(pixa, accesstype); +} + + +/*! + * \brief pixaaGetBoxa() + * + * \param[in] paa + * \param[in] accesstype L_COPY, L_CLONE + * \return boxa, or NULL on error + * + *
+ * Notes:
+ *      (1) L_COPY returns a copy; L_CLONE returns a new reference to the boxa.
+ *      (2) In both cases, invoke boxaDestroy() on the returned boxa.
+ * 
+ */ +BOXA * +pixaaGetBoxa(PIXAA *paa, + l_int32 accesstype) +{ + PROCNAME("pixaaGetBoxa"); + + if (!paa) + return (BOXA *)ERROR_PTR("paa not defined", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE) + return (BOXA *)ERROR_PTR("invalid access type", procName, NULL); + + return boxaCopy(paa->boxa, accesstype); +} + + +/*! + * \brief pixaaGetPix() + * + * \param[in] paa + * \param[in] index index into the pixa array in the pixaa + * \param[in] ipix index into the pix array in the pixa + * \param[in] accessflag L_COPY or L_CLONE + * \return pix, or NULL on error + */ +PIX * +pixaaGetPix(PIXAA *paa, + l_int32 index, + l_int32 ipix, + l_int32 accessflag) +{ + PIX *pix; + PIXA *pixa; + + PROCNAME("pixaaGetPix"); + + if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) + return (PIX *)ERROR_PTR("pixa not retrieved", procName, NULL); + if ((pix = pixaGetPix(pixa, ipix, accessflag)) == NULL) + L_ERROR("pix not retrieved\n", procName); + pixaDestroy(&pixa); + return pix; +} + + +/*! + * \brief pixaaVerifyDepth() + * + * \param[in] paa + * \param[out] psame 1 if all pix have the same depth; 0 otherwise + * \param[out] pmaxd [optional] max depth of all pix in pixaa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) It is considered to be an error if any pixa have no pix.
+ * 
+ */ +l_ok +pixaaVerifyDepth(PIXAA *paa, + l_int32 *psame, + l_int32 *pmaxd) +{ + l_int32 i, n, d, maxd, same, samed; + PIXA *pixa; + + PROCNAME("pixaaVerifyDepth"); + + if (pmaxd) *pmaxd = 0; + if (!psame) + return ERROR_INT("psame not defined", procName, 1); + *psame = 0; + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if ((n = pixaaGetCount(paa, NULL)) == 0) + return ERROR_INT("no pixa in paa", procName, 1); + + pixa = pixaaGetPixa(paa, 0, L_CLONE); + pixaVerifyDepth(pixa, &same, &maxd); /* init same, maxd with first pixa */ + pixaDestroy(&pixa); + for (i = 1; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + pixaVerifyDepth(pixa, &samed, &d); + pixaDestroy(&pixa); + maxd = L_MAX(maxd, d); + if (!samed || maxd != d) + same = 0; + } + *psame = same; + if (pmaxd) *pmaxd = maxd; + return 0; +} + + +/*! + * \brief pixaaVerifyDimensions() + * + * \param[in] paa + * \param[out] psame 1 if all pix have the same depth; 0 otherwise + * \param[out] pmaxw [optional] max width of all pix in pixaa + * \param[out] pmaxh [optional] max height of all pix in pixaa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) It is considered to be an error if any pixa have no pix.
+ * 
+ */ +l_ok +pixaaVerifyDimensions(PIXAA *paa, + l_int32 *psame, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ + l_int32 i, n, w, h, maxw, maxh, same, same2; + PIXA *pixa; + + PROCNAME("pixaaVerifyDimensions"); + + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!psame) + return ERROR_INT("psame not defined", procName, 1); + *psame = 0; + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if ((n = pixaaGetCount(paa, NULL)) == 0) + return ERROR_INT("no pixa in paa", procName, 1); + + /* Init same; init maxw and maxh from first pixa */ + pixa = pixaaGetPixa(paa, 0, L_CLONE); + pixaVerifyDimensions(pixa, &same, &maxw, &maxh); + pixaDestroy(&pixa); + + for (i = 1; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + pixaVerifyDimensions(pixa, &same2, &w, &h); + pixaDestroy(&pixa); + maxw = L_MAX(maxw, w); + maxh = L_MAX(maxh, h); + if (!same2 || maxw != w || maxh != h) + same = 0; + } + *psame = same; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + return 0; +} + + +/*! + * \brief pixaaIsFull() + * + * \param[in] paa + * \param[out] pfull 1 if all pixa in the paa have full pix arrays + * \return return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Does not require boxa associated with each pixa to be full.
+ * 
+ */ +l_int32 +pixaaIsFull(PIXAA *paa, + l_int32 *pfull) +{ + l_int32 i, n, full; + PIXA *pixa; + + PROCNAME("pixaaIsFull"); + + if (!pfull) + return ERROR_INT("&full not defined", procName, 0); + *pfull = 0; + if (!paa) + return ERROR_INT("paa not defined", procName, 0); + + n = pixaaGetCount(paa, NULL); + full = 1; + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + pixaIsFull(pixa, &full, NULL); + pixaDestroy(&pixa); + if (!full) break; + } + *pfull = full; + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixaa array modifiers * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaaInitFull() + * + * \param[in] paa typically empty + * \param[in] pixa to be replicated into the entire pixa ptr array + * \return 0 if OK, 1 on error + * + *
+  * Notes:
+  *      (1) This initializes a pixaa by filling up the entire pixa ptr array
+  *          with copies of %pixa.  Any existing pixa are destroyed.
+  *      (2) Example usage.  This function is useful to prepare for a
+  *          random insertion (or replacement) of pixa into a pixaa.
+  *          To randomly insert pixa into a pixaa, up to some index "max":
+  *             Pixaa *paa = pixaaCreate(max);
+  *             Pixa *pixa = pixaCreate(1);  // if you want little memory
+  *             pixaaInitFull(paa, pixa);  // copy it to entire array
+  *             pixaDestroy(&pixa);  // no longer needed
+  *          The initialization allows the pixaa to always be properly filled.
+  * 
+ */ +l_ok +pixaaInitFull(PIXAA *paa, + PIXA *pixa) +{ + l_int32 i, n; + PIXA *pixat; + + PROCNAME("pixaaInitFull"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = paa->nalloc; + paa->n = n; + for (i = 0; i < n; i++) { + pixat = pixaCopy(pixa, L_COPY); + pixaaReplacePixa(paa, i, pixat); + } + + return 0; +} + + +/*! + * \brief pixaaReplacePixa() + * + * \param[in] paa + * \param[in] index to the index-th pixa + * \param[in] pixa insert to replace existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This allows random insertion of a pixa into a pixaa, with
+ *          destruction of any existing pixa at that location.
+ *          The input pixa is now owned by the pixaa.
+ *      (2) No other pixa in the array are affected.
+ *      (3) The index must be within the allowed set.
+ * 
+ */ +l_ok +pixaaReplacePixa(PIXAA *paa, + l_int32 index, + PIXA *pixa) +{ + + PROCNAME("pixaaReplacePixa"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (index < 0 || index >= paa->n) + return ERROR_INT("index not valid", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + pixaDestroy(&(paa->pixa[index])); + paa->pixa[index] = pixa; + return 0; +} + + +/*! + * \brief pixaaClear() + * + * \param[in] paa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys all pixa in the pixaa, and nulls the ptrs
+ *          in the pixa ptr array.
+ * 
+ */ +l_ok +pixaaClear(PIXAA *paa) +{ + l_int32 i, n; + + PROCNAME("pixaClear"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + + n = pixaaGetCount(paa, NULL); + for (i = 0; i < n; i++) + pixaDestroy(&paa->pixa[i]); + paa->n = 0; + return 0; +} + + +/*! + * \brief pixaaTruncate() + * + * \param[in] paa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This identifies the largest index containing a pixa that
+ *          has any pix within it, destroys all pixa above that index,
+ *          and resets the count.
+ * 
+ */ +l_ok +pixaaTruncate(PIXAA *paa) +{ + l_int32 i, n, np; + PIXA *pixa; + + PROCNAME("pixaaTruncate"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + + n = pixaaGetCount(paa, NULL); + for (i = n - 1; i >= 0; i--) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + if (!pixa) { + paa->n--; + continue; + } + np = pixaGetCount(pixa); + pixaDestroy(&pixa); + if (np == 0) { + pixaDestroy(&paa->pixa[i]); + paa->n--; + } + else { + break; + } + } + return 0; +} + + + +/*---------------------------------------------------------------------* + * Pixa serialized I/O * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaRead() + * + * \param[in] filename + * \return pixa, or NULL on error + * + *
+  * Notes:
+  *      (1) The pix are stored in the file as png.
+  *          If the png library is not linked, this will fail.
+  * 
+ */ +PIXA * +pixaRead(const char *filename) +{ + FILE *fp; + PIXA *pixa; + + PROCNAME("pixaRead"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return (PIXA *)ERROR_PTR("no libpng: can't read data", procName, NULL); +#endif /* !HAVE_LIBPNG */ + + if (!filename) + return (PIXA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIXA *)ERROR_PTR("stream not opened", procName, NULL); + pixa = pixaReadStream(fp); + fclose(fp); + if (!pixa) + return (PIXA *)ERROR_PTR("pixa not read", procName, NULL); + return pixa; +} + + +/*! + * \brief pixaReadStream() + * + * \param[in] fp file stream + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +PIXA * +pixaReadStream(FILE *fp) +{ + l_int32 n, i, xres, yres, version; + l_int32 ignore; + BOXA *boxa; + PIX *pix; + PIXA *pixa; + + PROCNAME("pixaReadStream"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return (PIXA *)ERROR_PTR("no libpng: can't read data", procName, NULL); +#endif /* !HAVE_LIBPNG */ + + if (!fp) + return (PIXA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nPixa Version %d\n", &version) != 1) + return (PIXA *)ERROR_PTR("not a pixa file", procName, NULL); + if (version != PIXA_VERSION_NUMBER) + return (PIXA *)ERROR_PTR("invalid pixa version", procName, NULL); + if (fscanf(fp, "Number of pix = %d\n", &n) != 1) + return (PIXA *)ERROR_PTR("not a pixa file", procName, NULL); + + if ((boxa = boxaReadStream(fp)) == NULL) + return (PIXA *)ERROR_PTR("boxa not made", procName, NULL); + if ((pixa = pixaCreate(n)) == NULL) { + boxaDestroy(&boxa); + return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); + } + boxaDestroy(&pixa->boxa); + pixa->boxa = boxa; + + for (i = 0; i < n; i++) { + if ((fscanf(fp, " pix[%d]: xres = %d, yres = %d\n", + &ignore, &xres, &yres)) != 3) { + pixaDestroy(&pixa); + return (PIXA *)ERROR_PTR("res reading error", procName, NULL); + } + if ((pix = pixReadStreamPng(fp)) == NULL) { + pixaDestroy(&pixa); + return (PIXA *)ERROR_PTR("pix not read", procName, NULL); + } + pixSetXRes(pix, xres); + pixSetYRes(pix, yres); + pixaAddPix(pixa, pix, L_INSERT); + } + return pixa; +} + + +/*! + * \brief pixaReadMem() + * + * \param[in] data of serialized pixa + * \param[in] size of data in bytes + * \return pixa, or NULL on error + */ +PIXA * +pixaReadMem(const l_uint8 *data, + size_t size) +{ + FILE *fp; + PIXA *pixa; + + PROCNAME("pixaReadMem"); + + if (!data) + return (PIXA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIXA *)ERROR_PTR("stream not opened", procName, NULL); + + pixa = pixaReadStream(fp); + fclose(fp); + if (!pixa) L_ERROR("pixa not read\n", procName); + return pixa; +} + + +/*! + * \brief pixaWriteDebug() + * + * \param[in] fname + * \param[in] pixa + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of pixaWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +pixaWriteDebug(const char *fname, + PIXA *pixa) +{ + PROCNAME("pixaWriteDebug"); + + if (LeptDebugOK) { + return pixaWrite(fname, pixa); + } + else { + L_INFO("write to named temp file %s is disabled\n", procName, fname); + return 0; + } +} + + +/*! + * \brief pixaWrite() + * + * \param[in] filename + * \param[in] pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +l_ok +pixaWrite(const char *filename, + PIXA *pixa) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("pixaWrite"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return ERROR_INT("no libpng: can't write data", procName, 1); +#endif /* !HAVE_LIBPNG */ + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixaWriteStream(fp, pixa); + fclose(fp); + if (ret) + return ERROR_INT("pixa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixaWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +l_ok +pixaWriteStream(FILE *fp, + PIXA *pixa) +{ + l_int32 n, i; + PIX *pix; + + PROCNAME("pixaWriteStream"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return ERROR_INT("no libpng: can't write data", procName, 1); +#endif /* !HAVE_LIBPNG */ + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + fprintf(fp, "\nPixa Version %d\n", PIXA_VERSION_NUMBER); + fprintf(fp, "Number of pix = %d\n", n); + boxaWriteStream(fp, pixa->boxa); + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + return ERROR_INT("pix not found", procName, 1); + fprintf(fp, " pix[%d]: xres = %d, yres = %d\n", + i, pix->xres, pix->yres); + pixWriteStreamPng(fp, pix, 0.0); + pixDestroy(&pix); + } + return 0; +} + + +/*! + * \brief pixaWriteMem() + * + * \param[out] pdata data of serialized pixa + * \param[out] psize size of returned data + * \param[in] pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a pixa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +pixaWriteMem(l_uint8 **pdata, + size_t *psize, + PIXA *pixa) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("pixaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixaWriteStream(fp, pixa); +#else + L_INFO("work-around: writing to a temp file\n", procName); +#ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#endif /* _WIN32 */ + ret = pixaWriteStream(fp, pixa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief pixaReadBoth() + * + * \param[in] filename + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) This reads serialized files of either a pixa or a pixacomp,
+ *          and returns a pixa in memory.  It requires png and jpeg libraries.
+ * 
+ */ +PIXA * +pixaReadBoth(const char *filename) +{ + char buf[32]; + char *sname; + PIXA *pixa; + PIXAC *pac; + + PROCNAME("pixaReadBoth"); + + if (!filename) + return (PIXA *)ERROR_PTR("filename not defined", procName, NULL); + + l_getStructStrFromFile(filename, L_STR_NAME, &sname); + if (!sname) + return (PIXA *)ERROR_PTR("struct name not found", procName, NULL); + snprintf(buf, sizeof(buf), "%s", sname); + LEPT_FREE(sname); + + if (strcmp(buf, "Pixacomp") == 0) { + if ((pac = pixacompRead(filename)) == NULL) + return (PIXA *)ERROR_PTR("pac not made", procName, NULL); + pixa = pixaCreateFromPixacomp(pac, L_COPY); + pixacompDestroy(&pac); + } + else if (strcmp(buf, "Pixa") == 0) { + if ((pixa = pixaRead(filename)) == NULL) + return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); + } + else { + return (PIXA *)ERROR_PTR("invalid file type", procName, NULL); + } + return pixa; +} + + +/*---------------------------------------------------------------------* + * Pixaa serialized I/O * + *---------------------------------------------------------------------*/ + /*! + * \brief pixaaReadFromFiles() + * + * \param[in] dirname directory + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] first 0-based + * \param[in] nfiles use 0 for everything from %first to the end + * \return paa, or NULL on error or if no pixa files are found. + * + *
+  * Notes:
+  *      (1) The files must be serialized pixa files (e.g., *.pa)
+  *          If some files cannot be read, warnings are issued.
+  *      (2) Use %substr to filter filenames in the directory.  If
+  *          %substr == NULL, this takes all files.
+  *      (3) After filtering, use %first and %nfiles to select
+  *          a contiguous set of files, that have been lexically
+  *          sorted in increasing order.
+  * 
+ */ +PIXAA * +pixaaReadFromFiles(const char *dirname, + const char *substr, + l_int32 first, + l_int32 nfiles) +{ + char *fname; + l_int32 i, n; + PIXA *pixa; + PIXAA *paa; + SARRAY *sa; + + PROCNAME("pixaaReadFromFiles"); + + if (!dirname) + return (PIXAA *)ERROR_PTR("dirname not defined", procName, NULL); + + sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); + if (!sa || ((n = sarrayGetCount(sa)) == 0)) { + sarrayDestroy(&sa); + return (PIXAA *)ERROR_PTR("no pixa files found", procName, NULL); + } + + paa = pixaaCreate(n); + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + if ((pixa = pixaRead(fname)) == NULL) { + L_ERROR("pixa not read for %d-th file", procName, i); + continue; + } + pixaaAddPixa(paa, pixa, L_INSERT); + } + + sarrayDestroy(&sa); + return paa; +} + + +/*! + * \brief pixaaRead() + * + * \param[in] filename + * \return paa, or NULL on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +PIXAA * +pixaaRead(const char *filename) +{ + FILE *fp; + PIXAA *paa; + + PROCNAME("pixaaRead"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return (PIXAA *)ERROR_PTR("no libpng: can't read data", procName, NULL); +#endif /* !HAVE_LIBPNG */ + + if (!filename) + return (PIXAA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIXAA *)ERROR_PTR("stream not opened", procName, NULL); + paa = pixaaReadStream(fp); + fclose(fp); + if (!paa) + return (PIXAA *)ERROR_PTR("paa not read", procName, NULL); + return paa; +} + + +/*! + * \brief pixaaReadStream() + * + * \param[in] fp file stream + * \return paa, or NULL on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +PIXAA * +pixaaReadStream(FILE *fp) +{ + l_int32 n, i, version; + l_int32 ignore; + BOXA *boxa; + PIXA *pixa; + PIXAA *paa; + + PROCNAME("pixaaReadStream"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return (PIXAA *)ERROR_PTR("no libpng: can't read data", procName, NULL); +#endif /* !HAVE_LIBPNG */ + + if (!fp) + return (PIXAA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nPixaa Version %d\n", &version) != 1) + return (PIXAA *)ERROR_PTR("not a pixaa file", procName, NULL); + if (version != PIXAA_VERSION_NUMBER) + return (PIXAA *)ERROR_PTR("invalid pixaa version", procName, NULL); + if (fscanf(fp, "Number of pixa = %d\n", &n) != 1) + return (PIXAA *)ERROR_PTR("not a pixaa file", procName, NULL); + + if ((paa = pixaaCreate(n)) == NULL) + return (PIXAA *)ERROR_PTR("paa not made", procName, NULL); + if ((boxa = boxaReadStream(fp)) == NULL) { + pixaaDestroy(&paa); + return (PIXAA *)ERROR_PTR("boxa not made", procName, NULL); + } + boxaDestroy(&paa->boxa); + paa->boxa = boxa; + + for (i = 0; i < n; i++) { + if ((fscanf(fp, "\n\n --------------- pixa[%d] ---------------\n", + &ignore)) != 1) { + pixaaDestroy(&paa); + return (PIXAA *)ERROR_PTR("text reading", procName, NULL); + } + if ((pixa = pixaReadStream(fp)) == NULL) { + pixaaDestroy(&paa); + return (PIXAA *)ERROR_PTR("pixa not read", procName, NULL); + } + pixaaAddPixa(paa, pixa, L_INSERT); + } + + return paa; +} + + +/*! + * \brief pixaaReadMem() + * + * \param[in] data of serialized pixaa + * \param[in] size of data in bytes + * \return paa, or NULL on error + */ +PIXAA * +pixaaReadMem(const l_uint8 *data, + size_t size) +{ + FILE *fp; + PIXAA *paa; + + PROCNAME("paaReadMem"); + + if (!data) + return (PIXAA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIXAA *)ERROR_PTR("stream not opened", procName, NULL); + + paa = pixaaReadStream(fp); + fclose(fp); + if (!paa) L_ERROR("paa not read\n", procName); + return paa; +} + + +/*! + * \brief pixaaWrite() + * + * \param[in] filename + * \param[in] paa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +l_ok +pixaaWrite(const char *filename, + PIXAA *paa) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("pixaaWrite"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return ERROR_INT("no libpng: can't read data", procName, 1); +#endif /* !HAVE_LIBPNG */ + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixaaWriteStream(fp, paa); + fclose(fp); + if (ret) + return ERROR_INT("paa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixaaWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] paa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pix are stored in the file as png.
+ *          If the png library is not linked, this will fail.
+ * 
+ */ +l_ok +pixaaWriteStream(FILE *fp, + PIXAA *paa) +{ + l_int32 n, i; + PIXA *pixa; + + PROCNAME("pixaaWriteStream"); + +#if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ + return ERROR_INT("no libpng: can't read data", procName, 1); +#endif /* !HAVE_LIBPNG */ + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + + n = pixaaGetCount(paa, NULL); + fprintf(fp, "\nPixaa Version %d\n", PIXAA_VERSION_NUMBER); + fprintf(fp, "Number of pixa = %d\n", n); + boxaWriteStream(fp, paa->boxa); + for (i = 0; i < n; i++) { + if ((pixa = pixaaGetPixa(paa, i, L_CLONE)) == NULL) + return ERROR_INT("pixa not found", procName, 1); + fprintf(fp, "\n\n --------------- pixa[%d] ---------------\n", i); + pixaWriteStream(fp, pixa); + pixaDestroy(&pixa); + } + return 0; +} + + +/*! + * \brief pixaaWriteMem() + * + * \param[out] pdata data of serialized pixaa + * \param[out] psize size of returned data + * \param[in] paa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a pixaa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +pixaaWriteMem(l_uint8 **pdata, + size_t *psize, + PIXAA *paa) +{ + l_int32 ret; + FILE *fp; + + PROCNAME("pixaaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixaaWriteStream(fp, paa); +#else + L_INFO("work-around: writing to a temp file\n", procName); +#ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#endif /* _WIN32 */ + ret = pixaaWriteStream(fp, paa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + diff --git a/3rdparty/hgOCR/leptonica/pixacc.c b/3rdparty/hgOCR/leptonica/pixacc.c new file mode 100644 index 00000000..f7aee0ac --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixacc.c @@ -0,0 +1,354 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file pixacc.c + *
+ *
+ *      Pixacc creation, destruction
+ *           PIXACC   *pixaccCreate()
+ *           PIXACC   *pixaccCreateFromPix()
+ *           void      pixaccDestroy()
+ *
+ *      Pixacc finalization
+ *           PIX      *pixaccFinal()
+ *
+ *      Pixacc accessors
+ *           PIX      *pixaccGetPix()
+ *           l_int32   pixaccGetOffset()
+ *
+ *      Pixacc accumulators
+ *           l_int32   pixaccAdd()
+ *           l_int32   pixaccSubtract()
+ *           l_int32   pixaccMultConst()
+ *           l_int32   pixaccMultConstAccumulate()
+ *
+ *  This is a simple interface for some of the pixel arithmetic operations
+ *  in pixarith.c.  These are easy to code up, but not as fast as
+ *  hand-coded functions that do arithmetic on corresponding pixels.
+ *
+ *  Suppose you want to make a linear combination of pix1 and pix2:
+ *     pixd = 0.4 * pix1 + 0.6 * pix2
+ *  where pix1 and pix2 are the same size and have depth 'd'.  Then:
+ *     Pixacc *pacc = pixaccCreateFromPix(pix1, 0);  // first; addition only
+ *     pixaccMultConst(pacc, 0.4);
+ *     pixaccMultConstAccumulate(pacc, pix2, 0.6);  // Add in 0.6 of the second
+ *     pixd = pixaccFinal(pacc, d);  // Get the result
+ *     pixaccDestroy(&pacc);
+ * 
+ */ + +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Pixacc creation, destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaccCreate() + * + * \param[in] w, h of 32 bpp internal Pix + * \param[in] negflag 0 if only positive numbers are involved; + * 1 if there will be negative numbers + * \return pixacc, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %negflag = 1 for safety if any negative numbers are going
+ *          to be used in the chain of operations.  Negative numbers
+ *          arise, e.g., by subtracting a pix, or by adding a pix
+ *          that has been pre-multiplied by a negative number.
+ *      (2) Initializes the internal 32 bpp pix, similarly to the
+ *          initialization in pixInitAccumulate().
+ * 
+ */ +PIXACC * +pixaccCreate(l_int32 w, + l_int32 h, + l_int32 negflag) +{ +PIXACC *pixacc; + + PROCNAME("pixaccCreate"); + + if ((pixacc = (PIXACC *)LEPT_CALLOC(1, sizeof(PIXACC))) == NULL) + return (PIXACC *)ERROR_PTR("pixacc not made", procName, NULL); + pixacc->w = w; + pixacc->h = h; + + if ((pixacc->pix = pixCreate(w, h, 32)) == NULL) { + pixaccDestroy(&pixacc); + return (PIXACC *)ERROR_PTR("pix not made", procName, NULL); + } + + if (negflag) { + pixacc->offset = 0x40000000; + pixSetAllArbitrary(pixacc->pix, pixacc->offset); + } + + return pixacc; +} + + +/*! + * \brief pixaccCreateFromPix() + * + * \param[in] pix + * \param[in] negflag 0 if only positive numbers are involved; + * 1 if there will be negative numbers + * \return pixacc, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixaccCreate()
+ * 
+ */ +PIXACC * +pixaccCreateFromPix(PIX *pix, + l_int32 negflag) +{ +l_int32 w, h; +PIXACC *pixacc; + + PROCNAME("pixaccCreateFromPix"); + + if (!pix) + return (PIXACC *)ERROR_PTR("pix not defined", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + pixacc = pixaccCreate(w, h, negflag); + pixaccAdd(pixacc, pix); + return pixacc; +} + + +/*! + * \brief pixaccDestroy() + * + * \param[in,out] ppixacc will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Always nulls the input ptr.
+ * 
+ */ +void +pixaccDestroy(PIXACC **ppixacc) +{ +PIXACC *pixacc; + + PROCNAME("pixaccDestroy"); + + if (ppixacc == NULL) { + L_WARNING("ptr address is NULL!", procName); + return; + } + + if ((pixacc = *ppixacc) == NULL) + return; + + pixDestroy(&pixacc->pix); + LEPT_FREE(pixacc); + *ppixacc = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Pixacc finalization * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaccFinal() + * + * \param[in] pixacc + * \param[in] outdepth 8, 16 or 32 bpp + * \return pixd 8, 16 or 32 bpp, or NULL on error + */ +PIX * +pixaccFinal(PIXACC *pixacc, + l_int32 outdepth) +{ + PROCNAME("pixaccFinal"); + + if (!pixacc) + return (PIX *)ERROR_PTR("pixacc not defined", procName, NULL); + + return pixFinalAccumulate(pixaccGetPix(pixacc), pixaccGetOffset(pixacc), + outdepth); +} + + +/*---------------------------------------------------------------------* + * Pixacc accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaccGetPix() + * + * \param[in] pixacc + * \return pix, or NULL on error + */ +PIX * +pixaccGetPix(PIXACC *pixacc) +{ + PROCNAME("pixaccGetPix"); + + if (!pixacc) + return (PIX *)ERROR_PTR("pixacc not defined", procName, NULL); + return pixacc->pix; +} + + +/*! + * \brief pixaccGetOffset() + * + * \param[in] pixacc + * \return offset, or -1 on error + */ +l_int32 +pixaccGetOffset(PIXACC *pixacc) +{ + PROCNAME("pixaccGetOffset"); + + if (!pixacc) + return ERROR_INT("pixacc not defined", procName, -1); + return pixacc->offset; +} + + +/*---------------------------------------------------------------------* + * Pixacc accumulators * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaccAdd() + * + * \param[in] pixacc + * \param[in] pix to be added + * \return 0 if OK, 1 on error + */ +l_ok +pixaccAdd(PIXACC *pixacc, + PIX *pix) +{ + PROCNAME("pixaccAdd"); + + if (!pixacc) + return ERROR_INT("pixacc not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_ADD); + return 0; +} + + +/*! + * \brief pixaccSubtract() + * + * \param[in] pixacc + * \param[in] pix to be subtracted + * \return 0 if OK, 1 on error + */ +l_ok +pixaccSubtract(PIXACC *pixacc, + PIX *pix) +{ + PROCNAME("pixaccSubtract"); + + if (!pixacc) + return ERROR_INT("pixacc not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_SUBTRACT); + return 0; +} + + +/*! + * \brief pixaccMultConst() + * + * \param[in] pixacc + * \param[in] factor + * \return 0 if OK, 1 on error + */ +l_ok +pixaccMultConst(PIXACC *pixacc, + l_float32 factor) +{ + PROCNAME("pixaccMultConst"); + + if (!pixacc) + return ERROR_INT("pixacc not defined", procName, 1); + pixMultConstAccumulate(pixaccGetPix(pixacc), factor, + pixaccGetOffset(pixacc)); + return 0; +} + + +/*! + * \brief pixaccMultConstAccumulate() + * + * \param[in] pixacc + * \param[in] pix + * \param[in] factor + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This creates a temp pix that is %pix multiplied by the
+ *          constant %factor.  It then adds that into %pixacc.
+ * 
+ */ +l_ok +pixaccMultConstAccumulate(PIXACC *pixacc, + PIX *pix, + l_float32 factor) +{ +l_int32 w, h, d, negflag; +PIX *pixt; +PIXACC *pacct; + + PROCNAME("pixaccMultConstAccumulate"); + + if (!pixacc) + return ERROR_INT("pixacc not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (factor == 0.0) return 0; + + pixGetDimensions(pix, &w, &h, &d); + negflag = (factor > 0.0) ? 0 : 1; + pacct = pixaccCreate(w, h, negflag); + pixaccAdd(pacct, pix); + pixaccMultConst(pacct, factor); + pixt = pixaccFinal(pacct, d); + pixaccAdd(pixacc, pixt); + + pixaccDestroy(&pacct); + pixDestroy(&pixt); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/pixafunc1.c b/3rdparty/hgOCR/leptonica/pixafunc1.c new file mode 100644 index 00000000..d8c1ed70 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixafunc1.c @@ -0,0 +1,2972 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixafunc1.c + *
+ *
+ *      Filters
+ *           PIX      *pixSelectBySize()
+ *           PIXA     *pixaSelectBySize()
+ *           NUMA     *pixaMakeSizeIndicator()
+ *
+ *           PIX      *pixSelectByPerimToAreaRatio()
+ *           PIXA     *pixaSelectByPerimToAreaRatio()
+ *           PIX      *pixSelectByPerimSizeRatio()
+ *           PIXA     *pixaSelectByPerimSizeRatio()
+ *           PIX      *pixSelectByAreaFraction()
+ *           PIXA     *pixaSelectByAreaFraction()
+ *           PIX      *pixSelectByWidthHeightRatio()
+ *           PIXA     *pixaSelectByWidthHeightRatio()
+ *           PIXA     *pixaSelectByNumConnComp()
+ *
+ *           PIXA     *pixaSelectWithIndicator()
+ *           l_int32   pixRemoveWithIndicator()
+ *           l_int32   pixAddWithIndicator()
+ *           PIXA     *pixaSelectWithString()
+ *           PIX      *pixaRenderComponent()
+ *
+ *      Sort functions
+ *           PIXA     *pixaSort()
+ *           PIXA     *pixaBinSort()
+ *           PIXA     *pixaSortByIndex()
+ *           PIXAA    *pixaSort2dByIndex()
+ *
+ *      Pixa and Pixaa range selection
+ *           PIXA     *pixaSelectRange()
+ *           PIXAA    *pixaaSelectRange()
+ *
+ *      Pixa and Pixaa scaling
+ *           PIXAA    *pixaaScaleToSize()
+ *           PIXAA    *pixaaScaleToSizeVar()
+ *           PIXA     *pixaScaleToSize()
+ *           PIXA     *pixaScaleToSizeRel()
+ *           PIXA     *pixaScale()
+ *           PIXA     *pixaScaleBySampling()
+ *
+ *      Pixa rotation and translation
+ *           PIXA     *pixaRotate()
+ *           PIXA     *pixaRotateOrth()
+ *           PIXA     *pixaTranslate()
+ *
+ *      Miscellaneous
+ *           PIXA     *pixaAddBorderGeneral()
+ *           PIXA     *pixaaFlattenToPixa()
+ *           l_int32   pixaaSizeRange()
+ *           l_int32   pixaSizeRange()
+ *           PIXA     *pixaClipToPix()
+ *           PIXA     *pixaClipToForeground()
+ *           l_int32   pixaGetRenderingDepth()
+ *           l_int32   pixaHasColor()
+ *           l_int32   pixaAnyColormaps()
+ *           l_int32   pixaGetDepthInfo()
+ *           PIXA     *pixaConvertToSameDepth()
+ *           l_int32   pixaEqual()
+ *           l_int32   pixaSetFullSizeBoxa()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* For more than this number of c.c. in a binarized image of + * semi-perimeter (w + h) about 5000 or less, the O(n) binsort + * is faster than the O(nlogn) shellsort. */ +static const l_int32 MinCompsForBinSort = 200; + + /* Don't rotate any angle smaller than this */ +static const l_float32 MinAngleToRotate = 0.001; /* radians; ~0.06 deg */ + + +/*---------------------------------------------------------------------* + * Filters * + *---------------------------------------------------------------------*/ +/* + * These filters work on the connected components of 1 bpp images. + * They are typically used on pixa that have been generated from a Pix + * using pixConnComp(), so that the corresponding Boxa is available. + * + * The filters remove or retain c.c. based on these properties: + * (a) size [pixaFindDimensions()] + * (b) area-to-perimeter ratio [pixaFindAreaPerimRatio()] + * (c) foreground area as a fraction of bounding box area (w * h) + * [pixaFindForegroundArea()] + * (d) number of foreground pixels [pixaCountPixels()] + * (e) width/height aspect ratio [pixFindWidthHeightRatio()] + * + * We provide two different high-level interfaces: + * (1) Functions that use one of the filters on either + * a pix or the pixa of components. + * (2) A general method that generates numas of indicator functions, + * logically combines them, and efficiently removes or adds + * the selected components. + * + * For interface (1), the filtering is performed with a single function call. + * This is the easiest way to do simple filtering. These functions + * are named pixSelectBy*() and pixaSelectBy*(), where the '*' is one of: + * Size + * PerimToAreaRatio + * PerimSizeRatio + * AreaFraction + * WidthHeightRatio + * + * For more complicated filtering, use the general method (2). + * The numa indicator functions for a pixa are generated by these functions: + * pixaFindDimensions() + * pixaFindPerimToAreaRatio() + * pixaFindPerimSizeRatio() + * pixaFindAreaFraction() + * pixaCountPixels() + * pixaFindWidthHeightRatio() + * pixaFindWidthHeightProduct() + * + * Here is an illustration using the general method. Suppose you want + * all 8-connected components that have a height greater than 40 pixels, + * a width not more than 30 pixels, between 150 and 300 fg pixels, + * and a perimeter-to-size ratio between 1.2 and 2.0. + * + * // Generate the pixa of 8 cc pieces. + * boxa = pixConnComp(pixs, &pixa, 8); + * + * // Extract the data we need about each component. + * pixaFindDimensions(pixa, &naw, &nah); + * nas = pixaCountPixels(pixa); + * nar = pixaFindPerimSizeRatio(pixa); + * + * // Build the indicator arrays for the set of components, + * // based on thresholds and selection criteria. + * na1 = numaMakeThresholdIndicator(nah, 40, L_SELECT_IF_GT); + * na2 = numaMakeThresholdIndicator(naw, 30, L_SELECT_IF_LTE); + * na3 = numaMakeThresholdIndicator(nas, 150, L_SELECT_IF_GTE); + * na4 = numaMakeThresholdIndicator(nas, 300, L_SELECT_IF_LTE); + * na5 = numaMakeThresholdIndicator(nar, 1.2, L_SELECT_IF_GTE); + * na6 = numaMakeThresholdIndicator(nar, 2.0, L_SELECT_IF_LTE); + * + * // Combine the indicator arrays logically to find + * // the components that will be retained. + * nad = numaLogicalOp(NULL, na1, na2, L_INTERSECTION); + * numaLogicalOp(nad, nad, na3, L_INTERSECTION); + * numaLogicalOp(nad, nad, na4, L_INTERSECTION); + * numaLogicalOp(nad, nad, na5, L_INTERSECTION); + * numaLogicalOp(nad, nad, na6, L_INTERSECTION); + * + * // Invert to get the components that will be removed. + * numaInvert(nad, nad); + * + * // Remove the components, in-place. + * pixRemoveWithIndicator(pixs, pixa, nad); + */ + + +/*! + * \brief pixSelectBySize() + * + * \param[in] pixs 1 bpp + * \param[in] width, height threshold dimensions + * \param[in] connectivity 4 or 8 + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 otherwise + * \return filtered pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) If unchanged, returns a copy of pixs.  Otherwise,
+ *          returns a new pix with the filtered components.
+ *      (3) If the selection type is L_SELECT_WIDTH, the input
+ *          height is ignored, and v.v.
+ *      (4) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +PIX * +pixSelectBySize(PIX *pixs, + l_int32 width, + l_int32 height, + l_int32 connectivity, + l_int32 type, + l_int32 relation, + l_int32 *pchanged) +{ +l_int32 w, h, empty, changed, count; +BOXA *boxa; +PIX *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixSelectBySize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid relation", procName, NULL); + if (pchanged) *pchanged = FALSE; + + /* Check if any components exist */ + pixZero(pixs, &empty); + if (empty) + return pixCopy(NULL, pixs); + + /* Identify and select the components */ + boxa = pixConnComp(pixs, &pixas, connectivity); + pixad = pixaSelectBySize(pixas, width, height, type, relation, &changed); + boxaDestroy(&boxa); + pixaDestroy(&pixas); + + if (!changed) { + pixaDestroy(&pixad); + return pixCopy(NULL, pixs); + } + + /* Render the result */ + if (pchanged) *pchanged = TRUE; + pixGetDimensions(pixs, &w, &h, NULL); + count = pixaGetCount(pixad); + if (count == 0) { /* return empty pix */ + pixd = pixCreateTemplate(pixs); + } else { + pixd = pixaDisplay(pixad, w, h); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + } + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaSelectBySize() + * + * \param[in] pixas + * \param[in] width, height threshold dimensions + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 otherwise + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) If the selection type is L_SELECT_WIDTH, the input
+ *          height is ignored, and v.v.
+ *      (4) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +PIXA * +pixaSelectBySize(PIXA *pixas, + l_int32 width, + l_int32 height, + l_int32 type, + l_int32 relation, + l_int32 *pchanged) +{ +NUMA *na; +PIXA *pixad; + + PROCNAME("pixaSelectBySize"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (PIXA *)ERROR_PTR("invalid relation", procName, NULL); + + /* Compute the indicator array for saving components */ + na = pixaMakeSizeIndicator(pixas, width, height, type, relation); + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, na, pchanged); + + numaDestroy(&na); + return pixad; +} + + +/*! + * \brief pixaMakeSizeIndicator() + * + * \param[in] pixa + * \param[in] width, height threshold dimensions + * \param[in] type L_SELECT_WIDTH, L_SELECT_HEIGHT, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return na indicator array, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) If the selection type is L_SELECT_WIDTH, the input
+ *          height is ignored, and v.v.
+ *      (3) To keep small components, use relation = L_SELECT_IF_LT or
+ *          L_SELECT_IF_LTE.
+ *          To keep large components, use relation = L_SELECT_IF_GT or
+ *          L_SELECT_IF_GTE.
+ * 
+ */ +NUMA * +pixaMakeSizeIndicator(PIXA *pixa, + l_int32 width, + l_int32 height, + l_int32 type, + l_int32 relation) +{ +l_int32 i, n, w, h, ival; +NUMA *na; + + PROCNAME("pixaMakeSizeIndicator"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (NUMA *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); + + n = pixaGetCount(pixa); + na = numaCreate(n); + for (i = 0; i < n; i++) { + ival = 0; + pixaGetPixDimensions(pixa, i, &w, &h, NULL); + switch (type) + { + case L_SELECT_WIDTH: + if ((relation == L_SELECT_IF_LT && w < width) || + (relation == L_SELECT_IF_GT && w > width) || + (relation == L_SELECT_IF_LTE && w <= width) || + (relation == L_SELECT_IF_GTE && w >= width)) + ival = 1; + break; + case L_SELECT_HEIGHT: + if ((relation == L_SELECT_IF_LT && h < height) || + (relation == L_SELECT_IF_GT && h > height) || + (relation == L_SELECT_IF_LTE && h <= height) || + (relation == L_SELECT_IF_GTE && h >= height)) + ival = 1; + break; + case L_SELECT_IF_EITHER: + if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || + ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || + ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || + ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) + ival = 1; + break; + case L_SELECT_IF_BOTH: + if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || + ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || + ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || + ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) + ival = 1; + break; + default: + L_WARNING("can't get here!\n", procName); + break; + } + numaAddNumber(na, ival); + } + + return na; +} + + +/*! + * \brief pixSelectByPerimToAreaRatio() + * + * \param[in] pixs 1 bpp + * \param[in] thresh threshold ratio of fg boundary to fg pixels + * \param[in] connectivity 4 or 8 + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) If unchanged, returns a copy of pixs.  Otherwise,
+ *          returns a new pix with the filtered components.
+ *      (3) This filters "thick" components, where a thick component
+ *          is defined to have a ratio of boundary to interior pixels
+ *          that is smaller than a given threshold value.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the thicker
+ *          components, and L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
+ * 
+ */ +PIX * +pixSelectByPerimToAreaRatio(PIX *pixs, + l_float32 thresh, + l_int32 connectivity, + l_int32 type, + l_int32 *pchanged) +{ +l_int32 w, h, empty, changed, count; +BOXA *boxa; +PIX *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixSelectByPerimToAreaRatio"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (pchanged) *pchanged = FALSE; + + /* Check if any components exist */ + pixZero(pixs, &empty); + if (empty) + return pixCopy(NULL, pixs); + + /* Filter thin components */ + boxa = pixConnComp(pixs, &pixas, connectivity); + pixad = pixaSelectByPerimToAreaRatio(pixas, thresh, type, &changed); + boxaDestroy(&boxa); + pixaDestroy(&pixas); + + if (!changed) { + pixaDestroy(&pixad); + return pixCopy(NULL, pixs); + } + + /* Render the result */ + if (pchanged) *pchanged = TRUE; + pixGetDimensions(pixs, &w, &h, NULL); + count = pixaGetCount(pixad); + if (count == 0) { /* return empty pix */ + pixd = pixCreateTemplate(pixs); + } else { + pixd = pixaDisplay(pixad, w, h); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + } + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaSelectByPerimToAreaRatio() + * + * \param[in] pixas + * \param[in] thresh threshold ratio of fg boundary to fg pixels + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) See pixSelectByPerimToAreaRatio().
+ * 
+ */ +PIXA * +pixaSelectByPerimToAreaRatio(PIXA *pixas, + l_float32 thresh, + l_int32 type, + l_int32 *pchanged) +{ +NUMA *na, *nai; +PIXA *pixad; + + PROCNAME("pixaSelectByPerimToAreaRatio"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + + /* Compute component ratios. */ + na = pixaFindPerimToAreaRatio(pixas); + + /* Generate indicator array for elements to be saved. */ + nai = numaMakeThresholdIndicator(na, thresh, type); + numaDestroy(&na); + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, nai, pchanged); + + numaDestroy(&nai); + return pixad; +} + + +/*! + * \brief pixSelectByPerimSizeRatio() + * + * \param[in] pixs 1 bpp + * \param[in] thresh threshold ratio of fg boundary to fg pixels + * \param[in] connectivity 4 or 8 + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the size of the
+ *          components that are kept.
+ *      (2) If unchanged, returns a copy of pixs.  Otherwise,
+ *          returns a new pix with the filtered components.
+ *      (3) This filters components with smooth vs. dendritic shape, using
+ *          the ratio of the fg boundary pixels to the circumference of
+ *          the bounding box, and comparing it to a threshold value.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the smooth
+ *          boundary components, and L_SELECT_IF_GT or L_SELECT_IF_GTE
+ *          to remove them.
+ * 
+ */ +PIX * +pixSelectByPerimSizeRatio(PIX *pixs, + l_float32 thresh, + l_int32 connectivity, + l_int32 type, + l_int32 *pchanged) +{ +l_int32 w, h, empty, changed, count; +BOXA *boxa; +PIX *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixSelectByPerimSizeRatio"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (pchanged) *pchanged = FALSE; + + /* Check if any components exist */ + pixZero(pixs, &empty); + if (empty) + return pixCopy(NULL, pixs); + + /* Filter thin components */ + boxa = pixConnComp(pixs, &pixas, connectivity); + pixad = pixaSelectByPerimSizeRatio(pixas, thresh, type, &changed); + boxaDestroy(&boxa); + pixaDestroy(&pixas); + + if (!changed) { + pixaDestroy(&pixad); + return pixCopy(NULL, pixs); + } + + /* Render the result */ + if (pchanged) *pchanged = TRUE; + pixGetDimensions(pixs, &w, &h, NULL); + count = pixaGetCount(pixad); + if (count == 0) { /* return empty pix */ + pixd = pixCreateTemplate(pixs); + } else { + pixd = pixaDisplay(pixad, w, h); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + } + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaSelectByPerimSizeRatio() + * + * \param[in] pixas + * \param[in] thresh threshold ratio of fg boundary to b.b. circumference + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) See pixSelectByPerimSizeRatio().
+ * 
+ */ +PIXA * +pixaSelectByPerimSizeRatio(PIXA *pixas, + l_float32 thresh, + l_int32 type, + l_int32 *pchanged) +{ +NUMA *na, *nai; +PIXA *pixad; + + PROCNAME("pixaSelectByPerimSizeRatio"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + + /* Compute component ratios. */ + na = pixaFindPerimSizeRatio(pixas); + + /* Generate indicator array for elements to be saved. */ + nai = numaMakeThresholdIndicator(na, thresh, type); + numaDestroy(&na); + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, nai, pchanged); + + numaDestroy(&nai); + return pixad; +} + + +/*! + * \brief pixSelectByAreaFraction() + * + * \param[in] pixs 1 bpp + * \param[in] thresh threshold ratio of fg pixels to (w * h) + * \param[in] connectivity 4 or 8 + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the amount of foreground
+ *          coverage of the components that are kept.
+ *      (2) If unchanged, returns a copy of pixs.  Otherwise,
+ *          returns a new pix with the filtered components.
+ *      (3) This filters components based on the fraction of fg pixels
+ *          of the component in its bounding box.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
+ *          with less than the threshold fraction of foreground, and
+ *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
+ * 
+ */ +PIX * +pixSelectByAreaFraction(PIX *pixs, + l_float32 thresh, + l_int32 connectivity, + l_int32 type, + l_int32 *pchanged) +{ +l_int32 w, h, empty, changed, count; +BOXA *boxa; +PIX *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixSelectByAreaFraction"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (pchanged) *pchanged = FALSE; + + /* Check if any components exist */ + pixZero(pixs, &empty); + if (empty) + return pixCopy(NULL, pixs); + + /* Filter components */ + boxa = pixConnComp(pixs, &pixas, connectivity); + pixad = pixaSelectByAreaFraction(pixas, thresh, type, &changed); + boxaDestroy(&boxa); + pixaDestroy(&pixas); + + if (!changed) { + pixaDestroy(&pixad); + return pixCopy(NULL, pixs); + } + + /* Render the result */ + if (pchanged) *pchanged = TRUE; + pixGetDimensions(pixs, &w, &h, NULL); + count = pixaGetCount(pixad); + if (count == 0) { /* return empty pix */ + pixd = pixCreateTemplate(pixs); + } else { + pixd = pixaDisplay(pixad, w, h); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + } + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaSelectByAreaFraction() + * + * \param[in] pixas + * \param[in] thresh threshold ratio of fg pixels to (w * h) + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) This filters components based on the fraction of fg pixels
+ *          of the component in its bounding box.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
+ *          with less than the threshold fraction of foreground, and
+ *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
+ * 
+ */ +PIXA * +pixaSelectByAreaFraction(PIXA *pixas, + l_float32 thresh, + l_int32 type, + l_int32 *pchanged) +{ +NUMA *na, *nai; +PIXA *pixad; + + PROCNAME("pixaSelectByAreaFraction"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + + /* Compute component ratios. */ + na = pixaFindAreaFraction(pixas); + + /* Generate indicator array for elements to be saved. */ + nai = numaMakeThresholdIndicator(na, thresh, type); + numaDestroy(&na); + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, nai, pchanged); + + numaDestroy(&nai); + return pixad; +} + + +/*! + * \brief pixSelectByWidthHeightRatio() + * + * \param[in] pixs 1 bpp + * \param[in] thresh threshold ratio of width/height + * \param[in] connectivity 4 or 8 + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The args specify constraints on the width-to-height ratio
+ *          for components that are kept.
+ *      (2) If unchanged, returns a copy of pixs.  Otherwise,
+ *          returns a new pix with the filtered components.
+ *      (3) This filters components based on the width-to-height ratios.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
+ *          with less than the threshold ratio, and
+ *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
+ * 
+ */ +PIX * +pixSelectByWidthHeightRatio(PIX *pixs, + l_float32 thresh, + l_int32 connectivity, + l_int32 type, + l_int32 *pchanged) +{ +l_int32 w, h, empty, changed, count; +BOXA *boxa; +PIX *pixd; +PIXA *pixas, *pixad; + + PROCNAME("pixSelectByWidthHeightRatio"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (pchanged) *pchanged = FALSE; + + /* Check if any components exist */ + pixZero(pixs, &empty); + if (empty) + return pixCopy(NULL, pixs); + + /* Filter components */ + boxa = pixConnComp(pixs, &pixas, connectivity); + pixad = pixaSelectByWidthHeightRatio(pixas, thresh, type, &changed); + boxaDestroy(&boxa); + pixaDestroy(&pixas); + + if (!changed) { + pixaDestroy(&pixad); + return pixCopy(NULL, pixs); + } + + /* Render the result */ + if (pchanged) *pchanged = TRUE; + pixGetDimensions(pixs, &w, &h, NULL); + count = pixaGetCount(pixad); + if (count == 0) { /* return empty pix */ + pixd = pixCreateTemplate(pixs); + } else { + pixd = pixaDisplay(pixad, w, h); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + } + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaSelectByWidthHeightRatio() + * + * \param[in] pixas + * \param[in] thresh threshold ratio of width/height + * \param[in] type L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) This filters components based on the width-to-height ratio
+ *          of each pix.
+ *      (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components
+ *          with less than the threshold ratio, and
+ *          L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them.
+ * 
+ */ +PIXA * +pixaSelectByWidthHeightRatio(PIXA *pixas, + l_float32 thresh, + l_int32 type, + l_int32 *pchanged) +{ +NUMA *na, *nai; +PIXA *pixad; + + PROCNAME("pixaSelectByWidthHeightRatio"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && + type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + + /* Compute component ratios. */ + na = pixaFindWidthHeightRatio(pixas); + + /* Generate indicator array for elements to be saved. */ + nai = numaMakeThresholdIndicator(na, thresh, type); + numaDestroy(&na); + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, nai, pchanged); + + numaDestroy(&nai); + return pixad; +} + + +/*! + * \brief pixaSelectByNumConnComp() + * + * \param[in] pixas + * \param[in] nmin minimum number of components + * \param[in] nmax maximum number of components + * \param[in] connectivity 4 or 8 + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) This filters by the number of connected components in
+ *          a given range.
+ * 
+ */ +PIXA * +pixaSelectByNumConnComp(PIXA *pixas, + l_int32 nmin, + l_int32 nmax, + l_int32 connectivity, + l_int32 *pchanged) +{ +l_int32 n, i, count; +NUMA *na; +PIX *pix; +PIXA *pixad; + + PROCNAME("pixaSelectByNumConnComp"); + + if (pchanged) *pchanged = 0; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (nmin > nmax) + return (PIXA *)ERROR_PTR("nmin > nmax", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + /* Get indicator array based on number of c.c. */ + n = pixaGetCount(pixas); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + pixCountConnComp(pix, connectivity, &count); + if (count >= nmin && count <= nmax) + numaAddNumber(na, 1); + else + numaAddNumber(na, 0); + pixDestroy(&pix); + } + + /* Filter to get output */ + pixad = pixaSelectWithIndicator(pixas, na, pchanged); + numaDestroy(&na); + return pixad; +} + + +/*! + * \brief pixaSelectWithIndicator() + * + * \param[in] pixas + * \param[in] na indicator numa + * \param[out] pchanged [optional] 1 if changed; 0 if clone returned + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa clone if no components are removed.
+ *      (2) Uses pix and box clones in the new pixa.
+ *      (3) The indicator numa has values 0 (ignore) and 1 (accept).
+ *      (4) If the source boxa is not fully populated, it is left
+ *          empty in the dest pixa.
+ * 
+ */ +PIXA * +pixaSelectWithIndicator(PIXA *pixas, + NUMA *na, + l_int32 *pchanged) +{ +l_int32 i, n, nbox, ival, nsave; +BOX *box; +PIX *pix1; +PIXA *pixad; + + PROCNAME("pixaSelectWithIndicator"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!na) + return (PIXA *)ERROR_PTR("na not defined", procName, NULL); + + nsave = 0; + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 1) nsave++; + } + + if (nsave == n) { + if (pchanged) *pchanged = FALSE; + return pixaCopy(pixas, L_CLONE); + } + if (pchanged) *pchanged = TRUE; + pixad = pixaCreate(nsave); + nbox = pixaGetBoxaCount(pixas); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 0) continue; + pix1 = pixaGetPix(pixas, i, L_CLONE); + pixaAddPix(pixad, pix1, L_INSERT); + if (nbox == n) { /* fully populated boxa */ + box = pixaGetBox(pixas, i, L_CLONE); + pixaAddBox(pixad, box, L_INSERT); + } + } + + return pixad; +} + + +/*! + * \brief pixRemoveWithIndicator() + * + * \param[in] pixs 1 bpp pix from which components are removed; in-place + * \param[in] pixa of connected components in pixs + * \param[in] na numa indicator: remove components corresponding to 1s + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This complements pixAddWithIndicator().   Here, the selected
+ *          components are set subtracted from pixs.
+ * 
+ */ +l_ok +pixRemoveWithIndicator(PIX *pixs, + PIXA *pixa, + NUMA *na) +{ +l_int32 i, n, ival, x, y, w, h; +BOX *box; +PIX *pix; + + PROCNAME("pixRemoveWithIndicator"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = pixaGetCount(pixa); + if (n != numaGetCount(na)) + return ERROR_INT("pixa and na sizes not equal", procName, 1); + + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 1) { + pix = pixaGetPix(pixa, i, L_CLONE); + box = pixaGetBox(pixa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pixs, x, y, w, h, PIX_DST & PIX_NOT(PIX_SRC), + pix, 0, 0); + boxDestroy(&box); + pixDestroy(&pix); + } + } + + return 0; +} + + +/*! + * \brief pixAddWithIndicator() + * + * \param[in] pixs 1 bpp pix from which components are added; in-place + * \param[in] pixa of connected components, some of which will be put + * into pixs + * \param[in] na numa indicator: add components corresponding to 1s + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This complements pixRemoveWithIndicator().   Here, the selected
+ *          components are added to pixs.
+ * 
+ */ +l_ok +pixAddWithIndicator(PIX *pixs, + PIXA *pixa, + NUMA *na) +{ +l_int32 i, n, ival, x, y, w, h; +BOX *box; +PIX *pix; + + PROCNAME("pixAddWithIndicator"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!na) + return ERROR_INT("na not defined", procName, 1); + n = pixaGetCount(pixa); + if (n != numaGetCount(na)) + return ERROR_INT("pixa and na sizes not equal", procName, 1); + + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &ival); + if (ival == 1) { + pix = pixaGetPix(pixa, i, L_CLONE); + box = pixaGetBox(pixa, i, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); + boxDestroy(&box); + pixDestroy(&pix); + } + } + + return 0; +} + + +/*! + * \brief pixaSelectWithString() + * + * \param[in] pixas + * \param[in] str string of indices into pixa, giving the pix to + * be selected + * \param[out] perror [optional] 1 if any indices are invalid; + * 0 if all indices are valid + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a pixa with copies of selected pix.
+ *      (2) Associated boxes are also copied, if fully populated.
+ * 
+ */ +PIXA * +pixaSelectWithString(PIXA *pixas, + const char *str, + l_int32 *perror) +{ +l_int32 i, nval, npix, nbox, val, imaxval; +l_float32 maxval; +BOX *box; +NUMA *na; +PIX *pix1; +PIXA *pixad; + + PROCNAME("pixaSelectWithString"); + + if (perror) *perror = 0; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!str) + return (PIXA *)ERROR_PTR("str not defined", procName, NULL); + + if ((na = numaCreateFromString(str)) == NULL) + return (PIXA *)ERROR_PTR("na not made", procName, NULL); + if ((nval = numaGetCount(na)) == 0) { + numaDestroy(&na); + return (PIXA *)ERROR_PTR("no indices found", procName, NULL); + } + numaGetMax(na, &maxval, NULL); + imaxval = (l_int32)(maxval + 0.1); + nbox = pixaGetBoxaCount(pixas); + npix = pixaGetCount(pixas); + if (imaxval >= npix) { + if (perror) *perror = 1; + L_ERROR("max index = %d, size of pixa = %d\n", procName, imaxval, npix); + } + + pixad = pixaCreate(nval); + for (i = 0; i < nval; i++) { + numaGetIValue(na, i, &val); + if (val < 0 || val >= npix) { + L_ERROR("index %d out of range of pix\n", procName, val); + continue; + } + pix1 = pixaGetPix(pixas, val, L_COPY); + pixaAddPix(pixad, pix1, L_INSERT); + if (nbox == npix) { /* fully populated boxa */ + box = pixaGetBox(pixas, val, L_COPY); + pixaAddBox(pixad, box, L_INSERT); + } + } + numaDestroy(&na); + return pixad; +} + + +/*! + * \brief pixaRenderComponent() + * + * \param[in] pixs [optional] 1 bpp pix + * \param[in] pixa of 1 bpp connected components, one of which will + * be rendered in pixs, with its origin determined + * by the associated box. + * \param[in] index of component to be rendered + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs is null, this generates an empty pix of a size determined
+ *          by union of the component bounding boxes, and including the origin.
+ *      (2) The selected component is blitted into pixs.
+ * 
+ */ +PIX * +pixaRenderComponent(PIX *pixs, + PIXA *pixa, + l_int32 index) +{ +l_int32 n, x, y, w, h, same, maxd; +BOX *box; +BOXA *boxa; +PIX *pix; + + PROCNAME("pixaRenderComponent"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, pixs); + n = pixaGetCount(pixa); + if (index < 0 || index >= n) + return (PIX *)ERROR_PTR("invalid index", procName, pixs); + if (pixs && (pixGetDepth(pixs) != 1)) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixs); + pixaVerifyDepth(pixa, &same, &maxd); + if (maxd > 1) + return (PIX *)ERROR_PTR("not all pix with d == 1", procName, pixs); + + boxa = pixaGetBoxa(pixa, L_CLONE); + if (!pixs) { + boxaGetExtent(boxa, &w, &h, NULL); + pixs = pixCreate(w, h, 1); + } + + pix = pixaGetPix(pixa, index, L_CLONE); + box = boxaGetBox(boxa, index, L_CLONE); + boxGetGeometry(box, &x, &y, &w, &h); + pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); + boxDestroy(&box); + pixDestroy(&pix); + boxaDestroy(&boxa); + + return pixs; +} + + +/*---------------------------------------------------------------------* + * Sort functions * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaSort() + * + * \param[in] pixas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, + * L_SORT_BY_HEIGHT, L_SORT_BY_MIN_DIMENSION, + * L_SORT_BY_MAX_DIMENSION, L_SORT_BY_PERIMETER, + * L_SORT_BY_AREA, L_SORT_BY_ASPECT_RATIO + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex [optional] index of sorted order into + * original array + * \param[in] copyflag L_COPY, L_CLONE + * \return pixad sorted version of pixas, or NULL on error + * + *
+ * Notes:
+ *      (1) This sorts based on the data in the boxa.  If the boxa
+ *          count is not the same as the pixa count, this returns an error.
+ *      (2) If the boxa is empty, it makes one corresponding to the
+ *          dimensions of each pix, which allows meaningful sorting on
+ *          all types except x and y.
+ *      (3) The copyflag refers to the pix and box copies that are
+ *          inserted into the sorted pixa.  These are either L_COPY
+ *          or L_CLONE.
+ * 
+ */ +PIXA * +pixaSort(PIXA *pixas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex, + l_int32 copyflag) +{ +l_int32 i, n, nb, x, y, w, h; +BOXA *boxa; +NUMA *na, *naindex; +PIXA *pixad; + + PROCNAME("pixaSort"); + + if (pnaindex) *pnaindex = NULL; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && + sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && + sorttype != L_SORT_BY_MIN_DIMENSION && + sorttype != L_SORT_BY_MAX_DIMENSION && + sorttype != L_SORT_BY_PERIMETER && + sorttype != L_SORT_BY_AREA && + sorttype != L_SORT_BY_ASPECT_RATIO) + return (PIXA *)ERROR_PTR("invalid sort type", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (PIXA *)ERROR_PTR("invalid sort order", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXA *)ERROR_PTR("invalid copy flag", procName, NULL); + + /* Check the pixa and boxa counts. Make a boxa if required. */ + if ((n = pixaGetCount(pixas)) == 0) { + L_INFO("no pix in pixa\n", procName); + return pixaCopy(pixas, copyflag); + } + if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ + return (PIXA *)ERROR_PTR("boxa not found!", procName, NULL); + nb = boxaGetCount(boxa); + if (nb == 0) { + pixaSetFullSizeBoxa(pixas); + nb = n; + boxa = pixas->boxa; /* not owned */ + if (sorttype == L_SORT_BY_X || sorttype == L_SORT_BY_Y) + L_WARNING("sort by x or y where all values are 0\n", procName); + } + if (nb != n) + return (PIXA *)ERROR_PTR("boxa and pixa counts differ", procName, NULL); + + /* Use O(n) binsort if possible */ + if (n > MinCompsForBinSort && + ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || + (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || + (sorttype == L_SORT_BY_PERIMETER))) + return pixaBinSort(pixas, sorttype, sortorder, pnaindex, copyflag); + + /* Build up numa of specific data */ + if ((na = numaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("na not made", procName, NULL); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + switch (sorttype) + { + case L_SORT_BY_X: + numaAddNumber(na, x); + break; + case L_SORT_BY_Y: + numaAddNumber(na, y); + break; + case L_SORT_BY_WIDTH: + numaAddNumber(na, w); + break; + case L_SORT_BY_HEIGHT: + numaAddNumber(na, h); + break; + case L_SORT_BY_MIN_DIMENSION: + numaAddNumber(na, L_MIN(w, h)); + break; + case L_SORT_BY_MAX_DIMENSION: + numaAddNumber(na, L_MAX(w, h)); + break; + case L_SORT_BY_PERIMETER: + numaAddNumber(na, w + h); + break; + case L_SORT_BY_AREA: + numaAddNumber(na, w * h); + break; + case L_SORT_BY_ASPECT_RATIO: + numaAddNumber(na, (l_float32)w / (l_float32)h); + break; + default: + L_WARNING("invalid sort type\n", procName); + } + } + + /* Get the sort index for data array */ + naindex = numaGetSortIndex(na, sortorder); + numaDestroy(&na); + if (!naindex) + return (PIXA *)ERROR_PTR("naindex not made", procName, NULL); + + /* Build up sorted pixa using sort index */ + if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) { + numaDestroy(&naindex); + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + } + + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + return pixad; +} + + +/*! + * \brief pixaBinSort() + * + * \param[in] pixas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, + * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex [optional] index of sorted order into + * original array + * \param[in] copyflag L_COPY, L_CLONE + * \return pixad sorted version of pixas, or NULL on error + * + *
+ * Notes:
+ *      (1) This sorts based on the data in the boxa.  If the boxa
+ *          count is not the same as the pixa count, this returns an error.
+ *      (2) The copyflag refers to the pix and box copies that are
+ *          inserted into the sorted pixa.  These are either L_COPY
+ *          or L_CLONE.
+ *      (3) For a large number of boxes (say, greater than 1000), this
+ *          O(n) binsort is much faster than the O(nlogn) shellsort.
+ *          For 5000 components, this is over 20x faster than boxaSort().
+ *      (4) Consequently, pixaSort() calls this function if it will
+ *          likely go much faster.
+ * 
+ */ +PIXA * +pixaBinSort(PIXA *pixas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex, + l_int32 copyflag) +{ +l_int32 i, n, x, y, w, h; +BOXA *boxa; +NUMA *na, *naindex; +PIXA *pixad; + + PROCNAME("pixaBinSort"); + + if (pnaindex) *pnaindex = NULL; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && + sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && + sorttype != L_SORT_BY_PERIMETER) + return (PIXA *)ERROR_PTR("invalid sort type", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (PIXA *)ERROR_PTR("invalid sort order", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXA *)ERROR_PTR("invalid copy flag", procName, NULL); + + /* Verify that the pixa and its boxa have the same count */ + if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ + return (PIXA *)ERROR_PTR("boxa not found", procName, NULL); + n = pixaGetCount(pixas); + if (boxaGetCount(boxa) != n) + return (PIXA *)ERROR_PTR("boxa and pixa counts differ", procName, NULL); + + /* Generate Numa of appropriate box dimensions */ + if ((na = numaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("na not made", procName, NULL); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + switch (sorttype) + { + case L_SORT_BY_X: + numaAddNumber(na, x); + break; + case L_SORT_BY_Y: + numaAddNumber(na, y); + break; + case L_SORT_BY_WIDTH: + numaAddNumber(na, w); + break; + case L_SORT_BY_HEIGHT: + numaAddNumber(na, h); + break; + case L_SORT_BY_PERIMETER: + numaAddNumber(na, w + h); + break; + default: + L_WARNING("invalid sort type\n", procName); + } + } + + /* Get the sort index for data array */ + naindex = numaGetBinSortIndex(na, sortorder); + numaDestroy(&na); + if (!naindex) + return (PIXA *)ERROR_PTR("naindex not made", procName, NULL); + + /* Build up sorted pixa using sort index */ + if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) { + numaDestroy(&naindex); + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + } + + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + return pixad; +} + + +/*! + * \brief pixaSortByIndex() + * + * \param[in] pixas + * \param[in] naindex na that maps from the new pixa to the input pixa + * \param[in] copyflag L_COPY, L_CLONE + * \return pixad sorted, or NULL on error + */ +PIXA * +pixaSortByIndex(PIXA *pixas, + NUMA *naindex, + l_int32 copyflag) +{ +l_int32 i, n, index; +BOX *box; +PIX *pix; +PIXA *pixad; + + PROCNAME("pixaSortByIndex"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!naindex) + return (PIXA *)ERROR_PTR("naindex not defined", procName, NULL); + if (copyflag != L_CLONE && copyflag != L_COPY) + return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + pix = pixaGetPix(pixas, index, copyflag); + box = pixaGetBox(pixas, index, copyflag); + pixaAddPix(pixad, pix, L_INSERT); + pixaAddBox(pixad, box, L_INSERT); + } + + return pixad; +} + + +/*! + * \brief pixaSort2dByIndex() + * + * \param[in] pixas + * \param[in] naa numaa that maps from the new pixaa to the input pixas + * \param[in] copyflag L_CLONE or L_COPY + * \return paa sorted, or NULL on error + */ +PIXAA * +pixaSort2dByIndex(PIXA *pixas, + NUMAA *naa, + l_int32 copyflag) +{ +l_int32 pixtot, ntot, i, j, n, nn, index; +BOX *box; +NUMA *na; +PIX *pix; +PIXA *pixa; +PIXAA *paa; + + PROCNAME("pixaSort2dByIndex"); + + if (!pixas) + return (PIXAA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!naa) + return (PIXAA *)ERROR_PTR("naindex not defined", procName, NULL); + + /* Check counts */ + ntot = numaaGetNumberCount(naa); + pixtot = pixaGetCount(pixas); + if (ntot != pixtot) + return (PIXAA *)ERROR_PTR("element count mismatch", procName, NULL); + + n = numaaGetCount(naa); + paa = pixaaCreate(n); + for (i = 0; i < n; i++) { + na = numaaGetNuma(naa, i, L_CLONE); + nn = numaGetCount(na); + pixa = pixaCreate(nn); + for (j = 0; j < nn; j++) { + numaGetIValue(na, j, &index); + pix = pixaGetPix(pixas, index, copyflag); + box = pixaGetBox(pixas, index, copyflag); + pixaAddPix(pixa, pix, L_INSERT); + pixaAddBox(pixa, box, L_INSERT); + } + pixaaAddPixa(paa, pixa, L_INSERT); + numaDestroy(&na); + } + + return paa; +} + + +/*---------------------------------------------------------------------* + * Pixa and Pixaa range selection * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaSelectRange() + * + * \param[in] pixas + * \param[in] first use 0 to select from the beginning + * \param[in] last use -1 to select to the end + * \param[in] copyflag L_COPY, L_CLONE + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) The copyflag specifies what we do with each pix from pixas.
+ *          Specifically, L_CLONE inserts a clone into pixad of each
+ *          selected pix from pixas.
+ * 
+ */ +PIXA * +pixaSelectRange(PIXA *pixas, + l_int32 first, + l_int32 last, + l_int32 copyflag) +{ +l_int32 n, npix, i; +PIX *pix; +PIXA *pixad; + + PROCNAME("pixaSelectRange"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + n = pixaGetCount(pixas); + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return (PIXA *)ERROR_PTR("invalid first", procName, NULL); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return (PIXA *)ERROR_PTR("first > last", procName, NULL); + + npix = last - first + 1; + pixad = pixaCreate(npix); + for (i = first; i <= last; i++) { + pix = pixaGetPix(pixas, i, copyflag); + pixaAddPix(pixad, pix, L_INSERT); + } + return pixad; +} + + +/*! + * \brief pixaaSelectRange() + * + * \param[in] paas + * \param[in] first use 0 to select from the beginning + * \param[in] last use -1 to select to the end + * \param[in] copyflag L_COPY, L_CLONE + * \return paad, or NULL on error + * + *
+ * Notes:
+ *      (1) The copyflag specifies what we do with each pixa from paas.
+ *          Specifically, L_CLONE inserts a clone into paad of each
+ *          selected pixa from paas.
+ * 
+ */ +PIXAA * +pixaaSelectRange(PIXAA *paas, + l_int32 first, + l_int32 last, + l_int32 copyflag) +{ +l_int32 n, npixa, i; +PIXA *pixa; +PIXAA *paad; + + PROCNAME("pixaaSelectRange"); + + if (!paas) + return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXAA *)ERROR_PTR("invalid copyflag", procName, NULL); + n = pixaaGetCount(paas, NULL); + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return (PIXAA *)ERROR_PTR("invalid first", procName, NULL); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return (PIXAA *)ERROR_PTR("first > last", procName, NULL); + + npixa = last - first + 1; + paad = pixaaCreate(npixa); + for (i = first; i <= last; i++) { + pixa = pixaaGetPixa(paas, i, copyflag); + pixaaAddPixa(paad, pixa, L_INSERT); + } + return paad; +} + + +/*---------------------------------------------------------------------* + * Pixa and Pixaa scaling * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaaScaleToSize() + * + * \param[in] paas + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return paad, or NULL on error + * + *
+ * Notes:
+ *      (1) This guarantees that each output scaled image has the
+ *          dimension(s) you specify.
+ *           ~ To specify the width with isotropic scaling, set %hd = 0.
+ *           ~ To specify the height with isotropic scaling, set %wd = 0.
+ *           ~ If both %wd and %hd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *           ~ It is an error to set both %wd and %hd to 0.
+ * 
+ */ +PIXAA * +pixaaScaleToSize(PIXAA *paas, + l_int32 wd, + l_int32 hd) +{ +l_int32 n, i; +PIXA *pixa1, *pixa2; +PIXAA *paad; + + PROCNAME("pixaaScaleToSize"); + + if (!paas) + return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); + if (wd <= 0 && hd <= 0) + return (PIXAA *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); + + n = pixaaGetCount(paas, NULL); + paad = pixaaCreate(n); + for (i = 0; i < n; i++) { + pixa1 = pixaaGetPixa(paas, i, L_CLONE); + pixa2 = pixaScaleToSize(pixa1, wd, hd); + pixaaAddPixa(paad, pixa2, L_INSERT); + pixaDestroy(&pixa1); + } + return paad; +} + + +/*! + * \brief pixaaScaleToSizeVar() + * + * \param[in] paas + * \param[in] nawd [optional] target widths; use NULL if using height + * \param[in] nahd [optional] target height; use NULL if using width + * \return paad, or NULL on error + * + *
+ * Notes:
+ *      (1) This guarantees that the scaled images in each pixa have the
+ *          dimension(s) you specify in the numas.
+ *           ~ To specify the width with isotropic scaling, set %nahd = NULL.
+ *           ~ To specify the height with isotropic scaling, set %nawd = NULL.
+ *           ~ If both %nawd and %nahd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *           ~ It is an error to set both %nawd and %nahd to NULL.
+ *      (2) If either nawd and/or nahd is defined, it must have the same
+ *          count as the number of pixa in paas.
+ * 
+ */ +PIXAA * +pixaaScaleToSizeVar(PIXAA *paas, + NUMA *nawd, + NUMA *nahd) +{ +l_int32 n, i, wd, hd; +PIXA *pixa1, *pixa2; +PIXAA *paad; + + PROCNAME("pixaaScaleToSizeVar"); + + if (!paas) + return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); + if (!nawd && !nahd) + return (PIXAA *)ERROR_PTR("!nawd && !nahd", procName, NULL); + + n = pixaaGetCount(paas, NULL); + if (nawd && (n != numaGetCount(nawd))) + return (PIXAA *)ERROR_PTR("nawd wrong size", procName, NULL); + if (nahd && (n != numaGetCount(nahd))) + return (PIXAA *)ERROR_PTR("nahd wrong size", procName, NULL); + paad = pixaaCreate(n); + for (i = 0; i < n; i++) { + wd = hd = 0; + if (nawd) numaGetIValue(nawd, i, &wd); + if (nahd) numaGetIValue(nahd, i, &hd); + pixa1 = pixaaGetPixa(paas, i, L_CLONE); + pixa2 = pixaScaleToSize(pixa1, wd, hd); + pixaaAddPixa(paad, pixa2, L_INSERT); + pixaDestroy(&pixa1); + } + return paad; +} + + +/*! + * \brief pixaScaleToSize() + * + * \param[in] pixas + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixaaScaleToSize()
+ * 
+ */ +PIXA * +pixaScaleToSize(PIXA *pixas, + l_int32 wd, + l_int32 hd) +{ +l_int32 n, i; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaScaleToSize"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + if (wd <= 0 && hd <= 0) /* no scaling requested */ + return pixaCopy(pixas, L_CLONE); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixScaleToSize(pix1, wd, hd); + pixCopyText(pix2, pix1); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + return pixad; +} + + +/*! + * \brief pixaScaleToSizeRel() + * + * \param[in] pixas + * \param[in] delw change in width, in pixels; 0 means no change + * \param[in] delh change in height, in pixels; 0 means no change + * return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) If a requested change in a pix is not possible because
+ *          either the requested width or height is <= 0, issue a
+ *          warning and return a copy.
+ * 
+ */ +PIXA * +pixaScaleToSizeRel(PIXA *pixas, + l_int32 delw, + l_int32 delh) +{ +l_int32 n, i; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaScaleToSizeRel"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixScaleToSizeRel(pix1, delw, delh); + if (pix2) { + pixaAddPix(pixad, pix2, L_INSERT); + } else { + L_WARNING("relative scale to size failed; use a copy\n", procName); + pixaAddPix(pixad, pix1, L_COPY); + } + pixDestroy(&pix1); + } + return pixad; +} + + +/*! + * \brief pixaScale() + * + * \param[in] pixas + * \param[in] scalex + * \param[in] scaley + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixas has a full boxes, it is scaled as well.
+ * 
+ */ +PIXA * +pixaScale(PIXA *pixas, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 i, n, nb; +BOXA *boxa1, *boxa2; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaScale"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIXA *)ERROR_PTR("invalid scaling parameters", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixScale(pix1, scalex, scaley); + pixCopyText(pix2, pix1); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa1 = pixaGetBoxa(pixas, L_CLONE); + nb = boxaGetCount(boxa1); + if (nb == n) { + boxa2 = boxaTransform(boxa1, 0, 0, scalex, scaley); + pixaSetBoxa(pixad, boxa2, L_INSERT); + } + boxaDestroy(&boxa1); + return pixad; +} + + +/*! + * \brief pixaScaleBySampling() + * + * \param[in] pixas + * \param[in] scalex + * \param[in] scaley + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixas has a full boxes, it is scaled as well.
+ * 
+ */ +PIXA * +pixaScaleBySampling(PIXA *pixas, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 i, n, nb; +BOXA *boxa1, *boxa2; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaScaleBySampling"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIXA *)ERROR_PTR("invalid scaling parameters", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixScaleBySampling(pix1, scalex, scaley); + pixCopyText(pix2, pix1); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa1 = pixaGetBoxa(pixas, L_CLONE); + nb = boxaGetCount(boxa1); + if (nb == n) { + boxa2 = boxaTransform(boxa1, 0, 0, scalex, scaley); + pixaSetBoxa(pixad, boxa2, L_INSERT); + } + boxaDestroy(&boxa1); + return pixad; +} + + +/*---------------------------------------------------------------------* + * Pixa rotation and translation * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaRotate() + * + * \param[in] pixas 1, 2, 4, 8, 32 bpp rgb + * \param[in] angle rotation angle in radians; clockwise is positive + * \param[in] type L_ROTATE_AREA_MAP, L_ROTATE_SHEAR, L_ROTATE_SAMPLING + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \param[in] width original width; use 0 to avoid embedding + * \param[in] height original height; use 0 to avoid embedding + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Each pix is rotated about its center.  See pixRotate() for details.
+ *      (2) The boxa array is copied.  Why is it not rotated?
+ *          If a boxa exists, the array of boxes is in 1-to-1
+ *          correspondence with the array of pix, and each box typically
+ *          represents the location of the pix relative to an image from
+ *          which it has been extracted.  Like the pix, we could rotate
+ *          each box around its center, and then generate a box that
+ *          contains all four corners, as is done in boxaRotate(), but
+ *          this seems unnecessary.
+ * 
+ */ +PIXA * +pixaRotate(PIXA *pixas, + l_float32 angle, + l_int32 type, + l_int32 incolor, + l_int32 width, + l_int32 height) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pixs, *pixd; +PIXA *pixad; + + PROCNAME("pixaRotate"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (type != L_ROTATE_SHEAR && type != L_ROTATE_AREA_MAP && + type != L_ROTATE_SAMPLING) + return (PIXA *)ERROR_PTR("invalid type", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIXA *)ERROR_PTR("invalid incolor", procName, NULL); + if (L_ABS(angle) < MinAngleToRotate) + return pixaCopy(pixas, L_COPY); + + n = pixaGetCount(pixas); + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + boxa = pixaGetBoxa(pixad, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + for (i = 0; i < n; i++) { + if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pixs not found", procName, NULL); + } + pixd = pixRotate(pixs, angle, type, incolor, width, height); + pixaAddPix(pixad, pixd, L_INSERT); + pixDestroy(&pixs); + } + + return pixad; +} + + +/*! + * \brief pixaRotateOrth() + * + * \param[in] pixas + * \param[in] rotation 0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; + * all rotations are clockwise + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates each pix in the pixa.  Rotates and saves the boxes in
+ *          the boxa if the boxa is full.
+ * 
+ */ +PIXA * +pixaRotateOrth(PIXA *pixas, + l_int32 rotation) +{ +l_int32 i, n, nb, w, h; +BOX *boxs, *boxd; +PIX *pixs, *pixd; +PIXA *pixad; + + PROCNAME("pixaRotateOrth"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (rotation < 0 || rotation > 3) + return (PIXA *)ERROR_PTR("rotation not in {0,1,2,3}", procName, NULL); + if (rotation == 0) + return pixaCopy(pixas, L_COPY); + + n = pixaGetCount(pixas); + nb = pixaGetBoxaCount(pixas); + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pixs not found", procName, NULL); + } + pixd = pixRotateOrth(pixs, rotation); + pixaAddPix(pixad, pixd, L_INSERT); + if (n == nb) { + boxs = pixaGetBox(pixas, i, L_COPY); + pixGetDimensions(pixs, &w, &h, NULL); + boxd = boxRotateOrth(boxs, w, h, rotation); + pixaAddBox(pixad, boxd, L_INSERT); + boxDestroy(&boxs); + } + pixDestroy(&pixs); + } + + return pixad; +} + + +/*! + * \brief pixaTranslate() + * + * \param[in] pixas + * \param[in] hshift horizontal shift; hshift > 0 is to right + * \param[in] vshift vertical shift; vshift > 0 is down + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixad, or NULL on error. + */ +PIXA * +pixaTranslate(PIXA *pixas, + l_int32 hshift, + l_int32 vshift, + l_int32 incolor) +{ +l_int32 i, n, nb; +BOXA *boxas, *boxad; +PIX *pixs, *pixd; +PIXA *pixad; + + PROCNAME("pixaTranslate"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (hshift == 0 && vshift == 0) + return pixaCopy(pixas, L_COPY); + + n = pixaGetCount(pixas); + nb = pixaGetBoxaCount(pixas); + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((pixs = pixaGetPix(pixas, i, L_CLONE)) == NULL) { + pixaDestroy(&pixad); + return (PIXA *)ERROR_PTR("pixs not found", procName, NULL); + } + pixd = pixTranslate(NULL, pixs, hshift, vshift, incolor); + pixaAddPix(pixad, pixd, L_INSERT); + pixDestroy(&pixs); + } + if (n == nb) { + boxas = pixaGetBoxa(pixas, L_CLONE); + boxad = boxaTransform(boxas, hshift, vshift, 1.0, 1.0); + pixaSetBoxa(pixad, boxad, L_INSERT); + boxaDestroy(&boxas); + } + + return pixad; +} + + +/*---------------------------------------------------------------------* + * Miscellaneous functions * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaAddBorderGeneral() + * + * \param[in] pixad can be null or equal to pixas + * \param[in] pixas containing pix of all depths; colormap ok + * \param[in] left, right, top, bot number of pixels added + * \param[in] val value of added border pixels + * \return pixad with border added to each pix, including on error + * + *
+ * Notes:
+ *      (1) For binary images:
+ *             white:  val = 0
+ *             black:  val = 1
+ *          For grayscale images:
+ *             white:  val = 2 ** d - 1
+ *             black:  val = 0
+ *          For rgb color images:
+ *             white:  val = 0xffffff00
+ *             black:  val = 0
+ *          For colormapped images, use 'index' found this way:
+ *             white: pixcmapGetRankIntensity(cmap, 1.0, &index);
+ *             black: pixcmapGetRankIntensity(cmap, 0.0, &index);
+ *      (2) For in-place replacement of each pix with a bordered version,
+ *          use %pixad = %pixas.  To make a new pixa, use %pixad = NULL.
+ *      (3) In both cases, the boxa has sides adjusted as if it were
+ *          expanded by the border.
+ * 
+ */ +PIXA * +pixaAddBorderGeneral(PIXA *pixad, + PIXA *pixas, + l_int32 left, + l_int32 right, + l_int32 top, + l_int32 bot, + l_uint32 val) +{ +l_int32 i, n, nbox; +BOX *box; +BOXA *boxad; +PIX *pixs, *pixd; + + PROCNAME("pixaAddBorderGeneral"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, pixad); + if (left < 0 || right < 0 || top < 0 || bot < 0) + return (PIXA *)ERROR_PTR("negative border added!", procName, pixad); + if (pixad && (pixad != pixas)) + return (PIXA *)ERROR_PTR("pixad defined but != pixas", procName, pixad); + + n = pixaGetCount(pixas); + if (!pixad) + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pixs = pixaGetPix(pixas, i, L_CLONE); + pixd = pixAddBorderGeneral(pixs, left, right, top, bot, val); + if (pixad == pixas) /* replace */ + pixaReplacePix(pixad, i, pixd, NULL); + else + pixaAddPix(pixad, pixd, L_INSERT); + pixDestroy(&pixs); + } + + nbox = pixaGetBoxaCount(pixas); + boxad = pixaGetBoxa(pixad, L_CLONE); + for (i = 0; i < nbox; i++) { + if ((box = pixaGetBox(pixas, i, L_COPY)) == NULL) { + L_WARNING("box %d not found\n", procName, i); + break; + } + boxAdjustSides(box, box, -left, right, -top, bot); + if (pixad == pixas) /* replace */ + boxaReplaceBox(boxad, i, box); + else + boxaAddBox(boxad, box, L_INSERT); + } + boxaDestroy(&boxad); + + return pixad; +} + + +/*! + * \brief pixaaFlattenToPixa() + * + * \param[in] paa + * \param[out] pnaindex [optional] the pixa index in the pixaa + * \param[in] copyflag L_COPY or L_CLONE + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the pixaa to a pixa, taking the pix in
+ *          order in the first pixa, then the second, etc.
+ *      (2) If &naindex is defined, we generate a Numa that gives, for
+ *          each pix in the pixaa, the index of the pixa to which it belongs.
+ * 
+ */ +PIXA * +pixaaFlattenToPixa(PIXAA *paa, + NUMA **pnaindex, + l_int32 copyflag) +{ +l_int32 i, j, m, mb, n; +BOX *box; +NUMA *naindex; +PIX *pix; +PIXA *pixa, *pixat; + + PROCNAME("pixaaFlattenToPixa"); + + if (pnaindex) *pnaindex = NULL; + if (!paa) + return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); + if (copyflag != L_COPY && copyflag != L_CLONE) + return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); + + if (pnaindex) { + naindex = numaCreate(0); + *pnaindex = naindex; + } + + n = pixaaGetCount(paa, NULL); + pixa = pixaCreate(n); + for (i = 0; i < n; i++) { + pixat = pixaaGetPixa(paa, i, L_CLONE); + m = pixaGetCount(pixat); + mb = pixaGetBoxaCount(pixat); + for (j = 0; j < m; j++) { + pix = pixaGetPix(pixat, j, copyflag); + pixaAddPix(pixa, pix, L_INSERT); + if (j < mb) { + box = pixaGetBox(pixat, j, copyflag); + pixaAddBox(pixa, box, L_INSERT); + } + if (pnaindex) + numaAddNumber(naindex, i); /* save 'row' number */ + } + pixaDestroy(&pixat); + } + + return pixa; +} + + +/*! + * \brief pixaaSizeRange() + * + * \param[in] paa + * \param[out] pminw, pminh, pmaxw, pmaxh [optional] range of + * dimensions of all boxes + * \return 0 if OK, 1 on error + */ +l_ok +pixaaSizeRange(PIXAA *paa, + l_int32 *pminw, + l_int32 *pminh, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ +l_int32 minw, minh, maxw, maxh, minpw, minph, maxpw, maxph, i, n; +PIXA *pixa; + + PROCNAME("pixaaSizeRange"); + + if (pminw) *pminw = 0; + if (pminh) *pminh = 0; + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!pminw && !pmaxw && !pminh && !pmaxh) + return ERROR_INT("no data can be returned", procName, 1); + + minw = minh = 100000000; + maxw = maxh = 0; + n = pixaaGetCount(paa, NULL); + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + pixaSizeRange(pixa, &minpw, &minph, &maxpw, &maxph); + if (minpw < minw) + minw = minpw; + if (minph < minh) + minh = minph; + if (maxpw > maxw) + maxw = maxpw; + if (maxph > maxh) + maxh = maxph; + pixaDestroy(&pixa); + } + + if (pminw) *pminw = minw; + if (pminh) *pminh = minh; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + return 0; +} + + +/*! + * \brief pixaSizeRange() + * + * \param[in] pixa + * \param[out] pminw, pminh, pmaxw, pmaxh [optional] range of + * dimensions of pix in the array + * \return 0 if OK, 1 on error + */ +l_ok +pixaSizeRange(PIXA *pixa, + l_int32 *pminw, + l_int32 *pminh, + l_int32 *pmaxw, + l_int32 *pmaxh) +{ +l_int32 minw, minh, maxw, maxh, i, n, w, h; +PIX *pix; + + PROCNAME("pixaSizeRange"); + + if (pminw) *pminw = 0; + if (pminh) *pminh = 0; + if (pmaxw) *pmaxw = 0; + if (pmaxh) *pmaxh = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!pminw && !pmaxw && !pminh && !pmaxh) + return ERROR_INT("no data can be returned", procName, 1); + + minw = minh = 1000000; + maxw = maxh = 0; + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + w = pixGetWidth(pix); + h = pixGetHeight(pix); + if (w < minw) + minw = w; + if (h < minh) + minh = h; + if (w > maxw) + maxw = w; + if (h > maxh) + maxh = h; + pixDestroy(&pix); + } + + if (pminw) *pminw = minw; + if (pminh) *pminh = minh; + if (pmaxw) *pmaxw = maxw; + if (pmaxh) *pmaxh = maxh; + + return 0; +} + + +/*! + * \brief pixaClipToPix() + * + * \param[in] pixas + * \param[in] pixs + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) This is intended for use in situations where pixas
+ *          was originally generated from the input pixs.
+ *      (2) Returns a pixad where each pix in pixas is ANDed
+ *          with its associated region of the input pixs.  This
+ *          region is specified by the the box that is associated
+ *          with the pix.
+ *      (3) In a typical application of this function, pixas has
+ *          a set of region masks, so this generates a pixa of
+ *          the parts of pixs that correspond to each region
+ *          mask component, along with the bounding box for
+ *          the region.
+ * 
+ */ +PIXA * +pixaClipToPix(PIXA *pixas, + PIX *pixs) +{ +l_int32 i, n; +BOX *box; +PIX *pix, *pixc; +PIXA *pixad; + + PROCNAME("pixaClipToPix"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + + n = pixaGetCount(pixas); + if ((pixad = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); + + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixas, i, L_CLONE); + box = pixaGetBox(pixas, i, L_COPY); + pixc = pixClipRectangle(pixs, box, NULL); + pixAnd(pixc, pixc, pix); + pixaAddPix(pixad, pixc, L_INSERT); + pixaAddBox(pixad, box, L_INSERT); + pixDestroy(&pix); + } + + return pixad; +} + + +/*! + * \brief pixaClipToForeground() + * + * \param[in] pixas + * \param[out] ppixad [optional] pixa of clipped pix returned + * \param[out] pboxa [optional] clipping boxes returned + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) At least one of [&pixd, &boxa] must be specified.
+ *      (2) Any pix with no fg pixels is skipped.
+ *      (3) See pixClipToForeground().
+ * 
+ */ +l_ok +pixaClipToForeground(PIXA *pixas, + PIXA **ppixad, + BOXA **pboxa) +{ +l_int32 i, n; +BOX *box1; +PIX *pix1, *pix2; + + PROCNAME("pixaClipToForeground"); + + if (ppixad) *ppixad = NULL; + if (pboxa) *pboxa = NULL; + if (!pixas) + return ERROR_INT("pixas not defined", procName, 1); + if (!ppixad && !pboxa) + return ERROR_INT("no output requested", procName, 1); + + n = pixaGetCount(pixas); + if (ppixad) *ppixad = pixaCreate(n); + if (pboxa) *pboxa = boxaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pixClipToForeground(pix1, &pix2, &box1); + pixDestroy(&pix1); + if (ppixad) + pixaAddPix(*ppixad, pix2, L_INSERT); + else + pixDestroy(&pix2); + if (pboxa) + boxaAddBox(*pboxa, box1, L_INSERT); + else + boxDestroy(&box1); + } + + return 0; +} + + +/*! + * \brief pixaGetRenderingDepth() + * + * \param[in] pixa + * \param[out] pdepth depth required to render if all colormaps are removed + * \return 0 if OK; 1 on error + */ +l_ok +pixaGetRenderingDepth(PIXA *pixa, + l_int32 *pdepth) +{ +l_int32 hascolor, maxdepth; + + PROCNAME("pixaGetRenderingDepth"); + + if (!pdepth) + return ERROR_INT("&depth not defined", procName, 1); + *pdepth = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + pixaHasColor(pixa, &hascolor); + if (hascolor) { + *pdepth = 32; + return 0; + } + + pixaGetDepthInfo(pixa, &maxdepth, NULL); + if (maxdepth == 1) + *pdepth = 1; + else /* 2, 4, 8 or 16 */ + *pdepth = 8; + return 0; +} + + +/*! + * \brief pixaHasColor() + * + * \param[in] pixa + * \param[out] phascolor 1 if any pix is rgb or has a colormap with color; + * 0 otherwise + * \return 0 if OK; 1 on error + */ +l_ok +pixaHasColor(PIXA *pixa, + l_int32 *phascolor) +{ +l_int32 i, n, hascolor, d; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixaHasColor"); + + if (!phascolor) + return ERROR_INT("&hascolor not defined", procName, 1); + *phascolor = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + hascolor = 0; + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + if ((cmap = pixGetColormap(pix)) != NULL) + pixcmapHasColor(cmap, &hascolor); + d = pixGetDepth(pix); + pixDestroy(&pix); + if (d == 32 || hascolor == 1) { + *phascolor = 1; + break; + } + } + + return 0; +} + + +/*! + * \brief pixaAnyColormaps() + * + * \param[in] pixa + * \param[out] phascmap 1 if any pix has a colormap; 0 otherwise + * \return 0 if OK; 1 on error + */ +l_ok +pixaAnyColormaps(PIXA *pixa, + l_int32 *phascmap) +{ +l_int32 i, n; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixaAnyColormaps"); + + if (!phascmap) + return ERROR_INT("&hascmap not defined", procName, 1); + *phascmap = 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + cmap = pixGetColormap(pix); + pixDestroy(&pix); + if (cmap) { + *phascmap = 1; + return 0; + } + } + + return 0; +} + + +/*! + * \brief pixaGetDepthInfo() + * + * \param[in] pixa + * \param[out] pmaxdepth [optional] max pixel depth of pix in pixa + * \param[out] psame [optional] true if all depths are equal + * \return 0 if OK; 1 on error + */ +l_ok +pixaGetDepthInfo(PIXA *pixa, + l_int32 *pmaxdepth, + l_int32 *psame) +{ +l_int32 i, n, d, d0; +l_int32 maxd, same; /* depth info */ + + PROCNAME("pixaGetDepthInfo"); + + if (pmaxdepth) *pmaxdepth = 0; + if (psame) *psame = TRUE; + if (!pmaxdepth && !psame) return 0; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if ((n = pixaGetCount(pixa)) == 0) + return ERROR_INT("pixa is empty", procName, 1); + + same = TRUE; + maxd = 0; + for (i = 0; i < n; i++) { + pixaGetPixDimensions(pixa, i, NULL, NULL, &d); + if (i == 0) + d0 = d; + else if (d != d0) + same = FALSE; + if (d > maxd) maxd = d; + } + + if (pmaxdepth) *pmaxdepth = maxd; + if (psame) *psame = same; + return 0; +} + + +/*! + * \brief pixaConvertToSameDepth() + * + * \param[in] pixas + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) If any pix has a colormap, they are all converted to rgb.
+ *          Otherwise, they are all converted to the maximum depth of
+ *          all the pix.
+ *      (2) This can be used to allow lossless rendering onto a single pix.
+ * 
+ */ +PIXA * +pixaConvertToSameDepth(PIXA *pixas) +{ +l_int32 i, n, same, hascmap, maxdepth; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixa1, *pixad; + + PROCNAME("pixaConvertToSameDepth"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + /* Remove colormaps to rgb */ + if ((n = pixaGetCount(pixas)) == 0) + return (PIXA *)ERROR_PTR("no components", procName, NULL); + pixaAnyColormaps(pixas, &hascmap); + if (hascmap) { + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + } else { + pixa1 = pixaCopy(pixas, L_CLONE); + } + + pixaGetDepthInfo(pixa1, &maxdepth, &same); + if (!same) { /* at least one pix has depth < maxdepth */ + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + if (maxdepth <= 8) + pix2 = pixConvertTo8(pix1, 0); + else + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + } else { + pixad = pixaCopy(pixa1, L_CLONE); + } + + boxa = pixaGetBoxa(pixas, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + pixaDestroy(&pixa1); + return pixad; +} + + +/*! + * \brief pixaEqual() + * + * \param[in] pixa1 + * \param[in] pixa2 + * \param[in] maxdist + * \param[out] pnaindex [optional] index array of correspondences + * \param[out] psame 1 if equal; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The two pixa are the "same" if they contain the same
+ *          boxa and the same ordered set of pix.  However, if they
+ *          have boxa, the pix in each pixa can differ in ordering
+ *          by an amount given by the parameter %maxdist.  If they
+ *          don't have a boxa, the %maxdist parameter is ignored,
+ *          and the ordering of the pix must be identical.
+ *      (2) This applies only to boxa geometry, pixels and ordering;
+ *          other fields in the pix are ignored.
+ *      (3) naindex[i] gives the position of the box in pixa2 that
+ *          corresponds to box i in pixa1.  It is only returned if the
+ *          pixa have boxa and the boxa are equal.
+ *      (4) In situations where the ordering is very different, so that
+ *          a large %maxdist is required for "equality", this should be
+ *          implemented with a hash function for efficiency.
+ * 
+ */ +l_ok +pixaEqual(PIXA *pixa1, + PIXA *pixa2, + l_int32 maxdist, + NUMA **pnaindex, + l_int32 *psame) +{ +l_int32 i, j, n, empty1, empty2, same, sameboxa; +BOXA *boxa1, *boxa2; +NUMA *na; +PIX *pix1, *pix2; + + PROCNAME("pixaEqual"); + + if (pnaindex) *pnaindex = NULL; + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + sameboxa = 0; + na = NULL; + if (!pixa1 || !pixa2) + return ERROR_INT("pixa1 and pixa2 not both defined", procName, 1); + n = pixaGetCount(pixa1); + if (n != pixaGetCount(pixa2)) + return 0; + + /* If there are no boxes, strict ordering of the pix in each + * pixa is required. */ + boxa1 = pixaGetBoxa(pixa1, L_CLONE); + boxa2 = pixaGetBoxa(pixa2, L_CLONE); + empty1 = (boxaGetCount(boxa1) == 0) ? 1 : 0; + empty2 = (boxaGetCount(boxa2) == 0) ? 1 : 0; + if (!empty1 && !empty2) { + boxaEqual(boxa1, boxa2, maxdist, &na, &sameboxa); + if (!sameboxa) { + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + numaDestroy(&na); + return 0; + } + } + boxaDestroy(&boxa1); + boxaDestroy(&boxa2); + if ((!empty1 && empty2) || (empty1 && !empty2)) + return 0; + + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + if (na) + numaGetIValue(na, i, &j); + else + j = i; + pix2 = pixaGetPix(pixa2, j, L_CLONE); + pixEqual(pix1, pix2, &same); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (!same) { + numaDestroy(&na); + return 0; + } + } + + *psame = 1; + if (pnaindex) + *pnaindex = na; + else + numaDestroy(&na); + return 0; +} + + +/*! + * \brief pixaSetFullSizeBoxa() + * + * \param[in] pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Replaces the existing boxa.  Each box gives the dimensions
+ *          of the corresponding pix.  This is needed for functions
+ *          like pixaSort() that sort based on the boxes.
+ * 
+ */ +l_ok +pixaSetFullSizeBoxa(PIXA *pixa) +{ +l_int32 i, n, w, h; +BOX *box; +BOXA *boxa; +PIX *pix; + + PROCNAME("pixaSetFullSizeBoxa"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if ((n = pixaGetCount(pixa)) == 0) { + L_INFO("pixa contains no pix\n", procName); + return 0; + } + + boxa = boxaCreate(n); + pixaSetBoxa(pixa, boxa, L_INSERT); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pix, &w, &h, NULL); + box = boxCreate(0, 0, w, h); + boxaAddBox(boxa, box, L_INSERT); + pixDestroy(&pix); + } + return 0; +} + diff --git a/3rdparty/hgOCR/leptonica/pixafunc2.c b/3rdparty/hgOCR/leptonica/pixafunc2.c new file mode 100644 index 00000000..9081013b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixafunc2.c @@ -0,0 +1,2768 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixafunc2.c + *
+ *
+ *      Pixa display (render into a pix)
+ *           PIX      *pixaDisplay()
+ *           PIX      *pixaDisplayOnColor()
+ *           PIX      *pixaDisplayRandomCmap()
+ *           PIX      *pixaDisplayLinearly()
+ *           PIX      *pixaDisplayOnLattice()
+ *           PIX      *pixaDisplayUnsplit()
+ *           PIX      *pixaDisplayTiled()
+ *           PIX      *pixaDisplayTiledInRows()
+ *           PIX      *pixaDisplayTiledInColumns()
+ *           PIX      *pixaDisplayTiledAndScaled()
+ *           PIX      *pixaDisplayTiledWithText()
+ *           PIX      *pixaDisplayTiledByIndex()
+ *
+ *      Pixaa display (render into a pix)
+ *           PIX      *pixaaDisplay()
+ *           PIX      *pixaaDisplayByPixa()
+ *           PIXA     *pixaaDisplayTiledAndScaled()
+ *
+ *      Conversion of all pix to specified type (e.g., depth)
+ *           PIXA     *pixaConvertTo1()
+ *           PIXA     *pixaConvertTo8()
+ *           PIXA     *pixaConvertTo8Colormap()
+ *           PIXA     *pixaConvertTo32()
+ *
+ *      Pixa constrained selection and pdf generation
+ *           PIXA     *pixaConstrainedSelect()
+ *           l_int32   pixaSelectToPdf()
+ *
+ *      Generate pixa from tiled images
+ *           PIXA     *pixaMakeFromTiledPixa()
+ *           PIXA     *pixaMakeFromTiledPix()
+ *           l_int32   pixGetTileCount()
+ *
+ *      Pixa display into multiple tiles
+ *           PIXA     *pixaDisplayMultiTiled()
+ *
+ *      Split pixa into files
+ *           l_int32   pixaSplitIntoFiles()
+ *
+ *      Tile N-Up
+ *           l_int32   convertToNUpFiles()
+ *           PIXA     *convertToNUpPixa()
+ *           PIXA     *pixaConvertToNUpPixa()
+ *
+ *      Render two pixa side-by-side for comparison                   *
+ *           l_int32   pixaCompareInPdf()
+ *
+ *  We give twelve pixaDisplay*() methods for tiling a pixa in a pix.
+ *  Some work for 1 bpp input; others for any input depth.
+ *  Some give an output depth that depends on the input depth;
+ *  others give a different output depth or allow you to choose it.
+ *  Some use a boxes to determine where each pix goes; others tile
+ *  onto a regular lattice; others tile onto an irregular lattice;
+ *  one uses an associated index array to determine which column
+ *  each pix goes into.
+ *
+ *  Here is a brief description of what the pixa display functions do.
+ *
+ *    pixaDisplay()
+ *        This uses the boxes in the pixa to lay out each pix.  This
+ *        can be used to reconstruct a pix that has been broken into
+ *        components, if the boxes represents the positions of the
+ *        components in the original image.
+ *    pixaDisplayOnColor()
+ *        pixaDisplay() with choice of background color.
+ *    pixaDisplayRandomCmap()
+ *        This also uses the boxes to lay out each pix.  However, it creates
+ *        a colormapped dest, where each 1 bpp pix is given a randomly
+ *        generated color (up to 256 are used).
+ *    pixaDisplayLinearly()
+ *        This puts each pix, sequentially, in a line, either horizontally
+ *        or vertically.
+ *    pixaDisplayOnLattice()
+ *        This puts each pix, sequentially, onto a regular lattice,
+ *        omitting any pix that are too big for the lattice size.
+ *        This is useful, for example, to store bitmapped fonts,
+ *        where all the characters are stored in a single image.
+ *    pixaDisplayUnsplit()
+ *        This lays out a mosaic of tiles (the pix in the pixa) that
+ *        are all of equal size.  (Don't use this for unequal sized pix!)
+ *        For example, it can be used to invert the action of
+ *        pixaSplitPix().
+ *    pixaDisplayTiled()
+ *        Like pixaDisplayOnLattice(), this places each pix on a regular
+ *        lattice, but here the lattice size is determined by the
+ *        largest component, and no components are omitted.  This is
+ *        dangerous if there are thousands of small components and
+ *        one or more very large one, because the size of the resulting
+ *        pix can be huge!
+ *    pixaDisplayTiledInRows()
+ *        This puts each pix down in a series of rows, where the upper
+ *        edges of each pix in a row are aligned and there is a uniform
+ *        spacing between the pix.  The height of each row is determined
+ *        by the tallest pix that was put in the row.  This function
+ *        is a reasonably efficient way to pack the subimages.
+ *        A boxa of the locations of each input pix is stored in the output.
+ *    pixaDisplayTiledInColumns()
+ *        This puts each pix down in a series of rows, each row having
+ *        a specified number of pix.  The upper edges of each pix in a
+ *        row are aligned and there is a uniform spacing between the pix.
+ *        The height of each row is determined by the tallest pix that
+ *        was put in the row.  A boxa of the locations of each input
+ *        pix is stored in the output.
+ *    pixaDisplayTiledAndScaled()
+ *        This scales each pix to a given width and output depth, and then
+ *        tiles them in rows with a given number placed in each row.
+ *        This is useful for presenting a sequence of images that can be
+ *        at different resolutions, but which are derived from the same
+ *        initial image.
+ *    pixaDisplayTiledWithText()
+ *        This is a version of pixaDisplayTiledInRows() that prints, below
+ *        each pix, the text in the pix text field.  It renders a pixa
+ *        to an image with white background that does not exceed a
+ *        given value in width.
+ *    pixaDisplayTiledByIndex()
+ *        This scales each pix to a given width and output depth,
+ *        and then tiles them in columns corresponding to the value
+ *        in an associated numa.  All pix with the same index value are
+ *        rendered in the same column.  Text in the pix text field are
+ *        rendered below the pix.
+ * 
+ */ + +#include +#include /* for sqrt() */ +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Pixa Display * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaDisplay() + * + * \param[in] pixa + * \param[in] w, h if set to 0, the size is determined from the + * bounding box of the components in pixa + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses the boxes to place each pix in the rendered composite.
+ *      (2) Set w = h = 0 to use the b.b. of the components to determine
+ *          the size of the returned pix.
+ *      (3) Uses the first pix in pixa to determine the depth.
+ *      (4) The background is written "white".  On 1 bpp, each successive
+ *          pix is "painted" (adding foreground), whereas for grayscale
+ *          or color each successive pix is blitted with just the src.
+ *      (5) If the pixa is empty, returns an empty 1 bpp pix.
+ * 
+ */ +PIX * +pixaDisplay(PIXA *pixa, + l_int32 w, + l_int32 h) +{ +l_int32 i, n, d, xb, yb, wb, hb, res; +BOXA *boxa; +PIX *pix1, *pixd; + + PROCNAME("pixaDisplay"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + + n = pixaGetCount(pixa); + if (n == 0 && w == 0 && h == 0) + return (PIX *)ERROR_PTR("no components; no size", procName, NULL); + if (n == 0) { + L_WARNING("no components; returning empty 1 bpp pix\n", procName); + return pixCreate(w, h, 1); + } + + /* If w and h not input, determine the minimum size required + * to contain the origin and all c.c. */ + if (w == 0 || h == 0) { + boxa = pixaGetBoxa(pixa, L_CLONE); + boxaGetExtent(boxa, &w, &h, NULL); + boxaDestroy(&boxa); + if (w == 0 || h == 0) + return (PIX *)ERROR_PTR("no associated boxa", procName, NULL); + } + + /* Use the first pix in pixa to determine depth and resolution */ + pix1 = pixaGetPix(pixa, 0, L_CLONE); + d = pixGetDepth(pix1); + res = pixGetXRes(pix1); + pixDestroy(&pix1); + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSetResolution(pixd, res, res); + if (d > 1) + pixSetAll(pixd); + for (i = 0; i < n; i++) { + if (pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb)) { + L_WARNING("no box found!\n", procName); + continue; + } + pix1 = pixaGetPix(pixa, i, L_CLONE); + if (d == 1) + pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix1, 0, 0); + else + pixRasterop(pixd, xb, yb, wb, hb, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + } + + return pixd; +} + + +/*! + * \brief pixaDisplayOnColor() + * + * \param[in] pixa + * \param[in] w, h if set to 0, the size is determined from the + * bounding box of the components in pixa + * \param[in] bgcolor background color to use + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses the boxes to place each pix in the rendered composite.
+ *      (2) Set w = h = 0 to use the b.b. of the components to determine
+ *          the size of the returned pix.
+ *      (3) If any pix in %pixa are colormapped, or if the pix have
+ *          different depths, it returns a 32 bpp pix.  Otherwise,
+ *          the depth of the returned pixa equals that of the pix in %pixa.
+ *      (4) If the pixa is empty, return null.
+ * 
+ */ +PIX * +pixaDisplayOnColor(PIXA *pixa, + l_int32 w, + l_int32 h, + l_uint32 bgcolor) +{ +l_int32 i, n, xb, yb, wb, hb, hascmap, maxdepth, same, res; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixat; + + PROCNAME("pixaDisplayOnColor"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + + /* If w and h are not input, determine the minimum size + * required to contain the origin and all c.c. */ + if (w == 0 || h == 0) { + boxa = pixaGetBoxa(pixa, L_CLONE); + boxaGetExtent(boxa, &w, &h, NULL); + boxaDestroy(&boxa); + } + + /* If any pix have colormaps, or if they have different depths, + * generate rgb */ + pixaAnyColormaps(pixa, &hascmap); + pixaGetDepthInfo(pixa, &maxdepth, &same); + if (hascmap || !same) { + maxdepth = 32; + pixat = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixat, pix2, L_INSERT); + pixDestroy(&pix1); + } + } else { + pixat = pixaCopy(pixa, L_CLONE); + } + + /* Make the output pix and set the background color */ + if ((pixd = pixCreate(w, h, maxdepth)) == NULL) { + pixaDestroy(&pixat); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + if ((maxdepth == 1 && bgcolor > 0) || + (maxdepth == 2 && bgcolor >= 0x3) || + (maxdepth == 4 && bgcolor >= 0xf) || + (maxdepth == 8 && bgcolor >= 0xff) || + (maxdepth == 16 && bgcolor >= 0xffff) || + (maxdepth == 32 && bgcolor >= 0xffffff00)) { + pixSetAll(pixd); + } else if (bgcolor > 0) { + pixSetAllArbitrary(pixd, bgcolor); + } + + /* Blit each pix into its place */ + for (i = 0; i < n; i++) { + if (pixaGetBoxGeometry(pixat, i, &xb, &yb, &wb, &hb)) { + L_WARNING("no box found!\n", procName); + continue; + } + pix1 = pixaGetPix(pixat, i, L_CLONE); + if (i == 0) res = pixGetXRes(pix1); + pixRasterop(pixd, xb, yb, wb, hb, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + } + pixSetResolution(pixd, res, res); + + pixaDestroy(&pixat); + return pixd; +} + + +/*! + * \brief pixaDisplayRandomCmap() + * + * \param[in] pixa 1 bpp regions, with boxa delineating those regions + * \param[in] w, h if set to 0, the size is determined from the + * bounding box of the components in pixa + * \return pix 8 bpp, cmapped, with random colors assigned to each region, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) This uses the boxes to place each pix in the rendered composite.
+ *          The fg of each pix in %pixa, such as a single connected
+ *          component or a line of text, is given a random color.
+ *      (2) By default, the background color is black (cmap index 0).
+ *          This can be changed by pixcmapResetColor()
+ * 
+ */ +PIX * +pixaDisplayRandomCmap(PIXA *pixa, + l_int32 w, + l_int32 h) +{ +l_int32 i, n, same, maxd, index, xb, yb, wb, hb, res; +BOXA *boxa; +PIX *pixs, *pix1, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixaDisplayRandomCmap"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + pixaVerifyDepth(pixa, &same, &maxd); + if (maxd > 1) + return (PIX *)ERROR_PTR("not all components are 1 bpp", procName, NULL); + + /* If w and h are not input, determine the minimum size required + * to contain the origin and all c.c. */ + if (w == 0 || h == 0) { + boxa = pixaGetBoxa(pixa, L_CLONE); + boxaGetExtent(boxa, &w, &h, NULL); + boxaDestroy(&boxa); + } + + /* Set up an 8 bpp dest pix, with a colormap with 254 random colors */ + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreateRandom(8, 1, 1); + pixSetColormap(pixd, cmap); + + /* Color each component and blit it in */ + for (i = 0; i < n; i++) { + index = 1 + (i % 254); + pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); + pixs = pixaGetPix(pixa, i, L_CLONE); + if (i == 0) res = pixGetXRes(pixs); + pix1 = pixConvert1To8(NULL, pixs, 0, index); + pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix1, 0, 0); + pixDestroy(&pixs); + pixDestroy(&pix1); + } + + pixSetResolution(pixd, res, res); + return pixd; +} + + +/*! + * \brief pixaDisplayLinearly() + * + * \param[in] pixas + * \param[in] direction L_HORIZ or L_VERT + * \param[in] scalefactor applied to every pix; use 1.0 for no scaling + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \param[out] pboxa [optional] location of images in output pix + * \return pix of composite images, or NULL on error + * + *
+ * Notes:
+ *      (1) This puts each pix, sequentially, in a line, either horizontally
+ *          or vertically.
+ *      (2) If any pix has a colormap, all pix are rendered in rgb.
+ *      (3) The boxa gives the location of each image.
+ * 
+ */ +PIX * +pixaDisplayLinearly(PIXA *pixas, + l_int32 direction, + l_float32 scalefactor, + l_int32 background, /* not used */ + l_int32 spacing, + l_int32 border, + BOXA **pboxa) +{ +l_int32 i, n, x, y, w, h, size, depth, bordval; +BOX *box; +PIX *pix1, *pix2, *pix3, *pixd; +PIXA *pixa1, *pixa2; + + PROCNAME("pixaDisplayLinearly"); + + if (pboxa) *pboxa = NULL; + if (!pixas) + return (PIX *)ERROR_PTR("pixas not defined", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + + /* Make sure all pix are at the same depth */ + pixa1 = pixaConvertToSameDepth(pixas); + pixaGetDepthInfo(pixa1, &depth, NULL); + + /* Scale and add border if requested */ + n = pixaGetCount(pixa1); + pixa2 = pixaCreate(n); + bordval = (depth == 1) ? 1 : 0; + size = (n - 1) * spacing; + x = y = 0; + for (i = 0; i < n; i++) { + if ((pix1 = pixaGetPix(pixa1, i, L_CLONE)) == NULL) { + L_WARNING("missing pix at index %d\n", procName, i); + continue; + } + + if (scalefactor != 1.0) + pix2 = pixScale(pix1, scalefactor, scalefactor); + else + pix2 = pixClone(pix1); + if (border) + pix3 = pixAddBorder(pix2, border, bordval); + else + pix3 = pixClone(pix2); + + pixGetDimensions(pix3, &w, &h, NULL); + box = boxCreate(x, y, w, h); + if (direction == L_HORIZ) { + size += w; + x += w + spacing; + } else { /* vertical */ + size += h; + y += h + spacing; + } + pixaAddPix(pixa2, pix3, L_INSERT); + pixaAddBox(pixa2, box, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + pixd = pixaDisplay(pixa2, 0, 0); + + if (pboxa) + *pboxa = pixaGetBoxa(pixa2, L_COPY); + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + return pixd; +} + + +/*! + * \brief pixaDisplayOnLattice() + * + * \param[in] pixa + * \param[in] cellw lattice cell width + * \param[in] cellh lattice cell height + * \param[out] pncols [optional] number of columns in output lattice + * \param[out] pboxa [optional] location of images in lattice + * \return pix of composite images, or NULL on error + * + *
+ * Notes:
+ *      (1) This places each pix on sequentially on a regular lattice
+ *          in the rendered composite.  If a pix is too large to fit in the
+ *          allocated lattice space, it is not rendered.
+ *      (2) If any pix has a colormap, all pix are rendered in rgb.
+ *      (3) This is useful when putting bitmaps of components,
+ *          such as characters, into a single image.
+ *      (4) Save the number of tiled images in the text field of the pix,
+ *          in the format: n = %d.  This survives write/read into png files,
+ *          for example.
+ *      (5) The boxa gives the location of each image.  The UL corner
+ *          of each image is on a lattice cell corner.  Omitted images
+ *          (due to size) are assigned an invalid width and height of 0.
+ * 
+ */ +PIX * +pixaDisplayOnLattice(PIXA *pixa, + l_int32 cellw, + l_int32 cellh, + l_int32 *pncols, + BOXA **pboxa) +{ +char buf[16]; +l_int32 n, nw, nh, w, h, d, wt, ht, res, samedepth; +l_int32 index, i, j, hascmap; +BOX *box; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixa1; + + PROCNAME("pixaDisplayOnLattice"); + + if (pncols) *pncols = 0; + if (pboxa) *pboxa = NULL; + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + + /* If any pix have colormaps, or if the depths differ, generate rgb */ + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + pixaAnyColormaps(pixa, &hascmap); + pixaVerifyDepth(pixa, &samedepth, NULL); + if (hascmap || !samedepth) { + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + } else { + pixa1 = pixaCopy(pixa, L_CLONE); + } + + /* Have number of rows and columns approximately equal */ + nw = (l_int32)sqrt((l_float64)n); + nh = (n + nw - 1) / nw; + w = cellw * nw; + h = cellh * nh; + + /* Use the first pix to determine output depth and resolution */ + pix1 = pixaGetPix(pixa1, 0, L_CLONE); + d = pixGetDepth(pix1); + res = pixGetXRes(pix1); + pixDestroy(&pix1); + if ((pixd = pixCreate(w, h, d)) == NULL) { + pixaDestroy(&pixa1); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixSetBlackOrWhite(pixd, L_SET_WHITE); + pixSetResolution(pixd, res, res); + boxa = boxaCreate(n); + + /* Tile the output */ + index = 0; + for (i = 0; i < nh; i++) { + for (j = 0; j < nw && index < n; j++, index++) { + pix1 = pixaGetPix(pixa1, index, L_CLONE); + pixGetDimensions(pix1, &wt, &ht, NULL); + if (wt > cellw || ht > cellh) { + L_INFO("pix(%d) omitted; size %dx%x\n", procName, index, + wt, ht); + box = boxCreate(0, 0, 0, 0); + boxaAddBox(boxa, box, L_INSERT); + pixDestroy(&pix1); + continue; + } + pixRasterop(pixd, j * cellw, i * cellh, wt, ht, + PIX_SRC, pix1, 0, 0); + box = boxCreate(j * cellw, i * cellh, wt, ht); + boxaAddBox(boxa, box, L_INSERT); + pixDestroy(&pix1); + } + } + + /* Save the number of tiles in the text field */ + snprintf(buf, sizeof(buf), "n = %d", boxaGetCount(boxa)); + pixSetText(pixd, buf); + + if (pncols) *pncols = nw; + if (pboxa) + *pboxa = boxa; + else + boxaDestroy(&boxa); + pixaDestroy(&pixa1); + return pixd; +} + + +/*! + * \brief pixaDisplayUnsplit() + * + * \param[in] pixa + * \param[in] nx number of mosaic cells horizontally + * \param[in] ny number of mosaic cells vertically + * \param[in] borderwidth of added border on all sides + * \param[in] bordercolor in our RGBA format: 0xrrggbbaa + * \return pix of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a logical inverse of pixaSplitPix().  It
+ *          constructs a pix from a mosaic of tiles, all of equal size.
+ *      (2) For added generality, a border of arbitrary color can
+ *          be added to each of the tiles.
+ *      (3) In use, pixa will typically have either been generated
+ *          from pixaSplitPix() or will derived from a pixa that
+ *          was so generated.
+ *      (4) All pix in the pixa must be of equal depth, and, if
+ *          colormapped, have the same colormap.
+ * 
+ */ +PIX * +pixaDisplayUnsplit(PIXA *pixa, + l_int32 nx, + l_int32 ny, + l_int32 borderwidth, + l_uint32 bordercolor) +{ +l_int32 w, h, d, wt, ht; +l_int32 i, j, k, x, y, n; +PIX *pix1, *pixd; + + PROCNAME("pixaDisplayUnsplit"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (nx <= 0 || ny <= 0) + return (PIX *)ERROR_PTR("nx and ny must be > 0", procName, NULL); + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + if (n != nx * ny) + return (PIX *)ERROR_PTR("n != nx * ny", procName, NULL); + borderwidth = L_MAX(0, borderwidth); + + pixaGetPixDimensions(pixa, 0, &wt, &ht, &d); + w = nx * (wt + 2 * borderwidth); + h = ny * (ht + 2 * borderwidth); + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pix1 = pixaGetPix(pixa, 0, L_CLONE); + pixCopyColormap(pixd, pix1); + pixDestroy(&pix1); + if (borderwidth > 0) + pixSetAllArbitrary(pixd, bordercolor); + + y = borderwidth; + for (i = 0, k = 0; i < ny; i++) { + x = borderwidth; + for (j = 0; j < nx; j++, k++) { + pix1 = pixaGetPix(pixa, k, L_CLONE); + pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + x += wt + 2 * borderwidth; + } + y += ht + 2 * borderwidth; + } + + return pixd; +} + + +/*! + * \brief pixaDisplayTiled() + * + * \param[in] pixa + * \param[in] maxwidth of output image + * \param[in] background 0 for white, 1 for black + * \param[in] spacing + * \return pix of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This renders a pixa to a single image of width not to
+ *          exceed maxwidth, with background color either white or black,
+ *          and with each subimage spaced on a regular lattice.
+ *      (2) The lattice size is determined from the largest width and height,
+ *          separately, of all pix in the pixa.
+ *      (3) All pix in the pixa must be of equal depth.
+ *      (4) If any pix has a colormap, all pix are rendered in rgb.
+ *      (5) Careful: because no components are omitted, this is
+ *          dangerous if there are thousands of small components and
+ *          one or more very large one, because the size of the
+ *          resulting pix can be huge!
+ * 
+ */ +PIX * +pixaDisplayTiled(PIXA *pixa, + l_int32 maxwidth, + l_int32 background, + l_int32 spacing) +{ +l_int32 wmax, hmax, wd, hd, d, hascmap, res, same; +l_int32 i, j, n, ni, ncols, nrows; +l_int32 ystart, xstart, wt, ht; +PIX *pix1, *pix2, *pixd; +PIXA *pixa1; + + PROCNAME("pixaDisplayTiled"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + + /* If any pix have colormaps, generate rgb */ + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + pixaAnyColormaps(pixa, &hascmap); + if (hascmap) { + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + } else { + pixa1 = pixaCopy(pixa, L_CLONE); + } + + /* Find the max dimensions and depth subimages */ + pixaGetDepthInfo(pixa1, &d, &same); + if (!same) { + pixaDestroy(&pixa1); + return (PIX *)ERROR_PTR("depths not equal", procName, NULL); + } + pixaSizeRange(pixa1, NULL, NULL, &wmax, &hmax); + + /* Get the number of rows and columns and the output image size */ + spacing = L_MAX(spacing, 0); + ncols = (l_int32)((l_float32)(maxwidth - spacing) / + (l_float32)(wmax + spacing)); + ncols = L_MAX(ncols, 1); + nrows = (n + ncols - 1) / ncols; + wd = wmax * ncols + spacing * (ncols + 1); + hd = hmax * nrows + spacing * (nrows + 1); + if ((pixd = pixCreate(wd, hd, d)) == NULL) { + pixaDestroy(&pixa1); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + /* Reset the background color if necessary */ + if ((background == 1 && d == 1) || (background == 0 && d != 1)) + pixSetAll(pixd); + + /* Blit the images to the dest */ + for (i = 0, ni = 0; i < nrows; i++) { + ystart = spacing + i * (hmax + spacing); + for (j = 0; j < ncols && ni < n; j++, ni++) { + xstart = spacing + j * (wmax + spacing); + pix1 = pixaGetPix(pixa1, ni, L_CLONE); + if (ni == 0) res = pixGetXRes(pix1); + pixGetDimensions(pix1, &wt, &ht, NULL); + pixRasterop(pixd, xstart, ystart, wt, ht, PIX_SRC, pix1, 0, 0); + pixDestroy(&pix1); + } + } + pixSetResolution(pixd, res, res); + + pixaDestroy(&pixa1); + return pixd; +} + + +/*! + * \brief pixaDisplayTiledInRows() + * + * \param[in] pixa + * \param[in] outdepth output depth: 1, 8 or 32 bpp + * \param[in] maxwidth of output image + * \param[in] scalefactor applied to every pix; use 1.0 for no scaling + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \return pixd of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This renders a pixa to a single image of width not to
+ *          exceed maxwidth, with background color either white or black,
+ *          and with each row tiled such that the top of each pix is
+ *          aligned and separated by 'spacing' from the next one.
+ *          A black border can be added to each pix.
+ *      (2) All pix are converted to outdepth; existing colormaps are removed.
+ *      (3) This does a reasonably spacewise-efficient job of laying
+ *          out the individual pix images into a tiled composite.
+ *      (4) A serialized boxa giving the location in pixd of each input
+ *          pix (without added border) is stored in the text string of pixd.
+ *          This allows, e.g., regeneration of a pixa from pixd, using
+ *          pixaCreateFromBoxa().  If there is no scaling and the depth of
+ *          each input pix in the pixa is the same, this tiling operation
+ *          can be inverted using the boxa (except for loss of text in
+ *          each of the input pix):
+ *            pix1 = pixaDisplayTiledInRows(pixa1, 1, 1500, 1.0, 0, 30, 0);
+ *            char *boxatxt = pixGetText(pix1);
+ *            boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt));
+ *            pixa2 = pixaCreateFromBoxa(pix1, boxa1, 0, 0, NULL);
+ * 
+ */ +PIX * +pixaDisplayTiledInRows(PIXA *pixa, + l_int32 outdepth, + l_int32 maxwidth, + l_float32 scalefactor, + l_int32 background, + l_int32 spacing, + l_int32 border) +{ +l_int32 h; /* cumulative height over all the rows */ +l_int32 w; /* cumulative height in the current row */ +l_int32 bordval, wtry, wt, ht; +l_int32 irow; /* index of current pix in current row */ +l_int32 wmaxrow; /* width of the largest row */ +l_int32 maxh; /* max height in row */ +l_int32 i, j, index, n, x, y, nrows, ninrow, res; +size_t size; +l_uint8 *data; +BOXA *boxa; +NUMA *nainrow; /* number of pix in the row */ +NUMA *namaxh; /* height of max pix in the row */ +PIX *pix, *pixn, *pix1, *pixd; +PIXA *pixan; + + PROCNAME("pixaDisplayTiledInRows"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (outdepth != 1 && outdepth != 8 && outdepth != 32) + return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); + if (border < 0) + border = 0; + if (scalefactor <= 0.0) scalefactor = 1.0; + + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + + /* Normalize depths, scale, remove colormaps; optionally add border */ + pixan = pixaCreate(n); + bordval = (outdepth == 1) ? 1 : 0; + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + continue; + + if (outdepth == 1) + pixn = pixConvertTo1(pix, 128); + else if (outdepth == 8) + pixn = pixConvertTo8(pix, FALSE); + else /* outdepth == 32 */ + pixn = pixConvertTo32(pix); + pixDestroy(&pix); + + if (scalefactor != 1.0) + pix1 = pixScale(pixn, scalefactor, scalefactor); + else + pix1 = pixClone(pixn); + if (border) + pixd = pixAddBorder(pix1, border, bordval); + else + pixd = pixClone(pix1); + pixDestroy(&pixn); + pixDestroy(&pix1); + + pixaAddPix(pixan, pixd, L_INSERT); + } + if (pixaGetCount(pixan) != n) { + n = pixaGetCount(pixan); + L_WARNING("only got %d components\n", procName, n); + if (n == 0) { + pixaDestroy(&pixan); + return (PIX *)ERROR_PTR("no components", procName, NULL); + } + } + + /* Compute parameters for layout */ + nainrow = numaCreate(0); + namaxh = numaCreate(0); + wmaxrow = 0; + w = h = spacing; + maxh = 0; /* max height in row */ + for (i = 0, irow = 0; i < n; i++, irow++) { + pixaGetPixDimensions(pixan, i, &wt, &ht, NULL); + wtry = w + wt + spacing; + if (wtry > maxwidth) { /* end the current row and start next one */ + numaAddNumber(nainrow, irow); + numaAddNumber(namaxh, maxh); + wmaxrow = L_MAX(wmaxrow, w); + h += maxh + spacing; + irow = 0; + w = wt + 2 * spacing; + maxh = ht; + } else { + w = wtry; + maxh = L_MAX(maxh, ht); + } + } + + /* Enter the parameters for the last row */ + numaAddNumber(nainrow, irow); + numaAddNumber(namaxh, maxh); + wmaxrow = L_MAX(wmaxrow, w); + h += maxh + spacing; + + if ((pixd = pixCreate(wmaxrow, h, outdepth)) == NULL) { + numaDestroy(&nainrow); + numaDestroy(&namaxh); + pixaDestroy(&pixan); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + /* Reset the background color if necessary */ + if ((background == 1 && outdepth == 1) || + (background == 0 && outdepth != 1)) + pixSetAll(pixd); + + /* Blit the images to the dest, and save the boxa identifying + * the image regions that do not include the borders. */ + nrows = numaGetCount(nainrow); + y = spacing; + boxa = boxaCreate(n); + for (i = 0, index = 0; i < nrows; i++) { /* over rows */ + numaGetIValue(nainrow, i, &ninrow); + numaGetIValue(namaxh, i, &maxh); + x = spacing; + for (j = 0; j < ninrow; j++, index++) { /* over pix in row */ + pix = pixaGetPix(pixan, index, L_CLONE); + if (index == 0) { + res = pixGetXRes(pix); + pixSetResolution(pixd, res, res); + } + pixGetDimensions(pix, &wt, &ht, NULL); + boxaAddBox(boxa, boxCreate(x + border, y + border, + wt - 2 * border, ht - 2 *border), L_INSERT); + pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pix, 0, 0); + pixDestroy(&pix); + x += wt + spacing; + } + y += maxh + spacing; + } + boxaWriteMem(&data, &size, boxa); + pixSetText(pixd, (char *)data); /* data is ascii */ + LEPT_FREE(data); + boxaDestroy(&boxa); + + numaDestroy(&nainrow); + numaDestroy(&namaxh); + pixaDestroy(&pixan); + return pixd; +} + + +/*! + * \brief pixaDisplayTiledInColumns() + * + * \param[in] pixas + * \param[in] nx number of columns in output image + * \param[in] scalefactor applied to every pix; use 1.0 for no scaling + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \return pixd of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This renders a pixa to a single image with &nx columns of
+ *          subimages.  The background color is white, and each row
+ *          is tiled such that the top of each pix is aligned and
+ *          each pix is separated by 'spacing' from the next one.
+ *          A black border can be added to each pix.
+ *      (2) The output depth is determined by the largest depth
+ *          required by the pix in the pixa.  Colormaps are removed.
+ *      (3) A serialized boxa giving the location in pixd of each input
+ *          pix (without added border) is stored in the text string of pixd.
+ *          This allows, e.g., regeneration of a pixa from pixd, using
+ *          pixaCreateFromBoxa().  If there is no scaling and the depth of
+ *          each input pix in the pixa is the same, this tiling operation
+ *          can be inverted using the boxa (except for loss of text in
+ *          each of the input pix):
+ *            pix1 = pixaDisplayTiledInColumns(pixa1, 3, 1.0, 0, 30, 2);
+ *            char *boxatxt = pixGetText(pix1);
+ *            boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt));
+ *            pixa2 = pixaCreateFromBoxa(pix1, boxa1, NULL);
+ * 
+ */ +PIX * +pixaDisplayTiledInColumns(PIXA *pixas, + l_int32 nx, + l_float32 scalefactor, + l_int32 spacing, + l_int32 border) +{ +l_int32 i, j, index, n, x, y, nrows, wb, hb, w, h, maxd, maxh, bordval, res; +size_t size; +l_uint8 *data; +BOX *box; +BOXA *boxa; +PIX *pix1, *pix2, *pix3, *pixd; +PIXA *pixa1, *pixa2; + + PROCNAME("pixaDisplayTiledInColumns"); + + if (!pixas) + return (PIX *)ERROR_PTR("pixas not defined", procName, NULL); + if (border < 0) + border = 0; + if (scalefactor <= 0.0) scalefactor = 1.0; + + if ((n = pixaGetCount(pixas)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + + /* Convert to same depth, if necessary */ + pixa1 = pixaConvertToSameDepth(pixas); + pixaGetDepthInfo(pixa1, &maxd, NULL); + + /* Scale and optionally add border */ + pixa2 = pixaCreate(n); + bordval = (maxd == 1) ? 1 : 0; + for (i = 0; i < n; i++) { + if ((pix1 = pixaGetPix(pixa1, i, L_CLONE)) == NULL) + continue; + if (scalefactor != 1.0) + pix2 = pixScale(pix1, scalefactor, scalefactor); + else + pix2 = pixClone(pix1); + if (border) + pix3 = pixAddBorder(pix2, border, bordval); + else + pix3 = pixClone(pix2); + if (i == 0) res = pixGetXRes(pix3); + pixaAddPix(pixa2, pix3, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + pixaDestroy(&pixa1); + if (pixaGetCount(pixa2) != n) { + n = pixaGetCount(pixa2); + L_WARNING("only got %d components\n", procName, n); + if (n == 0) { + pixaDestroy(&pixa2); + return (PIX *)ERROR_PTR("no components", procName, NULL); + } + } + + /* Compute layout parameters and save as a boxa */ + boxa = boxaCreate(n); + nrows = (n + nx - 1) / nx; + y = spacing; + for (i = 0, index = 0; i < nrows; i++) { + x = spacing; + maxh = 0; + for (j = 0; j < nx && index < n; j++) { + pixaGetPixDimensions(pixa2, index, &wb, &hb, NULL); + box = boxCreate(x, y, wb, hb); + boxaAddBox(boxa, box, L_INSERT); + maxh = L_MAX(maxh, hb + spacing); + x += wb + spacing; + index++; + } + y += maxh; + } + pixaSetBoxa(pixa2, boxa, L_INSERT); + + /* Render the output pix */ + boxaGetExtent(boxa, &w, &h, NULL); + pixd = pixaDisplay(pixa2, w + spacing, h + spacing); + pixSetResolution(pixd, res, res); + + /* Save the boxa in the text field of the output pix */ + boxaWriteMem(&data, &size, boxa); + pixSetText(pixd, (char *)data); /* data is ascii */ + LEPT_FREE(data); + + pixaDestroy(&pixa2); + return pixd; +} + + +/*! + * \brief pixaDisplayTiledAndScaled() + * + * \param[in] pixa + * \param[in] outdepth output depth: 1, 8 or 32 bpp + * \param[in] tilewidth each pix is scaled to this width + * \param[in] ncols number of tiles in each row + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \return pix of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This can be used to tile a number of renderings of
+ *          an image that are at different scales and depths.
+ *      (2) Each image, after scaling and optionally adding the
+ *          black border, has width 'tilewidth'.  Thus, the border does
+ *          not affect the spacing between the image tiles.  The
+ *          maximum allowed border width is tilewidth / 5.
+ * 
+ */ +PIX * +pixaDisplayTiledAndScaled(PIXA *pixa, + l_int32 outdepth, + l_int32 tilewidth, + l_int32 ncols, + l_int32 background, + l_int32 spacing, + l_int32 border) +{ +l_int32 x, y, w, h, wd, hd, d, res; +l_int32 i, n, nrows, maxht, ninrow, irow, bordval; +l_int32 *rowht; +l_float32 scalefact; +PIX *pix, *pixn, *pix1, *pixb, *pixd; +PIXA *pixan; + + PROCNAME("pixaDisplayTiledAndScaled"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (outdepth != 1 && outdepth != 8 && outdepth != 32) + return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); + if (ncols <= 0) + return (PIX *)ERROR_PTR("ncols must be > 0", procName, NULL); + if (border < 0 || border > tilewidth / 5) + border = 0; + + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + + /* Normalize scale and depth for each pix; optionally add border */ + pixan = pixaCreate(n); + bordval = (outdepth == 1) ? 1 : 0; + for (i = 0; i < n; i++) { + if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) + continue; + + pixGetDimensions(pix, &w, &h, &d); + scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w; + if (d == 1 && outdepth > 1 && scalefact < 1.0) + pix1 = pixScaleToGray(pix, scalefact); + else + pix1 = pixScale(pix, scalefact, scalefact); + + if (outdepth == 1) + pixn = pixConvertTo1(pix1, 128); + else if (outdepth == 8) + pixn = pixConvertTo8(pix1, FALSE); + else /* outdepth == 32 */ + pixn = pixConvertTo32(pix1); + pixDestroy(&pix1); + + if (border) + pixb = pixAddBorder(pixn, border, bordval); + else + pixb = pixClone(pixn); + + pixaAddPix(pixan, pixb, L_INSERT); + pixDestroy(&pix); + pixDestroy(&pixn); + } + if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */ + pixaDestroy(&pixan); + return (PIX *)ERROR_PTR("no components", procName, NULL); + } + + /* Determine the size of each row and of pixd */ + wd = tilewidth * ncols + spacing * (ncols + 1); + nrows = (n + ncols - 1) / ncols; + if ((rowht = (l_int32 *)LEPT_CALLOC(nrows, sizeof(l_int32))) == NULL) { + pixaDestroy(&pixan); + return (PIX *)ERROR_PTR("rowht array not made", procName, NULL); + } + maxht = 0; + ninrow = 0; + irow = 0; + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixan, i, L_CLONE); + ninrow++; + pixGetDimensions(pix, &w, &h, NULL); + maxht = L_MAX(h, maxht); + if (ninrow == ncols) { + rowht[irow] = maxht; + maxht = ninrow = 0; /* reset */ + irow++; + } + pixDestroy(&pix); + } + if (ninrow > 0) { /* last fencepost */ + rowht[irow] = maxht; + irow++; /* total number of rows */ + } + nrows = irow; + hd = spacing * (nrows + 1); + for (i = 0; i < nrows; i++) + hd += rowht[i]; + + pixd = pixCreate(wd, hd, outdepth); + if ((background == 1 && outdepth == 1) || + (background == 0 && outdepth != 1)) + pixSetAll(pixd); + + /* Now blit images to pixd */ + x = y = spacing; + irow = 0; + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixan, i, L_CLONE); + if (i == 0) { + res = pixGetXRes(pix); + pixSetResolution(pixd, res, res); + } + pixGetDimensions(pix, &w, &h, NULL); + if (i && ((i % ncols) == 0)) { /* start new row */ + x = spacing; + y += spacing + rowht[irow]; + irow++; + } + pixRasterop(pixd, x, y, w, h, PIX_SRC, pix, 0, 0); + x += tilewidth + spacing; + pixDestroy(&pix); + } + + pixaDestroy(&pixan); + LEPT_FREE(rowht); + return pixd; +} + + +/*! + * \brief pixaDisplayTiledWithText() + * + * \param[in] pixa + * \param[in] maxwidth of output image + * \param[in] scalefactor applied to every pix; use 1.0 for no scaling + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \param[in] fontsize 4, 6, ... 20 + * \param[in] textcolor 0xrrggbb00 + * \return pixd of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a version of pixaDisplayTiledInRows() that prints, below
+ *          each pix, the text in the pix text field.  Up to 127 chars
+ *          of text in the pix text field are rendered below each pix.
+ *      (2) It renders a pixa to a single image of width not to
+ *          exceed %maxwidth, with white background color, with each row
+ *          tiled such that the top of each pix is aligned and separated
+ *          by %spacing from the next one.
+ *      (3) All pix are converted to 32 bpp.
+ *      (4) This does a reasonably spacewise-efficient job of laying
+ *          out the individual pix images into a tiled composite.
+ * 
+ */ +PIX * +pixaDisplayTiledWithText(PIXA *pixa, + l_int32 maxwidth, + l_float32 scalefactor, + l_int32 spacing, + l_int32 border, + l_int32 fontsize, + l_uint32 textcolor) +{ +char buf[128]; +char *textstr; +l_int32 i, n, maxw; +L_BMF *bmf; +PIX *pix1, *pix2, *pix3, *pix4, *pixd; +PIXA *pixad; + + PROCNAME("pixaDisplayTiledWithText"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + if (maxwidth <= 0) + return (PIX *)ERROR_PTR("invalid maxwidth", procName, NULL); + if (border < 0) + border = 0; + if (scalefactor <= 0.0) { + L_WARNING("invalid scalefactor; setting to 1.0\n", procName); + scalefactor = 1.0; + } + if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) { + l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4); + if (fsize & 1) fsize--; + L_WARNING("changed fontsize from %d to %d\n", procName, + fontsize, fsize); + fontsize = fsize; + } + + /* Be sure the width can accommodate a single column of images */ + pixaSizeRange(pixa, NULL, NULL, &maxw, NULL); + maxwidth = L_MAX(maxwidth, scalefactor * (maxw + 2 * spacing + 2 * border)); + + bmf = bmfCreate(NULL, fontsize); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pix3 = pixAddBorderGeneral(pix2, spacing, spacing, spacing, + spacing, 0xffffff00); + textstr = pixGetText(pix1); + if (textstr && strlen(textstr) > 0) { + snprintf(buf, sizeof(buf), "%s", textstr); + pix4 = pixAddSingleTextblock(pix3, bmf, buf, textcolor, + L_ADD_BELOW, NULL); + } else { + pix4 = pixClone(pix3); + } + pixaAddPix(pixad, pix4, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + } + bmfDestroy(&bmf); + + pixd = pixaDisplayTiledInRows(pixad, 32, maxwidth, scalefactor, + 0, 10, border); + pixaDestroy(&pixad); + return pixd; +} + + +/*! + * \brief pixaDisplayTiledByIndex() + * + * \param[in] pixa + * \param[in] na numa with indices corresponding to the pix in pixa + * \param[in] width each pix is scaled to this width + * \param[in] spacing between images, and on outside + * \param[in] border width of black border added to each image; + * use 0 for no border + * \param[in] fontsize 4, 6, ... 20 + * \param[in] textcolor 0xrrggbb00 + * \return pixd of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This renders a pixa to a single image with white
+ *          background color, where the pix are placed in columns
+ *          given by the index value in the numa.  Each pix
+ *          is separated by %spacing from the adjacent ones, and
+ *          an optional border is placed around them.
+ *      (2) Up to 127 chars of text in the pix text field are rendered
+ *          below each pix.  Use newlines in the text field to write
+ *          the text in multiple lines that fit within the pix width.
+ *      (3) To avoid having empty columns, if there are N different
+ *          index values, they should be in [0 ... N-1].
+ *      (4) All pix are converted to 32 bpp.
+ * 
+ */ +PIX * +pixaDisplayTiledByIndex(PIXA *pixa, + NUMA *na, + l_int32 width, + l_int32 spacing, + l_int32 border, + l_int32 fontsize, + l_uint32 textcolor) +{ +char buf[128]; +char *textstr; +l_int32 i, n, x, y, w, h, yval, index; +l_float32 maxindex; +L_BMF *bmf; +BOX *box; +NUMA *nay; /* top of the next pix to add in that column */ +PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixd; +PIXA *pixad; + + PROCNAME("pixaDisplayTiledByIndex"); + + if (!pixa) + return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); + if (!na) + return (PIX *)ERROR_PTR("na not defined", procName, NULL); + if ((n = pixaGetCount(pixa)) == 0) + return (PIX *)ERROR_PTR("no pixa components", procName, NULL); + if (n != numaGetCount(na)) + return (PIX *)ERROR_PTR("pixa and na counts differ", procName, NULL); + if (width <= 0) + return (PIX *)ERROR_PTR("invalid width", procName, NULL); + if (width < 20) + L_WARNING("very small width: %d\n", procName, width); + if (border < 0) + border = 0; + if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) { + l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4); + if (fsize & 1) fsize--; + L_WARNING("changed fontsize from %d to %d\n", procName, + fontsize, fsize); + fontsize = fsize; + } + + /* The pix will be rendered in the order they occupy in pixa. */ + bmf = bmfCreate(NULL, fontsize); + pixad = pixaCreate(n); + numaGetMax(na, &maxindex, NULL); + nay = numaMakeConstant(spacing, lept_roundftoi(maxindex) + 1); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &index); + numaGetIValue(nay, index, &yval); + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pix3 = pixScaleToSize(pix2, width, 0); + pix4 = pixAddBorderGeneral(pix3, border, border, border, border, 0); + textstr = pixGetText(pix1); + if (textstr && strlen(textstr) > 0) { + snprintf(buf, sizeof(buf), "%s", textstr); + pix5 = pixAddTextlines(pix4, bmf, textstr, textcolor, L_ADD_BELOW); + } else { + pix5 = pixClone(pix4); + } + pixaAddPix(pixad, pix5, L_INSERT); + x = spacing + border + index * (2 * border + width + spacing); + y = yval; + pixGetDimensions(pix5, &w, &h, NULL); + yval += h + spacing; + numaSetValue(nay, index, yval); + box = boxCreate(x, y, w, h); + pixaAddBox(pixad, box, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + } + numaDestroy(&nay); + bmfDestroy(&bmf); + + pixd = pixaDisplay(pixad, 0, 0); + pixaDestroy(&pixad); + return pixd; +} + + + +/*---------------------------------------------------------------------* + * Pixaa Display * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaaDisplay() + * + * \param[in] paa + * \param[in] w, h if set to 0, the size is determined from the + * bounding box of the components in pixa + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) Each pix of the paa is displayed at the location given by
+ *          its box, translated by the box of the containing pixa
+ *          if it exists.
+ * 
+ */ +PIX * +pixaaDisplay(PIXAA *paa, + l_int32 w, + l_int32 h) +{ +l_int32 i, j, n, nbox, na, d, wmax, hmax, x, y, xb, yb, wb, hb; +BOXA *boxa1; /* top-level boxa */ +BOXA *boxa; +PIX *pix1, *pixd; +PIXA *pixa; + + PROCNAME("pixaaDisplay"); + + if (!paa) + return (PIX *)ERROR_PTR("paa not defined", procName, NULL); + + n = pixaaGetCount(paa, NULL); + if (n == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + + /* If w and h not input, determine the minimum size required + * to contain the origin and all c.c. */ + boxa1 = pixaaGetBoxa(paa, L_CLONE); + nbox = boxaGetCount(boxa1); + if (w == 0 || h == 0) { + if (nbox == n) { + boxaGetExtent(boxa1, &w, &h, NULL); + } else { /* have to use the lower-level boxa for each pixa */ + wmax = hmax = 0; + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + boxa = pixaGetBoxa(pixa, L_CLONE); + boxaGetExtent(boxa, &w, &h, NULL); + wmax = L_MAX(wmax, w); + hmax = L_MAX(hmax, h); + pixaDestroy(&pixa); + boxaDestroy(&boxa); + } + w = wmax; + h = hmax; + } + } + + /* Get depth from first pix */ + pixa = pixaaGetPixa(paa, 0, L_CLONE); + pix1 = pixaGetPix(pixa, 0, L_CLONE); + d = pixGetDepth(pix1); + pixaDestroy(&pixa); + pixDestroy(&pix1); + + if ((pixd = pixCreate(w, h, d)) == NULL) { + boxaDestroy(&boxa1); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + x = y = 0; + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + if (nbox == n) + boxaGetBoxGeometry(boxa1, i, &x, &y, NULL, NULL); + na = pixaGetCount(pixa); + for (j = 0; j < na; j++) { + pixaGetBoxGeometry(pixa, j, &xb, &yb, &wb, &hb); + pix1 = pixaGetPix(pixa, j, L_CLONE); + pixRasterop(pixd, x + xb, y + yb, wb, hb, PIX_PAINT, pix1, 0, 0); + pixDestroy(&pix1); + } + pixaDestroy(&pixa); + } + boxaDestroy(&boxa1); + + return pixd; +} + + +/*! + * \brief pixaaDisplayByPixa() + * + * \param[in] paa with pix that may have different depths + * \param[in] xspace between pix in pixa + * \param[in] yspace between pixa + * \param[in] maxw max width of output pix + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Displays each pixa on a line (or set of lines),
+ *          in order from top to bottom.  Within each pixa,
+ *          the pix are displayed in order from left to right.
+ *      (2) The sizes and depths of each pix can differ.  The output pix
+ *          has a depth equal to the max depth of all the pix.
+ *      (3) This ignores the boxa of the paa.
+ * 
+ */ +PIX * +pixaaDisplayByPixa(PIXAA *paa, + l_int32 xspace, + l_int32 yspace, + l_int32 maxw) +{ +l_int32 i, j, npixa, npix, same, use_maxw, x, y, w, h, hindex; +l_int32 maxwidth, maxd, width, lmaxh, lmaxw; +l_int32 *harray; +NUMA *nah; +PIX *pix, *pix1, *pixd; +PIXA *pixa; + + PROCNAME("pixaaDisplayByPixa"); + + if (!paa) + return (PIX *)ERROR_PTR("paa not defined", procName, NULL); + + if ((npixa = pixaaGetCount(paa, NULL)) == 0) + return (PIX *)ERROR_PTR("no components", procName, NULL); + pixaaVerifyDepth(paa, &same, &maxd); + if (!same && maxd < 8) + return (PIX *)ERROR_PTR("depths differ; max < 8", procName, NULL); + + /* Be sure the widest box fits in the output pix */ + pixaaSizeRange(paa, NULL, NULL, &maxwidth, NULL); + if (maxwidth > maxw) { + L_WARNING("maxwidth > maxw; using maxwidth\n", procName); + maxw = maxwidth; + } + + /* Get size of output pix. The width is the minimum of the + * maxw and the largest pixa line width. The height is whatever + * it needs to be to accommodate all pixa. */ + lmaxw = 0; /* widest line found */ + use_maxw = FALSE; + nah = numaCreate(0); /* store height of each line */ + y = yspace; + for (i = 0; i < npixa; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + npix = pixaGetCount(pixa); + if (npix == 0) { + pixaDestroy(&pixa); + continue; + } + x = xspace; + lmaxh = 0; /* max height found in the line */ + for (j = 0; j < npix; j++) { + pix = pixaGetPix(pixa, j, L_CLONE); + pixGetDimensions(pix, &w, &h, NULL); + if (x + w >= maxw) { /* start new line */ + x = xspace; + y += lmaxh + yspace; + numaAddNumber(nah, lmaxh); + lmaxh = 0; + use_maxw = TRUE; + } + x += w + xspace; + lmaxh = L_MAX(h, lmaxh); + lmaxw = L_MAX(lmaxw, x); + pixDestroy(&pix); + } + y += lmaxh + yspace; + numaAddNumber(nah, lmaxh); + pixaDestroy(&pixa); + } + width = (use_maxw) ? maxw : lmaxw; + + if ((pixd = pixCreate(width, y, maxd)) == NULL) { + numaDestroy(&nah); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + + /* Now layout the pix by pixa */ + y = yspace; + harray = numaGetIArray(nah); + hindex = 0; + for (i = 0; i < npixa; i++) { + x = xspace; + pixa = pixaaGetPixa(paa, i, L_CLONE); + npix = pixaGetCount(pixa); + if (npix == 0) { + pixaDestroy(&pixa); + continue; + } + for (j = 0; j < npix; j++) { + pix = pixaGetPix(pixa, j, L_CLONE); + if (pixGetDepth(pix) != maxd) { + if (maxd == 8) + pix1 = pixConvertTo8(pix, 0); + else /* 32 bpp */ + pix1 = pixConvertTo32(pix); + } else { + pix1 = pixClone(pix); + } + pixGetDimensions(pix1, &w, &h, NULL); + if (x + w >= maxw) { /* start new line */ + x = xspace; + y += harray[hindex++] + yspace; + } + pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix1, 0, 0); + pixDestroy(&pix); + pixDestroy(&pix1); + x += w + xspace; + } + y += harray[hindex++] + yspace; + pixaDestroy(&pixa); + } + LEPT_FREE(harray); + + numaDestroy(&nah); + return pixd; +} + + +/*! + * \brief pixaaDisplayTiledAndScaled() + * + * \param[in] paa + * \param[in] outdepth output depth: 1, 8 or 32 bpp + * \param[in] tilewidth each pix is scaled to this width + * \param[in] ncols number of tiles in each row + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \return pixa of tiled images, one image for each pixa in + * the paa, or NULL on error + * + *
+ * Notes:
+ *      (1) For each pixa, this generates from all the pix a
+ *          tiled/scaled output pix, and puts it in the output pixa.
+ *      (2) See comments in pixaDisplayTiledAndScaled().
+ * 
+ */ +PIXA * +pixaaDisplayTiledAndScaled(PIXAA *paa, + l_int32 outdepth, + l_int32 tilewidth, + l_int32 ncols, + l_int32 background, + l_int32 spacing, + l_int32 border) +{ +l_int32 i, n; +PIX *pix; +PIXA *pixa, *pixad; + + PROCNAME("pixaaDisplayTiledAndScaled"); + + if (!paa) + return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); + if (outdepth != 1 && outdepth != 8 && outdepth != 32) + return (PIXA *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); + if (ncols <= 0) + return (PIXA *)ERROR_PTR("ncols must be > 0", procName, NULL); + if (border < 0 || border > tilewidth / 5) + border = 0; + + if ((n = pixaaGetCount(paa, NULL)) == 0) + return (PIXA *)ERROR_PTR("no components", procName, NULL); + + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + pix = pixaDisplayTiledAndScaled(pixa, outdepth, tilewidth, ncols, + background, spacing, border); + pixaAddPix(pixad, pix, L_INSERT); + pixaDestroy(&pixa); + } + + return pixad; +} + + +/*---------------------------------------------------------------------* + * Conversion of all pix to specified type (e.g., depth) * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaConvertTo1() + * + * \param[in] pixas + * \param[in] thresh threshold for final binarization from 8 bpp gray + * \return pixad, or NULL on error + */ +PIXA * +pixaConvertTo1(PIXA *pixas, + l_int32 thresh) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaConvertTo1"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo1(pix1, thresh); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa = pixaGetBoxa(pixas, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + return pixad; +} + + +/*! + * \brief pixaConvertTo8() + * + * \param[in] pixas + * \param[in] cmapflag 1 to give pixd a colormap; 0 otherwise + * \return pixad each pix is 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes for pixConvertTo8(), applied to each pix in pixas.
+ * 
+ */ +PIXA * +pixaConvertTo8(PIXA *pixas, + l_int32 cmapflag) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaConvertTo8"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo8(pix1, cmapflag); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa = pixaGetBoxa(pixas, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + return pixad; +} + + +/*! + * \brief pixaConvertTo8Colormap() + * + * \param[in] pixas + * \param[in] dither 1 to dither if necessary; 0 otherwise + * \return pixad each pix is 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes for pixConvertTo8Colormap(), applied to each pix in pixas.
+ * 
+ */ +PIXA * +pixaConvertTo8Colormap(PIXA *pixas, + l_int32 dither) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaConvertTo8Colormap"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo8Colormap(pix1, dither); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa = pixaGetBoxa(pixas, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + return pixad; +} + + +/*! + * \brief pixaConvertTo32() + * + * \param[in] pixas + * \return pixad 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes for pixConvertTo32(), applied to each pix in pixas.
+ *      (2) This can be used to allow 1 bpp pix in a pixa to be displayed
+ *          with color.
+ * 
+ */ +PIXA * +pixaConvertTo32(PIXA *pixas) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaConvertTo32"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + boxa = pixaGetBoxa(pixas, L_COPY); + pixaSetBoxa(pixad, boxa, L_INSERT); + return pixad; +} + + +/*---------------------------------------------------------------------* + * Pixa constrained selection * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaConstrainedSelect() + * + * \param[in] pixas + * \param[in] first first index to choose; >= 0 + * \param[in] last biggest possible index to reach; + * use -1 to go to the end; otherwise, last >= first + * \param[in] nmax maximum number of pix to select; > 0 + * \param[in] use_pairs 1 = select pairs of adjacent pix; + * 0 = select individual pix + * \param[in] copyflag L_COPY, L_CLONE + * \return pixad if OK, NULL on error + * + *
+ * Notes:
+ *     (1) See notes in genConstrainedNumaInRange() for how selection
+ *         is made.
+ *     (2) This returns a selection of the pix in the input pixa.
+ *     (3) Use copyflag == L_COPY if you don't want changes in the pix
+ *         in the returned pixa to affect those in the input pixa.
+ * 
+ */ +PIXA * +pixaConstrainedSelect(PIXA *pixas, + l_int32 first, + l_int32 last, + l_int32 nmax, + l_int32 use_pairs, + l_int32 copyflag) +{ +l_int32 i, n, nselect, index; +NUMA *na; +PIX *pix1; +PIXA *pixad; + + PROCNAME("pixaConstrainedSelect"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + n = pixaGetCount(pixas); + first = L_MAX(0, first); + last = (last < 0) ? n - 1 : L_MIN(n - 1, last); + if (last < first) + return (PIXA *)ERROR_PTR("last < first!", procName, NULL); + if (nmax < 1) + return (PIXA *)ERROR_PTR("nmax < 1!", procName, NULL); + + na = genConstrainedNumaInRange(first, last, nmax, use_pairs); + nselect = numaGetCount(na); + pixad = pixaCreate(nselect); + for (i = 0; i < nselect; i++) { + numaGetIValue(na, i, &index); + pix1 = pixaGetPix(pixas, index, copyflag); + pixaAddPix(pixad, pix1, L_INSERT); + } + numaDestroy(&na); + return pixad; +} + + +/*! + * \brief pixaSelectToPdf() + * + * \param[in] pixas + * \param[in] first first index to choose; >= 0 + * \param[in] last biggest possible index to reach; + * use -1 to go to the end; otherwise, last >= first + * \param[in] res override the resolution of each input image, in ppi; + * use 0 to respect the resolution embedded in the input + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, or 0 for default + * \param[in] quality used for JPEG only; 0 for default (75) + * \param[in] color of numbers added to each image (e.g., 0xff000000) + * \param[in] fontsize to print number below each image. The valid set + * is {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This writes a pdf of the selected images from %pixas, one to
+ *          a page.  They are optionally scaled and annotated with the
+ *          index printed to the left of the image.
+ *      (2) If the input images are 1 bpp and you want the numbers to be
+ *          in color, first promote each pix to 8 bpp with a colormap:
+ *                pixa1 = pixaConvertTo8(pixas, 1);
+ *          and then call this function with the specified color
+ * 
+ */ +l_ok +pixaSelectToPdf(PIXA *pixas, + l_int32 first, + l_int32 last, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + l_uint32 color, + l_int32 fontsize, + const char *fileout) +{ +l_int32 n; +L_BMF *bmf; +NUMA *na; +PIXA *pixa1, *pixa2; + + PROCNAME("pixaSelectToPdf"); + + if (!pixas) + return ERROR_INT("pixas not defined", procName, 1); + if (type < 0 || type > L_FLATE_ENCODE) { + L_WARNING("invalid compression type; using default\n", procName); + type = 0; + } + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + /* Select from given range */ + n = pixaGetCount(pixas); + first = L_MAX(0, first); + last = (last < 0) ? n - 1 : L_MIN(n - 1, last); + if (first > last) { + L_ERROR("first = %d > last = %d\n", procName, first, last); + return 1; + } + pixa1 = pixaSelectRange(pixas, first, last, L_CLONE); + + /* Optionally add index numbers */ + bmf = (fontsize <= 0) ? NULL : bmfCreate(NULL, fontsize); + if (bmf) { + na = numaMakeSequence(first, 1.0, last - first + 1); + pixa2 = pixaAddTextNumber(pixa1, bmf, na, color, L_ADD_LEFT); + numaDestroy(&na); + } else { + pixa2 = pixaCopy(pixa1, L_CLONE); + } + pixaDestroy(&pixa1); + bmfDestroy(&bmf); + + pixaConvertToPdf(pixa2, res, scalefactor, type, quality, NULL, fileout); + pixaDestroy(&pixa2); + return 0; +} + + +/*---------------------------------------------------------------------* + * Generate pixa from tiled images * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaMakeFromTiledPixa() + * + * \param[in] pixas of mosaiced templates, one for each digit + * \param[in] w width of samples (use 0 for default = 20) + * \param[in] h height of samples (use 0 for default = 30) + * \param[in] nsamp number of requested samples (use 0 for default = 100) + * \return pixa of individual, scaled templates, or NULL on error + * + *
+ * Notes:
+ *      (1) This converts from a compressed representation of 1 bpp digit
+ *          templates to a pixa where each pix has a single labeled template.
+ *      (2) The mosaics hold 100 templates each, and the number of templates
+ *          %nsamp selected for each digit can be between 1 and 100.
+ *      (3) Each mosaic has the number of images written in the text field,
+ *          and the i-th pix contains samples of the i-th digit.  That value
+ *          is written into the text field of each template in the output.
+ * 
+ */ +PIXA * +pixaMakeFromTiledPixa(PIXA *pixas, + l_int32 w, + l_int32 h, + l_int32 nsamp) +{ +char buf[8]; +l_int32 ntiles, i; +PIX *pix1; +PIXA *pixad, *pixa1; + + PROCNAME("pixaMakeFromTiledPixa"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (nsamp > 1000) + return (PIXA *)ERROR_PTR("nsamp too large; typ. 100", procName, NULL); + + if (w <= 0) w = 20; + if (h <= 0) h = 30; + if (nsamp <= 0) nsamp = 100; + + /* pixas has 10 pix of mosaic'd digits. Each of these images + * must be extracted into a pixa of templates, where each template + * is labeled with the digit value, and then selectively + * concatenated into an output pixa. */ + pixad = pixaCreate(10 * nsamp); + for (i = 0; i < 10; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pixGetTileCount(pix1, &ntiles); + if (nsamp > ntiles) + L_WARNING("requested %d; only %d tiles\n", procName, nsamp, ntiles); + pixa1 = pixaMakeFromTiledPix(pix1, w, h, 0, nsamp, NULL); + snprintf(buf, sizeof(buf), "%d", i); + pixaSetText(pixa1, buf, NULL); + pixaJoin(pixad, pixa1, 0, -1); + pixaDestroy(&pixa1); + pixDestroy(&pix1); + } + return pixad; +} + + +/*! + * \brief pixaMakeFromTiledPix() + * + * \param[in] pixs any depth; colormap OK + * \param[in] w width of each tile + * \param[in] h height of each tile + * \param[in] start first tile to use + * \param[in] num number of tiles; use 0 to go to the end + * \param[in] boxa [optional] location of rectangular regions + * to be extracted + * \return pixa if OK, NULL on error + * + *
+ * Notes:
+ *      (1) Operations that generate a pix by tiling from a pixa, and
+ *          the inverse that generate a pixa from tiles of a pix,
+ *          are useful.  One such pair is pixaDisplayUnsplit() and
+ *          pixaSplitPix().  This function is a very simple one that
+ *          generates a pixa from tiles of a pix. There are two cases:
+ *            - the tiles can all be the same size (the inverse of
+ *              pixaDisplayOnLattice(), or
+ *            - the tiles can differ in size, where there is an
+ *              associated boxa (the inverse of pixaCreateFromBoxa().
+ *      (2) If all tiles are the same size, %w by %h, use %boxa = NULL.
+ *          If the tiles differ in size, use %boxa to extract the
+ *          individual images (%w and %h are then ignored).
+ *      (3) If the pix was made by pixaDisplayOnLattice(), the number
+ *          of tiled images is written into the text field, in the format
+ *               n = .
+ *      (4) Typical usage: a set of character templates all scaled to
+ *          the same size can be stored on a lattice of that size in
+ *          a pix, and this function can regenerate the pixa.  If the
+ *          templates differ in size, a boxa generated when the tiled
+ *          pix was made can be used to indicate the location of
+ *          the templates.
+ * 
+ */ +PIXA * +pixaMakeFromTiledPix(PIX *pixs, + l_int32 w, + l_int32 h, + l_int32 start, + l_int32 num, + BOXA *boxa) +{ +l_int32 i, j, k, ws, hs, d, nx, ny, n, n_isvalid, ntiles, nmax; +PIX *pix1; +PIXA *pixa1; +PIXCMAP *cmap; + + PROCNAME("pixaMakeFromTiledPix"); + + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (!boxa && (w <= 0 || h <= 0)) + return (PIXA *)ERROR_PTR("w and h must be > 0", procName, NULL); + + if (boxa) /* general case */ + return pixaCreateFromBoxa(pixs, boxa, start, num, NULL); + + /* All tiles are the same size */ + pixGetDimensions(pixs, &ws, &hs, &d); + nx = ws / w; + ny = hs / h; + if (nx < 1 || ny < 1) + return (PIXA *)ERROR_PTR("invalid dimensions", procName, NULL); + if (nx * w != ws || ny * h != hs) + L_WARNING("some tiles will be clipped\n", procName); + + /* Check the text field of the pix. It may tell how many + * tiles hold valid data. If a valid value is not found, + * assume all (nx * ny) tiles are valid. */ + pixGetTileCount(pixs, &n); + n_isvalid = (n <= nx * ny && n > nx * (ny - 1)) ? TRUE : FALSE; + ntiles = (n_isvalid) ? n : nx * ny; + nmax = ntiles - start; /* max available from start */ + num = (num == 0) ? nmax : L_MIN(num, nmax); + + /* Extract the tiles */ + if ((pixa1 = pixaCreate(num)) == NULL) { + return (PIXA *)ERROR_PTR("pixa1 not made", procName, NULL); + } + cmap = pixGetColormap(pixs); + for (i = 0, k = 0; i < ny; i++) { + for (j = 0; j < nx; j++, k++) { + if (k < start) continue; + if (k >= start + num) break; + pix1 = pixCreate(w, h, d); + if (cmap) pixSetColormap(pix1, pixcmapCopy(cmap)); + pixRasterop(pix1, 0, 0, w, h, PIX_SRC, pixs, j * w, i * h); + pixaAddPix(pixa1, pix1, L_INSERT); + } + } + return pixa1; +} + + +/*! + * \brief pixGetTileCount() + * + * \param[in] pix + * \param[out] *pn number embedded in pix text field + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If the pix was made by pixaDisplayOnLattice(), the number
+ *          of tiled images is written into the text field, in the format
+ *               n = .
+ *      (2) This returns 0 if the data is not in the text field, or on error.
+ * 
+ */ +l_ok +pixGetTileCount(PIX *pix, + l_int32 *pn) +{ +char *text; +l_int32 n; + + PROCNAME("pixGetTileCount"); + + if (!pn) + return ERROR_INT("&n not defined", procName, 1); + *pn = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + text = pixGetText(pix); + if (text && strlen(text) > 4) { + if (sscanf(text, "n = %d", &n) == 1) + *pn = n; + } + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixa display into multiple tiles * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaDisplayMultiTiled() + * + * \param[in] pixas + * \param[in] nx, ny in [1, ... 50], tiling factors in each direction + * \param[in] maxw, maxh max sizes to keep + * \param[in] scalefactor scale each image by this + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \return pixad if OK, NULL on error + * + *
+ * Notes:
+ *      (1) Each set of %nx * %ny images is optionally scaled and saved
+ *          into a new pix, and then aggregated.
+ *      (2) Set %maxw = %maxh = 0 if you want to include all pix from %pixs.
+ *      (3) This is useful for generating a pdf from the output pixa, where
+ *          each page is a tile of (%nx * %ny) images from the input pixa.
+ * 
+ */ +PIXA * +pixaDisplayMultiTiled(PIXA *pixas, + l_int32 nx, + l_int32 ny, + l_int32 maxw, + l_int32 maxh, + l_float32 scalefactor, + l_int32 spacing, + l_int32 border) +{ +l_int32 n, i, j, ntile, nout, index; +PIX *pix1, *pix2; +PIXA *pixa1, *pixa2, *pixad; + + PROCNAME("pixaDisplayMultiTiled"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (nx < 1 || ny < 1 || nx > 50 || ny > 50) + return (PIXA *)ERROR_PTR("invalid tiling factor(s)", procName, NULL); + if ((n = pixaGetCount(pixas)) == 0) + return (PIXA *)ERROR_PTR("pixas is empty", procName, NULL); + + /* Filter out large ones if requested */ + if (maxw == 0 && maxh == 0) { + pixa1 = pixaCopy(pixas, L_CLONE); + } else { + maxw = (maxw == 0) ? 1000000 : maxw; + maxh = (maxh == 0) ? 1000000 : maxh; + pixa1 = pixaSelectBySize(pixas, maxw, maxh, L_SELECT_IF_BOTH, + L_SELECT_IF_LTE, NULL); + n = pixaGetCount(pixa1); + } + + ntile = nx * ny; + nout = L_MAX(1, (n + ntile - 1) / ntile); + pixad = pixaCreate(nout); + for (i = 0, index = 0; i < nout; i++) { /* over tiles */ + pixa2 = pixaCreate(ntile); + for (j = 0; j < ntile && index < n; j++, index++) { + pix1 = pixaGetPix(pixa1, index, L_COPY); + pixaAddPix(pixa2, pix1, L_INSERT); + } + pix2 = pixaDisplayTiledInColumns(pixa2, nx, scalefactor, spacing, + border); + pixaAddPix(pixad, pix2, L_INSERT); + pixaDestroy(&pixa2); + } + pixaDestroy(&pixa1); + + return pixad; +} + + +/*---------------------------------------------------------------------* + * Split pixa into files * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaSplitIntoFiles() + * + * \param[in] pixas + * \param[in] nsplit split pixas into this number of pixa; >= 2 + * \param[in] scale scalefactor applied to each pix + * \param[in] outwidth the maxwidth parameter of tiled images + * for write_pix + * \param[in] write_pixa 1 to write the split pixa as separate files + * \param[in] write_pix 1 to write tiled images of the split pixa + * \param[in] write_pdf 1 to write pdfs of the split pixa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For each requested output, %nsplit files are written into
+ *          directory /tmp/lept/split/.
+ *      (2) This is useful when a pixa is so large that the images
+ *          are not conveniently displayed as a single tiled image at
+ *          full resolution.
+ * 
+ */ +l_ok +pixaSplitIntoFiles(PIXA *pixas, + l_int32 nsplit, + l_float32 scale, + l_int32 outwidth, + l_int32 write_pixa, + l_int32 write_pix, + l_int32 write_pdf) +{ +char buf[64]; +l_int32 i, j, index, n, nt; +PIX *pix1, *pix2; +PIXA *pixa1; + + PROCNAME("pixaSplitIntoFiles"); + + if (!pixas) + return ERROR_INT("pixas not defined", procName, 1); + if (nsplit <= 1) + return ERROR_INT("nsplit must be >= 2", procName, 1); + if ((nt = pixaGetCount(pixas)) == 0) + return ERROR_INT("pixas is empty", procName, 1); + if (!write_pixa && !write_pix && !write_pdf) + return ERROR_INT("no output is requested", procName, 1); + + lept_mkdir("lept/split"); + n = (nt + nsplit - 1) / nsplit; + fprintf(stderr, "nt = %d, n = %d, nsplit = %d\n", nt, n, nsplit); + for (i = 0, index = 0; i < nsplit; i++) { + pixa1 = pixaCreate(n); + for (j = 0; j < n && index < nt; j++, index++) { + pix1 = pixaGetPix(pixas, index, L_CLONE); + pix2 = pixScale(pix1, scale, scale); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + if (write_pixa) { + snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.pa", i + 1); + pixaWriteDebug(buf, pixa1); + } + if (write_pix) { + snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.tif", i + 1); + pix1 = pixaDisplayTiledInRows(pixa1, 1, outwidth, 1.0, 0, 20, 2); + pixWriteDebug(buf, pix1, IFF_TIFF_G4); + pixDestroy(&pix1); + } + if (write_pdf) { + snprintf(buf, sizeof(buf), "/tmp/lept/split/split%d.pdf", i + 1); + pixaConvertToPdf(pixa1, 0, 1.0, L_G4_ENCODE, 0, buf, buf); + } + pixaDestroy(&pixa1); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Tile N-Up * + *---------------------------------------------------------------------*/ +/*! + * \brief convertToNUpFiles() + * + * \param[in] dir full path to directory of images + * \param[in] substr [optional] can be null + * \param[in] nx, ny in [1, ... 50], tiling factors in each direction + * \param[in] tw target width, in pixels; must be >= 20 + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \param[in] fontsize to print tail of filename with image. Valid set is + * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \param[in] outdir subdirectory of /tmp to put N-up tiled images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Each set of %nx * %ny images is scaled and tiled into a single
+ *          image, that is written out to %outdir.
+ *      (2) All images in each %nx * %ny set are scaled to the same
+ *          width, %tw.  This is typically used when all images are
+ *          roughly the same size.
+ *      (3) This is useful for generating a pdf from the set of input
+ *          files, where each page is a tile of (%nx * %ny) input images.
+ *          Typical values for %nx and %ny are in the range [2 ... 5].
+ *      (4) If %fontsize != 0, each image has the tail of its filename
+ *          rendered below it.
+ * 
+ */ +l_ok +convertToNUpFiles(const char *dir, + const char *substr, + l_int32 nx, + l_int32 ny, + l_int32 tw, + l_int32 spacing, + l_int32 border, + l_int32 fontsize, + const char *outdir) +{ +l_int32 d, format; +char rootpath[256]; +PIXA *pixa; + + PROCNAME("convertToNUpFiles"); + + if (!dir) + return ERROR_INT("dir not defined", procName, 1); + if (nx < 1 || ny < 1 || nx > 50 || ny > 50) + return ERROR_INT("invalid tiling N-factor", procName, 1); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return ERROR_INT("invalid fontsize", procName, 1); + if (!outdir) + return ERROR_INT("outdir not defined", procName, 1); + + pixa = convertToNUpPixa(dir, substr, nx, ny, tw, spacing, border, + fontsize); + if (!pixa) + return ERROR_INT("pixa not made", procName, 1); + + lept_rmdir(outdir); + lept_mkdir(outdir); + pixaGetRenderingDepth(pixa, &d); + format = (d == 1) ? IFF_TIFF_G4 : IFF_JFIF_JPEG; + makeTempDirname(rootpath, 256, outdir); + modifyTrailingSlash(rootpath, 256, L_ADD_TRAIL_SLASH); + pixaWriteFiles(rootpath, pixa, format); + pixaDestroy(&pixa); + return 0; +} + + +/*! + * \brief convertToNUpPixa() + * + * \param[in] dir full path to directory of images + * \param[in] substr [optional] can be null + * \param[in] nx, ny in [1, ... 50], tiling factors in each direction + * \param[in] tw target width, in pixels; must be >= 20 + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \param[in] fontsize to print tail of filename with image. Valid set is + * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes for convertToNUpFiles()
+ * 
+ */ +PIXA * +convertToNUpPixa(const char *dir, + const char *substr, + l_int32 nx, + l_int32 ny, + l_int32 tw, + l_int32 spacing, + l_int32 border, + l_int32 fontsize) +{ +l_int32 i, n; +char *fname, *tail; +PIXA *pixa1, *pixa2; +SARRAY *sa1, *sa2; + + PROCNAME("convertToNUpPixa"); + + if (!dir) + return (PIXA *)ERROR_PTR("dir not defined", procName, NULL); + if (nx < 1 || ny < 1 || nx > 50 || ny > 50) + return (PIXA *)ERROR_PTR("invalid tiling N-factor", procName, NULL); + if (tw < 20) + return (PIXA *)ERROR_PTR("tw must be >= 20", procName, NULL); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return (PIXA *)ERROR_PTR("invalid fontsize", procName, NULL); + + sa1 = getSortedPathnamesInDirectory(dir, substr, 0, 0); + pixa1 = pixaReadFilesSA(sa1); + n = sarrayGetCount(sa1); + sa2 = sarrayCreate(n); + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa1, i, L_NOCOPY); + splitPathAtDirectory(fname, NULL, &tail); + sarrayAddString(sa2, tail, L_INSERT); + } + sarrayDestroy(&sa1); + pixa2 = pixaConvertToNUpPixa(pixa1, sa2, nx, ny, tw, spacing, + border, fontsize); + pixaDestroy(&pixa1); + sarrayDestroy(&sa2); + return pixa2; +} + + +/*! + * \brief pixaConvertToNUpPixa() + * + * \param[in] pixas + * \param[in] sa [optional] array of strings associated with each pix + * \param[in] nx, ny in [1, ... 50], tiling factors in each direction + * \param[in] tw target width, in pixels; must be >= 20 + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \param[in] fontsize to print string with each image. Valid set is + * {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \return pixad, or NULL on error + * + *
+ * Notes:
+ *      (1) This takes an input pixa and an optional array of strings, and
+ *          generates a pixa of NUp tiles from the input, labeled with
+ *          the strings if they exist and %fontsize != 0.
+ *      (2) See notes for convertToNUpFiles()
+ * 
+ */ +PIXA * +pixaConvertToNUpPixa(PIXA *pixas, + SARRAY *sa, + l_int32 nx, + l_int32 ny, + l_int32 tw, + l_int32 spacing, + l_int32 border, + l_int32 fontsize) +{ +l_int32 i, j, k, nt, n2, nout, d; +char *str; +L_BMF *bmf; +PIX *pix1, *pix2, *pix3, *pix4; +PIXA *pixa1, *pixad; + + PROCNAME("pixaConvertToNUpPixa"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (nx < 1 || ny < 1 || nx > 50 || ny > 50) + return (PIXA *)ERROR_PTR("invalid tiling N-factor", procName, NULL); + if (tw < 20) + return (PIXA *)ERROR_PTR("tw must be >= 20", procName, NULL); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return (PIXA *)ERROR_PTR("invalid fontsize", procName, NULL); + + nt = pixaGetCount(pixas); + if (sa && (sarrayGetCount(sa) != nt)) { + L_WARNING("pixa size %d not equal to sarray size %d\n", procName, + nt, sarrayGetCount(sa)); + } + + n2 = nx * ny; + nout = (nt + n2 - 1) / n2; + pixad = pixaCreate(nout); + bmf = (fontsize == 0) ? NULL : bmfCreate(NULL, fontsize); + for (i = 0, j = 0; i < nout; i++) { + pixa1 = pixaCreate(n2); + for (k = 0; k < n2 && j < nt; j++, k++) { + pix1 = pixaGetPix(pixas, j, L_CLONE); + pix2 = pixScaleToSize(pix1, tw, 0); /* all images have width tw */ + if (bmf && sa) { + str = sarrayGetString(sa, j, L_NOCOPY); + pix3 = pixAddTextlines(pix2, bmf, str, 0xff000000, + L_ADD_BELOW); + } else { + pix3 = pixClone(pix2); + } + pixaAddPix(pixa1, pix3, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + if (pixaGetCount(pixa1) == 0) { /* probably won't happen */ + pixaDestroy(&pixa1); + continue; + } + + /* Add 2 * border to image width to prevent scaling */ + pixaGetRenderingDepth(pixa1, &d); + pix4 = pixaDisplayTiledAndScaled(pixa1, d, tw + 2 * border, nx, 0, + spacing, border); + pixaAddPix(pixad, pix4, L_INSERT); + pixaDestroy(&pixa1); + } + + bmfDestroy(&bmf); + return pixad; +} + + +/*---------------------------------------------------------------------* + * Render two pixa side-by-side for comparison * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaCompareInPdf() + * + * \param[in] pixa1 + * \param[in] pixa2 + * \param[in] nx, ny in [1, ... 20], tiling factors in each direction + * \param[in] tw target width, in pixels; must be >= 20 + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image + * and on each pair; use 0 for no border + * \param[in] fontsize to print index of each pair of images. Valid set + * is {4,6,8,10,12,14,16,18,20}. Use 0 to disable. + * \param[in] fileout output pdf file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This takes two pixa and renders them interleaved, side-by-side
+ *          in a pdf.  A warning is issued if the input pixa arrays
+ *          have different lengths.
+ *      (2) %nx and %ny specify how many side-by-side pairs are displayed
+ *          on each pdf page.  For example, if %nx = 1 and %ny = 2, then
+ *          two pairs are shown, one above the other, on each page.
+ *      (3) The input pix are scaled to a target width of %tw, and
+ *          then paired with optional %spacing between and optional
+ *          black border of width %border.
+ *      (4) After a pixa is generated of these tiled images, it is
+ *          written to %fileout as a pdf.
+ *      (5) Typical numbers for the input parameters are:
+ *            %nx = small integer (1 - 4)
+ *            %ny = 2 * %nx
+ *            %tw = 200 - 500 pixels
+ *            %spacing = 10
+ *            %border = 2
+ *            %fontsize = 10
+ *      (6) If %fontsize != 0, the index of the pix pair in their pixa
+ *          is printed out below each pair.
+ * 
+ */ +l_ok +pixaCompareInPdf(PIXA *pixa1, + PIXA *pixa2, + l_int32 nx, + l_int32 ny, + l_int32 tw, + l_int32 spacing, + l_int32 border, + l_int32 fontsize, + const char *fileout) +{ +l_int32 n1, n2, npairs; +PIXA *pixa3, *pixa4, *pixa5; +SARRAY *sa; + + PROCNAME("pixaCompareInPdf"); + + if (!pixa1 || !pixa2) + return ERROR_INT("pixa1 and pixa2 not both defined", procName, 1); + if (nx < 1 || ny < 1 || nx > 20 || ny > 20) + return ERROR_INT("invalid tiling factors", procName, 1); + if (tw < 20) + return ERROR_INT("invalid tw; tw must be >= 20", procName, 1); + if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2) + return ERROR_INT("invalid fontsize", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + n1 = pixaGetCount(pixa1); + n2 = pixaGetCount(pixa2); + if (n1 == 0 || n2 == 0) + return ERROR_INT("at least one pixa is empty", procName, 1); + if (n1 != n2) + L_WARNING("sizes (%d, %d) differ; using the minimum in interleave\n", + procName, n1, n2); + + /* Interleave the input pixa */ + if ((pixa3 = pixaInterleave(pixa1, pixa2, L_CLONE)) == NULL) + return ERROR_INT("pixa3 not made", procName, 1); + + /* Scale the images if necessary and pair them up side/by/side */ + pixa4 = pixaConvertToNUpPixa(pixa3, NULL, 2, 1, tw, spacing, border, 0); + pixaDestroy(&pixa3); + + /* Label the pairs and mosaic into pages without further scaling */ + npairs = pixaGetCount(pixa4); + sa = (fontsize > 0) ? sarrayGenerateIntegers(npairs) : NULL; + pixa5 = pixaConvertToNUpPixa(pixa4, sa, nx, ny, + 2 * tw + 4 * border + spacing, + spacing, border, fontsize); + pixaDestroy(&pixa4); + sarrayDestroy(&sa); + + /* Output as pdf without scaling */ + pixaConvertToPdf(pixa5, 0, 1.0, 0, 0, NULL, fileout); + pixaDestroy(&pixa5); + return 0; +} + + diff --git a/3rdparty/hgOCR/leptonica/pixalloc.c b/3rdparty/hgOCR/leptonica/pixalloc.c new file mode 100644 index 00000000..771dfd61 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixalloc.c @@ -0,0 +1,532 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixalloc.c + *
+ *
+ *      Custom memory storage with allocator and deallocator
+ *
+ *          l_int32       pmsCreate()
+ *          void          pmsDestroy()
+ *          void         *pmsCustomAlloc()
+ *          void          pmsCustomDealloc()
+ *          void         *pmsGetAlloc()
+ *          l_int32       pmsGetLevelForAlloc()
+ *          l_int32       pmsGetLevelForDealloc()
+ *          void          pmsLogInfo()
+ * 
+ */ + +#include "allheaders.h" + +/*-------------------------------------------------------------------------* + * Pix Memory Storage * + * * + * This is a simple utility for handling pix memory storage. It is * + * enabled by setting the PixMemoryManager allocators to the functions * + * that are defined here * + * pmsCustomAlloc() * + * pmsCustomDealloc() * + * Use pmsCreate() at the beginning to do the pre-allocation, and * + * pmsDestroy() at the end to clean it up. * + *-------------------------------------------------------------------------*/ +/* + * In the following, the "memory" refers to the image data + * field that is used within the pix. The memory store is a + * continuous block of memory, that is logically divided into + * smaller "chunks" starting with a set at a minimum size, and + * followed by sets of increasing size that are a power of 2 larger + * than the minimum size. You must specify the number of chunks + * of each size. + * + * A requested data chunk, if it exists, is borrowed from the memory + * storage, and returned after use. If the chunk is too small, or + * too large, or if all chunks in the appropriate size range are + * in use, the memory is allocated dynamically and freed after use. + * + * There are four parameters that determine the use of pre-allocated memory: + * + * minsize: any requested chunk smaller than this is allocated + * dynamically and destroyed after use. No preallocated + * memory is used. + * smallest: the size of the smallest pre-allocated memory chunk. + * nlevels: the number of different sizes of data chunks, each a + * power of 2 larger than 'smallest'. + * numalloc: a Numa of size 'nlevels' containing the number of data + * chunks for each size that are in the memory store. + * + * As an example, suppose: + * minsize = 0.5MB + * smallest = 1.0MB + * nlevels = 4 + * numalloc = {10, 5, 5, 5} + * Then the total amount of allocated memory (in MB) is + * 10 * 1 + 5 * 2 + 5 * 4 + 5 * 8 = 80 MB + * Any pix requiring less than 0.5 MB or more than 8 MB of memory will + * not come from the memory store. Instead, it will be dynamically + * allocated and freed after use. + * + * How is this implemented? + * + * At setup, the full data block size is computed and allocated. + * The addresses of the individual chunks are found, and the pointers + * are stored in a set of Ptra (generic pointer arrays), using one Ptra + * for each of the sizes of the chunks. When returning a chunk after + * use, it is necessary to determine from the address which size level + * (ptra) the chunk belongs to. This is done by comparing the address + * of the associated chunk. + * + * In the event that memory chunks need to be dynamically allocated, + * either (1) because they are too small or too large for the memory + * store or (2) because all the pix of that size (i.e., in the + * appropriate level) in the memory store are in use, the + * addresses generated will be outside the pre-allocated block. + * After use they won't be returned to a ptra; instead the deallocator + * will free them. + */ + +/*! Pix memory storage */ +struct PixMemoryStore +{ + struct L_Ptraa *paa; /*!< Holds ptrs to allocated memory */ + size_t minsize; /*!< Pix smaller than this (in bytes) */ + /*!< are allocated dynamically */ + size_t smallest; /*!< Smallest mem (in bytes) alloc'd */ + size_t largest; /*!< Larest mem (in bytes) alloc'd */ + size_t nbytes; /*!< Size of allocated block w/ all chunks */ + l_int32 nlevels; /*!< Num of power-of-2 sizes pre-alloc'd */ + size_t *sizes; /*!< Mem sizes at each power-of-2 level */ + l_int32 *allocarray; /*!< Number of mem alloc'd at each size */ + l_uint32 *baseptr; /*!< ptr to allocated array */ + l_uint32 *maxptr; /*!< ptr just beyond allocated memory */ + l_uint32 **firstptr; /*!< array of ptrs to first chunk in size */ + l_int32 *memused; /*!< log: total # of pix used (by level) */ + l_int32 *meminuse; /*!< log: # of pix in use (by level) */ + l_int32 *memmax; /*!< log: max # of pix in use (by level) */ + l_int32 *memempty; /*!< log: # of pix alloc'd because */ + /*!< the store was empty (by level) */ + char *logfile; /*!< log: set to null if no logging */ +}; +typedef struct PixMemoryStore L_PIX_MEM_STORE; + +static L_PIX_MEM_STORE *CustomPMS = NULL; + + +/*! + * \brief pmsCreate() + * + * \param[in] minsize of data chunk that can be supplied by pms + * \param[in] smallest bytes of the smallest pre-allocated data chunk. + * \param[in] numalloc array with the number of data chunks for each + * size that are in the memory store + * \param[in] logfile use for debugging; null otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This computes the size of the block of memory required
+ *          and allocates it.  Each chunk starts on a 32-bit word boundary.
+ *          The chunk sizes are in powers of 2, starting at %smallest,
+ *          and the number of levels and chunks at each level is
+ *          specified by %numalloc.
+ *      (2) This is intended to manage the image data for a small number
+ *          of relatively large pix.  The system malloc is expected to
+ *          handle very large numbers of small chunks efficiently.
+ *      (3) Important: set the allocators and call this function
+ *          before any pix have been allocated.  Destroy all the pix
+ *          in the normal way before calling pmsDestroy().
+ *      (4) The pms struct is stored in a static global, so this function
+ *          is not thread-safe.  When used, there must be only one thread
+ *          per process.
+ * 
+ */ +l_ok +pmsCreate(size_t minsize, + size_t smallest, + NUMA *numalloc, + const char *logfile) +{ +l_int32 nlevels, i, j, nbytes; +l_int32 *alloca; +l_float32 nchunks; +l_uint32 *baseptr, *data; +l_uint32 **firstptr; +size_t *sizes; +L_PIX_MEM_STORE *pms; +L_PTRA *pa; +L_PTRAA *paa; + + PROCNAME("createPMS"); + + if (!numalloc) + return ERROR_INT("numalloc not defined", procName, 1); + numaGetSum(numalloc, &nchunks); + if (nchunks > 1000.0) + L_WARNING("There are %.0f chunks\n", procName, nchunks); + + pms = (L_PIX_MEM_STORE *)LEPT_CALLOC(1, sizeof(L_PIX_MEM_STORE)); + CustomPMS = pms; + + /* Make sure that minsize and smallest are multiples of 32 bit words */ + if (minsize % 4 != 0) + minsize -= minsize % 4; + pms->minsize = minsize; + nlevels = numaGetCount(numalloc); + pms->nlevels = nlevels; + + if ((sizes = (size_t *)LEPT_CALLOC(nlevels, sizeof(size_t))) == NULL) + return ERROR_INT("sizes not made", procName, 1); + pms->sizes = sizes; + if (smallest % 4 != 0) + smallest += 4 - (smallest % 4); + pms->smallest = smallest; + for (i = 0; i < nlevels; i++) + sizes[i] = smallest * (1 << i); + pms->largest = sizes[nlevels - 1]; + + alloca = numaGetIArray(numalloc); + pms->allocarray = alloca; + if ((paa = ptraaCreate(nlevels)) == NULL) + return ERROR_INT("paa not made", procName, 1); + pms->paa = paa; + + for (i = 0, nbytes = 0; i < nlevels; i++) + nbytes += alloca[i] * sizes[i]; + pms->nbytes = nbytes; + + if ((baseptr = (l_uint32 *)LEPT_CALLOC(nbytes / 4, sizeof(l_uint32))) + == NULL) + return ERROR_INT("calloc fail for baseptr", procName, 1); + pms->baseptr = baseptr; + pms->maxptr = baseptr + nbytes / 4; /* just beyond the memory store */ + if ((firstptr = (l_uint32 **)LEPT_CALLOC(nlevels, sizeof(l_uint32 *))) + == NULL) + return ERROR_INT("calloc fail for firstptr", procName, 1); + pms->firstptr = firstptr; + + data = baseptr; + for (i = 0; i < nlevels; i++) { + if ((pa = ptraCreate(alloca[i])) == NULL) + return ERROR_INT("pa not made", procName, 1); + ptraaInsertPtra(paa, i, pa); + firstptr[i] = data; + for (j = 0; j < alloca[i]; j++) { + ptraAdd(pa, data); + data += sizes[i] / 4; + } + } + + if (logfile) { + pms->memused = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); + pms->meminuse = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); + pms->memmax = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); + pms->memempty = (l_int32 *)LEPT_CALLOC(nlevels, sizeof(l_int32)); + pms->logfile = stringNew(logfile); + } + + return 0; +} + + +/*! + * \brief pmsDestroy() + * + *
+ * Notes:
+ *      (1) Important: call this function at the end of the program, after
+ *          the last pix has been destroyed.
+ * 
+ */ +void +pmsDestroy() +{ +L_PIX_MEM_STORE *pms; + + if ((pms = CustomPMS) == NULL) + return; + + ptraaDestroy(&pms->paa, FALSE, FALSE); /* don't touch the ptrs */ + LEPT_FREE(pms->baseptr); /* free the memory */ + + if (pms->logfile) { + pmsLogInfo(); + LEPT_FREE(pms->logfile); + LEPT_FREE(pms->memused); + LEPT_FREE(pms->meminuse); + LEPT_FREE(pms->memmax); + LEPT_FREE(pms->memempty); + } + + LEPT_FREE(pms->sizes); + LEPT_FREE(pms->allocarray); + LEPT_FREE(pms->firstptr); + LEPT_FREE(pms); + CustomPMS = NULL; + return; +} + + +/*! + * \brief pmsCustomAlloc() + * + * \param[in] nbytes min number of bytes in the chunk to be retrieved + * \return data ptr to chunk + * + *
+ * Notes:
+ *      (1) This attempts to find a suitable pre-allocated chunk.
+ *          If not found, it dynamically allocates the chunk.
+ *      (2) If logging is turned on, the allocations that are not taken
+ *          from the memory store, and are at least as large as the
+ *          minimum size the store can handle, are logged to file.
+ * 
+ */ +void * +pmsCustomAlloc(size_t nbytes) +{ +l_int32 level; +void *data; +L_PIX_MEM_STORE *pms; +L_PTRA *pa; + + PROCNAME("pmsCustomAlloc"); + + if ((pms = CustomPMS) == NULL) + return (void *)ERROR_PTR("pms not defined", procName, NULL); + + pmsGetLevelForAlloc(nbytes, &level); + + if (level < 0) { /* size range invalid; must alloc */ + if ((data = pmsGetAlloc(nbytes)) == NULL) + return (void *)ERROR_PTR("data not made", procName, NULL); + } else { /* get from store */ + pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); + data = ptraRemoveLast(pa); + if (data && pms->logfile) { + pms->memused[level]++; + pms->meminuse[level]++; + if (pms->meminuse[level] > pms->memmax[level]) + pms->memmax[level]++; + } + if (!data) { /* none left at this level */ + data = pmsGetAlloc(nbytes); + if (pms->logfile) + pms->memempty[level]++; + } + } + + return data; +} + + +/*! + * \brief pmsCustomDealloc() + * + * \param[in] data to be freed or returned to the storage + * \return void + */ +void +pmsCustomDealloc(void *data) +{ +l_int32 level; +L_PIX_MEM_STORE *pms; +L_PTRA *pa; + + PROCNAME("pmsCustomDealloc"); + + if ((pms = CustomPMS) == NULL) { + L_ERROR("pms not defined\n", procName); + return; + } + + if (pmsGetLevelForDealloc(data, &level) == 1) { + L_ERROR("level not found\n", procName); + return; + } + + if (level < 0) { /* no logging; just free the data */ + LEPT_FREE(data); + } else { /* return the data to the store */ + pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); + ptraAdd(pa, data); + if (pms->logfile) + pms->meminuse[level]--; + } + + return; +} + + +/*! + * \brief pmsGetAlloc() + * + * \param[in] nbytes + * \return data + * + *
+ * Notes:
+ *      (1) This is called when a request for pix data cannot be
+ *          obtained from the preallocated memory store.  After use it
+ *          is freed like normal memory.
+ *      (2) If logging is on, only write out allocs that are as large as
+ *          the minimum size handled by the memory store.
+ *      (3) size_t is %lu on 64 bit platforms and %u on 32 bit platforms.
+ *          The C99 platform-independent format specifier for size_t is %zu.
+ *          Windows since at least VC-2015 is conforming; we can now use %zu.
+ * 
+ */ +void * +pmsGetAlloc(size_t nbytes) +{ +void *data; +FILE *fp; +L_PIX_MEM_STORE *pms; + + PROCNAME("pmsGetAlloc"); + + if ((pms = CustomPMS) == NULL) + return (void *)ERROR_PTR("pms not defined", procName, NULL); + + if ((data = (void *)LEPT_CALLOC(nbytes, sizeof(char))) == NULL) + return (void *)ERROR_PTR("data not made", procName, NULL); + if (pms->logfile && nbytes >= pms->smallest) { + fp = fopenWriteStream(pms->logfile, "a"); + fprintf(fp, "Alloc %zu bytes at %p\n", nbytes, data); + fclose(fp); + } + + return data; +} + + +/*! + * \brief pmsGetLevelForAlloc() + * + * \param[in] nbytes min number of bytes in the chunk to be retrieved + * \param[out] plevel -1 if either too small or too large + * \return 0 if OK, 1 on error + */ +l_ok +pmsGetLevelForAlloc(size_t nbytes, + l_int32 *plevel) +{ +l_int32 i; +l_float64 ratio; +L_PIX_MEM_STORE *pms; + + PROCNAME("pmsGetLevelForAlloc"); + + if (!plevel) + return ERROR_INT("&level not defined", procName, 1); + *plevel = -1; + if ((pms = CustomPMS) == NULL) + return ERROR_INT("pms not defined", procName, 1); + + if (nbytes < pms->minsize || nbytes > pms->largest) + return 0; /* -1 */ + + ratio = (l_float64)nbytes / (l_float64)(pms->smallest); + for (i = 0; i < pms->nlevels; i++) { + if (ratio <= 1.0) + break; + ratio /= 2.0; + } + *plevel = i; + + return 0; +} + + +/*! + * \brief pmsGetLevelForDealloc() + * + * \param[in] data ptr to memory chunk + * \param[out] plevel level in memory store; -1 if allocated + * outside the store + * \return 0 if OK, 1 on error + */ +l_ok +pmsGetLevelForDealloc(void *data, + l_int32 *plevel) +{ +l_int32 i; +l_uint32 *first; +L_PIX_MEM_STORE *pms; + + PROCNAME("pmsGetLevelForDealloc"); + + if (!plevel) + return ERROR_INT("&level not defined", procName, 1); + *plevel = -1; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if ((pms = CustomPMS) == NULL) + return ERROR_INT("pms not defined", procName, 1); + + if (data < (void *)pms->baseptr || data >= (void *)pms->maxptr) + return 0; /* -1 */ + + for (i = 1; i < pms->nlevels; i++) { + first = pms->firstptr[i]; + if (data < (void *)first) + break; + } + *plevel = i - 1; + + return 0; +} + + +/*! + * \brief pmsLogInfo() + */ +void +pmsLogInfo() +{ +l_int32 i; +L_PIX_MEM_STORE *pms; + + if ((pms = CustomPMS) == NULL) + return; + + fprintf(stderr, "Total number of pix used at each level\n"); + for (i = 0; i < pms->nlevels; i++) + fprintf(stderr, " Level %d (%zu bytes): %d\n", i, + pms->sizes[i], pms->memused[i]); + + fprintf(stderr, "Max number of pix in use at any time in each level\n"); + for (i = 0; i < pms->nlevels; i++) + fprintf(stderr, " Level %d (%zu bytes): %d\n", i, + pms->sizes[i], pms->memmax[i]); + + fprintf(stderr, "Number of pix alloc'd because none were available\n"); + for (i = 0; i < pms->nlevels; i++) + fprintf(stderr, " Level %d (%zu bytes): %d\n", i, + pms->sizes[i], pms->memempty[i]); + + return; +} diff --git a/3rdparty/hgOCR/leptonica/pixarith.c b/3rdparty/hgOCR/leptonica/pixarith.c new file mode 100644 index 00000000..cef1cb07 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixarith.c @@ -0,0 +1,1531 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixarith.c + *
+ *
+ *      One-image grayscale arithmetic operations (8, 16, 32 bpp)
+ *           l_int32     pixAddConstantGray()
+ *           l_int32     pixMultConstantGray()
+ *
+ *      Two-image grayscale arithmetic operations (8, 16, 32 bpp)
+ *           PIX        *pixAddGray()
+ *           PIX        *pixSubtractGray()
+ *
+ *      Grayscale threshold operation (8, 16, 32 bpp)
+ *           PIX        *pixThresholdToValue()
+ *
+ *      Image accumulator arithmetic operations
+ *           PIX        *pixInitAccumulate()
+ *           PIX        *pixFinalAccumulate()
+ *           PIX        *pixFinalAccumulateThreshold()
+ *           l_int32     pixAccumulate()
+ *           l_int32     pixMultConstAccumulate()
+ *
+ *      Absolute value of difference
+ *           PIX        *pixAbsDifference()
+ *
+ *      Sum of color images
+ *           PIX        *pixAddRGB()
+ *
+ *      Two-image min and max operations (8 and 16 bpp)
+ *           PIX        *pixMinOrMax()
+ *
+ *      Scale pix for maximum dynamic range
+ *           PIX        *pixMaxDynamicRange()
+ *           PIX        *pixMaxDynamicRangeRGB()
+ *
+ *      RGB pixel value scaling
+ *           l_uint32    linearScaleRGBVal()
+ *           l_uint32    logScaleRGBVal()
+ *
+ *      Log base2 lookup
+ *           l_float32  *makeLogBase2Tab()
+ *           l_float32   getLogBase2()
+ *
+ *      The image accumulator operations are used when you expect
+ *      overflow from 8 bits on intermediate results.  For example,
+ *      you might want a tophat contrast operator which is
+ *         3*I - opening(I,S) - closing(I,S)
+ *      To use these operations, first use the init to generate
+ *      a 16 bpp image, use the accumulate to add or subtract 8 bpp
+ *      images from that, or the multiply constant to multiply
+ *      by a small constant (much less than 256 -- we don't want
+ *      overflow from the 16 bit images!), and when you're finished
+ *      use final to bring the result back to 8 bpp, clipped
+ *      if necessary.  There is also a divide function, which
+ *      can be used to divide one image by another, scaling the
+ *      result for maximum dynamic range, and giving back the
+ *      8 bpp result.
+ *
+ *      A simpler interface to the arithmetic operations is
+ *      provided in pixacc.c.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + +/*-------------------------------------------------------------* + * One-image grayscale arithmetic operations * + *-------------------------------------------------------------*/ +/*! + * \brief pixAddConstantGray() + * + * \param[in] pixs 8, 16 or 32 bpp + * \param[in] val amount to add to each pixel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation.
+ *      (2) No clipping for 32 bpp.
+ *      (3) For 8 and 16 bpp, if val > 0 the result is clipped
+ *          to 0xff and 0xffff, rsp.
+ *      (4) For 8 and 16 bpp, if val < 0 the result is clipped to 0.
+ * 
+ */ +l_ok +pixAddConstantGray(PIX *pixs, + l_int32 val) +{ +l_int32 i, j, w, h, d, wpl, pval; +l_uint32 *data, *line; + + PROCNAME("pixAddConstantGray"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16 && d != 32) + return ERROR_INT("pixs not 8, 16 or 32 bpp", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (d == 8) { + if (val < 0) { + for (j = 0; j < w; j++) { + pval = GET_DATA_BYTE(line, j); + pval = L_MAX(0, pval + val); + SET_DATA_BYTE(line, j, pval); + } + } else { /* val >= 0 */ + for (j = 0; j < w; j++) { + pval = GET_DATA_BYTE(line, j); + pval = L_MIN(255, pval + val); + SET_DATA_BYTE(line, j, pval); + } + } + } else if (d == 16) { + if (val < 0) { + for (j = 0; j < w; j++) { + pval = GET_DATA_TWO_BYTES(line, j); + pval = L_MAX(0, pval + val); + SET_DATA_TWO_BYTES(line, j, pval); + } + } else { /* val >= 0 */ + for (j = 0; j < w; j++) { + pval = GET_DATA_TWO_BYTES(line, j); + pval = L_MIN(0xffff, pval + val); + SET_DATA_TWO_BYTES(line, j, pval); + } + } + } else { /* d == 32; no check for overflow (< 0 or > 0xffffffff) */ + for (j = 0; j < w; j++) + *(line + j) += val; + } + } + + return 0; +} + + +/*! + * \brief pixMultConstantGray() + * + * \param[in] pixs 8, 16 or 32 bpp + * \param[in] val >= 0.0; amount to multiply by each pixel + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place operation; val must be >= 0.
+ *      (2) No clipping for 32 bpp.
+ *      (3) For 8 and 16 bpp, the result is clipped to 0xff and 0xffff, rsp.
+ * 
+ */ +l_ok +pixMultConstantGray(PIX *pixs, + l_float32 val) +{ +l_int32 i, j, w, h, d, wpl, pval; +l_uint32 upval; +l_uint32 *data, *line; + + PROCNAME("pixMultConstantGray"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 16 && d != 32) + return ERROR_INT("pixs not 8, 16 or 32 bpp", procName, 1); + if (val < 0.0) + return ERROR_INT("val < 0.0", procName, 1); + + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (d == 8) { + for (j = 0; j < w; j++) { + pval = GET_DATA_BYTE(line, j); + pval = (l_int32)(val * pval); + pval = L_MIN(255, pval); + SET_DATA_BYTE(line, j, pval); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + pval = GET_DATA_TWO_BYTES(line, j); + pval = (l_int32)(val * pval); + pval = L_MIN(0xffff, pval); + SET_DATA_TWO_BYTES(line, j, pval); + } + } else { /* d == 32; no clipping */ + for (j = 0; j < w; j++) { + upval = *(line + j); + upval = (l_uint32)(val * upval); + *(line + j) = upval; + } + } + } + + return 0; +} + + +/*-------------------------------------------------------------* + * Two-image grayscale arithmetic ops * + *-------------------------------------------------------------*/ +/*! + * \brief pixAddGray() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, or + * different from pixs1 + * \param[in] pixs1 can be equal to pixd + * \param[in] pixs2 + * \return pixd always + * + *
+ * Notes:
+ *      (1) Arithmetic addition of two 8, 16 or 32 bpp images.
+ *      (2) For 8 and 16 bpp, we do explicit clipping to 0xff and 0xffff,
+ *          respectively.
+ *      (3) Alignment is to UL corner.
+ *      (4) There are 3 cases.  The result can go to a new dest,
+ *          in-place to pixs1, or to an existing input dest:
+ *          * pixd == null:   (src1 + src2) --> new pixd
+ *          * pixd == pixs1:  (src1 + src2) --> src1  (in-place)
+ *          * pixd != pixs1:  (src1 + src2) --> input pixd
+ *      (5) pixs2 must be different from both pixd and pixs1.
+ * 
+ */ +PIX * +pixAddGray(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ +l_int32 i, j, d, ws, hs, w, h, wpls, wpld, val, sum; +l_uint32 *datas, *datad, *lines, *lined; + + PROCNAME("pixAddGray"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixs2 == pixs1) + return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", procName, pixd); + if (pixs2 == pixd) + return (PIX *)ERROR_PTR("pixs2 and pixd must differ", procName, pixd); + d = pixGetDepth(pixs1); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", procName, pixd); + if (pixGetDepth(pixs2) != d) + return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", procName, pixd); + if (pixd && (pixGetDepth(pixd) != d)) + return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", procName, pixd); + + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal in size\n", procName); + if (pixd && !pixSizesEqual(pixs1, pixd)) + L_WARNING("pixs1 and pixd not equal in size\n", procName); + + if (pixs1 != pixd) + pixd = pixCopy(pixd, pixs1); + + /* pixd + pixs2 ==> pixd */ + datas = pixGetData(pixs2); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs2); + wpld = pixGetWpl(pixd); + pixGetDimensions(pixs2, &ws, &hs, NULL); + pixGetDimensions(pixd, &w, &h, NULL); + w = L_MIN(ws, w); + h = L_MIN(hs, h); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + lines = datas + i * wpls; + if (d == 8) { + for (j = 0; j < w; j++) { + sum = GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lined, j); + val = L_MIN(sum, 255); + SET_DATA_BYTE(lined, j, val); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + sum = GET_DATA_TWO_BYTES(lines, j) + + GET_DATA_TWO_BYTES(lined, j); + val = L_MIN(sum, 0xffff); + SET_DATA_TWO_BYTES(lined, j, val); + } + } else { /* d == 32; no clipping */ + for (j = 0; j < w; j++) + *(lined + j) += *(lines + j); + } + } + + return pixd; +} + + +/*! + * \brief pixSubtractGray() + * + * \param[in] pixd [optional]; this can be null, equal to pixs1, or + * different from pixs1 + * \param[in] pixs1 can be equal to pixd + * \param[in] pixs2 + * \return pixd always + * + *
+ * Notes:
+ *      (1) Arithmetic subtraction of two 8, 16 or 32 bpp images.
+ *      (2) Source pixs2 is always subtracted from source pixs1.
+ *      (3) Do explicit clipping to 0.
+ *      (4) Alignment is to UL corner.
+ *      (5) There are 3 cases.  The result can go to a new dest,
+ *          in-place to pixs1, or to an existing input dest:
+ *          (a) pixd == null   (src1 - src2) --> new pixd
+ *          (b) pixd == pixs1  (src1 - src2) --> src1  (in-place)
+ *          (d) pixd != pixs1  (src1 - src2) --> input pixd
+ *      (6) pixs2 must be different from both pixd and pixs1.
+ * 
+ */ +PIX * +pixSubtractGray(PIX *pixd, + PIX *pixs1, + PIX *pixs2) +{ +l_int32 i, j, w, h, ws, hs, d, wpls, wpld, val, diff; +l_uint32 *datas, *datad, *lines, *lined; + + PROCNAME("pixSubtractGray"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixs2 == pixs1) + return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", procName, pixd); + if (pixs2 == pixd) + return (PIX *)ERROR_PTR("pixs2 and pixd must differ", procName, pixd); + d = pixGetDepth(pixs1); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", procName, pixd); + if (pixGetDepth(pixs2) != d) + return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", procName, pixd); + if (pixd && (pixGetDepth(pixd) != d)) + return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", procName, pixd); + + if (!pixSizesEqual(pixs1, pixs2)) + L_WARNING("pixs1 and pixs2 not equal in size\n", procName); + if (pixd && !pixSizesEqual(pixs1, pixd)) + L_WARNING("pixs1 and pixd not equal in size\n", procName); + + if (pixs1 != pixd) + pixd = pixCopy(pixd, pixs1); + + /* pixd - pixs2 ==> pixd */ + datas = pixGetData(pixs2); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs2); + wpld = pixGetWpl(pixd); + pixGetDimensions(pixs2, &ws, &hs, NULL); + pixGetDimensions(pixd, &w, &h, NULL); + w = L_MIN(ws, w); + h = L_MIN(hs, h); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + lines = datas + i * wpls; + if (d == 8) { + for (j = 0; j < w; j++) { + diff = GET_DATA_BYTE(lined, j) - GET_DATA_BYTE(lines, j); + val = L_MAX(diff, 0); + SET_DATA_BYTE(lined, j, val); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + diff = GET_DATA_TWO_BYTES(lined, j) + - GET_DATA_TWO_BYTES(lines, j); + val = L_MAX(diff, 0); + SET_DATA_TWO_BYTES(lined, j, val); + } + } else { /* d == 32; no clipping */ + for (j = 0; j < w; j++) + *(lined + j) -= *(lines + j); + } + } + + return pixd; +} + + +/*-------------------------------------------------------------* + * Grayscale threshold operation * + *-------------------------------------------------------------*/ +/*! + * \brief pixThresholdToValue() + * + * \param[in] pixd [optional]; if not null, must be equal to pixs + * \param[in] pixs 8, 16, 32 bpp + * \param[in] threshval + * \param[in] setval + * \return pixd always + * + *
+ * Notes:
+ *    ~ operation can be in-place (pixs == pixd) or to a new pixd
+ *    ~ if %setval > %threshval, sets pixels with a value >= threshval to setval
+ *    ~ if %setval < %threshval, sets pixels with a value <= threshval to setval
+ *    ~ if %setval == %threshval, no-op
+ * 
+ */ +PIX * +pixThresholdToValue(PIX *pixd, + PIX *pixs, + l_int32 threshval, + l_int32 setval) +{ +l_int32 i, j, w, h, d, wpld, setabove; +l_uint32 *datad, *lined; + + PROCNAME("pixThresholdToValue"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + d = pixGetDepth(pixs); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8, 16 or 32 bpp", procName, pixd); + if (pixd && (pixs != pixd)) + return (PIX *)ERROR_PTR("pixd exists and is not pixs", procName, pixd); + if (threshval < 0 || setval < 0) + return (PIX *)ERROR_PTR("threshval & setval not < 0", procName, pixd); + if (d == 8 && setval > 255) + return (PIX *)ERROR_PTR("setval > 255 for 8 bpp", procName, pixd); + if (d == 16 && setval > 0xffff) + return (PIX *)ERROR_PTR("setval > 0xffff for 16 bpp", procName, pixd); + + if (!pixd) + pixd = pixCopy(NULL, pixs); + if (setval == threshval) { + L_WARNING("setval == threshval; no operation\n", procName); + return pixd; + } + + datad = pixGetData(pixd); + pixGetDimensions(pixd, &w, &h, NULL); + wpld = pixGetWpl(pixd); + if (setval > threshval) + setabove = TRUE; + else + setabove = FALSE; + + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + if (setabove == TRUE) { + if (d == 8) { + for (j = 0; j < w; j++) { + if (GET_DATA_BYTE(lined, j) - threshval >= 0) + SET_DATA_BYTE(lined, j, setval); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + if (GET_DATA_TWO_BYTES(lined, j) - threshval >= 0) + SET_DATA_TWO_BYTES(lined, j, setval); + } + } else { /* d == 32 */ + for (j = 0; j < w; j++) { + if (*(lined + j) >= threshval) + *(lined + j) = setval; + } + } + } else { /* set if below or at threshold */ + if (d == 8) { + for (j = 0; j < w; j++) { + if (GET_DATA_BYTE(lined, j) - threshval <= 0) + SET_DATA_BYTE(lined, j, setval); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + if (GET_DATA_TWO_BYTES(lined, j) - threshval <= 0) + SET_DATA_TWO_BYTES(lined, j, setval); + } + } else { /* d == 32 */ + for (j = 0; j < w; j++) { + if (*(lined + j) <= threshval) + *(lined + j) = setval; + } + } + } + } + + return pixd; +} + + +/*-------------------------------------------------------------* + * Image accumulator arithmetic operations * + *-------------------------------------------------------------*/ +/*! + * \brief pixInitAccumulate() + * + * \param[in] w, h of accumulate array + * \param[in] offset initialize the 32 bpp to have this + * value; not more than 0x40000000 + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) %offset must be >= 0.
+ *      (2) %offset is used so that we can do arithmetic
+ *          with negative number results on l_uint32 data; it
+ *          prevents the l_uint32 data from going negative.
+ *      (3) Because we use l_int32 intermediate data results,
+ *          these should never exceed the max of l_int32 (0x7fffffff).
+ *          We do not permit the offset to be above 0x40000000,
+ *          which is half way between 0 and the max of l_int32.
+ *      (4) The same offset should be used for initialization,
+ *          multiplication by a constant, and final extraction!
+ *      (5) If you're only adding positive values, %offset can be 0.
+ * 
+ */ +PIX * +pixInitAccumulate(l_int32 w, + l_int32 h, + l_uint32 offset) +{ +PIX *pixd; + + PROCNAME("pixInitAccumulate"); + + if ((pixd = pixCreate(w, h, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + if (offset > 0x40000000) + offset = 0x40000000; + pixSetAllArbitrary(pixd, offset); + return pixd; +} + + +/*! + * \brief pixFinalAccumulate() + * + * \param[in] pixs 32 bpp + * \param[in] offset same as used for initialization + * \param[in] depth 8, 16 or 32 bpp, of destination + * \return pixd 8, 16 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) %offset must be >= 0 and should not exceed 0x40000000.
+ *      (2) %offset is subtracted from the src 32 bpp image
+ *      (3) For 8 bpp dest, the result is clipped to [0, 0xff]
+ *      (4) For 16 bpp dest, the result is clipped to [0, 0xffff]
+ * 
+ */ +PIX * +pixFinalAccumulate(PIX *pixs, + l_uint32 offset, + l_int32 depth) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixFinalAccumulate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (depth != 8 && depth != 16 && depth != 32) + return (PIX *)ERROR_PTR("dest depth not 8, 16, 32 bpp", procName, NULL); + if (offset > 0x40000000) + offset = 0x40000000; + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, depth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + if (depth == 8) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j] - offset; + val = L_MAX(0, val); + val = L_MIN(255, val); + SET_DATA_BYTE(lined, j, (l_uint8)val); + } + } + } else if (depth == 16) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j] - offset; + val = L_MAX(0, val); + val = L_MIN(0xffff, val); + SET_DATA_TWO_BYTES(lined, j, (l_uint16)val); + } + } + } else { /* depth == 32 */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) + lined[j] = lines[j] - offset; + } + } + + return pixd; +} + + +/*! + * \brief pixFinalAccumulateThreshold() + * + * \param[in] pixs 32 bpp + * \param[in] offset same as used for initialization + * \param[in] threshold values less than this are set in the destination + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) %offset must be >= 0 and should not exceed 0x40000000.
+ *      (2) %offset is subtracted from the src 32 bpp image
+ * 
+ */ +PIX * +pixFinalAccumulateThreshold(PIX *pixs, + l_uint32 offset, + l_uint32 threshold) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixFinalAccumulateThreshold"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (offset > 0x40000000) + offset = 0x40000000; + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = lines[j] - offset; + if (val >= threshold) { + SET_DATA_BIT(lined, j); + } + } + } + + return pixd; +} + + +/*! + * \brief pixAccumulate() + * + * \param[in] pixd 32 bpp + * \param[in] pixs 1, 8, 16 or 32 bpp + * \param[in] op L_ARITH_ADD or L_ARITH_SUBTRACT + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This adds or subtracts each pixs value from pixd.
+ *      (2) This clips to the minimum of pixs and pixd, so they
+ *          do not need to be the same size.
+ *      (3) The alignment is to the origin [UL corner] of pixs & pixd.
+ * 
+ */ +l_ok +pixAccumulate(PIX *pixd, + PIX *pixs, + l_int32 op) +{ +l_int32 i, j, w, h, d, wd, hd, wpls, wpld; +l_uint32 *datas, *datad, *lines, *lined; + + + PROCNAME("pixAccumulate"); + + if (!pixd || (pixGetDepth(pixd) != 32)) + return ERROR_INT("pixd not defined or not 32 bpp", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + if (d != 1 && d != 8 && d != 16 && d != 32) + return ERROR_INT("pixs not 1, 8, 16 or 32 bpp", procName, 1); + if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT) + return ERROR_INT("op must be in {L_ARITH_ADD, L_ARITH_SUBTRACT}", + procName, 1); + + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + pixGetDimensions(pixs, &w, &h, NULL); + pixGetDimensions(pixd, &wd, &hd, NULL); + w = L_MIN(w, wd); + h = L_MIN(h, hd); + if (d == 1) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (op == L_ARITH_ADD) { + for (j = 0; j < w; j++) + lined[j] += GET_DATA_BIT(lines, j); + } else { /* op == L_ARITH_SUBTRACT */ + for (j = 0; j < w; j++) + lined[j] -= GET_DATA_BIT(lines, j); + } + } + } else if (d == 8) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (op == L_ARITH_ADD) { + for (j = 0; j < w; j++) + lined[j] += GET_DATA_BYTE(lines, j); + } else { /* op == L_ARITH_SUBTRACT */ + for (j = 0; j < w; j++) + lined[j] -= GET_DATA_BYTE(lines, j); + } + } + } else if (d == 16) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (op == L_ARITH_ADD) { + for (j = 0; j < w; j++) + lined[j] += GET_DATA_TWO_BYTES(lines, j); + } else { /* op == L_ARITH_SUBTRACT */ + for (j = 0; j < w; j++) + lined[j] -= GET_DATA_TWO_BYTES(lines, j); + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (op == L_ARITH_ADD) { + for (j = 0; j < w; j++) + lined[j] += lines[j]; + } else { /* op == L_ARITH_SUBTRACT */ + for (j = 0; j < w; j++) + lined[j] -= lines[j]; + } + } + } + + return 0; +} + + +/*! + * \brief pixMultConstAccumulate() + * + * \param[in] pixs 32 bpp + * \param[in] factor + * \param[in] offset same as used for initialization + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) %offset must be >= 0 and should not exceed 0x40000000.
+ *      (2) This multiplies each pixel, relative to offset, by %factor.
+ *      (3) The result is returned with %offset back in place.
+ * 
+ */ +l_ok +pixMultConstAccumulate(PIX *pixs, + l_float32 factor, + l_uint32 offset) +{ +l_int32 i, j, w, h, wpl, val; +l_uint32 *data, *line; + + PROCNAME("pixMultConstAccumulate"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not 32 bpp", procName, 1); + if (offset > 0x40000000) + offset = 0x40000000; + + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + val = line[j] - offset; + val = (l_int32)(val * factor); + val += offset; + line[j] = (l_uint32)val; + } + } + + return 0; +} + + +/*-----------------------------------------------------------------------* + * Absolute value of difference * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixAbsDifference() + * + * \param[in] pixs1, pixs2 both either 8 or 16 bpp gray, or 32 bpp RGB + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The depth of pixs1 and pixs2 must be equal.
+ *      (2) Clips computation to the min size, aligning the UL corners
+ *      (3) For 8 and 16 bpp, assumes one gray component.
+ *      (4) For 32 bpp, assumes 3 color components, and ignores the
+ *          LSB of each word (the alpha channel)
+ *      (5) Computes the absolute value of the difference between
+ *          each component value.
+ * 
+ */ +PIX * +pixAbsDifference(PIX *pixs1, + PIX *pixs2) +{ +l_int32 i, j, w, h, w2, h2, d, wpls1, wpls2, wpld, val1, val2, diff; +l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rdiff, gdiff, bdiff; +l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; +PIX *pixd; + + PROCNAME("pixAbsDifference"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + d = pixGetDepth(pixs1); + if (d != pixGetDepth(pixs2)) + return (PIX *)ERROR_PTR("src1 and src2 depths unequal", procName, NULL); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depths not in {8, 16, 32}", procName, NULL); + + pixGetDimensions(pixs1, &w, &h, NULL); + pixGetDimensions(pixs2, &w2, &h2, NULL); + w = L_MIN(w, w2); + h = L_MIN(h, h2); + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs1); + datas1 = pixGetData(pixs1); + datas2 = pixGetData(pixs2); + datad = pixGetData(pixd); + wpls1 = pixGetWpl(pixs1); + wpls2 = pixGetWpl(pixs2); + wpld = pixGetWpl(pixd); + if (d == 8) { + for (i = 0; i < h; i++) { + lines1 = datas1 + i * wpls1; + lines2 = datas2 + i * wpls2; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val1 = GET_DATA_BYTE(lines1, j); + val2 = GET_DATA_BYTE(lines2, j); + diff = L_ABS(val1 - val2); + SET_DATA_BYTE(lined, j, diff); + } + } + } else if (d == 16) { + for (i = 0; i < h; i++) { + lines1 = datas1 + i * wpls1; + lines2 = datas2 + i * wpls2; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val1 = GET_DATA_TWO_BYTES(lines1, j); + val2 = GET_DATA_TWO_BYTES(lines2, j); + diff = L_ABS(val1 - val2); + SET_DATA_TWO_BYTES(lined, j, diff); + } + } + } else { /* d == 32 */ + for (i = 0; i < h; i++) { + lines1 = datas1 + i * wpls1; + lines2 = datas2 + i * wpls2; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines1[j], &rval1, &gval1, &bval1); + extractRGBValues(lines2[j], &rval2, &gval2, &bval2); + rdiff = L_ABS(rval1 - rval2); + gdiff = L_ABS(gval1 - gval2); + bdiff = L_ABS(bval1 - bval2); + composeRGBPixel(rdiff, gdiff, bdiff, lined + j); + } + } + } + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Sum of color images * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixAddRGB() + * + * \param[in] pixs1, pixs2 32 bpp RGB, or colormapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Clips computation to the minimum size, aligning the UL corners.
+ *      (2) Removes any colormap to RGB, and ignores the LSB of each
+ *          pixel word (the alpha channel).
+ *      (3) Adds each component value, pixelwise, clipping to 255.
+ *      (4) This is useful to combine two images where most of the
+ *          pixels are essentially black, such as in pixPerceptualDiff().
+ * 
+ */ +PIX * +pixAddRGB(PIX *pixs1, + PIX *pixs2) +{ +l_int32 i, j, w, h, d, w2, h2, d2, wplc1, wplc2, wpld; +l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; +l_uint32 *datac1, *datac2, *datad, *linec1, *linec2, *lined; +PIX *pixc1, *pixc2, *pixd; + + PROCNAME("pixAddRGB"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); + pixGetDimensions(pixs1, &w, &h, &d); + pixGetDimensions(pixs2, &w2, &h2, &d2); + if (!pixGetColormap(pixs1) && d != 32) + return (PIX *)ERROR_PTR("pixs1 not cmapped or rgb", procName, NULL); + if (!pixGetColormap(pixs2) && d2 != 32) + return (PIX *)ERROR_PTR("pixs2 not cmapped or rgb", procName, NULL); + if (pixGetColormap(pixs1)) + pixc1 = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc1 = pixClone(pixs1); + if (pixGetColormap(pixs2)) + pixc2 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_FULL_COLOR); + else + pixc2 = pixClone(pixs2); + + w = L_MIN(w, w2); + h = L_MIN(h, h2); + pixd = pixCreate(w, h, 32); + pixCopyResolution(pixd, pixs1); + datac1 = pixGetData(pixc1); + datac2 = pixGetData(pixc2); + datad = pixGetData(pixd); + wplc1 = pixGetWpl(pixc1); + wplc2 = pixGetWpl(pixc2); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linec1 = datac1 + i * wplc1; + linec2 = datac2 + i * wplc2; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(linec1[j], &rval1, &gval1, &bval1); + extractRGBValues(linec2[j], &rval2, &gval2, &bval2); + rval = L_MIN(255, rval1 + rval2); + gval = L_MIN(255, gval1 + gval2); + bval = L_MIN(255, bval1 + bval2); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + + pixDestroy(&pixc1); + pixDestroy(&pixc2); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Two-image min and max operations (8 and 16 bpp) * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixMinOrMax() + * + * \param[in] pixd [optional] destination: this can be null, + * equal to pixs1, or different from pixs1 + * \param[in] pixs1 can be equal to pixd + * \param[in] pixs2 + * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX + * \return pixd always + * + *
+ * Notes:
+ *      (1) This gives the min or max of two images, component-wise.
+ *      (2) The depth can be 8 or 16 bpp for 1 component, and 32 bpp
+ *          for a 3 component image.  For 32 bpp, ignore the LSB
+ *          of each word (the alpha channel)
+ *      (3) There are 3 cases:
+ *          ~  if pixd == null,   Min(src1, src2) --> new pixd
+ *          ~  if pixd == pixs1,  Min(src1, src2) --> src1  (in-place)
+ *          ~  if pixd != pixs1,  Min(src1, src2) --> input pixd
+ * 
+ */ +PIX * +pixMinOrMax(PIX *pixd, + PIX *pixs1, + PIX *pixs2, + l_int32 type) +{ +l_int32 d, ws, hs, w, h, wpls, wpld, i, j, vals, vald, val; +l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; +l_uint32 *datas, *datad, *lines, *lined; + + PROCNAME("pixMinOrMax"); + + if (!pixs1) + return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); + if (!pixs2) + return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); + if (pixs1 == pixs2) + return (PIX *)ERROR_PTR("pixs1 and pixs2 must differ", procName, pixd); + if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX) + return (PIX *)ERROR_PTR("invalid type", procName, pixd); + d = pixGetDepth(pixs1); + if (pixGetDepth(pixs2) != d) + return (PIX *)ERROR_PTR("depths unequal", procName, pixd); + if (d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not 8, 16 or 32 bpp", procName, pixd); + + if (pixs1 != pixd) + pixd = pixCopy(pixd, pixs1); + + pixGetDimensions(pixs2, &ws, &hs, NULL); + pixGetDimensions(pixd, &w, &h, NULL); + w = L_MIN(w, ws); + h = L_MIN(h, hs); + datas = pixGetData(pixs2); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs2); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (d == 8) { + for (j = 0; j < w; j++) { + vals = GET_DATA_BYTE(lines, j); + vald = GET_DATA_BYTE(lined, j); + if (type == L_CHOOSE_MIN) + val = L_MIN(vals, vald); + else /* type == L_CHOOSE_MAX */ + val = L_MAX(vals, vald); + SET_DATA_BYTE(lined, j, val); + } + } else if (d == 16) { + for (j = 0; j < w; j++) { + vals = GET_DATA_TWO_BYTES(lines, j); + vald = GET_DATA_TWO_BYTES(lined, j); + if (type == L_CHOOSE_MIN) + val = L_MIN(vals, vald); + else /* type == L_CHOOSE_MAX */ + val = L_MAX(vals, vald); + SET_DATA_TWO_BYTES(lined, j, val); + } + } else { /* d == 32 */ + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval1, &gval1, &bval1); + extractRGBValues(lined[j], &rval2, &gval2, &bval2); + if (type == L_CHOOSE_MIN) { + rval = L_MIN(rval1, rval2); + gval = L_MIN(gval1, gval2); + bval = L_MIN(bval1, bval2); + } else { /* type == L_CHOOSE_MAX */ + rval = L_MAX(rval1, rval2); + gval = L_MAX(gval1, gval2); + bval = L_MAX(bval1, bval2); + } + composeRGBPixel(rval, gval, bval, lined + j); + } + } + } + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Scale for maximum dynamic range * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixMaxDynamicRange() + * + * \param[in] pixs 4, 8, 16 or 32 bpp source + * \param[in] type L_LINEAR_SCALE or L_LOG_SCALE + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Scales pixel values to fit maximally within the dest 8 bpp pixd
+ *      (2) Assumes the source 'pixels' are a 1-component scalar.  For
+ *          a 32 bpp source, each pixel is treated as a single number --
+ *          not as a 3-component rgb pixel value.
+ *      (3) Uses a LUT for log scaling.
+ * 
+ */ +PIX * +pixMaxDynamicRange(PIX *pixs, + l_int32 type) +{ +l_uint8 dval; +l_int32 i, j, w, h, d, wpls, wpld, max; +l_uint32 *datas, *datad; +l_uint32 word, sval; +l_uint32 *lines, *lined; +l_float32 factor; +l_float32 *tab; +PIX *pixd; + + PROCNAME("pixMaxDynamicRange"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not in {4,8,16,32} bpp", procName, NULL); + if (type != L_LINEAR_SCALE && type != L_LOG_SCALE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + /* Get max */ + max = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + word = *(lines + j); + if (d == 4) { + max = L_MAX(max, word >> 28); + max = L_MAX(max, (word >> 24) & 0xf); + max = L_MAX(max, (word >> 20) & 0xf); + max = L_MAX(max, (word >> 16) & 0xf); + max = L_MAX(max, (word >> 12) & 0xf); + max = L_MAX(max, (word >> 8) & 0xf); + max = L_MAX(max, (word >> 4) & 0xf); + max = L_MAX(max, word & 0xf); + } else if (d == 8) { + max = L_MAX(max, word >> 24); + max = L_MAX(max, (word >> 16) & 0xff); + max = L_MAX(max, (word >> 8) & 0xff); + max = L_MAX(max, word & 0xff); + } else if (d == 16) { + max = L_MAX(max, word >> 16); + max = L_MAX(max, word & 0xffff); + } else { /* d == 32 (rgb) */ + max = L_MAX(max, word); + } + } + } + + /* Map to the full dynamic range */ + if (d == 4) { + if (type == L_LINEAR_SCALE) { + factor = 255. / (l_float32)max; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_QBIT(lines, j); + dval = (l_uint8)(factor * (l_float32)sval + 0.5); + SET_DATA_QBIT(lined, j, dval); + } + } + } else { /* type == L_LOG_SCALE) */ + tab = makeLogBase2Tab(); + factor = 255. / getLogBase2(max, tab); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_QBIT(lines, j); + dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + LEPT_FREE(tab); + } + } else if (d == 8) { + if (type == L_LINEAR_SCALE) { + factor = 255. / (l_float32)max; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_BYTE(lines, j); + dval = (l_uint8)(factor * (l_float32)sval + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + } else { /* type == L_LOG_SCALE) */ + tab = makeLogBase2Tab(); + factor = 255. / getLogBase2(max, tab); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_BYTE(lines, j); + dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + LEPT_FREE(tab); + } + } else if (d == 16) { + if (type == L_LINEAR_SCALE) { + factor = 255. / (l_float32)max; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_TWO_BYTES(lines, j); + dval = (l_uint8)(factor * (l_float32)sval + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + } else { /* type == L_LOG_SCALE) */ + tab = makeLogBase2Tab(); + factor = 255. / getLogBase2(max, tab); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_TWO_BYTES(lines, j); + dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + LEPT_FREE(tab); + } + } else { /* d == 32 */ + if (type == L_LINEAR_SCALE) { + factor = 255. / (l_float32)max; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = lines[j]; + dval = (l_uint8)(factor * (l_float32)sval + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + } else { /* type == L_LOG_SCALE) */ + tab = makeLogBase2Tab(); + factor = 255. / getLogBase2(max, tab); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = lines[j]; + dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); + SET_DATA_BYTE(lined, j, dval); + } + } + LEPT_FREE(tab); + } + } + + return pixd; +} + + +/*! + * \brief pixMaxDynamicRangeRGB() + * + * \param[in] pixs 32 bpp rgb source + * \param[in] type L_LINEAR_SCALE or L_LOG_SCALE + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Scales pixel values to fit maximally within a 32 bpp dest pixd
+ *      (2) All color components are scaled with the same factor, based
+ *          on the maximum r,g or b component in the image.  This should
+ *          not be used if the 32-bit value is a single number (e.g., a
+ *          count in a histogram generated by pixMakeHistoHS()).
+ *      (3) Uses a LUT for log scaling.
+ * 
+ */ +PIX * +pixMaxDynamicRangeRGB(PIX *pixs, + l_int32 type) +{ +l_int32 i, j, w, h, wpls, wpld, max; +l_uint32 sval, dval, word; +l_uint32 *datas, *datad; +l_uint32 *lines, *lined; +l_float32 factor; +l_float32 *tab; +PIX *pixd; + + PROCNAME("pixMaxDynamicRangeRGB"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (type != L_LINEAR_SCALE && type != L_LOG_SCALE) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + /* Get max */ + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + pixGetDimensions(pixs, &w, &h, NULL); + max = 0; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + word = lines[j]; + max = L_MAX(max, word >> 24); + max = L_MAX(max, (word >> 16) & 0xff); + max = L_MAX(max, (word >> 8) & 0xff); + } + } + + /* Map to the full dynamic range */ + if (type == L_LINEAR_SCALE) { + factor = 255. / (l_float32)max; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = lines[j]; + dval = linearScaleRGBVal(sval, factor); + lined[j] = dval; + } + } + } else { /* type == L_LOG_SCALE) */ + tab = makeLogBase2Tab(); + factor = 255. / getLogBase2(max, tab); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + sval = lines[j]; + dval = logScaleRGBVal(sval, tab, factor); + lined[j] = dval; + } + } + LEPT_FREE(tab); + } + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * RGB pixel value scaling * + *-----------------------------------------------------------------------*/ +/*! + * \brief linearScaleRGBVal() + * + * \param[in] sval 32-bit rgb pixel value + * \param[in] factor multiplication factor on each component + * \return dval linearly scaled version of %sval + * + *
+ * Notes:
+ *      (1) %factor must be chosen to be not greater than (255 / maxcomp),
+ *          where maxcomp is the maximum value of the pixel components.
+ *          Otherwise, the product will overflow a uint8.  In use, factor
+ *          is the same for all pixels in a pix.
+ *      (2) No scaling is performed on the transparency ("A") component.
+ * 
+ */ +l_uint32 +linearScaleRGBVal(l_uint32 sval, + l_float32 factor) +{ +l_uint32 dval; + + dval = ((l_uint8)(factor * (sval >> 24) + 0.5) << 24) | + ((l_uint8)(factor * ((sval >> 16) & 0xff) + 0.5) << 16) | + ((l_uint8)(factor * ((sval >> 8) & 0xff) + 0.5) << 8) | + (sval & 0xff); + return dval; +} + + +/*! + * \brief logScaleRGBVal() + * + * \param[in] sval 32-bit rgb pixel value + * \param[in] tab 256 entry log-base-2 table + * \param[in] factor multiplication factor on each component + * \return dval log scaled version of %sval + * + *
+ * Notes:
+ *      (1) %tab is made with makeLogBase2Tab().
+ *      (2) %factor must be chosen to be not greater than
+ *          255.0 / log[base2](maxcomp), where maxcomp is the maximum
+ *          value of the pixel components.  Otherwise, the product
+ *          will overflow a uint8.  In use, factor is the same for
+ *          all pixels in a pix.
+ *      (3) No scaling is performed on the transparency ("A") component.
+ * 
+ */ +l_uint32 +logScaleRGBVal(l_uint32 sval, + l_float32 *tab, + l_float32 factor) +{ +l_uint32 dval; + + dval = ((l_uint8)(factor * getLogBase2(sval >> 24, tab) + 0.5) << 24) | + ((l_uint8)(factor * getLogBase2(((sval >> 16) & 0xff), tab) + 0.5) + << 16) | + ((l_uint8)(factor * getLogBase2(((sval >> 8) & 0xff), tab) + 0.5) + << 8) | + (sval & 0xff); + return dval; +} + + +/*-----------------------------------------------------------------------* + * Log base2 lookup * + *-----------------------------------------------------------------------*/ +/* + * \brief makeLogBase2Tab() + * + * \return tab table giving the log[base2] of values from 1 to 255 + */ +l_float32 * +makeLogBase2Tab(void) +{ +l_int32 i; +l_float32 log2; +l_float32 *tab; + + PROCNAME("makeLogBase2Tab"); + + if ((tab = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32))) == NULL) + return (l_float32 *)ERROR_PTR("tab not made", procName, NULL); + + log2 = (l_float32)log((l_float32)2); + for (i = 0; i < 256; i++) + tab[i] = (l_float32)log((l_float32)i) / log2; + + return tab; +} + + +/* + * \brief getLogBase2() + * + * \param[in] val in range [0 ... 255] + * \param[in] logtab 256-entry table of logs + * \return logval log[base2] of %val, or 0 on error + */ +l_float32 +getLogBase2(l_int32 val, + l_float32 *logtab) +{ + PROCNAME("getLogBase2"); + + if (!logtab) + return ERROR_INT("logtab not defined", procName, 0); + + if (val < 0x100) + return logtab[val]; + else if (val < 0x10000) + return 8.0 + logtab[val >> 8]; + else if (val < 0x1000000) + return 16.0 + logtab[val >> 16]; + else + return 24.0 + logtab[val >> 24]; +} diff --git a/3rdparty/hgOCR/leptonica/pixcomp.c b/3rdparty/hgOCR/leptonica/pixcomp.c new file mode 100644 index 00000000..6191ccd9 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixcomp.c @@ -0,0 +1,2452 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixcomp.c + *
+ *
+ *      Pixcomp creation and destruction
+ *           PIXC     *pixcompCreateFromPix()
+ *           PIXC     *pixcompCreateFromString()
+ *           PIXC     *pixcompCreateFromFile()
+ *           void      pixcompDestroy()
+ *           PIXC     *pixcompCopy()
+
+ *      Pixcomp accessors
+ *           l_int32   pixcompGetDimensions()
+ *           l_int32   pixcompGetParameters()
+ *
+ *      Pixcomp compression selection
+ *           l_int32   pixcompDetermineFormat()
+ *
+ *      Pixcomp conversion to Pix
+ *           PIX      *pixCreateFromPixcomp()
+ *
+ *      Pixacomp creation and destruction
+ *           PIXAC    *pixacompCreate()
+ *           PIXAC    *pixacompCreateWithInit()
+ *           PIXAC    *pixacompCreateFromPixa()
+ *           PIXAC    *pixacompCreateFromFiles()
+ *           PIXAC    *pixacompCreateFromSA()
+ *           void      pixacompDestroy()
+ *
+ *      Pixacomp addition/replacement
+ *           l_int32   pixacompAddPix()
+ *           l_int32   pixacompAddPixcomp()
+ *           static l_int32  pixacompExtendArray()
+ *           l_int32   pixacompReplacePix()
+ *           l_int32   pixacompReplacePixcomp()
+ *           l_int32   pixacompAddBox()
+ *
+ *      Pixacomp accessors
+ *           l_int32   pixacompGetCount()
+ *           PIXC     *pixacompGetPixcomp()
+ *           PIX      *pixacompGetPix()
+ *           l_int32   pixacompGetPixDimensions()
+ *           BOXA     *pixacompGetBoxa()
+ *           l_int32   pixacompGetBoxaCount()
+ *           BOX      *pixacompGetBox()
+ *           l_int32   pixacompGetBoxGeometry()
+ *           l_int32   pixacompGetOffset()
+ *           l_int32   pixacompSetOffset()
+ *
+ *      Pixacomp conversion to Pixa
+ *           PIXA     *pixaCreateFromPixacomp()
+ *
+ *      Combining pixacomp
+ *           l_int32   pixacompJoin()
+ *           PIXAC    *pixacompInterleave()
+ *
+ *      Pixacomp serialized I/O
+ *           PIXAC    *pixacompRead()
+ *           PIXAC    *pixacompReadStream()
+ *           PIXAC    *pixacompReadMem()
+ *           l_int32   pixacompWrite()
+ *           l_int32   pixacompWriteStream()
+ *           l_int32   pixacompWriteMem()
+ *
+ *      Conversion to pdf
+ *           l_int32   pixacompConvertToPdf()
+ *           l_int32   pixacompConvertToPdfData()
+ *           l_int32   pixacompFastConvertToPdfData()
+ *
+ *      Output for debugging
+ *           l_int32   pixacompWriteStreamInfo()
+ *           l_int32   pixcompWriteStreamInfo()
+ *           PIX      *pixacompDisplayTiledAndScaled()
+ *           l_int32   pixacompWriteFiles()
+ *           l_int32   pixcompWriteFile()
+ *
+ *   The Pixacomp is an array of Pixcomp, where each Pixcomp is a compressed
+ *   string of the image.  We don't use reference counting here.
+ *   The basic application is to allow a large array of highly
+ *   compressible images to reside in memory.  We purposely don't
+ *   reuse the Pixa for this, to avoid confusion and programming errors.
+ *
+ *   Three compression formats are used: g4, png and jpeg.
+ *   The compression type can be either specified or defaulted.
+ *   If specified and it is not possible to compress (for example,
+ *   you specify a jpeg on a 1 bpp image or one with a colormap),
+ *   the compression type defaults to png.  The jpeg compression quality
+ *   can be specified using l_setJpegQuality(); otherwise the default is 75.
+ *
+ *   The serialized version of the Pixacomp is similar to that for
+ *   a Pixa, except that each Pixcomp can be compressed by one of
+ *   tiffg4, png, or jpeg.  Unlike serialization of the Pixa,
+ *   serialization of the Pixacomp does not require any imaging
+ *   libraries because it simply reads and writes the compressed data.
+ *
+ *   There are two modes of use in accumulating images:
+ *     (1) addition to the end of the array
+ *     (2) random insertion (replacement) into the array
+ *
+ *   In use, we assume that the array is fully populated up to the
+ *   index value (n - 1), where n is the value of the pixcomp field n.
+ *   Addition can only be made to the end of the fully populated array,
+ *   at the index value n.  Insertion can be made randomly, but again
+ *   only within the array of pixcomps; i.e., within the set of
+ *   indices {0 .... n-1}.  The functions are pixacompReplacePix()
+ *   and pixacompReplacePixcomp(), and they destroy the existing pixcomp.
+ *
+ *   For addition to the end of the array, initialize the pixacomp with
+ *   pixacompCreate(), which generates an empty array of pixcomps ptrs.
+ *   For random insertion and replacement of pixcomp into a pixacomp,
+ *   initialize a fully populated array using pixacompCreateWithInit().
+ *
+ *   The offset field allows you to use an offset-based index to
+ *   access the 0-based ptr array in the pixacomp.  This would typically
+ *   be used to map the pixacomp array index to a page number, or v.v.
+ *   By default, the offset is 0.  For example, suppose you have 50 images,
+ *   corresponding to page numbers 10 - 59.  Then you could use
+ *      pixac = pixacompCreateWithInit(50, 10, ...);
+ *   This would allocate an array of 50 pixcomps, but if you asked for
+ *   the pix at index 10, using pixacompGetPix(pixac, 10), it would
+ *   apply the offset internally, returning the pix at index 0 in the array.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 1000000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + /* Bound on data size */ +static const size_t MaxDataSize = 1000000000; + + /* These two globals are defined in writefile.c */ +extern l_int32 NumImageFileFormatExtensions; +extern const char *ImageFileFormatExtensions[]; + + /* Static functions */ +static l_int32 pixacompExtendArray(PIXAC *pixac); +static l_int32 pixcompFastConvertToPdfData(PIXC *pixc, const char *title, + l_uint8 **pdata, size_t *pnbytes); + + +/*---------------------------------------------------------------------* + * Pixcomp creation and destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief pixcompCreateFromPix() + * + * \param[in] pix + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return pixc, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %comptype == IFF_DEFAULT to have the compression
+ *          type automatically determined.
+ *      (2) To compress jpeg with a quality other than the default (75), use
+ *             l_jpegSetQuality()
+ * 
+ */ +PIXC * +pixcompCreateFromPix(PIX *pix, + l_int32 comptype) +{ +size_t size; +char *text; +l_int32 ret, format; +l_uint8 *data; +PIXC *pixc; + + PROCNAME("pixcompCreateFromPix"); + + if (!pix) + return (PIXC *)ERROR_PTR("pix not defined", procName, NULL); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXC *)ERROR_PTR("invalid comptype", procName, NULL); + + pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); + pixGetDimensions(pix, &pixc->w, &pixc->h, &pixc->d); + pixGetResolution(pix, &pixc->xres, &pixc->yres); + if (pixGetColormap(pix)) + pixc->cmapflag = 1; + if ((text = pixGetText(pix)) != NULL) + pixc->text = stringNew(text); + + pixcompDetermineFormat(comptype, pixc->d, pixc->cmapflag, &format); + pixc->comptype = format; + ret = pixWriteMem(&data, &size, pix, format); + if (ret) { + L_ERROR("write to memory failed\n", procName); + pixcompDestroy(&pixc); + return NULL; + } + pixc->data = data; + pixc->size = size; + + return pixc; +} + + +/*! + * \brief pixcompCreateFromString() + * + * \param[in] data compressed string + * \param[in] size number of bytes + * \param[in] copyflag L_INSERT or L_COPY + * \return pixc, or NULL on error + * + *
+ * Notes:
+ *      (1) This works when the compressed string is png, jpeg or tiffg4.
+ *      (2) The copyflag determines if the data in the new Pixcomp is
+ *          a copy of the input data.
+ * 
+ */ +PIXC * +pixcompCreateFromString(l_uint8 *data, + size_t size, + l_int32 copyflag) +{ +l_int32 format, w, h, d, bps, spp, iscmap; +PIXC *pixc; + + PROCNAME("pixcompCreateFromString"); + + if (!data) + return (PIXC *)ERROR_PTR("data not defined", procName, NULL); + if (copyflag != L_INSERT && copyflag != L_COPY) + return (PIXC *)ERROR_PTR("invalid copyflag", procName, NULL); + + if (pixReadHeaderMem(data, size, &format, &w, &h, &bps, &spp, &iscmap) == 1) + return (PIXC *)ERROR_PTR("header data not read", procName, NULL); + pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); + d = (spp == 3) ? 32 : bps * spp; + pixc->w = w; + pixc->h = h; + pixc->d = d; + pixc->comptype = format; + pixc->cmapflag = iscmap; + if (copyflag == L_INSERT) + pixc->data = data; + else + pixc->data = l_binaryCopy(data, size); + pixc->size = size; + return pixc; +} + + +/*! + * \brief pixcompCreateFromFile() + * + * \param[in] filename + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return pixc, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %comptype == IFF_DEFAULT to have the compression
+ *          type automatically determined.
+ *      (2) If the comptype is invalid for this file, the default will
+ *          be substituted.
+ * 
+ */ +PIXC * +pixcompCreateFromFile(const char *filename, + l_int32 comptype) +{ +l_int32 format; +size_t nbytes; +l_uint8 *data; +PIX *pix; +PIXC *pixc; + + PROCNAME("pixcompCreateFromFile"); + + if (!filename) + return (PIXC *)ERROR_PTR("filename not defined", procName, NULL); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXC *)ERROR_PTR("invalid comptype", procName, NULL); + + findFileFormat(filename, &format); + if (format == IFF_UNKNOWN) { + L_ERROR("unreadable file: %s\n", procName, filename); + return NULL; + } + + /* Can we accept the encoded file directly? Remember that + * png is the "universal" compression type, so if requested + * it takes precedence. Otherwise, if the file is already + * compressed in g4 or jpeg, just accept the string. */ + if ((format == IFF_TIFF_G4 && comptype != IFF_PNG) || + (format == IFF_JFIF_JPEG && comptype != IFF_PNG)) + comptype = format; + if (comptype != IFF_DEFAULT && comptype == format) { + data = l_binaryRead(filename, &nbytes); + if ((pixc = pixcompCreateFromString(data, nbytes, L_INSERT)) == NULL) { + LEPT_FREE(data); + return (PIXC *)ERROR_PTR("pixc not made (string)", procName, NULL); + } + return pixc; + } + + /* Need to recompress in the default format */ + if ((pix = pixRead(filename)) == NULL) + return (PIXC *)ERROR_PTR("pix not read", procName, NULL); + if ((pixc = pixcompCreateFromPix(pix, comptype)) == NULL) { + pixDestroy(&pix); + return (PIXC *)ERROR_PTR("pixc not made", procName, NULL); + } + pixDestroy(&pix); + return pixc; +} + + +/*! + * \brief pixcompDestroy() + * + * \param[in,out] ppixc use ptr address so it will be nulled + * \return void + * + *
+ * Notes:
+ *      (1) Always nulls the input ptr.
+ * 
+ */ +void +pixcompDestroy(PIXC **ppixc) +{ +PIXC *pixc; + + PROCNAME("pixcompDestroy"); + + if (!ppixc) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((pixc = *ppixc) == NULL) + return; + + LEPT_FREE(pixc->data); + if (pixc->text) + LEPT_FREE(pixc->text); + LEPT_FREE(pixc); + *ppixc = NULL; + return; +} + + +/*! + * \brief pixcompCopy() + * + * \param[in] pixcs + * \return pixcd, or NULL on error + */ +PIXC * +pixcompCopy(PIXC *pixcs) +{ +size_t size; +l_uint8 *datas, *datad; +PIXC *pixcd; + + PROCNAME("pixcompCopy"); + + if (!pixcs) + return (PIXC *)ERROR_PTR("pixcs not defined", procName, NULL); + + pixcd = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); + pixcd->w = pixcs->w; + pixcd->h = pixcs->h; + pixcd->d = pixcs->d; + pixcd->xres = pixcs->xres; + pixcd->yres = pixcs->yres; + pixcd->comptype = pixcs->comptype; + if (pixcs->text != NULL) + pixcd->text = stringNew(pixcs->text); + pixcd->cmapflag = pixcs->cmapflag; + + /* Copy image data */ + size = pixcs->size; + datas = pixcs->data; + if ((datad = (l_uint8 *)LEPT_CALLOC(size, sizeof(l_int8))) == NULL) { + pixcompDestroy(&pixcd); + return (PIXC *)ERROR_PTR("pixcd not made", procName, NULL); + } + memcpy(datad, datas, size); + pixcd->data = datad; + pixcd->size = size; + return pixcd; +} + + +/*---------------------------------------------------------------------* + * Pixcomp accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief pixcompGetDimensions() + * + * \param[in] pixc + * \param[out] pw, ph, pd [optional] + * \return 0 if OK, 1 on error + */ +l_ok +pixcompGetDimensions(PIXC *pixc, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd) +{ + PROCNAME("pixcompGetDimensions"); + + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + if (pw) *pw = pixc->w; + if (ph) *ph = pixc->h; + if (pd) *pd = pixc->d; + return 0; +} + + +/*! + * \brief pixcompGetParameters() + * + * \param[in] pixc + * \param[out] pxres, pyres, pcomptype, pcmapflag [optional] + * \return 0 if OK, 1 on error + */ +l_ok +pixcompGetParameters(PIXC *pixc, + l_int32 *pxres, + l_int32 *pyres, + l_int32 *pcomptype, + l_int32 *pcmapflag) +{ + PROCNAME("pixcompGetParameters"); + + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + if (pxres) *pxres = pixc->xres; + if (pyres) *pyres = pixc->yres; + if (pcomptype) *pcomptype = pixc->comptype; + if (pcmapflag) *pcmapflag = pixc->cmapflag; + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixcomp compression selection * + *---------------------------------------------------------------------*/ +/*! + * \brief pixcompDetermineFormat() + * + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \param[in] d pix depth + * \param[in] cmapflag 1 if pix to be compressed as a colormap; 0 otherwise + * \param[out] pformat IFF_TIFF, IFF_PNG or IFF_JFIF_JPEG + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This determines the best format for a pix, given both
+ *          the request (%comptype) and the image characteristics.
+ *      (2) If %comptype == IFF_DEFAULT, this does not necessarily result
+ *          in png encoding.  Instead, it returns one of the three formats
+ *          that is both valid and most likely to give best compression.
+ *      (3) If %d == 8 with no colormap and:
+ *          * you wish to compress with png, use %comptype == IFF_PNG
+ *          * you wish to compress with jpeg, use either
+ *            %comptype == IFF_JFIF_JPEG or %comptype == IFF_DEFAULT.
+ *      (4) If the pix cannot be compressed by the input value of
+ *          %comptype, this selects IFF_PNG, which can compress all pix.
+ * 
+ */ +l_ok +pixcompDetermineFormat(l_int32 comptype, + l_int32 d, + l_int32 cmapflag, + l_int32 *pformat) +{ + + PROCNAME("pixcompDetermineFormat"); + + if (!pformat) + return ERROR_INT("&format not defined", procName, 1); + *pformat = IFF_PNG; /* init value and default */ + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return ERROR_INT("invalid comptype", procName, 1); + + if (comptype == IFF_DEFAULT) { + if (d == 1) + *pformat = IFF_TIFF_G4; + else if (d == 16) + *pformat = IFF_PNG; + else if (d >= 8 && !cmapflag) + *pformat = IFF_JFIF_JPEG; + } else if (comptype == IFF_TIFF_G4 && d == 1) { + *pformat = IFF_TIFF_G4; + } else if (comptype == IFF_JFIF_JPEG && d >= 8 && !cmapflag) { + *pformat = IFF_JFIF_JPEG; + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixcomp conversion to Pix * + *---------------------------------------------------------------------*/ +/*! + * \brief pixCreateFromPixcomp() + * + * \param[in] pixc + * \return pix, or NULL on error + */ +PIX * +pixCreateFromPixcomp(PIXC *pixc) +{ +l_int32 w, h, d, cmapinpix, format; +PIX *pix; + + PROCNAME("pixCreateFromPixcomp"); + + if (!pixc) + return (PIX *)ERROR_PTR("pixc not defined", procName, NULL); + + if ((pix = pixReadMem(pixc->data, pixc->size)) == NULL) + return (PIX *)ERROR_PTR("pix not read", procName, NULL); + pixSetResolution(pix, pixc->xres, pixc->yres); + if (pixc->text) + pixSetText(pix, pixc->text); + + /* Check fields for consistency */ + pixGetDimensions(pix, &w, &h, &d); + if (pixc->w != w) { + L_INFO("pix width %d != pixc width %d\n", procName, w, pixc->w); + L_ERROR("pix width %d != pixc width\n", procName, w); + } + if (pixc->h != h) + L_ERROR("pix height %d != pixc height\n", procName, h); + if (pixc->d != d) { + if (pixc->d == 16) /* we strip 16 --> 8 bpp by default */ + L_WARNING("pix depth %d != pixc depth 16\n", procName, d); + else + L_ERROR("pix depth %d != pixc depth\n", procName, d); + } + cmapinpix = (pixGetColormap(pix) != NULL); + if ((cmapinpix && !pixc->cmapflag) || (!cmapinpix && pixc->cmapflag)) + L_ERROR("pix cmap flag inconsistent\n", procName); + format = pixGetInputFormat(pix); + if (format != pixc->comptype) { + L_ERROR("pix comptype %d not equal to pixc comptype\n", + procName, format); + } + + return pix; +} + + +/*---------------------------------------------------------------------* + * Pixacomp creation and destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief pixacompCreate() + * + * \param[in] n initial number of ptrs + * \return pixac, or NULL on error + */ +PIXAC * +pixacompCreate(l_int32 n) +{ +PIXAC *pixac; + + PROCNAME("pixacompCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + pixac = (PIXAC *)LEPT_CALLOC(1, sizeof(PIXAC)); + pixac->n = 0; + pixac->nalloc = n; + pixac->offset = 0; + if ((pixac->pixc = (PIXC **)LEPT_CALLOC(n, sizeof(PIXC *))) == NULL) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("pixc ptrs not made", procName, NULL); + } + if ((pixac->boxa = boxaCreate(n)) == NULL) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("boxa not made", procName, NULL); + } + + return pixac; +} + + +/*! + * \brief pixacompCreateWithInit() + * + * \param[in] n initial number of ptrs + * \param[in] offset difference: accessor index - pixacomp array index + * \param[in] pix [optional] initialize each ptr in pixacomp + * to this pix; can be NULL + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return pixac, or NULL on error + * + *
+ * Notes:
+ *      (1) Initializes a pixacomp to be fully populated with %pix,
+ *          compressed using %comptype.  If %pix == NULL, %comptype
+ *          is ignored.
+ *      (2) Typically, the array is initialized with a tiny pix.
+ *          This is most easily done by setting %pix == NULL, causing
+ *          initialization of each array element with a tiny placeholder
+ *          pix (w = h = d = 1), using comptype = IFF_TIFF_G4 .
+ *      (3) Example usage:
+ *            // Generate pixacomp for pages 30 - 49.  This has an array
+ *            // size of 20 and the page number offset is 30.
+ *            PixaComp *pixac = pixacompCreateWithInit(20, 30, NULL,
+ *                                                     IFF_TIFF_G4);
+ *            // Now insert png-compressed images into the initialized array
+ *            for (pageno = 30; pageno < 50; pageno++) {
+ *                Pix *pixt = ...   // derived from image[pageno]
+ *                if (pixt)
+ *                    pixacompReplacePix(pixac, pageno, pixt, IFF_PNG);
+ *                pixDestroy(&pixt);
+ *            }
+ *          The result is a pixac with 20 compressed strings, and with
+ *          selected pixt replacing the placeholders.
+ *          To extract the image for page 38, which is decompressed
+ *          from element 8 in the array, use:
+ *            pixt = pixacompGetPix(pixac, 38);
+ * 
+ */ +PIXAC * +pixacompCreateWithInit(l_int32 n, + l_int32 offset, + PIX *pix, + l_int32 comptype) +{ +l_int32 i; +PIX *pixt; +PIXC *pixc; +PIXAC *pixac; + + PROCNAME("pixacompCreateWithInit"); + + if (n <= 0 || n > MaxPtrArraySize) + return (PIXAC *)ERROR_PTR("n out of valid bounds", procName, NULL); + if (pix) { + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); + } else { + comptype = IFF_TIFF_G4; + } + if (offset < 0) { + L_WARNING("offset < 0; setting to 0\n", procName); + offset = 0; + } + + if ((pixac = pixacompCreate(n)) == NULL) + return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); + pixacompSetOffset(pixac, offset); + if (pix) + pixt = pixClone(pix); + else + pixt = pixCreate(1, 1, 1); + for (i = 0; i < n; i++) { + pixc = pixcompCreateFromPix(pixt, comptype); + pixacompAddPixcomp(pixac, pixc, L_INSERT); + } + pixDestroy(&pixt); + + return pixac; +} + + +/*! + * \brief pixacompCreateFromPixa() + * + * \param[in] pixa + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If %format == IFF_DEFAULT, the conversion format for each
+ *          image is chosen automatically.  Otherwise, we use the
+ *          specified format unless it can't be done (e.g., jpeg
+ *          for a 1, 2 or 4 bpp pix, or a pix with a colormap),
+ *          in which case we use the default (assumed best) compression.
+ *      (2) %accesstype is used to extract a boxa from %pixa.
+ *      (3) To compress jpeg with a quality other than the default (75), use
+ *             l_jpegSetQuality()
+ * 
+ */ +PIXAC * +pixacompCreateFromPixa(PIXA *pixa, + l_int32 comptype, + l_int32 accesstype) +{ +l_int32 i, n; +BOXA *boxa; +PIX *pix; +PIXAC *pixac; + + PROCNAME("pixacompCreateFromPixa"); + + if (!pixa) + return (PIXAC *)ERROR_PTR("pixa not defined", procName, NULL); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE && + accesstype != L_COPY_CLONE) + return (PIXAC *)ERROR_PTR("invalid accesstype", procName, NULL); + + n = pixaGetCount(pixa); + if ((pixac = pixacompCreate(n)) == NULL) + return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixacompAddPix(pixac, pix, comptype); + pixDestroy(&pix); + } + if ((boxa = pixaGetBoxa(pixa, accesstype)) != NULL) { + boxaDestroy(&pixac->boxa); + pixac->boxa = boxa; + } + + return pixac; +} + + +/*! + * \brief pixacompCreateFromFiles() + * + * \param[in] dirname + * \param[in] substr [optional] substring filter on filenames; can be null + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return pixac, or NULL on error + * + *
+ * Notes:
+ *      (1) %dirname is the full path for the directory.
+ *      (2) %substr is the part of the file name (excluding
+ *          the directory) that is to be matched.  All matching
+ *          filenames are read into the Pixa.  If substr is NULL,
+ *          all filenames are read into the Pixa.
+ *      (3) Use %comptype == IFF_DEFAULT to have the compression
+ *          type automatically determined for each file.
+ *      (4) If the comptype is invalid for a file, the default will
+ *          be substituted.
+ * 
+ */ +PIXAC * +pixacompCreateFromFiles(const char *dirname, + const char *substr, + l_int32 comptype) +{ +PIXAC *pixac; +SARRAY *sa; + + PROCNAME("pixacompCreateFromFiles"); + + if (!dirname) + return (PIXAC *)ERROR_PTR("dirname not defined", procName, NULL); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return (PIXAC *)ERROR_PTR("sa not made", procName, NULL); + pixac = pixacompCreateFromSA(sa, comptype); + sarrayDestroy(&sa); + return pixac; +} + + +/*! + * \brief pixacompCreateFromSA() + * + * \param[in] sa full pathnames for all files + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return pixac, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %comptype == IFF_DEFAULT to have the compression
+ *          type automatically determined for each file.
+ *      (2) If the comptype is invalid for a file, the default will
+ *          be substituted.
+ * 
+ */ +PIXAC * +pixacompCreateFromSA(SARRAY *sa, + l_int32 comptype) +{ +char *str; +l_int32 i, n; +PIXC *pixc; +PIXAC *pixac; + + PROCNAME("pixacompCreateFromSA"); + + if (!sa) + return (PIXAC *)ERROR_PTR("sarray not defined", procName, NULL); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); + + n = sarrayGetCount(sa); + pixac = pixacompCreate(n); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + if ((pixc = pixcompCreateFromFile(str, comptype)) == NULL) { + L_ERROR("pixc not read from file: %s\n", procName, str); + continue; + } + pixacompAddPixcomp(pixac, pixc, L_INSERT); + } + return pixac; +} + + +/*! + * \brief pixacompDestroy() + * + * \param[in,out] ppixac use ptr address so it will be nulled + * \return void + * + *
+ * Notes:
+ *      (1) Always nulls the input ptr.
+ * 
+ */ +void +pixacompDestroy(PIXAC **ppixac) +{ +l_int32 i; +PIXAC *pixac; + + PROCNAME("pixacompDestroy"); + + if (ppixac == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((pixac = *ppixac) == NULL) + return; + + for (i = 0; i < pixac->n; i++) + pixcompDestroy(&pixac->pixc[i]); + LEPT_FREE(pixac->pixc); + boxaDestroy(&pixac->boxa); + LEPT_FREE(pixac); + + *ppixac = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Pixacomp addition * + *---------------------------------------------------------------------*/ +/*! + * \brief pixacompAddPix() + * + * \param[in] pixac + * \param[in] pix to be added + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The array is filled up to the (n-1)-th element, and this
+ *          converts the input pix to a pixc and adds it at
+ *          the n-th position.
+ *      (2) The pixc produced from the pix is owned by the pixac.
+ *          The input pix is not affected.
+ * 
+ */ +l_ok +pixacompAddPix(PIXAC *pixac, + PIX *pix, + l_int32 comptype) +{ +l_int32 cmapflag, format; +PIXC *pixc; + + PROCNAME("pixacompAddPix"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return ERROR_INT("invalid format", procName, 1); + + cmapflag = pixGetColormap(pix) ? 1 : 0; + pixcompDetermineFormat(comptype, pixGetDepth(pix), cmapflag, &format); + if ((pixc = pixcompCreateFromPix(pix, format)) == NULL) + return ERROR_INT("pixc not made", procName, 1); + pixacompAddPixcomp(pixac, pixc, L_INSERT); + return 0; +} + + +/*! + * \brief pixacompAddPixcomp() + * + * \param[in] pixac + * \param[in] pixc to be added by insertion + * \param[in] copyflag L_INSERT, L_COPY + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Anything added to a pixac is owned by the pixac.
+ *          So do not L_INSERT a pixc that is owned by another pixac,
+ *          or destroy a pixc that has been L_INSERTed.
+ * 
+ */ +l_ok +pixacompAddPixcomp(PIXAC *pixac, + PIXC *pixc, + l_int32 copyflag) +{ +l_int32 n; + + PROCNAME("pixacompAddPixcomp"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY) + return ERROR_INT("invalid copyflag", procName, 1); + + n = pixac->n; + if (n >= pixac->nalloc) + pixacompExtendArray(pixac); + if (copyflag == L_INSERT) + pixac->pixc[n] = pixc; + else /* L_COPY */ + pixac->pixc[n] = pixcompCopy(pixc); + pixac->n++; + + return 0; +} + + +/*! + * \brief pixacompExtendArray() + * + * \param[in] pixac + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) We extend the boxa array simultaneously.  This is
+ *          necessary in case we are NOT adding boxes simultaneously
+ *          with adding pixc.  We always want the sizes of the
+ *          pixac and boxa ptr arrays to be equal.
+ * 
+ */ +static l_int32 +pixacompExtendArray(PIXAC *pixac) +{ + PROCNAME("pixacompExtendArray"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + if ((pixac->pixc = (PIXC **)reallocNew((void **)&pixac->pixc, + sizeof(PIXC *) * pixac->nalloc, + 2 * sizeof(PIXC *) * pixac->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + pixac->nalloc = 2 * pixac->nalloc; + boxaExtendArray(pixac->boxa); + return 0; +} + + +/*! + * \brief pixacompReplacePix() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; includes offset + * \param[in] pix owned by the caller + * \param[in] comptype IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ *      (2) The input %pix is converted to a pixc, which is then inserted
+ *          into the pixac.
+ * 
+ */ +l_ok +pixacompReplacePix(PIXAC *pixac, + l_int32 index, + PIX *pix, + l_int32 comptype) +{ +l_int32 n, aindex; +PIXC *pixc; + + PROCNAME("pixacompReplacePix"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + n = pixacompGetCount(pixac); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= n) + return ERROR_INT("array index out of bounds", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && + comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) + return ERROR_INT("invalid format", procName, 1); + + pixc = pixcompCreateFromPix(pix, comptype); + pixacompReplacePixcomp(pixac, index, pixc); + return 0; +} + + +/*! + * \brief pixacompReplacePixcomp() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; includes offset + * \param[in] pixc to replace existing one, which is destroyed + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ *      (2) The inserted %pixc is now owned by the pixac.  The caller
+ *          must not destroy it.
+ * 
+ */ +l_ok +pixacompReplacePixcomp(PIXAC *pixac, + l_int32 index, + PIXC *pixc) +{ +l_int32 n, aindex; +PIXC *pixct; + + PROCNAME("pixacompReplacePixcomp"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + n = pixacompGetCount(pixac); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= n) + return ERROR_INT("array index out of bounds", procName, 1); + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + + pixct = pixacompGetPixcomp(pixac, index, L_NOCOPY); /* use %index */ + pixcompDestroy(&pixct); + pixac->pixc[aindex] = pixc; /* replace; use array index */ + + return 0; +} + + +/*! + * \brief pixacompAddBox() + * + * \param[in] pixac + * \param[in] box + * \param[in] copyflag L_INSERT, L_COPY + * \return 0 if OK, 1 on error + */ +l_ok +pixacompAddBox(PIXAC *pixac, + BOX *box, + l_int32 copyflag) +{ + PROCNAME("pixacompAddBox"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY) + return ERROR_INT("invalid copyflag", procName, 1); + + boxaAddBox(pixac->boxa, box, copyflag); + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixacomp accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief pixacompGetCount() + * + * \param[in] pixac + * \return count, or 0 if no pixa + */ +l_int32 +pixacompGetCount(PIXAC *pixac) +{ + PROCNAME("pixacompGetCount"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 0); + + return pixac->n; +} + + +/*! + * \brief pixacompGetPixcomp() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; includes offset + * \param[in] copyflag L_NOCOPY, L_COPY + * \return pixc, or NULL on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ *      (2) If copyflag == L_NOCOPY, the pixc is owned by %pixac; do
+ *          not destroy.
+ * 
+ */ +PIXC * +pixacompGetPixcomp(PIXAC *pixac, + l_int32 index, + l_int32 copyflag) +{ +l_int32 aindex; + + PROCNAME("pixacompGetPixcomp"); + + if (!pixac) + return (PIXC *)ERROR_PTR("pixac not defined", procName, NULL); + if (copyflag != L_NOCOPY && copyflag != L_COPY) + return (PIXC *)ERROR_PTR("invalid copyflag", procName, NULL); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= pixac->n) + return (PIXC *)ERROR_PTR("array index not valid", procName, NULL); + + if (copyflag == L_NOCOPY) + return pixac->pixc[aindex]; + else /* L_COPY */ + return pixcompCopy(pixac->pixc[aindex]); +} + + +/*! + * \brief pixacompGetPix() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; includes offset + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ * 
+ */ +PIX * +pixacompGetPix(PIXAC *pixac, + l_int32 index) +{ +l_int32 aindex; +PIXC *pixc; + + PROCNAME("pixacompGetPix"); + + if (!pixac) + return (PIX *)ERROR_PTR("pixac not defined", procName, NULL); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= pixac->n) + return (PIX *)ERROR_PTR("array index not valid", procName, NULL); + + pixc = pixacompGetPixcomp(pixac, index, L_NOCOPY); + return pixCreateFromPixcomp(pixc); +} + + +/*! + * \brief pixacompGetPixDimensions() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; + * includes offset + * \param[out] pw, ph, pd [optional] each can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ * 
+ */ +l_ok +pixacompGetPixDimensions(PIXAC *pixac, + l_int32 index, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd) +{ +l_int32 aindex; +PIXC *pixc; + + PROCNAME("pixacompGetPixDimensions"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= pixac->n) + return ERROR_INT("array index not valid", procName, 1); + + if ((pixc = pixac->pixc[aindex]) == NULL) + return ERROR_INT("pixc not found!", procName, 1); + pixcompGetDimensions(pixc, pw, ph, pd); + return 0; +} + + +/*! + * \brief pixacompGetBoxa() + * + * \param[in] pixac + * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE + * \return boxa, or NULL on error + */ +BOXA * +pixacompGetBoxa(PIXAC *pixac, + l_int32 accesstype) +{ + PROCNAME("pixacompGetBoxa"); + + if (!pixac) + return (BOXA *)ERROR_PTR("pixac not defined", procName, NULL); + if (!pixac->boxa) + return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE && + accesstype != L_COPY_CLONE) + return (BOXA *)ERROR_PTR("invalid accesstype", procName, NULL); + + return boxaCopy(pixac->boxa, accesstype); +} + + +/*! + * \brief pixacompGetBoxaCount() + * + * \param[in] pixac + * \return count, or 0 on error + */ +l_int32 +pixacompGetBoxaCount(PIXAC *pixac) +{ + PROCNAME("pixacompGetBoxaCount"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 0); + + return boxaGetCount(pixac->boxa); +} + + +/*! + * \brief pixacompGetBox() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; + * includes offset + * \param[in] accesstype L_COPY or L_CLONE + * \return box if null, not automatically an error, or NULL on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ *      (2) There is always a boxa with a pixac, and it is initialized so
+ *          that each box ptr is NULL.
+ *      (3) In general, we expect that there is either a box associated
+ *          with each pixc, or no boxes at all in the boxa.
+ *      (4) Having no boxes is thus not an automatic error.  Whether it
+ *          is an actual error is determined by the calling program.
+ *          If the caller expects to get a box, it is an error; see, e.g.,
+ *          pixacGetBoxGeometry().
+ * 
+ */ +BOX * +pixacompGetBox(PIXAC *pixac, + l_int32 index, + l_int32 accesstype) +{ +l_int32 aindex; +BOX *box; + + PROCNAME("pixacompGetBox"); + + if (!pixac) + return (BOX *)ERROR_PTR("pixac not defined", procName, NULL); + if (!pixac->boxa) + return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= pixac->boxa->n) + return (BOX *)ERROR_PTR("array index not valid", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE) + return (BOX *)ERROR_PTR("invalid accesstype", procName, NULL); + + box = pixac->boxa->box[aindex]; + if (box) { + if (accesstype == L_COPY) + return boxCopy(box); + else /* accesstype == L_CLONE */ + return boxClone(box); + } else { + return NULL; + } +} + + +/*! + * \brief pixacompGetBoxGeometry() + * + * \param[in] pixac + * \param[in] index caller's view of index within pixac; + * includes offset + * \param[out] px, py, pw, ph [optional] each can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The %index includes the offset, which must be subtracted
+ *          to get the actual index into the ptr array.
+ * 
+ */ +l_ok +pixacompGetBoxGeometry(PIXAC *pixac, + l_int32 index, + l_int32 *px, + l_int32 *py, + l_int32 *pw, + l_int32 *ph) +{ +l_int32 aindex; +BOX *box; + + PROCNAME("pixacompGetBoxGeometry"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + aindex = index - pixac->offset; + if (aindex < 0 || aindex >= pixac->n) + return ERROR_INT("array index not valid", procName, 1); + + if ((box = pixacompGetBox(pixac, aindex, L_CLONE)) == NULL) + return ERROR_INT("box not found!", procName, 1); + boxGetGeometry(box, px, py, pw, ph); + boxDestroy(&box); + return 0; +} + + +/*! + * \brief pixacompGetOffset() + * + * \param[in] pixac + * \return offset, or 0 on error + * + *
+ * Notes:
+ *      (1) The offset is the difference between the caller's view of
+ *          the index into the array and the actual array index.
+ *          By default it is 0.
+ * 
+ */ +l_int32 +pixacompGetOffset(PIXAC *pixac) +{ + PROCNAME("pixacompGetOffset"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 0); + return pixac->offset; +} + + +/*! + * \brief pixacompSetOffset() + * + * \param[in] pixac + * \param[in] offset non-negative + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The offset is the difference between the caller's view of
+ *          the index into the array and the actual array index.
+ *          By default it is 0.
+ * 
+ */ +l_ok +pixacompSetOffset(PIXAC *pixac, + l_int32 offset) +{ + PROCNAME("pixacompSetOffset"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + pixac->offset = L_MAX(0, offset); + return 0; +} + + +/*---------------------------------------------------------------------* + * Pixacomp conversion to Pixa * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaCreateFromPixacomp() + * + * \param[in] pixac + * \param[in] accesstype L_COPY, L_CLONE, L_COPY_CLONE; for boxa + * \return pixa if OK, or NULL on error + * + *
+ * Notes:
+ *      (1) Because the pixa has no notion of offset, the offset must
+ *          be set to 0 before the conversion, so that pixacompGetPix()
+ *          fetches all the pixcomps.  It is reset at the end.
+ * 
+ */ +PIXA * +pixaCreateFromPixacomp(PIXAC *pixac, + l_int32 accesstype) +{ +l_int32 i, n, offset; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixaCreateFromPixacomp"); + + if (!pixac) + return (PIXA *)ERROR_PTR("pixac not defined", procName, NULL); + if (accesstype != L_COPY && accesstype != L_CLONE && + accesstype != L_COPY_CLONE) + return (PIXA *)ERROR_PTR("invalid accesstype", procName, NULL); + + n = pixacompGetCount(pixac); + offset = pixacompGetOffset(pixac); + pixacompSetOffset(pixac, 0); + if ((pixa = pixaCreate(n)) == NULL) + return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((pix = pixacompGetPix(pixac, i)) == NULL) { + L_WARNING("pix %d not made\n", procName, i); + continue; + } + pixaAddPix(pixa, pix, L_INSERT); + } + if (pixa->boxa) { + boxaDestroy(&pixa->boxa); + pixa->boxa = pixacompGetBoxa(pixac, accesstype); + } + pixacompSetOffset(pixac, offset); + + return pixa; +} + + +/*---------------------------------------------------------------------* + * Combining pixacomp + *---------------------------------------------------------------------*/ +/*! + * \brief pixacompJoin() + * + * \param[in] pixacd dest pixac; add to this one + * \param[in] pixacs [optional] source pixac; add from this one + * \param[in] istart starting index in pixacs + * \param[in] iend ending index in pixacs; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This appends a clone of each indicated pixc in pixcas to pixcad
+ *      (2) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (3) iend < 0 means 'read to the end'
+ *      (4) If pixacs is NULL or contains no pixc, this is a no-op.
+ * 
+ */ +l_ok +pixacompJoin(PIXAC *pixacd, + PIXAC *pixacs, + l_int32 istart, + l_int32 iend) +{ +l_int32 i, n, nb; +BOXA *boxas, *boxad; +PIXC *pixc; + + PROCNAME("pixacompJoin"); + + if (!pixacd) + return ERROR_INT("pixacd not defined", procName, 1); + if (!pixacs || ((n = pixacompGetCount(pixacs)) == 0)) + return 0; + + if (istart < 0) + istart = 0; + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; nothing to add", procName, 1); + + for (i = istart; i <= iend; i++) { + pixc = pixacompGetPixcomp(pixacs, i, L_NOCOPY); + pixacompAddPixcomp(pixacd, pixc, L_COPY); + } + + boxas = pixacompGetBoxa(pixacs, L_CLONE); + boxad = pixacompGetBoxa(pixacd, L_CLONE); + nb = pixacompGetBoxaCount(pixacs); + iend = L_MIN(iend, nb - 1); + boxaJoin(boxad, boxas, istart, iend); + boxaDestroy(&boxas); /* just the clones */ + boxaDestroy(&boxad); /* ditto */ + return 0; +} + + +/*! + * \brief pixacompInterleave() + * + * \param[in] pixac1 first src pixac + * \param[in] pixac2 second src pixac + * \return pixacd interleaved from sources, or NULL on error. + * + *
+ * Notes:
+ *      (1) If the two pixac have different sizes, a warning is issued,
+ *          and the number of pairs returned is the minimum size.
+ * 
+ */ +PIXAC * +pixacompInterleave(PIXAC *pixac1, + PIXAC *pixac2) +{ +l_int32 i, n1, n2, n, nb1, nb2; +BOX *box; +PIXC *pixc1, *pixc2; +PIXAC *pixacd; + + PROCNAME("pixacompInterleave"); + + if (!pixac1) + return (PIXAC *)ERROR_PTR("pixac1 not defined", procName, NULL); + if (!pixac2) + return (PIXAC *)ERROR_PTR("pixac2 not defined", procName, NULL); + n1 = pixacompGetCount(pixac1); + n2 = pixacompGetCount(pixac2); + n = L_MIN(n1, n2); + if (n == 0) + return (PIXAC *)ERROR_PTR("at least one input pixac is empty", + procName, NULL); + if (n1 != n2) + L_WARNING("counts differ: %d != %d\n", procName, n1, n2); + + pixacd = pixacompCreate(2 * n); + nb1 = pixacompGetBoxaCount(pixac1); + nb2 = pixacompGetBoxaCount(pixac2); + for (i = 0; i < n; i++) { + pixc1 = pixacompGetPixcomp(pixac1, i, L_COPY); + pixacompAddPixcomp(pixacd, pixc1, L_INSERT); + if (i < nb1) { + box = pixacompGetBox(pixac1, i, L_COPY); + pixacompAddBox(pixacd, box, L_INSERT); + } + pixc2 = pixacompGetPixcomp(pixac2, i, L_COPY); + pixacompAddPixcomp(pixacd, pixc2, L_INSERT); + if (i < nb2) { + box = pixacompGetBox(pixac2, i, L_COPY); + pixacompAddBox(pixacd, box, L_INSERT); + } + } + + return pixacd; +} + + +/*---------------------------------------------------------------------* + * Pixacomp serialized I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief pixacompRead() + * + * \param[in] filename + * \return pixac, or NULL on error + * + *
+ * Notes:
+ *      (1) Unlike the situation with serialized Pixa, where the image
+ *          data is stored in png format, the Pixacomp image data
+ *          can be stored in tiffg4, png and jpg formats.
+ * 
+ */ +PIXAC * +pixacompRead(const char *filename) +{ +FILE *fp; +PIXAC *pixac; + + PROCNAME("pixacompRead"); + + if (!filename) + return (PIXAC *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIXAC *)ERROR_PTR("stream not opened", procName, NULL); + pixac = pixacompReadStream(fp); + fclose(fp); + if (!pixac) + return (PIXAC *)ERROR_PTR("pixac not read", procName, NULL); + return pixac; +} + + +/*! + * \brief pixacompReadStream() + * + * \param[in] fp file stream + * \return pixac, or NULL on error + */ +PIXAC * +pixacompReadStream(FILE *fp) +{ +char buf[256]; +l_uint8 *data; +l_int32 n, offset, i, w, h, d, ignore; +l_int32 comptype, cmapflag, version, xres, yres; +size_t size; +BOXA *boxa; +PIXC *pixc; +PIXAC *pixac; + + PROCNAME("pixacompReadStream"); + + if (!fp) + return (PIXAC *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nPixacomp Version %d\n", &version) != 1) + return (PIXAC *)ERROR_PTR("not a pixacomp file", procName, NULL); + if (version != PIXACOMP_VERSION_NUMBER) + return (PIXAC *)ERROR_PTR("invalid pixacomp version", procName, NULL); + if (fscanf(fp, "Number of pixcomp = %d\n", &n) != 1) + return (PIXAC *)ERROR_PTR("not a pixacomp file", procName, NULL); + if (fscanf(fp, "Offset of index into array = %d", &offset) != 1) + return (PIXAC *)ERROR_PTR("offset not read", procName, NULL); + + if ((pixac = pixacompCreate(n)) == NULL) + return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); + if ((boxa = boxaReadStream(fp)) == NULL) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("boxa not made", procName, NULL); + } + boxaDestroy(&pixac->boxa); /* empty */ + pixac->boxa = boxa; + pixacompSetOffset(pixac, offset); + + for (i = 0; i < n; i++) { + if (fscanf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", + &ignore, &w, &h, &d) != 4) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("dimension reading", procName, NULL); + } + if (fscanf(fp, " comptype = %d, size = %zu, cmapflag = %d\n", + &comptype, &size, &cmapflag) != 3) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("comptype/size reading", procName, NULL); + } + if (size > MaxDataSize) { + pixacompDestroy(&pixac); + L_ERROR("data size = %zu is too big", procName, size); + return NULL; + } + + /* Use fgets() and sscanf(); not fscanf(), for the last + * bit of header data before the binary data. The reason is + * that fscanf throws away white space, and if the binary data + * happens to begin with ascii character(s) that are white + * space, it will swallow them and all will be lost! */ + if (fgets(buf, sizeof(buf), fp) == NULL) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("fgets read fail", procName, NULL); + } + if (sscanf(buf, " xres = %d, yres = %d\n", &xres, &yres) != 2) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("read fail for res", procName, NULL); + } + if ((data = (l_uint8 *)LEPT_CALLOC(1, size)) == NULL) { + pixacompDestroy(&pixac); + return (PIXAC *)ERROR_PTR("calloc fail for data", procName, NULL); + } + if (fread(data, 1, size, fp) != size) { + pixacompDestroy(&pixac); + LEPT_FREE(data); + return (PIXAC *)ERROR_PTR("error reading data", procName, NULL); + } + fgetc(fp); /* swallow the ending nl */ + pixc = (PIXC *)LEPT_CALLOC(1, sizeof(PIXC)); + pixc->w = w; + pixc->h = h; + pixc->d = d; + pixc->xres = xres; + pixc->yres = yres; + pixc->comptype = comptype; + pixc->cmapflag = cmapflag; + pixc->data = data; + pixc->size = size; + pixacompAddPixcomp(pixac, pixc, L_INSERT); + } + return pixac; +} + + +/*! + * \brief pixacompReadMem() + * + * \param[in] data in pixacomp format + * \param[in] size of data + * \return pixac, or NULL on error + * + *
+ * Notes:
+ *      (1) Deseralizes a buffer of pixacomp data into a pixac in memory.
+ * 
+ */ +PIXAC * +pixacompReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +PIXAC *pixac; + + PROCNAME("pixacompReadMem"); + + if (!data) + return (PIXAC *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIXAC *)ERROR_PTR("stream not opened", procName, NULL); + + pixac = pixacompReadStream(fp); + fclose(fp); + if (!pixac) L_ERROR("pixac not read\n", procName); + return pixac; +} + + +/*! + * \brief pixacompWrite() + * + * \param[in] filename + * \param[in] pixac + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Unlike the situation with serialized Pixa, where the image
+ *          data is stored in png format, the Pixacomp image data
+ *          can be stored in tiffg4, png and jpg formats.
+ * 
+ */ +l_ok +pixacompWrite(const char *filename, + PIXAC *pixac) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixacompWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pixac) + return ERROR_INT("pixacomp not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixacompWriteStream(fp, pixac); + fclose(fp); + if (ret) + return ERROR_INT("pixacomp not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixacompWriteStream() + * + * \param[in] fp file stream + * \param[in] pixac + * \return 0 if OK, 1 on error + */ +l_ok +pixacompWriteStream(FILE *fp, + PIXAC *pixac) +{ +l_int32 n, i; +PIXC *pixc; + + PROCNAME("pixacompWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + n = pixacompGetCount(pixac); + fprintf(fp, "\nPixacomp Version %d\n", PIXACOMP_VERSION_NUMBER); + fprintf(fp, "Number of pixcomp = %d\n", n); + fprintf(fp, "Offset of index into array = %d", pixac->offset); + boxaWriteStream(fp, pixac->boxa); + for (i = 0; i < n; i++) { + if ((pixc = pixacompGetPixcomp(pixac, pixac->offset + i, L_NOCOPY)) + == NULL) + return ERROR_INT("pixc not found", procName, 1); + fprintf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", + i, pixc->w, pixc->h, pixc->d); + fprintf(fp, " comptype = %d, size = %zu, cmapflag = %d\n", + pixc->comptype, pixc->size, pixc->cmapflag); + fprintf(fp, " xres = %d, yres = %d\n", pixc->xres, pixc->yres); + fwrite(pixc->data, 1, pixc->size, fp); + fprintf(fp, "\n"); + } + return 0; +} + + +/*! + * \brief pixacompWriteMem() + * + * \param[out] pdata serialized data of pixac + * \param[out] psize size of serialized data + * \param[in] pixac + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a pixac in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +pixacompWriteMem(l_uint8 **pdata, + size_t *psize, + PIXAC *pixac) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixacompWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!pixac) + return ERROR_INT("&pixac not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixacompWriteStream(fp, pixac); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = pixacompWriteStream(fp, pixac); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*--------------------------------------------------------------------* + * Conversion to pdf * + *--------------------------------------------------------------------*/ +/*! + * \brief pixacompConvertToPdf() + * + * \param[in] pixac containing images all at the same resolution + * \param[in] res override the resolution of each input image, + * in ppi; 0 to respect the resolution embedded + * in the input + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE, or + * L_DEFAULT_ENCODE for default) + * \param[in] quality used for JPEG only; 0 for default (75) + * \param[in] title [optional] pdf title + * \param[in] fileout pdf file of all images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This follows closely the function pixaConvertToPdf() in pdfio.c.
+ *      (2) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without
+ *          colormap and many colors, or 32 bpp; FLATE for anything else.
+ *      (3) The scalefactor must be > 0.0; otherwise it is set to 1.0.
+ *      (4) Specifying one of the three encoding types for %type forces
+ *          all images to be compressed with that type.  Use 0 to have
+ *          the type determined for each image based on depth and whether
+ *          or not it has a colormap.
+ *      (5) If all images are jpeg compressed, don't require scaling
+ *          and have the same resolution, it is much faster to skip
+ *          transcoding with pixacompFastConvertToPdfData(), and then
+ *          write the data out to file.
+ * 
+ */ +l_ok +pixacompConvertToPdf(PIXAC *pixac, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + const char *fileout) +{ +l_uint8 *data; +l_int32 ret; +size_t nbytes; + + PROCNAME("pixacompConvertToPdf"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + ret = pixacompConvertToPdfData(pixac, res, scalefactor, type, quality, + title, &data, &nbytes); + if (ret) { + LEPT_FREE(data); + return ERROR_INT("conversion to pdf failed", procName, 1); + } + + ret = l_binaryWrite(fileout, "w", data, nbytes); + LEPT_FREE(data); + if (ret) + L_ERROR("pdf data not written to file\n", procName); + return ret; +} + + +/*! + * \brief pixacompConvertToPdfData() + * + * \param[in] pixac containing images all at the same resolution + * \param[in] res input resolution of all images + * \param[in] scalefactor scaling factor applied to each image; > 0.0 + * \param[in] type encoding type (L_JPEG_ENCODE, L_G4_ENCODE, + * L_FLATE_ENCODE, L_JP2K_ENCODE, or + * L_DEFAULT_ENCODE for default) + * \param[in] quality used for JPEG only; 0 for default (75) + * \param[in] title [optional] pdf title + * \param[out] pdata output pdf data (of all images + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixacompConvertToPdf().
+ * 
+ */ +l_ok +pixacompConvertToPdfData(PIXAC *pixac, + l_int32 res, + l_float32 scalefactor, + l_int32 type, + l_int32 quality, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_uint8 *imdata; +l_int32 i, n, ret, scaledres, pagetype; +size_t imbytes; +L_BYTEA *ba; +PIX *pixs, *pix; +L_PTRA *pa_data; + + PROCNAME("pixacompConvertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + if (scalefactor <= 0.0) scalefactor = 1.0; + if (type != L_DEFAULT_ENCODE && type != L_JPEG_ENCODE && + type != L_G4_ENCODE && type != L_FLATE_ENCODE && + type != L_JP2K_ENCODE) { + L_WARNING("invalid compression type; using per-page default\n", + procName); + type = L_DEFAULT_ENCODE; + } + + /* Generate all the encoded pdf strings */ + n = pixacompGetCount(pixac); + pa_data = ptraCreate(n); + for (i = 0; i < n; i++) { + if ((pixs = + pixacompGetPix(pixac, pixacompGetOffset(pixac) + i)) == NULL) { + L_ERROR("pix[%d] not retrieved\n", procName, i); + continue; + } + if (pixGetWidth(pixs) == 1) { /* used sometimes as placeholders */ + L_INFO("placeholder image[%d] has w = 1\n", procName, i); + pixDestroy(&pixs); + continue; + } + if (scalefactor != 1.0) + pix = pixScale(pixs, scalefactor, scalefactor); + else + pix = pixClone(pixs); + pixDestroy(&pixs); + scaledres = (l_int32)(res * scalefactor); + + /* Select the encoding type */ + if (type != L_DEFAULT_ENCODE) { + pagetype = type; + } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { + L_ERROR("encoding type selection failed for pix[%d]\n", + procName, i); + pixDestroy(&pix); + continue; + } + + ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, + 0, 0, scaledres, title, NULL, 0); + pixDestroy(&pix); + if (ret) { + L_ERROR("pdf encoding failed for pix[%d]\n", procName, i); + continue; + } + ba = l_byteaInitFromMem(imdata, imbytes); + LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + ptraGetActualCount(pa_data, &n); + if (n == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate them */ + ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); + + ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ + for (i = 0; i < n; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + + +/*! + * \brief pixacompFastConvertToPdfData() + * + * \param[in] pixac containing images all at the same resolution + * \param[in] title [optional] pdf title + * \param[out] pdata output pdf data (of all images + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates the pdf without transcoding if all the
+ *          images in %pixac are compressed with jpeg.
+ *          Images not jpeg compressed are skipped.
+ *      (2) It assumes all images have the same resolution, and that
+ *          the resolution embedded in each jpeg file is correct.
+ * 
+ */ +l_ok +pixacompFastConvertToPdfData(PIXAC *pixac, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_uint8 *imdata; +l_int32 i, n, ret, comptype; +size_t imbytes; +L_BYTEA *ba; +PIXC *pixc; +L_PTRA *pa_data; + + PROCNAME("pixacompFastConvertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + /* Generate all the encoded pdf strings */ + n = pixacompGetCount(pixac); + pa_data = ptraCreate(n); + for (i = 0; i < n; i++) { + if ((pixc = pixacompGetPixcomp(pixac, i, L_NOCOPY)) == NULL) { + L_ERROR("pixc[%d] not retrieved\n", procName, i); + continue; + } + pixcompGetParameters(pixc, NULL, NULL, &comptype, NULL); + if (comptype != IFF_JFIF_JPEG) { + L_ERROR("pixc[%d] not jpeg compressed\n", procName, i); + continue; + } + ret = pixcompFastConvertToPdfData(pixc, title, &imdata, &imbytes); + if (ret) { + L_ERROR("pdf encoding failed for pixc[%d]\n", procName, i); + continue; + } + ba = l_byteaInitFromMem(imdata, imbytes); + LEPT_FREE(imdata); + ptraAdd(pa_data, ba); + } + ptraGetActualCount(pa_data, &n); + if (n == 0) { + L_ERROR("no pdf files made\n", procName); + ptraDestroy(&pa_data, FALSE, FALSE); + return 1; + } + + /* Concatenate them */ + ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); + + /* Clean up */ + ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ + for (i = 0; i < n; i++) { + ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); + l_byteaDestroy(&ba); + } + ptraDestroy(&pa_data, FALSE, FALSE); + return ret; +} + + +/*! + * \brief pixcompFastConvertToPdfData() + * + * \param[in] pixc containing images all at the same resolution + * \param[in] title [optional] pdf title + * \param[out] pdata output pdf data (of all images + * \param[out] pnbytes size of output pdf data + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates the pdf without transcoding.
+ *      (2) It assumes all images are jpeg encoded, have the same
+ *          resolution, and that the resolution embedded in each
+ *          jpeg file is correct.  (It is transferred to the pdf
+ *          via the cid.)
+ * 
+ */ +static l_int32 +pixcompFastConvertToPdfData(PIXC *pixc, + const char *title, + l_uint8 **pdata, + size_t *pnbytes) +{ +l_uint8 *data; +L_COMP_DATA *cid; + + PROCNAME("pixacompFastConvertToPdfData"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + *pdata = NULL; + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + + /* Make a copy of the data */ + data = l_binaryCopy(pixc->data, pixc->size); + cid = l_generateJpegDataMem(data, pixc->size, 0); + + /* Note: cid is destroyed, along with data, by this function */ + return cidConvertToPdfData(cid, title, pdata, pnbytes); +} + + +/*--------------------------------------------------------------------* + * Output for debugging * + *--------------------------------------------------------------------*/ +/*! + * \brief pixacompWriteStreamInfo() + * + * \param[in] fp file stream + * \param[in] pixac + * \param[in] text [optional] identifying string; can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixacompWriteStreamInfo(FILE *fp, + PIXAC *pixac, + const char *text) +{ +l_int32 i, n, nboxes; +PIXC *pixc; + + PROCNAME("pixacompWriteStreamInfo"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + if (text) + fprintf(fp, "Pixacomp Info for %s:\n", text); + else + fprintf(fp, "Pixacomp Info:\n"); + n = pixacompGetCount(pixac); + nboxes = pixacompGetBoxaCount(pixac); + fprintf(fp, "Number of pixcomp: %d\n", n); + fprintf(fp, "Size of pixcomp array alloc: %d\n", pixac->nalloc); + fprintf(fp, "Offset of index into array: %d\n", pixac->offset); + if (nboxes > 0) + fprintf(fp, "Boxa has %d boxes\n", nboxes); + else + fprintf(fp, "Boxa is empty\n"); + for (i = 0; i < n; i++) { + pixc = pixacompGetPixcomp(pixac, pixac->offset + i, L_NOCOPY); + pixcompWriteStreamInfo(fp, pixc, NULL); + } + return 0; +} + + +/*! + * \brief pixcompWriteStreamInfo() + * + * \param[in] fp file stream + * \param[in] pixc + * \param[in] text [optional] identifying string; can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixcompWriteStreamInfo(FILE *fp, + PIXC *pixc, + const char *text) +{ + PROCNAME("pixcompWriteStreamInfo"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + + if (text) + fprintf(fp, " Pixcomp Info for %s:", text); + else + fprintf(fp, " Pixcomp Info:"); + fprintf(fp, " width = %d, height = %d, depth = %d\n", + pixc->w, pixc->h, pixc->d); + fprintf(fp, " xres = %d, yres = %d, size in bytes = %zu\n", + pixc->xres, pixc->yres, pixc->size); + if (pixc->cmapflag) + fprintf(fp, " has colormap\n"); + else + fprintf(fp, " no colormap\n"); + if (pixc->comptype < NumImageFileFormatExtensions) { + fprintf(fp, " comptype = %s (%d)\n", + ImageFileFormatExtensions[pixc->comptype], pixc->comptype); + } else { + fprintf(fp, " Error!! Invalid comptype index: %d\n", pixc->comptype); + } + return 0; +} + + +/*! + * \brief pixacompDisplayTiledAndScaled() + * + * \param[in] pixac + * \param[in] outdepth output depth: 1, 8 or 32 bpp + * \param[in] tilewidth each pix is scaled to this width + * \param[in] ncols number of tiles in each row + * \param[in] background 0 for white, 1 for black; this is the color + * of the spacing between the images + * \param[in] spacing between images, and on outside + * \param[in] border width of additional black border on each image; + * use 0 for no border + * \return pix of tiled images, or NULL on error + * + *
+ * Notes:
+ *      (1) This is the same function as pixaDisplayTiledAndScaled(),
+ *          except it works on a Pixacomp instead of a Pix.  It is particularly
+ *          useful for showing the images in a Pixacomp at reduced resolution.
+ *      (2) See pixaDisplayTiledAndScaled() for details.
+ * 
+ */ +PIX * +pixacompDisplayTiledAndScaled(PIXAC *pixac, + l_int32 outdepth, + l_int32 tilewidth, + l_int32 ncols, + l_int32 background, + l_int32 spacing, + l_int32 border) +{ +PIX *pixd; +PIXA *pixa; + + PROCNAME("pixacompDisplayTiledAndScaled"); + + if (!pixac) + return (PIX *)ERROR_PTR("pixac not defined", procName, NULL); + + if ((pixa = pixaCreateFromPixacomp(pixac, L_COPY)) == NULL) + return (PIX *)ERROR_PTR("pixa not made", procName, NULL); + + pixd = pixaDisplayTiledAndScaled(pixa, outdepth, tilewidth, ncols, + background, spacing, border); + pixaDestroy(&pixa); + return pixd; +} + + +/*! + * \brief pixacompWriteFiles() + * + * \param[in] pixac + * \param[in] subdir subdirectory of /tmp + * \return 0 if OK, 1 on error + */ +l_ok +pixacompWriteFiles(PIXAC *pixac, + const char *subdir) +{ +char buf[128]; +l_int32 i, n; +PIXC *pixc; + + PROCNAME("pixacompWriteFiles"); + + if (!pixac) + return ERROR_INT("pixac not defined", procName, 1); + + if (lept_mkdir(subdir) > 0) + return ERROR_INT("invalid subdir", procName, 1); + + n = pixacompGetCount(pixac); + for (i = 0; i < n; i++) { + pixc = pixacompGetPixcomp(pixac, i, L_NOCOPY); + snprintf(buf, sizeof(buf), "/tmp/%s/%03d", subdir, i); + pixcompWriteFile(buf, pixc); + } + return 0; +} + +extern const char *ImageFileFormatExtensions[]; + +/*! + * \brief pixcompWriteFile() + * + * \param[in] rootname + * \param[in] pixc + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The compressed data is written to file, and the filename is
+ *          generated by appending the format extension to %rootname.
+ * 
+ */ +l_ok +pixcompWriteFile(const char *rootname, + PIXC *pixc) +{ +char buf[128]; + + PROCNAME("pixcompWriteFile"); + + if (!pixc) + return ERROR_INT("pixc not defined", procName, 1); + + snprintf(buf, sizeof(buf), "%s.%s", rootname, + ImageFileFormatExtensions[pixc->comptype]); + l_binaryWrite(buf, "w", pixc->data, pixc->size); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/pixconv.c b/3rdparty/hgOCR/leptonica/pixconv.c new file mode 100644 index 00000000..38db0f06 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixconv.c @@ -0,0 +1,4260 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixconv.c + *
+ *
+ *      These functions convert between images of different types
+ *      without scaling.
+ *
+ *      Conversion from 8 bpp grayscale to 1, 2, 4 and 8 bpp
+ *           PIX        *pixThreshold8()
+ *
+ *      Conversion from colormap to full color or grayscale
+ *           PIX        *pixRemoveColormapGeneral()
+ *           PIX        *pixRemoveColormap()
+ *
+ *      Add colormap losslessly (8 to 8)
+ *           l_int32     pixAddGrayColormap8()
+ *           PIX        *pixAddMinimalGrayColormap8()
+ *
+ *      Conversion from RGB color to grayscale
+ *           PIX        *pixConvertRGBToLuminance()
+ *           PIX        *pixConvertRGBToGray()
+ *           PIX        *pixConvertRGBToGrayFast()
+ *           PIX        *pixConvertRGBToGrayMinMax()
+ *           PIX        *pixConvertRGBToGraySatBoost()
+ *           PIX        *pixConvertRGBToGrayArb()
+ *           PIX        *pixConvertRGBToBinaryArb()
+ *
+ *      Conversion from grayscale to colormap
+ *           PIX        *pixConvertGrayToColormap()  -- 2, 4, 8 bpp
+ *           PIX        *pixConvertGrayToColormap8()  -- 8 bpp only
+ *
+ *      Colorizing conversion from grayscale to color
+ *           PIX        *pixColorizeGray()  -- 8 bpp or cmapped
+ *
+ *      Conversion from RGB color to colormap
+ *           PIX        *pixConvertRGBToColormap()
+ *
+ *      Conversion from colormap to 1 bpp
+ *           PIX        *pixConvertCmapTo1()
+ *
+ *      Quantization for relatively small number of colors in source
+ *           l_int32     pixQuantizeIfFewColors()
+ *
+ *      Conversion from 16 bpp to 8 bpp
+ *           PIX        *pixConvert16To8()
+ *
+ *      Conversion from grayscale to false color
+ *           PIX        *pixConvertGrayToFalseColor()
+ *
+ *      Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp
+ *           PIX        *pixUnpackBinary()
+ *           PIX        *pixConvert1To16()
+ *           PIX        *pixConvert1To32()
+ *
+ *      Unpacking conversion from 1 bpp to 2 bpp
+ *           PIX        *pixConvert1To2Cmap()
+ *           PIX        *pixConvert1To2()
+ *
+ *      Unpacking conversion from 1 bpp to 4 bpp
+ *           PIX        *pixConvert1To4Cmap()
+ *           PIX        *pixConvert1To4()
+ *
+ *      Unpacking conversion from 1, 2 and 4 bpp to 8 bpp
+ *           PIX        *pixConvert1To8()
+ *           PIX        *pixConvert2To8()
+ *           PIX        *pixConvert4To8()
+ *
+ *      Unpacking conversion from 8 bpp to 16 bpp
+ *           PIX        *pixConvert8To16()
+ *
+ *      Top-level conversion to 1 bpp
+ *           PIX        *pixConvertTo1Adaptive()
+ *           PIX        *pixConvertTo1()
+ *           PIX        *pixConvertTo1BySampling()
+ *
+ *      Top-level conversion to 2 bpp
+ *           PIX        *pixConvertTo2()
+ *           PIX        *pixConvert8To2()
+ *
+ *      Top-level conversion to 4 bpp
+ *           PIX        *pixConvertTo4()
+ *           PIX        *pixConvert8To4()
+ *
+ *      Top-level conversion to 8 bpp
+ *           PIX        *pixConvertTo8()
+ *           PIX        *pixConvertTo8BySampling()
+ *           PIX        *pixConvertTo8Colormap()
+ *
+ *      Top-level conversion to 16 bpp
+ *           PIX        *pixConvertTo16()
+ *
+ *      Top-level conversion to 32 bpp (RGB)
+ *           PIX        *pixConvertTo32()   ***
+ *           PIX        *pixConvertTo32BySampling()   ***
+ *           PIX        *pixConvert8To32()  ***
+ *
+ *      Top-level conversion to 8 or 32 bpp, without colormap
+ *           PIX        *pixConvertTo8Or32
+ *
+ *      Conversion between 24 bpp and 32 bpp rgb
+ *           PIX        *pixConvert24To32()
+ *           PIX        *pixConvert32To24()
+ *
+ *      Conversion between 32 bpp (1 spp) and 16 or 8 bpp
+ *           PIX        *pixConvert32To16()
+ *           PIX        *pixConvert32To8()
+ *
+ *      Removal of alpha component by blending with white background
+ *           PIX        *pixRemoveAlpha()
+ *
+ *      Addition of alpha component to 1 bpp
+ *           PIX        *pixAddAlphaTo1bpp()
+ *
+ *      Lossless depth conversion (unpacking)
+ *           PIX        *pixConvertLossless()
+ *
+ *      Conversion for printing in PostScript
+ *           PIX        *pixConvertForPSWrap()
+ *
+ *      Scaling conversion to subpixel RGB
+ *           PIX        *pixConvertToSubpixelRGB()
+ *           PIX        *pixConvertGrayToSubpixelRGB()
+ *           PIX        *pixConvertColorToSubpixelRGB()
+ *
+ *      Setting neutral point for min/max boost conversion to gray
+ *          void         l_setNeutralBoostVal()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +/* ------- Set neutral point for min/max boost conversion to gray ------ */ + /* Call l_setNeutralBoostVal() to change this */ +static l_int32 var_NEUTRAL_BOOST_VAL = 180; + + +#ifndef NO_CONSOLE_IO +#define DEBUG_CONVERT_TO_COLORMAP 0 +#define DEBUG_UNROLLING 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * Conversion from 8 bpp grayscale to 1, 2 4 and 8 bpp * + *-------------------------------------------------------------*/ +/*! + * \brief pixThreshold8() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] d destination depth: 1, 2, 4 or 8 + * \param[in] nlevels number of levels to be used for colormap + * \param[in] cmapflag 1 if makes colormap; 0 otherwise + * \return pixd thresholded with standard dest thresholds, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This uses, by default, equally spaced "target" values
+ *          that depend on the number of levels, with thresholds
+ *          halfway between.  For N levels, with separation (N-1)/255,
+ *          there are N-1 fixed thresholds.
+ *      (2) For 1 bpp destination, the number of levels can only be 2
+ *          and if a cmap is made, black is (0,0,0) and white
+ *          is (255,255,255), which is opposite to the convention
+ *          without a colormap.
+ *      (3) For 1, 2 and 4 bpp, the nlevels arg is used if a colormap
+ *          is made; otherwise, we take the most significant bits
+ *          from the src that will fit in the dest.
+ *      (4) For 8 bpp, the input pixs is quantized to nlevels.  The
+ *          dest quantized with that mapping, either through a colormap
+ *          table or directly with 8 bit values.
+ *      (5) Typically you should not use make a colormap for 1 bpp dest.
+ *      (6) This is not dithering.  Each pixel is treated independently.
+ * 
+ */ +PIX * +pixThreshold8(PIX *pixs, + l_int32 d, + l_int32 nlevels, + l_int32 cmapflag) +{ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixThreshold8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (cmapflag && nlevels < 2) + return (PIX *)ERROR_PTR("nlevels must be at least 2", procName, NULL); + + switch (d) { + case 1: + pixd = pixThresholdToBinary(pixs, 128); + if (cmapflag) { + cmap = pixcmapCreateLinear(1, 2); + pixSetColormap(pixd, cmap); + } + break; + case 2: + pixd = pixThresholdTo2bpp(pixs, nlevels, cmapflag); + break; + case 4: + pixd = pixThresholdTo4bpp(pixs, nlevels, cmapflag); + break; + case 8: + pixd = pixThresholdOn8bpp(pixs, nlevels, cmapflag); + break; + default: + return (PIX *)ERROR_PTR("d must be in {1,2,4,8}", procName, NULL); + } + + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*-------------------------------------------------------------* + * Conversion from colormapped pix * + *-------------------------------------------------------------*/ +/*! + * \brief pixRemoveColormapGeneral() + * + * \param[in] pixs any depth, with or without colormap + * \param[in] type REMOVE_CMAP_TO_BINARY, + * REMOVE_CMAP_TO_GRAYSCALE, + * REMOVE_CMAP_TO_FULL_COLOR, + * REMOVE_CMAP_WITH_ALPHA, + * REMOVE_CMAP_BASED_ON_SRC + * \param[in] ifnocmap L_CLONE, L_COPY + * \return pixd always a new pix; without colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Convenience function that allows choice between returning
+ *          a clone or a copy if pixs does not have a colormap.
+ *      (2) See pixRemoveColormap().
+ * 
+ */ +PIX * +pixRemoveColormapGeneral(PIX *pixs, + l_int32 type, + l_int32 ifnocmap) +{ + PROCNAME("pixRemoveColormapGeneral"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (ifnocmap != L_CLONE && ifnocmap != L_COPY) + return (PIX *)ERROR_PTR("invalid value for ifnocmap", procName, NULL); + + if (pixGetColormap(pixs)) + return pixRemoveColormap(pixs, type); + + if (ifnocmap == L_CLONE) + return pixClone(pixs); + else + return pixCopy(NULL, pixs); +} + + +/*! + * \brief pixRemoveColormap() + * + * \param[in] pixs see restrictions below + * \param[in] type REMOVE_CMAP_TO_BINARY, + * REMOVE_CMAP_TO_GRAYSCALE, + * REMOVE_CMAP_TO_FULL_COLOR, + * REMOVE_CMAP_WITH_ALPHA, + * REMOVE_CMAP_BASED_ON_SRC + * \return pixd without colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs does not have a colormap, a clone is returned.
+ *      (2) Otherwise, the input pixs is restricted to 1, 2, 4 or 8 bpp.
+ *      (3) Use REMOVE_CMAP_TO_BINARY only on 1 bpp pix.
+ *      (4) For grayscale conversion from RGB, use a weighted average
+ *          of RGB values, and always return an 8 bpp pix, regardless
+ *          of whether the input pixs depth is 2, 4 or 8 bpp.
+ *      (5) REMOVE_CMAP_TO_FULL_COLOR ignores the alpha component and
+ *          returns a 32 bpp pix with spp == 3 and the alpha bytes are 0.
+ *      (6) For REMOVE_CMAP_BASED_ON_SRC, if there is no color, this
+ *          returns either a 1 bpp or 8 bpp grayscale pix.
+ *          If there is color, this returns a 32 bpp pix, with either:
+ *           * 3 spp, if the alpha values are all 255 (opaque), or
+ *           * 4 spp (preserving the alpha), if any alpha values are not 255.
+ * 
+ */ +PIX * +pixRemoveColormap(PIX *pixs, + l_int32 type) +{ +l_int32 sval, rval, gval, bval, val0, val1; +l_int32 i, j, k, w, h, d, wpls, wpld, ncolors, nalloc, count; +l_int32 opaque, colorfound, blackwhite; +l_int32 *rmap, *gmap, *bmap, *amap; +l_uint32 *datas, *lines, *datad, *lined, *lut, *graymap; +l_uint32 sword, dword; +PIXCMAP *cmap; +PIX *pixd; + + PROCNAME("pixRemoveColormap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if ((cmap = pixGetColormap(pixs)) == NULL) + return pixClone(pixs); + if (type != REMOVE_CMAP_TO_BINARY && + type != REMOVE_CMAP_TO_GRAYSCALE && + type != REMOVE_CMAP_TO_FULL_COLOR && + type != REMOVE_CMAP_WITH_ALPHA && + type != REMOVE_CMAP_BASED_ON_SRC) { + L_WARNING("Invalid type; converting based on src\n", procName); + type = REMOVE_CMAP_BASED_ON_SRC; + } + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("pixs must be {1,2,4,8} bpp", procName, NULL); + + ncolors = pixcmapGetCount(cmap); + nalloc = 1 << d; /* allocate for max size in case of pixel corruption */ + if (ncolors > nalloc) + return (PIX *)ERROR_PTR("too many colors for pixel depth", + procName, NULL); + + if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) + return (PIX *)ERROR_PTR("colormap arrays not made", procName, NULL); + + if (d != 1 && type == REMOVE_CMAP_TO_BINARY) { + L_WARNING("not 1 bpp; can't remove cmap to binary\n", procName); + type = REMOVE_CMAP_BASED_ON_SRC; + } + + /* Select output type depending on colormap content */ + if (type == REMOVE_CMAP_BASED_ON_SRC) { + pixcmapIsOpaque(cmap, &opaque); + pixcmapHasColor(cmap, &colorfound); + pixcmapIsBlackAndWhite(cmap, &blackwhite); + if (!opaque) { /* save the alpha */ + type = REMOVE_CMAP_WITH_ALPHA; + } else if (colorfound) { + type = REMOVE_CMAP_TO_FULL_COLOR; + } else { /* opaque and no color */ + if (d == 1 && blackwhite) /* can binarize without loss */ + type = REMOVE_CMAP_TO_BINARY; + else + type = REMOVE_CMAP_TO_GRAYSCALE; + } + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if (type == REMOVE_CMAP_TO_BINARY) { + if ((pixd = pixCopy(NULL, pixs)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup_arrays; + } + pixcmapGetColor(cmap, 0, &rval, &gval, &bval); + val0 = rval + gval + bval; + pixcmapGetColor(cmap, 1, &rval, &gval, &bval); + val1 = rval + gval + bval; + if (val0 < val1) /* photometrically inverted from standard */ + pixInvert(pixd, pixd); + pixDestroyColormap(pixd); + } else if (type == REMOVE_CMAP_TO_GRAYSCALE) { + if ((pixd = pixCreate(w, h, 8)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup_arrays; + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + graymap = (l_uint32 *)LEPT_CALLOC(nalloc, sizeof(l_uint32)); + for (i = 0; i < ncolors; i++) { + graymap[i] = (l_uint32)(L_RED_WEIGHT * rmap[i] + + L_GREEN_WEIGHT * gmap[i] + + L_BLUE_WEIGHT * bmap[i] + 0.5); + } + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + switch (d) /* depth test above; no default permitted */ + { + case 8: + /* Unrolled 4x */ + for (j = 0, count = 0; j + 3 < w; j += 4, count++) { + sword = lines[count]; + dword = (graymap[(sword >> 24) & 0xff] << 24) | + (graymap[(sword >> 16) & 0xff] << 16) | + (graymap[(sword >> 8) & 0xff] << 8) | + graymap[sword & 0xff]; + lined[count] = dword; + } + /* Cleanup partial word */ + for (; j < w; j++) { + sval = GET_DATA_BYTE(lines, j); + gval = graymap[sval]; + SET_DATA_BYTE(lined, j, gval); + } +#if DEBUG_UNROLLING +#define CHECK_VALUE(a, b, c) if (GET_DATA_BYTE(a, b) != c) { \ + fprintf(stderr, "Error: mismatch at %d, %d vs %d\n", \ + j, GET_DATA_BYTE(a, b), c); } + for (j = 0; j < w; j++) { + sval = GET_DATA_BYTE(lines, j); + gval = graymap[sval]; + CHECK_VALUE(lined, j, gval); + } +#endif + break; + case 4: + /* Unrolled 8x */ + for (j = 0, count = 0; j + 7 < w; j += 8, count++) { + sword = lines[count]; + dword = (graymap[(sword >> 28) & 0xf] << 24) | + (graymap[(sword >> 24) & 0xf] << 16) | + (graymap[(sword >> 20) & 0xf] << 8) | + graymap[(sword >> 16) & 0xf]; + lined[2 * count] = dword; + dword = (graymap[(sword >> 12) & 0xf] << 24) | + (graymap[(sword >> 8) & 0xf] << 16) | + (graymap[(sword >> 4) & 0xf] << 8) | + graymap[sword & 0xf]; + lined[2 * count + 1] = dword; + } + /* Cleanup partial word */ + for (; j < w; j++) { + sval = GET_DATA_QBIT(lines, j); + gval = graymap[sval]; + SET_DATA_BYTE(lined, j, gval); + } +#if DEBUG_UNROLLING + for (j = 0; j < w; j++) { + sval = GET_DATA_QBIT(lines, j); + gval = graymap[sval]; + CHECK_VALUE(lined, j, gval); + } +#endif + break; + case 2: + /* Unrolled 16x */ + for (j = 0, count = 0; j + 15 < w; j += 16, count++) { + sword = lines[count]; + dword = (graymap[(sword >> 30) & 0x3] << 24) | + (graymap[(sword >> 28) & 0x3] << 16) | + (graymap[(sword >> 26) & 0x3] << 8) | + graymap[(sword >> 24) & 0x3]; + lined[4 * count] = dword; + dword = (graymap[(sword >> 22) & 0x3] << 24) | + (graymap[(sword >> 20) & 0x3] << 16) | + (graymap[(sword >> 18) & 0x3] << 8) | + graymap[(sword >> 16) & 0x3]; + lined[4 * count + 1] = dword; + dword = (graymap[(sword >> 14) & 0x3] << 24) | + (graymap[(sword >> 12) & 0x3] << 16) | + (graymap[(sword >> 10) & 0x3] << 8) | + graymap[(sword >> 8) & 0x3]; + lined[4 * count + 2] = dword; + dword = (graymap[(sword >> 6) & 0x3] << 24) | + (graymap[(sword >> 4) & 0x3] << 16) | + (graymap[(sword >> 2) & 0x3] << 8) | + graymap[sword & 0x3]; + lined[4 * count + 3] = dword; + } + /* Cleanup partial word */ + for (; j < w; j++) { + sval = GET_DATA_DIBIT(lines, j); + gval = graymap[sval]; + SET_DATA_BYTE(lined, j, gval); + } +#if DEBUG_UNROLLING + for (j = 0; j < w; j++) { + sval = GET_DATA_DIBIT(lines, j); + gval = graymap[sval]; + CHECK_VALUE(lined, j, gval); + } +#endif + break; + case 1: + /* Unrolled 8x */ + for (j = 0, count = 0; j + 31 < w; j += 32, count++) { + sword = lines[count]; + for (k = 0; k < 4; k++) { + /* The top byte is always the relevant one */ + dword = (graymap[(sword >> 31) & 0x1] << 24) | + (graymap[(sword >> 30) & 0x1] << 16) | + (graymap[(sword >> 29) & 0x1] << 8) | + graymap[(sword >> 28) & 0x1]; + lined[8 * count + 2 * k] = dword; + dword = (graymap[(sword >> 27) & 0x1] << 24) | + (graymap[(sword >> 26) & 0x1] << 16) | + (graymap[(sword >> 25) & 0x1] << 8) | + graymap[(sword >> 24) & 0x1]; + lined[8 * count + 2 * k + 1] = dword; + sword <<= 8; /* Move up the next byte */ + } + } + /* Cleanup partial word */ + for (; j < w; j++) { + sval = GET_DATA_BIT(lines, j); + gval = graymap[sval]; + SET_DATA_BYTE(lined, j, gval); + } +#if DEBUG_UNROLLING + for (j = 0; j < w; j++) { + sval = GET_DATA_BIT(lines, j); + gval = graymap[sval]; + CHECK_VALUE(lined, j, gval); + } +#undef CHECK_VALUE +#endif + break; + default: + return NULL; + } + } + if (graymap) + LEPT_FREE(graymap); + } else { /* type == REMOVE_CMAP_TO_FULL_COLOR or REMOVE_CMAP_WITH_ALPHA */ + if ((pixd = pixCreate(w, h, 32)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup_arrays; + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + if (type == REMOVE_CMAP_WITH_ALPHA) + pixSetSpp(pixd, 4); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + lut = (l_uint32 *)LEPT_CALLOC(nalloc, sizeof(l_uint32)); + for (i = 0; i < ncolors; i++) { + if (type == REMOVE_CMAP_TO_FULL_COLOR) + composeRGBPixel(rmap[i], gmap[i], bmap[i], lut + i); + else /* full color plus alpha */ + composeRGBAPixel(rmap[i], gmap[i], bmap[i], amap[i], lut + i); + } + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + if (d == 8) + sval = GET_DATA_BYTE(lines, j); + else if (d == 4) + sval = GET_DATA_QBIT(lines, j); + else if (d == 2) + sval = GET_DATA_DIBIT(lines, j); + else /* (d == 1) */ + sval = GET_DATA_BIT(lines, j); + if (sval >= ncolors) + L_WARNING("pixel value out of bounds\n", procName); + else + lined[j] = lut[sval]; + } + } + LEPT_FREE(lut); + } + +cleanup_arrays: + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + LEPT_FREE(amap); + return pixd; +} + + +/*-------------------------------------------------------------* + * Add colormap losslessly (8 to 8) * + *-------------------------------------------------------------*/ +/*! + * \brief pixAddGrayColormap8() + * + * \param[in] pixs 8 bpp + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, this is a no-op.
+ * 
+ */ +l_ok +pixAddGrayColormap8(PIX *pixs) +{ +PIXCMAP *cmap; + + PROCNAME("pixAddGrayColormap8"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (pixGetColormap(pixs)) + return 0; + + cmap = pixcmapCreateLinear(8, 256); + pixSetColormap(pixs, cmap); + return 0; +} + + +/*! + * \brief pixAddMinimalGrayColormap8() + * + * \param[in] pixs 8 bpp + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a colormapped version of the input image
+ *          that has the same number of colormap entries as the
+ *          input image has unique gray levels.
+ * 
+ */ +PIX * +pixAddMinimalGrayColormap8(PIX *pixs) +{ +l_int32 ncolors, w, h, i, j, wpl1, wpld, index, val; +l_int32 *inta, *revmap; +l_uint32 *data1, *datad, *line1, *lined; +PIX *pix1, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixAddMinimalGrayColormap8"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + /* Eliminate the easy cases */ + pixNumColors(pixs, 1, &ncolors); + cmap = pixGetColormap(pixs); + if (cmap) { + if (pixcmapGetCount(cmap) == ncolors) /* irreducible */ + return pixCopy(NULL, pixs); + else + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + } else { + if (ncolors == 256) { + pix1 = pixCopy(NULL, pixs); + pixAddGrayColormap8(pix1); + return pix1; + } + pix1 = pixClone(pixs); + } + + /* Find the gray levels and make a reverse map */ + pixGetDimensions(pix1, &w, &h, NULL); + data1 = pixGetData(pix1); + wpl1 = pixGetWpl(pix1); + inta = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl1; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(line1, j); + inta[val] = 1; + } + } + cmap = pixcmapCreate(8); + revmap = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0, index = 0; i < 256; i++) { + if (inta[i]) { + pixcmapAddColor(cmap, i, i, i); + revmap[i] = index++; + } + } + + /* Set all pixels in pixd to the colormap index */ + pixd = pixCreateTemplate(pix1); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl1; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(line1, j); + SET_DATA_BYTE(lined, j, revmap[val]); + } + } + + pixDestroy(&pix1); + LEPT_FREE(inta); + LEPT_FREE(revmap); + return pixd; +} + + +/*-------------------------------------------------------------* + * Conversion from RGB color to grayscale * + *-------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToLuminance() + * + * \param[in] pixs 32 bpp RGB + * \return 8 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) Use a standard luminance conversion.
+ * 
+ */ +PIX * +pixConvertRGBToLuminance(PIX *pixs) +{ + return pixConvertRGBToGray(pixs, 0.0, 0.0, 0.0); +} + + +/*! + * \brief pixConvertRGBToGray() + * + * \param[in] pixs 32 bpp RGB + * \param[in] rwt, gwt, bwt non-negative; these should add to 1.0, + * or use 0.0 for default + * \return 8 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) Use a weighted average of the RGB values.
+ * 
+ */ +PIX * +pixConvertRGBToGray(PIX *pixs, + l_float32 rwt, + l_float32 gwt, + l_float32 bwt) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 word; +l_uint32 *datas, *lines, *datad, *lined; +l_float32 sum; +PIX *pixd; + + PROCNAME("pixConvertRGBToGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) + return (PIX *)ERROR_PTR("weights not all >= 0.0", procName, NULL); + + /* Make sure the sum of weights is 1.0; otherwise, you can get + * overflow in the gray value. */ + if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { + rwt = L_RED_WEIGHT; + gwt = L_GREEN_WEIGHT; + bwt = L_BLUE_WEIGHT; + } + sum = rwt + gwt + bwt; + if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ + L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); + rwt = rwt / sum; + gwt = gwt / sum; + bwt = bwt / sum; + } + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + word = *(lines + j); + val = (l_int32)(rwt * ((word >> L_RED_SHIFT) & 0xff) + + gwt * ((word >> L_GREEN_SHIFT) & 0xff) + + bwt * ((word >> L_BLUE_SHIFT) & 0xff) + 0.5); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertRGBToGrayFast() + * + * \param[in] pixs 32 bpp RGB + * \return 8 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This function should be used if speed of conversion
+ *          is paramount, and the green channel can be used as
+ *          a fair representative of the RGB intensity.  It is
+ *          several times faster than pixConvertRGBToGray().
+ *      (2) To combine RGB to gray conversion with subsampling,
+ *          use pixScaleRGBToGrayFast() instead.
+ * 
+ */ +PIX * +pixConvertRGBToGrayFast(PIX *pixs) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixd; + + PROCNAME("pixConvertRGBToGrayFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++, lines++) { + val = ((*lines) >> L_GREEN_SHIFT) & 0xff; + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertRGBToGrayMinMax() + * + * \param[in] pixs 32 bpp RGB + * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF, + * L_CHOOSE_MIN_BOOST, L_CHOOSE_MAX_BOOST + * \return 8 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This chooses various components or combinations of them,
+ *          from the three RGB sample values.  In addition to choosing
+ *          the min, max, and maxdiff (difference between max and min),
+ *          this also allows boosting the min and max about a reference
+ *          value.
+ *      (2) The default reference value for boosting the min and max
+ *          is 200.  This can be changed with l_setNeutralBoostVal()
+ * 
+ */ +PIX * +pixConvertRGBToGrayMinMax(PIX *pixs, + l_int32 type) +{ +l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, val, minval, maxval; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixd; + + PROCNAME("pixConvertRGBToGrayMinMax"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && + type != L_CHOOSE_MAXDIFF && type != L_CHOOSE_MIN_BOOST && + type != L_CHOOSE_MAX_BOOST) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + if (type == L_CHOOSE_MIN || type == L_CHOOSE_MIN_BOOST) { + val = L_MIN(rval, gval); + val = L_MIN(val, bval); + if (type == L_CHOOSE_MIN_BOOST) + val = L_MIN(255, (val * val) / var_NEUTRAL_BOOST_VAL); + } else if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAX_BOOST) { + val = L_MAX(rval, gval); + val = L_MAX(val, bval); + if (type == L_CHOOSE_MAX_BOOST) + val = L_MIN(255, (val * val) / var_NEUTRAL_BOOST_VAL); + } else { /* L_CHOOSE_MAXDIFF */ + minval = L_MIN(rval, gval); + minval = L_MIN(minval, bval); + maxval = L_MAX(rval, gval); + maxval = L_MAX(maxval, bval); + val = maxval - minval; + } + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertRGBToGraySatBoost() + * + * \param[in] pixs 32 bpp rgb + * \param[in] refval between 1 and 255; typ. less than 128 + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns the max component value, boosted by
+ *          the saturation. The maximum boost occurs where
+ *          the maximum component value is equal to some reference value.
+ *          This particular weighting is due to Dany Qumsiyeh.
+ *      (2) For gray pixels (zero saturation), this returns
+ *          the intensity of any component.
+ *      (3) For fully saturated pixels ('fullsat'), this rises linearly
+ *          with the max value and has a slope equal to 255 divided
+ *          by the reference value; for a max value greater than
+ *          the reference value, it is clipped to 255.
+ *      (4) For saturation values in between, the output is a linear
+ *          combination of (2) and (3), weighted by saturation.
+ *          It falls between these two curves, and does not exceed 255.
+ *      (5) This can be useful for distinguishing an object that has nonzero
+ *          saturation from a gray background.  For this, the refval
+ *          should be chosen near the expected value of the background,
+ *          to achieve maximum saturation boost there.
+ * 
+ */ +PIX * +pixConvertRGBToGraySatBoost(PIX *pixs, + l_int32 refval) +{ +l_int32 w, h, d, i, j, wplt, wpld; +l_int32 rval, gval, bval, sval, minrg, maxrg, min, max, delta; +l_int32 fullsat, newval; +l_float32 *invmax, *ratio; +l_uint32 *linet, *lined, *datat, *datad; +PIX *pixt, *pixd; + + PROCNAME("pixConvertRGBToGraySatBoost"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not cmapped or rgb", procName, NULL); + if (refval < 1 || refval > 255) + return (PIX *)ERROR_PTR("refval not in [1 ... 255]", procName, NULL); + + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + pixd = pixCreate(w, h, 8); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + wplt = pixGetWpl(pixt); + datat = pixGetData(pixt); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + invmax = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); + ratio = (l_float32 *)LEPT_CALLOC(256, sizeof(l_float32)); + for (i = 1; i < 256; i++) { /* i == 0 --> delta = sval = newval = 0 */ + invmax[i] = 1.0 / (l_float32)i; + ratio[i] = (l_float32)i / (l_float32)refval; + } + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(linet[j], &rval, &gval, &bval); + minrg = L_MIN(rval, gval); + min = L_MIN(minrg, bval); + maxrg = L_MAX(rval, gval); + max = L_MAX(maxrg, bval); + delta = max - min; + if (delta == 0) /* gray; no chroma */ + sval = 0; + else + sval = (l_int32)(255. * (l_float32)delta * invmax[max] + 0.5); + + fullsat = L_MIN(255, 255 * ratio[max]); + newval = (sval * fullsat + (255 - sval) * max) / 255; + SET_DATA_BYTE(lined, j, newval); + } + } + + pixDestroy(&pixt); + LEPT_FREE(invmax); + LEPT_FREE(ratio); + return pixd; +} + + +/*! + * \brief pixConvertRGBToGrayArb() + * + * \param[in] pixs 32 bpp RGB + * \param[in] rc, gc, bc arithmetic factors; can be negative + * \return 8 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This converts to gray using an arbitrary linear combination
+ *          of the rgb color components.  It differs from pixConvertToGray(),
+ *          which uses only positive coefficients that sum to 1.
+ *      (2) The gray output values are clipped to 0 and 255.
+ * 
+ */ +PIX * +pixConvertRGBToGrayArb(PIX *pixs, + l_float32 rc, + l_float32 gc, + l_float32 bc) +{ +l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, val; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixd; + + PROCNAME("pixConvertRGBToGrayArb"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (rc <= 0 && gc <= 0 && bc <= 0) + return (PIX *)ERROR_PTR("all coefficients <= 0", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + val = (l_int32)(rc * rval + gc * gval + bc * bval); + val = L_MIN(255, L_MAX(0, val)); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*! + * \brief pixConvertRGBToBinaryArb() + * + * \param[in] pixs 32 bpp RGB + * \param[in] rc, gc, bc arithmetic factors; can be negative + * \param[in] thresh binarization threshold + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return 1 bpp pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This makes a 1 bpp mask from an RGB image, using an arbitrary
+ *          linear combination of the rgb color components, along with
+ *          a threshold and a selection choice of the gray value relative
+ *          to %thresh.
+ * 
+ */ +PIX * +pixConvertRGBToBinaryArb(PIX *pixs, + l_float32 rc, + l_float32 gc, + l_float32 bc, + l_int32 thresh, + l_int32 relation) +{ +l_int32 threshold; +PIX *pix1, *pix2; + + PROCNAME("pixConvertRGBToBinaryArb"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (rc <= 0 && gc <= 0 && bc <= 0) + return (PIX *)ERROR_PTR("all coefficients <= 0", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (PIX *)ERROR_PTR("invalid relation", procName, NULL); + + pix1 = pixConvertRGBToGrayArb(pixs, rc, gc, bc); + threshold = (relation == L_SELECT_IF_LTE || relation == L_SELECT_IF_GT) ? + thresh : thresh + 1; + pix2 = pixThresholdToBinary(pix1, threshold); + if (relation == L_SELECT_IF_GT || relation == L_SELECT_IF_GTE) + pixInvert(pix2, pix2); + pixDestroy(&pix1); + return pix2; +} + + +/*---------------------------------------------------------------------------* + * Conversion from grayscale to colormap * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertGrayToColormap() + * + * \param[in] pixs 2, 4 or 8 bpp grayscale + * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a simple interface for adding a colormap to a
+ *          2, 4 or 8 bpp grayscale image without causing any
+ *          quantization.  There is some similarity to operations
+ *          in grayquant.c, such as pixThresholdOn8bpp(), where
+ *          the emphasis is on quantization with an arbitrary number
+ *          of levels, and a colormap is an option.
+ *      (2) Returns a copy if pixs already has a colormap.
+ *      (3) For 8 bpp src, this is a lossless transformation.
+ *      (4) For 2 and 4 bpp src, this generates a colormap that
+ *          assumes full coverage of the gray space, with equally spaced
+ *          levels: 4 levels for d = 2 and 16 levels for d = 4.
+ *      (5) In all cases, the depth of the dest is the same as the src.
+ * 
+ */ +PIX * +pixConvertGrayToColormap(PIX *pixs) +{ +l_int32 d; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertGrayToColormap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("pixs not 2, 4 or 8 bpp", procName, NULL); + + if (pixGetColormap(pixs)) { + L_INFO("pixs already has a colormap\n", procName); + return pixCopy(NULL, pixs); + } + + if (d == 8) /* lossless conversion */ + return pixConvertGrayToColormap8(pixs, 2); + + /* Build a cmap with equally spaced target values over the + * full 8 bpp range. */ + pixd = pixCopy(NULL, pixs); + cmap = pixcmapCreateLinear(d, 1 << d); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixConvertGrayToColormap8() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] mindepth of pixd; valid values are 2, 4 and 8 + * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns a copy if pixs already has a colormap.
+ *      (2) This is a lossless transformation; there is no quantization.
+ *          We compute the number of different gray values in pixs,
+ *          and construct a colormap that has exactly these values.
+ *      (3) 'mindepth' is the minimum depth of pixd.  If mindepth == 8,
+ *          pixd will always be 8 bpp.  Let the number of different
+ *          gray values in pixs be ngray.  If mindepth == 4, we attempt
+ *          to save pixd as a 4 bpp image, but if ngray > 16,
+ *          pixd must be 8 bpp.  Likewise, if mindepth == 2,
+ *          the depth of pixd will be 2 if ngray <= 4 and 4 if ngray > 4
+ *          but <= 16.
+ * 
+ */ +PIX * +pixConvertGrayToColormap8(PIX *pixs, + l_int32 mindepth) +{ +l_int32 ncolors, w, h, depth, i, j, wpls, wpld; +l_int32 index, num, val, newval; +l_int32 array[256]; +l_uint32 *lines, *lined, *datas, *datad; +NUMA *na; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertGrayToColormap8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (mindepth != 2 && mindepth != 4 && mindepth != 8) { + L_WARNING("invalid value of mindepth; setting to 8\n", procName); + mindepth = 8; + } + + if (pixGetColormap(pixs)) { + L_INFO("pixs already has a colormap\n", procName); + return pixCopy(NULL, pixs); + } + + na = pixGetGrayHistogram(pixs, 1); + numaGetCountRelativeToZero(na, L_GREATER_THAN_ZERO, &ncolors); + if (mindepth == 8 || ncolors > 16) + depth = 8; + else if (mindepth == 4 || ncolors > 4) + depth = 4; + else + depth = 2; + + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, depth); + cmap = pixcmapCreate(depth); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + + index = 0; + for (i = 0; i < 256; i++) { + array[i] = 0; /* only to quiet the static checker */ + numaGetIValue(na, i, &num); + if (num > 0) { + pixcmapAddColor(cmap, i, i, i); + array[i] = index; + index++; + } + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + newval = array[val]; + if (depth == 2) + SET_DATA_DIBIT(lined, j, newval); + else if (depth == 4) + SET_DATA_QBIT(lined, j, newval); + else /* depth == 8 */ + SET_DATA_BYTE(lined, j, newval); + } + } + + numaDestroy(&na); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Colorizing conversion from grayscale to color * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixColorizeGray() + * + * \param[in] pixs 8 bpp gray; 2, 4 or 8 bpp colormapped + * \param[in] color 32 bit rgba pixel + * \param[in] cmapflag 1 for result to have colormap; 0 for RGB + * \return pixd 8 bpp colormapped or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) This applies the specific color to the grayscale image.
+ *      (2) If pixs already has a colormap, it is removed to gray
+ *          before colorizing.
+ * 
+ */ +PIX * +pixColorizeGray(PIX *pixs, + l_uint32 color, + l_int32 cmapflag) +{ +l_int32 i, j, w, h, wplt, wpld, val8; +l_uint32 *datad, *datat, *lined, *linet, *tab; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixColorizeGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", procName, NULL); + + if (pixGetColormap(pixs)) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixt = pixClone(pixs); + + cmap = pixcmapGrayToColor(color); + if (cmapflag) { + pixd = pixCopy(NULL, pixt); + pixSetColormap(pixd, cmap); + pixDestroy(&pixt); + return pixd; + } + + /* Make an RGB pix */ + pixcmapToRGBTable(cmap, &tab, NULL); + pixGetDimensions(pixt, &w, &h, NULL); + pixd = pixCreate(w, h, 32); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + linet = datat + i * wplt; + for (j = 0; j < w; j++) { + val8 = GET_DATA_BYTE(linet, j); + lined[j] = tab[val8]; + } + } + + pixDestroy(&pixt); + pixcmapDestroy(&cmap); + LEPT_FREE(tab); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion from RGB color to colormap * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertRGBToColormap() + * + * \param[in] pixs 32 bpp rgb + * \param[in] ditherflag 1 to dither, 0 otherwise + * \return pixd 2, 4 or 8 bpp with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) This function has two relatively simple modes of color
+ *          quantization:
+ *            (a) If the image is made orthographically and has not more
+ *                than 256 'colors' at the level 4 octcube leaves,
+ *                it is quantized nearly exactly.  The ditherflag
+ *                is ignored.
+ *            (b) Most natural images have more than 256 different colors;
+ *                in that case we use adaptive octree quantization,
+ *                with dithering if requested.
+ *      (2) If there are not more than 256 occupied level 4 octcubes,
+ *          the color in the colormap that represents all pixels in
+ *          one of those octcubes is given by the first pixel that
+ *          falls into that octcube.
+ *      (3) If there are more than 256 colors, we use adaptive octree
+ *          color quantization.
+ *      (4) Dithering gives better visual results on images where
+ *          there is a color wash (a slow variation of color), but it
+ *          is about twice as slow and results in significantly larger
+ *          files when losslessly compressed (e.g., into png).
+ * 
+ */ +PIX * +pixConvertRGBToColormap(PIX *pixs, + l_int32 ditherflag) +{ +l_int32 ncolors; +NUMA *na; +PIX *pixd; + + PROCNAME("pixConvertRGBToColormap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (pixGetSpp(pixs) == 4) + L_WARNING("pixs has alpha; removing\n", procName); + + /* Get the histogram and count the number of occupied level 4 + * leaf octcubes. We don't yet know if this is the number of + * actual colors, but if it's not, all pixels falling into + * the same leaf octcube will be assigned to the color of the + * first pixel that lands there. */ + na = pixOctcubeHistogram(pixs, 4, &ncolors); + + /* If there are too many occupied leaf octcubes to be + * represented directly in a colormap, fall back to octree + * quantization, optionally with dithering. */ + if (ncolors > 256) { + numaDestroy(&na); + if (ditherflag) + L_INFO("More than 256 colors; using octree quant with dithering\n", + procName); + else + L_INFO("More than 256 colors; using octree quant; no dithering\n", + procName); + return pixOctreeColorQuant(pixs, 240, ditherflag); + } + + /* There are not more than 256 occupied leaf octcubes. + * Quantize to those octcubes. */ + pixd = pixFewColorsOctcubeQuant2(pixs, 4, na, ncolors, NULL); + pixCopyInputFormat(pixd, pixs); + numaDestroy(&na); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion from colormap to 1 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertCmapTo1() + * + * \param[in] pixs cmapped + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is an extreme color quantizer.  It decides which
+ *          colors map to FG (black) and which to BG (white).
+ *      (2) This uses two heuristics to make the decision:
+ *          (a) colors similar to each other are likely to be in the same class
+ *          (b) there is usually much less FG than BG.
+ * 
+ */ +PIX * +pixConvertCmapTo1(PIX *pixs) +{ +l_int32 i, j, nc, w, h, imin, imax, factor, wpl1, wpld; +l_int32 index, rmin, gmin, bmin, rmax, gmax, bmax, dmin, dmax; +l_float32 minfract, ifract; +l_int32 *lut; +l_uint32 *line1, *lined, *data1, *datad; +NUMA *na1, *na2; /* histograms */ +PIX *pix1, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertCmapTo1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if ((cmap = pixGetColormap(pixs)) == NULL) + return (PIX *)ERROR_PTR("no colormap", procName, NULL); + + /* Select target colors for the two classes. Find the + * colors with smallest and largest average component values. + * The smallest is class 0 and the largest is class 1. */ + pixcmapGetRangeValues(cmap, L_SELECT_AVERAGE, NULL, NULL, &imin, &imax); + pixcmapGetColor(cmap, imin, &rmin, &gmin, &bmin); + pixcmapGetColor(cmap, imax, &rmax, &gmax, &bmax); + nc = pixcmapGetCount(cmap); + + /* Assign colors to the two classes. The histogram is + * initialized to 0, so any colors not found when computing + * the sampled histogram will get zero weight in minfract. */ + if ((lut = (l_int32 *)LEPT_CALLOC(nc, sizeof(l_int32))) == NULL) + return (PIX *)ERROR_PTR("calloc fail for lut", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 50000. + 0.5)); + na1 = pixGetCmapHistogram(pixs, factor); + na2 = numaNormalizeHistogram(na1, 1.0); + minfract = 0.0; + for (i = 0; i < nc; i++) { + numaGetFValue(na2, i, &ifract); + pixcmapGetDistanceToColor(cmap, i, rmin, gmin, bmin, &dmin); + pixcmapGetDistanceToColor(cmap, i, rmax, gmax, bmax, &dmax); + if (dmin < dmax) { /* closer to dark extreme value */ + lut[i] = 1; /* black pixel in 1 bpp image */ + minfract += ifract; + } + } + numaDestroy(&na1); + numaDestroy(&na2); + + /* Generate the output binarized image */ + pix1 = pixConvertTo8(pixs, 1); + pixd = pixCreate(w, h, 1); + data1 = pixGetData(pix1); + datad = pixGetData(pixd); + wpl1 = pixGetWpl(pix1); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl1; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + index = GET_DATA_BYTE(line1, j); + if (lut[index] == 1) SET_DATA_BIT(lined, j); + } + } + pixDestroy(&pix1); + LEPT_FREE(lut); + + /* We expect minfract (the dark colors) to be less than 0.5. + * If that is not the case, invert pixd. */ + if (minfract > 0.5) { + L_INFO("minfract = %5.3f; inverting\n", procName, minfract); + pixInvert(pixd, pixd); + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Quantization for relatively small number of colors in source * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixQuantizeIfFewColors() + * + * \param[in] pixs 8 bpp gray or 32 bpp rgb + * \param[in] maxcolors max number of colors allowed to be returned + * from pixColorsForQuantization(); + * use 0 for default + * \param[in] mingraycolors min number of gray levels that a grayscale + * image is quantized to; use 0 for default + * \param[in] octlevel for octcube quantization: 3 or 4 + * \param[out] ppixd 2,4 or 8 bpp quantized; null if too many colors + * \return 0 if OK, 1 on error or if pixs can't be quantized into + * a small number of colors. + * + *
+ * Notes:
+ *      (1) This is a wrapper that tests if the pix can be quantized
+ *          with good quality using a small number of colors.  If so,
+ *          it does the quantization, defining a colormap and using
+ *          pixels whose value is an index into the colormap.
+ *      (2) If the image has color, it is quantized with 8 bpp pixels.
+ *          If the image is essentially grayscale, the pixels are
+ *          either 4 or 8 bpp, depending on the size of the required
+ *          colormap.
+ *      (3) %octlevel = 4 generates a larger colormap and larger
+ *          compressed image than %octlevel = 3.  If image quality is
+ *          important, you should use %octlevel = 4.
+ *      (4) If the image already has a colormap, it returns a clone.
+ * 
+ */ +l_ok +pixQuantizeIfFewColors(PIX *pixs, + l_int32 maxcolors, + l_int32 mingraycolors, + l_int32 octlevel, + PIX **ppixd) +{ +l_int32 d, ncolors, iscolor, graycolors; +PIX *pixg, *pixd; + + PROCNAME("pixQuantizeIfFewColors"); + + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetColormap(pixs) != NULL) { + *ppixd = pixClone(pixs); + return 0; + } + if (maxcolors <= 0) + maxcolors = 15; /* default */ + if (maxcolors > 50) + L_WARNING("maxcolors > 50; very large!\n", procName); + if (mingraycolors <= 0) + mingraycolors = 10; /* default */ + if (mingraycolors > 30) + L_WARNING("mingraycolors > 30; very large!\n", procName); + if (octlevel != 3 && octlevel != 4) { + L_WARNING("invalid octlevel; setting to 3\n", procName); + octlevel = 3; + } + + /* Test the number of colors. For color, the octcube leaves + * are at level 4. */ + pixColorsForQuantization(pixs, 0, &ncolors, &iscolor, 0); + if (ncolors > maxcolors) + return ERROR_INT("too many colors", procName, 1); + + /* Quantize! + * (1) For color: + * If octlevel == 4, try to quantize to an octree where + * the octcube leaves are at level 4. If that fails, + * back off to level 3. + * If octlevel == 3, quantize to level 3 directly. + * For level 3, the quality is usually good enough and there + * is negligible chance of getting more than 256 colors. + * (2) For grayscale, multiply ncolors by 1.5 for extra quality, + * but use at least mingraycolors and not more than 256. */ + if (iscolor) { + pixd = pixFewColorsOctcubeQuant1(pixs, octlevel); + if (!pixd) { /* backoff */ + pixd = pixFewColorsOctcubeQuant1(pixs, octlevel - 1); + if (octlevel == 3) /* shouldn't happen */ + L_WARNING("quantized at level 2; low quality\n", procName); + } + } else { /* image is really grayscale */ + if (d == 32) + pixg = pixConvertRGBToLuminance(pixs); + else + pixg = pixClone(pixs); + graycolors = L_MAX(mingraycolors, (l_int32)(1.5 * ncolors)); + graycolors = L_MIN(graycolors, 256); + if (graycolors < 16) + pixd = pixThresholdTo4bpp(pixg, graycolors, 1); + else + pixd = pixThresholdOn8bpp(pixg, graycolors, 1); + pixDestroy(&pixg); + } + *ppixd = pixd; + + if (!pixd) + return ERROR_INT("pixd not made", procName, 1); + pixCopyInputFormat(pixd, pixs); + return 0; +} + + + +/*---------------------------------------------------------------------------* + * Conversion from 16 bpp to 8 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert16To8() + * + * \param[in] pixs 16 bpp + * \param[in] type L_LS_BYTE, L_MS_BYTE, L_AUTO_BYTE, L_CLIP_TO_FF + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) With L_AUTO_BYTE, if the max pixel value is greater than 255,
+ *          use the MSB; otherwise, use the LSB.
+ *      (2) With L_CLIP_TO_FF, use min(pixel-value, 0xff) for each
+ *          16-bit src pixel.
+ * 
+ */ +PIX * +pixConvert16To8(PIX *pixs, + l_int32 type) +{ +l_uint16 dword; +l_int32 w, h, wpls, wpld, i, j, val, use_lsb; +l_uint32 sword, first, second; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixConvert16To8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 16) + return (PIX *)ERROR_PTR("pixs not 16 bpp", procName, NULL); + if (type != L_LS_BYTE && type != L_MS_BYTE && + type != L_AUTO_BYTE && type != L_CLIP_TO_FF) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + if (type == L_AUTO_BYTE) { + use_lsb = TRUE; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + val = GET_DATA_TWO_BYTES(lines, j); + if (val > 255) { + use_lsb = FALSE; + break; + } + } + if (!use_lsb) break; + } + type = (use_lsb) ? L_LS_BYTE : L_MS_BYTE; + } + + /* Convert 2 pixels at a time */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (type == L_LS_BYTE) { + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + dword = ((sword >> 8) & 0xff00) | (sword & 0xff); + SET_DATA_TWO_BYTES(lined, j, dword); + } + } else if (type == L_MS_BYTE) { + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + dword = ((sword >> 16) & 0xff00) | ((sword >> 8) & 0xff); + SET_DATA_TWO_BYTES(lined, j, dword); + } + } else { /* type == L_CLIP_TO_FF */ + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + first = (sword >> 24) ? 255 : ((sword >> 16) & 0xff); + second = ((sword >> 8) & 0xff) ? 255 : (sword & 0xff); + dword = (first << 8) | second; + SET_DATA_TWO_BYTES(lined, j, dword); + } + } + } + + return pixd; +} + + + +/*---------------------------------------------------------------------------* + * Conversion from grayscale to false color + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertGrayToFalseColor() + * + * \param[in] pixs 8 or 16 bpp grayscale + * \param[in] gamma (factor) 0.0 or 1.0 for default; > 1.0 for brighter; + * 2.0 is quite nice + * \return pixd 8 bpp with colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) For 8 bpp input, this simply adds a colormap to the input image.
+ *      (2) For 16 bpp input, it first converts to 8 bpp, using the MSB,
+ *          and then adds the colormap.
+ *      (3) The colormap is modeled after the Matlab "jet" configuration.
+ * 
+ */ +PIX * +pixConvertGrayToFalseColor(PIX *pixs, + l_float32 gamma) +{ +l_int32 d, i, rval, bval, gval; +l_int32 *curve; +l_float32 invgamma, x; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertGrayToFalseColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 16) + return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); + + if (d == 16) { + pixd = pixConvert16To8(pixs, L_MS_BYTE); + } else { /* d == 8 */ + if (pixGetColormap(pixs)) + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixd = pixCopy(NULL, pixs); + } + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(8); + pixSetColormap(pixd, cmap); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Generate curve for transition part of color map */ + curve = (l_int32 *)LEPT_CALLOC(64, sizeof(l_int32)); + if (gamma == 0.0) gamma = 1.0; + invgamma = 1. / gamma; + for (i = 0; i < 64; i++) { + x = (l_float32)i / 64.; + curve[i] = (l_int32)(255. * powf(x, invgamma) + 0.5); + } + + for (i = 0; i < 256; i++) { + if (i < 32) { + rval = 0; + gval = 0; + bval = curve[i + 32]; + } else if (i < 96) { /* 32 - 95 */ + rval = 0; + gval = curve[i - 32]; + bval = 255; + } else if (i < 160) { /* 96 - 159 */ + rval = curve[i - 96]; + gval = 255; + bval = curve[159 - i]; + } else if (i < 224) { /* 160 - 223 */ + rval = 255; + gval = curve[223 - i]; + bval = 0; + } else { /* 224 - 255 */ + rval = curve[287 - i]; + gval = 0; + bval = 0; + } + pixcmapAddColor(cmap, rval, gval, bval); + } + + LEPT_FREE(curve); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixUnpackBinary() + * + * \param[in] pixs 1 bpp + * \param[in] depth of destination: 2, 4, 8, 16 or 32 bpp + * \param[in] invert 0: binary 0 --> grayscale 0 + * binary 1 --> grayscale 0xff... + * 1: binary 0 --> grayscale 0xff... + * binary 1 --> grayscale 0 + * \return pixd 2, 4, 8, 16 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This function calls special cases of pixConvert1To*(),
+ *          for 2, 4, 8, 16 and 32 bpp destinations.
+ * 
+ */ +PIX * +pixUnpackBinary(PIX *pixs, + l_int32 depth, + l_int32 invert) +{ +PIX *pixd; + + PROCNAME("pixUnpackBinary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 32) + return (PIX *)ERROR_PTR("depth not 2, 4, 8, 16 or 32 bpp", + procName, NULL); + + if (depth == 2) { + if (invert == 0) + pixd = pixConvert1To2(NULL, pixs, 0, 3); + else /* invert bits */ + pixd = pixConvert1To2(NULL, pixs, 3, 0); + } else if (depth == 4) { + if (invert == 0) + pixd = pixConvert1To4(NULL, pixs, 0, 15); + else /* invert bits */ + pixd = pixConvert1To4(NULL, pixs, 15, 0); + } else if (depth == 8) { + if (invert == 0) + pixd = pixConvert1To8(NULL, pixs, 0, 255); + else /* invert bits */ + pixd = pixConvert1To8(NULL, pixs, 255, 0); + } else if (depth == 16) { + if (invert == 0) + pixd = pixConvert1To16(NULL, pixs, 0, 0xffff); + else /* invert bits */ + pixd = pixConvert1To16(NULL, pixs, 0xffff, 0); + } else { + if (invert == 0) + pixd = pixConvert1To32(NULL, pixs, 0, 0xffffffff); + else /* invert bits */ + pixd = pixConvert1To32(NULL, pixs, 0xffffffff, 0); + } + + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixConvert1To16() + * + * \param[in] pixd [optional] 16 bpp, can be null + * \param[in] pixs 1 bpp + * \param[in] val0 16 bit value to be used for 0s in pixs + * \param[in] val1 16 bit value to be used for 1s in pixs + * \return pixd 16 bpp + * + *
+ * Notes:
+ *      (1) If pixd is null, a new pix is made.
+ *      (2) If pixd is not null, it must be of equal width and height
+ *          as pixs.  It is always returned.
+ * 
+ */ +PIX * +pixConvert1To16(PIX *pixd, + PIX *pixs, + l_uint16 val0, + l_uint16 val1) +{ +l_int32 w, h, i, j, dibit, ndibits, wpls, wpld; +l_uint16 val[2]; +l_uint32 index; +l_uint32 *tab, *datas, *datad, *lines, *lined; + + PROCNAME("pixConvert1To16"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); + if (pixGetDepth(pixd) != 16) + return (PIX *)ERROR_PTR("pixd not 16 bpp", procName, pixd); + } else { + if ((pixd = pixCreate(w, h, 16)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Use a table to convert 2 src bits at a time */ + tab = (l_uint32 *)LEPT_CALLOC(4, sizeof(l_uint32)); + val[0] = val0; + val[1] = val1; + for (index = 0; index < 4; index++) { + tab[index] = (val[(index >> 1) & 1] << 16) | val[index & 1]; + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + ndibits = (w + 1) / 2; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < ndibits; j++) { + dibit = GET_DATA_DIBIT(lines, j); + lined[j] = tab[dibit]; + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*! + * \brief pixConvert1To32() + * + * \param[in] pixd [optional] 32 bpp, can be null + * \param[in] pixs 1 bpp + * \param[in] val0 32 bit value to be used for 0s in pixs + * \param[in] val1 32 bit value to be used for 1s in pixs + * \return pixd 32 bpp + * + *
+ * Notes:
+ *      (1) If pixd is null, a new pix is made.
+ *      (2) If pixd is not null, it must be of equal width and height
+ *          as pixs.  It is always returned.
+ * 
+ */ +PIX * +pixConvert1To32(PIX *pixd, + PIX *pixs, + l_uint32 val0, + l_uint32 val1) +{ +l_int32 w, h, i, j, wpls, wpld, bit; +l_uint32 val[2]; +l_uint32 *datas, *datad, *lines, *lined; + + PROCNAME("pixConvert1To32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); + if (pixGetDepth(pixd) != 32) + return (PIX *)ERROR_PTR("pixd not 32 bpp", procName, pixd); + } else { + if ((pixd = pixCreate(w, h, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + val[0] = val0; + val[1] = val1; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j + * Notes: + * (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0) + *
+ */ +PIX * +pixConvert1To2Cmap(PIX *pixs) +{ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvert1To2Cmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + if ((pixd = pixConvert1To2(NULL, pixs, 0, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(2); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + + return pixd; +} + + +/*! + * \brief pixConvert1To2() + * + * \param[in] pixd [optional] 2 bpp, can be null + * \param[in] pixs 1 bpp + * \param[in] val0 2 bit value to be used for 0s in pixs + * \param[in] val1 2 bit value to be used for 1s in pixs + * \return pixd 2 bpp + * + *
+ * Notes:
+ *      (1) If pixd is null, a new pix is made.
+ *      (2) If pixd is not null, it must be of equal width and height
+ *          as pixs.  It is always returned.
+ *      (3) A simple unpacking might use val0 = 0 and val1 = 3.
+ *      (4) If you want a colormapped pixd, use pixConvert1To2Cmap().
+ * 
+ */ +PIX * +pixConvert1To2(PIX *pixd, + PIX *pixs, + l_int32 val0, + l_int32 val1) +{ +l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; +l_uint8 val[2]; +l_uint32 index; +l_uint16 *tab; +l_uint32 *datas, *datad, *lines, *lined; + + PROCNAME("pixConvert1To2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); + if (pixGetDepth(pixd) != 2) + return (PIX *)ERROR_PTR("pixd not 2 bpp", procName, pixd); + } else { + if ((pixd = pixCreate(w, h, 2)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Use a table to convert 8 src bits to 16 dest bits */ + tab = (l_uint16 *)LEPT_CALLOC(256, sizeof(l_uint16)); + val[0] = val0; + val[1] = val1; + for (index = 0; index < 256; index++) { + tab[index] = (val[(index >> 7) & 1] << 14) | + (val[(index >> 6) & 1] << 12) | + (val[(index >> 5) & 1] << 10) | + (val[(index >> 4) & 1] << 8) | + (val[(index >> 3) & 1] << 6) | + (val[(index >> 2) & 1] << 4) | + (val[(index >> 1) & 1] << 2) | val[index & 1]; + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + nbytes = (w + 7) / 8; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < nbytes; j++) { + byteval = GET_DATA_BYTE(lines, j); + SET_DATA_TWO_BYTES(lined, j, tab[byteval]); + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion from 1 bpp to 4 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert1To4Cmap() + * + * \param[in] pixs 1 bpp + * \return pixd 4 bpp, cmapped + * + *
+ * Notes:
+ *      (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0)
+ * 
+ */ +PIX * +pixConvert1To4Cmap(PIX *pixs) +{ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvert1To4Cmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + if ((pixd = pixConvert1To4(NULL, pixs, 0, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(4); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + + return pixd; +} + + +/*! + * \brief pixConvert1To4() + * + * \param[in] pixd [optional] 4 bpp, can be null + * \param[in] pixs 1 bpp + * \param[in] val0 4 bit value to be used for 0s in pixs + * \param[in] val1 4 bit value to be used for 1s in pixs + * \return pixd 4 bpp + * + *
+ * Notes:
+ *      (1) If pixd is null, a new pix is made.
+ *      (2) If pixd is not null, it must be of equal width and height
+ *          as pixs.  It is always returned.
+ *      (3) A simple unpacking might use val0 = 0 and val1 = 15, or v.v.
+ *      (4) If you want a colormapped pixd, use pixConvert1To4Cmap().
+ * 
+ */ +PIX * +pixConvert1To4(PIX *pixd, + PIX *pixs, + l_int32 val0, + l_int32 val1) +{ +l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; +l_uint8 val[2]; +l_uint32 index; +l_uint32 *tab, *datas, *datad, *lines, *lined; + + PROCNAME("pixConvert1To4"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); + if (pixGetDepth(pixd) != 4) + return (PIX *)ERROR_PTR("pixd not 4 bpp", procName, pixd); + } else { + if ((pixd = pixCreate(w, h, 4)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Use a table to convert 8 src bits to 32 bit dest word */ + tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + val[0] = val0; + val[1] = val1; + for (index = 0; index < 256; index++) { + tab[index] = (val[(index >> 7) & 1] << 28) | + (val[(index >> 6) & 1] << 24) | + (val[(index >> 5) & 1] << 20) | + (val[(index >> 4) & 1] << 16) | + (val[(index >> 3) & 1] << 12) | + (val[(index >> 2) & 1] << 8) | + (val[(index >> 1) & 1] << 4) | val[index & 1]; + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + nbytes = (w + 7) / 8; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < nbytes; j++) { + byteval = GET_DATA_BYTE(lines, j); + lined[j] = tab[byteval]; + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion from 1, 2 and 4 bpp to 8 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert1To8Cmap() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, cmapped + * + *
+ * Notes:
+ *      (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0)
+ * 
+ */ +PIX * +pixConvert1To8Cmap(PIX *pixs) +{ +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvert1To8Cmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + if ((pixd = pixConvert1To8(NULL, pixs, 0, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + cmap = pixcmapCreate(8); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixSetColormap(pixd, cmap); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixConvert1To8() + * + * \param[in] pixd [optional] 8 bpp, can be null + * \param[in] pixs 1 bpp + * \param[in] val0 8 bit value to be used for 0s in pixs + * \param[in] val1 8 bit value to be used for 1s in pixs + * \return pixd 8 bpp + * + *
+ * Notes:
+ *      (1) If pixd is null, a new pix is made.
+ *      (2) If pixd is not null, it must be of equal width and height
+ *          as pixs.  It is always returned.
+ *      (3) A simple unpacking might use val0 = 0 and val1 = 255, or v.v.
+ *      (4) To have a colormap associated with the 8 bpp pixd,
+ *          use pixConvert1To8Cmap().
+ * 
+ */ +PIX * +pixConvert1To8(PIX *pixd, + PIX *pixs, + l_uint8 val0, + l_uint8 val1) +{ +l_int32 w, h, i, j, qbit, nqbits, wpls, wpld; +l_uint8 val[2]; +l_uint32 index; +l_uint32 *tab, *datas, *datad, *lines, *lined; + + PROCNAME("pixConvert1To8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); + + pixGetDimensions(pixs, &w, &h, NULL); + if (pixd) { + if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) + return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); + if (pixGetDepth(pixd) != 8) + return (PIX *)ERROR_PTR("pixd not 8 bpp", procName, pixd); + } else { + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixSetPadBits(pixs, 0); + + /* Use a table to convert 4 src bits at a time */ + tab = (l_uint32 *)LEPT_CALLOC(16, sizeof(l_uint32)); + val[0] = val0; + val[1] = val1; + for (index = 0; index < 16; index++) { + tab[index] = ((l_uint32)val[(index >> 3) & 1] << 24) | + (val[(index >> 2) & 1] << 16) | + (val[(index >> 1) & 1] << 8) | val[index & 1]; + } + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + nqbits = (w + 3) / 4; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < nqbits; j++) { + qbit = GET_DATA_QBIT(lines, j); + lined[j] = tab[qbit]; + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*! + * \brief pixConvert2To8() + * + * \param[in] pixs 2 bpp + * \param[in] val0 8 bit value to be used for 00 in pixs + * \param[in] val1 8 bit value to be used for 01 in pixs + * \param[in] val2 8 bit value to be used for 10 in pixs + * \param[in] val3 8 bit value to be used for 11 in pixs + * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      ~ A simple unpacking might use val0 = 0,
+ *        val1 = 85 (0x55), val2 = 170 (0xaa), val3 = 255.
+ *      ~ If cmapflag is TRUE:
+ *          ~ The 8 bpp image is made with a colormap.
+ *          ~ If pixs has a colormap, the input values are ignored and
+ *            the 8 bpp image is made using the colormap
+ *          ~ If pixs does not have a colormap, the input values are
+ *            used to build the colormap.
+ *      ~ If cmapflag is FALSE:
+ *          ~ The 8 bpp image is made without a colormap.
+ *          ~ If pixs has a colormap, the input values are ignored,
+ *            the colormap is removed, and the values stored in the 8 bpp
+ *            image are from the colormap.
+ *          ~ If pixs does not have a colormap, the input values are
+ *            used to populate the 8 bpp image.
+ * 
+ */ +PIX * +pixConvert2To8(PIX *pixs, + l_uint8 val0, + l_uint8 val1, + l_uint8 val2, + l_uint8 val3, + l_int32 cmapflag) +{ +l_int32 w, h, i, j, nbytes, wpls, wpld, dibit, byte; +l_uint8 val[4]; +l_uint32 index; +l_uint32 *tab, *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmaps, *cmapd; + + PROCNAME("pixConvert2To8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 2) + return (PIX *)ERROR_PTR("pixs not 2 bpp", procName, NULL); + + cmaps = pixGetColormap(pixs); + if (cmaps && cmapflag == FALSE) + return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSetPadBits(pixs, 0); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + if (cmapflag == TRUE) { /* pixd will have a colormap */ + if (cmaps) { /* use the existing colormap from pixs */ + cmapd = pixcmapConvertTo8(cmaps); + } else { /* make a colormap from the input values */ + cmapd = pixcmapCreate(8); + pixcmapAddColor(cmapd, val0, val0, val0); + pixcmapAddColor(cmapd, val1, val1, val1); + pixcmapAddColor(cmapd, val2, val2, val2); + pixcmapAddColor(cmapd, val3, val3, val3); + } + pixSetColormap(pixd, cmapd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + dibit = GET_DATA_DIBIT(lines, j); + SET_DATA_BYTE(lined, j, dibit); + } + } + return pixd; + } + + /* Last case: no colormap in either pixs or pixd. + * Use input values and build a table to convert 1 src byte + * (4 src pixels) at a time */ + tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + val[0] = val0; + val[1] = val1; + val[2] = val2; + val[3] = val3; + for (index = 0; index < 256; index++) { + tab[index] = (val[(index >> 6) & 3] << 24) | + (val[(index >> 4) & 3] << 16) | + (val[(index >> 2) & 3] << 8) | val[index & 3]; + } + + nbytes = (w + 3) / 4; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < nbytes; j++) { + byte = GET_DATA_BYTE(lines, j); + lined[j] = tab[byte]; + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*! + * \brief pixConvert4To8() + * + * \param[in] pixs 4 bpp + * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      ~ If cmapflag is TRUE:
+ *          ~ pixd is made with a colormap.
+ *          ~ If pixs has a colormap, it is copied and the colormap
+ *            index values are placed in pixd.
+ *          ~ If pixs does not have a colormap, a colormap with linear
+ *            trc is built and the pixel values in pixs are placed in
+ *            pixd as colormap index values.
+ *      ~ If cmapflag is FALSE:
+ *          ~ pixd is made without a colormap.
+ *          ~ If pixs has a colormap, it is removed and the values stored
+ *            in pixd are from the colormap (converted to gray).
+ *          ~ If pixs does not have a colormap, the pixel values in pixs
+ *            are used, with shift replication, to populate pixd.
+ * 
+ */ +PIX * +pixConvert4To8(PIX *pixs, + l_int32 cmapflag) +{ +l_int32 w, h, i, j, wpls, wpld, byte, qbit; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmaps, *cmapd; + + PROCNAME("pixConvert4To8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 4) + return (PIX *)ERROR_PTR("pixs not 4 bpp", procName, NULL); + + cmaps = pixGetColormap(pixs); + if (cmaps && cmapflag == FALSE) + return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + if (cmapflag == TRUE) { /* pixd will have a colormap */ + if (cmaps) { /* use the existing colormap from pixs */ + cmapd = pixcmapConvertTo8(cmaps); + } else { /* make a colormap with a linear trc */ + cmapd = pixcmapCreate(8); + for (i = 0; i < 16; i++) + pixcmapAddColor(cmapd, 17 * i, 17 * i, 17 * i); + } + pixSetColormap(pixd, cmapd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + qbit = GET_DATA_QBIT(lines, j); + SET_DATA_BYTE(lined, j, qbit); + } + } + return pixd; + } + + /* Last case: no colormap in either pixs or pixd. + * Replicate the qbit value into 8 bits. */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + qbit = GET_DATA_QBIT(lines, j); + byte = (qbit << 4) | qbit; + SET_DATA_BYTE(lined, j, byte); + } + } + return pixd; +} + + + +/*---------------------------------------------------------------------------* + * Unpacking conversion from 8 bpp to 16 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert8To16() + * + * \param[in] pixs 8 bpp; colormap removed to gray + * \param[in] leftshift number of bits: 0 is no shift; + * 8 replicates in MSB and LSB of dest + * \return pixd 16 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) For left shift of 8, the 8 bit value is replicated in both
+ *          the MSB and the LSB of the pixels in pixd.  That way, we get
+ *          proportional mapping, with a correct map from 8 bpp white
+ *          (0xff) to 16 bpp white (0xffff).
+ * 
+ */ +PIX * +pixConvert8To16(PIX *pixs, + l_int32 leftshift) +{ +l_int32 i, j, w, h, d, wplt, wpld, val; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixConvert8To16"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (leftshift < 0 || leftshift > 8) + return (PIX *)ERROR_PTR("leftshift not in [0 ... 8]", procName, NULL); + + if (pixGetColormap(pixs) != NULL) + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + else + pixt = pixClone(pixs); + + pixd = pixCreate(w, h, 16); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datat = pixGetData(pixt); + datad = pixGetData(pixd); + wplt = pixGetWpl(pixt); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(linet, j); + if (leftshift == 8) + val = val | (val << leftshift); + else + val <<= leftshift; + SET_DATA_TWO_BYTES(lined, j, val); + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 2 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo2() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp; colormap OK but will be removed + * \return pixd 2 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, with simple default values
+ *          used in pixConvertTo8() if unpacking is necessary.
+ *      (2) Any existing colormap is removed; the result is always gray.
+ *      (3) If the input image has 2 bpp and no colormap, the operation is
+ *          lossless and a copy is returned.
+ * 
+ */ +PIX * +pixConvertTo2(PIX *pixs) +{ +l_int32 d; +PIX *pix1, *pix2, *pix3, *pixd; + + PROCNAME("pixConvertTo2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,32}", procName, NULL); + + if (pixGetColormap(pixs) != NULL) { + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + d = pixGetDepth(pix1); + } else { + pix1 = pixCopy(NULL, pixs); + } + if (d == 32) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixDestroy(&pix1); + if (d == 1) { + pixd = pixConvert1To2(NULL, pix2, 3, 0); + } else if (d == 2) { + pixd = pixClone(pix2); + } else if (d == 4) { + pix3 = pixConvert4To8(pix2, FALSE); /* unpack to 8 */ + pixd = pixConvert8To2(pix3); + pixDestroy(&pix3); + } else { /* d == 8 */ + pixd = pixConvert8To2(pix2); + } + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief pixConvert8To2() + * + * \param[in] pix 8 bpp; colormap OK + * \return pixd 2 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Any existing colormap is removed to gray.
+ * 
+ */ +PIX * +pixConvert8To2(PIX *pix) +{ +l_int32 i, j, w, h, wpls, wpld; +l_uint32 word; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixs, *pixd; + + PROCNAME("pixConvert8To2"); + + if (!pix || pixGetDepth(pix) != 8) + return (PIX *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); + + if (pixGetColormap(pix) != NULL) + pixs = pixRemoveColormap(pix, REMOVE_CMAP_TO_GRAYSCALE); + else + pixs = pixClone(pix); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreate(w, h, 2); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wpls; j++) { /* march through 4 pixels at a time */ + word = lines[j] & 0xc0c0c0c0; /* top 2 bits of each byte */ + word = (word >> 24) | ((word & 0xff0000) >> 18) | + ((word & 0xff00) >> 12) | ((word & 0xff) >> 6); + SET_DATA_BYTE(lined, j, word); /* only LS byte is filled */ + } + } + pixDestroy(&pixs); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 4 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo4() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp; colormap OK but will be removed + * \return pixd 4 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, with simple default values
+ *          used in pixConvertTo8() if unpacking is necessary.
+ *      (2) Any existing colormap is removed; the result is always gray.
+ *      (3) If the input image has 4 bpp and no colormap, the operation is
+ *          lossless and a copy is returned.
+ * 
+ */ +PIX * +pixConvertTo4(PIX *pixs) +{ +l_int32 d; +PIX *pix1, *pix2, *pix3, *pixd; + + PROCNAME("pixConvertTo4"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,32}", procName, NULL); + + if (pixGetColormap(pixs) != NULL) { + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + d = pixGetDepth(pix1); + } else { + pix1 = pixCopy(NULL, pixs); + } + if (d == 32) + pix2 = pixConvertTo8(pix1, FALSE); + else + pix2 = pixClone(pix1); + pixDestroy(&pix1); + if (d == 1) { + pixd = pixConvert1To4(NULL, pix2, 15, 0); + } else if (d == 2) { + pix3 = pixConvert2To8(pix2, 0, 0x55, 0xaa, 0xff, FALSE); + pixd = pixConvert8To4(pix3); + pixDestroy(&pix3); + } else if (d == 4) { + pixd = pixClone(pix2); + } else { /* d == 8 */ + pixd = pixConvert8To4(pix2); + } + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief pixConvert8To4() + * + * \param[in] pix 8 bpp; colormap OK + * \return pixd 4 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Any existing colormap is removed to gray.
+ * 
+ */ +PIX * +pixConvert8To4(PIX *pix) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixs, *pixd; + + PROCNAME("pixConvert8To4"); + + if (!pix || pixGetDepth(pix) != 8) + return (PIX *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); + + if (pixGetColormap(pix) != NULL) + pixs = pixRemoveColormap(pix, REMOVE_CMAP_TO_GRAYSCALE); + else + pixs = pixClone(pix); + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreate(w, h, 4); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + val = val >> 4; /* take top 4 bits */ + SET_DATA_QBIT(lined, j, val); + } + } + pixDestroy(&pixs); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 1 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo1Adaptive() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, that uses default values for
+ *          adaptive thresholding, if necessary.  Otherwise, it is the same as
+ *          pixConvertTo1(), which uses a global threshold for binarization.
+ * 
+ */ +PIX * +pixConvertTo1Adaptive(PIX *pixs) +{ +l_int32 d, color0, color1, rval, gval, bval; +PIX *pix1, *pix2, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertTo1Adaptive"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); + + cmap = pixGetColormap(pixs); + if (d == 1) { + if (!cmap) { + return pixCopy(NULL, pixs); + } else { /* strip the colormap off, and invert if reasonable + for standard binary photometry. */ + pixcmapGetColor(cmap, 0, &rval, &gval, &bval); + color0 = rval + gval + bval; + pixcmapGetColor(cmap, 1, &rval, &gval, &bval); + color1 = rval + gval + bval; + pixd = pixCopy(NULL, pixs); + pixDestroyColormap(pixd); + if (color1 > color0) + pixInvert(pixd, pixd); + return pixd; + } + } + + /* For all other depths, use 8 bpp as an intermediary */ + pix1 = pixConvertTo8(pixs, FALSE); + pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); + pixd = pixThresholdToBinary(pix2, 180); + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief pixConvertTo1() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] threshold for final binarization, relative to 8 bpp + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, with simple default values
+ *          used in pixConvertTo8() if unpacking is necessary.
+ *      (2) Any existing colormap is removed.
+ *      (3) If the input image has 1 bpp and no colormap, the operation is
+ *          lossless and a copy is returned.
+ * 
+ */ +PIX * +pixConvertTo1(PIX *pixs, + l_int32 threshold) +{ +l_int32 d, color0, color1, rval, gval, bval; +PIX *pixg, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertTo1"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); + + cmap = pixGetColormap(pixs); + if (d == 1) { + if (!cmap) { + return pixCopy(NULL, pixs); + } else { /* strip the colormap off, and invert if reasonable + for standard binary photometry. */ + pixcmapGetColor(cmap, 0, &rval, &gval, &bval); + color0 = rval + gval + bval; + pixcmapGetColor(cmap, 1, &rval, &gval, &bval); + color1 = rval + gval + bval; + pixd = pixCopy(NULL, pixs); + pixDestroyColormap(pixd); + if (color1 > color0) + pixInvert(pixd, pixd); + return pixd; + } + } + + /* For all other depths, use 8 bpp as an intermediary */ + pixg = pixConvertTo8(pixs, FALSE); + pixd = pixThresholdToBinary(pixg, threshold); + pixDestroy(&pixg); + return pixd; +} + + +/*! + * \brief pixConvertTo1BySampling() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] factor submsampling factor; integer >= 1 + * \param[in] threshold for final binarization, relative to 8 bpp + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a quick and dirty, top-level converter.
+ *      (2) See pixConvertTo1() for default values.
+ * 
+ */ +PIX * +pixConvertTo1BySampling(PIX *pixs, + l_int32 factor, + l_int32 threshold) +{ +l_float32 scalefactor; +PIX *pixt, *pixd; + + PROCNAME("pixConvertTo1BySampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + + scalefactor = 1. / (l_float32)factor; + pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); + pixd = pixConvertTo1(pixt, threshold); + + pixDestroy(&pixt); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 8 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo8() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, with simple default values
+ *          for unpacking.
+ *      (2) The result, pixd, is made with a colormap if specified.
+ *          It is always a new image -- never a clone.  For example,
+ *          if d == 8, and cmapflag matches the existence of a cmap
+ *          in pixs, the operation is lossless and it returns a copy.
+ *      (3) The default values used are:
+ *          ~ 1 bpp: val0 = 255, val1 = 0
+ *          ~ 2 bpp: 4 bpp:  even increments over dynamic range
+ *          ~ 8 bpp: lossless if cmap matches cmapflag
+ *          ~ 16 bpp: use most significant byte
+ *      (4) If 32 bpp RGB, this is converted to gray.  If you want
+ *          to do color quantization, you must specify the type
+ *          explicitly, using the color quantization code.
+ * 
+ */ +PIX * +pixConvertTo8(PIX *pixs, + l_int32 cmapflag) +{ +l_int32 d; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertTo8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); + + if (d == 1) { + if (cmapflag) + return pixConvert1To8Cmap(pixs); + else + return pixConvert1To8(NULL, pixs, 255, 0); + } else if (d == 2) { + return pixConvert2To8(pixs, 0, 85, 170, 255, cmapflag); + } else if (d == 4) { + return pixConvert4To8(pixs, cmapflag); + } else if (d == 8) { + cmap = pixGetColormap(pixs); + if ((cmap && cmapflag) || (!cmap && !cmapflag)) { + return pixCopy(NULL, pixs); + } else if (cmap) { /* !cmapflag */ + return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + } else { /* !cmap && cmapflag; add colormap to pixd */ + pixd = pixCopy(NULL, pixs); + pixAddGrayColormap8(pixd); + return pixd; + } + } else if (d == 16) { + pixd = pixConvert16To8(pixs, L_MS_BYTE); + if (cmapflag) + pixAddGrayColormap8(pixd); + return pixd; + } else { /* d == 32 */ + pixd = pixConvertRGBToLuminance(pixs); + if (cmapflag) + pixAddGrayColormap8(pixd); + return pixd; + } +} + + +/*! + * \brief pixConvertTo8BySampling() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] factor submsampling factor; integer >= 1 + * \param[in] cmapflag TRUE if pixd is to have a colormap; FALSE otherwise + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a fast, quick/dirty, top-level converter.
+ *      (2) See pixConvertTo8() for default values.
+ * 
+ */ +PIX * +pixConvertTo8BySampling(PIX *pixs, + l_int32 factor, + l_int32 cmapflag) +{ +l_float32 scalefactor; +PIX *pixt, *pixd; + + PROCNAME("pixConvertTo8BySampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + + scalefactor = 1. / (l_float32)factor; + pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); + pixd = pixConvertTo8(pixt, cmapflag); + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixConvertTo8Colormap() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] dither 1 to dither if necessary; 0 otherwise + * \return pixd 8 bpp, cmapped, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a top-level function, with simple default values
+ *          for unpacking.
+ *      (2) The result, pixd, is always made with a colormap.
+ *      (3) If d == 8, the operation is lossless and it returns a copy.
+ *      (4) The default values used for increasing depth are:
+ *          ~ 1 bpp: val0 = 255, val1 = 0
+ *          ~ 2 bpp: 4 bpp:  even increments over dynamic range
+ *      (5) For 16 bpp, use the most significant byte.
+ *      (6) For 32 bpp RGB, use octcube quantization with optional dithering.
+ * 
+ */ +PIX * +pixConvertTo8Colormap(PIX *pixs, + l_int32 dither) +{ +l_int32 d; + + PROCNAME("pixConvertTo8Colormap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); + + if (d != 32) + return pixConvertTo8(pixs, 1); + + return pixConvertRGBToColormap(pixs, dither); +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 16 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo16() + * + * \param[in] pixs 1, 8 bpp + * \return pixd 16 bpp, or NULL on error + * + * Usage: Top-level function, with simple default values for unpacking. + * 1 bpp: val0 = 0xffff, val1 = 0 + * 8 bpp: replicates the 8 bit value in both the MSB and LSB + * of the 16 bit pixel. + */ +PIX * +pixConvertTo16(PIX *pixs) +{ +l_int32 d; + + PROCNAME("pixConvertTo16"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + d = pixGetDepth(pixs); + if (d == 1) + return pixConvert1To16(NULL, pixs, 0xffff, 0); + else if (d == 8) + return pixConvert8To16(pixs, 8); + else + return (PIX *)ERROR_PTR("src depth not 1 or 8 bpp", procName, NULL); +} + + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 32 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo32() + * + * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp + * \return pixd 32 bpp, or NULL on error + * + * Usage: Top-level function, with simple default values for unpacking. + * 1 bpp: val0 = 255, val1 = 0 + * and then replication into R, G and B components + * 2 bpp: if colormapped, use the colormap values; otherwise, + * use val0 = 0, val1 = 0x55, val2 = 0xaa, val3 = 255 + * and replicate gray into R, G and B components + * 4 bpp: if colormapped, use the colormap values; otherwise, + * replicate 2 nybs into a byte, and then into R,G,B components + * 8 bpp: if colormapped, use the colormap values; otherwise, + * replicate gray values into R, G and B components + * 16 bpp: replicate MSB into R, G and B components + * 24 bpp: unpack the pixels, maintaining word alignment on each scanline + * 32 bpp: makes a copy + * + *
+ * Notes:
+ *      (1) Never returns a clone of pixs.
+ * 
+ */ +PIX * +pixConvertTo32(PIX *pixs) +{ +l_int32 d; +PIX *pix1, *pixd; + + PROCNAME("pixConvertTo32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + d = pixGetDepth(pixs); + if (d == 1) { + return pixConvert1To32(NULL, pixs, 0xffffffff, 0); + } else if (d == 2) { + pix1 = pixConvert2To8(pixs, 0, 85, 170, 255, TRUE); + pixd = pixConvert8To32(pix1); + pixDestroy(&pix1); + return pixd; + } else if (d == 4) { + pix1 = pixConvert4To8(pixs, TRUE); + pixd = pixConvert8To32(pix1); + pixDestroy(&pix1); + return pixd; + } else if (d == 8) { + return pixConvert8To32(pixs); + } else if (d == 16) { + pix1 = pixConvert16To8(pixs, L_MS_BYTE); + pixd = pixConvert8To32(pix1); + pixDestroy(&pix1); + return pixd; + } else if (d == 24) { + return pixConvert24To32(pixs); + } else if (d == 32) { + return pixCopy(NULL, pixs); + } else { + return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8, 16, 32 bpp", + procName, NULL); + } +} + + +/*! + * \brief pixConvertTo32BySampling() + * + * \param[in] pixs 1, 2, 4, 8, 16, 24 or 32 bpp + * \param[in] factor submsampling factor; integer >= 1 + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a fast, quick/dirty, top-level converter.
+ *      (2) See pixConvertTo32() for default values.
+ * 
+ */ +PIX * +pixConvertTo32BySampling(PIX *pixs, + l_int32 factor) +{ +l_float32 scalefactor; +PIX *pix1, *pixd; + + PROCNAME("pixConvertTo32BySampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + + scalefactor = 1. / (l_float32)factor; + pix1 = pixScaleBySampling(pixs, scalefactor, scalefactor); + pixd = pixConvertTo32(pix1); + + pixDestroy(&pix1); + return pixd; +} + + +/*! + * \brief pixConvert8To32() + * + * \param[in] pixs 8 bpp + * \return 32 bpp rgb pix, or NULL on error + * + *
+ * Notes:
+ *      (1) If there is no colormap, replicates the gray value
+ *          into the 3 MSB of the dest pixel.
+ * 
+ */ +PIX * +pixConvert8To32(PIX *pixs) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lines, *lined; +l_uint32 *tab; +PIX *pixd; + + PROCNAME("pixConvert8To32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + if (pixGetColormap(pixs)) + return pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(w, h, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Replication table gray --> rgb */ + tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32)); + for (i = 0; i < 256; i++) + tab[i] = (i << 24) | (i << 16) | (i << 8); + + /* Replicate 1 --> 4 bytes (alpha byte not set) */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(lines, j); + lined[j] = tab[val]; + } + } + + LEPT_FREE(tab); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Top-level conversion to 8 or 32 bpp, without colormap * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertTo8Or32() + * + * \param[in] pixs 1, 2, 4, 8, 16, with or without colormap; + * or 32 bpp rgb + * \param[in] copyflag L_CLONE or L_COPY + * \param[in] warnflag 1 to issue warning if colormap is removed; else 0 + * \return pixd 8 bpp grayscale or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, the colormap is removed to 8 or 32 bpp,
+ *          depending on whether the colors in the colormap are all gray.
+ *      (2) If the input is either rgb or 8 bpp without a colormap,
+ *          this returns either a clone or a copy, depending on %copyflag.
+ *      (3) Otherwise, the pix is converted to 8 bpp grayscale.
+ *          In all cases, pixd does not have a colormap.
+ * 
+ */ +PIX * +pixConvertTo8Or32(PIX *pixs, + l_int32 copyflag, + l_int32 warnflag) +{ +l_int32 d; +PIX *pixd; + + PROCNAME("pixConvertTo8Or32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (copyflag != L_CLONE && copyflag != L_COPY) + return (PIX *)ERROR_PTR("invalid copyflag", procName, NULL); + + d = pixGetDepth(pixs); + if (pixGetColormap(pixs)) { + if (warnflag) L_WARNING("pix has colormap; removing\n", procName); + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + } else if (d == 8 || d == 32) { + if (copyflag == L_CLONE) + pixd = pixClone(pixs); + else /* copyflag == L_COPY */ + pixd = pixCopy(NULL, pixs); + } else { + pixd = pixConvertTo8(pixs, 0); + } + + /* Sanity check on result */ + d = pixGetDepth(pixd); + if (d != 8 && d != 32) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion between 24 bpp and 32 bpp rgb * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert24To32() + * + * \param[in] pixs 24 bpp rgb + * \return pixd 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) 24 bpp rgb pix are not supported in leptonica, except for a small
+ *          number of formatted write operations.  The data is a byte array,
+ *          with pixels in order r,g,b, and padded to 32 bit boundaries
+ *          in each line.
+ *      (2) Because 24 bpp rgb pix are conveniently generated by programs
+ *          such as xpdf (which has SplashBitmaps that store the raster
+ *          data in consecutive 24-bit rgb pixels), it is useful to provide
+ *          24 bpp pix that simply incorporate that data.  The only things
+ *          we can do with these are:
+ *            (a) write them to file in png, jpeg, tiff and pnm
+ *            (b) interconvert between 24 and 32 bpp in memory (for testing).
+ * 
+ */ +PIX * +pixConvert24To32(PIX *pixs) +{ +l_uint8 *lines; +l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; +l_uint32 pixel; +l_uint32 *datas, *datad, *lined; +PIX *pixd; + + PROCNAME("pixConvert24to32"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 24) + return (PIX *)ERROR_PTR("pixs not 24 bpp", procName, NULL); + + pixd = pixCreateNoInit(w, h, 32); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = (l_uint8 *)(datas + i * wpls); + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + rval = *lines++; + gval = *lines++; + bval = *lines++; + composeRGBPixel(rval, gval, bval, &pixel); + lined[j] = pixel; + } + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixConvert32To24() + * + * \param[in] pixs 32 bpp rgb + * \return pixd 24 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixconvert24To32().
+ * 
+ */ +PIX * +pixConvert32To24(PIX *pixs) +{ +l_uint8 *rgbdata8; +l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; +l_uint32 *datas, *lines, *rgbdata; +PIX *pixd; + + PROCNAME("pixConvert32to24"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateNoInit(w, h, 24); + rgbdata = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + rgbdata8 = (l_uint8 *)(rgbdata + i * wpld); + for (j = 0; j < w; j++) { + extractRGBValues(lines[j], &rval, &gval, &bval); + *rgbdata8++ = rval; + *rgbdata8++ = gval; + *rgbdata8++ = bval; + } + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion between 32 bpp (1 spp) and 16 or 8 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvert32To16() + * + * \param[in] pixs 32 bpp, single component + * \param[in] type L_LS_TWO_BYTES, L_MS_TWO_BYTES, L_CLIP_TO_FFFF + * \return pixd 16 bpp , or NULL on error + * + *
+ * Notes:
+ *      (1) The data in pixs is typically used for labelling.
+ *          It is an array of l_uint32 values, not rgb or rgba.
+ * 
+ */ +PIX * +pixConvert32To16(PIX *pixs, + l_int32 type) +{ +l_uint16 dword; +l_int32 w, h, i, j, wpls, wpld; +l_uint32 sword; +l_uint32 *datas, *lines, *datad, *lined; +PIX *pixd; + + PROCNAME("pixConvert32to16"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (type != L_LS_TWO_BYTES && type != L_MS_TWO_BYTES && + type != L_CLIP_TO_FFFF) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, 16)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + if (type == L_LS_TWO_BYTES) { + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + dword = sword & 0xffff; + SET_DATA_TWO_BYTES(lined, j, dword); + } + } else if (type == L_MS_TWO_BYTES) { + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + dword = sword >> 16; + SET_DATA_TWO_BYTES(lined, j, dword); + } + } else { /* type == L_CLIP_TO_FFFF */ + for (j = 0; j < wpls; j++) { + sword = *(lines + j); + dword = (sword >> 16) ? 0xffff : (sword & 0xffff); + SET_DATA_TWO_BYTES(lined, j, dword); + } + } + } + + return pixd; +} + + +/*! + * \brief pixConvert32To8() + * + * \param[in] pixs 32 bpp, single component + * \param[in] type16 L_LS_TWO_BYTES, L_MS_TWO_BYTES, L_CLIP_TO_FFFF + * \param[in] type8 L_LS_BYTE, L_MS_BYTE, L_CLIP_TO_FF + * \return pixd 8 bpp, or NULL on error + */ +PIX * +pixConvert32To8(PIX *pixs, + l_int32 type16, + l_int32 type8) +{ +PIX *pix1, *pixd; + + PROCNAME("pixConvert32to8"); + + if (!pixs || pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + if (type16 != L_LS_TWO_BYTES && type16 != L_MS_TWO_BYTES && + type16 != L_CLIP_TO_FFFF) + return (PIX *)ERROR_PTR("invalid type16", procName, NULL); + if (type8 != L_LS_BYTE && type8 != L_MS_BYTE && type8 != L_CLIP_TO_FF) + return (PIX *)ERROR_PTR("invalid type8", procName, NULL); + + pix1 = pixConvert32To16(pixs, type16); + pixd = pixConvert16To8(pix1, type8); + pixDestroy(&pix1); + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Removal of alpha component by blending with white background * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixRemoveAlpha() + * + * \param[in] pixs any depth + * \return pixd if 32 bpp rgba, pixs blended over a white background; + * a clone of pixs otherwise, and NULL on error + * + *
+ * Notes:
+ *      (1) This is a wrapper on pixAlphaBlendUniform()
+ * 
+ */ +PIX * +pixRemoveAlpha(PIX *pixs) +{ + PROCNAME("pixRemoveAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) + return pixAlphaBlendUniform(pixs, 0xffffff00); + else + return pixClone(pixs); +} + + +/*---------------------------------------------------------------------------* + * Addition of alpha component to 1 bpp * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixAddAlphaTo1bpp() + * + * \param[in] pixd [optional] 1 bpp, can be null or equal to pixs + * \param[in] pixs 1 bpp + * \return pixd 1 bpp with colormap and non-opaque alpha, + * or NULL on error + * + *
+ * Notes:
+ *      (1) We don't use 1 bpp colormapped images with alpha in leptonica,
+ *          but we support generating them (here), writing to png, and reading
+ *          the png.  On reading, they are converted to 32 bpp RGBA.
+ *      (2) The background (0) pixels in pixs become fully transparent, and the
+ *          foreground (1) pixels are fully opaque.  Thus, pixd is a 1 bpp
+ *          representation of a stencil, that can be used to paint over pixels
+ *          of a backing image that are masked by the foreground in pixs.
+ * 
+ */ +PIX * +pixAddAlphaTo1bpp(PIX *pixd, + PIX *pixs) +{ +PIXCMAP *cmap; + + PROCNAME("pixAddAlphaTo1bpp"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (pixd && (pixd != pixs)) + return (PIX *)ERROR_PTR("pixd defined but != pixs", procName, NULL); + + pixd = pixCopy(pixd, pixs); + cmap = pixcmapCreate(1); + pixSetColormap(pixd, cmap); + pixcmapAddRGBA(cmap, 255, 255, 255, 0); /* 0 ==> white + transparent */ + pixcmapAddRGBA(cmap, 0, 0, 0, 255); /* 1 ==> black + opaque */ + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Lossless depth conversion (unpacking) * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertLossless() + * + * \param[in] pixs 1, 2, 4, 8 bpp, not cmapped + * \param[in] d destination depth: 2, 4 or 8 + * \return pixd 2, 4 or 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a lossless unpacking (depth-increasing)
+ *          conversion.  If ds is the depth of pixs, then
+ *           ~ if d < ds, returns NULL
+ *           ~ if d == ds, returns a copy
+ *           ~ if d > ds, does the unpacking conversion
+ *      (2) If pixs has a colormap, this is an error.
+ * 
+ */ +PIX * +pixConvertLossless(PIX *pixs, + l_int32 d) +{ +l_int32 w, h, ds, wpls, wpld, i, j, val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixConvertLossless"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + if (d != 2 && d != 4 && d != 8) + return (PIX *)ERROR_PTR("invalid dest depth", procName, NULL); + + pixGetDimensions(pixs, &w, &h, &ds); + if (d < ds) + return (PIX *)ERROR_PTR("depth > d", procName, NULL); + else if (d == ds) + return pixCopy(NULL, pixs); + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + + /* Unpack the bits */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + switch (ds) + { + case 1: + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(lines, j); + if (d == 8) + SET_DATA_BYTE(lined, j, val); + else if (d == 4) + SET_DATA_QBIT(lined, j, val); + else /* d == 2 */ + SET_DATA_DIBIT(lined, j, val); + } + break; + case 2: + for (j = 0; j < w; j++) { + val = GET_DATA_DIBIT(lines, j); + if (d == 8) + SET_DATA_BYTE(lined, j, val); + else /* d == 4 */ + SET_DATA_QBIT(lined, j, val); + } + break; + case 4: + for (j = 0; j < w; j++) { + val = GET_DATA_DIBIT(lines, j); + SET_DATA_BYTE(lined, j, val); + } + break; + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Conversion for printing in PostScript * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertForPSWrap() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp + * \return pixd 1, 8, or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) For wrapping in PostScript, we convert pixs to
+ *          1 bpp, 8 bpp (gray) and 32 bpp (RGB color).
+ *      (2) Colormaps are removed.  For pixs with colormaps, the
+ *          images are converted to either 8 bpp gray or 32 bpp
+ *          RGB, depending on whether the colormap has color content.
+ *      (3) Images without colormaps, that are not 1 bpp or 32 bpp,
+ *          are converted to 8 bpp gray.
+ * 
+ */ +PIX * +pixConvertForPSWrap(PIX *pixs) +{ +l_int32 d; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertForPSWrap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + cmap = pixGetColormap(pixs); + d = pixGetDepth(pixs); + switch (d) + { + case 1: + case 32: + pixd = pixClone(pixs); + break; + case 2: + if (cmap) + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pixd = pixConvert2To8(pixs, 0, 0x55, 0xaa, 0xff, FALSE); + break; + case 4: + if (cmap) + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pixd = pixConvert4To8(pixs, FALSE); + break; + case 8: + pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + break; + case 16: + pixd = pixConvert16To8(pixs, L_MS_BYTE); + break; + default: + fprintf(stderr, "depth not in {1, 2, 4, 8, 16, 32}"); + return NULL; + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Scaling conversion to subpixel RGB * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixConvertToSubpixelRGB() + * + * \param[in] pixs 8 bpp grayscale, 32 bpp rgb, or colormapped + * \param[in] scalex, scaley anisotropic scaling permitted between + * source and destination + * \param[in] order of subpixel rgb color components in + * composition of pixd: + * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, + * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, it is removed based on its contents
+ *          to either 8 bpp gray or rgb.
+ *      (2) For horizontal subpixel splitting, the input image
+ *          is rescaled by %scaley vertically and by 3.0 times
+ *          %scalex horizontally.  Then each horizontal triplet
+ *          of pixels is mapped back to a single rgb pixel, with the
+ *          r, g and b values being assigned based on the pixel triplet.
+ *          For gray triplets, the r, g, and b values are set equal to
+ *          the three gray values.  For color triplets, the r, g and b
+ *          values are set equal to the components from the appropriate
+ *          subpixel.  Vertical subpixel splitting is handled similarly.
+ *      (3) See pixConvertGrayToSubpixelRGB() and
+ *          pixConvertColorToSubpixelRGB() for further details.
+ * 
+ */ +PIX * +pixConvertToSubpixelRGB(PIX *pixs, + l_float32 scalex, + l_float32 scaley, + l_int32 order) +{ +l_int32 d; +PIX *pix1, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertToSubpixelRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d != 8 && d != 32 && !cmap) + return (PIX *)ERROR_PTR("pix not 8 or 32 bpp and not cmapped", + procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); + if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && + order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) + return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); + if ((pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC)) == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + + d = pixGetDepth(pix1); + pixd = NULL; + if (d == 8) + pixd = pixConvertGrayToSubpixelRGB(pix1, scalex, scaley, order); + else if (d == 32) + pixd = pixConvertColorToSubpixelRGB(pix1, scalex, scaley, order); + else + L_ERROR("invalid depth %d\n", procName, d); + + pixDestroy(&pix1); + return pixd; +} + + +/*! + * \brief pixConvertGrayToSubpixelRGB() + * + * \param[in] pixs 8 bpp or colormapped + * \param[in] scalex, scaley + * \param[in] order of subpixel rgb color components in + * composition of pixd: + * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, + * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, it is removed to 8 bpp.
+ *      (2) For horizontal subpixel splitting, the input gray image
+ *          is rescaled by %scaley vertically and by 3.0 times
+ *          %scalex horizontally.  Then each horizontal triplet
+ *          of pixels is mapped back to a single rgb pixel, with the
+ *          r, g and b values being assigned from the triplet of gray values.
+ *          Similar operations are used for vertical subpixel splitting.
+ *      (3) This is a form of subpixel rendering that tends to give the
+ *          resulting text a sharper and somewhat chromatic display.
+ *          For horizontal subpixel splitting, the observable difference
+ *          between %order=L_SUBPIXEL_ORDER_RGB and
+ *          %order=L_SUBPIXEL_ORDER_BGR is reduced by optical diffusers
+ *          in the display that make the pixel color appear to emerge
+ *          from the entire pixel.
+ * 
+ */ +PIX * +pixConvertGrayToSubpixelRGB(PIX *pixs, + l_float32 scalex, + l_float32 scaley, + l_int32 order) +{ +l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pix1, *pix2, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertGrayToSubpixelRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d != 8 && !cmap) + return (PIX *)ERROR_PTR("pix not 8 bpp & not cmapped", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); + if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && + order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) + return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); + + direction = + (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) + ? L_HORIZ : L_VERT; + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); + if (direction == L_HORIZ) + pix2 = pixScale(pix1, 3.0 * scalex, scaley); + else /* L_VERT */ + pix2 = pixScale(pix1, scalex, 3.0 * scaley); + + pixGetDimensions(pix2, &w, &h, NULL); + wd = (direction == L_HORIZ) ? w / 3 : w; + hd = (direction == L_VERT) ? h / 3 : h; + pixd = pixCreate(wd, hd, 32); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datat = pixGetData(pix2); + wplt = pixGetWpl(pix2); + if (direction == L_HORIZ) { + for (i = 0; i < hd; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + rval = GET_DATA_BYTE(linet, 3 * j); + gval = GET_DATA_BYTE(linet, 3 * j + 1); + bval = GET_DATA_BYTE(linet, 3 * j + 2); + if (order == L_SUBPIXEL_ORDER_RGB) + composeRGBPixel(rval, gval, bval, &lined[j]); + else /* order BGR */ + composeRGBPixel(bval, gval, rval, &lined[j]); + } + } + } else { /* L_VERT */ + for (i = 0; i < hd; i++) { + linet = datat + 3 * i * wplt; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + rval = GET_DATA_BYTE(linet, j); + gval = GET_DATA_BYTE(linet + wplt, j); + bval = GET_DATA_BYTE(linet + 2 * wplt, j); + if (order == L_SUBPIXEL_ORDER_VRGB) + composeRGBPixel(rval, gval, bval, &lined[j]); + else /* order VBGR */ + composeRGBPixel(bval, gval, rval, &lined[j]); + } + } + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief pixConvertColorToSubpixelRGB() + * + * \param[in] pixs 32 bpp or colormapped + * \param[in] scalex, scaley + * \param[in] order of subpixel rgb color components in + * composition of pixd: + * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, + * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) If pixs has a colormap, it is removed to 32 bpp rgb.
+ *          If the colormap has no color, pixConvertGrayToSubpixelRGB()
+ *          should be called instead, because it will give the same result
+ *          more efficiently.  The function pixConvertToSubpixelRGB()
+ *          will do the best thing for all cases.
+ *      (2) For horizontal subpixel splitting, the input rgb image
+ *          is rescaled by %scaley vertically and by 3.0 times
+ *          %scalex horizontally.  Then for each horizontal triplet
+ *          of pixels, the r component of the final pixel is selected
+ *          from the r component of the appropriate pixel in the triplet,
+ *          and likewise for g and b.  Vertical subpixel splitting is
+ *          handled similarly.
+ * 
+ */ +PIX * +pixConvertColorToSubpixelRGB(PIX *pixs, + l_float32 scalex, + l_float32 scaley, + l_int32 order) +{ +l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; +l_uint32 *datat, *datad, *linet, *lined; +PIX *pix1, *pix2, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixConvertColorToSubpixelRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d != 32 && !cmap) + return (PIX *)ERROR_PTR("pix not 32 bpp & not cmapped", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); + if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && + order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) + return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); + + direction = + (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) + ? L_HORIZ : L_VERT; + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); + if (direction == L_HORIZ) + pix2 = pixScale(pix1, 3.0 * scalex, scaley); + else /* L_VERT */ + pix2 = pixScale(pix1, scalex, 3.0 * scaley); + + pixGetDimensions(pix2, &w, &h, NULL); + wd = (direction == L_HORIZ) ? w / 3 : w; + hd = (direction == L_VERT) ? h / 3 : h; + pixd = pixCreate(wd, hd, 32); + pixCopyInputFormat(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + datat = pixGetData(pix2); + wplt = pixGetWpl(pix2); + if (direction == L_HORIZ) { + for (i = 0; i < hd; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + if (order == L_SUBPIXEL_ORDER_RGB) { + extractRGBValues(linet[3 * j], &rval, NULL, NULL); + extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); + extractRGBValues(linet[3 * j + 2], NULL, NULL, &bval); + } else { /* order BGR */ + extractRGBValues(linet[3 * j], NULL, NULL, &bval); + extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); + extractRGBValues(linet[3 * j + 2], &rval, NULL, NULL); + } + composeRGBPixel(rval, gval, bval, &lined[j]); + } + } + } else { /* L_VERT */ + for (i = 0; i < hd; i++) { + linet = datat + 3 * i * wplt; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + if (order == L_SUBPIXEL_ORDER_VRGB) { + extractRGBValues(linet[j], &rval, NULL, NULL); + extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); + extractRGBValues((linet + 2 * wplt)[j], NULL, NULL, &bval); + } else { /* order VBGR */ + extractRGBValues(linet[j], NULL, NULL, &bval); + extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); + extractRGBValues((linet + 2 * wplt)[j], &rval, NULL, NULL); + } + composeRGBPixel(rval, gval, bval, &lined[j]); + } + } + } + + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); + + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + +/*---------------------------------------------------------------------* + * Setting neutral point for min/max boost conversion to gray * + *---------------------------------------------------------------------*/ +/*! + * \brief l_setNeutralBoostVal() + * + * \param[in] val between 1 and 255; typical value is 180 + * \return void + * + *
+ * Notes:
+ *      (1) This raises or lowers the selected min or max RGB component value,
+ *          depending on if that component is above or below this value.
+ * 
+ */ +void +l_setNeutralBoostVal(l_int32 val) +{ + PROCNAME("l_setNeutralBoostVal"); + + if (val <= 0) { + L_ERROR("invalid reference value for neutral boost\n", procName); + return; + } + var_NEUTRAL_BOOST_VAL = val; +} diff --git a/3rdparty/hgOCR/leptonica/pixlabel.c b/3rdparty/hgOCR/leptonica/pixlabel.c new file mode 100644 index 00000000..504ec7d6 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixlabel.c @@ -0,0 +1,633 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pixlabel.c + *
+ *
+ *     Label pixels by an index for connected component membership
+ *           PIX         *pixConnCompTransform()
+ *
+ *     Label pixels by the area of their connected component
+ *           PIX         *pixConnCompAreaTransform()
+ *
+ *     Label pixels to allow incremental computation of connected components
+ *           l_int32      pixConnCompIncrInit()
+ *           l_int32      pixConnCompIncrAdd()
+ *           l_int32      pixGetSortedNeighborValues()
+ *
+ *     Label pixels with spatially-dependent color coding
+ *           PIX         *pixLocToColorTransform()
+ *
+ *  Pixels get labelled in various ways throughout the leptonica library,
+ *  but most of the labelling is implicit, where the new value isn't
+ *  even considered to be a label -- it is just a transformed pixel value
+ *  that may be transformed again by another operation.  Quantization
+ *  by thresholding, and dilation by a structuring element, are examples
+ *  of these typical image processing operations.
+ *
+ *  However, there are some explicit labelling procedures that are useful
+ *  as end-points of analysis, where it typically would not make sense
+ *  to do further image processing on the result.  Assigning false color
+ *  based on pixel properties is an example of such labelling operations.
+ *  Such operations typically have 1 bpp input images, and result
+ *  in grayscale or color images.
+ *
+ *  The procedures in this file are concerned with such explicit labelling.
+ *  Some of these labelling procedures are also in other places in leptonica:
+ *
+ *    runlength.c:
+ *       This file has two labelling transforms based on runlengths:
+ *       pixStrokeWidthTransform() and pixvRunlengthTransform().
+ *       The pixels are labelled based on the width of the "stroke" to
+ *       which they belong, or on the length of the horizontal or
+ *       vertical run in which they are a member.  Runlengths can easily
+ *       be filtered using a threshold.
+ *
+ *    pixafunc2.c:
+ *       This file has an operation, pixaDisplayRandomCmap(), that
+ *       randomly labels pix in a pixa (that are typically found using
+ *       pixConnComp) with up to 256 values, and assigns each value to
+ *       a random colormap color.
+ *
+ *    seedfill.c:
+ *       This file has pixDistanceFunction(), that labels each pixel with
+ *       its distance from either the foreground or the background.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +/*-----------------------------------------------------------------------* + * Label pixels by an index for connected component membership * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixConnCompTransform() + * + * \param[in] pixs 1 bpp + * \param[in] connect connectivity: 4 or 8 + * \param[in] depth of pixd: 8 or 16 bpp; use 0 for auto determination + * \return pixd 8, 16 or 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) pixd is 8, 16 or 32 bpp, and the pixel values label the
+ *          fg component, starting with 1.  Pixels in the bg are labelled 0.
+ *      (2) If %depth = 0, the depth of pixd is 8 if the number of c.c.
+ *          is less than 254, 16 if the number of c.c is less than 0xfffe,
+ *          and 32 otherwise.
+ *      (3) If %depth = 8, the assigned label for the n-th component is
+ *          1 + n % 254.  We use mod 254 because 0 is uniquely assigned
+ *          to black: e.g., see pixcmapCreateRandom().  Likewise,
+ *          if %depth = 16, the assigned label uses mod(2^16 - 2), and
+ *          if %depth = 32, no mod is taken.
+ * 
+ */ +PIX * +pixConnCompTransform(PIX *pixs, + l_int32 connect, + l_int32 depth) +{ +l_int32 i, n, index, w, h, xb, yb, wb, hb; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixa; + + PROCNAME("pixConnCompTransform"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connect != 4 && connect != 8) + return (PIX *)ERROR_PTR("connectivity must be 4 or 8", procName, NULL); + if (depth != 0 && depth != 8 && depth != 16 && depth != 32) + return (PIX *)ERROR_PTR("depth must be 0, 8, 16 or 32", procName, NULL); + + boxa = pixConnComp(pixs, &pixa, connect); + n = pixaGetCount(pixa); + boxaDestroy(&boxa); + pixGetDimensions(pixs, &w, &h, NULL); + if (depth == 0) { + if (n < 254) + depth = 8; + else if (n < 0xfffe) + depth = 16; + else + depth = 32; + } + pixd = pixCreate(w, h, depth); + pixSetSpp(pixd, 1); + if (n == 0) { /* no fg */ + pixaDestroy(&pixa); + return pixd; + } + + /* Label each component and blit it in */ + for (i = 0; i < n; i++) { + pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); + pix1 = pixaGetPix(pixa, i, L_CLONE); + if (depth == 8) { + index = 1 + (i % 254); + pix2 = pixConvert1To8(NULL, pix1, 0, index); + } else if (depth == 16) { + index = 1 + (i % 0xfffe); + pix2 = pixConvert1To16(NULL, pix1, 0, index); + } else { /* depth == 32 */ + index = 1 + i; + pix2 = pixConvert1To32(NULL, pix1, 0, index); + } + pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixaDestroy(&pixa); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Label pixels by the area of their connected component * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixConnCompAreaTransform() + * + * \param[in] pixs 1 bpp + * \param[in] connect connectivity: 4 or 8 + * \return pixd 32 bpp, 1 spp, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixel values in pixd label the area of the fg component
+ *          to which the pixel belongs.  Pixels in the bg are labelled 0.
+ *      (2) For purposes of visualization, the output can be converted
+ *          to 8 bpp, using pixConvert32To8() or pixMaxDynamicRange().
+ * 
+ */ +PIX * +pixConnCompAreaTransform(PIX *pixs, + l_int32 connect) +{ +l_int32 i, n, npix, w, h, xb, yb, wb, hb; +l_int32 *tab8; +BOXA *boxa; +PIX *pix1, *pix2, *pixd; +PIXA *pixa; + + PROCNAME("pixConnCompAreaTransform"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connect != 4 && connect != 8) + return (PIX *)ERROR_PTR("connectivity must be 4 or 8", procName, NULL); + + boxa = pixConnComp(pixs, &pixa, connect); + n = pixaGetCount(pixa); + boxaDestroy(&boxa); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixCreate(w, h, 32); + pixSetSpp(pixd, 1); + if (n == 0) { /* no fg */ + pixaDestroy(&pixa); + return pixd; + } + + /* Label each component and blit it in */ + tab8 = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); + pix1 = pixaGetPix(pixa, i, L_CLONE); + pixCountPixels(pix1, &npix, tab8); + pix2 = pixConvert1To32(NULL, pix1, 0, npix); + pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + pixaDestroy(&pixa); + LEPT_FREE(tab8); + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Label pixels to allow incremental computation of connected components * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixConnCompIncrInit() + * + * \param[in] pixs 1 bpp + * \param[in] conn connectivity: 4 or 8 + * \param[out] ppixd 32 bpp, with c.c. labelled + * \param[out] pptaa with pixel locations indexed by c.c. + * \param[out] pncc initial number of c.c. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This labels the connected components in a 1 bpp pix, and
+ *          additionally sets up a ptaa that lists the locations of pixels
+ *          in each of the components.
+ *      (2) It can be used to initialize the output image and arrays for
+ *          an application that maintains information about connected
+ *          components incrementally as pixels are added.
+ *      (3) pixs can be empty or have some foreground pixels.
+ *      (4) The connectivity is stored in pixd->special.
+ *      (5) Always initialize with the first pta in ptaa being empty
+ *          and representing the background value (index 0) in the pix.
+ * 
+ */ +l_ok +pixConnCompIncrInit(PIX *pixs, + l_int32 conn, + PIX **ppixd, + PTAA **pptaa, + l_int32 *pncc) +{ +l_int32 empty, w, h, ncc; +PIX *pixd; +PTA *pta; +PTAA *ptaa; + + PROCNAME("pixConnCompIncrInit"); + + if (ppixd) *ppixd = NULL; + if (pptaa) *pptaa = NULL; + if (pncc) *pncc = 0; + if (!ppixd || !pptaa || !pncc) + return ERROR_INT("&pixd, &ptaa, &ncc not all defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); + if (conn != 4 && conn != 8) + return ERROR_INT("connectivity must be 4 or 8", procName, 1); + + pixGetDimensions(pixs, &w, &h, NULL); + pixZero(pixs, &empty); + if (empty) { + *ppixd = pixCreate(w, h, 32); + pixSetSpp(*ppixd, 1); + pixSetSpecial(*ppixd, conn); + *pptaa = ptaaCreate(0); + pta = ptaCreate(1); + ptaaAddPta(*pptaa, pta, L_INSERT); /* reserve index 0 for background */ + return 0; + } + + /* Set up the initial labeled image and indexed pixel arrays */ + if ((pixd = pixConnCompTransform(pixs, conn, 32)) == NULL) + return ERROR_INT("pixd not made", procName, 1); + pixSetSpecial(pixd, conn); + *ppixd = pixd; + if ((ptaa = ptaaIndexLabeledPixels(pixd, &ncc)) == NULL) + return ERROR_INT("ptaa not made", procName, 1); + *pptaa = ptaa; + *pncc = ncc; + return 0; +} + + +/*! + * \brief pixConnCompIncrAdd() + * + * \param[in] pixs 32 bpp, with pixels labeled by c.c. + * \param[in] ptaa with each pta of pixel locations indexed by c.c. + * \param[out] pncc number of c.c + * \param[in] x,y location of added pixel + * \param[in] debug 0 for no output; otherwise output whenever + * debug <= nvals, up to debug == 3 + * \return -1 if nothing happens; 0 if a pixel is added; 1 on error + * + *
+ * Notes:
+ *      (1) This adds a pixel and updates the labeled connected components.
+ *          Before calling this function, initialize the process using
+ *          pixConnCompIncrInit().
+ *      (2) As a result of adding a pixel, one of the following can happen,
+ *          depending on the number of neighbors with non-zero value:
+ *          (a) nothing: the pixel is already a member of a c.c.
+ *          (b) no neighbors: a new component is added, increasing the
+ *              number of c.c.
+ *          (c) one neighbor: the pixel is added to an existing c.c.
+ *          (d) more than one neighbor: the added pixel causes joining of
+ *              two or more c.c., reducing the number of c.c.  A maximum
+ *              of 4 c.c. can be joined.
+ *      (3) When two c.c. are joined, the pixels in the larger index are
+ *          relabeled to those of the smaller in pixs, and their locations
+ *          are transferred to the pta with the smaller index in the ptaa.
+ *          The pta corresponding to the larger index is then deleted.
+ *      (4) This is an efficient implementation of a "union-find" operation,
+ *          which supports the generation and merging of disjoint sets
+ *          of pixels.  This function can be called about 1.3 million times
+ *          per second.
+ * 
+ */ +l_int32 +pixConnCompIncrAdd(PIX *pixs, + PTAA *ptaa, + l_int32 *pncc, + l_float32 x, + l_float32 y, + l_int32 debug) +{ +l_int32 conn, i, j, w, h, count, nvals, ns, firstindex; +l_uint32 val; +l_int32 *neigh; +PTA *ptas, *ptad; + + PROCNAME("pixConnCompIncrAdd"); + + if (!pixs || pixGetDepth(pixs) != 32) + return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (!pncc) + return ERROR_INT("&ncc not defined", procName, 1); + conn = pixs->special; + if (conn != 4 && conn != 8) + return ERROR_INT("connectivity must be 4 or 8", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (x < 0 || x >= w) + return ERROR_INT("invalid x pixel location", procName, 1); + if (y < 0 || y >= h) + return ERROR_INT("invalid y pixel location", procName, 1); + + pixGetPixel(pixs, x, y, &val); + if (val > 0) /* already belongs to a set */ + return -1; + + /* Find unique neighbor pixel values in increasing order of value. + * If %nvals > 0, these are returned in the %neigh array, which + * is of size %nvals. Note that the pixel values in each + * connected component are used as the index into the pta + * array of the ptaa, giving the pixel locations. */ + pixGetSortedNeighborValues(pixs, x, y, conn, &neigh, &nvals); + + /* If there are no neighbors, just add a new component */ + if (nvals == 0) { + count = ptaaGetCount(ptaa); + pixSetPixel(pixs, x, y, count); + ptas = ptaCreate(1); + ptaAddPt(ptas, x, y); + ptaaAddPta(ptaa, ptas, L_INSERT); + *pncc += 1; + LEPT_FREE(neigh); + return 0; + } + + /* Otherwise, there is at least one neighbor. Add the pixel + * to the first neighbor c.c. */ + firstindex = neigh[0]; + pixSetPixel(pixs, x, y, firstindex); + ptaaAddPt(ptaa, neigh[0], x, y); + if (nvals == 1) { + if (debug == 1) + fprintf(stderr, "nvals = %d: neigh = (%d)\n", nvals, neigh[0]); + LEPT_FREE(neigh); + return 0; + } + + /* If nvals > 1, there are at least 2 neighbors, so this pixel + * joins at least one pair of existing c.c. Join each component + * to the first component in the list, which is the one with + * the smallest integer label. This is done in two steps: + * (a) re-label the pixels in the component to the label of the + * first component, and + * (b) save the pixel locations in the pta for the first component. */ + if (nvals == 2) { + if (debug >= 1 && debug <= 2) { + fprintf(stderr, "nvals = %d: neigh = (%d,%d)\n", nvals, + neigh[0], neigh[1]); + } + } else if (nvals == 3) { + if (debug >= 1 && debug <= 3) { + fprintf(stderr, "nvals = %d: neigh = (%d,%d,%d)\n", nvals, + neigh[0], neigh[1], neigh[2]); + } + } else { /* nvals == 4 */ + if (debug >= 1 && debug <= 4) { + fprintf(stderr, "nvals = %d: neigh = (%d,%d,%d,%d)\n", nvals, + neigh[0], neigh[1], neigh[2], neigh[3]); + } + } + ptad = ptaaGetPta(ptaa, firstindex, L_CLONE); + for (i = 1; i < nvals; i++) { + ptas = ptaaGetPta(ptaa, neigh[i], L_CLONE); + ns = ptaGetCount(ptas); + for (j = 0; j < ns; j++) { /* relabel pixels */ + ptaGetPt(ptas, j, &x, &y); + pixSetPixel(pixs, x, y, firstindex); + } + ptaJoin(ptad, ptas, 0, -1); /* add relabeled pixel locations */ + *pncc -= 1; + ptaDestroy(&ptaa->pta[neigh[i]]); + ptaDestroy(&ptas); /* the clone */ + } + ptaDestroy(&ptad); /* the clone */ + LEPT_FREE(neigh); + return 0; +} + + +/*! + * \brief pixGetSortedNeighborValues() + * + * \param[in] pixs 8, 16 or 32 bpp, with pixels labeled by c.c. + * \param[in] x, y location of pixel + * \param[in] conn 4 or 8 connected neighbors + * \param[out] pneigh array of integers, to be filled with + * the values of the neighbors, if any + * \param[out] pnvals the number of unique neighbor values found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned %neigh array is the unique set of neighboring
+ *          pixel values, of size nvals, sorted from smallest to largest.
+ *          The value 0, which represents background pixels that do
+ *          not belong to any set of connected components, is discarded.
+ *      (2) If there are no neighbors, this returns %neigh = NULL; otherwise,
+ *          the caller must free the array.
+ *      (3) For either 4 or 8 connectivity, the maximum number of unique
+ *          neighbor values is 4.
+ * 
+ */ +l_ok +pixGetSortedNeighborValues(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 conn, + l_int32 **pneigh, + l_int32 *pnvals) +{ +l_int32 i, npt, index; +l_int32 neigh[4]; +l_uint32 val; +l_float32 fx, fy; +L_ASET *aset; +L_ASET_NODE *node; +PTA *pta; +RB_TYPE key; + + PROCNAME("pixGetSortedNeighborValues"); + + if (pneigh) *pneigh = NULL; + if (pnvals) *pnvals = 0; + if (!pneigh || !pnvals) + return ERROR_INT("&neigh and &nvals not both defined", procName, 1); + if (!pixs || pixGetDepth(pixs) < 8) + return ERROR_INT("pixs not defined or depth < 8", procName, 1); + + /* Identify the locations of nearest neighbor pixels */ + if ((pta = ptaGetNeighborPixLocs(pixs, x, y, conn)) == NULL) + return ERROR_INT("pta of neighbors not made", procName, 1); + + /* Find the pixel values and insert into a set as keys */ + aset = l_asetCreate(L_UINT_TYPE); + npt = ptaGetCount(pta); + for (i = 0; i < npt; i++) { + ptaGetPt(pta, i, &fx, &fy); + pixGetPixel(pixs, (l_int32)fx, (l_int32)fy, &val); + key.utype = val; + l_asetInsert(aset, key); + } + + /* Extract the set keys and put them into the %neigh array. + * Omit the value 0, which indicates the pixel doesn't + * belong to one of the sets of connected components. */ + node = l_asetGetFirst(aset); + index = 0; + while (node) { + val = node->key.utype; + if (val > 0) + neigh[index++] = (l_int32)val; + node = l_asetGetNext(node); + } + *pnvals = index; + if (index > 0) { + *pneigh = (l_int32 *)LEPT_CALLOC(index, sizeof(l_int32)); + for (i = 0; i < index; i++) + (*pneigh)[i] = neigh[i]; + } + + ptaDestroy(&pta); + l_asetDestroy(&aset); + return 0; +} + + +/*-----------------------------------------------------------------------* + * Label pixels with spatially-dependent color coding * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixLocToColorTransform() + * + * \param[in] pixs 1 bpp + * \return pixd 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates an RGB image where each component value
+ *          is coded depending on the (x.y) location and the size
+ *          of the fg connected component that the pixel in pixs belongs to.
+ *          It is independent of the 4-fold orthogonal orientation, and
+ *          only weakly depends on translations and small angle rotations.
+ *          Background pixels are black.
+ *      (2) Such encodings can be compared between two 1 bpp images
+ *          by performing this transform and calculating the
+ *          "earth-mover" distance on the resulting R,G,B histograms.
+ * 
+ */ +PIX * +pixLocToColorTransform(PIX *pixs) +{ +l_int32 w, h, w2, h2, wpls, wplr, wplg, wplb, wplcc, i, j, rval, gval, bval; +l_float32 invw2, invh2; +l_uint32 *datas, *datar, *datag, *datab, *datacc; +l_uint32 *lines, *liner, *lineg, *lineb, *linecc; +PIX *pix1, *pixcc, *pixr, *pixg, *pixb, *pixd; + + PROCNAME("pixLocToColorTransform"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + /* Label each pixel with the area of the c.c. to which it belongs. + * Clip the result to 255 in an 8 bpp pix. This is used for + * the blue component of pixd. */ + pixGetDimensions(pixs, &w, &h, NULL); + w2 = w / 2; + h2 = h / 2; + invw2 = 255.0 / (l_float32)w2; + invh2 = 255.0 / (l_float32)h2; + pix1 = pixConnCompAreaTransform(pixs, 8); + pixcc = pixConvert32To8(pix1, L_LS_TWO_BYTES, L_CLIP_TO_FF); + pixDestroy(&pix1); + + /* Label the red and green components depending on the location + * of the fg pixels, in a way that is 4-fold rotationally invariant. */ + pixr = pixCreate(w, h, 8); + pixg = pixCreate(w, h, 8); + pixb = pixCreate(w, h, 8); + wpls = pixGetWpl(pixs); + wplr = pixGetWpl(pixr); + wplg = pixGetWpl(pixg); + wplb = pixGetWpl(pixb); + wplcc = pixGetWpl(pixcc); + datas = pixGetData(pixs); + datar = pixGetData(pixr); + datag = pixGetData(pixg); + datab = pixGetData(pixb); + datacc = pixGetData(pixcc); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + liner = datar + i * wplr; + lineg = datag + i * wplg; + lineb = datab + i * wplb; + linecc = datacc+ i * wplcc; + for (j = 0; j < w; j++) { + if (GET_DATA_BIT(lines, j) == 0) continue; + if (w < h) { + rval = invh2 * L_ABS((l_float32)(i - h2)); + gval = invw2 * L_ABS((l_float32)(j - w2)); + } else { + rval = invw2 * L_ABS((l_float32)(j - w2)); + gval = invh2 * L_ABS((l_float32)(i - h2)); + } + bval = GET_DATA_BYTE(linecc, j); + SET_DATA_BYTE(liner, j, rval); + SET_DATA_BYTE(lineg, j, gval); + SET_DATA_BYTE(lineb, j, bval); + } + } + pixd = pixCreateRGBImage(pixr, pixg, pixb); + + pixDestroy(&pixcc); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/pixtiling.c b/3rdparty/hgOCR/leptonica/pixtiling.c new file mode 100644 index 00000000..bc7bc3d8 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pixtiling.c @@ -0,0 +1,421 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file pixtiling.c + *
+ *
+ *        PIXTILING       *pixTilingCreate()
+ *        void            *pixTilingDestroy()
+ *        l_int32          pixTilingGetCount()
+ *        l_int32          pixTilingGetSize()
+ *        PIX             *pixTilingGetTile()
+ *        l_int32          pixTilingNoStripOnPaint()
+ *        l_int32          pixTilingPaintTile()
+ *
+ *   This provides a simple way to split an image into tiles
+ *   and to perform operations independently on each tile.
+ *
+ *   The tile created with pixTilingGetTile() can have pixels in
+ *   adjacent tiles for computation.  The number of extra pixels
+ *   on each side of the tile is given by an 'overlap' parameter
+ *   to pixTilingCreate().  For tiles at the boundary of
+ *   the input image, quasi-overlap pixels are created by reflection
+ *   symmetry into the tile.
+ *
+ *   Here's a typical intended usage.  Suppose you want to parallelize
+ *   the operation on an image, by operating on tiles.  For each
+ *   tile, you want to generate an in-place image result at the same
+ *   resolution.  Suppose you choose a one-dimensional vertical tiling,
+ *   where the desired tile width is 256 pixels and the overlap is
+ *   30 pixels on left and right sides:
+ *
+ *     PIX *pixd = pixCreateTemplate(pixs);  // output
+ *     PIXTILING  *pt = pixTilingCreate(pixs, 0, 1, 256, 30, 0);
+ *     pixTilingGetCount(pt, &nx, NULL);
+ *     for (j = 0; j < nx; j++) {
+ *         PIX *pixt = pixTilingGetTile(pt, 0, j);
+ *         SomeInPlaceOperation(pixt, 30, 0, ...);
+ *         pixTilingPaintTile(pixd, 0, j, pixt, pt);
+ *         pixDestroy(&pixt);
+ *     }
+ *
+ *   In this example, note the following:
+ *    ~ The unspecfified in-place operation could instead generate
+ *      a new pix.  If this is done, the resulting pix must be the
+ *      same size as pixt, because pixTilingPaintTile() makes that
+ *      assumption, removing the overlap pixels before painting
+ *      into the destination.
+ *    ~ The 'overlap' parameters have been included in your function,
+ *      to indicate which pixels are not in the exterior overlap region.
+ *      You will need to change only pixels that are not in the overlap
+ *      region, because those are the pixels that will be painted
+ *      into the destination.
+ *    ~ For tiles on the outside of the image, mirrored pixels are
+ *      added to substitute for the overlap that is added to interior
+ *      tiles.  This allows you to implement your function without
+ *      reference to which tile it is; no special coding is necessary
+ *      for pixels that are near the image boundary.
+ *    ~ The tiles are labeled by (i, j) = (row, column),
+ *      and in this example there is one row and nx columns.
+ * 
+ */ + +#include "allheaders.h" + + +/*! + * \brief pixTilingCreate() + * + * \param[in] pixs pix to be tiled; any depth; colormap OK + * \param[in] nx number of tiles across image + * \param[in] ny number of tiles down image + * \param[in] w desired width of each tile + * \param[in] h desired height of each tile + * \param[in] xoverlap overlap into neighboring tiles on each side + * \param[in] yoverlap overlap into neighboring tiles above and below + * \return pixtiling, or NULL on error + * + *
+ * Notes:
+ *      (1) We put a clone of pixs in the PixTiling.
+ *      (2) The input to pixTilingCreate() for horizontal tiling can be
+ *          either the number of tiles across the image or the approximate
+ *          width of the tiles.  If the latter, the actual width will be
+ *          determined by making all tiles but the last of equal width, and
+ *          making the last as close to the others as possible.  The same
+ *          consideration is applied independently to the vertical tiling.
+ *          To specify tile width, set nx = 0; to specify the number of
+ *          tiles horizontally across the image, set w = 0.
+ *      (3) If pixs is to be tiled in one-dimensional strips, use ny = 1 for
+ *          vertical strips and nx = 1 for horizontal strips.
+ *      (4) The overlap must not be larger than the width or height of
+ *          the leftmost or topmost tile(s).
+ * 
+ */ +PIXTILING * +pixTilingCreate(PIX *pixs, + l_int32 nx, + l_int32 ny, + l_int32 w, + l_int32 h, + l_int32 xoverlap, + l_int32 yoverlap) +{ +l_int32 width, height; +PIXTILING *pt; + + PROCNAME("pixTilingCreate"); + + if (!pixs) + return (PIXTILING *)ERROR_PTR("pixs not defined", procName, NULL); + if (nx < 1 && w < 1) + return (PIXTILING *)ERROR_PTR("invalid width spec", procName, NULL); + if (ny < 1 && h < 1) + return (PIXTILING *)ERROR_PTR("invalid height spec", procName, NULL); + + /* Find the tile width and number of tiles. All tiles except the + * rightmost ones have the same width. The width of the + * rightmost ones are at least the width of the others and + * less than twice that width. Ditto for tile height. */ + pixGetDimensions(pixs, &width, &height, NULL); + if (nx == 0) + nx = L_MAX(1, width / w); + w = width / nx; /* possibly reset */ + if (ny == 0) + ny = L_MAX(1, height / h); + h = height / ny; /* possibly reset */ + if (xoverlap > w || yoverlap > h) { + L_INFO("tile width = %d, tile height = %d\n", procName, w, h); + return (PIXTILING *)ERROR_PTR("overlap too large", procName, NULL); + } + + pt = (PIXTILING *)LEPT_CALLOC(1, sizeof(PIXTILING)); + pt->pix = pixClone(pixs); + pt->xoverlap = xoverlap; + pt->yoverlap = yoverlap; + pt->nx = nx; + pt->ny = ny; + pt->w = w; + pt->h = h; + pt->strip = TRUE; + return pt; +} + + +/*! + * \brief pixTilingDestroy() + * + * \param[in,out] ppt will be set to null before returning + * \return void + */ +void +pixTilingDestroy(PIXTILING **ppt) +{ +PIXTILING *pt; + + PROCNAME("pixTilingDestroy"); + + if (ppt == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((pt = *ppt) == NULL) + return; + + pixDestroy(&pt->pix); + LEPT_FREE(pt); + *ppt = NULL; + return; +} + + +/*! + * \brief pixTilingGetCount() + * + * \param[in] pt pixtiling + * \param[out] pnx [optional] nx; can be null + * \param[out] pny [optional] ny; can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixTilingGetCount(PIXTILING *pt, + l_int32 *pnx, + l_int32 *pny) +{ + PROCNAME("pixTilingGetCount"); + + if (!pt) + return ERROR_INT("pt not defined", procName, 1); + if (pnx) *pnx = pt->nx; + if (pny) *pny = pt->ny; + return 0; +} + + +/*! + * \brief pixTilingGetSize() + * + * \param[in] pt pixtiling + * \param[out] pw [optional] tile width; can be null + * \param[out] ph [optional] tile height; can be null + * \return 0 if OK, 1 on error + */ +l_ok +pixTilingGetSize(PIXTILING *pt, + l_int32 *pw, + l_int32 *ph) +{ + PROCNAME("pixTilingGetSize"); + + if (!pt) + return ERROR_INT("pt not defined", procName, 1); + if (pw) *pw = pt->w; + if (ph) *ph = pt->h; + return 0; +} + + +/*! + * \brief pixTilingGetTile() + * + * \param[in] pt pixtiling + * \param[in] i tile row index + * \param[in] j tile column index + * \return pixd tile with appropriate boundary (overlap) pixels added, + * or NULL on error + */ +PIX * +pixTilingGetTile(PIXTILING *pt, + l_int32 i, + l_int32 j) +{ +l_int32 wpix, hpix, wt, ht, nx, ny; +l_int32 xoverlap, yoverlap, wtlast, htlast; +l_int32 left, top, xtraleft, xtraright, xtratop, xtrabot, width, height; +BOX *box; +PIX *pixs, *pixt, *pixd; + + PROCNAME("pixTilingGetTile"); + + if (!pt) + return (PIX *)ERROR_PTR("pt not defined", procName, NULL); + if ((pixs = pt->pix) == NULL) + return (PIX *)ERROR_PTR("pix not found", procName, NULL); + pixTilingGetCount(pt, &nx, &ny); + if (i < 0 || i >= ny) + return (PIX *)ERROR_PTR("invalid row index i", procName, NULL); + if (j < 0 || j >= nx) + return (PIX *)ERROR_PTR("invalid column index j", procName, NULL); + + /* Grab the tile with as much overlap as exists within the + * input pix. First, compute the (left, top) coordinates. */ + pixGetDimensions(pixs, &wpix, &hpix, NULL); + pixTilingGetSize(pt, &wt, &ht); + xoverlap = pt->xoverlap; + yoverlap = pt->yoverlap; + wtlast = wpix - wt * (nx - 1); + htlast = hpix - ht * (ny - 1); + left = L_MAX(0, j * wt - xoverlap); + top = L_MAX(0, i * ht - yoverlap); + + /* Get the width and height of the tile, including whatever + * overlap is available. */ + if (nx == 1) + width = wpix; + else if (j == 0) + width = wt + xoverlap; + else if (j == nx - 1) + width = wtlast + xoverlap; + else + width = wt + 2 * xoverlap; + + if (ny == 1) + height = hpix; + else if (i == 0) + height = ht + yoverlap; + else if (i == ny - 1) + height = htlast + yoverlap; + else + height = ht + 2 * yoverlap; + box = boxCreate(left, top, width, height); + pixt = pixClipRectangle(pixs, box, NULL); + boxDestroy(&box); + + /* If no overlap, do not add any special case borders */ + if (xoverlap == 0 && yoverlap == 0) + return pixt; + + /* Add overlap as a mirrored border, in the 8 special cases where + * the tile touches the border of the input pix. The xtratop (etc) + * parameters are required where the tile is either full width + * or full height. */ + xtratop = xtrabot = xtraleft = xtraright = 0; + if (nx == 1) + xtraleft = xtraright = xoverlap; + if (ny == 1) + xtratop = xtrabot = yoverlap; + if (i == 0 && j == 0) + pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, + yoverlap, xtrabot); + else if (i == 0 && j == nx - 1) + pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, + yoverlap, xtrabot); + else if (i == ny - 1 && j == 0) + pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, + xtratop, yoverlap); + else if (i == ny - 1 && j == nx - 1) + pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, + xtratop, yoverlap); + else if (i == 0) + pixd = pixAddMirroredBorder(pixt, 0, 0, yoverlap, xtrabot); + else if (i == ny - 1) + pixd = pixAddMirroredBorder(pixt, 0, 0, xtratop, yoverlap); + else if (j == 0) + pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, 0, 0); + else if (j == nx - 1) + pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, 0, 0); + else + pixd = pixClone(pixt); + pixDestroy(&pixt); + + return pixd; +} + + +/*! + * \brief pixTilingNoStripOnPaint() + * + * \param[in] pt pixtiling + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The default for paint is to strip out the overlap pixels
+ *          that are added by pixTilingGetTile().  However, some
+ *          operations will generate an image with these pixels
+ *          stripped off.  This tells the paint operation not
+ *          to strip the added boundary pixels when painting.
+ * 
+ */ +l_ok +pixTilingNoStripOnPaint(PIXTILING *pt) +{ + PROCNAME("pixTilingNoStripOnPaint"); + + if (!pt) + return ERROR_INT("pt not defined", procName, 1); + pt->strip = FALSE; + return 0; +} + + +/*! + * \brief pixTilingPaintTile() + * + * \param[in] pixd dest: paint tile onto this, without overlap + * \param[in] i tile row index + * \param[in] j tile column index + * \param[in] pixs source: tile to be painted from + * \param[in] pt pixtiling struct + * \return 0 if OK, 1 on error + */ +l_ok +pixTilingPaintTile(PIX *pixd, + l_int32 i, + l_int32 j, + PIX *pixs, + PIXTILING *pt) +{ +l_int32 w, h; + + PROCNAME("pixTilingPaintTile"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pt) + return ERROR_INT("pt not defined", procName, 1); + if (i < 0 || i >= pt->ny) + return ERROR_INT("invalid row index i", procName, 1); + if (j < 0 || j >= pt->nx) + return ERROR_INT("invalid column index j", procName, 1); + + /* Strip added border pixels off if requested */ + pixGetDimensions(pixs, &w, &h, NULL); + if (pt->strip == TRUE) { + pixRasterop(pixd, j * pt->w, i * pt->h, + w - 2 * pt->xoverlap, h - 2 * pt->yoverlap, PIX_SRC, + pixs, pt->xoverlap, pt->yoverlap); + } else { + pixRasterop(pixd, j * pt->w, i * pt->h, w, h, PIX_SRC, pixs, 0, 0); + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/pngio.c b/3rdparty/hgOCR/leptonica/pngio.c new file mode 100644 index 00000000..eaecc56a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pngio.c @@ -0,0 +1,2119 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - Copyright (C) 2017 Milner Technologies, Inc. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pngio.c + *
+ *
+ *    Reading png through stream
+ *          PIX        *pixReadStreamPng()
+ *
+ *    Reading png header
+ *          l_int32     readHeaderPng()
+ *          l_int32     freadHeaderPng()
+ *          l_int32     readHeaderMemPng()
+ *
+ *    Reading png metadata
+ *          l_int32     fgetPngResolution()
+ *          l_int32     isPngInterlaced()
+ *          l_int32     fgetPngColormapInfo()
+ *
+ *    Writing png through stream
+ *          l_int32     pixWritePng()  [ special top level ]
+ *          l_int32     pixWriteStreamPng()
+ *          l_int32     pixSetZlibCompression()
+ *
+ *    Set flag for special read mode
+ *          void        l_pngSetReadStrip16To8()
+ *
+ *    Low-level memio utility (thanks to T. D. Hintz)
+ *          static void memio_png_write_data()
+ *          static void memio_png_flush()
+ *          static void memio_png_read_data()
+ *          static void memio_free()
+ *
+ *    Reading png from memory
+ *          PIX        *pixReadMemPng()
+ *
+ *    Writing png to memory
+ *          l_int32     pixWriteMemPng()
+ *
+ *    Documentation: libpng.txt and example.c
+ *
+ *    On input (decompression from file), palette color images
+ *    are read into an 8 bpp Pix with a colormap, and 24 bpp
+ *    3 component color images are read into a 32 bpp Pix with
+ *    rgb samples.  On output (compression to file), palette color
+ *    images are written as 8 bpp with the colormap, and 32 bpp
+ *    full color images are written compressed as a 24 bpp,
+ *    3 component color image.
+ *
+ *    In the following, we use these abbreviations:
+ *       bps == bit/sample
+ *       spp == samples/pixel
+ *       bpp == bits/pixel of image in Pix (memory)
+ *    where each component is referred to as a "sample".
+ *
+ *    For reading and writing rgb and rgba images, we read and write
+ *    alpha if it exists (spp == 4) and do not read or write if
+ *    it doesn't (spp == 3).  The alpha component can be 'removed'
+ *    simply by setting spp to 3.  In leptonica, we make relatively
+ *    little explicit use of the alpha sample.  Note that the alpha
+ *    sample in the image is also called "alpha transparency",
+ *    "alpha component" and "alpha layer."
+ *
+ *    To change the zlib compression level, use pixSetZlibCompression()
+ *    before writing the file.  The default is for standard png compression.
+ *    The zlib compression value can be set [0 ... 9], with
+ *         0     no compression (huge files)
+ *         1     fastest compression
+ *         -1    default compression  (equivalent to 6 in latest version)
+ *         9     best compression
+ *    Note that if you are using the defined constants in zlib instead
+ *    of the compression integers given above, you must include zlib.h.
+ *
+ *    There is global for determining the size of retained samples:
+ *             var_PNG_STRIP_16_to_8
+ *    and a function l_pngSetReadStrip16To8() for setting it.
+ *    The default is TRUE, which causes pixRead() to strip each 16 bit
+ *    sample down to 8 bps:
+ *     ~ For 16 bps rgb (16 bps, 3 spp) --> 32 bpp rgb Pix
+ *     ~ For 16 bps gray (16 bps, 1 spp) --> 8 bpp grayscale Pix
+ *    If the variable is set to FALSE, the 16 bit gray samples
+ *    are saved when read; the 16 bit rgb samples return an error.
+ *    Note: results can be non-deterministic if used with
+ *    multi-threaded applications.
+ *
+ *    Thanks to a memory buffering utility contributed by T. D. Hintz,
+ *    encoding png directly into memory (and decoding from memory)
+ *    is now enabled without the use of any temp files.  Unlike with webp,
+ *    it is necessary to preserve the stream interface to enable writing
+ *    pixa to memory.  So there are two independent but very similar
+ *    implementations of png reading and writing.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if HAVE_LIBPNG /* defined in environ.h */ +/* --------------------------------------------*/ + +#include "png.h" + +#if HAVE_LIBZ +#include "zlib.h" +#else +#define Z_DEFAULT_COMPRESSION (-1) +#endif /* HAVE_LIBZ */ + +/* ------------------ Set default for read option -------------------- */ + /* Strip 16 bpp --> 8 bpp on reading png; default is for stripping. + * If you don't strip, you can't read the gray-alpha spp = 2 images. */ +static l_int32 var_PNG_STRIP_16_TO_8 = 1; + +#ifndef NO_CONSOLE_IO +#define DEBUG_READ 0 +#define DEBUG_WRITE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*---------------------------------------------------------------------* + * Reading png through stream * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadStreamPng() + * + * \param[in] fp file stream + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) If called from pixReadStream(), the stream is positioned
+ *          at the beginning of the file.
+ *      (2) To do sequential reads of png format images from a stream,
+ *          use pixReadStreamPng()
+ *      (3) Any image with alpha is converted to RGBA (spp = 4, with
+ *          equal red, green and blue channels) on reading.
+ *          There are three important cases with alpha:
+ *          (a) grayscale-with-alpha (spp = 2), where bpp = 8, and each
+ *              pixel has an associated alpha (transparency) value
+ *              in the second component of the image data.
+ *          (b) spp = 1, d = 1 with colormap and alpha in the trans array.
+ *              Transparency is usually associated with the white background.
+ *          (c) spp = 1, d = 8 with colormap and alpha in the trans array.
+ *              Each color in the colormap has a separate transparency value.
+ *      (4) We use the high level png interface, where the transforms are set
+ *          up in advance and the header and image are read with a single
+ *          call.  The more complicated interface, where the header is
+ *          read first and the buffers for the raster image are user-
+ *          allocated before reading the image, works for single images,
+ *          but I could not get it to work properly for the successive
+ *          png reads that are required by pixaReadStream().
+ * 
+ */ +PIX * +pixReadStreamPng(FILE *fp) +{ +l_uint8 byte; +l_int32 rval, gval, bval; +l_int32 i, j, k, index, ncolors, bitval; +l_int32 wpl, d, spp, cindex, tRNS; +l_uint32 png_transforms; +l_uint32 *data, *line, *ppixel; +int num_palette, num_text, num_trans; +png_byte bit_depth, color_type, channels; +png_uint_32 w, h, rowbytes; +png_uint_32 xres, yres; +png_bytep rowptr, trans; +png_bytep *row_pointers; +png_structp png_ptr; +png_infop info_ptr, end_info; +png_colorp palette; +png_textp text_ptr; /* ptr to text_chunk */ +PIX *pix, *pix1; +PIXCMAP *cmap; + + PROCNAME("pixReadStreamPng"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + pix = NULL; + + /* Allocate the 3 data structures */ + if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return (PIX *)ERROR_PTR("png_ptr not made", procName, NULL); + + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return (PIX *)ERROR_PTR("info_ptr not made", procName, NULL); + } + + if ((end_info = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + return (PIX *)ERROR_PTR("end_info not made", procName, NULL); + } + + /* Set up png setjmp error handling */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("internal png error", procName, NULL); + } + + png_init_io(png_ptr, fp); + + /* ---------------------------------------------------------- * + * - Set the transforms flags. Whatever happens here, + * NEVER invert 1 bpp using PNG_TRANSFORM_INVERT_MONO. + * - Do not use PNG_TRANSFORM_EXPAND, which would + * expand all images with bpp < 8 to 8 bpp. + * - Strip 16 --> 8 if reading 16-bit gray+alpha + * ---------------------------------------------------------- */ + /* To strip 16 --> 8 bit depth, use PNG_TRANSFORM_STRIP_16 */ + if (var_PNG_STRIP_16_TO_8 == 1) { /* our default */ + png_transforms = PNG_TRANSFORM_STRIP_16; + } else { + png_transforms = PNG_TRANSFORM_IDENTITY; + L_INFO("not stripping 16 --> 8 in png reading\n", procName); + } + + /* Read it */ + png_read_png(png_ptr, info_ptr, png_transforms, NULL); + + row_pointers = png_get_rows(png_ptr, info_ptr); + w = png_get_image_width(png_ptr, info_ptr); + h = png_get_image_height(png_ptr, info_ptr); + bit_depth = png_get_bit_depth(png_ptr, info_ptr); + rowbytes = png_get_rowbytes(png_ptr, info_ptr); + color_type = png_get_color_type(png_ptr, info_ptr); + channels = png_get_channels(png_ptr, info_ptr); + spp = channels; + tRNS = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ? 1 : 0; + + if (spp == 1) { + d = bit_depth; + } else { /* spp == 2 (gray + alpha), spp == 3 (rgb), spp == 4 (rgba) */ + d = 4 * bit_depth; + } + + /* Remove if/when this is implemented for all bit_depths */ + if (spp != 1 && bit_depth != 8) { + L_ERROR("spp = %d and bps = %d != 8\n" + "turn on 16 --> 8 stripping\n", procName, spp, bit_depth); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("not implemented for this image", + procName, NULL); + } + + cmap = NULL; + if (color_type == PNG_COLOR_TYPE_PALETTE || + color_type == PNG_COLOR_MASK_PALETTE) { /* generate a colormap */ + png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + cmap = pixcmapCreate(d); /* spp == 1 */ + for (cindex = 0; cindex < num_palette; cindex++) { + rval = palette[cindex].red; + gval = palette[cindex].green; + bval = palette[cindex].blue; + pixcmapAddColor(cmap, rval, gval, bval); + } + } + + if ((pix = pixCreate(w, h, d)) == NULL) { + pixcmapDestroy(&cmap); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + } + pixSetInputFormat(pix, IFF_PNG); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + pixSetColormap(pix, cmap); + pixSetSpp(pix, spp); + + if (spp == 1 && !tRNS) { /* copy straight from buffer to pix */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0; j < rowbytes; j++) { + SET_DATA_BYTE(line, j, rowptr[j]); + } + } + } else if (spp == 2) { /* grayscale + alpha; convert to RGBA */ + L_INFO("converting (gray + alpha) ==> RGBA\n", procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = k = 0; j < w; j++) { + /* Copy gray value into r, g and b */ + SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); + ppixel++; + } + } + pixSetSpp(pix, 4); /* we do not support 2 spp pix */ + } else if (spp == 3 || spp == 4) { + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = k = 0; j < w; j++) { + SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k++]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k++]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); + if (spp == 3) /* set to opaque; some readers are buggy */ + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, 255); + else /* spp == 4 */ + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); + ppixel++; + } + } + } + + /* Special spp == 1 cases with transparency: + * (1) 8 bpp without colormap; assume full transparency + * (2) 1 bpp with colormap + trans array (for alpha) + * (3) 8 bpp with colormap + trans array (for alpha) + * These all require converting to RGBA */ + if (spp == 1 && tRNS) { + if (!cmap) { + /* Case 1: make fully transparent RGBA image */ + L_INFO("transparency, 1 spp, no colormap, no transparency array: " + "convention is fully transparent image\n", procName); + L_INFO("converting (fully transparent 1 spp) ==> RGBA\n", procName); + pixDestroy(&pix); + pix = pixCreate(w, h, 32); /* init to alpha = 0 (transparent) */ + pixSetSpp(pix, 4); + } else { + L_INFO("converting (cmap + alpha) ==> RGBA\n", procName); + + /* Grab the transparency array */ + png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); + if (!trans) { /* invalid png file */ + pixDestroy(&pix); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("cmap, tRNS, but no transparency array", + procName, NULL); + } + + /* Save the cmap and destroy the pix */ + cmap = pixcmapCopy(pixGetColormap(pix)); + ncolors = pixcmapGetCount(cmap); + pixDestroy(&pix); + + /* Start over with 32 bit RGBA */ + pix = pixCreate(w, h, 32); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + pixSetSpp(pix, 4); + +#if DEBUG_READ + fprintf(stderr, "ncolors = %d, num_trans = %d\n", + ncolors, num_trans); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if (i < num_trans) { + fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,%d)\n", + rval, gval, bval, trans[i]); + } else { + fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,<<255>>)\n", + rval, gval, bval); + } + } +#endif /* DEBUG_READ */ + + /* Extract the data and convert to RGBA */ + if (d == 1) { + /* Case 2: 1 bpp with transparency (usually) behind white */ + L_INFO("converting 1 bpp cmap with alpha ==> RGBA\n", procName); + if (num_trans == 1) + L_INFO("num_trans = 1; second color opaque by default\n", + procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0, index = 0; j < rowbytes; j++) { + byte = rowptr[j]; + for (k = 0; k < 8 && index < w; k++, index++) { + bitval = (byte >> (7 - k)) & 1; + pixcmapGetColor(cmap, bitval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, ppixel); + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, + bitval < num_trans ? trans[bitval] : 255); + ppixel++; + } + } + } + } else if (d == 8) { + /* Case 3: 8 bpp with cmap and associated transparency */ + L_INFO("converting 8 bpp cmap with alpha ==> RGBA\n", procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0; j < w; j++) { + index = rowptr[j]; + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, ppixel); + /* Assume missing entries to be 255 (opaque) + * according to the spec: + * http://www.w3.org/TR/PNG/#11tRNS */ + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, + index < num_trans ? trans[index] : 255); + ppixel++; + } + } + } else { + L_ERROR("spp == 1, cmap, trans array, invalid depth: %d\n", + procName, d); + } + pixcmapDestroy(&cmap); + } + } + +#if DEBUG_READ + if (cmap) { + for (i = 0; i < 16; i++) { + fprintf(stderr, "[%d] = %d\n", i, + ((l_uint8 *)(cmap->array))[i]); + } + } +#endif /* DEBUG_READ */ + + /* Final adjustments for bpp = 1. + * + If there is no colormap, the image must be inverted because + * png stores black pixels as 0. + * + We have already handled the case of cmapped, 1 bpp pix + * with transparency, where the output pix is 32 bpp RGBA. + * If there is no transparency but the pix has a colormap, + * we remove the colormap, because functions operating on + * 1 bpp images in leptonica assume no colormap. + * + The colormap must be removed in such a way that the pixel + * values are not changed. If the values are only black and + * white, we return a 1 bpp image; if gray, return an 8 bpp pix; + * otherwise, return a 32 bpp rgb pix. + * + * Note that we cannot use the PNG_TRANSFORM_INVERT_MONO flag + * to do the inversion, because that flag (since version 1.0.9) + * inverts 8 bpp grayscale as well, which we don't want to do. + * (It also doesn't work if there is a colormap.) + * + * Note that if the input png is a 1-bit with colormap and + * transparency, it has already been rendered as a 32 bpp, + * spp = 4 rgba pix. + */ + if (pixGetDepth(pix) == 1) { + if (!cmap) { + pixInvert(pix, pix); + } else { + L_INFO("removing opaque cmap from 1 bpp\n", procName); + pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + pixDestroy(&pix); + pix = pix1; + } + } + + xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); + yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); + pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ + pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ + + /* Get the text if there is any */ + png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); + if (num_text && text_ptr) + pixSetText(pix, text_ptr->text); + + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return pix; +} + + +/*---------------------------------------------------------------------* + * Reading png header * + *---------------------------------------------------------------------*/ +/*! + * \brief readHeaderPng() + * + * \param[in] filename + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \param[out] piscmap [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, iscmap is returned as 1; else 0.
+ *      (2) For gray+alpha, although the png records bps = 16, we
+ *          consider this as two 8 bpp samples (gray and alpha).
+ *          When a gray+alpha is read, it is converted to 32 bpp RGBA.
+ * 
+ */ +l_ok +readHeaderPng(const char *filename, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderPng"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (piscmap) *piscmap = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderPng(fp, pw, ph, pbps, pspp, piscmap); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderPng() + * + * \param[in] fp file stream + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \param[out] piscmap [optional] + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See readHeaderPng().  We only need the first 40 bytes in the file.
+ * 
+ */ +l_ok +freadHeaderPng(FILE *fp, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 nbytes, ret; +l_uint8 data[40]; + + PROCNAME("freadHeaderPng"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (piscmap) *piscmap = 0; + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + + nbytes = fnbytesInFile(fp); + if (nbytes < 40) + return ERROR_INT("file too small to be png", procName, 1); + if (fread(data, 1, 40, fp) != 40) + return ERROR_INT("error reading data", procName, 1); + ret = readHeaderMemPng(data, 40, pw, ph, pbps, pspp, piscmap); + return ret; +} + + +/*! + * \brief readHeaderMemPng() + * + * \param[in] data + * \param[in] size 40 bytes is sufficient + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \param[out] piscmap [optional] input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See readHeaderPng().
+ *      (2) png colortypes (see png.h: PNG_COLOR_TYPE_*):
+ *          0:  gray; fully transparent (with tRNS) (1 spp)
+ *          2:  RGB (3 spp)
+ *          3:  colormap; colormap+alpha (with tRNS) (1 spp)
+ *          4:  gray + alpha (2 spp)
+ *          6:  RGBA (4 spp)
+ *          Note:
+ *            0 and 3 have the alpha information in a tRNS chunk
+ *            4 and 6 have separate alpha samples with each pixel.
+ * 
+ */ +l_ok +readHeaderMemPng(const l_uint8 *data, + size_t size, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_uint16 twobytes; +l_uint16 *pshort; +l_int32 colortype, w, h, bps, spp; +l_uint32 *pword; + + PROCNAME("readHeaderMemPng"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (piscmap) *piscmap = 0; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (size < 40) + return ERROR_INT("size < 40", procName, 1); + + /* Check password */ + if (data[0] != 137 || data[1] != 80 || data[2] != 78 || + data[3] != 71 || data[4] != 13 || data[5] != 10 || + data[6] != 26 || data[7] != 10) + return ERROR_INT("not a valid png file", procName, 1); + + pword = (l_uint32 *)data; + pshort = (l_uint16 *)data; + w = convertOnLittleEnd32(pword[4]); + h = convertOnLittleEnd32(pword[5]); + if (w < 1 || h < 1) + return ERROR_INT("invalid w or h", procName, 1); + twobytes = convertOnLittleEnd16(pshort[12]); /* contains depth/sample */ + /* and the color type */ + colortype = twobytes & 0xff; /* color type */ + bps = twobytes >> 8; /* bits/sample */ + + /* Special case with alpha that is extracted as RGBA. + * Note that the cmap+alpha is also extracted as RGBA, + * but only if the tRNS chunk exists, which we can't tell + * by this simple parser.*/ + if (colortype == 4) + L_INFO("gray + alpha: will extract as RGBA (spp = 4)\n", procName); + + if (colortype == 2) { /* RGB */ + spp = 3; + } else if (colortype == 6) { /* RGBA */ + spp = 4; + } else if (colortype == 4) { /* gray + alpha */ + spp = 2; + bps = 8; /* both the gray and alpha are 8-bit samples */ + } else { /* gray (0) or cmap (3) or cmap+alpha (3) */ + spp = 1; + } + if (bps < 1 || bps > 16) { + L_ERROR("invalid bps = %d\n", procName, bps); + return 1; + } + if (pw) *pw = w; + if (ph) *ph = h; + if (pbps) *pbps = bps; + if (pspp) *pspp = spp; + if (piscmap) { + if (colortype & 1) /* palette */ + *piscmap = 1; + else + *piscmap = 0; + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Reading png metadata * + *---------------------------------------------------------------------*/ +/* + * fgetPngResolution() + * + * Input: fp (file stream opened for read) + * &xres, &yres ( resolution in ppi) + * Return: 0 if OK; 1 on error + * + * Notes: + * (1) If neither resolution field is set, this is not an error; + * the returned resolution values are 0 (designating 'unknown'). + * (2) Side-effect: this rewinds the stream. + */ +l_int32 +fgetPngResolution(FILE *fp, + l_int32 *pxres, + l_int32 *pyres) +{ +png_uint_32 xres, yres; +png_structp png_ptr; +png_infop info_ptr; + + PROCNAME("fgetPngResolution"); + + if (pxres) *pxres = 0; + if (pyres) *pyres = 0; + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + if (!pxres || !pyres) + return ERROR_INT("&xres and &yres not both defined", procName, 1); + + /* Make the two required structs */ + if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return ERROR_INT("png_ptr not made", procName, 1); + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return ERROR_INT("info_ptr not made", procName, 1); + } + + /* Set up png setjmp error handling. + * Without this, an error calls exit. */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + return ERROR_INT("internal png error", procName, 1); + } + + /* Read the metadata */ + rewind(fp); + png_init_io(png_ptr, fp); + png_read_info(png_ptr, info_ptr); + + xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); + yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); + *pxres = (l_int32)((l_float32)xres / 39.37 + 0.5); /* to ppi */ + *pyres = (l_int32)((l_float32)yres / 39.37 + 0.5); + + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + rewind(fp); + return 0; +} + + +/*! + * \brief isPngInterlaced() + * + * \param[in] filename + * \param[out] pinterlaced 1 if interlaced png; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +isPngInterlaced(const char *filename, + l_int32 *pinterlaced) +{ +l_uint8 buf[32]; +FILE *fp; + + PROCNAME("isPngInterlaced"); + + if (!pinterlaced) + return ERROR_INT("&interlaced not defined", procName, 1); + *pinterlaced = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + if (fread(buf, 1, 32, fp) != 32) { + fclose(fp); + return ERROR_INT("data not read", procName, 1); + } + fclose(fp); + + *pinterlaced = (buf[28] == 0) ? 0 : 1; + return 0; +} + + +/* + * \brief fgetPngColormapInfo() + * + * \param[in] fp file stream opened for read + * \param[out] pcmap optional; use NULL to skip + * \param[out] ptransparency optional; 1 if colormapped with + * transparency, 0 otherwise; use NULL to skip + * \return 0 if OK, 1 on error + * + * Notes: + * (1) The transparency information in a png is in the tRNA array, + * which is separate from the colormap. If this array exists + * and if any element is less than 255, there exists some + * transparency. + * (2) Side-effect: this rewinds the stream. + */ +l_ok +fgetPngColormapInfo(FILE *fp, + PIXCMAP **pcmap, + l_int32 *ptransparency) +{ +l_int32 i, cindex, rval, gval, bval, num_palette, num_trans; +png_byte bit_depth, color_type; +png_bytep trans; +png_colorp palette; +png_structp png_ptr; +png_infop info_ptr; + + PROCNAME("fgetPngColormapInfo"); + + if (pcmap) *pcmap = NULL; + if (ptransparency) *ptransparency = 0; + if (!pcmap && !ptransparency) + return ERROR_INT("no output defined", procName, 1); + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + + /* Make the two required structs */ + if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return ERROR_INT("png_ptr not made", procName, 1); + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return ERROR_INT("info_ptr not made", procName, 1); + } + + /* Set up png setjmp error handling. + * Without this, an error calls exit. */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + if (pcmap && *pcmap) pixcmapDestroy(pcmap); + return ERROR_INT("internal png error", procName, 1); + } + + /* Read the metadata and check if there is a colormap */ + rewind(fp); + png_init_io(png_ptr, fp); + png_read_info(png_ptr, info_ptr); + color_type = png_get_color_type(png_ptr, info_ptr); + if (color_type != PNG_COLOR_TYPE_PALETTE && + color_type != PNG_COLOR_MASK_PALETTE) { + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + return 0; + } + + /* Optionally, read the colormap */ + if (pcmap) { + bit_depth = png_get_bit_depth(png_ptr, info_ptr); + png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + *pcmap = pixcmapCreate(bit_depth); /* spp == 1 */ + for (cindex = 0; cindex < num_palette; cindex++) { + rval = palette[cindex].red; + gval = palette[cindex].green; + bval = palette[cindex].blue; + pixcmapAddColor(*pcmap, rval, gval, bval); + } + } + + /* Optionally, look for transparency. Note that the colormap + * has been initialized to fully opaque. */ + if (ptransparency && png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { + png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); + if (trans) { + for (i = 0; i < num_trans; i++) { + if (trans[i] < 255) { /* not fully opaque */ + *ptransparency = 1; + if (pcmap) pixcmapSetAlpha(*pcmap, i, trans[i]); + } + } + } else { + L_ERROR("transparency array not returned\n", procName); + } + } + + png_destroy_read_struct(&png_ptr, &info_ptr, NULL); + rewind(fp); + return 0; +} + + +/*---------------------------------------------------------------------* + * Writing png through stream * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWritePng() + * + * \param[in] filename + * \param[in] pix + * \param[in] gamma + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Special version for writing png with a specified gamma.
+ *          When using pixWrite(), no field is given for gamma.
+ * 
+ */ +l_ok +pixWritePng(const char *filename, + PIX *pix, + l_float32 gamma) +{ +FILE *fp; + + PROCNAME("pixWritePng"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + + if (pixWriteStreamPng(fp, pix, gamma)) { + fclose(fp); + return ERROR_INT("pix not written to stream", procName, 1); + } + + fclose(fp); + return 0; +} + + +/*! + * \brief pixWriteStreamPng() + * + * \param[in] fp file stream + * \param[in] pix + * \param[in] gamma use 0.0 if gamma is not defined + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If called from pixWriteStream(), the stream is positioned
+ *          at the beginning of the file.
+ *      (2) To do sequential writes of png format images to a stream,
+ *          use pixWriteStreamPng() directly.
+ *      (3) gamma is an optional png chunk.  If no gamma value is to be
+ *          placed into the file, use gamma = 0.0.  Otherwise, if
+ *          gamma > 0.0, its value is written into the header.
+ *      (4) The use of gamma in png is highly problematic.  For an illuminating
+ *          discussion, see:  http://hsivonen.iki.fi/png-gamma/
+ *      (5) What is the effect/meaning of gamma in the png file?  This
+ *          gamma, which we can call the 'source' gamma, is the
+ *          inverse of the gamma that was used in enhance.c to brighten
+ *          or darken images.  The 'source' gamma is supposed to indicate
+ *          the intensity mapping that was done at the time the
+ *          image was captured.  Display programs typically apply a
+ *          'display' gamma of 2.2 to the output, which is intended
+ *          to linearize the intensity based on the response of
+ *          thermionic tubes (CRTs).  Flat panel LCDs have typically
+ *          been designed to give a similar response as CRTs (call it
+ *          "backward compatibility").  The 'display' gamma is
+ *          in some sense the inverse of the 'source' gamma.
+ *          jpeg encoders attached to scanners and cameras will lighten
+ *          the pixels, applying a gamma corresponding to approximately
+ *          a square-root relation of output vs input:
+ *                output = input^(gamma)
+ *          where gamma is often set near 0.4545  (1/gamma is 2.2).
+ *          This is stored in the image file.  Then if the display
+ *          program reads the gamma, it will apply a display gamma,
+ *          typically about 2.2; the product is 1.0, and the
+ *          display program produces a linear output.  This works because
+ *          the dark colors were appropriately boosted by the scanner,
+ *          as described by the 'source' gamma, so they should not
+ *          be further boosted by the display program.
+ *      (6) As an example, with xv and display, if no gamma is stored,
+ *          the program acts as if gamma were 0.4545, multiplies this by 2.2,
+ *          and does a linear rendering.  Taking this as a baseline
+ *          brightness, if the stored gamma is:
+ *              > 0.4545, the image is rendered lighter than baseline
+ *              < 0.4545, the image is rendered darker than baseline
+ *          In contrast, gqview seems to ignore the gamma chunk in png.
+ *      (7) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
+ *          and 32.  However, it is possible, and in some cases desirable,
+ *          to write out a png file using an rgb pix that has 24 bpp.
+ *          For example, the open source xpdf SplashBitmap class generates
+ *          24 bpp rgb images.  Consequently, we enable writing 24 bpp pix.
+ *          To generate such a pix, you can make a 24 bpp pix without data
+ *          and assign the data array to the pix; e.g.,
+ *              pix = pixCreateHeader(w, h, 24);
+ *              pixSetData(pix, rgbdata);
+ *          See pixConvert32To24() for an example, where we get rgbdata
+ *          from the 32 bpp pix.  Caution: do not call pixSetPadBits(),
+ *          because the alignment is wrong and you may erase part of the
+ *          last pixel on each line.
+ *      (8) If the pix has a colormap, it is written to file.  In most
+ *          situations, the alpha component is 255 for each colormap entry,
+ *          which is opaque and indicates that it should be ignored.
+ *          However, if any alpha component is not 255, it is assumed that
+ *          the alpha values are valid, and they are written to the png
+ *          file in a tRNS segment.  On readback, the tRNS segment is
+ *          identified, and the colormapped image with alpha is converted
+ *          to a 4 spp rgba image.
+ * 
+ */ +l_ok +pixWriteStreamPng(FILE *fp, + PIX *pix, + l_float32 gamma) +{ +char commentstring[] = "Comment"; +l_int32 i, j, k; +l_int32 wpl, d, spp, cmflag, opaque; +l_int32 ncolors, compval; +l_int32 *rmap, *gmap, *bmap, *amap; +l_uint32 *data, *ppixel; +png_byte bit_depth, color_type; +png_byte alpha[256]; +png_uint_32 w, h; +png_uint_32 xres, yres; +png_bytep *row_pointers; +png_bytep rowbuffer; +png_structp png_ptr; +png_infop info_ptr; +png_colorp palette; +PIX *pix1; +PIXCMAP *cmap; +char *text; + + PROCNAME("pixWriteStreamPng"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + /* Allocate the 2 data structures */ + if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return ERROR_INT("png_ptr not made", procName, 1); + + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return ERROR_INT("info_ptr not made", procName, 1); + } + + /* Set up png setjmp error handling */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_write_struct(&png_ptr, &info_ptr); + return ERROR_INT("internal png error", procName, 1); + } + + png_init_io(png_ptr, fp); + + /* With best zlib compression (9), get between 1 and 10% improvement + * over default (6), but the compression is 3 to 10 times slower. + * Use the zlib default (6) as our default compression unless + * pix->special falls in the range [10 ... 19]; then subtract 10 + * to get the compression value. */ + compval = Z_DEFAULT_COMPRESSION; + if (pix->special >= 10 && pix->special < 20) + compval = pix->special - 10; + png_set_compression_level(png_ptr, compval); + + w = pixGetWidth(pix); + h = pixGetHeight(pix); + d = pixGetDepth(pix); + spp = pixGetSpp(pix); + if ((cmap = pixGetColormap(pix))) + cmflag = 1; + else + cmflag = 0; + pixSetPadBits(pix, 0); + + /* Set the color type and bit depth. */ + if (d == 32 && spp == 4) { + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGBA; /* 6 */ + cmflag = 0; /* ignore if it exists */ + } else if (d == 24 || d == 32) { + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGB; /* 2 */ + cmflag = 0; /* ignore if it exists */ + } else { + bit_depth = d; + color_type = PNG_COLOR_TYPE_GRAY; /* 0 */ + } + if (cmflag) + color_type = PNG_COLOR_TYPE_PALETTE; /* 3 */ + +#if DEBUG_WRITE + fprintf(stderr, "cmflag = %d, bit_depth = %d, color_type = %d\n", + cmflag, bit_depth, color_type); +#endif /* DEBUG_WRITE */ + + png_set_IHDR(png_ptr, info_ptr, w, h, bit_depth, color_type, + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, + PNG_FILTER_TYPE_BASE); + + /* Store resolution in ppm, if known */ + xres = (png_uint_32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); + yres = (png_uint_32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); + if ((xres == 0) || (yres == 0)) + png_set_pHYs(png_ptr, info_ptr, 0, 0, PNG_RESOLUTION_UNKNOWN); + else + png_set_pHYs(png_ptr, info_ptr, xres, yres, PNG_RESOLUTION_METER); + + if (cmflag) { + pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap); + ncolors = pixcmapGetCount(cmap); + pixcmapIsOpaque(cmap, &opaque); + + /* Make and save the palette */ + palette = (png_colorp)LEPT_CALLOC(ncolors, sizeof(png_color)); + for (i = 0; i < ncolors; i++) { + palette[i].red = (png_byte)rmap[i]; + palette[i].green = (png_byte)gmap[i]; + palette[i].blue = (png_byte)bmap[i]; + alpha[i] = (png_byte)amap[i]; + } + + png_set_PLTE(png_ptr, info_ptr, palette, (int)ncolors); + if (!opaque) /* alpha channel has some transparency; assume valid */ + png_set_tRNS(png_ptr, info_ptr, (png_bytep)alpha, + (int)ncolors, NULL); + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + LEPT_FREE(amap); + } + + /* 0.4545 is treated as the default by some image + * display programs (not gqview). A value > 0.4545 will + * lighten an image as displayed by xv, display, etc. */ + if (gamma > 0.0) + png_set_gAMA(png_ptr, info_ptr, (l_float64)gamma); + + if ((text = pixGetText(pix))) { + png_text text_chunk; + text_chunk.compression = PNG_TEXT_COMPRESSION_NONE; + text_chunk.key = commentstring; + text_chunk.text = text; + text_chunk.text_length = strlen(text); +#ifdef PNG_ITXT_SUPPORTED + text_chunk.itxt_length = 0; + text_chunk.lang = NULL; + text_chunk.lang_key = NULL; +#endif + png_set_text(png_ptr, info_ptr, &text_chunk, 1); + } + + /* Write header and palette info */ + png_write_info(png_ptr, info_ptr); + + if ((d != 32) && (d != 24)) { /* not rgb color */ + /* Generate a temporary pix with bytes swapped. + * For writing a 1 bpp image as png: + * ~ if no colormap, invert the data, because png writes + * black as 0 + * ~ if colormapped, do not invert the data; the two RGBA + * colors can have any value. */ + if (d == 1 && !cmap) { + pix1 = pixInvert(NULL, pix); + pixEndianByteSwap(pix1); + } else { + pix1 = pixEndianByteSwapNew(pix); + } + if (!pix1) { + png_destroy_write_struct(&png_ptr, &info_ptr); + if (cmflag) LEPT_FREE(palette); + return ERROR_INT("pix1 not made", procName, 1); + } + + /* Make and assign array of image row pointers */ + row_pointers = (png_bytep *)LEPT_CALLOC(h, sizeof(png_bytep)); + wpl = pixGetWpl(pix1); + data = pixGetData(pix1); + for (i = 0; i < h; i++) + row_pointers[i] = (png_bytep)(data + i * wpl); + png_set_rows(png_ptr, info_ptr, row_pointers); + + /* Transfer the data */ + png_write_image(png_ptr, row_pointers); + png_write_end(png_ptr, info_ptr); + + if (cmflag) LEPT_FREE(palette); + LEPT_FREE(row_pointers); + pixDestroy(&pix1); + png_destroy_write_struct(&png_ptr, &info_ptr); + return 0; + } + + /* For rgb, compose and write a row at a time */ + data = pixGetData(pix); + wpl = pixGetWpl(pix); + if (d == 24) { /* See note 7 above: special case of 24 bpp rgb */ + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + png_write_rows(png_ptr, (png_bytepp)&ppixel, 1); + } + } else { /* 32 bpp rgb and rgba. Write out the alpha channel if either + * the pix has 4 spp or writing it is requested anyway */ + rowbuffer = (png_bytep)LEPT_CALLOC(w, 4); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + for (j = k = 0; j < w; j++) { + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); + if (spp == 4) + rowbuffer[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); + ppixel++; + } + + png_write_rows(png_ptr, &rowbuffer, 1); + } + LEPT_FREE(rowbuffer); + } + + png_write_end(png_ptr, info_ptr); + + if (cmflag) + LEPT_FREE(palette); + png_destroy_write_struct(&png_ptr, &info_ptr); + return 0; +} + + +/*! + * \brief pixSetZlibCompression() + * + * \param[in] pix + * \param[in] compval zlib compression value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Valid zlib compression values are in the interval [0 ... 9],
+ *          where, as defined in zlib.h:
+ *            0         Z_NO_COMPRESSION
+ *            1         Z_BEST_SPEED    (poorest compression)
+ *            9         Z_BEST_COMPRESSION
+ *          For the default value, use either of these:
+ *            6         Z_DEFAULT_COMPRESSION
+ *           -1         (resolves to Z_DEFAULT_COMPRESSION)
+ *      (2) If you use the defined constants in zlib.h instead of the
+ *          compression integers given above, you must include zlib.h.
+ * 
+ */ +l_ok +pixSetZlibCompression(PIX *pix, + l_int32 compval) +{ + PROCNAME("pixSetZlibCompression"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (compval < 0 || compval > 9) { + L_ERROR("Invalid zlib comp val; using default\n", procName); + compval = Z_DEFAULT_COMPRESSION; + } + pixSetSpecial(pix, 10 + compval); /* valid range [10 ... 19] */ + return 0; +} + + +/*---------------------------------------------------------------------* + * Set flag for stripping 16 bits on reading * + *---------------------------------------------------------------------*/ +/*! + * \brief l_pngSetReadStrip16To8() + * + * \param[in] flag 1 for stripping 16 bpp to 8 bpp on reading; + * 0 for leaving 16 bpp + * \return void + */ +void +l_pngSetReadStrip16To8(l_int32 flag) +{ + var_PNG_STRIP_16_TO_8 = flag; +} + + +/*-------------------------------------------------------------------------* + * Memio utility * + * libpng read/write callback replacements for performing memory I/O * + * * + * Copyright (C) 2017 Milner Technologies, Inc. This content is a * + * component of leptonica and is provided under the terms of the * + * Leptonica license. * + *-------------------------------------------------------------------------*/ + + /*! A node in a linked list of memory buffers that hold I/O content */ +struct MemIOData +{ + char* m_Buffer; /*!< pointer to this node's I/O content */ + l_int32 m_Count; /*!< number of I/O content bytes read or written */ + l_int32 m_Size; /*!< allocated size of m_buffer */ + struct MemIOData *m_Next; /*!< pointer to the next node in the list; */ + /*!< zero if this is the last node */ + struct MemIOData *m_Last; /*!< pointer to the last node in the linked */ + /*!< list. The last node is where new */ + /*!< content is written. */ +}; +typedef struct MemIOData MEMIODATA; + +static void memio_png_write_data(png_structp png_ptr, png_bytep data, + png_size_t length); +static void memio_png_flush(MEMIODATA* pthing); +static void memio_png_read_data(png_structp png_ptr, png_bytep outBytes, + png_size_t byteCountToRead); +static void memio_free(MEMIODATA* pthing); + +static const l_int32 MEMIO_BUFFER_SIZE = 8192; /*! buffer alloc size */ + +/* + * \brief memio_png_write_data() + * + * \param[in] png_ptr + * \param[in] data + * \param[in] len size of array data in bytes + * + *
+ * Notes:
+ *      (1) This is a libpng callback for writing an image into a
+ *          linked list of memory buffers.
+ * 
+ */ +static void +memio_png_write_data(png_structp png_ptr, + png_bytep data, + png_size_t len) +{ +MEMIODATA *thing, *last; +l_int32 written = 0; +l_int32 remainingSpace, remainingToWrite; + + thing = (struct MemIOData*)png_get_io_ptr(png_ptr); + last = (struct MemIOData*)thing->m_Last; + if (last->m_Buffer == NULL) { + if (len > MEMIO_BUFFER_SIZE) { + last->m_Buffer = (char *)LEPT_MALLOC(len); + memcpy(last->m_Buffer, data, len); + last->m_Size = last->m_Count = len; + return; + } + + last->m_Buffer = (char *)LEPT_MALLOC(MEMIO_BUFFER_SIZE); + last->m_Size = MEMIO_BUFFER_SIZE; + } + + while (written < len) { + if (last->m_Count == last->m_Size) { + MEMIODATA* next = (MEMIODATA *)LEPT_MALLOC(sizeof(MEMIODATA)); + next->m_Next = NULL; + next->m_Count = 0; + next->m_Last = next; + + last->m_Next = next; + last = thing->m_Last = next; + + last->m_Buffer = (char *)LEPT_MALLOC(MEMIO_BUFFER_SIZE); + last->m_Size = MEMIO_BUFFER_SIZE; + } + + remainingSpace = last->m_Size - last->m_Count; + remainingToWrite = len - written; + if (remainingSpace < remainingToWrite) { + memcpy(last->m_Buffer + last->m_Count, data + written, + remainingSpace); + written += remainingSpace; + last->m_Count += remainingSpace; + } else { + memcpy(last->m_Buffer + last->m_Count, data + written, + remainingToWrite); + written += remainingToWrite; + last->m_Count += remainingToWrite; + } + } +} + + +/* + * \brief memio_png_flush() + * + * \param[in] pthing + * + *
+ * Notes:
+ *      (1) This consolidates write buffers into a single buffer at the
+ *          haed of the link list of buffers.
+ * 
+ */ +static void +memio_png_flush(MEMIODATA *pthing) +{ +l_int32 amount = 0; +l_int32 copied = 0; +MEMIODATA *buffer = 0; +char *data = 0; + + /* If the data is in one buffer, give the buffer to the user. */ + if (pthing->m_Next == NULL) return; + + /* Consolidate multiple buffers into one new one; add the buffer + * sizes together. */ + amount = pthing->m_Count; + buffer = pthing->m_Next; + while (buffer != NULL) { + amount += buffer->m_Count; + buffer = buffer->m_Next; + } + + /* Copy data to a new buffer. */ + data = (char *)LEPT_MALLOC(amount); + memcpy(data, pthing->m_Buffer, pthing->m_Count); + copied = pthing->m_Count; + + LEPT_FREE(pthing->m_Buffer); + pthing->m_Buffer = NULL; + + /* Don't delete original "thing" because we don't control it. */ + buffer = pthing->m_Next; + pthing->m_Next = NULL; + while (buffer != NULL && copied < amount) { + MEMIODATA* old; + memcpy(data + copied, buffer->m_Buffer, buffer->m_Count); + copied += buffer->m_Count; + + old = buffer; + buffer = buffer->m_Next; + + LEPT_FREE(old->m_Buffer); + LEPT_FREE(old); + } + + pthing->m_Buffer = data; + pthing->m_Count = copied; + pthing->m_Size = amount; + return; +} + + +/* + * \brief memio_png_read_data() + * + * \param[in] png_ptr + * \param[in] outBytes + * \param[in] byteCountToRead + * + *
+ * Notes:
+ *      (1) This is a libpng callback that reads an image from a single
+ *          memory buffer.
+ * 
+ */ +static void +memio_png_read_data(png_structp png_ptr, + png_bytep outBytes, + png_size_t byteCountToRead) +{ +MEMIODATA *thing; + + thing = (MEMIODATA *)png_get_io_ptr(png_ptr); + if (byteCountToRead > (thing->m_Size - thing->m_Count)) { + png_error(png_ptr, "read error in memio_png_read_data"); + } + memcpy(outBytes, thing->m_Buffer + thing->m_Count, byteCountToRead); + thing->m_Count += byteCountToRead; +} + + +/* + * \brief memio_free() + * + * \param[in] pthing + * + *
+ * Notes:
+ *      (1) This frees all the write buffers in the linked list.  It must
+ *          be done before exiting the pixWriteMemPng().
+ * 
+ */ +static void +memio_free(MEMIODATA* pthing) +{ +MEMIODATA *buffer, *old; + + if (pthing->m_Buffer != NULL) + LEPT_FREE(pthing->m_Buffer); + + pthing->m_Buffer = NULL; + buffer = pthing->m_Next; + while (buffer != NULL) { + old = buffer; + buffer = buffer->m_Next; + + if (old->m_Buffer != NULL) + LEPT_FREE(old->m_Buffer); + LEPT_FREE(old); + } +} + + +/*---------------------------------------------------------------------* + * Reading png from memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadMemPng() + * + * \param[in] filedata png compressed data in memory + * \param[in] filesize number of bytes in data + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixReastreamPng().
+ * 
+ */ +PIX * +pixReadMemPng(const l_uint8 *filedata, + size_t filesize) +{ +l_uint8 byte; +l_int32 rval, gval, bval; +l_int32 i, j, k, index, ncolors, bitval; +l_int32 wpl, d, spp, cindex, tRNS; +l_uint32 png_transforms; +l_uint32 *data, *line, *ppixel; +int num_palette, num_text, num_trans; +png_byte bit_depth, color_type, channels; +png_uint_32 w, h, rowbytes; +png_uint_32 xres, yres; +png_bytep rowptr, trans; +png_bytep *row_pointers; +png_structp png_ptr; +png_infop info_ptr, end_info; +png_colorp palette; +png_textp text_ptr; /* ptr to text_chunk */ +PIX *pix, *pix1; +PIXCMAP *cmap; +MEMIODATA state; + + PROCNAME("pixReadMemPng"); + + if (!filedata) + return (PIX *)ERROR_PTR("filedata not defined", procName, NULL); + if (filesize < 1) + return (PIX *)ERROR_PTR("invalid filesize", procName, NULL); + + state.m_Next = 0; + state.m_Count = 0; + state.m_Last = &state; + state.m_Buffer = (char*)filedata; + state.m_Size = filesize; + pix = NULL; + + /* Allocate the 3 data structures */ + if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return (PIX *)ERROR_PTR("png_ptr not made", procName, NULL); + + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); + return (PIX *)ERROR_PTR("info_ptr not made", procName, NULL); + } + + if ((end_info = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); + return (PIX *)ERROR_PTR("end_info not made", procName, NULL); + } + + /* Set up png setjmp error handling */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("internal png error", procName, NULL); + } + + png_set_read_fn(png_ptr, &state, memio_png_read_data); + + /* ---------------------------------------------------------- * + * Set the transforms flags. Whatever happens here, + * NEVER invert 1 bpp using PNG_TRANSFORM_INVERT_MONO. + * Also, do not use PNG_TRANSFORM_EXPAND, which would + * expand all images with bpp < 8 to 8 bpp. + * ---------------------------------------------------------- */ + /* To strip 16 --> 8 bit depth, use PNG_TRANSFORM_STRIP_16 */ + if (var_PNG_STRIP_16_TO_8 == 1) { /* our default */ + png_transforms = PNG_TRANSFORM_STRIP_16; + } else { + png_transforms = PNG_TRANSFORM_IDENTITY; + L_INFO("not stripping 16 --> 8 in png reading\n", procName); + } + + /* Read it */ + png_read_png(png_ptr, info_ptr, png_transforms, NULL); + + row_pointers = png_get_rows(png_ptr, info_ptr); + w = png_get_image_width(png_ptr, info_ptr); + h = png_get_image_height(png_ptr, info_ptr); + bit_depth = png_get_bit_depth(png_ptr, info_ptr); + rowbytes = png_get_rowbytes(png_ptr, info_ptr); + color_type = png_get_color_type(png_ptr, info_ptr); + channels = png_get_channels(png_ptr, info_ptr); + spp = channels; + tRNS = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ? 1 : 0; + + if (spp == 1) { + d = bit_depth; + } else { /* spp == 2 (gray + alpha), spp == 3 (rgb), spp == 4 (rgba) */ + d = 4 * bit_depth; + } + + /* Remove if/when this is implemented for all bit_depths */ + if (spp == 3 && bit_depth != 8) { + fprintf(stderr, "Help: spp = 3 and depth = %d != 8\n!!", bit_depth); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("not implemented for this depth", + procName, NULL); + } + + cmap = NULL; + if (color_type == PNG_COLOR_TYPE_PALETTE || + color_type == PNG_COLOR_MASK_PALETTE) { /* generate a colormap */ + png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); + cmap = pixcmapCreate(d); /* spp == 1 */ + for (cindex = 0; cindex < num_palette; cindex++) { + rval = palette[cindex].red; + gval = palette[cindex].green; + bval = palette[cindex].blue; + pixcmapAddColor(cmap, rval, gval, bval); + } + } + + if ((pix = pixCreate(w, h, d)) == NULL) { + pixcmapDestroy(&cmap); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + pixcmapDestroy(&cmap); + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + } + pixSetInputFormat(pix, IFF_PNG); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + pixSetColormap(pix, cmap); + pixSetSpp(pix, spp); + + if (spp == 1 && !tRNS) { /* copy straight from buffer to pix */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0; j < rowbytes; j++) { + SET_DATA_BYTE(line, j, rowptr[j]); + } + } + } else if (spp == 2) { /* grayscale + alpha; convert to RGBA */ + L_INFO("converting (gray + alpha) ==> RGBA\n", procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = k = 0; j < w; j++) { + /* Copy gray value into r, g and b */ + SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); + ppixel++; + } + } + pixSetSpp(pix, 4); /* we do not support 2 spp pix */ + } else if (spp == 3 || spp == 4) { + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = k = 0; j < w; j++) { + SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k++]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k++]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); + if (spp == 4) + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); + ppixel++; + } + } + } + + /* Special spp == 1 cases with transparency: + * (1) 8 bpp without colormap; assume full transparency + * (2) 1 bpp with colormap + trans array (for alpha) + * (3) 8 bpp with colormap + trans array (for alpha) + * These all require converting to RGBA */ + if (spp == 1 && tRNS) { + if (!cmap) { + /* Case 1: make fully transparent RGBA image */ + L_INFO("transparency, 1 spp, no colormap, no transparency array: " + "convention is fully transparent image\n", procName); + L_INFO("converting (fully transparent 1 spp) ==> RGBA\n", procName); + pixDestroy(&pix); + pix = pixCreate(w, h, 32); /* init to alpha = 0 (transparent) */ + pixSetSpp(pix, 4); + } else { + L_INFO("converting (cmap + alpha) ==> RGBA\n", procName); + + /* Grab the transparency array */ + png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); + if (!trans) { /* invalid png file */ + pixDestroy(&pix); + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return (PIX *)ERROR_PTR("cmap, tRNS, but no transparency array", + procName, NULL); + } + + /* Save the cmap and destroy the pix */ + cmap = pixcmapCopy(pixGetColormap(pix)); + ncolors = pixcmapGetCount(cmap); + pixDestroy(&pix); + + /* Start over with 32 bit RGBA */ + pix = pixCreate(w, h, 32); + wpl = pixGetWpl(pix); + data = pixGetData(pix); + pixSetSpp(pix, 4); + +#if DEBUG_READ + fprintf(stderr, "ncolors = %d, num_trans = %d\n", + ncolors, num_trans); + for (i = 0; i < ncolors; i++) { + pixcmapGetColor(cmap, i, &rval, &gval, &bval); + if (i < num_trans) { + fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,%d)\n", + rval, gval, bval, trans[i]); + } else { + fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,<<255>>)\n", + rval, gval, bval); + } + } +#endif /* DEBUG_READ */ + + /* Extract the data and convert to RGBA */ + if (d == 1) { + /* Case 2: 1 bpp with transparency (usually) behind white */ + L_INFO("converting 1 bpp cmap with alpha ==> RGBA\n", procName); + if (num_trans == 1) + L_INFO("num_trans = 1; second color opaque by default\n", + procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0, index = 0; j < rowbytes; j++) { + byte = rowptr[j]; + for (k = 0; k < 8 && index < w; k++, index++) { + bitval = (byte >> (7 - k)) & 1; + pixcmapGetColor(cmap, bitval, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, ppixel); + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, + bitval < num_trans ? trans[bitval] : 255); + ppixel++; + } + } + } + } else if (d == 8) { + /* Case 3: 8 bpp with cmap and associated transparency */ + L_INFO("converting 8 bpp cmap with alpha ==> RGBA\n", procName); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + rowptr = row_pointers[i]; + for (j = 0; j < w; j++) { + index = rowptr[j]; + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, ppixel); + /* Assume missing entries to be 255 (opaque) + * according to the spec: + * http://www.w3.org/TR/PNG/#11tRNS */ + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, + index < num_trans ? trans[index] : 255); + ppixel++; + } + } + } else { + L_ERROR("spp == 1, cmap, trans array, invalid depth: %d\n", + procName, d); + } + pixcmapDestroy(&cmap); + } + } + +#if DEBUG_READ + if (cmap) { + for (i = 0; i < 16; i++) { + fprintf(stderr, "[%d] = %d\n", i, + ((l_uint8 *)(cmap->array))[i]); + } + } +#endif /* DEBUG_READ */ + + /* Final adjustments for bpp = 1. + * + If there is no colormap, the image must be inverted because + * png stores black pixels as 0. + * + We have already handled the case of cmapped, 1 bpp pix + * with transparency, where the output pix is 32 bpp RGBA. + * If there is no transparency but the pix has a colormap, + * we remove the colormap, because functions operating on + * 1 bpp images in leptonica assume no colormap. + * + The colormap must be removed in such a way that the pixel + * values are not changed. If the values are only black and + * white, we return a 1 bpp image; if gray, return an 8 bpp pix; + * otherwise, return a 32 bpp rgb pix. + * + * Note that we cannot use the PNG_TRANSFORM_INVERT_MONO flag + * to do the inversion, because that flag (since version 1.0.9) + * inverts 8 bpp grayscale as well, which we don't want to do. + * (It also doesn't work if there is a colormap.) + * + * Note that if the input png is a 1-bit with colormap and + * transparency, it has already been rendered as a 32 bpp, + * spp = 4 rgba pix. + */ + if (pixGetDepth(pix) == 1) { + if (!cmap) { + pixInvert(pix, pix); + } else { + pix1 = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + pixDestroy(&pix); + pix = pix1; + } + } + + xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); + yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); + pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ + pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ + + /* Get the text if there is any */ + png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); + if (num_text && text_ptr) + pixSetText(pix, text_ptr->text); + + png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); + return pix; +} + + +/*---------------------------------------------------------------------* + * Writing png to memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteMemPng() + * + * \param[out] pfiledata png encoded data of pix + * \param[out] pfilesize size of png encoded data + * \param[in] pix + * \param[in] gamma use 0.0 if gamma is not defined + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStreamPng()
+ * 
+ */ +l_ok +pixWriteMemPng(l_uint8 **pfiledata, + size_t *pfilesize, + PIX *pix, + l_float32 gamma) +{ +char commentstring[] = "Comment"; +l_int32 i, j, k; +l_int32 wpl, d, spp, cmflag, opaque; +l_int32 ncolors, compval; +l_int32 *rmap, *gmap, *bmap, *amap; +l_uint32 *data, *ppixel; +png_byte bit_depth, color_type; +png_byte alpha[256]; +png_uint_32 w, h; +png_uint_32 xres, yres; +png_bytep *row_pointers; +png_bytep rowbuffer; +png_structp png_ptr; +png_infop info_ptr; +png_colorp palette; +PIX *pix1; +PIXCMAP *cmap; +char *text; +MEMIODATA state; + + PROCNAME("pixWriteMemPng"); + + if (pfiledata) *pfiledata = NULL; + if (pfilesize) *pfilesize = 0; + if (!pfiledata) + return ERROR_INT("&filedata not defined", procName, 1); + if (!pfilesize) + return ERROR_INT("&filesize not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + state.m_Buffer = 0; + state.m_Size = 0; + state.m_Next = 0; + state.m_Count = 0; + state.m_Last = &state; + + /* Allocate the 2 data structures */ + if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, + (png_voidp)NULL, NULL, NULL)) == NULL) + return ERROR_INT("png_ptr not made", procName, 1); + + if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { + png_destroy_write_struct(&png_ptr, (png_infopp)NULL); + return ERROR_INT("info_ptr not made", procName, 1); + } + + /* Set up png setjmp error handling */ + if (setjmp(png_jmpbuf(png_ptr))) { + png_destroy_write_struct(&png_ptr, &info_ptr); + return ERROR_INT("internal png error", procName, 1); + } + + png_set_write_fn(png_ptr, &state, memio_png_write_data, + (png_flush_ptr)NULL); + + /* With best zlib compression (9), get between 1 and 10% improvement + * over default (6), but the compression is 3 to 10 times slower. + * Use the zlib default (6) as our default compression unless + * pix->special falls in the range [10 ... 19]; then subtract 10 + * to get the compression value. */ + compval = Z_DEFAULT_COMPRESSION; + if (pix->special >= 10 && pix->special < 20) + compval = pix->special - 10; + png_set_compression_level(png_ptr, compval); + + w = pixGetWidth(pix); + h = pixGetHeight(pix); + d = pixGetDepth(pix); + spp = pixGetSpp(pix); + if ((cmap = pixGetColormap(pix))) + cmflag = 1; + else + cmflag = 0; + + /* Set the color type and bit depth. */ + if (d == 32 && spp == 4) { + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGBA; /* 6 */ + cmflag = 0; /* ignore if it exists */ + } else if (d == 24 || d == 32) { + bit_depth = 8; + color_type = PNG_COLOR_TYPE_RGB; /* 2 */ + cmflag = 0; /* ignore if it exists */ + } else { + bit_depth = d; + color_type = PNG_COLOR_TYPE_GRAY; /* 0 */ + } + if (cmflag) + color_type = PNG_COLOR_TYPE_PALETTE; /* 3 */ + +#if DEBUG_WRITE + fprintf(stderr, "cmflag = %d, bit_depth = %d, color_type = %d\n", + cmflag, bit_depth, color_type); +#endif /* DEBUG_WRITE */ + + png_set_IHDR(png_ptr, info_ptr, w, h, bit_depth, color_type, + PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, + PNG_FILTER_TYPE_BASE); + + /* Store resolution in ppm, if known */ + xres = (png_uint_32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); + yres = (png_uint_32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); + if ((xres == 0) || (yres == 0)) + png_set_pHYs(png_ptr, info_ptr, 0, 0, PNG_RESOLUTION_UNKNOWN); + else + png_set_pHYs(png_ptr, info_ptr, xres, yres, PNG_RESOLUTION_METER); + + if (cmflag) { + pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap); + ncolors = pixcmapGetCount(cmap); + pixcmapIsOpaque(cmap, &opaque); + + /* Make and save the palette */ + palette = (png_colorp)LEPT_CALLOC(ncolors, sizeof(png_color)); + for (i = 0; i < ncolors; i++) { + palette[i].red = (png_byte)rmap[i]; + palette[i].green = (png_byte)gmap[i]; + palette[i].blue = (png_byte)bmap[i]; + alpha[i] = (png_byte)amap[i]; + } + + png_set_PLTE(png_ptr, info_ptr, palette, (int)ncolors); + if (!opaque) /* alpha channel has some transparency; assume valid */ + png_set_tRNS(png_ptr, info_ptr, (png_bytep)alpha, + (int)ncolors, NULL); + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + LEPT_FREE(amap); + } + + /* 0.4545 is treated as the default by some image + * display programs (not gqview). A value > 0.4545 will + * lighten an image as displayed by xv, display, etc. */ + if (gamma > 0.0) + png_set_gAMA(png_ptr, info_ptr, (l_float64)gamma); + + if ((text = pixGetText(pix))) { + png_text text_chunk; + text_chunk.compression = PNG_TEXT_COMPRESSION_NONE; + text_chunk.key = commentstring; + text_chunk.text = text; + text_chunk.text_length = strlen(text); +#ifdef PNG_ITXT_SUPPORTED + text_chunk.itxt_length = 0; + text_chunk.lang = NULL; + text_chunk.lang_key = NULL; +#endif + png_set_text(png_ptr, info_ptr, &text_chunk, 1); + } + + /* Write header and palette info */ + png_write_info(png_ptr, info_ptr); + + if ((d != 32) && (d != 24)) { /* not rgb color */ + /* Generate a temporary pix with bytes swapped. + * For writing a 1 bpp image as png: + * ~ if no colormap, invert the data, because png writes + * black as 0 + * ~ if colormapped, do not invert the data; the two RGBA + * colors can have any value. */ + if (d == 1 && !cmap) { + pix1 = pixInvert(NULL, pix); + pixEndianByteSwap(pix1); + } else { + pix1 = pixEndianByteSwapNew(pix); + } + if (!pix1) { + png_destroy_write_struct(&png_ptr, &info_ptr); + if (cmflag) LEPT_FREE(palette); + memio_free(&state); + return ERROR_INT("pix1 not made", procName, 1); + } + + /* Make and assign array of image row pointers */ + row_pointers = (png_bytep *)LEPT_CALLOC(h, sizeof(png_bytep)); + wpl = pixGetWpl(pix1); + data = pixGetData(pix1); + for (i = 0; i < h; i++) + row_pointers[i] = (png_bytep)(data + i * wpl); + png_set_rows(png_ptr, info_ptr, row_pointers); + + /* Transfer the data */ + png_write_image(png_ptr, row_pointers); + png_write_end(png_ptr, info_ptr); + + if (cmflag) LEPT_FREE(palette); + LEPT_FREE(row_pointers); + pixDestroy(&pix1); + png_destroy_write_struct(&png_ptr, &info_ptr); + + memio_png_flush(&state); + *pfiledata = (l_uint8 *)state.m_Buffer; + state.m_Buffer = 0; + *pfilesize = state.m_Count; + memio_free(&state); + return 0; + } + + /* For rgb, compose and write a row at a time */ + data = pixGetData(pix); + wpl = pixGetWpl(pix); + if (d == 24) { /* See note 7 above: special case of 24 bpp rgb */ + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + png_write_rows(png_ptr, (png_bytepp)&ppixel, 1); + } + } else { /* 32 bpp rgb and rgba. Write out the alpha channel if either + * the pix has 4 spp or writing it is requested anyway */ + rowbuffer = (png_bytep)LEPT_CALLOC(w, 4); + for (i = 0; i < h; i++) { + ppixel = data + i * wpl; + for (j = k = 0; j < w; j++) { + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); + rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); + if (spp == 4) + rowbuffer[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); + ppixel++; + } + + png_write_rows(png_ptr, &rowbuffer, 1); + } + LEPT_FREE(rowbuffer); + } + + png_write_end(png_ptr, info_ptr); + + if (cmflag) + LEPT_FREE(palette); + png_destroy_write_struct(&png_ptr, &info_ptr); + + memio_png_flush(&state); + *pfiledata = (l_uint8 *)state.m_Buffer; + state.m_Buffer = 0; + *pfilesize = state.m_Count; + memio_free(&state); + return 0; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBPNG */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pngiostub.c b/3rdparty/hgOCR/leptonica/pngiostub.c new file mode 100644 index 00000000..314c63b9 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pngiostub.c @@ -0,0 +1,143 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pngiostub.c + *
+ *
+ *     Stubs for pngio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBPNG /* defined in environ.h */ +/* --------------------------------------------*/ + +PIX * pixReadStreamPng(FILE *fp) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamPng", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderPng(const char *filename, l_int32 *pwidth, l_int32 *pheight, + l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) +{ + return ERROR_INT("function not present", "readHeaderPng", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok freadHeaderPng(FILE *fp, l_int32 *pwidth, l_int32 *pheight, + l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) +{ + return ERROR_INT("function not present", "freadHeaderPng", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemPng(const l_uint8 *data, size_t size, l_int32 *pwidth, + l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, + l_int32 *piscmap) +{ + return ERROR_INT("function not present", "readHeaderMemPng", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_int32 fgetPngResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) +{ + return ERROR_INT("function not present", "fgetPngResolution", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok isPngInterlaced(const char *filename, l_int32 *pinterlaced) +{ + return ERROR_INT("function not present", "isPngInterlaced", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok fgetPngColormapInfo(FILE *fp, PIXCMAP **pcmap, l_int32 *ptransparency) +{ + return ERROR_INT("function not present", "fgetPngColormapInfo", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWritePng(const char *filename, PIX *pix, l_float32 gamma) +{ + return ERROR_INT("function not present", "pixWritePng", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma) +{ + return ERROR_INT("function not present", "pixWriteStreamPng", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixSetZlibCompression(PIX *pix, l_int32 compval) + +{ + return ERROR_INT("function not present", "pixSetZlibCompression", 1); +} + +/* ----------------------------------------------------------------------*/ + +void l_pngSetReadStrip16To8(l_int32 flag) +{ + L_ERROR("function not present\n", "l_pngSetReadStrip16To8"); + return; +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemPng(const l_uint8 *filedata, size_t filesize) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadMemPng", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemPng(l_uint8 **pfiledata, size_t *pfilesize, PIX *pix, + l_float32 gamma) +{ + return ERROR_INT("function not present", "pixWriteMemPng", 1); +} + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBPNG */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pnmio.c b/3rdparty/hgOCR/leptonica/pnmio.c new file mode 100644 index 00000000..8f64bb48 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pnmio.c @@ -0,0 +1,1474 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pnmio.c + *
+ *
+ *      Stream interface
+ *          PIX             *pixReadStreamPnm()
+ *          l_int32          readHeaderPnm()
+ *          l_int32          freadHeaderPnm()
+ *          l_int32          pixWriteStreamPnm()
+ *          l_int32          pixWriteStreamAsciiPnm()
+ *          l_int32          pixWriteStreamPam()
+ *
+ *      Read/write to memory
+ *          PIX             *pixReadMemPnm()
+ *          l_int32          readHeaderMemPnm()
+ *          l_int32          pixWriteMemPnm()
+ *          l_int32          pixWriteMemPam()
+ *
+ *      Local helpers
+ *          static l_int32   pnmReadNextAsciiValue();
+ *          static l_int32   pnmReadNextNumber();
+ *          static l_int32   pnmReadNextString();
+ *          static l_int32   pnmSkipCommentLines();
+ *
+ *      These are here by popular demand, with the help of Mattias
+ *      Kregert (mattias@kregert.se), who provided the first implementation.
+ *
+ *      The pnm formats are exceedingly simple, because they have
+ *      no compression and no colormaps.  They support images that
+ *      are 1 bpp; 2, 4, 8 and 16 bpp grayscale; and rgb.
+ *
+ *      The original pnm formats ("ASCII") are included for completeness,
+ *      but their use is deprecated for all but tiny iconic images.
+ *      They are extremely wasteful of memory; for example, the P1 binary
+ *      ASCII format is 16 times as big as the packed uncompressed
+ *      format, because 2 characters are used to represent every bit
+ *      (pixel) in the image.  Reading is slow because we check for extra
+ *      white space and EOL at every sample value.
+ *
+ *      The packed pnm formats ("raw") give file sizes similar to
+ *      bmp files, which are uncompressed packed.  However, bmp
+ *      are more flexible, because they can support colormaps.
+ *
+ *      We don't differentiate between the different types ("pbm",
+ *      "pgm", "ppm") at the interface level, because this is really a
+ *      "distinction without a difference."  You read a file, you get
+ *      the appropriate Pix.  You write a file from a Pix, you get the
+ *      appropriate type of file.  If there is a colormap on the Pix,
+ *      and the Pix is more than 1 bpp, you get either an 8 bpp pgm
+ *      or a 24 bpp RGB pnm, depending on whether the colormap colors
+ *      are gray or rgb, respectively.
+ *
+ *      This follows the general policy that the I/O routines don't
+ *      make decisions about the content of the image -- you do that
+ *      with image processing before you write it out to file.
+ *      The I/O routines just try to make the closest connection
+ *      possible between the file and the Pix in memory.
+ *
+ *      On systems like windows without fmemopen() and open_memstream(),
+ *      we write data to a temp file and read it back for operations
+ *      between pix and compressed-data, such as pixReadMemPnm() and
+ *      pixWriteMemPnm().
+ *
+ *      The P7 format is new. It introduced a header with multiple
+ *      lines containing distinct tags for the various fields.
+ *      See: http://netpbm.sourceforge.net/doc/pam.html
+ *
+ *        WIDTH          ; mandatory, exactly once
+ *        HEIGHT         ; mandatory, exactly once
+ *        DEPTH          ; mandatory, exactly once,
+ *                            ; its meaning is equivalent to spp
+ *        MAXVAL         ; mandatory, one of 1, 3, 15, 255 or 65535
+ *        TUPLTYPE    ; optional; BLACKANDWHITE, GRAYSCALE, RGB
+ *                            ; and optional suffix _ALPHA, e.g. RGB_ALPHA
+ *        ENDHDR              ; mandatory, last header line
+ *
+ *      Reading BLACKANDWHITE_ALPHA and GRAYSCALE_ALPHA, which have a DEPTH
+ *      value of 2, is supported. The original image is converted to a Pix
+ *      with 32-bpp and alpha channel (spp == 4).
+ *
+ *      Writing P7 format is currently selected for 32-bpp with alpha
+ *      channel, i.e. for Pix which have spp == 4, using pixWriteStreamPam().
+ *      Jürgen Buchmüller provided the implementation for the P7 (pam) format.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if USE_PNMIO /* defined in environ.h */ +/* --------------------------------------------*/ + +static l_int32 pnmReadNextAsciiValue(FILE *fp, l_int32 *pval); +static l_int32 pnmReadNextNumber(FILE *fp, l_int32 *pval); +static l_int32 pnmReadNextString(FILE *fp, char *buff, l_int32 size); +static l_int32 pnmSkipCommentLines(FILE *fp); + + /* a sanity check on the size read from file */ +static const l_int32 MAX_PNM_WIDTH = 100000; +static const l_int32 MAX_PNM_HEIGHT = 100000; + + +/*--------------------------------------------------------------------* + * Stream interface * + *--------------------------------------------------------------------*/ +/*! + * \brief pixReadStreamPnm() + * + * \param[in] fp file stream opened for read + * \return pix, or NULL on error + */ +PIX * +pixReadStreamPnm(FILE *fp) +{ +l_uint8 val8, rval8, gval8, bval8, aval8, mask8; +l_uint16 val16, rval16, gval16, bval16, aval16; +l_int32 w, h, d, bps, spp, bpl, wpl, i, j, type; +l_int32 val, rval, gval, bval; +l_uint32 rgbval; +l_uint32 *line, *data; +PIX *pix; + + PROCNAME("pixReadStreamPnm"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + + if (freadHeaderPnm(fp, &w, &h, &d, &type, &bps, &spp)) + return (PIX *)ERROR_PTR( "header read failed", procName, NULL); + if (bps < 1 || bps > 16) + return (PIX *)ERROR_PTR( "invalid bps", procName, NULL); + if (spp < 1 || spp > 4) + return (PIX *)ERROR_PTR( "invalid spp", procName, NULL); + if ((pix = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR( "pix not made", procName, NULL); + pixSetInputFormat(pix, IFF_PNM); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + + /* If type == 6 and bps == 16, we use the code in type 7 + * to read 6 bytes/pixel from the input file. */ + if (type == 6 && bps == 16) + type = 7; + + switch (type) { + case 1: + case 2: + /* Old "ASCII" binary or gray format */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (pnmReadNextAsciiValue(fp, &val)) + return (PIX *)ERROR_PTR( "read abend", procName, pix); + pixSetPixel(pix, j, i, val); + } + } + break; + + case 3: + /* Old "ASCII" rgb format */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (pnmReadNextAsciiValue(fp, &rval)) + return (PIX *)ERROR_PTR("read abend", procName, pix); + if (pnmReadNextAsciiValue(fp, &gval)) + return (PIX *)ERROR_PTR("read abend", procName, pix); + if (pnmReadNextAsciiValue(fp, &bval)) + return (PIX *)ERROR_PTR("read abend", procName, pix); + composeRGBPixel(rval, gval, bval, &rgbval); + pixSetPixel(pix, j, i, rgbval); + } + } + break; + + case 4: + /* "raw" format for 1 bpp */ + bpl = (d * w + 7) / 8; + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < bpl; j++) { + if (fread(&val8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error in 4", procName, pix); + SET_DATA_BYTE(line, j, val8); + } + } + break; + + case 5: + /* "raw" format for grayscale */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + if (d != 16) { + for (j = 0; j < w; j++) { + if (fread(&val8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("error in 5", procName, pix); + if (d == 2) + SET_DATA_DIBIT(line, j, val8); + else if (d == 4) + SET_DATA_QBIT(line, j, val8); + else /* d == 8 */ + SET_DATA_BYTE(line, j, val8); + } + } else { /* d == 16 */ + for (j = 0; j < w; j++) { + if (fread(&val16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("16 bpp error", procName, pix); + SET_DATA_TWO_BYTES(line, j, val16); + } + } + } + break; + + case 6: + /* "raw" format, type == 6; 8 bps, rgb */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + if (fread(&rval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 6", + procName, pix); + if (fread(&gval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 6", + procName, pix); + if (fread(&bval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 6", + procName, pix); + composeRGBPixel(rval8, gval8, bval8, &rgbval); + line[j] = rgbval; + } + } + break; + + case 7: + /* "arbitrary" format; type == 7; */ + if (bps != 16) { + mask8 = (1 << bps) - 1; + switch (spp) { + case 1: /* 1, 2, 4, 8 bpp grayscale */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (fread(&val8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + val8 = val8 & mask8; + if (bps == 1) val8 ^= 1; /* white-is-1 photometry */ + pixSetPixel(pix, j, i, val8); + } + } + break; + + case 2: /* 1, 2, 4, 8 bpp grayscale + alpha */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (fread(&val8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&aval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + val8 = val8 & mask8; + aval8 = aval8 & mask8; + composeRGBAPixel(val8, val8, val8, aval8, &rgbval); + pixSetPixel(pix, j, i, rgbval); + } + } + pixSetSpp(pix, 4); + break; + + case 3: /* rgb */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + if (fread(&rval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&gval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&bval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + rval8 = rval8 & mask8; + gval8 = gval8 & mask8; + bval8 = bval8 & mask8; + composeRGBPixel(rval8, gval8, bval8, &rgbval); + line[j] = rgbval; + } + } + break; + + case 4: /* rgba */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + if (fread(&rval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&gval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&bval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&aval8, 1, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + rval8 = rval8 & mask8; + gval8 = gval8 & mask8; + bval8 = bval8 & mask8; + aval8 = aval8 & mask8; + composeRGBAPixel(rval8, gval8, bval8, aval8, &rgbval); + line[j] = rgbval; + } + } + pixSetSpp(pix, 4); + break; + } + } else { /* bps == 16 */ + /* I have only seen one example that is type 6, 16 bps. + * It was 3 spp (rgb), and the 8 bps of real data was stored + * in the second byte. In the following, I make the wild + * assumption that for all 16 bpp pnm/pam files, we can + * take the second byte. */ + switch (spp) { + case 1: /* 16 bps grayscale */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (fread(&val16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + val8 = val16 & 0xff; + pixSetPixel(pix, j, i, val8); + } + } + break; + + case 2: /* 16 bps grayscale + alpha */ + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + if (fread(&val16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&aval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + val8 = val16 & 0xff; + aval8 = aval16 & 0xff; + composeRGBAPixel(val8, val8, val8, aval8, &rgbval); + pixSetPixel(pix, j, i, rgbval); + } + } + pixSetSpp(pix, 4); + break; + + case 3: /* 16bps rgb */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + if (fread(&rval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&gval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&bval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + rval8 = rval16 & 0xff; + gval8 = gval16 & 0xff; + bval8 = bval16 & 0xff; + composeRGBPixel(rval8, gval8, bval8, &rgbval); + line[j] = rgbval; + } + } + break; + + case 4: /* 16bps rgba */ + for (i = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < wpl; j++) { + if (fread(&rval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&gval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&bval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + if (fread(&aval16, 2, 1, fp) != 1) + return (PIX *)ERROR_PTR("read error type 7", + procName, pix); + rval8 = rval16 & 0xff; + gval8 = gval16 & 0xff; + bval8 = bval16 & 0xff; + aval8 = aval16 & 0xff; + composeRGBAPixel(rval8, gval8, bval8, aval8, &rgbval); + line[j] = rgbval; + } + } + pixSetSpp(pix, 4); + break; + } + } + break; + } + return pix; +} + + +/*! + * \brief readHeaderPnm() + * + * \param[in] filename + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pd [optional] + * \param[out] ptype [optional] pnm type + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderPnm(const char *filename, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd, + l_int32 *ptype, + l_int32 *pbps, + l_int32 *pspp) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderPnm"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pd) *pd = 0; + if (ptype) *ptype = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderPnm() + * + * \param[in] fp file stream opened for read + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pd [optional] + * \param[out] ptype [optional] pnm type + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + */ +l_ok +freadHeaderPnm(FILE *fp, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd, + l_int32 *ptype, + l_int32 *pbps, + l_int32 *pspp) +{ +char tag[16], tupltype[32]; +l_int32 i, w, h, d, bps, spp, type; +l_int32 maxval; +l_int32 ch; + + PROCNAME("freadHeaderPnm"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pd) *pd = 0; + if (ptype) *ptype = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + + if (fscanf(fp, "P%d\n", &type) != 1) + return ERROR_INT("invalid read for type", procName, 1); + if (type < 1 || type > 7) + return ERROR_INT("invalid pnm file", procName, 1); + + if (pnmSkipCommentLines(fp)) + return ERROR_INT("no data in file", procName, 1); + + if (type == 7) { + w = h = d = bps = spp = maxval = 0; + for (i = 0; i < 10; i++) { /* limit to 10 lines of this header */ + if (pnmReadNextString(fp, tag, sizeof(tag))) + return ERROR_INT("found no next tag", procName, 1); + if (!strcmp(tag, "WIDTH")) { + if (pnmReadNextNumber(fp, &w)) + return ERROR_INT("failed reading width", procName, 1); + continue; + } + if (!strcmp(tag, "HEIGHT")) { + if (pnmReadNextNumber(fp, &h)) + return ERROR_INT("failed reading height", procName, 1); + continue; + } + if (!strcmp(tag, "DEPTH")) { + if (pnmReadNextNumber(fp, &spp)) + return ERROR_INT("failed reading depth", procName, 1); + continue; + } + if (!strcmp(tag, "MAXVAL")) { + if (pnmReadNextNumber(fp, &maxval)) + return ERROR_INT("failed reading maxval", procName, 1); + continue; + } + if (!strcmp(tag, "TUPLTYPE")) { + if (pnmReadNextString(fp, tupltype, sizeof(tupltype))) + return ERROR_INT("failed reading tuple type", procName, 1); + continue; + } + if (!strcmp(tag, "ENDHDR")) { + if ('\n' != (ch = fgetc(fp))) + return ERROR_INT("missing LF after ENDHDR", procName, 1); + break; + } + } + if (w <= 0 || h <= 0 || w > MAX_PNM_WIDTH || h > MAX_PNM_HEIGHT) { + L_INFO("invalid size: w = %d, h = %d\n", procName, w, h); + return 1; + } + if (maxval == 1) { + d = bps = 1; + } else if (maxval == 3) { + d = bps = 2; + } else if (maxval == 15) { + d = bps = 4; + } else if (maxval == 255) { + d = bps = 8; + } else if (maxval == 0xffff) { + d = bps = 16; + } else { + L_INFO("invalid maxval = %d\n", procName, maxval); + return 1; + } + switch (spp) { + case 1: + /* d and bps are already set */ + break; + case 2: + case 3: + case 4: + /* create a 32 bpp Pix */ + d = 32; + break; + default: + L_INFO("invalid depth = %d\n", procName, spp); + return 1; + } + } else { + + if (fscanf(fp, "%d %d\n", &w, &h) != 2) + return ERROR_INT("invalid read for w,h", procName, 1); + if (w <= 0 || h <= 0 || w > MAX_PNM_WIDTH || h > MAX_PNM_HEIGHT) { + L_INFO("invalid size: w = %d, h = %d\n", procName, w, h); + return 1; + } + + /* Get depth of pix. For types 2 and 5, we use the maxval. + * Important implementation note: + * - You can't use fscanf(), which throws away whitespace, + * and will discard binary data if it starts with whitespace(s). + * - You can't use fgets(), which stops at newlines, but this + * dumb format doesn't require a newline after the maxval + * number -- it just requires one whitespace character. + * - Which leaves repeated calls to fgetc, including swallowing + * the single whitespace character. */ + if (type == 1 || type == 4) { + d = 1; + spp = 1; + bps = 1; + } else if (type == 2 || type == 5) { + if (pnmReadNextNumber(fp, &maxval)) + return ERROR_INT("invalid read for maxval (2,5)", procName, 1); + if (maxval == 3) { + d = 2; + } else if (maxval == 15) { + d = 4; + } else if (maxval == 255) { + d = 8; + } else if (maxval == 0xffff) { + d = 16; + } else { + fprintf(stderr, "maxval = %d\n", maxval); + return ERROR_INT("invalid maxval", procName, 1); + } + bps = d; + spp = 1; + } else { /* type == 3 || type == 6; this is rgb */ + if (pnmReadNextNumber(fp, &maxval)) + return ERROR_INT("invalid read for maxval (3,6)", procName, 1); + if (maxval != 255 && maxval != 0xffff) { + L_ERROR("unexpected maxval = %d\n", procName, maxval); + return 1; + } + bps = (maxval == 255) ? 8 : 16; + d = 32; + spp = 3; + } + } + if (pw) *pw = w; + if (ph) *ph = h; + if (pd) *pd = d; + if (ptype) *ptype = type; + if (pbps) *pbps = bps; + if (pspp) *pspp = spp; + return 0; +} + + +/*! + * \brief pixWriteStreamPnm() + * + * \param[in] fp file stream opened for write + * \param[in] pix + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This writes "raw" packed format only:
+ *          1 bpp --> pbm (P4)
+ *          2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P5)
+ *          2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P6)
+ *      (2) 24 bpp rgb are not supported in leptonica, but this will
+ *          write them out as a packed array of bytes (3 to a pixel).
+ * 
+ */ +l_ok +pixWriteStreamPnm(FILE *fp, + PIX *pix) +{ +l_uint8 val8; +l_uint8 pel[4]; +l_uint16 val16; +l_int32 h, w, d, ds, i, j, wpls, bpl, filebpl, writeerror, maxval; +l_uint32 *pword, *datas, *lines; +PIX *pixs; + + PROCNAME("pixWriteStreamPnm"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) + return ERROR_INT("d not in {1,2,4,8,16,24,32}", procName, 1); + if (d == 32 && pixGetSpp(pix) == 4) + return pixWriteStreamPam(fp, pix); + + /* If a colormap exists, remove and convert to grayscale or rgb */ + if (pixGetColormap(pix) != NULL) + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + else + pixs = pixClone(pix); + ds = pixGetDepth(pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + writeerror = 0; + + if (ds == 1) { /* binary */ + fprintf(fp, "P4\n# Raw PBM file written by leptonica " + "(www.leptonica.com)\n%d %d\n", w, h); + + bpl = (w + 7) / 8; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < bpl; j++) { + val8 = GET_DATA_BYTE(lines, j); + fwrite(&val8, 1, 1, fp); + } + } + } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ + maxval = (1 << ds) - 1; + fprintf(fp, "P5\n# Raw PGM file written by leptonica " + "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); + + if (ds != 16) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + if (ds == 2) + val8 = GET_DATA_DIBIT(lines, j); + else if (ds == 4) + val8 = GET_DATA_QBIT(lines, j); + else /* ds == 8 */ + val8 = GET_DATA_BYTE(lines, j); + fwrite(&val8, 1, 1, fp); + } + } + } else { /* ds == 16 */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val16 = GET_DATA_TWO_BYTES(lines, j); + fwrite(&val16, 2, 1, fp); + } + } + } + } else { /* rgb color */ + fprintf(fp, "P6\n# Raw PPM file written by leptonica " + "(www.leptonica.com)\n%d %d\n255\n", w, h); + + if (d == 24) { /* packed, 3 bytes to a pixel */ + filebpl = 3 * w; + for (i = 0; i < h; i++) { /* write out each raster line */ + lines = datas + i * wpls; + if (fwrite(lines, 1, filebpl, fp) != filebpl) + writeerror = 1; + } + } else { /* 32 bpp rgb */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + pword = lines + j; + pel[0] = GET_DATA_BYTE(pword, COLOR_RED); + pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); + pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); + if (fwrite(pel, 1, 3, fp) != 3) + writeerror = 1; + } + } + } + } + + pixDestroy(&pixs); + if (writeerror) + return ERROR_INT("image write fail", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteStreamAsciiPnm() + * + * \param[in] fp file stream opened for write + * \param[in] pix + * \return 0 if OK; 1 on error + * + * Writes "ASCII" format only: + * 1 bpp --> pbm P1 + * 2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm P2 + * 2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm P3 + */ +l_ok +pixWriteStreamAsciiPnm(FILE *fp, + PIX *pix) +{ +char buffer[256]; +l_uint8 cval[3]; +l_int32 h, w, d, ds, i, j, k, maxval, count; +l_uint32 val; +PIX *pixs; + + PROCNAME("pixWriteStreamAsciiPnm"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return ERROR_INT("d not in {1,2,4,8,16,32}", procName, 1); + + /* If a colormap exists, remove and convert to grayscale or rgb */ + if (pixGetColormap(pix) != NULL) + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + else + pixs = pixClone(pix); + ds = pixGetDepth(pixs); + + if (ds == 1) { /* binary */ + fprintf(fp, "P1\n# Ascii PBM file written by leptonica " + "(www.leptonica.com)\n%d %d\n", w, h); + + count = 0; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pixs, j, i, &val); + if (val == 0) + fputc('0', fp); + else /* val == 1 */ + fputc('1', fp); + fputc(' ', fp); + count += 2; + if (count >= 70) { + fputc('\n', fp); + count = 0; + } + } + } + } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ + maxval = (1 << ds) - 1; + fprintf(fp, "P2\n# Ascii PGM file written by leptonica " + "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); + + count = 0; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pixs, j, i, &val); + if (ds == 2) { + snprintf(buffer, sizeof(buffer), "%1d ", val); + fwrite(buffer, 1, 2, fp); + count += 2; + } else if (ds == 4) { + snprintf(buffer, sizeof(buffer), "%2d ", val); + fwrite(buffer, 1, 3, fp); + count += 3; + } else if (ds == 8) { + snprintf(buffer, sizeof(buffer), "%3d ", val); + fwrite(buffer, 1, 4, fp); + count += 4; + } else { /* ds == 16 */ + snprintf(buffer, sizeof(buffer), "%5d ", val); + fwrite(buffer, 1, 6, fp); + count += 6; + } + if (count >= 60) { + fputc('\n', fp); + count = 0; + } + } + } + } else { /* rgb color */ + fprintf(fp, "P3\n# Ascii PPM file written by leptonica " + "(www.leptonica.com)\n%d %d\n255\n", w, h); + count = 0; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pixs, j, i, &val); + cval[0] = GET_DATA_BYTE(&val, COLOR_RED); + cval[1] = GET_DATA_BYTE(&val, COLOR_GREEN); + cval[2] = GET_DATA_BYTE(&val, COLOR_BLUE); + for (k = 0; k < 3; k++) { + snprintf(buffer, sizeof(buffer), "%3d ", cval[k]); + fwrite(buffer, 1, 4, fp); + count += 4; + if (count >= 60) { + fputc('\n', fp); + count = 0; + } + } + } + } + } + + pixDestroy(&pixs); + return 0; +} + + +/*! + * \brief pixWriteStreamPam() + * + * \param[in] fp file stream opened for write + * \param[in] pix + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This writes arbitrary PAM (P7) packed format.
+ *      (2) 24 bpp rgb are not supported in leptonica, but this will
+ *          write them out as a packed array of bytes (3 to a pixel).
+ * 
+ */ +l_ok +pixWriteStreamPam(FILE *fp, + PIX *pix) +{ +l_uint8 val8; +l_uint8 pel[8]; +l_uint16 val16; +l_int32 h, w, d, ds, i, j; +l_int32 wpls, spps, filebpl, writeerror, maxval; +l_uint32 *pword, *datas, *lines; +PIX *pixs; + + PROCNAME("pixWriteStreamPam"); + + if (!fp) + return ERROR_INT("fp not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + pixGetDimensions(pix, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) + return ERROR_INT("d not in {1,2,4,8,16,24,32}", procName, 1); + + /* If a colormap exists, remove and convert to grayscale or rgb */ + if (pixGetColormap(pix) != NULL) + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + else + pixs = pixClone(pix); + ds = pixGetDepth(pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + spps = pixGetSpp(pixs); + if (ds < 24) + maxval = (1 << ds) - 1; + else + maxval = 255; + + writeerror = 0; + fprintf(fp, "P7\n# Arbitrary PAM file written by leptonica " + "(www.leptonica.com)\n"); + fprintf(fp, "WIDTH %d\n", w); + fprintf(fp, "HEIGHT %d\n", h); + fprintf(fp, "DEPTH %d\n", spps); + fprintf(fp, "MAXVAL %d\n", maxval); + if (spps == 1 && ds == 1) + fprintf(fp, "TUPLTYPE BLACKANDWHITE\n"); + else if (spps == 1) + fprintf(fp, "TUPLTYPE GRAYSCALE\n"); + else if (spps == 3) + fprintf(fp, "TUPLTYPE RGB\n"); + else if (spps == 4) + fprintf(fp, "TUPLTYPE RGB_ALPHA\n"); + fprintf(fp, "ENDHDR\n"); + + switch (d) { + case 1: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val8 = GET_DATA_BIT(lines, j); + val8 ^= 1; /* pam apparently uses white-is-1 photometry */ + if (fwrite(&val8, 1, 1, fp) != 1) + writeerror = 1; + } + } + break; + + case 2: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val8 = GET_DATA_DIBIT(lines, j); + if (fwrite(&val8, 1, 1, fp) != 1) + writeerror = 1; + } + } + break; + + case 4: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val8 = GET_DATA_QBIT(lines, j); + if (fwrite(&val8, 1, 1, fp) != 1) + writeerror = 1; + } + } + break; + + case 8: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val8 = GET_DATA_BYTE(lines, j); + if (fwrite(&val8, 1, 1, fp) != 1) + writeerror = 1; + } + } + break; + + case 16: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < w; j++) { + val16 = GET_DATA_TWO_BYTES(lines, j); + if (fwrite(&val16, 2, 1, fp) != 1) + writeerror = 1; + } + } + break; + + case 24: + filebpl = 3 * w; + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + if (fwrite(lines, 1, filebpl, fp) != filebpl) + writeerror = 1; + } + break; + + case 32: + switch (spps) { + case 3: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + pword = lines + j; + pel[0] = GET_DATA_BYTE(pword, COLOR_RED); + pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); + pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); + if (fwrite(pel, 1, 3, fp) != 3) + writeerror = 1; + } + } + break; + case 4: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + for (j = 0; j < wpls; j++) { + pword = lines + j; + pel[0] = GET_DATA_BYTE(pword, COLOR_RED); + pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); + pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); + pel[3] = GET_DATA_BYTE(pword, L_ALPHA_CHANNEL); + if (fwrite(pel, 1, 4, fp) != 4) + writeerror = 1; + } + } + break; + } + break; + } + + pixDestroy(&pixs); + if (writeerror) + return ERROR_INT("image write fail", procName, 1); + return 0; +} + + +/*---------------------------------------------------------------------* + * Read/write to memory * + *---------------------------------------------------------------------*/ + +/*! + * \brief pixReadMemPnm() + * + * \param[in] data const; pnm-encoded + * \param[in] size of data + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) The %size byte of %data must be a null character.
+ * 
+ */ +PIX * +pixReadMemPnm(const l_uint8 *data, + size_t size) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadMemPnm"); + + if (!data) + return (PIX *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PIX *)ERROR_PTR("stream not opened", procName, NULL); + pix = pixReadStreamPnm(fp); + fclose(fp); + if (!pix) L_ERROR("pix not read\n", procName); + return pix; +} + + +/*! + * \brief readHeaderMemPnm() + * + * \param[in] data const; pnm-encoded + * \param[in] size of data + * \param[out] pw [optional] + * \param[out] ph [optional] + * \param[out] pd [optional] + * \param[out] ptype [optional] pnm type + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderMemPnm(const l_uint8 *data, + size_t size, + l_int32 *pw, + l_int32 *ph, + l_int32 *pd, + l_int32 *ptype, + l_int32 *pbps, + l_int32 *pspp) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderMemPnm"); + + if (!data) + return ERROR_INT("data not defined", procName, 1); + + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); + fclose(fp); + if (ret) + return ERROR_INT("header data read failed", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteMemPnm() + * + * \param[out] pdata data of PNM image + * \param[out] psize size of returned data + * \param[in] pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStreamPnm() for usage.  This version writes to
+ *          memory instead of to a file stream.
+ * 
+ */ +l_ok +pixWriteMemPnm(l_uint8 **pdata, + size_t *psize, + PIX *pix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixWriteMemPnm"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixWriteStreamPnm(fp, pix); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = pixWriteStreamPnm(fp, pix); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief pixWriteMemPam() + * + * \param[out] pdata data of PAM image + * \param[out] psize size of returned data + * \param[in] pix + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStreamPnm() for usage.  This version writes to
+ *          memory instead of to a file stream.
+ * 
+ */ +l_ok +pixWriteMemPam(l_uint8 **pdata, + size_t *psize, + PIX *pix) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixWriteMemPam"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixWriteStreamPam(fp, pix); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = pixWriteStreamPam(fp, pix); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + + +/*--------------------------------------------------------------------* + * Static helpers * + *--------------------------------------------------------------------*/ +/*! + * \brief pnmReadNextAsciiValue() + * + * Return: 0 if OK, 1 on error or EOF. + * + * Notes: + * (1) This reads the next sample value in ASCII from the file. + */ +static l_int32 +pnmReadNextAsciiValue(FILE *fp, + l_int32 *pval) +{ +l_int32 c, ignore; + + PROCNAME("pnmReadNextAsciiValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!fp) + return ERROR_INT("stream not open", procName, 1); + do { /* skip whitespace */ + if ((c = fgetc(fp)) == EOF) + return 1; + } while (c == ' ' || c == '\t' || c == '\n' || c == '\r'); + + fseek(fp, -1L, SEEK_CUR); /* back up one byte */ + ignore = fscanf(fp, "%d", pval); + return 0; +} + + +/*! + * \brief pnmReadNextNumber() + * + * \param[in] fp file stream + * \param[out] pval value as an integer + * \return 0 if OK, 1 on error or EOF. + * + *
+ * Notes:
+ *      (1) This reads the next set of numeric chars, returning
+ *          the value and swallowing the trailing whitespace character.
+ *          This is needed to read the maxval in the header, which
+ *          precedes the binary data.
+ * 
+ */ +static l_int32 +pnmReadNextNumber(FILE *fp, + l_int32 *pval) +{ +char buf[8]; +l_int32 i, c, foundws; + + PROCNAME("pnmReadNextNumber"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!fp) + return ERROR_INT("stream not open", procName, 1); + + /* The ASCII characters for the number are followed by exactly + * one whitespace character. */ + foundws = FALSE; + for (i = 0; i < 8; i++) + buf[i] = '\0'; + for (i = 0; i < 8; i++) { + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + if (c == ' ' || c == '\t' || c == '\n' || c == '\r') { + foundws = TRUE; + buf[i] = '\n'; + break; + } + if (!isdigit(c)) + return ERROR_INT("char read is not a digit", procName, 1); + buf[i] = c; + } + if (!foundws) + return ERROR_INT("no whitespace found", procName, 1); + if (sscanf(buf, "%d", pval) != 1) + return ERROR_INT("invalid read", procName, 1); + return 0; +} + +/*! + * \brief pnmReadNextString() + * + * \param[in] fp file stream + * \param[out] buff pointer to the string buffer + * \param[in] size max. number of charactes in buffer + * \return 0 if OK, 1 on error or EOF. + * + *
+ * Notes:
+ *      (1) This reads the next set of alphanumeric chars,
+ *          returning the string and swallowing the trailing
+ *          whitespace characters.
+ *          This is needed to read header lines, which precede
+ *          the P7 format binary data.
+ * 
+ */ +static l_int32 +pnmReadNextString(FILE *fp, + char *buff, + l_int32 size) +{ +l_int32 i, c; + + PROCNAME("pnmReadNextString"); + + if (!buff) + return ERROR_INT("buff not defined", procName, 1); + *buff = '\0'; + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (size <= 0) + return ERROR_INT("size is too small", procName, 1); + + do { /* skip whitespace */ + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + } while (c == ' ' || c == '\t' || c == '\n' || c == '\r'); + + /* Comment lines are allowed to appear + * anywhere in the header lines */ + if (c == '#') { + do { /* each line starting with '#' */ + do { /* this entire line */ + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + } while (c != '\n'); + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + } while (c == '#'); + } + + /* The next string ends when there is + * a whitespace character following. */ + for (i = 0; i < size - 1; i++) { + if (c == ' ' || c == '\t' || c == '\n' || c == '\r') + break; + buff[i] = c; + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + } + buff[i] = '\0'; + + /* Back up one byte */ + fseek(fp, -1L, SEEK_CUR); + if (i >= size - 1) + return ERROR_INT("buff size too small", procName, 1); + + /* Skip over trailing spaces and tabs */ + for (;;) { + if ((c = fgetc(fp)) == EOF) + return ERROR_INT("end of file reached", procName, 1); + if (c != ' ' && c != '\t') + break; + } + + /* Back up one byte */ + fseek(fp, -1L, SEEK_CUR); + return 0; +} + + +/*! + * \brief pnmSkipCommentLines() + * + * Return: 0 if OK, 1 on error or EOF + * + * Notes: + * (1) Comment lines begin with '#' + * (2) Usage: caller should check return value for EOF + */ +static l_int32 +pnmSkipCommentLines(FILE *fp) +{ +l_int32 c; + + PROCNAME("pnmSkipCommentLines"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if ((c = fgetc(fp)) == EOF) + return 1; + if (c == '#') { + do { /* each line starting with '#' */ + do { /* this entire line */ + if ((c = fgetc(fp)) == EOF) + return 1; + } while (c != '\n'); + if ((c = fgetc(fp)) == EOF) + return 1; + } while (c == '#'); + } + + /* Back up one byte */ + fseek(fp, -1L, SEEK_CUR); + return 0; +} + +/* --------------------------------------------*/ +#endif /* USE_PNMIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/pnmiostub.c b/3rdparty/hgOCR/leptonica/pnmiostub.c new file mode 100644 index 00000000..5b471eee --- /dev/null +++ b/3rdparty/hgOCR/leptonica/pnmiostub.c @@ -0,0 +1,116 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file pnmiostub.c + *
+ *
+ *     Stubs for pnmio.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_PNMIO /* defined in environ.h */ +/* --------------------------------------------*/ + +PIX * pixReadStreamPnm(FILE *fp) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamPnm", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderPnm(const char *filename, l_int32 *pw, l_int32 *ph, + l_int32 *pd, l_int32 *ptype, l_int32 *pbps, + l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderPnm", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok freadHeaderPnm(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, + l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) +{ + return ERROR_INT("function not present", "freadHeaderPnm", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamPnm(FILE *fp, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteStreamPnm", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamAsciiPnm(FILE *fp, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteStreamAsciiPnm", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamPam(FILE *fp, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteStreamPam", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemPnm(const l_uint8 *cdata, size_t size) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadMemPnm", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemPnm(const l_uint8 *cdata, size_t size, l_int32 *pw, + l_int32 *ph, l_int32 *pd, l_int32 *ptype, + l_int32 *pbps, l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderMemPnm", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemPnm(l_uint8 **pdata, size_t *psize, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteMemPnm", 1); +} +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemPam(l_uint8 **pdata, size_t *psize, PIX *pix) +{ + return ERROR_INT("function not present", "pixWriteMemPam", 1); +} + + +/* --------------------------------------------*/ +#endif /* !USE_PNMIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/projective.c b/3rdparty/hgOCR/leptonica/projective.c new file mode 100644 index 00000000..b8393b4c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/projective.c @@ -0,0 +1,923 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file projective.c + *
+ *
+ *      Projective (4 pt) image transformation using a sampled
+ *      (to nearest integer) transform on each dest point
+ *           PIX      *pixProjectiveSampledPta()
+ *           PIX      *pixProjectiveSampled()
+ *
+ *      Projective (4 pt) image transformation using interpolation
+ *      (or area mapping) for anti-aliasing images that are
+ *      2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB
+ *           PIX      *pixProjectivePta()
+ *           PIX      *pixProjective()
+ *           PIX      *pixProjectivePtaColor()
+ *           PIX      *pixProjectiveColor()
+ *           PIX      *pixProjectivePtaGray()
+ *           PIX      *pixProjectiveGray()
+ *
+ *      Projective transform including alpha (blend) component
+ *           PIX      *pixProjectivePtaWithAlpha()
+ *
+ *      Projective coordinate transformation
+ *           l_int32   getProjectiveXformCoeffs()
+ *           l_int32   projectiveXformSampledPt()
+ *           l_int32   projectiveXformPt()
+ *
+ *      A projective transform can be specified as a specific functional
+ *      mapping between 4 points in the source and 4 points in the dest.
+ *      It preserves straight lines, but is less stable than a bilinear
+ *      transform, because it contains a division by a quantity that
+ *      can get arbitrarily small.)
+ *
+ *      We give both a projective coordinate transformation and
+ *      two projective image transformations.
+ *
+ *      For the former, we ask for the coordinate value (x',y')
+ *      in the transformed space for any point (x,y) in the original
+ *      space.  The coefficients of the transformation are found by
+ *      solving 8 simultaneous equations for the 8 coordinates of
+ *      the 4 points in src and dest.  The transformation can then
+ *      be used to compute the associated image transform, by
+ *      computing, for each dest pixel, the relevant pixel(s) in
+ *      the source.  This can be done either by taking the closest
+ *      src pixel to each transformed dest pixel ("sampling") or
+ *      by doing an interpolation and averaging over 4 source
+ *      pixels with appropriate weightings ("interpolated").
+ *
+ *      A typical application would be to remove keystoning
+ *      due to a projective transform in the imaging system.
+ *
+ *      The projective transform is given by specifying two equations:
+ *
+ *          x' = (ax + by + c) / (gx + hy + 1)
+ *          y' = (dx + ey + f) / (gx + hy + 1)
+ *
+ *      where the eight coefficients have been computed from four
+ *      sets of these equations, each for two corresponding data pts.
+ *      In practice, once the coefficients are known, we use the
+ *      equations "backwards": for each point (x,y) in the dest image,
+ *      these two equations are used to compute the corresponding point
+ *      (x',y') in the src.  That computed point in the src is then used
+ *      to determine the corresponding dest pixel value in one of two ways:
+ *
+ *       ~ sampling: simply take the value of the src pixel in which this
+ *                   point falls
+ *       ~ interpolation: take appropriate linear combinations of the
+ *                        four src pixels that this dest pixel would
+ *                        overlap, with the coefficients proportional
+ *                        to the amount of overlap
+ *
+ *      For small warp where there is little scale change, (e.g.,
+ *      for rotation) area mapping is nearly equivalent to interpolation.
+ *
+ *      Typical relative timing of pointwise transforms (sampled = 1.0):
+ *      8 bpp:   sampled        1.0
+ *               interpolated   1.5
+ *      32 bpp:  sampled        1.0
+ *               interpolated   1.6
+ *      Additionally, the computation time/pixel is nearly the same
+ *      for 8 bpp and 32 bpp, for both sampled and interpolated.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +extern l_float32 AlphaMaskBorderVals[2]; + + +/*------------------------------------------------------------n + * Sampled projective image transformation * + *-------------------------------------------------------------*/ +/*! + * \brief pixProjectiveSampledPta() + * + * \param[in] pixs all depths + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) No 3 of the 4 points may be collinear.
+ *      (4) For 8 and 32 bpp pix, better quality is obtained by the
+ *          somewhat slower pixProjectivePta().  See that
+ *          function for relative timings between sampled and interpolated.
+ * 
+ */ +PIX * +pixProjectiveSampledPta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixProjectiveSampledPta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getProjectiveXformCoeffs(ptad, ptas, &vc); + pixd = pixProjectiveSampled(pixs, vc, incolor); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixProjectiveSampled() + * + * \param[in] pixs all depths + * \param[in] vc vector of 8 coefficients for projective transform + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary.
+ *      (2) Retains colormap, which you can do for a sampled transform..
+ *      (3) For 8 or 32 bpp, much better quality is obtained by the
+ *          somewhat slower pixProjective().  See that function
+ *          for relative timings between sampled and interpolated.
+ * 
+ */ +PIX * +pixProjectiveSampled(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; +l_uint32 val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; +PIXCMAP *cmap; + + PROCNAME("pixProjectiveSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); + + /* Init all dest pixels to color to be brought in from outside */ + pixd = pixCreateTemplate(pixs); + if ((cmap = pixGetColormap(pixs)) != NULL) { + if (incolor == L_BRING_IN_WHITE) + color = 1; + else + color = 0; + pixcmapAddBlackOrWhite(cmap, color, &cmapindex); + pixSetAllArbitrary(pixd, cmapindex); + } else { + if ((d == 1 && incolor == L_BRING_IN_WHITE) || + (d > 1 && incolor == L_BRING_IN_BLACK)) { + pixClearAll(pixd); + } else { + pixSetAll(pixd); + } + } + + /* Scan over the dest pixels */ + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + projectiveXformSampledPt(vc, j, i, &x, &y); + if (x < 0 || y < 0 || x >=w || y >= h) + continue; + lines = datas + y * wpls; + if (d == 1) { + val = GET_DATA_BIT(lines, x); + SET_DATA_BIT_VAL(lined, j, val); + } else if (d == 8) { + val = GET_DATA_BYTE(lines, x); + SET_DATA_BYTE(lined, j, val); + } else if (d == 32) { + lined[j] = lines[x]; + } else if (d == 2) { + val = GET_DATA_DIBIT(lines, x); + SET_DATA_DIBIT(lined, j, val); + } else if (d == 4) { + val = GET_DATA_QBIT(lines, x); + SET_DATA_QBIT(lined, j, val); + } + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------* + * Interpolated projective image transformation * + *---------------------------------------------------------------------*/ +/*! + * \brief pixProjectivePta() + * + * \param[in] pixs all depths; colormap ok + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixProjectivePta(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixProjectivePta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixProjectiveSampledPta(pixs, ptad, ptas, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixProjectivePtaGray(pixt2, ptad, ptas, colorval); + else /* d == 32 */ + pixd = pixProjectivePtaColor(pixt2, ptad, ptas, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixProjective() + * + * \param[in] pixs all depths; colormap ok + * \param[in] vc vector of 8 coefficients for projective transform + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Brings in either black or white pixels from the boundary
+ *      (2) Removes any existing colormap, if necessary, before transforming
+ * 
+ */ +PIX * +pixProjective(PIX *pixs, + l_float32 *vc, + l_int32 incolor) +{ +l_int32 d; +l_uint32 colorval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixProjective"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + if (pixGetDepth(pixs) == 1) + return pixProjectiveSampled(pixs, vc, incolor); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual color to bring in from edges */ + colorval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + colorval = 255; + else /* d == 32 */ + colorval = 0xffffff00; + } + + if (d == 8) + pixd = pixProjectiveGray(pixt2, vc, colorval); + else /* d == 32 */ + pixd = pixProjectiveColor(pixt2, vc, colorval); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixProjectivePtaColor() + * + * \param[in] pixs 32 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixProjectivePtaColor(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint32 colorval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixProjectivePtaColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getProjectiveXformCoeffs(ptad, ptas, &vc); + pixd = pixProjectiveColor(pixs, vc, colorval); + LEPT_FREE(vc); + + return pixd; +} + + +/*! + * \brief pixProjectiveColor() + * + * \param[in] pixs 32 bpp + * \param[in] vc vector of 8 coefficients for projective transform + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixProjectiveColor(PIX *pixs, + l_float32 *vc, + l_uint32 colorval) +{ +l_int32 i, j, w, h, d, wpls, wpld; +l_uint32 val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixProjectiveColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, colorval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + projectiveXformPt(vc, j, i, &x, &y); + linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, + &val); + *(lined + j) = val; + } + } + + /* If rgba, transform the pixs alpha channel and insert in pixd */ + if (pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixProjectiveGray(pix1, vc, 255); /* bring in opaque */ + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return pixd; +} + + +/*! + * \brief pixProjectivePtaGray() + * + * \param[in] pixs 8 bpp + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] grayval 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixProjectivePtaGray(PIX *pixs, + PTA *ptad, + PTA *ptas, + l_uint8 grayval) +{ +l_float32 *vc; +PIX *pixd; + + PROCNAME("pixProjectivePtaGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (ptaGetCount(ptas) != 4) + return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); + if (ptaGetCount(ptad) != 4) + return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); + + /* Get backwards transform from dest to src, and apply it */ + getProjectiveXformCoeffs(ptad, ptas, &vc); + pixd = pixProjectiveGray(pixs, vc, grayval); + LEPT_FREE(vc); + + return pixd; +} + + + +/*! + * \brief pixProjectiveGray() + * + * \param[in] pixs 8 bpp + * \param[in] vc vector of 8 coefficients for projective transform + * \param[in] grayval 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + */ +PIX * +pixProjectiveGray(PIX *pixs, + l_float32 *vc, + l_uint8 grayval) +{ +l_int32 i, j, w, h, wpls, wpld, val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +PIX *pixd; + + PROCNAME("pixProjectiveGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + if (!vc) + return (PIX *)ERROR_PTR("vc not defined", procName, NULL); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + pixSetAllArbitrary(pixd, grayval); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Iterate over destination pixels */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + /* Compute float src pixel location corresponding to (i,j) */ + projectiveXformPt(vc, j, i, &x, &y); + linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); + SET_DATA_BYTE(lined, j, val); + } + } + + return pixd; +} + + +/*---------------------------------------------------------------------------* + * Projective transform including alpha (blend) component * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixProjectivePtaWithAlpha() + * + * \param[in] pixs 32 bpp rgb + * \param[in] ptad 4 pts of final coordinate space + * \param[in] ptas 4 pts of initial coordinate space + * \param[in] pixg [optional] 8 bpp, for alpha channel, can be null + * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent + * and 1.0 fully opaque + * \param[in] border of pixels added to capture transformed source pixels + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The alpha channel is transformed separately from pixs,
+ *          and aligns with it, being fully transparent outside the
+ *          boundary of the transformed pixs.  For pixels that are fully
+ *          transparent, a blending function like pixBlendWithGrayMask()
+ *          will give zero weight to corresponding pixels in pixs.
+ *      (2) If pixg is NULL, it is generated as an alpha layer that is
+ *          partially opaque, using %fract.  Otherwise, it is cropped
+ *          to pixs if required and %fract is ignored.  The alpha channel
+ *          in pixs is never used.
+ *      (3) Colormaps are removed.
+ *      (4) When pixs is transformed, it doesn't matter what color is brought
+ *          in because the alpha channel will be transparent (0) there.
+ *      (5) To avoid losing source pixels in the destination, it may be
+ *          necessary to add a border to the source pix before doing
+ *          the projective transformation.  This can be any non-negative
+ *          number.
+ *      (6) The input %ptad and %ptas are in a coordinate space before
+ *          the border is added.  Internally, we compensate for this
+ *          before doing the projective transform on the image after
+ *          the border is added.
+ *      (7) The default setting for the border values in the alpha channel
+ *          is 0 (transparent) for the outermost ring of pixels and
+ *          (0.5 * fract * 255) for the second ring.  When blended over
+ *          a second image, this
+ *          (a) shrinks the visible image to make a clean overlap edge
+ *              with an image below, and
+ *          (b) softens the edges by weakening the aliasing there.
+ *          Use l_setAlphaMaskBorder() to change these values.
+ * 
+ */ +PIX * +pixProjectivePtaWithAlpha(PIX *pixs, + PTA *ptad, + PTA *ptas, + PIX *pixg, + l_float32 fract, + l_int32 border) +{ +l_int32 ws, hs, d; +PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; +PTA *ptad2, *ptas2; + + PROCNAME("pixProjectivePtaWithAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (d != 32 && pixGetColormap(pixs) == NULL) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (pixg && pixGetDepth(pixg) != 8) { + L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", + procName); + pixg = NULL; + } + if (!pixg && (fract < 0.0 || fract > 1.0)) { + L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); + fract = 1.0; + } + if (!pixg && fract == 0.0) + L_WARNING("fully opaque alpha; image will not be blended\n", procName); + if (!ptad) + return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); + if (!ptas) + return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); + + /* Add border; the color doesn't matter */ + pixb1 = pixAddBorder(pixs, border, 0); + + /* Transform the ptr arrays to work on the bordered image */ + ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); + ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); + + /* Do separate projective transform of rgb channels of pixs + * and of pixg */ + pixd = pixProjectivePtaColor(pixb1, ptad2, ptas2, 0); + if (!pixg) { + pixg2 = pixCreate(ws, hs, 8); + if (fract == 1.0) + pixSetAll(pixg2); + else + pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); + } else { + pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); + } + if (ws > 10 && hs > 10) { /* see note 7 */ + pixSetBorderRingVal(pixg2, 1, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); + pixSetBorderRingVal(pixg2, 2, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); + + } + pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ + pixga = pixProjectivePtaGray(pixb2, ptad2, ptas2, 0); + pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); + pixSetSpp(pixd, 4); + + pixDestroy(&pixg2); + pixDestroy(&pixb1); + pixDestroy(&pixb2); + pixDestroy(&pixga); + ptaDestroy(&ptad2); + ptaDestroy(&ptas2); + return pixd; +} + + +/*-------------------------------------------------------------* + * Projective coordinate transformation * + *-------------------------------------------------------------*/ +/*! + * \brief getProjectiveXformCoeffs() + * + * \param[in] ptas source 4 points; unprimed + * \param[in] ptad transformed 4 points; primed + * \param[out] pvc vector of coefficients of transform + * \return 0 if OK; 1 on error + * + * We have a set of 8 equations, describing the projective + * transformation that takes 4 points ptas into 4 other + * points ptad. These equations are: + * + * x1' = c[0]*x1 + c[1]*y1 + c[2]) / (c[6]*x1 + c[7]*y1 + 1 + * y1' = c[3]*x1 + c[4]*y1 + c[5]) / (c[6]*x1 + c[7]*y1 + 1 + * x2' = c[0]*x2 + c[1]*y2 + c[2]) / (c[6]*x2 + c[7]*y2 + 1 + * y2' = c[3]*x2 + c[4]*y2 + c[5]) / (c[6]*x2 + c[7]*y2 + 1 + * x3' = c[0]*x3 + c[1]*y3 + c[2]) / (c[6]*x3 + c[7]*y3 + 1 + * y3' = c[3]*x3 + c[4]*y3 + c[5]) / (c[6]*x3 + c[7]*y3 + 1 + * x4' = c[0]*x4 + c[1]*y4 + c[2]) / (c[6]*x4 + c[7]*y4 + 1 + * y4' = c[3]*x4 + c[4]*y4 + c[5]) / (c[6]*x4 + c[7]*y4 + 1 + * + * Multiplying both sides of each eqn by the denominator, we get + * + * AC = B + * + * where B and C are column vectors + * + * B = [ x1' y1' x2' y2' x3' y3' x4' y4' ] + * C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ] + * + * and A is the 8x8 matrix + * + * x1 y1 1 0 0 0 -x1*x1' -y1*x1' + * 0 0 0 x1 y1 1 -x1*y1' -y1*y1' + * x2 y2 1 0 0 0 -x2*x2' -y2*x2' + * 0 0 0 x2 y2 1 -x2*y2' -y2*y2' + * x3 y3 1 0 0 0 -x3*x3' -y3*x3' + * 0 0 0 x3 y3 1 -x3*y3' -y3*y3' + * x4 y4 1 0 0 0 -x4*x4' -y4*x4' + * 0 0 0 x4 y4 1 -x4*y4' -y4*y4' + * + * These eight equations are solved here for the coefficients C. + * + * These eight coefficients can then be used to find the mapping + * x,y) --> (x',y': + * + * x' = c[0]x + c[1]y + c[2]) / (c[6]x + c[7]y + 1 + * y' = c[3]x + c[4]y + c[5]) / (c[6]x + c[7]y + 1 + * + * that is implemented in projectiveXformSampled and + * projectiveXFormInterpolated. + */ +l_ok +getProjectiveXformCoeffs(PTA *ptas, + PTA *ptad, + l_float32 **pvc) +{ +l_int32 i; +l_float32 x1, y1, x2, y2, x3, y3, x4, y4; +l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ +l_float32 *a[8]; /* 8x8 matrix A */ + + PROCNAME("getProjectiveXformCoeffs"); + + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (!ptad) + return ERROR_INT("ptad not defined", procName, 1); + if (!pvc) + return ERROR_INT("&vc not defined", procName, 1); + + b = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); + *pvc = b; + ptaGetPt(ptas, 0, &x1, &y1); + ptaGetPt(ptas, 1, &x2, &y2); + ptaGetPt(ptas, 2, &x3, &y3); + ptaGetPt(ptas, 3, &x4, &y4); + ptaGetPt(ptad, 0, &b[0], &b[1]); + ptaGetPt(ptad, 1, &b[2], &b[3]); + ptaGetPt(ptad, 2, &b[4], &b[5]); + ptaGetPt(ptad, 3, &b[6], &b[7]); + + for (i = 0; i < 8; i++) + a[i] = (l_float32 *)LEPT_CALLOC(8, sizeof(l_float32)); + a[0][0] = x1; + a[0][1] = y1; + a[0][2] = 1.; + a[0][6] = -x1 * b[0]; + a[0][7] = -y1 * b[0]; + a[1][3] = x1; + a[1][4] = y1; + a[1][5] = 1; + a[1][6] = -x1 * b[1]; + a[1][7] = -y1 * b[1]; + a[2][0] = x2; + a[2][1] = y2; + a[2][2] = 1.; + a[2][6] = -x2 * b[2]; + a[2][7] = -y2 * b[2]; + a[3][3] = x2; + a[3][4] = y2; + a[3][5] = 1; + a[3][6] = -x2 * b[3]; + a[3][7] = -y2 * b[3]; + a[4][0] = x3; + a[4][1] = y3; + a[4][2] = 1.; + a[4][6] = -x3 * b[4]; + a[4][7] = -y3 * b[4]; + a[5][3] = x3; + a[5][4] = y3; + a[5][5] = 1; + a[5][6] = -x3 * b[5]; + a[5][7] = -y3 * b[5]; + a[6][0] = x4; + a[6][1] = y4; + a[6][2] = 1.; + a[6][6] = -x4 * b[6]; + a[6][7] = -y4 * b[6]; + a[7][3] = x4; + a[7][4] = y4; + a[7][5] = 1; + a[7][6] = -x4 * b[7]; + a[7][7] = -y4 * b[7]; + + gaussjordan(a, b, 8); + + for (i = 0; i < 8; i++) + LEPT_FREE(a[i]); + + return 0; +} + + +/*! + * \brief projectiveXformSampledPt() + * + * \param[in] vc vector of 8 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds the nearest pixel coordinates of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +projectiveXformSampledPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_int32 *pxp, + l_int32 *pyp) +{ +l_float32 factor; + + PROCNAME("projectiveXformSampledPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + factor = 1. / (vc[6] * x + vc[7] * y + 1.); + *pxp = (l_int32)(factor * (vc[0] * x + vc[1] * y + vc[2]) + 0.5); + *pyp = (l_int32)(factor * (vc[3] * x + vc[4] * y + vc[5]) + 0.5); + return 0; +} + + +/*! + * \brief projectiveXformPt() + * + * \param[in] vc vector of 8 coefficients + * \param[in] x, y initial point + * \param[out] pxp, pyp transformed point + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This computes the floating point location of the transformed point.
+ *      (2) It does not check ptrs for returned data!
+ * 
+ */ +l_ok +projectiveXformPt(l_float32 *vc, + l_int32 x, + l_int32 y, + l_float32 *pxp, + l_float32 *pyp) +{ +l_float32 factor; + + PROCNAME("projectiveXformPt"); + + if (!vc) + return ERROR_INT("vc not defined", procName, 1); + + factor = 1. / (vc[6] * x + vc[7] * y + 1.); + *pxp = factor * (vc[0] * x + vc[1] * y + vc[2]); + *pyp = factor * (vc[3] * x + vc[4] * y + vc[5]); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/psio1.c b/3rdparty/hgOCR/leptonica/psio1.c new file mode 100644 index 00000000..368a2b80 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/psio1.c @@ -0,0 +1,1073 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file psio1.c + *
+ *
+ *    |=============================================================|
+ *    |                         Important note                      |
+ *    |=============================================================|
+ *    | Some of these functions require I/O libraries such as       |
+ *    | libtiff, libjpeg, and libz.  If you do not have these       |
+ *    | libraries, some calls will fail.                            |
+ *    |                                                             |
+ *    | You can manually deactivate all PostScript writing by       |
+ *    | setting this in environ.h:                                  |
+ *    | \code                                                       |
+ *    |     #define  USE_PSIO     0                                 |
+ *    | \endcode                                                    |
+ *    | in environ.h.  This will link psio1stub.c                   |
+ *    |=============================================================|
+ *
+ *     This is a PostScript "device driver" for wrapping images
+ *     in PostScript.  The images can be rendered by a PostScript
+ *     interpreter for viewing, using evince or gv.  They can also be
+ *     rasterized for printing, using gs or an embedded interpreter
+ *     in a PostScript printer.  And they can be converted to a pdf
+ *     using gs (ps2pdf).
+ *
+ *     Convert specified files to PS
+ *          l_int32          convertFilesToPS()
+ *          l_int32          sarrayConvertFilesToPS()
+ *          l_int32          convertFilesFittedToPS()
+ *          l_int32          sarrayConvertFilesFittedToPS()
+ *          l_int32          writeImageCompressedToPSFile()
+ *
+ *     Convert mixed text/image files to PS
+ *          l_int32          convertSegmentedPagesToPS()
+ *          l_int32          pixWriteSegmentedPageToPS()
+ *          l_int32          pixWriteMixedToPS()
+ *
+ *     Convert any image file to PS for embedding
+ *          l_int32          convertToPSEmbed()
+ *
+ *     Write all images in a pixa out to PS
+ *          l_int32          pixaWriteCompressedToPS()
+ *          l_int32          pixWriteCompressedToPS()
+ *
+ *  These PostScript converters are used in three different ways.
+ *
+ *  (1) For embedding a PS file in a program like TeX.
+ *      convertToPSEmbed() handles this for levels 1, 2 and 3 output,
+ *      and prog/converttops wraps this in an executable.
+ *      converttops is a generalization of Thomas Merz's jpeg2ps wrapper,
+ *      in that it works for all types (formats, depth, colormap)
+ *      of input images and gives PS output in one of these formats
+ *        * level 1 (uncompressed)
+ *        * level 2 (compressed ccittg4 or dct)
+ *        * level 3 (compressed flate)
+ *
+ *  (2) For composing a set of pages with any number of images
+ *      painted on them, in either level 2 or level 3 formats.
+ *
+ *  (3) For printing a page image or a set of page images, at a
+ *      resolution that optimally fills the page, using
+ *      convertFilesFittedToPS().
+ *
+ *  The top-level calls of utilities in category 2, which can compose
+ *  multiple images on a page, and which generate a PostScript file for
+ *  printing or display (e.g., conversion to pdf), are:
+ *      convertFilesToPS()
+ *      convertFilesFittedToPS()
+ *      convertSegmentedPagesToPS()
+ *
+ *  All images are output with page numbers.  Bounding box hints are
+ *  more subtle.  They must be included for embeding images in
+ *  TeX, for example, and the low-level writers include bounding
+ *  box hints by default.  However, these hints should not be included for
+ *  multi-page PostScript that is composed of a sequence of images;
+ *  consequently, they are not written when calling higher level
+ *  functions such as convertFilesToPS(), convertFilesFittedToPS()
+ *  and convertSegmentedPagesToPS().  The function l_psWriteBoundingBox()
+ *  sets a flag to give low-level control over this.
+ * 
+ */ + +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if USE_PSIO /* defined in environ.h */ + /* --------------------------------------------*/ + +/*-------------------------------------------------------------* + * Convert files in a directory to PS * + *-------------------------------------------------------------*/ +/* + * \brief convertFilesToPS() + * + * \param[in] dirin input directory + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] res typ. 300 or 600 ppi + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a PS file for all image files in a specified
+ *          directory that contain the substr pattern to be matched.
+ *      (2) Each image is written to a separate page in the output PS file.
+ *      (3) All images are written compressed:
+ *              * if tiffg4  -->  use ccittg4
+ *              * if jpeg    -->  use dct
+ *              * all others -->  use flate
+ *          If the image is jpeg or tiffg4, we use the existing compressed
+ *          strings for the encoding; otherwise, we read the image into
+ *          a pix and flate-encode the pieces.
+ *      (4) The resolution is often confusing.  It is interpreted
+ *          as the resolution of the output display device:  "If the
+ *          input image were digitized at 300 ppi, what would it
+ *          look like when displayed at res ppi."  So, for example,
+ *          if res = 100 ppi, then the display pixels are 3x larger
+ *          than the 300 ppi pixels, and the image will be rendered
+ *          3x larger.
+ *      (5) The size of the PostScript file is independent of the resolution,
+ *          because the entire file is encoded.  The res parameter just
+ *          tells the PS decomposer how to render the page.  Therefore,
+ *          for minimum file size without loss of visual information,
+ *          if the output res is less than 300, you should downscale
+ *          the image to the output resolution before wrapping in PS.
+ *      (6) The "canvas" on which the image is rendered, at the given
+ *          output resolution, is a standard page size (8.5 x 11 in).
+ * 
+ */ +l_ok +convertFilesToPS(const char *dirin, + const char *substr, + l_int32 res, + const char *fileout) +{ +SARRAY *sa; + + PROCNAME("convertFilesToPS"); + + if (!dirin) + return ERROR_INT("dirin not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (res <= 0) { + L_INFO("setting res to 300 ppi\n", procName); + res = 300; + } + if (res < 10 || res > 4000) + L_WARNING("res is typically in the range 300-600 ppi\n", procName); + + /* Get all filtered and sorted full pathnames. */ + sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); + + /* Generate the PS file. Don't use bounding boxes. */ + l_psWriteBoundingBox(FALSE); + sarrayConvertFilesToPS(sa, res, fileout); + l_psWriteBoundingBox(TRUE); + sarrayDestroy(&sa); + return 0; +} + + +/* + + * \brief sarrayConvertFilesToPS() + * + * \param[in] sarray of full path names + * \param[in] res typ. 300 or 600 ppi + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) See convertFilesToPS()
+ * 
+ */ +l_ok +sarrayConvertFilesToPS(SARRAY *sa, + l_int32 res, + const char *fileout) +{ +char *fname; +l_int32 i, nfiles, index, ret, format; + + PROCNAME("sarrayConvertFilesToPS"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (res <= 0) { + L_INFO("setting res to 300 ppi\n", procName); + res = 300; + } + if (res < 10 || res > 4000) + L_WARNING("res is typically in the range 300-600 ppi\n", procName); + + nfiles = sarrayGetCount(sa); + for (i = 0, index = 0; i < nfiles; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + ret = pixReadHeader(fname, &format, NULL, NULL, NULL, NULL, NULL); + if (ret) continue; + if (format == IFF_UNKNOWN) + continue; + + writeImageCompressedToPSFile(fname, fileout, res, &index); + } + + return 0; +} + + +/* + * \brief convertFilesFittedToPS() + * + * \param[in] dirin input directory + * \param[in] substr [optional] substring filter on filenames; can be NULL) + * \param[in] xpts desired size in printer points; use 0 for default + * \param[in] ypts desired size in printer points; use 0 for default + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a PS file for all files in a specified directory
+ *          that contain the substr pattern to be matched.
+ *      (2) Each image is written to a separate page in the output PS file.
+ *      (3) All images are written compressed:
+ *              * if tiffg4  -->  use ccittg4
+ *              * if jpeg    -->  use dct
+ *              * all others -->  use flate
+ *          If the image is jpeg or tiffg4, we use the existing compressed
+ *          strings for the encoding; otherwise, we read the image into
+ *          a pix and flate-encode the pieces.
+ *      (4) The resolution is internally determined such that the images
+ *          are rendered, in at least one direction, at 100% of the given
+ *          size in printer points.  Use 0.0 for xpts or ypts to get
+ *          the default value, which is 612.0 or 792.0, rsp.
+ *      (5) The size of the PostScript file is independent of the resolution,
+ *          because the entire file is encoded.  The %xpts and %ypts
+ *          parameter tells the PS decomposer how to render the page.
+ * 
+ */ +l_ok +convertFilesFittedToPS(const char *dirin, + const char *substr, + l_float32 xpts, + l_float32 ypts, + const char *fileout) +{ +SARRAY *sa; + + PROCNAME("convertFilesFittedToPS"); + + if (!dirin) + return ERROR_INT("dirin not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (xpts <= 0.0) { + L_INFO("setting xpts to 612.0 ppi\n", procName); + xpts = 612.0; + } + if (ypts <= 0.0) { + L_INFO("setting ypts to 792.0 ppi\n", procName); + ypts = 792.0; + } + if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) + L_WARNING("xpts,ypts are typically in the range 500-800\n", procName); + + /* Get all filtered and sorted full pathnames. */ + sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); + + /* Generate the PS file. Don't use bounding boxes. */ + l_psWriteBoundingBox(FALSE); + sarrayConvertFilesFittedToPS(sa, xpts, ypts, fileout); + l_psWriteBoundingBox(TRUE); + sarrayDestroy(&sa); + return 0; +} + + +/* + * \brief sarrayConvertFilesFittedToPS() + * + * \param[in] sarray of full path names + * \param[in] xpts desired size in printer points; use 0 for default + * \param[in] ypts desired size in printer points; use 0 for default + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *     (1) See convertFilesFittedToPS()
+ * 
+ */ +l_ok +sarrayConvertFilesFittedToPS(SARRAY *sa, + l_float32 xpts, + l_float32 ypts, + const char *fileout) +{ +char *fname; +l_int32 ret, i, w, h, nfiles, index, format, res; + + PROCNAME("sarrayConvertFilesFittedToPS"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (xpts <= 0.0) { + L_INFO("setting xpts to 612.0\n", procName); + xpts = 612.0; + } + if (ypts <= 0.0) { + L_INFO("setting ypts to 792.0\n", procName); + ypts = 792.0; + } + if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) + L_WARNING("xpts,ypts are typically in the range 500-800\n", procName); + + nfiles = sarrayGetCount(sa); + for (i = 0, index = 0; i < nfiles; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + ret = pixReadHeader(fname, &format, &w, &h, NULL, NULL, NULL); + if (ret) continue; + if (format == IFF_UNKNOWN) + continue; + + /* Be sure the entire image is wrapped */ + if (xpts * h < ypts * w) + res = (l_int32)((l_float32)w * 72.0 / xpts); + else + res = (l_int32)((l_float32)h * 72.0 / ypts); + + writeImageCompressedToPSFile(fname, fileout, res, &index); + } + + return 0; +} + + +/* + * \brief writeImageCompressedToPSFile() + * + * \param[in] filein input image file + * \param[in] fileout output ps file + * \param[in] res output printer resolution + * \param[in,out] pindex index of image in output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This wraps a single page image in PS.
+ *      (2) The input file can be in any format.  It is compressed as follows:
+ *             * if in tiffg4  -->  use ccittg4
+ *             * if in jpeg    -->  use dct
+ *             * all others    -->  use flate
+ *      (3) Before the first call, set %index = 0.  %index is incremented
+ *          if the page is successfully written.  It is used to decide
+ *          whether to write (index == 0) or append (index > 0) to the file.
+ * 
+ */ +l_ok +writeImageCompressedToPSFile(const char *filein, + const char *fileout, + l_int32 res, + l_int32 *pindex) +{ +const char *op; +l_int32 format, retval; + + PROCNAME("writeImageCompressedToPSFile"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + + findFileFormat(filein, &format); + if (format == IFF_UNKNOWN) { + L_ERROR("format of %s not known\n", procName, filein); + return 1; + } + + op = (*pindex == 0) ? "w" : "a"; + if (format == IFF_JFIF_JPEG) { + retval = convertJpegToPS(filein, fileout, op, 0, 0, + res, 1.0, *pindex + 1, TRUE); + } else if (format == IFF_TIFF_G4) { + retval = convertG4ToPS(filein, fileout, op, 0, 0, + res, 1.0, *pindex + 1, FALSE, TRUE); + } else { /* all other image formats */ + retval = convertFlateToPS(filein, fileout, op, 0, 0, + res, 1.0, *pindex + 1, TRUE); + } + if (retval == 0) (*pindex)++; + + return retval; +} + + +/*-------------------------------------------------------------* + * Convert mixed text/image files to PS * + *-------------------------------------------------------------*/ +/* + * \brief convertSegmentedPagesToPS() + * + * \param[in] pagedir input page image directory + * \param[in] pagestr [optional] substring filter on page filenames; + * can be NULL + * \param[in] page_numpre number of characters in page name before number + * \param[in] maskdir input mask image directory + * \param[in] maskstr [optional] substring filter on mask filenames; + * can be NULL + * \param[in] mask_numpre number of characters in mask name before number + * \param[in] numpost number of characters in names after number + * \param[in] maxnum only consider page numbers up to this value + * \param[in] textscale scale of text output relative to pixs + * \param[in] imagescale scale of image output relative to pixs + * \param[in] threshold for binarization; typ. about 190; 0 for default + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a PS file for all page image and mask files in two
+ *          specified directories and that contain the page numbers as
+ *          specified below.  The two directories can be the same, in which
+ *          case the page and mask files are differentiated by the two
+ *          substrings for string matches.
+ *      (2) The page images are taken in lexicographic order.
+ *          Mask images whose numbers match the page images are used to
+ *          segment the page images.  Page images without a matching
+ *          mask image are scaled, thresholded and rendered entirely as text.
+ *      (3) Each PS page is generated as a compressed representation of
+ *          the page image, where the part of the image under the mask
+ *          is suitably scaled and compressed as DCT (i.e., jpeg), and
+ *          the remaining part of the page is suitably scaled, thresholded,
+ *          compressed as G4 (i.e., tiff g4), and rendered by painting
+ *          black through the resulting text mask.
+ *      (4) The scaling is typically 2x down for the DCT component
+ *          (%imagescale = 0.5) and 2x up for the G4 component
+ *          (%textscale = 2.0).
+ *      (5) The resolution is automatically set to fit to a
+ *          letter-size (8.5 x 11 inch) page.
+ *      (6) Both the DCT and the G4 encoding are PostScript level 2.
+ *      (7) It is assumed that the page number is contained within
+ *          the basename (the filename without directory or extension).
+ *          %page_numpre is the number of characters in the page basename
+ *          preceding the actual page number; %mask_numpre is likewise for
+ *          the mask basename; %numpost is the number of characters
+ *          following the page number.  For example, for mask name
+ *          mask_006.tif, mask_numpre = 5 ("mask_).
+ *      (8) To render a page as is -- that is, with no thresholding
+ *          of any pixels -- use a mask in the mask directory that is
+ *          full size with all pixels set to 1.  If the page is 1 bpp,
+ *          it is not necessary to have a mask.
+ * 
+ */ +l_ok +convertSegmentedPagesToPS(const char *pagedir, + const char *pagestr, + l_int32 page_numpre, + const char *maskdir, + const char *maskstr, + l_int32 mask_numpre, + l_int32 numpost, + l_int32 maxnum, + l_float32 textscale, + l_float32 imagescale, + l_int32 threshold, + const char *fileout) +{ +l_int32 pageno, i, npages; +PIX *pixs, *pixm; +SARRAY *sapage, *samask; + + PROCNAME("convertSegmentedPagesToPS"); + + if (!pagedir) + return ERROR_INT("pagedir not defined", procName, 1); + if (!maskdir) + return ERROR_INT("maskdir not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (threshold <= 0) { + L_INFO("setting threshold to 190\n", procName); + threshold = 190; + } + + /* Get numbered full pathnames; max size of sarray is maxnum */ + sapage = getNumberedPathnamesInDirectory(pagedir, pagestr, + page_numpre, numpost, maxnum); + samask = getNumberedPathnamesInDirectory(maskdir, maskstr, + mask_numpre, numpost, maxnum); + sarrayPadToSameSize(sapage, samask, ""); + if ((npages = sarrayGetCount(sapage)) == 0) { + sarrayDestroy(&sapage); + sarrayDestroy(&samask); + return ERROR_INT("no matching pages found", procName, 1); + } + + /* Generate the PS file */ + pageno = 1; + for (i = 0; i < npages; i++) { + if ((pixs = pixReadIndexed(sapage, i)) == NULL) + continue; + pixm = pixReadIndexed(samask, i); + pixWriteSegmentedPageToPS(pixs, pixm, textscale, imagescale, + threshold, pageno, fileout); + pixDestroy(&pixs); + pixDestroy(&pixm); + pageno++; + } + + sarrayDestroy(&sapage); + sarrayDestroy(&samask); + return 0; +} + + +/* + * \brief pixWriteSegmentedPageToPS() + * + * \param[in] pixs all depths; colormap ok + * \param[in] pixm [optional] 1 bpp segmentation mask over image region + * \param[in] textscale scale of text output relative to pixs + * \param[in] imagescale scale of image output relative to pixs + * \param[in] threshold for binarization; typ. about 190; 0 for default + * \param[in] pageno page number in set; use 1 for new output file + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates the PS string for a mixed text/image page,
+ *          and adds it to an existing file if %pageno > 1.
+ *          The PS output is determined by fitting the result to
+ *          a letter-size (8.5 x 11 inch) page.
+ *      (2) The two images (pixs and pixm) are at the same resolution
+ *          (typically 300 ppi).  They are used to generate two compressed
+ *          images, pixb and pixc, that are put directly into the output
+ *          PS file.
+ *      (3) pixb is the text component.  In the PostScript world, we think of
+ *          it as a mask through which we paint black.  It is produced by
+ *          scaling pixs by %textscale, and thresholding to 1 bpp.
+ *      (4) pixc is the image component, which is that part of pixs under
+ *          the mask pixm.  It is scaled from pixs by %imagescale.
+ *      (5) Typical values are textscale = 2.0 and imagescale = 0.5.
+ *      (6) If pixm == NULL, the page has only text.  If it is all black,
+ *          the page is all image and has no text.
+ *      (7) This can be used to write a multi-page PS file, by using
+ *          sequential page numbers with the same output file.  It can
+ *          also be used to write separate PS files for each page,
+ *          by using different output files with %pageno = 0 or 1.
+ * 
+ */ +l_ok +pixWriteSegmentedPageToPS(PIX *pixs, + PIX *pixm, + l_float32 textscale, + l_float32 imagescale, + l_int32 threshold, + l_int32 pageno, + const char *fileout) +{ +l_int32 alltext, notext, d, ret; +l_uint32 val; +l_float32 scaleratio; +PIX *pixmi, *pixmis, *pixt, *pixg, *pixsc, *pixb, *pixc; + + PROCNAME("pixWriteSegmentedPageToPS"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (imagescale <= 0.0 || textscale <= 0.0) + return ERROR_INT("relative scales must be > 0.0", procName, 1); + + /* Analyze the page. Determine the ratio by which the + * binary text mask is scaled relative to the image part. + * If there is no image region (alltext == TRUE), the + * text mask will be rendered directly to fit the page, + * and scaleratio = 1.0. */ + alltext = TRUE; + notext = FALSE; + scaleratio = 1.0; + if (pixm) { + pixZero(pixm, &alltext); /* pixm empty: all text */ + if (alltext) { + pixm = NULL; /* treat it as not existing here */ + } else { + pixmi = pixInvert(NULL, pixm); + pixZero(pixmi, ¬ext); /* pixm full; no text */ + pixDestroy(&pixmi); + scaleratio = textscale / imagescale; + } + } + + if (pixGetDepth(pixs) == 1) { /* render tiff g4 */ + pixb = pixClone(pixs); + pixc = NULL; + } else { + pixt = pixConvertTo8Or32(pixs, L_CLONE, 0); /* clone if possible */ + + /* Get the binary text mask. Note that pixg cannot be a + * clone of pixs, because it may be altered by pixSetMasked(). */ + pixb = NULL; + if (notext == FALSE) { + d = pixGetDepth(pixt); + if (d == 8) + pixg = pixCopy(NULL, pixt); + else /* d == 32 */ + pixg = pixConvertRGBToLuminance(pixt); + if (pixm) /* clear out the image parts */ + pixSetMasked(pixg, pixm, 255); + if (textscale == 1.0) + pixsc = pixClone(pixg); + else if (textscale >= 0.7) + pixsc = pixScaleGrayLI(pixg, textscale, textscale); + else + pixsc = pixScaleAreaMap(pixg, textscale, textscale); + pixb = pixThresholdToBinary(pixsc, threshold); + pixDestroy(&pixg); + pixDestroy(&pixsc); + } + + /* Get the scaled image region */ + pixc = NULL; + if (pixm) { + if (imagescale == 1.0) + pixsc = pixClone(pixt); /* can possibly be a clone of pixs */ + else + pixsc = pixScale(pixt, imagescale, imagescale); + + /* If pixm is not full, clear the pixels in pixsc + * corresponding to bg in pixm, where there can be text + * that is written through the mask pixb. Note that + * we could skip this and use pixsc directly in + * pixWriteMixedToPS(); however, clearing these + * non-image regions to a white background will reduce + * the size of pixc (relative to pixsc), and hence + * reduce the size of the PS file that is generated. + * Use a copy so that we don't accidentally alter pixs. */ + if (notext == FALSE) { + pixmis = pixScale(pixm, imagescale, imagescale); + pixmi = pixInvert(NULL, pixmis); + val = (d == 8) ? 0xff : 0xffffff00; + pixc = pixCopy(NULL, pixsc); + pixSetMasked(pixc, pixmi, val); /* clear non-image part */ + pixDestroy(&pixmis); + pixDestroy(&pixmi); + } else { + pixc = pixClone(pixsc); + } + pixDestroy(&pixsc); + } + pixDestroy(&pixt); + } + + /* Generate the PS file. Don't use bounding boxes. */ + l_psWriteBoundingBox(FALSE); + ret = pixWriteMixedToPS(pixb, pixc, scaleratio, pageno, fileout); + l_psWriteBoundingBox(TRUE); + pixDestroy(&pixb); + pixDestroy(&pixc); + return ret; +} + + +/* + * \brief pixWriteMixedToPS() + * + * \param[in] pixb [optional] 1 bpp mask; typically for text + * \param[in] pixc [optional] 8 or 32 bpp image regions + * \param[in] scale scale factor for rendering pixb, relative to pixc; + * typ. 4.0 + * \param[in] pageno page number in set; use 1 for new output file + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This low level function generates the PS string for a mixed
+ *          text/image page, and adds it to an existing file if
+ *          %pageno > 1.
+ *      (2) The two images (pixb and pixc) are typically generated at the
+ *          resolution that they will be rendered in the PS file.
+ *      (3) pixb is the text component.  In the PostScript world, we think of
+ *          it as a mask through which we paint black.
+ *      (4) pixc is the (typically halftone) image component.  It is
+ *          white in the rest of the page.  To minimize the size of the
+ *          PS file, it should be rendered at a resolution that is at
+ *          least equal to its actual resolution.
+ *      (5) %scale gives the ratio of resolution of pixb to pixc.
+ *          Typical resolutions are: 600 ppi for pixb, 150 ppi for pixc;
+ *          so %scale = 4.0.  If one of the images is not defined,
+ *          the value of %scale is ignored.
+ *      (6) We write pixc with DCT compression (jpeg).  This is followed
+ *          by painting the text as black through the mask pixb.  If
+ *          pixc doesn't exist (alltext), we write the text with the
+ *          PS "image" operator instead of the "imagemask" operator,
+ *          because ghostscript's ps2pdf is flaky when the latter is used.
+ *      (7) The actual output resolution is determined by fitting the
+ *          result to a letter-size (8.5 x 11 inch) page.
+ * 
+ */
+l_ok
+pixWriteMixedToPS(PIX         *pixb,
+                  PIX         *pixc,
+                  l_float32    scale,
+                  l_int32      pageno,
+                  const char  *fileout)
+{
+char        *tname;
+const char  *op;
+l_int32      resb, resc, endpage, maskop, ret;
+
+    PROCNAME("pixWriteMixedToPS");
+
+    if (!pixb && !pixc)
+        return ERROR_INT("pixb and pixc both undefined", procName, 1);
+    if (!fileout)
+        return ERROR_INT("fileout not defined", procName, 1);
+
+        /* Compute the resolution that fills a letter-size page. */
+    if (!pixc) {
+       resb = getResLetterPage(pixGetWidth(pixb), pixGetHeight(pixb), 0);
+    } else {
+       resc = getResLetterPage(pixGetWidth(pixc), pixGetHeight(pixc), 0);
+       if (pixb)
+           resb = (l_int32)(scale * resc);
+    }
+
+        /* Write the jpeg image first */
+    if (pixc) {
+        tname = l_makeTempFilename();
+        pixWrite(tname, pixc, IFF_JFIF_JPEG);
+        endpage = (pixb) ? FALSE : TRUE;
+        op = (pageno <= 1) ? "w" : "a";
+        ret = convertJpegToPS(tname, fileout, op, 0, 0, resc, 1.0,
+                              pageno, endpage);
+        lept_rmfile(tname);
+        LEPT_FREE(tname);
+        if (ret)
+            return ERROR_INT("jpeg data not written", procName, 1);
+    }
+
+        /* Write the binary data, either directly or, if there is
+         * a jpeg image on the page, through the mask. */
+    if (pixb) {
+        tname = l_makeTempFilename();
+        pixWrite(tname, pixb, IFF_TIFF_G4);
+        op = (pageno <= 1 && !pixc) ? "w" : "a";
+        maskop = (pixc) ? 1 : 0;
+        ret = convertG4ToPS(tname, fileout, op, 0, 0, resb, 1.0,
+                            pageno, maskop, 1);
+        lept_rmfile(tname);
+        LEPT_FREE(tname);
+        if (ret)
+            return ERROR_INT("tiff data not written", procName, 1);
+    }
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------*
+ *            Convert any image file to PS for embedding       *
+ *-------------------------------------------------------------*/
+/*
+ * \brief  convertToPSEmbed()
+ *
+ * \param[in]     filein    input image file, any format
+ * \param[in]     fileout   output ps file
+ * \param[in]     level     PostScript compression: 1 (uncompressed), 2 or 3
+ * \return  0 if OK, 1 on error
+ *
+ * 
+ * Notes:
+ *      (1) This is a wrapper function that generates a PS file with
+ *          a bounding box, from any input image file.
+ *      (2) Do the best job of compression given the specified level.
+ *          %level=3 does flate compression on anything that is not
+ *          tiffg4 (1 bpp) or jpeg (8 bpp or rgb).
+ *      (3) If %level=2 and the file is not tiffg4 or jpeg, it will
+ *          first be written to file as jpeg with quality = 75.
+ *          This will remove the colormap and cause some degradation
+ *          in the image.
+ *      (4) The bounding box is required when a program such as TeX
+ *          (through epsf) places and rescales the image.  It is
+ *          sized for fitting the image to an 8.5 x 11.0 inch page.
+ * 
+ */ +l_ok +convertToPSEmbed(const char *filein, + const char *fileout, + l_int32 level) +{ +char *tname; +l_int32 d, format; +PIX *pix, *pixs; + + PROCNAME("convertToPSEmbed"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (level != 1 && level != 2 && level != 3) { + L_ERROR("invalid level specified; using level 2\n", procName); + level = 2; + } + + if (level == 1) { /* no compression */ + pixWritePSEmbed(filein, fileout); + return 0; + } + + /* Find the format and write out directly if in jpeg or tiff g4 */ + findFileFormat(filein, &format); + if (format == IFF_JFIF_JPEG) { + convertJpegToPSEmbed(filein, fileout); + return 0; + } else if (format == IFF_TIFF_G4) { + convertG4ToPSEmbed(filein, fileout); + return 0; + } else if (format == IFF_UNKNOWN) { + L_ERROR("format of %s not known\n", procName, filein); + return 1; + } + + /* If level 3, flate encode. */ + if (level == 3) { + convertFlateToPSEmbed(filein, fileout); + return 0; + } + + /* OK, it's level 2, so we must convert to jpeg or tiff g4 */ + if ((pixs = pixRead(filein)) == NULL) + return ERROR_INT("image not read from file", procName, 1); + d = pixGetDepth(pixs); + if ((d == 2 || d == 4) && !pixGetColormap(pixs)) + pix = pixConvertTo8(pixs, 0); + else if (d == 16) + pix = pixConvert16To8(pixs, L_MS_BYTE); + else + pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + pixDestroy(&pixs); + if (!pix) + return ERROR_INT("converted pix not made", procName, 1); + + d = pixGetDepth(pix); + tname = l_makeTempFilename(); + if (d == 1) { + if (pixWrite(tname, pix, IFF_TIFF_G4)) { + LEPT_FREE(tname); + pixDestroy(&pix); + return ERROR_INT("g4 tiff not written", procName, 1); + } + convertG4ToPSEmbed(tname, fileout); + } else { + if (pixWrite(tname, pix, IFF_JFIF_JPEG)) { + LEPT_FREE(tname); + pixDestroy(&pix); + return ERROR_INT("jpeg not written", procName, 1); + } + convertJpegToPSEmbed(tname, fileout); + } + + lept_rmfile(tname); + LEPT_FREE(tname); + pixDestroy(&pix); + return 0; +} + + +/*-------------------------------------------------------------* + * Write all images in a pixa out to PS * + *-------------------------------------------------------------*/ +/* + * \brief pixaWriteCompressedToPS() + * + * \param[in] pixa any set of images + * \param[in] fileout output ps file + * \param[in] res resolution for the set of input images + * \param[in] level PostScript compression capability: 2 or 3 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a PostScript file of multiple page images,
+ *          all with bounding boxes.
+ *      (2) See pixWriteCompressedToPS() for details.
+ *      (3) To generate a pdf from %fileout, use:
+ *             ps2pdf  
+ * 
+ */ +l_ok +pixaWriteCompressedToPS(PIXA *pixa, + const char *fileout, + l_int32 res, + l_int32 level) +{ +l_int32 i, n, index, ret; +PIX *pix; + + PROCNAME("pixaWriteCompressedToPS"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (level != 2 && level != 3) { + L_ERROR("only levels 2 and 3 permitted; using level 2\n", procName); + level = 2; + } + + index = 0; + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + ret = pixWriteCompressedToPS(pix, fileout, res, level, &index); + if (ret) L_ERROR("PS string not written for image %d\n", procName, i); + pixDestroy(&pix); + } + return 0; +} + + +/* + * \brief pixWriteCompressedToPS() + * + * \param[in] pix any depth; colormap OK + * \param[in] fileout output ps file + * \param[in] res of input image + * \param[in] level PostScript compression capability: 2 or 3 + * \param[in,out] pindex index of image in output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates a PostScript string for %pix, and writes it
+ *          to a file, with a bounding box.
+ *      (2) *pindex keeps track of the number of images that have been
+ *          written to %fileout.  If this is the first image to be
+ *          converted, set *pindex == 0 before passing it in.  If the
+ *          PostScript string is successfully generated, this will increment
+ *          *pindex.  If *pindex > 0, the PostScript string will be
+ *          appended to %fileout.
+ *      (3) PostScript level 2 enables lossless tiffg4 and lossy jpeg
+ *          compression.  Level 3 adds lossless flate (essentially gzip)
+ *          compression.
+ *          * For images with a colormap, lossless flate is often better in
+ *            both quality and size than jpeg.
+ *          * The decision for images without a colormap affects compression
+ *            efficiency: %level2 (jpeg) is usually better than %level3 (flate)
+ *          * Because jpeg does not handle 16 bpp, if %level == 2, the image
+ *            is converted to 8 bpp (using MSB) and compressed with jpeg,
+ *              cmap + level2:        jpeg
+ *              cmap + level3:        flate
+ *              1 bpp:                tiffg4
+ *              2 or 4 bpp + level2:  jpeg
+ *              2 or 4 bpp + level3:  flate
+ *              8 bpp + level2:       jpeg
+ *              8 bpp + level3:       flate
+ *              16 bpp + level2:      jpeg   [converted to 8 bpp, with warning]
+ *              16 bpp + level3:      flate
+ *              32 bpp + level2:      jpeg
+ *              32 bpp + level3:      flate
+ * 
+ */ +l_ok +pixWriteCompressedToPS(PIX *pix, + const char *fileout, + l_int32 res, + l_int32 level, + l_int32 *pindex) +{ +char *tname; +l_int32 writeout, d; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixWriteCompressedToPS"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (level != 2 && level != 3) { + L_ERROR("only levels 2 and 3 permitted; using level 2\n", procName); + level = 2; + } + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + + tname = l_makeTempFilename(); + writeout = TRUE; + d = pixGetDepth(pix); + cmap = pixGetColormap(pix); + if (d == 1) { + if (pixWrite(tname, pix, IFF_TIFF_G4)) + writeout = FALSE; + } else if (level == 3) { + if (pixWrite(tname, pix, IFF_PNG)) + writeout = FALSE; + } else { /* level == 2 */ + if (cmap) { + pixt = pixConvertForPSWrap(pix); + if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) + writeout = FALSE; + pixDestroy(&pixt); + } else if (d == 16) { + L_WARNING("d = 16; converting to 8 bpp for jpeg\n", procName); + pixt = pixConvert16To8(pix, L_MS_BYTE); + if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) + writeout = FALSE; + pixDestroy(&pixt); + } else if (d == 2 || d == 4) { + pixt = pixConvertTo8(pix, 0); + if (pixWrite(tname, pixt, IFF_JFIF_JPEG)) + writeout = FALSE; + pixDestroy(&pixt); + } else if (d == 8 || d == 32) { + if (pixWrite(tname, pix, IFF_JFIF_JPEG)) + writeout = FALSE; + } else { /* shouldn't happen */ + L_ERROR("invalid depth with level 2: %d\n", procName, d); + writeout = FALSE; + } + } + + if (writeout) + writeImageCompressedToPSFile(tname, fileout, res, pindex); + + if (lept_rmfile(tname) != 0) + L_ERROR("temp file %s was not deleted\n", procName, tname); + LEPT_FREE(tname); + return (writeout) ? 0 : 1; +} + +/* --------------------------------------------*/ +#endif /* USE_PSIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/psio1stub.c b/3rdparty/hgOCR/leptonica/psio1stub.c new file mode 100644 index 00000000..96a044c7 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/psio1stub.c @@ -0,0 +1,133 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file psio1stub.c + *
+ *
+ *     Stubs for psio1.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_PSIO /* defined in environ.h */ +/* --------------------------------------------*/ + +l_ok convertFilesToPS(const char *dirin, const char *substr, + l_int32 res, const char *fileout) +{ + return ERROR_INT("function not present", "convertFilesToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok sarrayConvertFilesToPS(SARRAY *sa, l_int32 res, const char *fileout) +{ + return ERROR_INT("function not present", "sarrayConvertFilesToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertFilesFittedToPS(const char *dirin, const char *substr, + l_float32 xpts, l_float32 ypts, + const char *fileout) +{ + return ERROR_INT("function not present", "convertFilesFittedToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok sarrayConvertFilesFittedToPS(SARRAY *sa, l_float32 xpts, + l_float32 ypts, const char *fileout) +{ + return ERROR_INT("function not present", "sarrayConvertFilesFittedToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok writeImageCompressedToPSFile(const char *filein, const char *fileout, + l_int32 res, l_int32 *pindex) +{ + return ERROR_INT("function not present", "writeImageCompressedToPSFile", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertSegmentedPagesToPS(const char *pagedir, const char *pagestr, + l_int32 page_numpre, const char *maskdir, + const char *maskstr, l_int32 mask_numpre, + l_int32 numpost, l_int32 maxnum, + l_float32 textscale, l_float32 imagescale, + l_int32 threshold, const char *fileout) +{ + return ERROR_INT("function not present", "convertSegmentedPagesToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteSegmentedPageToPS(PIX *pixs, PIX *pixm, l_float32 textscale, + l_float32 imagescale, l_int32 threshold, + l_int32 pageno, const char *fileout) +{ + return ERROR_INT("function not present", "pixWriteSegmentedPagesToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMixedToPS(PIX *pixb, PIX *pixc, l_float32 scale, + l_int32 pageno, const char *fileout) +{ + return ERROR_INT("function not present", "pixWriteMixedToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertToPSEmbed(const char *filein, const char *fileout, l_int32 level) +{ + return ERROR_INT("function not present", "convertToPSEmbed", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaWriteCompressedToPS(PIXA *pixa, const char *fileout, + l_int32 res, l_int32 level) +{ + return ERROR_INT("function not present", "pixaWriteCompressedtoPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteCompressedToPS(PIX *pix, const char *fileout, l_int32 res, + l_int32 level, l_int32 *pindex) +{ + return ERROR_INT("function not present", "pixWriteCompressedtoPS", 1); +} + +/* --------------------------------------------*/ +#endif /* !USE_PSIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/psio2.c b/3rdparty/hgOCR/leptonica/psio2.c new file mode 100644 index 00000000..de6d0a2f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/psio2.c @@ -0,0 +1,2041 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file psio2.c + *
+ *
+ *    |=============================================================|
+ *    |                         Important note                      |
+ *    |=============================================================|
+ *    | Some of these functions require I/O libraries such as       |
+ *    | libtiff, libjpeg, and libz.  If you do not have these       |
+ *    | libraries, some calls will fail.                            |
+ *    |                                                             |
+ *    | You can manually deactivate all PostScript writing by       |
+ *    | setting this in environ.h:                                  |
+ *    | \code                                                       |
+ *    |     #define  USE_PSIO     0                                 |
+ *    | \endcode                                                    |
+ *    | in environ.h.  This will link psio2stub.c                   |
+ *    |=============================================================|
+ *
+ *     These are lower-level functions that implement a PostScript
+ *     "device driver" for wrapping images in PostScript.  The images
+ *     can be rendered by a PostScript interpreter for viewing,
+ *     using evince or gv.  They can also be rasterized for printing,
+ *     using gs or an embedded interpreter in a PostScript printer.
+ *     And they can be converted to a pdf using gs (ps2pdf).
+ *
+ *     For uncompressed images
+ *          l_int32              pixWritePSEmbed()
+ *          l_int32              pixWriteStreamPS()
+ *          char                *pixWriteStringPS()
+ *          char                *generateUncompressedPS()
+ *          static void          getScaledParametersPS()
+ *          static l_int32       convertByteToHexAscii()
+ *
+ *     For jpeg compressed images (use dct compression)
+ *          l_int32              convertJpegToPSEmbed()
+ *          l_int32              convertJpegToPS()
+ *          static l_int32       convertJpegToPSString()
+ *          static char         *generateJpegPS()
+ *
+ *     For g4 fax compressed images (use ccitt g4 compression)
+ *          l_int32              convertG4ToPSEmbed()
+ *          l_int32              convertG4ToPS()
+ *          static l_int32       convertG4ToPSString()
+ *          static char         *generateG4PS()
+ *
+ *     For multipage tiff images
+ *          l_int32              convertTiffMultipageToPS()
+ *
+ *     For flate (gzip) compressed images (e.g., png)
+ *          l_int32              convertFlateToPSEmbed()
+ *          l_int32              convertFlateToPS()
+ *          static l_int32       convertFlateToPSString()
+ *          static char         *generateFlatePS()
+ *
+ *     Write to memory
+ *          l_int32              pixWriteMemPS()
+ *
+ *     Converting resolution
+ *          l_int32              getResLetterPage()
+ *          static l_int32       getResA4Page()
+ *
+ *     Setting flag for writing bounding box hint
+ *          void                 l_psWriteBoundingBox()
+ *
+ *  See psio1.c for higher-level functions and their usage.
+ * 
+ */ + +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if USE_PSIO /* defined in environ.h */ + /* --------------------------------------------*/ + + /* Set default for writing bounding box hint */ +static l_int32 var_PS_WRITE_BOUNDING_BOX = 1; + +//static const l_int32 Bufsize = 512; +#define Bufsize 512 +static const l_int32 DefaultInputRes = 300; /* typical scan res, ppi */ +static const l_int32 MinRes = 5; +static const l_int32 MaxRes = 3000; + + /* For computing resolution that fills page to desired amount */ +static const l_int32 LetterWidth = 612; /* points */ +static const l_int32 LetterHeight = 792; /* points */ +static const l_int32 A4Width = 595; /* points */ +static const l_int32 A4Height = 842; /* points */ +static const l_float32 DefaultFillFraction = 0.95; + +#ifndef NO_CONSOLE_IO +#define DEBUG_JPEG 0 +#define DEBUG_G4 0 +#define DEBUG_FLATE 0 +#endif /* ~NO_CONSOLE_IO */ + +/* Note that the bounding box hint at the top of the generated PostScript + * file is required for the "*Embed" functions. These generate a + * PostScript file for an individual image that can be translated and + * scaled by an application that embeds the image in its output + * (e.g., in the PS output from a TeX file). + * However, bounding box hints should not be embedded in any + * PostScript image that will be composited with other images, + * where more than one image may be placed in an arbitrary location + * on a page. */ + + /* Static helper functions */ +static void getScaledParametersPS(BOX *box, l_int32 wpix, l_int32 hpix, + l_int32 res, l_float32 scale, + l_float32 *pxpt, l_float32 *pypt, + l_float32 *pwpt, l_float32 *phpt); +static void convertByteToHexAscii(l_uint8 byteval, char *pnib1, char *pnib2); +static l_ok convertJpegToPSString(const char *filein, char **poutstr, + l_int32 *pnbytes, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, + l_int32 pageno, l_int32 endpage); +static char *generateJpegPS(const char *filein, L_COMP_DATA *cid, + l_float32 xpt, l_float32 ypt, l_float32 wpt, + l_float32 hpt, l_int32 pageno, l_int32 endpage); +static l_ok convertG4ToPSString(const char *filein, char **poutstr, + l_int32 *pnbytes, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, l_int32 pageno, + l_int32 maskflag, l_int32 endpage); +static char *generateG4PS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, + l_float32 ypt, l_float32 wpt, l_float32 hpt, + l_int32 maskflag, l_int32 pageno, l_int32 endpage); +static l_ok convertFlateToPSString(const char *filein, char **poutstr, + l_int32 *pnbytes, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, + l_int32 pageno, l_int32 endpage); +static char *generateFlatePS(const char *filein, L_COMP_DATA *cid, + l_float32 xpt, l_float32 ypt, l_float32 wpt, + l_float32 hpt, l_int32 pageno, l_int32 endpage); + + +/*-------------------------------------------------------------* + * For uncompressed images * + *-------------------------------------------------------------*/ +/*! + * \brief pixWritePSEmbed() + * + * \param[in] filein input file, all depths, colormap OK + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a simple wrapper function that generates an
+ *          uncompressed PS file, with a bounding box.
+ *      (2) The bounding box is required when a program such as TeX
+ *          (through epsf) places and rescales the image.
+ *      (3) The bounding box is sized for fitting the image to an
+ *          8.5 x 11.0 inch page.
+ * 
+ */ +l_ok +pixWritePSEmbed(const char *filein, + const char *fileout) +{ +l_int32 w, h, ret; +l_float32 scale; +FILE *fp; +PIX *pix; + + PROCNAME("pixWritePSEmbed"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((pix = pixRead(filein)) == NULL) + return ERROR_INT("image not read from file", procName, 1); + w = pixGetWidth(pix); + h = pixGetHeight(pix); + if (w * 11.0 > h * 8.5) + scale = 8.5 * 300. / (l_float32)w; + else + scale = 11.0 * 300. / (l_float32)h; + + if ((fp = fopenWriteStream(fileout, "wb")) == NULL) + return ERROR_INT("file not opened for write", procName, 1); + ret = pixWriteStreamPS(fp, pix, NULL, 0, scale); + fclose(fp); + + pixDestroy(&pix); + return ret; +} + + +/*! + * \brief pixWriteStreamPS() + * + * \param[in] fp file stream + * \param[in] pix + * \param[in] box [optional] + * \param[in] res can use 0 for default of 300 ppi + * \param[in] scale to prevent scaling, use either 1.0 or 0.0 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This writes image in PS format, optionally scaled,
+ *          adjusted for the printer resolution, and with
+ *          a bounding box.
+ *      (2) For details on use of parameters, see pixWriteStringPS().
+ * 
+ */ +l_ok +pixWriteStreamPS(FILE *fp, + PIX *pix, + BOX *box, + l_int32 res, + l_float32 scale) +{ +char *outstr; +l_int32 length; +PIX *pixc; + + PROCNAME("pixWriteStreamPS"); + + if (!fp) + return (l_int32)ERROR_INT("stream not open", procName, 1); + if (!pix) + return (l_int32)ERROR_INT("pix not defined", procName, 1); + + if ((pixc = pixConvertForPSWrap(pix)) == NULL) + return (l_int32)ERROR_INT("pixc not made", procName, 1); + + if ((outstr = pixWriteStringPS(pixc, box, res, scale)) == NULL) { + pixDestroy(&pixc); + return (l_int32)ERROR_INT("outstr not made", procName, 1); + } + length = strlen(outstr); + fwrite(outstr, 1, length, fp); + LEPT_FREE(outstr); + pixDestroy(&pixc); + return 0; +} + + +/*! + * \brief pixWriteStringPS() + * + * \param[in] pixs all depths, colormap OK + * \param[in] box bounding box; can be NULL + * \param[in] res resolution, in printer ppi. Use 0 for default 300 ppi. + * \param[in] scale scale factor. If no scaling is desired, use + * either 1.0 or 0.0. Scaling just resets the resolution + * parameter; the actual scaling is done in the + * interpreter at rendering time. This is important: + * it allows you to scale the image up without + * increasing the file size. + * \return ps string if OK, or NULL on error + * + *
+ * a) If %box == NULL, image is placed, optionally scaled,
+ *      in a standard b.b. at the center of the page.
+ *      This is to be used when another program like
+ *      TeX through epsf places the image.
+ * b) If %box != NULL, image is placed without a
+ *      b.b. at the specified page location and with
+ *      optional scaling.  This is to be used when
+ *      you want to specify exactly where and optionally
+ *      how big you want the image to be.
+ *      Note that all coordinates are in PS convention,
+ *      with 0,0 at LL corner of the page:
+ *          x,y    location of LL corner of image, in mils.
+ *          w,h    scaled size, in mils.  Use 0 to
+ *                 scale with "scale" and "res" input.
+ *
+ * %scale: If no scaling is desired, use either 1.0 or 0.0.
+ * Scaling just resets the resolution parameter; the actual
+ * scaling is done in the interpreter at rendering time.
+ * This is important: * it allows you to scale the image up
+ * without increasing the file size.
+ *
+ * Notes:
+ *      (1) OK, this seems a bit complicated, because there are various
+ *          ways to scale and not to scale.  Here's a summary:
+ *      (2) If you don't want any scaling at all:
+ *           * if you are using a box:
+ *               set w = 0, h = 0, and use scale = 1.0; it will print
+ *               each pixel unscaled at printer resolution
+ *           * if you are not using a box:
+ *               set scale = 1.0; it will print at printer resolution
+ *      (3) If you want the image to be a certain size in inches:
+ *           * you must use a box and set the box (w,h) in mils
+ *      (4) If you want the image to be scaled by a scale factor != 1.0:
+ *           * if you are using a box:
+ *               set w = 0, h = 0, and use the desired scale factor;
+ *               the higher the printer resolution, the smaller the
+ *               image will actually appear.
+ *           * if you are not using a box:
+ *               set the desired scale factor; the higher the printer
+ *               resolution, the smaller the image will actually appear.
+ *      (5) Another complication is the proliferation of distance units:
+ *           * The interface distances are in milli-inches.
+ *           * Three different units are used internally:
+ *              ~ pixels  (units of 1/res inch)
+ *              ~ printer pts (units of 1/72 inch)
+ *              ~ inches
+ *           * Here is a quiz on volume units from a reviewer:
+ *             How many UK milli-cups in a US kilo-teaspoon?
+ *               (Hint: 1.0 US cup = 0.75 UK cup + 0.2 US gill;
+ *                      1.0 US gill = 24.0 US teaspoons)
+ * 
+ */ +char * +pixWriteStringPS(PIX *pixs, + BOX *box, + l_int32 res, + l_float32 scale) +{ +char nib1, nib2; +char *hexdata, *outstr; +l_uint8 byteval; +l_int32 i, j, k, w, h, d; +l_float32 wpt, hpt, xpt, ypt; +l_int32 wpl, psbpl, hexbytes, boxflag, bps; +l_uint32 *line, *data; +PIX *pix; + + PROCNAME("pixWriteStringPS"); + + if (!pixs) + return (char *)ERROR_PTR("pixs not defined", procName, NULL); + + if ((pix = pixConvertForPSWrap(pixs)) == NULL) + return (char *)ERROR_PTR("pix not made", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + + /* Get the factors by which PS scales and translates, in pts */ + if (!box) + boxflag = 0; /* no scaling; b.b. at center */ + else + boxflag = 1; /* no b.b., specify placement and optional scaling */ + getScaledParametersPS(box, w, h, res, scale, &xpt, &ypt, &wpt, &hpt); + + if (d == 1) + bps = 1; /* bits/sample */ + else /* d == 8 || d == 32 */ + bps = 8; + + /* Convert image data to hex string. psbpl is the number of + * bytes in each raster line when it is packed to the byte + * boundary (not the 32 bit word boundary, as with the pix). + * When converted to hex, the hex string has 2 bytes for + * every byte of raster data. */ + wpl = pixGetWpl(pix); + if (d == 1 || d == 8) + psbpl = (w * d + 7) / 8; + else /* d == 32 */ + psbpl = 3 * w; + data = pixGetData(pix); + hexbytes = 2 * psbpl * h; /* size of ps hex array */ + if ((hexdata = (char *)LEPT_CALLOC(hexbytes + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("hexdata not made", procName, NULL); + if (d == 1 || d == 8) { + for (i = 0, k = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < psbpl; j++) { + byteval = GET_DATA_BYTE(line, j); + convertByteToHexAscii(byteval, &nib1, &nib2); + hexdata[k++] = nib1; + hexdata[k++] = nib2; + } + } + } else { /* d == 32; hexdata bytes packed RGBRGB..., 2 per sample */ + for (i = 0, k = 0; i < h; i++) { + line = data + i * wpl; + for (j = 0; j < w; j++) { + byteval = GET_DATA_BYTE(line + j, 0); /* red */ + convertByteToHexAscii(byteval, &nib1, &nib2); + hexdata[k++] = nib1; + hexdata[k++] = nib2; + byteval = GET_DATA_BYTE(line + j, 1); /* green */ + convertByteToHexAscii(byteval, &nib1, &nib2); + hexdata[k++] = nib1; + hexdata[k++] = nib2; + byteval = GET_DATA_BYTE(line + j, 2); /* blue */ + convertByteToHexAscii(byteval, &nib1, &nib2); + hexdata[k++] = nib1; + hexdata[k++] = nib2; + } + } + } + hexdata[k] = '\0'; + + outstr = generateUncompressedPS(hexdata, w, h, d, psbpl, bps, + xpt, ypt, wpt, hpt, boxflag); + pixDestroy(&pix); + if (!outstr) + return (char *)ERROR_PTR("outstr not made", procName, NULL); + return outstr; +} + + +/*! + * \brief generateUncompressedPS() + * + * \param[in] hexdata + * \param[in] w, h raster image size in pixels + * \param[in] d image depth in bpp; rgb is 32 + * \param[in] psbpl raster bytes/line, when packed to the byte boundary + * \param[in] bps bits/sample: either 1 or 8 + * \param[in] xpt, ypt location of LL corner of image, in pts, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] wpt, hpt rendered image size in pts + * \param[in] boxflag 1 to print out bounding box hint; 0 to skip + * \return PS string, or NULL on error + * + *
+ * Notes:
+ *      (1) Low-level function.
+ * 
+ */ +char * +generateUncompressedPS(char *hexdata, + l_int32 w, + l_int32 h, + l_int32 d, + l_int32 psbpl, + l_int32 bps, + l_float32 xpt, + l_float32 ypt, + l_float32 wpt, + l_float32 hpt, + l_int32 boxflag) +{ +char *outstr; +char bigbuf[Bufsize]; +SARRAY *sa; + + PROCNAME("generateUncompressedPS"); + + if (!hexdata) + return (char *)ERROR_PTR("hexdata not defined", procName, NULL); + + sa = sarrayCreate(0); + sarrayAddString(sa, "%!Adobe-PS", L_COPY); + if (boxflag == 0) { + snprintf(bigbuf, sizeof(bigbuf), + "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", + xpt, ypt, xpt + wpt, ypt + hpt); + sarrayAddString(sa, bigbuf, L_COPY); + } else { /* boxflag == 1 */ + sarrayAddString(sa, "gsave", L_COPY); + } + + if (d == 1) + sarrayAddString(sa, + "{1 exch sub} settransfer %invert binary", L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "/bpl %d string def %%bpl as a string", psbpl); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + "%d %d %d %%image dimensions in pixels", w, h, bps); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + "[%d %d %d %d %d %d] %%mapping matrix: [w 0 0 -h 0 h]", + w, 0, 0, -h, 0, h); + sarrayAddString(sa, bigbuf, L_COPY); + + if (boxflag == 0) { + if (d == 1 || d == 8) + sarrayAddString(sa, + "{currentfile bpl readhexstring pop} image", L_COPY); + else /* d == 32 */ + sarrayAddString(sa, + "{currentfile bpl readhexstring pop} false 3 colorimage", + L_COPY); + } else { /* boxflag == 1 */ + if (d == 1 || d == 8) + sarrayAddString(sa, + "{currentfile bpl readhexstring pop} bind image", L_COPY); + else /* d == 32 */ + sarrayAddString(sa, + "{currentfile bpl readhexstring pop} bind false 3 colorimage", + L_COPY); + } + + sarrayAddString(sa, hexdata, L_INSERT); + + if (boxflag == 0) + sarrayAddString(sa, "\nshowpage", L_COPY); + else /* boxflag == 1 */ + sarrayAddString(sa, "\ngrestore", L_COPY); + + outstr = sarrayToString(sa, 1); + sarrayDestroy(&sa); + if (!outstr) L_ERROR("outstr not made\n", procName); + return outstr; +} + + +/*! + * \brief getScaledParametersPS() + * + * \param[in] box [optional] location of image in mils; x,y is LL corner + * \param[in] wpix pix width in pixels + * \param[in] hpix pix height in pixels + * \param[in] res of printer; use 0 for default + * \param[in] scale use 1.0 or 0.0 for no scaling + * \param[out] pxpt location of llx in pts + * \param[out] pypt location of lly in pts + * \param[out] pwpt image width in pts + * \param[out] phpt image height in pts + * \return void no arg checking + * + *
+ * Notes:
+ *      (1) The image is always scaled, depending on res and scale.
+ *      (2) If no box, the image is centered on the page.
+ *      (3) If there is a box, the image is placed within it.
+ * 
+ */ +static void +getScaledParametersPS(BOX *box, + l_int32 wpix, + l_int32 hpix, + l_int32 res, + l_float32 scale, + l_float32 *pxpt, + l_float32 *pypt, + l_float32 *pwpt, + l_float32 *phpt) +{ +l_int32 bx, by, bw, bh; +l_float32 winch, hinch, xinch, yinch, fres; + + PROCNAME("getScaledParametersPS"); + + if (res == 0) + res = DefaultInputRes; + fres = (l_float32)res; + + /* Allow the PS interpreter to scale the resolution */ + if (scale == 0.0) + scale = 1.0; + if (scale != 1.0) { + fres = (l_float32)res / scale; + res = (l_int32)fres; + } + + /* Limit valid resolution interval */ + if (res < MinRes || res > MaxRes) { + L_WARNING("res %d out of bounds; using default res; no scaling\n", + procName, res); + res = DefaultInputRes; + fres = (l_float32)res; + } + + if (!box) { /* center on page */ + winch = (l_float32)wpix / fres; + hinch = (l_float32)hpix / fres; + xinch = (8.5 - winch) / 2.; + yinch = (11.0 - hinch) / 2.; + } else { + boxGetGeometry(box, &bx, &by, &bw, &bh); + if (bw == 0) + winch = (l_float32)wpix / fres; + else + winch = (l_float32)bw / 1000.; + if (bh == 0) + hinch = (l_float32)hpix / fres; + else + hinch = (l_float32)bh / 1000.; + xinch = (l_float32)bx / 1000.; + yinch = (l_float32)by / 1000.; + } + + if (xinch < 0) + L_WARNING("left edge < 0.0 inch\n", procName); + if (xinch + winch > 8.5) + L_WARNING("right edge > 8.5 inch\n", procName); + if (yinch < 0.0) + L_WARNING("bottom edge < 0.0 inch\n", procName); + if (yinch + hinch > 11.0) + L_WARNING("top edge > 11.0 inch\n", procName); + + *pwpt = 72. * winch; + *phpt = 72. * hinch; + *pxpt = 72. * xinch; + *pypt = 72. * yinch; + return; +} + + +/*! + * \brief convertByteToHexAscii() + * + * \param[in] byteval input byte + * \param[out] pnib1, pnib2 two hex ascii characters + * \return void + */ +static void +convertByteToHexAscii(l_uint8 byteval, + char *pnib1, + char *pnib2) +{ +l_uint8 nib; + + nib = byteval >> 4; + if (nib < 10) + *pnib1 = '0' + nib; + else + *pnib1 = 'a' + (nib - 10); + nib = byteval & 0xf; + if (nib < 10) + *pnib2 = '0' + nib; + else + *pnib2 = 'a' + (nib - 10); + return; +} + + +/*-------------------------------------------------------------* + * For jpeg compressed images * + *-------------------------------------------------------------*/ +/*! + * \brief convertJpegToPSEmbed() + * + * \param[in] filein input jpeg file + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function takes a jpeg file as input and generates a DCT
+ *          compressed, ascii85 encoded PS file, with a bounding box.
+ *      (2) The bounding box is required when a program such as TeX
+ *          (through epsf) places and rescales the image.
+ *      (3) The bounding box is sized for fitting the image to an
+ *          8.5 x 11.0 inch page.
+ * 
+ */ +l_ok +convertJpegToPSEmbed(const char *filein, + const char *fileout) +{ +char *outstr; +l_int32 w, h, nbytes, ret; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertJpegToPSEmbed"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + /* Generate the ascii encoded jpeg data */ + if ((cid = l_generateJpegData(filein, 1)) == NULL) + return ERROR_INT("jpeg data not made", procName, 1); + w = cid->w; + h = cid->h; + + /* Scale for 20 pt boundary and otherwise full filling + * in one direction on 8.5 x 11 inch device */ + xpt = 20.0; + ypt = 20.0; + if (w * 11.0 > h * 8.5) { + wpt = 572.0; /* 612 - 2 * 20 */ + hpt = wpt * (l_float32)h / (l_float32)w; + } else { + hpt = 752.0; /* 792 - 2 * 20 */ + wpt = hpt * (l_float32)w / (l_float32)h; + } + + /* Generate the PS. + * The bounding box information should be inserted (default). */ + outstr = generateJpegPS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + nbytes = strlen(outstr); + + ret = l_binaryWrite(fileout, "w", outstr, nbytes); + LEPT_FREE(outstr); + if (ret) L_ERROR("ps string not written to file\n", procName); + return ret; +} + + +/*! + * \brief convertJpegToPS() + * + * \param[in] filein input jpeg file + * \param[in] fileout output ps file + * \param[in] operation "w" for write; "a" for append + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; + * use 0 for default + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is simpler to use than pixWriteStringPS(), and
+ *          it outputs in level 2 PS as compressed DCT (overlaid
+ *          with ascii85 encoding).
+ *      (2) An output file can contain multiple pages, each with
+ *          multiple images.  The arguments to convertJpegToPS()
+ *          allow you to control placement of jpeg images on multiple
+ *          pages within a PostScript file.
+ *      (3) For the first image written to a file, use "w", which
+ *          opens for write and clears the file.  For all subsequent
+ *          images written to that file, use "a".
+ *      (4) The (x, y) parameters give the LL corner of the image
+ *          relative to the LL corner of the page.  They are in
+ *          units of pixels if scale = 1.0.  If you use (e.g.)
+ *          scale = 2.0, the image is placed at (2x, 2y) on the page,
+ *          and the image dimensions are also doubled.
+ *      (5) Display vs printed resolution:
+ *           * If your display is 75 ppi and your image was created
+ *             at a resolution of 300 ppi, you can get the image
+ *             to print at the same size as it appears on your display
+ *             by either setting scale = 4.0 or by setting  res = 75.
+ *             Both tell the printer to make a 4x enlarged image.
+ *           * If your image is generated at 150 ppi and you use scale = 1,
+ *             it will be rendered such that 150 pixels correspond
+ *             to 72 pts (1 inch on the printer).  This function does
+ *             the conversion from pixels (with or without scaling) to
+ *             pts, which are the units that the printer uses.
+ *           * The printer will choose its own resolution to use
+ *             in rendering the image, which will not affect the size
+ *             of the rendered image.  That is because the output
+ *             PostScript file describes the geometry in terms of pts,
+ *             which are defined to be 1/72 inch.  The printer will
+ *             only see the size of the image in pts, through the
+ *             scale and translate parameters and the affine
+ *             transform (the ImageMatrix) of the image.
+ *      (6) To render multiple images on the same page, set
+ *          endpage = FALSE for each image until you get to the
+ *          last, for which you set endpage = TRUE.  This causes the
+ *          "showpage" command to be invoked.  Showpage outputs
+ *          the entire page and clears the raster buffer for the
+ *          next page to be added.  Without a "showpage",
+ *          subsequent images from the next page will overlay those
+ *          previously put down.
+ *      (7) For multiple pages, increment the page number, starting
+ *          with page 1.  This allows PostScript (and PDF) to build
+ *          a page directory, which viewers use for navigation.
+ * 
+ */ +l_ok +convertJpegToPS(const char *filein, + const char *fileout, + const char *operation, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 endpage) +{ +char *outstr; +l_int32 nbytes; + + PROCNAME("convertJpegToPS"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (strcmp(operation, "w") && strcmp(operation, "a")) + return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); + + if (convertJpegToPSString(filein, &outstr, &nbytes, x, y, res, scale, + pageno, endpage)) + return ERROR_INT("ps string not made", procName, 1); + + if (l_binaryWrite(fileout, operation, outstr, nbytes)) { + LEPT_FREE(outstr); + return ERROR_INT("ps string not written to file", procName, 1); + } + + LEPT_FREE(outstr); + return 0; +} + + +/*! + * \brief convertJpegToPSString() + * + * Generates PS string in jpeg format from jpeg file + * + * \param[in] filein input jpeg file + * \param[out] poutstr PS string + * \param[out] pnbytes number of bytes in PS string + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; + * use 0 for default + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For usage, see convertJpegToPS()
+ * 
+ */ +static l_ok +convertJpegToPSString(const char *filein, + char **poutstr, + l_int32 *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 endpage) +{ +char *outstr; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertJpegToPSString"); + + if (!poutstr) + return ERROR_INT("&outstr not defined", procName, 1); + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *poutstr = NULL; + *pnbytes = 0; + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + + /* Generate the ascii encoded jpeg data */ + if ((cid = l_generateJpegData(filein, 1)) == NULL) + return ERROR_INT("jpeg data not made", procName, 1); + + /* Get scaled location in pts. Guess the input scan resolution + * based on the input parameter %res, the resolution data in + * the pix, and the size of the image. */ + if (scale == 0.0) + scale = 1.0; + if (res <= 0) { + if (cid->res > 0) + res = cid->res; + else + res = DefaultInputRes; + } + + /* Get scaled location in pts */ + if (scale == 0.0) + scale = 1.0; + xpt = scale * x * 72. / res; + ypt = scale * y * 72. / res; + wpt = scale * cid->w * 72. / res; + hpt = scale * cid->h * 72. / res; + + if (pageno == 0) + pageno = 1; + +#if DEBUG_JPEG + fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d\n", + cid->w, cid->h, cid->bps, cid->spp); + fprintf(stderr, "comp bytes = %ld, nbytes85 = %ld, ratio = %5.3f\n", + (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85, + (l_float32)cid->nbytes85 / (l_float32)cid->nbytescomp); + fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", + xpt, ypt, wpt, hpt); +#endif /* DEBUG_JPEG */ + + /* Generate the PS */ + outstr = generateJpegPS(NULL, cid, xpt, ypt, wpt, hpt, pageno, endpage); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + *poutstr = outstr; + *pnbytes = strlen(outstr); + return 0; +} + + +/*! + * \brief generateJpegPS() + * + * \param[in] filein [optional] input jpeg filename; can be null + * \param[in] cid jpeg compressed image data + * \param[in] xpt, ypt location of LL corner of image, in pts, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] wpt, hpt rendered image size in pts + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return PS string, or NULL on error + * + *
+ * Notes:
+ *      (1) Low-level function.
+ * 
+ */ +static char * +generateJpegPS(const char *filein, + L_COMP_DATA *cid, + l_float32 xpt, + l_float32 ypt, + l_float32 wpt, + l_float32 hpt, + l_int32 pageno, + l_int32 endpage) +{ +l_int32 w, h, bps, spp; +char *outstr; +char bigbuf[Bufsize]; +SARRAY *sa; + + PROCNAME("generateJpegPS"); + + if (!cid) + return (char *)ERROR_PTR("jpeg data not defined", procName, NULL); + w = cid->w; + h = cid->h; + bps = cid->bps; + spp = cid->spp; + + sa = sarrayCreate(50); + sarrayAddString(sa, "%!PS-Adobe-3.0", L_COPY); + sarrayAddString(sa, "%%Creator: leptonica", L_COPY); + if (filein) + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); + else + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: Jpeg compressed PS"); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); + + if (var_PS_WRITE_BOUNDING_BOX == 1) { + snprintf(bigbuf, sizeof(bigbuf), + "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", + xpt, ypt, xpt + wpt, ypt + hpt); + sarrayAddString(sa, bigbuf, L_COPY); + } + + sarrayAddString(sa, "%%LanguageLevel: 2", L_COPY); + sarrayAddString(sa, "%%EndComments", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); + sarrayAddString(sa, bigbuf, L_COPY); + + sarrayAddString(sa, "save", L_COPY); + sarrayAddString(sa, + "/RawData currentfile /ASCII85Decode filter def", L_COPY); + sarrayAddString(sa, "/Data RawData << >> /DCTDecode filter def", L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); + sarrayAddString(sa, bigbuf, L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); + sarrayAddString(sa, bigbuf, L_COPY); + + if (spp == 1) + sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); + else if (spp == 3) + sarrayAddString(sa, "/DeviceRGB setcolorspace", L_COPY); + else /*spp == 4 */ + sarrayAddString(sa, "/DeviceCMYK setcolorspace", L_COPY); + + sarrayAddString(sa, "{ << /ImageType 1", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, " /DataSource Data", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /BitsPerComponent %d", bps); + sarrayAddString(sa, bigbuf, L_COPY); + + if (spp == 1) + sarrayAddString(sa, " /Decode [0 1]", L_COPY); + else if (spp == 3) + sarrayAddString(sa, " /Decode [0 1 0 1 0 1]", L_COPY); + else /* spp == 4 */ + sarrayAddString(sa, " /Decode [0 1 0 1 0 1 0 1]", L_COPY); + + sarrayAddString(sa, " >> image", L_COPY); + sarrayAddString(sa, " Data closefile", L_COPY); + sarrayAddString(sa, " RawData flushfile", L_COPY); + if (endpage == TRUE) + sarrayAddString(sa, " showpage", L_COPY); + sarrayAddString(sa, " restore", L_COPY); + sarrayAddString(sa, "} exec", L_COPY); + + /* Insert the ascii85 jpeg data; this is now owned by sa */ + sarrayAddString(sa, cid->data85, L_INSERT); + cid->data85 = NULL; /* it has been transferred and destroyed */ + + /* Generate and return the output string */ + outstr = sarrayToString(sa, 1); + sarrayDestroy(&sa); + return outstr; +} + + +/*-------------------------------------------------------------* + * For ccitt g4 compressed images * + *-------------------------------------------------------------*/ +/*! + * \brief convertG4ToPSEmbed() + * + * \param[in] filein input tiff file + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function takes a g4 compressed tif file as input and
+ *          generates a g4 compressed, ascii85 encoded PS file, with
+ *          a bounding box.
+ *      (2) The bounding box is required when a program such as TeX
+ *          (through epsf) places and rescales the image.
+ *      (3) The bounding box is sized for fitting the image to an
+ *          8.5 x 11.0 inch page.
+ *      (4) We paint this through a mask, over whatever is below.
+ * 
+ */ +l_ok +convertG4ToPSEmbed(const char *filein, + const char *fileout) +{ +char *outstr; +l_int32 w, h, nbytes, ret; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertG4ToPSEmbed"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((cid = l_generateG4Data(filein, 1)) == NULL) + return ERROR_INT("g4 data not made", procName, 1); + w = cid->w; + h = cid->h; + + /* Scale for 20 pt boundary and otherwise full filling + * in one direction on 8.5 x 11 inch device */ + xpt = 20.0; + ypt = 20.0; + if (w * 11.0 > h * 8.5) { + wpt = 572.0; /* 612 - 2 * 20 */ + hpt = wpt * (l_float32)h / (l_float32)w; + } else { + hpt = 752.0; /* 792 - 2 * 20 */ + wpt = hpt * (l_float32)w / (l_float32)h; + } + + /* Generate the PS, painting through the image mask. + * The bounding box information should be inserted (default). */ + outstr = generateG4PS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1, 1); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + nbytes = strlen(outstr); + + ret = l_binaryWrite(fileout, "w", outstr, nbytes); + LEPT_FREE(outstr); + if (ret) L_ERROR("ps string not written to file\n", procName); + return ret; +} + + +/*! + * \brief convertG4ToPS() + * + * \param[in] filein input tiff g4 file + * \param[in] fileout output ps file + * \param[in] operation "w" for write; "a" for append + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; typ. values + * are 300 and 600; use 0 for automatic determination + * based on image size + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] maskflag boolean: use TRUE if just painting through fg; + * FALSE if painting both fg and bg. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See the usage comments in convertJpegToPS(), some of
+ *          which are repeated here.
+ *      (2) This is a wrapper for tiff g4.  The PostScript that
+ *          is generated is expanded by about 5/4 (due to the
+ *          ascii85 encoding.  If you convert to pdf (ps2pdf), the
+ *          ascii85 decoder is automatically invoked, so that the
+ *          pdf wrapped g4 file is essentially the same size as
+ *          the original g4 file.  It's useful to have the PS
+ *          file ascii85 encoded, because many printers will not
+ *          print binary PS files.
+ *      (3) For the first image written to a file, use "w", which
+ *          opens for write and clears the file.  For all subsequent
+ *          images written to that file, use "a".
+ *      (4) To render multiple images on the same page, set
+ *          endpage = FALSE for each image until you get to the
+ *          last, for which you set endpage = TRUE.  This causes the
+ *          "showpage" command to be invoked.  Showpage outputs
+ *          the entire page and clears the raster buffer for the
+ *          next page to be added.  Without a "showpage",
+ *          subsequent images from the next page will overlay those
+ *          previously put down.
+ *      (5) For multiple images to the same page, where you are writing
+ *          both jpeg and tiff-g4, you have two options:
+ *           (a) write the g4 first, as either image (maskflag == FALSE)
+ *               or imagemask (maskflag == TRUE), and then write the
+ *               jpeg over it.
+ *           (b) write the jpeg first and as the last item, write
+ *               the g4 as an imagemask (maskflag == TRUE), to paint
+ *               through the foreground only.
+ *          We have this flexibility with the tiff-g4 because it is 1 bpp.
+ *      (6) For multiple pages, increment the page number, starting
+ *          with page 1.  This allows PostScript (and PDF) to build
+ *          a page directory, which viewers use for navigation.
+ * 
+ */ +l_ok +convertG4ToPS(const char *filein, + const char *fileout, + const char *operation, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 maskflag, + l_int32 endpage) +{ +char *outstr; +l_int32 nbytes, ret; + + PROCNAME("convertG4ToPS"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (strcmp(operation, "w") && strcmp(operation, "a")) + return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); + + if (convertG4ToPSString(filein, &outstr, &nbytes, x, y, res, scale, + pageno, maskflag, endpage)) + return ERROR_INT("ps string not made", procName, 1); + + ret = l_binaryWrite(fileout, operation, outstr, nbytes); + LEPT_FREE(outstr); + if (ret) + return ERROR_INT("ps string not written to file", procName, 1); + return 0; +} + + +/*! + * \brief convertG4ToPSString() + * + * \param[in] filein input tiff g4 file + * \param[out] poutstr PS string + * \param[out] pnbytes number of bytes in PS string + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; typ. values + * are 300 and 600; use 0 for automatic determination + * based on image size + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] maskflag boolean: use TRUE if just painting through fg; + * FALSE if painting both fg and bg. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates PS string in G4 compressed tiff format from G4 tiff file.
+ *      (2) For usage, see convertG4ToPS().
+ * 
+ */ +static l_ok +convertG4ToPSString(const char *filein, + char **poutstr, + l_int32 *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 maskflag, + l_int32 endpage) +{ +char *outstr; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertG4ToPSString"); + + if (!poutstr) + return ERROR_INT("&outstr not defined", procName, 1); + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *poutstr = NULL; + *pnbytes = 0; + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + + if ((cid = l_generateG4Data(filein, 1)) == NULL) + return ERROR_INT("g4 data not made", procName, 1); + + /* Get scaled location in pts. Guess the input scan resolution + * based on the input parameter %res, the resolution data in + * the pix, and the size of the image. */ + if (scale == 0.0) + scale = 1.0; + if (res <= 0) { + if (cid->res > 0) { + res = cid->res; + } else { + if (cid->h <= 3509) /* A4 height at 300 ppi */ + res = 300; + else + res = 600; + } + } + xpt = scale * x * 72. / res; + ypt = scale * y * 72. / res; + wpt = scale * cid->w * 72. / res; + hpt = scale * cid->h * 72. / res; + + if (pageno == 0) + pageno = 1; + +#if DEBUG_G4 + fprintf(stderr, "w = %d, h = %d, minisblack = %d\n", + cid->w, cid->h, cid->minisblack); + fprintf(stderr, "comp bytes = %ld, nbytes85 = %ld\n", + (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85); + fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", + xpt, ypt, wpt, hpt); +#endif /* DEBUG_G4 */ + + /* Generate the PS */ + outstr = generateG4PS(NULL, cid, xpt, ypt, wpt, hpt, + maskflag, pageno, endpage); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + *poutstr = outstr; + *pnbytes = strlen(outstr); + return 0; +} + + +/*! + * \brief generateG4PS() + * + * \param[in] filein [optional] input tiff g4 file; can be null + * \param[in] cid g4 compressed image data + * \param[in] xpt, ypt location of LL corner of image, in pts, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] wpt, hpt rendered image size in pts + * \param[in] maskflag boolean: use TRUE if just painting through fg; + * FALSE if painting both fg and bg. + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return PS string, or NULL on error + * + *
+ * Notes:
+ *      (1) Low-level function.
+ * 
+ */ +static char * +generateG4PS(const char *filein, + L_COMP_DATA *cid, + l_float32 xpt, + l_float32 ypt, + l_float32 wpt, + l_float32 hpt, + l_int32 maskflag, + l_int32 pageno, + l_int32 endpage) +{ +l_int32 w, h; +char *outstr; +char bigbuf[Bufsize]; +SARRAY *sa; + + PROCNAME("generateG4PS"); + + if (!cid) + return (char *)ERROR_PTR("g4 data not defined", procName, NULL); + w = cid->w; + h = cid->h; + + sa = sarrayCreate(50); + sarrayAddString(sa, "%!PS-Adobe-3.0", L_COPY); + sarrayAddString(sa, "%%Creator: leptonica", L_COPY); + if (filein) + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); + else + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: G4 compressed PS"); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); + + if (var_PS_WRITE_BOUNDING_BOX == 1) { + snprintf(bigbuf, sizeof(bigbuf), + "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", + xpt, ypt, xpt + wpt, ypt + hpt); + sarrayAddString(sa, bigbuf, L_COPY); + } + + sarrayAddString(sa, "%%LanguageLevel: 2", L_COPY); + sarrayAddString(sa, "%%EndComments", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); + sarrayAddString(sa, bigbuf, L_COPY); + + sarrayAddString(sa, "save", L_COPY); + sarrayAddString(sa, "100 dict begin", L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); + sarrayAddString(sa, bigbuf, L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); + sarrayAddString(sa, bigbuf, L_COPY); + + sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); + + sarrayAddString(sa, "{", L_COPY); + sarrayAddString(sa, + " /RawData currentfile /ASCII85Decode filter def", L_COPY); + sarrayAddString(sa, " << ", L_COPY); + sarrayAddString(sa, " /ImageType 1", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, " /BitsPerComponent 1", L_COPY); + sarrayAddString(sa, " /Interpolate true", L_COPY); + if (cid->minisblack) + sarrayAddString(sa, " /Decode [1 0]", L_COPY); + else /* miniswhite; typical for 1 bpp */ + sarrayAddString(sa, " /Decode [0 1]", L_COPY); + sarrayAddString(sa, " /DataSource RawData", L_COPY); + sarrayAddString(sa, " <<", L_COPY); + sarrayAddString(sa, " /K -1", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Columns %d", w); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Rows %d", h); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, " >> /CCITTFaxDecode filter", L_COPY); + if (maskflag == TRUE) /* just paint through the fg */ + sarrayAddString(sa, " >> imagemask", L_COPY); + else /* Paint full image */ + sarrayAddString(sa, " >> image", L_COPY); + sarrayAddString(sa, " RawData flushfile", L_COPY); + if (endpage == TRUE) + sarrayAddString(sa, " showpage", L_COPY); + sarrayAddString(sa, "}", L_COPY); + + sarrayAddString(sa, "%%BeginData:", L_COPY); + sarrayAddString(sa, "exec", L_COPY); + + /* Insert the ascii85 ccittg4 data; this is now owned by sa */ + sarrayAddString(sa, cid->data85, L_INSERT); + + /* Concat the trailing data */ + sarrayAddString(sa, "%%EndData", L_COPY); + sarrayAddString(sa, "end", L_COPY); + sarrayAddString(sa, "restore", L_COPY); + + outstr = sarrayToString(sa, 1); + sarrayDestroy(&sa); + cid->data85 = NULL; /* it has been transferred and destroyed */ + return outstr; +} + + +/*-------------------------------------------------------------* + * For tiff multipage files * + *-------------------------------------------------------------*/ +/*! + * \brief convertTiffMultipageToPS() + * + * \param[in] filein input tiff multipage file + * \param[in] fileout output ps file + * \param[in] fillfract factor for filling 8.5 x 11 inch page; + * use 0.0 for DefaultFillFraction + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This converts a multipage tiff file of binary page images
+ *          into a ccitt g4 compressed PS file.
+ *      (2) If the images are generated from a standard resolution fax,
+ *          the vertical resolution is doubled to give a normal-looking
+ *          aspect ratio.
+ * 
+ */ +l_ok +convertTiffMultipageToPS(const char *filein, + const char *fileout, + l_float32 fillfract) +{ +char *tempfile; +l_int32 i, npages, w, h, istiff; +l_float32 scale; +PIX *pix, *pixs; +FILE *fp; + + PROCNAME("convertTiffMultipageToPS"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((fp = fopenReadStream(filein)) == NULL) + return ERROR_INT("file not found", procName, 1); + istiff = fileFormatIsTiff(fp); + if (!istiff) { + fclose(fp); + return ERROR_INT("file not tiff format", procName, 1); + } + tiffGetCount(fp, &npages); + fclose(fp); + + if (fillfract == 0.0) + fillfract = DefaultFillFraction; + + for (i = 0; i < npages; i++) { + if ((pix = pixReadTiff(filein, i)) == NULL) + return ERROR_INT("pix not made", procName, 1); + + pixGetDimensions(pix, &w, &h, NULL); + if (w == 1728 && h < w) /* it's a std res fax */ + pixs = pixScale(pix, 1.0, 2.0); + else + pixs = pixClone(pix); + + tempfile = l_makeTempFilename(); + pixWrite(tempfile, pixs, IFF_TIFF_G4); + scale = L_MIN(fillfract * 2550 / w, fillfract * 3300 / h); + if (i == 0) + convertG4ToPS(tempfile, fileout, "w", 0, 0, 300, scale, + i + 1, FALSE, TRUE); + else + convertG4ToPS(tempfile, fileout, "a", 0, 0, 300, scale, + i + 1, FALSE, TRUE); + lept_rmfile(tempfile); + LEPT_FREE(tempfile); + pixDestroy(&pix); + pixDestroy(&pixs); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * For flate (gzip) compressed images (e.g., png) * + *---------------------------------------------------------------------*/ +/*! + * \brief convertFlateToPSEmbed() + * + * \param[in] filein input file -- any format + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function takes any image file as input and generates a
+ *          flate-compressed, ascii85 encoded PS file, with a bounding box.
+ *      (2) The bounding box is required when a program such as TeX
+ *          (through epsf) places and rescales the image.
+ *      (3) The bounding box is sized for fitting the image to an
+ *          8.5 x 11.0 inch page.
+ * 
+ */ +l_ok +convertFlateToPSEmbed(const char *filein, + const char *fileout) +{ +char *outstr; +l_int32 w, h, nbytes, ret; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertFlateToPSEmbed"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + if ((cid = l_generateFlateData(filein, 1)) == NULL) + return ERROR_INT("flate data not made", procName, 1); + w = cid->w; + h = cid->h; + + /* Scale for 20 pt boundary and otherwise full filling + * in one direction on 8.5 x 11 inch device */ + xpt = 20.0; + ypt = 20.0; + if (w * 11.0 > h * 8.5) { + wpt = 572.0; /* 612 - 2 * 20 */ + hpt = wpt * (l_float32)h / (l_float32)w; + } else { + hpt = 752.0; /* 792 - 2 * 20 */ + wpt = hpt * (l_float32)w / (l_float32)h; + } + + /* Generate the PS. + * The bounding box information should be inserted (default). */ + outstr = generateFlatePS(NULL, cid, xpt, ypt, wpt, hpt, 1, 1); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + nbytes = strlen(outstr); + + ret = l_binaryWrite(fileout, "w", outstr, nbytes); + LEPT_FREE(outstr); + if (ret) L_ERROR("ps string not written to file\n", procName); + return ret; +} + + +/*! + * \brief convertFlateToPS() + * + * \param[in] filein input file -- any format + * \param[in] fileout output ps file + * \param[in] operation "w" for write; "a" for append + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; + * use 0 for default + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This outputs level 3 PS as flate compressed (overlaid
+ *          with ascii85 encoding).
+ *      (2) An output file can contain multiple pages, each with
+ *          multiple images.  The arguments to convertFlateToPS()
+ *          allow you to control placement of png images on multiple
+ *          pages within a PostScript file.
+ *      (3) For the first image written to a file, use "w", which
+ *          opens for write and clears the file.  For all subsequent
+ *          images written to that file, use "a".
+ *      (4) The (x, y) parameters give the LL corner of the image
+ *          relative to the LL corner of the page.  They are in
+ *          units of pixels if scale = 1.0.  If you use (e.g.)
+ *          scale = 2.0, the image is placed at (2x, 2y) on the page,
+ *          and the image dimensions are also doubled.
+ *      (5) Display vs printed resolution:
+ *           * If your display is 75 ppi and your image was created
+ *             at a resolution of 300 ppi, you can get the image
+ *             to print at the same size as it appears on your display
+ *             by either setting scale = 4.0 or by setting  res = 75.
+ *             Both tell the printer to make a 4x enlarged image.
+ *           * If your image is generated at 150 ppi and you use scale = 1,
+ *             it will be rendered such that 150 pixels correspond
+ *             to 72 pts (1 inch on the printer).  This function does
+ *             the conversion from pixels (with or without scaling) to
+ *             pts, which are the units that the printer uses.
+ *           * The printer will choose its own resolution to use
+ *             in rendering the image, which will not affect the size
+ *             of the rendered image.  That is because the output
+ *             PostScript file describes the geometry in terms of pts,
+ *             which are defined to be 1/72 inch.  The printer will
+ *             only see the size of the image in pts, through the
+ *             scale and translate parameters and the affine
+ *             transform (the ImageMatrix) of the image.
+ *      (6) To render multiple images on the same page, set
+ *          endpage = FALSE for each image until you get to the
+ *          last, for which you set endpage = TRUE.  This causes the
+ *          "showpage" command to be invoked.  Showpage outputs
+ *          the entire page and clears the raster buffer for the
+ *          next page to be added.  Without a "showpage",
+ *          subsequent images from the next page will overlay those
+ *          previously put down.
+ *      (7) For multiple pages, increment the page number, starting
+ *          with page 1.  This allows PostScript (and PDF) to build
+ *          a page directory, which viewers use for navigation.
+ * 
+ */ +l_ok +convertFlateToPS(const char *filein, + const char *fileout, + const char *operation, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 endpage) +{ +char *outstr; +l_int32 nbytes, ret; + + PROCNAME("convertFlateToPS"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + if (strcmp(operation, "w") && strcmp(operation, "a")) + return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); + + if (convertFlateToPSString(filein, &outstr, &nbytes, x, y, res, scale, + pageno, endpage)) + return ERROR_INT("ps string not made", procName, 1); + + ret = l_binaryWrite(fileout, operation, outstr, nbytes); + LEPT_FREE(outstr); + if (ret) L_ERROR("ps string not written to file\n", procName); + return ret; +} + + +/*! + * \brief convertFlateToPSString() + * + * Generates level 3 PS string in flate compressed format. + * + * \param[in] filein input image file + * \param[out] poutstr PS string + * \param[out] pnbytes number of bytes in PS string + * \param[in] x, y location of LL corner of image, in pixels, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] res resolution of the input image, in ppi; + * use 0 for default + * \param[in] scale scaling by printer; use 0.0 or 1.0 for no scaling + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page. + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned PS character array is a null-terminated
+ *          ascii string.  All the raster data is ascii85 encoded, so
+ *          there are no null bytes embedded in it.
+ *      (2) The raster encoding is made with gzip, the same as that
+ *          in a png file that is compressed without prediction.
+ *          The raster data itself is 25% larger than that in the
+ *          binary form, due to the ascii85 encoding.
+ *
+ *  Usage:  See convertFlateToPS()
+ * 
+ */ +static l_ok +convertFlateToPSString(const char *filein, + char **poutstr, + l_int32 *pnbytes, + l_int32 x, + l_int32 y, + l_int32 res, + l_float32 scale, + l_int32 pageno, + l_int32 endpage) +{ +char *outstr; +l_float32 xpt, ypt, wpt, hpt; +L_COMP_DATA *cid; + + PROCNAME("convertFlateToPSString"); + + if (!poutstr) + return ERROR_INT("&outstr not defined", procName, 1); + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + *pnbytes = 0; + *poutstr = NULL; + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + + if ((cid = l_generateFlateData(filein, 1)) == NULL) + return ERROR_INT("flate data not made", procName, 1); + + /* Get scaled location in pts. Guess the input scan resolution + * based on the input parameter %res, the resolution data in + * the pix, and the size of the image. */ + if (scale == 0.0) + scale = 1.0; + if (res <= 0) { + if (cid->res > 0) + res = cid->res; + else + res = DefaultInputRes; + } + xpt = scale * x * 72. / res; + ypt = scale * y * 72. / res; + wpt = scale * cid->w * 72. / res; + hpt = scale * cid->h * 72. / res; + + if (pageno == 0) + pageno = 1; + +#if DEBUG_FLATE + fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d\n", + cid->w, cid->h, cid->bps, cid->spp); + fprintf(stderr, "uncomp bytes = %ld, comp bytes = %ld, nbytes85 = %ld\n", + (unsigned long)cid->nbytes, (unsigned long)cid->nbytescomp, + (unsigned long)cid->nbytes85); + fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", + xpt, ypt, wpt, hpt); +#endif /* DEBUG_FLATE */ + + /* Generate the PS */ + outstr = generateFlatePS(NULL, cid, xpt, ypt, wpt, hpt, pageno, endpage); + l_CIDataDestroy(&cid); + if (!outstr) + return ERROR_INT("outstr not made", procName, 1); + *poutstr = outstr; + *pnbytes = strlen(outstr); + return 0; +} + + +/*! + * \brief generateFlatePS() + * + * \param[in] filein [optional] input filename; can be null + * \param[in] cid flate compressed image data + * \param[in] xpt, ypt location of LL corner of image, in pts, relative + * to the PostScript origin (0,0) at the LL corner + * of the page + * \param[in] wpt, hpt rendered image size in pts + * \param[in] pageno page number; must start with 1; you can use 0 + * if there is only one page + * \param[in] endpage boolean: use TRUE if this is the last image to be + * added to the page; FALSE otherwise + * \return PS string, or NULL on error + */ +static char * +generateFlatePS(const char *filein, + L_COMP_DATA *cid, + l_float32 xpt, + l_float32 ypt, + l_float32 wpt, + l_float32 hpt, + l_int32 pageno, + l_int32 endpage) +{ +l_int32 w, h, bps, spp; +char *outstr; +char bigbuf[Bufsize]; +SARRAY *sa; + + PROCNAME("generateFlatePS"); + + if (!cid) + return (char *)ERROR_PTR("flate data not defined", procName, NULL); + w = cid->w; + h = cid->h; + bps = cid->bps; + spp = cid->spp; + + sa = sarrayCreate(50); + sarrayAddString(sa, "%!PS-Adobe-3.0 EPSF-3.0", L_COPY); + sarrayAddString(sa, "%%Creator: leptonica", L_COPY); + if (filein) + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: %s", filein); + else + snprintf(bigbuf, sizeof(bigbuf), "%%%%Title: Flate compressed PS"); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, "%%DocumentData: Clean7Bit", L_COPY); + + if (var_PS_WRITE_BOUNDING_BOX == 1) { + snprintf(bigbuf, sizeof(bigbuf), + "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", + xpt, ypt, xpt + wpt, ypt + hpt); + sarrayAddString(sa, bigbuf, L_COPY); + } + + sarrayAddString(sa, "%%LanguageLevel: 3", L_COPY); + sarrayAddString(sa, "%%EndComments", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), "%%%%Page: %d %d", pageno, pageno); + sarrayAddString(sa, bigbuf, L_COPY); + + sarrayAddString(sa, "save", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); + sarrayAddString(sa, bigbuf, L_COPY); + + snprintf(bigbuf, sizeof(bigbuf), + "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); + sarrayAddString(sa, bigbuf, L_COPY); + + /* If there is a colormap, add the data; it is now owned by sa */ + if (cid->cmapdata85) { + snprintf(bigbuf, sizeof(bigbuf), + "[ /Indexed /DeviceRGB %d %%set colormap type/size", + cid->ncolors - 1); + sarrayAddString(sa, bigbuf, L_COPY); + sarrayAddString(sa, " <~", L_COPY); + sarrayAddString(sa, cid->cmapdata85, L_INSERT); + sarrayAddString(sa, " ] setcolorspace", L_COPY); + } else if (spp == 1) { + sarrayAddString(sa, "/DeviceGray setcolorspace", L_COPY); + } else { /* spp == 3 */ + sarrayAddString(sa, "/DeviceRGB setcolorspace", L_COPY); + } + + sarrayAddString(sa, + "/RawData currentfile /ASCII85Decode filter def", L_COPY); + sarrayAddString(sa, + "/Data RawData << >> /FlateDecode filter def", L_COPY); + + sarrayAddString(sa, "{ << /ImageType 1", L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Width %d", w); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /Height %d", h); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), " /BitsPerComponent %d", bps); + sarrayAddString(sa, bigbuf, L_COPY); + snprintf(bigbuf, sizeof(bigbuf), + " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); + sarrayAddString(sa, bigbuf, L_COPY); + + if (cid->cmapdata85) { + sarrayAddString(sa, " /Decode [0 255]", L_COPY); + } else if (spp == 1) { + if (bps == 1) /* miniswhite photometry */ + sarrayAddString(sa, " /Decode [1 0]", L_COPY); + else /* bps > 1 */ + sarrayAddString(sa, " /Decode [0 1]", L_COPY); + } else { /* spp == 3 */ + sarrayAddString(sa, " /Decode [0 1 0 1 0 1]", L_COPY); + } + + sarrayAddString(sa, " /DataSource Data", L_COPY); + sarrayAddString(sa, " >> image", L_COPY); + sarrayAddString(sa, " Data closefile", L_COPY); + sarrayAddString(sa, " RawData flushfile", L_COPY); + if (endpage == TRUE) + sarrayAddString(sa, " showpage", L_COPY); + sarrayAddString(sa, " restore", L_COPY); + sarrayAddString(sa, "} exec", L_COPY); + + /* Insert the ascii85 gzipped data; this is now owned by sa */ + sarrayAddString(sa, cid->data85, L_INSERT); + + /* Generate and return the output string */ + outstr = sarrayToString(sa, 1); + sarrayDestroy(&sa); + cid->cmapdata85 = NULL; /* it has been transferred to sa and destroyed */ + cid->data85 = NULL; /* it has been transferred to sa and destroyed */ + return outstr; +} + + +/*---------------------------------------------------------------------* + * Write to memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteMemPS() + * + * \param[out] pdata data of tiff compressed image + * \param[out] psize size of returned data + * \param[in] pix + * \param[in] box [optional] + * \param[in] res can use 0 for default of 300 ppi + * \param[in] scale to prevent scaling, use either 1.0 or 0.0 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStringPS() for usage.
+ *      (2) This is just a wrapper for pixWriteStringPS(), which
+ *          writes uncompressed image data to memory.
+ * 
+ */ +l_ok +pixWriteMemPS(l_uint8 **pdata, + size_t *psize, + PIX *pix, + BOX *box, + l_int32 res, + l_float32 scale) +{ + PROCNAME("pixWriteMemPS"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + + *pdata = (l_uint8 *)pixWriteStringPS(pix, box, res, scale); + *psize = strlen((char *)(*pdata)); + return 0; +} + + +/*-------------------------------------------------------------* + * Converting resolution * + *-------------------------------------------------------------*/ +/*! + * \brief getResLetterPage() + * + * \param[in] w image width, pixels + * \param[in] h image height, pixels + * \param[in] fillfract fraction in linear dimension of full page, + * not to be exceeded; use 0 for default + * \return resolution + */ +l_int32 +getResLetterPage(l_int32 w, + l_int32 h, + l_float32 fillfract) +{ +l_int32 resw, resh, res; + + if (fillfract == 0.0) + fillfract = DefaultFillFraction; + resw = (l_int32)((w * 72.) / (LetterWidth * fillfract)); + resh = (l_int32)((h * 72.) / (LetterHeight * fillfract)); + res = L_MAX(resw, resh); + return res; +} + + +/*! + * \brief getResA4Page() + * + * \param[in] w image width, pixels + * \param[in] h image height, pixels + * \param[in] fillfract fraction in linear dimension of full page, + * not to be exceeded; use 0 for default + * \return resolution + */ +l_int32 +getResA4Page(l_int32 w, + l_int32 h, + l_float32 fillfract) +{ +l_int32 resw, resh, res; + + if (fillfract == 0.0) + fillfract = DefaultFillFraction; + resw = (l_int32)((w * 72.) / (A4Width * fillfract)); + resh = (l_int32)((h * 72.) / (A4Height * fillfract)); + res = L_MAX(resw, resh); + return res; +} + + +/*-------------------------------------------------------------* + * Setting flag for writing bounding box hint * + *-------------------------------------------------------------*/ +void +l_psWriteBoundingBox(l_int32 flag) +{ + var_PS_WRITE_BOUNDING_BOX = flag; +} + + +/* --------------------------------------------*/ +#endif /* USE_PSIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/psio2stub.c b/3rdparty/hgOCR/leptonica/psio2stub.c new file mode 100644 index 00000000..49603c05 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/psio2stub.c @@ -0,0 +1,156 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file psio2stub.c + *
+ *
+ *     Stubs for psio2.c functions
+ * 
+ */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !USE_PSIO /* defined in environ.h */ +/* --------------------------------------------*/ + +l_ok pixWritePSEmbed(const char *filein, const char *fileout) +{ + return ERROR_INT("function not present", "pixWritePSEmbed", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamPS(FILE *fp, PIX *pix, BOX *box, l_int32 res, + l_float32 scale) +{ + return ERROR_INT("function not present", "pixWriteStreamPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +char * pixWriteStringPS(PIX *pixs, BOX *box, l_int32 res, l_float32 scale) +{ + return (char *)ERROR_PTR("function not present", "pixWriteStringPS", NULL); +} + +/* ----------------------------------------------------------------------*/ + +char * generateUncompressedPS(char *hexdata, l_int32 w, l_int32 h, l_int32 d, + l_int32 psbpl, l_int32 bps, l_float32 xpt, + l_float32 ypt, l_float32 wpt, l_float32 hpt, + l_int32 boxflag) +{ + return (char *)ERROR_PTR("function not present", + "generateUncompressedPS", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertJpegToPSEmbed(const char *filein, const char *fileout) +{ + return ERROR_INT("function not present", "convertJpegToPSEmbed", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertJpegToPS(const char *filein, const char *fileout, + const char *operation, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, l_int32 pageno, + l_int32 endpage) +{ + return ERROR_INT("function not present", "convertJpegToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertG4ToPSEmbed(const char *filein, const char *fileout) +{ + return ERROR_INT("function not present", "convertG4ToPSEmbed", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertG4ToPS(const char *filein, const char *fileout, + const char *operation, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, l_int32 pageno, + l_int32 maskflag, l_int32 endpage) +{ + return ERROR_INT("function not present", "convertG4ToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertTiffMultipageToPS(const char *filein, const char *fileout, + l_float32 fillfract) +{ + return ERROR_INT("function not present", "convertTiffMultipageToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertFlateToPSEmbed(const char *filein, const char *fileout) +{ + return ERROR_INT("function not present", "convertFlateToPSEmbed", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok convertFlateToPS(const char *filein, const char *fileout, + const char *operation, l_int32 x, l_int32 y, + l_int32 res, l_float32 scale, l_int32 pageno, + l_int32 endpage) +{ + return ERROR_INT("function not present", "convertFlateToPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemPS(l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, + l_int32 res, l_float32 scale) +{ + return ERROR_INT("function not present", "pixWriteMemPS", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_int32 getResLetterPage(l_int32 w, l_int32 h, l_float32 fillfract) +{ + return ERROR_INT("function not present", "getResLetterPage", 1); +} + +/* ----------------------------------------------------------------------*/ + +void l_psWriteBoundingBox(l_int32 flag) +{ + L_ERROR("function not present\n", "l_psWriteBoundingBox"); + return; +} + +/* --------------------------------------------*/ +#endif /* !USE_PSIO */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/ptabasic.c b/3rdparty/hgOCR/leptonica/ptabasic.c new file mode 100644 index 00000000..ea2961a3 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ptabasic.c @@ -0,0 +1,1551 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file ptabasic.c + *
+ *
+ *      Pta creation, destruction, copy, clone, empty
+ *           PTA            *ptaCreate()
+ *           PTA            *ptaCreateFromNuma()
+ *           void            ptaDestroy()
+ *           PTA            *ptaCopy()
+ *           PTA            *ptaCopyRange()
+ *           PTA            *ptaClone()
+ *           l_int32         ptaEmpty()
+ *
+ *      Pta array extension
+ *           l_int32         ptaAddPt()
+ *           static l_int32  ptaExtendArrays()
+ *
+ *      Pta insertion and removal
+ *           l_int32         ptaInsertPt()
+ *           l_int32         ptaRemovePt()
+ *
+ *      Pta accessors
+ *           l_int32         ptaGetRefcount()
+ *           l_int32         ptaChangeRefcount()
+ *           l_int32         ptaGetCount()
+ *           l_int32         ptaGetPt()
+ *           l_int32         ptaGetIPt()
+ *           l_int32         ptaSetPt()
+ *           l_int32         ptaGetArrays()
+ *
+ *      Pta serialized for I/O
+ *           PTA            *ptaRead()
+ *           PTA            *ptaReadStream()
+ *           PTA            *ptaReadMem()
+ *           l_int32         ptaWriteDebug()
+ *           l_int32         ptaWrite()
+ *           l_int32         ptaWriteStream()
+ *           l_int32         ptaWriteMem()
+ *
+ *      Ptaa creation, destruction
+ *           PTAA           *ptaaCreate()
+ *           void            ptaaDestroy()
+ *
+ *      Ptaa array extension
+ *           l_int32         ptaaAddPta()
+ *           static l_int32  ptaaExtendArray()
+ *
+ *      Ptaa accessors
+ *           l_int32         ptaaGetCount()
+ *           l_int32         ptaaGetPta()
+ *           l_int32         ptaaGetPt()
+ *
+ *      Ptaa array modifiers
+ *           l_int32         ptaaInitFull()
+ *           l_int32         ptaaReplacePta()
+ *           l_int32         ptaaAddPt()
+ *           l_int32         ptaaTruncate()
+ *
+ *      Ptaa serialized for I/O
+ *           PTAA           *ptaaRead()
+ *           PTAA           *ptaaReadStream()
+ *           PTAA           *ptaaReadMem()
+ *           l_int32         ptaaWrite()
+ *           l_int32         ptaaWriteStream()
+ *           l_int32         ptaaWriteMem()
+ * 
+ */ + +#include +#include "allheaders.h" + +static const l_uint32 MaxPtrArraySize = 10000000; +static const l_int32 InitialPtrArraySize = 50; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 ptaExtendArrays(PTA *pta); +static l_int32 ptaaExtendArray(PTAA *ptaa); + + +/*---------------------------------------------------------------------* + * Pta creation, destruction, copy, clone * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaCreate() + * + * \param[in] n initial array sizes + * \return pta, or NULL on error. + */ +PTA * +ptaCreate(l_int32 n) +{ +PTA *pta; + + PROCNAME("ptaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + pta = (PTA *)LEPT_CALLOC(1, sizeof(PTA)); + pta->n = 0; + pta->nalloc = n; + ptaChangeRefcount(pta, 1); /* sets to 1 */ + pta->x = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32)); + pta->y = (l_float32 *)LEPT_CALLOC(n, sizeof(l_float32)); + if (!pta->x || !pta->y) { + ptaDestroy(&pta); + return (PTA *)ERROR_PTR("x and y arrays not both made", procName, NULL); + } + + return pta; +} + + +/*! + * \brief ptaCreateFromNuma() + * + * \param[in] nax [optional] can be null + * \param[in] nay + * \return pta, or NULL on error. + */ +PTA * +ptaCreateFromNuma(NUMA *nax, + NUMA *nay) +{ +l_int32 i, n; +l_float32 startx, delx, xval, yval; +PTA *pta; + + PROCNAME("ptaCreateFromNuma"); + + if (!nay) + return (PTA *)ERROR_PTR("nay not defined", procName, NULL); + n = numaGetCount(nay); + if (nax && numaGetCount(nax) != n) + return (PTA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); + + pta = ptaCreate(n); + numaGetParameters(nay, &startx, &delx); + for (i = 0; i < n; i++) { + if (nax) + numaGetFValue(nax, i, &xval); + else /* use implicit x values from nay */ + xval = startx + i * delx; + numaGetFValue(nay, i, &yval); + ptaAddPt(pta, xval, yval); + } + + return pta; +} + + +/*! + * \brief ptaDestroy() + * + * \param[in,out] ppta will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the pta.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +ptaDestroy(PTA **ppta) +{ +PTA *pta; + + PROCNAME("ptaDestroy"); + + if (ppta == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((pta = *ppta) == NULL) + return; + + ptaChangeRefcount(pta, -1); + if (ptaGetRefcount(pta) <= 0) { + LEPT_FREE(pta->x); + LEPT_FREE(pta->y); + LEPT_FREE(pta); + } + + *ppta = NULL; + return; +} + + +/*! + * \brief ptaCopy() + * + * \param[in] pta + * \return copy of pta, or NULL on error + */ +PTA * +ptaCopy(PTA *pta) +{ +l_int32 i; +l_float32 x, y; +PTA *npta; + + PROCNAME("ptaCopy"); + + if (!pta) + return (PTA *)ERROR_PTR("pta not defined", procName, NULL); + + if ((npta = ptaCreate(pta->nalloc)) == NULL) + return (PTA *)ERROR_PTR("npta not made", procName, NULL); + + for (i = 0; i < pta->n; i++) { + ptaGetPt(pta, i, &x, &y); + ptaAddPt(npta, x, y); + } + + return npta; +} + + +/*! + * \brief ptaCopyRange() + * + * \param[in] ptas + * \param[in] istart starting index in ptas + * \param[in] iend ending index in ptas; use 0 to copy to end + * \return 0 if OK, 1 on error + */ +PTA * +ptaCopyRange(PTA *ptas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i, x, y; +PTA *ptad; + + PROCNAME("ptaCopyRange"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + n = ptaGetCount(ptas); + if (istart < 0) + istart = 0; + if (istart >= n) + return (PTA *)ERROR_PTR("istart out of bounds", procName, NULL); + if (iend <= 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return (PTA *)ERROR_PTR("istart > iend; no pts", procName, NULL); + + if ((ptad = ptaCreate(iend - istart + 1)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = istart; i <= iend; i++) { + ptaGetIPt(ptas, i, &x, &y); + ptaAddPt(ptad, x, y); + } + + return ptad; +} + + +/*! + * \brief ptaClone() + * + * \param[in] pta + * \return ptr to same pta, or NULL on error + */ +PTA * +ptaClone(PTA *pta) +{ + PROCNAME("ptaClone"); + + if (!pta) + return (PTA *)ERROR_PTR("pta not defined", procName, NULL); + + ptaChangeRefcount(pta, 1); + return pta; +} + + +/*! + * \brief ptaEmpty() + * + * \param[in] pta + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      This only resets the Pta::n field, for reuse
+ * 
+ */ +l_ok +ptaEmpty(PTA *pta) +{ + PROCNAME("ptaEmpty"); + + if (!pta) + return ERROR_INT("ptad not defined", procName, 1); + pta->n = 0; + return 0; +} + + +/*---------------------------------------------------------------------* + * Pta array extension * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaAddPt() + * + * \param[in] pta + * \param[in] x, y + * \return 0 if OK, 1 on error + */ +l_ok +ptaAddPt(PTA *pta, + l_float32 x, + l_float32 y) +{ +l_int32 n; + + PROCNAME("ptaAddPt"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + n = pta->n; + if (n >= pta->nalloc) + ptaExtendArrays(pta); + pta->x[n] = x; + pta->y[n] = y; + pta->n++; + + return 0; +} + + +/*! + * \brief ptaExtendArrays() + * + * \param[in] pta + * \return 0 if OK; 1 on error + */ +static l_int32 +ptaExtendArrays(PTA *pta) +{ + PROCNAME("ptaExtendArrays"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + if ((pta->x = (l_float32 *)reallocNew((void **)&pta->x, + sizeof(l_float32) * pta->nalloc, + 2 * sizeof(l_float32) * pta->nalloc)) == NULL) + return ERROR_INT("new x array not returned", procName, 1); + if ((pta->y = (l_float32 *)reallocNew((void **)&pta->y, + sizeof(l_float32) * pta->nalloc, + 2 * sizeof(l_float32) * pta->nalloc)) == NULL) + return ERROR_INT("new y array not returned", procName, 1); + + pta->nalloc = 2 * pta->nalloc; + return 0; +} + + +/*---------------------------------------------------------------------* + * Pta insertion and removal * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaInsertPt() + * + * \param[in] pta + * \param[in] index at which pt is to be inserted + * \param[in] x, y point values + * \return 0 if OK; 1 on error + */ +l_ok +ptaInsertPt(PTA *pta, + l_int32 index, + l_int32 x, + l_int32 y) +{ +l_int32 i, n; + + PROCNAME("ptaInsertPt"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + n = ptaGetCount(pta); + if (index < 0 || index > n) + return ERROR_INT("index not in {0...n}", procName, 1); + + if (n > pta->nalloc) + ptaExtendArrays(pta); + pta->n++; + for (i = n; i > index; i--) { + pta->x[i] = pta->x[i - 1]; + pta->y[i] = pta->y[i - 1]; + } + pta->x[index] = x; + pta->y[index] = y; + return 0; +} + + +/*! + * \brief ptaRemovePt() + * + * \param[in] pta + * \param[in] index of point to be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This shifts pta[i] --> pta[i - 1] for all i > index.
+ *      (2) It should not be used repeatedly on large arrays,
+ *          because the function is O(n).
+ * 
+ */ +l_ok +ptaRemovePt(PTA *pta, + l_int32 index) +{ +l_int32 i, n; + + PROCNAME("ptaRemovePt"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + n = ptaGetCount(pta); + if (index < 0 || index >= n) + return ERROR_INT("index not in {0...n - 1}", procName, 1); + + /* Remove the point */ + for (i = index + 1; i < n; i++) { + pta->x[i - 1] = pta->x[i]; + pta->y[i - 1] = pta->y[i]; + } + pta->n--; + return 0; +} + + +/*---------------------------------------------------------------------* + * Pta accessors * + *---------------------------------------------------------------------*/ +l_int32 +ptaGetRefcount(PTA *pta) +{ + PROCNAME("ptaGetRefcount"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + return pta->refcount; +} + + +l_int32 +ptaChangeRefcount(PTA *pta, + l_int32 delta) +{ + PROCNAME("ptaChangeRefcount"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + pta->refcount += delta; + return 0; +} + + +/*! + * \brief ptaGetCount() + * + * \param[in] pta + * \return count, or 0 if no pta + */ +l_int32 +ptaGetCount(PTA *pta) +{ + PROCNAME("ptaGetCount"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 0); + + return pta->n; +} + + +/*! + * \brief ptaGetPt() + * + * \param[in] pta + * \param[in] index into arrays + * \param[out] px [optional] float x value + * \param[out] py [optional] float y value + * \return 0 if OK; 1 on error + */ +l_ok +ptaGetPt(PTA *pta, + l_int32 index, + l_float32 *px, + l_float32 *py) +{ + PROCNAME("ptaGetPt"); + + if (px) *px = 0; + if (py) *py = 0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (index < 0 || index >= pta->n) + return ERROR_INT("invalid index", procName, 1); + + if (px) *px = pta->x[index]; + if (py) *py = pta->y[index]; + return 0; +} + + +/*! + * \brief ptaGetIPt() + * + * \param[in] pta + * \param[in] index into arrays + * \param[out] px [optional] integer x value + * \param[out] py [optional] integer y value + * \return 0 if OK; 1 on error + */ +l_ok +ptaGetIPt(PTA *pta, + l_int32 index, + l_int32 *px, + l_int32 *py) +{ + PROCNAME("ptaGetIPt"); + + if (px) *px = 0; + if (py) *py = 0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (index < 0 || index >= pta->n) + return ERROR_INT("invalid index", procName, 1); + + if (px) *px = (l_int32)(pta->x[index] + 0.5); + if (py) *py = (l_int32)(pta->y[index] + 0.5); + return 0; +} + + +/*! + * \brief ptaSetPt() + * + * \param[in] pta + * \param[in] index into arrays + * \param[in] x, y + * \return 0 if OK; 1 on error + */ +l_ok +ptaSetPt(PTA *pta, + l_int32 index, + l_float32 x, + l_float32 y) +{ + PROCNAME("ptaSetPt"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (index < 0 || index >= pta->n) + return ERROR_INT("invalid index", procName, 1); + + pta->x[index] = x; + pta->y[index] = y; + return 0; +} + + +/*! + * \brief ptaGetArrays() + * + * \param[in] pta + * \param[out] pnax [optional] numa of x array + * \param[out] pnay [optional] numa of y array + * \return 0 if OK; 1 on error or if pta is empty + * + *
+ * Notes:
+ *      (1) This copies the internal arrays into new Numas.
+ * 
+ */ +l_ok +ptaGetArrays(PTA *pta, + NUMA **pnax, + NUMA **pnay) +{ +l_int32 i, n; +NUMA *nax, *nay; + + PROCNAME("ptaGetArrays"); + + if (!pnax && !pnay) + return ERROR_INT("no output requested", procName, 1); + if (pnax) *pnax = NULL; + if (pnay) *pnay = NULL; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) == 0) + return ERROR_INT("pta is empty", procName, 1); + + if (pnax) { + if ((nax = numaCreate(n)) == NULL) + return ERROR_INT("nax not made", procName, 1); + *pnax = nax; + for (i = 0; i < n; i++) + nax->array[i] = pta->x[i]; + nax->n = n; + } + if (pnay) { + if ((nay = numaCreate(n)) == NULL) + return ERROR_INT("nay not made", procName, 1); + *pnay = nay; + for (i = 0; i < n; i++) + nay->array[i] = pta->y[i]; + nay->n = n; + } + return 0; +} + + +/*---------------------------------------------------------------------* + * Pta serialized for I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaRead() + * + * \param[in] filename + * \return pta, or NULL on error + */ +PTA * +ptaRead(const char *filename) +{ +FILE *fp; +PTA *pta; + + PROCNAME("ptaRead"); + + if (!filename) + return (PTA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PTA *)ERROR_PTR("stream not opened", procName, NULL); + pta = ptaReadStream(fp); + fclose(fp); + if (!pta) + return (PTA *)ERROR_PTR("pta not read", procName, NULL); + return pta; +} + + +/*! + * \brief ptaReadStream() + * + * \param[in] fp file stream + * \return pta, or NULL on error + */ +PTA * +ptaReadStream(FILE *fp) +{ +char typestr[128]; /* hardcoded below in fscanf */ +l_int32 i, n, ix, iy, type, version; +l_float32 x, y; +PTA *pta; + + PROCNAME("ptaReadStream"); + + if (!fp) + return (PTA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\n Pta Version %d\n", &version) != 1) + return (PTA *)ERROR_PTR("not a pta file", procName, NULL); + if (version != PTA_VERSION_NUMBER) + return (PTA *)ERROR_PTR("invalid pta version", procName, NULL); + if (fscanf(fp, " Number of pts = %d; format = %127s\n", &n, typestr) != 2) + return (PTA *)ERROR_PTR("not a pta file", procName, NULL); + if (!strcmp(typestr, "float")) + type = 0; + else /* typestr is "integer" */ + type = 1; + + if ((pta = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + for (i = 0; i < n; i++) { + if (type == 0) { /* data is float */ + if (fscanf(fp, " (%f, %f)\n", &x, &y) != 2) { + ptaDestroy(&pta); + return (PTA *)ERROR_PTR("error reading floats", procName, NULL); + } + ptaAddPt(pta, x, y); + } else { /* data is integer */ + if (fscanf(fp, " (%d, %d)\n", &ix, &iy) != 2) { + ptaDestroy(&pta); + return (PTA *)ERROR_PTR("error reading ints", procName, NULL); + } + ptaAddPt(pta, ix, iy); + } + } + + return pta; +} + + +/*! + * \brief ptaReadMem() + * + * \param[in] data serialization in ascii + * \param[in] size of data in bytes; can use strlen to get it + * \return pta, or NULL on error + */ +PTA * +ptaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +PTA *pta; + + PROCNAME("ptaReadMem"); + + if (!data) + return (PTA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PTA *)ERROR_PTR("stream not opened", procName, NULL); + + pta = ptaReadStream(fp); + fclose(fp); + if (!pta) L_ERROR("pta not read\n", procName); + return pta; +} + + +/*! + * \brief ptaWriteDebug() + * + * \param[in] filename + * \param[in] pta + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of ptaWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +ptaWriteDebug(const char *filename, + PTA *pta, + l_int32 type) +{ + PROCNAME("ptaWriteDebug"); + + if (LeptDebugOK) { + return ptaWrite(filename, pta, type); + } else { + L_INFO("write to named temp file %s is disabled\n", procName, filename); + return 0; + } +} + + +/*! + * \brief ptaWrite() + * + * \param[in] filename + * \param[in] pta + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + */ +l_ok +ptaWrite(const char *filename, + PTA *pta, + l_int32 type) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("ptaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = ptaWriteStream(fp, pta, type); + fclose(fp); + if (ret) + return ERROR_INT("pta not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief ptaWriteStream() + * + * \param[in] fp file stream + * \param[in] pta + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK; 1 on error + */ +l_ok +ptaWriteStream(FILE *fp, + PTA *pta, + l_int32 type) +{ +l_int32 i, n, ix, iy; +l_float32 x, y; + + PROCNAME("ptaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + n = ptaGetCount(pta); + fprintf(fp, "\n Pta Version %d\n", PTA_VERSION_NUMBER); + if (type == 0) + fprintf(fp, " Number of pts = %d; format = float\n", n); + else /* type == 1 */ + fprintf(fp, " Number of pts = %d; format = integer\n", n); + for (i = 0; i < n; i++) { + if (type == 0) { /* data is float */ + ptaGetPt(pta, i, &x, &y); + fprintf(fp, " (%f, %f)\n", x, y); + } else { /* data is integer */ + ptaGetIPt(pta, i, &ix, &iy); + fprintf(fp, " (%d, %d)\n", ix, iy); + } + } + + return 0; +} + + +/*! + * \brief ptaWriteMem() + * + * \param[out] pdata data of serialized pta; ascii + * \param[out] psize size of returned data + * \param[in] pta + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a pta in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +ptaWriteMem(l_uint8 **pdata, + size_t *psize, + PTA *pta, + l_int32 type) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("ptaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = ptaWriteStream(fp, pta, type); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = ptaWriteStream(fp, pta, type); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*---------------------------------------------------------------------* + * PTAA creation, destruction * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaaCreate() + * + * \param[in] n initial number of ptrs + * \return ptaa, or NULL on error + */ +PTAA * +ptaaCreate(l_int32 n) +{ +PTAA *ptaa; + + PROCNAME("ptaaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + ptaa = (PTAA *)LEPT_CALLOC(1, sizeof(PTAA)); + ptaa->n = 0; + ptaa->nalloc = n; + if ((ptaa->pta = (PTA **)LEPT_CALLOC(n, sizeof(PTA *))) == NULL) { + ptaaDestroy(&ptaa); + return (PTAA *)ERROR_PTR("pta ptrs not made", procName, NULL); + } + return ptaa; +} + + +/*! + * \brief ptaaDestroy() + * + * \param[in,out] pptaa will be set to null before returning + * \return void + */ +void +ptaaDestroy(PTAA **pptaa) +{ +l_int32 i; +PTAA *ptaa; + + PROCNAME("ptaaDestroy"); + + if (pptaa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + + if ((ptaa = *pptaa) == NULL) + return; + + for (i = 0; i < ptaa->n; i++) + ptaDestroy(&ptaa->pta[i]); + LEPT_FREE(ptaa->pta); + + LEPT_FREE(ptaa); + *pptaa = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * PTAA array extension * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaaAddPta() + * + * \param[in] ptaa + * \param[in] pta to be added + * \param[in] copyflag L_INSERT, L_COPY, L_CLONE + * \return 0 if OK, 1 on error + */ +l_ok +ptaaAddPta(PTAA *ptaa, + PTA *pta, + l_int32 copyflag) +{ +l_int32 n; +PTA *ptac; + + PROCNAME("ptaaAddPta"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + if (copyflag == L_INSERT) { + ptac = pta; + } else if (copyflag == L_COPY) { + if ((ptac = ptaCopy(pta)) == NULL) + return ERROR_INT("ptac not made", procName, 1); + } else if (copyflag == L_CLONE) { + if ((ptac = ptaClone(pta)) == NULL) + return ERROR_INT("pta clone not made", procName, 1); + } else { + return ERROR_INT("invalid copyflag", procName, 1); + } + + n = ptaaGetCount(ptaa); + if (n >= ptaa->nalloc) + ptaaExtendArray(ptaa); + ptaa->pta[n] = ptac; + ptaa->n++; + + return 0; +} + + +/*! + * \brief ptaaExtendArray() + * + * \param[in] ptaa + * \return 0 if OK, 1 on error + */ +static l_int32 +ptaaExtendArray(PTAA *ptaa) +{ + PROCNAME("ptaaExtendArray"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + if ((ptaa->pta = (PTA **)reallocNew((void **)&ptaa->pta, + sizeof(PTA *) * ptaa->nalloc, + 2 * sizeof(PTA *) * ptaa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + ptaa->nalloc = 2 * ptaa->nalloc; + return 0; +} + + +/*---------------------------------------------------------------------* + * Ptaa accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaaGetCount() + * + * \param[in] ptaa + * \return count, or 0 if no ptaa + */ +l_int32 +ptaaGetCount(PTAA *ptaa) +{ + PROCNAME("ptaaGetCount"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 0); + + return ptaa->n; +} + + +/*! + * \brief ptaaGetPta() + * + * \param[in] ptaa + * \param[in] index to the i-th pta + * \param[in] accessflag L_COPY or L_CLONE + * \return pta, or NULL on error + */ +PTA * +ptaaGetPta(PTAA *ptaa, + l_int32 index, + l_int32 accessflag) +{ + PROCNAME("ptaaGetPta"); + + if (!ptaa) + return (PTA *)ERROR_PTR("ptaa not defined", procName, NULL); + if (index < 0 || index >= ptaa->n) + return (PTA *)ERROR_PTR("index not valid", procName, NULL); + + if (accessflag == L_COPY) + return ptaCopy(ptaa->pta[index]); + else if (accessflag == L_CLONE) + return ptaClone(ptaa->pta[index]); + else + return (PTA *)ERROR_PTR("invalid accessflag", procName, NULL); +} + + +/*! + * \brief ptaaGetPt() + * + * \param[in] ptaa + * \param[in] ipta to the i-th pta + * \param[in] jpt index to the j-th pt in the pta + * \param[out] px [optional] float x value + * \param[out] py [optional] float y value + * \return 0 if OK; 1 on error + */ +l_ok +ptaaGetPt(PTAA *ptaa, + l_int32 ipta, + l_int32 jpt, + l_float32 *px, + l_float32 *py) +{ +PTA *pta; + + PROCNAME("ptaaGetPt"); + + if (px) *px = 0; + if (py) *py = 0; + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (ipta < 0 || ipta >= ptaa->n) + return ERROR_INT("index ipta not valid", procName, 1); + + pta = ptaaGetPta(ptaa, ipta, L_CLONE); + if (jpt < 0 || jpt >= pta->n) { + ptaDestroy(&pta); + return ERROR_INT("index jpt not valid", procName, 1); + } + + ptaGetPt(pta, jpt, px, py); + ptaDestroy(&pta); + return 0; +} + + +/*---------------------------------------------------------------------* + * Ptaa array modifiers * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaaInitFull() + * + * \param[in] ptaa can have non-null ptrs in the ptr array + * \param[in] pta to be replicated into the entire ptr array + * \return 0 if OK; 1 on error + */ +l_ok +ptaaInitFull(PTAA *ptaa, + PTA *pta) +{ +l_int32 n, i; +PTA *ptat; + + PROCNAME("ptaaInitFull"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + n = ptaa->nalloc; + ptaa->n = n; + for (i = 0; i < n; i++) { + ptat = ptaCopy(pta); + ptaaReplacePta(ptaa, i, ptat); + } + return 0; +} + + +/*! + * \brief ptaaReplacePta() + * + * \param[in] ptaa + * \param[in] index to the index-th pta + * \param[in] pta insert and replace any existing one + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Any existing pta is destroyed, and the input one
+ *          is inserted in its place.
+ *      (2) If %index is invalid, return 1 (error)
+ * 
+ */ +l_ok +ptaaReplacePta(PTAA *ptaa, + l_int32 index, + PTA *pta) +{ +l_int32 n; + + PROCNAME("ptaaReplacePta"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + n = ptaaGetCount(ptaa); + if (index < 0 || index >= n) + return ERROR_INT("index not valid", procName, 1); + + ptaDestroy(&ptaa->pta[index]); + ptaa->pta[index] = pta; + return 0; +} + + +/*! + * \brief ptaaAddPt() + * + * \param[in] ptaa + * \param[in] ipta to the i-th pta + * \param[in] x,y point coordinates + * \return 0 if OK; 1 on error + */ +l_ok +ptaaAddPt(PTAA *ptaa, + l_int32 ipta, + l_float32 x, + l_float32 y) +{ +PTA *pta; + + PROCNAME("ptaaAddPt"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + if (ipta < 0 || ipta >= ptaa->n) + return ERROR_INT("index ipta not valid", procName, 1); + + pta = ptaaGetPta(ptaa, ipta, L_CLONE); + ptaAddPt(pta, x, y); + ptaDestroy(&pta); + return 0; +} + + +/*! + * \brief ptaaTruncate() + * + * \param[in] ptaa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This identifies the largest index containing a pta that
+ *          has any points within it, destroys all pta above that index,
+ *          and resets the count.
+ * 
+ */ +l_ok +ptaaTruncate(PTAA *ptaa) +{ +l_int32 i, n, np; +PTA *pta; + + PROCNAME("ptaaTruncate"); + + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + n = ptaaGetCount(ptaa); + for (i = n - 1; i >= 0; i--) { + pta = ptaaGetPta(ptaa, i, L_CLONE); + if (!pta) { + ptaa->n--; + continue; + } + np = ptaGetCount(pta); + ptaDestroy(&pta); + if (np == 0) { + ptaDestroy(&ptaa->pta[i]); + ptaa->n--; + } else { + break; + } + } + return 0; +} + + +/*---------------------------------------------------------------------* + * Ptaa serialized for I/O * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaaRead() + * + * \param[in] filename + * \return ptaa, or NULL on error + */ +PTAA * +ptaaRead(const char *filename) +{ +FILE *fp; +PTAA *ptaa; + + PROCNAME("ptaaRead"); + + if (!filename) + return (PTAA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PTAA *)ERROR_PTR("stream not opened", procName, NULL); + ptaa = ptaaReadStream(fp); + fclose(fp); + if (!ptaa) + return (PTAA *)ERROR_PTR("ptaa not read", procName, NULL); + return ptaa; +} + + +/*! + * \brief ptaaReadStream() + * + * \param[in] fp file stream + * \return ptaa, or NULL on error + */ +PTAA * +ptaaReadStream(FILE *fp) +{ +l_int32 i, n, version; +PTA *pta; +PTAA *ptaa; + + PROCNAME("ptaaReadStream"); + + if (!fp) + return (PTAA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nPtaa Version %d\n", &version) != 1) + return (PTAA *)ERROR_PTR("not a ptaa file", procName, NULL); + if (version != PTA_VERSION_NUMBER) + return (PTAA *)ERROR_PTR("invalid ptaa version", procName, NULL); + if (fscanf(fp, "Number of Pta = %d\n", &n) != 1) + return (PTAA *)ERROR_PTR("not a ptaa file", procName, NULL); + + if ((ptaa = ptaaCreate(n)) == NULL) + return (PTAA *)ERROR_PTR("ptaa not made", procName, NULL); + for (i = 0; i < n; i++) { + if ((pta = ptaReadStream(fp)) == NULL) { + ptaaDestroy(&ptaa); + return (PTAA *)ERROR_PTR("error reading pta", procName, NULL); + } + ptaaAddPta(ptaa, pta, L_INSERT); + } + + return ptaa; +} + + +/*! + * \brief ptaaReadMem() + * + * \param[in] data serialization in ascii + * \param[in] size of data in bytes; can use strlen to get it + * \return ptaa, or NULL on error + */ +PTAA * +ptaaReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +PTAA *ptaa; + + PROCNAME("ptaaReadMem"); + + if (!data) + return (PTAA *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (PTAA *)ERROR_PTR("stream not opened", procName, NULL); + + ptaa = ptaaReadStream(fp); + fclose(fp); + if (!ptaa) L_ERROR("ptaa not read\n", procName); + return ptaa; +} + + +/*! + * \brief ptaaWriteDebug() + * + * \param[in] filename + * \param[in] ptaa + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of ptaaWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +ptaaWriteDebug(const char *filename, + PTAA *ptaa, + l_int32 type) +{ + PROCNAME("ptaaWriteDebug"); + + if (LeptDebugOK) { + return ptaaWrite(filename, ptaa, type); + } else { + L_INFO("write to named temp file %s is disabled\n", procName, filename); + return 0; + } +} + + +/*! + * \brief ptaaWrite() + * + * \param[in] filename + * \param[in] ptaa + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + */ +l_ok +ptaaWrite(const char *filename, + PTAA *ptaa, + l_int32 type) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("ptaaWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = ptaaWriteStream(fp, ptaa, type); + fclose(fp); + if (ret) + return ERROR_INT("ptaa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief ptaaWriteStream() + * + * \param[in] fp file stream + * \param[in] ptaa + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK; 1 on error + */ +l_ok +ptaaWriteStream(FILE *fp, + PTAA *ptaa, + l_int32 type) +{ +l_int32 i, n; +PTA *pta; + + PROCNAME("ptaaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + + n = ptaaGetCount(ptaa); + fprintf(fp, "\nPtaa Version %d\n", PTA_VERSION_NUMBER); + fprintf(fp, "Number of Pta = %d\n", n); + for (i = 0; i < n; i++) { + pta = ptaaGetPta(ptaa, i, L_CLONE); + ptaWriteStream(fp, pta, type); + ptaDestroy(&pta); + } + + return 0; +} + + +/*! + * \brief ptaaWriteMem() + * + * \param[out] pdata data of serialized ptaa; ascii + * \param[out] psize size of returned data + * \param[in] ptaa + * \param[in] type 0 for float values; 1 for integer values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes %ptaa in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +ptaaWriteMem(l_uint8 **pdata, + size_t *psize, + PTAA *ptaa, + l_int32 type) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("ptaaWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!ptaa) + return ERROR_INT("ptaa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = ptaaWriteStream(fp, ptaa, type); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = ptaaWriteStream(fp, ptaa, type); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} diff --git a/3rdparty/hgOCR/leptonica/ptafunc1.c b/3rdparty/hgOCR/leptonica/ptafunc1.c new file mode 100644 index 00000000..b8db958c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ptafunc1.c @@ -0,0 +1,2665 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file ptafunc1.c + *
+ *
+ *      --------------------------------------
+ *      This file has these Pta utilities:
+ *         - simple rearrangements
+ *         - geometric analysis
+ *         - min/max and filtering
+ *         - least squares fitting
+ *         - interconversions with Pix and Numa
+ *         - display into a pix
+ *      --------------------------------------
+ *
+ *      Simple rearrangements
+ *           PTA      *ptaSubsample()
+ *           l_int32   ptaJoin()
+ *           l_int32   ptaaJoin()
+ *           PTA      *ptaReverse()
+ *           PTA      *ptaTranspose()
+ *           PTA      *ptaCyclicPerm()
+ *           PTA      *ptaSelectRange()
+ *
+ *      Geometric
+ *           BOX      *ptaGetBoundingRegion()
+ *           l_int32  *ptaGetRange()
+ *           PTA      *ptaGetInsideBox()
+ *           PTA      *pixFindCornerPixels()
+ *           l_int32   ptaContainsPt()
+ *           l_int32   ptaTestIntersection()
+ *           PTA      *ptaTransform()
+ *           l_int32   ptaPtInsidePolygon()
+ *           l_float32 l_angleBetweenVectors()
+ *
+ *      Min/max and filtering
+ *           l_int32   ptaGetMinMax()
+ *           PTA      *ptaSelectByValue()
+ *           PTA      *ptaCropToMask()
+ *
+ *      Least Squares Fit
+ *           l_int32   ptaGetLinearLSF()
+ *           l_int32   ptaGetQuadraticLSF()
+ *           l_int32   ptaGetCubicLSF()
+ *           l_int32   ptaGetQuarticLSF()
+ *           l_int32   ptaNoisyLinearLSF()
+ *           l_int32   ptaNoisyQuadraticLSF()
+ *           l_int32   applyLinearFit()
+ *           l_int32   applyQuadraticFit()
+ *           l_int32   applyCubicFit()
+ *           l_int32   applyQuarticFit()
+ *
+ *      Interconversions with Pix
+ *           l_int32   pixPlotAlongPta()
+ *           PTA      *ptaGetPixelsFromPix()
+ *           PIX      *pixGenerateFromPta()
+ *           PTA      *ptaGetBoundaryPixels()
+ *           PTAA     *ptaaGetBoundaryPixels()
+ *           PTAA     *ptaaIndexLabeledPixels()
+ *           PTA      *ptaGetNeighborPixLocs()
+ *
+ *      Interconversion with Numa
+ *           PTA      *numaConvertToPta1()
+ *           PTA      *numaConvertToPta2()
+ *           l_int32   ptaConvertToNuma()
+ *
+ *      Display Pta and Ptaa
+ *           PIX      *pixDisplayPta()
+ *           PIX      *pixDisplayPtaaPattern()
+ *           PIX      *pixDisplayPtaPattern()
+ *           PTA      *ptaReplicatePattern()
+ *           PIX      *pixDisplayPtaa()
+ * 
+ */ + +#include +#include "allheaders.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif /* M_PI */ + + +/*---------------------------------------------------------------------* + * Simple rearrangements * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaSubsample() + * + * \param[in] ptas + * \param[in] subfactor subsample factor, >= 1 + * \return ptad evenly sampled pt values from ptas, or NULL on error + */ +PTA * +ptaSubsample(PTA *ptas, + l_int32 subfactor) +{ +l_int32 n, i; +l_float32 x, y; +PTA *ptad; + + PROCNAME("pixSubsample"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (subfactor < 1) + return (PTA *)ERROR_PTR("subfactor < 1", procName, NULL); + + ptad = ptaCreate(0); + n = ptaGetCount(ptas); + for (i = 0; i < n; i++) { + if (i % subfactor != 0) continue; + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, x, y); + } + + return ptad; +} + + +/*! + * \brief ptaJoin() + * + * \param[in] ptad dest pta; add to this one + * \param[in] ptas source pta; add from this one + * \param[in] istart starting index in ptas + * \param[in] iend ending index in ptas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (2) iend < 0 means 'read to the end'
+ *      (3) if ptas == NULL, this is a no-op
+ * 
+ */ +l_ok +ptaJoin(PTA *ptad, + PTA *ptas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i, x, y; + + PROCNAME("ptaJoin"); + + if (!ptad) + return ERROR_INT("ptad not defined", procName, 1); + if (!ptas) + return 0; + + if (istart < 0) + istart = 0; + n = ptaGetCount(ptas); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; no pts", procName, 1); + + for (i = istart; i <= iend; i++) { + ptaGetIPt(ptas, i, &x, &y); + ptaAddPt(ptad, x, y); + } + + return 0; +} + + +/*! + * \brief ptaaJoin() + * + * \param[in] ptaad dest ptaa; add to this one + * \param[in] ptaas source ptaa; add from this one + * \param[in] istart starting index in ptaas + * \param[in] iend ending index in ptaas; use -1 to cat all + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) istart < 0 is taken to mean 'read from the start' (istart = 0)
+ *      (2) iend < 0 means 'read to the end'
+ *      (3) if ptas == NULL, this is a no-op
+ * 
+ */ +l_ok +ptaaJoin(PTAA *ptaad, + PTAA *ptaas, + l_int32 istart, + l_int32 iend) +{ +l_int32 n, i; +PTA *pta; + + PROCNAME("ptaaJoin"); + + if (!ptaad) + return ERROR_INT("ptaad not defined", procName, 1); + if (!ptaas) + return 0; + + if (istart < 0) + istart = 0; + n = ptaaGetCount(ptaas); + if (iend < 0 || iend >= n) + iend = n - 1; + if (istart > iend) + return ERROR_INT("istart > iend; no pts", procName, 1); + + for (i = istart; i <= iend; i++) { + pta = ptaaGetPta(ptaas, i, L_CLONE); + ptaaAddPta(ptaad, pta, L_INSERT); + } + + return 0; +} + + +/*! + * \brief ptaReverse() + * + * \param[in] ptas + * \param[in] type 0 for float values; 1 for integer values + * \return ptad reversed pta, or NULL on error + */ +PTA * +ptaReverse(PTA *ptas, + l_int32 type) +{ +l_int32 n, i, ix, iy; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaReverse"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + n = ptaGetCount(ptas); + if ((ptad = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = n - 1; i >= 0; i--) { + if (type == 0) { + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, x, y); + } else { /* type == 1 */ + ptaGetIPt(ptas, i, &ix, &iy); + ptaAddPt(ptad, ix, iy); + } + } + + return ptad; +} + + +/*! + * \brief ptaTranspose() + * + * \param[in] ptas + * \return ptad with x and y values swapped, or NULL on error + */ +PTA * +ptaTranspose(PTA *ptas) +{ +l_int32 n, i; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaTranspose"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + n = ptaGetCount(ptas); + if ((ptad = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = 0; i < n; i++) { + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, y, x); + } + + return ptad; +} + + +/*! + * \brief ptaCyclicPerm() + * + * \param[in] ptas + * \param[in] xs, ys start point; must be in ptas + * \return ptad cyclic permutation, starting and ending at (xs, ys, + * or NULL on error + * + *
+ * Notes:
+ *      (1) Check to insure that (a) ptas is a closed path where
+ *          the first and last points are identical, and (b) the
+ *          resulting pta also starts and ends on the same point
+ *          (which in this case is (xs, ys).
+ * 
+ */ +PTA * +ptaCyclicPerm(PTA *ptas, + l_int32 xs, + l_int32 ys) +{ +l_int32 n, i, x, y, j, index, state; +l_int32 x1, y1, x2, y2; +PTA *ptad; + + PROCNAME("ptaCyclicPerm"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + n = ptaGetCount(ptas); + + /* Verify input data */ + ptaGetIPt(ptas, 0, &x1, &y1); + ptaGetIPt(ptas, n - 1, &x2, &y2); + if (x1 != x2 || y1 != y2) + return (PTA *)ERROR_PTR("start and end pts not same", procName, NULL); + state = L_NOT_FOUND; + for (i = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + if (x == xs && y == ys) { + state = L_FOUND; + break; + } + } + if (state == L_NOT_FOUND) + return (PTA *)ERROR_PTR("start pt not in ptas", procName, NULL); + + if ((ptad = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (j = 0; j < n - 1; j++) { + if (i + j < n - 1) + index = i + j; + else + index = (i + j + 1) % n; + ptaGetIPt(ptas, index, &x, &y); + ptaAddPt(ptad, x, y); + } + ptaAddPt(ptad, xs, ys); + + return ptad; +} + + +/*! + * \brief ptaSelectRange() + * + * \param[in] ptas + * \param[in] first use 0 to select from the beginning + * \param[in] last use -1 to select to the end + * \return ptad, or NULL on error + */ +PTA * +ptaSelectRange(PTA *ptas, + l_int32 first, + l_int32 last) +{ +l_int32 n, npt, i; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaSelectRange"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if ((n = ptaGetCount(ptas)) == 0) { + L_WARNING("ptas is empty\n", procName); + return ptaCopy(ptas); + } + first = L_MAX(0, first); + if (last < 0) last = n - 1; + if (first >= n) + return (PTA *)ERROR_PTR("invalid first", procName, NULL); + if (last >= n) { + L_WARNING("last = %d is beyond max index = %d; adjusting\n", + procName, last, n - 1); + last = n - 1; + } + if (first > last) + return (PTA *)ERROR_PTR("first > last", procName, NULL); + + npt = last - first + 1; + ptad = ptaCreate(npt); + for (i = first; i <= last; i++) { + ptaGetPt(ptas, i, &x, &y); + ptaAddPt(ptad, x, y); + } + return ptad; +} + + +/*---------------------------------------------------------------------* + * Geometric * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaGetBoundingRegion() + * + * \param[in] pta + * \return box, or NULL on error + * + *
+ * Notes:
+ *      (1) This is used when the pta represents a set of points in
+ *          a two-dimensional image.  It returns the box of minimum
+ *          size containing the pts in the pta.
+ * 
+ */ +BOX * +ptaGetBoundingRegion(PTA *pta) +{ +l_int32 n, i, x, y, minx, maxx, miny, maxy; + + PROCNAME("ptaGetBoundingRegion"); + + if (!pta) + return (BOX *)ERROR_PTR("pta not defined", procName, NULL); + + minx = 10000000; + miny = 10000000; + maxx = -10000000; + maxy = -10000000; + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < minx) minx = x; + if (x > maxx) maxx = x; + if (y < miny) miny = y; + if (y > maxy) maxy = y; + } + + return boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); +} + + +/*! + * \brief ptaGetRange() + * + * \param[in] pta + * \param[out] pminx [optional] min value of x + * \param[out] pmaxx [optional] max value of x + * \param[out] pminy [optional] min value of y + * \param[out] pmaxy [optional] max value of y + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) We can use pts to represent pairs of floating values, that
+ *          are not necessarily tied to a two-dimension region.  For
+ *          example, the pts can represent a general function y(x).
+ * 
+ */ +l_ok +ptaGetRange(PTA *pta, + l_float32 *pminx, + l_float32 *pmaxx, + l_float32 *pminy, + l_float32 *pmaxy) +{ +l_int32 n, i; +l_float32 x, y, minx, maxx, miny, maxy; + + PROCNAME("ptaGetRange"); + + if (!pminx && !pmaxx && !pminy && !pmaxy) + return ERROR_INT("no output requested", procName, 1); + if (pminx) *pminx = 0; + if (pmaxx) *pmaxx = 0; + if (pminy) *pminy = 0; + if (pmaxy) *pmaxy = 0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) == 0) + return ERROR_INT("no points in pta", procName, 1); + + ptaGetPt(pta, 0, &x, &y); + minx = x; + maxx = x; + miny = y; + maxy = y; + for (i = 1; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + if (x < minx) minx = x; + if (x > maxx) maxx = x; + if (y < miny) miny = y; + if (y > maxy) maxy = y; + } + if (pminx) *pminx = minx; + if (pmaxx) *pmaxx = maxx; + if (pminy) *pminy = miny; + if (pmaxy) *pmaxy = maxy; + return 0; +} + + +/*! + * \brief ptaGetInsideBox() + * + * \param[in] ptas input pts + * \param[in] box + * \return ptad of pts in ptas that are inside the box, or NULL on error + */ +PTA * +ptaGetInsideBox(PTA *ptas, + BOX *box) +{ +PTA *ptad; +l_int32 n, i, contains; +l_float32 x, y; + + PROCNAME("ptaGetInsideBox"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (!box) + return (PTA *)ERROR_PTR("box not defined", procName, NULL); + + n = ptaGetCount(ptas); + ptad = ptaCreate(0); + for (i = 0; i < n; i++) { + ptaGetPt(ptas, i, &x, &y); + boxContainsPt(box, x, y, &contains); + if (contains) + ptaAddPt(ptad, x, y); + } + + return ptad; +} + + +/*! + * \brief pixFindCornerPixels() + * + * \param[in] pixs 1 bpp + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Finds the 4 corner-most pixels, as defined by a search
+ *          inward from each corner, using a 45 degree line.
+ * 
+ */ +PTA * +pixFindCornerPixels(PIX *pixs) +{ +l_int32 i, j, x, y, w, h, wpl, mindim, found; +l_uint32 *data, *line; +PTA *pta; + + PROCNAME("pixFindCornerPixels"); + + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + mindim = L_MIN(w, h); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + + if ((pta = ptaCreate(4)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + + for (found = FALSE, i = 0; i < mindim; i++) { + for (j = 0; j <= i; j++) { + y = i - j; + line = data + y * wpl; + if (GET_DATA_BIT(line, j)) { + ptaAddPt(pta, j, y); + found = TRUE; + break; + } + } + if (found == TRUE) + break; + } + + for (found = FALSE, i = 0; i < mindim; i++) { + for (j = 0; j <= i; j++) { + y = i - j; + line = data + y * wpl; + x = w - 1 - j; + if (GET_DATA_BIT(line, x)) { + ptaAddPt(pta, x, y); + found = TRUE; + break; + } + } + if (found == TRUE) + break; + } + + for (found = FALSE, i = 0; i < mindim; i++) { + for (j = 0; j <= i; j++) { + y = h - 1 - i + j; + line = data + y * wpl; + if (GET_DATA_BIT(line, j)) { + ptaAddPt(pta, j, y); + found = TRUE; + break; + } + } + if (found == TRUE) + break; + } + + for (found = FALSE, i = 0; i < mindim; i++) { + for (j = 0; j <= i; j++) { + y = h - 1 - i + j; + line = data + y * wpl; + x = w - 1 - j; + if (GET_DATA_BIT(line, x)) { + ptaAddPt(pta, x, y); + found = TRUE; + break; + } + } + if (found == TRUE) + break; + } + + return pta; +} + + +/*! + * \brief ptaContainsPt() + * + * \param[in] pta + * \param[in] x, y point + * \return 1 if contained, 0 otherwise or on error + */ +l_int32 +ptaContainsPt(PTA *pta, + l_int32 x, + l_int32 y) +{ +l_int32 i, n, ix, iy; + + PROCNAME("ptaContainsPt"); + + if (!pta) + return ERROR_INT("pta not defined", procName, 0); + + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &ix, &iy); + if (x == ix && y == iy) + return 1; + } + return 0; +} + + +/*! + * \brief ptaTestIntersection() + * + * \param[in] pta1, pta2 + * \return bval which is 1 if they have any elements in common; + * 0 otherwise or on error. + */ +l_int32 +ptaTestIntersection(PTA *pta1, + PTA *pta2) +{ +l_int32 i, j, n1, n2, x1, y1, x2, y2; + + PROCNAME("ptaTestIntersection"); + + if (!pta1) + return ERROR_INT("pta1 not defined", procName, 0); + if (!pta2) + return ERROR_INT("pta2 not defined", procName, 0); + + n1 = ptaGetCount(pta1); + n2 = ptaGetCount(pta2); + for (i = 0; i < n1; i++) { + ptaGetIPt(pta1, i, &x1, &y1); + for (j = 0; j < n2; j++) { + ptaGetIPt(pta2, i, &x2, &y2); + if (x1 == x2 && y1 == y2) + return 1; + } + } + + return 0; +} + + +/*! + * \brief ptaTransform() + * + * \param[in] ptas + * \param[in] shiftx, shifty + * \param[in] scalex, scaley + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Shift first, then scale.
+ * 
+ */ +PTA * +ptaTransform(PTA *ptas, + l_int32 shiftx, + l_int32 shifty, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 n, i, x, y; +PTA *ptad; + + PROCNAME("ptaTransform"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + x = (l_int32)(scalex * (x + shiftx) + 0.5); + y = (l_int32)(scaley * (y + shifty) + 0.5); + ptaAddPt(ptad, x, y); + } + + return ptad; +} + + +/*! + * \brief ptaPtInsidePolygon() + * + * \param[in] pta vertices of a polygon + * \param[in] x, y point to be tested + * \param[out] pinside 1 if inside; 0 if outside or on boundary + * \return 1 if OK, 0 on error + * + * The abs value of the sum of the angles subtended from a point by + * the sides of a polygon, when taken in order traversing the polygon, + * is 0 if the point is outside the polygon and 2*pi if inside. + * The sign will be positive if traversed cw and negative if ccw. + */ +l_int32 +ptaPtInsidePolygon(PTA *pta, + l_float32 x, + l_float32 y, + l_int32 *pinside) +{ +l_int32 i, n; +l_float32 sum, x1, y1, x2, y2, xp1, yp1, xp2, yp2; + + PROCNAME("ptaPtInsidePolygon"); + + if (!pinside) + return ERROR_INT("&inside not defined", procName, 1); + *pinside = 0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + /* Think of (x1,y1) as the end point of a vector that starts + * from the origin (0,0), and ditto for (x2,y2). */ + n = ptaGetCount(pta); + sum = 0.0; + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &xp1, &yp1); + ptaGetPt(pta, (i + 1) % n, &xp2, &yp2); + x1 = xp1 - x; + y1 = yp1 - y; + x2 = xp2 - x; + y2 = yp2 - y; + sum += l_angleBetweenVectors(x1, y1, x2, y2); + } + + if (L_ABS(sum) > M_PI) + *pinside = 1; + return 0; +} + + +/*! + * \brief l_angleBetweenVectors() + * + * \param[in] x1, y1 end point of first vector + * \param[in] x2, y2 end point of second vector + * \return angle radians, or 0.0 on error + * + *
+ * Notes:
+ *      (1) This gives the angle between two vectors, going between
+ *          vector1 (x1,y1) and vector2 (x2,y2).  The angle is swept
+ *          out from 1 --> 2.  If this is clockwise, the angle is
+ *          positive, but the result is folded into the interval [-pi, pi].
+ * 
+ */ +l_float32 +l_angleBetweenVectors(l_float32 x1, + l_float32 y1, + l_float32 x2, + l_float32 y2) +{ +l_float64 ang; + + ang = atan2(y2, x2) - atan2(y1, x1); + if (ang > M_PI) ang -= 2.0 * M_PI; + if (ang < -M_PI) ang += 2.0 * M_PI; + return ang; +} + + +/*---------------------------------------------------------------------* + * Min/max and filtering * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaGetMinMax() + * + * \param[in] pta + * \param[out] pxmin [optional] min of x + * \param[out] pymin [optional] min of y + * \param[out] pxmax [optional] max of x + * \param[out] pymax [optional] max of y + * \return 0 if OK, 1 on error. If pta is empty, requested + * values are returned as -1.0. + */ +l_ok +ptaGetMinMax(PTA *pta, + l_float32 *pxmin, + l_float32 *pymin, + l_float32 *pxmax, + l_float32 *pymax) +{ +l_int32 i, n; +l_float32 x, y, xmin, ymin, xmax, ymax; + + PROCNAME("ptaGetMinMax"); + + if (pxmin) *pxmin = -1.0; + if (pymin) *pymin = -1.0; + if (pxmax) *pxmax = -1.0; + if (pymax) *pymax = -1.0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (!pxmin && !pxmax && !pymin && !pymax) + return ERROR_INT("no output requested", procName, 1); + if ((n = ptaGetCount(pta)) == 0) { + L_WARNING("pta is empty\n", procName); + return 0; + } + + xmin = ymin = 1.0e20; + xmax = ymax = -1.0e20; + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + if (x < xmin) xmin = x; + if (y < ymin) ymin = y; + if (x > xmax) xmax = x; + if (y > ymax) ymax = y; + } + if (pxmin) *pxmin = xmin; + if (pymin) *pymin = ymin; + if (pxmax) *pxmax = xmax; + if (pymax) *pymax = ymax; + return 0; +} + + +/*! + * \brief ptaSelectByValue() + * + * \param[in] ptas + * \param[in] xth, yth threshold values + * \param[in] type L_SELECT_XVAL, L_SELECT_YVAL, + * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH + * \param[in] relation L_SELECT_IF_LT, L_SELECT_IF_GT, + * L_SELECT_IF_LTE, L_SELECT_IF_GTE + * \return ptad filtered set, or NULL on error + */ +PTA * +ptaSelectByValue(PTA *ptas, + l_float32 xth, + l_float32 yth, + l_int32 type, + l_int32 relation) +{ +l_int32 i, n; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaSelectByValue"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (ptaGetCount(ptas) == 0) { + L_WARNING("ptas is empty\n", procName); + return ptaCopy(ptas); + } + if (type != L_SELECT_XVAL && type != L_SELECT_YVAL && + type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) + return (PTA *)ERROR_PTR("invalid type", procName, NULL); + if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && + relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) + return (PTA *)ERROR_PTR("invalid relation", procName, NULL); + + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(ptas, i, &x, &y); + if (type == L_SELECT_XVAL) { + if ((relation == L_SELECT_IF_LT && x < xth) || + (relation == L_SELECT_IF_GT && x > xth) || + (relation == L_SELECT_IF_LTE && x <= xth) || + (relation == L_SELECT_IF_GTE && x >= xth)) + ptaAddPt(ptad, x, y); + } else if (type == L_SELECT_YVAL) { + if ((relation == L_SELECT_IF_LT && y < yth) || + (relation == L_SELECT_IF_GT && y > yth) || + (relation == L_SELECT_IF_LTE && y <= yth) || + (relation == L_SELECT_IF_GTE && y >= yth)) + ptaAddPt(ptad, x, y); + } else if (type == L_SELECT_IF_EITHER) { + if (((relation == L_SELECT_IF_LT) && (x < xth || y < yth)) || + ((relation == L_SELECT_IF_GT) && (x > xth || y > yth)) || + ((relation == L_SELECT_IF_LTE) && (x <= xth || y <= yth)) || + ((relation == L_SELECT_IF_GTE) && (x >= xth || y >= yth))) + ptaAddPt(ptad, x, y); + } else { /* L_SELECT_IF_BOTH */ + if (((relation == L_SELECT_IF_LT) && (x < xth && y < yth)) || + ((relation == L_SELECT_IF_GT) && (x > xth && y > yth)) || + ((relation == L_SELECT_IF_LTE) && (x <= xth && y <= yth)) || + ((relation == L_SELECT_IF_GTE) && (x >= xth && y >= yth))) + ptaAddPt(ptad, x, y); + } + } + + return ptad; +} + + +/*! + * \brief ptaCropToMask() + * + * \param[in] ptas input pta + * \param[in] pixm 1 bpp mask + * \return ptad with only pts under the mask fg, or NULL on error + */ +PTA * +ptaCropToMask(PTA *ptas, + PIX *pixm) +{ +l_int32 i, n, x, y; +l_uint32 val; +PTA *ptad; + + PROCNAME("ptaCropToMask"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 1) + return (PTA *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); + if (ptaGetCount(ptas) == 0) { + L_INFO("ptas is empty\n", procName); + return ptaCopy(ptas); + } + + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + pixGetPixel(pixm, x, y, &val); + if (val == 1) + ptaAddPt(ptad, x, y); + } + return ptad; +} + + +/*---------------------------------------------------------------------* + * Least Squares Fit * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaGetLinearLSF() + * + * \param[in] pta + * \param[out] pa [optional] slope a of least square fit: y = ax + b + * \param[out] pb [optional] intercept b of least square fit + * \param[out] pnafit [optional] numa of least square fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Either or both &a and &b must be input.  They determine the
+ *          type of line that is fit.
+ *      (2) If both &a and &b are defined, this returns a and b that minimize:
+ *
+ *              sum (yi - axi -b)^2
+ *               i
+ *
+ *          The method is simple: differentiate this expression w/rt a and b,
+ *          and solve the resulting two equations for a and b in terms of
+ *          various sums over the input data (xi, yi).
+ *      (3) We also allow two special cases, where either a = 0 or b = 0:
+ *           (a) If &a is given and &b = null, find the linear LSF that
+ *               goes through the origin (b = 0).
+ *           (b) If &b is given and &a = null, find the linear LSF with
+ *               zero slope (a = 0).
+ *      (4) If &nafit is defined, this returns an array of fitted values,
+ *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
+ *          Thus, just as you can plot the data in pta as nay vs. nax,
+ *          you can plot the linear least square fit as nafit vs. nax.
+ *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
+ * 
+ */ +l_ok +ptaGetLinearLSF(PTA *pta, + l_float32 *pa, + l_float32 *pb, + NUMA **pnafit) +{ +l_int32 n, i; +l_float32 a, b, factor, sx, sy, sxx, sxy, val; +l_float32 *xa, *ya; + + PROCNAME("ptaGetLinearLSF"); + + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pnafit) *pnafit = NULL; + if (!pa && !pb && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) < 2) + return ERROR_INT("less than 2 pts found", procName, 1); + + xa = pta->x; /* not a copy */ + ya = pta->y; /* not a copy */ + sx = sy = sxx = sxy = 0.; + if (pa && pb) { /* general line */ + for (i = 0; i < n; i++) { + sx += xa[i]; + sy += ya[i]; + sxx += xa[i] * xa[i]; + sxy += xa[i] * ya[i]; + } + factor = n * sxx - sx * sx; + if (factor == 0.0) + return ERROR_INT("no solution found", procName, 1); + factor = 1. / factor; + + a = factor * ((l_float32)n * sxy - sx * sy); + b = factor * (sxx * sy - sx * sxy); + } else if (pa) { /* b = 0; line through origin */ + for (i = 0; i < n; i++) { + sxx += xa[i] * xa[i]; + sxy += xa[i] * ya[i]; + } + if (sxx == 0.0) + return ERROR_INT("no solution found", procName, 1); + a = sxy / sxx; + b = 0.0; + } else { /* a = 0; horizontal line */ + for (i = 0; i < n; i++) + sy += ya[i]; + a = 0.0; + b = sy / (l_float32)n; + } + + if (pnafit) { + *pnafit = numaCreate(n); + for (i = 0; i < n; i++) { + val = a * xa[i] + b; + numaAddNumber(*pnafit, val); + } + } + + if (pa) *pa = a; + if (pb) *pb = b; + return 0; +} + + +/*! + * \brief ptaGetQuadraticLSF() + * + * \param[in] pta + * \param[out] pa [optional] coeff a of LSF: y = ax^2 + bx + c + * \param[out] pb [optional] coeff b of LSF: y = ax^2 + bx + c + * \param[out] pc [optional] coeff c of LSF: y = ax^2 + bx + c + * \param[out] pnafit [optional] numa of least square fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a quadratic least square fit to the set of points
+ *          in %pta.  That is, it finds coefficients a, b and c that minimize:
+ *
+ *              sum (yi - a*xi*xi -b*xi -c)^2
+ *               i
+ *
+ *          The method is simple: differentiate this expression w/rt
+ *          a, b and c, and solve the resulting three equations for these
+ *          coefficients in terms of various sums over the input data (xi, yi).
+ *          The three equations are in the form:
+ *             f[0][0]a + f[0][1]b + f[0][2]c = g[0]
+ *             f[1][0]a + f[1][1]b + f[1][2]c = g[1]
+ *             f[2][0]a + f[2][1]b + f[2][2]c = g[2]
+ *      (2) If &nafit is defined, this returns an array of fitted values,
+ *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
+ *          Thus, just as you can plot the data in pta as nay vs. nax,
+ *          you can plot the linear least square fit as nafit vs. nax.
+ *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
+ * 
+ */ +l_ok +ptaGetQuadraticLSF(PTA *pta, + l_float32 *pa, + l_float32 *pb, + l_float32 *pc, + NUMA **pnafit) +{ +l_int32 n, i, ret; +l_float32 x, y, sx, sy, sx2, sx3, sx4, sxy, sx2y; +l_float32 *xa, *ya; +l_float32 *f[3]; +l_float32 g[3]; + + PROCNAME("ptaGetQuadraticLSF"); + + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pc) *pc = 0.0; + if (pnafit) *pnafit = NULL; + if (!pa && !pb && !pc && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) < 3) + return ERROR_INT("less than 3 pts found", procName, 1); + + xa = pta->x; /* not a copy */ + ya = pta->y; /* not a copy */ + sx = sy = sx2 = sx3 = sx4 = sxy = sx2y = 0.; + for (i = 0; i < n; i++) { + x = xa[i]; + y = ya[i]; + sx += x; + sy += y; + sx2 += x * x; + sx3 += x * x * x; + sx4 += x * x * x * x; + sxy += x * y; + sx2y += x * x * y; + } + + for (i = 0; i < 3; i++) + f[i] = (l_float32 *)LEPT_CALLOC(3, sizeof(l_float32)); + f[0][0] = sx4; + f[0][1] = sx3; + f[0][2] = sx2; + f[1][0] = sx3; + f[1][1] = sx2; + f[1][2] = sx; + f[2][0] = sx2; + f[2][1] = sx; + f[2][2] = n; + g[0] = sx2y; + g[1] = sxy; + g[2] = sy; + + /* Solve for the unknowns, also putting f-inverse into f */ + ret = gaussjordan(f, g, 3); + for (i = 0; i < 3; i++) + LEPT_FREE(f[i]); + if (ret) + return ERROR_INT("quadratic solution failed", procName, 1); + + if (pa) *pa = g[0]; + if (pb) *pb = g[1]; + if (pc) *pc = g[2]; + if (pnafit) { + *pnafit = numaCreate(n); + for (i = 0; i < n; i++) { + x = xa[i]; + y = g[0] * x * x + g[1] * x + g[2]; + numaAddNumber(*pnafit, y); + } + } + return 0; +} + + +/*! + * \brief ptaGetCubicLSF() + * + * \param[in] pta + * \param[out] pa [optional] coeff a of LSF: y = ax^3 + bx^2 + cx + d + * \param[out] pb [optional] coeff b of LSF + * \param[out] pc [optional] coeff c of LSF + * \param[out] pd [optional] coeff d of LSF + * \param[out] pnafit [optional] numa of least square fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a cubic least square fit to the set of points
+ *          in %pta.  That is, it finds coefficients a, b, c and d
+ *          that minimize:
+ *
+ *              sum (yi - a*xi*xi*xi -b*xi*xi -c*xi - d)^2
+ *               i
+ *
+ *          Differentiate this expression w/rt a, b, c and d, and solve
+ *          the resulting four equations for these coefficients in
+ *          terms of various sums over the input data (xi, yi).
+ *          The four equations are in the form:
+ *             f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] = g[0]
+ *             f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] = g[1]
+ *             f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] = g[2]
+ *             f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] = g[3]
+ *      (2) If &nafit is defined, this returns an array of fitted values,
+ *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
+ *          Thus, just as you can plot the data in pta as nay vs. nax,
+ *          you can plot the linear least square fit as nafit vs. nax.
+ *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
+ * 
+ */ +l_ok +ptaGetCubicLSF(PTA *pta, + l_float32 *pa, + l_float32 *pb, + l_float32 *pc, + l_float32 *pd, + NUMA **pnafit) +{ +l_int32 n, i, ret; +l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sxy, sx2y, sx3y; +l_float32 *xa, *ya; +l_float32 *f[4]; +l_float32 g[4]; + + PROCNAME("ptaGetCubicLSF"); + + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pc) *pc = 0.0; + if (pd) *pd = 0.0; + if (pnafit) *pnafit = NULL; + if (!pa && !pb && !pc && !pd && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) < 4) + return ERROR_INT("less than 4 pts found", procName, 1); + + xa = pta->x; /* not a copy */ + ya = pta->y; /* not a copy */ + sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sxy = sx2y = sx3y = 0.; + for (i = 0; i < n; i++) { + x = xa[i]; + y = ya[i]; + sx += x; + sy += y; + sx2 += x * x; + sx3 += x * x * x; + sx4 += x * x * x * x; + sx5 += x * x * x * x * x; + sx6 += x * x * x * x * x * x; + sxy += x * y; + sx2y += x * x * y; + sx3y += x * x * x * y; + } + + for (i = 0; i < 4; i++) + f[i] = (l_float32 *)LEPT_CALLOC(4, sizeof(l_float32)); + f[0][0] = sx6; + f[0][1] = sx5; + f[0][2] = sx4; + f[0][3] = sx3; + f[1][0] = sx5; + f[1][1] = sx4; + f[1][2] = sx3; + f[1][3] = sx2; + f[2][0] = sx4; + f[2][1] = sx3; + f[2][2] = sx2; + f[2][3] = sx; + f[3][0] = sx3; + f[3][1] = sx2; + f[3][2] = sx; + f[3][3] = n; + g[0] = sx3y; + g[1] = sx2y; + g[2] = sxy; + g[3] = sy; + + /* Solve for the unknowns, also putting f-inverse into f */ + ret = gaussjordan(f, g, 4); + for (i = 0; i < 4; i++) + LEPT_FREE(f[i]); + if (ret) + return ERROR_INT("cubic solution failed", procName, 1); + + if (pa) *pa = g[0]; + if (pb) *pb = g[1]; + if (pc) *pc = g[2]; + if (pd) *pd = g[3]; + if (pnafit) { + *pnafit = numaCreate(n); + for (i = 0; i < n; i++) { + x = xa[i]; + y = g[0] * x * x * x + g[1] * x * x + g[2] * x + g[3]; + numaAddNumber(*pnafit, y); + } + } + return 0; +} + + +/*! + * \brief ptaGetQuarticLSF() + * + * \param[in] pta + * \param[out] pa [optional] coeff a of LSF: + * y = ax^4 + bx^3 + cx^2 + dx + e + * \param[out] pb [optional] coeff b of LSF + * \param[out] pc [optional] coeff c of LSF + * \param[out] pd [optional] coeff d of LSF + * \param[out] pe [optional] coeff e of LSF + * \param[out] pnafit [optional] numa of least square fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a quartic least square fit to the set of points
+ *          in %pta.  That is, it finds coefficients a, b, c, d and 3
+ *          that minimize:
+ *
+ *              sum (yi - a*xi*xi*xi*xi -b*xi*xi*xi -c*xi*xi - d*xi - e)^2
+ *               i
+ *
+ *          Differentiate this expression w/rt a, b, c, d and e, and solve
+ *          the resulting five equations for these coefficients in
+ *          terms of various sums over the input data (xi, yi).
+ *          The five equations are in the form:
+ *             f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] + f[0][4] = g[0]
+ *             f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] + f[1][4] = g[1]
+ *             f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] + f[2][4] = g[2]
+ *             f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] + f[3][4] = g[3]
+ *             f[4][0]a + f[4][1]b + f[4][2]c + f[4][3] + f[4][4] = g[4]
+ *      (2) If &nafit is defined, this returns an array of fitted values,
+ *          corresponding to the two implicit Numa arrays (nax and nay) in pta.
+ *          Thus, just as you can plot the data in pta as nay vs. nax,
+ *          you can plot the linear least square fit as nafit vs. nax.
+ *          Get the nax array using ptaGetArrays(pta, &nax, NULL);
+ * 
+ */ +l_ok +ptaGetQuarticLSF(PTA *pta, + l_float32 *pa, + l_float32 *pb, + l_float32 *pc, + l_float32 *pd, + l_float32 *pe, + NUMA **pnafit) +{ +l_int32 n, i, ret; +l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sx7, sx8; +l_float32 sxy, sx2y, sx3y, sx4y; +l_float32 *xa, *ya; +l_float32 *f[5]; +l_float32 g[5]; + + PROCNAME("ptaGetQuarticLSF"); + + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pc) *pc = 0.0; + if (pd) *pd = 0.0; + if (pe) *pe = 0.0; + if (pnafit) *pnafit = NULL; + if (!pa && !pb && !pc && !pd && !pe && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) < 5) + return ERROR_INT("less than 5 pts found", procName, 1); + + xa = pta->x; /* not a copy */ + ya = pta->y; /* not a copy */ + sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sx7 = sx8 = 0; + sxy = sx2y = sx3y = sx4y = 0.; + for (i = 0; i < n; i++) { + x = xa[i]; + y = ya[i]; + sx += x; + sy += y; + sx2 += x * x; + sx3 += x * x * x; + sx4 += x * x * x * x; + sx5 += x * x * x * x * x; + sx6 += x * x * x * x * x * x; + sx7 += x * x * x * x * x * x * x; + sx8 += x * x * x * x * x * x * x * x; + sxy += x * y; + sx2y += x * x * y; + sx3y += x * x * x * y; + sx4y += x * x * x * x * y; + } + + for (i = 0; i < 5; i++) + f[i] = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); + f[0][0] = sx8; + f[0][1] = sx7; + f[0][2] = sx6; + f[0][3] = sx5; + f[0][4] = sx4; + f[1][0] = sx7; + f[1][1] = sx6; + f[1][2] = sx5; + f[1][3] = sx4; + f[1][4] = sx3; + f[2][0] = sx6; + f[2][1] = sx5; + f[2][2] = sx4; + f[2][3] = sx3; + f[2][4] = sx2; + f[3][0] = sx5; + f[3][1] = sx4; + f[3][2] = sx3; + f[3][3] = sx2; + f[3][4] = sx; + f[4][0] = sx4; + f[4][1] = sx3; + f[4][2] = sx2; + f[4][3] = sx; + f[4][4] = n; + g[0] = sx4y; + g[1] = sx3y; + g[2] = sx2y; + g[3] = sxy; + g[4] = sy; + + /* Solve for the unknowns, also putting f-inverse into f */ + ret = gaussjordan(f, g, 5); + for (i = 0; i < 5; i++) + LEPT_FREE(f[i]); + if (ret) + return ERROR_INT("quartic solution failed", procName, 1); + + if (pa) *pa = g[0]; + if (pb) *pb = g[1]; + if (pc) *pc = g[2]; + if (pd) *pd = g[3]; + if (pe) *pe = g[4]; + if (pnafit) { + *pnafit = numaCreate(n); + for (i = 0; i < n; i++) { + x = xa[i]; + y = g[0] * x * x * x * x + g[1] * x * x * x + g[2] * x * x + + g[3] * x + g[4]; + numaAddNumber(*pnafit, y); + } + } + return 0; +} + + +/*! + * \brief ptaNoisyLinearLSF() + * + * \param[in] pta + * \param[in] factor reject outliers with error greater than this + * number of medians; typically ~ 3 + * \param[out] pptad [optional] with outliers removed + * \param[out] pa [optional] slope a of least square fit: y = ax + b + * \param[out] pb [optional] intercept b of least square fit + * \param[out] pmederr [optional] median error + * \param[out] pnafit [optional] numa of least square fit to ptad + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a linear least square fit to the set of points
+ *          in %pta.  It then evaluates the errors and removes points
+ *          whose error is >= factor * median_error.  It then re-runs
+ *          the linear LSF on the resulting points.
+ *      (2) Either or both &a and &b must be input.  They determine the
+ *          type of line that is fit.
+ *      (3) The median error can give an indication of how good the fit
+ *          is likely to be.
+ * 
+ */ +l_ok +ptaNoisyLinearLSF(PTA *pta, + l_float32 factor, + PTA **pptad, + l_float32 *pa, + l_float32 *pb, + l_float32 *pmederr, + NUMA **pnafit) +{ +l_int32 n, i, ret; +l_float32 x, y, yf, val, mederr; +NUMA *nafit, *naerror; +PTA *ptad; + + PROCNAME("ptaNoisyLinearLSF"); + + if (pptad) *pptad = NULL; + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pmederr) *pmederr = 0.0; + if (pnafit) *pnafit = NULL; + if (!pptad && !pa && !pb && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (factor <= 0.0) + return ERROR_INT("factor must be > 0.0", procName, 1); + if ((n = ptaGetCount(pta)) < 3) + return ERROR_INT("less than 2 pts found", procName, 1); + + if (ptaGetLinearLSF(pta, pa, pb, &nafit) != 0) + return ERROR_INT("error in linear LSF", procName, 1); + + /* Get the median error */ + naerror = numaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + numaGetFValue(nafit, i, &yf); + numaAddNumber(naerror, L_ABS(y - yf)); + } + numaGetMedian(naerror, &mederr); + if (pmederr) *pmederr = mederr; + numaDestroy(&nafit); + + /* Remove outliers */ + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + numaGetFValue(naerror, i, &val); + if (val <= factor * mederr) /* <= in case mederr = 0 */ + ptaAddPt(ptad, x, y); + } + numaDestroy(&naerror); + + /* Do LSF again */ + ret = ptaGetLinearLSF(ptad, pa, pb, pnafit); + if (pptad) + *pptad = ptad; + else + ptaDestroy(&ptad); + + return ret; +} + + +/*! + * \brief ptaNoisyQuadraticLSF() + * + * \param[in] pta + * \param[in] factor reject outliers with error greater than this + * number of medians; typically ~ 3 + * \param[out] pptad [optional] with outliers removed + * \param[out] pa [optional] coeff a of LSF: y = ax^2 + bx + c + * \param[out] pb [optional] coeff b of LSF: y = ax^2 + bx + c + * \param[out] pc [optional] coeff c of LSF: y = ax^2 + bx + c + * \param[out] pmederr [optional] median error + * \param[out] pnafit [optional] numa of least square fit to ptad + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a quadratic least square fit to the set of points
+ *          in %pta.  It then evaluates the errors and removes points
+ *          whose error is >= factor * median_error.  It then re-runs
+ *          a quadratic LSF on the resulting points.
+ * 
+ */ +l_ok +ptaNoisyQuadraticLSF(PTA *pta, + l_float32 factor, + PTA **pptad, + l_float32 *pa, + l_float32 *pb, + l_float32 *pc, + l_float32 *pmederr, + NUMA **pnafit) +{ +l_int32 n, i, ret; +l_float32 x, y, yf, val, mederr; +NUMA *nafit, *naerror; +PTA *ptad; + + PROCNAME("ptaNoisyQuadraticLSF"); + + if (pptad) *pptad = NULL; + if (pa) *pa = 0.0; + if (pb) *pb = 0.0; + if (pc) *pc = 0.0; + if (pmederr) *pmederr = 0.0; + if (pnafit) *pnafit = NULL; + if (!pptad && !pa && !pb && !pc && !pnafit) + return ERROR_INT("no output requested", procName, 1); + if (factor <= 0.0) + return ERROR_INT("factor must be > 0.0", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if ((n = ptaGetCount(pta)) < 3) + return ERROR_INT("less than 3 pts found", procName, 1); + + if (ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit) != 0) + return ERROR_INT("error in quadratic LSF", procName, 1); + + /* Get the median error */ + naerror = numaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + numaGetFValue(nafit, i, &yf); + numaAddNumber(naerror, L_ABS(y - yf)); + } + numaGetMedian(naerror, &mederr); + if (pmederr) *pmederr = mederr; + numaDestroy(&nafit); + + /* Remove outliers */ + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &x, &y); + numaGetFValue(naerror, i, &val); + if (val <= factor * mederr) /* <= in case mederr = 0 */ + ptaAddPt(ptad, x, y); + } + numaDestroy(&naerror); + n = ptaGetCount(ptad); + if ((n = ptaGetCount(ptad)) < 3) { + ptaDestroy(&ptad); + return ERROR_INT("less than 3 pts found", procName, 1); + } + + /* Do LSF again */ + ret = ptaGetQuadraticLSF(ptad, pa, pb, pc, pnafit); + if (pptad) + *pptad = ptad; + else + ptaDestroy(&ptad); + + return ret; +} + + +/*! + * \brief applyLinearFit() + * + * \param[in] a, b linear fit coefficients + * \param[in] x + * \param[out] py y = a * x + b + * \return 0 if OK, 1 on error + */ +l_ok +applyLinearFit(l_float32 a, + l_float32 b, + l_float32 x, + l_float32 *py) +{ + PROCNAME("applyLinearFit"); + + if (!py) + return ERROR_INT("&y not defined", procName, 1); + + *py = a * x + b; + return 0; +} + + +/*! + * \brief applyQuadraticFit() + * + * \param[in] a, b, c quadratic fit coefficients + * \param[in] x + * \param[out] py y = a * x^2 + b * x + c + * \return 0 if OK, 1 on error + */ +l_ok +applyQuadraticFit(l_float32 a, + l_float32 b, + l_float32 c, + l_float32 x, + l_float32 *py) +{ + PROCNAME("applyQuadraticFit"); + + if (!py) + return ERROR_INT("&y not defined", procName, 1); + + *py = a * x * x + b * x + c; + return 0; +} + + +/*! + * \brief applyCubicFit() + * + * \param[in] a, b, c, d cubic fit coefficients + * \param[in] x + * \param[out] py y = a * x^3 + b * x^2 + c * x + d + * \return 0 if OK, 1 on error + */ +l_ok +applyCubicFit(l_float32 a, + l_float32 b, + l_float32 c, + l_float32 d, + l_float32 x, + l_float32 *py) +{ + PROCNAME("applyCubicFit"); + + if (!py) + return ERROR_INT("&y not defined", procName, 1); + + *py = a * x * x * x + b * x * x + c * x + d; + return 0; +} + + +/*! + * \brief applyQuarticFit() + * + * \param[in] a, b, c, d, e quartic fit coefficients + * \param[in] x + * \param[out] py y = a * x^4 + b * x^3 + c * x^2 + d * x + e + * \return 0 if OK, 1 on error + */ +l_ok +applyQuarticFit(l_float32 a, + l_float32 b, + l_float32 c, + l_float32 d, + l_float32 e, + l_float32 x, + l_float32 *py) +{ +l_float32 x2; + + PROCNAME("applyQuarticFit"); + + if (!py) + return ERROR_INT("&y not defined", procName, 1); + + x2 = x * x; + *py = a * x2 * x2 + b * x2 * x + c * x2 + d * x + e; + return 0; +} + + +/*---------------------------------------------------------------------* + * Interconversions with Pix * + *---------------------------------------------------------------------*/ +/*! + * \brief pixPlotAlongPta() + * + * \param[in] pixs any depth + * \param[in] pta set of points on which to plot + * \param[in] outformat GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_LATEX + * \param[in] title [optional] for plot; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a debugging function.
+ *      (2) Removes existing colormaps and clips the pta to the input %pixs.
+ *      (3) If the image is RGB, three separate plots are generated.
+ * 
+ */ +l_ok +pixPlotAlongPta(PIX *pixs, + PTA *pta, + l_int32 outformat, + const char *title) +{ +char buffer[128]; +char *rtitle, *gtitle, *btitle; +static l_int32 count = 0; /* require separate temp files for each call */ +l_int32 i, x, y, d, w, h, npts, rval, gval, bval; +l_uint32 val; +NUMA *na, *nar, *nag, *nab; +PIX *pixt; + + PROCNAME("pixPlotAlongPta"); + + lept_mkdir("lept/plot"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (outformat != GPLOT_PNG && outformat != GPLOT_PS && + outformat != GPLOT_EPS && outformat != GPLOT_LATEX) { + L_WARNING("outformat invalid; using GPLOT_PNG\n", procName); + outformat = GPLOT_PNG; + } + + pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt); + w = pixGetWidth(pixt); + h = pixGetHeight(pixt); + npts = ptaGetCount(pta); + if (d == 32) { + nar = numaCreate(npts); + nag = numaCreate(npts); + nab = numaCreate(npts); + for (i = 0; i < npts; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w) + continue; + if (y < 0 || y >= h) + continue; + pixGetPixel(pixt, x, y, &val); + rval = GET_DATA_BYTE(&val, COLOR_RED); + gval = GET_DATA_BYTE(&val, COLOR_GREEN); + bval = GET_DATA_BYTE(&val, COLOR_BLUE); + numaAddNumber(nar, rval); + numaAddNumber(nag, gval); + numaAddNumber(nab, bval); + } + + snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); + rtitle = stringJoin("Red: ", title); + gplotSimple1(nar, outformat, buffer, rtitle); + snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); + gtitle = stringJoin("Green: ", title); + gplotSimple1(nag, outformat, buffer, gtitle); + snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); + btitle = stringJoin("Blue: ", title); + gplotSimple1(nab, outformat, buffer, btitle); + numaDestroy(&nar); + numaDestroy(&nag); + numaDestroy(&nab); + LEPT_FREE(rtitle); + LEPT_FREE(gtitle); + LEPT_FREE(btitle); + } else { + na = numaCreate(npts); + for (i = 0; i < npts; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w) + continue; + if (y < 0 || y >= h) + continue; + pixGetPixel(pixt, x, y, &val); + numaAddNumber(na, (l_float32)val); + } + + snprintf(buffer, sizeof(buffer), "/tmp/lept/plot/%03d", count++); + gplotSimple1(na, outformat, buffer, title); + numaDestroy(&na); + } + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief ptaGetPixelsFromPix() + * + * \param[in] pixs 1 bpp + * \param[in] box [optional] can be null + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a pta of fg pixels in the pix, within the box.
+ *          If box == NULL, it uses the entire pix.
+ * 
+ */ +PTA * +ptaGetPixelsFromPix(PIX *pixs, + BOX *box) +{ +l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh; +l_uint32 *data, *line; +PTA *pta; + + PROCNAME("ptaGetPixelsFromPix"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + xstart = ystart = 0; + xend = w - 1; + yend = h - 1; + if (box) { + boxGetGeometry(box, &xstart, &ystart, &bw, &bh); + xend = xstart + bw - 1; + yend = ystart + bh - 1; + } + + if ((pta = ptaCreate(0)) == NULL) + return (PTA *)ERROR_PTR("pta not made", procName, NULL); + for (i = ystart; i <= yend; i++) { + line = data + i * wpl; + for (j = xstart; j <= xend; j++) { + if (GET_DATA_BIT(line, j)) + ptaAddPt(pta, j, i); + } + } + + return pta; +} + + +/*! + * \brief pixGenerateFromPta() + * + * \param[in] pta + * \param[in] w, h of pix + * \return pix 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) Points are rounded to nearest ints.
+ *      (2) Any points outside (w,h) are silently discarded.
+ *      (3) Output 1 bpp pix has values 1 for each point in the pta.
+ * 
+ */ +PIX * +pixGenerateFromPta(PTA *pta, + l_int32 w, + l_int32 h) +{ +l_int32 n, i, x, y; +PIX *pix; + + PROCNAME("pixGenerateFromPta"); + + if (!pta) + return (PIX *)ERROR_PTR("pta not defined", procName, NULL); + + if ((pix = pixCreate(w, h, 1)) == NULL) + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w || y < 0 || y >= h) + continue; + pixSetPixel(pix, x, y, 1); + } + + return pix; +} + + +/*! + * \brief ptaGetBoundaryPixels() + * + * \param[in] pixs 1 bpp + * \param[in] type L_BOUNDARY_FG, L_BOUNDARY_BG + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a pta of either fg or bg boundary pixels.
+ *      (2) See also pixGeneratePtaBoundary() for rendering of
+ *          fg boundary pixels.
+ * 
+ */ +PTA * +ptaGetBoundaryPixels(PIX *pixs, + l_int32 type) +{ +PIX *pixt; +PTA *pta; + + PROCNAME("ptaGetBoundaryPixels"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) + return (PTA *)ERROR_PTR("invalid type", procName, NULL); + + if (type == L_BOUNDARY_FG) + pixt = pixMorphSequence(pixs, "e3.3", 0); + else + pixt = pixMorphSequence(pixs, "d3.3", 0); + pixXor(pixt, pixt, pixs); + pta = ptaGetPixelsFromPix(pixt, NULL); + + pixDestroy(&pixt); + return pta; +} + + +/*! + * \brief ptaaGetBoundaryPixels() + * + * \param[in] pixs 1 bpp + * \param[in] type L_BOUNDARY_FG, L_BOUNDARY_BG + * \param[in] connectivity 4 or 8 + * \param[out] pboxa [optional] bounding boxes of the c.c. + * \param[out] ppixa [optional] pixa of the c.c. + * \return ptaa, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a ptaa of either fg or bg boundary pixels,
+ *          where each pta has the boundary pixels for a connected
+ *          component.
+ *      (2) We can't simply find all the boundary pixels and then select
+ *          those within the bounding box of each component, because
+ *          bounding boxes can overlap.  It is necessary to extract and
+ *          dilate or erode each component separately.  Note also that
+ *          special handling is required for bg pixels when the
+ *          component touches the pix boundary.
+ * 
+ */ +PTAA * +ptaaGetBoundaryPixels(PIX *pixs, + l_int32 type, + l_int32 connectivity, + BOXA **pboxa, + PIXA **ppixa) +{ +l_int32 i, n, w, h, x, y, bw, bh, left, right, top, bot; +BOXA *boxa; +PIX *pixt1, *pixt2; +PIXA *pixa; +PTA *pta1, *pta2; +PTAA *ptaa; + + PROCNAME("ptaaGetBoundaryPixels"); + + if (pboxa) *pboxa = NULL; + if (ppixa) *ppixa = NULL; + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) + return (PTAA *)ERROR_PTR("invalid type", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PTAA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + boxa = pixConnComp(pixs, &pixa, connectivity); + n = boxaGetCount(boxa); + ptaa = ptaaCreate(0); + for (i = 0; i < n; i++) { + pixt1 = pixaGetPix(pixa, i, L_CLONE); + boxaGetBoxGeometry(boxa, i, &x, &y, &bw, &bh); + left = right = top = bot = 0; + if (type == L_BOUNDARY_BG) { + if (x > 0) left = 1; + if (y > 0) top = 1; + if (x + bw < w) right = 1; + if (y + bh < h) bot = 1; + pixt2 = pixAddBorderGeneral(pixt1, left, right, top, bot, 0); + } else { + pixt2 = pixClone(pixt1); + } + pta1 = ptaGetBoundaryPixels(pixt2, type); + pta2 = ptaTransform(pta1, x - left, y - top, 1.0, 1.0); + ptaaAddPta(ptaa, pta2, L_INSERT); + ptaDestroy(&pta1); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + } + + if (pboxa) + *pboxa = boxa; + else + boxaDestroy(&boxa); + if (ppixa) + *ppixa = pixa; + else + pixaDestroy(&pixa); + return ptaa; +} + + +/*! + * \brief ptaaIndexLabeledPixels() + * + * \param[in] pixs 32 bpp, of indices of c.c. + * \param[out] pncc [optional] number of connected components + * \return ptaa, or NULL on error + * + *
+ * Notes:
+ *      (1) The pixel values in %pixs are the index of the connected component
+ *          to which the pixel belongs; %pixs is typically generated from
+ *          a 1 bpp pix by pixConnCompTransform().  Background pixels in
+ *          the generating 1 bpp pix are represented in %pixs by 0.
+ *          We do not check that the pixel values are correctly labelled.
+ *      (2) Each pta in the returned ptaa gives the pixel locations
+ *          correspnding to a connected component, with the label of each
+ *          given by the index of the pta into the ptaa.
+ *      (3) Initialize with the first pta in ptaa being empty and
+ *          representing the background value (index 0) in the pix.
+ * 
+ */ +PTAA * +ptaaIndexLabeledPixels(PIX *pixs, + l_int32 *pncc) +{ +l_int32 wpl, index, i, j, w, h; +l_uint32 maxval; +l_uint32 *data, *line; +PTA *pta; +PTAA *ptaa; + + PROCNAME("ptaaIndexLabeledPixels"); + + if (pncc) *pncc = 0; + if (!pixs || (pixGetDepth(pixs) != 32)) + return (PTAA *)ERROR_PTR("pixs undef or not 32 bpp", procName, NULL); + + /* The number of c.c. is the maximum pixel value. Use this to + * initialize ptaa with sufficient pta arrays */ + pixGetMaxValueInRect(pixs, NULL, &maxval, NULL, NULL); + if (pncc) *pncc = maxval; + pta = ptaCreate(1); + ptaa = ptaaCreate(maxval + 1); + ptaaInitFull(ptaa, pta); + ptaDestroy(&pta); + + /* Sweep over %pixs, saving the pixel coordinates of each pixel + * with nonzero value in the appropriate pta, indexed by that value. */ + pixGetDimensions(pixs, &w, &h, NULL); + data = pixGetData(pixs); + wpl = pixGetWpl(pixs); + for (i = 0; i < h; i++) { + line = data + wpl * i; + for (j = 0; j < w; j++) { + index = line[j]; + if (index > 0) + ptaaAddPt(ptaa, index, j, i); + } + } + + return ptaa; +} + + +/*! + * \brief ptaGetNeighborPixLocs() + * + * \param[in] pixs any depth + * \param[in] x, y pixel from which we search for nearest neighbors + * \param[in] conn 4 or 8 connectivity + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) Generates a pta of all valid neighbor pixel locations,
+ *          or NULL on error.
+ * 
+ */ +PTA * +ptaGetNeighborPixLocs(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 conn) +{ +l_int32 w, h; +PTA *pta; + + PROCNAME("ptaGetNeighborPixLocs"); + + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (x < 0 || x >= w || y < 0 || y >= h) + return (PTA *)ERROR_PTR("(x,y) not in pixs", procName, NULL); + if (conn != 4 && conn != 8) + return (PTA *)ERROR_PTR("conn not 4 or 8", procName, NULL); + + pta = ptaCreate(conn); + if (x > 0) + ptaAddPt(pta, x - 1, y); + if (x < w - 1) + ptaAddPt(pta, x + 1, y); + if (y > 0) + ptaAddPt(pta, x, y - 1); + if (y < h - 1) + ptaAddPt(pta, x, y + 1); + if (conn == 8) { + if (x > 0) { + if (y > 0) + ptaAddPt(pta, x - 1, y - 1); + if (y < h - 1) + ptaAddPt(pta, x - 1, y + 1); + } + if (x < w - 1) { + if (y > 0) + ptaAddPt(pta, x + 1, y - 1); + if (y < h - 1) + ptaAddPt(pta, x + 1, y + 1); + } + } + + return pta; +} + + +/*---------------------------------------------------------------------* + * Interconversion with Numa * + *---------------------------------------------------------------------*/ +/*! + * \brief numaConvertToPta1() + * + * \param[in] na numa with implicit y(x) + * \return pta if OK; null on error + */ +PTA * +numaConvertToPta1(NUMA *na) +{ +l_int32 i, n; +l_float32 startx, delx, val; +PTA *pta; + + PROCNAME("numaConvertToPta1"); + + if (!na) + return (PTA *)ERROR_PTR("na not defined", procName, NULL); + + n = numaGetCount(na); + pta = ptaCreate(n); + numaGetParameters(na, &startx, &delx); + for (i = 0; i < n; i++) { + numaGetFValue(na, i, &val); + ptaAddPt(pta, startx + i * delx, val); + } + return pta; +} + + +/*! + * \brief numaConvertToPta2() + * + * \param[in] nax + * \param[in] nay + * \return pta if OK; null on error + */ +PTA * +numaConvertToPta2(NUMA *nax, + NUMA *nay) +{ +l_int32 i, n, nx, ny; +l_float32 valx, valy; +PTA *pta; + + PROCNAME("numaConvertToPta2"); + + if (!nax || !nay) + return (PTA *)ERROR_PTR("nax and nay not both defined", procName, NULL); + + nx = numaGetCount(nax); + ny = numaGetCount(nay); + n = L_MIN(nx, ny); + if (nx != ny) + L_WARNING("nx = %d does not equal ny = %d\n", procName, nx, ny); + pta = ptaCreate(n); + for (i = 0; i < n; i++) { + numaGetFValue(nax, i, &valx); + numaGetFValue(nay, i, &valy); + ptaAddPt(pta, valx, valy); + } + return pta; +} + + +/*! + * \brief ptaConvertToNuma() + * + * \param[in] pta + * \param[out] pnax addr of nax + * \param[out] pnay addr of nay + * \return 0 if OK, 1 on error + */ +l_ok +ptaConvertToNuma(PTA *pta, + NUMA **pnax, + NUMA **pnay) +{ +l_int32 i, n; +l_float32 valx, valy; + + PROCNAME("ptaConvertToNuma"); + + if (pnax) *pnax = NULL; + if (pnay) *pnay = NULL; + if (!pnax || !pnay) + return ERROR_INT("&nax and &nay not both defined", procName, 1); + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + + n = ptaGetCount(pta); + *pnax = numaCreate(n); + *pnay = numaCreate(n); + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &valx, &valy); + numaAddNumber(*pnax, valx); + numaAddNumber(*pnay, valy); + } + return 0; +} + + +/*---------------------------------------------------------------------* + * Display Pta and Ptaa * + *---------------------------------------------------------------------*/ +/*! + * \brief pixDisplayPta() + * + * \param[in] pixd can be same as pixs or NULL; 32 bpp if in-place + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] pta of path to be plotted + * \return pixd 32 bpp RGB version of pixs, with path in green. + * + *
+ * Notes:
+ *      (1) To write on an existing pixs, pixs must be 32 bpp and
+ *          call with pixd == pixs:
+ *             pixDisplayPta(pixs, pixs, pta);
+ *          To write to a new pix, use pixd == NULL and call:
+ *             pixd = pixDisplayPta(NULL, pixs, pta);
+ *      (2) On error, returns pixd to avoid losing pixs if called as
+ *             pixs = pixDisplayPta(pixs, pixs, pta);
+ * 
+ */ +PIX * +pixDisplayPta(PIX *pixd, + PIX *pixs, + PTA *pta) +{ +l_int32 i, n, w, h, x, y; +l_uint32 rpixel, gpixel, bpixel; + + PROCNAME("pixDisplayPta"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!pta) + return (PIX *)ERROR_PTR("pta not defined", procName, pixd); + if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) + return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); + + if (!pixd) + pixd = pixConvertTo32(pixs); + pixGetDimensions(pixd, &w, &h, NULL); + composeRGBPixel(255, 0, 0, &rpixel); /* start point */ + composeRGBPixel(0, 255, 0, &gpixel); + composeRGBPixel(0, 0, 255, &bpixel); /* end point */ + + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + if (x < 0 || x >= w || y < 0 || y >= h) + continue; + if (i == 0) + pixSetPixel(pixd, x, y, rpixel); + else if (i < n - 1) + pixSetPixel(pixd, x, y, gpixel); + else + pixSetPixel(pixd, x, y, bpixel); + } + + return pixd; +} + + +/*! + * \brief pixDisplayPtaaPattern() + * + * \param[in] pixd 32 bpp + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp; 32 bpp if in place + * \param[in] ptaa giving locations at which the pattern is displayed + * \param[in] pixp 1 bpp pattern to be placed such that its reference + * point co-locates with each point in pta + * \param[in] cx, cy reference point in pattern + * \return pixd 32 bpp RGB version of pixs. + * + *
+ * Notes:
+ *      (1) To write on an existing pixs, pixs must be 32 bpp and
+ *          call with pixd == pixs:
+ *             pixDisplayPtaPattern(pixs, pixs, pta, ...);
+ *          To write to a new pix, use pixd == NULL and call:
+ *             pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...);
+ *      (2) Puts a random color on each pattern associated with a pta.
+ *      (3) On error, returns pixd to avoid losing pixs if called as
+ *             pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...);
+ *      (4) A typical pattern to be used is a circle, generated with
+ *             generatePtaFilledCircle()
+ * 
+ */ +PIX * +pixDisplayPtaaPattern(PIX *pixd, + PIX *pixs, + PTAA *ptaa, + PIX *pixp, + l_int32 cx, + l_int32 cy) +{ +l_int32 i, n; +l_uint32 color; +PIXCMAP *cmap; +PTA *pta; + + PROCNAME("pixDisplayPtaaPattern"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!ptaa) + return (PIX *)ERROR_PTR("ptaa not defined", procName, pixd); + if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) + return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); + if (!pixp) + return (PIX *)ERROR_PTR("pixp not defined", procName, pixd); + + if (!pixd) + pixd = pixConvertTo32(pixs); + + /* Use 256 random colors */ + cmap = pixcmapCreateRandom(8, 0, 0); + n = ptaaGetCount(ptaa); + for (i = 0; i < n; i++) { + pixcmapGetColor32(cmap, i % 256, &color); + pta = ptaaGetPta(ptaa, i, L_CLONE); + pixDisplayPtaPattern(pixd, pixd, pta, pixp, cx, cy, color); + ptaDestroy(&pta); + } + + pixcmapDestroy(&cmap); + return pixd; +} + + +/*! + * \brief pixDisplayPtaPattern() + * + * \param[in] pixd can be same as pixs or NULL; 32 bpp if in-place + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] pta giving locations at which the pattern is displayed + * \param[in] pixp 1 bpp pattern to be placed such that its reference + * point co-locates with each point in pta + * \param[in] cx, cy reference point in pattern + * \param[in] color in 0xrrggbb00 format + * \return pixd 32 bpp RGB version of pixs. + * + *
+ * Notes:
+ *      (1) To write on an existing pixs, pixs must be 32 bpp and
+ *          call with pixd == pixs:
+ *             pixDisplayPtaPattern(pixs, pixs, pta, ...);
+ *          To write to a new pix, use pixd == NULL and call:
+ *             pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...);
+ *      (2) On error, returns pixd to avoid losing pixs if called as
+ *             pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...);
+ *      (3) A typical pattern to be used is a circle, generated with
+ *             generatePtaFilledCircle()
+ * 
+ */ +PIX * +pixDisplayPtaPattern(PIX *pixd, + PIX *pixs, + PTA *pta, + PIX *pixp, + l_int32 cx, + l_int32 cy, + l_uint32 color) +{ +l_int32 i, n, w, h, x, y; +PTA *ptat; + + PROCNAME("pixDisplayPtaPattern"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (!pta) + return (PIX *)ERROR_PTR("pta not defined", procName, pixd); + if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) + return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); + if (!pixp) + return (PIX *)ERROR_PTR("pixp not defined", procName, pixd); + + if (!pixd) + pixd = pixConvertTo32(pixs); + pixGetDimensions(pixs, &w, &h, NULL); + ptat = ptaReplicatePattern(pta, pixp, NULL, cx, cy, w, h); + + n = ptaGetCount(ptat); + for (i = 0; i < n; i++) { + ptaGetIPt(ptat, i, &x, &y); + if (x < 0 || x >= w || y < 0 || y >= h) + continue; + pixSetPixel(pixd, x, y, color); + } + + ptaDestroy(&ptat); + return pixd; +} + + +/*! + * \brief ptaReplicatePattern() + * + * \param[in] ptas "sparse" input pta + * \param[in] pixp [optional] 1 bpp pattern, to be replicated + * in output pta + * \param[in] ptap [optional] set of pts, to be replicated in output pta + * \param[in] cx, cy reference point in pattern + * \param[in] w, h clipping sizes for output pta + * \return ptad with all points of replicated pattern, or NULL on error + * + *
+ * Notes:
+ *      (1) You can use either the image %pixp or the set of pts %ptap.
+ *      (2) The pattern is placed with its reference point at each point
+ *          in ptas, and all the fg pixels are colleced into ptad.
+ *          For %pixp, this is equivalent to blitting pixp at each point
+ *          in ptas, and then converting the resulting pix to a pta.
+ * 
+ */ +PTA * +ptaReplicatePattern(PTA *ptas, + PIX *pixp, + PTA *ptap, + l_int32 cx, + l_int32 cy, + l_int32 w, + l_int32 h) +{ +l_int32 i, j, n, np, x, y, xp, yp, xf, yf; +PTA *ptat, *ptad; + + PROCNAME("ptaReplicatePattern"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (!pixp && !ptap) + return (PTA *)ERROR_PTR("no pattern is defined", procName, NULL); + if (pixp && ptap) + L_WARNING("pixp and ptap defined; using ptap\n", procName); + + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + if (ptap) + ptat = ptaClone(ptap); + else + ptat = ptaGetPixelsFromPix(pixp, NULL); + np = ptaGetCount(ptat); + for (i = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + for (j = 0; j < np; j++) { + ptaGetIPt(ptat, j, &xp, &yp); + xf = x - cx + xp; + yf = y - cy + yp; + if (xf >= 0 && xf < w && yf >= 0 && yf < h) + ptaAddPt(ptad, xf, yf); + } + } + + ptaDestroy(&ptat); + return ptad; +} + + +/*! + * \brief pixDisplayPtaa() + * + * \param[in] pixs 1, 2, 4, 8, 16 or 32 bpp + * \param[in] ptaa array of paths to be plotted + * \return pixd 32 bpp RGB version of pixs, with paths plotted + * in different colors, or NULL on error + */ +PIX * +pixDisplayPtaa(PIX *pixs, + PTAA *ptaa) +{ +l_int32 i, j, w, h, npta, npt, x, y, rv, gv, bv; +l_uint32 *pixela; +NUMA *na1, *na2, *na3; +PIX *pixd; +PTA *pta; + + PROCNAME("pixDisplayPtaa"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (!ptaa) + return (PIX *)ERROR_PTR("ptaa not defined", procName, NULL); + npta = ptaaGetCount(ptaa); + if (npta == 0) + return (PIX *)ERROR_PTR("no pta", procName, NULL); + + if ((pixd = pixConvertTo32(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixGetDimensions(pixd, &w, &h, NULL); + + /* Make a colormap for the paths */ + if ((pixela = (l_uint32 *)LEPT_CALLOC(npta, sizeof(l_uint32))) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("calloc fail for pixela", procName, NULL); + } + na1 = numaPseudorandomSequence(256, 14657); + na2 = numaPseudorandomSequence(256, 34631); + na3 = numaPseudorandomSequence(256, 54617); + for (i = 0; i < npta; i++) { + numaGetIValue(na1, i % 256, &rv); + numaGetIValue(na2, i % 256, &gv); + numaGetIValue(na3, i % 256, &bv); + composeRGBPixel(rv, gv, bv, &pixela[i]); + } + numaDestroy(&na1); + numaDestroy(&na2); + numaDestroy(&na3); + + for (i = 0; i < npta; i++) { + pta = ptaaGetPta(ptaa, i, L_CLONE); + npt = ptaGetCount(pta); + for (j = 0; j < npt; j++) { + ptaGetIPt(pta, j, &x, &y); + if (x < 0 || x >= w || y < 0 || y >= h) + continue; + pixSetPixel(pixd, x, y, pixela[i]); + } + ptaDestroy(&pta); + } + + LEPT_FREE(pixela); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/ptafunc2.c b/3rdparty/hgOCR/leptonica/ptafunc2.c new file mode 100644 index 00000000..77122410 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ptafunc2.c @@ -0,0 +1,756 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file ptafunc2.c + *
+ *
+ *      --------------------------------------
+ *      This file has these Pta utilities:
+ *         - sorting
+ *         - ordered set operations
+ *         - hash map operations
+ *      --------------------------------------
+ *
+ *      Sorting
+ *           PTA        *ptaSort()
+ *           l_int32     ptaGetSortIndex()
+ *           PTA        *ptaSortByIndex()
+ *           PTAA       *ptaaSortByIndex()
+ *           l_int32     ptaGetRankValue()
+ *
+ *      Set operations using aset (rbtree)
+ *           PTA        *ptaUnionByAset()
+ *           PTA        *ptaRemoveDupsByAset()
+ *           PTA        *ptaIntersectionByAset()
+ *           L_ASET     *l_asetCreateFromPta()
+ *
+ *      Set operations using hashing (dnahash)
+ *           PTA        *ptaUnionByHash()
+ *           l_int32     ptaRemoveDupsByHash()
+ *           PTA        *ptaIntersectionByHash();
+ *           l_int32     ptaFindPtByHash()
+ *           L_DNAHASH  *l_dnaHashCreateFromPta()
+ *
+ *
+ * We have two implementations of set operations on an array of points:
+ *
+ *   (1) Using an underlying tree (rbtree)
+ *       This uses a good 64 bit hashing function for the key,
+ *       that is not expected to have hash collisions (and we do
+ *       not test for them).  The tree is built up of the hash
+ *       values, and if the hash is found in the tree, it is
+ *       assumed that the point has already been found.
+ *
+ *   (2) Using an underlying hashing of the keys (dnahash)
+ *       This uses a fast 64 bit hashing function for the key,
+ *       which is then hashed into a bucket (a dna in a dnaHash).
+ *       Because hash collisions can occur, the index into the
+ *       pta for the point that gave rise to that key is stored,
+ *       and the dna (bucket) is traversed, using the stored indices
+ *       to determine if that point had already been seen.
+ *
+ * 
+ */ + +#include "allheaders.h" + + +/*---------------------------------------------------------------------* + * Sorting * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaSort() + * + * \param[in] ptas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex [optional] index of sorted order into + * original array + * \return ptad sorted version of ptas, or NULL on error + */ +PTA * +ptaSort(PTA *ptas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex) +{ +PTA *ptad; +NUMA *naindex; + + PROCNAME("ptaSort"); + + if (pnaindex) *pnaindex = NULL; + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) + return (PTA *)ERROR_PTR("invalid sort type", procName, NULL); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return (PTA *)ERROR_PTR("invalid sort order", procName, NULL); + + if (ptaGetSortIndex(ptas, sorttype, sortorder, &naindex) != 0) + return (PTA *)ERROR_PTR("naindex not made", procName, NULL); + + ptad = ptaSortByIndex(ptas, naindex); + if (pnaindex) + *pnaindex = naindex; + else + numaDestroy(&naindex); + if (!ptad) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + return ptad; +} + + +/*! + * \brief ptaGetSortIndex() + * + * \param[in] ptas + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y + * \param[in] sortorder L_SORT_INCREASING, L_SORT_DECREASING + * \param[out] pnaindex index of sorted order into original array + * \return 0 if OK, 1 on error + */ +l_ok +ptaGetSortIndex(PTA *ptas, + l_int32 sorttype, + l_int32 sortorder, + NUMA **pnaindex) +{ +l_int32 i, n; +l_float32 x, y; +NUMA *na; + + PROCNAME("ptaGetSortIndex"); + + if (!pnaindex) + return ERROR_INT("&naindex not defined", procName, 1); + *pnaindex = NULL; + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) + return ERROR_INT("invalid sort type", procName, 1); + if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) + return ERROR_INT("invalid sort order", procName, 1); + + /* Build up numa of specific data */ + n = ptaGetCount(ptas); + if ((na = numaCreate(n)) == NULL) + return ERROR_INT("na not made", procName, 1); + for (i = 0; i < n; i++) { + ptaGetPt(ptas, i, &x, &y); + if (sorttype == L_SORT_BY_X) + numaAddNumber(na, x); + else + numaAddNumber(na, y); + } + + /* Get the sort index for data array */ + *pnaindex = numaGetSortIndex(na, sortorder); + numaDestroy(&na); + if (!*pnaindex) + return ERROR_INT("naindex not made", procName, 1); + return 0; +} + + +/*! + * \brief ptaSortByIndex() + * + * \param[in] ptas + * \param[in] naindex na that maps from the new pta to the input pta + * \return ptad sorted, or NULL on error + */ +PTA * +ptaSortByIndex(PTA *ptas, + NUMA *naindex) +{ +l_int32 i, index, n; +l_float32 x, y; +PTA *ptad; + + PROCNAME("ptaSortByIndex"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + if (!naindex) + return (PTA *)ERROR_PTR("naindex not defined", procName, NULL); + + /* Build up sorted pta using sort index */ + n = numaGetCount(naindex); + if ((ptad = ptaCreate(n)) == NULL) + return (PTA *)ERROR_PTR("ptad not made", procName, NULL); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + ptaGetPt(ptas, index, &x, &y); + ptaAddPt(ptad, x, y); + } + + return ptad; +} + + +/*! + * \brief ptaaSortByIndex() + * + * \param[in] ptaas + * \param[in] naindex na that maps from the new ptaa to the input ptaa + * \return ptaad sorted, or NULL on error + */ +PTAA * +ptaaSortByIndex(PTAA *ptaas, + NUMA *naindex) +{ +l_int32 i, n, index; +PTA *pta; +PTAA *ptaad; + + PROCNAME("ptaaSortByIndex"); + + if (!ptaas) + return (PTAA *)ERROR_PTR("ptaas not defined", procName, NULL); + if (!naindex) + return (PTAA *)ERROR_PTR("naindex not defined", procName, NULL); + + n = ptaaGetCount(ptaas); + if (numaGetCount(naindex) != n) + return (PTAA *)ERROR_PTR("numa and ptaa sizes differ", procName, NULL); + ptaad = ptaaCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + pta = ptaaGetPta(ptaas, index, L_COPY); + ptaaAddPta(ptaad, pta, L_INSERT); + } + + return ptaad; +} + + +/*! + * \brief ptaGetRankValue() + * + * \param[in] pta + * \param[in] fract use 0.0 for smallest, 1.0 for largest + * \param[in] ptasort [optional] version of %pta sorted by %sorttype + * \param[in] sorttype L_SORT_BY_X, L_SORT_BY_Y + * \param[out] pval rankval: the x or y value at %fract + * \return 0 if OK, 1 on error + */ +l_ok +ptaGetRankValue(PTA *pta, + l_float32 fract, + PTA *ptasort, + l_int32 sorttype, + l_float32 *pval) +{ +l_int32 index, n; +PTA *ptas; + + PROCNAME("ptaGetRankValue"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) + return ERROR_INT("invalid sort type", procName, 1); + if (fract < 0.0 || fract > 1.0) + return ERROR_INT("fract not in [0.0 ... 1.0]", procName, 1); + if ((n = ptaGetCount(pta)) == 0) + return ERROR_INT("pta empty", procName, 1); + + if (ptasort) + ptas = ptasort; + else + ptas = ptaSort(pta, sorttype, L_SORT_INCREASING, NULL); + + index = (l_int32)(fract * (l_float32)(n - 1) + 0.5); + if (sorttype == L_SORT_BY_X) + ptaGetPt(ptas, index, pval, NULL); + else /* sort by y */ + ptaGetPt(ptas, index, NULL, pval); + + if (!ptasort) ptaDestroy(&ptas); + return 0; +} + + +/*---------------------------------------------------------------------* + * Set operations using aset (rbtree) * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaUnionByAset() + * + * \param[in] pta1, pta2 + * \return ptad with the union of the set of points, or NULL on error + * + *
+ * Notes:
+ *      (1) See sarrayRemoveDupsByAset() for the approach.
+ *      (2) The key is a 64-bit hash from the (x,y) pair.
+ *      (3) This is slower than ptaUnionByHash(), mostly because of the
+ *          nlogn sort to build up the rbtree.  Do not use for large
+ *          numbers of points (say, > 1M).
+ *      (4) The *Aset() functions use the sorted l_Aset, which is just
+ *          an rbtree in disguise.
+ * 
+ */ +PTA * +ptaUnionByAset(PTA *pta1, + PTA *pta2) +{ +PTA *pta3, *ptad; + + PROCNAME("ptaUnionByAset"); + + if (!pta1) + return (PTA *)ERROR_PTR("pta1 not defined", procName, NULL); + if (!pta2) + return (PTA *)ERROR_PTR("pta2 not defined", procName, NULL); + + /* Join */ + pta3 = ptaCopy(pta1); + ptaJoin(pta3, pta2, 0, -1); + + /* Eliminate duplicates */ + ptad = ptaRemoveDupsByAset(pta3); + ptaDestroy(&pta3); + return ptad; +} + + +/*! + * \brief ptaRemoveDupsByAset() + * + * \param[in] ptas assumed to be integer values + * \return ptad with duplicates removed, or NULL on error + * + *
+ * Notes:
+ *      (1) This is slower than ptaRemoveDupsByHash(), mostly because
+ *          of the nlogn sort to build up the rbtree.  Do not use for
+ *          large numbers of points (say, > 1M).
+ * 
+ */ +PTA * +ptaRemoveDupsByAset(PTA *ptas) +{ +l_int32 i, n, x, y; +PTA *ptad; +l_uint64 hash; +L_ASET *set; +RB_TYPE key; + + PROCNAME("ptaRemoveDupsByAset"); + + if (!ptas) + return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); + + set = l_asetCreate(L_UINT_TYPE); + n = ptaGetCount(ptas); + ptad = ptaCreate(n); + for (i = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + l_hashPtToUint64(x, y, &hash); + key.utype = hash; + if (!l_asetFind(set, key)) { + ptaAddPt(ptad, x, y); + l_asetInsert(set, key); + } + } + + l_asetDestroy(&set); + return ptad; +} + + +/*! + * \brief ptaIntersectionByAset() + * + * \param[in] pta1, pta2 + * \return ptad intersection of the point sets, or NULL on error + * + *
+ * Notes:
+ *      (1) See sarrayIntersectionByAset() for the approach.
+ *      (2) The key is a 64-bit hash from the (x,y) pair.
+ *      (3) This is slower than ptaIntersectionByHash(), mostly because
+ *          of the nlogn sort to build up the rbtree.  Do not use for
+ *          large numbers of points (say, > 1M).
+ * 
+ */ +PTA * +ptaIntersectionByAset(PTA *pta1, + PTA *pta2) +{ +l_int32 n1, n2, i, n, x, y; +l_uint64 hash; +L_ASET *set1, *set2; +RB_TYPE key; +PTA *pta_small, *pta_big, *ptad; + + PROCNAME("ptaIntersectionByAset"); + + if (!pta1) + return (PTA *)ERROR_PTR("pta1 not defined", procName, NULL); + if (!pta2) + return (PTA *)ERROR_PTR("pta2 not defined", procName, NULL); + + /* Put the elements of the biggest array into a set */ + n1 = ptaGetCount(pta1); + n2 = ptaGetCount(pta2); + pta_small = (n1 < n2) ? pta1 : pta2; /* do not destroy pta_small */ + pta_big = (n1 < n2) ? pta2 : pta1; /* do not destroy pta_big */ + set1 = l_asetCreateFromPta(pta_big); + + /* Build up the intersection of points */ + ptad = ptaCreate(0); + n = ptaGetCount(pta_small); + set2 = l_asetCreate(L_UINT_TYPE); + for (i = 0; i < n; i++) { + ptaGetIPt(pta_small, i, &x, &y); + l_hashPtToUint64(x, y, &hash); + key.utype = hash; + if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { + ptaAddPt(ptad, x, y); + l_asetInsert(set2, key); + } + } + + l_asetDestroy(&set1); + l_asetDestroy(&set2); + return ptad; +} + + +/*! + * \brief l_asetCreateFromPta() + * + * \param[in] pta + * \return set using a 64-bit hash of (x,y) as the key + */ +L_ASET * +l_asetCreateFromPta(PTA *pta) +{ +l_int32 i, n, x, y; +l_uint64 hash; +L_ASET *set; +RB_TYPE key; + + PROCNAME("l_asetCreateFromPta"); + + if (!pta) + return (L_ASET *)ERROR_PTR("pta not defined", procName, NULL); + + set = l_asetCreate(L_UINT_TYPE); + n = ptaGetCount(pta); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + l_hashPtToUint64(x, y, &hash); + key.utype = hash; + l_asetInsert(set, key); + } + + return set; +} + + +/*---------------------------------------------------------------------* + * Set operations using hashing (rbtree) * + *---------------------------------------------------------------------*/ +/*! + * \brief ptaUnionByHash() + * + * \param[in] pta1, pta2 + * \return ptad with the union of the set of points, or NULL on error + * + *
+ * Notes:
+ *      (1) This is faster than ptaUnionByAset(), because the
+ *          bucket lookup is O(n).  It should be used if the pts are
+ *          integers (e.g., representing pixel positions).
+ * 
+ */ +PTA * +ptaUnionByHash(PTA *pta1, + PTA *pta2) +{ +PTA *pta3, *ptad; + + PROCNAME("ptaUnionByHash"); + + if (!pta1) + return (PTA *)ERROR_PTR("pta1 not defined", procName, NULL); + if (!pta2) + return (PTA *)ERROR_PTR("pta2 not defined", procName, NULL); + + /* Join */ + pta3 = ptaCopy(pta1); + ptaJoin(pta3, pta2, 0, -1); + + /* Eliminate duplicates */ + ptaRemoveDupsByHash(pta3, &ptad, NULL); + ptaDestroy(&pta3); + return ptad; +} + + +/*! + * \brief ptaRemoveDupsByHash() + * + * \param[in] ptas assumed to be integer values + * \param[out] pptad unique set of pts; duplicates removed + * \param[out] pdahash [optional] dnahash used for lookup + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates a pta with unique values.
+ *      (2) The dnahash is built up with ptad to assure uniqueness.
+ *          It can be used to find if a point is in the set:
+ *              ptaFindPtByHash(ptad, dahash, x, y, &index)
+ *      (3) The hash of the (x,y) location is simple and fast.  It scales
+ *          up with the number of buckets to insure a fairly random
+ *          bucket selection for adjacent points.
+ *      (4) A Dna is used rather than a Numa because we need accurate
+ *          representation of 32-bit integers that are indices into ptas.
+ *          Integer --> float --> integer conversion makes errors for
+ *          integers larger than 10M.
+ *      (5) This is faster than ptaRemoveDupsByAset(), because the
+ *          bucket lookup is O(n), although there is a double-loop
+ *          lookup within the dna in each bucket.
+ * 
+ */ +l_ok +ptaRemoveDupsByHash(PTA *ptas, + PTA **pptad, + L_DNAHASH **pdahash) +{ +l_int32 i, n, index, items, x, y; +l_uint32 nsize; +l_uint64 key; +PTA *ptad; +L_DNAHASH *dahash; + + PROCNAME("ptaRemoveDupsByHash"); + + if (pdahash) *pdahash = NULL; + if (!pptad) + return ERROR_INT("&ptad not defined", procName, 1); + *pptad = NULL; + if (!ptas) + return ERROR_INT("ptas not defined", procName, 1); + + n = ptaGetCount(ptas); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ + dahash = l_dnaHashCreate(nsize, 8); + ptad = ptaCreate(n); + *pptad = ptad; + for (i = 0, items = 0; i < n; i++) { + ptaGetIPt(ptas, i, &x, &y); + ptaFindPtByHash(ptad, dahash, x, y, &index); + if (index < 0) { /* not found */ + l_hashPtToUint64(x, y, &key); + l_dnaHashAdd(dahash, key, (l_float64)items); + ptaAddPt(ptad, x, y); + items++; + } + } + + if (pdahash) + *pdahash = dahash; + else + l_dnaHashDestroy(&dahash); + return 0; +} + + +/*! + * \brief ptaIntersectionByHash() + * + * \param[in] pta1, pta2 + * \return ptad intersection of the point sets, or NULL on error + * + *
+ * Notes:
+ *      (1) This is faster than ptaIntersectionByAset(), because the
+ *          bucket lookup is O(n).  It should be used if the pts are
+ *          integers (e.g., representing pixel positions).
+ * 
+ */ +PTA * +ptaIntersectionByHash(PTA *pta1, + PTA *pta2) +{ +l_int32 n1, n2, nsmall, i, x, y, index1, index2; +l_uint32 nsize2; +l_uint64 key; +L_DNAHASH *dahash1, *dahash2; +PTA *pta_small, *pta_big, *ptad; + + PROCNAME("ptaIntersectionByHash"); + + if (!pta1) + return (PTA *)ERROR_PTR("pta1 not defined", procName, NULL); + if (!pta2) + return (PTA *)ERROR_PTR("pta2 not defined", procName, NULL); + + /* Put the elements of the biggest pta into a dnahash */ + n1 = ptaGetCount(pta1); + n2 = ptaGetCount(pta2); + pta_small = (n1 < n2) ? pta1 : pta2; /* do not destroy pta_small */ + pta_big = (n1 < n2) ? pta2 : pta1; /* do not destroy pta_big */ + dahash1 = l_dnaHashCreateFromPta(pta_big); + + /* Build up the intersection of points. Add to ptad + * if the point is in pta_big (using dahash1) but hasn't + * yet been seen in the traversal of pta_small (using dahash2). */ + ptad = ptaCreate(0); + nsmall = ptaGetCount(pta_small); + findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ + dahash2 = l_dnaHashCreate(nsize2, 0); + for (i = 0; i < nsmall; i++) { + ptaGetIPt(pta_small, i, &x, &y); + ptaFindPtByHash(pta_big, dahash1, x, y, &index1); + if (index1 >= 0) { /* found */ + ptaFindPtByHash(pta_small, dahash2, x, y, &index2); + if (index2 == -1) { /* not found */ + ptaAddPt(ptad, x, y); + l_hashPtToUint64(x, y, &key); + l_dnaHashAdd(dahash2, key, (l_float64)i); + } + } + } + + l_dnaHashDestroy(&dahash1); + l_dnaHashDestroy(&dahash2); + return ptad; +} + + +/*! + * \brief ptaFindPtByHash() + * + * \param[in] pta + * \param[in] dahash built from pta + * \param[in] x, y arbitrary points + * \param[out] pindex index into pta if (x,y) is in pta; -1 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Fast lookup in dnaHash associated with a pta, to see if a
+ *          random point (x,y) is already stored in the hash table.
+ *      (2) We use a strong hash function to minimize the chance that
+ *          two different points hash to the same key value.
+ *      (3) We select the number of buckets to be about 5% of the size
+ *          of the input %pta, so that when fully populated, each
+ *          bucket (dna) will have about 20 entries, each being an index
+ *          into %pta.  In lookup, after hashing to the key, and then
+ *          again to the bucket, we traverse the bucket (dna), using the
+ *          index into %pta to check if the point (x,y) has been found before.
+ * 
+ */ +l_ok +ptaFindPtByHash(PTA *pta, + L_DNAHASH *dahash, + l_int32 x, + l_int32 y, + l_int32 *pindex) +{ +l_int32 i, nvals, index, xi, yi; +l_uint64 key; +L_DNA *da; + + PROCNAME("ptaFindPtByHash"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = -1; + if (!pta) + return ERROR_INT("pta not defined", procName, 1); + if (!dahash) + return ERROR_INT("dahash not defined", procName, 1); + + l_hashPtToUint64(x, y, &key); + da = l_dnaHashGetDna(dahash, key, L_NOCOPY); + if (!da) return 0; + + /* Run through the da, looking for this point */ + nvals = l_dnaGetCount(da); + for (i = 0; i < nvals; i++) { + l_dnaGetIValue(da, i, &index); + ptaGetIPt(pta, index, &xi, &yi); + if (x == xi && y == yi) { + *pindex = index; + return 0; + } + } + + return 0; +} + + +/*! + * \brief l_dnaHashCreateFromPta() + * + * \param[in] pta + * \return dahash, or NULL on error + */ +L_DNAHASH * +l_dnaHashCreateFromPta(PTA *pta) +{ +l_int32 i, n, x, y; +l_uint32 nsize; +l_uint64 key; +L_DNAHASH *dahash; + + PROCNAME("l_dnaHashCreateFromPta"); + + if (!pta) + return (L_DNAHASH *)ERROR_PTR("pta not defined", procName, NULL); + + /* Build up dnaHash of indices, hashed by a key that is + * a large linear combination of x and y values designed to + * randomize the key. Having about 20 pts in each bucket is + * roughly optimal for speed for large sets. */ + n = ptaGetCount(pta); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ +/* fprintf(stderr, "Prime used: %d\n", nsize); */ + + /* Add each point, using the hash as key and the index into + * %ptas as the value. Storing the index enables operations + * that check for duplicates. */ + dahash = l_dnaHashCreate(nsize, 8); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + l_hashPtToUint64(x, y, &key); + l_dnaHashAdd(dahash, key, (l_float64)i); + } + + return dahash; +} diff --git a/3rdparty/hgOCR/leptonica/ptra.c b/3rdparty/hgOCR/leptonica/ptra.c new file mode 100644 index 00000000..99e441f0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ptra.c @@ -0,0 +1,1006 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file ptra.c + *
+ *
+ *      Ptra creation and destruction
+ *          L_PTRA      *ptraCreate()
+ *          void        *ptraDestroy()
+ *
+ *      Add/insert/remove/replace generic ptr object
+ *          l_int32      ptraAdd()
+ *          static l_int32  ptraExtendArray()
+ *          l_int32      ptraInsert()
+ *          void        *ptraRemove()
+ *          void        *ptraRemoveLast()
+ *          void        *ptraReplace()
+ *          l_int32      ptraSwap()
+ *          l_int32      ptraCompactArray()
+ *
+ *      Other array operations
+ *          l_int32      ptraReverse()
+ *          l_int32      ptraJoin()
+ *
+ *      Simple Ptra accessors
+ *          l_int32      ptraGetMaxIndex()
+ *          l_int32      ptraGetActualCount()
+ *          void        *ptraGetPtrToItem()
+ *
+ *      Ptraa creation and destruction
+ *          L_PTRAA     *ptraaCreate()
+ *          void        *ptraaDestroy()
+ *
+ *      Ptraa accessors
+ *          l_int32      ptraaGetSize()
+ *          l_int32      ptraaInsertPtra()
+ *          L_PTRA      *ptraaGetPtra()
+ *
+ *      Ptraa conversion
+ *          L_PTRA      *ptraaFlattenToPtra()
+ *
+ *    Notes on the Ptra:
+ *
+ *    (1) The Ptra is a struct, not an array.  Always use the accessors
+ *        in this file, never the fields directly.
+ *    (2) Items can be placed anywhere in the allocated ptr array,
+ *        including one index beyond the last ptr (in which case the
+ *        ptr array is realloc'd).
+ *    (3) Thus, the items on the ptr array need not be compacted.  In
+ *        general there will be null pointers in the ptr array.
+ *    (4) A compacted array will remain compacted on removal if
+ *        arbitrary items are removed with compaction, or if items
+ *        are removed from the end of the array.
+ *    (5) For addition to and removal from the end of the array, this
+ *        functions exactly like a stack, and with the same O(1) cost.
+ *    (6) This differs from the generic stack in that we allow
+ *        random access for insertion, removal and replacement.
+ *        Removal can be done without compacting the array.
+ *        Insertion into a null ptr in the array has no effect on
+ *        the other pointers, but insertion into a location already
+ *        occupied by an item has a cost proportional to the
+ *        distance to the next null ptr in the array.
+ *    (7) Null ptrs are valid input args for both insertion and
+ *        replacement; this allows arbitrary swapping.
+ *    (8) The item in the array with the largest index is at pa->imax.
+ *        This can be any value from -1 (initialized; all array ptrs
+ *        are null) up to pa->nalloc - 1 (the last ptr in the array).
+ *    (9) In referring to the array: the first ptr is the "top" or
+ *        "beginning"; the last pointer is the "bottom" or "end";
+ *        items are shifted "up" towards the top when compaction occurs;
+ *        and items are shifted "down" towards the bottom when forced to
+ *        move due to an insertion.
+ *   (10) It should be emphasized that insertion, removal and replacement
+ *        are general:
+ *         * You can insert an item into any ptr location in the
+ *           allocated ptr array, as well as into the next ptr address
+ *           beyond the allocated array (in which case a realloc will occur).
+ *         * You can remove or replace an item from any ptr location
+ *           in the allocated ptr array.
+ *         * When inserting into an occupied location, you have
+ *           three options for downshifting.
+ *         * When removing, you can either leave the ptr null or
+ *           compact the array.
+ *
+ *    Notes on the Ptraa:
+ *
+ *    (1) The Ptraa is a fixed size ptr array for holding Ptra.
+ *        In that respect, it is different from other pointer arrays, which
+ *        are extensible and grow using the *Add*() functions.
+ *    (2) In general, the Ptra ptrs in the Ptraa can be randomly occupied.
+ *        A typical usage is to allow an O(n) horizontal sort of Pix,
+ *        where the size of the Ptra array is the width of the image,
+ *        and each Ptra is an array of all the Pix at a specific x location.
+ * 
+ */ + +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + /* Static function */ +static l_int32 ptraExtendArray(L_PTRA *pa); + + +/*--------------------------------------------------------------------------* + * Ptra creation and destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief ptraCreate() + * + * \param[in] n size of ptr array to be alloc'd; use 0 for default + * \return pa, or NULL on error + */ +L_PTRA * +ptraCreate(l_int32 n) +{ +L_PTRA *pa; + + PROCNAME("ptraCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + pa = (L_PTRA *)LEPT_CALLOC(1, sizeof(L_PTRA)); + if ((pa->array = (void **)LEPT_CALLOC(n, sizeof(void *))) == NULL) { + ptraDestroy(&pa, 0, 0); + return (L_PTRA *)ERROR_PTR("ptr array not made", procName, NULL); + } + pa->nalloc = n; + pa->imax = -1; + pa->nactual = 0; + return pa; +} + + +/*! + * \brief ptraDestroy() + * + * \param[in,out] ppa will be set to null before returning + * \param[in] freeflag TRUE to free each remaining item in the array + * \param[in] warnflag TRUE to warn if any remaining items + * are not destroyed + * \return void + * + *
+ * Notes:
+ *      (1) If %freeflag == TRUE, frees each item in the array.
+ *      (2) If %freeflag == FALSE and %warnflag == TRUE, and there are
+ *          items on the array, this gives a warning and destroys the array.
+ *          If these items are not owned elsewhere, this will cause
+ *          a memory leak of all the items that were on the array.
+ *          So if the items are not owned elsewhere and require their
+ *          own destroy function, they must be destroyed before the ptra.
+ *      (3) If %warnflag == FALSE, no warnings will be issued.  This is
+ *          useful if the items are owned elsewhere, such as a
+ *          PixMemoryStore().
+ *      (4) To destroy the ptra, we destroy the ptr array, then
+ *          the ptra, and then null the contents of the input ptr.
+ * 
+ */ +void +ptraDestroy(L_PTRA **ppa, + l_int32 freeflag, + l_int32 warnflag) +{ +l_int32 i, nactual; +void *item; +L_PTRA *pa; + + PROCNAME("ptraDestroy"); + + if (ppa == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((pa = *ppa) == NULL) + return; + + ptraGetActualCount(pa, &nactual); + if (nactual > 0) { + if (freeflag) { + for (i = 0; i <= pa->imax; i++) { + if ((item = ptraRemove(pa, i, L_NO_COMPACTION)) != NULL) + LEPT_FREE(item); + } + } else if (warnflag) { + L_WARNING("potential memory leak of %d items in ptra\n", + procName, nactual); + } + } + + LEPT_FREE(pa->array); + LEPT_FREE(pa); + *ppa = NULL; + return; +} + + +/*--------------------------------------------------------------------------* + * Add/insert/remove/replace generic ptr object * + *--------------------------------------------------------------------------*/ +/*! + * \brief ptraAdd() + * + * \param[in] pa ptra + * \param[in] item generic ptr to a struct + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This adds the element to the next location beyond imax,
+ *          which is the largest occupied ptr in the array.  This is
+ *          what you expect from a stack, where all ptrs up to and
+ *          including imax are occupied, but here the occuption of
+ *          items in the array is entirely arbitrary.
+ * 
+ */ +l_ok +ptraAdd(L_PTRA *pa, + void *item) +{ +l_int32 imax; + + PROCNAME("ptraAdd"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (!item) + return ERROR_INT("item not defined", procName, 1); + + ptraGetMaxIndex(pa, &imax); + if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) + return ERROR_INT("extension failure", procName, 1); + pa->array[imax + 1] = (void *)item; + pa->imax++; + pa->nactual++; + return 0; +} + + +/*! + * \brief ptraExtendArray() + * + * \param[in] pa + * \return 0 if OK, 1 on error + */ +static l_int32 +ptraExtendArray(L_PTRA *pa) +{ + PROCNAME("ptraExtendArray"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + + if ((pa->array = (void **)reallocNew((void **)&pa->array, + sizeof(void *) * pa->nalloc, + 2 * sizeof(void *) * pa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + pa->nalloc *= 2; + return 0; +} + + +/*! + * \brief ptraInsert() + * + * \param[in] pa ptra + * \param[in] index location in ptra to insert new value + * \param[in] item generic ptr to a struct; can be null + * \param[in] shiftflag L_AUTO_DOWNSHIFT, L_MIN_DOWNSHIFT, L_FULL_DOWNSHIFT + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This checks first to see if the location is valid, and
+ *          then if there is presently an item there.  If there is not,
+ *          it is simply inserted into that location.
+ *      (2) If there is an item at the insert location, items must be
+ *          moved down to make room for the insert.  In the downward
+ *          shift there are three options, given by %shiftflag.
+ *            ~ If %shiftflag == L_AUTO_DOWNSHIFT, a decision is made
+ *              whether, in a cascade of items, to downshift a minimum
+ *              amount or for all items above %index.  The decision is
+ *              based on the expectation of finding holes (null ptrs)
+ *              between %index and the bottom of the array.
+ *              Assuming the holes are distributed uniformly, if 2 or more
+ *              holes are expected, we do a minimum shift.
+ *            ~ If %shiftflag == L_MIN_DOWNSHIFT, the downward shifting
+ *              cascade of items progresses a minimum amount, until
+ *              the first empty slot is reached.  This mode requires
+ *              some computation before the actual shifting is done.
+ *            ~ If %shiftflag == L_FULL_DOWNSHIFT, a shifting cascade is
+ *              performed where pa[i] --> pa[i + 1] for all i >= index.
+ *              Then, the item is inserted at pa[index].
+ *      (3) If you are not using L_AUTO_DOWNSHIFT, the rule of thumb is
+ *          to use L_FULL_DOWNSHIFT if the array is compacted (each
+ *          element points to an item), and to use L_MIN_DOWNSHIFT
+ *          if there are a significant number of null pointers.
+ *          There is no penalty to using L_MIN_DOWNSHIFT for a
+ *          compacted array, however, because the full shift is required
+ *          and we don't do the O(n) computation to look for holes.
+ *      (4) This should not be used repeatedly on large arrays,
+ *          because the function is generally O(n).
+ *      (5) However, it can be used repeatedly if we start with an empty
+ *          ptr array and insert only once at each location.  For example,
+ *          you can support an array of Numa, where at each ptr location
+ *          you store either 0 or 1 Numa, and the Numa can be added
+ *          randomly to the ptr array.
+ * 
+ */ +l_ok +ptraInsert(L_PTRA *pa, + l_int32 index, + void *item, + l_int32 shiftflag) +{ +l_int32 i, ihole, imax; +l_float32 nexpected; + + PROCNAME("ptraInsert"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (index < 0 || index > pa->nalloc) + return ERROR_INT("index not in [0 ... nalloc]", procName, 1); + if (shiftflag != L_AUTO_DOWNSHIFT && shiftflag != L_MIN_DOWNSHIFT && + shiftflag != L_FULL_DOWNSHIFT) + return ERROR_INT("invalid shiftflag", procName, 1); + + if (item) pa->nactual++; + if (index == pa->nalloc) { /* can happen when index == n */ + if (ptraExtendArray(pa)) + return ERROR_INT("extension failure", procName, 1); + } + + /* We are inserting into a hole or adding to the end of the array. + * No existing items are moved. */ + ptraGetMaxIndex(pa, &imax); + if (pa->array[index] == NULL) { + pa->array[index] = item; + if (item && index > imax) /* new item put beyond max so far */ + pa->imax = index; + return 0; + } + + /* We are inserting at the location of an existing item, + * forcing the existing item and those below to shift down. + * First, extend the array automatically if the last element + * (nalloc - 1) is occupied (imax). This may not be necessary + * in every situation, but only an anomalous sequence of insertions + * into the array would cause extra ptr allocation. */ + if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) + return ERROR_INT("extension failure", procName, 1); + + /* If there are no holes, do a full downshift. + * Otherwise, if L_AUTO_DOWNSHIFT, use the expected number + * of holes between index and n to determine the shift mode */ + if (imax + 1 == pa->nactual) { + shiftflag = L_FULL_DOWNSHIFT; + } else if (shiftflag == L_AUTO_DOWNSHIFT) { + if (imax < 10) { + shiftflag = L_FULL_DOWNSHIFT; /* no big deal */ + } else { + nexpected = (l_float32)(imax - pa->nactual) * + (l_float32)((imax - index) / imax); + shiftflag = (nexpected > 2.0) ? L_MIN_DOWNSHIFT : L_FULL_DOWNSHIFT; + } + } + + if (shiftflag == L_MIN_DOWNSHIFT) { /* run down looking for a hole */ + for (ihole = index + 1; ihole <= imax; ihole++) { + if (pa->array[ihole] == NULL) + break; + } + } else { /* L_FULL_DOWNSHIFT */ + ihole = imax + 1; + } + + for (i = ihole; i > index; i--) + pa->array[i] = pa->array[i - 1]; + pa->array[index] = (void *)item; + if (ihole == imax + 1) /* the last item was shifted down */ + pa->imax++; + + return 0; +} + + +/*! + * \brief ptraRemove() + * + * \param[in] pa ptra + * \param[in] index element to be removed + * \param[in] flag L_NO_COMPACTION, L_COMPACTION + * \return item, or NULL on error + * + *
+ * Notes:
+ *      (1) If flag == L_NO_COMPACTION, this removes the item and
+ *          nulls the ptr on the array.  If it takes the last item
+ *          in the array, pa->n is reduced to the next item.
+ *      (2) If flag == L_COMPACTION, this compacts the array for
+ *          for all i >= index.  It should not be used repeatedly on
+ *          large arrays, because compaction is O(n).
+ *      (3) The ability to remove without automatic compaction allows
+ *          removal with cost O(1).
+ * 
+ */ +void * +ptraRemove(L_PTRA *pa, + l_int32 index, + l_int32 flag) +{ +l_int32 i, imax, fromend, icurrent; +void *item; + + PROCNAME("ptraRemove"); + + if (!pa) + return (void *)ERROR_PTR("pa not defined", procName, NULL); + ptraGetMaxIndex(pa, &imax); + if (index < 0 || index > imax) + return (void *)ERROR_PTR("index not in [0 ... imax]", procName, NULL); + + item = pa->array[index]; + if (item) + pa->nactual--; + pa->array[index] = NULL; + + /* If we took the last item, need to reduce pa->n */ + fromend = (index == imax); + if (fromend) { + for (i = index - 1; i >= 0; i--) { + if (pa->array[i]) + break; + } + pa->imax = i; + } + + /* Compact from index to the end of the array */ + if (!fromend && flag == L_COMPACTION) { + for (icurrent = index, i = index + 1; i <= imax; i++) { + if (pa->array[i]) + pa->array[icurrent++] = pa->array[i]; + } + pa->imax = icurrent - 1; + } + return item; +} + + +/*! + * \brief ptraRemoveLast() + * + * \param[in] pa ptra + * \return item, or NULL on error or if the array is empty + */ +void * +ptraRemoveLast(L_PTRA *pa) +{ +l_int32 imax; + + PROCNAME("ptraRemoveLast"); + + if (!pa) + return (void *)ERROR_PTR("pa not defined", procName, NULL); + + /* Remove the last item in the array. No compaction is required. */ + ptraGetMaxIndex(pa, &imax); + if (imax >= 0) + return ptraRemove(pa, imax, L_NO_COMPACTION); + else /* empty */ + return NULL; +} + + +/*! + * \brief ptraReplace() + * + * \param[in] pa ptra + * \param[in] index element to be replaced + * \param[in] item new generic ptr to a struct; can be null + * \param[in] freeflag TRUE to free old item; FALSE to return it + * \return item old item, if it exists and is not freed, + * or NULL on error + */ +void * +ptraReplace(L_PTRA *pa, + l_int32 index, + void *item, + l_int32 freeflag) +{ +l_int32 imax; +void *olditem; + + PROCNAME("ptraReplace"); + + if (!pa) + return (void *)ERROR_PTR("pa not defined", procName, NULL); + ptraGetMaxIndex(pa, &imax); + if (index < 0 || index > imax) + return (void *)ERROR_PTR("index not in [0 ... imax]", procName, NULL); + + olditem = pa->array[index]; + pa->array[index] = item; + if (!item && olditem) + pa->nactual--; + else if (item && !olditem) + pa->nactual++; + + if (freeflag == FALSE) + return olditem; + + if (olditem) + LEPT_FREE(olditem); + return NULL; +} + + +/*! + * \brief ptraSwap() + * + * \param[in] pa ptra + * \param[in] index1 + * \param[in] index2 + * \return 0 if OK, 1 on error + */ +l_ok +ptraSwap(L_PTRA *pa, + l_int32 index1, + l_int32 index2) +{ +l_int32 imax; +void *item; + + PROCNAME("ptraSwap"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (index1 == index2) + return 0; + ptraGetMaxIndex(pa, &imax); + if (index1 < 0 || index1 > imax || index2 < 0 || index2 > imax) + return ERROR_INT("invalid index: not in [0 ... imax]", procName, 1); + + item = ptraRemove(pa, index1, L_NO_COMPACTION); + item = ptraReplace(pa, index2, item, FALSE); + ptraInsert(pa, index1, item, L_MIN_DOWNSHIFT); + return 0; +} + + +/*! + * \brief ptraCompactArray() + * + * \param[in] pa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This compacts the items on the array, filling any empty ptrs.
+ *      (2) This does not change the size of the array of ptrs.
+ * 
+ */ +l_ok +ptraCompactArray(L_PTRA *pa) +{ +l_int32 i, imax, nactual, index; + + PROCNAME("ptraCompactArray"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + ptraGetMaxIndex(pa, &imax); + ptraGetActualCount(pa, &nactual); + if (imax + 1 == nactual) return 0; + + /* Compact the array */ + for (i = 0, index = 0; i <= imax; i++) { + if (pa->array[i]) + pa->array[index++] = pa->array[i]; + } + pa->imax = index - 1; + if (nactual != index) + L_ERROR("index = %d; != nactual\n", procName, index); + + return 0; +} + + +/*----------------------------------------------------------------------* + * Other array operations * + *----------------------------------------------------------------------*/ +/*! + * \brief ptraReverse() + * + * \param[in] pa ptra + * \return 0 if OK, 1 on error + */ +l_ok +ptraReverse(L_PTRA *pa) +{ +l_int32 i, imax; + + PROCNAME("ptraReverse"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + ptraGetMaxIndex(pa, &imax); + + for (i = 0; i < (imax + 1) / 2; i++) + ptraSwap(pa, i, imax - i); + return 0; +} + + +/*! + * \brief ptraJoin() + * + * \param[in] pa1 add to this one + * \param[in] pa2 appended to pa1, and emptied of items; can be null + * \return 0 if OK, 1 on error + */ +l_ok +ptraJoin(L_PTRA *pa1, + L_PTRA *pa2) +{ +l_int32 i, imax; +void *item; + + PROCNAME("ptraJoin"); + + if (!pa1) + return ERROR_INT("pa1 not defined", procName, 1); + if (!pa2) + return 0; + + ptraGetMaxIndex(pa2, &imax); + for (i = 0; i <= imax; i++) { + item = ptraRemove(pa2, i, L_NO_COMPACTION); + ptraAdd(pa1, item); + } + + return 0; +} + + + +/*----------------------------------------------------------------------* + * Simple ptra accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief ptraGetMaxIndex() + * + * \param[in] pa ptra + * \param[out] pmaxindex index of last item in the array; + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The largest index to an item in the array is %maxindex.
+ *          %maxindex is one less than the number of items that would be
+ *          in the array if there were no null pointers between 0
+ *          and %maxindex - 1.  However, because the internal ptr array
+ *          need not be compacted, there may be NULL pointers at
+ *          indices below %maxindex; for example, if items have
+ *          been removed.
+ *      (2) When an item is added to the end of the array, it goes
+ *          into pa->array[maxindex + 1], and maxindex is then
+ *          incremented by 1.
+ *      (3) If there are no items in the array, this returns %maxindex = -1.
+ * 
+ */ +l_ok +ptraGetMaxIndex(L_PTRA *pa, + l_int32 *pmaxindex) +{ + PROCNAME("ptraGetMaxIndex"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (!pmaxindex) + return ERROR_INT("&maxindex not defined", procName, 1); + *pmaxindex = pa->imax; + return 0; +} + + +/*! + * \brief ptraGetActualCount() + * + * \param[in] pa ptra + * \param[out] pcount actual number of items on the ptr array + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) The actual number of items on the ptr array, pa->nactual,
+ *          will be smaller than pa->n if the array is not compacted.
+ * 
+ */ +l_ok +ptraGetActualCount(L_PTRA *pa, + l_int32 *pcount) +{ + PROCNAME("ptraGetActualCount"); + + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + if (!pcount) + return ERROR_INT("&count not defined", procName, 1); + *pcount = pa->nactual; + + return 0; +} + + +/*! + * \brief ptraGetPtrToItem() + * + * \param[in] pa ptra + * \param[in] index of element to be retrieved + * \return a ptr to the element, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a ptr to the item.  You must cast it to
+ *          the type of item.  Do not destroy it; the item belongs
+ *          to the Ptra.
+ *      (2) This can access all possible items on the ptr array.
+ *          If an item doesn't exist, it returns null.
+ * 
+ */ +void * +ptraGetPtrToItem(L_PTRA *pa, + l_int32 index) +{ + PROCNAME("ptraGetPtrToItem"); + + if (!pa) + return (void *)ERROR_PTR("pa not defined", procName, NULL); + if (index < 0 || index >= pa->nalloc) + return (void *)ERROR_PTR("index not in [0 ... nalloc-1]", + procName, NULL); + + return pa->array[index]; +} + + +/*--------------------------------------------------------------------------* + * Ptraa creation and destruction * + *--------------------------------------------------------------------------*/ +/*! + * \brief ptraaCreate() + * + * \param[in] n size of ptr array to be alloc'd + * \return paa, or NULL on error + * + *
+ * Notes:
+ *      (1) The ptraa is generated with a fixed size, that can not change.
+ *          The ptra can be generated and inserted randomly into this array.
+ * 
+ */ +L_PTRAA * +ptraaCreate(l_int32 n) +{ +L_PTRAA *paa; + + PROCNAME("ptraaCreate"); + + if (n <= 0) + return (L_PTRAA *)ERROR_PTR("n must be > 0", procName, NULL); + + paa = (L_PTRAA *)LEPT_CALLOC(1, sizeof(L_PTRAA)); + if ((paa->ptra = (L_PTRA **)LEPT_CALLOC(n, sizeof(L_PTRA *))) == NULL) { + ptraaDestroy(&paa, 0, 0); + return (L_PTRAA *)ERROR_PTR("ptr array not made", procName, NULL); + } + paa->nalloc = n; + return paa; +} + + +/*! + * \brief ptraaDestroy() + * + * \param[in,out] ppaa will be set to null before returning + * \param[in] freeflag TRUE to free each remaining item in each ptra + * \param[in] warnflag TRUE to warn if any remaining items + * are not destroyed + * \return void + * + *
+ * Notes:
+ *      (1) See ptraDestroy() for use of %freeflag and %warnflag.
+ *      (2) To destroy the ptraa, we destroy each ptra, then the ptr array,
+ *          then the ptraa, and then null the contents of the input ptr.
+ * 
+ */ +void +ptraaDestroy(L_PTRAA **ppaa, + l_int32 freeflag, + l_int32 warnflag) +{ +l_int32 i, n; +L_PTRA *pa; +L_PTRAA *paa; + + PROCNAME("ptraaDestroy"); + + if (ppaa == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((paa = *ppaa) == NULL) + return; + + ptraaGetSize(paa, &n); + for (i = 0; i < n; i++) { + pa = ptraaGetPtra(paa, i, L_REMOVE); + ptraDestroy(&pa, freeflag, warnflag); + } + + LEPT_FREE(paa->ptra); + LEPT_FREE(paa); + *ppaa = NULL; + return; +} + + +/*--------------------------------------------------------------------------* + * Ptraa accessors * + *--------------------------------------------------------------------------*/ +/*! + * \brief ptraaGetSize() + * + * \param[in] paa + * \param[out] psize size of ptr array + * \return 0 if OK; 1 on error + */ +l_ok +ptraaGetSize(L_PTRAA *paa, + l_int32 *psize) +{ + PROCNAME("ptraaGetSize"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + *psize = paa->nalloc; + + return 0; +} + + +/*! + * \brief ptraaInsertPtra() + * + * \param[in] paa ptraa + * \param[in] index location in array for insertion + * \param[in] pa to be inserted + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Caller should check return value.  On success, the Ptra
+ *          is inserted in the Ptraa and is owned by it.  However,
+ *          on error, the Ptra remains owned by the caller.
+ * 
+ */ +l_ok +ptraaInsertPtra(L_PTRAA *paa, + l_int32 index, + L_PTRA *pa) +{ +l_int32 n; + + PROCNAME("ptraaInsertPtra"); + + if (!paa) + return ERROR_INT("paa not defined", procName, 1); + if (!pa) + return ERROR_INT("pa not defined", procName, 1); + ptraaGetSize(paa, &n); + if (index < 0 || index >= n) + return ERROR_INT("invalid index", procName, 1); + if (paa->ptra[index] != NULL) + return ERROR_INT("ptra already stored at index", procName, 1); + + paa->ptra[index] = pa; + return 0; +} + + +/*! + * \brief ptraaGetPtra() + * + * \param[in] paa ptraa + * \param[in] index location in array + * \param[in] accessflag L_HANDLE_ONLY, L_REMOVE + * \return ptra at index location, or NULL on error or if there + * is no ptra there. + * + *
+ * Notes:
+ *      (1) This returns the ptra ptr.  If %accessflag == L_HANDLE_ONLY,
+ *          the ptra is left on the ptraa.  If %accessflag == L_REMOVE,
+ *          the ptr in the ptraa is set to NULL, and the caller
+ *          is responsible for disposing of the ptra (either putting it
+ *          back on the ptraa, or destroying it).
+ *      (2) This returns NULL if there is no Ptra at the index location.
+ * 
+ */ +L_PTRA * +ptraaGetPtra(L_PTRAA *paa, + l_int32 index, + l_int32 accessflag) +{ +l_int32 n; +L_PTRA *pa; + + PROCNAME("ptraaGetPtra"); + + if (!paa) + return (L_PTRA *)ERROR_PTR("paa not defined", procName, NULL); + ptraaGetSize(paa, &n); + if (index < 0 || index >= n) + return (L_PTRA *)ERROR_PTR("invalid index", procName, NULL); + if (accessflag != L_HANDLE_ONLY && accessflag != L_REMOVE) + return (L_PTRA *)ERROR_PTR("invalid accessflag", procName, NULL); + + pa = paa->ptra[index]; + if (accessflag == L_REMOVE) + paa->ptra[index] = NULL; + return pa; +} + + +/*--------------------------------------------------------------------------* + * Ptraa conversion * + *--------------------------------------------------------------------------*/ +/*! + * \brief ptraaFlattenToPtra() + * + * \param[in] paa ptraa + * \return ptra, or NULL on error + * + *
+ * Notes:
+ *      (1) This 'flattens' the ptraa to a ptra, taking the items in
+ *          each ptra, in order, starting with the first ptra, etc.
+ *      (2) As a side-effect, the ptra are all removed from the ptraa
+ *          and destroyed, leaving an empty ptraa.
+ * 
+ */ +L_PTRA * +ptraaFlattenToPtra(L_PTRAA *paa) +{ +l_int32 i, n; +L_PTRA *pat, *pad; + + PROCNAME("ptraaFlattenToPtra"); + + if (!paa) + return (L_PTRA *)ERROR_PTR("paa not defined", procName, NULL); + + pad = ptraCreate(0); + ptraaGetSize(paa, &n); + for (i = 0; i < n; i++) { + pat = ptraaGetPtra(paa, i, L_REMOVE); + if (!pat) continue; + ptraJoin(pad, pat); + ptraDestroy(&pat, FALSE, FALSE); /* they're all empty */ + } + + return pad; +} diff --git a/3rdparty/hgOCR/leptonica/ptra.h b/3rdparty/hgOCR/leptonica/ptra.h new file mode 100644 index 00000000..dc5216cd --- /dev/null +++ b/3rdparty/hgOCR/leptonica/ptra.h @@ -0,0 +1,95 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_PTRA_H +#define LEPTONICA_PTRA_H + +/*! + * \file ptra.h + * + *
+ *  Contains the following structs:
+ *      struct L_Ptra
+ *      struct L_Ptraa
+ *
+ *  Contains definitions for:
+ *      L_Ptra compaction flags for removal
+ *      L_Ptra shifting flags for insert
+ *      L_Ptraa accessor flags
+ * 
+ */ + + +/*------------------------------------------------------------------------* + * Generic Ptr Array Structs * + *------------------------------------------------------------------------*/ + + /*! Generic pointer array */ +struct L_Ptra +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 imax; /*!< greatest valid index */ + l_int32 nactual; /*!< actual number of stored elements */ + void **array; /*!< ptr array */ +}; +typedef struct L_Ptra L_PTRA; + + + /*! Array of generic pointer arrays */ +struct L_Ptraa +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + struct L_Ptra **ptra; /*!< array of ptra */ +}; +typedef struct L_Ptraa L_PTRAA; + + + +/*------------------------------------------------------------------------* + * Accessor and modifier flags for L_Ptra and L_Ptraa * + *------------------------------------------------------------------------*/ + +/*! Ptra Removal */ +enum { + L_NO_COMPACTION = 1, /*!< null the pointer only */ + L_COMPACTION = 2 /*!< compact the array */ +}; + +/*! Ptra Insertion */ +enum { + L_AUTO_DOWNSHIFT = 0, /*!< choose based on number of holes */ + L_MIN_DOWNSHIFT = 1, /*!< downshifts min # of ptrs below insert */ + L_FULL_DOWNSHIFT = 2 /*!< downshifts all ptrs below insert */ +}; + +/*! Ptraa Accessor */ +enum { + L_HANDLE_ONLY = 0, /*!< ptr to L_Ptra; caller can inspect only */ + L_REMOVE = 1 /*!< caller owns; destroy or save in L_Ptraa */ +}; + + +#endif /* LEPTONICA_PTRA_H */ diff --git a/3rdparty/hgOCR/leptonica/quadtree.c b/3rdparty/hgOCR/leptonica/quadtree.c new file mode 100644 index 00000000..bdcef13d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/quadtree.c @@ -0,0 +1,697 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file quadtree.c + *
+ *
+ *      Top level quadtree linear statistics
+ *          l_int32   pixQuadtreeMean()
+ *          l_int32   pixQuadtreeVariance()
+ *
+ *      Statistics in an arbitrary rectangle
+ *          l_int32   pixMeanInRectangle()
+ *          l_int32   pixVarianceInRectangle()
+ *
+ *      Quadtree regions
+ *          BOXAA    *boxaaQuadtreeRegions()
+ *
+ *      Quadtree access
+ *          l_int32   quadtreeGetParent()
+ *          l_int32   quadtreeGetChildren()
+ *          l_int32   quadtreeMaxLevels()
+ *
+ *      Display quadtree
+ *          PIX      *fpixaDisplayQuadtree()
+ *
+ *
+ *  There are many other statistical quantities that can be computed
+ *  in a quadtree, such as rank values, and these can be added as
+ *  the need arises.
+ *
+ *  Similar results that can approximate a single level of the quadtree
+ *  can be generated by pixGetAverageTiled().  There we specify the
+ *  tile size over which the mean, mean square, and root variance
+ *  are generated; the results are saved in a (reduced size) pix.
+ *  Because the tile dimensions are integers, it is usually not possible
+ *  to obtain tilings that are a power of 2, as required for quadtrees.
+ * 
+ */ + +#include +#include "allheaders.h" + +#ifndef NO_CONSOLE_IO +#define DEBUG_BOXES 0 +#endif /* !NO_CONSOLE_IO */ + + +/*----------------------------------------------------------------------* + * Top-level quadtree linear statistics * + *----------------------------------------------------------------------*/ +/*! + * \brief pixQuadtreeMean() + * + * \param[in] pixs 8 bpp, no colormap + * \param[in] nlevels in quadtree; max allowed depends on image size + * \param[in] pix_ma input mean accumulator; can be null + * \param[out] pfpixa mean values in quadtree + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned fpixa has %nlevels of fpix, each containing
+ *          the mean values at its level.  Level 0 has a
+ *          single value; level 1 has 4 values; level 2 has 16; etc.
+ * 
+ */ +l_ok +pixQuadtreeMean(PIX *pixs, + l_int32 nlevels, + PIX *pix_ma, + FPIXA **pfpixa) +{ +l_int32 i, j, w, h, size, n; +l_float32 val; +BOX *box; +BOXA *boxa; +BOXAA *baa; +FPIX *fpix; +PIX *pix_mac; + + PROCNAME("pixQuadtreeMean"); + + if (!pfpixa) + return ERROR_INT("&fpixa not defined", procName, 1); + *pfpixa = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (nlevels > quadtreeMaxLevels(w, h)) + return ERROR_INT("nlevels too large for image", procName, 1); + + if (!pix_ma) + pix_mac = pixBlockconvAccum(pixs); + else + pix_mac = pixClone(pix_ma); + if (!pix_mac) + return ERROR_INT("pix_mac not made", procName, 1); + + if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { + pixDestroy(&pix_mac); + return ERROR_INT("baa not made", procName, 1); + } + + *pfpixa = fpixaCreate(nlevels); + for (i = 0; i < nlevels; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + size = 1 << i; + n = boxaGetCount(boxa); /* n == size * size */ + fpix = fpixCreate(size, size); + for (j = 0; j < n; j++) { + box = boxaGetBox(boxa, j, L_CLONE); + pixMeanInRectangle(pixs, box, pix_mac, &val); + fpixSetPixel(fpix, j % size, j / size, val); + boxDestroy(&box); + } + fpixaAddFPix(*pfpixa, fpix, L_INSERT); + boxaDestroy(&boxa); + } + + pixDestroy(&pix_mac); + boxaaDestroy(&baa); + return 0; +} + + +/*! + * \brief pixQuadtreeVariance() + * + * \param[in] pixs 8 bpp, no colormap + * \param[in] nlevels in quadtree + * \param[in] pix_ma input mean accumulator; can be null + * \param[in] dpix_msa input mean square accumulator; can be null + * \param[out] pfpixa_v [optional] variance values in quadtree + * \param[out] pfpixa_rv [optional] root variance values in quadtree + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned fpixav and fpixarv have %nlevels of fpix,
+ *          each containing at the respective levels the variance
+ *          and root variance values.
+ * 
+ */ +l_ok +pixQuadtreeVariance(PIX *pixs, + l_int32 nlevels, + PIX *pix_ma, + DPIX *dpix_msa, + FPIXA **pfpixa_v, + FPIXA **pfpixa_rv) +{ +l_int32 i, j, w, h, size, n; +l_float32 var, rvar; +BOX *box; +BOXA *boxa; +BOXAA *baa; +FPIX *fpixv, *fpixrv; +PIX *pix_mac; /* copy of mean accumulator */ +DPIX *dpix_msac; /* msa clone */ + + PROCNAME("pixQuadtreeVariance"); + + if (!pfpixa_v && !pfpixa_rv) + return ERROR_INT("neither &fpixav nor &fpixarv defined", procName, 1); + if (pfpixa_v) *pfpixa_v = NULL; + if (pfpixa_rv) *pfpixa_rv = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + if (nlevels > quadtreeMaxLevels(w, h)) + return ERROR_INT("nlevels too large for image", procName, 1); + + if (!pix_ma) + pix_mac = pixBlockconvAccum(pixs); + else + pix_mac = pixClone(pix_ma); + if (!pix_mac) + return ERROR_INT("pix_mac not made", procName, 1); + if (!dpix_msa) + dpix_msac = pixMeanSquareAccum(pixs); + else + dpix_msac = dpixClone(dpix_msa); + if (!dpix_msac) { + pixDestroy(&pix_mac); + return ERROR_INT("dpix_msac not made", procName, 1); + } + + if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { + pixDestroy(&pix_mac); + dpixDestroy(&dpix_msac); + return ERROR_INT("baa not made", procName, 1); + } + + if (pfpixa_v) *pfpixa_v = fpixaCreate(nlevels); + if (pfpixa_rv) *pfpixa_rv = fpixaCreate(nlevels); + for (i = 0; i < nlevels; i++) { + boxa = boxaaGetBoxa(baa, i, L_CLONE); + size = 1 << i; + n = boxaGetCount(boxa); /* n == size * size */ + if (pfpixa_v) fpixv = fpixCreate(size, size); + if (pfpixa_rv) fpixrv = fpixCreate(size, size); + for (j = 0; j < n; j++) { + box = boxaGetBox(boxa, j, L_CLONE); + pixVarianceInRectangle(pixs, box, pix_mac, dpix_msac, &var, &rvar); + if (pfpixa_v) fpixSetPixel(fpixv, j % size, j / size, var); + if (pfpixa_rv) fpixSetPixel(fpixrv, j % size, j / size, rvar); + boxDestroy(&box); + } + if (pfpixa_v) fpixaAddFPix(*pfpixa_v, fpixv, L_INSERT); + if (pfpixa_rv) fpixaAddFPix(*pfpixa_rv, fpixrv, L_INSERT); + boxaDestroy(&boxa); + } + + pixDestroy(&pix_mac); + dpixDestroy(&dpix_msac); + boxaaDestroy(&baa); + return 0; +} + + +/*----------------------------------------------------------------------* + * Statistics in an arbitrary rectangle * + *----------------------------------------------------------------------*/ +/*! + * \brief pixMeanInRectangle() + * + * \param[in] pixs 8 bpp + * \param[in] box region to compute mean value + * \param[in] pixma mean accumulator + * \param[out] pval mean value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function is intended to be used for many rectangles
+ *          on the same image.  It can find the mean within a
+ *          rectangle in O(1), independent of the size of the rectangle.
+ * 
+ */ +l_ok +pixMeanInRectangle(PIX *pixs, + BOX *box, + PIX *pixma, + l_float32 *pval) +{ +l_int32 w, h, bx, by, bw, bh; +l_uint32 val00, val01, val10, val11; +l_float32 norm; +BOX *boxc; + + PROCNAME("pixMeanInRectangle"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (!pixma) + return ERROR_INT("pixma not defined", procName, 1); + + /* Clip rectangle to image */ + pixGetDimensions(pixs, &w, &h, NULL); + boxc = boxClipToRectangle(box, w, h); + boxGetGeometry(boxc, &bx, &by, &bw, &bh); + boxDestroy(&boxc); + + if (bw == 0 || bh == 0) + return ERROR_INT("no pixels in box", procName, 1); + + /* Use up to 4 points in the accumulator */ + norm = 1.0 / ((l_float32)(bw) * bh); + if (bx > 0 && by > 0) { + pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11); + pixGetPixel(pixma, bx + bw - 1, by - 1, &val10); + pixGetPixel(pixma, bx - 1, by + bh - 1, &val01); + pixGetPixel(pixma, bx - 1, by - 1, &val00); + *pval = norm * (val11 - val01 + val00 - val10); + } else if (by > 0) { /* bx == 0 */ + pixGetPixel(pixma, bw - 1, by + bh - 1, &val11); + pixGetPixel(pixma, bw - 1, by - 1, &val10); + *pval = norm * (val11 - val10); + } else if (bx > 0) { /* by == 0 */ + pixGetPixel(pixma, bx + bw - 1, bh - 1, &val11); + pixGetPixel(pixma, bx - 1, bh - 1, &val01); + *pval = norm * (val11 - val01); + } else { /* bx == 0 && by == 0 */ + pixGetPixel(pixma, bw - 1, bh - 1, &val11); + *pval = norm * val11; + } + + return 0; +} + + +/*! + * \brief pixVarianceInRectangle() + * + * \param[in] pixs 8 bpp + * \param[in] box region to compute variance and/or root variance + * \param[in] pix_ma mean accumulator + * \param[in] dpix_msa mean square accumulator + * \param[out] pvar [optional] variance + * \param[out] prvar [optional] root variance + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function is intended to be used for many rectangles
+ *          on the same image.  It can find the variance and/or the
+ *          square root of the variance within a rectangle in O(1),
+ *          independent of the size of the rectangle.
+ * 
+ */ +l_ok +pixVarianceInRectangle(PIX *pixs, + BOX *box, + PIX *pix_ma, + DPIX *dpix_msa, + l_float32 *pvar, + l_float32 *prvar) +{ +l_int32 w, h, bx, by, bw, bh; +l_uint32 val00, val01, val10, val11; +l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm; +BOX *boxc; + + PROCNAME("pixVarianceInRectangle"); + + if (!pvar && !prvar) + return ERROR_INT("neither &var nor &rvar defined", procName, 1); + if (pvar) *pvar = 0.0; + if (prvar) *prvar = 0.0; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined", procName, 1); + if (!box) + return ERROR_INT("box not defined", procName, 1); + if (!pix_ma) + return ERROR_INT("pix_ma not defined", procName, 1); + if (!dpix_msa) + return ERROR_INT("dpix_msa not defined", procName, 1); + + /* Clip rectangle to image */ + pixGetDimensions(pixs, &w, &h, NULL); + boxc = boxClipToRectangle(box, w, h); + boxGetGeometry(boxc, &bx, &by, &bw, &bh); + boxDestroy(&boxc); + + if (bw == 0 || bh == 0) + return ERROR_INT("no pixels in box", procName, 1); + + /* Use up to 4 points in the accumulators */ + norm = 1.0 / ((l_float32)(bw) * bh); + if (bx > 0 && by > 0) { + pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11); + pixGetPixel(pix_ma, bx + bw - 1, by - 1, &val10); + pixGetPixel(pix_ma, bx - 1, by + bh - 1, &val01); + pixGetPixel(pix_ma, bx - 1, by - 1, &val00); + dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11); + dpixGetPixel(dpix_msa, bx + bw - 1, by - 1, &dval10); + dpixGetPixel(dpix_msa, bx - 1, by + bh - 1, &dval01); + dpixGetPixel(dpix_msa, bx - 1, by - 1, &dval00); + mval = norm * (val11 - val01 + val00 - val10); + msval = norm * (dval11 - dval01 + dval00 - dval10); + var = (msval - mval * mval); + if (pvar) *pvar = (l_float32)var; + if (prvar) *prvar = (l_float32)(sqrt(var)); + } else if (by > 0) { /* bx == 0 */ + pixGetPixel(pix_ma, bw - 1, by + bh - 1, &val11); + pixGetPixel(pix_ma, bw - 1, by - 1, &val10); + dpixGetPixel(dpix_msa, bw - 1, by + bh - 1, &dval11); + dpixGetPixel(dpix_msa, bw - 1, by - 1, &dval10); + mval = norm * (val11 - val10); + msval = norm * (dval11 - dval10); + var = (msval - mval * mval); + if (pvar) *pvar = (l_float32)var; + if (prvar) *prvar = (l_float32)(sqrt(var)); + } else if (bx > 0) { /* by == 0 */ + pixGetPixel(pix_ma, bx + bw - 1, bh - 1, &val11); + pixGetPixel(pix_ma, bx - 1, bh - 1, &val01); + dpixGetPixel(dpix_msa, bx + bw - 1, bh - 1, &dval11); + dpixGetPixel(dpix_msa, bx - 1, bh - 1, &dval01); + mval = norm * (val11 - val01); + msval = norm * (dval11 - dval01); + var = (msval - mval * mval); + if (pvar) *pvar = (l_float32)var; + if (prvar) *prvar = (l_float32)(sqrt(var)); + } else { /* bx == 0 && by == 0 */ + pixGetPixel(pix_ma, bw - 1, bh - 1, &val11); + dpixGetPixel(dpix_msa, bw - 1, bh - 1, &dval11); + mval = norm * val11; + msval = norm * dval11; + var = (msval - mval * mval); + if (pvar) *pvar = (l_float32)var; + if (prvar) *prvar = (l_float32)(sqrt(var)); + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Quadtree regions * + *----------------------------------------------------------------------*/ +/*! + * \brief boxaaQuadtreeRegions() + * + * \param[in] w, h size of pix that is being quadtree-ized + * \param[in] nlevels number of levels in quadtree + * \return baa for quadtree regions at each level, or NULL on error + * + *
+ * Notes:
+ *      (1) The returned boxaa has %nlevels of boxa, each containing
+ *          the set of rectangles at that level.  The rectangle at
+ *          level 0 is the entire region; at level 1 the region is
+ *          divided into 4 rectangles, and at level n there are n^4
+ *          rectangles.
+ *      (2) At each level, the rectangles in the boxa are in "raster"
+ *          order, with LR (fast scan) and TB (slow scan).
+ * 
+ */ +BOXAA * +boxaaQuadtreeRegions(l_int32 w, + l_int32 h, + l_int32 nlevels) +{ +l_int32 i, j, k, maxpts, nside, nbox, bw, bh; +l_int32 *xstart, *xend, *ystart, *yend; +BOX *box; +BOXA *boxa; +BOXAA *baa; + + PROCNAME("boxaaQuadtreeRegions"); + + if (nlevels < 1) + return (BOXAA *)ERROR_PTR("nlevels must be >= 1", procName, NULL); + if (w < (1 << (nlevels - 1))) + return (BOXAA *)ERROR_PTR("w doesn't support nlevels", procName, NULL); + if (h < (1 << (nlevels - 1))) + return (BOXAA *)ERROR_PTR("h doesn't support nlevels", procName, NULL); + + baa = boxaaCreate(nlevels); + maxpts = 1 << (nlevels - 1); + xstart = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); + xend = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); + ystart = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); + yend = (l_int32 *)LEPT_CALLOC(maxpts, sizeof(l_int32)); + for (k = 0; k < nlevels; k++) { + nside = 1 << k; /* number of boxes in each direction */ + for (i = 0; i < nside; i++) { + xstart[i] = (w - 1) * i / nside; + if (i > 0) xstart[i]++; + xend[i] = (w - 1) * (i + 1) / nside; + ystart[i] = (h - 1) * i / nside; + if (i > 0) ystart[i]++; + yend[i] = (h - 1) * (i + 1) / nside; +#if DEBUG_BOXES + fprintf(stderr, + "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n", + k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]); +#endif /* DEBUG_BOXES */ + } + nbox = 1 << (2 * k); + boxa = boxaCreate(nbox); + for (i = 0; i < nside; i++) { + bh = yend[i] - ystart[i] + 1; + for (j = 0; j < nside; j++) { + bw = xend[j] - xstart[j] + 1; + box = boxCreate(xstart[j], ystart[i], bw, bh); + boxaAddBox(boxa, box, L_INSERT); + } + } + boxaaAddBoxa(baa, boxa, L_INSERT); + } + + LEPT_FREE(xstart); + LEPT_FREE(xend); + LEPT_FREE(ystart); + LEPT_FREE(yend); + return baa; +} + + +/*----------------------------------------------------------------------* + * Quadtree access * + *----------------------------------------------------------------------*/ +/*! + * \brief quadtreeGetParent() + * + * \param[in] fpixa mean, variance or root variance + * \param[in] level, x, y of current pixel + * \param[out] pval parent pixel value, or 0.0 on error + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Check return value for error.  On error, val is returned as 0.0.
+ *      (2) The parent is located at:
+ *             level - 1
+ *             (x/2, y/2)
+ * 
+ */ +l_ok +quadtreeGetParent(FPIXA *fpixa, + l_int32 level, + l_int32 x, + l_int32 y, + l_float32 *pval) +{ +l_int32 n; + + PROCNAME("quadtreeGetParent"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0.0; + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + n = fpixaGetCount(fpixa); + if (level < 1 || level >= n) + return ERROR_INT("invalid level", procName, 1); + + if (fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0) + return ERROR_INT("invalid coordinates", procName, 1); + return 0; +} + + +/*! + * \brief quadtreeGetChildren() + * + * \param[in] fpixa mean, variance or root variance + * \param[in] level, x, y of current pixel + * \param[out] pval00, pval01, + * pval10, pval11 four child pixel values + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Check return value for error.  On error, all return vals are 0.0.
+ *      (2) The returned child pixels are located at:
+ *             level + 1
+ *             (2x, 2y), (2x+1, 2y), (2x, 2y+1), (2x+1, 2y+1)
+ * 
+ */ +l_ok +quadtreeGetChildren(FPIXA *fpixa, + l_int32 level, + l_int32 x, + l_int32 y, + l_float32 *pval00, + l_float32 *pval10, + l_float32 *pval01, + l_float32 *pval11) +{ +l_int32 n; + + PROCNAME("quadtreeGetChildren"); + + if (!pval00 || !pval01 || !pval10 || !pval11) + return ERROR_INT("&val* not all defined", procName, 1); + *pval00 = *pval10 = *pval01 = *pval11 = 0.0; + if (!fpixa) + return ERROR_INT("fpixa not defined", procName, 1); + n = fpixaGetCount(fpixa); + if (level < 0 || level >= n - 1) + return ERROR_INT("invalid level", procName, 1); + + if (fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0) + return ERROR_INT("invalid coordinates", procName, 1); + fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y, pval10); + fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y + 1, pval01); + fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11); + return 0; +} + + +/*! + * \brief quadtreeMaxLevels() + * + * \param[in] w, h dimensions of image + * \return maxlevels maximum number of levels allowed, or -1 on error + * + *
+ * Notes:
+ *      (1) The criterion for maxlevels is that the subdivision not
+ *          go down below the single pixel level.  The 1.5 factor
+ *          is intended to keep any rectangle from accidentally
+ *          having zero dimension due to integer truncation.
+ * 
+ */ +l_int32 +quadtreeMaxLevels(l_int32 w, + l_int32 h) +{ +l_int32 i, minside; + + minside = L_MIN(w, h); + for (i = 0; i < 20; i++) { /* 2^10 = one million */ + if (minside < (1.5 * (1 << i))) + return i - 1; + } + + return -1; /* fail if the image has over a trillion pixels! */ +} + + +/*----------------------------------------------------------------------* + * Display quadtree * + *----------------------------------------------------------------------*/ +/*! + * \brief fpixaDisplayQuadtree() + * + * \param[in] fpixa mean, variance or root variance + * \param[in] factor replication factor at lowest level + * \param[in] fontsize 4, ... 20 + * \return pixd 8 bpp, mosaic of quadtree images, or NULL on error + * + *
+ * Notes:
+ *      (1) The mean and root variance fall naturally in the 8 bpp range,
+ *          but the variance is typically outside the range.  This
+ *          function displays 8 bpp pix clipped to 255, so the image
+ *          pixels will mostly be 255 (white).
+ * 
+ */ +PIX * +fpixaDisplayQuadtree(FPIXA *fpixa, + l_int32 factor, + l_int32 fontsize) +{ +char buf[256]; +l_int32 nlevels, i, mag, w; +L_BMF *bmf; +FPIX *fpix; +PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd; +PIXA *pixat; + + PROCNAME("fpixaDisplayQuadtree"); + + if (!fpixa) + return (PIX *)ERROR_PTR("fpixa not defined", procName, NULL); + + if ((nlevels = fpixaGetCount(fpixa)) == 0) + return (PIX *)ERROR_PTR("pixas empty", procName, NULL); + + if ((bmf = bmfCreate(NULL, fontsize)) == NULL) + L_ERROR("bmf not made; text will not be added", procName); + pixat = pixaCreate(nlevels); + for (i = 0; i < nlevels; i++) { + fpix = fpixaGetFPix(fpixa, i, L_CLONE); + pixt1 = fpixConvertToPix(fpix, 8, L_CLIP_TO_ZERO, 0); + mag = factor * (1 << (nlevels - i - 1)); + pixt2 = pixExpandReplicate(pixt1, mag); + pixt3 = pixConvertTo32(pixt2); + snprintf(buf, sizeof(buf), "Level %d\n", i); + pixt4 = pixAddSingleTextblock(pixt3, bmf, buf, 0xff000000, + L_ADD_BELOW, NULL); + pixaAddPix(pixat, pixt4, L_INSERT); + fpixDestroy(&fpix); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixDestroy(&pixt3); + } + w = pixGetWidth(pixt4); + pixd = pixaDisplayTiledInRows(pixat, 32, nlevels * (w + 80), 1.0, 0, 30, 2); + + pixaDestroy(&pixat); + bmfDestroy(&bmf); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/queue.c b/3rdparty/hgOCR/leptonica/queue.c new file mode 100644 index 00000000..568e68eb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/queue.c @@ -0,0 +1,323 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file queue.c + *
+ *
+ *      Create/Destroy L_Queue
+ *          L_QUEUE        *lqueueCreate()
+ *          void           *lqueueDestroy()
+ *
+ *      Operations to add/remove to/from a L_Queue
+ *          l_int32         lqueueAdd()
+ *          static l_int32  lqueueExtendArray()
+ *          void           *lqueueRemove()
+ *
+ *      Accessors
+ *          l_int32         lqueueGetCount()
+ *
+ *      Debug output
+ *          l_int32         lqueuePrint()
+ *
+ *    The lqueue is a fifo that implements a queue of void* pointers.
+ *    It can be used to hold a queue of any type of struct.
+ *    Internally, it maintains two counters:
+ *        nhead:  location of head (in ptrs) from the beginning
+ *                of the buffer
+ *        nelem:  number of ptr elements stored in the queue
+ *    As items are added to the queue, nelem increases.
+ *    As items are removed, nhead increases and nelem decreases.
+ *    Any time the tail reaches the end of the allocated buffer,
+ *      all the pointers are shifted to the left, so that the head
+ *      is at the beginning of the array.
+ *    If the buffer becomes more than 3/4 full, it doubles in size.
+ *
+ *    [A circular queue would allow us to skip the shifting and
+ *    to resize only when the buffer is full.  For most applications,
+ *    the extra work we do for a linear queue is not significant.]
+ * 
+ */ + +#include +#include "allheaders.h" + +static const l_int32 MIN_BUFFER_SIZE = 20; /* n'importe quoi */ +static const l_int32 INITIAL_BUFFER_ARRAYSIZE = 1024; /* n'importe quoi */ + + /* Static function */ +static l_int32 lqueueExtendArray(L_QUEUE *lq); + + +/*--------------------------------------------------------------------------* + * L_Queue create/destroy * + *--------------------------------------------------------------------------*/ +/*! + * \brief lqueueCreate() + * + * \param[in] nalloc size of ptr array to be alloc'd; 0 for default + * \return lqueue, or NULL on error + * + *
+ * Notes:
+ *      (1) Allocates a ptr array of given size, and initializes counters.
+ * 
+ */ +L_QUEUE * +lqueueCreate(l_int32 nalloc) +{ +L_QUEUE *lq; + + PROCNAME("lqueueCreate"); + + if (nalloc < MIN_BUFFER_SIZE) + nalloc = INITIAL_BUFFER_ARRAYSIZE; + + lq = (L_QUEUE *)LEPT_CALLOC(1, sizeof(L_QUEUE)); + if ((lq->array = (void **)LEPT_CALLOC(nalloc, sizeof(void *))) == NULL) { + lqueueDestroy(&lq, 0); + return (L_QUEUE *)ERROR_PTR("ptr array not made", procName, NULL); + } + lq->nalloc = nalloc; + lq->nhead = lq->nelem = 0; + return lq; +} + + +/*! + * \brief lqueueDestroy() + * + * \param[in,out] plq will be set to null before returning + * \param[in] freeflag TRUE to free each remaining struct in the array + * \return void + * + *
+ * Notes:
+ *      (1) If freeflag is TRUE, frees each struct in the array.
+ *      (2) If freeflag is FALSE but there are elements on the array,
+ *          gives a warning and destroys the array.  This will
+ *          cause a memory leak of all the items that were on the queue.
+ *          So if the items require their own destroy function, they
+ *          must be destroyed before the queue.  The same applies to the
+ *          auxiliary stack, if it is used.
+ *      (3) To destroy the L_Queue, we destroy the ptr array, then
+ *          the lqueue, and then null the contents of the input ptr.
+ * 
+ */ +void +lqueueDestroy(L_QUEUE **plq, + l_int32 freeflag) +{ +void *item; +L_QUEUE *lq; + + PROCNAME("lqueueDestroy"); + + if (plq == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((lq = *plq) == NULL) + return; + + if (freeflag) { + while(lq->nelem > 0) { + item = lqueueRemove(lq); + LEPT_FREE(item); + } + } else if (lq->nelem > 0) { + L_WARNING("memory leak of %d items in lqueue!\n", procName, lq->nelem); + } + + if (lq->array) + LEPT_FREE(lq->array); + if (lq->stack) + lstackDestroy(&lq->stack, freeflag); + LEPT_FREE(lq); + *plq = NULL; + + return; +} + + +/*--------------------------------------------------------------------------* + * Accessors * + *--------------------------------------------------------------------------*/ +/*! + * \brief lqueueAdd() + * + * \param[in] lq lqueue + * \param[in] item to be added to the tail of the queue + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The algorithm is as follows.  If the queue is populated
+ *          to the end of the allocated array, shift all ptrs toward
+ *          the beginning of the array, so that the head of the queue
+ *          is at the beginning of the array.  Then, if the array is
+ *          more than 0.75 full, realloc with double the array size.
+ *          Finally, add the item to the tail of the queue.
+ * 
+ */ +l_ok +lqueueAdd(L_QUEUE *lq, + void *item) +{ + PROCNAME("lqueueAdd"); + + if (!lq) + return ERROR_INT("lq not defined", procName, 1); + if (!item) + return ERROR_INT("item not defined", procName, 1); + + /* If filled to the end and the ptrs can be shifted to the left, + * shift them. */ + if ((lq->nhead + lq->nelem >= lq->nalloc) && (lq->nhead != 0)) { + memmove(lq->array, lq->array + lq->nhead, sizeof(void *) * lq->nelem); + lq->nhead = 0; + } + + /* If necessary, expand the allocated array by a factor of 2 */ + if (lq->nelem > 0.75 * lq->nalloc) + lqueueExtendArray(lq); + + /* Now add the item */ + lq->array[lq->nhead + lq->nelem] = (void *)item; + lq->nelem++; + + return 0; +} + + +/*! + * \brief lqueueExtendArray() + * + * \param[in] lq lqueue + * \return 0 if OK, 1 on error + */ +static l_int32 +lqueueExtendArray(L_QUEUE *lq) +{ + PROCNAME("lqueueExtendArray"); + + if (!lq) + return ERROR_INT("lq not defined", procName, 1); + + if ((lq->array = (void **)reallocNew((void **)&lq->array, + sizeof(void *) * lq->nalloc, + 2 * sizeof(void *) * lq->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + lq->nalloc = 2 * lq->nalloc; + return 0; +} + + +/*! + * \brief lqueueRemove() + * + * \param[in] lq lqueue + * \return ptr to item popped from the head of the queue, + * or NULL if the queue is empty or on error + * + *
+ * Notes:
+ *      (1) If this is the last item on the queue, so that the queue
+ *          becomes empty, nhead is reset to the beginning of the array.
+ * 
+ */ +void * +lqueueRemove(L_QUEUE *lq) +{ +void *item; + + PROCNAME("lqueueRemove"); + + if (!lq) + return (void *)ERROR_PTR("lq not defined", procName, NULL); + + if (lq->nelem == 0) + return NULL; + item = lq->array[lq->nhead]; + lq->array[lq->nhead] = NULL; + if (lq->nelem == 1) + lq->nhead = 0; /* reset head ptr */ + else + (lq->nhead)++; /* can't go off end of array because nelem > 1 */ + lq->nelem--; + return item; +} + + +/*! + * \brief lqueueGetCount() + * + * \param[in] lq lqueue + * \return count, or 0 on error + */ +l_int32 +lqueueGetCount(L_QUEUE *lq) +{ + PROCNAME("lqueueGetCount"); + + if (!lq) + return ERROR_INT("lq not defined", procName, 0); + + return lq->nelem; +} + + +/*---------------------------------------------------------------------* + * Debug output * + *---------------------------------------------------------------------*/ +/*! + * \brief lqueuePrint() + * + * \param[in] fp file stream + * \param[in] lq lqueue + * \return 0 if OK; 1 on error + */ +l_ok +lqueuePrint(FILE *fp, + L_QUEUE *lq) +{ +l_int32 i; + + PROCNAME("lqueuePrint"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!lq) + return ERROR_INT("lq not defined", procName, 1); + + fprintf(fp, "\n L_Queue: nalloc = %d, nhead = %d, nelem = %d, array = %p\n", + lq->nalloc, lq->nhead, lq->nelem, lq->array); + for (i = lq->nhead; i < lq->nhead + lq->nelem; i++) + fprintf(fp, "array[%d] = %p\n", i, lq->array[i]); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/queue.h b/3rdparty/hgOCR/leptonica/queue.h new file mode 100644 index 00000000..fd380e83 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/queue.h @@ -0,0 +1,77 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_QUEUE_H +#define LEPTONICA_QUEUE_H + +/*! + * \file queue.h + * + *
+ *      Expandable pointer queue for arbitrary void* data.
+ *
+ *      The L_Queue is a fifo that implements a queue of void* pointers.
+ *      It can be used to hold a queue of any type of struct.
+ *
+ *      Internally, it maintains two counters:
+ *          nhead:  location of head (in ptrs) from the beginning
+ *                  of the array.
+ *          nelem:  number of ptr elements stored in the queue.
+ *
+ *      The element at the head of the queue, which is the next to
+ *      be removed, is array[nhead].  The location at the tail of the
+ *      queue to which the next element will be added is
+ *      array[nhead + nelem].
+ *
+ *      As items are added to the queue, nelem increases.
+ *      As items are removed, nhead increases and nelem decreases.
+ *      Any time the tail reaches the end of the allocated array,
+ *      all the pointers are shifted to the left, so that the head
+ *      is at the beginning of the array.
+ *      If the array becomes more than 3/4 full, it doubles in size.
+ *
+ *      The auxiliary stack can be used in a wrapper for re-using
+ *      items popped from the queue.  It is not made by default.
+ *
+ *      For further implementation details, see queue.c.
+ * 
+ */ + +/*! Expandable pointer queue for arbitrary void* data */ +struct L_Queue +{ + l_int32 nalloc; /*!< size of allocated ptr array */ + l_int32 nhead; /*!< location of head (in ptrs) from the */ + /*!< beginning of the array */ + l_int32 nelem; /*!< number of elements stored in the queue */ + void **array; /*!< ptr array */ + struct L_Stack *stack; /*!< auxiliary stack */ + +}; +typedef struct L_Queue L_QUEUE; + + +#endif /* LEPTONICA_QUEUE_H */ diff --git a/3rdparty/hgOCR/leptonica/rank.c b/3rdparty/hgOCR/leptonica/rank.c new file mode 100644 index 00000000..90722a4d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rank.c @@ -0,0 +1,540 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file rank.c + *
+ *
+ *      Rank filter (gray and rgb)
+ *          PIX      *pixRankFilter()
+ *          PIX      *pixRankFilterRGB()
+ *          PIX      *pixRankFilterGray()
+ *
+ *      Median filter
+ *          PIX      *pixMedianFilter()
+ *
+ *      Rank filter (accelerated with downscaling)
+ *          PIX      *pixRankFilterWithScaling()
+ *
+ *  What is a brick rank filter?
+ *
+ *    A brick rank order filter evaluates, for every pixel in the image,
+ *    a rectangular set of n = wf x hf pixels in its neighborhood (where the
+ *    pixel in question is at the "center" of the rectangle and is
+ *    included in the evaluation).  It determines the value of the
+ *    neighboring pixel that is the r-th smallest in the set,
+ *    where r is some integer between 1 and n.  The input rank parameter
+ *    is a fraction between 0.0 and 1.0, where 0.0 represents the
+ *    smallest value (r = 1) and 1.0 represents the largest value (r = n).
+ *    A median filter is a rank filter where rank = 0.5.
+ *
+ *    It is important to note that grayscale erosion is equivalent
+ *    to rank = 0.0, and grayscale dilation is equivalent to rank = 1.0.
+ *    These are much easier to calculate than the general rank value,
+ *    thanks to the van Herk/Gil-Werman algorithm:
+ *       http://www.leptonica.com/grayscale-morphology.html
+ *    so you should use pixErodeGray() and pixDilateGray() for
+ *    rank 0.0 and 1.0, rsp.  See notes below in the function header.
+ *
+ *  How is a rank filter implemented efficiently on an image?
+ *
+ *    Sorting will not work.
+ *
+ *      * The best sort algorithms are O(n*logn), where n is the number
+ *        of values to be sorted (the area of the filter).  For large
+ *        filters this is an impractically large number.
+ *
+ *      * Selection of the rank value is O(n).  (To understand why it's not
+ *        O(n*logn), see Numerical Recipes in C, 2nd edition, 1992,  p. 355ff).
+ *        This also still far too much computation for large filters.
+ *
+ *      * Suppose we get clever.  We really only need to do an incremental
+ *        selection or sorting, because, for example, moving the filter
+ *        down by one pixel causes one filter width of pixels to be added
+ *        and another to be removed.  Can we do this incrementally in
+ *        an efficient way?  Unfortunately, no.  The sorted values will be
+ *        in an array.  Even if the filter width is 1, we can expect to
+ *        have to move O(n) pixels, because insertion and deletion can happen
+ *        anywhere in the array.  By comparison, heapsort is excellent for
+ *        incremental sorting, where the cost for insertion or deletion
+ *        is O(logn), because the array itself doesn't need to
+ *        be sorted into strictly increasing order.  However, heapsort
+ *        only gives the max (or min) value, not the general rank value.
+ *
+ *    This leaves histograms.
+ *
+ *      * Represented as an array.  The problem with an array of 256
+ *        bins is that, in general, a significant fraction of the
+ *        entire histogram must be summed to find the rank value bin.
+ *        Suppose the filter size is 5x5.  You spend most of your time
+ *        adding zeroes.  Ouch!
+ *
+ *      * Represented as a linked list.  This would overcome the
+ *        summing-over-empty-bin problem, but you lose random access
+ *        for insertions and deletions.  No way.
+ *
+ *      * Two histogram solution.  Maintain two histograms with
+ *        bin sizes of 1 and 16.  Proceed from coarse to fine.
+ *        First locate the coarse bin for the given rank, of which
+ *        there are only 16.  Then, in the 256 entry (fine) histogram,
+ *        you need look at a maximum of 16 bins.  For each output
+ *        pixel, the average number of bins summed over, both in the
+ *        coarse and fine histograms, is thus 16.
+ *
+ *  If someone has a better method, please let me know!
+ *
+ *  The rank filtering operation is relatively expensive, compared to most
+ *  of the other imaging operations.  The speed is only weakly dependent
+ *  on the size of the rank filter.  On standard hardware, it runs at
+ *  about 10 Mpix/sec for a 50 x 50 filter, and 25 Mpix/sec for
+ *  a 5 x 5 filter.   For applications where the rank filter can be
+ *  performed on a downscaled image, significant speedup can be
+ *  achieved because the time goes as the square of the scaling factor.
+ *  We provide an interface that handles the details, and only
+ *  requires the amount of downscaling to be input.
+ * 
+ */ + +#include "allheaders.h" + +/*----------------------------------------------------------------------* + * Rank order filter * + *----------------------------------------------------------------------*/ +/*! + * \brief pixRankFilter() + * + * \param[in] pixs 8 or 32 bpp; no colormap + * \param[in] wf, hf width and height of filter; each is >= 1 + * \param[in] rank in [0.0 ... 1.0] + * \return pixd of rank values, or NULL on error + * + *
+ * Notes:
+ *      (1) This defines, for each pixel in pixs, a neighborhood of
+ *          pixels given by a rectangle "centered" on the pixel.
+ *          This set of wf*hf pixels has a distribution of values.
+ *          For each component, if the values are sorted in increasing
+ *          order, we choose the component such that rank*(wf*hf-1)
+ *          pixels have a lower or equal value and
+ *          (1-rank)*(wf*hf-1) pixels have an equal or greater value.
+ *      (2) See notes in pixRankFilterGray() for further details.
+ * 
+ */ +PIX * +pixRankFilter(PIX *pixs, + l_int32 wf, + l_int32 hf, + l_float32 rank) +{ +l_int32 d; + + PROCNAME("pixRankFilter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (wf < 1 || hf < 1) + return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); + if (wf == 1 && hf == 1) /* no-op */ + return pixCopy(NULL, pixs); + + if (d == 8) + return pixRankFilterGray(pixs, wf, hf, rank); + else /* d == 32 */ + return pixRankFilterRGB(pixs, wf, hf, rank); +} + + +/*! + * \brief pixRankFilterRGB() + * + * \param[in] pixs 32 bpp + * \param[in] wf, hf width and height of filter; each is >= 1 + * \param[in] rank in [0.0 ... 1.0] + * \return pixd of rank values, or NULL on error + * + *
+ * Notes:
+ *      (1) This defines, for each pixel in pixs, a neighborhood of
+ *          pixels given by a rectangle "centered" on the pixel.
+ *          This set of wf*hf pixels has a distribution of values.
+ *          For each component, if the values are sorted in increasing
+ *          order, we choose the component such that rank*(wf*hf-1)
+ *          pixels have a lower or equal value and
+ *          (1-rank)*(wf*hf-1) pixels have an equal or greater value.
+ *      (2) Apply gray rank filtering to each component independently.
+ *      (3) See notes in pixRankFilterGray() for further details.
+ * 
+ */ +PIX * +pixRankFilterRGB(PIX *pixs, + l_int32 wf, + l_int32 hf, + l_float32 rank) +{ +PIX *pixr, *pixg, *pixb, *pixrf, *pixgf, *pixbf, *pixd; + + PROCNAME("pixRankFilterRGB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (wf < 1 || hf < 1) + return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); + if (wf == 1 && hf == 1) /* no-op */ + return pixCopy(NULL, pixs); + + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + + pixrf = pixRankFilterGray(pixr, wf, hf, rank); + pixgf = pixRankFilterGray(pixg, wf, hf, rank); + pixbf = pixRankFilterGray(pixb, wf, hf, rank); + + pixd = pixCreateRGBImage(pixrf, pixgf, pixbf); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + pixDestroy(&pixrf); + pixDestroy(&pixgf); + pixDestroy(&pixbf); + return pixd; +} + + +/*! + * \brief pixRankFilterGray() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] wf, hf width and height of filter; each is >= 1 + * \param[in] rank in [0.0 ... 1.0] + * \return pixd of rank values, or NULL on error + * + *
+ * Notes:
+ *      (1) This defines, for each pixel in pixs, a neighborhood of
+ *          pixels given by a rectangle "centered" on the pixel.
+ *          This set of wf*hf pixels has a distribution of values,
+ *          and if they are sorted in increasing order, we choose
+ *          the pixel such that rank*(wf*hf-1) pixels have a lower
+ *          or equal value and (1-rank)*(wf*hf-1) pixels have an equal
+ *          or greater value.
+ *      (2) By this definition, the rank = 0.0 pixel has the lowest
+ *          value, and the rank = 1.0 pixel has the highest value.
+ *      (3) We add mirrored boundary pixels to avoid boundary effects,
+ *          and put the filter center at (0, 0).
+ *      (4) This dispatches to grayscale erosion or dilation if the
+ *          filter dimensions are odd and the rank is 0.0 or 1.0, rsp.
+ *      (5) Returns a copy if both wf and hf are 1.
+ *      (6) Uses row-major or column-major incremental updates to the
+ *          histograms depending on whether hf > wf or hv <= wf, rsp.
+ * 
+ */ +PIX * +pixRankFilterGray(PIX *pixs, + l_int32 wf, + l_int32 hf, + l_float32 rank) +{ +l_int32 w, h, d, i, j, k, m, n, rankloc, wplt, wpld, val, sum; +l_int32 *histo, *histo16; +l_uint32 *datat, *linet, *datad, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixRankFilterGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (wf < 1 || hf < 1) + return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); + if (wf == 1 && hf == 1) /* no-op */ + return pixCopy(NULL, pixs); + + /* For rank = 0.0, this is a grayscale erosion, and for rank = 1.0, + * a dilation. Grayscale morphology operations are implemented + * for filters of odd dimension, so we dispatch to grayscale + * morphology if both wf and hf are odd. Otherwise, we + * slightly adjust the rank (to get the correct behavior) and + * use the slower rank filter here. */ + if (wf % 2 && hf % 2) { + if (rank == 0.0) + return pixErodeGray(pixs, wf, hf); + else if (rank == 1.0) + return pixDilateGray(pixs, wf, hf); + } + if (rank == 0.0) rank = 0.0001; + if (rank == 1.0) rank = 0.9999; + + /* Add wf/2 to each side, and hf/2 to top and bottom of the + * image, mirroring for accuracy and to avoid special-casing + * the boundary. */ + if ((pixt = pixAddMirroredBorder(pixs, wf / 2, wf / 2, hf / 2, hf / 2)) + == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* Set up the two histogram arrays. */ + histo = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + histo16 = (l_int32 *)LEPT_CALLOC(16, sizeof(l_int32)); + rankloc = (l_int32)(rank * wf * hf); + + /* Place the filter center at (0, 0). This is just a + * convenient location, because it allows us to perform + * the rank filter over x:(0 ... w - 1) and y:(0 ... h - 1). */ + pixd = pixCreateTemplate(pixs); + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* If hf > wf, it's more efficient to use row-major scanning. + * Otherwise, traverse the image in use column-major order. */ + if (hf > wf) { + for (j = 0; j < w; j++) { /* row-major */ + /* Start each column with clean histogram arrays. */ + for (n = 0; n < 256; n++) + histo[n] = 0; + for (n = 0; n < 16; n++) + histo16[n] = 0; + + for (i = 0; i < h; i++) { /* fast scan on columns */ + /* Update the histos for the new location */ + lined = datad + i * wpld; + if (i == 0) { /* do full histo */ + for (k = 0; k < hf; k++) { + linet = datat + (i + k) * wplt; + for (m = 0; m < wf; m++) { + val = GET_DATA_BYTE(linet, j + m); + histo[val]++; + histo16[val >> 4]++; + } + } + } else { /* incremental update */ + linet = datat + (i - 1) * wplt; + for (m = 0; m < wf; m++) { /* remove top line */ + val = GET_DATA_BYTE(linet, j + m); + histo[val]--; + histo16[val >> 4]--; + } + linet = datat + (i + hf - 1) * wplt; + for (m = 0; m < wf; m++) { /* add bottom line */ + val = GET_DATA_BYTE(linet, j + m); + histo[val]++; + histo16[val >> 4]++; + } + } + + /* Find the rank value */ + sum = 0; + for (n = 0; n < 16; n++) { /* search over coarse histo */ + sum += histo16[n]; + if (sum > rankloc) { + sum -= histo16[n]; + break; + } + } + if (n == 16) { /* avoid accessing out of bounds */ + L_WARNING("n = 16; reducing\n", procName); + n = 15; + sum -= histo16[n]; + } + k = 16 * n; /* starting value in fine histo */ + for (m = 0; m < 16; m++) { + sum += histo[k]; + if (sum > rankloc) { + SET_DATA_BYTE(lined, j, k); + break; + } + k++; + } + } + } + } else { /* wf >= hf */ + for (i = 0; i < h; i++) { /* column-major */ + /* Start each row with clean histogram arrays. */ + for (n = 0; n < 256; n++) + histo[n] = 0; + for (n = 0; n < 16; n++) + histo16[n] = 0; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { /* fast scan on rows */ + /* Update the histos for the new location */ + if (j == 0) { /* do full histo */ + for (k = 0; k < hf; k++) { + linet = datat + (i + k) * wplt; + for (m = 0; m < wf; m++) { + val = GET_DATA_BYTE(linet, j + m); + histo[val]++; + histo16[val >> 4]++; + } + } + } else { /* incremental update at left and right sides */ + for (k = 0; k < hf; k++) { + linet = datat + (i + k) * wplt; + val = GET_DATA_BYTE(linet, j - 1); + histo[val]--; + histo16[val >> 4]--; + val = GET_DATA_BYTE(linet, j + wf - 1); + histo[val]++; + histo16[val >> 4]++; + } + } + + /* Find the rank value */ + sum = 0; + for (n = 0; n < 16; n++) { /* search over coarse histo */ + sum += histo16[n]; + if (sum > rankloc) { + sum -= histo16[n]; + break; + } + } + if (n == 16) { /* avoid accessing out of bounds */ + L_WARNING("n = 16; reducing\n", procName); + n = 15; + sum -= histo16[n]; + } + k = 16 * n; /* starting value in fine histo */ + for (m = 0; m < 16; m++) { + sum += histo[k]; + if (sum > rankloc) { + SET_DATA_BYTE(lined, j, k); + break; + } + k++; + } + } + } + } + + pixDestroy(&pixt); + LEPT_FREE(histo); + LEPT_FREE(histo16); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Median filter * + *----------------------------------------------------------------------*/ +/*! + * \brief pixMedianFilter() + * + * \param[in] pixs 8 or 32 bpp; no colormap + * \param[in] wf, hf width and height of filter; each is >= 1 + * \return pixd of median values, or NULL on error + */ +PIX * +pixMedianFilter(PIX *pixs, + l_int32 wf, + l_int32 hf) +{ + PROCNAME("pixMedianFilter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + return pixRankFilter(pixs, wf, hf, 0.5); +} + + +/*----------------------------------------------------------------------* + * Rank filter (accelerated with downscaling) * + *----------------------------------------------------------------------*/ +/*! + * \brief pixRankFilterWithScaling() + * + * \param[in] pixs 8 or 32 bpp; no colormap + * \param[in] wf, hf width and height of filter; each is >= 1 + * \param[in] rank in [0.0 ... 1.0] + * \param[in] scalefactor scale factor; must be >= 0.2 and <= 0.7 + * \return pixd of rank values, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a convenience function that downscales, does
+ *          the rank filtering, and upscales.  Because the down-
+ *          and up-scaling functions are very fast compared to
+ *          rank filtering, the time it takes is reduced from that
+ *          for the simple rank filtering operation by approximately
+ *          the square of the scaling factor.
+ * 
+ */ +PIX * +pixRankFilterWithScaling(PIX *pixs, + l_int32 wf, + l_int32 hf, + l_float32 rank, + l_float32 scalefactor) +{ +l_int32 w, h, d, wfs, hfs; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixRankFilterWithScaling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetColormap(pixs) != NULL) + return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); + d = pixGetDepth(pixs); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (wf < 1 || hf < 1) + return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); + if (rank < 0.0 || rank > 1.0) + return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); + if (wf == 1 && hf == 1) /* no-op */ + return pixCopy(NULL, pixs); + if (scalefactor < 0.2 || scalefactor > 0.7) { + L_ERROR("invalid scale factor; no scaling used\n", procName); + return pixRankFilter(pixs, wf, hf, rank); + } + + pix1 = pixScaleAreaMap(pixs, scalefactor, scalefactor); + wfs = L_MAX(1, (l_int32)(scalefactor * wf + 0.5)); + hfs = L_MAX(1, (l_int32)(scalefactor * hf + 0.5)); + pix2 = pixRankFilter(pix1, wfs, hfs, rank); + pixGetDimensions(pixs, &w, &h, NULL); + pixd = pixScaleToSize(pix2, w, h); + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/rbtree.c b/3rdparty/hgOCR/leptonica/rbtree.c new file mode 100644 index 00000000..6da29246 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rbtree.c @@ -0,0 +1,899 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * Modified from the excellent code here: + * http://en.literateprograms.org/Red-black_tree_(C)?oldid=19567 + * which has been placed in the public domain under the Creative Commons + * CC0 1.0 waiver (http://creativecommons.org/publicdomain/zero/1.0/). + */ + +/*! + * \file rbtree.c + *
+ *
+ *  Basic functions for using red-black trees.  These are "nearly" balanced
+ *  sorted trees with ordering by key that allows insertion, lookup and
+ *  deletion of key/value pairs in log(n) time.
+ *
+ *  We use red-black trees to implement our version of:
+ *    * a map: a function that maps keys to values (e.g., int64 --> int64).
+ *    * a set: a collection that is sorted by unique keys (without
+ *      associated values)
+ *
+ *  There are 5 invariant properties of RB trees:
+ *  (1) Each node is either red or black.
+ *  (2) The root node is black.
+ *  (3) All leaves are black and contain no data (null).
+ *  (4) Every red node has two children and both are black.  This is
+ *      equivalent to requiring the parent of every red node to be black.
+ *  (5) All paths from any given node to its leaf nodes contain the
+ *      same number of black nodes.
+ *
+ *  Interface to red-black tree
+ *           L_RBTREE       *l_rbtreeCreate()
+ *           RB_TYPE        *l_rbtreeLookup()
+ *           void            l_rbtreeInsert()
+ *           void            l_rbtreeDelete()
+ *           void            l_rbtreeDestroy()
+ *           L_RBTREE_NODE  *l_rbtreeGetFirst()
+ *           L_RBTREE_NODE  *l_rbtreeGetNext()
+ *           L_RBTREE_NODE  *l_rbtreeGetLast()
+ *           L_RBTREE_NODE  *l_rbtreeGetPrev()
+ *           l_int32         l_rbtreeGetCount()
+ *           void            l_rbtreePrint()
+ *
+ *  General comparison function
+ *           static l_int32  compareKeys()
+ * 
+ */ + +#include "allheaders.h" + + /* The node color enum is only needed in the rbtree implementation */ +enum { + L_RED_NODE = 1, + L_BLACK_NODE = 2 +}; + + /* This makes it simpler to read the code */ +typedef L_RBTREE_NODE node; + + /* Lots of static helper functions */ +static void destroy_helper(node *n); +static void count_helper(node *n, l_int32 *pcount); +static void print_tree_helper(FILE *fp, node *n, l_int32 keytype, + l_int32 indent); + +static l_int32 compareKeys(l_int32 keytype, RB_TYPE left, RB_TYPE right); + +static node *grandparent(node *n); +static node *sibling(node *n); +static node *uncle(node *n); +static l_int32 node_color(node *n); +static node *new_node(RB_TYPE key, RB_TYPE value, l_int32 node_color, + node *left, node *right); +static node *lookup_node(L_RBTREE *t, RB_TYPE key); +static void rotate_left(L_RBTREE *t, node *n); +static void rotate_right(L_RBTREE *t, node *n); +static void replace_node(L_RBTREE *t, node *oldn, node *newn); +static void insert_case1(L_RBTREE *t, node *n); +static void insert_case2(L_RBTREE *t, node *n); +static void insert_case3(L_RBTREE *t, node *n); +static void insert_case4(L_RBTREE *t, node *n); +static void insert_case5(L_RBTREE *t, node *n); +static node *maximum_node(node *root); +static void delete_case1(L_RBTREE *t, node *n); +static void delete_case2(L_RBTREE *t, node *n); +static void delete_case3(L_RBTREE *t, node *n); +static void delete_case4(L_RBTREE *t, node *n); +static void delete_case5(L_RBTREE *t, node *n); +static void delete_case6(L_RBTREE *t, node *n); +static void verify_properties(L_RBTREE *t); + +#ifndef NO_CONSOLE_IO +#define VERIFY_RBTREE 0 /* only for debugging */ +#endif /* ~NO_CONSOLE_IO */ + + +/* ------------------------------------------------------------- * + * Interface to Red-black Tree * + * ------------------------------------------------------------- */ +/*! + * \brief l_rbtreeCreate() + * + * \param[in] keytype defined by an enum for an RB_TYPE union + * \return rbtree container with empty ptr to the root + */ +L_RBTREE * +l_rbtreeCreate(l_int32 keytype) +{ + PROCNAME("l_rbtreeCreate"); + + if (keytype != L_INT_TYPE && keytype != L_UINT_TYPE && + keytype != L_FLOAT_TYPE && keytype) + return (L_RBTREE *)ERROR_PTR("invalid keytype", procName, NULL); + + L_RBTREE *t = (L_RBTREE *)LEPT_CALLOC(1, sizeof(L_RBTREE)); + t->keytype = keytype; + verify_properties(t); + return t; +} + +/*! + * \brief l_rbtreeLookup() + * + * \param[in] t rbtree, including root node + * \param[in] key find a node with this key + * \return &value a pointer to a union, if the node exists; else NULL + */ +RB_TYPE * +l_rbtreeLookup(L_RBTREE *t, + RB_TYPE key) +{ + PROCNAME("l_rbtreeLookup"); + + if (!t) + return (RB_TYPE *)ERROR_PTR("tree is null\n", procName, NULL); + + node *n = lookup_node(t, key); + return n == NULL ? NULL : &n->value; +} + +/*! + * \brief l_rbtreeInsert() + * + * \param[in] t rbtree, including root node + * \param[in] key insert a node with this key, if the key does not + * already exist in the tree + * \param[in] value typically an int, used for an index + * \return void + * + *
+ * Notes:
+ *      (1) If a node with the key already exists, this just updates the value.
+ * 
+ */ +void +l_rbtreeInsert(L_RBTREE *t, + RB_TYPE key, + RB_TYPE value) +{ +node *n, *inserted_node; + + PROCNAME("l_rbtreeInsert"); + + if (!t) { + L_ERROR("tree is null\n", procName); + return; + } + + inserted_node = new_node(key, value, L_RED_NODE, NULL, NULL); + if (t->root == NULL) { + t->root = inserted_node; + } else { + n = t->root; + while (1) { + int comp_result = compareKeys(t->keytype, key, n->key); + if (comp_result == 0) { + n->value = value; + LEPT_FREE(inserted_node); + return; + } else if (comp_result < 0) { + if (n->left == NULL) { + n->left = inserted_node; + break; + } else { + n = n->left; + } + } else { /* comp_result > 0 */ + if (n->right == NULL) { + n->right = inserted_node; + break; + } else { + n = n->right; + } + } + } + inserted_node->parent = n; + } + insert_case1(t, inserted_node); + verify_properties(t); +} + +/*! + * \brief l_rbtreeDelete() + * + * \param[in] t rbtree, including root node + * \param[in] key delete the node with this key + * \return void + */ +void +l_rbtreeDelete(L_RBTREE *t, + RB_TYPE key) +{ +node *n, *child; + + PROCNAME("l_rbtreeDelete"); + + if (!t) { + L_ERROR("tree is null\n", procName); + return; + } + + n = lookup_node(t, key); + if (n == NULL) return; /* Key not found, do nothing */ + if (n->left != NULL && n->right != NULL) { + /* Copy key/value from predecessor and then delete it instead */ + node *pred = maximum_node(n->left); + n->key = pred->key; + n->value = pred->value; + n = pred; + } + + /* n->left == NULL || n->right == NULL */ + child = n->right == NULL ? n->left : n->right; + if (node_color(n) == L_BLACK_NODE) { + n->color = node_color(child); + delete_case1(t, n); + } + replace_node(t, n, child); + if (n->parent == NULL && child != NULL) /* root should be black */ + child->color = L_BLACK_NODE; + LEPT_FREE(n); + + verify_properties(t); +} + +/*! + * \brief l_rbtreeDestroy() + * + * \param[in] pt pointer to tree; will be wet to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Destroys the tree and nulls the input tree ptr.
+ * 
+ */ +void +l_rbtreeDestroy(L_RBTREE **pt) +{ +node *n; + + if (!pt) return; + if (*pt == NULL) return; + n = (*pt)->root; + destroy_helper(n); + LEPT_FREE(*pt); + *pt = NULL; + return; +} + + /* postorder DFS */ +static void +destroy_helper(node *n) +{ + if (!n) return; + destroy_helper(n->left); + destroy_helper(n->right); + LEPT_FREE(n); +} + +/*! + * \brief l_rbtreeGetFirst() + * + * \param[in] t rbtree, including root node + * \return void + * + *
+ * Notes:
+ *      (1) This is the first node in an in-order traversal.
+ * 
+ */ +L_RBTREE_NODE * +l_rbtreeGetFirst(L_RBTREE *t) +{ +node *n; + + PROCNAME("l_rbtreeGetFirst"); + + if (!t) + return (L_RBTREE_NODE *)ERROR_PTR("tree is null", procName, NULL); + if (t->root == NULL) { + L_INFO("tree is empty\n", procName); + return NULL; + } + + /* Just go down the left side as far as possible */ + n = t->root; + while (n && n->left) + n = n->left; + return n; +} + +/*! + * \brief l_rbtreeGetNext() + * + * \param[in] n current node + * \return next node, or NULL if it's the last node + * + *
+ * Notes:
+ *      (1) This finds the next node, in an in-order traversal, from
+ *          the current node.
+ *      (2) It is useful as an iterator for a map.
+ *      (3) Call l_rbtreeGetFirst() to get the first node.
+ * 
+ */ +L_RBTREE_NODE * +l_rbtreeGetNext(L_RBTREE_NODE *n) +{ + PROCNAME("l_rbtreeGetNext"); + + if (!n) + return (L_RBTREE_NODE *)ERROR_PTR("n not defined", procName, NULL); + + /* If there is a right child, go to it, and then go left all the + * way to the end. Otherwise go up to the parent; continue upward + * as long as you're on the right branch, but stop at the parent + * when you hit it from the left branch. */ + if (n->right) { + n = n->right; + while (n->left) + n = n->left; + return n; + } else { + while (n->parent && n->parent->right == n) + n = n->parent; + return n->parent; + } +} + +/*! + * \brief l_rbtreeGetLast() + * + * \param[in] t rbtree, including root node + * \return void + * + *
+ * Notes:
+ *      (1) This is the last node in an in-order traversal.
+ * 
+ */ +L_RBTREE_NODE * +l_rbtreeGetLast(L_RBTREE *t) +{ +node *n; + + PROCNAME("l_rbtreeGetLast"); + + if (!t) + return (L_RBTREE_NODE *)ERROR_PTR("tree is null", procName, NULL); + if (t->root == NULL) { + L_INFO("tree is empty\n", procName); + return NULL; + } + + /* Just go down the right side as far as possible */ + n = t->root; + while (n && n->right) + n = n->right; + return n; +} + +/*! + * \brief l_rbtreeGetPrev() + * + * \param[in] n current node + * \return next node, or NULL if it's the first node + * + *
+ * Notes:
+ *      (1) This finds the previous node, in an in-order traversal, from
+ *          the current node.
+ *      (2) It is useful as an iterator for a map.
+ *      (3) Call l_rbtreeGetLast() to get the last node.
+ * 
+ */ +L_RBTREE_NODE * +l_rbtreeGetPrev(L_RBTREE_NODE *n) +{ + PROCNAME("l_rbtreeGetPrev"); + + if (!n) + return (L_RBTREE_NODE *)ERROR_PTR("n not defined", procName, NULL); + + /* If there is a left child, go to it, and then go right all the + * way to the end. Otherwise go up to the parent; continue upward + * as long as you're on the left branch, but stop at the parent + * when you hit it from the right branch. */ + if (n->left) { + n = n->left; + while (n->right) + n = n->right; + return n; + } else { + while (n->parent && n->parent->left == n) + n = n->parent; + return n->parent; + } +} + +/*! + * \brief l_rbtreeGetCount() + * + * \param[in] t rbtree + * \return count the number of nodes in the tree, or 0 on error + */ +l_int32 +l_rbtreeGetCount(L_RBTREE *t) +{ +l_int32 count = 0; +node *n; + + if (!t) return 0; + n = t->root; + count_helper(n, &count); + return count; +} + + /* preorder DFS */ +static void +count_helper(node *n, l_int32 *pcount) +{ + if (n) + (*pcount)++; + else + return; + + count_helper(n->left, pcount); + count_helper(n->right, pcount); +} + + +/*! + * \brief l_rbtreePrint() + * + * \param[in] fp file stream + * \param[in] t rbtree + * \return void + */ +void +l_rbtreePrint(FILE *fp, + L_RBTREE *t) +{ + PROCNAME("l_rbtreePrint"); + if (!fp) { + L_ERROR("stream not defined\n", procName); + return; + } + if (!t) { + L_ERROR("tree not defined\n", procName); + return; + } + + print_tree_helper(fp, t->root, t->keytype, 0); + fprintf(fp, "\n"); +} + +#define INDENT_STEP 4 + +static void +print_tree_helper(FILE *fp, + node *n, + l_int32 keytype, + l_int32 indent) +{ +l_int32 i; + + if (n == NULL) { + fprintf(fp, ""); + return; + } + if (n->right != NULL) { + print_tree_helper(fp, n->right, keytype, indent + INDENT_STEP); + } + for (i = 0; i < indent; i++) + fprintf(fp, " "); + if (n->color == L_BLACK_NODE) { + if (keytype == L_INT_TYPE) + fprintf(fp, "%lld\n", n->key.itype); + else if (keytype == L_UINT_TYPE) + fprintf(fp, "%llx\n", n->key.utype); + else if (keytype == L_FLOAT_TYPE) + fprintf(fp, "%f\n", n->key.ftype); + } else { + if (keytype == L_INT_TYPE) + fprintf(fp, "<%lld>\n", n->key.itype); + else if (keytype == L_UINT_TYPE) + fprintf(fp, "<%llx>\n", n->key.utype); + else if (keytype == L_FLOAT_TYPE) + fprintf(fp, "<%f>\n", n->key.ftype); + } + if (n->left != NULL) { + print_tree_helper(fp, n->left, keytype, indent + INDENT_STEP); + } +} + + +/* ------------------------------------------------------------- * + * Static key comparison function * + * ------------------------------------------------------------- */ +static l_int32 +compareKeys(l_int32 keytype, + RB_TYPE left, + RB_TYPE right) +{ +static char procName[] = "compareKeys"; + + if (keytype == L_INT_TYPE) { + if (left.itype < right.itype) + return -1; + else if (left.itype > right.itype) + return 1; + else { /* equality */ + return 0; + } + } else if (keytype == L_UINT_TYPE) { + if (left.utype < right.utype) + return -1; + else if (left.utype > right.utype) + return 1; + else { /* equality */ + return 0; + } + } else if (keytype == L_FLOAT_TYPE) { + if (left.ftype < right.ftype) + return -1; + else if (left.ftype > right.ftype) + return 1; + else { /* equality */ + return 0; + } + } else { + L_ERROR("unknown keytype %d\n", procName, keytype); + return 0; + } +} + + +/* ------------------------------------------------------------- * + * Static red-black tree helpers * + * ------------------------------------------------------------- */ +static node *grandparent(node *n) { + if (!n || !n->parent || !n->parent->parent) { + L_ERROR("root and child of root have no grandparent\n", "grandparent"); + return NULL; + } + return n->parent->parent; +} + +static node *sibling(node *n) { + if (!n || !n->parent) { + L_ERROR("root has no sibling\n", "sibling"); + return NULL; + } + if (n == n->parent->left) + return n->parent->right; + else + return n->parent->left; +} + +static node *uncle(node *n) { + if (!n || !n->parent || !n->parent->parent) { + L_ERROR("root and child of root have no uncle\n", "uncle"); + return NULL; + } + return sibling(n->parent); +} + +static l_int32 node_color(node *n) { + return n == NULL ? L_BLACK_NODE : n->color; +} + + +static node *new_node(RB_TYPE key, RB_TYPE value, l_int32 node_color, + node *left, node *right) { + node *result = (node *)LEPT_CALLOC(1, sizeof(node)); + result->key = key; + result->value = value; + result->color = node_color; + result->left = left; + result->right = right; + if (left != NULL) left->parent = result; + if (right != NULL) right->parent = result; + result->parent = NULL; + return result; +} + +static node *lookup_node(L_RBTREE *t, RB_TYPE key) { + node *n = t->root; + while (n != NULL) { + int comp_result = compareKeys(t->keytype, key, n->key); + if (comp_result == 0) { + return n; + } else if (comp_result < 0) { + n = n->left; + } else { /* comp_result > 0 */ + n = n->right; + } + } + return n; +} + +static void rotate_left(L_RBTREE *t, node *n) { + node *r = n->right; + replace_node(t, n, r); + n->right = r->left; + if (r->left != NULL) { + r->left->parent = n; + } + r->left = n; + n->parent = r; +} + +static void rotate_right(L_RBTREE *t, node *n) { + node *L = n->left; + replace_node(t, n, L); + n->left = L->right; + if (L->right != NULL) { + L->right->parent = n; + } + L->right = n; + n->parent = L; +} + +static void replace_node(L_RBTREE *t, node *oldn, node *newn) { + if (oldn->parent == NULL) { + t->root = newn; + } else { + if (oldn == oldn->parent->left) + oldn->parent->left = newn; + else + oldn->parent->right = newn; + } + if (newn != NULL) { + newn->parent = oldn->parent; + } +} + +static void insert_case1(L_RBTREE *t, node *n) { + if (n->parent == NULL) + n->color = L_BLACK_NODE; + else + insert_case2(t, n); +} + +static void insert_case2(L_RBTREE *t, node *n) { + if (node_color(n->parent) == L_BLACK_NODE) + return; /* Tree is still valid */ + else + insert_case3(t, n); +} + +static void insert_case3(L_RBTREE *t, node *n) { + if (node_color(uncle(n)) == L_RED_NODE) { + n->parent->color = L_BLACK_NODE; + uncle(n)->color = L_BLACK_NODE; + grandparent(n)->color = L_RED_NODE; + insert_case1(t, grandparent(n)); + } else { + insert_case4(t, n); + } +} + +static void insert_case4(L_RBTREE *t, node *n) { + if (n == n->parent->right && n->parent == grandparent(n)->left) { + rotate_left(t, n->parent); + n = n->left; + } else if (n == n->parent->left && n->parent == grandparent(n)->right) { + rotate_right(t, n->parent); + n = n->right; + } + insert_case5(t, n); +} + +static void insert_case5(L_RBTREE *t, node *n) { + n->parent->color = L_BLACK_NODE; + grandparent(n)->color = L_RED_NODE; + if (n == n->parent->left && n->parent == grandparent(n)->left) { + rotate_right(t, grandparent(n)); + } else if (n == n->parent->right && n->parent == grandparent(n)->right) { + rotate_left(t, grandparent(n)); + } else { + L_ERROR("identity confusion\n", "insert_case5"); + } +} + +static node *maximum_node(node *n) { + if (!n) { + L_ERROR("n not defined\n", "maximum_node"); + return NULL; + } + while (n->right != NULL) { + n = n->right; + } + return n; +} + +static void delete_case1(L_RBTREE *t, node *n) { + if (n->parent == NULL) + return; + else + delete_case2(t, n); +} + +static void delete_case2(L_RBTREE *t, node *n) { + if (node_color(sibling(n)) == L_RED_NODE) { + n->parent->color = L_RED_NODE; + sibling(n)->color = L_BLACK_NODE; + if (n == n->parent->left) + rotate_left(t, n->parent); + else + rotate_right(t, n->parent); + } + delete_case3(t, n); +} + +static void delete_case3(L_RBTREE *t, node *n) { + if (node_color(n->parent) == L_BLACK_NODE && + node_color(sibling(n)) == L_BLACK_NODE && + node_color(sibling(n)->left) == L_BLACK_NODE && + node_color(sibling(n)->right) == L_BLACK_NODE) { + sibling(n)->color = L_RED_NODE; + delete_case1(t, n->parent); + } else { + delete_case4(t, n); + } +} + +static void delete_case4(L_RBTREE *t, node *n) { + if (node_color(n->parent) == L_RED_NODE && + node_color(sibling(n)) == L_BLACK_NODE && + node_color(sibling(n)->left) == L_BLACK_NODE && + node_color(sibling(n)->right) == L_BLACK_NODE) { + sibling(n)->color = L_RED_NODE; + n->parent->color = L_BLACK_NODE; + } else { + delete_case5(t, n); + } +} + +static void delete_case5(L_RBTREE *t, node *n) { + if (n == n->parent->left && + node_color(sibling(n)) == L_BLACK_NODE && + node_color(sibling(n)->left) == L_RED_NODE && + node_color(sibling(n)->right) == L_BLACK_NODE) { + sibling(n)->color = L_RED_NODE; + sibling(n)->left->color = L_BLACK_NODE; + rotate_right(t, sibling(n)); + } else if (n == n->parent->right && + node_color(sibling(n)) == L_BLACK_NODE && + node_color(sibling(n)->right) == L_RED_NODE && + node_color(sibling(n)->left) == L_BLACK_NODE) { + sibling(n)->color = L_RED_NODE; + sibling(n)->right->color = L_BLACK_NODE; + rotate_left(t, sibling(n)); + } + delete_case6(t, n); +} + +static void delete_case6(L_RBTREE *t, node *n) { + sibling(n)->color = node_color(n->parent); + n->parent->color = L_BLACK_NODE; + if (n == n->parent->left) { + if (node_color(sibling(n)->right) != L_RED_NODE) { + L_ERROR("right sibling is not RED", "delete_case6"); + return; + } + sibling(n)->right->color = L_BLACK_NODE; + rotate_left(t, n->parent); + } else { + if (node_color(sibling(n)->left) != L_RED_NODE) { + L_ERROR("left sibling is not RED", "delete_case6"); + return; + } + sibling(n)->left->color = L_BLACK_NODE; + rotate_right(t, n->parent); + } +} + + +/* ------------------------------------------------------------- * + * Debugging: verify if tree is valid * + * ------------------------------------------------------------- */ +#if VERIFY_RBTREE +static void verify_property_1(node *root); +static void verify_property_2(node *root); +static void verify_property_4(node *root); +static void verify_property_5(node *root); +static void verify_property_5_helper(node *n, int black_count, + int* black_count_path); +#endif + +static void verify_properties(L_RBTREE *t) { +#if VERIFY_RBTREE + verify_property_1(t->root); + verify_property_2(t->root); + /* Property 3 is implicit */ + verify_property_4(t->root); + verify_property_5(t->root); +#endif +} + +#if VERIFY_RBTREE +static void verify_property_1(node *n) { + if (node_color(n) != L_RED_NODE && node_color(n) != L_BLACK_NODE) { + L_ERROR("color neither RED nor BLACK\n", "verify_property_1"); + return; + } + if (n == NULL) return; + verify_property_1(n->left); + verify_property_1(n->right); +} + +static void verify_property_2(node *root) { + if (node_color(root) != L_BLACK_NODE) + L_ERROR("root is not black!\n", "verify_property_2"); +} + +static void verify_property_4(node *n) { + if (node_color(n) == L_RED_NODE) { + if (node_color(n->left) != L_BLACK_NODE || + node_color(n->right) != L_BLACK_NODE || + node_color(n->parent) != L_BLACK_NODE) { + L_ERROR("children & parent not all BLACK", "verify_property_4"); + return; + } + } + if (n == NULL) return; + verify_property_4(n->left); + verify_property_4(n->right); +} + +static void verify_property_5(node *root) { + int black_count_path = -1; + verify_property_5_helper(root, 0, &black_count_path); +} + +static void verify_property_5_helper(node *n, int black_count, + int* path_black_count) { + if (node_color(n) == L_BLACK_NODE) { + black_count++; + } + if (n == NULL) { + if (*path_black_count == -1) { + *path_black_count = black_count; + } else if (*path_black_count != black_count) { + L_ERROR("incorrect black count", "verify_property_5_helper"); + } + return; + } + verify_property_5_helper(n->left, black_count, path_black_count); + verify_property_5_helper(n->right, black_count, path_black_count); +} +#endif diff --git a/3rdparty/hgOCR/leptonica/rbtree.h b/3rdparty/hgOCR/leptonica/rbtree.h new file mode 100644 index 00000000..6977d336 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rbtree.h @@ -0,0 +1,91 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * Modified from the excellent code here: + * http://en.literateprograms.org/Red-black_tree_(C)?oldid=19567 + * which has been placed in the public domain under the Creative Commons + * CC0 1.0 waiver (http://creativecommons.org/publicdomain/zero/1.0/). + * + * When the key is generated from a hash (e.g., string --> uint64), + * there is always the possibility of having collisions, but to make + * the collision probability very low requires using a large hash. + * For that reason, the key types are 64 bit quantities, which will result + * in a negligible probabililty of collisions for millions of hashed values. + * Using 8 byte keys instead of 4 byte keys requires a little more + * storage, but the simplification in being able to ignore collisions + * with the red-black trees for most applications is worth it. + */ + +#ifndef LEPTONICA_RBTREE_H +#define LEPTONICA_RBTREE_H + + /*! The three valid key types for red-black trees, maps and sets. */ +/*! RBTree Key Type */ +enum { + L_INT_TYPE = 1, + L_UINT_TYPE = 2, + L_FLOAT_TYPE = 3 +}; + + /*! + * Storage for keys and values for red-black trees, maps and sets. + *
+     * Note:
+     *   (1) Keys and values of the valid key types are all 64-bit
+     *   (2) (void *) can be used for values but not for keys.
+     * 
+ */ +union Rb_Type { + l_int64 itype; + l_uint64 utype; + l_float64 ftype; + void *ptype; +}; +typedef union Rb_Type RB_TYPE; + +struct L_Rbtree { + struct L_Rbtree_Node *root; + l_int32 keytype; +}; +typedef struct L_Rbtree L_RBTREE; +typedef struct L_Rbtree L_AMAP; /* hide underlying implementation for map */ +typedef struct L_Rbtree L_ASET; /* hide underlying implementation for set */ + +struct L_Rbtree_Node { + union Rb_Type key; + union Rb_Type value; + struct L_Rbtree_Node *left; + struct L_Rbtree_Node *right; + struct L_Rbtree_Node *parent; + l_int32 color; +}; +typedef struct L_Rbtree_Node L_RBTREE_NODE; +typedef struct L_Rbtree_Node L_AMAP_NODE; /* hide tree implementation */ +typedef struct L_Rbtree_Node L_ASET_NODE; /* hide tree implementation */ + + +#endif /* LEPTONICA_RBTREE_H */ diff --git a/3rdparty/hgOCR/leptonica/readbarcode.c b/3rdparty/hgOCR/leptonica/readbarcode.c new file mode 100644 index 00000000..f4df42c0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/readbarcode.c @@ -0,0 +1,1494 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file readbarcode.c + *
+ *
+ *      Basic operations to locate and identify the line widths
+ *      in 1D barcodes.
+ *
+ *      Top level
+ *          SARRAY          *pixProcessBarcodes()
+ *
+ *      Next levels
+ *          PIXA            *pixExtractBarcodes()
+ *          SARRAY          *pixReadBarcodes()
+ *          l_int32          pixReadBarcodeWidths()
+ *
+ *      Location
+ *          BOXA            *pixLocateBarcodes()
+ *          static PIX      *pixGenerateBarcodeMask()
+ *
+ *      Extraction and deskew
+ *          PIXA            *pixDeskewBarcodes()
+ *
+ *      Process to get line widths
+ *          NUMA            *pixExtractBarcodeWidths1()
+ *          NUMA            *pixExtractBarcodeWidths2()
+ *          NUMA            *pixExtractBarcodeCrossings()
+ *
+ *      Average adjacent rasters
+ *          static NUMA     *pixAverageRasterScans()
+ *
+ *      Signal processing for barcode widths
+ *          NUMA            *numaQuantizeCrossingsByWidth()
+ *          static l_int32   numaGetCrossingDistances()
+ *          static NUMA     *numaLocatePeakRanges()
+ *          static NUMA     *numaGetPeakCentroids()
+ *          static NUMA     *numaGetPeakWidthLUT()
+ *          NUMA            *numaQuantizeCrossingsByWindow()
+ *          static l_int32   numaEvalBestWidthAndShift()
+ *          static l_int32   numaEvalSyncError()
+ *
+ *
+ *  NOTE CAREFULLY: This is "early beta" code.  It has not been tuned
+ *  to work robustly on a large database of barcode images.  I'm putting
+ *  it out so that people can play with it, find out how it breaks, and
+ *  contribute decoders for other barcode formats.  Both the functional
+ *  interfaces and ABI will almost certainly change in the coming
+ *  few months.  The actual decoder, in bardecode.c, at present only
+ *  works on the following codes: Code I2of5, Code 2of5, Code 39, Code 93
+ *  Codabar and UPCA.  To add another barcode format, it is necessary
+ *  to make changes in readbarcode.h and bardecode.c.
+ *  The program prog/barcodetest shows how to run from the top level
+ *  (image --> decoded data).
+ * 
+ */ + +#include +#include "allheaders.h" +#include "readbarcode.h" + + /* Parameters for pixGenerateBarcodeMask() */ +static const l_int32 MAX_SPACE_WIDTH = 19; /* was 15 */ +static const l_int32 MAX_NOISE_WIDTH = 50; /* smaller than barcode width */ +static const l_int32 MAX_NOISE_HEIGHT = 30; /* smaller than barcode height */ + + /* Static functions */ +static PIX *pixGenerateBarcodeMask(PIX *pixs, l_int32 maxspace, + l_int32 nwidth, l_int32 nheight); +static NUMA *pixAverageRasterScans(PIX *pixs, l_int32 nscans); +static l_int32 numaGetCrossingDistances(NUMA *nas, NUMA **pnaedist, + NUMA **pnaodist, l_float32 *pmindist, + l_float32 *pmaxdist); +static NUMA *numaLocatePeakRanges(NUMA *nas, l_float32 minfirst, + l_float32 minsep, l_float32 maxmin); +static NUMA *numaGetPeakCentroids(NUMA *nahist, NUMA *narange); +static NUMA *numaGetPeakWidthLUT(NUMA *narange, NUMA *nacent); +static l_int32 numaEvalBestWidthAndShift(NUMA *nas, l_int32 nwidth, + l_int32 nshift, l_float32 minwidth, + l_float32 maxwidth, + l_float32 *pbestwidth, + l_float32 *pbestshift, + l_float32 *pbestscore); +static l_int32 numaEvalSyncError(NUMA *nas, l_int32 ifirst, l_int32 ilast, + l_float32 width, l_float32 shift, + l_float32 *pscore, NUMA **pnad); + + +#ifndef NO_CONSOLE_IO +#define DEBUG_DESKEW 1 +#define DEBUG_WIDTHS 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------------* + * Top level * + *------------------------------------------------------------------------*/ +/*! + * \brief pixProcessBarcodes() + * + * \param[in] pixs any depth + * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... + * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS + * \param[out] psaw [optional] sarray of bar widths + * \param[in] debugflag use 1 to generate debug output + * \return sarray text of barcodes, or NULL if none found or on error + */ +SARRAY * +pixProcessBarcodes(PIX *pixs, + l_int32 format, + l_int32 method, + SARRAY **psaw, + l_int32 debugflag) +{ +PIX *pixg; +PIXA *pixa; +SARRAY *sad; + + PROCNAME("pixProcessBarcodes"); + + if (psaw) *psaw = NULL; + if (!pixs) + return (SARRAY *)ERROR_PTR("pixs not defined", procName, NULL); + if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) + return (SARRAY *)ERROR_PTR("unsupported format", procName, NULL); + if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) + return (SARRAY *)ERROR_PTR("invalid method", procName, NULL); + + /* Get an 8 bpp image, no cmap */ + if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) + pixg = pixClone(pixs); + else + pixg = pixConvertTo8(pixs, 0); + + if ((pixa = pixExtractBarcodes(pixg, debugflag)) == NULL) { + pixDestroy(&pixg); + return (SARRAY *)ERROR_PTR("no barcode(s) found", procName, NULL); + } + + sad = pixReadBarcodes(pixa, format, method, psaw, debugflag); + + pixDestroy(&pixg); + pixaDestroy(&pixa); + return sad; +} + + +/*! + * \brief pixExtractBarcodes() + * + * \param[in] pixs 8 bpp, no colormap + * \param[in] debugflag use 1 to generate debug output + * \return pixa deskewed and cropped barcodes, or NULL if none found + * or on error + */ +PIXA * +pixExtractBarcodes(PIX *pixs, + l_int32 debugflag) +{ +l_int32 i, n; +l_float32 angle, conf; +BOX *box; +BOXA *boxa; +PIX *pixb, *pixm, *pixt; +PIXA *pixa; + + PROCNAME("pixExtractBarcodes"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIXA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + /* Locate them; use small threshold for edges. */ + boxa = pixLocateBarcodes(pixs, 20, &pixb, &pixm); + n = boxaGetCount(boxa); + L_INFO("%d possible barcode(s) found\n", procName, n); + if (n == 0) { + boxaDestroy(&boxa); + pixDestroy(&pixb); + pixDestroy(&pixm); + return NULL; + } + + if (debugflag) { + boxaWriteStream(stderr, boxa); + pixDisplay(pixb, 100, 100); + pixDisplay(pixm, 800, 100); + } + + /* Deskew each barcode individually */ + pixa = pixaCreate(n); + for (i = 0; i < n; i++) { + box = boxaGetBox(boxa, i, L_CLONE); + pixt = pixDeskewBarcode(pixs, pixb, box, 15, 20, &angle, &conf); + L_INFO("angle = %6.2f, conf = %6.2f\n", procName, angle, conf); + if (conf > 5.0) { + pixaAddPix(pixa, pixt, L_INSERT); + pixaAddBox(pixa, box, L_INSERT); + } else { + pixDestroy(&pixt); + boxDestroy(&box); + } + } + +#if DEBUG_DESKEW + pixt = pixaDisplayTiledInRows(pixa, 8, 1000, 1.0, 0, 30, 2); + pixWrite("junkpixt", pixt, IFF_PNG); + pixDestroy(&pixt); +#endif /* DEBUG_DESKEW */ + + pixDestroy(&pixb); + pixDestroy(&pixm); + boxaDestroy(&boxa); + return pixa; +} + + +/*! + * \brief pixReadBarcodes() + * + * \param[in] pixa of 8 bpp deskewed and cropped barcodes + * \param[in] format L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ... + * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS; + * \param[out] psaw [optional] sarray of bar widths + * \param[in] debugflag use 1 to generate debug output + * \return sa sarray of widths, one string for each barcode found, + * or NULL on error + */ +SARRAY * +pixReadBarcodes(PIXA *pixa, + l_int32 format, + l_int32 method, + SARRAY **psaw, + l_int32 debugflag) +{ +char *barstr, *data; +char emptystring[] = ""; +l_int32 i, j, n, nbars, ival; +NUMA *na; +PIX *pixt; +SARRAY *saw, *sad; + + PROCNAME("pixReadBarcodes"); + + if (psaw) *psaw = NULL; + if (!pixa) + return (SARRAY *)ERROR_PTR("pixa not defined", procName, NULL); + if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) + return (SARRAY *)ERROR_PTR("unsupported format", procName, NULL); + if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) + return (SARRAY *)ERROR_PTR("invalid method", procName, NULL); + + n = pixaGetCount(pixa); + saw = sarrayCreate(n); + sad = sarrayCreate(n); + for (i = 0; i < n; i++) { + /* Extract the widths of the lines in each barcode */ + pixt = pixaGetPix(pixa, i, L_CLONE); + na = pixReadBarcodeWidths(pixt, method, debugflag); + pixDestroy(&pixt); + if (!na) { + ERROR_INT("valid barcode widths not returned", procName, 1); + continue; + } + + /* Save the widths as a string */ + nbars = numaGetCount(na); + barstr = (char *)LEPT_CALLOC(nbars + 1, sizeof(char)); + for (j = 0; j < nbars; j++) { + numaGetIValue(na, j, &ival); + barstr[j] = 0x30 + ival; + } + sarrayAddString(saw, barstr, L_INSERT); + numaDestroy(&na); + + /* Decode the width strings */ + data = barcodeDispatchDecoder(barstr, format, debugflag); + if (!data) { + ERROR_INT("barcode not decoded", procName, 1); + sarrayAddString(sad, emptystring, L_COPY); + continue; + } + sarrayAddString(sad, data, L_INSERT); + } + + /* If nothing found, clean up */ + if (sarrayGetCount(saw) == 0) { + sarrayDestroy(&saw); + sarrayDestroy(&sad); + return (SARRAY *)ERROR_PTR("no valid barcode data", procName, NULL); + } + + if (psaw) + *psaw = saw; + else + sarrayDestroy(&saw); + + return sad; +} + + +/*! + * \brief pixReadBarcodeWidths() + * + * \param[in] pixs of 8 bpp deskewed and cropped barcode + * \param[in] method L_USE_WIDTHS, L_USE_WINDOWS; + * \param[in] debugflag use 1 to generate debug output + * \return na numa of widths (each in set {1,2,3,4}, or NULL on error + */ +NUMA * +pixReadBarcodeWidths(PIX *pixs, + l_int32 method, + l_int32 debugflag) +{ +l_float32 winwidth; +NUMA *na; + + PROCNAME("pixReadBarcodeWidths"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (NUMA *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) + return (NUMA *)ERROR_PTR("invalid method", procName, NULL); + + /* Extract the widths of the lines in each barcode */ + if (method == L_USE_WIDTHS) + na = pixExtractBarcodeWidths1(pixs, 120, 0.25, NULL, NULL, + debugflag); + else /* method == L_USE_WINDOWS */ + na = pixExtractBarcodeWidths2(pixs, 120, &winwidth, + NULL, debugflag); +#if DEBUG_WIDTHS + if (method == L_USE_WINDOWS) + fprintf(stderr, "Window width for barcode: %7.3f\n", winwidth); + numaWriteStream(stderr, na); +#endif /* DEBUG_WIDTHS */ + + if (!na) + return (NUMA *)ERROR_PTR("barcode widths invalid", procName, NULL); + + return na; +} + + +/*------------------------------------------------------------------------* + * Locate barcode in image * + *------------------------------------------------------------------------*/ +/*! + * \brief pixLocateBarcodes() + * + * \param[in] pixs any depth + * \param[in] thresh for binarization of edge filter output; typ. 20 + * \param[out] ppixb [optional] binarized edge filtered input image + * \param[out] ppixm [optional] mask over barcodes + * \return boxa location of barcodes, or NULL if none found or on error + */ +BOXA * +pixLocateBarcodes(PIX *pixs, + l_int32 thresh, + PIX **ppixb, + PIX **ppixm) +{ +BOXA *boxa; +PIX *pix8, *pixe, *pixb, *pixm; + + PROCNAME("pixLocateBarcodes"); + + if (!pixs) + return (BOXA *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Get an 8 bpp image, no cmap */ + if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) + pix8 = pixClone(pixs); + else + pix8 = pixConvertTo8(pixs, 0); + + /* Get a 1 bpp image of the edges */ + pixe = pixSobelEdgeFilter(pix8, L_ALL_EDGES); + pixb = pixThresholdToBinary(pixe, thresh); + pixInvert(pixb, pixb); + pixDestroy(&pix8); + pixDestroy(&pixe); + + pixm = pixGenerateBarcodeMask(pixb, MAX_SPACE_WIDTH, MAX_NOISE_WIDTH, + MAX_NOISE_HEIGHT); + boxa = pixConnComp(pixm, NULL, 8); + + if (ppixb) + *ppixb = pixb; + else + pixDestroy(&pixb); + if (ppixm) + *ppixm = pixm; + else + pixDestroy(&pixm); + + return boxa; +} + + +/*! + * \brief pixGenerateBarcodeMask() + * + * \param[in] pixs 1 bpp + * \param[in] maxspace largest space in the barcode, in pixels + * \param[in] nwidth opening 'width' to remove noise + * \param[in] nheight opening 'height' to remove noise + * \return pixm mask over barcodes, or NULL if none found or on error + * + *
+ * Notes:
+ *      (1) For noise removal, 'width' and 'height' are referred to the
+ *          barcode orientation.
+ *      (2) If there is skew, the mask will not cover the barcode corners.
+ * 
+ */ +static PIX * +pixGenerateBarcodeMask(PIX *pixs, + l_int32 maxspace, + l_int32 nwidth, + l_int32 nheight) +{ +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixGenerateBarcodeMask"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Identify horizontal barcodes */ + pixt1 = pixCloseBrick(NULL, pixs, maxspace + 1, 1); + pixt2 = pixOpenBrick(NULL, pixs, maxspace + 1, 1); + pixXor(pixt2, pixt2, pixt1); + pixOpenBrick(pixt2, pixt2, nwidth, nheight); + pixDestroy(&pixt1); + + /* Identify vertical barcodes */ + pixt1 = pixCloseBrick(NULL, pixs, 1, maxspace + 1); + pixd = pixOpenBrick(NULL, pixs, 1, maxspace + 1); + pixXor(pixd, pixd, pixt1); + pixOpenBrick(pixd, pixd, nheight, nwidth); + pixDestroy(&pixt1); + + /* Combine to get all barcodes */ + pixOr(pixd, pixd, pixt2); + pixDestroy(&pixt2); + + return pixd; +} + + +/*------------------------------------------------------------------------* + * Extract and deskew barcode * + *------------------------------------------------------------------------*/ +/*! + * \brief pixDeskewBarcode() + * + * \param[in] pixs input image; 8 bpp + * \param[in] pixb binarized edge-filtered input image + * \param[in] box identified region containing barcode + * \param[in] margin of extra pixels around box to extract + * \param[in] threshold for binarization; ~20 + * \param[out] pangle [optional] in degrees, clockwise is positive + * \param[out] pconf [optional] confidence + * \return pixd deskewed barcode, or NULL on error + * + *
+ * Notes:
+ *     (1) The (optional) angle returned is the angle in degrees (cw positive)
+ *         necessary to rotate the image so that it is deskewed.
+ * 
+ */ +PIX * +pixDeskewBarcode(PIX *pixs, + PIX *pixb, + BOX *box, + l_int32 margin, + l_int32 threshold, + l_float32 *pangle, + l_float32 *pconf) +{ +l_int32 x, y, w, h, n; +l_float32 angle, angle1, angle2, conf, conf1, conf2, score1, score2, deg2rad; +BOX *boxe, *boxt; +BOXA *boxa, *boxat; +PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6, *pixd; + + PROCNAME("pixDeskewBarcode"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + if (!pixb || pixGetDepth(pixb) != 1) + return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", procName, NULL); + if (!box) + return (PIX *)ERROR_PTR("box not defined or 1 bpp", procName, NULL); + + /* Clip out */ + deg2rad = 3.1415926535 / 180.; + boxGetGeometry(box, &x, &y, &w, &h); + boxe = boxCreate(x - 25, y - 25, w + 51, h + 51); + pixt1 = pixClipRectangle(pixb, boxe, NULL); + pixt2 = pixClipRectangle(pixs, boxe, NULL); + boxDestroy(&boxe); + + /* Deskew, looking at all possible orientations over 180 degrees */ + pixt3 = pixRotateOrth(pixt1, 1); /* look for vertical bar lines */ + pixt4 = pixClone(pixt1); /* look for horizontal bar lines */ + pixFindSkewSweepAndSearchScore(pixt3, &angle1, &conf1, &score1, + 1, 1, 0.0, 45.0, 2.5, 0.01); + pixFindSkewSweepAndSearchScore(pixt4, &angle2, &conf2, &score2, + 1, 1, 0.0, 45.0, 2.5, 0.01); + + /* Because we're using the boundary pixels of the barcodes, + * the peak can be sharper (and the confidence ratio higher) + * from the signal across the top and bottom of the barcode. + * However, the max score, which is the magnitude of the signal + * at the optimum skew angle, will be smaller, so we use the + * max score as the primary indicator of orientation. */ + if (score1 >= score2) { + conf = conf1; + if (conf1 > 6.0 && L_ABS(angle1) > 0.1) { + angle = angle1; + pixt5 = pixRotate(pixt2, deg2rad * angle1, L_ROTATE_AREA_MAP, + L_BRING_IN_WHITE, 0, 0); + } else { + angle = 0.0; + pixt5 = pixClone(pixt2); + } + } else { /* score2 > score1 */ + conf = conf2; + pixt6 = pixRotateOrth(pixt2, 1); + if (conf2 > 6.0 && L_ABS(angle2) > 0.1) { + angle = 90.0 + angle2; + pixt5 = pixRotate(pixt6, deg2rad * angle2, L_ROTATE_AREA_MAP, + L_BRING_IN_WHITE, 0, 0); + } else { + angle = 90.0; + pixt5 = pixClone(pixt6); + } + pixDestroy(&pixt6); + } + pixDestroy(&pixt3); + pixDestroy(&pixt4); + + /* Extract barcode plus a margin around it */ + boxa = pixLocateBarcodes(pixt5, threshold, 0, 0); + if ((n = boxaGetCount(boxa)) != 1) { + L_WARNING("barcode mask in %d components\n", procName, n); + boxat = boxaSort(boxa, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); + } else { + boxat = boxaCopy(boxa, L_CLONE); + } + boxt = boxaGetBox(boxat, 0, L_CLONE); + boxGetGeometry(boxt, &x, &y, &w, &h); + boxe = boxCreate(x - margin, y - margin, w + 2 * margin, + h + 2 * margin); + pixd = pixClipRectangle(pixt5, boxe, NULL); + boxDestroy(&boxt); + boxDestroy(&boxe); + boxaDestroy(&boxa); + boxaDestroy(&boxat); + + if (pangle) *pangle = angle; + if (pconf) *pconf = conf; + + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixDestroy(&pixt5); + return pixd; +} + + +/*------------------------------------------------------------------------* + * Process to get line widths * + *------------------------------------------------------------------------*/ +/*! + * \brief pixExtractBarcodeWidths1() + * + * \param[in] pixs input image; 8 bpp + * \param[in] thresh estimated pixel threshold for crossing + * white <--> black; typ. ~120 + * \param[in] binfract histo binsize as a fraction of minsize; e.g., 0.25 + * \param[out] pnaehist [optional] histogram of black widths; NULL ok + * \param[out] pnaohist [optional] histogram of white widths; NULL ok + * \param[in] debugflag use 1 to generate debug output + * \return nad numa of barcode widths in encoded integer units, + * or NULL on error + * + *
+ * Notes:
+ *     (1) The widths are alternating black/white, starting with black
+ *         and ending with black.
+ *     (2) This method uses the widths of the bars directly, in terms
+ *         of the (float) number of pixels between transitions.
+ *         The histograms of these widths for black and white bars is
+ *         generated and interpreted.
+ * 
+ */ +NUMA * +pixExtractBarcodeWidths1(PIX *pixs, + l_float32 thresh, + l_float32 binfract, + NUMA **pnaehist, + NUMA **pnaohist, + l_int32 debugflag) +{ +NUMA *nac, *nad; + + PROCNAME("pixExtractBarcodeWidths1"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + /* Get the best estimate of the crossings, in pixel units */ + nac = pixExtractBarcodeCrossings(pixs, thresh, debugflag); + + /* Get the array of bar widths, starting with a black bar */ + nad = numaQuantizeCrossingsByWidth(nac, binfract, pnaehist, + pnaohist, debugflag); + + numaDestroy(&nac); + return nad; +} + + +/*! + * \brief pixExtractBarcodeWidths2() + * + * \param[in] pixs input image; 8 bpp + * \param[in] thresh estimated pixel threshold for crossing + * white <--> black; typ. ~120 + * \param[out] pwidth [optional] best decoding window width, in pixels + * \param[out] pnac [optional] number of transitions in each window + * \param[in] debugflag use 1 to generate debug output + * \return nad numa of barcode widths in encoded integer units, + * or NULL on error + * + *
+ * Notes:
+ *      (1) The widths are alternating black/white, starting with black
+ *          and ending with black.
+ *      (2) The optional best decoding window width is the width of the window
+ *          that is used to make a decision about whether a transition occurs.
+ *          It is approximately the average width in pixels of the narrowest
+ *          white and black bars (i.e., those corresponding to unit width).
+ *      (3) The optional return signal %nac is a sequence of 0s, 1s,
+ *          and perhaps a few 2s, giving the number of crossings in each window.
+ *          On the occasion where there is a '2', it is interpreted as
+ *          as ending two runs: the previous one and another one that has length 1.
+ * 
+ */ +NUMA * +pixExtractBarcodeWidths2(PIX *pixs, + l_float32 thresh, + l_float32 *pwidth, + NUMA **pnac, + l_int32 debugflag) +{ +NUMA *nacp, *nad; + + PROCNAME("pixExtractBarcodeWidths2"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + /* Get the best estimate of the crossings, in pixel units */ + nacp = pixExtractBarcodeCrossings(pixs, thresh, debugflag); + + /* Quantize the crossings to get actual windowed data */ + nad = numaQuantizeCrossingsByWindow(nacp, 2.0, pwidth, NULL, pnac, debugflag); + + numaDestroy(&nacp); + return nad; +} + + +/*! + * \brief pixExtractBarcodeCrossings() + * + * \param[in] pixs input image; 8 bpp + * \param[in] thresh estimated pixel threshold for crossing + * white <--> black; typ. ~120 + * \param[in] debugflag use 1 to generate debug output + * \return numa of crossings, in pixel units, or NULL on error + */ +NUMA * +pixExtractBarcodeCrossings(PIX *pixs, + l_float32 thresh, + l_int32 debugflag) +{ +l_int32 w; +l_float32 bestthresh; +NUMA *nas, *nax, *nay, *nad; + + PROCNAME("pixExtractBarcodeCrossings"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + /* Scan pixels horizontally and average results */ + nas = pixAverageRasterScans(pixs, 51); + + /* Interpolate to get 4x the number of values */ + w = pixGetWidth(pixs); + numaInterpolateEqxInterval(0.0, 1.0, nas, L_QUADRATIC_INTERP, 0.0, + (l_float32)(w - 1), 4 * w + 1, &nax, &nay); + + if (debugflag) { + lept_mkdir("lept/barcode"); + GPLOT *gplot = gplotCreate("/tmp/lept/barcode/signal", GPLOT_PNG, + "Pixel values", "dist in pixels", "value"); + gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } + + /* Locate the crossings. Run multiple times with different + * thresholds, and choose a threshold in the center of the + * run of thresholds that all give the maximum number of crossings. */ + numaSelectCrossingThreshold(nax, nay, thresh, &bestthresh); + + /* Get the crossings with the best threshold. */ + nad = numaCrossingsByThreshold(nax, nay, bestthresh); + + numaDestroy(&nas); + numaDestroy(&nax); + numaDestroy(&nay); + return nad; +} + + +/*------------------------------------------------------------------------* + * Average adjacent rasters * + *------------------------------------------------------------------------*/ +/*! + * \brief pixAverageRasterScans() + * + * \param[in] pixs input image; 8 bpp + * \param[in] nscans number of adjacent scans, about the center vertically + * \return numa of average pixel values across image, or NULL on error + */ +static NUMA * +pixAverageRasterScans(PIX *pixs, + l_int32 nscans) +{ +l_int32 w, h, first, last, i, j, wpl, val; +l_uint32 *line, *data; +l_float32 *array; +NUMA *nad; + + PROCNAME("pixAverageRasterScans"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (nscans <= h) { + first = 0; + last = h - 1; + nscans = h; + } else { + first = (h - nscans) / 2; + last = first + nscans - 1; + } + + nad = numaCreate(w); + numaSetCount(nad, w); + array = numaGetFArray(nad, L_NOCOPY); + wpl = pixGetWpl(pixs); + data = pixGetData(pixs); + for (j = 0; j < w; j++) { + for (i = first; i <= last; i++) { + line = data + i * wpl; + val = GET_DATA_BYTE(line, j); + array[j] += val; + } + array[j] = array[j] / (l_float32)nscans; + } + + return nad; +} + + +/*------------------------------------------------------------------------* + * Signal processing for barcode widths * + *------------------------------------------------------------------------*/ +/*! + * \brief numaQuantizeCrossingsByWidth() + * + * \param[in] nas numa of crossing locations, in pixel units + * \param[in] binfract histo binsize as a fraction of minsize; e.g., 0.25 + * \param[out] pnaehist [optional] histo of even (black) bar widths + * \param[out] pnaohist [optional] histo of odd (white) bar widths + * \param[in] debugflag 1 to generate plots of histograms of bar widths + * \return nad sequence of widths, in unit sizes, or NULL on error + * + *
+ * Notes:
+ *      (1) This first computes the histogram of black and white bar widths,
+ *          binned in appropriate units.  There should be well-defined
+ *          peaks, each corresponding to a specific width.  The sequence
+ *          of barcode widths (namely, the integers from the set {1,2,3,4})
+ *          is returned.
+ *      (2) The optional returned histograms are binned in width units
+ *          that are inversely proportional to %binfract.  For example,
+ *          if %binfract = 0.25, there are 4.0 bins in the distance of
+ *          the width of the narrowest bar.
+ * 
+ */ +NUMA * +numaQuantizeCrossingsByWidth(NUMA *nas, + l_float32 binfract, + NUMA **pnaehist, + NUMA **pnaohist, + l_int32 debugflag) +{ +l_int32 i, n, ned, nod, iw, width; +l_float32 val, minsize, maxsize, factor; +GPLOT *gplot; +NUMA *naedist, *naodist, *naehist, *naohist, *naecent, *naocent; +NUMA *naerange, *naorange, *naelut, *naolut, *nad; + + PROCNAME("numaQuantizeCrossingsByWidth"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + if (n < 2) + return (NUMA *)ERROR_PTR("n < 2", procName, NULL); + if (binfract <= 0.0) + return (NUMA *)ERROR_PTR("binfract <= 0.0", procName, NULL); + + /* Get even and odd crossing distances */ + numaGetCrossingDistances(nas, &naedist, &naodist, &minsize, &maxsize); + + /* Bin the spans in units of binfract * minsize. These + * units are convenient because they scale to make at least + * 1/binfract bins in the smallest span (width). We want this + * number to be large enough to clearly separate the + * widths, but small enough so that the histogram peaks + * have very few if any holes (zeroes) within them. */ + naehist = numaMakeHistogramClipped(naedist, binfract * minsize, + (1.25 / binfract) * maxsize); + naohist = numaMakeHistogramClipped(naodist, binfract * minsize, + (1.25 / binfract) * maxsize); + + if (debugflag) { + lept_mkdir("lept/barcode"); + gplot = gplotCreate("/tmp/lept/barcode/histw", GPLOT_PNG, + "Raw width histogram", "Width", "Number"); + gplotAddPlot(gplot, NULL, naehist, GPLOT_LINES, "plot black"); + gplotAddPlot(gplot, NULL, naohist, GPLOT_LINES, "plot white"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } + + /* Compute the peak ranges, still in units of binfract * minsize. */ + naerange = numaLocatePeakRanges(naehist, 1.0 / binfract, + 1.0 / binfract, 0.0); + naorange = numaLocatePeakRanges(naohist, 1.0 / binfract, + 1.0 / binfract, 0.0); + + /* Find the centroid values of each peak */ + naecent = numaGetPeakCentroids(naehist, naerange); + naocent = numaGetPeakCentroids(naohist, naorange); + + /* Generate the lookup tables that map from the bar width, in + * units of (binfract * minsize), to the integerized barcode + * units (1, 2, 3, 4), which are the output integer widths + * between transitions. */ + naelut = numaGetPeakWidthLUT(naerange, naecent); + naolut = numaGetPeakWidthLUT(naorange, naocent); + + /* Get the widths. Because the LUT accepts our funny units, + * we first must convert the pixel widths to these units, + * which is what 'factor' does. */ + nad = numaCreate(0); + ned = numaGetCount(naedist); + nod = numaGetCount(naodist); + if (nod != ned - 1) + L_WARNING("ned != nod + 1\n", procName); + factor = 1.0 / (binfract * minsize); /* for converting units */ + for (i = 0; i < ned - 1; i++) { + numaGetFValue(naedist, i, &val); + width = (l_int32)(factor * val); + numaGetIValue(naelut, width, &iw); + numaAddNumber(nad, iw); +/* fprintf(stderr, "even: val = %7.3f, width = %d, iw = %d\n", + val, width, iw); */ + numaGetFValue(naodist, i, &val); + width = (l_int32)(factor * val); + numaGetIValue(naolut, width, &iw); + numaAddNumber(nad, iw); +/* fprintf(stderr, "odd: val = %7.3f, width = %d, iw = %d\n", + val, width, iw); */ + } + numaGetFValue(naedist, ned - 1, &val); + width = (l_int32)(factor * val); + numaGetIValue(naelut, width, &iw); + numaAddNumber(nad, iw); + + if (debugflag) { + fprintf(stderr, " ---- Black bar widths (pixels) ------ \n"); + numaWriteStream(stderr, naedist); + fprintf(stderr, " ---- Histogram of black bar widths ------ \n"); + numaWriteStream(stderr, naehist); + fprintf(stderr, " ---- Peak ranges in black bar histogram bins --- \n"); + numaWriteStream(stderr, naerange); + fprintf(stderr, " ---- Peak black bar centroid width values ------ \n"); + numaWriteStream(stderr, naecent); + fprintf(stderr, " ---- Black bar lookup table ------ \n"); + numaWriteStream(stderr, naelut); + fprintf(stderr, " ---- White bar widths (pixels) ------ \n"); + numaWriteStream(stderr, naodist); + fprintf(stderr, " ---- Histogram of white bar widths ------ \n"); + numaWriteStream(stderr, naohist); + fprintf(stderr, " ---- Peak ranges in white bar histogram bins --- \n"); + numaWriteStream(stderr, naorange); + fprintf(stderr, " ---- Peak white bar centroid width values ------ \n"); + numaWriteStream(stderr, naocent); + fprintf(stderr, " ---- White bar lookup table ------ \n"); + numaWriteStream(stderr, naolut); + } + + numaDestroy(&naedist); + numaDestroy(&naodist); + numaDestroy(&naerange); + numaDestroy(&naorange); + numaDestroy(&naecent); + numaDestroy(&naocent); + numaDestroy(&naelut); + numaDestroy(&naolut); + if (pnaehist) + *pnaehist = naehist; + else + numaDestroy(&naehist); + if (pnaohist) + *pnaohist = naohist; + else + numaDestroy(&naohist); + return nad; +} + + +/*! + * \brief numaGetCrossingDistances() + * + * \param[in] nas numa of crossing locations + * \param[out] pnaedist [optional] even distances between crossings + * \param[out] pnaodist [optional] odd distances between crossings + * \param[out] pmindist [optional] min distance between crossings + * \param[out] pmaxdist [optional] max distance between crossings + * \return 0 if OK, 1 on error + */ +static l_int32 +numaGetCrossingDistances(NUMA *nas, + NUMA **pnaedist, + NUMA **pnaodist, + l_float32 *pmindist, + l_float32 *pmaxdist) +{ +l_int32 i, n; +l_float32 val, newval, mindist, maxdist, dist; +NUMA *naedist, *naodist; + + PROCNAME("numaGetCrossingDistances"); + + if (pnaedist) *pnaedist = NULL; + if (pnaodist) *pnaodist = NULL; + if (pmindist) *pmindist = 0.0; + if (pmaxdist) *pmaxdist = 0.0; + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if ((n = numaGetCount(nas)) < 2) + return ERROR_INT("n < 2", procName, 1); + + /* Get numas of distances between crossings. Separate these + * into even (e.g., black) and odd (e.g., white) spans. + * For barcodes, the black spans are 0, 2, etc. These + * distances are in pixel units. */ + naedist = numaCreate(n / 2 + 1); + naodist = numaCreate(n / 2); + numaGetFValue(nas, 0, &val); + for (i = 1; i < n; i++) { + numaGetFValue(nas, i, &newval); + if (i % 2) + numaAddNumber(naedist, newval - val); + else + numaAddNumber(naodist, newval - val); + val = newval; + } + + /* The mindist and maxdist of the spans are in pixel units. */ + numaGetMin(naedist, &mindist, NULL); + numaGetMin(naodist, &dist, NULL); + mindist = L_MIN(dist, mindist); + numaGetMax(naedist, &maxdist, NULL); + numaGetMax(naodist, &dist, NULL); + maxdist = L_MAX(dist, maxdist); + L_INFO("mindist = %7.3f, maxdist = %7.3f\n", procName, mindist, maxdist); + + if (pnaedist) + *pnaedist = naedist; + else + numaDestroy(&naedist); + if (pnaodist) + *pnaodist = naodist; + else + numaDestroy(&naodist); + if (pmindist) *pmindist = mindist; + if (pmaxdist) *pmaxdist = maxdist; + return 0; +} + + +/*! + * \brief numaLocatePeakRanges() + * + * \param[in] nas numa of histogram of crossing widths + * \param[in] minfirst min location of center of first peak + * \param[in] minsep min separation between peak range centers + * \param[in] maxmin max allowed value for min histo value between peaks + * \return nad ranges for each peak found, in pairs, or NULL on error + * + *
+ * Notes:
+ *      (1) Units of %minsep are the index into nas.
+ *          This puts useful constraints on peak-finding.
+ *      (2) If maxmin == 0.0, the value of nas[i] must go to 0.0 (or less)
+ *          between peaks.
+ *      (3) All calculations are done in units of the index into nas.
+ *          The resulting ranges are therefore integers.
+ *      (4) The output nad gives pairs of range values for successive peaks.
+ *          Any location [i] for which maxmin = nas[i] = 0.0 will NOT be
+ *          included in a peak range.  This works fine for histograms where
+ *          if nas[i] == 0.0, it means that there are no samples at [i].
+ *      (5) For barcodes, when this is used on a histogram of barcode
+ *          widths, use maxmin = 0.0.  This requires that there is at
+ *          least one histogram bin corresponding to a width value between
+ *          adjacent peak ranges that is unpopulated, making the separation
+ *          of the histogram peaks unambiguous.
+ * 
+ */ +static NUMA * +numaLocatePeakRanges(NUMA *nas, + l_float32 minfirst, + l_float32 minsep, + l_float32 maxmin) +{ +l_int32 i, n, inpeak, left; +l_float32 center, prevcenter, val; +NUMA *nad; + + PROCNAME("numaLocatePeakRanges"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + n = numaGetCount(nas); + nad = numaCreate(0); + + inpeak = FALSE; + prevcenter = minfirst - minsep - 1.0; + for (i = 0; i < n; i++) { + numaGetFValue(nas, i, &val); + if (inpeak == FALSE && val > maxmin) { + inpeak = TRUE; + left = i; + } else if (inpeak == TRUE && val <= maxmin) { /* end peak */ + center = (left + i - 1.0) / 2.0; + if (center - prevcenter >= minsep) { /* save new peak */ + inpeak = FALSE; + numaAddNumber(nad, left); + numaAddNumber(nad, i - 1); + prevcenter = center; + } else { /* attach to previous peak; revise the right edge */ + numaSetValue(nad, numaGetCount(nad) - 1, i - 1); + } + } + } + if (inpeak == TRUE) { /* save the last peak */ + numaAddNumber(nad, left); + numaAddNumber(nad, n - 1); + } + + return nad; +} + + +/*! + * \brief numaGetPeakCentroids() + * + * \param[in] nahist numa of histogram of crossing widths + * \param[in] narange numa of ranges of x-values for the peaks in %nahist + * \return nad centroids for each peak found; max of 4, corresponding + * to 4 different barcode line widths, or NULL on error + */ +static NUMA * +numaGetPeakCentroids(NUMA *nahist, + NUMA *narange) +{ +l_int32 i, j, nr, low, high; +l_float32 cent, sum, val; +NUMA *nad; + + PROCNAME("numaGetPeakCentroids"); + + if (!nahist) + return (NUMA *)ERROR_PTR("nahist not defined", procName, NULL); + if (!narange) + return (NUMA *)ERROR_PTR("narange not defined", procName, NULL); + nr = numaGetCount(narange) / 2; + + nad = numaCreate(4); + for (i = 0; i < nr; i++) { + numaGetIValue(narange, 2 * i, &low); + numaGetIValue(narange, 2 * i + 1, &high); + cent = 0.0; + sum = 0.0; + for (j = low; j <= high; j++) { + numaGetFValue(nahist, j, &val); + cent += j * val; + sum += val; + } + numaAddNumber(nad, cent / sum); + } + + return nad; +} + + +/*! + * \brief numaGetPeakWidthLUT() + * + * \param[in] narange numa of x-val ranges for the histogram width peaks + * \param[in] nacent numa of centroids of each peak -- up to 4 + * \return nalut lookup table from the width of a bar to one of the four + * integerized barcode units, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates the lookup table that maps from a sequence of widths
+ *          (in some units) to the integerized barcode units (1, 2, 3, 4),
+ *          which are the output integer widths between transitions.
+ *      (2) The smallest width can be lost in float roundoff.  To avoid
+ *          losing it, we expand the peak range of the smallest width.
+ * 
+ */ +static NUMA * +numaGetPeakWidthLUT(NUMA *narange, + NUMA *nacent) +{ +l_int32 i, j, nc, low, high, imax; +l_int32 assign[4]; +l_float32 *warray; +l_float32 max, rat21, rat32, rat42; +NUMA *nalut; + + PROCNAME("numaGetPeakWidthLUT"); + + if (!narange) + return (NUMA *)ERROR_PTR("narange not defined", procName, NULL); + if (!nacent) + return (NUMA *)ERROR_PTR("nacent not defined", procName, NULL); + nc = numaGetCount(nacent); /* half the size of narange */ + if (nc < 1 || nc > 4) + return (NUMA *)ERROR_PTR("nc must be 1, 2, 3, or 4", procName, NULL); + + /* Check the peak centroids for consistency with bar widths. + * The third peak can correspond to a width of either 3 or 4. + * Use ratios 3/2 and 4/2 instead of 3/1 and 4/1 because the + * former are more stable and closer to the expected ratio. */ + if (nc > 1) { + warray = numaGetFArray(nacent, L_NOCOPY); + if (warray[0] == 0) + return (NUMA *)ERROR_PTR("first peak has width 0.0", + procName, NULL); + rat21 = warray[1] / warray[0]; + if (rat21 < 1.5 || rat21 > 2.6) + L_WARNING("width ratio 2/1 = %f\n", procName, rat21); + if (nc > 2) { + rat32 = warray[2] / warray[1]; + if (rat32 < 1.3 || rat32 > 2.25) + L_WARNING("width ratio 3/2 = %f\n", procName, rat32); + } + if (nc == 4) { + rat42 = warray[3] / warray[1]; + if (rat42 < 1.7 || rat42 > 2.3) + L_WARNING("width ratio 4/2 = %f\n", procName, rat42); + } + } + + /* Set width assignments. + * The only possible ambiguity is with nc = 3 */ + for (i = 0; i < 4; i++) + assign[i] = i + 1; + if (nc == 3) { + if (rat32 > 1.75) + assign[2] = 4; + } + + /* Put widths into the LUT */ + numaGetMax(narange, &max, NULL); + imax = (l_int32)max; + nalut = numaCreate(imax + 1); + numaSetCount(nalut, imax + 1); /* fill the array with zeroes */ + for (i = 0; i < nc; i++) { + numaGetIValue(narange, 2 * i, &low); + if (i == 0) low--; /* catch smallest width */ + numaGetIValue(narange, 2 * i + 1, &high); + for (j = low; j <= high; j++) + numaSetValue(nalut, j, assign[i]); + } + + return nalut; +} + + +/*! + * \brief numaQuantizeCrossingsByWindow() + * + * \param[in] nas numa of crossing locations + * \param[in] ratio of max window size over min window size in search; + * typ. 2.0 + * \param[out] pwidth [optional] best window width + * \param[out] pfirstloc [optional] center of window for first xing + * \param[out] pnac [optional] array of window crossings (0, 1, 2) + * \param[in] debugflag 1 to generate various plots of intermediate results + * \return nad sequence of widths, in unit sizes, or NULL on error + * + *
+ * Notes:
+ *      (1) The minimum size of the window is set by the minimum
+ *          distance between zero crossings.
+ *      (2) The optional return signal %nac is a sequence of 0s, 1s,
+ *          and perhaps a few 2s, giving the number of crossings in each window.
+ *          On the occasion where there is a '2', it is interpreted as
+ *          ending two runs: the previous one and another one that has length 1.
+ * 
+ */ +NUMA * +numaQuantizeCrossingsByWindow(NUMA *nas, + l_float32 ratio, + l_float32 *pwidth, + l_float32 *pfirstloc, + NUMA **pnac, + l_int32 debugflag) +{ +l_int32 i, nw, started, count, trans; +l_float32 minsize, minwidth, minshift, xfirst; +NUMA *nac, *nad; + + PROCNAME("numaQuantizeCrossingsByWindow"); + + if (!nas) + return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); + if (numaGetCount(nas) < 2) + return (NUMA *)ERROR_PTR("nas size < 2", procName, NULL); + + /* Get the minsize, which is needed for the search for + * the window width (ultimately found as 'minwidth') */ + numaGetCrossingDistances(nas, NULL, NULL, &minsize, NULL); + + /* Compute the width and shift increments; start at minsize + * and go up to ratio * minsize */ + numaEvalBestWidthAndShift(nas, 100, 10, minsize, ratio * minsize, + &minwidth, &minshift, NULL); + + /* Refine width and shift calculation */ + numaEvalBestWidthAndShift(nas, 100, 10, 0.98 * minwidth, 1.02 * minwidth, + &minwidth, &minshift, NULL); + + L_INFO("best width = %7.3f, best shift = %7.3f\n", + procName, minwidth, minshift); + + /* Get the crossing array (0,1,2) for the best window width and shift */ + numaEvalSyncError(nas, 0, 0, minwidth, minshift, NULL, &nac); + if (pwidth) *pwidth = minwidth; + if (pfirstloc) { + numaGetFValue(nas, 0, &xfirst); + *pfirstloc = xfirst + minshift; + } + + /* Get the array of bar widths, starting with a black bar */ + nad = numaCreate(0); + nw = numaGetCount(nac); /* number of window measurements */ + started = FALSE; + count = 0; /* unnecessary init */ + for (i = 0; i < nw; i++) { + numaGetIValue(nac, i, &trans); + if (trans > 2) + L_WARNING("trans = %d > 2 !!!\n", procName, trans); + if (started) { + if (trans > 1) { /* i.e., when trans == 2 */ + numaAddNumber(nad, count); + trans--; + count = 1; + } + if (trans == 1) { + numaAddNumber(nad, count); + count = 1; + } else { + count++; + } + } + if (!started && trans) { + started = TRUE; + if (trans == 2) /* a whole bar in this window */ + numaAddNumber(nad, 1); + count = 1; + } + } + + if (pnac) + *pnac = nac; + else + numaDestroy(&nac); + return nad; +} + + +/*! + * \brief numaEvalBestWidthAndShift() + * + * \param[in] nas numa of crossing locations + * \param[in] nwidth number of widths to consider + * \param[in] nshift number of shifts to consider for each width + * \param[in] minwidth smallest width to consider + * \param[in] maxwidth largest width to consider + * \param[out] pbestwidth best size of window + * \param[out] pbestshift best shift for the window + * \param[out] pbestscore [optional] average squared error of dist + * of crossing signal from the center of the window + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a linear sweep of widths, evaluating at %nshift
+ *          shifts for each width, finding the (width, shift) pair that
+ *          gives the minimum score.
+ * 
+ */ +static l_int32 +numaEvalBestWidthAndShift(NUMA *nas, + l_int32 nwidth, + l_int32 nshift, + l_float32 minwidth, + l_float32 maxwidth, + l_float32 *pbestwidth, + l_float32 *pbestshift, + l_float32 *pbestscore) +{ +l_int32 i, j; +l_float32 delwidth, delshift, width, shift, score; +l_float32 bestwidth, bestshift, bestscore; + + PROCNAME("numaEvalBestWidthAndShift"); + + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if (!pbestwidth || !pbestshift) + return ERROR_INT("&bestwidth and &bestshift not defined", procName, 1); + + bestwidth = 0.0f; + bestshift = 0.0f; + bestscore = 1.0; + delwidth = (maxwidth - minwidth) / (nwidth - 1.0); + for (i = 0; i < nwidth; i++) { + width = minwidth + delwidth * i; + delshift = width / (l_float32)(nshift); + for (j = 0; j < nshift; j++) { + shift = -0.5 * (width - delshift) + j * delshift; + numaEvalSyncError(nas, 0, 0, width, shift, &score, NULL); + if (score < bestscore) { + bestscore = score; + bestwidth = width; + bestshift = shift; +#if DEBUG_FREQUENCY + fprintf(stderr, "width = %7.3f, shift = %7.3f, score = %7.3f\n", + width, shift, score); +#endif /* DEBUG_FREQUENCY */ + } + } + } + + *pbestwidth = bestwidth; + *pbestshift = bestshift; + if (pbestscore) + *pbestscore = bestscore; + return 0; +} + + +/*! + * \brief numaEvalSyncError() + * + * \param[in] nas numa of crossing locations + * \param[in] ifirst first crossing to use + * \param[in] ilast last crossing to use; use 0 for all crossings + * \param[in] width size of window + * \param[in] shift of center of window w/rt first crossing + * \param[out] pscore [optional] average squared error of dist + * of crossing signal from the center of the window + * \param[out] pnad [optional] numa of 1s and 0s for crossings + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The score is computed only on the part of the signal from the
+ *          %ifirst to %ilast crossings.  Use 0 for both of these to
+ *          use all the crossings.  The score is normalized for
+ *          the number of crossings and with half-width of the window.
+ *      (2) The optional return %nad is a sequence of 0s and 1s, where a '1'
+ *          indicates a crossing in the window.
+ * 
+ */ +static l_int32 +numaEvalSyncError(NUMA *nas, + l_int32 ifirst, + l_int32 ilast, + l_float32 width, + l_float32 shift, + l_float32 *pscore, + NUMA **pnad) +{ +l_int32 i, n, nc, nw, ival; +l_int32 iw; /* cell in which transition occurs */ +l_float32 score, xfirst, xlast, xleft, xc, xwc; +NUMA *nad; + + PROCNAME("numaEvalSyncError"); + + if (!nas) + return ERROR_INT("nas not defined", procName, 1); + if ((n = numaGetCount(nas)) < 2) + return ERROR_INT("nas size < 2", procName, 1); + if (ifirst < 0) ifirst = 0; + if (ilast <= 0) ilast = n - 1; + if (ifirst >= ilast) + return ERROR_INT("ifirst not < ilast", procName, 1); + nc = ilast - ifirst + 1; + + /* Set up an array corresponding to the (shifted) windows, + * and fill in the crossings. */ + score = 0.0; + numaGetFValue(nas, ifirst, &xfirst); + numaGetFValue(nas, ilast, &xlast); + nw = (l_int32) ((xlast - xfirst + 2.0 * width) / width); + nad = numaCreate(nw); + numaSetCount(nad, nw); /* init to all 0.0 */ + xleft = xfirst - width / 2.0 + shift; /* left edge of first window */ + for (i = ifirst; i <= ilast; i++) { + numaGetFValue(nas, i, &xc); + iw = (l_int32)((xc - xleft) / width); + xwc = xleft + (iw + 0.5) * width; /* center of cell iw */ + score += (xwc - xc) * (xwc - xc); + numaGetIValue(nad, iw, &ival); + numaSetValue(nad, iw, ival + 1); + } + + if (pscore) + *pscore = 4.0 * score / (width * width * (l_float32)nc); + if (pnad) + *pnad = nad; + else + numaDestroy(&nad); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/readbarcode.h b/3rdparty/hgOCR/leptonica/readbarcode.h new file mode 100644 index 00000000..358ff4e5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/readbarcode.h @@ -0,0 +1,239 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_READBARCODE_H +#define LEPTONICA_READBARCODE_H + + /* ----------------------------------------------------------------- * + * Flags for method of extracting barcode widths * + * ----------------------------------------------------------------- */ + +/*! Barcode Method */ +enum { + L_USE_WIDTHS = 1, /*!< use histogram of barcode widths */ + L_USE_WINDOWS = 2 /*!< find best window for decoding transitions */ +}; + + /* ----------------------------------------------------------------- * + * Flags for barcode formats * + * These are used both to identify a barcode format and to identify * + * the decoding method to use on a barcode. * + * ----------------------------------------------------------------- */ + +/*! Barcode Format */ +enum { + L_BF_UNKNOWN = 0, /*!< unknown format */ + L_BF_ANY = 1, /*!< try decoding with all known formats */ + L_BF_CODE128 = 2, /*!< decode with Code128 format */ + L_BF_EAN8 = 3, /*!< decode with EAN8 format */ + L_BF_EAN13 = 4, /*!< decode with EAN13 format */ + L_BF_CODE2OF5 = 5, /*!< decode with Code 2 of 5 format */ + L_BF_CODEI2OF5 = 6, /*!< decode with Interleaved 2 of 5 format */ + L_BF_CODE39 = 7, /*!< decode with Code39 format */ + L_BF_CODE93 = 8, /*!< decode with Code93 format */ + L_BF_CODABAR = 9, /*!< decode with Code93 format */ + L_BF_UPCA = 10 /*!< decode with UPC A format */ +}; + + /* ----------------------------------------------------------------- * + * Currently supported formats * + * Update these arrays as new formats are added. * + * ----------------------------------------------------------------- */ + +/*! Currently supported formats */ +static const l_int32 SupportedBarcodeFormat[] = { + L_BF_CODE2OF5, + L_BF_CODEI2OF5, + L_BF_CODE93, + L_BF_CODE39, + L_BF_CODABAR, + L_BF_UPCA, + L_BF_EAN13 +}; + +/*! Currently supported format names */ +static const char *SupportedBarcodeFormatName[] = { + "Code2of5", + "CodeI2of5", + "Code93", + "Code39", + "Codabar", + "Upca", + "Ean13" +}; +static const l_int32 NumSupportedBarcodeFormats = 7; /*!< Number of formats */ + + + /* ----------------------------------------------------------------- * + * Code 2 of 5 symbology * + * ----------------------------------------------------------------- */ +static const char *Code2of5[] = { + "111121211", "211111112", "112111112", "212111111", /* 0 - 3 */ + "111121112", "211121111", "112121111", "111111212", /* 4 - 7 */ + "211111211", "112111211", /* 8 - 9 */ + "21211", "21112" /* Start, Stop */ +}; + +static const l_int32 C25_START = 10; +static const l_int32 C25_STOP = 11; + + + /* ----------------------------------------------------------------- * + * Code Interleaved 2 of 5 symbology * + * ----------------------------------------------------------------- */ +static const char *CodeI2of5[] = { + "11221", "21112", "12112", "22111", "11212", /* 0 - 4 */ + "21211", "12211", "11122", "21121", "12121", /* 5 - 9 */ + "1111", "211" /* start, stop */ +}; + +static const l_int32 CI25_START = 10; +static const l_int32 CI25_STOP = 11; + + + /* ----------------------------------------------------------------- * + * Code 93 symbology * + * ----------------------------------------------------------------- */ +static const char *Code93[] = { + "131112", "111213", "111312", "111411", "121113", /* 0: 0 - 4 */ + "121212", "121311", "111114", "131211", "141111", /* 5: 5 - 9 */ + "211113", "211212", "211311", "221112", "221211", /* 10: A - E */ + "231111", "112113", "112212", "112311", "122112", /* 15: F - J */ + "132111", "111123", "111222", "111321", "121122", /* 20: K - O */ + "131121", "212112", "212211", "211122", "211221", /* 25: P - T */ + "221121", "222111", "112122", "112221", "122121", /* 30: U - Y */ + "123111", "121131", "311112", "311211", "321111", /* 35: Z,-,.,SP,$ */ + "112131", "113121", "211131", "131221", "312111", /* 40: /,+,%,($),(%) */ + "311121", "122211", "111141" /* 45: (/),(+), Start */ +}; + + /* Use "[]{}#" to represent special codes 43-47 */ +static const char Code93Val[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%[]{}#"; + +static const l_int32 C93_START = 47; +static const l_int32 C93_STOP = 47; + + + /* ----------------------------------------------------------------- * + * Code 39 symbology * + * ----------------------------------------------------------------- */ +static const char *Code39[] = { + "111221211", "211211112", "112211112", "212211111", /* 0: 0 - 3 */ + "111221112", "211221111", "112221111", "111211212", /* 4: 4 - 7 */ + "211211211", "112211211", "211112112", "112112112", /* 8: 8 - B */ + "212112111", "111122112", "211122111", "112122111", /* 12: C - F */ + "111112212", "211112211", "112112211", "111122211", /* 16: G - J */ + "211111122", "112111122", "212111121", "111121122", /* 20: K - N */ + "211121121", "112121121", "111111222", "211111221", /* 24: O - R */ + "112111221", "111121221", "221111112", "122111112", /* 28: S - V */ + "222111111", "121121112", "221121111", "122121111", /* 32: W - Z */ + "121111212", "221111211", "122111211", "121212111", /* 36: -,.,SP,$ */ + "121211121", "121112121", "111212121", "121121211" /* 40: /,+,%,* */ +}; + + /* Use "*" to represent the Start and Stop codes (43) */ +static const char Code39Val[] = + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; + +static const l_int32 C39_START = 43; +static const l_int32 C39_STOP = 43; + + + /* ----------------------------------------------------------------- * + * Codabar symbology * + * ----------------------------------------------------------------- */ +static const char *Codabar[] = { + "1111122", "1111221", "1112112", "2211111", "1121121", /* 0: 0 - 4 */ + "2111121", "1211112", "1211211", "1221111", "2112111", /* 5: 5 - 9 */ + "1112211", "1122111", "2111212", "2121112", "2121211", /* 10: -,$,:,/,. */ + "1121212", "1122121", "1212112", "1112122", "1112221" /* 15: +,A,B,C,D */ +}; + + /* Ascii representations for codes 16-19: (A or T), (B or N), (C or *), + * (D or E). These are used in pairs for the Start and Stop codes. */ +static const char CodabarVal[] = "0123456789-$:/.+ABCD"; + + + /* ----------------------------------------------------------------- * + * UPC-A symbology * + * ----------------------------------------------------------------- */ +static const char *Upca[] = { + "3211", "2221", "2122", "1411", "1132", /* 0: 0 - 4 */ + "1231", "1114", "1312", "1213", "3112", /* 5: 5 - 9 */ + "111", "111", "11111" /* 10: Start, Stop, Mid */ +}; + +static const l_int32 UPCA_START = 10; +static const l_int32 UPCA_STOP = 11; +static const l_int32 UPCA_MID = 12; + + + /* ----------------------------------------------------------------- * + * Code128 symbology * + * ----------------------------------------------------------------- */ +static const char *Code128[] = { + "212222", "222122", "222221", "121223", "121322", /* 0 - 4 */ + "131222", "122213", "122312", "132212", "221213", /* 5 - 9 */ + "221312", "231212", "112232", "122132", "122231", /* 10 - 14 */ + "113222", "123122", "123221", "223211", "221132", /* 15 - 19 */ + "221231", "213212", "223112", "312131", "311222", /* 20 - 24 */ + "321122", "321221", "312212", "322112", "322211", /* 25 - 29 */ + "212123", "212321", "232121", "111323", "131123", /* 30 - 34 */ + "131321", "112313", "132113", "132311", "211313", /* 35 - 39 */ + "231113", "231311", "112133", "112331", "132131", /* 40 - 44 */ + "113123", "113321", "133121", "313121", "211331", /* 45 - 49 */ + "231131", "213113", "213311", "213131", "311123", /* 50 - 54 */ + "311321", "331121", "312113", "312311", "332111", /* 55 - 59 */ + "314111", "221411", "431111", "111224", "111422", /* 60 - 64 */ + "121124", "121421", "141122", "141221", "112214", /* 65 - 69 */ + "112412", "122114", "122411", "142112", "142211", /* 70 - 74 */ + "241211", "221114", "413111", "241112", "134111", /* 75 - 79 */ + "111242", "121142", "121241", "114212", "124112", /* 80 - 84 */ + "124211", "411212", "421112", "421211", "212141", /* 85 - 89 */ + "214121", "412121", "111143", "111341", "131141", /* 90 - 94 */ + "114113", "114311", "411113", "411311", "113141", /* 95 - 99 */ + "114131", "311141", "411131", "211412", "211214", /* 100 - 104 */ + "211232", "2331112" /* 105 - 106 */ +}; + +static const l_int32 C128_FUN_3 = 96; /* in A or B only; in C it is 96 */ +static const l_int32 C128_FUNC_2 = 97; /* in A or B only; in C it is 97 */ +static const l_int32 C128_SHIFT = 98; /* in A or B only; in C it is 98 */ +static const l_int32 C128_GOTO_C = 99; /* in A or B only; in C it is 99 */ +static const l_int32 C128_GOTO_B = 100; +static const l_int32 C128_GOTO_A = 101; +static const l_int32 C128_FUNC_1 = 102; +static const l_int32 C128_START_A = 103; +static const l_int32 C128_START_B = 104; +static const l_int32 C128_START_C = 105; +static const l_int32 C128_STOP = 106; + /* code 128 symbols are 11 units */ +static const l_int32 C128_SYMBOL_WIDTH = 11; + + + +#endif /* LEPTONICA_READBARCODE_H */ diff --git a/3rdparty/hgOCR/leptonica/readfile.c b/3rdparty/hgOCR/leptonica/readfile.c new file mode 100644 index 00000000..53dda86b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/readfile.c @@ -0,0 +1,1627 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file readfile.c: reads image on file into memory + *
+ *
+ *      Top-level functions for reading images from file
+ *           PIXA      *pixaReadFiles()
+ *           PIXA      *pixaReadFilesSA()
+ *           PIX       *pixRead()
+ *           PIX       *pixReadWithHint()
+ *           PIX       *pixReadIndexed()
+ *           PIX       *pixReadStream()
+ *
+ *      Read header information from file
+ *           l_int32    pixReadHeader()
+ *
+ *      Format finders
+ *           l_int32    findFileFormat()
+ *           l_int32    findFileFormatStream()
+ *           l_int32    findFileFormatBuffer()
+ *           l_int32    fileFormatIsTiff()
+ *
+ *      Read from memory
+ *           PIX       *pixReadMem()
+ *           l_int32    pixReadHeaderMem()
+ *
+ *      Output image file information
+ *           void       writeImageFileInfo()
+ *
+ *      Test function for I/O with different formats
+ *           l_int32    ioFormatTest()
+ *
+ *  Supported file formats:
+ *  (1) Reading is supported without any external libraries:
+ *          bmp
+ *          pnm   (including pbm, pgm, etc)
+ *          spix  (raw serialized)
+ *  (2) Reading is supported with installation of external libraries:
+ *          png
+ *          jpg   (standard jfif version)
+ *          tiff  (including most varieties of compression)
+ *          gif
+ *          webp
+ *          jp2 (jpeg 2000)
+ *  (3) Other file types will get an "unknown format" error.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include "allheaders.h" + + /* Output files for ioFormatTest(). */ +static const char *FILE_BMP = "/tmp/lept/format/file.bmp"; +static const char *FILE_PNG = "/tmp/lept/format/file.png"; +static const char *FILE_PNM = "/tmp/lept/format/file.pnm"; +static const char *FILE_G3 = "/tmp/lept/format/file_g3.tif"; +static const char *FILE_G4 = "/tmp/lept/format/file_g4.tif"; +static const char *FILE_RLE = "/tmp/lept/format/file_rle.tif"; +static const char *FILE_PB = "/tmp/lept/format/file_packbits.tif"; +static const char *FILE_LZW = "/tmp/lept/format/file_lzw.tif"; +static const char *FILE_ZIP = "/tmp/lept/format/file_zip.tif"; +static const char *FILE_TIFF_JPEG = "/tmp/lept/format/file_jpeg.tif"; +static const char *FILE_TIFF = "/tmp/lept/format/file.tif"; +static const char *FILE_JPG = "/tmp/lept/format/file.jpg"; +static const char *FILE_GIF = "/tmp/lept/format/file.gif"; +static const char *FILE_WEBP = "/tmp/lept/format/file.webp"; +static const char *FILE_JP2K = "/tmp/lept/format/file.jp2"; + +static const unsigned char JP2K_CODESTREAM[4] = { 0xff, 0x4f, 0xff, 0x51 }; +static const unsigned char JP2K_IMAGE_DATA[12] = { 0x00, 0x00, 0x00, 0x0C, + 0x6A, 0x50, 0x20, 0x20, + 0x0D, 0x0A, 0x87, 0x0A }; + + +/*---------------------------------------------------------------------* + * Top-level functions for reading images from file * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaReadFiles() + * + * \param[in] dirname + * \param[in] substr [optional] substring filter on filenames; can be null + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) %dirname is the full path for the directory.
+ *      (2) %substr is the part of the file name (excluding
+ *          the directory) that is to be matched.  All matching
+ *          filenames are read into the Pixa.  If substr is NULL,
+ *          all filenames are read into the Pixa.
+ * 
+ */ +PIXA * +pixaReadFiles(const char *dirname, + const char *substr) +{ +PIXA *pixa; +SARRAY *sa; + + PROCNAME("pixaReadFiles"); + + if (!dirname) + return (PIXA *)ERROR_PTR("dirname not defined", procName, NULL); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return (PIXA *)ERROR_PTR("sa not made", procName, NULL); + + pixa = pixaReadFilesSA(sa); + sarrayDestroy(&sa); + return pixa; +} + + +/*! + * \brief pixaReadFilesSA() + * + * \param[in] sa full pathnames for all files + * \return pixa, or NULL on error + */ +PIXA * +pixaReadFilesSA(SARRAY *sa) +{ +char *str; +l_int32 i, n; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixaReadFilesSA"); + + if (!sa) + return (PIXA *)ERROR_PTR("sa not defined", procName, NULL); + + n = sarrayGetCount(sa); + pixa = pixaCreate(n); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + if ((pix = pixRead(str)) == NULL) { + L_WARNING("pix not read from file %s\n", procName, str); + continue; + } + pixaAddPix(pixa, pix, L_INSERT); + } + + return pixa; +} + + +/*! + * \brief pixRead() + * + * \param[in] filename with full pathname or in local directory + * \return pix if OK; NULL on error + * + *
+ * Notes:
+ *      (1) See at top of file for supported formats.
+ * 
+ */ +PIX * +pixRead(const char *filename) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixRead"); + + if (!filename) + return (PIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) { + L_ERROR("image file not found: %s\n", procName, filename); + return NULL; + } + pix = pixReadStream(fp, 0); + fclose(fp); + if (!pix) + return (PIX *)ERROR_PTR("pix not read", procName, NULL); + return pix; +} + + +/*! + * \brief pixReadWithHint() + * + * \param[in] filename with full pathname or in local directory + * \param[in] hint bitwise OR of L_HINT_* values for jpeg; + * use 0 for no hint + * \return pix if OK; NULL on error + * + *
+ * Notes:
+ *      (1) The hint is not binding, but may be used to optimize jpeg decoding.
+ *          Use 0 for no hinting.
+ * 
+ */ +PIX * +pixReadWithHint(const char *filename, + l_int32 hint) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadWithHint"); + + if (!filename) + return (PIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIX *)ERROR_PTR("image file not found", procName, NULL); + pix = pixReadStream(fp, hint); + fclose(fp); + + if (!pix) + return (PIX *)ERROR_PTR("image not returned", procName, NULL); + return pix; +} + + +/*! + * \brief pixReadIndexed() + * + * \param[in] sa string array of full pathnames + * \param[in] index into pathname array + * \return pix if OK; null if not found + * + *
+ * Notes:
+ *      (1) This function is useful for selecting image files from a
+ *          directory, where the integer %index is embedded into
+ *          the file name.
+ *      (2) This is typically done by generating the sarray using
+ *          getNumberedPathnamesInDirectory(), so that the %index
+ *          pathname would have the number %index in it.  The size
+ *          of the sarray should be the largest number (plus 1) appearing
+ *          in the file names, respecting the constraints in the
+ *          call to getNumberedPathnamesInDirectory().
+ *      (3) Consequently, for some indices into the sarray, there may
+ *          be no pathnames in the directory containing that number.
+ *          By convention, we place empty C strings ("") in those
+ *          locations in the sarray, and it is not an error if such
+ *          a string is encountered and no pix is returned.
+ *          Therefore, the caller must verify that a pix is returned.
+ *      (4) See convertSegmentedPagesToPS() in src/psio1.c for an
+ *          example of usage.
+ * 
+ */ +PIX * +pixReadIndexed(SARRAY *sa, + l_int32 index) +{ +char *fname; +l_int32 n; +PIX *pix; + + PROCNAME("pixReadIndexed"); + + if (!sa) + return (PIX *)ERROR_PTR("sa not defined", procName, NULL); + n = sarrayGetCount(sa); + if (index < 0 || index >= n) + return (PIX *)ERROR_PTR("index out of bounds", procName, NULL); + + fname = sarrayGetString(sa, index, L_NOCOPY); + if (fname[0] == '\0') + return NULL; + + if ((pix = pixRead(fname)) == NULL) { + L_ERROR("pix not read from file %s\n", procName, fname); + return NULL; + } + + return pix; +} + + +/*! + * \brief pixReadStream() + * + * \param[in] fp file stream + * \param[in] hint bitwise OR of L_HINT_* values for jpeg; 0 for no hint + * \return pix if OK; NULL on error + * + *
+ * Notes:
+ *      (1) The hint only applies to jpeg.
+ * 
+ */ +PIX * +pixReadStream(FILE *fp, + l_int32 hint) +{ +l_int32 format, ret, valid; +l_uint8 *comment; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixReadStream"); + + if (!fp) + return (PIX *)ERROR_PTR("stream not defined", procName, NULL); + pix = NULL; + + findFileFormatStream(fp, &format); + switch (format) + { + case IFF_BMP: + if ((pix = pixReadStreamBmp(fp)) == NULL ) + return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL); + break; + + case IFF_JFIF_JPEG: + if ((pix = pixReadStreamJpeg(fp, 0, 1, NULL, hint)) == NULL) + return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL); + ret = fgetJpegComment(fp, &comment); + if (!ret && comment) + pixSetText(pix, (char *)comment); + LEPT_FREE(comment); + break; + + case IFF_PNG: + if ((pix = pixReadStreamPng(fp)) == NULL) + return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL); + break; + + case IFF_TIFF: + case IFF_TIFF_PACKBITS: + case IFF_TIFF_RLE: + case IFF_TIFF_G3: + case IFF_TIFF_G4: + case IFF_TIFF_LZW: + case IFF_TIFF_ZIP: + case IFF_TIFF_JPEG: + if ((pix = pixReadStreamTiff(fp, 0)) == NULL) /* page 0 by default */ + return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL); + break; + + case IFF_PNM: + if ((pix = pixReadStreamPnm(fp)) == NULL) + return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL); + break; + + case IFF_GIF: + if ((pix = pixReadStreamGif(fp)) == NULL) + return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL); + break; + + case IFF_JP2: + if ((pix = pixReadStreamJp2k(fp, 1, NULL, 0, 0)) == NULL) + return (PIX *)ERROR_PTR("jp2: no pix returned", procName, NULL); + break; + + case IFF_WEBP: + if ((pix = pixReadStreamWebP(fp)) == NULL) + return (PIX *)ERROR_PTR("webp: no pix returned", procName, NULL); + break; + + case IFF_PS: + L_ERROR("PostScript reading is not supported\n", procName); + return NULL; + + case IFF_LPDF: + L_ERROR("Pdf reading is not supported\n", procName); + return NULL; + + case IFF_SPIX: + if ((pix = pixReadStreamSpix(fp)) == NULL) + return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL); + break; + + case IFF_UNKNOWN: + return (PIX *)ERROR_PTR( "Unknown format: no pix returned", + procName, NULL); + break; + } + + if (pix) { + pixSetInputFormat(pix, format); + if ((cmap = pixGetColormap(pix))) { + pixcmapIsValid(cmap, &valid); + if (!valid) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("invalid colormap", procName, NULL); + } + } + } + return pix; +} + + + +/*---------------------------------------------------------------------* + * Read header information from file * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadHeader() + * + * \param[in] filename with full pathname or in local directory + * \param[out] pformat [optional] file format + * \param[out] pw, ph [optional] width and height + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel 1, 3 or 4 + * \param[out] piscmap [optional] 1 if cmap exists; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This reads the actual headers for jpeg, png, tiff and pnm.
+ *          For bmp and gif, we cheat and read the entire file into a pix,
+ *          from which we extract the "header" information.
+ * 
+ */ +l_ok +pixReadHeader(const char *filename, + l_int32 *pformat, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 format, ret, w, h, d, bps, spp, iscmap; +l_int32 type; /* ignored */ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadHeader"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (piscmap) *piscmap = 0; + if (pformat) *pformat = 0; + iscmap = 0; /* init to false */ + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + findFileFormatStream(fp, &format); + fclose(fp); + + switch (format) + { + case IFF_BMP: /* cheating: reading the entire file */ + if ((pix = pixRead(filename)) == NULL) + return ERROR_INT( "bmp: pix not read", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (pixGetColormap(pix)) + iscmap = 1; + pixDestroy(&pix); + bps = (d == 32) ? 8 : d; + spp = (d == 32) ? 3 : 1; + break; + + case IFF_JFIF_JPEG: + ret = readHeaderJpeg(filename, &w, &h, &spp, NULL, NULL); + bps = 8; + if (ret) + return ERROR_INT( "jpeg: no header info returned", procName, 1); + break; + + case IFF_PNG: + ret = readHeaderPng(filename, &w, &h, &bps, &spp, &iscmap); + if (ret) + return ERROR_INT( "png: no header info returned", procName, 1); + break; + + case IFF_TIFF: + case IFF_TIFF_PACKBITS: + case IFF_TIFF_RLE: + case IFF_TIFF_G3: + case IFF_TIFF_G4: + case IFF_TIFF_LZW: + case IFF_TIFF_ZIP: + case IFF_TIFF_JPEG: + /* Reading page 0 by default; possibly redefine format */ + ret = readHeaderTiff(filename, 0, &w, &h, &bps, &spp, NULL, &iscmap, + &format); + if (ret) + return ERROR_INT( "tiff: no header info returned", procName, 1); + break; + + case IFF_PNM: + ret = readHeaderPnm(filename, &w, &h, &d, &type, &bps, &spp); + if (ret) + return ERROR_INT( "pnm: no header info returned", procName, 1); + break; + + case IFF_GIF: /* cheating: reading the entire file */ + if ((pix = pixRead(filename)) == NULL) + return ERROR_INT( "gif: pix not read", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + pixDestroy(&pix); + iscmap = 1; /* always colormapped; max 256 colors */ + spp = 1; + bps = d; + break; + + case IFF_JP2: + ret = readHeaderJp2k(filename, &w, &h, &bps, &spp); + break; + + case IFF_WEBP: + if (readHeaderWebP(filename, &w, &h, &spp)) + return ERROR_INT( "webp: no header info returned", procName, 1); + bps = 8; + break; + + case IFF_PS: + if (pformat) *pformat = format; + return ERROR_INT("PostScript reading is not supported\n", procName, 1); + + case IFF_LPDF: + if (pformat) *pformat = format; + return ERROR_INT("Pdf reading is not supported\n", procName, 1); + + case IFF_SPIX: + ret = readHeaderSpix(filename, &w, &h, &bps, &spp, &iscmap); + if (ret) + return ERROR_INT( "spix: no header info returned", procName, 1); + break; + + case IFF_UNKNOWN: + L_ERROR("unknown format in file %s\n", procName, filename); + return 1; + break; + } + + if (pw) *pw = w; + if (ph) *ph = h; + if (pbps) *pbps = bps; + if (pspp) *pspp = spp; + if (piscmap) *piscmap = iscmap; + if (pformat) *pformat = format; + return 0; +} + + +/*---------------------------------------------------------------------* + * Format finders * + *---------------------------------------------------------------------*/ +/*! + * \brief findFileFormat() + * + * \param[in] filename + * \param[out] pformat found format + * \return 0 if OK, 1 on error or if format is not recognized + */ +l_ok +findFileFormat(const char *filename, + l_int32 *pformat) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("findFileFormat"); + + if (!pformat) + return ERROR_INT("&format not defined", procName, 1); + *pformat = IFF_UNKNOWN; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = findFileFormatStream(fp, pformat); + fclose(fp); + return ret; +} + + +/*! + * \brief findFileFormatStream() + * + * \param[in] fp file stream + * \param[out] pformat found format + * \return 0 if OK, 1 on error or if format is not recognized + * + *
+ * Notes:
+ *      (1) Important: Side effect -- this resets fp to BOF.
+ * 
+ */ +l_ok +findFileFormatStream(FILE *fp, + l_int32 *pformat) +{ +l_uint8 firstbytes[12]; +l_int32 format; + + PROCNAME("findFileFormatStream"); + + if (!pformat) + return ERROR_INT("&format not defined", procName, 1); + *pformat = IFF_UNKNOWN; + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + + rewind(fp); + if (fnbytesInFile(fp) < 12) + return ERROR_INT("truncated file", procName, 1); + + if (fread(&firstbytes, 1, 12, fp) != 12) + return ERROR_INT("failed to read first 12 bytes of file", procName, 1); + rewind(fp); + + findFileFormatBuffer(firstbytes, &format); + if (format == IFF_TIFF) { + findTiffCompression(fp, &format); + rewind(fp); + } + *pformat = format; + if (format == IFF_UNKNOWN) + return 1; + else + return 0; +} + + +/*! + * \brief findFileFormatBuffer() + * + * \param[in] buf byte buffer at least 12 bytes in size; we can't check + * \param[out] pformat found format + * \return 0 if OK, 1 on error or if format is not recognized + * + *
+ * Notes:
+ *      (1) This determines the file format from the first 12 bytes in
+ *          the compressed data stream, which are stored in memory.
+ *      (2) For tiff files, this returns IFF_TIFF.  The specific tiff
+ *          compression is then determined using findTiffCompression().
+ * 
+ */ +l_ok +findFileFormatBuffer(const l_uint8 *buf, + l_int32 *pformat) +{ +l_uint16 twobytepw; + + PROCNAME("findFileFormatBuffer"); + + if (!pformat) + return ERROR_INT("&format not defined", procName, 1); + *pformat = IFF_UNKNOWN; + if (!buf) + return ERROR_INT("byte buffer not defined", procName, 0); + + /* Check the bmp and tiff 2-byte header ids */ + ((char *)(&twobytepw))[0] = buf[0]; + ((char *)(&twobytepw))[1] = buf[1]; + + if (convertOnBigEnd16(twobytepw) == BMP_ID) { + *pformat = IFF_BMP; + return 0; + } + + if (twobytepw == TIFF_BIGEND_ID || twobytepw == TIFF_LITTLEEND_ID) { + *pformat = IFF_TIFF; + return 0; + } + + /* Check for the p*m 2-byte header ids */ + if ((buf[0] == 'P' && buf[1] == '4') || /* newer packed */ + (buf[0] == 'P' && buf[1] == '1')) { /* old ASCII format */ + *pformat = IFF_PNM; + return 0; + } + + if ((buf[0] == 'P' && buf[1] == '5') || /* newer */ + (buf[0] == 'P' && buf[1] == '2')) { /* old */ + *pformat = IFF_PNM; + return 0; + } + + if ((buf[0] == 'P' && buf[1] == '6') || /* newer */ + (buf[0] == 'P' && buf[1] == '3')) { /* old */ + *pformat = IFF_PNM; + return 0; + } + + if (buf[0] == 'P' && buf[1] == '7') { /* new arbitrary (PAM) */ + *pformat = IFF_PNM; + return 0; + } + + /* Consider the first 11 bytes of the standard JFIF JPEG header: + * - The first two bytes are the most important: 0xffd8. + * - The next two bytes are the jfif marker: 0xffe0. + * Not all jpeg files have this marker. + * - The next two bytes are the header length. + * - The next 5 bytes are a null-terminated string. + * For JFIF, the string is "JFIF", naturally. For others it + * can be "Exif" or just about anything else. + * - Because of all this variability, we only check the first + * two byte marker. All jpeg files are identified as + * IFF_JFIF_JPEG. */ + if (buf[0] == 0xff && buf[1] == 0xd8) { + *pformat = IFF_JFIF_JPEG; + return 0; + } + + /* Check for the 8 byte PNG signature (png_signature in png.c): + * {137, 80, 78, 71, 13, 10, 26, 10} */ + if (buf[0] == 137 && buf[1] == 80 && buf[2] == 78 && buf[3] == 71 && + buf[4] == 13 && buf[5] == 10 && buf[6] == 26 && buf[7] == 10) { + *pformat = IFF_PNG; + return 0; + } + + /* Look for "GIF87a" or "GIF89a" */ + if (buf[0] == 'G' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == '8' && + (buf[4] == '7' || buf[4] == '9') && buf[5] == 'a') { + *pformat = IFF_GIF; + return 0; + } + + /* Check for both types of jp2k file */ + if (memcmp(buf, JP2K_CODESTREAM, 4) == 0 || + memcmp(buf, JP2K_IMAGE_DATA, 12) == 0) { + *pformat = IFF_JP2; + return 0; + } + + /* Check for webp */ + if (buf[0] == 'R' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == 'F' && + buf[8] == 'W' && buf[9] == 'E' && buf[10] == 'B' && buf[11] == 'P') { + *pformat = IFF_WEBP; + return 0; + } + + /* Check for ps */ + if (buf[0] == '%' && buf[1] == '!' && buf[2] == 'P' && buf[3] == 'S' && + buf[4] == '-' && buf[5] == 'A' && buf[6] == 'd' && buf[7] == 'o' && + buf[8] == 'b' && buf[9] == 'e') { + *pformat = IFF_PS; + return 0; + } + + /* Check for pdf */ + if (buf[0] == '%' && buf[1] == 'P' && buf[2] == 'D' && buf[3] == 'F' && + buf[4] == '-' && buf[5] == '1') { + *pformat = IFF_LPDF; + return 0; + } + + /* Check for "spix" serialized pix */ + if (buf[0] == 's' && buf[1] == 'p' && buf[2] == 'i' && buf[3] == 'x') { + *pformat = IFF_SPIX; + return 0; + } + + /* File format identifier not found; unknown */ + return 1; +} + + +/*! + * \brief fileFormatIsTiff() + * + * \param[in] fp file stream + * \return 1 if file is tiff; 0 otherwise or on error + */ +l_int32 +fileFormatIsTiff(FILE *fp) +{ +l_int32 format; + + PROCNAME("fileFormatIsTiff"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 0); + + findFileFormatStream(fp, &format); + if (format == IFF_TIFF || format == IFF_TIFF_PACKBITS || + format == IFF_TIFF_RLE || format == IFF_TIFF_G3 || + format == IFF_TIFF_G4 || format == IFF_TIFF_LZW || + format == IFF_TIFF_ZIP || format == IFF_TIFF_JPEG) + return 1; + else + return 0; +} + + +/*---------------------------------------------------------------------* + * Read from memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadMem() + * + * \param[in] data const; encoded + * \param[in] size size of data + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a variation of pixReadStream(), where the data is read
+ *          from a memory buffer rather than a file.
+ *      (2) On windows, this only reads tiff formatted files directly from
+ *          memory.  For other formats, it writes to a temp file and
+ *          decompresses from file.
+ *      (3) findFileFormatBuffer() requires up to 12 bytes to decide on
+ *          the format.  That determines the constraint here.  But in
+ *          fact the data must contain the entire compressed string for
+ *          the image.
+ * 
+ */ +PIX * +pixReadMem(const l_uint8 *data, + size_t size) +{ +l_int32 format, valid; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixReadMem"); + + if (!data) + return (PIX *)ERROR_PTR("data not defined", procName, NULL); + if (size < 12) + return (PIX *)ERROR_PTR("size < 12", procName, NULL); + pix = NULL; + + findFileFormatBuffer(data, &format); + switch (format) + { + case IFF_BMP: + if ((pix = pixReadMemBmp(data, size)) == NULL ) + return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL); + break; + + case IFF_JFIF_JPEG: + if ((pix = pixReadMemJpeg(data, size, 0, 1, NULL, 0)) == NULL) + return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL); + break; + + case IFF_PNG: + if ((pix = pixReadMemPng(data, size)) == NULL) + return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL); + break; + + case IFF_TIFF: + case IFF_TIFF_PACKBITS: + case IFF_TIFF_RLE: + case IFF_TIFF_G3: + case IFF_TIFF_G4: + case IFF_TIFF_LZW: + case IFF_TIFF_ZIP: + /* Reading page 0 by default */ + if ((pix = pixReadMemTiff(data, size, 0)) == NULL) + return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL); + break; + + case IFF_PNM: + if ((pix = pixReadMemPnm(data, size)) == NULL) + return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL); + break; + + case IFF_GIF: + if ((pix = pixReadMemGif(data, size)) == NULL) + return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL); + break; + + case IFF_JP2: + if ((pix = pixReadMemJp2k(data, size, 1, NULL, 0, 0)) == NULL) + return (PIX *)ERROR_PTR("jp2k: no pix returned", procName, NULL); + break; + + case IFF_WEBP: + if ((pix = pixReadMemWebP(data, size)) == NULL) + return (PIX *)ERROR_PTR("webp: no pix returned", procName, NULL); + break; + + case IFF_PS: + L_ERROR("PostScript reading is not supported\n", procName); + return NULL; + + case IFF_LPDF: + L_ERROR("Pdf reading is not supported\n", procName); + return NULL; + + case IFF_SPIX: + if ((pix = pixReadMemSpix(data, size)) == NULL) + return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL); + break; + + case IFF_UNKNOWN: + return (PIX *)ERROR_PTR("Unknown format: no pix returned", + procName, NULL); + break; + } + + /* Set the input format. For tiff reading from memory we lose + * the actual input format; for 1 bpp, default to G4. Also + * verify that the colormap is valid. */ + if (pix) { + if (format == IFF_TIFF && pixGetDepth(pix) == 1) + format = IFF_TIFF_G4; + pixSetInputFormat(pix, format); + if ((cmap = pixGetColormap(pix))) { + pixcmapIsValid(cmap, &valid); + if (!valid) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("invalid colormap", procName, NULL); + } + } + pixSetPadBits(pix, 0); + } + return pix; +} + + +/*! + * \brief pixReadHeaderMem() + * + * \param[in] data const; encoded + * \param[in] size size of data + * \param[out] pformat [optional] image format + * \param[out] pw, ph [optional] width and height + * \param[out] pbps [optional] bits/sample + * \param[out] pspp [optional] samples/pixel 1, 3 or 4 + * \param[out] piscmap [optional] 1 if cmap exists; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This reads the actual headers for jpeg, png, tiff, jp2k and pnm.
+ *          For bmp and gif, we cheat and read all the data into a pix,
+ *          from which we extract the "header" information.
+ *      (2) The amount of data required depends on the format.  For
+ *          png, it requires less than 30 bytes, but for jpeg it can
+ *          require most of the compressed file.  In practice, the data
+ *          is typically the entire compressed file in memory.
+ *      (3) findFileFormatBuffer() requires up to 8 bytes to decide on
+ *          the format, which we require.
+ * 
+ */ +l_ok +pixReadHeaderMem(const l_uint8 *data, + size_t size, + l_int32 *pformat, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 format, ret, w, h, d, bps, spp, iscmap; +l_int32 type; /* not used */ +PIX *pix; + + PROCNAME("pixReadHeaderMem"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (piscmap) *piscmap = 0; + if (pformat) *pformat = 0; + iscmap = 0; /* init to false */ + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (size < 8) + return ERROR_INT("size < 8", procName, 1); + + findFileFormatBuffer(data, &format); + + switch (format) + { + case IFF_BMP: /* cheating: read the pix */ + if ((pix = pixReadMemBmp(data, size)) == NULL) + return ERROR_INT( "bmp: pix not read", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + pixDestroy(&pix); + bps = (d == 32) ? 8 : d; + spp = (d == 32) ? 3 : 1; + break; + + case IFF_JFIF_JPEG: + ret = readHeaderMemJpeg(data, size, &w, &h, &spp, NULL, NULL); + bps = 8; + if (ret) + return ERROR_INT( "jpeg: no header info returned", procName, 1); + break; + + case IFF_PNG: + ret = readHeaderMemPng(data, size, &w, &h, &bps, &spp, &iscmap); + if (ret) + return ERROR_INT( "png: no header info returned", procName, 1); + break; + + case IFF_TIFF: + case IFF_TIFF_PACKBITS: + case IFF_TIFF_RLE: + case IFF_TIFF_G3: + case IFF_TIFF_G4: + case IFF_TIFF_LZW: + case IFF_TIFF_ZIP: + case IFF_TIFF_JPEG: + /* Reading page 0 by default; possibly redefine format */ + ret = readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, + NULL, &iscmap, &format); + if (ret) + return ERROR_INT( "tiff: no header info returned", procName, 1); + break; + + case IFF_PNM: + ret = readHeaderMemPnm(data, size, &w, &h, &d, &type, &bps, &spp); + if (ret) + return ERROR_INT( "pnm: no header info returned", procName, 1); + break; + + case IFF_GIF: /* cheating: read the pix */ + if ((pix = pixReadMemGif(data, size)) == NULL) + return ERROR_INT( "gif: pix not read", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + pixDestroy(&pix); + iscmap = 1; /* always colormapped; max 256 colors */ + spp = 1; + bps = d; + break; + + case IFF_JP2: + ret = readHeaderMemJp2k(data, size, &w, &h, &bps, &spp); + break; + + case IFF_WEBP: + bps = 8; + ret = readHeaderMemWebP(data, size, &w, &h, &spp); + break; + + case IFF_PS: + if (pformat) *pformat = format; + return ERROR_INT("PostScript reading is not supported\n", procName, 1); + + case IFF_LPDF: + if (pformat) *pformat = format; + return ERROR_INT("Pdf reading is not supported\n", procName, 1); + + case IFF_SPIX: + ret = sreadHeaderSpix((l_uint32 *)data, &w, &h, &bps, + &spp, &iscmap); + if (ret) + return ERROR_INT( "pnm: no header info returned", procName, 1); + break; + + case IFF_UNKNOWN: + return ERROR_INT("unknown format; no data returned", procName, 1); + break; + } + + if (pw) *pw = w; + if (ph) *ph = h; + if (pbps) *pbps = bps; + if (pspp) *pspp = spp; + if (piscmap) *piscmap = iscmap; + if (pformat) *pformat = format; + return 0; +} + + +/*---------------------------------------------------------------------* + * Output image file information * + *---------------------------------------------------------------------*/ +extern const char *ImageFileFormatExtensions[]; + +/*! + * \brief writeImageFileInfo() + * + * \param[in] filename input file + * \param[in] fpout output file stream + * \param[in] headeronly 1 to read only the header; 0 to read both + * the header and the input file + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If headeronly == 0 and the image has spp == 4,this will
+ *          also call pixDisplayLayersRGBA() to display the image
+ *          in three views.
+ *      (2) This is a debug function that changes the value of
+ *          var_PNG_STRIP_16_TO_8 to 1 (the default).
+ * 
+ */ +l_ok +writeImageFileInfo(const char *filename, + FILE *fpout, + l_int32 headeronly) +{ +char *text; +l_int32 w, h, d, wpl, count, npages, color; +l_int32 format, bps, spp, iscmap, xres, yres, transparency; +FILE *fpin; +PIX *pix, *pixt; +PIXCMAP *cmap; + + PROCNAME("writeImageFileInfo"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!fpout) + return ERROR_INT("stream not defined", procName, 1); + + /* Read the header */ + if (pixReadHeader(filename, &format, &w, &h, &bps, &spp, &iscmap)) { + L_ERROR("failure to read header of %s\n", procName, filename); + return 1; + } + fprintf(fpout, "===============================================\n" + "Reading the header:\n"); + fprintf(fpout, " input image format type: %s\n", + ImageFileFormatExtensions[format]); + fprintf(fpout, " w = %d, h = %d, bps = %d, spp = %d, iscmap = %d\n", + w, h, bps, spp, iscmap); + + findFileFormat(filename, &format); + if (format == IFF_JP2) { + fpin = lept_fopen(filename, "rb"); + fgetJp2kResolution(fpin, &xres, &yres); + fclose(fpin); + fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); + } else if (format == IFF_PNG) { + fpin = lept_fopen(filename, "rb"); + fgetPngResolution(fpin, &xres, &yres); + fclose(fpin); + fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); + if (iscmap) { + fpin = lept_fopen(filename, "rb"); + fgetPngColormapInfo(fpin, &cmap, &transparency); + fclose(fpin); + if (transparency) + fprintf(fpout, " colormap has transparency\n"); + else + fprintf(fpout, " colormap does not have transparency\n"); + pixcmapWriteStream(fpout, cmap); + pixcmapDestroy(&cmap); + } + } else if (format == IFF_JFIF_JPEG) { + fpin = lept_fopen(filename, "rb"); + fgetJpegResolution(fpin, &xres, &yres); + fclose(fpin); + fprintf(fpout, " xres = %d, yres = %d\n", xres, yres); + } + + if (headeronly) + return 0; + + /* Read the full image. Note that when we read an image that + * has transparency in a colormap, we convert it to RGBA. */ + fprintf(fpout, "===============================================\n" + "Reading the full image:\n"); + + /* Preserve 16 bpp if the format is png */ + if (format == IFF_PNG && bps == 16) + l_pngSetReadStrip16To8(0); + + if ((pix = pixRead(filename)) == NULL) { + L_ERROR("failure to read full image of %s\n", procName, filename); + return 1; + } + + format = pixGetInputFormat(pix); + pixGetDimensions(pix, &w, &h, &d); + wpl = pixGetWpl(pix); + spp = pixGetSpp(pix); + fprintf(fpout, " input image format type: %s\n", + ImageFileFormatExtensions[format]); + fprintf(fpout, " w = %d, h = %d, d = %d, spp = %d, wpl = %d\n", + w, h, d, spp, wpl); + fprintf(fpout, " xres = %d, yres = %d\n", + pixGetXRes(pix), pixGetYRes(pix)); + + text = pixGetText(pix); + if (text) /* not null */ + fprintf(fpout, " text: %s\n", text); + + cmap = pixGetColormap(pix); + if (cmap) { + pixcmapHasColor(cmap, &color); + if (color) + fprintf(fpout, " colormap exists and has color values:"); + else + fprintf(fpout, " colormap exists and has only gray values:"); + pixcmapWriteStream(fpout, pixGetColormap(pix)); + } + else + fprintf(fpout, " colormap does not exist\n"); + + if (format == IFF_TIFF || format == IFF_TIFF_G4 || + format == IFF_TIFF_G3 || format == IFF_TIFF_PACKBITS) { + fprintf(fpout, " Tiff header information:\n"); + fpin = lept_fopen(filename, "rb"); + tiffGetCount(fpin, &npages); + lept_fclose(fpin); + if (npages == 1) + fprintf(fpout, " One page in file\n"); + else + fprintf(fpout, " %d pages in file\n", npages); + fprintTiffInfo(fpout, filename); + } + + if (d == 1) { + pixCountPixels(pix, &count, NULL); + pixGetDimensions(pix, &w, &h, NULL); + fprintf(fpout, " 1 bpp: foreground pixel fraction ON/Total = %g\n", + (l_float32)count / (l_float32)(w * h)); + } + fprintf(fpout, "===============================================\n"); + + /* If there is an alpha component, visualize it. Note that when + * alpha == 0, the rgb layer is transparent. We visualize the + * result when a white background is visible through the + * transparency layer. */ + if (pixGetSpp(pix) == 4) { + pixt = pixDisplayLayersRGBA(pix, 0xffffff00, 600.0); + pixDisplay(pixt, 100, 100); + pixDestroy(&pixt); + } + + if (format == IFF_PNG && bps == 16) + l_pngSetReadStrip16To8(1); /* return to default if format is png */ + + pixDestroy(&pix); + return 0; +} + + +/*---------------------------------------------------------------------* + * Test function for I/O with different formats * + *---------------------------------------------------------------------*/ +/*! + * \brief ioFormatTest() + * + * \param[in] filename input image file + * \return 0 if OK; 1 on error or if the test fails + * + *
+ * Notes:
+ *      (1) This writes and reads a set of output files losslessly
+ *          in different formats to /tmp/format/, and tests that the
+ *          result before and after is unchanged.
+ *      (2) This should work properly on input images of any depth,
+ *          with and without colormaps.
+ *      (3) All supported formats are tested for bmp, png, tiff and
+ *          non-ascii pnm.  Ascii pnm also works (but who'd ever want
+ *          to use it?)   We allow 2 bpp bmp, although it's not
+ *          supported elsewhere.  And we don't support reading
+ *          16 bpp png, although this can be turned on in pngio.c.
+ *      (4) This silently skips png or tiff testing if HAVE_LIBPNG
+ *          or HAVE_LIBTIFF are 0, respectively.
+ * 
+ */ +l_ok +ioFormatTest(const char *filename) +{ +l_int32 w, h, d, depth, equal, problems; +l_float32 diff; +BOX *box; +PIX *pixs, *pixc, *pix1, *pix2; +PIXCMAP *cmap; + + PROCNAME("ioFormatTest"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + /* Read the input file and limit the size */ + if ((pix1 = pixRead(filename)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + pixGetDimensions(pix1, &w, &h, NULL); + if (w > 250 && h > 250) { /* take the central 250 x 250 region */ + box = boxCreate(w / 2 - 125, h / 2 - 125, 250, 250); + pixs = pixClipRectangle(pix1, box, NULL); + boxDestroy(&box); + } else { + pixs = pixClone(pix1); + } + pixDestroy(&pix1); + + lept_mkdir("lept/format"); + + /* Note that the reader automatically removes colormaps + * from 1 bpp BMP images, but not from 8 bpp BMP images. + * Therefore, if our 8 bpp image initially doesn't have a + * colormap, we are going to need to remove it from any + * pix read from a BMP file. */ + pixc = pixClone(pixs); /* laziness */ + + /* This does not test the alpha layer pixels, because most + * formats don't support it. Remove any alpha. */ + if (pixGetSpp(pixc) == 4) + pixSetSpp(pixc, 3); + cmap = pixGetColormap(pixc); /* colormap; can be NULL */ + d = pixGetDepth(pixc); + + problems = FALSE; + + /* ----------------------- BMP -------------------------- */ + + /* BMP works for 1, 2, 4, 8 and 32 bpp images. + * It always writes colormaps for 1 and 8 bpp, so we must + * remove it after readback if the input image doesn't have + * a colormap. Although we can write/read 2 bpp BMP, nobody + * else can read them! */ + if (d == 1 || d == 8) { + L_INFO("write/read bmp\n", procName); + pixWrite(FILE_BMP, pixc, IFF_BMP); + pix1 = pixRead(FILE_BMP); + if (!cmap) + pix2 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); + else + pix2 = pixClone(pix1); + pixEqual(pixc, pix2, &equal); + if (!equal) { + L_INFO(" **** bad bmp image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + if (d == 2 || d == 4 || d == 32) { + L_INFO("write/read bmp\n", procName); + pixWrite(FILE_BMP, pixc, IFF_BMP); + pix1 = pixRead(FILE_BMP); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad bmp image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + } + + /* ----------------------- PNG -------------------------- */ +#if HAVE_LIBPNG + /* PNG works for all depths, but here, because we strip + * 16 --> 8 bpp on reading, we don't test png for 16 bpp. */ + if (d != 16) { + L_INFO("write/read png\n", procName); + pixWrite(FILE_PNG, pixc, IFF_PNG); + pix1 = pixRead(FILE_PNG); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad png image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + } +#endif /* HAVE_LIBPNG */ + + /* ----------------------- TIFF -------------------------- */ +#if HAVE_LIBTIFF + /* TIFF works for 1, 2, 4, 8, 16 and 32 bpp images. + * Because 8 bpp tiff always writes 256 entry colormaps, the + * colormap sizes may be different for 8 bpp images with + * colormap; we are testing if the image content is the same. + * Likewise, the 2 and 4 bpp tiff images with colormaps + * have colormap sizes 4 and 16, rsp. This test should + * work properly on the content, regardless of the number + * of color entries in pixc. */ + + /* tiff uncompressed works for all pixel depths */ + L_INFO("write/read uncompressed tiff\n", procName); + pixWrite(FILE_TIFF, pixc, IFF_TIFF); + pix1 = pixRead(FILE_TIFF); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff uncompressed image: d = %d ****\n", + procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + + /* tiff lzw works for all pixel depths */ + L_INFO("write/read lzw compressed tiff\n", procName); + pixWrite(FILE_LZW, pixc, IFF_TIFF_LZW); + pix1 = pixRead(FILE_LZW); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff lzw compressed image: d = %d ****\n", + procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + + /* tiff adobe deflate (zip) works for all pixel depths */ + L_INFO("write/read zip compressed tiff\n", procName); + pixWrite(FILE_ZIP, pixc, IFF_TIFF_ZIP); + pix1 = pixRead(FILE_ZIP); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff zip compressed image: d = %d ****\n", + procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + + /* tiff jpeg encoding works for grayscale and rgb */ + if (d == 8 || d == 32) { + PIX *pixc1; + L_INFO("write/read jpeg compressed tiff\n", procName); + if (d == 8 && pixGetColormap(pixc)) { + pixc1 = pixRemoveColormap(pixc, REMOVE_CMAP_BASED_ON_SRC); + pixWrite(FILE_TIFF_JPEG, pixc1, IFF_TIFF_JPEG); + if ((pix1 = pixRead(FILE_TIFF_JPEG)) == NULL) { + L_INFO(" did not read FILE_TIFF_JPEG\n", procName); + problems = TRUE; + } + pixDestroy(&pixc1); + } else { + pixWrite(FILE_TIFF_JPEG, pixc, IFF_TIFF_JPEG); + pix1 = pixRead(FILE_TIFF_JPEG); + if (d == 8) { + pixCompareGray(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } else { + pixCompareRGB(pix1, pixc, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } + if (diff > 8.0) { + L_INFO(" **** bad tiff jpeg compressed image: " + "d = %d, diff = %5.2f ****\n", procName, d, diff); + problems = TRUE; + } + } + pixDestroy(&pix1); + } + + /* tiff g4, g3, rle and packbits work for 1 bpp */ + if (d == 1) { + L_INFO("write/read g4 compressed tiff\n", procName); + pixWrite(FILE_G4, pixc, IFF_TIFF_G4); + pix1 = pixRead(FILE_G4); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff g4 image ****\n", procName); + problems = TRUE; + } + pixDestroy(&pix1); + + L_INFO("write/read g3 compressed tiff\n", procName); + pixWrite(FILE_G3, pixc, IFF_TIFF_G3); + pix1 = pixRead(FILE_G3); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff g3 image ****\n", procName); + problems = TRUE; + } + pixDestroy(&pix1); + + L_INFO("write/read rle compressed tiff\n", procName); + pixWrite(FILE_RLE, pixc, IFF_TIFF_RLE); + pix1 = pixRead(FILE_RLE); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff rle image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + + L_INFO("write/read packbits compressed tiff\n", procName); + pixWrite(FILE_PB, pixc, IFF_TIFF_PACKBITS); + pix1 = pixRead(FILE_PB); + pixEqual(pixc, pix1, &equal); + if (!equal) { + L_INFO(" **** bad tiff packbits image: d = %d ****\n", + procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + } +#endif /* HAVE_LIBTIFF */ + + /* ----------------------- PNM -------------------------- */ + + /* pnm works for 1, 2, 4, 8, 16 and 32 bpp. + * pnm doesn't have colormaps, so when we write colormapped + * pix out as pnm, the colormap is removed. Thus for the test, + * we must remove the colormap from pixc before testing. */ + L_INFO("write/read pnm\n", procName); + pixWrite(FILE_PNM, pixc, IFF_PNM); + pix1 = pixRead(FILE_PNM); + if (cmap) + pix2 = pixRemoveColormap(pixc, REMOVE_CMAP_BASED_ON_SRC); + else + pix2 = pixClone(pixc); + pixEqual(pix1, pix2, &equal); + if (!equal) { + L_INFO(" **** bad pnm image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* ----------------------- GIF -------------------------- */ +#if HAVE_LIBGIF + /* GIF works for only 1 and 8 bpp, colormapped */ + if (d != 8 || !cmap) + pix1 = pixConvertTo8(pixc, 1); + else + pix1 = pixClone(pixc); + L_INFO("write/read gif\n", procName); + pixWrite(FILE_GIF, pix1, IFF_GIF); + pix2 = pixRead(FILE_GIF); + pixEqual(pix1, pix2, &equal); + if (!equal) { + L_INFO(" **** bad gif image: d = %d ****\n", procName, d); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); +#endif /* HAVE_LIBGIF */ + + /* ----------------------- JPEG ------------------------- */ +#if HAVE_LIBJPEG + /* JPEG works for only 8 bpp gray and rgb */ + if (cmap || d > 8) + pix1 = pixConvertTo32(pixc); + else + pix1 = pixConvertTo8(pixc, 0); + depth = pixGetDepth(pix1); + L_INFO("write/read jpeg\n", procName); + pixWrite(FILE_JPG, pix1, IFF_JFIF_JPEG); + pix2 = pixRead(FILE_JPG); + if (depth == 8) { + pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } else { + pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } + if (diff > 8.0) { + L_INFO(" **** bad jpeg image: d = %d, diff = %5.2f ****\n", + procName, depth, diff); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); +#endif /* HAVE_LIBJPEG */ + + /* ----------------------- WEBP ------------------------- */ +#if HAVE_LIBWEBP + /* WEBP works for rgb and rgba */ + if (cmap || d <= 16) + pix1 = pixConvertTo32(pixc); + else + pix1 = pixClone(pixc); + depth = pixGetDepth(pix1); + L_INFO("write/read webp\n", procName); + pixWrite(FILE_WEBP, pix1, IFF_WEBP); + pix2 = pixRead(FILE_WEBP); + pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); + if (diff > 5.0) { + L_INFO(" **** bad webp image: d = %d, diff = %5.2f ****\n", + procName, depth, diff); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); +#endif /* HAVE_LIBWEBP */ + + /* ----------------------- JP2K ------------------------- */ +#if HAVE_LIBJP2K + /* JP2K works for only 8 bpp gray, rgb and rgba */ + if (cmap || d > 8) + pix1 = pixConvertTo32(pixc); + else + pix1 = pixConvertTo8(pixc, 0); + depth = pixGetDepth(pix1); + L_INFO("write/read jp2k\n", procName); + pixWrite(FILE_JP2K, pix1, IFF_JP2); + pix2 = pixRead(FILE_JP2K); + if (depth == 8) { + pixCompareGray(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } else { + pixCompareRGB(pix1, pix2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, + NULL, NULL); + } + fprintf(stderr, "diff = %7.3f\n", diff); + if (diff > 7.0) { + L_INFO(" **** bad jp2k image: d = %d, diff = %5.2f ****\n", + procName, depth, diff); + problems = TRUE; + } + pixDestroy(&pix1); + pixDestroy(&pix2); +#endif /* HAVE_LIBJP2K */ + + if (problems == FALSE) + L_INFO("All formats read and written OK!\n", procName); + + pixDestroy(&pixc); + pixDestroy(&pixs); + return problems; +} diff --git a/3rdparty/hgOCR/leptonica/recog.h b/3rdparty/hgOCR/leptonica/recog.h new file mode 100644 index 00000000..44e6aa18 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/recog.h @@ -0,0 +1,264 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_RECOG_H +#define LEPTONICA_RECOG_H + +/*! + * \file recog.h + * + *
+ *     This is a simple utility for training and recognizing individual
+ *     machine-printed text characters.  It is designed to be adapted
+ *     to a particular set of character images; e.g., from a book.
+ *
+ *     There are two methods of training the recognizer.  In the most
+ *     simple, a set of bitmaps has been labeled by some means, such
+ *     a generic OCR program.  This is input either one template at a time
+ *     or as a pixa of templates, to a function that creates a recog.
+ *     If in a pixa, the text string label must be embedded in the
+ *     text field of each pix.
+ *
+ *     If labeled data is not available, we start with a bootstrap
+ *     recognizer (BSR) that has labeled data from a variety of sources.
+ *     These images are scaled, typically to a fixed height, and then
+ *     fed similarly scaled unlabeled images from the source (e.g., book),
+ *     and the BSR attempts to identify them.  All images that have
+ *     a high enough correlation score with one of the templates in the
+ *     BSR are emitted in a pixa, which now holds unscaled and labeled
+ *     templates from the source.  This is the generator for a book adapted
+ *     recognizer (BAR).
+ *
+ *     The pixa should always be thought of as the primary structure.
+ *     It is the generator for the recog, because a recog is built
+ *     from a pixa of unscaled images.
+ *
+ *     New image templates can be added to a recog as long as it is
+ *     in training mode.  Once training is finished, to add templates
+ *     it is necessary to extract the generating pixa, add templates
+ *     to that pixa, and make a new recog.  Similarly, we do not
+ *     join two recog; instead, we simply join their generating pixa,
+ *     and make a recog from that.
+ *
+ *     To remove outliers from a pixa of labeled pix, make a recog,
+ *     determine the outliers, and generate a new pixa with the
+ *     outliers removed.  The outliers are determined by building
+ *     special templates for each character set that are scaled averages
+ *     of the individual templates.  Then a correlation score is found
+ *     between each template and the averaged templates.  There are
+ *     two implementations; outliers are determined as either:
+ *      (1) a template having a correlation score with its class average
+ *          that is below a threshold, or
+ *      (2) a template having a correlation score with its class average
+ *          that is smaller than the correlation score with the average
+ *          of another class.
+ *     Outliers are removed from the generating pixa.  Scaled averaging
+ *     is only performed for determining outliers and for splitting
+ *     characters; it is never used in a trained recognizer for identifying
+ *     unlabeled samples.
+ *
+ *     Two methods using averaged templates are provided for splitting
+ *     touching characters:
+ *      (1) greedy matching
+ *      (2) document image decoding (DID)
+ *     The DID method is the default.  It is about 5x faster and
+ *     possibly more accurate.
+ *
+ *     Once a BAR has been made, unlabeled sample images are identified
+ *     by finding the individual template in the BAR with highest
+ *     correlation.  The input images and images in the BAR can be
+ *     represented in two ways:
+ *      (1) as scanned, binarized to 1 bpp
+ *      (2) as a width-normalized outline formed by thinning to a
+ *          skeleton and then dilating by a fixed amount.
+ *
+ *     The recog can be serialized to file and read back.  The serialized
+ *     version holds the templates used for correlation (which may have
+ *     been modified by scaling and turning into lines from the unscaled
+ *     templates), plus, for arbitrary character sets, the UTF8
+ *     representation and the lookup table mapping from the character
+ *     representation to index.
+ *
+ *     Why do we not use averaged templates for recognition?
+ *     Letterforms can take on significantly different shapes (eg.,
+ *     the letters 'a' and 'g'), and it makes no sense to average these.
+ *     The previous version of this utility allowed multiple recognizers
+ *     to exist, but this is an unnecessary complication if recognition
+ *     is done on all samples instead of on averages.
+ * 
+ */ + +#define RECOG_VERSION_NUMBER 2 + +struct L_Recog { + l_int32 scalew; /*!< scale all examples to this width; */ + /*!< use 0 prevent horizontal scaling */ + l_int32 scaleh; /*!< scale all examples to this height; */ + /*!< use 0 prevent vertical scaling */ + l_int32 linew; /*!< use a value > 0 to convert the bitmap */ + /*!< to lines of fixed width; 0 to skip */ + l_int32 templ_use; /*!< template use: use either the average */ + /*!< or all temmplates (L_USE_AVERAGE or */ + /*!< L_USE_ALL) */ + l_int32 maxarraysize; /*!< initialize container arrays to this */ + l_int32 setsize; /*!< size of character set */ + l_int32 threshold; /*!< for binarizing if depth > 1 */ + l_int32 maxyshift; /*!< vertical jiggle on nominal centroid */ + /*!< alignment; typically 0 or 1 */ + l_int32 charset_type; /*!< one of L_ARABIC_NUMERALS, etc. */ + l_int32 charset_size; /*!< expected number of classes in charset */ + l_int32 min_nopad; /*!< min number of samples without padding */ + l_int32 num_samples; /*!< number of training samples */ + l_int32 minwidth_u; /*!< min width averaged unscaled templates */ + l_int32 maxwidth_u; /*!< max width averaged unscaled templates */ + l_int32 minheight_u; /*!< min height averaged unscaled templates */ + l_int32 maxheight_u; /*!< max height averaged unscaled templates */ + l_int32 minwidth; /*!< min width averaged scaled templates */ + l_int32 maxwidth; /*!< max width averaged scaled templates */ + l_int32 ave_done; /*!< set to 1 when averaged bitmaps are made */ + l_int32 train_done; /*!< set to 1 when training is complete or */ + /*!< identification has started */ + l_float32 max_wh_ratio; /*!< max width/height ratio to split */ + l_float32 max_ht_ratio; /*!< max of max/min template height ratio */ + l_int32 min_splitw; /*!< min component width kept in splitting */ + l_int32 max_splith; /*!< max component height kept in splitting */ + struct Sarray *sa_text; /*!< text array for arbitrary char set */ + struct L_Dna *dna_tochar; /*!< index-to-char lut for arbitrary charset */ + l_int32 *centtab; /*!< table for finding centroids */ + l_int32 *sumtab; /*!< table for finding pixel sums */ + struct Pixaa *pixaa_u; /*!< all unscaled templates for each class */ + struct Ptaa *ptaa_u; /*!< centroids of all unscaled templates */ + struct Numaa *naasum_u; /*!< area of all unscaled templates */ + struct Pixaa *pixaa; /*!< all (scaled) templates for each class */ + struct Ptaa *ptaa; /*!< centroids of all (scaledl) templates */ + struct Numaa *naasum; /*!< area of all (scaled) templates */ + struct Pixa *pixa_u; /*!< averaged unscaled templates per class */ + struct Pta *pta_u; /*!< centroids of unscaled ave. templates */ + struct Numa *nasum_u; /*!< area of unscaled averaged templates */ + struct Pixa *pixa; /*!< averaged (scaled) templates per class */ + struct Pta *pta; /*!< centroids of (scaled) ave. templates */ + struct Numa *nasum; /*!< area of (scaled) averaged templates */ + struct Pixa *pixa_tr; /*!< all input training images */ + struct Pixa *pixadb_ave; /*!< unscaled and scaled averaged bitmaps */ + struct Pixa *pixa_id; /*!< input images for identifying */ + struct Pix *pixdb_ave; /*!< debug: best match of input against ave. */ + struct Pix *pixdb_range; /*!< debug: best matches within range */ + struct Pixa *pixadb_boot; /*!< debug: bootstrap training results */ + struct Pixa *pixadb_split; /*!< debug: splitting results */ + struct L_Bmf *bmf; /*!< bmf fonts */ + l_int32 bmf_size; /*!< font size of bmf; default is 6 pt */ + struct L_Rdid *did; /*!< temp data used for image decoding */ + struct L_Rch *rch; /*!< temp data used for holding best char */ + struct L_Rcha *rcha; /*!< temp data used for array of best chars */ +}; +typedef struct L_Recog L_RECOG; + +/*! + * Data returned from correlation matching on a single character + */ +struct L_Rch { + l_int32 index; /*!< index of best template */ + l_float32 score; /*!< correlation score of best template */ + char *text; /*!< character string of best template */ + l_int32 sample; /*!< index of best sample (within the best */ + /*!< template class, if all samples are used) */ + l_int32 xloc; /*!< x-location of template (delx + shiftx) */ + l_int32 yloc; /*!< y-location of template (dely + shifty) */ + l_int32 width; /*!< width of best template */ +}; +typedef struct L_Rch L_RCH; + +/*! + * Data returned from correlation matching on an array of characters + */ +struct L_Rcha { + struct Numa *naindex; /*!< indices of best templates */ + struct Numa *nascore; /*!< correlation scores of best templates */ + struct Sarray *satext; /*!< character strings of best templates */ + struct Numa *nasample; /*!< indices of best samples */ + struct Numa *naxloc; /*!< x-locations of templates (delx + shiftx) */ + struct Numa *nayloc; /*!< y-locations of templates (dely + shifty) */ + struct Numa *nawidth; /*!< widths of best templates */ +}; +typedef struct L_Rcha L_RCHA; + +/*! + * Data used for decoding a line of characters. + */ +struct L_Rdid { + struct Pix *pixs; /*!< clone of pix to be decoded */ + l_int32 **counta; /*!< count array for each averaged template */ + l_int32 **delya; /*!< best y-shift array per average template */ + l_int32 narray; /*!< number of averaged templates */ + l_int32 size; /*!< size of count array (width of pixs) */ + l_int32 *setwidth; /*!< setwidths for each template */ + struct Numa *nasum; /*!< pixel count in pixs by column */ + struct Numa *namoment; /*!< first moment of pixels in pixs by cols */ + l_int32 fullarrays; /*!< 1 if full arrays are made; 0 otherwise */ + l_float32 *beta; /*!< channel coeffs for template fg term */ + l_float32 *gamma; /*!< channel coeffs for bit-and term */ + l_float32 *trellisscore; /*!< score on trellis */ + l_int32 *trellistempl; /*!< template on trellis (for backtrack) */ + struct Numa *natempl; /*!< indices of best path templates */ + struct Numa *naxloc; /*!< x locations of best path templates */ + struct Numa *nadely; /*!< y locations of best path templates */ + struct Numa *nawidth; /*!< widths of best path templates */ + struct Boxa *boxa; /*!< Viterbi result for splitting input pixs */ + struct Numa *nascore; /*!< correlation scores: best path templates */ + struct Numa *natempl_r; /*!< indices of best rescored templates */ + struct Numa *nasample_r; /*!< samples of best scored templates */ + struct Numa *naxloc_r; /*!< x locations of best rescoredtemplates */ + struct Numa *nadely_r; /*!< y locations of best rescoredtemplates */ + struct Numa *nawidth_r; /*!< widths of best rescoredtemplates */ + struct Numa *nascore_r; /*!< correlation scores: rescored templates */ +}; +typedef struct L_Rdid L_RDID; + + +/*-------------------------------------------------------------------------* + * Flags for describing limited character sets * + *-------------------------------------------------------------------------*/ +/*! Character Set */ +enum { + L_UNKNOWN = 0, /*!< character set type is not specified */ + L_ARABIC_NUMERALS = 1, /*!< 10 digits */ + L_LC_ROMAN_NUMERALS = 2, /*!< 7 lower-case letters (i,v,x,l,c,d,m) */ + L_UC_ROMAN_NUMERALS = 3, /*!< 7 upper-case letters (I,V,X,L,C,D,M) */ + L_LC_ALPHA = 4, /*!< 26 lower-case letters */ + L_UC_ALPHA = 5 /*!< 26 upper-case letters */ +}; + +/*-------------------------------------------------------------------------* + * Flags for selecting between using average and all templates: * + * recog->templ_use * + *-------------------------------------------------------------------------*/ +/*! Template Select */ +enum { + L_USE_ALL_TEMPLATES = 0, /*!< use all templates; default */ + L_USE_AVERAGE_TEMPLATES = 1 /*!< use average templates; special cases */ +}; + +#endif /* LEPTONICA_RECOG_H */ diff --git a/3rdparty/hgOCR/leptonica/recogbasic.c b/3rdparty/hgOCR/leptonica/recogbasic.c new file mode 100644 index 00000000..6e528150 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/recogbasic.c @@ -0,0 +1,1228 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file recogbasic.c + *
+ *
+ *      Recog creation, destruction and access
+ *         L_RECOG            *recogCreateFromRecog()
+ *         L_RECOG            *recogCreateFromPixa()
+ *         L_RECOG            *recogCreateFromPixaNoFinish()
+ *         L_RECOG            *recogCreate()
+ *         void                recogDestroy()
+ *
+ *      Recog accessors
+ *         l_int32             recogGetCount()
+ *         l_int32             recogSetParams()
+ *         static l_int32      recogGetCharsetSize()
+ *
+ *      Character/index lookup
+ *         l_int32             recogGetClassIndex()
+ *         l_int32             recogStringToIndex()
+ *         l_int32             recogGetClassString()
+ *         l_int32             l_convertCharstrToInt()
+ *
+ *      Serialization
+ *         L_RECOG            *recogRead()
+ *         L_RECOG            *recogReadStream()
+ *         L_RECOG            *recogReadMem()
+ *         l_int32             recogWrite()
+ *         l_int32             recogWriteStream()
+ *         l_int32             recogWriteMem()
+ *         PIXA               *recogExtractPixa()
+ *         static l_int32      recogAddCharstrLabels()
+ *         static l_int32      recogAddAllSamples()
+ *
+ *  The recognizer functionality is split into four files:
+ *    recogbasic.c: create, destroy, access, serialize
+ *    recogtrain.c: training on labeled and unlabeled data
+ *    recogident.c: running the recognizer(s) on input
+ *    recogdid.c:   running the recognizer(s) on input using a
+ *                  document image decoding (DID) hidden markov model
+ *
+ *  This is a content-adapted (or book-adapted) recognizer (BAR) application.
+ *  The recognizers here are typically assembled from data that has
+ *  been labeled by a generic recognition system, such as Tesseract.
+ *  The general procedure to create a recognizer (recog) from labeled data is
+ *  to add the labeled character bitmaps, either one at a time or
+ *  all together from a pixa with labeled pix.
+ *
+ *  The suggested use for a BAR that consists of labeled templates drawn
+ *  from a single source (e.g., a book) is to identify unlabeled samples
+ *  by using unscaled character templates in the BAR, picking the
+ *  template closest to the unlabeled sample.
+ *
+ *  Outliers can be removed from a pixa of labeled pix.  This is one of
+ *  two methods that use averaged templates (the other is greedy splitting
+ *  of characters).  See recogtrain.c for a discussion and the implementation.
+ *
+ *  A special bootstrap recognizer (BSR) can be used to make a BAR from
+ *  unlabeled book data.  This is done by comparing character images
+ *  from the book with labeled templates in the BSR, where all images
+ *  are scaled to h = 40.  The templates can be either the scanned images
+ *  or images consisting of width-normalized strokes derived from
+ *  the skeleton of the character bitmaps.
+ *
+ *  Two BARs of labeled character data, that have been made by
+ *  different recognizers, can be joined by extracting a pixa of the
+ *  labeled templates from each, joining the two pixa, and then
+ *  and regenerating a BAR from the joined set of templates.
+ *  If all the labeled character data is from a single source (e.g, a book),
+ *  identification can proceed using unscaled templates (either the input
+ *  image or width-normalized lines).  But if the labeled data comes from
+ *  more than one source, (a "hybrid" recognizer), the templates should
+ *  be scaled, and we recommend scaling to a fixed height.
+ *
+ *  Suppose it is not possible to generate a BAR with a sufficient number
+ *  of templates of each class taken from a single source.  In that case,
+ *  templates from the BSR itself can be added.  This is the condition
+ *  described above, where the labeled templates come from multiple
+ *  sources, and it is necessary to do all character matches using
+ *  templates that have been scaled to a fixed height (e.g., 40).
+ *  Likewise, the samples to be identified using this hybrid recognizer
+ *  must be modified in the same way.  See prog/recogtest3.c for an
+ *  example of the steps that can be taken in the construction of a BAR
+ *  using a BSR.
+ *
+ *  For training numeric input, an example set of calls that scales
+ *  each training input to fixed h and will use the line templates of
+ *  width linew for identifying unknown characters is:
+ *         L_Recog  *rec = recogCreate(0, h, linew, 128, 1);
+ *         for (i = 0; i < n; i++) {  // read in n training digits
+ *             Pix *pix = ...
+ *             recogTrainLabeled(rec, pix, NULL, text[i], 0);
+ *         }
+ *         recogTrainingFinished(&rec, 1, -1, -1.0);  // required
+ *
+ *  It is an error if any function that computes averages, removes
+ *  outliers or requests identification of an unlabeled character,
+ *  such as:
+ *     (1) computing the sample averages: recogAverageSamples()
+ *     (2) removing outliers: recogRemoveOutliers1() or recogRemoveOutliers2()
+ *     (3) requesting identification of an unlabeled character:
+ *         recogIdentifyPix()
+ *  is called before an explicit call to finish training.  Note that
+ *  to do further training on a "finished" recognizer, you can set
+ *         recog->train_done = FALSE;
+ *  add the new training samples, and again call
+ *         recogTrainingFinished(&rec, 1, -1, -1.0);  // required
+ *
+ *  If not scaling, using the images directly for identification, and
+ *  removing outliers, do something like this:
+ *      L_Recog  *rec = recogCreate(0, 0, 0, 128, 1);
+ *      for (i = 0; i < n; i++) {  // read in n training characters
+ *          Pix *pix = ...
+ *          recogTrainLabeled(rec, pix, NULL, text[i], 0);
+ *      }
+ *      recogTrainingFinished(&rec, 1, -1, -1.0);
+ *      if (!rec) ... [return]
+ *      // remove outliers
+ *      recogRemoveOutliers1(&rec, 0.7, 2, NULL, NULL);
+ *
+ *  You can generate a recognizer from a pixa where the text field in
+ *  each pix is the character string label for the pix.  For example,
+ *  the following recognizer will store unscaled line images:
+ *      L_Recog  *rec = recogCreateFromPixa(pixa, 0, 0, linew, 128, 1);
+ *  and in use, it is fed unscaled line images to identify.
+ *
+ *  For the following, assume that you have a pixa of labeled templates.
+ *  If it is likely that some of the input templates are mislabeled,
+ *  there are several things that can be done to remove them.
+ *  The first is to put a size and quantity filter on them; e.g.
+ *       Pixa *pixa2 = recogFilterPixaBySize(pixa1, 10, 15, 2.6);
+ *  Then you can remove outliers; e.g.,
+ *       Pixa *pixa3 = pixaRemoveOutliers2(pixa2, -1.0, -1, NULL, NULL);
+ *
+ *  To this point, all templates are from a single source, so you
+ *  can make a recognizer that uses the unscaled templates and optionally
+ *  attempts to split touching characters:
+ *       L_Recog *recog1 = recogCreateFromPixa(pixa3, ...);
+ *  Alternatively, if you need more templates for some of the classes,
+ *  you can pad with templates from a "bootstrap" recognizer (BSR).
+ *  If you pad, it is necessary to scale the templates and input
+ *  samples to a fixed height, and no attempt will be made to split
+ *  the input sample connected components:
+ *       L_Recog *recog1 = recogCreateFromPixa(pixa3, 0, 40, 0, 128, 0);
+ *       recogPadDigitTrainingSet(&recog1, 40, 0);
+ *
+ *  A special case is a pure BSR, that contains images scaled to a fixed
+ *  height (we use 40 in these examples).
+ *  For this,use either the scanned bitmap:
+ *      L_Recog  *recboot = recogCreateFromPixa(pixa, 0, 40, 0, 128, 1);
+ *  or width-normalized lines (use width of 5 here):
+ *      L_Recog  *recboot = recogCreateFromPixa(pixa, 0, 40, 5, 128, 1);
+ *
+ *  This can be used to train a new book adapted recognizer (BAC), on
+ *  unlabeled data from, e.g., a book.  To do this, the following is required:
+ *   (1) the input images from the book must be scaled in the same
+ *       way as those in the BSR, and
+ *   (2) both the BSR and the input images must be set up to be either
+ *       input scanned images or width-normalized lines.
+ *
+ * 
+ */ + +#include +#include "allheaders.h" + +static const l_int32 MaxExamplesInClass = 256; + + /* Default recog parameters that can be changed */ +static const l_int32 DefaultCharsetType = L_ARABIC_NUMERALS; +static const l_int32 DefaultMinNopad = 1; +static const l_float32 DefaultMaxWHRatio = 3.0; /* max allowed w/h + ratio for a component to be split */ +static const l_float32 DefaultMaxHTRatio = 2.6; /* max allowed ratio of + max/min unscaled averaged template heights */ +static const l_int32 DefaultThreshold = 150; /* for binarization */ +static const l_int32 DefaultMaxYShift = 1; /* for identification */ + + /* Static functions */ +static l_int32 recogGetCharsetSize(l_int32 type); +static l_int32 recogAddCharstrLabels(L_RECOG *recog); +static l_int32 recogAddAllSamples(L_RECOG **precog, PIXAA *paa, l_int32 debug); + + +/*------------------------------------------------------------------------* + * Recog: initialization and destruction * + *------------------------------------------------------------------------*/ +/*! + * \brief recogCreateFromRecog() + * + * \param[in] recs source recog with arbitrary input parameters + * \param[in] scalew scale all widths to this; use 0 otherwise + * \param[in] scaleh scale all heights to this; use 0 otherwise + * \param[in] linew width of normalized strokes; use 0 to skip + * \param[in] threshold for binarization; typically ~128 + * \param[in] maxyshift from nominal centroid alignment; default is 1 + * \return recd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a convenience function that generates a recog using
+ *          the unscaled training data in an existing recog.
+ *      (2) It is recommended to use %maxyshift = 1 (the default value)
+ *      (3) See recogCreate() for use of %scalew, %scaleh and %linew.
+ * 
+ */ +L_RECOG * +recogCreateFromRecog(L_RECOG *recs, + l_int32 scalew, + l_int32 scaleh, + l_int32 linew, + l_int32 threshold, + l_int32 maxyshift) +{ +L_RECOG *recd; +PIXA *pixa; + + PROCNAME("recogCreateFromRecog"); + + if (!recs) + return (L_RECOG *)ERROR_PTR("recs not defined", procName, NULL); + + pixa = recogExtractPixa(recs); + recd = recogCreateFromPixa(pixa, scalew, scaleh, linew, threshold, + maxyshift); + pixaDestroy(&pixa); + return recd; +} + + +/*! + * \brief recogCreateFromPixa() + * + * \param[in] pixa of labeled, 1 bpp images + * \param[in] scalew scale all widths to this; use 0 otherwise + * \param[in] scaleh scale all heights to this; use 0 otherwise + * \param[in] linew width of normalized strokes; use 0 to skip + * \param[in] threshold for binarization; typically ~150 + * \param[in] maxyshift from nominal centroid alignment; default is 1 + * \return recog, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a convenience function for training from labeled data.
+ *          The pixa can be read from file.
+ *      (2) The pixa should contain the unscaled bitmaps used for training.
+ *      (3) See recogCreate() for use of %scalew, %scaleh and %linew.
+ *      (4) It is recommended to use %maxyshift = 1 (the default value)
+ *      (5) All examples in the same class (i.e., with the same character
+ *          label) should be similar.  They can be made similar by invoking
+ *          recogRemoveOutliers[1,2]() on %pixa before calling this function.
+ * 
+ */ +L_RECOG * +recogCreateFromPixa(PIXA *pixa, + l_int32 scalew, + l_int32 scaleh, + l_int32 linew, + l_int32 threshold, + l_int32 maxyshift) +{ +L_RECOG *recog; + + PROCNAME("recogCreateFromPixa"); + + if (!pixa) + return (L_RECOG *)ERROR_PTR("pixa not defined", procName, NULL); + + recog = recogCreateFromPixaNoFinish(pixa, scalew, scaleh, linew, + threshold, maxyshift); + if (!recog) + return (L_RECOG *)ERROR_PTR("recog not made", procName, NULL); + + recogTrainingFinished(&recog, 1, -1, -1.0); + if (!recog) + return (L_RECOG *)ERROR_PTR("bad templates", procName, NULL); + return recog; +} + + +/*! + * \brief recogCreateFromPixaNoFinish() + * + * \param[in] pixa of labeled, 1 bpp images + * \param[in] scalew scale all widths to this; use 0 otherwise + * \param[in] scaleh scale all heights to this; use 0 otherwise + * \param[in] linew width of normalized strokes; use 0 to skip + * \param[in] threshold for binarization; typically ~150 + * \param[in] maxyshift from nominal centroid alignment; default is 1 + * \return recog, or NULL on error + * + *
+ * Notes:
+ *      (1) See recogCreateFromPixa() for details.
+ *      (2) This is also used to generate a pixaa with templates
+ *          in each class within a pixa.  For that, all args except for
+ *          %pixa are ignored.
+ * 
+ */ +L_RECOG * +recogCreateFromPixaNoFinish(PIXA *pixa, + l_int32 scalew, + l_int32 scaleh, + l_int32 linew, + l_int32 threshold, + l_int32 maxyshift) +{ +char *text; +l_int32 full, n, i, ntext, same, maxd; +PIX *pix; +L_RECOG *recog; + + PROCNAME("recogCreateFromPixaNoFinish"); + + if (!pixa) + return (L_RECOG *)ERROR_PTR("pixa not defined", procName, NULL); + pixaVerifyDepth(pixa, &same, &maxd); + if (maxd > 1) + return (L_RECOG *)ERROR_PTR("not all pix are 1 bpp", procName, NULL); + + pixaIsFull(pixa, &full, NULL); + if (!full) + return (L_RECOG *)ERROR_PTR("not all pix are present", procName, NULL); + + n = pixaGetCount(pixa); + pixaCountText(pixa, &ntext); + if (ntext == 0) + return (L_RECOG *)ERROR_PTR("no pix have text strings", procName, NULL); + if (ntext < n) + L_ERROR("%d text strings < %d pix\n", procName, ntext, n); + + recog = recogCreate(scalew, scaleh, linew, threshold, maxyshift); + if (!recog) + return (L_RECOG *)ERROR_PTR("recog not made", procName, NULL); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + text = pixGetText(pix); + if (!text || strlen(text) == 0) { + L_ERROR("pix[%d] has no text\n", procName, i); + pixDestroy(&pix); + continue; + } + recogTrainLabeled(recog, pix, NULL, text, 0); + pixDestroy(&pix); + } + + return recog; +} + + +/*! + * \brief recogCreate() + * + * \param[in] scalew scale all widths to this; use 0 otherwise + * \param[in] scaleh scale all heights to this; use 0 otherwise + * \param[in] linew width of normalized strokes; use 0 to skip + * \param[in] threshold for binarization; typically ~128; 0 for default + * \param[in] maxyshift from nominal centroid alignment; default is 1 + * \return recog, or NULL on error + * + *
+ * Notes:
+ *      (1) If %scalew == 0 and %scaleh == 0, no scaling is done.
+ *          If one of these is 0 and the other is > 0, scaling is isotropic
+ *          to the requested size.  We typically do not set both > 0.
+ *      (2) Use linew > 0 to convert the templates to images with fixed
+ *          width strokes.  linew == 0 skips the conversion.
+ *      (3) The only valid values for %maxyshift are 0, 1 and 2.
+ *          It is recommended to use %maxyshift == 1 (default value).
+ *          Using %maxyshift == 0 is much faster than %maxyshift == 1, but
+ *          it is much less likely to find the template with the best
+ *          correlation.  Use of anything but 1 results in a warning.
+ *      (4) Scaling is used for finding outliers and for training a
+ *          book-adapted recognizer (BAR) from a bootstrap recognizer (BSR).
+ *          Scaling the height to a fixed value and scaling the width
+ *          accordingly (e.g., %scaleh = 40, %scalew = 0) is recommended.
+ *      (5) The storage for most of the arrays is allocated when training
+ *          is finished.
+ * 
+ */ +L_RECOG * +recogCreate(l_int32 scalew, + l_int32 scaleh, + l_int32 linew, + l_int32 threshold, + l_int32 maxyshift) +{ +L_RECOG *recog; + + PROCNAME("recogCreate"); + + if (scalew < 0 || scaleh < 0) + return (L_RECOG *)ERROR_PTR("invalid scalew or scaleh", procName, NULL); + if (linew > 10) + return (L_RECOG *)ERROR_PTR("invalid linew > 10", procName, NULL); + if (threshold == 0) threshold = DefaultThreshold; + if (threshold < 0 || threshold > 255) { + L_WARNING("invalid threshold; using default\n", procName); + threshold = DefaultThreshold; + } + if (maxyshift < 0 || maxyshift > 2) { + L_WARNING("invalid maxyshift; using default value\n", procName); + maxyshift = DefaultMaxYShift; + } else if (maxyshift == 0) { + L_WARNING("Using maxyshift = 0; faster, worse correlation results\n", + procName); + } else if (maxyshift == 2) { + L_WARNING("Using maxyshift = 2; slower\n", procName); + } + + recog = (L_RECOG *)LEPT_CALLOC(1, sizeof(L_RECOG)); + recog->templ_use = L_USE_ALL_TEMPLATES; /* default */ + recog->threshold = threshold; + recog->scalew = scalew; + recog->scaleh = scaleh; + recog->linew = linew; + recog->maxyshift = maxyshift; + recogSetParams(recog, 1, -1, -1.0, -1.0); + recog->bmf = bmfCreate(NULL, 6); + recog->bmf_size = 6; + recog->maxarraysize = MaxExamplesInClass; + + /* Generate the LUTs */ + recog->centtab = makePixelCentroidTab8(); + recog->sumtab = makePixelSumTab8(); + recog->sa_text = sarrayCreate(0); + recog->dna_tochar = l_dnaCreate(0); + + /* Input default values for min component size for splitting. + * These are overwritten when pixTrainingFinished() is called. */ + recog->min_splitw = 6; + recog->max_splith = 60; + + /* Allocate the paa for the unscaled training bitmaps */ + recog->pixaa_u = pixaaCreate(recog->maxarraysize); + + /* Generate the storage for debugging */ + recog->pixadb_boot = pixaCreate(2); + recog->pixadb_split = pixaCreate(2); + return recog; +} + + +/*! + * \brief recogDestroy() + * + * \param[in,out] precog will be set to null before returning + * \return void + */ +void +recogDestroy(L_RECOG **precog) +{ +L_RECOG *recog; + + PROCNAME("recogDestroy"); + + if (!precog) { + L_WARNING("ptr address is null\n", procName); + return; + } + + if ((recog = *precog) == NULL) return; + + LEPT_FREE(recog->centtab); + LEPT_FREE(recog->sumtab); + sarrayDestroy(&recog->sa_text); + l_dnaDestroy(&recog->dna_tochar); + pixaaDestroy(&recog->pixaa_u); + pixaDestroy(&recog->pixa_u); + ptaaDestroy(&recog->ptaa_u); + ptaDestroy(&recog->pta_u); + numaDestroy(&recog->nasum_u); + numaaDestroy(&recog->naasum_u); + pixaaDestroy(&recog->pixaa); + pixaDestroy(&recog->pixa); + ptaaDestroy(&recog->ptaa); + ptaDestroy(&recog->pta); + numaDestroy(&recog->nasum); + numaaDestroy(&recog->naasum); + pixaDestroy(&recog->pixa_tr); + pixaDestroy(&recog->pixadb_ave); + pixaDestroy(&recog->pixa_id); + pixDestroy(&recog->pixdb_ave); + pixDestroy(&recog->pixdb_range); + pixaDestroy(&recog->pixadb_boot); + pixaDestroy(&recog->pixadb_split); + bmfDestroy(&recog->bmf); + rchDestroy(&recog->rch); + rchaDestroy(&recog->rcha); + recogDestroyDid(recog); + LEPT_FREE(recog); + *precog = NULL; + return; +} + + +/*------------------------------------------------------------------------* + * Recog accessors * + *------------------------------------------------------------------------*/ +/*! + * \brief recogGetCount() + * + * \param[in] recog + * \return count of classes in recog; 0 if no recog or on error + */ +l_int32 +recogGetCount(L_RECOG *recog) +{ + PROCNAME("recogGetCount"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 0); + return recog->setsize; +} + + +/*! + * \brief recogSetParams() + * + * \param[in] recog to be padded, if necessary + * \param[in] type type of char set; -1 for default; + * see enum in recog.h + * \param[in] min_nopad min number in a class without padding; + * use -1 for default + * \param[in] max_wh_ratio max width/height ratio allowed for splitting; + * use -1.0 for default + * \param[in] max_ht_ratio max of max/min averaged template height ratio; + * use -1.0 for default + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is called when a recog is created.
+ *      (2) Default %min_nopad value allows for some padding.
+ *          To disable padding, set %min_nopad = 0.  To pad only when
+ *          no samples are available for the class, set %min_nopad = 1.
+ *      (3) The %max_wh_ratio limits the width/height ratio for components
+ *          that we attempt to split.  Splitting long components is expensive.
+ *      (4) The %max_ht_ratio is a quality requirement on the training data.
+ *          The recognizer will not run if the averages are computed and
+ *          the templates do not satisfy it.
+ * 
+ */ +l_ok +recogSetParams(L_RECOG *recog, + l_int32 type, + l_int32 min_nopad, + l_float32 max_wh_ratio, + l_float32 max_ht_ratio) +{ + PROCNAME("recogSetParams"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + recog->charset_type = (type >= 0) ? type : DefaultCharsetType; + recog->charset_size = recogGetCharsetSize(recog->charset_type); + recog->min_nopad = (min_nopad >= 0) ? min_nopad : DefaultMinNopad; + recog->max_wh_ratio = (max_wh_ratio > 0.0) ? max_wh_ratio : + DefaultMaxWHRatio; + recog->max_ht_ratio = (max_ht_ratio > 1.0) ? max_ht_ratio : + DefaultMaxHTRatio; + return 0; +} + + +/*! + * \brief recogGetCharsetSize() + * + * \param[in] type of charset + * \return size of charset, or 0 if unknown or on error + */ +static l_int32 +recogGetCharsetSize(l_int32 type) +{ + PROCNAME("recogGetCharsetSize"); + + switch (type) { + case L_UNKNOWN: + return 0; + case L_ARABIC_NUMERALS: + return 10; + case L_LC_ROMAN_NUMERALS: + return 7; + case L_UC_ROMAN_NUMERALS: + return 7; + case L_LC_ALPHA: + return 26; + case L_UC_ALPHA: + return 26; + default: + L_ERROR("invalid charset_type %d\n", procName, type); + return 0; + } + return 0; /* shouldn't happen */ +} + + +/*------------------------------------------------------------------------* + * Character/index lookup * + *------------------------------------------------------------------------*/ +/*! + * \brief recogGetClassIndex() + * + * \param[in] recog with LUT's pre-computed + * \param[in] val integer value; can be up to 3 bytes for UTF-8 + * \param[in] text text from which %val was derived; used if not found + * \param[out] pindex index into dna_tochar + * \return 0 if found; 1 if not found and added; 2 on error. + * + *
+ * Notes:
+ *      (1) This is used during training.  There is one entry in
+ *          recog->dna_tochar (integer value, e.g., ascii) and
+ *          one in recog->sa_text (e.g, ascii letter in a string)
+ *          for each character class.
+ *      (2) This searches the dna character array for %val.  If it is
+ *          not found, the template represents a character class not
+ *          already seen: it increments setsize (the number of character
+ *          classes) by 1, and augments both the index (dna_tochar)
+ *          and text (sa_text) arrays.
+ *      (3) Returns the index in &index, except on error.
+ *      (4) Caller must check the function return value.
+ * 
+ */ +l_int32 +recogGetClassIndex(L_RECOG *recog, + l_int32 val, + char *text, + l_int32 *pindex) +{ +l_int32 i, n, ival; + + PROCNAME("recogGetClassIndex"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 2); + *pindex = -1; + if (!recog) + return ERROR_INT("recog not defined", procName, 2); + if (!text) + return ERROR_INT("text not defined", procName, 2); + + /* Search existing characters */ + n = l_dnaGetCount(recog->dna_tochar); + for (i = 0; i < n; i++) { + l_dnaGetIValue(recog->dna_tochar, i, &ival); + if (val == ival) { /* found */ + *pindex = i; + return 0; + } + } + + /* If not found... */ + l_dnaAddNumber(recog->dna_tochar, val); + sarrayAddString(recog->sa_text, text, L_COPY); + recog->setsize++; + *pindex = n; + return 1; +} + + +/*! + * \brief recogStringToIndex() + * + * \param[in] recog + * \param[in] text text string for some class + * \param[out] pindex index for that class; -1 if not found + * \return 0 if OK, 1 on error not finding the string is an error + */ +l_ok +recogStringToIndex(L_RECOG *recog, + char *text, + l_int32 *pindex) +{ +char *charstr; +l_int32 i, n, diff; + + PROCNAME("recogStringtoIndex"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = -1; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!text) + return ERROR_INT("text not defined", procName, 1); + + /* Search existing characters */ + n = recog->setsize; + for (i = 0; i < n; i++) { + recogGetClassString(recog, i, &charstr); + if (!charstr) { + L_ERROR("string not found for index %d\n", procName, i); + continue; + } + diff = strcmp(text, charstr); + LEPT_FREE(charstr); + if (diff) continue; + *pindex = i; + return 0; + } + + return 1; /* not found */ +} + + +/*! + * \brief recogGetClassString() + * + * \param[in] recog + * \param[in] index into array of char types + * \param[out] pcharstr string representation; + * returns an empty string on error + * \return 0 if found, 1 on error + * + *
+ * Notes:
+ *      (1) Extracts a copy of the string from sa_text, which
+ *          the caller must free.
+ *      (2) Caller must check the function return value.
+ * 
+ */ +l_int32 +recogGetClassString(L_RECOG *recog, + l_int32 index, + char **pcharstr) +{ + PROCNAME("recogGetClassString"); + + if (!pcharstr) + return ERROR_INT("&charstr not defined", procName, 1); + *pcharstr = stringNew(""); + if (!recog) + return ERROR_INT("recog not defined", procName, 2); + + if (index < 0 || index >= recog->setsize) + return ERROR_INT("invalid index", procName, 1); + LEPT_FREE(*pcharstr); + *pcharstr = sarrayGetString(recog->sa_text, index, L_COPY); + return 0; +} + + +/*! + * \brief l_convertCharstrToInt() + * + * \param[in] str input string representing one UTF-8 character; + * not more than 4 bytes + * \param[out] pval integer value for the input. Think of it + * as a 1-to-1 hash code. + * \return 0 if OK, 1 on error + */ +l_ok +l_convertCharstrToInt(const char *str, + l_int32 *pval) +{ +l_int32 size, val; + + PROCNAME("l_convertCharstrToInt"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (!str) + return ERROR_INT("str not defined", procName, 1); + size = strlen(str); + if (size == 0) + return ERROR_INT("empty string", procName, 1); + if (size > 4) + return ERROR_INT("invalid string: > 4 bytes", procName, 1); + + val = (l_int32)str[0]; + if (size > 1) + val = (val << 8) + (l_int32)str[1]; + if (size > 2) + val = (val << 8) + (l_int32)str[2]; + if (size > 3) + val = (val << 8) + (l_int32)str[3]; + *pval = val; + return 0; +} + + +/*------------------------------------------------------------------------* + * Serialization * + *------------------------------------------------------------------------*/ +/*! + * \brief recogRead() + * + * \param[in] filename + * \return recog, or NULL on error + * + *
+ * Notes:
+ *      (1) When a recog is serialized, a pixaa of the templates that are
+ *          actually used for correlation is saved in the pixaa_u array
+ *          of the recog.  These can be different from the templates that
+ *          were used to generate the recog, because those original templates
+ *          can be scaled and turned into normalized lines.  When recog1
+ *          is deserialized to recog2, these templates are put in both the
+ *          unscaled array (pixaa_u) and the modified array (pixaa) in recog2.
+ *          Why not put it in only the unscaled array and let
+ *          recogTrainingFinalized() regenerate the modified templates?
+ *          The reason is that with normalized lines, the operation of
+ *          thinning to a skeleton and dilating back to a fixed width
+ *          is not idempotent.  Thinning to a skeleton saves pixels at
+ *          the end of a line segment, and thickening the skeleton puts
+ *          additional pixels at the end of the lines.  This tends to
+ *          close gaps.
+ * 
+ */ +L_RECOG * +recogRead(const char *filename) +{ +FILE *fp; +L_RECOG *recog; + + PROCNAME("recogRead"); + + if (!filename) + return (L_RECOG *)ERROR_PTR("filename not defined", procName, NULL); + if ((fp = fopenReadStream(filename)) == NULL) + return (L_RECOG *)ERROR_PTR("stream not opened", procName, NULL); + + if ((recog = recogReadStream(fp)) == NULL) { + fclose(fp); + return (L_RECOG *)ERROR_PTR("recog not read", procName, NULL); + } + + fclose(fp); + return recog; +} + + +/*! + * \brief recogReadStream() + * + * \param[in] fp file stream + * \return recog, or NULL on error + */ +L_RECOG * +recogReadStream(FILE *fp) +{ +l_int32 version, setsize, threshold, scalew, scaleh, linew; +l_int32 maxyshift, nc; +L_DNA *dna_tochar; +PIXAA *paa; +L_RECOG *recog; +SARRAY *sa_text; + + PROCNAME("recogReadStream"); + + if (!fp) + return (L_RECOG *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nRecog Version %d\n", &version) != 1) + return (L_RECOG *)ERROR_PTR("not a recog file", procName, NULL); + if (version != RECOG_VERSION_NUMBER) + return (L_RECOG *)ERROR_PTR("invalid recog version", procName, NULL); + if (fscanf(fp, "Size of character set = %d\n", &setsize) != 1) + return (L_RECOG *)ERROR_PTR("setsize not read", procName, NULL); + if (fscanf(fp, "Binarization threshold = %d\n", &threshold) != 1) + return (L_RECOG *)ERROR_PTR("binary thresh not read", procName, NULL); + if (fscanf(fp, "Maxyshift = %d\n", &maxyshift) != 1) + return (L_RECOG *)ERROR_PTR("maxyshift not read", procName, NULL); + if (fscanf(fp, "Scale to width = %d\n", &scalew) != 1) + return (L_RECOG *)ERROR_PTR("width not read", procName, NULL); + if (fscanf(fp, "Scale to height = %d\n", &scaleh) != 1) + return (L_RECOG *)ERROR_PTR("height not read", procName, NULL); + if (fscanf(fp, "Normalized line width = %d\n", &linew) != 1) + return (L_RECOG *)ERROR_PTR("line width not read", procName, NULL); + if ((recog = recogCreate(scalew, scaleh, linew, threshold, + maxyshift)) == NULL) + return (L_RECOG *)ERROR_PTR("recog not made", procName, NULL); + + if (fscanf(fp, "\nLabels for character set:\n") != 0) { + recogDestroy(&recog); + return (L_RECOG *)ERROR_PTR("label intro not read", procName, NULL); + } + l_dnaDestroy(&recog->dna_tochar); + if ((dna_tochar = l_dnaReadStream(fp)) == NULL) { + recogDestroy(&recog); + return (L_RECOG *)ERROR_PTR("dna_tochar not read", procName, NULL); + } + recog->dna_tochar = dna_tochar; + sarrayDestroy(&recog->sa_text); + if ((sa_text = sarrayReadStream(fp)) == NULL) { + recogDestroy(&recog); + return (L_RECOG *)ERROR_PTR("sa_text not read", procName, NULL); + } + recog->sa_text = sa_text; + + if (fscanf(fp, "\nPixaa of all samples in the training set:\n") != 0) { + recogDestroy(&recog); + return (L_RECOG *)ERROR_PTR("pixaa intro not read", procName, NULL); + } + if ((paa = pixaaReadStream(fp)) == NULL) { + recogDestroy(&recog); + return (L_RECOG *)ERROR_PTR("pixaa not read", procName, NULL); + } + recog->setsize = setsize; + nc = pixaaGetCount(paa, NULL); + if (nc != setsize) { + recogDestroy(&recog); + pixaaDestroy(&paa); + L_ERROR("(setsize = %d) != (paa count = %d)\n", procName, + setsize, nc); + return NULL; + } + + recogAddAllSamples(&recog, paa, 0); /* this finishes */ + pixaaDestroy(&paa); + if (!recog) + return (L_RECOG *)ERROR_PTR("bad templates", procName, NULL); + return recog; +} + + +/*! + * \brief recogReadMem() + * + * \param[in] data serialization of recog (not ascii) + * \param[in] size of data in bytes + * \return recog, or NULL on error + */ +L_RECOG * +recogReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +L_RECOG *recog; + + PROCNAME("recogReadMem"); + + if (!data) + return (L_RECOG *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (L_RECOG *)ERROR_PTR("stream not opened", procName, NULL); + + recog = recogReadStream(fp); + fclose(fp); + if (!recog) L_ERROR("recog not read\n", procName); + return recog; +} + + +/*! + * \brief recogWrite() + * + * \param[in] filename + * \param[in] recog + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pixaa of templates that is written is the modified one
+ *          in the pixaa field. It is the pixaa that is actually used
+ *          for correlation. This is not the unscaled array of labeled
+ *          bitmaps, in pixaa_u, that was used to generate the recog in the
+ *          first place.  See the notes in recogRead() for the rationale.
+ * 
+ */ +l_ok +recogWrite(const char *filename, + L_RECOG *recog) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("recogWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = recogWriteStream(fp, recog); + fclose(fp); + if (ret) + return ERROR_INT("recog not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief recogWriteStream() + * + * \param[in] fp file stream opened for "wb" + * \param[in] recog + * \return 0 if OK, 1 on error + */ +l_ok +recogWriteStream(FILE *fp, + L_RECOG *recog) +{ + PROCNAME("recogWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + fprintf(fp, "\nRecog Version %d\n", RECOG_VERSION_NUMBER); + fprintf(fp, "Size of character set = %d\n", recog->setsize); + fprintf(fp, "Binarization threshold = %d\n", recog->threshold); + fprintf(fp, "Maxyshift = %d\n", recog->maxyshift); + fprintf(fp, "Scale to width = %d\n", recog->scalew); + fprintf(fp, "Scale to height = %d\n", recog->scaleh); + fprintf(fp, "Normalized line width = %d\n", recog->linew); + fprintf(fp, "\nLabels for character set:\n"); + l_dnaWriteStream(fp, recog->dna_tochar); + sarrayWriteStream(fp, recog->sa_text); + fprintf(fp, "\nPixaa of all samples in the training set:\n"); + pixaaWriteStream(fp, recog->pixaa); + + return 0; +} + + +/*! + * \brief recogWriteMem() + * + * \param[out] pdata data of serialized recog (not ascii) + * \param[out] psize size of returned data + * \param[in] recog + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a recog in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +recogWriteMem(l_uint8 **pdata, + size_t *psize, + L_RECOG *recog) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("recogWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = recogWriteStream(fp, recog); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = recogWriteStream(fp, recog); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief recogExtractPixa() + * + * \param[in] recog + * \return pixa if OK, NULL on error + * + *
+ * Notes:
+ *      (1) This generates a pixa of all the unscaled images in the
+ *          recognizer, where each one has its character class label in
+ *          the pix text field, by flattening pixaa_u to a pixa.
+ * 
+ */ +PIXA * +recogExtractPixa(L_RECOG *recog) +{ + PROCNAME("recogExtractPixa"); + + if (!recog) + return (PIXA *)ERROR_PTR("recog not defined", procName, NULL); + + recogAddCharstrLabels(recog); + return pixaaFlattenToPixa(recog->pixaa_u, NULL, L_CLONE); +} + + +/*! + * \brief recogAddCharstrLabels() + * + * \param[in] recog + * \return 0 if OK, 1 on error + */ +static l_int32 +recogAddCharstrLabels(L_RECOG *recog) +{ +char *text; +l_int32 i, j, n1, n2; +PIX *pix; +PIXA *pixa; +PIXAA *paa; + + PROCNAME("recogAddCharstrLabels"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + /* Add the labels to each unscaled pix */ + paa = recog->pixaa_u; + n1 = pixaaGetCount(paa, NULL); + for (i = 0; i < n1; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + text = sarrayGetString(recog->sa_text, i, L_NOCOPY); + n2 = pixaGetCount(pixa); + for (j = 0; j < n2; j++) { + pix = pixaGetPix(pixa, j, L_CLONE); + pixSetText(pix, text); + pixDestroy(&pix); + } + pixaDestroy(&pixa); + } + + return 0; +} + + +/*! + * \brief recogAddAllSamples() + * + * \param[in] precog addr of recog + * \param[in] paa pixaa from previously trained recog + * \param[in] debug + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) On error, the input recog is destroyed.
+ *      (2) This is used with the serialization routine recogRead(),
+ *          where each pixa in the pixaa represents a set of characters
+ *          in a different class.  Before calling this function, we have
+ *          verified that the number of character classes, given by the
+ *          setsize field in %recog, equals the number of pixa in the paa.
+ *          The character labels for each set are in the sa_text field.
+ * 
+ */ +static l_int32 +recogAddAllSamples(L_RECOG **precog, + PIXAA *paa, + l_int32 debug) +{ +char *text; +l_int32 i, j, nc, ns; +PIX *pix; +PIXA *pixa, *pixa1; +L_RECOG *recog; + + PROCNAME("recogAddAllSamples"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if ((recog = *precog) == NULL) + return ERROR_INT("recog not defined", procName, 1); + if (!paa) { + recogDestroy(&recog); + return ERROR_INT("paa not defined", procName, 1); + } + + nc = pixaaGetCount(paa, NULL); + for (i = 0; i < nc; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + ns = pixaGetCount(pixa); + text = sarrayGetString(recog->sa_text, i, L_NOCOPY); + pixa1 = pixaCreate(ns); + pixaaAddPixa(recog->pixaa_u, pixa1, L_INSERT); + for (j = 0; j < ns; j++) { + pix = pixaGetPix(pixa, j, L_CLONE); + if (debug) fprintf(stderr, "pix[%d,%d]: text = %s\n", i, j, text); + pixaaAddPix(recog->pixaa_u, i, pix, NULL, L_INSERT); + } + pixaDestroy(&pixa); + } + + recogTrainingFinished(&recog, 0, -1, -1.0); /* For second parameter, + see comment in recogRead() */ + if (!recog) + return ERROR_INT("bad templates; recog destroyed", procName, 1); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/recogdid.c b/3rdparty/hgOCR/leptonica/recogdid.c new file mode 100644 index 00000000..105bc3ef --- /dev/null +++ b/3rdparty/hgOCR/leptonica/recogdid.c @@ -0,0 +1,1074 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file recogdid.c + *
+ *
+ *      Top-level identification
+ *         BOXA             *recogDecode()
+ *
+ *      Generate decoding arrays
+ *         static l_int32    recogPrepareForDecoding()
+ *         static l_int32    recogMakeDecodingArray()
+ *
+ *      Dynamic programming for best path
+ *         static l_int32    recogRunViterbi()
+ *         static l_int32    recogRescoreDidResult()
+ *         static PIX       *recogShowPath()
+ *
+ *      Create/destroy temporary DID data
+ *         l_int32           recogCreateDid()
+ *         l_int32           recogDestroyDid()
+ *
+ *      Various helpers
+ *         l_int32           recogDidExists()
+ *         L_RDID           *recogGetDid()
+ *         static l_int32    recogGetWindowedArea()
+ *         l_int32           recogSetChannelParams()
+ *         static l_int32    recogTransferRchToDid()
+ *
+ *  See recogbasic.c for examples of training a recognizer, which is
+ *  required before it can be used for document image decoding.
+ *
+ *  Gary Kopec pioneered this hidden markov approach to "Document Image
+ *  Decoding" (DID) in the early 1990s.  It is based on estimation
+ *  using a generative model of the image generation process, and
+ *  provides the most likely decoding of an image if the model is correct.
+ *  Given the model, it finds the maximum a posteriori (MAP) "message"
+ *  given the observed image.  The model describes how to generate
+ *  an image from a message, and the MAP message is derived from the
+ *  observed image using Bayes' theorem.  This approach can also be used
+ *  to build the model, using the iterative expectation/maximization
+ *  method from labeled but errorful data.
+ *
+ *  In a little more detail: The model comprises three things: the ideal
+ *  printed character templates, the independent bit-flip noise model, and
+ *  the character setwidths.  When a character is printed, the setwidth
+ *  is the distance in pixels that you move forward before being able
+ *  to print the next character.  It is typically slightly less than the
+ *  width of the character template: if too small, an extra character can be
+ *  hallucinated; if too large, it will not be able to match the next
+ *  character template on the line.  The model assumes that the probabilities
+ *  of bit flip depend only on the assignment of the pixel to background
+ *  or template foreground.  The multilevel templates have different
+ *  bit flip probabilities for each level.  Because a character image
+ *  is composed of many pixels, each of which can be independently flipped,
+ *  the actual probability of seeing any rendering is exceedingly small,
+ *  being composed of the product of the probabilities for each pixel.
+ *  The log likelihood is used both to avoid numeric underflow and,
+ *  more importantly, because it results in a summation of independent
+ *  pixel probabilities.  That summation can be shown, in Kopec's
+ *  original paper, to consist of a sum of two terms: (a) the number of
+ *  fg pixels in the bit-and of the observed image with the ideal
+ *  template and (b) the number of fg pixels in the template.  Each
+ *  has a coefficient that depends only on the bit-flip probabilities
+ *  for the fg and bg.  A beautiful result, and computationally simple!
+ *  One nice feature of this approach is that the result of the decoding
+ *  is not very sensitive to the values  used for the bit flip probabilities.
+ *
+ *  The procedure for finding the best decoding (MAP) for a given image goes
+ *  under several names: Viterbi, dynamic programming, hidden markov model.
+ *  It is called a "hidden markov model" because the templates are assumed
+ *  to be printed serially and we don't know what they are -- the identity
+ *  of the templates must be inferred from the observed image.
+ *  The possible decodings form a dense trellis over the pixel positions,
+ *  where at each pixel position you have the possibility of having any
+ *  of the characters printed there (with some reference point) or having
+ *  a single pixel wide space inserted there.  Thus, before the trellis
+ *  can be traversed, we must do the work of finding the log probability,
+ *  at each pixel location, that each of the templates was printed there.
+ *  Armed with those arrays of data, the dynamic programming procedure
+ *  moves from left to right, one pixel at a time, recursively finding
+ *  the path with the highest log probability that gets to that pixel
+ *  position (and noting which template was printed to arrive there).
+ *  After reaching the right side of the image, we can simply backtrack
+ *  along the path, jumping over each template that lies on the highest
+ *  scoring path.  This best path thus only goes through a few of the
+ *  pixel positions.
+ *
+ *  There are two refinements to the original Kopec paper.  In the first,
+ *  one uses multiple, non-overlapping fg templates, each with its own
+ *  bit flip probability.  This makes sense, because the probability
+ *  that a fg boundary pixel flips to bg is greater than that of a fg
+ *  pixel not on the boundary.  And the flip probability of a fg boundary
+ *  pixel is smaller than that of a bg boundary pixel, which in turn
+ *  is greater than that of a bg pixel not on a boundary (the latter
+ *  is taken to be the true background).  Then the simplest realistic
+ *  multiple template model has three templates that are not background.
+ *
+ *  In the second refinement, a heuristic (strict upper bound) is used
+ *  iteratively in the Viterbi process to compute the log probabilities.
+ *  Using the heuristic, you find the best path, and then score all nodes
+ *  on that path with the actual probability, which is guaranteed to
+ *  be a smaller number.  You run this iteratively, rescoring just the best
+ *  found path each time.  After each rescoring, the path may change because
+ *  the local scores have been reduced.  However, the process converges
+ *  rapidly, and when it doesn't change, it must be the best path because
+ *  it is properly scored (even if neighboring paths are heuristically
+ *  scored).  The heuristic score is found column-wise by assuming
+ *  that all the fg pixels in the template are on fg pixels in the image --
+ *  we just take the minimum of the number of pixels in the template
+ *  and image column.  This can easily give a 10-fold reduction in
+ *  computation because the heuristic score can be computed much faster
+ *  than the exact score.
+ *
+ *  For reference, the classic paper on the approach by Kopec is:
+ *  * "Document Image Decoding Using Markov Source Models", IEEE Trans.
+ *    PAMI, Vol 16, No. 6, June 1994, pp 602-617.
+ *  A refinement of the method for multilevel templates by Kopec is:
+ *  * "Multilevel Character Templates for Document Image Decoding",
+ *    Proc. SPIE 3027, Document Recognition IV, p. 168ff, 1997.
+ *  Further refinements for more efficient decoding are given in these
+ *  two papers, which are both stored on leptonica.org:
+ *  * "Document Image Decoding using Iterated Complete Path Search", Minka,
+ *    Bloomberg and Popat, Proc. SPIE Vol 4307, p. 250-258, Document
+ *    Recognition and Retrieval VIII, San Jose, CA 2001.
+ *  * "Document Image Decoding using Iterated Complete Path Search with
+ *    Subsampled Heuristic Scoring", Bloomberg, Minka and Popat, ICDAR 2001,
+ *    p. 344-349, Sept. 2001, Seattle.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +static l_int32 recogPrepareForDecoding(L_RECOG *recog, PIX *pixs, + l_int32 debug); +static l_int32 recogMakeDecodingArray(L_RECOG *recog, l_int32 index, + l_int32 debug); +static l_int32 recogRunViterbi(L_RECOG *recog, PIX **ppixdb); +static l_int32 recogRescoreDidResult(L_RECOG *recog, PIX **ppixdb); +static PIX *recogShowPath(L_RECOG *recog, l_int32 select); +static l_int32 recogGetWindowedArea(L_RECOG *recog, l_int32 index, + l_int32 x, l_int32 *pdely, l_int32 *pwsum); +static l_int32 recogTransferRchToDid(L_RECOG *recog, l_int32 x, l_int32 y); + + /* Parameters for modeling the decoding */ +static const l_float32 SetwidthFraction = 0.95; +static const l_int32 MaxYShift = 1; + + /* Channel parameters. alpha[0] is the probability that a bg pixel + * is OFF. alpha[1] is the probability that level 1 fg is ON. + * The actual values are not too critical, but they must be larger + * than 0.5 and smaller than 1.0. For more accuracy in template + * matching, use a 4-level template, where levels 2 and 3 are + * boundary pixels in the fg and bg, respectively. */ +static const l_float32 DefaultAlpha2[] = {0.95f, 0.9f}; +static const l_float32 DefaultAlpha4[] = {0.95f, 0.9f, 0.75f, 0.25f}; + + +/*------------------------------------------------------------------------* + * Top-level identification * + *------------------------------------------------------------------------*/ +/*! + * \brief recogDecode() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs typically of multiple touching characters, 1 bpp + * \param[in] nlevels of templates; 2 for now + * \param[out] ppixdb [optional] debug result; can be null + * \return boxa segmentation of pixs into characters, or NULL on error + * + *
+ * Notes:
+ *      (1) The input pixs has been filtered so that it is likely to be
+ *          composed of more than one touching character.  Specifically,
+ *          its height can only slightly exceed that of the tallest
+ *          unscaled template, the width is somewhat larger than the
+ *          width of the widest unscaled template, and the w/h aspect ratio
+ *          is bounded by max_wh_ratio.
+ *      (2) This uses the DID mechanism with labeled templates to
+ *          segment the input %pixs.  The resulting segmentation is
+ *          returned.  (It is given by did->boxa).
+ *      (3) In debug mode, the Viterbi path is rescored based on all
+ *          the templates.  In non-debug mode, the same procedure is
+ *          carried out by recogIdentifyPix() on the result of the
+ *          segmentation.
+ * 
+ */ +BOXA * +recogDecode(L_RECOG *recog, + PIX *pixs, + l_int32 nlevels, + PIX **ppixdb) +{ +l_int32 debug; +PIX *pix1; +PIXA *pixa; + + PROCNAME("recogDecode"); + + if (ppixdb) *ppixdb = NULL; + if (!recog) + return (BOXA *)ERROR_PTR("recog not defined", procName, NULL); + if (!pixs || pixGetDepth(pixs) != 1) + return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (!recog->train_done) + return (BOXA *)ERROR_PTR("training not finished", procName, NULL); + if (nlevels != 2) + return (BOXA *)ERROR_PTR("nlevels != 2 (for now)", procName, NULL); + + debug = (ppixdb) ? 1 : 0; + if (recogPrepareForDecoding(recog, pixs, debug)) + return (BOXA *)ERROR_PTR("error making arrays", procName, NULL); + recogSetChannelParams(recog, nlevels); + + /* Normal path; just run Viterbi */ + if (!debug) { + if (recogRunViterbi(recog, NULL) == 0) + return boxaCopy(recog->did->boxa, L_COPY); + else + return (BOXA *)ERROR_PTR("error in Viterbi", procName, NULL); + } + + /* Debug path */ + if (recogRunViterbi(recog, &pix1)) + return (BOXA *)ERROR_PTR("error in viterbi", procName, NULL); + pixa = pixaCreate(2); + pixaAddPix(pixa, pix1, L_INSERT); + if (recogRescoreDidResult(recog, &pix1)) { + pixaDestroy(&pixa); + return (BOXA *)ERROR_PTR("error in rescoring", procName, NULL); + } + pixaAddPix(pixa, pix1, L_INSERT); + *ppixdb = pixaDisplayTiledInRows(pixa, 32, 2 * pixGetWidth(pix1) + 100, + 1.0, 0, 30, 2); + pixaDestroy(&pixa); + return boxaCopy(recog->did->boxa, L_COPY); +} + + +/*------------------------------------------------------------------------* + * Generate decoding arrays * + *------------------------------------------------------------------------*/ +/*! + * \brief recogPrepareForDecoding() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs typically of multiple touching characters, 1 bpp + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Binarizes and crops input %pixs.
+ *      (2) Removes previous L_RDID struct and makes a new one.
+ *      (3) Generates the bit-and sum arrays for each character template
+ *          at each pixel position in %pixs.  These are used in the
+ *          Viterbi dynamic programming step.
+ *      (4) The values are saved in the scoring arrays at the left edge
+ *          of the template.  They are used in the Viterbi process
+ *          at the setwidth position (which is near the RHS of the template
+ *          as it is positioned on pixs) in the generated trellis.
+ * 
+ */ +static l_int32 +recogPrepareForDecoding(L_RECOG *recog, + PIX *pixs, + l_int32 debug) +{ +l_int32 i; +PIX *pix1; +L_RDID *did; + + PROCNAME("recogPrepareForDecoding"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!recog->train_done) + return ERROR_INT("training not finished", procName, 1); + + if (!recog->ave_done) + recogAverageSamples(&recog, 0); + + /* Binarize and crop to foreground if necessary */ + if ((pix1 = recogProcessToIdentify(recog, pixs, 0)) == NULL) + return ERROR_INT("pix1 not made", procName, 1); + + /* Remove any existing RecogDID and set up a new one */ + recogDestroyDid(recog); + if (recogCreateDid(recog, pix1)) { + pixDestroy(&pix1); + return ERROR_INT("decoder not made", procName, 1); + } + + /* Compute vertical sum and first moment arrays */ + did = recogGetDid(recog); /* owned by recog */ + did->nasum = pixCountPixelsByColumn(pix1); + did->namoment = pixGetMomentByColumn(pix1, 1); + + /* Generate the arrays */ + for (i = 0; i < recog->did->narray; i++) + recogMakeDecodingArray(recog, i, debug); + + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief recogMakeDecodingArray() + * + * \param[in] recog + * \param[in] index of averaged template + * \param[in] debug 1 for debug output; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates the bit-and sum array for a character template along pixs.
+ *      (2) The values are saved in the scoring arrays at the left edge
+ *          of the template as it is positioned on pixs.
+ * 
+ */ +static l_int32 +recogMakeDecodingArray(L_RECOG *recog, + l_int32 index, + l_int32 debug) +{ +l_int32 i, j, w1, h1, w2, h2, nx, ycent2, count, maxcount, maxdely; +l_int32 sum, moment, dely, shifty; +l_int32 *counta, *delya, *ycent1, *arraysum, *arraymoment, *sumtab; +NUMA *nasum, *namoment; +PIX *pix1, *pix2, *pix3; +L_RDID *did; + + PROCNAME("recogMakeDecodingArray"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if (index < 0 || index >= did->narray) + return ERROR_INT("invalid index", procName, 1); + + /* Check that pix1 is large enough for this template. */ + pix1 = did->pixs; /* owned by did; do not destroy */ + pixGetDimensions(pix1, &w1, &h1, NULL); + pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); + pixGetDimensions(pix2, &w2, &h2, NULL); + if (w1 < w2) { + L_INFO("w1 = %d < w2 = %d for index %d\n", procName, w1, w2, index); + pixDestroy(&pix2); + return 0; + } + + nasum = did->nasum; + namoment = did->namoment; + ptaGetIPt(recog->pta_u, index, NULL, &ycent2); + sumtab = recog->sumtab; + counta = did->counta[index]; + delya = did->delya[index]; + + /* Set up the array for ycent1. This gives the y-centroid location + * for a window of width w2, starting at location i. */ + nx = w1 - w2 + 1; /* number of positions w2 can be placed in w1 */ + ycent1 = (l_int32 *)LEPT_CALLOC(nx, sizeof(l_int32)); + arraysum = numaGetIArray(nasum); + arraymoment = numaGetIArray(namoment); + for (i = 0, sum = 0, moment = 0; i < w2; i++) { + sum += arraysum[i]; + moment += arraymoment[i]; + } + for (i = 0; i < nx - 1; i++) { + ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; + sum += arraysum[w2 + i] - arraysum[i]; + moment += arraymoment[w2 + i] - arraymoment[i]; + } + ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; + + /* Compute the bit-and sum between the template pix2 and pix1, at + * locations where the left side of pix2 goes from 0 to nx - 1 + * in pix1. Do this around the vertical alignment of the pix2 + * centroid and the windowed pix1 centroid. + * (1) Start with pix3 cleared and approximately equal in size to pix1. + * (2) Blit the y-shifted pix2 onto pix3. Then all ON pixels + * are within the intersection of pix1 and the shifted pix2. + * (3) AND pix1 with pix3. */ + pix3 = pixCreate(w2, h1, 1); + for (i = 0; i < nx; i++) { + shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); + maxcount = 0; + maxdely = 0; + for (j = -MaxYShift; j <= MaxYShift; j++) { + pixClearAll(pix3); + dely = shifty + j; /* amount pix2 is shifted relative to pix1 */ + pixRasterop(pix3, 0, dely, w2, h2, PIX_SRC, pix2, 0, 0); + pixRasterop(pix3, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); + pixCountPixels(pix3, &count, sumtab); + if (count > maxcount) { + maxcount = count; + maxdely = dely; + } + } + counta[i] = maxcount; + delya[i] = maxdely; + } + did->fullarrays = TRUE; + + pixDestroy(&pix2); + pixDestroy(&pix3); + LEPT_FREE(ycent1); + LEPT_FREE(arraysum); + LEPT_FREE(arraymoment); + return 0; +} + + +/*------------------------------------------------------------------------* + * Dynamic programming for best path + *------------------------------------------------------------------------*/ +/*! + * \brief recogRunViterbi() + * + * \param[in] recog with LUT's pre-computed + * \param[out] ppixdb [optional] debug result; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This can be used when the templates are unscaled.  It works by
+ *          matching the average, unscaled templates of each class to
+ *          all positions.
+ *      (2) It is recursive, in that
+ *          (a) we compute the score successively at all pixel positions x,
+ *          (b) to compute the score at x in the trellis, for each
+ *              template we look backwards to (x - setwidth) to get the
+ *              score if that template were to be printed with its
+ *              setwidth location at x.  We save at x the template and
+ *              score that maximizes the sum of the score at (x - setwidth)
+ *              and the log-likelihood for the template to be printed with
+ *              its LHS there.
+ *      (3) The primary output is a boxa of the locations for splitting
+ *          the input image.  These locations are used later to split the
+ *          image and send the pieces individually for recognition.
+ *          This can be done in either recogIdentifyMultiple(), or
+ *          for debugging in recogRescoreDidResult().
+ * 
+ */ +static l_int32 +recogRunViterbi(L_RECOG *recog, + PIX **ppixdb) +{ +l_int32 i, w1, w2, h1, xnz, x, narray, minsetw; +l_int32 first, templ, xloc, dely, counts, area1; +l_int32 besttempl, spacetempl; +l_int32 *setw, *didtempl; +l_int32 *area2; /* must be freed */ +l_float32 prevscore, matchscore, maxscore, correl; +l_float32 *didscore; +BOX *box; +PIX *pix1; +L_RDID *did; + + PROCNAME("recogRunViterbi"); + + if (ppixdb) *ppixdb = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if (did->fullarrays == 0) + return ERROR_INT("did full arrays not made", procName, 1); + + /* Compute the minimum setwidth. Bad templates with very small + * width can cause havoc because the setwidth is too small. */ + w1 = did->size; + narray = did->narray; + spacetempl = narray; + setw = did->setwidth; + minsetw = 100000; + for (i = 0; i < narray; i++) { + if (setw[i] < minsetw) + minsetw = setw[i]; + } + if (minsetw <= 2) + return ERROR_INT("minsetw <= 2; bad templates", procName, 1); + + /* The score array is initialized to 0.0. As we proceed to + * the left, the log likelihood for the partial paths goes + * negative, and we prune for the max (least negative) path. + * No matches will be computed until we reach x = min(setwidth); + * until then first == TRUE after looping over templates. */ + didscore = did->trellisscore; + didtempl = did->trellistempl; + area2 = numaGetIArray(recog->nasum_u); + besttempl = 0; /* just tells compiler it is initialized */ + maxscore = 0.0; /* ditto */ + for (x = minsetw; x < w1; x++) { /* will always get a score */ + first = TRUE; + for (i = 0; i < narray; i++) { + if (x - setw[i] < 0) continue; + matchscore = didscore[x - setw[i]] + + did->gamma[1] * did->counta[i][x - setw[i]] + + did->beta[1] * area2[i]; + if (first) { + maxscore = matchscore; + besttempl = i; + first = FALSE; + } else { + if (matchscore > maxscore) { + maxscore = matchscore; + besttempl = i; + } + } + } + + /* We can also put down a single pixel space, with no cost + * because all pixels are bg. */ + prevscore = didscore[x - 1]; + if (prevscore > maxscore) { /* 1 pixel space is best */ + maxscore = prevscore; + besttempl = spacetempl; + } + didscore[x] = maxscore; + didtempl[x] = besttempl; + } + + /* Backtrack to get the best path. + * Skip over (i.e., ignore) all single pixel spaces. */ + for (x = w1 - 1; x >= 0; x--) { + if (didtempl[x] != spacetempl) break; + } + h1 = pixGetHeight(did->pixs); + while (x > 0) { + if (didtempl[x] == spacetempl) { /* skip over spaces */ + x--; + continue; + } + templ = didtempl[x]; + xloc = x - setw[templ]; + if (xloc < 0) break; + counts = did->counta[templ][xloc]; /* bit-and counts */ + recogGetWindowedArea(recog, templ, xloc, &dely, &area1); + correl = ((l_float32)(counts) * counts) / + (l_float32)(area2[templ] * area1); + pix1 = pixaGetPix(recog->pixa_u, templ, L_CLONE); + w2 = pixGetWidth(pix1); + numaAddNumber(did->natempl, templ); + numaAddNumber(did->naxloc, xloc); + numaAddNumber(did->nadely, dely); + numaAddNumber(did->nawidth, pixGetWidth(pix1)); + numaAddNumber(did->nascore, correl); + xnz = L_MAX(xloc, 0); + box = boxCreate(xnz, dely, w2, h1); + boxaAddBox(did->boxa, box, L_INSERT); + pixDestroy(&pix1); + x = xloc; + } + + if (ppixdb) { + numaWriteStream(stderr, did->natempl); + numaWriteStream(stderr, did->naxloc); + numaWriteStream(stderr, did->nadely); + numaWriteStream(stderr, did->nawidth); + numaWriteStream(stderr, did->nascore); + boxaWriteStream(stderr, did->boxa); + *ppixdb = recogShowPath(recog, 0); + } + + LEPT_FREE(area2); + return 0; +} + + +/*! + * \brief recogRescoreDidResult() + * + * \param[in] recog with LUT's pre-computed + * \param[out] ppixdb [optional] debug result; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does correlation matching with all unscaled templates,
+ *          using the character segmentation determined by the Viterbi path.
+ * 
+ */ +static l_int32 +recogRescoreDidResult(L_RECOG *recog, + PIX **ppixdb) +{ +l_int32 i, n, sample, x, dely, index; +char *text; +l_float32 score; +BOX *box1; +PIX *pixs, *pix1; +L_RDID *did; + + PROCNAME("recogRescoreDidResult"); + + if (ppixdb) *ppixdb = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if (did->fullarrays == 0) + return ERROR_INT("did full arrays not made", procName, 1); + if ((n = numaGetCount(did->naxloc)) == 0) + return ERROR_INT("no elements in path", procName, 1); + + pixs = did->pixs; + for (i = 0; i < n; i++) { + box1 = boxaGetBox(did->boxa, i, L_COPY); + boxGetGeometry(box1, &x, &dely, NULL, NULL); + pix1 = pixClipRectangle(pixs, box1, NULL); + recogIdentifyPix(recog, pix1, NULL); + recogTransferRchToDid(recog, x, dely); + if (ppixdb) { + rchExtract(recog->rch, &index, &score, &text, + &sample, NULL, NULL, NULL); + fprintf(stderr, "text = %s, index = %d, sample = %d," + " score = %5.3f\n", text, index, sample, score); + } + pixDestroy(&pix1); + boxDestroy(&box1); + LEPT_FREE(text); + } + + if (ppixdb) + *ppixdb = recogShowPath(recog, 1); + + return 0; +} + + +/*! + * \brief recogShowPath() + * + * \param[in] recog with LUT's pre-computed + * \param[in] select 0 for Viterbi; 1 for rescored + * \return pix debug output), or NULL on error + */ +static PIX * +recogShowPath(L_RECOG *recog, + l_int32 select) +{ +char textstr[16]; +l_int32 i, j, n, index, xloc, dely; +l_float32 score; +L_BMF *bmf; +NUMA *natempl_s, *nasample_s, *nascore_s, *naxloc_s, *nadely_s; +PIX *pixs, *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; +L_RDID *did; + + PROCNAME("recogShowPath"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + if ((did = recogGetDid(recog)) == NULL) + return (PIX *)ERROR_PTR("did not defined", procName, NULL); + + bmf = bmfCreate(NULL, 8); + pixs = pixScale(did->pixs, 4.0, 4.0); + pix0 = pixAddBorderGeneral(pixs, 0, 0, 0, 40, 0); + pix1 = pixConvertTo32(pix0); + if (select == 0) { /* Viterbi */ + natempl_s = did->natempl; + nascore_s = did->nascore; + naxloc_s = did->naxloc; + nadely_s = did->nadely; + } else { /* rescored */ + natempl_s = did->natempl_r; + nasample_s = did->nasample_r; + nascore_s = did->nascore_r; + naxloc_s = did->naxloc_r; + nadely_s = did->nadely_r; + } + + n = numaGetCount(natempl_s); + for (i = 0; i < n; i++) { + numaGetIValue(natempl_s, i, &index); + if (select == 0) { + pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); + } else { + numaGetIValue(nasample_s, i, &j); + pix2 = pixaaGetPix(recog->pixaa_u, index, j, L_CLONE); + } + pix3 = pixScale(pix2, 4.0, 4.0); + pix4 = pixErodeBrick(NULL, pix3, 5, 5); + pixXor(pix4, pix4, pix3); + numaGetFValue(nascore_s, i, &score); + snprintf(textstr, sizeof(textstr), "%5.3f", score); + pix5 = pixAddTextlines(pix4, bmf, textstr, 1, L_ADD_BELOW); + numaGetIValue(naxloc_s, i, &xloc); + numaGetIValue(nadely_s, i, &dely); + pixPaintThroughMask(pix1, pix5, 4 * xloc, 4 * dely, 0xff000000); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + pixDestroy(&pix5); + } + pixDestroy(&pixs); + pixDestroy(&pix0); + bmfDestroy(&bmf); + return pix1; +} + + +/*------------------------------------------------------------------------* + * Create/destroy temporary DID data * + *------------------------------------------------------------------------*/ +/*! + * \brief recogCreateDid() + * + * \param[in] recog + * \param[in] pixs of 1 bpp image to match + * \return 0 if OK, 1 on error + */ +l_ok +recogCreateDid(L_RECOG *recog, + PIX *pixs) +{ +l_int32 i; +PIX *pix1; +L_RDID *did; + + PROCNAME("recogCreateDid"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + recogDestroyDid(recog); + + did = (L_RDID *)LEPT_CALLOC(1, sizeof(L_RDID)); + recog->did = did; + did->pixs = pixClone(pixs); + did->narray = recog->setsize; + did->size = pixGetWidth(pixs); + did->natempl = numaCreate(5); + did->naxloc = numaCreate(5); + did->nadely = numaCreate(5); + did->nawidth = numaCreate(5); + did->boxa = boxaCreate(5); + did->nascore = numaCreate(5); + did->natempl_r = numaCreate(5); + did->nasample_r = numaCreate(5); + did->naxloc_r = numaCreate(5); + did->nadely_r = numaCreate(5); + did->nawidth_r = numaCreate(5); + did->nascore_r = numaCreate(5); + + /* Make the arrays */ + did->setwidth = (l_int32 *)LEPT_CALLOC(did->narray, sizeof(l_int32)); + did->counta = (l_int32 **)LEPT_CALLOC(did->narray, sizeof(l_int32 *)); + did->delya = (l_int32 **)LEPT_CALLOC(did->narray, sizeof(l_int32 *)); + did->beta = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); + did->gamma = (l_float32 *)LEPT_CALLOC(5, sizeof(l_float32)); + did->trellisscore = (l_float32 *)LEPT_CALLOC(did->size, sizeof(l_float32)); + did->trellistempl = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); + for (i = 0; i < did->narray; i++) { + did->counta[i] = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); + did->delya[i] = (l_int32 *)LEPT_CALLOC(did->size, sizeof(l_int32)); + } + + /* Populate the setwidth array */ + for (i = 0; i < did->narray; i++) { + pix1 = pixaGetPix(recog->pixa_u, i, L_CLONE); + did->setwidth[i] = (l_int32)(SetwidthFraction * pixGetWidth(pix1)); + pixDestroy(&pix1); + } + + return 0; +} + + +/*! + * \brief recogDestroyDid() + * + * \param[in] recog + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) As the signature indicates, this is owned by the recog, and can
+ *          only be destroyed using this function.
+ * 
+ */ +l_ok +recogDestroyDid(L_RECOG *recog) +{ +l_int32 i; +L_RDID *did; + + PROCNAME("recogDestroyDid"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + if ((did = recog->did) == NULL) return 0; + if (!did->counta || !did->delya) + return ERROR_INT("ptr array is null; shouldn't happen!", procName, 1); + + for (i = 0; i < did->narray; i++) { + LEPT_FREE(did->counta[i]); + LEPT_FREE(did->delya[i]); + } + LEPT_FREE(did->setwidth); + LEPT_FREE(did->counta); + LEPT_FREE(did->delya); + LEPT_FREE(did->beta); + LEPT_FREE(did->gamma); + LEPT_FREE(did->trellisscore); + LEPT_FREE(did->trellistempl); + pixDestroy(&did->pixs); + numaDestroy(&did->nasum); + numaDestroy(&did->namoment); + numaDestroy(&did->natempl); + numaDestroy(&did->naxloc); + numaDestroy(&did->nadely); + numaDestroy(&did->nawidth); + boxaDestroy(&did->boxa); + numaDestroy(&did->nascore); + numaDestroy(&did->natempl_r); + numaDestroy(&did->nasample_r); + numaDestroy(&did->naxloc_r); + numaDestroy(&did->nadely_r); + numaDestroy(&did->nawidth_r); + numaDestroy(&did->nascore_r); + LEPT_FREE(did); + recog->did = NULL; + return 0; +} + + +/*------------------------------------------------------------------------* + * Various helpers * + *------------------------------------------------------------------------*/ +/*! + * \brief recogDidExists() + * + * \param[in] recog + * \return 1 if recog->did exists; 0 if not or on error. + */ +l_int32 +recogDidExists(L_RECOG *recog) +{ + PROCNAME("recogDidExists"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 0); + return (recog->did) ? 1 : 0; +} + + +/*! + * \brief recogGetDid() + * + * \param[in] recog + * \return did still owned by the recog, or NULL on error + * + *
+ * Notes:
+ *      (1) This also makes sure the arrays are defined.
+ * 
+ */ +L_RDID * +recogGetDid(L_RECOG *recog) +{ +l_int32 i; +L_RDID *did; + + PROCNAME("recogGetDid"); + + if (!recog) + return (L_RDID *)ERROR_PTR("recog not defined", procName, NULL); + if ((did = recog->did) == NULL) + return (L_RDID *)ERROR_PTR("did not defined", procName, NULL); + if (!did->counta || !did->delya) + return (L_RDID *)ERROR_PTR("did array ptrs not defined", + procName, NULL); + for (i = 0; i < did->narray; i++) { + if (!did->counta[i] || !did->delya[i]) + return (L_RDID *)ERROR_PTR("did arrays not defined", + procName, NULL); + } + + return did; +} + + +/*! + * \brief recogGetWindowedArea() + * + * \param[in] recog + * \param[in] index of template + * \param[in] x pixel position of left hand edge of template + * \param[out] pdely y shift of template relative to pix1 + * \param[out] pwsum number of fg pixels in window of pixs + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is called after the best path has been found through
+ *          the trellis, in order to produce a correlation that can be used
+ *          to evaluate the confidence we have in the identification.
+ *          The correlation is |1 & 2|^2 / (|1| * |2|).
+ *          |1 & 2| is given by the count array, |2| is found from
+ *          nasum_u[], and |1| is wsum returned from this function.
+ * 
+ */ +static l_int32 +recogGetWindowedArea(L_RECOG *recog, + l_int32 index, + l_int32 x, + l_int32 *pdely, + l_int32 *pwsum) +{ +l_int32 w1, h1, w2, h2; +PIX *pix1, *pix2, *pixt; +L_RDID *did; + + PROCNAME("recogGetWindowedArea"); + + if (pdely) *pdely = 0; + if (pwsum) *pwsum = 0; + if (!pdely || !pwsum) + return ERROR_INT("&dely and &wsum not both defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if (index < 0 || index >= did->narray) + return ERROR_INT("invalid index", procName, 1); + pix1 = did->pixs; + pixGetDimensions(pix1, &w1, &h1, NULL); + if (x >= w1) + return ERROR_INT("invalid x position", procName, 1); + + pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); + pixGetDimensions(pix2, &w2, &h2, NULL); + if (w1 < w2) { + L_INFO("template %d too small\n", procName, index); + pixDestroy(&pix2); + return 0; + } + + *pdely = did->delya[index][x]; + pixt = pixCreate(w2, h1, 1); + pixRasterop(pixt, 0, *pdely, w2, h2, PIX_SRC, pix2, 0, 0); + pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, x, 0); + pixCountPixels(pixt, pwsum, recog->sumtab); + pixDestroy(&pix2); + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief recogSetChannelParams() + * + * \param[in] recog + * \param[in] nlevels + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This converts the independent bit-flip probabilities in the
+ *          "channel" into log-likelihood coefficients on image sums.
+ *          These coefficients are only defined for the non-background
+ *          template levels.  Thus for nlevels = 2 (one fg, one bg),
+ *          only beta[1] and gamma[1] are used.  For nlevels = 4 (three
+ *          fg templates), we use beta[1-3] and gamma[1-3].
+ * 
+ */ +l_ok +recogSetChannelParams(L_RECOG *recog, + l_int32 nlevels) +{ +l_int32 i; +const l_float32 *da; +L_RDID *did; + + PROCNAME("recogSetChannelParams"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if (nlevels == 2) + da = DefaultAlpha2; + else if (nlevels == 4) + da = DefaultAlpha4; + else + return ERROR_INT("nlevels not 2 or 4", procName, 1); + + for (i = 1; i < nlevels; i++) { + did->beta[i] = log((1.0 - da[i]) / da[0]); + did->gamma[i] = log(da[0] * da[i] / ((1.0 - da[0]) * (1.0 - da[i]))); +/* fprintf(stderr, "beta[%d] = %7.3f, gamma[%d] = %7.3f\n", + i, did->beta[i], i, did->gamma[i]); */ + } + + return 0; +} + + +/*! + * \brief recogTransferRchToDid() + * + * \param[in] recog with rch and did defined + * \param[in] x left edge of extracted region, relative to decoded line + * \param[in] y top edge of extracted region, relative to input image + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used to transfer the results for a single character match
+ *          to the rescored did arrays.
+ * 
+ */ +static l_int32 +recogTransferRchToDid(L_RECOG *recog, + l_int32 x, + l_int32 y) +{ +L_RDID *did; +L_RCH *rch; + + PROCNAME("recogTransferRchToDid"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if ((did = recogGetDid(recog)) == NULL) + return ERROR_INT("did not defined", procName, 1); + if ((rch = recog->rch) == NULL) + return ERROR_INT("rch not defined", procName, 1); + + numaAddNumber(did->natempl_r, rch->index); + numaAddNumber(did->nasample_r, rch->sample); + numaAddNumber(did->naxloc_r, rch->xloc + x); + numaAddNumber(did->nadely_r, rch->yloc + y); + numaAddNumber(did->nawidth_r, rch->width); + numaAddNumber(did->nascore_r, rch->score); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/recogident.c b/3rdparty/hgOCR/leptonica/recogident.c new file mode 100644 index 00000000..44a8d076 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/recogident.c @@ -0,0 +1,1882 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file recogident.c + *
+ *
+ *      Top-level identification
+ *         l_int32             recogIdentifyMultiple()
+ *
+ *      Segmentation and noise removal
+ *         l_int32             recogSplitIntoCharacters()
+ *
+ *      Greedy character splitting
+ *         l_int32             recogCorrelationBestRow()
+ *         l_int32             recogCorrelationBestChar()
+ *         static l_int32      pixCorrelationBestShift()
+ *
+ *      Low-level identification of single characters
+ *         l_int32             recogIdentifyPixa()
+ *         l_int32             recogIdentifyPix()
+ *         l_int32             recogSkipIdentify()
+ *
+ *      Operations for handling identification results
+ *         static L_RCHA      *rchaCreate()
+ *         l_int32            *rchaDestroy()
+ *         static L_RCH       *rchCreate()
+ *         l_int32            *rchDestroy()
+ *         l_int32             rchaExtract()
+ *         l_int32             rchExtract()
+ *         static l_int32      transferRchToRcha()
+ *
+ *      Preprocessing and filtering
+ *         l_int32             recogProcessToIdentify()
+ *         static PIX         *recogPreSplittingFilter()
+ *         static PIX         *recogSplittingFilter()
+ *
+ *      Postprocessing
+ *         SARRAY             *recogExtractNumbers()
+ *         PIX                *showExtractNumbers()
+ *
+ *      Static debug helper
+ *         static void         l_showIndicatorSplitValues()
+ *
+ *  See recogbasic.c for examples of training a recognizer, which is
+ *  required before it can be used for identification.
+ *
+ *  The character splitter repeatedly does a greedy correlation with each
+ *  averaged unscaled template, at all pixel locations along the text to
+ *  be identified.  The vertical alignment is between the template
+ *  centroid and the (moving) windowed centroid, including a delta of
+ *  1 pixel above and below.  The best match then removes part of the
+ *  input image, leaving 1 or 2 pieces, which, after filtering,
+ *  are put in a queue.  The process ends when the queue is empty.
+ *  The filtering is based on the size and aspect ratio of the
+ *  remaining pieces; the intent is to remove anything that is
+ *  unlikely to be text, such as small pieces and line graphics.
+ *
+ *  After splitting, the selected segments are identified using
+ *  the input parameters that were initially specified for the
+ *  recognizer.  Unlike the splitter, which uses the averaged
+ *  templates from the unscaled input, the recognizer can use
+ *  either all training examples or averaged templates, and these
+ *  can be either scaled or unscaled.  These choices are specified
+ *  when the recognizer is constructed.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* There are two methods for splitting characters: DID and greedy. + * The default method is DID. */ +#define SPLIT_WITH_DID 1 + + /* Padding on pix1: added before correlations and removed from result */ +static const l_int32 LeftRightPadding = 32; + + /* Parameters for filtering and sorting connected components in splitter */ +static const l_float32 MinFillFactor = 0.10; +static const l_int32 DefaultMinHeight = 15; /* min unscaled height */ +static const l_int32 MinOverlap1 = 6; /* in pass 1 of boxaSort2d() */ +static const l_int32 MinOverlap2 = 6; /* in pass 2 of boxaSort2d() */ +static const l_int32 MinHeightPass1 = 5; /* min height to start pass 1 */ + + +static l_int32 pixCorrelationBestShift(PIX *pix1, PIX *pix2, NUMA *nasum1, + NUMA *namoment1, l_int32 area2, + l_int32 ycent2, l_int32 maxyshift, + l_int32 *tab8, l_int32 *pdelx, + l_int32 *pdely, l_float32 *pscore, + l_int32 debugflag ); +static L_RCH *rchCreate(l_int32 index, l_float32 score, char *text, + l_int32 sample, l_int32 xloc, l_int32 yloc, + l_int32 width); +static L_RCHA *rchaCreate(); +static l_int32 transferRchToRcha(L_RCH *rch, L_RCHA *rcha); +static PIX *recogPreSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 minh, + l_float32 minaf, l_int32 debug); +static l_int32 recogSplittingFilter(L_RECOG *recog, PIX *pixs, l_int32 min, + l_float32 minaf, l_int32 *premove, + l_int32 debug); +static void l_showIndicatorSplitValues(NUMA *na1, NUMA *na2, NUMA *na3, + NUMA *na4, NUMA *na5, NUMA *na6); + +/*------------------------------------------------------------------------* + * Identification + *------------------------------------------------------------------------*/ +/*! + * \brief recogIdentifyMultiple() + * + * \param[in] recog with training finished + * \param[in] pixs containing typically a small number of characters + * \param[in] minh remove shorter components; use 0 for default + * \param[in] skipsplit 1 to skip the splitting step + * \param[out] pboxa [optional] locations of identified components + * \param[out] ppixa [optional] images of identified components + * \param[out] ppixdb [optional] debug pix: inputs and best fits + * \param[in] debugsplit 1 returns pix split debugging images + * \return 0 if OK; 1 if nothing is found; 2 for other errors. + * + *
+ * Notes:
+ *      (1) This filters the input pixa and calls recogIdentifyPixa()
+ *      (2) Splitting is relatively slow, because it tries to match all
+ *          character templates to all locations.  This step can be skipped.
+ *      (3) An attempt is made to order the (optionally) returned images
+ *          and boxes in 2-dimensional sorted order.  These can then
+ *          be used to aggregate identified characters into numbers or words.
+ *          One typically wants the pixa, which contains a boxa of the
+ *          extracted subimages.
+ * 
+ */ +l_ok +recogIdentifyMultiple(L_RECOG *recog, + PIX *pixs, + l_int32 minh, + l_int32 skipsplit, + BOXA **pboxa, + PIXA **ppixa, + PIX **ppixdb, + l_int32 debugsplit) +{ +l_int32 n; +BOXA *boxa; +PIX *pixb; +PIXA *pixa; + + PROCNAME("recogIdentifyMultiple"); + + if (pboxa) *pboxa = NULL; + if (ppixa) *ppixa = NULL; + if (ppixdb) *ppixdb = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 2); + if (!recog->train_done) + return ERROR_INT("training not finished", procName, 2); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 2); + + /* Binarize if necessary */ + if (pixGetDepth(pixs) > 1) + pixb = pixConvertTo1(pixs, recog->threshold); + else + pixb = pixClone(pixs); + + /* Noise removal and splitting of touching characters */ + recogSplitIntoCharacters(recog, pixb, minh, skipsplit, &boxa, &pixa, + debugsplit); + pixDestroy(&pixb); + if (!pixa || (n = pixaGetCount(pixa)) == 0) { + pixaDestroy(&pixa); + boxaDestroy(&boxa); + L_WARNING("nothing found\n", procName); + return 1; + } + + recogIdentifyPixa(recog, pixa, ppixdb); + if (pboxa) + *pboxa = boxa; + else + boxaDestroy(&boxa); + if (ppixa) + *ppixa = pixa; + else + pixaDestroy(&pixa); + return 0; +} + + +/*------------------------------------------------------------------------* + * Segmentation and noise removal * + *------------------------------------------------------------------------*/ +/*! + * \brief recogSplitIntoCharacters() + * + * \param[in] recog + * \param[in] pixs 1 bpp, contains only mostly deskewed text + * \param[in] minh remove shorter components; use 0 for default + * \param[in] skipsplit 1 to skip the splitting step + * \param[out] pboxa character bounding boxes + * \param[out] ppixa character images + * \param[in] debug 1 for results written to pixadb_split + * \return 0 if OK, 1 on error or if no components are returned + * + *
+ * Notes:
+ *      (1) This can be given an image that has an arbitrary number
+ *          of text characters.  It optionally splits connected
+ *          components based on document image decoding in recogDecode().
+ *          The returned pixa includes the boxes from which the
+ *          (possibly split) components are extracted.
+ *      (2) After noise filtering, the resulting components are put in
+ *          row-major (2D) order, and the smaller of overlapping
+ *          components are removed if they satisfy conditions of
+ *          relative size and fractional overlap.
+ *      (3) Note that the splitting function uses unscaled templates
+ *          and does not bother returning the class results and scores.
+ *          These are more accurately found later using the scaled templates.
+ * 
+ */ +l_ok +recogSplitIntoCharacters(L_RECOG *recog, + PIX *pixs, + l_int32 minh, + l_int32 skipsplit, + BOXA **pboxa, + PIXA **ppixa, + l_int32 debug) +{ +static l_int32 ind = 0; +char buf[32]; +l_int32 i, xoff, yoff, empty, maxw, bw, ncomp, scaling; +BOX *box; +BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxad; +BOXAA *baa; +PIX *pix, *pix1, *pix2, *pix3; +PIXA *pixa; + + PROCNAME("recogSplitIntoCharacters"); + + lept_mkdir("lept/recog"); + + if (pboxa) *pboxa = NULL; + if (ppixa) *ppixa = NULL; + if (!pboxa || !ppixa) + return ERROR_INT("&boxa and &pixa not defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!recog->train_done) + return ERROR_INT("training not finished", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (minh <= 0) minh = DefaultMinHeight; + pixZero(pixs, &empty); + if (empty) return 1; + + /* Small vertical close for consolidation. Don't do a horizontal + * closing, because it might join separate characters. */ + pix1 = pixMorphSequence(pixs, "c1.3", 0); + + /* Carefully filter out noise */ + pix2 = recogPreSplittingFilter(recog, pix1, minh, MinFillFactor, debug); + pixDestroy(&pix1); + + /* Get the 8-connected components to be split/identified */ + boxa1 = pixConnComp(pix2, NULL, 8); + pixDestroy(&pix2); + ncomp = boxaGetCount(boxa1); + if (ncomp == 0) { + boxaDestroy(&boxa1); + L_WARNING("all components removed\n", procName); + return 1; + } + + /* Save everything and split the large components */ + boxa2 = boxaCreate(ncomp); + maxw = recog->maxwidth_u + 5; + scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; + pixa = (debug) ? pixaCreate(ncomp) : NULL; + for (i = 0; i < ncomp; i++) { + box = boxaGetBox(boxa1, i, L_CLONE); + boxGetGeometry(box, &xoff, &yoff, &bw, NULL); + /* Treat as one character if it is small, if the images + * have been scaled, or if splitting is not to be run. */ + if (bw <= maxw || scaling || skipsplit) { + boxaAddBox(boxa2, box, L_INSERT); + } else { + pix = pixClipRectangle(pixs, box, NULL); +#if SPLIT_WITH_DID + if (!debug) { + boxa3 = recogDecode(recog, pix, 2, NULL); + } else { + boxa3 = recogDecode(recog, pix, 2, &pix2); + pixaAddPix(pixa, pix2, L_INSERT); + } +#else /* use greedy splitting */ + recogCorrelationBestRow(recog, pix, &boxa3, NULL, NULL, + NULL, debug); + if (debug) { + pix2 = pixConvertTo32(pix); + pixRenderBoxaArb(pix2, boxa3, 2, 255, 0, 0); + pixaAddPix(pixa, pix2, L_INSERT); + } +#endif /* SPLIT_WITH_DID */ + pixDestroy(&pix); + boxDestroy(&box); + if (!boxa3) { + L_ERROR("boxa3 not found for component %d\n", procName, i); + } else { + boxa4 = boxaTransform(boxa3, xoff, yoff, 1.0, 1.0); + boxaJoin(boxa2, boxa4, 0, -1); + boxaDestroy(&boxa3); + boxaDestroy(&boxa4); + } + } + } + boxaDestroy(&boxa1); + if (pixa) { /* debug */ + pix3 = pixaDisplayTiledInColumns(pixa, 1, 1.0, 20, 2); + snprintf(buf, sizeof(buf), "/tmp/lept/recog/decode-%d.png", ind++); + pixWrite(buf, pix3, IFF_PNG); + pixaDestroy(&pixa); + pixDestroy(&pix3); + } + + /* Do a 2D sort on the bounding boxes, and flatten the result to 1D. + * For the 2D sort, to add a box to an existing boxa, we require + * specified minimum vertical overlaps for the first two passes + * of the 2D sort. In pass 1, only components with sufficient + * height can start a new boxa. */ + baa = boxaSort2d(boxa2, NULL, MinOverlap1, MinOverlap2, MinHeightPass1); + boxa3 = boxaaFlattenToBoxa(baa, NULL, L_CLONE); + boxaaDestroy(&baa); + boxaDestroy(&boxa2); + + /* Remove smaller components of overlapping pairs. + * We only remove the small component if the overlap is + * at least half its area and if its area is no more + * than 30% of the area of the large component. Because the + * components are in a flattened 2D sort, we don't need to + * look far ahead in the array to find all overlapping boxes; + * 10 boxes is plenty. */ + boxad = boxaHandleOverlaps(boxa3, L_COMBINE, 10, 0.5, 0.3, NULL); + boxaDestroy(&boxa3); + + /* Extract and save the image pieces from the input image. */ + *ppixa = pixClipRectangles(pixs, boxad); + *pboxa = boxad; + return 0; +} + + +/*------------------------------------------------------------------------* + * Greedy character splitting * + *------------------------------------------------------------------------*/ +/*! + * \brief recogCorrelationBestRow() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs typically of multiple touching characters, 1 bpp + * \param[out] pboxa bounding boxs of best fit character + * \param[out] pnascore [optional] correlation scores + * \param[out] pnaindex [optional] indices of classes + * \param[out] psachar [optional] array of character strings + * \param[in] debug 1 for results written to pixadb_split + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Supervises character matching for (in general) a c.c with
+ *          multiple touching characters.  Finds the best match greedily.
+ *          Rejects small parts that are left over after splitting.
+ *      (2) Matching is to the average, and without character scaling.
+ * 
+ */ +l_ok +recogCorrelationBestRow(L_RECOG *recog, + PIX *pixs, + BOXA **pboxa, + NUMA **pnascore, + NUMA **pnaindex, + SARRAY **psachar, + l_int32 debug) +{ +char *charstr; +l_int32 index, remove, w, h, bx, bw, bxc, bwc, w1, w2, w3; +l_float32 score; +BOX *box, *boxc, *boxtrans, *boxl, *boxr, *boxlt, *boxrt; +BOXA *boxat; +NUMA *nascoret, *naindext, *nasort; +PIX *pixb, *pixc, *pixl, *pixr, *pixdb, *pixd; +PIXA *pixar, *pixadb; +SARRAY *sachart; + +l_int32 iter; + + PROCNAME("recogCorrelationBestRow"); + + if (pnascore) *pnascore = NULL; + if (pnaindex) *pnaindex = NULL; + if (psachar) *psachar = NULL; + if (!pboxa) + return ERROR_INT("&boxa not defined", procName, 1); + *pboxa = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (pixGetWidth(pixs) < recog->minwidth_u - 4) + return ERROR_INT("pixs too narrow", procName, 1); + if (!recog->train_done) + return ERROR_INT("training not finished", procName, 1); + + /* Binarize and crop to foreground if necessary */ + pixb = recogProcessToIdentify(recog, pixs, 0); + + /* Initialize the arrays */ + boxat = boxaCreate(4); + nascoret = numaCreate(4); + naindext = numaCreate(4); + sachart = sarrayCreate(4); + pixadb = (debug) ? pixaCreate(4) : NULL; + + /* Initialize the images remaining to be processed with the input. + * These are stored in pixar, which is used here as a queue, + * on which we only put image fragments that are large enough to + * contain at least one character. */ + pixar = pixaCreate(1); + pixGetDimensions(pixb, &w, &h, NULL); + box = boxCreate(0, 0, w, h); + pixaAddPix(pixar, pixb, L_INSERT); + pixaAddBox(pixar, box, L_INSERT); + + /* Successively split on the best match until nothing is left. + * To be safe, we limit the search to 10 characters. */ + for (iter = 0; iter < 11; iter++) { + if (pixaGetCount(pixar) == 0) + break; + if (iter == 10) { + L_WARNING("more than 10 chars; ending search\n", procName); + break; + } + + /* Pop one from the queue */ + pixaRemovePixAndSave(pixar, 0, &pixc, &boxc); + boxGetGeometry(boxc, &bxc, NULL, &bwc, NULL); + + /* This is a single component; if noise, remove it */ + recogSplittingFilter(recog, pixc, 0, MinFillFactor, &remove, debug); + if (debug) + fprintf(stderr, "iter = %d, removed = %d\n", iter, remove); + if (remove) { + pixDestroy(&pixc); + boxDestroy(&boxc); + continue; + } + + /* Find the best character match */ + if (debug) { + recogCorrelationBestChar(recog, pixc, &box, &score, + &index, &charstr, &pixdb); + pixaAddPix(pixadb, pixdb, L_INSERT); + } else { + recogCorrelationBestChar(recog, pixc, &box, &score, + &index, &charstr, NULL); + } + + /* Find the box in original coordinates, and append + * the results to the arrays. */ + boxtrans = boxTransform(box, bxc, 0, 1.0, 1.0); + boxaAddBox(boxat, boxtrans, L_INSERT); + numaAddNumber(nascoret, score); + numaAddNumber(naindext, index); + sarrayAddString(sachart, charstr, L_INSERT); + + /* Split the current pixc into three regions and save + * each region if it is large enough. */ + boxGetGeometry(box, &bx, NULL, &bw, NULL); + w1 = bx; + w2 = bw; + w3 = bwc - bx - bw; + if (debug) + fprintf(stderr, " w1 = %d, w2 = %d, w3 = %d\n", w1, w2, w3); + if (w1 < recog->minwidth_u - 4) { + if (debug) L_INFO("discarding width %d on left\n", procName, w1); + } else { /* extract and save left region */ + boxl = boxCreate(0, 0, bx + 1, h); + pixl = pixClipRectangle(pixc, boxl, NULL); + boxlt = boxTransform(boxl, bxc, 0, 1.0, 1.0); + pixaAddPix(pixar, pixl, L_INSERT); + pixaAddBox(pixar, boxlt, L_INSERT); + boxDestroy(&boxl); + } + if (w3 < recog->minwidth_u - 4) { + if (debug) L_INFO("discarding width %d on right\n", procName, w3); + } else { /* extract and save left region */ + boxr = boxCreate(bx + bw - 1, 0, w3 + 1, h); + pixr = pixClipRectangle(pixc, boxr, NULL); + boxrt = boxTransform(boxr, bxc, 0, 1.0, 1.0); + pixaAddPix(pixar, pixr, L_INSERT); + pixaAddBox(pixar, boxrt, L_INSERT); + boxDestroy(&boxr); + } + pixDestroy(&pixc); + boxDestroy(&box); + boxDestroy(&boxc); + } + pixaDestroy(&pixar); + + + /* Sort the output results by left-to-right in the boxa */ + *pboxa = boxaSort(boxat, L_SORT_BY_X, L_SORT_INCREASING, &nasort); + if (pnascore) + *pnascore = numaSortByIndex(nascoret, nasort); + if (pnaindex) + *pnaindex = numaSortByIndex(naindext, nasort); + if (psachar) + *psachar = sarraySortByIndex(sachart, nasort); + numaDestroy(&nasort); + boxaDestroy(&boxat); + numaDestroy(&nascoret); + numaDestroy(&naindext); + sarrayDestroy(&sachart); + + /* Final debug output */ + if (debug) { + pixd = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 15, 2); + pixDisplay(pixd, 400, 400); + pixaAddPix(recog->pixadb_split, pixd, L_INSERT); + pixaDestroy(&pixadb); + } + return 0; +} + + +/*! + * \brief recogCorrelationBestChar() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs can be of multiple touching characters, 1 bpp + * \param[out] pbox bounding box of best fit character + * \param[out] pscore correlation score + * \param[out] pindex [optional] index of class + * \param[out] pcharstr [optional] character string of class + * \param[out] ppixdb [optional] debug pix showing input and best fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Basic matching character splitter.  Finds the best match among
+ *          all templates to some region of the image.  This can result
+ *          in splitting the image into two parts.  This is "image decoding"
+ *          without dynamic programming, because we don't use a setwidth
+ *          and compute the best matching score for the entire image.
+ *      (2) Matching is to the average templates, without character scaling.
+ * 
+ */ +l_ok +recogCorrelationBestChar(L_RECOG *recog, + PIX *pixs, + BOX **pbox, + l_float32 *pscore, + l_int32 *pindex, + char **pcharstr, + PIX **ppixdb) +{ +l_int32 i, n, w1, h1, w2, area2, ycent2, delx, dely; +l_int32 bestdelx, bestdely, bestindex; +l_float32 score, bestscore; +BOX *box; +BOXA *boxa; +NUMA *nasum, *namoment; +PIX *pix1, *pix2; + + PROCNAME("recogCorrelationBestChar"); + + if (pindex) *pindex = 0; + if (pcharstr) *pcharstr = NULL; + if (ppixdb) *ppixdb = NULL; + if (pbox) *pbox = NULL; + if (pscore) *pscore = 0.0; + if (!pbox || !pscore) + return ERROR_INT("&box and &score not both defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (!recog->train_done) + return ERROR_INT("training not finished", procName, 1); + + /* Binarize and crop to foreground if necessary. Add padding + * to both the left and right side; this is compensated for + * when reporting the bounding box of the best matched character. */ + pix1 = recogProcessToIdentify(recog, pixs, LeftRightPadding); + pixGetDimensions(pix1, &w1, &h1, NULL); + + /* Compute vertical sum and moment arrays */ + nasum = pixCountPixelsByColumn(pix1); + namoment = pixGetMomentByColumn(pix1, 1); + + /* Do shifted correlation against all averaged templates. */ + n = recog->setsize; + boxa = boxaCreate(n); /* location of best fits for each character */ + bestscore = 0.0; + bestindex = bestdelx = bestdely = 0; + for (i = 0; i < n; i++) { + pix2 = pixaGetPix(recog->pixa_u, i, L_CLONE); + w2 = pixGetWidth(pix2); + /* Note that the slightly expended w1 is typically larger + * than w2 (the template). */ + if (w1 >= w2) { + numaGetIValue(recog->nasum_u, i, &area2); + ptaGetIPt(recog->pta_u, i, NULL, &ycent2); + pixCorrelationBestShift(pix1, pix2, nasum, namoment, area2, ycent2, + recog->maxyshift, recog->sumtab, &delx, + &dely, &score, 1); + if (ppixdb) { + fprintf(stderr, + "Best match template %d: (x,y) = (%d,%d), score = %5.3f\n", + i, delx, dely, score); + } + /* Compensate for padding */ + box = boxCreate(delx - LeftRightPadding, 0, w2, h1); + if (score > bestscore) { + bestscore = score; + bestdelx = delx - LeftRightPadding; + bestdely = dely; + bestindex = i; + } + } else { + box = boxCreate(0, 0, 1, 1); /* placeholder */ + if (ppixdb) + fprintf(stderr, "Component too thin: w1 = %d, w2 = %d\n", + w1, w2); + } + boxaAddBox(boxa, box, L_INSERT); + pixDestroy(&pix2); + } + + *pscore = bestscore; + *pbox = boxaGetBox(boxa, bestindex, L_COPY); + if (pindex) *pindex = bestindex; + if (pcharstr) + recogGetClassString(recog, bestindex, pcharstr); + + if (ppixdb) { + L_INFO("Best match: class %d; shifts (%d, %d)\n", + procName, bestindex, bestdelx, bestdely); + pix2 = pixaGetPix(recog->pixa_u, bestindex, L_CLONE); + *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); + pixDestroy(&pix2); + } + + pixDestroy(&pix1); + boxaDestroy(&boxa); + numaDestroy(&nasum); + numaDestroy(&namoment); + return 0; +} + + +/*! + * \brief pixCorrelationBestShift() + * + * \param[in] pix1 1 bpp, the unknown image; typically larger + * \param[in] pix2 1 bpp, the matching template image) + * \param[in] nasum1 vertical column pixel sums for pix1 + * \param[in] namoment1 vertical column first moment of pixels for pix1 + * \param[in] area2 number of on pixels in pix2 + * \param[in] ycent2 y component of centroid of pix2 + * \param[in] maxyshift max y shift of pix2 around the location where + * the centroids of pix2 and a windowed part of pix1 + * are vertically aligned + * \param[in] tab8 [optional] sum tab for ON pixels in byte; + * can be NULL + * \param[out] pdelx [optional] best x shift of pix2 relative to pix1 + * \param[out] pdely [optional] best y shift of pix2 relative to pix1 + * \param[out] pscore [optional] maximum score found; can be NULL + * \param[in] debugflag <= 0 to skip; positive to generate output; + * the integer is used to label the debug image. + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This maximizes the correlation score between two 1 bpp images,
+ *          one of which is typically wider.  In a typical example,
+ *          pix1 is a bitmap of 2 or more touching characters and pix2 is
+ *          a single character template.  This finds the location of pix2
+ *          that gives the largest correlation.
+ *      (2) The windowed area of fg pixels and windowed first moment
+ *          in the y direction are computed from the input sum and moment
+ *          column arrays, %nasum1 and %namoment1
+ *      (3) This is a brute force operation.  We compute the correlation
+ *          at every x shift for which pix2 fits entirely within pix1,
+ *          and where the centroid of pix2 is aligned, within +-maxyshift,
+ *          with the centroid of a window of pix1 of the same width.
+ *          The correlation is taken over the full height of pix1.
+ *          This can be made more efficient.
+ * 
+ */ +static l_int32 +pixCorrelationBestShift(PIX *pix1, + PIX *pix2, + NUMA *nasum1, + NUMA *namoment1, + l_int32 area2, + l_int32 ycent2, + l_int32 maxyshift, + l_int32 *tab8, + l_int32 *pdelx, + l_int32 *pdely, + l_float32 *pscore, + l_int32 debugflag) +{ +l_int32 w1, w2, h1, h2, i, j, nx, shifty, delx, dely; +l_int32 sum, moment, count; +l_int32 *tab, *area1, *arraysum, *arraymoment; +l_float32 maxscore, score; +l_float32 *ycent1; +FPIX *fpix; +PIX *pixt, *pixt1, *pixt2; + + PROCNAME("pixCorrelationBestShift"); + + if (pdelx) *pdelx = 0; + if (pdely) *pdely = 0; + if (pscore) *pscore = 0.0; + if (!pix1 || pixGetDepth(pix1) != 1) + return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); + if (!pix2 || pixGetDepth(pix2) != 1) + return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); + if (!nasum1 || !namoment1) + return ERROR_INT("nasum1 and namoment1 not both defined", procName, 1); + if (area2 <= 0 || ycent2 <= 0) + return ERROR_INT("area2 and ycent2 must be > 0", procName, 1); + + /* If pix1 (the unknown image) is narrower than pix2, + * don't bother to try the match. pix1 is already padded with + * 2 pixels on each side. */ + pixGetDimensions(pix1, &w1, &h1, NULL); + pixGetDimensions(pix2, &w2, &h2, NULL); + if (w1 < w2) { + if (debugflag > 0) { + L_INFO("skipping match with w1 = %d and w2 = %d\n", + procName, w1, w2); + } + return 0; + } + nx = w1 - w2 + 1; + + if (debugflag > 0) + fpix = fpixCreate(nx, 2 * maxyshift + 1); + if (!tab8) + tab = makePixelSumTab8(); + else + tab = tab8; + + /* Set up the arrays for area1 and ycent1. We have to do this + * for each template (pix2) because the window width is w2. */ + area1 = (l_int32 *)LEPT_CALLOC(nx, sizeof(l_int32)); + ycent1 = (l_float32 *)LEPT_CALLOC(nx, sizeof(l_int32)); + arraysum = numaGetIArray(nasum1); + arraymoment = numaGetIArray(namoment1); + for (i = 0, sum = 0, moment = 0; i < w2; i++) { + sum += arraysum[i]; + moment += arraymoment[i]; + } + for (i = 0; i < nx - 1; i++) { + area1[i] = sum; + ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; + sum += arraysum[w2 + i] - arraysum[i]; + moment += arraymoment[w2 + i] - arraymoment[i]; + } + area1[nx - 1] = sum; + ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; + + /* Find the best match location for pix2. At each location, + * to insure that pixels are ON only within the intersection of + * pix and the shifted pix2: + * (1) Start with pixt cleared and equal in size to pix1. + * (2) Blit the shifted pix2 onto pixt. Then all ON pixels + * are within the intersection of pix1 and the shifted pix2. + * (3) AND pix1 with pixt. */ + pixt = pixCreate(w2, h1, 1); + maxscore = 0; + delx = 0; + dely = 0; /* amount to shift pix2 relative to pix1 to get alignment */ + for (i = 0; i < nx; i++) { + shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); + for (j = -maxyshift; j <= maxyshift; j++) { + pixClearAll(pixt); + pixRasterop(pixt, 0, shifty + j, w2, h2, PIX_SRC, pix2, 0, 0); + pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); + pixCountPixels(pixt, &count, tab); + score = (l_float32)count * (l_float32)count / + ((l_float32)area1[i] * (l_float32)area2); + if (score > maxscore) { + maxscore = score; + delx = i; + dely = shifty + j; + } + + if (debugflag > 0) + fpixSetPixel(fpix, i, maxyshift + j, 1000.0 * score); + } + } + + if (debugflag > 0) { + lept_mkdir("lept/recog"); + char buf[128]; + pixt1 = fpixDisplayMaxDynamicRange(fpix); + pixt2 = pixExpandReplicate(pixt1, 5); + snprintf(buf, sizeof(buf), "/tmp/lept/recog/junkbs_%d.png", debugflag); + pixWrite(buf, pixt2, IFF_PNG); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + fpixDestroy(&fpix); + } + + if (pdelx) *pdelx = delx; + if (pdely) *pdely = dely; + if (pscore) *pscore = maxscore; + if (!tab8) LEPT_FREE(tab); + LEPT_FREE(area1); + LEPT_FREE(ycent1); + LEPT_FREE(arraysum); + LEPT_FREE(arraymoment); + pixDestroy(&pixt); + return 0; +} + + +/*------------------------------------------------------------------------* + * Low-level identification * + *------------------------------------------------------------------------*/ +/*! + * \brief recogIdentifyPixa() + * + * \param[in] recog + * \param[in] pixa of 1 bpp images to match + * \param[out] ppixdb [optional] pix showing inputs and best fits + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This should be called by recogIdentifyMuliple(), which
+ *          binarizes and splits characters before sending %pixa here.
+ *      (2) This calls recogIdentifyPix(), which does the same operation
+ *          on each pix in %pixa, and optionally returns the arrays
+ *          of results (scores, class index and character string)
+ *          for the best correlation match.
+ * 
+ */ +l_ok +recogIdentifyPixa(L_RECOG *recog, + PIXA *pixa, + PIX **ppixdb) +{ +char *text; +l_int32 i, n, fail, index, depth; +l_float32 score; +PIX *pix1, *pix2, *pix3; +PIXA *pixa1; +L_RCH *rch; + + PROCNAME("recogIdentifyPixa"); + + if (ppixdb) *ppixdb = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + /* Run the recognizer on the set of images. This writes + * the text string into each pix in pixa. */ + n = pixaGetCount(pixa); + rchaDestroy(&recog->rcha); + recog->rcha = rchaCreate(); + pixa1 = (ppixdb) ? pixaCreate(n) : NULL; + depth = 1; + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = NULL; + fail = FALSE; + if (!ppixdb) + fail = recogIdentifyPix(recog, pix1, NULL); + else + fail = recogIdentifyPix(recog, pix1, &pix2); + if (fail) + recogSkipIdentify(recog); + if ((rch = recog->rch) == NULL) { + L_ERROR("rch not found for char %d\n", procName, i); + pixDestroy(&pix1); + pixDestroy(&pix2); + continue; + } + rchExtract(rch, NULL, NULL, &text, NULL, NULL, NULL, NULL); + pixSetText(pix1, text); + LEPT_FREE(text); + if (ppixdb) { + rchExtract(rch, &index, &score, NULL, NULL, NULL, NULL, NULL); + pix3 = recogShowMatch(recog, pix2, NULL, NULL, index, score); + if (i == 0) depth = pixGetDepth(pix3); + pixaAddPix(pixa1, pix3, L_INSERT); + pixDestroy(&pix2); + } + transferRchToRcha(rch, recog->rcha); + pixDestroy(&pix1); + } + + /* Package the images for debug */ + if (ppixdb) { + *ppixdb = pixaDisplayTiledInRows(pixa1, depth, 2500, 1.0, 0, 20, 1); + pixaDestroy(&pixa1); + } + + return 0; +} + + +/*! + * \brief recogIdentifyPix() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs of a single character, 1 bpp + * \param[out] ppixdb [optional] debug pix showing input and best fit + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Basic recognition function for a single character.
+ *      (2) If templ_use == L_USE_ALL_TEMPLATES, which is the default
+ *          situation, matching is attempted to every bitmap in the recog,
+ *          and the identify of the best match is returned.
+ *      (3) For finding outliers, templ_use == L_USE_AVERAGE_TEMPLATES, and
+ *          matching is only attemplted to the averaged bitmaps.  For this
+ *          case, the index of the bestsample is meaningless (0 is returned
+ *          if requested).
+ *      (4) The score is related to the confidence (probability of correct
+ *          identification), in that a higher score is correlated with
+ *          a higher probability.  However, the actual relation between
+ *          the correlation (score) and the probability is not known;
+ *          we call this a "score" because "confidence" can be misinterpreted
+ *          as an actual probability.
+ * 
+ */ +l_ok +recogIdentifyPix(L_RECOG *recog, + PIX *pixs, + PIX **ppixdb) +{ +char *text; +l_int32 i, j, n, bestindex, bestsample, area1, area2; +l_int32 shiftx, shifty, bestdelx, bestdely, bestwidth, maxyshift; +l_float32 x1, y1, x2, y2, delx, dely, score, maxscore; +NUMA *numa; +PIX *pix0, *pix1, *pix2; +PIXA *pixa; +PTA *pta; + + PROCNAME("recogIdentifyPix"); + + if (ppixdb) *ppixdb = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + /* Do the averaging if required and not yet done. */ + if (recog->templ_use == L_USE_AVERAGE_TEMPLATES && !recog->ave_done) { + recogAverageSamples(&recog, 0); + if (!recog) + return ERROR_INT("averaging failed", procName, 1); + } + + /* Binarize and crop to foreground if necessary */ + if ((pix0 = recogProcessToIdentify(recog, pixs, 0)) == NULL) + return ERROR_INT("no fg pixels in pix0", procName, 1); + + /* Optionally scale and/or convert to fixed stroke width */ + pix1 = recogModifyTemplate(recog, pix0); + pixDestroy(&pix0); + if (!pix1) + return ERROR_INT("no fg pixels in pix1", procName, 1); + + /* Do correlation at all positions within +-maxyshift of + * the nominal centroid alignment. */ + pixCountPixels(pix1, &area1, recog->sumtab); + pixCentroid(pix1, recog->centtab, recog->sumtab, &x1, &y1); + bestindex = bestsample = bestdelx = bestdely = bestwidth = 0; + maxscore = 0.0; + maxyshift = recog->maxyshift; + if (recog->templ_use == L_USE_AVERAGE_TEMPLATES) { + for (i = 0; i < recog->setsize; i++) { + numaGetIValue(recog->nasum, i, &area2); + if (area2 == 0) continue; /* no template available */ + pix2 = pixaGetPix(recog->pixa, i, L_CLONE); + ptaGetPt(recog->pta, i, &x2, &y2); + delx = x1 - x2; + dely = y1 - y2; + for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { + for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { + pixCorrelationScoreSimple(pix1, pix2, area1, area2, + delx + shiftx, dely + shifty, + 5, 5, recog->sumtab, &score); + if (score > maxscore) { + bestindex = i; + bestdelx = delx + shiftx; + bestdely = dely + shifty; + maxscore = score; + } + } + } + pixDestroy(&pix2); + } + } else { /* use all the samples */ + for (i = 0; i < recog->setsize; i++) { + pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); + n = pixaGetCount(pixa); + if (n == 0) { + pixaDestroy(&pixa); + continue; + } + numa = numaaGetNuma(recog->naasum, i, L_CLONE); + pta = ptaaGetPta(recog->ptaa, i, L_CLONE); + for (j = 0; j < n; j++) { + pix2 = pixaGetPix(pixa, j, L_CLONE); + numaGetIValue(numa, j, &area2); + ptaGetPt(pta, j, &x2, &y2); + delx = x1 - x2; + dely = y1 - y2; + for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { + for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { + pixCorrelationScoreSimple(pix1, pix2, area1, area2, + delx + shiftx, dely + shifty, + 5, 5, recog->sumtab, &score); + if (score > maxscore) { + bestindex = i; + bestsample = j; + bestdelx = delx + shiftx; + bestdely = dely + shifty; + maxscore = score; + bestwidth = pixGetWidth(pix2); + } + } + } + pixDestroy(&pix2); + } + pixaDestroy(&pixa); + numaDestroy(&numa); + ptaDestroy(&pta); + } + } + + /* Package up the results */ + recogGetClassString(recog, bestindex, &text); + rchDestroy(&recog->rch); + recog->rch = rchCreate(bestindex, maxscore, text, bestsample, + bestdelx, bestdely, bestwidth); + + if (ppixdb) { + if (recog->templ_use == L_USE_AVERAGE_TEMPLATES) { + L_INFO("Best match: str %s; class %d; sh (%d, %d); score %5.3f\n", + procName, text, bestindex, bestdelx, bestdely, maxscore); + pix2 = pixaGetPix(recog->pixa, bestindex, L_CLONE); + } else { /* L_USE_ALL_TEMPLATES */ + L_INFO("Best match: str %s; sample %d in class %d; score %5.3f\n", + procName, text, bestsample, bestindex, maxscore); + if (maxyshift > 0 && (L_ABS(bestdelx) > 0 || L_ABS(bestdely) > 0)) { + L_INFO(" Best shift: (%d, %d)\n", + procName, bestdelx, bestdely); + } + pix2 = pixaaGetPix(recog->pixaa, bestindex, bestsample, L_CLONE); + } + *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); + pixDestroy(&pix2); + } + + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief recogSkipIdentify() + * + * \param[in] recog + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This just writes a "dummy" result with 0 score and empty
+ *          string id into the rch.
+ * 
+ */ +l_ok +recogSkipIdentify(L_RECOG *recog) +{ + PROCNAME("recogSkipIdentify"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + /* Package up placeholder results */ + rchDestroy(&recog->rch); + recog->rch = rchCreate(0, 0.0, stringNew(""), 0, 0, 0, 0); + return 0; +} + + +/*------------------------------------------------------------------------* + * Operations for handling identification results * + *------------------------------------------------------------------------*/ +/*! + * \brief rchaCreate() + * + * Return: 0 if OK, 1 on error + * + * Notes: + * (1) Be sure to destroy any existing rcha before assigning this. + */ +static L_RCHA * +rchaCreate() +{ +L_RCHA *rcha; + + rcha = (L_RCHA *)LEPT_CALLOC(1, sizeof(L_RCHA)); + rcha->naindex = numaCreate(0); + rcha->nascore = numaCreate(0); + rcha->satext = sarrayCreate(0); + rcha->nasample = numaCreate(0); + rcha->naxloc = numaCreate(0); + rcha->nayloc = numaCreate(0); + rcha->nawidth = numaCreate(0); + return rcha; +} + + +/*! + * \brief rchaDestroy() + * + * \param[in,out] prcha to be nulled + */ +void +rchaDestroy(L_RCHA **prcha) +{ +L_RCHA *rcha; + + PROCNAME("rchaDestroy"); + + if (prcha == NULL) { + L_WARNING("&rcha is null!\n", procName); + return; + } + if ((rcha = *prcha) == NULL) + return; + + numaDestroy(&rcha->naindex); + numaDestroy(&rcha->nascore); + sarrayDestroy(&rcha->satext); + numaDestroy(&rcha->nasample); + numaDestroy(&rcha->naxloc); + numaDestroy(&rcha->nayloc); + numaDestroy(&rcha->nawidth); + LEPT_FREE(rcha); + *prcha = NULL; + return; +} + + +/*! + * \brief rchCreate() + * + * \param[in] index index of best template + * \param[in] score correlation score of best template + * \param[in] text character string of best template + * \param[in] sample index of best sample; -1 if averages are used + * \param[in] xloc x-location of template: delx + shiftx + * \param[in] yloc y-location of template: dely + shifty + * \param[in] width width of best template + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Be sure to destroy any existing rch before assigning this.
+ *      (2) This stores the text string, not a copy of it, so the
+ *          caller must not destroy the string.
+ * 
+ */ +static L_RCH * +rchCreate(l_int32 index, + l_float32 score, + char *text, + l_int32 sample, + l_int32 xloc, + l_int32 yloc, + l_int32 width) +{ +L_RCH *rch; + + rch = (L_RCH *)LEPT_CALLOC(1, sizeof(L_RCH)); + rch->index = index; + rch->score = score; + rch->text = text; + rch->sample = sample; + rch->xloc = xloc; + rch->yloc = yloc; + rch->width = width; + return rch; +} + + +/*! + * \brief rchDestroy() + * + * \param[in,out] prch to be nulled + */ +void +rchDestroy(L_RCH **prch) +{ +L_RCH *rch; + + PROCNAME("rchDestroy"); + + if (prch == NULL) { + L_WARNING("&rch is null!\n", procName); + return; + } + if ((rch = *prch) == NULL) + return; + LEPT_FREE(rch->text); + LEPT_FREE(rch); + *prch = NULL; + return; +} + + +/*! + * \brief rchaExtract() + * + * \param[in] rcha + * \param[out] pnaindex [optional] indices of best templates + * \param[out] pnascore [optional] correl scores of best templates + * \param[out] psatext [optional] character strings of best templates + * \param[out] pnasample [optional] indices of best samples + * \param[out] pnaxloc [optional] x-locations of templates + * \param[out] pnayloc [optional] y-locations of templates + * \param[out] pnawidth [optional] widths of best templates + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This returns clones of the number and string arrays.  They must
+ *          be destroyed by the caller.
+ * 
+ */ +l_ok +rchaExtract(L_RCHA *rcha, + NUMA **pnaindex, + NUMA **pnascore, + SARRAY **psatext, + NUMA **pnasample, + NUMA **pnaxloc, + NUMA **pnayloc, + NUMA **pnawidth) +{ + PROCNAME("rchaExtract"); + + if (pnaindex) *pnaindex = NULL; + if (pnascore) *pnascore = NULL; + if (psatext) *psatext = NULL; + if (pnasample) *pnasample = NULL; + if (pnaxloc) *pnaxloc = NULL; + if (pnayloc) *pnayloc = NULL; + if (pnawidth) *pnawidth = NULL; + if (!rcha) + return ERROR_INT("rcha not defined", procName, 1); + + if (pnaindex) *pnaindex = numaClone(rcha->naindex); + if (pnascore) *pnascore = numaClone(rcha->nascore); + if (psatext) *psatext = sarrayClone(rcha->satext); + if (pnasample) *pnasample = numaClone(rcha->nasample); + if (pnaxloc) *pnaxloc = numaClone(rcha->naxloc); + if (pnayloc) *pnayloc = numaClone(rcha->nayloc); + if (pnawidth) *pnawidth = numaClone(rcha->nawidth); + return 0; +} + + +/*! + * \brief rchExtract() + * + * \param[in] rch + * \param[out] pindex [optional] index of best template + * \param[out] pscore [optional] correlation score of best template + * \param[out] ptext [optional] character string of best template + * \param[out] psample [optional] index of best sample + * \param[out] pxloc [optional] x-location of template + * \param[out] pyloc [optional] y-location of template + * \param[out] pwidth [optional] width of best template + * \return 0 if OK, 1 on error + */ +l_ok +rchExtract(L_RCH *rch, + l_int32 *pindex, + l_float32 *pscore, + char **ptext, + l_int32 *psample, + l_int32 *pxloc, + l_int32 *pyloc, + l_int32 *pwidth) +{ + PROCNAME("rchExtract"); + + if (pindex) *pindex = 0; + if (pscore) *pscore = 0.0; + if (ptext) *ptext = NULL; + if (psample) *psample = 0; + if (pxloc) *pxloc = 0; + if (pyloc) *pyloc = 0; + if (pwidth) *pwidth = 0; + if (!rch) + return ERROR_INT("rch not defined", procName, 1); + + if (pindex) *pindex = rch->index; + if (pscore) *pscore = rch->score; + if (ptext) *ptext = stringNew(rch->text); /* new string: owned by caller */ + if (psample) *psample = rch->sample; + if (pxloc) *pxloc = rch->xloc; + if (pyloc) *pyloc = rch->yloc; + if (pwidth) *pwidth = rch->width; + return 0; +} + + +/*! + * \brief transferRchToRcha() + * + * \param[in] rch source of data + * \param[in] rcha append to arrays in this destination + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is used to transfer the results of a single character
+ *          identification to an rcha array for the array of characters.
+ * 
+ */ +static l_int32 +transferRchToRcha(L_RCH *rch, + L_RCHA *rcha) +{ + + PROCNAME("transferRchToRcha"); + + if (!rch) + return ERROR_INT("rch not defined", procName, 1); + if (!rcha) + return ERROR_INT("rcha not defined", procName, 1); + + numaAddNumber(rcha->naindex, rch->index); + numaAddNumber(rcha->nascore, rch->score); + sarrayAddString(rcha->satext, rch->text, L_COPY); + numaAddNumber(rcha->nasample, rch->sample); + numaAddNumber(rcha->naxloc, rch->xloc); + numaAddNumber(rcha->nayloc, rch->yloc); + numaAddNumber(rcha->nawidth, rch->width); + return 0; +} + + +/*------------------------------------------------------------------------* + * Preprocessing and filtering * + *------------------------------------------------------------------------*/ +/*! + * \brief recogProcessToIdentify() + * + * \param[in] recog with LUT's pre-computed + * \param[in] pixs typ. single character, possibly d > 1 and uncropped + * \param[in] pad extra pixels added to left and right sides + * \return pixd 1 bpp, clipped to foreground, or NULL if there + * are no fg pixels or on error. + * + *
+ * Notes:
+ *      (1) This is a lightweight operation to insure that the input
+ *          image is 1 bpp, properly cropped, and padded on each side.
+ *          If bpp > 1, the image is thresholded.
+ * 
+ */ +PIX * +recogProcessToIdentify(L_RECOG *recog, + PIX *pixs, + l_int32 pad) +{ +l_int32 canclip; +PIX *pix1, *pix2, *pixd; + + PROCNAME("recogProcessToIdentify"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (pixGetDepth(pixs) != 1) + pix1 = pixThresholdToBinary(pixs, recog->threshold); + else + pix1 = pixClone(pixs); + pixTestClipToForeground(pix1, &canclip); + if (canclip) + pixClipToForeground(pix1, &pix2, NULL); + else + pix2 = pixClone(pix1); + pixDestroy(&pix1); + if (!pix2) + return (PIX *)ERROR_PTR("no foreground pixels", procName, NULL); + + pixd = pixAddBorderGeneral(pix2, pad, pad, 0, 0, 0); + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief recogPreSplittingFilter() + * + * \param[in] recog + * \param[in] pixs 1 bpp, many connected components + * \param[in] minh minimum height of components to be retained + * \param[in] minaf minimum area fraction (|fg|/(w*h)) to be retained + * \param[in] debug 1 to output indicator arrays + * \return pixd with filtered components removed or NULL on error + */ +static PIX * +recogPreSplittingFilter(L_RECOG *recog, + PIX *pixs, + l_int32 minh, + l_float32 minaf, + l_int32 debug) +{ +l_int32 scaling, minsplitw, maxsplith, maxasp; +BOXA *boxas; +NUMA *naw, *nah, *na1, *na1c, *na2, *na3, *na4, *na5, *na6, *na7; +PIX *pixd; +PIXA *pixas; + + PROCNAME("recogPreSplittingFilter"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* If there is scaling, do not remove components based on the + * values of min_splitw and max_splith. */ + scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; + minsplitw = (scaling) ? 1 : recog->min_splitw - 3; + maxsplith = (scaling) ? 150 : recog->max_splith; + maxasp = recog->max_wh_ratio; + + /* Generate an indicator array of connected components to remove: + * short stuff + * tall stuff + * components with large width/height ratio + * components with small area fill fraction */ + boxas = pixConnComp(pixs, &pixas, 8); + pixaFindDimensions(pixas, &naw, &nah); + na1 = numaMakeThresholdIndicator(naw, minsplitw, L_SELECT_IF_LT); + na1c = numaCopy(na1); + na2 = numaMakeThresholdIndicator(nah, minh, L_SELECT_IF_LT); + na3 = numaMakeThresholdIndicator(nah, maxsplith, L_SELECT_IF_GT); + na4 = pixaFindWidthHeightRatio(pixas); + na5 = numaMakeThresholdIndicator(na4, maxasp, L_SELECT_IF_GT); + na6 = pixaFindAreaFraction(pixas); + na7 = numaMakeThresholdIndicator(na6, minaf, L_SELECT_IF_LT); + numaLogicalOp(na1, na1, na2, L_UNION); + numaLogicalOp(na1, na1, na3, L_UNION); + numaLogicalOp(na1, na1, na5, L_UNION); + numaLogicalOp(na1, na1, na7, L_UNION); + pixd = pixCopy(NULL, pixs); + pixRemoveWithIndicator(pixd, pixas, na1); + if (debug) + l_showIndicatorSplitValues(na1c, na2, na3, na5, na7, na1); + numaDestroy(&naw); + numaDestroy(&nah); + numaDestroy(&na1); + numaDestroy(&na1c); + numaDestroy(&na2); + numaDestroy(&na3); + numaDestroy(&na4); + numaDestroy(&na5); + numaDestroy(&na6); + numaDestroy(&na7); + boxaDestroy(&boxas); + pixaDestroy(&pixas); + return pixd; +} + + +/*! + * \brief recogSplittingFilter() + * + * \param[in] recog + * \param[in] pixs 1 bpp, single connected component + * \param[in] minh minimum height of component; 0 for default + * \param[in] minaf minimum area fraction (|fg|/(w*h)) to be retained + * \param[out] premove 0 to save, 1 to remove + * \param[in] debug 1 to output indicator arrays + * \return 0 if OK, 1 on error + */ +static l_int32 +recogSplittingFilter(L_RECOG *recog, + PIX *pixs, + l_int32 minh, + l_float32 minaf, + l_int32 *premove, + l_int32 debug) +{ +l_int32 w, h; +l_float32 aspratio, fract; + + PROCNAME("recogSplittingFilter"); + + if (!premove) + return ERROR_INT("&remove not defined", procName, 1); + *premove = 0; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (minh <= 0) minh = DefaultMinHeight; + + /* Remove from further consideration: + * small stuff + * components with large width/height ratio + * components with small area fill fraction */ + pixGetDimensions(pixs, &w, &h, NULL); + if (w < recog->min_splitw) { + if (debug) L_INFO("w = %d < %d\n", procName, w, recog->min_splitw); + *premove = 1; + return 0; + } + if (h < minh) { + if (debug) L_INFO("h = %d < %d\n", procName, h, minh); + *premove = 1; + return 0; + } + aspratio = (l_float32)w / (l_float32)h; + if (aspratio > recog->max_wh_ratio) { + if (debug) L_INFO("w/h = %5.3f too large\n", procName, aspratio); + *premove = 1; + return 0; + } + pixFindAreaFraction(pixs, recog->sumtab, &fract); + if (fract < minaf) { + if (debug) L_INFO("area fill fract %5.3f < %5.3f\n", + procName, fract, minaf); + *premove = 1; + return 0; + } + + return 0; +} + + +/*------------------------------------------------------------------------* + * Postprocessing * + *------------------------------------------------------------------------*/ +/*! + * \brief recogExtractNumbers() + * + * \param[in] recog + * \param[in] boxas location of components + * \param[in] scorethresh min score for which we accept a component + * \param[in] spacethresh max horizontal distance allowed between digits; + * use -1 for default + * \param[out] pbaa [optional] bounding boxes of identified numbers + * \param[out] pnaa [optional] scores of identified digits + * \return sa of identified numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) This extracts digit data after recogaIdentifyMultiple() or
+ *          lower-level identification has taken place.
+ *      (2) Each string in the returned sa contains a sequence of ascii
+ *          digits in a number.
+ *      (3) The horizontal distance between boxes (limited by %spacethresh)
+ *          is the negative of the horizontal overlap.
+ *      (4) Components with a score less than %scorethresh, which may
+ *          be hyphens or other small characters, will signal the
+ *          end of the current sequence of digits in the number.  A typical
+ *          value for %scorethresh is 0.60.
+ *      (5) We allow two digits to be combined if these conditions apply:
+ *            (a) the first is to the left of the second
+ *            (b) the second has a horizontal separation less than %spacethresh
+ *            (c) the vertical overlap >= 0 (vertical separation < 0)
+ *            (d) both have a score that exceeds %scorethresh
+ *      (6) Each numa in the optionally returned naa contains the digit
+ *          scores of a number.  Each boxa in the optionally returned baa
+ *          contains the bounding boxes of the digits in the number.
+ * 
+ */ +SARRAY * +recogExtractNumbers(L_RECOG *recog, + BOXA *boxas, + l_float32 scorethresh, + l_int32 spacethresh, + BOXAA **pbaa, + NUMAA **pnaa) +{ +char *str, *text; +l_int32 i, n, x1, x2, h_ovl, v_ovl, h_sep, v_sep; +l_float32 score; +BOX *box, *prebox; +BOXA *ba; +BOXAA *baa; +NUMA *nascore, *na; +NUMAA *naa; +SARRAY *satext, *sa, *saout; + + PROCNAME("recogExtractNumbers"); + + if (pbaa) *pbaa = NULL; + if (pnaa) *pnaa = NULL; + if (!recog || !recog->rcha) + return (SARRAY *)ERROR_PTR("recog and rcha not both defined", + procName, NULL); + if (!boxas) + return (SARRAY *)ERROR_PTR("boxas not defined", procName, NULL); + + if (spacethresh < 0) + spacethresh = L_MAX(recog->maxheight_u, 20); + rchaExtract(recog->rcha, NULL, &nascore, &satext, NULL, NULL, NULL, NULL); + if (!nascore || !satext) { + numaDestroy(&nascore); + sarrayDestroy(&satext); + return (SARRAY *)ERROR_PTR("nascore and satext not both returned", + procName, NULL); + } + + saout = sarrayCreate(0); + naa = numaaCreate(0); + baa = boxaaCreate(0); + prebox = NULL; + n = numaGetCount(nascore); + for (i = 0; i < n; i++) { + numaGetFValue(nascore, i, &score); + text = sarrayGetString(satext, i, L_NOCOPY); + if (prebox == NULL) { /* no current run */ + if (score < scorethresh) { + continue; + } else { /* start a number run */ + sa = sarrayCreate(0); + ba = boxaCreate(0); + na = numaCreate(0); + sarrayAddString(sa, text, L_COPY); + prebox = boxaGetBox(boxas, i, L_CLONE); + boxaAddBox(ba, prebox, L_COPY); + numaAddNumber(na, score); + } + } else { /* in a current number run */ + box = boxaGetBox(boxas, i, L_CLONE); + boxGetGeometry(prebox, &x1, NULL, NULL, NULL); + boxGetGeometry(box, &x2, NULL, NULL, NULL); + boxOverlapDistance(box, prebox, &h_ovl, &v_ovl); + h_sep = -h_ovl; + v_sep = -v_ovl; + boxDestroy(&prebox); + if (x1 < x2 && h_sep <= spacethresh && + v_sep < 0 && score >= scorethresh) { /* add to number */ + sarrayAddString(sa, text, L_COPY); + boxaAddBox(ba, box, L_COPY); + numaAddNumber(na, score); + prebox = box; + } else { /* save the completed number */ + str = sarrayToString(sa, 0); + sarrayAddString(saout, str, L_INSERT); + sarrayDestroy(&sa); + boxaaAddBoxa(baa, ba, L_INSERT); + numaaAddNuma(naa, na, L_INSERT); + boxDestroy(&box); + if (score >= scorethresh) { /* start a new number */ + i--; + continue; + } + } + } + } + + if (prebox) { /* save the last number */ + str = sarrayToString(sa, 0); + sarrayAddString(saout, str, L_INSERT); + boxaaAddBoxa(baa, ba, L_INSERT); + numaaAddNuma(naa, na, L_INSERT); + sarrayDestroy(&sa); + boxDestroy(&prebox); + } + + numaDestroy(&nascore); + sarrayDestroy(&satext); + if (sarrayGetCount(saout) == 0) { + sarrayDestroy(&saout); + boxaaDestroy(&baa); + numaaDestroy(&naa); + L_INFO("saout has no identified text\n", procName); + return NULL; + } + + if (pbaa) + *pbaa = baa; + else + boxaaDestroy(&baa); + if (pnaa) + *pnaa = naa; + else + numaaDestroy(&naa); + return saout; +} + +/*! + * \brief showExtractNumbers() + * + * \param[in] pixs input 1 bpp image + * \param[in] sa recognized text strings + * \param[in] baa boxa array for location of characters in each string + * \param[in] naa numa array for scores of characters in each string + * \param[out] ppixdb [optional] input pixs with identified chars outlined + * \return pixa of identified strings with text and scores, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a debugging routine on digit identification; e.g.:
+ *            recogIdentifyMultiple(recog, pixs, 0, 1, &boxa, NULL, NULL, 0);
+ *            sa = recogExtractNumbers(recog, boxa, 0.8, -1, &baa, &naa);
+ *            pixa = showExtractNumbers(pixs, sa, baa, naa, NULL);
+ * 
+ */ +PIXA * +showExtractNumbers(PIX *pixs, + SARRAY *sa, + BOXAA *baa, + NUMAA *naa, + PIX **ppixdb) +{ +char buf[128]; +char *textstr, *scorestr; +l_int32 i, j, n, nchar, len; +l_float32 score; +L_BMF *bmf; +BOX *box1, *box2; +BOXA *ba; +NUMA *na; +PIX *pix1, *pix2, *pix3, *pix4; +PIXA *pixa; + + PROCNAME("showExtractNumbers"); + + if (ppixdb) *ppixdb = NULL; + if (!pixs) + return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); + if (!sa) + return (PIXA *)ERROR_PTR("sa not defined", procName, NULL); + if (!baa) + return (PIXA *)ERROR_PTR("baa not defined", procName, NULL); + if (!naa) + return (PIXA *)ERROR_PTR("naa not defined", procName, NULL); + + n = sarrayGetCount(sa); + pixa = pixaCreate(n); + bmf = bmfCreate(NULL, 6); + if (ppixdb) *ppixdb = pixConvertTo8(pixs, 1); + for (i = 0; i < n; i++) { + textstr = sarrayGetString(sa, i, L_NOCOPY); + ba = boxaaGetBoxa(baa, i, L_CLONE); + na = numaaGetNuma(naa, i, L_CLONE); + boxaGetExtent(ba, NULL, NULL, &box1); + box2 = boxAdjustSides(NULL, box1, -5, 5, -5, 5); + if (ppixdb) pixRenderBoxArb(*ppixdb, box2, 3, 255, 0, 0); + pix1 = pixClipRectangle(pixs, box1, NULL); + len = strlen(textstr) + 1; + pix2 = pixAddBlackOrWhiteBorder(pix1, 14 * len, 14 * len, + 5, 3, L_SET_WHITE); + pix3 = pixConvertTo8(pix2, 1); + nchar = numaGetCount(na); + scorestr = NULL; + for (j = 0; j < nchar; j++) { + numaGetFValue(na, j, &score); + snprintf(buf, sizeof(buf), "%d", (l_int32)(100 * score)); + stringJoinIP(&scorestr, buf); + if (j < nchar - 1) stringJoinIP(&scorestr, ","); + } + snprintf(buf, sizeof(buf), "%s: %s\n", textstr, scorestr); + pix4 = pixAddTextlines(pix3, bmf, buf, 0xff000000, L_ADD_BELOW); + pixaAddPix(pixa, pix4, L_INSERT); + boxDestroy(&box1); + boxDestroy(&box2); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + boxaDestroy(&ba); + numaDestroy(&na); + LEPT_FREE(scorestr); + } + + bmfDestroy(&bmf); + return pixa; +} + + +/*------------------------------------------------------------------------* + * Static debug helper * + *------------------------------------------------------------------------*/ +/*! + * \brief l_showIndicatorSplitValues() + * + * \param[in] na1, na2, na3, na4, na5, na6 6 indicator array + * + *
+ * Notes:
+ *      (1) The values indicate that specific criteria has been met
+ *          for component removal by pre-splitting filter..
+ *          The 'result' line shows which components have been removed.
+ * 
+ */ +static void +l_showIndicatorSplitValues(NUMA *na1, + NUMA *na2, + NUMA *na3, + NUMA *na4, + NUMA *na5, + NUMA *na6) +{ +l_int32 i, n; + + n = numaGetCount(na1); + fprintf(stderr, "================================================\n"); + fprintf(stderr, "lt minw: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na1->array[i]); + fprintf(stderr, "\nlt minh: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na2->array[i]); + fprintf(stderr, "\ngt maxh: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na3->array[i]); + fprintf(stderr, "\ngt maxasp: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na4->array[i]); + fprintf(stderr, "\nlt minaf: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na5->array[i]); + fprintf(stderr, "\n------------------------------------------------"); + fprintf(stderr, "\nresult: "); + for (i = 0; i < n; i++) + fprintf(stderr, "%4d ", (l_int32)na6->array[i]); + fprintf(stderr, "\n================================================\n"); +} diff --git a/3rdparty/hgOCR/leptonica/recogtrain.c b/3rdparty/hgOCR/leptonica/recogtrain.c new file mode 100644 index 00000000..e6f207e1 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/recogtrain.c @@ -0,0 +1,2478 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file recogtrain.c + *
+ *
+ *      Training on labeled data
+ *         l_int32             recogTrainLabeled()
+ *         PIX                *recogProcessLabeled()
+ *         l_int32             recogAddSample()
+ *         PIX                *recogModifyTemplate()
+ *         l_int32             recogAverageSamples()
+ *         l_int32             pixaAccumulateSamples()
+ *         l_int32             recogTrainingFinished()
+ *         static l_int32      recogTemplatesAreOK()
+ *         PIXA               *recogFilterPixaBySize()
+ *         PIXAA              *recogSortPixaByClass()
+ *         l_int32             recogRemoveOutliers1()
+ *         PIXA               *pixaRemoveOutliers1()
+ *         l_int32             recogRemoveOutliers2()
+ *         PIXA               *pixaRemoveOutliers2()
+ *
+ *      Training on unlabeled data
+ *         L_RECOG             recogTrainFromBoot()
+ *
+ *      Padding the digit training set
+ *         l_int32             recogPadDigitTrainingSet()
+ *         l_int32             recogIsPaddingNeeded()
+ *         static SARRAY      *recogAddMissingClassStrings()
+ *         PIXA               *recogAddDigitPadTemplates()
+ *         static l_int32      recogCharsetAvailable()
+ *
+ *      Making a boot digit recognizer
+ *         L_RECOG            *recogMakeBootDigitRecog()
+ *         PIXA               *recogMakeBootDigitTemplates()
+ *
+ *      Debugging
+ *         l_int32             recogShowContent()
+ *         l_int32             recogDebugAverages()
+ *         l_int32             recogShowAverageTemplates()
+ *         static PIX         *pixDisplayOutliers()
+ *         PIX                *recogDisplayOutlier()
+ *         PIX                *recogShowMatchesInRange()
+ *         PIX                *recogShowMatch()
+ *
+ *  These abbreviations are for the type of template to be used:
+ *    * SI (for the scanned images)
+ *    * WNL (for width-normalized lines, formed by first skeletonizing
+ *           the scanned images, and then dilating to a fixed width)
+ *  These abbreviations are for the type of recognizer:
+ *    * BAR (book-adapted recognizer; the best type; can do identification
+ *           with unscaled images and separation of touching characters.
+ *    * BSR (bootstrap recognizer; used if more labeled templates are
+ *           required for a BAR, either for finding more templates from
+ *           the book, or making a hybrid BAR/BSR.
+ *
+ *  The recog struct typically holds two versions of the input templates
+ *  (e.g. from a pixa) that were used to generate it.  One version is
+ *  the unscaled input templates.  The other version is the one that
+ *  will be used by the recog to identify unlabeled data.  That version
+ *  depends on the input parameters when the recog is created.  The choices
+ *  for the latter version, and their suggested use, are:
+ *  (1) unscaled SI -- typical for BAR, generated from book images
+ *  (2) unscaled WNL -- ditto
+ *  (3) scaled SI -- typical for recognizers containing template
+ *      images from sources other than the book to be recognized
+ *  (4) scaled WNL -- ditto
+ *  For cases (3) and (4), we recommend scaling to fixed height; e.g.,
+ *  scalew = 0, scaleh = 40.
+ *  When using WNL, we recommend using a width of 5 in the template
+ *  and 4 in the unlabeled data.
+ *  It appears that better results for a BAR are usually obtained using
+ *  SI than WNL, but more experimentation is needed.
+ *
+ *  This utility is designed to build recognizers that are specifically
+ *  adapted from a large amount of material, such as a book.  These
+ *  use labeled templates taken from the material, and not scaled.
+ *  In addition, two special recognizers are useful:
+ *  (1) Bootstrap recognizer (BSR).  This uses height-scaled templates,
+ *      that have been extended with several repetitions in one of two ways:
+ *      (a) aniotropic width scaling (for either SI or WNL)
+ *      (b) iterative erosions/dilations (for SI).
+ *  (2) Outlier removal.  This uses height scaled templates.  It can be
+ *      implemented without using templates that are aligned averages of all
+ *      templates in a class.
+ *
+ *  Recognizers are inexpensive to generate, for example, from a pixa
+ *  of labeled templates.  The general process of building a BAR is
+ *  to start with labeled templates, e.g., in a pixa, make a BAR, and
+ *  analyze new samples from the book to augment the BAR until it has
+ *  enough samples for each character class.  Along the way, samples
+ *  from a BSR may be added for help in training.  If not enough samples
+ *  are available for the BAR, it can finally be augmented with BSR
+ *  samples, in which case the resulting hybrid BAR/BSR recognizer
+ *  must work on scaled images.
+ *
+ *  Here are the steps in doing recog training:
+ *  A. Generate a BAR from any existing labeled templates
+ *    (1) Create a recog and add the templates, using recogAddSample().
+ *        This stores the unscaled templates.
+ *        [Note: this can be done in one step if the labeled templates are put
+ *         into a pixa:
+ *           L_Recog *rec = recogCreateFromPixa(pixa, ...);  ]
+ *    (2) Call recogTrainingFinished() to generate the (sometimes modified)
+ *        templates to be used for correlation.
+ *    (3) Optionally, remove outliers.
+ *    If there are sufficient samples in the classes, we're done. Otherwise,
+ *  B. Try to get more samples from the book to pad the BAR.
+ *     (1) Save the unscaled, labeled templates from the BAR.
+ *     (2) Supplement the BAR with bootstrap templates to make a hybrid BAR/BSR.
+ *     (3) Do recognition on more unlabeled images, scaled to a fixed height
+ *     (4) Add the unscaled, labeled images to the saved set.
+ *     (5) Optionally, remove outliers.
+ *     If there are sufficient samples in the classes, we're done. Otherwise,
+ *  C. For classes without a sufficient number of templates, we can
+ *     supplement the BAR with templates from a BSR (a hybrid RAR/BSR),
+ *     and do recognition scaled to a fixed height.
+ *
+ *  Here are several methods that can be used for identifying outliers:
+ *  (1) Compute average templates for each class and remove a candidate
+ *      that is poorly correlated with the average.  This is the most
+ *      simple method.  recogRemoveOutliers1() uses this, supplemented with
+ *      a second threshold and a target number of templates to be saved.
+ *  (2) Compute average templates for each class and remove a candidate
+ *      that is more highly correlated with the average of some other class.
+ *      This does not require setting a threshold for the correlation.
+ *      recogRemoveOutliers2() uses this method, supplemented with a minimum
+ *      correlation score.
+ *  (3) For each candidate, find the average correlation with other
+ *      members of its class, and remove those that have a relatively
+ *      low average correlation.  This is similar to (1), gives comparable
+ *      results and because it does not use average templates, it requires
+ *      a bit more computation.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Static functions */ +static l_int32 recogTemplatesAreOK(L_RECOG *recog, l_int32 minsize, + l_float32 minfract, l_int32 *pok); +static SARRAY *recogAddMissingClassStrings(L_RECOG *recog); +static l_int32 recogCharsetAvailable(l_int32 type); +static PIX *pixDisplayOutliers(PIXA *pixas, NUMA *nas); +static PIX *recogDisplayOutlier(L_RECOG *recog, l_int32 iclass, l_int32 jsamp, + l_int32 maxclass, l_float32 maxscore); + + /* Default parameters that are used in recogTemplatesAreOK() and + * in outlier removal functions, and that use template set size + * to decide if the set of templates (before outliers are removed) + * is valid. Values are set to accept most sets of sample templates. */ +static const l_int32 DefaultMinSetSize = 1; /* minimum number of + samples for a valid class */ +static const l_float32 DefaultMinSetFract = 0.4; /* minimum fraction + of classes required for a valid recog */ + + /* Defaults in pixaRemoveOutliers1() and pixaRemoveOutliers2() */ +static const l_float32 DefaultMinScore = 0.75; /* keep everything above */ +static const l_int32 DefaultMinTarget = 3; /* to be kept if possible */ +static const l_float32 LowerScoreThreshold = 0.5; /* templates can be + * kept down to this score to if needed to retain the + * desired minimum number of templates */ + + +/*------------------------------------------------------------------------* + * Training * + *------------------------------------------------------------------------*/ +/*! + * \brief recogTrainLabeled() + * + * \param[in] recog in training mode + * \param[in] pixs if depth > 1, will be thresholded to 1 bpp + * \param[in] box [optional] cropping box + * \param[in] text [optional] if null, use text field in pix + * \param[in] debug 1 to display images of samples not captured + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Training is restricted to the addition of a single
+ *          character in an arbitrary (e.g., UTF8) charset
+ *      (2) If box != null, it should represent the location in %pixs
+ *          of the character image.
+ * 
+ */ +l_ok +recogTrainLabeled(L_RECOG *recog, + PIX *pixs, + BOX *box, + char *text, + l_int32 debug) +{ +l_int32 ret; +PIX *pix; + + PROCNAME("recogTrainLabeled"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Prepare the sample to be added. This step also acts + * as a filter, and can invalidate pixs as a template. */ + ret = recogProcessLabeled(recog, pixs, box, text, &pix); + if (ret) { + pixDestroy(&pix); + L_WARNING("failure to get sample '%s' for training\n", procName, + text); + return 1; + } + + recogAddSample(recog, pix, debug); + pixDestroy(&pix); + return 0; +} + + +/*! + * \brief recogProcessLabeled() + * + * \param[in] recog in training mode + * \param[in] pixs if depth > 1, will be thresholded to 1 bpp + * \param[in] box [optional] cropping box + * \param[in] text [optional] if null, use text field in pix + * \param[out] ppix addr of pix, 1 bpp, labeled + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This crops and binarizes the input image, generating a pix
+ *          of one character where the charval is inserted into the pix.
+ * 
+ */ +l_ok +recogProcessLabeled(L_RECOG *recog, + PIX *pixs, + BOX *box, + char *text, + PIX **ppix) +{ +char *textdata; +l_int32 textinpix, textin, nsets; +NUMA *na; +PIX *pix1, *pix2, *pix3, *pix4; + + PROCNAME("recogProcessLabeled"); + + if (!ppix) + return ERROR_INT("&pix not defined", procName, 1); + *ppix = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Find the text; this will be stored with the output images */ + textin = text && (text[0] != '\0'); + textinpix = (pixs->text && (pixs->text[0] != '\0')); + if (!textin && !textinpix) { + L_ERROR("no text: %d\n", procName, recog->num_samples); + return 1; + } + textdata = (textin) ? text : pixs->text; /* do not free */ + + /* Crop and binarize if necessary */ + if (box) + pix1 = pixClipRectangle(pixs, box, NULL); + else + pix1 = pixClone(pixs); + if (pixGetDepth(pix1) > 1) + pix2 = pixConvertTo1(pix1, recog->threshold); + else + pix2 = pixClone(pix1); + pixDestroy(&pix1); + + /* Remove isolated noise, using as a criterion all components + * that are removed by a vertical opening of size 5. */ + pix3 = pixMorphSequence(pix2, "o1.5", 0); /* seed */ + pixSeedfillBinary(pix3, pix3, pix2, 8); /* fill from seed; clip to pix2 */ + pixDestroy(&pix2); + + /* Clip to foreground */ + pixClipToForeground(pix3, &pix4, NULL); + pixDestroy(&pix3); + if (!pix4) + return ERROR_INT("pix4 is empty", procName, 1); + + /* Verify that if there is more than 1 c.c., they all have + * horizontal overlap */ + na = pixCountByColumn(pix4, NULL); + numaCountNonzeroRuns(na, &nsets); + numaDestroy(&na); + if (nsets > 1) { + L_WARNING("found %d sets of horiz separated c.c.; skipping\n", + procName, nsets); + pixDestroy(&pix4); + return 1; + } + + pixSetText(pix4, textdata); + *ppix = pix4; + return 0; +} + + +/*! + * \brief recogAddSample() + * + * \param[in] recog + * \param[in] pix a single character, 1 bpp + * \param[in] debug + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The pix is 1 bpp, with the character string label embedded.
+ *      (2) The pixaa_u array of the recog is initialized to accept
+ *          up to 256 different classes.  When training is finished,
+ *          the arrays are truncated to the actual number of classes.
+ *          To pad an existing recog from the boot recognizers, training
+ *          is started again; if samples from a new class are added,
+ *          the pixaa_u array is extended by adding a pixa to hold them.
+ * 
+ */ +l_ok +recogAddSample(L_RECOG *recog, + PIX *pix, + l_int32 debug) +{ +char *text; +l_int32 npa, charint, index; +PIXA *pixa1; +PIXAA *paa; + + PROCNAME("recogAddSample"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp\n", procName, 1); + if (recog->train_done) + return ERROR_INT("not added: training has been completed", procName, 1); + paa = recog->pixaa_u; + + /* Make sure the character is in the set */ + text = pixGetText(pix); + if (l_convertCharstrToInt(text, &charint) == 1) { + L_ERROR("invalid text: %s\n", procName, text); + return 1; + } + + /* Determine the class array index. Check if the class + * alreadly exists, and if not, add it. */ + if (recogGetClassIndex(recog, charint, text, &index) == 1) { + /* New class must be added */ + npa = pixaaGetCount(paa, NULL); + if (index > npa) { + L_ERROR("oops: bad index %d > npa %d!!\n", procName, index, npa); + return 1; + } + if (index == npa) { /* paa needs to be extended */ + L_INFO("Adding new class and pixa: index = %d, text = %s\n", + procName, index, text); + pixa1 = pixaCreate(10); + pixaaAddPixa(paa, pixa1, L_INSERT); + } + } + if (debug) { + L_INFO("Identified text label: %s\n", procName, text); + L_INFO("Identified: charint = %d, index = %d\n", + procName, charint, index); + } + + /* Insert the unscaled character image into the right pixa. + * (Unscaled images are required to split touching characters.) */ + recog->num_samples++; + pixaaAddPix(paa, index, pix, NULL, L_COPY); + return 0; +} + + +/*! + * \brief recogModifyTemplate() + * + * \param[in] recog + * \param[in] pixs 1 bpp, to be optionally scaled and turned into + * strokes of fixed width + * \return pixd modified pix if OK, NULL on error + */ +PIX * +recogModifyTemplate(L_RECOG *recog, + PIX *pixs) +{ +l_int32 w, h, empty; +PIX *pix1, *pix2; + + PROCNAME("recogModifyTemplate"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Scale first */ + pixGetDimensions(pixs, &w, &h, NULL); + if ((recog->scalew == 0 || recog->scalew == w) && + (recog->scaleh == 0 || recog->scaleh == h)) { /* no scaling */ + pix1 = pixCopy(NULL, pixs); + } else { + pix1 = pixScaleToSize(pixs, recog->scalew, recog->scaleh); + } + if (!pix1) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + + /* Then optionally convert to lines */ + if (recog->linew <= 0) { + pix2 = pixClone(pix1); + } else { + pix2 = pixSetStrokeWidth(pix1, recog->linew, 1, 8); + } + pixDestroy(&pix1); + if (!pix2) + return (PIX *)ERROR_PTR("pix2 not made", procName, NULL); + + /* Make sure we still have some pixels */ + pixZero(pix2, &empty); + if (empty) { + pixDestroy(&pix2); + return (PIX *)ERROR_PTR("modified template has no pixels", + procName, NULL); + } + return pix2; +} + + +/*! + * \brief recogAverageSamples() + * + * \param[in] precog addr of existing recog; may be destroyed + * \param[in] debug + * \return 0 on success, 1 on failure + * + *
+ * Notes:
+ *      (1) This is only called in two situations:
+ *          (a) When splitting characters using either the DID method
+ *              recogDecode() or the the greedy splitter
+ *              recogCorrelationBestRow()
+ *          (b) By a special recognizer that is used to remove outliers.
+ *          Both unscaled and scaled inputs are averaged.
+ *      (2) If the data in any class is nonexistent (no samples), or
+ *          very bad (no fg pixels in the average), or if the ratio
+ *          of max/min average unscaled class template heights is
+ *          greater than max_ht_ratio, this destroys the recog.
+ *          The caller must check the return value of the recog.
+ *      (3) Set debug = 1 to view the resulting templates and their centroids.
+ * 
+ */ +l_int32 +recogAverageSamples(L_RECOG **precog, + l_int32 debug) +{ +l_int32 i, nsamp, size, area, bx, by, badclass; +l_float32 x, y, hratio; +BOX *box; +PIXA *pixa1; +PIX *pix1, *pix2, *pix3; +PTA *pta1; +L_RECOG *recog; + + PROCNAME("recogAverageSamples"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if ((recog = *precog) == NULL) + return ERROR_INT("recog not defined", procName, 1); + + if (recog->ave_done) { + if (debug) /* always do this if requested */ + recogShowAverageTemplates(recog); + return 0; + } + + /* Remove any previous averaging data */ + size = recog->setsize; + pixaDestroy(&recog->pixa_u); + ptaDestroy(&recog->pta_u); + numaDestroy(&recog->nasum_u); + recog->pixa_u = pixaCreate(size); + recog->pta_u = ptaCreate(size); + recog->nasum_u = numaCreate(size); + + pixaDestroy(&recog->pixa); + ptaDestroy(&recog->pta); + numaDestroy(&recog->nasum); + recog->pixa = pixaCreate(size); + recog->pta = ptaCreate(size); + recog->nasum = numaCreate(size); + + /* Unscaled bitmaps: compute averaged bitmap, centroid, and fg area. + * Note that when we threshold to 1 bpp the 8 bpp averaged template + * that is returned from the accumulator, it will not be cropped + * to the foreground. We must crop it, because the correlator + * makes that assumption and will return a zero value if the + * width or height of the two images differs by several pixels. + * But cropping to fg can cause the value of the centroid to + * change, if bx > 0 or by > 0. */ + badclass = FALSE; + for (i = 0; i < size; i++) { + pixa1 = pixaaGetPixa(recog->pixaa_u, i, L_CLONE); + pta1 = ptaaGetPta(recog->ptaa_u, i, L_CLONE); + nsamp = pixaGetCount(pixa1); + nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ + if (nsamp == 0) { /* no information for this class */ + L_ERROR("no samples in class %d\n", procName, i); + badclass = TRUE; + pixaDestroy(&pixa1); + ptaDestroy(&pta1); + break; + } else { + pixaAccumulateSamples(pixa1, pta1, &pix1, &x, &y); + pix2 = pixThresholdToBinary(pix1, L_MAX(1, nsamp / 2)); + pixInvert(pix2, pix2); + pixClipToForeground(pix2, &pix3, &box); + if (!box) { + L_ERROR("no fg pixels in average for uclass %d\n", procName, i); + badclass = TRUE; + pixDestroy(&pix1); + pixDestroy(&pix2); + pixaDestroy(&pixa1); + ptaDestroy(&pta1); + break; + } else { + boxGetGeometry(box, &bx, &by, NULL, NULL); + pixaAddPix(recog->pixa_u, pix3, L_INSERT); + ptaAddPt(recog->pta_u, x - bx, y - by); /* correct centroid */ + pixCountPixels(pix3, &area, recog->sumtab); + numaAddNumber(recog->nasum_u, area); /* foreground */ + boxDestroy(&box); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + } + pixaDestroy(&pixa1); + ptaDestroy(&pta1); + } + + /* Are any classes bad? If so, destroy the recog and return an error */ + if (badclass) { + recogDestroy(precog); + return ERROR_INT("at least 1 bad class; destroying recog", procName, 1); + } + + /* Get the range of sizes of the unscaled average templates. + * Reject if the height ratio is too large. */ + pixaSizeRange(recog->pixa_u, &recog->minwidth_u, &recog->minheight_u, + &recog->maxwidth_u, &recog->maxheight_u); + hratio = (l_float32)recog->maxheight_u / (l_float32)recog->minheight_u; + if (hratio > recog->max_ht_ratio) { + L_ERROR("ratio of max/min height of average templates = %4.1f;" + " destroying recog\n", procName, hratio); + recogDestroy(precog); + return 1; + } + + /* Scaled bitmaps: compute averaged bitmap, centroid, and fg area */ + for (i = 0; i < size; i++) { + pixa1 = pixaaGetPixa(recog->pixaa, i, L_CLONE); + pta1 = ptaaGetPta(recog->ptaa, i, L_CLONE); + nsamp = pixaGetCount(pixa1); + nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ + pixaAccumulateSamples(pixa1, pta1, &pix1, &x, &y); + pix2 = pixThresholdToBinary(pix1, L_MAX(1, nsamp / 2)); + pixInvert(pix2, pix2); + pixClipToForeground(pix2, &pix3, &box); + if (!box) { + L_ERROR("no fg pixels in average for sclass %d\n", procName, i); + badclass = TRUE; + pixDestroy(&pix1); + pixDestroy(&pix2); + pixaDestroy(&pixa1); + ptaDestroy(&pta1); + break; + } else { + boxGetGeometry(box, &bx, &by, NULL, NULL); + pixaAddPix(recog->pixa, pix3, L_INSERT); + ptaAddPt(recog->pta, x - bx, y - by); /* correct centroid */ + pixCountPixels(pix3, &area, recog->sumtab); + numaAddNumber(recog->nasum, area); /* foreground */ + boxDestroy(&box); + } + pixDestroy(&pix1); + pixDestroy(&pix2); + pixaDestroy(&pixa1); + ptaDestroy(&pta1); + } + + if (badclass) { + recogDestroy(precog); + return ERROR_INT("at least 1 bad class; destroying recog", procName, 1); + } + + /* Get the range of widths of the scaled average templates */ + pixaSizeRange(recog->pixa, &recog->minwidth, NULL, &recog->maxwidth, NULL); + + /* Get dimensions useful for splitting */ + recog->min_splitw = L_MAX(5, recog->minwidth_u - 5); + recog->max_splith = recog->maxheight_u + 12; /* allow for skew */ + + if (debug) + recogShowAverageTemplates(recog); + + recog->ave_done = TRUE; + return 0; +} + + +/*! + * \brief pixaAccumulateSamples() + * + * \param[in] pixa of samples from the same class, 1 bpp + * \param[in] pta [optional] of centroids of the samples + * \param[out] ppixd accumulated samples, 8 bpp + * \param[out] px [optional] average x coordinate of centroids + * \param[out] py [optional] average y coordinate of centroids + * \return 0 on success, 1 on failure + * + *
+ * Notes:
+ *      (1) This generates an aligned (by centroid) sum of the input pix.
+ *      (2) We use only the first 256 samples; that's plenty.
+ *      (3) If pta is not input, we generate two tables, and discard
+ *          after use.  If this is called many times, it is better
+ *          to precompute the pta.
+ * 
+ */ +l_int32 +pixaAccumulateSamples(PIXA *pixa, + PTA *pta, + PIX **ppixd, + l_float32 *px, + l_float32 *py) +{ +l_int32 i, n, maxw, maxh, xdiff, ydiff; +l_int32 *centtab, *sumtab; +l_float32 xc, yc, xave, yave; +PIX *pix1, *pix2, *pixsum; +PTA *ptac; + + PROCNAME("pixaAccumulateSamples"); + + if (px) *px = 0; + if (py) *py = 0; + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + if (pta && ptaGetCount(pta) != n) + return ERROR_INT("pta count differs from pixa count", procName, 1); + n = L_MIN(n, 256); /* take the first 256 only */ + if (n == 0) + return ERROR_INT("pixa array empty", procName, 1); + + /* Find the centroids */ + if (pta) { + ptac = ptaClone(pta); + } else { /* generate them here */ + ptac = ptaCreate(n); + centtab = makePixelCentroidTab8(); + sumtab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + pixCentroid(pix1, centtab, sumtab, &xc, &yc); + ptaAddPt(ptac, xc, yc); + } + LEPT_FREE(centtab); + LEPT_FREE(sumtab); + } + + /* Find the average value of the centroids */ + xave = yave = 0; + for (i = 0; i < n; i++) { + ptaGetPt(pta, i, &xc, &yc); + xave += xc; + yave += yc; + } + xave = xave / (l_float32)n; + yave = yave / (l_float32)n; + if (px) *px = xave; + if (py) *py = yave; + + /* Place all pix with their centroids located at the average + * centroid value, and sum the results. Make the accumulator + * image slightly larger than the largest sample to insure + * that all pixels are represented in the accumulator. */ + pixaSizeRange(pixa, NULL, NULL, &maxw, &maxh); + pixsum = pixInitAccumulate(maxw + 5, maxh + 5, 0); + pix1 = pixCreate(maxw, maxh, 1); + for (i = 0; i < n; i++) { + pix2 = pixaGetPix(pixa, i, L_CLONE); + ptaGetPt(ptac, i, &xc, &yc); + xdiff = (l_int32)(xave - xc); + ydiff = (l_int32)(yave - yc); + pixClearAll(pix1); + pixRasterop(pix1, xdiff, ydiff, maxw, maxh, PIX_SRC, + pix2, 0, 0); + pixAccumulate(pixsum, pix1, L_ARITH_ADD); + pixDestroy(&pix2); + } + *ppixd = pixFinalAccumulate(pixsum, 0, 8); + + pixDestroy(&pix1); + pixDestroy(&pixsum); + ptaDestroy(&ptac); + return 0; +} + + +/*! + * \brief recogTrainingFinished() + * + * \param[in] precog addr of recog + * \param[in] modifyflag 1 to use recogModifyTemplate(); 0 otherwise + * \param[in] minsize set to -1 for default + * \param[in] minfract set to -1.0 for default + * \return 0 if OK, 1 on error (input recog will be destroyed) + * + *
+ * Notes:
+ *      (1) This must be called after all training samples have been added.
+ *      (2) If the templates are not good enough, the recog input is destroyed.
+ *      (3) Usually, %modifyflag == 1, because we want to apply
+ *          recogModifyTemplate() to generate the actual templates
+ *          that will be used.  The one exception is when reading a
+ *          serialized recog: there we want to put the same set of
+ *          templates in both the unscaled and modified pixaa.
+ *          See recogReadStream() to see why we do this.
+ *      (4) See recogTemplatesAreOK() for %minsize and %minfract usage.
+ *      (5) The following things are done here:
+ *          (a) Allocate (or reallocate) storage for (possibly) modified
+ *              bitmaps, centroids, and fg areas.
+ *          (b) Generate the (possibly) modified bitmaps.
+ *          (c) Compute centroid and fg area data for both unscaled and
+ *              modified bitmaps.
+ *          (d) Truncate the pixaa, ptaa and numaa arrays down from
+ *              256 to the actual size.
+ *      (6) Putting these operations here makes it simple to recompute
+ *          the recog with different modifications on the bitmaps.
+ *      (7) Call recogShowContent() to display the templates, both
+ *          unscaled and modified.
+ * 
+ */ +l_ok +recogTrainingFinished(L_RECOG **precog, + l_int32 modifyflag, + l_int32 minsize, + l_float32 minfract) +{ +l_int32 ok, i, j, size, nc, ns, area; +l_float32 xave, yave; +PIX *pix, *pixd; +PIXA *pixa; +PIXAA *paa; +PTA *pta; +PTAA *ptaa; +L_RECOG *recog; + + PROCNAME("recogTrainingFinished"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if ((recog = *precog) == NULL) + return ERROR_INT("recog not defined", procName, 1); + if (recog->train_done) return 0; + + /* Test the input templates */ + recogTemplatesAreOK(recog, minsize, minfract, &ok); + if (!ok) { + recogDestroy(precog); + return ERROR_INT("bad templates", procName, 1); + } + + /* Generate the storage for the possibly-scaled training bitmaps */ + size = recog->maxarraysize; + paa = pixaaCreate(size); + pixa = pixaCreate(1); + pixaaInitFull(paa, pixa); + pixaDestroy(&pixa); + pixaaDestroy(&recog->pixaa); + recog->pixaa = paa; + + /* Generate the storage for the unscaled centroid training data */ + ptaa = ptaaCreate(size); + pta = ptaCreate(0); + ptaaInitFull(ptaa, pta); + ptaaDestroy(&recog->ptaa_u); + recog->ptaa_u = ptaa; + + /* Generate the storage for the possibly-scaled centroid data */ + ptaa = ptaaCreate(size); + ptaaInitFull(ptaa, pta); + ptaDestroy(&pta); + ptaaDestroy(&recog->ptaa); + recog->ptaa = ptaa; + + /* Generate the storage for the fg area data */ + numaaDestroy(&recog->naasum_u); + numaaDestroy(&recog->naasum); + recog->naasum_u = numaaCreateFull(size, 0); + recog->naasum = numaaCreateFull(size, 0); + + paa = recog->pixaa_u; + nc = recog->setsize; + for (i = 0; i < nc; i++) { + pixa = pixaaGetPixa(paa, i, L_CLONE); + ns = pixaGetCount(pixa); + for (j = 0; j < ns; j++) { + /* Save centroid and area data for the unscaled pix */ + pix = pixaGetPix(pixa, j, L_CLONE); + pixCentroid(pix, recog->centtab, recog->sumtab, &xave, &yave); + ptaaAddPt(recog->ptaa_u, i, xave, yave); + pixCountPixels(pix, &area, recog->sumtab); + numaaAddNumber(recog->naasum_u, i, area); /* foreground */ + + /* Insert the (optionally) scaled character image, and + * save centroid and area data for it */ + if (modifyflag == 1) + pixd = recogModifyTemplate(recog, pix); + else + pixd = pixClone(pix); + if (pixd) { + pixaaAddPix(recog->pixaa, i, pixd, NULL, L_INSERT); + pixCentroid(pixd, recog->centtab, recog->sumtab, &xave, &yave); + ptaaAddPt(recog->ptaa, i, xave, yave); + pixCountPixels(pixd, &area, recog->sumtab); + numaaAddNumber(recog->naasum, i, area); + } else { + L_ERROR("failed: modified template for class %d, sample %d\n", + procName, i, j); + } + pixDestroy(&pix); + } + pixaDestroy(&pixa); + } + + /* Truncate the arrays to those with non-empty containers */ + pixaaTruncate(recog->pixaa_u); + pixaaTruncate(recog->pixaa); + ptaaTruncate(recog->ptaa_u); + ptaaTruncate(recog->ptaa); + numaaTruncate(recog->naasum_u); + numaaTruncate(recog->naasum); + + recog->train_done = TRUE; + return 0; +} + + +/*! + * \brief recogTemplatesAreOK() + * + * \param[in] recog + * \param[in] minsize set to -1 for default + * \param[in] minfract set to -1.0 for default + * \param[out] pok set to 1 if template set is valid; 0 otherwise + * \return 1 on error; 0 otherwise. An invalid template set is not an error. + * + *
+ * Notes:
+ *      (1) This is called by recogTrainingFinished().  A return value of 0
+ *          will cause recogTrainingFinished() to destroy the recog.
+ *      (2) %minsize is the minimum number of samples required for
+ *          the class; -1 uses the default
+ *      (3) %minfract is the minimum fraction of classes required for
+ *          the recog to be usable; -1.0 uses the default
+ * 
+ */ +static l_int32 +recogTemplatesAreOK(L_RECOG *recog, + l_int32 minsize, + l_float32 minfract, + l_int32 *pok) +{ +l_int32 i, n, validsets, nt; +l_float32 ratio; +NUMA *na; + + PROCNAME("recogTemplatesAreOK"); + + if (!pok) + return ERROR_INT("&ok not defined", procName, 1); + *pok = 0; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + minsize = (minsize < 0) ? DefaultMinSetSize : minsize; + minfract = (minfract < 0) ? DefaultMinSetFract : minfract; + n = pixaaGetCount(recog->pixaa_u, &na); + validsets = 0; + for (i = 0, validsets = 0; i < n; i++) { + numaGetIValue(na, i, &nt); + if (nt >= minsize) + validsets++; + } + numaDestroy(&na); + ratio = (l_float32)validsets / (l_float32)recog->charset_size; + *pok = (ratio >= minfract) ? 1 : 0; + return 0; +} + + +/*! + * \brief recogFilterPixaBySize() + * + * \param[in] pixas labeled templates + * \param[in] setsize size of character set (number of classes) + * \param[in] maxkeep max number of templates to keep in a class + * \param[in] max_ht_ratio max allowed height ratio (see below) + * \param[out] pna [optional] debug output, giving the number + * in each class after filtering; use NULL to skip + * \return pixa filtered templates, or NULL on error + * + *
+ * Notes:
+ *      (1) The basic assumption is that the most common and larger
+ *          templates in each class are more likely to represent the
+ *          characters we are interested in.  For example, larger digits
+ *          are more likely to represent page numbers, and smaller digits
+ *          could be data in tables.  Therefore, we bias the first
+ *          stage of filtering toward the larger characters by removing
+ *          very small ones, and select based on proximity of the
+ *          remaining characters to median height.
+ *      (2) For each of the %setsize classes, order the templates
+ *          increasingly by height.  Take the rank 0.9 height.  Eliminate
+ *          all templates that are shorter by more than %max_ht_ratio.
+ *          Of the remaining ones, select up to %maxkeep that are closest
+ *          in rank order height to the median template.
+ * 
+ */ +PIXA * +recogFilterPixaBySize(PIXA *pixas, + l_int32 setsize, + l_int32 maxkeep, + l_float32 max_ht_ratio, + NUMA **pna) +{ +l_int32 i, j, h90, hj, j1, j2, j90, n, nc; +l_float32 ratio; +NUMA *na; +PIXA *pixa1, *pixa2, *pixa3, *pixa4, *pixa5; +PIXAA *paa; + + PROCNAME("recogFilterPixaBySize"); + + if (pna) *pna = NULL; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + if ((paa = recogSortPixaByClass(pixas, setsize)) == NULL) + return (PIXA *)ERROR_PTR("paa not made", procName, NULL); + nc = pixaaGetCount(paa, NULL); + na = (pna) ? numaCreate(0) : NULL; + if (pna) *pna = na; + pixa5 = pixaCreate(0); + for (i = 0; i < nc; i++) { + pixa1 = pixaaGetPixa(paa, i, L_CLONE); + if ((n = pixaGetCount(pixa1)) == 0) { + pixaDestroy(&pixa1); + continue; + } + pixa2 = pixaSort(pixa1, L_SORT_BY_HEIGHT, L_SORT_INCREASING, NULL, + L_COPY); + j90 = (l_int32)(0.9 * n); + pixaGetPixDimensions(pixa2, j90, NULL, &h90, NULL); + pixa3 = pixaCreate(n); + for (j = 0; j < n; j++) { + pixaGetPixDimensions(pixa2, j, NULL, &hj, NULL); + ratio = (l_float32)h90 / (l_float32)hj; + if (ratio <= max_ht_ratio) + pixaAddPix(pixa3, pixaGetPix(pixa2, j, L_COPY), L_INSERT); + } + n = pixaGetCount(pixa3); + if (n <= maxkeep) { + pixa4 = pixaCopy(pixa3, L_CLONE); + } else { + j1 = (n - maxkeep) / 2; + j2 = j1 + maxkeep - 1; + pixa4 = pixaSelectRange(pixa3, j1, j2, L_CLONE); + } + if (na) numaAddNumber(na, pixaGetCount(pixa4)); + pixaJoin(pixa5, pixa4, 0, -1); + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + pixaDestroy(&pixa3); + pixaDestroy(&pixa4); + } + + pixaaDestroy(&paa); + return pixa5; +} + + +/*! + * \brief recogSortPixaByClass() + * + * \param[in] pixa labeled templates + * \param[in] setsize size of character set (number of classes) + * \return paa pixaa where each pixa has templates for one class, + * or null on error + */ +PIXAA * +recogSortPixaByClass(PIXA *pixa, + l_int32 setsize) +{ +PIXAA *paa; +L_RECOG *recog; + + PROCNAME("recogSortPixaByClass"); + + if (!pixa) + return (PIXAA *)ERROR_PTR("pixa not defined", procName, NULL); + + if ((recog = recogCreateFromPixaNoFinish(pixa, 0, 0, 0, 0, 0)) == NULL) + return (PIXAA *)ERROR_PTR("recog not made", procName, NULL); + paa = recog->pixaa_u; /* grab the paa of unscaled templates */ + recog->pixaa_u = NULL; + recogDestroy(&recog); + return paa; +} + + +/*! + * \brief recogRemoveOutliers1() + * + * \param[in] precog addr of recog with unscaled labeled templates + * \param[in] minscore keep everything with at least this score + * \param[in] mintarget minimum desired number to retain if possible + * \param[in] minsize minimum number of samples required for a class + * \param[out] ppixsave [optional debug] saved templates, with scores + * \param[out] ppixrem [optional debug] removed templates, with scores + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This is a convenience wrapper when using default parameters
+ *          for the recog.  See pixaRemoveOutliers1() for details.
+ *      (2) If this succeeds, the new recog replaces the input recog;
+ *          if it fails, the input recog is destroyed.
+ * 
+ */ +l_ok +recogRemoveOutliers1(L_RECOG **precog, + l_float32 minscore, + l_int32 mintarget, + l_int32 minsize, + PIX **ppixsave, + PIX **ppixrem) +{ +PIXA *pixa1, *pixa2; +L_RECOG *recog; + + PROCNAME("recogRemoveOutliers1"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if (*precog == NULL) + return ERROR_INT("recog not defined", procName, 1); + + /* Extract the unscaled templates */ + pixa1 = recogExtractPixa(*precog); + recogDestroy(precog); + + pixa2 = pixaRemoveOutliers1(pixa1, minscore, mintarget, minsize, + ppixsave, ppixrem); + pixaDestroy(&pixa1); + if (!pixa2) + return ERROR_INT("failure to remove outliers", procName, 1); + + recog = recogCreateFromPixa(pixa2, 0, 0, 0, 150, 1); + pixaDestroy(&pixa2); + if (!recog) + return ERROR_INT("failure to make recog from pixa sans outliers", + procName, 1); + + *precog = recog; + return 0; +} + + +/*! + * \brief pixaRemoveOutliers1() + * + * \param[in] pixas unscaled labeled templates + * \param[in] minscore keep everything with at least this score; + * use -1.0 for default. + * \param[in] mintarget minimum desired number to retain if possible; + * use -1 for default. + * \param[in] minsize minimum number of samples required for a class; + * use -1 for default. + * \param[out] ppixsave [optional debug] saved templates, with scores + * \param[out] ppixrem [optional debug] removed templates, with scores + * \return pixa of unscaled templates to be kept, or NULL on error + * + *
+ * Notes:
+ *      (1) Removing outliers is particularly important when recognition
+ *          goes against all the samples in the training set, as opposed
+ *          to the averages for each class.  The reason is that we get
+ *          an identification error if a mislabeled template is a best
+ *          match for an input sample.
+ *      (2) Because the score values depend strongly on the quality
+ *          of the character images, to avoid losing too many samples
+ *          we supplement a minimum score for retention with a score
+ *          necessary to acquire the minimum target number of templates.
+ *          To do this we are willing to use a lower threshold,
+ *          LowerScoreThreshold, on the score.  Consequently, with
+ *          poor quality templates, we may keep samples with a score
+ *          less than %minscore, but never less than LowerScoreThreshold.
+ *          And if the number of samples is less than %minsize, we do
+ *          not use any.
+ *      (3) This is meant to be used on a BAR, where the templates all
+ *          come from the same book; use minscore ~0.75.
+ *      (4) Method: make a scaled recog from the input %pixas.  Then,
+ *          for each class: generate the averages, match each
+ *          scaled template against the average, and save unscaled
+ *          templates that had a sufficiently good match.
+ * 
+ */ +PIXA * +pixaRemoveOutliers1(PIXA *pixas, + l_float32 minscore, + l_int32 mintarget, + l_int32 minsize, + PIX **ppixsave, + PIX **ppixrem) +{ +l_int32 i, j, debug, n, area1, area2; +l_float32 x1, y1, x2, y2, minfract, score, rankscore, threshscore; +NUMA *nasum, *narem, *nasave, *nascore; +PIX *pix1, *pix2; +PIXA *pixa, *pixarem, *pixad; +PTA *pta; +L_RECOG *recog; + + PROCNAME("pixaRemoveOutliers1"); + + if (ppixsave) *ppixsave = NULL; + if (ppixrem) *ppixrem = NULL; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + minscore = L_MIN(minscore, 1.0); + if (minscore <= 0.0) + minscore = DefaultMinScore; + mintarget = L_MIN(mintarget, 3); + if (mintarget <= 0) + mintarget = DefaultMinTarget; + if (minsize < 0) + minsize = DefaultMinSetSize; + + /* Make a special height-scaled recognizer with average templates */ + debug = (ppixsave || ppixrem) ? 1 : 0; + recog = recogCreateFromPixa(pixas, 0, 40, 0, 128, 1); + if (!recog) + return (PIXA *)ERROR_PTR("bad pixas; recog not made", procName, NULL); + recogAverageSamples(&recog, debug); + if (!recog) + return (PIXA *)ERROR_PTR("bad templates", procName, NULL); + + nasave = (ppixsave) ? numaCreate(0) : NULL; + pixarem = (ppixrem) ? pixaCreate(0) : NULL; + narem = (ppixrem) ? numaCreate(0) : NULL; + + pixad = pixaCreate(0); + for (i = 0; i < recog->setsize; i++) { + /* Access the average template and values for scaled + * images in this class */ + pix1 = pixaGetPix(recog->pixa, i, L_CLONE); + ptaGetPt(recog->pta, i, &x1, &y1); + numaGetIValue(recog->nasum, i, &area1); + + /* Get the scores for each sample in the class */ + pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); + pta = ptaaGetPta(recog->ptaa, i, L_CLONE); /* centroids */ + nasum = numaaGetNuma(recog->naasum, i, L_CLONE); /* fg areas */ + n = pixaGetCount(pixa); + nascore = numaCreate(n); + for (j = 0; j < n; j++) { + pix2 = pixaGetPix(pixa, j, L_CLONE); + ptaGetPt(pta, j, &x2, &y2); /* centroid average */ + numaGetIValue(nasum, j, &area2); /* fg sum average */ + pixCorrelationScoreSimple(pix1, pix2, area1, area2, + x1 - x2, y1 - y2, 5, 5, + recog->sumtab, &score); + numaAddNumber(nascore, score); + if (debug && score == 0.0) /* typ. large size difference */ + fprintf(stderr, "Got 0 score for i = %d, j = %d\n", i, j); + pixDestroy(&pix2); + } + pixDestroy(&pix1); + + /* Find the rankscore, corresponding to the 1.0 - minfract. + * To attempt to maintain the minfract of templates, use as a + * cutoff the minimum of minscore and the rank score. However, + * no template is saved with an actual score less than + * that at least one template is kept. */ + minfract = (l_float32)mintarget / (l_float32)n; + numaGetRankValue(nascore, 1.0 - minfract, NULL, 0, &rankscore); + threshscore = L_MAX(LowerScoreThreshold, + L_MIN(minscore, rankscore)); + if (debug) { + L_INFO("minscore = %4.2f, rankscore = %4.2f, threshscore = %4.2f\n", + procName, minscore, rankscore, threshscore); + } + + /* Save templates that are at or above threshold. + * Toss any classes with less than %minsize templates. */ + for (j = 0; j < n; j++) { + numaGetFValue(nascore, j, &score); + pix1 = pixaaGetPix(recog->pixaa_u, i, j, L_COPY); + if (score >= threshscore && n >= minsize) { + pixaAddPix(pixad, pix1, L_INSERT); + if (nasave) numaAddNumber(nasave, score); + } else if (debug) { + pixaAddPix(pixarem, pix1, L_INSERT); + numaAddNumber(narem, score); + } else { + pixDestroy(&pix1); + } + } + + pixaDestroy(&pixa); + ptaDestroy(&pta); + numaDestroy(&nasum); + numaDestroy(&nascore); + } + + if (ppixsave) { + *ppixsave = pixDisplayOutliers(pixad, nasave); + numaDestroy(&nasave); + } + if (ppixrem) { + *ppixrem = pixDisplayOutliers(pixarem, narem); + pixaDestroy(&pixarem); + numaDestroy(&narem); + } + recogDestroy(&recog); + return pixad; +} + + +/*! + * \brief recogRemoveOutliers2() + * + * \param[in] precog addr of recog with unscaled labeled templates + * \param[in] minscore keep everything with at least this score + * \param[in] minsize minimum number of samples required for a class + * \param[out] ppixsave [optional debug] saved templates, with scores + * \param[out] ppixrem [optional debug] removed templates, with scores + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This is a convenience wrapper when using default parameters
+ *          for the recog.  See pixaRemoveOutliers2() for details.
+ *      (2) If this succeeds, the new recog replaces the input recog;
+ *          if it fails, the input recog is destroyed.
+ * 
+ */ +l_ok +recogRemoveOutliers2(L_RECOG **precog, + l_float32 minscore, + l_int32 minsize, + PIX **ppixsave, + PIX **ppixrem) +{ +PIXA *pixa1, *pixa2; +L_RECOG *recog; + + PROCNAME("recogRemoveOutliers2"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if (*precog == NULL) + return ERROR_INT("recog not defined", procName, 1); + + /* Extract the unscaled templates */ + pixa1 = recogExtractPixa(*precog); + recogDestroy(precog); + + pixa2 = pixaRemoveOutliers2(pixa1, minscore, minsize, ppixsave, ppixrem); + pixaDestroy(&pixa1); + if (!pixa2) + return ERROR_INT("failure to remove outliers", procName, 1); + + recog = recogCreateFromPixa(pixa2, 0, 0, 0, 150, 1); + pixaDestroy(&pixa2); + if (!recog) + return ERROR_INT("failure to make recog from pixa sans outliers", + procName, 1); + + *precog = recog; + return 0; +} + + +/*! + * \brief pixaRemoveOutliers2() + * + * \param[in] pixas unscaled labeled templates + * \param[in] minscore keep everything with at least this score; + * use -1.0 for default. + * \param[in] minsize minimum number of samples required for a class; + * use -1 for default. + * \param[out] ppixsave [optional debug] saved templates, with scores + * \param[out] ppixrem [optional debug] removed templates, with scores + * \return pixa of unscaled templates to be kept, or NULL on error + * + *
+ * Notes:
+ *      (1) Removing outliers is particularly important when recognition
+ *          goes against all the samples in the training set, as opposed
+ *          to the averages for each class.  The reason is that we get
+ *          an identification error if a mislabeled template is a best
+ *          match for an input sample.
+ *      (2) This method compares each template against the average templates
+ *          of each class, and discards any template that has a higher
+ *          correlation to a class different from its own.  It also
+ *          sets a lower bound on correlation scores with its class average.
+ *      (3) This is meant to be used on a BAR, where the templates all
+ *          come from the same book; use minscore ~0.75.
+ * 
+ */ +PIXA * +pixaRemoveOutliers2(PIXA *pixas, + l_float32 minscore, + l_int32 minsize, + PIX **ppixsave, + PIX **ppixrem) +{ +l_int32 i, j, k, n, area1, area2, maxk, debug; +l_float32 x1, y1, x2, y2, score, maxscore; +NUMA *nan, *nascore, *nasave; +PIX *pix1, *pix2, *pix3; +PIXA *pixarem, *pixad; +L_RECOG *recog; + + PROCNAME("pixaRemoveOutliers2"); + + if (ppixsave) *ppixsave = NULL; + if (ppixrem) *ppixrem = NULL; + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + minscore = L_MIN(minscore, 1.0); + if (minscore <= 0.0) + minscore = DefaultMinScore; + if (minsize < 0) + minsize = DefaultMinSetSize; + + /* Make a special height-scaled recognizer with average templates */ + debug = (ppixsave || ppixrem) ? 1 : 0; + recog = recogCreateFromPixa(pixas, 0, 40, 0, 128, 1); + if (!recog) + return (PIXA *)ERROR_PTR("bad pixas; recog not made", procName, NULL); + recogAverageSamples(&recog, debug); + if (!recog) + return (PIXA *)ERROR_PTR("bad templates", procName, NULL); + + nasave = (ppixsave) ? numaCreate(0) : NULL; + pixarem = (ppixrem) ? pixaCreate(0) : NULL; + + pixad = pixaCreate(0); + pixaaGetCount(recog->pixaa, &nan); /* number of templates in each class */ + for (i = 0; i < recog->setsize; i++) { + /* Get the scores for each sample in the class, when comparing + * with averages from all the classes. */ + numaGetIValue(nan, i, &n); + for (j = 0; j < n; j++) { + pix1 = pixaaGetPix(recog->pixaa, i, j, L_CLONE); + ptaaGetPt(recog->ptaa, i, j, &x1, &y1); /* centroid */ + numaaGetValue(recog->naasum, i, j, NULL, &area1); /* fg sum */ + nascore = numaCreate(n); + for (k = 0; k < recog->setsize; k++) { /* average templates */ + pix2 = pixaGetPix(recog->pixa, k, L_CLONE); + ptaGetPt(recog->pta, k, &x2, &y2); /* average centroid */ + numaGetIValue(recog->nasum, k, &area2); /* average fg sum */ + pixCorrelationScoreSimple(pix1, pix2, area1, area2, + x1 - x2, y1 - y2, 5, 5, + recog->sumtab, &score); + numaAddNumber(nascore, score); + pixDestroy(&pix2); + } + + /* Save templates that are in the correct class and + * at or above threshold. Toss any classes with less + * than %minsize templates. */ + numaGetMax(nascore, &maxscore, &maxk); + if (maxk == i && maxscore >= minscore && n >= minsize) { + /* save it */ + pix3 = pixaaGetPix(recog->pixaa_u, i, j, L_COPY); + pixaAddPix(pixad, pix3, L_INSERT); + if (nasave) numaAddNumber(nasave, maxscore); + } else if (ppixrem) { /* outlier */ + pix3 = recogDisplayOutlier(recog, i, j, maxk, maxscore); + pixaAddPix(pixarem, pix3, L_INSERT); + } + numaDestroy(&nascore); + pixDestroy(&pix1); + } + } + + if (ppixsave) { + *ppixsave = pixDisplayOutliers(pixad, nasave); + numaDestroy(&nasave); + } + if (ppixrem) { + *ppixrem = pixaDisplayTiledInRows(pixarem, 32, 1500, 1.0, 0, 20, 2); + pixaDestroy(&pixarem); + } + + numaDestroy(&nan); + recogDestroy(&recog); + return pixad; +} + + +/*------------------------------------------------------------------------* + * Training on unlabeled data * + *------------------------------------------------------------------------*/ +/*! + * \brief recogTrainFromBoot() + * + * \param[in] recogboot labeled boot recognizer + * \param[in] pixas set of unlabeled input characters + * \param[in] minscore min score for accepting the example; e.g., 0.75 + * \param[in] threshold for binarization, if needed + * \param[in] debug 1 for debug output saved to recogboot; 0 otherwise + * \return pixad labeled version of input pixas, trained on a BSR, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This takes %pixas of unscaled single characters and %recboot,
+ *          a bootstrep recognizer (BSR) that has been set up with parameters
+ *            * scaleh: scale all templates to this height
+ *            * linew: width of normalized strokes, or 0 if using
+ *              the input image
+ *          It modifies the pix in %pixas accordingly and correlates
+ *          with the templates in the BSR.  It returns those input
+ *          images in %pixas whose best correlation with the BSR is at
+ *          or above %minscore.  The returned pix have added text labels
+ *          for the text string of the class to which the best
+ *          correlated template belongs.
+ *      (2) Identification occurs in scaled mode (typically with h = 40),
+ *          optionally using a width-normalized line images derived
+ *          from those in %pixas.
+ * 
+ */ +PIXA * +recogTrainFromBoot(L_RECOG *recogboot, + PIXA *pixas, + l_float32 minscore, + l_int32 threshold, + l_int32 debug) +{ +char *text; +l_int32 i, n, same, maxd, scaleh, linew; +l_float32 score; +PIX *pix1, *pix2, *pixdb; +PIXA *pixa1, *pixa2, *pixa3, *pixad; + + PROCNAME("recogTrainFromBoot"); + + if (!recogboot) + return (PIXA *)ERROR_PTR("recogboot not defined", procName, NULL); + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + + /* Make sure all input pix are 1 bpp */ + if ((n = pixaGetCount(pixas)) == 0) + return (PIXA *)ERROR_PTR("no pix in pixa", procName, NULL); + pixaVerifyDepth(pixas, &same, &maxd); + if (maxd == 1) { + pixa1 = pixaCopy(pixas, L_COPY); + } else { + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixConvertTo1(pix1, threshold); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + } + + /* Scale the input images to match the BSR */ + scaleh = recogboot->scaleh; + linew = recogboot->linew; + pixa2 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa1, i, L_CLONE); + pix2 = pixScaleToSize(pix1, 0, scaleh); + pixaAddPix(pixa2, pix2, L_INSERT); + pixDestroy(&pix1); + } + pixaDestroy(&pixa1); + + /* Optionally convert to width-normalized line */ + if (linew > 0) + pixa3 = pixaSetStrokeWidth(pixa2, linew, 4, 8); + else + pixa3 = pixaCopy(pixa2, L_CLONE); + pixaDestroy(&pixa2); + + /* Identify using recogboot */ + n = pixaGetCount(pixa3); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa3, i, L_COPY); + pixSetText(pix1, NULL); /* remove any existing text or labelling */ + if (!debug) { + recogIdentifyPix(recogboot, pix1, NULL); + } else { + recogIdentifyPix(recogboot, pix1, &pixdb); + pixaAddPix(recogboot->pixadb_boot, pixdb, L_INSERT); + } + rchExtract(recogboot->rch, NULL, &score, &text, NULL, NULL, NULL, NULL); + if (score >= minscore) { + pix2 = pixaGetPix(pixas, i, L_COPY); + pixSetText(pix2, text); + pixaAddPix(pixad, pix2, L_INSERT); + pixaAddPix(recogboot->pixadb_boot, pixdb, L_COPY); + } + LEPT_FREE(text); + pixDestroy(&pix1); + } + pixaDestroy(&pixa3); + + return pixad; +} + + +/*------------------------------------------------------------------------* + * Padding the digit training set * + *------------------------------------------------------------------------*/ +/*! + * \brief recogPadDigitTrainingSet() + * + * \param[in,out] precog trained; if padding is needed, it is replaced + * by a a new padded recog + * \param[in] scaleh must be > 0; suggest ~40. + * \param[in] linew use 0 for original scanned images + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a no-op if padding is not needed.  However,
+ *          if it is, this replaces the input recog with a new recog,
+ *          padded appropriately with templates from a boot recognizer,
+ *          and set up with correlation templates derived from
+ *          %scaleh and %linew.
+ * 
+ */ +l_ok +recogPadDigitTrainingSet(L_RECOG **precog, + l_int32 scaleh, + l_int32 linew) +{ +PIXA *pixa; +L_RECOG *recog1, *recog2; +SARRAY *sa; + + PROCNAME("recogPadDigitTrainingSet"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + recog1 = *precog; + + recogIsPaddingNeeded(recog1, &sa); + if (!sa) return 0; + + /* Get a new pixa with the padding templates added */ + pixa = recogAddDigitPadTemplates(recog1, sa); + sarrayDestroy(&sa); + if (!pixa) + return ERROR_INT("pixa not made", procName, 1); + + /* Need to use templates that are scaled to a fixed height. */ + if (scaleh <= 0) { + L_WARNING("templates must be scaled to fixed height; using %d\n", + procName, 40); + scaleh = 40; + } + + /* Create a hybrid recog, composed of templates from both + * the original and bootstrap sources. */ + recog2 = recogCreateFromPixa(pixa, 0, scaleh, linew, recog1->threshold, + recog1->maxyshift); + pixaDestroy(&pixa); + recogDestroy(precog); + *precog = recog2; + return 0; +} + + +/*! + * \brief recogIsPaddingNeeded() + * + * \param[in] recog trained + * \param[out] psa addr of returned string containing text value + * \return 1 on error; 0 if OK, whether or not additional padding + * templates are required. + * + *
+ * Notes:
+ *      (1) This returns a string array in &sa containing character values
+ *          for which extra templates are needed; this sarray is
+ *          used by recogGetPadTemplates().  It returns NULL
+ *          if no padding templates are needed.
+ * 
+ */ +l_int32 +recogIsPaddingNeeded(L_RECOG *recog, + SARRAY **psa) +{ +char *str; +l_int32 i, nt, min_nopad, nclass, allclasses; +l_float32 minval; +NUMA *naclass; +SARRAY *sa; + + PROCNAME("recogIsPaddingNeeded"); + + if (!psa) + return ERROR_INT("&sa not defined", procName, 1); + *psa = NULL; + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + /* Do we have samples from all classes? */ + nclass = pixaaGetCount(recog->pixaa_u, &naclass); /* unscaled bitmaps */ + allclasses = (nclass == recog->charset_size) ? 1 : 0; + + /* Are there enough samples in each class already? */ + min_nopad = recog->min_nopad; + numaGetMin(naclass, &minval, NULL); + if (allclasses && (minval >= min_nopad)) { + numaDestroy(&naclass); + return 0; + } + + /* Are any classes not represented? */ + sa = recogAddMissingClassStrings(recog); + *psa = sa; + + /* Are any other classes under-represented? */ + for (i = 0; i < nclass; i++) { + numaGetIValue(naclass, i, &nt); + if (nt < min_nopad) { + str = sarrayGetString(recog->sa_text, i, L_COPY); + sarrayAddString(sa, str, L_INSERT); + } + } + numaDestroy(&naclass); + return 0; +} + + +/*! + * \brief recogAddMissingClassStrings() + * + * \param[in] recog trained + * \return sa of class string missing in %recog, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns an empty %sa if there is at least one template
+ *          in each class in %recog.
+ * 
+ */ +static SARRAY * +recogAddMissingClassStrings(L_RECOG *recog) +{ +char *text; +char str[4]; +l_int32 i, nclass, index, ival; +NUMA *na; +SARRAY *sa; + + PROCNAME("recogAddMissingClassStrings"); + + if (!recog) + return (SARRAY *)ERROR_PTR("recog not defined", procName, NULL); + + /* Only handling digits */ + nclass = pixaaGetCount(recog->pixaa_u, NULL); /* unscaled bitmaps */ + if (recog->charset_type != 1 || nclass == 10) + return sarrayCreate(0); /* empty */ + + /* Make an indicator array for missing classes */ + na = numaCreate(0); + sa = sarrayCreate(0); + for (i = 0; i < recog->charset_size; i++) + numaAddNumber(na, 1); + for (i = 0; i < nclass; i++) { + text = sarrayGetString(recog->sa_text, i, L_NOCOPY); + index = text[0] - '0'; + numaSetValue(na, index, 0); + } + + /* Convert to string and add to output */ + for (i = 0; i < nclass; i++) { + numaGetIValue(na, i, &ival); + if (ival == 1) { + str[0] = '0' + i; + str[1] = '\0'; + sarrayAddString(sa, str, L_COPY); + } + } + numaDestroy(&na); + return sa; +} + + +/*! + * \brief recogAddDigitPadTemplates() + * + * \param[in] recog trained + * \param[in] sa set of text strings that need to be padded + * \return pixa of all templates from %recog and the additional pad + * templates from a boot recognizer; or NULL on error + * + *
+ * Notes:
+ *      (1) Call recogIsPaddingNeeded() first, which returns %sa of
+ *          template text strings for classes where more templates
+ *          are needed.
+ * 
+ */ +PIXA * +recogAddDigitPadTemplates(L_RECOG *recog, + SARRAY *sa) +{ +char *str, *text; +l_int32 i, j, n, nt; +PIX *pix; +PIXA *pixa1, *pixa2; + + PROCNAME("recogAddDigitPadTemplates"); + + if (!recog) + return (PIXA *)ERROR_PTR("recog not defined", procName, NULL); + if (!sa) + return (PIXA *)ERROR_PTR("sa not defined", procName, NULL); + if (recogCharsetAvailable(recog->charset_type) == FALSE) + return (PIXA *)ERROR_PTR("boot charset not available", procName, NULL); + + /* Make boot recog templates */ + pixa1 = recogMakeBootDigitTemplates(0, 0); + n = pixaGetCount(pixa1); + + /* Extract the unscaled templates from %recog */ + pixa2 = recogExtractPixa(recog); + + /* Add selected boot recog templates based on the text strings in sa */ + nt = sarrayGetCount(sa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa1, i, L_CLONE); + text = pixGetText(pix); + for (j = 0; j < nt; j++) { + str = sarrayGetString(sa, j, L_NOCOPY); + if (!strcmp(text, str)) { + pixaAddPix(pixa2, pix, L_COPY); + break; + } + } + pixDestroy(&pix); + } + + pixaDestroy(&pixa1); + return pixa2; +} + + +/*! + * \brief recogCharsetAvailable() + * + * \param[in] type of charset for padding + * \return 1 if available; 0 if not. + */ +static l_int32 +recogCharsetAvailable(l_int32 type) +{ +l_int32 ret; + + PROCNAME("recogCharsetAvailable"); + + switch (type) + { + case L_ARABIC_NUMERALS: + ret = TRUE; + break; + case L_LC_ROMAN_NUMERALS: + case L_UC_ROMAN_NUMERALS: + case L_LC_ALPHA: + case L_UC_ALPHA: + L_INFO("charset type %d not available\n", procName, type); + ret = FALSE; + break; + default: + L_INFO("charset type %d is unknown\n", procName, type); + ret = FALSE; + break; + } + + return ret; +} + + +/*------------------------------------------------------------------------* + * Making a boot digit recognizer * + *------------------------------------------------------------------------*/ +/*! + * \brief recogMakeBootDigitRecog() + * + * \param[in] nsamp number of samples of each digit; or 0 + * \param[in] scaleh scale all heights to this; typ. use 40 + * \param[in] linew normalized line width; typ. use 5; 0 to skip + * \param[in] maxyshift from nominal centroid alignment; typically 0 or 1 + * \param[in] debug 1 for showing templates; 0 otherwise + * \return recog, or NULL on error + * + *
+ * Notes:
+ *     (1) This takes a set of pre-computed, labeled pixa of single
+ *         digits, and generates a recognizer from them.
+ *         The templates used in the recognizer can be modified by:
+ *         - scaling (isotropically to fixed height)
+ *         - generating a skeleton and thickening so that all strokes
+ *           have the same width.
+ *     (2) The resulting templates are scaled versions of either the
+ *         input bitmaps or images with fixed line widths.  To use the
+ *         input bitmaps, set %linew = 0; otherwise, set %linew to the
+ *         desired line width.
+ *     (3) If %nsamp == 0, this uses and extends the output from
+ *         three boot generators:
+ *            l_bootnum_gen1, l_bootnum_gen2, l_bootnum_gen3.
+ *         Otherwise, it uses exactly %nsamp templates of each digit,
+ *         extracted by l_bootnum_gen4.
+ * 
+ */ +L_RECOG * +recogMakeBootDigitRecog(l_int32 nsamp, + l_int32 scaleh, + l_int32 linew, + l_int32 maxyshift, + l_int32 debug) + +{ +PIXA *pixa; +L_RECOG *recog; + + /* Get the templates, extended by horizontal scaling */ + pixa = recogMakeBootDigitTemplates(nsamp, debug); + + /* Make the boot recog; recogModifyTemplate() will scale the + * templates and optionally turn them into strokes of fixed width. */ + recog = recogCreateFromPixa(pixa, 0, scaleh, linew, 128, maxyshift); + pixaDestroy(&pixa); + if (debug) + recogShowContent(stderr, recog, 0, 1); + + return recog; +} + + +/*! + * \brief recogMakeBootDigitTemplates() + * + * \param[in] nsamp number of samples of each digit; or 0 + * \param[in] debug 1 for display of templates + * \return pixa of templates; or NULL on error + * + *
+ * Notes:
+ *     (1) See recogMakeBootDigitRecog().
+ * 
+ */ +PIXA * +recogMakeBootDigitTemplates(l_int32 nsamp, + l_int32 debug) +{ +NUMA *na1; +PIX *pix1, *pix2, *pix3; +PIXA *pixa1, *pixa2, *pixa3; + + if (nsamp > 0) { + pixa1 = l_bootnum_gen4(nsamp); + if (debug) { + pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, + 2, 6, 0xff000000); + pixDisplay(pix1, 0, 0); + pixDestroy(&pix1); + } + return pixa1; + } + + /* Else, generate from 3 pixa */ + pixa1 = l_bootnum_gen1(); + pixa2 = l_bootnum_gen2(); + pixa3 = l_bootnum_gen3(); + if (debug) { + pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 10, 2, 6, 0xff000000); + pix2 = pixaDisplayTiledWithText(pixa2, 1500, 1.0, 10, 2, 6, 0xff000000); + pix3 = pixaDisplayTiledWithText(pixa3, 1500, 1.0, 10, 2, 6, 0xff000000); + pixDisplay(pix1, 0, 0); + pixDisplay(pix2, 600, 0); + pixDisplay(pix3, 1200, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + } + pixaJoin(pixa1, pixa2, 0, -1); + pixaJoin(pixa1, pixa3, 0, -1); + pixaDestroy(&pixa2); + pixaDestroy(&pixa3); + + /* Extend by horizontal scaling */ + na1 = numaCreate(4); + numaAddNumber(na1, 0.9); + numaAddNumber(na1, 1.1); + numaAddNumber(na1, 1.2); + pixa2 = pixaExtendByScaling(pixa1, na1, L_HORIZ, 1); + + pixaDestroy(&pixa1); + numaDestroy(&na1); + return pixa2; +} + + +/*------------------------------------------------------------------------* + * Debugging * + *------------------------------------------------------------------------*/ +/*! + * \brief recogShowContent() + * + * \param[in] fp file stream + * \param[in] recog + * \param[in] index for naming of output files of template images + * \param[in] display 1 for showing template images; 0 otherwise + * \return 0 if OK, 1 on error + */ +l_ok +recogShowContent(FILE *fp, + L_RECOG *recog, + l_int32 index, + l_int32 display) +{ +char buf[128]; +l_int32 i, val, count; +PIX *pix; +NUMA *na; + + PROCNAME("recogShowContent"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + fprintf(fp, "Debug print of recog contents\n"); + fprintf(fp, " Setsize: %d\n", recog->setsize); + fprintf(fp, " Binarization threshold: %d\n", recog->threshold); + fprintf(fp, " Maximum matching y-jiggle: %d\n", recog->maxyshift); + if (recog->linew <= 0) + fprintf(fp, " Using image templates for matching\n"); + else + fprintf(fp, " Using templates with fixed line width for matching\n"); + if (recog->scalew == 0) + fprintf(fp, " No width scaling of templates\n"); + else + fprintf(fp, " Template width scaled to %d\n", recog->scalew); + if (recog->scaleh == 0) + fprintf(fp, " No height scaling of templates\n"); + else + fprintf(fp, " Template height scaled to %d\n", recog->scaleh); + fprintf(fp, " Number of samples in each class:\n"); + pixaaGetCount(recog->pixaa_u, &na); + for (i = 0; i < recog->setsize; i++) { + l_dnaGetIValue(recog->dna_tochar, i, &val); + numaGetIValue(na, i, &count); + if (val < 128) + fprintf(fp, " class %d, char %c: %d\n", i, val, count); + else + fprintf(fp, " class %d, val %d: %d\n", i, val, count); + } + numaDestroy(&na); + + if (display) { + lept_mkdir("lept/recog"); + pix = pixaaDisplayByPixa(recog->pixaa_u, 20, 20, 1000); + snprintf(buf, sizeof(buf), "/tmp/lept/recog/templates_u.%d.png", index); + pixWriteDebug(buf, pix, IFF_PNG); + pixDisplay(pix, 0, 200 * index); + pixDestroy(&pix); + if (recog->train_done) { + pix = pixaaDisplayByPixa(recog->pixaa, 20, 20, 1000); + snprintf(buf, sizeof(buf), + "/tmp/lept/recog/templates.%d.png", index); + pixWriteDebug(buf, pix, IFF_PNG); + pixDisplay(pix, 800, 200 * index); + pixDestroy(&pix); + } + } + return 0; +} + + +/*! + * \brief recogDebugAverages() + * + * \param[in] precog addr of recog + * \param[in] debug 0 no output; 1 for images; 2 for text; 3 for both + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates an image that pairs each of the input images used
+ *          in training with the average template that it is best
+ *          correlated to.  This is written into the recog.
+ *      (2) It also generates pixa_tr of all the input training images,
+ *          which can be used, e.g., in recogShowMatchesInRange().
+ *      (3) Destroys the recog if the averaging function finds any bad classes.
+ * 
+ */ +l_ok +recogDebugAverages(L_RECOG **precog, + l_int32 debug) +{ +l_int32 i, j, n, np, index; +l_float32 score; +PIX *pix1, *pix2, *pix3; +PIXA *pixa, *pixat; +PIXAA *paa1, *paa2; +L_RECOG *recog; + + PROCNAME("recogDebugAverages"); + + if (!precog) + return ERROR_INT("&recog not defined", procName, 1); + if ((recog = *precog) == NULL) + return ERROR_INT("recog not defined", procName, 1); + + /* Mark the training as finished if necessary, and make sure + * that the average templates have been built. */ + recogAverageSamples(&recog, 0); + if (!recog) + return ERROR_INT("averaging failed; recog destroyed", procName, 1); + + /* Save a pixa of all the training examples */ + paa1 = recog->pixaa; + if (!recog->pixa_tr) + recog->pixa_tr = pixaaFlattenToPixa(paa1, NULL, L_CLONE); + + /* Destroy any existing image and make a new one */ + if (recog->pixdb_ave) + pixDestroy(&recog->pixdb_ave); + n = pixaaGetCount(paa1, NULL); + paa2 = pixaaCreate(n); + for (i = 0; i < n; i++) { + pixa = pixaCreate(0); + pixat = pixaaGetPixa(paa1, i, L_CLONE); + np = pixaGetCount(pixat); + for (j = 0; j < np; j++) { + pix1 = pixaaGetPix(paa1, i, j, L_CLONE); + recogIdentifyPix(recog, pix1, &pix2); + rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, + NULL, NULL); + if (debug >= 2) + fprintf(stderr, "index = %d, score = %7.3f\n", index, score); + pix3 = pixAddBorder(pix2, 2, 1); + pixaAddPix(pixa, pix3, L_INSERT); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + pixaaAddPixa(paa2, pixa, L_INSERT); + pixaDestroy(&pixat); + } + recog->pixdb_ave = pixaaDisplayByPixa(paa2, 20, 20, 2500); + if (debug % 2) { + lept_mkdir("lept/recog"); + pixWriteDebug("/tmp/lept/recog/templ_match.png", recog->pixdb_ave, + IFF_PNG); + pixDisplay(recog->pixdb_ave, 100, 100); + } + + pixaaDestroy(&paa2); + return 0; +} + + +/*! + * \brief recogShowAverageTemplates() + * + * \param[in] recog + * \return 0 on success, 1 on failure + * + *
+ * Notes:
+ *      (1) This debug routine generates a display of the averaged templates,
+ *          both scaled and unscaled, with the centroid visible in red.
+ * 
+ */ +l_int32 +recogShowAverageTemplates(L_RECOG *recog) +{ +l_int32 i, size; +l_float32 x, y; +PIX *pix1, *pix2, *pixr; +PIXA *pixat, *pixadb; + + PROCNAME("recogShowAverageTemplates"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + + fprintf(stderr, "min/max width_u = (%d,%d); min/max height_u = (%d,%d)\n", + recog->minwidth_u, recog->maxwidth_u, + recog->minheight_u, recog->maxheight_u); + fprintf(stderr, "min splitw = %d, max splith = %d\n", + recog->min_splitw, recog->max_splith); + + pixaDestroy(&recog->pixadb_ave); + + pixr = pixCreate(3, 3, 32); /* 3x3 red square for centroid location */ + pixSetAllArbitrary(pixr, 0xff000000); + pixadb = pixaCreate(2); + + /* Unscaled bitmaps */ + size = recog->setsize; + pixat = pixaCreate(size); + for (i = 0; i < size; i++) { + if ((pix1 = pixaGetPix(recog->pixa_u, i, L_CLONE)) == NULL) + continue; + pix2 = pixConvertTo32(pix1); + ptaGetPt(recog->pta_u, i, &x, &y); + pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, + PIX_SRC, pixr, 0, 0); + pixaAddPix(pixat, pix2, L_INSERT); + pixDestroy(&pix1); + } + pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + pixDisplay(pix1, 100, 100); + pixaDestroy(&pixat); + + /* Scaled bitmaps */ + pixat = pixaCreate(size); + for (i = 0; i < size; i++) { + if ((pix1 = pixaGetPix(recog->pixa, i, L_CLONE)) == NULL) + continue; + pix2 = pixConvertTo32(pix1); + ptaGetPt(recog->pta, i, &x, &y); + pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, + PIX_SRC, pixr, 0, 0); + pixaAddPix(pixat, pix2, L_INSERT); + pixDestroy(&pix1); + } + pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); + pixaAddPix(pixadb, pix1, L_INSERT); + pixDisplay(pix1, 100, 100); + pixaDestroy(&pixat); + pixDestroy(&pixr); + recog->pixadb_ave = pixadb; + return 0; +} + + +/*! + * \brief pixDisplayOutliers() + * + * \param[in] pixas unscaled labeled templates + * \param[in] nas scores of templates (against class averages) + * \return pix tiled pixa with text and scores, or NULL on failure + * + *
+ * Notes:
+ *      (1) This debug routine is called from recogRemoveOutliers2(),
+ *          and takes the saved templates and their scores as input.
+ * 
+ */ +static PIX * +pixDisplayOutliers(PIXA *pixas, + NUMA *nas) +{ +char *text; +char buf[16]; +l_int32 i, n; +l_float32 fval; +PIX *pix1, *pix2; +PIXA *pixa1; + + PROCNAME("pixDisplayOutliers"); + + if (!pixas) + return (PIX *)ERROR_PTR("pixas not defined", procName, NULL); + if (!nas) + return (PIX *)ERROR_PTR("nas not defined", procName, NULL); + n = pixaGetCount(pixas); + if (numaGetCount(nas) != n) + return (PIX *)ERROR_PTR("pixas and nas sizes differ", procName, NULL); + + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixAddBlackOrWhiteBorder(pix1, 25, 25, 0, 0, L_GET_WHITE_VAL); + text = pixGetText(pix1); + numaGetFValue(nas, i, &fval); + snprintf(buf, sizeof(buf), "'%s': %5.2f", text, fval); + pixSetText(pix2, buf); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + pix1 = pixaDisplayTiledWithText(pixa1, 1500, 1.0, 20, 2, 6, 0xff000000); + pixaDestroy(&pixa1); + return pix1; +} + + +/*! + * \brief recogDisplayOutlier() + * + * \param[in] recog + * \param[in] iclass sample is in this class + * \param[in] jsamp index of sample is class i + * \param[in] maxclass index of class with closest average to sample + * \param[in] maxscore score of sample with average of class %maxclass + * \return pix sample and template images, with score, or NULL on error + * + *
+ * Notes:
+ *      (1) This shows three templates, side-by-side:
+ *          - The outlier sample
+ *          - The average template from the same class
+ *          - The average class template that best matched the outlier sample
+ * 
+ */ +static PIX * +recogDisplayOutlier(L_RECOG *recog, + l_int32 iclass, + l_int32 jsamp, + l_int32 maxclass, + l_float32 maxscore) +{ +char buf[64]; +PIX *pix1, *pix2, *pix3, *pix4, *pix5; +PIXA *pixa; + + PROCNAME("recogDisplayOutlier"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + + pix1 = pixaaGetPix(recog->pixaa, iclass, jsamp, L_CLONE); + pix2 = pixaGetPix(recog->pixa, iclass, L_CLONE); + pix3 = pixaGetPix(recog->pixa, maxclass, L_CLONE); + pixa = pixaCreate(3); + pixaAddPix(pixa, pix1, L_INSERT); + pixaAddPix(pixa, pix2, L_INSERT); + pixaAddPix(pixa, pix3, L_INSERT); + pix4 = pixaDisplayTiledInRows(pixa, 32, 400, 2.0, 0, 12, 2); + snprintf(buf, sizeof(buf), "C=%d, BAC=%d, S=%4.2f", iclass, maxclass, + maxscore); + pix5 = pixAddSingleTextblock(pix4, recog->bmf, buf, 0xff000000, + L_ADD_BELOW, NULL); + pixDestroy(&pix4); + pixaDestroy(&pixa); + return pix5; +} + + +/*! + * \brief recogShowMatchesInRange() + * + * \param[in] recog + * \param[in] pixa of 1 bpp images to match + * \param[in] minscore min score to include output + * \param[in] maxscore max score to include output + * \param[in] display 1 to display the result + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives a visual output of the best matches for a given
+ *          range of scores.  Each pair of images can optionally be
+ *          labeled with the index of the best match and the correlation.
+ *      (2) To use this, save a set of 1 bpp images (labeled or
+ *          unlabeled) that can be given to a recognizer in a pixa.
+ *          Then call this function with the pixa and parameters
+ *          to filter a range of scores.
+ * 
+ */ +l_ok +recogShowMatchesInRange(L_RECOG *recog, + PIXA *pixa, + l_float32 minscore, + l_float32 maxscore, + l_int32 display) +{ +l_int32 i, n, index, depth; +l_float32 score; +NUMA *nascore, *naindex; +PIX *pix1, *pix2; +PIXA *pixa1, *pixa2; + + PROCNAME("recogShowMatchesInRange"); + + if (!recog) + return ERROR_INT("recog not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + /* Run the recognizer on the set of images */ + n = pixaGetCount(pixa); + nascore = numaCreate(n); + naindex = numaCreate(n); + pixa1 = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixa, i, L_CLONE); + recogIdentifyPix(recog, pix1, &pix2); + rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, NULL, NULL); + numaAddNumber(nascore, score); + numaAddNumber(naindex, index); + pixaAddPix(pixa1, pix2, L_INSERT); + pixDestroy(&pix1); + } + + /* Filter the set and optionally add text to each */ + pixa2 = pixaCreate(n); + depth = 1; + for (i = 0; i < n; i++) { + numaGetFValue(nascore, i, &score); + if (score < minscore || score > maxscore) continue; + pix1 = pixaGetPix(pixa1, i, L_CLONE); + numaGetIValue(naindex, i, &index); + pix2 = recogShowMatch(recog, pix1, NULL, NULL, index, score); + if (i == 0) depth = pixGetDepth(pix2); + pixaAddPix(pixa2, pix2, L_INSERT); + pixDestroy(&pix1); + } + + /* Package it up */ + pixDestroy(&recog->pixdb_range); + if (pixaGetCount(pixa2) > 0) { + recog->pixdb_range = + pixaDisplayTiledInRows(pixa2, depth, 2500, 1.0, 0, 20, 1); + if (display) + pixDisplay(recog->pixdb_range, 300, 100); + } else { + L_INFO("no character matches in the range of scores\n", procName); + } + + pixaDestroy(&pixa1); + pixaDestroy(&pixa2); + numaDestroy(&nascore); + numaDestroy(&naindex); + return 0; +} + + +/*! + * \brief recogShowMatch() + * + * \param[in] recog + * \param[in] pix1 input pix; several possibilities + * \param[in] pix2 [optional] matching template + * \param[in] box [optional] region in pix1 for which pix2 matches + * \param[in] index index of matching template; use -1 to disable printing + * \param[in] score score of match + * \return pixd pair of images, showing input pix and best template, + * optionally with matching information, or NULL on error. + * + *
+ * Notes:
+ *      (1) pix1 can be one of these:
+ *          (a) The input pix alone, which can be either a single character
+ *              (box == NULL) or several characters that need to be
+ *              segmented.  If more than character is present, the box
+ *              region is displayed with an outline.
+ *          (b) Both the input pix and the matching template.  In this case,
+ *              pix2 and box will both be null.
+ *      (2) If the bmf has been made (by a call to recogMakeBmf())
+ *          and the index >= 0, the text field, match score and index
+ *          will be rendered; otherwise their values will be ignored.
+ * 
+ */ +PIX * +recogShowMatch(L_RECOG *recog, + PIX *pix1, + PIX *pix2, + BOX *box, + l_int32 index, + l_float32 score) +{ +char buf[32]; +char *text; +L_BMF *bmf; +PIX *pix3, *pix4, *pix5, *pixd; +PIXA *pixa; + + PROCNAME("recogShowMatch"); + + if (!recog) + return (PIX *)ERROR_PTR("recog not defined", procName, NULL); + if (!pix1) + return (PIX *)ERROR_PTR("pix1 not defined", procName, NULL); + + bmf = (recog->bmf && index >= 0) ? recog->bmf : NULL; + if (!pix2 && !box && !bmf) /* nothing to do */ + return pixCopy(NULL, pix1); + + pix3 = pixConvertTo32(pix1); + if (box) + pixRenderBoxArb(pix3, box, 1, 255, 0, 0); + + if (pix2) { + pixa = pixaCreate(2); + pixaAddPix(pixa, pix3, L_CLONE); + pixaAddPix(pixa, pix2, L_CLONE); + pix4 = pixaDisplayTiledInRows(pixa, 1, 500, 1.0, 0, 15, 0); + pixaDestroy(&pixa); + } else { + pix4 = pixCopy(NULL, pix3); + } + pixDestroy(&pix3); + + if (bmf) { + pix5 = pixAddBorderGeneral(pix4, 55, 55, 0, 0, 0xffffff00); + recogGetClassString(recog, index, &text); + snprintf(buf, sizeof(buf), "C=%s, S=%4.3f, I=%d", text, score, index); + pixd = pixAddSingleTextblock(pix5, bmf, buf, 0xff000000, + L_ADD_BELOW, NULL); + pixDestroy(&pix5); + LEPT_FREE(text); + } else { + pixd = pixClone(pix4); + } + pixDestroy(&pix4); + + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/regutils.c b/3rdparty/hgOCR/leptonica/regutils.c new file mode 100644 index 00000000..38e5dc48 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/regutils.c @@ -0,0 +1,882 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file regutils.c + *
+ *
+ *       Regression test utilities
+ *           l_int32    regTestSetup()
+ *           l_int32    regTestCleanup()
+ *           l_int32    regTestCompareValues()
+ *           l_int32    regTestCompareStrings()
+ *           l_int32    regTestComparePix()
+ *           l_int32    regTestCompareSimilarPix()
+ *           l_int32    regTestCheckFile()
+ *           l_int32    regTestCompareFiles()
+ *           l_int32    regTestWritePixAndCheck()
+ *           l_int32    regTestWriteDataAndCheck()
+ *           char      *regTestGenLocalFilename()
+ *
+ *       Static function
+ *           char      *getRootNameFromArgv0()
+ *
+ *  These functions are for testing and development.  They are not intended
+ *  for use with programs that run in a production environment, such as a
+ *  cloud service with unrestricted access.
+ *
+ *  See regutils.h for how to use this.  Here is a minimal setup:
+ *
+ *  main(int argc, char **argv) {
+ *  ...
+ *  L_REGPARAMS  *rp;
+ *
+ *      if (regTestSetup(argc, argv, &rp))
+ *          return 1;
+ *      ...
+ *      regTestWritePixAndCheck(rp, pix, IFF_PNG);  // 0
+ *      ...
+ *      return regTestCleanup(rp);
+ *  }
+ * 
+ */ + +#include +#include "allheaders.h" + +extern l_int32 NumImageFileFormatExtensions; +extern const char *ImageFileFormatExtensions[]; + +static char *getRootNameFromArgv0(const char *argv0); + + +/*--------------------------------------------------------------------* + * Regression test utilities * + *--------------------------------------------------------------------*/ +/*! + * \brief regTestSetup() + * + * \param[in] argc from invocation; can be either 1 or 2 + * \param[in] argv to regtest: %argv[1] is one of these: + * "generate", "compare", "display" + * \param[out] prp all regression params + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Call this function with the args to the reg test.  The first arg
+ *          is the name of the reg test.  There are three cases:
+ *          Case 1:
+ *              There is either only one arg, or the second arg is "compare".
+ *              This is the mode in which you run a regression test
+ *              (or a set of them), looking for failures and logging
+ *              the results to a file.  The output, which includes
+ *              logging of all reg test failures plus a SUCCESS or
+ *              FAILURE summary for each test, is appended to the file
+ *              "/tmp/lept/reg_results.txt.  For this case, as in Case 2,
+ *              the display field in rp is set to FALSE, preventing
+ *              image display.
+ *          Case 2:
+ *              The second arg is "generate".  This will cause
+ *              generation of new golden files for the reg test.
+ *              The results of the reg test are not recorded, and
+ *              the display field in rp is set to FALSE.
+ *          Case 3:
+ *              The second arg is "display".  The test will run and
+ *              files will be written.  Comparisons with golden files
+ *              will not be carried out, so the only notion of success
+ *              or failure is with tests that do not involve golden files.
+ *              The display field in rp is TRUE, and this is used by
+ *              pixDisplayWithTitle().
+ *      (2) See regutils.h for examples of usage.
+ * 
+ */ +l_ok +regTestSetup(l_int32 argc, + char **argv, + L_REGPARAMS **prp) +{ +char *testname, *vers; +char errormsg[64]; +L_REGPARAMS *rp; + + PROCNAME("regTestSetup"); + + if (argc != 1 && argc != 2) { + snprintf(errormsg, sizeof(errormsg), + "Syntax: %s [ [compare] | generate | display ]", argv[0]); + return ERROR_INT(errormsg, procName, 1); + } + + if ((testname = getRootNameFromArgv0(argv[0])) == NULL) + return ERROR_INT("invalid root", procName, 1); + + setLeptDebugOK(1); /* required for testing */ + + rp = (L_REGPARAMS *)LEPT_CALLOC(1, sizeof(L_REGPARAMS)); + *prp = rp; + rp->testname = testname; + rp->index = -1; /* increment before each test */ + + /* Initialize to true. A failure in any test is registered + * as a failure of the regression test. */ + rp->success = TRUE; + + /* Make sure the lept/regout subdirectory exists */ + lept_mkdir("lept/regout"); + + /* Only open a stream to a temp file for the 'compare' case */ + if (argc == 1 || !strcmp(argv[1], "compare")) { + rp->mode = L_REG_COMPARE; + rp->tempfile = stringNew("/tmp/lept/regout/regtest_output.txt"); + rp->fp = fopenWriteStream(rp->tempfile, "wb"); + if (rp->fp == NULL) { + rp->success = FALSE; + return ERROR_INT("stream not opened for tempfile", procName, 1); + } + } else if (!strcmp(argv[1], "generate")) { + rp->mode = L_REG_GENERATE; + lept_mkdir("lept/golden"); + } else if (!strcmp(argv[1], "display")) { + rp->mode = L_REG_DISPLAY; + rp->display = TRUE; + } else { + LEPT_FREE(rp); + snprintf(errormsg, sizeof(errormsg), + "Syntax: %s [ [generate] | compare | display ]", argv[0]); + return ERROR_INT(errormsg, procName, 1); + } + + /* Print out test name and both the leptonica and + * image libarary versions */ + fprintf(stderr, "\n////////////////////////////////////////////////\n" + "//////////////// %s_reg ///////////////\n" + "////////////////////////////////////////////////\n", + rp->testname); + vers = getLeptonicaVersion(); + fprintf(stderr, "%s : ", vers); + LEPT_FREE(vers); + vers = getImagelibVersions(); + fprintf(stderr, "%s\n", vers); + LEPT_FREE(vers); + + rp->tstart = startTimerNested(); + return 0; +} + + +/*! + * \brief regTestCleanup() + * + * \param[in] rp regression test parameters + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This copies anything written to the temporary file to the
+ *          output file /tmp/lept/reg_results.txt.
+ * 
+ */ +l_ok +regTestCleanup(L_REGPARAMS *rp) +{ +char result[512]; +char *results_file; /* success/failure output in 'compare' mode */ +char *text, *message; +l_int32 retval; +size_t nbytes; + + PROCNAME("regTestCleanup"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + + fprintf(stderr, "Time: %7.3f sec\n", stopTimerNested(rp->tstart)); + + /* If generating golden files or running in display mode, release rp */ + if (!rp->fp) { + LEPT_FREE(rp->testname); + LEPT_FREE(rp->tempfile); + LEPT_FREE(rp); + return 0; + } + + /* Compare mode: read back data from temp file */ + fclose(rp->fp); + text = (char *)l_binaryRead(rp->tempfile, &nbytes); + LEPT_FREE(rp->tempfile); + if (!text) { + rp->success = FALSE; + LEPT_FREE(rp->testname); + LEPT_FREE(rp); + return ERROR_INT("text not returned", procName, 1); + } + + /* Prepare result message */ + if (rp->success) + snprintf(result, sizeof(result), "SUCCESS: %s_reg\n", rp->testname); + else + snprintf(result, sizeof(result), "FAILURE: %s_reg\n", rp->testname); + message = stringJoin(text, result); + LEPT_FREE(text); + results_file = stringNew("/tmp/lept/reg_results.txt"); + fileAppendString(results_file, message); + retval = (rp->success) ? 0 : 1; + LEPT_FREE(results_file); + LEPT_FREE(message); + + LEPT_FREE(rp->testname); + LEPT_FREE(rp); + return retval; +} + + +/*! + * \brief regTestCompareValues() + * + * \param[in] rp regtest parameters + * \param[in] val1 typ. the golden value + * \param[in] val2 typ. the value computed + * \param[in] delta allowed max absolute difference + * \return 0 if OK, 1 on error a failure in comparison is not an error + */ +l_ok +regTestCompareValues(L_REGPARAMS *rp, + l_float32 val1, + l_float32 val2, + l_float32 delta) +{ +l_float32 diff; + + PROCNAME("regTestCompareValues"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + + rp->index++; + diff = L_ABS(val2 - val1); + + /* Record on failure */ + if (diff > delta) { + if (rp->fp) { + fprintf(rp->fp, + "Failure in %s_reg: value comparison for index %d\n" + "difference = %f but allowed delta = %f\n", + rp->testname, rp->index, diff, delta); + } + fprintf(stderr, + "Failure in %s_reg: value comparison for index %d\n" + "difference = %f but allowed delta = %f\n", + rp->testname, rp->index, diff, delta); + rp->success = FALSE; + } + return 0; +} + + +/*! + * \brief regTestCompareStrings() + * + * \param[in] rp regtest parameters + * \param[in] string1 typ. the expected string + * \param[in] bytes1 size of string1 + * \param[in] string2 typ. the computed string + * \param[in] bytes2 size of string2 + * \return 0 if OK, 1 on error a failure in comparison is not an error + */ +l_ok +regTestCompareStrings(L_REGPARAMS *rp, + l_uint8 *string1, + size_t bytes1, + l_uint8 *string2, + size_t bytes2) +{ +l_int32 same; +char buf[256]; + + PROCNAME("regTestCompareStrings"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + + rp->index++; + l_binaryCompare(string1, bytes1, string2, bytes2, &same); + + /* Output on failure */ + if (!same) { + /* Write the two strings to file */ + snprintf(buf, sizeof(buf), "/tmp/lept/regout/string1_%d_%zu", + rp->index, bytes1); + l_binaryWrite(buf, "w", string1, bytes1); + snprintf(buf, sizeof(buf), "/tmp/lept/regout/string2_%d_%zu", + rp->index, bytes2); + l_binaryWrite(buf, "w", string2, bytes2); + + /* Report comparison failure */ + snprintf(buf, sizeof(buf), "/tmp/lept/regout/string*_%d_*", rp->index); + if (rp->fp) { + fprintf(rp->fp, + "Failure in %s_reg: string comp for index %d; " + "written to %s\n", rp->testname, rp->index, buf); + } + fprintf(stderr, + "Failure in %s_reg: string comp for index %d; " + "written to %s\n", rp->testname, rp->index, buf); + rp->success = FALSE; + } + return 0; +} + + +/*! + * \brief regTestComparePix() + * + * \param[in] rp regtest parameters + * \param[in] pix1, pix2 to be tested for equality + * \return 0 if OK, 1 on error a failure in comparison is not an error + * + *
+ * Notes:
+ *      (1) This function compares two pix for equality.  On failure,
+ *          this writes to stderr.
+ * 
+ */ +l_ok +regTestComparePix(L_REGPARAMS *rp, + PIX *pix1, + PIX *pix2) +{ +l_int32 same; + + PROCNAME("regTestComparePix"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (!pix1 || !pix2) { + rp->success = FALSE; + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + } + + rp->index++; + pixEqual(pix1, pix2, &same); + + /* Record on failure */ + if (!same) { + if (rp->fp) { + fprintf(rp->fp, "Failure in %s_reg: pix comparison for index %d\n", + rp->testname, rp->index); + } + fprintf(stderr, "Failure in %s_reg: pix comparison for index %d\n", + rp->testname, rp->index); + rp->success = FALSE; + } + return 0; +} + + +/*! + * \brief regTestCompareSimilarPix() + * + * \param[in] rp regtest parameters + * \param[in] pix1, pix2 to be tested for near equality + * \param[in] mindiff minimum pixel difference to be counted; > 0 + * \param[in] maxfract maximum fraction of pixels allowed to have + * diff greater than or equal to mindiff + * \param[in] printstats use 1 to print normalized histogram to stderr + * \return 0 if OK, 1 on error a failure in similarity comparison + * is not an error + * + *
+ * Notes:
+ *      (1) This function compares two pix for near equality.  On failure,
+ *          this writes to stderr.
+ *      (2) The pix are similar if the fraction of non-conforming pixels
+ *          does not exceed %maxfract.  Pixels are non-conforming if
+ *          the difference in pixel values equals or exceeds %mindiff.
+ *          Typical values might be %mindiff = 15 and %maxfract = 0.01.
+ *      (3) The input images must have the same size and depth.  The
+ *          pixels for comparison are typically subsampled from the images.
+ *      (4) Normally, use %printstats = 0.  In debugging mode, to see
+ *          the relation between %mindiff and the minimum value of
+ *          %maxfract for success, set this to 1.
+ * 
+ */ +l_ok +regTestCompareSimilarPix(L_REGPARAMS *rp, + PIX *pix1, + PIX *pix2, + l_int32 mindiff, + l_float32 maxfract, + l_int32 printstats) +{ +l_int32 w, h, factor, similar; + + PROCNAME("regTestCompareSimilarPix"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (!pix1 || !pix2) { + rp->success = FALSE; + return ERROR_INT("pix1 and pix2 not both defined", procName, 1); + } + + rp->index++; + pixGetDimensions(pix1, &w, &h, NULL); + factor = L_MAX(w, h) / 400; + factor = L_MAX(1, L_MIN(factor, 4)); /* between 1 and 4 */ + pixTestForSimilarity(pix1, pix2, factor, mindiff, maxfract, 0.0, + &similar, printstats); + + /* Record on failure */ + if (!similar) { + if (rp->fp) { + fprintf(rp->fp, + "Failure in %s_reg: pix similarity comp for index %d\n", + rp->testname, rp->index); + } + fprintf(stderr, "Failure in %s_reg: pix similarity comp for index %d\n", + rp->testname, rp->index); + rp->success = FALSE; + } + return 0; +} + + +/*! + * \brief regTestCheckFile() + * + * \param[in] rp regtest parameters + * \param[in] localname name of output file from reg test + * \return 0 if OK, 1 on error a failure in comparison is not an error + * + *
+ * Notes:
+ *      (1) This function does one of three things, depending on the mode:
+ *           * "generate": makes a "golden" file as a copy of %localname.
+ *           * "compare": compares %localname contents with the golden file
+ *           * "display": this does nothing
+ *      (2) The canonical format of the golden filenames is:
+ *            /tmp/lept/golden/[root of main name]_golden.[index].
+ *                                                       [ext of localname]
+ *          e.g.,
+ *             /tmp/lept/golden/maze_golden.0.png
+ *      (3) The local file can be made in any subdirectory of /tmp/lept,
+ *          including /tmp/lept/regout/.
+ *      (4) It is important to add an extension to the local name, such as
+ *             /tmp/lept/maze/file1.png    (extension ".png")
+ *          because the extension is added to the name of the golden file.
+ * 
+ */ +l_ok +regTestCheckFile(L_REGPARAMS *rp, + const char *localname) +{ +char *ext; +char namebuf[256]; +l_int32 ret, same, format; +PIX *pix1, *pix2; + + PROCNAME("regTestCheckFile"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (!localname) { + rp->success = FALSE; + return ERROR_INT("local name not defined", procName, 1); + } + if (rp->mode != L_REG_GENERATE && rp->mode != L_REG_COMPARE && + rp->mode != L_REG_DISPLAY) { + rp->success = FALSE; + return ERROR_INT("invalid mode", procName, 1); + } + rp->index++; + + /* If display mode, no generation and no testing */ + if (rp->mode == L_REG_DISPLAY) return 0; + + /* Generate the golden file name; used in 'generate' and 'compare' */ + splitPathAtExtension(localname, NULL, &ext); + snprintf(namebuf, sizeof(namebuf), "/tmp/lept/golden/%s_golden.%02d%s", + rp->testname, rp->index, ext); + LEPT_FREE(ext); + + /* Generate mode. No testing. */ + if (rp->mode == L_REG_GENERATE) { + /* Save the file as a golden file */ + ret = fileCopy(localname, namebuf); +#if 0 /* Enable for details on writing of golden files */ + if (!ret) { + char *local = genPathname(localname, NULL); + char *golden = genPathname(namebuf, NULL); + L_INFO("Copy: %s to %s\n", procName, local, golden); + LEPT_FREE(local); + LEPT_FREE(golden); + } +#endif + return ret; + } + + /* Compare mode: test and record on failure. This can be used + * for all image formats, as well as for all files of serialized + * data, such as boxa, pta, etc. In all cases except for + * GIF compressed images, we compare the files to see if they + * are identical. GIF doesn't support RGB images; to write + * a 32 bpp RGB image in GIF, we do a lossy quantization to + * 256 colors, so the cycle read-RGB/write-GIF is not idempotent. + * And although the read/write cycle for GIF images with bpp <= 8 + * is idempotent in the image pixels, it is not idempotent in the + * actual file bytes; tests comparing file bytes before and after + * a GIF read/write cycle will fail. So for GIF we uncompress + * the two images and compare the actual pixels. PNG is both + * lossless and idempotent in file bytes on read/write, so it is + * not necessary to compare pixels. (Comparing pixels requires + * decompression, and thus would increase the regression test + * time. JPEG is lossy and not idempotent in the image pixels, + * so no tests are constructed that would require it. */ + findFileFormat(localname, &format); + if (format == IFF_GIF) { + same = 0; + pix1 = pixRead(localname); + pix2 = pixRead(namebuf); + pixEqual(pix1, pix2, &same); + pixDestroy(&pix1); + pixDestroy(&pix2); + } else { + filesAreIdentical(localname, namebuf, &same); + } + if (!same) { + fprintf(rp->fp, "Failure in %s_reg, index %d: comparing %s with %s\n", + rp->testname, rp->index, localname, namebuf); + fprintf(stderr, "Failure in %s_reg, index %d: comparing %s with %s\n", + rp->testname, rp->index, localname, namebuf); + rp->success = FALSE; + } + + return 0; +} + + +/*! + * \brief regTestCompareFiles() + * + * \param[in] rp regtest parameters + * \param[in] index1 of one output file from reg test + * \param[in] index2 of another output file from reg test + * \return 0 if OK, 1 on error a failure in comparison is not an error + * + *
+ * Notes:
+ *      (1) This only does something in "compare" mode.
+ *      (2) The canonical format of the golden filenames is:
+ *            /tmp/lept/golden/[root of main name]_golden.[index].
+ *                                                      [ext of localname]
+ *          e.g.,
+ *            /tmp/lept/golden/maze_golden.0.png
+ * 
+ */ +l_ok +regTestCompareFiles(L_REGPARAMS *rp, + l_int32 index1, + l_int32 index2) +{ +char *name1, *name2; +char namebuf[256]; +l_int32 same; +SARRAY *sa; + + PROCNAME("regTestCompareFiles"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (index1 < 0 || index2 < 0) { + rp->success = FALSE; + return ERROR_INT("index1 and/or index2 is negative", procName, 1); + } + if (index1 == index2) { + rp->success = FALSE; + return ERROR_INT("index1 must differ from index2", procName, 1); + } + + rp->index++; + if (rp->mode != L_REG_COMPARE) return 0; + + /* Generate the golden file names */ + snprintf(namebuf, sizeof(namebuf), "%s_golden.%02d", rp->testname, index1); + sa = getSortedPathnamesInDirectory("/tmp/lept/golden", namebuf, 0, 0); + if (sarrayGetCount(sa) != 1) { + sarrayDestroy(&sa); + rp->success = FALSE; + L_ERROR("golden file %s not found\n", procName, namebuf); + return 1; + } + name1 = sarrayGetString(sa, 0, L_COPY); + sarrayDestroy(&sa); + + snprintf(namebuf, sizeof(namebuf), "%s_golden.%02d", rp->testname, index2); + sa = getSortedPathnamesInDirectory("/tmp/lept/golden", namebuf, 0, 0); + if (sarrayGetCount(sa) != 1) { + sarrayDestroy(&sa); + rp->success = FALSE; + LEPT_FREE(name1); + L_ERROR("golden file %s not found\n", procName, namebuf); + return 1; + } + name2 = sarrayGetString(sa, 0, L_COPY); + sarrayDestroy(&sa); + + /* Test and record on failure */ + filesAreIdentical(name1, name2, &same); + if (!same) { + fprintf(rp->fp, + "Failure in %s_reg, index %d: comparing %s with %s\n", + rp->testname, rp->index, name1, name2); + fprintf(stderr, + "Failure in %s_reg, index %d: comparing %s with %s\n", + rp->testname, rp->index, name1, name2); + rp->success = FALSE; + } + + LEPT_FREE(name1); + LEPT_FREE(name2); + return 0; +} + + +/*! + * \brief regTestWritePixAndCheck() + * + * \param[in] rp regtest parameters + * \param[in] pix to be written + * \param[in] format of output pix + * \return 0 if OK, 1 on error a failure in comparison is not an error + * + *
+ * Notes:
+ *      (1) This function makes it easy to write the pix in a numbered
+ *          sequence of files, and either to:
+ *             (a) write the golden file ("generate" arg to regression test)
+ *             (b) make a local file and "compare" with the golden file
+ *             (c) make a local file and "display" the results
+ *      (2) The canonical format of the local filename is:
+ *            /tmp/lept/regout/[root of main name].[count].[format extension]
+ *          e.g., for scale_reg,
+ *            /tmp/lept/regout/scale.0.png
+ *          The golden file name mirrors this in the usual way.
+ *      (3) The check is done between the written files, which requires
+ *          the files to be identical. The exception is for GIF, which
+ *          only requires that all pixels in the decoded pix are identical.
+ * 
+ */ +l_ok +regTestWritePixAndCheck(L_REGPARAMS *rp, + PIX *pix, + l_int32 format) +{ +char namebuf[256]; + + PROCNAME("regTestWritePixAndCheck"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (!pix) { + rp->success = FALSE; + return ERROR_INT("pix not defined", procName, 1); + } + if (format < 0 || format >= NumImageFileFormatExtensions) { + rp->success = FALSE; + return ERROR_INT("invalid format", procName, 1); + } + + /* Generate the local file name */ + snprintf(namebuf, sizeof(namebuf), "/tmp/lept/regout/%s.%02d.%s", + rp->testname, rp->index + 1, ImageFileFormatExtensions[format]); + + /* Write the local file */ + if (pixGetDepth(pix) < 8) + pixSetPadBits(pix, 0); + pixWrite(namebuf, pix, format); + + /* Either write the golden file ("generate") or check the + local file against an existing golden file ("compare") */ + regTestCheckFile(rp, namebuf); + + return 0; +} + + +/*! + * \brief regTestWriteDataAndCheck() + * + * \param[in] rp regtest parameters + * \param[in] data to be written + * \param[in] nbytes of data to be written + * \param[in] ext filename extension (e.g.: "ba", "pta") + * \return 0 if OK, 1 on error a failure in comparison is not an error + * + *
+ * Notes:
+ *      (1) This function makes it easy to write data in a numbered
+ *          sequence of files, and either to:
+ *             (a) write the golden file ("generate" arg to regression test)
+ *             (b) make a local file and "compare" with the golden file
+ *             (c) make a local file and "display" the results
+ *      (2) The canonical format of the local filename is:
+ *            /tmp/lept/regout/[root of main name].[count].[ext]
+ *          e.g., for the first boxaa in quadtree_reg,
+ *            /tmp/lept/regout/quadtree.0.baa
+ *          The golden file name mirrors this in the usual way.
+ *      (3) The data can be anything.  It is most useful for serialized
+ *          output of data, such as boxa, pta, etc.
+ *      (4) The file extension is arbitrary.  It is included simply
+ *          to make the content type obvious when examining written files.
+ *      (5) The check is done between the written files, which requires
+ *          the files to be identical.
+ * 
+ */ +l_ok +regTestWriteDataAndCheck(L_REGPARAMS *rp, + void *data, + size_t nbytes, + const char *ext) +{ +char namebuf[256]; + + PROCNAME("regTestWriteDataAndCheck"); + + if (!rp) + return ERROR_INT("rp not defined", procName, 1); + if (!data || nbytes == 0) { + rp->success = FALSE; + return ERROR_INT("data not defined or size == 0", procName, 1); + } + + /* Generate the local file name */ + snprintf(namebuf, sizeof(namebuf), "/tmp/lept/regout/%s.%02d.%s", + rp->testname, rp->index + 1, ext); + + /* Write the local file */ + l_binaryWrite(namebuf, "w", data, nbytes); + + /* Either write the golden file ("generate") or check the + local file against an existing golden file ("compare") */ + regTestCheckFile(rp, namebuf); + return 0; +} + + +/*! + * \brief regTestGenLocalFilename() + * + * \param[in] rp regtest parameters + * \param[in] index use -1 for current index + * \param[in] format of image; e.g., IFF_PNG + * \return filename if OK, or NULL on error + * + *
+ * Notes:
+ *      (1) This is used to get the name of a file in the regout
+ *          subdirectory, that has been made and is used to test against
+ *          the golden file.  You can either specify a particular index
+ *          value, or with %index == -1, this returns the most recently
+ *          written file.  The latter case lets you read a pix from a
+ *          file that has just been written with regTestWritePixAndCheck(),
+ *          which is useful for testing formatted read/write functions.
+ *
+ * 
+ */ +char * +regTestGenLocalFilename(L_REGPARAMS *rp, + l_int32 index, + l_int32 format) +{ +char buf[64]; +l_int32 ind; + + PROCNAME("regTestGenLocalFilename"); + + if (!rp) + return (char *)ERROR_PTR("rp not defined", procName, NULL); + + ind = (index >= 0) ? index : rp->index; + snprintf(buf, sizeof(buf), "/tmp/lept/regout/%s.%02d.%s", + rp->testname, ind, ImageFileFormatExtensions[format]); + return stringNew(buf); +} + + +/*! + * \brief getRootNameFromArgv0() + * + * \param[in] argv0 + * \return root name without the '_reg', or NULL on error + * + *
+ * Notes:
+ *      (1) For example, from psioseg_reg, we want to extract
+ *          just 'psioseg' as the root.
+ *      (2) In unix with autotools, the executable is not X,
+ *          but ./.libs/lt-X.   So in addition to stripping out the
+ *          last 4 characters of the tail, we have to check for
+ *          the '-' and strip out the "lt-" prefix if we find it.
+ * 
+ */ +static char * +getRootNameFromArgv0(const char *argv0) +{ +l_int32 len; +char *root; + + PROCNAME("getRootNameFromArgv0"); + + splitPathAtDirectory(argv0, NULL, &root); + if ((len = strlen(root)) <= 4) { + LEPT_FREE(root); + return (char *)ERROR_PTR("invalid argv0; too small", procName, NULL); + } + +#ifndef _WIN32 + { + char *newroot; + l_int32 loc; + if (stringFindSubstr(root, "-", &loc)) { + newroot = stringNew(root + loc + 1); /* strip out "lt-" */ + LEPT_FREE(root); + root = newroot; + len = strlen(root); + } + len -= 4; /* remove the "_reg" suffix */ + } +#else + if (strstr(root, ".exe") != NULL) + len -= 4; + if (strstr(root, "_reg") == root + len - 4) + len -= 4; +#endif /* ! _WIN32 */ + + root[len] = '\0'; /* terminate */ + return root; +} diff --git a/3rdparty/hgOCR/leptonica/regutils.h b/3rdparty/hgOCR/leptonica/regutils.h new file mode 100644 index 00000000..2f1d5e4a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/regutils.h @@ -0,0 +1,141 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_REGUTILS_H +#define LEPTONICA_REGUTILS_H + +/*! + * \file regutils.h + * + *
+ *   Contains this regression test parameter packaging struct
+ *       struct L_RegParams
+ *
+ *   The regression test utility allows you to write regression tests
+ *   that compare results with existing "golden files" and with
+ *   compiled in data.
+ *
+ *   Regression tests can be called in three ways.
+ *   For example, for distance_reg:
+ *
+ *       Case 1: distance_reg [compare]
+ *           This runs the test against the set of golden files.  It
+ *           appends to 'outfile.txt' either "SUCCESS" or "FAILURE",
+ *           as well as the details of any parts of the test that failed.
+ *           It writes to a temporary file stream (fp).
+ *           Using 'compare' on the command line is optional.
+ *
+ *       Case 2: distance_reg generate
+ *           This generates golden files in /tmp for the reg test.
+ *
+ *       Case 3: distance_reg display
+ *           This runs the test but makes no comparison of the output
+ *           against the set of golden files.  In addition, this displays
+ *           images and plots that are specified in the test under
+ *           control of the display variable.  Display is enabled only
+ *           for this case.
+ *
+ *   Regression tests follow the pattern given below.  Tests are
+ *   automatically numbered sequentially, and it is convenient to
+ *   comment each with a number to keep track (for comparison tests
+ *   and for debugging).  In an actual case, comparisons of pix and
+ *   of files can occur in any order.  We give a specific order here
+ *   for clarity.
+ *
+ *       L_REGPARAMS  *rp;  // holds data required by the test functions
+ *
+ *       // Setup variables; optionally open stream
+ *       if (regTestSetup(argc, argv, &rp))
+ *           return 1;
+ *
+ *       // Test pairs of generated pix for identity.  This compares
+ *       // two pix; no golden file is generated.
+ *       regTestComparePix(rp, pix1, pix2);  // 0
+ *
+ *       // Test pairs of generated pix for similarity.  This compares
+ *       // two pix; no golden file is generated.  The last arg determines
+ *       // if stats are to be written to stderr.
+ *       regTestCompareSimilarPix(rp, pix1, pix2, 15, 0.001, 0);  // 1
+ *
+ *       // Generation of  outputs and testing for identity
+ *       // These files can be anything, of course.
+ *       regTestCheckFile(rp, );  // 2
+ *       regTestCheckFile(rp, );  // 3
+ *
+ *       // Test pairs of output golden files for identity.  Here we
+ *       // are comparing golden files 2 and 3.
+ *       regTestCompareFiles(rp, 2, 3);  // 4
+ *
+ *       // "Write and check".  This writes a pix using a canonical
+ *       // formulation for the local filename and either:
+ *       //     case 1: generates a golden file
+ *       //     case 2: compares the local file with a golden file
+ *       //     case 3: generates local files and displays
+ *       // Here we write the pix compressed with png and jpeg, respectively;
+ *       // Then check against the golden file.  The internal %index
+ *       // is incremented; it is embedded in the local filename and,
+ *       // if generating, in the golden file as well.
+ *       regTestWritePixAndCheck(rp, pix1, IFF_PNG);  // 5
+ *       regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG);  // 6
+ *
+ *       // Display if reg test was called in 'display' mode
+ *       pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display);
+ *
+ *       // Clean up and output result
+ *       regTestCleanup(rp);
+ * 
+ */ + +/*----------------------------------------------------------------------------* + * Regression test parameter packer * + *----------------------------------------------------------------------------*/ + +/*! Regression test parameter packer */ +struct L_RegParams +{ + FILE *fp; /*!< stream to temporary output file for compare mode */ + char *testname; /*!< name of test, without '_reg' */ + char *tempfile; /*!< name of temp file for compare mode output */ + l_int32 mode; /*!< generate, compare or display */ + l_int32 index; /*!< index into saved files for this test; 0-based */ + l_int32 success; /*!< overall result of the test */ + l_int32 display; /*!< 1 if in display mode; 0 otherwise */ + L_TIMER tstart; /*!< marks beginning of the reg test */ +}; +typedef struct L_RegParams L_REGPARAMS; + + + /*! Running modes for the test */ +/*! Regtest Mode */ +enum { + L_REG_GENERATE = 0, + L_REG_COMPARE = 1, + L_REG_DISPLAY = 2 +}; + + +#endif /* LEPTONICA_REGUTILS_H */ + diff --git a/3rdparty/hgOCR/leptonica/rop.c b/3rdparty/hgOCR/leptonica/rop.c new file mode 100644 index 00000000..e20751be --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rop.c @@ -0,0 +1,516 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file rop.c + *
+ *      General rasterop
+ *           l_int32    pixRasterop()
+ *
+ *      In-place full band translation
+ *           l_int32    pixRasteropVip()
+ *           l_int32    pixRasteropHip()
+ *
+ *      Full image translation (general and in-place)
+ *           l_int32    pixTranslate()
+ *           l_int32    pixRasteropIP()
+ *
+ *      Full image rasterop with no translation
+ *           l_int32    pixRasteropFullImage()
+ * 
+ */ + +#include +#include "allheaders.h" + +/*--------------------------------------------------------------------* + * General rasterop (basic pix interface) * + *--------------------------------------------------------------------*/ +/*! + * \brief pixRasterop() + * + * \param[in] pixd dest pix + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \param[in] pixs src pix + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return 0 if OK; 1 on error. + * + *
+ * Notes:
+ *      (1) This has the standard set of 9 args for rasterop.
+ *          This function is your friend; it is worth memorizing!
+ *      (2) If the operation involves only dest, this calls
+ *          rasteropUniLow().  Otherwise, checks depth of the
+ *          src and dest, and if they match, calls rasteropLow().
+ *      (3) For the two-image operation, where both pixs and pixd
+ *          are defined, they are typically different images.  However
+ *          there are cases, such as pixSetMirroredBorder(), where
+ *          in-place operations can be done, blitting pixels from
+ *          one part of pixd to another.  Consequently, we permit
+ *          such operations.  If you use them, be sure that there
+ *          is no overlap between the source and destination rectangles
+ *          in pixd (!)
+ *
+ *  Background:
+ *  -----------
+ *
+ *  There are 18 operations, described by the op codes in pix.h.
+ *
+ *  One, PIX_DST, is a no-op.
+ *
+ *  Three, PIX_CLR, PIX_SET, and PIX_NOT(PIX_DST) operate only on the dest.
+ *  These are handled by the low-level rasteropUniLow().
+ *
+ *  The other 14 involve the both the src and the dest, and depend on
+ *  the bit values of either just the src or the bit values of both
+ *  src and dest.  They are handled by rasteropLow():
+ *
+ *          PIX_SRC                             s
+ *          PIX_NOT(PIX_SRC)                   ~s
+ *          PIX_SRC | PIX_DST                   s | d
+ *          PIX_SRC & PIX_DST                   s & d
+ *          PIX_SRC ^ PIX_DST                   s ^ d
+ *          PIX_NOT(PIX_SRC) | PIX_DST         ~s | d
+ *          PIX_NOT(PIX_SRC) & PIX_DST         ~s & d
+ *          PIX_NOT(PIX_SRC) ^ PIX_DST         ~s ^ d
+ *          PIX_SRC | PIX_NOT(PIX_DST)          s | ~d
+ *          PIX_SRC & PIX_NOT(PIX_DST)          s & ~d
+ *          PIX_SRC ^ PIX_NOT(PIX_DST)          s ^ ~d
+ *          PIX_NOT(PIX_SRC | PIX_DST)         ~(s | d)
+ *          PIX_NOT(PIX_SRC & PIX_DST)         ~(s & d)
+ *          PIX_NOT(PIX_SRC ^ PIX_DST)         ~(s ^ d)
+ *
+ *  Each of these is implemented with one of three low-level
+ *  functions, depending on the alignment of the left edge
+ *  of the src and dest rectangles:
+ *      * a fastest implementation if both left edges are
+ *        (32-bit) word aligned
+ *      * a very slightly slower implementation if both left
+ *        edges have the same relative (32-bit) word alignment
+ *      * the general routine that is invoked when
+ *        both left edges have different word alignment
+ *
+ *  Of the 14 binary rasterops above, only 12 are unique
+ *  logical combinations (out of a possible 16) of src
+ *  and dst bits:
+ *
+ *        (sd)         (11)   (10)   (01)   (00)
+ *   -----------------------------------------------
+ *         s            1      1      0      0
+ *        ~s            0      1      0      1
+ *       s | d          1      1      1      0
+ *       s & d          1      0      0      0
+ *       s ^ d          0      1      1      0
+ *      ~s | d          1      0      1      1
+ *      ~s & d          0      0      1      0
+ *      ~s ^ d          1      0      0      1
+ *       s | ~d         1      1      0      1
+ *       s & ~d         0      1      0      0
+ *       s ^ ~d         1      0      0      1
+ *      ~(s | d)        0      0      0      1
+ *      ~(s & d)        0      1      1      1
+ *      ~(s ^ d)        1      0      0      1
+ *
+ *  Note that the following three operations are equivalent:
+ *      ~(s ^ d)
+ *      ~s ^ d
+ *      s ^ ~d
+ *  and in the implementation, we call them out with the first form;
+ *  namely, ~(s ^ d).
+ *
+ *  Of the 16 possible binary combinations of src and dest bits,
+ *  the remaining 4 unique ones are independent of the src bit.
+ *  They depend on either just the dest bit or on neither
+ *  the src nor dest bits:
+ *
+ *         d            1      0      1      0    (indep. of s)
+ *        ~d            0      1      0      1    (indep. of s)
+ *        CLR           0      0      0      0    (indep. of both s & d)
+ *        SET           1      1      1      1    (indep. of both s & d)
+ *
+ *  As mentioned above, three of these are implemented by
+ *  rasteropUniLow(), and one is a no-op.
+ *
+ *  How can these operation codes be represented by bits
+ *  in such a way that when the basic operations are performed
+ *  on the bits the results are unique for unique
+ *  operations, and mimic the logic table given above?
+ *
+ *  The answer is to choose a particular order of the pairings:
+ *         (sd)         (11)   (10)   (01)   (00)
+ *  (which happens to be the same as in the above table)
+ *  and to translate the result into 4-bit representations
+ *  of s and d.  For example, the Sun rasterop choice
+ *  (omitting the extra bit for clipping) is
+ *
+ *      PIX_SRC      0xc
+ *      PIX_DST      0xa
+ *
+ *  This corresponds to our pairing order given above:
+ *         (sd)         (11)   (10)   (01)   (00)
+ *  where for s = 1 we get the bit pattern
+ *       PIX_SRC:        1      1      0      0     (0xc)
+ *  and for d = 1 we get the pattern
+ *       PIX_DST:         1      0      1      0    (0xa)
+ *
+ *  OK, that's the pairing order that Sun chose.  How many different
+ *  ways can we assign bit patterns to PIX_SRC and PIX_DST to get
+ *  the boolean ops to work out?  Any of the 4 pairs can be put
+ *  in the first position, any of the remaining 3 pairs can go
+ *  in the second; and one of the remaining 2 pairs can go the the third.
+ *  There is a total of 4*3*2 = 24 ways these pairs can be permuted.
+ * 
+ */ +l_ok +pixRasterop(PIX *pixd, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op, + PIX *pixs, + l_int32 sx, + l_int32 sy) +{ +l_int32 dd; + + PROCNAME("pixRasterop"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + + if (op == PIX_DST) /* no-op */ + return 0; + + /* Check if operation is only on dest */ + dd = pixGetDepth(pixd); + if (op == PIX_CLR || op == PIX_SET || op == PIX_NOT(PIX_DST)) { + rasteropUniLow(pixGetData(pixd), + pixGetWidth(pixd), pixGetHeight(pixd), dd, + pixGetWpl(pixd), + dx, dy, dw, dh, + op); + return 0; + } + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Check depth of src and dest; these must agree */ + if (dd != pixGetDepth(pixs)) + return ERROR_INT("depths of pixs and pixd differ", procName, 1); + + rasteropLow(pixGetData(pixd), + pixGetWidth(pixd), pixGetHeight(pixd), dd, + pixGetWpl(pixd), + dx, dy, dw, dh, + op, + pixGetData(pixs), + pixGetWidth(pixs), pixGetHeight(pixs), + pixGetWpl(pixs), + sx, sy); + + return 0; +} + + +/*--------------------------------------------------------------------* + * In-place full band translation * + *--------------------------------------------------------------------*/ +/*! + * \brief pixRasteropVip() + * + * \param[in] pixd in-place + * \param[in] bx left edge of vertical band + * \param[in] bw width of vertical band + * \param[in] vshift vertical shift of band; vshift > 0 is down + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This rasterop translates a vertical band of the
+ *          image either up or down, bringing in either white
+ *          or black pixels from outside the image.
+ *      (2) The vertical band extends the full height of pixd.
+ *      (3) If a colormap exists, the nearest color to white or black
+ *          is brought in.
+ * 
+ */ +l_ok +pixRasteropVip(PIX *pixd, + l_int32 bx, + l_int32 bw, + l_int32 vshift, + l_int32 incolor) +{ +l_int32 w, h, d, index, op; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixRasteropVip"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return ERROR_INT("invalid value for incolor", procName, 1); + if (bw <= 0) + return ERROR_INT("bw must be > 0", procName, 1); + + if (vshift == 0) + return 0; + + pixGetDimensions(pixd, &w, &h, &d); + rasteropVipLow(pixGetData(pixd), w, h, d, pixGetWpl(pixd), bx, bw, vshift); + + cmap = pixGetColormap(pixd); + if (!cmap) { + if ((d == 1 && incolor == L_BRING_IN_BLACK) || + (d > 1 && incolor == L_BRING_IN_WHITE)) + op = PIX_SET; + else + op = PIX_CLR; + + /* Set the pixels brought in at top or bottom */ + if (vshift > 0) + pixRasterop(pixd, bx, 0, bw, vshift, op, NULL, 0, 0); + else /* vshift < 0 */ + pixRasterop(pixd, bx, h + vshift, bw, -vshift, op, NULL, 0, 0); + return 0; + } + + /* Get the nearest index and fill with that */ + if (incolor == L_BRING_IN_BLACK) + pixcmapGetRankIntensity(cmap, 0.0, &index); + else /* white */ + pixcmapGetRankIntensity(cmap, 1.0, &index); + pixt = pixCreate(bw, L_ABS(vshift), d); + pixSetAllArbitrary(pixt, index); + if (vshift > 0) + pixRasterop(pixd, bx, 0, bw, vshift, PIX_SRC, pixt, 0, 0); + else /* vshift < 0 */ + pixRasterop(pixd, bx, h + vshift, bw, -vshift, PIX_SRC, pixt, 0, 0); + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixRasteropHip() + * + * \param[in] pixd in-place operation + * \param[in] by top of horizontal band + * \param[in] bh height of horizontal band + * \param[in] hshift horizontal shift of band; hshift > 0 is to right + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This rasterop translates a horizontal band of the
+ *          image either left or right, bringing in either white
+ *          or black pixels from outside the image.
+ *      (2) The horizontal band extends the full width of pixd.
+ *      (3) If a colormap exists, the nearest color to white or black
+ *          is brought in.
+ * 
+ */ +l_ok +pixRasteropHip(PIX *pixd, + l_int32 by, + l_int32 bh, + l_int32 hshift, + l_int32 incolor) +{ +l_int32 w, h, d, index, op; +PIX *pixt; +PIXCMAP *cmap; + + PROCNAME("pixRasteropHip"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return ERROR_INT("invalid value for incolor", procName, 1); + if (bh <= 0) + return ERROR_INT("bh must be > 0", procName, 1); + + if (hshift == 0) + return 0; + + pixGetDimensions(pixd, &w, &h, &d); + rasteropHipLow(pixGetData(pixd), h, d, pixGetWpl(pixd), by, bh, hshift); + + cmap = pixGetColormap(pixd); + if (!cmap) { + if ((d == 1 && incolor == L_BRING_IN_BLACK) || + (d > 1 && incolor == L_BRING_IN_WHITE)) + op = PIX_SET; + else + op = PIX_CLR; + + /* Set the pixels brought in at left or right */ + if (hshift > 0) + pixRasterop(pixd, 0, by, hshift, bh, op, NULL, 0, 0); + else /* hshift < 0 */ + pixRasterop(pixd, w + hshift, by, -hshift, bh, op, NULL, 0, 0); + return 0; + } + + /* Get the nearest index and fill with that */ + if (incolor == L_BRING_IN_BLACK) + pixcmapGetRankIntensity(cmap, 0.0, &index); + else /* white */ + pixcmapGetRankIntensity(cmap, 1.0, &index); + pixt = pixCreate(L_ABS(hshift), bh, d); + pixSetAllArbitrary(pixt, index); + if (hshift > 0) + pixRasterop(pixd, 0, by, hshift, bh, PIX_SRC, pixt, 0, 0); + else /* hshift < 0 */ + pixRasterop(pixd, w + hshift, by, -hshift, bh, PIX_SRC, pixt, 0, 0); + pixDestroy(&pixt); + return 0; +} + + +/*--------------------------------------------------------------------* + * Full image translation (general and in-place) * + *--------------------------------------------------------------------*/ +/*! + * \brief pixTranslate() + * + * \param[in] pixd [optional] destination: this can be null, + * equal to pixs, or different from pixs + * \param[in] pixs + * \param[in] hshift horizontal shift; hshift > 0 is to right + * \param[in] vshift vertical shift; vshift > 0 is down + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) The general pattern is:
+ *            pixd = pixTranslate(pixd, pixs, ...);
+ *          For clarity, when you know the case, use one of these:
+ *            pixd = pixTranslate(NULL, pixs, ...);  // new
+ *            pixTranslate(pixs, pixs, ...);         // in-place
+ *            pixTranslate(pixd, pixs, ...);         // to existing pixd
+ *      (2) If an existing pixd is not the same size as pixs, the
+ *          image data will be reallocated.
+ * 
+ */ +PIX * +pixTranslate(PIX *pixd, + PIX *pixs, + l_int32 hshift, + l_int32 vshift, + l_int32 incolor) +{ + PROCNAME("pixTranslate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + pixRasteropIP(pixd, hshift, vshift, incolor); + return pixd; +} + + +/*! + * \brief pixRasteropIP() + * + * \param[in] pixd in-place translation + * \param[in] hshift horizontal shift; hshift > 0 is to right + * \param[in] vshift vertical shift; vshift > 0 is down + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return 0 if OK; 1 on error + */ +l_ok +pixRasteropIP(PIX *pixd, + l_int32 hshift, + l_int32 vshift, + l_int32 incolor) +{ +l_int32 w, h; + + PROCNAME("pixRasteropIP"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + + pixGetDimensions(pixd, &w, &h, NULL); + pixRasteropHip(pixd, 0, h, hshift, incolor); + pixRasteropVip(pixd, 0, w, vshift, incolor); + + return 0; +} + + +/*--------------------------------------------------------------------* + * Full image rasterop with no shifts * + *--------------------------------------------------------------------*/ +/*! + * \brief pixRasteropFullImage() + * + * \param[in] pixd + * \param[in] pixs + * \param[in] op any of the op-codes + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      ~ this is a wrapper for a common 2-image raster operation
+ *      ~ both pixs and pixd must be defined
+ *      ~ the operation is performed with aligned UL corners of pixs and pixd
+ *      ~ the operation clips to the smallest pix; if the width or height
+ *        of pixd is larger than pixs, some pixels in pixd will be unchanged
+ * 
+ */ +l_ok +pixRasteropFullImage(PIX *pixd, + PIX *pixs, + l_int32 op) +{ + PROCNAME("pixRasteropFullImage"); + + if (!pixd) + return ERROR_INT("pixd not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), op, + pixs, 0, 0); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/roplow.c b/3rdparty/hgOCR/leptonica/roplow.c new file mode 100644 index 00000000..924fc5fb --- /dev/null +++ b/3rdparty/hgOCR/leptonica/roplow.c @@ -0,0 +1,2479 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file roplow.c + *
+ *      Low level dest-only
+ *           void            rasteropUniLow()
+ *           static void     rasteropUniWordAlignedlLow()
+ *           static void     rasteropUniGeneralLow()
+ *
+ *      Low level src and dest
+ *           void            rasteropLow()
+ *           static void     rasteropWordAlignedLow()
+ *           static void     rasteropVAlignedLow()
+ *           static void     rasteropGeneralLow()
+ *
+ *      Low level in-place full height vertical block transfer
+ *           void            rasteropVipLow()
+ *
+ *      Low level in-place full width horizontal block transfer
+ *           void            rasteropHipLow()
+ *           static void     shiftDataHorizontalLow()
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Static helpers */ +static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, + l_int32 dy, l_int32 dw, l_int32 dh, + l_int32 op); +static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, + l_int32 dy, l_int32 dw, l_int32 dh, + l_int32 op); +static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, + l_int32 dy, l_int32 dw, l_int32 dh, + l_int32 op, l_uint32 *datas, l_int32 swpl, + l_int32 sx, l_int32 sy); +static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, + l_int32 dy, l_int32 dw, l_int32 dh, + l_int32 op, l_uint32 *datas, l_int32 swpl, + l_int32 sx, l_int32 sy); +static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, + l_int32 dy, l_int32 dw, l_int32 dh, + l_int32 op, l_uint32 *datas, l_int32 swpl, + l_int32 sx, l_int32 sy); +static void shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, + l_uint32 *datas, l_int32 wpls, + l_int32 shift); + +#define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) ) + +static const l_int32 SHIFT_LEFT = 0; +static const l_int32 SHIFT_RIGHT = 1; + +static const l_uint32 lmask32[] = {0x0, + 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, + 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000, + 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, + 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, + 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, + 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00, + 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, + 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff}; + +static const l_uint32 rmask32[] = {0x0, + 0x00000001, 0x00000003, 0x00000007, 0x0000000f, + 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, + 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, + 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, + 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, + 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, + 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, + 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; + + +/*--------------------------------------------------------------------* + * Low-level dest-only rasterops * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropUniLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dpixw width of dest + * \param[in] dpixh height of dest + * \param[in] depth depth of src and dest + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \return void + * + * Action: scales width, performs clipping, checks alignment, and + * dispatches for the rasterop. + */ +void +rasteropUniLow(l_uint32 *datad, + l_int32 dpixw, + l_int32 dpixh, + l_int32 depth, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op) +{ +l_int32 dhangw, dhangh; + + /* -------------------------------------------------------* + * scale horizontal dimensions by depth + * -------------------------------------------------------*/ + if (depth != 1) { + dpixw *= depth; + dx *= depth; + dw *= depth; + } + + /* -------------------------------------------------------* + * clip rectangle to dest image + * -------------------------------------------------------*/ + /* first, clip horizontally (dx, dw) */ + if (dx < 0) { + dw += dx; /* reduce dw */ + dx = 0; + } + dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ + if (dhangw > 0) + dw -= dhangw; /* reduce dw */ + + /* then, clip vertically (dy, dh) */ + if (dy < 0) { + dh += dy; /* reduce dh */ + dy = 0; + } + dhangh = dy + dh - dpixh; /* rect ovhang dest below */ + if (dhangh > 0) + dh -= dhangh; /* reduce dh */ + + /* if clipped entirely, quit */ + if ((dw <= 0) || (dh <= 0)) + return; + + /* -------------------------------------------------------* + * dispatch to aligned or non-aligned blitters + * -------------------------------------------------------*/ + if ((dx & 31) == 0) + rasteropUniWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op); + else + rasteropUniGeneralLow(datad, dwpl, dx, dy, dw, dh, op); +} + + + +/*--------------------------------------------------------------------* + * Static low-level uni rasterop with word alignment * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropUniWordAlignedLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \return void + * + * This is called when the dest rect is left aligned + * on 32-bit word boundaries. That is: dx & 31 == 0. + * + * We make an optimized implementation of this because + * it is a common case: e.g., operating on a full dest image. + */ +static void +rasteropUniWordAlignedLow(l_uint32 *datad, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op) +{ +l_int32 nfullw; /* number of full words */ +l_uint32 *pfword; /* ptr to first word */ +l_int32 lwbits; /* number of ovrhang bits in last partial word */ +l_uint32 lwmask; /* mask for last partial word */ +l_uint32 *lined; +l_int32 i, j; + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + nfullw = dw >> 5; + lwbits = dw & 31; + if (lwbits) + lwmask = lmask32[lwbits]; + pfword = datad + dwpl * dy + (dx >> 5); + + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + switch (op) + { + case PIX_CLR: + for (i = 0; i < dh; i++) { + lined = pfword + i * dwpl; + for (j = 0; j < nfullw; j++) + *lined++ = 0x0; + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, 0x0, lwmask); + } + break; + case PIX_SET: + for (i = 0; i < dh; i++) { + lined = pfword + i * dwpl; + for (j = 0; j < nfullw; j++) + *lined++ = 0xffffffff; + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, 0xffffffff, lwmask); + } + break; + case PIX_NOT(PIX_DST): + for (i = 0; i < dh; i++) { + lined = pfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = ~(*lined); + lined++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, ~(*lined), lwmask); + } + break; + default: + fprintf(stderr, "Operation %d not permitted here!\n", op); + } +} + + +/*--------------------------------------------------------------------* + * Static low-level uni rasterop without word alignment * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropUniGeneralLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \return void + */ +static void +rasteropUniGeneralLow(l_uint32 *datad, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op) +{ +l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ +l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ +l_uint32 dfwmask; /* mask for first partial dest word */ +l_int32 dfwbits; /* first word dest bits in ovrhang */ +l_uint32 *pdfwpart; /* ptr to first partial dest word */ +l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ +l_int32 dnfullw; /* number of full words in dest */ +l_uint32 *pdfwfull; /* ptr to first full dest word */ +l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ +l_uint32 dlwmask; /* mask for last partial dest word */ +l_int32 dlwbits; /* last word dest bits in ovrhang */ +l_uint32 *pdlwpart; /* ptr to last partial dest word */ +l_int32 i, j; + + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + /* is the first word partial? */ + dfwmask = 0; + if ((dx & 31) == 0) { /* if not */ + dfwpartb = 0; + dfwbits = 0; + } else { /* if so */ + dfwpartb = 1; + dfwbits = 32 - (dx & 31); + dfwmask = rmask32[dfwbits]; + pdfwpart = datad + dwpl * dy + (dx >> 5); + } + + /* is the first word doubly partial? */ + if (dw >= dfwbits) { /* if not */ + dfwpart2b = 0; + } else { /* if so */ + dfwpart2b = 1; + dfwmask &= lmask32[32 - dfwbits + dw]; + } + + /* is there a full dest word? */ + if (dfwpart2b == 1) { /* not */ + dfwfullb = 0; + dnfullw = 0; + } else { + dnfullw = (dw - dfwbits) >> 5; + if (dnfullw == 0) { /* if not */ + dfwfullb = 0; + } else { /* if so */ + dfwfullb = 1; + if (dfwpartb) + pdfwfull = pdfwpart + 1; + else + pdfwfull = datad + dwpl * dy + (dx >> 5); + } + } + + /* is the last word partial? */ + dlwbits = (dx + dw) & 31; + if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ + dlwpartb = 0; + } else { + dlwpartb = 1; + dlwmask = lmask32[dlwbits]; + if (dfwpartb) + pdlwpart = pdfwpart + 1 + dnfullw; + else + pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; + } + + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + switch (op) + { + case PIX_CLR: + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, dfwmask); + pdfwpart += dwpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = 0x0; + pdfwfull += dwpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, dlwmask); + pdlwpart += dwpl; + } + } + break; + case PIX_SET: + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0xffffffff, dfwmask); + pdfwpart += dwpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = 0xffffffff; + pdfwfull += dwpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0xffffffff, dlwmask); + pdlwpart += dwpl; + } + } + break; + case PIX_NOT(PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*pdfwpart), dfwmask); + pdfwpart += dwpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = ~(*(pdfwfull + j)); + pdfwfull += dwpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pdlwpart), dlwmask); + pdlwpart += dwpl; + } + } + break; + default: + fprintf(stderr, "Operation %d not permitted here!\n", op); + } +} + + +/*--------------------------------------------------------------------* + * Low-level src and dest rasterops * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dpixw width of dest + * \param[in] dpixh height of dest + * \param[in] depth depth of src and dest + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \param[in] datas ptr to src image data + * \param[in] spixw width of src + * \param[in] spixh height of src + * \param[in] swpl wpl of src + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return void + * + * Action: Scales width, performs clipping, checks alignment, and + * dispatches for the rasterop. + * + * Warning: the two images must have equal depth. This is not checked. + */ +void +rasteropLow(l_uint32 *datad, + l_int32 dpixw, + l_int32 dpixh, + l_int32 depth, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op, + l_uint32 *datas, + l_int32 spixw, + l_int32 spixh, + l_int32 swpl, + l_int32 sx, + l_int32 sy) +{ +l_int32 dhangw, shangw, dhangh, shangh; + + /* -------------------------------------------------------* + * scale horizontal dimensions by depth + * -------------------------------------------------------*/ + if (depth != 1) { + dpixw *= depth; + dx *= depth; + dw *= depth; + spixw *= depth; + sx *= depth; + } + + + /* -------------------------------------------------------* + * clip to max rectangle within both src and dest + * -------------------------------------------------------*/ + /* first, clip horizontally (sx, dx, dw) */ + if (dx < 0) { + sx -= dx; /* increase sx */ + dw += dx; /* reduce dw */ + dx = 0; + } + if (sx < 0) { + dx -= sx; /* increase dx */ + dw += sx; /* reduce dw */ + sx = 0; + } + dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ + if (dhangw > 0) + dw -= dhangw; /* reduce dw */ + shangw = sx + dw - spixw; /* rect ovhang src to right */ + if (shangw > 0) + dw -= shangw; /* reduce dw */ + + /* then, clip vertically (sy, dy, dh) */ + if (dy < 0) { + sy -= dy; /* increase sy */ + dh += dy; /* reduce dh */ + dy = 0; + } + if (sy < 0) { + dy -= sy; /* increase dy */ + dh += sy; /* reduce dh */ + sy = 0; + } + dhangh = dy + dh - dpixh; /* rect ovhang dest below */ + if (dhangh > 0) + dh -= dhangh; /* reduce dh */ + shangh = sy + dh - spixh; /* rect ovhang src below */ + if (shangh > 0) + dh -= shangh; /* reduce dh */ + + /* if clipped entirely, quit */ + if ((dw <= 0) || (dh <= 0)) + return; + + /* -------------------------------------------------------* + * dispatch to aligned or non-aligned blitters + * -------------------------------------------------------*/ + if (((dx & 31) == 0) && ((sx & 31) == 0)) + rasteropWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op, + datas, swpl, sx, sy); + else if ((dx & 31) == (sx & 31)) + rasteropVAlignedLow(datad, dwpl, dx, dy, dw, dh, op, + datas, swpl, sx, sy); + else + rasteropGeneralLow(datad, dwpl, dx, dy, dw, dh, op, + datas, swpl, sx, sy); +} + + +/*--------------------------------------------------------------------* + * Static low-level rasterop with vertical word alignment * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropWordAlignedLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \param[in] datas ptr to src image data + * \param[in] swpl wpl of src + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return void + * + * This is called when both the src and dest rects + * are left aligned on 32-bit word boundaries. + * That is: dx & 31 == 0 and sx & 31 == 0 + * + * We make an optimized implementation of this because + * it is a common case: e.g., two images are rasterop'd + * starting from their UL corners 0,0. + */ +static void +rasteropWordAlignedLow(l_uint32 *datad, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op, + l_uint32 *datas, + l_int32 swpl, + l_int32 sx, + l_int32 sy) +{ +l_int32 nfullw; /* number of full words */ +l_uint32 *psfword; /* ptr to first src word */ +l_uint32 *pdfword; /* ptr to first dest word */ +l_int32 lwbits; /* number of ovrhang bits in last partial word */ +l_uint32 lwmask; /* mask for last partial word */ +l_uint32 *lines, *lined; +l_int32 i, j; + + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + nfullw = dw >> 5; + lwbits = dw & 31; + if (lwbits) + lwmask = lmask32[lwbits]; + psfword = datas + swpl * sy + (sx >> 5); + pdfword = datad + dwpl * dy + (dx >> 5); + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + switch (op) + { + case PIX_SRC: + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = *lines; + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, *lines, lwmask); + } + break; + case PIX_NOT(PIX_SRC): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = ~(*lines); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, ~(*lines), lwmask); + } + break; + case (PIX_SRC | PIX_DST): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (*lines | *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (*lines | *lined), lwmask); + } + break; + case (PIX_SRC & PIX_DST): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (*lines & *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (*lines & *lined), lwmask); + } + break; + case (PIX_SRC ^ PIX_DST): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (*lines ^ *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (*lines ^ *lined), lwmask); + } + break; + case (PIX_NOT(PIX_SRC) | PIX_DST): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (~(*lines) | *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (~(*lines) | *lined), lwmask); + } + break; + case (PIX_NOT(PIX_SRC) & PIX_DST): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (~(*lines) & *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (~(*lines) & *lined), lwmask); + } + break; + case (PIX_SRC | PIX_NOT(PIX_DST)): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (*lines | ~(*lined)); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (*lines | ~(*lined)), lwmask); + } + break; + case (PIX_SRC & PIX_NOT(PIX_DST)): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = (*lines & ~(*lined)); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, (*lines & ~(*lined)), lwmask); + } + break; + case (PIX_NOT(PIX_SRC | PIX_DST)): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = ~(*lines | *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, ~(*lines | *lined), lwmask); + } + break; + case (PIX_NOT(PIX_SRC & PIX_DST)): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = ~(*lines & *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, ~(*lines & *lined), lwmask); + } + break; + /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ + case (PIX_NOT(PIX_SRC ^ PIX_DST)): + for (i = 0; i < dh; i++) { + lines = psfword + i * swpl; + lined = pdfword + i * dwpl; + for (j = 0; j < nfullw; j++) { + *lined = ~(*lines ^ *lined); + lined++; + lines++; + } + if (lwbits) + *lined = COMBINE_PARTIAL(*lined, ~(*lines ^ *lined), lwmask); + } + break; + default: + fprintf(stderr, "Operation %d invalid\n", op); + } +} + + + +/*--------------------------------------------------------------------* + * Static low-level rasterop with vertical word alignment * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropVAlignedLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \param[in] datas ptr to src image data + * \param[in] swpl wpl of src + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return void + * + * This is called when the left side of the src and dest + * rects have the same alignment relative to 32-bit word + * boundaries; i.e., dx & 31) == (sx & 31 + */ +static void +rasteropVAlignedLow(l_uint32 *datad, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op, + l_uint32 *datas, + l_int32 swpl, + l_int32 sx, + l_int32 sy) +{ +l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ +l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ +l_uint32 dfwmask; /* mask for first partial dest word */ +l_int32 dfwbits; /* first word dest bits in ovrhang */ +l_uint32 *pdfwpart; /* ptr to first partial dest word */ +l_uint32 *psfwpart; /* ptr to first partial src word */ +l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ +l_int32 dnfullw; /* number of full words in dest */ +l_uint32 *pdfwfull; /* ptr to first full dest word */ +l_uint32 *psfwfull; /* ptr to first full src word */ +l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ +l_uint32 dlwmask; /* mask for last partial dest word */ +l_int32 dlwbits; /* last word dest bits in ovrhang */ +l_uint32 *pdlwpart; /* ptr to last partial dest word */ +l_uint32 *pslwpart; /* ptr to last partial src word */ +l_int32 i, j; + + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + /* is the first word partial? */ + dfwmask = 0; + if ((dx & 31) == 0) { /* if not */ + dfwpartb = 0; + dfwbits = 0; + } else { /* if so */ + dfwpartb = 1; + dfwbits = 32 - (dx & 31); + dfwmask = rmask32[dfwbits]; + pdfwpart = datad + dwpl * dy + (dx >> 5); + psfwpart = datas + swpl * sy + (sx >> 5); + } + + /* is the first word doubly partial? */ + if (dw >= dfwbits) { /* if not */ + dfwpart2b = 0; + } else { /* if so */ + dfwpart2b = 1; + dfwmask &= lmask32[32 - dfwbits + dw]; + } + + /* is there a full dest word? */ + if (dfwpart2b == 1) { /* not */ + dfwfullb = 0; + dnfullw = 0; + } else { + dnfullw = (dw - dfwbits) >> 5; + if (dnfullw == 0) { /* if not */ + dfwfullb = 0; + } else { /* if so */ + dfwfullb = 1; + if (dfwpartb) { + pdfwfull = pdfwpart + 1; + psfwfull = psfwpart + 1; + } else { + pdfwfull = datad + dwpl * dy + (dx >> 5); + psfwfull = datas + swpl * sy + (sx >> 5); + } + } + } + + /* is the last word partial? */ + dlwbits = (dx + dw) & 31; + if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ + dlwpartb = 0; + } else { + dlwpartb = 1; + dlwmask = lmask32[dlwbits]; + if (dfwpartb) { + pdlwpart = pdfwpart + 1 + dnfullw; + pslwpart = psfwpart + 1 + dnfullw; + } else { + pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; + pslwpart = datas + swpl * sy + (sx >> 5) + dnfullw; + } + } + + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + switch (op) + { + case PIX_SRC: + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = *(psfwfull + j); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case PIX_NOT(PIX_SRC): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = ~(*(psfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC | PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (*psfwpart | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) |= *(psfwfull + j); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (*pslwpart | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC & PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (*psfwpart & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) &= *(psfwfull + j); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (*pslwpart & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC ^ PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (*psfwpart ^ *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) ^= *(psfwfull + j); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (*pslwpart ^ *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC) | PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (~(*psfwpart) | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) |= ~(*(psfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (~(*pslwpart) | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC) & PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (~(*psfwpart) & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) &= ~(*(psfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (~(*pslwpart) & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC | PIX_NOT(PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (*psfwpart | ~(*pdfwpart)), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = *(psfwfull + j) | ~(*(pdfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (*pslwpart | ~(*pdlwpart)), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC & PIX_NOT(PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (*psfwpart & ~(*pdfwpart)), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = *(psfwfull + j) & ~(*(pdfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (*pslwpart & ~(*pdlwpart)), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC | PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(*psfwpart | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = ~(*(psfwfull + j) | *(pdfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(*pslwpart | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC & PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(*psfwpart & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = ~(*(psfwfull + j) & *(pdfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(*pslwpart & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ + case (PIX_NOT(PIX_SRC ^ PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(*psfwpart ^ *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) + *(pdfwfull + j) = ~(*(psfwfull + j) ^ *(pdfwfull + j)); + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(*pslwpart ^ *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + default: + fprintf(stderr, "Operation %x invalid\n", op); + } +} + + +/*--------------------------------------------------------------------* + * Static low-level rasterop without vertical word alignment * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropGeneralLow() + * + * \param[in] datad ptr to dest image data + * \param[in] dwpl wpl of dest + * \param[in] dx x val of UL corner of dest rectangle + * \param[in] dy y val of UL corner of dest rectangle + * \param[in] dw width of dest rectangle + * \param[in] dh height of dest rectangle + * \param[in] op op code + * \param[in] datas ptr to src image data + * \param[in] swpl wpl of src + * \param[in] sx x val of UL corner of src rectangle + * \param[in] sy y val of UL corner of src rectangle + * \return void + * + * This is called when the src and dest rects are + * do not have the same 32-bit word alignment. + * + * The method is a generalization of rasteropVAlignLow. + * There, the src image pieces were directly merged + * with the dest. Here, we shift the source bits + * to fill words that are aligned with the dest, and + * then use those "source words" exactly in place + * of the source words that were used in rasteropVAlignLow. + * + * The critical parameter is thus the shift required + * for the src. Consider the left edge of the rectangle. + * The overhang into the src and dest words are found, + * and the difference is exactly this shift. There are + * two separate cases, depending on whether the src pixels + * are shifted left or right. If the src overhang is + * larger than the dest overhang, the src is shifted to + * the right, a number of pixels equal to the shift are + * left over for filling the next dest word, if necessary. + * But if the dest overhang is larger than the src, + * the src is shifted to the left, and it may also be + * necessary to shift an equal number of pixels in from + * the next src word. However, in both cases, after + * the first partial or complete dest word has been + * filled, the next src pixels will come from a left + * shift that exhausts the pixels in the src word. + */ +static void +rasteropGeneralLow(l_uint32 *datad, + l_int32 dwpl, + l_int32 dx, + l_int32 dy, + l_int32 dw, + l_int32 dh, + l_int32 op, + l_uint32 *datas, + l_int32 swpl, + l_int32 sx, + l_int32 sy) +{ +l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ +l_int32 dfwpart2b; /* boolean (1, 0) if 1st dest word is doubly partial */ +l_uint32 dfwmask; /* mask for first partial dest word */ +l_int32 dfwbits; /* first word dest bits in overhang; 0-31 */ +l_int32 dhang; /* dest overhang in first partial word, */ + /* or 0 if dest is word aligned (same as dfwbits) */ +l_uint32 *pdfwpart; /* ptr to first partial dest word */ +l_uint32 *psfwpart; /* ptr to first partial src word */ +l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ +l_int32 dnfullw; /* number of full words in dest */ +l_uint32 *pdfwfull; /* ptr to first full dest word */ +l_uint32 *psfwfull; /* ptr to first full src word */ +l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ +l_uint32 dlwmask; /* mask for last partial dest word */ +l_int32 dlwbits; /* last word dest bits in ovrhang */ +l_uint32 *pdlwpart; /* ptr to last partial dest word */ +l_uint32 *pslwpart; /* ptr to last partial src word */ +l_uint32 sword; /* compose src word aligned with the dest words */ +l_int32 sfwbits; /* first word src bits in overhang (1-32), */ + /* or 32 if src is word aligned */ +l_int32 shang; /* source overhang in the first partial word, */ + /* or 0 if src is word aligned (not same as sfwbits) */ +l_int32 sleftshift; /* bits to shift left for source word to align */ + /* with the dest. Also the number of bits that */ + /* get shifted to the right to align with the dest. */ +l_int32 srightshift; /* bits to shift right for source word to align */ + /* with dest. Also, the number of bits that get */ + /* shifted left to align with the dest. */ +l_int32 srightmask; /* mask for selecting sleftshift bits that have */ + /* been shifted right by srightshift bits */ +l_int32 sfwshiftdir; /* either SHIFT_LEFT or SHIFT_RIGHT */ +l_int32 sfwaddb; /* boolean: do we need an additional sfw right shift? */ +l_int32 slwaddb; /* boolean: do we need an additional slw right shift? */ +l_int32 i, j; + + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + /* To get alignment of src with dst (e.g., in the + * full words) the src must do a left shift of its + * relative overhang in the current src word, + * and OR that with a right shift of + * (31 - relative overhang) from the next src word. + * We find the absolute overhangs, the relative overhangs, + * the required shifts and the src mask */ + if ((sx & 31) == 0) + shang = 0; + else + shang = 32 - (sx & 31); + if ((dx & 31) == 0) + dhang = 0; + else + dhang = 32 - (dx & 31); + + if (shang == 0 && dhang == 0) { /* this should be treated by an + aligned operation, not by + this general rasterop! */ + sleftshift = 0; + srightshift = 0; + srightmask = rmask32[0]; + } else { + if (dhang > shang) + sleftshift = dhang - shang; + else + sleftshift = 32 - (shang - dhang); + srightshift = 32 - sleftshift; + srightmask = rmask32[sleftshift]; + } + + /* is the first dest word partial? */ + dfwmask = 0; + if ((dx & 31) == 0) { /* if not */ + dfwpartb = 0; + dfwbits = 0; + } else { /* if so */ + dfwpartb = 1; + dfwbits = 32 - (dx & 31); + dfwmask = rmask32[dfwbits]; + pdfwpart = datad + dwpl * dy + (dx >> 5); + psfwpart = datas + swpl * sy + (sx >> 5); + sfwbits = 32 - (sx & 31); + if (dfwbits > sfwbits) { + sfwshiftdir = SHIFT_LEFT; /* and shift by sleftshift */ + if (dw < shang) + sfwaddb = 0; + else + sfwaddb = 1; /* and rshift in next src word by srightshift */ + } else { + sfwshiftdir = SHIFT_RIGHT; /* and shift by srightshift */ + } + } + + /* is the first dest word doubly partial? */ + if (dw >= dfwbits) { /* if not */ + dfwpart2b = 0; + } else { /* if so */ + dfwpart2b = 1; + dfwmask &= lmask32[32 - dfwbits + dw]; + } + + /* is there a full dest word? */ + if (dfwpart2b == 1) { /* not */ + dfwfullb = 0; + dnfullw = 0; + } else { + dnfullw = (dw - dfwbits) >> 5; + if (dnfullw == 0) { /* if not */ + dfwfullb = 0; + } else { /* if so */ + dfwfullb = 1; + pdfwfull = datad + dwpl * dy + ((dx + dhang) >> 5); + psfwfull = datas + swpl * sy + ((sx + dhang) >> 5); /* yes, dhang */ + } + } + + /* is the last dest word partial? */ + dlwbits = (dx + dw) & 31; + if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ + dlwpartb = 0; + } else { + dlwpartb = 1; + dlwmask = lmask32[dlwbits]; + pdlwpart = datad + dwpl * dy + ((dx + dhang) >> 5) + dnfullw; + pslwpart = datas + swpl * sy + ((sx + dhang) >> 5) + dnfullw; + if (dlwbits <= srightshift) /* must be <= here !!! */ + slwaddb = 0; /* we got enough bits from current src word */ + else + slwaddb = 1; /* must rshift in next src word by srightshift */ + } + + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + switch (op) + { + case PIX_SRC: + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, sword, dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, sword, dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case PIX_NOT(PIX_SRC): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~sword, dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = ~sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~sword, dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC | PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (sword | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) |= sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (sword | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC & PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (sword & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) &= sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (sword & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC ^ PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (sword ^ *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) ^= sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (sword ^ *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC) | PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (~sword | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) |= ~sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (~sword | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC) & PIX_DST): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (~sword & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) &= ~sword; + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (~sword & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC | PIX_NOT(PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (sword | ~(*pdfwpart)), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = sword | ~(*(pdfwfull + j)); + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (sword | ~(*pdlwpart)), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_SRC & PIX_NOT(PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + (sword & ~(*pdfwpart)), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = sword & ~(*(pdfwfull + j)); + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + (sword & ~(*pdlwpart)), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC | PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(sword | *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = ~(sword | *(pdfwfull + j)); + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(sword | *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + case (PIX_NOT(PIX_SRC & PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(sword & *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = ~(sword & *(pdfwfull + j)); + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(sword & *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ + case (PIX_NOT(PIX_SRC ^ PIX_DST)): + /* do the first partial word */ + if (dfwpartb) { + for (i = 0; i < dh; i++) + { + if (sfwshiftdir == SHIFT_LEFT) { + sword = *psfwpart << sleftshift; + if (sfwaddb) + sword = COMBINE_PARTIAL(sword, + *(psfwpart + 1) >> srightshift, + srightmask); + } else { /* shift right */ + sword = *psfwpart >> srightshift; + } + + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, + ~(sword ^ *pdfwpart), dfwmask); + pdfwpart += dwpl; + psfwpart += swpl; + } + } + + /* do the full words */ + if (dfwfullb) { + for (i = 0; i < dh; i++) { + for (j = 0; j < dnfullw; j++) { + sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, + *(psfwfull + j + 1) >> srightshift, + srightmask); + *(pdfwfull + j) = ~(sword ^ *(pdfwfull + j)); + } + pdfwfull += dwpl; + psfwfull += swpl; + } + } + + /* do the last partial word */ + if (dlwpartb) { + for (i = 0; i < dh; i++) { + sword = *pslwpart << sleftshift; + if (slwaddb) + sword = COMBINE_PARTIAL(sword, + *(pslwpart + 1) >> srightshift, + srightmask); + + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, + ~(sword ^ *pdlwpart), dlwmask); + pdlwpart += dwpl; + pslwpart += swpl; + } + } + break; + default: + fprintf(stderr, "Operation %x invalid\n", op); + } +} + + +/*--------------------------------------------------------------------* + * Low level in-place full height vertical block transfer * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropVipLow() + * + * \param[in] data ptr to image data + * \param[in] pixw width + * \param[in] pixh height + * \param[in] depth depth + * \param[in] wpl wpl + * \param[in] x x val of UL corner of rectangle + * \param[in] w width of rectangle + * \param[in] shift + shifts data downward in vertical column + * \return 0 if OK; 1 on error. + * + *
+ * Notes:
+ *      (1) This clears the pixels that are left exposed after the
+ *          translation.  You can consider them as pixels that are
+ *          shifted in from outside the image.  This can be later
+ *          overridden by the incolor parameter in higher-level functions
+ *          that call this.  For example, for images with depth > 1,
+ *          these pixels are cleared to black; to be white they
+ *          must later be SET to white.  See, e.g., pixRasteropVip().
+ *      (2) This function scales the width to accommodate any depth,
+ *          performs clipping, and then does the in-place rasterop.
+ * 
+ */ +void +rasteropVipLow(l_uint32 *data, + l_int32 pixw, + l_int32 pixh, + l_int32 depth, + l_int32 wpl, + l_int32 x, + l_int32 w, + l_int32 shift) +{ +l_int32 fwpartb; /* boolean (1, 0) if first word is partial */ +l_int32 fwpart2b; /* boolean (1, 0) if first word is doubly partial */ +l_uint32 fwmask; /* mask for first partial word */ +l_int32 fwbits; /* first word bits in ovrhang */ +l_uint32 *pdfwpart; /* ptr to first partial dest word */ +l_uint32 *psfwpart; /* ptr to first partial src word */ +l_int32 fwfullb; /* boolean (1, 0) if there exists a full word */ +l_int32 nfullw; /* number of full words */ +l_uint32 *pdfwfull; /* ptr to first full dest word */ +l_uint32 *psfwfull; /* ptr to first full src word */ +l_int32 lwpartb; /* boolean (1, 0) if last word is partial */ +l_uint32 lwmask; /* mask for last partial word */ +l_int32 lwbits; /* last word bits in ovrhang */ +l_uint32 *pdlwpart; /* ptr to last partial dest word */ +l_uint32 *pslwpart; /* ptr to last partial src word */ +l_int32 dirwpl; /* directed wpl (-wpl * sign(shift)) */ +l_int32 absshift; /* absolute value of shift; for use in iterator */ +l_int32 vlimit; /* vertical limit value for iterations */ +l_int32 i, j; + + + /*--------------------------------------------------------* + * Scale horizontal dimensions by depth * + *--------------------------------------------------------*/ + if (depth != 1) { + pixw *= depth; + x *= depth; + w *= depth; + } + + + /*--------------------------------------------------------* + * Clip horizontally * + *--------------------------------------------------------*/ + if (x < 0) { + w += x; /* reduce w */ + x = 0; /* clip to x = 0 */ + } + if (x >= pixw || w <= 0) /* no part of vertical slice is in the image */ + return; + + if (x + w > pixw) + w = pixw - x; /* clip to x + w = pixw */ + + /*--------------------------------------------------------* + * Preliminary calculations * + *--------------------------------------------------------*/ + /* is the first word partial? */ + if ((x & 31) == 0) { /* if not */ + fwpartb = 0; + fwbits = 0; + } else { /* if so */ + fwpartb = 1; + fwbits = 32 - (x & 31); + fwmask = rmask32[fwbits]; + if (shift >= 0) { /* go up from bottom */ + pdfwpart = data + wpl * (pixh - 1) + (x >> 5); + psfwpart = data + wpl * (pixh - 1 - shift) + (x >> 5); + } else { /* go down from top */ + pdfwpart = data + (x >> 5); + psfwpart = data - wpl * shift + (x >> 5); + } + } + + /* is the first word doubly partial? */ + if (w >= fwbits) { /* if not */ + fwpart2b = 0; + } else { /* if so */ + fwpart2b = 1; + fwmask &= lmask32[32 - fwbits + w]; + } + + /* is there a full dest word? */ + if (fwpart2b == 1) { /* not */ + fwfullb = 0; + nfullw = 0; + } else { + nfullw = (w - fwbits) >> 5; + if (nfullw == 0) { /* if not */ + fwfullb = 0; + } else { /* if so */ + fwfullb = 1; + if (fwpartb) { + pdfwfull = pdfwpart + 1; + psfwfull = psfwpart + 1; + } else if (shift >= 0) { /* go up from bottom */ + pdfwfull = data + wpl * (pixh - 1) + (x >> 5); + psfwfull = data + wpl * (pixh - 1 - shift) + (x >> 5); + } else { /* go down from top */ + pdfwfull = data + (x >> 5); + psfwfull = data - wpl * shift + (x >> 5); + } + } + } + + /* is the last word partial? */ + lwbits = (x + w) & 31; + if (fwpart2b == 1 || lwbits == 0) { /* if not */ + lwpartb = 0; + } else { + lwpartb = 1; + lwmask = lmask32[lwbits]; + if (fwpartb) { + pdlwpart = pdfwpart + 1 + nfullw; + pslwpart = psfwpart + 1 + nfullw; + } else if (shift >= 0) { /* go up from bottom */ + pdlwpart = data + wpl * (pixh - 1) + (x >> 5) + nfullw; + pslwpart = data + wpl * (pixh - 1 - shift) + (x >> 5) + nfullw; + } else { /* go down from top */ + pdlwpart = data + (x >> 5) + nfullw; + pslwpart = data - wpl * shift + (x >> 5) + nfullw; + } + } + + /* determine the direction of flow from the shift + * If the shift >= 0, data flows downard from src + * to dest, starting at the bottom and working up. + * If shift < 0, data flows upward from src to + * dest, starting at the top and working down. */ + dirwpl = (shift >= 0) ? -wpl : wpl; + absshift = L_ABS(shift); + vlimit = L_MAX(0, pixh - absshift); + + + /*--------------------------------------------------------* + * Now we're ready to do the ops * + *--------------------------------------------------------*/ + + /* Do the first partial word */ + if (fwpartb) { + for (i = 0; i < vlimit; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, fwmask); + pdfwpart += dirwpl; + psfwpart += dirwpl; + } + + /* Clear the incoming pixels */ + for (i = vlimit; i < pixh; i++) { + *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, fwmask); + pdfwpart += dirwpl; + } + } + + /* Do the full words */ + if (fwfullb) { + for (i = 0; i < vlimit; i++) { + for (j = 0; j < nfullw; j++) + *(pdfwfull + j) = *(psfwfull + j); + pdfwfull += dirwpl; + psfwfull += dirwpl; + } + + /* Clear the incoming pixels */ + for (i = vlimit; i < pixh; i++) { + for (j = 0; j < nfullw; j++) + *(pdfwfull + j) = 0x0; + pdfwfull += dirwpl; + } + } + + /* Do the last partial word */ + if (lwpartb) { + for (i = 0; i < vlimit; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, lwmask); + pdlwpart += dirwpl; + pslwpart += dirwpl; + } + + /* Clear the incoming pixels */ + for (i = vlimit; i < pixh; i++) { + *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, lwmask); + pdlwpart += dirwpl; + } + } +} + + + +/*--------------------------------------------------------------------* + * Low level in-place full width horizontal block transfer * + *--------------------------------------------------------------------*/ +/*! + * \brief rasteropHipLow() + * + * \param[in] data ptr to image data + * \param[in] pixh height + * \param[in] depth depth + * \param[in] wpl wpl + * \param[in] y y val of UL corner of rectangle + * \param[in] h height of rectangle + * \param[in] shift + shifts data to the left in a horizontal column + * \return 0 if OK; 1 on error. + * + *
+ * Notes:
+ *      (1) This clears the pixels that are left exposed after the rasterop.
+ *          Therefore, for Pix with depth > 1, these pixels become black,
+ *          and must be subsequently SET if they are to be white.
+ *          For example, see pixRasteropHip().
+ *      (2) This function performs clipping and calls shiftDataHorizontalLow()
+ *          to do the in-place rasterop on each line.
+ * 
+ */ +void +rasteropHipLow(l_uint32 *data, + l_int32 pixh, + l_int32 depth, + l_int32 wpl, + l_int32 y, + l_int32 h, + l_int32 shift) +{ +l_int32 i; +l_uint32 *line; + + /* clip band if necessary */ + if (y < 0) { + h += y; /* reduce h */ + y = 0; /* clip to y = 0 */ + } + if (h <= 0 || y > pixh) /* no part of horizontal slice is in the image */ + return; + + if (y + h > pixh) + h = pixh - y; /* clip to y + h = pixh */ + + for (i = y; i < y + h; i++) { + line = data + i * wpl; + shiftDataHorizontalLow(line, wpl, line, wpl, shift * depth); + } +} + + +/*! + * \brief shiftDataHorizontalLow() + * + * \param[in] datad ptr to beginning of dest line + * \param[in] wpld wpl of dest + * \param[in] datas ptr to beginning of src line + * \param[in] wpls wpl of src + * \param[in] shift horizontal shift of block; >0 is to right + * \return void + * + *
+ * Notes:
+ *      (1) This can also be used for in-place operation; see, e.g.,
+ *          rasteropHipLow().
+ *      (2) We are clearing the pixels that are shifted in from
+ *          outside the image.  This can be overridden by the
+ *          incolor parameter in higher-level functions that call this.
+ * 
+ */ +static void +shiftDataHorizontalLow(l_uint32 *datad, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 shift) +{ +l_int32 j, firstdw, wpl, rshift, lshift; +l_uint32 *lined, *lines; + + lined = datad; + lines = datas; + + if (shift >= 0) { /* src shift to right; data flows to + * right, starting at right edge and + * progressing leftward. */ + firstdw = shift / 32; + wpl = L_MIN(wpls, wpld - firstdw); + lined += firstdw + wpl - 1; + lines += wpl - 1; + rshift = shift & 31; + if (rshift == 0) { + for (j = 0; j < wpl; j++) + *lined-- = *lines--; + + /* clear out the rest to the left edge */ + for (j = 0; j < firstdw; j++) + *lined-- = 0; + } else { + lshift = 32 - rshift; + for (j = 1; j < wpl; j++) { + *lined-- = *(lines - 1) << lshift | *lines >> rshift; + lines--; + } + *lined = *lines >> rshift; /* partial first */ + + /* clear out the rest to the left edge */ + *lined &= ~lmask32[rshift]; + lined--; + for (j = 0; j < firstdw; j++) + *lined-- = 0; + } + } else { /* src shift to left; data flows to left, starting + * at left edge and progressing rightward. */ + firstdw = (-shift) / 32; + wpl = L_MIN(wpls - firstdw, wpld); + lines += firstdw; + lshift = (-shift) & 31; + if (lshift == 0) { + for (j = 0; j < wpl; j++) + *lined++ = *lines++; + + /* clear out the rest to the right edge */ + for (j = 0; j < firstdw; j++) + *lined++ = 0; + } else { + rshift = 32 - lshift; + for (j = 1; j < wpl; j++) { + *lined++ = *lines << lshift | *(lines + 1) >> rshift; + lines++; + } + *lined = *lines << lshift; /* partial last */ + + /* clear out the rest to the right edge */ + /* first clear the lshift pixels of this partial word */ + *lined &= ~rmask32[lshift]; + lined++; + /* then the remaining words to the right edge */ + for (j = 0; j < firstdw; j++) + *lined++ = 0; + } + } +} diff --git a/3rdparty/hgOCR/leptonica/rotate.c b/3rdparty/hgOCR/leptonica/rotate.c new file mode 100644 index 00000000..c9aed99e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rotate.c @@ -0,0 +1,596 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file rotate.c + *
+ *
+ *     General rotation about image center
+ *              PIX     *pixRotate()
+ *              PIX     *pixEmbedForRotation()
+ *
+ *     General rotation by sampling
+ *              PIX     *pixRotateBySampling()
+ *
+ *     Nice (slow) rotation of 1 bpp image
+ *              PIX     *pixRotateBinaryNice()
+ *
+ *     Rotation including alpha (blend) component
+ *              PIX     *pixRotateWithAlpha()
+ *
+ *     Rotations are measured in radians; clockwise is positive.
+ *
+ *     The general rotation pixRotate() does the best job for
+ *     rotating about the image center.  For 1 bpp, it uses shear;
+ *     for others, it uses either shear or area mapping.
+ *     If requested, it expands the output image so that no pixels are lost
+ *     in the rotation, and this can be done on multiple successive shears
+ *     without expanding beyond the maximum necessary size.
+ * 
+ */ + +#include +#include "allheaders.h" + +extern l_float32 AlphaMaskBorderVals[2]; +static const l_float32 MinAngleToRotate = 0.001; /* radians; ~0.06 deg */ +static const l_float32 Max1BppShearAngle = 0.06; /* radians; ~3 deg */ +static const l_float32 LimitShearAngle = 0.35; /* radians; ~20 deg */ + + +/*------------------------------------------------------------------* + * General rotation about the center * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotate() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp rgb + * \param[in] angle radians; clockwise is positive + * \param[in] type L_ROTATE_AREA_MAP, L_ROTATE_SHEAR, L_ROTATE_SAMPLING + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \param[in] width original width; use 0 to avoid embedding + * \param[in] height original height; use 0 to avoid embedding + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a high-level, simple interface for rotating images
+ *          about their center.
+ *      (2) For very small rotations, just return a clone.
+ *      (3) Rotation brings either white or black pixels in
+ *          from outside the image.
+ *      (4) The rotation type is adjusted if necessary for the image
+ *          depth and size of rotation angle.  For 1 bpp images, we
+ *          rotate either by shear or sampling.
+ *      (5) Colormaps are removed for rotation by area mapping.
+ *      (6) The dest can be expanded so that no image pixels
+ *          are lost.  To invoke expansion, input the original
+ *          width and height.  For repeated rotation, use of the
+ *          original width and height allows the expansion to
+ *          stop at the maximum required size, which is a square
+ *          with side = sqrt(w*w + h*h).
+ * 
+ */ +PIX * +pixRotate(PIX *pixs, + l_float32 angle, + l_int32 type, + l_int32 incolor, + l_int32 width, + l_int32 height) +{ +l_int32 w, h, d; +l_uint32 fillval; +PIX *pix1, *pix2, *pix3, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixRotate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (type != L_ROTATE_SHEAR && type != L_ROTATE_AREA_MAP && + type != L_ROTATE_SAMPLING) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + /* Adjust rotation type if necessary: + * - If d == 1 bpp and the angle is more than about 6 degrees, + * rotate by sampling; otherwise rotate by shear. + * - If d > 1, only allow shear rotation up to about 20 degrees; + * beyond that, default a shear request to sampling. */ + if (pixGetDepth(pixs) == 1) { + if (L_ABS(angle) > Max1BppShearAngle) { + if (type != L_ROTATE_SAMPLING) + L_INFO("1 bpp, large angle; rotate by sampling\n", procName); + type = L_ROTATE_SAMPLING; + } else if (type != L_ROTATE_SHEAR) { + L_INFO("1 bpp; rotate by shear\n", procName); + type = L_ROTATE_SHEAR; + } + } else if (L_ABS(angle) > LimitShearAngle && type == L_ROTATE_SHEAR) { + L_INFO("large angle; rotate by sampling\n", procName); + type = L_ROTATE_SAMPLING; + } + + /* Remove colormap if we rotate by area mapping. */ + cmap = pixGetColormap(pixs); + if (cmap && type == L_ROTATE_AREA_MAP) + pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix1 = pixClone(pixs); + cmap = pixGetColormap(pix1); + + /* Otherwise, if there is a colormap and we're not embedding, + * add white color if it doesn't exist. */ + if (cmap && width == 0) { /* no embedding; generate %incolor */ + if (incolor == L_BRING_IN_BLACK) + pixcmapAddBlackOrWhite(cmap, 0, NULL); + else /* L_BRING_IN_WHITE */ + pixcmapAddBlackOrWhite(cmap, 1, NULL); + } + + /* Request to embed in a larger image; do if necessary */ + pix2 = pixEmbedForRotation(pix1, angle, incolor, width, height); + + /* Area mapping requires 8 or 32 bpp. If less than 8 bpp and + * area map rotation is requested, convert to 8 bpp. */ + d = pixGetDepth(pix2); + if (type == L_ROTATE_AREA_MAP && d < 8) + pix3 = pixConvertTo8(pix2, FALSE); + else + pix3 = pixClone(pix2); + + /* Do the rotation: shear, sampling or area mapping */ + pixGetDimensions(pix3, &w, &h, &d); + if (type == L_ROTATE_SHEAR) { + pixd = pixRotateShearCenter(pix3, angle, incolor); + } else if (type == L_ROTATE_SAMPLING) { + pixd = pixRotateBySampling(pix3, w / 2, h / 2, angle, incolor); + } else { /* rotate by area mapping */ + fillval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + fillval = 255; + else /* d == 32 */ + fillval = 0xffffff00; + } + if (d == 8) + pixd = pixRotateAMGray(pix3, angle, fillval); + else /* d == 32 */ + pixd = pixRotateAMColor(pix3, angle, fillval); + } + + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + return pixd; +} + + +/*! + * \brief pixEmbedForRotation() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp rgb + * \param[in] angle radians; clockwise is positive + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \param[in] width original width; use 0 to avoid embedding + * \param[in] height original height; use 0 to avoid embedding + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) For very small rotations, just return a clone.
+ *      (2) Generate larger image to embed pixs if necessary, and
+ *          place the center of the input image in the center.
+ *      (3) Rotation brings either white or black pixels in
+ *          from outside the image.  For colormapped images where
+ *          there is no white or black, a new color is added if
+ *          possible for these pixels; otherwise, either the
+ *          lightest or darkest color is used.  In most cases,
+ *          the colormap will be removed prior to rotation.
+ *      (4) The dest is to be expanded so that no image pixels
+ *          are lost after rotation.  Input of the original width
+ *          and height allows the expansion to stop at the maximum
+ *          required size, which is a square with side equal to
+ *          sqrt(w*w + h*h).
+ *      (5) For an arbitrary angle, the expansion can be found by
+ *          considering the UL and UR corners.  As the image is
+ *          rotated, these move in an arc centered at the center of
+ *          the image.  Normalize to a unit circle by dividing by half
+ *          the image diagonal.  After a rotation of T radians, the UL
+ *          and UR corners are at points T radians along the unit
+ *          circle.  Compute the x and y coordinates of both these
+ *          points and take the max of absolute values; these represent
+ *          the half width and half height of the containing rectangle.
+ *          The arithmetic is done using formulas for sin(a+b) and cos(a+b),
+ *          where b = T.  For the UR corner, sin(a) = h/d and cos(a) = w/d.
+ *          For the UL corner, replace a by (pi - a), and you have
+ *          sin(pi - a) = h/d, cos(pi - a) = -w/d.  The equations
+ *          given below follow directly.
+ * 
+ */ +PIX * +pixEmbedForRotation(PIX *pixs, + l_float32 angle, + l_int32 incolor, + l_int32 width, + l_int32 height) +{ +l_int32 w, h, d, w1, h1, w2, h2, maxside, wnew, hnew, xoff, yoff, setcolor; +l_float64 sina, cosa, fw, fh; +PIX *pixd; + + PROCNAME("pixEmbedForRotation"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + /* Test if big enough to hold any rotation of the original image */ + pixGetDimensions(pixs, &w, &h, &d); + maxside = (l_int32)(sqrt((l_float64)(width * width) + + (l_float64)(height * height)) + 0.5); + if (w >= maxside && h >= maxside) /* big enough */ + return pixClone(pixs); + + /* Find the new sizes required to hold the image after rotation. + * Note that the new dimensions must be at least as large as those + * of pixs, because we're rasterop-ing into it before rotation. */ + cosa = cos(angle); + sina = sin(angle); + fw = (l_float64)w; + fh = (l_float64)h; + w1 = (l_int32)(L_ABS(fw * cosa - fh * sina) + 0.5); + w2 = (l_int32)(L_ABS(-fw * cosa - fh * sina) + 0.5); + h1 = (l_int32)(L_ABS(fw * sina + fh * cosa) + 0.5); + h2 = (l_int32)(L_ABS(-fw * sina + fh * cosa) + 0.5); + wnew = L_MAX(w, L_MAX(w1, w2)); + hnew = L_MAX(h, L_MAX(h1, h2)); + + if ((pixd = pixCreate(wnew, hnew, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyColormap(pixd, pixs); + pixCopySpp(pixd, pixs); + pixCopyText(pixd, pixs); + xoff = (wnew - w) / 2; + yoff = (hnew - h) / 2; + + /* Set background to color to be rotated in */ + setcolor = (incolor == L_BRING_IN_BLACK) ? L_SET_BLACK : L_SET_WHITE; + pixSetBlackOrWhite(pixd, setcolor); + + /* Rasterop automatically handles all 4 channels for rgba */ + pixRasterop(pixd, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); + return pixd; +} + + +/*------------------------------------------------------------------* + * General rotation by sampling * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateBySampling() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp rgb; can be cmapped + * \param[in] xcen x value of center of rotation + * \param[in] ycen y value of center of rotation + * \param[in] angle radians; clockwise is positive + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) For very small rotations, just return a clone.
+ *      (2) Rotation brings either white or black pixels in
+ *          from outside the image.
+ *      (3) Colormaps are retained.
+ * 
+ */ +PIX * +pixRotateBySampling(PIX *pixs, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 incolor) +{ +l_int32 w, h, d, i, j, x, y, xdif, ydif, wm1, hm1, wpld; +l_uint32 val; +l_float32 sina, cosa; +l_uint32 *datad, *lined; +void **lines; +PIX *pixd; + + PROCNAME("pixRotateBySampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("invalid depth", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSetBlackOrWhite(pixd, incolor); + + sina = sin(angle); + cosa = cos(angle); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + wm1 = w - 1; + hm1 = h - 1; + lines = pixGetLinePtrs(pixs, NULL); + + /* Treat 1 bpp case specially */ + if (d == 1) { + for (i = 0; i < h; i++) { /* scan over pixd */ + lined = datad + i * wpld; + ydif = ycen - i; + for (j = 0; j < w; j++) { + xdif = xcen - j; + x = xcen + (l_int32)(-xdif * cosa - ydif * sina); + if (x < 0 || x > wm1) continue; + y = ycen + (l_int32)(-ydif * cosa + xdif * sina); + if (y < 0 || y > hm1) continue; + if (incolor == L_BRING_IN_WHITE) { + if (GET_DATA_BIT(lines[y], x)) + SET_DATA_BIT(lined, j); + } else { + if (!GET_DATA_BIT(lines[y], x)) + CLEAR_DATA_BIT(lined, j); + } + } + } + LEPT_FREE(lines); + return pixd; + } + + for (i = 0; i < h; i++) { /* scan over pixd */ + lined = datad + i * wpld; + ydif = ycen - i; + for (j = 0; j < w; j++) { + xdif = xcen - j; + x = xcen + (l_int32)(-xdif * cosa - ydif * sina); + if (x < 0 || x > wm1) continue; + y = ycen + (l_int32)(-ydif * cosa + xdif * sina); + if (y < 0 || y > hm1) continue; + switch (d) + { + case 8: + val = GET_DATA_BYTE(lines[y], x); + SET_DATA_BYTE(lined, j, val); + break; + case 32: + val = GET_DATA_FOUR_BYTES(lines[y], x); + SET_DATA_FOUR_BYTES(lined, j, val); + break; + case 2: + val = GET_DATA_DIBIT(lines[y], x); + SET_DATA_DIBIT(lined, j, val); + break; + case 4: + val = GET_DATA_QBIT(lines[y], x); + SET_DATA_QBIT(lined, j, val); + break; + case 16: + val = GET_DATA_TWO_BYTES(lines[y], x); + SET_DATA_TWO_BYTES(lined, j, val); + break; + default: + return (PIX *)ERROR_PTR("invalid depth", procName, NULL); + } + } + } + + LEPT_FREE(lines); + return pixd; +} + + +/*------------------------------------------------------------------* + * Nice (slow) rotation of 1 bpp image * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateBinaryNice() + * + * \param[in] pixs 1 bpp + * \param[in] angle radians; clockwise is positive; about the center + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) For very small rotations, just return a clone.
+ *      (2) This does a computationally expensive rotation of 1 bpp images.
+ *          The fastest rotators (using shears or subsampling) leave
+ *          visible horizontal and vertical shear lines across which
+ *          the image shear changes by one pixel.  To ameliorate the
+ *          visual effect one can introduce random dithering.  One
+ *          way to do this in a not-too-random fashion is given here.
+ *          We convert to 8 bpp, do a very small blur, rotate using
+ *          linear interpolation (same as area mapping), do a
+ *          small amount of sharpening to compensate for the initial
+ *          blur, and threshold back to binary.  The shear lines
+ *          are magically removed.
+ *      (3) This operation is about 5x slower than rotation by sampling.
+ * 
+ */ +PIX * +pixRotateBinaryNice(PIX *pixs, + l_float32 angle, + l_int32 incolor) +{ +PIX *pix1, *pix2, *pix3, *pix4, *pixd; + + PROCNAME("pixRotateBinaryNice"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + pix1 = pixConvertTo8(pixs, 0); + pix2 = pixBlockconv(pix1, 1, 1); /* smallest blur allowed */ + pix3 = pixRotateAM(pix2, angle, incolor); + pix4 = pixUnsharpMasking(pix3, 1, 1.0); /* sharpen a bit */ + pixd = pixThresholdToBinary(pix4, 128); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + return pixd; +} + + +/*------------------------------------------------------------------* + * Rotation including alpha (blend) component * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateWithAlpha() + * + * \param[in] pixs 32 bpp rgb or cmapped + * \param[in] angle radians; clockwise is positive + * \param[in] pixg [optional] 8 bpp, can be null + * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent + * and 1.0 fully opaque + * \return pixd 32 bpp rgba, or NULL on error + * + *
+ * Notes:
+ *      (1) The alpha channel is transformed separately from pixs,
+ *          and aligns with it, being fully transparent outside the
+ *          boundary of the transformed pixs.  For pixels that are fully
+ *          transparent, a blending function like pixBlendWithGrayMask()
+ *          will give zero weight to corresponding pixels in pixs.
+ *      (2) Rotation is about the center of the image; for very small
+ *          rotations, just return a clone.  The dest is automatically
+ *          expanded so that no image pixels are lost.
+ *      (3) Rotation is by area mapping.  It doesn't matter what
+ *          color is brought in because the alpha channel will
+ *          be transparent (black) there.
+ *      (4) If pixg is NULL, it is generated as an alpha layer that is
+ *          partially opaque, using %fract.  Otherwise, it is cropped
+ *          to pixs if required and %fract is ignored.  The alpha
+ *          channel in pixs is never used.
+ *      (4) Colormaps are removed to 32 bpp.
+ *      (5) The default setting for the border values in the alpha channel
+ *          is 0 (transparent) for the outermost ring of pixels and
+ *          (0.5 * fract * 255) for the second ring.  When blended over
+ *          a second image, this
+ *          (a) shrinks the visible image to make a clean overlap edge
+ *              with an image below, and
+ *          (b) softens the edges by weakening the aliasing there.
+ *          Use l_setAlphaMaskBorder() to change these values.
+ *      (6) A subtle use of gamma correction is to remove gamma correction
+ *          before rotation and restore it afterwards.  This is done
+ *          by sandwiching this function between a gamma/inverse-gamma
+ *          photometric transform:
+ *              pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255);
+ *              pixd = pixRotateWithAlpha(pixt, angle, NULL, fract);
+ *              pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255);
+ *              pixDestroy(&pixt);
+ *          This has the side-effect of producing artifacts in the very
+ *          dark regions.
+ * 
+ */ +PIX * +pixRotateWithAlpha(PIX *pixs, + l_float32 angle, + PIX *pixg, + l_float32 fract) +{ +l_int32 ws, hs, d, spp; +PIX *pixd, *pix32, *pixg2, *pixgr; + + PROCNAME("pixRotateWithAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (d != 32 && pixGetColormap(pixs) == NULL) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (pixg && pixGetDepth(pixg) != 8) { + L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", + procName); + pixg = NULL; + } + if (!pixg && (fract < 0.0 || fract > 1.0)) { + L_WARNING("invalid fract; using fully opaque\n", procName); + fract = 1.0; + } + if (!pixg && fract == 0.0) + L_WARNING("transparent alpha; image will not be blended\n", procName); + + /* Make sure input to rotation is 32 bpp rgb, and rotate it */ + if (d != 32) + pix32 = pixConvertTo32(pixs); + else + pix32 = pixClone(pixs); + spp = pixGetSpp(pix32); + pixSetSpp(pix32, 3); /* ignore the alpha channel for the rotation */ + pixd = pixRotate(pix32, angle, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, ws, hs); + pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ + pixDestroy(&pix32); + + /* Set up alpha layer with a fading border and rotate it */ + if (!pixg) { + pixg2 = pixCreate(ws, hs, 8); + if (fract == 1.0) + pixSetAll(pixg2); + else if (fract > 0.0) + pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); + } else { + pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); + } + if (ws > 10 && hs > 10) { /* see note 8 */ + pixSetBorderRingVal(pixg2, 1, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); + pixSetBorderRingVal(pixg2, 2, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); + } + pixgr = pixRotate(pixg2, angle, L_ROTATE_AREA_MAP, + L_BRING_IN_BLACK, ws, hs); + + /* Combine into a 4 spp result */ + pixSetRGBComponent(pixd, pixgr, L_ALPHA_CHANNEL); + + pixDestroy(&pixg2); + pixDestroy(&pixgr); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/rotateam.c b/3rdparty/hgOCR/leptonica/rotateam.c new file mode 100644 index 00000000..2a88216b --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rotateam.c @@ -0,0 +1,1128 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file rotateam.c + *
+ *
+ *     Grayscale and color rotation for area mapping (== interpolation)
+ *
+ *         Rotation about the image center
+ *                PIX         *pixRotateAM()
+ *                PIX         *pixRotateAMColor()
+ *                PIX         *pixRotateAMGray()
+ *                static void  rotateAMColorLow()
+ *                static void  rotateAMGrayLow()
+ *
+ *         Rotation about the UL corner of the image
+ *                PIX         *pixRotateAMCorner()
+ *                PIX         *pixRotateAMColorCorner()
+ *                PIX         *pixRotateAMGrayCorner()
+ *                static void  rotateAMColorCornerLow()
+ *                static void  rotateAMGrayCornerLow()
+ *
+ *         Faster color rotation about the image center
+ *                PIX         *pixRotateAMColorFast()
+ *                static void  rotateAMColorFastLow()
+ *
+ *     Rotations are measured in radians; clockwise is positive.
+ *
+ *     The basic area mapping grayscale rotation works on 8 bpp images.
+ *     For color, the same method is applied to each color separately.
+ *     This can be done in two ways: (1) as here, computing each dest
+ *     rgb pixel from the appropriate four src rgb pixels, or (2) separating
+ *     the color image into three 8 bpp images, rotate each of these,
+ *     and then combine the result.  Method (1) is about 2.5x faster.
+ *     We have also implemented a fast approximation for color area-mapping
+ *     rotation (pixRotateAMColorFast()), which is about 25% faster
+ *     than the standard color rotator.  If you need the extra speed,
+ *     use it.
+ *
+ *     Area mapping works as follows.  For each dest
+ *     pixel you find the 4 source pixels that it partially
+ *     covers.  You then compute the dest pixel value as
+ *     the area-weighted average of those 4 source pixels.
+ *     We make two simplifying approximations:
+ *
+ *       ~  For simplicity, compute the areas as if the dest
+ *          pixel were translated but not rotated.
+ *
+ *       ~  Compute area overlaps on a discrete sub-pixel grid.
+ *          Because we are using 8 bpp images with 256 levels,
+ *          it is convenient to break each pixel into a
+ *          16x16 sub-pixel grid, and count the number of
+ *          overlapped sub-pixels.
+ *
+ *     It is interesting to note that the digital filter that
+ *     implements the area mapping algorithm for rotation
+ *     is identical to the digital filter used for linear
+ *     interpolation when arbitrarily scaling grayscale images.
+ *
+ *     The advantage of area mapping over pixel sampling
+ *     in grayscale rotation is that the former naturally
+ *     blurs sharp edges ("anti-aliasing"), so that stair-step
+ *     artifacts are not introduced.  The disadvantage is that
+ *     it is significantly slower.
+ *
+ *     But it is still pretty fast.  With standard 3 GHz hardware,
+ *     the anti-aliased (area-mapped) color rotation speed is
+ *     about 15 million pixels/sec.
+ *
+ *     The function pixRotateAMColorFast() is about 10-20% faster
+ *     than pixRotateAMColor().  The quality is slightly worse,
+ *     and if you make many successive small rotations, with a
+ *     total angle of 360 degrees, it has been noted that the
+ *     center wanders -- it seems to be doing a 1 pixel translation
+ *     in addition to the rotation.
+ *
+ *     Consider again the comparison of image quality between sampling
+ *     and area mapping.  With sampling, sharp edges such as found in
+ *     text images remain sharp.  However, sampling artifacts such as
+ *     characters randomly bouncing up and down by one pixel, or
+ *     one pixel horizontal shear lines going through a line of text
+ *     (causing the characters to look like badly rendered italic),
+ *     are highly visible.  It does not help to sample the source pixel
+ *     with the largest area covering each dest pixel; the result has
+ *     the same ugly sampling artifacts.
+ *
+ *     With area mapping, these annoying artifacts are avoided, but the
+ *     blurring of edges makes small text a bit more difficult to read.
+ *     However, if you are willing to do more computation, you can have
+ *     the best of both worlds: no sampling artifacts and sharp edges.
+ *     Use area mapping to avoid sampling issues, and follow it with
+ *     unsharp masking.  Experiment with the sharpening parameters.
+ *     I have found that a small amount of sharpening is sufficient to
+ *     restore the sharp edges in text; e.g.,
+ *         pix2 = pixUnsharpMasking(pix1, 1, 0.3);
+ * 
+ */ + +#include +#include /* required for sin and tan */ +#include "allheaders.h" + +static void rotateAMColorLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_float32 angle, l_uint32 colorval); +static void rotateAMGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_float32 angle, l_uint8 grayval); +static void rotateAMColorCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, + l_int32 wpls, l_float32 angle, + l_uint32 colorval); +static void rotateAMGrayCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_float32 angle, l_uint8 grayval); + +static void rotateAMColorFastLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_float32 angle, l_uint32 colorval); + +static const l_float32 MinAngleToRotate = 0.001; /* radians; ~0.06 deg */ + + +/*------------------------------------------------------------------* + * Rotation about the center * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateAM() + * + * \param[in] pixs 2, 4, 8 bpp gray or colormapped, or 32 bpp RGB + * \param[in] angle radians; clockwise is positive + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates about image center.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Brings in either black or white pixels from the boundary.
+ * 
+ */ +PIX * +pixRotateAM(PIX *pixs, + l_float32 angle, + l_int32 incolor) +{ +l_int32 d; +l_uint32 fillval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixRotateAM"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) == 1) + return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual incoming color */ + fillval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + fillval = 255; + else /* d == 32 */ + fillval = 0xffffff00; + } + + if (d == 8) + pixd = pixRotateAMGray(pixt2, angle, fillval); + else /* d == 32 */ + pixd = pixRotateAMColor(pixt2, angle, fillval); + + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixRotateAMColor() + * + * \param[in] pixs 32 bpp + * \param[in] angle radians; clockwise is positive + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates about image center.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Specify the color to be brought in from outside the image.
+ * 
+ */ +PIX * +pixRotateAMColor(PIX *pixs, + l_float32 angle, + l_uint32 colorval) +{ +l_int32 w, h, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixRotateAMColor"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval); + if (pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixRotateAMGray(pix1, angle, 255); /* bring in opaque */ + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return pixd; +} + + +/*! + * \brief pixRotateAMGray() + * + * \param[in] pixs 8 bpp + * \param[in] angle radians; clockwise is positive + * \param[in] grayval 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates about image center.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Specify the grayvalue to be brought in from outside the image.
+ * 
+ */ +PIX * +pixRotateAMGray(PIX *pixs, + l_float32 angle, + l_uint8 grayval) +{ +l_int32 w, h, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixRotateAMGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval); + + return pixd; +} + + +static void +rotateAMColorLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 angle, + l_uint32 colorval) +{ +l_int32 i, j, xcen, ycen, wm2, hm2; +l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; +l_int32 rval, gval, bval; +l_uint32 word00, word01, word10, word11; +l_uint32 *lines, *lined; +l_float32 sina, cosa; + + xcen = w / 2; + wm2 = w - 2; + ycen = h / 2; + hm2 = h - 2; + sina = 16. * sin(angle); + cosa = 16. * cos(angle); + + for (i = 0; i < h; i++) { + ydif = ycen - i; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + xdif = xcen - j; + xpm = (l_int32)(-xdif * cosa - ydif * sina); + ypm = (l_int32)(-ydif * cosa + xdif * sina); + xp = xcen + (xpm >> 4); + yp = ycen + (ypm >> 4); + xf = xpm & 0x0f; + yf = ypm & 0x0f; + + /* if off the edge, write input colorval */ + if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { + *(lined + j) = colorval; + continue; + } + + lines = datas + yp * wpls; + + /* do area weighting. Without this, we would + * simply do: + * *(lined + j) = *(lines + xp); + * which is faster but gives lousy results! + */ + word00 = *(lines + xp); + word10 = *(lines + xp + 1); + word01 = *(lines + wpls + xp); + word11 = *(lines + wpls + xp + 1); + rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; + gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; + bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; + composeRGBPixel(rval, gval, bval, lined + j); + } + } +} + + +static void +rotateAMGrayLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 angle, + l_uint8 grayval) +{ +l_int32 i, j, xcen, ycen, wm2, hm2; +l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; +l_int32 v00, v01, v10, v11; +l_uint8 val; +l_uint32 *lines, *lined; +l_float32 sina, cosa; + + xcen = w / 2; + wm2 = w - 2; + ycen = h / 2; + hm2 = h - 2; + sina = 16. * sin(angle); + cosa = 16. * cos(angle); + + for (i = 0; i < h; i++) { + ydif = ycen - i; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + xdif = xcen - j; + xpm = (l_int32)(-xdif * cosa - ydif * sina); + ypm = (l_int32)(-ydif * cosa + xdif * sina); + xp = xcen + (xpm >> 4); + yp = ycen + (ypm >> 4); + xf = xpm & 0x0f; + yf = ypm & 0x0f; + + /* if off the edge, write input grayval */ + if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { + SET_DATA_BYTE(lined, j, grayval); + continue; + } + + lines = datas + yp * wpls; + + /* do area weighting. Without this, we would + * simply do: + * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); + * which is faster but gives lousy results! + */ + v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); + v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); + v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); + v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); + val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); + SET_DATA_BYTE(lined, j, val); + } + } +} + + +/*------------------------------------------------------------------* + * Rotation about the UL corner * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateAMCorner() + * + * \param[in] pixs 1, 2, 4, 8 bpp gray or colormapped, or 32 bpp RGB + * \param[in] angle radians; clockwise is positive + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates about the UL corner of the image.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Brings in either black or white pixels from the boundary.
+ * 
+ */ +PIX * +pixRotateAMCorner(PIX *pixs, + l_float32 angle, + l_int32 incolor) +{ +l_int32 d; +l_uint32 fillval; +PIX *pixt1, *pixt2, *pixd; + + PROCNAME("pixRotateAMCorner"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ + pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixt1); + if (d < 8) + pixt2 = pixConvertTo8(pixt1, FALSE); + else + pixt2 = pixClone(pixt1); + d = pixGetDepth(pixt2); + + /* Compute actual incoming color */ + fillval = 0; + if (incolor == L_BRING_IN_WHITE) { + if (d == 8) + fillval = 255; + else /* d == 32 */ + fillval = 0xffffff00; + } + + if (d == 8) + pixd = pixRotateAMGrayCorner(pixt2, angle, fillval); + else /* d == 32 */ + pixd = pixRotateAMColorCorner(pixt2, angle, fillval); + + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; +} + + +/*! + * \brief pixRotateAMColorCorner() + * + * \param[in] pixs + * \param[in] angle radians; clockwise is positive + * \param[in] fillval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates the image about the UL corner.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Specify the color to be brought in from outside the image.
+ * 
+ */ +PIX * +pixRotateAMColorCorner(PIX *pixs, + l_float32 angle, + l_uint32 fillval) +{ +l_int32 w, h, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixRotateAMColorCorner"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval); + if (pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixRotateAMGrayCorner(pix1, angle, 255); /* bring in opaque */ + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + + return pixd; +} + + +/*! + * \brief pixRotateAMGrayCorner() + * + * \param[in] pixs + * \param[in] angle radians; clockwise is positive + * \param[in] grayval 0 to bring in BLACK, 255 for WHITE + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Rotates the image about the UL corner.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) Specify the grayvalue to be brought in from outside the image.
+ * 
+ */ +PIX * +pixRotateAMGrayCorner(PIX *pixs, + l_float32 angle, + l_uint8 grayval) +{ +l_int32 w, h, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixRotateAMGrayCorner"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval); + + return pixd; +} + + +static void +rotateAMColorCornerLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 angle, + l_uint32 colorval) +{ +l_int32 i, j, wm2, hm2; +l_int32 xpm, ypm, xp, yp, xf, yf; +l_int32 rval, gval, bval; +l_uint32 word00, word01, word10, word11; +l_uint32 *lines, *lined; +l_float32 sina, cosa; + + wm2 = w - 2; + hm2 = h - 2; + sina = 16. * sin(angle); + cosa = 16. * cos(angle); + + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + xpm = (l_int32)(j * cosa + i * sina); + ypm = (l_int32)(i * cosa - j * sina); + xp = xpm >> 4; + yp = ypm >> 4; + xf = xpm & 0x0f; + yf = ypm & 0x0f; + + /* if off the edge, write input colorval */ + if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { + *(lined + j) = colorval; + continue; + } + + lines = datas + yp * wpls; + + /* do area weighting. Without this, we would + * simply do: + * *(lined + j) = *(lines + xp); + * which is faster but gives lousy results! + */ + word00 = *(lines + xp); + word10 = *(lines + xp + 1); + word01 = *(lines + wpls + xp); + word11 = *(lines + wpls + xp + 1); + rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; + gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; + bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; + composeRGBPixel(rval, gval, bval, lined + j); + } + } +} + + +static void +rotateAMGrayCornerLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 angle, + l_uint8 grayval) +{ +l_int32 i, j, wm2, hm2; +l_int32 xpm, ypm, xp, yp, xf, yf; +l_int32 v00, v01, v10, v11; +l_uint8 val; +l_uint32 *lines, *lined; +l_float32 sina, cosa; + + wm2 = w - 2; + hm2 = h - 2; + sina = 16. * sin(angle); + cosa = 16. * cos(angle); + + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + xpm = (l_int32)(j * cosa + i * sina); + ypm = (l_int32)(i * cosa - j * sina); + xp = xpm >> 4; + yp = ypm >> 4; + xf = xpm & 0x0f; + yf = ypm & 0x0f; + + /* if off the edge, write input grayval */ + if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { + SET_DATA_BYTE(lined, j, grayval); + continue; + } + + lines = datas + yp * wpls; + + /* do area weighting. Without this, we would + * simply do: + * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); + * which is faster but gives lousy results! + */ + v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); + v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); + v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); + v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); + val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); + SET_DATA_BYTE(lined, j, val); + } + } +} + + +/*------------------------------------------------------------------* + * Fast RGB color rotation about center * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateAMColorFast() + * + * \param[in] pixs + * \param[in] angle radians; clockwise is positive + * \param[in] colorval e.g., 0 to bring in BLACK, 0xffffff00 for WHITE + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This rotates a color image about the image center.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) It uses area mapping, dividing each pixel into
+ *          16 subpixels.
+ *      (4) It is about 10% to 20% faster than the more accurate linear
+ *          interpolation function pixRotateAMColor(),
+ *          which uses 256 subpixels.
+ *      (5) For some reason it shifts the image center.
+ *          No attempt is made to rotate the alpha component.
+ * 
+ */ +PIX * +pixRotateAMColorFast(PIX *pixs, + l_float32 angle, + l_uint32 colorval) +{ +l_int32 w, h, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixRotateAMColorFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); + + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreateTemplate(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + rotateAMColorFastLow(datad, w, h, wpld, datas, wpls, angle, colorval); + return pixd; +} + + +/*! + * \brief rotateAMColorFastLow() + * + * This is a special simplification of area mapping with division + * of each pixel into 16 sub-pixels. The exact coefficients that + * should be used are the same as for the 4x linear interpolation + * scaling case, and are given there. I tried to approximate these + * as weighted coefficients with a maximum sum of 4, which + * allows us to do the arithmetic in parallel for the R, G and B + * components in a 32 bit pixel. However, there are three reasons + * for not doing that: + * (1) the loss of accuracy in the parallel implementation + * is visually significant + * (2) the parallel implementation (described below) is slower + * (3) the parallel implementation requires allocation of + * a temporary color image + * + * There are 16 cases for the choice of the subpixel, and + * for each, the mapping to the relevant source + * pixels is as follows: + * + * subpixel src pixel weights + * -------- ----------------- + * 0 sp1 + * 1 (3 * sp1 + sp2) / 4 + * 2 (sp1 + sp2) / 2 + * 3 (sp1 + 3 * sp2) / 4 + * 4 (3 * sp1 + sp3) / 4 + * 5 (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16 + * 6 (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8 + * 7 (3 * sp1 + 9 * sp2 + sp3 + 3 * sp4) / 16 + * 8 (sp1 + sp3) / 2 + * 9 (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8 + * 10 (sp1 + sp2 + sp3 + sp4) / 4 + * 11 (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8 + * 12 (sp1 + 3 * sp3) / 4 + * 13 (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16 + * 14 (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8 + * 15 (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16 + * + * Another way to visualize this is to consider the area mapping + * (or linear interpolation) coefficients for the pixel sp1. + * Expressed in fourths, they can be written as asymmetric matrix: + * + * 4 3 2 1 + * 3 2.25 1.5 0.75 + * 2 1.5 1 0.5 + * 1 0.75 0.5 0.25 + * + * The coefficients for the three neighboring pixels can be + * similarly written. + * + * This is implemented here, where, for each color component, + * we inline its extraction from each participating word, + * construct the linear combination, and combine the results + * into the destination 32 bit RGB pixel, using the appropriate shifts. + * + * It is interesting to note that an alternative method, where + * we do the arithmetic on the 32 bit pixels directly (after + * shifting the components so they won't overflow into each other) + * is significantly inferior. Because we have only 8 bits for + * internal overflows, which can be distributed as 2, 3, 3, it + * is impossible to add these with the correct linear + * interpolation coefficients, which require a sum of up to 16. + * Rounding off to a sum of 4 causes appreciable visual artifacts + * in the rotated image. The code for the inferior method + * can be found in prog/rotatefastalt.c, for reference. + */ +static void +rotateAMColorFastLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 angle, + l_uint32 colorval) +{ +l_int32 i, j, xcen, ycen, wm2, hm2; +l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; +l_uint32 word1, word2, word3, word4, red, blue, green; +l_uint32 *pword, *lines, *lined; +l_float32 sina, cosa; + + xcen = w / 2; + wm2 = w - 2; + ycen = h / 2; + hm2 = h - 2; + sina = 4. * sin(angle); + cosa = 4. * cos(angle); + + for (i = 0; i < h; i++) { + ydif = ycen - i; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + xdif = xcen - j; + xpm = (l_int32)(-xdif * cosa - ydif * sina); + ypm = (l_int32)(-ydif * cosa + xdif * sina); + xp = xcen + (xpm >> 2); + yp = ycen + (ypm >> 2); + xf = xpm & 0x03; + yf = ypm & 0x03; + + /* if off the edge, write input grayval */ + if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { + *(lined + j) = colorval; + continue; + } + + lines = datas + yp * wpls; + pword = lines + xp; + + switch (xf + 4 * yf) + { + case 0: + *(lined + j) = *pword; + break; + case 1: + word1 = *pword; + word2 = *(pword + 1); + red = 3 * (word1 >> 24) + (word2 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + + ((word2 >> 16) & 0xff); + blue = 3 * ((word1 >> 8) & 0xff) + + ((word2 >> 8) & 0xff); + *(lined + j) = ((red << 22) & 0xff000000) | + ((green << 14) & 0x00ff0000) | + ((blue << 6) & 0x0000ff00); + break; + case 2: + word1 = *pword; + word2 = *(pword + 1); + red = (word1 >> 24) + (word2 >> 24); + green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff); + *(lined + j) = ((red << 23) & 0xff000000) | + ((green << 15) & 0x00ff0000) | + ((blue << 7) & 0x0000ff00); + break; + case 3: + word1 = *pword; + word2 = *(pword + 1); + red = (word1 >> 24) + 3 * (word2 >> 24); + green = ((word1 >> 16) & 0xff) + + 3 * ((word2 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + + 3 * ((word2 >> 8) & 0xff); + *(lined + j) = ((red << 22) & 0xff000000) | + ((green << 14) & 0x00ff0000) | + ((blue << 6) & 0x0000ff00); + break; + case 4: + word1 = *pword; + word3 = *(pword + wpls); + red = 3 * (word1 >> 24) + (word3 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + + ((word3 >> 16) & 0xff); + blue = 3 * ((word1 >> 8) & 0xff) + + ((word3 >> 8) & 0xff); + *(lined + j) = ((red << 22) & 0xff000000) | + ((green << 14) & 0x00ff0000) | + ((blue << 6) & 0x0000ff00); + break; + case 5: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = 9 * (word1 >> 24) + 3 * (word2 >> 24) + + 3 * (word3 >> 24) + (word4 >> 24); + green = 9 * ((word1 >> 16) & 0xff) + + 3 * ((word2 >> 16) & 0xff) + + 3 * ((word3 >> 16) & 0xff) + + ((word4 >> 16) & 0xff); + blue = 9 * ((word1 >> 8) & 0xff) + + 3 * ((word2 >> 8) & 0xff) + + 3 * ((word3 >> 8) & 0xff) + + ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 20) & 0xff000000) | + ((green << 12) & 0x00ff0000) | + ((blue << 4) & 0x0000ff00); + break; + case 6: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = 3 * (word1 >> 24) + 3 * (word2 >> 24) + + (word3 >> 24) + (word4 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + + 3 * ((word2 >> 16) & 0xff) + + ((word3 >> 16) & 0xff) + + ((word4 >> 16) & 0xff); + blue = 3 * ((word1 >> 8) & 0xff) + + 3 * ((word2 >> 8) & 0xff) + + ((word3 >> 8) & 0xff) + + ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 21) & 0xff000000) | + ((green << 13) & 0x00ff0000) | + ((blue << 5) & 0x0000ff00); + break; + case 7: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = 3 * (word1 >> 24) + 9 * (word2 >> 24) + + (word3 >> 24) + 3 * (word4 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + + 9 * ((word2 >> 16) & 0xff) + + ((word3 >> 16) & 0xff) + + 3 * ((word4 >> 16) & 0xff); + blue = 3 * ((word1 >> 8) & 0xff) + + 9 * ((word2 >> 8) & 0xff) + + ((word3 >> 8) & 0xff) + + 3 * ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 20) & 0xff000000) | + ((green << 12) & 0x00ff0000) | + ((blue << 4) & 0x0000ff00); + break; + case 8: + word1 = *pword; + word3 = *(pword + wpls); + red = (word1 >> 24) + (word3 >> 24); + green = ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff); + *(lined + j) = ((red << 23) & 0xff000000) | + ((green << 15) & 0x00ff0000) | + ((blue << 7) & 0x0000ff00); + break; + case 9: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = 3 * (word1 >> 24) + (word2 >> 24) + + 3 * (word3 >> 24) + (word4 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + + 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); + blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + + 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 21) & 0xff000000) | + ((green << 13) & 0x00ff0000) | + ((blue << 5) & 0x0000ff00); + break; + case 10: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = (word1 >> 24) + (word2 >> 24) + + (word3 >> 24) + (word4 >> 24); + green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + + ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + + ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 22) & 0xff000000) | + ((green << 14) & 0x00ff0000) | + ((blue << 6) & 0x0000ff00); + break; + case 11: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = (word1 >> 24) + 3 * (word2 >> 24) + + (word3 >> 24) + 3 * (word4 >> 24); + green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + + ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + + ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 21) & 0xff000000) | + ((green << 13) & 0x00ff0000) | + ((blue << 5) & 0x0000ff00); + break; + case 12: + word1 = *pword; + word3 = *(pword + wpls); + red = (word1 >> 24) + 3 * (word3 >> 24); + green = ((word1 >> 16) & 0xff) + + 3 * ((word3 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + + 3 * ((word3 >> 8) & 0xff); + *(lined + j) = ((red << 22) & 0xff000000) | + ((green << 14) & 0x00ff0000) | + ((blue << 6) & 0x0000ff00); + break; + case 13: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = 3 * (word1 >> 24) + (word2 >> 24) + + 9 * (word3 >> 24) + 3 * (word4 >> 24); + green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + + 9 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); + blue = 3 *((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + + 9 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 20) & 0xff000000) | + ((green << 12) & 0x00ff0000) | + ((blue << 4) & 0x0000ff00); + break; + case 14: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = (word1 >> 24) + (word2 >> 24) + + 3 * (word3 >> 24) + 3 * (word4 >> 24); + green = ((word1 >> 16) & 0xff) +((word2 >> 16) & 0xff) + + 3 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + + 3 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 21) & 0xff000000) | + ((green << 13) & 0x00ff0000) | + ((blue << 5) & 0x0000ff00); + break; + case 15: + word1 = *pword; + word2 = *(pword + 1); + word3 = *(pword + wpls); + word4 = *(pword + wpls + 1); + red = (word1 >> 24) + 3 * (word2 >> 24) + + 3 * (word3 >> 24) + 9 * (word4 >> 24); + green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + + 3 * ((word3 >> 16) & 0xff) + 9 * ((word4 >> 16) & 0xff); + blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + + 3 * ((word3 >> 8) & 0xff) + 9 * ((word4 >> 8) & 0xff); + *(lined + j) = ((red << 20) & 0xff000000) | + ((green << 12) & 0x00ff0000) | + ((blue << 4) & 0x0000ff00); + break; + default: + fprintf(stderr, "shouldn't get here\n"); + break; + } + } + } +} diff --git a/3rdparty/hgOCR/leptonica/rotateorth.c b/3rdparty/hgOCR/leptonica/rotateorth.c new file mode 100644 index 00000000..bb0e0c0d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rotateorth.c @@ -0,0 +1,712 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file rotateorth.c + *
+ *
+ *      Top-level rotation by multiples of 90 degrees
+ *            PIX             *pixRotateOrth()
+ *
+ *      180-degree rotation
+ *            PIX             *pixRotate180()
+ *
+ *      90-degree rotation (both directions)
+ *            PIX             *pixRotate90()
+ *
+ *      Left-right flip
+ *            PIX             *pixFlipLR()
+ *
+ *      Top-bottom flip
+ *            PIX             *pixFlipTB()
+ *
+ *      Byte reverse tables
+ *            static l_uint8  *makeReverseByteTab1()
+ *            static l_uint8  *makeReverseByteTab2()
+ *            static l_uint8  *makeReverseByteTab4()
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_uint8 *makeReverseByteTab1(void); +static l_uint8 *makeReverseByteTab2(void); +static l_uint8 *makeReverseByteTab4(void); + + +/*------------------------------------------------------------------* + * Top-level rotation by multiples of 90 degrees * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateOrth() + * + * \param[in] pixs all depths + * \param[in] quads 0-3; number of 90 degree cw rotations + * \return pixd, or NULL on error + */ +PIX * +pixRotateOrth(PIX *pixs, + l_int32 quads) +{ + PROCNAME("pixRotateOrth"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (quads < 0 || quads > 3) + return (PIX *)ERROR_PTR("quads not in {0,1,2,3}", procName, NULL); + + if (quads == 0) + return pixCopy(NULL, pixs); + else if (quads == 1) + return pixRotate90(pixs, 1); + else if (quads == 2) + return pixRotate180(NULL, pixs); + else /* quads == 3 */ + return pixRotate90(pixs, -1); +} + + +/*------------------------------------------------------------------* + * 180 degree rotation * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotate180() + * + * \param[in] pixd [optional]; can be null, equal to pixs, + * or different from pixs + * \param[in] pixs all depths + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a 180 rotation of the image about the center,
+ *          which is equivalent to a left-right flip about a vertical
+ *          line through the image center, followed by a top-bottom
+ *          flip about a horizontal line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) pixd == null (creates a new pixd)
+ *          (b) pixd == pixs (in-place operation)
+ *          (c) pixd != pixs (existing pixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) pixd = pixRotate180(NULL, pixs);
+ *          (b) pixRotate180(pixs, pixs);
+ *          (c) pixRotate180(pixd, pixs);
+ * 
+ */ +PIX * +pixRotate180(PIX *pixd, + PIX *pixs) +{ +l_int32 d; + + PROCNAME("pixRotate180"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", + procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + pixFlipLR(pixd, pixd); + pixFlipTB(pixd, pixd); + return pixd; +} + + +/*------------------------------------------------------------------* + * 90 degree rotation * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotate90() + * + * \param[in] pixs all depths + * \param[in] direction clockwise = 1, counterclockwise = -1 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a 90 degree rotation of the image about the center,
+ *          either cw or ccw, returning a new pix.
+ *      (2) The direction must be either 1 (cw) or -1 (ccw).
+ * 
+ */ +PIX * +pixRotate90(PIX *pixs, + l_int32 direction) +{ +l_int32 wd, hd, d, wpls, wpld; +l_int32 i, j, k, m, iend, nswords; +l_uint32 val, word; +l_uint32 *lines, *datas, *lined, *datad; +PIX *pixd; + + PROCNAME("pixRotate90"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &hd, &wd, &d); /* note: reversed */ + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", + procName, NULL); + if (direction != 1 && direction != -1) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + + if ((pixd = pixCreate(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyColormap(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixCopySpp(pixd, pixs); + + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + if (direction == 1) { /* clockwise */ + switch (d) + { + case 32: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + lined[j] = lines[i]; + lines -= wpls; + } + } + break; + case 16: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_TWO_BYTES(lines, i))) + SET_DATA_TWO_BYTES(lined, j, val); + lines -= wpls; + } + } + break; + case 8: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_BYTE(lines, i))) + SET_DATA_BYTE(lined, j, val); + lines -= wpls; + } + } + break; + case 4: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_QBIT(lines, i))) + SET_DATA_QBIT(lined, j, val); + lines -= wpls; + } + } + break; + case 2: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas + (wd - 1) * wpls; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_DIBIT(lines, i))) + SET_DATA_DIBIT(lined, j, val); + lines -= wpls; + } + } + break; + case 1: + nswords = hd / 32; + for (j = 0; j < wd; j++) { + lined = datad; + lines = datas + (wd - 1 - j) * wpls; + for (k = 0; k < nswords; k++) { + word = lines[k]; + if (!word) { + lined += 32 * wpld; + continue; + } else { + iend = 32 * (k + 1); + for (m = 0, i = 32 * k; i < iend; i++, m++) { + if ((word << m) & 0x80000000) + SET_DATA_BIT(lined, j); + lined += wpld; + } + } + } + for (i = 32 * nswords; i < hd; i++) { + if (GET_DATA_BIT(lines, i)) + SET_DATA_BIT(lined, j); + lined += wpld; + } + } + break; + default: + pixDestroy(&pixd); + L_ERROR("illegal depth: %d\n", procName, d); + break; + } + } else { /* direction counter-clockwise */ + switch (d) + { + case 32: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + lined[j] = lines[hd - 1 - i]; + lines += wpls; + } + } + break; + case 16: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_TWO_BYTES(lines, hd - 1 - i))) + SET_DATA_TWO_BYTES(lined, j, val); + lines += wpls; + } + } + break; + case 8: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_BYTE(lines, hd - 1 - i))) + SET_DATA_BYTE(lined, j, val); + lines += wpls; + } + } + break; + case 4: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_QBIT(lines, hd - 1 - i))) + SET_DATA_QBIT(lined, j, val); + lines += wpls; + } + } + break; + case 2: + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + lines = datas; + for (j = 0; j < wd; j++) { + if ((val = GET_DATA_DIBIT(lines, hd - 1 - i))) + SET_DATA_DIBIT(lined, j, val); + lines += wpls; + } + } + break; + case 1: + nswords = hd / 32; + for (j = 0; j < wd; j++) { + lined = datad + (hd - 1) * wpld; + lines = datas + (wd - 1 - j) * wpls; + for (k = 0; k < nswords; k++) { + word = lines[k]; + if (!word) { + lined -= 32 * wpld; + continue; + } else { + iend = 32 * (k + 1); + for (m = 0, i = 32 * k; i < iend; i++, m++) { + if ((word << m) & 0x80000000) + SET_DATA_BIT(lined, wd - 1 - j); + lined -= wpld; + } + } + } + for (i = 32 * nswords; i < hd; i++) { + if (GET_DATA_BIT(lines, i)) + SET_DATA_BIT(lined, wd - 1 - j); + lined -= wpld; + } + } + break; + default: + pixDestroy(&pixd); + L_ERROR("illegal depth: %d\n", procName, d); + break; + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Left-right flip * + *------------------------------------------------------------------*/ +/*! + * \brief pixFlipLR() + * + * \param[in] pixd [optional]; can be null, equal to pixs, + * or different from pixs + * \param[in] pixs all depths + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a left-right flip of the image, which is
+ *          equivalent to a rotation out of the plane about a
+ *          vertical line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) pixd == null (creates a new pixd)
+ *          (b) pixd == pixs (in-place operation)
+ *          (c) pixd != pixs (existing pixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) pixd = pixFlipLR(NULL, pixs);
+ *          (b) pixFlipLR(pixs, pixs);
+ *          (c) pixFlipLR(pixd, pixs);
+ *      (4) If an existing pixd is not the same size as pixs, the
+ *          image data will be reallocated.
+ *      (5) The pixel access routines allow a trivial implementation.
+ *          However, for d < 8, it is more efficient to right-justify
+ *          each line to a 32-bit boundary and then extract bytes and
+ *          do pixel reversing.   In those cases, as in the 180 degree
+ *          rotation, we right-shift the data (if necessary) to
+ *          right-justify on the 32 bit boundary, and then read the
+ *          bytes off each raster line in reverse order, reversing
+ *          the pixels in each byte using a table.  These functions
+ *          for 1, 2 and 4 bpp were tested against the "trivial"
+ *          version (shown here for 4 bpp):
+ *              for (i = 0; i < h; i++) {
+ *                  line = data + i * wpl;
+ *                  memcpy(buffer, line, bpl);
+ *                    for (j = 0; j < w; j++) {
+ *                      val = GET_DATA_QBIT(buffer, w - 1 - j);
+ *                        SET_DATA_QBIT(line, j, val);
+ *                  }
+ *              }
+ * 
+ */ +PIX * +pixFlipLR(PIX *pixd, + PIX *pixs) +{ +l_uint8 *tab; +l_int32 w, h, d, wpl; +l_int32 extra, shift, databpl, bpl, i, j; +l_uint32 val; +l_uint32 *line, *data, *buffer; + + PROCNAME("pixFlipLR"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", + procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + switch (d) + { + case 1: + tab = makeReverseByteTab1(); + break; + case 2: + tab = makeReverseByteTab2(); + break; + case 4: + tab = makeReverseByteTab4(); + break; + default: + tab = NULL; + break; + } + + /* Possibly inplace assigning return val, so on failure return pixd */ + if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl, sizeof(l_uint32))) == NULL) { + if (tab) LEPT_FREE(tab); + return (PIX *)ERROR_PTR("buffer not made", procName, pixd); + } + + bpl = 4 * wpl; + switch (d) + { + case 32: + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < w; j++) + line[j] = buffer[w - 1 - j]; + } + break; + case 16: + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < w; j++) { + val = GET_DATA_TWO_BYTES(buffer, w - 1 - j); + SET_DATA_TWO_BYTES(line, j, val); + } + } + break; + case 8: + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < w; j++) { + val = GET_DATA_BYTE(buffer, w - 1 - j); + SET_DATA_BYTE(line, j, val); + } + } + break; + case 4: + extra = (w * d) & 31; + if (extra) + shift = 8 - extra / 4; + else + shift = 0; + if (shift) + rasteropHipLow(data, h, d, wpl, 0, h, shift); + + databpl = (w + 1) / 2; + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < databpl; j++) { + val = GET_DATA_BYTE(buffer, bpl - 1 - j); + SET_DATA_BYTE(line, j, tab[val]); + } + } + break; + case 2: + extra = (w * d) & 31; + if (extra) + shift = 16 - extra / 2; + else + shift = 0; + if (shift) + rasteropHipLow(data, h, d, wpl, 0, h, shift); + + databpl = (w + 3) / 4; + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < databpl; j++) { + val = GET_DATA_BYTE(buffer, bpl - 1 - j); + SET_DATA_BYTE(line, j, tab[val]); + } + } + break; + case 1: + extra = (w * d) & 31; + if (extra) + shift = 32 - extra; + else + shift = 0; + if (shift) + rasteropHipLow(data, h, d, wpl, 0, h, shift); + + databpl = (w + 7) / 8; + for (i = 0; i < h; i++) { + line = data + i * wpl; + memcpy(buffer, line, bpl); + for (j = 0; j < databpl; j++) { + val = GET_DATA_BYTE(buffer, bpl - 1 - j); + SET_DATA_BYTE(line, j, tab[val]); + } + } + break; + default: + pixDestroy(&pixd); + L_ERROR("illegal depth: %d\n", procName, d); + break; + } + + LEPT_FREE(buffer); + if (tab) LEPT_FREE(tab); + return pixd; +} + + +/*------------------------------------------------------------------* + * Top-bottom flip * + *------------------------------------------------------------------*/ +/*! + * \brief pixFlipTB() + * + * \param[in] pixd [optional]; can be null, equal to pixs, + * or different from pixs + * \param[in] pixs all depths + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This does a top-bottom flip of the image, which is
+ *          equivalent to a rotation out of the plane about a
+ *          horizontal line through the image center.
+ *      (2) There are 3 cases for input:
+ *          (a) pixd == null (creates a new pixd)
+ *          (b) pixd == pixs (in-place operation)
+ *          (c) pixd != pixs (existing pixd)
+ *      (3) For clarity, use these three patterns, respectively:
+ *          (a) pixd = pixFlipTB(NULL, pixs);
+ *          (b) pixFlipTB(pixs, pixs);
+ *          (c) pixFlipTB(pixd, pixs);
+ *      (4) If an existing pixd is not the same size as pixs, the
+ *          image data will be reallocated.
+ *      (5) This is simple and fast.  We use the memcpy function
+ *          to do all the work on aligned data, regardless of pixel
+ *          depth.
+ * 
+ */ +PIX * +pixFlipTB(PIX *pixd, + PIX *pixs) +{ +l_int32 h, d, wpl, i, k, h2, bpl; +l_uint32 *linet, *lineb; +l_uint32 *data, *buffer; + + PROCNAME("pixFlipTB"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, NULL, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", + procName, NULL); + + /* Prepare pixd for in-place operation */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + data = pixGetData(pixd); + wpl = pixGetWpl(pixd); + if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl, sizeof(l_uint32))) == NULL) + return (PIX *)ERROR_PTR("buffer not made", procName, pixd); + + h2 = h / 2; + bpl = 4 * wpl; + for (i = 0, k = h - 1; i < h2; i++, k--) { + linet = data + i * wpl; + lineb = data + k * wpl; + memcpy(buffer, linet, bpl); + memcpy(linet, lineb, bpl); + memcpy(lineb, buffer, bpl); + } + + LEPT_FREE(buffer); + return pixd; +} + + +/*------------------------------------------------------------------* + * Static byte reverse tables * + *------------------------------------------------------------------*/ +/*! + * \brief makeReverseByteTab1() + * + * Notes: + * (1) This generates an 8 bit lookup table for reversing + * the order of eight 1-bit pixels. + */ +static l_uint8 * +makeReverseByteTab1(void) +{ +l_int32 i; +l_uint8 *tab; + + tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); + for (i = 0; i < 256; i++) + tab[i] = ((0x80 & i) >> 7) | + ((0x40 & i) >> 5) | + ((0x20 & i) >> 3) | + ((0x10 & i) >> 1) | + ((0x08 & i) << 1) | + ((0x04 & i) << 3) | + ((0x02 & i) << 5) | + ((0x01 & i) << 7); + return tab; +} + + +/*! + * \brief makeReverseByteTab2() + * + * Notes: + * (1) This generates an 8 bit lookup table for reversing + * the order of four 2-bit pixels. + */ +static l_uint8 * +makeReverseByteTab2(void) +{ +l_int32 i; +l_uint8 *tab; + + tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); + for (i = 0; i < 256; i++) + tab[i] = ((0xc0 & i) >> 6) | + ((0x30 & i) >> 2) | + ((0x0c & i) << 2) | + ((0x03 & i) << 6); + return tab; +} + + +/*! + * \brief makeReverseByteTab4() + * + * Notes: + * (1) This generates an 8 bit lookup table for reversing + * the order of two 4-bit pixels. + */ +static l_uint8 * +makeReverseByteTab4(void) +{ +l_int32 i; +l_uint8 *tab; + + tab = (l_uint8 *)LEPT_CALLOC(256, sizeof(l_uint8)); + for (i = 0; i < 256; i++) + tab[i] = ((0xf0 & i) >> 4) | ((0x0f & i) << 4); + return tab; +} diff --git a/3rdparty/hgOCR/leptonica/rotateshear.c b/3rdparty/hgOCR/leptonica/rotateshear.c new file mode 100644 index 00000000..6cf7bc64 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/rotateshear.c @@ -0,0 +1,494 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file rotateshear.c + *
+ *
+ *      Shear rotation about arbitrary point using 2 and 3 shears
+ *
+ *              PIX      *pixRotateShear()
+ *              PIX      *pixRotate2Shear()
+ *              PIX      *pixRotate3Shear()
+ *
+ *      Shear rotation in-place about arbitrary point using 3 shears
+ *              l_int32   pixRotateShearIP()
+ *
+ *      Shear rotation around the image center
+ *              PIX      *pixRotateShearCenter()    (2 or 3 shears)
+ *              l_int32   pixRotateShearCenterIP()  (3 shears)
+ *
+ *  Rotation is measured in radians; clockwise rotations are positive.
+ *
+ *  Rotation by shear works on images of any depth,
+ *  including 8 bpp color paletted images and 32 bpp
+ *  rgb images.  It works by translating each src pixel
+ *  value to the appropriate pixel in the rotated dest.
+ *  For 8 bpp grayscale images, it is about 10-15x faster
+ *  than rotation by area-mapping.
+ *
+ *  This speed and flexibility comes at the following cost,
+ *  relative to area-mapped rotation:
+ *
+ *    ~  Jaggies are created on edges of straight lines
+ *
+ *    ~  For large angles, where you must use 3 shears,
+ *       there is some extra clipping from the shears.
+ *
+ *  For small angles, typically less than 0.05 radians,
+ *  rotation can be done with 2 orthogonal shears.
+ *  Two such continuous shears (as opposed to the discrete
+ *  shears on a pixel lattice that we have here) give
+ *  a rotated image that has a distortion in the lengths
+ *  of the two rotated and still-perpendicular axes.  The
+ *  length/width ratio changes by a fraction
+ *
+ *       0.5 * (angle)**2
+ *
+ *  For an angle of 0.05 radians, this is about 1 part in
+ *  a thousand.  This distortion is absent when you use
+ *  3 continuous shears with the correct angles (see below).
+ *
+ *  Of course, the image is on a discrete pixel lattice.
+ *  Rotation by shear gives an approximation to a continuous
+ *  rotation, leaving pixel jaggies at sharp boundaries.
+ *  For very small rotations, rotating from a corner gives
+ *  better sensitivity than rotating from the image center.
+ *  Here's why.  Define the shear "center" to be the line such
+ *  that the image is sheared in opposite directions on
+ *  each side of and parallel to the line.  For small
+ *  rotations there is a "dead space" on each side of the
+ *  shear center of width equal to half the shear angle,
+ *  in radians.  Thus, when the image is sheared about the center,
+ *  the dead space width equals the shear angle, but when
+ *  the image is sheared from a corner, the dead space
+ *  width is only half the shear angle.
+ *
+ *  All horizontal and vertical shears are implemented by
+ *  rasterop.  The in-place rotation uses special in-place
+ *  shears that copy rows sideways or columns vertically
+ *  without buffering, and then rewrite old pixels that are
+ *  no longer covered by sheared pixels.  For that rewriting,
+ *  you have the choice of using white or black pixels.
+ *  When not in-place, the new pix is initialized with white or black
+ *  pixels by pixSetBlackOrWhite(), which also works for cmapped pix.
+ *  But for in-place, this initialization is not possible, so
+ *  in-place shear operations on cmapped pix are not allowed.
+ *
+ *  Rotation by shear is fast and depth-independent.  However, it
+ *  does not work well for large rotation angles.  In fact, for
+ *  rotation angles greater than about 7 degrees, more pixels are
+ *  lost at the edges than when using pixRotationBySampling(), which
+ *  only loses pixels because they are rotated out of the image.
+ *  For larger rotations, use pixRotationBySampling() or, for
+ *  more accuracy when d > 1 bpp, pixRotateAM().
+ *
+ *  For small angles, when comparing the quality of rotation by
+ *  sampling and by shear, you can see that rotation by sampling
+ *  is slightly more accurate.  However, the difference in
+ *  accuracy of rotation by sampling when compared to 3-shear and
+ *  (for angles less than 2 degrees, when compared to 2-shear) is
+ *  less than 1 pixel at any point.  For very small angles, rotation by
+ *  sampling is much slower than rotation by shear.  The speed difference
+ *  depends on the pixel depth and the rotation angle.  Rotation
+ *  by shear is very fast for small angles and for small depth (esp. 1 bpp).
+ *  Rotation by sampling speed is independent of angle and relatively
+ *  more efficient for 8 and 32 bpp images.  Here are some timings
+ *  for the ratio of rotation times: (time for sampling)/ (time for shear)
+  *
+ *       depth (bpp)       ratio (2 deg)       ratio (10 deg)
+ *       -----------------------------------------------------
+ *          1                  25                  6
+ *          8                   5                  2.6
+ *          32                  1.6                1.0
+ *
+ *  In summary:
+ *    * For d == 1 and small angles, use rotation by shear.  By default
+ *      this will use 2-shear rotations, because 3-shears cause more
+ *      visible artifacts in straight lines and, for small angles, the
+ *      distortion in asperity ratio is small.
+ *    * For d > 1, shear is faster than sampling, which is faster than
+ *      area mapping.  However, area mapping gives the best results.
+ *  These results are used in selecting the rotation methods in
+ *  pixRotateShear().
+ *
+ *  There has been some work on what is called a "quasishear
+ *  rotation" ("The Quasi-Shear Rotation, Eric Andres,
+ *  DGCI 1996, pp. 307-314).  I believe they use a 3-shear
+ *  approximation to the continuous rotation, exactly as
+ *  we do here.  The approximation is due to being on
+ *  a square pixel lattice.  They also use integers to specify
+ *  the rotation angle and center offset, but that makes
+ *  little sense on a machine where you have a few GFLOPS
+ *  and only a few hundred floating point operations to do (!)
+ *  They also allow subpixel specification of the center of
+ *  rotation, which I haven't bothered with, and claim that
+ *  better results are possible if each of the 4 quadrants is
+ *  handled separately.
+ *
+ *  But the bottom line is that you are going to see shear lines when
+ *  you rotate 1 bpp images.  Although the 3-shear rotation is
+ *  mathematically exact in the limit of infinitesimal pixels, artifacts
+ *  will be evident in real images.  One might imagine using dithering
+ *  to break up the horizontal and vertical shear lines, but this
+ *  is hard with block shears, where you need to dither on the block
+ *  boundaries.  Dithering (by accumulation of 'error') with sampling
+ *  makes more sense, but I haven't tried to do this.  There is only
+ *  so much you can do with 1 bpp images!
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Angle limits: + * angle < MinAngleToRotate ==> clone + * angle > MaxTwoShearAngle ==> warning for 2-angle shears + * angle > MaxThreeShearAngle ==> warning for 3-angle shears + * angle > MaxShearAngle ==> error + */ +static const l_float32 MinAngleToRotate = 0.001; /* radians; ~0.06 deg */ +static const l_float32 MaxTwoShearAngle = 0.06; /* radians; ~3 deg */ +static const l_float32 MaxThreeShearAngle = 0.35; /* radians; ~20 deg */ +static const l_float32 MaxShearAngle = 0.50; /* radians; ~29 deg */ + +/*------------------------------------------------------------------* + * Rotations about an arbitrary point * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateShear() + * + * \param[in] pixs any depth; cmap ok + * \param[in] xcen x value for which there is no horizontal shear + * \param[in] ycen y value for which there is no vertical shear + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) This rotates an image about the given point, using
+ *          either 2 or 3 shears.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) This brings in 'incolor' pixels from outside the image.
+ *      (4) For rotation angles larger than about 0.35 radians, we issue
+ *          a warning because you should probably be using another method
+ *          (either sampling or area mapping)
+ * 
+ */ +PIX * +pixRotateShear(PIX *pixs, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 incolor) +{ + PROCNAME("pixRotateShear"); + + if (!pixs) + return (PIX *)(PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + + if (L_ABS(angle) > MaxShearAngle) { + L_ERROR("%6.2f radians; too large for shear rotation\n", procName, + L_ABS(angle)); + return NULL; + } + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + + if (L_ABS(angle) <= MaxTwoShearAngle) + return pixRotate2Shear(pixs, xcen, ycen, angle, incolor); + else + return pixRotate3Shear(pixs, xcen, ycen, angle, incolor); +} + + +/*! + * \brief pixRotate2Shear() + * + * \param[in] pixs any depth; cmap ok + * \param[in] xcen, ycen center of rotation + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) This rotates the image about the given point, using the 2-shear
+ *          method.  It should only be used for angles no larger than
+ *          MaxTwoShearAngle.  For larger angles, a warning is issued.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) 2-shear rotation by a specified angle is equivalent
+ *          to the sequential transformations
+ *             x' = x + tan(angle) * (y - ycen)     for x-shear
+ *             y' = y + tan(angle) * (x - xcen)     for y-shear
+ *      (4) Computation of tan(angle) is performed within the shear operation.
+ *      (5) This brings in 'incolor' pixels from outside the image.
+ *      (6) If the image has an alpha layer, it is rotated separately by
+ *          two shears.
+ * 
+ */ +PIX * +pixRotate2Shear(PIX *pixs, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 incolor) +{ +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixRotate2Shear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + + if (L_ABS(angle) > MaxShearAngle) { + L_ERROR("%6.2f radians; too large for shear rotation\n", procName, + L_ABS(angle)); + return NULL; + } + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + if (L_ABS(angle) > MaxTwoShearAngle) + L_WARNING("%6.2f radians; large angle for 2-shear rotation\n", + procName, L_ABS(angle)); + + if ((pix1 = pixHShear(NULL, pixs, ycen, angle, incolor)) == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + pixd = pixVShear(NULL, pix1, xcen, angle, incolor); + pixDestroy(&pix1); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + /* L_BRING_IN_WHITE brings in opaque for the alpha component */ + pix2 = pixRotate2Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + return pixd; +} + + +/*! + * \brief pixRotate3Shear() + * + * \param[in] pixs any depth; cmap ok + * \param[in] xcen, ycen center of rotation + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) This rotates the image about the given point, using the 3-shear
+ *          method.  It should only be used for angles smaller than
+ *          MaxThreeShearAngle.  For larger angles, a warning is issued.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) 3-shear rotation by a specified angle is equivalent
+ *          to the sequential transformations
+ *            y' = y + tan(angle/2) * (x - xcen)     for first y-shear
+ *            x' = x + sin(angle) * (y - ycen)       for x-shear
+ *            y' = y + tan(angle/2) * (x - xcen)     for second y-shear
+ *      (4) Computation of tan(angle) is performed in the shear operations.
+ *      (5) This brings in 'incolor' pixels from outside the image.
+ *      (6) If the image has an alpha layer, it is rotated separately by
+ *          two shears.
+ *      (7) The algorithm was published by Alan Paeth: "A Fast Algorithm
+ *          for General Raster Rotation," Graphics Interface '86,
+ *          pp. 77-81, May 1986.  A description of the method, along with
+ *          an implementation, can be found in Graphics Gems, p. 179,
+ *          edited by Andrew Glassner, published by Academic Press, 1990.
+ * 
+ */ +PIX * +pixRotate3Shear(PIX *pixs, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 incolor) +{ +l_float32 hangle; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixRotate3Shear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + + if (L_ABS(angle) > MaxShearAngle) { + L_ERROR("%6.2f radians; too large for shear rotation\n", procName, + L_ABS(angle)); + return NULL; + } + if (L_ABS(angle) < MinAngleToRotate) + return pixClone(pixs); + if (L_ABS(angle) > MaxThreeShearAngle) { + L_WARNING("%6.2f radians; large angle for 3-shear rotation\n", + procName, L_ABS(angle)); + } + + hangle = atan(sin(angle)); + if ((pixd = pixVShear(NULL, pixs, xcen, angle / 2., incolor)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + if ((pix1 = pixHShear(NULL, pixd, ycen, hangle, incolor)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); + } + pixVShear(pixd, pix1, xcen, angle / 2., incolor); + pixDestroy(&pix1); + + if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + /* L_BRING_IN_WHITE brings in opaque for the alpha component */ + pix2 = pixRotate3Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + } + return pixd; +} + + +/*------------------------------------------------------------------* + * Rotations in-place about an arbitrary point * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateShearIP() + * + * \param[in] pixs any depth; no cmap + * \param[in] xcen, ycen center of rotation + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This does an in-place rotation of the image about the
+ *          specified point, using the 3-shear method.  It should only
+ *          be used for angles smaller than MaxThreeShearAngle.
+ *          For larger angles, a warning is issued.
+ *      (2) A positive angle gives a clockwise rotation.
+ *      (3) 3-shear rotation by a specified angle is equivalent
+ *          to the sequential transformations
+ *            y' = y + tan(angle/2) * (x - xcen)      for first y-shear
+ *            x' = x + sin(angle) * (y - ycen)        for x-shear
+ *            y' = y + tan(angle/2) * (x - xcen)      for second y-shear
+ *      (4) Computation of tan(angle) is performed in the shear operations.
+ *      (5) This brings in 'incolor' pixels from outside the image.
+ *      (6) The pix cannot be colormapped, because the in-place operation
+ *          only blits in 0 or 1 bits, not an arbitrary colormap index.
+ * 
+ */ +l_ok +pixRotateShearIP(PIX *pixs, + l_int32 xcen, + l_int32 ycen, + l_float32 angle, + l_int32 incolor) +{ +l_float32 hangle; + + PROCNAME("pixRotateShearIP"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return ERROR_INT("invalid value for incolor", procName, 1); + if (pixGetColormap(pixs) != NULL) + return ERROR_INT("pixs is colormapped", procName, 1); + + if (angle == 0.0) + return 0; + if (L_ABS(angle) > MaxThreeShearAngle) { + L_WARNING("%6.2f radians; large angle for in-place 3-shear rotation\n", + procName, L_ABS(angle)); + } + + hangle = atan(sin(angle)); + pixHShearIP(pixs, ycen, angle / 2., incolor); + pixVShearIP(pixs, xcen, hangle, incolor); + pixHShearIP(pixs, ycen, angle / 2., incolor); + return 0; +} + + +/*------------------------------------------------------------------* + * Rotations about the image center * + *------------------------------------------------------------------*/ +/*! + * \brief pixRotateShearCenter() + * + * \param[in] pixs any depth; cmap ok + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return pixd, or NULL on error + */ +PIX * +pixRotateShearCenter(PIX *pixs, + l_float32 angle, + l_int32 incolor) +{ + PROCNAME("pixRotateShearCenter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + return pixRotateShear(pixs, pixGetWidth(pixs) / 2, + pixGetHeight(pixs) / 2, angle, incolor); +} + + +/*! + * \brief pixRotateShearCenterIP() + * + * \param[in] pixs any depth; no cmap + * \param[in] angle radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK + * \return 0 if OK, 1 on error + */ +l_ok +pixRotateShearCenterIP(PIX *pixs, + l_float32 angle, + l_int32 incolor) +{ + PROCNAME("pixRotateShearCenterIP"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + return pixRotateShearIP(pixs, pixGetWidth(pixs) / 2, + pixGetHeight(pixs) / 2, angle, incolor); +} diff --git a/3rdparty/hgOCR/leptonica/runlength.c b/3rdparty/hgOCR/leptonica/runlength.c new file mode 100644 index 00000000..43c85429 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/runlength.c @@ -0,0 +1,811 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file runlength.c + *
+ *
+ *     Label pixels by membership in runs
+ *           PIX         *pixStrokeWidthTransform()
+ *           static PIX  *pixFindMinRunsOrthogonal()
+ *           PIX         *pixRunlengthTransform()
+ *
+ *     Find runs along horizontal and vertical lines
+ *           l_int32      pixFindHorizontalRuns()
+ *           l_int32      pixFindVerticalRuns()
+ *
+ *     Find max runs along horizontal and vertical lines
+ *           l_int32      pixFindMaxRuns()
+ *           l_int32      pixFindMaxHorizontalRunOnLine()
+ *           l_int32      pixFindMaxVerticalRunOnLine()
+ *
+ *     Compute runlength-to-membership transform on a line
+ *           l_int32      runlengthMembershipOnLine()
+ *
+ *     Make byte position LUT
+ *           l_int32      makeMSBitLocTab()
+ *
+ *  Here we're handling runs of either black or white pixels on 1 bpp
+ *  images.  The directions of the runs in the stroke width transform
+ *  are selectable from given sets of angles.  Most of the other runs
+ *  are oriented either horizontally along the raster lines or
+ *  vertically along pixel columns.
+ * 
+ */ + +#include +#include +#include "allheaders.h" + +static PIX *pixFindMinRunsOrthogonal(PIX *pixs, l_float32 angle, l_int32 depth); + + +/*-----------------------------------------------------------------------* + * Label pixels by membership in runs * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixStrokeWidthTransform() + * + * \param[in] pixs 1 bpp + * \param[in] color 0 for white runs, 1 for black runs + * \param[in] depth of pixd: 8 or 16 bpp + * \param[in] nangles 2, 4, 6 or 8 + * \return pixd 8 or 16 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) The dest Pix is 8 or 16 bpp, with the pixel values
+ *          equal to the stroke width in which it is a member.
+ *          The values are clipped to the max pixel value if necessary.
+ *      (2) %color determines if we're labelling white or black strokes.
+ *      (3) A pixel that is not a member of the chosen color gets
+ *          value 0; it belongs to a width of length 0 of the
+ *          chosen color.
+ *      (4) This chooses, for each dest pixel, the minimum of sets
+ *          of runlengths through each pixel.  Here are the sets:
+ *            nangles    increment          set
+ *            -------    ---------    --------------------------------
+ *               2          90       {0, 90}
+ *               4          45       {0, 45, 90, 135}
+ *               6          30       {0, 30, 60, 90, 120, 150}
+ *               8          22.5     {0, 22.5, 45, 67.5, 90, 112.5, 135, 157.5}
+ *      (5) Runtime scales linearly with (%nangles - 2).
+ * 
+ */ +PIX * +pixStrokeWidthTransform(PIX *pixs, + l_int32 color, + l_int32 depth, + l_int32 nangles) +{ +l_float32 angle, pi; +PIX *pixh, *pixv, *pixt, *pixg1, *pixg2, *pixg3, *pixg4; + + PROCNAME("pixStrokeWidthTransform"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (depth != 8 && depth != 16) + return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", procName, NULL); + if (nangles != 2 && nangles != 4 && nangles != 6 && nangles != 8) + return (PIX *)ERROR_PTR("nangles not in {2,4,6,8}", procName, NULL); + + /* Use fg runs for evaluation */ + if (color == 0) + pixt = pixInvert(NULL, pixs); + else + pixt = pixClone(pixs); + + /* Find min length at 0 and 90 degrees */ + pixh = pixRunlengthTransform(pixt, 1, L_HORIZONTAL_RUNS, depth); + pixv = pixRunlengthTransform(pixt, 1, L_VERTICAL_RUNS, depth); + pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); + pixDestroy(&pixh); + pixDestroy(&pixv); + + pixg2 = pixg3 = pixg4 = NULL; + pi = 3.1415926535; + if (nangles == 4 || nangles == 8) { + /* Find min length at +45 and -45 degrees */ + angle = pi / 4.0; + pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); + } + + if (nangles == 6) { + /* Find min length at +30 and -60 degrees */ + angle = pi / 6.0; + pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); + + /* Find min length at +60 and -30 degrees */ + angle = pi / 3.0; + pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); + } + + if (nangles == 8) { + /* Find min length at +22.5 and -67.5 degrees */ + angle = pi / 8.0; + pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); + + /* Find min length at +67.5 and -22.5 degrees */ + angle = 3.0 * pi / 8.0; + pixg4 = pixFindMinRunsOrthogonal(pixt, angle, depth); + } + pixDestroy(&pixt); + + if (nangles > 2) + pixMinOrMax(pixg1, pixg1, pixg2, L_CHOOSE_MIN); + if (nangles > 4) + pixMinOrMax(pixg1, pixg1, pixg3, L_CHOOSE_MIN); + if (nangles > 6) + pixMinOrMax(pixg1, pixg1, pixg4, L_CHOOSE_MIN); + pixDestroy(&pixg2); + pixDestroy(&pixg3); + pixDestroy(&pixg4); + return pixg1; +} + + +/*! + * \brief pixFindMinRunsOrthogonal() + * + * \param[in] pixs 1 bpp + * \param[in] angle in radians + * \param[in] depth of pixd: 8 or 16 bpp + * \return pixd 8 or 16 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This computes, for each fg pixel in pixs, the minimum of
+ *          the runlengths going through that pixel in two orthogonal
+ *          directions: at %angle and at (90 + %angle).
+ *      (2) We use rotation by shear because the forward and backward
+ *          rotations by the same angle are exact inverse operations.
+ *          As a result, the nonzero pixels in pixd correspond exactly
+ *          to the fg pixels in pixs.  This is not the case with
+ *          sampled rotation, due to spatial quantization.  Nevertheless,
+ *          the result suffers from lack of exact correspondence
+ *          between original and rotated pixels, also due to spatial
+ *          quantization, causing some boundary pixels to be
+ *          shifted from bg to fg or v.v.
+ * 
+ */ +static PIX * +pixFindMinRunsOrthogonal(PIX *pixs, + l_float32 angle, + l_int32 depth) +{ +l_int32 w, h, diag, xoff, yoff; +PIX *pixb, *pixr, *pixh, *pixv, *pixg1, *pixg2, *pixd; +BOX *box; + + PROCNAME("pixFindMinRunsOrthogonal"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + /* Rasterop into the center of a sufficiently large image + * so we don't lose pixels for any rotation angle. */ + pixGetDimensions(pixs, &w, &h, NULL); + diag = (l_int32)(sqrt((l_float64)(w * w + h * h)) + 2.5); + xoff = (diag - w) / 2; + yoff = (diag - h) / 2; + pixb = pixCreate(diag, diag, 1); + pixRasterop(pixb, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); + + /* Rotate about the 'center', get the min of orthogonal transforms, + * rotate back, and crop the part corresponding to pixs. */ + pixr = pixRotateShear(pixb, diag / 2, diag / 2, angle, L_BRING_IN_WHITE); + pixh = pixRunlengthTransform(pixr, 1, L_HORIZONTAL_RUNS, depth); + pixv = pixRunlengthTransform(pixr, 1, L_VERTICAL_RUNS, depth); + pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); + pixg2 = pixRotateShear(pixg1, diag / 2, diag / 2, -angle, L_BRING_IN_WHITE); + box = boxCreate(xoff, yoff, w, h); + pixd = pixClipRectangle(pixg2, box, NULL); + + pixDestroy(&pixb); + pixDestroy(&pixr); + pixDestroy(&pixh); + pixDestroy(&pixv); + pixDestroy(&pixg1); + pixDestroy(&pixg2); + boxDestroy(&box); + return pixd; +} + + +/*! + * \brief pixRunlengthTransform() + * + * \param[in] pixs 1 bpp + * \param[in] color 0 for white runs, 1 for black runs + * \param[in] direction L_HORIZONTAL_RUNS, L_VERTICAL_RUNS + * \param[in] depth 8 or 16 bpp + * \return pixd 8 or 16 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) The dest Pix is 8 or 16 bpp, with the pixel values
+ *          equal to the runlength in which it is a member.
+ *          The length is clipped to the max pixel value if necessary.
+ *      (2) %color determines if we're labelling white or black runs.
+ *      (3) A pixel that is not a member of the chosen color gets
+ *          value 0; it belongs to a run of length 0 of the
+ *          chosen color.
+ *      (4) To convert for maximum dynamic range, either linear or
+ *          log, use pixMaxDynamicRange().
+ * 
+ */ +PIX * +pixRunlengthTransform(PIX *pixs, + l_int32 color, + l_int32 direction, + l_int32 depth) +{ +l_int32 i, j, w, h, wpld, bufsize, maxsize, n; +l_int32 *start, *end, *buffer; +l_uint32 *datad, *lined; +PIX *pixt, *pixd; + + PROCNAME("pixRunlengthTransform"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (depth != 8 && depth != 16) + return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (direction == L_HORIZONTAL_RUNS) + maxsize = 1 + w / 2; + else if (direction == L_VERTICAL_RUNS) + maxsize = 1 + h / 2; + else + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + bufsize = L_MAX(w, h); + if (bufsize > 1000000) { + L_ERROR("largest image dimension = %d; too big\n", procName, bufsize); + return NULL; + } + + if ((pixd = pixCreate(w, h, depth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + start = (l_int32 *)LEPT_CALLOC(maxsize, sizeof(l_int32)); + end = (l_int32 *)LEPT_CALLOC(maxsize, sizeof(l_int32)); + buffer = (l_int32 *)LEPT_CALLOC(bufsize, sizeof(l_int32)); + + /* Use fg runs for evaluation */ + if (color == 0) + pixt = pixInvert(NULL, pixs); + else + pixt = pixClone(pixs); + + if (direction == L_HORIZONTAL_RUNS) { + for (i = 0; i < h; i++) { + pixFindHorizontalRuns(pixt, i, start, end, &n); + runlengthMembershipOnLine(buffer, w, depth, start, end, n); + lined = datad + i * wpld; + if (depth == 8) { + for (j = 0; j < w; j++) + SET_DATA_BYTE(lined, j, buffer[j]); + } else { /* depth == 16 */ + for (j = 0; j < w; j++) + SET_DATA_TWO_BYTES(lined, j, buffer[j]); + } + } + } else { /* L_VERTICAL_RUNS */ + for (j = 0; j < w; j++) { + pixFindVerticalRuns(pixt, j, start, end, &n); + runlengthMembershipOnLine(buffer, h, depth, start, end, n); + if (depth == 8) { + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + SET_DATA_BYTE(lined, j, buffer[i]); + } + } else { /* depth == 16 */ + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + SET_DATA_TWO_BYTES(lined, j, buffer[i]); + } + } + } + } + + pixDestroy(&pixt); + LEPT_FREE(start); + LEPT_FREE(end); + LEPT_FREE(buffer); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Find runs along horizontal and vertical lines * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixFindHorizontalRuns() + * + * \param[in] pix 1 bpp + * \param[in] y line to traverse + * \param[in] xstart returns array of start positions for fg runs + * \param[in] xend returns array of end positions for fg runs + * \param[out] pn the number of runs found + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds foreground horizontal runs on a single scanline.
+ *      (2) To find background runs, use pixInvert() before applying
+ *          this function.
+ *      (3) %xstart and %xend arrays are input.  They should be
+ *          of size w/2 + 1 to insure that they can hold
+ *          the maximum number of runs in the raster line.
+ * 
+ */ +l_ok +pixFindHorizontalRuns(PIX *pix, + l_int32 y, + l_int32 *xstart, + l_int32 *xend, + l_int32 *pn) +{ +l_int32 inrun; /* boolean */ +l_int32 index, w, h, d, j, wpl, val; +l_uint32 *line; + + PROCNAME("pixFindHorizontalRuns"); + + if (!pn) + return ERROR_INT("&n not defined", procName, 1); + *pn = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1) + return ERROR_INT("pix not 1 bpp", procName, 1); + if (y < 0 || y >= h) + return ERROR_INT("y not in [0 ... h - 1]", procName, 1); + if (!xstart) + return ERROR_INT("xstart not defined", procName, 1); + if (!xend) + return ERROR_INT("xend not defined", procName, 1); + + wpl = pixGetWpl(pix); + line = pixGetData(pix) + y * wpl; + + inrun = FALSE; + index = 0; + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(line, j); + if (!inrun) { + if (val) { + xstart[index] = j; + inrun = TRUE; + } + } else { + if (!val) { + xend[index++] = j - 1; + inrun = FALSE; + } + } + } + + /* Finish last run if necessary */ + if (inrun) + xend[index++] = w - 1; + + *pn = index; + return 0; +} + + +/*! + * \brief pixFindVerticalRuns() + * + * \param[in] pix 1 bpp + * \param[in] x line to traverse + * \param[in] ystart returns array of start positions for fg runs + * \param[in] yend returns array of end positions for fg runs + * \param[out] pn the number of runs found + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds foreground vertical runs on a single scanline.
+ *      (2) To find background runs, use pixInvert() before applying
+ *          this function.
+ *      (3) %ystart and %yend arrays are input.  They should be
+ *          of size h/2 + 1 to insure that they can hold
+ *          the maximum number of runs in the raster line.
+ * 
+ */ +l_ok +pixFindVerticalRuns(PIX *pix, + l_int32 x, + l_int32 *ystart, + l_int32 *yend, + l_int32 *pn) +{ +l_int32 inrun; /* boolean */ +l_int32 index, w, h, d, i, wpl, val; +l_uint32 *data, *line; + + PROCNAME("pixFindVerticalRuns"); + + if (!pn) + return ERROR_INT("&n not defined", procName, 1); + *pn = 0; + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1) + return ERROR_INT("pix not 1 bpp", procName, 1); + if (x < 0 || x >= w) + return ERROR_INT("x not in [0 ... w - 1]", procName, 1); + if (!ystart) + return ERROR_INT("ystart not defined", procName, 1); + if (!yend) + return ERROR_INT("yend not defined", procName, 1); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + + inrun = FALSE; + index = 0; + for (i = 0; i < h; i++) { + line = data + i * wpl; + val = GET_DATA_BIT(line, x); + if (!inrun) { + if (val) { + ystart[index] = i; + inrun = TRUE; + } + } else { + if (!val) { + yend[index++] = i - 1; + inrun = FALSE; + } + } + } + + /* Finish last run if necessary */ + if (inrun) + yend[index++] = h - 1; + + *pn = index; + return 0; +} + + +/*-----------------------------------------------------------------------* + * Find max runs along horizontal and vertical lines * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixFindMaxRuns() + * + * \param[in] pix 1 bpp + * \param[in] direction L_HORIZONTAL_RUNS or L_VERTICAL_RUNS + * \param[out] pnastart [optional] start locations of longest runs + * \return na of lengths of runs, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds the longest foreground runs by row or column
+ *      (2) To find background runs, use pixInvert() before applying
+ *          this function.
+ * 
+ */ +NUMA * +pixFindMaxRuns(PIX *pix, + l_int32 direction, + NUMA **pnastart) +{ +l_int32 w, h, i, start, size; +NUMA *nasize; + + PROCNAME("pixFindMaxRuns"); + + if (pnastart) *pnastart = NULL; + if (direction != L_HORIZONTAL_RUNS && direction != L_VERTICAL_RUNS) + return (NUMA *)ERROR_PTR("direction invalid", procName, NULL); + if (!pix || pixGetDepth(pix) != 1) + return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); + + pixGetDimensions(pix, &w, &h, NULL); + nasize = numaCreate(w); + if (pnastart) *pnastart = numaCreate(w); + if (direction == L_HORIZONTAL_RUNS) { + for (i = 0; i < h; i++) { + pixFindMaxHorizontalRunOnLine(pix, i, &start, &size); + numaAddNumber(nasize, size); + if (pnastart) numaAddNumber(*pnastart, start); + } + } else { /* vertical scans */ + for (i = 0; i < w; i++) { + pixFindMaxVerticalRunOnLine(pix, i, &start, &size); + numaAddNumber(nasize, size); + if (pnastart) numaAddNumber(*pnastart, start); + } + } + + return nasize; +} + + +/*! + * \brief pixFindMaxHorizontalRunOnLine() + * + * \param[in] pix 1 bpp + * \param[in] y line to traverse + * \param[out] pxstart [optional] start position + * \param[out] psize the size of the run + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds the longest foreground horizontal run on a scanline.
+ *      (2) To find background runs, use pixInvert() before applying
+ *          this function.
+ * 
+ */ +l_ok +pixFindMaxHorizontalRunOnLine(PIX *pix, + l_int32 y, + l_int32 *pxstart, + l_int32 *psize) +{ +l_int32 inrun; /* boolean */ +l_int32 w, h, j, wpl, val, maxstart, maxsize, length, start; +l_uint32 *line; + + PROCNAME("pixFindMaxHorizontalRunOnLine"); + + if (pxstart) *pxstart = 0; + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + *psize = 0; + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp", procName, 1); + pixGetDimensions(pix, &w, &h, NULL); + if (y < 0 || y >= h) + return ERROR_INT("y not in [0 ... h - 1]", procName, 1); + + wpl = pixGetWpl(pix); + line = pixGetData(pix) + y * wpl; + inrun = FALSE; + start = 0; + maxstart = 0; + maxsize = 0; + for (j = 0; j < w; j++) { + val = GET_DATA_BIT(line, j); + if (!inrun) { + if (val) { + start = j; + inrun = TRUE; + } + } else if (!val) { /* run just ended */ + length = j - start; + if (length > maxsize) { + maxsize = length; + maxstart = start; + } + inrun = FALSE; + } + } + + if (inrun) { /* a run has continued to the end of the row */ + length = j - start; + if (length > maxsize) { + maxsize = length; + maxstart = start; + } + } + if (pxstart) *pxstart = maxstart; + *psize = maxsize; + return 0; +} + + +/*! + * \brief pixFindMaxVerticalRunOnLine() + * + * \param[in] pix 1 bpp + * \param[in] x column to traverse + * \param[out] pystart [optional] start position + * \param[out] psize the size of the run + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This finds the longest foreground vertical run on a scanline.
+ *      (2) To find background runs, use pixInvert() before applying
+ *          this function.
+ * 
+ */ +l_ok +pixFindMaxVerticalRunOnLine(PIX *pix, + l_int32 x, + l_int32 *pystart, + l_int32 *psize) +{ +l_int32 inrun; /* boolean */ +l_int32 w, h, i, wpl, val, maxstart, maxsize, length, start; +l_uint32 *data, *line; + + PROCNAME("pixFindMaxVerticalRunOnLine"); + + if (pystart) *pystart = 0; + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + *psize = 0; + if (!pix || pixGetDepth(pix) != 1) + return ERROR_INT("pix not defined or not 1 bpp", procName, 1); + pixGetDimensions(pix, &w, &h, NULL); + if (x < 0 || x >= w) + return ERROR_INT("x not in [0 ... w - 1]", procName, 1); + + wpl = pixGetWpl(pix); + data = pixGetData(pix); + inrun = FALSE; + start = 0; + maxstart = 0; + maxsize = 0; + for (i = 0; i < h; i++) { + line = data + i * wpl; + val = GET_DATA_BIT(line, x); + if (!inrun) { + if (val) { + start = i; + inrun = TRUE; + } + } else if (!val) { /* run just ended */ + length = i - start; + if (length > maxsize) { + maxsize = length; + maxstart = start; + } + inrun = FALSE; + } + } + + if (inrun) { /* a run has continued to the end of the column */ + length = i - start; + if (length > maxsize) { + maxsize = length; + maxstart = start; + } + } + if (pystart) *pystart = maxstart; + *psize = maxsize; + return 0; +} + + +/*-----------------------------------------------------------------------* + * Compute runlength-to-membership transform on a line * + *-----------------------------------------------------------------------*/ +/*! + * \brief runlengthMembershipOnLine() + * + * \param[in] buffer into which full line of data is placed + * \param[in] size full size of line; w or h + * \param[in] depth 8 or 16 bpp + * \param[in] start array of start positions for fg runs + * \param[in] end array of end positions for fg runs + * \param[in] n the number of runs + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Converts a set of runlengths into a buffer of
+ *          runlength membership values.
+ *      (2) Initialization of the array gives pixels that are
+ *          not within a run the value 0.
+ * 
+ */ +l_ok +runlengthMembershipOnLine(l_int32 *buffer, + l_int32 size, + l_int32 depth, + l_int32 *start, + l_int32 *end, + l_int32 n) +{ +l_int32 i, j, first, last, diff, max; + + PROCNAME("runlengthMembershipOnLine"); + + if (!buffer) + return ERROR_INT("buffer not defined", procName, 1); + if (!start) + return ERROR_INT("start not defined", procName, 1); + if (!end) + return ERROR_INT("end not defined", procName, 1); + + if (depth == 8) + max = 0xff; + else /* depth == 16 */ + max = 0xffff; + + memset(buffer, 0, 4 * size); + for (i = 0; i < n; i++) { + first = start[i]; + last = end[i]; + diff = last - first + 1; + diff = L_MIN(diff, max); + for (j = first; j <= last; j++) + buffer[j] = diff; + } + + return 0; +} + + +/*-----------------------------------------------------------------------* + * Make byte position LUT * + *-----------------------------------------------------------------------*/ +/*! + * \brief makeMSBitLocTab() + * + * \param[in] bitval either 0 or 1 + * \return table: for an input byte, the MS bit location, starting at 0 + * with the MSBit in the byte, or NULL on error. + * + *
+ * Notes:
+ *      (1) If %bitval == 1, it finds the leftmost ON pixel in a byte;
+ *          otherwise if %bitval == 0, it finds the leftmost OFF pixel.
+ *      (2) If there are no pixels of the indicated color in the byte,
+ *          this returns 8.
+ * 
+ */ +l_int32 * +makeMSBitLocTab(l_int32 bitval) +{ +l_int32 i, j; +l_int32 *tab; +l_uint8 byte, mask; + + tab = (l_int32 *)LEPT_CALLOC(256, sizeof(l_int32)); + for (i = 0; i < 256; i++) { + byte = (l_uint8)i; + if (bitval == 0) + byte = ~byte; + tab[i] = 8; + mask = 0x80; + for (j = 0; j < 8; j++) { + if (byte & mask) { + tab[i] = j; + break; + } + mask >>= 1; + } + } + return tab; +} diff --git a/3rdparty/hgOCR/leptonica/sarray1.c b/3rdparty/hgOCR/leptonica/sarray1.c new file mode 100644 index 00000000..77160718 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sarray1.c @@ -0,0 +1,1965 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file sarray1.c + *
+ *
+ *      Create/Destroy/Copy
+ *          SARRAY    *sarrayCreate()
+ *          SARRAY    *sarrayCreateInitialized()
+ *          SARRAY    *sarrayCreateWordsFromString()
+ *          SARRAY    *sarrayCreateLinesFromString()
+ *          void      *sarrayDestroy()
+ *          SARRAY    *sarrayCopy()
+ *          SARRAY    *sarrayClone()
+ *
+ *      Add/Remove string
+ *          l_int32    sarrayAddString()
+ *          static l_int32  sarrayExtendArray()
+ *          char      *sarrayRemoveString()
+ *          l_int32    sarrayReplaceString()
+ *          l_int32    sarrayClear()
+ *
+ *      Accessors
+ *          l_int32    sarrayGetCount()
+ *          char     **sarrayGetArray()
+ *          char      *sarrayGetString()
+ *          l_int32    sarrayGetRefcount()
+ *          l_int32    sarrayChangeRefcount()
+ *
+ *      Conversion back to string
+ *          char      *sarrayToString()
+ *          char      *sarrayToStringRange()
+ *
+ *      Join 2 sarrays
+ *          l_int32    sarrayJoin()
+ *          l_int32    sarrayAppendRange()
+ *
+ *      Pad an sarray to be the same size as another sarray
+ *          l_int32    sarrayPadToSameSize()
+ *
+ *      Convert word sarray to (formatted) line sarray
+ *          SARRAY    *sarrayConvertWordsToLines()
+ *
+ *      Split string on separator list
+ *          SARRAY    *sarraySplitString()
+ *
+ *      Filter sarray
+ *          SARRAY    *sarraySelectBySubstring()
+ *          SARRAY    *sarraySelectByRange()
+ *          l_int32    sarrayParseRange()
+ *
+ *      Serialize for I/O
+ *          SARRAY    *sarrayRead()
+ *          SARRAY    *sarrayReadStream()
+ *          SARRAY    *sarrayReadMem()
+ *          l_int32    sarrayWrite()
+ *          l_int32    sarrayWriteStream()
+ *          l_int32    sarrayWriteMem()
+ *          l_int32    sarrayAppend()
+ *
+ *      Directory filenames
+ *          SARRAY    *getNumberedPathnamesInDirectory()
+ *          SARRAY    *getSortedPathnamesInDirectory()
+ *          SARRAY    *convertSortedToNumberedPathnames()
+ *          SARRAY    *getFilenamesInDirectory()
+ *
+ *      These functions are important for efficient manipulation
+ *      of string data, and they have found widespread use in
+ *      leptonica.  For example:
+ *         (1) to generate text files: e.g., PostScript and PDF
+ *             wrappers around sets of images
+ *         (2) to parse text files: e.g., extracting prototypes
+ *             from the source to generate allheaders.h
+ *         (3) to generate code for compilation: e.g., the fast
+ *             dwa code for arbitrary structuring elements.
+ *
+ *      Comments on usage:
+ *
+ *          The user is responsible for correctly disposing of strings
+ *          that have been extracted from sarrays.  In the following,
+ *          "str_not_owned" means the returned handle does not own the string,
+ *          and "str_owned" means the returned handle owns the string.
+ *            - To extract a string from an Sarray in order to inspect it
+ *              or to make a copy of it later, get a handle to it:
+ *                  copyflag = L_NOCOPY.
+ *              In this case, you must neither free the string nor put it
+ *              directly in another array:
+ *                 str-not-owned = sarrayGetString(sa, index, L_NOCOPY);
+ *            - To extract a copy of a string from an Sarray, use:
+ *                 str-owned = sarrayGetString(sa, index, L_COPY);
+ *            ~ To insert a string that is in one array into another
+ *              array (always leaving the first array intact), there are
+ *              two options:
+ *                 (1) use copyflag = L_COPY to make an immediate copy,
+ *                     which you then add to the second array by insertion:
+ *                       str-owned = sarrayGetString(sa, index, L_COPY);
+ *                       sarrayAddString(sa, str-owned, L_INSERT);
+ *                 (2) use copyflag = L_NOCOPY to get another handle to
+ *                     the string; you then add a copy of it to the
+ *                     second string array:
+ *                       str-not-owned = sarrayGetString(sa, index, L_NOCOPY);
+ *                       sarrayAddString(sa, str-not-owned, L_COPY).
+ *              sarrayAddString() transfers ownership to the Sarray, so never
+ *              use L_INSERT if the string is owned by another array.
+ *
+ *              In all cases, when you use copyflag = L_COPY to extract
+ *              a string from an array, you must either free it
+ *              or insert it in an array that will be freed later.
+ * 
+ */ + +#include +#ifndef _WIN32 +#include /* unix only */ +#include +#include /* needed for realpath() */ +#include /* needed for realpath() */ +#endif /* ! _WIN32 */ +#include "allheaders.h" + +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 50; /*!< n'importe quoi */ + + /* Static functions */ +static l_int32 sarrayExtendArray(SARRAY *sa); + + +/*--------------------------------------------------------------------------* + * String array create/destroy/copy/extend * + *--------------------------------------------------------------------------*/ +/*! + * \brief sarrayCreate() + * + * \param[in] n size of string ptr array to be alloc'd; use 0 for default + * \return sarray, or NULL on error + */ +SARRAY * +sarrayCreate(l_int32 n) +{ +SARRAY *sa; + + PROCNAME("sarrayCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + sa = (SARRAY *)LEPT_CALLOC(1, sizeof(SARRAY)); + if ((sa->array = (char **)LEPT_CALLOC(n, sizeof(char *))) == NULL) { + sarrayDestroy(&sa); + return (SARRAY *)ERROR_PTR("ptr array not made", procName, NULL); + } + + sa->nalloc = n; + sa->n = 0; + sa->refcount = 1; + return sa; +} + + +/*! + * \brief sarrayCreateInitialized() + * + * \param[in] n size of string ptr array to be alloc'd + * \param[in] initstr string to be initialized on the full array + * \return sarray, or NULL on error + */ +SARRAY * +sarrayCreateInitialized(l_int32 n, + const char *initstr) +{ +l_int32 i; +SARRAY *sa; + + PROCNAME("sarrayCreateInitialized"); + + if (n <= 0) + return (SARRAY *)ERROR_PTR("n must be > 0", procName, NULL); + if (!initstr) + return (SARRAY *)ERROR_PTR("initstr not defined", procName, NULL); + + sa = sarrayCreate(n); + for (i = 0; i < n; i++) + sarrayAddString(sa, initstr, L_COPY); + return sa; +} + + +/*! + * \brief sarrayCreateWordsFromString() + * + * \param[in] string + * \return sarray, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds the number of word substrings, creates an sarray
+ *          of this size, and puts copies of each substring into the sarray.
+ * 
+ */ +SARRAY * +sarrayCreateWordsFromString(const char *string) +{ +char separators[] = " \n\t"; +l_int32 i, nsub, size, inword; +SARRAY *sa; + + PROCNAME("sarrayCreateWordsFromString"); + + if (!string) + return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); + + /* Find the number of words */ + size = strlen(string); + nsub = 0; + inword = FALSE; + for (i = 0; i < size; i++) { + if (inword == FALSE && + (string[i] != ' ' && string[i] != '\t' && string[i] != '\n')) { + inword = TRUE; + nsub++; + } else if (inword == TRUE && + (string[i] == ' ' || string[i] == '\t' || string[i] == '\n')) { + inword = FALSE; + } + } + + if ((sa = sarrayCreate(nsub)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + sarraySplitString(sa, string, separators); + + return sa; +} + + +/*! + * \brief sarrayCreateLinesFromString() + * + * \param[in] string + * \param[in] blankflag 0 to exclude blank lines; 1 to include + * \return sarray, or NULL on error + * + *
+ * Notes:
+ *      (1) This finds the number of line substrings, each of which
+ *          ends with a newline, and puts a copy of each substring
+ *          in a new sarray.
+ *      (2) The newline characters are removed from each substring.
+ * 
+ */ +SARRAY * +sarrayCreateLinesFromString(const char *string, + l_int32 blankflag) +{ +l_int32 i, nsub, size, startptr; +char *cstring, *substring; +SARRAY *sa; + + PROCNAME("sarrayCreateLinesFromString"); + + if (!string) + return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); + + /* Find the number of lines */ + size = strlen(string); + nsub = 0; + for (i = 0; i < size; i++) { + if (string[i] == '\n') + nsub++; + } + + if ((sa = sarrayCreate(nsub)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + + if (blankflag) { /* keep blank lines as null strings */ + /* Make a copy for munging */ + if ((cstring = stringNew(string)) == NULL) { + sarrayDestroy(&sa); + return (SARRAY *)ERROR_PTR("cstring not made", procName, NULL); + } + /* We'll insert nulls like strtok */ + startptr = 0; + for (i = 0; i < size; i++) { + if (cstring[i] == '\n') { + cstring[i] = '\0'; + if (i > 0 && cstring[i - 1] == '\r') + cstring[i - 1] = '\0'; /* also remove Windows CR */ + if ((substring = stringNew(cstring + startptr)) == NULL) { + sarrayDestroy(&sa); + LEPT_FREE(cstring); + return (SARRAY *)ERROR_PTR("substring not made", + procName, NULL); + } + sarrayAddString(sa, substring, L_INSERT); +/* fprintf(stderr, "substring = %s\n", substring); */ + startptr = i + 1; + } + } + if (startptr < size) { /* no newline at end of last line */ + if ((substring = stringNew(cstring + startptr)) == NULL) { + sarrayDestroy(&sa); + LEPT_FREE(cstring); + return (SARRAY *)ERROR_PTR("substring not made", + procName, NULL); + } + sarrayAddString(sa, substring, L_INSERT); +/* fprintf(stderr, "substring = %s\n", substring); */ + } + LEPT_FREE(cstring); + } else { /* remove blank lines; use strtok */ + sarraySplitString(sa, string, "\r\n"); + } + + return sa; +} + + +/*! + * \brief sarrayDestroy() + * + * \param[in,out] psa will be set to null before returning + * \return void + * + *
+ * Notes:
+ *      (1) Decrements the ref count and, if 0, destroys the sarray.
+ *      (2) Always nulls the input ptr.
+ * 
+ */ +void +sarrayDestroy(SARRAY **psa) +{ +l_int32 i; +SARRAY *sa; + + PROCNAME("sarrayDestroy"); + + if (psa == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + if ((sa = *psa) == NULL) + return; + + sarrayChangeRefcount(sa, -1); + if (sarrayGetRefcount(sa) <= 0) { + if (sa->array) { + for (i = 0; i < sa->n; i++) { + if (sa->array[i]) + LEPT_FREE(sa->array[i]); + } + LEPT_FREE(sa->array); + } + LEPT_FREE(sa); + } + + *psa = NULL; + return; +} + + +/*! + * \brief sarrayCopy() + * + * \param[in] sa string array + * \return copy of sarray, or NULL on error + */ +SARRAY * +sarrayCopy(SARRAY *sa) +{ +l_int32 i; +SARRAY *csa; + + PROCNAME("sarrayCopy"); + + if (!sa) + return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); + + if ((csa = sarrayCreate(sa->nalloc)) == NULL) + return (SARRAY *)ERROR_PTR("csa not made", procName, NULL); + + for (i = 0; i < sa->n; i++) + sarrayAddString(csa, sa->array[i], L_COPY); + + return csa; +} + + +/*! + * \brief sarrayClone() + * + * \param[in] sa string array + * \return ptr to same sarray, or NULL on error + */ +SARRAY * +sarrayClone(SARRAY *sa) +{ + PROCNAME("sarrayClone"); + + if (!sa) + return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); + sarrayChangeRefcount(sa, 1); + return sa; +} + + +/*! + * \brief sarrayAddString() + * + * \param[in] sa string array + * \param[in] string string to be added + * \param[in] copyflag L_INSERT, L_NOCOPY or L_COPY + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See usage comments at the top of this file.  L_INSERT is
+ *          equivalent to L_NOCOPY.
+ * 
+ */ +l_ok +sarrayAddString(SARRAY *sa, + const char *string, + l_int32 copyflag) +{ +l_int32 n; + + PROCNAME("sarrayAddString"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!string) + return ERROR_INT("string not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_NOCOPY && copyflag != L_COPY) + return ERROR_INT("invalid copyflag", procName, 1); + + n = sarrayGetCount(sa); + if (n >= sa->nalloc) + sarrayExtendArray(sa); + + if (copyflag == L_COPY) + sa->array[n] = stringNew(string); + else /* L_INSERT or L_NOCOPY */ + sa->array[n] = (char *)string; + sa->n++; + return 0; +} + + +/*! + * \brief sarrayExtendArray() + * + * \param[in] sa string array + * \return 0 if OK, 1 on error + */ +static l_int32 +sarrayExtendArray(SARRAY *sa) +{ + PROCNAME("sarrayExtendArray"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + if ((sa->array = (char **)reallocNew((void **)&sa->array, + sizeof(char *) * sa->nalloc, + 2 * sizeof(char *) * sa->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + sa->nalloc *= 2; + return 0; +} + + +/*! + * \brief sarrayRemoveString() + * + * \param[in] sa string array + * \param[in] index of string within sarray + * \return removed string, or NULL on error + */ +char * +sarrayRemoveString(SARRAY *sa, + l_int32 index) +{ +char *string; +char **array; +l_int32 i, n, nalloc; + + PROCNAME("sarrayRemoveString"); + + if (!sa) + return (char *)ERROR_PTR("sa not defined", procName, NULL); + + if ((array = sarrayGetArray(sa, &nalloc, &n)) == NULL) + return (char *)ERROR_PTR("array not returned", procName, NULL); + + if (index < 0 || index >= n) + return (char *)ERROR_PTR("array index out of bounds", procName, NULL); + + string = array[index]; + + /* If removed string is not at end of array, shift + * to fill in, maintaining original ordering. + * Note: if we didn't care about the order, we could + * put the last string array[n - 1] directly into the hole. */ + for (i = index; i < n - 1; i++) + array[i] = array[i + 1]; + + sa->n--; + return string; +} + + +/*! + * \brief sarrayReplaceString() + * + * \param[in] sa string array + * \param[in] index of string within sarray to be replaced + * \param[in] newstr string to replace existing one + * \param[in] copyflag L_INSERT, L_COPY + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This destroys an existing string and replaces it with
+ *          the new string or a copy of it.
+ *      (2) By design, an sarray is always compacted, so there are
+ *          never any holes (null ptrs) in the ptr array up to the
+ *          current count.
+ * 
+ */ +l_ok +sarrayReplaceString(SARRAY *sa, + l_int32 index, + char *newstr, + l_int32 copyflag) +{ +char *str; +l_int32 n; + + PROCNAME("sarrayReplaceString"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + n = sarrayGetCount(sa); + if (index < 0 || index >= n) + return ERROR_INT("array index out of bounds", procName, 1); + if (!newstr) + return ERROR_INT("newstr not defined", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY) + return ERROR_INT("invalid copyflag", procName, 1); + + LEPT_FREE(sa->array[index]); + if (copyflag == L_INSERT) + str = newstr; + else /* L_COPY */ + str = stringNew(newstr); + sa->array[index] = str; + return 0; +} + + +/*! + * \brief sarrayClear() + * + * \param[in] sa string array + * \return 0 if OK; 1 on error + */ +l_ok +sarrayClear(SARRAY *sa) +{ +l_int32 i; + + PROCNAME("sarrayClear"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + for (i = 0; i < sa->n; i++) { /* free strings and null ptrs */ + LEPT_FREE(sa->array[i]); + sa->array[i] = NULL; + } + sa->n = 0; + return 0; +} + + +/*----------------------------------------------------------------------* + * Accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayGetCount() + * + * \param[in] sa string array + * \return count, or 0 if no strings or on error + */ +l_int32 +sarrayGetCount(SARRAY *sa) +{ + PROCNAME("sarrayGetCount"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 0); + return sa->n; +} + + +/*! + * \brief sarrayGetArray() + * + * \param[in] sa string array + * \param[out] pnalloc [optional] number allocated string ptrs + * \param[out] pn [optional] number allocated strings + * \return ptr to string array, or NULL on error + * + *
+ * Notes:
+ *      (1) Caution: the returned array is not a copy, so caller
+ *          must not destroy it!
+ * 
+ */ +char ** +sarrayGetArray(SARRAY *sa, + l_int32 *pnalloc, + l_int32 *pn) +{ +char **array; + + PROCNAME("sarrayGetArray"); + + if (!sa) + return (char **)ERROR_PTR("sa not defined", procName, NULL); + + array = sa->array; + if (pnalloc) *pnalloc = sa->nalloc; + if (pn) *pn = sa->n; + + return array; +} + + +/*! + * \brief sarrayGetString() + * + * \param[in] sa string array + * \param[in] index to the index-th string + * \param[in] copyflag L_NOCOPY or L_COPY + * \return string, or NULL on error + * + *
+ * Notes:
+ *      (1) See usage comments at the top of this file.
+ *      (2) To get a pointer to the string itself, use L_NOCOPY.
+ *          To get a copy of the string, use L_COPY.
+ * 
+ */ +char * +sarrayGetString(SARRAY *sa, + l_int32 index, + l_int32 copyflag) +{ + PROCNAME("sarrayGetString"); + + if (!sa) + return (char *)ERROR_PTR("sa not defined", procName, NULL); + if (index < 0 || index >= sa->n) + return (char *)ERROR_PTR("index not valid", procName, NULL); + if (copyflag != L_NOCOPY && copyflag != L_COPY) + return (char *)ERROR_PTR("invalid copyflag", procName, NULL); + + if (copyflag == L_NOCOPY) + return sa->array[index]; + else /* L_COPY */ + return stringNew(sa->array[index]); +} + + +/*! + * \brief sarrayGetRefCount() + * + * \param[in] sa string array + * \return refcount, or UNDEF on error + */ +l_int32 +sarrayGetRefcount(SARRAY *sa) +{ + PROCNAME("sarrayGetRefcount"); + + if (!sa) + return ERROR_INT("sa not defined", procName, UNDEF); + return sa->refcount; +} + + +/*! + * \brief sarrayChangeRefCount() + * + * \param[in] sa string array + * \param[in] delta change to be applied + * \return 0 if OK, 1 on error + */ +l_ok +sarrayChangeRefcount(SARRAY *sa, + l_int32 delta) +{ + PROCNAME("sarrayChangeRefcount"); + + if (!sa) + return ERROR_INT("sa not defined", procName, UNDEF); + sa->refcount += delta; + return 0; +} + + +/*----------------------------------------------------------------------* + * Conversion to string * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayToString() + * + * \param[in] sa string array + * \param[in] addnlflag flag: 0 adds nothing to each substring + * 1 adds '\n' to each substring + * 2 adds ' ' to each substring + * \return dest string, or NULL on error + * + *
+ * Notes:
+ *      (1) Concatenates all the strings in the sarray, preserving
+ *          all white space.
+ *      (2) If addnlflag != 0, adds either a '\n' or a ' ' after
+ *          each substring.
+ *      (3) This function was NOT implemented as:
+ *            for (i = 0; i < n; i++)
+ *                     strcat(dest, sarrayGetString(sa, i, L_NOCOPY));
+ *          Do you see why?
+ * 
+ */ +char * +sarrayToString(SARRAY *sa, + l_int32 addnlflag) +{ + PROCNAME("sarrayToString"); + + if (!sa) + return (char *)ERROR_PTR("sa not defined", procName, NULL); + + return sarrayToStringRange(sa, 0, 0, addnlflag); +} + + +/*! + * \brief sarrayToStringRange() + * + * \param[in] sa string array + * \param[in] first index of first string to use; starts with 0 + * \param[in] nstrings number of strings to append into the result; use + * 0 to append to the end of the sarray + * \param[in] addnlflag flag: 0 adds nothing to each substring + * 1 adds '\n' to each substring + * 2 adds ' ' to each substring + * \return dest string, or NULL on error + * + *
+ * Notes:
+ *      (1) Concatenates the specified strings inthe sarray, preserving
+ *          all white space.
+ *      (2) If addnlflag != 0, adds either a '\n' or a ' ' after
+ *          each substring.
+ *      (3) If the sarray is empty, this returns a string with just
+ *          the character corresponding to %addnlflag.
+ * 
+ */ +char * +sarrayToStringRange(SARRAY *sa, + l_int32 first, + l_int32 nstrings, + l_int32 addnlflag) +{ +char *dest, *src, *str; +l_int32 n, i, last, size, index, len; + + PROCNAME("sarrayToStringRange"); + + if (!sa) + return (char *)ERROR_PTR("sa not defined", procName, NULL); + if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2) + return (char *)ERROR_PTR("invalid addnlflag", procName, NULL); + + n = sarrayGetCount(sa); + + /* Empty sa; return char corresponding to addnlflag only */ + if (n == 0) { + if (first == 0) { + if (addnlflag == 0) + return stringNew(""); + if (addnlflag == 1) + return stringNew("\n"); + else /* addnlflag == 2) */ + return stringNew(" "); + } else { + return (char *)ERROR_PTR("first not valid", procName, NULL); + } + } + + if (first < 0 || first >= n) + return (char *)ERROR_PTR("first not valid", procName, NULL); + if (nstrings == 0 || (nstrings > n - first)) + nstrings = n - first; /* no overflow */ + last = first + nstrings - 1; + + size = 0; + for (i = first; i <= last; i++) { + if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) + return (char *)ERROR_PTR("str not found", procName, NULL); + size += strlen(str) + 2; + } + + if ((dest = (char *)LEPT_CALLOC(size + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("dest not made", procName, NULL); + + index = 0; + for (i = first; i <= last; i++) { + src = sarrayGetString(sa, i, L_NOCOPY); + len = strlen(src); + memcpy(dest + index, src, len); + index += len; + if (addnlflag == 1) { + dest[index] = '\n'; + index++; + } else if (addnlflag == 2) { + dest[index] = ' '; + index++; + } + } + + return dest; +} + + +/*----------------------------------------------------------------------* + * Join 2 sarrays * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayJoin() + * + * \param[in] sa1 to be added to + * \param[in] sa2 append to sa1 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Copies of the strings in sarray2 are added to sarray1.
+ * 
+ */ +l_ok +sarrayJoin(SARRAY *sa1, + SARRAY *sa2) +{ +char *str; +l_int32 n, i; + + PROCNAME("sarrayJoin"); + + if (!sa1) + return ERROR_INT("sa1 not defined", procName, 1); + if (!sa2) + return ERROR_INT("sa2 not defined", procName, 1); + + n = sarrayGetCount(sa2); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa2, i, L_NOCOPY); + sarrayAddString(sa1, str, L_COPY); + } + + return 0; +} + + +/*! + * \brief sarrayAppendRange() + * + * \param[in] sa1 to be added to + * \param[in] sa2 append specified range of strings in sa2 to sa1 + * \param[in] start index of first string of sa2 to append + * \param[in] end index of last string of sa2 to append; + * -1 to append to end of array + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Copies of the strings in sarray2 are added to sarray1.
+ *      (2) The [start ... end] range is truncated if necessary.
+ *      (3) Use end == -1 to append to the end of sa2.
+ * 
+ */ +l_ok +sarrayAppendRange(SARRAY *sa1, + SARRAY *sa2, + l_int32 start, + l_int32 end) +{ +char *str; +l_int32 n, i; + + PROCNAME("sarrayAppendRange"); + + if (!sa1) + return ERROR_INT("sa1 not defined", procName, 1); + if (!sa2) + return ERROR_INT("sa2 not defined", procName, 1); + + if (start < 0) + start = 0; + n = sarrayGetCount(sa2); + if (end < 0 || end >= n) + end = n - 1; + if (start > end) + return ERROR_INT("start > end", procName, 1); + + for (i = start; i <= end; i++) { + str = sarrayGetString(sa2, i, L_NOCOPY); + sarrayAddString(sa1, str, L_COPY); + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Pad an sarray to be the same size as another sarray * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayPadToSameSize() + * + * \param[in] sa1, sa2 + * \param[in] padstring + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If two sarrays have different size, this adds enough
+ *          instances of %padstring to the smaller so that they are
+ *          the same size.  It is useful when two or more sarrays
+ *          are being sequenced in parallel, and it is necessary to
+ *          find a valid string at each index.
+ * 
+ */ +l_ok +sarrayPadToSameSize(SARRAY *sa1, + SARRAY *sa2, + const char *padstring) +{ +l_int32 i, n1, n2; + + PROCNAME("sarrayPadToSameSize"); + + if (!sa1 || !sa2) + return ERROR_INT("both sa1 and sa2 not defined", procName, 1); + + n1 = sarrayGetCount(sa1); + n2 = sarrayGetCount(sa2); + if (n1 < n2) { + for (i = n1; i < n2; i++) + sarrayAddString(sa1, padstring, L_COPY); + } else if (n1 > n2) { + for (i = n2; i < n1; i++) + sarrayAddString(sa2, padstring, L_COPY); + } + + return 0; +} + + +/*----------------------------------------------------------------------* + * Convert word sarray to line sarray * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayConvertWordsToLines() + * + * \param[in] sa sa of individual words + * \param[in] linesize max num of chars in each line + * \return saout sa of formatted lines, or NULL on error + * + *
+ * Notes:
+ *      (1) This is useful for re-typesetting text to a specific maximum
+ *          line length.  The individual words in the input sarray
+ *          are concatenated into textlines.  An input word string of zero
+ *          length is taken to be a paragraph separator.  Each time
+ *          such a string is found, the current line is ended and
+ *          a new line is also produced that contains just the
+ *          string of zero length "".  When the output sarray
+ *          of lines is eventually converted to a string with newlines
+ *          typically appended to each line string, the empty
+ *          strings are just converted to newlines, producing the visible
+ *          paragraph separation.
+ *      (2) What happens when a word is larger than linesize?
+ *          We write it out as a single line anyway!  Words preceding
+ *          or following this long word are placed on lines preceding
+ *          or following the line with the long word.  Why this choice?
+ *          Long "words" found in text documents are typically URLs, and
+ *          it's often desirable not to put newlines in the middle of a URL.
+ *          The text display program e.g., text editor will typically
+ *          wrap the long "word" to fit in the window.
+ * 
+ */ +SARRAY * +sarrayConvertWordsToLines(SARRAY *sa, + l_int32 linesize) +{ +char *wd, *strl; +char emptystring[] = ""; +l_int32 n, i, len, totlen; +SARRAY *sal, *saout; + + PROCNAME("sarrayConvertWordsToLines"); + + if (!sa) + return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); + + saout = sarrayCreate(0); + n = sarrayGetCount(sa); + totlen = 0; + sal = NULL; + for (i = 0; i < n; i++) { + if (!sal) + sal = sarrayCreate(0); + wd = sarrayGetString(sa, i, L_NOCOPY); + len = strlen(wd); + if (len == 0) { /* end of paragraph: end line & insert blank line */ + if (totlen > 0) { + strl = sarrayToString(sal, 2); + sarrayAddString(saout, strl, L_INSERT); + } + sarrayAddString(saout, emptystring, L_COPY); + sarrayDestroy(&sal); + totlen = 0; + } else if (totlen == 0 && len + 1 > linesize) { /* long word! */ + sarrayAddString(saout, wd, L_COPY); /* copy to one line */ + } else if (totlen + len + 1 > linesize) { /* end line & start new */ + strl = sarrayToString(sal, 2); + sarrayAddString(saout, strl, L_INSERT); + sarrayDestroy(&sal); + sal = sarrayCreate(0); + sarrayAddString(sal, wd, L_COPY); + totlen = len + 1; + } else { /* add to current line */ + sarrayAddString(sal, wd, L_COPY); + totlen += len + 1; + } + } + if (totlen > 0) { /* didn't end with blank line; output last line */ + strl = sarrayToString(sal, 2); + sarrayAddString(saout, strl, L_INSERT); + sarrayDestroy(&sal); + } + + return saout; +} + + +/*----------------------------------------------------------------------* + * Split string on separator list * + *----------------------------------------------------------------------*/ +/* + * \brief sarraySplitString() + * + * \param[in] sa to append to; typically empty initially + * \param[in] str string to split; not changed + * \param[in] separators characters that split input string + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This uses strtokSafe().  See the notes there in utils.c.
+ * 
+ */ +l_int32 +sarraySplitString(SARRAY *sa, + const char *str, + const char *separators) +{ +char *cstr, *substr, *saveptr; + + PROCNAME("sarraySplitString"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!str) + return ERROR_INT("str not defined", procName, 1); + if (!separators) + return ERROR_INT("separators not defined", procName, 1); + + cstr = stringNew(str); /* preserves const-ness of input str */ + saveptr = NULL; + substr = strtokSafe(cstr, separators, &saveptr); + if (substr) + sarrayAddString(sa, substr, L_INSERT); + while ((substr = strtokSafe(NULL, separators, &saveptr))) + sarrayAddString(sa, substr, L_INSERT); + LEPT_FREE(cstr); + + return 0; +} + + +/*----------------------------------------------------------------------* + * Filter sarray * + *----------------------------------------------------------------------*/ +/*! + * \brief sarraySelectBySubstring() + * + * \param[in] sain input sarray + * \param[in] substr [optional] substring for matching; can be NULL + * \return saout output sarray, filtered with substring or NULL on error + * + *
+ * Notes:
+ *      (1) This selects all strings in sain that have substr as a substring.
+ *          Note that we can't use strncmp() because we're looking for
+ *          a match to the substring anywhere within each filename.
+ *      (2) If substr == NULL, returns a copy of the sarray.
+ * 
+ */ +SARRAY * +sarraySelectBySubstring(SARRAY *sain, + const char *substr) +{ +char *str; +l_int32 n, i, offset, found; +SARRAY *saout; + + PROCNAME("sarraySelectBySubstring"); + + if (!sain) + return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); + + n = sarrayGetCount(sain); + if (!substr || n == 0) + return sarrayCopy(sain); + + saout = sarrayCreate(n); + for (i = 0; i < n; i++) { + str = sarrayGetString(sain, i, L_NOCOPY); + arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, + strlen(substr), &offset, &found); + if (found) + sarrayAddString(saout, str, L_COPY); + } + + return saout; +} + + +/*! + * \brief sarraySelectByRange() + * + * \param[in] sain input sarray + * \param[in] first index of first string to be selected + * \param[in] last index of last string to be selected; + * use 0 to go to the end of the sarray + * \return saout output sarray, or NULL on error + * + *
+ * Notes:
+ *      (1) This makes %saout consisting of copies of all strings in %sain
+ *          in the index set [first ... last].  Use %last == 0 to get all
+ *          strings from %first to the last string in the sarray.
+ * 
+ */ +SARRAY * +sarraySelectByRange(SARRAY *sain, + l_int32 first, + l_int32 last) +{ +char *str; +l_int32 n, i; +SARRAY *saout; + + PROCNAME("sarraySelectByRange"); + + if (!sain) + return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); + if (first < 0) first = 0; + n = sarrayGetCount(sain); + if (last <= 0) last = n - 1; + if (last >= n) { + L_WARNING("last > n - 1; setting to n - 1\n", procName); + last = n - 1; + } + if (first > last) + return (SARRAY *)ERROR_PTR("first must be >= last", procName, NULL); + + saout = sarrayCreate(0); + for (i = first; i <= last; i++) { + str = sarrayGetString(sain, i, L_COPY); + sarrayAddString(saout, str, L_INSERT); + } + + return saout; +} + + +/*! + * \brief sarrayParseRange() + * + * \param[in] sa input sarray + * \param[in] start index to start range search + * \param[out] pactualstart index of actual start; may be > 'start' + * \param[out] pend index of end + * \param[out] pnewstart index of start of next range + * \param[in] substr substring for matching at beginning of string + * \param[in] loc byte offset within the string for the pattern; + * use -1 if the location does not matter. + * \return 0 if valid range found; 1 otherwise + * + *
+ * Notes:
+ *      (1) This finds the range of the next set of strings in SA,
+ *          beginning the search at 'start', that does NOT have
+ *          the substring 'substr' either at the indicated location
+ *          in the string or anywhere in the string.  The input
+ *          variable 'loc' is the specified offset within the string;
+ *          use -1 to indicate 'anywhere in the string'.
+ *      (2) Always check the return value to verify that a valid range
+ *          was found.
+ *      (3) If a valid range is not found, the values of actstart,
+ *          end and newstart are all set to the size of sa.
+ *      (4) If this is the last valid range, newstart returns the value n.
+ *          In use, this should be tested before calling the function.
+ *      (5) Usage example.  To find all the valid ranges in a file
+ *          where the invalid lines begin with two dashes, copy each
+ *          line in the file to a string in an sarray, and do:
+ *             start = 0;
+ *             while (!sarrayParseRange(sa, start, &actstart, &end, &start,
+ *                    "--", 0))
+ *                 fprintf(stderr, "start = %d, end = %d\n", actstart, end);
+ * 
+ */ +l_int32 +sarrayParseRange(SARRAY *sa, + l_int32 start, + l_int32 *pactualstart, + l_int32 *pend, + l_int32 *pnewstart, + const char *substr, + l_int32 loc) +{ +char *str; +l_int32 n, i, offset, found; + + PROCNAME("sarrayParseRange"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!pactualstart || !pend || !pnewstart) + return ERROR_INT("not all range addresses defined", procName, 1); + n = sarrayGetCount(sa); + *pactualstart = *pend = *pnewstart = n; + if (!substr) + return ERROR_INT("substr not defined", procName, 1); + + /* Look for the first string without the marker */ + if (start < 0 || start >= n) + return 1; + for (i = start; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, + strlen(substr), &offset, &found); + if (loc < 0) { + if (!found) break; + } else { + if (!found || offset != loc) break; + } + } + start = i; + if (i == n) /* couldn't get started */ + return 1; + + /* Look for the last string without the marker */ + *pactualstart = start; + for (i = start + 1; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, + strlen(substr), &offset, &found); + if (loc < 0) { + if (found) break; + } else { + if (found && offset == loc) break; + } + } + *pend = i - 1; + start = i; + if (i == n) /* no further range */ + return 0; + + /* Look for the first string after *pend without the marker. + * This will start the next run of strings, if it exists. */ + for (i = start; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, + strlen(substr), &offset, &found); + if (loc < 0) { + if (!found) break; + } else { + if (!found || offset != loc) break; + } + } + if (i < n) + *pnewstart = i; + + return 0; +} + + +/*----------------------------------------------------------------------* + * Serialize for I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayRead() + * + * \param[in] filename + * \return sarray, or NULL on error + */ +SARRAY * +sarrayRead(const char *filename) +{ +FILE *fp; +SARRAY *sa; + + PROCNAME("sarrayRead"); + + if (!filename) + return (SARRAY *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (SARRAY *)ERROR_PTR("stream not opened", procName, NULL); + sa = sarrayReadStream(fp); + fclose(fp); + if (!sa) + return (SARRAY *)ERROR_PTR("sa not read", procName, NULL); + return sa; +} + + +/*! + * \brief sarrayReadStream() + * + * \param[in] fp file stream + * \return sarray, or NULL on error + * + *
+ * Notes:
+ *      (1) We store the size of each string along with the string.
+ *          The limit on the number of strings is 2^24.
+ *          The limit on the size of any string is 2^30 bytes.
+ *      (2) This allows a string to have embedded newlines.  By reading
+ *          the entire string, as determined by its size, we are
+ *          not affected by any number of embedded newlines.
+ * 
+ */ +SARRAY * +sarrayReadStream(FILE *fp) +{ +char *stringbuf; +l_int32 i, n, size, index, bufsize, version, ignore, success; +SARRAY *sa; + + PROCNAME("sarrayReadStream"); + + if (!fp) + return (SARRAY *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nSarray Version %d\n", &version) != 1) + return (SARRAY *)ERROR_PTR("not an sarray file", procName, NULL); + if (version != SARRAY_VERSION_NUMBER) + return (SARRAY *)ERROR_PTR("invalid sarray version", procName, NULL); + if (fscanf(fp, "Number of strings = %d\n", &n) != 1) + return (SARRAY *)ERROR_PTR("error on # strings", procName, NULL); + if (n > (1 << 24)) + return (SARRAY *)ERROR_PTR("more than 2^24 strings!", procName, NULL); + + success = TRUE; + if ((sa = sarrayCreate(n)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + bufsize = 512 + 1; + stringbuf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); + + for (i = 0; i < n; i++) { + /* Get the size of the stored string */ + if ((fscanf(fp, "%d[%d]:", &index, &size) != 2) || (size > (1 << 30))) { + success = FALSE; + L_ERROR("error on string size\n", procName); + goto cleanup; + } + /* Expand the string buffer if necessary */ + if (size > bufsize - 5) { + LEPT_FREE(stringbuf); + bufsize = (l_int32)(1.5 * size); + stringbuf = (char *)LEPT_CALLOC(bufsize, sizeof(char)); + } + /* Read the stored string, plus leading spaces and trailing \n */ + if (fread(stringbuf, 1, size + 3, fp) != size + 3) { + success = FALSE; + L_ERROR("error reading string\n", procName); + goto cleanup; + } + /* Remove the \n that was added by sarrayWriteStream() */ + stringbuf[size + 2] = '\0'; + /* Copy it in, skipping the 2 leading spaces */ + sarrayAddString(sa, stringbuf + 2, L_COPY); + } + ignore = fscanf(fp, "\n"); + +cleanup: + LEPT_FREE(stringbuf); + if (!success) sarrayDestroy(&sa); + return sa; +} + + +/*! + * \brief sarrayReadMem() + * + * \param[in] data serialization in ascii + * \param[in] size of data; can use strlen to get it + * \return sarray, or NULL on error + */ +SARRAY * +sarrayReadMem(const l_uint8 *data, + size_t size) +{ +FILE *fp; +SARRAY *sa; + + PROCNAME("sarrayReadMem"); + + if (!data) + return (SARRAY *)ERROR_PTR("data not defined", procName, NULL); + if ((fp = fopenReadFromMemory(data, size)) == NULL) + return (SARRAY *)ERROR_PTR("stream not opened", procName, NULL); + + sa = sarrayReadStream(fp); + fclose(fp); + if (!sa) L_ERROR("sarray not read\n", procName); + return sa; +} + + +/*! + * \brief sarrayWrite() + * + * \param[in] filename + * \param[in] sa string array + * \return 0 if OK; 1 on error + */ +l_ok +sarrayWrite(const char *filename, + SARRAY *sa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("sarrayWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "w")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = sarrayWriteStream(fp, sa); + fclose(fp); + if (ret) + return ERROR_INT("sa not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief sarrayWriteStream() + * + * \param[in] fp file stream + * \param[in] sa string array + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This appends a '\n' to each string, which is stripped
+ *          off by sarrayReadStream().
+ * 
+ */ +l_ok +sarrayWriteStream(FILE *fp, + SARRAY *sa) +{ +l_int32 i, n, len; + + PROCNAME("sarrayWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + n = sarrayGetCount(sa); + fprintf(fp, "\nSarray Version %d\n", SARRAY_VERSION_NUMBER); + fprintf(fp, "Number of strings = %d\n", n); + for (i = 0; i < n; i++) { + len = strlen(sa->array[i]); + fprintf(fp, " %d[%d]: %s\n", i, len, sa->array[i]); + } + fprintf(fp, "\n"); + + return 0; +} + + +/*! + * \brief sarrayWriteMem() + * + * \param[out] pdata data of serialized sarray; ascii + * \param[out] psize size of returned data + * \param[in] sa + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Serializes a sarray in memory and puts the result in a buffer.
+ * 
+ */ +l_ok +sarrayWriteMem(l_uint8 **pdata, + size_t *psize, + SARRAY *sa) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("sarrayWriteMem"); + + if (pdata) *pdata = NULL; + if (psize) *psize = 0; + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + +#if HAVE_FMEMOPEN + if ((fp = open_memstream((char **)pdata, psize)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = sarrayWriteStream(fp, sa); +#else + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); + #endif /* _WIN32 */ + ret = sarrayWriteStream(fp, sa); + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); +#endif /* HAVE_FMEMOPEN */ + fclose(fp); + return ret; +} + + +/*! + * \brief sarrayAppend() + * + * \param[in] filename + * \param[in] sa + * \return 0 if OK; 1 on error + */ +l_ok +sarrayAppend(const char *filename, + SARRAY *sa) +{ +FILE *fp; + + PROCNAME("sarrayAppend"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "a")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + if (sarrayWriteStream(fp, sa)) { + fclose(fp); + return ERROR_INT("sa not appended to stream", procName, 1); + } + + fclose(fp); + return 0; +} + + +/*---------------------------------------------------------------------* + * Directory filenames * + *---------------------------------------------------------------------*/ +/*! + * \brief getNumberedPathnamesInDirectory() + * + * \param[in] dirname directory name + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] numpre number of characters in name before number + * \param[in] numpost number of characters in name after the number, + * up to a dot before an extension + * \param[in] maxnum only consider page numbers up to this value + * \return sarray of numbered pathnames, or NULL on error + * + *
+ * Notes:
+ *      (1) Returns the full pathnames of the numbered filenames in
+ *          the directory.  The number in the filename is the index
+ *          into the sarray.  For indices for which there are no filenames,
+ *          an empty string ("") is placed into the sarray.
+ *          This makes reading numbered files very simple.  For example,
+ *          the image whose filename includes number N can be retrieved using
+ *               pixReadIndexed(sa, N);
+ *      (2) If %substr is not NULL, only filenames that contain
+ *          the substring can be included.  If %substr is NULL,
+ *          all matching filenames are used.
+ *      (3) If no numbered files are found, it returns an empty sarray,
+ *          with no initialized strings.
+ *      (4) It is assumed that the page number is contained within
+ *          the basename (the filename without directory or extension).
+ *          %numpre is the number of characters in the basename
+ *          preceding the actual page number; %numpost is the number
+ *          following the page number, up to either the end of the
+ *          basename or a ".", whichever comes first.
+ *      (5) This is useful when all filenames contain numbers that are
+ *          not necessarily consecutive.  0-padding is not required.
+ *      (6) To use a O(n) matching algorithm, the largest page number
+ *          is found and two internal arrays of this size are created.
+ *          This maximum is constrained not to exceed %maxsum,
+ *          to make sure that an unrealistically large number is not
+ *          accidentally used to determine the array sizes.
+ * 
+ */ +SARRAY * +getNumberedPathnamesInDirectory(const char *dirname, + const char *substr, + l_int32 numpre, + l_int32 numpost, + l_int32 maxnum) +{ +l_int32 nfiles; +SARRAY *sa, *saout; + + PROCNAME("getNumberedPathnamesInDirectory"); + + if (!dirname) + return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); + + if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + if ((nfiles = sarrayGetCount(sa)) == 0) { + sarrayDestroy(&sa); + return sarrayCreate(1); + } + + saout = convertSortedToNumberedPathnames(sa, numpre, numpost, maxnum); + sarrayDestroy(&sa); + return saout; +} + + +/*! + * \brief getSortedPathnamesInDirectory() + * + * \param[in] dirname directory name + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] first 0-based + * \param[in] nfiles use 0 for all to the end + * \return sarray of sorted pathnames, or NULL on error + * + *
+ * Notes:
+ *      (1) Use %substr to filter filenames in the directory.  If
+ *          %substr == NULL, this takes all files.
+ *      (2) The files in the directory, after optional filtering by
+ *          the substring, are lexically sorted in increasing order.
+ *          Use %first and %nfiles to select a contiguous set of files.
+ *      (3) The full pathnames are returned for the requested sequence.
+ *          If no files are found after filtering, returns an empty sarray.
+ * 
+ */ +SARRAY * +getSortedPathnamesInDirectory(const char *dirname, + const char *substr, + l_int32 first, + l_int32 nfiles) +{ +char *fname, *fullname; +l_int32 i, n, last; +SARRAY *sa, *safiles, *saout; + + PROCNAME("getSortedPathnamesInDirectory"); + + if (!dirname) + return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); + + if ((sa = getFilenamesInDirectory(dirname)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + safiles = sarraySelectBySubstring(sa, substr); + sarrayDestroy(&sa); + n = sarrayGetCount(safiles); + if (n == 0) { + L_WARNING("no files found\n", procName); + return safiles; + } + + sarraySort(safiles, safiles, L_SORT_INCREASING); + + first = L_MIN(L_MAX(first, 0), n - 1); + if (nfiles == 0) + nfiles = n - first; + last = L_MIN(first + nfiles - 1, n - 1); + + saout = sarrayCreate(last - first + 1); + for (i = first; i <= last; i++) { + fname = sarrayGetString(safiles, i, L_NOCOPY); + fullname = pathJoin(dirname, fname); + sarrayAddString(saout, fullname, L_INSERT); + } + + sarrayDestroy(&safiles); + return saout; +} + + +/*! + * \brief convertSortedToNumberedPathnames() + * + * \param[in] sa sorted pathnames including zero-padded integers + * \param[in] numpre number of characters in name before number + * \param[in] numpost number of characters in name after the number, + * up to a dot before an extension + * \param[in] maxnum only consider page numbers up to this value + * \return sarray of numbered pathnames, or NULL on error + * + *
+ * Notes:
+ *      (1) Typically, numpre = numpost = 0; e.g., when the filename
+ *          just has a number followed by an optional extension.
+ * 
+ */ +SARRAY * +convertSortedToNumberedPathnames(SARRAY *sa, + l_int32 numpre, + l_int32 numpost, + l_int32 maxnum) +{ +char *fname, *str; +l_int32 i, nfiles, num, index; +SARRAY *saout; + + PROCNAME("convertSortedToNumberedPathnames"); + + if (!sa) + return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); + if ((nfiles = sarrayGetCount(sa)) == 0) + return sarrayCreate(1); + + /* Find the last file in the sorted array that has a number + * that (a) matches the count pattern and (b) does not + * exceed %maxnum. %maxnum sets an upper limit on the size + * of the sarray. */ + num = 0; + for (i = nfiles - 1; i >= 0; i--) { + fname = sarrayGetString(sa, i, L_NOCOPY); + num = extractNumberFromFilename(fname, numpre, numpost); + if (num < 0) continue; + num = L_MIN(num + 1, maxnum); + break; + } + + if (num <= 0) /* none found */ + return sarrayCreate(1); + + /* Insert pathnames into the output sarray. + * Ignore numbers that are out of the range of sarray. */ + saout = sarrayCreateInitialized(num, ""); + for (i = 0; i < nfiles; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + index = extractNumberFromFilename(fname, numpre, numpost); + if (index < 0 || index >= num) continue; + str = sarrayGetString(saout, index, L_NOCOPY); + if (str[0] != '\0') { + L_WARNING("\n Multiple files with same number: %d\n", + procName, index); + } + sarrayReplaceString(saout, index, fname, L_COPY); + } + + return saout; +} + + +/*! + * \brief getFilenamesInDirectory() + * + * \param[in] dirname directory name + * \return sarray of file names, or NULL on error + * + *
+ * Notes:
+ *      (1) The versions compiled under unix and cygwin use the POSIX C
+ *          library commands for handling directories.  For windows,
+ *          there is a separate implementation.
+ *      (2) It returns an array of filename tails; i.e., only the part of
+ *          the path after the last slash.
+ *      (3) Use of the d_type field of dirent is not portable:
+ *          "According to POSIX, the dirent structure contains a field
+ *          char d_name[] of unspecified size, with at most NAME_MAX
+ *          characters preceding the terminating null character.  Use
+ *          of other fields will harm the portability of your programs."
+ *      (4) As a consequence of (3), we note several things:
+ *           ~ MINGW doesn't have a d_type member.
+ *           ~ Older versions of gcc (e.g., 2.95.3) return DT_UNKNOWN
+ *             for d_type from all files.
+ *          On these systems, this function will return directories
+ *          (except for '.' and '..', which are eliminated using
+ *          the d_name field).
+ * 
+ */ + +#ifndef _WIN32 + +SARRAY * +getFilenamesInDirectory(const char *dirname) +{ +char dir[PATH_MAX + 1]; +char *realdir, *stat_path, *ignore; +size_t size; +SARRAY *safiles; +DIR *pdir; +struct dirent *pdirentry; +int dfd, stat_ret; +struct stat st; + + PROCNAME("getFilenamesInDirectory"); + + if (!dirname) + return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); + + /* It's nice to ignore directories. fstatat() works with relative + directory paths, but stat() requires using the absolute path. + Also, do not pass NULL as the second parameter to realpath(); + use a buffer of sufficient size. */ + ignore = realpath(dirname, dir); /* see note above */ + realdir = genPathname(dir, NULL); + if ((pdir = opendir(realdir)) == NULL) { + LEPT_FREE(realdir); + return (SARRAY *)ERROR_PTR("pdir not opened", procName, NULL); + } + safiles = sarrayCreate(0); + dfd = dirfd(pdir); + while ((pdirentry = readdir(pdir))) { +#if HAVE_FSTATAT + stat_ret = fstatat(dfd, pdirentry->d_name, &st, 0); +#else + size = strlen(realdir) + strlen(pdirentry->d_name) + 2; + if (size > PATH_MAX) { + L_ERROR("size = %zu too large; skipping\n", procName, size); + continue; + } + stat_path = (char *)LEPT_CALLOC(size, 1); + snprintf(stat_path, size, "%s/%s", realdir, pdirentry->d_name); + stat_ret = stat(stat_path, &st); + LEPT_FREE(stat_path); +#endif + if (stat_ret == 0 && S_ISDIR(st.st_mode)) + continue; + sarrayAddString(safiles, pdirentry->d_name, L_COPY); + } + closedir(pdir); + LEPT_FREE(realdir); + return safiles; +} + +#else /* _WIN32 */ + + /* http://msdn2.microsoft.com/en-us/library/aa365200(VS.85).aspx */ +#include + +SARRAY * +getFilenamesInDirectory(const char *dirname) +{ +char *pszDir; +char *realdir; +HANDLE hFind = INVALID_HANDLE_VALUE; +SARRAY *safiles; +WIN32_FIND_DATAA ffd; + + PROCNAME("getFilenamesInDirectory"); + + if (!dirname) + return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); + + realdir = genPathname(dirname, NULL); + pszDir = stringJoin(realdir, "\\*"); + LEPT_FREE(realdir); + + if (strlen(pszDir) + 1 > MAX_PATH) { + LEPT_FREE(pszDir); + return (SARRAY *)ERROR_PTR("dirname is too long", procName, NULL); + } + + if ((safiles = sarrayCreate(0)) == NULL) { + LEPT_FREE(pszDir); + return (SARRAY *)ERROR_PTR("safiles not made", procName, NULL); + } + + hFind = FindFirstFileA(pszDir, &ffd); + if (INVALID_HANDLE_VALUE == hFind) { + sarrayDestroy(&safiles); + LEPT_FREE(pszDir); + return (SARRAY *)ERROR_PTR("hFind not opened", procName, NULL); + } + + while (FindNextFileA(hFind, &ffd) != 0) { + if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) /* skip dirs */ + continue; + convertSepCharsInPath(ffd.cFileName, UNIX_PATH_SEPCHAR); + sarrayAddString(safiles, ffd.cFileName, L_COPY); + } + + FindClose(hFind); + LEPT_FREE(pszDir); + return safiles; +} +#endif /* _WIN32 */ diff --git a/3rdparty/hgOCR/leptonica/sarray2.c b/3rdparty/hgOCR/leptonica/sarray2.c new file mode 100644 index 00000000..7dea8998 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sarray2.c @@ -0,0 +1,726 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file sarray2.c + *
+ *
+ *      Sort
+ *          SARRAY     *sarraySort()
+ *          SARRAY     *sarraySortByIndex()
+ *          l_int32     stringCompareLexical()
+ *
+ *      Set operations using aset (rbtree)
+ *          SARRAY     *sarrayUnionByAset()
+ *          SARRAY     *sarrayRemoveDupsByAset()
+ *          SARRAY     *sarrayIntersectionByAset()
+ *          L_ASET     *l_asetCreateFromSarray()
+ *
+ *      Set operations using hashing (dnahash)
+ *          l_int32     sarrayRemoveDupsByHash()
+ *          SARRAY     *sarrayIntersectionByHash()
+ *          l_int32     sarrayFindStringByHash()
+ *          L_DNAHASH  *l_dnaHashCreateFromSarray()
+ *
+ *      Miscellaneous operations
+ *          SARRAY     *sarrayGenerateIntegers()
+ *          l_int32     sarrayLookupCSKV()
+ *
+ *
+ * We have two implementations of set operations on an array of strings:
+ *
+ *   (1) Using an underlying tree (rbtree)
+ *       This uses a good 64 bit hashing function for the key,
+ *       that is not expected to have hash collisions (and we do
+ *       not test for them).  The tree is built up of the hash
+ *       values, and if the hash is found in the tree, it is
+ *       assumed that the string has already been found.
+ *
+ *   (2) Using an underlying hashing of the keys (dnahash)
+ *       This uses a fast 64 bit hashing function for the key,
+ *       which is then hashed into a bucket (a dna in a dnaHash).
+ *       Because hash collisions can occur, the index into the
+ *       sarray for the string that gave rise to that key is stored,
+ *       and the dna (bucket) is traversed, using the stored indices
+ *       to determine if that string had already been seen.
+ *
+ * 
+ */ + +#include +#include "allheaders.h" + +/*----------------------------------------------------------------------* + * Sort * + *----------------------------------------------------------------------*/ +/*! + * \brief sarraySort() + * + * \param[in] saout output sarray; can be NULL or equal to sain + * \param[in] sain input sarray + * \param[in] sortorder L_SORT_INCREASING or L_SORT_DECREASING + * \return saout output sarray, sorted by ascii value, or NULL on error + * + *
+ * Notes:
+ *      (1) Set saout = sain for in-place; otherwise, set naout = NULL.
+ *      (2) Shell sort, modified from K&R, 2nd edition, p.62.
+ *          Slow but simple O(n logn) sort.
+ * 
+ */ +SARRAY * +sarraySort(SARRAY *saout, + SARRAY *sain, + l_int32 sortorder) +{ +char **array; +char *tmp; +l_int32 n, i, j, gap; + + PROCNAME("sarraySort"); + + if (!sain) + return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); + + /* Make saout if necessary; otherwise do in-place */ + if (!saout) + saout = sarrayCopy(sain); + else if (sain != saout) + return (SARRAY *)ERROR_PTR("invalid: not in-place", procName, NULL); + array = saout->array; /* operate directly on the array */ + n = sarrayGetCount(saout); + + /* Shell sort */ + for (gap = n/2; gap > 0; gap = gap / 2) { + for (i = gap; i < n; i++) { + for (j = i - gap; j >= 0; j -= gap) { + if ((sortorder == L_SORT_INCREASING && + stringCompareLexical(array[j], array[j + gap])) || + (sortorder == L_SORT_DECREASING && + stringCompareLexical(array[j + gap], array[j]))) + { + tmp = array[j]; + array[j] = array[j + gap]; + array[j + gap] = tmp; + } + } + } + } + + return saout; +} + + +/*! + * \brief sarraySortByIndex() + * + * \param[in] sain + * \param[in] naindex na that maps from the new sarray to the input sarray + * \return saout sorted, or NULL on error + */ +SARRAY * +sarraySortByIndex(SARRAY *sain, + NUMA *naindex) +{ +char *str; +l_int32 i, n, index; +SARRAY *saout; + + PROCNAME("sarraySortByIndex"); + + if (!sain) + return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); + if (!naindex) + return (SARRAY *)ERROR_PTR("naindex not defined", procName, NULL); + + n = sarrayGetCount(sain); + saout = sarrayCreate(n); + for (i = 0; i < n; i++) { + numaGetIValue(naindex, i, &index); + str = sarrayGetString(sain, index, L_COPY); + sarrayAddString(saout, str, L_INSERT); + } + + return saout; +} + + +/*! + * \brief stringCompareLexical() + * + * \param[in] str1 + * \param[in] str2 + * \return 1 if str1 > str2 lexically; 0 otherwise + * + *
+ * Notes:
+ *      (1) If the lexical values are identical, return a 0, to
+ *          indicate that no swapping is required to sort the strings.
+ * 
+ */ +l_int32 +stringCompareLexical(const char *str1, + const char *str2) +{ +l_int32 i, len1, len2, len; + + PROCNAME("sarrayCompareLexical"); + + if (!str1) + return ERROR_INT("str1 not defined", procName, 1); + if (!str2) + return ERROR_INT("str2 not defined", procName, 1); + + len1 = strlen(str1); + len2 = strlen(str2); + len = L_MIN(len1, len2); + + for (i = 0; i < len; i++) { + if (str1[i] == str2[i]) + continue; + if (str1[i] > str2[i]) + return 1; + else + return 0; + } + + if (len1 > len2) + return 1; + else + return 0; +} + + +/*----------------------------------------------------------------------* + * Set operations using aset (rbtree) * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayUnionByAset() + * + * \param[in] sa1, sa2 + * \return sad with the union of the string set, or NULL on error + * + *
+ * Notes:
+ *      (1) Duplicates are removed from the concatenation of the two arrays.
+ *      (2) The key for each string is a 64-bit hash.
+ *      (2) Algorithm: Concatenate the two sarrays.  Then build a set,
+ *          using hashed strings as keys.  As the set is built, first do
+ *          a find; if not found, add the key to the set and add the string
+ *          to the output sarray.  This is O(nlogn).
+ * 
+ */ +SARRAY * +sarrayUnionByAset(SARRAY *sa1, + SARRAY *sa2) +{ +SARRAY *sa3, *sad; + + PROCNAME("sarrayUnionByAset"); + + if (!sa1) + return (SARRAY *)ERROR_PTR("sa1 not defined", procName, NULL); + if (!sa2) + return (SARRAY *)ERROR_PTR("sa2 not defined", procName, NULL); + + /* Join */ + sa3 = sarrayCopy(sa1); + sarrayJoin(sa3, sa2); + + /* Eliminate duplicates */ + sad = sarrayRemoveDupsByAset(sa3); + sarrayDestroy(&sa3); + return sad; +} + + +/*! + * \brief sarrayRemoveDupsByAset() + * + * \param[in] sas + * \return sad with duplicates removed, or NULL on error + * + *
+ * Notes:
+ *      (1) This is O(nlogn), considerably slower than
+ *          sarrayRemoveDupsByHash() for large string arrays.
+ *      (2) The key for each string is a 64-bit hash.
+ *      (3) Build a set, using hashed strings as keys.  As the set is
+ *          built, first do a find; if not found, add the key to the
+ *          set and add the string to the output sarray.
+ * 
+ */ +SARRAY * +sarrayRemoveDupsByAset(SARRAY *sas) +{ +char *str; +l_int32 i, n; +l_uint64 hash; +L_ASET *set; +RB_TYPE key; +SARRAY *sad; + + PROCNAME("sarrayRemoveDupsByAset"); + + if (!sas) + return (SARRAY *)ERROR_PTR("sas not defined", procName, NULL); + + set = l_asetCreate(L_UINT_TYPE); + sad = sarrayCreate(0); + n = sarrayGetCount(sas); + for (i = 0; i < n; i++) { + str = sarrayGetString(sas, i, L_NOCOPY); + l_hashStringToUint64(str, &hash); + key.utype = hash; + if (!l_asetFind(set, key)) { + sarrayAddString(sad, str, L_COPY); + l_asetInsert(set, key); + } + } + + l_asetDestroy(&set); + return sad; +} + + +/*! + * \brief sarrayIntersectionByAset() + * + * \param[in] sa1, sa2 + * \return sad with the intersection of the string set, or NULL on error + * + *
+ * Notes:
+ *      (1) Algorithm: put the larger sarray into a set, using the string
+ *          hashes as the key values.  Then run through the smaller sarray,
+ *          building an output sarray and a second set from the strings
+ *          in the larger array: if a string is in the first set but
+ *          not in the second, add the string to the output sarray and hash
+ *          it into the second set.  The second set is required to make
+ *          sure only one instance of each string is put into the output sarray.
+ *          This is O(mlogn), {m,n} = sizes of {smaller,larger} input arrays.
+ * 
+ */ +SARRAY * +sarrayIntersectionByAset(SARRAY *sa1, + SARRAY *sa2) +{ +char *str; +l_int32 n1, n2, i, n; +l_uint64 hash; +L_ASET *set1, *set2; +RB_TYPE key; +SARRAY *sa_small, *sa_big, *sad; + + PROCNAME("sarrayIntersectionByAset"); + + if (!sa1) + return (SARRAY *)ERROR_PTR("sa1 not defined", procName, NULL); + if (!sa2) + return (SARRAY *)ERROR_PTR("sa2 not defined", procName, NULL); + + /* Put the elements of the biggest array into a set */ + n1 = sarrayGetCount(sa1); + n2 = sarrayGetCount(sa2); + sa_small = (n1 < n2) ? sa1 : sa2; /* do not destroy sa_small */ + sa_big = (n1 < n2) ? sa2 : sa1; /* do not destroy sa_big */ + set1 = l_asetCreateFromSarray(sa_big); + + /* Build up the intersection of strings */ + sad = sarrayCreate(0); + n = sarrayGetCount(sa_small); + set2 = l_asetCreate(L_UINT_TYPE); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa_small, i, L_NOCOPY); + l_hashStringToUint64(str, &hash); + key.utype = hash; + if (l_asetFind(set1, key) && !l_asetFind(set2, key)) { + sarrayAddString(sad, str, L_COPY); + l_asetInsert(set2, key); + } + } + + l_asetDestroy(&set1); + l_asetDestroy(&set2); + return sad; +} + + +/*! + * \brief l_asetCreateFromSarray() + * + * \param[in] sa + * \return set using a string hash into a uint64 as the key + */ +L_ASET * +l_asetCreateFromSarray(SARRAY *sa) +{ +char *str; +l_int32 i, n; +l_uint64 hash; +L_ASET *set; +RB_TYPE key; + + PROCNAME("l_asetCreateFromSarray"); + + if (!sa) + return (L_ASET *)ERROR_PTR("sa not defined", procName, NULL); + + set = l_asetCreate(L_UINT_TYPE); + n = sarrayGetCount(sa); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + l_hashStringToUint64(str, &hash); + key.utype = hash; + l_asetInsert(set, key); + } + + return set; +} + + +/*----------------------------------------------------------------------* + * Set operations using hashing (dnahash) * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayRemoveDupsByHash() + * + * \param[in] sas + * \param[out] psad unique set of strings; duplicates removed + * \param[out] pdahash [optional] dnahash used for lookup + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Generates a sarray with unique values.
+ *      (2) The dnahash is built up with sad to assure uniqueness.
+ *          It can be used to find if a string is in the set:
+ *              sarrayFindValByHash(sad, dahash, str, &index)
+ *      (3) The hash of the string location is simple and fast.  It scales
+ *          up with the number of buckets to insure a fairly random
+ *          bucket selection input strings.
+ *      (4) This is faster than sarrayRemoveDupsByAset(), because the
+ *          bucket lookup is O(n), although there is a double-loop
+ *          lookup within the dna in each bucket.
+ * 
+ */ +l_ok +sarrayRemoveDupsByHash(SARRAY *sas, + SARRAY **psad, + L_DNAHASH **pdahash) +{ +char *str; +l_int32 i, n, index, items; +l_uint32 nsize; +l_uint64 key; +SARRAY *sad; +L_DNAHASH *dahash; + + PROCNAME("sarrayRemoveDupsByHash"); + + if (pdahash) *pdahash = NULL; + if (!psad) + return ERROR_INT("&sad not defined", procName, 1); + *psad = NULL; + if (!sas) + return ERROR_INT("sas not defined", procName, 1); + + n = sarrayGetCount(sas); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ + dahash = l_dnaHashCreate(nsize, 8); + sad = sarrayCreate(n); + *psad = sad; + for (i = 0, items = 0; i < n; i++) { + str = sarrayGetString(sas, i, L_NOCOPY); + sarrayFindStringByHash(sad, dahash, str, &index); + if (index < 0) { /* not found */ + l_hashStringToUint64(str, &key); + l_dnaHashAdd(dahash, key, (l_float64)items); + sarrayAddString(sad, str, L_COPY); + items++; + } + } + + if (pdahash) + *pdahash = dahash; + else + l_dnaHashDestroy(&dahash); + return 0; +} + + +/*! + * \brief sarrayIntersectionByHash() + * + * \param[in] sa1, sa2 + * \return sad intersection of the strings, or NULL on error + * + *
+ * Notes:
+ *      (1) This is faster than sarrayIntersectionByAset(), because the
+ *          bucket lookup is O(n).
+ * 
+ */ +SARRAY * +sarrayIntersectionByHash(SARRAY *sa1, + SARRAY *sa2) +{ +char *str; +l_int32 n1, n2, nsmall, i, index1, index2; +l_uint32 nsize2; +l_uint64 key; +L_DNAHASH *dahash1, *dahash2; +SARRAY *sa_small, *sa_big, *sad; + + PROCNAME("sarrayIntersectionByHash"); + + if (!sa1) + return (SARRAY *)ERROR_PTR("sa1 not defined", procName, NULL); + if (!sa2) + return (SARRAY *)ERROR_PTR("sa2 not defined", procName, NULL); + + /* Put the elements of the biggest sarray into a dnahash */ + n1 = sarrayGetCount(sa1); + n2 = sarrayGetCount(sa2); + sa_small = (n1 < n2) ? sa1 : sa2; /* do not destroy sa_small */ + sa_big = (n1 < n2) ? sa2 : sa1; /* do not destroy sa_big */ + dahash1 = l_dnaHashCreateFromSarray(sa_big); + + /* Build up the intersection of strings. Add to %sad + * if the string is in sa_big (using dahash1) but hasn't + * yet been seen in the traversal of sa_small (using dahash2). */ + sad = sarrayCreate(0); + nsmall = sarrayGetCount(sa_small); + findNextLargerPrime(nsmall / 20, &nsize2); /* buckets in hash table */ + dahash2 = l_dnaHashCreate(nsize2, 0); + for (i = 0; i < nsmall; i++) { + str = sarrayGetString(sa_small, i, L_NOCOPY); + sarrayFindStringByHash(sa_big, dahash1, str, &index1); + if (index1 >= 0) { + sarrayFindStringByHash(sa_small, dahash2, str, &index2); + if (index2 == -1) { + sarrayAddString(sad, str, L_COPY); + l_hashStringToUint64(str, &key); + l_dnaHashAdd(dahash2, key, (l_float64)i); + } + } + } + + l_dnaHashDestroy(&dahash1); + l_dnaHashDestroy(&dahash2); + return sad; +} + + +/*! + * \brief sarrayFindStringByHash() + * + * \param[in] sa + * \param[in] dahash built from sa + * \param[in] str arbitrary string + * \param[out] pindex index into %sa if %str is in %sa; -1 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Fast lookup in dnaHash associated with a sarray, to see if a
+ *          random string %str is already stored in the hash table.
+ *      (2) We use a strong hash function to minimize the chance that
+ *          two different strings hash to the same key value.
+ *      (3) We select the number of buckets to be about 5% of the size
+ *          of the input sarray, so that when fully populated, each
+ *          bucket (dna) will have about 20 entries, each being an index
+ *          into sa.  In lookup, after hashing to the key, and then
+ *          again to the bucket, we traverse the bucket (dna), using the
+ *          index into sa to check if %str has been found before.
+ * 
+ */ +l_ok +sarrayFindStringByHash(SARRAY *sa, + L_DNAHASH *dahash, + const char *str, + l_int32 *pindex) +{ +char *stri; +l_int32 i, nvals, index; +l_uint64 key; +L_DNA *da; + + PROCNAME("sarrayFindStringByHash"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = -1; + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!dahash) + return ERROR_INT("dahash not defined", procName, 1); + + l_hashStringToUint64(str, &key); + da = l_dnaHashGetDna(dahash, key, L_NOCOPY); + if (!da) return 0; + + /* Run through the da, looking for this string */ + nvals = l_dnaGetCount(da); + for (i = 0; i < nvals; i++) { + l_dnaGetIValue(da, i, &index); + stri = sarrayGetString(sa, index, L_NOCOPY); + if (!strcmp(str, stri)) { /* duplicate */ + *pindex = index; + return 0; + } + } + + return 0; +} + + +/*! + * \brief l_dnaHashCreateFromSarray() + * + * \param[in] sa + * \return dahash, or NULL on error + */ +L_DNAHASH * +l_dnaHashCreateFromSarray(SARRAY *sa) +{ +char *str; +l_int32 i, n; +l_uint32 nsize; +l_uint64 key; +L_DNAHASH *dahash; + + /* Build up dnaHash of indices, hashed by a 64-bit key that + * should randomize the lower bits used in bucket selection. + * Having about 20 pts in each bucket is roughly optimal. */ + n = sarrayGetCount(sa); + findNextLargerPrime(n / 20, &nsize); /* buckets in hash table */ +/* fprintf(stderr, "Prime used: %d\n", nsize); */ + + /* Add each string, using the hash as key and the index into %sa + * as the value. Storing the index enables operations that check + * for duplicates. */ + dahash = l_dnaHashCreate(nsize, 8); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + l_hashStringToUint64(str, &key); + l_dnaHashAdd(dahash, key, (l_float64)i); + } + + return dahash; +} + + +/*----------------------------------------------------------------------* + * Miscellaneous operations * + *----------------------------------------------------------------------*/ +/*! + * \brief sarrayGenerateIntegers() + * + * \param[in] n + * \return sa of printed numbers, 1 - n, or NULL on error + */ +SARRAY * +sarrayGenerateIntegers(l_int32 n) +{ +char buf[32]; +l_int32 i; +SARRAY *sa; + + PROCNAME("sarrayGenerateIntegers"); + + if ((sa = sarrayCreate(n)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + for (i = 0; i < n; i++) { + snprintf(buf, sizeof(buf), "%d", i); + sarrayAddString(sa, buf, L_COPY); + } + return sa; +} + + +/*! + * \brief sarrayLookupCSKV() + * + * \param[in] sa of strings, each being a comma-separated pair + * of strings, the first being a key and the + * second a value + * \param[in] keystring an input string to match with each key in %sa + * \param[out] pvalstring the returned value string corresponding to the + * input key string, if found; otherwise NULL + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input %sa can have other strings that are not in
+ *          comma-separated key-value format.  These will be ignored.
+ *      (2) This returns a copy of the first value string in %sa whose
+ *          key string matches the input %keystring.
+ *      (3) White space is not ignored; all white space before the ','
+ *          is used for the keystring in matching.  This allows the
+ *          key and val strings to have white space (e.g., multiple words).
+ * 
+ */ +l_ok +sarrayLookupCSKV(SARRAY *sa, + const char *keystring, + char **pvalstring) +{ +char *key, *val, *str; +l_int32 i, n; +SARRAY *sa1; + + PROCNAME("sarrayLookupCSKV"); + + if (!pvalstring) + return ERROR_INT("&valstring not defined", procName, 1); + *pvalstring = NULL; + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!keystring) + return ERROR_INT("keystring not defined", procName, 1); + + n = sarrayGetCount(sa); + for (i = 0; i < n; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + sa1 = sarrayCreate(2); + sarraySplitString(sa1, str, ","); + if (sarrayGetCount(sa1) != 2) { + sarrayDestroy(&sa1); + continue; + } + key = sarrayGetString(sa1, 0, L_NOCOPY); + val = sarrayGetString(sa1, 1, L_NOCOPY); + if (!strcmp(key, keystring)) { + *pvalstring = stringNew(val); + sarrayDestroy(&sa1); + return 0; + } + sarrayDestroy(&sa1); + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/scale1.c b/3rdparty/hgOCR/leptonica/scale1.c new file mode 100644 index 00000000..4008319d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/scale1.c @@ -0,0 +1,3730 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file scale1.c + *
+ *         Top-level scaling
+ *               PIX      *pixScale()
+ *               PIX      *pixScaleToSizeRel()
+ *               PIX      *pixScaleToSize()
+ *               PIX      *pixScaleToResolution()
+ *               PIX      *pixScaleGeneral()
+ *
+ *         Linearly interpreted (usually up-) scaling
+ *               PIX      *pixScaleLI()
+ *               PIX      *pixScaleColorLI()
+ *               PIX      *pixScaleColor2xLI()
+ *               PIX      *pixScaleColor4xLI()
+ *               PIX      *pixScaleGrayLI()
+ *               PIX      *pixScaleGray2xLI()
+ *               PIX      *pixScaleGray4xLI()
+ *
+ *         Upscale 2x followed by binarization
+ *               PIX      *pixScaleGray2xLIThresh()
+ *               PIX      *pixScaleGray2xLIDither()
+ *
+ *         Upscale 4x followed by binarization
+ *               PIX      *pixScaleGray4xLIThresh()
+ *               PIX      *pixScaleGray4xLIDither()
+ *
+ *         Scaling by closest pixel sampling
+ *               PIX      *pixScaleBySampling()
+ *               PIX      *pixScaleBySamplingToSize()
+ *               PIX      *pixScaleByIntSampling()
+ *
+ *         Fast integer factor subsampling RGB to gray and to binary
+ *               PIX      *pixScaleRGBToGrayFast()
+ *               PIX      *pixScaleRGBToBinaryFast()
+ *               PIX      *pixScaleGrayToBinaryFast()
+ *
+ *         Downscaling with (antialias) smoothing
+ *               PIX      *pixScaleSmooth()
+ *               PIX      *pixScaleSmoothToSize()
+ *               PIX      *pixScaleRGBToGray2()   [special 2x reduction to gray]
+ *
+ *         Downscaling with (antialias) area mapping
+ *               PIX      *pixScaleAreaMap()
+ *               PIX      *pixScaleAreaMap2()
+ *               PIX      *pixScaleAreaMapToSize()
+ *
+ *         Binary scaling by closest pixel sampling
+ *               PIX      *pixScaleBinary()
+ *
+ *     Low-level static functions:
+ *
+ *         Color (interpolated) scaling: general case
+ *               static void       scaleColorLILow()
+ *
+ *         Grayscale (interpolated) scaling: general case
+ *               static void       scaleGrayLILow()
+ *
+ *         Color (interpolated) scaling: 2x upscaling
+ *               static void       scaleColor2xLILow()
+ *               static void       scaleColor2xLILineLow()
+ *
+ *         Grayscale (interpolated) scaling: 2x upscaling
+ *               static void       scaleGray2xLILow()
+ *               static void       scaleGray2xLILineLow()
+ *
+ *         Grayscale (interpolated) scaling: 4x upscaling
+ *               static void       scaleGray4xLILow()
+ *               static void       scaleGray4xLILineLow()
+ *
+ *         Grayscale and color scaling by closest pixel sampling
+ *               static l_int32    scaleBySamplingLow()
+ *
+ *         Color and grayscale downsampling with (antialias) lowpass filter
+ *               static l_int32    scaleSmoothLow()
+ *               static void       scaleRGBToGray2Low()
+ *
+ *         Color and grayscale downsampling with (antialias) area mapping
+ *               static l_int32    scaleColorAreaMapLow()
+ *               static l_int32    scaleGrayAreaMapLow()
+ *               static l_int32    scaleAreaMapLow2()
+ *
+ *         Binary scaling by closest pixel sampling
+ *               static l_int32    scaleBinaryLow()
+ * 
+ */ + +#include +#include "allheaders.h" + +static void scaleColorLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 wpls); +static void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 wpls); +static void scaleColor2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, + l_int32 ws, l_int32 hs, l_int32 wpls); +static void scaleColor2xLILineLow(l_uint32 *lined, l_int32 wpld, + l_uint32 *lines, l_int32 ws, l_int32 wpls, + l_int32 lastlineflag); +static void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, + l_int32 ws, l_int32 hs, l_int32 wpls); +static void scaleGray2xLILineLow(l_uint32 *lined, l_int32 wpld, + l_uint32 *lines, l_int32 ws, l_int32 wpls, + l_int32 lastlineflag); +static void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, + l_int32 ws, l_int32 hs, l_int32 wpls); +static void scaleGray4xLILineLow(l_uint32 *lined, l_int32 wpld, + l_uint32 *lines, l_int32 ws, l_int32 wpls, + l_int32 lastlineflag); +static l_int32 scaleBySamplingLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 d, l_int32 wpls); +static l_int32 scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 d, l_int32 wpls, + l_int32 size); +static void scaleRGBToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_float32 rwt, l_float32 gwt, l_float32 bwt); +static void scaleColorAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 wpls); +static void scaleGrayAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 wpls); +static void scaleAreaMapLow2(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 d, + l_int32 wpls); +static l_int32 scaleBinaryLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 ws, + l_int32 hs, l_int32 wpls); + +#ifndef NO_CONSOLE_IO +#define DEBUG_OVERFLOW 0 +#define DEBUG_UNROLLING 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*------------------------------------------------------------------* + * Top level scaling dispatcher * + *------------------------------------------------------------------*/ +/*! + * \brief pixScale() + * + * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp + * \param[in] scalex, scaley + * \return pixd, or NULL on error + * + * This function scales 32 bpp RGB; 2, 4 or 8 bpp palette color; + * 2, 4, 8 or 16 bpp gray; and binary images. + * + * When the input has palette color, the colormap is removed and + * the result is either 8 bpp gray or 32 bpp RGB, depending on whether + * the colormap has color entries. Images with 2, 4 or 16 bpp are + * converted to 8 bpp. + * + * Because pixScale is meant to be a very simple interface to a + * number of scaling functions, including the use of unsharp masking, + * the type of scaling and the sharpening parameters are chosen + * by default. Grayscale and color images are scaled using one + * of four methods, depending on the scale factors: + * 1 antialiased subsampling (lowpass filtering followed by + * subsampling, implemented here by area mapping), for scale factors + * less than 0.2 + * 2 antialiased subsampling with sharpening, for scale factors + * between 0.2 and 0.7 + * 3 linear interpolation with sharpening, for scale factors between + * 0.7 and 1.4 + * 4 linear interpolation without sharpening, for scale factors >= 1.4. + * + * One could use subsampling for scale factors very close to 1.0, + * because it preserves sharp edges. Linear interpolation blurs + * edges because the dest pixels will typically straddle two src edge + * pixels. Subsmpling removes entire columns and rows, so the edge is + * not blurred. However, there are two reasons for not doing this. + * First, it moves edges, so that a straight line at a large angle to + * both horizontal and vertical will have noticeable kinks where + * horizontal and vertical rasters are removed. Second, although it + * is very fast, you get good results on sharp edges by applying + * a sharpening filter. + * + * For images with sharp edges, sharpening substantially improves the + * image quality for scale factors between about 0.2 and about 2.0. + * pixScale uses a small amount of sharpening by default because + * it strengthens edge pixels that are weak due to anti-aliasing. + * The default sharpening factors are: + * * for scaling factors < 0.7: sharpfract = 0.2 sharpwidth = 1 + * * for scaling factors >= 0.7: sharpfract = 0.4 sharpwidth = 2 + * The cases where the sharpening halfwidth is 1 or 2 have special + * implementations and are about twice as fast as the general case. + * + * However, sharpening is computationally expensive, and one needs + * to consider the speed-quality tradeoff: + * * For upscaling of RGB images, linear interpolation plus default + * sharpening is about 5 times slower than upscaling alone. + * * For downscaling, area mapping plus default sharpening is + * about 10 times slower than downscaling alone. + * When the scale factor is larger than 1.4, the cost of sharpening, + * which is proportional to image area, is very large compared to the + * incremental quality improvement, so we cut off the default use of + * sharpening at 1.4. Thus, for scale factors greater than 1.4, + * pixScale only does linear interpolation. + * + * In many situations you will get a satisfactory result by scaling + * without sharpening: call pixScaleGeneral with %sharpfract = 0.0. + * Alternatively, if you wish to sharpen but not use the default + * value, first call pixScaleGeneral with %sharpfract = 0.0, and + * then sharpen explicitly using pixUnsharpMasking. + * + * Binary images are scaled to binary by sampling the closest pixel, + * without any low-pass filtering averaging of neighboring pixels. + * This will introduce aliasing for reductions. Aliasing can be + * prevented by using pixScaleToGray instead. + */ +PIX * +pixScale(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 sharpwidth; +l_float32 maxscale, sharpfract; + + PROCNAME("pixScale"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Reduce the default sharpening factors by 2 if maxscale < 0.7 */ + maxscale = L_MAX(scalex, scaley); + sharpfract = (maxscale < 0.7) ? 0.2 : 0.4; + sharpwidth = (maxscale < 0.7) ? 1 : 2; + + return pixScaleGeneral(pixs, scalex, scaley, sharpfract, sharpwidth); +} + + +/*! + * \brief pixScaleToSizeRel() + * + * \param[in] pixs + * \param[in] delw change in width, in pixels; 0 means no change + * \param[in] delh change in height, in pixels; 0 means no change + * \return pixd, or NULL on error + */ +PIX * +pixScaleToSizeRel(PIX *pixs, + l_int32 delw, + l_int32 delh) +{ +l_int32 w, h, wd, hd; + + PROCNAME("pixScaleToSizeRel"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + if (delw == 0 && delh == 0) + return pixCopy(NULL, pixs); + + pixGetDimensions(pixs, &w, &h, NULL); + wd = w + delw; + hd = h + delh; + if (wd <= 0 || hd <= 0) + return (PIX *)ERROR_PTR("pix dimension reduced to 0", procName, NULL); + + return pixScaleToSize(pixs, wd, hd); +} + + +/*! + * \brief pixScaleToSize() + * + * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The output scaled image has the dimension(s) you specify:
+ *          * To specify the width with isotropic scaling, set %hd = 0.
+ *          * To specify the height with isotropic scaling, set %wd = 0.
+ *          * If both %wd and %hd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *          * It is an error to set both %wd and %hd to 0.
+ * 
+ */ +PIX * +pixScaleToSize(PIX *pixs, + l_int32 wd, + l_int32 hd) +{ +l_int32 w, h; +l_float32 scalex, scaley; + + PROCNAME("pixScaleToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (wd <= 0 && hd <= 0) + return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (wd <= 0) { + scaley = (l_float32)hd / (l_float32)h; + scalex = scaley; + } else if (hd <= 0) { + scalex = (l_float32)wd / (l_float32)w; + scaley = scalex; + } else { + scalex = (l_float32)wd / (l_float32)w; + scaley = (l_float32)hd / (l_float32)h; + } + + return pixScale(pixs, scalex, scaley); +} + + +/*! + * \brief pixScaleToResolution() + * + * \param[in] pixs + * \param[in] target desired resolution + * \param[in] assumed assumed resolution if not defined; typ. 300. + * \param[out] pscalefact [optional] actual scaling factor used + * \return pixd, or NULL on error + */ +PIX * +pixScaleToResolution(PIX *pixs, + l_float32 target, + l_float32 assumed, + l_float32 *pscalefact) +{ +l_int32 xres; +l_float32 factor; + + PROCNAME("pixScaleToResolution"); + + if (pscalefact) *pscalefact = 1.0; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (target <= 0) + return (PIX *)ERROR_PTR("target resolution <= 0", procName, NULL); + + xres = pixGetXRes(pixs); + if (xres <= 0) { + if (assumed == 0) + return pixCopy(NULL, pixs); + xres = assumed; + } + factor = target / (l_float32)xres; + if (pscalefact) *pscalefact = factor; + + return pixScale(pixs, factor, factor); +} + + +/*! + * \brief pixScaleGeneral() + * + * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp + * \param[in] scalex must be > 0.0 + * \param[in] scaley must be > 0.0 + * \param[in] sharpfract use 0.0 to skip sharpening + * \param[in] sharpwidth halfwidth of low-pass filter; typ. 1 or 2 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixScale() for usage.
+ *      (2) This interface may change in the future, as other special
+ *          cases are added.
+ *      (3) The actual sharpening factors used depend on the maximum
+ *          of the two scale factors (maxscale):
+ *            maxscale <= 0.2:        no sharpening
+ *            0.2 < maxscale < 1.4:   uses the input parameters
+ *            maxscale >= 1.4:        no sharpening
+ *      (4) To avoid sharpening for grayscale and color images with
+ *          scaling factors between 0.2 and 1.4, call this function
+ *          with %sharpfract == 0.0.
+ *      (5) To use arbitrary sharpening in conjunction with scaling,
+ *          call this function with %sharpfract = 0.0, and follow this
+ *          with a call to pixUnsharpMasking() with your chosen parameters.
+ * 
+ */ +PIX * +pixScaleGeneral(PIX *pixs, + l_float32 scalex, + l_float32 scaley, + l_float32 sharpfract, + l_int32 sharpwidth) +{ +l_int32 d; +l_float32 maxscale; +PIX *pixt, *pixt2, *pixd; + + PROCNAME("pixScaleGeneral"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not {1,2,4,8,16,32} bpp", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); + if (scalex == 1.0 && scaley == 1.0) + return pixCopy(NULL, pixs); + + if (d == 1) + return pixScaleBinary(pixs, scalex, scaley); + + /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ + if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + /* Scale (up or down) */ + d = pixGetDepth(pixt); + maxscale = L_MAX(scalex, scaley); + if (maxscale < 0.7) { /* area mapping for anti-aliasing */ + pixt2 = pixScaleAreaMap(pixt, scalex, scaley); + if (maxscale > 0.2 && sharpfract > 0.0 && sharpwidth > 0) + pixd = pixUnsharpMasking(pixt2, sharpwidth, sharpfract); + else + pixd = pixClone(pixt2); + } else { /* use linear interpolation */ + if (d == 8) + pixt2 = pixScaleGrayLI(pixt, scalex, scaley); + else /* d == 32 */ + pixt2 = pixScaleColorLI(pixt, scalex, scaley); + if (maxscale < 1.4 && sharpfract > 0.0 && sharpwidth > 0) + pixd = pixUnsharpMasking(pixt2, sharpwidth, sharpfract); + else + pixd = pixClone(pixt2); + } + + pixDestroy(&pixt); + pixDestroy(&pixt2); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*------------------------------------------------------------------* + * Scaling by linear interpolation * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleLI() + * + * \param[in] pixs 2, 4, 8 or 32 bpp; with or without colormap + * \param[in] scalex must be >= 0.7 + * \param[in] scaley must be >= 0.7 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function should only be used when the scale factors are
+ *          greater than or equal to 0.7, and typically greater than 1.
+ *          If either scale factor is larger than 0.7, we issue a warning
+ *          and call pixScaleGeneral(), which will invoke area mapping
+ *          without sharpening.
+ *      (2) This works on 2, 4, 8, 16 and 32 bpp images, as well as on
+ *          2, 4 and 8 bpp images that have a colormap.  If there is a
+ *          colormap, it is removed to either gray or RGB, depending
+ *          on the colormap.
+ *      (3) This does a linear interpolation on the src image.
+ *      (4) It dispatches to much faster implementations for
+ *          the special cases of 2x and 4x expansion.
+ * 
+ */ +PIX * +pixScaleLI(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 d; +l_float32 maxscale; +PIX *pixt, *pixd; + + PROCNAME("pixScaleLI"); + + if (!pixs || (pixGetDepth(pixs) == 1)) + return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); + maxscale = L_MAX(scalex, scaley); + if (maxscale < 0.7) { + L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); + return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); + } + d = pixGetDepth(pixs); + if (d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("pixs not {2,4,8,16,32} bpp", procName, NULL); + + /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ + if ((pixt = pixConvertTo8Or32(pixs, L_CLONE, 0)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + + d = pixGetDepth(pixt); + if (d == 8) + pixd = pixScaleGrayLI(pixt, scalex, scaley); + else /* d == 32 */ + pixd = pixScaleColorLI(pixt, scalex, scaley); + + pixDestroy(&pixt); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixScaleColorLI() + * + * \param[in] pixs 32 bpp, representing rgb + * \param[in] scalex must be >= 0.7 + * \param[in] scaley must be >= 0.7 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) If either scale factor is larger than 0.7, we issue a warning
+ *          and call pixScaleGeneral(), which will invoke area mapping
+ *          without sharpening.  This is particularly important for
+ *          document images with sharp edges.
+ *      (2) For the general case, it's about 4x faster to manipulate
+ *          the color pixels directly, rather than to make images
+ *          out of each of the 3 components, scale each component
+ *          using the pixScaleGrayLI(), and combine the results back
+ *          into an rgb image.
+ *      (3) The speed on intel hardware for the general case (not 2x)
+ *          is about 10 * 10^6 dest-pixels/sec/GHz.  (The special 2x
+ *          case runs at about 80 * 10^6 dest-pixels/sec/GHz.)
+ * 
+ */ +PIX * +pixScaleColorLI(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, wpls, wd, hd, wpld; +l_uint32 *datas, *datad; +l_float32 maxscale; +PIX *pixd; + + PROCNAME("pixScaleColorLI"); + + if (!pixs || (pixGetDepth(pixs) != 32)) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + maxscale = L_MAX(scalex, scaley); + if (maxscale < 0.7) { + L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); + return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); + } + + /* Do fast special cases if possible */ + if (scalex == 1.0 && scaley == 1.0) + return pixCopy(NULL, pixs); + if (scalex == 2.0 && scaley == 2.0) + return pixScaleColor2xLI(pixs); + if (scalex == 4.0 && scaley == 4.0) + return pixScaleColor4xLI(pixs); + + /* General case */ + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if ((pixd = pixCreate(wd, hd, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleColorLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); + + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixScaleColor2xLI() + * + * \param[in] pixs 32 bpp, representing rgb + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a special case of linear interpolated scaling,
+ *          for 2x upscaling.  It is about 8x faster than using
+ *          the generic pixScaleColorLI(), and about 4x faster than
+ *          using the special 2x scale function pixScaleGray2xLI()
+ *          on each of the three components separately.
+ *      (2) The speed on intel hardware is about
+ *          80 * 10^6 dest-pixels/sec/GHz.
+ * 
+ */ +PIX * +pixScaleColor2xLI(PIX *pixs) +{ +l_int32 ws, hs, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleColor2xLI"); + + if (!pixs || (pixGetDepth(pixs) != 32)) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(2 * ws, 2 * hs, 32)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 2.0, 2.0); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleColor2xLILow(datad, wpld, datas, ws, hs, wpls); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 2.0, 2.0); + + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixScaleColor4xLI() + * + * \param[in] pixs 32 bpp, representing rgb + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a special case of color linear interpolated scaling,
+ *          for 4x upscaling.  It is about 3x faster than using
+ *          the generic pixScaleColorLI().
+ *      (2) The speed on intel hardware is about
+ *          30 * 10^6 dest-pixels/sec/GHz
+ *      (3) This scales each component separately, using pixScaleGray4xLI().
+ *          It would be about 4x faster to inline the color code properly,
+ *          in analogy to scaleColor4xLILow(), and I leave this as
+ *          an exercise for someone who really needs it.
+ * 
+ */ +PIX * +pixScaleColor4xLI(PIX *pixs) +{ +PIX *pixr, *pixg, *pixb; +PIX *pixrs, *pixgs, *pixbs; +PIX *pixd; + + PROCNAME("pixScaleColor4xLI"); + + if (!pixs || (pixGetDepth(pixs) != 32)) + return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); + + pixr = pixGetRGBComponent(pixs, COLOR_RED); + pixrs = pixScaleGray4xLI(pixr); + pixDestroy(&pixr); + pixg = pixGetRGBComponent(pixs, COLOR_GREEN); + pixgs = pixScaleGray4xLI(pixg); + pixDestroy(&pixg); + pixb = pixGetRGBComponent(pixs, COLOR_BLUE); + pixbs = pixScaleGray4xLI(pixb); + pixDestroy(&pixb); + + if ((pixd = pixCreateRGBImage(pixrs, pixgs, pixbs)) == NULL) { + L_ERROR("pixd not made\n", procName); + } else { + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 4.0, 4.0); + pixCopyInputFormat(pixd, pixs); + } + + pixDestroy(&pixrs); + pixDestroy(&pixgs); + pixDestroy(&pixbs); + return pixd; +} + + +/*! + * \brief pixScaleGrayLI() + * + * \param[in] pixs 8 bpp grayscale, no cmap + * \param[in] scalex must be >= 0.7 + * \param[in] scaley must be >= 0.7 + * \return pixd, or NULL on error + * + * This function is appropriate for upscaling magnification, where the + * scale factor is > 1, as well as for a small amount of downscaling + * reduction, with scale factor > 0.7. If the scale factor is < 0.7, + * the best result is obtained by area mapping, but this is relatiely + * expensive. A less expensive alternative with scale factor < 0.7 + * is low-pass filtering followed by subsampling (pixScaleSmooth()), + * which is effectively a cheap form of area mapping. + * + * Some more details follow. + * + * For each pixel in the dest, this does a linear + * interpolation of 4 neighboring pixels in the src. + * Specifically, consider the UL corner of src and + * dest pixels. The UL corner of the dest falls within + * a src pixel, whose four corners are the UL corners + * of 4 adjacent src pixels. The value of the dest + * is taken by linear interpolation using the values of + * the four src pixels and the distance of the UL corner + * of the dest from each corner. + * + * If the image is expanded so that the dest pixel is + * smaller than the src pixel, such interpolation + * is a reasonable approach. This interpolation is + * also good for a small image reduction factor that + * is not more than a 2x reduction. + * + * Note that the linear interpolation algorithm for scaling + * is identical in form to the area-mapping algorithm + * for grayscale rotation. The latter corresponds to a + * translation of each pixel without scaling. + * + * This function is NOT optimal if the scaling involves + * a large reduction. If the image is significantly + * reduced, so that the dest pixel is much larger than + * the src pixels, this interpolation, which is over src + * pixels only near the UL corner of the dest pixel, + * is not going to give a good area-mapping average. + * Because area mapping for image scaling is considerably + * more computationally intensive than linear interpolation, + * we choose not to use it. For large image reduction, + * linear interpolation over adjacent src pixels + * degenerates asymptotically to subsampling. But + * subsampling without a low-pass pre-filter causes + * aliasing by the nyquist theorem. To avoid aliasing, + * a low-pass filter e.g., an averaging filter of + * size roughly equal to the dest pixel i.e., the + * reduction factor should be applied to the src before + * subsampling. + * + * As an alternative to low-pass filtering and subsampling + * for large reduction factors, linear interpolation can + * also be done between the widely separated src pixels in + * which the corners of the dest pixel lie. This also is + * not optimal, as it samples src pixels only near the + * corners of the dest pixel, and it is not implemented. + * + * The speed on circa 2005 Intel hardware for the general case (not 2x) + * is about 13 * 10^6 dest-pixels/sec/GHz. The special 2x case runs + * at about 100 * 10^6 dest-pixels/sec/GHz. + */ +PIX * +pixScaleGrayLI(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, wpls, wd, hd, wpld; +l_uint32 *datas, *datad; +l_float32 maxscale; +PIX *pixd; + + PROCNAME("pixScaleGrayLI"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", + procName, NULL); + maxscale = L_MAX(scalex, scaley); + if (maxscale < 0.7) { + L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); + return pixScaleGeneral(pixs, scalex, scaley, 0.0, 0); + } + + /* Do fast special cases if possible */ + if (scalex == 1.0 && scaley == 1.0) + return pixCopy(NULL, pixs); + if (scalex == 2.0 && scaley == 2.0) + return pixScaleGray2xLI(pixs); + if (scalex == 4.0 && scaley == 4.0) + return pixScaleGray4xLI(pixs); + + /* General case */ + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyText(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleGrayLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); + return pixd; +} + + +/*! + * \brief pixScaleGray2xLI() + * + * \param[in] pixs 8 bpp grayscale, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a special case of gray linear interpolated scaling,
+ *          for 2x upscaling.  It is about 6x faster than using
+ *          the generic pixScaleGrayLI().
+ *      (2) The speed on intel hardware is about
+ *          100 * 10^6 dest-pixels/sec/GHz
+ * 
+ */ +PIX * +pixScaleGray2xLI(PIX *pixs) +{ +l_int32 ws, hs, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleGray2xLI"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(2 * ws, 2 * hs, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixScaleResolution(pixd, 2.0, 2.0); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleGray2xLILow(datad, wpld, datas, ws, hs, wpls); + return pixd; +} + + +/*! + * \brief pixScaleGray4xLI() + * + * \param[in] pixs 8 bpp grayscale, not cmapped + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a special case of gray linear interpolated scaling,
+ *          for 4x upscaling.  It is about 12x faster than using
+ *          the generic pixScaleGrayLI().
+ *      (2) The speed on intel hardware is about
+ *          160 * 10^6 dest-pixels/sec/GHz.
+ * 
+ */ +PIX * +pixScaleGray4xLI(PIX *pixs) +{ +l_int32 ws, hs, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleGray4xLI"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + if ((pixd = pixCreate(4 * ws, 4 * hs, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixScaleResolution(pixd, 4.0, 4.0); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleGray4xLILow(datad, wpld, datas, ws, hs, wpls); + return pixd; +} + + +/*------------------------------------------------------------------* + * Scale 2x followed by binarization * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleGray2xLIThresh() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] thresh between 0 and 256 + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does 2x upscale on pixs, using linear interpolation,
+ *          followed by thresholding to binary.
+ *      (2) Buffers are used to avoid making a large grayscale image.
+ * 
+ */ +PIX * +pixScaleGray2xLIThresh(PIX *pixs, + l_int32 thresh) +{ +l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; +l_uint32 *datas, *datad, *lines, *lined, *lineb; +PIX *pixd; + + PROCNAME("pixScaleGray2xLIThresh"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + if (thresh < 0 || thresh > 256) + return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = 2 * ws; + hd = 2 * hs; + hsm = hs - 1; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Make line buffer for 2 lines of virtual intermediate image */ + wplb = (wd + 3) / 4; + if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) + return (PIX *)ERROR_PTR("lineb not made", procName, NULL); + + /* Make dest binary image */ + if ((pixd = pixCreate(wd, hd, 1)) == NULL) { + LEPT_FREE(lineb); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 2.0, 2.0); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + /* Do all but last src line */ + for (i = 0; i < hsm; i++) { + lines = datas + i * wpls; + lined = datad + 2 * i * wpld; /* do 2 dest lines at a time */ + scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 0); + thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); + thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); + } + + /* Do last src line */ + lines = datas + hsm * wpls; + lined = datad + 2 * hsm * wpld; + scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 1); + thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); + thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); + + LEPT_FREE(lineb); + return pixd; +} + + +/*! + * \brief pixScaleGray2xLIDither() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does 2x upscale on pixs, using linear interpolation,
+ *          followed by Floyd-Steinberg dithering to binary.
+ *      (2) Buffers are used to avoid making a large grayscale image.
+ *          ~ Two line buffers are used for the src, required for the 2x
+ *            LI upscale.
+ *          ~ Three line buffers are used for the intermediate image.
+ *            Two are filled with each 2xLI row operation; the third is
+ *            needed because the upscale and dithering ops are out of sync.
+ * 
+ */ +PIX * +pixScaleGray2xLIDither(PIX *pixs) +{ +l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; +l_uint32 *datas, *datad; +l_uint32 *lined; +l_uint32 *lineb = NULL; /* 2 intermediate buffer lines */ +l_uint32 *linebp = NULL; /* 1 intermediate buffer line */ +l_uint32 *bufs = NULL; /* 2 source buffer lines */ +PIX *pixd = NULL; + + PROCNAME("pixScaleGray2xLIDither"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = 2 * ws; + hd = 2 * hs; + hsm = hs - 1; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Make line buffers for 2 lines of src image */ + if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) + return (PIX *)ERROR_PTR("bufs not made", procName, NULL); + + /* Make line buffer for 2 lines of virtual intermediate image */ + wplb = (wd + 3) / 4; + if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) { + L_ERROR("lineb not made\n", procName); + goto cleanup; + } + + /* Make line buffer for 1 line of virtual intermediate image */ + if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb, sizeof(l_uint32))) == NULL) { + L_ERROR("linebp not made\n", procName); + goto cleanup; + } + + /* Make dest binary image */ + if ((pixd = pixCreate(wd, hd, 1)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup; + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 2.0, 2.0); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + /* Start with the first src and the first dest line */ + memcpy(bufs, datas, 4 * wpls); /* first src line */ + memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ + scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ + lined = datad; + ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* 1st d line */ + + /* Do all but last src line */ + for (i = 1; i < hsm; i++) { + memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ + memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); + memcpy(linebp, lineb + wplb, 4 * wplb); + scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ + lined = datad + 2 * i * wpld; + ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* odd dest line */ + ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* even dest line */ + } + + /* Do the last src line and the last 3 dest lines */ + memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ + memcpy(linebp, lineb + wplb, 4 * wplb); /* 1 i line */ + scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 2 i lines */ + ditherToBinaryLineLow(lined + wpld, wd, linebp, lineb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* odd dest line */ + ditherToBinaryLineLow(lined + 2 * wpld, wd, lineb, lineb + wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* even dest line */ + ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + wplb, NULL, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); + /* last dest line */ + +cleanup: + LEPT_FREE(bufs); + LEPT_FREE(lineb); + LEPT_FREE(linebp); + return pixd; +} + + +/*------------------------------------------------------------------* + * Scale 4x followed by binarization * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleGray4xLIThresh() + * + * \param[in] pixs 8 bpp + * \param[in] thresh between 0 and 256 + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does 4x upscale on pixs, using linear interpolation,
+ *          followed by thresholding to binary.
+ *      (2) Buffers are used to avoid making a large grayscale image.
+ *      (3) If a full 4x expanded grayscale image can be kept in memory,
+ *          this function is only about 10% faster than separately doing
+ *          a linear interpolation to a large grayscale image, followed
+ *          by thresholding to binary.
+ * 
+ */ +PIX * +pixScaleGray4xLIThresh(PIX *pixs, + l_int32 thresh) +{ +l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; +l_uint32 *datas, *datad, *lines, *lined, *lineb; +PIX *pixd; + + PROCNAME("pixScaleGray4xLIThresh"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + if (thresh < 0 || thresh > 256) + return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = 4 * ws; + hd = 4 * hs; + hsm = hs - 1; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Make line buffer for 4 lines of virtual intermediate image */ + wplb = (wd + 3) / 4; + if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) + return (PIX *)ERROR_PTR("lineb not made", procName, NULL); + + /* Make dest binary image */ + if ((pixd = pixCreate(wd, hd, 1)) == NULL) { + LEPT_FREE(lineb); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 4.0, 4.0); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + /* Do all but last src line */ + for (i = 0; i < hsm; i++) { + lines = datas + i * wpls; + lined = datad + 4 * i * wpld; /* do 4 dest lines at a time */ + scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 0); + for (j = 0; j < 4; j++) { + thresholdToBinaryLineLow(lined + j * wpld, wd, + lineb + j * wplb, 8, thresh); + } + } + + /* Do last src line */ + lines = datas + hsm * wpls; + lined = datad + 4 * hsm * wpld; + scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 1); + for (j = 0; j < 4; j++) { + thresholdToBinaryLineLow(lined + j * wpld, wd, + lineb + j * wplb, 8, thresh); + } + + LEPT_FREE(lineb); + return pixd; +} + + +/*! + * \brief pixScaleGray4xLIDither() + * + * \param[in] pixs 8 bpp, not cmapped + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does 4x upscale on pixs, using linear interpolation,
+ *          followed by Floyd-Steinberg dithering to binary.
+ *      (2) Buffers are used to avoid making a large grayscale image.
+ *          ~ Two line buffers are used for the src, required for the
+ *            4xLI upscale.
+ *          ~ Five line buffers are used for the intermediate image.
+ *            Four are filled with each 4xLI row operation; the fifth
+ *            is needed because the upscale and dithering ops are
+ *            out of sync.
+ *      (3) If a full 4x expanded grayscale image can be kept in memory,
+ *          this function is only about 5% faster than separately doing
+ *          a linear interpolation to a large grayscale image, followed
+ *          by error-diffusion dithering to binary.
+ * 
+ */ +PIX * +pixScaleGray4xLIDither(PIX *pixs) +{ +l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; +l_uint32 *datas, *datad; +l_uint32 *lined; +l_uint32 *lineb = NULL; /* 4 intermediate buffer lines */ +l_uint32 *linebp = NULL; /* 1 intermediate buffer line */ +l_uint32 *bufs = NULL; /* 2 source buffer lines */ +PIX *pixd = NULL; + + PROCNAME("pixScaleGray4xLIDither"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = 4 * ws; + hd = 4 * hs; + hsm = hs - 1; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + /* Make line buffers for 2 lines of src image */ + if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) + return (PIX *)ERROR_PTR("bufs not made", procName, NULL); + + /* Make line buffer for 4 lines of virtual intermediate image */ + wplb = (wd + 3) / 4; + if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) { + L_ERROR("lineb not made\n", procName); + goto cleanup; + } + + /* Make line buffer for 1 line of virtual intermediate image */ + if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb, sizeof(l_uint32))) == NULL) { + L_ERROR("linebp not made\n", procName); + goto cleanup; + } + + /* Make dest binary image */ + if ((pixd = pixCreate(wd, hd, 1)) == NULL) { + L_ERROR("pixd not made\n", procName); + goto cleanup; + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 4.0, 4.0); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + + /* Start with the first src and the first 3 dest lines */ + memcpy(bufs, datas, 4 * wpls); /* first src line */ + memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ + scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ + lined = datad; + for (j = 0; j < 3; j++) { /* first 3 d lines of Q */ + ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, + lineb + (j + 1) * wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + } + + /* Do all but last src line */ + for (i = 1; i < hsm; i++) { + memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ + memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); + memcpy(linebp, lineb + 3 * wplb, 4 * wplb); + scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ + lined = datad + 4 * i * wpld; + ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* 4th dest line of Q */ + for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ + ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, + lineb + (j + 1) * wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + } + } + + /* Do the last src line and the last 5 dest lines */ + memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ + memcpy(linebp, lineb + 3 * wplb, 4 * wplb); /* 1 b line */ + scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 4 b lines */ + lined = datad + 4 * hsm * wpld; + ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + /* 4th dest line of Q */ + for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ + ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, + lineb + (j + 1) * wplb, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); + } + /* And finally, the last dest line */ + ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + 3 * wplb, NULL, + DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); + +cleanup: + LEPT_FREE(bufs); + LEPT_FREE(lineb); + LEPT_FREE(linebp); + return pixd; +} + + +/*------------------------------------------------------------------* + * Scaling by closest pixel sampling * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleBySampling() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp + * \param[in] scalex must be > 0.0 + * \param[in] scaley must be > 0.0 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function samples from the source without
+ *          filtering.  As a result, aliasing will occur for
+ *          subsampling (%scalex and/or %scaley < 1.0).
+ *      (2) If %scalex == 1.0 and %scaley == 1.0, returns a copy.
+ * 
+ */ +PIX * +pixScaleBySampling(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, d, wpls, wd, hd, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleBySampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); + if (scalex == 1.0 && scaley == 1.0) + return pixCopy(NULL, pixs); + if ((d = pixGetDepth(pixs)) == 1) + return pixScaleBinary(pixs, scalex, scaley); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if ((pixd = pixCreate(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixCopySpp(pixd, pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleBySamplingLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls); + if (d == 32 && pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); + + return pixd; +} + + +/*! + * \brief pixScaleBySamplingToSize() + * + * \param[in] pixs 1, 2, 4, 8, 16 and 32 bpp + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This guarantees that the output scaled image has the
+ *          dimension(s) you specify.
+ *           ~ To specify the width with isotropic scaling, set %hd = 0.
+ *           ~ To specify the height with isotropic scaling, set %wd = 0.
+ *           ~ If both %wd and %hd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *           ~ It is an error to set both %wd and %hd to 0.
+ * 
+ */ +PIX * +pixScaleBySamplingToSize(PIX *pixs, + l_int32 wd, + l_int32 hd) +{ +l_int32 w, h; +l_float32 scalex, scaley; + + PROCNAME("pixScaleBySamplingToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (wd <= 0 && hd <= 0) + return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (wd <= 0) { + scaley = (l_float32)hd / (l_float32)h; + scalex = scaley; + } else if (hd <= 0) { + scalex = (l_float32)wd / (l_float32)w; + scaley = scalex; + } else { + scalex = (l_float32)wd / (l_float32)w; + scaley = (l_float32)hd / (l_float32)h; + } + + return pixScaleBySampling(pixs, scalex, scaley); +} + + +/*! + * \brief pixScaleByIntSampling() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp + * \param[in] factor integer subsampling + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) Simple interface to pixScaleBySampling(), for
+ *          isotropic integer reduction.
+ *      (2) If %factor == 1, returns a copy.
+ * 
+ */ +PIX * +pixScaleByIntSampling(PIX *pixs, + l_int32 factor) +{ +l_float32 scale; + + PROCNAME("pixScaleByIntSampling"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor <= 1) { + if (factor < 1) + L_ERROR("factor must be >= 1; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + scale = 1. / (l_float32)factor; + return pixScaleBySampling(pixs, scale, scale); +} + + +/*------------------------------------------------------------------* + * Fast integer factor subsampling RGB to gray * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleRGBToGrayFast() + * + * \param[in] pixs 32 bpp rgb + * \param[in] factor integer reduction factor >= 1 + * \param[in] color one of COLOR_RED, COLOR_GREEN, COLOR_BLUE + * \return pixd 8 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does simultaneous subsampling by an integer factor and
+ *          extraction of the color from the RGB pix.
+ *      (2) It is designed for maximum speed, and is used for quickly
+ *          generating a downsized grayscale image from a higher resolution
+ *          RGB image.  This would typically be used for image analysis.
+ *      (3) The standard color byte order (RGBA) is assumed.
+ * 
+ */ +PIX * +pixScaleRGBToGrayFast(PIX *pixs, + l_int32 factor, + l_int32 color) +{ +l_int32 byteval, shift; +l_int32 i, j, ws, hs, wd, hd, wpls, wpld; +l_uint32 *datas, *words, *datad, *lined; +l_float32 scale; +PIX *pixd; + + PROCNAME("pixScaleRGBToGrayFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + + if (color == COLOR_RED) + shift = L_RED_SHIFT; + else if (color == COLOR_GREEN) + shift = L_GREEN_SHIFT; + else if (color == COLOR_BLUE) + shift = L_BLUE_SHIFT; + else + return (PIX *)ERROR_PTR("invalid color", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + wd = ws / factor; + hd = hs / factor; + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + scale = 1. / (l_float32) factor; + pixScaleResolution(pixd, scale, scale); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < hd; i++) { + words = datas + i * factor * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++, words += factor) { + byteval = ((*words) >> shift) & 0xff; + SET_DATA_BYTE(lined, j, byteval); + } + } + + return pixd; +} + + +/*! + * \brief pixScaleRGBToBinaryFast() + * + * \param[in] pixs 32 bpp RGB + * \param[in] factor integer reduction factor >= 1 + * \param[in] thresh binarization threshold + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does simultaneous subsampling by an integer factor and
+ *          conversion from RGB to gray to binary.
+ *      (2) It is designed for maximum speed, and is used for quickly
+ *          generating a downsized binary image from a higher resolution
+ *          RGB image.  This would typically be used for image analysis.
+ *      (3) It uses the green channel to represent the RGB pixel intensity.
+ * 
+ */ +PIX * +pixScaleRGBToBinaryFast(PIX *pixs, + l_int32 factor, + l_int32 thresh) +{ +l_int32 byteval; +l_int32 i, j, ws, hs, wd, hd, wpls, wpld; +l_uint32 *datas, *words, *datad, *lined; +l_float32 scale; +PIX *pixd; + + PROCNAME("pixScaleRGBToBinaryFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + wd = ws / factor; + hd = hs / factor; + if ((pixd = pixCreate(wd, hd, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + scale = 1. / (l_float32) factor; + pixScaleResolution(pixd, scale, scale); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < hd; i++) { + words = datas + i * factor * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++, words += factor) { + byteval = ((*words) >> L_GREEN_SHIFT) & 0xff; + if (byteval < thresh) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*! + * \brief pixScaleGrayToBinaryFast() + * + * \param[in] pixs 8 bpp grayscale + * \param[in] factor integer reduction factor >= 1 + * \param[in] thresh binarization threshold + * \return pixd 1 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This does simultaneous subsampling by an integer factor and
+ *          thresholding from gray to binary.
+ *      (2) It is designed for maximum speed, and is used for quickly
+ *          generating a downsized binary image from a higher resolution
+ *          gray image.  This would typically be used for image analysis.
+ * 
+ */ +PIX * +pixScaleGrayToBinaryFast(PIX *pixs, + l_int32 factor, + l_int32 thresh) +{ +l_int32 byteval; +l_int32 i, j, ws, hs, wd, hd, wpls, wpld, sj; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 scale; +PIX *pixd; + + PROCNAME("pixScaleGrayToBinaryFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (factor < 1) + return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("depth not 8 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + + wd = ws / factor; + hd = hs / factor; + if ((pixd = pixCreate(wd, hd, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + scale = 1. / (l_float32) factor; + pixScaleResolution(pixd, scale, scale); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < hd; i++) { + lines = datas + i * factor * wpls; + lined = datad + i * wpld; + for (j = 0, sj = 0; j < wd; j++, sj += factor) { + byteval = GET_DATA_BYTE(lines, sj); + if (byteval < thresh) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*------------------------------------------------------------------* + * Downscaling with (antialias) smoothing * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleSmooth() + * + * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap + * \param[in] scalex must be < 0.7 + * \param[in] scaley must be < 0.7 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function should only be used when the scale factors are less
+ *          than or equal to 0.7 (i.e., more than about 1.42x reduction).
+ *          If either scale factor is larger than 0.7, we issue a warning
+ *          and call pixScaleGeneral(), which will invoke linear
+ *          interpolation without sharpening.
+ *      (2) This works only on 2, 4, 8 and 32 bpp images, and if there is
+ *          a colormap, it is removed by converting to RGB.  In other
+ *          cases, we issue a warning and call pixScaleGeneral().
+ *      (3) It does simple (flat filter) convolution, with a filter size
+ *          commensurate with the amount of reduction, to avoid antialiasing.
+ *      (4) It does simple subsampling after smoothing, which is appropriate
+ *          for this range of scaling.  Linear interpolation gives essentially
+ *          the same result with more computation for these scale factors,
+ *          so we don't use it.
+ *      (5) The result is the same as doing a full block convolution followed by
+ *          subsampling, but this is faster because the results of the block
+ *          convolution are only computed at the subsampling locations.
+ *          In fact, the computation time is approximately independent of
+ *          the scale factor, because the convolution kernel is adjusted
+ *          so that each source pixel is summed approximately once.
+ * 
+ */ +PIX * +pixScaleSmooth(PIX *pix, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, d, wd, hd, wpls, wpld, isize; +l_uint32 *datas, *datad; +l_float32 minscale, size; +PIX *pixs, *pixd; + + PROCNAME("pixScaleSmooth"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + if (scalex >= 0.7 || scaley >= 0.7) { + L_WARNING("scaling factor not < 0.7; do regular scaling\n", procName); + return pixScaleGeneral(pix, scalex, scaley, 0.0, 0); + } + + /* Remove colormap if necessary. + * If 2 bpp or 4 bpp gray, convert to 8 bpp */ + d = pixGetDepth(pix); + if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { + L_WARNING("pix has colormap; removing\n", procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixs); + } else if (d == 2 || d == 4) { + pixs = pixConvertTo8(pix, FALSE); + d = 8; + } else { + pixs = pixClone(pix); + } + + if (d != 8 && d != 32) { /* d == 1 or d == 16 */ + L_WARNING("depth not 8 or 32 bpp; do regular scaling\n", procName); + pixDestroy(&pixs); + return pixScaleGeneral(pix, scalex, scaley, 0.0, 0); + } + + /* If 1.42 < 1/minscale < 2.5, use isize = 2 + * If 2.5 =< 1/minscale < 3.5, use isize = 3, etc. + * Under no conditions use isize < 2 */ + minscale = L_MIN(scalex, scaley); + size = 1.0 / minscale; /* ideal filter full width */ + isize = L_MAX(2, (l_int32)(size + 0.5)); + + pixGetDimensions(pixs, &ws, &hs, NULL); + if ((ws < isize) || (hs < isize)) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + } + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if (wd < 1 || hd < 1) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixd too small", procName, NULL); + } + if ((pixd = pixCreate(wd, hd, d)) == NULL) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleSmoothLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls, isize); + if (d == 32 && pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); + + pixDestroy(&pixs); + return pixd; +} + + +/*! + * \brief pixScaleSmoothToSize() + * + * \param[in] pixs 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes in pixScaleSmooth().
+ *      (2) The output scaled image has the dimension(s) you specify:
+ *          * To specify the width with isotropic scaling, set %hd = 0.
+ *          * To specify the height with isotropic scaling, set %wd = 0.
+ *          * If both %wd and %hd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *          * It is an error to set both %wd and %hd to 0.
+ * 
+ */ +PIX * +pixScaleSmoothToSize(PIX *pixs, + l_int32 wd, + l_int32 hd) +{ +l_int32 w, h; +l_float32 scalex, scaley; + + PROCNAME("pixScaleSmoothToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (wd <= 0 && hd <= 0) + return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (wd <= 0) { + scaley = (l_float32)hd / (l_float32)h; + scalex = scaley; + } else if (hd <= 0) { + scalex = (l_float32)wd / (l_float32)w; + scaley = scalex; + } else { + scalex = (l_float32)wd / (l_float32)w; + scaley = (l_float32)hd / (l_float32)h; + } + + return pixScaleSmooth(pixs, scalex, scaley); +} + + +/*! + * \brief pixScaleRGBToGray2() + * + * \param[in] pixs 32 bpp rgb + * \param[in] rwt, gwt, bwt must sum to 1.0 + * \return pixd, 8 bpp, 2x reduced, or NULL on error + */ +PIX * +pixScaleRGBToGray2(PIX *pixs, + l_float32 rwt, + l_float32 gwt, + l_float32 bwt) +{ +l_int32 wd, hd, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleRGBToGray2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 32) + return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); + if (rwt + gwt + bwt < 0.98 || rwt + gwt + bwt > 1.02) + return (PIX *)ERROR_PTR("sum of wts should be 1.0", procName, NULL); + + wd = pixGetWidth(pixs) / 2; + hd = pixGetHeight(pixs) / 2; + wpls = pixGetWpl(pixs); + datas = pixGetData(pixs); + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyResolution(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixScaleResolution(pixd, 0.5, 0.5); + wpld = pixGetWpl(pixd); + datad = pixGetData(pixd); + scaleRGBToGray2Low(datad, wd, hd, wpld, datas, wpls, rwt, gwt, bwt); + return pixd; +} + + +/*------------------------------------------------------------------* + * Downscaling with (antialias) area mapping * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleAreaMap() + * + * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap + * \param[in] scalex must be <= 0.7 + * \param[in] scaley must be <= 0.7 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function should only be used when the scale factors are less
+ *          than or equal to 0.7 (i.e., more than about 1.42x reduction).
+ *          If either scale factor is larger than 0.7, we issue a warning
+ *          and call pixScaleGeneral(), which will invoke linear
+ *          interpolation without sharpening.
+ *      (2) This works only on 2, 4, 8 and 32 bpp images.  If there is
+ *          a colormap, it is removed by converting to RGB.  In other
+ *          cases, we issue a warning and call pixScaleGeneral().
+ *      (3) This is faster than pixScale() because it does not do sharpening.
+ *      (4) It does a relatively expensive area mapping computation, to
+ *          avoid antialiasing.  It is about 2x slower than pixScaleSmooth(),
+ *          but the results are much better on fine text.
+ *      (5) This is typically about 20% faster for the special cases of
+ *          2x, 4x, 8x and 16x reduction.
+ *      (6) Surprisingly, there is no speedup (and a slight quality
+ *          impairment) if you do as many successive 2x reductions as
+ *          possible, ending with a reduction with a scale factor larger
+ *          than 0.5.
+ * 
+ */ +PIX * +pixScaleAreaMap(PIX *pix, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, d, wd, hd, wpls, wpld; +l_uint32 *datas, *datad; +l_float32 maxscale; +PIX *pixs, *pixd, *pixt1, *pixt2, *pixt3; + + PROCNAME("pixScaleAreaMap"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + d = pixGetDepth(pix); + if (d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", procName, NULL); + maxscale = L_MAX(scalex, scaley); + if (maxscale >= 0.7) { + L_WARNING("scaling factors not < 0.7; do regular scaling\n", procName); + return pixScaleGeneral(pix, scalex, scaley, 0.0, 0); + } + + /* Special cases: 2x, 4x, 8x, 16x reduction */ + if (scalex == 0.5 && scaley == 0.5) + return pixScaleAreaMap2(pix); + if (scalex == 0.25 && scaley == 0.25) { + pixt1 = pixScaleAreaMap2(pix); + pixd = pixScaleAreaMap2(pixt1); + pixDestroy(&pixt1); + return pixd; + } + if (scalex == 0.125 && scaley == 0.125) { + pixt1 = pixScaleAreaMap2(pix); + pixt2 = pixScaleAreaMap2(pixt1); + pixd = pixScaleAreaMap2(pixt2); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + return pixd; + } + if (scalex == 0.0625 && scaley == 0.0625) { + pixt1 = pixScaleAreaMap2(pix); + pixt2 = pixScaleAreaMap2(pixt1); + pixt3 = pixScaleAreaMap2(pixt2); + pixd = pixScaleAreaMap2(pixt3); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + pixDestroy(&pixt3); + return pixd; + } + + /* Remove colormap if necessary. + * If 2 bpp or 4 bpp gray, convert to 8 bpp */ + if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { + L_WARNING("pix has colormap; removing\n", procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixs); + } else if (d == 2 || d == 4) { + pixs = pixConvertTo8(pix, FALSE); + d = 8; + } else { + pixs = pixClone(pix); + } + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if (wd < 1 || hd < 1) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixd too small", procName, NULL); + } + if ((pixd = pixCreate(wd, hd, d)) == NULL) { + pixDestroy(&pixs); + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + if (d == 8) { + scaleGrayAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); + } else { /* RGB, d == 32 */ + scaleColorAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); + } + + pixDestroy(&pixs); + return pixd; +} + + +/*! + * \brief pixScaleAreaMap2() + * + * \param[in] pix 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function does an area mapping (average) for 2x
+ *          reduction.
+ *      (2) This works only on 2, 4, 8 and 32 bpp images.  If there is
+ *          a colormap, it is removed by converting to RGB.
+ *      (3) Speed on 3 GHz processor:
+ *             Color: 160 Mpix/sec
+ *             Gray: 700 Mpix/sec
+ *          This contrasts with the speed of the general pixScaleAreaMap():
+ *             Color: 35 Mpix/sec
+ *             Gray: 50 Mpix/sec
+ *      (4) From (3), we see that this special function is about 4.5x
+ *          faster for color and 14x faster for grayscale
+ *      (5) Consequently, pixScaleAreaMap2() is incorporated into the
+ *          general area map scaling function, for the special cases
+ *          of 2x, 4x, 8x and 16x reduction.
+ * 
+ */ +PIX * +pixScaleAreaMap2(PIX *pix) +{ +l_int32 wd, hd, d, wpls, wpld; +l_uint32 *datas, *datad; +PIX *pixs, *pixd; + + PROCNAME("pixScaleAreaMap2"); + + if (!pix) + return (PIX *)ERROR_PTR("pix not defined", procName, NULL); + d = pixGetDepth(pix); + if (d != 2 && d != 4 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", procName, NULL); + + /* Remove colormap if necessary. + * If 2 bpp or 4 bpp gray, convert to 8 bpp */ + if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { + L_WARNING("pix has colormap; removing\n", procName); + pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); + d = pixGetDepth(pixs); + } else if (d == 2 || d == 4) { + pixs = pixConvertTo8(pix, FALSE); + d = 8; + } else { + pixs = pixClone(pix); + } + + wd = pixGetWidth(pixs) / 2; + hd = pixGetHeight(pixs) / 2; + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + pixd = pixCreate(wd, hd, d); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.5, 0.5); + scaleAreaMapLow2(datad, wd, hd, wpld, datas, d, wpls); + if (pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, 0.5, 0.5); + pixDestroy(&pixs); + return pixd; +} + + +/*! + * \brief pixScaleAreaMapToSize() + * + * \param[in] pixs 2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap + * \param[in] wd target width; use 0 if using height as target + * \param[in] hd target height; use 0 if using width as target + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes in pixScaleAreaMap().
+ *      (2) The output scaled image has the dimension(s) you specify:
+ *          * To specify the width with isotropic scaling, set %hd = 0.
+ *          * To specify the height with isotropic scaling, set %wd = 0.
+ *          * If both %wd and %hd are specified, the image is scaled
+ *             (in general, anisotropically) to that size.
+ *          * It is an error to set both %wd and %hd to 0.
+ * 
+ */ +PIX * +pixScaleAreaMapToSize(PIX *pixs, + l_int32 wd, + l_int32 hd) +{ +l_int32 w, h; +l_float32 scalex, scaley; + + PROCNAME("pixScaleAreaMapToSize"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (wd <= 0 && hd <= 0) + return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if (wd <= 0) { + scaley = (l_float32)hd / (l_float32)h; + scalex = scaley; + } else if (hd <= 0) { + scalex = (l_float32)wd / (l_float32)w; + scaley = scalex; + } else { + scalex = (l_float32)wd / (l_float32)w; + scaley = (l_float32)hd / (l_float32)h; + } + + return pixScaleAreaMap(pixs, scalex, scaley); +} + + +/*------------------------------------------------------------------* + * Binary scaling by closest pixel sampling * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleBinary() + * + * \param[in] pixs 1 bpp + * \param[in] scalex must be > 0.0 + * \param[in] scaley must be > 0.0 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This function samples from the source without
+ *          filtering.  As a result, aliasing will occur for
+ *          subsampling (scalex and scaley < 1.0).
+ * 
+ */ +PIX * +pixScaleBinary(PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +l_int32 ws, hs, wpls, wd, hd, wpld; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleBinary"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); + if (scalex == 1.0 && scaley == 1.0) + return pixCopy(NULL, pixs); + + pixGetDimensions(pixs, &ws, &hs, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + wd = (l_int32)(scalex * (l_float32)ws + 0.5); + hd = (l_int32)(scaley * (l_float32)hs + 0.5); + if ((pixd = pixCreate(wd, hd, 1)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyColormap(pixd, pixs); + pixCopyText(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, scalex, scaley); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + scaleBinaryLow(datad, wd, hd, wpld, datas, ws, hs, wpls); + return pixd; +} + + +/* ================================================================ * + * Low level static functions * + * ================================================================ */ + +/*------------------------------------------------------------------* + * General linear interpolated color scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleColorLILow() + * + * We choose to divide each pixel into 16 x 16 sub-pixels. + * Linear interpolation is equivalent to finding the + * fractional area (i.e., number of sub-pixels divided + * by 256) associated with each of the four nearest src pixels, + * and weighting each pixel value by this fractional area. + * + * P3 speed is about 7 x 10^6 dst pixels/sec/GHz + */ +static void +scaleColorLILow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, j, wm2, hm2; +l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ +l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ +l_int32 v00r, v01r, v10r, v11r, v00g, v01g, v10g, v11g; +l_int32 v00b, v01b, v10b, v11b, area00, area01, area10, area11; +l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; +l_uint32 *lines, *lined; +l_float32 scx, scy; + + /* (scx, scy) are scaling factors that are applied to the + * dest coords to get the corresponding src coords. + * We need them because we iterate over dest pixels + * and must find the corresponding set of src pixels. */ + scx = 16. * (l_float32)ws / (l_float32)wd; + scy = 16. * (l_float32)hs / (l_float32)hd; + wm2 = ws - 2; + hm2 = hs - 2; + + /* Iterate over the destination pixels */ + for (i = 0; i < hd; i++) { + ypm = (l_int32)(scy * (l_float32)i); + yp = ypm >> 4; + yf = ypm & 0x0f; + lined = datad + i * wpld; + lines = datas + yp * wpls; + for (j = 0; j < wd; j++) { + xpm = (l_int32)(scx * (l_float32)j); + xp = xpm >> 4; + xf = xpm & 0x0f; + + /* Do bilinear interpolation. This is a simple + * generalization of the calculation in scaleGrayLILow(). + * Without this, we could simply subsample: + * *(lined + j) = *(lines + xp); + * which is faster but gives lousy results! */ + pixels1 = *(lines + xp); + + if (xp > wm2 || yp > hm2) { + if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ + pixels2 = *(lines + xp + 1); + pixels3 = pixels1; + pixels4 = pixels2; + } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ + pixels2 = pixels1; + pixels3 = *(lines + wpls + xp); + pixels4 = pixels3; + } else { /* pixels at LR corner */ + pixels4 = pixels3 = pixels2 = pixels1; + } + } else { + pixels2 = *(lines + xp + 1); + pixels3 = *(lines + wpls + xp); + pixels4 = *(lines + wpls + xp + 1); + } + + area00 = (16 - xf) * (16 - yf); + area10 = xf * (16 - yf); + area01 = (16 - xf) * yf; + area11 = xf * yf; + v00r = area00 * ((pixels1 >> L_RED_SHIFT) & 0xff); + v00g = area00 * ((pixels1 >> L_GREEN_SHIFT) & 0xff); + v00b = area00 * ((pixels1 >> L_BLUE_SHIFT) & 0xff); + v10r = area10 * ((pixels2 >> L_RED_SHIFT) & 0xff); + v10g = area10 * ((pixels2 >> L_GREEN_SHIFT) & 0xff); + v10b = area10 * ((pixels2 >> L_BLUE_SHIFT) & 0xff); + v01r = area01 * ((pixels3 >> L_RED_SHIFT) & 0xff); + v01g = area01 * ((pixels3 >> L_GREEN_SHIFT) & 0xff); + v01b = area01 * ((pixels3 >> L_BLUE_SHIFT) & 0xff); + v11r = area11 * ((pixels4 >> L_RED_SHIFT) & 0xff); + v11g = area11 * ((pixels4 >> L_GREEN_SHIFT) & 0xff); + v11b = area11 * ((pixels4 >> L_BLUE_SHIFT) & 0xff); + pixel = (((v00r + v10r + v01r + v11r + 128) << 16) & 0xff000000) | + (((v00g + v10g + v01g + v11g + 128) << 8) & 0x00ff0000) | + ((v00b + v10b + v01b + v11b + 128) & 0x0000ff00); + *(lined + j) = pixel; + } + } +} + + +/*------------------------------------------------------------------* + * General linear interpolated gray scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleGrayLILow() + * + * We choose to divide each pixel into 16 x 16 sub-pixels. + * Linear interpolation is equivalent to finding the + * fractional area (i.e., number of sub-pixels divided + * by 256) associated with each of the four nearest src pixels, + * and weighting each pixel value by this fractional area. + */ +static void +scaleGrayLILow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, j, wm2, hm2; +l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ +l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ +l_int32 v00, v01, v10, v11, v00_val, v01_val, v10_val, v11_val; +l_uint8 val; +l_uint32 *lines, *lined; +l_float32 scx, scy; + + /* (scx, scy) are scaling factors that are applied to the + * dest coords to get the corresponding src coords. + * We need them because we iterate over dest pixels + * and must find the corresponding set of src pixels. */ + scx = 16. * (l_float32)ws / (l_float32)wd; + scy = 16. * (l_float32)hs / (l_float32)hd; + wm2 = ws - 2; + hm2 = hs - 2; + + /* Iterate over the destination pixels */ + for (i = 0; i < hd; i++) { + ypm = (l_int32)(scy * (l_float32)i); + yp = ypm >> 4; + yf = ypm & 0x0f; + lined = datad + i * wpld; + lines = datas + yp * wpls; + for (j = 0; j < wd; j++) { + xpm = (l_int32)(scx * (l_float32)j); + xp = xpm >> 4; + xf = xpm & 0x0f; + + /* Do bilinear interpolation. Without this, we could + * simply subsample: + * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); + * which is faster but gives lousy results! */ + v00_val = GET_DATA_BYTE(lines, xp); + if (xp > wm2 || yp > hm2) { + if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ + v01_val = v00_val; + v10_val = GET_DATA_BYTE(lines, xp + 1); + v11_val = v10_val; + } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ + v01_val = GET_DATA_BYTE(lines + wpls, xp); + v10_val = v00_val; + v11_val = v01_val; + } else { /* pixels at LR corner */ + v10_val = v01_val = v11_val = v00_val; + } + } else { + v10_val = GET_DATA_BYTE(lines, xp + 1); + v01_val = GET_DATA_BYTE(lines + wpls, xp); + v11_val = GET_DATA_BYTE(lines + wpls, xp + 1); + } + + v00 = (16 - xf) * (16 - yf) * v00_val; + v10 = xf * (16 - yf) * v10_val; + v01 = (16 - xf) * yf * v01_val; + v11 = xf * yf * v11_val; + + val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); + SET_DATA_BYTE(lined, j, val); + } + } +} + + +/*------------------------------------------------------------------* + * 2x linear interpolated color scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleColor2xLILow() + * + * This is a special case of 2x expansion by linear + * interpolation. Each src pixel contains 4 dest pixels. + * The 4 dest pixels in src pixel 1 are numbered at + * their UL corners. The 4 dest pixels in src pixel 1 + * are related to that src pixel and its 3 neighboring + * src pixels as follows: + * + * 1-----2-----|-----|-----| + * | | | | | + * | | | | | + * src 1 --> 3-----4-----| | | <-- src 2 + * | | | | | + * | | | | | + * |-----|-----|-----|-----| + * | | | | | + * | | | | | + * src 3 --> | | | | | <-- src 4 + * | | | | | + * | | | | | + * |-----|-----|-----|-----| + * + * dest src + * ---- --- + * dp1 = sp1 + * dp2 = (sp1 + sp2) / 2 + * dp3 = (sp1 + sp3) / 2 + * dp4 = (sp1 + sp2 + sp3 + sp4) / 4 + * + * We iterate over the src pixels, and unroll the calculation + * for each set of 4 dest pixels corresponding to that src + * pixel, caching pixels for the next src pixel whenever possible. + * The method is exactly analogous to the one we use for + * scaleGray2xLILow() and its line version. + * + * P3 speed is about 5 x 10^7 dst pixels/sec/GHz + */ +static void +scaleColor2xLILow(l_uint32 *datad, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, hsm; +l_uint32 *lines, *lined; + + hsm = hs - 1; + + /* We're taking 2 src and 2 dest lines at a time, + * and for each src line, we're computing 2 dest lines. + * Call these 2 dest lines: destline1 and destline2. + * The first src line is used for destline 1. + * On all but the last src line, both src lines are + * used in the linear interpolation for destline2. + * On the last src line, both destline1 and destline2 + * are computed using only that src line (because there + * isn't a lower src line). */ + + /* iterate over all but the last src line */ + for (i = 0; i < hsm; i++) { + lines = datas + i * wpls; + lined = datad + 2 * i * wpld; + scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 0); + } + + /* last src line */ + lines = datas + hsm * wpls; + lined = datad + 2 * hsm * wpld; + scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 1); +} + + +/*! + * \brief scaleColor2xLILineLow() + * + * \param[in] lined ptr to top destline, to be made from current src line + * \param[in] wpld + * \param[in] lines ptr to current src line + * \param[in] ws + * \param[in] wpls + * \param[in] lastlineflag 1 if last src line; 0 otherwise + * \return void + */ +static void +scaleColor2xLILineLow(l_uint32 *lined, + l_int32 wpld, + l_uint32 *lines, + l_int32 ws, + l_int32 wpls, + l_int32 lastlineflag) +{ +l_int32 j, jd, wsm; +l_uint32 rval1, rval2, rval3, rval4, gval1, gval2, gval3, gval4; +l_uint32 bval1, bval2, bval3, bval4; +l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; +l_uint32 *linesp, *linedp; + + wsm = ws - 1; + + if (lastlineflag == 0) { + linesp = lines + wpls; + linedp = lined + wpld; + pixels1 = *lines; + pixels3 = *linesp; + + /* initialize with v(2) and v(4) */ + rval2 = pixels1 >> 24; + gval2 = (pixels1 >> 16) & 0xff; + bval2 = (pixels1 >> 8) & 0xff; + rval4 = pixels3 >> 24; + gval4 = (pixels3 >> 16) & 0xff; + bval4 = (pixels3 >> 8) & 0xff; + + for (j = 0, jd = 0; j < wsm; j++, jd += 2) { + /* shift in previous src values */ + rval1 = rval2; + gval1 = gval2; + bval1 = bval2; + rval3 = rval4; + gval3 = gval4; + bval3 = bval4; + /* get new src values */ + pixels2 = *(lines + j + 1); + pixels4 = *(linesp + j + 1); + rval2 = pixels2 >> 24; + gval2 = (pixels2 >> 16) & 0xff; + bval2 = (pixels2 >> 8) & 0xff; + rval4 = pixels4 >> 24; + gval4 = (pixels4 >> 16) & 0xff; + bval4 = (pixels4 >> 8) & 0xff; + /* save dest values */ + pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); + *(lined + jd) = pixel; /* pix 1 */ + pixel = ((((rval1 + rval2) << 23) & 0xff000000) | + (((gval1 + gval2) << 15) & 0x00ff0000) | + (((bval1 + bval2) << 7) & 0x0000ff00)); + *(lined + jd + 1) = pixel; /* pix 2 */ + pixel = ((((rval1 + rval3) << 23) & 0xff000000) | + (((gval1 + gval3) << 15) & 0x00ff0000) | + (((bval1 + bval3) << 7) & 0x0000ff00)); + *(linedp + jd) = pixel; /* pix 3 */ + pixel = ((((rval1 + rval2 + rval3 + rval4) << 22) & 0xff000000) | + (((gval1 + gval2 + gval3 + gval4) << 14) & 0x00ff0000) | + (((bval1 + bval2 + bval3 + bval4) << 6) & 0x0000ff00)); + *(linedp + jd + 1) = pixel; /* pix 4 */ + } + /* last src pixel on line */ + rval1 = rval2; + gval1 = gval2; + bval1 = bval2; + rval3 = rval4; + gval3 = gval4; + bval3 = bval4; + pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); + *(lined + 2 * wsm) = pixel; /* pix 1 */ + *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ + pixel = ((((rval1 + rval3) << 23) & 0xff000000) | + (((gval1 + gval3) << 15) & 0x00ff0000) | + (((bval1 + bval3) << 7) & 0x0000ff00)); + *(linedp + 2 * wsm) = pixel; /* pix 3 */ + *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ + } else { /* last row of src pixels: lastlineflag == 1 */ + linedp = lined + wpld; + pixels2 = *lines; + rval2 = pixels2 >> 24; + gval2 = (pixels2 >> 16) & 0xff; + bval2 = (pixels2 >> 8) & 0xff; + for (j = 0, jd = 0; j < wsm; j++, jd += 2) { + rval1 = rval2; + gval1 = gval2; + bval1 = bval2; + pixels2 = *(lines + j + 1); + rval2 = pixels2 >> 24; + gval2 = (pixels2 >> 16) & 0xff; + bval2 = (pixels2 >> 8) & 0xff; + pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); + *(lined + jd) = pixel; /* pix 1 */ + *(linedp + jd) = pixel; /* pix 2 */ + pixel = ((((rval1 + rval2) << 23) & 0xff000000) | + (((gval1 + gval2) << 15) & 0x00ff0000) | + (((bval1 + bval2) << 7) & 0x0000ff00)); + *(lined + jd + 1) = pixel; /* pix 3 */ + *(linedp + jd + 1) = pixel; /* pix 4 */ + } + rval1 = rval2; + gval1 = gval2; + bval1 = bval2; + pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); + *(lined + 2 * wsm) = pixel; /* pix 1 */ + *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ + *(linedp + 2 * wsm) = pixel; /* pix 3 */ + *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ + } +} + + +/*------------------------------------------------------------------* + * 2x linear interpolated gray scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleGray2xLILow() + * + * This is a special case of 2x expansion by linear + * interpolation. Each src pixel contains 4 dest pixels. + * The 4 dest pixels in src pixel 1 are numbered at + * their UL corners. The 4 dest pixels in src pixel 1 + * are related to that src pixel and its 3 neighboring + * src pixels as follows: + * + * 1-----2-----|-----|-----| + * | | | | | + * | | | | | + * src 1 --> 3-----4-----| | | <-- src 2 + * | | | | | + * | | | | | + * |-----|-----|-----|-----| + * | | | | | + * | | | | | + * src 3 --> | | | | | <-- src 4 + * | | | | | + * | | | | | + * |-----|-----|-----|-----| + * + * dest src + * ---- --- + * dp1 = sp1 + * dp2 = (sp1 + sp2) / 2 + * dp3 = (sp1 + sp3) / 2 + * dp4 = (sp1 + sp2 + sp3 + sp4) / 4 + * + * We iterate over the src pixels, and unroll the calculation + * for each set of 4 dest pixels corresponding to that src + * pixel, caching pixels for the next src pixel whenever possible. + */ +static void +scaleGray2xLILow(l_uint32 *datad, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, hsm; +l_uint32 *lines, *lined; + + hsm = hs - 1; + + /* We're taking 2 src and 2 dest lines at a time, + * and for each src line, we're computing 2 dest lines. + * Call these 2 dest lines: destline1 and destline2. + * The first src line is used for destline 1. + * On all but the last src line, both src lines are + * used in the linear interpolation for destline2. + * On the last src line, both destline1 and destline2 + * are computed using only that src line (because there + * isn't a lower src line). */ + + /* iterate over all but the last src line */ + for (i = 0; i < hsm; i++) { + lines = datas + i * wpls; + lined = datad + 2 * i * wpld; + scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 0); + } + + /* last src line */ + lines = datas + hsm * wpls; + lined = datad + 2 * hsm * wpld; + scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 1); +} + + +/*! + * \brief scaleGray2xLILineLow() + * + * \param[in] lined ptr to top destline, to be made from current src line + * \param[in] wpld + * \param[in] lines ptr to current src line + * \param[in] ws + * \param[in] wpls + * \param[in] lastlineflag 1 if last src line; 0 otherwise + * \return void + */ +static void +scaleGray2xLILineLow(l_uint32 *lined, + l_int32 wpld, + l_uint32 *lines, + l_int32 ws, + l_int32 wpls, + l_int32 lastlineflag) +{ +l_int32 j, jd, wsm, w; +l_uint32 sval1, sval2, sval3, sval4; +l_uint32 *linesp, *linedp; +l_uint32 words, wordsp, wordd, worddp; + + wsm = ws - 1; + + if (lastlineflag == 0) { + linesp = lines + wpls; + linedp = lined + wpld; + + /* Unroll the loop 4x and work on full words */ + words = lines[0]; + wordsp = linesp[0]; + sval2 = (words >> 24) & 0xff; + sval4 = (wordsp >> 24) & 0xff; + for (j = 0, jd = 0, w = 0; j + 3 < wsm; j += 4, jd += 8, w++) { + /* At the top of the loop, + * words == lines[w], wordsp == linesp[w] + * and the top bytes of those have been loaded into + * sval2 and sval4. */ + sval1 = sval2; + sval2 = (words >> 16) & 0xff; + sval3 = sval4; + sval4 = (wordsp >> 16) & 0xff; + wordd = (sval1 << 24) | (((sval1 + sval2) >> 1) << 16); + worddp = (((sval1 + sval3) >> 1) << 24) | + (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); + + sval1 = sval2; + sval2 = (words >> 8) & 0xff; + sval3 = sval4; + sval4 = (wordsp >> 8) & 0xff; + wordd |= (sval1 << 8) | ((sval1 + sval2) >> 1); + worddp |= (((sval1 + sval3) >> 1) << 8) | + ((sval1 + sval2 + sval3 + sval4) >> 2); + lined[w * 2] = wordd; + linedp[w * 2] = worddp; + + sval1 = sval2; + sval2 = words & 0xff; + sval3 = sval4; + sval4 = wordsp & 0xff; + wordd = (sval1 << 24) | /* pix 1 */ + (((sval1 + sval2) >> 1) << 16); /* pix 2 */ + worddp = (((sval1 + sval3) >> 1) << 24) | /* pix 3 */ + (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); /* pix 4 */ + + /* Load the next word as we need its first byte */ + words = lines[w + 1]; + wordsp = linesp[w + 1]; + sval1 = sval2; + sval2 = (words >> 24) & 0xff; + sval3 = sval4; + sval4 = (wordsp >> 24) & 0xff; + wordd |= (sval1 << 8) | /* pix 1 */ + ((sval1 + sval2) >> 1); /* pix 2 */ + worddp |= (((sval1 + sval3) >> 1) << 8) | /* pix 3 */ + ((sval1 + sval2 + sval3 + sval4) >> 2); /* pix 4 */ + lined[w * 2 + 1] = wordd; + linedp[w * 2 + 1] = worddp; + } + + /* Finish up the last word */ + for (; j < wsm; j++, jd += 2) { + sval1 = sval2; + sval3 = sval4; + sval2 = GET_DATA_BYTE(lines, j + 1); + sval4 = GET_DATA_BYTE(linesp, j + 1); + SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ + SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ + SET_DATA_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ + SET_DATA_BYTE(linedp, jd + 1, + (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ + } + sval1 = sval2; + sval3 = sval4; + SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ + SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ + SET_DATA_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ + SET_DATA_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ + +#if DEBUG_UNROLLING +#define CHECK_BYTE(a, b, c) if (GET_DATA_BYTE(a, b) != c) {\ + fprintf(stderr, "Error: mismatch at %d, %d vs %d\n", \ + j, GET_DATA_BYTE(a, b), c); } + + sval2 = GET_DATA_BYTE(lines, 0); + sval4 = GET_DATA_BYTE(linesp, 0); + for (j = 0, jd = 0; j < wsm; j++, jd += 2) { + sval1 = sval2; + sval3 = sval4; + sval2 = GET_DATA_BYTE(lines, j + 1); + sval4 = GET_DATA_BYTE(linesp, j + 1); + CHECK_BYTE(lined, jd, sval1); /* pix 1 */ + CHECK_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ + CHECK_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ + CHECK_BYTE(linedp, jd + 1, + (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ + } + sval1 = sval2; + sval3 = sval4; + CHECK_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ + CHECK_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ + CHECK_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ + CHECK_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ +#undef CHECK_BYTE +#endif + } else { /* last row of src pixels: lastlineflag == 1 */ + linedp = lined + wpld; + sval2 = GET_DATA_BYTE(lines, 0); + for (j = 0, jd = 0; j < wsm; j++, jd += 2) { + sval1 = sval2; + sval2 = GET_DATA_BYTE(lines, j + 1); + SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ + SET_DATA_BYTE(linedp, jd, sval1); /* pix 3 */ + SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ + SET_DATA_BYTE(linedp, jd + 1, (sval1 + sval2) / 2); /* pix 4 */ + } + sval1 = sval2; + SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ + SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ + SET_DATA_BYTE(linedp, 2 * wsm, sval1); /* pix 3 */ + SET_DATA_BYTE(linedp, 2 * wsm + 1, sval1); /* pix 4 */ + } +} + + +/*------------------------------------------------------------------* + * 4x linear interpolated gray scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleGray4xLILow() + * + * This is a special case of 4x expansion by linear + * interpolation. Each src pixel contains 16 dest pixels. + * The 16 dest pixels in src pixel 1 are numbered at + * their UL corners. The 16 dest pixels in src pixel 1 + * are related to that src pixel and its 3 neighboring + * src pixels as follows: + * + * 1---2---3---4---|---|---|---|---| + * | | | | | | | | | + * 5---6---7---8---|---|---|---|---| + * | | | | | | | | | + * src 1 --> 9---a---b---c---|---|---|---|---| <-- src 2 + * | | | | | | | | | + * d---e---f---g---|---|---|---|---| + * | | | | | | | | | + * |===|===|===|===|===|===|===|===| + * | | | | | | | | | + * |---|---|---|---|---|---|---|---| + * | | | | | | | | | + * src 3 --> |---|---|---|---|---|---|---|---| <-- src 4 + * | | | | | | | | | + * |---|---|---|---|---|---|---|---| + * | | | | | | | | | + * |---|---|---|---|---|---|---|---| + * + * dest src + * ---- --- + * dp1 = sp1 + * dp2 = (3 * sp1 + sp2) / 4 + * dp3 = (sp1 + sp2) / 2 + * dp4 = (sp1 + 3 * sp2) / 4 + * dp5 = (3 * sp1 + sp3) / 4 + * dp6 = (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16 + * dp7 = (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8 + * dp8 = (3 * sp1 + 9 * sp2 + 1 * sp3 + 3 * sp4) / 16 + * dp9 = (sp1 + sp3) / 2 + * dp10 = (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8 + * dp11 = (sp1 + sp2 + sp3 + sp4) / 4 + * dp12 = (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8 + * dp13 = (sp1 + 3 * sp3) / 4 + * dp14 = (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16 + * dp15 = (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8 + * dp16 = (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16 + * + * We iterate over the src pixels, and unroll the calculation + * for each set of 16 dest pixels corresponding to that src + * pixel, caching pixels for the next src pixel whenever possible. + */ +static void +scaleGray4xLILow(l_uint32 *datad, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, hsm; +l_uint32 *lines, *lined; + + hsm = hs - 1; + + /* We're taking 2 src and 4 dest lines at a time, + * and for each src line, we're computing 4 dest lines. + * Call these 4 dest lines: destline1 - destline4. + * The first src line is used for destline 1. + * Two src lines are used for all other dest lines, + * except for the last 4 dest lines, which are computed + * using only the last src line. */ + + /* iterate over all but the last src line */ + for (i = 0; i < hsm; i++) { + lines = datas + i * wpls; + lined = datad + 4 * i * wpld; + scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 0); + } + + /* last src line */ + lines = datas + hsm * wpls; + lined = datad + 4 * hsm * wpld; + scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 1); +} + + +/*! + * \brief scaleGray4xLILineLow() + * + * \param[in] lined ptr to top destline, to be made from current src line + * \param[in] wpld + * \param[in] lines ptr to current src line + * \param[in] ws + * \param[in] wpls + * \param[in] lastlineflag 1 if last src line; 0 otherwise + * \return void + */ +static void +scaleGray4xLILineLow(l_uint32 *lined, + l_int32 wpld, + l_uint32 *lines, + l_int32 ws, + l_int32 wpls, + l_int32 lastlineflag) +{ +l_int32 j, jd, wsm, wsm4; +l_int32 s1, s2, s3, s4, s1t, s2t, s3t, s4t; +l_uint32 *linesp, *linedp1, *linedp2, *linedp3; + + wsm = ws - 1; + wsm4 = 4 * wsm; + + if (lastlineflag == 0) { + linesp = lines + wpls; + linedp1 = lined + wpld; + linedp2 = lined + 2 * wpld; + linedp3 = lined + 3 * wpld; + s2 = GET_DATA_BYTE(lines, 0); + s4 = GET_DATA_BYTE(linesp, 0); + for (j = 0, jd = 0; j < wsm; j++, jd += 4) { + s1 = s2; + s3 = s4; + s2 = GET_DATA_BYTE(lines, j + 1); + s4 = GET_DATA_BYTE(linesp, j + 1); + s1t = 3 * s1; + s2t = 3 * s2; + s3t = 3 * s3; + s4t = 3 * s4; + SET_DATA_BYTE(lined, jd, s1); /* d1 */ + SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4); /* d2 */ + SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2); /* d3 */ + SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4); /* d4 */ + SET_DATA_BYTE(linedp1, jd, (s1t + s3) / 4); /* d5 */ + SET_DATA_BYTE(linedp1, jd + 1, (9*s1 + s2t + s3t + s4) / 16); /*d6*/ + SET_DATA_BYTE(linedp1, jd + 2, (s1t + s2t + s3 + s4) / 8); /* d7 */ + SET_DATA_BYTE(linedp1, jd + 3, (s1t + 9*s2 + s3 + s4t) / 16);/*d8*/ + SET_DATA_BYTE(linedp2, jd, (s1 + s3) / 2); /* d9 */ + SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2 + s3t + s4) / 8);/* d10 */ + SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2 + s3 + s4) / 4); /* d11 */ + SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t + s3 + s4t) / 8);/* d12 */ + SET_DATA_BYTE(linedp3, jd, (s1 + s3t) / 4); /* d13 */ + SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2 + 9*s3 + s4t) / 16);/*d14*/ + SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2 + s3t + s4t) / 8); /* d15 */ + SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t + s3t + 9*s4) / 16);/*d16*/ + } + s1 = s2; + s3 = s4; + s1t = 3 * s1; + s3t = 3 * s3; + SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ + SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ + SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ + SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ + SET_DATA_BYTE(linedp1, wsm4, (s1t + s3) / 4); /* d5 */ + SET_DATA_BYTE(linedp1, wsm4 + 1, (s1t + s3) / 4); /* d6 */ + SET_DATA_BYTE(linedp1, wsm4 + 2, (s1t + s3) / 4); /* d7 */ + SET_DATA_BYTE(linedp1, wsm4 + 3, (s1t + s3) / 4); /* d8 */ + SET_DATA_BYTE(linedp2, wsm4, (s1 + s3) / 2); /* d9 */ + SET_DATA_BYTE(linedp2, wsm4 + 1, (s1 + s3) / 2); /* d10 */ + SET_DATA_BYTE(linedp2, wsm4 + 2, (s1 + s3) / 2); /* d11 */ + SET_DATA_BYTE(linedp2, wsm4 + 3, (s1 + s3) / 2); /* d12 */ + SET_DATA_BYTE(linedp3, wsm4, (s1 + s3t) / 4); /* d13 */ + SET_DATA_BYTE(linedp3, wsm4 + 1, (s1 + s3t) / 4); /* d14 */ + SET_DATA_BYTE(linedp3, wsm4 + 2, (s1 + s3t) / 4); /* d15 */ + SET_DATA_BYTE(linedp3, wsm4 + 3, (s1 + s3t) / 4); /* d16 */ + } else { /* last row of src pixels: lastlineflag == 1 */ + linedp1 = lined + wpld; + linedp2 = lined + 2 * wpld; + linedp3 = lined + 3 * wpld; + s2 = GET_DATA_BYTE(lines, 0); + for (j = 0, jd = 0; j < wsm; j++, jd += 4) { + s1 = s2; + s2 = GET_DATA_BYTE(lines, j + 1); + s1t = 3 * s1; + s2t = 3 * s2; + SET_DATA_BYTE(lined, jd, s1); /* d1 */ + SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4 ); /* d2 */ + SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2 ); /* d3 */ + SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4 ); /* d4 */ + SET_DATA_BYTE(linedp1, jd, s1); /* d5 */ + SET_DATA_BYTE(linedp1, jd + 1, (s1t + s2) / 4 ); /* d6 */ + SET_DATA_BYTE(linedp1, jd + 2, (s1 + s2) / 2 ); /* d7 */ + SET_DATA_BYTE(linedp1, jd + 3, (s1 + s2t) / 4 ); /* d8 */ + SET_DATA_BYTE(linedp2, jd, s1); /* d9 */ + SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2) / 4 ); /* d10 */ + SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2) / 2 ); /* d11 */ + SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t) / 4 ); /* d12 */ + SET_DATA_BYTE(linedp3, jd, s1); /* d13 */ + SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2) / 4 ); /* d14 */ + SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2) / 2 ); /* d15 */ + SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t) / 4 ); /* d16 */ + } + s1 = s2; + SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ + SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ + SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ + SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ + SET_DATA_BYTE(linedp1, wsm4, s1); /* d5 */ + SET_DATA_BYTE(linedp1, wsm4 + 1, s1); /* d6 */ + SET_DATA_BYTE(linedp1, wsm4 + 2, s1); /* d7 */ + SET_DATA_BYTE(linedp1, wsm4 + 3, s1); /* d8 */ + SET_DATA_BYTE(linedp2, wsm4, s1); /* d9 */ + SET_DATA_BYTE(linedp2, wsm4 + 1, s1); /* d10 */ + SET_DATA_BYTE(linedp2, wsm4 + 2, s1); /* d11 */ + SET_DATA_BYTE(linedp2, wsm4 + 3, s1); /* d12 */ + SET_DATA_BYTE(linedp3, wsm4, s1); /* d13 */ + SET_DATA_BYTE(linedp3, wsm4 + 1, s1); /* d14 */ + SET_DATA_BYTE(linedp3, wsm4 + 2, s1); /* d15 */ + SET_DATA_BYTE(linedp3, wsm4 + 3, s1); /* d16 */ + } +} + + +/*------------------------------------------------------------------* + * Grayscale and color scaling by closest pixel sampling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleBySamplingLow() + * + * Notes: + * (1) The dest must be cleared prior to this operation, + * and we clear it here in the low-level code. + * (2) We reuse dest pixels and dest pixel rows whenever + * possible. This speeds the upscaling; downscaling + * is done by strict subsampling and is unaffected. + * (3) Because we are sampling and not interpolating, this + * routine works directly, without conversion to full + * RGB color, for 2, 4 or 8 bpp palette color images. + */ +static l_int32 +scaleBySamplingLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 d, + l_int32 wpls) +{ +l_int32 i, j; +l_int32 xs, prevxs, sval; +l_int32 *srow, *scol; +l_uint32 csval; +l_uint32 *lines, *prevlines, *lined, *prevlined; +l_float32 wratio, hratio; + + PROCNAME("scaleBySamplingLow"); + + if (d != 2 && d != 4 && d !=8 && d != 16 && d != 32) + return ERROR_INT("pixel depth not supported", procName, 1); + + /* Clear dest */ + memset(datad, 0, 4LL * hd * wpld); + + /* the source row corresponding to dest row i ==> srow[i] + * the source col corresponding to dest col j ==> scol[j] */ + if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) + return ERROR_INT("srow not made", procName, 1); + if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { + LEPT_FREE(srow); + return ERROR_INT("scol not made", procName, 1); + } + + wratio = (l_float32)ws / (l_float32)wd; + hratio = (l_float32)hs / (l_float32)hd; + for (i = 0; i < hd; i++) + srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1); + for (j = 0; j < wd; j++) + scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1); + + prevlines = NULL; + for (i = 0; i < hd; i++) { + lines = datas + srow[i] * wpls; + lined = datad + i * wpld; + if (lines != prevlines) { /* make dest from new source row */ + prevxs = -1; + sval = 0; + csval = 0; + if (d == 2) { + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + sval = GET_DATA_DIBIT(lines, xs); + SET_DATA_DIBIT(lined, j, sval); + prevxs = xs; + } else { /* copy prev dest pix */ + SET_DATA_DIBIT(lined, j, sval); + } + } + } else if (d == 4) { + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + sval = GET_DATA_QBIT(lines, xs); + SET_DATA_QBIT(lined, j, sval); + prevxs = xs; + } else { /* copy prev dest pix */ + SET_DATA_QBIT(lined, j, sval); + } + } + } else if (d == 8) { + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + sval = GET_DATA_BYTE(lines, xs); + SET_DATA_BYTE(lined, j, sval); + prevxs = xs; + } else { /* copy prev dest pix */ + SET_DATA_BYTE(lined, j, sval); + } + } + } else if (d == 16) { + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + sval = GET_DATA_TWO_BYTES(lines, xs); + SET_DATA_TWO_BYTES(lined, j, sval); + prevxs = xs; + } else { /* copy prev dest pix */ + SET_DATA_TWO_BYTES(lined, j, sval); + } + } + } else { /* d == 32 */ + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + csval = lines[xs]; + lined[j] = csval; + prevxs = xs; + } else { /* copy prev dest pix */ + lined[j] = csval; + } + } + } + } else { /* lines == prevlines; copy prev dest row */ + prevlined = lined - wpld; + memcpy(lined, prevlined, 4 * wpld); + } + prevlines = lines; + } + + LEPT_FREE(srow); + LEPT_FREE(scol); + return 0; +} + + +/*------------------------------------------------------------------* + * Color and grayscale downsampling with (antialias) smoothing * + *------------------------------------------------------------------*/ +/*! + * \brief scaleSmoothLow() + * + * Notes: + * (1) This function is called on 8 or 32 bpp src and dest images. + * (2) size is the full width of the lowpass smoothing filter. + * It is correlated with the reduction ratio, being the + * nearest integer such that size is approximately equal to hs / hd. + */ +static l_int32 +scaleSmoothLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 d, + l_int32 wpls, + l_int32 size) +{ +l_int32 i, j, m, n, xstart; +l_int32 val, rval, gval, bval; +l_int32 *srow, *scol; +l_uint32 *lines, *lined, *line, *ppixel; +l_uint32 pixel; +l_float32 wratio, hratio, norm; + + PROCNAME("scaleSmoothLow"); + + /* Clear dest */ + memset(datad, 0, 4LL * wpld * hd); + + /* Each dest pixel at (j,i) is computed as the average + of size^2 corresponding src pixels. + We store the UL corner location of the square of + src pixels that correspond to dest pixel (j,i). + The are labeled by the arrays srow[i] and scol[j]. */ + if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) + return ERROR_INT("srow not made", procName, 1); + if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { + LEPT_FREE(srow); + return ERROR_INT("scol not made", procName, 1); + } + + norm = 1. / (l_float32)(size * size); + wratio = (l_float32)ws / (l_float32)wd; + hratio = (l_float32)hs / (l_float32)hd; + for (i = 0; i < hd; i++) + srow[i] = L_MIN((l_int32)(hratio * i), hs - size); + for (j = 0; j < wd; j++) + scol[j] = L_MIN((l_int32)(wratio * j), ws - size); + + /* For each dest pixel, compute average */ + if (d == 8) { + for (i = 0; i < hd; i++) { + lines = datas + srow[i] * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + xstart = scol[j]; + val = 0; + for (m = 0; m < size; m++) { + line = lines + m * wpls; + for (n = 0; n < size; n++) { + val += GET_DATA_BYTE(line, xstart + n); + } + } + val = (l_int32)((l_float32)val * norm); + SET_DATA_BYTE(lined, j, val); + } + } + } else { /* d == 32 */ + for (i = 0; i < hd; i++) { + lines = datas + srow[i] * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + xstart = scol[j]; + rval = gval = bval = 0; + for (m = 0; m < size; m++) { + ppixel = lines + m * wpls + xstart; + for (n = 0; n < size; n++) { + pixel = *(ppixel + n); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + } + } + rval = (l_int32)((l_float32)rval * norm); + gval = (l_int32)((l_float32)gval * norm); + bval = (l_int32)((l_float32)bval * norm); + composeRGBPixel(rval, gval, bval, lined + j); + } + } + } + + LEPT_FREE(srow); + LEPT_FREE(scol); + return 0; +} + + +/*! + * \brief scaleRGBToGray2Low() + * + * Notes: + * (1) This function is called with 32 bpp RGB src and 8 bpp, + * half-resolution dest. The weights should add to 1.0. + */ +static void +scaleRGBToGray2Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_float32 rwt, + l_float32 gwt, + l_float32 bwt) +{ +l_int32 i, j, val, rval, gval, bval; +l_uint32 *lines, *lined; +l_uint32 pixel; + + rwt *= 0.25; + gwt *= 0.25; + bwt *= 0.25; + for (i = 0; i < hd; i++) { + lines = datas + 2 * i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + /* Sum each of the color components from 4 src pixels */ + pixel = *(lines + 2 * j); + rval = (pixel >> L_RED_SHIFT) & 0xff; + gval = (pixel >> L_GREEN_SHIFT) & 0xff; + bval = (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + 2 * j + 1); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + wpls + 2 * j); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + wpls + 2 * j + 1); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + /* Generate the dest byte as a weighted sum of the averages */ + val = (l_int32)(rwt * rval + gwt * gval + bwt * bval); + SET_DATA_BYTE(lined, j, val); + } + } +} + + +/*------------------------------------------------------------------* + * General area mapped gray scaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleColorAreaMapLow() + * + * This should only be used for downscaling. + * We choose to divide each pixel into 16 x 16 sub-pixels. + * This is much slower than scaleSmoothLow(), but it gives a + * better representation, esp. for downscaling factors between + * 1.5 and 5. All src pixels are subdivided into 256 sub-pixels, + * and are weighted by the number of sub-pixels covered by + * the dest pixel. This is about 2x slower than scaleSmoothLow(), + * but the results are significantly better on small text. + */ +static void +scaleColorAreaMapLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, j, k, m, wm2, hm2; +l_int32 area00, area10, area01, area11, areal, arear, areat, areab; +l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ +l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ +l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ +l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ +l_int32 delx, dely, area; +l_int32 v00r, v00g, v00b; /* contrib. from UL src pixel */ +l_int32 v01r, v01g, v01b; /* contrib. from LL src pixel */ +l_int32 v10r, v10g, v10b; /* contrib from UR src pixel */ +l_int32 v11r, v11g, v11b; /* contrib from LR src pixel */ +l_int32 vinr, ving, vinb; /* contrib from all full interior src pixels */ +l_int32 vmidr, vmidg, vmidb; /* contrib from side parts */ +l_int32 rval, gval, bval; +l_uint32 pixel00, pixel10, pixel01, pixel11, pixel; +l_uint32 *lines, *lined; +l_float32 scx, scy; + + /* (scx, scy) are scaling factors that are applied to the + * dest coords to get the corresponding src coords. + * We need them because we iterate over dest pixels + * and must find the corresponding set of src pixels. */ + scx = 16. * (l_float32)ws / (l_float32)wd; + scy = 16. * (l_float32)hs / (l_float32)hd; + wm2 = ws - 2; + hm2 = hs - 2; + + /* Iterate over the destination pixels */ + for (i = 0; i < hd; i++) { + yu = (l_int32)(scy * i); + yl = (l_int32)(scy * (i + 1.0)); + yup = yu >> 4; + yuf = yu & 0x0f; + ylp = yl >> 4; + ylf = yl & 0x0f; + dely = ylp - yup; + lined = datad + i * wpld; + lines = datas + yup * wpls; + for (j = 0; j < wd; j++) { + xu = (l_int32)(scx * j); + xl = (l_int32)(scx * (j + 1.0)); + xup = xu >> 4; + xuf = xu & 0x0f; + xlp = xl >> 4; + xlf = xl & 0x0f; + delx = xlp - xup; + + /* If near the edge, just use a src pixel value */ + if (xlp > wm2 || ylp > hm2) { + *(lined + j) = *(lines + xup); + continue; + } + + /* Area summed over, in subpixels. This varies + * due to the quantization, so we can't simply take + * the area to be a constant: area = scx * scy. */ + area = ((16 - xuf) + 16 * (delx - 1) + xlf) * + ((16 - yuf) + 16 * (dely - 1) + ylf); + + /* Do area map summation */ + pixel00 = *(lines + xup); + pixel10 = *(lines + xlp); + pixel01 = *(lines + dely * wpls + xup); + pixel11 = *(lines + dely * wpls + xlp); + area00 = (16 - xuf) * (16 - yuf); + area10 = xlf * (16 - yuf); + area01 = (16 - xuf) * ylf; + area11 = xlf * ylf; + v00r = area00 * ((pixel00 >> L_RED_SHIFT) & 0xff); + v00g = area00 * ((pixel00 >> L_GREEN_SHIFT) & 0xff); + v00b = area00 * ((pixel00 >> L_BLUE_SHIFT) & 0xff); + v10r = area10 * ((pixel10 >> L_RED_SHIFT) & 0xff); + v10g = area10 * ((pixel10 >> L_GREEN_SHIFT) & 0xff); + v10b = area10 * ((pixel10 >> L_BLUE_SHIFT) & 0xff); + v01r = area01 * ((pixel01 >> L_RED_SHIFT) & 0xff); + v01g = area01 * ((pixel01 >> L_GREEN_SHIFT) & 0xff); + v01b = area01 * ((pixel01 >> L_BLUE_SHIFT) & 0xff); + v11r = area11 * ((pixel11 >> L_RED_SHIFT) & 0xff); + v11g = area11 * ((pixel11 >> L_GREEN_SHIFT) & 0xff); + v11b = area11 * ((pixel11 >> L_BLUE_SHIFT) & 0xff); + vinr = ving = vinb = 0; + for (k = 1; k < dely; k++) { /* for full src pixels */ + for (m = 1; m < delx; m++) { + pixel = *(lines + k * wpls + xup + m); + vinr += 256 * ((pixel >> L_RED_SHIFT) & 0xff); + ving += 256 * ((pixel >> L_GREEN_SHIFT) & 0xff); + vinb += 256 * ((pixel >> L_BLUE_SHIFT) & 0xff); + } + } + vmidr = vmidg = vmidb = 0; + areal = (16 - xuf) * 16; + arear = xlf * 16; + areat = 16 * (16 - yuf); + areab = 16 * ylf; + for (k = 1; k < dely; k++) { /* for left side */ + pixel = *(lines + k * wpls + xup); + vmidr += areal * ((pixel >> L_RED_SHIFT) & 0xff); + vmidg += areal * ((pixel >> L_GREEN_SHIFT) & 0xff); + vmidb += areal * ((pixel >> L_BLUE_SHIFT) & 0xff); + } + for (k = 1; k < dely; k++) { /* for right side */ + pixel = *(lines + k * wpls + xlp); + vmidr += arear * ((pixel >> L_RED_SHIFT) & 0xff); + vmidg += arear * ((pixel >> L_GREEN_SHIFT) & 0xff); + vmidb += arear * ((pixel >> L_BLUE_SHIFT) & 0xff); + } + for (m = 1; m < delx; m++) { /* for top side */ + pixel = *(lines + xup + m); + vmidr += areat * ((pixel >> L_RED_SHIFT) & 0xff); + vmidg += areat * ((pixel >> L_GREEN_SHIFT) & 0xff); + vmidb += areat * ((pixel >> L_BLUE_SHIFT) & 0xff); + } + for (m = 1; m < delx; m++) { /* for bottom side */ + pixel = *(lines + dely * wpls + xup + m); + vmidr += areab * ((pixel >> L_RED_SHIFT) & 0xff); + vmidg += areab * ((pixel >> L_GREEN_SHIFT) & 0xff); + vmidb += areab * ((pixel >> L_BLUE_SHIFT) & 0xff); + } + + /* Sum all the contributions */ + rval = (v00r + v01r + v10r + v11r + vinr + vmidr + 128) / area; + gval = (v00g + v01g + v10g + v11g + ving + vmidg + 128) / area; + bval = (v00b + v01b + v10b + v11b + vinb + vmidb + 128) / area; +#if DEBUG_OVERFLOW + if (rval > 255) fprintf(stderr, "rval ovfl: %d\n", rval); + if (gval > 255) fprintf(stderr, "gval ovfl: %d\n", gval); + if (bval > 255) fprintf(stderr, "bval ovfl: %d\n", bval); +#endif /* DEBUG_OVERFLOW */ + composeRGBPixel(rval, gval, bval, lined + j); + } + } +} + + +/*! + * \brief scaleGrayAreaMapLow() + * + * This should only be used for downscaling. + * We choose to divide each pixel into 16 x 16 sub-pixels. + * This is about 2x slower than scaleSmoothLow(), but the results + * are significantly better on small text, esp. for downscaling + * factors between 1.5 and 5. All src pixels are subdivided + * into 256 sub-pixels, and are weighted by the number of + * sub-pixels covered by the dest pixel. + */ +static void +scaleGrayAreaMapLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, j, k, m, wm2, hm2; +l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ +l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ +l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ +l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ +l_int32 delx, dely, area; +l_int32 v00; /* contrib. from UL src pixel */ +l_int32 v01; /* contrib. from LL src pixel */ +l_int32 v10; /* contrib from UR src pixel */ +l_int32 v11; /* contrib from LR src pixel */ +l_int32 vin; /* contrib from all full interior src pixels */ +l_int32 vmid; /* contrib from side parts that are full in 1 direction */ +l_int32 val; +l_uint32 *lines, *lined; +l_float32 scx, scy; + + /* (scx, scy) are scaling factors that are applied to the + * dest coords to get the corresponding src coords. + * We need them because we iterate over dest pixels + * and must find the corresponding set of src pixels. */ + scx = 16. * (l_float32)ws / (l_float32)wd; + scy = 16. * (l_float32)hs / (l_float32)hd; + wm2 = ws - 2; + hm2 = hs - 2; + + /* Iterate over the destination pixels */ + for (i = 0; i < hd; i++) { + yu = (l_int32)(scy * i); + yl = (l_int32)(scy * (i + 1.0)); + yup = yu >> 4; + yuf = yu & 0x0f; + ylp = yl >> 4; + ylf = yl & 0x0f; + dely = ylp - yup; + lined = datad + i * wpld; + lines = datas + yup * wpls; + for (j = 0; j < wd; j++) { + xu = (l_int32)(scx * j); + xl = (l_int32)(scx * (j + 1.0)); + xup = xu >> 4; + xuf = xu & 0x0f; + xlp = xl >> 4; + xlf = xl & 0x0f; + delx = xlp - xup; + + /* If near the edge, just use a src pixel value */ + if (xlp > wm2 || ylp > hm2) { + SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xup)); + continue; + } + + /* Area summed over, in subpixels. This varies + * due to the quantization, so we can't simply take + * the area to be a constant: area = scx * scy. */ + area = ((16 - xuf) + 16 * (delx - 1) + xlf) * + ((16 - yuf) + 16 * (dely - 1) + ylf); + + /* Do area map summation */ + v00 = (16 - xuf) * (16 - yuf) * GET_DATA_BYTE(lines, xup); + v10 = xlf * (16 - yuf) * GET_DATA_BYTE(lines, xlp); + v01 = (16 - xuf) * ylf * GET_DATA_BYTE(lines + dely * wpls, xup); + v11 = xlf * ylf * GET_DATA_BYTE(lines + dely * wpls, xlp); + for (vin = 0, k = 1; k < dely; k++) { /* for full src pixels */ + for (m = 1; m < delx; m++) { + vin += 256 * GET_DATA_BYTE(lines + k * wpls, xup + m); + } + } + for (vmid = 0, k = 1; k < dely; k++) /* for left side */ + vmid += (16 - xuf) * 16 * GET_DATA_BYTE(lines + k * wpls, xup); + for (k = 1; k < dely; k++) /* for right side */ + vmid += xlf * 16 * GET_DATA_BYTE(lines + k * wpls, xlp); + for (m = 1; m < delx; m++) /* for top side */ + vmid += 16 * (16 - yuf) * GET_DATA_BYTE(lines, xup + m); + for (m = 1; m < delx; m++) /* for bottom side */ + vmid += 16 * ylf * GET_DATA_BYTE(lines + dely * wpls, xup + m); + val = (v00 + v01 + v10 + v11 + vin + vmid + 128) / area; +#if DEBUG_OVERFLOW + if (val > 255) fprintf(stderr, "val overflow: %d\n", val); +#endif /* DEBUG_OVERFLOW */ + SET_DATA_BYTE(lined, j, val); + } + } +} + + +/*------------------------------------------------------------------* + * 2x area mapped downscaling * + *------------------------------------------------------------------*/ +/*! + * \brief scaleAreaMapLow2() + * + * Notes: + * This function is called with either 8 bpp gray or 32 bpp RGB. + * The result is a 2x reduced dest. + */ +static void +scaleAreaMapLow2(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 d, + l_int32 wpls) +{ +l_int32 i, j, val, rval, gval, bval; +l_uint32 *lines, *lined; +l_uint32 pixel; + + if (d == 8) { + for (i = 0; i < hd; i++) { + lines = datas + 2 * i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + /* Average each dest pixel using 4 src pixels */ + val = GET_DATA_BYTE(lines, 2 * j); + val += GET_DATA_BYTE(lines, 2 * j + 1); + val += GET_DATA_BYTE(lines + wpls, 2 * j); + val += GET_DATA_BYTE(lines + wpls, 2 * j + 1); + val >>= 2; + SET_DATA_BYTE(lined, j, val); + } + } + } else { /* d == 32 */ + for (i = 0; i < hd; i++) { + lines = datas + 2 * i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + /* Average each of the color components from 4 src pixels */ + pixel = *(lines + 2 * j); + rval = (pixel >> L_RED_SHIFT) & 0xff; + gval = (pixel >> L_GREEN_SHIFT) & 0xff; + bval = (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + 2 * j + 1); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + wpls + 2 * j); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + pixel = *(lines + wpls + 2 * j + 1); + rval += (pixel >> L_RED_SHIFT) & 0xff; + gval += (pixel >> L_GREEN_SHIFT) & 0xff; + bval += (pixel >> L_BLUE_SHIFT) & 0xff; + composeRGBPixel(rval >> 2, gval >> 2, bval >> 2, &pixel); + *(lined + j) = pixel; + } + } + } +} + + +/*------------------------------------------------------------------* + * Binary scaling by closest pixel sampling * + *------------------------------------------------------------------*/ +/* + * scaleBinaryLow() + * + * Notes: + * (1) The dest must be cleared prior to this operation, + * and we clear it here in the low-level code. + * (2) We reuse dest pixels and dest pixel rows whenever + * possible for upscaling; downscaling is done by + * strict subsampling. + */ +static l_int32 +scaleBinaryLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 ws, + l_int32 hs, + l_int32 wpls) +{ +l_int32 i, j; +l_int32 xs, prevxs, sval; +l_int32 *srow, *scol; +l_uint32 *lines, *prevlines, *lined, *prevlined; +l_float32 wratio, hratio; + + PROCNAME("scaleBinaryLow"); + + /* Clear dest */ + memset(datad, 0, 4LL * hd * wpld); + + /* The source row corresponding to dest row i ==> srow[i] + * The source col corresponding to dest col j ==> scol[j] */ + if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) + return ERROR_INT("srow not made", procName, 1); + if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { + LEPT_FREE(srow); + return ERROR_INT("scol not made", procName, 1); + } + + wratio = (l_float32)ws / (l_float32)wd; + hratio = (l_float32)hs / (l_float32)hd; + for (i = 0; i < hd; i++) + srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1); + for (j = 0; j < wd; j++) + scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1); + + prevlines = NULL; + prevxs = -1; + sval = 0; + for (i = 0; i < hd; i++) { + lines = datas + srow[i] * wpls; + lined = datad + i * wpld; + if (lines != prevlines) { /* make dest from new source row */ + for (j = 0; j < wd; j++) { + xs = scol[j]; + if (xs != prevxs) { /* get dest pix from source col */ + if ((sval = GET_DATA_BIT(lines, xs))) + SET_DATA_BIT(lined, j); + prevxs = xs; + } else { /* copy prev dest pix, if set */ + if (sval) + SET_DATA_BIT(lined, j); + } + } + } else { /* lines == prevlines; copy prev dest row */ + prevlined = lined - wpld; + memcpy(lined, prevlined, 4 * wpld); + } + prevlines = lines; + } + + LEPT_FREE(srow); + LEPT_FREE(scol); + return 0; +} + diff --git a/3rdparty/hgOCR/leptonica/scale2.c b/3rdparty/hgOCR/leptonica/scale2.c new file mode 100644 index 00000000..f3d6be01 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/scale2.c @@ -0,0 +1,2320 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file scale2.c + *
+ *         Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling)
+ *               PIX      *pixScaleToGray()
+ *               PIX      *pixScaleToGrayFast()
+ *
+ *         Scale-to-gray (1 bpp --> 8 bpp; integer downscaling)
+ *               PIX      *pixScaleToGray2()
+ *               PIX      *pixScaleToGray3()
+ *               PIX      *pixScaleToGray4()
+ *               PIX      *pixScaleToGray6()
+ *               PIX      *pixScaleToGray8()
+ *               PIX      *pixScaleToGray16()
+ *
+ *         Scale-to-gray by mipmap(1 bpp --> 8 bpp, arbitrary reduction)
+ *               PIX      *pixScaleToGrayMipmap()
+ *
+ *         Grayscale scaling using mipmap
+ *               PIX      *pixScaleMipmap()
+ *
+ *         Replicated (integer) expansion (all depths)
+ *               PIX      *pixExpandReplicate()
+ *
+ *         Grayscale downscaling using min and max
+ *               PIX      *pixScaleGrayMinMax()
+ *               PIX      *pixScaleGrayMinMax2()
+ *
+ *         Grayscale downscaling using rank value
+ *               PIX      *pixScaleGrayRankCascade()
+ *               PIX      *pixScaleGrayRank2()
+ *
+ *         Helper function for transferring alpha with scaling
+ *               l_int32   pixScaleAndTransferAlpha()
+ *
+ *         RGB scaling including alpha (blend) component
+ *               PIX      *pixScaleWithAlpha()
+ *
+ *     Low-level static functions:
+ *
+ *         Scale-to-gray 2x
+ *                  static void       scaleToGray2Low()
+ *                  static l_uint32  *makeSumTabSG2()
+ *                  static l_uint8   *makeValTabSG2()
+ *
+ *         Scale-to-gray 3x
+ *                  static void       scaleToGray3Low()
+ *                  static l_uint32  *makeSumTabSG3()
+ *                  static l_uint8   *makeValTabSG3()
+ *
+ *         Scale-to-gray 4x
+ *                  static void       scaleToGray4Low()
+ *                  static l_uint32  *makeSumTabSG4()
+ *                  static l_uint8   *makeValTabSG4()
+ *
+ *         Scale-to-gray 6x
+ *                  static void       scaleToGray6Low()
+ *                  static l_uint8   *makeValTabSG6()
+ *
+ *         Scale-to-gray 8x
+ *                  static void       scaleToGray8Low()
+ *                  static l_uint8   *makeValTabSG8()
+ *
+ *         Scale-to-gray 16x
+ *                  static void       scaleToGray16Low()
+ *
+ *         Grayscale mipmap
+ *                  static l_int32    scaleMipmapLow()
+ * 
+ */ + +#include +#include "allheaders.h" + +static void scaleToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_uint32 *sumtab, l_uint8 *valtab); +static l_uint32 *makeSumTabSG2(void); +static l_uint8 *makeValTabSG2(void); +static void scaleToGray3Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_uint32 *sumtab, l_uint8 *valtab); +static l_uint32 *makeSumTabSG3(void); +static l_uint8 *makeValTabSG3(void); +static void scaleToGray4Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_uint32 *sumtab, l_uint8 *valtab); +static l_uint32 *makeSumTabSG4(void); +static l_uint8 *makeValTabSG4(void); +static void scaleToGray6Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_int32 *tab8, l_uint8 *valtab); +static l_uint8 *makeValTabSG6(void); +static void scaleToGray8Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_int32 *tab8, l_uint8 *valtab); +static l_uint8 *makeValTabSG8(void); +static void scaleToGray16Low(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas, l_int32 wpls, + l_int32 *tab8); +static l_int32 scaleMipmapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, + l_int32 wpld, l_uint32 *datas1, l_int32 wpls1, + l_uint32 *datas2, l_int32 wpls2, l_float32 red); + +extern l_float32 AlphaMaskBorderVals[2]; + + +/*------------------------------------------------------------------* + * Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling) * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleToGray() + * + * \param[in] pixs 1 bpp + * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 + * \return pixd 8 bpp, scaled down by scalefactor in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *
+ *  For faster scaling in the range of scalefactors from 0.0625 to 0.5,
+ *  with very little difference in quality, use pixScaleToGrayFast().
+ *
+ *  Binary images have sharp edges, so they intrinsically have very
+ *  high frequency content.  To avoid aliasing, they must be low-pass
+ *  filtered, which tends to blur the edges.  How can we keep relatively
+ *  crisp edges without aliasing?  The trick is to do binary upscaling
+ *  followed by a power-of-2 scaleToGray.  For large reductions, where
+ *  you don't end up with much detail, some corners can be cut.
+ *
+ *  The intent here is to get high quality reduced grayscale
+ *  images with relatively little computation.  We do binary
+ *  pre-scaling followed by scaleToGrayN() for best results,
+ *  esp. to avoid excess blur when the scale factor is near
+ *  an inverse power of 2.  Where a low-pass filter is required,
+ *  we use simple convolution kernels: either the hat filter for
+ *  linear interpolation or a flat filter for larger downscaling.
+ *  Other choices, such as a perfect bandpass filter with infinite extent
+ *  (the sinc) or various approximations to it (e.g., lanczos), are
+ *  unnecessarily expensive.
+ *
+ *  The choices made are as follows:
+ *      (1) Do binary upscaling before scaleToGrayN() for scalefactors > 1/8
+ *      (2) Do binary downscaling before scaleToGray8() for scalefactors
+ *          between 1/16 and 1/8.
+ *      (3) Use scaleToGray16() before grayscale downscaling for
+ *          scalefactors less than 1/16
+ *  Another reasonable choice would be to start binary downscaling
+ *  for scalefactors below 1/4, rather than below 1/8 as we do here.
+ *
+ *  The general scaling rules, not all of which are used here, go as follows:
+ *      (1) For grayscale upscaling, use pixScaleGrayLI().  However,
+ *          note that edges will be visibly blurred for scalefactors
+ *          near (but above) 1.0.  Replication will avoid edge blur,
+ *          and should be considered for factors very near 1.0.
+ *      (2) For grayscale downscaling with a scale factor larger than
+ *          about 0.7, use pixScaleGrayLI().  For scalefactors near
+ *          (but below) 1.0, you tread between Scylla and Charybdis.
+ *          pixScaleGrayLI() again gives edge blurring, but
+ *          pixScaleBySampling() gives visible aliasing.
+ *      (3) For grayscale downscaling with a scale factor smaller than
+ *          about 0.7, use pixScaleSmooth()
+ *      (4) For binary input images, do as much scale to gray as possible
+ *          using the special integer functions (2, 3, 4, 8 and 16).
+ *      (5) It is better to upscale in binary, followed by scaleToGrayN()
+ *          than to do scaleToGrayN() followed by an upscale using either
+ *          LI or oversampling.
+ *      (6) It may be better to downscale in binary, followed by
+ *          scaleToGrayN() than to first use scaleToGrayN() followed by
+ *          downscaling.  For downscaling between 8x and 16x, this is
+ *          a reasonable option.
+ *      (7) For reductions greater than 16x, it's reasonable to use
+ *          scaleToGray16() followed by further grayscale downscaling.
+ * 
+ */ +PIX * +pixScaleToGray(PIX *pixs, + l_float32 scalefactor) +{ +l_int32 w, h, minsrc, mindest; +l_float32 mag, red; +PIX *pixt, *pixd; + + PROCNAME("pixScaleToGray"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (scalefactor <= 0.0) + return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); + if (scalefactor >= 1.0) + return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + minsrc = L_MIN(w, h); + mindest = (l_int32)((l_float32)minsrc * scalefactor); + if (mindest < 2) + return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); + + if (scalefactor > 0.5) { /* see note (5) */ + mag = 2.0 * scalefactor; /* will be < 2.0 */ +/* fprintf(stderr, "2x with mag %7.3f\n", mag); */ + if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray2(pixt); + } else if (scalefactor == 0.5) { + return pixd = pixScaleToGray2(pixs); + } else if (scalefactor > 0.33333) { /* see note (5) */ + mag = 3.0 * scalefactor; /* will be < 1.5 */ +/* fprintf(stderr, "3x with mag %7.3f\n", mag); */ + if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray3(pixt); + } else if (scalefactor > 0.25) { /* see note (5) */ + mag = 4.0 * scalefactor; /* will be < 1.3333 */ +/* fprintf(stderr, "4x with mag %7.3f\n", mag); */ + if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray4(pixt); + } else if (scalefactor == 0.25) { + return pixd = pixScaleToGray4(pixs); + } else if (scalefactor > 0.16667) { /* see note (5) */ + mag = 6.0 * scalefactor; /* will be < 1.5 */ +/* fprintf(stderr, "6x with mag %7.3f\n", mag); */ + if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray6(pixt); + } else if (scalefactor == 0.16667) { + return pixd = pixScaleToGray6(pixs); + } else if (scalefactor > 0.125) { /* see note (5) */ + mag = 8.0 * scalefactor; /* will be < 1.3333 */ +/* fprintf(stderr, "8x with mag %7.3f\n", mag); */ + if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray8(pixt); + } else if (scalefactor == 0.125) { + return pixd = pixScaleToGray8(pixs); + } else if (scalefactor > 0.0625) { /* see note (6) */ + red = 8.0 * scalefactor; /* will be > 0.5 */ +/* fprintf(stderr, "8x with red %7.3f\n", red); */ + if ((pixt = pixScaleBinary(pixs, red, red)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray8(pixt); + } else if (scalefactor == 0.0625) { + return pixd = pixScaleToGray16(pixs); + } else { /* see note (7) */ + red = 16.0 * scalefactor; /* will be <= 1.0 */ +/* fprintf(stderr, "16x with red %7.3f\n", red); */ + if ((pixt = pixScaleToGray16(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + if (red < 0.7) + pixd = pixScaleSmooth(pixt, red, red); /* see note (3) */ + else + pixd = pixScaleGrayLI(pixt, red, red); /* see note (2) */ + } + + pixDestroy(&pixt); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*! + * \brief pixScaleToGrayFast() + * + * \param[in] pixs 1 bpp + * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 + * \return pixd 8 bpp, scaled down by scalefactor in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) See notes in pixScaleToGray() for the basic approach.
+ *      (2) This function is considerably less expensive than pixScaleToGray()
+ *          for scalefactor in the range (0.0625 ... 0.5), and the
+ *          quality is nearly as good.
+ *      (3) Unlike pixScaleToGray(), which does binary upscaling before
+ *          downscaling for scale factors >= 0.0625, pixScaleToGrayFast()
+ *          first downscales in binary for all scale factors < 0.5, and
+ *          then does a 2x scale-to-gray as the final step.  For
+ *          scale factors < 0.0625, both do a 16x scale-to-gray, followed
+ *          by further grayscale reduction.
+ * 
+ */ +PIX * +pixScaleToGrayFast(PIX *pixs, + l_float32 scalefactor) +{ +l_int32 w, h, minsrc, mindest; +l_float32 eps, factor; +PIX *pixt, *pixd; + + PROCNAME("pixScaleToGrayFast"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (scalefactor <= 0.0) + return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); + if (scalefactor >= 1.0) + return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + minsrc = L_MIN(w, h); + mindest = (l_int32)((l_float32)minsrc * scalefactor); + if (mindest < 2) + return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); + eps = 0.0001; + + /* Handle the special cases */ + if (scalefactor > 0.5 - eps && scalefactor < 0.5 + eps) + return pixScaleToGray2(pixs); + else if (scalefactor > 0.33333 - eps && scalefactor < 0.33333 + eps) + return pixScaleToGray3(pixs); + else if (scalefactor > 0.25 - eps && scalefactor < 0.25 + eps) + return pixScaleToGray4(pixs); + else if (scalefactor > 0.16666 - eps && scalefactor < 0.16666 + eps) + return pixScaleToGray6(pixs); + else if (scalefactor > 0.125 - eps && scalefactor < 0.125 + eps) + return pixScaleToGray8(pixs); + else if (scalefactor > 0.0625 - eps && scalefactor < 0.0625 + eps) + return pixScaleToGray16(pixs); + + if (scalefactor > 0.0625) { /* scale binary first */ + factor = 2.0 * scalefactor; + if ((pixt = pixScaleBinary(pixs, factor, factor)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + pixd = pixScaleToGray2(pixt); + } else { /* scalefactor < 0.0625; scale-to-gray first */ + factor = 16.0 * scalefactor; /* will be < 1.0 */ + if ((pixt = pixScaleToGray16(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + if (factor < 0.7) + pixd = pixScaleSmooth(pixt, factor, factor); + else + pixd = pixScaleGrayLI(pixt, factor, factor); + } + pixDestroy(&pixt); + if (!pixd) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Scale-to-gray (1 bpp --> 8 bpp; integer downscaling) * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixScaleToGray2() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 2x in each direction, + * or NULL on error. + */ +PIX * +pixScaleToGray2(PIX *pixs) +{ +l_uint8 *valtab; +l_int32 ws, hs, wd, hd; +l_int32 wpld, wpls; +l_uint32 *sumtab; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray2"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = ws / 2; + hd = hs / 2; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.5, 0.5); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + sumtab = makeSumTabSG2(); + valtab = makeValTabSG2(); + scaleToGray2Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); + LEPT_FREE(sumtab); + LEPT_FREE(valtab); + return pixd; +} + + +/*! + * \brief pixScaleToGray3() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 3x in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) Speed is about 100 x 10^6 src-pixels/sec/GHz.
+ *          Another way to express this is it processes 1 src pixel
+ *          in about 10 cycles.
+ *      (2) The width of pixd is truncated is truncated to a factor of 8.
+ * 
+ */ +PIX * +pixScaleToGray3(PIX *pixs) +{ +l_uint8 *valtab; +l_int32 ws, hs, wd, hd; +l_int32 wpld, wpls; +l_uint32 *sumtab; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray3"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = (ws / 3) & 0xfffffff8; /* truncate to factor of 8 */ + hd = hs / 3; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.33333, 0.33333); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + sumtab = makeSumTabSG3(); + valtab = makeValTabSG3(); + scaleToGray3Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); + LEPT_FREE(sumtab); + LEPT_FREE(valtab); + return pixd; +} + + +/*! + * \brief pixScaleToGray4() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 4x in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) The width of pixd is truncated is truncated to a factor of 2.
+ * 
+ */ +PIX * +pixScaleToGray4(PIX *pixs) +{ +l_uint8 *valtab; +l_int32 ws, hs, wd, hd; +l_int32 wpld, wpls; +l_uint32 *sumtab; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray4"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = (ws / 4) & 0xfffffffe; /* truncate to factor of 2 */ + hd = hs / 4; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.25, 0.25); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + sumtab = makeSumTabSG4(); + valtab = makeValTabSG4(); + scaleToGray4Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); + LEPT_FREE(sumtab); + LEPT_FREE(valtab); + return pixd; +} + + + +/*! + * \brief pixScaleToGray6() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 6x in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) The width of pixd is truncated is truncated to a factor of 8.
+ * 
+ */ +PIX * +pixScaleToGray6(PIX *pixs) +{ +l_uint8 *valtab; +l_int32 ws, hs, wd, hd, wpld, wpls; +l_int32 *tab8; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray6"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = (ws / 6) & 0xfffffff8; /* truncate to factor of 8 */ + hd = hs / 6; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.16667, 0.16667); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + tab8 = makePixelSumTab8(); + valtab = makeValTabSG6(); + scaleToGray6Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); + LEPT_FREE(tab8); + LEPT_FREE(valtab); + return pixd; +} + + +/*! + * \brief pixScaleToGray8() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 8x in each direction, + * or NULL on error + */ +PIX * +pixScaleToGray8(PIX *pixs) +{ +l_uint8 *valtab; +l_int32 ws, hs, wd, hd; +l_int32 wpld, wpls; +l_int32 *tab8; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray8"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = ws / 8; /* truncate to nearest dest byte */ + hd = hs / 8; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.125, 0.125); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + tab8 = makePixelSumTab8(); + valtab = makeValTabSG8(); + scaleToGray8Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); + LEPT_FREE(tab8); + LEPT_FREE(valtab); + return pixd; +} + + +/*! + * \brief pixScaleToGray16() + * + * \param[in] pixs 1 bpp + * \return pixd 8 bpp, scaled down by 16x in each direction, + * or NULL on error. + */ +PIX * +pixScaleToGray16(PIX *pixs) +{ +l_int32 ws, hs, wd, hd; +l_int32 wpld, wpls; +l_int32 *tab8; +l_uint32 *datas, *datad; +PIX *pixd; + + PROCNAME("pixScaleToGray16"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = ws / 16; + hd = hs / 16; + if (wd == 0 || hd == 0) + return (PIX *)ERROR_PTR("pixs too small", procName, NULL); + + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, 0.0625, 0.0625); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + + tab8 = makePixelSumTab8(); + scaleToGray16Low(datad, wd, hd, wpld, datas, wpls, tab8); + LEPT_FREE(tab8); + return pixd; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray mipmap(1 bpp --> 8 bpp, arbitrary reduction) * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleToGrayMipmap() + * + * \param[in] pixs 1 bpp + * \param[in] scalefactor reduction: must be > 0.0 and < 1.0 + * \return pixd 8 bpp, scaled down by scalefactor in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *
+ *  This function is here mainly for pedagogical reasons.
+ *  Mip-mapping is widely used in graphics for texture mapping, because
+ *  the texture changes smoothly with scale.  This is accomplished by
+ *  constructing a multiresolution pyramid and, for each pixel,
+ *  doing a linear interpolation between corresponding pixels in
+ *  the two planes of the pyramid that bracket the desired resolution.
+ *  The computation is very efficient, and is implemented in hardware
+ *  in high-end graphics cards.
+ *
+ *  We can use mip-mapping for scale-to-gray by using two scale-to-gray
+ *  reduced images (we don't need the entire pyramid) selected from
+ *  the set {2x, 4x, ... 16x}, and interpolating.  However, we get
+ *  severe aliasing, probably because we are subsampling from the
+ *  higher resolution image.  The method is very fast, but the result
+ *  is very poor.  In fact, the results don't look any better than
+ *  either subsampling off the higher-res grayscale image or oversampling
+ *  on the lower-res image.  Consequently, this method should NOT be used
+ *  for generating reduced images, scale-to-gray or otherwise.
+ * 
+ */ +PIX * +pixScaleToGrayMipmap(PIX *pixs, + l_float32 scalefactor) +{ +l_int32 w, h, minsrc, mindest; +l_float32 red; +PIX *pixs1, *pixs2, *pixt, *pixd; + + PROCNAME("pixScaleToGrayMipmap"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (scalefactor <= 0.0) + return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); + if (scalefactor >= 1.0) + return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + minsrc = L_MIN(w, h); + mindest = (l_int32)((l_float32)minsrc * scalefactor); + if (mindest < 2) + return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); + + if (scalefactor > 0.5) { + pixs1 = pixConvert1To8(NULL, pixs, 255, 0); + pixs2 = pixScaleToGray2(pixs); + red = scalefactor; + } else if (scalefactor == 0.5) { + return pixScaleToGray2(pixs); + } else if (scalefactor > 0.25) { + pixs1 = pixScaleToGray2(pixs); + pixs2 = pixScaleToGray4(pixs); + red = 2. * scalefactor; + } else if (scalefactor == 0.25) { + return pixScaleToGray4(pixs); + } else if (scalefactor > 0.125) { + pixs1 = pixScaleToGray4(pixs); + pixs2 = pixScaleToGray8(pixs); + red = 4. * scalefactor; + } else if (scalefactor == 0.125) { + return pixScaleToGray8(pixs); + } else if (scalefactor > 0.0625) { + pixs1 = pixScaleToGray8(pixs); + pixs2 = pixScaleToGray16(pixs); + red = 8. * scalefactor; + } else if (scalefactor == 0.0625) { + return pixScaleToGray16(pixs); + } else { /* end of the pyramid; just do it */ + red = 16.0 * scalefactor; /* will be <= 1.0 */ + if ((pixt = pixScaleToGray16(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, NULL); + if (red < 0.7) + pixd = pixScaleSmooth(pixt, red, red); + else + pixd = pixScaleGrayLI(pixt, red, red); + pixDestroy(&pixt); + return pixd; + } + + pixd = pixScaleMipmap(pixs1, pixs2, red); + pixCopyInputFormat(pixd, pixs); + + pixDestroy(&pixs1); + pixDestroy(&pixs2); + return pixd; +} + + +/*------------------------------------------------------------------* + * Grayscale scaling using mipmap * + *------------------------------------------------------------------*/ +/*! + * \brief pixScaleMipmap() + * + * \param[in] pixs1 high res 8 bpp, no cmap + * \param[in] pixs2 low res -- 2x reduced -- 8 bpp, no cmap + * \param[in] scale reduction with respect to high res image, > 0.5 + * \return 8 bpp pix, scaled down by reduction in each direction, + * or NULL on error. + * + *
+ * Notes:
+ *      (1) See notes in pixScaleToGrayMipmap().
+ *      (2) This function suffers from aliasing effects that are
+ *          easily seen in document images.
+ * 
+ */ +PIX * +pixScaleMipmap(PIX *pixs1, + PIX *pixs2, + l_float32 scale) +{ +l_int32 ws1, hs1, ws2, hs2, wd, hd, wpls1, wpls2, wpld; +l_uint32 *datas1, *datas2, *datad; +PIX *pixd; + + PROCNAME("pixScaleMipmap"); + + if (!pixs1 || pixGetDepth(pixs1) != 8 || pixGetColormap(pixs1)) + return (PIX *)ERROR_PTR("pixs1 underdefined, not 8 bpp, or cmapped", + procName, NULL); + if (!pixs2 || pixGetDepth(pixs2) != 8 || pixGetColormap(pixs2)) + return (PIX *)ERROR_PTR("pixs2 underdefined, not 8 bpp, or cmapped", + procName, NULL); + pixGetDimensions(pixs1, &ws1, &hs1, NULL); + pixGetDimensions(pixs2, &ws2, &hs2, NULL); + if (scale > 1.0 || scale < 0.5) + return (PIX *)ERROR_PTR("scale not in [0.5, 1.0]", procName, NULL); + if (ws1 < 2 * ws2) + return (PIX *)ERROR_PTR("invalid width ratio", procName, NULL); + if (hs1 < 2 * hs2) + return (PIX *)ERROR_PTR("invalid height ratio", procName, NULL); + + /* Generate wd and hd from the lower resolution dimensions, + * to guarantee staying within both src images */ + datas1 = pixGetData(pixs1); + wpls1 = pixGetWpl(pixs1); + datas2 = pixGetData(pixs2); + wpls2 = pixGetWpl(pixs2); + wd = (l_int32)(2. * scale * pixGetWidth(pixs2)); + hd = (l_int32)(2. * scale * pixGetHeight(pixs2)); + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs1); + pixCopyResolution(pixd, pixs1); + pixScaleResolution(pixd, scale, scale); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + scaleMipmapLow(datad, wd, hd, wpld, datas1, wpls1, datas2, wpls2, scale); + return pixd; +} + + +/*------------------------------------------------------------------* + * Replicated (integer) expansion * + *------------------------------------------------------------------*/ +/*! + * \brief pixExpandReplicate() + * + * \param[in] pixs 1, 2, 4, 8, 16, 32 bpp + * \param[in] factor integer scale factor for replicative expansion + * \return pixd scaled up, or NULL on error. + */ +PIX * +pixExpandReplicate(PIX *pixs, + l_int32 factor) +{ +l_int32 w, h, d, wd, hd, wpls, wpld, start, i, j, k; +l_uint8 sval; +l_uint16 sval16; +l_uint32 sval32; +l_uint32 *lines, *datas, *lined, *datad; +PIX *pixd; + + PROCNAME("pixExpandReplicate"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) + return (PIX *)ERROR_PTR("depth not in {1,2,4,8,16,32}", procName, NULL); + if (factor <= 0) + return (PIX *)ERROR_PTR("factor <= 0; invalid", procName, NULL); + if (factor == 1) + return pixCopy(NULL, pixs); + + if (d == 1) + return pixExpandBinaryReplicate(pixs, factor, factor); + + wd = factor * w; + hd = factor * h; + if ((pixd = pixCreate(wd, hd, d)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyColormap(pixd, pixs); + pixCopyInputFormat(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + switch (d) { + case 2: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + factor * i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_DIBIT(lines, j); + start = factor * j; + for (k = 0; k < factor; k++) + SET_DATA_DIBIT(lined, start + k, sval); + } + for (k = 1; k < factor; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + break; + case 4: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + factor * i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_QBIT(lines, j); + start = factor * j; + for (k = 0; k < factor; k++) + SET_DATA_QBIT(lined, start + k, sval); + } + for (k = 1; k < factor; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + break; + case 8: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + factor * i * wpld; + for (j = 0; j < w; j++) { + sval = GET_DATA_BYTE(lines, j); + start = factor * j; + for (k = 0; k < factor; k++) + SET_DATA_BYTE(lined, start + k, sval); + } + for (k = 1; k < factor; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + break; + case 16: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + factor * i * wpld; + for (j = 0; j < w; j++) { + sval16 = GET_DATA_TWO_BYTES(lines, j); + start = factor * j; + for (k = 0; k < factor; k++) + SET_DATA_TWO_BYTES(lined, start + k, sval16); + } + for (k = 1; k < factor; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + break; + case 32: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + factor * i * wpld; + for (j = 0; j < w; j++) { + sval32 = *(lines + j); + start = factor * j; + for (k = 0; k < factor; k++) + *(lined + start + k) = sval32; + } + for (k = 1; k < factor; k++) + memcpy(lined + k * wpld, lined, 4 * wpld); + } + break; + default: + fprintf(stderr, "invalid depth\n"); + } + + if (d == 32 && pixGetSpp(pixs) == 4) + pixScaleAndTransferAlpha(pixd, pixs, (l_float32)factor, + (l_float32)factor); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Downscaling using min or max * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixScaleGrayMinMax() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] xfact x downscaling factor; integer + * \param[in] yfact y downscaling factor; integer + * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF + * \return pixd 8 bpp + * + *
+ * Notes:
+ *      (1) The downscaled pixels in pixd are the min, max or (max - min)
+ *          of the corresponding set of xfact * yfact pixels in pixs.
+ *      (2) Using L_CHOOSE_MIN is equivalent to a grayscale erosion,
+ *          using a brick Sel of size (xfact * yfact), followed by
+ *          subsampling within each (xfact * yfact) cell.  Using
+ *          L_CHOOSE_MAX is equivalent to the corresponding dilation.
+ *      (3) Using L_CHOOSE_MAXDIFF finds the difference between max
+ *          and min values in each cell.
+ *      (4) For the special case of downscaling by 2x in both directions,
+ *          pixScaleGrayMinMax2() is about 2x more efficient.
+ * 
+ */ +PIX * +pixScaleGrayMinMax(PIX *pixs, + l_int32 xfact, + l_int32 yfact, + l_int32 type) +{ +l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; +l_int32 minval, maxval, val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixScaleGrayMinMax"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + pixGetDimensions(pixs, &ws, &hs, NULL); + if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && + type != L_CHOOSE_MAXDIFF) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (xfact < 1 || yfact < 1) + return (PIX *)ERROR_PTR("xfact and yfact must be >= 1", procName, NULL); + + if (xfact == 2 && yfact == 2) + return pixScaleGrayMinMax2(pixs, type); + + wd = ws / xfact; + if (wd == 0) { /* single tile */ + wd = 1; + xfact = ws; + } + hd = hs / yfact; + if (hd == 0) { /* single tile */ + hd = 1; + yfact = hs; + } + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < hd; i++) { + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAXDIFF) { + minval = 255; + for (k = 0; k < yfact; k++) { + lines = datas + (yfact * i + k) * wpls; + for (m = 0; m < xfact; m++) { + val = GET_DATA_BYTE(lines, xfact * j + m); + if (val < minval) + minval = val; + } + } + } + if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAXDIFF) { + maxval = 0; + for (k = 0; k < yfact; k++) { + lines = datas + (yfact * i + k) * wpls; + for (m = 0; m < xfact; m++) { + val = GET_DATA_BYTE(lines, xfact * j + m); + if (val > maxval) + maxval = val; + } + } + } + if (type == L_CHOOSE_MIN) + SET_DATA_BYTE(lined, j, minval); + else if (type == L_CHOOSE_MAX) + SET_DATA_BYTE(lined, j, maxval); + else /* type == L_CHOOSE_MAXDIFF */ + SET_DATA_BYTE(lined, j, maxval - minval); + } + } + + return pixd; +} + + +/*! + * \brief pixScaleGrayMinMax2() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] type L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAXDIFF + * \return pixd 8 bpp downscaled by 2x + * + *
+ * Notes:
+ *      (1) Special version for 2x reduction.  The downscaled pixels
+ *          in pixd are the min, max or (max - min) of the corresponding
+ *          set of 4 pixels in pixs.
+ *      (2) The max and min operations are a special case (for levels 1
+ *          and 4) of grayscale analog to the binary rank scaling operation
+ *          pixReduceRankBinary2().  Note, however, that because of
+ *          the photometric definition that higher gray values are
+ *          lighter, the erosion-like L_CHOOSE_MIN will darken
+ *          the resulting image, corresponding to a threshold level 1
+ *          in the binary case.  Likewise, L_CHOOSE_MAX will lighten
+ *          the pixd, corresponding to a threshold level of 4.
+ *      (3) To choose any of the four rank levels in a 2x grayscale
+ *          reduction, use pixScaleGrayRank2().
+ *      (4) This runs at about 70 MPix/sec/GHz of source data for
+ *          erosion and dilation.
+ * 
+ */ +PIX * +pixScaleGrayMinMax2(PIX *pixs, + l_int32 type) +{ +l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k; +l_int32 minval, maxval; +l_int32 val[4]; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixScaleGrayMinMax2"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + pixGetDimensions(pixs, &ws, &hs, NULL); + if (ws < 2 || hs < 2) + return (PIX *)ERROR_PTR("too small: ws < 2 or hs < 2", procName, NULL); + if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && + type != L_CHOOSE_MAXDIFF) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + + wd = ws / 2; + hd = hs / 2; + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < hd; i++) { + lines = datas + 2 * i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + val[0] = GET_DATA_BYTE(lines, 2 * j); + val[1] = GET_DATA_BYTE(lines, 2 * j + 1); + val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); + val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); + if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAXDIFF) { + minval = 255; + for (k = 0; k < 4; k++) { + if (val[k] < minval) + minval = val[k]; + } + } + if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAXDIFF) { + maxval = 0; + for (k = 0; k < 4; k++) { + if (val[k] > maxval) + maxval = val[k]; + } + } + if (type == L_CHOOSE_MIN) + SET_DATA_BYTE(lined, j, minval); + else if (type == L_CHOOSE_MAX) + SET_DATA_BYTE(lined, j, maxval); + else /* type == L_CHOOSE_MAXDIFF */ + SET_DATA_BYTE(lined, j, maxval - minval); + } + } + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Grayscale downscaling using rank value * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixScaleGrayRankCascade() + * + * \param[in] pixs 8 bpp, not cmapped + * \param[in] level1, level2 ... + * \param[in] level3, level4 rank thresholds, in set {0, 1, 2, 3, 4} + * \return pixd 8 bpp, downscaled by up to 16x + * + *
+ * Notes:
+ *      (1) This performs up to four cascaded 2x rank reductions.
+ *      (2) Use level = 0 to truncate the cascade.
+ * 
+ */ +PIX * +pixScaleGrayRankCascade(PIX *pixs, + l_int32 level1, + l_int32 level2, + l_int32 level3, + l_int32 level4) +{ +PIX *pixt1, *pixt2, *pixt3, *pixt4; + + PROCNAME("pixScaleGrayRankCascade"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) + return (PIX *)ERROR_PTR("levels must not exceed 4", procName, NULL); + + if (level1 <= 0) { + L_WARNING("no reduction because level1 not > 0\n", procName); + return pixCopy(NULL, pixs); + } + + pixt1 = pixScaleGrayRank2(pixs, level1); + if (level2 <= 0) + return pixt1; + + pixt2 = pixScaleGrayRank2(pixt1, level2); + pixDestroy(&pixt1); + if (level3 <= 0) + return pixt2; + + pixt3 = pixScaleGrayRank2(pixt2, level3); + pixDestroy(&pixt2); + if (level4 <= 0) + return pixt3; + + pixt4 = pixScaleGrayRank2(pixt3, level4); + pixDestroy(&pixt3); + return pixt4; +} + + +/*! + * \brief pixScaleGrayRank2() + * + * \param[in] pixs 8 bpp, no cmap + * \param[in] rank 1 (darkest), 2, 3, 4 (lightest) + * \return pixd 8 bpp, downscaled by 2x + * + *
+ * Notes:
+ *      (1) Rank 2x reduction.  If rank == 1(4), the downscaled pixels
+ *          in pixd are the min(max) of the corresponding set of
+ *          4 pixels in pixs.  Values 2 and 3 are intermediate.
+ *      (2) This is the grayscale analog to the binary rank scaling operation
+ *          pixReduceRankBinary2().  Here, because of the photometric
+ *          definition that higher gray values are lighter, rank 1 gives
+ *          the darkest pixel, whereas rank 4 gives the lightest pixel.
+ *          This is opposite to the binary rank operation.
+ *      (3) For rank = 1 and 4, this calls pixScaleGrayMinMax2(),
+ *          which runs at about 70 MPix/sec/GHz of source data.
+ *          For rank 2 and 3, this runs 3x slower, at about 25 MPix/sec/GHz.
+ * 
+ */ +PIX * +pixScaleGrayRank2(PIX *pixs, + l_int32 rank) +{ +l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; +l_int32 minval, maxval, rankval, minindex, maxindex; +l_int32 val[4]; +l_int32 midval[4]; /* should only use 2 of these */ +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixScaleGrayRank2"); + + if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", + procName, NULL); + if (rank < 1 || rank > 4) + return (PIX *)ERROR_PTR("invalid rank", procName, NULL); + + if (rank == 1) + return pixScaleGrayMinMax2(pixs, L_CHOOSE_MIN); + if (rank == 4) + return pixScaleGrayMinMax2(pixs, L_CHOOSE_MAX); + + pixGetDimensions(pixs, &ws, &hs, NULL); + wd = ws / 2; + hd = hs / 2; + if ((pixd = pixCreate(wd, hd, 8)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixCopyInputFormat(pixd, pixs); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + for (i = 0; i < hd; i++) { + lines = datas + 2 * i * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + val[0] = GET_DATA_BYTE(lines, 2 * j); + val[1] = GET_DATA_BYTE(lines, 2 * j + 1); + val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); + val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); + minval = maxval = val[0]; + minindex = maxindex = 0; + for (k = 1; k < 4; k++) { + if (val[k] < minval) { + minval = val[k]; + minindex = k; + continue; + } + if (val[k] > maxval) { + maxval = val[k]; + maxindex = k; + } + } + for (k = 0, m = 0; k < 4; k++) { + if (k == minindex || k == maxindex) + continue; + midval[m++] = val[k]; + } + if (m > 2) /* minval == maxval; all val[k] are the same */ + rankval = minval; + else if (rank == 2) + rankval = L_MIN(midval[0], midval[1]); + else /* rank == 3 */ + rankval = L_MAX(midval[0], midval[1]); + SET_DATA_BYTE(lined, j, rankval); + } + } + + return pixd; +} + + +/*------------------------------------------------------------------------* + * Helper function for transferring alpha with scaling * + *------------------------------------------------------------------------*/ +/*! + * \brief pixScaleAndTransferAlpha() + * + * \param[in] pixd 32 bpp, scaled image + * \param[in] pixs 32 bpp, original unscaled image + * \param[in] scalex must be > 0.0 + * \param[in] scaley must be > 0.0 + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This scales the alpha component of pixs and inserts into pixd.
+ * 
+ */ +l_ok +pixScaleAndTransferAlpha(PIX *pixd, + PIX *pixs, + l_float32 scalex, + l_float32 scaley) +{ +PIX *pix1, *pix2; + + PROCNAME("pixScaleAndTransferAlpha"); + + if (!pixs || !pixd) + return ERROR_INT("pixs and pixd not both defined", procName, 1); + if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) + return ERROR_INT("pixs not 32 bpp and 4 spp", procName, 1); + if (pixGetDepth(pixd) != 32) + return ERROR_INT("pixd not 32 bpp", procName, 1); + + if (scalex == 1.0 && scaley == 1.0) { + pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); + return 0; + } + + pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); + pix2 = pixScale(pix1, scalex, scaley); + pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); + pixDestroy(&pix1); + pixDestroy(&pix2); + return 0; +} + + +/*------------------------------------------------------------------------* + * RGB scaling including alpha (blend) component and gamma transform * + *------------------------------------------------------------------------*/ +/*! + * \brief pixScaleWithAlpha() + * + * \param[in] pixs 32 bpp rgb or cmapped + * \param[in] scalex must be > 0.0 + * \param[in] scaley must be > 0.0 + * \param[in] pixg [optional] 8 bpp, can be null + * \param[in] fract between 0.0 and 1.0, with 0.0 fully transparent + * and 1.0 fully opaque + * \return pixd 32 bpp rgba, or NULL on error + * + *
+ * Notes:
+ *      (1) The alpha channel is transformed separately from pixs,
+ *          and aligns with it, being fully transparent outside the
+ *          boundary of the transformed pixs.  For pixels that are fully
+ *          transparent, a blending function like pixBlendWithGrayMask()
+ *          will give zero weight to corresponding pixels in pixs.
+ *      (2) Scaling is done with area mapping or linear interpolation,
+ *          depending on the scale factors.  Default sharpening is done.
+ *      (3) If pixg is NULL, it is generated as an alpha layer that is
+ *          partially opaque, using %fract.  Otherwise, it is cropped
+ *          to pixs if required, and %fract is ignored.  The alpha
+ *          channel in pixs is never used.
+ *      (4) Colormaps are removed to 32 bpp.
+ *      (5) The default setting for the border values in the alpha channel
+ *          is 0 (transparent) for the outermost ring of pixels and
+ *          (0.5 * fract * 255) for the second ring.  When blended over
+ *          a second image, this
+ *          (a) shrinks the visible image to make a clean overlap edge
+ *              with an image below, and
+ *          (b) softens the edges by weakening the aliasing there.
+ *          Use l_setAlphaMaskBorder() to change these values.
+ *      (6) A subtle use of gamma correction is to remove gamma correction
+ *          before scaling and restore it afterwards.  This is done
+ *          by sandwiching this function between a gamma/inverse-gamma
+ *          photometric transform:
+ *              pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255);
+ *              pixd = pixScaleWithAlpha(pixt, scalex, scaley, NULL, fract);
+ *              pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255);
+ *              pixDestroy(&pixt);
+ *          This has the side-effect of producing artifacts in the very
+ *          dark regions.
+ * 
+ */ +PIX * +pixScaleWithAlpha(PIX *pixs, + l_float32 scalex, + l_float32 scaley, + PIX *pixg, + l_float32 fract) +{ +l_int32 ws, hs, d, spp; +PIX *pixd, *pix32, *pixg2, *pixgs; + + PROCNAME("pixScaleWithAlpha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &ws, &hs, &d); + if (d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); + if (scalex <= 0.0 || scaley <= 0.0) + return (PIX *)ERROR_PTR("scale factor <= 0.0", procName, NULL); + if (pixg && pixGetDepth(pixg) != 8) { + L_WARNING("pixg not 8 bpp; using 'fract' transparent alpha\n", + procName); + pixg = NULL; + } + if (!pixg && (fract < 0.0 || fract > 1.0)) { + L_WARNING("invalid fract; using fully opaque\n", procName); + fract = 1.0; + } + if (!pixg && fract == 0.0) + L_WARNING("transparent alpha; image will not be blended\n", procName); + + /* Make sure input to scaling is 32 bpp rgb, and scale it */ + if (d != 32) + pix32 = pixConvertTo32(pixs); + else + pix32 = pixClone(pixs); + spp = pixGetSpp(pix32); + pixSetSpp(pix32, 3); /* ignore the alpha channel for scaling */ + pixd = pixScale(pix32, scalex, scaley); + pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ + pixDestroy(&pix32); + + /* Set up alpha layer with a fading border and scale it */ + if (!pixg) { + pixg2 = pixCreate(ws, hs, 8); + if (fract == 1.0) + pixSetAll(pixg2); + else if (fract > 0.0) + pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); + } else { + pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); + } + if (ws > 10 && hs > 10) { /* see note 4 */ + pixSetBorderRingVal(pixg2, 1, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); + pixSetBorderRingVal(pixg2, 2, + (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); + } + pixgs = pixScaleGeneral(pixg2, scalex, scaley, 0.0, 0); + + /* Combine into a 4 spp result */ + pixSetRGBComponent(pixd, pixgs, L_ALPHA_CHANNEL); + pixCopyInputFormat(pixd, pixs); + + pixDestroy(&pixg2); + pixDestroy(&pixgs); + return pixd; +} + + +/* ================================================================ * + * Low level static functions * + * ================================================================ */ + +/*------------------------------------------------------------------* + * Scale-to-gray 2x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray2Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] sumtab made from makeSumTabSG2() + * \param[in] valtab made from makeValTabSG2() + * \return 0 if OK; 1 on error. + * + * The output is processed in sets of 4 output bytes on a row, + * corresponding to 4 2x2 bit-blocks in the input image. + * Two lookup tables are used. The first, sumtab, gets the + * sum of ON pixels in 4 sets of two adjacent bits, + * storing the result in 4 adjacent bytes. After sums from + * two rows have been added, the second table, valtab, + * converts from the sum of ON pixels in the 2x2 block to + * an 8 bpp grayscale value between 0 for 4 bits ON + * and 255 for 0 bits ON. + */ +static void +scaleToGray2Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *sumtab, + l_uint8 *valtab) +{ +l_int32 i, j, l, k, m, wd4, extra; +l_uint32 sbyte1, sbyte2, sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * l indexes the source lines + * j indexes the dest bytes + * k indexes the source bytes + * We take two bytes from the source (in 2 lines of 8 pixels + * each) and convert them into four 8 bpp bytes of the dest. */ + wd4 = wd & 0xfffffffc; + extra = wd - wd4; + for (i = 0, l = 0; i < hd; i++, l += 2) { + lines = datas + l * wpls; + lined = datad + i * wpld; + for (j = 0, k = 0; j < wd4; j += 4, k++) { + sbyte1 = GET_DATA_BYTE(lines, k); + sbyte2 = GET_DATA_BYTE(lines + wpls, k); + sum = sumtab[sbyte1] + sumtab[sbyte2]; + SET_DATA_BYTE(lined, j, valtab[sum >> 24]); + SET_DATA_BYTE(lined, j + 1, valtab[(sum >> 16) & 0xff]); + SET_DATA_BYTE(lined, j + 2, valtab[(sum >> 8) & 0xff]); + SET_DATA_BYTE(lined, j + 3, valtab[sum & 0xff]); + } + if (extra > 0) { + sbyte1 = GET_DATA_BYTE(lines, k); + sbyte2 = GET_DATA_BYTE(lines + wpls, k); + sum = sumtab[sbyte1] + sumtab[sbyte2]; + for (m = 0; m < extra; m++) { + SET_DATA_BYTE(lined, j + m, + valtab[((sum >> (24 - 8 * m)) & 0xff)]); + } + } + + } + + return; +} + + +/*! + * \brief makeSumTabSG2() + * + * Returns a table of 256 l_uint32s, giving the four output + * 8-bit grayscale sums corresponding to 8 input bits of a binary + * image, for a 2x scale-to-gray op. The sums from two + * adjacent scanlines are then added and transformed to + * output four 8 bpp pixel values, using makeValTabSG2(). + */ +static l_uint32 * +makeSumTabSG2(void) +{ +l_int32 i; +l_int32 sum[] = {0, 1, 1, 2}; +l_uint32 *tab; + + PROCNAME("makeSumTabSG2"); + + if ((tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32))) == NULL) + return (l_uint32 *)ERROR_PTR("tab not made", procName, NULL); + + /* Pack the four sums separately in four bytes */ + for (i = 0; i < 256; i++) { + tab[i] = (sum[i & 0x3] | sum[(i >> 2) & 0x3] << 8 | + sum[(i >> 4) & 0x3] << 16 | sum[(i >> 6) & 0x3] << 24); + } + return tab; +} + + +/*! + * \brief makeValTabSG2() + * + * Returns an 8 bit value for the sum of ON pixels + * in a 2x2 square, according to + * + * val = 255 - (255 * sum)/4 + * + * where sum is in set {0,1,2,3,4} + */ +static l_uint8 * +makeValTabSG2(void) +{ +l_int32 i; +l_uint8 *tab; + + PROCNAME("makeValTabSG2"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(5, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + for (i = 0; i < 5; i++) + tab[i] = 255 - (i * 255) / 4; + return tab; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray 3x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray3Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] sumtab made from makeSumTabSG3() + * \param[in] valtab made from makeValTabSG3() + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *  Each set of 8 3x3 bit-blocks in the source image, which
+ *  consist of 72 pixels arranged 24 pixels wide by 3 scanlines,
+ *  is converted to a row of 8 8-bit pixels in the dest image.
+ *  These 72 pixels of the input image are runs of 24 pixels
+ *  in three adjacent scanlines.  Each run of 24 pixels is
+ *  stored in the 24 LSbits of a 32-bit word.  We use 2 LUTs.
+ *  The first, sumtab, takes 6 of these bits and stores
+ *  sum, taken 3 bits at a time, in two bytes.  (See
+ *  makeSumTabSG3).  This is done for each of the 3 scanlines,
+ *  and the results are added.  We now have the sum of ON pixels
+ *  in the first two 3x3 blocks in two bytes.  The valtab LUT
+ *  then converts these values (which go from 0 to 9) to
+ *  grayscale values between between 255 and 0.  (See makeValTabSG3).
+ *  This process is repeated for each of the other 3 sets of
+ *  6x3 input pixels, giving 8 output pixels in total.
+ *
+ *  Note: because the input image is processed in groups of
+ *        24 x 3 pixels, the process clips the input height to
+ *        (h - h % 3) and the input width to (w - w % 24).
+ * 
+ */ +static void +scaleToGray3Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *sumtab, + l_uint8 *valtab) +{ +l_int32 i, j, l, k; +l_uint32 threebytes1, threebytes2, threebytes3, sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * l indexes the source lines + * j indexes the dest bytes + * k indexes the source bytes + * We take 9 bytes from the source (72 binary pixels + * in three lines of 24 pixels each) and convert it + * into 8 bytes of the dest (8 8bpp pixels in one line) */ + for (i = 0, l = 0; i < hd; i++, l += 3) { + lines = datas + l * wpls; + lined = datad + i * wpld; + for (j = 0, k = 0; j < wd; j += 8, k += 3) { + threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | + (GET_DATA_BYTE(lines, k + 1) << 8) | + GET_DATA_BYTE(lines, k + 2); + threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | + (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + wpls, k + 2); + threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | + (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + 2 * wpls, k + 2); + + sum = sumtab[(threebytes1 >> 18)] + + sumtab[(threebytes2 >> 18)] + + sumtab[(threebytes3 >> 18)]; + SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); + SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); + + sum = sumtab[((threebytes1 >> 12) & 0x3f)] + + sumtab[((threebytes2 >> 12) & 0x3f)] + + sumtab[((threebytes3 >> 12) & 0x3f)]; + SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 2)]); + SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); + + sum = sumtab[((threebytes1 >> 6) & 0x3f)] + + sumtab[((threebytes2 >> 6) & 0x3f)] + + sumtab[((threebytes3 >> 6) & 0x3f)]; + SET_DATA_BYTE(lined, j + 4, valtab[GET_DATA_BYTE(&sum, 2)]); + SET_DATA_BYTE(lined, j + 5, valtab[GET_DATA_BYTE(&sum, 3)]); + + sum = sumtab[(threebytes1 & 0x3f)] + + sumtab[(threebytes2 & 0x3f)] + + sumtab[(threebytes3 & 0x3f)]; + SET_DATA_BYTE(lined, j + 6, valtab[GET_DATA_BYTE(&sum, 2)]); + SET_DATA_BYTE(lined, j + 7, valtab[GET_DATA_BYTE(&sum, 3)]); + } + } + + return; +} + + + +/*! + * \brief makeSumTabSG3() + * + * Returns a table of 64 l_uint32s, giving the two output + * 8-bit grayscale sums corresponding to 6 input bits of a binary + * image, for a 3x scale-to-gray op. In practice, this would + * be used three times (on adjacent scanlines), and the sums would + * be added and then transformed to output 8 bpp pixel values, + * using makeValTabSG3(). + */ +static l_uint32 * +makeSumTabSG3(void) +{ +l_int32 i; +l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3}; +l_uint32 *tab; + + PROCNAME("makeSumTabSG3"); + + if ((tab = (l_uint32 *)LEPT_CALLOC(64, sizeof(l_uint32))) == NULL) + return (l_uint32 *)ERROR_PTR("tab not made", procName, NULL); + + /* Pack the two sums separately in two bytes */ + for (i = 0; i < 64; i++) { + tab[i] = (sum[i & 0x07]) | (sum[(i >> 3) & 0x07] << 8); + } + return tab; +} + + +/*! + * \brief makeValTabSG3() + * + * Returns an 8 bit value for the sum of ON pixels + * in a 3x3 square, according to + * val = 255 - (255 * sum)/9 + * where sum is in set {0, ... ,9} + */ +static l_uint8 * +makeValTabSG3(void) +{ +l_int32 i; +l_uint8 *tab; + + PROCNAME("makeValTabSG3"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(10, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + for (i = 0; i < 10; i++) + tab[i] = 0xff - (i * 255) / 9; + return tab; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray 4x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray4Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] sumtab made from makeSumTabSG4() + * \param[in] valtab made from makeValTabSG4() + * \return 0 if OK; 1 on error. + * + * The output is processed in sets of 2 output bytes on a row, + * corresponding to 2 4x4 bit-blocks in the input image. + * Two lookup tables are used. The first, sumtab, gets the + * sum of ON pixels in two sets of four adjacent bits, + * storing the result in 2 adjacent bytes. After sums from + * four rows have been added, the second table, valtab, + * converts from the sum of ON pixels in the 4x4 block to + * an 8 bpp grayscale value between 0 for 16 bits ON + * and 255 for 0 bits ON. + */ +static void +scaleToGray4Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_uint32 *sumtab, + l_uint8 *valtab) +{ +l_int32 i, j, l, k; +l_uint32 sbyte1, sbyte2, sbyte3, sbyte4, sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * l indexes the source lines + * j indexes the dest bytes + * k indexes the source bytes + * We take four bytes from the source (in 4 lines of 8 pixels + * each) and convert it into two 8 bpp bytes of the dest. */ + for (i = 0, l = 0; i < hd; i++, l += 4) { + lines = datas + l * wpls; + lined = datad + i * wpld; + for (j = 0, k = 0; j < wd; j += 2, k++) { + sbyte1 = GET_DATA_BYTE(lines, k); + sbyte2 = GET_DATA_BYTE(lines + wpls, k); + sbyte3 = GET_DATA_BYTE(lines + 2 * wpls, k); + sbyte4 = GET_DATA_BYTE(lines + 3 * wpls, k); + sum = sumtab[sbyte1] + sumtab[sbyte2] + + sumtab[sbyte3] + sumtab[sbyte4]; + SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); + SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); + } + } + + return; +} + + +/*! + * \brief makeSumTabSG4() + * + * Returns a table of 256 l_uint32s, giving the two output + * 8-bit grayscale sums corresponding to 8 input bits of a binary + * image, for a 4x scale-to-gray op. The sums from four + * adjacent scanlines are then added and transformed to + * output 8 bpp pixel values, using makeValTabSG4(). + */ +static l_uint32 * +makeSumTabSG4(void) +{ +l_int32 i; +l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; +l_uint32 *tab; + + PROCNAME("makeSumTabSG4"); + + if ((tab = (l_uint32 *)LEPT_CALLOC(256, sizeof(l_uint32))) == NULL) + return (l_uint32 *)ERROR_PTR("tab not made", procName, NULL); + + /* Pack the two sums separately in two bytes */ + for (i = 0; i < 256; i++) { + tab[i] = (sum[i & 0xf]) | (sum[(i >> 4) & 0xf] << 8); + } + return tab; +} + + +/*! + * \brief makeValTabSG4() + * + * Returns an 8 bit value for the sum of ON pixels + * in a 4x4 square, according to + * + * val = 255 - (255 * sum)/16 + * + * where sum is in set {0, ... ,16} + */ +static l_uint8 * +makeValTabSG4(void) +{ +l_int32 i; +l_uint8 *tab; + + PROCNAME("makeValTabSG4"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(17, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + for (i = 0; i < 17; i++) + tab[i] = 0xff - (i * 255) / 16; + return tab; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray 6x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray6Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] tab8 made from makePixelSumTab8() + * \param[in] valtab made from makeValTabSG6() + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *  Each set of 4 6x6 bit-blocks in the source image, which
+ *  consist of 144 pixels arranged 24 pixels wide by 6 scanlines,
+ *  is converted to a row of 4 8-bit pixels in the dest image.
+ *  These 144 pixels of the input image are runs of 24 pixels
+ *  in six adjacent scanlines.  Each run of 24 pixels is
+ *  stored in the 24 LSbits of a 32-bit word.  We use 2 LUTs.
+ *  The first, tab8, takes 6 of these bits and stores
+ *  sum in one byte.  This is done for each of the 6 scanlines,
+ *  and the results are added.
+ *  We now have the sum of ON pixels in the first 6x6 block.  The
+ *  valtab LUT then converts these values (which go from 0 to 36) to
+ *  grayscale values between between 255 and 0.  (See makeValTabSG6).
+ *  This process is repeated for each of the other 3 sets of
+ *  6x6 input pixels, giving 4 output pixels in total.
+ *
+ *  Note: because the input image is processed in groups of
+ *        24 x 6 pixels, the process clips the input height to
+ *        (h - h % 6) and the input width to (w - w % 24).
+ *
+ * 
+ */ +static void +scaleToGray6Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 *tab8, + l_uint8 *valtab) +{ +l_int32 i, j, l, k; +l_uint32 threebytes1, threebytes2, threebytes3; +l_uint32 threebytes4, threebytes5, threebytes6, sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * l indexes the source lines + * j indexes the dest bytes + * k indexes the source bytes + * We take 18 bytes from the source (144 binary pixels + * in six lines of 24 pixels each) and convert it + * into 4 bytes of the dest (four 8 bpp pixels in one line) */ + for (i = 0, l = 0; i < hd; i++, l += 6) { + lines = datas + l * wpls; + lined = datad + i * wpld; + for (j = 0, k = 0; j < wd; j += 4, k += 3) { + /* First grab the 18 bytes, 3 at a time, and put each set + * of 3 bytes into the LS bytes of a 32-bit word. */ + threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | + (GET_DATA_BYTE(lines, k + 1) << 8) | + GET_DATA_BYTE(lines, k + 2); + threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | + (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + wpls, k + 2); + threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | + (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + 2 * wpls, k + 2); + threebytes4 = (GET_DATA_BYTE(lines + 3 * wpls, k) << 16) | + (GET_DATA_BYTE(lines + 3 * wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + 3 * wpls, k + 2); + threebytes5 = (GET_DATA_BYTE(lines + 4 * wpls, k) << 16) | + (GET_DATA_BYTE(lines + 4 * wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + 4 * wpls, k + 2); + threebytes6 = (GET_DATA_BYTE(lines + 5 * wpls, k) << 16) | + (GET_DATA_BYTE(lines + 5 * wpls, k + 1) << 8) | + GET_DATA_BYTE(lines + 5 * wpls, k + 2); + + /* Sum first set of 36 bits and convert to 0-255 */ + sum = tab8[(threebytes1 >> 18)] + + tab8[(threebytes2 >> 18)] + + tab8[(threebytes3 >> 18)] + + tab8[(threebytes4 >> 18)] + + tab8[(threebytes5 >> 18)] + + tab8[(threebytes6 >> 18)]; + SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 3)]); + + /* Ditto for second set */ + sum = tab8[((threebytes1 >> 12) & 0x3f)] + + tab8[((threebytes2 >> 12) & 0x3f)] + + tab8[((threebytes3 >> 12) & 0x3f)] + + tab8[((threebytes4 >> 12) & 0x3f)] + + tab8[((threebytes5 >> 12) & 0x3f)] + + tab8[((threebytes6 >> 12) & 0x3f)]; + SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); + + sum = tab8[((threebytes1 >> 6) & 0x3f)] + + tab8[((threebytes2 >> 6) & 0x3f)] + + tab8[((threebytes3 >> 6) & 0x3f)] + + tab8[((threebytes4 >> 6) & 0x3f)] + + tab8[((threebytes5 >> 6) & 0x3f)] + + tab8[((threebytes6 >> 6) & 0x3f)]; + SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 3)]); + + sum = tab8[(threebytes1 & 0x3f)] + + tab8[(threebytes2 & 0x3f)] + + tab8[(threebytes3 & 0x3f)] + + tab8[(threebytes4 & 0x3f)] + + tab8[(threebytes5 & 0x3f)] + + tab8[(threebytes6 & 0x3f)]; + SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); + } + } + return; +} + + +/*! + * \brief makeValTabSG6() + * + * Returns an 8 bit value for the sum of ON pixels + * in a 6x6 square, according to + * val = 255 - (255 * sum)/36 + * where sum is in set {0, ... ,36} + */ +static l_uint8 * +makeValTabSG6(void) +{ +l_int32 i; +l_uint8 *tab; + + PROCNAME("makeValTabSG6"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(37, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + for (i = 0; i < 37; i++) + tab[i] = 0xff - (i * 255) / 36; + return tab; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray 8x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray8Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] tab8 made from makePixelSumTab8() + * \param[in] valtab made from makeValTabSG8() + * \return 0 if OK; 1 on error. + * + * The output is processed one dest byte at a time, + * corresponding to 8 rows of src bytes in the input image. + * Two lookup tables are used. The first, tab8, gets the + * sum of ON pixels in a byte. After sums from 8 rows have + * been added, the second table, valtab, converts from this + * value which is between 0 and 64 to an 8 bpp grayscale + * value between 0 for all 64 bits ON) and 255 (for 0 bits ON. + */ +static void +scaleToGray8Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 *tab8, + l_uint8 *valtab) +{ +l_int32 i, j, k; +l_int32 sbyte0, sbyte1, sbyte2, sbyte3, sbyte4, sbyte5, sbyte6, sbyte7, sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * k indexes the source lines + * j indexes the src and dest bytes + * We take 8 bytes from the source (in 8 lines of 8 pixels + * each) and convert it into one 8 bpp byte of the dest. */ + for (i = 0, k = 0; i < hd; i++, k += 8) { + lines = datas + k * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + sbyte0 = GET_DATA_BYTE(lines, j); + sbyte1 = GET_DATA_BYTE(lines + wpls, j); + sbyte2 = GET_DATA_BYTE(lines + 2 * wpls, j); + sbyte3 = GET_DATA_BYTE(lines + 3 * wpls, j); + sbyte4 = GET_DATA_BYTE(lines + 4 * wpls, j); + sbyte5 = GET_DATA_BYTE(lines + 5 * wpls, j); + sbyte6 = GET_DATA_BYTE(lines + 6 * wpls, j); + sbyte7 = GET_DATA_BYTE(lines + 7 * wpls, j); + sum = tab8[sbyte0] + tab8[sbyte1] + + tab8[sbyte2] + tab8[sbyte3] + + tab8[sbyte4] + tab8[sbyte5] + + tab8[sbyte6] + tab8[sbyte7]; + SET_DATA_BYTE(lined, j, valtab[sum]); + } + } + + return; +} + + +/*! + * \brief makeValTabSG8() + * + * Returns an 8 bit value for the sum of ON pixels + * in an 8x8 square, according to + * val = 255 - (255 * sum)/64 + * where sum is in set {0, ... ,64} + */ +static l_uint8 * +makeValTabSG8(void) +{ +l_int32 i; +l_uint8 *tab; + + PROCNAME("makeValTabSG8"); + + if ((tab = (l_uint8 *)LEPT_CALLOC(65, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); + for (i = 0; i < 65; i++) + tab[i] = 0xff - (i * 255) / 64; + return tab; +} + + +/*------------------------------------------------------------------* + * Scale-to-gray 16x * + *------------------------------------------------------------------*/ +/*! + * \brief scaleToGray16Low() + * + * \param[in] datad dest data + * \param[in] wd, hd dest width, height + * \param[in] wpld dest words/line + * \param[in] datas src data + * \param[in] wpls src words/line + * \param[in] tab8 made from makePixelSumTab8() + * \return 0 if OK; 1 on error. + * + * The output is processed one dest byte at a time, corresponding + * to 16 rows consisting each of 2 src bytes in the input image. + * This uses one lookup table, tab8, which gives the sum of + * ON pixels in a byte. After summing for all ON pixels in the + * 32 src bytes, which is between 0 and 256, this is converted + * to an 8 bpp grayscale value between 0 for 255 or 256 bits ON + * and 255 for 0 bits ON. + */ +static void +scaleToGray16Low(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas, + l_int32 wpls, + l_int32 *tab8) +{ +l_int32 i, j, k, m; +l_int32 sum; +l_uint32 *lines, *lined; + + /* i indexes the dest lines + * k indexes the source lines + * j indexes the dest bytes + * m indexes the src bytes + * We take 32 bytes from the source (in 16 lines of 16 pixels + * each) and convert it into one 8 bpp byte of the dest. */ + for (i = 0, k = 0; i < hd; i++, k += 16) { + lines = datas + k * wpls; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + m = 2 * j; + sum = tab8[GET_DATA_BYTE(lines, m)]; + sum += tab8[GET_DATA_BYTE(lines, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m + 1)]; + sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m)]; + sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m + 1)]; + sum = L_MIN(sum, 255); + SET_DATA_BYTE(lined, j, 255 - sum); + } + } + + return; +} + + + +/*------------------------------------------------------------------* + * Grayscale mipmap * + *------------------------------------------------------------------*/ +/*! + * \brief scaleMipmapLow() + * + * See notes in scale.c for pixScaleToGrayMipmap(). This function + * is here for pedagogical reasons. It gives poor results on document + * images because of aliasing. + */ +static l_int32 +scaleMipmapLow(l_uint32 *datad, + l_int32 wd, + l_int32 hd, + l_int32 wpld, + l_uint32 *datas1, + l_int32 wpls1, + l_uint32 *datas2, + l_int32 wpls2, + l_float32 red) +{ +l_int32 i, j, val1, val2, val, row2, col2; +l_int32 *srow, *scol; +l_uint32 *lines1, *lines2, *lined; +l_float32 ratio, w1, w2; + + PROCNAME("scaleMipmapLow"); + + /* Clear dest */ + memset(datad, 0, 4LL * wpld * hd); + + /* Each dest pixel at (j,i) is computed by interpolating + between the two src images at the corresponding location. + We store the UL corner locations of the square of + src pixels in thelower-resolution image that correspond + to dest pixel (j,i). The are labeled by the arrays + srow[i], scol[j]. The UL corner locations of the higher + resolution src pixels are obtained from these arrays + by multiplying by 2. */ + if ((srow = (l_int32 *)LEPT_CALLOC(hd, sizeof(l_int32))) == NULL) + return ERROR_INT("srow not made", procName, 1); + if ((scol = (l_int32 *)LEPT_CALLOC(wd, sizeof(l_int32))) == NULL) { + LEPT_FREE(srow); + return ERROR_INT("scol not made", procName, 1); + } + ratio = 1. / (2. * red); /* 0.5 for red = 1, 1 for red = 0.5 */ + for (i = 0; i < hd; i++) + srow[i] = (l_int32)(ratio * i); + for (j = 0; j < wd; j++) + scol[j] = (l_int32)(ratio * j); + + /* Get weights for linear interpolation: these are the + * 'distances' of the dest image plane from the two + * src image planes. */ + w1 = 2. * red - 1.; /* w1 --> 1 as red --> 1 */ + w2 = 1. - w1; + + /* For each dest pixel, compute linear interpolation */ + for (i = 0; i < hd; i++) { + row2 = srow[i]; + lines1 = datas1 + 2 * row2 * wpls1; + lines2 = datas2 + row2 * wpls2; + lined = datad + i * wpld; + for (j = 0; j < wd; j++) { + col2 = scol[j]; + val1 = GET_DATA_BYTE(lines1, 2 * col2); + val2 = GET_DATA_BYTE(lines2, col2); + val = (l_int32)(w1 * val1 + w2 * val2); + SET_DATA_BYTE(lined, j, val); + } + } + + LEPT_FREE(srow); + LEPT_FREE(scol); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/seedfill.c b/3rdparty/hgOCR/leptonica/seedfill.c new file mode 100644 index 00000000..a7030996 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/seedfill.c @@ -0,0 +1,3454 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file seedfill.c + *
+ *
+ *      Binary seedfill (source: Luc Vincent)
+ *               PIX         *pixSeedfillBinary()
+ *               PIX         *pixSeedfillBinaryRestricted()
+ *               static void  seedfillBinaryLow()
+ *
+ *      Applications of binary seedfill to find and fill holes,
+ *      remove c.c. touching the border and fill bg from border:
+ *               PIX         *pixHolesByFilling()
+ *               PIX         *pixFillClosedBorders()
+ *               PIX         *pixExtractBorderConnComps()
+ *               PIX         *pixRemoveBorderConnComps()
+ *               PIX         *pixFillBgFromBorder()
+ *
+ *      Hole-filling of components to bounding rectangle
+ *               PIX         *pixFillHolesToBoundingRect()
+ *
+ *      Gray seedfill (source: Luc Vincent:fast-hybrid-grayscale-reconstruction)
+ *               l_int32      pixSeedfillGray()
+ *               l_int32      pixSeedfillGrayInv()
+ *               static void  seedfillGrayLow()
+ *               static void  seedfillGrayInvLow()
+
+ *
+ *      Gray seedfill (source: Luc Vincent: sequential-reconstruction algorithm)
+ *               l_int32      pixSeedfillGraySimple()
+ *               l_int32      pixSeedfillGrayInvSimple()
+ *               static void  seedfillGrayLowSimple()
+ *               static void  seedfillGrayInvLowSimple()
+ *
+ *      Gray seedfill variations
+ *               PIX         *pixSeedfillGrayBasin()
+ *
+ *      Distance function (source: Luc Vincent)
+ *               PIX         *pixDistanceFunction()
+ *               static void  distanceFunctionLow()
+ *
+ *      Seed spread (based on distance function)
+ *               PIX         *pixSeedspread()
+ *               static void  seedspreadLow()
+ *
+ *      Local extrema:
+ *               l_int32      pixLocalExtrema()
+ *            static l_int32  pixQualifyLocalMinima()
+ *               l_int32      pixSelectedLocalExtrema()
+ *               PIX         *pixFindEqualValues()
+ *
+ *      Selection of minima in mask of connected components
+ *               PTA         *pixSelectMinInConnComp()
+ *
+ *      Removal of seeded connected components from a mask
+ *               PIX         *pixRemoveSeededComponents()
+ *
+ *
+ *           ITERATIVE RASTER-ORDER SEEDFILL
+ *
+ *      The basic method in the Vincent seedfill (aka reconstruction)
+ *      algorithm is simple.  We describe here the situation for
+ *      binary seedfill.  Pixels are sampled in raster order in
+ *      the seed image.  If they are 4-connected to ON pixels
+ *      either directly above or to the left, and are not masked
+ *      out by the mask image, they are turned on (or remain on).
+ *      (Ditto for 8-connected, except you need to check 3 pixels
+ *      on the previous line as well as the pixel to the left
+ *      on the current line.  This is extra computational work
+ *      for relatively little gain, so it is preferable
+ *      in most situations to use the 4-connected version.)
+ *      The algorithm proceeds from UR to LL of the image, and
+ *      then reverses and sweeps up from LL to UR.
+ *      These double sweeps are iterated until there is no change.
+ *      At this point, the seed has entirely filled the region it
+ *      is allowed to, as delimited by the mask image.
+ *
+ *      The grayscale seedfill is a straightforward generalization
+ *      of the binary seedfill, and is described in seedfillLowGray().
+ *
+ *      For some applications, the filled seed will later be OR'd
+ *      with the negative of the mask.   This is used, for example,
+ *      when you flood fill into a 4-connected region of OFF pixels
+ *      and you want the result after those pixels are turned ON.
+ *
+ *      Note carefully that the mask we use delineates which pixels
+ *      are allowed to be ON as the seed is filled.  We will call this
+ *      a "filling mask".  As the seed expands, it is repeatedly
+ *      ANDed with the filling mask: s & fm.  The process can equivalently
+ *      be formulated using the inverse of the filling mask, which
+ *      we will call a "blocking mask": bm = ~fm.   As the seed
+ *      expands, the blocking mask is repeatedly used to prevent
+ *      the seed from expanding into the blocking mask.  This is done
+ *      by set subtracting the blocking mask from the expanded seed:
+ *      s - bm.  Set subtraction of the blocking mask is equivalent
+ *      to ANDing with the inverse of the blocking mask: s & (~bm).
+ *      But from the inverse relation between blocking and filling
+ *      masks, this is equal to s & fm, which proves the equivalence.
+ *
+ *      For efficiency, the pixels can be taken in larger units
+ *      for processing, but still in raster order.  It is natural
+ *      to take them in 32-bit words.  The outline of the work
+ *      to be done for 4-cc (not including special cases for boundary
+ *      words, such as the first line or the last word in each line)
+ *      is as follows.  Let the filling mask be m.  The
+ *      seed is to fill "under" the mask; i.e., limited by an AND
+ *      with the mask.  Let the current word be w, the word
+ *      in the line above be wa, and the previous word in the
+ *      current line be wp.   Let t be a temporary word that
+ *      is used in computation.  Note that masking is performed by
+ *      w & m.  (If we had instead used a "blocking" mask, we
+ *      would perform masking by the set subtraction operation,
+ *      w - m, which is defined to be w & ~m.)
+ *
+ *      The entire operation can be implemented with shifts,
+ *      logical operations and tests.  For each word in the seed image
+ *      there are two steps.  The first step is to OR the word with
+ *      the word above and with the rightmost pixel in wp (call it "x").
+ *      Because wp is shifted one pixel to its right, "x" is ORed
+ *      to the leftmost pixel of w.  We then clip to the ON pixels in
+ *      the mask.  The result is
+ *               t  <--  (w | wa | x000... ) & m
+ *      We've now finished taking data from above and to the left.
+ *      The second step is to allow filling to propagate horizontally
+ *      in t, always making sure that it is properly masked at each
+ *      step.  So if filling can be done (i.e., t is neither all 0s
+ *      nor all 1s), iteratively take:
+ *           t  <--  (t | (t >> 1) | (t << 1)) & m
+ *      until t stops changing.  Then write t back into w.
+ *
+ *      Finally, the boundary conditions require we note that in doing
+ *      the above steps:
+ *          (a) The words in the first row have no wa
+ *          (b) The first word in each row has no wp in that row
+ *          (c) The last word in each row must be masked so that
+ *              pixels don't propagate beyond the right edge of the
+ *              actual image.  (This is easily accomplished by
+ *              setting the out-of-bound pixels in m to OFF.)
+ * 
+ */ + +#include +#include "allheaders.h" + +struct L_Pixel +{ + l_int32 x; + l_int32 y; +}; +typedef struct L_Pixel L_PIXEL; + +static void seedfillBinaryLow(l_uint32 *datas, l_int32 hs, l_int32 wpls, + l_uint32 *datam, l_int32 hm, l_int32 wplm, + l_int32 connectivity); +static void seedfillGrayLow(l_uint32 *datas, l_int32 w, l_int32 h, + l_int32 wpls, l_uint32 *datam, l_int32 wplm, + l_int32 connectivity); +static void seedfillGrayInvLow(l_uint32 *datas, l_int32 w, l_int32 h, + l_int32 wpls, l_uint32 *datam, l_int32 wplm, + l_int32 connectivity); +static void seedfillGrayLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, + l_int32 wpls, l_uint32 *datam, l_int32 wplm, + l_int32 connectivity); +static void seedfillGrayInvLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, + l_int32 wpls, l_uint32 *datam, + l_int32 wplm, l_int32 connectivity); +static void distanceFunctionLow(l_uint32 *datad, l_int32 w, l_int32 h, + l_int32 d, l_int32 wpld, l_int32 connectivity); +static void seedspreadLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, + l_uint32 *datat, l_int32 wplt, l_int32 connectivity); + + +static l_int32 pixQualifyLocalMinima(PIX *pixs, PIX *pixm, l_int32 maxval); + +#ifndef NO_CONSOLE_IO +#define DEBUG_PRINT_ITERS 0 +#endif /* ~NO_CONSOLE_IO */ + + /* Two-way (UL --> LR, LR --> UL) sweep iterations; typically need only 4 */ +static const l_int32 MaxIters = 40; + + +/*-----------------------------------------------------------------------* + * Vincent's Iterative Binary Seedfill method * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSeedfillBinary() + * + * \param[in] pixd [optional]; can be null, equal to pixs, + * or different from pixs; 1 bpp + * \param[in] pixs 1 bpp seed + * \param[in] pixm 1 bpp filling mask + * \param[in] connectivity 4 or 8 + * \return pixd always + * + *
+ * Notes:
+ *      (1) This is for binary seedfill (aka "binary reconstruction").
+ *      (2) There are 3 cases:
+ *            (a) pixd == null (make a new pixd)
+ *            (b) pixd == pixs (in-place)
+ *            (c) pixd != pixs
+ *      (3) If you know the case, use these patterns for clarity:
+ *            (a) pixd = pixSeedfillBinary(NULL, pixs, ...);
+ *            (b) pixSeedfillBinary(pixs, pixs, ...);
+ *            (c) pixSeedfillBinary(pixd, pixs, ...);
+ *      (4) The resulting pixd contains the filled seed.  For some
+ *          applications you want to OR it with the inverse of
+ *          the filling mask.
+ *      (5) The input seed and mask images can be different sizes, but
+ *          in typical use the difference, if any, would be only
+ *          a few pixels in each direction.  If the sizes differ,
+ *          the clipping is handled by the low-level function
+ *          seedfillBinaryLow().
+ * 
+ */ +PIX * +pixSeedfillBinary(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_int32 connectivity) +{ +l_int32 i, boolval; +l_int32 hd, hm, wpld, wplm; +l_uint32 *datad, *datam; +PIX *pixt; + + PROCNAME("pixSeedfillBinary"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, pixd); + if (!pixm || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, pixd); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, pixd); + + /* Prepare pixd as a copy of pixs if not identical */ + if ((pixd = pixCopy(pixd, pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + + /* pixt is used to test for completion */ + if ((pixt = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixt not made", procName, pixd); + + hd = pixGetHeight(pixd); + hm = pixGetHeight(pixm); /* included so seedfillBinaryLow() can clip */ + datad = pixGetData(pixd); + datam = pixGetData(pixm); + wpld = pixGetWpl(pixd); + wplm = pixGetWpl(pixm); + + pixSetPadBits(pixm, 0); + + for (i = 0; i < MaxIters; i++) { + pixCopy(pixt, pixd); + seedfillBinaryLow(datad, hd, wpld, datam, hm, wplm, connectivity); + pixEqual(pixd, pixt, &boolval); + if (boolval == 1) { +#if DEBUG_PRINT_ITERS + fprintf(stderr, "Binary seed fill converged: %d iters\n", i + 1); +#endif /* DEBUG_PRINT_ITERS */ + break; + } + } + + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief pixSeedfillBinaryRestricted() + * + * \param[in] pixd [optional]; can be null, equal to pixs, + * or different from pixs; 1 bpp + * \param[in] pixs 1 bpp seed + * \param[in] pixm 1 bpp filling mask + * \param[in] connectivity 4 or 8 + * \param[in] xmax max distance in x direction of fill into mask + * \param[in] ymax max distance in y direction of fill into mask + * \return pixd always + * + *
+ * Notes:
+ *      (1) See usage for pixSeedfillBinary(), which has unrestricted fill.
+ *          In pixSeedfillBinary(), the filling distance is unrestricted
+ *          and can be larger than pixs, depending on the topology of
+ *          th mask.
+ *      (2) There are occasions where it is useful not to permit the
+ *          fill to go more than a certain distance into the mask.
+ *          %xmax specifies the maximum horizontal distance allowed
+ *          in the fill; %ymax does likewise in the vertical direction.
+ *      (3) Operationally, the max "distance" allowed for the fill
+ *          is a linear distance from the original seed, independent
+ *          of the actual mask topology.
+ *      (4) Another formulation of this problem, not implemented,
+ *          would use the manhattan distance from the seed, as
+ *          determined by a breadth-first search starting at the seed
+ *          boundaries and working outward where the mask fg allows.
+ *          How this might use the constraints of separate xmax and ymax
+ *          is not clear.
+ * 
+ */ +PIX * +pixSeedfillBinaryRestricted(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_int32 connectivity, + l_int32 xmax, + l_int32 ymax) +{ +l_int32 w, h; +PIX *pix1, *pix2; + + PROCNAME("pixSeedfillBinaryRestricted"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, pixd); + if (!pixm || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, pixd); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, pixd); + if (xmax == 0 && ymax == 0) /* no filling permitted */ + return pixClone(pixs); + if (xmax < 0 || ymax < 0) { + L_ERROR("xmax and ymax must be non-negative", procName); + return pixClone(pixs); + } + + /* Full fill from the seed into the mask. */ + if ((pix1 = pixSeedfillBinary(NULL, pixs, pixm, connectivity)) == NULL) + return (PIX *)ERROR_PTR("pix1 not made", procName, pixd); + + /* Dilate the seed. This gives the maximal region where changes + * are permitted. Invert to get the region where pixs is + * not allowed to change. */ + pix2 = pixDilateCompBrick(NULL, pixs, 2 * xmax + 1, 2 * ymax + 1); + pixInvert(pix2, pix2); + + /* Blank the region of pix1 specified by the fg of pix2. + * This is not yet the final result, because it may have fg pixels + * that are not accessible from the seed in the restricted distance. + * For example, such pixels may be connected to the original seed, + * but through a path that goes outside the permitted region. */ + pixGetDimensions(pixs, &w, &h, NULL); + pixRasterop(pix1, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); + + /* To get the accessible pixels in the restricted region, do + * a second seedfill from the original seed, using pix1 as + * a mask. The result, in pixd, will not have any bad fg + * pixels that were in pix1. */ + pixd = pixSeedfillBinary(pixd, pixs, pix1, connectivity); + + pixDestroy(&pix1); + pixDestroy(&pix2); + return pixd; +} + + +/*! + * \brief seedfillBinaryLow() + * + * Notes: + * (1) This is an in-place fill, where the seed image is + * filled, clipping to the filling mask, in one full + * cycle of UL -> LR and LR -> UL raster scans. + * (2) Assume the mask is a filling mask, not a blocking mask. + * (3) Assume that the RHS pad bits of the mask + * are properly set to 0. + * (4) Clip to the smallest dimensions to avoid invalid reads. + */ +static void +seedfillBinaryLow(l_uint32 *datas, + l_int32 hs, + l_int32 wpls, + l_uint32 *datam, + l_int32 hm, + l_int32 wplm, + l_int32 connectivity) +{ +l_int32 i, j, h, wpl; +l_uint32 word, mask; +l_uint32 wordabove, wordleft, wordbelow, wordright; +l_uint32 wordprev; /* test against this in previous iteration */ +l_uint32 *lines, *linem; + + PROCNAME("seedfillBinaryLow"); + + h = L_MIN(hs, hm); + wpl = L_MIN(wpls, wplm); + + switch (connectivity) + { + case 4: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < wpl; j++) { + word = *(lines + j); + mask = *(linem + j); + + /* OR from word above and from word to left; mask */ + if (i > 0) { + wordabove = *(lines - wpls + j); + word |= wordabove; + } + if (j > 0) { + wordleft = *(lines + j - 1); + word |= wordleft << 31; + } + word &= mask; + + /* No need to fill horizontally? */ + if (!word || !(~word)) { + *(lines + j) = word; + continue; + } + + while (1) { + wordprev = word; + word = (word | (word >> 1) | (word << 1)) & mask; + if ((word ^ wordprev) == 0) { + *(lines + j) = word; + break; + } + } + } + } + + /* LR --> UL scan */ + for (i = h - 1; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = wpl - 1; j >= 0; j--) { + word = *(lines + j); + mask = *(linem + j); + + /* OR from word below and from word to right; mask */ + if (i < h - 1) { + wordbelow = *(lines + wpls + j); + word |= wordbelow; + } + if (j < wpl - 1) { + wordright = *(lines + j + 1); + word |= wordright >> 31; + } + word &= mask; + + /* No need to fill horizontally? */ + if (!word || !(~word)) { + *(lines + j) = word; + continue; + } + + while (1) { + wordprev = word; + word = (word | (word >> 1) | (word << 1)) & mask; + if ((word ^ wordprev) == 0) { + *(lines + j) = word; + break; + } + } + } + } + break; + + case 8: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < wpl; j++) { + word = *(lines + j); + mask = *(linem + j); + + /* OR from words above and from word to left; mask */ + if (i > 0) { + wordabove = *(lines - wpls + j); + word |= (wordabove | (wordabove << 1) | (wordabove >> 1)); + if (j > 0) + word |= (*(lines - wpls + j - 1)) << 31; + if (j < wpl - 1) + word |= (*(lines - wpls + j + 1)) >> 31; + } + if (j > 0) { + wordleft = *(lines + j - 1); + word |= wordleft << 31; + } + word &= mask; + + /* No need to fill horizontally? */ + if (!word || !(~word)) { + *(lines + j) = word; + continue; + } + + while (1) { + wordprev = word; + word = (word | (word >> 1) | (word << 1)) & mask; + if ((word ^ wordprev) == 0) { + *(lines + j) = word; + break; + } + } + } + } + + /* LR --> UL scan */ + for (i = h - 1; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = wpl - 1; j >= 0; j--) { + word = *(lines + j); + mask = *(linem + j); + + /* OR from words below and from word to right; mask */ + if (i < h - 1) { + wordbelow = *(lines + wpls + j); + word |= (wordbelow | (wordbelow << 1) | (wordbelow >> 1)); + if (j > 0) + word |= (*(lines + wpls + j - 1)) << 31; + if (j < wpl - 1) + word |= (*(lines + wpls + j + 1)) >> 31; + } + if (j < wpl - 1) { + wordright = *(lines + j + 1); + word |= wordright >> 31; + } + word &= mask; + + /* No need to fill horizontally? */ + if (!word || !(~word)) { + *(lines + j) = word; + continue; + } + + while (1) { + wordprev = word; + word = (word | (word >> 1) | (word << 1)) & mask; + if ((word ^ wordprev) == 0) { + *(lines + j) = word; + break; + } + } + } + } + break; + + default: + L_ERROR("connectivity must be 4 or 8\n", procName); + return; + } +} + + +/*! + * \brief pixHolesByFilling() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \return pixd inverted image of all holes, or NULL on error + * + * Action: + * 1 Start with 1-pixel black border on otherwise white pixd + * 2 Use the inverted pixs as the filling mask to fill in + * all the pixels from the border to the pixs foreground + * 3 OR the result with pixs to have an image with all + * ON pixels except for the holes. + * 4 Invert the result to get the holes as foreground + * + *
+ * Notes:
+ *     (1) To get 4-c.c. holes of the 8-c.c. as foreground, use
+ *         4-connected filling; to get 8-c.c. holes of the 4-c.c.
+ *         as foreground, use 8-connected filling.
+ * 
+ */ +PIX * +pixHolesByFilling(PIX *pixs, + l_int32 connectivity) +{ +PIX *pixsi, *pixd; + + PROCNAME("pixHolesByFilling"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + if ((pixsi = pixInvert(NULL, pixs)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pixsi not made", procName, NULL); + } + + pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); + pixSeedfillBinary(pixd, pixd, pixsi, connectivity); + pixOr(pixd, pixd, pixs); + pixInvert(pixd, pixd); + pixDestroy(&pixsi); + return pixd; +} + + +/*! + * \brief pixFillClosedBorders() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity filling connectivity 4 or 8 + * \return pixd all topologically outer closed borders are filled + * as connected comonents, or NULL on error + * + *
+ * Notes:
+ *      (1) Start with 1-pixel black border on otherwise white pixd
+ *      (2) Subtract input pixs to remove border pixels that were
+ *          also on the closed border
+ *      (3) Use the inverted pixs as the filling mask to fill in
+ *          all the pixels from the outer border to the closed border
+ *          on pixs
+ *      (4) Invert the result to get the filled component, including
+ *          the input border
+ *      (5) If the borders are 4-c.c., use 8-c.c. filling, and v.v.
+ *      (6) Closed borders within c.c. that represent holes, etc., are filled.
+ * 
+ */ +PIX * +pixFillClosedBorders(PIX *pixs, + l_int32 connectivity) +{ +PIX *pixsi, *pixd; + + PROCNAME("pixFillClosedBorders"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); + pixSubtract(pixd, pixd, pixs); + if ((pixsi = pixInvert(NULL, pixs)) == NULL) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("pixsi not made", procName, NULL); + } + + pixSeedfillBinary(pixd, pixd, pixsi, connectivity); + pixInvert(pixd, pixd); + pixDestroy(&pixsi); + + return pixd; +} + + +/*! + * \brief pixExtractBorderConnComps() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity filling connectivity 4 or 8 + * \return pixd all pixels in the src that are in connected + * components touching the border, or NULL on error + */ +PIX * +pixExtractBorderConnComps(PIX *pixs, + l_int32 connectivity) +{ +PIX *pixd; + + PROCNAME("pixExtractBorderConnComps"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + /* Start with 1 pixel wide black border as seed in pixd */ + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); + + /* Fill in pixd from the seed, using pixs as the filling mask. + * This fills all components from pixs that are touching the border. */ + pixSeedfillBinary(pixd, pixd, pixs, connectivity); + + return pixd; +} + + +/*! + * \brief pixRemoveBorderConnComps() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity filling connectivity 4 or 8 + * \return pixd all pixels in the src that are not touching the + * border or NULL on error + * + *
+ * Notes:
+ *      (1) This removes all fg components touching the border.
+ * 
+ */ +PIX * +pixRemoveBorderConnComps(PIX *pixs, + l_int32 connectivity) +{ +PIX *pixd; + + PROCNAME("pixRemoveBorderConnComps"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + /* Fill from a 1 pixel wide seed at the border into all components + * in pixs (the filling mask) that are touching the border */ + pixd = pixExtractBorderConnComps(pixs, connectivity); + + /* Save in pixd only those components in pixs not touching the border */ + pixXor(pixd, pixd, pixs); + return pixd; +} + + +/*! + * \brief pixFillBgFromBorder() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity filling connectivity 4 or 8 + * \return pixd with the background c.c. touching the border + * filled to foreground, or NULL on error + * + *
+ * Notes:
+ *      (1) This fills all bg components touching the border to fg.
+ *          It is the photometric inverse of pixRemoveBorderConnComps().
+ *      (2) Invert the result to get the "holes" left after this fill.
+ *          This can be done multiple times, extracting holes within
+ *          holes after each pair of fillings.  Specifically, this code
+ *          peels away n successive embeddings of components:
+ * \code
+ *              pix1 = 
+ *              for (i = 0; i < 2 * n; i++) {
+ *                   pix2 = pixFillBgFromBorder(pix1, 8);
+ *                   pixInvert(pix2, pix2);
+ *                   pixDestroy(&pix1);
+ *                   pix1 = pix2;
+ *              }
+ * \endcode
+ * 
+ */ +PIX * +pixFillBgFromBorder(PIX *pixs, + l_int32 connectivity) +{ +PIX *pixd; + + PROCNAME("pixFillBgFromBorder"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + /* Invert to turn bg touching the border to a fg component. + * Extract this by filling from a 1 pixel wide seed at the border. */ + pixInvert(pixs, pixs); + pixd = pixExtractBorderConnComps(pixs, connectivity); + pixInvert(pixs, pixs); /* restore pixs */ + + /* Bit-or the filled bg component with pixs */ + pixOr(pixd, pixd, pixs); + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Hole-filling of components to bounding rectangle * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixFillHolesToBoundingRect() + * + * \param[in] pixs 1 bpp + * \param[in] minsize min number of pixels in the hole + * \param[in] maxhfract max hole area as fraction of fg pixels in the cc + * \param[in] minfgfract min fg area as fraction of bounding rectangle + * \return pixd with some holes possibly filled and some c.c. possibly + * expanded to their bounding rects, or NULL on error + * + *
+ * Notes:
+ *      (1) This does not fill holes that are smaller in area than 'minsize'.
+ *      (2) This does not fill holes with an area larger than
+ *          'maxhfract' times the fg area of the c.c.
+ *      (3) This does not expand the fg of the c.c. to bounding rect if
+ *          the fg area is less than 'minfgfract' times the area of the
+ *          bounding rect.
+ *      (4) The decisions are made as follows:
+ *           ~ Decide if we are filling the holes; if so, when using
+ *             the fg area, include the filled holes.
+ *           ~ Decide based on the fg area if we are filling to a bounding rect.
+ *             If so, do it.
+ *             If not, fill the holes if the condition is satisfied.
+ *      (5) The choice of minsize depends on the resolution.
+ *      (6) For solidifying image mask regions on printed materials,
+ *          which tend to be rectangular, values for maxhfract
+ *          and minfgfract around 0.5 are reasonable.
+ * 
+ */ +PIX * +pixFillHolesToBoundingRect(PIX *pixs, + l_int32 minsize, + l_float32 maxhfract, + l_float32 minfgfract) +{ +l_int32 i, x, y, w, h, n, nfg, nh, ntot, area; +l_int32 *tab; +l_float32 hfract; /* measured hole fraction */ +l_float32 fgfract; /* measured fg fraction */ +BOXA *boxa; +PIX *pixd, *pixfg, *pixh; +PIXA *pixa; + + PROCNAME("pixFillHolesToBoundingRect"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + + pixd = pixCopy(NULL, pixs); + boxa = pixConnComp(pixd, &pixa, 8); + n = boxaGetCount(boxa); + tab = makePixelSumTab8(); + for (i = 0; i < n; i++) { + boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); + area = w * h; + if (area < minsize) + continue; + pixfg = pixaGetPix(pixa, i, L_COPY); + pixh = pixHolesByFilling(pixfg, 4); /* holes only */ + pixCountPixels(pixfg, &nfg, tab); + pixCountPixels(pixh, &nh, tab); + hfract = (l_float32)nh / (l_float32)nfg; + ntot = nfg; + if (hfract <= maxhfract) /* we will fill the holes (at least) */ + ntot = nfg + nh; + fgfract = (l_float32)ntot / (l_float32)area; + if (fgfract >= minfgfract) { /* fill to bounding rect */ + pixSetAll(pixfg); + pixRasterop(pixd, x, y, w, h, PIX_SRC, pixfg, 0, 0); + } else if (hfract <= maxhfract) { /* fill just the holes */ + pixRasterop(pixd, x, y, w, h, PIX_DST | PIX_SRC , pixh, 0, 0); + } + pixDestroy(&pixfg); + pixDestroy(&pixh); + } + boxaDestroy(&boxa); + pixaDestroy(&pixa); + LEPT_FREE(tab); + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Vincent's hybrid Grayscale Seedfill method * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSeedfillGray() + * + * \param[in] pixs 8 bpp seed; filled in place + * \param[in] pixm 8 bpp filling mask + * \param[in] connectivity 4 or 8 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place filling operation on the seed, pixs,
+ *          where the clipping mask is always above or at the level
+ *          of the seed as it is filled.
+ *      (2) For details of the operation, see the description in
+ *          seedfillGrayLow() and the code there.
+ *      (3) As an example of use, see the description in pixHDome().
+ *          There, the seed is an image where each pixel is a fixed
+ *          amount smaller than the corresponding mask pixel.
+ *      (4) Reference paper :
+ *            L. Vincent, Morphological grayscale reconstruction in image
+ *            analysis: applications and efficient algorithms, IEEE Transactions
+ *            on  Image Processing, vol. 2, no. 2, pp. 176-201, 1993.
+ * 
+ */ +l_ok +pixSeedfillGray(PIX *pixs, + PIX *pixm, + l_int32 connectivity) +{ +l_int32 h, w, wpls, wplm; +l_uint32 *datas, *datam; + + PROCNAME("pixSeedfillGray"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 8) + return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not in {4,8}", procName, 1); + + /* Make sure the sizes of seed and mask images are the same */ + if (pixSizesEqual(pixs, pixm) == 0) + return ERROR_INT("pixs and pixm sizes differ", procName, 1); + + datas = pixGetData(pixs); + datam = pixGetData(pixm); + wpls = pixGetWpl(pixs); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixs, &w, &h, NULL); + seedfillGrayLow(datas, w, h, wpls, datam, wplm, connectivity); + + return 0; +} + + +/*! + * \brief pixSeedfillGrayInv() + * + * \param[in] pixs 8 bpp seed; filled in place + * \param[in] pixm 8 bpp filling mask + * \param[in] connectivity 4 or 8 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place filling operation on the seed, pixs,
+ *          where the clipping mask is always below or at the level
+ *          of the seed as it is filled.  Think of filling up a basin
+ *          to a particular level, given by the maximum seed value
+ *          in the basin.  Outside the filled region, the mask
+ *          is above the filling level.
+ *      (2) Contrast this with pixSeedfillGray(), where the clipping mask
+ *          is always above or at the level of the fill.  An example
+ *          of its use is the hdome fill, where the seed is an image
+ *          where each pixel is a fixed amount smaller than the
+ *          corresponding mask pixel.
+ *      (3) The basin fill, pixSeedfillGrayBasin(), is a special case
+ *          where the seed pixel values are generated from the mask,
+ *          and where the implementation uses pixSeedfillGray() by
+ *          inverting both the seed and mask.
+ * 
+ */ +l_ok +pixSeedfillGrayInv(PIX *pixs, + PIX *pixm, + l_int32 connectivity) +{ +l_int32 h, w, wpls, wplm; +l_uint32 *datas, *datam; + + PROCNAME("pixSeedfillGrayInv"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 8) + return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not in {4,8}", procName, 1); + + /* Make sure the sizes of seed and mask images are the same */ + if (pixSizesEqual(pixs, pixm) == 0) + return ERROR_INT("pixs and pixm sizes differ", procName, 1); + + datas = pixGetData(pixs); + datam = pixGetData(pixm); + wpls = pixGetWpl(pixs); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixs, &w, &h, NULL); + seedfillGrayInvLow(datas, w, h, wpls, datam, wplm, connectivity); + + return 0; +} + + +/*! + * \brief seedfillGrayLow() + * + * Notes: + * (1) The pixels are numbered as follows: + * 1 2 3 + * 4 x 5 + * 6 7 8 + * This low-level filling operation consists of two scans, + * raster and anti-raster, covering the entire seed image. + * This is followed by a breadth-first propagation operation to + * complete the fill. + * During the anti-raster scan, every pixel p whose current value + * could still be propagated after the anti-raster scan is put into + * the FIFO queue. + * The propagation step is a breadth-first fill to completion. + * Unlike the simple grayscale seedfill pixSeedfillGraySimple(), + * where at least two full raster/anti-raster iterations are required + * for completion and verification, the hybrid method uses only a + * single raster/anti-raster set of scans. + * (2) The filling action can be visualized from the following example. + * Suppose the mask, which clips the fill, is a sombrero-shaped + * surface, where the highest point is 200 and the low pixels + * around the rim are 30. Beyond the rim, the mask goes up a bit. + * Suppose the seed, which is filled, consists of a single point + * of height 150, located below the max of the mask, with + * the rest 0. Then in the raster scan, nothing happens until + * the high seed point is encountered, and then this value is + * propagated right and down, until it hits the side of the + * sombrero. The seed can never exceed the mask, so it fills + * to the rim, going lower along the mask surface. When it + * passes the rim, the seed continues to fill at the rim + * height to the edge of the seed image. Then on the + * anti-raster scan, the seed fills flat inside the + * sombrero to the upper and left, and then out from the + * rim as before. The final result has a seed that is + * flat outside the rim, and inside it fills the sombrero + * but only up to 150. If the rim height varies, the + * filled seed outside the rim will be at the highest + * point on the rim, which is a saddle point on the rim. + * (3) Reference paper : + * L. Vincent, Morphological grayscale reconstruction in image + * analysis: applications and efficient algorithms, IEEE Transactions + * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. + */ +static void +seedfillGrayLow(l_uint32 *datas, + l_int32 w, + l_int32 h, + l_int32 wpls, + l_uint32 *datam, + l_int32 wplm, + l_int32 connectivity) +{ +l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; +l_uint8 val, maxval, maskval, boolval; +l_int32 i, j, imax, jmax, queue_size; +l_uint32 *lines, *linem; +L_PIXEL *pixel; +L_QUEUE *lq_pixel; + + PROCNAME("seedfillGrayLow"); + + if (connectivity != 4 && connectivity != 8) { + L_ERROR("connectivity must be 4 or 8\n", procName); + return; + } + + imax = h - 1; + jmax = w - 1; + + /* In the worst case, most of the pixels could be pushed + * onto the FIFO queue during anti-raster scan. However this + * will rarely happen, and we initialize the queue ptr size to + * the image perimeter. */ + lq_pixel = lqueueCreate(2 * (w + h)); + + switch (connectivity) + { + case 4: + /* UL --> LR scan (Raster Order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * J(p) <- (max{J(p) union J(p) neighbors in raster order}) + * intersection I(p) */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i > 0) + maxval = GET_DATA_BYTE(lines - wpls, j); + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + + /* LR --> UL scan (anti-raster order) + * Let p be the currect pixel; + * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) + * intersection I(p) */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + boolval = FALSE; + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i < imax) + maxval = GET_DATA_BYTE(lines + wpls, j); + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + + /* + * If there exists a point (q) which belongs to J(p) + * neighbors in anti-raster order such that J(q) < J(p) + * and J(q) < I(q) then + * fifo_add(p) */ + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + if ((val7 < val) && + (val7 < GET_DATA_BYTE(linem + wplm, j))) { + boolval = TRUE; + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + if (!boolval && (val5 < val) && + (val5 < GET_DATA_BYTE(linem, j + 1))) { + boolval = TRUE; + } + } + if (boolval) { + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + } + } + + /* Propagation step: + * while fifo_empty = false + * p <- fifo_first() + * for every pixel (q) belong to neighbors of (p) + * if J(q) < J(p) and I(q) != J(q) + * J(q) <- min(J(p), I(q)); + * fifo_add(q); + * end + * end + * end */ + queue_size = lqueueGetCount(lq_pixel); + while (queue_size) { + pixel = (L_PIXEL *)lqueueRemove(lq_pixel); + i = pixel->x; + j = pixel->y; + LEPT_FREE(pixel); + lines = datas + i * wpls; + linem = datam + i * wplm; + + if ((val = GET_DATA_BYTE(lines, j)) > 0) { + if (i > 0) { + val2 = GET_DATA_BYTE(lines - wpls, j); + maskval = GET_DATA_BYTE(linem - wplm, j); + if (val > val2 && val2 != maskval) { + SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maskval = GET_DATA_BYTE(linem, j - 1); + if (val > val4 && val4 != maskval) { + SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + maskval = GET_DATA_BYTE(linem + wplm, j); + if (val > val7 && val7 != maskval) { + SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maskval = GET_DATA_BYTE(linem, j + 1); + if (val > val5 && val5 != maskval) { + SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + } + + queue_size = lqueueGetCount(lq_pixel); + } + + break; + + case 8: + /* UL --> LR scan (Raster Order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * J(p) <- (max{J(p) union J(p) neighbors in raster order}) + * intersection I(p) */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i > 0) { + if (j > 0) + maxval = GET_DATA_BYTE(lines - wpls, j - 1); + if (j < jmax) { + val3 = GET_DATA_BYTE(lines - wpls, j + 1); + maxval = L_MAX(maxval, val3); + } + val2 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val2); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + + /* LR --> UL scan (anti-raster order) + * Let p be the currect pixel; + * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) + * intersection I(p) */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + boolval = FALSE; + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i < imax) { + if (j > 0) { + maxval = GET_DATA_BYTE(lines + wpls, j - 1); + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maxval = L_MAX(maxval, val8); + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + + /* If there exists a point (q) which belongs to J(p) + * neighbors in anti-raster order such that J(q) < J(p) + * and J(q) < I(q) then + * fifo_add(p) */ + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + if ((val6 < val) && + (val6 < GET_DATA_BYTE(linem + wplm, j - 1))) { + boolval = TRUE; + } + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + if (!boolval && (val8 < val) && + (val8 < GET_DATA_BYTE(linem + wplm, j + 1))) { + boolval = TRUE; + } + } + val7 = GET_DATA_BYTE(lines + wpls, j); + if (!boolval && (val7 < val) && + (val7 < GET_DATA_BYTE(linem + wplm, j))) { + boolval = TRUE; + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + if (!boolval && (val5 < val) && + (val5 < GET_DATA_BYTE(linem, j + 1))) { + boolval = TRUE; + } + } + if (boolval) { + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + } + } + + /* Propagation step: + * while fifo_empty = false + * p <- fifo_first() + * for every pixel (q) belong to neighbors of (p) + * if J(q) < J(p) and I(q) != J(q) + * J(q) <- min(J(p), I(q)); + * fifo_add(q); + * end + * end + * end */ + queue_size = lqueueGetCount(lq_pixel); + while (queue_size) { + pixel = (L_PIXEL *)lqueueRemove(lq_pixel); + i = pixel->x; + j = pixel->y; + LEPT_FREE(pixel); + lines = datas + i * wpls; + linem = datam + i * wplm; + + if ((val = GET_DATA_BYTE(lines, j)) > 0) { + if (i > 0) { + if (j > 0) { + val1 = GET_DATA_BYTE(lines - wpls, j - 1); + maskval = GET_DATA_BYTE(linem - wplm, j - 1); + if (val > val1 && val1 != maskval) { + SET_DATA_BYTE(lines - wpls, j - 1, + L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val3 = GET_DATA_BYTE(lines - wpls, j + 1); + maskval = GET_DATA_BYTE(linem - wplm, j + 1); + if (val > val3 && val3 != maskval) { + SET_DATA_BYTE(lines - wpls, j + 1, + L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + val2 = GET_DATA_BYTE(lines - wpls, j); + maskval = GET_DATA_BYTE(linem - wplm, j); + if (val > val2 && val2 != maskval) { + SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maskval = GET_DATA_BYTE(linem, j - 1); + if (val > val4 && val4 != maskval) { + SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + maskval = GET_DATA_BYTE(linem + wplm, j - 1); + if (val > val6 && val6 != maskval) { + SET_DATA_BYTE(lines + wpls, j - 1, + L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maskval = GET_DATA_BYTE(linem + wplm, j + 1); + if (val > val8 && val8 != maskval) { + SET_DATA_BYTE(lines + wpls, j + 1, + L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maskval = GET_DATA_BYTE(linem + wplm, j); + if (val > val7 && val7 != maskval) { + SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maskval = GET_DATA_BYTE(linem, j + 1); + if (val > val5 && val5 != maskval) { + SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + } + + queue_size = lqueueGetCount(lq_pixel); + } + break; + + default: + L_ERROR("shouldn't get here!\n", procName); + break; + } + + lqueueDestroy(&lq_pixel, TRUE); +} + + +/*! + * \brief seedfillGrayInvLow() + * + * Notes: + * (1) The pixels are numbered as follows: + * 1 2 3 + * 4 x 5 + * 6 7 8 + * This low-level filling operation consists of two scans, + * raster and anti-raster, covering the entire seed image. + * During the anti-raster scan, every pixel p such that its + * current value could still be propagated during the next + * raster scanning is put into the FIFO-queue. + * Next step is the propagation step where where we update + * and propagate the values using FIFO structure created in + * anti-raster scan. + * (2) The "Inv" signifies the fact that in this case, filling + * of the seed only takes place when the seed value is + * greater than the mask value. The mask will act to stop + * the fill when it is higher than the seed level. (This is + * in contrast to conventional grayscale filling where the + * seed always fills below the mask.) + * (3) An example of use is a basin, described by the mask (pixm), + * where within the basin, the seed pix (pixs) gets filled to the + * height of the highest seed pixel that is above its + * corresponding max pixel. Filling occurs while the + * propagating seed pixels in pixs are larger than the + * corresponding mask values in pixm. + * (4) Reference paper : + * L. Vincent, Morphological grayscale reconstruction in image + * analysis: applications and efficient algorithms, IEEE Transactions + * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. + */ +static void +seedfillGrayInvLow(l_uint32 *datas, + l_int32 w, + l_int32 h, + l_int32 wpls, + l_uint32 *datam, + l_int32 wplm, + l_int32 connectivity) +{ +l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; +l_uint8 val, maxval, maskval, boolval; +l_int32 i, j, imax, jmax, queue_size; +l_uint32 *lines, *linem; +L_PIXEL *pixel; +L_QUEUE *lq_pixel; + + PROCNAME("seedfillGrayInvLow"); + + if (connectivity != 4 && connectivity != 8) { + L_ERROR("connectivity must be 4 or 8\n", procName); + return; + } + + imax = h - 1; + jmax = w - 1; + + /* In the worst case, most of the pixels could be pushed + * onto the FIFO queue during anti-raster scan. However this + * will rarely happen, and we initialize the queue ptr size to + * the image perimeter. */ + lq_pixel = lqueueCreate(2 * (w + h)); + + switch (connectivity) + { + case 4: + /* UL --> LR scan (Raster Order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * tmp <- max{J(p) union J(p) neighbors in raster order} + * if (tmp > I(p)) + * J(p) <- tmp + * end */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i > 0) { + val2 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val2); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + + /* LR --> UL scan (anti-raster order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * tmp <- max{J(p) union J(p) neighbors in anti-raster order} + * if (tmp > I(p)) + * J(p) <- tmp + * end */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + boolval = FALSE; + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + val = maxval = GET_DATA_BYTE(lines, j); + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + val = GET_DATA_BYTE(lines, j); + + /* + * If there exists a point (q) which belongs to J(p) + * neighbors in anti-raster order such that J(q) < J(p) + * and J(p) > I(q) then + * fifo_add(p) */ + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + if ((val7 < val) && + (val > GET_DATA_BYTE(linem + wplm, j))) { + boolval = TRUE; + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + if (!boolval && (val5 < val) && + (val > GET_DATA_BYTE(linem, j + 1))) { + boolval = TRUE; + } + } + if (boolval) { + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + } + } + + /* Propagation step: + * while fifo_empty = false + * p <- fifo_first() + * for every pixel (q) belong to neighbors of (p) + * if J(q) < J(p) and J(p) > I(q) + * J(q) <- min(J(p), I(q)); + * fifo_add(q); + * end + * end + * end */ + queue_size = lqueueGetCount(lq_pixel); + while (queue_size) { + pixel = (L_PIXEL *)lqueueRemove(lq_pixel); + i = pixel->x; + j = pixel->y; + LEPT_FREE(pixel); + lines = datas + i * wpls; + linem = datam + i * wplm; + + if ((val = GET_DATA_BYTE(lines, j)) > 0) { + if (i > 0) { + val2 = GET_DATA_BYTE(lines - wpls, j); + maskval = GET_DATA_BYTE(linem - wplm, j); + if (val > val2 && val > maskval) { + SET_DATA_BYTE(lines - wpls, j, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maskval = GET_DATA_BYTE(linem, j - 1); + if (val > val4 && val > maskval) { + SET_DATA_BYTE(lines, j - 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + maskval = GET_DATA_BYTE(linem + wplm, j); + if (val > val7 && val > maskval) { + SET_DATA_BYTE(lines + wpls, j, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maskval = GET_DATA_BYTE(linem, j + 1); + if (val > val5 && val > maskval) { + SET_DATA_BYTE(lines, j + 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + } + + queue_size = lqueueGetCount(lq_pixel); + } + + break; + + case 8: + /* UL --> LR scan (Raster Order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * tmp <- max{J(p) union J(p) neighbors in raster order} + * if (tmp > I(p)) + * J(p) <- tmp + * end */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i > 0) { + if (j > 0) { + val1 = GET_DATA_BYTE(lines - wpls, j - 1); + maxval = L_MAX(maxval, val1); + } + if (j < jmax) { + val3 = GET_DATA_BYTE(lines - wpls, j + 1); + maxval = L_MAX(maxval, val3); + } + val2 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val2); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + + /* LR --> UL scan (anti-raster order) + * If I : mask image + * J : marker image + * Let p be the currect pixel; + * tmp <- max{J(p) union J(p) neighbors in anti-raster order} + * if (tmp > I(p)) + * J(p) <- tmp + * end */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + boolval = FALSE; + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + maxval = L_MAX(maxval, val6); + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maxval = L_MAX(maxval, val8); + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + val = GET_DATA_BYTE(lines, j); + + /* + * If there exists a point (q) which belongs to J(p) + * neighbors in anti-raster order such that J(q) < J(p) + * and J(p) > I(q) then + * fifo_add(p) */ + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + if ((val6 < val) && + (val > GET_DATA_BYTE(linem + wplm, j - 1))) { + boolval = TRUE; + } + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + if (!boolval && (val8 < val) && + (val > GET_DATA_BYTE(linem + wplm, j + 1))) { + boolval = TRUE; + } + } + val7 = GET_DATA_BYTE(lines + wpls, j); + if (!boolval && (val7 < val) && + (val > GET_DATA_BYTE(linem + wplm, j))) { + boolval = TRUE; + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + if (!boolval && (val5 < val) && + (val > GET_DATA_BYTE(linem, j + 1))) { + boolval = TRUE; + } + } + if (boolval) { + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + } + } + + /* Propagation step: + * while fifo_empty = false + * p <- fifo_first() + * for every pixel (q) belong to neighbors of (p) + * if J(q) < J(p) and J(p) > I(q) + * J(q) <- min(J(p), I(q)); + * fifo_add(q); + * end + * end + * end */ + queue_size = lqueueGetCount(lq_pixel); + while (queue_size) { + pixel = (L_PIXEL *)lqueueRemove(lq_pixel); + i = pixel->x; + j = pixel->y; + LEPT_FREE(pixel); + lines = datas + i * wpls; + linem = datam + i * wplm; + + if ((val = GET_DATA_BYTE(lines, j)) > 0) { + if (i > 0) { + if (j > 0) { + val1 = GET_DATA_BYTE(lines - wpls, j - 1); + maskval = GET_DATA_BYTE(linem - wplm, j - 1); + if (val > val1 && val > maskval) { + SET_DATA_BYTE(lines - wpls, j - 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val3 = GET_DATA_BYTE(lines - wpls, j + 1); + maskval = GET_DATA_BYTE(linem - wplm, j + 1); + if (val > val3 && val > maskval) { + SET_DATA_BYTE(lines - wpls, j + 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + val2 = GET_DATA_BYTE(lines - wpls, j); + maskval = GET_DATA_BYTE(linem - wplm, j); + if (val > val2 && val > maskval) { + SET_DATA_BYTE(lines - wpls, j, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i - 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maskval = GET_DATA_BYTE(linem, j - 1); + if (val > val4 && val > maskval) { + SET_DATA_BYTE(lines, j - 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + maskval = GET_DATA_BYTE(linem + wplm, j - 1); + if (val > val6 && val > maskval) { + SET_DATA_BYTE(lines + wpls, j - 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j - 1; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maskval = GET_DATA_BYTE(linem + wplm, j + 1); + if (val > val8 && val > maskval) { + SET_DATA_BYTE(lines + wpls, j + 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maskval = GET_DATA_BYTE(linem + wplm, j); + if (val > val7 && val > maskval) { + SET_DATA_BYTE(lines + wpls, j, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i + 1; + pixel->y = j; + lqueueAdd(lq_pixel, pixel); + } + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maskval = GET_DATA_BYTE(linem, j + 1); + if (val > val5 && val > maskval) { + SET_DATA_BYTE(lines, j + 1, val); + pixel = (L_PIXEL *)LEPT_CALLOC(1, sizeof(L_PIXEL)); + pixel->x = i; + pixel->y = j + 1; + lqueueAdd(lq_pixel, pixel); + } + } + } + + queue_size = lqueueGetCount(lq_pixel); + } + break; + + default: + L_ERROR("shouldn't get here!\n", procName); + break; + } + + lqueueDestroy(&lq_pixel, TRUE); +} + + +/*-----------------------------------------------------------------------* + * Vincent's Iterative Grayscale Seedfill method * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSeedfillGraySimple() + * + * \param[in] pixs 8 bpp seed; filled in place + * \param[in] pixm 8 bpp filling mask + * \param[in] connectivity 4 or 8 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place filling operation on the seed, pixs,
+ *          where the clipping mask is always above or at the level
+ *          of the seed as it is filled.
+ *      (2) For details of the operation, see the description in
+ *          seedfillGrayLowSimple() and the code there.
+ *      (3) As an example of use, see the description in pixHDome().
+ *          There, the seed is an image where each pixel is a fixed
+ *          amount smaller than the corresponding mask pixel.
+ *      (4) Reference paper :
+ *            L. Vincent, Morphological grayscale reconstruction in image
+ *            analysis: applications and efficient algorithms, IEEE Transactions
+ *            on  Image Processing, vol. 2, no. 2, pp. 176-201, 1993.
+ * 
+ */ +l_ok +pixSeedfillGraySimple(PIX *pixs, + PIX *pixm, + l_int32 connectivity) +{ +l_int32 i, h, w, wpls, wplm, boolval; +l_uint32 *datas, *datam; +PIX *pixt; + + PROCNAME("pixSeedfillGraySimple"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 8) + return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not in {4,8}", procName, 1); + + /* Make sure the sizes of seed and mask images are the same */ + if (pixSizesEqual(pixs, pixm) == 0) + return ERROR_INT("pixs and pixm sizes differ", procName, 1); + + /* This is used to test for completion */ + if ((pixt = pixCreateTemplate(pixs)) == NULL) + return ERROR_INT("pixt not made", procName, 1); + + datas = pixGetData(pixs); + datam = pixGetData(pixm); + wpls = pixGetWpl(pixs); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixs, &w, &h, NULL); + for (i = 0; i < MaxIters; i++) { + pixCopy(pixt, pixs); + seedfillGrayLowSimple(datas, w, h, wpls, datam, wplm, connectivity); + pixEqual(pixs, pixt, &boolval); + if (boolval == 1) { +#if DEBUG_PRINT_ITERS + L_INFO("Gray seed fill converged: %d iters\n", procName, i + 1); +#endif /* DEBUG_PRINT_ITERS */ + break; + } + } + + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief pixSeedfillGrayInvSimple() + * + * \param[in] pixs 8 bpp seed; filled in place + * \param[in] pixm 8 bpp filling mask + * \param[in] connectivity 4 or 8 + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place filling operation on the seed, pixs,
+ *          where the clipping mask is always below or at the level
+ *          of the seed as it is filled.  Think of filling up a basin
+ *          to a particular level, given by the maximum seed value
+ *          in the basin.  Outside the filled region, the mask
+ *          is above the filling level.
+ *      (2) Contrast this with pixSeedfillGraySimple(), where the clipping mask
+ *          is always above or at the level of the fill.  An example
+ *          of its use is the hdome fill, where the seed is an image
+ *          where each pixel is a fixed amount smaller than the
+ *          corresponding mask pixel.
+ * 
+ */ +l_ok +pixSeedfillGrayInvSimple(PIX *pixs, + PIX *pixm, + l_int32 connectivity) +{ +l_int32 i, h, w, wpls, wplm, boolval; +l_uint32 *datas, *datam; +PIX *pixt; + + PROCNAME("pixSeedfillGrayInvSimple"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 8) + return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); + if (connectivity != 4 && connectivity != 8) + return ERROR_INT("connectivity not in {4,8}", procName, 1); + + /* Make sure the sizes of seed and mask images are the same */ + if (pixSizesEqual(pixs, pixm) == 0) + return ERROR_INT("pixs and pixm sizes differ", procName, 1); + + /* This is used to test for completion */ + if ((pixt = pixCreateTemplate(pixs)) == NULL) + return ERROR_INT("pixt not made", procName, 1); + + datas = pixGetData(pixs); + datam = pixGetData(pixm); + wpls = pixGetWpl(pixs); + wplm = pixGetWpl(pixm); + pixGetDimensions(pixs, &w, &h, NULL); + for (i = 0; i < MaxIters; i++) { + pixCopy(pixt, pixs); + seedfillGrayInvLowSimple(datas, w, h, wpls, datam, wplm, connectivity); + pixEqual(pixs, pixt, &boolval); + if (boolval == 1) { +#if DEBUG_PRINT_ITERS + L_INFO("Gray seed fill converged: %d iters\n", procName, i + 1); +#endif /* DEBUG_PRINT_ITERS */ + break; + } + } + + pixDestroy(&pixt); + return 0; +} + + +/*! + * \brief seedfillGrayLowSimple() + * + * Notes: + * (1) The pixels are numbered as follows: + * 1 2 3 + * 4 x 5 + * 6 7 8 + * This low-level filling operation consists of two scans, + * raster and anti-raster, covering the entire seed image. + * The caller typically iterates until the filling is + * complete. + * (2) The filling action can be visualized from the following example. + * Suppose the mask, which clips the fill, is a sombrero-shaped + * surface, where the highest point is 200 and the low pixels + * around the rim are 30. Beyond the rim, the mask goes up a bit. + * Suppose the seed, which is filled, consists of a single point + * of height 150, located below the max of the mask, with + * the rest 0. Then in the raster scan, nothing happens until + * the high seed point is encountered, and then this value is + * propagated right and down, until it hits the side of the + * sombrero. The seed can never exceed the mask, so it fills + * to the rim, going lower along the mask surface. When it + * passes the rim, the seed continues to fill at the rim + * height to the edge of the seed image. Then on the + * anti-raster scan, the seed fills flat inside the + * sombrero to the upper and left, and then out from the + * rim as before. The final result has a seed that is + * flat outside the rim, and inside it fills the sombrero + * but only up to 150. If the rim height varies, the + * filled seed outside the rim will be at the highest + * point on the rim, which is a saddle point on the rim. + */ +static void +seedfillGrayLowSimple(l_uint32 *datas, + l_int32 w, + l_int32 h, + l_int32 wpls, + l_uint32 *datam, + l_int32 wplm, + l_int32 connectivity) +{ +l_uint8 val2, val3, val4, val5, val7, val8; +l_uint8 val, maxval, maskval; +l_int32 i, j, imax, jmax; +l_uint32 *lines, *linem; + + PROCNAME("seedfillGrayLowSimple"); + + imax = h - 1; + jmax = w - 1; + + switch (connectivity) + { + case 4: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i > 0) + maxval = GET_DATA_BYTE(lines - wpls, j); + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + + /* LR --> UL scan */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i < imax) + maxval = GET_DATA_BYTE(lines + wpls, j); + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + break; + + case 8: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i > 0) { + if (j > 0) + maxval = GET_DATA_BYTE(lines - wpls, j - 1); + if (j < jmax) { + val2 = GET_DATA_BYTE(lines - wpls, j + 1); + maxval = L_MAX(maxval, val2); + } + val3 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val3); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + + /* LR --> UL scan */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { + maxval = 0; + if (i < imax) { + if (j > 0) + maxval = GET_DATA_BYTE(lines + wpls, j - 1); + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maxval = L_MAX(maxval, val8); + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + val = GET_DATA_BYTE(lines, j); + maxval = L_MAX(maxval, val); + val = L_MIN(maxval, maskval); + SET_DATA_BYTE(lines, j, val); + } + } + } + break; + + default: + L_ERROR("connectivity must be 4 or 8\n", procName); + } +} + + +/*! + * \brief seedfillGrayInvLowSimple() + * + * Notes: + * (1) The pixels are numbered as follows: + * 1 2 3 + * 4 x 5 + * 6 7 8 + * This low-level filling operation consists of two scans, + * raster and anti-raster, covering the entire seed image. + * The caller typically iterates until the filling is + * complete. + * (2) The "Inv" signifies the fact that in this case, filling + * of the seed only takes place when the seed value is + * greater than the mask value. The mask will act to stop + * the fill when it is higher than the seed level. (This is + * in contrast to conventional grayscale filling where the + * seed always fills below the mask.) + * (3) An example of use is a basin, described by the mask (pixm), + * where within the basin, the seed pix (pixs) gets filled to the + * height of the highest seed pixel that is above its + * corresponding max pixel. Filling occurs while the + * propagating seed pixels in pixs are larger than the + * corresponding mask values in pixm. + */ +static void +seedfillGrayInvLowSimple(l_uint32 *datas, + l_int32 w, + l_int32 h, + l_int32 wpls, + l_uint32 *datam, + l_int32 wplm, + l_int32 connectivity) +{ +l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; +l_uint8 maxval, maskval; +l_int32 i, j, imax, jmax; +l_uint32 *lines, *linem; + + PROCNAME("seedfillGrayInvLowSimple"); + + imax = h - 1; + jmax = w - 1; + + switch (connectivity) + { + case 4: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i > 0) { + val2 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val2); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + + /* LR --> UL scan */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i < imax) { + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + break; + + case 8: + /* UL --> LR scan */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = 0; j < w; j++) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i > 0) { + if (j > 0) { + val1 = GET_DATA_BYTE(lines - wpls, j - 1); + maxval = L_MAX(maxval, val1); + } + if (j < jmax) { + val2 = GET_DATA_BYTE(lines - wpls, j + 1); + maxval = L_MAX(maxval, val2); + } + val3 = GET_DATA_BYTE(lines - wpls, j); + maxval = L_MAX(maxval, val3); + } + if (j > 0) { + val4 = GET_DATA_BYTE(lines, j - 1); + maxval = L_MAX(maxval, val4); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + + /* LR --> UL scan */ + for (i = imax; i >= 0; i--) { + lines = datas + i * wpls; + linem = datam + i * wplm; + for (j = jmax; j >= 0; j--) { + if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { + maxval = GET_DATA_BYTE(lines, j); + if (i < imax) { + if (j > 0) { + val6 = GET_DATA_BYTE(lines + wpls, j - 1); + maxval = L_MAX(maxval, val6); + } + if (j < jmax) { + val8 = GET_DATA_BYTE(lines + wpls, j + 1); + maxval = L_MAX(maxval, val8); + } + val7 = GET_DATA_BYTE(lines + wpls, j); + maxval = L_MAX(maxval, val7); + } + if (j < jmax) { + val5 = GET_DATA_BYTE(lines, j + 1); + maxval = L_MAX(maxval, val5); + } + if (maxval > maskval) + SET_DATA_BYTE(lines, j, maxval); + } + } + } + break; + + default: + L_ERROR("connectivity must be 4 or 8\n", procName); + } +} + + +/*-----------------------------------------------------------------------* + * Gray seedfill variations * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSeedfillGrayBasin() + * + * \param[in] pixb binary mask giving seed locations + * \param[in] pixm 8 bpp basin-type filling mask + * \param[in] delta amount of seed value above mask + * \param[in] connectivity 4 or 8 + * \return pixd filled seed if OK, NULL on error + * + *
+ * Notes:
+ *      (1) This fills from a seed within basins defined by a filling mask.
+ *          The seed value(s) are greater than the corresponding
+ *          filling mask value, and the result has the bottoms of
+ *          the basins raised by the initial seed value.
+ *      (2) The seed has value 255 except where pixb has fg (1), which
+ *          are the seed 'locations'.  At the seed locations, the seed
+ *          value is the corresponding value of the mask pixel in pixm
+ *          plus %delta.  If %delta == 0, we return a copy of pixm.
+ *      (3) The actual filling is done using the standard grayscale filling
+ *          operation on the inverse of the mask and using the inverse
+ *          of the seed image.  After filling, we return the inverse of
+ *          the filled seed.
+ *      (4) As an example of use: pixm can describe a grayscale image
+ *          of text, where the (dark) text pixels are basins of
+ *          low values; pixb can identify the local minima in pixm (say, at
+ *          the bottom of the basins); and delta is the amount that we wish
+ *          to raise (lighten) the basins.  We construct the seed
+ *          (a.k.a marker) image from pixb, pixm and %delta.
+ * 
+ */ +PIX * +pixSeedfillGrayBasin(PIX *pixb, + PIX *pixm, + l_int32 delta, + l_int32 connectivity) +{ +PIX *pixbi, *pixmi, *pixsd; + + PROCNAME("pixSeedfillGrayBasin"); + + if (!pixb || pixGetDepth(pixb) != 1) + return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", procName, NULL); + if (!pixm || pixGetDepth(pixm) != 8) + return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, NULL); + + if (delta <= 0) { + L_WARNING("delta <= 0; returning a copy of pixm\n", procName); + return pixCopy(NULL, pixm); + } + + /* Add delta to every pixel in pixm */ + pixsd = pixCopy(NULL, pixm); + pixAddConstantGray(pixsd, delta); + + /* Prepare the seed. Write 255 in all pixels of + * ([pixm] + delta) where pixb is 0. */ + pixbi = pixInvert(NULL, pixb); + pixSetMasked(pixsd, pixbi, 255); + + /* Fill the inverse seed, using the inverse clipping mask */ + pixmi = pixInvert(NULL, pixm); + pixInvert(pixsd, pixsd); + pixSeedfillGray(pixsd, pixmi, connectivity); + + /* Re-invert the filled seed */ + pixInvert(pixsd, pixsd); + + pixDestroy(&pixbi); + pixDestroy(&pixmi); + return pixsd; +} + + +/*-----------------------------------------------------------------------* + * Vincent's Distance Function method * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixDistanceFunction() + * + * \param[in] pixs 1 bpp + * \param[in] connectivity 4 or 8 + * \param[in] outdepth 8 or 16 bits for pixd + * \param[in] boundcond L_BOUNDARY_BG, L_BOUNDARY_FG + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This computes the distance of each pixel from the nearest
+ *          background pixel.  All bg pixels therefore have a distance of 0,
+ *          and the fg pixel distances increase linearly from 1 at the
+ *          boundary.  It can also be used to compute the distance of
+ *          each pixel from the nearest fg pixel, by inverting the input
+ *          image before calling this function.  Then all fg pixels have
+ *          a distance 0 and the bg pixel distances increase linearly
+ *          from 1 at the boundary.
+ *      (2) The algorithm, described in Leptonica on the page on seed
+ *          filling and connected components, is due to Luc Vincent.
+ *          In brief, we generate an 8 or 16 bpp image, initialized
+ *          with the fg pixels of the input pix set to 1 and the
+ *          1-boundary pixels (i.e., the boundary pixels of width 1 on
+ *          the four sides set as either:
+ *            * L_BOUNDARY_BG: 0
+ *            * L_BOUNDARY_FG:  max
+ *          where max = 0xff for 8 bpp and 0xffff for 16 bpp.
+ *          Then do raster/anti-raster sweeps over all pixels interior
+ *          to the 1-boundary, where the value of each new pixel is
+ *          taken to be 1 more than the minimum of the previously-seen
+ *          connected pixels (using either 4 or 8 connectivity).
+ *          Finally, set the 1-boundary pixels using the mirrored method;
+ *          this removes the max values there.
+ *      (3) Using L_BOUNDARY_BG clamps the distance to 0 at the
+ *          boundary.  Using L_BOUNDARY_FG allows the distance
+ *          at the image boundary to "float".
+ *      (4) For 4-connected, one could initialize only the left and top
+ *          1-boundary pixels, and go all the way to the right
+ *          and bottom; then coming back reset left and top.  But we
+ *          instead use a method that works for both 4- and 8-connected.
+ * 
+ */ +PIX * +pixDistanceFunction(PIX *pixs, + l_int32 connectivity, + l_int32 outdepth, + l_int32 boundcond) +{ +l_int32 w, h, wpld; +l_uint32 *datad; +PIX *pixd; + + PROCNAME("pixDistanceFunction"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("!pixs or pixs not 1 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + if (outdepth != 8 && outdepth != 16) + return (PIX *)ERROR_PTR("outdepth not 8 or 16 bpp", procName, NULL); + if (boundcond != L_BOUNDARY_BG && boundcond != L_BOUNDARY_FG) + return (PIX *)ERROR_PTR("invalid boundcond", procName, NULL); + + pixGetDimensions(pixs, &w, &h, NULL); + if ((pixd = pixCreate(w, h, outdepth)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + /* Initialize the fg pixels to 1 and the bg pixels to 0 */ + pixSetMasked(pixd, pixs, 1); + + if (boundcond == L_BOUNDARY_BG) { + distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); + } else { /* L_BOUNDARY_FG: set boundary pixels to max val */ + pixRasterop(pixd, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ + pixRasterop(pixd, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ + pixRasterop(pixd, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ + pixRasterop(pixd, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ + + distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); + + /* Set each boundary pixel equal to the pixel next to it */ + pixSetMirroredBorder(pixd, 1, 1, 1, 1); + } + + return pixd; +} + + +/*! + * \brief distanceFunctionLow() + */ +static void +distanceFunctionLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 d, + l_int32 wpld, + l_int32 connectivity) +{ +l_int32 val1, val2, val3, val4, val5, val6, val7, val8, minval, val; +l_int32 i, j, imax, jmax; +l_uint32 *lined; + + PROCNAME("distanceFunctionLow"); + + /* One raster scan followed by one anti-raster scan. + * This does not re-set the 1-boundary of pixels that + * were initialized to either 0 or maxval. */ + imax = h - 1; + jmax = w - 1; + switch (connectivity) + { + case 4: + if (d == 8) { + /* UL --> LR scan */ + for (i = 1; i < imax; i++) { + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((val = GET_DATA_BYTE(lined, j)) > 0) { + val2 = GET_DATA_BYTE(lined - wpld, j); + val4 = GET_DATA_BYTE(lined, j - 1); + minval = L_MIN(val2, val4); + minval = L_MIN(minval, 254); + SET_DATA_BYTE(lined, j, minval + 1); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((val = GET_DATA_BYTE(lined, j)) > 0) { + val7 = GET_DATA_BYTE(lined + wpld, j); + val5 = GET_DATA_BYTE(lined, j + 1); + minval = L_MIN(val5, val7); + minval = L_MIN(minval + 1, val); + SET_DATA_BYTE(lined, j, minval); + } + } + } + } else { /* d == 16 */ + /* UL --> LR scan */ + for (i = 1; i < imax; i++) { + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { + val2 = GET_DATA_TWO_BYTES(lined - wpld, j); + val4 = GET_DATA_TWO_BYTES(lined, j - 1); + minval = L_MIN(val2, val4); + minval = L_MIN(minval, 0xfffe); + SET_DATA_TWO_BYTES(lined, j, minval + 1); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { + val7 = GET_DATA_TWO_BYTES(lined + wpld, j); + val5 = GET_DATA_TWO_BYTES(lined, j + 1); + minval = L_MIN(val5, val7); + minval = L_MIN(minval + 1, val); + SET_DATA_TWO_BYTES(lined, j, minval); + } + } + } + } + break; + + case 8: + if (d == 8) { + /* UL --> LR scan */ + for (i = 1; i < imax; i++) { + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((val = GET_DATA_BYTE(lined, j)) > 0) { + val1 = GET_DATA_BYTE(lined - wpld, j - 1); + val2 = GET_DATA_BYTE(lined - wpld, j); + val3 = GET_DATA_BYTE(lined - wpld, j + 1); + val4 = GET_DATA_BYTE(lined, j - 1); + minval = L_MIN(val1, val2); + minval = L_MIN(minval, val3); + minval = L_MIN(minval, val4); + minval = L_MIN(minval, 254); + SET_DATA_BYTE(lined, j, minval + 1); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((val = GET_DATA_BYTE(lined, j)) > 0) { + val8 = GET_DATA_BYTE(lined + wpld, j + 1); + val7 = GET_DATA_BYTE(lined + wpld, j); + val6 = GET_DATA_BYTE(lined + wpld, j - 1); + val5 = GET_DATA_BYTE(lined, j + 1); + minval = L_MIN(val8, val7); + minval = L_MIN(minval, val6); + minval = L_MIN(minval, val5); + minval = L_MIN(minval + 1, val); + SET_DATA_BYTE(lined, j, minval); + } + } + } + } else { /* d == 16 */ + /* UL --> LR scan */ + for (i = 1; i < imax; i++) { + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { + val1 = GET_DATA_TWO_BYTES(lined - wpld, j - 1); + val2 = GET_DATA_TWO_BYTES(lined - wpld, j); + val3 = GET_DATA_TWO_BYTES(lined - wpld, j + 1); + val4 = GET_DATA_TWO_BYTES(lined, j - 1); + minval = L_MIN(val1, val2); + minval = L_MIN(minval, val3); + minval = L_MIN(minval, val4); + minval = L_MIN(minval, 0xfffe); + SET_DATA_TWO_BYTES(lined, j, minval + 1); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { + val8 = GET_DATA_TWO_BYTES(lined + wpld, j + 1); + val7 = GET_DATA_TWO_BYTES(lined + wpld, j); + val6 = GET_DATA_TWO_BYTES(lined + wpld, j - 1); + val5 = GET_DATA_TWO_BYTES(lined, j + 1); + minval = L_MIN(val8, val7); + minval = L_MIN(minval, val6); + minval = L_MIN(minval, val5); + minval = L_MIN(minval + 1, val); + SET_DATA_TWO_BYTES(lined, j, minval); + } + } + } + } + break; + + default: + L_ERROR("connectivity must be 4 or 8\n", procName); + break; + } +} + + +/*-----------------------------------------------------------------------* + * Seed spread (based on distance function) * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSeedspread() + * + * \param[in] pixs 8 bpp + * \param[in] connectivity 4 or 8 + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) The raster/anti-raster method for implementing this filling
+ *          operation was suggested by Ray Smith.
+ *      (2) This takes an arbitrary set of nonzero pixels in pixs, which
+ *          can be sparse, and spreads (extrapolates) the values to
+ *          fill all the pixels in pixd with the nonzero value it is
+ *          closest to in pixs.  This is similar (though not completely
+ *          equivalent) to doing a Voronoi tiling of the image, with a
+ *          tile surrounding each pixel that has a nonzero value.
+ *          All pixels within a tile are then closer to its "central"
+ *          pixel than to any others.  Then assign the value of the
+ *          "central" pixel to each pixel in the tile.
+ *      (3) This is implemented by computing a distance function in parallel
+ *          with the fill.  The distance function uses free boundary
+ *          conditions (assumed maxval outside), and it controls the
+ *          propagation of the pixels in pixd away from the nonzero
+ *          (seed) values.  This is done in 2 traversals (raster/antiraster).
+ *          In the raster direction, whenever the distance function
+ *          is nonzero, the spread pixel takes on the value of its
+ *          predecessor that has the minimum distance value.  In the
+ *          antiraster direction, whenever the distance function is nonzero
+ *          and its value is replaced by a smaller value, the spread
+ *          pixel takes the value of the predecessor with the minimum
+ *          distance value.
+ *      (4) At boundaries where a pixel is equidistant from two
+ *          nearest nonzero (seed) pixels, the decision of which value
+ *          to use is arbitrary (greedy in search for minimum distance).
+ *          This can give rise to strange-looking results, particularly
+ *          for 4-connectivity where the L1 distance is computed from
+ *          steps in N,S,E and W directions (no diagonals).
+ * 
+ */ +PIX * +pixSeedspread(PIX *pixs, + l_int32 connectivity) +{ +l_int32 w, h, wplt, wplg; +l_uint32 *datat, *datag; +PIX *pixm, *pixt, *pixg, *pixd; + + PROCNAME("pixSeedspread"); + + if (!pixs || pixGetDepth(pixs) != 8) + return (PIX *)ERROR_PTR("!pixs or pixs not 8 bpp", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + /* Add a 4 byte border to pixs. This simplifies the computation. */ + pixg = pixAddBorder(pixs, 4, 0); + pixGetDimensions(pixg, &w, &h, NULL); + + /* Initialize distance function pixt. Threshold pixs to get + * a 0 at the seed points where the pixs pixel is nonzero, and + * a 1 at all points that need to be filled. Use this as a + * mask to set a 1 in pixt at all non-seed points. Also, set all + * pixt pixels in an interior boundary of width 1 to the + * maximum value. For debugging, to view the distance function, + * use pixConvert16To8(pixt, L_LS_BYTE) on small images. */ + pixm = pixThresholdToBinary(pixg, 1); + pixt = pixCreate(w, h, 16); + pixSetMasked(pixt, pixm, 1); + pixRasterop(pixt, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ + pixRasterop(pixt, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ + pixRasterop(pixt, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ + pixRasterop(pixt, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + + /* Do the interpolation and remove the border. */ + datag = pixGetData(pixg); + wplg = pixGetWpl(pixg); + seedspreadLow(datag, w, h, wplg, datat, wplt, connectivity); + pixd = pixRemoveBorder(pixg, 4); + + pixDestroy(&pixm); + pixDestroy(&pixg); + pixDestroy(&pixt); + return pixd; +} + + +/*! + * \brief seedspreadLow() + * + * See pixSeedspread() for a brief description of the algorithm here. + */ +static void +seedspreadLow(l_uint32 *datad, + l_int32 w, + l_int32 h, + l_int32 wpld, + l_uint32 *datat, + l_int32 wplt, + l_int32 connectivity) +{ +l_int32 val1t, val2t, val3t, val4t, val5t, val6t, val7t, val8t; +l_int32 i, j, imax, jmax, minval, valt, vald; +l_uint32 *linet, *lined; + + PROCNAME("seedspreadLow"); + + /* One raster scan followed by one anti-raster scan. + * pixt is initialized to have 0 on pixels where the + * input is specified in pixd, and to have 1 on all + * other pixels. We only change pixels in pixt and pixd + * that are non-zero in pixt. */ + imax = h - 1; + jmax = w - 1; + switch (connectivity) + { + case 4: + /* UL --> LR scan */ + for (i = 1; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { + val2t = GET_DATA_TWO_BYTES(linet - wplt, j); + val4t = GET_DATA_TWO_BYTES(linet, j - 1); + minval = L_MIN(val2t, val4t); + minval = L_MIN(minval, 0xfffe); + SET_DATA_TWO_BYTES(linet, j, minval + 1); + if (val2t < val4t) + vald = GET_DATA_BYTE(lined - wpld, j); + else + vald = GET_DATA_BYTE(lined, j - 1); + SET_DATA_BYTE(lined, j, vald); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { + val7t = GET_DATA_TWO_BYTES(linet + wplt, j); + val5t = GET_DATA_TWO_BYTES(linet, j + 1); + minval = L_MIN(val5t, val7t); + minval = L_MIN(minval + 1, valt); + if (valt > minval) { /* replace */ + SET_DATA_TWO_BYTES(linet, j, minval); + if (val5t < val7t) + vald = GET_DATA_BYTE(lined, j + 1); + else + vald = GET_DATA_BYTE(lined + wplt, j); + SET_DATA_BYTE(lined, j, vald); + } + } + } + } + break; + case 8: + /* UL --> LR scan */ + for (i = 1; i < h; i++) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = 1; j < jmax; j++) { + if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { + val1t = GET_DATA_TWO_BYTES(linet - wplt, j - 1); + val2t = GET_DATA_TWO_BYTES(linet - wplt, j); + val3t = GET_DATA_TWO_BYTES(linet - wplt, j + 1); + val4t = GET_DATA_TWO_BYTES(linet, j - 1); + minval = L_MIN(val1t, val2t); + minval = L_MIN(minval, val3t); + minval = L_MIN(minval, val4t); + minval = L_MIN(minval, 0xfffe); + SET_DATA_TWO_BYTES(linet, j, minval + 1); + if (minval == val1t) + vald = GET_DATA_BYTE(lined - wpld, j - 1); + else if (minval == val2t) + vald = GET_DATA_BYTE(lined - wpld, j); + else if (minval == val3t) + vald = GET_DATA_BYTE(lined - wpld, j + 1); + else /* minval == val4t */ + vald = GET_DATA_BYTE(lined, j - 1); + SET_DATA_BYTE(lined, j, vald); + } + } + } + + /* LR --> UL scan */ + for (i = imax - 1; i > 0; i--) { + linet = datat + i * wplt; + lined = datad + i * wpld; + for (j = jmax - 1; j > 0; j--) { + if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { + val8t = GET_DATA_TWO_BYTES(linet + wplt, j + 1); + val7t = GET_DATA_TWO_BYTES(linet + wplt, j); + val6t = GET_DATA_TWO_BYTES(linet + wplt, j - 1); + val5t = GET_DATA_TWO_BYTES(linet, j + 1); + minval = L_MIN(val8t, val7t); + minval = L_MIN(minval, val6t); + minval = L_MIN(minval, val5t); + minval = L_MIN(minval + 1, valt); + if (valt > minval) { /* replace */ + SET_DATA_TWO_BYTES(linet, j, minval); + if (minval == val5t + 1) + vald = GET_DATA_BYTE(lined, j + 1); + else if (minval == val6t + 1) + vald = GET_DATA_BYTE(lined + wpld, j - 1); + else if (minval == val7t + 1) + vald = GET_DATA_BYTE(lined + wpld, j); + else /* minval == val8t + 1 */ + vald = GET_DATA_BYTE(lined + wpld, j + 1); + SET_DATA_BYTE(lined, j, vald); + } + } + } + } + break; + default: + L_ERROR("connectivity must be 4 or 8\n", procName); + break; + } +} + + +/*-----------------------------------------------------------------------* + * Local extrema * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixLocalExtrema() + * + * \param[in] pixs 8 bpp + * \param[in] maxmin max allowed for the min in a 3x3 neighborhood; + * use 0 for default which is to have no upper bound + * \param[in] minmax min allowed for the max in a 3x3 neighborhood; + * use 0 for default which is to have no lower bound + * \param[out] ppixmin [optional] mask of local minima + * \param[out] ppixmax [optional] mask of local maxima + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This gives the actual local minima and maxima.
+ *          A local minimum is a pixel whose surrounding pixels all
+ *          have values at least as large, and likewise for a local
+ *          maximum.  For the local minima, %maxmin is the upper
+ *          bound for the value of pixs.  Likewise, for the local maxima,
+ *          %minmax is the lower bound for the value of pixs.
+ *      (2) The minima are found by starting with the erosion-and-equality
+ *          approach of pixSelectedLocalExtrema().  This is followed
+ *          by a qualification step, where each c.c. in the resulting
+ *          minimum mask is extracted, the pixels bordering it are
+ *          located, and they are queried.  If all of those pixels
+ *          are larger than the value of that minimum, it is a true
+ *          minimum and its c.c. is saved; otherwise the c.c. is
+ *          rejected.  Note that if a bordering pixel has the
+ *          same value as the minimum, it must then have a
+ *          neighbor that is smaller, so the component is not a
+ *          true minimum.
+ *      (3) The maxima are found by inverting the image and looking
+ *          for the minima there.
+ *      (4) The generated masks can be used as markers for
+ *          further operations.
+ * 
+ */ +l_ok +pixLocalExtrema(PIX *pixs, + l_int32 maxmin, + l_int32 minmax, + PIX **ppixmin, + PIX **ppixmax) +{ +PIX *pixmin, *pixmax, *pixt1, *pixt2; + + PROCNAME("pixLocalExtrema"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!ppixmin && !ppixmax) + return ERROR_INT("neither &pixmin, &pixmax are defined", procName, 1); + if (maxmin <= 0) maxmin = 254; + if (minmax <= 0) minmax = 1; + + if (ppixmin) { + pixt1 = pixErodeGray(pixs, 3, 3); + pixmin = pixFindEqualValues(pixs, pixt1); + pixDestroy(&pixt1); + pixQualifyLocalMinima(pixs, pixmin, maxmin); + *ppixmin = pixmin; + } + + if (ppixmax) { + pixt1 = pixInvert(NULL, pixs); + pixt2 = pixErodeGray(pixt1, 3, 3); + pixmax = pixFindEqualValues(pixt1, pixt2); + pixDestroy(&pixt2); + pixQualifyLocalMinima(pixt1, pixmax, 255 - minmax); + *ppixmax = pixmax; + pixDestroy(&pixt1); + } + + return 0; +} + + +/*! + * \brief pixQualifyLocalMinima() + * + * \param[in] pixs 8 bpp image from which pixm has been extracted + * \param[in] pixm 1 bpp mask of values equal to min in 3x3 neighborhood + * \param[in] maxval max allowed for the min in a 3x3 neighborhood; + * use 0 for default which is to have no upper bound + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function acts in-place to remove all c.c. in pixm
+ *          that are not true local minima in pixs.  As seen in
+ *          pixLocalExtrema(), the input pixm are found by selecting those
+ *          pixels of pixs whose values do not change with a 3x3
+ *          grayscale erosion.  Here, we require that for each c.c.
+ *          in pixm, all pixels in pixs that correspond to the exterior
+ *          boundary pixels of the c.c. have values that are greater
+ *          than the value within the c.c.
+ *      (2) The maximum allowed value for each local minimum can be
+ *          bounded with %maxval.  Use 0 for default, which is to have
+ *          no upper bound (equivalent to maxval == 254).
+ * 
+ */ +static l_int32 +pixQualifyLocalMinima(PIX *pixs, + PIX *pixm, + l_int32 maxval) +{ +l_int32 n, i, j, k, x, y, w, h, xc, yc, wc, hc, xon, yon; +l_int32 vals, wpls, wplc, ismin; +l_uint32 val; +l_uint32 *datas, *datac, *lines, *linec; +BOXA *boxa; +PIX *pix1, *pix2, *pix3; +PIXA *pixa; + + PROCNAME("pixQualifyLocalMinima"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm not defined or not 1 bpp", procName, 1); + if (maxval <= 0) maxval = 254; + + pixGetDimensions(pixs, &w, &h, NULL); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + boxa = pixConnComp(pixm, &pixa, 8); + n = pixaGetCount(pixa); + for (k = 0; k < n; k++) { + boxaGetBoxGeometry(boxa, k, &xc, &yc, &wc, &hc); + pix1 = pixaGetPix(pixa, k, L_COPY); + pix2 = pixAddBorder(pix1, 1, 0); + pix3 = pixDilateBrick(NULL, pix2, 3, 3); + pixXor(pix3, pix3, pix2); /* exterior boundary pixels */ + datac = pixGetData(pix3); + wplc = pixGetWpl(pix3); + nextOnPixelInRaster(pix1, 0, 0, &xon, &yon); + pixGetPixel(pixs, xc + xon, yc + yon, &val); + if (val > maxval) { /* too large; erase */ + pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pix1, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + continue; + } + ismin = TRUE; + + /* Check all values in pixs that correspond to the exterior + * boundary pixels of the c.c. in pixm. Verify that the + * value in the c.c. is always less. */ + for (i = 0, y = yc - 1; i < hc + 2 && y >= 0 && y < h; i++, y++) { + lines = datas + y * wpls; + linec = datac + i * wplc; + for (j = 0, x = xc - 1; j < wc + 2 && x >= 0 && x < w; j++, x++) { + if (GET_DATA_BIT(linec, j)) { + vals = GET_DATA_BYTE(lines, x); + if (vals <= val) { /* not a minimum! */ + ismin = FALSE; + break; + } + } + } + if (!ismin) + break; + } + if (!ismin) /* erase it */ + pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pix1, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + return 0; +} + + +/*! + * \brief pixSelectedLocalExtrema() + * + * \param[in] pixs 8 bpp + * \param[in] mindist -1 for keeping all pixels; >= 0 specifies distance + * \param[out] ppixmin mask of local minima + * \param[out] ppixmax mask of local maxima + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This selects those local 3x3 minima that are at least a
+ *          specified distance from the nearest local 3x3 maxima, and v.v.
+ *          for the selected set of local 3x3 maxima.
+ *          The local 3x3 minima is the set of pixels whose value equals
+ *          the value after a 3x3 brick erosion, and the local 3x3 maxima
+ *          is the set of pixels whose value equals the value after
+ *          a 3x3 brick dilation.
+ *      (2) mindist is the minimum distance allowed between
+ *          local 3x3 minima and local 3x3 maxima, in an 8-connected sense.
+ *          mindist == 1 keeps all pixels found in step 1.
+ *          mindist == 0 removes all pixels from each mask that are
+ *          both a local 3x3 minimum and a local 3x3 maximum.
+ *          mindist == 1 removes any local 3x3 minimum pixel that touches a
+ *          local 3x3 maximum pixel, and likewise for the local maxima.
+ *          To make the decision, visualize each local 3x3 minimum pixel
+ *          as being surrounded by a square of size (2 * mindist + 1)
+ *          on each side, such that no local 3x3 maximum pixel is within
+ *          that square; and v.v.
+ *      (3) The generated masks can be used as markers for further operations.
+ * 
+ */ +l_ok +pixSelectedLocalExtrema(PIX *pixs, + l_int32 mindist, + PIX **ppixmin, + PIX **ppixmax) +{ +PIX *pixmin, *pixmax, *pixt, *pixtmin, *pixtmax; + + PROCNAME("pixSelectedLocalExtrema"); + + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); + if (!ppixmin || !ppixmax) + return ERROR_INT("&pixmin and &pixmax not both defined", procName, 1); + + pixt = pixErodeGray(pixs, 3, 3); + pixmin = pixFindEqualValues(pixs, pixt); + pixDestroy(&pixt); + pixt = pixDilateGray(pixs, 3, 3); + pixmax = pixFindEqualValues(pixs, pixt); + pixDestroy(&pixt); + + /* Remove all points that are within the prescribed distance + * from each other. */ + if (mindist < 0) { /* remove no points */ + *ppixmin = pixmin; + *ppixmax = pixmax; + } else if (mindist == 0) { /* remove points belonging to both sets */ + pixt = pixAnd(NULL, pixmin, pixmax); + *ppixmin = pixSubtract(pixmin, pixmin, pixt); + *ppixmax = pixSubtract(pixmax, pixmax, pixt); + pixDestroy(&pixt); + } else { + pixtmin = pixDilateBrick(NULL, pixmin, + 2 * mindist + 1, 2 * mindist + 1); + pixtmax = pixDilateBrick(NULL, pixmax, + 2 * mindist + 1, 2 * mindist + 1); + *ppixmin = pixSubtract(pixmin, pixmin, pixtmax); + *ppixmax = pixSubtract(pixmax, pixmax, pixtmin); + pixDestroy(&pixtmin); + pixDestroy(&pixtmax); + } + return 0; +} + + +/*! + * \brief pixFindEqualValues() + * + * \param[in] pixs1 8 bpp + * \param[in] pixs2 8 bpp + * \return pixd 1 bpp mask, or NULL on error + * + *
+ * Notes:
+ *      (1) The two images are aligned at the UL corner, and the returned
+ *          image has ON pixels where the pixels in pixs1 and pixs2
+ *          have equal values.
+ * 
+ */ +PIX * +pixFindEqualValues(PIX *pixs1, + PIX *pixs2) +{ +l_int32 w1, h1, w2, h2, w, h; +l_int32 i, j, val1, val2, wpls1, wpls2, wpld; +l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; +PIX *pixd; + + PROCNAME("pixFindEqualValues"); + + if (!pixs1 || pixGetDepth(pixs1) != 8) + return (PIX *)ERROR_PTR("pixs1 undefined or not 8 bpp", procName, NULL); + if (!pixs2 || pixGetDepth(pixs2) != 8) + return (PIX *)ERROR_PTR("pixs2 undefined or not 8 bpp", procName, NULL); + pixGetDimensions(pixs1, &w1, &h1, NULL); + pixGetDimensions(pixs2, &w2, &h2, NULL); + w = L_MIN(w1, w2); + h = L_MIN(h1, h2); + pixd = pixCreate(w, h, 1); + datas1 = pixGetData(pixs1); + datas2 = pixGetData(pixs2); + datad = pixGetData(pixd); + wpls1 = pixGetWpl(pixs1); + wpls2 = pixGetWpl(pixs2); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lines1 = datas1 + i * wpls1; + lines2 = datas2 + i * wpls2; + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + val1 = GET_DATA_BYTE(lines1, j); + val2 = GET_DATA_BYTE(lines2, j); + if (val1 == val2) + SET_DATA_BIT(lined, j); + } + } + + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Selection of minima in mask connected components * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixSelectMinInConnComp() + * + * \param[in] pixs 8 bpp + * \param[in] pixm 1 bpp + * \param[out] ppta pta of min pixel locations + * \param[out] pnav [optional] numa of minima values + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) For each 8 connected component in pixm, this finds
+ *          a pixel in pixs that has the lowest value, and saves
+ *          it in a Pta.  If several pixels in pixs have the same
+ *          minimum value, it picks the first one found.
+ *      (2) For a mask pixm of true local minima, all pixels in each
+ *          connected component have the same value in pixs, so it is
+ *          fastest to select one of them using a special seedfill
+ *          operation.  Not yet implemented.
+ * 
+ */ +l_ok +pixSelectMinInConnComp(PIX *pixs, + PIX *pixm, + PTA **ppta, + NUMA **pnav) +{ +l_int32 bx, by, bw, bh, i, j, c, n; +l_int32 xs, ys, minx, miny, wpls, wplt, val, minval; +l_uint32 *datas, *datat, *lines, *linet; +BOXA *boxa; +NUMA *nav; +PIX *pixt, *pixs2, *pixm2; +PIXA *pixa; +PTA *pta; + + PROCNAME("pixSelectMinInConnComp"); + + if (!ppta) + return ERROR_INT("&pta not defined", procName, 1); + *ppta = NULL; + if (pnav) *pnav = NULL; + if (!pixs || pixGetDepth(pixs) != 8) + return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); + if (!pixm || pixGetDepth(pixm) != 1) + return ERROR_INT("pixm undefined or not 1 bpp", procName, 1); + + /* Crop to the min size if necessary */ + if (pixCropToMatch(pixs, pixm, &pixs2, &pixm2)) { + pixDestroy(&pixs2); + pixDestroy(&pixm2); + return ERROR_INT("cropping failure", procName, 1); + } + + /* Find value and location of min value pixel in each component */ + boxa = pixConnComp(pixm2, &pixa, 8); + n = boxaGetCount(boxa); + pta = ptaCreate(n); + *ppta = pta; + nav = numaCreate(n); + datas = pixGetData(pixs2); + wpls = pixGetWpl(pixs2); + for (c = 0; c < n; c++) { + pixt = pixaGetPix(pixa, c, L_CLONE); + boxaGetBoxGeometry(boxa, c, &bx, &by, &bw, &bh); + if (bw == 1 && bh == 1) { + ptaAddPt(pta, bx, by); + numaAddNumber(nav, GET_DATA_BYTE(datas + by * wpls, bx)); + pixDestroy(&pixt); + continue; + } + datat = pixGetData(pixt); + wplt = pixGetWpl(pixt); + minx = miny = 1000000; + minval = 256; + for (i = 0; i < bh; i++) { + ys = by + i; + lines = datas + ys * wpls; + linet = datat + i * wplt; + for (j = 0; j < bw; j++) { + xs = bx + j; + if (GET_DATA_BIT(linet, j)) { + val = GET_DATA_BYTE(lines, xs); + if (val < minval) { + minval = val; + minx = xs; + miny = ys; + } + } + } + } + ptaAddPt(pta, minx, miny); + numaAddNumber(nav, GET_DATA_BYTE(datas + miny * wpls, minx)); + pixDestroy(&pixt); + } + + boxaDestroy(&boxa); + pixaDestroy(&pixa); + if (pnav) + *pnav = nav; + else + numaDestroy(&nav); + pixDestroy(&pixs2); + pixDestroy(&pixm2); + return 0; +} + + +/*-----------------------------------------------------------------------* + * Removal of seeded connected components from a mask * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixRemoveSeededComponents() + * + * \param[in] pixd [optional]; can be null or equal to pixm; 1 bpp + * \param[in] pixs 1 bpp seed + * \param[in] pixm 1 bpp filling mask + * \param[in] connectivity 4 or 8 + * \param[in] bordersize amount of border clearing + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) This removes each component in pixm for which there is
+ *          at least one seed in pixs.  If pixd == NULL, this returns
+ *          the result in a new pixd.  Otherwise, it is an in-place
+ *          operation on pixm.  In no situation is pixs altered,
+ *          because we do the filling with a copy of pixs.
+ *      (2) If bordersize > 0, it also clears all pixels within a
+ *          distance %bordersize of the edge of pixd.  This is here
+ *          because pixLocalExtrema() typically finds local minima
+ *          at the border.  Use %bordersize >= 2 to remove these.
+ * 
+ */ +PIX * +pixRemoveSeededComponents(PIX *pixd, + PIX *pixs, + PIX *pixm, + l_int32 connectivity, + l_int32 bordersize) +{ +PIX *pixt; + + PROCNAME("pixRemoveSeededComponents"); + + if (!pixs || pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, pixd); + if (!pixm || pixGetDepth(pixm) != 1) + return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, pixd); + if (pixd && pixd != pixm) + return (PIX *)ERROR_PTR("operation not inplace", procName, pixd); + + pixt = pixCopy(NULL, pixs); + pixSeedfillBinary(pixt, pixt, pixm, connectivity); + pixd = pixXor(pixd, pixm, pixt); + if (bordersize > 0) + pixSetOrClearBorder(pixd, bordersize, bordersize, bordersize, + bordersize, PIX_CLR); + pixDestroy(&pixt); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/sel1.c b/3rdparty/hgOCR/leptonica/sel1.c new file mode 100644 index 00000000..e630972d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sel1.c @@ -0,0 +1,2376 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file sel1.c + *
+ *
+ *      Basic ops on Sels and Selas
+ *
+ *         Create/destroy/copy:
+ *            SELA      *selaCreate()
+ *            void       selaDestroy()
+ *            SEL       *selCreate()
+ *            void       selDestroy()
+ *            SEL       *selCopy()
+ *            SEL       *selCreateBrick()
+ *            SEL       *selCreateComb()
+ *
+ *         Helper proc:
+ *            l_int32  **create2dIntArray()
+ *
+ *         Extension of sela:
+ *            SELA      *selaAddSel()
+ *            static l_int32  selaExtendArray()
+ *
+ *         Accessors:
+ *            l_int32    selaGetCount()
+ *            SEL       *selaGetSel()
+ *            char      *selGetName()
+ *            l_int32    selSetName()
+ *            l_int32    selaFindSelByName()
+ *            l_int32    selGetElement()
+ *            l_int32    selSetElement()
+ *            l_int32    selGetParameters()
+ *            l_int32    selSetOrigin()
+ *            l_int32    selGetTypeAtOrigin()
+ *            char      *selaGetBrickName()
+ *            char      *selaGetCombName()
+ *     static char      *selaComputeCompositeParameters()
+ *            l_int32    getCompositeParameters()
+ *            SARRAY    *selaGetSelnames()
+ *
+ *         Max translations for erosion and hmt
+ *            l_int32    selFindMaxTranslations()
+ *
+ *         Rotation by multiples of 90 degrees
+ *            SEL       *selRotateOrth()
+ *
+ *         Sela and Sel serialized I/O
+ *            SELA      *selaRead()
+ *            SELA      *selaReadStream()
+ *            SEL       *selRead()
+ *            SEL       *selReadStream()
+ *            l_int32    selaWrite()
+ *            l_int32    selaWriteStream()
+ *            l_int32    selWrite()
+ *            l_int32    selWriteStream()
+ *
+ *         Building custom hit-miss sels from compiled strings
+ *            SEL       *selCreateFromString()
+ *            char      *selPrintToString()     [for debugging]
+ *
+ *         Building custom hit-miss sels from a simple file format
+ *            SELA      *selaCreateFromFile()
+ *            static SEL *selCreateFromSArray()
+ *
+ *         Making hit-only sels from Pta and Pix
+ *            SEL       *selCreateFromPta()
+ *            SEL       *selCreateFromPix()
+ *
+ *         Making hit-miss sels from Pix and image files
+ *            SEL       *selReadFromColorImage()
+ *            SEL       *selCreateFromColorPix()
+ *
+ *         Printable display of sel
+ *            PIX       *selDisplayInPix()
+ *            PIX       *selaDisplayInPix()
+ *
+ *     Usage notes:
+ *        In this file we have seven functions that make sels:
+ *          (1)  selCreate(), with input (h, w, [name])
+ *               The generic function.  Roll your own, using selSetElement().
+ *          (2)  selCreateBrick(), with input (h, w, cy, cx, val)
+ *               The most popular function.  Makes a rectangular sel of
+ *               all hits, misses or don't-cares.  We have many morphology
+ *               operations that create a sel of all hits, use it, and
+ *               destroy it.
+ *          (3)  selCreateFromString() with input (text, h, w, [name])
+ *               Adam Langley's clever function, allows you to make a hit-miss
+ *               sel from a string in code that is geometrically laid out
+ *               just like the actual sel.
+ *          (4)  selaCreateFromFile() with input (filename)
+ *               This parses a simple file format to create an array of
+ *               hit-miss sels.  The sel data uses the same encoding
+ *               as in (3), with geometrical layout enforced.
+ *          (5)  selCreateFromPta() with input (pta, cy, cx, [name])
+ *               Another way to make a sel with only hits.
+ *          (6)  selCreateFromPix() with input (pix, cy, cx, [name])
+ *               Yet another way to make a sel from hits.
+ *          (7)  selCreateFromColorPix() with input (pix, name).
+ *               Another way to make a general hit-miss sel, starting with
+ *               an image editor.
+ *        In addition, there are three functions in selgen.c that
+ *        automatically generate a hit-miss sel from a pix and
+ *        a number of parameters.  This is useful for problems like
+ *        "find all patterns that look like this one."
+ *
+ *        Consistency, being the hobgoblin of small minds,
+ *        is adhered to here in the dimensioning and accessing of sels.
+ *        Everything is done in standard matrix (row, column) order.
+ *        When we set specific elements in a sel, we likewise use
+ *        (row, col) ordering:
+ *             selSetElement(), with input (row, col, type)
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Bounds on sel ptr array size */ +static const l_uint32 MaxPtrArraySize = 10000; +static const l_int32 InitialPtrArraySize = 50; /*!< n'importe quoi */ + + /* Bounds on kernel size */ +static const l_uint32 MaxKernelSize = 10000; + + /* Static functions */ +static l_int32 selaExtendArray(SELA *sela); +static SEL *selCreateFromSArray(SARRAY *sa, l_int32 first, l_int32 last); + +struct CompParameterMap +{ + l_int32 size; + l_int32 size1; + l_int32 size2; + char selnameh1[20]; + char selnameh2[20]; + char selnamev1[20]; + char selnamev2[20]; +}; + +static const struct CompParameterMap comp_parameter_map[] = + { { 2, 2, 1, "sel_2h", "", "sel_2v", "" }, + { 3, 3, 1, "sel_3h", "", "sel_3v", "" }, + { 4, 2, 2, "sel_2h", "sel_comb_4h", "sel_2v", "sel_comb_4v" }, + { 5, 5, 1, "sel_5h", "", "sel_5v", "" }, + { 6, 3, 2, "sel_3h", "sel_comb_6h", "sel_3v", "sel_comb_6v" }, + { 7, 7, 1, "sel_7h", "", "sel_7v", "" }, + { 8, 4, 2, "sel_4h", "sel_comb_8h", "sel_4v", "sel_comb_8v" }, + { 9, 3, 3, "sel_3h", "sel_comb_9h", "sel_3v", "sel_comb_9v" }, + { 10, 5, 2, "sel_5h", "sel_comb_10h", "sel_5v", "sel_comb_10v" }, + { 11, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, + { 12, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, + { 13, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, + { 14, 7, 2, "sel_7h", "sel_comb_14h", "sel_7v", "sel_comb_14v" }, + { 15, 5, 3, "sel_5h", "sel_comb_15h", "sel_5v", "sel_comb_15v" }, + { 16, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, + { 17, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, + { 18, 6, 3, "sel_6h", "sel_comb_18h", "sel_6v", "sel_comb_18v" }, + { 19, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, + { 20, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, + { 21, 7, 3, "sel_7h", "sel_comb_21h", "sel_7v", "sel_comb_21v" }, + { 22, 11, 2, "sel_11h", "sel_comb_22h", "sel_11v", "sel_comb_22v" }, + { 23, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, + { 24, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, + { 25, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, + { 26, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, + { 27, 9, 3, "sel_9h", "sel_comb_27h", "sel_9v", "sel_comb_27v" }, + { 28, 7, 4, "sel_7h", "sel_comb_28h", "sel_7v", "sel_comb_28v" }, + { 29, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, + { 30, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, + { 31, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, + { 32, 8, 4, "sel_8h", "sel_comb_32h", "sel_8v", "sel_comb_32v" }, + { 33, 11, 3, "sel_11h", "sel_comb_33h", "sel_11v", "sel_comb_33v" }, + { 34, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, + { 35, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, + { 36, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, + { 37, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, + { 38, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, + { 39, 13, 3, "sel_13h", "sel_comb_39h", "sel_13v", "sel_comb_39v" }, + { 40, 8, 5, "sel_8h", "sel_comb_40h", "sel_8v", "sel_comb_40v" }, + { 41, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, + { 42, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, + { 43, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, + { 44, 11, 4, "sel_11h", "sel_comb_44h", "sel_11v", "sel_comb_44v" }, + { 45, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, + { 46, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, + { 47, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, + { 48, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, + { 49, 7, 7, "sel_7h", "sel_comb_49h", "sel_7v", "sel_comb_49v" }, + { 50, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, + { 51, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, + { 52, 13, 4, "sel_13h", "sel_comb_52h", "sel_13v", "sel_comb_52v" }, + { 53, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, + { 54, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, + { 55, 11, 5, "sel_11h", "sel_comb_55h", "sel_11v", "sel_comb_55v" }, + { 56, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, + { 57, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, + { 58, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, + { 59, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, + { 60, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, + { 61, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, + { 62, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" }, + { 63, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" } }; + + + +/*------------------------------------------------------------------------* + * Create / Destroy / Copy * + *------------------------------------------------------------------------*/ +/*! + * \brief selaCreate() + * + * \param[in] n initial number of sel ptrs; use 0 for default + * \return sela, or NULL on error + */ +SELA * +selaCreate(l_int32 n) +{ +SELA *sela; + + PROCNAME("selaCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + /* Make array of sel ptrs */ + sela = (SELA *)LEPT_CALLOC(1, sizeof(SELA)); + sela->nalloc = n; + sela->n = 0; + if ((sela->sel = (SEL **)LEPT_CALLOC(n, sizeof(SEL *))) == NULL) { + LEPT_FREE(sela); + return (SELA *)ERROR_PTR("sel ptrs not made", procName, NULL); + } + return sela; +} + + +/*! + * \brief selaDestroy() + * + * \param[in,out] psela will be set to null before returning + * \return void + */ +void +selaDestroy(SELA **psela) +{ +SELA *sela; +l_int32 i; + + if (!psela) return; + if ((sela = *psela) == NULL) + return; + + for (i = 0; i < sela->n; i++) + selDestroy(&sela->sel[i]); + LEPT_FREE(sela->sel); + LEPT_FREE(sela); + *psela = NULL; + return; +} + + +/*! + * \brief selCreate() + * + * \param[in] height + * \param[in] width + * \param[in] name [optional] sel name; can be null + * \return sel, or NULL on error + * + *
+ * Notes:
+ *      (1) selCreate() initializes all values to 0.
+ *      (2) After this call, (cy,cx) and nonzero data values must be
+ *          assigned.  If a text name is not assigned here, it will
+ *          be needed later when the sel is put into a sela.
+ * 
+ */ +SEL * +selCreate(l_int32 height, + l_int32 width, + const char *name) +{ +SEL *sel; + + PROCNAME("selCreate"); + + if ((sel = (SEL *)LEPT_CALLOC(1, sizeof(SEL))) == NULL) + return (SEL *)ERROR_PTR("sel not made", procName, NULL); + if (name) + sel->name = stringNew(name); + sel->sy = height; + sel->sx = width; + if ((sel->data = create2dIntArray(height, width)) == NULL) { + LEPT_FREE(sel->name); + LEPT_FREE(sel); + return (SEL *)ERROR_PTR("data not allocated", procName, NULL); + } + + return sel; +} + + +/*! + * \brief selDestroy() + * + * \param[in,out] psel will be set to null before returning + * \return void + */ +void +selDestroy(SEL **psel) +{ +l_int32 i; +SEL *sel; + + PROCNAME("selDestroy"); + + if (psel == NULL) { + L_WARNING("ptr address is NULL!\n", procName); + return; + } + if ((sel = *psel) == NULL) + return; + + for (i = 0; i < sel->sy; i++) + LEPT_FREE(sel->data[i]); + LEPT_FREE(sel->data); + if (sel->name) + LEPT_FREE(sel->name); + LEPT_FREE(sel); + + *psel = NULL; + return; +} + + +/*! + * \brief selCopy() + * + * \param[in] sel + * \return a copy of the sel, or NULL on error + */ +SEL * +selCopy(SEL *sel) +{ +l_int32 sx, sy, cx, cy, i, j; +SEL *csel; + + PROCNAME("selCopy"); + + if (!sel) + return (SEL *)ERROR_PTR("sel not defined", procName, NULL); + + if ((csel = (SEL *)LEPT_CALLOC(1, sizeof(SEL))) == NULL) + return (SEL *)ERROR_PTR("csel not made", procName, NULL); + selGetParameters(sel, &sy, &sx, &cy, &cx); + csel->sy = sy; + csel->sx = sx; + csel->cy = cy; + csel->cx = cx; + + if ((csel->data = create2dIntArray(sy, sx)) == NULL) { + LEPT_FREE(csel); + return (SEL *)ERROR_PTR("sel data not made", procName, NULL); + } + + for (i = 0; i < sy; i++) + for (j = 0; j < sx; j++) + csel->data[i][j] = sel->data[i][j]; + + if (sel->name) + csel->name = stringNew(sel->name); + + return csel; +} + + +/*! + * \brief selCreateBrick() + * + * \param[in] h, w height, width + * \param[in] cy, cx origin, relative to UL corner at 0,0 + * \param[in] type SEL_HIT, SEL_MISS, or SEL_DONT_CARE + * \return sel, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a rectangular sel of all hits, misses or don't cares.
+ * 
+ */ +SEL * +selCreateBrick(l_int32 h, + l_int32 w, + l_int32 cy, + l_int32 cx, + l_int32 type) +{ +l_int32 i, j; +SEL *sel; + + PROCNAME("selCreateBrick"); + + if (h <= 0 || w <= 0) + return (SEL *)ERROR_PTR("h and w must both be > 0", procName, NULL); + if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) + return (SEL *)ERROR_PTR("invalid sel element type", procName, NULL); + + if ((sel = selCreate(h, w, NULL)) == NULL) + return (SEL *)ERROR_PTR("sel not made", procName, NULL); + selSetOrigin(sel, cy, cx); + for (i = 0; i < h; i++) + for (j = 0; j < w; j++) + sel->data[i][j] = type; + + return sel; +} + + +/*! + * \brief selCreateComb() + * + * \param[in] factor1 contiguous space between comb tines + * \param[in] factor2 number of comb tines + * \param[in] direction L_HORIZ, L_VERT + * \return sel, or NULL on error + * + *
+ * Notes:
+ *      (1) This generates a comb Sel of hits with the origin as
+ *          near the center as possible.
+ *      (2) In use, this is complemented by a brick sel of size %factor1,
+ *          Both brick and comb sels are made by selectComposableSels().
+ * 
+ */ +SEL * +selCreateComb(l_int32 factor1, + l_int32 factor2, + l_int32 direction) +{ +l_int32 i, size, z; +SEL *sel; + + PROCNAME("selCreateComb"); + + if (factor1 < 1 || factor2 < 1) + return (SEL *)ERROR_PTR("factors must be >= 1", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT) + return (SEL *)ERROR_PTR("invalid direction", procName, NULL); + + size = factor1 * factor2; + if (direction == L_HORIZ) { + sel = selCreate(1, size, NULL); + selSetOrigin(sel, 0, size / 2); + } else { + sel = selCreate(size, 1, NULL); + selSetOrigin(sel, size / 2, 0); + } + + /* Lay down the elements of the comb */ + for (i = 0; i < factor2; i++) { + z = factor1 / 2 + i * factor1; +/* fprintf(stderr, "i = %d, factor1 = %d, factor2 = %d, z = %d\n", + i, factor1, factor2, z); */ + if (direction == L_HORIZ) + selSetElement(sel, 0, z, SEL_HIT); + else + selSetElement(sel, z, 0, SEL_HIT); + } + + return sel; +} + + +/*! + * \brief create2dIntArray() + * + * \param[in] sy rows == height + * \param[in] sx columns == width + * \return doubly indexed array i.e., an array of sy row pointers, + * each of which points to an array of sx ints + * + *
+ * Notes:
+ *      (1) The array[sy][sx] is indexed in standard "matrix notation",
+ *          with the row index first.
+ * 
+ */ +l_int32 ** +create2dIntArray(l_int32 sy, + l_int32 sx) +{ +l_int32 i, j, success; +l_int32 **array; + + PROCNAME("create2dIntArray"); + + if (sx <= 0 || sx > MaxKernelSize) + return (l_int32 **)ERROR_PTR("sx out of bounds", procName, NULL); + if (sy <= 0 || sy > MaxKernelSize) + return (l_int32 **)ERROR_PTR("sy out of bounds", procName, NULL); + + if ((array = (l_int32 **)LEPT_CALLOC(sy, sizeof(l_int32 *))) == NULL) + return (l_int32 **)ERROR_PTR("ptr array not made", procName, NULL); + success = TRUE; + for (i = 0; i < sy; i++) { + if ((array[i] = (l_int32 *)LEPT_CALLOC(sx, sizeof(l_int32))) == NULL) { + success = FALSE; + break; + } + } + if (success) return array; + + /* Cleanup after error */ + for (j = 0; j < i; j++) + LEPT_FREE(array[j]); + LEPT_FREE(array); + return (l_int32 **)ERROR_PTR("array not made", procName, NULL); +} + + + +/*------------------------------------------------------------------------* + * Extension of sela * + *------------------------------------------------------------------------*/ +/*! + * \brief selaAddSel() + * + * \param[in] sela + * \param[in] sel to be added + * \param[in] selname ignored if already defined in sel; + * req'd in sel when added to a sela + * \param[in] copyflag L_INSERT or L_COPY + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This adds a sel, either inserting or making a copy.
+ *      (2) Because every sel in a sela must have a name, it copies
+ *          the input name if necessary.  You can input NULL for
+ *          selname if the sel already has a name.
+ * 
+ */ +l_ok +selaAddSel(SELA *sela, + SEL *sel, + const char *selname, + l_int32 copyflag) +{ +l_int32 n; +SEL *csel; + + PROCNAME("selaAddSel"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + if (!sel->name && !selname) + return ERROR_INT("added sel must have name", procName, 1); + if (copyflag != L_INSERT && copyflag != L_COPY) + return ERROR_INT("invalid copyflag", procName, 1); + + if (copyflag == L_COPY) { + if ((csel = selCopy(sel)) == NULL) + return ERROR_INT("csel not made", procName, 1); + } else { /* copyflag == L_INSERT */ + csel = sel; + } + if (!csel->name) + csel->name = stringNew(selname); + + n = selaGetCount(sela); + if (n >= sela->nalloc) + selaExtendArray(sela); + sela->sel[n] = csel; + sela->n++; + + return 0; +} + + +/*! + * \brief selaExtendArray() + * + * \param[in] sela + * \return 0 if OK; 1 on error + */ +static l_int32 +selaExtendArray(SELA *sela) +{ + PROCNAME("selaExtendArray"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + + if ((sela->sel = (SEL **)reallocNew((void **)&sela->sel, + sizeof(SEL *) * sela->nalloc, + 2 * sizeof(SEL *) * sela->nalloc)) == NULL) + return ERROR_INT("new ptr array not returned", procName, 1); + + sela->nalloc = 2 * sela->nalloc; + return 0; +} + + + +/*----------------------------------------------------------------------* + * Accessors * + *----------------------------------------------------------------------*/ +/*! + * \brief selaGetCount() + * + * \param[in] sela + * \return count, or 0 on error + */ +l_int32 +selaGetCount(SELA *sela) +{ + PROCNAME("selaGetCount"); + + if (!sela) + return ERROR_INT("sela not defined", procName, 0); + + return sela->n; +} + + +/*! + * \brief selaGetSel() + * + * \param[in] sela + * \param[in] i index of sel to be retrieved not copied + * \return sel, or NULL on error + * + *
+ * Notes:
+ *      (1) This returns a ptr to the sel, not a copy, so the caller
+ *          must not destroy it!
+ * 
+ */ +SEL * +selaGetSel(SELA *sela, + l_int32 i) +{ + PROCNAME("selaGetSel"); + + if (!sela) + return (SEL *)ERROR_PTR("sela not defined", procName, NULL); + + if (i < 0 || i >= sela->n) + return (SEL *)ERROR_PTR("invalid index", procName, NULL); + return sela->sel[i]; +} + + +/*! + * \brief selGetName() + * + * \param[in] sel + * \return sel name not copied, or NULL if no name or on error + */ +char * +selGetName(SEL *sel) +{ + PROCNAME("selGetName"); + + if (!sel) + return (char *)ERROR_PTR("sel not defined", procName, NULL); + + return sel->name; +} + + +/*! + * \brief selSetName() + * + * \param[in] sel + * \param[in] name [optional]; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Always frees the existing sel name, if defined.
+ *      (2) If name is not defined, just clears any existing sel name.
+ * 
+ */ +l_ok +selSetName(SEL *sel, + const char *name) +{ + PROCNAME("selSetName"); + + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + + return stringReplace(&sel->name, name); +} + + +/*! + * \brief selaFindSelByName() + * + * \param[in] sela + * \param[in] name sel name + * \param[out] pindex [optional] + * \param[in] psel [optional] sel (not a copy) + * \return 0 if OK; 1 on error + */ +l_ok +selaFindSelByName(SELA *sela, + const char *name, + l_int32 *pindex, + SEL **psel) +{ +l_int32 i, n; +char *sname; +SEL *sel; + + PROCNAME("selaFindSelByName"); + + if (pindex) *pindex = -1; + if (psel) *psel = NULL; + + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + + n = selaGetCount(sela); + for (i = 0; i < n; i++) + { + if ((sel = selaGetSel(sela, i)) == NULL) { + L_WARNING("missing sel\n", procName); + continue; + } + + sname = selGetName(sel); + if (sname && (!strcmp(name, sname))) { + if (pindex) + *pindex = i; + if (psel) + *psel = sel; + return 0; + } + } + + return 1; +} + + +/*! + * \brief selGetElement() + * + * \param[in] sel + * \param[in] row + * \param[in] col + * \param[out] ptype SEL_HIT, SEL_MISS, SEL_DONT_CARE + * \return 0 if OK; 1 on error + */ +l_ok +selGetElement(SEL *sel, + l_int32 row, + l_int32 col, + l_int32 *ptype) +{ + PROCNAME("selGetElement"); + + if (!ptype) + return ERROR_INT("&type not defined", procName, 1); + *ptype = SEL_DONT_CARE; + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + if (row < 0 || row >= sel->sy) + return ERROR_INT("sel row out of bounds", procName, 1); + if (col < 0 || col >= sel->sx) + return ERROR_INT("sel col out of bounds", procName, 1); + + *ptype = sel->data[row][col]; + return 0; +} + + +/*! + * \brief selSetElement() + * + * \param[in] sel + * \param[in] row + * \param[in] col + * \param[in] type SEL_HIT, SEL_MISS, SEL_DONT_CARE + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Because we use row and column to index into an array,
+ *          they are always non-negative.  The location of the origin
+ *          (and the type of operation) determine the actual
+ *          direction of the rasterop.
+ * 
+ */ +l_ok +selSetElement(SEL *sel, + l_int32 row, + l_int32 col, + l_int32 type) +{ + PROCNAME("selSetElement"); + + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) + return ERROR_INT("invalid sel element type", procName, 1); + if (row < 0 || row >= sel->sy) + return ERROR_INT("sel row out of bounds", procName, 1); + if (col < 0 || col >= sel->sx) + return ERROR_INT("sel col out of bounds", procName, 1); + + sel->data[row][col] = type; + return 0; +} + + +/*! + * \brief selGetParameters() + * + * \param[in] sel + * \param[out] psy, psx, pcy, pcx [optional] each can be null + * \return 0 if OK, 1 on error + */ +l_ok +selGetParameters(SEL *sel, + l_int32 *psy, + l_int32 *psx, + l_int32 *pcy, + l_int32 *pcx) +{ + PROCNAME("selGetParameters"); + + if (psy) *psy = 0; + if (psx) *psx = 0; + if (pcy) *pcy = 0; + if (pcx) *pcx = 0; + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + if (psy) *psy = sel->sy; + if (psx) *psx = sel->sx; + if (pcy) *pcy = sel->cy; + if (pcx) *pcx = sel->cx; + return 0; +} + + +/*! + * \brief selSetOrigin() + * + * \param[in] sel + * \param[in] cy, cx + * \return 0 if OK; 1 on error + */ +l_ok +selSetOrigin(SEL *sel, + l_int32 cy, + l_int32 cx) +{ + PROCNAME("selSetOrigin"); + + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + sel->cy = cy; + sel->cx = cx; + return 0; +} + + +/*! + * \brief selGetTypeAtOrigin() + * + * \param[in] sel + * \param[out] ptype SEL_HIT, SEL_MISS, SEL_DONT_CARE + * \return 0 if OK; 1 on error or if origin is not found + */ +l_ok +selGetTypeAtOrigin(SEL *sel, + l_int32 *ptype) +{ +l_int32 sx, sy, cx, cy, i, j; + + PROCNAME("selGetTypeAtOrigin"); + + if (!ptype) + return ERROR_INT("&type not defined", procName, 1); + *ptype = SEL_DONT_CARE; /* init */ + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + + selGetParameters(sel, &sy, &sx, &cy, &cx); + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + if (i == cy && j == cx) { + selGetElement(sel, i, j, ptype); + return 0; + } + } + } + + return ERROR_INT("sel origin not found", procName, 1); +} + + +/*! + * \brief selaGetBrickName() + * + * \param[in] sela + * \param[in] hsize, vsize of brick sel + * \return sel name new string, or NULL if no name or on error + */ +char * +selaGetBrickName(SELA *sela, + l_int32 hsize, + l_int32 vsize) +{ +l_int32 i, nsels, sx, sy; +SEL *sel; + + PROCNAME("selaGetBrickName"); + + if (!sela) + return (char *)ERROR_PTR("sela not defined", procName, NULL); + + nsels = selaGetCount(sela); + for (i = 0; i < nsels; i++) { + sel = selaGetSel(sela, i); + selGetParameters(sel, &sy, &sx, NULL, NULL); + if (hsize == sx && vsize == sy) + return stringNew(selGetName(sel)); + } + + return (char *)ERROR_PTR("sel not found", procName, NULL); +} + + +/*! + * \brief selaGetCombName() + * + * \param[in] sela + * \param[in] size the product of sizes of the brick and comb parts + * \param[in] direction L_HORIZ, L_VERT + * \return sel name new string, or NULL if name not found or on error + * + *
+ * Notes:
+ *      (1) Combs are by definition 1-dimensional, either horiz or vert.
+ *      (2) Use this with comb Sels; e.g., from selaAddDwaCombs().
+ * 
+ */ +char * +selaGetCombName(SELA *sela, + l_int32 size, + l_int32 direction) +{ +char *selname; +char combname[256]; +l_int32 i, nsels, sx, sy, found; +SEL *sel; + + PROCNAME("selaGetCombName"); + + if (!sela) + return (char *)ERROR_PTR("sela not defined", procName, NULL); + if (direction != L_HORIZ && direction != L_VERT) + return (char *)ERROR_PTR("invalid direction", procName, NULL); + + /* Derive the comb name we're looking for */ + if (direction == L_HORIZ) + snprintf(combname, sizeof(combname), "sel_comb_%dh", size); + else /* direction == L_VERT */ + snprintf(combname, sizeof(combname), "sel_comb_%dv", size); + + found = FALSE; + nsels = selaGetCount(sela); + for (i = 0; i < nsels; i++) { + sel = selaGetSel(sela, i); + selGetParameters(sel, &sy, &sx, NULL, NULL); + if (sy != 1 && sx != 1) /* 2-D; not a comb */ + continue; + selname = selGetName(sel); + if (!strcmp(selname, combname)) { + found = TRUE; + break; + } + } + + if (found) + return stringNew(selname); + else + return (char *)ERROR_PTR("sel not found", procName, NULL); +} + + +/* --------- Function used to generate code in this file ---------- */ +#if 0 +static void selaComputeCompositeParameters(const char *fileout); + +/*! + * \brief selaComputeCompParameters() + * + * \param[in] fileout + * \return void + * + *
+ * Notes:
+ *      (1) This static function was used to construct the comp_parameter_map[]
+ *          array at the top of this file.  It is static because it does
+ *          not need to be called again.  It remains here to show how
+ *          the composite parameter map was computed.
+ *      (2) The output file was pasted directly into comp_parameter_map[].
+ *          The composite parameter map is used to quickly determine
+ *          the linear decomposition parameters and sel names.
+ * 
+ */ +static void +selaComputeCompositeParameters(const char *fileout) +{ +char *str, *nameh1, *nameh2, *namev1, *namev2; +char buf[256]; +l_int32 size, size1, size2, len; +SARRAY *sa; +SELA *selabasic, *selacomb; + + selabasic = selaAddBasic(NULL); + selacomb = selaAddDwaCombs(NULL); + sa = sarrayCreate(64); + for (size = 2; size < 64; size++) { + selectComposableSizes(size, &size1, &size2); + nameh1 = selaGetBrickName(selabasic, size1, 1); + namev1 = selaGetBrickName(selabasic, 1, size1); + if (size2 > 1) { + nameh2 = selaGetCombName(selacomb, size1 * size2, L_HORIZ); + namev2 = selaGetCombName(selacomb, size1 * size2, L_VERT); + } else { + nameh2 = stringNew(""); + namev2 = stringNew(""); + } + snprintf(buf, sizeof(buf), + " { %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\" },", + size, size1, size2, nameh1, nameh2, namev1, namev2); + sarrayAddString(sa, buf, L_COPY); + LEPT_FREE(nameh1); + LEPT_FREE(nameh2); + LEPT_FREE(namev1); + LEPT_FREE(namev2); + } + str = sarrayToString(sa, 1); + len = strlen(str); + l_binaryWrite(fileout, "w", str, len + 1); + LEPT_FREE(str); + sarrayDestroy(&sa); + selaDestroy(&selabasic); + selaDestroy(&selacomb); + return; +} +#endif +/* -------------------------------------------------------------------- */ + + +/*! + * \brief getCompositeParameters() + * + * \param[in] size + * \param[out] psize1 [optional] brick factor size + * \param[out] psize2 [optional] comb factor size + * \param[out] pnameh1 [optional] name of horiz brick + * \param[out] pnameh2 [optional] name of horiz comb + * \param[out] pnamev1 [optional] name of vert brick + * \param[out] pnamev2 [optional] name of vert comb + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This uses the big lookup table at the top of this file.
+ *      (2) All returned strings are copies that must be freed.
+ * 
+ */ +l_ok +getCompositeParameters(l_int32 size, + l_int32 *psize1, + l_int32 *psize2, + char **pnameh1, + char **pnameh2, + char **pnamev1, + char **pnamev2) +{ +l_int32 index; + + PROCNAME("selaGetSelnames"); + + if (psize1) *psize1 = 0; + if (psize2) *psize2 = 0; + if (pnameh1) *pnameh1 = NULL; + if (pnameh2) *pnameh2 = NULL; + if (pnamev1) *pnamev1 = NULL; + if (pnamev2) *pnamev2 = NULL; + if (size < 2 || size > 63) + return ERROR_INT("valid size range is {2 ... 63}", procName, 1); + index = size - 2; + if (psize1) + *psize1 = comp_parameter_map[index].size1; + if (psize2) + *psize2 = comp_parameter_map[index].size2; + if (pnameh1) + *pnameh1 = stringNew(comp_parameter_map[index].selnameh1); + if (pnameh2) + *pnameh2 = stringNew(comp_parameter_map[index].selnameh2); + if (pnamev1) + *pnamev1 = stringNew(comp_parameter_map[index].selnamev1); + if (pnamev2) + *pnamev2 = stringNew(comp_parameter_map[index].selnamev2); + return 0; +} + + +/*! + * \brief selaGetSelnames() + * + * \param[in] sela + * \return sa of all sel names, or NULL on error + */ +SARRAY * +selaGetSelnames(SELA *sela) +{ +char *selname; +l_int32 i, n; +SEL *sel; +SARRAY *sa; + + PROCNAME("selaGetSelnames"); + + if (!sela) + return (SARRAY *)ERROR_PTR("sela not defined", procName, NULL); + if ((n = selaGetCount(sela)) == 0) + return (SARRAY *)ERROR_PTR("no sels in sela", procName, NULL); + + if ((sa = sarrayCreate(n)) == NULL) + return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); + for (i = 0; i < n; i++) { + sel = selaGetSel(sela, i); + selname = selGetName(sel); + sarrayAddString(sa, selname, L_COPY); + } + + return sa; +} + + + +/*----------------------------------------------------------------------* + * Max translations for erosion and hmt * + *----------------------------------------------------------------------*/ +/*! + * \brief selFindMaxTranslations() + * + * \param[in] sel + * \param[out] pxp, pyp, pxn, pyn max shifts + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+          These are the maximum shifts for the erosion operation.
+ *        For example, when j < cx, the shift of the image
+ *        is +x to the cx.  This is a positive xp shift.
+ * 
+ */ +l_ok +selFindMaxTranslations(SEL *sel, + l_int32 *pxp, + l_int32 *pyp, + l_int32 *pxn, + l_int32 *pyn) +{ +l_int32 sx, sy, cx, cy, i, j; +l_int32 maxxp, maxyp, maxxn, maxyn; + + PROCNAME("selaFindMaxTranslations"); + + if (!pxp || !pyp || !pxn || !pyn) + return ERROR_INT("&xp (etc) defined", procName, 1); + *pxp = *pyp = *pxn = *pyn = 0; + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + selGetParameters(sel, &sy, &sx, &cy, &cx); + + maxxp = maxyp = maxxn = maxyn = 0; + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + if (sel->data[i][j] == 1) { + maxxp = L_MAX(maxxp, cx - j); + maxyp = L_MAX(maxyp, cy - i); + maxxn = L_MAX(maxxn, j - cx); + maxyn = L_MAX(maxyn, i - cy); + } + } + } + + *pxp = maxxp; + *pyp = maxyp; + *pxn = maxxn; + *pyn = maxyn; + + return 0; +} + + +/*----------------------------------------------------------------------* + * Rotation by multiples of 90 degrees * + *----------------------------------------------------------------------*/ +/*! + * \brief selRotateOrth() + * + * \param[in] sel + * \param[in] quads 0 - 4; number of 90 degree cw rotations + * \return seld, or NULL on error + */ +SEL * +selRotateOrth(SEL *sel, + l_int32 quads) +{ +l_int32 i, j, ni, nj, sx, sy, cx, cy, nsx, nsy, ncx, ncy, type; +SEL *seld; + + PROCNAME("selRotateOrth"); + + if (!sel) + return (SEL *)ERROR_PTR("sel not defined", procName, NULL); + if (quads < 0 || quads > 4) + return (SEL *)ERROR_PTR("quads not in {0,1,2,3,4}", procName, NULL); + if (quads == 0 || quads == 4) + return selCopy(sel); + + selGetParameters(sel, &sy, &sx, &cy, &cx); + if (quads == 1) { /* 90 degrees cw */ + nsx = sy; + nsy = sx; + ncx = sy - cy - 1; + ncy = cx; + } else if (quads == 2) { /* 180 degrees cw */ + nsx = sx; + nsy = sy; + ncx = sx - cx - 1; + ncy = sy - cy - 1; + } else { /* 270 degrees cw */ + nsx = sy; + nsy = sx; + ncx = cy; + ncy = sx - cx - 1; + } + seld = selCreateBrick(nsy, nsx, ncy, ncx, SEL_DONT_CARE); + if (sel->name) + seld->name = stringNew(sel->name); + + for (i = 0; i < sy; i++) { + for (j = 0; j < sx; j++) { + selGetElement(sel, i, j, &type); + if (quads == 1) { + ni = j; + nj = sy - i - 1; + } else if (quads == 2) { + ni = sy - i - 1; + nj = sx - j - 1; + } else { /* quads == 3 */ + ni = sx - j - 1; + nj = i; + } + selSetElement(seld, ni, nj, type); + } + } + + return seld; +} + + +/*----------------------------------------------------------------------* + * Sela and Sel serialized I/O * + *----------------------------------------------------------------------*/ +/*! + * \brief selaRead() + * + * \param[in] fname filename + * \return sela, or NULL on error + */ +SELA * +selaRead(const char *fname) +{ +FILE *fp; +SELA *sela; + + PROCNAME("selaRead"); + + if (!fname) + return (SELA *)ERROR_PTR("fname not defined", procName, NULL); + + if ((fp = fopenReadStream(fname)) == NULL) + return (SELA *)ERROR_PTR("stream not opened", procName, NULL); + if ((sela = selaReadStream(fp)) == NULL) { + fclose(fp); + return (SELA *)ERROR_PTR("sela not returned", procName, NULL); + } + fclose(fp); + + return sela; +} + + +/*! + * \brief selaReadStream() + * + * \param[in] fp file stream + * \return sela, or NULL on error + */ +SELA * +selaReadStream(FILE *fp) +{ +l_int32 i, n, version; +SEL *sel; +SELA *sela; + + PROCNAME("selaReadStream"); + + if (!fp) + return (SELA *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, "\nSela Version %d\n", &version) != 1) + return (SELA *)ERROR_PTR("not a sela file", procName, NULL); + if (version != SEL_VERSION_NUMBER) + return (SELA *)ERROR_PTR("invalid sel version", procName, NULL); + if (fscanf(fp, "Number of Sels = %d\n\n", &n) != 1) + return (SELA *)ERROR_PTR("not a sela file", procName, NULL); + + if ((sela = selaCreate(n)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + sela->nalloc = n; + + for (i = 0; i < n; i++) { + if ((sel = selReadStream(fp)) == NULL) { + selaDestroy(&sela); + return (SELA *)ERROR_PTR("sel not read", procName, NULL); + } + selaAddSel(sela, sel, NULL, 0); + } + + return sela; +} + + +/*! + * \brief selRead() + * + * \param[in] fname filename + * \return sel, or NULL on error + */ +SEL * +selRead(const char *fname) +{ +FILE *fp; +SEL *sel; + + PROCNAME("selRead"); + + if (!fname) + return (SEL *)ERROR_PTR("fname not defined", procName, NULL); + + if ((fp = fopenReadStream(fname)) == NULL) + return (SEL *)ERROR_PTR("stream not opened", procName, NULL); + if ((sel = selReadStream(fp)) == NULL) { + fclose(fp); + return (SEL *)ERROR_PTR("sela not returned", procName, NULL); + } + fclose(fp); + + return sel; +} + + +/*! + * \brief selReadStream() + * + * \param[in] fp file stream + * \return sel, or NULL on error + */ +SEL * +selReadStream(FILE *fp) +{ +char *selname; +char linebuf[256]; +l_int32 sy, sx, cy, cx, i, j, version, ignore; +SEL *sel; + + PROCNAME("selReadStream"); + + if (!fp) + return (SEL *)ERROR_PTR("stream not defined", procName, NULL); + + if (fscanf(fp, " Sel Version %d\n", &version) != 1) + return (SEL *)ERROR_PTR("not a sel file", procName, NULL); + if (version != SEL_VERSION_NUMBER) + return (SEL *)ERROR_PTR("invalid sel version", procName, NULL); + + if (fgets(linebuf, sizeof(linebuf), fp) == NULL) + return (SEL *)ERROR_PTR("error reading into linebuf", procName, NULL); + selname = stringNew(linebuf); + sscanf(linebuf, " ------ %200s ------", selname); + + if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", + &sy, &sx, &cy, &cx) != 4) { + LEPT_FREE(selname); + return (SEL *)ERROR_PTR("dimensions not read", procName, NULL); + } + + if ((sel = selCreate(sy, sx, selname)) == NULL) { + LEPT_FREE(selname); + return (SEL *)ERROR_PTR("sel not made", procName, NULL); + } + selSetOrigin(sel, cy, cx); + + for (i = 0; i < sy; i++) { + ignore = fscanf(fp, " "); + for (j = 0; j < sx; j++) + ignore = fscanf(fp, "%1d", &sel->data[i][j]); + ignore = fscanf(fp, "\n"); + } + ignore = fscanf(fp, "\n"); + + LEPT_FREE(selname); + return sel; +} + + +/*! + * \brief selaWrite() + * + * \param[in] fname filename + * \param[in] sela + * \return 0 if OK, 1 on error + */ +l_ok +selaWrite(const char *fname, + SELA *sela) +{ +FILE *fp; + + PROCNAME("selaWrite"); + + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + + if ((fp = fopenWriteStream(fname, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + selaWriteStream(fp, sela); + fclose(fp); + + return 0; +} + + +/*! + * \brief selaWriteStream() + * + * \param[in] fp file stream + * \param[in] sela + * \return 0 if OK, 1 on error + */ +l_ok +selaWriteStream(FILE *fp, + SELA *sela) +{ +l_int32 i, n; +SEL *sel; + + PROCNAME("selaWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!sela) + return ERROR_INT("sela not defined", procName, 1); + + n = selaGetCount(sela); + fprintf(fp, "\nSela Version %d\n", SEL_VERSION_NUMBER); + fprintf(fp, "Number of Sels = %d\n\n", n); + for (i = 0; i < n; i++) { + if ((sel = selaGetSel(sela, i)) == NULL) + continue; + selWriteStream(fp, sel); + } + return 0; +} + + +/*! + * \brief selWrite() + * + * \param[in] fname filename + * \param[in] sel + * \return 0 if OK, 1 on error + */ +l_ok +selWrite(const char *fname, + SEL *sel) +{ +FILE *fp; + + PROCNAME("selWrite"); + + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + + if ((fp = fopenWriteStream(fname, "wb")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + selWriteStream(fp, sel); + fclose(fp); + + return 0; +} + + +/*! + * \brief selWriteStream() + * + * \param[in] fp file stream + * \param[in] sel + * \return 0 if OK, 1 on error + */ +l_ok +selWriteStream(FILE *fp, + SEL *sel) +{ +l_int32 sx, sy, cx, cy, i, j; + + PROCNAME("selWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!sel) + return ERROR_INT("sel not defined", procName, 1); + selGetParameters(sel, &sy, &sx, &cy, &cx); + + fprintf(fp, " Sel Version %d\n", SEL_VERSION_NUMBER); + fprintf(fp, " ------ %s ------\n", selGetName(sel)); + fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); + for (i = 0; i < sy; i++) { + fprintf(fp, " "); + for (j = 0; j < sx; j++) + fprintf(fp, "%d", sel->data[i][j]); + fprintf(fp, "\n"); + } + fprintf(fp, "\n"); + + return 0; +} + + +/*----------------------------------------------------------------------* + * Building custom hit-miss sels from compiled strings * + *----------------------------------------------------------------------*/ +/*! + * \brief selCreateFromString() + * + * \param[in] text + * \param[in] h, w height, width + * \param[in] name [optional] sel name; can be null + * \return sel of the given size, or NULL on error + * + *
+ * Notes:
+ *      (1) The text is an array of chars (in row-major order) where
+ *          each char can be one of the following:
+ *             'x': hit
+ *             'o': miss
+ *             ' ': don't-care
+ *      (2) When the origin falls on a hit or miss, use an upper case
+ *          char (e.g., 'X' or 'O') to indicate it.  When the origin
+ *          falls on a don't-care, indicate this with a 'C'.
+ *          The string must have exactly one origin specified.
+ *      (3) The advantage of this method is that the text can be input
+ *          in a format that shows the 2D layout of the Sel; e.g.,
+ * \code
+ *              static const char *seltext = "x    "
+ *                                           "x Oo "
+ *                                           "x    "
+ *                                           "xxxxx";
+ * \endcode
+ * 
+ */ +SEL * +selCreateFromString(const char *text, + l_int32 h, + l_int32 w, + const char *name) +{ +SEL *sel; +l_int32 y, x, norig; +char ch; + + PROCNAME("selCreateFromString"); + + if (!text || text[0] == '\0') + return (SEL *)ERROR_PTR("text undefined or empty", procName, NULL); + if (h < 1) + return (SEL *)ERROR_PTR("height must be > 0", procName, NULL); + if (w < 1) + return (SEL *)ERROR_PTR("width must be > 0", procName, NULL); + if (strlen(text) != (size_t)w * h) + return (SEL *)ERROR_PTR("text size != w * h", procName, NULL); + + sel = selCreate(h, w, name); + norig = 0; + for (y = 0; y < h; ++y) { + for (x = 0; x < w; ++x) { + ch = *(text++); + switch (ch) + { + case 'X': + norig++; + selSetOrigin(sel, y, x); + case 'x': + selSetElement(sel, y, x, SEL_HIT); + break; + + case 'O': + norig++; + selSetOrigin(sel, y, x); + case 'o': + selSetElement(sel, y, x, SEL_MISS); + break; + + case 'C': + norig++; + selSetOrigin(sel, y, x); + case ' ': + selSetElement(sel, y, x, SEL_DONT_CARE); + break; + + case '\n': + /* ignored */ + continue; + + default: + selDestroy(&sel); + return (SEL *)ERROR_PTR("unknown char", procName, NULL); + } + } + } + if (norig != 1) { + L_ERROR("Exactly one origin must be specified; this string has %d\n", + procName, norig); + selDestroy(&sel); + } + + return sel; +} + + +/*! + * \brief selPrintToString() + * + * \param[in] sel + * \return str string; caller must free + * + *
+ * Notes:
+ *      (1) This is an inverse function of selCreateFromString.
+ *          It prints a textual representation of the SEL to a malloc'd
+ *          string.  The format is the same as selCreateFromString
+ *          except that newlines are inserted into the output
+ *          between rows.
+ *      (2) This is useful for debugging.  However, if you want to
+ *          save some Sels in a file, put them in a Sela and write
+ *          them out with selaWrite().  They can then be read in
+ *          with selaRead().
+ * 
+ */ +char * +selPrintToString(SEL *sel) +{ +char is_center; +char *str, *strptr; +l_int32 type; +l_int32 sx, sy, cx, cy, x, y; + + PROCNAME("selPrintToString"); + + if (!sel) + return (char *)ERROR_PTR("sel not defined", procName, NULL); + + selGetParameters(sel, &sy, &sx, &cy, &cx); + if ((str = (char *)LEPT_CALLOC(1, sy * (sx + 1) + 1)) == NULL) + return (char *)ERROR_PTR("calloc fail for str", procName, NULL); + strptr = str; + + for (y = 0; y < sy; ++y) { + for (x = 0; x < sx; ++x) { + selGetElement(sel, y, x, &type); + is_center = (x == cx && y == cy); + switch (type) { + case SEL_HIT: + *(strptr++) = is_center ? 'X' : 'x'; + break; + case SEL_MISS: + *(strptr++) = is_center ? 'O' : 'o'; + break; + case SEL_DONT_CARE: + *(strptr++) = is_center ? 'C' : ' '; + break; + } + } + *(strptr++) = '\n'; + } + + return str; +} + + +/*----------------------------------------------------------------------* + * Building custom hit-miss sels from a simple file format * + *----------------------------------------------------------------------*/ +/*! + * \brief selaCreateFromFile() + * + * \param[in] filename + * \return sela, or NULL on error + * + *
+ * Notes:
+ *      (1) The file contains a sequence of Sel descriptions.
+ *      (2) Each Sel is formatted as follows:
+ *           ~ Any number of comment lines starting with '#' are ignored
+ *           ~ The next line contains the selname
+ *           ~ The next lines contain the Sel data.  They must be
+ *             formatted similarly to the string format in
+ *             selCreateFromString(), with each line beginning and
+ *             ending with a double-quote, and showing the 2D layout.
+ *           ~ Each Sel ends when a blank line, a comment line, or
+ *             the end of file is reached.
+ *      (3) See selCreateFromString() for a description of the string
+ *          format for the Sel data.  As an example, here are the lines
+ *          of is a valid file for a single Sel.  In the file, all lines
+ *          are left-justified:
+ *                    # diagonal sel
+ *                    sel_5diag
+ *                    "x    "
+ *                    " x   "
+ *                    "  X  "
+ *                    "   x "
+ *                    "    x"
+ * 
+ */ +SELA * +selaCreateFromFile(const char *filename) +{ +char *filestr, *line; +l_int32 i, n, first, last, nsel, insel; +size_t nbytes; +NUMA *nafirst, *nalast; +SARRAY *sa; +SEL *sel; +SELA *sela; + + PROCNAME("selaCreateFromFile"); + + if (!filename) + return (SELA *)ERROR_PTR("filename not defined", procName, NULL); + + filestr = (char *)l_binaryRead(filename, &nbytes); + sa = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + n = sarrayGetCount(sa); + sela = selaCreate(0); + + /* Find the start and end lines for each Sel. + * We allow the "blank" lines to be null strings or + * to have standard whitespace (' ','\t',\'n') or be '#'. */ + nafirst = numaCreate(0); + nalast = numaCreate(0); + insel = FALSE; + for (i = 0; i < n; i++) { + line = sarrayGetString(sa, i, L_NOCOPY); + if (!insel && + (line[0] != '\0' && line[0] != ' ' && + line[0] != '\t' && line[0] != '\n' && line[0] != '#')) { + numaAddNumber(nafirst, i); + insel = TRUE; + continue; + } + if (insel && + (line[0] == '\0' || line[0] == ' ' || + line[0] == '\t' || line[0] == '\n' || line[0] == '#')) { + numaAddNumber(nalast, i - 1); + insel = FALSE; + continue; + } + } + if (insel) /* fell off the end of the file */ + numaAddNumber(nalast, n - 1); + + /* Extract sels */ + nsel = numaGetCount(nafirst); + for (i = 0; i < nsel; i++) { + numaGetIValue(nafirst, i, &first); + numaGetIValue(nalast, i, &last); + if ((sel = selCreateFromSArray(sa, first, last)) == NULL) { + fprintf(stderr, "Error reading sel from %d to %d\n", first, last); + selaDestroy(&sela); + sarrayDestroy(&sa); + numaDestroy(&nafirst); + numaDestroy(&nalast); + return (SELA *)ERROR_PTR("bad sela file", procName, NULL); + } + selaAddSel(sela, sel, NULL, 0); + } + + numaDestroy(&nafirst); + numaDestroy(&nalast); + sarrayDestroy(&sa); + return sela; +} + + +/*! + * \brief selCreateFromSArray() + * + * \param[in] sa + * \param[in] first line of sarray where Sel begins + * \param[in] last line of sarray where Sel ends + * \return sela, or NULL on error + * + *
+ * Notes:
+ *      (1) The Sel contains the following lines:
+ *          ~ The first line is the selname
+ *          ~ The remaining lines contain the Sel data.  They must
+ *            be formatted similarly to the string format in
+ *            selCreateFromString(), with each line beginning and
+ *            ending with a double-quote, and showing the 2D layout.
+ *          ~ 'last' gives the last line in the Sel data.
+ *      (2) See selCreateFromString() for a description of the string
+ *          format for the Sel data.  As an example, here are the lines
+ *          of is a valid file for a single Sel.  In the file, all lines
+ *          are left-justified:
+ *                    # diagonal sel
+ *                    sel_5diag
+ *                    "x    "
+ *                    " x   "
+ *                    "  X  "
+ *                    "   x "
+ *                    "    x"
+ * 
+ */ +static SEL * +selCreateFromSArray(SARRAY *sa, + l_int32 first, + l_int32 last) +{ +char ch; +char *name, *line; +l_int32 n, len, i, w, h, y, x; +SEL *sel; + + PROCNAME("selCreateFromSArray"); + + if (!sa) + return (SEL *)ERROR_PTR("sa not defined", procName, NULL); + n = sarrayGetCount(sa); + if (first < 0 || first >= n || last <= first || last >= n) + return (SEL *)ERROR_PTR("invalid range", procName, NULL); + + name = sarrayGetString(sa, first, L_NOCOPY); + h = last - first; + line = sarrayGetString(sa, first + 1, L_NOCOPY); + len = strlen(line); + if (line[0] != '"' || line[len - 1] != '"') + return (SEL *)ERROR_PTR("invalid format", procName, NULL); + w = len - 2; + if ((sel = selCreate(h, w, name)) == NULL) + return (SEL *)ERROR_PTR("sel not made", procName, NULL); + for (i = first + 1; i <= last; i++) { + line = sarrayGetString(sa, i, L_NOCOPY); + y = i - first - 1; + for (x = 0; x < w; ++x) { + ch = line[x + 1]; /* skip the leading double-quote */ + switch (ch) + { + case 'X': + selSetOrigin(sel, y, x); /* set origin and hit */ + case 'x': + selSetElement(sel, y, x, SEL_HIT); + break; + + case 'O': + selSetOrigin(sel, y, x); /* set origin and miss */ + case 'o': + selSetElement(sel, y, x, SEL_MISS); + break; + + case 'C': + selSetOrigin(sel, y, x); /* set origin and don't-care */ + case ' ': + selSetElement(sel, y, x, SEL_DONT_CARE); + break; + + default: + selDestroy(&sel); + return (SEL *)ERROR_PTR("unknown char", procName, NULL); + } + } + } + + return sel; +} + + +/*----------------------------------------------------------------------* + * Making hit-only SELs from Pta and Pix * + *----------------------------------------------------------------------*/ +/*! + * \brief selCreateFromPta() + * + * \param[in] pta + * \param[in] cy, cx origin of sel + * \param[in] name [optional] sel name; can be null + * \return sel of minimum required size, or NULL on error + * + *
+ * Notes:
+ *      (1) The origin and all points in the pta must be positive.
+ * 
+ */ +SEL * +selCreateFromPta(PTA *pta, + l_int32 cy, + l_int32 cx, + const char *name) +{ +l_int32 i, n, x, y, w, h; +BOX *box; +SEL *sel; + + PROCNAME("selCreateFromPta"); + + if (!pta) + return (SEL *)ERROR_PTR("pta not defined", procName, NULL); + if (cy < 0 || cx < 0) + return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", procName, NULL); + n = ptaGetCount(pta); + if (n == 0) + return (SEL *)ERROR_PTR("no pts in pta", procName, NULL); + + box = ptaGetBoundingRegion(pta); + boxGetGeometry(box, &x, &y, &w, &h); + boxDestroy(&box); + if (x < 0 || y < 0) + return (SEL *)ERROR_PTR("not all x and y >= 0", procName, NULL); + + sel = selCreate(y + h, x + w, name); + selSetOrigin(sel, cy, cx); + for (i = 0; i < n; i++) { + ptaGetIPt(pta, i, &x, &y); + selSetElement(sel, y, x, SEL_HIT); + } + + return sel; +} + + +/*! + * \brief selCreateFromPix() + * + * \param[in] pix + * \param[in] cy, cx origin of sel + * \param[in] name [optional] sel name; can be null + * \return sel, or NULL on error + * + *
+ * Notes:
+ *      (1) The origin must be positive.
+ * 
+ */ +SEL * +selCreateFromPix(PIX *pix, + l_int32 cy, + l_int32 cx, + const char *name) +{ +SEL *sel; +l_int32 i, j, w, h, d; +l_uint32 val; + + PROCNAME("selCreateFromPix"); + + if (!pix) + return (SEL *)ERROR_PTR("pix not defined", procName, NULL); + if (cy < 0 || cx < 0) + return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", procName, NULL); + pixGetDimensions(pix, &w, &h, &d); + if (d != 1) + return (SEL *)ERROR_PTR("pix not 1 bpp", procName, NULL); + + sel = selCreate(h, w, name); + selSetOrigin(sel, cy, cx); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pix, j, i, &val); + if (val) + selSetElement(sel, i, j, SEL_HIT); + } + } + + return sel; +} + + +/*----------------------------------------------------------------------* + * Making hit-miss sels from color Pix and image files * + *----------------------------------------------------------------------*/ +/*! + * + * selReadFromColorImage() + * + * \param[in] pathname + * \return sel if OK; NULL on error + * + *
+ * Notes:
+ *      (1) Loads an image from a file and creates a (hit-miss) sel.
+ *      (2) The sel name is taken from the pathname without the directory
+ *          and extension.
+ * 
+ */ +SEL * +selReadFromColorImage(const char *pathname) +{ +PIX *pix; +SEL *sel; +char *basename, *selname; + + PROCNAME("selReadFromColorImage"); + + splitPathAtExtension (pathname, &basename, NULL); + splitPathAtDirectory (basename, NULL, &selname); + LEPT_FREE(basename); + + if ((pix = pixRead(pathname)) == NULL) { + LEPT_FREE(selname); + return (SEL *)ERROR_PTR("pix not returned", procName, NULL); + } + if ((sel = selCreateFromColorPix(pix, selname)) == NULL) + L_ERROR("sel not made\n", procName); + + LEPT_FREE(selname); + pixDestroy(&pix); + return sel; +} + + +/*! + * + * selCreateFromColorPix() + * + * \param[in] pixs cmapped or rgb + * \param[in] selname [optional] sel name; can be null + * \return sel if OK, NULL on error + * + *
+ * Notes:
+ *      (1) The sel size is given by the size of pixs.
+ *      (2) In pixs, hits are represented by green pixels, misses by red
+ *          pixels, and don't-cares by white pixels.
+ *      (3) In pixs, there may be no misses, but there must be at least 1 hit.
+ *      (4) At most there can be only one origin pixel, which is optionally
+ *          specified by using a lower-intensity pixel:
+ *            if a hit:  dark green
+ *            if a miss: dark red
+ *            if a don't care: gray
+ *          If there is no such pixel, the origin defaults to the approximate
+ *          center of the sel.
+ * 
+ */ +SEL * +selCreateFromColorPix(PIX *pixs, + const char *selname) +{ +PIXCMAP *cmap; +SEL *sel; +l_int32 hascolor, hasorigin, nohits; +l_int32 w, h, d, i, j, red, green, blue; +l_uint32 pixval; + + PROCNAME("selCreateFromColorPix"); + + if (!pixs) + return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); + + hascolor = FALSE; + cmap = pixGetColormap(pixs); + if (cmap) + pixcmapHasColor(cmap, &hascolor); + pixGetDimensions(pixs, &w, &h, &d); + if (hascolor == FALSE && d != 32) + return (SEL *)ERROR_PTR("pixs has no color", procName, NULL); + + if ((sel = selCreate (h, w, NULL)) == NULL) + return (SEL *)ERROR_PTR ("sel not made", procName, NULL); + selSetOrigin (sel, h / 2, w / 2); + selSetName(sel, selname); + + hasorigin = FALSE; + nohits = TRUE; + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel (pixs, j, i, &pixval); + + if (cmap) { + pixcmapGetColor (cmap, pixval, &red, &green, &blue); + } else { + red = GET_DATA_BYTE (&pixval, COLOR_RED); + green = GET_DATA_BYTE (&pixval, COLOR_GREEN); + blue = GET_DATA_BYTE (&pixval, COLOR_BLUE); + } + + if (red < 255 && green < 255 && blue < 255) { + if (hasorigin) + L_WARNING("multiple origins in sel image\n", procName); + selSetOrigin (sel, i, j); + hasorigin = TRUE; + } + if (!red && green && !blue) { + nohits = FALSE; + selSetElement (sel, i, j, SEL_HIT); + } else if (red && !green && !blue) { + selSetElement (sel, i, j, SEL_MISS); + } else if (red && green && blue) { + selSetElement (sel, i, j, SEL_DONT_CARE); + } else { + selDestroy(&sel); + return (SEL *)ERROR_PTR("invalid color", procName, NULL); + } + } + } + + if (nohits) { + selDestroy(&sel); + return (SEL *)ERROR_PTR("no hits in sel", procName, NULL); + } + return sel; +} + + +/*----------------------------------------------------------------------* + * Printable display of sel * + *----------------------------------------------------------------------*/ +/*! + * \brief selDisplayInPix() + * + * \param[in] sel + * \param[in] size of grid interiors; odd; minimum size of 13 is enforced + * \param[in] gthick grid thickness; minimum size of 2 is enforced + * \return pix display of sel, or NULL on error + * + *
+ * Notes:
+ *      (1) This gives a visual representation of a general (hit-miss) sel.
+ *      (2) The empty sel is represented by a grid of intersecting lines.
+ *      (3) Three different patterns are generated for the sel elements:
+ *          ~ hit (solid black circle)
+ *          ~ miss (black ring; inner radius is radius2)
+ *          ~ origin (cross, XORed with whatever is there)
+ * 
+ */ +PIX * +selDisplayInPix(SEL *sel, + l_int32 size, + l_int32 gthick) +{ +l_int32 i, j, w, h, sx, sy, cx, cy, type, width; +l_int32 radius1, radius2, shift1, shift2, x0, y0; +PIX *pixd, *pix2, *pixh, *pixm, *pixorig; +PTA *pta1, *pta2, *pta1t, *pta2t; + + PROCNAME("selDisplayInPix"); + + if (!sel) + return (PIX *)ERROR_PTR("sel not defined", procName, NULL); + if (size < 13) { + L_WARNING("size < 13; setting to 13\n", procName); + size = 13; + } + if (size % 2 == 0) + size++; + if (gthick < 2) { + L_WARNING("grid thickness < 2; setting to 2\n", procName); + gthick = 2; + } + selGetParameters(sel, &sy, &sx, &cy, &cx); + w = size * sx + gthick * (sx + 1); + h = size * sy + gthick * (sy + 1); + pixd = pixCreate(w, h, 1); + + /* Generate grid lines */ + for (i = 0; i <= sy; i++) + pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), + w - 1, gthick / 2 + i * (size + gthick), + gthick, L_SET_PIXELS); + for (j = 0; j <= sx; j++) + pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, + gthick / 2 + j * (size + gthick), h - 1, + gthick, L_SET_PIXELS); + + /* Generate hit and miss patterns */ + radius1 = (l_int32)(0.85 * ((size - 1) / 2.0) + 0.5); /* of hit */ + radius2 = (l_int32)(0.65 * ((size - 1) / 2.0) + 0.5); /* of inner miss */ + pta1 = generatePtaFilledCircle(radius1); + pta2 = generatePtaFilledCircle(radius2); + shift1 = (size - 1) / 2 - radius1; /* center circle in square */ + shift2 = (size - 1) / 2 - radius2; + pta1t = ptaTransform(pta1, shift1, shift1, 1.0, 1.0); + pta2t = ptaTransform(pta2, shift2, shift2, 1.0, 1.0); + pixh = pixGenerateFromPta(pta1t, size, size); /* hits */ + pix2 = pixGenerateFromPta(pta2t, size, size); + pixm = pixSubtract(NULL, pixh, pix2); + + /* Generate crossed lines for origin pattern */ + pixorig = pixCreate(size, size, 1); + width = size / 8; + pixRenderLine(pixorig, size / 2, (l_int32)(0.12 * size), + size / 2, (l_int32)(0.88 * size), + width, L_SET_PIXELS); + pixRenderLine(pixorig, (l_int32)(0.15 * size), size / 2, + (l_int32)(0.85 * size), size / 2, + width, L_FLIP_PIXELS); + pixRasterop(pixorig, size / 2 - width, size / 2 - width, + 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); + + /* Specialize origin pattern for this sel */ + selGetTypeAtOrigin(sel, &type); + if (type == SEL_HIT) + pixXor(pixorig, pixorig, pixh); + else if (type == SEL_MISS) + pixXor(pixorig, pixorig, pixm); + + /* Paste the patterns in */ + y0 = gthick; + for (i = 0; i < sy; i++) { + x0 = gthick; + for (j = 0; j < sx; j++) { + selGetElement(sel, i, j, &type); + if (i == cy && j == cx) /* origin */ + pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixorig, 0, 0); + else if (type == SEL_HIT) + pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixh, 0, 0); + else if (type == SEL_MISS) + pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixm, 0, 0); + x0 += size + gthick; + } + y0 += size + gthick; + } + + pixDestroy(&pix2); + pixDestroy(&pixh); + pixDestroy(&pixm); + pixDestroy(&pixorig); + ptaDestroy(&pta1); + ptaDestroy(&pta1t); + ptaDestroy(&pta2); + ptaDestroy(&pta2t); + return pixd; +} + + +/*! + * \brief selaDisplayInPix() + * + * \param[in] sela + * \param[in] size of grid interiors; odd; minimum size of 13 is enforced + * \param[in] gthick grid thickness; minimum size of 2 is enforced + * \param[in] spacing between sels, both horizontally and vertically + * \param[in] ncols number of sels per "line" + * \return pix display of all sels in sela, or NULL on error + * + *
+ * Notes:
+ *      (1) This gives a visual representation of all the sels in a sela.
+ *      (2) See notes in selDisplayInPix() for display params of each sel.
+ *      (3) This gives the nicest results when all sels in the sela
+ *          are the same size.
+ * 
+ */ +PIX * +selaDisplayInPix(SELA *sela, + l_int32 size, + l_int32 gthick, + l_int32 spacing, + l_int32 ncols) +{ +l_int32 nsels, i, w, width; +PIX *pixt, *pixd; +PIXA *pixa; +SEL *sel; + + PROCNAME("selaDisplayInPix"); + + if (!sela) + return (PIX *)ERROR_PTR("sela not defined", procName, NULL); + if (size < 13) { + L_WARNING("size < 13; setting to 13\n", procName); + size = 13; + } + if (size % 2 == 0) + size++; + if (gthick < 2) { + L_WARNING("grid thickness < 2; setting to 2\n", procName); + gthick = 2; + } + if (spacing < 5) { + L_WARNING("spacing < 5; setting to 5\n", procName); + spacing = 5; + } + + /* Accumulate the pix of each sel */ + nsels = selaGetCount(sela); + pixa = pixaCreate(nsels); + for (i = 0; i < nsels; i++) { + sel = selaGetSel(sela, i); + pixt = selDisplayInPix(sel, size, gthick); + pixaAddPix(pixa, pixt, L_INSERT); + } + + /* Find the tiled output width, using just the first + * ncols pix in the pixa. If all pix have the same width, + * they will align properly in columns. */ + width = 0; + ncols = L_MIN(nsels, ncols); + for (i = 0; i < ncols; i++) { + pixt = pixaGetPix(pixa, i, L_CLONE); + pixGetDimensions(pixt, &w, NULL, NULL); + width += w; + pixDestroy(&pixt); + } + width += (ncols + 1) * spacing; /* add spacing all around as well */ + + pixd = pixaDisplayTiledInRows(pixa, 1, width, 1.0, 0, spacing, 0); + pixaDestroy(&pixa); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/sel2.c b/3rdparty/hgOCR/leptonica/sel2.c new file mode 100644 index 00000000..d1f6f6a4 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sel2.c @@ -0,0 +1,845 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file sel2.c + *
+ *
+ *      Contains definitions of simple structuring elements
+ *
+ *      Basic brick structuring elements
+ *          SELA    *selaAddBasic()
+ *               Linear horizontal and vertical
+ *               Square
+ *               Diagonals
+ *
+ *      Simple hit-miss structuring elements
+ *          SELA    *selaAddHitMiss()
+ *               Isolated foreground pixel
+ *               Horizontal and vertical edges
+ *               Slanted edge
+ *               Corners
+ *
+ *      Structuring elements for comparing with DWA operations
+ *          SELA    *selaAddDwaLinear()
+ *          SELA    *selaAddDwaCombs()
+ *
+ *      Structuring elements for the intersection of lines
+ *          SELA    *selaAddCrossJunctions()
+ *          SELA    *selaAddTJunctions()
+ *
+ *      Structuring elements for connectivity-preserving thinning operations
+ *          SELA    *sela4ccThin()
+ *          SELA    *sela8ccThin()
+ *          SELA    *sela4and8ccThin()
+ * 
+ */ + +#include +#include "allheaders.h" + +//static const l_int32 L_BUF_SIZE = 512; +#define L_BUF_SIZE 512 + + /* Linear brick sel sizes, including all those that are required + * for decomposable sels up to size 63. */ +static const l_int32 num_linear = 25; +static const l_int32 basic_linear[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 20, 21, 25, 30, 31, 35, 40, 41, 45, 50, 51}; + + +/* ------------------------------------------------------------------- * + * Basic brick structuring elements * + * ------------------------------------------------------------------- */ +/*! + * \brief selaAddBasic() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds the following sels:
+ *            ~ all linear (horiz, vert) brick sels that are
+ *              necessary for decomposable sels up to size 63
+ *            ~ square brick sels up to size 10
+ *            ~ 4 diagonal sels
+ * 
+ */ +SELA * +selaAddBasic(SELA *sela) +{ +char name[L_BUF_SIZE]; +l_int32 i, size; +SEL *sel; + + PROCNAME("selaAddBasic"); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + + /*--------------------------------------------------------------* + * Linear horizontal and vertical sels * + *--------------------------------------------------------------*/ + for (i = 0; i < num_linear; i++) { + size = basic_linear[i]; + sel = selCreateBrick(1, size, 0, size / 2, 1); + snprintf(name, L_BUF_SIZE, "sel_%dh", size); + selaAddSel(sela, sel, name, 0); + } + for (i = 0; i < num_linear; i++) { + size = basic_linear[i]; + sel = selCreateBrick(size, 1, size / 2, 0, 1); + snprintf(name, L_BUF_SIZE, "sel_%dv", size); + selaAddSel(sela, sel, name, 0); + } + + /*-----------------------------------------------------------* + * 2-d Bricks * + *-----------------------------------------------------------*/ + for (i = 2; i <= 5; i++) { + sel = selCreateBrick(i, i, i / 2, i / 2, 1); + snprintf(name, L_BUF_SIZE, "sel_%d", i); + selaAddSel(sela, sel, name, 0); + } + + /*-----------------------------------------------------------* + * Diagonals * + *-----------------------------------------------------------*/ + /* 0c 1 + 1 0 */ + sel = selCreateBrick(2, 2, 0, 0, 1); + selSetElement(sel, 0, 0, 0); + selSetElement(sel, 1, 1, 0); + selaAddSel(sela, sel, "sel_2dp", 0); + + /* 1c 0 + 0 1 */ + sel = selCreateBrick(2, 2, 0, 0, 1); + selSetElement(sel, 0, 1, 0); + selSetElement(sel, 1, 0, 0); + selaAddSel(sela, sel, "sel_2dm", 0); + + /* Diagonal, slope +, size 5 */ + sel = selCreate(5, 5, "sel_5dp"); + selSetOrigin(sel, 2, 2); + selSetElement(sel, 0, 4, 1); + selSetElement(sel, 1, 3, 1); + selSetElement(sel, 2, 2, 1); + selSetElement(sel, 3, 1, 1); + selSetElement(sel, 4, 0, 1); + selaAddSel(sela, sel, "sel_5dp", 0); + + /* Diagonal, slope -, size 5 */ + sel = selCreate(5, 5, "sel_5dm"); + selSetOrigin(sel, 2, 2); + selSetElement(sel, 0, 0, 1); + selSetElement(sel, 1, 1, 1); + selSetElement(sel, 2, 2, 1); + selSetElement(sel, 3, 3, 1); + selSetElement(sel, 4, 4, 1); + selaAddSel(sela, sel, "sel_5dm", 0); + + return sela; +} + + +/* ------------------------------------------------------------------- * + * Simple hit-miss structuring elements * + * ------------------------------------------------------------------- */ +/*! + * \brief selaAddHitMiss() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + */ +SELA * +selaAddHitMiss(SELA *sela) +{ +SEL *sel; + + PROCNAME("selaAddHitMiss"); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + +#if 0 /* use just for testing */ + sel = selCreateBrick(3, 3, 1, 1, 2); + selaAddSel(sela, sel, "sel_bad", 0); +#endif + + + /*--------------------------------------------------------------* + * Isolated foreground pixel * + *--------------------------------------------------------------*/ + sel = selCreateBrick(3, 3, 1, 1, SEL_MISS); + selSetElement(sel, 1, 1, SEL_HIT); + selaAddSel(sela, sel, "sel_3hm", 0); + + /*--------------------------------------------------------------* + * Horizontal and vertical edges * + *--------------------------------------------------------------*/ + sel = selCreateBrick(2, 3, 0, 1, SEL_HIT); + selSetElement(sel, 1, 0, SEL_MISS); + selSetElement(sel, 1, 1, SEL_MISS); + selSetElement(sel, 1, 2, SEL_MISS); + selaAddSel(sela, sel, "sel_3de", 0); + + sel = selCreateBrick(2, 3, 1, 1, SEL_HIT); + selSetElement(sel, 0, 0, SEL_MISS); + selSetElement(sel, 0, 1, SEL_MISS); + selSetElement(sel, 0, 2, SEL_MISS); + selaAddSel(sela, sel, "sel_3ue", 0); + + sel = selCreateBrick(3, 2, 1, 0, SEL_HIT); + selSetElement(sel, 0, 1, SEL_MISS); + selSetElement(sel, 1, 1, SEL_MISS); + selSetElement(sel, 2, 1, SEL_MISS); + selaAddSel(sela, sel, "sel_3re", 0); + + sel = selCreateBrick(3, 2, 1, 1, SEL_HIT); + selSetElement(sel, 0, 0, SEL_MISS); + selSetElement(sel, 1, 0, SEL_MISS); + selSetElement(sel, 2, 0, SEL_MISS); + selaAddSel(sela, sel, "sel_3le", 0); + + /*--------------------------------------------------------------* + * Slanted edge * + *--------------------------------------------------------------*/ + sel = selCreateBrick(13, 6, 6, 2, SEL_DONT_CARE); + selSetElement(sel, 0, 3, SEL_MISS); + selSetElement(sel, 0, 5, SEL_HIT); + selSetElement(sel, 4, 2, SEL_MISS); + selSetElement(sel, 4, 4, SEL_HIT); + selSetElement(sel, 8, 1, SEL_MISS); + selSetElement(sel, 8, 3, SEL_HIT); + selSetElement(sel, 12, 0, SEL_MISS); + selSetElement(sel, 12, 2, SEL_HIT); + selaAddSel(sela, sel, "sel_sl1", 0); + + /*--------------------------------------------------------------* + * Corners * + * This allows for up to 3 missing edge pixels at the corner * + *--------------------------------------------------------------*/ + sel = selCreateBrick(4, 4, 1, 1, SEL_MISS); + selSetElement(sel, 1, 1, SEL_DONT_CARE); + selSetElement(sel, 1, 2, SEL_DONT_CARE); + selSetElement(sel, 2, 1, SEL_DONT_CARE); + selSetElement(sel, 1, 3, SEL_HIT); + selSetElement(sel, 2, 2, SEL_HIT); + selSetElement(sel, 2, 3, SEL_HIT); + selSetElement(sel, 3, 1, SEL_HIT); + selSetElement(sel, 3, 2, SEL_HIT); + selSetElement(sel, 3, 3, SEL_HIT); + selaAddSel(sela, sel, "sel_ulc", 0); + + sel = selCreateBrick(4, 4, 1, 2, SEL_MISS); + selSetElement(sel, 1, 1, SEL_DONT_CARE); + selSetElement(sel, 1, 2, SEL_DONT_CARE); + selSetElement(sel, 2, 2, SEL_DONT_CARE); + selSetElement(sel, 1, 0, SEL_HIT); + selSetElement(sel, 2, 0, SEL_HIT); + selSetElement(sel, 2, 1, SEL_HIT); + selSetElement(sel, 3, 0, SEL_HIT); + selSetElement(sel, 3, 1, SEL_HIT); + selSetElement(sel, 3, 2, SEL_HIT); + selaAddSel(sela, sel, "sel_urc", 0); + + sel = selCreateBrick(4, 4, 2, 1, SEL_MISS); + selSetElement(sel, 1, 1, SEL_DONT_CARE); + selSetElement(sel, 2, 1, SEL_DONT_CARE); + selSetElement(sel, 2, 2, SEL_DONT_CARE); + selSetElement(sel, 0, 1, SEL_HIT); + selSetElement(sel, 0, 2, SEL_HIT); + selSetElement(sel, 0, 3, SEL_HIT); + selSetElement(sel, 1, 2, SEL_HIT); + selSetElement(sel, 1, 3, SEL_HIT); + selSetElement(sel, 2, 3, SEL_HIT); + selaAddSel(sela, sel, "sel_llc", 0); + + sel = selCreateBrick(4, 4, 2, 2, SEL_MISS); + selSetElement(sel, 1, 2, SEL_DONT_CARE); + selSetElement(sel, 2, 1, SEL_DONT_CARE); + selSetElement(sel, 2, 2, SEL_DONT_CARE); + selSetElement(sel, 0, 0, SEL_HIT); + selSetElement(sel, 0, 1, SEL_HIT); + selSetElement(sel, 0, 2, SEL_HIT); + selSetElement(sel, 1, 0, SEL_HIT); + selSetElement(sel, 1, 1, SEL_HIT); + selSetElement(sel, 2, 0, SEL_HIT); + selaAddSel(sela, sel, "sel_lrc", 0); + + return sela; +} + + +/* ------------------------------------------------------------------- * + * Structuring elements for comparing with DWA operations * + * ------------------------------------------------------------------- */ +/*! + * \brief selaAddDwaLinear() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds all linear (horizontal, vertical) sels from
+ *          2 to 63 pixels in length, which are the sizes over
+ *          which dwa code can be generated.
+ * 
+ */ +SELA * +selaAddDwaLinear(SELA *sela) +{ +char name[L_BUF_SIZE]; +l_int32 i; +SEL *sel; + + PROCNAME("selaAddDwaLinear"); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + + for (i = 2; i < 64; i++) { + sel = selCreateBrick(1, i, 0, i / 2, 1); + snprintf(name, L_BUF_SIZE, "sel_%dh", i); + selaAddSel(sela, sel, name, 0); + } + for (i = 2; i < 64; i++) { + sel = selCreateBrick(i, 1, i / 2, 0, 1); + snprintf(name, L_BUF_SIZE, "sel_%dv", i); + selaAddSel(sela, sel, name, 0); + } + return sela; +} + + +/*! + * \brief selaAddDwaCombs() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds all comb (horizontal, vertical) Sels that are
+ *          used in composite linear morphological operations
+ *          up to 63 pixels in length, which are the sizes over
+ *          which dwa code can be generated.
+ * 
+ */ +SELA * +selaAddDwaCombs(SELA *sela) +{ +char name[L_BUF_SIZE]; +l_int32 i, f1, f2, prevsize, size; +SEL *selh, *selv; + + PROCNAME("selaAddDwaCombs"); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + + prevsize = 0; + for (i = 4; i < 64; i++) { + selectComposableSizes(i, &f1, &f2); + size = f1 * f2; + if (size == prevsize) + continue; + selectComposableSels(i, L_HORIZ, NULL, &selh); + selectComposableSels(i, L_VERT, NULL, &selv); + snprintf(name, L_BUF_SIZE, "sel_comb_%dh", size); + selaAddSel(sela, selh, name, 0); + snprintf(name, L_BUF_SIZE, "sel_comb_%dv", size); + selaAddSel(sela, selv, name, 0); + prevsize = size; + } + + return sela; +} + + +/* ------------------------------------------------------------------- * + * Structuring elements for the intersection of lines * + * ------------------------------------------------------------------- */ +/*! + * \brief selaAddCrossJunctions() + * + * \param[in] sela [optional] + * \param[in] hlsize length of each line of hits from origin + * \param[in] mdist distance of misses from the origin + * \param[in] norient number of orientations; max of 8 + * \param[in] debugflag 1 for debug output + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds hitmiss Sels for the intersection of two lines.
+ *          If the lines are very thin, they must be nearly orthogonal
+ *          to register.
+ *      (2) The number of Sels generated is equal to %norient.
+ *      (3) If %norient == 2, this generates 2 Sels of crosses, each with
+ *          two perpendicular lines of hits.  One Sel has horizontal and
+ *          vertical hits; the other has hits along lines at +-45 degrees.
+ *          Likewise, if %norient == 3, this generates 3 Sels of crosses
+ *          oriented at 30 degrees with each other.
+ *      (4) It is suggested that %hlsize be chosen at least 1 greater
+ *          than %mdist.  Try values of (%hlsize, %mdist) such as
+ *          (6,5), (7,6), (8,7), (9,7), etc.
+ * 
+ */ +SELA * +selaAddCrossJunctions(SELA *sela, + l_float32 hlsize, + l_float32 mdist, + l_int32 norient, + l_int32 debugflag) +{ +char name[L_BUF_SIZE]; +l_int32 i, j, w, xc, yc; +l_float64 pi, halfpi, radincr, radang; +l_float64 angle; +PIX *pixc, *pixm, *pixt; +PIXA *pixa; +PTA *pta1, *pta2, *pta3, *pta4; +SEL *sel; + + PROCNAME("selaAddCrossJunctions"); + + if (hlsize <= 0) + return (SELA *)ERROR_PTR("hlsize not > 0", procName, NULL); + if (norient < 1 || norient > 8) + return (SELA *)ERROR_PTR("norient not in [1, ... 8]", procName, NULL); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + + pi = 3.1415926535; + halfpi = 3.1415926535 / 2.0; + radincr = halfpi / (l_float64)norient; + w = (l_int32)(2.2 * (L_MAX(hlsize, mdist) + 0.5)); + if (w % 2 == 0) + w++; + xc = w / 2; + yc = w / 2; + + pixa = pixaCreate(norient); + for (i = 0; i < norient; i++) { + + /* Set the don't cares */ + pixc = pixCreate(w, w, 32); + pixSetAll(pixc); + + /* Add the green lines of hits */ + pixm = pixCreate(w, w, 1); + radang = (l_float32)i * radincr; + pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang); + pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + halfpi); + pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi); + pta4 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi + halfpi); + ptaJoin(pta1, pta2, 0, -1); + ptaJoin(pta1, pta3, 0, -1); + ptaJoin(pta1, pta4, 0, -1); + pixRenderPta(pixm, pta1, L_SET_PIXELS); + pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); + ptaDestroy(&pta1); + ptaDestroy(&pta2); + ptaDestroy(&pta3); + ptaDestroy(&pta4); + + /* Add red misses between the lines */ + for (j = 0; j < 4; j++) { + angle = radang + (j - 0.5) * halfpi; + pixSetPixel(pixc, xc + (l_int32)(mdist * cos(angle)), + yc + (l_int32)(mdist * sin(angle)), 0xff000000); + } + + /* Add dark green for origin */ + pixSetPixel(pixc, xc, yc, 0x00550000); + + /* Generate the sel */ + sel = selCreateFromColorPix(pixc, NULL); + snprintf(name, sizeof(name), "sel_cross_%d", i); + selaAddSel(sela, sel, name, 0); + + if (debugflag) { + pixt = pixScaleBySampling(pixc, 10.0, 10.0); + pixaAddPix(pixa, pixt, L_INSERT); + } + pixDestroy(&pixm); + pixDestroy(&pixc); + } + + if (debugflag) { + l_int32 w; + lept_mkdir("lept/sel"); + pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); + pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 1, 0, 10, 2); + pixWriteDebug("/tmp/lept/sel/xsel1.png", pixt, IFF_PNG); + pixDisplay(pixt, 0, 100); + pixDestroy(&pixt); + pixt = selaDisplayInPix(sela, 15, 2, 20, 1); + pixWriteDebug("/tmp/lept/sel/xsel2.png", pixt, IFF_PNG); + pixDisplay(pixt, 500, 100); + pixDestroy(&pixt); + selaWriteStream(stderr, sela); + } + pixaDestroy(&pixa); + + return sela; +} + + +/*! + * \brief selaAddTJunctions() + * + * \param[in] sela [optional] + * \param[in] hlsize length of each line of hits from origin + * \param[in] mdist distance of misses from the origin + * \param[in] norient number of orientations; max of 8 + * \param[in] debugflag 1 for debug output + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds hitmiss Sels for the T-junction of two lines.
+ *          If the lines are very thin, they must be nearly orthogonal
+ *          to register.
+ *      (2) The number of Sels generated is 4 * %norient.
+ *      (3) It is suggested that %hlsize be chosen at least 1 greater
+ *          than %mdist.  Try values of (%hlsize, %mdist) such as
+ *          (6,5), (7,6), (8,7), (9,7), etc.
+ * 
+ */ +SELA * +selaAddTJunctions(SELA *sela, + l_float32 hlsize, + l_float32 mdist, + l_int32 norient, + l_int32 debugflag) +{ +char name[L_BUF_SIZE]; +l_int32 i, j, k, w, xc, yc; +l_float64 pi, halfpi, radincr, jang, radang; +l_float64 angle[3], dist[3]; +PIX *pixc, *pixm, *pixt; +PIXA *pixa; +PTA *pta1, *pta2, *pta3; +SEL *sel; + + PROCNAME("selaAddTJunctions"); + + if (hlsize <= 2) + return (SELA *)ERROR_PTR("hlsizel not > 1", procName, NULL); + if (norient < 1 || norient > 8) + return (SELA *)ERROR_PTR("norient not in [1, ... 8]", procName, NULL); + + if (!sela) { + if ((sela = selaCreate(0)) == NULL) + return (SELA *)ERROR_PTR("sela not made", procName, NULL); + } + + pi = 3.1415926535; + halfpi = 3.1415926535 / 2.0; + radincr = halfpi / (l_float32)norient; + w = (l_int32)(2.4 * (L_MAX(hlsize, mdist) + 0.5)); + if (w % 2 == 0) + w++; + xc = w / 2; + yc = w / 2; + + pixa = pixaCreate(4 * norient); + for (i = 0; i < norient; i++) { + for (j = 0; j < 4; j++) { /* 4 orthogonal orientations */ + jang = (l_float32)j * halfpi; + + /* Set the don't cares */ + pixc = pixCreate(w, w, 32); + pixSetAll(pixc); + + /* Add the green lines of hits */ + pixm = pixCreate(w, w, 1); + radang = (l_float32)i * radincr; + pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang); + pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, + jang + radang + halfpi); + pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, + jang + radang + pi); + ptaJoin(pta1, pta2, 0, -1); + ptaJoin(pta1, pta3, 0, -1); + pixRenderPta(pixm, pta1, L_SET_PIXELS); + pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); + ptaDestroy(&pta1); + ptaDestroy(&pta2); + ptaDestroy(&pta3); + + /* Add red misses between the lines */ + angle[0] = radang + jang - halfpi; + angle[1] = radang + jang + 0.5 * halfpi; + angle[2] = radang + jang + 1.5 * halfpi; + dist[0] = 0.8 * mdist; + dist[1] = dist[2] = mdist; + for (k = 0; k < 3; k++) { + pixSetPixel(pixc, xc + (l_int32)(dist[k] * cos(angle[k])), + yc + (l_int32)(dist[k] * sin(angle[k])), + 0xff000000); + } + + /* Add dark green for origin */ + pixSetPixel(pixc, xc, yc, 0x00550000); + + /* Generate the sel */ + sel = selCreateFromColorPix(pixc, NULL); + snprintf(name, sizeof(name), "sel_cross_%d", 4 * i + j); + selaAddSel(sela, sel, name, 0); + + if (debugflag) { + pixt = pixScaleBySampling(pixc, 10.0, 10.0); + pixaAddPix(pixa, pixt, L_INSERT); + } + pixDestroy(&pixm); + pixDestroy(&pixc); + } + } + + if (debugflag) { + l_int32 w; + lept_mkdir("lept/sel"); + pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); + pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 4, 0, 10, 2); + pixWriteDebug("/tmp/lept/sel/tsel1.png", pixt, IFF_PNG); + pixDisplay(pixt, 0, 100); + pixDestroy(&pixt); + pixt = selaDisplayInPix(sela, 15, 2, 20, 4); + pixWriteDebug("/tmp/lept/sel/tsel2.png", pixt, IFF_PNG); + pixDisplay(pixt, 500, 100); + pixDestroy(&pixt); + selaWriteStream(stderr, sela); + } + pixaDestroy(&pixa); + + return sela; +} + + +/* -------------------------------------------------------------------------- * + * Structuring elements for connectivity-preserving thinning operations * + * -------------------------------------------------------------------------- */ + + /* ------------------------------------------------------------ + * These sels (and their rotated counterparts) are the useful + * 3x3 Sels for thinning. The notation is based on + * "Connectivity-preserving morphological image transformations," + * a version of which can be found at + * http://www.leptonica.com/papers/conn.pdf + * ------------------------------------------------------------ */ + + /* Sels for 4-connected thinning */ +static const char *sel_4_1 = " x" + "oCx" + " x"; +static const char *sel_4_2 = " x" + "oCx" + " o "; +static const char *sel_4_3 = " o " + "oCx" + " x"; +static const char *sel_4_4 = " o " + "oCx" + " o "; +static const char *sel_4_5 = " ox" + "oCx" + " o "; +static const char *sel_4_6 = " o " + "oCx" + " ox"; +static const char *sel_4_7 = " xx" + "oCx" + " o "; +static const char *sel_4_8 = " x" + "oCx" + "o x"; +static const char *sel_4_9 = "o x" + "oCx" + " x"; + + /* Sels for 8-connected thinning */ +static const char *sel_8_1 = " x " + "oCx" + " x "; +static const char *sel_8_2 = " x " + "oCx" + "o "; +static const char *sel_8_3 = "o " + "oCx" + " x "; +static const char *sel_8_4 = "o " + "oCx" + "o "; +static const char *sel_8_5 = "o x" + "oCx" + "o "; +static const char *sel_8_6 = "o " + "oCx" + "o x"; +static const char *sel_8_7 = " x " + "oCx" + "oo "; +static const char *sel_8_8 = " x " + "oCx" + "ox "; +static const char *sel_8_9 = "ox " + "oCx" + " x "; + + /* Sels for both 4 and 8-connected thinning */ +static const char *sel_48_1 = " xx" + "oCx" + "oo "; +static const char *sel_48_2 = "o x" + "oCx" + "o x"; + + +/*! + * \brief sela4ccThin() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds the 9 basic sels for 4-cc thinning.
+ * 
+ */ +SELA * +sela4ccThin(SELA *sela) +{ +SEL *sel; + + if (!sela) sela = selaCreate(9); + + sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_4, 3, 3, "sel_4_4"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_5, 3, 3, "sel_4_5"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_6, 3, 3, "sel_4_6"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_7, 3, 3, "sel_4_7"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_8, 3, 3, "sel_4_8"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_4_9, 3, 3, "sel_4_9"); + selaAddSel(sela, sel, NULL, 0); + + return sela; +} + + +/*! + * \brief sela8ccThin() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds the 9 basic sels for 8-cc thinning.
+ * 
+ */ +SELA * +sela8ccThin(SELA *sela) +{ +SEL *sel; + + if (!sela) sela = selaCreate(9); + + sel = selCreateFromString(sel_8_1, 3, 3, "sel_8_1"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_4, 3, 3, "sel_8_4"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_7, 3, 3, "sel_8_7"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_8, 3, 3, "sel_8_8"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_8_9, 3, 3, "sel_8_9"); + selaAddSel(sela, sel, NULL, 0); + + return sela; +} + + +/*! + * \brief sela4and8ccThin() + * + * \param[in] sela [optional] + * \return sela with additional sels, or NULL on error + * + *
+ * Notes:
+ *      (1) Adds the 2 basic sels for either 4-cc or 8-cc thinning.
+ * 
+ */ +SELA * +sela4and8ccThin(SELA *sela) +{ +SEL *sel; + + if (!sela) sela = selaCreate(2); + + sel = selCreateFromString(sel_48_1, 3, 3, "sel_48_1"); + selaAddSel(sela, sel, NULL, 0); + sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2"); + selaAddSel(sela, sel, NULL, 0); + + return sela; +} + diff --git a/3rdparty/hgOCR/leptonica/selgen.c b/3rdparty/hgOCR/leptonica/selgen.c new file mode 100644 index 00000000..321d1ca5 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/selgen.c @@ -0,0 +1,984 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file selgen.c + *
+ *
+ *      This file contains functions that generate hit-miss Sels
+ *      for doing a loose match to a small bitmap.  The hit-miss
+ *      Sel is made from a given bitmap.  Several "knobs"
+ *      are available to control the looseness of the match.
+ *      In general, a tight match will have fewer false positives
+ *      (bad matches) but more false negatives (missed patterns).
+ *      The values to be used depend on the quality and variation
+ *      of the image in which the pattern is to be searched,
+ *      and the relative penalties of false positives and
+ *      false negatives.  Default values for the three knobs --
+ *      minimum distance to boundary pixels, number of extra pixels
+ *      added to selected sides, and minimum acceptable runlength
+ *      in eroded version -- are provided.
+ *
+ *      The generated hit-miss Sels can always be used in the
+ *      rasterop implementation of binary morphology (in morph.h).
+ *      If they are small enough (not more than 31 pixels extending
+ *      in any direction from the Sel origin), they can also be used
+ *      to auto-generate dwa code (fmorphauto.c).
+ *
+ *
+ *      Generate a subsampled structuring element
+ *            SEL     *pixGenerateSelWithRuns()
+ *            SEL     *pixGenerateSelRandom()
+ *            SEL     *pixGenerateSelBoundary()
+ *
+ *      Accumulate data on runs along lines
+ *            NUMA    *pixGetRunCentersOnLine()
+ *            NUMA    *pixGetRunsOnLine()
+ *
+ *      Subsample boundary pixels in relatively ordered way
+ *            PTA     *pixSubsampleBoundaryPixels()
+ *            PTA     *adjacentOnPixelInRaster()
+ *
+ *      Display generated sel with originating image
+ *            PIX     *pixDisplayHitMissSel()
+ * 
+ */ + +#include "allheaders.h" + + + /* Default minimum distance of a hit-miss pixel element to + * a boundary pixel of its color. */ +static const l_int32 DefaultDistanceToBoundary = 1; +static const l_int32 MaxDistanceToBoundary = 4; + + /* Default min runlength to accept a hit or miss element located + * at its center */ +static const l_int32 DefaultMinRunlength = 3; + + /* Default scalefactor for displaying image and hit-miss sel + * that is derived from it */ +static const l_int32 DefaultSelScalefactor = 7; +static const l_int32 MaxSelScalefactor = 31; /* should be big enough */ + +#ifndef NO_CONSOLE_IO +#define DEBUG_DISPLAY_HM_SEL 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-----------------------------------------------------------------* + * Generate a subsampled structuring element * + *-----------------------------------------------------------------*/ +/*! + * \brief pixGenerateSelWithRuns() + * + * \param[in] pixs 1 bpp, typically small, to be used as a pattern + * \param[in] nhlines number of hor lines along which elements are found + * \param[in] nvlines number of vert lines along which elements are found + * \param[in] distance min distance from boundary pixel; use 0 for default + * \param[in] minlength min runlength to set hit or miss; use 0 for default + * \param[in] toppix number of extra pixels of bg added above + * \param[in] botpix number of extra pixels of bg added below + * \param[in] leftpix number of extra pixels of bg added to left + * \param[in] rightpix number of extra pixels of bg added to right + * \param[out] ppixe [optional] input pix expanded by extra pixels + * \return sel hit-miss for input pattern, or NULL on error + * + *
+ * Notes:
+ *    (1) The horizontal and vertical lines along which elements are
+ *        selected are roughly equally spaced.  The actual locations of
+ *        the hits and misses are the centers of respective run-lengths.
+ *    (2) No elements are selected that are less than 'distance' pixels away
+ *        from a boundary pixel of the same color.  This makes the
+ *        match much more robust to edge noise.  Valid inputs of
+ *        'distance' are 0, 1, 2, 3 and 4.  If distance is either 0 or
+ *        greater than 4, we reset it to the default value.
+ *    (3) The 4 numbers for adding rectangles of pixels outside the fg
+ *        can be use if the pattern is expected to be surrounded by bg
+ *        (white) pixels.  On the other hand, if the pattern may be near
+ *        other fg (black) components on some sides, use 0 for those sides.
+ *    (4) The pixels added to a side allow you to have miss elements there.
+ *        There is a constraint between distance, minlength, and
+ *        the added pixels for this to work.  We illustrate using the
+ *        default values.  If you add 5 pixels to the top, and use a
+ *        distance of 1, then you end up with a vertical run of at least
+ *        4 bg pixels along the top edge of the image.  If you use a
+ *        minimum runlength of 3, each vertical line will always find
+ *        a miss near the center of its run.  However, if you use a
+ *        minimum runlength of 5, you will not get a miss on every vertical
+ *        line.  As another example, if you have 7 added pixels and a
+ *        distance of 2, you can use a runlength up to 5 to guarantee
+ *        that the miss element is recorded.  We give a warning if the
+ *        constraint does not guarantee a miss element outside the
+ *        image proper.
+ *    (5) The input pix, as extended by the extra pixels on selected sides,
+ *        can optionally be returned.  For debugging, call
+ *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
+ *        on the generating bitmap.
+ * 
+ */ +SEL * +pixGenerateSelWithRuns(PIX *pixs, + l_int32 nhlines, + l_int32 nvlines, + l_int32 distance, + l_int32 minlength, + l_int32 toppix, + l_int32 botpix, + l_int32 leftpix, + l_int32 rightpix, + PIX **ppixe) +{ +l_int32 ws, hs, w, h, x, y, xval, yval, i, j, nh, nm; +l_float32 delh, delw; +NUMA *nah, *nam; +PIX *pixt1, *pixt2, *pixfg, *pixbg; +PTA *ptah, *ptam; +SEL *seld, *sel; + + PROCNAME("pixGenerateSelWithRuns"); + + if (ppixe) *ppixe = NULL; + if (!pixs) + return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (nhlines < 1 && nvlines < 1) + return (SEL *)ERROR_PTR("nvlines and nhlines both < 1", procName, NULL); + + if (distance <= 0) + distance = DefaultDistanceToBoundary; + if (minlength <= 0) + minlength = DefaultMinRunlength; + if (distance > MaxDistanceToBoundary) { + L_WARNING("distance too large; setting to max value\n", procName); + distance = MaxDistanceToBoundary; + } + + /* Locate the foreground */ + pixClipToForeground(pixs, &pixt1, NULL); + if (!pixt1) + return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); + ws = pixGetWidth(pixt1); + hs = pixGetHeight(pixt1); + w = ws; + h = hs; + + /* Crop out a region including the foreground, and add pixels + * on sides depending on the side flags */ + if (toppix || botpix || leftpix || rightpix) { + x = y = 0; + if (toppix) { + h += toppix; + y = toppix; + if (toppix < distance + minlength) + L_WARNING("no miss elements in added top pixels\n", procName); + } + if (botpix) { + h += botpix; + if (botpix < distance + minlength) + L_WARNING("no miss elements in added bot pixels\n", procName); + } + if (leftpix) { + w += leftpix; + x = leftpix; + if (leftpix < distance + minlength) + L_WARNING("no miss elements in added left pixels\n", procName); + } + if (rightpix) { + w += rightpix; + if (rightpix < distance + minlength) + L_WARNING("no miss elements in added right pixels\n", procName); + } + pixt2 = pixCreate(w, h, 1); + pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); + } else { + pixt2 = pixClone(pixt1); + } + if (ppixe) + *ppixe = pixClone(pixt2); + pixDestroy(&pixt1); + + /* Identify fg and bg pixels that are at least 'distance' pixels + * away from the boundary pixels in their set */ + seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, + distance, distance, SEL_HIT); + pixfg = pixErode(NULL, pixt2, seld); + pixbg = pixDilate(NULL, pixt2, seld); + pixInvert(pixbg, pixbg); + selDestroy(&seld); + pixDestroy(&pixt2); + + /* Accumulate hit and miss points */ + ptah = ptaCreate(0); + ptam = ptaCreate(0); + if (nhlines >= 1) { + delh = (l_float32)h / (l_float32)(nhlines + 1); + for (i = 0, y = 0; i < nhlines; i++) { + y += (l_int32)(delh + 0.5); + nah = pixGetRunCentersOnLine(pixfg, -1, y, minlength); + nam = pixGetRunCentersOnLine(pixbg, -1, y, minlength); + nh = numaGetCount(nah); + nm = numaGetCount(nam); + for (j = 0; j < nh; j++) { + numaGetIValue(nah, j, &xval); + ptaAddPt(ptah, xval, y); + } + for (j = 0; j < nm; j++) { + numaGetIValue(nam, j, &xval); + ptaAddPt(ptam, xval, y); + } + numaDestroy(&nah); + numaDestroy(&nam); + } + } + if (nvlines >= 1) { + delw = (l_float32)w / (l_float32)(nvlines + 1); + for (i = 0, x = 0; i < nvlines; i++) { + x += (l_int32)(delw + 0.5); + nah = pixGetRunCentersOnLine(pixfg, x, -1, minlength); + nam = pixGetRunCentersOnLine(pixbg, x, -1, minlength); + nh = numaGetCount(nah); + nm = numaGetCount(nam); + for (j = 0; j < nh; j++) { + numaGetIValue(nah, j, &yval); + ptaAddPt(ptah, x, yval); + } + for (j = 0; j < nm; j++) { + numaGetIValue(nam, j, &yval); + ptaAddPt(ptam, x, yval); + } + numaDestroy(&nah); + numaDestroy(&nam); + } + } + + /* Make the Sel with those points */ + sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); + nh = ptaGetCount(ptah); + for (i = 0; i < nh; i++) { + ptaGetIPt(ptah, i, &x, &y); + selSetElement(sel, y, x, SEL_HIT); + } + nm = ptaGetCount(ptam); + for (i = 0; i < nm; i++) { + ptaGetIPt(ptam, i, &x, &y); + selSetElement(sel, y, x, SEL_MISS); + } + + pixDestroy(&pixfg); + pixDestroy(&pixbg); + ptaDestroy(&ptah); + ptaDestroy(&ptam); + return sel; +} + + +/*! + * \brief pixGenerateSelRandom() + * + * \param[in] pixs 1 bpp, typically small, to be used as a pattern + * \param[in] hitfract fraction of allowable fg pixels that are hits + * \param[in] missfract fraction of allowable bg pixels that are misses + * \param[in] distance min distance from boundary pixel; use 0 for default + * \param[in] toppix number of extra pixels of bg added above + * \param[in] botpix number of extra pixels of bg added below + * \param[in] leftpix number of extra pixels of bg added to left + * \param[in] rightpix number of extra pixels of bg added to right + * \param[out] ppixe [optional] input pix expanded by extra pixels + * \return sel hit-miss for input pattern, or NULL on error + * + *
+ * Notes:
+ *    (1) Either of hitfract and missfract can be zero.  If both are zero,
+ *        the sel would be empty, and NULL is returned.
+ *    (2) No elements are selected that are less than 'distance' pixels away
+ *        from a boundary pixel of the same color.  This makes the
+ *        match much more robust to edge noise.  Valid inputs of
+ *        'distance' are 0, 1, 2, 3 and 4.  If distance is either 0 or
+ *        greater than 4, we reset it to the default value.
+ *    (3) The 4 numbers for adding rectangles of pixels outside the fg
+ *        can be use if the pattern is expected to be surrounded by bg
+ *        (white) pixels.  On the other hand, if the pattern may be near
+ *        other fg (black) components on some sides, use 0 for those sides.
+ *    (4) The input pix, as extended by the extra pixels on selected sides,
+ *        can optionally be returned.  For debugging, call
+ *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
+ *        on the generating bitmap.
+ * 
+ */ +SEL * +pixGenerateSelRandom(PIX *pixs, + l_float32 hitfract, + l_float32 missfract, + l_int32 distance, + l_int32 toppix, + l_int32 botpix, + l_int32 leftpix, + l_int32 rightpix, + PIX **ppixe) +{ +l_int32 ws, hs, w, h, x, y, i, j, thresh; +l_uint32 val; +PIX *pixt1, *pixt2, *pixfg, *pixbg; +SEL *seld, *sel; + + PROCNAME("pixGenerateSelRandom"); + + if (ppixe) *ppixe = NULL; + if (!pixs) + return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (hitfract <= 0.0 && missfract <= 0.0) + return (SEL *)ERROR_PTR("no hits or misses", procName, NULL); + if (hitfract > 1.0 || missfract > 1.0) + return (SEL *)ERROR_PTR("fraction can't be > 1.0", procName, NULL); + + if (distance <= 0) + distance = DefaultDistanceToBoundary; + if (distance > MaxDistanceToBoundary) { + L_WARNING("distance too large; setting to max value\n", procName); + distance = MaxDistanceToBoundary; + } + + /* Locate the foreground */ + pixClipToForeground(pixs, &pixt1, NULL); + if (!pixt1) + return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); + ws = pixGetWidth(pixt1); + hs = pixGetHeight(pixt1); + w = ws; + h = hs; + + /* Crop out a region including the foreground, and add pixels + * on sides depending on the side flags */ + if (toppix || botpix || leftpix || rightpix) { + x = y = 0; + if (toppix) { + h += toppix; + y = toppix; + } + if (botpix) + h += botpix; + if (leftpix) { + w += leftpix; + x = leftpix; + } + if (rightpix) + w += rightpix; + pixt2 = pixCreate(w, h, 1); + pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); + } else { + pixt2 = pixClone(pixt1); + } + if (ppixe) + *ppixe = pixClone(pixt2); + pixDestroy(&pixt1); + + /* Identify fg and bg pixels that are at least 'distance' pixels + * away from the boundary pixels in their set */ + seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, + distance, distance, SEL_HIT); + pixfg = pixErode(NULL, pixt2, seld); + pixbg = pixDilate(NULL, pixt2, seld); + pixInvert(pixbg, pixbg); + selDestroy(&seld); + pixDestroy(&pixt2); + + /* Generate the sel from a random selection of these points */ + sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); + if (hitfract > 0.0) { + thresh = (l_int32)(hitfract * (l_float64)RAND_MAX); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pixfg, j, i, &val); + if (val) { + if (rand() < thresh) + selSetElement(sel, i, j, SEL_HIT); + } + } + } + } + if (missfract > 0.0) { + thresh = (l_int32)(missfract * (l_float64)RAND_MAX); + for (i = 0; i < h; i++) { + for (j = 0; j < w; j++) { + pixGetPixel(pixbg, j, i, &val); + if (val) { + if (rand() < thresh) + selSetElement(sel, i, j, SEL_MISS); + } + } + } + } + + pixDestroy(&pixfg); + pixDestroy(&pixbg); + return sel; +} + + +/*! + * \brief pixGenerateSelBoundary() + * + * \param[in] pixs 1 bpp, typically small, to be used as a pattern + * \param[in] hitdist min distance from fg boundary pixel + * \param[in] missdist min distance from bg boundary pixel + * \param[in] hitskip number of boundary pixels skipped between hits + * \param[in] missskip number of boundary pixels skipped between misses + * \param[in] topflag flag for extra pixels of bg added above + * \param[in] botflag flag for extra pixels of bg added below + * \param[in] leftflag flag for extra pixels of bg added to left + * \param[in] rightflag flag for extra pixels of bg added to right + * \param[out] ppixe [optional] input pix expanded by extra pixels + * \return sel hit-miss for input pattern, or NULL on error + * + *
+ * Notes:
+ *    (1) All fg elements selected are exactly hitdist pixels away from
+ *        the nearest fg boundary pixel, and ditto for bg elements.
+ *        Valid inputs of hitdist and missdist are 0, 1, 2, 3 and 4.
+ *        For example, a hitdist of 0 puts the hits at the fg boundary.
+ *        Usually, the distances should be > 0 avoid the effect of
+ *        noise at the boundary.
+ *    (2) Set hitskip < 0 if no hits are to be used.  Ditto for missskip.
+ *        If both hitskip and missskip are < 0, the sel would be empty,
+ *        and NULL is returned.
+ *    (3) The 4 flags determine whether the sel is increased on that side
+ *        to allow bg misses to be placed all along that boundary.
+ *        The increase in sel size on that side is the minimum necessary
+ *        to allow the misses to be placed at mindist.  For text characters,
+ *        the topflag and botflag are typically set to 1, and the leftflag
+ *        and rightflag to 0.
+ *    (4) The input pix, as extended by the extra pixels on selected sides,
+ *        can optionally be returned.  For debugging, call
+ *        pixDisplayHitMissSel() to visualize the hit-miss sel superimposed
+ *        on the generating bitmap.
+ *    (5) This is probably the best of the three sel generators, in the
+ *        sense that you have the most flexibility with the smallest number
+ *        of hits and misses.
+ * 
+ */ +SEL * +pixGenerateSelBoundary(PIX *pixs, + l_int32 hitdist, + l_int32 missdist, + l_int32 hitskip, + l_int32 missskip, + l_int32 topflag, + l_int32 botflag, + l_int32 leftflag, + l_int32 rightflag, + PIX **ppixe) +{ +l_int32 ws, hs, w, h, x, y, ix, iy, i, npt; +PIX *pixt1, *pixt2, *pixt3, *pixfg, *pixbg; +SEL *selh, *selm, *sel_3, *sel; +PTA *ptah, *ptam; + + PROCNAME("pixGenerateSelBoundary"); + + if (ppixe) *ppixe = NULL; + if (!pixs) + return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (hitdist < 0 || hitdist > 4 || missdist < 0 || missdist > 4) + return (SEL *)ERROR_PTR("dist not in {0 .. 4}", procName, NULL); + if (hitskip < 0 && missskip < 0) + return (SEL *)ERROR_PTR("no hits or misses", procName, NULL); + + /* Locate the foreground */ + pixClipToForeground(pixs, &pixt1, NULL); + if (!pixt1) + return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); + ws = pixGetWidth(pixt1); + hs = pixGetHeight(pixt1); + w = ws; + h = hs; + + /* Crop out a region including the foreground, and add pixels + * on sides depending on the side flags */ + if (topflag || botflag || leftflag || rightflag) { + x = y = 0; + if (topflag) { + h += missdist + 1; + y = missdist + 1; + } + if (botflag) + h += missdist + 1; + if (leftflag) { + w += missdist + 1; + x = missdist + 1; + } + if (rightflag) + w += missdist + 1; + pixt2 = pixCreate(w, h, 1); + pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); + } else { + pixt2 = pixClone(pixt1); + } + if (ppixe) + *ppixe = pixClone(pixt2); + pixDestroy(&pixt1); + + /* Identify fg and bg pixels that are exactly hitdist and + * missdist (rsp) away from the boundary pixels in their set. + * Then get a subsampled set of these points. */ + sel_3 = selCreateBrick(3, 3, 1, 1, SEL_HIT); + if (hitskip >= 0) { + selh = selCreateBrick(2 * hitdist + 1, 2 * hitdist + 1, + hitdist, hitdist, SEL_HIT); + pixt3 = pixErode(NULL, pixt2, selh); + pixfg = pixErode(NULL, pixt3, sel_3); + pixXor(pixfg, pixfg, pixt3); + ptah = pixSubsampleBoundaryPixels(pixfg, hitskip); + pixDestroy(&pixt3); + pixDestroy(&pixfg); + selDestroy(&selh); + } + if (missskip >= 0) { + selm = selCreateBrick(2 * missdist + 1, 2 * missdist + 1, + missdist, missdist, SEL_HIT); + pixt3 = pixDilate(NULL, pixt2, selm); + pixbg = pixDilate(NULL, pixt3, sel_3); + pixXor(pixbg, pixbg, pixt3); + ptam = pixSubsampleBoundaryPixels(pixbg, missskip); + pixDestroy(&pixt3); + pixDestroy(&pixbg); + selDestroy(&selm); + } + selDestroy(&sel_3); + pixDestroy(&pixt2); + + /* Generate the hit-miss sel from these point */ + sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); + if (hitskip >= 0) { + npt = ptaGetCount(ptah); + for (i = 0; i < npt; i++) { + ptaGetIPt(ptah, i, &ix, &iy); + selSetElement(sel, iy, ix, SEL_HIT); + } + } + if (missskip >= 0) { + npt = ptaGetCount(ptam); + for (i = 0; i < npt; i++) { + ptaGetIPt(ptam, i, &ix, &iy); + selSetElement(sel, iy, ix, SEL_MISS); + } + } + + ptaDestroy(&ptah); + ptaDestroy(&ptam); + return sel; +} + + +/*-----------------------------------------------------------------* + * Accumulate data on runs along lines * + *-----------------------------------------------------------------*/ +/*! + * \brief pixGetRunCentersOnLine() + * + * \param[in] pixs 1 bpp + * \param[in] x, y set one of these to -1; see notes + * \param[in] minlength minimum length of acceptable run + * \return numa of fg runs, or NULL on error + * + *
+ * Notes:
+ *      (1) Action: this function computes the fg (black) and bg (white)
+ *          pixel runlengths along the specified horizontal or vertical line,
+ *          and returns a Numa of the "center" pixels of each fg run
+ *          whose length equals or exceeds the minimum length.
+ *      (2) This only works on horizontal and vertical lines.
+ *      (3) For horizontal runs, set x = -1 and y to the value
+ *          for all points along the raster line.  For vertical runs,
+ *          set y = -1 and x to the value for all points along the
+ *          pixel column.
+ *      (4) For horizontal runs, the points in the Numa are the x
+ *          values in the center of fg runs that are of length at
+ *          least 'minlength'.  For vertical runs, the points in the
+ *          Numa are the y values in the center of fg runs, again
+ *          of length 'minlength' or greater.
+ *      (5) If there are no fg runs along the line that satisfy the
+ *          minlength constraint, the returned Numa is empty.  This
+ *          is not an error.
+ * 
+ */ +NUMA * +pixGetRunCentersOnLine(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 minlength) +{ +l_int32 w, h, i, r, nruns, len; +NUMA *naruns, *nad; + + PROCNAME("pixGetRunCentersOnLine"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (x != -1 && y != -1) + return (NUMA *)ERROR_PTR("x or y must be -1", procName, NULL); + if (x == -1 && y == -1) + return (NUMA *)ERROR_PTR("x or y cannot both be -1", procName, NULL); + + if ((nad = numaCreate(0)) == NULL) + return (NUMA *)ERROR_PTR("nad not made", procName, NULL); + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + if (x == -1) { /* horizontal run */ + if (y < 0 || y >= h) + return nad; + naruns = pixGetRunsOnLine(pixs, 0, y, w - 1, y); + } else { /* vertical run */ + if (x < 0 || x >= w) + return nad; + naruns = pixGetRunsOnLine(pixs, x, 0, x, h - 1); + } + nruns = numaGetCount(naruns); + + /* extract run center values; the first run is always bg */ + r = 0; /* cumulative distance along line */ + for (i = 0; i < nruns; i++) { + if (i % 2 == 0) { /* bg run */ + numaGetIValue(naruns, i, &len); + r += len; + continue; + } else { + numaGetIValue(naruns, i, &len); + if (len >= minlength) + numaAddNumber(nad, r + len / 2); + r += len; + } + } + + numaDestroy(&naruns); + return nad; +} + + +/*! + * \brief pixGetRunsOnLine() + * + * \param[in] pixs 1 bpp + * \param[in] x1, y1, x2, y2 + * \return numa, or NULL on error + * + *
+ * Notes:
+ *      (1) Action: this function uses the bresenham algorithm to compute
+ *          the pixels along the specified line.  It returns a Numa of the
+ *          runlengths of the fg (black) and bg (white) runs, always
+ *          starting with a white run.
+ *      (2) If the first pixel on the line is black, the length of the
+ *          first returned run (which is white) is 0.
+ * 
+ */ +NUMA * +pixGetRunsOnLine(PIX *pixs, + l_int32 x1, + l_int32 y1, + l_int32 x2, + l_int32 y2) +{ +l_int32 w, h, x, y, npts; +l_int32 i, runlen, preval; +l_uint32 val; +NUMA *numa; +PTA *pta; + + PROCNAME("pixGetRunsOnLine"); + + if (!pixs) + return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (NUMA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + if (x1 < 0 || x1 >= w) + return (NUMA *)ERROR_PTR("x1 not valid", procName, NULL); + if (x2 < 0 || x2 >= w) + return (NUMA *)ERROR_PTR("x2 not valid", procName, NULL); + if (y1 < 0 || y1 >= h) + return (NUMA *)ERROR_PTR("y1 not valid", procName, NULL); + if (y2 < 0 || y2 >= h) + return (NUMA *)ERROR_PTR("y2 not valid", procName, NULL); + + if ((pta = generatePtaLine(x1, y1, x2, y2)) == NULL) + return (NUMA *)ERROR_PTR("pta not made", procName, NULL); + if ((npts = ptaGetCount(pta)) == 0) { + ptaDestroy(&pta); + return (NUMA *)ERROR_PTR("pta has no pts", procName, NULL); + } + if ((numa = numaCreate(0)) == NULL) { + ptaDestroy(&pta); + return (NUMA *)ERROR_PTR("numa not made", procName, NULL); + } + + for (i = 0; i < npts; i++) { + ptaGetIPt(pta, i, &x, &y); + pixGetPixel(pixs, x, y, &val); + if (i == 0) { + if (val == 1) { /* black pixel; append white run of size 0 */ + numaAddNumber(numa, 0); + } + preval = val; + runlen = 1; + continue; + } + if (val == preval) { /* extend current run */ + preval = val; + runlen++; + } else { /* end previous run */ + numaAddNumber(numa, runlen); + preval = val; + runlen = 1; + } + } + numaAddNumber(numa, runlen); /* append last run */ + + ptaDestroy(&pta); + return numa; +} + + +/*-----------------------------------------------------------------* + * Subsample boundary pixels in relatively ordered way * + *-----------------------------------------------------------------*/ +/*! + * \brief pixSubsampleBoundaryPixels() + * + * \param[in] pixs 1 bpp, with only boundary pixels in fg + * \param[in] skip number to skip between samples as you traverse boundary + * \return pta, or NULL on error + * + *
+ * Notes:
+ *      (1) If skip = 0, we take all the fg pixels.
+ *      (2) We try to traverse the boundaries in a regular way.
+ *          Some pixels may be missed, and these are then subsampled
+ *          randomly with a fraction determined by 'skip'.
+ *      (3) The most natural approach is to use a depth first (stack-based)
+ *          method to find the fg pixels.  However, the pixel runs are
+ *          4-connected and there are relatively few branches.  So
+ *          instead of doing a proper depth-first search, we get nearly
+ *          the same result using two nested while loops: the outer
+ *          one continues a raster-based search for the next fg pixel,
+ *          and the inner one does a reasonable job running along
+ *          each 4-connected coutour.
+ * 
+ */ +PTA * +pixSubsampleBoundaryPixels(PIX *pixs, + l_int32 skip) +{ +l_int32 x, y, xn, yn, xs, ys, xa, ya, count; +PIX *pixt; +PTA *pta; + + PROCNAME("pixSubsampleBoundaryPixels"); + + if (!pixs) + return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (skip < 0) + return (PTA *)ERROR_PTR("skip < 0", procName, NULL); + + if (skip == 0) + return ptaGetPixelsFromPix(pixs, NULL); + + pta = ptaCreate(0); + pixt = pixCopy(NULL, pixs); + xs = ys = 0; + while (nextOnPixelInRaster(pixt, xs, ys, &xn, &yn)) { /* new series */ + xs = xn; + ys = yn; + + /* Add first point in this series */ + ptaAddPt(pta, xs, ys); + + /* Trace out boundary, erasing all and saving every (skip + 1)th */ + x = xs; + y = ys; + pixSetPixel(pixt, x, y, 0); + count = 0; + while (adjacentOnPixelInRaster(pixt, x, y, &xa, &ya)) { + x = xa; + y = ya; + pixSetPixel(pixt, x, y, 0); + if (count == skip) { + ptaAddPt(pta, x, y); + count = 0; + } else { + count++; + } + } + } + + pixDestroy(&pixt); + return pta; +} + + +/*! + * \brief adjacentOnPixelInRaster() + * + * \param[in] pixs 1 bpp + * \param[in] x, y current pixel + * \param[out] pxa, pya adjacent ON pixel, found by simple CCW search + * \return 1 if a pixel is found; 0 otherwise or on error + * + *
+ * Notes:
+ *      (1) Search is in 4-connected directions first; then on diagonals.
+ *          This allows traversal along a 4-connected boundary.
+ * 
+ */ +l_int32 +adjacentOnPixelInRaster(PIX *pixs, + l_int32 x, + l_int32 y, + l_int32 *pxa, + l_int32 *pya) +{ +l_int32 w, h, i, xa, ya, found; +l_int32 xdel[] = {-1, 0, 1, 0, -1, 1, 1, -1}; +l_int32 ydel[] = {0, 1, 0, -1, 1, 1, -1, -1}; +l_uint32 val; + + PROCNAME("adjacentOnPixelInRaster"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 0); + if (pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not 1 bpp", procName, 0); + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + found = 0; + for (i = 0; i < 8; i++) { + xa = x + xdel[i]; + ya = y + ydel[i]; + if (xa < 0 || xa >= w || ya < 0 || ya >= h) + continue; + pixGetPixel(pixs, xa, ya, &val); + if (val == 1) { + found = 1; + *pxa = xa; + *pya = ya; + break; + } + } + return found; +} + + + +/*-----------------------------------------------------------------* + * Display generated sel with originating image * + *-----------------------------------------------------------------*/ +/*! + * \brief pixDisplayHitMissSel() + * + * \param[in] pixs 1 bpp + * \param[in] sel hit-miss in general + * \param[in] scalefactor an integer >= 1; use 0 for default + * \param[in] hitcolor RGB0 color for center of hit pixels + * \param[in] misscolor RGB0 color for center of miss pixels + * \return pixd RGB showing both pixs and sel, or NULL on error + *
+ * Notes:
+ *    (1) We don't allow scalefactor to be larger than MaxSelScalefactor
+ *    (2) The colors are conveniently given as 4 bytes in hex format,
+ *        such as 0xff008800.  The least significant byte is ignored.
+ * 
+ */ +PIX * +pixDisplayHitMissSel(PIX *pixs, + SEL *sel, + l_int32 scalefactor, + l_uint32 hitcolor, + l_uint32 misscolor) +{ +l_int32 i, j, type; +l_float32 fscale; +PIX *pixt, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixDisplayHitMissSel"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (pixGetDepth(pixs) != 1) + return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); + if (!sel) + return (PIX *)ERROR_PTR("sel not defined", procName, NULL); + + if (scalefactor <= 0) + scalefactor = DefaultSelScalefactor; + if (scalefactor > MaxSelScalefactor) { + L_WARNING("scalefactor too large; using max value\n", procName); + scalefactor = MaxSelScalefactor; + } + + /* Generate a version of pixs with a colormap */ + pixt = pixConvert1To8(NULL, pixs, 0, 1); + cmap = pixcmapCreate(8); + pixcmapAddColor(cmap, 255, 255, 255); + pixcmapAddColor(cmap, 0, 0, 0); + pixcmapAddColor(cmap, hitcolor >> 24, (hitcolor >> 16) & 0xff, + (hitcolor >> 8) & 0xff); + pixcmapAddColor(cmap, misscolor >> 24, (misscolor >> 16) & 0xff, + (misscolor >> 8) & 0xff); + pixSetColormap(pixt, cmap); + + /* Color the hits and misses */ + for (i = 0; i < sel->sy; i++) { + for (j = 0; j < sel->sx; j++) { + selGetElement(sel, i, j, &type); + if (type == SEL_DONT_CARE) + continue; + if (type == SEL_HIT) + pixSetPixel(pixt, j, i, 2); + else /* type == SEL_MISS */ + pixSetPixel(pixt, j, i, 3); + } + } + + /* Scale it up */ + fscale = (l_float32)scalefactor; + pixd = pixScaleBySampling(pixt, fscale, fscale); + + pixDestroy(&pixt); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/shear.c b/3rdparty/hgOCR/leptonica/shear.c new file mode 100644 index 00000000..a9c0000c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/shear.c @@ -0,0 +1,850 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file shear.c + *
+ *
+ *    About arbitrary lines
+ *           PIX      *pixHShear()
+ *           PIX      *pixVShear()
+ *
+ *    About special 'points': UL corner and center
+ *           PIX      *pixHShearCorner()
+ *           PIX      *pixVShearCorner()
+ *           PIX      *pixHShearCenter()
+ *           PIX      *pixVShearCenter()
+ *
+ *    In place about arbitrary lines
+ *           l_int32   pixHShearIP()
+ *           l_int32   pixVShearIP()
+ *
+ *    Linear interpolated shear about arbitrary lines
+ *           PIX      *pixHShearLI()
+ *           PIX      *pixVShearLI()
+ *
+ *    Static helper
+ *      static l_float32  normalizeAngleForShear()
+ * 
+ */ + +#include +#include +#include "allheaders.h" + + /* Shear angle must not get too close to -pi/2 or pi/2 */ +static const l_float32 MinDiffFromHalfPi = 0.04; + +static l_float32 normalizeAngleForShear(l_float32 radang, l_float32 mindif); + + +#ifndef NO_CONSOLE_IO +#define DEBUG 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-------------------------------------------------------------* + * About arbitrary lines * + *-------------------------------------------------------------*/ +/*! + * \brief pixHShear() + * + * \param[in] pixd [optional] this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs any depth; cmap ok + * \param[in] yloc location of horizontal line, measured from origin + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, always + * + *
+ * Notes:
+ *      (1) There are 3 cases:
+ *            (a) pixd == null (make a new pixd)
+ *            (b) pixd == pixs (in-place)
+ *            (c) pixd != pixs
+ *      (2) For these three cases, use these patterns, respectively:
+ *              pixd = pixHShear(NULL, pixs, ...);
+ *              pixHShear(pixs, pixs, ...);
+ *              pixHShear(pixd, pixs, ...);
+ *      (3) This shear leaves the horizontal line of pixels at y = yloc
+ *          invariant.  For a positive shear angle, pixels above this
+ *          line are shoved to the right, and pixels below this line
+ *          move to the left.
+ *      (4) With positive shear angle, this can be used, along with
+ *          pixVShear(), to perform a cw rotation, either with 2 shears
+ *          (for small angles) or in the general case with 3 shears.
+ *      (5) Changing the value of yloc is equivalent to translating
+ *          the result horizontally.
+ *      (6) This brings in %incolor pixels from outside the image.
+ *      (7) In-place shears do not work on cmapped pix, because the
+ *          in-place operation cannot initialize to the requested %incolor,
+ *          so we shear from a copy.
+ *      (8) The angle is brought into the range [-pi, -pi].  It is
+ *          not permitted to be within MinDiffFromHalfPi radians
+ *          from either -pi/2 or pi/2.
+ * 
+ */ +PIX * +pixHShear(PIX *pixd, + PIX *pixs, + l_int32 yloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 sign, w, h; +l_int32 y, yincr, inityincr, hshift; +l_float32 tanangle, invangle; + + PROCNAME("pixHShear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor value", procName, pixd); + + if (pixd == pixs) { /* in place */ + if (!pixGetColormap(pixs)) { + pixHShearIP(pixd, yloc, radang, incolor); + } else { /* can't do in-place with a colormap */ + PIX *pix1 = pixCopy(NULL, pixs); + pixHShear(pixd, pix1, yloc, radang, incolor); + pixDestroy(&pix1); + } + return pixd; + } + + /* Make sure pixd exists and is same size as pixs */ + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } else { /* pixd != pixs */ + pixResizeImageData(pixd, pixs); + } + + /* Normalize angle. If no rotation, return a copy */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) + return pixCopy(pixd, pixs); + + /* Initialize to value of incoming pixels */ + pixSetBlackOrWhite(pixd, incolor); + + pixGetDimensions(pixs, &w, &h, NULL); + sign = L_SIGN(radang); + tanangle = tan(radang); + invangle = L_ABS(1. / tanangle); + inityincr = (l_int32)(invangle / 2.); + yincr = (l_int32)invangle; + pixRasterop(pixd, 0, yloc - inityincr, w, 2 * inityincr, PIX_SRC, + pixs, 0, yloc - inityincr); + + for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { + yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); + if (h - y < yincr) /* reduce for last one if req'd */ + yincr = h - y; + pixRasterop(pixd, -sign*hshift, y, w, yincr, PIX_SRC, pixs, 0, y); +#if DEBUG + fprintf(stderr, "y = %d, hshift = %d, yincr = %d\n", y, hshift, yincr); +#endif /* DEBUG */ + y += yincr; + } + + for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { + yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); + if (y < yincr) /* reduce for last one if req'd */ + yincr = y; + pixRasterop(pixd, -sign*hshift, y - yincr, w, yincr, PIX_SRC, + pixs, 0, y - yincr); +#if DEBUG + fprintf(stderr, "y = %d, hshift = %d, yincr = %d\n", + y - yincr, hshift, yincr); +#endif /* DEBUG */ + y -= yincr; + } + + return pixd; +} + + +/*! + * \brief pixVShear() + * + * \param[in] pixd [optional], this can be null, equal to pixs, + * or different from pixs + * \param[in] pixs any depth; cmap ok + * \param[in] xloc location of vertical line, measured from origin + * \param[in] radang angle in radians; not too close to +-(pi / 2) + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error + * + *
+ * Notes:
+ *      (1) There are 3 cases:
+ *            (a) pixd == null (make a new pixd)
+ *            (b) pixd == pixs (in-place)
+ *            (c) pixd != pixs
+ *      (2) For these three cases, use these patterns, respectively:
+ *              pixd = pixVShear(NULL, pixs, ...);
+ *              pixVShear(pixs, pixs, ...);
+ *              pixVShear(pixd, pixs, ...);
+ *      (3) This shear leaves the vertical line of pixels at x = xloc
+ *          invariant.  For a positive shear angle, pixels to the right
+ *          of this line are shoved downward, and pixels to the left
+ *          of the line move upward.
+ *      (4) With positive shear angle, this can be used, along with
+ *          pixHShear(), to perform a cw rotation, either with 2 shears
+ *          (for small angles) or in the general case with 3 shears.
+ *      (5) Changing the value of xloc is equivalent to translating
+ *          the result vertically.
+ *      (6) This brings in %incolor pixels from outside the image.
+ *      (7) In-place shears do not work on cmapped pix, because the
+ *          in-place operation cannot initialize to the requested %incolor,
+ *          so we shear from a copy.
+ *      (8) The angle is brought into the range [-pi, -pi].  It is
+ *          not permitted to be within MinDiffFromHalfPi radians
+ *          from either -pi/2 or pi/2.
+ * 
+ */ +PIX * +pixVShear(PIX *pixd, + PIX *pixs, + l_int32 xloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 sign, w, h; +l_int32 x, xincr, initxincr, vshift; +l_float32 tanangle, invangle; + + PROCNAME("pixVShear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + + if (pixd == pixs) { /* in place */ + if (!pixGetColormap(pixs)) { + pixVShearIP(pixd, xloc, radang, incolor); + } else { /* can't do in-place with a colormap */ + PIX *pix1 = pixCopy(NULL, pixs); + pixVShear(pixd, pix1, xloc, radang, incolor); + pixDestroy(&pix1); + } + return pixd; + } + + /* Make sure pixd exists and is same size as pixs */ + if (!pixd) { + if ((pixd = pixCreateTemplate(pixs)) == NULL) + return (PIX *)ERROR_PTR("pixd not made", procName, NULL); + } else { /* pixd != pixs */ + pixResizeImageData(pixd, pixs); + } + + /* Normalize angle. If no rotation, return a copy */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) + return pixCopy(pixd, pixs); + + /* Initialize to value of incoming pixels */ + pixSetBlackOrWhite(pixd, incolor); + + pixGetDimensions(pixs, &w, &h, NULL); + sign = L_SIGN(radang); + tanangle = tan(radang); + invangle = L_ABS(1. / tanangle); + initxincr = (l_int32)(invangle / 2.); + xincr = (l_int32)invangle; + pixRasterop(pixd, xloc - initxincr, 0, 2 * initxincr, h, PIX_SRC, + pixs, xloc - initxincr, 0); + + for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { + xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); + if (w - x < xincr) /* reduce for last one if req'd */ + xincr = w - x; + pixRasterop(pixd, x, sign*vshift, xincr, h, PIX_SRC, pixs, x, 0); +#if DEBUG + fprintf(stderr, "x = %d, vshift = %d, xincr = %d\n", x, vshift, xincr); +#endif /* DEBUG */ + x += xincr; + } + + for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { + xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); + if (x < xincr) /* reduce for last one if req'd */ + xincr = x; + pixRasterop(pixd, x - xincr, sign*vshift, xincr, h, PIX_SRC, + pixs, x - xincr, 0); +#if DEBUG + fprintf(stderr, "x = %d, vshift = %d, xincr = %d\n", + x - xincr, vshift, xincr); +#endif /* DEBUG */ + x -= xincr; + } + + return pixd; +} + + + +/*-------------------------------------------------------------* + * Shears about UL corner and center * + *-------------------------------------------------------------*/ +/*! + * \brief pixHShearCorner() + * + * \param[in] pixd [optional], if not null, must be equal to pixs + * \param[in] pixs any depth + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) See pixHShear() for usage.
+ *      (2) This does a horizontal shear about the UL corner, with (+) shear
+ *          pushing increasingly leftward (-x) with increasing y.
+ * 
+ */ +PIX * +pixHShearCorner(PIX *pixd, + PIX *pixs, + l_float32 radang, + l_int32 incolor) +{ + PROCNAME("pixHShearCorner"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + + return pixHShear(pixd, pixs, 0, radang, incolor); +} + + +/*! + * \brief pixVShearCorner() + * + * \param[in] pixd [optional], if not null, must be equal to pixs + * \param[in] pixs any depth + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) See pixVShear() for usage.
+ *      (2) This does a vertical shear about the UL corner, with (+) shear
+ *          pushing increasingly downward (+y) with increasing x.
+ * 
+ */ +PIX * +pixVShearCorner(PIX *pixd, + PIX *pixs, + l_float32 radang, + l_int32 incolor) +{ + PROCNAME("pixVShearCorner"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + + return pixVShear(pixd, pixs, 0, radang, incolor); +} + + +/*! + * \brief pixHShearCenter() + * + * \param[in] pixd [optional] if not null, must be equal to pixs + * \param[in] pixs any depth + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) See pixHShear() for usage.
+ *      (2) This does a horizontal shear about the center, with (+) shear
+ *          pushing increasingly leftward (-x) with increasing y.
+ * 
+ */ +PIX * +pixHShearCenter(PIX *pixd, + PIX *pixs, + l_float32 radang, + l_int32 incolor) +{ + PROCNAME("pixHShearCenter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + + return pixHShear(pixd, pixs, pixGetHeight(pixs) / 2, radang, incolor); +} + + +/*! + * \brief pixVShearCenter() + * + * \param[in] pixd [optional] if not null, must be equal to pixs + * \param[in] pixs any depth + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd, or NULL on error. + * + *
+ * Notes:
+ *      (1) See pixVShear() for usage.
+ *      (2) This does a vertical shear about the center, with (+) shear
+ *          pushing increasingly downward (+y) with increasing x.
+ * 
+ */ +PIX * +pixVShearCenter(PIX *pixd, + PIX *pixs, + l_float32 radang, + l_int32 incolor) +{ + PROCNAME("pixVShearCenter"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); + + return pixVShear(pixd, pixs, pixGetWidth(pixs) / 2, radang, incolor); +} + + + +/*--------------------------------------------------------------------------* + * In place about arbitrary lines * + *--------------------------------------------------------------------------*/ +/*! + * \brief pixHShearIP() + * + * \param[in] pixs any depth; no cmap + * \param[in] yloc location of horizontal line, measured from origin + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place version of pixHShear(); see comments there.
+ *      (2) This brings in 'incolor' pixels from outside the image.
+ *      (3) pixs cannot be colormapped, because the in-place operation
+ *          only blits in 0 or 1 bits, not an arbitrary colormap index.
+ *      (4) Does a horizontal full-band shear about the line with (+) shear
+ *          pushing increasingly leftward (-x) with increasing y.
+ * 
+ */ +l_ok +pixHShearIP(PIX *pixs, + l_int32 yloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 sign, w, h; +l_int32 y, yincr, inityincr, hshift; +l_float32 tanangle, invangle; + + PROCNAME("pixHShearIP"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return ERROR_INT("invalid incolor value", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + + /* Normalize angle */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) + return 0; + + sign = L_SIGN(radang); + pixGetDimensions(pixs, &w, &h, NULL); + tanangle = tan(radang); + invangle = L_ABS(1. / tanangle); + inityincr = (l_int32)(invangle / 2.); + yincr = (l_int32)invangle; + + if (inityincr > 0) + pixRasteropHip(pixs, yloc - inityincr, 2 * inityincr, 0, incolor); + + for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { + yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); + if (yincr == 0) continue; + if (h - y < yincr) /* reduce for last one if req'd */ + yincr = h - y; + pixRasteropHip(pixs, y, yincr, -sign*hshift, incolor); + y += yincr; + } + + for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { + yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); + if (yincr == 0) continue; + if (y < yincr) /* reduce for last one if req'd */ + yincr = y; + pixRasteropHip(pixs, y - yincr, yincr, -sign*hshift, incolor); + y -= yincr; + } + + return 0; +} + + +/*! + * \brief pixVShearIP() + * + * \param[in] pixs any depth; no cmap + * \param[in] xloc location of vertical line, measured from origin + * \param[in] radang angle in radians + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is an in-place version of pixVShear(); see comments there.
+ *      (2) This brings in 'incolor' pixels from outside the image.
+ *      (3) pixs cannot be colormapped, because the in-place operation
+ *          only blits in 0 or 1 bits, not an arbitrary colormap index.
+ *      (4) Does a vertical full-band shear about the line with (+) shear
+ *          pushing increasingly downward (+y) with increasing x.
+ * 
+ */ +l_ok +pixVShearIP(PIX *pixs, + l_int32 xloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 sign, w, h; +l_int32 x, xincr, initxincr, vshift; +l_float32 tanangle, invangle; + + PROCNAME("pixVShearIP"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return ERROR_INT("invalid incolor value", procName, 1); + if (pixGetColormap(pixs)) + return ERROR_INT("pixs is colormapped", procName, 1); + + /* Normalize angle */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) + return 0; + + sign = L_SIGN(radang); + pixGetDimensions(pixs, &w, &h, NULL); + tanangle = tan(radang); + invangle = L_ABS(1. / tanangle); + initxincr = (l_int32)(invangle / 2.); + xincr = (l_int32)invangle; + + if (initxincr > 0) + pixRasteropVip(pixs, xloc - initxincr, 2 * initxincr, 0, incolor); + + for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { + xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); + if (xincr == 0) continue; + if (w - x < xincr) /* reduce for last one if req'd */ + xincr = w - x; + pixRasteropVip(pixs, x, xincr, sign*vshift, incolor); + x += xincr; + } + + for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { + xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); + if (xincr == 0) continue; + if (x < xincr) /* reduce for last one if req'd */ + xincr = x; + pixRasteropVip(pixs, x - xincr, xincr, sign*vshift, incolor); + x -= xincr; + } + + return 0; +} + + +/*-------------------------------------------------------------------------* + * Linear interpolated shear about arbitrary lines * + *-------------------------------------------------------------------------*/ +/*! + * \brief pixHShearLI() + * + * \param[in] pixs 8 bpp or 32 bpp, or colormapped + * \param[in] yloc location of horizontal line, measured from origin + * \param[in] radang angle in radians, in range (-pi/2 ... pi/2) + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd sheared, or NULL on error + * + *
+ * Notes:
+ *      (1) This does horizontal shear with linear interpolation for
+ *          accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images.
+ *          It is relatively slow compared to the sampled version
+ *          implemented by rasterop, but the result is much smoother.
+ *      (2) This shear leaves the horizontal line of pixels at y = yloc
+ *          invariant.  For a positive shear angle, pixels above this
+ *          line are shoved to the right, and pixels below this line
+ *          move to the left.
+ *      (3) Any colormap is removed.
+ *      (4) The angle is brought into the range [-pi/2 + del, pi/2 - del],
+ *          where del == MinDiffFromHalfPi.
+ * 
+ */ +PIX * +pixHShearLI(PIX *pixs, + l_int32 yloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 i, jd, x, xp, xf, w, h, d, wm, wpls, wpld, val, rval, gval, bval; +l_uint32 word0, word1; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 tanangle, xshift; +PIX *pix, *pixd; + + PROCNAME("pixHShearLI"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + if (yloc < 0 || yloc >= h) + return (PIX *)ERROR_PTR("yloc not in [0 ... h-1]", procName, NULL); + + if (pixGetColormap(pixs)) + pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix = pixClone(pixs); + + /* Normalize angle. If no rotation, return a copy */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) { + pixDestroy(&pix); + return pixCopy(NULL, pixs); + } + + /* Initialize to value of incoming pixels */ + pixd = pixCreateTemplate(pix); + pixSetBlackOrWhite(pixd, incolor); + + /* Standard linear interp: subdivide each pixel into 64 parts */ + d = pixGetDepth(pixd); /* 8 or 32 */ + datas = pixGetData(pix); + datad = pixGetData(pixd); + wpls = pixGetWpl(pix); + wpld = pixGetWpl(pixd); + tanangle = tan(radang); + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + xshift = (yloc - i) * tanangle; + for (jd = 0; jd < w; jd++) { + x = (l_int32)(64.0 * (-xshift + jd) + 0.5); + xp = x / 64; + xf = x & 63; + wm = w - 1; + if (xp < 0 || xp > wm) continue; + if (d == 8) { + if (xp < wm) { + val = ((63 - xf) * GET_DATA_BYTE(lines, xp) + + xf * GET_DATA_BYTE(lines, xp + 1) + 31) / 63; + } else { /* xp == wm */ + val = GET_DATA_BYTE(lines, xp); + } + SET_DATA_BYTE(lined, jd, val); + } else { /* d == 32 */ + if (xp < wm) { + word0 = *(lines + xp); + word1 = *(lines + xp + 1); + rval = ((63 - xf) * ((word0 >> L_RED_SHIFT) & 0xff) + + xf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; + gval = ((63 - xf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + + xf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; + bval = ((63 - xf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + + xf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; + composeRGBPixel(rval, gval, bval, lined + jd); + } else { /* xp == wm */ + lined[jd] = lines[xp]; + } + } + } + } + + pixDestroy(&pix); + return pixd; +} + + +/*! + * \brief pixVShearLI() + * + * \param[in] pixs 8 bpp or 32 bpp, or colormapped + * \param[in] xloc location of vertical line, measured from origin + * \param[in] radang angle in radians, in range (-pi/2 ... pi/2) + * \param[in] incolor L_BRING_IN_WHITE, L_BRING_IN_BLACK; + * \return pixd sheared, or NULL on error + * + *
+ * Notes:
+ *      (1) This does vertical shear with linear interpolation for
+ *          accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images.
+ *          It is relatively slow compared to the sampled version
+ *          implemented by rasterop, but the result is much smoother.
+ *      (2) This shear leaves the vertical line of pixels at x = xloc
+ *          invariant.  For a positive shear angle, pixels to the right
+ *          of this line are shoved downward, and pixels to the left
+ *          of the line move upward.
+ *      (3) Any colormap is removed.
+ *      (4) The angle is brought into the range [-pi/2 + del, pi/2 - del],
+ *          where del == MinDiffFromHalfPi.
+ * 
+ */ +PIX * +pixVShearLI(PIX *pixs, + l_int32 xloc, + l_float32 radang, + l_int32 incolor) +{ +l_int32 id, y, yp, yf, j, w, h, d, hm, wpls, wpld, val, rval, gval, bval; +l_uint32 word0, word1; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 tanangle, yshift; +PIX *pix, *pixd; + + PROCNAME("pixVShearLI"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32 && !pixGetColormap(pixs)) + return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); + if (xloc < 0 || xloc >= w) + return (PIX *)ERROR_PTR("xloc not in [0 ... w-1]", procName, NULL); + + if (pixGetColormap(pixs)) + pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix = pixClone(pixs); + + /* Normalize angle. If no rotation, return a copy */ + radang = normalizeAngleForShear(radang, MinDiffFromHalfPi); + if (radang == 0.0 || tan(radang) == 0.0) { + pixDestroy(&pix); + return pixCopy(NULL, pixs); + } + + /* Initialize to value of incoming pixels */ + pixd = pixCreateTemplate(pix); + pixSetBlackOrWhite(pixd, incolor); + + /* Standard linear interp: subdivide each pixel into 64 parts */ + d = pixGetDepth(pixd); /* 8 or 32 */ + datas = pixGetData(pix); + datad = pixGetData(pixd); + wpls = pixGetWpl(pix); + wpld = pixGetWpl(pixd); + tanangle = tan(radang); + for (j = 0; j < w; j++) { + yshift = (j - xloc) * tanangle; + for (id = 0; id < h; id++) { + y = (l_int32)(64.0 * (-yshift + id) + 0.5); + yp = y / 64; + yf = y & 63; + hm = h - 1; + if (yp < 0 || yp > hm) continue; + lines = datas + yp * wpls; + lined = datad + id * wpld; + if (d == 8) { + if (yp < hm) { + val = ((63 - yf) * GET_DATA_BYTE(lines, j) + + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; + } else { /* yp == hm */ + val = GET_DATA_BYTE(lines, j); + } + SET_DATA_BYTE(lined, j, val); + } else { /* d == 32 */ + if (yp < hm) { + word0 = *(lines + j); + word1 = *(lines + wpls + j); + rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; + gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; + bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; + composeRGBPixel(rval, gval, bval, lined + j); + } else { /* yp == hm */ + lined[j] = lines[j]; + } + } + } + } + + pixDestroy(&pix); + return pixd; +} + + +/*-------------------------------------------------------------------------* + * Angle normalization * + *-------------------------------------------------------------------------*/ +static l_float32 +normalizeAngleForShear(l_float32 radang, + l_float32 mindif) +{ +l_float32 pi2; + + PROCNAME("normalizeAngleForShear"); + + /* Bring angle into range [-pi/2, pi/2] */ + pi2 = 3.14159265 / 2.0; + if (radang < -pi2 || radang > pi2) + radang = radang - (l_int32)(radang / pi2) * pi2; + + /* If angle is too close to pi/2 or -pi/2, move it */ + if (radang > pi2 - mindif) { + L_WARNING("angle close to pi/2; shifting away\n", procName); + radang = pi2 - mindif; + } else if (radang < -pi2 + mindif) { + L_WARNING("angle close to -pi/2; shifting away\n", procName); + radang = -pi2 + mindif; + } + + return radang; +} diff --git a/3rdparty/hgOCR/leptonica/skew.c b/3rdparty/hgOCR/leptonica/skew.c new file mode 100644 index 00000000..df8a70a8 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/skew.c @@ -0,0 +1,1243 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file skew.c + *
+ *
+ *      Top-level deskew interfaces
+ *          PIX       *pixDeskewBoth()
+ *          PIX       *pixDeskew()
+ *          PIX       *pixFindSkewAndDeskew()
+ *          PIX       *pixDeskewGeneral()
+ *
+ *      Top-level angle-finding interface
+ *          l_int32    pixFindSkew()
+ *
+ *      Basic angle-finding functions
+ *          l_int32    pixFindSkewSweep()
+ *          l_int32    pixFindSkewSweepAndSearch()
+ *          l_int32    pixFindSkewSweepAndSearchScore()
+ *          l_int32    pixFindSkewSweepAndSearchScorePivot()
+ *
+ *      Search over arbitrary range of angles in orthogonal directions
+ *          l_int32    pixFindSkewOrthogonalRange()
+ *
+ *      Differential square sum function for scoring
+ *          l_int32    pixFindDifferentialSquareSum()
+ *
+ *      Measures of variance of row sums
+ *          l_int32    pixFindNormalizedSquareSum()
+ *
+ *
+ *      ==============================================================
+ *      Page skew detection
+ *
+ *      Skew is determined by pixel profiles, which are computed
+ *      as pixel sums along the raster line for each line in the
+ *      image.  By vertically shearing the image by a given angle,
+ *      the sums can be computed quickly along the raster lines
+ *      rather than along lines at that angle.  The score is
+ *      computed from these line sums by taking the square of
+ *      the DIFFERENCE between adjacent line sums, summed over
+ *      all lines.  The skew angle is then found as the angle
+ *      that maximizes the score.  The actual computation for
+ *      any sheared image is done in the function
+ *      pixFindDifferentialSquareSum().
+ *
+ *      The search for the angle that maximizes this score is
+ *      most efficiently performed by first sweeping coarsely
+ *      over angles, using a significantly reduced image (say, 4x
+ *      reduction), to find the approximate maximum within a half
+ *      degree or so, and then doing an interval-halving binary
+ *      search at higher resolution to get the skew angle to
+ *      within 1/20 degree or better.
+ *
+ *      The differential signal is used (rather than just using
+ *      that variance of line sums) because it rejects the
+ *      background noise due to total number of black pixels,
+ *      and has maximum contributions from the baselines and
+ *      x-height lines of text when the textlines are aligned
+ *      with the raster lines.  It also works well in multicolumn
+ *      pages where the textlines do not line up across columns.
+ *
+ *      The method is fast, accurate to within an angle (in radians)
+ *      of approximately the inverse width in pixels of the image,
+ *      and will work on a surprisingly small amount of text data
+ *      (just a couple of text lines).  Consequently, it can
+ *      also be used to find local skew if the skew were to vary
+ *      significantly over the page.  Local skew determination
+ *      is not very important except for locating lines of
+ *      handwritten text that may be mixed with printed text.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Default sweep angle parameters for pixFindSkew() */ +static const l_float32 DefaultSweepRange = 7.0; /* degrees */ +static const l_float32 DefaultSweepDelta = 1.0; /* degrees */ + + /* Default final angle difference parameter for binary + * search in pixFindSkew(). The expected accuracy is + * not better than the inverse image width in pixels, + * say, 1/2000 radians, or about 0.03 degrees. */ +static const l_float32 DefaultMinbsDelta = 0.01; /* degrees */ + + /* Default scale factors for pixFindSkew() */ +static const l_int32 DefaultSweepReduction = 4; /* sweep part; 4 is good */ +static const l_int32 DefaultBsReduction = 2; /* binary search part */ + + /* Minimum angle for deskewing in pixDeskew() */ +static const l_float32 MinDeskewAngle = 0.1; /* degree */ + + /* Minimum allowed confidence (ratio) for deskewing in pixDeskew() */ +static const l_float32 MinAllowedConfidence = 3.0; + + /* Minimum allowed maxscore to give nonzero confidence */ +static const l_int32 MinValidMaxscore = 10000; + + /* Constant setting threshold for minimum allowed minscore + * to give nonzero confidence; multiply this constant by + * (height * width^2) */ +static const l_float32 MinscoreThreshFactor = 0.000002; + + /* Default binarization threshold value */ +static const l_int32 DefaultBinaryThreshold = 130; + +#ifndef NO_CONSOLE_IO +#define DEBUG_PRINT_SCORES 0 +#define DEBUG_PRINT_SWEEP 0 +#define DEBUG_PRINT_BINARY 0 +#define DEBUG_PRINT_ORTH 0 +#define DEBUG_THRESHOLD 0 +#define DEBUG_PLOT_SCORES 0 /* requires the gnuplot executable */ +#endif /* ~NO_CONSOLE_IO */ + + + +/*-----------------------------------------------------------------------* + * Top-level deskew interfaces * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixDeskewBoth() + * + * \param[in] pixs any depth + * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; + * use 0 for default + * \return pixd deskewed pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This binarizes if necessary and does both horizontal
+ *          and vertical deskewing, using the default parameters in
+ *          the underlying pixDeskew().  See usage there.
+ *      (2) This may return a clone.
+ * 
+ */ +PIX * +pixDeskewBoth(PIX *pixs, + l_int32 redsearch) +{ +PIX *pix1, *pix2, *pix3, *pix4; + + PROCNAME("pixDeskewBoth"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (redsearch == 0) + redsearch = DefaultBsReduction; + else if (redsearch != 1 && redsearch != 2 && redsearch != 4) + return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); + + pix1 = pixDeskew(pixs, redsearch); + pix2 = pixRotate90(pix1, 1); + pix3 = pixDeskew(pix2, redsearch); + pix4 = pixRotate90(pix3, -1); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + return pix4; +} + + +/*! + * \brief pixDeskew() + * + * \param[in] pixs any depth + * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; + * use 0 for default + * \return pixd deskewed pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This binarizes if necessary and finds the skew angle.  If the
+ *          angle is large enough and there is sufficient confidence,
+ *          it returns a deskewed image; otherwise, it returns a clone.
+ *      (2) Typical values at 300 ppi for %redsearch are 2 and 4.
+ *          At 75 ppi, one should use %redsearch = 1.
+ * 
+ */ +PIX * +pixDeskew(PIX *pixs, + l_int32 redsearch) +{ + PROCNAME("pixDeskew"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (redsearch == 0) + redsearch = DefaultBsReduction; + else if (redsearch != 1 && redsearch != 2 && redsearch != 4) + return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); + + return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, NULL, NULL); +} + + +/*! + * \brief pixFindSkewAndDeskew() + * + * \param[in] pixs any depth + * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; + * use 0 for default + * \param[out] pangle [optional] angle required to deskew, + * in degrees; use NULL to skip + * \param[out] pconf [optional] conf value is ratio + * of max/min scores; use NULL to skip + * \return pixd deskewed pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This binarizes if necessary and finds the skew angle.  If the
+ *          angle is large enough and there is sufficient confidence,
+ *          it returns a deskewed image; otherwise, it returns a clone.
+ * 
+ */ +PIX * +pixFindSkewAndDeskew(PIX *pixs, + l_int32 redsearch, + l_float32 *pangle, + l_float32 *pconf) +{ + PROCNAME("pixFindSkewAndDeskew"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (redsearch == 0) + redsearch = DefaultBsReduction; + else if (redsearch != 1 && redsearch != 2 && redsearch != 4) + return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); + + return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, pangle, pconf); +} + + +/*! + * \brief pixDeskewGeneral() + * + * \param[in] pixs any depth + * \param[in] redsweep for linear search: reduction factor = 1, 2 or 4; + * use 0 for default + * \param[in] sweeprange in degrees in each direction from 0; + * use 0.0 for default + * \param[in] sweepdelta in degrees; use 0.0 for default + * \param[in] redsearch for binary search: reduction factor = 1, 2 or 4; + * use 0 for default; + * \param[in] thresh for binarizing the image; use 0 for default + * \param[out] pangle [optional] angle required to deskew, + * in degrees; use NULL to skip + * \param[out] pconf [optional] conf value is ratio + * of max/min scores; use NULL to skip + * \return pixd deskewed pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This binarizes if necessary and finds the skew angle.  If the
+ *          angle is large enough and there is sufficient confidence,
+ *          it returns a deskewed image; otherwise, it returns a clone.
+ * 
+ */ +PIX * +pixDeskewGeneral(PIX *pixs, + l_int32 redsweep, + l_float32 sweeprange, + l_float32 sweepdelta, + l_int32 redsearch, + l_int32 thresh, + l_float32 *pangle, + l_float32 *pconf) +{ +l_int32 ret, depth; +l_float32 angle, conf, deg2rad; +PIX *pixb, *pixd; + + PROCNAME("pixDeskewGeneral"); + + if (pangle) *pangle = 0.0; + if (pconf) *pconf = 0.0; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (redsweep == 0) + redsweep = DefaultSweepReduction; + else if (redsweep != 1 && redsweep != 2 && redsweep != 4) + return (PIX *)ERROR_PTR("redsweep not in {1,2,4}", procName, NULL); + if (sweeprange == 0.0) + sweeprange = DefaultSweepRange; + if (sweepdelta == 0.0) + sweepdelta = DefaultSweepDelta; + if (redsearch == 0) + redsearch = DefaultBsReduction; + else if (redsearch != 1 && redsearch != 2 && redsearch != 4) + return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); + if (thresh == 0) + thresh = DefaultBinaryThreshold; + + deg2rad = 3.1415926535 / 180.; + + /* Binarize if necessary */ + depth = pixGetDepth(pixs); + if (depth == 1) + pixb = pixClone(pixs); + else + pixb = pixConvertTo1(pixs, thresh); + + /* Use the 1 bpp image to find the skew */ + ret = pixFindSkewSweepAndSearch(pixb, &angle, &conf, redsweep, redsearch, + sweeprange, sweepdelta, + DefaultMinbsDelta); + pixDestroy(&pixb); + if (pangle) *pangle = angle; + if (pconf) *pconf = conf; + if (ret) + return pixClone(pixs); + + if (L_ABS(angle) < MinDeskewAngle || conf < MinAllowedConfidence) + return pixClone(pixs); + + if ((pixd = pixRotate(pixs, deg2rad * angle, L_ROTATE_AREA_MAP, + L_BRING_IN_WHITE, 0, 0)) == NULL) + return pixClone(pixs); + else + return pixd; +} + + +/*-----------------------------------------------------------------------* + * Simple top-level angle-finding interface * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixFindSkew() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew, in degrees + * \param[out] pconf confidence value is ratio max/min scores + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) This is a simple high-level interface, that uses default
+ *          values of the parameters for reasonable speed and accuracy.
+ *      (2) The angle returned is the negative of the skew angle of
+ *          the image.  It is the angle required for deskew.
+ *          Clockwise rotations are positive angles.
+ * 
+ */ +l_ok +pixFindSkew(PIX *pixs, + l_float32 *pangle, + l_float32 *pconf) +{ + PROCNAME("pixFindSkew"); + + if (pangle) *pangle = 0.0; + if (pconf) *pconf = 0.0; + if (!pangle || !pconf) + return ERROR_INT("&angle and/or &conf not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not 1 bpp", procName, 1); + + return pixFindSkewSweepAndSearch(pixs, pangle, pconf, + DefaultSweepReduction, + DefaultBsReduction, + DefaultSweepRange, + DefaultSweepDelta, + DefaultMinbsDelta); +} + + +/*-----------------------------------------------------------------------* + * Basic angle-finding functions * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixFindSkewSweep() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew, in degrees + * \param[in] reduction factor = 1, 2, 4 or 8 + * \param[in] sweeprange half the full range; assumed about 0; in degrees + * \param[in] sweepdelta angle increment of sweep; in degrees + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) This examines the 'score' for skew angles with equal intervals.
+ *      (2) Caller must check the return value for validity of the result.
+ * 
+ */ +l_ok +pixFindSkewSweep(PIX *pixs, + l_float32 *pangle, + l_int32 reduction, + l_float32 sweeprange, + l_float32 sweepdelta) +{ +l_int32 ret, bzero, i, nangles; +l_float32 deg2rad, theta; +l_float32 sum, maxscore, maxangle; +NUMA *natheta, *nascore; +PIX *pix, *pixt; + + PROCNAME("pixFindSkewSweep"); + + if (!pangle) + return ERROR_INT("&angle not defined", procName, 1); + *pangle = 0.0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not 1 bpp", procName, 1); + if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) + return ERROR_INT("reduction must be in {1,2,4,8}", procName, 1); + + deg2rad = 3.1415926535 / 180.; + ret = 0; + + /* Generate reduced image, if requested */ + if (reduction == 1) + pix = pixClone(pixs); + else if (reduction == 2) + pix = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); + else if (reduction == 4) + pix = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); + else /* reduction == 8 */ + pix = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); + + pixZero(pix, &bzero); + if (bzero) { + pixDestroy(&pix); + return 1; + } + + nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); + natheta = numaCreate(nangles); + nascore = numaCreate(nangles); + pixt = pixCreateTemplate(pix); + + if (!pix || !pixt) { + ret = ERROR_INT("pix and pixt not both made", procName, 1); + goto cleanup; + } + if (!natheta || !nascore) { + ret = ERROR_INT("natheta and nascore not both made", procName, 1); + goto cleanup; + } + + for (i = 0; i < nangles; i++) { + theta = -sweeprange + i * sweepdelta; /* degrees */ + + /* Shear pix about the UL corner and put the result in pixt */ + pixVShearCorner(pixt, pix, deg2rad * theta, L_BRING_IN_WHITE); + + /* Get score */ + pixFindDifferentialSquareSum(pixt, &sum); + +#if DEBUG_PRINT_SCORES + L_INFO("sum(%7.2f) = %7.0f\n", procName, theta, sum); +#endif /* DEBUG_PRINT_SCORES */ + + /* Save the result in the output arrays */ + numaAddNumber(nascore, sum); + numaAddNumber(natheta, theta); + } + + /* Find the location of the maximum (i.e., the skew angle) + * by fitting the largest data point and its two neighbors + * to a quadratic, using lagrangian interpolation. */ + numaFitMax(nascore, &maxscore, natheta, &maxangle); + *pangle = maxangle; + +#if DEBUG_PRINT_SWEEP + L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", procName, + maxangle, maxscore); +#endif /* DEBUG_PRINT_SWEEP */ + +#if DEBUG_PLOT_SCORES + /* Plot the result -- the scores versus rotation angle -- + * using gnuplot with GPLOT_LINES (lines connecting data points). + * The GPLOT data structure is first created, with the + * appropriate data incorporated from the two input NUMAs, + * and then the function gplotMakeOutput() uses gnuplot to + * generate the output plot. This can be either a .png file + * or a .ps file, depending on whether you use GPLOT_PNG + * or GPLOT_PS. */ + {GPLOT *gplot; + gplot = gplotCreate("sweep_output", GPLOT_PNG, + "Sweep. Variance of difference of ON pixels vs. angle", + "angle (deg)", "score"); + gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); + gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } +#endif /* DEBUG_PLOT_SCORES */ + +cleanup: + pixDestroy(&pix); + pixDestroy(&pixt); + numaDestroy(&nascore); + numaDestroy(&natheta); + return ret; +} + + +/*! + * \brief pixFindSkewSweepAndSearch() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew; in degrees + * \param[out] pconf confidence given by ratio of max/min score + * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 + * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; + * and must not exceed redsweep + * \param[in] sweeprange half the full range, assumed about 0; in degrees + * \param[in] sweepdelta angle increment of sweep; in degrees + * \param[in] minbsdelta min binary search increment angle; in degrees + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) This finds the skew angle, doing first a sweep through a set
+ *          of equal angles, and then doing a binary search until
+ *          convergence.
+ *      (2) Caller must check the return value for validity of the result.
+ *      (3) In computing the differential line sum variance score, we sum
+ *          the result over scanlines, but we always skip:
+ *           ~ at least one scanline
+ *           ~ not more than 10% of the image height
+ *           ~ not more than 5% of the image width
+ *      (4) See also notes in pixFindSkewSweepAndSearchScore()
+ * 
+ */ +l_ok +pixFindSkewSweepAndSearch(PIX *pixs, + l_float32 *pangle, + l_float32 *pconf, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta) +{ + return pixFindSkewSweepAndSearchScore(pixs, pangle, pconf, NULL, + redsweep, redsearch, 0.0, sweeprange, + sweepdelta, minbsdelta); +} + + +/*! + * \brief pixFindSkewSweepAndSearchScore() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew; in degrees + * \param[out] pconf confidence given by ratio of max/min score + * \param[out] pendscore [optional] max score; use NULL to ignore + * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 + * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; + * and must not exceed redsweep + * \param[in] sweepcenter angle about which sweep is performed; in degrees + * \param[in] sweeprange half the full range, taken about sweepcenter; + * in degrees + * \param[in] sweepdelta angle increment of sweep; in degrees + * \param[in] minbsdelta min binary search increment angle; in degrees + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) This finds the skew angle, doing first a sweep through a set
+ *          of equal angles, and then doing a binary search until convergence.
+ *      (2) There are two built-in constants that determine if the
+ *          returned confidence is nonzero:
+ *            ~ MinValidMaxscore (minimum allowed maxscore)
+ *            ~ MinscoreThreshFactor (determines minimum allowed
+ *                 minscore, by multiplying by (height * width^2)
+ *          If either of these conditions is not satisfied, the returned
+ *          confidence value will be zero.  The maxscore is optionally
+ *          returned in this function to allow evaluation of the
+ *          resulting angle by a method that is independent of the
+ *          returned confidence value.
+ *      (3) The larger the confidence value, the greater the probability
+ *          that the proper alignment is given by the angle that maximizes
+ *          variance.  It should be compared to a threshold, which depends
+ *          on the application.  Values between 3.0 and 6.0 are common.
+ *      (4) By default, the shear is about the UL corner.
+ * 
+ */ +l_ok +pixFindSkewSweepAndSearchScore(PIX *pixs, + l_float32 *pangle, + l_float32 *pconf, + l_float32 *pendscore, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweepcenter, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta) +{ + return pixFindSkewSweepAndSearchScorePivot(pixs, pangle, pconf, pendscore, + redsweep, redsearch, 0.0, + sweeprange, sweepdelta, + minbsdelta, + L_SHEAR_ABOUT_CORNER); +} + + +/*! + * \brief pixFindSkewSweepAndSearchScorePivot() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew; in degrees + * \param[out] pconf confidence given by ratio of max/min score + * \param[out] pendscore [optional] max score; use NULL to ignore + * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 + * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; + * and must not exceed redsweep + * \param[in] sweepcenter angle about which sweep is performed; in degrees + * \param[in] sweeprange half the full range, taken about sweepcenter; + * in degrees + * \param[in] sweepdelta angle increment of sweep; in degrees + * \param[in] minbsdelta min binary search increment angle; in degrees + * \param[in] pivot L_SHEAR_ABOUT_CORNER, L_SHEAR_ABOUT_CENTER + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) See notes in pixFindSkewSweepAndSearchScore().
+ *      (2) This allows choice of shear pivoting from either the UL corner
+ *          or the center.  For small angles, the ability to discriminate
+ *          angles is better with shearing from the UL corner.  However,
+ *          for large angles (say, greater than 20 degrees), it is better
+ *          to shear about the center because a shear from the UL corner
+ *          loses too much of the image.
+ * 
+ */ +l_ok +pixFindSkewSweepAndSearchScorePivot(PIX *pixs, + l_float32 *pangle, + l_float32 *pconf, + l_float32 *pendscore, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweepcenter, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta, + l_int32 pivot) +{ +l_int32 ret, bzero, i, nangles, n, ratio, maxindex, minloc; +l_int32 width, height; +l_float32 deg2rad, theta, delta; +l_float32 sum, maxscore, maxangle; +l_float32 centerangle, leftcenterangle, rightcenterangle; +l_float32 lefttemp, righttemp; +l_float32 bsearchscore[5]; +l_float32 minscore, minthresh; +l_float32 rangeleft; +NUMA *natheta, *nascore; +PIX *pixsw, *pixsch, *pixt1, *pixt2; + + PROCNAME("pixFindSkewSweepAndSearchScorePivot"); + + if (pendscore) *pendscore = 0.0; + if (pangle) *pangle = 0.0; + if (pconf) *pconf = 0.0; + if (!pangle || !pconf) + return ERROR_INT("&angle and/or &conf not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + if (redsweep != 1 && redsweep != 2 && redsweep != 4 && redsweep != 8) + return ERROR_INT("redsweep must be in {1,2,4,8}", procName, 1); + if (redsearch != 1 && redsearch != 2 && redsearch != 4 && redsearch != 8) + return ERROR_INT("redsearch must be in {1,2,4,8}", procName, 1); + if (redsearch > redsweep) + return ERROR_INT("redsearch must not exceed redsweep", procName, 1); + if (pivot != L_SHEAR_ABOUT_CORNER && pivot != L_SHEAR_ABOUT_CENTER) + return ERROR_INT("invalid pivot", procName, 1); + + deg2rad = 3.1415926535 / 180.; + ret = 0; + + /* Generate reduced image for binary search, if requested */ + if (redsearch == 1) + pixsch = pixClone(pixs); + else if (redsearch == 2) + pixsch = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); + else if (redsearch == 4) + pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); + else /* redsearch == 8 */ + pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); + + pixZero(pixsch, &bzero); + if (bzero) { + pixDestroy(&pixsch); + return 1; + } + + /* Generate reduced image for sweep, if requested */ + ratio = redsweep / redsearch; + if (ratio == 1) { + pixsw = pixClone(pixsch); + } else { /* ratio > 1 */ + if (ratio == 2) + pixsw = pixReduceRankBinaryCascade(pixsch, 1, 0, 0, 0); + else if (ratio == 4) + pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 0, 0); + else /* ratio == 8 */ + pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 2, 0); + } + + pixt1 = pixCreateTemplate(pixsw); + if (ratio == 1) + pixt2 = pixClone(pixt1); + else + pixt2 = pixCreateTemplate(pixsch); + + nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); + natheta = numaCreate(nangles); + nascore = numaCreate(nangles); + + if (!pixsch || !pixsw) { + ret = ERROR_INT("pixsch and pixsw not both made", procName, 1); + goto cleanup; + } + if (!pixt1 || !pixt2) { + ret = ERROR_INT("pixt1 and pixt2 not both made", procName, 1); + goto cleanup; + } + if (!natheta || !nascore) { + ret = ERROR_INT("natheta and nascore not both made", procName, 1); + goto cleanup; + } + + /* Do sweep */ + rangeleft = sweepcenter - sweeprange; + for (i = 0; i < nangles; i++) { + theta = rangeleft + i * sweepdelta; /* degrees */ + + /* Shear pix and put the result in pixt1 */ + if (pivot == L_SHEAR_ABOUT_CORNER) + pixVShearCorner(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); + else + pixVShearCenter(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); + + /* Get score */ + pixFindDifferentialSquareSum(pixt1, &sum); + +#if DEBUG_PRINT_SCORES + L_INFO("sum(%7.2f) = %7.0f\n", procName, theta, sum); +#endif /* DEBUG_PRINT_SCORES */ + + /* Save the result in the output arrays */ + numaAddNumber(nascore, sum); + numaAddNumber(natheta, theta); + } + + /* Find the largest of the set (maxscore at maxangle) */ + numaGetMax(nascore, &maxscore, &maxindex); + numaGetFValue(natheta, maxindex, &maxangle); + +#if DEBUG_PRINT_SWEEP + L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", procName, + maxangle, maxscore); +#endif /* DEBUG_PRINT_SWEEP */ + +#if DEBUG_PLOT_SCORES + /* Plot the sweep result -- the scores versus rotation angle -- + * using gnuplot with GPLOT_LINES (lines connecting data points). */ + {GPLOT *gplot; + gplot = gplotCreate("sweep_output", GPLOT_PNG, + "Sweep. Variance of difference of ON pixels vs. angle", + "angle (deg)", "score"); + gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); + gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } +#endif /* DEBUG_PLOT_SCORES */ + + /* Check if the max is at the end of the sweep. */ + n = numaGetCount(natheta); + if (maxindex == 0 || maxindex == n - 1) { + L_WARNING("max found at sweep edge\n", procName); + goto cleanup; + } + + /* Empty the numas for re-use */ + numaEmpty(nascore); + numaEmpty(natheta); + + /* Do binary search to find skew angle. + * First, set up initial three points. */ + centerangle = maxangle; + if (pivot == L_SHEAR_ABOUT_CORNER) { + pixVShearCorner(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); + pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); + pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); + } else { + pixVShearCenter(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); + pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); + pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); + } + + numaAddNumber(nascore, bsearchscore[2]); + numaAddNumber(natheta, centerangle); + numaAddNumber(nascore, bsearchscore[0]); + numaAddNumber(natheta, centerangle - sweepdelta); + numaAddNumber(nascore, bsearchscore[4]); + numaAddNumber(natheta, centerangle + sweepdelta); + + /* Start the search */ + delta = 0.5 * sweepdelta; + while (delta >= minbsdelta) + { + /* Get the left intermediate score */ + leftcenterangle = centerangle - delta; + if (pivot == L_SHEAR_ABOUT_CORNER) + pixVShearCorner(pixt2, pixsch, deg2rad * leftcenterangle, + L_BRING_IN_WHITE); + else + pixVShearCenter(pixt2, pixsch, deg2rad * leftcenterangle, + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[1]); + numaAddNumber(nascore, bsearchscore[1]); + numaAddNumber(natheta, leftcenterangle); + + /* Get the right intermediate score */ + rightcenterangle = centerangle + delta; + if (pivot == L_SHEAR_ABOUT_CORNER) + pixVShearCorner(pixt2, pixsch, deg2rad * rightcenterangle, + L_BRING_IN_WHITE); + else + pixVShearCenter(pixt2, pixsch, deg2rad * rightcenterangle, + L_BRING_IN_WHITE); + pixFindDifferentialSquareSum(pixt2, &bsearchscore[3]); + numaAddNumber(nascore, bsearchscore[3]); + numaAddNumber(natheta, rightcenterangle); + + /* Find the maximum of the five scores and its location. + * Note that the maximum must be in the center + * three values, not in the end two. */ + maxscore = bsearchscore[1]; + maxindex = 1; + for (i = 2; i < 4; i++) { + if (bsearchscore[i] > maxscore) { + maxscore = bsearchscore[i]; + maxindex = i; + } + } + + /* Set up score array to interpolate for the next iteration */ + lefttemp = bsearchscore[maxindex - 1]; + righttemp = bsearchscore[maxindex + 1]; + bsearchscore[2] = maxscore; + bsearchscore[0] = lefttemp; + bsearchscore[4] = righttemp; + + /* Get new center angle and delta for next iteration */ + centerangle = centerangle + delta * (maxindex - 2); + delta = 0.5 * delta; + } + *pangle = centerangle; + +#if DEBUG_PRINT_SCORES + L_INFO(" Binary search score = %7.3f\n", procName, bsearchscore[2]); +#endif /* DEBUG_PRINT_SCORES */ + + if (pendscore) /* save if requested */ + *pendscore = bsearchscore[2]; + + /* Return the ratio of Max score over Min score + * as a confidence value. Don't trust if the Min score + * is too small, which can happen if the image is all black + * with only a few white pixels interspersed. In that case, + * we get a contribution from the top and bottom edges when + * vertically sheared, but this contribution becomes zero when + * the shear angle is zero. For zero shear angle, the only + * contribution will be from the white pixels. We expect that + * the signal goes as the product of the (height * width^2), + * so we compute a (hopefully) normalized minimum threshold as + * a function of these dimensions. */ + numaGetMin(nascore, &minscore, &minloc); + width = pixGetWidth(pixsch); + height = pixGetHeight(pixsch); + minthresh = MinscoreThreshFactor * width * width * height; + +#if DEBUG_THRESHOLD + L_INFO(" minthresh = %10.2f, minscore = %10.2f\n", procName, + minthresh, minscore); + L_INFO(" maxscore = %10.2f\n", procName, maxscore); +#endif /* DEBUG_THRESHOLD */ + + if (minscore > minthresh) + *pconf = maxscore / minscore; + else + *pconf = 0.0; + + /* Don't trust it if too close to the edge of the sweep + * range or if maxscore is small */ + if ((centerangle > rangeleft + 2 * sweeprange - sweepdelta) || + (centerangle < rangeleft + sweepdelta) || + (maxscore < MinValidMaxscore)) + *pconf = 0.0; + +#if DEBUG_PRINT_BINARY + fprintf(stderr, "Binary search: angle = %7.3f, score ratio = %6.2f\n", + *pangle, *pconf); + fprintf(stderr, " max score = %8.0f\n", maxscore); +#endif /* DEBUG_PRINT_BINARY */ + +#if DEBUG_PLOT_SCORES + /* Plot the result -- the scores versus rotation angle -- + * using gnuplot with GPLOT_POINTS. Because the data + * points are not ordered by theta (increasing or decreasing), + * using GPLOT_LINES would be confusing! */ + {GPLOT *gplot; + gplot = gplotCreate("search_output", GPLOT_PNG, + "Binary search. Variance of difference of ON pixels vs. angle", + "angle (deg)", "score"); + gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot1"); + gplotMakeOutput(gplot); + gplotDestroy(&gplot); + } +#endif /* DEBUG_PLOT_SCORES */ + +cleanup: + pixDestroy(&pixsw); + pixDestroy(&pixsch); + pixDestroy(&pixt1); + pixDestroy(&pixt2); + numaDestroy(&nascore); + numaDestroy(&natheta); + return ret; +} + + +/*---------------------------------------------------------------------* + * Search over arbitrary range of angles in orthogonal directions * + *---------------------------------------------------------------------*/ +/* + * \brief pixFindSkewOrthogonalRange() + * + * \param[in] pixs 1 bpp + * \param[out] pangle angle required to deskew; in degrees cw + * \param[out] pconf confidence given by ratio of max/min score + * \param[in] redsweep sweep reduction factor = 1, 2, 4 or 8 + * \param[in] redsearch binary search reduction factor = 1, 2, 4 or 8; + * and must not exceed redsweep + * \param[in] sweeprange half the full range in each orthogonal + * direction, taken about 0, in degrees + * \param[in] sweepdelta angle increment of sweep; in degrees + * \param[in] minbsdelta min binary search increment angle; in degrees + * \param[in] confprior amount by which confidence of 90 degree rotated + * result is reduced when comparing with unrotated + * confidence value + * \return 0 if OK, 1 on error or if angle measurement not valid + * + *
+ * Notes:
+ *      (1) This searches for the skew angle, first in the range
+ *          [-sweeprange, sweeprange], and then in
+ *          [90 - sweeprange, 90 + sweeprange], with angles measured
+ *          clockwise.  For exploring the full range of possibilities,
+ *          suggest using sweeprange = 47.0 degrees, giving some overlap
+ *          at 45 and 135 degrees.  From these results, and discounting
+ *          the the second confidence by %confprior, it selects the
+ *          angle for maximal differential variance.  If the angle
+ *          is larger than pi/4, the angle found after 90 degree rotation
+ *          is selected.
+ *      (2) The larger the confidence value, the greater the probability
+ *          that the proper alignment is given by the angle that maximizes
+ *          variance.  It should be compared to a threshold, which depends
+ *          on the application.  Values between 3.0 and 6.0 are common.
+ *      (3) Allowing for both portrait and landscape searches is more
+ *          difficult, because if the signal from the text lines is weak,
+ *          a signal from vertical rules can be larger!
+ *          The most difficult documents to deskew have some or all of:
+ *            (a) Multiple columns, not aligned
+ *            (b) Black lines along the vertical edges
+ *            (c) Text from two pages, and at different angles
+ *          Rule of thumb for resolution:
+ *            (a) If the margins are clean, you can work at 75 ppi,
+ *                although 100 ppi is safer.
+ *            (b) If there are vertical lines in the margins, do not
+ *                work below 150 ppi.  The signal from the text lines must
+ *                exceed that from the margin lines.
+ *      (4) Choosing the %confprior parameter depends on knowing something
+ *          about the source of image.  However, we're not using
+ *          real probabilities here, so its use is qualitative.
+ *          If landscape and portrait are equally likely, use
+ *          %confprior = 0.0.  If the likelihood of portrait (non-rotated)
+ *          is 100 times higher than that of landscape, we want to reduce
+ *          the chance that we rotate to landscape in a situation where
+ *          the landscape signal is accidentally larger than the
+ *          portrait signal.  To do this use a positive value of
+ *          %confprior; say 1.5.
+ * 
+ */ +l_int32 +pixFindSkewOrthogonalRange(PIX *pixs, + l_float32 *pangle, + l_float32 *pconf, + l_int32 redsweep, + l_int32 redsearch, + l_float32 sweeprange, + l_float32 sweepdelta, + l_float32 minbsdelta, + l_float32 confprior) +{ +l_float32 angle1, conf1, score1, angle2, conf2, score2; +PIX *pixr; + + PROCNAME("pixFindSkewOrthogonalRange"); + + if (pangle) *pangle = 0.0; + if (pconf) *pconf = 0.0; + if (!pangle || !pconf) + return ERROR_INT("&angle and/or &conf not defined", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + + pixFindSkewSweepAndSearchScorePivot(pixs, &angle1, &conf1, &score1, + redsweep, redsearch, 0.0, + sweeprange, sweepdelta, minbsdelta, + L_SHEAR_ABOUT_CORNER); + pixr = pixRotateOrth(pixs, 1); + pixFindSkewSweepAndSearchScorePivot(pixr, &angle2, &conf2, &score2, + redsweep, redsearch, 0.0, + sweeprange, sweepdelta, minbsdelta, + L_SHEAR_ABOUT_CORNER); + pixDestroy(&pixr); + + if (conf1 > conf2 - confprior) { + *pangle = angle1; + *pconf = conf1; + } else { + *pangle = -90.0 + angle2; + *pconf = conf2; + } + +#if DEBUG_PRINT_ORTH + fprintf(stderr, " About 0: angle1 = %7.3f, conf1 = %7.3f, score1 = %f\n", + angle1, conf1, score1); + fprintf(stderr, " About 90: angle2 = %7.3f, conf2 = %7.3f, score2 = %f\n", + angle2, conf2, score2); + fprintf(stderr, " Final: angle = %7.3f, conf = %7.3f\n", *pangle, *pconf); +#endif /* DEBUG_PRINT_ORTH */ + + return 0; +} + + + +/*----------------------------------------------------------------* + * Differential square sum function * + *----------------------------------------------------------------*/ +/*! + * \brief pixFindDifferentialSquareSum() + * + * \param[in] pixs + * \param[out] psum result + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) At the top and bottom, we skip:
+ *           ~ at least one scanline
+ *           ~ not more than 10% of the image height
+ *           ~ not more than 5% of the image width
+ * 
+ */ +l_ok +pixFindDifferentialSquareSum(PIX *pixs, + l_float32 *psum) +{ +l_int32 i, n; +l_int32 w, h, skiph, skip, nskip; +l_float32 val1, val2, diff, sum; +NUMA *na; + + PROCNAME("pixFindDifferentialSquareSum"); + + if (!psum) + return ERROR_INT("&sum not defined", procName, 1); + *psum = 0.0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + /* Generate a number array consisting of the sum + * of pixels in each row of pixs */ + if ((na = pixCountPixelsByRow(pixs, NULL)) == NULL) + return ERROR_INT("na not made", procName, 1); + + /* Compute the number of rows at top and bottom to omit. + * We omit these to avoid getting a spurious signal from + * the top and bottom of a (nearly) all black image. */ + w = pixGetWidth(pixs); + h = pixGetHeight(pixs); + skiph = (l_int32)(0.05 * w); /* skip for max shear of 0.025 radians */ + skip = L_MIN(h / 10, skiph); /* don't remove more than 10% of image */ + nskip = L_MAX(skip / 2, 1); /* at top & bot; skip at least one line */ + + /* Sum the squares of differential row sums, on the + * allowed rows. Note that nskip must be >= 1. */ + n = numaGetCount(na); + sum = 0.0; + for (i = nskip; i < n - nskip; i++) { + numaGetFValue(na, i - 1, &val1); + numaGetFValue(na, i, &val2); + diff = val2 - val1; + sum += diff * diff; + } + numaDestroy(&na); + *psum = sum; + return 0; +} + + +/*----------------------------------------------------------------* + * Normalized square sum * + *----------------------------------------------------------------*/ +/*! + * \brief pixFindNormalizedSquareSum() + * + * \param[in] pixs + * \param[out] phratio [optional] ratio of normalized horiz square sum + * to result if the pixel distribution were uniform + * \param[out] pvratio [optional] ratio of normalized vert square sum + * to result if the pixel distribution were uniform + * \param[out] pfract [optional] ratio of fg pixels to total pixels + * \return 0 if OK, 1 on error or if there are no fg pixels + * + *
+ * Notes:
+ *      (1) Let the image have h scanlines and N fg pixels.
+ *          If the pixels were uniformly distributed on scanlines,
+ *          the sum of squares of fg pixels on each scanline would be
+ *          h * (N / h)^2.  However, if the pixels are not uniformly
+ *          distributed (e.g., for text), the sum of squares of fg
+ *          pixels will be larger.  We return in hratio and vratio the
+ *          ratio of these two values.
+ *      (2) If there are no fg pixels, hratio and vratio are returned as 0.0.
+ * 
+ */ +l_ok +pixFindNormalizedSquareSum(PIX *pixs, + l_float32 *phratio, + l_float32 *pvratio, + l_float32 *pfract) +{ +l_int32 i, w, h, empty; +l_float32 sum, sumsq, uniform, val; +NUMA *na; +PIX *pixt; + + PROCNAME("pixFindNormalizedSquareSum"); + + if (phratio) *phratio = 0.0; + if (pvratio) *pvratio = 0.0; + if (pfract) *pfract = 0.0; + if (!phratio && !pvratio) + return ERROR_INT("nothing to do", procName, 1); + if (!pixs || pixGetDepth(pixs) != 1) + return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); + pixGetDimensions(pixs, &w, &h, NULL); + + empty = 0; + if (phratio) { + na = pixCountPixelsByRow(pixs, NULL); + numaGetSum(na, &sum); /* fg pixels */ + if (pfract) *pfract = sum / (l_float32)(w * h); + if (sum != 0.0) { + uniform = sum * sum / h; /* h*(sum / h)^2 */ + sumsq = 0.0; + for (i = 0; i < h; i++) { + numaGetFValue(na, i, &val); + sumsq += val * val; + } + *phratio = sumsq / uniform; + } else { + empty = 1; + } + numaDestroy(&na); + } + + if (pvratio) { + if (empty == 1) return 1; + pixt = pixRotateOrth(pixs, 1); + na = pixCountPixelsByRow(pixt, NULL); + numaGetSum(na, &sum); + if (pfract) *pfract = sum / (l_float32)(w * h); + if (sum != 0.0) { + uniform = sum * sum / w; + sumsq = 0.0; + for (i = 0; i < w; i++) { + numaGetFValue(na, i, &val); + sumsq += val * val; + } + *pvratio = sumsq / uniform; + } else { + empty = 1; + } + pixDestroy(&pixt); + numaDestroy(&na); + } + + return empty; +} diff --git a/3rdparty/hgOCR/leptonica/spixio.c b/3rdparty/hgOCR/leptonica/spixio.c new file mode 100644 index 00000000..d1102061 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/spixio.c @@ -0,0 +1,493 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file spixio.c + *
+ *
+ *    This does fast serialization of a pix in memory to file,
+ *    copying the raw data for maximum speed.  The underlying
+ *    function serializes it to memory, and it is wrapped to be
+ *    callable from standard pixRead() and pixWrite() file functions.
+ *
+ *      Reading spix from file
+ *           PIX        *pixReadStreamSpix()
+ *           l_int32     readHeaderSpix()
+ *           l_int32     freadHeaderSpix()
+ *           l_int32     sreadHeaderSpix()
+ *
+ *      Writing spix to file
+ *           l_int32     pixWriteStreamSpix()
+ *
+ *      Low-level serialization of pix to/from memory (uncompressed)
+ *           PIX        *pixReadMemSpix()
+ *           l_int32     pixWriteMemSpix()
+ *           l_int32     pixSerializeToMemory()
+ *           PIX        *pixDeserializeFromMemory()
+ *
+ *    Note: these functions have not been extensively tested for fuzzing
+ *    (bad input data that can result in, e.g., memory faults).
+ *    The spix serialization format is only defined here, in leptonica.
+ *    The image data is uncompressed and the serialization is not intended
+ *    to be a secure file format from untrusted sources.
+ * 
+ */ + +#include +#include "allheaders.h" + + /* Image dimension limits */ +static const l_int32 MaxAllowedWidth = 1000000; +static const l_int32 MaxAllowedHeight = 1000000; +static const l_int64 MaxAllowedArea = 400000000LL; + +#ifndef NO_CONSOLE_IO +#define DEBUG_SERIALIZE 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*-----------------------------------------------------------------------* + * Reading spix from file * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixReadStreamSpix() + * + * \param[in] fp file stream + * \return pix, or NULL on error. + * + *
+ * Notes:
+ *      (1) If called from pixReadStream(), the stream is positioned
+ *          at the beginning of the file.
+ * 
+ */ +PIX * +pixReadStreamSpix(FILE *fp) +{ +size_t nbytes; +l_uint8 *data; +PIX *pix; + + PROCNAME("pixReadStreamSpix"); + + if (!fp) + return (PIX *)ERROR_PTR("stream not defined", procName, NULL); + + if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) + return (PIX *)ERROR_PTR("data not read", procName, NULL); + pix = pixReadMemSpix(data, nbytes); + LEPT_FREE(data); + if (!pix) + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + return pix; +} + + +/*! + * \brief readHeaderSpix() + * + * \param[in] filename + * \param[out] pwidth width + * \param[out] pheight height + * \param[out] pbps bits/sample + * \param[out] pspp samples/pixel + * \param[out] piscmap [optional] input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, iscmap is returned as 1; else 0.
+ * 
+ */ +l_ok +readHeaderSpix(const char *filename, + l_int32 *pwidth, + l_int32 *pheight, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderSpix"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pwidth || !pheight || !pbps || !pspp) + return ERROR_INT("input ptr(s) not defined", procName, 1); + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderSpix(fp, pwidth, pheight, pbps, pspp, piscmap); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderSpix() + * + * \param[in] fp file stream + * \param[out] pwidth width + * \param[out] pheight height + * \param[out] pbps bits/sample + * \param[out] pspp samples/pixel + * \param[out] piscmap [optional] input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, iscmap is returned as 1; else 0.
+ * 
+ */ +l_ok +freadHeaderSpix(FILE *fp, + l_int32 *pwidth, + l_int32 *pheight, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +l_int32 nbytes, ret; +l_uint32 data[6]; + + PROCNAME("freadHeaderSpix"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pwidth || !pheight || !pbps || !pspp) + return ERROR_INT("input ptr(s) not defined", procName, 1); + + nbytes = fnbytesInFile(fp); + if (nbytes < 32) + return ERROR_INT("file too small to be spix", procName, 1); + if (fread(data, 4, 6, fp) != 6) + return ERROR_INT("error reading data", procName, 1); + ret = sreadHeaderSpix(data, pwidth, pheight, pbps, pspp, piscmap); + return ret; +} + + +/*! + * \brief sreadHeaderSpix() + * + * \param[in] data + * \param[out] pwidth width + * \param[out] pheight height + * \param[out] pbps bits/sample + * \param[out] pspp samples/pixel + * \param[out] piscmap [optional] input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, iscmap is returned as 1; else 0.
+ * 
+ */ +l_ok +sreadHeaderSpix(const l_uint32 *data, + l_int32 *pwidth, + l_int32 *pheight, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *piscmap) +{ +char *id; +l_int32 d, ncolors; + + PROCNAME("sreadHeaderSpix"); + + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (!pwidth || !pheight || !pbps || !pspp) + return ERROR_INT("input ptr(s) not defined", procName, 1); + *pwidth = *pheight = *pbps = *pspp = 0; + if (piscmap) + *piscmap = 0; + + /* Check file id */ + id = (char *)data; + if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') + return ERROR_INT("not a valid spix file", procName, 1); + + *pwidth = data[1]; + *pheight = data[2]; + d = data[3]; + if (d <= 16) { + *pbps = d; + *pspp = 1; + } else { + *pbps = 8; + *pspp = d / 8; /* if the pix is 32 bpp, call it 4 samples */ + } + ncolors = data[5]; + if (piscmap) + *piscmap = (ncolors == 0) ? 0 : 1; + + return 0; +} + + +/*-----------------------------------------------------------------------* + * Writing spix to file * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixWriteStreamSpix() + * + * \param[in] fp file stream + * \param[in] pix + * \return 0 if OK; 1 on error + */ +l_ok +pixWriteStreamSpix(FILE *fp, + PIX *pix) +{ +l_uint8 *data; +size_t size; + + PROCNAME("pixWriteStreamSpix"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (pixWriteMemSpix(&data, &size, pix)) + return ERROR_INT("failure to write pix to memory", procName, 1); + fwrite(data, 1, size, fp); + LEPT_FREE(data); + return 0; +} + + +/*-----------------------------------------------------------------------* + * Low-level serialization of pix to/from memory (uncompressed) * + *-----------------------------------------------------------------------*/ +/*! + * \brief pixReadMemSpix() + * + * \param[in] data const; uncompressed + * \param[in] size bytes of data + * \return pix, or NULL on error + */ +PIX * +pixReadMemSpix(const l_uint8 *data, + size_t size) +{ + return pixDeserializeFromMemory((l_uint32 *)data, size); +} + + +/*! + * \brief pixWriteMemSpix() + * + * \param[out] pdata data of serialized, uncompressed pix + * \param[out] psize size of returned data + * \param[in] pix all depths; colormap OK + * \return 0 if OK, 1 on error + */ +l_ok +pixWriteMemSpix(l_uint8 **pdata, + size_t *psize, + PIX *pix) +{ + return pixSerializeToMemory(pix, (l_uint32 **)pdata, psize); +} + + +/*! + * \brief pixSerializeToMemory() + * + * \param[in] pixs all depths, colormap OK + * \param[out] pdata serialized data in memory + * \param[out] pnbytes number of bytes in data string + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This does a fast serialization of the principal elements
+ *          of the pix, as follows:
+ *            "spix"    (4 bytes) -- ID for file type
+ *            w         (4 bytes)
+ *            h         (4 bytes)
+ *            d         (4 bytes)
+ *            wpl       (4 bytes)
+ *            ncolors   (4 bytes) -- in colormap; 0 if there is no colormap
+ *            cdata     (4 * ncolors)  -- size of serialized colormap array
+ *            rdatasize (4 bytes) -- size of serialized raster data
+ *                                   = 4 * wpl * h
+ *            rdata     (rdatasize)
+ * 
+ */ +l_ok +pixSerializeToMemory(PIX *pixs, + l_uint32 **pdata, + size_t *pnbytes) +{ +char *id; +l_int32 w, h, d, wpl, rdatasize, ncolors, nbytes, index; +l_uint8 *cdata; /* data in colormap array (4 bytes/color table entry) */ +l_uint32 *data; +l_uint32 *rdata; /* data in pix raster */ +PIXCMAP *cmap; + + PROCNAME("pixSerializeToMemory"); + + if (!pdata || !pnbytes) + return ERROR_INT("&data and &nbytes not both defined", procName, 1); + *pdata = NULL; + *pnbytes = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pixGetDimensions(pixs, &w, &h, &d); + wpl = pixGetWpl(pixs); + rdata = pixGetData(pixs); + rdatasize = 4 * wpl * h; + ncolors = 0; + cdata = NULL; + if ((cmap = pixGetColormap(pixs)) != NULL) + pixcmapSerializeToMemory(cmap, 4, &ncolors, &cdata); + + nbytes = 24 + 4 * ncolors + 4 + rdatasize; + if ((data = (l_uint32 *)LEPT_CALLOC(nbytes / 4, sizeof(l_uint32))) + == NULL) { + LEPT_FREE(cdata); + return ERROR_INT("data not made", procName, 1); + } + *pdata = data; + *pnbytes = nbytes; + id = (char *)data; + id[0] = 's'; + id[1] = 'p'; + id[2] = 'i'; + id[3] = 'x'; + data[1] = w; + data[2] = h; + data[3] = d; + data[4] = wpl; + data[5] = ncolors; + if (ncolors > 0) + memcpy(data + 6, cdata, 4 * ncolors); + index = 6 + ncolors; + data[index] = rdatasize; + memcpy(data + index + 1, rdata, rdatasize); + +#if DEBUG_SERIALIZE + fprintf(stderr, "Serialize: " + "raster size = %d, ncolors in cmap = %d, total bytes = %d\n", + rdatasize, ncolors, nbytes); +#endif /* DEBUG_SERIALIZE */ + + LEPT_FREE(cdata); + return 0; +} + + +/*! + * \brief pixDeserializeFromMemory() + * + * \param[in] data serialized data in memory + * \param[in] nbytes number of bytes in data string + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixSerializeToMemory() for the binary format.
+ *      (2) Note the image size limits.
+ * 
+ */ +PIX * +pixDeserializeFromMemory(const l_uint32 *data, + size_t nbytes) +{ +char *id; +l_int32 w, h, d, pixdata_size, memdata_size, imdata_size, ncolors; +l_uint32 *imdata; /* data in pix raster */ +PIX *pix1, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixDeserializeFromMemory"); + + if (!data) + return (PIX *)ERROR_PTR("data not defined", procName, NULL); + if (nbytes < 28 || nbytes > ((1LL << 31) - 1)) { + L_ERROR("invalid nbytes = %zu\n", procName, nbytes); + return NULL; + } + + id = (char *)data; + if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') + return (PIX *)ERROR_PTR("invalid id string", procName, NULL); + w = data[1]; + h = data[2]; + d = data[3]; + ncolors = data[5]; + + /* Sanity checks on the amount of image data */ + if (w < 1 || w > MaxAllowedWidth) + return (PIX *)ERROR_PTR("invalid width", procName, NULL); + if (h < 1 || h > MaxAllowedHeight) + return (PIX *)ERROR_PTR("invalid height", procName, NULL); + if (1LL * w * h > MaxAllowedArea) + return (PIX *)ERROR_PTR("area too large", procName, NULL); + if (ncolors < 0 || ncolors > 256 || ncolors + 6 >= nbytes/sizeof(l_int32)) + return (PIX *)ERROR_PTR("invalid ncolors", procName, NULL); + if ((pix1 = pixCreateHeader(w, h, d)) == NULL) /* just make the header */ + return (PIX *)ERROR_PTR("failed to make header", procName, NULL); + pixdata_size = 4 * h * pixGetWpl(pix1); + memdata_size = nbytes - 24 - 4 * ncolors - 4; + imdata_size = data[6 + ncolors]; + pixDestroy(&pix1); + if (pixdata_size != memdata_size || pixdata_size != imdata_size) { + L_ERROR("pixdata_size = %d, memdata_size = %d, imdata_size = %d " + "not all equal!\n", procName, pixdata_size, memdata_size, + imdata_size); + return NULL; + } + + if ((pixd = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + if (ncolors > 0) { + cmap = pixcmapDeserializeFromMemory((l_uint8 *)(&data[6]), 4, ncolors); + if (!cmap) { + pixDestroy(&pixd); + return (PIX *)ERROR_PTR("cmap not made", procName, NULL); + } + pixSetColormap(pixd, cmap); + } + + imdata = pixGetData(pixd); + memcpy(imdata, data + 7 + ncolors, imdata_size); + +#if DEBUG_SERIALIZE + fprintf(stderr, "Deserialize: " + "raster size = %d, ncolors in cmap = %d, total bytes = %zu\n", + imdata_size, ncolors, nbytes); +#endif /* DEBUG_SERIALIZE */ + + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/stack.c b/3rdparty/hgOCR/leptonica/stack.c new file mode 100644 index 00000000..86dc85d0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/stack.c @@ -0,0 +1,289 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file stack.c + *
+ *
+ *      Generic stack
+ *
+ *      The lstack is an array of void * ptrs, onto which
+ *      objects can be stored.  At any time, the number of
+ *      stored objects is lstack->n.  The object at the bottom
+ *      of the lstack is at array[0]; the object at the top of
+ *      the lstack is at array[n-1].  New objects are added
+ *      to the top of the lstack; i.e., the first available
+ *      location, which is at array[n].  The lstack is expanded
+ *      by doubling, when needed.  Objects are removed
+ *      from the top of the lstack.  When an attempt is made
+ *      to remove an object from an empty lstack, the result is null.
+ *
+ *      Create/Destroy
+ *           L_STACK        *lstackCreate()
+ *           void            lstackDestroy()
+ *
+ *      Accessors
+ *           l_int32         lstackAdd()
+ *           void           *lstackRemove()
+ *           static l_int32  lstackExtendArray()
+ *           l_int32         lstackGetCount()
+ *
+ *      Text description
+ *           l_int32         lstackPrint()
+ * 
+ */ + +#include "allheaders.h" + + /* Bounds on initial array size */ +static const l_uint32 MaxPtrArraySize = 100000; +static const l_int32 InitialPtrArraySize = 20; /*!< n'importe quoi */ + + /* Static function */ +static l_int32 lstackExtendArray(L_STACK *lstack); + + +/*---------------------------------------------------------------------* + * Create/Destroy * + *---------------------------------------------------------------------*/ +/*! + * \brief lstackCreate() + * + * \param[in] n initial ptr array size; use 0 for default + * \return lstack, or NULL on error + */ +L_STACK * +lstackCreate(l_int32 n) +{ +L_STACK *lstack; + + PROCNAME("lstackCreate"); + + if (n <= 0 || n > MaxPtrArraySize) + n = InitialPtrArraySize; + + lstack = (L_STACK *)LEPT_CALLOC(1, sizeof(L_STACK)); + lstack->array = (void **)LEPT_CALLOC(n, sizeof(void *)); + if (!lstack->array) { + lstackDestroy(&lstack, FALSE); + return (L_STACK *)ERROR_PTR("lstack array not made", procName, NULL); + } + + lstack->nalloc = n; + lstack->n = 0; + return lstack; +} + + +/*! + * \brief lstackDestroy() + * + * \param[in,out] plstack will be set to null before returning + * \param[in] freeflag TRUE to free each remaining struct in the array + * \return void + * + *
+ * Notes:
+ *      (1) If %freeflag is TRUE, frees each struct in the array.
+ *      (2) If %freeflag is FALSE but there are elements on the array,
+ *          gives a warning and destroys the array.  This will
+ *          cause a memory leak of all the items that were on the lstack.
+ *          So if the items require their own destroy function, they
+ *          must be destroyed before the lstack.
+ *      (3) To destroy the lstack, we destroy the ptr array, then
+ *          the lstack, and then null the contents of the input ptr.
+ * 
+ */ +void +lstackDestroy(L_STACK **plstack, + l_int32 freeflag) +{ +void *item; +L_STACK *lstack; + + PROCNAME("lstackDestroy"); + + if (plstack == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((lstack = *plstack) == NULL) + return; + + if (freeflag) { + while(lstack->n > 0) { + item = lstackRemove(lstack); + LEPT_FREE(item); + } + } else if (lstack->n > 0) { + L_WARNING("memory leak of %d items in lstack\n", procName, lstack->n); + } + + if (lstack->auxstack) + lstackDestroy(&lstack->auxstack, freeflag); + + if (lstack->array) + LEPT_FREE(lstack->array); + LEPT_FREE(lstack); + *plstack = NULL; +} + + + +/*---------------------------------------------------------------------* + * Accessors * + *---------------------------------------------------------------------*/ +/*! + * \brief lstackAdd() + * + * \param[in] lstack + * \param[in] item to be added to the lstack + * \return 0 if OK; 1 on error. + */ +l_ok +lstackAdd(L_STACK *lstack, + void *item) +{ + PROCNAME("lstackAdd"); + + if (!lstack) + return ERROR_INT("lstack not defined", procName, 1); + if (!item) + return ERROR_INT("item not defined", procName, 1); + + /* Do we need to extend the array? */ + if (lstack->n >= lstack->nalloc) + lstackExtendArray(lstack); + + /* Store the new pointer */ + lstack->array[lstack->n] = (void *)item; + lstack->n++; + + return 0; +} + + +/*! + * \brief lstackRemove() + * + * \param[in] lstack + * \return ptr to item popped from the top of the lstack, + * or NULL if the lstack is empty or on error + */ +void * +lstackRemove(L_STACK *lstack) +{ +void *item; + + PROCNAME("lstackRemove"); + + if (!lstack) + return ERROR_PTR("lstack not defined", procName, NULL); + + if (lstack->n == 0) + return NULL; + + lstack->n--; + item = lstack->array[lstack->n]; + + return item; +} + + +/*! + * \brief lstackExtendArray() + * + * \param[in] lstack + * \return 0 if OK; 1 on error + */ +static l_int32 +lstackExtendArray(L_STACK *lstack) +{ + PROCNAME("lstackExtendArray"); + + if (!lstack) + return ERROR_INT("lstack not defined", procName, 1); + + if ((lstack->array = (void **)reallocNew((void **)&lstack->array, + sizeof(void *) * lstack->nalloc, + 2 * sizeof(void *) * lstack->nalloc)) == NULL) + return ERROR_INT("new lstack array not defined", procName, 1); + + lstack->nalloc = 2 * lstack->nalloc; + return 0; +} + + +/*! + * \brief lstackGetCount() + * + * \param[in] lstack + * \return count, or 0 on error + */ +l_int32 +lstackGetCount(L_STACK *lstack) +{ + PROCNAME("lstackGetCount"); + + if (!lstack) + return ERROR_INT("lstack not defined", procName, 1); + + return lstack->n; +} + + + +/*---------------------------------------------------------------------* + * Debug output * + *---------------------------------------------------------------------*/ +/*! + * \brief lstackPrint() + * + * \param[in] fp file stream + * \param[in] lstack + * \return 0 if OK; 1 on error + */ +l_ok +lstackPrint(FILE *fp, + L_STACK *lstack) +{ +l_int32 i; + + PROCNAME("lstackPrint"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!lstack) + return ERROR_INT("lstack not defined", procName, 1); + + fprintf(fp, "\n Stack: nalloc = %d, n = %d, array = %p\n", + lstack->nalloc, lstack->n, lstack->array); + for (i = 0; i < lstack->n; i++) + fprintf(fp, "array[%d] = %p\n", i, lstack->array[i]); + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/stack.h b/3rdparty/hgOCR/leptonica/stack.h new file mode 100644 index 00000000..4fa61141 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/stack.h @@ -0,0 +1,70 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_STACK_H +#define LEPTONICA_STACK_H + +/*! + * \file stack.h + * + *
+ *       Expandable pointer stack for arbitrary void* data.
+ *
+ *       The L_Stack is an array of void * ptrs, onto which arbitrary
+ *       objects can be stored.  At any time, the number of
+ *       stored objects is stack->n.  The object at the bottom
+ *       of the stack is at array[0]; the object at the top of
+ *       the stack is at array[n-1].  New objects are added
+ *       to the top of the stack, at the first available location,
+ *       which is array[n].  Objects are removed from the top of the
+ *       stack.  When an attempt is made to remove an object from an
+ *       empty stack, the result is null.   When the stack becomes
+ *       filled, so that n = nalloc, the size is doubled.
+ *
+ *       The auxiliary stack can be used to store and remove
+ *       objects for re-use.  It must be created by a separate
+ *       call to pstackCreate().  [Just imagine the chaos if
+ *       pstackCreate() created the auxiliary stack!]
+ *       pstackDestroy() checks for the auxiliary stack and removes it.
+ * 
+ */ + + + /*! Expandable pointer stack for arbitrary void* data. + * Note that array[n] is the first null ptr in the array + */ +struct L_Stack +{ + l_int32 nalloc; /*!< size of ptr array */ + l_int32 n; /*!< number of stored elements */ + void **array; /*!< ptr array */ + struct L_Stack *auxstack; /*!< auxiliary stack */ +}; +typedef struct L_Stack L_STACK; + + +#endif /* LEPTONICA_STACK_H */ + diff --git a/3rdparty/hgOCR/leptonica/stringcode.c b/3rdparty/hgOCR/leptonica/stringcode.c new file mode 100644 index 00000000..0e8c6a0f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/stringcode.c @@ -0,0 +1,804 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file stringcode.c + *
+ *
+ *   Generation of code for storing and extracting serializable
+ *   leptonica objects (such as pixa, recog, ...).
+ *
+ *   The input is a set of files with serialized data.
+ *   The output is two files, that must be compiled and linked:
+ *     ~ autogen.*.c: code for base64 unencoding the strings and
+ *                    deserializing the result.
+ *     ~ autogen.*.h: function prototypes and base64 encoded strings
+ *                    of the input data
+ *
+ *   This should work for any data structures in leptonica that have
+ *   *Write() and *Read() serialization functions.  An array of 20
+ *   of these, including the Pix, is given below.  (The Pix is a special
+ *   case, because it is serialized by standardized compression
+ *   techniques, instead of a file format determined by leptonica.)
+ *
+ *   Each time the generator function is invoked, three sets of strings are
+ *   produced, which are written into their respective string arrays:
+ *     ~ string of serialized, gzipped and base 64 encoded data
+ *     ~ case string for base64 decoding, gunzipping and deserialization,
+ *       to return the data struct in memory
+ *     ~ description string for selecting which struct to return
+ *   To create the two output files, a finalize function is invoked.
+ *
+ *   There are two ways to do this, both shown in prog/autogentest1.c.
+ *     ~ Explicitly call strcodeGenerate() for each file with the
+ *       serialized data structure, followed by strcodeFinalize().
+ *     ~ Put the filenames of the serialized data structures in a file,
+ *       and call strcodeCreateFromFile().
+ *
+ *   The generated code in autogen.X.c and autogen.X.h (where X is an
+ *   integer supplied to strcodeCreate()) is then compiled, and the
+ *   original data can be regenerated using the function l_autodecode_X().
+ *   A test example is found in the two prog files:
+ *       prog/autogentest1.c  -- generates autogen.137.c, autogen.137.h
+ *       prog/autogentest2.c  -- uses autogen.137.c, autogen.137.h
+ *   In general, the generator (e.g., autogentest1) would be compiled and
+ *   run before compiling and running the application (e.g., autogentest2).
+ *
+ *       L_STRCODE       *strcodeCreate()
+ *       static void      strcodeDestroy()    (called as part of finalize)
+ *       void             strcodeCreateFromFile()
+ *       l_int32          strcodeGenerate()
+ *       void             strcodeFinalize()
+ *       l_int32          l_getStructStrFromFile()   (useful externally)
+ *
+ *   Static helpers
+ *       static l_int32   l_getIndexFromType()
+ *       static l_int32   l_getIndexFromStructname()
+ *       static l_int32   l_getIndexFromFile()
+ *       static char     *l_genDataString()
+ *       static char     *l_genCaseString()
+ *       static char     *l_genDescrString()
+ * 
+ */ + +#include +#include "allheaders.h" +#include "stringcode.h" + +#define TEMPLATE1 "stringtemplate1.txt" /* for assembling autogen.*.c */ +#define TEMPLATE2 "stringtemplate2.txt" /* for assembling autogen.*.h */ + + /*! Associations between names and functions */ +struct L_GenAssoc +{ + l_int32 index; + char type[16]; /* e.g., "PIXA" */ + char structname[16]; /* e.g., "Pixa" */ + char reader[16]; /* e.g., "pixaRead" */ + char memreader[20]; /* e.g., "pixaReadMem" */ +}; + + /*! Number of serializable data types */ +static const l_int32 l_ntypes = 19; + /*! Serializable data types */ +static const struct L_GenAssoc l_assoc[] = { + {0, "INVALID", "invalid", "invalid", "invalid" }, + {1, "BOXA", "Boxa", "boxaRead", "boxaReadMem" }, + {2, "BOXAA", "Boxaa", "boxaaRead", "boxaaReadMem" }, + {3, "L_DEWARP", "Dewarp", "dewarpRead", "dewarpReadMem" }, + {4, "L_DEWARPA", "Dewarpa", "dewarpaRead", "dewarpaReadMem" }, + {5, "L_DNA", "L_Dna", "l_dnaRead", "l_dnaReadMem" }, + {6, "L_DNAA", "L_Dnaa", "l_dnaaRead", "l_dnaaReadMem" }, + {7, "DPIX", "DPix", "dpixRead", "dpixReadMem" }, + {8, "FPIX", "FPix", "fpixRead", "fpixReadMem" }, + {9, "NUMA", "Numa", "numaRead", "numaReadMem" }, + {10, "NUMAA", "Numaa", "numaaRead", "numaaReadMem" }, + {11, "PIX", "Pix", "pixRead", "pixReadMem" }, + {12, "PIXA", "Pixa", "pixaRead", "pixaReadMem" }, + {13, "PIXAA", "Pixaa", "pixaaRead", "pixaaReadMem" }, + {14, "PIXACOMP", "Pixacomp", "pixacompRead", "pixacompReadMem" }, + {15, "PIXCMAP", "Pixcmap", "pixcmapRead", "pixcmapReadMem" }, + {16, "PTA", "Pta", "ptaRead", "ptaReadMem" }, + {17, "PTAA", "Ptaa", "ptaaRead", "ptaaReadMem" }, + {18, "RECOG", "Recog", "recogRead", "recogReadMem" }, + {19, "SARRAY", "Sarray", "sarrayRead", "sarrayReadMem" } +}; + +static l_int32 l_getIndexFromType(const char *type, l_int32 *pindex); +static l_int32 l_getIndexFromStructname(const char *sn, l_int32 *pindex); +static l_int32 l_getIndexFromFile(const char *file, l_int32 *pindex); +static char *l_genDataString(const char *filein, l_int32 ifunc); +static char *l_genCaseString(l_int32 ifunc, l_int32 itype); +static char *l_genDescrString(const char *filein, l_int32 ifunc, l_int32 itype); + + +/*---------------------------------------------------------------------*/ +/* Stringcode functions */ +/*---------------------------------------------------------------------*/ +/*! + * \brief strcodeCreate() + * + * \param[in] fileno integer that labels the two output files + * \return initialized L_StrCode, or NULL on error + * + *
+ * Notes:
+ *      (1) This struct exists to build two files containing code for
+ *          any number of data objects.  The two files are named
+ *             autogen.[fileno].c
+ *             autogen.[fileno].h
+ * 
+ */ +L_STRCODE * +strcodeCreate(l_int32 fileno) +{ +L_STRCODE *strcode; + + PROCNAME("strcodeCreate"); + + lept_mkdir("lept/auto"); + + if ((strcode = (L_STRCODE *)LEPT_CALLOC(1, sizeof(L_STRCODE))) == NULL) + return (L_STRCODE *)ERROR_PTR("strcode not made", procName, NULL); + + strcode->fileno = fileno; + strcode->function = sarrayCreate(0); + strcode->data = sarrayCreate(0); + strcode->descr = sarrayCreate(0); + return strcode; +} + + +/*! + * \brief strcodeDestroy() + * + * \param[out] pstrcode will be set to null after destroying the sarrays + * \return void + */ +static void +strcodeDestroy(L_STRCODE **pstrcode) +{ +L_STRCODE *strcode; + + PROCNAME("strcodeDestroy"); + + if (pstrcode == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((strcode = *pstrcode) == NULL) + return; + + sarrayDestroy(&strcode->function); + sarrayDestroy(&strcode->data); + sarrayDestroy(&strcode->descr); + LEPT_FREE(strcode); + *pstrcode = NULL; + return; +} + + +/*! + * \brief strcodeCreateFromFile() + * + * \param[in] filein containing filenames of serialized data + * \param[in] fileno integer that labels the two output files + * \param[in] outdir [optional] if null, files are made in /tmp/lept/auto + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The %filein has one filename on each line.
+ *          Comment lines begin with "#".
+ *      (2) The output is 2 files:
+ *             autogen.[fileno].c
+ *             autogen.[fileno].h
+ * 
+ */ +l_ok +strcodeCreateFromFile(const char *filein, + l_int32 fileno, + const char *outdir) +{ +char *fname; +const char *type; +l_uint8 *data; +size_t nbytes; +l_int32 i, n, index; +SARRAY *sa; +L_STRCODE *strcode; + + PROCNAME("strcodeCreateFromFile"); + + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + + if ((data = l_binaryRead(filein, &nbytes)) == NULL) + return ERROR_INT("data not read from file", procName, 1); + sa = sarrayCreateLinesFromString((char *)data, 0); + LEPT_FREE(data); + if (!sa) + return ERROR_INT("sa not made", procName, 1); + if ((n = sarrayGetCount(sa)) == 0) { + sarrayDestroy(&sa); + return ERROR_INT("no filenames in the file", procName, 1); + } + + strcode = strcodeCreate(fileno); + + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + if (fname[0] == '#') continue; + if (l_getIndexFromFile(fname, &index)) { + L_ERROR("File %s has no recognizable type\n", procName, fname); + } else { + type = l_assoc[index].type; + L_INFO("File %s is type %s\n", procName, fname, type); + strcodeGenerate(strcode, fname, type); + } + } + strcodeFinalize(&strcode, outdir); + sarrayDestroy(&sa); + return 0; +} + + +/*! + * \brief strcodeGenerate() + * + * \param[in] strcode for accumulating data + * \param[in] filein input file with serialized data + * \param[in] type of data; use the typedef string + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) The generated function name is
+ *            l_autodecode_[fileno]()
+ *          where [fileno] is the index label for the pair of output files.
+ *      (2) To deserialize this data, the function is called with the
+ *          argument 'ifunc', which increments each time strcodeGenerate()
+ *          is called.
+ * 
+ */ +l_ok +strcodeGenerate(L_STRCODE *strcode, + const char *filein, + const char *type) +{ +char *strdata, *strfunc, *strdescr; +l_int32 itype; + + PROCNAME("strcodeGenerate"); + + if (!strcode) + return ERROR_INT("strcode not defined", procName, 1); + if (!filein) + return ERROR_INT("filein not defined", procName, 1); + if (!type) + return ERROR_INT("type not defined", procName, 1); + + /* Get the index corresponding to type and validate */ + if (l_getIndexFromType(type, &itype) == 1) + return ERROR_INT("data type unknown", procName, 1); + + /* Generate the encoded data string */ + if ((strdata = l_genDataString(filein, strcode->ifunc)) == NULL) + return ERROR_INT("strdata not made", procName, 1); + sarrayAddString(strcode->data, strdata, L_INSERT); + + /* Generate the case data for the decoding function */ + strfunc = l_genCaseString(strcode->ifunc, itype); + sarrayAddString(strcode->function, strfunc, L_INSERT); + + /* Generate row of table for function type selection */ + strdescr = l_genDescrString(filein, strcode->ifunc, itype); + sarrayAddString(strcode->descr, strdescr, L_INSERT); + + strcode->n++; + strcode->ifunc++; + return 0; +} + + +/*! + * \brief strcodeFinalize() + * + * \param[in,out] pstrcode destroys and sets to null after .c and .h files + * have been generated + * \param[in] outdir [optional] if NULL, make files in /tmp/lept/auto + * \return void + */ +l_int32 +strcodeFinalize(L_STRCODE **pstrcode, + const char *outdir) +{ +char buf[256]; +char *filestr, *casestr, *descr, *datastr, *realoutdir; +l_int32 actstart, end, newstart, fileno, nbytes; +size_t size; +L_STRCODE *strcode; +SARRAY *sa1, *sa2, *sa3; + + PROCNAME("strcodeFinalize"); + + lept_mkdir("lept/auto"); + + if (!pstrcode || *pstrcode == NULL) + return ERROR_INT("No input data", procName, 1); + strcode = *pstrcode; + if (!outdir) { + L_INFO("no outdir specified; writing to /tmp/lept/auto\n", procName); + realoutdir = stringNew("/tmp/lept/auto"); + } else { + realoutdir = stringNew(outdir); + } + + /* ------------------------------------------------------- */ + /* Make the output autogen.*.c file */ + /* ------------------------------------------------------- */ + + /* Make array of textlines from TEMPLATE1 */ + filestr = (char *)l_binaryRead(TEMPLATE1, &size); + sa1 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + sa3 = sarrayCreate(0); + + /* Copyright notice */ + sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* File name comment */ + fileno = strcode->fileno; + snprintf(buf, sizeof(buf), " * autogen.%d.c", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* More text */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Description of function types by index */ + descr = sarrayToString(strcode->descr, 1); + descr[strlen(descr) - 1] = '\0'; + sarrayAddString(sa3, descr, L_INSERT); + + /* Includes */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + snprintf(buf, sizeof(buf), "#include \"autogen.%d.h\"", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Header for auto-generated deserializers */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Function name (as comment) */ + snprintf(buf, sizeof(buf), " * \\brief l_autodecode_%d()", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Input and return values */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Function name */ + snprintf(buf, sizeof(buf), "l_autodecode_%d(l_int32 index)", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Stack vars */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Declaration of nfunc on stack */ + snprintf(buf, sizeof(buf), "l_int32 nfunc = %d;\n", strcode->n); + sarrayAddString(sa3, buf, L_COPY); + + /* Declaration of PROCNAME */ + snprintf(buf, sizeof(buf), " PROCNAME(\"l_autodecode_%d\");", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Test input variables */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Insert case string */ + casestr = sarrayToString(strcode->function, 0); + casestr[strlen(casestr) - 1] = '\0'; + sarrayAddString(sa3, casestr, L_INSERT); + + /* End of function */ + sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa1, actstart, end); + + /* Flatten to string and output to autogen*.c file */ + filestr = sarrayToString(sa3, 1); + nbytes = strlen(filestr); + snprintf(buf, sizeof(buf), "%s/autogen.%d.c", realoutdir, fileno); + l_binaryWrite(buf, "w", filestr, nbytes); + LEPT_FREE(filestr); + sarrayDestroy(&sa1); + sarrayDestroy(&sa3); + + /* ------------------------------------------------------- */ + /* Make the output autogen.*.h file */ + /* ------------------------------------------------------- */ + + /* Make array of textlines from TEMPLATE2 */ + filestr = (char *)l_binaryRead(TEMPLATE2, &size); + sa2 = sarrayCreateLinesFromString(filestr, 1); + LEPT_FREE(filestr); + sa3 = sarrayCreate(0); + + /* Copyright notice */ + sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* File name comment */ + snprintf(buf, sizeof(buf), " * autogen.%d.h", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* More text */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Beginning header protection */ + snprintf(buf, sizeof(buf), "#ifndef LEPTONICA_AUTOGEN_%d_H\n" + "#define LEPTONICA_AUTOGEN_%d_H", + fileno, fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Prototype header text */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Prototype declaration */ + snprintf(buf, sizeof(buf), "void *l_autodecode_%d(l_int32 index);", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Prototype trailer text */ + sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); + sarrayAppendRange(sa3, sa2, actstart, end); + + /* Insert serialized data strings */ + datastr = sarrayToString(strcode->data, 1); + datastr[strlen(datastr) - 1] = '\0'; + sarrayAddString(sa3, datastr, L_INSERT); + + /* End header protection */ + snprintf(buf, sizeof(buf), "#endif /* LEPTONICA_AUTOGEN_%d_H */", fileno); + sarrayAddString(sa3, buf, L_COPY); + + /* Flatten to string and output to autogen*.h file */ + filestr = sarrayToString(sa3, 1); + nbytes = strlen(filestr); + snprintf(buf, sizeof(buf), "%s/autogen.%d.h", realoutdir, fileno); + l_binaryWrite(buf, "w", filestr, nbytes); + LEPT_FREE(filestr); + LEPT_FREE(realoutdir); + sarrayDestroy(&sa2); + sarrayDestroy(&sa3); + + /* Cleanup */ + strcodeDestroy(pstrcode); + return 0; +} + + +/*! + * \brief l_getStructStrFromFile() + * + * \param[in] filename + * \param[in] field (L_STR_TYPE, L_STR_NAME, L_STR_READER, L_STR_MEMREADER) + * \param[out] pstr struct string for this file + * \return 0 if found, 1 on error. + * + *
+ * Notes:
+ *      (1) For example, if %field == L_STR_NAME, and the file is a serialized
+ *          pixa, this will return "Pixa", the name of the struct.
+ *      (2) Caller must free the returned string.
+ * 
+ */ +l_int32 +l_getStructStrFromFile(const char *filename, + l_int32 field, + char **pstr) +{ +l_int32 index; + + PROCNAME("l_getStructStrFromFile"); + + if (!pstr) + return ERROR_INT("&str not defined", procName, 1); + *pstr = NULL; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (field != L_STR_TYPE && field != L_STR_NAME && + field != L_STR_READER && field != L_STR_MEMREADER) + return ERROR_INT("invalid field", procName, 1); + + if (l_getIndexFromFile(filename, &index)) + return ERROR_INT("index not retrieved", procName, 1); + if (field == L_STR_TYPE) + *pstr = stringNew(l_assoc[index].type); + else if (field == L_STR_NAME) + *pstr = stringNew(l_assoc[index].structname); + else if (field == L_STR_READER) + *pstr = stringNew(l_assoc[index].reader); + else /* field == L_STR_MEMREADER */ + *pstr = stringNew(l_assoc[index].memreader); + return 0; +} + + +/*---------------------------------------------------------------------*/ +/* Static helpers */ +/*---------------------------------------------------------------------*/ +/*! + * \brief l_getIndexFromType() + * + * \param[in] type e.g., "PIXA" + * \param[out] pindex found index + * \return 0 if found, 1 if not. + * + *
+ * Notes:
+ *      (1) For valid type, %found == true and %index > 0.
+ * 
+ */ +static l_int32 +l_getIndexFromType(const char *type, + l_int32 *pindex) +{ +l_int32 i, found; + + PROCNAME("l_getIndexFromType"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!type) + return ERROR_INT("type string not defined", procName, 1); + + found = 0; + for (i = 1; i <= l_ntypes; i++) { + if (strcmp(type, l_assoc[i].type) == 0) { + found = 1; + *pindex = i; + break; + } + } + return !found; +} + + +/*! + * \brief l_getIndexFromStructname() + * + * \param[in] sn structname e.g., "Pixa" + * \param[out] pindex found index + * \return 0 if found, 1 if not. + * + *
+ * Notes:
+ *      (1) This is used to identify the type of serialized file;
+ *          the first word in the file is the structname.
+ *      (2) For valid structname, %found == true and %index > 0.
+ * 
+ */ +static l_int32 +l_getIndexFromStructname(const char *sn, + l_int32 *pindex) +{ +l_int32 i, found; + + PROCNAME("l_getIndexFromStructname"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!sn) + return ERROR_INT("sn string not defined", procName, 1); + + found = 0; + for (i = 1; i <= l_ntypes; i++) { + if (strcmp(sn, l_assoc[i].structname) == 0) { + found = 1; + *pindex = i; + break; + } + } + return !found; +} + + +/*! + * \brief l_getIndexFromFile() + * + * \param[in] filename + * \param[out] pindex found index + * \return 0 if found, 1 on error. + */ +static l_int32 +l_getIndexFromFile(const char *filename, + l_int32 *pindex) +{ +char buf[256]; +char *word; +FILE *fp; +l_int32 notfound, format; +SARRAY *sa; + + PROCNAME("l_getIndexFromFile"); + + if (!pindex) + return ERROR_INT("&index not defined", procName, 1); + *pindex = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + /* Open the stream, read lines until you find one with more + * than a newline, and grab the first word. */ + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + do { + if ((fgets(buf, sizeof(buf), fp)) == NULL) { + fclose(fp); + return ERROR_INT("fgets read fail", procName, 1); + } + } while (buf[0] == '\n'); + fclose(fp); + sa = sarrayCreateWordsFromString(buf); + word = sarrayGetString(sa, 0, L_NOCOPY); + + /* Find the index associated with the word. If it is not + * found, test to see if the file is a compressed pix. */ + notfound = l_getIndexFromStructname(word, pindex); + sarrayDestroy(&sa); + if (notfound) { /* maybe a Pix */ + if (findFileFormat(filename, &format) == 0) { + l_getIndexFromStructname("Pix", pindex); + } else { + return ERROR_INT("no file type identified", procName, 1); + } + } + + return 0; +} + + +/*! + * \brief l_genDataString() + * + * \param[in] filein input file of serialized data + * \param[in] ifunc index into set of functions in output file + * \return encoded ascii data string, or NULL on error reading from file + */ +static char * +l_genDataString(const char *filein, + l_int32 ifunc) +{ +char buf[80]; +char *cdata1, *cdata2, *cdata3; +l_uint8 *data1, *data2; +l_int32 csize1, csize2; +size_t size1, size2; +SARRAY *sa; + + PROCNAME("l_genDataString"); + + if (!filein) + return (char *)ERROR_PTR("filein not defined", procName, NULL); + + /* Read it in, gzip it, encode, and reformat. We gzip because some + * serialized data has a significant amount of ascii content. */ + if ((data1 = l_binaryRead(filein, &size1)) == NULL) + return (char *)ERROR_PTR("bindata not returned", procName, NULL); + data2 = zlibCompress(data1, size1, &size2); + cdata1 = encodeBase64(data2, size2, &csize1); + cdata2 = reformatPacked64(cdata1, csize1, 4, 72, 1, &csize2); + LEPT_FREE(data1); + LEPT_FREE(data2); + LEPT_FREE(cdata1); + + /* Prepend the string declaration signature and put it together */ + sa = sarrayCreate(3); + snprintf(buf, sizeof(buf), "static const char *l_strdata_%d =\n", ifunc); + sarrayAddString(sa, buf, L_COPY); + sarrayAddString(sa, cdata2, L_INSERT); + sarrayAddString(sa, ";\n", L_COPY); + cdata3 = sarrayToString(sa, 0); + sarrayDestroy(&sa); + return cdata3; +} + + +/*! + * \brief l_genCaseString() + * + * \param[in] ifunc index into set of functions in generated file + * \param[in] itype index into type of function to be used + * \return case string for this decoding function + * + *
+ * Notes:
+ *      (1) %ifunc and %itype have been validated, so no error can occur
+ * 
+ */ +static char * +l_genCaseString(l_int32 ifunc, + l_int32 itype) +{ +char buf[256]; +char *code = NULL; + + snprintf(buf, sizeof(buf), " case %d:\n", ifunc); + stringJoinIP(&code, buf); + snprintf(buf, sizeof(buf), + " data1 = decodeBase64(l_strdata_%d, strlen(l_strdata_%d), " + "&size1);\n", ifunc, ifunc); + stringJoinIP(&code, buf); + stringJoinIP(&code, + " data2 = zlibUncompress(data1, size1, &size2);\n"); + snprintf(buf, sizeof(buf), + " result = (void *)%s(data2, size2);\n", + l_assoc[itype].memreader); + stringJoinIP(&code, buf); + stringJoinIP(&code, " lept_free(data1);\n"); + stringJoinIP(&code, " lept_free(data2);\n"); + stringJoinIP(&code, " break;\n"); + return code; +} + + +/*! + * \brief l_genDescrString() + * + * \param[in] filein input file of serialized data + * \param[in] ifunc index into set of functions in generated file + * \param[in] itype index into type of function to be used + * \return description string for this decoding function + */ +static char * +l_genDescrString(const char *filein, + l_int32 ifunc, + l_int32 itype) +{ +char buf[256]; +char *tail; + + PROCNAME("l_genDescrString"); + + if (!filein) + return (char *)ERROR_PTR("filein not defined", procName, NULL); + + splitPathAtDirectory(filein, NULL, &tail); + snprintf(buf, sizeof(buf), " * %-2d %-10s %-14s %s", + ifunc, l_assoc[itype].type, l_assoc[itype].reader, tail); + + LEPT_FREE(tail); + return stringNew(buf); +} diff --git a/3rdparty/hgOCR/leptonica/stringcode.h b/3rdparty/hgOCR/leptonica/stringcode.h new file mode 100644 index 00000000..4510bdb0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/stringcode.h @@ -0,0 +1,61 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_STRINGCODE_H +#define LEPTONICA_STRINGCODE_H + +/*! + * \file stringcode.h + * + * Data structure to hold accumulating generated code for storing + * and extracting serializable leptonica objects (e.g., pixa, recog). + * + * Also a flag for selecting a string from the L_GenAssoc struct + * in stringcode. + */ + +struct L_StrCode +{ + l_int32 fileno; /*!< index for function and output file names */ + l_int32 ifunc; /*!< index into struct currently being stored */ + SARRAY *function; /*!< store case code for extraction */ + SARRAY *data; /*!< store base64 encoded data as strings */ + SARRAY *descr; /*!< store line in description table */ + l_int32 n; /*!< number of data strings */ +}; +typedef struct L_StrCode L_STRCODE; + + + /*! Select string in stringcode for a specific serializable data type */ +/*! Stringcode Select */ +enum { + L_STR_TYPE = 0, /*!< typedef for the data type */ + L_STR_NAME = 1, /*!< name of the data type */ + L_STR_READER = 2, /*!< reader to get the data type from file */ + L_STR_MEMREADER = 3 /*!< reader to get the compressed string in memory */ +}; + +#endif /* LEPTONICA_STRINGCODE_H */ diff --git a/3rdparty/hgOCR/leptonica/strokes.c b/3rdparty/hgOCR/leptonica/strokes.c new file mode 100644 index 00000000..cf573141 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/strokes.c @@ -0,0 +1,435 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file strokes.c + *
+ *
+ *      Operations on 1 bpp images to:
+ *      (1) measure stroke parameters, such as length and average width
+ *      (2) change the average stroke width to a given value by eroding
+ *          or dilating the image.
+ *
+ *      These operations are intended to operate on a single text
+ *      character, to regularize the stroke width. It is expected
+ *      that character matching by correlation, as used in the recog
+ *      application, can often be improved by pre-processing both
+ *      template and character images to a fixed stroke width.
+ *
+ *      Stroke parameter measurement
+ *            l_int32      pixFindStrokeLength()
+ *            l_int32      pixFindStrokeWidth()
+ *            NUMA        *pixaFindStrokeWidth()
+ *
+ *      Stroke width regulation
+ *            PIXA        *pixaModifyStrokeWidth()
+ *            PIX         *pixModifyStrokeWidth()
+ *            PIXA        *pixaSetStrokeWidth()
+ *            PIX         *pixSetStrokeWidth()
+ * 
+ */ + +#include "allheaders.h" + +/*-----------------------------------------------------------------* + * Stroke parameter measurement * + *-----------------------------------------------------------------*/ +/*! + * \brief pixFindStrokeLength() + * + * \param[in] pixs 1 bpp + * \param[in] tab8 [optional] table for counting fg pixels; can be NULL + * \param[out] plength estimated length of the strokes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Returns half the number of fg boundary pixels.
+ * 
+ */ +l_ok +pixFindStrokeLength(PIX *pixs, + l_int32 *tab8, + l_int32 *plength) +{ +l_int32 n; +l_int32 *tab; +PIX *pix1; + + PROCNAME("pixFindStrokeLength"); + + if (!plength) + return ERROR_INT("&length not defined", procName, 1); + *plength = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pix1 = pixExtractBoundary(pixs, 1); + tab = (tab8) ? tab8 : makePixelSumTab8(); + pixCountPixels(pix1, &n, tab); + *plength = n / 2; + if (!tab8) LEPT_FREE(tab); + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief pixFindStrokeWidth() + * + * \param[in] pixs 1 bpp + * \param[in] thresh fractional count threshold relative to distance 1 + * \param[in] tab8 [optional] table for counting fg pixels; can be NULL + * \param[out] pwidth estimated width of the strokes + * \param[out] pnahisto [optional] histo of pixel distances from bg + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This uses two methods to estimate the stroke width:
+ *          (a) half the fg boundary length
+ *          (b) a value derived from the histogram of the fg distance transform
+ *      (2) Distance is measured in 8-connected
+ *      (3) %thresh is the minimum fraction N(dist=d)/N(dist=1) of pixels
+ *          required to determine if the pixels at distance d are above
+ *          the noise. It is typically about 0.15.
+ * 
+ */ +l_ok +pixFindStrokeWidth(PIX *pixs, + l_float32 thresh, + l_int32 *tab8, + l_float32 *pwidth, + NUMA **pnahisto) +{ +l_int32 i, n, count, length, first, last; +l_int32 *tab; +l_float32 width1, width2, ratio, extra; +l_float32 *fa; +NUMA *na1, *na2; +PIX *pix1; + + PROCNAME("pixFindStrokeWidth"); + + if (!pwidth) + return ERROR_INT("&width not defined", procName, 1); + *pwidth = 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + + /* ------- Method 1: via boundary length ------- */ + /* The computed stroke length is a bit larger than that actual + * length, because of the addition of the 'caps' at the + * stroke ends. Therefore the computed width is a bit + * smaller than the average width. */ + pixFindStrokeLength(pixs, tab8, &length); + pixCountPixels(pixs, &count, tab8); + width1 = (l_float32)count / (l_float32)length; + + /* ------- Method 2: via distance transform ------- */ + /* First get the histogram of distances */ + pix1 = pixDistanceFunction(pixs, 8, 8, L_BOUNDARY_BG); + na1 = pixGetGrayHistogram(pix1, 1); + pixDestroy(&pix1); + numaGetNonzeroRange(na1, 0.1, &first, &last); + na2 = numaClipToInterval(na1, 0, last); + numaWriteStream(stderr, na2); + + /* Find the bucket with the largest distance whose contents + * exceed the threshold. */ + fa = numaGetFArray(na2, L_NOCOPY); + n = numaGetCount(na2); + for (i = n - 1; i > 0; i--) { + ratio = fa[i] / fa[1]; + if (ratio > thresh) break; + } + /* Let the last skipped bucket contribute to the stop bucket. + * This is the 'extra' term below. The result may be a slight + * over-correction, so the computed width may be a bit larger + * than the average width. */ + extra = (i < n - 1) ? fa[i + 1] / fa[1] : 0; + width2 = 2.0 * (i - 1.0 + ratio + extra); + fprintf(stderr, "width1 = %5.2f, width2 = %5.2f\n", width1, width2); + + /* Average the two results */ + *pwidth = (width1 + width2) / 2.0; + + if (!tab8) LEPT_FREE(tab); + numaDestroy(&na1); + if (pnahisto) + *pnahisto = na2; + else + numaDestroy(&na2); + return 0; +} + + +/*! + * \brief pixaFindStrokeWidth() + * + * \param[in] pixa of 1 bpp images + * \param[in] thresh fractional count threshold relative to distance 1 + * \param[in] tab8 [optional] table for counting fg pixels; can be NULL + * \param[in] debug 1 for debug output; 0 to skip + * \return na array of stroke widths for each pix in %pixa; NULL on error + * + *
+ * Notes:
+ *      (1) See pixFindStrokeWidth() for details.
+ * 
+ */ +NUMA * +pixaFindStrokeWidth(PIXA *pixa, + l_float32 thresh, + l_int32 *tab8, + l_int32 debug) +{ +l_int32 i, n, same, maxd; +l_int32 *tab; +l_float32 width; +NUMA *na; +PIX *pix; + + PROCNAME("pixaFindStrokeWidth"); + + if (!pixa) + return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); + pixaVerifyDepth(pixa, &same, &maxd); + if (maxd > 1) + return (NUMA *)ERROR_PTR("pix not all 1 bpp", procName, NULL); + + tab = (tab8) ? tab8 : makePixelSumTab8(); + + n = pixaGetCount(pixa); + na = numaCreate(n); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixFindStrokeWidth(pix, thresh, tab8, &width, NULL); + numaAddNumber(na, width); + pixDestroy(&pix); + } + + if (!tab8) LEPT_FREE(tab); + return na; +} + + +/*-----------------------------------------------------------------* + * Change stroke width * + *-----------------------------------------------------------------*/ +/*! + * \brief pixaModifyStrokeWidth() + * + * \param[in] pixas of 1 bpp pix + * \param[out] targetw desired width for strokes in each pix + * \return pixa with modified stroke widths, or NULL on error + */ +PIXA * +pixaModifyStrokeWidth(PIXA *pixas, + l_float32 targetw) +{ +l_int32 i, n, same, maxd; +l_float32 width; +NUMA *na; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaModifyStrokeWidth"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (targetw < 1) + return (PIXA *)ERROR_PTR("target width < 1", procName, NULL); + pixaVerifyDepth(pixas, &same, &maxd); + if (maxd > 1) + return (PIXA *)ERROR_PTR("pix not all 1 bpp", procName, NULL); + + na = pixaFindStrokeWidth(pixas, 0.1, NULL, 0); + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + numaGetFValue(na, i, &width); + pix2 = pixModifyStrokeWidth(pix1, width, targetw); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + numaDestroy(&na); + return pixad; +} + + +/*! + * \brief pixModifyStrokeWidth() + * + * \param[in] pixs of 1 bpp pix + * \param[in] width measured average stroke width + * \param[in] targetw desired stroke width + * \return pix with modified stroke width, or NULL on error + */ +PIX * +pixModifyStrokeWidth(PIX *pixs, + l_float32 width, + l_float32 targetw) +{ +char buf[32]; +l_int32 diff, size; + + PROCNAME("pixModifyStrokeWidth"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (targetw < 1) + return (PIX *)ERROR_PTR("target width < 1", procName, NULL); + + diff = lept_roundftoi(targetw - width); + if (diff == 0) return pixCopy(NULL, pixs); + + size = L_ABS(diff) + 1; + if (diff < 0) /* erode */ + snprintf(buf, sizeof(buf), "e%d.%d", size, size); + else /* diff > 0; dilate */ + snprintf(buf, sizeof(buf), "d%d.%d", size, size); + return pixMorphSequence(pixs, buf, 0); +} + + +/*! + * \brief pixaSetStrokeWidth() + * + * \param[in] pixas of 1 bpp pix + * \param[in] width set stroke width to this value, in [1 ... 100]. + * \param[in] thinfirst 1 to thin all pix to a skeleton first; 0 to skip + * \param[in] connectivity 4 or 8, to be used if %thinfirst == 1 + * \return pixa with all stroke widths being %width, or NULL on error + * + *
+ * Notes:
+ *      (1) If %thinfirst == 1, thin to a skeleton using the specified
+ *          %connectivity.  Use %thinfirst == 0 if all pix in pixas
+ *          have already been thinned as far as possible.
+ *      (2) The image is dilated to the required %width.  This dilation
+ *          is not connectivity preserving, so this is typically
+ *          used in a situation where merging of c.c. in the individual
+ *          pix is not a problem; e.g., where each pix is a single c.c.
+ * 
+ */ +PIXA * +pixaSetStrokeWidth(PIXA *pixas, + l_int32 width, + l_int32 thinfirst, + l_int32 connectivity) +{ +l_int32 i, n, maxd, same; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaSetStrokeWidth"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (width < 1 || width > 100) + return (PIXA *)ERROR_PTR("width not in [1 ... 100]", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + pixaVerifyDepth(pixas, &same, &maxd); + if (maxd > 1) + return (PIXA *)ERROR_PTR("pix are not all 1 bpp", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + pix2 = pixSetStrokeWidth(pix1, width, thinfirst, connectivity); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + return pixad; +} + + +/*! + * \brief pixSetStrokeWidth() + * + * \param[in] pixs 1 bpp + * \param[in] width set stroke width to this value, in [1 ... 100]. + * \param[in] thinfirst 1 to thin all pix to a skeleton first; 0 to skip + * \param[in] connectivity 4 or 8, to be used if %thinfirst == 1 + * \return pixd with stroke width set to %width, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes in pixaSetStrokeWidth().
+ *      (2) A white border of sufficient width to avoid boundary
+ *          artifacts in the thickening step is added before thinning.
+ *      (3) %connectivity == 8 usually gives a slightly smoother result.
+ * 
+ */ +PIX * +pixSetStrokeWidth(PIX *pixs, + l_int32 width, + l_int32 thinfirst, + l_int32 connectivity) +{ +char buf[16]; +l_int32 border; +PIX *pix1, *pix2, *pixd; + + PROCNAME("pixSetStrokeWidth"); + + if (!pixs || (pixGetDepth(pixs) != 1)) + return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); + if (width < 1 || width > 100) + return (PIX *)ERROR_PTR("width not in [1 ... 100]", procName, NULL); + if (connectivity != 4 && connectivity != 8) + return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); + + if (!thinfirst && width == 1) /* nothing to do */ + return pixCopy(NULL, pixs); + + /* Add a white border */ + border = width / 2; + pix1 = pixAddBorder(pixs, border, 0); + + /* Thin to a skeleton */ + if (thinfirst) + pix2 = pixThinConnected(pix1, L_THIN_FG, connectivity, 0); + else + pix2 = pixClone(pix1); + pixDestroy(&pix1); + + /* Dilate */ + snprintf(buf, sizeof(buf), "D%d.%d", width, width); + pixd = pixMorphSequence(pix2, buf, 0); + pixCopyText(pixd, pixs); + pixDestroy(&pix2); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/sudoku.c b/3rdparty/hgOCR/leptonica/sudoku.c new file mode 100644 index 00000000..9bc12008 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sudoku.c @@ -0,0 +1,881 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file sudoku.c + *
+ *
+ *      Solve a sudoku by brute force search
+ *
+ *      Read input data from file or string
+ *          l_int32         *sudokuReadFile()
+ *          l_int32         *sudokuReadString()
+ *
+ *      Create/destroy
+ *          L_SUDOKU        *sudokuCreate()
+ *          void             sudokuDestroy()
+ *
+ *      Solve the puzzle
+ *          l_int32          sudokuSolve()
+ *          static l_int32   sudokuValidState()
+ *          static l_int32   sudokuNewGuess()
+ *          static l_int32   sudokuTestState()
+ *
+ *      Test for uniqueness
+ *          l_int32          sudokuTestUniqueness()
+ *          static l_int32   sudokuCompareState()
+ *          static l_int32  *sudokuRotateArray()
+ *
+ *      Generation
+ *          L_SUDOKU        *sudokuGenerate()
+ *
+ *      Output
+ *          l_int32          sudokuOutput()
+ *
+ *  Solving sudokus is a somewhat addictive pastime.  The rules are
+ *  simple but it takes just enough concentration to make it rewarding
+ *  when you find a number.  And you get 50 to 60 such rewards each time
+ *  you complete one.  The downside is that you could have been doing
+ *  something more creative, like keying out a new plant, staining
+ *  the deck, or even writing a computer program to discourage your
+ *  wife from doing sudokus.
+ *
+ *  My original plan for the sudoku solver was somewhat grandiose.
+ *  The program would model the way a person solves the problem.
+ *  It would examine each empty position and determine how many possible
+ *  numbers could fit.  The empty positions would be entered in a priority
+ *  queue keyed on the number of possible numbers that could fit.
+ *  If there existed a position where only a single number would work,
+ *  it would greedily take it.  Otherwise it would consider a
+ *  positions that could accept two and make a guess, with backtracking
+ *  if an impossible state were reached.  And so on.
+ *
+ *  Then one of my colleagues announced she had solved the problem
+ *  by brute force and it was fast.  At that point the original plan was
+ *  dead in the water, because the two top requirements for a leptonica
+ *  algorithm are (1) as simple as possible and (2) fast.  The brute
+ *  force approach starts at the UL corner, and in succession at each
+ *  blank position it finds the first valid number (testing in
+ *  sequence from 1 to 9).  When no number will fit a blank position
+ *  it backtracks, choosing the next valid number in the previous
+ *  blank position.
+ *
+ *  This is an inefficient method for pruning the space of solutions
+ *  (imagine backtracking from the LR corner back to the UL corner
+ *  and starting over with a new guess), but it nevertheless gets
+ *  the job done quickly.  I have made no effort to optimize
+ *  it, because it is fast: a 5-star (highest difficulty) sudoku might
+ *  require a million guesses and take 0.05 sec.  (This BF implementation
+ *  does about 20M guesses/sec at 3 GHz.)
+ *
+ *  Proving uniqueness of a sudoku solution is tricker than finding
+ *  a solution (or showing that no solution exists).  A good indication
+ *  that a solution is unique is if we get the same result solving
+ *  by brute force when the puzzle is also rotated by 90, 180 and 270
+ *  degrees.  If there are multiple solutions, it seems unlikely
+ *  that you would get the same solution four times in a row, using a
+ *  brute force method that increments guesses and scans LR/TB.
+ *  The function sudokuTestUniqueness() does this.
+ *
+ *  And given a function that can determine uniqueness, it is
+ *  easy to generate valid sudokus.  We provide sudokuGenerate(),
+ *  which starts with some valid initial solution, and randomly
+ *  removes numbers, stopping either when a minimum number of non-zero
+ *  elements are left, or when it becomes difficult to remove another
+ *  element without destroying the uniqueness of the solution.
+ *
+ *  For further reading, see the Wikipedia articles:
+ *     (1) http://en.wikipedia.org/wiki/Algorithmics_of_sudoku
+ *     (2) http://en.wikipedia.org/wiki/Sudoku
+ *
+ *  How many 9x9 sudokus are there?  Here are the numbers.
+ *   ~ From ref(1), there are about 6 x 10^27 "latin squares", where
+ *     each row and column has all 9 digits.
+ *   ~ There are 7.2 x 10^21 actual solutions, having the added
+ *     constraint in each of the 9 3x3 squares.  (The constraint
+ *     reduced the number by the fraction 1.2 x 10^(-6).)
+ *   ~ There are a mere 5.5 billion essentially different solutions (EDS),
+ *     when symmetries (rotation, reflection, permutation and relabelling)
+ *     are removed.
+ *   ~ Thus there are 1.3 x 10^12 solutions that can be derived by
+ *     symmetry from each EDS.  Can we account for these?
+ *   ~ Sort-of.  From an EDS, you can derive (3!)^8 = 1.7 million solutions
+ *     by simply permuting rows and columns.  (Do you see why it is
+ *     not (3!)^6 ?)
+ *   ~ Also from an EDS, you can derive 9! solutions by relabelling,
+ *     and 4 solutions by rotation, for a total of 1.45 million solutions
+ *     by relabelling and rotation.  Then taking the product, by symmetry
+ *     we can derive 1.7M x 1.45M = 2.45 trillion solutions from each EDS.
+ *     (Something is off by about a factor of 2 -- close enough.)
+ *
+ *  Another interesting fact is that there are apparently 48K EDS sudokus
+ *  (with unique solutions) that have only 17 givens.  No sudokus are known
+ *  with less than 17, but there exists no proof that this is the minimum.
+ * 
+ */ + +#include "allheaders.h" + + +static l_int32 sudokuValidState(l_int32 *state); +static l_int32 sudokuNewGuess(L_SUDOKU *sud); +static l_int32 sudokuTestState(l_int32 *state, l_int32 index); +static l_int32 sudokuCompareState(L_SUDOKU *sud1, L_SUDOKU *sud2, + l_int32 quads, l_int32 *psame); +static l_int32 *sudokuRotateArray(l_int32 *array, l_int32 quads); + +/* --------------------------------------------------------------- */ +/* An example of a valid solution */ +/* --------------------------------------------------------------- * +static const char valid_solution[] = "3 8 7 2 6 4 1 9 5 " + "2 6 5 8 9 1 4 3 7 " + "1 4 9 5 3 7 6 8 2 " + "5 2 3 7 1 6 8 4 9 " + "7 1 6 9 4 8 2 5 3 " + "8 9 4 3 5 2 7 1 6 " + "9 7 2 1 8 5 3 6 4 " + "4 3 1 6 7 9 5 2 8 " + "6 5 8 4 2 3 9 7 1 "; +*/ + + +/*---------------------------------------------------------------------* + * Read input data from file or string * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuReadFile() + * + * \param[in] filename formatted sudoku file + * \return array of 81 numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) The file format has:
+ *          * any number of comment lines beginning with '#'
+ *          * a set of 9 lines, each having 9 digits (0-9) separated
+ *            by a space
+ * 
+ */ +l_int32 * +sudokuReadFile(const char *filename) +{ +char *str, *strj; +l_uint8 *data; +l_int32 i, j, nlines, val, index, error; +l_int32 *array; +size_t size; +SARRAY *saline, *sa1, *sa2; + + PROCNAME("sudokuReadFile"); + + if (!filename) + return (l_int32 *)ERROR_PTR("filename not defined", procName, NULL); + data = l_binaryRead(filename, &size); + sa1 = sarrayCreateLinesFromString((char *)data, 0); + sa2 = sarrayCreate(9); + + /* Filter out the comment lines; verify that there are 9 data lines */ + nlines = sarrayGetCount(sa1); + for (i = 0; i < nlines; i++) { + str = sarrayGetString(sa1, i, L_NOCOPY); + if (str[0] != '#') + sarrayAddString(sa2, str, L_COPY); + } + LEPT_FREE(data); + sarrayDestroy(&sa1); + nlines = sarrayGetCount(sa2); + if (nlines != 9) { + sarrayDestroy(&sa2); + L_ERROR("file has %d lines\n", procName, nlines); + return (l_int32 *)ERROR_PTR("invalid file", procName, NULL); + } + + /* Read the data into the array, verifying that each data + * line has 9 numbers. */ + error = FALSE; + array = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + for (i = 0, index = 0; i < 9; i++) { + str = sarrayGetString(sa2, i, L_NOCOPY); + saline = sarrayCreateWordsFromString(str); + if (sarrayGetCount(saline) != 9) { + error = TRUE; + sarrayDestroy(&saline); + break; + } + for (j = 0; j < 9; j++) { + strj = sarrayGetString(saline, j, L_NOCOPY); + if (sscanf(strj, "%d", &val) != 1) + error = TRUE; + else + array[index++] = val; + } + sarrayDestroy(&saline); + if (error) break; + } + sarrayDestroy(&sa2); + + if (error) { + LEPT_FREE(array); + return (l_int32 *)ERROR_PTR("invalid data", procName, NULL); + } + + return array; +} + + +/*! + * \brief sudokuReadString() + * + * \param[in] str formatted input data + * \return array of 81 numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) The string is formatted as 81 single digits, each separated
+ *          by 81 spaces.
+ * 
+ */ +l_int32 * +sudokuReadString(const char *str) +{ +l_int32 i; +l_int32 *array; + + PROCNAME("sudokuReadString"); + + if (!str) + return (l_int32 *)ERROR_PTR("str not defined", procName, NULL); + + /* Read in the initial solution */ + array = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + for (i = 0; i < 81; i++) { + if (sscanf(str + 2 * i, "%d ", &array[i]) != 1) { + LEPT_FREE(array); + return (l_int32 *)ERROR_PTR("invalid format", procName, NULL); + } + } + + return array; +} + + +/*---------------------------------------------------------------------* + * Create/destroy sudoku * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuCreate() + * + * \param[in] array 81 numbers, 9 rows of 9 numbers each + * \return l_sudoku, or NULL on error + * + *
+ * Notes:
+ *      (1) The input array has 0 for the unknown values, and 1-9
+ *          for the known initial values.  It is generated from
+ *          a file using sudokuReadInput(), which checks that the file
+ *          data has 81 numbers in 9 rows.
+ * 
+ */ +L_SUDOKU * +sudokuCreate(l_int32 *array) +{ +l_int32 i, val, locs_index; +L_SUDOKU *sud; + + PROCNAME("sudokuCreate"); + + if (!array) + return (L_SUDOKU *)ERROR_PTR("array not defined", procName, NULL); + + locs_index = 0; /* into locs array */ + sud = (L_SUDOKU *)LEPT_CALLOC(1, sizeof(L_SUDOKU)); + sud->locs = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + sud->init = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + sud->state = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + for (i = 0; i < 81; i++) { + val = array[i]; + sud->init[i] = val; + sud->state[i] = val; + if (val == 0) + sud->locs[locs_index++] = i; + } + sud->num = locs_index; + sud->failure = FALSE; + sud->finished = FALSE; + return sud; +} + + +/*! + * \brief sudokuDestroy() + * + * \param[in,out] psud will be set to null before returning + * \return void + */ +void +sudokuDestroy(L_SUDOKU **psud) +{ +L_SUDOKU *sud; + + PROCNAME("sudokuDestroy"); + + if (psud == NULL) { + L_WARNING("ptr address is NULL\n", procName); + return; + } + if ((sud = *psud) == NULL) + return; + + LEPT_FREE(sud->locs); + LEPT_FREE(sud->init); + LEPT_FREE(sud->state); + LEPT_FREE(sud); + + *psud = NULL; + return; +} + + +/*---------------------------------------------------------------------* + * Solve the puzzle * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuSolve() + * + * \param[in] sud l_sudoku starting in initial state + * \return 1 on success, 0 on failure to solve note reversal of + * typical unix returns + */ +l_int32 +sudokuSolve(L_SUDOKU *sud) +{ + PROCNAME("sudokuSolve"); + + if (!sud) + return ERROR_INT("sud not defined", procName, 0); + + if (!sudokuValidState(sud->init)) + return ERROR_INT("initial state not valid", procName, 0); + + while (1) { + if (sudokuNewGuess(sud)) + break; + if (sud->finished == TRUE) + break; + } + + if (sud->failure == TRUE) { + fprintf(stderr, "Failure after %d guesses\n", sud->nguess); + return 0; + } + + fprintf(stderr, "Solved after %d guesses\n", sud->nguess); + return 1; +} + + +/*! + * \brief sudokuValidState() + * + * \param[in] state array of size 81 + * \return 1 if valid, 0 if invalid + * + *
+ * Notes:
+ *      (1) This can be used on either the initial state (init)
+ *          or on the current state (state) of the l_soduku.
+ *          All values of 0 are ignored.
+ * 
+ */ +static l_int32 +sudokuValidState(l_int32 *state) +{ +l_int32 i; + + PROCNAME("sudokuValidState"); + + if (!state) + return ERROR_INT("state not defined", procName, 0); + + for (i = 0; i < 81; i++) { + if (!sudokuTestState(state, i)) + return 0; + } + + return 1; +} + + +/*! + * \brief sudokuNewGuess() + * + * \param[in] sud l_sudoku + * \return 0 if OK; 1 if no solution is possible + * + *
+ * Notes:
+ *      (1) This attempts to increment the number in the current
+ *          location.  If it can't, it backtracks (sets the number
+ *          in the current location to zero and decrements the
+ *          current location).  If it can, it tests that number,
+ *          and if the number is valid, moves forward to the next
+ *          empty location (increments the current location).
+ *      (2) If there is no solution, backtracking will eventually
+ *          exhaust possibilities for the first location.
+ * 
+ */ +static l_int32 +sudokuNewGuess(L_SUDOKU *sud) +{ +l_int32 index, val, valid; +l_int32 *locs, *state; + + locs = sud->locs; + state = sud->state; + index = locs[sud->current]; /* 0 to 80 */ + val = state[index]; + if (val == 9) { /* backtrack or give up */ + if (sud->current == 0) { + sud->failure = TRUE; + return 1; + } + state[index] = 0; + sud->current--; + } else { /* increment current value and test */ + sud->nguess++; + state[index]++; + valid = sudokuTestState(state, index); + if (valid) { + if (sud->current == sud->num - 1) { /* we're done */ + sud->finished = TRUE; + return 0; + } else { /* advance to next position */ + sud->current++; + } + } + } + + return 0; +} + + +/*! + * \brief sudokuTestState() + * + * \param[in] state current state: array of 81 values + * \param[in] index into state element that we are testing + * \return 1 if valid; 0 if invalid no error checking + */ +static l_int32 +sudokuTestState(l_int32 *state, + l_int32 index) +{ +l_int32 i, j, val, row, rowstart, rowend, col; +l_int32 blockrow, blockcol, blockstart, rowindex, locindex; + + if ((val = state[index]) == 0) /* automatically valid */ + return 1; + + /* Test row. Test val is at (x, y) = (index % 9, index / 9) */ + row = index / 9; + rowstart = 9 * row; + for (i = rowstart; i < index; i++) { + if (state[i] == val) + return 0; + } + rowend = rowstart + 9; + for (i = index + 1; i < rowend; i++) { + if (state[i] == val) + return 0; + } + + /* Test column */ + col = index % 9; + for (j = col; j < index; j += 9) { + if (state[j] == val) + return 0; + } + for (j = index + 9; j < 81; j += 9) { + if (state[j] == val) + return 0; + } + + /* Test local 3x3 block */ + blockrow = 3 * (row / 3); + blockcol = 3 * (col / 3); + blockstart = 9 * blockrow + blockcol; + for (i = 0; i < 3; i++) { + rowindex = blockstart + 9 * i; + for (j = 0; j < 3; j++) { + locindex = rowindex + j; + if (index == locindex) continue; + if (state[locindex] == val) + return 0; + } + } + + return 1; +} + + +/*---------------------------------------------------------------------* + * Test for uniqueness * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuTestUniqueness() + * + * \param[in] array of 81 numbers, 9 lines of 9 numbers each + * \param[out] punique 1 if unique, 0 if not + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This applies the brute force method to all four 90 degree
+ *          rotations.  If there is more than one solution, it is highly
+ *          unlikely that all four results will be the same;
+ *          consequently, if they are the same, the solution is
+ *          most likely to be unique.
+ * 
+ */ +l_ok +sudokuTestUniqueness(l_int32 *array, + l_int32 *punique) +{ +l_int32 same1, same2, same3; +l_int32 *array1, *array2, *array3; +L_SUDOKU *sud, *sud1, *sud2, *sud3; + + PROCNAME("sudokuTestUniqueness"); + + if (!punique) + return ERROR_INT("&unique not defined", procName, 1); + *punique = 0; + if (!array) + return ERROR_INT("array not defined", procName, 1); + + sud = sudokuCreate(array); + sudokuSolve(sud); + array1 = sudokuRotateArray(array, 1); + sud1 = sudokuCreate(array1); + sudokuSolve(sud1); + array2 = sudokuRotateArray(array, 2); + sud2 = sudokuCreate(array2); + sudokuSolve(sud2); + array3 = sudokuRotateArray(array, 3); + sud3 = sudokuCreate(array3); + sudokuSolve(sud3); + + sudokuCompareState(sud, sud1, 1, &same1); + sudokuCompareState(sud, sud2, 2, &same2); + sudokuCompareState(sud, sud3, 3, &same3); + *punique = (same1 && same2 && same3); + + sudokuDestroy(&sud); + sudokuDestroy(&sud1); + sudokuDestroy(&sud2); + sudokuDestroy(&sud3); + LEPT_FREE(array1); + LEPT_FREE(array2); + LEPT_FREE(array3); + return 0; +} + + +/*! + * \brief sudokuCompareState() + * + * \param[in] sud1, sud2 two l_Sudoku states (solutions) + * \param[in] quads rotation of sud2 input with respect to sud1, + * in units of 90 degrees cw + * \param[out] psame 1 if all 4 results are identical; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input to sud2 has been rotated by %quads relative to the
+ *          input to sud1.  Therefore, we must rotate the solution to
+ *          sud1 by the same amount before comparing it to the
+ *          solution to sud2.
+ * 
+ */ +static l_int32 +sudokuCompareState(L_SUDOKU *sud1, + L_SUDOKU *sud2, + l_int32 quads, + l_int32 *psame) +{ +l_int32 i, same; +l_int32 *array; + + PROCNAME("sudokuCompareState"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!sud1) + return ERROR_INT("sud1 not defined", procName, 1); + if (!sud2) + return ERROR_INT("sud1 not defined", procName, 1); + if (quads < 1 || quads > 3) + return ERROR_INT("valid quads in {1,2,3}", procName, 1); + + same = TRUE; + if ((array = sudokuRotateArray(sud1->state, quads)) == NULL) + return ERROR_INT("array not made", procName, 1); + for (i = 0; i < 81; i++) { + if (array[i] != sud2->state[i]) { + same = FALSE; + break; + } + } + *psame = same; + LEPT_FREE(array); + return 0; +} + + +/*! + * \brief sudokuRotateArray() + * + * \param[in] array 81 numbers; 9 lines of 9 numbers each + * \param[in] quads 1-3; number of 90 degree cw rotations + * \return rarray rotated array, or NULL on error + */ +static l_int32 * +sudokuRotateArray(l_int32 *array, + l_int32 quads) +{ +l_int32 i, j, sindex, dindex; +l_int32 *rarray; + + PROCNAME("sudokuRotateArray"); + + if (!array) + return (l_int32 *)ERROR_PTR("array not defined", procName, NULL); + if (quads < 1 || quads > 3) + return (l_int32 *)ERROR_PTR("valid quads in {1,2,3}", procName, NULL); + + rarray = (l_int32 *)LEPT_CALLOC(81, sizeof(l_int32)); + if (quads == 1) { + for (j = 0, dindex = 0; j < 9; j++) { + for (i = 8; i >= 0; i--) { + sindex = 9 * i + j; + rarray[dindex++] = array[sindex]; + } + } + } else if (quads == 2) { + for (i = 8, dindex = 0; i >= 0; i--) { + for (j = 8; j >= 0; j--) { + sindex = 9 * i + j; + rarray[dindex++] = array[sindex]; + } + } + } else { /* quads == 3 */ + for (j = 8, dindex = 0; j >= 0; j--) { + for (i = 0; i < 9; i++) { + sindex = 9 * i + j; + rarray[dindex++] = array[sindex]; + } + } + } + + return rarray; +} + + +/*---------------------------------------------------------------------* + * Generation * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuGenerate() + * + * \param[in] array 81 numbers, 9 rows of 9 numbers each + * \param[in] seed random number + * \param[in] minelems min non-zero elements allowed; <= 80 + * \param[in] maxtries max tries to remove a number and get a valid sudoku + * \return l_sudoku, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a brute force generator.  It starts with a completed
+ *          sudoku solution and, by removing elements (setting them to 0),
+ *          generates a valid (unique) sudoku initial condition.
+ *      (2) The process stops when either %minelems, the minimum
+ *          number of non-zero elements, is reached, or when the
+ *          number of attempts to remove the next element exceeds %maxtries.
+ *      (3) No sudoku is known with less than 17 nonzero elements.
+ * 
+ */ +L_SUDOKU * +sudokuGenerate(l_int32 *array, + l_int32 seed, + l_int32 minelems, + l_int32 maxtries) +{ +l_int32 index, sector, nzeros, removefirst, tries, val, oldval, unique; +L_SUDOKU *sud, *testsud; + + PROCNAME("sudokuGenerate"); + + if (!array) + return (L_SUDOKU *)ERROR_PTR("array not defined", procName, NULL); + if (minelems > 80) + return (L_SUDOKU *)ERROR_PTR("minelems must be < 81", procName, NULL); + + /* Remove up to 30 numbers at random from the solution. + * Test if the solution is valid -- the initial 'solution' may + * have been invalid. Then test if the sudoku with 30 zeroes + * is unique -- it almost always will be. */ + srand(seed); + nzeros = 0; + sector = 0; + removefirst = L_MIN(30, 81 - minelems); + while (nzeros < removefirst) { + genRandomIntegerInRange(9, 0, &val); + index = 27 * (sector / 3) + 3 * (sector % 3) + + 9 * (val / 3) + (val % 3); + if (array[index] == 0) continue; + array[index] = 0; + nzeros++; + sector++; + sector %= 9; + } + testsud = sudokuCreate(array); + sudokuSolve(testsud); + if (testsud->failure) { + sudokuDestroy(&testsud); + L_ERROR("invalid initial solution\n", procName); + return NULL; + } + sudokuTestUniqueness(testsud->init, &unique); + sudokuDestroy(&testsud); + if (!unique) { + L_ERROR("non-unique result with 30 zeroes\n", procName); + return NULL; + } + + /* Remove more numbers, testing at each removal for uniqueness. */ + tries = 0; + sector = 0; + while (1) { + if (tries > maxtries) break; + if (81 - nzeros <= minelems) break; + + if (tries == 0) { + fprintf(stderr, "Trying %d zeros\n", nzeros); + tries = 1; + } + + /* Choose an element to be zeroed. We choose one + * at random in succession from each of the nine sectors. */ + genRandomIntegerInRange(9, 0, &val); + index = 27 * (sector / 3) + 3 * (sector % 3) + + 9 * (val / 3) + (val % 3); + sector++; + sector %= 9; + if (array[index] == 0) continue; + + /* Save the old value in case we need to revert */ + oldval = array[index]; + + /* Is there a solution? If not, try again. */ + array[index] = 0; + testsud = sudokuCreate(array); + sudokuSolve(testsud); + if (testsud->failure == TRUE) { + sudokuDestroy(&testsud); + array[index] = oldval; /* revert */ + tries++; + continue; + } + + /* Is the solution unique? If not, try again. */ + sudokuTestUniqueness(testsud->init, &unique); + sudokuDestroy(&testsud); + if (!unique) { /* revert and try again */ + array[index] = oldval; + tries++; + } else { /* accept this */ + tries = 0; + fprintf(stderr, "Have %d zeros\n", nzeros); + nzeros++; + } + } + fprintf(stderr, "Final: nelems = %d\n", 81 - nzeros); + + /* Show that we can recover the solution */ + sud = sudokuCreate(array); + sudokuOutput(sud, L_SUDOKU_INIT); + sudokuSolve(sud); + sudokuOutput(sud, L_SUDOKU_STATE); + + return sud; +} + + +/*---------------------------------------------------------------------* + * Output * + *---------------------------------------------------------------------*/ +/*! + * \brief sudokuOutput() + * + * \param[in] sud l_sudoku at any stage + * \param[in] arraytype L_SUDOKU_INIT, L_SUDOKU_STATE + * \return void + * + *
+ * Notes:
+ *      (1) Prints either the initial array or the current state
+ *          of the solution.
+ * 
+ */ +l_int32 +sudokuOutput(L_SUDOKU *sud, + l_int32 arraytype) +{ +l_int32 i, j; +l_int32 *array; + + PROCNAME("sudokuOutput"); + + if (!sud) + return ERROR_INT("sud not defined", procName, 1); + if (arraytype == L_SUDOKU_INIT) + array = sud->init; + else if (arraytype == L_SUDOKU_STATE) + array = sud->state; + else + return ERROR_INT("invalid arraytype", procName, 1); + + for (i = 0; i < 9; i++) { + for (j = 0; j < 9; j++) + fprintf(stderr, "%d ", array[9 * i + j]); + fprintf(stderr, "\n"); + } + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/sudoku.h b/3rdparty/hgOCR/leptonica/sudoku.h new file mode 100644 index 00000000..5abb7cbc --- /dev/null +++ b/3rdparty/hgOCR/leptonica/sudoku.h @@ -0,0 +1,77 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef SUDOKU_H_INCLUDED +#define SUDOKU_H_INCLUDED + +/*! + * \file sudoku.h + * + *
+ *    The L_Sudoku holds all the information of the current state.
+ *
+ *    The input to sudokuCreate() is a file with any number of lines
+ *    starting with '#', followed by 9 lines consisting of 9 numbers
+ *    in each line.  These have the known values and use 0 for the unknowns.
+ *    Blank lines are ignored.
+ *
+ *    The %locs array holds the indices of the unknowns, numbered
+ *    left-to-right and top-to-bottom from 0 to 80.  The array size
+ *    is initialized to %num.  %current is the index into the %locs
+ *    array of the current guess: locs[current].
+ *
+ *    The %state array is used to determine the validity of each guess.
+ *    It is of size 81, and is initialized by setting the unknowns to 0
+ *    and the knowns to their input values.
+ * 
+ */ + +struct L_Sudoku +{ + l_int32 num; /*!< number of unknowns */ + l_int32 *locs; /*!< location of unknowns */ + l_int32 current; /*!< index into %locs of current location */ + l_int32 *init; /*!< initial state, with 0 representing */ + /*!< the unknowns */ + l_int32 *state; /*!< present state, including inits and */ + /*!< guesses of unknowns up to %current */ + l_int32 nguess; /*!< shows current number of guesses */ + l_int32 finished; /*!< set to 1 when solved */ + l_int32 failure; /*!< set to 1 if no solution is possible */ +}; +typedef struct L_Sudoku L_SUDOKU; + + + /*! For printing out array data */ +/*! Sudoku Output */ +enum { + L_SUDOKU_INIT = 0, + L_SUDOKU_STATE = 1 +}; + +#endif /* SUDOKU_H_INCLUDED */ + + diff --git a/3rdparty/hgOCR/leptonica/textops.c b/3rdparty/hgOCR/leptonica/textops.c new file mode 100644 index 00000000..06b0a19f --- /dev/null +++ b/3rdparty/hgOCR/leptonica/textops.c @@ -0,0 +1,1125 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file textops.c + *
+ *
+ *    Font layout
+ *       PIX             *pixAddSingleTextblock()
+ *       PIX             *pixAddTextlines()
+ *       l_int32          pixSetTextblock()
+ *       l_int32          pixSetTextline()
+ *       PIXA            *pixaAddTextNumber()
+ *       PIXA            *pixaAddTextlines()
+ *       l_int32          pixaAddPixWithText()
+ *
+ *    Text size estimation and partitioning
+ *       SARRAY          *bmfGetLineStrings()
+ *       NUMA            *bmfGetWordWidths()
+ *       l_int32          bmfGetStringWidth()
+ *
+ *    Text splitting
+ *       SARRAY          *splitStringToParagraphs()
+ *       static l_int32   stringAllWhitespace()
+ *       static l_int32   stringLeadingWhitespace()
+ *
+ *    This is a simple utility to put text on images.  One font and style
+ *    is provided, with a variety of pt sizes.  For example, to put a
+ *    line of green 10 pt text on an image, with the beginning baseline
+ *    at (50, 50):
+ *        L_Bmf  *bmf = bmfCreate(NULL, 10);
+ *        const char *textstr = "This is a funny cat";
+ *        pixSetTextline(pixs, bmf, textstr, 0x00ff0000, 50, 50, NULL, NULL);
+ *
+ *    The simplest interfaces for adding text to an image are
+ *    pixAddTextlines() and pixAddSingleTextblock().
+ *    For example, to add the same text in red, centered, below the image:
+ *        Pix *pixd = pixAddTextlines(pixs, bmf, textstr, 0xff000000,
+ *                                    L_ADD_BELOW);  // red text
+ *
+ *    To add text to all pix in a pixa, generating a new pixa, use
+ *    either an sarray to hold the strings for each pix, or use the
+ *    strings in the text field of each pix; e.g.,
+ *        Pixa *pixa2 = pixaAddTextlines(pixa1, bmf, sa, 0x0000ff00,
+ *                                    L_ADD_LEFT);  // blue text
+ *        Pixa *pixa2 = pixaAddTextlines(pixa1, bmf, NULL, 0x00ff0000,
+ *                                    L_ADD_RIGHT);  // green text
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_int32 stringAllWhitespace(char *textstr, l_int32 *pval); +static l_int32 stringLeadingWhitespace(char *textstr, l_int32 *pval); + + +/*---------------------------------------------------------------------* + * Font layout * + *---------------------------------------------------------------------*/ +/*! + * \brief pixAddSingleTextblock() + * + * \param[in] pixs input pix; colormap ok + * \param[in] bmf bitmap font data + * \param[in] textstr [optional] text string to be added + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_AT_TOP, + * L_ADD_AT_BOT, L_ADD_BELOW + * \param[out] poverflow [optional] 1 if text overflows allocated + * region and is clipped; 0 otherwise + * \return pixd new pix with rendered text, or either a copy, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This function paints a set of lines of text over an image.
+ *          If %location is L_ADD_ABOVE or L_ADD_BELOW, the pix size
+ *          is expanded with a border and rendered over the border.
+ *      (2) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *      (3) If textstr == NULL, use the text field in the pix.
+ *      (4) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ *      (5) Typical usage is for labelling a pix with some text data.
+ * 
+ */ +PIX * +pixAddSingleTextblock(PIX *pixs, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 location, + l_int32 *poverflow) +{ +char *linestr; +l_int32 w, h, d, i, y, xstart, ystart, extra, spacer, rval, gval, bval; +l_int32 nlines, htext, ovf, overflow, offset, index; +l_uint32 textcolor; +PIX *pixd; +PIXCMAP *cmap, *cmapd; +SARRAY *salines; + + PROCNAME("pixAddSingleTextblock"); + + if (poverflow) *poverflow = 0; + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (location != L_ADD_ABOVE && location != L_ADD_AT_TOP && + location != L_ADD_AT_BOT && location != L_ADD_BELOW) + return (PIX *)ERROR_PTR("invalid location", procName, NULL); + if (!bmf) { + L_ERROR("no bitmap fonts; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + if (!textstr) + textstr = pixGetText(pixs); + if (!textstr) { + L_WARNING("no textstring defined; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + + /* Make sure the "color" value for the text will work + * for the pix. If the pix is not colormapped and the + * value is out of range, set it to mid-range. */ + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (d == 1 && val > 1) + val = 1; + else if (d == 2 && val > 3 && !cmap) + val = 2; + else if (d == 4 && val > 15 && !cmap) + val = 8; + else if (d == 8 && val > 0xff && !cmap) + val = 128; + else if (d == 16 && val > 0xffff) + val = 0x8000; + else if (d == 32 && val < 256) + val = 0x80808000; + + xstart = (l_int32)(0.1 * w); + salines = bmfGetLineStrings(bmf, textstr, w - 2 * xstart, 0, &htext); + if (!salines) + return (PIX *)ERROR_PTR("line string sa not made", procName, NULL); + nlines = sarrayGetCount(salines); + + /* Add white border if required */ + spacer = 10; /* pixels away from image boundary or added border */ + if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { + extra = htext + 2 * spacer; + pixd = pixCreate(w, h + extra, d); + pixCopyColormap(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyText(pixd, pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + if (location == L_ADD_ABOVE) + pixRasterop(pixd, 0, extra, w, h, PIX_SRC, pixs, 0, 0); + else /* add below */ + pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); + } else { + pixd = pixCopy(NULL, pixs); + } + cmapd = pixGetColormap(pixd); + + /* bmf->baselinetab[93] is the approximate distance from + * the top of the tallest character to the baseline. 93 was chosen + * at random, as all the baselines are essentially equal for + * each character in a font. */ + offset = bmf->baselinetab[93]; + if (location == L_ADD_ABOVE || location == L_ADD_AT_TOP) + ystart = offset + spacer; + else if (location == L_ADD_AT_BOT) + ystart = h - htext - spacer + offset; + else /* add below */ + ystart = h + offset + spacer; + + /* If cmapped, add the color if necessary to the cmap. If the + * cmap is full, use the nearest color to the requested color. */ + if (cmapd) { + extractRGBValues(val, &rval, &gval, &bval); + pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); + pixcmapGetColor(cmapd, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &textcolor); + } else { + textcolor = val; + } + + /* Keep track of overflow condition on line width */ + overflow = 0; + for (i = 0, y = ystart; i < nlines; i++) { + linestr = sarrayGetString(salines, i, L_NOCOPY); + pixSetTextline(pixd, bmf, linestr, textcolor, + xstart, y, NULL, &ovf); + y += bmf->lineheight + bmf->vertlinesep; + if (ovf) + overflow = 1; + } + + /* Also consider vertical overflow where there is too much text to + * fit inside the image: the cases L_ADD_AT_TOP and L_ADD_AT_BOT. + * The text requires a total of htext + 2 * spacer vertical pixels. */ + if (location == L_ADD_AT_TOP || location == L_ADD_AT_BOT) { + if (h < htext + 2 * spacer) + overflow = 1; + } + if (poverflow) *poverflow = overflow; + + sarrayDestroy(&salines); + return pixd; +} + + +/*! + * \brief pixAddTextlines() + * + * \param[in] pixs input pix; colormap ok + * \param[in] bmf bitmap font data + * \param[in] textstr [optional] text string to be added + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT + * \return pixd new pix with rendered text, or either a copy, + * or NULL on error + * + *
+ * Notes:
+ *      (1) This function expands an image as required to paint one or
+ *          more lines of text adjacent to the image.  If %bmf == NULL,
+ *          this returns a copy.  If above or below, the lines are
+ *          centered with respect to the image; if left or right, they
+ *          are left justified.
+ *      (2) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *      (3) If textstr == NULL, use the text field in the pix.  The
+ *          text field contains one or most "lines" of text, where newlines
+ *          are used as line separators.
+ *      (4) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ *      (5) Typical usage is for labelling a pix with some text data.
+ * 
+ */ +PIX * +pixAddTextlines(PIX *pixs, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 location) +{ +char *str; +l_int32 i, w, h, d, rval, gval, bval, index; +l_int32 wline, wtext, htext, wadd, hadd, spacer, hbaseline, nlines; +l_uint32 textcolor; +PIX *pixd; +PIXCMAP *cmap, *cmapd; +SARRAY *sa; + + PROCNAME("pixAddTextlines"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (location != L_ADD_ABOVE && location != L_ADD_BELOW && + location != L_ADD_LEFT && location != L_ADD_RIGHT) + return (PIX *)ERROR_PTR("invalid location", procName, NULL); + if (!bmf) { + L_ERROR("no bitmap fonts; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + if (!textstr) { + textstr = pixGetText(pixs); + if (!textstr) { + L_WARNING("no textstring defined; returning a copy\n", procName); + return pixCopy(NULL, pixs); + } + } + + /* Make sure the "color" value for the text will work + * for the pix. If the pix is not colormapped and the + * value is out of range, set it to mid-range. */ + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (d == 1 && val > 1) + val = 1; + else if (d == 2 && val > 3 && !cmap) + val = 2; + else if (d == 4 && val > 15 && !cmap) + val = 8; + else if (d == 8 && val > 0xff && !cmap) + val = 128; + else if (d == 16 && val > 0xffff) + val = 0x8000; + else if (d == 32 && val < 256) + val = 0x80808000; + + /* Get the text in each line */ + sa = sarrayCreateLinesFromString(textstr, 0); + nlines = sarrayGetCount(sa); + + /* Get the necessary text size */ + wtext = 0; + for (i = 0; i < nlines; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + bmfGetStringWidth(bmf, str, &wline); + if (wline > wtext) + wtext = wline; + } + hbaseline = bmf->baselinetab[93]; + htext = 1.5 * hbaseline * nlines; + + /* Add white border */ + spacer = 10; /* pixels away from the added border */ + if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { + hadd = htext + 2 * spacer; + pixd = pixCreate(w, h + hadd, d); + pixCopyColormap(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyText(pixd, pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + if (location == L_ADD_ABOVE) + pixRasterop(pixd, 0, hadd, w, h, PIX_SRC, pixs, 0, 0); + else /* add below */ + pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); + } else { /* L_ADD_LEFT or L_ADD_RIGHT */ + wadd = wtext + 2 * spacer; + pixd = pixCreate(w + wadd, h, d); + pixCopyColormap(pixd, pixs); + pixCopyResolution(pixd, pixs); + pixCopyText(pixd, pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + if (location == L_ADD_LEFT) + pixRasterop(pixd, wadd, 0, w, h, PIX_SRC, pixs, 0, 0); + else /* add to right */ + pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); + } + + /* If cmapped, add the color if necessary to the cmap. If the + * cmap is full, use the nearest color to the requested color. */ + cmapd = pixGetColormap(pixd); + if (cmapd) { + extractRGBValues(val, &rval, &gval, &bval); + pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); + pixcmapGetColor(cmapd, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &textcolor); + } else { + textcolor = val; + } + + /* Add the text */ + for (i = 0; i < nlines; i++) { + str = sarrayGetString(sa, i, L_NOCOPY); + bmfGetStringWidth(bmf, str, &wtext); + if (location == L_ADD_ABOVE) + pixSetTextline(pixd, bmf, str, textcolor, + (w - wtext) / 2, spacer + hbaseline * (1 + 1.5 * i), + NULL, NULL); + else if (location == L_ADD_BELOW) + pixSetTextline(pixd, bmf, str, textcolor, + (w - wtext) / 2, h + spacer + + hbaseline * (1 + 1.5 * i), NULL, NULL); + else if (location == L_ADD_LEFT) + pixSetTextline(pixd, bmf, str, textcolor, + spacer, (h - htext) / 2 + hbaseline * (1 + 1.5 * i), + NULL, NULL); + else /* location == L_ADD_RIGHT */ + pixSetTextline(pixd, bmf, str, textcolor, + w + spacer, (h - htext) / 2 + + hbaseline * (1 + 1.5 * i), NULL, NULL); + } + + sarrayDestroy(&sa); + return pixd; +} + + +/*! + * \brief pixSetTextblock() + * + * \param[in] pixs input image + * \param[in] bmf bitmap font data + * \param[in] textstr block text string to be set + * \param[in] val color to set the text + * \param[in] x0 left edge for each line of text + * \param[in] y0 baseline location for the first text line + * \param[in] wtext max width of each line of generated text + * \param[in] firstindent indentation of first line, in x-widths + * \param[out] poverflow [optional] 0 if text is contained in input pix; + * 1 if it is clipped + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function paints a set of lines of text over an image.
+ *      (2) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *          The last two hex digits are 00 (byte value 0), assigned to
+ *          the A component.  Note that, as usual, RGBA proceeds from
+ *          left to right in the order from MSB to LSB (see pix.h
+ *          for details).
+ *      (3) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ * 
+ */ +l_ok +pixSetTextblock(PIX *pixs, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 x0, + l_int32 y0, + l_int32 wtext, + l_int32 firstindent, + l_int32 *poverflow) +{ +char *linestr; +l_int32 d, h, i, w, x, y, nlines, htext, xwidth, wline, ovf, overflow; +SARRAY *salines; +PIXCMAP *cmap; + + PROCNAME("pixSetTextblock"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + if (!textstr) + return ERROR_INT("textstr not defined", procName, 1); + + /* Make sure the "color" value for the text will work + * for the pix. If the pix is not colormapped and the + * value is out of range, set it to mid-range. */ + pixGetDimensions(pixs, &w, &h, &d); + cmap = pixGetColormap(pixs); + if (d == 1 && val > 1) + val = 1; + else if (d == 2 && val > 3 && !cmap) + val = 2; + else if (d == 4 && val > 15 && !cmap) + val = 8; + else if (d == 8 && val > 0xff && !cmap) + val = 128; + else if (d == 16 && val > 0xffff) + val = 0x8000; + else if (d == 32 && val < 256) + val = 0x80808000; + + if (w < x0 + wtext) { + L_WARNING("reducing width of textblock\n", procName); + wtext = w - x0 - w / 10; + if (wtext <= 0) + return ERROR_INT("wtext too small; no room for text", procName, 1); + } + + salines = bmfGetLineStrings(bmf, textstr, wtext, firstindent, &htext); + if (!salines) + return ERROR_INT("line string sa not made", procName, 1); + nlines = sarrayGetCount(salines); + bmfGetWidth(bmf, 'x', &xwidth); + + y = y0; + overflow = 0; + for (i = 0; i < nlines; i++) { + if (i == 0) + x = x0 + firstindent * xwidth; + else + x = x0; + linestr = sarrayGetString(salines, i, L_NOCOPY); + pixSetTextline(pixs, bmf, linestr, val, x, y, &wline, &ovf); + y += bmf->lineheight + bmf->vertlinesep; + if (ovf) + overflow = 1; + } + + /* (y0 - baseline) is the top of the printed text. Character + * 93 was chosen at random, as all the baselines are essentially + * equal for each character in a font. */ + if (h < y0 - bmf->baselinetab[93] + htext) + overflow = 1; + if (poverflow) + *poverflow = overflow; + + sarrayDestroy(&salines); + return 0; +} + + +/*! + * \brief pixSetTextline() + * + * \param[in] pixs input image + * \param[in] bmf bitmap font data + * \param[in] textstr text string to be set on the line + * \param[in] val color to set the text + * \param[in] x0 left edge for first char + * \param[in] y0 baseline location for all text on line + * \param[out] pwidth [optional] width of generated text + * \param[out] poverflow [optional] 0 if text is contained in input pix; + * 1 if it is clipped + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This function paints a line of text over an image.
+ *      (2) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *          The last two hex digits are 00 (byte value 0), assigned to
+ *          the A component.  Note that, as usual, RGBA proceeds from
+ *          left to right in the order from MSB to LSB (see pix.h
+ *          for details).
+ *      (3) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ * 
+ */ +l_ok +pixSetTextline(PIX *pixs, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 x0, + l_int32 y0, + l_int32 *pwidth, + l_int32 *poverflow) +{ +char chr; +l_int32 d, i, x, w, nchar, baseline, index, rval, gval, bval; +l_uint32 textcolor; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixSetTextline"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + if (!textstr) + return ERROR_INT("teststr not defined", procName, 1); + + d = pixGetDepth(pixs); + cmap = pixGetColormap(pixs); + if (d == 1 && val > 1) + val = 1; + else if (d == 2 && val > 3 && !cmap) + val = 2; + else if (d == 4 && val > 15 && !cmap) + val = 8; + else if (d == 8 && val > 0xff && !cmap) + val = 128; + else if (d == 16 && val > 0xffff) + val = 0x8000; + else if (d == 32 && val < 256) + val = 0x80808000; + + /* If cmapped, add the color if necessary to the cmap. If the + * cmap is full, use the nearest color to the requested color. */ + if (cmap) { + extractRGBValues(val, &rval, &gval, &bval); + pixcmapAddNearestColor(cmap, rval, gval, bval, &index); + pixcmapGetColor(cmap, index, &rval, &gval, &bval); + composeRGBPixel(rval, gval, bval, &textcolor); + } else + textcolor = val; + + nchar = strlen(textstr); + x = x0; + for (i = 0; i < nchar; i++) { + chr = textstr[i]; + if ((l_int32)chr == 10) continue; /* NL */ + pix = bmfGetPix(bmf, chr); + bmfGetBaseline(bmf, chr, &baseline); + pixPaintThroughMask(pixs, pix, x, y0 - baseline, textcolor); + w = pixGetWidth(pix); + x += w + bmf->kernwidth; + pixDestroy(&pix); + } + + if (pwidth) + *pwidth = x - bmf->kernwidth - x0; + if (poverflow) + *poverflow = (x > pixGetWidth(pixs) - 1) ? 1 : 0; + return 0; +} + + +/*! + * \brief pixaAddTextNumber() + * + * \param[in] pixas input pixa; colormap ok + * \param[in] bmf bitmap font data + * \param[in] na [optional] number array; use 1 ... n if null + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT + * \return pixad new pixa with rendered numbers, or NULL on error + * + *
+ * Notes:
+ *      (1) Typical usage is for labelling each pix in a pixa with a number.
+ *      (2) This function paints numbers external to each pix, in a position
+ *          given by %location.  In all cases, the pix is expanded on
+ *          on side and the number is painted over white in the added region.
+ *      (3) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *      (4) If na == NULL, number each pix sequentially, starting with 1.
+ *      (5) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ * 
+ */ +PIXA * +pixaAddTextNumber(PIXA *pixas, + L_BMF *bmf, + NUMA *na, + l_uint32 val, + l_int32 location) +{ +char textstr[128]; +l_int32 i, n, index; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaAddTextNumber"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!bmf) + return (PIXA *)ERROR_PTR("bmf not defined", procName, NULL); + if (location != L_ADD_ABOVE && location != L_ADD_BELOW && + location != L_ADD_LEFT && location != L_ADD_RIGHT) + return (PIXA *)ERROR_PTR("invalid location", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + if (na) + numaGetIValue(na, i, &index); + else + index = i + 1; + snprintf(textstr, sizeof(textstr), "%d", index); + pix2 = pixAddTextlines(pix1, bmf, textstr, val, location); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + return pixad; +} + + +/*! + * \brief pixaAddTextlines() + * + * \param[in] pixas input pixa; colormap ok + * \param[in] bmf bitmap font data + * \param[in] sa [optional] sarray; use text embedded in + * each pix if null + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT + * \return pixad new pixa with rendered text, or NULL on error + * + *
+ * Notes:
+ *      (1) This function adds one or more lines of text externally to
+ *          each pix, in a position given by %location.  In all cases,
+ *          the pix is expanded as necessary to accommodate the text.
+ *      (2) %val is the pixel value to be painted through the font mask.
+ *          It should be chosen to agree with the depth of pixs.
+ *          If it is out of bounds, an intermediate value is chosen.
+ *          For RGB, use hex notation: 0xRRGGBB00, where RR is the
+ *          hex representation of the red intensity, etc.
+ *      (3) If sa == NULL, use the text embedded in each pix.  In all
+ *          cases, newlines in the text string are used to separate the
+ *          lines of text that are added to the pix.
+ *      (4) If sa has a smaller count than pixa, issue a warning
+ *          and do not use any embedded text.
+ *      (5) If there is a colormap, this does the best it can to use
+ *          the requested color, or something similar to it.
+ * 
+ */ +PIXA * +pixaAddTextlines(PIXA *pixas, + L_BMF *bmf, + SARRAY *sa, + l_uint32 val, + l_int32 location) +{ +char *textstr; +l_int32 i, n, nstr; +PIX *pix1, *pix2; +PIXA *pixad; + + PROCNAME("pixaAddTextlines"); + + if (!pixas) + return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); + if (!bmf) + return (PIXA *)ERROR_PTR("bmf not defined", procName, NULL); + if (location != L_ADD_ABOVE && location != L_ADD_BELOW && + location != L_ADD_LEFT && location != L_ADD_RIGHT) + return (PIXA *)ERROR_PTR("invalid location", procName, NULL); + + n = pixaGetCount(pixas); + pixad = pixaCreate(n); + nstr = (sa) ? sarrayGetCount(sa) : 0; + if (nstr > 0 && nstr < n) + L_WARNING("There are %d strings and %d pix\n", procName, nstr, n); + for (i = 0; i < n; i++) { + pix1 = pixaGetPix(pixas, i, L_CLONE); + if (i < nstr) + textstr = sarrayGetString(sa, i, L_NOCOPY); + else + textstr = pixGetText(pix1); + pix2 = pixAddTextlines(pix1, bmf, textstr, val, location); + pixaAddPix(pixad, pix2, L_INSERT); + pixDestroy(&pix1); + } + + return pixad; +} + + +/*! + * \brief pixaAddPixWithText() + * + * \param[in] pixa + * \param[in] pixs any depth, colormap ok + * \param[in] reduction integer subsampling factor + * \param[in] bmf [optional] bitmap font data + * \param[in] textstr [optional] text string to be added + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) This function generates a new pix with added text, and adds
+ *          it by insertion into the pixa.
+ *      (2) If the input pixs is not cmapped and not 32 bpp, it is
+ *          converted to 32 bpp rgb.  %val is a standard 32 bpp pixel,
+ *          expressed as 0xrrggbb00.  If there is a colormap, this does
+ *          the best it can to use the requested color, or something close.
+ *      (3) if %bmf == NULL, generate an 8 pt font; this takes about 5 msec.
+ *      (4) If %textstr == NULL, use the text field in the pix.
+ *      (5) In general, the text string can be written in multiple lines;
+ *          use newlines as the separators.
+ *      (6) Typical usage is for debugging, where the pixa of labeled images
+ *          is used to generate a pdf.  Suggest using 1.0 for scalefactor.
+ * 
+ */ +l_ok +pixaAddPixWithText(PIXA *pixa, + PIX *pixs, + l_int32 reduction, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 location) +{ +l_int32 d; +L_BMF *bmf8; +PIX *pix1, *pix2, *pix3; +PIXCMAP *cmap; + + PROCNAME("pixaAddPixWithText"); + + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (location != L_ADD_ABOVE && location != L_ADD_BELOW && + location != L_ADD_LEFT && location != L_ADD_RIGHT) + return ERROR_INT("invalid location", procName, 1); + + if (!textstr) { + textstr = pixGetText(pixs); + if (!textstr) { + L_WARNING("no textstring defined; inserting copy", procName); + pixaAddPix(pixa, pixs, L_COPY); + return 0; + } + } + + /* Default font size is 8. */ + bmf8 = (bmf) ? bmf : bmfCreate(NULL, 8); + + if (reduction != 1) + pix1 = pixScaleByIntSampling(pixs, reduction); + else + pix1 = pixClone(pixs); + + /* We want the text to be rendered in color. This works + * automatically if pixs is cmapped or 32 bpp rgb; otherwise, + * we need to convert to rgb. */ + cmap = pixGetColormap(pix1); + d = pixGetDepth(pix1); + if (!cmap && d != 32) + pix2 = pixConvertTo32(pix1); + else + pix2 = pixClone(pix1); + + pix3 = pixAddTextlines(pix2, bmf, textstr, val, location); + pixDestroy(&pix1); + pixDestroy(&pix2); + if (!bmf) bmfDestroy(&bmf8); + if (!pix3) + return ERROR_INT("pix3 not made", procName, 1); + + pixaAddPix(pixa, pix3, L_INSERT); + return 0; +} + + +/*---------------------------------------------------------------------* + * Text size estimation and partitioning * + *---------------------------------------------------------------------*/ +/*! + * \brief bmfGetLineStrings() + * + * \param[in] bmf + * \param[in] textstr + * \param[in] maxw max width of a text line in pixels + * \param[in] firstindent indentation of first line, in x-widths + * \param[out] ph height required to hold text bitmap + * \return sarray of text strings for each line, or NULL on error + * + *
+ * Notes:
+ *      (1) Divides the input text string into an array of text strings,
+ *          each of which will fit within maxw bits of width.
+ * 
+ */ +SARRAY * +bmfGetLineStrings(L_BMF *bmf, + const char *textstr, + l_int32 maxw, + l_int32 firstindent, + l_int32 *ph) +{ +char *linestr; +l_int32 i, ifirst, sumw, newsum, w, nwords, nlines, len, xwidth; +NUMA *na; +SARRAY *sa, *sawords; + + PROCNAME("bmfGetLineStrings"); + + if (!bmf) + return (SARRAY *)ERROR_PTR("bmf not defined", procName, NULL); + if (!textstr) + return (SARRAY *)ERROR_PTR("teststr not defined", procName, NULL); + + if ((sawords = sarrayCreateWordsFromString(textstr)) == NULL) + return (SARRAY *)ERROR_PTR("sawords not made", procName, NULL); + + if ((na = bmfGetWordWidths(bmf, textstr, sawords)) == NULL) { + sarrayDestroy(&sawords); + return (SARRAY *)ERROR_PTR("na not made", procName, NULL); + } + nwords = numaGetCount(na); + if (nwords == 0) { + sarrayDestroy(&sawords); + numaDestroy(&na); + return (SARRAY *)ERROR_PTR("no words in textstr", procName, NULL); + } + bmfGetWidth(bmf, 'x', &xwidth); + + sa = sarrayCreate(0); + ifirst = 0; + numaGetIValue(na, 0, &w); + sumw = firstindent * xwidth + w; + for (i = 1; i < nwords; i++) { + numaGetIValue(na, i, &w); + newsum = sumw + bmf->spacewidth + w; + if (newsum > maxw) { + linestr = sarrayToStringRange(sawords, ifirst, i - ifirst, 2); + if (!linestr) + continue; + len = strlen(linestr); + if (len > 0) /* it should always be */ + linestr[len - 1] = '\0'; /* remove the last space */ + sarrayAddString(sa, linestr, L_INSERT); + ifirst = i; + sumw = w; + } + else + sumw += bmf->spacewidth + w; + } + linestr = sarrayToStringRange(sawords, ifirst, nwords - ifirst, 2); + if (linestr) + sarrayAddString(sa, linestr, L_INSERT); + nlines = sarrayGetCount(sa); + *ph = nlines * bmf->lineheight + (nlines - 1) * bmf->vertlinesep; + + sarrayDestroy(&sawords); + numaDestroy(&na); + return sa; +} + + +/*! + * \brief bmfGetWordWidths() + * + * \param[in] bmf + * \param[in] textstr + * \param[in] sa of individual words + * \return numa of word lengths in pixels for the font represented + * by the bmf, or NULL on error + */ +NUMA * +bmfGetWordWidths(L_BMF *bmf, + const char *textstr, + SARRAY *sa) +{ +char *wordstr; +l_int32 i, nwords, width; +NUMA *na; + + PROCNAME("bmfGetWordWidths"); + + if (!bmf) + return (NUMA *)ERROR_PTR("bmf not defined", procName, NULL); + if (!textstr) + return (NUMA *)ERROR_PTR("teststr not defined", procName, NULL); + if (!sa) + return (NUMA *)ERROR_PTR("sa not defined", procName, NULL); + + nwords = sarrayGetCount(sa); + if ((na = numaCreate(nwords)) == NULL) + return (NUMA *)ERROR_PTR("na not made", procName, NULL); + + for (i = 0; i < nwords; i++) { + wordstr = sarrayGetString(sa, i, L_NOCOPY); + bmfGetStringWidth(bmf, wordstr, &width); + numaAddNumber(na, width); + } + + return na; +} + + +/*! + * \brief bmfGetStringWidth() + * + * \param[in] bmf + * \param[in] textstr + * \param[out] pw width of text string, in pixels for the + * font represented by the bmf + * \return 0 if OK, 1 on error + */ +l_ok +bmfGetStringWidth(L_BMF *bmf, + const char *textstr, + l_int32 *pw) +{ +char chr; +l_int32 i, w, width, nchar; + + PROCNAME("bmfGetStringWidth"); + + if (!bmf) + return ERROR_INT("bmf not defined", procName, 1); + if (!textstr) + return ERROR_INT("teststr not defined", procName, 1); + if (!pw) + return ERROR_INT("&w not defined", procName, 1); + + nchar = strlen(textstr); + w = 0; + for (i = 0; i < nchar; i++) { + chr = textstr[i]; + bmfGetWidth(bmf, chr, &width); + if (width != UNDEF) + w += width + bmf->kernwidth; + } + w -= bmf->kernwidth; /* remove last one */ + + *pw = w; + return 0; +} + + + +/*---------------------------------------------------------------------* + * Text splitting * + *---------------------------------------------------------------------*/ +/*! + * \brief splitStringToParagraphs() + * + * \param[in] textstr text string + * \param[in] splitflag see enum in bmf.h; valid values in {1,2,3} + * \return sarray where each string is a paragraph of the input, + * or NULL on error. + */ +SARRAY * +splitStringToParagraphs(char *textstr, + l_int32 splitflag) +{ +char *linestr, *parastring; +l_int32 nlines, i, allwhite, leadwhite; +SARRAY *salines, *satemp, *saout; + + PROCNAME("splitStringToParagraphs"); + + if (!textstr) + return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); + + if ((salines = sarrayCreateLinesFromString(textstr, 1)) == NULL) + return (SARRAY *)ERROR_PTR("salines not made", procName, NULL); + nlines = sarrayGetCount(salines); + saout = sarrayCreate(0); + satemp = sarrayCreate(0); + + linestr = sarrayGetString(salines, 0, L_NOCOPY); + sarrayAddString(satemp, linestr, L_COPY); + for (i = 1; i < nlines; i++) { + linestr = sarrayGetString(salines, i, L_NOCOPY); + stringAllWhitespace(linestr, &allwhite); + stringLeadingWhitespace(linestr, &leadwhite); + if ((splitflag == SPLIT_ON_LEADING_WHITE && leadwhite) || + (splitflag == SPLIT_ON_BLANK_LINE && allwhite) || + (splitflag == SPLIT_ON_BOTH && (allwhite || leadwhite))) { + parastring = sarrayToString(satemp, 1); /* add nl to each line */ + sarrayAddString(saout, parastring, L_INSERT); + sarrayDestroy(&satemp); + satemp = sarrayCreate(0); + } + sarrayAddString(satemp, linestr, L_COPY); + } + parastring = sarrayToString(satemp, 1); /* add nl to each line */ + sarrayAddString(saout, parastring, L_INSERT); + sarrayDestroy(&satemp); + sarrayDestroy(&salines); + return saout; +} + + +/*! + * \brief stringAllWhitespace() + * + * \param[in] textstr text string + * \param[out] pval 1 if all whitespace; 0 otherwise + * \return 0 if OK, 1 on error + */ +static l_int32 +stringAllWhitespace(char *textstr, + l_int32 *pval) +{ +l_int32 len, i; + + PROCNAME("stringAllWhitespace"); + + if (!textstr) + return ERROR_INT("textstr not defined", procName, 1); + if (!pval) + return ERROR_INT("&va not defined", procName, 1); + + len = strlen(textstr); + *pval = 1; + for (i = 0; i < len; i++) { + if (textstr[i] != ' ' && textstr[i] != '\t' && textstr[i] != '\n') { + *pval = 0; + return 0; + } + } + return 0; +} + + +/*! + * \brief stringLeadingWhitespace() + * + * \param[in] textstr text string + * \param[out] pval 1 if leading char is [space] or [tab]; 0 otherwise + * \return 0 if OK, 1 on error + */ +static l_int32 +stringLeadingWhitespace(char *textstr, + l_int32 *pval) +{ + PROCNAME("stringLeadingWhitespace"); + + if (!textstr) + return ERROR_INT("textstr not defined", procName, 1); + if (!pval) + return ERROR_INT("&va not defined", procName, 1); + + *pval = 0; + if (textstr[0] == ' ' || textstr[0] == '\t') + *pval = 1; + + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/tiffio.c b/3rdparty/hgOCR/leptonica/tiffio.c new file mode 100644 index 00000000..5a761ff7 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/tiffio.c @@ -0,0 +1,2843 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file tiffio.c + *
+ *
+ *     TIFFClientOpen() wrappers for FILE*:
+ *      static tsize_t    lept_read_proc()
+ *      static tsize_t    lept_write_proc()
+ *      static toff_t     lept_seek_proc()
+ *      static int        lept_close_proc()
+ *      static toff_t     lept_size_proc()
+ *
+ *     Reading tiff:
+ *             PIX       *pixReadTiff()             [ special top level ]
+ *             PIX       *pixReadStreamTiff()
+ *      static PIX       *pixReadFromTiffStream()
+ *
+ *     Writing tiff:
+ *             l_int32    pixWriteTiff()            [ special top level ]
+ *             l_int32    pixWriteTiffCustom()      [ special top level ]
+ *             l_int32    pixWriteStreamTiff()
+ *             l_int32    pixWriteStreamTiffWA()
+ *      static l_int32    pixWriteToTiffStream()
+ *      static l_int32    writeCustomTiffTags()
+ *
+ *     Reading and writing multipage tiff
+ *             PIX       *pixReadFromMultipageTiff()
+ *             PIXA      *pixaReadMultipageTiff()   [ special top level ]
+ *             l_int32    pixaWriteMultipageTiff()  [ special top level ]
+ *             l_int32    writeMultipageTiff()      [ special top level ]
+ *             l_int32    writeMultipageTiffSA()
+ *
+ *     Information about tiff file
+ *             l_int32    fprintTiffInfo()
+ *             l_int32    tiffGetCount()
+ *             l_int32    getTiffResolution()
+ *      static l_int32    getTiffStreamResolution()
+ *             l_int32    readHeaderTiff()
+ *             l_int32    freadHeaderTiff()
+ *             l_int32    readHeaderMemTiff()
+ *      static l_int32    tiffReadHeaderTiff()
+ *             l_int32    findTiffCompression()
+ *      static l_int32    getTiffCompressedFormat()
+ *
+ *     Extraction of tiff g4 data:
+ *             l_int32    extractG4DataFromFile()
+ *
+ *     Open tiff stream from file stream
+ *      static TIFF      *fopenTiff()
+ *
+ *     Wrapper for TIFFOpen:
+ *      static TIFF      *openTiff()
+ *
+ *     Memory I/O: reading memory --> pix and writing pix --> memory
+ *             [10 static helper functions]
+ *             PIX       *pixReadMemTiff();
+ *             PIX       *pixReadMemFromMultipageTiff();
+ *             PIXA      *pixaReadMemMultipageTiff()    [ special top level ]
+ *             l_int32    pixaWriteMemMultipageTiff()   [ special top level ]
+ *             l_int32    pixWriteMemTiff();
+ *             l_int32    pixWriteMemTiffCustom();
+ *
+ *  Note:  To include all necessary functions, use libtiff version 3.7.4
+ *         (or later)
+ *  Note:  On Windows with 2 bpp or 4 bpp images, the bytes in the
+ *         tiff-compressed file depend on the pad bits (but not the
+ *         decoded raster image when read).  Because it is sometimes
+ *         convenient to use a golden file with a byte-by-byte check
+ *         to verify invariance, we set the pad bits to 0 before writing,
+ *         in pixWriteToTiffStream().
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include +#include /* for isnan */ +#include +#ifndef _MSC_VER +#include +#else /* _MSC_VER */ +#include +#endif /* _MSC_VER */ +#include +#include "allheaders.h" + +/* --------------------------------------------*/ +#if HAVE_LIBTIFF /* defined in environ.h */ +/* --------------------------------------------*/ + +#include "tiff.h" +#include "tiffio.h" + +static const l_int32 DefaultResolution = 300; /* ppi */ +static const l_int32 ManyPagesInTiffFile = 3000; /* warn if big */ +static const l_uint32 MaxTiffBufferSize = 1 << 24; /* 16MiB */ + + + /* All functions with TIFF interfaces are static. */ +static PIX *pixReadFromTiffStream(TIFF *tif); +static l_int32 getTiffStreamResolution(TIFF *tif, l_int32 *pxres, + l_int32 *pyres); +static l_int32 tiffReadHeaderTiff(TIFF *tif, l_int32 *pwidth, + l_int32 *pheight, l_int32 *pbps, + l_int32 *pspp, l_int32 *pres, + l_int32 *pcmap, l_int32 *pformat); +static l_int32 writeCustomTiffTags(TIFF *tif, NUMA *natags, + SARRAY *savals, SARRAY *satypes, + NUMA *nasizes); +static l_int32 pixWriteToTiffStream(TIFF *tif, PIX *pix, l_int32 comptype, + NUMA *natags, SARRAY *savals, + SARRAY *satypes, NUMA *nasizes); +static TIFF *fopenTiff(FILE *fp, const char *modestring); +static TIFF *openTiff(const char *filename, const char *modestring); + + /* Static helper for tiff compression type */ +static l_int32 getTiffCompressedFormat(l_uint16 tiffcomp); + + /* Static function for memory I/O */ +static TIFF *fopenTiffMemstream(const char *filename, const char *operation, + l_uint8 **pdata, size_t *pdatasize); + + /* This structure defines a transform to be performed on a TIFF image + * (note that the same transformation can be represented in + * several different ways using this structure since + * vflip + hflip + counterclockwise == clockwise). */ +struct tiff_transform { + int vflip; /* if non-zero, image needs a vertical fip */ + int hflip; /* if non-zero, image needs a horizontal flip */ + int rotate; /* -1 -> counterclockwise 90-degree rotation, + 0 -> no rotation + 1 -> clockwise 90-degree rotation */ +}; + + /* This describes the transformations needed for a given orientation + * tag. The tag values start at 1, so you need to subtract 1 to get a + * valid index into this array. It is only valid when not using + * TIFFReadRGBAImageOriented(). */ +static struct tiff_transform tiff_orientation_transforms[] = { + {0, 0, 0}, + {0, 1, 0}, + {1, 1, 0}, + {1, 0, 0}, + {0, 1, -1}, + {0, 0, 1}, + {0, 1, 1}, + {0, 0, -1} +}; + + /* Same as above, except that test transformations are only valid + * when using TIFFReadRGBAImageOriented(). Transformations + * were determined empirically. See the libtiff mailing list for + * more discussion: http://www.asmail.be/msg0054683875.html */ +static struct tiff_transform tiff_partial_orientation_transforms[] = { + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 0, 0}, + {0, 1, -1}, + {0, 1, 1}, + {1, 0, 1}, + {0, 1, -1} +}; + + +/*-----------------------------------------------------------------------* + * TIFFClientOpen() wrappers for FILE* * + * Provided by Jürgen Buchmüller * + * * + * We previously used TIFFFdOpen(), which used low-level file * + * descriptors. It had portability issues with Windows, along * + * with other limitations from lack of stream control operations. * + * These callbacks to TIFFClientOpen() avoid the problems. * + * * + * Jürgen made the functions use 64 bit file operations where possible * + * or required, namely for seek and size. On Windows there are specific * + * _fseeki64() and _ftelli64() functions, whereas on unix it is * + * common to look for a macro _LARGEFILE_SOURCE being defined and * + * use fseeko() and ftello() in this case. * + *-----------------------------------------------------------------------*/ +static tsize_t +lept_read_proc(thandle_t cookie, + tdata_t buff, + tsize_t size) +{ + FILE* fp = (FILE *)cookie; + tsize_t done; + if (!buff || !cookie || !fp) + return (tsize_t)-1; + done = fread(buff, 1, size, fp); + return done; +} + +static tsize_t +lept_write_proc(thandle_t cookie, + tdata_t buff, + tsize_t size) +{ + FILE* fp = (FILE *)cookie; + tsize_t done; + if (!buff || !cookie || !fp) + return (tsize_t)-1; + done = fwrite(buff, 1, size, fp); + return done; +} + +static toff_t +lept_seek_proc(thandle_t cookie, + toff_t offs, + int whence) +{ + FILE* fp = (FILE *)cookie; +#if defined(_MSC_VER) + __int64 pos = 0; + if (!cookie || !fp) + return (tsize_t)-1; + switch (whence) { + case SEEK_SET: + pos = 0; + break; + case SEEK_CUR: + pos = ftell(fp); + break; + case SEEK_END: + _fseeki64(fp, 0, SEEK_END); + pos = _ftelli64(fp); + break; + } + pos = (__int64)(pos + offs); + _fseeki64(fp, pos, SEEK_SET); + if (pos == _ftelli64(fp)) + return (tsize_t)pos; +#elif defined(_LARGEFILE_SOURCE) + off64_t pos = 0; + if (!cookie || !fp) + return (tsize_t)-1; + switch (whence) { + case SEEK_SET: + pos = 0; + break; + case SEEK_CUR: + pos = ftello(fp); + break; + case SEEK_END: + fseeko(fp, 0, SEEK_END); + pos = ftello(fp); + break; + } + pos = (off64_t)(pos + offs); + fseeko(fp, pos, SEEK_SET); + if (pos == ftello(fp)) + return (tsize_t)pos; +#else + off_t pos = 0; + if (!cookie || !fp) + return (tsize_t)-1; + switch (whence) { + case SEEK_SET: + pos = 0; + break; + case SEEK_CUR: + pos = ftell(fp); + break; + case SEEK_END: + fseek(fp, 0, SEEK_END); + pos = ftell(fp); + break; + } + pos = (off_t)(pos + offs); + fseek(fp, pos, SEEK_SET); + if (pos == ftell(fp)) + return (tsize_t)pos; +#endif + return (tsize_t)-1; +} + +static int +lept_close_proc(thandle_t cookie) +{ + FILE* fp = (FILE *)cookie; + if (!cookie || !fp) + return 0; + fseek(fp, 0, SEEK_SET); + return 0; +} + +static toff_t +lept_size_proc(thandle_t cookie) +{ + FILE* fp = (FILE *)cookie; +#if defined(_MSC_VER) + __int64 pos; + __int64 size; + if (!cookie || !fp) + return (tsize_t)-1; + pos = _ftelli64(fp); + _fseeki64(fp, 0, SEEK_END); + size = _ftelli64(fp); + _fseeki64(fp, pos, SEEK_SET); +#elif defined(_LARGEFILE_SOURCE) + off64_t pos; + off64_t size; + if (!fp) + return (tsize_t)-1; + pos = ftello(fp); + fseeko(fp, 0, SEEK_END); + size = ftello(fp); + fseeko(fp, pos, SEEK_SET); +#else + off_t pos; + off_t size; + if (!cookie || !fp) + return (tsize_t)-1; + pos = ftell(fp); + fseek(fp, 0, SEEK_END); + size = ftell(fp); + fseek(fp, pos, SEEK_SET); +#endif + return (toff_t)size; +} + + +/*--------------------------------------------------------------* + * Reading from file * + *--------------------------------------------------------------*/ +/*! + * \brief pixReadTiff() + * + * \param[in] filename + * \param[in] n page number 0 based + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a version of pixRead(), specialized for tiff
+ *          files, that allows specification of the page to be returned
+ *      (2) No warning messages on failure, because of how multi-page
+ *          TIFF reading works. You are supposed to keep trying until
+ *          it stops working.
+ * 
+ */ +PIX * +pixReadTiff(const char *filename, + l_int32 n) +{ +FILE *fp; +PIX *pix; + + PROCNAME("pixReadTiff"); + + if (!filename) + return (PIX *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIX *)ERROR_PTR("image file not found", procName, NULL); + pix = pixReadStreamTiff(fp, n); + fclose(fp); + return pix; +} + + +/*--------------------------------------------------------------* + * Reading from stream * + *--------------------------------------------------------------*/ +/*! + * \brief pixReadStreamTiff() + * + * \param[in] fp file stream + * \param[in] n page number: 0 based + * \return pix, or NULL on error or if there are no more images in the file + * + *
+ * Notes:
+ *      (1) No warning messages on failure, because of how multi-page
+ *          TIFF reading works. You are supposed to keep trying until
+ *          it stops working.
+ * 
+ */ +PIX * +pixReadStreamTiff(FILE *fp, + l_int32 n) +{ +PIX *pix; +TIFF *tif; + + PROCNAME("pixReadStreamTiff"); + + if (!fp) + return (PIX *)ERROR_PTR("stream not defined", procName, NULL); + + if ((tif = fopenTiff(fp, "r")) == NULL) + return (PIX *)ERROR_PTR("tif not opened", procName, NULL); + + if (TIFFSetDirectory(tif, n) == 0) { + TIFFCleanup(tif); + return NULL; + } + if ((pix = pixReadFromTiffStream(tif)) == NULL) { + TIFFCleanup(tif); + return NULL; + } + TIFFCleanup(tif); + return pix; +} + + +/*! + * \brief pixReadFromTiffStream() + * + * \param[in] tif TIFF handle + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) We can read the following images (up to 32 bits/pixel):
+ *          1 spp (grayscale): 1, 2, 4, 8, 16 bps
+ *          1 spp (colormapped): 1, 2, 4, 8 bps
+ *          2 spp (gray+alpha): 8 bps
+ *          3 spp (rgb) and 4 spp (rgba): 8 or 16 bps
+ *      (2) We do not handle 16 bps for spp == 2.
+ *      (3) 2 bpp gray+alpha are rasterized as 32 bit/pixel rgba, with
+ *          the gray value replicated in r, g and b.
+ *      (4) For colormapped images, we support 8 bits/color in the palette.
+ *          Tiff colormaps have 16 bits/color, and we reduce them to 8.
+ *      (5) Quoting the libtiff documentation at
+ *               http://libtiff.maptools.org/libtiff.html
+ *          "libtiff provides a high-level interface for reading image data
+ *          from a TIFF file. This interface handles the details of data
+ *          organization and format for a wide variety of TIFF files;
+ *          at least the large majority of those files that one would
+ *          normally encounter. Image data is, by default, returned as
+ *          ABGR pixels packed into 32-bit words (8 bits per sample).
+ *          Rectangular rasters can be read or data can be intercepted
+ *          at an intermediate level and packed into memory in a format
+ *          more suitable to the application. The library handles all
+ *          the details of the format of data stored on disk and,
+ *          in most cases, if any colorspace conversions are required:
+ *          bilevel to RGB, greyscale to RGB, CMYK to RGB, YCbCr to RGB,
+ *          16-bit samples to 8-bit samples, associated/unassociated alpha,
+ *          etc."
+ * 
+ */ +static PIX * +pixReadFromTiffStream(TIFF *tif) +{ +char *text; +l_uint8 *linebuf, *data, *rowptr; +l_uint16 spp, bps, photometry, tiffcomp, orientation, sample_fmt; +l_uint16 *redmap, *greenmap, *bluemap; +l_int32 d, wpl, bpl, comptype, i, j, k, ncolors, rval, gval, bval, aval; +l_int32 xres, yres; +l_uint32 w, h, tiffbpl, tiffword, read_oriented; +l_uint32 *line, *ppixel, *tiffdata, *pixdata; +PIX *pix; +PIXCMAP *cmap; + + PROCNAME("pixReadFromTiffStream"); + + if (!tif) + return (PIX *)ERROR_PTR("tif not defined", procName, NULL); + + read_oriented = 0; + + /* Only accept uint image data: + * SAMPLEFORMAT_UINT = 1; + * SAMPLEFORMAT_INT = 2; + * SAMPLEFORMAT_IEEEFP = 3; + * SAMPLEFORMAT_VOID = 4; */ + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLEFORMAT, &sample_fmt); + if (sample_fmt != SAMPLEFORMAT_UINT) { + L_ERROR("sample format = %d is not uint\n", procName, sample_fmt); + return NULL; + } + + /* Can't read tiff in tiled format. For what is involved, see, e.g: + * https://www.cs.rochester.edu/~nelson/courses/vision/\ + * resources/tiff/libtiff.html#Tiles + * A tiled tiff can be converted to a normal (strip) tif: + * tiffcp -s */ + if (TIFFIsTiled(tif)) { + L_ERROR("tiled format is not supported\n", procName); + return NULL; + } + + /* Use default fields for bps and spp */ + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); + if (bps != 1 && bps != 2 && bps != 4 && bps != 8 && bps != 16) { + L_ERROR("invalid bps = %d\n", procName, bps); + return NULL; + } + if (spp == 2 && bps != 8) { + L_WARNING("only handle 8 bps for 2 spp\n", procName); + return NULL; + } + if (spp == 1) + d = bps; + else if (spp == 2) /* gray plus alpha */ + d = 32; /* will convert to RGBA */ + else if (spp == 3 || spp == 4) + d = 32; + else + return (PIX *)ERROR_PTR("spp not in set {1,2,3,4}", procName, NULL); + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + tiffbpl = TIFFScanlineSize(tif); + if (tiffbpl < (bps * spp * w + 7) / 8) + return (PIX *)ERROR_PTR("bad tiff file: tiffbpl is too small", + procName, NULL); + if (tiffbpl > MaxTiffBufferSize) + return (PIX *)ERROR_PTR("bad tiff file: tiffbpl is too large", + procName, NULL); + + if ((pix = pixCreate(w, h, d)) == NULL) + return (PIX *)ERROR_PTR("pix not made", procName, NULL); + pixSetInputFormat(pix, IFF_TIFF); + data = (l_uint8 *)pixGetData(pix); + wpl = pixGetWpl(pix); + bpl = 4 * wpl; + + TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); + + /* Thanks to Jeff Breidenbach, we now support reading 8 bpp + * images encoded in the long-deprecated old jpeg format, + * COMPRESSION_OJPEG. TIFFReadScanline() fails on this format, + * so we use RGBA reading, which generates a 4 spp image, and + * pull out the red component. */ + if (spp == 1 && tiffcomp != COMPRESSION_OJPEG) { + linebuf = (l_uint8 *)LEPT_CALLOC(tiffbpl + 1, sizeof(l_uint8)); + for (i = 0; i < h; i++) { + if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { + LEPT_FREE(linebuf); + pixDestroy(&pix); + return (PIX *)ERROR_PTR("line read fail", procName, NULL); + } + memcpy(data, linebuf, tiffbpl); + data += bpl; + } + if (bps <= 8) + pixEndianByteSwap(pix); + else /* bps == 16 */ + pixEndianTwoByteSwap(pix); + LEPT_FREE(linebuf); + } else if (spp == 2 && bps == 8) { /* gray plus alpha */ + L_INFO("gray+alpha is not supported; converting to RGBA\n", procName); + pixSetSpp(pix, 4); + linebuf = (l_uint8 *)LEPT_CALLOC(tiffbpl + 1, sizeof(l_uint8)); + pixdata = pixGetData(pix); + for (i = 0; i < h; i++) { + if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { + LEPT_FREE(linebuf); + pixDestroy(&pix); + return (PIX *)ERROR_PTR("line read fail", procName, NULL); + } + rowptr = linebuf; + ppixel = pixdata + i * wpl; + for (j = k = 0; j < w; j++) { + /* Copy gray value into r, g and b */ + SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); + SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); + SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); + ppixel++; + } + } + LEPT_FREE(linebuf); + } else { /* rgb, rgba, or old jpeg */ + if ((tiffdata = (l_uint32 *)LEPT_CALLOC((size_t)w * h, + sizeof(l_uint32))) == NULL) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("calloc fail for tiffdata", procName, NULL); + } + /* TIFFReadRGBAImageOriented() converts to 8 bps */ + if (!TIFFReadRGBAImageOriented(tif, w, h, (uint32 *)tiffdata, + ORIENTATION_TOPLEFT, 0)) { + LEPT_FREE(tiffdata); + pixDestroy(&pix); + return (PIX *)ERROR_PTR("failed to read tiffdata", procName, NULL); + } else { + read_oriented = 1; + } + + if (spp == 1) { /* 8 bpp, old jpeg format */ + pixdata = pixGetData(pix); + for (i = 0; i < h; i++) { + line = pixdata + i * wpl; + for (j = 0; j < w; j++) { + tiffword = tiffdata[i * w + j]; + rval = TIFFGetR(tiffword); + SET_DATA_BYTE(line, j, rval); + } + } + } else { /* rgb or rgba */ + if (spp == 4) pixSetSpp(pix, 4); + line = pixGetData(pix); + for (i = 0; i < h; i++, line += wpl) { + for (j = 0, ppixel = line; j < w; j++) { + /* TIFFGet* are macros */ + tiffword = tiffdata[i * w + j]; + rval = TIFFGetR(tiffword); + gval = TIFFGetG(tiffword); + bval = TIFFGetB(tiffword); + if (spp == 3) { + composeRGBPixel(rval, gval, bval, ppixel); + } else { /* spp == 4 */ + aval = TIFFGetA(tiffword); + composeRGBAPixel(rval, gval, bval, aval, ppixel); + } + ppixel++; + } + } + } + LEPT_FREE(tiffdata); + } + + if (getTiffStreamResolution(tif, &xres, &yres) == 0) { + pixSetXRes(pix, xres); + pixSetYRes(pix, yres); + } + + /* Find and save the compression type */ + TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); + comptype = getTiffCompressedFormat(tiffcomp); + pixSetInputFormat(pix, comptype); + + if (TIFFGetField(tif, TIFFTAG_COLORMAP, &redmap, &greenmap, &bluemap)) { + /* Save the colormap as a pix cmap. Because the + * tiff colormap components are 16 bit unsigned, + * and go from black (0) to white (0xffff), the + * the pix cmap takes the most significant byte. */ + if (bps > 8) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("colormap size > 256", procName, NULL); + } + if ((cmap = pixcmapCreate(bps)) == NULL) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("colormap not made", procName, NULL); + } + ncolors = 1 << bps; + for (i = 0; i < ncolors; i++) + pixcmapAddColor(cmap, redmap[i] >> 8, greenmap[i] >> 8, + bluemap[i] >> 8); + pixSetColormap(pix, cmap); + } else { /* No colormap: check photometry and invert if necessary */ + if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometry)) { + /* Guess default photometry setting. Assume min_is_white + * if compressed 1 bpp; min_is_black otherwise. */ + if (tiffcomp == COMPRESSION_CCITTFAX3 || + tiffcomp == COMPRESSION_CCITTFAX4 || + tiffcomp == COMPRESSION_CCITTRLE || + tiffcomp == COMPRESSION_CCITTRLEW) { + photometry = PHOTOMETRIC_MINISWHITE; + } else { + photometry = PHOTOMETRIC_MINISBLACK; + } + } + if ((d == 1 && photometry == PHOTOMETRIC_MINISBLACK) || + (d == 8 && photometry == PHOTOMETRIC_MINISWHITE)) + pixInvert(pix, pix); + } + + if (TIFFGetField(tif, TIFFTAG_ORIENTATION, &orientation)) { + if (orientation >= 1 && orientation <= 8) { + struct tiff_transform *transform = (read_oriented) ? + &tiff_partial_orientation_transforms[orientation - 1] : + &tiff_orientation_transforms[orientation - 1]; + if (transform->vflip) pixFlipTB(pix, pix); + if (transform->hflip) pixFlipLR(pix, pix); + if (transform->rotate) { + PIX *oldpix = pix; + pix = pixRotate90(oldpix, transform->rotate); + pixDestroy(&oldpix); + } + } + } + + text = NULL; + TIFFGetField(tif, TIFFTAG_IMAGEDESCRIPTION, &text); + if (text) pixSetText(pix, text); + return pix; +} + + + +/*--------------------------------------------------------------* + * Writing to file * + *--------------------------------------------------------------*/ +/*! + * \brief pixWriteTiff() + * + * \param[in] filename to write to + * \param[in] pix any depth, colormap will be removed + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \param[in] modestr "a" or "w" + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For multipage tiff, write the first pix with mode "w" and
+ *          all subsequent pix with mode "a".
+ *      (2) For multipage tiff, there is considerable overhead in the
+ *          machinery to append an image and add the directory entry,
+ *          and the time required for each image increases linearly
+ *          with the number of images in the file.
+ * 
+ */ +l_ok +pixWriteTiff(const char *filename, + PIX *pix, + l_int32 comptype, + const char *modestr) +{ + return pixWriteTiffCustom(filename, pix, comptype, modestr, + NULL, NULL, NULL, NULL); +} + + +/*! + * \brief pixWriteTiffCustom() + * + * \param[in] filename to write to + * \param[in] pix + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \param[in] modestr "a" or "w" + * \param[in] natags [optional] NUMA of custom tiff tags + * \param[in] savals [optional] SARRAY of values + * \param[in] satypes [optional] SARRAY of types + * \param[in] nasizes [optional] NUMA of sizes + * \return 0 if OK, 1 on error + * + * Usage: + * 1 This writes a page image to a tiff file, with optional + * extra tags defined in tiff.h + * 2 For multipage tiff, write the first pix with mode "w" and + * all subsequent pix with mode "a". + * 3 For the custom tiff tags: + * a The three arrays {natags, savals, satypes} must all be + * either NULL or defined and of equal size. + * b If they are defined, the tags are an array of integers, + * the vals are an array of values in string format, and + * the types are an array of types in string format. + * c All valid tags are definined in tiff.h. + * d The types allowed are the set of strings: + * "char*" + * "l_uint8*" + * "l_uint16" + * "l_uint32" + * "l_int32" + * "l_float64" + * "l_uint16-l_uint16" note the dash; use it between the + * two l_uint16 vals in the val string + * Of these, "char*" and "l_uint16" are the most commonly used. + * e The last array, nasizes, is also optional. It is for + * tags that take an array of bytes for a value, a number of + * elements in the array, and a type that is either "char*" + * or "l_uint8*" probably either will work. + * Use NULL if there are no such tags. + * f VERY IMPORTANT: if there are any tags that require the + * extra size value, stored in nasizes, they must be + * written first! + */ +l_ok +pixWriteTiffCustom(const char *filename, + PIX *pix, + l_int32 comptype, + const char *modestr, + NUMA *natags, + SARRAY *savals, + SARRAY *satypes, + NUMA *nasizes) +{ +l_int32 ret; +TIFF *tif; + + PROCNAME("pixWriteTiffCustom"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if ((tif = openTiff(filename, modestr)) == NULL) + return ERROR_INT("tif not opened", procName, 1); + ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, + satypes, nasizes); + TIFFClose(tif); + return ret; +} + + +/*--------------------------------------------------------------* + * Writing to stream * + *--------------------------------------------------------------*/ +/*! + * \brief pixWriteStreamTiff() + * + * \param[in] fp file stream + * \param[in] pix + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This writes a single image to a file stream opened for writing.
+ *      (2) If the pix has a colormap, it is preserved in the output file.
+ *      (3) For images with bpp > 1, this resets the comptype, if
+ *          necessary, to write uncompressed data.
+ *      (4) G3 and G4 are only defined for 1 bpp.
+ *      (5) We only allow PACKBITS for bpp = 1, because for bpp > 1
+ *          it typically expands images that are not synthetically generated.
+ *      (6) G4 compression is typically about twice as good as G3.
+ *          G4 is excellent for binary compression of text/line-art,
+ *          but terrible for halftones and dithered patterns.  (In
+ *          fact, G4 on halftones can give a file that is larger
+ *          than uncompressed!)  If a binary image has dithered
+ *          regions, it is usually better to compress with png.
+ * 
+ */ +l_ok +pixWriteStreamTiff(FILE *fp, + PIX *pix, + l_int32 comptype) +{ + return pixWriteStreamTiffWA(fp, pix, comptype, "w"); +} + + +/*! + * \brief pixWriteStreamTiffWA() + * + * \param[in] fp file stream opened for append or write + * \param[in] pix + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \param[in] modestr "w" or "a" + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteStreamTiff()
+ * 
+ */ +l_ok +pixWriteStreamTiffWA(FILE *fp, + PIX *pix, + l_int32 comptype, + const char *modestr) +{ +TIFF *tif; + + PROCNAME("pixWriteStreamTiffWA"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1 ); + if (!pix) + return ERROR_INT("pix not defined", procName, 1 ); + if (strcmp(modestr, "w") && strcmp(modestr, "a")) + return ERROR_INT("modestr not 'w' or 'a'", procName, 1 ); + + if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && + comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP && + comptype != IFF_TIFF_JPEG) { + L_WARNING("invalid compression type for bpp > 1\n", procName); + comptype = IFF_TIFF_ZIP; + } + + if ((tif = fopenTiff(fp, modestr)) == NULL) + return ERROR_INT("tif not opened", procName, 1); + + if (pixWriteToTiffStream(tif, pix, comptype, NULL, NULL, NULL, NULL)) { + TIFFCleanup(tif); + return ERROR_INT("tif write error", procName, 1); + } + + TIFFCleanup(tif); + return 0; +} + + +/*! + * \brief pixWriteToTiffStream() + * + * \param[in] tif data structure, opened to a file + * \param[in] pix + * \param[in] comptype IFF_TIFF: for any image; no compression + * IFF_TIFF_RLE, IFF_TIFF_PACKBITS: for 1 bpp only + * IFF_TIFF_G4 and IFF_TIFF_G3: for 1 bpp only + * IFF_TIFF_LZW, IFF_TIFF_ZIP: lossless for any image + * IFF_TIFF_JPEG: lossy 8 bpp gray or rgb + * \param[in] natags [optional] NUMA of custom tiff tags + * \param[in] savals [optional] SARRAY of values + * \param[in] satypes [optional] SARRAY of types + * \param[in] nasizes [optional] NUMA of sizes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This static function should only be called through higher
+ *          level functions in this file; namely, pixWriteTiffCustom(),
+ *          pixWriteTiff(), pixWriteStreamTiff(), pixWriteMemTiff()
+ *          and pixWriteMemTiffCustom().
+ *      (2) We only allow PACKBITS for bpp = 1, because for bpp > 1
+ *          it typically expands images that are not synthetically generated.
+ *      (3) See pixWriteTiffCustom() for details on how to use
+ *          the last four parameters for customized tiff tags.
+ *      (4) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16
+ *          and 32.  However, it is possible, and in some cases desirable,
+ *          to write out a tiff file using an rgb pix that has 24 bpp.
+ *          This can be created by appending the raster data for a 24 bpp
+ *          image (with proper scanline padding) directly to a 24 bpp
+ *          pix that was created without a data array.  See note in
+ *          pixWriteStreamPng() for an example.
+ * 
+ */ +static l_int32 +pixWriteToTiffStream(TIFF *tif, + PIX *pix, + l_int32 comptype, + NUMA *natags, + SARRAY *savals, + SARRAY *satypes, + NUMA *nasizes) +{ +l_uint8 *linebuf, *data; +l_uint16 redmap[256], greenmap[256], bluemap[256]; +l_int32 w, h, d, spp, i, j, k, wpl, bpl, tiffbpl, ncolors, cmapsize; +l_int32 *rmap, *gmap, *bmap; +l_int32 xres, yres; +l_uint32 *line, *ppixel; +PIX *pixt; +PIXCMAP *cmap; +char *text; + + PROCNAME("pixWriteToTiffStream"); + + if (!tif) + return ERROR_INT("tif stream not defined", procName, 1); + if (!pix) + return ERROR_INT( "pix not defined", procName, 1 ); + + pixSetPadBits(pix, 0); + pixGetDimensions(pix, &w, &h, &d); + spp = pixGetSpp(pix); + xres = pixGetXRes(pix); + yres = pixGetYRes(pix); + if (xres == 0) xres = DefaultResolution; + if (yres == 0) yres = DefaultResolution; + + /* ------------------ Write out the header ------------- */ + TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, (l_uint32)RESUNIT_INCH); + TIFFSetField(tif, TIFFTAG_XRESOLUTION, (l_float64)xres); + TIFFSetField(tif, TIFFTAG_YRESOLUTION, (l_float64)yres); + + TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (l_uint32)w); + TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (l_uint32)h); + TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); + + if ((text = pixGetText(pix)) != NULL) + TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, text); + + if (d == 1) + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); + else if ((d == 32 && spp == 3) || d == 24) { + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)3); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, + (l_uint16)8, (l_uint16)8, (l_uint16)8); + } else if (d == 32 && spp == 4) { + l_uint16 val[1]; + val[0] = EXTRASAMPLE_ASSOCALPHA; + TIFFSetField(tif, TIFFTAG_EXTRASAMPLES, (l_uint16)1, &val); + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)4); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, + (l_uint16)8, (l_uint16)8, (l_uint16)8, (l_uint16)8); + } else if (d == 16) { /* we only support spp = 1, bps = 16 */ + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + } else if ((cmap = pixGetColormap(pix)) == NULL) { + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); + } else { /* Save colormap in the tiff; not more than 256 colors */ + if (d > 8) { + L_ERROR("d = %d > 8 with colormap!; reducing to 8\n", procName, d); + d = 8; + } + pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); + ncolors = pixcmapGetCount(cmap); + ncolors = L_MIN(256, ncolors); /* max 256 */ + cmapsize = 1 << d; + cmapsize = L_MIN(256, cmapsize); /* power of 2; max 256 */ + if (ncolors > cmapsize) { + L_WARNING("too many colors in cmap for tiff; truncating\n", + procName); + ncolors = cmapsize; + } + for (i = 0; i < ncolors; i++) { + redmap[i] = (rmap[i] << 8) | rmap[i]; + greenmap[i] = (gmap[i] << 8) | gmap[i]; + bluemap[i] = (bmap[i] << 8) | bmap[i]; + } + for (i = ncolors; i < cmapsize; i++) /* init, even though not used */ + redmap[i] = greenmap[i] = bluemap[i] = 0; + LEPT_FREE(rmap); + LEPT_FREE(gmap); + LEPT_FREE(bmap); + + TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); + TIFFSetField(tif, TIFFTAG_COLORMAP, redmap, greenmap, bluemap); + } + + if (d <= 16) { + TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); + TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); + } + + TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); + if (comptype == IFF_TIFF) { /* no compression */ + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + } else if (comptype == IFF_TIFF_G4) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4); + } else if (comptype == IFF_TIFF_G3) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3); + } else if (comptype == IFF_TIFF_RLE) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTRLE); + } else if (comptype == IFF_TIFF_PACKBITS) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS); + } else if (comptype == IFF_TIFF_LZW) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW); + } else if (comptype == IFF_TIFF_ZIP) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_ADOBE_DEFLATE); + } else if (comptype == IFF_TIFF_JPEG) { + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_JPEG); + } else { + L_WARNING("unknown tiff compression; using none\n", procName); + TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); + } + + /* This is a no-op if arrays are NULL */ + writeCustomTiffTags(tif, natags, savals, satypes, nasizes); + + /* ------------- Write out the image data ------------- */ + tiffbpl = TIFFScanlineSize(tif); + wpl = pixGetWpl(pix); + bpl = 4 * wpl; + if (tiffbpl > bpl) + fprintf(stderr, "Big trouble: tiffbpl = %d, bpl = %d\n", tiffbpl, bpl); + if ((linebuf = (l_uint8 *)LEPT_CALLOC(1, bpl)) == NULL) + return ERROR_INT("calloc fail for linebuf", procName, 1); + + /* Use single strip for image */ + TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, h); + + if (d != 24 && d != 32) { + if (d == 16) + pixt = pixEndianTwoByteSwapNew(pix); + else + pixt = pixEndianByteSwapNew(pix); + data = (l_uint8 *)pixGetData(pixt); + for (i = 0; i < h; i++, data += bpl) { + memcpy(linebuf, data, tiffbpl); + if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) + break; + } + pixDestroy(&pixt); + } else if (d == 24) { /* See note 4 above: special case of 24 bpp rgb */ + for (i = 0; i < h; i++) { + line = pixGetData(pix) + i * wpl; + if (TIFFWriteScanline(tif, (l_uint8 *)line, i, 0) < 0) + break; + } + } else { /* 32 bpp rgb or rgba */ + for (i = 0; i < h; i++) { + line = pixGetData(pix) + i * wpl; + for (j = 0, k = 0, ppixel = line; j < w; j++) { + linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); + linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); + linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); + if (spp == 4) + linebuf[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); + ppixel++; + } + if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) + break; + } + } + +/* TIFFWriteDirectory(tif); */ + LEPT_FREE(linebuf); + + return 0; +} + + +/*! + * \brief writeCustomTiffTags() + * + * \param[in] tif + * \param[in] natags [optional] NUMA of custom tiff tags + * \param[in] savals [optional] SARRAY of values + * \param[in] satypes [optional] SARRAY of types + * \param[in] nasizes [optional] NUMA of sizes + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This static function should be called indirectly through
+ *          higher level functions, such as pixWriteTiffCustom(),
+ *          which call pixWriteToTiffStream().  See details in
+ *          pixWriteTiffCustom() for using the 4 input arrays.
+ *      (2) This is a no-op if the first 3 arrays are all NULL.
+ *      (3) Otherwise, the first 3 arrays must be defined and all
+ *          of equal size.
+ *      (4) The fourth array is always optional.
+ *      (5) The most commonly used types are "char*" and "u_int16".
+ *          See tiff.h for a full listing of the tiff tags.
+ *          Note that many of these tags, in particular the bit tags,
+ *          are intended to be private, and cannot be set by this function.
+ *          Examples are the STRIPOFFSETS and STRIPBYTECOUNTS tags,
+ *          which are bit tags that are automatically set in the header,
+ *          and can be extracted using tiffdump.
+ * 
+ */ +static l_int32 +writeCustomTiffTags(TIFF *tif, + NUMA *natags, + SARRAY *savals, + SARRAY *satypes, + NUMA *nasizes) +{ +char *sval, *type; +l_int32 i, n, ns, size, tagval, val; +l_float64 dval; +l_uint32 uval, uval2; + + PROCNAME("writeCustomTiffTags"); + + if (!tif) + return ERROR_INT("tif stream not defined", procName, 1); + if (!natags && !savals && !satypes) + return 0; + if (!natags || !savals || !satypes) + return ERROR_INT("not all arrays defined", procName, 1); + n = numaGetCount(natags); + if ((sarrayGetCount(savals) != n) || (sarrayGetCount(satypes) != n)) + return ERROR_INT("not all sa the same size", procName, 1); + + /* The sized arrays (4 args to TIFFSetField) are written first */ + if (nasizes) { + ns = numaGetCount(nasizes); + if (ns > n) + return ERROR_INT("too many 4-arg tag calls", procName, 1); + for (i = 0; i < ns; i++) { + numaGetIValue(natags, i, &tagval); + sval = sarrayGetString(savals, i, L_NOCOPY); + type = sarrayGetString(satypes, i, L_NOCOPY); + numaGetIValue(nasizes, i, &size); + if (strcmp(type, "char*") && strcmp(type, "l_uint8*")) + L_WARNING("array type not char* or l_uint8*; ignore\n", + procName); + TIFFSetField(tif, tagval, size, sval); + } + } else { + ns = 0; + } + + /* The typical tags (3 args to TIFFSetField) are now written */ + for (i = ns; i < n; i++) { + numaGetIValue(natags, i, &tagval); + sval = sarrayGetString(savals, i, L_NOCOPY); + type = sarrayGetString(satypes, i, L_NOCOPY); + if (!strcmp(type, "char*")) { + TIFFSetField(tif, tagval, sval); + } else if (!strcmp(type, "l_uint16")) { + if (sscanf(sval, "%u", &uval) == 1) { + TIFFSetField(tif, tagval, (l_uint16)uval); + } else { + fprintf(stderr, "val %s not of type %s\n", sval, type); + return ERROR_INT("custom tag(s) not written", procName, 1); + } + } else if (!strcmp(type, "l_uint32")) { + if (sscanf(sval, "%u", &uval) == 1) { + TIFFSetField(tif, tagval, uval); + } else { + fprintf(stderr, "val %s not of type %s\n", sval, type); + return ERROR_INT("custom tag(s) not written", procName, 1); + } + } else if (!strcmp(type, "l_int32")) { + if (sscanf(sval, "%d", &val) == 1) { + TIFFSetField(tif, tagval, val); + } else { + fprintf(stderr, "val %s not of type %s\n", sval, type); + return ERROR_INT("custom tag(s) not written", procName, 1); + } + } else if (!strcmp(type, "l_float64")) { + if (sscanf(sval, "%lf", &dval) == 1) { + TIFFSetField(tif, tagval, dval); + } else { + fprintf(stderr, "val %s not of type %s\n", sval, type); + return ERROR_INT("custom tag(s) not written", procName, 1); + } + } else if (!strcmp(type, "l_uint16-l_uint16")) { + if (sscanf(sval, "%u-%u", &uval, &uval2) == 2) { + TIFFSetField(tif, tagval, (l_uint16)uval, (l_uint16)uval2); + } else { + fprintf(stderr, "val %s not of type %s\n", sval, type); + return ERROR_INT("custom tag(s) not written", procName, 1); + } + } else { + return ERROR_INT("unknown type; tag(s) not written", procName, 1); + } + } + return 0; +} + + +/*--------------------------------------------------------------* + * Reading and writing multipage tiff * + *--------------------------------------------------------------*/ +/*! + * \brief pixReadFromMultipageTiff() + * + * \param[in] fname filename + * \param[in,out] poffset set offset to 0 for first image + * \return pix, or NULL on error or if previous call returned the last image + * + *
+ * Notes:
+ *      (1) This allows overhead for traversal of a multipage tiff file
+ *          to be linear in the number of images.  This will also work
+ *          with a singlepage tiff file.
+ *      (2) No TIFF internal data structures are exposed to the caller
+ *          (thanks to Jeff Breidenbach).
+ *      (3) offset is the byte offset of a particular image in a multipage
+ *          tiff file. To get the first image in the file, input the
+ *          special offset value of 0.
+ *      (4) The offset is updated to point to the next image, for a
+ *          subsequent call.
+ *      (5) On the last image, the offset returned is 0.  Exit the loop
+ *          when the returned offset is 0.
+ *      (6) For reading a multipage tiff from a memory buffer, see
+ *            pixReadMemFromMultipageTiff()
+ *      (7) Example usage for reading all the images in the tif file:
+ *            size_t offset = 0;
+ *            do {
+ *                Pix *pix = pixReadFromMultipageTiff(filename, &offset);
+ *                // do something with pix
+ *            } while (offset != 0);
+ * 
+ */ +PIX * +pixReadFromMultipageTiff(const char *fname, + size_t *poffset) +{ +l_int32 retval; +size_t offset; +PIX *pix; +TIFF *tif; + + PROCNAME("pixReadFromMultipageTiff"); + + if (!fname) + return (PIX *)ERROR_PTR("fname not defined", procName, NULL); + if (!poffset) + return (PIX *)ERROR_PTR("&offset not defined", procName, NULL); + + if ((tif = openTiff(fname, "r")) == NULL) { + L_ERROR("tif open failed for %s\n", procName, fname); + return NULL; + } + + /* Set ptrs in the TIFF to the beginning of the image */ + offset = *poffset; + retval = (offset == 0) ? TIFFSetDirectory(tif, 0) + : TIFFSetSubDirectory(tif, offset); + if (retval == 0) { + TIFFCleanup(tif); + return NULL; + } + + if ((pix = pixReadFromTiffStream(tif)) == NULL) { + TIFFCleanup(tif); + return NULL; + } + + /* Advance to the next image and return the new offset */ + TIFFReadDirectory(tif); + *poffset = TIFFCurrentDirOffset(tif); + TIFFClose(tif); + return pix; +} + + +/*! + * \brief pixaReadMultipageTiff() + * + * \param[in] filename input tiff file + * \return pixa of page images, or NULL on error + */ +PIXA * +pixaReadMultipageTiff(const char *filename) +{ +l_int32 i, npages; +FILE *fp; +PIX *pix; +PIXA *pixa; +TIFF *tif; + + PROCNAME("pixaReadMultipageTiff"); + + if (!filename) + return (PIXA *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (PIXA *)ERROR_PTR("stream not opened", procName, NULL); + if (fileFormatIsTiff(fp)) { + tiffGetCount(fp, &npages); + L_INFO(" Tiff: %d pages\n", procName, npages); + } else { + return (PIXA *)ERROR_PTR("file not tiff", procName, NULL); + } + + if ((tif = fopenTiff(fp, "r")) == NULL) + return (PIXA *)ERROR_PTR("tif not opened", procName, NULL); + + pixa = pixaCreate(npages); + pix = NULL; + for (i = 0; i < npages; i++) { + if ((pix = pixReadFromTiffStream(tif)) != NULL) { + pixaAddPix(pixa, pix, L_INSERT); + } else { + L_WARNING("pix not read for page %d\n", procName, i); + } + + /* Advance to the next directory (i.e., the next image) */ + if (TIFFReadDirectory(tif) == 0) + break; + } + + fclose(fp); + TIFFCleanup(tif); + return pixa; +} + + +/*! + * \brief pixaWriteMultipageTiff() + * + * \param[in] fname input tiff file + * \param[in] pixa any depth; colormap will be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The tiff directory overhead is O(n^2).  I have not been
+ *          able to reduce it to O(n).  The overhead for n = 2000 is
+ *          about 1 second.
+ * 
+ */ +l_ok +pixaWriteMultipageTiff(const char *fname, + PIXA *pixa) +{ +const char *modestr; +l_int32 i, n; +PIX *pix1; + + PROCNAME("pixaWriteMultipageTiff"); + + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + modestr = (i == 0) ? "w" : "a"; + pix1 = pixaGetPix(pixa, i, L_CLONE); + if (pixGetDepth(pix1) == 1) + pixWriteTiff(fname, pix1, IFF_TIFF_G4, modestr); + else + pixWriteTiff(fname, pix1, IFF_TIFF_ZIP, modestr); + pixDestroy(&pix1); + } + + return 0; +} + + +/*! + * \brief writeMultipageTiff() + * + * \param[in] dirin input directory + * \param[in] substr [optional] substring filter on filenames; can be NULL + * \param[in] fileout output multipage tiff file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This writes a set of image files in a directory out
+ *          as a multipage tiff file.  The images can be in any
+ *          initial file format.
+ *      (2) Images with a colormap have the colormap removed before
+ *          re-encoding as tiff.
+ *      (3) All images are encoded losslessly.  Those with 1 bpp are
+ *          encoded 'g4'.  The rest are encoded as 'zip' (flate encoding).
+ *          Because it is lossless, this is an expensive method for
+ *          saving most rgb images.
+ *      (4) The tiff directory overhead is quadratic in the number of
+ *          images.  To avoid this for very large numbers of images to be
+ *          written, apply the method used in pixaWriteMultipageTiff().
+ * 
+ */ +l_ok +writeMultipageTiff(const char *dirin, + const char *substr, + const char *fileout) +{ +SARRAY *sa; + + PROCNAME("writeMultipageTiff"); + + if (!dirin) + return ERROR_INT("dirin not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + /* Get all filtered and sorted full pathnames. */ + sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); + + /* Generate the tiff file */ + writeMultipageTiffSA(sa, fileout); + sarrayDestroy(&sa); + return 0; +} + + +/*! + * \brief writeMultipageTiffSA() + * + * \param[in] sa string array of full path names + * \param[in] fileout output ps file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See writeMultipageTiff()
+ * 
+ */ +l_ok +writeMultipageTiffSA(SARRAY *sa, + const char *fileout) +{ +char *fname; +const char *op; +l_int32 i, nfiles, firstfile, format; +PIX *pix; + + PROCNAME("writeMultipageTiffSA"); + + if (!sa) + return ERROR_INT("sa not defined", procName, 1); + if (!fileout) + return ERROR_INT("fileout not defined", procName, 1); + + nfiles = sarrayGetCount(sa); + firstfile = TRUE; + for (i = 0; i < nfiles; i++) { + op = (firstfile) ? "w" : "a"; + fname = sarrayGetString(sa, i, L_NOCOPY); + findFileFormat(fname, &format); + if (format == IFF_UNKNOWN) { + L_INFO("format of %s not known\n", procName, fname); + continue; + } + + if ((pix = pixRead(fname)) == NULL) { + L_WARNING("pix not made for file: %s\n", procName, fname); + continue; + } + if (pixGetDepth(pix) == 1) + pixWriteTiff(fileout, pix, IFF_TIFF_G4, op); + else + pixWriteTiff(fileout, pix, IFF_TIFF_ZIP, op); + firstfile = FALSE; + pixDestroy(&pix); + } + + return 0; +} + + +/*--------------------------------------------------------------* + * Print info to stream * + *--------------------------------------------------------------*/ +/*! + * \brief fprintTiffInfo() + * + * \param[in] fpout stream for output of tag data + * \param[in] tiffile input + * \return 0 if OK; 1 on error + */ +l_ok +fprintTiffInfo(FILE *fpout, + const char *tiffile) +{ +TIFF *tif; + + PROCNAME("fprintTiffInfo"); + + if (!tiffile) + return ERROR_INT("tiffile not defined", procName, 1); + if (!fpout) + return ERROR_INT("stream out not defined", procName, 1); + + if ((tif = openTiff(tiffile, "rb")) == NULL) + return ERROR_INT("tif not open for read", procName, 1); + + TIFFPrintDirectory(tif, fpout, 0); + TIFFClose(tif); + + return 0; +} + + +/*--------------------------------------------------------------* + * Get page count * + *--------------------------------------------------------------*/ +/*! + * \brief tiffGetCount() + * + * \param[in] fp file stream opened for read + * \param[out] pn number of images + * \return 0 if OK; 1 on error + */ +l_ok +tiffGetCount(FILE *fp, + l_int32 *pn) +{ +l_int32 i; +TIFF *tif; + + PROCNAME("tiffGetCount"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pn) + return ERROR_INT("&n not defined", procName, 1); + *pn = 0; + + if ((tif = fopenTiff(fp, "r")) == NULL) + return ERROR_INT("tif not open for read", procName, 1); + + for (i = 1; ; i++) { + if (TIFFReadDirectory(tif) == 0) + break; + if (i == ManyPagesInTiffFile + 1) { + L_WARNING("big file: more than %d pages\n", procName, + ManyPagesInTiffFile); + } + } + *pn = i; + TIFFCleanup(tif); + return 0; +} + + +/*--------------------------------------------------------------* + * Get resolution from tif * + *--------------------------------------------------------------*/ +/*! + * \brief getTiffResolution() + * + * \param[in] fp file stream opened for read + * \param[out] pxres, pyres resolution in ppi + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If neither resolution field is set, this is not an error;
+ *          the returned resolution values are 0 (designating 'unknown').
+ * 
+ */ +l_ok +getTiffResolution(FILE *fp, + l_int32 *pxres, + l_int32 *pyres) +{ +TIFF *tif; + + PROCNAME("getTiffResolution"); + + if (!pxres || !pyres) + return ERROR_INT("&xres and &yres not both defined", procName, 1); + *pxres = *pyres = 0; + if (!fp) + return ERROR_INT("stream not opened", procName, 1); + + if ((tif = fopenTiff(fp, "r")) == NULL) + return ERROR_INT("tif not open for read", procName, 1); + getTiffStreamResolution(tif, pxres, pyres); + TIFFCleanup(tif); + return 0; +} + + +/*! + * \brief getTiffStreamResolution() + * + * \param[in] tif TIFF handle opened for read + * \param[out] pxres, pyres resolution in ppi + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) If neither resolution field is set, this is not an error;
+ *          the returned resolution values are 0 (designating 'unknown').
+ * 
+ */ +static l_int32 +getTiffStreamResolution(TIFF *tif, + l_int32 *pxres, + l_int32 *pyres) +{ +l_uint16 resunit; +l_int32 foundxres, foundyres; +l_float32 fxres, fyres; + + PROCNAME("getTiffStreamResolution"); + + if (!tif) + return ERROR_INT("tif not opened", procName, 1); + if (!pxres || !pyres) + return ERROR_INT("&xres and &yres not both defined", procName, 1); + *pxres = *pyres = 0; + + TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &resunit); + foundxres = TIFFGetField(tif, TIFFTAG_XRESOLUTION, &fxres); + foundyres = TIFFGetField(tif, TIFFTAG_YRESOLUTION, &fyres); + if (!foundxres && !foundyres) return 1; + if (isnan(fxres) || isnan(fyres)) return 1; + if (!foundxres && foundyres) + fxres = fyres; + else if (foundxres && !foundyres) + fyres = fxres; + + /* Avoid overflow into int32; set max fxres and fyres to 5 x 10^8 */ + if (fxres < 0 || fxres > (1L << 29) || fyres < 0 || fyres > (1L << 29)) + return ERROR_INT("fxres and/or fyres values are invalid", procName, 1); + + if (resunit == RESUNIT_CENTIMETER) { /* convert to ppi */ + *pxres = (l_int32)(2.54 * fxres + 0.5); + *pyres = (l_int32)(2.54 * fyres + 0.5); + } else { + *pxres = (l_int32)fxres; + *pyres = (l_int32)fyres; + } + + return 0; +} + + +/*--------------------------------------------------------------* + * Get some tiff header information * + *--------------------------------------------------------------*/ +/*! + * \brief readHeaderTiff() + * + * \param[in] filename + * \param[in] n page image number: 0-based + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 + * \param[out] pspp [optional] samples per pixel -- 1 or 3 + * \param[out] pres [optional] resolution in x dir; NULL to ignore + * \param[out] pcmap [optional] colormap exists; input NULL to ignore + * \param[out] pformat [optional] tiff format; input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, cmap is returned as 1; else 0.
+ *      (2) If %n is equal to or greater than the number of images, returns 1.
+ * 
+ */ +l_ok +readHeaderTiff(const char *filename, + l_int32 n, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *pres, + l_int32 *pcmap, + l_int32 *pformat) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("readHeaderTiff"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (pres) *pres = 0; + if (pcmap) *pcmap = 0; + if (pformat) *pformat = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) + return ERROR_INT("no results requested", procName, 1); + + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + ret = freadHeaderTiff(fp, n, pw, ph, pbps, pspp, pres, pcmap, pformat); + fclose(fp); + return ret; +} + + +/*! + * \brief freadHeaderTiff() + * + * \param[in] fp file stream + * \param[in] n page image number: 0-based + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 + * \param[out] pspp [optional] samples per pixel -- 1 or 3 + * \param[out] pres [optional] resolution in x dir; NULL to ignore + * \param[out] pcmap [optional] colormap exists; input NULL to ignore + * \param[out] pformat [optional] tiff format; input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If there is a colormap, cmap is returned as 1; else 0.
+ *      (2) If %n is equal to or greater than the number of images, returns 1.
+ * 
+ */ +l_ok +freadHeaderTiff(FILE *fp, + l_int32 n, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *pres, + l_int32 *pcmap, + l_int32 *pformat) +{ +l_int32 i, ret, format; +TIFF *tif; + + PROCNAME("freadHeaderTiff"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (pres) *pres = 0; + if (pcmap) *pcmap = 0; + if (pformat) *pformat = 0; + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (n < 0) + return ERROR_INT("image index must be >= 0", procName, 1); + if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) + return ERROR_INT("no results requested", procName, 1); + + findFileFormatStream(fp, &format); + if (format != IFF_TIFF && + format != IFF_TIFF_G3 && format != IFF_TIFF_G4 && + format != IFF_TIFF_RLE && format != IFF_TIFF_PACKBITS && + format != IFF_TIFF_LZW && format != IFF_TIFF_ZIP && + format != IFF_TIFF_JPEG) + return ERROR_INT("file not tiff format", procName, 1); + + if ((tif = fopenTiff(fp, "r")) == NULL) + return ERROR_INT("tif not open for read", procName, 1); + + for (i = 0; i < n; i++) { + if (TIFFReadDirectory(tif) == 0) + return ERROR_INT("image n not found in file", procName, 1); + } + + ret = tiffReadHeaderTiff(tif, pw, ph, pbps, pspp, pres, pcmap, pformat); + TIFFCleanup(tif); + return ret; +} + + +/*! + * \brief readHeaderMemTiff() + * + * \param[in] cdata const; tiff-encoded + * \param[in] size size of data + * \param[in] n page image number: 0-based + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 + * \param[out] pspp [optional] samples per pixel -- 1 or 3 + * \param[out] pres [optional] resolution in x dir; NULL to ignore + * \param[out] pcmap [optional] colormap exists; input NULL to ignore + * \param[out] pformat [optional] tiff format; input NULL to ignore + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream.
+ * 
+ */ +l_ok +readHeaderMemTiff(const l_uint8 *cdata, + size_t size, + l_int32 n, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *pres, + l_int32 *pcmap, + l_int32 *pformat) +{ +l_uint8 *data; +l_int32 i, ret; +TIFF *tif; + + PROCNAME("readHeaderMemTiff"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pbps) *pbps = 0; + if (pspp) *pspp = 0; + if (pres) *pres = 0; + if (pcmap) *pcmap = 0; + if (pformat) *pformat = 0; + if (!pw && !ph && !pbps && !pspp && !pres && !pcmap && !pformat) + return ERROR_INT("no results requested", procName, 1); + if (!cdata) + return ERROR_INT("cdata not defined", procName, 1); + + /* Open a tiff stream to memory */ + data = (l_uint8 *)cdata; /* we're really not going to change this */ + if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) + return ERROR_INT("tiff stream not opened", procName, 1); + + for (i = 0; i < n; i++) { + if (TIFFReadDirectory(tif) == 0) { + TIFFClose(tif); + return ERROR_INT("image n not found in file", procName, 1); + } + } + + ret = tiffReadHeaderTiff(tif, pw, ph, pbps, pspp, pres, pcmap, pformat); + TIFFClose(tif); + return ret; +} + + +/*! + * \brief tiffReadHeaderTiff() + * + * \param[in] tif + * \param[out] pw [optional] width + * \param[out] ph [optional] height + * \param[out] pbps [optional] bits per sample -- 1, 2, 4 or 8 + * \param[out] pspp [optional] samples per pixel -- 1 or 3 + * \param[out] pres [optional] resolution in x dir; NULL to ignore + * \param[out] pcmap [optional] cmap exists; input NULL to ignore + * \param[out] pformat [optional] tiff format; input NULL to ignore + * \return 0 if OK, 1 on error + */ +static l_int32 +tiffReadHeaderTiff(TIFF *tif, + l_int32 *pw, + l_int32 *ph, + l_int32 *pbps, + l_int32 *pspp, + l_int32 *pres, + l_int32 *pcmap, + l_int32 *pformat) +{ +l_uint16 tiffcomp; +l_uint16 bps, spp; +l_uint16 *rmap, *gmap, *bmap; +l_int32 xres, yres; +l_uint32 w, h; + + PROCNAME("tiffReadHeaderTiff"); + + if (!tif) + return ERROR_INT("tif not opened", procName, 1); + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); + TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); + if (w < 1 || h < 1) + return ERROR_INT("tif w and h not both > 0", procName, 1); + if (bps != 1 && bps != 2 && bps != 4 && bps != 8 && bps > 16) + return ERROR_INT("bps not in set {1,2,4,8,16}", procName, 1); + if (spp != 1 && spp != 2 && spp != 3 && spp != 4) + return ERROR_INT("spp not in set {1,2,3,4}", procName, 1); + if (pw) *pw = w; + if (ph) *ph = h; + if (pbps) *pbps = bps; + if (pspp) *pspp = spp; + if (pres) { + *pres = 300; /* default ppi */ + if (getTiffStreamResolution(tif, &xres, &yres) == 0) + *pres = (l_int32)xres; + } + if (pcmap) { + *pcmap = 0; + if (TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) + *pcmap = 1; + } + if (pformat) { + TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); + *pformat = getTiffCompressedFormat(tiffcomp); + } + return 0; +} + + +/*! + * \brief findTiffCompression() + * + * \param[in] fp file stream; must be rewound to BOF + * \param[out] pcomptype compression type + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The returned compression type is that defined in
+ *          the enum in imageio.h.  It is not the tiff flag value.
+ *      (2) The compression type is initialized to IFF_UNKNOWN.
+ *          If it is not one of the specified types, the returned
+ *          type is IFF_TIFF, which indicates no compression.
+ *      (3) When this function is called, the stream must be at BOF.
+ *          If the opened stream is to be used again to read the
+ *          file, it must be rewound to BOF after calling this function.
+ * 
+ */ +l_ok +findTiffCompression(FILE *fp, + l_int32 *pcomptype) +{ +l_uint16 tiffcomp; +TIFF *tif; + + PROCNAME("findTiffCompression"); + + if (!pcomptype) + return ERROR_INT("&comptype not defined", procName, 1); + *pcomptype = IFF_UNKNOWN; /* init */ + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + + if ((tif = fopenTiff(fp, "r")) == NULL) + return ERROR_INT("tif not opened", procName, 1); + TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); + *pcomptype = getTiffCompressedFormat(tiffcomp); + TIFFCleanup(tif); + return 0; +} + + +/*! + * \brief getTiffCompressedFormat() + * + * \param[in] tiffcomp defined in tiff.h + * \return compression format defined in imageio.h + * + *
+ * Notes:
+ *      (1) The input must be the actual tiff compression type
+ *          returned by a tiff library call.  It should always be
+ *          a valid tiff type.
+ *      (2) The return type is defined in the enum in imageio.h.
+ * 
+ */ +static l_int32 +getTiffCompressedFormat(l_uint16 tiffcomp) +{ +l_int32 comptype; + + switch (tiffcomp) + { + case COMPRESSION_CCITTFAX4: + comptype = IFF_TIFF_G4; + break; + case COMPRESSION_CCITTFAX3: + comptype = IFF_TIFF_G3; + break; + case COMPRESSION_CCITTRLE: + comptype = IFF_TIFF_RLE; + break; + case COMPRESSION_PACKBITS: + comptype = IFF_TIFF_PACKBITS; + break; + case COMPRESSION_LZW: + comptype = IFF_TIFF_LZW; + break; + case COMPRESSION_ADOBE_DEFLATE: + comptype = IFF_TIFF_ZIP; + break; + case COMPRESSION_JPEG: + comptype = IFF_TIFF_JPEG; + break; + default: + comptype = IFF_TIFF; + break; + } + return comptype; +} + + +/*--------------------------------------------------------------* + * Extraction of tiff g4 data * + *--------------------------------------------------------------*/ +/*! + * \brief extractG4DataFromFile() + * + * \param[in] filein + * \param[out] pdata binary data of ccitt g4 encoded stream + * \param[out] pnbytes size of binary data + * \param[out] pw [optional] image width + * \param[out] ph [optional] image height + * \param[out] pminisblack [optional] boolean + * \return 0 if OK, 1 on error + */ +l_ok +extractG4DataFromFile(const char *filein, + l_uint8 **pdata, + size_t *pnbytes, + l_int32 *pw, + l_int32 *ph, + l_int32 *pminisblack) +{ +l_uint8 *inarray, *data; +l_uint16 minisblack, comptype; /* accessors require l_uint16 */ +l_int32 istiff; +l_uint32 w, h, rowsperstrip; /* accessors require l_uint32 */ +l_uint32 diroff; +size_t fbytes, nbytes; +FILE *fpin; +TIFF *tif; + + PROCNAME("extractG4DataFromFile"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!pnbytes) + return ERROR_INT("&nbytes not defined", procName, 1); + if (!pw && !ph && !pminisblack) + return ERROR_INT("no output data requested", procName, 1); + *pdata = NULL; + *pnbytes = 0; + + if ((fpin = fopenReadStream(filein)) == NULL) + return ERROR_INT("stream not opened to file", procName, 1); + istiff = fileFormatIsTiff(fpin); + fclose(fpin); + if (!istiff) + return ERROR_INT("filein not tiff", procName, 1); + + if ((inarray = l_binaryRead(filein, &fbytes)) == NULL) + return ERROR_INT("inarray not made", procName, 1); + + /* Get metadata about the image */ + if ((tif = openTiff(filein, "rb")) == NULL) { + LEPT_FREE(inarray); + return ERROR_INT("tif not open for read", procName, 1); + } + TIFFGetField(tif, TIFFTAG_COMPRESSION, &comptype); + if (comptype != COMPRESSION_CCITTFAX4) { + LEPT_FREE(inarray); + TIFFClose(tif); + return ERROR_INT("filein is not g4 compressed", procName, 1); + } + + TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); + TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); + TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); + if (h != rowsperstrip) + L_WARNING("more than 1 strip\n", procName); + TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &minisblack); /* for 1 bpp */ +/* TIFFPrintDirectory(tif, stderr, 0); */ + TIFFClose(tif); + if (pw) *pw = (l_int32)w; + if (ph) *ph = (l_int32)h; + if (pminisblack) *pminisblack = (l_int32)minisblack; + + /* The header has 8 bytes: the first 2 are the magic number, + * the next 2 are the version, and the last 4 are the + * offset to the first directory. That's what we want here. + * We have to test the byte order before decoding 4 bytes! */ + if (inarray[0] == 0x4d) { /* big-endian */ + diroff = (inarray[4] << 24) | (inarray[5] << 16) | + (inarray[6] << 8) | inarray[7]; + } else { /* inarray[0] == 0x49 : little-endian */ + diroff = (inarray[7] << 24) | (inarray[6] << 16) | + (inarray[5] << 8) | inarray[4]; + } +/* fprintf(stderr, " diroff = %d, %x\n", diroff, diroff); */ + + /* Extract the ccittg4 encoded data from the tiff file. + * We skip the 8 byte header and take nbytes of data, + * up to the beginning of the directory (at diroff) */ + nbytes = diroff - 8; + *pnbytes = nbytes; + if ((data = (l_uint8 *)LEPT_CALLOC(nbytes, sizeof(l_uint8))) == NULL) { + LEPT_FREE(inarray); + return ERROR_INT("data not allocated", procName, 1); + } + *pdata = data; + memcpy(data, inarray + 8, nbytes); + LEPT_FREE(inarray); + + return 0; +} + + +/*--------------------------------------------------------------* + * Open tiff stream from file stream * + *--------------------------------------------------------------*/ +/*! + * \brief fopenTiff() + * + * \param[in] fp file stream + * \param[in] modestring "r", "w", ... + * \return tiff data structure, opened for a file descriptor + * + *
+ * Notes:
+ *      (1) Why is this here?  Leffler did not provide a function that
+ *          takes a stream and gives a TIFF.  He only gave one that
+ *          generates a TIFF starting with a file descriptor.  So we
+ *          need to make it here, because it is useful to have functions
+ *          that take a stream as input.
+ *      (2) We use TIFFClientOpen() together with a set of static wrapper
+ *          functions which map TIFF read, write, seek, close and size.
+ *          to functions expecting a cookie of type stream (i.e. FILE *).
+ *          This implementation was contributed by Jürgen Buchmüller.
+ * 
+ */ +static TIFF * +fopenTiff(FILE *fp, + const char *modestring) +{ + PROCNAME("fopenTiff"); + + if (!fp) + return (TIFF *)ERROR_PTR("stream not opened", procName, NULL); + if (!modestring) + return (TIFF *)ERROR_PTR("modestring not defined", procName, NULL); + + TIFFSetWarningHandler(NULL); /* disable warnings */ + TIFFSetErrorHandler(NULL); /* disable error messages */ + + fseek(fp, 0, SEEK_SET); + return TIFFClientOpen("TIFFstream", modestring, (thandle_t)fp, + lept_read_proc, lept_write_proc, lept_seek_proc, + lept_close_proc, lept_size_proc, NULL, NULL); +} + + +/*--------------------------------------------------------------* + * Wrapper for TIFFOpen * + *--------------------------------------------------------------*/ +/*! + * \brief openTiff() + * + * \param[in] filename + * \param[in] modestring "r", "w", ... + * \return tiff data structure + * + *
+ * Notes:
+ *      (1) This handles multi-platform file naming.
+ * 
+ */ +static TIFF * +openTiff(const char *filename, + const char *modestring) +{ +char *fname; +TIFF *tif; + + PROCNAME("openTiff"); + + if (!filename) + return (TIFF *)ERROR_PTR("filename not defined", procName, NULL); + if (!modestring) + return (TIFF *)ERROR_PTR("modestring not defined", procName, NULL); + + TIFFSetWarningHandler(NULL); /* disable warnings */ + TIFFSetErrorHandler(NULL); /* disable error messages */ + + fname = genPathname(filename, NULL); + tif = TIFFOpen(fname, modestring); + LEPT_FREE(fname); + return tif; +} + + +/*----------------------------------------------------------------------* + * Memory I/O: reading memory --> pix and writing pix --> memory * + *----------------------------------------------------------------------*/ +/* It would be nice to use open_memstream() and fmemopen() + * for writing and reading to memory, rsp. These functions manage + * memory for writes and reads that use a file streams interface. + * Unfortunately, the tiff library only has an interface for reading + * and writing to file descriptors, not to file streams. The tiff + * library procedure is to open a "tiff stream" and read/write to it. + * The library provides a client interface for managing the I/O + * from memory, which requires seven callbacks. See the TIFFClientOpen + * man page for callback signatures. Adam Langley provided the code + * to do this. */ + +/*! + * \brief Memory stream buffer used with TIFFClientOpen() + * + * The L_Memstram %buffer has different functions in writing and reading. + * + * * In reading, it is assigned to the data and read from as + * the tiff library uncompresses the data and generates the pix. + * The %offset points to the current read position in the data, + * and the %hw always gives the number of bytes of data. + * The %outdata and %outsize ptrs are not used. + * When finished, tiffCloseCallback() simply frees the L_Memstream. + * + * * In writing, it accepts the data that the tiff library + * produces when a pix is compressed. the buffer points to a + * malloced area of %bufsize bytes. The current writing position + * in the buffer is %offset and the most ever written is %hw. + * The buffer is expanded as necessary. When finished, + * tiffCloseCallback() assigns the %outdata and %outsize ptrs + * to the %buffer and %bufsize results, and frees the L_Memstream. + */ +struct L_Memstream +{ + l_uint8 *buffer; /* expands to hold data when written to; */ + /* fixed size when read from. */ + size_t bufsize; /* current size allocated when written to; */ + /* fixed size of input data when read from. */ + size_t offset; /* byte offset from beginning of buffer. */ + size_t hw; /* high-water mark; max bytes in buffer. */ + l_uint8 **poutdata; /* input param for writing; data goes here. */ + size_t *poutsize; /* input param for writing; data size goes here. */ +}; +typedef struct L_Memstream L_MEMSTREAM; + + + /* These are static functions for memory I/O */ +static L_MEMSTREAM *memstreamCreateForRead(l_uint8 *indata, size_t pinsize); +static L_MEMSTREAM *memstreamCreateForWrite(l_uint8 **poutdata, + size_t *poutsize); +static tsize_t tiffReadCallback(thandle_t handle, tdata_t data, tsize_t length); +static tsize_t tiffWriteCallback(thandle_t handle, tdata_t data, + tsize_t length); +static toff_t tiffSeekCallback(thandle_t handle, toff_t offset, l_int32 whence); +static l_int32 tiffCloseCallback(thandle_t handle); +static toff_t tiffSizeCallback(thandle_t handle); +static l_int32 tiffMapCallback(thandle_t handle, tdata_t *data, toff_t *length); +static void tiffUnmapCallback(thandle_t handle, tdata_t data, toff_t length); + + +static L_MEMSTREAM * +memstreamCreateForRead(l_uint8 *indata, + size_t insize) +{ +L_MEMSTREAM *mstream; + + mstream = (L_MEMSTREAM *)LEPT_CALLOC(1, sizeof(L_MEMSTREAM)); + mstream->buffer = indata; /* handle to input data array */ + mstream->bufsize = insize; /* amount of input data */ + mstream->hw = insize; /* high-water mark fixed at input data size */ + mstream->offset = 0; /* offset always starts at 0 */ + return mstream; +} + + +static L_MEMSTREAM * +memstreamCreateForWrite(l_uint8 **poutdata, + size_t *poutsize) +{ +L_MEMSTREAM *mstream; + + mstream = (L_MEMSTREAM *)LEPT_CALLOC(1, sizeof(L_MEMSTREAM)); + mstream->buffer = (l_uint8 *)LEPT_CALLOC(8 * 1024, 1); + mstream->bufsize = 8 * 1024; + mstream->poutdata = poutdata; /* used only at end of write */ + mstream->poutsize = poutsize; /* ditto */ + mstream->hw = mstream->offset = 0; + return mstream; +} + + +static tsize_t +tiffReadCallback(thandle_t handle, + tdata_t data, + tsize_t length) +{ +L_MEMSTREAM *mstream; +size_t amount; + + mstream = (L_MEMSTREAM *)handle; + amount = L_MIN((size_t)length, mstream->hw - mstream->offset); + + /* Fuzzed files can create this condition! */ + if (mstream->offset + amount < amount || /* overflow */ + mstream->offset + amount > mstream->hw) { + fprintf(stderr, "Bad file: amount too big: %zu\n", amount); + return 0; + } + + memcpy(data, mstream->buffer + mstream->offset, amount); + mstream->offset += amount; + return amount; +} + + +static tsize_t +tiffWriteCallback(thandle_t handle, + tdata_t data, + tsize_t length) +{ +L_MEMSTREAM *mstream; +size_t newsize; + + /* reallocNew() uses calloc to initialize the array. + * If malloc is used instead, for some of the encoding methods, + * not all the data in 'bufsize' bytes in the buffer will + * have been initialized by the end of the compression. */ + mstream = (L_MEMSTREAM *)handle; + if (mstream->offset + length > mstream->bufsize) { + newsize = 2 * (mstream->offset + length); + mstream->buffer = (l_uint8 *)reallocNew((void **)&mstream->buffer, + mstream->hw, newsize); + mstream->bufsize = newsize; + } + + memcpy(mstream->buffer + mstream->offset, data, length); + mstream->offset += length; + mstream->hw = L_MAX(mstream->offset, mstream->hw); + return length; +} + + +static toff_t +tiffSeekCallback(thandle_t handle, + toff_t offset, + l_int32 whence) +{ +L_MEMSTREAM *mstream; + + PROCNAME("tiffSeekCallback"); + mstream = (L_MEMSTREAM *)handle; + switch (whence) { + case SEEK_SET: +/* fprintf(stderr, "seek_set: offset = %d\n", offset); */ + if((size_t)offset != offset) { /* size_t overflow on uint32 */ + return (toff_t)ERROR_INT("too large offset value", procName, 1); + } + mstream->offset = offset; + break; + case SEEK_CUR: +/* fprintf(stderr, "seek_cur: offset = %d\n", offset); */ + mstream->offset += offset; + break; + case SEEK_END: +/* fprintf(stderr, "seek end: hw = %d, offset = %d\n", + mstream->hw, offset); */ + mstream->offset = mstream->hw - offset; /* offset >= 0 */ + break; + default: + return (toff_t)ERROR_INT("bad whence value", procName, + mstream->offset); + } + + return mstream->offset; +} + + +static l_int32 +tiffCloseCallback(thandle_t handle) +{ +L_MEMSTREAM *mstream; + + mstream = (L_MEMSTREAM *)handle; + if (mstream->poutdata) { /* writing: save the output data */ + *mstream->poutdata = mstream->buffer; + *mstream->poutsize = mstream->hw; + } + LEPT_FREE(mstream); /* never free the buffer! */ + return 0; +} + + +static toff_t +tiffSizeCallback(thandle_t handle) +{ +L_MEMSTREAM *mstream; + + mstream = (L_MEMSTREAM *)handle; + return mstream->hw; +} + + +static l_int32 +tiffMapCallback(thandle_t handle, + tdata_t *data, + toff_t *length) +{ +L_MEMSTREAM *mstream; + + mstream = (L_MEMSTREAM *)handle; + *data = mstream->buffer; + *length = mstream->hw; + return 0; +} + + +static void +tiffUnmapCallback(thandle_t handle, + tdata_t data, + toff_t length) +{ + return; +} + + +/*! + * \brief fopenTiffMemstream() + * + * \param[in] filename for error output; can be "" + * \param[in] operation "w" for write, "r" for read + * \param[out] pdata written data + * \param[out] pdatasize size of written data + * \return tiff data structure, opened for write to memory + * + *
+ * Notes:
+ *      (1) This wraps up a number of callbacks for either:
+ *            * reading from tiff in memory buffer --> pix
+ *            * writing from pix --> tiff in memory buffer
+ *      (2) After use, the memstream is automatically destroyed when
+ *          TIFFClose() is called.  TIFFCleanup() doesn't free the memstream.
+ *      (3) This does not work in append mode, and in write mode it
+ *          does not append.
+ * 
+ */ +static TIFF * +fopenTiffMemstream(const char *filename, + const char *operation, + l_uint8 **pdata, + size_t *pdatasize) +{ +L_MEMSTREAM *mstream; +TIFF *tif; + + PROCNAME("fopenTiffMemstream"); + + if (!filename) + return (TIFF *)ERROR_PTR("filename not defined", procName, NULL); + if (!operation) + return (TIFF *)ERROR_PTR("operation not defined", procName, NULL); + if (!pdata) + return (TIFF *)ERROR_PTR("&data not defined", procName, NULL); + if (!pdatasize) + return (TIFF *)ERROR_PTR("&datasize not defined", procName, NULL); + if (strcmp(operation, "r") && strcmp(operation, "w")) + return (TIFF *)ERROR_PTR("op not 'r' or 'w'", procName, NULL); + + if (!strcmp(operation, "r")) + mstream = memstreamCreateForRead(*pdata, *pdatasize); + else + mstream = memstreamCreateForWrite(pdata, pdatasize); + + TIFFSetWarningHandler(NULL); /* disable warnings */ + TIFFSetErrorHandler(NULL); /* disable error messages */ + + tif = TIFFClientOpen(filename, operation, (thandle_t)mstream, + tiffReadCallback, tiffWriteCallback, + tiffSeekCallback, tiffCloseCallback, + tiffSizeCallback, tiffMapCallback, + tiffUnmapCallback); + if (!tif) + LEPT_FREE(mstream); + return tif; +} + + +/*! + * \brief pixReadMemTiff() + * + * \param[in] cdata const; tiff-encoded + * \param[in] size size of cdata + * \param[in] n page image number: 0-based + * \return pix, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a version of pixReadTiff(), where the data is read
+ *          from a memory buffer and uncompressed.
+ *      (2) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream.
+ *      (3) No warning messages on failure, because of how multi-page
+ *          TIFF reading works. You are supposed to keep trying until
+ *          it stops working.
+ *      (4) Tiff directory overhead is linear in the input page number.
+ *          If reading many images, use pixReadMemFromMultipageTiff().
+ * 
+ */ +PIX * +pixReadMemTiff(const l_uint8 *cdata, + size_t size, + l_int32 n) +{ +l_uint8 *data; +l_int32 i; +PIX *pix; +TIFF *tif; + + PROCNAME("pixReadMemTiff"); + + if (!cdata) + return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); + + data = (l_uint8 *)cdata; /* we're really not going to change this */ + if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) + return (PIX *)ERROR_PTR("tiff stream not opened", procName, NULL); + + pix = NULL; + for (i = 0; ; i++) { + if (i == n) { + if ((pix = pixReadFromTiffStream(tif)) == NULL) { + TIFFClose(tif); + return NULL; + } + pixSetInputFormat(pix, IFF_TIFF); + break; + } + if (TIFFReadDirectory(tif) == 0) + break; + if (i == ManyPagesInTiffFile + 1) { + L_WARNING("big file: more than %d pages\n", procName, + ManyPagesInTiffFile); + } + } + + TIFFClose(tif); + return pix; +} + + +/*! + * \brief pixReadMemFromMultipageTiff() + * + * \param[in] cdata const; tiff-encoded + * \param[in] size size of cdata + * \param[in,out] poffset set offset to 0 for first image + * \return pix, or NULL on error or if previous call returned the last image + * + *
+ * Notes:
+ *      (1) This is a read-from-memory version of pixReadFromMultipageTiff().
+ *          See that function for usage.
+ *      (2) If reading sequentially from the tiff data, this is more
+ *          efficient than pixReadMemTiff(), which has an overhead
+ *          proportional to the image index n.
+ *      (3) Example usage for reading all the images:
+ *            size_t offset = 0;
+ *            do {
+ *                Pix *pix = pixReadMemFromMultipageTiff(data, size, &offset);
+ *                // do something with pix
+ *            } while (offset != 0);
+ * 
+ */ +PIX * +pixReadMemFromMultipageTiff(const l_uint8 *cdata, + size_t size, + size_t *poffset) +{ +l_uint8 *data; +l_int32 retval; +size_t offset; +PIX *pix; +TIFF *tif; + + PROCNAME("pixReadMemFromMultipageTiff"); + + if (!cdata) + return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); + if (!poffset) + return (PIX *)ERROR_PTR("&offset not defined", procName, NULL); + + data = (l_uint8 *)cdata; /* we're really not going to change this */ + if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) + return (PIX *)ERROR_PTR("tiff stream not opened", procName, NULL); + + /* Set ptrs in the TIFF to the beginning of the image */ + offset = *poffset; + retval = (offset == 0) ? TIFFSetDirectory(tif, 0) + : TIFFSetSubDirectory(tif, offset); + if (retval == 0) { + TIFFClose(tif); + return NULL; + } + + if ((pix = pixReadFromTiffStream(tif)) == NULL) { + TIFFClose(tif); + return NULL; + } + + /* Advance to the next image and return the new offset */ + TIFFReadDirectory(tif); + *poffset = TIFFCurrentDirOffset(tif); + TIFFClose(tif); + return pix; +} + + +/*! + * \brief pixaReadMemMultipageTiff() + * + * \param[in] data const; multiple pages; tiff-encoded + * \param[in] size size of cdata + * \return pixa, or NULL on error + * + *
+ * Notes:
+ *      (1) This is an O(n) read-from-memory version of pixaReadMultipageTiff().
+ * 
+ */ +PIXA * +pixaReadMemMultipageTiff(const l_uint8 *data, + size_t size) +{ +size_t offset; +PIX *pix; +PIXA *pixa; + + PROCNAME("pixaReadMemMultipageTiff"); + + if (!data) + return (PIXA *)ERROR_PTR("data not defined", procName, NULL); + + offset = 0; + pixa = pixaCreate(0); + do { + pix = pixReadMemFromMultipageTiff(data, size, &offset); + pixaAddPix(pixa, pix, L_INSERT); + } while (offset != 0); + return pixa; +} + + +/*! + * \brief pixaWriteMemMultipageTiff() + * + * \param[out] pdata const; tiff-encoded + * \param[out] psize size of data + * \param[in] pixa any depth; colormap will be removed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) fopenTiffMemstream() does not work in append mode, so we
+ *          must work-around with a temporary file.
+ *      (2) Getting a file stream from
+ *            open_memstream((char **)pdata, psize)
+ *          does not work with the tiff directory.
+ * 
+ */ +l_ok +pixaWriteMemMultipageTiff(l_uint8 **pdata, + size_t *psize, + PIXA *pixa) +{ +const char *modestr; +l_int32 i, n; +FILE *fp; +PIX *pix1; + + PROCNAME("pixaWriteMemMultipageTiff"); + + if (pdata) *pdata = NULL; + if (!pdata) + return ERROR_INT("pdata not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + +#ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#else + if ((fp = tmpfile()) == NULL) + return ERROR_INT("tmpfile stream not opened", procName, 1); +#endif /* _WIN32 */ + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + modestr = (i == 0) ? "w" : "a"; + pix1 = pixaGetPix(pixa, i, L_CLONE); + if (pixGetDepth(pix1) == 1) + pixWriteStreamTiffWA(fp, pix1, IFF_TIFF_G4, modestr); + else + pixWriteStreamTiffWA(fp, pix1, IFF_TIFF_ZIP, modestr); + pixDestroy(&pix1); + } + + rewind(fp); + *pdata = l_binaryReadStream(fp, psize); + fclose(fp); + return 0; +} + + +/*! + * \brief pixWriteMemTiff() + * + * \param[out] pdata data of tiff compressed image + * \param[out] psize size of returned data + * \param[in] pix + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \return 0 if OK, 1 on error + * + * Usage: + * 1) See pixWriteTiff(. This version writes to + * memory instead of to a file. + */ +l_ok +pixWriteMemTiff(l_uint8 **pdata, + size_t *psize, + PIX *pix, + l_int32 comptype) +{ + return pixWriteMemTiffCustom(pdata, psize, pix, comptype, + NULL, NULL, NULL, NULL); +} + + +/*! + * \brief pixWriteMemTiffCustom() + * + * \param[out] pdata data of tiff compressed image + * \param[out] psize size of returned data + * \param[in] pix + * \param[in] comptype IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, + * IFF_TIFF_G3, IFF_TIFF_G4, + * IFF_TIFF_LZW, IFF_TIFF_ZIP, IFF_TIFF_JPEG + * \param[in] natags [optional] NUMA of custom tiff tags + * \param[in] savals [optional] SARRAY of values + * \param[in] satypes [optional] SARRAY of types + * \param[in] nasizes [optional] NUMA of sizes + * \return 0 if OK, 1 on error + * + * Usage: + * 1) See pixWriteTiffCustom(. This version writes to + * memory instead of to a file. + * 2) Use TIFFClose(); TIFFCleanup( doesn't free internal memstream. + */ +l_ok +pixWriteMemTiffCustom(l_uint8 **pdata, + size_t *psize, + PIX *pix, + l_int32 comptype, + NUMA *natags, + SARRAY *savals, + SARRAY *satypes, + NUMA *nasizes) +{ +l_int32 ret; +TIFF *tif; + + PROCNAME("pixWriteMemTiffCustom"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1); + if (!psize) + return ERROR_INT("&size not defined", procName, 1); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1); + if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && + comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP && + comptype != IFF_TIFF_JPEG) { + L_WARNING("invalid compression type for bpp > 1\n", procName); + comptype = IFF_TIFF_ZIP; + } + + if ((tif = fopenTiffMemstream("tifferror", "w", pdata, psize)) == NULL) + return ERROR_INT("tiff stream not opened", procName, 1); + ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, + satypes, nasizes); + + TIFFClose(tif); + return ret; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBTIFF */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/tiffiostub.c b/3rdparty/hgOCR/leptonica/tiffiostub.c new file mode 100644 index 00000000..647df65e --- /dev/null +++ b/3rdparty/hgOCR/leptonica/tiffiostub.c @@ -0,0 +1,242 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file tiffiostub.c + *
+ *
+ *     Stubs for tiffio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBTIFF /* defined in environ.h */ +/* --------------------------------------------*/ + +PIX * pixReadTiff(const char *filename, l_int32 n) +{ + return (PIX *)ERROR_PTR("function not present", "pixReadTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadStreamTiff(FILE *fp, l_int32 n) +{ + return (PIX *)ERROR_PTR("function not present", "pixReadStreamTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteTiff(const char *filename, PIX *pix, l_int32 comptype, + const char *modestring) +{ + return ERROR_INT("function not present", "pixWriteTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteTiffCustom(const char *filename, PIX *pix, l_int32 comptype, + const char *modestring, NUMA *natags, + SARRAY *savals, SARRAY *satypes, NUMA *nasizes) +{ + return ERROR_INT("function not present", "pixWriteTiffCustom", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamTiff(FILE *fp, PIX *pix, l_int32 comptype) +{ + return ERROR_INT("function not present", "pixWriteStreamTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamTiffWA(FILE *fp, PIX *pix, l_int32 comptype, + const char *modestr) +{ + return ERROR_INT("function not present", "pixWriteStreamTiffWA", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadFromMultipageTiff(const char *filename, size_t *poffset) +{ + return (PIX *)ERROR_PTR("function not present", + "pixReadFromMultipageTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIXA * pixaReadMultipageTiff(const char *filename) +{ + return (PIXA *)ERROR_PTR("function not present", + "pixaReadMultipageTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaWriteMultipageTiff(const char *filename, PIXA *pixa) +{ + return ERROR_INT("function not present", "pixaWriteMultipageTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok writeMultipageTiff(const char *dirin, const char *substr, + const char *fileout) +{ + return ERROR_INT("function not present", "writeMultipageTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok writeMultipageTiffSA(SARRAY *sa, const char *fileout) +{ + return ERROR_INT("function not present", "writeMultipageTiffSA", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok fprintTiffInfo(FILE *fpout, const char *tiffile) +{ + return ERROR_INT("function not present", "fprintTiffInfo", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok tiffGetCount(FILE *fp, l_int32 *pn) +{ + return ERROR_INT("function not present", "tiffGetCount", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok getTiffResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) +{ + return ERROR_INT("function not present", "getTiffResolution", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderTiff(const char *filename, l_int32 n, l_int32 *pwidth, + l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, + l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) +{ + return ERROR_INT("function not present", "readHeaderTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok freadHeaderTiff(FILE *fp, l_int32 n, l_int32 *pwidth, + l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, + l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) +{ + return ERROR_INT("function not present", "freadHeaderTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemTiff(const l_uint8 *cdata, size_t size, l_int32 n, + l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, + l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, + l_int32 *pformat) +{ + return ERROR_INT("function not present", "readHeaderMemTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok findTiffCompression(FILE *fp, l_int32 *pcomptype) +{ + return ERROR_INT("function not present", "findTiffCompression", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok extractG4DataFromFile(const char *filein, l_uint8 **pdata, + size_t *pnbytes, l_int32 *pw, + l_int32 *ph, l_int32 *pminisblack) +{ + return ERROR_INT("function not present", "extractG4DataFromFile", 1); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemTiff(const l_uint8 *cdata, size_t size, l_int32 n) +{ + return (PIX *)ERROR_PTR("function not present", "pixReadMemTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemFromMultipageTiff(const l_uint8 *cdata, size_t size, + size_t *poffset) +{ + return (PIX *)ERROR_PTR("function not present", + "pixReadMemFromMultipageTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIXA * pixaReadMemMultipageTiff(const l_uint8 *data, size_t size) +{ + return (PIXA *)ERROR_PTR("function not present", + "pixaReadMemMultipageTiff", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaWriteMemMultipageTiff(l_uint8 **pdata, size_t *psize, PIXA *pixa) +{ + return ERROR_INT("function not present", "pixaWriteMemMultipageTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemTiff(l_uint8 **pdata, size_t *psize, PIX *pix, + l_int32 comptype) +{ + return ERROR_INT("function not present", "pixWriteMemTiff", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemTiffCustom(l_uint8 **pdata, size_t *psize, PIX *pix, + l_int32 comptype, NUMA *natags, SARRAY *savals, + SARRAY *satypes, NUMA *nasizes) +{ + return ERROR_INT("function not present", "pixWriteMemTiffCustom", 1); +} + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBTIFF */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/utils1.c b/3rdparty/hgOCR/leptonica/utils1.c new file mode 100644 index 00000000..86359cc9 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/utils1.c @@ -0,0 +1,1266 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file utils1.c + *
+ *
+ *       ------------------------------------------
+ *       This file has these utilities:
+ *         - error, warning and info messages
+ *         - low-level endian conversions
+ *         - file corruption operations
+ *         - random and prime number operations
+ *         - 64-bit hash functions
+ *         - leptonica version number accessor
+ *         - timing and date operations
+ *       ------------------------------------------
+ *
+ *       Control of error, warning and info messages
+ *           l_int32    setMsgSeverity()
+ *
+ *       Error return functions, invoked by macros
+ *           l_int32    returnErrorInt()
+ *           l_float32  returnErrorFloat()
+ *           void      *returnErrorPtr()
+ *
+ *       Test files for equivalence
+ *           l_int32    filesAreIdentical()
+ *
+ *       Byte-swapping data conversion
+ *           l_uint16   convertOnBigEnd16()
+ *           l_uint32   convertOnBigEnd32()
+ *           l_uint16   convertOnLittleEnd16()
+ *           l_uint32   convertOnLittleEnd32()
+ *
+ *       File corruption and byte replacement operations
+ *           l_int32    fileCorruptByDeletion()
+ *           l_int32    fileCorruptByMutation()
+ *           l_int32    fileReplaceBytes()
+ *
+ *       Generate random integer in given range
+ *           l_int32    genRandomIntegerInRange()
+ *
+ *       Simple math function
+ *           l_int32    lept_roundftoi()
+ *
+ *       64-bit hash functions
+ *           l_int32    l_hashStringToUint64()
+ *           l_int32    l_hashPtToUint64()
+ *           l_int32    l_hashFloat64ToUint64()
+ *
+ *       Prime finders
+ *           l_int32    findNextLargerPrime()
+ *           l_int32    lept_isPrime()
+ *
+ *       Gray code conversion
+ *           l_uint32   convertIntToGrayCode()
+ *           l_uint32   convertGrayCodeToInt()
+ *
+ *       Leptonica version number
+ *           char      *getLeptonicaVersion()
+ *
+ *       Timing
+ *           void       startTimer()
+ *           l_float32  stopTimer()
+ *           L_TIMER    startTimerNested()
+ *           l_float32  stopTimerNested()
+ *           void       l_getCurrentTime()
+ *           L_WALLTIMER  *startWallTimer()
+ *           l_float32  stopWallTimer()
+ *           void       l_getFormattedDate()
+ *
+ *  For all issues with cross-platform development, see utils2.c.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#ifdef _WIN32 +#include +#endif /* _WIN32 */ + +#include +#include "allheaders.h" +#include + + /* Global for controlling message output at runtime */ +LEPT_DLL l_int32 LeptMsgSeverity = DEFAULT_SEVERITY; + +#define DEBUG_SEV 0 + +/*----------------------------------------------------------------------* + * Control of error, warning and info messages * + *----------------------------------------------------------------------*/ +/*! + * \brief setMsgSeverity() + * + * \param[in] newsev + * \return oldsev + * + *
+ * Notes:
+ *      (1) setMsgSeverity() allows the user to specify the desired
+ *          message severity threshold.  Messages of equal or greater
+ *          severity will be output.  The previous message severity is
+ *          returned when the new severity is set.
+ *      (2) If L_SEVERITY_EXTERNAL is passed, then the severity will be
+ *          obtained from the LEPT_MSG_SEVERITY environment variable.
+ * 
+ */ +l_int32 +setMsgSeverity(l_int32 newsev) +{ +l_int32 oldsev; +char *envsev; + + oldsev = LeptMsgSeverity; + if (newsev == L_SEVERITY_EXTERNAL) { + envsev = getenv("LEPT_MSG_SEVERITY"); + if (envsev) { + LeptMsgSeverity = atoi(envsev); +#if DEBUG_SEV + L_INFO("message severity set to external\n", "setMsgSeverity"); +#endif /* DEBUG_SEV */ + } else { +#if DEBUG_SEV + L_WARNING("environment var LEPT_MSG_SEVERITY not defined\n", + "setMsgSeverity"); +#endif /* DEBUG_SEV */ + } + } else { + LeptMsgSeverity = newsev; +#if DEBUG_SEV + L_INFO("message severity set to %d\n", "setMsgSeverity", newsev); +#endif /* DEBUG_SEV */ + } + + return oldsev; +} + + +/*----------------------------------------------------------------------* + * Error return functions, invoked by macros * + * * + * (1) These error functions print messages to stderr and allow * + * exit from the function that called them. * + * (2) They must be invoked only by the macros ERROR_INT, * + * ERROR_FLOAT and ERROR_PTR, which are in environ.h * + * (3) The print output can be disabled at compile time, either * + * by using -DNO_CONSOLE_IO or by setting LeptMsgSeverity. * + *----------------------------------------------------------------------*/ +/*! + * \brief returnErrorInt() + * + * \param[in] msg error message + * \param[in] procname + * \param[in] ival return error val + * \return ival typically 1 for an error return + */ +l_int32 +returnErrorInt(const char *msg, + const char *procname, + l_int32 ival) +{ + fprintf(stderr, "Error in %s: %s\n", procname, msg); + return ival; +} + + +/*! + * \brief returnErrorFloat() + * + * \param[in] msg error message + * \param[in] procname + * \param[in] fval return error val + * \return fval + */ +l_float32 +returnErrorFloat(const char *msg, + const char *procname, + l_float32 fval) +{ + fprintf(stderr, "Error in %s: %s\n", procname, msg); + return fval; +} + + +/*! + * \brief returnErrorPtr() + * + * \param[in] msg error message + * \param[in] procname + * \param[in] pval return error val + * \return pval typically null for an error return + */ +void * +returnErrorPtr(const char *msg, + const char *procname, + void *pval) +{ + fprintf(stderr, "Error in %s: %s\n", procname, msg); + return pval; +} + + +/*--------------------------------------------------------------------* + * Test files for equivalence * + *--------------------------------------------------------------------*/ +/*! + * \brief filesAreIdentical() + * + * \param[in] fname1 + * \param[in] fname2 + * \param[out] psame 1 if identical; 0 if different + * \return 0 if OK, 1 on error + */ +l_ok +filesAreIdentical(const char *fname1, + const char *fname2, + l_int32 *psame) +{ +l_int32 i, same; +size_t nbytes1, nbytes2; +l_uint8 *array1, *array2; + + PROCNAME("filesAreIdentical"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = 0; + if (!fname1 || !fname2) + return ERROR_INT("both names not defined", procName, 1); + + nbytes1 = nbytesInFile(fname1); + nbytes2 = nbytesInFile(fname2); + if (nbytes1 != nbytes2) + return 0; + + if ((array1 = l_binaryRead(fname1, &nbytes1)) == NULL) + return ERROR_INT("array1 not read", procName, 1); + if ((array2 = l_binaryRead(fname2, &nbytes2)) == NULL) { + LEPT_FREE(array1); + return ERROR_INT("array2 not read", procName, 1); + } + same = 1; + for (i = 0; i < nbytes1; i++) { + if (array1[i] != array2[i]) { + same = 0; + break; + } + } + LEPT_FREE(array1); + LEPT_FREE(array2); + *psame = same; + + return 0; +} + + +/*--------------------------------------------------------------------------* + * 16 and 32 bit byte-swapping on big endian and little endian machines * + * * + * These are typically used for I/O conversions: * + * (1) endian conversion for data that was read from a file * + * (2) endian conversion on data before it is written to a file * + *--------------------------------------------------------------------------*/ + +/*--------------------------------------------------------------------* + * 16-bit byte swapping * + *--------------------------------------------------------------------*/ +#ifdef L_BIG_ENDIAN + +l_uint16 +convertOnBigEnd16(l_uint16 shortin) +{ + return ((shortin << 8) | (shortin >> 8)); +} + +l_uint16 +convertOnLittleEnd16(l_uint16 shortin) +{ + return shortin; +} + +#else /* L_LITTLE_ENDIAN */ + +l_uint16 +convertOnLittleEnd16(l_uint16 shortin) +{ + return ((shortin << 8) | (shortin >> 8)); +} + +l_uint16 +convertOnBigEnd16(l_uint16 shortin) +{ + return shortin; +} + +#endif /* L_BIG_ENDIAN */ + + +/*--------------------------------------------------------------------* + * 32-bit byte swapping * + *--------------------------------------------------------------------*/ +#ifdef L_BIG_ENDIAN + +l_uint32 +convertOnBigEnd32(l_uint32 wordin) +{ + return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | + ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); +} + +l_uint32 +convertOnLittleEnd32(l_uint32 wordin) +{ + return wordin; +} + +#else /* L_LITTLE_ENDIAN */ + +l_uint32 +convertOnLittleEnd32(l_uint32 wordin) +{ + return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | + ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); +} + +l_uint32 +convertOnBigEnd32(l_uint32 wordin) +{ + return wordin; +} + +#endif /* L_BIG_ENDIAN */ + + +/*---------------------------------------------------------------------* + * File corruption and byte replacement operations * + *---------------------------------------------------------------------*/ +/*! + * \brief fileCorruptByDeletion() + * + * \param[in] filein + * \param[in] loc fractional location of start of deletion + * \param[in] size fractional size of deletion + * \param[in] fileout corrupted file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) %loc and %size are expressed as a fraction of the file size.
+ *      (2) This makes a copy of the data in %filein, where bytes in the
+ *          specified region have deleted.
+ *      (3) If (%loc + %size) >= 1.0, this deletes from the position
+ *          represented by %loc to the end of the file.
+ *      (4) It is useful for testing robustness of I/O wrappers when the
+ *          data is corrupted, by simulating data corruption by deletion.
+ * 
+ */ +l_ok +fileCorruptByDeletion(const char *filein, + l_float32 loc, + l_float32 size, + const char *fileout) +{ +l_int32 i, locb, sizeb, rembytes; +size_t inbytes, outbytes; +l_uint8 *datain, *dataout; + + PROCNAME("fileCorruptByDeletion"); + + if (!filein || !fileout) + return ERROR_INT("filein and fileout not both specified", procName, 1); + if (loc < 0.0 || loc >= 1.0) + return ERROR_INT("loc must be in [0.0 ... 1.0)", procName, 1); + if (size <= 0.0) + return ERROR_INT("size must be > 0.0", procName, 1); + if (loc + size > 1.0) + size = 1.0 - loc; + + datain = l_binaryRead(filein, &inbytes); + locb = (l_int32)(loc * inbytes + 0.5); + locb = L_MIN(locb, inbytes - 1); + sizeb = (l_int32)(size * inbytes + 0.5); + sizeb = L_MAX(1, sizeb); + sizeb = L_MIN(sizeb, inbytes - locb); /* >= 1 */ + L_INFO("Removed %d bytes at location %d\n", procName, sizeb, locb); + rembytes = inbytes - locb - sizeb; /* >= 0; to be copied, after excision */ + + outbytes = inbytes - sizeb; + dataout = (l_uint8 *)LEPT_CALLOC(outbytes, 1); + for (i = 0; i < locb; i++) + dataout[i] = datain[i]; + for (i = 0; i < rembytes; i++) + dataout[locb + i] = datain[locb + sizeb + i]; + l_binaryWrite(fileout, "w", dataout, outbytes); + + LEPT_FREE(datain); + LEPT_FREE(dataout); + return 0; +} + + +/*! + * \brief fileCorruptByMutation() + * + * \param[in] filein + * \param[in] loc fractional location of start of randomization + * \param[in] size fractional size of randomization + * \param[in] fileout corrupted file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) %loc and %size are expressed as a fraction of the file size.
+ *      (2) This makes a copy of the data in %filein, where bytes in the
+ *          specified region have been replaced by random data.
+ *      (3) If (%loc + %size) >= 1.0, this modifies data from the position
+ *          represented by %loc to the end of the file.
+ *      (4) It is useful for testing robustness of I/O wrappers when the
+ *          data is corrupted, by simulating data corruption.
+ * 
+ */ +l_ok +fileCorruptByMutation(const char *filein, + l_float32 loc, + l_float32 size, + const char *fileout) +{ +l_int32 i, locb, sizeb; +size_t bytes; +l_uint8 *data; + + PROCNAME("fileCorruptByMutation"); + + if (!filein || !fileout) + return ERROR_INT("filein and fileout not both specified", procName, 1); + if (loc < 0.0 || loc >= 1.0) + return ERROR_INT("loc must be in [0.0 ... 1.0)", procName, 1); + if (size <= 0.0) + return ERROR_INT("size must be > 0.0", procName, 1); + if (loc + size > 1.0) + size = 1.0 - loc; + + data = l_binaryRead(filein, &bytes); + locb = (l_int32)(loc * bytes + 0.5); + locb = L_MIN(locb, bytes - 1); + sizeb = (l_int32)(size * bytes + 0.5); + sizeb = L_MAX(1, sizeb); + sizeb = L_MIN(sizeb, bytes - locb); /* >= 1 */ + L_INFO("Randomizing %d bytes at location %d\n", procName, sizeb, locb); + + /* Make an array of random bytes and do the substitution */ + for (i = 0; i < sizeb; i++) { + data[locb + i] = + (l_uint8)(255.9 * ((l_float64)rand() / (l_float64)RAND_MAX)); + } + + l_binaryWrite(fileout, "w", data, bytes); + LEPT_FREE(data); + return 0; +} + + +/*! + * \brief fileReplaceBytes() + * + * \param[in] filein input file + * \param[in] start start location for replacement + * \param[in] nbytes number of bytes to be removed + * \param[in] newdata replacement bytes + * \param[in] newsize size of replacement bytes + * \param[in] fileout output file + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) To remove %nbytes without replacement, set %newdata == NULL.
+ *      (2) One use is for replacing the date/time in a pdf file by a
+ *          string of 12 '0's, effectively removing the date without
+ *          invalidating the byte counters in the pdf file:
+ *              fileReplaceBytes(filein 86 12 (char *)"000000000000" 12 fileout
+ * 
+ */ +l_ok +fileReplaceBytes(const char *filein, + l_int32 start, + l_int32 nbytes, + l_uint8 *newdata, + size_t newsize, + const char *fileout) +{ +l_int32 i, index; +size_t inbytes, outbytes; +l_uint8 *datain, *dataout; + + PROCNAME("fileReplaceBytes"); + + if (!filein || !fileout) + return ERROR_INT("filein and fileout not both specified", procName, 1); + + datain = l_binaryRead(filein, &inbytes); + if (start + nbytes > inbytes) + L_WARNING("start + nbytes > length(filein) = %zu\n", procName, inbytes); + + if (!newdata) newsize = 0; + outbytes = inbytes - nbytes + newsize; + if ((dataout = (l_uint8 *)LEPT_CALLOC(outbytes, 1)) == NULL) { + LEPT_FREE(datain); + return ERROR_INT("calloc fail for dataout", procName, 1); + } + + for (i = 0; i < start; i++) + dataout[i] = datain[i]; + for (i = start; i < start + newsize; i++) + dataout[i] = newdata[i - start]; + index = start + nbytes; /* for datain */ + start += newsize; /* for dataout */ + for (i = start; i < outbytes; i++, index++) + dataout[i] = datain[index]; + l_binaryWrite(fileout, "w", dataout, outbytes); + + LEPT_FREE(datain); + LEPT_FREE(dataout); + return 0; +} + + +/*---------------------------------------------------------------------* + * Generate random integer in given range * + *---------------------------------------------------------------------*/ +/*! + * \brief genRandomIntegerInRange() + * + * \param[in] range size of range; must be >= 2 + * \param[in] seed use 0 to skip; otherwise call srand + * \param[out] pval random integer in range {0 ... range-1} + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) For example, to choose a rand integer between 0 and 99,
+ *          use %range = 100.
+ * 
+ */ +l_ok +genRandomIntegerInRange(l_int32 range, + l_int32 seed, + l_int32 *pval) +{ + PROCNAME("genRandomIntegerInRange"); + + if (!pval) + return ERROR_INT("&val not defined", procName, 1); + *pval = 0; + if (range < 2) + return ERROR_INT("range must be >= 2", procName, 1); + + if (seed > 0) srand(seed); + *pval = (l_int32)((l_float64)range * + ((l_float64)rand() / (l_float64)RAND_MAX)); + return 0; +} + + +/*---------------------------------------------------------------------* + * Simple math function * + *---------------------------------------------------------------------*/ +/*! + * \brief lept_roundftoi() + * + * \param[in] fval + * \return value rounded to int + * + *
+ * Notes:
+ *      (1) For fval >= 0, fval --> round(fval) == floor(fval + 0.5)
+ *          For fval < 0, fval --> -round(-fval))
+ *          This is symmetric around 0.
+ *          e.g., for fval in (-0.5 ... 0.5), fval --> 0
+ * 
+ */ +l_int32 +lept_roundftoi(l_float32 fval) +{ + return (fval >= 0.0) ? (l_int32)(fval + 0.5) : (l_int32)(fval - 0.5); +} + + +/*---------------------------------------------------------------------* + * 64-bit hash functions * + *---------------------------------------------------------------------*/ +/*! + * \brief l_hashStringToUint64() + * + * \param[in] str + * \param[out] phash hash value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The intent of the hash is to avoid collisions by mapping
+ *          the string as randomly as possible into 64 bits.
+ *      (2) To the extent that the hashes are random, the probability of
+ *          a collision can be approximated by the square of the number
+ *          of strings divided by 2^64.  For 1 million strings, the
+ *          collision probability is about 1 in 16 million.
+ *      (3) I expect non-randomness of the distribution to be most evident
+ *          for small text strings.  This hash function has been tested
+ *          for all 5-character text strings composed of 26 letters,
+ *          of which there are 26^5 = 12356630.  There are no hash
+ *          collisions for this set.
+ * 
+ */ +l_ok +l_hashStringToUint64(const char *str, + l_uint64 *phash) +{ +l_uint64 hash, mulp; + + PROCNAME("l_hashStringToUint64"); + + if (phash) *phash = 0; + if (!str || (str[0] == '\0')) + return ERROR_INT("str not defined or empty", procName, 1); + if (!phash) + return ERROR_INT("&hash not defined", procName, 1); + + mulp = 26544357894361247; /* prime, about 1/700 of the max uint64 */ + hash = 104395301; + while (*str) { + hash += (*str++ * mulp) ^ (hash >> 7); /* shift [1...23] are ok */ + } + *phash = hash ^ (hash << 37); + return 0; +} + + +/*! + * \brief l_hashPtToUint64() + * + * \param[in] x, y + * \param[out] phash hash value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This simple hash function has no collisions for
+ *          any of 400 million points with x and y up to 20000.
+ *      (2) Previously used a much more complicated and slower function:
+ *            mulp = 26544357894361;
+ *            hash = 104395301;
+ *            hash += (x * mulp) ^ (hash >> 5);
+ *            hash ^= (hash << 7);
+ *            hash += (y * mulp) ^ (hash >> 7);
+ *            hash = hash ^ (hash << 11);
+ *          Such logical gymnastics to get coverage over the 2^64
+ *          values are not required.
+ * 
+ */ +l_ok +l_hashPtToUint64(l_int32 x, + l_int32 y, + l_uint64 *phash) +{ + PROCNAME("l_hashPtToUint64"); + + if (!phash) + return ERROR_INT("&hash not defined", procName, 1); + + *phash = (l_uint64)(2173249142.3849 * x + 3763193258.6227 * y); + return 0; +} + + +/*! + * \brief l_hashFloat64ToUint64() + * + * \param[in] nbuckets + * \param[in] val + * \param[out] phash hash value + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Simple, fast hash for using dnaHash with 64-bit data
+ *          (e.g., sets and histograms).
+ *      (2) The resulting hash is called a "key" in a lookup
+ *          operation.  The bucket for %val in a dnaHash is simply
+ *          found by taking the mod of the hash with the number of
+ *          buckets (which is prime).  What gets stored in the
+ *          dna in that bucket could depend on use, but for the most
+ *          flexibility, we store an index into the associated dna.
+ *          This is all that is required for generating either a hash set
+ *          or a histogram (an example of a hash map).
+ *      (3) For example, to generate a histogram, the histogram dna,
+ *          a histogram of unique values aligned with the histogram dna,
+ *          and a dnahash hashmap are built.  See l_dnaMakeHistoByHash().
+ * 
+ */ +l_ok +l_hashFloat64ToUint64(l_int32 nbuckets, + l_float64 val, + l_uint64 *phash) +{ + PROCNAME("l_hashFloatToUint64"); + + if (!phash) + return ERROR_INT("&hash not defined", procName, 1); + *phash = (l_uint64)((21.732491 * nbuckets) * val); + return 0; +} + + +/*---------------------------------------------------------------------* + * Prime finders * + *---------------------------------------------------------------------*/ +/*! + * \brief findNextLargerPrime() + * + * \param[in] start + * \param[out] pprime first prime larger than %start + * \return 0 if OK, 1 on error + */ +l_ok +findNextLargerPrime(l_int32 start, + l_uint32 *pprime) +{ +l_int32 i, is_prime; + + PROCNAME("findNextLargerPrime"); + + if (!pprime) + return ERROR_INT("&prime not defined", procName, 1); + *pprime = 0; + if (start <= 0) + return ERROR_INT("start must be > 0", procName, 1); + + for (i = start + 1; ; i++) { + lept_isPrime(i, &is_prime, NULL); + if (is_prime) { + *pprime = i; + return 0; + } + } + + return ERROR_INT("prime not found!", procName, 1); +} + + +/*! + * \brief lept_isPrime() + * + * \param[in] n 64-bit unsigned + * \param[out] pis_prime 1 if prime, 0 otherwise + * \param[out] pfactor [optional] smallest divisor, or 0 on error + * or if prime + * \return 0 if OK, 1 on error + */ +l_ok +lept_isPrime(l_uint64 n, + l_int32 *pis_prime, + l_uint32 *pfactor) +{ +l_uint32 div; +l_uint64 limit, ratio; + + PROCNAME("lept_isPrime"); + + if (pis_prime) *pis_prime = 0; + if (pfactor) *pfactor = 0; + if (!pis_prime) + return ERROR_INT("&is_prime not defined", procName, 1); + if (n <= 0) + return ERROR_INT("n must be > 0", procName, 1); + + if (n % 2 == 0) { + if (pfactor) *pfactor = 2; + return 0; + } + + limit = (l_uint64)sqrt((l_float64)n); + for (div = 3; div < limit; div += 2) { + ratio = n / div; + if (ratio * div == n) { + if (pfactor) *pfactor = div; + return 0; + } + } + + *pis_prime = 1; + return 0; +} + + +/*---------------------------------------------------------------------* + * Gray code conversion * + *---------------------------------------------------------------------*/ +/*! + * \brief convertIntToGrayCode() + * + * \param[in] val integer value + * \return corresponding gray code value + * + *
+ * Notes:
+ *      (1) Gray code values corresponding to integers differ by
+ *          only one bit transition between successive integers.
+ * 
+ */ +l_uint32 +convertIntToGrayCode(l_uint32 val) +{ + return (val >> 1) ^ val; +} + + +/*! + * \brief convertGrayCodeToInt() + * + * \param[in] val gray code value + * \return corresponding integer value + */ +l_uint32 +convertGrayCodeToInt(l_uint32 val) +{ +l_uint32 shift; + + for (shift = 1; shift < 32; shift <<= 1) + val ^= val >> shift; + return val; +} + + +/*---------------------------------------------------------------------* + * Leptonica version number * + *---------------------------------------------------------------------*/ +/*! + * \brief getLeptonicaVersion() + * + * Return: string of version number (e.g., 'leptonica-1.74.2') + * + * Notes: + * (1) The caller has responsibility to free the memory. + */ +char * +getLeptonicaVersion() +{ +size_t bufsize = 100; + + char *version = (char *)LEPT_CALLOC(bufsize, sizeof(char)); + +#ifdef _MSC_VER + #ifdef _USRDLL + char dllStr[] = "DLL"; + #else + char dllStr[] = "LIB"; + #endif + #ifdef _DEBUG + char debugStr[] = "Debug"; + #else + char debugStr[] = "Release"; + #endif + #ifdef _M_IX86 + char bitStr[] = " x86"; + #elif _M_X64 + char bitStr[] = " x64"; + #else + char bitStr[] = ""; + #endif + snprintf(version, bufsize, "leptonica-%d.%d.%d (%s, %s) [MSC v.%d %s %s%s]", + LIBLEPT_MAJOR_VERSION, LIBLEPT_MINOR_VERSION, LIBLEPT_PATCH_VERSION, + __DATE__, __TIME__, _MSC_VER, dllStr, debugStr, bitStr); + +#else + + snprintf(version, bufsize, "leptonica-%d.%d.%d", LIBLEPT_MAJOR_VERSION, + LIBLEPT_MINOR_VERSION, LIBLEPT_PATCH_VERSION); + +#endif /* _MSC_VER */ + return version; +} + + +/*---------------------------------------------------------------------* + * Timing procs * + *---------------------------------------------------------------------*/ +#if !defined(_WIN32) && !defined(__Fuchsia__) + +#include +#include + +static struct rusage rusage_before; +static struct rusage rusage_after; + +/*! + * \brief startTimer(), stopTimer() + * + * Notes: + * (1) These measure the cpu time elapsed between the two calls: + * startTimer(); + * .... + * fprintf(stderr, "Elapsed time = %7.3f sec\n", stopTimer()); + */ +void +startTimer(void) +{ + getrusage(RUSAGE_SELF, &rusage_before); +} + +l_float32 +stopTimer(void) +{ +l_int32 tsec, tusec; + + getrusage(RUSAGE_SELF, &rusage_after); + + tsec = rusage_after.ru_utime.tv_sec - rusage_before.ru_utime.tv_sec; + tusec = rusage_after.ru_utime.tv_usec - rusage_before.ru_utime.tv_usec; + return (tsec + ((l_float32)tusec) / 1000000.0); +} + + +/*! + * \brief startTimerNested(), stopTimerNested() + * + * Example of usage: + * + * L_TIMER t1 = startTimerNested(); + * .... + * L_TIMER t2 = startTimerNested(); + * .... + * fprintf(stderr, "Elapsed time 2 = %7.3f sec\n", stopTimerNested(t2)); + * .... + * fprintf(stderr, "Elapsed time 1 = %7.3f sec\n", stopTimerNested(t1)); + */ +L_TIMER +startTimerNested(void) +{ +struct rusage *rusage_start; + + rusage_start = (struct rusage *)LEPT_CALLOC(1, sizeof(struct rusage)); + getrusage(RUSAGE_SELF, rusage_start); + return rusage_start; +} + +l_float32 +stopTimerNested(L_TIMER rusage_start) +{ +l_int32 tsec, tusec; +struct rusage rusage_stop; + + getrusage(RUSAGE_SELF, &rusage_stop); + + tsec = rusage_stop.ru_utime.tv_sec - + ((struct rusage *)rusage_start)->ru_utime.tv_sec; + tusec = rusage_stop.ru_utime.tv_usec - + ((struct rusage *)rusage_start)->ru_utime.tv_usec; + LEPT_FREE(rusage_start); + return (tsec + ((l_float32)tusec) / 1000000.0); +} + + +/*! + * \brief l_getCurrentTime() + * + * \param[out] sec [optional] in seconds since birth of Unix + * \param[out] usec [optional] in microseconds since birth of Unix + * \return void + */ +void +l_getCurrentTime(l_int32 *sec, + l_int32 *usec) +{ +struct timeval tv; + + gettimeofday(&tv, NULL); + if (sec) *sec = (l_int32)tv.tv_sec; + if (usec) *usec = (l_int32)tv.tv_usec; + return; +} + +#elif defined(__Fuchsia__) /* resource.h not implemented on Fuchsia. */ + + /* Timer functions are used for testing and debugging, and + * are stubbed out. If they are needed in the future, they + * can be implemented in Fuchsia using the zircon syscall + * zx_object_get_info() in ZX_INFOR_THREAD_STATS mode. */ + +void +startTimer(void) +{ +} + +l_float32 +stopTimer(void) +{ + return 0.0; +} + +L_TIMER +startTimerNested(void) +{ + return NULL; +} + +l_float32 +stopTimerNested(L_TIMER rusage_start) +{ + return 0.0; +} + +void +l_getCurrentTime(l_int32 *sec, + l_int32 *usec) +{ +} + +#else /* _WIN32 : resource.h not implemented under Windows */ + + /* Note: if division by 10^7 seems strange, the time is expressed + * as the number of 100-nanosecond intervals that have elapsed + * since 12:00 A.M. January 1, 1601. */ + +static ULARGE_INTEGER utime_before; +static ULARGE_INTEGER utime_after; + +void +startTimer(void) +{ +HANDLE this_process; +FILETIME start, stop, kernel, user; + + this_process = GetCurrentProcess(); + + GetProcessTimes(this_process, &start, &stop, &kernel, &user); + + utime_before.LowPart = user.dwLowDateTime; + utime_before.HighPart = user.dwHighDateTime; +} + +l_float32 +stopTimer(void) +{ +HANDLE this_process; +FILETIME start, stop, kernel, user; +ULONGLONG hnsec; /* in units of hecto-nanosecond (100 ns) intervals */ + + this_process = GetCurrentProcess(); + + GetProcessTimes(this_process, &start, &stop, &kernel, &user); + + utime_after.LowPart = user.dwLowDateTime; + utime_after.HighPart = user.dwHighDateTime; + hnsec = utime_after.QuadPart - utime_before.QuadPart; + return (l_float32)(signed)hnsec / 10000000.0; +} + +L_TIMER +startTimerNested(void) +{ +HANDLE this_process; +FILETIME start, stop, kernel, user; +ULARGE_INTEGER *utime_start; + + this_process = GetCurrentProcess(); + + GetProcessTimes (this_process, &start, &stop, &kernel, &user); + + utime_start = (ULARGE_INTEGER *)LEPT_CALLOC(1, sizeof(ULARGE_INTEGER)); + utime_start->LowPart = user.dwLowDateTime; + utime_start->HighPart = user.dwHighDateTime; + return utime_start; +} + +l_float32 +stopTimerNested(L_TIMER utime_start) +{ +HANDLE this_process; +FILETIME start, stop, kernel, user; +ULARGE_INTEGER utime_stop; +ULONGLONG hnsec; /* in units of 100 ns intervals */ + + this_process = GetCurrentProcess (); + + GetProcessTimes (this_process, &start, &stop, &kernel, &user); + + utime_stop.LowPart = user.dwLowDateTime; + utime_stop.HighPart = user.dwHighDateTime; + hnsec = utime_stop.QuadPart - ((ULARGE_INTEGER *)utime_start)->QuadPart; + LEPT_FREE(utime_start); + return (l_float32)(signed)hnsec / 10000000.0; +} + +void +l_getCurrentTime(l_int32 *sec, + l_int32 *usec) +{ +ULARGE_INTEGER utime, birthunix; +FILETIME systemtime; +LONGLONG birthunixhnsec = 116444736000000000; /*in units of 100 ns */ +LONGLONG usecs; + + GetSystemTimeAsFileTime(&systemtime); + utime.LowPart = systemtime.dwLowDateTime; + utime.HighPart = systemtime.dwHighDateTime; + + birthunix.LowPart = (DWORD) birthunixhnsec; + birthunix.HighPart = birthunixhnsec >> 32; + + usecs = (LONGLONG) ((utime.QuadPart - birthunix.QuadPart) / 10); + + if (sec) *sec = (l_int32) (usecs / 1000000); + if (usec) *usec = (l_int32) (usecs % 1000000); + return; +} + +#endif + + +/*! + * \brief startWallTimer() + * + * \return walltimer-ptr + * + *
+ * Notes:
+ *      (1) These measure the wall clock time  elapsed between the two calls:
+ *            L_WALLTIMER *timer = startWallTimer();
+ *            ....
+ *            fprintf(stderr, "Elapsed time = %f sec\n", stopWallTimer(&timer);
+ *      (2) Note that the timer object is destroyed by stopWallTimer().
+ * 
+ */ +L_WALLTIMER * +startWallTimer(void) +{ +L_WALLTIMER *timer; + + timer = (L_WALLTIMER *)LEPT_CALLOC(1, sizeof(L_WALLTIMER)); + l_getCurrentTime(&timer->start_sec, &timer->start_usec); + return timer; +} + +/*! + * \brief stopWallTimer() + * + * \param[in,out] ptimer walltimer pointer + * \return time wall time elapsed in seconds + */ +l_float32 +stopWallTimer(L_WALLTIMER **ptimer) +{ +l_int32 tsec, tusec; +L_WALLTIMER *timer; + + PROCNAME("stopWallTimer"); + + if (!ptimer) + return (l_float32)ERROR_FLOAT("&timer not defined", procName, 0.0); + timer = *ptimer; + if (!timer) + return (l_float32)ERROR_FLOAT("timer not defined", procName, 0.0); + + l_getCurrentTime(&timer->stop_sec, &timer->stop_usec); + tsec = timer->stop_sec - timer->start_sec; + tusec = timer->stop_usec - timer->start_usec; + LEPT_FREE(timer); + *ptimer = NULL; + return (tsec + ((l_float32)tusec) / 1000000.0); +} + + +/*! + * \brief l_getFormattedDate() + * + * \return formatted date string, or NULL on error + * + *
+ * Notes:
+ *      (1) This is used in pdf, in the form specified in section 3.8.2 of
+ *          http://partners.adobe.com/public/developer/en/pdf/PDFReference.pdf
+ *      (2) Contributed by Dave Bryan.  Works on all platforms.
+ * 
+ */ +char * +l_getFormattedDate() +{ +char buf[128] = "", sep = 'Z'; +l_int32 gmt_offset, relh, relm; +time_t ut, lt; +struct tm Tm; +struct tm *tptr = &Tm; + + ut = time(NULL); + + /* This generates a second "time_t" value by calling "gmtime" to + fill in a "tm" structure expressed as UTC and then calling + "mktime", which expects a "tm" structure expressed as the + local time. The result is a value that is offset from the + value returned by the "time" function by the local UTC offset. + "tm_isdst" is set to -1 to tell "mktime" to determine for + itself whether DST is in effect. This is necessary because + "gmtime" always sets "tm_isdst" to 0, which would tell + "mktime" to presume that DST is not in effect. */ +#ifdef _WIN32 + #ifdef _MSC_VER + gmtime_s(tptr, &ut); + #else /* mingw */ + tptr = gmtime(&ut); + #endif +#else + gmtime_r(&ut, tptr); +#endif + tptr->tm_isdst = -1; + lt = mktime(tptr); + + /* Calls "difftime" to obtain the resulting difference in seconds, + * because "time_t" is an opaque type, per the C standard. */ + gmt_offset = (l_int32) difftime(ut, lt); + if (gmt_offset > 0) + sep = '+'; + else if (gmt_offset < 0) + sep = '-'; + relh = L_ABS(gmt_offset) / 3600; + relm = (L_ABS(gmt_offset) % 3600) / 60; + +#ifdef _WIN32 + #ifdef _MSC_VER + localtime_s(tptr, &ut); + #else /* mingw */ + tptr = localtime(&ut); + #endif +#else + localtime_r(&ut, tptr); +#endif + strftime(buf, sizeof(buf), "%Y%m%d%H%M%S", tptr); + sprintf(buf + 14, "%c%02d'%02d'", sep, relh, relm); + return stringNew(buf); +} diff --git a/3rdparty/hgOCR/leptonica/utils2.c b/3rdparty/hgOCR/leptonica/utils2.c new file mode 100644 index 00000000..a73f810c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/utils2.c @@ -0,0 +1,3364 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file utils2.c + *
+ *
+ *      ------------------------------------------
+ *      This file has these utilities:
+ *         - safe string operations
+ *         - find/replace operations on strings
+ *         - read/write between file and memory
+ *         - multi-platform file and directory operations
+ *         - file name operations
+ *      ------------------------------------------
+ *
+ *       Safe string procs
+ *           char      *stringNew()
+ *           l_int32    stringCopy()
+ *           l_int32    stringCopySegment()
+ *           l_int32    stringReplace()
+ *           l_int32    stringLength()
+ *           l_int32    stringCat()
+ *           char      *stringConcatNew()
+ *           char      *stringJoin()
+ *           l_int32    stringJoinIP()
+ *           char      *stringReverse()
+ *           char      *strtokSafe()
+ *           l_int32    stringSplitOnToken()
+ *
+ *       Find and replace string and array procs
+ *           l_int32    stringCheckForChars()
+ *           char      *stringRemoveChars()
+ *           char      *stringReplaceEachSubstr()
+ *           char      *stringReplaceSubstr()
+ *           L_DNA     *stringFindEachSubstr()
+ *           l_int32    stringFindSubstr()
+ *           l_uint8   *arrayReplaceEachSequence()
+ *           L_DNA     *arrayFindEachSequence()
+ *           l_int32    arrayFindSequence()
+ *
+ *       Safe realloc
+ *           void      *reallocNew()
+ *
+ *       Read and write between file and memory
+ *           l_uint8   *l_binaryRead()
+ *           l_uint8   *l_binaryReadStream()
+ *           l_uint8   *l_binaryReadSelect()
+ *           l_uint8   *l_binaryReadSelectStream()
+ *           l_int32    l_binaryWrite()
+ *           l_int32    nbytesInFile()
+ *           l_int32    fnbytesInFile()
+ *
+ *       Copy and compare in memory
+ *           l_uint8   *l_binaryCopy()
+ *           l_uint8   *l_binaryCompare()
+ *
+ *       File copy operations
+ *           l_int32    fileCopy()
+ *           l_int32    fileConcatenate()
+ *           l_int32    fileAppendString()
+ *
+ *       Multi-platform functions for opening file streams
+ *           FILE      *fopenReadStream()
+ *           FILE      *fopenWriteStream()
+ *           FILE      *fopenReadFromMemory()
+ *
+ *       Opening a windows tmpfile for writing
+ *           FILE      *fopenWriteWinTempfile()
+ *
+ *       Multi-platform functions that avoid C-runtime boundary crossing
+ *       with Windows DLLs
+ *           FILE      *lept_fopen()
+ *           l_int32    lept_fclose()
+ *           void       lept_calloc()
+ *           void       lept_free()
+ *
+ *       Multi-platform file system operations in temp directories
+ *           l_int32    lept_mkdir()
+ *           l_int32    lept_rmdir()
+ *           l_int32    lept_direxists()
+ *           l_int32    lept_mv()
+ *           l_int32    lept_rm_match()
+ *           l_int32    lept_rm()
+ *           l_int32    lept_rmfile()
+ *           l_int32    lept_cp()
+ *
+ *       Special debug/test function for calling 'system'
+ *           void       callSystemDebug()
+ *
+ *       General file name operations
+ *           l_int32    splitPathAtDirectory()
+ *           l_int32    splitPathAtExtension()
+ *           char      *pathJoin()
+ *           char      *appendSubdirs()
+ *
+ *       Special file name operations
+ *           l_int32    convertSepCharsInPath()
+ *           char      *genPathname()
+ *           l_int32    makeTempDirname()
+ *           l_int32    modifyTrailingSlash()
+ *           char      *l_makeTempFilename()
+ *           l_int32    extractNumberFromFilename()
+ *
+ *
+ *  Notes on multi-platform development
+ *  -----------------------------------
+ *  This is important:
+ *  (1) With the exception of splitPathAtDirectory(), splitPathAtExtension()
+  *     and genPathname(), all input pathnames must have unix separators.
+ *  (2) On Windows, when you specify a read or write to "/tmp/...",
+ *      the filename is rewritten to use the Windows temp directory:
+ *         /tmp  ==>   [Temp]...    (windows)
+ *  (3) This filename rewrite, along with the conversion from unix
+ *      to windows pathnames, happens in genPathname().
+ *  (4) Use fopenReadStream() and fopenWriteStream() to open files,
+ *      because these use genPathname() to find the platform-dependent
+ *      filenames.  Likewise for l_binaryRead() and l_binaryWrite().
+ *  (5) For moving, copying and removing files and directories that are in
+ *      subdirectories of /tmp, use the lept_*() file system shell wrappers:
+ *         lept_mkdir(), lept_rmdir(), lept_mv(), lept_rm() and lept_cp().
+ *  (6) Use the lept_*() C library wrappers.  These work properly on
+ *      Windows, where the same DLL must perform complementary operations
+ *      on file streams (open/close) and heap memory (malloc/free):
+ *         lept_fopen(), lept_fclose(), lept_calloc() and lept_free().
+ *  (7) Why read and write files to temp directories?
+ *      The library needs the ability to read and write ephemeral
+ *      files to default places, both for generating debugging output
+ *      and for supporting regression tests.  Applications also need
+ *      this ability for debugging.
+ *  (8) Why do the pathname rewrite on Windows?
+ *      The goal is to have the library, and programs using the library,
+ *      run on multiple platforms without changes.  The location of
+ *      temporary files depends on the platform as well as the user's
+ *      configuration.  Temp files on Windows are in some directory
+ *      not known a priori.  To make everything work seamlessly on
+ *      Windows, every time you open a file for reading or writing,
+ *      use a special function such as fopenReadStream() or
+ *      fopenWriteStream(); these call genPathname() to ensure that
+ *      if it is a temp file, the correct path is used.  To indicate
+ *      that this is a temp file, the application is written with the
+ *      root directory of the path in a canonical form: "/tmp".
+ *  (9) Why is it that multi-platform directory functions like lept_mkdir()
+ *      and lept_rmdir(), as well as associated file functions like
+ *      lept_rm(), lept_mv() and lept_cp(), only work in the temp dir?
+ *      These functions were designed to provide easy manipulation of
+ *      temp files.  The restriction to temp files is for safety -- to
+ *      prevent an accidental deletion of important files.  For example,
+ *      lept_rmdir() first deletes all files in a specified subdirectory
+ *      of temp, and then removes the directory.
+ *
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#ifdef _MSC_VER +#include +#include +#define getcwd _getcwd /* fix MSVC warning */ +#else +#include +#endif /* _MSC_VER */ + +#ifdef _WIN32 +#include +#include /* _O_CREAT, ... */ +#include /* _open */ +#include /* _S_IREAD, _S_IWRITE */ +#else +#include /* for stat, mkdir(2) */ +#include +#endif + +#ifdef OS_IOS +#include +#include +#endif + +#include +#include +#include "allheaders.h" + + +/*--------------------------------------------------------------------* + * Safe string operations * + *--------------------------------------------------------------------*/ +/*! + * \brief stringNew() + * + * \param[in] src + * \return dest copy of %src string, or NULL on error + */ +char * +stringNew(const char *src) +{ +l_int32 len; +char *dest; + + PROCNAME("stringNew"); + + if (!src) { + L_WARNING("src not defined\n", procName); + return NULL; + } + + len = strlen(src); + if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("dest not made", procName, NULL); + + stringCopy(dest, src, len); + return dest; +} + + +/*! + * \brief stringCopy() + * + * \param[in] dest existing byte buffer + * \param[in] src string [optional] can be null + * \param[in] n max number of characters to copy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Relatively safe wrapper for strncpy, that checks the input,
+ *          and does not complain if %src is null or %n < 1.
+ *          If %n < 1, this is a no-op.
+ *      (2) %dest needs to be at least %n bytes in size.
+ *      (3) We don't call strncpy() because valgrind complains about
+ *          use of uninitialized values.
+ * 
+ */ +l_ok +stringCopy(char *dest, + const char *src, + l_int32 n) +{ +l_int32 i; + + PROCNAME("stringCopy"); + + if (!dest) + return ERROR_INT("dest not defined", procName, 1); + if (!src || n < 1) + return 0; + + /* Implementation of strncpy that valgrind doesn't complain about */ + for (i = 0; i < n && src[i] != '\0'; i++) + dest[i] = src[i]; + for (; i < n; i++) + dest[i] = '\0'; + return 0; +} + + +/*! + * \brief stringCopySegment() + * + * + * \param[in] src string + * \param[in] start byte position at start of segment + * \param[in] nbytes number of bytes in the segment; use 0 to go to end + * \return copy of segment, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a variant of stringNew() that makes a new string
+ *          from a segment of the input string.  The segment is specified
+ *          by the starting position and the number of bytes.
+ *      (2) The start location %start must be within the string %src.
+ *      (3) The copy is truncated to the end of the source string.
+ *          Use %nbytes = 0 to copy to the end of %src.
+ * 
+ */ +char * +stringCopySegment(const char *src, + l_int32 start, + l_int32 nbytes) +{ +char *dest; +l_int32 len; + + PROCNAME("stringCopySegment"); + + if (!src) + return (char *)ERROR_PTR("src not defined", procName, NULL); + len = strlen(src); + if (start < 0 || start > len - 1) + return (char *)ERROR_PTR("invalid start", procName, NULL); + if (nbytes <= 0) /* copy to the end */ + nbytes = len - start; + if (start + nbytes > len) /* truncate to the end */ + nbytes = len - start; + if ((dest = (char *)LEPT_CALLOC(nbytes + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("dest not made", procName, NULL); + stringCopy(dest, src + start, nbytes); + return dest; +} + + +/*! + * \brief stringReplace() + * + * \param[out] pdest string copy + * \param[in] src [optional] string; can be null + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Frees any existing dest string
+ *      (2) Puts a copy of src string in the dest
+ *      (3) If either or both strings are null, does something reasonable.
+ * 
+ */ +l_ok +stringReplace(char **pdest, + const char *src) +{ + PROCNAME("stringReplace"); + + if (!pdest) + return ERROR_INT("pdest not defined", procName, 1); + + if (*pdest) + LEPT_FREE(*pdest); + + if (src) + *pdest = stringNew(src); + else + *pdest = NULL; + return 0; +} + + +/*! + * \brief stringLength() + * + * \param[in] src string can be null or NULL-terminated string + * \param[in] size size of src buffer + * \return length of src in bytes. + * + *
+ * Notes:
+ *      (1) Safe implementation of strlen that only checks size bytes
+ *          for trailing NUL.
+ *      (2) Valid returned string lengths are between 0 and size - 1.
+ *          If size bytes are checked without finding a NUL byte, then
+ *          an error is indicated by returning size.
+ * 
+ */ +l_int32 +stringLength(const char *src, + size_t size) +{ +l_int32 i; + + PROCNAME("stringLength"); + + if (!src) + return ERROR_INT("src not defined", procName, 0); + if (size < 1) + return 0; + + for (i = 0; i < size; i++) { + if (src[i] == '\0') + return i; + } + return size; /* didn't find a NUL byte */ +} + + +/*! + * \brief stringCat() + * + * \param[in] dest null-terminated byte buffer + * \param[in] size size of dest + * \param[in] src string can be null or NULL-terminated string + * \return number of bytes added to dest; -1 on error + * + *
+ * Notes:
+ *      (1) Alternative implementation of strncat, that checks the input,
+ *          is easier to use (since the size of the dest buffer is specified
+ *          rather than the number of bytes to copy), and does not complain
+ *          if %src is null.
+ *      (2) Never writes past end of dest.
+ *      (3) If it can't append src (an error), it does nothing.
+ *      (4) N.B. The order of 2nd and 3rd args is reversed from that in
+ *          strncat, as in the Windows function strcat_s().
+ * 
+ */ +l_int32 +stringCat(char *dest, + size_t size, + const char *src) +{ +l_int32 i, n; +l_int32 lendest, lensrc; + + PROCNAME("stringCat"); + + if (!dest) + return ERROR_INT("dest not defined", procName, -1); + if (size < 1) + return ERROR_INT("size < 1; too small", procName, -1); + if (!src) + return 0; + + lendest = stringLength(dest, size); + if (lendest == size) + return ERROR_INT("no terminating nul byte", procName, -1); + lensrc = stringLength(src, size); + if (lensrc == 0) + return 0; + n = (lendest + lensrc > size - 1 ? size - lendest - 1 : lensrc); + if (n < 1) + return ERROR_INT("dest too small for append", procName, -1); + + for (i = 0; i < n; i++) + dest[lendest + i] = src[i]; + dest[lendest + n] = '\0'; + return n; +} + + +/*! + * \brief stringConcatNew() + * + * \param[in] first first string in list + * \param[in] ... NULL-terminated list of strings + * \return result new string concatenating the input strings, or + * NULL if first == NULL + * + *
+ * Notes:
+ *      (1) The last arg in the list of strings must be NULL.
+ *      (2) Caller must free the returned string.
+ * 
+ */ +char * +stringConcatNew(const char *first, ...) +{ +size_t len; +char *result, *ptr; +const char *arg; +va_list args; + + if (!first) return NULL; + + /* Find the length of the output string */ + va_start(args, first); + len = strlen(first); + while ((arg = va_arg(args, const char *)) != NULL) + len += strlen(arg); + va_end(args); + result = (char *)LEPT_CALLOC(len + 1, sizeof(char)); + + /* Concatenate the args */ + va_start(args, first); + ptr = result; + arg = first; + while (*arg) + *ptr++ = *arg++; + while ((arg = va_arg(args, const char *)) != NULL) { + while (*arg) + *ptr++ = *arg++; + } + va_end(args); + return result; +} + + +/*! + * \brief stringJoin() + * + * \param[in] src1 [optional] string; can be null + * \param[in] src2 [optional] string; can be null + * \return concatenated string, or NULL on error + * + *
+ * Notes:
+ *      (1) This is a safe version of strcat; it makes a new string.
+ *      (2) It is not an error if either or both of the strings
+ *          are empty, or if either or both of the pointers are null.
+ * 
+ */ +char * +stringJoin(const char *src1, + const char *src2) +{ +char *dest; +l_int32 srclen1, srclen2, destlen; + + PROCNAME("stringJoin"); + + srclen1 = (src1) ? strlen(src1) : 0; + srclen2 = (src2) ? strlen(src2) : 0; + destlen = srclen1 + srclen2 + 3; + + if ((dest = (char *)LEPT_CALLOC(destlen, sizeof(char))) == NULL) + return (char *)ERROR_PTR("calloc fail for dest", procName, NULL); + + if (src1) + stringCopy(dest, src1, srclen1); + if (src2) + strncat(dest, src2, srclen2); + return dest; +} + + +/*! + * \brief stringJoinIP() + * + * \param[in,out] psrc1 address of string src1; cannot be on the stack + * \param[in] src2 [optional] string; can be null + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a safe in-place version of strcat.  The contents of
+ *          src1 is replaced by the concatenation of src1 and src2.
+ *      (2) It is not an error if either or both of the strings
+ *          are empty (""), or if the pointers to the strings (*psrc1, src2)
+ *          are null.
+ *      (3) src1 should be initialized to null or an empty string
+ *          before the first call.  Use one of these:
+ *              char *src1 = NULL;
+ *              char *src1 = stringNew("");
+ *          Then call with:
+ *              stringJoinIP(&src1, src2);
+ *      (4) This can also be implemented as a macro:
+ * \code
+ *              #define stringJoinIP(src1, src2) \
+ *                  {tmpstr = stringJoin((src1),(src2)); \
+ *                  LEPT_FREE(src1); \
+ *                  (src1) = tmpstr;}
+ * \endcode
+ *      (5) Another function to consider for joining many strings is
+ *          stringConcatNew().
+ * 
+ */ +l_ok +stringJoinIP(char **psrc1, + const char *src2) +{ +char *tmpstr; + + PROCNAME("stringJoinIP"); + + if (!psrc1) + return ERROR_INT("&src1 not defined", procName, 1); + + tmpstr = stringJoin(*psrc1, src2); + LEPT_FREE(*psrc1); + *psrc1 = tmpstr; + return 0; +} + + +/*! + * \brief stringReverse() + * + * \param[in] src string + * \return dest newly-allocated reversed string + */ +char * +stringReverse(const char *src) +{ +char *dest; +l_int32 i, len; + + PROCNAME("stringReverse"); + + if (!src) + return (char *)ERROR_PTR("src not defined", procName, NULL); + len = strlen(src); + if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("calloc fail for dest", procName, NULL); + for (i = 0; i < len; i++) + dest[i] = src[len - 1 - i]; + + return dest; +} + + +/*! + * \brief strtokSafe() + * + * \param[in] cstr input string to be sequentially parsed; + * use NULL after the first call + * \param[in] seps a string of character separators + * \param[out] psaveptr ptr to the next char after + * the last encountered separator + * \return substr a new string that is copied from the previous + * saveptr up to but not including the next + * separator character, or NULL if end of cstr. + * + *
+ * Notes:
+ *      (1) This is a thread-safe implementation of strtok.
+ *      (2) It has the same interface as strtok_r.
+ *      (3) It differs from strtok_r in usage in two respects:
+ *          (a) the input string is not altered
+ *          (b) each returned substring is newly allocated and must
+ *              be freed after use.
+ *      (4) Let me repeat that.  This is "safe" because the input
+ *          string is not altered and because each returned string
+ *          is newly allocated on the heap.
+ *      (5) It is here because, surprisingly, some C libraries don't
+ *          include strtok_r.
+ *      (6) Important usage points:
+ *          ~ Input the string to be parsed on the first invocation.
+ *          ~ Then input NULL after that; the value returned in saveptr
+ *            is used in all subsequent calls.
+ *      (7) This is only slightly slower than strtok_r.
+ * 
+ */ +char * +strtokSafe(char *cstr, + const char *seps, + char **psaveptr) +{ +char nextc; +char *start, *substr; +l_int32 istart, i, j, nchars; + + PROCNAME("strtokSafe"); + + if (!seps) + return (char *)ERROR_PTR("seps not defined", procName, NULL); + if (!psaveptr) + return (char *)ERROR_PTR("&saveptr not defined", procName, NULL); + + if (!cstr) { + start = *psaveptr; + } else { + start = cstr; + *psaveptr = NULL; + } + if (!start) /* nothing to do */ + return NULL; + + /* First time, scan for the first non-sep character */ + istart = 0; + if (cstr) { + for (istart = 0;; istart++) { + if ((nextc = start[istart]) == '\0') { + *psaveptr = NULL; /* in case caller doesn't check ret value */ + return NULL; + } + if (!strchr(seps, nextc)) + break; + } + } + + /* Scan through, looking for a sep character; if none is + * found, 'i' will be at the end of the string. */ + for (i = istart;; i++) { + if ((nextc = start[i]) == '\0') + break; + if (strchr(seps, nextc)) + break; + } + + /* Save the substring */ + nchars = i - istart; + substr = (char *)LEPT_CALLOC(nchars + 1, sizeof(char)); + stringCopy(substr, start + istart, nchars); + + /* Look for the next non-sep character. + * If this is the last substring, return a null saveptr. */ + for (j = i;; j++) { + if ((nextc = start[j]) == '\0') { + *psaveptr = NULL; /* no more non-sep characters */ + break; + } + if (!strchr(seps, nextc)) { + *psaveptr = start + j; /* start here on next call */ + break; + } + } + + return substr; +} + + +/*! + * \brief stringSplitOnToken() + * + * \param[in] cstr input string to be split; not altered + * \param[in] seps a string of character separators + * \param[out] phead ptr to copy of the input string, up to + * the first separator token encountered + * \param[out] ptail ptr to copy of the part of the input string + * starting with the first non-separator character + * that occurs after the first separator is found + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The input string is not altered; all split parts are new strings.
+ *      (2) The split occurs around the first consecutive sequence of
+ *          tokens encountered.
+ *      (3) The head goes from the beginning of the string up to
+ *          but not including the first token found.
+ *      (4) The tail contains the second part of the string, starting
+ *          with the first char in that part that is NOT a token.
+ *      (5) If no separator token is found, 'head' contains a copy
+ *          of the input string and 'tail' is null.
+ * 
+ */ +l_ok +stringSplitOnToken(char *cstr, + const char *seps, + char **phead, + char **ptail) +{ +char *saveptr; + + PROCNAME("stringSplitOnToken"); + + if (!phead) + return ERROR_INT("&head not defined", procName, 1); + if (!ptail) + return ERROR_INT("&tail not defined", procName, 1); + *phead = *ptail = NULL; + if (!cstr) + return ERROR_INT("cstr not defined", procName, 1); + if (!seps) + return ERROR_INT("seps not defined", procName, 1); + + *phead = strtokSafe(cstr, seps, &saveptr); + if (saveptr) + *ptail = stringNew(saveptr); + return 0; +} + + +/*--------------------------------------------------------------------* + * Find and replace procs * + *--------------------------------------------------------------------*/ +/*! + * \brief stringCheckForChars() + * + * \param[in] src input string; can be of zero length + * \param[in] chars string of chars to be searched for in %src + * \param[out] pfound 1 if any characters are found; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This can be used to sanitize an operation by checking for
+ *          special characters that don't belong in a string.
+ * 
+ */ +l_ok +stringCheckForChars(const char *src, + const char *chars, + l_int32 *pfound) +{ +char ch; +l_int32 i, n; + + PROCNAME("stringCheckForChars"); + + if (!pfound) + return ERROR_INT("&found not defined", procName, 1); + *pfound = FALSE; + if (!src || !chars) + return ERROR_INT("src and chars not both defined", procName, 1); + + n = strlen(src); + for (i = 0; i < n; i++) { + ch = src[i]; + if (strchr(chars, ch)) { + *pfound = TRUE; + break; + } + } + return 0; +} + + +/*! + * \brief stringRemoveChars() + * + * \param[in] src input string; can be of zero length + * \param[in] remchars string of chars to be removed from src + * \return dest string with specified chars removed, or NULL on error + */ +char * +stringRemoveChars(const char *src, + const char *remchars) +{ +char ch; +char *dest; +l_int32 nsrc, i, k; + + PROCNAME("stringRemoveChars"); + + if (!src) + return (char *)ERROR_PTR("src not defined", procName, NULL); + if (!remchars) + return stringNew(src); + + if ((dest = (char *)LEPT_CALLOC(strlen(src) + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("dest not made", procName, NULL); + nsrc = strlen(src); + for (i = 0, k = 0; i < nsrc; i++) { + ch = src[i]; + if (!strchr(remchars, ch)) + dest[k++] = ch; + } + + return dest; +} + + +/*! + * \brief stringReplaceEachSubstr() + * + * \param[in] src input string; can be of zero length + * \param[in] sub1 substring to be replaced + * \param[in] sub2 substring to put in; can be "" + * \param[out] pcount [optional] the number of times that sub1 + * is found in src; 0 if not found + * \return dest string with substring replaced, or NULL if the + * substring not found or on error. + * + *
+ * Notes:
+ *      (1) This is a wrapper for simple string substitution that uses
+ *          the more general function arrayReplaceEachSequence().
+ *      (2) This finds every non-overlapping occurrence of %sub1 in
+ *          %src, and replaces it with %sub2.  By "non-overlapping"
+ *          we mean that after it finds each match, it removes the
+ *          matching characters, replaces with the substitution string
+ *          (if not empty), and continues.  For example, if you replace
+ *          'aa' by 'X' in 'baaabbb', you find one match at position 1
+ *          and return 'bXabbb'.
+ *      (3) To only remove each instance of sub1, use "" for sub2
+ *      (4) Returns a copy of %src if sub1 and sub2 are the same.
+ *      (5) If the input %src is binary data that can have null characters,
+ *          use arrayReplaceEachSequence() directly.
+ * 
+ */ +char * +stringReplaceEachSubstr(const char *src, + const char *sub1, + const char *sub2, + l_int32 *pcount) +{ +size_t datalen; + + PROCNAME("stringReplaceEachSubstr"); + + if (pcount) *pcount = 0; + if (!src || !sub1 || !sub2) + return (char *)ERROR_PTR("src, sub1, sub2 not all defined", + procName, NULL); + + if (strlen(sub2) > 0) { + return (char *)arrayReplaceEachSequence( + (const l_uint8 *)src, strlen(src), + (const l_uint8 *)sub1, strlen(sub1), + (const l_uint8 *)sub2, strlen(sub2), + &datalen, pcount); + } else { /* empty replacement string; removal only */ + return (char *)arrayReplaceEachSequence( + (const l_uint8 *)src, strlen(src), + (const l_uint8 *)sub1, strlen(sub1), + NULL, 0, &datalen, pcount); + } +} + + +/*! + * \brief stringReplaceSubstr() + * + * \param[in] src input string; can be of zero length + * \param[in] sub1 substring to be replaced + * \param[in] sub2 substring to put in; can be "" + * \param[in,out] ploc [optional] input start location for search; + * returns the loc after replacement + * \param[out] pfound [optional] 1 if sub1 is found; 0 otherwise + * \return dest string with substring replaced, or NULL on error. + * + *
+ * Notes:
+ *      (1) Replaces the first instance.
+ *      (2) To remove sub1 without replacement, use "" for sub2.
+ *      (3) Returns a copy of %src if either no instance of %sub1 is found,
+ *          or if %sub1 and %sub2 are the same.
+ *      (4) If %ploc == NULL, the search will start at the beginning of %src.
+ *          If %ploc != NULL, *ploc must be initialized to the byte offset
+ *          within %src from which the search starts.  To search the
+ *          string from the beginning, set %loc = 0 and input &loc.
+ *          After finding %sub1 and replacing it with %sub2, %loc will be
+ *          returned as the next position after %sub2 in the output string.
+ *      (5) Note that the output string also includes all the characters
+ *          from the input string that occur after the single substitution.
+ * 
+ */ +char * +stringReplaceSubstr(const char *src, + const char *sub1, + const char *sub2, + l_int32 *ploc, + l_int32 *pfound) +{ +const char *ptr; +char *dest; +l_int32 nsrc, nsub1, nsub2, len, npre, loc; + + PROCNAME("stringReplaceSubstr"); + + if (pfound) *pfound = 0; + if (!src || !sub1 || !sub2) + return (char *)ERROR_PTR("src, sub1, sub2 not all defined", + procName, NULL); + + if (ploc) + loc = *ploc; + else + loc = 0; + if (!strcmp(sub1, sub2)) + return stringNew(src); + if ((ptr = strstr(src + loc, sub1)) == NULL) + return stringNew(src); + if (pfound) *pfound = 1; + + nsrc = strlen(src); + nsub1 = strlen(sub1); + nsub2 = strlen(sub2); + len = nsrc + nsub2 - nsub1; + if ((dest = (char *)LEPT_CALLOC(len + 1, sizeof(char))) == NULL) + return (char *)ERROR_PTR("dest not made", procName, NULL); + npre = ptr - src; + memcpy(dest, src, npre); + strcpy(dest + npre, sub2); + strcpy(dest + npre + nsub2, ptr + nsub1); + if (ploc) *ploc = npre + nsub2; + return dest; +} + + +/*! + * \brief stringFindEachSubstr() + * + * \param[in] src input string; can be of zero length + * \param[in] sub substring to be searched for + * \return dna of offsets where the sequence is found, or NULL if + * none are found or on error + * + *
+ * Notes:
+ *      (1) This finds every non-overlapping occurrence in %src of %sub.
+ *          After it finds each match, it moves forward in %src by the length
+ *          of %sub before continuing the search.  So for example,
+ *          if you search for the sequence 'aa' in the data 'baaabbb',
+ *          you find one match at position 1.
+
+ * 
+ */ +L_DNA * +stringFindEachSubstr(const char *src, + const char *sub) +{ + PROCNAME("stringFindEachSubstr"); + + if (!src || !sub) + return (L_DNA *)ERROR_PTR("src, sub not both defined", procName, NULL); + + return arrayFindEachSequence((const l_uint8 *)src, strlen(src), + (const l_uint8 *)sub, strlen(sub)); +} + + +/*! + * \brief stringFindSubstr() + * + * \param[in] src input string; can be of zero length + * \param[in] sub substring to be searched for; must not be empty + * \param[out] ploc [optional] location of substring in src + * \return 1 if found; 0 if not found or on error + * + *
+ * Notes:
+ *      (1) This is a wrapper around strstr().  It finds the first
+ *          instance of %sub in %src.  If the substring is not found
+ *          and the location is returned, it has the value -1.
+ *      (2) Both %src and %sub must be defined, and %sub must have
+ *          length of at least 1.
+ * 
+ */ +l_int32 +stringFindSubstr(const char *src, + const char *sub, + l_int32 *ploc) +{ +const char *ptr; + + PROCNAME("stringFindSubstr"); + + if (ploc) *ploc = -1; + if (!src || !sub) + return ERROR_INT("src and sub not both defined", procName, 0); + if (strlen(sub) == 0) + return ERROR_INT("substring length 0", procName, 0); + if (strlen(src) == 0) + return 0; + + if ((ptr = strstr(src, sub)) == NULL) /* not found */ + return 0; + + if (ploc) + *ploc = ptr - src; + return 1; +} + + +/*! + * \brief arrayReplaceEachSequence() + * + * \param[in] datas source byte array + * \param[in] dataslen length of source data, in bytes + * \param[in] seq subarray of bytes to find in source data + * \param[in] seqlen length of subarray, in bytes + * \param[in] newseq replacement subarray; can be null + * \param[in] newseqlen length of replacement subarray, in bytes + * \param[out] pdatadlen length of dest byte array, in bytes + * \param[out] pcount [optional] the number of times that sub1 + * is found in src; 0 if not found + * \return datad with all all subarrays replaced (or removed) + * + *
+ * Notes:
+ *      (1) The byte arrays %datas, %seq and %newseq are not C strings,
+ *          because they can contain null bytes.  Therefore, for each
+ *          we must give the length of the array.
+ *      (2) If %newseq == NULL, this just removes all instances of %seq.
+ *          Otherwise, it replaces every non-overlapping occurrence of
+ *          %seq in %datas with %newseq. A new array %datad and its
+ *          size are returned.  See arrayFindEachSequence() for more
+ *          details on finding non-overlapping occurrences.
+ *      (3) If no instances of %seq are found, this returns a copy of %datas.
+ *      (4) The returned %datad is null terminated.
+ *      (5) Can use stringReplaceEachSubstr() if using C strings.
+ * 
+ */ +l_uint8 * +arrayReplaceEachSequence(const l_uint8 *datas, + size_t dataslen, + const l_uint8 *seq, + size_t seqlen, + const l_uint8 *newseq, + size_t newseqlen, + size_t *pdatadlen, + l_int32 *pcount) +{ +l_uint8 *datad; +size_t newsize; +l_int32 n, i, j, di, si, index, incr; +L_DNA *da; + + PROCNAME("arrayReplaceEachSequence"); + + if (pcount) *pcount = 0; + if (!datas || !seq) + return (l_uint8 *)ERROR_PTR("datas & seq not both defined", + procName, NULL); + if (!pdatadlen) + return (l_uint8 *)ERROR_PTR("&datadlen not defined", procName, NULL); + *pdatadlen = 0; + + /* Identify the locations of the sequence. If there are none, + * return a copy of %datas. */ + if ((da = arrayFindEachSequence(datas, dataslen, seq, seqlen)) == NULL) { + *pdatadlen = dataslen; + return l_binaryCopy(datas, dataslen); + } + + /* Allocate the output data; insure null termination */ + n = l_dnaGetCount(da); + if (pcount) *pcount = n; + if (!newseq) newseqlen = 0; + newsize = dataslen + n * (newseqlen - seqlen) + 4; + if ((datad = (l_uint8 *)LEPT_CALLOC(newsize, sizeof(l_uint8))) == NULL) { + l_dnaDestroy(&da); + return (l_uint8 *)ERROR_PTR("datad not made", procName, NULL); + } + + /* Replace each sequence instance with a new sequence */ + l_dnaGetIValue(da, 0, &si); + for (i = 0, di = 0, index = 0; i < dataslen; i++) { + if (i == si) { + index++; + if (index < n) { + l_dnaGetIValue(da, index, &si); + incr = L_MIN(seqlen, si - i); /* amount to remove from datas */ + } else { + incr = seqlen; + } + i += incr - 1; /* jump over the matched sequence in datas */ + if (newseq) { /* add new sequence to datad */ + for (j = 0; j < newseqlen; j++) + datad[di++] = newseq[j]; + } + } else { + datad[di++] = datas[i]; + } + } + + *pdatadlen = di; + l_dnaDestroy(&da); + return datad; +} + + +/*! + * \brief arrayFindEachSequence() + * + * \param[in] data byte array + * \param[in] datalen length of data, in bytes + * \param[in] sequence subarray of bytes to find in data + * \param[in] seqlen length of sequence, in bytes + * \return dna of offsets where the sequence is found, or NULL if + * none are found or on error + * + *
+ * Notes:
+ *      (1) The byte arrays %data and %sequence are not C strings,
+ *          because they can contain null bytes.  Therefore, for each
+ *          we must give the length of the array.
+ *      (2) This finds every non-overlapping occurrence in %data of %sequence.
+ *          After it finds each match, it moves forward by the length
+ *          of the sequence before continuing the search.  So for example,
+ *          if you search for the sequence 'aa' in the data 'baaabbb',
+ *          you find one match at position 1.
+ * 
+ */ +L_DNA * +arrayFindEachSequence(const l_uint8 *data, + size_t datalen, + const l_uint8 *sequence, + size_t seqlen) +{ +l_int32 start, offset, realoffset, found; +L_DNA *da; + + PROCNAME("arrayFindEachSequence"); + + if (!data || !sequence) + return (L_DNA *)ERROR_PTR("data & sequence not both defined", + procName, NULL); + + da = l_dnaCreate(0); + start = 0; + while (1) { + arrayFindSequence(data + start, datalen - start, sequence, seqlen, + &offset, &found); + if (found == FALSE) + break; + + realoffset = start + offset; + l_dnaAddNumber(da, realoffset); + start = realoffset + seqlen; + if (start >= datalen) + break; + } + + if (l_dnaGetCount(da) == 0) + l_dnaDestroy(&da); + return da; +} + + +/*! + * \brief arrayFindSequence() + * + * \param[in] data byte array + * \param[in] datalen length of data, in bytes + * \param[in] sequence subarray of bytes to find in data + * \param[in] seqlen length of sequence, in bytes + * \param[out] poffset offset from beginning of + * data where the sequence begins + * \param[out] pfound 1 if sequence is found; 0 otherwise + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The byte arrays 'data' and 'sequence' are not C strings,
+ *          because they can contain null bytes.  Therefore, for each
+ *          we must give the length of the array.
+ *      (2) This searches for the first occurrence in %data of %sequence,
+ *          which consists of %seqlen bytes.  The parameter %seqlen
+ *          must not exceed the actual length of the %sequence byte array.
+ *      (3) If the sequence is not found, the offset will be 0, so you
+ *          must check %found.
+ * 
+ */ +l_ok +arrayFindSequence(const l_uint8 *data, + size_t datalen, + const l_uint8 *sequence, + size_t seqlen, + l_int32 *poffset, + l_int32 *pfound) +{ +l_int32 i, j, found, lastpos; + + PROCNAME("arrayFindSequence"); + + if (poffset) *poffset = 0; + if (pfound) *pfound = FALSE; + if (!data || !sequence) + return ERROR_INT("data & sequence not both defined", procName, 1); + if (!poffset || !pfound) + return ERROR_INT("&offset and &found not defined", procName, 1); + + lastpos = datalen - seqlen + 1; + found = FALSE; + for (i = 0; i < lastpos; i++) { + for (j = 0; j < seqlen; j++) { + if (data[i + j] != sequence[j]) + break; + if (j == seqlen - 1) + found = TRUE; + } + if (found == TRUE) + break; + } + + if (found == TRUE) { + *poffset = i; + *pfound = TRUE; + } + return 0; +} + + +/*--------------------------------------------------------------------* + * Safe realloc * + *--------------------------------------------------------------------*/ +/*! + * \brief reallocNew() + * + * \param[in,out] pindata nulls indata before reallocing + * \param[in] oldsize size of input data to be copied, in bytes + * \param[in] newsize size of buffer to be reallocated in bytes + * \return ptr to new data, or NULL on error + * + * Action: !N.B. 3) and (4! + * 1 Allocates memory, initialized to 0 + * 2 Copies as much of the input data as possible + * to the new block, truncating the copy if necessary + * 3 Frees the input data + * 4 Zeroes the input data ptr + * + *
+ * Notes:
+ *      (1) If newsize <=0, just frees input data and nulls ptr
+ *      (2) If input data is null, just callocs new memory
+ *      (3) This differs from realloc in that it always allocates
+ *          new memory (if newsize > 0) and initializes it to 0,
+ *          it requires the amount of old data to be copied,
+ *          and it takes the address of the input ptr and
+ *          nulls the handle.
+ * 
+ */ +void * +reallocNew(void **pindata, + l_int32 oldsize, + l_int32 newsize) +{ +l_int32 minsize; +void *indata; +void *newdata; + + PROCNAME("reallocNew"); + + if (!pindata) + return ERROR_PTR("input data not defined", procName, NULL); + indata = *pindata; + + if (newsize <= 0) { /* nonstandard usage */ + if (indata) { + LEPT_FREE(indata); + *pindata = NULL; + } + return NULL; + } + + if (!indata) { /* nonstandard usage */ + if ((newdata = (void *)LEPT_CALLOC(1, newsize)) == NULL) + return ERROR_PTR("newdata not made", procName, NULL); + return newdata; + } + + /* Standard usage */ + if ((newdata = (void *)LEPT_CALLOC(1, newsize)) == NULL) + return ERROR_PTR("newdata not made", procName, NULL); + minsize = L_MIN(oldsize, newsize); + memcpy(newdata, indata, minsize); + LEPT_FREE(indata); + *pindata = NULL; + + return newdata; +} + + +/*--------------------------------------------------------------------* + * Read and write between file and memory * + *--------------------------------------------------------------------*/ +/*! + * \brief l_binaryRead() + * + * \param[in] filename + * \param[out] pnbytes number of bytes read + * \return data, or NULL on error + */ +l_uint8 * +l_binaryRead(const char *filename, + size_t *pnbytes) +{ +l_uint8 *data; +FILE *fp; + + PROCNAME("l_binaryRead"); + + if (!pnbytes) + return (l_uint8 *)ERROR_PTR("pnbytes not defined", procName, NULL); + *pnbytes = 0; + if (!filename) + return (l_uint8 *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (l_uint8 *)ERROR_PTR("file stream not opened", procName, NULL); + data = l_binaryReadStream(fp, pnbytes); + fclose(fp); + return data; +} + + +/*! + * \brief l_binaryReadStream() + * + * \param[in] fp file stream opened to read; can be stdin + * \param[out] pnbytes number of bytes read + * \return null-terminated array, or NULL on error; reading 0 bytes + * is not an error + * + *
+ * Notes:
+ *      (1) The returned array is terminated with a null byte so that it can
+ *          be used to read ascii data from a file into a proper C string.
+ *      (2) This can be used to capture data that is piped in via stdin,
+ *          because it does not require seeking within the file.
+ *      (3) For example, you can read an image from stdin into memory
+ *          using shell redirection, with one of these shell commands:
+ * \code
+ *             cat  | readprog
+ *             readprog < 
+ * \endcode
+ *          where readprog is:
+ * \code
+ *             l_uint8 *data = l_binaryReadStream(stdin, &nbytes);
+ *             Pix *pix = pixReadMem(data, nbytes);
+ * \endcode
+ * 
+ */ +l_uint8 * +l_binaryReadStream(FILE *fp, + size_t *pnbytes) +{ +l_uint8 *data; +l_int32 seekable, navail, nadd, nread; +L_BBUFFER *bb; + + PROCNAME("l_binaryReadStream"); + + if (!pnbytes) + return (l_uint8 *)ERROR_PTR("&nbytes not defined", procName, NULL); + *pnbytes = 0; + if (!fp) + return (l_uint8 *)ERROR_PTR("fp not defined", procName, NULL); + + /* Test if the stream is seekable, by attempting to seek to + * the start of data. This is a no-op. If it is seekable, use + * l_binaryReadSelectStream() to determine the size of the + * data to be read in advance. */ + seekable = (ftell(fp) == 0) ? 1 : 0; + if (seekable) + return l_binaryReadSelectStream(fp, 0, 0, pnbytes); + + /* If it is not seekable, use the bbuffer to realloc memory + * as needed during reading. */ + bb = bbufferCreate(NULL, 4096); + while (1) { + navail = bb->nalloc - bb->n; + if (navail < 4096) { + nadd = L_MAX(bb->nalloc, 4096); + bbufferExtendArray(bb, nadd); + } + nread = fread((void *)(bb->array + bb->n), 1, 4096, fp); + bb->n += nread; + if (nread != 4096) break; + } + + /* Copy the data to a new array sized for the data, because + * the bbuffer array can be nearly twice the size we need. */ + if ((data = (l_uint8 *)LEPT_CALLOC(bb->n + 1, sizeof(l_uint8))) != NULL) { + memcpy(data, bb->array, bb->n); + *pnbytes = bb->n; + } else { + L_ERROR("calloc fail for data\n", procName); + } + + bbufferDestroy(&bb); + return data; +} + + +/*! + * \brief l_binaryReadSelect() + * + * \param[in] filename + * \param[in] start first byte to read + * \param[in] nbytes number of bytes to read; use 0 to read to end of file + * \param[out] pnread number of bytes actually read + * \return data, or NULL on error + * + *
+ * Notes:
+ *      (1) The returned array is terminated with a null byte so that it can
+ *          be used to read ascii data from a file into a proper C string.
+ * 
+ */ +l_uint8 * +l_binaryReadSelect(const char *filename, + size_t start, + size_t nbytes, + size_t *pnread) +{ +l_uint8 *data; +FILE *fp; + + PROCNAME("l_binaryReadSelect"); + + if (!pnread) + return (l_uint8 *)ERROR_PTR("pnread not defined", procName, NULL); + *pnread = 0; + if (!filename) + return (l_uint8 *)ERROR_PTR("filename not defined", procName, NULL); + + if ((fp = fopenReadStream(filename)) == NULL) + return (l_uint8 *)ERROR_PTR("file stream not opened", procName, NULL); + data = l_binaryReadSelectStream(fp, start, nbytes, pnread); + fclose(fp); + return data; +} + + +/*! + * \brief l_binaryReadSelectStream() + * + * \param[in] fp file stream + * \param[in] start first byte to read + * \param[in] nbytes number of bytes to read; use 0 to read to end of file + * \param[out] pnread number of bytes actually read + * \return null-terminated array, or NULL on error; reading 0 bytes + * is not an error + * + *
+ * Notes:
+ *      (1) The returned array is terminated with a null byte so that it can
+ *          be used to read ascii data from a file into a proper C string.
+ *          If the file to be read is empty and %start == 0, an array
+ *          with a single null byte is returned.
+ *      (2) Side effect: the stream pointer is re-positioned to the
+ *          beginning of the file.
+ * 
+ */ +l_uint8 * +l_binaryReadSelectStream(FILE *fp, + size_t start, + size_t nbytes, + size_t *pnread) +{ +l_uint8 *data; +size_t bytesleft, bytestoread, nread, filebytes; + + PROCNAME("l_binaryReadSelectStream"); + + if (!pnread) + return (l_uint8 *)ERROR_PTR("&nread not defined", procName, NULL); + *pnread = 0; + if (!fp) + return (l_uint8 *)ERROR_PTR("stream not defined", procName, NULL); + + /* Verify and adjust the parameters if necessary */ + fseek(fp, 0, SEEK_END); /* EOF */ + filebytes = ftell(fp); + fseek(fp, 0, SEEK_SET); + if (start > filebytes) { + L_ERROR("start = %zu but filebytes = %zu\n", procName, + start, filebytes); + return NULL; + } + if (filebytes == 0) /* start == 0; nothing to read; return null byte */ + return (l_uint8 *)LEPT_CALLOC(1, 1); + bytesleft = filebytes - start; /* greater than 0 */ + if (nbytes == 0) nbytes = bytesleft; + bytestoread = (bytesleft >= nbytes) ? nbytes : bytesleft; + + /* Read the data */ + if ((data = (l_uint8 *)LEPT_CALLOC(1, bytestoread + 1)) == NULL) + return (l_uint8 *)ERROR_PTR("calloc fail for data", procName, NULL); + fseek(fp, start, SEEK_SET); + nread = fread(data, 1, bytestoread, fp); + if (nbytes != nread) + L_INFO("%zu bytes requested; %zu bytes read\n", procName, + nbytes, nread); + *pnread = nread; + fseek(fp, 0, SEEK_SET); + return data; +} + + +/*! + * \brief l_binaryWrite() + * + * \param[in] filename output file + * \param[in] operation "w" for write; "a" for append + * \param[in] data binary data to be written + * \param[in] nbytes size of data array + * \return 0 if OK; 1 on error + */ +l_ok +l_binaryWrite(const char *filename, + const char *operation, + const void *data, + size_t nbytes) +{ +char actualOperation[20]; +FILE *fp; + + PROCNAME("l_binaryWrite"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!operation) + return ERROR_INT("operation not defined", procName, 1); + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (nbytes <= 0) + return ERROR_INT("nbytes must be > 0", procName, 1); + + if (strcmp(operation, "w") && strcmp(operation, "a")) + return ERROR_INT("operation not one of {'w','a'}", procName, 1); + + /* The 'b' flag to fopen() is ignored for all POSIX + * conforming systems. However, Windows needs the 'b' flag. */ + stringCopy(actualOperation, operation, 2); + strncat(actualOperation, "b", 2); + + if ((fp = fopenWriteStream(filename, actualOperation)) == NULL) + return ERROR_INT("stream not opened", procName, 1); + fwrite(data, 1, nbytes, fp); + fclose(fp); + return 0; +} + + +/*! + * \brief nbytesInFile() + * + * \param[in] filename + * \return nbytes in file; 0 on error + */ +size_t +nbytesInFile(const char *filename) +{ +size_t nbytes; +FILE *fp; + + PROCNAME("nbytesInFile"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 0); + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("stream not opened", procName, 0); + nbytes = fnbytesInFile(fp); + fclose(fp); + return nbytes; +} + + +/*! + * \brief fnbytesInFile() + * + * \param[in] fp file stream + * \return nbytes in file; 0 on error + */ +size_t +fnbytesInFile(FILE *fp) +{ +l_int64 pos, nbytes; + + PROCNAME("fnbytesInFile"); + + if (!fp) + return ERROR_INT("stream not open", procName, 0); + + pos = ftell(fp); /* initial position */ + if (pos < 0) + return ERROR_INT("seek position must be > 0", procName, 0); + fseek(fp, 0, SEEK_END); /* EOF */ + nbytes = ftell(fp); + fseek(fp, pos, SEEK_SET); /* back to initial position */ + return nbytes; +} + + +/*--------------------------------------------------------------------* + * Copy and compare in memory * + *--------------------------------------------------------------------*/ +/*! + * \brief l_binaryCopy() + * + * \param[in] datas + * \param[in] size of data array + * \return datad on heap, or NULL on error + * + *
+ * Notes:
+ *      (1) We add 4 bytes to the zeroed output because in some cases
+ *          (e.g., string handling) it is important to have the data
+ *          be null terminated.  This guarantees that after the memcpy,
+ *          the result is automatically null terminated.
+ * 
+ */ +l_uint8 * +l_binaryCopy(const l_uint8 *datas, + size_t size) +{ +l_uint8 *datad; + + PROCNAME("l_binaryCopy"); + + if (!datas) + return (l_uint8 *)ERROR_PTR("datas not defined", procName, NULL); + + if ((datad = (l_uint8 *)LEPT_CALLOC(size + 4, sizeof(l_uint8))) == NULL) + return (l_uint8 *)ERROR_PTR("datad not made", procName, NULL); + memcpy(datad, datas, size); + return datad; +} + + +l_ok +l_binaryCompare(const l_uint8 *data1, + size_t size1, + const l_uint8 *data2, + size_t size2, + l_int32 *psame) +{ +l_int32 i; + + PROCNAME("l_binaryCompare"); + + if (!psame) + return ERROR_INT("&same not defined", procName, 1); + *psame = FALSE; + if (!data1 || !data2) + return ERROR_INT("data1 and data2 not both defined", procName, 1); + if (size1 != size2) return 0; + for (i = 0; i < size1; i++) { + if (data1[i] != data2[i]) + return 0; + } + *psame = TRUE; + return 0; +} + +/*--------------------------------------------------------------------* + * File copy operations * + *--------------------------------------------------------------------*/ +/*! + * \brief fileCopy() + * + * \param[in] srcfile copy from this file + * \param[in] newfile copy to this file + * \return 0 if OK, 1 on error + */ +l_ok +fileCopy(const char *srcfile, + const char *newfile) +{ +l_int32 ret; +size_t nbytes; +l_uint8 *data; + + PROCNAME("fileCopy"); + + if (!srcfile) + return ERROR_INT("srcfile not defined", procName, 1); + if (!newfile) + return ERROR_INT("newfile not defined", procName, 1); + + if ((data = l_binaryRead(srcfile, &nbytes)) == NULL) + return ERROR_INT("data not returned", procName, 1); + ret = l_binaryWrite(newfile, "w", data, nbytes); + LEPT_FREE(data); + return ret; +} + + +/*! + * \brief fileConcatenate() + * + * \param[in] srcfile append data from this file + * \param[in] destfile add data to this file + * \return 0 if OK, 1 on error + */ +l_ok +fileConcatenate(const char *srcfile, + const char *destfile) +{ +size_t nbytes; +l_uint8 *data; + + PROCNAME("fileConcatenate"); + + if (!srcfile) + return ERROR_INT("srcfile not defined", procName, 1); + if (!destfile) + return ERROR_INT("destfile not defined", procName, 1); + + data = l_binaryRead(srcfile, &nbytes); + l_binaryWrite(destfile, "a", data, nbytes); + LEPT_FREE(data); + return 0; +} + + +/*! + * \brief fileAppendString() + * + * \param[in] filename + * \param[in] str string to append to file + * \return 0 if OK, 1 on error + */ +l_ok +fileAppendString(const char *filename, + const char *str) +{ +FILE *fp; + + PROCNAME("fileAppendString"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!str) + return ERROR_INT("str not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "a")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + fprintf(fp, "%s", str); + fclose(fp); + return 0; +} + + +/*--------------------------------------------------------------------* + * Multi-platform functions for opening file streams * + *--------------------------------------------------------------------*/ +/*! + * \brief fopenReadStream() + * + * \param[in] filename + * \return stream, or NULL on error + * + *
+ * Notes:
+ *      (1) This should be used whenever you want to run fopen() to
+ *          read from a stream.  Never call fopen() directory.
+ *      (2) This handles the temp directory pathname conversion on windows:
+ *              /tmp  ==>  [Windows Temp directory]
+ * 
+ */ +FILE * +fopenReadStream(const char *filename) +{ +char *fname, *tail; +FILE *fp; + + PROCNAME("fopenReadStream"); + + if (!filename) + return (FILE *)ERROR_PTR("filename not defined", procName, NULL); + + /* Try input filename */ + fname = genPathname(filename, NULL); + fp = fopen(fname, "rb"); + LEPT_FREE(fname); + if (fp) return fp; + + /* Else, strip directory and try locally */ + splitPathAtDirectory(filename, NULL, &tail); + fp = fopen(tail, "rb"); + LEPT_FREE(tail); + + if (!fp) + return (FILE *)ERROR_PTR("file not found", procName, NULL); + return fp; +} + + +/*! + * \brief fopenWriteStream() + * + * \param[in] filename + * \param[in] modestring + * \return stream, or NULL on error + * + *
+ * Notes:
+ *      (1) This should be used whenever you want to run fopen() to
+ *          write or append to a stream.  Never call fopen() directory.
+ *      (2) This handles the temp directory pathname conversion on windows:
+ *              /tmp  ==>  [Windows Temp directory]
+ * 
+ */ +FILE * +fopenWriteStream(const char *filename, + const char *modestring) +{ +char *fname; +FILE *fp; + + PROCNAME("fopenWriteStream"); + + if (!filename) + return (FILE *)ERROR_PTR("filename not defined", procName, NULL); + + fname = genPathname(filename, NULL); + fp = fopen(fname, modestring); + LEPT_FREE(fname); + if (!fp) + return (FILE *)ERROR_PTR("stream not opened", procName, NULL); + return fp; +} + + +/*! + * \brief fopenReadFromMemory() + * + * \param[in] data, size + * \return file stream, or NULL on error + * + *
+ * Notes:
+ *      (1) Work-around if fmemopen() not available.
+ *      (2) Windows tmpfile() writes into the root C:\ directory, which
+ *          requires admin privileges.  This also works around that.
+ * 
+ */ +FILE * +fopenReadFromMemory(const l_uint8 *data, + size_t size) +{ +FILE *fp; + + PROCNAME("fopenReadFromMemory"); + + if (!data) + return (FILE *)ERROR_PTR("data not defined", procName, NULL); + +#if HAVE_FMEMOPEN + if ((fp = fmemopen((void *)data, size, "rb")) == NULL) + return (FILE *)ERROR_PTR("stream not opened", procName, NULL); +#else /* write to tmp file */ + L_INFO("work-around: writing to a temp file\n", procName); + #ifdef _WIN32 + if ((fp = fopenWriteWinTempfile()) == NULL) + return (FILE *)ERROR_PTR("tmpfile stream not opened", procName, NULL); + #else + if ((fp = tmpfile()) == NULL) + return (FILE *)ERROR_PTR("tmpfile stream not opened", procName, NULL); + #endif /* _WIN32 */ + fwrite(data, 1, size, fp); + rewind(fp); +#endif /* HAVE_FMEMOPEN */ + + return fp; +} + + +/*--------------------------------------------------------------------* + * Opening a windows tmpfile for writing * + *--------------------------------------------------------------------*/ +/*! + * \brief fopenWriteWinTempfile() + * + * \return file stream, or NULL on error + * + *
+ * Notes:
+ *      (1) The Windows version of tmpfile() writes into the root
+ *          C:\ directory, which requires admin privileges.  This
+ *          function provides an alternative implementation.
+ * 
+ */ +FILE * +fopenWriteWinTempfile() +{ +#ifdef _WIN32 +l_int32 handle; +FILE *fp; +char *filename; + + PROCNAME("fopenWriteWinTempfile"); + + if ((filename = l_makeTempFilename()) == NULL) { + L_ERROR("l_makeTempFilename failed, %s\n", procName, strerror(errno)); + return NULL; + } + + handle = _open(filename, _O_CREAT | _O_RDWR | _O_SHORT_LIVED | + _O_TEMPORARY | _O_BINARY, _S_IREAD | _S_IWRITE); + lept_free(filename); + if (handle == -1) { + L_ERROR("_open failed, %s\n", procName, strerror(errno)); + return NULL; + } + + if ((fp = _fdopen(handle, "r+b")) == NULL) { + L_ERROR("_fdopen failed, %s\n", procName, strerror(errno)); + return NULL; + } + + return fp; +#else + return NULL; +#endif /* _WIN32 */ +} + + +/*--------------------------------------------------------------------* + * Multi-platform functions that avoid C-runtime boundary * + * crossing for applications with Windows DLLs * + *--------------------------------------------------------------------*/ +/* + * Problems arise when pointers to streams and data are passed + * between two Windows DLLs that have been generated with different + * C runtimes. To avoid this, leptonica provides wrappers for + * several C library calls. + */ +/*! + * \brief lept_fopen() + * + * \param[in] filename + * \param[in] mode same as for fopen(); e.g., "rb" + * \return stream or NULL on error + * + *
+ * Notes:
+ *      (1) This must be used by any application that passes
+ *          a file handle to a leptonica Windows DLL.
+ * 
+ */ +FILE * +lept_fopen(const char *filename, + const char *mode) +{ + PROCNAME("lept_fopen"); + + if (!filename) + return (FILE *)ERROR_PTR("filename not defined", procName, NULL); + if (!mode) + return (FILE *)ERROR_PTR("mode not defined", procName, NULL); + + if (stringFindSubstr(mode, "r", NULL)) + return fopenReadStream(filename); + else + return fopenWriteStream(filename, mode); +} + + +/*! + * \brief lept_fclose() + * + * \param[in] fp file stream + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This should be used by any application that accepts
+ *          a file handle generated by a leptonica Windows DLL.
+ * 
+ */ +l_ok +lept_fclose(FILE *fp) +{ + PROCNAME("lept_fclose"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + + return fclose(fp); +} + + +/*! + * \brief lept_calloc() + * + * \param[in] nmemb number of members + * \param[in] size of each member + * \return void ptr, or NULL on error + * + *
+ * Notes:
+ *      (1) For safety with windows DLLs, this can be used in conjunction
+ *          with lept_free() to avoid C-runtime boundary problems.
+ *          Just use these two functions throughout your application.
+ * 
+ */ +void * +lept_calloc(size_t nmemb, + size_t size) +{ + if (nmemb <= 0 || size <= 0) + return NULL; + return LEPT_CALLOC(nmemb, size); +} + + +/*! + * \brief lept_free() + * + * \param[in] ptr + * + *
+ * Notes:
+ *      (1) This should be used by any application that accepts
+ *          heap data allocated by a leptonica Windows DLL.
+ * 
+ */ +void +lept_free(void *ptr) +{ + if (!ptr) return; + LEPT_FREE(ptr); + return; +} + + +/*--------------------------------------------------------------------* + * Multi-platform file system operations * + * [ These only write to /tmp or its subdirectories ] * + *--------------------------------------------------------------------*/ +/*! + * \brief lept_mkdir() + * + * \param[in] subdir of /tmp or its equivalent on Windows + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) %subdir is a partial path that can consist of one or more
+ *          directories.
+ *      (2) This makes any subdirectories of /tmp that are required.
+ *      (3) The root temp directory is:
+ *            /tmp    (unix)  [default]
+ *            [Temp]  (windows)
+ * 
+ */ +l_int32 +lept_mkdir(const char *subdir) +{ +char *dir, *tmpdir; +l_int32 i, n; +l_int32 ret = 0; +SARRAY *sa; +#ifdef _WIN32 +l_uint32 attributes; +#endif /* _WIN32 */ + + PROCNAME("lept_mkdir"); + + if (!LeptDebugOK) { + L_INFO("making named temp subdirectory %s is disabled\n", + procName, subdir); + return 0; + } + + if (!subdir) + return ERROR_INT("subdir not defined", procName, 1); + if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) + return ERROR_INT("subdir not an actual subdirectory", procName, 1); + + sa = sarrayCreate(0); + sarraySplitString(sa, subdir, "/"); + n = sarrayGetCount(sa); + dir = genPathname("/tmp", NULL); + /* Make sure the tmp directory exists */ +#ifndef _WIN32 + ret = mkdir(dir, 0777); +#else + attributes = GetFileAttributes(dir); + if (attributes == INVALID_FILE_ATTRIBUTES) + ret = (CreateDirectory(dir, NULL) ? 0 : 1); +#endif + /* Make all the subdirectories */ + for (i = 0; i < n; i++) { + tmpdir = pathJoin(dir, sarrayGetString(sa, i, L_NOCOPY)); +#ifndef _WIN32 + ret += mkdir(tmpdir, 0777); +#else + if (CreateDirectory(tmpdir, NULL) == 0) + ret += (GetLastError () != ERROR_ALREADY_EXISTS); +#endif + LEPT_FREE(dir); + dir = tmpdir; + } + LEPT_FREE(dir); + sarrayDestroy(&sa); + if (ret > 0) + L_ERROR("failure to create %d directories\n", procName, ret); + return ret; +} + + +/*! + * \brief lept_rmdir() + * + * \param[in] subdir of /tmp or its equivalent on Windows + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) %subdir is a partial path that can consist of one or more
+ *          directories.
+ *      (2) This removes all files from the specified subdirectory of
+ *          the root temp directory:
+ *            /tmp    (unix)
+ *            [Temp]  (windows)
+ *          and then removes the subdirectory.
+ *      (3) The combination
+ *            lept_rmdir(subdir);
+ *            lept_mkdir(subdir);
+ *          is guaranteed to give you an empty subdirectory.
+ * 
+ */ +l_int32 +lept_rmdir(const char *subdir) +{ +char *dir, *realdir, *fname, *fullname; +l_int32 exists, ret, i, nfiles; +SARRAY *sa; +#ifdef _WIN32 +char *newpath; +#endif /* _WIN32 */ + + PROCNAME("lept_rmdir"); + + if (!subdir) + return ERROR_INT("subdir not defined", procName, 1); + if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) + return ERROR_INT("subdir not an actual subdirectory", procName, 1); + + /* Find the temp subdirectory */ + dir = pathJoin("/tmp", subdir); + if (!dir) + return ERROR_INT("directory name not made", procName, 1); + lept_direxists(dir, &exists); + if (!exists) { /* fail silently */ + LEPT_FREE(dir); + return 0; + } + + /* List all the files in that directory */ + if ((sa = getFilenamesInDirectory(dir)) == NULL) { + L_ERROR("directory %s does not exist!\n", procName, dir); + LEPT_FREE(dir); + return 1; + } + nfiles = sarrayGetCount(sa); + + for (i = 0; i < nfiles; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + fullname = genPathname(dir, fname); + remove(fullname); + LEPT_FREE(fullname); + } + +#ifndef _WIN32 + realdir = genPathname("/tmp", subdir); + ret = rmdir(realdir); + LEPT_FREE(realdir); +#else + newpath = genPathname(dir, NULL); + ret = (RemoveDirectory(newpath) ? 0 : 1); + LEPT_FREE(newpath); +#endif /* !_WIN32 */ + + sarrayDestroy(&sa); + LEPT_FREE(dir); + return ret; +} + + +/*! + * \brief lept_direxists() + * + * \param[in] dir + * \param[out] pexists 1 if it exists; 0 otherwise + * \return void + * + *
+ * Notes:
+ *      (1) Always use unix pathname separators.
+ *      (2) By calling genPathname(), if the pathname begins with "/tmp"
+ *          this does an automatic directory translation on windows
+ *          to a path in the windows [Temp] directory:
+ *             "/tmp"  ==>  [Temp] (windows)
+ * 
+ */ +void +lept_direxists(const char *dir, + l_int32 *pexists) +{ +char *realdir; + + if (!pexists) return; + *pexists = 0; + if (!dir) return; + if ((realdir = genPathname(dir, NULL)) == NULL) + return; + +#ifndef _WIN32 + { + struct stat s; + l_int32 err = stat(realdir, &s); + if (err != -1 && S_ISDIR(s.st_mode)) + *pexists = 1; + } +#else /* _WIN32 */ + l_uint32 attributes; + attributes = GetFileAttributes(realdir); + if (attributes != INVALID_FILE_ATTRIBUTES && + (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + *pexists = 1; + } +#endif /* _WIN32 */ + + LEPT_FREE(realdir); + return; +} + + +/*! + * \brief lept_rm_match() + * + * \param[in] subdir [optional] if NULL, the removed files are in /tmp + * \param[in] substr [optional] pattern to match in filename + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) This removes the matched files in /tmp or a subdirectory of /tmp.
+ *          Use NULL for %subdir if the files are in /tmp.
+ *      (2) If %substr == NULL, this removes all files in the directory.
+ *          If %substr == "" (empty), this removes no files.
+ *          If both %subdir == NULL and %substr == NULL, this removes
+ *          all files in /tmp.
+ *      (3) Use unix pathname separators.
+ *      (4) By calling genPathname(), if the pathname begins with "/tmp"
+ *          this does an automatic directory translation on windows
+ *          to a path in the windows [Temp] directory:
+ *             "/tmp"  ==>  [Temp] (windows)
+ *      (5) Error conditions:
+ *            * returns -1 if the directory is not found
+ *            * returns the number of files (> 0) that it was unable to remove.
+ * 
+ */ +l_int32 +lept_rm_match(const char *subdir, + const char *substr) +{ +char *path, *fname; +char tempdir[256]; +l_int32 i, n, ret; +SARRAY *sa; + + PROCNAME("lept_rm_match"); + + makeTempDirname(tempdir, sizeof(tempdir), subdir); + if ((sa = getSortedPathnamesInDirectory(tempdir, substr, 0, 0)) == NULL) + return ERROR_INT("sa not made", procName, -1); + n = sarrayGetCount(sa); + if (n == 0) { + L_WARNING("no matching files found\n", procName); + sarrayDestroy(&sa); + return 0; + } + + ret = 0; + for (i = 0; i < n; i++) { + fname = sarrayGetString(sa, i, L_NOCOPY); + path = genPathname(fname, NULL); + if (lept_rmfile(path) != 0) { + L_ERROR("failed to remove %s\n", procName, path); + ret++; + } + LEPT_FREE(path); + } + sarrayDestroy(&sa); + return ret; +} + + +/*! + * \brief lept_rm() + * + * \param[in] subdir [optional] subdir of '/tmp'; can be NULL + * \param[in] tail filename without the directory + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) By calling genPathname(), this does an automatic directory
+ *          translation on windows to a path in the windows [Temp] directory:
+ *             "/tmp/..."  ==>  [Temp]/... (windows)
+ * 
+ */ +l_int32 +lept_rm(const char *subdir, + const char *tail) +{ +char *path; +char newtemp[256]; +l_int32 ret; + + PROCNAME("lept_rm"); + + if (!tail || strlen(tail) == 0) + return ERROR_INT("tail undefined or empty", procName, 1); + + if (makeTempDirname(newtemp, sizeof(newtemp), subdir)) + return ERROR_INT("temp dirname not made", procName, 1); + path = genPathname(newtemp, tail); + ret = lept_rmfile(path); + LEPT_FREE(path); + return ret; +} + + +/*! + * \brief + * + * lept_rmfile() + * + * \param[in] filepath full path to file including the directory + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) This removes the named file.
+ *      (2) Use unix pathname separators.
+ *      (3) There is no name translation.
+ *      (4) Unlike the other lept_* functions in this section, this can remove
+ *          any file -- it is not restricted to files that are in /tmp or a
+ *          subdirectory of it.
+ * 
+ */ +l_int32 +lept_rmfile(const char *filepath) +{ +l_int32 ret; + + PROCNAME("lept_rmfile"); + + if (!filepath || strlen(filepath) == 0) + return ERROR_INT("filepath undefined or empty", procName, 1); + +#ifndef _WIN32 + ret = remove(filepath); +#else + /* Set attributes to allow deletion of read-only files */ + SetFileAttributes(filepath, FILE_ATTRIBUTE_NORMAL); + ret = DeleteFile(filepath) ? 0 : 1; +#endif /* !_WIN32 */ + + return ret; +} + + +/*! + * \brief lept_mv() + * + * \param[in] srcfile + * \param[in] newdir [optional]; can be NULL + * \param[in] newtail [optional]; can be NULL + * \param[out] pnewpath [optional] of actual path; can be NULL + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) This moves %srcfile to /tmp or to a subdirectory of /tmp.
+ *      (2) %srcfile can either be a full path or relative to the
+ *          current directory.
+ *      (3) %newdir can either specify an existing subdirectory of /tmp
+ *          or can be NULL.  In the latter case, the file will be written
+ *          into /tmp.
+ *      (4) %newtail can either specify a filename tail or, if NULL,
+ *          the filename is taken from src-tail, the tail of %srcfile.
+ *      (5) For debugging, the computed newpath can be returned.  It must
+ *          be freed by the caller.
+ *      (6) Reminders:
+ *          (a) specify files using unix pathnames
+ *          (b) for windows, translates
+ *                 /tmp  ==>  [Temp]
+ *              where [Temp] is the windows temp directory
+ *      (7) Examples:
+ *          * newdir = NULL,    newtail = NULL    ==> /tmp/src-tail
+ *          * newdir = NULL,    newtail = abc     ==> /tmp/abc
+ *          * newdir = def/ghi, newtail = NULL    ==> /tmp/def/ghi/src-tail
+ *          * newdir = def/ghi, newtail = abc     ==> /tmp/def/ghi/abc
+ * 
+ */ +l_int32 +lept_mv(const char *srcfile, + const char *newdir, + const char *newtail, + char **pnewpath) +{ +char *srcpath, *newpath, *dir, *srctail; +char newtemp[256]; +l_int32 ret; + + PROCNAME("lept_mv"); + + if (!srcfile) + return ERROR_INT("srcfile not defined", procName, 1); + + /* Require output pathname to be in /tmp/ or a subdirectory */ + if (makeTempDirname(newtemp, sizeof(newtemp), newdir) == 1) + return ERROR_INT("newdir not NULL or a subdir of /tmp", procName, 1); + + /* Get canonical src pathname */ + splitPathAtDirectory(srcfile, &dir, &srctail); + +#ifndef _WIN32 + srcpath = pathJoin(dir, srctail); + LEPT_FREE(dir); + + /* Generate output pathname */ + if (!newtail || newtail[0] == '\0') + newpath = pathJoin(newtemp, srctail); + else + newpath = pathJoin(newtemp, newtail); + LEPT_FREE(srctail); + + /* Overwrite any existing file at 'newpath' */ + ret = fileCopy(srcpath, newpath); + if (!ret) { /* and remove srcfile */ + char *realpath = genPathname(srcpath, NULL); + remove(realpath); + LEPT_FREE(realpath); + } +#else + srcpath = genPathname(dir, srctail); + LEPT_FREE(dir); + + /* Generate output pathname */ + if (!newtail || newtail[0] == '\0') + newpath = genPathname(newtemp, srctail); + else + newpath = genPathname(newtemp, newtail); + LEPT_FREE(srctail); + + /* Overwrite any existing file at 'newpath' */ + ret = MoveFileEx(srcpath, newpath, + MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING) ? 0 : 1; +#endif /* ! _WIN32 */ + + LEPT_FREE(srcpath); + if (pnewpath) + *pnewpath = newpath; + else + LEPT_FREE(newpath); + return ret; +} + + +/*! + * \brief lept_cp() + * + * \param[in] srcfile + * \param[in] newdir [optional]; can be NULL + * \param[in] newtail [optional]; can be NULL + * \param[out] pnewpath [optional] of actual path; can be NULL + * \return 0 on success, non-zero on failure + * + *
+ * Notes:
+ *      (1) This copies %srcfile to /tmp or to a subdirectory of /tmp.
+ *      (2) %srcfile can either be a full path or relative to the
+ *          current directory.
+ *      (3) %newdir can either specify an existing subdirectory of /tmp,
+ *          or can be NULL.  In the latter case, the file will be written
+ *          into /tmp.
+ *      (4) %newtail can either specify a filename tail or, if NULL,
+ *          the filename is taken from src-tail, the tail of %srcfile.
+ *      (5) For debugging, the computed newpath can be returned.  It must
+ *          be freed by the caller.
+ *      (6) Reminders:
+ *          (a) specify files using unix pathnames
+ *          (b) for windows, translates
+ *                 /tmp  ==>  [Temp]
+ *              where [Temp] is the windows temp directory
+ *      (7) Examples:
+ *          * newdir = NULL,    newtail = NULL    ==> /tmp/src-tail
+ *          * newdir = NULL,    newtail = abc     ==> /tmp/abc
+ *          * newdir = def/ghi, newtail = NULL    ==> /tmp/def/ghi/src-tail
+ *          * newdir = def/ghi, newtail = abc     ==> /tmp/def/ghi/abc
+ *
+ * 
+ */ +l_int32 +lept_cp(const char *srcfile, + const char *newdir, + const char *newtail, + char **pnewpath) +{ +char *srcpath, *newpath, *dir, *srctail; +char newtemp[256]; +l_int32 ret; + + PROCNAME("lept_cp"); + + if (!srcfile) + return ERROR_INT("srcfile not defined", procName, 1); + + /* Require output pathname to be in /tmp or a subdirectory */ + if (makeTempDirname(newtemp, sizeof(newtemp), newdir) == 1) + return ERROR_INT("newdir not NULL or a subdir of /tmp", procName, 1); + + /* Get canonical src pathname */ + splitPathAtDirectory(srcfile, &dir, &srctail); + +#ifndef _WIN32 + srcpath = pathJoin(dir, srctail); + LEPT_FREE(dir); + + /* Generate output pathname */ + if (!newtail || newtail[0] == '\0') + newpath = pathJoin(newtemp, srctail); + else + newpath = pathJoin(newtemp, newtail); + LEPT_FREE(srctail); + + /* Overwrite any existing file at 'newpath' */ + ret = fileCopy(srcpath, newpath); +#else + srcpath = genPathname(dir, srctail); + LEPT_FREE(dir); + + /* Generate output pathname */ + if (!newtail || newtail[0] == '\0') + newpath = genPathname(newtemp, srctail); + else + newpath = genPathname(newtemp, newtail); + LEPT_FREE(srctail); + + /* Overwrite any existing file at 'newpath' */ + ret = CopyFile(srcpath, newpath, FALSE) ? 0 : 1; +#endif /* !_WIN32 */ + + LEPT_FREE(srcpath); + if (pnewpath) + *pnewpath = newpath; + else + LEPT_FREE(newpath); + return ret; +} + + +/*--------------------------------------------------------------------* + * Special debug/test function for calling 'system' * + *--------------------------------------------------------------------*/ +#if defined(__APPLE__) + #include "TargetConditionals.h" +#endif /* __APPLE__ */ + +/*! + * \brief callSystemDebug() + * + * \param[in] cmd command to be exec'd + * \return void + * + *
+ * Notes:
+ *      (1) The C library 'system' call is only made through this function.
+ *          It only works in debug/test mode, where the global variable
+ *          LeptDebugOK == TRUE.  This variable is set to FALSE in the
+ *          library as distributed, and calling this function will
+ *          generate an error message.
+ * 
+ */ +void +callSystemDebug(const char *cmd) +{ +l_int32 ret; + + PROCNAME("callSystemDebug"); + + if (!cmd) { + L_ERROR("cmd not defined\n", procName); + return; + } + if (LeptDebugOK == FALSE) { + L_INFO("'system' calls are disabled\n", procName); + return; + } + +#if defined(__APPLE__) /* iOS 11 does not support system() */ + + #if TARGET_OS_OSX /* Mac OS X */ + ret = system(cmd); + #elif TARGET_OS_IPHONE || defined(OS_IOS) /* iOS */ + L_ERROR("iOS 11 does not support system()\n", procName); + #endif /* TARGET_OS_OSX */ + +#else /* ! __APPLE__ */ + + ret = system(cmd); + +#endif /* __APPLE__ */ +} + + +/*--------------------------------------------------------------------* + * General file name operations * + *--------------------------------------------------------------------*/ +/*! + * \brief splitPathAtDirectory() + * + * \param[in] pathname full path; can be a directory + * \param[out] pdir [optional] root directory name of + * input path, including trailing '/' + * \param[out] ptail [optional] path tail, which is either + * the file name within the root directory or + * the last sub-directory in the path + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If you only want the tail, input null for the root directory ptr.
+ *      (2) If you only want the root directory name, input null for the
+ *          tail ptr.
+ *      (3) This function makes decisions based only on the lexical
+ *          structure of the input.  Examples:
+ *            /usr/tmp/abc.d  -->  dir: /usr/tmp/       tail: abc.d
+ *            /usr/tmp/       -->  dir: /usr/tmp/       tail: [empty string]
+ *            /usr/tmp        -->  dir: /usr/           tail: tmp
+ *            abc.d           -->  dir: [empty string]  tail: abc.d
+ *      (4  Consider the first example above: /usr/tmp/abc.d.
+ *          Suppose you want the stem of the file, abc, without either
+ *          the directory or the extension.  This can be extracted in two steps:
+ *              splitPathAtDirectory("usr/tmp/abc.d", NULL, &tail);
+ *                   [sets tail: "abc.d"]
+ *              splitPathAtExtension(tail, &basename, NULL);
+ *                   [sets basename: "abc"]
+ *      (5) The input can have either forward (unix) or backward (win)
+ *          slash separators.  The output has unix separators.
+ *          Note that Win32 pathname functions generally accept both
+ *          slash forms, but the windows command line interpreter
+ *          only accepts backward slashes, because forward slashes are
+ *          used to demarcate switches (vs. dashes in unix).
+ * 
+ */ +l_ok +splitPathAtDirectory(const char *pathname, + char **pdir, + char **ptail) +{ +char *cpathname, *lastslash; + + PROCNAME("splitPathAtDirectory"); + + if (!pdir && !ptail) + return ERROR_INT("null input for both strings", procName, 1); + if (pdir) *pdir = NULL; + if (ptail) *ptail = NULL; + if (!pathname) + return ERROR_INT("pathname not defined", procName, 1); + + cpathname = stringNew(pathname); + convertSepCharsInPath(cpathname, UNIX_PATH_SEPCHAR); + lastslash = strrchr(cpathname, '/'); + if (lastslash) { + if (ptail) + *ptail = stringNew(lastslash + 1); + if (pdir) { + *(lastslash + 1) = '\0'; + *pdir = cpathname; + } else { + LEPT_FREE(cpathname); + } + } else { /* no directory */ + if (pdir) + *pdir = stringNew(""); + if (ptail) + *ptail = cpathname; + else + LEPT_FREE(cpathname); + } + + return 0; +} + + +/*! + * \brief splitPathAtExtension() + * + * \param[in] pathname full path; can be a directory + * \param[out] pbasename [optional] pathname not including the + * last dot and characters after that + * \param[out] pextension [optional] path extension, which is + * the last dot and the characters after it. If + * there is no extension, it returns the empty string + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) If you only want the extension, input null for the basename ptr.
+ *      (2) If you only want the basename without extension, input null
+ *          for the extension ptr.
+ *      (3) This function makes decisions based only on the lexical
+ *          structure of the input.  Examples:
+ *            /usr/tmp/abc.jpg  -->  basename: /usr/tmp/abc    ext: .jpg
+ *            /usr/tmp/.jpg     -->  basename: /usr/tmp/       ext: .jpg
+ *            /usr/tmp.jpg/     -->  basename: /usr/tmp.jpg/   ext: [empty str]
+ *            ./.jpg            -->  basename: ./              ext: .jpg
+ *      (4) The input can have either forward (unix) or backward (win)
+ *          slash separators.  The output has unix separators.
+ *      (5) Note that basename, as used here, is different from the result
+ *          of the unix program 'basename'.  Here, basename is the entire
+ *          pathname up to a final extension and its preceding dot.
+ * 
+ */ +l_ok +splitPathAtExtension(const char *pathname, + char **pbasename, + char **pextension) +{ +char *tail, *dir, *lastdot; +char empty[4] = ""; + + PROCNAME("splitPathExtension"); + + if (!pbasename && !pextension) + return ERROR_INT("null input for both strings", procName, 1); + if (pbasename) *pbasename = NULL; + if (pextension) *pextension = NULL; + if (!pathname) + return ERROR_INT("pathname not defined", procName, 1); + + /* Split out the directory first */ + splitPathAtDirectory(pathname, &dir, &tail); + + /* Then look for a "." in the tail part. + * This way we ignore all "." in the directory. */ + if ((lastdot = strrchr(tail, '.'))) { + if (pextension) + *pextension = stringNew(lastdot); + if (pbasename) { + *lastdot = '\0'; + *pbasename = stringJoin(dir, tail); + } + } else { + if (pextension) + *pextension = stringNew(empty); + if (pbasename) + *pbasename = stringNew(pathname); + } + LEPT_FREE(dir); + LEPT_FREE(tail); + return 0; +} + + +/*! + * \brief pathJoin() + * + * \param[in] dir [optional] can be null + * \param[in] fname [optional] can be null + * \return specially concatenated path, or NULL on error + * + *
+ * Notes:
+ *      (1) Use unix-style pathname separators ('/').
+ *      (2) %fname can be the entire path, or part of the path containing
+ *          at least one directory, or a tail without a directory, or NULL.
+ *      (3) It produces a path that strips multiple slashes to a single
+ *          slash, joins %dir and %fname by a slash, and has no trailing
+ *          slashes (except in the cases where %dir == "/" and
+ *          %fname == NULL, or v.v.).
+ *      (4) If both %dir and %fname are null, produces an empty string.
+ *      (5) Neither %dir nor %fname can begin with '..'.
+ *      (6) The result is not canonicalized or tested for correctness:
+ *          garbage in (e.g., /&%), garbage out.
+ *      (7) Examples:
+ *             //tmp// + //abc/  -->  /tmp/abc
+ *             tmp/ + /abc/      -->  tmp/abc
+ *             tmp/ + abc/       -->  tmp/abc
+ *             /tmp/ + ///       -->  /tmp
+ *             /tmp/ + NULL      -->  /tmp
+ *             // + /abc//       -->  /abc
+ *             // + NULL         -->  /
+ *             NULL + /abc/def/  -->  /abc/def
+ *             NULL + abc//      -->  abc
+ *             NULL + //         -->  /
+ *             NULL + NULL       -->  (empty string)
+ *             "" + ""           -->  (empty string)
+ *             "" + /            -->  /
+ *             ".." + /etc/foo   -->  NULL
+ *             /tmp + ".."       -->  NULL
+ * 
+ */ +char * +pathJoin(const char *dir, + const char *fname) +{ +const char *slash = "/"; +char *str, *dest; +l_int32 i, n1, n2, emptydir; +size_t size; +SARRAY *sa1, *sa2; +L_BYTEA *ba; + + PROCNAME("pathJoin"); + + if (!dir && !fname) + return stringNew(""); + if (dir && strlen(dir) >= 2 && dir[0] == '.' && dir[1] == '.') + return (char *)ERROR_PTR("dir starts with '..'", procName, NULL); + if (fname && strlen(fname) >= 2 && fname[0] == '.' && fname[1] == '.') + return (char *)ERROR_PTR("fname starts with '..'", procName, NULL); + + sa1 = sarrayCreate(0); + sa2 = sarrayCreate(0); + ba = l_byteaCreate(4); + + /* Process %dir */ + if (dir && strlen(dir) > 0) { + if (dir[0] == '/') + l_byteaAppendString(ba, slash); + sarraySplitString(sa1, dir, "/"); /* removes all slashes */ + n1 = sarrayGetCount(sa1); + for (i = 0; i < n1; i++) { + str = sarrayGetString(sa1, i, L_NOCOPY); + l_byteaAppendString(ba, str); + l_byteaAppendString(ba, slash); + } + } + + /* Special case to add leading slash: dir NULL or empty string */ + emptydir = dir && strlen(dir) == 0; + if ((!dir || emptydir) && fname && strlen(fname) > 0 && fname[0] == '/') + l_byteaAppendString(ba, slash); + + /* Process %fname */ + if (fname && strlen(fname) > 0) { + sarraySplitString(sa2, fname, "/"); + n2 = sarrayGetCount(sa2); + for (i = 0; i < n2; i++) { + str = sarrayGetString(sa2, i, L_NOCOPY); + l_byteaAppendString(ba, str); + l_byteaAppendString(ba, slash); + } + } + + /* Remove trailing slash */ + dest = (char *)l_byteaCopyData(ba, &size); + if (size > 1 && dest[size - 1] == '/') + dest[size - 1] = '\0'; + + sarrayDestroy(&sa1); + sarrayDestroy(&sa2); + l_byteaDestroy(&ba); + return dest; +} + + +/*! + * \brief appendSubdirs() + * + * \param[in] basedir + * \param[in] subdirs + * \return concatenated full directory path without trailing slash, + * or NULL on error + * + *
+ * Notes:
+ *      (1) Use unix pathname separators
+ *      (2) Allocates a new string:  [basedir]/[subdirs]
+ * 
+ */ +char * +appendSubdirs(const char *basedir, + const char *subdirs) +{ +char *newdir; +size_t len1, len2, len3, len4; + + PROCNAME("appendSubdirs"); + + if (!basedir || !subdirs) + return (char *)ERROR_PTR("basedir and subdirs not both defined", + procName, NULL); + + len1 = strlen(basedir); + len2 = strlen(subdirs); + len3 = len1 + len2 + 6; + if ((newdir = (char *)LEPT_CALLOC(len3 + 1, 1)) == NULL) + return (char *)ERROR_PTR("newdir not made", procName, NULL); + strncat(newdir, basedir, len3); /* add basedir */ + if (newdir[len1 - 1] != '/') /* add '/' if necessary */ + newdir[len1] = '/'; + if (subdirs[0] == '/') /* add subdirs, stripping leading '/' */ + strncat(newdir, subdirs + 1, len3); + else + strncat(newdir, subdirs, len3); + len4 = strlen(newdir); + if (newdir[len4 - 1] == '/') /* strip trailing '/' */ + newdir[len4 - 1] = '\0'; + + return newdir; +} + + +/*--------------------------------------------------------------------* + * Special file name operations * + *--------------------------------------------------------------------*/ +/*! + * \brief convertSepCharsInPath() + * + * \param[in] path + * \param[in] type UNIX_PATH_SEPCHAR, WIN_PATH_SEPCHAR + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) In-place conversion.
+ *      (2) Type is the resulting type:
+ *            * UNIX_PATH_SEPCHAR:  '\\' ==> '/'
+ *            * WIN_PATH_SEPCHAR:   '/' ==> '\\'
+ *      (3) Virtually all path operations in leptonica use unix separators.
+ * 
+ */ +l_ok +convertSepCharsInPath(char *path, + l_int32 type) +{ +l_int32 i; +size_t len; + + PROCNAME("convertSepCharsInPath"); + if (!path) + return ERROR_INT("path not defined", procName, 1); + if (type != UNIX_PATH_SEPCHAR && type != WIN_PATH_SEPCHAR) + return ERROR_INT("invalid type", procName, 1); + + len = strlen(path); + if (type == UNIX_PATH_SEPCHAR) { + for (i = 0; i < len; i++) { + if (path[i] == '\\') + path[i] = '/'; + } + } else { /* WIN_PATH_SEPCHAR */ + for (i = 0; i < len; i++) { + if (path[i] == '/') + path[i] = '\\'; + } + } + return 0; +} + + +/*! + * \brief genPathname() + * + * \param[in] dir [optional] directory or full path name, + * with or without the trailing '/' + * \param[in] fname [optional] file name within a directory + * \return pathname either a directory or full path, or NULL on error + * + *
+ * Notes:
+ *      (1) This function generates actual paths in the following ways:
+ *            * from two sub-parts (e.g., a directory and a file name).
+ *            * from a single path full path, placed in %dir, with
+ *              %fname == NULL.
+ *            * from the name of a file in the local directory placed in
+ *              %fname, with %dir == NULL.
+ *            * if in a "/tmp" directory and on windows, the windows
+ *              temp directory is used.
+ *      (2) On windows, if the root of %dir is '/tmp', this does a name
+ *          translation:
+ *             "/tmp"  ==>  [Temp] (windows)
+ *          where [Temp] is the windows temp directory.
+ *      (3) On unix, the TMPDIR variable is ignored.  No rewriting
+ *          of temp directories is permitted.
+ *      (4) There are four cases for the input:
+ *          (a) %dir is a directory and %fname is defined: result is a full path
+ *          (b) %dir is a directory and %fname is null: result is a directory
+ *          (c) %dir is a full path and %fname is null: result is a full path
+ *          (d) %dir is null or an empty string: start in the current dir;
+ *              result is a full path
+ *      (5) In all cases, the resulting pathname is not terminated with a slash
+ *      (6) The caller is responsible for freeing the returned pathname.
+ * 
+ */ +char * +genPathname(const char *dir, + const char *fname) +{ +l_int32 is_win32 = FALSE; +char *cdir, *pathout; +l_int32 dirlen, namelen, size; + + PROCNAME("genPathname"); + + if (!dir && !fname) + return (char *)ERROR_PTR("no input", procName, NULL); + + /* Handle the case where we start from the current directory */ + if (!dir || dir[0] == '\0') { + if ((cdir = getcwd(NULL, 0)) == NULL) + return (char *)ERROR_PTR("no current dir found", procName, NULL); + } else { + cdir = stringNew(dir); + } + + /* Convert to unix path separators, and remove the trailing + * slash in the directory, except when dir == "/" */ + convertSepCharsInPath(cdir, UNIX_PATH_SEPCHAR); + dirlen = strlen(cdir); + if (cdir[dirlen - 1] == '/' && dirlen != 1) { + cdir[dirlen - 1] = '\0'; + dirlen--; + } + + namelen = (fname) ? strlen(fname) : 0; + size = dirlen + namelen + 256; + if ((pathout = (char *)LEPT_CALLOC(size, sizeof(char))) == NULL) { + LEPT_FREE(cdir); + return (char *)ERROR_PTR("pathout not made", procName, NULL); + } + +#ifdef _WIN32 + is_win32 = TRUE; +#endif /* _WIN32 */ + + /* First handle %dir (which may be a full pathname). + * There is no path rewriting on unix, and on win32, we do not + * rewrite unless the specified directory is /tmp or + * a subdirectory of /tmp */ + if (!is_win32 || dirlen < 4 || + (dirlen == 4 && strncmp(cdir, "/tmp", 4) != 0) || /* not in "/tmp" */ + (dirlen > 4 && strncmp(cdir, "/tmp/", 5) != 0)) { /* not in "/tmp/" */ + stringCopy(pathout, cdir, dirlen); + } else { /* Rewrite for win32 with "/tmp" specified for the directory. */ +#ifdef _WIN32 + l_int32 tmpdirlen; + char tmpdir[MAX_PATH]; + GetTempPath(sizeof(tmpdir), tmpdir); /* get the windows temp dir */ + tmpdirlen = strlen(tmpdir); + if (tmpdirlen > 0 && tmpdir[tmpdirlen - 1] == '\\') { + tmpdir[tmpdirlen - 1] = '\0'; /* trim the trailing '\' */ + } + tmpdirlen = strlen(tmpdir); + stringCopy(pathout, tmpdir, tmpdirlen); + + /* Add the rest of cdir */ + if (dirlen > 4) + stringCat(pathout, size, cdir + 4); +#endif /* _WIN32 */ + } + + /* Now handle %fname */ + if (fname && strlen(fname) > 0) { + dirlen = strlen(pathout); + pathout[dirlen] = '/'; + strncat(pathout, fname, namelen); + } + + LEPT_FREE(cdir); + return pathout; +} + + +/*! + * \brief makeTempDirname() + * + * \param[in] result preallocated on stack or heap and passed in + * \param[in] nbytes size of %result array, in bytes + * \param[in] subdir [optional]; can be NULL or an empty string + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This generates the directory path for output temp files,
+ *          written into %result with unix separators.
+ *      (2) Caller allocates %result, large enough to hold the path,
+ *          which is:
+ *            /tmp/%subdir       (unix)
+ *            [Temp]/%subdir     (windows, mac, ios)
+ *          where [Temp] is a path determined
+ *             - on windows, mac: by GetTempPath()
+ *             - on ios: by confstr() (see man page)
+ *          and %subdir is in general a set of nested subdirectories:
+ *            dir1/dir2/.../dirN
+ *          which in use would not typically exceed 2 levels.
+ *      (3) Usage example:
+ * \code
+ *           char  result[256];
+ *           makeTempDirname(result, sizeof(result), "lept/golden");
+ * \endcode
+ * 
+ */ +l_ok +makeTempDirname(char *result, + size_t nbytes, + const char *subdir) +{ +char *dir, *path; +l_int32 ret = 0; +size_t pathlen; + + PROCNAME("makeTempDirname"); + + if (!result) + return ERROR_INT("result not defined", procName, 1); + if (subdir && ((subdir[0] == '.') || (subdir[0] == '/'))) + return ERROR_INT("subdir not an actual subdirectory", procName, 1); + + memset(result, 0, nbytes); + +#ifdef OS_IOS + { + size_t n = confstr(_CS_DARWIN_USER_TEMP_DIR, result, nbytes); + if (n == 0) { + L_ERROR("failed to find tmp dir, %s\n", procName, strerror(errno)); + return 1; + } else if (n > nbytes) { + return ERROR_INT("result array too small for path\n", procName, 1); + } + dir = pathJoin(result, subdir); + } +#else + dir = pathJoin("/tmp", subdir); +#endif /* ~ OS_IOS */ + +#ifndef _WIN32 + path = stringNew(dir); +#else + path = genPathname(dir, NULL); +#endif /* ~ _WIN32 */ + pathlen = strlen(path); + if (pathlen < nbytes - 1) { + strncpy(result, path, pathlen); + } else { + L_ERROR("result array too small for path\n", procName); + ret = 1; + } + + LEPT_FREE(dir); + LEPT_FREE(path); + return ret; +} + + +/*! + * \brief modifyTrailingSlash() + * + * \param[in] path preallocated on stack or heap and passed in + * \param[in] nbytes size of %path array, in bytes + * \param[in] flag L_ADD_TRAIL_SLASH or L_REMOVE_TRAIL_SLASH + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This carries out the requested action if necessary.
+ * 
+ */ +l_ok +modifyTrailingSlash(char *path, + size_t nbytes, + l_int32 flag) +{ +char lastchar; +size_t len; + + PROCNAME("modifyTrailingSlash"); + + if (!path) + return ERROR_INT("path not defined", procName, 1); + if (flag != L_ADD_TRAIL_SLASH && flag != L_REMOVE_TRAIL_SLASH) + return ERROR_INT("invalid flag", procName, 1); + + len = strlen(path); + lastchar = path[len - 1]; + if (flag == L_ADD_TRAIL_SLASH && lastchar != '/' && len < nbytes - 2) { + path[len] = '/'; + path[len + 1] = '\0'; + } else if (flag == L_REMOVE_TRAIL_SLASH && lastchar == '/') { + path[len - 1] = '\0'; + } + return 0; +} + + +/*! + * \brief l_makeTempFilename() + * + * \return fname : heap allocated filename; returns NULL on failure. + * + *
+ * Notes:
+ *      (1) On unix, this makes a filename of the form
+ *               "/tmp/lept.XXXXXX",
+ *          where each X is a random character.
+ *      (2) On windows, this makes a filename of the form
+ *               "/[Temp]/lp.XXXXXX".
+ *      (3) On all systems, this fails if the file is not writable.
+ *      (4) Safest usage is to write to a subdirectory in debug code.
+ *      (5) The returned filename must be freed by the caller, using lept_free.
+ *      (6) The tail of the filename has a '.', so that cygwin interprets
+ *          the file as having an extension.  Otherwise, cygwin assumes it
+ *          is an executable and appends ".exe" to the filename.
+ *      (7) On unix, whenever possible use tmpfile() instead.  tmpfile()
+ *          hides the file name, returns a stream opened for write,
+ *          and deletes the temp file when the stream is closed.
+ * 
+ */ +char * +l_makeTempFilename() +{ +char dirname[240]; + + PROCNAME("l_makeTempFilename"); + + if (makeTempDirname(dirname, sizeof(dirname), NULL) == 1) + return (char *)ERROR_PTR("failed to make dirname", procName, NULL); + +#ifndef _WIN32 +{ + char *pattern; + l_int32 fd; + pattern = stringConcatNew(dirname, "/lept.XXXXXX", NULL); + fd = mkstemp(pattern); + if (fd == -1) { + LEPT_FREE(pattern); + return (char *)ERROR_PTR("mkstemp failed", procName, NULL); + } + close(fd); + return pattern; +} +#else +{ + char fname[MAX_PATH]; + FILE *fp; + if (GetTempFileName(dirname, "lp.", 0, fname) == 0) + return (char *)ERROR_PTR("GetTempFileName failed", procName, NULL); + if ((fp = fopen(fname, "wb")) == NULL) + return (char *)ERROR_PTR("file cannot be written to", procName, NULL); + fclose(fp); + return stringNew(fname); +} +#endif /* ~ _WIN32 */ +} + + +/*! + * \brief extractNumberFromFilename() + * + * \param[in] fname + * \param[in] numpre number of characters before the digits to be found + * \param[in] numpost number of characters after the digits to be found + * \return num number embedded in the filename; -1 on error or if + * not found + * + *
+ * Notes:
+ *      (1) The number is to be found in the basename, which is the
+ *          filename without either the directory or the last extension.
+ *      (2) When a number is found, it is non-negative.  If no number
+ *          is found, this returns -1, without an error message.  The
+ *          caller needs to check.
+ * 
+ */ +l_int32 +extractNumberFromFilename(const char *fname, + l_int32 numpre, + l_int32 numpost) +{ +char *tail, *basename; +l_int32 len, nret, num; + + PROCNAME("extractNumberFromFilename"); + + if (!fname) + return ERROR_INT("fname not defined", procName, -1); + + splitPathAtDirectory(fname, NULL, &tail); + splitPathAtExtension(tail, &basename, NULL); + LEPT_FREE(tail); + + len = strlen(basename); + if (numpre + numpost > len - 1) { + LEPT_FREE(basename); + return ERROR_INT("numpre + numpost too big", procName, -1); + } + + basename[len - numpost] = '\0'; + nret = sscanf(basename + numpre, "%d", &num); + LEPT_FREE(basename); + + if (nret == 1) + return num; + else + return -1; /* not found */ +} diff --git a/3rdparty/hgOCR/leptonica/warper.c b/3rdparty/hgOCR/leptonica/warper.c new file mode 100644 index 00000000..3a735faf --- /dev/null +++ b/3rdparty/hgOCR/leptonica/warper.c @@ -0,0 +1,1390 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file warper.c + *
+ *
+ *      High-level captcha interface
+ *          PIX               *pixSimpleCaptcha()
+ *
+ *      Random sinusoidal warping
+ *          PIX               *pixRandomHarmonicWarp()
+ *
+ *      Helper functions
+ *          static l_float64  *generateRandomNumberArray()
+ *          static l_int32     applyWarpTransform()
+ *
+ *      Version using a LUT for sin
+ *          PIX               *pixRandomHarmonicWarpLUT()
+ *          static l_int32     applyWarpTransformLUT()
+ *          static l_int32     makeSinLUT()
+ *          static l_float32   getSinFromLUT()
+ *
+ *      Stereoscopic warping
+ *          PIX               *pixWarpStereoscopic()
+ *
+ *      Linear and quadratic horizontal stretching
+ *          PIX               *pixStretchHorizontal()
+ *          PIX               *pixStretchHorizontalSampled()
+ *          PIX               *pixStretchHorizontalLI()
+ *
+ *      Quadratic vertical shear
+ *          PIX               *pixQuadraticVShear()
+ *          PIX               *pixQuadraticVShearSampled()
+ *          PIX               *pixQuadraticVShearLI()
+ *
+ *      Stereo from a pair of images
+ *          PIX               *pixStereoFromPair()
+ * 
+ */ + +#include +#include "allheaders.h" + +static l_float64 *generateRandomNumberArray(l_int32 size); +static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, + l_float32 xfreq, l_float32 yfreq, + l_float64 *randa, l_int32 nx, l_int32 ny, + l_int32 xp, l_int32 yp, + l_float32 *px, l_float32 *py); + +#define USE_SIN_TABLE 0 + + /* Suggested input to pixStereoFromPair(). These are weighting + * factors for input to the red channel from the left image. */ +static const l_float32 DefaultRedWeight = 0.0; +static const l_float32 DefaultGreenWeight = 0.7; +static const l_float32 DefaultBlueWeight = 0.3; + + +/*----------------------------------------------------------------------* + * High-level example captcha interface * + *----------------------------------------------------------------------*/ +/*! + * \brief pixSimpleCaptcha() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] border added white pixels on each side + * \param[in] nterms number of x and y harmonic terms + * \param[in] seed of random number generator + * \param[in] color for colorizing; in 0xrrggbb00 format; use 0 for black + * \param[in] cmapflag 1 for colormap output; 0 for rgb + * \return pixd 8 bpp cmap or 32 bpp rgb, or NULL on error + * + *
+ * Notes:
+ *      (1) This uses typical default values for generating captchas.
+ *          The magnitudes of the harmonic warp are typically to be
+ *          smaller when more terms are used, even though the phases
+ *          are random.  See, for example, prog/warptest.c.
+ * 
+ */ +PIX * +pixSimpleCaptcha(PIX *pixs, + l_int32 border, + l_int32 nterms, + l_uint32 seed, + l_uint32 color, + l_int32 cmapflag) +{ +l_int32 k; +l_float32 xmag[] = {7.0f, 5.0f, 4.0f, 3.0f}; +l_float32 ymag[] = {10.0f, 8.0f, 6.0f, 5.0f}; +l_float32 xfreq[] = {0.12f, 0.10f, 0.10f, 0.11f}; +l_float32 yfreq[] = {0.15f, 0.13f, 0.13f, 0.11f}; +PIX *pixg, *pixgb, *pixw, *pixd; + + PROCNAME("pixSimpleCaptcha"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + if (nterms < 1 || nterms > 4) + return (PIX *)ERROR_PTR("nterms must be in {1,2,3,4}", procName, NULL); + + k = nterms - 1; + pixg = pixConvertTo8(pixs, 0); + pixgb = pixAddBorder(pixg, border, 255); + pixw = pixRandomHarmonicWarp(pixgb, xmag[k], ymag[k], xfreq[k], yfreq[k], + nterms, nterms, seed, 255); + pixd = pixColorizeGray(pixw, color, cmapflag); + + pixDestroy(&pixg); + pixDestroy(&pixgb); + pixDestroy(&pixw); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Random sinusoidal warping * + *----------------------------------------------------------------------*/ +/*! + * \brief pixRandomHarmonicWarp() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] xmag, ymag maximum magnitude of x and y distortion + * \param[in] xfreq, yfreq maximum magnitude of x and y frequency + * \param[in] nx, ny number of x and y harmonic terms + * \param[in] seed of random number generator + * \param[in] grayval color brought in from the outside; + * 0 for black, 255 for white + * \return pixd 8 bpp; no colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) To generate the warped image p(x',y'), set up the transforms
+ *          that are in getWarpTransform().  For each (x',y') in the
+ *          dest, the warp function computes the originating location
+ *          (x, y) in the src.  The differences (x - x') and (y - y')
+ *          are given as a sum of products of sinusoidal terms.  Each
+ *          term is multiplied by a maximum amplitude (in pixels), and the
+ *          angle is determined by a frequency and phase, and depends
+ *          on the (x', y') value of the dest.  Random numbers with
+ *          a variable input seed are used to allow the warping to be
+ *          unpredictable.  A linear interpolation is used to find
+ *          the value for the source at (x, y); this value is written
+ *          into the dest.
+ *      (2) This can be used to generate 'captcha's, which are somewhat
+ *          randomly distorted images of text.  A typical set of parameters
+ *          for a captcha are:
+ *                    xmag = 4.0     ymag = 6.0
+ *                    xfreq = 0.10   yfreq = 0.13
+ *                    nx = 3         ny = 3
+ *          Other examples can be found in prog/warptest.c.
+ * 
+ */ +PIX * +pixRandomHarmonicWarp(PIX *pixs, + l_float32 xmag, + l_float32 ymag, + l_float32 xfreq, + l_float32 yfreq, + l_int32 nx, + l_int32 ny, + l_uint32 seed, + l_int32 grayval) +{ +l_int32 w, h, d, i, j, wpls, wpld, val; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +l_float64 *randa; +PIX *pixd; + + PROCNAME("pixRandomHarmonicWarp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + /* Compute filter output at each location. We iterate over + * the destination pixels. For each dest pixel, use the + * warp function to compute the four source pixels that + * contribute, at the location (x, y). Each source pixel + * is divided into 16 x 16 subpixels to get an approximate value. */ + srand(seed); + randa = generateRandomNumberArray(5 * (nx + ny)); + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + applyWarpTransform(xmag, ymag, xfreq, yfreq, randa, nx, ny, + j, i, &x, &y); + linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); + SET_DATA_BYTE(lined, j, val); + } + } + + LEPT_FREE(randa); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Static helper functions * + *----------------------------------------------------------------------*/ +static l_float64 * +generateRandomNumberArray(l_int32 size) +{ +l_int32 i; +l_float64 *randa; + + PROCNAME("generateRandomNumberArray"); + + if ((randa = (l_float64 *)LEPT_CALLOC(size, sizeof(l_float64))) == NULL) + return (l_float64 *)ERROR_PTR("calloc fail for randa", procName, NULL); + + /* Return random values between 0.5 and 1.0 */ + for (i = 0; i < size; i++) + randa[i] = 0.5 * (1.0 + (l_float64)rand() / (l_float64)RAND_MAX); + return randa; +} + + +/*! + * \brief applyWarpTransform() + * + * Notes: + * (1) Uses the internal sin function. + */ +static l_int32 +applyWarpTransform(l_float32 xmag, + l_float32 ymag, + l_float32 xfreq, + l_float32 yfreq, + l_float64 *randa, + l_int32 nx, + l_int32 ny, + l_int32 xp, + l_int32 yp, + l_float32 *px, + l_float32 *py) +{ +l_int32 i; +l_float64 twopi, x, y, anglex, angley; + + twopi = 6.283185; + for (i = 0, x = xp; i < nx; i++) { + anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; + angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; + x += xmag * randa[3 * i] * sin(anglex) * sin(angley); + } + for (i = nx, y = yp; i < nx + ny; i++) { + angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; + anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; + y += ymag * randa[3 * i] * sin(angley) * sin(anglex); + } + + *px = (l_float32)x; + *py = (l_float32)y; + return 0; +} + + +#if USE_SIN_TABLE +/*----------------------------------------------------------------------* + * Version using a LUT for sin * + *----------------------------------------------------------------------*/ +static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag, + l_float32 xfreq, l_float32 yfreq, + l_float64 *randa, l_int32 nx, l_int32 ny, + l_int32 xp, l_int32 yp, l_float32 *lut, + l_int32 npts, l_float32 *px, l_float32 *py); +static l_int32 makeSinLUT(l_int32 npts, NUMA **pna); +static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts, + l_float32 radang); + +/*! + * \brief pixRandomHarmonicWarpLUT() + * + * \param[in] pixs 8 bpp; no colormap + * \param[in] xmag, ymag maximum magnitude of x and y distortion + * \param[in] xfreq, yfreq maximum magnitude of x and y frequency + * \param[in] nx, ny number of x and y harmonic terms + * \param[in] seed of random number generator + * \param[in] grayval color brought in from the outside; + * 0 for black, 255 for white + * \return pixd 8 bpp; no colormap, or NULL on error + * + *
+ * Notes:
+ *      (1) See notes and inline comments in pixRandomHarmonicWarp().
+ *          This version uses a LUT for the sin function.  It is not
+ *          appreciably faster than using the built-in sin function,
+ *          and is here for comparison only.
+ * 
+ */ +PIX * +pixRandomHarmonicWarpLUT(PIX *pixs, + l_float32 xmag, + l_float32 ymag, + l_float32 xfreq, + l_float32 yfreq, + l_int32 nx, + l_int32 ny, + l_uint32 seed, + l_int32 grayval) +{ +l_int32 w, h, d, i, j, wpls, wpld, val, npts; +l_uint32 *datas, *datad, *lined; +l_float32 x, y; +l_float32 *lut; +l_float64 *randa; +NUMA *na; +PIX *pixd; + + PROCNAME("pixRandomHarmonicWarp"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8) + return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); + + /* Compute filter output at each location. We iterate over + * the destination pixels. For each dest pixel, use the + * warp function to compute the four source pixels that + * contribute, at the location (x, y). Each source pixel + * is divided into 16 x 16 subpixels to get an approximate value. */ + srand(seed); + randa = generateRandomNumberArray(5 * (nx + ny)); + pixd = pixCreateTemplate(pixs); + datas = pixGetData(pixs); + wpls = pixGetWpl(pixs); + datad = pixGetData(pixd); + wpld = pixGetWpl(pixd); + + npts = 100; + makeSinLUT(npts, &na); + lut = numaGetFArray(na, L_NOCOPY); + for (i = 0; i < h; i++) { + lined = datad + i * wpld; + for (j = 0; j < w; j++) { + applyWarpTransformLUT(xmag, ymag, xfreq, yfreq, randa, nx, ny, + j, i, lut, npts, &x, &y); + linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); + SET_DATA_BYTE(lined, j, val); + } + } + + numaDestroy(&na); + LEPT_FREE(randa); + return pixd; +} + + +/*! + * \brief applyWarpTransformLUT() + * + * Notes: + * (1) Uses an LUT for computing sin(theta). There is little speed + * advantage to using the LUT. + */ +static l_int32 +applyWarpTransformLUT(l_float32 xmag, + l_float32 ymag, + l_float32 xfreq, + l_float32 yfreq, + l_float64 *randa, + l_int32 nx, + l_int32 ny, + l_int32 xp, + l_int32 yp, + l_float32 *lut, + l_int32 npts, + l_float32 *px, + l_float32 *py) +{ +l_int32 i; +l_float64 twopi, x, y, anglex, angley, sanglex, sangley; + + twopi = 6.283185; + for (i = 0, x = xp; i < nx; i++) { + anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; + angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; + sanglex = getSinFromLUT(lut, npts, anglex); + sangley = getSinFromLUT(lut, npts, angley); + x += xmag * randa[3 * i] * sanglex * sangley; + } + for (i = nx, y = yp; i < nx + ny; i++) { + angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; + anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; + sanglex = getSinFromLUT(lut, npts, anglex); + sangley = getSinFromLUT(lut, npts, angley); + y += ymag * randa[3 * i] * sangley * sanglex; + } + + *px = (l_float32)x; + *py = (l_float32)y; + return 0; +} + + +static l_int32 +makeSinLUT(l_int32 npts, + NUMA **pna) +{ +l_int32 i, n; +l_float32 delx, fval; +NUMA *na; + + PROCNAME("makeSinLUT"); + + if (!pna) + return ERROR_INT("&na not defined", procName, 1); + *pna = NULL; + if (npts < 2) + return ERROR_INT("npts < 2", procName, 1); + n = 2 * npts + 1; + na = numaCreate(n); + *pna = na; + delx = 3.14159265 / (l_float32)npts; + numaSetParameters(na, 0.0, delx); + for (i = 0; i < n / 2; i++) + numaAddNumber(na, (l_float32)sin((l_float64)i * delx)); + for (i = 0; i < n / 2; i++) { + numaGetFValue(na, i, &fval); + numaAddNumber(na, -fval); + } + numaAddNumber(na, 0); + + return 0; +} + + +static l_float32 +getSinFromLUT(l_float32 *tab, + l_int32 npts, + l_float32 radang) +{ +l_int32 index; +l_float32 twopi, invtwopi, findex, diff; + + /* Restrict radang to [0, 2pi] */ + twopi = 6.283185; + invtwopi = 0.1591549; + if (radang < 0.0) + radang += twopi * (1.0 - (l_int32)(-radang * invtwopi)); + else if (radang > 0.0) + radang -= twopi * (l_int32)(radang * invtwopi); + + /* Interpolate */ + findex = (2.0 * (l_float32)npts) * (radang * invtwopi); + index = (l_int32)findex; + if (index == 2 * npts) + return tab[index]; + diff = findex - index; + return (1.0 - diff) * tab[index] + diff * tab[index + 1]; +} +#endif /* USE_SIN_TABLE */ + + + +/*---------------------------------------------------------------------------* + * Stereoscopic warping * + *---------------------------------------------------------------------------*/ +/*! + * \brief pixWarpStereoscopic() + * + * \param[in] pixs any depth, colormap ok + * \param[in] zbend horizontal separation in pixels of red and cyan + * at the left and right sides, that gives rise to + * quadratic curvature out of the image plane + * \param[in] zshiftt uniform pixel translation difference between + * red and cyan, that pushes the top of the image + * plane away from the viewer (zshiftt > 0) or + * towards the viewer (zshiftt < 0) + * \param[in] zshiftb uniform pixel translation difference between + * red and cyan, that pushes the bottom of the image + * plane away from the viewer (zshiftb > 0) or + * towards the viewer (zshiftb < 0) + * \param[in] ybendt multiplicative parameter for in-plane vertical + * displacement at the left or right edge at the top: + * y = ybendt * (2x/w - 1)^2 + * \param[in] ybendb same as ybendt, except at the left or right edge + * at the bottom + * \param[in] redleft 1 if the red filter is on the left; 0 otherwise + * \return pixd 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) This function splits out the red channel, mucks around with
+ *          it, then recombines with the unmolested cyan channel.
+ *      (2) By using a quadratically increasing shift of the red
+ *          pixels horizontally and away from the vertical centerline,
+ *          the image appears to bend quadratically out of the image
+ *          plane, symmetrically with respect to the vertical center
+ *          line.  A positive value of %zbend causes the plane to be
+ *          curved away from the viewer.  We use linearly interpolated
+ *          stretching to avoid the appearance of kinks in the curve.
+ *      (3) The parameters %zshiftt and %zshiftb tilt the image plane
+ *          about a horizontal line through the center, and at the
+ *          same time move that line either in toward the viewer or away.
+ *          This is implemented by a combination of horizontal shear
+ *          about the center line (for the tilt) and horizontal
+ *          translation (to move the entire plane in or out).
+ *          A positive value of %zshiftt moves the top of the plane
+ *          away from the viewer, and a positive value of %zshiftb
+ *          moves the bottom of the plane away.  We use linear interpolated
+ *          shear to avoid visible vertical steps in the tilted image.
+ *      (4) The image can be bent in the plane and about the vertical
+ *          centerline.  The centerline does not shift, and the
+ *          parameter %ybend gives the relative shift at left and right
+ *          edges, with a downward shift for positive values of %ybend.
+ *      (6) When writing out a steroscopic (red/cyan) image in jpeg,
+ *          first call pixSetChromaSampling(pix, 0) to get sufficient
+ *          resolution in the red channel.
+ *      (7) Typical values are:
+ *             zbend = 20
+ *             zshiftt = 15
+ *             zshiftb = -15
+ *             ybendt = 30
+ *             ybendb = 0
+ *          If the disparity z-values are too large, it is difficult for
+ *          the brain to register the two images.
+ *      (8) This function has been cleverly reimplemented by Jeff Breidenbach.
+ *          The original implementation used two 32 bpp rgb images,
+ *          and merged them at the end.  The result is somewhat faded,
+ *          and has a parameter "thresh" that controls the amount of
+ *          color in the result.  (The present implementation avoids these
+ *          two problems, skipping both the colorization and the alpha
+ *          blending at the end, and is about 3x faster)
+ *          The basic operations with 32 bpp are as follows:
+ *               // Immediate conversion to 32 bpp
+ *            Pix *pixt1 = pixConvertTo32(pixs);
+ *               // Do vertical shear
+ *            Pix *pixr = pixQuadraticVerticalShear(pixt1, L_WARP_TO_RIGHT,
+ *                                                  ybendt, ybendb,
+ *                                                  L_BRING_IN_WHITE);
+ *               // Colorize two versions, toward red and cyan
+ *            Pix *pixc = pixCopy(NULL, pixr);
+ *            l_int32 thresh = 150;  // if higher, get less original color
+ *            pixColorGray(pixr, NULL, L_PAINT_DARK, thresh, 255, 0, 0);
+ *            pixColorGray(pixc, NULL, L_PAINT_DARK, thresh, 0, 255, 255);
+ *               // Shift the red pixels; e.g., by stretching
+ *            Pix *pixrs = pixStretchHorizontal(pixr, L_WARP_TO_RIGHT,
+ *                                              L_QUADRATIC_WARP, zbend,
+ *                                              L_INTERPOLATED,
+ *                                              L_BRING_IN_WHITE);
+ *               // Blend the shifted red and unshifted cyan 50:50
+ *            Pix *pixg = pixCreate(w, h, 8);
+ *            pixSetAllArbitrary(pixg, 128);
+ *            pixd = pixBlendWithGrayMask(pixrs, pixc, pixg, 0, 0);
+ * 
+ */ +PIX * +pixWarpStereoscopic(PIX *pixs, + l_int32 zbend, + l_int32 zshiftt, + l_int32 zshiftb, + l_int32 ybendt, + l_int32 ybendb, + l_int32 redleft) +{ +l_int32 w, h, zshift; +l_float32 angle; +BOX *boxleft, *boxright; +PIX *pix1, *pix2, *pix3, *pix4, *pixr, *pixg, *pixb; +PIX *pixv1, *pixv2, *pixv3, *pixv4; +PIX *pixrs, *pixrss; +PIX *pixd; + + PROCNAME("pixWarpStereoscopic"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + + /* Convert to the output depth, 32 bpp. */ + pix1 = pixConvertTo32(pixs); + + /* If requested, do a quad vertical shearing, pushing pixels up + * or down, depending on their distance from the centerline. */ + pixGetDimensions(pixs, &w, &h, NULL); + boxleft = boxCreate(0, 0, w / 2, h); + boxright = boxCreate(w / 2, 0, w - w / 2, h); + if (ybendt != 0 || ybendb != 0) { + pixv1 = pixClipRectangle(pix1, boxleft, NULL); + pixv2 = pixClipRectangle(pix1, boxright, NULL); + pixv3 = pixQuadraticVShear(pixv1, L_WARP_TO_LEFT, ybendt, + ybendb, L_INTERPOLATED, + L_BRING_IN_WHITE); + pixv4 = pixQuadraticVShear(pixv2, L_WARP_TO_RIGHT, ybendt, + ybendb, L_INTERPOLATED, + L_BRING_IN_WHITE); + pix2 = pixCreate(w, h, 32); + pixRasterop(pix2, 0, 0, w / 2, h, PIX_SRC, pixv3, 0, 0); + pixRasterop(pix2, w / 2, 0, w - w / 2, h, PIX_SRC, pixv4, 0, 0); + pixDestroy(&pixv1); + pixDestroy(&pixv2); + pixDestroy(&pixv3); + pixDestroy(&pixv4); + } else { + pix2 = pixClone(pix1); + } + pixDestroy(&pix1); + + /* Split out the 3 components */ + pixr = pixGetRGBComponent(pix2, COLOR_RED); + pixg = pixGetRGBComponent(pix2, COLOR_GREEN); + pixb = pixGetRGBComponent(pix2, COLOR_BLUE); + pixDestroy(&pix2); + + /* The direction of the stereo disparity below is set + * for the red filter to be over the left eye. If the red + * filter is over the right eye, invert the horizontal shifts. */ + if (redleft) { + zbend = -zbend; + zshiftt = -zshiftt; + zshiftb = -zshiftb; + } + + /* Shift the red pixels horizontally by an amount that + * increases quadratically from the centerline. */ + if (zbend == 0) { + pixrs = pixClone(pixr); + } else { + pix1 = pixClipRectangle(pixr, boxleft, NULL); + pix2 = pixClipRectangle(pixr, boxright, NULL); + pix3 = pixStretchHorizontal(pix1, L_WARP_TO_LEFT, L_QUADRATIC_WARP, + zbend, L_INTERPOLATED, L_BRING_IN_WHITE); + pix4 = pixStretchHorizontal(pix2, L_WARP_TO_RIGHT, L_QUADRATIC_WARP, + zbend, L_INTERPOLATED, L_BRING_IN_WHITE); + pixrs = pixCreate(w, h, 8); + pixRasterop(pixrs, 0, 0, w / 2, h, PIX_SRC, pix3, 0, 0); + pixRasterop(pixrs, w / 2, 0, w - w / 2, h, PIX_SRC, pix4, 0, 0); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + } + + /* Perform a combination of horizontal shift and shear of + * red pixels. The causes the plane of the image to tilt and + * also move forward or backward. */ + if (zshiftt == 0 && zshiftb == 0) { + pixrss = pixClone(pixrs); + } else if (zshiftt == zshiftb) { + pixrss = pixTranslate(NULL, pixrs, zshiftt, 0, L_BRING_IN_WHITE); + } else { + angle = (l_float32)(zshiftb - zshiftt) / + L_MAX(1.0, (l_float32)pixGetHeight(pixrs)); + zshift = (zshiftt + zshiftb) / 2; + pix1 = pixTranslate(NULL, pixrs, zshift, 0, L_BRING_IN_WHITE); + pixrss = pixHShearLI(pix1, h / 2, angle, L_BRING_IN_WHITE); + pixDestroy(&pix1); + } + + /* Combine the unchanged cyan (g,b) image with the shifted red */ + pixd = pixCreateRGBImage(pixrss, pixg, pixb); + + boxDestroy(&boxleft); + boxDestroy(&boxright); + pixDestroy(&pixrs); + pixDestroy(&pixrss); + pixDestroy(&pixr); + pixDestroy(&pixg); + pixDestroy(&pixb); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Linear and quadratic horizontal stretching * + *----------------------------------------------------------------------*/ +/*! + * \brief pixStretchHorizontal() + * + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP + * \param[in] hmax horizontal displacement at edge + * \param[in] operation L_SAMPLED or L_INTERPOLATED + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched/compressed, or NULL on error + * + *
+ * Notes:
+ *      (1) If %hmax > 0, this is an increase in the coordinate value of
+ *          pixels in pixd, relative to the same pixel in pixs.
+ *      (2) If %dir == L_WARP_TO_LEFT, the pixels on the right edge of
+ *          the image are not moved. So, for example, if %hmax > 0
+ *          and %dir == L_WARP_TO_LEFT, the pixels in pixd are
+ *          contracted toward the right edge of the image, relative
+ *          to those in pixs.
+ *      (3) If %type == L_LINEAR_WARP, the pixel positions are moved
+ *          to the left or right by an amount that varies linearly with
+ *          the horizontal location.
+ *      (4) If %operation == L_SAMPLED, the dest pixels are taken from
+ *          the nearest src pixel.  Otherwise, we use linear interpolation
+ *          between pairs of sampled pixels.
+ * 
+ */ +PIX * +pixStretchHorizontal(PIX *pixs, + l_int32 dir, + l_int32 type, + l_int32 hmax, + l_int32 operation, + l_int32 incolor) +{ +l_int32 d; + + PROCNAME("pixStretchHorizontal"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + d = pixGetDepth(pixs); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (operation != L_SAMPLED && operation != L_INTERPOLATED) + return (PIX *)ERROR_PTR("invalid operation", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + if (d == 1 && operation == L_INTERPOLATED) { + L_WARNING("Using sampling for 1 bpp\n", procName); + operation = L_INTERPOLATED; + } + + if (operation == L_SAMPLED) + return pixStretchHorizontalSampled(pixs, dir, type, hmax, incolor); + else + return pixStretchHorizontalLI(pixs, dir, type, hmax, incolor); +} + + +/*! + * \brief pixStretchHorizontalSampled() + * + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP + * \param[in] hmax horizontal displacement at edge + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched/compressed, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixStretchHorizontal() for details.
+ * 
+ */ +PIX * +pixStretchHorizontalSampled(PIX *pixs, + l_int32 dir, + l_int32 type, + l_int32 hmax, + l_int32 incolor) +{ +l_int32 i, j, jd, w, wm, h, d, wpls, wpld, val; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixStretchHorizontalSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + pixd = pixCreateTemplate(pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + wm = w - 1; + for (jd = 0; jd < w; jd++) { + if (dir == L_WARP_TO_LEFT) { + if (type == L_LINEAR_WARP) + j = jd - (hmax * (wm - jd)) / wm; + else /* L_QUADRATIC_WARP */ + j = jd - (hmax * (wm - jd) * (wm - jd)) / (wm * wm); + } else if (dir == L_WARP_TO_RIGHT) { + if (type == L_LINEAR_WARP) + j = jd - (hmax * jd) / wm; + else /* L_QUADRATIC_WARP */ + j = jd - (hmax * jd * jd) / (wm * wm); + } + if (j < 0 || j > w - 1) continue; + + switch (d) + { + case 1: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + val = GET_DATA_BIT(lines, j); + if (val) + SET_DATA_BIT(lined, jd); + } + break; + case 8: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + val = GET_DATA_BYTE(lines, j); + SET_DATA_BYTE(lined, jd, val); + } + break; + case 32: + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + lined[jd] = lines[j]; + } + break; + default: + L_ERROR("invalid depth: %d\n", procName, d); + pixDestroy(&pixd); + return NULL; + } + } + + return pixd; +} + + +/*! + * \brief pixStretchHorizontalLI() + * + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] type L_LINEAR_WARP or L_QUADRATIC_WARP + * \param[in] hmax horizontal displacement at edge + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched/compressed, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixStretchHorizontal() for details.
+ * 
+ */ +PIX * +pixStretchHorizontalLI(PIX *pixs, + l_int32 dir, + l_int32 type, + l_int32 hmax, + l_int32 incolor) +{ +l_int32 i, j, jd, jp, jf, w, wm, h, d, wpls, wpld, val, rval, gval, bval; +l_uint32 word0, word1; +l_uint32 *datas, *datad, *lines, *lined; +PIX *pixd; + + PROCNAME("pixStretchHorizontalLI"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) + return (PIX *)ERROR_PTR("invalid type", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + /* Standard linear interpolation, subdividing each pixel into 64 */ + pixd = pixCreateTemplate(pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + wm = w - 1; + for (jd = 0; jd < w; jd++) { + if (dir == L_WARP_TO_LEFT) { + if (type == L_LINEAR_WARP) + j = 64 * jd - 64 * (hmax * (wm - jd)) / wm; + else /* L_QUADRATIC_WARP */ + j = 64 * jd - 64 * (hmax * (wm - jd) * (wm - jd)) / (wm * wm); + } else if (dir == L_WARP_TO_RIGHT) { + if (type == L_LINEAR_WARP) + j = 64 * jd - 64 * (hmax * jd) / wm; + else /* L_QUADRATIC_WARP */ + j = 64 * jd - 64 * (hmax * jd * jd) / (wm * wm); + } + jp = j / 64; + jf = j & 0x3f; + if (jp < 0 || jp > wm) continue; + + switch (d) + { + case 8: + if (jp < wm) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + val = ((63 - jf) * GET_DATA_BYTE(lines, jp) + + jf * GET_DATA_BYTE(lines, jp + 1) + 31) / 63; + SET_DATA_BYTE(lined, jd, val); + } + } else { /* jp == wm */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + val = GET_DATA_BYTE(lines, jp); + SET_DATA_BYTE(lined, jd, val); + } + } + break; + case 32: + if (jp < wm) { + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + word0 = *(lines + jp); + word1 = *(lines + jp + 1); + rval = ((63 - jf) * ((word0 >> L_RED_SHIFT) & 0xff) + + jf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; + gval = ((63 - jf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + + jf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; + bval = ((63 - jf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + + jf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; + composeRGBPixel(rval, gval, bval, lined + jd); + } + } else { /* jp == wm */ + for (i = 0; i < h; i++) { + lines = datas + i * wpls; + lined = datad + i * wpld; + lined[jd] = lines[jp]; + } + } + break; + default: + L_ERROR("invalid depth: %d\n", procName, d); + pixDestroy(&pixd); + return NULL; + } + } + + return pixd; +} + + +/*----------------------------------------------------------------------* + * Quadratic vertical shear * + *----------------------------------------------------------------------*/ +/*! + * \brief pixQuadraticVShear() + * + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] vmaxt max vertical displacement at edge and at top + * \param[in] vmaxb max vertical displacement at edge and at bottom + * \param[in] operation L_SAMPLED or L_INTERPOLATED + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched, or NULL on error + * + *
+ * Notes:
+ *      (1) This gives a quadratic bending, upward or downward, as you
+ *          move to the left or right.
+ *      (2) If %dir == L_WARP_TO_LEFT, the right edge is unchanged, and
+ *          the left edge pixels are moved maximally up or down.
+ *      (3) Parameters %vmaxt and %vmaxb control the maximum amount of
+ *          vertical pixel shear at the top and bottom, respectively.
+ *          If %vmaxt > 0, the vertical displacement of pixels at the
+ *          top is downward.  Likewise, if %vmaxb > 0, the vertical
+ *          displacement of pixels at the bottom is downward.
+ *      (4) If %operation == L_SAMPLED, the dest pixels are taken from
+ *          the nearest src pixel.  Otherwise, we use linear interpolation
+ *          between pairs of sampled pixels.
+ *      (5) This is for quadratic shear.  For uniform (linear) shear,
+ *          use the standard shear operators.
+ * 
+ */ +PIX * +pixQuadraticVShear(PIX *pixs, + l_int32 dir, + l_int32 vmaxt, + l_int32 vmaxb, + l_int32 operation, + l_int32 incolor) +{ +l_int32 w, h, d; + + PROCNAME("pixQuadraticVShear"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (operation != L_SAMPLED && operation != L_INTERPOLATED) + return (PIX *)ERROR_PTR("invalid operation", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + if (vmaxt == 0 && vmaxb == 0) + return pixCopy(NULL, pixs); + + if (operation == L_INTERPOLATED && d == 1) { + L_WARNING("no interpolation for 1 bpp; using sampling\n", procName); + operation = L_SAMPLED; + } + + if (operation == L_SAMPLED) + return pixQuadraticVShearSampled(pixs, dir, vmaxt, vmaxb, incolor); + else /* operation == L_INTERPOLATED */ + return pixQuadraticVShearLI(pixs, dir, vmaxt, vmaxb, incolor); +} + + +/*! + * \brief pixQuadraticVShearSampled() + * + * \param[in] pixs 1, 8 or 32 bpp + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] vmaxt max vertical displacement at edge and at top + * \param[in] vmaxb max vertical displacement at edge and at bottom + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixQuadraticVShear() for details.
+ * 
+ */ +PIX * +pixQuadraticVShearSampled(PIX *pixs, + l_int32 dir, + l_int32 vmaxt, + l_int32 vmaxb, + l_int32 incolor) +{ +l_int32 i, j, id, w, h, d, wm, hm, wpls, wpld, val; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 delrowt, delrowb, denom1, denom2, dely; +PIX *pixd; + + PROCNAME("pixQuadraticVShearSampled"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d != 1 && d != 8 && d != 32) + return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + if (vmaxt == 0 && vmaxb == 0) + return pixCopy(NULL, pixs); + + pixd = pixCreateTemplate(pixs); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + datas = pixGetData(pixs); + datad = pixGetData(pixd); + wpls = pixGetWpl(pixs); + wpld = pixGetWpl(pixd); + wm = w - 1; + hm = h - 1; + denom1 = 1. / (l_float32)h; + denom2 = 1. / (l_float32)(wm * wm); + for (j = 0; j < w; j++) { + if (dir == L_WARP_TO_LEFT) { + delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; + delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; + } else if (dir == L_WARP_TO_RIGHT) { + delrowt = (l_float32)(vmaxt * j * j) * denom2; + delrowb = (l_float32)(vmaxb * j * j) * denom2; + } + switch (d) + { + case 1: + for (id = 0; id < h; id++) { + dely = (delrowt * (hm - id) + delrowb * id) * denom1; + i = id - (l_int32)(dely + 0.5); + if (i < 0 || i > hm) continue; + lines = datas + i * wpls; + lined = datad + id * wpld; + val = GET_DATA_BIT(lines, j); + if (val) + SET_DATA_BIT(lined, j); + } + break; + case 8: + for (id = 0; id < h; id++) { + dely = (delrowt * (hm - id) + delrowb * id) * denom1; + i = id - (l_int32)(dely + 0.5); + if (i < 0 || i > hm) continue; + lines = datas + i * wpls; + lined = datad + id * wpld; + val = GET_DATA_BYTE(lines, j); + SET_DATA_BYTE(lined, j, val); + } + break; + case 32: + for (id = 0; id < h; id++) { + dely = (delrowt * (hm - id) + delrowb * id) * denom1; + i = id - (l_int32)(dely + 0.5); + if (i < 0 || i > hm) continue; + lines = datas + i * wpls; + lined = datad + id * wpld; + lined[j] = lines[j]; + } + break; + default: + L_ERROR("invalid depth: %d\n", procName, d); + pixDestroy(&pixd); + return NULL; + } + } + + return pixd; +} + + +/*! + * \brief pixQuadraticVShearLI() + * + * \param[in] pixs 8 or 32 bpp, or colormapped + * \param[in] dir L_WARP_TO_LEFT or L_WARP_TO_RIGHT + * \param[in] vmaxt max vertical displacement at edge and at top + * \param[in] vmaxb max vertical displacement at edge and at bottom + * \param[in] incolor L_BRING_IN_WHITE or L_BRING_IN_BLACK + * \return pixd stretched, or NULL on error + * + *
+ * Notes:
+ *      (1) See pixQuadraticVShear() for details.
+ * 
+ */ +PIX * +pixQuadraticVShearLI(PIX *pixs, + l_int32 dir, + l_int32 vmaxt, + l_int32 vmaxb, + l_int32 incolor) +{ +l_int32 i, j, id, yp, yf, w, h, d, wm, hm, wpls, wpld; +l_int32 val, rval, gval, bval; +l_uint32 word0, word1; +l_uint32 *datas, *datad, *lines, *lined; +l_float32 delrowt, delrowb, denom1, denom2, dely; +PIX *pix, *pixd; +PIXCMAP *cmap; + + PROCNAME("pixQuadraticVShearLI"); + + if (!pixs) + return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); + pixGetDimensions(pixs, &w, &h, &d); + if (d == 1) + return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); + cmap = pixGetColormap(pixs); + if (d != 8 && d != 32 && !cmap) + return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); + if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) + return (PIX *)ERROR_PTR("invalid direction", procName, NULL); + if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) + return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); + + if (vmaxt == 0 && vmaxb == 0) + return pixCopy(NULL, pixs); + + /* Remove any existing colormap */ + if (cmap) + pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); + else + pix = pixClone(pixs); + d = pixGetDepth(pix); + if (d != 8 && d != 32) { + pixDestroy(&pix); + return (PIX *)ERROR_PTR("invalid depth", procName, NULL); + } + + /* Standard linear interp: subdivide each pixel into 64 parts */ + pixd = pixCreateTemplate(pix); + pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); + datas = pixGetData(pix); + datad = pixGetData(pixd); + wpls = pixGetWpl(pix); + wpld = pixGetWpl(pixd); + wm = w - 1; + hm = h - 1; + denom1 = 1.0 / (l_float32)h; + denom2 = 1.0 / (l_float32)(wm * wm); + for (j = 0; j < w; j++) { + if (dir == L_WARP_TO_LEFT) { + delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; + delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; + } else if (dir == L_WARP_TO_RIGHT) { + delrowt = (l_float32)(vmaxt * j * j) * denom2; + delrowb = (l_float32)(vmaxb * j * j) * denom2; + } + switch (d) + { + case 8: + for (id = 0; id < h; id++) { + dely = (delrowt * (hm - id) + delrowb * id) * denom1; + i = 64 * id - (l_int32)(64.0 * dely); + yp = i / 64; + yf = i & 63; + if (yp < 0 || yp > hm) continue; + lines = datas + yp * wpls; + lined = datad + id * wpld; + if (yp < hm) { + val = ((63 - yf) * GET_DATA_BYTE(lines, j) + + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; + } else { /* yp == hm */ + val = GET_DATA_BYTE(lines, j); + } + SET_DATA_BYTE(lined, j, val); + } + break; + case 32: + for (id = 0; id < h; id++) { + dely = (delrowt * (hm - id) + delrowb * id) * denom1; + i = 64 * id - (l_int32)(64.0 * dely); + yp = i / 64; + yf = i & 63; + if (yp < 0 || yp > hm) continue; + lines = datas + yp * wpls; + lined = datad + id * wpld; + if (yp < hm) { + word0 = *(lines + j); + word1 = *(lines + wpls + j); + rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; + gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; + bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; + composeRGBPixel(rval, gval, bval, lined + j); + } else { /* yp == hm */ + lined[j] = lines[j]; + } + } + break; + default: + L_ERROR("invalid depth: %d\n", procName, d); + pixDestroy(&pix); + pixDestroy(&pixd); + return NULL; + } + } + + pixDestroy(&pix); + return pixd; +} + + +/*----------------------------------------------------------------------* + * Stereo from a pair of images * + *----------------------------------------------------------------------*/ +/*! + * \brief pixStereoFromPair() + * + * \param[in] pix1 32 bpp rgb + * \param[in] pix2 32 bpp rgb + * \param[in] rwt, gwt, bwt weighting factors used for each component in + pix1 to determine the output red channel + * \return pixd stereo enhanced, or NULL on error + * + *
+ * Notes:
+ *      (1) pix1 and pix2 are a pair of stereo images, ideally taken
+ *          concurrently in the same plane, with some lateral translation.
+ *      (2) The output red channel is determined from %pix1.
+ *          The output green and blue channels are taken from the green
+ *          and blue channels, respectively, of %pix2.
+ *      (3) The weights determine how much of each component in %pix1
+ *          goes into the output red channel.  The sum of weights
+ *          must be 1.0.  If it's not, we scale the weights to
+ *          satisfy this criterion.
+ *      (4) The most general pixel mapping allowed here is:
+ *            rval = rwt * r1 + gwt * g1 + bwt * b1  (from pix1)
+ *            gval = g2   (from pix2)
+ *            bval = b2   (from pix2)
+ *      (5) The simplest method is to use rwt = 1.0, gwt = 0.0, bwt = 0.0,
+ *          but this causes unpleasant visual artifacts with red in the image.
+ *          Use of green and blue from %pix1 in the red channel,
+ *          instead of red, tends to fix that problem.
+ * 
+ */ +PIX * +pixStereoFromPair(PIX *pix1, + PIX *pix2, + l_float32 rwt, + l_float32 gwt, + l_float32 bwt) +{ +l_int32 i, j, w, h, wpl1, wpl2, rval, gval, bval; +l_uint32 word1, word2; +l_uint32 *data1, *data2, *datad, *line1, *line2, *lined; +l_float32 sum; +PIX *pixd; + + PROCNAME("pixStereoFromPair"); + + if (!pix1 || !pix2) + return (PIX *)ERROR_PTR("pix1, pix2 not both defined", procName, NULL); + if (pixGetDepth(pix1) != 32 || pixGetDepth(pix2) != 32) + return (PIX *)ERROR_PTR("pix1, pix2 not both 32 bpp", procName, NULL); + + /* Make sure the sum of weights is 1.0; otherwise, you can get + * overflow in the gray value. */ + if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { + rwt = DefaultRedWeight; + gwt = DefaultGreenWeight; + bwt = DefaultBlueWeight; + } + sum = rwt + gwt + bwt; + if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ + L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); + rwt = rwt / sum; + gwt = gwt / sum; + bwt = bwt / sum; + } + + pixGetDimensions(pix1, &w, &h, NULL); + pixd = pixCreateTemplate(pix1); + data1 = pixGetData(pix1); + data2 = pixGetData(pix2); + datad = pixGetData(pixd); + wpl1 = pixGetWpl(pix1); + wpl2 = pixGetWpl(pix2); + for (i = 0; i < h; i++) { + line1 = data1 + i * wpl1; + line2 = data2 + i * wpl2; + lined = datad + i * wpl1; /* wpl1 works for pixd */ + for (j = 0; j < w; j++) { + word1 = *(line1 + j); + word2 = *(line2 + j); + rval = (l_int32)(rwt * ((word1 >> L_RED_SHIFT) & 0xff) + + gwt * ((word1 >> L_GREEN_SHIFT) & 0xff) + + bwt * ((word1 >> L_BLUE_SHIFT) & 0xff) + 0.5); + gval = (word2 >> L_GREEN_SHIFT) & 0xff; + bval = (word2 >> L_BLUE_SHIFT) & 0xff; + composeRGBPixel(rval, gval, bval, lined + j); + } + } + + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/watershed.c b/3rdparty/hgOCR/leptonica/watershed.c new file mode 100644 index 00000000..a858e80d --- /dev/null +++ b/3rdparty/hgOCR/leptonica/watershed.c @@ -0,0 +1,1130 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file watershed.c + *
+ *
+ *      Top-level
+ *            L_WSHED         *wshedCreate()
+ *            void             wshedDestroy()
+ *            l_int32          wshedApply()
+ *
+ *      Helpers
+ *            static l_int32   identifyWatershedBasin()
+ *            static l_int32   mergeLookup()
+ *            static l_int32   wshedGetHeight()
+ *            static void      pushNewPixel()
+ *            static void      popNewPixel()
+ *            static void      pushWSPixel()
+ *            static void      popWSPixel()
+ *            static void      debugPrintLUT()
+ *            static void      debugWshedMerge()
+ *
+ *      Output
+ *            l_int32          wshedBasins()
+ *            PIX             *wshedRenderFill()
+ *            PIX             *wshedRenderColors()
+ *
+ *  The watershed function identifies the "catch basins" of the input
+ *  8 bpp image, with respect to the specified seeds or "markers".
+ *  The use is in segmentation, but the selection of the markers is
+ *  critical to getting meaningful results.
+ *
+ *  How are the markers selected?  You can't simply use the local
+ *  minima, because a typical image has sufficient noise so that
+ *  a useful catch basin can easily have multiple local minima.  However
+ *  they are selected, the question for the watershed function is
+ *  how to handle local minima that are not markers.  The reason
+ *  this is important is because of the algorithm used to find the
+ *  watersheds, which is roughly like this:
+ *
+ *    (1) Identify the markers and the local minima, and enter them
+ *        into a priority queue based on the pixel value.  Each marker
+ *        is shrunk to a single pixel, if necessary, before the
+ *        operation starts.
+ *    (2) Feed the priority queue with neighbors of pixels that are
+ *        popped off the queue.  Each of these queue pixels is labeled
+ *        with the index value of its parent.
+ *    (3) Each pixel is also labeled, in a 32-bit image, with the marker
+ *        or local minimum index, from which it was originally derived.
+ *    (4) There are actually 3 classes of labels: seeds, minima, and
+ *        fillers.  The fillers are labels of regions that have already
+ *        been identified as watersheds and are continuing to fill, for
+ *        the purpose of finding higher watersheds.
+ *    (5) When a pixel is popped that has already been labeled in the
+ *        32-bit image and that label differs from the label of its
+ *        parent (stored in the queue pixel), a boundary has been crossed.
+ *        There are several cases:
+ *         (a) Both parents are derived from markers but at least one
+ *             is not deep enough to become a watershed.  Absorb the
+ *             shallower basin into the deeper one, fixing the LUT to
+ *             redirect the shallower index to the deeper one.
+ *         (b) Both parents are derived from markers and both are deep
+ *             enough.  Identify and save the watershed for each marker.
+ *         (c) One parent was derived from a marker and the other from
+ *             a minima: absorb the minima basin into the marker basin.
+ *         (d) One parent was derived from a marker and the other is
+ *             a filler: identify and save the watershed for the marker.
+ *         (e) Both parents are derived from minima: merge them.
+ *         (f) One parent is a filler and the other is derived from a
+ *             minima: merge the minima into the filler.
+ *    (6) The output of the watershed operation consists of:
+ *         ~ a pixa of the basins
+ *         ~ a pta of the markers
+ *         ~ a numa of the watershed levels
+ *
+ *  Typical usage:
+ *      L_WShed *wshed = wshedCreate(pixs, pixseed, mindepth, 0);
+ *      wshedApply(wshed);
+ *
+ *      wshedBasins(wshed, &pixa, &nalevels);
+ *        ... do something with pixa, nalevels ...
+ *      pixaDestroy(&pixa);
+ *      numaDestroy(&nalevels);
+ *
+ *      Pix *pixd = wshedRenderFill(wshed);
+ *
+ *      wshedDestroy(&wshed);
+ * 
+ */ + +#include "allheaders.h" + +#ifndef NO_CONSOLE_IO +#define DEBUG_WATERSHED 0 +#endif /* ~NO_CONSOLE_IO */ + +static const l_uint32 MAX_LABEL_VALUE = 0x7fffffff; /* largest l_int32 */ + +/*! New pixel coordinates */ +struct L_NewPixel +{ + l_int32 x; /*!< x coordinate */ + l_int32 y; /*!< y coordinate */ +}; +typedef struct L_NewPixel L_NEWPIXEL; + +/*! Wartshed pixel */ +struct L_WSPixel +{ + l_float32 val; /*!< pixel value */ + l_int32 x; /*!< x coordinate */ + l_int32 y; /*!< y coordinate */ + l_int32 index; /*!< label for set to which pixel belongs */ +}; +typedef struct L_WSPixel L_WSPIXEL; + + + /* Static functions for obtaining bitmap of watersheds */ +static void wshedSaveBasin(L_WSHED *wshed, l_int32 index, l_int32 level); + +static l_int32 identifyWatershedBasin(L_WSHED *wshed, + l_int32 index, l_int32 level, + BOX **pbox, PIX **ppixd); + + /* Static function for merging lut and backlink arrays */ +static l_int32 mergeLookup(L_WSHED *wshed, l_int32 sindex, l_int32 dindex); + + /* Static function for finding the height of the current pixel + above its seed or minima in the watershed. */ +static l_int32 wshedGetHeight(L_WSHED *wshed, l_int32 val, l_int32 label, + l_int32 *pheight); + + /* Static accessors for NewPixel on a queue */ +static void pushNewPixel(L_QUEUE *lq, l_int32 x, l_int32 y, + l_int32 *pminx, l_int32 *pmaxx, + l_int32 *pminy, l_int32 *pmaxy); +static void popNewPixel(L_QUEUE *lq, l_int32 *px, l_int32 *py); + + /* Static accessors for WSPixel on a heap */ +static void pushWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 val, + l_int32 x, l_int32 y, l_int32 index); +static void popWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 *pval, + l_int32 *px, l_int32 *py, l_int32 *pindex); + + /* Static debug print output */ +static void debugPrintLUT(l_int32 *lut, l_int32 size, l_int32 debug); + +static void debugWshedMerge(L_WSHED *wshed, char *descr, l_int32 x, + l_int32 y, l_int32 label, l_int32 index); + + +/*-----------------------------------------------------------------------* + * Top-level watershed * + *-----------------------------------------------------------------------*/ +/*! + * \brief wshedCreate() + * + * \param[in] pixs 8 bpp source + * \param[in] pixm 1 bpp 'marker' seed + * \param[in] mindepth minimum depth; anything less is not saved + * \param[in] debugflag 1 for debug output + * \return WShed, or NULL on error + * + *
+ * Notes:
+ *      (1) It is not necessary for the fg pixels in the seed image
+ *          be at minima, or that they be isolated.  We extract a
+ *          single pixel from each connected component, and a seed
+ *          anywhere in a watershed will eventually label the watershed
+ *          when the filling level reaches it.
+ *      (2) Set mindepth to some value to ignore noise in pixs that
+ *          can create small local minima.  Any watershed shallower
+ *          than mindepth, even if it has a seed, will not be saved;
+ *          It will either be incorporated in another watershed or
+ *          eliminated.
+ * 
+ */ +L_WSHED * +wshedCreate(PIX *pixs, + PIX *pixm, + l_int32 mindepth, + l_int32 debugflag) +{ +l_int32 w, h; +L_WSHED *wshed; + + PROCNAME("wshedCreate"); + + if (!pixs) + return (L_WSHED *)ERROR_PTR("pixs is not defined", procName, NULL); + if (pixGetDepth(pixs) != 8) + return (L_WSHED *)ERROR_PTR("pixs is not 8 bpp", procName, NULL); + if (!pixm) + return (L_WSHED *)ERROR_PTR("pixm is not defined", procName, NULL); + if (pixGetDepth(pixm) != 1) + return (L_WSHED *)ERROR_PTR("pixm is not 1 bpp", procName, NULL); + pixGetDimensions(pixs, &w, &h, NULL); + if (pixGetWidth(pixm) != w || pixGetHeight(pixm) != h) + return (L_WSHED *)ERROR_PTR("pixs/m sizes are unequal", procName, NULL); + + if ((wshed = (L_WSHED *)LEPT_CALLOC(1, sizeof(L_WSHED))) == NULL) + return (L_WSHED *)ERROR_PTR("wshed not made", procName, NULL); + + wshed->pixs = pixClone(pixs); + wshed->pixm = pixClone(pixm); + wshed->mindepth = L_MAX(1, mindepth); + wshed->pixlab = pixCreate(w, h, 32); + pixSetAllArbitrary(wshed->pixlab, MAX_LABEL_VALUE); + wshed->pixt = pixCreate(w, h, 1); + wshed->lines8 = pixGetLinePtrs(pixs, NULL); + wshed->linem1 = pixGetLinePtrs(pixm, NULL); + wshed->linelab32 = pixGetLinePtrs(wshed->pixlab, NULL); + wshed->linet1 = pixGetLinePtrs(wshed->pixt, NULL); + wshed->debug = debugflag; + return wshed; +} + + +/*! + * \brief wshedDestroy() + * + * \param[in,out] pwshed will be set to null before returning + * \return void + */ +void +wshedDestroy(L_WSHED **pwshed) +{ +l_int32 i; +L_WSHED *wshed; + + PROCNAME("wshedDestroy"); + + if (pwshed == NULL) { + L_WARNING("ptr address is null!\n", procName); + return; + } + + if ((wshed = *pwshed) == NULL) + return; + + pixDestroy(&wshed->pixs); + pixDestroy(&wshed->pixm); + pixDestroy(&wshed->pixlab); + pixDestroy(&wshed->pixt); + if (wshed->lines8) LEPT_FREE(wshed->lines8); + if (wshed->linem1) LEPT_FREE(wshed->linem1); + if (wshed->linelab32) LEPT_FREE(wshed->linelab32); + if (wshed->linet1) LEPT_FREE(wshed->linet1); + pixaDestroy(&wshed->pixad); + ptaDestroy(&wshed->ptas); + numaDestroy(&wshed->nash); + numaDestroy(&wshed->nasi); + numaDestroy(&wshed->namh); + numaDestroy(&wshed->nalevels); + if (wshed->lut) + LEPT_FREE(wshed->lut); + if (wshed->links) { + for (i = 0; i < wshed->arraysize; i++) + numaDestroy(&wshed->links[i]); + LEPT_FREE(wshed->links); + } + LEPT_FREE(wshed); + *pwshed = NULL; + return; +} + + +/*! + * \brief wshedApply() + * + * \param[in] wshed generated from wshedCreate() + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) N.B. This is buggy!  It seems to locate watersheds that are
+ *          duplicates.  The watershed extraction after complete fill
+ *          grabs some regions belonging to existing watersheds.
+ *          See prog/watershedtest.c for testing.
+ * 
+ */ +l_ok +wshedApply(L_WSHED *wshed) +{ +char two_new_watersheds[] = "Two new watersheds"; +char seed_absorbed_into_seeded_basin[] = "Seed absorbed into seeded basin"; +char one_new_watershed_label[] = "One new watershed (label)"; +char one_new_watershed_index[] = "One new watershed (index)"; +char minima_absorbed_into_seeded_basin[] = + "Minima absorbed into seeded basin"; +char minima_absorbed_by_filler_or_another[] = + "Minima absorbed by filler or another"; +l_int32 nseeds, nother, nboth, arraysize; +l_int32 i, j, val, x, y, w, h, index, mindepth; +l_int32 imin, imax, jmin, jmax, cindex, clabel, nindex; +l_int32 hindex, hlabel, hmin, hmax, minhindex, maxhindex; +l_int32 *lut; +l_uint32 ulabel, uval; +void **lines8, **linelab32; +NUMA *nalut, *nalevels, *nash, *namh, *nasi; +NUMA **links; +L_HEAP *lh; +PIX *pixmin, *pixsd; +PIXA *pixad; +L_STACK *rstack; +PTA *ptas, *ptao; + + PROCNAME("wshedApply"); + + if (!wshed) + return ERROR_INT("wshed not defined", procName, 1); + + /* ------------------------------------------------------------ * + * Initialize priority queue and pixlab with seeds and minima * + * ------------------------------------------------------------ */ + + lh = lheapCreate(0, L_SORT_INCREASING); /* remove lowest values first */ + rstack = lstackCreate(0); /* for reusing the WSPixels */ + pixGetDimensions(wshed->pixs, &w, &h, NULL); + lines8 = wshed->lines8; /* wshed owns this */ + linelab32 = wshed->linelab32; /* ditto */ + + /* Identify seed (marker) pixels, 1 for each c.c. in pixm */ + pixSelectMinInConnComp(wshed->pixs, wshed->pixm, &ptas, &nash); + pixsd = pixGenerateFromPta(ptas, w, h); + nseeds = ptaGetCount(ptas); + for (i = 0; i < nseeds; i++) { + ptaGetIPt(ptas, i, &x, &y); + uval = GET_DATA_BYTE(lines8[y], x); + pushWSPixel(lh, rstack, (l_int32)uval, x, y, i); + } + wshed->ptas = ptas; + nasi = numaMakeConstant(1, nseeds); /* indicator array */ + wshed->nasi = nasi; + wshed->nash = nash; + wshed->nseeds = nseeds; + + /* Identify minima that are not seeds. Use these 4 steps: + * (1) Get the local minima, which can have components + * of arbitrary size. This will be a clipping mask. + * (2) Get the image of the actual seeds (pixsd) + * (3) Remove all elements of the clipping mask that have a seed. + * (4) Shrink each of the remaining elements of the minima mask + * to a single pixel. */ + pixLocalExtrema(wshed->pixs, 200, 0, &pixmin, NULL); + pixRemoveSeededComponents(pixmin, pixsd, pixmin, 8, 2); + pixSelectMinInConnComp(wshed->pixs, pixmin, &ptao, &namh); + nother = ptaGetCount(ptao); + for (i = 0; i < nother; i++) { + ptaGetIPt(ptao, i, &x, &y); + uval = GET_DATA_BYTE(lines8[y], x); + pushWSPixel(lh, rstack, (l_int32)uval, x, y, nseeds + i); + } + wshed->namh = namh; + + /* ------------------------------------------------------------ * + * Initialize merging lookup tables * + * ------------------------------------------------------------ */ + + /* nalut should always give the current after-merging index. + * links are effectively backpointers: they are numas associated with + * a dest index of all indices in nalut that point to that index. */ + mindepth = wshed->mindepth; + nboth = nseeds + nother; + arraysize = 2 * nboth; + wshed->arraysize = arraysize; + nalut = numaMakeSequence(0, 1, arraysize); + lut = numaGetIArray(nalut); + wshed->lut = lut; /* wshed owns this */ + links = (NUMA **)LEPT_CALLOC(arraysize, sizeof(NUMA *)); + wshed->links = links; /* wshed owns this */ + nindex = nseeds + nother; /* the next unused index value */ + + /* ------------------------------------------------------------ * + * Fill the basins, using the priority queue * + * ------------------------------------------------------------ */ + + pixad = pixaCreate(nseeds); + wshed->pixad = pixad; /* wshed owns this */ + nalevels = numaCreate(nseeds); + wshed->nalevels = nalevels; /* wshed owns this */ + L_INFO("nseeds = %d, nother = %d\n", procName, nseeds, nother); + while (lheapGetCount(lh) > 0) { + popWSPixel(lh, rstack, &val, &x, &y, &index); +/* fprintf(stderr, "x = %d, y = %d, index = %d\n", x, y, index); */ + ulabel = GET_DATA_FOUR_BYTES(linelab32[y], x); + if (ulabel == MAX_LABEL_VALUE) + clabel = ulabel; + else + clabel = lut[ulabel]; + cindex = lut[index]; + if (clabel == cindex) continue; /* have already seen this one */ + if (clabel == MAX_LABEL_VALUE) { /* new one; assign index and try to + * propagate to all neighbors */ + SET_DATA_FOUR_BYTES(linelab32[y], x, cindex); + imin = L_MAX(0, y - 1); + imax = L_MIN(h - 1, y + 1); + jmin = L_MAX(0, x - 1); + jmax = L_MIN(w - 1, x + 1); + for (i = imin; i <= imax; i++) { + for (j = jmin; j <= jmax; j++) { + if (i == y && j == x) continue; + uval = GET_DATA_BYTE(lines8[i], j); + pushWSPixel(lh, rstack, (l_int32)uval, j, i, cindex); + } + } + } else { /* pixel is already labeled (differently); must resolve */ + + /* If both indices are seeds, check if the min height is + * greater than mindepth. If so, we have two new watersheds; + * locate them and assign to both regions a new index + * for further waterfill. If not, absorb the shallower + * watershed into the deeper one and continue filling it. */ + pixGetPixel(pixsd, x, y, &uval); + if (clabel < nseeds && cindex < nseeds) { + wshedGetHeight(wshed, val, clabel, &hlabel); + wshedGetHeight(wshed, val, cindex, &hindex); + hmin = L_MIN(hlabel, hindex); + hmax = L_MAX(hlabel, hindex); + if (hmin == hmax) { + hmin = hlabel; + hmax = hindex; + } + if (wshed->debug) { + fprintf(stderr, "clabel,hlabel = %d,%d\n", clabel, hlabel); + fprintf(stderr, "hmin = %d, hmax = %d\n", hmin, hmax); + fprintf(stderr, "cindex,hindex = %d,%d\n", cindex, hindex); + if (hmin < mindepth) + fprintf(stderr, "Too shallow!\n"); + } + + if (hmin >= mindepth) { + debugWshedMerge(wshed, two_new_watersheds, + x, y, clabel, cindex); + wshedSaveBasin(wshed, cindex, val - 1); + wshedSaveBasin(wshed, clabel, val - 1); + numaSetValue(nasi, cindex, 0); + numaSetValue(nasi, clabel, 0); + + if (wshed->debug) fprintf(stderr, "nindex = %d\n", nindex); + debugPrintLUT(lut, nindex, wshed->debug); + mergeLookup(wshed, clabel, nindex); + debugPrintLUT(lut, nindex, wshed->debug); + mergeLookup(wshed, cindex, nindex); + debugPrintLUT(lut, nindex, wshed->debug); + nindex++; + } else /* extraneous seed within seeded basin; absorb */ { + debugWshedMerge(wshed, seed_absorbed_into_seeded_basin, + x, y, clabel, cindex); + } + maxhindex = clabel; /* TODO: is this part of above 'else'? */ + minhindex = cindex; + if (hindex > hlabel) { + maxhindex = cindex; + minhindex = clabel; + } + mergeLookup(wshed, minhindex, maxhindex); + } else if (clabel < nseeds && cindex >= nboth) { + /* If one index is a seed and the other is a merge of + * 2 watersheds, generate a single watershed. */ + debugWshedMerge(wshed, one_new_watershed_label, + x, y, clabel, cindex); + wshedSaveBasin(wshed, clabel, val - 1); + numaSetValue(nasi, clabel, 0); + mergeLookup(wshed, clabel, cindex); + } else if (cindex < nseeds && clabel >= nboth) { + debugWshedMerge(wshed, one_new_watershed_index, + x, y, clabel, cindex); + wshedSaveBasin(wshed, cindex, val - 1); + numaSetValue(nasi, cindex, 0); + mergeLookup(wshed, cindex, clabel); + } else if (clabel < nseeds) { /* cindex from minima; absorb */ + /* If one index is a seed and the other is from a minimum, + * merge the minimum wshed into the seed wshed. */ + debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, + x, y, clabel, cindex); + mergeLookup(wshed, cindex, clabel); + } else if (cindex < nseeds) { /* clabel from minima; absorb */ + debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, + x, y, clabel, cindex); + mergeLookup(wshed, clabel, cindex); + } else { /* If neither index is a seed, just merge */ + debugWshedMerge(wshed, minima_absorbed_by_filler_or_another, + x, y, clabel, cindex); + mergeLookup(wshed, clabel, cindex); + } + } + } + +#if 0 + /* Use the indicator array to save any watersheds that fill + * to the maximum value. This seems to screw things up! */ + for (i = 0; i < nseeds; i++) { + numaGetIValue(nasi, i, &ival); + if (ival == 1) { + wshedSaveBasin(wshed, lut[i], val - 1); + numaSetValue(nasi, i, 0); + } + } +#endif + + numaDestroy(&nalut); + pixDestroy(&pixmin); + pixDestroy(&pixsd); + ptaDestroy(&ptao); + lheapDestroy(&lh, TRUE); + lstackDestroy(&rstack, TRUE); + return 0; +} + + +/*-----------------------------------------------------------------------* + * Helpers * + *-----------------------------------------------------------------------*/ +/*! + * \brief wshedSaveBasin() + * + * \param[in] wshed + * \param[in] index index of basin to be located + * \param[in] level filling level reached at the time this function + * is called + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This identifies a single watershed.  It does not change
+ *          the LUT, which must be done subsequently.
+ *      (2) The fill level of a basin is taken to be %level - 1.
+ * 
+ */ +static void +wshedSaveBasin(L_WSHED *wshed, + l_int32 index, + l_int32 level) +{ +BOX *box; +PIX *pix; + + PROCNAME("wshedSaveBasin"); + + if (!wshed) { + L_ERROR("wshed not defined\n", procName); + return; + } + + if (identifyWatershedBasin(wshed, index, level, &box, &pix) == 0) { + pixaAddPix(wshed->pixad, pix, L_INSERT); + pixaAddBox(wshed->pixad, box, L_INSERT); + numaAddNumber(wshed->nalevels, level - 1); + } + return; +} + + +/*! + * \brief identifyWatershedBasin() + * + * \param[in] wshed + * \param[in] index index of basin to be located + * \param[in] level of basin at point at which the two basins met + * \param[out] pbox bounding box of basin + * \param[out] ppixd pix of basin, cropped to its bounding box + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) This is a static function, so we assume pixlab, pixs and pixt
+ *          exist and are the same size.
+ *      (2) It selects all pixels that have the label %index in pixlab
+ *          and that have a value in pixs that is less than %level.
+ *      (3) It is used whenever two seeded basins meet (typically at a saddle),
+ *          or when one seeded basin meets a 'filler'.  All identified
+ *          basins are saved as a watershed.
+ * 
+ */ +static l_int32 +identifyWatershedBasin(L_WSHED *wshed, + l_int32 index, + l_int32 level, + BOX **pbox, + PIX **ppixd) +{ +l_int32 imin, imax, jmin, jmax, minx, miny, maxx, maxy; +l_int32 bw, bh, i, j, w, h, x, y; +l_int32 *lut; +l_uint32 label, bval, lval; +void **lines8, **linelab32, **linet1; +BOX *box; +PIX *pixs, *pixt, *pixd; +L_QUEUE *lq; + + PROCNAME("identifyWatershedBasin"); + + if (!pbox) + return ERROR_INT("&box not defined", procName, 1); + *pbox = NULL; + if (!ppixd) + return ERROR_INT("&pixd not defined", procName, 1); + *ppixd = NULL; + if (!wshed) + return ERROR_INT("wshed not defined", procName, 1); + + /* Make a queue and an auxiliary stack */ + lq = lqueueCreate(0); + lq->stack = lstackCreate(0); + + pixs = wshed->pixs; + pixt = wshed->pixt; + lines8 = wshed->lines8; + linelab32 = wshed->linelab32; + linet1 = wshed->linet1; + lut = wshed->lut; + pixGetDimensions(pixs, &w, &h, NULL); + + /* Prime the queue with the seed pixel for this watershed. */ + minx = miny = 1000000; + maxx = maxy = 0; + ptaGetIPt(wshed->ptas, index, &x, &y); + pixSetPixel(pixt, x, y, 1); + pushNewPixel(lq, x, y, &minx, &maxx, &miny, &maxy); + if (wshed->debug) fprintf(stderr, "prime: (x,y) = (%d, %d)\n", x, y); + + /* Each pixel in a spreading breadth-first search is inspected. + * It is accepted as part of this watershed, and pushed on + * the search queue, if: + * (1) It has a label value equal to %index + * (2) The pixel value is less than %level, the overflow + * height at which the two basins join. + * (3) It has not yet been seen in this search. */ + while (lqueueGetCount(lq) > 0) { + popNewPixel(lq, &x, &y); + imin = L_MAX(0, y - 1); + imax = L_MIN(h - 1, y + 1); + jmin = L_MAX(0, x - 1); + jmax = L_MIN(w - 1, x + 1); + for (i = imin; i <= imax; i++) { + for (j = jmin; j <= jmax; j++) { + if (j == x && i == y) continue; /* parent */ + label = GET_DATA_FOUR_BYTES(linelab32[i], j); + if (label == MAX_LABEL_VALUE || lut[label] != index) continue; + bval = GET_DATA_BIT(linet1[i], j); + if (bval == 1) continue; /* already seen */ + lval = GET_DATA_BYTE(lines8[i], j); + if (lval >= level) continue; /* too high */ + SET_DATA_BIT(linet1[i], j); + pushNewPixel(lq, j, i, &minx, &maxx, &miny, &maxy); + } + } + } + + /* Extract the box and pix, and clear pixt */ + bw = maxx - minx + 1; + bh = maxy - miny + 1; + box = boxCreate(minx, miny, bw, bh); + pixd = pixClipRectangle(pixt, box, NULL); + pixRasterop(pixt, minx, miny, bw, bh, PIX_SRC ^ PIX_DST, pixd, 0, 0); + *pbox = box; + *ppixd = pixd; + + lqueueDestroy(&lq, 1); + return 0; +} + + +/*! + * \brief mergeLookup() + * + * \param[in] wshed + * \param[in] sindex primary index being changed in the merge + * \param[in] dindex index that %sindex will point to after the merge + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The links are a sparse array of Numas showing current back-links.
+ *          The lut gives the current index (of the seed or the minima
+ *          for the wshed  in which it is located.
+ *      (2) Think of each entry in the lut.  There are two types:
+ *             owner:     lut[index] = index
+ *             redirect:  lut[index] != index
+ *      (3) This is called each time a merge occurs.  It puts the lut
+ *          and backlinks in a canonical form after the merge, where
+ *          all entries in the lut point to the current "owner", which
+ *          has all backlinks.  That is, every "redirect" in the lut
+ *          points to an "owner".  The lut always gives the index of
+ *          the current owner.
+ * 
+ */ +static l_int32 +mergeLookup(L_WSHED *wshed, + l_int32 sindex, + l_int32 dindex) +{ +l_int32 i, n, size, index; +l_int32 *lut; +NUMA *na; +NUMA **links; + + PROCNAME("mergeLookup"); + + if (!wshed) + return ERROR_INT("wshed not defined", procName, 1); + size = wshed->arraysize; + if (sindex < 0 || sindex >= size) + return ERROR_INT("invalid sindex", procName, 1); + if (dindex < 0 || dindex >= size) + return ERROR_INT("invalid dindex", procName, 1); + + /* Redirect links in the lut */ + n = 0; + links = wshed->links; + lut = wshed->lut; + if ((na = links[sindex]) != NULL) { + n = numaGetCount(na); + for (i = 0; i < n; i++) { + numaGetIValue(na, i, &index); + lut[index] = dindex; + } + } + lut[sindex] = dindex; + + /* Shift the backlink arrays from sindex to dindex. + * sindex should have no backlinks because all entries in the + * lut that were previously pointing to it have been redirected + * to dindex. */ + if (!links[dindex]) + links[dindex] = numaCreate(n); + numaJoin(links[dindex], links[sindex], 0, -1); + numaAddNumber(links[dindex], sindex); + numaDestroy(&links[sindex]); + + return 0; +} + + +/*! + * \brief wshedGetHeight() + * + * \param[in] wshed array of current indices + * \param[in] val value of current pixel popped off queue + * \param[in] label of pixel or 32 bpp label image + * \param[out] pheight height of current value from seed + * or minimum of watershed + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) It is only necessary to find the height for a watershed
+ *          that is indexed by a seed or a minima.  This function should
+ *          not be called on a finished watershed (that continues to fill).
+ * 
+ */ +static l_int32 +wshedGetHeight(L_WSHED *wshed, + l_int32 val, + l_int32 label, + l_int32 *pheight) +{ +l_int32 minval; + + PROCNAME("wshedGetHeight"); + + if (!pheight) + return ERROR_INT("&height not defined", procName, 1); + *pheight = 0; + if (!wshed) + return ERROR_INT("wshed not defined", procName, 1); + + if (label < wshed->nseeds) + numaGetIValue(wshed->nash, label, &minval); + else if (label < wshed->nseeds + wshed->nother) + numaGetIValue(wshed->namh, label, &minval); + else + return ERROR_INT("finished watershed; should not call", procName, 1); + + *pheight = val - minval; + return 0; +} + + +/* + * \brief pushNewPixel() + * + * \param[in] lqueue + * \param[in] x, y pixel coordinates + * \param[out] pminx, pmaxx, pminy, pmaxy bounding box update + * \return void + * + *
+ * Notes:
+ *      (1) This is a wrapper for adding a NewPixel to a queue, which
+ *          updates the bounding box for all pixels on that queue and
+ *          uses the storage stack to retrieve a NewPixel.
+ * 
+ */ +static void +pushNewPixel(L_QUEUE *lq, + l_int32 x, + l_int32 y, + l_int32 *pminx, + l_int32 *pmaxx, + l_int32 *pminy, + l_int32 *pmaxy) +{ +L_NEWPIXEL *np; + + PROCNAME("pushNewPixel"); + + if (!lq) { + L_ERROR("queue not defined\n", procName); + return; + } + + /* Adjust bounding box */ + *pminx = L_MIN(*pminx, x); + *pmaxx = L_MAX(*pmaxx, x); + *pminy = L_MIN(*pminy, y); + *pmaxy = L_MAX(*pmaxy, y); + + /* Get a newpixel to use */ + if (lstackGetCount(lq->stack) > 0) + np = (L_NEWPIXEL *)lstackRemove(lq->stack); + else + np = (L_NEWPIXEL *)LEPT_CALLOC(1, sizeof(L_NEWPIXEL)); + + np->x = x; + np->y = y; + lqueueAdd(lq, np); + return; +} + + +/* + * \brief popNewPixel() + * + * \param[in] lqueue + * \param[out] px, py pixel coordinates + * \return void + * + *
+ * Notes:
+ *      (1) This is a wrapper for removing a NewPixel from a queue,
+ *          which returns the pixel coordinates and saves the NewPixel
+ *          on the storage stack.
+ * 
+ */ +static void +popNewPixel(L_QUEUE *lq, + l_int32 *px, + l_int32 *py) +{ +L_NEWPIXEL *np; + + PROCNAME("popNewPixel"); + + if (!lq) { + L_ERROR("lqueue not defined\n", procName); + return; + } + + if ((np = (L_NEWPIXEL *)lqueueRemove(lq)) == NULL) + return; + *px = np->x; + *py = np->y; + lstackAdd(lq->stack, np); /* save for re-use */ + return; +} + + +/* + * \brief pushWSPixel() + * + * \param[in] lh priority queue + * \param[in] stack of reusable WSPixels + * \param[in] val pixel value: used for ordering the heap + * \param[in] x, y pixel coordinates + * \param[in] index label for set to which pixel belongs + * \return void + * + *
+ * Notes:
+ *      (1) This is a wrapper for adding a WSPixel to a heap.  It
+ *          uses the storage stack to retrieve a WSPixel.
+ * 
+ */ +static void +pushWSPixel(L_HEAP *lh, + L_STACK *stack, + l_int32 val, + l_int32 x, + l_int32 y, + l_int32 index) +{ +L_WSPIXEL *wsp; + + PROCNAME("pushWSPixel"); + + if (!lh) { + L_ERROR("heap not defined\n", procName); + return; + } + if (!stack) { + L_ERROR("stack not defined\n", procName); + return; + } + + /* Get a wspixel to use */ + if (lstackGetCount(stack) > 0) + wsp = (L_WSPIXEL *)lstackRemove(stack); + else + wsp = (L_WSPIXEL *)LEPT_CALLOC(1, sizeof(L_WSPIXEL)); + + wsp->val = (l_float32)val; + wsp->x = x; + wsp->y = y; + wsp->index = index; + lheapAdd(lh, wsp); + return; +} + + +/* + * \brief popWSPixel() + * + * \param[in] lh priority queue + * \param[in] stack of reusable WSPixels + * \param[out] pval pixel value + * \param[out] px, py pixel coordinates + * \param[out] pindex label for set to which pixel belongs + * \return void + * + *
+ * Notes:
+ *      (1) This is a wrapper for removing a WSPixel from a heap,
+ *          which returns the WSPixel data and saves the WSPixel
+ *          on the storage stack.
+ * 
+ */ +static void +popWSPixel(L_HEAP *lh, + L_STACK *stack, + l_int32 *pval, + l_int32 *px, + l_int32 *py, + l_int32 *pindex) +{ +L_WSPIXEL *wsp; + + PROCNAME("popWSPixel"); + + if (!lh) { + L_ERROR("lheap not defined\n", procName); + return; + } + if (!stack) { + L_ERROR("stack not defined\n", procName); + return; + } + if (!pval || !px || !py || !pindex) { + L_ERROR("data can't be returned\n", procName); + return; + } + + if ((wsp = (L_WSPIXEL *)lheapRemove(lh)) == NULL) + return; + *pval = (l_int32)wsp->val; + *px = wsp->x; + *py = wsp->y; + *pindex = wsp->index; + lstackAdd(stack, wsp); /* save for re-use */ + return; +} + + +static void +debugPrintLUT(l_int32 *lut, + l_int32 size, + l_int32 debug) +{ +l_int32 i; + + if (!debug) return; + fprintf(stderr, "lut: "); + for (i = 0; i < size; i++) + fprintf(stderr, "%d ", lut[i]); + fprintf(stderr, "\n"); + return; +} + + +static void +debugWshedMerge(L_WSHED *wshed, + char *descr, + l_int32 x, + l_int32 y, + l_int32 label, + l_int32 index) +{ + if (!wshed || (wshed->debug == 0)) + return; + fprintf(stderr, "%s:\n", descr); + fprintf(stderr, " (x, y) = (%d, %d)\n", x, y); + fprintf(stderr, " clabel = %d, cindex = %d\n", label, index); + return; +} + + +/*-----------------------------------------------------------------------* + * Output * + *-----------------------------------------------------------------------*/ +/*! + * \brief wshedBasins() + * + * \param[in] wshed + * \param[out] ppixa [optional] mask of watershed basins + * \param[out] pnalevels [optional] watershed levels + * \return 0 if OK, 1 on error + */ +l_ok +wshedBasins(L_WSHED *wshed, + PIXA **ppixa, + NUMA **pnalevels) +{ + PROCNAME("wshedBasins"); + + if (!wshed) + return ERROR_INT("wshed not defined", procName, 1); + + if (ppixa) + *ppixa = pixaCopy(wshed->pixad, L_CLONE); + if (pnalevels) + *pnalevels = numaClone(wshed->nalevels); + return 0; +} + + +/*! + * \brief wshedRenderFill() + * + * \param[in] wshed + * \return pixd initial image with all basins filled, or NULL on error + */ +PIX * +wshedRenderFill(L_WSHED *wshed) +{ +l_int32 i, n, level, bx, by; +NUMA *na; +PIX *pix, *pixd; +PIXA *pixa; + + PROCNAME("wshedRenderFill"); + + if (!wshed) + return (PIX *)ERROR_PTR("wshed not defined", procName, NULL); + + wshedBasins(wshed, &pixa, &na); + pixd = pixCopy(NULL, wshed->pixs); + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + pixaGetBoxGeometry(pixa, i, &bx, &by, NULL, NULL); + numaGetIValue(na, i, &level); + pixPaintThroughMask(pixd, pix, bx, by, level); + pixDestroy(&pix); + } + + pixaDestroy(&pixa); + numaDestroy(&na); + return pixd; +} + + +/*! + * \brief wshedRenderColors() + * + * \param[in] wshed + * \return pixd initial image with all basins filled, or null on error + */ +PIX * +wshedRenderColors(L_WSHED *wshed) +{ +l_int32 w, h; +PIX *pixg, *pixt, *pixc, *pixm, *pixd; +PIXA *pixa; + + PROCNAME("wshedRenderColors"); + + if (!wshed) + return (PIX *)ERROR_PTR("wshed not defined", procName, NULL); + + wshedBasins(wshed, &pixa, NULL); + pixg = pixCopy(NULL, wshed->pixs); + pixGetDimensions(wshed->pixs, &w, &h, NULL); + pixd = pixConvertTo32(pixg); + pixt = pixaDisplayRandomCmap(pixa, w, h); + pixc = pixConvertTo32(pixt); + pixm = pixaDisplay(pixa, w, h); + pixCombineMasked(pixd, pixc, pixm); + + pixDestroy(&pixg); + pixDestroy(&pixt); + pixDestroy(&pixc); + pixDestroy(&pixm); + pixaDestroy(&pixa); + return pixd; +} diff --git a/3rdparty/hgOCR/leptonica/watershed.h b/3rdparty/hgOCR/leptonica/watershed.h new file mode 100644 index 00000000..d6b20775 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/watershed.h @@ -0,0 +1,64 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +#ifndef LEPTONICA_WATERSHED_H +#define LEPTONICA_WATERSHED_H + +/*! + * \file watershed.h + * + * Simple data structure to hold watershed data. + * All data here is owned by the L_WShed and must be freed. + */ + +/*! Simple data structure to hold watershed data. */ +struct L_WShed +{ + struct Pix *pixs; /*!< clone of input 8 bpp pixs */ + struct Pix *pixm; /*!< clone of input 1 bpp seed (marker) pixm */ + l_int32 mindepth; /*!< minimum depth allowed for a watershed */ + struct Pix *pixlab; /*!< 16 bpp label pix */ + struct Pix *pixt; /*!< scratch pix for computing wshed regions */ + void **lines8; /*!< line ptrs for pixs */ + void **linem1; /*!< line ptrs for pixm */ + void **linelab32; /*!< line ptrs for pixlab */ + void **linet1; /*!< line ptrs for pixt */ + struct Pixa *pixad; /*!< result: 1 bpp pixa of watersheds */ + struct Pta *ptas; /*!< pta of initial seed pixels */ + struct Numa *nasi; /*!< numa of seed indicators; 0 if completed */ + struct Numa *nash; /*!< numa of initial seed heights */ + struct Numa *namh; /*!< numa of initial minima heights */ + struct Numa *nalevels; /*!< result: numa of watershed levels */ + l_int32 nseeds; /*!< number of seeds (markers) */ + l_int32 nother; /*!< number of minima different from seeds */ + l_int32 *lut; /*!< lut for pixel indices */ + struct Numa **links; /*!< back-links into lut, for updates */ + l_int32 arraysize; /*!< size of links array */ + l_int32 debug; /*!< set to 1 for debug output */ +}; +typedef struct L_WShed L_WSHED; + +#endif /* LEPTONICA_WATERSHED_H */ diff --git a/3rdparty/hgOCR/leptonica/webpanimio.c b/3rdparty/hgOCR/leptonica/webpanimio.c new file mode 100644 index 00000000..e9f76961 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/webpanimio.c @@ -0,0 +1,273 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file webpanimio.c + *
+ *
+ *    Writing animated WebP
+ *          l_int32          pixaWriteWebPAnim()
+ *          l_int32          pixaWriteStreamWebPAnim()
+ *          l_int32          pixaWriteMemWebPAnim()
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* -----------------------------------------------*/ +#if HAVE_LIBWEBP_ANIM /* defined in environ.h */ +/* -----------------------------------------------*/ +#include "webp/decode.h" +#include "webp/encode.h" +#include "webp/mux.h" +#include "webp/demux.h" + +/*---------------------------------------------------------------------* + * Writing animated WebP * + *---------------------------------------------------------------------*/ +/*! + * \brief pixaWriteWebPAnim() + * + * \param[in] filename + * \param[in] pixa with images of all depths; cmap OK + * \param[in] loopcount [0 for infinite] + * \param[in] duration in ms, for each image + * \param[in] quality 0 - 100 for lossy; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Special top-level function allowing specification of quality.
+ * 
+ */ +l_ok +pixaWriteWebPAnim(const char *filename, + PIXA *pixa, + l_int32 loopcount, + l_int32 duration, + l_int32 quality, + l_int32 lossless) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixaWriteWebPAnim"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixaWriteStreamWebPAnim(fp, pixa, loopcount, duration, + quality, lossless); + fclose(fp); + if (ret) + return ERROR_INT("pixs not compressed to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixaWriteStreamWebPAnim() + * + * \param[in] fp file stream + * \param[in] pixa with images of all depths; cmap OK + * \param[in] loopcount [0 for infinite] + * \param[in] duration in ms, for each image + * \param[in] quality 0 - 100 for lossy; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteMemWebP() for details.
+ *      (2) Use 'free', and not leptonica's 'LEPT_FREE', for all heap data
+ *          that is returned from the WebP library.
+ * 
+ */ +l_ok +pixaWriteStreamWebPAnim(FILE *fp, + PIXA *pixa, + l_int32 loopcount, + l_int32 duration, + l_int32 quality, + l_int32 lossless) +{ +l_uint8 *filedata; +size_t filebytes, nbytes; + + PROCNAME("pixaWriteStreamWebpAnim"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + filedata = NULL; + pixaWriteMemWebPAnim(&filedata, &filebytes, pixa, loopcount, + duration, quality, lossless); + rewind(fp); + if (!filedata) + return ERROR_INT("filedata not made", procName, 1); + nbytes = fwrite(filedata, 1, filebytes, fp); + free(filedata); + if (nbytes != filebytes) + return ERROR_INT("Write error", procName, 1); + return 0; +} + + +/*! + * \brief pixaWriteMemWebPAnim() + * + * \param[out] pencdata webp encoded data of pixs + * \param[out] pencsize size of webp encoded data + * \param[in] pixa with images of any depth, cmapped OK + * \param[in] loopcount [0 for infinite] + * \param[in] duration in ms, for each image + * \param[in] quality 0 - 100 for lossy; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteMemWebP() for details of webp encoding of images.
+ * 
+ */ +l_ok +pixaWriteMemWebPAnim(l_uint8 **pencdata, + size_t *pencsize, + PIXA *pixa, + l_int32 loopcount, + l_int32 duration, + l_int32 quality, + l_int32 lossless) +{ +l_int32 i, n, same, w, h, wpl, ret; +l_uint8 *data; +PIX *pix1, *pix2; +WebPAnimEncoder *enc; +WebPAnimEncoderOptions enc_options; +WebPConfig config; +WebPData webp_data; +WebPMux *mux = NULL; +WebPMuxAnimParams newparams; +WebPPicture frame; + + PROCNAME("pixaWriteMemWebPAnim"); + + if (!pencdata) + return ERROR_INT("&encdata not defined", procName, 1); + *pencdata = NULL; + if (!pencsize) + return ERROR_INT("&encsize not defined", procName, 1); + *pencsize = 0; + if (!pixa) + return ERROR_INT("&pixa not defined", procName, 1); + if ((n = pixaGetCount(pixa)) == 0) + return ERROR_INT("no images in pixa", procName, 1); + if (loopcount < 0) loopcount = 0; + if (lossless == 0 && (quality < 0 || quality > 100)) + return ERROR_INT("quality not in [0 ... 100]", procName, 1); + + pixaVerifyDimensions(pixa, &same, &w, &h); + if (!same) + return ERROR_INT("sizes of all pix are not the same", procName, 1); + + /* Set up the encoder */ + WebPAnimEncoderOptionsInit(&enc_options); + enc = WebPAnimEncoderNew(w, h, &enc_options); + + for (i = 0; i < n; i++) { + /* Make a frame for each image. Convert the pix to RGBA with + * an opaque alpha layer, and put the raster data in the frame. */ + pix1 = pixaGetPix(pixa, i, L_CLONE); + pix2 = pixConvertTo32(pix1); + pixSetComponentArbitrary(pix2, L_ALPHA_CHANNEL, 255); + pixEndianByteSwap(pix2); + data = (l_uint8 *)pixGetData(pix2); + wpl = pixGetWpl(pix2); + WebPPictureInit(&frame); + frame.width = w; + frame.height = h; + WebPPictureImportRGBA(&frame, data, 4 * wpl); + pixDestroy(&pix1); + pixDestroy(&pix2); + + /* Add the frame data to the encoder, and clear its memory */ + WebPConfigInit(&config); + config.lossless = lossless; + config.quality = quality; + WebPAnimEncoderAdd(enc, &frame, duration * i, &config); + WebPPictureFree(&frame); + } + WebPAnimEncoderAdd(enc, NULL, duration * i, NULL); /* add a blank frame */ + WebPAnimEncoderAssemble(enc, &webp_data); /* encode the data */ + WebPAnimEncoderDelete(enc); + + /* Set the loopcount if requested. Note that when you make a mux, + * it imports the webp_data that was previously made, including + * the webp encoded images. Before you re-export that data using + * WebPMuxAssemble(), free the heap data in webp_data. There is an + * example for setting the loop count in the webp distribution; + * see gif2webp.c. */ + if (loopcount > 0) { + mux = WebPMuxCreate(&webp_data, 1); + if (!mux) { + L_ERROR("could not re-mux to add loop count\n", procName); + } else { + ret = WebPMuxGetAnimationParams(mux, &newparams); + if (ret != WEBP_MUX_OK) { + L_ERROR("failed to get loop count\n", procName); + } else { + newparams.loop_count = loopcount; + ret = WebPMuxSetAnimationParams(mux, &newparams); + if (ret != WEBP_MUX_OK) + L_ERROR("failed to set loop count\n", procName); + } + WebPDataClear(&webp_data); + WebPMuxAssemble(mux, &webp_data); + WebPMuxDelete(mux); + } + } + + *pencdata = (l_uint8 *)webp_data.bytes; + *pencsize = webp_data.size; + L_INFO("data size = %zu\n", procName, webp_data.size); + return 0; +} + + +/* --------------------------------------------*/ +#endif /* HAVE_LIBWEBP_ANIM */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/webpanimiostub.c b/3rdparty/hgOCR/leptonica/webpanimiostub.c new file mode 100644 index 00000000..10fa133c --- /dev/null +++ b/3rdparty/hgOCR/leptonica/webpanimiostub.c @@ -0,0 +1,71 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file webpanimiostub.c + *
+ *
+ *     Stubs for webpanimio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* -----------------------------------------------*/ +#if !HAVE_LIBWEBP_ANIM /* defined in environ.h */ +/* -----------------------------------------------*/ + +l_ok pixaWriteWebPAnim(const char *filename, PIXA *pixa, l_int32 loopcount, + l_int32 duration, l_int32 quality, l_int32 lossless) +{ + return ERROR_INT("function not present", "pixaWriteWebPAnim", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaWriteStreamWebPAnim(FILE *fp, PIXA *pixa, l_int32 loopcount, + l_int32 duration, l_int32 quality, + l_int32 lossless) +{ + return ERROR_INT("function not present", "pixaWriteStreamWebPAnim", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixaWriteMemWebPAnim(l_uint8 **pencdata, size_t *pencsize, PIXA *pixa, + l_int32 loopcount, l_int32 duration, + l_int32 quality, l_int32 lossless) +{ + return ERROR_INT("function not present", "pixaWriteMemWebPAnim", 1); +} + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBWEBP_ANIM */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/webpio.c b/3rdparty/hgOCR/leptonica/webpio.c new file mode 100644 index 00000000..8d00bed4 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/webpio.c @@ -0,0 +1,417 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file webpio.c + *
+ *
+ *    Reading WebP
+ *          PIX             *pixReadStreamWebP()
+ *          PIX             *pixReadMemWebP()
+ *
+ *    Reading WebP header
+ *          l_int32          readHeaderWebP()
+ *          l_int32          readHeaderMemWebP()
+ *
+ *    Writing WebP
+ *          l_int32          pixWriteWebP()  [ special top level ]
+ *          l_int32          pixWriteStreamWebP()
+ *          l_int32          pixWriteMemWebP()
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if HAVE_LIBWEBP /* defined in environ.h */ +/* --------------------------------------------*/ +#include "webp/decode.h" +#include "webp/encode.h" + +/*---------------------------------------------------------------------* + * Reading WebP * + *---------------------------------------------------------------------*/ +/*! + * \brief pixReadStreamWebP() + * + * \param[in] fp file stream corresponding to WebP image + * \return pix 32 bpp, or NULL on error + */ +PIX * +pixReadStreamWebP(FILE *fp) +{ +l_uint8 *filedata; +size_t filesize; +PIX *pix; + + PROCNAME("pixReadStreamWebP"); + + if (!fp) + return (PIX *)ERROR_PTR("fp not defined", procName, NULL); + + /* Read data from file and decode into Y,U,V arrays */ + rewind(fp); + if ((filedata = l_binaryReadStream(fp, &filesize)) == NULL) + return (PIX *)ERROR_PTR("filedata not read", procName, NULL); + + pix = pixReadMemWebP(filedata, filesize); + LEPT_FREE(filedata); + return pix; +} + + +/*! + * \brief pixReadMemWebP() + * + * \param[in] filedata webp compressed data in memory + * \param[in] filesize number of bytes in data + * \return pix 32 bpp, or NULL on error + * + *
+ * Notes:
+ *      (1) When the encoded data only has 3 channels (no alpha),
+ *          WebPDecodeRGBAInto() generates a raster of 32-bit pixels, with
+ *          the alpha channel set to opaque (255).
+ *      (2) We don't need to use the gnu runtime functions like fmemopen()
+ *          for redirecting data from a stream to memory, because
+ *          the webp library has been written with memory-to-memory
+ *          functions at the lowest level (which is good!).  And, in
+ *          any event, fmemopen() doesn't work with l_binaryReadStream().
+ * 
+ */ +PIX * +pixReadMemWebP(const l_uint8 *filedata, + size_t filesize) +{ +l_uint8 *out = NULL; +l_int32 w, h, has_alpha, wpl, stride; +l_uint32 *data; +size_t size; +PIX *pix; +WebPBitstreamFeatures features; + + PROCNAME("pixReadMemWebP"); + + if (!filedata) + return (PIX *)ERROR_PTR("filedata not defined", procName, NULL); + + if (WebPGetFeatures(filedata, filesize, &features)) + return (PIX *)ERROR_PTR("Invalid WebP file", procName, NULL); + w = features.width; + h = features.height; + has_alpha = features.has_alpha; + + /* Write from compressed Y,U,V arrays to pix raster data */ + pix = pixCreate(w, h, 32); + pixSetInputFormat(pix, IFF_WEBP); + if (has_alpha) pixSetSpp(pix, 4); + data = pixGetData(pix); + wpl = pixGetWpl(pix); + stride = wpl * 4; + size = (size_t)stride * h; + out = WebPDecodeRGBAInto(filedata, filesize, (uint8_t *)data, size, + stride); + if (out == NULL) { /* error: out should also point to data */ + pixDestroy(&pix); + return (PIX *)ERROR_PTR("WebP decode failed", procName, NULL); + } + + /* The WebP API expects data in RGBA order. The pix stores + * in host-dependent order with R as the MSB and A as the LSB. + * On little-endian machines, the bytes in the word must + * be swapped; e.g., R goes from byte 0 (LSB) to byte 3 (MSB). + * No swapping is necessary for big-endians. */ + pixEndianByteSwap(pix); + return pix; +} + + +/*! + * \brief readHeaderWebP() + * + * \param[in] filename + * \param[out] pw width + * \param[out] ph height + * \param[out] pspp spp (3 or 4) + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderWebP(const char *filename, + l_int32 *pw, + l_int32 *ph, + l_int32 *pspp) +{ +l_uint8 data[100]; /* expect size info within the first 50 bytes or so */ +l_int32 nbytes, bytesread; +size_t filesize; +FILE *fp; + + PROCNAME("readHeaderWebP"); + + if (!pw || !ph || !pspp) + return ERROR_INT("input ptr(s) not defined", procName, 1); + *pw = *ph = *pspp = 0; + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + /* Read no more than 100 bytes from the file */ + if ((filesize = nbytesInFile(filename)) == 0) + return ERROR_INT("no file size found", procName, 1); + if (filesize < 100) + L_WARNING("very small webp file\n", procName); + nbytes = L_MIN(filesize, 100); + if ((fp = fopenReadStream(filename)) == NULL) + return ERROR_INT("image file not found", procName, 1); + bytesread = fread(data, 1, nbytes, fp); + fclose(fp); + if (bytesread != nbytes) + return ERROR_INT("failed to read requested data", procName, 1); + + return readHeaderMemWebP(data, nbytes, pw, ph, pspp); +} + + +/*! + * \brief readHeaderMemWebP() + * + * \param[in] data + * \param[in] size 100 bytes is sufficient + * \param[out] pw width + * \param[out] ph height + * \param[out] pspp spp (3 or 4) + * \return 0 if OK, 1 on error + */ +l_ok +readHeaderMemWebP(const l_uint8 *data, + size_t size, + l_int32 *pw, + l_int32 *ph, + l_int32 *pspp) +{ +WebPBitstreamFeatures features; + + PROCNAME("readHeaderWebP"); + + if (pw) *pw = 0; + if (ph) *ph = 0; + if (pspp) *pspp = 0; + if (!data) + return ERROR_INT("data not defined", procName, 1); + if (!pw || !ph || !pspp) + return ERROR_INT("input ptr(s) not defined", procName, 1); + + if (WebPGetFeatures(data, (l_int32)size, &features)) + return ERROR_INT("invalid WebP file", procName, 1); + *pw = features.width; + *ph = features.height; + *pspp = (features.has_alpha) ? 4 : 3; + return 0; +} + + +/*---------------------------------------------------------------------* + * Writing WebP * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteWebP() + * + * \param[in] filename + * \param[in] pixs + * \param[in] quality 0 - 100; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Special top-level function allowing specification of quality.
+ * 
+ */ +l_ok +pixWriteWebP(const char *filename, + PIX *pixs, + l_int32 quality, + l_int32 lossless) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixWriteWebP"); + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if ((fp = fopenWriteStream(filename, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + ret = pixWriteStreamWebP(fp, pixs, quality, lossless); + fclose(fp); + if (ret) + return ERROR_INT("pixs not compressed to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteStreampWebP() + * + * \param[in] fp file stream + * \param[in] pixs all depths + * \param[in] quality 0 - 100; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) See pixWriteMemWebP() for details.
+ *      (2) Use 'free', and not leptonica's 'LEPT_FREE', for all heap data
+ *          that is returned from the WebP library.
+ * 
+ */ +l_ok +pixWriteStreamWebP(FILE *fp, + PIX *pixs, + l_int32 quality, + l_int32 lossless) +{ +l_uint8 *filedata; +size_t filebytes, nbytes; + + PROCNAME("pixWriteStreamWebP"); + + if (!fp) + return ERROR_INT("stream not open", procName, 1); + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + + pixSetPadBits(pixs, 0); + pixWriteMemWebP(&filedata, &filebytes, pixs, quality, lossless); + rewind(fp); + nbytes = fwrite(filedata, 1, filebytes, fp); + free(filedata); + if (nbytes != filebytes) + return ERROR_INT("Write error", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteMemWebP() + * + * \param[out] pencdata webp encoded data of pixs + * \param[out] pencsize size of webp encoded data + * \param[in] pixs any depth, cmapped OK + * \param[in] quality 0 - 100; default ~80 + * \param[in] lossless use 1 for lossless; 0 for lossy + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) Lossless and lossy encoding are entirely different in webp.
+ *          %quality applies to lossy, and is ignored for lossless.
+ *      (2) The input image is converted to RGB if necessary.  If spp == 3,
+ *          we set the alpha channel to fully opaque (255), and
+ *          WebPEncodeRGBA() then removes the alpha chunk when encoding,
+ *          setting the internal header field has_alpha to 0.
+ * 
+ */ +l_ok +pixWriteMemWebP(l_uint8 **pencdata, + size_t *pencsize, + PIX *pixs, + l_int32 quality, + l_int32 lossless) +{ +l_int32 w, h, d, wpl, stride; +l_uint32 *data; +PIX *pix1, *pix2; + + PROCNAME("pixWriteMemWebP"); + + if (!pencdata) + return ERROR_INT("&encdata not defined", procName, 1); + *pencdata = NULL; + if (!pencsize) + return ERROR_INT("&encsize not defined", procName, 1); + *pencsize = 0; + if (!pixs) + return ERROR_INT("&pixs not defined", procName, 1); + if (lossless == 0 && (quality < 0 || quality > 100)) + return ERROR_INT("quality not in [0 ... 100]", procName, 1); + + if ((pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR)) == NULL) + return ERROR_INT("failure to remove color map", procName, 1); + + /* Convert to rgb if not 32 bpp; pix2 must not be a clone of pixs. */ + if (pixGetDepth(pix1) != 32) + pix2 = pixConvertTo32(pix1); + else + pix2 = pixCopy(NULL, pix1); + pixDestroy(&pix1); + pixGetDimensions(pix2, &w, &h, &d); + if (w <= 0 || h <= 0 || d != 32) { + pixDestroy(&pix2); + return ERROR_INT("pix2 not 32 bpp or of 0 size", procName, 1); + } + + /* If spp == 3, need to set alpha layer to opaque (all 1s). */ + if (pixGetSpp(pix2) == 3) + pixSetComponentArbitrary(pix2, L_ALPHA_CHANNEL, 255); + + /* The WebP API expects data in RGBA order. The pix stores + * in host-dependent order with R as the MSB and A as the LSB. + * On little-endian machines, the bytes in the word must + * be swapped; e.g., R goes from byte 0 (LSB) to byte 3 (MSB). + * No swapping is necessary for big-endians. */ + pixEndianByteSwap(pix2); + wpl = pixGetWpl(pix2); + data = pixGetData(pix2); + stride = wpl * 4; + if (lossless) { + *pencsize = WebPEncodeLosslessRGBA((uint8_t *)data, w, h, + stride, pencdata); + } else { + *pencsize = WebPEncodeRGBA((uint8_t *)data, w, h, stride, + quality, pencdata); + } + pixDestroy(&pix2); + + if (*pencsize == 0) { + free(*pencdata); + *pencdata = NULL; + return ERROR_INT("webp encoding failed", procName, 1); + } + + return 0; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBWEBP */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/webpiostub.c b/3rdparty/hgOCR/leptonica/webpiostub.c new file mode 100644 index 00000000..1730f2f0 --- /dev/null +++ b/3rdparty/hgOCR/leptonica/webpiostub.c @@ -0,0 +1,99 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file webpiostub.c + *
+ *
+ *     Stubs for webpio.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBWEBP /* defined in environ.h */ +/* --------------------------------------------*/ + +PIX * pixReadStreamWebP(FILE *fp) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadStreamWebP", NULL); +} + +/* ----------------------------------------------------------------------*/ + +PIX * pixReadMemWebP(const l_uint8 *filedata, size_t filesize) +{ + return (PIX * )ERROR_PTR("function not present", "pixReadMemWebP", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderWebP(const char *filename, l_int32 *pw, l_int32 *ph, + l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderWebP", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok readHeaderMemWebP(const l_uint8 *data, size_t size, + l_int32 *pw, l_int32 *ph, l_int32 *pspp) +{ + return ERROR_INT("function not present", "readHeaderMemWebP", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteWebP(const char *filename, PIX *pixs, l_int32 quality, + l_int32 lossless) +{ + return ERROR_INT("function not present", "pixWriteWebP", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, + l_int32 lossless) +{ + return ERROR_INT("function not present", "pixWriteStreamWebP", 1); +} + +/* ----------------------------------------------------------------------*/ + +l_ok pixWriteMemWebP(l_uint8 **pencdata, size_t *pencsize, PIX *pixs, + l_int32 quality, l_int32 lossless) +{ + return ERROR_INT("function not present", "pixWriteMemWebP", 1); +} + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBWEBP */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/writefile.c b/3rdparty/hgOCR/leptonica/writefile.c new file mode 100644 index 00000000..a1a01ada --- /dev/null +++ b/3rdparty/hgOCR/leptonica/writefile.c @@ -0,0 +1,1409 @@ +/*====================================================================* + - Copyright (C) 2001-2016 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * writefile.c + * + * Set jpeg quality for pixWrite() and pixWriteMem() + * l_int32 l_jpegSetQuality() + * + * Set global variable LeptDebugOK for writing to named temp files + * l_int32 setLeptDebugOK() + * + * High-level procedures for writing images to file: + * l_int32 pixaWriteFiles() + * l_int32 pixWriteDebug() + * l_int32 pixWrite() + * l_int32 pixWriteAutoFormat() + * l_int32 pixWriteStream() + * l_int32 pixWriteImpliedFormat() + * + * Selection of output format if default is requested + * l_int32 pixChooseOutputFormat() + * l_int32 getImpliedFileFormat() + * l_int32 pixGetAutoFormat() + * const char *getFormatExtension() + * + * Write to memory + * l_int32 pixWriteMem() + * + * Image display for debugging + * l_int32 l_fileDisplay() + * l_int32 pixDisplay() + * l_int32 pixDisplayWithTitle() + * l_int32 pixSaveTiled() + * l_int32 pixSaveTiledOutline() + * l_int32 pixSaveTiledWithText() + * void l_chooseDisplayProg() + * + * Deprecated pix output for debugging (still used in tesseract 3.05) + * l_int32 pixDisplayWrite() + * + * Supported file formats: + * (1) Writing is supported without any external libraries: + * bmp + * pnm (including pbm, pgm, etc) + * spix (raw serialized) + * (2) Writing is supported with installation of external libraries: + * png + * jpg (standard jfif version) + * tiff (including most varieties of compression) + * gif + * webp + * jp2 (jpeg2000) + * (3) Writing is supported through special interfaces: + * ps (PostScript, in psio1.c, psio2.c): + * level 1 (uncompressed) + * level 2 (g4 and dct encoding: requires tiff, jpg) + * level 3 (g4, dct and flate encoding: requires tiff, jpg, zlib) + * pdf (PDF, in pdfio.c): + * level 1 (g4 and dct encoding: requires tiff, jpg) + * level 2 (g4, dct and flate encoding: requires tiff, jpg, zlib) + */ + +#include +#include "allheaders.h" + + /* Display program (xv, xli, xzgv, open) to be invoked by pixDisplay() */ +#ifdef _WIN32 +static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_IV; /* default */ +#elif defined(__APPLE__) +static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_OPEN; /* default */ +#else +static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_XZGV; /* default */ +#endif /* _WIN32 */ + +//static const l_int32 Bufsize = 512; +#define Bufsize 512 +static const l_int32 MaxDisplayWidth = 1000; +static const l_int32 MaxDisplayHeight = 800; +static const l_int32 MaxSizeForPng = 200; + + /* PostScript output for printing */ +static const l_float32 DefaultScaling = 1.0; + + /* Global array of image file format extension names. */ + /* This is in 1-1 corrspondence with format enum in imageio.h. */ + /* The empty string at the end represents the serialized format, */ + /* which has no recognizable extension name, but the array must */ + /* be padded to agree with the format enum. */ + /* (Note on 'const': The size of the array can't be defined 'const' */ + /* because that makes it static. The 'const' in the definition of */ + /* the array refers to the strings in the array; the ptr to the */ + /* array is not const and can be used 'extern' in other files.) */ +LEPT_DLL l_int32 NumImageFileFormatExtensions = 20; /* array size */ +LEPT_DLL const char *ImageFileFormatExtensions[] = + {"unknown", + "bmp", + "jpg", + "png", + "tif", + "tif", + "tif", + "tif", + "tif", + "tif", + "tif", + "pnm", + "ps", + "gif", + "jp2", + "webp", + "pdf", + "tif", + "default", + ""}; + + /* Local map of image file name extension to output format */ +struct ExtensionMap +{ + char extension[8]; + l_int32 format; +}; +static const struct ExtensionMap extension_map[] = + { { ".bmp", IFF_BMP }, + { ".jpg", IFF_JFIF_JPEG }, + { ".jpeg", IFF_JFIF_JPEG }, + { ".png", IFF_PNG }, + { ".tif", IFF_TIFF }, + { ".tiff", IFF_TIFF }, + { ".pnm", IFF_PNM }, + { ".gif", IFF_GIF }, + { ".jp2", IFF_JP2 }, + { ".ps", IFF_PS }, + { ".pdf", IFF_LPDF }, + { ".webp", IFF_WEBP } }; + + +/*---------------------------------------------------------------------* + * Set jpeg quality for pixWrite() and pixWriteMem() * + *---------------------------------------------------------------------*/ + /* Parameter that controls jpeg quality for high-level calls. */ +static l_int32 var_JPEG_QUALITY = 75; /* default */ + +/*! + * \brief l_jpegSetQuality() + * + * \param[in] new_quality 1 - 100; 75 is default; 0 defaults to 75 + * \return prev previous quality + * + *
+ * Notes:
+ *      (1) This variable is used in pixWriteStream() and pixWriteMem(),
+ *          to control the jpeg quality.  The default is 75.
+ *      (2) It returns the previous quality, so for example:
+ *           l_int32  prev = l_jpegSetQuality(85);  //sets to 85
+ *           pixWriteStream(...);
+ *           l_jpegSetQuality(prev);   // resets to previous value
+ *      (3) On error, logs a message and does not change the variable.
+ */
+l_int32
+l_jpegSetQuality(l_int32  new_quality)
+{
+l_int32  prevq, newq;
+
+    PROCNAME("l_jpeqSetQuality");
+
+    prevq = var_JPEG_QUALITY;
+    newq = (new_quality == 0) ? 75 : new_quality;
+    if (newq < 1 || newq > 100)
+        L_ERROR("invalid jpeg quality; unchanged\n", procName);
+    else
+        var_JPEG_QUALITY = newq;
+    return prevq;
+}
+
+
+/*----------------------------------------------------------------------*
+ *    Set global variable LeptDebugOK for writing to named temp files   *
+ *----------------------------------------------------------------------*/
+l_int32 LeptDebugOK = 0;  /* default value */
+/*!
+ * \brief   setLeptDebugOK()
+ *
+ * \param[in]    allow     TRUE (1) or FALSE (0)
+ * \return       void
+ *
+ * 
+ * Notes:
+ *      (1) This sets or clears the global variable LeptDebugOK, to
+ *          control writing files in a temp directory with names that
+ *          are compiled in.
+ *      (2) The default in the library distribution is 0.  Call with
+ *          %allow = 1 for development and debugging.
+ */
+void
+setLeptDebugOK(l_int32  allow)
+{
+    if (allow != 0) allow = 1;
+    LeptDebugOK = allow;
+}
+
+
+/*---------------------------------------------------------------------*
+ *           Top-level procedures for writing images to file           *
+ *---------------------------------------------------------------------*/
+/*!
+ * \brief   pixaWriteFiles()
+ *
+ * \param[in]    rootname
+ * \param[in]    pixa
+ * \param[in]    format  defined in imageio.h; see notes for default
+ * \return  0 if OK; 1 on error
+ *
+ * 
+ * Notes:
+ *      (1) Use %format = IFF_DEFAULT to decide the output format
+ *          individually for each pix.
+ * 
+ */ +l_ok +pixaWriteFiles(const char *rootname, + PIXA *pixa, + l_int32 format) +{ +char bigbuf[Bufsize]; +l_int32 i, n, pixformat; +PIX *pix; + + PROCNAME("pixaWriteFiles"); + + if (!rootname) + return ERROR_INT("rootname not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + if (format < 0 || format == IFF_UNKNOWN || + format >= NumImageFileFormatExtensions) + return ERROR_INT("invalid format", procName, 1); + + n = pixaGetCount(pixa); + for (i = 0; i < n; i++) { + pix = pixaGetPix(pixa, i, L_CLONE); + if (format == IFF_DEFAULT) + pixformat = pixChooseOutputFormat(pix); + else + pixformat = format; + snprintf(bigbuf, Bufsize, "%s%03d.%s", rootname, i, + ImageFileFormatExtensions[pixformat]); + pixWrite(bigbuf, pix, pixformat); + pixDestroy(&pix); + } + + return 0; +} + + +/*! + * \brief pixWriteDebug() + * + * \param[in] fname + * \param[in] pix + * \param[in] format defined in imageio.h + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Debug version, intended for use in the library when writing
+ *          to files in a temp directory with names that are compiled in.
+ *          This is used instead of pixWrite() for all such library calls.
+ *      (2) The global variable LeptDebugOK defaults to 0, and can be set
+ *          or cleared by the function setLeptDebugOK().
+ * 
+ */ +l_ok +pixWriteDebug(const char *fname, + PIX *pix, + l_int32 format) +{ + PROCNAME("pixWriteDebug"); + + if (LeptDebugOK) { + return pixWrite(fname, pix, format); + } else { + L_INFO("write to named temp file %s is disabled\n", procName, fname); + return 0; + } +} + + +/*! + * \brief pixWrite() + * + * \param[in] fname + * \param[in] pix + * \param[in] format defined in imageio.h + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) Open for write using binary mode (with the "b" flag)
+ *          to avoid having Windows automatically translate the NL
+ *          into CRLF, which corrupts image files.  On non-windows
+ *          systems this flag should be ignored, per ISO C90.
+ *          Thanks to Dave Bryan for pointing this out.
+ *      (2) If the default image format IFF_DEFAULT is requested:
+ *          use the input format if known; otherwise, use a lossless format.
+ *      (3) The default jpeg quality is 75.  For some other value,
+ *          Use l_jpegSetQuality().
+ * 
+ */ +l_ok +pixWrite(const char *fname, + PIX *pix, + l_int32 format) +{ +l_int32 ret; +FILE *fp; + + PROCNAME("pixWrite"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!fname) + return ERROR_INT("fname not defined", procName, 1); + + if ((fp = fopenWriteStream(fname, "wb+")) == NULL) + return ERROR_INT("stream not opened", procName, 1); + + ret = pixWriteStream(fp, pix, format); + fclose(fp); + if (ret) + return ERROR_INT("pix not written to stream", procName, 1); + return 0; +} + + +/*! + * \brief pixWriteAutoFormat() + * + * \param[in] filename + * \param[in] pix + * \return 0 if OK; 1 on error + */ +l_ok +pixWriteAutoFormat(const char *filename, + PIX *pix) +{ +l_int32 format; + + PROCNAME("pixWriteAutoFormat"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + + if (pixGetAutoFormat(pix, &format)) + return ERROR_INT("auto format not returned", procName, 1); + return pixWrite(filename, pix, format); +} + + +/*! + * \brief pixWriteStream() + * + * \param[in] fp file stream + * \param[in] pix + * \param[in] format + * \return 0 if OK; 1 on error. + */ +l_ok +pixWriteStream(FILE *fp, + PIX *pix, + l_int32 format) +{ + PROCNAME("pixWriteStream"); + + if (!fp) + return ERROR_INT("stream not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + if (format == IFF_DEFAULT) + format = pixChooseOutputFormat(pix); + + switch(format) + { + case IFF_BMP: + pixWriteStreamBmp(fp, pix); + break; + + case IFF_JFIF_JPEG: /* default quality; baseline sequential */ + return pixWriteStreamJpeg(fp, pix, var_JPEG_QUALITY, 0); + break; + + case IFF_PNG: /* no gamma value stored */ + return pixWriteStreamPng(fp, pix, 0.0); + break; + + case IFF_TIFF: /* uncompressed */ + case IFF_TIFF_PACKBITS: /* compressed, binary only */ + case IFF_TIFF_RLE: /* compressed, binary only */ + case IFF_TIFF_G3: /* compressed, binary only */ + case IFF_TIFF_G4: /* compressed, binary only */ + case IFF_TIFF_LZW: /* compressed, all depths */ + case IFF_TIFF_ZIP: /* compressed, all depths */ + case IFF_TIFF_JPEG: /* compressed, 8 bpp gray and 32 bpp rgb */ + return pixWriteStreamTiff(fp, pix, format); + break; + + case IFF_PNM: + return pixWriteStreamPnm(fp, pix); + break; + + case IFF_PS: + return pixWriteStreamPS(fp, pix, NULL, 0, DefaultScaling); + break; + + case IFF_GIF: + return pixWriteStreamGif(fp, pix); + break; + + case IFF_JP2: + return pixWriteStreamJp2k(fp, pix, 34, 4, 0, 0); + break; + + case IFF_WEBP: + return pixWriteStreamWebP(fp, pix, 80, 0); + break; + + case IFF_LPDF: + return pixWriteStreamPdf(fp, pix, 0, NULL); + break; + + case IFF_SPIX: + return pixWriteStreamSpix(fp, pix); + break; + + default: + return ERROR_INT("unknown format", procName, 1); + break; + } + + return 0; +} + + +/*! + * \brief pixWriteImpliedFormat() + * + * \param[in] filename + * \param[in] pix + * \param[in] quality iff JPEG; 1 - 100, 0 for default + * \param[in] progressive iff JPEG; 0 for baseline seq., 1 for progressive + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This determines the output format from the filename extension.
+ *      (2) The last two args are ignored except for requests for jpeg files.
+ *      (3) The jpeg default quality is 75.
+ * 
+ */ +l_ok +pixWriteImpliedFormat(const char *filename, + PIX *pix, + l_int32 quality, + l_int32 progressive) +{ +l_int32 format; + + PROCNAME("pixWriteImpliedFormat"); + + if (!filename) + return ERROR_INT("filename not defined", procName, 1); + if (!pix) + return ERROR_INT("pix not defined", procName, 1); + + /* Determine output format */ + format = getImpliedFileFormat(filename); + if (format == IFF_UNKNOWN) { + format = IFF_PNG; + } else if (format == IFF_TIFF) { + if (pixGetDepth(pix) == 1) + format = IFF_TIFF_G4; + else +#ifdef _WIN32 + format = IFF_TIFF_LZW; /* poor compression */ +#else + format = IFF_TIFF_ZIP; /* native windows tools can't handle this */ +#endif /* _WIN32 */ + } + + if (format == IFF_JFIF_JPEG) { + quality = L_MIN(quality, 100); + quality = L_MAX(quality, 0); + if (progressive != 0 && progressive != 1) { + progressive = 0; + L_WARNING("invalid progressive; setting to baseline\n", procName); + } + if (quality == 0) + quality = 75; + pixWriteJpeg (filename, pix, quality, progressive); + } else { + pixWrite(filename, pix, format); + } + + return 0; +} + + +/*---------------------------------------------------------------------* + * Selection of output format if default is requested * + *---------------------------------------------------------------------*/ +/*! + * \brief pixChooseOutputFormat() + * + * \param[in] pix + * \return output format, or 0 on error + * + *
+ * Notes:
+ *      (1) This should only be called if the requested format is IFF_DEFAULT.
+ *      (2) If the pix wasn't read from a file, its input format value
+ *          will be IFF_UNKNOWN, and in that case it is written out
+ *          in a compressed but lossless format.
+ * 
+ */ +l_int32 +pixChooseOutputFormat(PIX *pix) +{ +l_int32 d, format; + + PROCNAME("pixChooseOutputFormat"); + + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + d = pixGetDepth(pix); + format = pixGetInputFormat(pix); + if (format == IFF_UNKNOWN) { /* output lossless */ + if (d == 1) + format = IFF_TIFF_G4; + else + format = IFF_PNG; + } + + return format; +} + + +/*! + * \brief getImpliedFileFormat() + * + * \param[in] filename + * \return output format, or IFF_UNKNOWN on error or invalid extension. + * + *
+ * Notes:
+ *      (1) This determines the output file format from the extension
+ *          of the input filename.
+ * 
+ */ +l_int32 +getImpliedFileFormat(const char *filename) +{ +char *extension; +int i, numext; +l_int32 format = IFF_UNKNOWN; + + if (splitPathAtExtension (filename, NULL, &extension)) + return IFF_UNKNOWN; + + numext = sizeof(extension_map) / sizeof(extension_map[0]); + for (i = 0; i < numext; i++) { + if (!strcmp(extension, extension_map[i].extension)) { + format = extension_map[i].format; + break; + } + } + + LEPT_FREE(extension); + return format; +} + + +/*! + * \brief pixGetAutoFormat() + * + * \param[in] pix + * \param[in] &format + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) The output formats are restricted to tiff, jpeg and png
+ *          because these are the most commonly used image formats and
+ *          the ones that are typically installed with leptonica.
+ *      (2) This decides what compression to use based on the pix.
+ *          It chooses tiff-g4 if 1 bpp without a colormap, jpeg with
+ *          quality 75 if grayscale, rgb or rgba (where it loses
+ *          the alpha layer), and lossless png for all other situations.
+ * 
+ */ +l_ok +pixGetAutoFormat(PIX *pix, + l_int32 *pformat) +{ +l_int32 d; +PIXCMAP *cmap; + + PROCNAME("pixGetAutoFormat"); + + if (!pformat) + return ERROR_INT("&format not defined", procName, 0); + *pformat = IFF_UNKNOWN; + if (!pix) + return ERROR_INT("pix not defined", procName, 0); + + d = pixGetDepth(pix); + cmap = pixGetColormap(pix); + if (d == 1 && !cmap) { + *pformat = IFF_TIFF_G4; + } else if ((d == 8 && !cmap) || d == 24 || d == 32) { + *pformat = IFF_JFIF_JPEG; + } else { + *pformat = IFF_PNG; + } + + return 0; +} + + +/*! + * \brief getFormatExtension() + * + * \param[in] format integer + * \return extension string, or NULL if format is out of range + * + *
+ * Notes:
+ *      (1) This string is NOT owned by the caller; it is just a pointer
+ *          to a global string.  Do not free it.
+ * 
+ */ +const char * +getFormatExtension(l_int32 format) +{ + PROCNAME("getFormatExtension"); + + if (format < 0 || format >= NumImageFileFormatExtensions) + return (const char *)ERROR_PTR("invalid format", procName, NULL); + + return ImageFileFormatExtensions[format]; +} + + +/*---------------------------------------------------------------------* + * Write to memory * + *---------------------------------------------------------------------*/ +/*! + * \brief pixWriteMem() + * + * \param[out] pdata data of tiff compressed image + * \param[out] psize size of returned data + * \param[in] pix + * \param[in] format defined in imageio.h + * \return 0 if OK, 1 on error + * + *
+ * Notes:
+ *      (1) On windows, this will only write tiff and PostScript to memory.
+ *          For other formats, it requires open_memstream(3).
+ *      (2) PostScript output is uncompressed, in hex ascii.
+ *          Most printers support level 2 compression (tiff_g4 for 1 bpp,
+ *          jpeg for 8 and 32 bpp).
+ *      (3) The default jpeg quality is 75.  For some other value,
+ *          Use l_jpegSetQuality().
+ * 
+ */ +l_ok +pixWriteMem(l_uint8 **pdata, + size_t *psize, + PIX *pix, + l_int32 format) +{ +l_int32 ret; + + PROCNAME("pixWriteMem"); + + if (!pdata) + return ERROR_INT("&data not defined", procName, 1 ); + if (!psize) + return ERROR_INT("&size not defined", procName, 1 ); + if (!pix) + return ERROR_INT("&pix not defined", procName, 1 ); + + if (format == IFF_DEFAULT) + format = pixChooseOutputFormat(pix); + + switch(format) + { + case IFF_BMP: + ret = pixWriteMemBmp(pdata, psize, pix); + break; + + case IFF_JFIF_JPEG: /* default quality; baseline sequential */ + ret = pixWriteMemJpeg(pdata, psize, pix, var_JPEG_QUALITY, 0); + break; + + case IFF_PNG: /* no gamma value stored */ + ret = pixWriteMemPng(pdata, psize, pix, 0.0); + break; + + case IFF_TIFF: /* uncompressed */ + case IFF_TIFF_PACKBITS: /* compressed, binary only */ + case IFF_TIFF_RLE: /* compressed, binary only */ + case IFF_TIFF_G3: /* compressed, binary only */ + case IFF_TIFF_G4: /* compressed, binary only */ + case IFF_TIFF_LZW: /* compressed, all depths */ + case IFF_TIFF_ZIP: /* compressed, all depths */ + ret = pixWriteMemTiff(pdata, psize, pix, format); + break; + + case IFF_PNM: + ret = pixWriteMemPnm(pdata, psize, pix); + break; + + case IFF_PS: + ret = pixWriteMemPS(pdata, psize, pix, NULL, 0, DefaultScaling); + break; + + case IFF_GIF: + ret = pixWriteMemGif(pdata, psize, pix); + break; + + case IFF_JP2: + ret = pixWriteMemJp2k(pdata, psize, pix, 34, 0, 0, 0); + break; + + case IFF_WEBP: + ret = pixWriteMemWebP(pdata, psize, pix, 80, 0); + break; + + case IFF_LPDF: + ret = pixWriteMemPdf(pdata, psize, pix, 0, NULL); + break; + + case IFF_SPIX: + ret = pixWriteMemSpix(pdata, psize, pix); + break; + + default: + return ERROR_INT("unknown format", procName, 1); + break; + } + + return ret; +} + + +/*---------------------------------------------------------------------* + * Image display for debugging * + *---------------------------------------------------------------------*/ +/*! + * \brief l_fileDisplay() + * + * \param[in] fname + * \param[in] x, y location of display frame on the screen + * \param[in] scale scale factor (use 0 to skip display) + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is a convenient wrapper for displaying image files.
+ *      (2) It does nothing unless LeptDebugOK == TRUE.
+ *      (2) Set %scale = 0 to disable display.
+ *      (3) This downscales 1 bpp to gray.
+ * 
+ */ +l_ok +l_fileDisplay(const char *fname, + l_int32 x, + l_int32 y, + l_float32 scale) +{ +PIX *pixs, *pixd; + + PROCNAME("l_fileDisplay"); + + if (!LeptDebugOK) { + L_INFO("displaying files is disabled; " + "use setLeptDebugOK(1) to enable\n", procName); + return 0; + } + if (scale == 0.0) + return 0; + if (scale < 0.0) + return ERROR_INT("invalid scale factor", procName, 1); + if ((pixs = pixRead(fname)) == NULL) + return ERROR_INT("pixs not read", procName, 1); + + if (scale == 1.0) { + pixd = pixClone(pixs); + } else { + if (scale < 1.0 && pixGetDepth(pixs) == 1) + pixd = pixScaleToGray(pixs, scale); + else + pixd = pixScale(pixs, scale, scale); + } + pixDisplay(pixd, x, y); + pixDestroy(&pixs); + pixDestroy(&pixd); + return 0; +} + + +/*! + * \brief pixDisplay() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] x, y location of display frame on the screen + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) This is debugging code that displays an image on the screen.
+ *          It uses a static internal variable to number the output files
+ *          written by a single process.  Behavior with a shared library
+ *          may be unpredictable.
+ *      (2) It does nothing unless LeptDebugOK == TRUE.
+ *      (3) It uses these programs to display the image:
+ *             On Unix: xzgv, xli or xv
+ *             On Windows: i_view
+ *          The display program must be on your $PATH variable.  It is
+ *          chosen by setting the global var_DISPLAY_PROG, using
+ *          l_chooseDisplayProg().  Default on Unix is xzgv.
+ *      (4) Images with dimensions larger than MaxDisplayWidth or
+ *          MaxDisplayHeight are downscaled to fit those constraints.
+ *          This is particularly important for displaying 1 bpp images
+ *          with xv, because xv automatically downscales large images
+ *          by subsampling, which looks poor.  For 1 bpp, we use
+ *          scale-to-gray to get decent-looking anti-aliased images.
+ *          In all cases, we write a temporary file to /tmp/lept/disp,
+ *          that is read by the display program.
+ *      (5) The temporary file is written as png if, after initial
+ *          processing for special cases, any of these obtain:
+ *            * pix dimensions are smaller than some thresholds
+ *            * pix depth is less than 8 bpp
+ *            * pix is colormapped
+ *      (6) For spp == 4, we call pixDisplayLayersRGBA() to show 3
+ *          versions of the image: the image with a fully opaque
+ *          alpha, the alpha, and the image as it would appear with
+ *          a white background.
+ * 
+ */ +l_ok +pixDisplay(PIX *pixs, + l_int32 x, + l_int32 y) +{ + return pixDisplayWithTitle(pixs, x, y, NULL, 1); +} + + +/*! + * \brief pixDisplayWithTitle() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] x, y location of display frame + * \param[in] title [optional] on frame; can be NULL; + * \param[in] dispflag 1 to write, else disabled + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (1) See notes for pixDisplay().
+ *      (2) This displays the image if dispflag == 1; otherwise it punts.
+ * 
+ */ +l_ok +pixDisplayWithTitle(PIX *pixs, + l_int32 x, + l_int32 y, + const char *title, + l_int32 dispflag) +{ +char *tempname; +char buffer[Bufsize]; +static l_int32 index = 0; /* caution: not .so or thread safe */ +l_int32 w, h, d, spp, maxheight, opaque, threeviews; +l_float32 ratw, rath, ratmin; +PIX *pix0, *pix1, *pix2; +PIXCMAP *cmap; +#ifndef _WIN32 +l_int32 wt, ht; +#else +char *pathname; +char fullpath[_MAX_PATH]; +#endif /* _WIN32 */ + + PROCNAME("pixDisplayWithTitle"); + + if (!LeptDebugOK) { + L_INFO("displaying images is disabled;\n " + "use setLeptDebugOK(1) to enable\n", procName); + return 0; + } + +#ifdef OS_IOS /* iOS 11 does not support system() */ + return ERROR_INT("iOS 11 does not support system()", procName, 1); +#endif /* OS_IOS */ + + if (dispflag != 1) return 0; + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (var_DISPLAY_PROG != L_DISPLAY_WITH_XZGV && + var_DISPLAY_PROG != L_DISPLAY_WITH_XLI && + var_DISPLAY_PROG != L_DISPLAY_WITH_XV && + var_DISPLAY_PROG != L_DISPLAY_WITH_IV && + var_DISPLAY_PROG != L_DISPLAY_WITH_OPEN) { + return ERROR_INT("no program chosen for display", procName, 1); + } + + /* Display with three views if either spp = 4 or if colormapped + * and the alpha component is not fully opaque */ + opaque = TRUE; + if ((cmap = pixGetColormap(pixs)) != NULL) + pixcmapIsOpaque(cmap, &opaque); + spp = pixGetSpp(pixs); + threeviews = (spp == 4 || !opaque) ? TRUE : FALSE; + + /* If colormapped and not opaque, remove the colormap to RGBA */ + if (!opaque) + pix0 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); + else + pix0 = pixClone(pixs); + + /* Scale if necessary; this will also remove a colormap */ + pixGetDimensions(pix0, &w, &h, &d); + maxheight = (threeviews) ? MaxDisplayHeight / 3 : MaxDisplayHeight; + if (w <= MaxDisplayWidth && h <= maxheight) { + if (d == 16) /* take MSB */ + pix1 = pixConvert16To8(pix0, L_MS_BYTE); + else + pix1 = pixClone(pix0); + } else { + ratw = (l_float32)MaxDisplayWidth / (l_float32)w; + rath = (l_float32)maxheight / (l_float32)h; + ratmin = L_MIN(ratw, rath); + if (ratmin < 0.125 && d == 1) + pix1 = pixScaleToGray8(pix0); + else if (ratmin < 0.25 && d == 1) + pix1 = pixScaleToGray4(pix0); + else if (ratmin < 0.33 && d == 1) + pix1 = pixScaleToGray3(pix0); + else if (ratmin < 0.5 && d == 1) + pix1 = pixScaleToGray2(pix0); + else + pix1 = pixScale(pix0, ratmin, ratmin); + } + pixDestroy(&pix0); + if (!pix1) + return ERROR_INT("pix1 not made", procName, 1); + + /* Generate the three views if required */ + if (threeviews) + pix2 = pixDisplayLayersRGBA(pix1, 0xffffff00, 0); + else + pix2 = pixClone(pix1); + + if (index == 0) { /* erase any existing images */ + lept_rmdir("lept/disp"); + lept_mkdir("lept/disp"); + } + + index++; + if (pixGetDepth(pix2) < 8 || pixGetColormap(pix2) || + (w < MaxSizeForPng && h < MaxSizeForPng)) { + snprintf(buffer, Bufsize, "/tmp/lept/disp/write.%03d.png", index); + pixWrite(buffer, pix2, IFF_PNG); + } else { + snprintf(buffer, Bufsize, "/tmp/lept/disp/write.%03d.jpg", index); + pixWrite(buffer, pix2, IFF_JFIF_JPEG); + } + tempname = genPathname(buffer, NULL); + +#ifndef _WIN32 + + /* Unix */ + if (var_DISPLAY_PROG == L_DISPLAY_WITH_XZGV) { + /* no way to display title */ + pixGetDimensions(pix2, &wt, &ht, NULL); + snprintf(buffer, Bufsize, + "xzgv --geometry %dx%d+%d+%d %s &", wt + 10, ht + 10, + x, y, tempname); + } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XLI) { + if (title) { + snprintf(buffer, Bufsize, + "xli -dispgamma 1.0 -quiet -geometry +%d+%d -title \"%s\" %s &", + x, y, title, tempname); + } else { + snprintf(buffer, Bufsize, + "xli -dispgamma 1.0 -quiet -geometry +%d+%d %s &", + x, y, tempname); + } + } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XV) { + if (title) { + snprintf(buffer, Bufsize, + "xv -quit -geometry +%d+%d -name \"%s\" %s &", + x, y, title, tempname); + } else { + snprintf(buffer, Bufsize, + "xv -quit -geometry +%d+%d %s &", x, y, tempname); + } + } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_OPEN) { + snprintf(buffer, Bufsize, "open %s &", tempname); + } + callSystemDebug(buffer); + +#else /* _WIN32 */ + + /* Windows: L_DISPLAY_WITH_IV */ + pathname = genPathname(tempname, NULL); + _fullpath(fullpath, pathname, sizeof(fullpath)); + if (title) { + snprintf(buffer, Bufsize, + "i_view32.exe \"%s\" /pos=(%d,%d) /title=\"%s\"", + fullpath, x, y, title); + } else { + snprintf(buffer, Bufsize, "i_view32.exe \"%s\" /pos=(%d,%d)", + fullpath, x, y); + } + callSystemDebug(buffer); + LEPT_FREE(pathname); + +#endif /* _WIN32 */ + + pixDestroy(&pix1); + pixDestroy(&pix2); + LEPT_FREE(tempname); + return 0; +} + + +/*! + * \brief pixSaveTiled() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp + * \param[in] pixa the pix are accumulated here + * \param[in] scalefactor 0.0 to disable; otherwise this is a scale factor + * \param[in] newrow 0 if placed on the same row as previous; 1 otherwise + * \param[in] space horizontal and vertical spacing, in pixels + * \param[in] dp depth of pixa; 8 or 32 bpp; only used on first call + * \return 0 if OK, 1 on error. + */ +l_ok +pixSaveTiled(PIX *pixs, + PIXA *pixa, + l_float32 scalefactor, + l_int32 newrow, + l_int32 space, + l_int32 dp) +{ + /* Save without an outline */ + return pixSaveTiledOutline(pixs, pixa, scalefactor, newrow, space, 0, dp); +} + + +/*! + * \brief pixSaveTiledOutline() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp + * \param[in] pixa the pix are accumulated here + * \param[in] scalefactor 0.0 to disable; otherwise this is a scale factor + * \param[in] newrow 0 if placed on the same row as previous; 1 otherwise + * \param[in] space horizontal and vertical spacing, in pixels + * \param[in] linewidth width of added outline for image; 0 for no outline + * \param[in] dp depth of pixa; 8 or 32 bpp; only used on first call + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) Before calling this function for the first time, use
+ *          pixaCreate() to make the %pixa that will accumulate the pix.
+ *          This is passed in each time pixSaveTiled() is called.
+ *      (2) %scalefactor scales the input image.  After scaling and
+ *          possible depth conversion, the image is saved in the input
+ *          pixa, along with a box that specifies the location to
+ *          place it when tiled later.  Disable saving the pix by
+ *          setting %scalefactor == 0.0.
+ *      (3) %newrow and %space specify the location of the new pix
+ *          with respect to the last one(s) that were entered.
+ *      (4) %dp specifies the depth at which all pix are saved.  It can
+ *          be only 8 or 32 bpp.  Any colormap is removed.  This is only
+ *          used at the first invocation.
+ *      (5) This function uses two variables from call to call.
+ *          If they were static, the function would not be .so or thread
+ *          safe, and furthermore, there would be interference with two or
+ *          more pixa accumulating images at a time.  Consequently,
+ *          we use the first pix in the pixa to store and obtain both
+ *          the depth and the current position of the bottom (one pixel
+ *          below the lowest image raster line when laid out using
+ *          the boxa).  The bottom variable is stored in the input format
+ *          field, which is the only field available for storing an int.
+ * 
+ */ +l_ok +pixSaveTiledOutline(PIX *pixs, + PIXA *pixa, + l_float32 scalefactor, + l_int32 newrow, + l_int32 space, + l_int32 linewidth, + l_int32 dp) +{ +l_int32 n, top, left, bx, by, bw, w, h, depth, bottom; +BOX *box; +PIX *pix1, *pix2, *pix3, *pix4; + + PROCNAME("pixSaveTiledOutline"); + + if (scalefactor == 0.0) return 0; + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + n = pixaGetCount(pixa); + if (n == 0) { + bottom = 0; + if (dp != 8 && dp != 32) { + L_WARNING("dp not 8 or 32 bpp; using 32\n", procName); + depth = 32; + } else { + depth = dp; + } + } else { /* extract the depth and bottom params from the first pix */ + pix1 = pixaGetPix(pixa, 0, L_CLONE); + depth = pixGetDepth(pix1); + bottom = pixGetInputFormat(pix1); /* not typical usage! */ + pixDestroy(&pix1); + } + + /* Remove colormap if it exists; otherwise a copy. This + * guarantees that pix4 is not a clone of pixs. */ + pix1 = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY); + + /* Scale and convert to output depth */ + if (scalefactor == 1.0) { + pix2 = pixClone(pix1); + } else if (scalefactor > 1.0) { + pix2 = pixScale(pix1, scalefactor, scalefactor); + } else { /* scalefactor < 1.0) */ + if (pixGetDepth(pix1) == 1) + pix2 = pixScaleToGray(pix1, scalefactor); + else + pix2 = pixScale(pix1, scalefactor, scalefactor); + } + pixDestroy(&pix1); + if (depth == 8) + pix3 = pixConvertTo8(pix2, 0); + else + pix3 = pixConvertTo32(pix2); + pixDestroy(&pix2); + + /* Add black outline */ + if (linewidth > 0) + pix4 = pixAddBorder(pix3, linewidth, 0); + else + pix4 = pixClone(pix3); + pixDestroy(&pix3); + + /* Find position of current pix (UL corner plus size) */ + if (n == 0) { + top = 0; + left = 0; + } else if (newrow == 1) { + top = bottom + space; + left = 0; + } else { /* n > 0 */ + pixaGetBoxGeometry(pixa, n - 1, &bx, &by, &bw, NULL); + top = by; + left = bx + bw + space; + } + + pixGetDimensions(pix4, &w, &h, NULL); + bottom = L_MAX(bottom, top + h); + box = boxCreate(left, top, w, h); + pixaAddPix(pixa, pix4, L_INSERT); + pixaAddBox(pixa, box, L_INSERT); + + /* Save the new bottom value */ + pix1 = pixaGetPix(pixa, 0, L_CLONE); + pixSetInputFormat(pix1, bottom); /* not typical usage! */ + pixDestroy(&pix1); + return 0; +} + + +/*! + * \brief pixSaveTiledWithText() + * + * \param[in] pixs 1, 2, 4, 8, 32 bpp + * \param[in] pixa the pix are accumulated here; as 32 bpp + * \param[in] outwidth in pixels; use 0 to disable entirely + * \param[in] newrow 1 to start a new row; 0 to go on same row as previous + * \param[in] space horizontal and vertical spacing, in pixels + * \param[in] linewidth width of added outline for image; 0 for no outline + * \param[in] bmf [optional] font struct + * \param[in] textstr [optional] text string to be added + * \param[in] val color to set the text + * \param[in] location L_ADD_ABOVE, L_ADD_AT_TOP, L_ADD_AT_BOT, L_ADD_BELOW + * \return 0 if OK, 1 on error. + * + *
+ * Notes:
+ *      (1) Before calling this function for the first time, use
+ *          pixaCreate() to make the %pixa that will accumulate the pix.
+ *          This is passed in each time pixSaveTiled() is called.
+ *      (2) %outwidth is the scaled width.  After scaling, the image is
+ *          saved in the input pixa, along with a box that specifies
+ *          the location to place it when tiled later.  Disable saving
+ *          the pix by setting %outwidth == 0.
+ *      (3) %newrow and %space specify the location of the new pix
+ *          with respect to the last one(s) that were entered.
+ *      (4) All pix are saved as 32 bpp RGB.
+ *      (5) If both %bmf and %textstr are defined, this generates a pix
+ *          with the additional text; otherwise, no text is written.
+ *      (6) The text is written before scaling, so it is properly
+ *          antialiased in the scaled pix.  However, if the pix on
+ *          different calls have different widths, the size of the
+ *          text will vary.
+ *      (7) See pixSaveTiledOutline() for other implementation details.
+ * 
+ */ +l_ok +pixSaveTiledWithText(PIX *pixs, + PIXA *pixa, + l_int32 outwidth, + l_int32 newrow, + l_int32 space, + l_int32 linewidth, + L_BMF *bmf, + const char *textstr, + l_uint32 val, + l_int32 location) +{ +PIX *pix1, *pix2, *pix3, *pix4; + + PROCNAME("pixSaveTiledWithText"); + + if (outwidth == 0) return 0; + + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (!pixa) + return ERROR_INT("pixa not defined", procName, 1); + + pix1 = pixConvertTo32(pixs); + if (linewidth > 0) + pix2 = pixAddBorder(pix1, linewidth, 0); + else + pix2 = pixClone(pix1); + if (bmf && textstr) + pix3 = pixAddSingleTextblock(pix2, bmf, textstr, val, location, NULL); + else + pix3 = pixClone(pix2); + pix4 = pixScaleToSize(pix3, outwidth, 0); + pixSaveTiled(pix4, pixa, 1.0, newrow, space, 32); + pixDestroy(&pix1); + pixDestroy(&pix2); + pixDestroy(&pix3); + pixDestroy(&pix4); + return 0; +} + + +void +l_chooseDisplayProg(l_int32 selection) +{ + if (selection == L_DISPLAY_WITH_XLI || + selection == L_DISPLAY_WITH_XZGV || + selection == L_DISPLAY_WITH_XV || + selection == L_DISPLAY_WITH_IV || + selection == L_DISPLAY_WITH_OPEN) { + var_DISPLAY_PROG = selection; + } else { + L_ERROR("invalid display program\n", "l_chooseDisplayProg"); + } + return; +} + + +/*---------------------------------------------------------------------* + * Deprecated pix output for debugging * + *---------------------------------------------------------------------*/ +/*! + * \brief pixDisplayWrite() + * + * \param[in] pix 1, 2, 4, 8, 16, 32 bpp + * \param[in] reduction -1 to reset/erase; 0 to disable; + * otherwise this is a reduction factor + * \return 0 if OK; 1 on error + * + *
+ * Notes:
+ *      (0) Deprecated.
+ *      (1) This is a simple interface for writing a set of files.
+ *      (2) This uses jpeg output for pix that are 32 bpp or 8 bpp
+ *          without a colormap; otherwise, it uses png.
+ *      (3) To erase any previously written files in the output directory:
+ *             pixDisplayWrite(NULL, -1);
+ *      (4) If reduction > 1 and depth == 1, this does a scale-to-gray
+ *          reduction.
+ *      (5) This function uses a static internal variable to number
+ *          output files written by a single process.  Behavior
+ *          with a shared library may be unpredictable.
+ *      (6) For 16 bpp, this displays the full dynamic range with log scale.
+ *          Alternative image transforms to generate 8 bpp pix are:
+ *             pix8 = pixMaxDynamicRange(pixt, L_LINEAR_SCALE);
+ *             pix8 = pixConvert16To8(pixt, L_LS_BYTE);  // low order byte
+ *             pix8 = pixConvert16To8(pixt, L_MS_BYTE);  // high order byte
+ * 
+ */ +l_ok +pixDisplayWrite(PIX *pixs, + l_int32 reduction) +{ +char buf[Bufsize]; +char *fname; +l_float32 scale; +PIX *pix1, *pix2; +static l_int32 index = 0; /* caution: not .so or thread safe */ + + PROCNAME("pixDisplayWrite"); + + fprintf(stderr, "\n######################################################" + "\n Notice:\n" + " pixDisplayWrite() has been deprecated in leptonica \n" + " since version 1.74. It will become a non-functioning\n" + " stub in 1.80.\n" + "######################################################" + "\n\n\n"); + + if (reduction == 0) return 0; + if (reduction < 0) { /* initialize */ + lept_rmdir("lept/display"); + index = 0; + return 0; + } + if (!pixs) + return ERROR_INT("pixs not defined", procName, 1); + if (index == 0) + lept_mkdir("lept/display"); + index++; + + if (reduction == 1) { + pix1 = pixClone(pixs); + } else { + scale = 1. / (l_float32)reduction; + if (pixGetDepth(pixs) == 1) + pix1 = pixScaleToGray(pixs, scale); + else + pix1 = pixScale(pixs, scale, scale); + } + + if (pixGetDepth(pix1) == 16) { + pix2 = pixMaxDynamicRange(pix1, L_LOG_SCALE); + snprintf(buf, Bufsize, "file.%03d.png", index); + fname = pathJoin("/tmp/lept/display", buf); + pixWrite(fname, pix2, IFF_PNG); + pixDestroy(&pix2); + } else if (pixGetDepth(pix1) < 8 || pixGetColormap(pix1)) { + snprintf(buf, Bufsize, "file.%03d.png", index); + fname = pathJoin("/tmp/lept/display", buf); + pixWrite(fname, pix1, IFF_PNG); + } else { + snprintf(buf, Bufsize, "file.%03d.jpg", index); + fname = pathJoin("/tmp/lept/display", buf); + pixWrite(fname, pix1, IFF_JFIF_JPEG); + } + LEPT_FREE(fname); + pixDestroy(&pix1); + return 0; +} diff --git a/3rdparty/hgOCR/leptonica/zlibmem.c b/3rdparty/hgOCR/leptonica/zlibmem.c new file mode 100644 index 00000000..806d064a --- /dev/null +++ b/3rdparty/hgOCR/leptonica/zlibmem.c @@ -0,0 +1,282 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + + +/*! + * \file zlibmem.c + *
+ *
+ *      zlib operations in memory, using bbuffer
+ *          l_uint8   *zlibCompress()
+ *          l_uint8   *zlibUncompress()
+ *
+ *
+ *    This provides an example use of the byte buffer utility
+ *    (see bbuffer.c for details of how the bbuffer works internally).
+ *    We use zlib to compress and decompress a byte array from
+ *    one memory buffer to another.  The standard method uses streams,
+ *    but here we use the bbuffer as an expandable queue of pixels
+ *    for both the reading and writing sides of each operation.
+ *
+ *    With memory mapping, one should be able to compress between
+ *    memory buffers by using the file system to buffer everything in
+ *    the background, but the bbuffer implementation is more portable.
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if 1 /* defined in environ.h */ +/* --------------------------------------------*/ + +#include "zlib.h" + +static const l_int32 L_BUF_SIZE = 32768; +static const l_int32 ZLIB_COMPRESSION_LEVEL = 6; + +#ifndef NO_CONSOLE_IO +#define DEBUG 0 +#endif /* ~NO_CONSOLE_IO */ + + +/*! + * \brief zlibCompress() + * + * \param[in] datain byte buffer with input data + * \param[in] nin number of bytes of input data + * \param[out] pnout number of bytes of output data + * \return dataout compressed data, or NULL on error + * + *
+ * Notes:
+ *      (1) We repeatedly read in and fill up an input buffer,
+ *          compress the data, and read it back out.  zlib
+ *          uses two byte buffers internally in the z_stream
+ *          data structure.  We use the bbuffers to feed data
+ *          into the fixed bufferin, and feed it out of bufferout,
+ *          in the same way that a pair of streams would normally
+ *          be used if the data were being read from one file
+ *          and written to another.  This is done iteratively,
+ *          compressing L_BUF_SIZE bytes of input data at a time.
+ * 
+ */ +l_uint8 * +zlibCompress(l_uint8 *datain, + size_t nin, + size_t *pnout) +{ +l_uint8 *dataout; +l_int32 status, success; +l_int32 flush; +size_t nbytes; +l_uint8 *bufferin, *bufferout; +L_BBUFFER *bbin, *bbout; +z_stream z; + + PROCNAME("zlibCompress"); + + if (!datain) + return (l_uint8 *)ERROR_PTR("datain not defined", procName, NULL); + + /* Set up fixed size buffers used in z_stream */ + bufferin = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); + bufferout = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); + + /* Set up bbuffers and load bbin with the data */ + bbin = bbufferCreate(datain, nin); + bbout = bbufferCreate(NULL, 0); + + success = TRUE; + if (!bufferin || !bufferout || !bbin || !bbout) { + L_ERROR("calloc fail for buffer\n", procName); + success = FALSE; + goto cleanup_arrays; + } + + z.zalloc = (alloc_func)0; + z.zfree = (free_func)0; + z.opaque = (voidpf)0; + + z.next_in = bufferin; + z.avail_in = 0; + z.next_out = bufferout; + z.avail_out = L_BUF_SIZE; + + status = deflateInit(&z, ZLIB_COMPRESSION_LEVEL); + if (status != Z_OK) { + L_ERROR("deflateInit failed\n", procName); + success = FALSE; + goto cleanup_arrays; + } + + do { + if (z.avail_in == 0) { + z.next_in = bufferin; + bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); +#if DEBUG + fprintf(stderr, " wrote %zu bytes to bufferin\n", nbytes); +#endif /* DEBUG */ + z.avail_in = nbytes; + } + flush = (bbin->n) ? Z_SYNC_FLUSH : Z_FINISH; + status = deflate(&z, flush); +#if DEBUG + fprintf(stderr, " status is %d, bytesleft = %u, totalout = %zu\n", + status, z.avail_out, z.total_out); +#endif /* DEBUG */ + nbytes = L_BUF_SIZE - z.avail_out; + if (nbytes) { + bbufferRead(bbout, bufferout, nbytes); +#if DEBUG + fprintf(stderr, " read %zu bytes from bufferout\n", nbytes); +#endif /* DEBUG */ + } + z.next_out = bufferout; + z.avail_out = L_BUF_SIZE; + } while (flush != Z_FINISH); + + deflateEnd(&z); + +cleanup_arrays: + if (success) { + dataout = bbufferDestroyAndSaveData(&bbout, pnout); + } else { + dataout = NULL; + bbufferDestroy(&bbout); + } + bbufferDestroy(&bbin); + LEPT_FREE(bufferin); + LEPT_FREE(bufferout); + return dataout; +} + + +/*! + * \brief zlibUncompress() + * + * \param[in] datain byte buffer with compressed input data + * \param[in] nin number of bytes of input data + * \param[out] pnout number of bytes of output data + * \return dataout uncompressed data, or NULL on error + * + *
+ * Notes:
+ *      (1) See zlibCompress().
+ * 
+ */ +l_uint8 * +zlibUncompress(l_uint8 *datain, + size_t nin, + size_t *pnout) +{ +l_uint8 *dataout; +l_uint8 *bufferin, *bufferout; +l_int32 status, success; +size_t nbytes; +L_BBUFFER *bbin, *bbout; +z_stream z; + + PROCNAME("zlibUncompress"); + + if (!datain) + return (l_uint8 *)ERROR_PTR("datain not defined", procName, NULL); + + /* Set up fixed size buffers used in z_stream */ + bufferin = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); + bufferout = (l_uint8 *)LEPT_CALLOC(L_BUF_SIZE, sizeof(l_uint8)); + + /* Set up bbuffers and load bbin with the data */ + bbin = bbufferCreate(datain, nin); + bbout = bbufferCreate(NULL, 0); + + success = TRUE; + if (!bufferin || !bufferout || !bbin || !bbout) { + L_ERROR("calloc fail for buffer\n", procName); + success = FALSE; + goto cleanup_arrays; + } + + z.zalloc = (alloc_func)0; + z.zfree = (free_func)0; + + z.next_in = bufferin; + z.avail_in = 0; + z.next_out = bufferout; + z.avail_out = L_BUF_SIZE; + + inflateInit(&z); + + + for ( ; ; ) { + if (z.avail_in == 0) { + z.next_in = bufferin; + bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); +#if DEBUG + fprintf(stderr, " wrote %d bytes to bufferin\n", nbytes); +#endif /* DEBUG */ + z.avail_in = nbytes; + } + if (z.avail_in == 0) + break; + status = inflate(&z, Z_SYNC_FLUSH); +#if DEBUG + fprintf(stderr, " status is %d, bytesleft = %d, totalout = %d\n", + status, z.avail_out, z.total_out); +#endif /* DEBUG */ + nbytes = L_BUF_SIZE - z.avail_out; + if (nbytes) { + bbufferRead(bbout, bufferout, nbytes); +#if DEBUG + fprintf(stderr, " read %d bytes from bufferout\n", nbytes); +#endif /* DEBUG */ + } + z.next_out = bufferout; + z.avail_out = L_BUF_SIZE; + } + + inflateEnd(&z); + +cleanup_arrays: + if (success) { + dataout = bbufferDestroyAndSaveData(&bbout, pnout); + } else { + dataout = NULL; + bbufferDestroy(&bbout); + } + bbufferDestroy(&bbin); + LEPT_FREE(bufferin); + LEPT_FREE(bufferout); + return dataout; +} + +/* --------------------------------------------*/ +#endif /* HAVE_LIBZ */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/leptonica/zlibmemstub.c b/3rdparty/hgOCR/leptonica/zlibmemstub.c new file mode 100644 index 00000000..eb03fedc --- /dev/null +++ b/3rdparty/hgOCR/leptonica/zlibmemstub.c @@ -0,0 +1,59 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/*! + * \file zlibmemstub.c + *
+ *
+ *     Stubs for zlibmem.c functions
+ * 
+ */ + +#ifdef HAVE_CONFIG_H +#include "config_auto.h" +#endif /* HAVE_CONFIG_H */ + +#include "allheaders.h" + +/* --------------------------------------------*/ +#if !HAVE_LIBZ /* defined in environ.h */ +/* --------------------------------------------*/ + +l_uint8 * zlibCompress(l_uint8 *datain, size_t nin, size_t *pnout) +{ + return (l_uint8 *)ERROR_PTR("function not present", "zlibCompress", NULL); +} + +/* ----------------------------------------------------------------------*/ + +l_uint8 * zlibUncompress(l_uint8 *datain, size_t nin, size_t *pnout) +{ + return (l_uint8 *)ERROR_PTR("function not present", "zlibUncompress", NULL); +} + +/* --------------------------------------------*/ +#endif /* !HAVE_LIBZ */ +/* --------------------------------------------*/ diff --git a/3rdparty/hgOCR/x86/staticlib/debug/HG_OCR.lib b/3rdparty/hgOCR/x86/staticlib/debug/HG_OCR.lib new file mode 100644 index 0000000000000000000000000000000000000000..a6efaea00a04ef970a4e98d599bef13fdb966aaf GIT binary patch literal 42146502 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 z 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�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¡i9We(PLclp87Z%E&4ru~ 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

EJ=VBnTW^l`d_g<$8jV(OtRf6 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

U0m;bY5Y9-YHG*4OWeGsK$UYqA?H zM&S?=PaIbZn0ZxfYw~55O+z-|AvSdSakE(swHt4sp;v`i%Rxh%Cl>0J^7O&d)NFO? zCT;l%kTv25CfCpzsLlHN-VF>;se!=ML~F0l?5&jMs~Gkw=0jc2nqm>aJ-@Lz!8hSH zt-g6ydK9FCmZlI=X<)5Fc3EvzXZovDJHr+d1wVU}zciC`73t{5O{xa!YNTotfWO-CCa8T`6uV z7O(H!)Z4eI+i-J`H;L7BbA&fXdizF9H%ECBgpGPP`zy1RdS%Pb*H@>7~=5)J3Is(kpEii%d%6Wh`l^5!pDwXL?)!Kn_ZMry8G_IH!>V=fY`bN0& zOk@e+dZV%RM#p;H0Y}!`T&a&%>Ra~J=l9i<5aKxr3P!DF0!q~Ma3=GId@jVFQpbYG zt)uWZGdDd}u9f!|C;O_^S$V1`p(w6Q)MsWFipu5jUM_0$E39Ty7v6JoWv)`2nUaqt z7n=k9LP~W`0!Wnv==-btcFtBBB0#MYLxNf?frz2GdP5ZWY#}&`i|QnmlU@j9aUfU~hq8LmHLZ0{n^eWWpcqpg%&RagAc6GCfnC+p=rpOl@l4 zY`HdBp50ejC`#`H(}m;K%?x*>IgM7zwb_FMZ`g-toC-Hs8XX)QjNTJiOQRzrZaY=$ z2{ffq{PXG^7^~Fwmgg#S^=)u;80_wRUjR3|bG_T#@!!q&>dzS+7*a8FPM zL>l3M4v^u2N~C3YWUM?hC#cY*F$r!UQeY7)zqSsH7mLsfqJ=M=Flp2r#WZPy>59kz z_J&c{kVY#O)lCjpr^>UuX4RwQ@yJc*Y>sQ{o%^~$}FB`jFuGq zkC7nc4e|9&sxVX>LVV0a>}Yy=dWtu!9>f>E+0C}g(}pFEllCwIERv5jY`{@gZ>nsc znXd0qWhJ?QEox)KY(A6Q`nK$V_ldXUa81PrD}F_R1tvQQo-;IZT)i zc&`}Atw!UN&TU(?y07dMzJD7=3Fl_!c8{0&Dv$9>JxT{$fL@BvL$`~Eq(!SJY849A zA%^h!3`F4ob)rOr2!SBR=xrw!-p~yaK_y^E#1c_I$%2APz$C`{WNStu8!IEmGL-QP zqt{F;55P$pltRho%wE%m6?&S$?lWDu0K9Q<%h1LFU{b~5MRMkT;bLR!L{}^w&>P%- zq}9Xk5UJnjqo{}u44H2^7&r^^UQ`I9Y zS|lA=M%(G_W2&7fuGqRRVa75IkQOqnMkupXRS63fNlDl6%v@#g;C!{dr?N1k<>YC} zONQW4X)l?ESoDZWGgZunu?-kik)Y%>00gNi3MMz+D3FkX8m2Z<-$HD-Ttl>iY%Yxq zJ92gwtPW=lbAmuSF(ASe+lyu)I>dMenhg*vBu7gI6su7hqX6XtyN9dgX>_}lG>J|L zA)Pnl6E44$Qkm(51+JT11)z7hbZx~vO5e;}xpuIKt~^F5nc4R3+qFxlD{jb>V*q+Z zIDFCZYXrEyiA)X~#X;U%-S3Y2DFceCFvN(MVFZ#XlQsky9T?I|s4#uL6zsNP!Z`eD z9S*rfhNh?}%fP0I2IE*^907g>8+N}y68pA6!Z_?|9UB2^83PUD)mpvpU|;p-zG}T* zU)zC8EV^>@F<`R z$S3AzxH4p@Uou?sI|Omnw$AL{Q{PriFQ)_Lc{y^5*5%Dljq@Tr(zb!|@!_FSw-bT_ z+BH`<6Z6yMdPNTI4xlI|gnIihf;ixg$*K1@iL4s;HvyUHzBf9I``+NNT3>b!QGXDl z$0h(l0rP!~|4IVY;b#>C27zS(&X~9qmiqP`6#Ljk60R5@7AMFjHfDY-A_VFI@pj4w z@VO(8jclSvEXzT5AKa7eLZ{4XM#2>@L;PM z<;Ygj!k?)TM!7STGVo?7r7rwMATx7jsAuHMP|n1a%{heFvJ?yRWhs`-n5ANrGfP38 zwbIP4(%j6f?A$6=3#JCk3wyXMtu(Pvse8-b7`Oc}Aa3qKG3;*IJ72C<7-xgqXfb2; zngkPERXsUMR5&G6s#o=@su;qOQ$Vf3LsGm&ZL$icmc=50Hb10;D^#>*KT#TmRJ|5{@^#DVj5cp8thNAK8FWHI&A?hx z5lgsHSnI59Z4ishFg2pTeIqpU9xpi zYIfAH5))dXEo+QvhL$Qu6Y`;6l$cjj_M3Q}GqfV>CJYNG zm1=oDj;UbmMY24%0;#tc39&sxB_53!B*8n+=IU4-QK^;YYt@?%qL(C|da>5e;S~wc z?!?edle=HjcP>Pm_N*AboG-5k6QvH!;I?&i+%k#Iuo=Vd43MC2sKMvn5J< zD|@*_m?QF@P}@6R1jHO87Tmfk^xHgWiRZY020Ty2UEzt5_0~!#Yfnqas8#aHN>nGL zmo-Igq3kk{)ON{bbciiAyNooMWfwRz@lYJ!r|_5Fx`UEj_#Aj2{<4(>5H1NH2}*lc z>^0z2_v2Y0c>KW#PJ>6=xj-Z+Le-rhekW9<09Y&RwgSd**Z9~VBevL*G3>FPz9Gg6 z-drpOwze%;f>q)K*fSNd!JDu@upY~vSMwQWzPTiq^|AC=3)7^U4Rlj^z#BuEvKPiv6>l z>2tN9L8o6Cgp5V_y9r2Py1KVio|?i_$Mnvs_awxU44b*jE35lymF;GwXOYMDmx05q^msPaYGGw?Z!Hv625QA;^msaB4OWhjftB^ugVu%h zjV}0(U+u0?j;YyJtecNrsP8vtmuHAB7dMkWVU_|=Mi0|$ROl3$ine6vO4M0rDa~_| zJiSWMbmBILw94kPhPIAcU~@!w&K~oiJ5TG(N>Ar(HA8OEX-myaa!2j7NvdU716)hdnAi2vnmGzrIKbnBvt&{_LpKUHp^cRJS zrv@jWXLwxDWY~@XrDgAyrj`TWtvZF2GRX8zR_n6RbCDX4J&y95P zk_o&Eur@w(OC|iW36GByg#=TvRQ_Hnx$UsbwXpC5D%km`<5tR(e%WD9_DZmUbCs9zz(pnq&roT4j(KNa>(CW}tRa z8Dm}p6!}?WMv7Wuju~m`ls#r7H?=_`6U}WnNnbQ2C$RX$h5$j614hXR{BfP;hJ?}} z0%NhmGKvaLgh8KFEXNGn2p(hZdxHnYA_*N&cp_spzt@?Xc+)tFPr2!)O16GK9nE^3 z#t1eHoCsPC*F7?|Tgen^#Ty_l#h3^7bn`W!@gp>HKq9VO0uL#0*g7kkV>&@bSCZ`< zT%8<0DZ1O@H5K>sEvbrA4(wvn?n-^it8+cyuHD-Y^Yz{p>^lJN>c|HnZvd8a}wN`pfbs{?@%dAAVTe4aELmiZB z29nz<)n>B#PKh-m%_h0}&o|3+L1_B5iy{c9V(i!wM!cOPX1Y}!#TWjwC34H^hFU4b ztTeHgzDQ)6!3DKgq8TV!Eb`3gds->bj3hN9(HysYpRmqSO~!q9n4@5_dY)FAT2`8T zTWf>RGB}qOi!1|0Z4+2V=g~@uWh5ygvbnZQxHag%w0?i7cXqZqRoYv=xwL?_L-O8u z?+_jzxOnH?{f7r{YL9@k`W#`Ri%HyhFwz0xXYgK&QS?o+(Qd(Kbb^ac@;UGkh#n6z z*G5MTW1~ZJ3zZrl!FpZqq~eCfmtyf{2|5QiI2$l> zYGzNqw^r&Ng$BzDdpO%!n&1d=y;h#7i`T4btd}PCpjc_Dx_7=@6XVChZ3LgOdQE}} zt`_TfHeaPyo~joaSu1bYSDr1^tGZBC(ZvXOO>spx1{D-@9qJtr!^iVjNGpgJ?^P#1Z4P8)o+5txiJF)rEw zpEROM$$v+?O-QQr(;88yEyCumO??E-SsMx%nz*5qDy5tqbpke1i*Pd_sMJ*1=%ft= z)4OOxWn0@a6b-p&LkXjEHkFHa&88ZycFZQ63YCTyWvCJFlnoVfY=8#nsi+7ITgZjDqQdj+$?JG6Gq;%ZMzFHAfj`bzvfo$|}zn_4Zs3?y~H z_A+{$mI^N;O%dshRi~!PvFo$kjZ>;?!XCZIqjt5vqgRJ3{U@-V-8J*}AVcpsX6sWx z%HCG;?Y*`fEVmYqm0K*s^W~0=m@kwsO_l4#5&yAxnC35St%&5gF4JgJ?#zkA5uY6u z(y0HA=Jb$8jgYWM+ux>reQ$bbsAPc$b4=cft;dB%&?bSW@a4b})^7x|2SVenN8VnZqKQS)0wr!ZKsGKMYNK znRR-mWA-2$DadQoB7G_-f}A=aK<3hQ%EbzWoTjAH6KrXjc}cFRJhk(3%u0UirJ5mC zTqL#$nPwoq#S+b!KQ0oHW~AOO(AMVzjJ)OfW*@*Y~oh3*EnEs+E)&32@?(B}z1wz>}(? zGa-oJ23ZNgPjFQ(?Kzg7>$t#-`ICo;uLE~$8JT5eJq7a1YjP7=pI$I63N7i8(ETjN zg`pMk;JTE1T>w==v6&5?auL!@Y;mGv1-DvMN--&nsIx}nCZ@EDX^ljMYEfKy1@ZLR zglo>K47yn8;uWR zi7?^DLI(NTMz=`d8Y_W%ViciHzilE-FJYrgFD0dBCQ3`FGwyJ!Lq0%Fi- z#E&LG`Og6sovzHVq5_*!M(U-8uSai94BE@#%L%1~znnrFl~+sny;?%?y0h+3pI#0; zB==7Pijq6DkumoWzL+keBsQjR$N}f5I6xDD>fJVtGK`@keIB3c_7mVObTimhUc_Wg2c;9tT{c?G{Xm_B@%&BkjrRy z!YPKVADcG>z+#Jq(hC=`eVkMQYcCW|EnKLjjd-0)c?QcUOY^nr%?Bkc1!ANCo1n5F z+%x~YLUN;nvZ_yMbA}XgMpCAENg``Dp!qh@E67DIS;=X=lrrQ3t&>p(Vp=SrjA=lN zM3j*lyNt3W5>f85!HLindFv1|0j#HIB+K=|KeV;jk41J9siD zI{WcF*{ZvEnqxIDcimv%8j4e5hiG!;>5YyHlWRXI-9?xM6YPjlEMAdGcd|GPF>9a} zJha6uo1(ClMw*qd&YEmis+AbHs5~k7$&f|0)qJzk*J9(%Kvu_1Hv`R!)o?TBw(Yar zW(aJh>1L#>v$mU&=q8O9PfEh;O{PoJm0jh1v-QS$50Q+@*x!grW4MFKADLv&!A{Po z-dE681dGgabSR!2uSP!P#LT+sgvJzfn}E=uU?HY#0&_7nv&3Sv8q#$sI)pKjT&#*UGA4%s(y6S0QGj?{ww|>vIa{end$1MEtDhgwO#8d4?Tg$EjxMw^ zSf?kYv++4Sou-i79#dvpoQUar-Vf|%z0WCJig*{-uj*_6Une``y`{4kQ2H$2%J z&-B8ZY+~!Uapu$;Z;$tErU%v*=h+N_tqkEA>FTU?W+XawaQF7aVjj-eEq1$oasf_v zcT?Ra7Z*3hYPh^Uua8S^n~lfiRkC!=U0j0hFmL#+1{HNpauSC@)g-*&FnMK>x9nFF z2l^9f>iTQH-DS!NbvS1W$e3YD<}n?9X=90UFs^#CF>WjzRaX3(>=X>f;Yr1jo_@u# zqnEVsq8IYOrDQ~}>|#jd!nCd{Y=>GI1L@j*Np%|Y(yFDRH^tI1jrQ2`VMbyL%XMi< znurCFj>E)NY&wJX;t}@jMcwsriQL&Cq~Z;f=dv2B!Okt+T~F*YVmm~bE3{zAfpGb4 z7Lm7z$DsVhzvRG}YP&H%FQqosYi*zHHAQ9%Eio%y9k$D?WH*{|=V+x_yRU7v(X2$a z)W$DqCou8OiFffo7ySgN0^Wyetq&+ky`c79QhA69Bc| zcxF&Bs>_pBDeIUXA{J?v_IW$JSL4z98urNO3HOB?(nw<^ENn>e@P1^V=64}j*J3dF z3z0pV>o8N>$c8ZSUlU$1>?Bl|b;PQTEW~z*WuIE(Ft)twV}0IZ3+LHkpD4vV6?vl6 zJ9kijQJdUY;H^tBm?Zqp$-Z!Tq0;U9%NEAZ^uq-)es}Trg%`1rHr1JGU;ft=nJqNn ztaNqQoU@WG(-QTQ$-<)bz+f|LPpqw`ot4Pe8g>S%I&an)h*r&6o-b;nZl?FvKC5nq z$`+b+MzT6=*BPm9pJ6xAEte*#^)&FK34ngy%05_TP%#?Mlh)Syn>5QCI02_|B!re+ zQxkJ?9miKI-K&~*s9c7jgq3*0 z5qUmXvsSd?G<6qEa7=9yuGfr25}Oo^VJoUeTg0R{>`Ai_Ee=m(I**2(INtQwV_{4$ zi7g-IDz&1s$^ zbq14{sWvl|-9G2q43#bPtr^Mcuxrgob+gGp6H^G%(6p2sKbiojjR#}~6{E*IX$^(3 z(*CJhy|lkvTBzf>2BrO#+RUzlrE+cezP**XdZ~VJ9AR`g@x)a@w|F>PzNLAc&u!n`@(s>h`YIzMMiu3-1p4uMPj>wvX!!WY_Z-x@y>F= zmJS^f??g{0pu7D9;L)ez0jM%)v_>3R(?`WyP^ozdCo4H^5><0qK+b~7KukNt)O`5K zQ%)JFu?b3jcSo=H?v9{k241pvw6{0nCHb}w(Qv>aj{aVLgj+XX`k@pWWFhx8AORwO z3|~UR!@zkZNH>UJsB(j9qZj8(WuB0%0nu^6TJ07r6*F=)|AsBj;q}$ z8HR?Eng~nXhDfm3U^*INDkl-KtyZa&gyx}~`SMIn1be(yW^#P0R-K)loT(h}28pc1 zGzugeQ67OI+P1G9pB&hav}YT$9(O!TEju}0*;}69Q?21HEYmHGlHO2DgM6v56&dA2 zN1SL7KvS#%QT#$u1&NHE=BQgx+<@BpmCJ1Bm_IjEwKYr)kgbpe3*AIK)g-DI+FBT@ zp-2qO=oFL&FM2x$mSF-$`dLHp=4T2NY9;SH_eO7~u@&g7Y)0Ofq$kY16OjToP7nLAsJ<)CPqljjKTTI3Yu*;I3dCo z7G`$OaZO)oyk47`+a0{$QMtCiJS!%q$7lA=&sM~6*+S9ncByJ9W+h6nbzScOTvWGM zVb~-!tMLd=nGX56K;fXvn_B|GWUO2( z@2(+dA3>LN7MXe-i(ibUUfD$dFLzx)H>kbDG&R6SuDho3U zDg^ah(iAStP1izcViK&j57dj1Q`qKqFo$(`v(+hm`Kh;Z&a)r94=WgKjerSu;k)%< zaVcwfFF8e{h(M7oV7zw+tXID+UOeUx{s#1jaf}$Yyr&K-Yz0Ff5ikKkZav9Xni@v7 zH0)8fMvG+23>|~mjk4v9d#h{-FjlsbYc#`_0eZtstypoLH&CUpMKCs|Qq*XIDI;`$ ztSm-jnva)eKDVVJ4h%Sv`4f$SQuy% z})4r)4e>o;E0$gW0Bl-)s>T^oH|nH|>}{oziX-4Pm#Kk%tC>;eo-*oWXToW8D+ zVIQ8&qp|><55BEbqDLy{v|@&5sW~wx7Gn!(;7B@k`6bj_Er)x1ym25^zzJ1FG*Czn z6p^N4$Eh@`JU!($n@9yg8cjk`S2b%=sm9j7^v6aOMOo9A2tkQZQ(0Ubl!ojt4p0Nu zmEy(GJCboMx`{n&IQ6L6cIHwrAtL>h$`=3LL1GeL{m zf1_a9#-z19G)i&Gc99Ki&^{WipRJuBpAgG7a-Se=IFy+AZ9RRBwbqu>ldUbZl%y;^ zqxA%(bvrGkXr z>!=CNHtyxG%4=k--v-Rj@r?Sl)souIN_C9(Z3shT`nF&zpA&)UEX77di0IUIlMK(b zB3nVh{hGBFqcRLWWi=@SC?nIVz6^EZwPmXyV`RKB8R~`zYzJwn%_y1NMvN#HT3|wk zVlf6}TuPkAeh~hQb&Zb4STe>;?B&B&5>JM24R(M%Mz?1#A0ohL3-LtRbZ)KX>efz^ z**CC!_~A(@GSO%?t4ej~UZQCgs9qfGhGfaTN;d48CUrnf#-@j9MJ<|OSWEn$%*>PFWC?p4p%t&Kx}Ny26@oTMsYM;%*U zQq(S5%yyDiVg{RttxEmJGLH>V4I6-b{6SpzFP0|7eWVe3-$cU(;1Q^}j%143MayC{ zfWC$eAaSK%vanOPIflE24ZtNZZ}sOw%OX?1;K}3x>`$9qv0^fAa5(wVk-`DE&CQM` zymcW4uB1p&cMQ~4BRA_ei6CplkEtkpd(8dNdhO_DP9X|IV`iFR+aO|rqDFPCZAW&H z%2D$P!|=WZw1GejPAkfepilx#YiLP{+%@qCeOX1|qxEbo7e$GbB0D5ug*FxqlLPTu zjz@I`M2LK3yp?8yBap4$*1z0PQCS6QF&j>BII@A`Hz}V8pgh z2rVYMhYpF=wKuln_ER8C%;4PGPl+(GlOBRr5KL;SzR2|K2pNDEk&g(EET;+Z9kMl5 zw(|U>hbRrzu{pe6t(EWy0r`?#*Th=rBW$y;s)9_$uLmVH(QijQYKm%=HF+*m?7W&n zR^nQnab%@SS9M47kETeE>bq^eCJ(yv%uTY=)9OqmD_xz;TbiOdYLkn_2XQE`l{rmQ zV(Vmv(-h%ReV_C}Gy1{+RYazYqb<3RVHr^pU3z%zKqi!xW|c8{p1TjqKw2BJpbS*$ zO72t+l$G$PrrYU#nxs1C{3io7ZODEyP}SkwCo9EKTU;Dorww^eR*`i$>&Z%XRMRKD zj`9RRRXm-^cPy*sk_gjdVY?HaW{6ffljr&Ro{Y4$I_1eomagZH0aU&}l)+j6f^MS*VId49UXVS~pSZOO!g5AC`+@`88T!8daoKU1eQ=iqELNmstTf7+h{UsEGtBg1}ad{WS6FP9b*Ngj6n?WL_Gv%~)u5%d}KWp-M|1FPmW|0!yRe7$EuZ6Jwh(xEB}c>C7`7JE`q65uC+9 zW9peTYJLKx`5lF+Ej1fZi`p9nmM@>W1vg5|;%3Qe*-fw+XW`kv2A1Av{YESSDRPUS z2^-gYWP)zyt_^fGWTY*nXVEDvP3v!|L{92v4ll4XymngY^Ec?m+NH0?Jz*OtOLC?y zB_Z0p)g4eR7;aL*hXxhZTZ%13`}x5htswmot7Vl`N8fWeA5&ae_8NCSwY z+1C3`ieDOP8<3C;B`dxpZMDL~mwc-^-ep;zsfX9~#;Vd*D@0Ul$VsR4lq9A$fn<2D zLD&kKL~rN1;M+3llkEwy?~=!*QhvGNt9j;%tsUs~I&xbeuV5152~YECjD2 zW-iC4YSr1<$(hQ5VsZQ0@yUVxmAU%1gYy-18-(uEvXkSLy?944`vas7~1@26?3vss2WnFNP0GXM4sj3B7U)WCp#oz zS9vm}tz1iCM25vj5ptxVq$3shJMmz;P;wWikWNu3rKo($w$pxc!cC_A6i6W`p(IU{ z>=c=b#+2BxcrA?WwEePbl~Gv-FBP?z7XEuCrUuw{=&U(<6{e)E2-o(KIrysBMw?natEGEVanXWFT#Es@gM<<4Zx{KX>)kJq| zq>;7j*h<-CrK#nT%8&-PSWX!zYORzqhVoX5DI-Z?IaO;1%C+fYZ||sdkk|L(l)uDu zNa zOM^;Ao}!`^d%Nep0zdDj=EC~z16$&@S~Lhju$vQ!dNwjsgz5kr*0!QZ`$SPme!MI$ z1)1E*iK(7kI9Wu>vANq5P&>J?l2Sd|NRsv-Hmh4VR>^`+dstdJbY7J#=tfcnEsZ;` zN)~i(-%Um8W=Lv`)X;fVvY;F5^@vrhJ_%t^DH}>qzrQktx7HO$G)4@hG$IEv_LUlN zM$$(s7^0jVt<a5$~MEQP~M2a<$^DU(aIb4m1j%!DrZa0BS@~CEd^78wgoSPC{#q&YU$A$f=n_} zQ>BzBEs-Drr>&M1X>x-WdW$P&9J%ZZCYkyMd+|#jQtlg)i~xAw5dMd6yB!AJ9>M?c z?O-0PZ?v~BJP+1~mzIWYkdU;?;-^2)@6ATBjMZ2~({lmY3Q4e$A#@k6$sR&b4Mk#L z#`rjwP-BT0h&BsS$+VQQL1h-by;hztiS;jB4WccC>BvsAh#RH27B8V_zkP9$a8 zGj-J!H82+4EE4pheoeYUc&Q1pgb{U88O>E1}H z+DLy!6}0On1eS(iSP6>DVI*dOGp-n&a5T0fpmi>Wk>>UjKp`s&1O4-ctQ*-V%XCY-Erqv>9-aF|wO#{=6HMHK)>JDk(iAph!fLB#M(cOD`2xt1UQ8Zp9d^IN&D+tX zr~bU*^}Q^BpIq%3f&m4jpC0r8B~<}8z!VKdxMrK|@FmB@XxTNqbUYu{0RAMJz;?w#-#Z z^*xoj(*AO7raV0}RVvqZFO=$%LXA#)SsU;hDz$2A==Q>9@Mr@vznrSh;gxVR^$Ir7 zV2<6tzP~&hJQsUmX7BtgSj7_-7wn_4QLcSxd14_$(Z<;vDytWdjOnOKZ3E60F>8t) ztz|U{V=EZ7g{u~Fng(S8tNZ4r_Ee^Bs!W%1Y&8jkY0~le_S`lSS}Te)t-7s($x2Ym z#gx!G+byIFgpdAfnG_4&qJE zVEZ&@gJk7S12>3#cxq3%=554w84fXtq+ba&X2McKG80zPdQl~Gqi{uZvu5TNDz!Rx zME8n6J_k|m=)uXvLZ$AJj-E&`vB?N9u?HJ}5PSB{m+{DK?KZeh*cgNo>LhspS(St) zCJh00W0PRDFgD?D@E;mZ`oxmF97Cf-2C;EVw>F>Kupn*z-6&RDVO7YsGI%*sNYd7l ziUo${ZmqMnm0GZ3RVWSX#9F6OQwJbJaIxvfP&A|+LkXj9Oyv}Q4Vp34XtiEUI29@l zS~1mVR40~TW>ku$tg01Dk*Hd11r?6Nda+e$sbXwM6*|M3u~m_(S(usIRU9c6uSc+O z2h?U3=E`%SYkSK#d$V*L4CIoVZs`*D&dkN!39ZBN>Qwhv&~tb53mFWto4ntJDDOg# z)@2=9W+EAuP|{Rl^bAI|_9kP~Qkb;Zyh>(laYI!ahPZ<2n3l^18;S^uZR@rvmgi?R zZ6-lahjNyLHQXqSw>96-N>Hn%WODx*MO6x*ptC7rPteVl{d%BDgP9YxUC9-g(4l<#`R)_YRKr z?QkQpUt}b?2$Xtl|5$mZHZ(U?94uX{)=}c)zZHcXM;xP1m~N z@B$C&io%8MmI%qoy?IR>Y)FhG$G~<=m|?qZ%6t>1*9X^s)8<-r-@K}eID$}#U90i= z@)VkiXg7){PN+Ftp4+{zyt^`js5LvzVATNHvEHp1)l9%J2G^BTW*bLTlS^$K8Yqo! z=^rR<9oQ(sSUhSZ8xf@^)ac#2b7uGWd}T_y*VJkwaEmR7b>$ea}{Bj>5XHu&#kw$dZ3Y7Rq;OT^4@heo*p zKVFiyWT=5^##m+5M1T3f?gkj{uTJgTi+6+em+R$*s_ol3Tfy7L8|{Wg4Y?8`k}Att{-Dt#7T&O;>7_S_3Fq z8H<#r^k-?rv!!Q64ItCj-z6BcD7$rF+|xu%yo2uvm$q8Ek_x9Lyl>KM9C0Ms>R1Tt zo6IIuEprTaBxAIw)f>?|wQ+jUtJxCO)OZ2Fo}Z?M5|@^y1v2XQOw(G06h%Tdn}|Lk ziH)y6jzI|~)96fXSiv8ImDzc;e&m+1N<<{x*@#1(*f@raXMAFKTWNgT)`^Ymn8Z=G zadzJVRz9Yd4{Y698XDcSC4npkxv}cP%>QHWUANoF zakkNYF}VQ8NqV|}MN+ABuytx#c4y{~mTXsIO=QU}%jx93`uzYTt4J2fVo9>&%=%`{ zN?Sz`06`E0L6D@|&da<72J>aOrh7;iYr;0-W{WjKXyy=i&d?z)$jRoVX&rhza_0Mi!;=Dp?aS7vm-{src5bRV~Up%*3pjf<>h)w zq59^U8&y*!D=T{#mGx?}N^VfCDd6*Jv)Ik~cAf#nhLg>9o2~feh{ng}$@kOGH@Cn4 zu|O0yG&R&+5traEl9(As&el=^2KZRB0ulHEVZ4frT*)AV;?d2BMlAI3w&(F|281=&*QK+tr>IJj` znRtE#N|(ce)uEhyB-FdtxJE<-FV2zVl`wO6fZGsPKW`ES=^=> z*0%d?zR3%7Xvak3#1~nzHq@B6$Za-*!(-t0a(=wsG@IuGFuS?+gc-&+~UkG4s+*@L=YXV#H64V1aUi(4G3?kr#*0HNAbp+5jbL5SpDsWa$pK{pRplo zw4AXAYP#uoLr&BHN0o~H8`|Y%7Hx>iUh?;-R#Kv)mH8=%h?8^Al-e&cZnQyL0guj6 z+qeZk6?HTj3rOE?uwdv?J@SUR3`4lON`R*jr4n1LUaEDLM3FG+Vk=Z7z*eZ5Vr#fu zpErO5zNb0TqF3X(eorVOkZt9Lvv1eeYP4d-s$8*$8-*m_t}Acz)vIrB_r=xr?r6nT zckfZf)h%xl#nqdIw|yd!7zr*$bR-Uew((+BptVThXqYOa@7Gw>+&ZQ^PBC1X(Qs1y zd}5kGZV3*}T`z9FzNH1cJ}k^atSPV&%2!`=ir!(8xFihGAUGW4e4kg10qaZjb`pKn9XiROJC> zYnKa4&4EB&4bQ{3+(eNpO5;`;j1?~)2#-RVwuvxX^p2Uyl_jY=Mjo+ejK^&b9_{xkiT{+!b<~Cv>?AiEo(QUuRph zGv*)WCw$IwK7t+jlJ()`@Et5WR1ldCjlbUOC4=l+wnF|eUf9h4FF4}(k{iY3cPK^+ z>0n-5r>Ccl|GdS&_>ahSu3-GPeHky<2LFe0PRIo7^q+$FU-gtTB}(G_z_T8|makS9 zC-E@?wKLj<7vw!F?lVA6)_uT8NyyKU`(VoFHNBA9aT>5;G|pScd1BMo1wJg#(hgT2 z`53^dk9^Gf^d5CxQA3xixk0T~I*>X0$^{qhDOZiU{p7%LbpAa(KfWNTtAjkS zdJ8=uhT>a#su6LB0h)*zaUS2P6)vg#Gqfqyx&3B70;&_u` zKyk|lq}Z%hSIg`lEXEO@nzSz8ox()Xzt3r)j>pF#opC%a4(|=ci`6N}c)3cy;Yi2~ zmzkoEcskZ$k#2L3!xhN*Yha;$DWSPHe^!U;>}mS-a!omwPW<$SxYcTl)5Dwl`QqjV zkr#)L*TyhzH(NNSu3WS^ZVSk2`E$pi5$cHJP}omGLr91o)e1{!Kin9=6?c5Ioh6T( zEUox&n2|%o_zdjqCl`)S(y5Az<^N@N43{S!@{KRwRe8pT2;*2h>?Z+=Ilb(~N33Z= z&*d6h4n-Y{s%SoC0hC#RQ4s>nd|KH+(J$18+=>39-)6eQfB7c zGu^CBZ9*VL`RZ$WM;(i(V%wQAMc+1%!k|FZ4SC$~%C~2-} z9afL5qx*aa>UE|Mi?qVW>e`B#?72ENn(Q&VHJYfqQytZ7cc}x%F*`KE&Ob|!)}ni~ zF0Dn?(WjpJ^*Ysq#M7&4mz?iIWt&{jqH7rlFFkqGWWBfgU8D7QXC7?=L+DU%qvwSN{_99eYRmA(WR3Yg>%C zrmdeK563+AZ0m&sn^$3b*?w621RSsB0?*L$;jCv!|*+rr`M*u zHA5(cUoVFRYpVF$;~p1P>J7)DUgZd^*$AJv6Wt^qf_e?~VR?q;R!lj;{sWti>b0Bd zz;Wz`MhwniOFi}LHPwT})7Cvgtu)L`>mNi?p=CUN>!bAd<~|6+GAm=0Z*%e4QF`S@ zJ>x}rzVjVY#UC4O>`xYFOU(zn_CnY*5URH$8C9WFdA~>w9SoG|&V=_&qCel9thgmr&}ydOYOuuCHeoXRT}^ow1< zHQ)4tx835nERZ0(Jb34eMC}0Ehgii0F^X6jY!712UPf9E{PMgfNNP^Fed$@9>LX`? z?L#f@sv0TLz}>60X~R8_x`&2IM*!DU*)m2;m|Evn!$uN+CkLH|5Pyd5nz38&2S1nv ztNrRe84m|#=qLu>D&xt=MaTpeH)CN6!_hM5ja^{kQ*@30Ko{kGEkwY1$IJ;|)p7!y z_C-7VR>WYlz&kvYKF-(fKhuSQL|2PrJ!ZU7&^TEN;a^%Rz|lQ>%d$-po~h4b9tZe{`03GD}?6 zNGB)NeQO}%hG2T+4iRWgntZdrpP-}o5Nb1`q~A+tw60t#`fQJ;L1E#>ZN6sW1q^)v zT33kCB~ZrAVfg8*nyXL%M-BN0n6&OE1CuQ}CZ&u^HHRexc-1&&yekJy(`UHv;$}7c zp|M~qJh?OyFpAdcJf}4n;`H5`Ro<{@bl+P+MjLFt3c1lK)%?#$JnM`LW#_YP#*bUi zXE>ic-@)GCDI)vKIhL*~m~C8y#%n!eg{e;8I?t+$Wv7_9Wn>{=Ey69!(Q4}~Cqs$| z>En^kDl6i3P-9B-w!ID>9X50_T!>GohF^R-wkqN1H`0)#@uK+s!(0R?(6m>j1tH$* zv{{D@NE=|RBstrdp)4JKy|9&n7df_G^i}b<(N{xnWv& zgj3!wxUjTcHR5IMsC{(K{ZjT=38$DnusXLMkg}kCfB{MSszi#~Q~epZ*Q708GL$ z^FmA=Xqe7iEwO>bD0|v2R-RN+v5b{tiMsyXGvjXe6F{>;eo%Rr<5UT9aO^P0%KjqODf+N6eBBOeT{m%ERnxEsQ4TS{B;`}O&&YSU4)=~cCe z2lERn&2yQDV+q!`hSc@kisJubgW(xk_^O7+Gqmq`17%<4et}`*2nYO64VvS&@3jq? z?>=_^JlX@tb$N5wj<6(L=__LX&>|^DM5TDY5XrRfgyE z;U)g25Q1B=UWWEj7u3-#2Un-hBBVVi9%m69Et6xdAGBRXEr?Td#c-fXzN)qy&#=Xd z_V~8!SR&om|JQU$AD~CDU$3}j$5Wks#r~=lX%D~nmr$eQw(F=$vYV~pELj>dN^4n+oX%Sx2 z^Vb&lCgca`ixey4DnHU^+GD-cUto)_nVUIZjnYkQ(X>i6D`^=i7{)mDap#|xd^JLI zlE2Pj^HBhAy}76YQRF-nz!EnH`4CWUARnQtaq2ug=;~7f4-a@^oQ^jf>pBlHKIw4H zp3H_aKy;i@Du21hlSJ`4JaYfN}v6t; zxWPKExz$_2F^&3RH{094mb<&w=DVIgE#?Jxtpn%Tx=3GYO7-wnJ$rg8R!x-dYR8&o zZ0#2vTCw{>Ecr~yu^0=Fw%5d_cXYoRCJ&#~Dti3j`Ab)Ff$THxhP;0I?91IR3=g(l z)kVPSN<)ER`5Ec|+2TF|MXOEsbBaq}4`>Uu!cHVU5S=;9j)JV;2U7h+P+L1!eISK? z`$%G>%Y2X1A;8o>5-R1}7((h{;?WP6NMFd1a4$ayQmG>K(FIgwUt}c}>G@QoK7~ok zJ=E%BQr+?SVe{CyoDZ)bcZ(g)mC562Bx?QZ{7k7qph5w(6xIVasJIKzbC9SoMol_G zC)7jM_gbIg=;B_Kc!MWbM3}jdu`FnU!BA9Sb$bLPOv`MTuw@dy8Qdo5gA-EK zWNTV2koVSfGUJ%19jrK@q8M@2E3@I5iETbSVAYKHDi)mJlH23oZd-Jc8k0ok89Z{J z{AI2vEemD0ywBzjbeDJI@^P0fZhy>gR-2ozjhj2{&TT{m=)x^d$kNLpjrkcG%zxwN z|C2W-?ZMgk@Vwbn2XIf{HH^CXD2>KI&rryD_C>f;`th{Jf->7?w{u*KVHzYfdG8Bi zIP__cCe5OK(B=j&D?YQLGvW&RDqrYB03&&Dw_py4?I}vin33c*@DPKZf z2Qesz!^`*bF}QxtK6g11uc*iOW$$P9_klb=TW|Y3u-DSvhw%5)`uhk>yE;4%G`)`N zbP8Xs*=|l|^J#i4`vc&xOxVc#(czS^dYN_o4rq!Qay!}mxxGVV8KS`j$ zxHW2xKjlwTC39MRBP7c~hGHdN^q~4SPnbV`FwaCbPpHB2CA~a8so+h_8mxuHg+frY zFepH)zKgqg(i``aRPaV|c&(jAS#LPR|A&9QCw)xrHp`nVSuGwPm!Fq-C(u``;6Ng? z<)A*>?NHy#O;II|)+Far#;tbR;s51=QAIgJ$+^V}K3Gifmr<(2P1>yih-heKB|{rf zahfKxii#NWf?d4f$3bi2QO67b9R<{k5nnj?)Is$o()W^}@N)GEFC?QQ5xBEPQ;(UM zjY;V>eq@z)w!?|vQXS|`M_MDaL{&D~lo+O)f9&eideoVY|H_+>&47z+vAwyoVF8*v zU1!tmWXWz*%;h|13HnYc_(9G7;`qq4yPqR_2aWb47f5dXc*~{q zSBv{>E7{<2PpMR@cT0t;(&oCo*e&cv)3Y73{K-u`#wcG1Wd)K=$DnjoEf9CNOXIOi z76>p|(+Dd?ce{Cdu(<#ercT^H{BFZ^m08_vRy+&Y0Q6jC`z>A_y%dv_=!nPM)FU~E z=6}1I(KBuk(b6OtZPqiWg(PwZeC~Tdr(&^s?a-w9o@EXkJ{*FJ{xr zL>hlt(H@aJZ(yjW)8=eE&F2X@oroTG!D#3(*hbR&$*&XXQ@9wIHk0$T-IZovRtU6I zPJyH|Gy>=2%NgjQy5!AMZdd>{j~13ve9=vu{G!`o3rOzKmR zsadjj6zLtIiq&+h)AnFepmtMB%DuR`%Wmz5Qi(VMEeCkzvWIXfrpG146Qc=A>D}D7 zc=nQ~2>Q@kesTH7vK;`>{2FV9AhF~q@niP1#&SaX+c+=Syy|3&-P1N}VYmsvc zKCN~+jG9JSl#}h#8a|>`PxXj!B7fM$lJx2c+l=M9d1Ys@tjlxIZpr(Q7IERmPO~rA zqn!PC$Qm@Ms+mEmidH>x^3+39t}11|934VBrjahRNc&h_O$^$+8_c?7H7tQxR6)Rx zL9SaY4CTg&m5c>u5t6uEj5@13s8lv4&=NLQ7Kb?rN7zXlF`JbvuMkHL<&}C4!Q5z~ z$O{}*Z7v-kLevV04|z}oPxotjCEYOswefO-MFTtWi)-P}DS@Bn_G`0FHe~~-+Q5aA z^14Ee^3D1iZrdg^d34jfd0Hb}kZ!k|Z9;#STPm5vsv}5zra9=+fS}3%>#Xthe;tb^ z>YUO_hWz5?_uQ?L2xJeIS&PK62Lp)zDB**NS_s4pNz+}f$yPh9@rG8og(sGPM<7n< z_vk!hcDI-=w1V7bPr#|&9Cg#_blx9z#=`sSVW^x)$(Bn6(snu;Plp1Y7CzF+);~)? z>4K6`lHQ^6O4+?qYjUBEdXcO@;U~)NsX!Jk{`sPp^g*O3X>Pxi+Khf|qtaya$WyLd zW4~>j{Plj4ZSS#8+KQ=G@&nj}d_$c|VP6T=V6$+T9>@f1s{RNLH5QWyQ=)fov214K zxu>VIVpHhN&w3{+Y7hb}8f>-7(gx}#rR_RCcbq|D%@9akXPsrq?#c3Hc~MFOKH+s* zPHl7ZCmxzga31M;ar4#HDZCr6#R}S+nL(LW1uh%YK+TIh-TPV=7%u&Qr7waMX=(huxbYBl)_>RHQf1u5Dl zepyhGC4smGj*GvLq(28V*=`+{Bt4&Taf)v($66Tf)bl={FVMZ9%JUbZ{vLK+~^7;wBsvIdgG z=b4V1ut8}4<*1+Zn$wFEJuYpjGIi9uLz$GMf3tjhy-1MkOfJ%{QbcJ?&2Jo0Mz_hY z!pD)yWk51aaycVxqTQ;BrlRVTuA=Ij0y8+1^a}M=(1f8pEX-0UmgrWCe^pPisjXeD zenCBBHdN+EEqBYlT}6%LF1!Bmc$a;%ZF5Dv-j8cXAk$k3F=C$h`|Hn}#%#M-(t4d% z!mG@&hT`L{uo0~DbR4cmUD;Wv#I!8=nWflRD@Ugb5Z@yP)c5AC5TPS`1g)Rnt%5D+ zUpy>sASQo1y3NV3ImtCj1^kt|ceBlXhIdPD3ZIL11GHHEN|pgd4&xE z+$XTu-Q3aYoEHDaoQ4rEhdeE?T_(h_H|hfwO%^JZpI3d3Wrm6@P@kwkp8icRBEF;p zIaW=;{Ig}stV$Lpec76vYDeVzalZ+KOE&i3D28;EV;pR5I{o+vp z36PaUEoFlGPZ)l{Q3gR9KfbwKFK?E+A7W1A9A8^>%%Bv87>GnP$4Uz>y9!B>B$1`dLWQ?9q0&uZPZkrBj8Q4+=YM(+syUXCOHrc(S< zxFb?e2;foFvM5PKW&pM3bY~>FApPcFpD38WM}^&AN2ef`Sf%+#f-Jvhs~((}4b6RS z)5qS*U(4IwT?3&Wnr9r*ON9Ps^qHb9#Z3i14Q}UMBMXGaCmvJN$Vu z5s4^rWU64f@g3_-{9h)C86|%(S2T;T6(Qk9XRzMUZk-o8qN1xbw8hpwO*o7I%=92sQutK?$|?xzI}F&=8H$3v|^ozU%sB6qrh86xma}WR#i< z&qZw*NIyv{lx)qK%BNDp{i67!V8pJH61W`FYO{$csc^dWQJN$DtHgQLeA;aWlxZtm zFI<;-C2|H8`m6LCCD>~|PY$8=CC4m%-hrfbv%zt6iu2jysweX@FT4;6!*=-~b0_OK zi)6p@{cmlgh^bO6q>dMv0cdrL_^FLW19C-qdOf)Z!W3K( z8iFaDykHZY@! zEreTI<=c2*64aeqf4wIFxoQU6YLMD-fGDiY zDcriFO+916qg`U^WtEM_;UvkNUdN*x28gL3!@aVigpXzb{Y~9 zM<4Q$nOAg==e*eNF3D55md!O+^fA4{GS`&@nIl>8fut|%<^PrEDhUMdh&C&mlfJDM z8o=f|9bK8ir@$JjG&RD$Ni7bhv+*)ddJaW!WQIDu@y#|0c?F=#oFbgM`(?=w9a_$C zlyl-fRb@P%hV$9!k?@q!ly@mGFb>+53bn3MjtqxOmbWS?_|57d||pg&0;lI*6%omQJP*zozz*j+;AEh zFE&2eHUq|)6>~*vN(ymc7C_>P8@p#ZHL$ChPD%y)6E;tEoogd2$pIoH~heC?b z_*VFh@^c>7GZ5e_dn}D06epz>Q=WvKPp0EZI-T{g+bTbK051mPnGXaTrAUG2L-L*= zF72ff$eN=7B_Iy3N$0)-RJkG*U{XSYta~BpAnFEGYgS3p4O9@s;vSg^>x-|;hX==C zG?%BCI~?0oS4*rwua~@Yo33}*ORzKut4O#?7+K_E$%E$&Bp9Mi<;{LNn0whY?;&{G zNP)xHC#J?+$Swv8*%LcF0j#M zD$_QifyugCPxdTb{+!qudLl#9{Ob8E$>|%>cz$#5NIT+c_K?l9F~XGWToDS`NyjHU?(XuW^-G6N}(| z-uk}#fjzQ0f^=YW?tBuo^ax#zx}K-u=5%)k!Y0{vevL&bZqVf$s|v%S0X%Fs-+z?K z)kZ|AzCLQ_UMSIo>&5N-2Dw26b~0hA`^%-G)(r)HiVMx9*~bB1eI1c~zsVlhht6B3 z<8~DPsiKE(KfY)=ap!n|sz3`Nsm4GomYPaD=(qJXq? zt(u2~JSnI{5-N2BR76z-`utlQa_F?nG|)Iu-wW=Ij}`bA>)Y9Oi4@K)5_U1LG*3%T zoQ;Ow+HN{Zr~PDp+MYM3)8@Z%0wi2Mswm%wCZ{Pz9uBa`i){B^CT?{mo?8qg>sMHjTYML zM+=p4-`7)7iI(%8Lmm}1jg?F(%uyHpaoly&mNT&^4PvyA5^2wm#G!Jy9{ke)re=l5v+m*dC^ztcCjjUWIgMGu&P?F zi>4~-h;?eEs<)yRAGWDU38yhi zJK+^%2;NA24{N2IbSi-Cbc_lfgx6k|^BF?%{`h(YNvd3mQ&-h7La_Q|TTxMqZB&ky zBB)S>v~U=sS#g|n2=ycqwD)Qi<9NLHo zdI!iHC-ChfpvAL|W@z7|gWoz0vD#=115URC-0fbM0of6*g_>$aVHcjZGni}f5%%ew zz&;0F2exjjQnAxohs{(adD({y)%qf;+Db-e#Hw5oAB{qCMTw%6304lF)vIrZ(&B3S zZhq4>-!FkHcl;-gbm=@yB+Xekq!LG5IU?eAD4nwYccA532qcc8Wgnm+Chy<+W7*YV@W&v=N??a(Fkofzh`r#OCzwTaftSWVJzs^26km*<4 zBR+pwvq7)0OOC+xo_zvCP)rj>8Y!8Gn4HsN5H@m9s|YLLV-Pl;d#^Hz3iud=N4k-y zBCLRqK^Rw4)*)ShABQ-a`b|8nH^iTX>KRPcW3Ud&BQ?T#{a;P4LpYAerg=ng4<4Ne zj>MpuJ)+s@su2NS-&OY*Y>^*L2QKDox@J;l{)*RL>E?TlN%1$a%J3>PpMN~^?IiOZ z-i>-Rkw^^B!m7{RI)HH>%4cqd!$Uc&5e|gU*#yswen1;M7?0cty3|-`KE?s>|Gs&X zwCEBgY@cmbtE*-94+26w3cQVBBx*SD4`Vn~V}6lFDK@OOVY^V=wk0p@goaQMDLa~6bb^}T4`=R}qNR8b{g;V2D1u^(82Bb4vC9+k4!r204uzxcCLeU#D5e@HJZFa z5DPmHxvVP!TSf~Zg!wD9QFU8iXLui5P<3eQu>V7L&);1*H%R+cc;?|c!$mmsV5!=L zntzy|AVAne&=~g%yRTuU>ye9+LG}&jbx+~{iF;k?Uo+lJhbRLSf7_R0L9a}bt~=z2 z@Z}?3@RZiX@N+TZ=9hN>o8KVjjGLKF4;D%>*=+?Hb@l|)-;QF_d_PJ95V(?ev6}BT zW>w296_(4O-+0Gz)`9gv{M^?9pRej{j}KUHoeu_mYBkXd$yP2O!bXF=b>8pYe216o zYrF&0YPti$*>D$JxY@26dp6qR7CT$*fz_Ms0V%iJ2N-C$uS!MB)d}en?8#kTFK<-> z8-^F%O+p(y^WEZ$&@p2i;cXP`Aiu+%Bm5sL@CkIvV>L!sU3xw>mek)%^6wkZN8h1O zFGbzcsV_nvitAsZA)Ntl$-FzI8)xwEa|mCjul_#fYU&70*y8N?=6=4oxxwt@7%y!I z2{*&E_YqGO?jdmF8ld5G;D(qhBB?Aq8uz3D;=j+qNO0}O8b}7<^4)&Jze>bp<~iQ> zw8ryJH(#+gZr%NmL#TK}TzHPnxFxR>vX?AYAyoR;0*SJzFV!fYVb=XBi~nD+i4NQU zKh!|a^zu9{-iix)`SBYi0MwtFMDQoD!TjynTb$~I^66rX3M5Eh$N;n>!YmbkeUc1glb@v zXB%6jMI|9CHUR-T+ z)-vQ`)S_LB4h$0=ZMF6-PUdepp!~^`w65pK&!h2_lG)?Y(Dn;$qqxq;gc&GmBBEj6 z@55mZ`_xA?zR2@4vG|;_b{%A?h0qfELHO#Ow~1r3e8Q!a7hs$Q*%zxN2WwL;sKa7! z$vBJ?d2}VrtRJt%tbOJrg!Zi(x*YGLcB$P+ar-wtU~MMCmBs7a%RJ$o#S@^l&&*uX zhrwon_eCh)6^&2X7@Q6L6I*|ZPve4ld-szX*W8oF1>@YC)WgbYKOpJVx8z}zjs*{YkE2^h_Bw23=9jMaj^!V-XsoJgFl`&Q zGOc4%)SLbsxwpX{4#t*_Dz?Zt3e!9mS1%&kIt_~(IMq5>HuiCtUqm1VbMp9g5!}HC zexgC{@>QP8s)cQ2OvUOTn{NbE@rKiA2EO8S+Wr`Uu=+%rMK!7pt)32G%bBKb^Wg;2 zsXA<9wUDm}t$FUtMc9NmoT{;qwFw%92hs}WtQdrYkcV>NKSp5k;D=_;p zuzC8$6-Hx!5=&B$2aMQbF>b7dcZiS3lxn@JtqG2kc3w=f2Qm1n? z#u58YKUK(w@OKm`A8^3Swwec^if~jM>rUxLC^y&GXmgzAcX^F9u_9;_T%RBC#MS90-%Q5Dj3YYvR^%7ckpuK;c?K*;qt!S7LS2}`GipFIMp7H%inO;GU8#;wXCRDje52H zr#iSRV^MXH`QuAov*Hq&3wRfi?w2x7W`h|Du=94b!hp#E7Y8fBsINqF?1*wJt-;}1K;gRD)q zCwe~|fn?0s5QLwPfr{bttmGpGn4kXB8tV=Nw+@TQ`-wp^T*Dg38&o0;~jy+1Gv+MyW^Xvn3 zGVKF)ab2BcpzD)_4x~>wpexcNoHd|3)tuQ17E=eJEn7@U3R9$WwP@3E0tu{DxXs0* z3$Y1Njn!C4+6axp3S7bUq=7gHSw+Ra#x!a8;VLKq&HqauV7nj%70~!&$;xZmH9ow1 zJ1~gPo_KK(gD)ya*L3rWq_{78FDFCa?DtxPcnE({QZ&}&_3mdiOfY^NfXXq^Hrvg~ zY>uNymxI}b{>)HwwfwTqZs|dCizQ+V6uZ}J&U?QJFnEf87-^Q1TKC#fz4f|s9NRTATMR{$sH zZZMLtg%_asSO)h!*Qhm5g0!<89!PMDt|eitR~t1X2u;a{THSKZ9(T#zW_gpfp4PXk z%tL0myAqEyxRIf&iv9ciHz{8D9iyLo!h%Qe>TAAa|gZ1|lr1l`>1 zY`)V-cNZqfXtSPW-*;uP7OW)+&Za$?Lf1<#cgvNIUMm|kFD~YI;rKF{>6(zRYHPAd zrp@F$ZFdblOah4Kq@)H){!-GcWIn!}4f-P!vHCdgOq*R3iv;HqKelqo0vD{^+D8G4 z?xQEGgI0k6TFWon#l3OX&BTzb7LSk1&r6&=)%seKH;~Zdn|i54B8>^v` zR<)9(Pz)cK!)ei4p2u@5h)FDAQcw45Iu~q;Sr_D*?iKe*dHrpa!4fXEl^XYSoyEY= zX?pRruuf8IJn#^VY@5lp308$>n%!&?T)hvg=BFiQfifyhLf~jdC(5hF9Kk)Uv3*hY z2uy5b&OC#=osP!Sp>Byv=gxB?0I;6AoNU^;% zXN01Y)bqz7CO0=v_t|>aUhEd0W^A6WR~d`c4M4L6ytvX-lHz783cZYBBD#23++b+g*JKnx-R5N2 zoaiH`n{Dnh>?ht7Bllvr*cn}{)rV;O{UAh_$Jt^mVm}#=r)`}f@g*G?E>Qllq&m*$ zzYB)Bcy@=UPVY7=uYK>s^nV{>BTTaagkY< zNsot%N7zBO5vE2IZ5cl8Xw-*gnhz&k9)(1y*bF`w_{W2J>k=ykbJ;#=c2j$?IcZLt zrJ*%xw+6=Qbuu3On-&h{npS_L!p$S8B*g!4$DMX@pWzhYL&Ov8)8E!Ap@tHs# z6=&^#WIBPmkIHn17On!7g6#cx*zE4I$EC+75zxX#@PRD9XR98@{)TkX!`^1O-u<<_ z-Q6{+T#7$0CiYTonx0waeLDV2H?H_u>Sp?8#UA9RGH3?tmaT6xp5+@K-w2mbxGts3 zf7~sMu_Fjc_=hSAaU;lLcXKz*zCfDU)+6tW@pP89=bgd0X^sHBpwz~TnGKB*KQh+6 z7gx=v-3FK9eAQ)3i$(WfE;Lua%0&B$0daGORTh>ZZlMXA&6_Kl;j}SOIX!0*@Fl7} z`HQ>7gJHcjDpXYX2|BBVLE`!$4(^uQ%{2RZx43v%Eq9i$sNvzu_L9{T^{~%eT>SmC zghzKv6M=^v&XwZPsRL+@a^EDRF~Z>-IH0$IR?X}Pi@40EATvuZF6`k--w--%PTid4 z#X?7&9bdXnNuxL}+v=J8R?>PDSf)aJDFaUX>3lS9(-e|euG@?@F7+V+fnjZlbT!;e zvug5&jdEZBA7hn=A^Ip zs@5C=*nFoj;xr>-CMFZGYOoQt-uMQOOI2a2bj=8r1oF9O1TucSttK{UcdCKJL{JSE zC#l)vw`x?E>s18QEtc8C#Trg#ppV5#>K!Dao~g=Lxg;k3m{7Q9gB=PherNVEgObbX znZ~I7E1;NcH~&Q-9gB5cu{8AroHul>+!!%Qc@TtdwbSTqm&W{{wWcz#b2;jhy|bK@ z;wxL0M)6xWCi3e=YOD<9*ZE{Ro}|-RADbv)z>C3n<^x$TZz%FidrF?pxRfC4TUwQe zfu@M8AWc`(kwS=9be83M$t#U?z4LjxC9r@IwT-WlMN&}KK9`I;m)XG?{%ARf>RTBD zG%y&sr`;8Q9E(b6FR;Q85g5G_TJrM?T_g~6R$z;OApTnJ?qH1FeWU?|<`x3mn){Om z8(&4RbLR~Z0f7b+=;3+m`|bz4?m2dtfHc1#%s4J>+)G?^dsJP|jllG<;0{xGw&lBh zaDO=O%4^8g64q0Gy}(mCSPzSOg>tOeGB4Rda>)I1I;#m?O;?6~?d zYxOux7dLo|nT>mW(eTozZ1tlEUv(xFFKv8mo_s(3d~^Hz9}8rF#Z|?YF|Sagpy|fo zYK>3-PXDHBP503-u6tR#OV8U#vc?^z+s05019R&9MB@)va?{wyXwTu>FuwjOm#!-P zb!-*BP&M01n{riJ9qU>m#rl@*O~I&zLd~7%T(f{?} zn3-zfEiG~`Y!Gb|v{clezCHcD80H-znaaIP!ec6LO3vUZT#}Ip1b@3HRF|KYr2hzB^9`S(6&mT_c0{hYx{?J#?N0b2_H7H-7w#rBJal!kG4qm= z0KIIOk9?ywbR;CJ=`$YB^=seNR_B)8I@CVhZE({a8(TL_72 z!~QTzdbX9`9GOL|B}5;ct|Q~>xv7%EI9A~`$Of+y-uIlQ_t=A1<_EG7)9XKjsS1^N zah4+Vr4~;zl;Swz8y#ekVG4&4;Onj(sQJ6P#D#x6>Q77IXbqnR4m_!#S%GIIuUN6p zp&#-LLwRU>S^&GxX4Mj)oJ1Q95%>9BcWZTfiP?#&=RVc%YL37VW>-zPn!o!Os&cFs z7*y)SyiYM`)!`CP?o^oQODo2_o?PYqF1HFTbhF90KPt#v$^h0MFE)!EMk&Ugx%>TK zx)mntIjBZhr3$hKP9L=D9ks^DOcHd&ztNU3m-&Hg#Ps^lV5&kTUYw-}eW}IMPn>8- zb&f#(Cr&hf#7#7RxaW^Q+;-pitk#!J>`|nnblOkmr|o%jI&J>DA;Phf=BUS!4+1G| zW3;eA(e{*gcqVE#JDzgNT%!72PdROXP&r}ai0m1RK~Lmsd$8bS5*&r!9VEJzeFTu@rCL7zSZD9iJsJbHDAFI@>l{JDSy;xJqoe<@qfL|ZBjU^9~B++)(*@X}%Yc#Wug z!JYBBqBiGfSylO)uby*zpS7u6;>Y1{t>Ohwn|h_@!HeYp_V*Fnr=9xV{9G5JL>mH$ z!3u{}+kbZy zuvP;4C`|Xx@KB`p$Kd11n`6m}=q~l*BCpmyP_0;Jzt%1cVk#$37`V#CK5T)50t#aQ zqylT14GU)(z=x3{(LPJ>D)Zs_yxJ^wbKbVZ!N|ob*=)Djitm;v=d^M^$Jg-CbOny2 z99%`QSguq+H#g)ZY#K-;R)0RNhhu*QA4OjRF$vq9UF^q1!Ie@bvP4ua^Wg!ceT-MN z)=?C|5<2gzVGM!!uos=pQR=*Bz3|x=afWt+BX`#E9>ofFo4hbSykZkrVGzH3urw~^ zRT7Tr@yb)|!G^7ToPb?_f$)|OyY>=CS@=W-w4Wv7E%)HVT1`}(pZg%xmcYE&6F4LV z7<$=i_tox&fvNV}2G|G5F?|!))|szF8?O;^0^G1p1>&_-A$&12woYsc)ps+~?m>x8 zRW)MnPggYzV(>k%N(4_X3D`2 zSC)bw)|LTi{J-nA^&~p&x^1{iFD{+3VLKKNz6~N>d%U?Oh#q-QAiW9(WhB3rThG^v5we2`2W4s7aoVu^dmRYI3qA@gcbWucXJjH$GBX@|7l%KVYm z$2XrJHjjlwF^U@#<_;SwOOzEg zZm%)IYeI573Wf*btqv{ei$U#gH3lo9S#JwVzF)(G!2?}|G@%6R*a9=Uc8@M-mbxGs z<3YlYiVE)C*q{jAVi#NG6J%Y`6;$>HhvEd6c9XbXtD3hGc%84yrDErS$n6pk|7r+&J7X{LyD6 z1P2#{xIYe~T%5G)gpV$#yT9b=Wl8((W5ogGt)kEOY2Z|HT6K3udV|sZbq|5 z(Sc0FD7N39doGqL6!3)^iqMl993A0&p8XPed7OwZSWnv){$;6Kqvi<25juUK980({ z`u*L{at8icr1!E7aCJb?VsIC!)d2r6Vk(OJxZ4n{QGpAk%)J5KC16^|VokC6tXfi| zb@d%k)3SQKL<6j&T*aUmkADlxvoLYQiRoB!0ZYf3n2yEJ@g}Bj5n`}(ZNK0Ht$#4O zd8MS`&R1XiV?7e18gFv_ZSWRalOM8z)~92VOI_Oam&gW1$7)urL%WU=(Rrf4Smqj4 zj1p0$t*$(5rEOjp^XJ|k&CR3yFKf}t{uGwux*&gMTMjaeuf1ja+Sgazu0zapb;BGZ zR}9decj)%C5lU*UUB}o{yKhqCLq+0}*8#|s!(H^X9PSzhP7+eYOS>V;03CXc=T+75 zp0W#844jq=)pMVHbJhqSWD8XBol3K-=r`ILS71#Yx1OkL*L(8X5g!cgDu-Y&F=`hj z6gMD{f9Na=(Bp|N^4ePDI1`CFRSL?u=bD~rYH0hw#+Gy|?c?fgEmlJpvp_<5J+D31 z4ojhX2#WzKJrE0(%K$nNDL@ArpS>yL(IE>&^UFI(1iMA|4|p7omfA)0v9iirUVPOh z28av~nXcx$jagMUWh4;FZ`LrglK^SF40XDV&LA&rrjx$WZJH2uS@>YE;113>gkD6kp$Q=(k{ddHk=qI>?h()T+PYO#m#6GGl$(NB-BI^9x zzNpH1MYad(lWn!u(@u{iwy264ajqqQaB$)96_&Bn!Mq*B=S)~FW2FH~@F?~?F z5GbcyLg=HMUlbHYPlKlR$)7&leA-7{JQIcAszEfgPi{Kp>uBOM!Bg*(>tP!wEgq1tP-xSL)+?U6Y8%9{_4GU&F~SzB%r|hqCkJeMec6Y4yhFOx$D;ds_C;P> zi@eUHws5sJ?oY6&Ecewb?J=~^vBJ~Y|CL+kS#2J@c`vZn>m3-;w2x+7qAC6YX641( z@?r+%XSD1kOv#J4>$#1{e&<4Y{_*%f$H1tbHGnf?pxfit9qYlrBVm-mG)Ew?$PxLs zC^dqCrBZPp6NeDBvLt+2BqWdbGWl&w;q>NP;KESr!8he|%ianV$ta^;Bkzp-;UGy~ zWJLX&y<`8ge*Y;P(&*8H&`rg$D9r=XC)8XgMF;Ie`>>hnKS7m{r5=@-pExu|gpcPZ zy6{Eg=I;f#Q-$X5-AA^$>+)>2`G+W|-=d)Y_3=%s)!i;{_3h_;PgFj1UzE)ge(XwL zjs4bYApSeo5cwu7BM>W5pEj(ogdg6pwq$b>aLgNoNPaeu=ig#bdrUXqq9$)?D3EKw zLNH#&7wg;Eb~#+&HuUdmPuhHoq0uPXS$Y))dj^40T%Z;x#jtecLdv($? zT-~1F(y!~q%~x94YFwE`2)G*d#}CP@*oW#Wz)Mfg7fmHL#O3k@pL837#c3G?9Q!XV z4_7~JP{vA-!YNdujsI7I(e@uwl%n8}TVU@AaKZtyEGn4cO~!Jt9JO0lakZV@hRKf} zbdDg-)va!%yUy1<*{mOT zWLbvU{dKlAjmP{09E3L~O;o~g{F3$6k$O#Hf4$dB2HCf4g(+~-#33vB{~Gju+m~KJ z4P*_1)V2=tpXnk{t92*yx7<3h2V{5Pepsvyj7M@R1zon0^I#K-dT};08e5bNjm731 zB4vYC3!NqE1F+Sxxp6F(ZQcIrrFyuG(~>~Evb~earlE{7W8ud8v098;HYlLqZ`Bax z^%(&cz7MSu8zFCuxpmsL6Sgxa4(rJq*@MmE7B5ej^L+@LvLo%y&7a8KR6IWF6I9tO zc~}$3U~*@R>&|j*+|0iR663iVt0T&uVSJl~TK2Sz2h))V$xGCQ(|FZiLkgSikIr(H z$vrT1s^v|_q2jyRkAP=JIP{*Y&ki~dH_mLnX5u}B9rRYb%S02lvBIRO(&4yNw>Ut; za&JJQb@i@p#{z$`35h^a?o!4gI-M)Sbu}1blW)!4YYYjvl^PLKeMA)QGrEGj&fs+; zg_|WREkBD3OX6xZSIaN!?3SK_(K}rsZLW57~gm>9t_D5dkgLs+W@l(iupjm^79h5&BZbxE*AF>>H6v3S-x64J}y81 zaF%IVYF?3SR!{e9vS=Rqn{|Smc{lp?w^6o>Xv5QWR?$j8h#T$4*Z=kP3}AS!5iRz~ zi=dv?xHw;Ay|@^+opaTTDN_8&BlT;C3DLsqlP>)7>inu=w^U{2WM0AE!#^Mv;FnM(~iu0 z>*@1nw-(~&MV|r>W>c|(aIJ$>&(d?b!_94a`^DK|vKWgbhb+ajWQ7|yeA+FpSI%XZ zB9{x-g->6Zxyq|sQ#DdJ)g?UOF7B4w%{2RZx43v%Eq7Q#x>&jR`)LUs#QQD(d~ue$ zr&A>chpUtqVe%yfZBF_w#5B%Zo9|?*r+5Y<+q(IyHU|XJ8{c3F9mZ0jAcQ8UBm^*i zysaWLX?LnXME6%g#YkrM_^k@f<$6^KQ+m5n??Wz3$i8pxua|32H*J^BVOM3RDHtA@ zJgJzxfMCZE5M85&(eEDK1b`<=Tv~X&xSiiD;AZeHlWKPM{U&?h7fkfezpE|EI6voK zVv8eb%uh~|(PY$W_7c3X*KG362Yr6q>Nh*hPQTs2%?kSWWN@Ag&&~nK*2nX9 zH*IwgLjL$B>03;l4u<1ik|bx1k0-b!O{YE_4M&4^vrpB|ESBH(x`U+C?Ti|W?ZT+` zu7BQ5`=d0aYMn=m+`BV8iP!EAT3mWtDjjxO=~@4*akpHXScmOizd7lS8@RIADEZLt z^zgKOIw6d0LP%6i0e|Rrl6Jq{8#iv@7k@G8|ErrM<954~G;WuV539uwv$S^x>5R|D zz}^|8_YXUicSa`6aFCqiu<3|9oT$HP10w0%TD|srIyoEk`e)q+6!+r?(p&@4A8BjU zPexrx{KGceJ#FD&n*iOxS<>tdCXG4HLvmZ8F(CHARF77(an>32$AjiMhQ=1Y*2fRK z&F15W6`uJqFt%Eaq&+!HhW$}vn_;>2ExVl);`Ue|US(!Spu$=Etb3jesDpbrFr9Q( zE3hg4MB7;a{Ezq~%QVdbj^VgF#$Qx>^EhH74n(H9l`P*4aPv+r@72@xv0zIl3GSOo1egbUbc12kD@3x&FG|{ImY} zA-5xDByHSm9)8U4emvY|>-lp1dGqm|rP_$Pj0de|Yn+}pzVWj{)vZn& zo#A=f9;d?whQkM1)hYcxL0`g}i=Sw*F5R?o*6MZJqkf;IizBh~#Vz#B-QKh@z%Xwn zeb_W86HfQ50I^Z35vxWVv-|r^FcG^fw;E#Ac)y95yb`I9tZ3lQ6d$-X(?{-_mfdoG_ zxGAFt{2*-&&M}mj8x!7%e>5DlCauI2B&`jlX*S!L0~Y<$_>nbPbv&YNeGE_BU7z*FIDeAXVq1$D^B!4f#> zOfbsEJq#G!C$@yvEBlAb=a=LZm^}3xxGbhU9JgJK#&d>P%33;s8oj}&os0+h=o0BN z7>w=_)^Bu2owI%qoY z<~W!eG!XpbDW$H)3fo&F%b|+o*tgyBbdAn8_9XQbv_!nhV^5% zqXvpuUbi-=HR+G=!aM#bTVj7LOo#omwAF3Qz5la&ZP-XBtx0<{Y&Wh~o13pfY!92& zkGc3Q+=w%tOr<|n_6vrM?&Q3ajz`Y%;uGqy(L0B0-)&DC5L?pu`2O@Wy0ZB5JNcFL z^9#8w^dE9B*?S;YM!K`cBsOe}lh&x!>AP&!&5xTErUIA1$G!7bYv9yFZ>>=y>7I?p zlTMo*cDQ$fTXJogH}?I&F@AIg57;qQymJA&fhaZIajaXqX}39QHf0M;+Y?|0*6M6L zJcovI<|R>uX0iti;q@P}j-11m!vCW_{o^hF`QhVRDDTDpnQA*~K-q`ge%slfUcDVP zMx)6YW*O)&n#$hihZ~A`W{*lH=r-l(0K{thxREpmXYCfI*|Or_Z@!@c8<&woy}|i- z(8rRi?7G}9wqNHgxA}uLmy8?jVKY64kMFWsieP!38#m6A@ou+-{y+E`{grix(2vracnCZnc-YN@3DSQx{gRy8juwsgdbM-} zQ=KAE^aa}l^Y3it3_PfpDuyL_N_Ui&`w+{(8rTJ~}@xx$wy>-2wsmmnN7*nEx3U_uTTtsXy2Ji(bk=n))~r_Q)p`@$NS3rF zqH}(PJ4Y1D&biB$Uvy08lgXsrZ%Tu1PJ$Zaq{Mo)@mZ(e8Jzk2Nq2K0)8S~6oMXUv zR6(m(Q0qgulU^rDs{6FBR$N7hG#NEoh+ksD6D}n?kL=8rLk(&kN0tlamQ#ea-D)6^ zan{F*w?XlHS`iNyYoye%t4>}sl;|_&YD~Br1T6HL-9hJUFiO(KDfLitj+G$11Lzzq z%eM`!4EZZrS%f;gR3|)|e%Uu6J;tv^LR~Q{zjHEp0VAz0Rmd zG3g9W&*?v#?bnZ|_t5_@OLWf-qWd3D7x#uGd(*WpYKz5GMtQC14IdH)9r%i^90MUF(Rrw!GHXNW_V4r@Z=Qv zLh=(Wg+4597Z1CvP?BDwGZ+qr>7d!@W}EwLxBY?s{(vpai{0h{8n$|RBo_}MJ*kluQ@>wHR-}vsom&)V>CYNrDxb!*=EZ%ID0@ypLeU! z%;6J0Js{c&6~!Pu$0yA1WC;rDh<_kpJxY^3)C6^VJxrw7DX7i)dE*QL;WOkF)vXGD zxPN}u!aRdWFAEk;BBPD<%qp8xuhP?x%bQ#bkITHh9n4TkZ!(yqNkinAB#WCnIIAMY zkGL-^HG;a>X&9HwQIuoC!m8JA!LFS*IGO{qZ$+60nAOrAT)K`7ujJbu2(lRN@em=} zZht%;r-&#b$|~oI5B9dm5K;8=$)G)iMQ3fgUM=oPe&}8;>@jRix@VoVJHmFGY#476 zsa*@XpfsIqtl+xo*{}l%>HGa83JvwR(M#|UCaJjy8R>0829W_gp+#YG)>XNF>Ig8SSvcuTww+P$=c?bu(B_oQ)_w6N7OATOj^?pFlF zvSZO$VtauePy-xdhoNcpvHNgFo72A(>q&w=if#fQJWlE}Y9A{mi=O{^0a@o#Eu8AN zE%4s&oK4P?l%j#vVt-Y<4;#ZiG6=}YjN$ziX?p_Geum}8`MC3|v5vXCGfB^pUm%ia z3Y%QA?cb`Bt80jYPn2>-I#rrEVHsi)H zolM|jGvn~x5>iWckDll+p7w=T%O82bh~I@v#r_wTb80I>R%h^w9T0 ze@m8uRTFNcbRpR%W7@3!g%8KZ!=!=CfgU0^Nw-%ye3{BC>Ike}x=E{lHlcjM2m!q& z*0EPQI>+J@xro0O>saZZo%gUt!<#$$qgFC-5R$0@CUn@u(z#nS5^`o@U4 z%`9>j22RA=H91=7P=P zea-^+xv-AXXxh{Vhz6Y}NPeV(XsT@FSVl|>aS&Zb%o9^B#Awp(H-={;>;cjK9;y~g z3GQo_EPvz17lIb*s=tdV z&{qbuY~c%eFw1JP7OlXqu4GdDx7e#o zyNzU&^ajnb7zK=n#~kA+)K{B|3JtY7h3m0w1ruymokO{hGea_-7!@kykA3mpS!dYl zJ(sx@qH}UzNTry8xe0zlq%+>Zp}n&nP9adA#LP^uLg4VM24fu6bLcxeo5h%7nQ3<0 zZBC(-eG))1_$&h_FmTp7yQmCJxxdXOPliAs!Wpb)VuBQ%#zWp4 z?=Es0kWh&89o(gIn!TVO%y}_6Ga~-Ui1??F7u%;?D-7*mMPXrZH*w7Z2N$r)aTg10 zW1`LdX=@PouK=1BEf_bDtlJy42WC9`XEvcvO<*nJ(Z>xgTrVlPyahOU-|n4tCpbHA zbV5CkL|ADy-$F#*>O86PkSt~rW|6ytzZGUc;Brqfc~a|JX#EKHBn*2p%%Y}*Q&uX$ z8YdhotHJ%v^om)juq3F?B4p|DX9m?&4iHFRsz@U{obmIvim!ts$y*sA{E-`sQTnsNtd1F}#e?iGQatFtN< z^CjyO*Dgi?3tkZ8T`H!aX%oB#I;)nP3+I!&h-nKAc*nf)zZJ8a)CV>kOr9Ie9E!H^ zs+8Np#azPV_#dJC{HL2d!*k6ddjt1DVl+@aj(cu2GtP2jL&`LT(2vrD zTyKzSJ?anA&bT^LERK7>>{+?;fqZB)iWVSEZ-TVdY>?+aqGaSQTRLHU>D^0cS#N`Tb(N5Bq5gM=QlH z!7rsUF!Vj#xzRzQG<6I2v2N%m^p$Nq_dMHL{#h7mVdpvoSXgQnf@TKQq|7n7-wF0N z`UjuI49v!#)sS(pQ7yn!Lapf@{bjJdjN;$SJfXlJY!5+J-%}8*R!9v zBrb)|&`*29e!?EJ31ZXBHk{3IvDD*lT>6mD4E&8+TFCDX^_!$CY{^oexg@#7Yk4z8X-f&|^~b_Ac9Ti|!;*^f$z(v<#bGdJ`Pi;mr! zG5usV`5ObP#jsp^p5)FC&VjaQU%b;3gE-*xvv4j5c_FYuoMI(JrQ8CZFuCgrjEsP5 zFoL2xxx@GySL3cw3wK){1?M;?*+#-M&PrBE{kqU(^^n_)^|5$2Mh(tg6#(@Qfe99FD z_axx#R&O}Q#bP-frce_5>th~gt|zecgC!ZP7fP)owK2AwxULEV_cvP*`9QEkFg0PW^)AmA-*go@YstrD#FAp5A z`B24iiXrX{#M1CccIH``=jG=nXCAp*!{%A5j|+6GB>&o!hHjUe4AXXkn|msh<`uHu z#Q_SO{Hsi~eTA$KC%EK{ZmIayq&~)tHKTTldrE&n*4xA693h0(FUa~}kl=P^T(tWO zDGU}X*NaD7XAyU$JiP|}=|6P2QTp*sH^UXn%bP2{3Ys2HMd_sZsn733mjUEEV;ADK zpYp3{RkfY(!Gqb>4;x&e^|&_cqtwgnJ44%6z`?!j}O>VD{76d)PvC#@VhM$YG)vH zb&L}%#_qc?N{x@ti8-@zf3&OZE{gZkS+H7|+A79P}xaWUPmqXgJ z)F11T^>?_yOTOl1VbUH!639ZJ`OD5s)(c4wqDKgr0T!njUj50|H+VzjX}yDm*6!bFlwVTy3K}vDw-f*uH@FMx=5CsO zfz8OahOsdlaWQMoF6@p{hQkCEudtclF7ebtuQ?qyC-c!5_rVvxZJe@XelZx&6xc;t z(s_BeRdany58DP9mw;2g^UB|?^zKO;mnVfG%m>PSqQ?&5flt0)>b5~cr;l`e7RTHdoT0munc~!lf`j(s_yCY42^2@Jbc;^$uRYbUw zHS4+SO!=Pug8%u*(}FT!`4v{p`o&N?ML;Qv8of5!7SEZwgk`dJif6yoYt*sOp*N_b zag;sWX6sM!mVGP^XJ@MyqH7_sI=?oK>bIq1*(si2eGA(XS1VR6j2G?EM%Rn>u{2>_ z=F1Je+S-tqEE&clGUi_0gldoG#t8yrOrNn0Tu?1~)V3PYJB$deb<&L5o*=z$y)Q0H zQgNv03E{Fuu4VzPDRYYV2-c4~GPTan zIBVGMSe#Dz`|NNnq*g~9jI+M2k7HM}InlOxU(A+F>MG~E#+wte4jRif%w(8pKW>X@ zr(FvS^|xxM!;sp3=mhWG(F5xI7<$qh_mNKGm@Jrcr^P&B+jZiw(U)Yj2b%>wbnKdd zLO9>DoIhQ*H#dJiEmq3!G#2YVgXdvWpoC#}Jf^!hsx4mN!-d$+@KM?Ctt$m#%zD-% z^7hOZlB2)?m-wo`hFmt=AM`vlhn3JP+0QposZ`5(43|Sp*35DlUxto={#q8 zFhopy%_?9FC)hNNl*_Xg;cB`foV?#Qq67R04Bo|CB8=7+kNb*$Z5^!>>2}u@&jb3X z!mce=cr$E)hbX}bgu_n?+i?QHhD6n~8qgDU3{*WYD)BZb_62mxLtO?Y@n*X@na$CS zmxEF?wA)-Qzu*no)@pODj{#E>jt87A06ZN1<>CRm6`IytTquxm0KcpD6zs@{7LW=Q zxwaYzB{ui1&<%g|gOj{URq)t3J*f&|-F)@8v?al4Kfo)FR<^hoZ@>p&=pOZL3$H-I zK-ui0!@79QN3U)633J)qZk`@=7_(Da_Yc1ZN;lsrjOhnRlF?>O&zNJ20K1erpvg;; zz%o9CAue~zRRF`Fd2umE?EW&b!|L5++Dz~WZWsQ8*}S9z=bV(PR7q`Hc?;&9DXz-1 zY0*;zxAt6O@q1Lg5%$_L$d>dsu(ub(7e!9+L;l%Eo&YRT&;F@MP8-y(AiRCb$Fk@wu zR%?KgRtm8!&hWO|`it1O)ajd8+v#XLErsRnn2l8jivxZ*L`Q43pAbau4R^6nc%rwh zgBx+(^zSEZ=55whmePcysYK_}Y)EHvk#;e)JGR%m9r28I1p)~a(n5(Sxy!D9JlG3rLF>_{r)GxODbqX*Q#%wyYuR3gpdOxfG;6h< zK4S|%1h@;E(7|jf0)2gK%Ck4@Wo@une;ICW)7vir?Uq1@aR%``L8!oGf|=?;m~t>0 z+F`Xbz(+I@*MP^fhIo=nT+IjK@MKv zw49d7c<^s>g39i(9%=Ryn~wjoQR0(}e5`6XvopF#`Pi&hSIg`lo1B<@Fnwdj)%i5V zE}%wGlNgxZ;_(il8Z#>3LRdBDab{b9;@#pQYRYCjRUF+dx0`A9^=@(Tuv+dg26e)w zj_7Yh1)$u)3=0+e^-tUEwt~Nz%hz^f-E?Q^#RX-J**#6)=ai45b8Pm?Z0uHMe0ON- zY}!vbu?PB^a1Nh^jlv%#E*96kk3-?NoiOv>!48R#6R7iR3J(AknP=S@Tqc^tnz+PO zBV^$rpv`w$iB0k3B{H!Bolh8JoG^mxjc>Mb7^6%&p^Px=1U7!WjUzm1cj5qr1&V`> zm*nj6TO7*E^(qolq(JT<1epw3?rbhd$l>20tb#P*fNmIpVja%Xc09YQms&)lyz#3g z%+B?a=fHH0=NEN^COOyGGIj#W;I3(f;uDoCY62P{S1>~L2$UStl1E{RgTRoZSFuPZ zC`ZDW)iMBW&A?fS)>p9-+67mp*Na6q zJ$-wneJ}VoK2{Nk$pkc5a-{)=0g#;#20%cbrfW>Mv@IuBGgXy%JDFz|_LqYR&K54R z_-dz(Gt>2JslI9S zjU}{5W(=dQTYGI2G=?2(Z&MpL7*w2SR)Hlx%WN-1mUJjrq5_XQzpScK3GvHhmKkhS zkUUmenMt$1dAvsYGViaNB{V}sWr*349IK1MX)-D`gyWLtK1VG)YC~M*nbl}ZQ8n5U zhufqfjJ3?M2;(hvEsWMMb6W0bgf%UB9NyaYcVD!YC~7I8Kj+IHBV~IN9BzKZ7Q40Z z?vY7W9#)>LniHga#iWr%BUFZ>B8RLdK5qiq9(atPfYmQ$7nL%8qKOELVyBMPtX`2f zwg)y}(%2rTJQ-s(G3}Wyc04MUKUL(4)hFRk6pO^QSC*K8`ct(;cU9aV z|IA9~GV;+}b&v*z^q<=GM77EcIE|twyUT#U;oe7MhhHnDv@mFMGoR zqbc9LYhVL`VOuO_~(mfSiwrWlGimPjtxz{ z6ehy4RcS-`_bDyN%EpsT^6gMsxIEjFZYZx_5kb$!q=m_|D``OqU2*LnT7bU&NE^(( z8EHZJb|NjX(l(^4+_wj*!&)1QdQtUUL0cz|4L%JCL3nrfEI8-Zo&{rV#%ZPI4x3hB zZLeu1%gy5)o@r(Tt=|6YBaU+6&Bc#z=6Xy^?3BIzSF`cXTZl@k?tvR~l9~gdzTKwV z3L}tP>~87cuHCsHq2p}P`AKM7Z$?wJ??p?DkL7(j2bGx3x^gwwj$H&40?H9kp1r$> znjEl;-oPs(WFHZSVXhZ9UwId=3Z%T1S5?CqQ*?>ND3!c=%ADxdxU%bU7Z2v-?#9xF#A)9rnOd9XyU_$=nN! ztw$Szv9K{w>HTq8(yYUlF|FuETH7CtX3Pp|X`@eV62_p4-znT5n4Qrf!mJfrc|Ghb z9#X%a$&cjRKbc8hV3Nem3yJvJge+#k3bSr4nSTNPW9`ylo1OYV!T{^n#oO70!XeQ;E4Q|^n> zw^z9@KF@~bKIrz`wLCH@%gZaaF88G4-@mMbaIa0wGJzU9nZC+#+nL_lRePG=iZL6T zzRHoin|5{27H1i(w9jdSxHda&n81!_8MM6ZS%$IqH%kze0PbDT5+3hXs0-4yA6kNQ zY>Jj(0z0D)Sm*X=8LqTP>HrCEl$I)ZcS~K6zTF!aEO`>{jSMHWCm?Ra+PgS*xqllq z3~BGB+R&a2RUeqStLlMrZmoJ?%loS~plg%WhKb&3wJV0UTT8HxJy#!$z42Ox^X|Tu zK}%b(Hb`(Ewgl|njP-z-J7+eK+LkSS_wUWxpw10i8_2gyYs2}sYHi5a5g*vJEujqV z+?Jp{+qWe+_a3ed=Ge$BfxvJ%c5|Iz{w-Y>c$_&T!|B`Hbz$}F@CHD`%1ZP-d%Z54 zo(*3YsDIbj1?}7Vb;7#$e_f!yO<)&nX(!kV^#3#WrQ2;B$(r*p{Qwr}>C^ujTtJaF zHp4Pzq0BOXw)5K zs6cnVJIS*J$NGe=Nk6gmN5`veUUwmzd7{IQ^c)+=#s{2C-25Kro%~pH7!&w#KQUU@ z-NU7i!EaFd*y#)|br8GfmOfy>5iz&z`fYuwd3;+9i)LMK(=NBpOnX`5wy!pr$Q`(L zi$UJpV(-L>TWJB~kyb$sw}-o!&cZ$w(A%uvY+soP-NOCW`Hs%T(@M?deZ8~O8{T=S zNxfqNCFg6kdGxtfn+&(bZvi6PpicBA+TiM2vTBK0%duLYMrLW-07G3gL+Vd0LfF=g zx&@GIH=-TC2&2nsTJDel>~U58P!}nt(=*(U^^9`7wnLP^k{S*2T;?7dgPOyEWCuDJ zM)U+)uV?T4W4A$6vwIx|Sg((BiW;b{XJ$=m zu=$?7Zn+((4jtY&e6Bd*_+^OiZAVOn>O#yanEOe>C)aIv7Z_x*T^40+)M-!LDZA5l z`n+ga16s?imgUyb=`-8$UrVks|FOeE=9|@+!*v^)2u$_MI*N(3_T-XNxsqE`Q z&mI>ST2wq+I|CeAJDu(U|Fz^1*h#%sI~}!p-GO)bsCK$tQ#)$>DJ2g&*gY4b*Z;KB zoiOM}>GU@3fC82h1zqQ=Z)t~Dm6s%|W$OF!Yo8}cV02!04$|#65*Xe1Kp?I~5hwV) z(>Ww#bozv(g`RgQ0nltpw+BezRH~2~Al?2R0a9`E#Bbf+ot;V1sk2in}Ar0{>F-^4&R zt`JN8-&7D&QG>vT`%Tcg?l&oY41SZ+$4!tvUE6aGq?{#|~Pt$<_)YS6oT zBGG4I{U*Ib$8LkD=FmCxd!M(M*)Xa)bZP=E+vOIO9Sm#>syhtkRy6aiAhYEUMzXq# zqwY89J?J{nY?>)8>bRC~_M7;*{t&-O53sHLCWB!0_)P}Gc&p!}XMirh$)K)-{3e4T zb^A>QgX#2}41)4qev|JVA(LxzzsXSWeSVWpIN#wn0o<+qCZW$Zev{Z~nBOF}S0~7j zxXsWhFPiKU5H9y?DqLh zvIb?p$*%W|6um0pYsqioKX&*{e3P2rWVh}&+1=7_vfJ-B+4as5YdLcW!Y~;JC-(o9wC)sqQz~?YR)Wev{oHev{qW zyL#>@K>_Q2lijM{WS3X9>NnA^eSQ;Z)#W#l2Hk!WY0`}koN0&OL?CqfO{7Jq-$YvI zdDs0W(x}^SqD{IIW~4>8-$a^J{3h{Rx8G#9>^Ir%_M7Z>`c33(kKaVvbofo=d(m&Q zTk@Oi7X2o>CBMnf-|aW~`~FB?6*G`5Z?V82tUSmQh@yvP46($z(*Erb0i29n4#HUp*lt?f&xHZ59`k~OEpmTX0>=BdZSc~r6~wA=Lf zR66@RuS!pw;8*Es7dV$=4wbix?!ad`unY*%QO?1WPGx^#ERfcCgT zevs$IOsQwUALVTZ&f?`1F!)xl;{%_&mHb$x^XC7fGat*&0^O8?!Z_ia%y6IB)dG{HQT9*(dsBwjH4El^F!- zO@0{zc?-`>tJg5!Oz2keftc^D?2+)T$0WlW@{V)cc~BByCpllY~aO zrzCu+`${TJa&Jj!R`Hj#zNa3O{BzM~k~eC5O+t&3-z0n->^TWNx_l?GQK8gY>tpUe zF%7C76w{{VLkZtHy(qC&xsF=?J@ur7uilpuf2fyC3vG)2l<>9YQ3(y|K9$g<_X>6R zRU(kiLTIsBB_|~|D0^4J_kw>Vek*%e((iR2OVX}~&XS_k{45Eail?R2rh+vbs^V=) zpj7-VNt?RIC23akxulKCUYDdz&F_*lYI$DTUu(XX*fPsni68oCdc^}10PuU&2a~ia zdSQ|lnI9&6OFc2+=gb!)zwdosFIS&OH9yI3d*e^AxV?k)xc5O56WT^-m=;I>^MC%S zpw64=>hmjA>-9(lnwM2`k83th(jZR&_!B$b-8IjflZW@q<^69j)A?-kI_j!M&IujM zXws2j4<47ZyJmDayGtG{MN8VGKZy8xaC~ucFdmIQ{`~2m zc(GZ%w#L_8E-wm45oK~W?U$#QIe_6DAxwRo-ESV(dyD(`)8}<^wwX4r$9w$KPd}w# z#;etGwI0cT4zLH9t+m1KaT&MgAAgo_lhgPGf+J@C z^kV;f|Kih#*)Ydki~NCq_%AL+%cGiG6P~}=90C`oi#zP2y@`1=5eLHRY!lu0lY@(k ztHTkGzz=$JIr}ym?eI|CM=Ac4?~K2@cN<*3ifCY-&)z01k%WPEmcx;GhL*WgX> zh-_q1h2REKjm!PR<1_r9V64uAG!m}Fp<#;yTOfWV7O7`3&?&Sh7Q zBhUV53}5fx2!{%{N{wz$Pp<8LCeTjSAw!*s7_PtRZj^B2(bRZ6L3T@LCVcdNOV9VK#uu~m^Wd^$MYyNRZ6BM9vlqEHZrc9xUijqbYWe5&-D_=!9mpdPef&@9sVNfYOK-bvWHjZ5JW!;cj%bfIYDs*NN7>(8)(SM`FqTR zlq&z~Nzwg1u<2p;1@whFHjfIscaxrkTfI|n*=CG3fmV$tfxg(E6B2fRv|2u4s0A3) zY`GXwGs1uJop;jDnLqpE*XQNtv4Qk3+MiFKn$;O>}GF1 zro9|U(*wJ`w^xTvR(rGSgqZt#Ia(oybqO61q~T!)#T zQ^-|AoT`NRWFU<|QNMeXhN9hD%MwDvu%F;3_+M_@Rdct*!ETywn<&3HZNahN$&yl! z6RVCcFL3gs(NC878lLQEIVJMR66*fTQ-jU*|Hx$$5rFnSM0q9fIqdjmCd}LFM49*{ z>RDFyR##@+6Ru3R3cwL8w1TftQ~5&%)lJHd8@DC^I9Nh=#44eS=Ym=WudLgJjaqG> zM0W~$!pvc)$+|!lcba#Kj?S!;wstKGMp3tkUXzuh{SaaAjNW-jywyWQH@W_<;pOUu z%X8Rsd37{BMSN7%1YYwvhi-t5Mn*Y3RA$)Yl{EoCwMmP_u6*$sx4nk^W!sTx+TqXW;!1KP0~%w_8_(Ry*+^J z#_8GRbhZ$Yk(P06TeKdc*M76!sMo?N`T{GpCg|4vYkCLCh_NLjAj{DV-UxF!aPj~h zc``&yhAh8>`Ptpcf59e3JL()1VX_o^vi}oSCkqP~?VL2oTZ_*fUrZqY8Ier^FGwAV zP%;n2t%9?7x%-M+>UsSB&B3o@3alrw39M=3Z;n*v;ZGVVK3< zn}y1C+NaBA3isWbJ2r>G5pe*C_aeBS9v-kOXH$^6Z+0hO8N~k4f`9HEBlFpp1)!}* zl?Wjm1orO6eC0+x@$5w`Ge;E9%X&~t7cNeLf7BY)3CG8 zk5k~~-J{cvKdF0ezG|lTuV)Pu;`^E;L8yMIo6&wVeNsKoF7vm2Zm8QWP=A>73yJe+ z72EKrN^Rt5JS5SSORWqf@fhM7wF2oloSyLplKkgN6O@^wv_6N3zL;*H&XX@fLB06= zFVKzFBBjotA8f~61no<2i#U$=?n&aPfUdF1bu)RKE<{?sg;EWPnLDb^rl-%dFY!uN zO%bJgNjpd|PJ1gfZMO2^6NiHS9(10|eeXL1w_uaD@^iU|PwG=k6&f6E_>!6hIDcAF zZvQiVrr*b4zIa1Ej4304cc1_2q*wN!lS5o5y!wul@5u)XfH>8rM_}A~V2kPeb={m! zUzabNcO4g9QNXtDXbj$$#4EW2esgc9yDVN$H!EI>^~r*GpCf}{>EiY5Wxkm~V{}{6 zp-Qx8Mfdq~E^={5j4vzP(ZlUX5j;|&sKsEQ%^%#Z|!8$k4RrA~c*Y7zH%sT6O z!_B;Z+9a}+W@KMmp)z*d|7ljslLbsan^B=!fV2dvtG`)pC6H=yFQk`))IAU0i)%VH zpI^QlgSs`VqggY*U-$8+YkKcm?C*mo`3`+`LWC_kR6oz7v>TY7v*L;PmNVMoNUEcW z7Er|ouqlk;<7v{+2;7#qB^U59tvqglO(odjpqS<`(K{N*y{{PT$s}QVh=YV)hbO-a zLUeRgK~1*QDSCrWISzLH0)gw>*>v?4$J?xNeM+Snpak$}!%33d%b+)tqkqJ+p(XN- zKzOIgqPOlpe`O_V7obwPKYB8L_M}jI@5jnX+)fA-C+)QFpGfqv4{*i9@`B{SuQqVt z`FZ|&aDK2{Ar?%8GhEf?OS2O3fhILbPiJRdACT6FeA;jk5XK>!Kmc=pT5_)UEBT!0 zbOk_dnT!&;&@i?R0@2zl?HZ+2(QAkURx}dTMXuuYWG@)H2^jLt)98AFjGWhfjY^ z%zm=_`8y0_<}3vj=-}U+FAray=aj6060rh;UAl#n?8)$o&*3E2Yp4ML4nqR8ak8UM zvw~&azX$Yd1 z@YSKxlIuBbAB5&~fqF}<7iz@q-MbX%CpVt^JOoTno9W$GFxR`UU0N%4*axSnT}`!H zC;Eun655YYERbxlYv;_}{}I43c;+;%jHULrQKFof(-YLzctnr+r_CQQsu6dN-@OyI z`M+|b-Tqht0sZHG?Nqfx7noU~oT`xKA)g(Zs#iiw8fwWoO_KzUt5a(? zW((En_=AWGqgwqV?5XIE`-q@hRCoTyQ7~;)mmkx19Yo5)^DYV@F$%j>iwcwp0)$H8 zG7sO+hFW!oBT=TR_N++o5<}A2u|DJezLl3o(vG4_*X{&$LXk1{VXJQbpyl@Z1xAWB z1cB#Gg=*6@BcevMt|QX;ct=Q6GhZ$cLwEthH=%V{g9U`rQ!%tf^E^dWk*q~uh@*IU zN?I~L#M_wCTMqKz)&zS$n;G(9Tf%y*N3-6XHPglW)%1P_d(?@O)Uf(*5||Cc7|mQX z#F*}Mn}8vBK5%q&q=pPmE(J&G@jb9$csxKn;Ou_7N!@IDpgQ)4l-l^zNZa6@5DDJ? z9%NV%s!JIrVnWY?-p%R(mCj^RPCfQDWNL6rLqkk!kcpg%`<>r5WXAVn#)pfT?>}BP z)?k`J*g#=m64-ve4h``S^H?=V<)QBc%U6SZbq@l%iLn9(K4)l9tFqxDW=POP`iH#! z>p~qw+!2|DR!0GMrI{V-B_I+~b5D(EAb-aWNoV)7Lt1FMwQ)LHN%dx5z5rkzN@H(> zqMjGb)cN7M-7Mfpf_l;1_i8>E?{c3gd92KM1~&-YIe9FU*&f9#3MUxN`F`YRW*gXr zAk-AS7W?B9T^J*Y&Az9;K$075y)^;xBqY5A|FGhm<`lTSO@UslT! zGc3^U&+_xx>~6ITUO`pL=g_rpVfql!IZ8F27W!d)2G3-BvU;lrkLrKleWVj0k=(Dm1ak7`jfD*}XA~rF9{{R_`crx%F^5H9tXHO|1xU zZYS=(UM}aaU%)_Wj9Bpa<`P)};x2(63$Yv-UR@oye!`87wJ#DJ&Zgg7#@*=jjJ75m z7?bYuYBL!2Os)(2%obbr**qeY{;^qTn3HqdfL^HsYaj9Yzr8H6<(3L1pRW;WQ~$hK zKEX@^Zk%SxW6nxQmm9Po2q^xrZ&CuaJkDZ-#5l-d&`(W60d7FYSuo4ae)ft2MGLPf zd>^DDAX*XOVVl2YY8k-w$Jyp_wm6+V&0uki*9t`KpFT&c52ou+rr!)=8#dcIyQS;l*yN-`Ia^yGSe+%_M1s3xq*#x9w zIiG)+HGjH0w*01UQ3$F1y364xq>jD9_w ztQz-ZDq{GQx}B+C|zi0rR_Za zN{bbmo*mmC5t^~uq(9H*_vP%WYm$1Jh#>#`^b`J{!bW@MA~}1rIJKj-nSE~FLB72i zAHE-70x^?LCg@D{9D8~yvS|~^#-*rCIqDU@bItOs$t8kw2NL|58h%>Vq+n^iJ-XU^ zKe%zXH3%_wcaqUeL+ZtfAv|?;-T91ijBx(60P3JY+TIM|OZS(}ig8t-E?qh5pinNB zB7jip4n&k^3pz8~L!S${MI}LC4QlEFYUJ0fAn@RNvqZkK zK?Qa2=R5SF$0f?U0#4JqYvnj25tYNdJ*60OctR`MB~wIO%;yYI3pG6!UsT{aoO#EW z=z#f5$NwJxoB6Fo`oDT+-!&F!nry<4T&*Dc>2w1}N+VIZ6qF54IJLr;kpWFLf~_-Y z<43D@fC{CmgWK3SnY`$E2ENC+2{c%2{`@nHupneGebE+R#`5R0SR%wh%;ZP_Rzrtg z`T?j+kzns?51{D0;XjR=^nk%s*HHbYb9E#Y!pv|284#$G^fVhKJj{UNe*u)@McbD*@ z;Q>d=4m3KrAi2Cofp)H42DUa8*e8fpd9jQVsdlCvXO%J6Ga#2tP_CVmKq$??duEUlgIS%L zvxS5X>u9eTi%p%as24x%89Oc*dQ(86>3~33@h%|=B3Jp5#Eqh625>JC-}p%iOGvbP zme6Ll1Y)blG=$u!?;+GaJ6JXdV7a4Zc0F=-i15+URob$#VgLNwAE057F3<2!kiR9I z{QPUQ-aw4h{{>D-Y$4#>eTB?<-8A<*qk8!_fG)BLusB%0bBn7I4?sRyAPsHZ9L=X+ zkck$FkIHuvB%;KR)8HJ$eXUAK&ty7AC7?qn<*ez`0Yw5V&%hB9B}4^P*%!h&`Z53# zH>YbG28d!R=cFu#`+UDT48Q^Sn zr(yD$_5ms|djjo*29)fP#a!T=u&;8{f`Q&QU$amUh%hQHoE%P;tZQ+x5|!cPupHwG zvxmD@jLg@rY0a2CB2{9?gqA7E$91fDO!T@cT+|)XQY2}Vw%17o9_L6J(QXnU)!Vq- zB@c;$inEc9@1Yx*{k?Iv9@i9Et2A0e60L2K(a#ahTaMv1yC~U#l3hZD!Dy4e#Z2NP(xX@ws%C4GnqZmaL~`a9ZB^kE>gWA)?sCYw+%Pn z0`A`Wd^uagY31i_j+PP=E^&!@yVj(JdyEdhuXtk+V@DCi$L;yZB2QlN$=hl?y*H3A zQMkr2-g=bNnJ|qmcO80PPF6kICXlp78=~>dssC=fC{3J zI4fUN{>(2o&vIM3Y6t+2#J_?6?yBt0jxWy@cO=#QFjutlw<05Ft!B8hZ4tZFswR%- zZMB`M7nbbh?RW=hpNgI&b23@uYmljV0}F%daAGm!6*4_|R%+iig}LHAGDrRL466pN zM==R5?4g8*?F+Lrmfi4ApK)b=kgJ+c$sdUYS7W@1)Dpbe*{`m;K(_MAFa`55!MUH4 zA;NF{1GFA-lGhoOoh=@g-4(2iga~|IjrP{-<=t$$Y1BAXUDy88^FOl9)nteR0pnE) zi#V%Mz4%w$F!4f89^vwST+XxnKInM{Az%=9vN~(**~z4%#&&1Z=gwwzS&Cbeq<&U6 zhW96wlx!#WB`YXa?4^zox1(ITDt@Qk@oBA9N~&`L;cDi`*rX->*LDjmNrn4D3MKf+ zwT^aL(`@_)vJR2or#SRmt$K`N1Q1$D(IrwzDCSgW+x_%nI%Chgl0AzS_N;Lv{c!^) zkPHhpqpW8!QX?5uWPTV3vJ0j8RY^6$AtRDqkX7%kR?|wUK#YF5H&)&b^mJDtoC%Dm zG>wJ7M_f_&84>*@$>%SPR=@naWcVahmnvacNqHJSj&{Zgc$mrXy`skoJ_dDmZ?vdE zBZc7hxVygnBH8Jka*bZOP1QO2s3OS_BJ4F374 zBp=r-wov*Z9UdSH5^|}M1I4=~>S}lyEt?Kn!nvjt1I@4x$XY^ui!11f^aqx9dAV*r zBF_P_iS+Cy0G*vDs11MDkeXabhK!0maFbiJtbkU*w6IV-LEEEpb^in=D+ugd{&4Uux-Mng9k zL+Cpa^GtfA3C5LzW1ZPXMt5L3jD55qrai<~)-h&8N6a&XKL#gKHa{sXWif^dDUU+K zA$9E3vh+%GU&mB2?qOCH644$+`Nh_Nl+yrLmaII-do zHSEdsXIHx@`?am~>d*;L$CK;hd-2XtwKu5SVPp@kdt4$751$TEJFxjZD*DNfwMCmo z-f<;sraiyEScsm_IkTewVjL)pk(`&^4f`Q(NBV1RKWwXHL&_8I$CeH6S(>k&m0(84 z&>oz{g2KS|(CotmDz!%Co&-M1^VAL7!|UyExSGNj-2 zY{2agv3D@L&2}{Ndt6=eWB=lO(TAb8)+NTZEu-K%5EC3nLUb}}j-jYYv*E)sT~?gP zx!FltOFl_v7^CDY`p)u+?NHh7ncz_@%29HQIO7nV?t19+|z}bl{h?z53r&j_H(0 zz!FsP`aE6F?rzuWw>!M~=ilyd4!0WwZy=E1Py+#y5P?HnUH$ndRC5b+-OL~|;HnG= z0b*Vpm@q?4=~>Ji=f1y0X-E`*-jr;2Te$7sB zg8%a^Up9@edKB!;xmknHka&k4kV(3*m=pp`k>@3@?!?e*R|8WF`W6caCR6amsk$T4 zg3KtBNUif-Q&5e$I16lKv{_)Lnaw}$DVFW+IzB@N{y0~3P*Otdx_OGY_w~Bi-!l$PAFxuuteUDxiSo+Ztf_aFYGn zVHZYdKEJLXn?JS*ITNZJjFTjUUXRpC&#wRd0tSiDGXyQYSBt1y(0uuFKYVioALm}E zZO+?SdQ64L@#-=ay4eVW6Y4KqD7V%SfpM8_5=}SF=QN#892YsjoZtfOKEIuNGbSXl zLEvxR$7n9V4~YBuaz`Dd3>gw-Is6(*t8%3!8nGHK)4w7t+TSHmj`S(#Cd|MnvTy5UU@#Qa`_izP_1!_;hv*Zm0dj7VbZjx5-PonNJa+A?hgcTxLFxe+deUVa#9GV+#{QnrJcyl$ z+4gq}|D_y?zx5YF$~F0d_4E4UH9HaWc zXe_~od!)fKDO}#17b7H8pP*( zxuA+AXTaDNt%F_R^Jg%yw9wTetMVRqlVOVRv0#~bO0x2; zT#G0H=7);*Mh=My8%}DD&gblEGHuY23mGbByq7%S@UDOX6O13g9=^P5FMw=xO6wS} zEIf(^CXXi;93SD?$h*8w4(Ru?D+ZIt)gS&n06JmEg`urSurB?!XYm**L6Gba^yyYn z@wQUB^A29O43sj+bRbE;a}=gl{J)}2LFOx0!H9fPjG7e1J!+W!g>-@mwp`7X)}$Za zD=O-tl#<{TRg%;Zft!#H7UrH!=e$|#a6OmvfEXQQ5C-@SWNMVlbnz7|k&29zlLN$= z9f9aF8`8^mz?`+dbY!U=LEv=*Z#XKTFDyma*3d#bK)lh6o2X{s9Q{L-PMUx@Z^~Mc z-h9z#xJgLkWXgvZSOG5!B_%2vtH%VkmbokQ(sz466+v-A#D|>P4We~ccz_%>$ay30 zURUB!A@AF9i52^-P!NoSfe{rWv>E4w!5!Cve3-1(X>?SUaGdJ0vEEnt)7Op}g6qq4$^ zPM{ir_UuJOBQG`Sk3mXWpvuS#pTNdrUI-EV{u&5sOBSmpgf|XKhM)fE7q3jnN3q zMb0-^k)6^@nxMrtSbD}8106I1(qsy92f4+fsgj6+eo%$>;N!G0i{m8@nITDYVb~1q z9(4zK`*Tmgn5u)mri1y(-d45DMQz$_ZxQkbo@IZ+=D3Xx zC@2R-^4)2zL3iP8zSt05h)h+4L*C6QC!nQAqQX=$m&wEN#J3&0M7qq>9rdIN2h1+6-Mo z<}a&wefDunO2K^Ed$D0CmL#H~3*$2_K^nLOV5|q`9tTa^gzD;D&0;W1i_Us7$yMOV zk_BIp0ZZTTAt)_?V=>iHX74Rl5o1RmqXKghApU`mw*s^4OX@3j&)qe}>2|F)EEfvb z3+i-H`_+tmeWf*Dtizi>s7#3P+fmfPdG(nyu1}9ahXB4NQM>6mOG_x%2*alQI-(xl z<^`aAD*m{_%=y)H8%AIvAbg=X3lu$p%p?MRnpSL@hlkYv)7(om0fOI9JD!GKi7-ft z1u)>eB;fbf!YSNqOw3jt@#DFtLwvlS?4-WPz}FAt*&(OeFz3~t749VF780Y3qLle4 zF&SQ~k`-BoGo>6_XBY08*}{;4S~~2|0ifQEP?%hw{G9xL$!9-Bt&%|{i@9oA;${_} zcCDVPi`>CU;^`ZzY7QfAhCDC~93m<~D1`qM@!Y5_!}yn~yM!_#A9u}ZcLIx44& z9T{J|C&ycjFQ(z-cDDTd@&Nljf@FTtJ$`3oqpANSfiqr($VMmy)fA@dIdE~dsoTH38uMa7`=c!mrJE6=oZVDii|R{PZcga} z!(FN4jjyGLIh7w#!#+4GQ`sEkSg1}jWW3*(u)vQ6>~Xu{@rHUFq=)3`bVo&$5KdE3^Bwwmg$|G`M*59v%uL?g)FZcc7+_b5eSim;_? zg;-9Z1PdGnuw1Uxdc$b<53oAW^FKPgl(%v1var*)zraWnC@nHt_U`VQXGGH}AHX{a zFwo6?1YUM?j4(Z5dx6a1ioNNx*J)D7=D^3Wmjo3||a} zFx}b%<**0aGqF!V^%ZO){waqFg9dYd@75IhGJhX$RtlZOrGam=V&6MOSyL(Dh7faAwYh)N>sg2vo5xR-S4}n0A#MxZhTABekXIq31=d|-xv17<*`z= zn7pj;r>CX6T(?DJ5cN6=tZfHK7P1Lf8wOU)7EI*3H_|Mq%4L7pV3;#;llvbOEIpPQ zd;MWU$92NRwvRVDaYJ)w8;BfT0b_No%f#x9573fEn`6_Oi#vRIdZvmN0(c787L>E^ zyNGd32aia;U*VyO@>?j3-oxG}<&Oj%vpb{>B!Am}7THXG-~wYf+De&3`U|eIAgqUoSTgTkC`-3OhBirwlVOES^zcb2<%;7 zhmxwe{$=XK`{WO*iW4{u+fGh6ape2WU!t;C=9q@u0+b51EMSEW2;W*i36+RutL2}v zLvTOR*=^_x=5?OmP#ACq%OnFwsJclJ4+{L?#ZWG)_H zcQPIA1qu}`?%w=)vc?PABUNEbb%LP6I6Oh=Hh2&RS+5UKTNvttJffKIhL&n`Nl&d} z8eDW&?<4W1Y41RQ`Z}RF1yvUD8V>FRQ{wiWyo?yTei*PsQLvhoyTlrpYVpecd&rzJ zcy+tXc7Th|5A@H6t`U)&Bmg~~OvYA*0c*WS(|fk5@5tQP{sFy{c|c3PfWq1d#a(rH zpv1^xxHlaZdsVU3_bM0_d+;2z+ga=+`f0mi_1Sbe!&Euw-yRJVhBNy`<7H~@M-J|AD59Ng|4-tJvp z?fpL5x_n{x6wOEtDvQkS9N~;v!{$H-Q1L3fj(z+NurU{43odb>8b*p3_I$jK!HAU_ z)o}JP98tz0#P*PrE(<-NdyR~VpZdFxULugXR^W!&cKR$ zf~;VtY6_kpG&$Kujb*s~Ra@~X#VEWRq{Vh4R#5D*QoA~&Rn|*txh`VXkUq#7f`IANS7~Wb7_t6@8DsI z!)8I@Fots_U89=d^g@iX_7_S(H$U~cn)*`qP=&2RY?H*K)+4i3YZLzC24rz>WaR$^ z=|^E&F#pzzRG0$j?p^>jVTjf62OEoueX@v2X5nKbqFt7_NKMEgaPxeygj+d8J*g8} zl&Qn!0X4Wbd;@ic+M{q89L-^?j#hgiJXE_5kyg_*>x+jY{O2AHVEE+T^Z6CZ6?lJ9 zUSN5z%SDL-MmTC2aRbY%GKUR|7?iJ`vobi>hPK?B&oyuo|H~C8_>Q&e{0I{!Z<auA?8%(H8YsRFo=}|iVKcqg#5Gvn znfM9gz5d-6JxsTFGwazJ9LS**_eYLI{Q~h^!k+A(GS*VLZs>&%Q*sN%9Pgh<_ zw}{J|YZ|MGabpcDn zu$htdT`*>qg)$>9-4Fs_A!fb(*dWD@o5jl-nZPh^!L@?_)e@;GxlZQA<{D5>X;A;A zozz5Ty4tIej>;`i9PB+llA1OX(^W2zmIRbutRL`?k&o3PyFed(xz&X@g6VnXthbXf zv!Lpsj`Z&ryg+q!iQ6O6NiKEs-BtTp-f0z9t90@9;NpU1>|F*J-yq^6wTy5lDY4c> zvwwK%;&Sg$QJ$H|30)}N4q&=B5$Uw07x0e$bbA`0gDNq3Bz=~Gl3wv8wgOQ66sGM>lxADPw*>P!LAjr2FT#_9iIJ~lw&qoE)qg$8867Y%rcx`xLAEauwF9-A zBia9A^VqCDLL!IcLTbQiM#uGRHA1ka2J}FtCi!#!(Hb@0&|Z*Tfhm|+ZbEmxj}TU? zK@lQrZqxm4y3*?5-gHCRNNCM$&2M1L-qr7edNIqM&|Fe^%r?VVd5^JV16Kso@stq> z>Y3*`UHq=O6hCSR0}^Q5p7f~Sux}AM2{gv(fc2_WX~~u)!CZ&iZr}ENiL5?2`V%@| z=_A@-QL`uebAVMv>(54D0Q;R8#%vo`fGx1~UxfUsYAQ9m8t4yr ziXmuTt=>MN0i=rlq||j}py4{*eHHPr7#-&1dJ%!Fh^bT2gNR{6wIfMbOspDco8KO^ z%LaDugJ1ie%YHCQq1g@8KoHKC$mdj4y|S*1ATy05Tkk{_U9uT<0s-T{G^kNq;AmX< z*dkz0B_l1zAE1-nZAa&eIBDAndHz8|NX8c~F!BDc8p9wqhH&vXve>P*D#2(6#gYr| zrTaO-=J1=toFPAPfvo2bfre9?2zb>)O?1tY9wrO zRPEl9!x8{UrLFyD^Jjw?7zl}HF?GfrgS5DK0Jma70{+u~5>Z=14h1AEuL3&>R;xt? zkm0&)0~lvzZ<-iS!#GZdfk}+f#HOxYwUQN%0%<^>k*~a5T)H;uNcpybj6?`?+7SGCi%I%?eBMqaKyUnj zG-M&YxYj=P41L9^Hhzc^d%7v}nclF&7n}hejBY|+rpc|56+Ow5(j*_3peeE=PtSO1 zx#OW5URC>9on|V*kJ*_4cq9|zZNR>FX+8E>f}Drr0?L2IJ`)U>u($BZ{9p|{oZY3a zJ*SWI^@$FAk`=oq_Xvk6JRU-{bIm->Hu{IxOzbI|9*4-aX;5Nqy@v-vXp^o_(`N$6 zbk&r1g~#e(v`O!aw?$%QzRU4+aX&{hF7)`~4o|4J`{AurwP9BJT^=62rCWWXeFIL` zfAkH=+aimq+^cvE7cWoVDJ1dENKDEkHJZ0TpT8ptpCp5^)POz4cn}=~`B43Ke)0uo zcp&EiooL`o&5E~ee)+NhRthfzWlf|yy{7Do+Sa3x_Ngq=<$bb}@!Z9AICWbTssz{A zL(O(*KKo-jXL=HuQ@IkU7M%%GcO526&B^O4nnS5fNc9*Y9(;M;k%>SlP%Y|d3fH2m z((UVZr%qD6PPL}Kz9>ck&P$fme=BO=N z?upy$c+9uW3MprF2MJauW(yUkG5CfWxZlw8GFz|+*esAlzBa7*T~Ykn}z^r_^TPtXwDpJ;Hi*UL+( z_&M7ZuY(%%zT20uh!O&dI_OOT;`7c`PAyt6-kaQ9jpJU8phoDIPpsO0b21(%F^jSfTQ_*@4dsM9LrK<0h>8E@7x*S3YJ)^ zRe~dTI?j;8cjh}UwfU~M=anME^^G+P2GIA76q;d~m6`+Ths@trkx}W4MP_477!^Eq zSEcP*TNSqsJ;T-oo@&0qmd_b68IObi$eRw_Cbb~)HWt)hk5qZ95t0W5tDq!Rg*F#mOTS1RsGUF zJUvVm){W(y_3Q4ws%Wm3$*blIBnA5mrPXMw^eYr&9f+sO0{LT401kB#Wv*8WNqa4@ zKnTCV0#&dRsXFR&4pr=pR-=7}vOrYvS=*vZD@}FR^#F>Z`zHdPEL)@dma12~VXanu zrFpR^y=|MkD`DO&k`!MzymNPaguxf#wxeCF$(lI#!aQk=mogxZhU1R&C%ZCWXh+2N z5d>hUZGR$OL=sUE&z4>sk^5;~-`j^hT@CDMp&dCrG}wQ+`^vlS8U>F4h{zfS1dxo; zd;Hs0P}X-e2%QPEm^kb7N@NtxA1_GQYE@%l;FX-SSh>R`0pJo7#>U0_g*LUPRX7E) z-#W`?sZvi!41uzh7&b77!!kg*ygZn#?pPHTYLafoZ+pN0^zP*N>`YZjj&*rS#jLvx zo(<DW%P`N`h?>G+ne4L?u8$oV6O9%USg_TOeFp=bj_)I%VanU-8N zwv{o>Xtg`SXnx`VJ`W0tY)2syRBhJ$fbG6&7^itm{Hj%tJfP>y#HHZhyQ802{5A~b z#dt+D1Goz=*pXaKO;5oh#F7u#CCERwK!50hZRZTgsEs~g*85YRE4SwHHZV+!^AYGs zG~gz*gO*^W4;g{v^EhmGT=b=CF-(A2i_Dl649%GW8fw-Xe_fd15ch$Ycily7 zi+Z+*Dk>hZwh#a1?69e;7<@NxKPiV+;7nC3^MLJRuRw>n)ByjofZUikqtQ>%5xH=Y zddbub1eFp&tX1q~Iq|JPX+F8A-(Bg7*dDzM!TRh;v?Ft^TVX^C$|#^{G&Z;VNgmHc zx}ld>3T>;|ELFV7cz6}s)w6kIXU#pzRK9;<2u$^HbrqKC=pyk^$g#ek!QPa`faYup zu$Ve#*R8x&jU;k(_G1XQ@GCxtRt8zi@htEwDcJ56SkS#+4<}cs-bJa6Nit&OmFlVT@w-{0-maeOdj}kWq#0@uxUKfu9iI0Z_q*Uy(C{sh?#3n_X zLx4!9TRp?uj1Ag@=>yF@BTug^pj%VWaS+=B3#)gGP53a;$Di@HXrWTyl>%?zt6asg z#0L_!L%-Uj3cy4a@IE=uV}=6_WVQ_=OfoY6$To!yw@^>k<|U?}czQ>B5bkNLn0?!) z?6Nrc<<~A=ol7g3h~kgk4?zoQ7^Vi7*RBoMgJSrlx(Nnfv962aUC$8#j6uRG7s_J- z3gE64O&3+<@dN!J!P|rT5n}hpN7Oc0BTfccP79gT){4il}v5Eas>kQW3KmAeAGMMJx^c3H9UhWqyA= z{R5ikW|;Gfvasixm}?7&VO@-F$0~7Koc)WgBpCc5DY!>Ij%MElf(Y-7$G^NFDD8nU zzm&i=Ua0%oF-h_X8jbEsEoce^5xU-)c$K@M0%=EjbaOgl~@Bl9f6TXDdL(1 z5IkT}ZR+FG9fUX+>WL>0$hn~d!FSCjPOizz=GptXUxO%#8U(3cBoCl9Hb9hIWapz1 z4*DDx7I#lJE`_#u2Hu6*605?w3X%o0fun5zE}?)pqVB9|2GqwC3|$f9{&FHyykZ8| zaO>T2`XwD~Oi{4;rp}#_r`U*fbgc0kgW|nmSUrJK@S1y{)!Hd@sBg{vrsYR&96xE+QmHFTcNDYv}MT` zIewR!A+!M?lK4;9mQKQlYSn9aZ)l2EA2&htwTv(;US&TfPt8_iao*>0@EkWl5W_pE z({RQBb3R?K-J>oZUQ!Y{HUy`kGfDm8-b#>tjt#O((wvU$ZLMxkY4`i{Y3SSo>#-RG zjwoY17h&M19HPf2S2qWIWrHygu^DmFEiSY)p@qKn@pS#Dg0D(^Doxvq5j1|l{`F9* ze>=GN>*5gh6b}pb6}0iAdTWdSdUoW)V6?lW`f$QF2&~|q@%D&xH3a2(rH&6#K zMzMh8Jk0#_dN-Hjt22}eIzKvjAEFKY&@!x8^K|MkAVv34(rANNdba^#eT+PUyyRY{ z#%;Q>PgDEu*Ds&b-AnhDNlEF1C*!lr+Jq&AiO-+sbHQ`BMHUzjdHE#w(wC{voo$|1 zVii7*OII+s-v_B!1-SysmPhWaGiN}by*=MJa3Dro_3EB(_lR3enb*#+Y(H!8`p?t# z?Cut_5%jpx;mtq)c868oQdENYa5!3T?nfgulS~zPGWw9)BR_{7_Ab!w=~ClzwdQFp zf}Fy4RdGp?q8il4P>&9nd-w2&A! zyuu-IlQ7^+MZfX%GdZ5E6IOGf?WPO9qm3^J8-j49(kn@bmnVY>Q%;!8Rx{*gA%W5P z|H1x`kI#>tWSlezPtKYah{iuzd@{uYgtSwHFSmjY~&`^DfcF4qrBqwgH?)vK-|Z@1@k(naHJI&%hlyPQQ^3C?0R2^=QZI=#Y^ z#J$mI$?QX%dA&m2Ck8cd1=aaByLN=0!MGoGO6PphZ0m!Jy%?N%cm}LG8*qA|EMM1L zi5bNreN+Le>j-61d)GpqTHN3Ln_U`^QmEJL=2D1x2ALmV*hc$BT5+dktRN9>DT* zseCdvJz+g@n!bG!%+8=O+rhb{Y_B!gsV&h=ue)AO%_&p2cqGE$G0qz(>tp~vZmM}< z6Hd4a(ttZr^8=z&RP%!@mveb7l75L=PkIcnyGgfi;Hly@@2+M6+YfFHJ+5h@182Yd z#<^EVrCDDSK-f4c`h@4}$>85cYtAc5pZHaVRH?4qI+-%jIo7bXTLxa~jx6*GB(1M+ zK`4PIx(!gr&i1H16_^#%5urpxV9+>B>S2u%LW--V-^mB6o~L^VW(_S zON`x3C)1uU1;&}T&f2NY#XbWIn!MBN-u6nRSjuz-QhVbXTk$VYUA1or_Y{|SEgD|z zFxDH*sf#ljKe`|TB^h3j*f`Lw2QTwQi}4Th?gNB$iu>kU5{=OYrEut1mMArzwns%I zhB9-N-0tLXr1;}GfZZD)u*6gG?9d093$T?kjIoPcDdCv1w5nx4p0nJZzY|*KUeFTS zCdTp~I|$+0A;Qw703vdb(O4&e)0wfocVpIAs40~J4e%m77~a$sC_ z_OM-@p7Thv#`-{71xhKxr3(hNX=>V%)XHhxF>V2EcSS zBOsNSK)>7WfklTgLC3r23vBRKDKp<^<^k9C8~h+peGyb!zH#yeFYfxwB`s?pJ3Cn0 zZn|G_lrVQZd&ogtpDeAeI84K`<30#fDNX(XH_Crt5;t5ZDkApS$q_Rz)YlVON_9RBQ&Org>= zL`!aQOWz6^QGpK+YcL2NR{b{J{sIr9Ya!{AfpvIkL2MyNLuIRi-%ZcW>nK3>a-NHZ zf8pYYU)}`~(3K0nR6UT5O6;*mh3yp*_L#xL1{J2FU{Qq~%bSaD~y&TiKbJHOOn4wHl|nN8L-EU@i=Z~ zUmi(sy9!FmqsO|}ZVU3~94goYR)7=E8wcDuhw=^?FBDcybC7YArqZe#m|dVpK=}V~ zJ+7BcfdvTNOV(Bf6J_Rq3Xrxe7^WP}CHSKSMyp~wR}MB(@?(NKmwh!07=3dQ0zZW+ z3X~@NvX+bMmuFbEL$pIQu)1sTCm!1?97vjH>l8z+*VspN!v!^b|VDZ_l%rt|iA$PXn9iw8OT zrdfooLzJ5*blFim{F~O=6|&*WUC8H^y5J(_7Y0|!W8v%@@|-pbqr&rr;3%v(I(xle zHLsmLMXE0K3?sRu#qf7a+VHFJBd?k}JgjB1wyfg8I}%d7xS=R)*{|6-&{`%%Z(>ER zi0^~zv|t2r`{-nPa;ZzIu9aR3db5fpyByL zQQ^~1;0{GSk6?EKo9q%HjnV0vUGB%O8YR<85z#O4zgq$L{S6(vQ+se!zEr-K3gz$d zVzYvWJ}oL?t~2fG`@S%M)4ND2{4sM>amM(H{BPdf!mw@LD*b8&9mLllK&+;rL8#E23Wmp(LlvKbzIfGcLs8>(Zl?zUk7#W#3b1QU&V;mOI(`RM?(bA;|@a`X?uQFV0(V}h9| zS#YqTg!a9H<{s!w$z|hK5&&hU4KuL5jX4ZT?QE#NdJB-x$m(c|$9(+!7BdD;(%LG_ zxXSx7)zj~5?9Sn~?EL|Pb}=pjRNWu5rMKHPWC@Ozqmq)G$CD{ zT$?~pQB?ixT&xRVVXa|G-L+R_cUChg?u2WAH+iw1R&{_-dzoLHPl*2{I$Ko6Nl6f_ zv%8=Lnd*=V2e@exDw9l|N8_9+0Clo}l(3OHYGH9w)u8&4hn!>RDb>uj?5UM5Bo(mmwXrQ)nC^yA#H2}E&iMKX zWdt8XDXHH266Lp)Jg!rJ7VRGY@R!2lrW769a(15(`bZ3Q3D3c3j$r(7U0lMS`9a=# zw|f~#4?z9?*Mqe8)=ne26`_@X4EgELQT7#lonty21-slyb=` zIz;AhmH?$isowjZljX_cZvJvF1%o=}?f``4jA~E>DNqM<&}rSyZ6sU0B z7{iDTB(D}xNJarINV?~8r~IWq#@hmoud-jmHKIH=AIdpbE97>+nJ-cM6EC#z^gA|N zGRhOc!sVjfjxPg^@fb4FsS=8Xvb)~g3gK4itUAo%6NXJQ(9yX@UqlbT-5!2 zVPfHKZ+Y+O3RTfT-!;m?CTlb+$*!b(t26txeNhJt=Psn(0D|@RRB0Ikx9xA+4@8NR z)f9Nc?Xt}8k^Ce-4js$xoE(uEro0WXSd?nl*~aU=IbK6@;lnNOlU)feh#-x%oCvy2 zkrn?coCanut4vf*0$BB>JVp9 zBO;i?VR$~BPuO8srl_CF$oFn5ogGGAHT5cpJ&9yq+#jO`cbQvKy)>mbl^&tGB3CC9gnHF1!z>83uR(_lZ6B={X`Cj zh4pD1t9lxEAxZ*&T7J?ooiy6-bu{K3(t`BEgwb+-PzQ z0>4uMb?66#PkUvhs{*et@>J**kGp3cMCL+&U#+R9HxPvP*#qFiR$S6HlQz$>^$dn9 z@6{R?4j0CKhEsJqCqnnYkmWL#z}@>vu-KTx1#J*K79XBw%JjGUG+9QQ#V1&YyWUfS zA44ye4Dq||`up&%&nwhi2Z4sl6Fdz)G50j}mvY_SF$Gqt2b}VU8(~ zi~58PeOkq0@>=ul`p@pk46}J200g@_8?ghF;F>iz#6u%x`!cRP% zt$_QZGX(zenGGv9*?$L;PCU7qoQkl23WK22Ez<}F30R}Q0N2EY$S_Fw`&Dkajoht+ ziwnjBI*OKnP9$!#QJI20RP7!(ozsa{=yyXim}40*l}}&oPkR3&kkpH2L&HAXIZu;60z2MRsaVo6&sM| zo5M^$WGL4`9&vK9Yn$m|)G^9_3+vIQxjCtR0{}OFdWO;;ekQGbvilGQD3-bjY6eLl zTR@gED@;CL?!6!L;Y$@fRE|KezBqfV6PtuqVtq3E+Tk$uCjx@*k5=OIlai+DQ%sm( zbhycx>!nfA&@Kzt!(1AeT51(~c>-af6>Cual%zx1@RI_DqEZR@f@~Q1$fUd7$De7O zUf?kjdF0HZ@YX#UQ*ub&9ayuI&Z|v=z&@q zgt3_JpGl<`Zdg1EO3KaV+dTaP%@BON|v-ids zH=@CZ{LdB`qC5X4)o;+mdq(`SOkoCYRH)40zdPaduz3ij@_dbj!|_qf?hoykt3AY; zzpmi|hOx1Z?BOnBp;vf_^VMBWF(<`Uac_Vw8gfXCP4*>S9^2xYB*9f!vRBd6ljS!6 zA4&?k)~NDohz!Tgug8Lw21Ustr)|wpQdHQ(5p+Zt7(D@Vl1j(^u#ih2H|NX6CES9D z<4+2d7>d~Q+0o1S9B9jVptLGZJALXAKcqQ8{!GOP9;)?p9BJ57-}q;S4On_YrO!r| zS&Zg{7-995Pp?&9u zwR_Zwa(B|htgDMPAsRB0HYBwn-R#09BFw+KFh!B}) zj7eE2-#%VMg+u!rs2qHJ&H8fXpVg5|oPx#yZ3XyVl-Z|si-TZWyuiR19`S(qlx{Pm zG$X;6BAXiTV~otPsA=8@n`hl65*1~P(_Uzju}K#o~Zw4CwxEinc8h*EBru8@+l0yOpr;$ry>me74tePDuI)P@jd{U%Ep zuDsd|HDeUv+weYFF>ViTkZ|Ml&WiSI4atItXl_s?>j7$%cQ}|g(?vgpB{F36RrW*Z zM2x$Pn?~R1yxBB-x$_Pw)mXq+bx^W$xV@DQG>$D4{WJ&BI>jT{`eqCvRRP+@U#wMX@X=GHi#3M^Pm~Z;=q|P$R)9aPgb_DBd!6sC z`$CswkbQl{YA|?P+FIEQH*fC&LfYQv^>X#O$3=#DSE(qXDW@~KvGwskw5!IY0!#_( zu3q5TjL(m~b@5<)PicKSDP-x4z+x}qW%CudP#8+?r#DZKh0ryENk)+#cTY}@zj#@X zKqyLl7yfM!C9{!CV?3n+DOaD*f&fk>rmub{nn?yf!w4$RvWqCcLVQ19pX2`&)ik*l z6W6z`MPAu|bqVSAdb1)x%l=+c>wBy?Ed7Q{;6+>=AEZPsa809tVCbbL?ck*8HAs+@ zO>U8*>|UuPioSn>v$iZ~*lZkY%Rn(;CAx`!OjmeHaC7l>4o@!%B4OL?BgGf@~J|;6q}sEdM^P}k4qZ>2y)PL zKAwvo6mtC56H>(&GfDuxX-X-m>({5x%enZv?niZa5&2{e@QZEVQOmFPWjOmYge7C~ zRq1>yzDUx|6n_~!xcG`|)!9hP=Z8WEg(?AlSjH8eEZprAS4pL=0lBWH6HY2yL%n5G zn17+%AZ##_-B)p%Vi9t{_2rcNx^0YD>(+j-S|Yg<5nh)UsA@GDF*pdmYP>L|SxzSi zYn&pb6G25XtOhKbX=z&D1oly<;icu$5Cs~>(xzl)Rf}h<`RVLy;!EeNSZ?ZLyh&-s zEd=8E6B$1}qqch@85l9hEJho4`DScmJTE@?Bp*SZS+6`18s72zBI@pL7i% zh$%E$IuI?Z#ijE_xQ&6AdA@lx#q8xsgS}QMQ)m>T{)(+;_lSQep<|5FqAPmH=EfdU zzi7a5Xp9u1*;+SKjse#vY;J7YhZ5+O+9Gs6^i24Uh*$CSGU$u!nnWz~)@X`#Y(Hcn z3pj&ZxYOR?i1`!bt}*%q*R!L>&7Kr#(Uvkn>m1>0dTZ8$|#RM?zsA`CX-w#jB>8|O@IYxajqMG@XP zehd(E$4{Ftz`kTJZNne{0w5aBU(aEo#BrI5NER6OUM4jR!+5Wxd3E?G&796Q8zfge zGP3O2+-TXEPL1Fk?6==ltdAGwWnT4wrKpbHo=Hhg~g2%v0ii zfzUE{PZEQLxk?oBLM8mV68tE2nKAX zD0H}PvnSjeDUR2E05;xWJVXV(5xPcOkYFQVW#DxayrM;AVBp61<|N5ARFm-I%Zt7BB;miDcBOE{w*H>jX-3L%W(y#tUuxW|qB?Kgk z?a=hqobRnp#D-tsX_vqPyo@U^kvIn~4Vj2VpuVZLH#WSSHFr##lc-pPbQi2(T)76# z(i`5EFMMY=2dewI!K>OXZjWC%p!nH zRru#x4+7A(MZG3vMB1ZcO(sxcG?0`^LX9J=D&5DbtK{Bbo#lOpF&p@i$?1e zL0nBa2x&GfZw4fWdPux8Tp0;XPqw2V#OJp^`$zfA(X*bBFgw>!!edQGd570{xDCTZ zs$uLWCn@@xQ=FAiLF$DQmpF>f$DI+*qQCTfQmk#lu8fpfE zA3Odk$#p{KkpPF2$kxVb3!CWxS?Kk!*%6^uOmHg(vbm=q&B?Rs@ct)JE2w`KZwhX) zjnUOo8Pl%=Tt2J(O4DWx(}icu(V(hIhs(1m;X`uqaiv8PM^od(R|Pr3BI zYDhweZqIk+#T?EHDTovy5u#l0Z+0}{$jKXA2bkPwaN#g|AGX3hnyKE z&02l(fMKz1*VXbUj{Vwa`+tN(EmFV|J{~^$D90&AjF`me6u=700Xy6 zioen#;Xh<}>xd2prSXx^0?S+12D!5fi(|~Grwd!*KKN?(-6l`Qav!4x@845ePy_AP z=7Hn!@8umR%K{NDcaI4T!c7$Nl20*+tDxk}X=X>;DCqr65m2~+#5SuYoQOs_8vqH-qd&P}X|726mm&3_o>c8E z1OS`}y2Cmt8iUpgG(h3{=)C84Cw#~SnNuq}GMk9mKy+iE8U)ELryeKkN@%P*r)o$N z4A6(oV!3+4JQwQ+{A1*e8?@HJ?&-sBaC6lFf4c1L6zXqcTTLgvFe~;JI|Sf5!;0b& zfV16}^XckRp3O#IS^)i^DVu^{i*)CK(;?y;%d#RUWfqaqN~vY8_6zXM7A3_dejObg zFzgEXF)&|dSfSDs+FUb#2H(XDt-pRbZ~jCD-LJed%NYuJMEj7)1&Y9Jg=xu-ptI#( zSW}@3q;n(~Lrj*6VW${%O||F!boH5ueiaK8Z%}%w%daob1M+Y%31d){Jxz^>XyE)n zXVb6E{>;QW+Y_&IePiee_j!}q)GTb%3ZSc*zyns0icq=C52K| znO=8v7e?{Hw72hqEWJ4BgsPUymo@ zE%swI;P7qO^r2O>FTKBtx_%x%+_=ltboB}~5H$d6gX6|IVC}4WY%oexmEWc<&e#th zPIxU^4FbJHQUuj2)pg~?&nx8%rLpJ{n0ep|*2~SKxr;dMVV!OM#B4;{VXGP|8 z)g4+JLqVv(75ijPza4>M5Tl86xT9+GBvx`McwiamAgXj_RUdHpqY(-SNUn?YTe6Ft ztEISlfDn?T9|c$T2|+BtaoLJ$|L>5oTrSt!a!*@02!F|PKL0Rl{$!+v)7H3_)-biL zNYHqzv}>Gs-|%%zs&^ig1_h@}ky0yCc@XQa6pm7In3loZ6|X@I`Gx$J=*bx-i9{T# z7cv^yi|Wtt%1Oy>SCY{?Qh|PIVnAbw4;hmA<=MaXXzpDfuCX48JYbPZCj&J7(`RE1 zUg`?TUekH-Tli`tbZH?3N`r?`F@%v%O3)7u+@FWYLr&u=$svIsULSG}5)qaSy8DNW zeKr^@W1n5=W^)-qZH)}8|v2xJ33mHJ1 zWc7;{mH>JvL2a$#6%wG;@+Yt&SGPBo^rn?N>O$YSnUsGPU&epTkW7#k^nCk>dcRj1 z;TJchW+oxa@<(W?d&%)ntkbqMm%CIjjoy;~#a+#7$c3;1H9{ht7ug+hAllEABeNI> z_pcK>IMNY>Dt)zSP;dUL}}2Kbm@L?GpKE6kOIlXuk>?)g_u zub6(5)WzXjB052gAR;b9P(}X^=#>z`G?-i_hHk7YwtXj~Ab4WuBFCZly>pLbhapVs zDlv<*(^PQZnRFMO5TZYztJ@D`5zA9pt(O6j&71}XIc#R$F&?gzYCw321!NI*>GNn+ z5D4(@w7(9B(fD@RKmW!;zQ@fRZyv(dFk-}(3y3+JenT*W!y>*55niOtu9x29Z-^6s zP)Un@Zv}pUmV5&(@=QEgcJ-0>BhW{}X4VK9+zjqAV=~PvIgNzLO}u|N!7`vZP$0i> zzCH*w9w5xYucG^i42xf)p;h)1l|#s-pfy>u%zOWh5tfW`mQ@3Fu}Lsk(miG;f^143 zd3pwbF$FQa1u#au!t(jGlwo)#$G{3Euvg5HJZA$jh>>%eM^;NdBF}>T<`79)!Cky5 z{x}%=)m90ZiqVUQnpyx#At8BZ&C_!Adcz#unBHSX@&SR8r-0ib?@HLI0FbEXF2GdV z)i{DQcGSH=G^u|oL}i|MLZoAQYuHM^PWV|#oPmHS7EqR2k(mg?YVF5IS*>kaHqP|b zPnkcKx!zEwh1(FKL;TY&9HA}1s^qh`M2lZlAcgGaZb2v4+>J2iOdX1s*bFAhWNE=7 z-Pox~^qV(`aR-T617dr47g!qs|CQ(<{aar3mFIn3!Dm?+$$vsE>lR|(VGZX$z}@}~ zA0tclVe@Llmiwx2z4I!U95VtS6Aum6;%*Qh**h7-X&&4X&VRlCN>Nd6mrp=y%iBRp zVmBeGRoY6ljW~xAE3^4@h2zl>K0&5-K4=;v#kKnm9-r_V??8?Un$zXzeVyEcrI<;P zs1d2#^Wdd37F7&t@3i;N_DUyl{VB&U;0G^I^>nkNv#0x`&_gcO3`&zz@A?YPoXze( zB{-j5I;E(5Dlox1Gxb1DXCS0POXW#|S{RsV4sI&N6u=Ph>LYy9B-&)^!1U#y@1KcB0%uLpacNvg~dB&%cp|%{H$J?#4s6fSm*?6mnsY`KQj8qmF_2+T+!7EXff&7J zjjA$mib8JINgW*TU5T$dDC5wxyrZpE7a8D@Rs!loQtJW0->Yi;d(ny6hO_tIPxr24 zab@MWXu`w@sr2ibogMk)7Plq6-dlPEJyzkLxd#|yc>AbM)Gx}<7KRP~)8Y8~Ago_c z+;=7}W&N%9(KQA_*fqDkkzw6v8BbXOmklp&8_o)eU=&8^RP z;ca)f!s{OQQ%4+tgTQ5jxzo+6>!z^@wrx7|!sds43jQ72Sf&`->JGuNsKGxKt0@6m815 z49eBnc>HaHN1VV!x|^{|l1sgXXz>GHh?ZTA)YP9@{6f1~T9xLRNR0BH#}!JPjGlLW~n|GMqAn z$k9Q@B27~s@(n1lVen>@aqJqshlE$<8vdid5`Vn7)iKh41B2o;yrb&Bv*^yz{)-D= z9@4Rj(EPPj7A+-eiQ1cl0Rt0r{rTo_@BIDv>gx97{OE!XDe2|k+YszqN(JMS#eTE- zvq8lL>gbG^xQF4$U?FVKlE$Q#I#CtR(G@ONyo{hWH4zmrS1&B9YI;&h6fUt8!-Etv z=qgCVN)0O9Z_~l`ke4uWKMSX>Gq^`g6WuC`O*l}vx01QyuKAYO2)f6#Y5wdj3D16L z3Jam|uOdK+2Qp9`g;>tkc-{8-1@aqm;m9c=MQ(7#v-$X`qj^x+GKJ2~V{w3xwPw}a zi&J|o`91JqJUW=(AO7Acp=?_HfL0eF_t)& zb5T!ka9u)j0q(0>aP%7KLqD9K!~vUdVHe4z&5#2Er=rNcTDw$#=JO;(q;`QPh+7_q z^tL7zFigrj&tlpGe)P^JhLN3}k!-}Uk~pF0&I9QyRwuuhy>5XwXbJ~GKY3*CH)Z)_>dREF(}wI*-&iCfQhUVXOlxXF4P z+^RVv9SpU5#6}y&yF{M)@WE7!0EH1Vl-JPgPJ$LW^5*v2QLc%1rq+^e5##}D?RTXe zO}{5>le_CoxVS;$?{(sW<3`Q>9-~*q zbcrLS&-cg`B>u^rJgZrK`TgRLW;KU-49u@w{sJ4+VtOx<7X{~zb5MGYf!{S@L!u0b zOCfXOc`LDg^REJbAB($NJ44DG7nPu-rw zxQl_7c&|kKM1xICEN^9I#)hgrKq#1P3VuG*jv*ogPWIy$6-ugpDo=2vm?=%3xDG(T zGGalTLt;IHqSO2^A*ll4;^Azzen8P#(20EnoybU%#8I)uUi=z7?HYkl z6U~ADa)Dt7QyOvct8{QTzwWqm7a#pl7Ql_^+#>t%uvI%Apnd?~e!yzcmrFzu*8w|( z_LM{XQ&pJmFQ}4H+%o_idO#Ns59`Lq!*++ps>sa_&@dU$0V%m(zB{JnuUM$WEneZl z7_=VhKLkg~B*u|Xy0Ew~63Y|o-j1}GzN7?OWbtB;w9$-V^BGK2FvDlvNwEc1@X805 zQWA2I9IFfm941Yb?-&zd>B8>V1Z+p94Q63LU--$Vv51DxDXmMB#E zB6)0x$J1Sj6HwiaB0^0!CNA*?n?N2J$;Y*j3~bgfaAAVB86>2Pu+Mlt5uey(@`$RD zk0|7kH*?}Q4X30Fg&s6`O_q%4(Q5J@Qi>snVWR-$0)Ox?6}253qHC!yEW*)FG4s;d zT&0E7k)xAYl5bs{5BEc5uVn`wwGQA%e^M907y8Uzdmbr@!9by-S-(8PCh>Gc93!dvtPscsoX! zsMGObdNeM^n@tZcPKPyQB*(Cp7gs0ab0(i&oc9iYaos<~Yi!8%xVnOmC~Y@jViP?n+J##j=s;i#870Moldoe`lQ1XyqW6Upa)eC$o5p1Fo+F=-jT!%JI(W9!(*w9c zMJ0gzpLvL86D3qDt6P@UrR&KB_xBEN>J>(H3m4y&z8q3w z8va4hgrEtCEAqHOS~G&bt5f-^(Lt|n!Ej;~o&!M&apzt?!(^RfCe0GT`)m3eVU(R4 z+YKpKMshOo>@PhqOCB6aD@=L&3380;2A-(Umdy4jjSgORb?}hH`I%n^FwiFUXqvix z*rpTg{W!&|B7RrAJ8{VvG=S>m7-&Asj-@=)QPO$3y&?;R?XklDOs;|BW(uis&V5I; zEvk9eFu-7JRL;}G=!KiTk(mwI<^%wGnVEOX5KbgDt(UUlI0!G@s1nZsmfE{_z{nbp z5H1j{fC8s#4%mb7pS^>(Z?Pgrr|%$)x%5~+wNO@rpMi?ZI9mER1*8?|PcZ#-cDp#7 z;c6W}T0by`3lGEE(J;@bZ`fjcL>T&Wx-e4fAe4O3XX?sC`LA58%y$r2 zX>$H_>$G&m9z*htRnGd#^{^?>z#EVc6mVvb-wBEyYT!$VI8lM4%x~QVdl)~rhw_0+ zS~P}eqSWVjr-k<%ni4-^;0ZEbKH*>$!P*I|kaz={WnZok?aw8!o&LgBf&J^(pMF1} zJ&czpY-pF`W%D7<6Z%S2Ktg|UORLi>`b^hOUUx#H)SgnbR;j0;k?Uzempb>SbHocT zA0~_WMfT-k%>Dunx_p7;g2TqEG21}4csiIYpYn|qu?!y`-BZn1clyBk%QRV0`ErUK zyDeBlfi0(m0+Ia`7m7{*?6zx)>kbA#pA2C%@>>N%JTEj}JyVrh?~V*bvg{T&`A+n? zb1SOEje{TIS-`^2GcN<;1OXDtW1W0Q5-zeOsU_(xn|Bd16-ui>0Y?#kkWD>!V|3o+ z`}iICkqvMFobQ)7OqQ0;cr0V4b0o0hvNN0i6qBqn{#m;h{;5rZrcJ}USIq?CIhxON zTK=VTY5tPHira0u=&P-c2`HnfvHkRi9ID*S*)Zncd`Bp8(R^p zQMR!f^VEB=P^A&ZZL50}G+9b#LbH^90zH=APtYvy2i_FCFKN#*)CH|NcD6)>j-0aL zXDaDLE^+wME!!VB2{r;{F1E6sv~|jm0&H~}ADH-)h@g}9=&xP5_M$A|Gq=Snut9fg z*nHY>47kFHn|<#Zrk>)xlerlB?-t97N=ovh^C*Z{Sy_{P$3=FDYYLfqvC^qh3gF>P z@`$Qn=QHcUKqp%0?wVS~XNZn=#FsQH2aC1*B<;j8%Q@x5xDnI=fm7o z2p&K8#RgJ?eM}dgd}RY2VBtaL4^(g~d{Mq&2jev0-9dKq{CPl9?haAC{V)&)s-^&K zb9Q*bS}q@n{T`A0^7kju6VOgZEqXIXvWgftHtA}GnNI~}0p%GY{ybt=@JkcmuRIUQ zl@p;L3yH0fcq90N+3#b;Z6E_}Bzo!We@0^}6B@#Cug$;El+){^h4UG#$V@^v0p2*x zgrs!1Re6bcdIx@4^3iayMoGWA6C=8rFZS+f*nBwF&*6hba~x;q%~$dTG-_EOLc`$| zmv>ijbDa4Q1Xg@@<5rg-Kp)4830)c_Z$;c{Nu7AhJ*N$+%1d}~94@CZ7%`sTyvq}8 z1<^3+69_lmjBoJdB!XzBOv2K<*{`#_*4|Z z{DZd?JS1`=gXZ1ft%0-TsBt(y|X$CM`Q zo_rOoJ7`Oep{7%Q!uMst;j78LT7<-qzjt_C$>5M$dN^oi@@Gl{YL*-2zhRj{l<1SI zxPxzyw}W*<&;mx%a8-a#*0W*9wt_tYnRbx9?%_-_O9peQ`)IvrbMuhc)fC@#qa7BPr z9z|~lfw32{ng(%QHlVC`OcxFGy!(9d1Bx75R8gwT9fq`EOn%Vaj0nwn*Movq3?}Fc zrN|i7gcA!hQkAhiWOsH+^nx(CfZ)3F@|QOUq3x6phN zEqm-`bbz;qGe;6R?Zp`gKc3$qqvImuEI_j%Ymb@aCW;UJo*w=7W{^_xz)sHpxj=>j zUCXm|GE54)=?(=DSsxtVsR^~9Ot6WqS##k+?t4F+Rc%WX(dI9ybP$z?sf=kvI4G~~ z0*SIyY-(1spXJZ4TP1kG893%wFr5r1E=yM`_Q2~uE(^jFfD)ogo+XwPX3Ny?x*#yV z)I_Gt-t+x^=qbdoiPa>alU#bGBPP{TMpMl@matBzuvDSyVNm0=g|`In2ssYnxKtr* z)+J4zTV`epjGN|CV4ha zA4>IwvZz>@E@IqC22bB3`U`K0XOb?=xb^lMO656Gat!P&F=^A~7thQOj*uDJN1G5QULFj_2T#ixuDF?ava66|PCqX8mXEDJFclH$U6G0bHSL5S%9=#?1ih z$F0fvcXy>wch6m2vV;MVzNg1rH8X4ppo9^H2pDGQGrWOh>|EOx@p3BCi=NFRuChr{ z**%2~@3<@s6{MW<(qP5}i9CE;*^4fG#4e7iT+g`HZrWORhGdPndj7DW+k~{%%Dgqh zs^o3JAsZcLY$h61#)H!-d3Em24+n5sV?aOAY) zI{&qVH03r2aXa(+5mgVeJ$iQ%yK{{{LTQir3u|0qY=O2e)|k#&u6{w0TU?{I}J`U@)}h}G(ChmB8WL16LT$L_L5I8m|t#m$iFw2gnFZN?+4S+*TC~QdNo42Rp>*M228QoV$jt$TFvCd zDD&B=>}m>Oh9bXMO{-!r6lW-2OvE29{9#idtN;+QPo>)GNG30 zj8$43G+UfI7_yeIlBQ)eloFMrgz-y_e48c4!MT|i+5Z|E2#rweiUVh1--bOL?+9-l~bI55vqzL`{d9r+<^%V+gj4Kzs$8qsgQE)2bZ7Vc;R>eQg zzh-;n+7@Mf-HI6uip66J`TAd&2ihW}W_GzOuT%X(2O1*-J(DYi=v(R+R#ds;0IRdJ z+$R>YJKtB z-{V_En~l3^Z)m_zDHG8tx>nHrfsQ+k60(X_DN$xLYOr_tY_j_m zQQD?=&ofGkAgj}#AAZcj-2u;4l+!na%UmSS(@)Lok^T(R$&1BMJ~q9`a0Gm7ZkLs7 z*O2O@B-ro~Yy9okrL!oC?6N2@5jQssx>iwxTuoZ{+$m8ArS--n9@ z<>2xExCUN$G6S+tQOtvXAsd+z#bE5X+U&-W0xxSCgVKxu?WLRoKj05E~VaoU$9|ZS^Xxg+Yie z@)Ky(?LtfvFENX1Fh?uE*N+3P9FhR}C2;Z}HD=K=-akWO2VC5OsDq`(KXMx%4prRT ztxj=$>d_ioG>40F`ctr4um=?N`}e_xSAhi_hVYIdvo4g zkw@=uJGpiRlMC2``7`Gef%pVy%r>^>Bv7M@5}{4S%}3!}hO9Y8vWyRQFbv{zzTDjk zxOJj3K6;C+s2XUSwQaQy{R>#42SyjY_D zQ`~JpGDJ^Q*ck_2a!)yzM8FJTBTLp^L~>s8fGr^>wJTWo#9S_Qilk`yq7TBhj+fMc zu7lQtB3+-Tb2)0NZlRhMG>v?}0`mVq*ptv7mRq!1Ds2z40@08e{uKv7rMFivGXA=_ z%V31Vd>P(kAW+dXLMBhk}Cl$p;C-W#nn)I!NL3xEGx=hE1k|D zqruJycY?sB>BD_F!G`)LDjV5X#gVzED}+MuzfsUftV_jXr;?!W=#f}{p_GbY;q)?2 zk-MZ!BJ+s0c}Z4)acOi6FkDqX>12jPeUm?O@eHNsdlV6`I6aT?QXVTf%qCHJW5b|} z_>!%tnK!$5#$8>{+wl9~yU(Fd!yZ0l&qdCSRYMe;pgBzr@8|~L5RaBpRU}NI+YK0& zOTUyE3TD}G4MEW!T{S3>k?%Risx&A3{t#*L3|FxGZg4UXmB>P#N|2X{KiOd4KRP?! z$Aehd-<D@Gmxj z+_x4nUuDAX!;WaQt9iS$p`U?WQAjA0d=vM74j-#>+q@6qc6(o7XnBeKaW2{N3kNW7 zzi_xr4f(P7IA7aoX3|}AqMR0nNo6k!`tL)(cdO#Pcc=>TZB?@TevL;on&qx>&^wHf z>nDKIZfL&I)- zGD4j|U4h^aqCOM}3d}JcKG|&H zw_#`E{_=)ZJ;f;aPM0Uee2a^!F~GpLD^-AE>#b05N*_+QBjoZ2-d1*_3093!oA!V& z5hHd*AzI}WurWm%pbF9wqqzff!w9lt3T(2{PaYfD9IBH=#e;gBqAw@Fn45~y7 zsCM@8c!pWPi{q3LYlH5Tbcg$Bgpli@nY(G;wyDgUA&ZdGBhJ%aF_s+6E+j$_lv5+J zS$!XlBV{(-*(r?>!kauawxCH%$?f7QEzxt@paoAkQHf%w}I)G-p2fjfznDM9K-lfzZbYp)CV0$6vE|#FT^Q$0yF0&pG6Y z8V4G@jg(kNEjd9`OGjq^0(;fXcsaQpEzM!l0cuv=qPr0sx(O!kV6a@>AwA>QpK#hr zkHXIv_zsi9U%P(x9-l%Y@x}l677hv<(e&nqkZVYRz^gfr%Nvg3IbsvVB5+<=j$(fM zOlOXR{A>U?{l4MFlfFOT%Jo1HJESpMhZxs&5wF=t+Ux_z=pfg{6<*@*)!g3Ps_vQW zf$+vNdUT!G!JD9W$=NmYYR-&I(Ij#9Inx%VxqA-9fO;_zzM5jc4MHKs50pMNh^Ni4 zj-O~Sc|yqZ!t=qnJf6#VFm2#6?ov1yoDuRc-QS#Ef|sQNgXfZOK@@E~d>lUTZyM(+ zkgWuJ{IZ7<7xtsq7L=2Eqj1?2Ph=n)n>P^yXp@!sn<8>$G>%2}`@t2ed)YrYj?NA; z&OmL9*!)zaURKvv5O=g#EMg#UI96cz@iYjfImXgXi?JsOsHO7(I^-z9!sa-lv)*4| zfShoc-Hi40)SaS5Srh(ZL$YB!42qrDJ(JWDkAX@g=b`B0D<6{=jWz(t^%#WHLOBGq zDt|vX#p5B4M^wKQS2S>s{R$kqgElxB&k%p&`wH)f>Ati7P^8hyo-~2VNnkk*|<2JK@uV^I9jD(`lb-SyEbn& zL}U2GaQllnF8d;rs?c6`|OaWIA#@`Nxx$uzNn zEiXGXitOpBq1t{c9~J;?{9cvKEJ0_Jb9$7bW9{I)Zi=>f4ef9 z!rJCvi`!8&xux|_zOiBE6M|Z+%sdrt(o-oc5_o_n&o)*!Dc1&wa2GVQ4=*~=K&2n5 z@=iynL8TDvo7U3#Sn@;+#ahevdCSlQK^YRctKXV7fY!9MCHCOF6xXbNNKrNxzbwHg zsoui%HE75yr`?JXNBFn~mEYd~TsO7|S7ggp6R0pud!?&vNanNH;Jm(iKvKjitp#Em zIOg;QT;0qaJk~(bBO>us+a^|S;_2n;pp@dBP6`fizN5w7}OW27?->-yCabgRC{%wWLmqr2B{*( zu0Qq<==F{XI+8o-w1C%3uzQGM=o+o9;;P_VOO(06khiaqTE6AonU$hvj4v^96j6l{t^b9r-2Fll+(o%+kR5&gYBL5bO+1a1x$-ALr#HL}HM22=cTZ`*349 zg@J%!=#lRkB`)yT=Qm0On9WKh@!qyH+1Fa|l{&TpgR$Lyq2!}FDqWI>Gk;Ns`wTXW!`F=>xrhsol87-BBx$bYmRvnn*Lt479Vx@>w)81z=4gZpx%tc7S8Z zRUtHcBpY|{-y@;r)rPn<;MOqLaV zt{KFZ-dV^)ygn_)*L6Y%=oM-YA_ouosriF2181_y`?3`1xW2@C$#~=Qd-FzSIxyK|+vQ?j7f5!W+V2n?lSy5(bpbuvb*~wrOu2d?k5;{~sn4~uzqSA6i%)7UnF3t#$SQ3@+faWb*6iRD$q|ZIQJVi z06ei|Zr@kdP%sM_uDe$oEnmr$vA3U1r(`}z*?abA6dfKPD4~{ob1^Hyyq_q)(P@+; zUv0GmPHp1_@<9rDR~3te&bIQ}okV&qyt!`cXqusnLw%d54{F2@%~dT*dolo$aL zW?&C`*Kgdu+wguZnG<%mP!Ma|Zg3cye!n!SLl>^}7Qerxn0v$T`0lF(m9DbZcSTE4 zxC+jP3HJM9WFBx$Zy&}txcuqtgOW-&ujxX%s^Ji=>v~>CUCcfg8ZFXa9(%2xEI{*h z{$ZS`R}eN_pwy6!tX7`^^MNEX3Y<&ewM{<%E#tW7x+I#i$;~NBj)&=>CXX9k6J%)H z^-VERa}S>mN2?QO$q>pHEk$Qsn5GnT0c7D$;n{b0-GF!a$o#joc^kz5CYmMhG(+;^~pP^!M;+EIt%xU0?zSY8G z8yEItF005F7$nP26&hR}v!?^+f=TAyvBwgow+n_#)Wlz1Pyu~)(Ywu;;P>XM6;5C^ z{osSr^L%x1I6G*xfzWXVv?iTESM7xH(=>L5@<4v8bzsy3|5vyZW=z#)CHgQ2KxYh; zI-3Sr_OeN156+4*u)tbacR7A`e6;Gby?0AKzB4n z%jMzh`H^n?x(RZxotJ{hyzT?@2Br?IH&ghY&6c>0_l6*bCLGeZPKDMddGXP8$N z-te;u79ZC}ULHO^t$w&yKdCAuN-tg=<4Uq`5)PLH`z|PPhEbSNPUx##yS-Xnqg!nI;-BkyNryxy{TTL%n z#cko3I@a4bjjnC z@>(PZaSh+tRx2*!dyi8PjeBPC9f+s; z^Y1^=Qy|y4^o@Y^^**kB+ok&a1nX{cYZf{m-rUjLn9SDPE{HaxqOBjSWv4xFlFv46 z*5-wv+l-R*midtYRb=pHi}V0G@~*W>p36nzB#tEQ9FKfPB3DT6KJine8+iy zdO!Yx^vJ`D1DYwEoEvWVu0YQA_tWu;cSqKa)%Bnt3?68{&7wb?0Ue_#-BWc95uzg> z9%YeFpO@e+m21-TUMS5F&kJ5(UL9T>UYLX1BGZJ5O35YFv5Pp>NCYnE0+^_ANW}5X z7ry{gD1L4O--YT#vu_Zvvy_AlB;t~F3%*c5qtjo00W{vq;oEP#NWCS*&dwb2QRH;` zTr+&)Sy)ywtza}&(S+pUxWlbvng=Mvw{!?@%)k@;BWaUZz0d(Cc*MD^(9sm4;eCzQ zdARjip>ur(Z793Y2(b5CJWQ{%oSsL2PqaiF5DF-!{c_~2^JJ3bvU3Ohf>kV7xB zW&RdoUNDH2UQT}il9vx6n0$plnRF{Ed^2 z8XcPMcc%#t)Do%dlf~`x6j$hMYQL9TkDQGntNvmBjcy`vaaHUXGM9*WG+|5VaCmin zahTgdX1{sBhW3TyYgh9Rb39zOT;al>Y9^X921=#h!@oq&@Q91hT!J?Td0932SKK*I4EMXIkBnlES&cgR(gUOHZB-i(``KMO?r*n)^;k)d`f>p zv&63Y6qnDB^T{12nIYHABl~h_jjqY#1nTn&B?6Vbinj)rwU0fB4WEzXu5l32jp-3J zY43lW-F%(QpO^U&ta|imRAYRC3U>j|zrf#vIyWYUl#hwcjQ3)OUeUuoY*SSo9GD&4 zx>0n~hFt>k_2batKMiVt6bZpnqQ52KKe*M06GS#TfVULN#HBuW{(+zQ1#ad3rm@6= z`*+?APP#t`ZB8bo*^2VcsvncWz(d+hEi+1`CJVo?)~nH&x=hq6<-I3@Tar;TK^Y}? z2z7agZ~_bwY=ij-mbhv~;-^mC&|G@UkD9+s5EgoR7;_Cmumm$RyTq3WQTfsho8ESU z-{|Bx$n(d8ZHN>hKacH{DhN*B1GNtD07u5fb)wQ;txF{Paa={dtc9Mc5ajWlW@y9{ z%Ls*Cq!9rwDKP@}w1hBjHZRSUhTyV6k(fD1z(?`_Ws^z7Ll+dIv9%+^3se}^8GiEU zF3m6%w{Ozj#r$zRODB*jvyF6q0l z9XZgfl^$_$_;5VKU=L8?+vE@XZcBWsgAVC2InveU=+#))=9^qc0~f_gji;K24e-JF z>AVB@{jef3iRmM#mH09Mo0ZB@hcTAyCTAgmKYx>KCYP?A%ws=GoE%>NQ zEl*f*(&LFgI)RHkZJZG)^9Nei$KcFvW=@`t5kPq3Kz0Eaz4w1Nd9QZaG8&HI<$M5N zIL@dYdhj6UQxwENy~9(eF{(wee}qb&CajBGDI_(Ynv^MqJ2>YXjs7Y!4-A?r3$}7C zGMd=}82k&qOsC4w-J6ww;S!{1%K;;#*I9CQe?$XI0!+2|B$bRbH+il; zHBj>ru}7)^w)dlo3|DlQ?W(ve2Jk-ZWaOCCWGIy*db zJV?18{IXTPetdCZ8zX>cMa-`Z1G z^QptyARTTN4VgQ6BU+gJ4+YzdE%O9RCu4gjTk&nV=uHNXMz--Km`4{k0Aj zXK;p~2uRHz!5O+(XRg`CXdN3sav4}cZX0B`xWZ0*+LGUS(3b_IKuH2I(^eqDsTqn; zSFW&=N>o#%Gt|E7MaH4&8Q@Ss$1|J*u8Jo_+-q-Ur(=a*K6)&!78Sy5_X&7lt09Hu ziVQxV=a3|$vn?MPn)q1X0_~zrn)?3J`#toG)~6deVDAWKDx|3 zfLuzFj7np>feGdV|DWoN7#owA;tGRY=D}Q}*S+7kWRUkea24lNIX!0xPf%RB z_$6f)`K%0#8zKQI+CX@{qz#eux{wr0N4}kI0#Ls8uRnc-)eQ0Ih6=6e*uc~V>xPOf zMe|ZTuM&3EA0~_WMfL?wZnZ|CZ5OG3mVx6{_W6f-^2S*5*c!ssvABIeT_5dwCLcgopA2EaJ(8Gcl+o zCqiD~a7erQhG>9^&k*$cXIzYivvm7F@zCy;9Tj;aC*8n)_C6Myqv|iRQx@Nuiw<;R+OIo_G`*I}l<*qL$ z2yOPP+I+E5@vmV*{eJVb%{7j#vX8Zn4_XO1i^#UciA$7HWK{fOA9Y?81BcFtjT5&* z=~ETV93~sJv#7W^N!z*c?^cTs@UAO*waCVF_2IAK>QnCX3ZA&}Utq4`G@?{HbMNps zJ5C&pAASW4avG#fAH^;xd=zabgKkCC@E+&vv)gahwWU!Xr86G;LPx$^833~hKHtF6 zyL`s^#FDFm;^9Fx{e^>}h2ZeKJl`xc7ojl$8ukl)%fmlYdA`4&+)~052lMFFCi1>< z6$o>&!s{XfBt?-=K_9(Mlu_{9JwHB<7dXB#8?H%{5YvW8Yvpqb@64o4(0T5MAsmN1 zapHXMH;DG384Mx+0c&3$iB}=m(Sx@&O@!s_chyt%&WY@%{B8VXQ|Y{<8Gp!7ybg2% zyQitW%C|C#Fnlp>;3WlYil6-4Ok*%`+vDW{YI)ouv9fHp_;k_<7_-8*!u=5=N{!p) zLYUZ+{69RfHoR~Jq&>1s8N@>>YXW!f^mk+Pxx{DJ0B!==jRF{w_9UQpKCq&6O*j_>FxDmg3md8k|Q3n)Jp@-^|mu<3oFCF!H~cVpD9#uKoV$4V#Xd9?=mK`1#(=YX7(Un)E6Qx#*qBpqgy zWGB3wV$UyIyZTVtJ>TD{)+w%~=uuFj|xZm@un+UmG9JoK}MjT=ooWCV0? zQX__=bU2+x1e^Y`l7PxgRGS+z%f~)K1fDmKB1m_{J2iS-S@EOt^HrJHr_md~9KwrU zlc3PF3B=J!frr?9d3AAoiZY^(uOHxHVmEMFE0tc_{%5-4(Bb+ zJKGfDySy4+LF*pxBm3X68mHr7Hb*XM!OCW(b3zq#i|q=3aLzJyV=~trQfEk$;wg4B zrJMr9c63UdEyiy!n=)voR*9we`wAB6XWZK*Dur9a2+?9eTG9W$g7x%-W2)sIYAb*7 z$78GJOR3M6KR+=?%bOLXngAX?p?6FOaPM@#;hy;bc46w zFee|f)!3dSR%8^>l}9t;hY4;x+2d}UjUg1HTRkSBz>Cd;dV5lq-`v!=e1gG~#w)JE z=S@gInRnhxw>no&hYbcG83=5!5#9?lCjR`{OtPzARF8&Eh~r66=(5O!N=xMKSW1}b zle-^$LPRH_v9h!$0B)}ADnbh+9ct@_te9vwKmstXvuci&@zcsGMdWWrFWoiD}2 z&H`JFc@7QlxO2WL+qeUzREBlVxRi!a@!KBr;b&`X+vh-iCFd_47~ED~@v7tW>>dF{ zh=y@{^TL!lQh?AJ#OoTibeg%5;|UX%BD<@I4c?lYSZA|~?C$wCyQ3B8K^pCe@ACDB zI-L2jHu%nWSQw8z_DI5%zZt1un^2l}&6_R|W!4jUtr8s3@~qRvu=J8Fm1wfNPY+b! z2HsqX0J)b2jL;+J4oZPE-6I)2M<=wQ z^5t(_EaTrSWA^5Fo7GHUO>d4=VI^EaPtSF_12_(KFE55OUQT1f1x7c`dHyBJ+?e|%h)x@Q zNH@)m8nbgwR~jiVC`yZiCWRXD1oRwswJij0QyCSp;9ctgA{w7RIO;A;YNj`dfe9KU_$0K3LE=9l2wg?N^6>$y0ka+f%?{lZu;IuYs~+pQ+H>s zg9en>p|aubA_ufktNvV})9DWv z?vP<4ado*4~qp5W_n#eA(omAA8#g~mu!S&yPqy zqHwJ{$A&zZ1S$80sl5Wy>AHC6IiC-Y-xq?w(nCkF&f-THFvIJ7Y|~@^7(f(h)rolC zLPEt0>1a?Q$P56_#+j=exmgH5Wv{psPI|t8$@N4D2u|oCvk9Mp((>gGYLs>u8+82W zz%gcS=O0&m(^@Bi_z^bSt9wuZGjbSu@U9{ElKLG-XX(s=oOs()Y#${@RXr=-wZY1!sA-&E;kL*Wu>T;NpEe;6lb`bN=XmW%A!pZ-Pn2f=>#5-oG_PYz6Hc+hic>e;wDBxaXD@fZWfX0Vn%=8WVS-5>Io zG$A35Gr<0y#AXOEM|(*2Oa{|FGWBnekZzywG3}>!x5#FPV_EW-@-9{n6FRiUYb=Y; zczUO5|MNEwN(-IL&^u%$mkB_aD@Y@8@M#f+N>asrJ?dY{e!?KpO_O(e8EdD zXPX}rF&viwK1RL(M1{10Tm8l{Bsi|))`nEL_w+_^ zO3erA$AT~2H4_@Cl3`@ZQn&`N>>XdZrYv2}C4>~Vw7wCZ67kj#?o4B2c5xxRfzm0$ z>zL-ko|OBO-xZ2~#4p9|pZG@`G5&8p1g8K|^B1c+IbS0blPr@sh-w@UY);EO8mFCEi zI^WUk(>XGCR$I}8LQHY1!=k{e)DjMAQ?8KnTILDXs4vI)XwU%;BdFT$`TO@LCcILW zoJNb?NAw1NduhEKEQ(z4y#uba#xrt)6dcMWWSf*eXvvC0s&9Y;qkO(|ich%;fJ?f} zfB)@|A;+7z8>F6*mxQqD^476DmquRzB2SAOt1W-~V=svQ<|LhG2>x=aX{j^#J%<-3 zQdX(yivk;bA=yE?nP`s)KM z#jwGOPYGF16bwWc-Yvqs!PN!VW>S_Un_Q(eLNco|L`$<}hM2@6mP7f*HRR1@g%OFL zhO57-OhW5bFqrH@z>;81q=QK18eB;VtRJfoC|f5eeUm4WeL7-m`~pSxv!XmK4nHVf z<1Z%sY3_TS4^Q54^312d-Xmp^3~V8Y10#d>>Q8^=H5-lnS3wh5?q;}uHOPefi_>>d zdwi1JLOaJ>jc4Zo`8ip;9Pyw-`nS;jM~F#*&e8C0{H?xb-u?9X&1P-+$mL>WEg>h;4)c4w}uM)a!^A z0G_h(FVn}?L~%f2O$l=Zos&VVZ{DAuPU15%?p=fHnHK5RUSw5)5&^1DI>vV3aL_C6qX4(fbnts1;g+Q8YLR85TlnCXbl@3XJ&vD7D|H)KAKV+dh#JjQ9yGz@!&Z=J z+4wG*jYhS5a)~ckIa)P!5>S8Qi;VfK2~Hj2(*W^le~7Vv1*q|NpU8pxD-xq|rXO|_ zbP^Ge)P}Z^1T|mBSIB$u7@)UX#w3YAJ^|))+v&ArAof*5LkQ6;0bZySFTutdogPnc zu6}>rUQ;xUiZD|U_;_|dSI1uo*&{)G=q%25z>;enu0LYXqcMb#`1z2buG$^;7Cf0T zqHs7rlTX`qY~HyQMR@*PVAC?@STOFq!_AUp>2?&FKie+0 zzQ&MZ_-&QRoe11jme*Lg+h%xM@^+Hl33mKe`Q3%Sz8T)(xI5Oc9Z*%8MF`lMQPXvx zPshjRmh))1T;jZKwD<}?yhGQdj(_^;kG#UEj<;DVc?s_xP6_E1h|$q_`9PM+2&p+M z=VHN>D&hhB;{(9hDMNBu7)ZcQcfMK}G({ud1_4Ayg)m3BgBoDA;!}3pLa4HbhBJTM zvT$4V#L&7~>-P+*KhxLmy-WCrN6XUrJ70ubfx=^=OrJ zW0QFh_7ZIt1kh*>1PE~kBsgzO0{^8J>*v1It4C)i-Yffx$b1FX=e`0`X1@mLjVtEA z)@02Spmpm}S~&yH6!fi+3~+*!Ra}0Pif~BSJCcltbogBGm22<8Wgo`GIdSYV5;SM0)|o!FC_~1qGz5xZh+*K5PZI zj3kE>NVEQC`>GV2!0lDOtT}>4Z9tW#=Hk_@!KE&5t-WDqC;A0-Cr~dyHK1K+-Ia1h z;l-pYV5zh#%?0AWlNk4O%s3ogjrP8y6n=ry#ba?Nya>g*LrP~1q|%Ub9GOakJIu5+ zAn%I3e~{kM^*=^xFrBk&7@Ir&$H$!Q0gQ-!kLLIH@bWv-iA)Y-O;+J-NNI#~iIWTx zgqIqeFz4EaKXqf#)Erjz=sFI&Xu#Ny@*s=`Q+Ab9NY4X_m5bU&be0-2LeQBS8wAjZ z2?B)30tv2~0aA<3!&lU^xM^8!bOaSE58o5lVpRs@dbv0At8UR(}`R7?_LU}$ONV3>_3bu8$E-IiC^ zg4anc=hwh5-?j8wj44tG* zR$PVwHZ3iu@GN=N9Ax&4EI;qX9XB^v+_b-(G%5uM6m?mbKwj2S`*LkP9s z5KQm1T@qnF#Gtv-OJyctFvLp8@=zD0L7yEu|j+E!MDZC{gA0TfoS zfAAP^JytN1div0rqJ$NFukk6aCNvP1z%VtN9aw+g;EmEl%FXB8Xu)bU> zAZ5YS04pR@Ytp-DDjmIip7bT33WE{_^l*0flI^~2-iE1RowlEelB)sx%UOdduV)pq zVnM5I#1-8i-_?FSTIFru9KY1hf}p*%IS@dj84w^u{!4J)h(JK=jlNgj*U;I4^NL;) zS+BtQyjMWV%+~-bxUV%?v*>HxdX(1i{~MLR%TF@z@kA_D;yVD}Zc&oj-D-3Pe2f>z zC8iAE=n!?AI)xc-*}0^2ZL z*uyn;3!o9R1qhMV5}dbj35=FntclH1R~~VVnXK&8B9|3dpUnzLna>)aH9XX zJr{!f$hhm^$KFO=nH3q3Pzl)|J$iCvNR1BH8!hPYHSN+D?_O4WUtCSG^Q7P$4+vYL znr*)m1X>~9HICO9wA|1+X-g-R@vQ!zMlErF3*k?L9nUdj}EA+jG<;_p^8Xf zK%O20%ns^#$EjIJ&OO}vmQS<}sE($sBCp#~@K$^yL_g09pHx0frYHM)c~Kmwde{{;z>u;uNx)bB6j2 zst5)uFJ35xX7$$wd2E6vDu5%gk^0osR!o5gmq3r!G>tkzH3_r{P-&D24HM{66i-Z; z0+v9T($XXCHxw7x z@w6ylo#v$)XRC=(P_`dU`qU_0>nkSV#44rWgV_x%GN)+8;wb`0d!fPcXni!KoZQv( zA*yKTZ-WVZsHY)?4;3`*f*)j<$douy;y;1}B4>}+mR1r3Zu^6Dv$VxQItIcBd@Wf# z8002xgDF`93xmC^h3Kw-6g$|=YHMr&G3PHzTVuzST&5UcJ4 zI7Y9DfRsdqdJedkC|hu#o`4h%bRZx#rJ|k-z@!_5b&`-qMhY)Fk^yu2>xSOyOkrsf zIbGPE)IscHr0^&{=SiEpByu{9S4@wI2Pgss>eihlB~4-#x)w?Uwv~vn?I;qbM(nfm zT!eW-(hx$3ZnGfbYCi=bx>m$DV1C$JC(Z|HQZe1ZkL~#_p=rnJ08>+H6B!)z(Vn-J z`CkF)m5?pDo`SQ*6jY+^G^muxsqDSOOzF9C;gEE=wzE`=vCSOmNIMKCX@2yc+s_VY ze$6UmBO~XbFKu~Tp~^AZ5)X5N`6`1SimdYjwnQ*o^R=fr7N_L?G^(j-IS+kklm#~j zkFS%C_uqrKEllE?b3I;5D!(@&0-Xqy1;QPeZ$cpYA%AN+p%eKpR6I7RFFNrzm+ozf zhkp9J6S|`>IVb|--+dwcjtTQ?jzcs5tZsT(ls(IahvOv zY4?-Gl1nq~&mW%_*>aiPjkt;y+>5+UkQXRe5y)bUcfYuPn9$0v%Ih`c={ou8%^R~s z^A8+AsP8Oa8c77JhJQ2iRW!+iQ89RgG#;8{pLqBnp?HO>G@JgsfGi0~lVM5iJtCS7 zO4FVm!h}(2SdxdOA@ImZ8kZlr+k~4QFEg{m)WDLzNt(~Z+)c!5+7bG0P-qLEErMzB+MllS#3k_|ok(5M#z6uSgfci>?>VC#Lc4zfYA7t-<7V2Xd zW}(1-0jzs&SwI%xrqSbK_uY%?7GUq$> z^X&E^Luuu^QLC!N-RHy?tnKNnzq4Rz9_enYtRATLMQckstA|nSw9@Krd_2lc*;+kN z?aS7d)K(9pXf0cqsp5T<;Qb1k!?at)l>r&CgBBi#h$k1eri2PJEq2hAPdWcpsS3!%XvwJ zI^ZT8E!uSBsKe8m&^nH~4!Ux*xZ;;YY60GatA49)d@V3_Ah(XUMJL_43(fVl_70>U zc1MHCBMoHdHbB{ImYQMiI+IO$OPuW{D1Fw{OGGowomo?LKQNUSRXF^?*X`Td6-g_# zJ*<%`O8Xvd!cxWH-Dk5kxs|uc81X#q~>mU;+QzWE^nUwB1rjAc)+i?D5 z6rHC|LfhA<5++RQzUy4kscA)tVjf+*3D+MgmJWEE%wGeNUf}5K=6Rc=*N%&*LT5`! z&`{=EWP048#2F2DOm6Q|lG<^u8|qh#hEm{DV+qo5Z-P%kC_nDD8J7fv0*~q}H%XQR z%rU9!kfele*TJDSQj|by?;KL%s`1P;V3C5c4=GYm$He}vnABL1HpnEdhc~0g7qH+t z30g0?7*A3zQ4Naf$%XD)N>&%*`;aiXf5%ApzI~NmH2mp<|7#D;f+g z_eQKyA-ge3L%T*ITX9lY9TABFgvdn+t}_n>q-!FtIro%h?bD}#l=-Itc4MG|b!`-e zJX~hT<-Q|TCS2jI(O=kIrB+ost=Nu2cd9KaPdo3xNQku?8;Pd8d@neG7!?gmb%*&% zK-_rtRGgmYzm_p4&a6sb!OS*e78GprS(cC#WbvoQYZBwFM*A{Gn?Acek52xMX#O zE?$LXOKdOpFSp=dg=92Yp?=b8zTo;vol`wn#nvqV1~O}9Q!BOF@=9H|g#c|*%k)Eg z9wMrAgf_h~^)a@;fjDhaAN9fVUERVkHq``ATjbjjrjA6%XG$B?s+}p{S-sS8WG`Nj zHms96vU^uGQl-zhvnr_vs<)++dLex`l~NBw+k#f=fofltHmR0+A-%aQVf*g6A_5r% zX$18-M$>%~CA@tNEph535<1Ts5)QXfYk_v<`cui$LHtV`uAAMR z7_N3o6yMUzMZ2DA4Q0h{+XK>$E4n21+9)=|m~W7-sKjjBfSr;v^L^$z81z)i>11L^1ABA zgd!8U<5Cs#ZBzP#c8TsdUn&QjIBlN;wS_0rB%l^e)7VpenU3zki&~=BF!rRGuO+PW z*s=UxaygJX?a|Bd{x35*MNBu!2}Z$SMN53~<#QW5Dkp^Sik=L8_dc_-{l<8RM)stBUA;r}g$ zm1cAP&1aNk`)?zt4Q8~7Q)k@B{wn*`zR{qFNA(| zu`k^J=NH0wN=2Rc#FPy#Dye4vg!k;8_C-v*$gBuVv)~sSRpgk0`OLOIVf=G3ej1q$ zg7$fDY}y6bVx3($t81p2q-|?7YhF*lHSkG;>thZy+}&qH!`xwXjb}@vp_kDKKA$i) z0jj5Y6EN@GxZ2FvTE?Zgx$%T4V13M(g1Y;ZDTvz-t?{HO6x0pP-k>V>BKw868yy6r z2wn-cxx1p(WWRN7T8zBD^SY61owMyp#c>M@VRQwDZnRpA zCo6=Fu;2O5G+=X%f)7EgsOE``!OuwNA6iEzQDDd%U@BWipkj8{jTrs)os8g^)&w<- z@Ic~RTY7)QeU9d)yF1C2e{b`%HZtoJnLYR{6dAr4d0Olw;B0X3Fi|L7n^?HI_guG- z+xC1KjM-h)Yofngo2Fx~@40TwZF|O5xnR`A)ww3)E?PAmd0PKT-xy@w1=5}7=c@imW zOMb#+i2bz}GeQ?$$&zRfA=>j@#M5GN^h9+cyZfR#xI-1QIry<1hb0s(m>ZyJN@fB} z1NG@7-miJIptN;9kh`<#l&y z->wK~M;`u?Qj0Zjf~lPd+$jyw$4Fj<A1vMtUDC%$wk|Bf z(cCWSmA2&VnpWvJj#n|M)+im>yEFQv<2be}Cd!%d&Zv_v^zD>B>0uzRl2T=(^uXZV zP$@kOq_w1UxW5+!d+cFmD1Hm?~Lk2z~FrE z8W)ddtMO!(E!>YqT;_g!o2>@Z`R#a`d2K$L?}6ud@UQ>+b@W@dqUW49^scjIV9gt= z?g&gJOmj8hW#y zqEGz+C?Mq#Xn<8i(Ao%N_>%p|{=Hc#_hqceILFAHTLam7%ihueX#$$o_guO+M_iN38G7q#O1r1W@8)l31*)M4*nU zs!l*HZDB^0L|6#1eyW0`q?n-K$2HSZnUNC^RtdRoD)lUtkVYMD%@l%+*Q^&$^TRgw zIo|8G(-*H(Y|qFZrpw)CT(B$r{Ea{icY;96en+qQb64k~#>n3GEVL!><;+2XE3wr{ z=tAE{W}!ovKGq!_Q03~W>2fazmsy#o=!;qQT@73hjkkdSviY<-bg6?7A{~2Ra>s~+9}{s_TFXHPm5`~u z>2`0}mkyWM6VScdxssh*A-#R^?EjR#x*2}9HS9KI{kJ90E@o%@Z-AFw?6XZUvkQHV zxY@zB2~;)y=zvPtxQ}q~Pszzp;PjEoBaE(>*~%G8FbRrtOa75gpbmnQBpW)04_c5C_(q(|sQfJ*H{nT5C$1x)K@!r1~Z zQ`37BUp)+MdcnKVb-aCP!2SZ&V9G00h4dsioD1M6?_SE{|;Cgg&vs{f=$T{Uo)n>z3W{cJ6=K1yuzJ9S* zCRj)U#Mk#Wc7y%h;Emhq5}Bx}5>fayU|;$*n6mh*kQMT;wviV=Uo)U~>yauQYqXjV zLA`0SA%I46AwY;TA;Ecr0|7;WL3mhTh}2^3vmkZqk=f52C`wkG1O?Wg1qGx$4H}>~ zz<3_CChMIDtyhoGl$n@8yW8^y;_YTtCDV#&TKnO<9I}x3anyGsFbI!I+)G)m3h&SRWryiUq-gVu%#AGG!`HA%+HPkXTQi*q zv?91OE2xjb7}c-~>#5Jt^tig(lC_Do*1~An9QDZ`amX4`bP#Mb_hBdR%2KsVbJ)~DIvo0PGTZsyferO71%xfKhR`sU>ySG1q>1^l~^H9^eoJ zp%_}=`VHjxprtW zijH(S8nJizZwU49PK~kU_`kJ7TN@P~cYeR8XxR%%M+3*gG&KJ6XLG_Tk3@@dK<&QR zJO#@JZD@umztnI=@JltG2%r$nJPi?a2oO*U0P-^t6*zB2fPlaTR9g5)H3csO8WK36 z_zof~6j+}Z3P_n58ej!Cv?c;O6wrVlAF_K+7T5{9p{?0~c0b$wCv`k)(5gVmZ_717 z4Uq`M-L>8HGikI7RdL_Z)%#XxHX&^S`?MdbhF4`ibfax;jPs489h$wzxha!G`h-t0 zH~JbQJm6|Mu9|30oBdEZfHlk}P`+5LQOoW%@XPl&%#6)%zvOYdq%^&2O0?*yYPB$74^%UouYTAhCOq`Qf;fZgOil^GL`~ z;qTqv&3^>GKa2=DxreMFXUM&>sgg~Qoz3QbS^GL^S~Qqxl*ZU_g$a=k zZMFr_Xmtq?;0S=$9=hpsT}h+pxT*w{uU!88n4wm>ciVVkpc68Jmyeg-%L^FJ1O{T&5G8h`#4TU771K;3lB{GSf{QbDq zQPfiSmbk6EwFs1gogj#v0M)0^)u8V~);ehRy+6ONBuA3+6&ASx~G`kqrv0FAWMvSsXM#FIEg1TE?>534}t@3ulEV z6%)?a-+`pvK5V+Q!K}fG0?HSgd$%(tr#E|P7P)Ndr<>Dq`?4+En6NcSm_I7>d1vNr z{x!1^2H299tHosY+5QbaxG!*9G8?UaJY~zlL7>EgqO)dXRL6D57ytfTjGv0=MWOj! zBbVv$Bb(h($m3&nyP7Y&-th&$v2DAqxGAmY{W08gga?SensLS?VAls1j1;P-UxKA=NOlPg3>gm_nZFa5_iz zHVyfyBkDk;<)x0h8Iho*m)u$TUVwCH#?b|`R5fFBOC(u=5DkdUlho88**t|WYaY$A z**urFHIG`n-B){CU7ei>+{9XKOW^B_+Z`poI@XqkHyR^dF zlDDDt-GaQ=x#m=FVQsfy<|bEm3-Y!#*UBN-&MfRM^lf5gx1{fNx{W6oukDuX+}Pr7 zNneZU-mwytW-a0LhK^9++O#9@Z^MV&80^T0`^mzT!s+{Tt4G9UtnPd(8FAASt{xE^ zirpDkGUBv@D6<5LgQ%X-8`@i;$Fkhfldc9l+Sni*qw6}%bykx>h-W|OsW|4=j-7nV zD^R*x0~>?g8g)4z#WA;}E<6sB7#Bj+aV>=29#H|aIujL~6~#;neyrk80N8>xLHnju zn+-WvksG)-bbQV)etHkgqzN&Q-llW1i}$I*@7kspD=+CTMv* z0jqG&dsLSm;QT^bKWApzsXhJmOOdB``wc<-z~`7>I!c`@5`O--dA@E z?rm?jTZZ>HHr-w5+r;W_N#E;)Yx{RghO$7)6W;FvZ%JRP32%4Q!mJ2l0QjQ=s@T!V zx5suk|3;k1C95MR9;7&R@nk^d>r@^I@s$pnPxUfwNWD8J@h!)znBw0~BG0h5CI?)OOk?O7AwDu&M zX<^BRoOAUg{Smz#9gNW@v`p7N7{?=MfxaH`1IibBZM;^F*1#{bBwLB%8mM{Evsbrp z*1#`e_NL?YWVZB&*YL?Dwxr^1n%B}FUPG@-Ye~i1E~}+q?1u6psU;mdHuN3MY1zRs zI5yWYEq6K^j6uxqh|Mh#NHw;w+lmdW;k_;5axV5rT$t)1u`PtC<5>vZj$t8=Rx|~y z3h_0kDaZhc$q9a};!Xg#VIp#NbRnWLeIsB?C8Wxu%2o{-R*9<To(w^)@>}rR8RCRDxl>ocI<29G|u7fg}vq*PGk}TXja_Qsa&Nbt1!zhB&%w7S86m zw6%%UB8xk-K06U;M-k5Xu4S>L+P!^AWhahqLM3-1P@eLB*L7P0x4FuNQ2Z{f@wVj2 z)14pE^WuTxGhrmfmm2UwuL|@MxMB!dZoLZ+zIqlTzkk*!E(r|)huB?r^ zKvtd>^Y1@$V_=QBtfT$;Y&D+Dvc<^snVTaGNYFL`1R8_76&jpBG3K*NBTc|8$!@bloOH$&-FhZNS-(dzntO)@n`gbB)~aJH}FSbg-Bn*P^E zUrkc?`soh~W|Qf5JrOM?Y6WXwOEv4Hoa)5Vb{ghINo0i(>!vA4PKwD1eq1XhmAO3u zS(T9MrSX)4IrZXot;4OAKCr2m6Rp2@9!?)xrY}yX*v^rw_a+aU!Gc(O{!=Fct+0#v z6+1QyHBQ2|=b$ZlFJ%T2T%oN_K^OWqFbD039@{xe$6G%~Zp1R7MH{Dj)!C*xWLC6HqgrfDk}1ZAQ|!=C@-}&6;(pZ{+N&1v?1<WZD-hy&Ko&(@A>MwPb3b~R2*6l)!Ir(f8D1?mMTS#E`WRJI&CQm$;y zG3g3eGVMzHdg7frX>4hhroM@=R`#mNkk1Td!Dvl8@`09=*9qh(Elc#A zJ*_75+46EVUyMH^wEgziUq_?q{B}GYVfUNNk&!x?t?oy212-7_zrin~--mFRYg;aF z$1}0v;^|>L8^QTsXCMG)6rcDo;H+VHnqbB2ScCH?$9(QWiXc-0Ap%s7WGJ!})1iPR z6Os@_OgUJTW<3FQeSA_Ds5w)vn;drxwehFnJ%=-|q-J(`VfXiZSVRS4wBwIzGp zeeRJ&D~#`?RAGsWby>TPOm z2VvT1AVwlYpZy1UqH)*3kG=I;nFbn=Pzl)|J$lk-NR1BH8!hPYH4)U0wUkm2+pPA! zxSC?;Z8h7i6M0XcvT%I#2%IztBG{*Ns)~JR1IPct_D!P z*f%8VSiS~!RnOXVg7*ku7Z;Joz)A~#v5P*Jcp?50_Ml_ZYTfLd91${sgf2dI(0Pccrsu$cjt3q5 z=!<*aUjR|nRi&dG^jis8CZZC&k|Nz%4(ZY11Zs5PDq7Itt5YpG)ke@Z&z@?f(HA}1 zX6nn;R^6FS1lmzJZ@u5CY)je3CRQ*cfSo(+@ za(EA~Z(|Myb^KogyNn{Jn?jc*#bVJhLA7nHOc$^;>ej|Qe?!=z8O*XTP$~#aEwb_B z&GY?eVneBe1F+)uVZ3mK&Vp;(!@WauL;ZaIgrMu~m(eUKN2 zgDMb|wM8rVI5@Z-o!l%}<5jkD zkH(q4-<|J$yr&iePSed0z1>4P?nTBL6Yxp937znm-9&0w74EKVSQqK8X$%IeIf1Nt z+}Z{iD-v<5^+hA8n=q;@^$|ie>L3Us$GC$Z)6rH2hJ!vTAsck4$9}`^bhz}+fblhA zEJlngS8ZQxOWBbAK9So^u~gU?{S~oohPEZojv)_(Z-kx7#=bNB>_T5thPDgIv33bG zH~#2=syMm!1Yj~-W($t@9gUX{oUe4f%vR1B#~xp#e~|LJegN2r>Xai;7$%v(S3F-W z44R_RV3jS=#rPJM86dKMKjXI4Y92QAr6L${(7#Z$oJ_N;jR{b|a!aG?Q}F6qT4OTcK>Bn`m029*O?!)yZO%e~A{ z$L=-o%U2v`#^&>vEpb)!uYrND0%uF8`n>&knc?}ghdII&RABA$C$kcL*a|MbXsN5= zx6gu}*yU?Ep0Z1X*(jx@rKx|pn#?9plT?K0m_Ie~7|2zHz>OwzaxNeTjN^Vfc=t03 z;tqcC4^*ju(beRRpZDC75#aorN;1|kX)j&IS-V-Lb?|yA&uMgOj=&{sN8pp6!zJZ_ z9_5Nxz~*ic7IEXi(GJ7FUd)V8`D1i=wAg8kRfF?Q@rpi#0Hx4_0F{DYiT}kNC}34R z)Q8&gfU=!!+oC2g=+A_0kq{IVTVa&-RK~1GX_HH#GDI7w8&6M>G~%6I#C;_N1LdJn z(=f~@ArB$^>C`C?;(RgE;Ku}fm0`UAc_m~@PkK-<>_>-7=mn@=Qx-hkS+^4U;#Z1} z-S*KsE(xqARNT>D^1e)|1X>{fa9vpSJ@T?1@ln%}#FHeR>mX6C7+y-a6N5JF+%7tzE2!P0VW- z`qnwIE$I?xc6R%a-G0gL=q!P6Fx{eJ{HnO_m~R^HB)q{jC&Pn3_6~pD%HG3%&2>Km zOi_|+7;Z|plHvbu(DUGH^xJxdUeoFN2cEFd)-dvfUQ>oXy2(CI==$;KMW#w4jJ*qL zqn?Y}8YRtHNPk{Lu=_;fbHUk;<^5A?y=D6CXoTuCC6sY}rwDu#` z=tCpuqampn#O;K?C##7*B-O zWX&_7b?Z^uXe!)UVi75b2U`4Mb}hSiDT+3)ctLZL$2DgTx zq;v(z3r#F(V8Tihh9y9)XHYdA)elJ#*?3F}*ct|v&{KI-*^IrNSF1?Y2T4k&hKJe; zB31Hg6RnWEwydExD@$es8VLK}~y z_$4C#6CgL7rG(O-rZ#vU+8vcfqDgH$E)8y7qfF^fR&q&W7Q|W@u>iHk@z(U#cC?Db z$HP^?)-~RQ?rH`+oy@-Qov}{K(%jAXfcll@0vh6e#S%6bN%Do;=YfwqHkMRdTHbY&R z6Cd9wwc02JjI zNpPMK5iD+#VI;LEA0PD1eyLZFPDxp(GhflRBKH+opZy9*ng1G~H?VjDv?gnw0j*n) z(z+>_&R^9y9So-%^S%IAb5GMxq6BNez6fhDWf@i>J<*7TSZ%XrDOUUSXzeD(=t0m_ z+B68D(If~E;uJ`5-k^jDkXo#t{Zg+Uo!ywPC@GQq3arn51*FV>4bU4{JONshHP3+7 ztw(9q6nvUylyu&~!bh;p6iJa#HM{g0qpFWc(z}ElShbzo78TJ{rA18$Rc!?+sHZX( zm6SG+Nn?uYU5jzhxGxdNH*%}-hw)Ddc?gk)If#75NP`~}@Kr`Q1LT#EDLv_d&9EOG zE}<8odX0K|>Z@)g^u@2XrUa9UU1seu<4y!x!K=|KJ@T@JU9d?`wk2<~d~CV9Z;X*$ z=u75g2je7A%lM-MDnSh`#=Y520;-m_(~%pC0cY4KFSauTbps zU;p*%`1Uq?TA|d+GfJag9RBlUcs>}Q@q04a?2nWC(dYU6ZbUD)&~ZAz80N5m8Q)B^ z(d_y0CR>c~#Oq}Cd2p3K`x26Mc)oYQ>1GByxBNC=+|{-Fb@=Bm!~Olk^Q+S)dUkn{EuW{WC6DIQaPRu9;mO_I;KPT@Kit`jDL)t zo>znY5672RqvNZ?i{aJTg~4D&W_))SLmv|KyAt?E`~8RG)8DNOC~cLdBdO);A)AdJ z=XiP~iO2%H1(i|bG%|0pdsG5W=4A}th)l6@BQlF2*09rdRlv6)G-{nlDYVz%>TGmz z_NS9XFUodu!ljK!Ebr#G&yT3QJfc-DDJrbIP*2%4G0N^fXCq2{BMo=8m}I_&L#%sr zI{N3E(dp6Ke8Jo=#-H)H6dIvqz0s&2_eW>fSCHAm(ffC_?UrM6}* zDYE>L=cHIWUW01x>rE7vM-9wm54e-s7PIUdGq8ej1>c_L6HJg}9GMJ@?AGTtwgl`> z*q(pOX4ztLdz6iz=wRdbgY)rZaXh;nprY0F;lXdv&!E~<`Ph{GUuatalNZ@j1|587 zgaR`KXjpiiI~pUs9&BVHOvBO!Lh zQ1R{XY696q=g`Zos-M)_%6TVnJGpK01b%%%T7%m~e;Tlyrkb8<>sl zTcS!?zPc=dqtjfeEnp$i>C~T#@zbby!QT55t&36%*Q0$%+;{^0GkRLgzyI(9HU4MB zC?TFD=yy;j*S2UH7NpR7(A_}^<-u_1)J$FDa_@e$gg+-y`M=NDi|~Fm30p8HXnn%w z_Z@>Q=HIYyJx<7$Wk2F0c4nM;?dK*QgONOmJFwNhqy3|^<9(Raqtics`E-=g+e={j z5<6lxyZvzp3m-Cl^48ebQ#`3Xx|w_){U=+@xnrn1BfI?5WA;eYgkM_kfWJTRfbsn^ zJrQZ(-J&5p_FV=~EUF?o37j_*3sIM)#5h>ZdxrFEBPi&LsW-CCQ)3TKy@%CPS9V{t z_7Q#a)+tNKwrSf5u6B&Xt&yiKDBC_q$twMGvU=E?fA>uYe z#TqKM@o--yC45k&af7z@SqV?g9VNFtDe>$ix$SAGt$7PW(RBgMIJPXcrsBVBRmrWtE99r?$q)`o3(CJz!E!n~JsKciBSMt3T zT~mT@w9#R2j-7y9$IbsD^?s+kw z;B)z)bXs~R_@LQt})G$>6QQJ^TQBoZpx*3r<^<%ky;&1X{_?Px+z z8}U z+SJUy`EQN;z>B9Z?zE+6L%b5S{uVjaf|^b6N!gmV#i*9#)Nrbu!7eD3c8GH79_PqI z;7ja-tG%;N$miKJ`NeMs_6+~&VQjOAwZz}|IMg?ZT#rZ^SdMO|M!wPe{j)R5BFpn5_}gRY+YuftpCPf3 zX0Dv=Mj1{noz0Yr1Td1E?-%pO(cJ_M__bKq-{tW1&`|MXw0syZkl98xG*=_etmEW} zBcwUT*)SB!1=^1Cm*c)CANS&)rXshO`CE{bV{F$#BUs`hEPD}L>EaP&{JDPAHK3ye9k zb5;ZUX*h(&GSllod)7w%qqP#=Ct|CO`b6opQO`JyHWHDxT-|2psA6hM#OGCl)gEWa z0bcTU4cM#`S^_X64x&jFA+Z3UvdmuOm}>Jd`tn1HWu9cVQb@#0g9H^tv~EizS-N3f zIGf|sG3)sapUqkOW=-?d)?Z|vY+}|r5xCwtY)jhOXS9W1yUF=%OWxXNvjt)6oy(T4 z_r@l(3w`UI&6bn})A{~<|N4q9eZk-S^amWy!Ta}zhwsU=HCI|s-oJm(&Zkk%?t%(| z!w~We%+U?56fWuV7Czj5S-$g=WBFFY_4(vGTm9HL_kXwU0(x?n9h?I}9yIq>pu`Oc z;cf&D1&0uqIrq?PIT+gUJm5p;ih49W!D5iOjll`;8s|E7p%C@ zRMpII9$a7~-jycP2=_-O3rCmtD+n|fxE+9Wi%Nh9QH)O6*IA7a%n>grI}H4LRTl+- z+{1VVu_H&vTr6FUXQS1auAM*P9z3Mt=a2jQ*Q?3&g#YwzW(^?>s})_jXK5fW^+^f( z~BiUA)#;&$!9cs2G{TaH2gxe6a23?oK|YhH$8^ih1LwuF`B z-6cH|h^c@`#Oj6gYVj+u={;Q?o}BN0xW2?~{pdohVM{n1nk%hAVxQM1LtM7}G_tYI z+7VX3*Ys#^#~$E@@QDjwdh5+jyBS|KXi`6Xxj3yK4OH*vc!mlK^bD&o0O>a!6W$pc zKQ6Bja+%?N=h2U+Ij+^?=A48%1y=9rBD>EPxR00ZbJdPte>%JQUxcIg$Jo0DAL#;W z(5Eo6_83&EN}=uRltJc7qHXhZdc2#lRzgdCdLTMpmV2)W$HmdR3)Ufrg1Hb0TV{$17OHOW6AD86Z^Hf z@*gxXbv39TGOGdV3T=c?;~QgPhy-1^Un6QvRfx-fKTnnq*c(Mv7%0}nS!Q&)wqS!R3}$02Z!L3jp!sSwe+{0g{hWeeR{i{&lrKc#0sB%9t9$4zjH!) z>C0nqpVO%tD{fYMp9IqyUxzf^T16IgYrhk_4Y0`F((>ZVc+WFfMz>$+NiY;MScPL_ z2-gMw5iB>Xi9+%C6QJfRVd8f`O5cv@TjHqC_VrG6u!;MIv$y89I`N$d%r&0*kncfF z*Ir*@(8plR#8`VPR69MA*&^occFVQv0&uY{c{?Z&9fz_3acCJd-Nj&qKC1R zCBjyZ8w@Uo*ajn$;O)R2O5DJQ$i9wmCS3H?IbiTTObB)|UJlCFZHk{iBOC;KV_`D| zM^8ABsK{?Dk{e+^Q=78j8I)0?mTMfrC&F)u&-xia*J$Pk-+l+ws-ba_3 z$zBS>!f%~s?@_ld3ks~E2!08Cev{{%1^1CK3)XH6T~u<Dcl{&aoFVV&8X}*aR^6-L4L&Pttfx8F5 z3v6`rnQ_Z<`o4i>h$anwj@&q$e=zdzBP6zpj^hgMj4eN@J3rX_0LFr*q7Em8HCV>!m~S-yHlqrP^C<#`E3U2= zjoO?s@tGj!P9W(K%=*@g(7KF>Vj^%$2R}B@~ij-`qvtT`$z)GHM$VHuj710*Q$SS_u(L8g( z!qE+i6*+n5!Gaot*^Dj(W9itZV#U0ukV}bL32whVhM1$7GYbfC98Ql=IiazGw zX>&-1&(kyaDDa{Xo{MPB04s!5r`T_FnT6H5t44};f>Bh-9J}ZeVX7zR{OrSDZY|kZ zB+FxI)?Hqz&R&z>4yr0Z&OfloRKjqnz-Q#x^Hz~80#@5r_J4JFc}cZ`Spal0?cs1W zDti=kIi~1cGL`1oxe~Kt6`_qReMo=CrQci)U|4VYQh-sy^Y5b>^eF8M`GBGM+*;=) z%qr6YqWC67cjw5LzDsF@gm7Q<14e|qs7;+PlJz~q6%jt*Qd_%lGcv8ejA+lDWQgwY zX7`PBgSPdOz`G-9FJHFsA}6|EvNK!No+pn#NFpaE9!KxgUr56IJAx$0@y50c#LoVyytl^6T=cMy zn3UHSrpJuocyXmRJU_W>lgN5{#^V*VBSM@abDnqnT{{6^!F+6>9!Gv*u*`ZKoZ)xj zJ1Ts-jNyuPTNZdOKSI1^qzo*D!G$Ne`iDEkA2O>WCJjd&krq3!tiRpF<65JJ0&@9A z@b`|20{8jK9O#c&#bJy_!@&_zU-c$MlnB zHLp0G2@&aMn#|{tXU5RZwO?y0bJC7?PJZadd?UMr!{;RA^HKhLCgeN zbz22WkZXxGxTxVXYFjM*&tes_YE*p(h$|b^ABfo4P!H<8-~*+}H8Z*oP)Da~hN@#) zYNfWW&|W|ful~AVCY(t0gIXUjvPfMTBzWc&oTaaLe;{{2i3C?Uo@T!P z9{2gh5Qh;3s?_$N6fdWE`*7qARnuUg*z2VH8 z&9+#8OWjh<#zI>SEW#Nhy-H!NRke`j;ZhaAu#RzdO^q&VD8o;AyxDjJd$@%5IW`NN z%pPmjQrN%nOg+SZ&W9354izT{+tdIvXgNtUEQ%iWLyiWWkwfcJh0dHhJB!by`gY$5 zWtKql2h5^j(a|)TkAEH>nd)OGCZyX_rVv_GV+17N2{L*dVlSM$vnm+|Z&eCVkih%M z{vfyO+Z&sdM{L>DRGZSIZ~zqkmDO}q`%Q1iP9a~?!2;gKU2ubsxgD%-R|8{=l7e0F zH#0VOFN!2laZqnk3e?_Q&5$=pjB1nxT1MGK2@BVGjN0#pTpB7P_)e$sC&UBhd1C67 z@OtvMCz-tP9fD5prqD*k;(#@M?@ErD-3m};8~yuR%Nlq{4Tr8YS-50yb0B)^Se%)6 z#M@y9R!Z1z^mev=j8Uyj-7-d~7Rg=9=)*lJct@k~qdzoQ-(8}spy6XVnWCK5Gg@xM z=-as=(#GJ9>`kd{)|XD(t|yi2DO9u1Ak($$OQ&nthtNAD?=R-?gWk272uVd z)`^qa4kaA}JEk!$UvIb}e%Zf(DI)6m2oRdxq-u}`fCCZ48vsmk+k6*{{%@p#!T*f_ zbj@o7(APo(k;3w@_#ak_?b4r}Hq2h{2__a820I`)A6_7I zt_vV@gLHtiPM0ln%KPHt2*HqNd(1hyD``dB(bvR#EPsbqL*_)iT$W=!d%fn^J%2j& zL>ZXwDfW=JPJ^KLULeg|QF(yXr9Rr?J3rmjd!*rDTCL)WFrV!VBX&uk*iNF!gvX39LPI&_*# zY|_?aO04bB9XE&X4&0%Ml}}qw)aAnnPl$d@A@e%vKo+&P7v*|8+gw1bMXHIw55FUV zlA7$EBsHuvrZD(!gruVjhS9R8Lv~5^{+U^kUHa)gX z&=#t@XE(*gX%lC^2uU^{POn)wX%Z7#mM@r+oMN^4@G6StEI8f9)1o|YAIjxoC4~oJ zociqz|2QmXOPuWv0t(*Ci`%};`+E1B5hB;eR|P!Ju6G&q(MIJi0-f;G>$Ptr3(k75 zzgjI;^6#GQ_lBn*_Af3>O6gV-dHtQ+yb^s53FT{XUrF4esl-an)Ez@K%Vth$Zc5LqU0UFK?H!Tm+LJal zcP;vfPm;HLuiS792Z*2Rvo)TdkEwO>E*XS2;oj>-kw_fesQp`AKv4y=VW06|Ykv0O zTnLR*W;M^gY5R;`o!Y4nsdux*2vr?Wz;$rE7>{PVjPRVPZmyOSs*&>NycBC~x@Xzy zM~jyVt8I(LH0}Sj|5ukwCD{%R5p{{Fm4am2tq!gD4D7jRXwsMIG6NT!5$I;kz)fCo zy|%cw7R|y2lHJ^2N-Xd>1oxhY(3v5d`#}C06e^hCV?fj8X3rHuX}#N#Q>x|mhrHSb zkx+Dn+F?p6DK(dO#N+Wr2wD_Yoe?=*LtRhNA4jaO=#F78_w??LBK?r=-oE~N?cVmP z`7PQ5QT|cY9f@ap=+P+ic5J}FI}H&M8s3=D9|zw%3WD`EtpewNXarnz(`85DtHFG6 z1sBtQdgxn^DM+|M=O!QliubJxam0KkAYh~ekRRokf%Dv%K|tlM3ngHtMIzj*>%cP# zo#eR09Aoa2502>CMYtmu#%pUkdavKJwD9LeHBLmat5(&OiemtQ3Pfj`*Oxg=P z)MEiBK-DvZFgj1-J#I`q8si)vRcl^?Jm~G|m?Vp*fd$750MCMYc94#JB-m0+cZS7u z7(?cK#vNq9nnutbZy3+3Y0(rL8Lg;k(H0n)YlTs^QyEW1mo`?5~#zZ zW0SLK810xs9zt}(9M~#iq`}7y_(c9YheF~KIcMUxX@I;DvO`Zm_TT74k0Z40(bt-< z9GCQ$?1x5xy@)_F3ixu#)Mi-PE6!!&Hu#xl^10;wz4O@NI{Tqp@+I^&&Sc(GC)~MK z5Hc<>^^c(kYwf$MZVj0K-g9mX&71+(x%~h`!F@8hJJi}`7u^4(yc5B{4oIxPs}7Nf6pz&<=Ms6{$6o# zd^Su|WkScofiV9RHU>)F%0RM{Q8`XV?M>dhB)K+uA#>za{)+l*y20pnml?CEJKMBT zWXlb-!9|gbA^j%EPtx@zzg+H{jB?cgZkROub}G(=`|}O5W;V~ACtxKt zV*Bv)%VD5ir3#95pfhw~F8GHLJCYHS5l-Hc2AoL}j0R$l znQdv=BmP<8waf-AD^2mz8ZWzmrznEWn!+#rXoy<)WkZ-GjBhpq4&qkb^SZ?a#dzZ{ z9v>HoVnM){AF=B~ybxJR&#;P2Ff{h04GOTw}-5h=nGR-fTE zREyCc!vEWic7-kH;%~s6T_A&<-WWi5D!M>L!s7OJ5M|QTE7*Rf*%B$98IEp@v0rq-u3`90D+NK|= z473=Jw@4hoh^pFjpGX^oCG#TC)vLgZ%>$PCVF5=YHk5GjYS)sOCBmnQ_2&|)m~|K0 z`8UHKBAVI9Ept|^Cph-Vp`p_yp+D6iG`+xk{16Me`zFPJq0{1OM1@oXCfh&@wpGcx za^Z+cpeH~<&Ff9mYVj3GAl75<8Ir(tQ1Nmwkel8tO56s=57n50!{whHqSb`Y(TolT z!44u^r{f^g3s!66=S-x!nM9yrwsmt9DN5ND91Kiwl7U3X^=1kuAf!ZHaH=HD>RBP^ zo%Cv84Pk|ZjHPz!Td*2T*vWgH9Vd1pCk%wjFsc~0X>kfyj8Y>oD z>kWe;vdB@L*iv5_F{M0pgszkiPZOq`0h?5%zlGSkShgLm*y!z}vT2i18P_qMU^XKT zE|X@(Q#0XSlEr;<@0u?z|E|=LjhcBM-L4F}4jx7v%}0B!8}umv!=V+T*s7OZESA+! zH3BA4GP*w!_T0T0c23BEeaMcnNO_)$Tg0kw=d&+(h%i=hy{?54n0w7W$1D$8GNoij zRKq2}|LzpGYo-2-Tdi;5rge#Tj~`=|P(>G;ju*w0daf+3iWF;*;8*p#WKYzkH2 zSs_n8xfyNDb{H&O3G(Xrh|q4lN4Qe$x%iFzVH?gVxgZlf+~K;kme^o>otQ0SQGJ~v zuZ!LhX;fH#W#lqyb20hRstb`Ew7T?ofdn^qC>tgmy-JgWvKx9Yg`aJvB=>m>Z`ytp?_dj4eF?E@q5^K@A&sWPW~9WYJw4xLMljW z`YpYHuW4&#MlX9z*n!cA*|Zx>vt5j4%Ll~zK5{YAhwcDZW@2}CY>erTPpoVCtUhl= zX8y9k^Dq{*kW6KG_)h+#Cx|_{1Z{q1Hk=o322T@Wb{1Pe?iFdVT*(&A%*vjWx0g9r zv7r)HjPM|P4!s!h=iSN4{=U}@9+q=0REbpSQhP*>xfNSUNeJTN1WCO?^kuY~N>qVc zTisAgByrl@=>+ZU{V(r3a60cXCuDaREBRV%_prnQQ9CC6&#)L3rDdB*@&N;rPl9a$Aw_nq5F^>0{7= zzpLG)@->l3Cc8O{apW+`B_5+Pj3GcO8!5oqJaY*O8_{yScsw*FO90Lahuu}xxRpfN zv*tv&P%QIW`-ZrBWO<-tzhv7-#-#m=;nmrN>^N1Rc`&KMwP~Obk(O*3D<-S~bcjMX z1F2n65J5CSe7HXJ*Y-A*r+%Ot0C)6tT1Hia$#7bMn!Z(Y9uj+rnD@2OCEW4Nn-D;_ zRVSm(2wWSfv{cWPEN%`;oR-XM6sS~sYkeSWI9%0;pf?3)Gtv(oqy6z>$Gaw&S&iu4 zmHbxmMe$N+ z>fkJstPog5wrZv;iX2~;4<2dNhXk+>x2VzrQ?C!`+N$_^V7@QBwedd{vObNivrXH& zjT#yoa=u4vWDZHS%`&|u8fm1b_M>~$aU8ceDJFuwT&sR9Yc0QGmOZXyVR6P!{oQ2^ zg4F_=U%chBFf`}*R7Qy!9j%o{q{8Zc^YDuK(1BcQk_v|foY~v)!l#38v?001%n%cu zhro7N0s23Cv{W`jfX3VF+I{u6h*fBKRM?+<#G=XwVZy<{L%q^H5HRlkCV&V?aQ4FV zu|Pw^=e<4Ze$4fiXc9R7r`rV}K9P0PVq%QfH7Fm2Cop?6>HX?WxcpkJH~);khFeD( z;3prd3OC3ce@bpPnBALO{Onn~k`onzc%y`z#Td9RWp&AB}MosAc>rwD#Ia!dlmdgNxw@Z=tGtf*;ZZc~?Yc%Kd8q)0QH@N0QiN^nr)w z&bYwlP*?_@K2ktYvG4>9T^Mz)8Kx}HvJ;IQQ}yQB{g#~O1XE4m^?9U++W$F;UG)lH z3#({I^pQNKIk?<`HSk}NFu7bk(s021Ye-K6X}PW%5+O|bwJ9#r0x?gHmEP2a0h)I? zLnYK|Ux0hTr|jsKaGyEf41o^ta{XtbVD~qlcPv4Ag#P_mvZh?4-*1+EnL{B$) zPUo-XQ&_PppZcu(n-65PKWeD^+udt_hRF-~nkPQ^v-HEJ^0~zQBok}7{ZBZp&miq* zm{ebO`q^gnnY6V{Yvirsab`Tmp@&mLNtOWz%@6%ktNfNT(pzEPD$syLk`gIcs zNXZ@oh#tr(!yMC)!V-dEl}~7@{I2xhy0=?e^;)tTuH4fP)5aKG-Bnm&iHLpkW_O1+DZhY;?y43V`=WX!S}olX$#74(+5ZCnVXafI zBk*C7t^~C>ACR9&GVVJoJ08d{7_Q&LE5#L8)byJ%W?jk!<|$77zlK>ff%jom9g7gk z^?98K?$c%MS>{Oz!5C|Ry=D}5;ExDEtgqGIPsk6Mr`+}6Pe`Y?neOn{nziSW^`qu6 zagF`>8GHs&KV<$gckK_Jz-Lm`cLrZzSN12!9lz({OHu6yFn9{O#AC36G_OCUCh_j8 zAkAw?ArlX*3evpk6f*Iet03L;O<|J{Hy^s~!R1|X7GqnJ=80^6l({}SKF5Ng)E`#5 zJp!a*CWHF*A7Bg~QW3J?TN570Y8_uyN@xpw^Yqpl=dO`R%FcA%)Ve<*32xk(j7-~} zL}WNxH!2z$x0BKL*-|@rT-m-zo=X<`dhN7DdU~=GogUeDrK4qXnjR`XD`?C&(#RL` zuaW?N9;^|2?GaMnQ8kd}DS0i)_F0xBWl(=V34hO&CfO zPF>CK5N3$j{p(`7U{-_yV)soE>gf}LY$oMXF&NIK_w#asG`zRI!^7J{2aE(4arn}2 zbk@H(I)%rN_}42|05Yp`Am76O;kVQfwwt?uu!M4eS!#=0#3nF%Qqm!R4a6w;y)59I zg-B$H-PqC4=1EziV7Jsm3*8yR92E-2sHDn=SRgz*rEo$CF-P%Tyf+*qbguAg{)N$l z>Mg=9iOb$dCV15%7-)O@6$;!Pls!*1Hr^(dv)awhkqPRWFB|7?mOpu9UH{FIf>1mx_NAHeKFQo^NSxtdRt|h-TH4=~P{IM3q*#l$0<~j)7 zwA=Oygi6n=ySBi02=d(^eO57D7mLrMZ*|X8W_&@Oi{ez}f;+lt-i~gkGbE^ohy^J@ zD#O+rA{v%CU`(EnNqILyMY&>v@<~WnH4TfyL5N~RUm_jcdt~)7JxlvsUZDvbXW>ID zSvepORza`$16*(TCzvuKLal_-2AobY^nSp(pr%H$EZ9Ej&c4(l#i@)7xtbKN*hN=7 z)Vs7+V(p5orOrif;%a48yAsk=Wwj#?JWWitDii+^)HLgg#0kSSHl%mEK2LP#v@E$_ zGu5!4XW(crblP=jJ8gAOyCU)>GXFKze{?=3%7EVe)E^lc#|ts!>ZJ5N2si0+DZSAo z(zL*1qt70U%Zqkh<9fZ8-o#%aaJ5Sb(XJ#BUo8zt|83HcW3KlQt82PH9XU-;OvK{| z3WulQZrMNGzc|`0-tQH|i;Lkutt(>qe6CT1^6iC92+1o!oyFl@B-L$LnPLi`BlIsqo52ryv+ao4a zEdD@|D8_psg_KmDT@U2Z0cTcq@4lCgqpW zd~}cW5lFQMsSX*upn{t|B8?f8Ye@AVkNYtHl&H>9&1U77a>izkMEdJD?Wlu8EH4s^zr>OL3CLnJy?LbM3NBL=zn{&gGezP zpcCN^Sq|VxS}~F7K+kYDg7R$azmu)`j)4@X#QB;6cb>}%aP&5!^O z?Dzf%{yF>|8TbqVU#1fzG{KQ`r_*pFWL6vQTwk4^p^~ZH3}2?}>FrG6Ic&*uV&L`P zKKNoR(Ro0QERC8LkJFXBmZ-ZNR=ZC^3MEb5#E2NheDqija)sHHby^*@RBge|y#Yn%S69n)0M+^Q37ff3=k+IAdoPWzv)1M<53~06 zo!(^aXev8Jp9zyomSv9WPq=PfI-5oBUbFICr;cgw=+|Y3r)GzqTVI(SaHPbIUSqLl zm7a~9xust_&+_44OwUG=e+swHU3}N}A|iJm^+dvJq?WF<7ml{~bNf7`WY1nCG`zjr zd#^paJ2ZJ1Ed$A{7qv(muZ0If8NC+{N-~`u?Cpa|3Pt^h39JpzK33s7qQ^z)3I4t4 zZhzLd&0aF6ZbxAXLUbqnMhgvaEJO-4loLCej|Ybk)V&8o_t^-rAieS{Ac4r^-X*Vt z?rQ(!eE0bJ5}8YIUA_X&>yshmr9X?^vojiqUIFE)dlM`Rxt=I4oyKhZ2^LZFnLzH;5R#vbKRXMuyjZ zaj-wUy1v*i@SeWj<>SA5=a3@G)tAxinQL@GBUx9Bv7Z=c@ZjVJ&3efj_4$+>1w zys{Z9y{PpqyaRI0Fu~*1bh$Z43jTmc5?SUWy7=_#`(MxU9tE_5fjMvlARi{FhCRL~@0$Sh8a-`@fjG}5Mt{}rod zW3xmL>X_9;)1imhK*!_&uMZ`4jHbxommBGj+59}TFyWv$7E9s8a{@ySAu-Ii@5BHj z5lkO5;MQ|Hg7j}TJw zCP}XcHbNOH0_V)05i}kv1&Zm+CqiLsFJfA4NB=l_a@7h7n8HfrY-}4q(1v80;sxyu zVcLg(07_bky*H&ibL)VTS-5gaWN)QCyA}0zErw`I3KryXIV+#wIoLV}n{v5EJcM`* zEVTrsrvQMd%Qr&O#gBXnNobdANk{O!%jbpFQxm8{^$ zhp%uT-PdmeE$w0h+OeIjh9~%(&;#@R%7u<-pehK`UP~4qlGU z5SZx7Ce{X8lQq@Ju(g@*=;kxG4%7unf9tRC)~;io-KEP0J3woHIn{k@L#H!ug}iE0 zRCmIV@+E6+7)VrIrqW6rA}Y3^PrU_Nc5kR-%`uI(GZ12FVivtHWfhmr^UzVl*n*^{ zlWT#`Xo}ier4>Xits3=0Ep5B#Us_OPH6m^8Xrf9eLRy+N=^dJz*4SqMsMnD-ptIUFC&&87c&)XzX>w_axze zZHS3708&s$1tLvlUu%@ga38lyH-a0Nm*3u#y^7oI_;XnmNr$V6gqsd;{4!%AozBNI z)MB3$@{p-qQZQTfihdWfgNtK8s%YB&Xm7u=tK9rEqvWOKeD{U8tqxHi8R2A22M2T)-=Ec0BVKo=> z@d04+R=`AspK(2)I+LQQ8u?NcAj-eCD9O56giZahe)Ljp+MxfzFR0PyitEV^#|r@- z#x_$C!kv%>b_&zL2&wdCFp?LRh641h>5SG>zH>hIACohc z1NP@F2Lp1V$;(1|xdGy-%(nUUdrWM$H;=;3(`=)Cy?0D*k`tiO6el2(6P$wch)+y! zs>S!3+*Ds4b={^m;}(&e+YGEfxfzi9?B)Qy0mRdrYw}&@H`kd*UpT?c1SK5j3VCxa z`y`+DGX-O+W_TmPgf4i35#pQJU-B7-oA{q3q6#>l{9-wu{1I@z4&C(|t3?7eGB>| z?HMK=6Q2QlHR?Oy56CxfJ8a%A^(NxcbZLX`bad_<=vyE>lIFMMk?csEKZmI?Hf9+N zM%D=Fck}Eab?(6%hdmg7SEM@teR2jh?qbd9;SHL z2xKe9cqI?4rew(SWoDva$o=h&m~_nx)A0Vwp+2+mUA&AY2UD25{H|!Jkskiyi;UhC zPRjaS_s1my#fCeFZ)HXPs=v?=Kki6jxAHH<%HfHN7hsMU9}ym`0E3$mY-^9mWL6!b zOfg||^tj%b9lYI@psj?NP9#{gSdYFSzHM5xhH~=3%+Ni*9bzQ!p{jUR+cm1hJ+tK! zZ|kBdJU@4kI3o3=S8OmMdV3);ptbWM>LvVD;m>dj<0+_Fn$wGQh zfq-k{n#i{KF7L8zZytp`Cp#f|`%nMy+? z1Wf%&EYMiUPVcrh-(gY%F-EzQsMucPl>S}h zb~xzYffS$=ZEqjcZ4Zz!i~J*Y>)2mw!E zwsT~AOSn`qkDBqVw@@h`svKD8HRVHrx2#Q>2T8tV)TU1;=v8A8J6)(+1jPC?LNfA|k6&R!wjPIz=+CjP}`ru0}`~XIXr)D|x-Z z+XE&o%l8Devk!WNxZ^fJo9`!tb@_uLyeM@L0Mg;i2T3d>f*k^gf+O*;*sM7rkY73= z0QNsbeHZpyMWPq05#aZd=jeon%J}&1G5%6!etkww+IqG%94z0jWpTA$ZOcrb>2|48 zgYlW4kB?5HC6o^smgjV6!4bd~L)$_G)s(yH1O9}&f&t!Iy5GWOWZM1;o223NG5J~f zJvjg85TB;M_dsnvd>^Yjf|*ru-@%^K?NV!!YvuX#dvtlfh9i&<)s*nh1OU^zhd`Qw z(kB;pgO`(?;I+LQf`r3$p_JD4ybhvbscu%W@pjfwK84OV~mX2?WR z;U>V4G|?S80>_fXX1w#12f)NdM@xiUjiz(ld?aI5Mu9TQdP5MPUbd~n)U)3gFg_JbxUAb>;& zF-G#ea?$dsxwsxXk{lH^vu3d~dUgJ_js=#^=NU5ZY=*Y*Xok>qw;J6uN)l1CI1UtI znZz|bv1BtMJ!p@Fu)K~ExwCUHPe?zo!##l$PUv^PWNfLc>vRE z-TE0=f8sMB^_kBBdV`CnKG)>C%zdsik3Kv3InZkMU!ug`*+0@s_lAqT5ErhrBhfV* zbiVT2Ij`~F1KdzGC4?+)OT;31bseZXp?GF5+(V{fF@MPmz+7}_I_3>mJVS5ZB-*2s%pRuWK}Nlwt;ZXW9`lw z&Zv3NR)-R*&SE)bww?GOn{#Yh9IC2Q4%!AMhLt{&X9omPTCe(Y>;QFb@o)Elbi}d* z?IV=Sj!q-4V@AB$K*E!9#a_XKyn+i(EEeU1Lw-Vu+3A^rlgdLnnk}J!-aeY@5`6EZ z9EA_CJB*Yav|8NVA(}L+#fX|=Ex~98apE;Rqx7vRYy*{UtZOgz@AlJX@bUQaqrSGy z&cH+IagE2)9NKu%Ryf|PGs=W_E5w?XGXe?>C&M!68jw?VE09_5xHu1T6hYad+7X)* z*AVnn+-?8;?{E5y)>m9^LK8``(5tBW@c&KMN@0Mt;h~0h`&avaUKM-$m%F;f!YVAF zym?#S5!2y=b*KSCAsUL9T#R>s)$v?T4E^CxZ z5)OVah}s`q3_qCBcu0hMaa!2BFN&aV%e>5%LYE5t71FL84R2ibfH>izYNSPqklRbx zUNuUWz&|3CGiE6y??#cx+k4wA(t1sw6k_u*oqt}dRc!*%B)c{oVuWKhx*vGc2KKT4 z=~wqdad15RaA}^v1hoZj0EBhgNTj2n{d8HpJ*v=&?g@%vHMFGtPWlvU;2mxy z|4$ahnYO6sl%*3=f>q{IDNwXTrsKvrvq#;m653DacMJ6PUPkS#av=Xe*j5FR2UyoW zL8y%LC|u{#vuHP~uOsNSs+uS%%YplfmyqAeu2+NQ@@}CWI8YuPRiE3R%%XaL9W0j~ z-kjw!1i9GXy%Ij_E{3W@UpBh6^^pMP&paGx`4Up>ZQzSpRFrZsvnDwQlRY-qxsH^8H%9OpRvS zGSg?eoeDet7IvBP{6(wTVssM+wwM|`rrw%gJaAlb*4S$IXp6Bm2BYTPr})OUSCza^ zM=+hmEOjlJ})!f z9z-;Be0i3=-5dcvamSw_b!$0EZ|fyV72|c61iKbJUx>&dyL{;0#aAeY3ud~S;!)F1 z*s^%Bli1yI%nA|HJE@R*s3Ms)7K$H1rhYtQY7e0S*turS*n-c7lYLZX(0Uno(?bt& z{fnA}R-@0TQCX}d9dt3!w9r-2)VF{}eaJgTFN`LmrRY>hm67JJhkL_w@Y>_yv`0Q#bAzy;7awDx6^y(t~R~=DNhk%9G5fHI@M=5?WL45jm#*Y;Rg0u zbHXan&F;l;_YdA-9u&ibWoj)Z8mBWukdWe-e8M*npCTOmjDCVjmBcH{4B_W39M|;c zKMyh6I@HBu;i`ZRthXISGu2!nIXde%n3Mx2fra42w@9H0^uEGQwlF#`LBz(rfACnj zE~X0vKby%3Ku(6|s&|Q??ng`J!r=xN zHjS9_82*PsNiK&pYVF>lx~|6Z=U!oa7=0LC?2zjm@550{-u)HFk-5Jw7lmN!Uq#%k`9^%EuFp z#iH5Wz1~b`gFO_R_Geh%0_LN>Vz4W6!1TtsiGc;B6j7M`zU6IcY^VzbT?;h`! zU#9SDB6HY5wu9mMk>BoectqDbxrsmwmD!K$6KL&cgP_2y-$t0P6dbXju1k}oRWt|d z`UHr_RR|L|U1JXJFxwxyDfWsan?9o91b(Z##>{}2kqjm`XS3X(@nc`5F>3M}u`iIXkLIhoAFT5T@(skvfy z6i4BmRnl#Q9p#VXZ*RJ=CA%D5(8{LniPnhL@qox(d@&j}7P|z2>mE!USiXes-U0uE zJ4GuMicFEX`^~CCzuJv#Zl5HNw!~#HMXXr&VUmAaieSEbq70J|2&xTCBVQc~qmIpf z+F|NLV}HrYO`L<&hek~4Nt5H4{?v}`mFD!iB~kfd6M&_1Ew&f&U0a6h&2+(98LNu^Nz$v#0O$H)FGskQFu@McPHec|>Y=+s+#~V$&)CjkQ8*($z z83>5pn(ykEK5ms4cjPg&CngVt+bHwJ>JeteE#ywzJ@Kqk*I>uGSWV#uAX%>l zXVt$eT?51=u^w?8tl_vS#>_gE9m^8Mt0K-!hG4IWgj|YKG?JTRi~n zP*&v^)CVdH!~{&o--`L@kpU6YAhQ`NX)%KE;_CQ9q0a?)U=oLMkThjOLMrd!!p^1S zRZC6pE_5Ov&My9ms{#dvMXRb0bkhi?H0Q~pva$l1-C`%eh#b-2tG$r{nJ4?IOH>n@r*C!`%sYB3z(m2MaS2`NroVcVp76OY*kE9 zd9Jv7nx|e&BjDap8!NI*Nt#Os8F5x1o#>Z+5;TdxBs|0uHlX9_uv)W>|eVjL$ z?lt)3p1{x?EK}( z0HiRLHgp2i0h!KP8#aY%K?hR;3i9z-VJ~?)YTh?UKsvnMr6!x@8D&l%Mvu7q?+fLW zgPrNd=;b`k#`}*uhfvk?EUoKYT4n@k2E}(7x6X1Pk4rEa-BbLeUMke3*3Sara1w%D z%+>DF&J=MZ=xQ^wvI1R60(1c_>t#8f@|25XWORoZl1q%jy-PfOs4eQ&R9VTJIK4t0 zA~Un9CGCPr^aOTGTK63BQhAu-O*xv6@(aR{FL14Lc8Gs1M9B3i<7J~Ow^;of;s&fi zRP2%YI7c8e83ZsqL3dyPBqji}zHrROq2_H{(;u0Wqk!PenT^2Hh1E-j77Dr32@46@ zTPs>UD=-8=jK0fB7Snr3naryy7KcH?VI7(g-}8;9=)>?_EEoqOJTvWVb+4YDa_dUg z)2qe#-T|U*fpxvcKQEZcU==cyU1Xrek(Ap7afQG0u0cSYlo;)Y1mbYLHKO34OMwV^ z#5AmX4B`#<0M4CFx+^nJFgWiD$&F!(x)#W8%iOK%kI&9%@M%nPdjdlfI;H*&^9H|H znJoy^%x?P)j+=|+lGdz@!h>FqmC%ft+d^2 z`T0oX1!^{YUM{fpluvt0O(pz3EcK(Omufm2l%oAF=sMF3GqTuJ?rwe?l4AFJrmZV}CHZ4FxpY0}TNG*yF< z-9m@omeg>pr&0Os79=@W)s|*du0w_&&L?~U_v#X!bGy{*#1-$Gdvw=T+X@vp!Xc{K z>koSq1_PdFWKPfo;xg(|erLFb#?m0biuaB=P7d0JF>PtH|ri57!B%|Ce{~f+F z41w43sR69DpVUFO$dlh%F*aTyvclI*AZ_?-Tmu``5S;wfitl3a^%4p~#C2Yj_qhC_ zt`8*#q4}l_thFEeF0;hCzuQ|jzGRfV#@9|;54>9iO~rMoP@xIw8x06n|0Ajao^X6c z9+m+@qMYlWzMb8-Vhyhc4V4WdFQM z#CkHF|1p4qgF$%ovzC9#Q8bJ91tK484q#iFEEp!|hmuaoP-VVa9oy^T2uF*~RRy(q zZz(fMMh?t;@d=LYi13E?CQLg1gGe&&$d*FPn%4GJu{q3%Z+^4+nS*kIKbCyWccLls z4V8)Y{Q2oeGLyf5BJGRj`y3IU^98)f%Te<~56p`Q{MnArYYgV+IZUrPnpZqp&n4@- zA2b^y>WfxC(J^~2c|YMHd*M)isw4JFV|m>J_6(xF@A2}ZDSyWE^%DAiwgdJGWBGYb z*eed^6_406sS3`R#zkINk)9?3$2?}QpgOkp%evW~??pU}jl-pBVw4U}!(lyk^|M-x zopMAGRE`wYdl5c`^xcI^1_LTdrsOU=H1Qe0HihSuy6cQv+`4QDTv20>OIGErX=kWN zp*PG73YdW=RWL9A|6#)JFsc3Ef0fXBqk0>YY$0kw*ErLeB=zvy!Cx&vZ?hHzG0`w) zgR062pg1+!A<(oofhPJ07ke~(p71WwEZ;H>gjpLeU`{lYNSRs@>i#mFi%0HYZ~ye{ zg1T$#*EC%Z2j^$U|FoIkjQJbRxZjXHXZ*QJn=@S(BY4=rtq!@e>aH;oR4oHvBMBrd zA7YWIJ7gMq07N@~O55tuMx6jM-Ka}C(7c!Y~_+mYzetY8M!OdqYmW3!T(0yc(szIy9lwn!O6L$Sbjq zIpKgSS#Gg8rlxDv3jJE#V%-2{8QK7FrOb>r&Fv3oX22 z^4))xuthF$-Hr>7A+)V70+19repy;DewhE3h^kA(GDoDmOL+lZsy-Bmv0gTFr|1v{h31!jgWd00)CE$#gYKkl9$ zz|S7cN$ix@M?1|g6FF#LW(xuh7;}$F6SU{AoNyU=V7nxKB0g` z49I54>qX45gPq4^uukt}V)hs%*KyrHl#Ap-9NuqsaGecU_k|ut=3yGzhTlqe@EbxN z&*p7&G+%Bv2XuJ#X234`k*nenZiZtBO$l%%XL+(%EgxX{0Hs~1JYFo;<;m!YoeK9gF#V7rVV9`Cf}p@N(|3ENF2+Iq95< zggNRV-Pbod^5J^DfGhi^WUhmN+c*Lb;k@lP>DJ{9M41U!Nc(ASBy0k7-oV7#x2x%R zmEO775+C4$-#Wt1I|m5esIXdH1|}>H?Yb`26u#sa+xb3%9NM@ZunH`!$*@beL7&Yg zH%K;}J9+RePn|IL5Yf9x0-5v%I)~-3F*QAEtMkE=w+V5}e>ZH^sPohUx;jxYsKr>auH5euHb8OG1>c zQ^phy;+ygr!5<82YL>G<(~WI$hrQCcEF@W?I}!#z65by z{(ziH(gVsN#I6*J zIpXdhs#SU`ryi&vRwADzLD1BxX2fxw*br{X=p)3St+o&?f`+DZ0DZ>7=4@9Wq5^yz zt)N2b2HVsjG;GC&nU4d4_!huJywdHMIK-4Yq@!wnzj>%ROyacy_f@PT>cYYkaQBRF zCD8zwv1D3>?maylm^kh(t>Qh`+NQyozFMH(p(uR6l4$Wi2 z(TrJDX}F~lS&{v{_pNGrVXy{x)^BbP{UXJ0t08JUgd!EpSaog-jK znPrjD;Dd)}^=-Xobhj$5c2uJ^qvCvAQ*!IihRbN`ZWrUIgJ8Q#)q$is&{^TX)J;@b z9^VD33LBIx$c^4JQm)GXAdK3TSCa&$}VuOx$J}3I>TvT)ihEVV=%SLjp9K zgaia!1_AVU6@lwF{EX=^IsOc+KLHt#`V8a%8}>l1N!u1!A;T+Ual@Er8krz+*kB%E zByw~*fvcnUthK?-Rs34%*3x8#Y3l%BF}^9(tt`}<88TX!907v+%XCy|-B#a@0F$DG zOQ|tIU*p!Kz+ho5`D%i&By^d+?q1ZlNnSNuNE%+Pt1(+pqD9my8T;=lt1l#>3j&oX z?cSmuAU+{!Q+UlF&!W9HB?4BmSOFT%{&Tstb(37T;?HQhj;UdGnuw>^}RMyCymP8CZY*Ga&T^$N_p|j8`Dnw+N6fH^{FIW!cWd7iFs;a>qw<)p}_>Di|a3UCtp-vY*X zsLbn{33)X0-{as|tK{wMOQzmOq|rdE)@F=uf@&xmRlsF zcZf~mVKD_|)ud}aW#O4{SF)7G-?9Ga{;gZYFM7Ob6{eu?v!aqFYo`8Sxv9B3uW zO~*LR$q6L`d|xCKQrf|<%MBMck>u_)d&q2@{c7aQO8N4wvs{3Z!e0#kz8v@dog3%;hMbz7} zauoqSIYiaWGhL@1I~{a<#sUhej?Kc8s#G#tZ(t)AdN^1PHpR&ILSgvy?+ z?`Ah^OzUKi2JSoRU@SGkSZKg{aXuRy&daK3~N)v$0MDy1{cfrU!a3MyMU zSoWGu+6pGE;trK0HOr~t80 z&&Z?)w-J#N8KSM%>tdciTDSomPC;W2PZC|-vrh(Nao9YTNX#h;%*PQ_`cGP&2l#AV z6X>UrvVJGZ!>4!eQ*paRSnS4opo^CG5$TO(MrA0B>Q+BeZ&SZLgohU4)M=Z^<;C*! z+Z$Nyz35zHKP05;EdFmOQ+tdjC&VV73^`!`&5(nsKN_--o>U&c8nSH?&jzDW>^B*S z_g8Kz5}?sUBp{O0kb-NTgj9=HnSxK?6rWJY47My^WuBaa46Hv18Ibxc@!g$V%ycXHHjqk5mCt>0T4+YZQmOJ5Zp)9wRenL7EyYpwGGPB`d zk<1rgGEKY6y2JlRXp`WpFNMK>QoUDA#pN#MzjKyf;duL-_ivl?*P#2SS%H@^t{*l3 zFQoeCnEjVC-bLk;tMpPb$q9N@wo?(?w2}70`wd+^mctUrKx_qA?Z(B!vico2{-9h&+9$)hHL3M zYSO>o#2c`o%MiL}Z{44dISM*qcqvu6yE=O2b*8Z$-z!j@xZPerZzHysQk%I9o=a{k zy1w+bztFQw-`KP-9c?fDEENq6d(r?_`=b@%^&8+v5%q)SF2_D}`St&{XkKzV<+Wz= zWhDN%c}=jnpKDg1P2dlj(+n^Ei6-?$6!xFh7pu1#j_ylv*GBRJWC;yifbDsSAv|X) z<{qZ2bES0#<8sfd@Qc6I5`CUJxlog|<-c9Gf8aUU75mQLE;S`u?? z8l46t1n<*)BfKhuX3;aWsUh06lN%xL)P~Po@i1xZJ^2odyGsIfTLbKWwhrHWDf}Ts zXXL@lF2);t?1oY*66SnA0{o4T9Xrd5ykS>)xNaQ*+m8^4e_jJd``LJ{DeJkpmFm(bT|G6SivUuv;{OXH6hph{lXPsM{| zX$+Gy<3g8gTa-0z@NF17}Ksbu+*|cBc+(eMC(+P6j zV|f%M=-ja&eFN(!wYRVK_;eQ2-#pD3E-KDSd6GDJ^}2EoRa= zJxAa|95uOzSNk>)neo+3_a~W}Y}N&YJZqSA z1{=D!pzfd5&a2-1viCquEkWp^?g}(Edp`w)um179MAWNy+`3@!lWzt`O}oov2tm>Z z{&(l_$fG}*>r&HaAuUJ+xyz)6J4&46b`FoL29X0W=@b~YUT+;#d4CYwY`;hqNbZe97B-t@fduB}L-ZN<(C8q-MD~G{CFhPnW;c(e#i(T20fWj82 zc9ZbdbOY|-PT;$Lgs6El)$t|*=fT4haI)AQM!Whc(6j3+Nse)FG5ioT@joP~DJ(=a zOm8D4`toi_olEcB=rs8U3({8$4)psh4CXnIr@_7#G8EYMnf{wvr?MJgH<_QY5Xps4 zWP-Jgz~9nsRHWHIzVa5;{gztK%d?BC{k`Jg_-yF6@qbP=yV}3J#4SI(U_bG4T)VHy z)l_cn5op72a2ykAq}lF!x7R!&lF-qV30h49sIEQ)aC4%&)sVFOo+#vhk$)5gLCuAPG^SQiFn zAUiW5h4*<-V#5Ykdur~%p`La8rT4z4ziNb?;-!IZIQ-JYre3O+&-{{DZX7vmhG6yV zPibf?nkmOlomip49mx!vb>CC7?48Z{VA*UXvIkKs2zAi#`nr^Q0(<2~qi1>Rnhc?j z+l}NDSt6y$?Q}kZ9D9|?Sj6np*OE_1k!wQ~Y(r_Ks9Z)Q^_jT{D{8zSXgU=`0P|Wg zjZnV#8=EOe@0~d-#UUlS$l;FxZ{689g#<7j&wiD}9g7%deXCM&8F> zg*T=AD{4A?z1P}(i9F!?$|epffmCsmo?1NLUE()PjeA8MmPn@s{W5B4Aky_{J{}-T zlY{g(0M3jqB09r6@o(zv3AH3}bTnJsskCK#f+Nu%`_-=J+%0svlTz!CaEE z3d(cbEjh>D)tSu|;JDU2dOB7y{IIU1f7Th_Pf+i(R{6=xzhXKG>-=EM3Dp6f-iDA(fyys< znkS#Ohsctt1N{npGD@U;LuFfTvGD^8nhVu2Uk?VGoI$G`t^^2cy!jJAXK;D7jE85_#}fyNgom){>Dap*jOrk|68qS+uB zSvi}jVvp>F>NzQtX=Zgho8iIx44RX!DVfp79o9ACls@)QO*+C>Bh-c!nI#@d zG<+Pys!_Sb@Nrt#B^KKXbv{IIl&nu%V#wnMmiiE`l1>2k5lYoxsZ?bqI1YQgy)9VQ z34|osUPbpUa`(xl+<+d1Ev2x|`vGQkQKC2qknW%a$ngBgzf%n_J{zz0=O|}XQh{k? zQzi-3gsfI&ON}#js+%aMd}d}or|uFJG#f*g^jK~l7L@*KDP|$0`M7|pR#q%&21ujwv^am`zNnvx&S-SosyrP+Hz8 zfx)fME>)<NJ^&>17|l%2nVUGeAwZ)#9T3{4lyip3x0!?)hAb3d-sovtXfdzKf(| z-LxuwDR1r3zs02Q4U9w5p^{zO(EXdUYV_4>j9WT-pgp%&OcBdw*KH5DjnIvy#ia4Z zPn{V)+_ajjC=Br}i|~241ZI1#`knY2*V7!wo(e{e`?v>{qE` z#OgRG>5H<8gR|pe=X&>#{i{pSCzHpxE+IE5lTc9+Nxh}uSNkPqWlJ(Ai0QX7vt&fF zIR*o#gb#}_nG0D*2$P^pSm-H+*%D(odZ5ja$xJhx9Gnj)ArPUlv{i;~p; ztJ9f1f$>?SL^fwG^vFUXyH+hc7Q(S?ET}wJ2d8r48j`7-rnFybMQ4|B9cf~X0SSec zaW?Iyv@g)yOIfzf*ZJBkM-B|rs{-~C$-Gf(S$TeXMB4pSzIyf~pKnB0vo?3EHjxO&xzuVw z@fE0DQszr-Zg=>O0(uP43<2+_JC@opRpmrSO)JOA{weG-m#hJ!)$4V{T38DA5MFi4 zWdf5jYk^4~dJt+rZ4EJevbJYf=+yiS7FEzG_kB<h(h93s@$;l7{UE>9c-uK==9)BE+9{HNdln2IYAM4`dXN= zk&;zyX|V~U=Dkw7s)}85SkfXyytD6*Y*kQKSo26SIzo#g0fa-avnQg|aymweZis;P z$(&YQ;qY3WApZHw0D3{;w9@=u61J8QGINb@F86U1cq^MU<}xYl+IdUhdiSMaoVs_s zfQ(3NIzx_Vl~g^)1@mdM{x%=O*#pHQCgl>IQF&o@IaT0)EgG-e}d}3 z5QFiG8qK;kfWrwTk)^ux9Gcr~w%80DAH^ZT*3hxY#=*KlyjV@q7o?>0rVCW4WWsC& z$!xO#A9R1<$&ZfVIAJwN_~#IRwKljeP>_Cu5-mW9au8476hVci4uJYuI6A7q6#~%l z+3`Qs3?p0%``wvp{R?+7`-Wyg;SkKnJJsfODLwObG zByI4BLrHbb$3I>%Lv&^zQm6H-T+8POCeNI8~Q$~S;G&r}g5b%|px^$#CP;j+q zwLf6SDTfz~c_naNdG;*xmlcg*AiFvDL^1r+uS6{?K=;M&%~o500C!Qs6L7lNt_S{R z!8E$T+ppDz@xFo$h-B`p+QME!-M9|ZK#IGl=xSU|N3%KvI6A#54)%vv*BAS6WxKfE z<=zFu(sdw&bzqDoChezS$U1Am5Cy%1y1l;V z++?*Hz|gNpB@Ih>=1og~iSR}Up&){ws>oW)*C>yXHy{3KHp{_*md{igSFCP-zt-oU zocbLU<4ow}bK9VR5)qtX;3>7Z?jGT3fNB~R4c}7s0Mr|J4A53zohdt0^lEB^H0E)$x|wHAH$5fg&Np zKCu9h7BrMM9qJ~^LLI2cAv!g7md1sRM8V{P%x@M7I!Qw5*3Uwz{BtN)qI{2h1OS&R z60*2pXd{$L2U#d=>m6E6Kdcs5V~@dW>-=Ym!%bLe;Mw98BF^8JGyo;Bw}7?vA}%_P zRQ;>1jeT#*^zc|yDQCDr(})nQ0BzgZ9{m?~&v?JNjuW3+sHpgdk$tg2EV|^kHhja! z+v)w~vK;FxA+eG-4IpjUE4`&7()+1vYx97qp|HPq!Q*7K089024;;2zvk?*(Tl1OL zyO6S=PmBEBN(GFLR2|6KOC5|GnkCZ^U2$JPS)SSk7IXZ)6>rMaSdBdSwGF4$>p3*; zhxV54Vdpijers*-xql|7DW`L9-4lMp$j)9->h&JOv{5c5?9{^6KD1)W1d2H_bCG1N zbC5CedWe%|=vKU<*ox!Y9M<&Lwplnz*taW`sgG?KX_b&@DHr*~o0tMy{Gkn#iinOH z^Ji--R?13l>dV@fR$P$7#7jMN7^q0fd~d^h1zA^3-6{7$hrR`@OD{DQWq`c?wH0U9 zDX2o62Wi6|ypkQl@YhZ_#6dAcpg*;?hSe)kOs+ze`QD6or@s01-c5XH!({D!m+FsQ z=Y=pFKXU~FpW8#c*lWleAsQ(US_aDK=1#Jp{d&9FKRMq$zP?2G00fryF7xm``i*LY zwsqSC-o4jTr%7$;F9X=2r_G9v*?T1%vyCMy*HsH-=f1=Vyi;FU$hN*N7b~f(1S`UC zZ}`VyIfKcN?wxx2v4fjnn(;%{y-i=;e1g_LHDlYIA>sqH)%S7gOEa#$;pvC{3xutS z>DCN2`mqHAlKTVz7-ME!bhL68G3W=xavvaZ6x} znHFXv?bE8AhFT3TxfjHHxAv(WTP#gi$l@=}xKc`dGX=>{E!b#i`~nkbeQ!Ygtbc08 zc8r(f;kV^t^H8p*fm+^B*Z|OsnW?OHAEvXwaBPsKzcu3v{c{>=?gZM>8x6XjBnb*U z4mk-2h<>O~`FSf`b3Yg5U5Rqv<8oJgWPf{eCWg^nI5?LBbusok_5ZEg@dXH)DZ8Y? zeZn)E7Yr{wVUj|*`Q!_R+sNL0aK5kN9nsLEouI4#K;QnlGr4~N3t;`>dEk6Bvxj~@V zy>UmMB6*R7ewl^Ke{RHTTv$w`Pu@a;m!%BP*o3oo2l!wpT+NO{#sgm`1W&^^HZ3hl z%k-yc5Orj+v{d1WzeK2lK)8MpY|xS!)1x;ZCjV+v=2tX(^XB8QHbvc<4tH`5+Y-l` zewj};ngr9c*on=*!yL3hsTME^$;LHex#x~;8276QWE~Yi)7TeUWXY@tq{c+mA$U@b>RxO#0P&JlGv^ro=eL18UQSI#1}y5{_PE2 z5qO3x^Ju)St1t1M9_}D~!26uT?OT|9Av*3U2bb(O3*113&2Qwra1t~mpmG$XKy&?5 zOit*jV*)Z@NeXhXmIO&>((H1=Jy45}Hv1utWS095PIP9~qtEE{uPp-VH}K_!F?eD^ z8t7(zmGrzOPpX`P#O+7C5-k=;IE+-194Hzdv1W9HCJuzp5Z$g;`ZD7tbT)PCp=7=V zEZ2Q2i`7Cy9qHC44w90I!}5CI3!2>I!qv$ z?vwKxbh%!R#tf5tF3Ib^w$t?k_=|XkXMJ74T`+2U96$X^owfug!QXJly`Mk*dL9HW ziNl-BXrMqc@xpBGJ}0MgoWS z;uId>h`Ga+5N=dz7S0jsrL!a0B=694&JgXGCDAp$_&tOd0z=}kIC?g9+Y+k|1G!Hm zf(5gm3id?6jkW`!m0*iMY`To|p}5!TuoWfaM?0XaFgVP{)0tPn9i6CUqM1Co7(KyG zQV~GGOGlz`6^tJu6+K@sVDrhU|ICS^Sw!A_1CciTc=%kJFq9i~S(g`UH!Bm(- zWJh@{M&mKU6m?56U7J$qAm;Nn2rKC25pBMfNLj(Ykj1+zI6DUT<70|6#pqBGZaSYL z5fsJMEWzVj%!V>*o-H{-*cIyiXPCMjK4Sos4+X5MTAhFCQNG3XZv$L?xz?<-2W6;j z0HRAY2apFrk`l)HF+zVd{~QR?VTY5&xET{OV&f`l>}|flHL-jcA)LRVt2xrWY#2kJ z8$g4ft#}_&wL+@E#va#9JCD5NvLDkpq$`GzZ&zi0qJRQ-_!GR#y|;!XhKKa1cvl?v z;@*rxwDYdfXf+OPK$y#-I;5E$Mr;~G>`{1NwjV!ATn~3FIC1Xf1>Es1Av9F03rx>w zzeExOq)tNQ4gzVK2K$w%dmw*89wAu#64dK}B*iiD*arBOjEm_x8Zyj<*F6TDlR~tw zM?5xbuRV=}P%ZBYH473To=ZO8U@fre5L96(Z7rLeRNLCZYA*(B|BcY8)1(%xt+%?{ zW|x_PeIx6-+1TTC%7v!2$2K)ubC)kLiMLYb1k3gnvQLm!oW_6?4N5!<%9T-i-qhEP zJX2jxYdx538rbm~(rb>#$K%V7N_X(HpN#vmHZILzkQVmdnsm5|Uzyu%I{!@0k!gXv zA?9Vl6Dv(1s3dA_&Mvx-wV-&;Xq$NRye3Q(Fi`$5@k>hbmMhl)J+}ubA z_|pb$1`k2Oi`eeq#xZiHd}|`jA7}+<%7xgJ!@`#gm;7I}u;PLCv!Cj>g9HW#ZP^MaeR)rWWG6?Bb+m>o&y1;$`oR;0Qp?=Wy4 zGe6(oTH)vM2Z)m1UXnvh6y8{(0G<+YMa@iqTQ<4d%65+(<|C=Z@!C}5>Hi(@;%!;zB|^O#j`Wl& z1)6ibFZ61IUubbTWs)*^{2;H6uU>~I2aX1NMX$b}o>$wJo)|m#RojD&kuav;?yHw|#oD$X_MxT5y@?VVRDn8>kI% z?L$__L0-A%SvkR2%mP_=+Zdh+|yx28-oGc+Xqp5sffVlNe!Bx z9QNcUVQYv8F6&l5u2jR55AN$ZBPUHEdp&Vw!tuIdX^FJ!hb9|D*9lEilw1b{xX$bG za2?w1p0h5=H7dQ?yki}XRjaly&Frov_+>rVXMTD4cOn|Eo9MEQ*OhB%+}mrbsdk!u~ugtogLqt>BagWqI_*6Dz=4h=;!zqWT_E(E3Z zadF)qC)Rsk9VG+1S`Mu=yhulIwKTP=kX)cvx8~35o4%dNfUA~H zdqhgL&-yc;$+c#EqO6+7S3~U?OFCR0ar1`wrVg`{4rJ=okWbh|G*ipqQ_)EsxDCrm&oxvemIAz04BYjLZmeyv=1yF^wi$gL_Rf7cw{w8 zGc~%3CYbXJ!X}8#=*MlB0k-~ON)a{_cZ1VV9AiJg_62+W7?zQg;#?rC+Fbrv`?_-| zfT?cMIx4;%{kk|Z`gd^%f9pbkAl(*3vsoEfoEGO{c(U2+aIGU#nk zBS*c`V((4NP^CLG%kQ9zuTxaAEFYJfDLm3TH(fyr>;z1gTk8-3KNe53hJR|ZVk|pM z-43iFr@e)QpFgThA?*kpnZ;Ys`0H6G6&pH$coWo}5f5rFG{E{PO4yY8d=#fr!I=0{ zEo{Xm=Vjdj&*{c#OLZXeH1Gb$`1DAH8l==`kPXXINXCEvNB)F~no-t)3%%5Fv9l(v zg2D^V;YU8HGx1c)5;i*6=$_CvlZGBqdm0Yo;v|EyspBSpE5<9-F=Y6`YRmdjPN)Ku z`i=b(~0$Uo<|{s(2LJ$6xIyLn;{Kh z{h0`1qiVE!TgM~cHg@Gtk!W^Jw*TtnX8Vz1y58O*rIze!GEl{okwOjq#f(d8V`I6h zO4DF&#!ne0s_l3Kx9f?ffAEX}ZpQ-nfpyJ!(>6k@8ymoRngb6sI$`+NM(Ap6@#3E!hUemfet`ez zoPHIb|F!TYMuSxg<+VI?3*ks(q>xbFr_nc@h}uZD^J2WcW%Vhz`LMQM`T$}(fFgS* z=?wq}{Rt~grFj~%*Ps6ni!*7?{`Ke%^{a4SXbeQImji@>Ro5veNz3#~pplvb?d#Eh z9$~vMek{nANyV}jZeNe!?TK1x@b*J(LkZy`&3_)a1d9g@LGldr{$B-4>{&MpAqd#O z%p^E7kPOMCaGluTLZx1TdGkTzkpQn0Rm6=@JO6lz;D#UPQjRVzn;B54Wh{BwnEI>_ zqqWvQM`@t1SlC+M5v;8Q+yn$xLt>Aq=@QPW;(gy|6HUB|7gB(4EjprZo2mtr zVP)KD7v*|8+t^_1_XC_7Z0A4CHb%ielrw{{sLGVC6*;9O`yKsruZxpgvH@&3)Kf?O zCoPb$24a4GHN-a%Vua0AnCtzkNRF*2<)=)>Wlz;`= zMqWusRm`w}rY@Y&9E zfziYw|8;DflT#_hNeaY@nD{3+E{_+>Z~PM{6_*lxxUp_obyVOOibL=lr0w_E2d5}T z31-ei_|h&8g9pw_x^P-FsYQy*DtKZAL%AHvu68Zp0V{FQrnpWjHYN#$C9W(&-ngcl@V-?*8OSQS+hC2fn`DApf@B9QV`f&0Rop{UcsTRdQW z06Ww=LV^&5j)DrA`rc=-vMEPOC~y$oG$^IWmy<86>jkQh3xNddqD_8@C^`kEu&28{6A8$=#S3u=R#cLy;`H z66$ToC89N%-31|=D)r-ju&*z7XvgJ>L93{c8QdPh!LDFx`>ewAug|FMg#t|*PW|?A z&RV0P`v-AWyJC!ppfw|bnuq1qO5mq=Q{b#os=IYpD)@>!hQgW414o{HP45s<8z-dE zN%tRTJapq3I7$KeQ4-43R9{u14{whe9%jWPDUDbfI zJ<;~wAzvVmp2~hvPjxqy9$nSQ@30(9>sZ|512A}E#38CUvq9(>I*rV&5yJX|| zKGs{IYboH?z3VP#CN=J4JLK78L{`tTV%e^HNFt!}f)Xfwh+@yFh| zx|}9!Kp0+BmF!vLu9+Z56(5Gh9pO6O zOqp%yDUzORa>m5vx{Za=L!@O`bRQc5 zKK<%6Ma9AK@WZ7ki0t4cn+{T+KqAFIEsSNhg0hm0Km97*))B!5M4>?)C`h474AeBj z1@x<`*DIs|4=#*oc#VzW5!yqlxdXVSp{evhATRO0zs~vfS+egTup`F`+&ypy!6Hbl zoZCI-<0Hy^LIEak0Mze>PG7XebyD8%TJ0 zT?65ROs4mEq}RBe50X&z@>KXBbJosn#6Ua78Ypp?S zZLI-dkJl`&0Q&SRwrqGK2m#Q^%0R101>6kvM4I2ZIGy)k8o|*IPVsE|IHlsl=1Twx zm8wis#^EQ&a71db2JJYPSv7f-E$&y~CN0Vbh@t*L|G*{{HMeCcEDL(zGzmxB+ zZTei9oy7`5V||gJq_*sNE+7zk6H0#vvwehD(9)%C3He>M;sD#I=z;UR<|1VDtYH(* z3OPWh7K`ypt!u0(4|~Y{x54GZbhWrBKR=8vX?BAk6Ym-L!Sf4vsJ8Gn5DpBIqayi2 zI~G{9T}5)vt_n(H9Ig5cyAi@Ejd?oL3+HYFYUJY`81Z6%Om<<=j0p>w$gb(gR9jXW zNV3LA5UxO&ajrmK!WN0m4bZ~hVgOkwHh_jH_Enb#BjfL;H^dT@dywSt0$QInm&@s&V zwc0#@0VCBQ&VTpbkT{jwZv1)Ry+W{GeHSgeM``#^+yT{&SWQ7WOc<(Jp%mhd#fqvN z=N7>vxz&{_-|)JCOX;`T`4f*0tQgKay-g_H2BL-6g8cGoJEQ6! z8U=W4@9i9Gi7U>LI&1DDE?u3ioP@Lfj9M|C1e`b~>&12jKLdZW<}{HN4anqFc90FD z2JNz7)WCY?HeIImCb9uLPUf;4Pod|NM}|mrWKFTud8trTaE4o5eI&g3-8T-Dyq$DO ziz+iAj=+JF^O9e0_Kq&zz5hpLi-9^0GSV1kU|m>w6T*2>{XHdb{ky?0mbI&}C&Or( zG0TiOXm5vm2SBFd<c_5pk;3i>F+#}yS zJ*dPN)nllK)osO{MR#18S76(}7+#%SIE#mwZV#tG?{gL2*TMDoYS}Dy`8@;fLoZV* z9s1FzA4csu#X$U_Kq>1yIUqLVbcAH4O->)|u$RZj1`Ytp2cXf|NBzE;fL0{j@yE=J7~jhjPJ6t(;7NyOLs0aN&SU^@)SrL_g-S@9g}wUf}09wXul-!xQi z!_c{;(uqC|tN>4zQ|VyH)#^rsP|alG|;6 z2W?D)b-l*UD`6G~l1!mOXpPT@drtR+Wb(zkqZt|g9f~uVY8IR^!{7)IS8C8}Edub0 zG$gZm56T-cI2$knCBM*>q)1epSO^ z!>6ETMl`5gX^j{xtR+(asww}IL{#+(lAog@BoXSkOhs+pk`*dyP*u%?Bn{x1o6}Qn zv*c%2i^MCZ64A*`s9LSm*5Mm3w{e297&XEvHNbV+Rm7+P$aR>*9aPE)nxc3HQlng7 zonPtC@DF>3UxqOC4zJ)vVdJ83Yi^gIU5r$Yhwg}-=G_3HIwttwfqv!)CZp%0FS^SS zv>)NtUrFES>z(8tUdNv+*+b$=-wljt!P@Yu-W?b(&2Pc=DS=1g)gr<-_=xn5y9@7~ z@(K3Z%BMj?r3`ljBS(289DDobK*)y1zql_}-bH{x@)KsU`XW)}riRjC3GabgvbsG~QMD#uJ*-N_w9_W)Hu;_IYE9pn zO1kMgqt2VYGo?(^cc@fFX8!<3u%*9G+uJp#j&A9+HEncDdzUi04bG&CZUL)OMYjQ7 z9N}o4?d>Bxb@z-)sMd+9MHtbKwry3K(?d5C>8H_Y?T61O>Q$`rt5XBV``X9hJ=6Mh zLDO&tp@U9>2W(HEn;97A{0ed{A)$goanf52vktTy4IFGc%4je z+}KOHlv#5V1OPx;*^t<{v3VRf-6(fn`(D9)P86k1c~>!oDkL978HBtrf0m2YE3Gy|F-wSO)krB zBZ&v+d?C~_>^8PRi#YD9g~8vT$z^k9-NqhW=tJ|xbps>Z|Iglcz{gcwdtcec7P0{g zOm7RAW{gp@WD8?kWo65#S;eN9EUPWjVo57@SGGh60z-mvNb*7o@R9)O0a9KHA%yor zz@d}S0)&z{;1GHs5JHH--~XJMxp(I7y}K)!{J!t^{oaDSvuDnnnK^UjOgnQXmq*>4 zdB{uKd2%3uYJvqMy^UMA?B{a8o2yXlS2rg@_67*`75hSP_Wp|zUD)^#S{Y9Flaq{4 z51rq^GJtH|v2~~x*ULpD?&|d8gn)13n$ei5;ZB_(<0R4<2#gr*@WPFQnN;`sfg;cj zXM{cA8u`N*VQyL7avd3puUTw8@=l;{CHxknTwiyU{E+nu`r%+J)KyDgOwEU=yUxC8 zs&<6~9;erS_4hz^)!qZcv+iDaxohr~V)FH-zPuLxDC=>zQtQi}75Bl_Ywm-RU3EXi z9Ci0glDG20g%ghZu!-(>)@O(qIk*ws$kl-iN)z;~ZFWVrX)(I5Q34|-M~_xy{Cb3& zs2^ToS$K$^M+P2P1(5e?T{nFnv>X`};6&GK8kwNY$hs|m4jpx^MiTrkBoWf&FQSWZ zL23MiSmp*1BTM}7K%2RT=+4R$si2Bw8~S_E#%Y(PcnTtH>>Rmi8j<gVo9MdcT8KWFc%&29vnvr(Hpk zHllE;o#k0fx#+R&<=MP42PPNBD_;8CC%3`E^4^z{#Pp?P&Z*g-VF6T;%2&G=N&_n- zIMl%$gAOA+-`OmnAo+>-);!O)BPJ|KEa5yVqHL+WV{Ln? zT+!}(1lhvKWUvF6gGyc^>?;74yPz)X3qdOEZjz!y*OKh(PV%V&y3r7m*HH~Tnxiwbf}B+$SDN(n z^7<1F%k#O4=Muo*Y0iuA25Es?FzLM4qzvM~&T~V`L5B+(+)u;49n2c!Zfh$n_`HUT zTsNsmo2q&19pMCg~}qS`KDD>o=Sl}FYIw%5+iFB;Mz1mg11}6orR^woj&YIDFs2p5wjI$GTp_J& zMFhV{1D@gTGPs4yk;e5d&f9*p231}`260``V%&3$W|P-c1U6lAR@~+@5$%?RLzEoY z7wWs7>B0s4ptv|DZm0Hi3oU|zxaAQbWuwFLLFwVo)lU&-mk)1%ESu}^Mjf8LHSg}S zPDsOoV!M<^9}?n8ZlrN0fRlIOvD)jh4{l=VM$e+ybT8H5Bph)oDUhUrV)qFQK5cEH z+tQU*_iRwzu|gb51EDwCi5@#pwCm6b2@BrzvJ0T@N!kSn4aNp_G*TXdCwSH|MG}fz z6szkRWr9=`R;ac{p{GC^B{nrMc>&{1&E=JAJTE(O+34a%Cdq>y(a(Bdfp2zXk|S_p zL-CVuWLlrVh7K6!-a{!`a`N7*aeg z=b^vqPbTPY4K`wwc55W{a+u(m7lwKm)E~oG0Qj0#VThJ$hjQtLSzr{GK3l^>@MYp& zY|0A+Kn&q>D5jn2=KpEUlExSoEUIk_eFK9#eN@Lbuxbge3ATuVnI=v0 z@)4IS$B<8+HH@*1OU&t`(GXpn%9+@n&ZuF)PM#Ld3)pi?NVuZPGPtDW1HInkR7WKj zsMMUaPAC6WWpqjpT!M+%GQMVly2^3Jo;VSjdXP#sfp-7g)@gKS9K!-VwHg|Rzscn} zbg+$^#%r+TJ%jJD;yDi7n5TPdNa}M3m77;)l#YzDUy>xbHJf-Ex;s-yK5!?>4?4(~ z9|}v80G~1a#0Cj&p5hre|M5uif~QhLBqDf_1iq#UO_C;tPa;X7ZN%l`Oh`6pcq^b} z{4|pAgH{l~2p@hQ;m!e9`wO5SjrET7*-y|w@#N>POv01=31DM-3*uhJ;hHE)+9Q2j zl7f(Vl0Sihi}%F_V^FjOiIXUjNHsC8l2aw^s7V!kZE3am+OeZW?)OxIljIidKS;mx-$-BT=DxDVj+0a5TX-PG+R9NE%)X z5bcq{VL9GPk%ctLA;ai(<;%5(jg3ZV(4!?a??M1Gze10V4u|1)7amt9qH5z|j93%n z0kkEC4EWi^RZr-VLd1@eNFgdXNs`?2P(C~!^2lG10K%;U>rdhDH-8f;{Pd7$(fpj2 zDTWKw=HzF>_G?*CQ^toA=cdHqOx(?1qW)NT!&qnt3y=J|8QLP28cq(d{Vb2Mg`}eS zjM&ga(b(H;VI>>DyPv$v1cl} zo>Xe~T7r&HNWG9DbCLEH3u;x$L^*6IfNzPR(f+~+58>d6-eV>gP+A6lYkoCMB_oj$ z=$Ob@$oAG(SblJpnHsQsm8O052WOBe8<|Jp2Yus3HT=-T^$CP@wh#b)cUE zRXzd17m2V*2{)F**aIuH9>@vkaGo76kW)w?cWrsMwy=EQ)dgKERN%ay3dF7}C)6mS zLt=>%E@)CJ(1okT{L(J5ad-mH*LVb%JU159sYF74*AuUD(0Z~Uj$yuk4$h2ec;&Q( zWrn@70r;q#pm<^{nO_LkpV-UaY2ZC`BODx{gGRA-;$x)(x*Dg#WDuHwryGR`ot9>T z*5xj za>n$O*5x7W6&KbA7@J;gDX4oAcAAYHLU;of=Kd9wF3*}UD^Ve7_~4VK*Yt|x251mk z4p72;qZ3bqIAMysVa9nKkbjQmN~Sgt3Q5QlDDmvdMzOxh#}FP0XxeFa>cUdMP4oa> z$D80@k~k*}rTY_jjbUOFDeN|fc?)YoLyKI%V&jG$-lT>rOmbDanWT6VaT0m5en%-Lk<{5}$s<5UC6zX%i4XhI znoQ1Of;zck`(;q`^e zm7Y#GbS<#5!dfz<90StRU~;W$5YQEyo7-*@*i3QsMuAjls~ua*QB23+>7f9<4Z32d zykKOW9^37vl}p>JVX8d$EC5lu+?MW5^ABu9T&AJtW2oST=OV0KCX@uOPz%Vzo|noY znv&?P?ae4B)dW|MPQnRni3{hD6Iic_1aj&zksUOi|6ws1ca9PAGs8(#_&mT)6CN4h zw`h1qQ5f@GY4Jc8n}-$DaAw*exZIsYS{e~xQ#Fhg5$`(}$|5zAh8RN|d#1P(@ zgI!QKItKTOWHko!p5#zcnB&6;D~j7>eE1t$1zQCU<34WL+_J`&Rj0O|T4&!)uBcpY zq!k7r6C=Q9SBVUkOH@67*GF_nE=+bHb>zBKJf*N~t_X{J+>N3RU3HE01Tt|xNyblN zv&C^qTOVY5RYZapIqBdjWp+0YRG~H8##kyB>aMhh-|g-H**3|dgZ}oAFw+zM=w&f6 zI8%D}vm$I#W1RCPX|dsf+EoWj8HEW}t&|S~qUd6whpgeZAUQCwCV>|X_>3qy0E+{1 z%+ld;aT$l2L@)rpB;` zfiG`OxTV!cAx_nu0`u&~E;N{;%;8wnk~rgpnS)a+%@Rr=z#%*N1}5jb zq~Ad{%@RJ@BXIJ%ys?8FspzG)na9Ve@zxP+dh79(YZ@AQpc6!dn9mASlE+wz9=t)O zrz!1$CQ8TgrWO1N;Bhd#EQRy=LB>GGS0*OPV;>1UEPx0%8r}$jbXlQ8UyvZ2JCaEE z$KX!{D8j8NQW0P1;Q%sC(F=?Uxw#~nNXz9WGBq_M+)riUVOQ1TVmpfDPB;W#3S{qTn%7e%WR1h!j0}*xkmNO&+(^pyD<>so{*@ES zk)}clhvv$Cb0v4Nk-VASWo>l58Bk!>$^bV%6G^Px*P05r0FTh6X4oW7P|w zFbZhy4o}Z=d8H($qRL-PGdX0y$4}e@%R#~vZ0%@h>FL4~9H{>Uxn~wDx5v1N6)mT2 zW6lmD%9Pi4T!F>O>p(6)9Z#oj`IF`FoR&ZF#NDSAM$>&czK|Z%(~`@g(z&f7(2E=5lLbUvE}<^R?%5g|v~fT`oWY=JMf`w@|nw;+X}{ zgJLOp9oA>i(Ug;y#&prh9#1BgUJ0DXxH2(9+W3+yAq?-Gy9jPZ;w&E5Zso*|2Fvcw z=C&1bii?+Y`4m8H{G86yG__P%zFbP!7+Wq&8&lxeb6e0;$Z{sgk9lN3msfnqJdwhs z1I(td9MZ=KYKGNx4@wP3bbrO3MQPsV^QcjJWFtqqM&#P6uJdR-#O#wVV~Kf&HZ$Uh z>=++D`!a=J%b_~j8^~okQ|!Y0e7xIw1XbRD1+?`RLe{H)wEdiQ8eKh54-( z1npN9TI=dsE9z*4B4xpO!cK6FyC@&s>hWWAv!SGyy^4JEy?#TrUoRzRi2 z#SaGo8(GQ09Iu!oMP0pk#av5-RV1_)tx56t7_AjGX7%9C64I>Ew?y}?U0XA4 z3v~s%MR$@H!BpOU7s^});tE~v9=YYk2O9za;gTh2t?NJuAStdA_#*MBr7||KL}l`j z(vfsh`QCR^52whSVfleOyg1qGX0r@Ugi#ll0FyS+l9>|-m&4+`sogxrx>IjUkrzGm z)0a%bn5iE=1N^plA(_q`1V313ihgAiP_GK{wz)qkuifI2p%fk>#P*50A4szTu%=w} z-C^84!~P8&dcqz$feph(dN@nxq`)_7jACMgm>8<1$HU0jR1^El?OkHO7glqWAM-;) zmCww&u!JD+9Ths6$0Oso|EfKu;3^dgp~uRhUW@?+z20XFQzpJBgubRagXjrdW);Iv zNQQ7Yg*|h4gpqCSLgZIV?Witthr(OTBSZzA(?}*S)ox(LP2(k1r?al%RGPS8R*0YF zm_PM2;J()S4&2yge&eaX1gu^Ycn)DOyQQc?Xj-GGcvn*-$d7|XAve4EQxD$$BHA;tuk_kA>NW}(|Xhp>swX_l9o&RY^>FG!y;<+@|;^xM05*lT9QG4&jC|t~FCRH}+$RM|Wz5`GkyJ)M4%b!6Pxj`6kpPU2O9>2lBsa z%*Ue6i3HE3ac0AN<;c4i;_I4i+v`3qlZmRoSP!+@gwCfNCA4kmQu_*4=x3vlf z6x@l8gGh{XXftQ{;hIucr#AQAo5x5;_{;ewD^U!Eqv2uLM#*zNanV(80{8vj6qxFwdLj14?NY0&S(fMfDcYgVaS4E?vu8Boo&|#0ztlgoEZ67@{PCnQO zvxZPPR!V(X2Kf!>Br&XXIVm6T=41{ze`)CKX=_*+YQ>XQ%c&PR^~L(nW>*w<3m`E5 z8G9Tvb0HuUQJUhr=lN)UZ>7(v*vSJk8?vSfB~CV#oP?C#g3S3(am*G})xlHfhr2)?&48jx2K8u>3 zdynoE->0I315C_31s0T3RLbwi62%78pz>(y(&#*F0JF zGtjR}+W0+YO*Fl;q%!L{N^6kG7C0?W=Y>8t&g!+I(2_~3Jr#KrE1{tVj8Pr##ToB~ zXzxSIDXI1}w6yOSXIjwtCLB!Ro#$a1} zC!OruS@QJ_vWc3A@CS#*Zog_wg zWm0C;zyN{Ko8p+#qhe_@8YVhp=~zp63{x8;rh(oo&W3PSi48IN%rLISWaD&TCj$>< zVRxh=1DBT0*(Oq}!51 zU=f?Nn2mzGUD4&)$%lr(p%@xg(#a+<(i`i9yF)ZR%(k)$Kvpz#j_0OKljbZ~lHSeq ztD)@M>84}~yzF%+UfJHz>BWI&7(Z*Ah2X-X%AL4*Xm~`h$TOx54iB>dQE4BJ4K=hh#x`JE(VasF?3Qq*Lko6yRA;OY7ihDZuPaIJ zPEW@iFF7zmOLTWS!7#t7QtWURQEG=qWk%{INRhNFt#uyJ>#O_Cp$ton7NY`96W6ZY9W{PbnfqNql4IN%!(Z>@Cu z%P0XUHHL!Q4RG>=fzZ@$KyU#@hVqPCnD=r)6jO{0DH5jyO|ZFi!?UFx$P6?Eh@jr8 zOvPlWGDNf{hT5Ist`(Oe5~dmePWwm(D$*;ppUy!dG*)l8Hv#9cW6hXm^8n#hJ>n!g zV|UkEXeS@#gbW6{RB2ll5uU+##p-hiGaacGLxq^p zZMMo0BwVur0c;-1)TL74F_E)?q3&3VsdDQvj(i>oS-v_2P6*j$9@&!fH-8!RmxY0nEf8XI>=}co=|V@Tcd8 zAO|lZqvo4Bs_LF~QGG%s%A?{~TpN=SWTeE=M8JY4XY?p7&FmSanU=c=>flwVX13z+ zigCB6Drz^~hY|@$rzo(l<9db$Hh96;&?1s%y`hHgWy?aHWjM&}4a2wqzS-n^D~pyb zD>FgZNrJ2RHD$ClQVw0IrF9*3EvLjTm`CcmimYrwwY%99jGI-M-{R;ynt-(t&9UO4 zBp|H_s;qG6#+j@`H(u$3S7q`szEET+|Fz2%ul9piR#aD3 z#;T*0WznjI8h%wxI94wIarhgr@u5>=@*!Rm>s_?4TsB9UL)XRU_#&Tt7DZ~xo&UA; z#9)n2i$p%0S??kTZ?R7~7nfC6R7Il|VEp2^Bfs&*KIK^KLqF_8KkP#%EGjNjIpqwq zpviw6IgN*X^6mA>x7R1%-kP#-WmNs+6=_$#QHM%-Ol!X==cp1n^aWfMN`qH%PZj@Y@)XsIS?=hEc(hvo zXmotqHR@L{hAZjO=!6$l)KFY?by?ieoAGFGwe!DTPNM-dI$E{#egf}$S_?S%s)q{B z>2OVKu-%~AE2db<-)^|jMrB%mkNNO9=EG;GXYHfWXZE{)t2WW#O4M2CHMmbZ(O?$u zU079BRS_-M^oJM#WFu<*G8SGWh9+}-ipzmOa!1Rzx3{`#VYoaJj+8CZ^mz<$3@7o$ zWs9qOH93y?v}??#U1LTAYWc<#Z|GZt$G!Cd&ed&oAI8Ka${av7d>{FV z`^ZmRV}rp5pZ1Mw#c}$rs+1~+`mK1c!!-hSeSpss4p|txJpivzH0WESQ@OCLikM#! zi8%TX_(s+mzTSMcoB`RBUx0h^%YesXdO1D$2z*aIR+SlIsnx5zBD%OHQiGaRlt=CH z2lyc6e4Kif8xtlC?o+RFpL%I$v#PQRpZZkz)ThFy zJ{3NEuXLD&kW{6@2CbgH#cbfG=3uPVa= zPBGbNziL1Fah*X8A}4(FtgI*S@Ca2&YzI9pW~UsSy~9+wk%92SXjxk{=z z=eLjED|hLW@`~7^Du*#ndRINmqjB*Ot!d*`2)*n4=INa?-bi)g#0#->0SyV>OfT<<CyiqWv2W` z%Dnq|#MPf7<*sz)g3oq6D@=LE9+DwXks5D#iMZq??#RoAxZK|xKqec~L*kbn4v828 zP3-zn#OUDQ@+w(Or-99oL^GNW81COLG!^aswnAYz(ZX69b{|6(_>RO91N4%wL0pn9%U0GFKUbU!Zp#ct*$)8n=7Run+CG4ku-Ns~UJANMr!lB3v-MiO3g@vf%9A7(9s$xKohrIQiY|V@FY0(cu9YR-}#c#Zu9P z4%iTj#Bsi?=ZRv#&<)Qdg$Hp1$`unKhg4cIfJ|2dOfE>^V0bti(}2M35l;0qPzG+u z=tL~der!ytW}Kc#w7m|&-ItVJ%uJHaz73RAltjt^@ojM(V%w3VbSOMh;!Rc^LI;I$-=!5Hn7Qr!GRjtRk(q1oK~AK7bLv_)=9d= zr#HYu!;mi9=?#NJ5Lb;%+Buigq3Zc$U1HLXLuwNh!f62bwJ!q_8z#$q1BBav>5Q%f z=uzr8Y^rsvMBiW%*ACg(ONZ0VTTh^8gF%e<{v$9P7iQv3P`3r^*1_Brq8ypb^-9 z4eDJ3XPNMOw*h|dbQ18`NR41*1z0SqH>c>z326eSB~P&>gJ%T!Lo=i>6(f+5n6Cbr zfC!$0(t9NfmeLwJYB*yy;<>e1^RUy)9`f^V!RcWK2(y7%~+D zX%5%mL{qX62ws-RuaCloxSl^oELI^}1^{sz8C9prt!!d)_-vxf7*qQ>DR7}rm+J%> z1mdzbUX|?~!Gc7WNQ}C%QPAm4L=$=*GNIx1j}7<7bSdc{>xDZ^NQn{_ zILyV&*FDKVr;o-Wu&LB&^TpdIxo0kpQ?l6<<&0x7LjY2AHPs8b!K=L{>RMYmxTxjnpHcAk49`M-!Lg}Q8X)2xwqW5n!BtQ~ya_d^f(M;S^zIlr7o+>dggS8TtZ&^bjM~X>X z2+K=zuEUWuyWxQmYY(GjSPgimAVr1icztBQWe5e+<5=&6*~2e;QqVg(P&UwD;N8Ey z2(a<5UT|Fc#wtb^AWTES82M<4G0^BSeb6ul9Vd|qb}6vPz(_ii!4(=Ei(n>iguc@C zjnl;Pbx$Mmob~QiBxx0M;OE=)=IT~}uPn$*DLY#?H+g1IL}d1TSbgvBGaOY{~31oj^W zWFQNW>~*y(sS8^dT&_*TnWhYFaU3UlxBY8?RGjh1mOqI$Cm zDeaWAxJ7yuj?{IEfP{zjQ5FMZGLkUoCzvu~Jz=cBv$kcjTNabIJ}kpr+BZzs_1x1x z24cfUE13Xc^24x`)Hayh4Wr$%g$rRwRc`K<;S2(&!GXZynu^Lwjyk)frRW~(tcJnx zcx92*KgHtD0&+5dCJ?_Y>sWp0^U)Z+ofVU&a$>k))?42b zkT!e;td6q<-l#&ejzQ>yA6nK?|0O`v3_OS4A%LF>oIZ(HM0m47&sE=TfS(JT)jvW2 z9~8q{J{$FQm5=Cc0?u_3&yU`F!22$6Zul_*`1sM=4{?tH=VgiKNAES@y$zf{{)DLc z)7u|$r9Wj9`ya3RK8x7nfH&o8AG4epliMOz-x66OnuV+_FBzAANGwx9m2{YQZ0U{K~f-ach86`wK?PNpAo+ zmrFc9dOJYobHMrZ?YZflg6KPd^MS;hir-%CdjK*z_`fZy@_z(9bU#g=M+Ff79*n;$ zf%6@SXVY`ZJ>`2haHjrJB(?Ee{b)JzJpwr4I|N>?e18F)CnTOt&m-S=fK&b}LC?l> z<$DP7Z3oW!I|W{@e18p`Z4%F>=gN0J$b1N#d3WW`_YOp_1Wxf*2hU4yEI{-z!0DEF zQ}ElX-5vzIA2?ON_M#U}2&iSvL7)>jaShLl-s8Z#6ga2dEmH1=FQf$cRO%Cdry9PcLL`LiIyjrHbR@NADoSZ3fQQB_4)5&++3;z`qBauRMnUKDp@q7C0|Uyj=9&2F?qA z$W8B9MDP1YfusKQtM3xv&Dkcf{K^+Zbd$spnBMiJ_Sgcv$e#q3AH9-_+dnsC?H*90d8}MUTpNBk-;z#ek1reGfp~gTUD?@p8@Y-viFp z-SX3W7dU%P7kGa3wjtjmfiq=BetK2FX_0t-^hoZ{22L3*=<)HZZ$ILCfpfpa^OG0q zW`6_DE4$~WN9}t^Ns)CD{^&#hdbI})e~W>$@66ov+JLtLIA4%>(|zbsMvnmJky-ia zP2Ho&T8%&YW8hS8jU80q+fogCKvr=u!XJ zZ+4OO2L9;d*S?jA3qa|2k>bb4uYE~hoe!Mk-nr>f`EHOnM2|jx<+~4fH|&#}9`Wxn z;JhgD2-}O^Ho)Hm&ckzZ)7ux(Q}ECJ`w6@mKJ>0e^jX09`~JD?pQ-q70cUsGV8O>vUZ}n&1E)>m z`IT=w@J<8Hl0$RT8v))Ba9)sje)31nI`gn1>+r*K)1&gO22NDs`IQe#Eo%rk^@05K zGQjzy#Pg#^_5Bavj2w}h-WK3}8#on53Ov8|pl;g%oU@P0O^@pPIpBO#;t{r&{84>> z0Gv&8bJM#9cs~VB+tCi57rholj|1nyV;nrM`ODRy_aSh;c&vlxNAF(X%sJk{^P;yO z=ru_k1o`7dkJS7+;PubTO|JV z$Xbb`=vhA;aTV*&Pd9=UWFLZl5xK_dS;1QqCECBCd;BEB6gB#Mh zr#18-nm^QkKL@-gBrfSq>gRz#;H0Ly=9cEB*5<+SL$R6YM;t9GCCB;+yfvZC!VJXQ(k)-?Jjr5?m8( zIi@%fZxE8bt_kd;BGF|i1$rocpV=IdELpWwU(3?1uScZMU#)8ehdmxezzuI(4J1l zGlAnej}NrNS<+zQJQ!jjv%z6lMy7ygVe`f!X;+`e5GckUm6<-9pz7#UPu1bu2)9}* zxDFIgA4)?wIOwo0IsyOir^vp&QCmw@Ma~^Cbn1#_YHQ(wi^2)^ly!);_iW12<1@au zwU;%sbjQw}JMYBa3*ID2Gl0;KTZp|A5V7_K#(Tg}0GPH}Q>^wGIC}6nl|6uO(*8%_n|i~M_&yci;LZ3M_&x^TefT~W-(&bb9^aq9H>x}SAM*E) z>bqf904p9U)Erk)(L+G;Qq%=vFlFLJf)s zv>@m+OSb{Ohax~gZh7o}fXdnUQy=0RwLS5!TLMviZu?X4jdr(|;`>B=FT*#43mVHB zZ^U;UzB}+;kMGm)-GFc6KjO05Gzd7cRSC4aP5*?rHLfUkOU;Lvb(lzBnaqlqP%8{5^rcxV4+oQ=w3-zdt;LX97}lmyt_P(F@3bzNVP; zXCv?s6TNMx9z`mnSJaF*;`sR*e(z~O&u3(a9%Z8YhG?3PJg>QBvVP-Jh+n22CZ3=x zSbs;{2VkD~8zEg zj;sx7f@hKS<tpPm5mMkK+5QC0Ev-geIk?$z)pq{ z$Z1;ef$I8_B+P@2j`v@{kqh&KfJdsxE`U=yF2>`Cy9u&QG(s?SWKH)VfPVmxOH7xp z81-R^%1}b3GTbXs8EXopoc{E(oQ<-)k8L!C)#r#L&+I*Gsi# z0C%ZYk*~K;`<4FpNH?i;TyA#apLO*_}&*h z`#8RdcNgJ%9=^x%e>J`@#y1J-CHOuA-+CQKrpuDO5@jqKiQPe>m_38zD3I3FdagUMDBd*<5FG@pW z1?0opA+-T=@||Py`{uQ^(O7I47WZ)JTiAT(ci<_{GN}_$`JMwHor>TgE;!>=Q=UHo z2%_{r2kAbVo4iE{@eHn*j*==M2tTI`*q+wnQjBi=p~Pa6;^rUK(Tji7);m$>YHLR6 z;TZ6WEVx0ft;GeM7%mmziUxTK4i9CPjNmR8*+d5rHNSjmZ7siYf;sApQW_`^5b0oI zPhNDz+hXY@@JJBO0GFSlOJm|Hkf#@bTwZ3COZ44yq7Q~g#Zz}_Ey;M^B=DTT?|5K_ zAPP0jS`owaJ`oX*NG#Es|J23~JYJ9Y*OyS`@wYU9O091cLgE^>E&IA{?U(XPbB zP-}QJF*q`~#Aa8e%1%882y&>SuCuNcj|8=Kb$8Y^w{?fw+S`H_)rQcE@}i5ia(i3L=~j(QG$n5$z0k9*qWrdsBijok_FjcxYmHi(8{d#_ zTM(vswW(bqN|PlBRYe7-LFttE6pc^akvp9(bo)ylthDeHF!-GAh*7WUXYE3)EE<34 z!-C177zcnL&0>nIj_y!XOZ(d9wiTi7;A!1<%oK`Q8LVr}ikV6=9X%~Ac$ikCnG0%P z#MH0I>h1_N)U~wK;~nErM`v?;XLI-I5b4g=x)#_^i#&Iu^v!K8&3L6Zh&Qsjo7>y0 zqa}%{-Xxma*3`8$H$s^U8q7%Tt=^Bt?yCD57LFng}p4K*OTFoe(&J3?dONw?=W%BFLu2Si}nz{|;I^8E% zeo4>H6bG%ybR~<`Q8MKWpOlQGN;`!Uu3^}IvIbKb)){Q*7UHYm(-=H60Z&Qt9rV+u{Ykp$}Xf>Q3q7wZjKpJ^AMh(fE$azJnxCo zF)}w}reNmQ5^U`XY-1c-B<^TGR@IBydIk<@Vl}$5zX|=*Q!W^uAN7d zhK}UMSgHr!UF4*U75#MV6UoUM-l&1wh7eq7(en({5h+s6hh^k2b{;8~=6N%nqjwz0*rYv5o`M$FV9> zvq>)`yiS1QO&XT`F>wVSPN6bm%rt*Ay!nay$8F&@YhF%rv<|=pN!+?7T&jsT%|sfz z5%lPL6g%HJkYc0QLdK?e4wOVJvT)(z+7+VaR!GP+p&}rtGb>Bn)G#bhw4uUq~mm3S@@Ea zeTjAea%Qdfm4ya_a%69^>#*!nqj8&8v~iKUxIa_dP7#YK7du7!o{*ijPQ%Rb5FM z`c;@TVW%#;ZM^dlGPPS(0Xc_I64>wI`=-Ds3E{%2FbyiscRNMoT z-big!JfdV4j%Go*3a9nN1G7uk(9_u&#Pm${K3xOrRRk5$O^?ZDnWSMBOO5<`-*XX^ zL!t-2+Gu^OH1+t>h7cCOG^@sr6{bGzBkahfB{tNDM`Ts~bCg_Zj-#^6PC0oOJO@3g zHarU6(HUH0kES`QE(d6j0ucqXK(wQkr-60-w7=2F!PXA!3y@aK+mqZw{ak}v4k5F2 zG~iR|{MaR?1?H$$kJq|+J1z)A6rQTll);Z(`ozH;oeVnJ#d51tUHpVXH9G_r4(MT| zA2HUNa;`_28M#`=wXsPaTCkiz?~yG|^HM6;49`6?i7qESYWGeK3ErdyE+!62y~u`e zVQ*w#F|?8Gl%-LYCC79@ykwhmU8HuzXM5Jj$yZkDBs){DT{Jg3>UAg*T!rP&6srLi zOW4`zqP?Zox>fY6g7M-Bg0#-9;W5Z>A=ZgAHScxSElBqNf|I9Aj zoDR_eJy{z@@`eqh`#^$b$mb%k1=WA+S5$bBF6C0fEo!AqgEmZ972RmEp8qkT= z@r!qFGqaMdp^i7aJDpb&$f#-*+1x&j;v6~Aiu1f0QkvS%MRy%GHn6*aY1)c56rNUr zgk)?uD5TE16)S*4!#3dkCPX&=LRwlVd#Voz1#PA3~|A&R4EdY3qPCqk1Ip!^#7d?csx zBjrSyV>7)y)Y-lk6OXznT3x+QFCSZG-g$Myovav`_YoffLEYiop^Z}&j z7w^h$;iGqKykkJ^gsPy;R)Q5_z$Ms<&S0>O_i71B!!SYXTY7?gghjxqRtt1U$4V%k zm33`x!4@V$%sc=wAR6jg*^IqW+L0Db(jv%8xDu9PU=v{%I&9t~c|pdt9&>doXkVjK z(f;W}#KiGyueoNaD9+j-Z^6<*nTUcaUZ%<9}ArjustMk;6Uvo+yD7 zE7hmHO#pOMNE9hEe=)bahr5a-TU4BYXK`G~WVvXHG77d7>B0glb1&IdD!{uAp7dp9 zC& z1Qk&xap`|=9%SL8`sVTxt5H5jY(LkVSmC%~{=I$;m*Y!;)cOtW3=3d0w&UQ@C*J2`o z>8MV`i7=C^C9QW~424k9YO0MhS5b4KWuA)ANgwfDr%&LL&^pF;8)6h5_RDZ2aDbQnWygk}km+Wii{c zguKjI$YQ;8|HI)k!OyBqKh1yzNO9@^?2o%cdB6INlS1u#QgNsrzsFoFcRd#2z+NyJ%i!uNYY+VTEO;IY4ZvoKG#ijeng5!B6TvX{D0Y7SMV;gWt97-ogQju7lf@5edF5RnO^x9f_f*!Z3VxbsD znBvksCXkf&6p(BwlFjr=)*l;yLuI4P8_LPUF(q_L+=TSgC!fByR+fWmKD9tPBWbwB zcZyJtq&u;5LBe5_*P{w%(%M@74K~aJjU8Sz@bCouDB~pC$*%^ue=iId)l=z_2?@jB zyb^}{`cknzxX#7ZCMO?i(N_ybw>fzdlD*`WOo$vj1IOs`DJLJQ&mSj{z|QGdBz)E@ zA@2ohHK8IsRsf<+nfl_6Q}gx3O6cg~(qhKo+D{Za^(BBVfhvNw#bE+;C}zXC7L8&pNBa1zeQ_VF6Zb{20Oh=1hjwXf?o@rB zPL_k6oek}cK`h3KOYf&zn|hHIAsql?PQD`4fkIL(cEC(WY;lk-A_%Ge9vkNXKsKY8 z9i+%%pVQXUfr&(WPY3Ix0B|uTbT8sET>z_hR33YEtp7LLKVhiLU^WKCW&x?PVPY0m zmEzZv=z<-XW}V7$2O-1IiXK=iE&%2|xkd_eBb#-5FRU_otf=5Ue{PE*L$^~^PX^_m zN!jpI?V%89ee8{f@t_7jRDj3Rur+MWMB*b*cb@YcgdZ~wc8_K}Rp#>0B@?jN9)GBP zzTuS79?)o1U4YTQqd~|J3FCT95ONL-<%@X$IVm4rMLG5qi+N$FNnFE6_&BspB9oAUOfG9I=_5ahthR2HhS znz>98R)0E#UJZYcHVl9JBReu2!+o~iZjAR$1Idjf?ktCbiQErqtbfZ9aURsEdWWsB z#9T?dn4;bc!UJ7>So;^3uEv~5ZjmSGwxPBazLbaY7L2_Dp#@hsao2%b>n+Hw0M;im z8xz<;hsjj`5}FYy(^DLKh%P4Z>M}`Oy2e!oT*$_#NB6XfOG|NRCZgMrHu2S_Kh|Gr%Rj4%fu*=d!AyQqRf%iDCv8iy zKEmw6C?w{AY##tq7L3a(N*v5d12thGL>>A^i&RDO78w_2ic4GU#>k6bTbqjEvAn1_ zpx~~5EmS9Svo{>Yiy*LYI}$X{Qe|{)GD!)JeVZyI`605_Px- zTe{-Xqg2ldwT|$_0+)mE`XMIf+_^~kO>LB<5Q^VCEI{>!8=NdvQ@=Vh(1cuaaGXfIThs{4C|t;8t|eAKdr^R zk!~pzm;S}bK?ykNtNE&}=uIekx&bGH;Q_P3@^xscLym?chT84z!_YFJQP!$jP)Ci8 z;vG)uCjnheHGN_TY74JUg;RaF&INNB zrEKlY2u7wQOS$hHVoReb0uaaJL2#i@X>5t4Vu^LDE&g~fMvQyh^H=&%;H^VknZWR` z)U-YDCZlNv|lKd!S@NCX7%qz)z0<&>I@ry)al>@UUA9cD%)<9X@5UbqO_*t))YJp9q7urlyZm9SgR# zYK(c;p7*p0pG2l%YZifw|9^x&DUlYQBY+DPc4##92yxIAh8wm#BwDbkhy3QhW(KUnPMA4LL&OtN|~IBvN0B3&)SFj z^D3We+DsSSlBWD8`k?A253EN2Td7eLiQY{VGZK>ZjY>S6s&Bw^wo7@v_%p?qP+MYv zRmGt`ISL&^1I7&sBdf_-DQvg7Y0RwD&_#3P?O0s0S`p1ZoJ{k)y-^W%4VNr~6-ZYP zZzp1?lwBwHG?;hBqV~kQpfoUusUO9Bjb>5LV_hp2esoia)}6Fba0Fx*?lLkE2kKwH z4H)(!O>k1wiOnBe7$9v#P9HRDk}PK&JR7fvj?|EvhcYYhbQ-hdRd7m+;u|OpXvp3$ zlqad8jF~}qxVH&2XdYGQqL7xh1N&cHvA$M#ZQ_Q05-VFR8Y#tv<4^i(STJ*8?Mw%zmXJ8{nL*f`7qHpq}kHV4WqB};eg#1M9 zDm)a2XDlQ9b|RPbQM%^tTst=1r*K6dh2e~bVY7ng0(3Q4i-a#IE+lj zK|kRXCl563CSxqEDv&Ae06g!ddG%j%Nu?+UttXE+bpth0Jr*illdqY5Uza&~1VY{L zd%3WPYoyaRn9`v2Rjx02qtPm3t&P;HT*jV8g#llF@*A1JI^>+VHHB# zbeOyFjwj=gBOm53s0mkj-1Dx+cw?MY1>4p%<4`lSrV>Zt#id{KkFTwT`w4i?i$zbQ zxx$GfOL1GLxb((}q;S(nFJ+~(FYiuvc6T>Zb2ZRomCh*_?ipi;87%MO=iArd`F0+} zFET*2wcv9y#mHZ^>rR%?JPr|WF!haN9HO1ykKs^kZLqUZhz@N>9t8y63&xfkW%yOv zrmd%K)gZM8jb*eB>S{g%w@Z1zd(9s36cRPUZ9JfdGxq3*BiWh zHzZRlqp3FGsRKSN@TzH=({Mq=$ro(|Ql^c(`AW-JG9S%jJj#2PH&f|plUa&3)#w69 zO%SiMx8o7mm>7;fi^B4Dx4MSk4A&BMwDC#xEu~G)u9bAVjnY#|ur)5tms!YClnrj2 z@>oJ+H&z9}=^Pj~D?g z-fpMnx|3wAwU?j0&hQ{a9t1oOTnW7xTgz%MTeNo<6%?kOqP=OtNf*R0G{9X4o~p#= zC3_Bo7p&sam?#MM^d1t-bSPwqW*se5c)$LEfO{`o>-U4_v^XFvrvbD zXkr7TgCExJou)S95CzT|JlW$en84x$eTL zVTy`Fd|D1#10miasH|WK<&NmCuhSJPxaCw4a74mwahWWH${pr{tW!9T4D!HoAe!L5 zN5{ga8>hu+ZW69vfCfKnUR{+yS*WIfkOY)hvphtoB|2IgnR8QZ5?r8#7(Khz1nIn2 z4c#>&NB~f0}j$;;DCvQTnD^YIhFjuulnL(ii&Gr# z=Bph3u9O{x#HYe;1swZxd1<9ery^2TNn@~1<o*STP&t~K>`R?kKb4}I zgoa0Y2NDsOtzv5crSdhaP%|hJb(%nMlXK?24Ne<7tt1&aEFk1wq%wk7${eFwheG6K zwwgANsgYNq@J+bz%3Qew>QJ20@y`_4*3{5WHbk`7yXOIDV@w4aaEE*Z*OO`Y7Tepl z+EG3r+xh)$9Kp~AGmANC#X+GI<*+t_l91twSbvj9eG)jN;X9x*xMXzT$mfl89)Af5 zX9L^~w8MMF>0RBy)({-&;x;PIFkzhENd~~Up}?w;W)8Z>)g}(qfrpf8qajm_xzy=k zOWO!GP!roDET5Z^%0CP(NCsKx;)h_q0wK!j+bL1}O`xK1%4J6g|ywp8@Voj~=U1(xPjv;7yU@t)$6DjVHm#Arl z9K@RCZ&-Dr{&_MqgxxuURT&eL$$^V--_m`0N04>KO>)@e0fU%IG9XQ3i0c`BuE^p# zMV&edB}HjSf=PZMMkF+<8*@Vuzb^#@<~MTWCQmGwq4U5_E8iOEA)$7hy<=88syJ|^ zK!Y63(8*T@v93#8-KPUhrbE&=PVHZSG!oe(grw8xKnr^s%}3x*5mag0P7UXzBuN1) z{i}u*F{z=BIt%RS#w{przI|wvkot>~(f}Qjs+)FV$VUhjzBAT`;{$tQL!CX8NcN7z z?U@UY5!7NoCv7SwVl=a%#nPT`#irWYvfe?hw#^`eX53XMdiV7&SN`nfUqpUZ{*y(6 z<@;WRj?3`tM)$n3qPD&A*1Hery6e6bP$&Pv@bFQ?FMj*-cfbGK^-s+|@Rfr)@d6LS zXMX9RSMDA8_)D)(0nvcG0wTN8NSZH;(GK=Hz+bUGw#SoQs_rhX3eW z>t~&^{`YS@)4%D|hfb)z&$52b@CU#BbnvcK%fHqC{p$aC>CU zwu=_N_e;DC$MDO?_9{89<-PVj$L_9~`m69a;9+Pg(Rt;%^iS^o?LHsuC@DGf(GwS= zsZV2g=ZcJ+>PjLnE#9J`jZ}g``q_F zJoIw|^a@~@;ZuITx#5b$A)szjklLr)=dn5efAH()^g^T&)$0f>EFEkPrvEK zOBM|O=i1wD{Kr32f4=qMPaW6ulP_$xtVPp_{>t-?-F9A8=*Gn2o)fRQD0DmgLo&Q} z&UeqeZS;vp`?mLPSaSDkf3vLrX84N@tM~fO#YIy-dCeD}dhw>k;OA7x*6gBLr){14 z&)r+bFK>OM`{YZGh(N9wzI)w8OJ@G}Nz>AwzI@(eO-(!D(~{w5UU%c>gWr1my5F^q z_MLjpW9S5rF?{Q^%n|Ji4hqj}eB}pcKh%7xW$h1#inEJe=zDD8$rpV6fx2H@_0qbF zFX@91P==SDvgb`3j+^)C*S-?%y}tf(l=C`<@BH1hzxi4uuhQpoXWxH&@x#|NUH7JC-NW#`|8@V(Uv9YPzh4Rb@`10N^W-hKU4k~4UDR{YnNQt( z)IP7>aKiN0UON04@TY^}_g^@@Z~6^azjFFDKfLtDAO7Yvy!y!SV=nm7J~z)?H*mxQ z_k8>D{^K!O`!mD8zG^J~nIB)+zj?!X58m+fm%at>$}@@n#kbx*USEydG4&6-}pJ? zmf_1Ts<`{-C$4+%{QZCQ&|hb~g@JbAETaGD`H$VV^Y5Q|XKc&i`~Ub;XQItFG5qaU z)*bM*+LDT&eB+A2{&{O&wygUY{)aF2|MR9LfB4upuQ;i*Wxqq3U@N}|^I?xq)m%J$ z+NPdm|E#{ad&{M8#>?<8o>hA5-#+!`xu1UH>PK&Q?D2o$g;<8)+5N|&&pz_yrYFZo z8vcC1m0z%|-!c5}TQ9ix{-G(|-#;#P=V#9!pNE$}_ayqi?5H`p;jEGmrYwAJ>26!U zwh;>ghHw93Rr%VnV}5_zfwP|Y)n1=$u&iG&JpEpJzd7xvB#J+%7;XRSFGp}sZ!eF4xxc^V+%;cVbJpq4 z{unQHqD-@k=EkmHe|X13$9(T&_dL4Cx1NE1NH9Ec%$K)Cmb`T4Kej)<{!<5Cy}`16 z%2Ese(>Gz|Lc?UKY;#+j+#R&gg-@V)$2=)Neoh?n94U z^2wg`(Cgns|M~{Q-@Eq27r%4KH9H%tul>xW?Zubi)n11G>V|)9U3y{g%~w|adGT|< z{TIq}!W^O>d}cx29Sfg(V~^eo=-7+aQa`*{m*~g(eS1A_gDPs`rA&#_`>jS)RjND`_A9} z@l&5~YpK8EyhlKLKcfF;!^X0sKmXNNkG}VNk8Jt-a|76iVEC^us^50f^N;R+^6pps zZu5VRKY^DG8J_&q2|xZz*9%+kJb1U7TVGfUUG*}dBP(RBD^jV8Ns&dI@)E3$b*dq{Z^!Q9gZ-u2{RaoV{qcPrw+?&r*ii?iNtOrchx*bVMM)y? z&_tGqgQ#?B>?5Wa86FE!DJNb_RB$AcS%>CGB{%L0g>y&J!|>V_+Z7tH{e>~?u2494 zBpijIQUo-1MRw9`q_B=`fimgnqzc61EUd_PS$+md;)gQ3SSjuh5!ycbCLn1vA9tfl}Bhf@MP+o=JxglcrT3pLe_7lor$iIMv5*@{6Q8X5xe2<{I z!EyGkO410o9i9$JO+t#u$$v5xb-$ex86NhN?tO`=edh}0Rw(O%jH_iw9- zsOjiHqIZ`HgI)RF0V>Qyb)aH$Cftj&ipg|#MFCcAIv5f~~$ zAI=E<+on)Ku{S;@%vW1ZFt#W`nP}VSG=^~;v+MO?d%MZkMeNd&4&7y?PSX=LDcDGR zRJ&d|=seM0yR06>ylE1A;$g2B^Rn`4|N0cB7+7=C5WI_on7=_YFB-8PY(aG{SHjvI#pfVHhQrtw8eAihK84SbA+b;59R7{D>{OA-UEwYgz zx2%PCy=nuv9Eq2{CeB_tI+7{&B${Ufi~wS(b+`zd92lSe;lw+m!? zKcb;zG}A}o;@>m{HME$;%Ei=1XuL$ypJJh1adZ&J<+N1%2uNj8<&oszU~*{kveP>d zS&!3M|H4e1Q_LuOZY7?eB7uw1_FqK4c6+wb_~xGdWm(}2k=M(u{iebmeV4QLbZO0ooz6keNzUEQQ; zu&mIUZE%;ku&dJAC)|_RD{7x+Elk?RMyo)WMon=ml9qLPW0S5*a0WYX4KbRK}e z=~heWTOBxWLHHS*tUWwI$&>uL(1qi*)d5p^t=ppn5 z!(Ni15^EG^l9Xbmb%6|(SU*Qdq@`183YAz5I8PRMbP`RW66+^6>{c80tPLY834zxS z#)-58GE`!H-iBRm!?xM5?KZ3o=eK`CZZoV4WN4-}E<+{OHXF9xh85#P_IXaxEkiS{ z(`2Z`nvQc;ik)ed$WVzDuwip;*nS6F)`yIDkPMYrUqomvT5P6utqhe|i(uQalkt|w zP>J<3gid3;U&v62^#($4=!CR?lc5r;;!wQ7$*^h}DzQQc6)`L#LnYRQ2+@0%Gp&nd zsKojXLQ@!avkaA3FC%m&!(Nx65^EOjR7_>qY#A!CHX%eZIMe#143$_>a6cTA=sKojeLNgfl zYZ)rBrXFE&&zNb=kf9Q5EkebNccu)LSl1&IX4p4msKj~=q1_qwrVN!>RY&5@Qid&( zA@Bg95{7+JhDxljA{1fR*JP-~y0Z-L`7-Qo87i@!Lnz9yKgm#uwOcvf8)w+=GE`z6 zfl!QLN6S!&bqPWX81@Mng1jIUXV@=fsKj~!p_3T)7a2m2N2rfsck_NF(ZMJAzP)((egQVct+)U7RvkTWmVTi3&R? zR!1tfA(0$O=fmSNBONhdOy$k93cLrO3h-)!$|QM&vtF)o6ontMX>Uwq`oWMPQ5_so zu20X`7~?bZr&AV~F!RB4;Ao_v)6KxqQGN&+>zospb|E{wl${*vz+wTA_8nnpQM4y$w zgZ2TuIGnVw(Fk}LF=4zUoWSeC32Ow9eqekEBG#X$J zy*?1m1dcm8IvB?_s1+LxEIlPq7C7dZfcUi}z?QT) zmy9yA|Cg_9lA_E|{+F*g`sM%1>%T|e{lCE1(_yIvivzwp22~N@gWCXh5(3G1fS=n- z%ef4lm1C+9!Ry@^1Tn8j@c@ZRtf2Q>Xl}4EMNYHQiD-;c(@p|RKw`s300+0Pqj0Ac zOVhN7XC1Wdk|w-NKU6;La9TZEUfc9q@#fYY=M-&eEq;mkvpM+QrVHP*GAEs5ZE1av zK_>@`Gl6rCXKFvR;9j>peA%NTdux!BgYRXgy!yzNU~z{AMQ}?`@#fXVTmF33oztub^$*u? z3F@~cI0tEFuinx#t5c@uvTbQSVD*))+c>PgxAg4Tbm#m|`)BZwjw@TYN)++U*_R=u z{E3_opq#b*c5J$1KGF%&V6L4FlP?2#nKn4fCQmge)@uNI=j`mKW{KWF|8`vb+Bm+} z@Q=!0cU&2KC;D}Y*xdTsme$u4$F<;Ix7=~r9eZ8YirM*0Ik-7G=d z33PYxZM2k4W^?eREv+vx!lw6j%N(M9aLZ&$)z3}uP0vh2(jsbRfvyqR5_}2u6WKTj zn}gdmoV{+j_p$E;m)0V-O~Ctc+tD1 zXHMsp!DmstSrFRdPFcj+n}bhny6`D0vusQ7wM}=FfwiCIs4cBep*3Z==QS4KD>FNH z?i8`Xr?#wwq&tvT=WQXZGV}(}nU8$ttiH16S^S*s&hrom3<&L1^7HanKG?aFlg$FE zEiDM%Q&&u4#K8F?<2U(78UHx>&CF5#R|27*u=pQOP15>KbTh2Nu?O)n>JhV@9>M)< z7CJDr6tojM_NEJWSed;@eeK{pHV5B%6@v2)B}d}BbZubt&tk1}?y!5Z>aedCtC0E@ z>gXW#vtwt^tW8^|*2kF-Mz5P~%?w&*JHFWK%+$6~_5?IQ{; z!@snlGaZkzzzm<$h7o$0Ls%h6dgBQFmSM!ghd6XKLf3QXMuZ;Z&>aX}!=VolqV26Y z*6#TC4i1&#-(PVkfPcTwq51gt*Bq+Czjt$}0so5FC_*CbFhW1z*o*M5NU_C+eG4Jl zlAF#~e!8J>rdyBUwu9&1jiy%Ss&^dFLFxk5?b#gG@X0VUl@kIznVvK9{rgJ<{Z@P zrs3wHWqp^ih}z%rHy3~ELp3Hi{n2L=IwSUg`S)A+{y6>?Su0BMWq&9Q;lMiII_wAq zF2WVihEs7HueMf&z|XyBE6NH_d z2j9s1wD=Thz71SHP1yMcZSU|Vm$>Ly2t%((x){0z0EeMo{2WI!>HMsb{3IPD_(>tb zPYPl48O0Z{XJx2_=FBXIa=;NXco+8Zt*ek`4oj6=0!fN=8F5SC6^QR~agx%I1n!ML za>Oq_zMP~>ye?kyz23sab5wEDTN<38LYT`sssA;CQgl~@lVm4H1gLk{yUK_(b_f@jV;gF?>^(CD9N}qL5$`g-WcOW$aArhccuw$w$=*rSHWv zQX2%PKl-=@?Mr|)xp+otsLa&JpKv1ZMS{Oa;+xv|D0~xtNr?&mQb_QZLZS-`7Cd~ZEi~T+P@3r?)M;sJgg}0UIlK3`K_1y z#q^K)+bH=>oB={>}#9slk`MU!P-_6DLFileF?&UP-6P*6&7dUkDX7N|g$zI?umrBjDBmU>Pe%UnENBju5% z^@67q5m`t$&cm@-5z>_K ze*p6q;!_Zd&S!r}860Cx0|ko>T~5UJ3D$0^%ZEa-e(A4c?y_a&VoFZ4p5@C|*9DiK zb_Nl83xA|UPH_o8<#i1HXm$R8GgEbl)Yg97`N0jP7ftCaj9HlGmsqu>uVI=GRl+m; zHxYgdQo(w~drn39`_1rw2@cJ$mH>nJH`7`!LnYQ{5u(_c*5_rY#JWqy&b02a@!qrX zcG!4o9k%MdtVI}Yw}_<|=~P;xPvcB&Y#% zD}X{0h=)QFC?xa-#R|Pap%UvpP!M9PMB}t)0#EUGl3Cbb}h=6SF3nKUmiim;=ih_!QQWOLP6<*Po zS5W@n-#KUI&di-Vxh=f^^U35n_nGHB=gf1S=Q-<~aWS^?5VLg3z|s}%H{KvgL=)Ul z`P}c>DPXg3;--eRLNv~{8#ETXx{N27X;Hbj38~58q?Yj&Kb5;VFPz_VJfHjRkqT5A z^>_~D`f?GiHkBD}vx{u7AM_e*H+ED{@L8V3w!DhjmRGS{&&8ioC_8s+$?&eH%tBoL z;)LIe)>MPiP2f~k&hIcW$syXaR>LN|C!=W3`U>uy7?F?Cc=GvDQSv!ir%7}VR&ao4 z&#-m}t>O54op>-XIA!~UC0T9dsjRFNv$9gm$Z9d_9K#n}y~%Xx z(|HAD<4vhSWP)U)-n?Wb;~(N`OEr`O{Gc?VQ44vof2ZW+HCs5@ws$p)xlCcPYwS$6 zO=+=qN_8h+hU&^RRCAhN-4rVgpIbOW7s6;t)Yz4$MjAYbZ|of@+dDoVq?M6kRz`}k z{}pPByVu1E%WW1ER&Lr&IEKT_-i_P_N!^+tw?F8COh}Mh@O!bvi7l@OtZc?J5gn8p z%PnR^cC#-x#jM;EvvRXI$<5*z%f{-PCQ7W_w5#*o%55Zl)0wq4B+D(MlWLdLGiOtr z;NtX+hY87Tij&*NeYq)S<))aGo5e|P7FS4avTiFkH2z)7?F_heCg|J8iji9#pQ_Jb ztj&$B=3K+h_fB>!yBMAOs4qLktn3uqDJ6+n+IDQ4xVn4KB0xJMjaVR7GJD=A14O9=9gKd3yC})! zFS#kJXq(~L?`M74DQ0D-n6+Pvll@v;A=%A_!s?rLT5fgKUDd@2 ztr%UKKEc%q&hav$#Ss(;AVrPrU{AZe?~F+?FKhnZDLx!$>k~t69W1xQf%X z;{4iyPHq?ba#PI8O)+bq7AO0(xI%K%w4jxn-p+fsavRA$uPRz@eD`@-aZ)Qr*A8|v zyUdrFVpe8~SzWU@>6*nAl9^`rt;|Z^1DS1t+i?lHc3CkpV`ikenr?1A&1mc5B1c@s z=^JAPGe)@3mz`o(c8b|Po5iWmW^sjNrxhJ5JH3_pZuM;tZb|LvHATs;iyp6$Td~th zrX3w=jCB}t(-=!oW2{g3@>9&pPcdt+7AJePxI*${k;2JOZ;ifN`HeKjdSL?DnULV; zmh;i7#*99URFuKS*=w}F>*?IBzRVP}GE>ajtHsG)Ee@I4*DsjcJ$G(uSZ_^SQhrIz zXtp1}!CZjXFQ^A#q#s$q{Y6jGs#avH(W@Ls}X+$G!xKNW=Cipv~ z8hQuWlcTKd&@4_uvp7`E?w)=7lBOna zO<}YYOC6DKlP-Rdg@Ig3>g0v!B7#=dnh{m}ERZsb6DRfZv7?@{OCJZmDav>EXMeXIb6G@6$DJo{S=UCiB&|6%x z6z}^#lj0jv3=@*1*yVi@<^N2IUvN_VqLbp6oD_fUOHnZ^Ma8TXElyIjI7#u`50#A@ z-i`me4DaY(NRr2Un?$LL3-1Y)0Z1KnDM%f?->>s~9aq$Ny)*}L@8>ynZ1378y_3t( z$LY*_bN*UQQ0ntMajBA*=j(*~6%v49=>ZVpd>^S>v@h8L!1Tft3s& ziNHn;PvL**@PYgvGrSM~#}4nw|1u-a9kxlF^qU7&s0n%d_HC%!*SnD^81(I4w@%c<%&mTcmk#c?}Gh~rGW zY}9O~r2OqNC8mO|~Yg+a=jH=u2u6~jNPbB z<3!6FWHqDdH~g@Ae2U)>*Ow?daOaPkG1TgQHsK#dh{_h zWt(<1zj*m{w9Du1OKQrFDcQ7>@Z=5sD^pBj2yEirzIojE^MAqHlfi=hFikPU7*^x# zD=q5C9%FjUdQHsEduqM^T%)_=I%_NZZ0vq7OBlbmhL$J?lNL_1oHv^u7rJu z;io!|_Ad1@nDDw3qD}wR;F=y)iW?O*g0apQ8t;=feopEFKgFxnCv*!bux5!=tWUefGBanH< z?43Zy=GiX+Sy##43uL^M{T`5hZT3+h?*U|g3%m;WN8r^!mH(5#w}I^T&;AFLNDQ^a50gk zi#6zK6F1h^RCdfxSgN1pD`|MiESpAOWY9{7!x#<8Zr`jKfBpl*0lS7Jrd*CG@2E5) zoFHDx&%KH+6W+H-6Sj15Cfwn3Sx(HF@Cn4Mf%g(aVG8u#JGql&!cx~o5ffG#nZ*)d zi~1}kxB+6U4RicZe`dqL>BV;6{Z~RfBVIW<#)xGCWt71SD%S&;u$-XGLg7eMU1dEA zC=;#(%7mu_Wx_LnGGWX=y978JxEeSYI1HQz{1C7TC=)&gcsX!B@Mhow;O)SLz^?<- z!25wUz#jr@fj{SC zkZJ?MGt~i9J@D+tq;Ubxq!qI!t(Y}wi<3!P+=j~S1(`mN?Gv#hCl_P^UVo5r92BP`UnXJVLbIcDoO z(-S;X4Or;hA}!R?#aXBtS$lWe8`(+JUXq1=65i4AwbDrI_XXZkOe4Fk23lk*D+@J! zE}(+SrAAicZ)u@|G+AXm4k!ziM$1B_(X!Akpe%G5P>t+zpc>iZfofzw08}G;0#Fuu zB2Zo{1N;>5WZ^_5hy%t_8|M*8`sg_5%M5JO!wZ&#Az7fPKK7 zc#aLgJ%Ag5lJjZ6aolGF>?}|*Yk`Vc3$!>ryT$$gx4@%|u|VvJj&BJD;yS*sbcc<} zG^Ue1Gj)wAhE+W-)axDhN=2?gR&P1h2wf9wUes2TxS&Xbvvh?F&feX2gDa=9w$uT&G?i|$Gy_*^HB>q zn$f9mgL^oZBsK$CJH(8#GQDB3;+Y;+F?DFlgQLw}V;#FO#^_eu=u@W#+XGE3U7VdZ z!OxB_PxNCSC3YM2IKk{vwz0Q;oGdds4sC}z$znf2n&>;XN;4Kb9j;XCK}1Z*d*@c; zQ1iB|8H|oFvEm)&kk>i}-?@dOon5hOmC|r8s7%o@=sRe;%E`K{u~sB)td%_h##-5f zl9jcxKQX%;$oM|H9>_4jbYOP|p2P2PK*?bj;I+VAfwusurR*KRa^P2iy8|Bp?g9K6 za02jY;GRG!Q}S4_usf8b1hGZ&Gq22KJ>=97W4 z;x7}oR;-w{V#Vw{k;Ogb=-#t=B4b(3ihmFDs1?^1YsID~%4iPbvNrOztmx%)#M3k2 zoZ*>9bGMwi;v!x-RzphLf3@>Tu7xy{P#Wnv>jYg+?{!xd)ecw5(DYW#@bi)q4JwtD z8KCZDX0gg1#sq@~TUVsPTDrNUjZPOO8|+s|VGTCUOf_yvGSe$aT^|{1Dvi{iaan5W zY$7HUHdEWWzPEN7?Zv80(OxV|*Tzhz1J#S=Y$9W(Gl6PUX8~oVi~@|A&I8I!tAHA3 zGLdJ@bUsjKdMxlWKsqsIe3=G*f#0~&?6-k6z=wdfz@G!_f$GIJ0Jj1gfv*6Yfd2z* z2C5NV1RM`+0cvW9W8bnx8c5?%haqg4S!z6x)QRlZUycIYVs9BpMf!_d513mye z3Ml!^0LlvPp$4oKC}yodv7JomEl%BPi^B?n+YSmXW5`SI=vp8hV7b8Pr9p6OUUk{< zRGj>|XR_Gwey6^2`79df989-5z>?^jWSlaaKqwJQqGl7wUPQ5RI$rw_v)!@^VsUOU7=HOZ0G^;+thjCxsdny(bt^1qw$(gm<88X}MZyNK%`gc;V za9ZX&B^TGfqwN=}(jyY9^lFM7?p9!`iX9TBrhckWMMQsIo zld}%|Dc#tLRGyl;4OS$F@R^GIDNq&pGoUK+382dME1)X!Cch#TvlXeBtw@VgMOxf; z8tE}POJw;D3$^1kRirol=ql1pacoMmP+Hv)Ep#+Rjt+Fr0hd&rgWQjvVxcsuPWi>p zCE8_?wW-7E!e(jq*QDX^1?3sF%O6o)D#uTNDu$|8)%iG3WmC1PI@KmxyHw0pr((7` zEl$;Gak-wyCFx38OPtu0o$y|Wu2U-e=sKm+s43co>%R}@p9zIG*XZozjM@6JU3+Wt zwkRq8EQQ7>Qj=}wI?yAlGF=T+x#%Pqk^RCKnPOICirLLI7WWYJ7Uzk~dzT!c?aa-4 zNf7Tu_TX-k_||bhx}`>GR8+O%k5AyA2_;=MZ7Zs(Rt*gE>FXl<7ccSjxvgC4i&r{s z0?MbI!Ue^2tP>M$oasd@bYl81UrdTwF)3#EfLPoY;b(E4m{{R|VEp!KRu*>AogG2V z`g1XwrO$=%-h76y&J`)M(Dt{e$l^3>gA-XlP?|O1MD}xEWQtjlDP}dx;-py?=R~$1 zgeJ0HG7$BW%etRbW6aS#w-bw3w29CqDOw-*kB)R}l}3st9s5eIwaT5#Q&qLPuV=(P zG2YZo=tv$(u7b-8%IhXvHxFR)6MjD@sqcWaZc8yMDaGvheHQms=q)ZuQV)~LO6n?N z+b5~B$tk)h6qM9&4^i0_3VAg1^4hk^E_^nByj>hpLXvL{1)0>e#ezXU9e^LterQ z(E-Ql+^CM!h|;J-v4-pOeqH4aI96}L{_P~L@t(nKNa;fC79zVe25X z1IGh@0#wWKC~z9^F`#IF22?p82TIMQq1K%%X6sHd>!2)74$9)3JIBK$j;zhX*vNIK zj(|>vk6)Nl-PyaUJ6p5wuI}O*i(uV-rm$<;hN=q>xZ>(gE-6@duTU5I{TJYFz`p`D zm-aWH>h3k5>JDC}?*0x`-F?-sJH>3>DQ4@=;#7AQ=ha=rMd{}Dxu_4pIyx4Uo6w`^ zF?KzIeT;vOQs#d&S9H;tq> z8z45*cv|C3db8nBZU-B$Xd9_^Df%v#(x_dU%yn_piBwhDPx_7gE|(^72H@e3!=!+f zTwYKM8#)n#&7OPkkCU=0`lW(nvjz;(938g64VZoV0^EkjRB#A0*_exi5jI z9i4#kl)!@%W`97yD#!CcnaT@5S^SGYmF*>cg#8_g+=Dq9u(Tu$lylT0Hg{p)ODUj7>FUR~@)`f$%J z)+c5uG!Mm7+2D=lehSixOED`h#jH=XxQ9q$amFW(Gav4FmmPrMMw|oX6UyBJxc1mc z^EE5+aJ3ONJ7fHnbl&91Z5G#Bi`^TZ+XKE=V3yb0D^v2ySh%^@Lo`-eRCY|$1dWc~ zkW6yl7+U)F#r1DoSi{$_v^swg6aV#ZKAbj%U;*G^5eMEd(SiX!Oq2d>mB5GXLoB+E zGuyvgMa&-G!Yr5TfwmC)By8iAZBOnPSwN)_ZALBw7hT&?8relT@QP?N66lKtH7uBi z^06V-$GwkNHPpmtm$zeKMr{43rgB5DM?4lll}FxBQqpKZK`YlP<5Hm9#xmd(AfLU? z%I^7Gb+!S>XQ9msdYh$|7$dN|G_nx%L^JW3Gany11S59p0unqY5+Cvyd%<2 z2)LvT-GirQ%p6c=W3f$NXs{)zpUmY2<*R;!d`*`_-h@r7EVlsFAb%F9p4aWbX}~*x z^3-<%=L0_ntOb4^sPcaSD4%ebUu%llT2stU4_Tc2oyB>z7V!zZiMgFV;XGKkMLM@Z zCI3TlK0z<~=-Vy1b^c)8l7|bywjksg;uO75U*l)K$P}|8Q_P<8XmM&fEY9>b^f}WJ zCmX!+#L~C5u?}@NTm9H&rwy@Yi>}>@SEiT2mIMytpjT12rc9{wrP;^xGyrrtjH9z zj>F>QI4sUMj-m!Bb}K#`aOE(xi;F{hOl!$T-lYLQ0gmsJn$5e0iam{LQ?*HdY2XW` zB74KVlWr%cP{UwYUP-vHcEY7}g6DtmA)k4#Zzh)OdY6e2D*LCHauJX7uC&ONu}AMWmP& zkz&??SezV)#re(XNJlbAdvkAXn@#fOt!(#hi(Z8B%_L|5`F5iH@DJChYso9#wyWun zzUhCuw^GJ)n>QTjdNTK;cN2*1OU!O#KaiMR!cpg|aHFf&2Bm+V&yL#5mE5a|RH)KO zM|JPA1bZ3kG2gW_U%MK4;#GUC{3h4?f?MME@np+hP?=;)vVlH_UYC&WVp!9MAPzubDJF9u9y?{)QrS=A13Y-YkGrte0e6IBsNinNPirJ0h z7Wb5+%S|rwmFDELJ+?)W68-J==+W#%J-Usjiywnu%X22_(G}c}u4*fd^hoz^lCv`* zZ&iES)yN;zcxn`UDJk@sMbnH1^+;vXkSC}|hg07w=TxBd=t!XSXgW~SEi-`9qnSYI z(JbH)a5hkDJad5O0gndC=g$S|ndbqO&*yzTQq1a+VpfkV?kPu?>-1SQX*z)^vB&@-S3SYO+KA7?jHU6QIicC{Qwe(wC`XR;G&CFS}XX zR!8S-GuP!AHpkSMInlCX7L7LBKuBwMpaYr1d^6Z{VbW6*nUZs~4m1s?@^~TYU;DTb z-RGq=(zhC}OQQZ2kt1t9FEh|@gdJoKy$iu{OyX*m@{->S%9Oe=`o0mUGB7GIGSx(@ z?OP~jWvZCn_hoTkh2G+FeT#FyH~J-&OETIOcrR(oi(@KEyp6jIaEniBCSt%*DllknJ#oYb4E&|;_brq#)xB*s;ceX&l?q$^377%phDdZN@e*b zQ02J?D7}5c7nNdGREpWos>P|ZYH>MHt-T~Ys*tQy6-ly+Qz4~M`J|jT-4QTAdV8PpFD4BP+ z+r4gLZUiQHa}OLq<~>;8UfgpL%wHm!2p1Y3TMIZq| z1|P71q=Gvk^O*6TyL;`gpuTS7jq{B%OTjNNu`*&GH8Hul3r$SDlZ#AD9_C^bn@H>u z6Vu4;QWL8n_AwKiOzbifJCxYvCN`DW$4#t~*e6VE7O|U642NRA9x{emJp28XF{w1M zTg~0{>VXX#r}eJ6`=lL8WVWTL^xB^8;c1nX@X1=tv^9f0tA{zgia?@NX~{no4TWiI zdRA>(H@Q93&rr+Dx{{@W9CkuTSi6rxzC$B zclx}^5zLHAUdRs8%$q%v1=}!YmMSa9XI|xuS#=T2?71tVn0YTnFh@_Xgh`Ok(K9wj zF*7fXVCEkE)hK3en${}7XL@Djg;C7($D^1T&qpxR=aexS6y!7g=xZaG8S}PAFf%I; zrF9ObnmK)b1T$;)$x+Ol*CLqNbLZj^f_!Gr%SJGBDz6G+X3w56{pfomm>DyliDKrx z9l^|;U4aeRyrvD)JWbxvkE)u@Q>7&x$fcEEv!AYr6pw)*yFQX9v^k1N8+O{WtdNS9-lo7%|!kyeE0e5ugHI{3EU|yd5!;G zdG^TTqhaVs4BF zdOuQL6^3TtKwbyr<%KvR&lRMxc}+4jQ}v&#`=hNWd{pNTGBgi38bE4NATP^jvhJ41 zSt#}N@zeh&pU=UD=289UQkWdzv!+)Vd7jb|qm9INdG)g2=JT0iXrAQ1ryGal@j0{z zK8NM;IW&)tM$IFY=ZHK$hv)Gz5+32Xjx>Cp;=lJ?Q}g&p!XuUEC_@wUb$sp{oYi?N zXLY7V;-luFwB&LAd*!Lj<1?cOJ~ItX@VRE>@tIWwpV@{cSnsp)_{=GS&(Ve^_*`@H z_{=SW4?}k36D-f%JU$HPN0jq1dF83f<1@bqKE@M<>T7-;p9Mwm(bmfFb1lf@lP-c! zwV?^hIi1I+rU*W@h9;;#HFfxD$S^_B=ivhDJ53@N&b; zpUUT>L28&!M;@OpLnBL6*lY5|=j8KQ%AL{@ZF2SG)0M|(nW32lje4aAT(SST`Fxfe z8f~=j_$VlteTqV>b>z5IxOFqc|(Ok!U=u(_tR6gqrO_0ypJU;6U%{h+G zV<)^FQ(x+Em6ingtk2_filNa+MB$X%H$R(So>RFK9y^?p$EVNGXe5FdQ=h&0t0;K% zxi%P@pg-)(0~i9gY~i1HaQG(kVspT`Gvq0AHcuhh>@o3w8}pVJJ@qx|>u zd1D@*K|_kLElCjUJ? zr|0q6Y-p0}Ym1=?wx^r(_?&5I)M||3x@gotPtGrow7s-Mis6;#%sf7485)mI-<>aF zDA9WVP#&MN^7x!>Xp*1n!-i%n|Gn~@oyR9@Xf(=D_~)p5dh*L7>kGF#**rcUF*GQ# zsjoA?e*dTQ`Ot*GCupZ1$>Sr>Q(BT-p7RaOQ~dXy>%2TZ7Z{pk`FzySYz^?aAdk<5 zhDI;0j3qXE%Jm2%T3;6#nrj2~eqkP;iw#Y3c`h+DTlw!j*Ts2!E-ix3$MX1Gn#bod zLnA#bBtO^nh9>x2*X8lK!O$p2J$v(gzyC~rc`#kd(-J7p4S9TS zG&FiT@wvX{EgWQ2e_$Qqb7LN#n+(lf{8#80d;6q(J~wlxv}9bMJU8X>xy8^lhza4k zx@EiM^Z6`y!gHRtuoZ$4qmW`97x3 zVbVV4c!#Objwa<}##_=<*2he7m|J{I zjl=BbV|ew@gd2PeJDp8f;bVU3FlYLhQMLl0^Ge7urzTwJV^%rL6+Y%#hq>0rJmxST z@iDJD%vv9_i&K|F!PuLJILs^`lXjRHKITM+Y49<_4zmc1eV}U`CifISc9`>gnyq;> z|8$sgpXU9}RBrS!O%8Lsk2%+2mid_b9p(fd^QOa`*|Nm?!cuQ+Ks#cJTRZ0J9Zj4)Y3__L3l`Znu;~H5i3S zKA&$n%w!+)92l*e=Tc1^&yhDFOg|Wfz5P^Qc9^q$%qtFasgF6rYl?kLLmuXMhuH_3 z($ut}&Hk2-&yycLG?Om}P4WUuE}Z339cWSsf3w5v?_-_>BefsnW2U<%-D0MhtR`!) zn)(7)X~|?o3IF})t8TNac=~mfOJ!(M!Bk)5Za9@)BU7q-Tq;8oO7*3@RQviphu^tW zh9;Ei%O=%S{!0$8KKDO&09+`ii>fCzGzK@IPAkD;rmY$pvcEa^kw|Gto%b^Ye@dzf zFowq5c?ArU8v)E-6YSpZ9L>>SB)J@B85kKt4zmG_LJo5wm{}pr&0r>mF!zH&4Fjou z1%|%>=5PF*8^Y|kr`|yf(i{RN?PG$whQ12c&g2kD%^G{|saC%FRYNKT(Tqw3Q+*AL zUH{Vkf2};BJC|zMr4mgz)z?ibuh;#BH?HZ+rMktX5=}VOT_)Au{8y-b@tcU+vxHx` zRH6x|`UaTNlKqr~@Jh#vD{`qyT@geRPIWh!(vpLfgz)CdTj*SRc~!Yoq6w$^CYYQw z_8oQkA-Pnixm2PFr&7PQwB&vKSGfG&tJ-s^KI2k}CYe>RR0AgSHg9F+VlQgs#=#yG*&{VgOLs9H2exM zhlVg;0V4~}(fkZdrH={f7*oLH?kYId_|@a5csa3BK`I5&gv)#%7`r<{_isJ;J4PzrGiE(pHyBG~ra=0aIFXkdhFdx%{!7Twdq9RH6x|`YxDU zUT^R7^|N!S?sKU`6HfJjN#)i1mR%o2Nj=T{yGtdSaH{W_R2BSJ_})|3{5_Xys#87D zgi}2TCZ{cXZ&~_eF4bC>N;KhAs1&K(?bK0UPCt-Kb)!RzCYiM^h4EThf zyHuhHr}}|OCBLlj=}%wr>0Dl=@3&adgj4+xjNPdsiq?CM4tSDzE|qAkT>BkHwD76z z=$gEu7HvwU9_F$wh--3%bm1JA%Fr0x9biTi%VC}dBTLC)cG$j*=a7-0WguB<}meOWT!dIDPU%WFqeaw z8^YWTW_}3sdoXDqBL}^3;mq{P>J{zPE1J{Crxx}M4h{^a>pMDX+v@7m>Emj+Ra3Wo zR#(r^P`&Q846LgiSkseER~`@f!pag&?VVuia? z*VfvVscmcR?CMxr+hxu!&eW^~)4npF4mQn=t%j&GbQkW;)h*4P_1tS+9KP4uW)g(x zwJSfekF8zW(NW(TL*81yA_m*uQNJw2q<%?z*UJ2o)Ku4H+N(RN zm(+LFcZ3pjb~RH-Jx@Sn4f+B{+UxneXzhUF>mK<$OeWq2s{1>+JZ=nEGLRaov6X=W-!DF9J zi*I0yzhmKVfj9KI;#m6JmVW-n}nTG=1nbifvA% zw=0THWZoNzrLI>cx_2@P6Ub`OO>-JMI*9cLjJBn%vn&1%DqG)J-I8hSsIF^{n#=Nz zw${eXa^6Dnxdrq&q|Sj#iPK%DCjr&))D`+EA<4X?M4Y|u>sV+pIEud)R+ zHcag+>g^&AscAm@4;xCV|bch!i<13_poy zgn{Y~+2DxOo<-$sW8@^kbERU-?hM4dqZ3D9{b0z1!ns<4z*{>BT>RH};%I!$3h2m| zw0)D$sBnYI%4?x%eV-$TvES*4Alti|hgy33d%Cu4q{UuYooQV@t9_tvOHJRv>QgOJ z#v`&WJlhCl_B#z{c5mF+Gib~?QkP<7TbtY$9Vj3zj1EWDt^jO?`FEGV2Xg z?f%z|l2RNZaY1Rv<&|$MY3TVY=qiXQVT&Dv$hb z=f>{UBscDMs9?g*>J?O==i)1yB4&W$9I05)9dmESKi~ zp`O9vZOgnU#=gLZ5~RYgt*APdpchV06p3}jnZ`sSZ#W+&N^W5S4a}OJo{gE+0~@zQ z9?9xiw6<%Oq4W$Y5mz`rl(xNQ*-TZxd9cdxZF*24KW4{`5t?WV61knnBCZhfP+lvt zo$1pVPKQ~&X|Q*AOJ?=@p4FUFIxui*Z%=wwDwE07Zr@hzU@!HMbN<+xR_gZ5-#S3KMxmk&rZd~+_1B8;TypTx$vFHoLu;3cv>!e zZ(*i3ovEy8PS-WHwAR(OwWK2_f-IcfJG5}NW*-+$uC7jNa@3@#PcN!zYOHH*ZuV0! z6;Oz}FRBc3^OIjB-*2N{u&25-zyx_yPHZE>xY;0^x2Tmy|^ze()^^Fa+ z)l1sj<1%qw{7|`S+S5&oni?DGnqnU()UyvKY)jWIsjgq#z9=!FI`rXmi_(i*Y8z^r zYMSE8=q3(alJF#3Sf3*EY~h>vQ*Gh|El639j zx|+qUElwCA@`5^1pRR3gZf{u6;X)|zE0HErP0^LwM{in#S0{}XT0Q+)u-E9 z+FKeLTN|z5^O6Op$oym|NK0K^eM4(qp=7z~u~0?VR;Ozk8f%+s7sZKCPZyXb3#F`S zOV_q6Zfj|7XpJdp==hj$x<%>M#-{3q_6Dc^;U{zl%Y>8Qj;d?wmbBHi#AFp#MyDA| z(rvXhtu+nJaVY}RTH$+}VUMY?iRdTgx=^O`6lt<1_x3Xp(%sj4 zX3yZ{bb6-NDOMa`o!E9IrwKM<1t}w~SwTA2tQEeWYu}P-)X*hUxE3#&NKIcdh1$S^ z6uHK*AW5iIEJzh>9t#o$eO^JLkn<}@74?Dz33KkS5XnwQ&6r&g4AbY#oHcuP<(wJQ zgV>4+j%}GUXAW@ooTI1D)xDE*xycE91t+&|Gn3 zGCyr#ddSfbH6gA(RKBO7yK7o9Kb7wVXiAQU1#};ok<9Nf=)U1-lKAO)e+S(QGn4rp4U@fRm84p^ z6!bstdEWrP0-6?%CRQk99|v>qY)4}V`4`7;G;BT#-5qn1`Dy3ZZyZe$zh}7lCUj47 zRI);$@}0)LF>^~&XK*R_ek0;1b^9~?`}I6ar>*TdKa}&k(!c3dC8;G`3i==Syei*v zXlCl=b3&o=ZQx!HG{10kN#*+&G&7F1{F40SP0)Pb(fRx$eo}tp6=+HpBtM7z+Ro5C z>*xwShvZVeuq1UPmxBJs$z?0}qoLV5ZRwKuHAB4;LACpS2PK!v!S`Y&eDbTD%ZZTH4R5plG=w$!7pD- zz0HHB&C!WEPR_T2UkS~>1N`Fj`B>=oX(∓8O7OjXcLhZl4a#WsR0D={a74rnD)- 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

h2go;-XABs?;)N@1)VF&XvCMKf@414gP}V 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ƹKij|1>Z0td+X0D8N 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⁣CHr@`tOzd2`Ry}j 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

#SGb94 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 OzmnF({C9 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 x}bDGe&`}?U$d}wtuGtS0;7S1_SPKRpy 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
65KH%FBY|GL@;uTGP~v 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
$l74NI|e*$ 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�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 z zthLC!T@`1EMLKj-NFA&5nMS^`oHgAQ=Ua=+>YDi*mkS#dU4WRylq+Zd}pP;q+M za^)VRkUkdKqmg)v(UhR zy5(GcvqJh>0psGjr?IfwnHP0EoVr&+Ulrh{9I^+LY9UM5}%=v1Z&T*kqYTy zbxw{_$PE^mG+H4SS!C!Kh2*rzr?)8N9jpA&tqOU@ay}ockR;35GfpAt7WrK`c8!`w8-L*74m`A`R)^iOtwh1&lHl|+I;$Rh0L@%Z|_n_FS}Kxy$X5D za>jh6kQG*^)i(+`VUY#<6w=ym^~1Lc>12^=-z(%FyVb%U71G6WMjlYe5R1HgP$7vH znR`ef)k4Petqv>XRg0X_$XtsI_(gH@TI3gvTx5~oe^s19*1`vmD5R)GDj!wI6&86- zBWJ8mx8D@Uvz#9_Qp%QM(B5@}bXN*PCH8Rm6 zA8F*YMe3hYTit8xeW6B1TTYSFigT+)?$OBa7RmRA;^eh9|N5swp0mgue<`GcMK1YU zA(vU?GcUx@1dH?uDP*}tD&|l~0gIHUSAbwzW05B`QpzGj>G3H{XD!k$mqM0>O#D>N zt&qPgrwD!M8`B>a`CB6;?N+1mDo$Bj%U$9X@`B}5$fuAJ7Ri%eA;m3nP$Q)+((7Wy zDQ}gl6;#NT7Rf`8=wVuCxB5~er7W_JUT=@-cF&YF{t|_(w8%3WIc1TG^zu|p4~NWF zPif?Y$KbpdiX7h%7}>S<+>OLB!l7 zP1|%yLYJ8ih?lgzZNs!lNz<7rih}$01Qo?6E<8ki?)v^dcLjVtP#-R+C@N2J0T)!z z=YsqHx14+KIk`*HC6i<(`Aj?M?|y&3^EFMp5_8xwOnJ1V+#o22 zO3D^II0ByoB;~~8m@*lz+t+9l+;>lJdDz znerJ)xgQUq!sil6X@4?P#w6wKPhrYslJcylG39JYxk6Cxk(6W4V9cl6?0mgRP`)ZL zho8xq(Uze0wK{;Gf&J8o>^OACR2U8A}ly`M8 z<)f1F+-{}}NXpaCVak^!W&kAl)IDgU*TFEF)FEhoElnZw;t z7hJ)VizKD{N~U~UQl4}bQ@$rDQ9v>jdSClJZfYU@o>w$`1v`p&aqAoC}8%1qyy1 zlw5hBJPIg(mXvo2j6?acp!`l^9`oildcW5-&>!Qn*aj5*IFy@!f|4D|?|_0<-PLAu zoqj!YIh1KZ2}{Y>1La)ca?13tK#m3}oNY@Z&%^T%)wz z&=xvhqx1n~vqpJ6P_TJ&P?mv$PUTR3 z0+e@Xlnda`4{DT~f$~RZ6SO=r<3~Efbw{a za{Rm7LMLdHS)dd&%56Z2X_Tk`dt2xNjdBf8F3~7|018H%Xq)Y;Pk#@nr%`5sg3-po zyhC7K-DY#$B`B|ul%wCva;}vWQ&6s!lz$VH>m=m?pkP`*4%w2Y-^X$s%1?lDCSX=% z-7(+K7>DvBprD-RNzA1mV2nfgGf=ReJ|NTjBo?todBKO;LY+XlO3FFx!;En#ZwJb8 z64O4E>evi_9ZM7}SEQT+e_>s|imVS`LY*IBIXAW0IsL4lyj7<4(*I}+eFm_&+I0ZR z*@~RMAPP#x&+z|aIiG5?<$PRFPLt92g&$?iVF%clPy8p_=MqV|`D2W6D0h6EF;ACr z{{9KZIF#;BG35(V&W%99co>nC-cK{ep*#c>jOxD&+4{T_tF1=4 z^YYKLhL4hIUGW9RIFvoNwS|rV$&Zwnhi+$#L&<-M_1FFZwZ6G=s$R3lKlsL5dDWK@FnzwyEyd^ zN^g1Xw^_17dCc8R`AC~>=PSRe#SVItAD|i+ohcQe#w-iq{M#J7Fq;-aGuuj`L`3r_W8H|noFlmavky8 zwh%PCA)L7-uFfsM@#sxRvAM4LeH(bCioxo1IZj6-=c zWE15)R?6A>7{)l1%;AiAyp;0|py0=$TzG`gN9x@3*iE4#U``~89e=Q&a3cJ0{5j)D zp|j*V;c-k^l$869+7#La9C=#~dH9V)vE{t~*iF z0gBDl56vRBj1C6NJx3H9bJU5fk0be)PvV?9l$%dx%x;9 zX2x{M)X&?pDfA+c)nTWO%?`{xbL@Cz=qwuCwC_Rc?`U+>j$h&PyI)@W&TqFpg8vAe zbPh`HUiq_=Gm>iwxUjV%4Ezr}(u5qQsHy+iWet9R z0djo;xX`MEK|<)4LJm_@Ie&5G;(w$*Pdt}%K^QF;e|4qKZ)(7_qQHfz69x&PMInbN zYU+P;rGCFm{RY8B7%la`ySRQRxjrwr2%~ZR!^L%*IV>)o%a)td*;QjK@feOd>-eWFhnT;1wTwtQ$Ns^i;_(JlfZ?! zAPn(8B;+tfmGcN!F3ytroc>HsoiHTl5}^DXVy{z|Zw1Qf@XVo{dj6&mb{ZW@2`DFN znA?B?gG~i<^s_cm56$741(yd{>3>37FgE`Uw zE)8P>1wRhv13>weMmajVDHPW9xe_Q})G%kqHihOi$`65ZlSX-R9OP(}JW#IGC|?Ci zMpD!ge5B@482uvB6VC2oYY+ywp;ZJ5ewd=lImqP+uat7$Cb$Tr`SZapu9r!!I|UbE zG_FUvxLzl@9+zMZ38Qfx;^O)j$#t>dB8wJwN`*gL#f{n6zl^yl#dK^L~KlAvvELVL41ub9#(R4!^Gi*=`?YIfNlOe;#8wOi|?=>&gYca}(Ll*v4Fh z(QDE zMU``+OAf#92HE~?iscZ7+8s*|^SRV&-=j%Cjrl_eu-DPJ(<}`5~+nF$! zc9MU@kF$vIN$bK|>N z4q-^nY5&f0n4-$*AUT%+3ciGH{o_j?I#JsBJ;3!$pb`fD4~4FM&!!MYN{4dgd)YS} zO8$ME7E{!;Iw>u+7UX4GJKoQ=fH0KSsUKp=4&^r=VefS)pZ+MP#S}HIE=tR;1y9@h zss|@zS}*xH%OMP2sVqQ`FSET{&HrslWLa&M9Fi z^(+62B|DVa+gL+~lKB#+#S}HI&90nYB-7e*2g@N0rS^qz~Q`FSAxN_PdQ-8$wIH!c6)PD^W?4>xAZ-1XPbSSsp!)Y<)tjVP%VufGlP+I-= zpW6TL`Cs--!qAi3fN~Oib13%$8>m_z(@AM~P~4%Zt67h-g- z^N0(}06#aK_PKF~>x+U5F*?^XiOcSxz3wl!e%9gohu}ht&UHR~L+q zm#u*qo$Fb|bt*H3?z#FamcunAxDcarMTpDR@NdWe$MYSoHw!Mr=v)SI*)}}v-V3jC zxb75Oh|#&C#D%LW`04mmXq&@zz>hdzh|#%X8rLx^A3q0*&gO~;F2v|u{lsP0l=uDqIwfBv!G#!| zD@k0ohVh?$OiAk|!G#!|Yk;_(DDw5d$j>Gm4et_Mh|#$QiR(1M_3(}xKkjfH_7lz_ zVsx${;<8Km>c3CIbewICxZpyJ&NWP2PZDVz|6g}4I9$5~7h-g-6mdO4aQ%DFNgs8% zJ|wshqjRN+%hquA{-cx#@Dss>7@aFaT(%9r@yq|Y#!2hwpK=ZnqjOzAT(^2Jy6cjD4zgISfktxlx|5;qwxr(ZpZMe{&V(DJ0(~L051F> zM%Q_ixNOh-)(<}XPlxN|`F2v~enIJCQyMdnvPq_vRY;!&D=ll&ZI@b>3 zvfH?aW_~;5a2@>%=0c3lbs=$W;iN*p|K`kR9IgSug&3XdBH}_{$4~bCPg7#cKLrPyi~ikb z`5G2nh|#$&C9V#^bylqFHizq|-!ea9bgrGmwJ5lT-tci~Anddz1s7s;u6g2uP7i%D zfBE88hpXdv%#RqIYk|1t1lPd_k3(&rtEUrIP>W&Xfih|#&0hzq)R^tu1ctDrD#%RT0g{0%WW zSBbc`39grY=|xvNTq(hY7@cdGxc&kwyZHG~|EaSM*Aai>v=F0n?IJEauHLleqyOh{ z{g2>6jLx;2xFA%~=Z^PGzrf+z{4l457@cbmae+J1CpG`P2OX|I2rk6vTr0$Ny5O3; z=BI-W*Y$tqv=F0nT~1uj5nMk!;q}lYGByvzb6SYexvnHGXj);6jYf^+Mt@L|Xs&f6kLeWxn4qCj}=^f$36dHC#{t>E=I)ITioMy{{@n@xgNEN(?X1%*2{_O2*Gv5L8rwWu1f_M zVsx%o5Et&cwo`Dv-7dHgqjSBIxS;VPu1g;Gw@*73hyUPX z+vVqi3o%SP;6To)gF0HHsH1?ZNiw#7&c~K~lHfv&tq-HFA+CcR7Wig!g#{O4bgtKG zY3=&Y`;-~He!+zpo$Ga4TFaNmmYuXF1Q%j-uGec^cmCkmpF3QOf(tP^*R>kgm3Msa zMu+R=f(tP^*Bgk-w&69=dz6TDgWy7p&h7?0kLyyXLUN^|0VVjL!9Djq9*?esav=I`|RnnTXN3 zuGhF;e%_VfT((CYE4UD&bG?PQur}f6)7Q+xgoMp?y5K^L&h=J}>z7Ao-|TRu1s7s~ zD?T#TJ`smV3^y|nS3i6^693dby95_u=*e4vf|heAHv9>eImAl4Iur{nqD)Lgc>WR<+0Mi(Y?vrAr2V#~St zQZhegEiBGwOI8pjzFaEI%y=SFh2lb{SSS^|lE^IQr+TuxJ=GpvSt?lzeos@&3zJsS z?`dz*y3F@kZjUuRWaVc|a|rQNI=(z<1)B{K!5WUvWf!fn?Bu-VmGf9`wwU$J-FQBW z#p0KROcr>Th6~fyyqD}TYiS8vXy=)=WIzEfS;g#Bi5!DmgIuj6Y`YbF6K)0H&LOAk z2zQ>-A-{Fn-?nzkZ|stQ+bVgt+PJQ8m~dfmXq%%eY|HEF=n_)8I^Gt+RQjeZL`!s z+Mw$kslhp{0i?Udu9jU}L~2{R&UL=ACBXt)&J9H(=8&3xRr`YPsUkEkL+`^&>zw^7Y^SNnr5nahDSw;KF zg0-+v*ky@7BayHhMqV-<^qqLCOGiKlxKz!U?u zV?Eou(J>SFY^VV7YT7c4@P(N9umc780Hqw7W+FN|niv@~d!xyrM2~@)Lh%sE%-Q+E zWOm-1FHD(JBnh6OVqi%#F`O7qkL)nh<6}0Do$cLOtOcb|Bs-6+kXb~4O^J7=XjwK* z8oFb2Y$TcLEx}K*90&m^qXj9W!G)fRfo^=bOwyI51_h zFGZkH?I~C|83o=1JWCDg&r)e((D148p&>IJ8%V^Zbtx61_e95{ZghNnWF(RDfTt1@ z9@NZ8Vw)x;F`OCO;npM;?J+aak?3$@EHR=njE*HiNz9MpHsEGtA|yMd*_$gal?-}f z7}01V6Wyl5sLYtr;mPHp!sNmIrsl0II68`@rxTeiSVJ`l#)Vj3(1?~+Br=vTsj!!F z`Pq4^RLHxY%u@rUklDFJ7Lt(R=vW#ujTKVS(bS*Vsu%|9fc2(SFz0i2hIO=5oYC3o zX)`+m88u6DR^G&*!0PyLk-5uRmrB_cb8%T1xH`^BYo<`N%+<1Di|3`FZ3Cen8Vls_ z&K9SuL_=kyc9Y#gGq8tjv=dr+#_=mX+g?1`;!bmF1-!{z^fnc0t+)S^Y(Xovm`b&$#^P8F(f6H=tatkixSxZ z!8#hNQemNtIB(6A%1FiB>|8l*#azfuPeUeTD&&_S zQWpSaVwWyj2$U$3RtA`}JQCZTn=Z{cDUtGv*=d^sR_&+0i0}z%nR1VSFjJh*DrPWK zkbDPu+a7aPebO%B7DJU23lk6B4WQX6NP{Lq(ghc{^*cm2_c}{p+ysA8iixYvC)n# zj+>$XPC`dkp-&_dsE9_5C77sm3_7)*L8sD^*zT?N1ON@$(YgXQi>ohySlg+~Is@t> zHG(o-?GAM6LDjGWC?GL+u4casFGIG#`!@W(d`hf$TH!LZR7$ZPg3Y1@vkN)9b5Vhd zMh05*U4a2zM{B^Vz%RI)<1#K9hA8cE*<+P`*!fB7a0Iv4f3#9pm?g{K9Fd%}S za%?CaALPm=hEX_D8cL6jc|U;;bfPahWcH0jdy?gy_w6I;RG+z>no=Pxj>9dKU!jGH zgdL=8ohW8-Bk%E)tR3m_ctU*BmbD0jz{M5A0|5h12#U}x2mh0g4H#o?18=9ExvEf- zyYVE}i>?X*KgM1^)-ZBor;^_d$B4UhG5>_qCb+ZqLXET61lvTH6rCz;a195#YtFs$p(PzI3%*Ix(RZz zBrJIT%kHE0W_MaJ`k#bi;RnKuvK&#x!g7iG?KTLwwPIuIdANp1ES88w6~D+9t*lHC zWKk%A9(s-@i(F5pz};YQS@ggy1t;b72WMe9;?Y7&ZoO)MXl^CPxeoK``F#IiCd6_+ij zze+{+#?8!UXASu%vAr9=o4rHPKA6ox=fEC-3W7SVgQyo2hslh5s*qcXxrm6xPO69tJhyBskSWHCtrlQ>MW zU=s+K3l4egO_ za0pQv-3e5Yjtq2u6)}r2n{GlhpW12IPh!|ss{EJ@E%G`@+3d3OkdCTrGl2_TI=6;` zv_#HSs|P@ACl7!`I)q5ui)A#i>0*5X$K*5vY}2Wq;M7OTxoqk*5VxjECllI5YYGO{ z0ADgHL18ukX1SnmAd%GE*|SV!O|wsxB9^_vqhrxAXvrwv@){4U$w(41a&&Tt1%(6nv0mx#?C zYjSxO)=ig|va=Si6Jx3|b9;w*NvDHlUWE&xau!GRDH^` zXeRGmpn@V7rV)b~MK)Za5f8B2oHS{s8l0bmDo>%l!DBERbjkO`AsCimHwAp{u`sT! zgv`a9_8pA29Tx@Y0sPTV%Leve+ZSOK3pn6G4@{TR_xOBn5oT*jwDdxh9$3@O=BKP) z*iePR4#Q7hF*hB9YNG8@u$PNFyq=DWrxX#r0MG>iNNDjcS2i5=+t@}ilCAP>0`!y^xUKne~jL5khau~}(E?6${IYK`NBl-NPDQve8XfAr*q5J)VLDBJHslMr1>+Myj`}bWy!JH8598 z=mT&!VALvMlpLk*Ikj1;G*?ekbeAzCz_z>GY@VGHcaN~MbOy4=2Lo#kj9R4ORXL&| zQ9Lvfj1%jdvgUBUPUJVvJ7IawrB%o1eCNtUqHbJF`*y$Jg?{$K73?&@Djhr0Z!w` zLVG6AEU>8^_9L4#oxfP14Hiot&R0}bkkg!#wg|YJiq~cc~Od&n{EnEpW0*)N=|kO%tYxdj~ZtIUKt3!V#y3 z*{*GJ0hvv}miwA!)iZ4v^w|^lwM|_%I_CIX7Dg&K(*kQrG%MF4m996D*GVn2X= z>nn_00cBmb45xKUg#cMRx9cn@R3lrd;#DRhX7xuR?e))OERl@HE(q*HMH)m=+}rN2 zDa~Nv+5@@`_-G@T7S?5|a8AX6Fs5N1c3LaeWsQ`HYU++yk^%M2h3p=4a(QYed=*m} z^)C)Q8$gFz(7+9;A+BSPhFIgOu{f_K;_jD zdXyWKe^+^|Mh!c3nSo|ojl^1Hj1CBGgu$wH!+K|!)5v;_*D5t*Ki4lc!$5K5g*PXi)1# z&$_zBZmKHFQx+sfrDg-=G2STXEVn5J2 zWvhn4IjhxVRyc^}r!`Y;ZO*F{a*Z^D{^q!u%FT;aW)mk_sAk$Vjmix>m|Sad@1I$M z`%x;iL5`pMS8=s|+wMjSW_Ds#gosWEA>&=_VrHgj?P^-(hgaZMAZ&IhI@ZDL+NeWm zrdM05Xd4nNDbyh&_P#3KH7GW+)=LwbQ#0W@G`LxWcGT8a5g2}p{kQeeqr&dq;g$Lt zi2@Id==4p{V!RPsUYWD9)Afrj;Ml9JhBPun@2k7!t8V)+f|y`)w0F2ZA#n``=Z1(U zM3uej^{H*Jc4AKr)T>ni6T&`u$o@um_nb+9x@8T=_qEL$ZNjOW@52dj+i$T~BD;S} zaDyS-lvSw%D0+5ILDe%i_FN40tJa^JVQLEMSTbvB2!>be6@k6qy`(@ugI2SyYM>*K z8Z@1@UU$$YJKW=@bvPPHhUppHJ80L!bq|H=tdBmr*%)PNGhkV-Zs6^FND9}xf>vxc zyj>)}*_gQPtVz_q5#I-lv=_Pqf$KZX<4POjo_5zZc-5;ptg^A)6Wq(`wJzBlwy;Ad z4qLUs_T=(Pz*>PeiCo=$BSh&n4NJ+s)ODzZO1%Fa7W?M$o?!o+tS!U5zE;)Dtk^3B z&Qu#suma;Pwl$Iucl6jDr<^$WZb-^{8+dV=(HzfD%~`P7X4;&zW^=e=SQA?*d4U7Q zBE`LttG!b`dm~T7aEqIXCaX;u(Rt>Y`kVA!*m(m>r!^^knsnQDEamuBt!!3yQAHS+ z(0CzA47FwJzsnzmS7f3HEQ+OI)K2fe0*#IzUzdNp`7i|DlPJl<^;1kPyGssebAnW!Mtq33>9 z2-*ZftxONGr|w-$*BnEupldV!5<6n;HUIsqzbPh3#7RhcJpv49_B&UjnWFguT)jC1 zubzdIIQyXu=v*hxmbL5v3oc?xX+Nt8QGB}!`2G-{I;v&sDuS*(DYf63nPzup;G)j` zFVgHSAFDKB4zJ3<8%^=OC9OiJ)k;~VLV$az>9%PzHv^{};iMxRuiD?*-Xu(q%Ai}X z0X_{kT7_X?VQ8oP;8I5D5$%soscdYomsj%g1Qx+uu2lqLLrbmtW!@7`Tm&((ZD;@L zs6jAL`os0D1bnMn%l>WHKo`-zv~k#drR4r)3Ot^}w?o3lE$8e+o#!_6dyjB?m3V2LcAHUystX5i>TJHC zyTR(LnqIPvVku?Ac|$stdtba%)ALfa#wld`;;Zs|)*3=XKF&bL<^3-4Xb3&^N(150 zeut;<0^GIjdjhfnbI>T&UTaO7$$$;h#3+HYdF%(#R9!Am^5BZ9L6_h(TE$XAZIh_Y z@z*DaHAx=y*xc}uttqYA=;5vjjan81>D)iR%TC-}i+RFDJmp5zMhJLKVrqzNdSKu? zbE5dRZ|Azqmcaw>*;P&Gwa}?p7*8fEf8zBQG}WbFPuj9~t?jMd!rC%-t;}8hWwWg^ zs8t!@Br@D!=Xa;Beno1l7;0Ax9O)tQ@S%!Y6>5g&Nz`3urYLd|=nc9BmhPq1I=)+`9@rth|S2qteN$W)!E^2yd5trEEX;3eomW<*<6u&3I1|{Fsl77xt4pb**)zGuC`HULw{SEpf$zhAauiV zTqG{>ZaKu79YRzs-eox8f+z;6x!#Q(&CO40FRktG6 zIwDpB^o~FUct2P&6T|y%34J+V zC{9~NSYuqWN(N}=bAT4MMPy1vzL?qv0*fhtvMyWB&g1aJUzXglEPCGX;>-Z>W^sVa zUaiNCN6o2qUokg5YGsR4bB3RpRk|4;N{)_!Rdu47M4EaaOIilXv+kRI8crFwAjdXK zzA$YCxLPJUVRRVKe%N?>){dr}SGS>5?9b`3Mb+o1DD|~q-8<-|6gbp~BpN|aTCss! z)=8t@hSO+kBWM&$m?`Hj`pCJBr;|CnLiMaMG+SNm=j{NI_DGlpCsnmiJf4BvDrY<( zf;hY~oYXM}h^;Uj526Wtoq?)iK=UgC8JYwGX~j-J2~WQ8vhBE;&Rb?_&dQs+vc+6> zIyYrzi?d5+iPa&2)$|v-jA0m`!8K>DgEgyB2g|`jL^TSK-G=3kZTSToyMSDF7^}8f zd;0~^@lL^5jcOeRvJB&RN4rbh@jv(daO|?SGr-KY8xr*X1~*z47$k3c8jnU{Y5G-{ zKu2VDkx-vxT3vPWxDJ&Lp`4YT!m?r(@AH{60 zv;^H5H=9x%qdpe|Dwgsr66`arqlDI5P8*Z_+6r%@(hjOu)WlH7R55Z;!j0C5hz3RX zlAsI(da00RMXHqr`y>o$roqy zOinYI75XUPZS~##Lk_wlTK~1+u)*E2rmZ7knxW;Mb~Ab51a@7-QWEtsS{E*r<~Cq+ zzUVN}(4$>{M3Y-T|!hk7TDip&Vuq*++o$11YnVp(~!KXZ~ zVwSSA?5UtweR~%DylM&4GBAEEyHpJ_pdL}B*-=;n*~fFZPnV(d`aHS_YM=F0n#~gL zO;xYFYW9uN6rgbOukM2qT(44F34B))1PsxT?0_&KI;;DN$>C5BI8;B*cdB=h?JL=n z_c-ip<)*wrd7q2~80zd-M5`IhiGGNIeGE|-?RDiwy_p=@`~Hdo-ybHP=_45tD<)A16fjb7__U?8|qFZbq5lUqIed=4}%+`TFHPXk@h4Y~UKU)MwS9Y~a7ziL{N}$X54FJ*qA6)q|^v0Ag1U&Y3hs zLCOZBA+%9qJy!dM(8<-ACapZictp3m)AYycwrRS0x~uW4jom8>cRfwbSyMZ$X`G(k z8yTifnVnXBHm8ZIDYwbixQJJ?6Sl^xXq#Q-_S>2#s&>QWhSnOV>bGZg? zM+AGL7UN=6Oq+SwOR0JXX(x`@ePo*XAf5J&Kn?4oa>ZAjdR4dfP`iTTAvXY5Zk=^o zb9|uyS5MY`iiI1()*;BXUpNH^jq6^D&?AX%gWbbnKHsG{YI}R!IoIOU(OSjAvLS9* zu3*ZUf_iHM)iAbAZl7>!be)%il@2L}k2-6EvC1(Los+J+PGljPND@J|F?QoA&SVZl zNQW2jP3_#BEl!)VwlzqUhZ4kTIAOiImuDEw0u|AYS!Qp({FN!%++Urmgi=A-goYWN zpD#?A^6pDQj7F3FFqZ|RE5A9+2Fi!M?FfdTxqPma%g*O6hZDhA-_3l3cx|#tZ0Xdj zMuqA>YBAv#0i-p2ND z6yCiNHE@=N&$GjqaX9^Mmh2NXek%i5Wyj~TOLOKF97W3(gANmeg)1ITTit?(y*IdZUtlZMqC*wm7$n#()UVcR~a z@^F-ofy%RGRcqsSy0&@&t2_}~jbPw z6VO?APva?N$(4{IV^h1Q9j)!X8Ge~oS|+>C6ja)NVq6v+jZRQJR4awn9tTUp$uBp; z&Xj)gv7@Pmn9xfA-=rz@`g8yqYf#hlM<1cK;DP?xBJ3oheq1(RGRzc>O6{m3) zB!W_%u}2&f5$f#Cilzp3$eq;~Jo(flic==q+qdB`*5g(aHHJ1*j<_vF2WgVM(&~#m zVQdsI#=wDalN5#BXxcr2)$O<9`sL9}&>M5RNn71fS#}WWDy&l+_7_%{G21LMHkWtz z)~S&inCLqM(wZbu-g`&4r0zx4WucTV_+ehbQi$ArP^Q?m_k`=eiqidJ^dR4X4faxyV*fy4->aLAlDMZlg#f4v4JsV^JSlzVH2urJY zMW|c_Fkx-N#MS{`)eB3L^$l@U2~~5!vY$Ct%Xtokt__gwlVk7R9o0;ZC|h!a0xuOWG-cA8f8DKYF}Eq z4wyA-2+xI(&?y_{@%&6SKef^j(SUpW4Y8vTtBqnK+;C*lh)3)A6*-IESSn-jf z4*U5#4E}v?0;4?;u#=p!D$fPly#*(x?ITAz)c1?VYV{E<`+0*H3xSCovEG0Tk)IL#WH{ul(kAtj@aG z-rQ`9$Yr;o2Gy%NTUaS^wJ*a<7)_$L?Ire7*6LOuJp#Wy6H@ik9m(Jtv%18~Rj(pg z`v!DH3AY$Kp;fP;Rkt4kyx3_7(QQ_@^r?8EtPktx2Cr@dfu=hQrF}Y(u4X0xx&hX( zy~$S{ysZ)E-__$qG+hcipkxoEK_;4cUav{QNo!@T!os-PP*gbEAfR$`YQ(ZHWC543 z!-VwKz29GE$7C&WXGq<(!fhm|RN3;8vLe~pAa&X{T0<-x(UN4)o#fI3^@X@bnHg25 z3>n%9Y$M zgb8_(IaFp|DYJ6_f-|AHj-i<1-)3q;91`El^U$ONn2KKODPva6GRrOm$FymLW>@{d z6WgRA9`S&!B0j@UdM3}`nz3biC9s*BG4rsl5yZLQoyw=>4q49i8C|Sq?W0wg_Unxe z_Z16`UzkoaZ%;th+4nf+DsxcPbO9PdXQj2^2Cm{_QUj^o0AoqJ*Rtwa-m*?VSXK5P zX+!*)r*pB{En6prA&^fSC#P6x1PS+~*?pt>#BjwMxo=))eQ+S)+URB9EajT|Z2)&9 z1LBCcb*f@58^7$if@VKeF>dx*@Sf|1B94HnD|r9b~q!KI>$XN4pU=N&x;#yN52z=o%w-AFcNA;(+#rq zZgu@~aHrRLCon3lay39(iv!MWataOid@Yr5|Euo?uv*U(`UYd%u;psfp!P_g4c_4Z z+%SFR+SDc{?z-(b?^H}TmI8`j{#T(1$?-Th>r##*SfJvv=w#Sk#?n2sl1cpz`4qEUN--q|TFb*txCKxqfa42L2W!B^DyK#?f|**Aq;+`BL1VNIGzN8MZ^SmLiuAVRGn*e*EV*T;n899?<2^akO9*oYa9b}_rvZr`SoQ;fzB?E9m0VeJ}Yxt z&uCqGZ`_P{U_QFK*O~M6_GSaM<8m=fbIF=oF6K&bIUBwL9FCS1cIGUjJ7k*iJ$uIH ziiO>YJyX_VDOboFTY-w?-ePva>d)q<=dEHF&}K@7`A&0b$%60J+#Ek>k3>2$(UGV* zlpGy14Dc3w$0`f=VWK{DF&_OPDDVs_e) z{1g5C&>J=3;HM_RjVYH>+HGZbnqUk#!Lww|=kk_e@HLYo>FtJ*!d=WRu~jfpI%V2a z!`7*1GSU$@)8k`9$y6fHkP;PSO&7>Z$w=4@>(G^&wyZ_E^3PD9qp*;)4c3!j1sJ~ot&1>{_nicrH?jUHYcZY8!SMtTBNh;)Fb1U`=kRFp94kdoB^Y{+>w zJdGF$f_s-{fc*Bda*cE-3%6JuAY$7iQFj&ZHj^dT)C4!bP}Nbeu(%z@c?kUN0vfo2E-YGdf*ZgjZnrDLIjesSD#GyRdo0!*|y%%d1S*A+5Z?!alPN7?ZIB0iNsU zNY!z=O2AAgj3#@w@^UpuI1`<~%W<{#U?+(GdD~acD*)C820!!OxR|}UZE`%lO4VjJ#2C+-D%`4ieX5k?t2HB8MT?$j_f3{1+P z(kmtGYplW#VNtY~#+}ssM%rVszG80L_qERII9haNIyJBvH~#wX&@G;Dk#WxfV80@Ofwz|Cbvk)$8HK8$ruD0u3Q zVaRL4n{QrpRn!(pEj{%+mZWQb6|T?Tu*R({-~G^v+JjhpZHB7@64`r+lkX{gge2VT z4|^?Yl=X>L@4eKO)4x2eHPI67TfF^97|ExJFfHaUtVYMmpwJF#XbqC{^( z>D0j;&am#jlg>ca$mv#FxA&SE%G!th))eL82Nsr>tlCtf=)O~l%Dks#v^g9bDZO`f zJ3UR}mirklJQZu@XA`bYPP(`Vo2c*_n3|=z+EC{;!Z#aI&+@XvVc-7s9xI#*g4r3! z_V`?OX^wVOWQ+7_O?AMoQ~=md39pgmmwov_pk4sVx@;NlCn^-XI!nkIttv+Y_5$^YiM&h zK&#JH72Z?g+VHE96yymv|>J7F$e{Xqy zd)c-Rd#YzYYh|>#yPCVad+S5X>?N3VfSWaI@sbqSdr48=E7G(Kzc&nDwj>t6Qt^r%G^)MX4rUH_IxIWu@|}PLtMbE)R`$%c|?JDvw+s>f<#f+Jc0j*>6S} z%`Gg>TMg7KsBQ#)QohK@2g_RS0TV;(aF2;3Z>OOR=k@6Wc&}@;ir04^-zs8igA{Lh z*EE;Mb6l;uyS}=+&xCdygoxJ2V~Esb?Np-%)K;C_h=AIvbB#14=aEFG(HM2Eyp^+8 zk9M`D1lB$(bge|0BbJyR!s9V5+pe|qkCVbYVQZh=Y#Fu`bbO}TZnrROc{C7j(J)&x z8qoJ&^N3!z*AZkL5Z@t9@IvmRjwbm%C7f^SBPR)v?^5UVE!!*{XQH70=@m@m9raRXn{7 zZ*?&@zKdCQ;l6z{2i)8~+nNAe*VrybZxGESMLSf71k;OyPLW}F(se~ zTy>z|sRPZsfttOaZYP45QhL5CHnMMK)K#7s)9N$ifmejWEUprWu=h)<(A~dfm%1yr z7{V(h4SKb#jbBGQ8xUspbE~*KC1IP}V_PcOY8}NuULbt|=AM14WgWC|S%SuD+Q~eB zXXQ-MV2O<643+55+Fz|tM;e?ngaMk0x*(P?x%<9v=8{U(bGWjP=C|y=AgIaX`5e4G zhtI;A@J3g7BPGOC=Z5_H9DkuWkZh7^5WDr_7sT7qu|9?i8%ccEdf0%sZG$Gt3F5Lp zH3x@3>eTp$W!ujIQv43%<-_=PuGu2oKTHixHV?1uPPK=l2E1K^E`5^$s^!ERH|^AN z;tkli!rhq4PVDYch~-nb&-()Xbz4fmcic?n=0!z;ip$q{!RX_T|+&#A3?oq)l|#b-rjUAX!}Bq&`eE#>!iY5-Zu&8+NpGbo~U-@VSBu$IAmomFlPJe`vobsl)u*%Q!tS3iAGXQf;2+j3uvmV?NB zJnSS&rE$lwK+Qg(9Qf@I2{T60bc zi`i*IGEelYJ8=cOCqflb+HGZbn#ICyy2*b&m$wXqH#3Z+w;M((rMxIm$gGY^1_R}!C+l;GhWD- zvfyj*8Yp;|3e5l8;mN+5+wt*8x0x)#wL^I4co`TbzG0&)9EyS89xAPZu}nR`1l`)1 z(doh>?6C6VnD9KEf!A-8TX0>HH2uRqTXDpB6?7Z#BCMKEOU_Ivd?tI8vOr30j<_9A z<(tXnr=gxMEEe)s9=6_$S$m*}rwyHT0@|NUZjXWOAb41OQ1~)+7Zz z3-jQa=Hz@~(pUd&+y+nv$}~=Rsk{LaJygsWa`?(3KSiU_#4sC}>btOUIINzh78M=# zx?-N!B~VomFE-6DFM>eWwz#K+I!^8Mat6>5oPnLd%YD})$fc0T-%PQvfNi6XKG2!k zMy;f~AW56GNC{MBH&hT$PZP$eR+;MMxYb!&fL^DXv+9LujV@bg9nw_Q#^4Hvr5UT( zlgmyObEVwW(pVvep43+?EH4I`%x<=vxDp&xYMN4|EMcHsMP}gaLNE0|Df&d(W3j$s zZra#}Vz%d87nG`W5y#=CI|XdU&Ey#FJoak8ybRM|`l{v~wMyV1lcS|#VW+h{H(i=j zTOR5Gs|}Cn2e~WyI^?M8@GB}fLYt)mhry-JK%HdMS50GBiv-jRM8ZyeQ?(YI4ysgM zVS5#PT5|A)BwAF>P4RhF*+GCr{Dxz0mT_;T10-Y$xWB$A67}QPJ2CEVBfj9trM^Oo03zXLNZHOluyg?#Vz)b*_6 zD^p^z!k!u$z)Xc9E~!54)oSpr!+NQr8U;NOo5xWrTb!EH+C8;0sW}R6B+DuS7-Ivy z&2zxpj5$z?AO!<}5qQCYD1w@nhs!tVonTrIwf^d;#-Uem*5?eYcwL$^Cu52^-msji zrkQBk#kqIR<*sfTyA!9eyE+L-348snp+8Qd&L$wRY`bv(wS83&^p+eRqF}}~1>b7=o2~pO4bAfy#qY`3g+ax(j^T}s=KE-ubx^LSjOW{Ivg%6arG8&ylS zQ#{KjCuH2NdLk+va?nw%D1hJnPT^rrh(CD&*CXW@@?D7JylZ#$6 z%4VzBdH3i(U+ijVZI!y%GhEA3hZ$6lZf>i-)xN&jmRDWg9;WVRO`HAFR+@R->)zfn zdJV59g55@5j&9E`?01gtp81$B?8XhJg=L!Q-|q~vcSaHw&$?(6&8;G_S5ayhj4Kw2 z+Ax|4obxs(m#21GxW#AxswVi#csVSqVUZ*~x`Hjk?}fU+hF2Y)wuXq;dN>;~fItUk zOuipT`b2$(>a=#B zg=>{QU6`O0?`lflHCsDr&F1pZShvi&4zqIq7y>^Ymee-22%5c9XEe94IBzvj%ODn5 z*qc1I1M%^NmVdzf!#ez9BFQVCGjs3i_^xB#^21my18=Z_ zl>=fe+is+7U5D1h+hEMrj2w(!*F57wZ(UPHJk2~Kr(~lwaId5%5tXjIpT>8PwAwo7^=E4s!nLYhtJ+N)MnJVwdhe|ohj%Y2 zH$YVCE+`dJZlY+_xK@n|sB!J*z^0W}om+bsy;bL66G^jd7-@`!0r3`AXQP-Y?f`)6 zX=hur*z1~0iP81X_Ws)XEJ=CaAl52lkIRJD)T3#nGFDgkBJB})14@(ZUZ!?y0+!6| zjTWsf;okRMuf;`~hwl(+5`XZ#KcwZ**?H%>$|ZF>>^gglP2v^yR{Z95Xe~hFHAef$ zzA}p6;@b53c6acFN#pK!^>_x9Rsqx?pad6yRss5*3eddEjO_Y!c@4bM$>Viqk$pCs zT47>ks?Q#Mcomo3GH?jO=8ROKD@Fa=#!Pg=pcky!czfo6m{-@p`UaSmO*A)2*tYgq zktb8FqYRYUFK`6d4eL`O>!X8a2I|Yg{sggG5RPQ}yD4{fXmmsta>hpVC%#}#oQm?7 zv8trhK?V;Ss%7`A1^aeh%T{K2*j=r?oN;fHl&mv3zb|LBy{r82Y&+b|oP)Qom{j>p zc%vM=PYl`)d_hK?nmu}fIyq3X$;NN|uGab*E^H(-v27h;1764pnrts-7rAU{gsuFk zRpmw~Z8bW>+aW-Ee7n)8^TtgSx14$JI>)qJQB!hXEZ7 z-YW<9#b4n2{-AL)m75ny0S8}sj(w9Qt7Mjn*&MuHJ8(E_*6}KQYOu79p}(p|w?Ta| zr9GrwaL{jC%;uCLukD10nS!aV$_3&*fNvG3y6>?W3)J0jYSmH8**xBiMXL24TBX^{ zrP+S2w(qsog6bR1o33`YcZB^W5Odl2+~wA^xlq_;!Gx13Hw8AzWFqurU_q^HPE70T zG|(iNz3#UoTKAdQFm_jAJ~13_`WZ!&Uh@vl2`?*?SMr&q>?{rk%xHc^d=HphY`Hn# zU>h(lPzD5*CdgWDzJljwHpZB8wsBQ%?(RVIEPBh)TaK*EnI>5EZ*MQwndTui5MRxPn%kDXp_7tbK~M&Wdw;)N@eWGzW;_9&&l?EHlyyY;Xa#Htpl-d<`Sk{BGJ*&#K@T0 z8%+)+dJLm$TViA+p6*E)Ml2K=P7J3C~7RPp3x5M#ke~=1_8U%#7^- zN@j;A6p~5yr3g1#4gdv`QIL>;$EiWr<5Zg1%DGbGLqlddHjs$Bl%q#I(J|O+ujhvz z#K%WQ5-D${RAR#WL1rYetz24SI5W1xQ@2>O$IL`WqQi-?#7H^Y=vWdo$E>;y9x>yF z8IJWD0|SGx`V5DZ0HQWwV~JO8%_?V2Kt2S=xk-x!ST2OBhl9zj}B)^pi|-p(^%3=YM6WBpLN6suf3ZtqDMeTlwkDjF5u zqqF$BPtwT5lZj0Ku&3QM|A7D;8%oCqA<9BarZ)mZ>CrLYhY*@UwIQ=_B-)eoXeG9f zq*Hz7_VkFWt(2j=FEcQl%w&3@{$i^b?0kL3V6v}oAUZtc0r&7d2*ep^IeIei#UZ4Wc#WEvK6nkM}zjWNW)Jp<9`2>y!VFQTO-jg_MQ53!6&3_l?|IB=2!Gi$;g zP69nhgS^G~f3?4sFouRx&*E5)i zW%?*LfFngrnKE?)$Sy=9Gm%~L2%)D`Fl0ocQ9%%gEC``2q>su|>5(3GauV1_fc7~5 zuL2dN&xxlp{mJ1>zpXNP0yzPfznVkvxBf(8IGXN@H>JNpkWCHt4i99aq&{VktWMn% zQE|G^Y*aqvdSnXvMI}XLMukL-R6fWceLCJ}45Ws7V<`yaq5#MXoHE^oWD-GQ=>aQ1 zWkgS?$f>$6BbsU|rR8{vEN>tL-&f;tqi=9vXb6g4)6&aVr9*9~ z=Y?Y_1G)(V>EXeY0k=*q^iUlDRtpAuM{jXFhN)f2!BUD6`Ae8|biHe^TB3_P< zk#kWJ=t*IPVrD^prC{6A z%eja~w}h7X8?9#CmBo1KL)_)#i7 z(4QEH4;V!YZwDwY7U5Xk6b-L>hL?eaTYJe@>46KoGW}n>nLH07|mg0keCVU z=);+I9sOp3I}VtvKj zw6V?S5WGq^X-o*WVCX~`gW}B?$`DLQkK<%x56px?sYeKwa0g~;al zLY{gH(#+7V4<+J>bh?MlOdi)nLj%ZZBGKPFJSZXwc{_yyDo_d|?{Km&Iy`KQmSD`CEkdLN=fNc5XY){QvY0LAESQ2$ zFGDK`0dez4R_4C9&q&5H$zGTdrJ5r`-6;M+3X!cT){_b8PbxwsezC9GxwQYMDo+`w zGMq$_#OcVO2UIF#2F_<1fkBza=OZ!)vCN>+7mp$5Y-&Y7r79Xol=b}1vjVSx$3s#Z5=()VFT8GGd(?G5FKFc3c2wKREnMC*MPw4 zTbh(#u3*wt;%TF&ZzwsK>gO6w)~e)a(p^Xkian04h(^(iXl!riagZq!aic#uG%z#_ z%OIGBXas_L@X?Vs)D0CeWPZ*jK&5-b*R=UfkzqE1BFe3pbxAjc98rk+QaxGD@!Jl!~|GNSi03 zMo+pg+Bew4Q?NDl6{l7>afR|u?Gt^Y0web-cM~)e{z%m!JjY;uftgL3M)(gjC#&EhX9fOSkw8bNENH@}5 z(?RA)7_NM-O$x?V9QluQ)kZoC@2sWp4rsvPMo_4ydnXl~Nr=J4)aqOSXA=v_>#1#G zuV=zQ-j7VvT(YK?i@DMYEN~Te<}A2-V`jbtQ##Y|t!TkZ4#MJ7{&zXOYi28vY#jXE zeNNWu5WglJx@EJL;b%PQ-GXZK+ke|&g??^l$IRsB?(Xi+>5i=qy~BsD>)XAhW2$Q^ zjJJ_&raU{U%*&qIPCX-*=9bte>PX*bMVD>SSHSFiB3#h z7*%)m`9cD=_XYE)`}};7WgGr{aboA6|8r*xU@!*v0tO?*rodnj?hXt_;5I>DgtK4J z7ou$(^hK#V2z^2778qZUwim`1RlX_47wGJc@q-+4cK12qlax=#magv2o5Nc=&Q*x; zwIdwfvSrIjCv|pgId|)3e0IqpLv8uCi{cB}zud4X)cJ@Iea@OLT2rN67XK9r{Sm(O zoNNCj{y*f1&{@;gmC&e|zb75|qc~fO+$OG44>nIr=%} zb}G;h{z6;m>F|ReDX+}VuY+f!fVr<6S5|JPL%NUt@3zq9+bgI04#3E6Y1qV1zhN z{jh#y0N4GsV0p&^Zbo2&Eor}fgt862=d2$D_Gu>K*FHF2yveIy$2p%3b@|8 zg5_aTvR|@3e(Zg&+LjZ?F9R9O!2P=BT@aspe&iUWU@=U;7_XEZS#rsG6uq|{t{NP9GR~GNF+%kZf7dS+F zl^fRcU4XgpUY6$W@A zP`_Uy<|mBvllOJN9Rir|30zQq5Bq6b=oI+DkDt6d;Mo~~d0625o~M!cg%SStiIpo)Ep|gHdIUg?v%sT{5$}1~3%*U+)Lz#eI ze)+fqa5p>{oR1TM{~LgLNZ|b1g&P2O;6rVpo8SjOsGnC{ivs=gfH~l|4$ezI^yiZS zll&dy{Kf$&?`pt&UEri$%Iu8tegl}Je;+Il$3xE+82CybFa5CHS^(VmA6TBBAE3OK z2@Ff~E)R^SZvx!&{#aSw2L&cb9=2OI1Md1i171?e@a=4%6V0l@rpFGU(?SOgvrpof}1k8N` z=O+*S<$wb=g}wtn_zAM#qYm5@dLsPb$4?&S_dLKH`iRQ%&Iil|0v9B&0GP-lE6ckK zFfS1}KY5tncK~MhL6zmb2QZ%%I6rxq-|qwFeFs;T_rHMot-uAzJN!|bLO+Bb`~;Q9 zV-MLBIt_mC<0lXE8wboWhgO!C1kA+(=O+*I`&_^b9#&c26@YoI!1>8TfBq0)UiRq9 z@;(WeuLzu-Q|ceE={I2;9Lw@~|B|@5oJ|Cp|7$9_n`iV6GB4KmD+sz8x?hdVFPh zKLX5Sj|$E&%G(Z@$kCPMT?Uwc6SyG#eg>GY9aC9e+p(KM9q@ynAbGn1V;)yo-fIDK ztH1@xJLn0ULJz_ZeuDhvb4=|^m>?Lny8XnW*!faDMVIzjJ_Te{yAcF~D3PaDMVoKMOFYJ*Bd|IABHu z&QBidHv^bca6%nELFH=zCM|G&@;(7FrT}yNQ!C3m7cl(-=O+*Kdp2N>eOhICTL6;~ zxFC5u0CUvSE6eKwOibW{ZcrYj?1`QvmmWfH`VQu)JFU_aeZ= zw+7400B#vD|9vjw4)f9P4#1uNj7_0OJu_I|i-G?_xB{(cZ}ubd8+cQ)WYBQQbou)pyD;J#)B%R_%@ zo7oh4JpACt&wg0nP6W&!1ClFc2j5<{NTrLz7FHdwSf8XT(Ev9@5g`%=Yr)O z3-VHcnYlDr9_IH=fO((5`Q;bqWB(H{uhG?oTS8hK`9%YSh-C0hP3BPCz|dC$&D`CWp{*HK38;A@jE*yAMzH z@nj#xe1Si?NJiT9NqZiHOrJkGa+&(uLgc1e8A!d-OQ>P3E^>MKDBb0 z()THH|3l{8qq`69Y~;2*rnmVke{xAa(xp%O$J@w^IW8`juDz_|`TdajCP6M!cq5L- z?{h-;;mQ8f%d8BfUg^U7m^*hNcj<}UhbQ{-%t!y9ag*%g8bP#*vQ7fZ?$$z~kn(-<&wA1B@-W_~aZ!?cSx#a)+ffMsn<%YuF*UE^T zTw%o?_ddS|a+1EgdmtzF-fKOO%R=s*9?0=pk@>g> za#9~Z_dsrEs`2%?$ETz9mcv)TK=;vwV`u9Li;vLvUu4}v^w?hx*ygif~ z*+aRBJ(Qc#L%IAO%FXYAoYY5E7rFHHQQJegB|Vf|)q+TK$T@Kk+x;^b#Y>l;kbrNWGQI%GY}51tQ*}V55IoeQSMNpe4|;Z2ml7 zWl^=S*xwqo^fKM>x-1fG4@4T8#|M`mX!6XgoL*kplOtZ8zweJ`wOAf#2nEBz6%p^q z>QUaxb_ykMP@t`eSX$cyE&dR4-|#n-Kld7jvRJ|o(QIDe{(a3s1exEy&4F%BjV@d4xRo+pQbQBe`&#zMWscRdR9H(Xs@mG>9P0rizVfY z=GuEDe8XtJ#DF{6)&$xbS9G-TeTm4X2R?M7roR(QWu}?urk^a3Kk_Ui`XKO@Qf2X9 zuQb^)JDaTsO7XatRH<_fjBaf_CNJmGUw{2ohQX~(c8;jGKIs1T`X-L~4Vgjk`okMD z4PG!5k)zNXR)(pt>>QZ_<@47Rs&5SNr4eO{{SYF6P%t7V$+wy9kd(p1%b%PYPi^{O z=fJ*_h<}69wO8Tp+W%|mdfx^nXH07Tz`Idg=H zYQn#?k7{6?4=E3CXZplS@~;G2=h%T;^7#9RpTNF}_T{EGtp{Is&VP`Qm3#M+a*y(x zNKCQim%|ck7msIj3Rnfs0+)gF!TrEWkY*lT3i`l$`@0=HfZqp$@S^L$<={nN19%DO z2OkDkfKP%=;6K1-@GblMGmx$9(eJJYBXaUE8yulTn01{_(8n_C~2kBE$ z@q)?keL>9R=n9ZRkFEhbz>~n$;053s@N%#dd=y*@J`WxQ%8MT4B`TZz4*_L!{-I!R z%IyzeKkz6pwGTH+yF*r5k6hA+N1Ava-ky7z`Y?UhCygWCd!0^OUAZ`4zJ%uX-=rV5 zGtZyDfj+#cfe+2?Rz+-b@Dm*!H-&PYoT4M7Oh;0db>OXW9g!5JY6mHJ_v)%0e)=U@ zJ4gpxUf(E1uKiQAgZ5Z>POp`&JrJ(w4680g2}s@2rnDnR>O)Qbh}j z-HzW9Sn2nz4x&3$Y3xidO;8%5pst0rm@eo9!Iy_3VNKezw*SXfhp3nr;l@>rC^7@5 zi!u@A;VKgmdcy|RTHmQ3o>0Yh7fgv+)96Gj2@*{rSq<`urjSj$gz+SN(LSw#Mqfh* zsT5&Rc_Qqj-pQz>Q?z3~{BXN3+^CYG-{O*8_1R!*Z)>MAMW4Nbc!E9~U}ol=OL%hq zNd36_Eni$O_L4Ru`VF09rda-Iu%sQG15OA30v3W7fO~@%g6KGNF^Fz4=&Yz{*2}<0 z!OOvyz$?J_z$?K|z^lM-!K=aE#3{eUdwC5w9K05s4iZ+h0=y0sZGAl$0B-BqxX5jPS0PqEH2>2qH2fhr>0$%|uz*oV=;A>zD_y*Vkz6l-; zqT8d#f^UO=0p9^H1>XZN2j2&;2R{Js1wRDu2R{N|06zxb0{;bm1XAYF@4Ro6*vz34=AUG{1+?$zXp9EIy~A2QistaLB^iwMd0_~HQxpuBvC$1*yJbX0>ZaGOP7YP&lXxqRZ1!jntd9bLiD-E}TO zn>I62>;!p6WKINc?^>q}o?*wf(kjhIGR?(QqH8rujY&$<)fi=OymBvIV`4Yl$C#Bc zx=WZc5a%P=(caGdPpb7hI}Rp~>oSgtTuX2baxx$I2~Oe={*JD7Xql-NV7Ba`83=?{NCglx^%I11eVgp zq}RnwV(D~ZI_DFkbg{K+r{88d;pV^!zJ|$n>VhHkjAPVF5AQTP@oPO|@+-ppzeVR| z4e}WwRq18i>(y=Ok4Q+7xg9Yv+O{{WZ#zXeC_*Xq}&V1XZAF1(JXRP3PYce1c~XNACF?K zN}l1y>l*k{W1TQHN8$iu79(o$70Z(%MW5xv=x_Naqc0}#8~Zsr2Rs{`3t~q{>%hyw zX7D=jc<_4gA&_w@`abwK5WCLY2x5Ot30^SGy6TBb%5BLC>MV=l4hl3A;W#D=+1U>=& z0eljajSqwsm4)i3!E?Z8Kymy&3tkF72i^oe4}J>10QSP>e+e7_{sY|6{+)^TI8{h-r+u+mSJD|)h_zid<^-g_9JHRbL(Mbcq)NumSS1&Qip$Y3@wcbB^t$J=F0wAd=?#O$LNaUA0|{?sYFogS2Z&$56}MiTug$ z!JwpV=QR1(#IVB~(@{Gu^LD}4uoL{w<;@Opu(_FtPyP_5| z*h`|7Q#sd`1rs27clg5s=wxDXsudQICe}zxQMDvNtjztpVewQHX6l$#Q#b$Od zsSm095ip7^e-w2sbu<>-5*!C^3yuc|gA>5r!HM7~Fc*~egpI9!4t#3rznunF!k-RG z0%w4SfiuCIz&!9>a26>3jM*S_TQdjD0rvu#Q<{8m3|It;ZY&08f+b)*SOK03R)JT6 zdxN)wH6Z%R)Pkb(>cD@4i@(HMUx{kYeTXlO$Qd@O9lm;4Wt1{h?1|p&C~dVJ+#Os6N?TG_zSzQvFHN(Yy*9uVOI;MK`-#Z4J^OrTT=K+91W>9p|gKG)Uvz;Jxv_nvykV zcFN=KC1#Ox4LsagKNb}^$nXjgYsvHNYLPTR!ZmIKlx`xOC&FLM{UYsN`i@s_#Qi`! z!2XhOL^j+SWD&)kZc5wFBDQ?)IOdJW?f|Fy?{uA(4xQ~e>o8k!XFYfJ=1x<6dsx?N zKDNQ~{m|9UD5M>|uMN{Nd1TI3hTx@B)N{C8mX{^{vJz&!iOYTBOq9q6@~9-#jog{- zN|*dDF|JO!88!|qnF*2}UwoNrTN{LM9hau0{cB{`*c70hX6A%#$v;yUU%R27#xAK( z>CaVgPO$v@={Hix>%rOJQ{dj<)8Gp58Sp6ZdGHbNMeq&qB@lnT`3JZKVZIFR3cdnP z1YZRU!Pmh3!Pmhx;2R)wNAo6l4fr<5oX@-iGPg7Df{%mmfrCin2cQ@H5X3$)AAypm zk3n>V`2@TL{5QBchWr=cF5s8oaPTWI1pXKN3-~qo4ER6rb?{qI=2PE+J5YY#gSFs~ zU_JOVcnHX(A$l9g+%Ebx*c+6|OdoIx*cY4)ZU&Zsq$OGn_5=3?v%pqx3-B;78$2BB z51tBc30?vY1g`{hK$(Yc4ZaR;1AYo_3;qCZ2li$l9RzL#ZVxU5nQKPN!JWYUz#-t- z;I80hpci}<+zphqkln#gz&*fk!J%M3CQ8G=9l;Txtc{EW$AF{2nc!%!02~8WfMdaZ z!13TRkhyNO1PVI2w)~7c2gS4z6Gns*S7AiGi47zC_&ifI zycdrAC1`ljuwp~!!&a@gDx@0rO3Nd5$AKjpR;HCAXg|x5aOVT=c)25=M)C1XD_hZ8 zRMCnb}R z>y(=c%U~rl=a{g%=^nCaNU%N_I&o*HKckbj;9k-OqSS5~4CV)VEuddXyI@^g_4#5@ z=B7)*eZYOdCU9R+?5Sno!{B}(>(XX_@J-MMegqx>ik@E%PA9HLQ0C8ma1poyJOFG4 z{a^sZXJ=SPk8V$zR)WlzO)JPe*tCI#U=Umjt^&o+hK^Rf9s$qecL#`$HLJlUa1F>a zrW3p$JQ#cfJQN&Gvpx)*2u8s(!Nb8Hz$3uk=*uI)TJTR`5Ihz<3Oo+n4ZU|VxEFW| zSPGsB?gO3%Hi4&uCxK^z*MRH`h~5OA1%3^l11?3sF~&si0rBBQUj@$t-vloJ-v%!P zKLRfTN1_KW1t)=*fwREN!MWfS-~#X}&<9=(o(^6M-nRw*Qt)CA{!;K-@K*3T@HX%^ z@OJQF@DA`j@J{eo@Gfv5?dEQ92zU=T8oU>r2HppjgOqV}5%>ToI_5zzRbSsg`M1zE z#B7r*b^a&geySf(o}svm;QfhuE4IB-_YKMHPl8T!ZD{s4X-dl6Zc^%Wa8l}Ya8hm; z{U?1>^7X?QtHrc$y2>w6ugOLlnOxb8G-3yeOCg_!Z5M7-)g`knI&pk!kLU{56&F`6 z60xh$9B;m8578-m5_`xW#xBHB(v+YR68&6KuA&o05R>cYdXBo2GXDoS0DJ`$pTVo( zDDX9qoml2|a4AT?QvcOk;N|>&8@vI02gFu3{{&@C@?#LcxcMB!hi1M2r-5IBGr+Gv z>FfUm=YjtNF9yE_u^-KMAoid69{eZx1Be}GegZ!Oe+IG7#L*hXPBOhf>>$${oC@{@ zXMyagiOvE0fhAxTI1luI6<{`41#Ss02HATPMIV}h-~r&)ApO{E2c8Y$NAJ?sPlO*O zDPI2M>cHnc9Iuy@tIVIi^6_&plNGRq%Bf0Ony z0Tf>)>sGq9I329!_e@Z17xu_SmxFtPt3dY3>3-`_#{{a zz6=(FpMWLc&)|G;GHEFV*@I&ifb+qHpx8KNpp0eZ;E7-*csf`Go&)X;%GzTMDE=nq zkI@IgI&eDuV+lADTngrc`+)dm&3+($SJME>oVF3X3S0p`2sVMtzYXhk(aq>f0g!o` zIS`xxwtV&k0be$OUCHLcOTZn^Cjw<1icmMX!9p;oGwq8Q^l3m z+_~ii1?7_p3g*Id-is(HtF;@bW%rpsF@h9j_IpKQ_oQt{d8N*kqzq{M(!R`taeb5= zvnnGgDfdFyUam5d$wxY6Bwfi>MtES|O$oBuL9~$!`f+xAN5QsT?>Txv!gH09&P{wV z)gxNzsF|r+OdjysJIisCF{69oZuUc=qi~lEp8)7lD5UZv@W*?*i9>Z-eK6qX_FVP;|=W;9lSrAp7{tm0%lq6(~C7 zYLGR2a~=2zcs;l?ZTN5C2=GQQ7rY7F6TBG|Tk7xN67UxA0Fbr(sLTQJQAK5rcn5e8 zcqe!Sco%pgcsF=5cn^36$iCp{?cjZ&*jNvN_?XPYAahCcC|C!s2YujUAagwPIM@L` z0Wya&>>-FUS29n5=Yvm!%vsE{AafS;9C$PMJjh(bu>V-+aW8_8@cSk3dGKZMJ@6H9 z8|vq6Q2OmVV5)9=2!0i1?&`Mt(QPA`jkq@1zSQT1fhZIi?z+eqcMA~A+;mD?u7 zf_8K4OtG(1=TuS-V(-&N%)^=V+ay(RQe5sOD$BWC1$QZ3?EjAnPUc*$dTD2;Sc|GR z*X`q~JW)boF^P2j^8h^mu76II{;_%}?hdk+Xn1cS%37is2Hpq`2k!t!fHD^y1}#`F1Q+;3gUY*lR61TLDmYQCE$E;5m*Wy16F}I zfUF@zrC-;8srv7zEXRfx-5}SVOzKA`=)Xfqe?y{nO3;7qi=gg++^qr>^DcvRH+L@f zT_7=%6czY;Ml^K#|6Nqm{_moi^nVvs?*Cm>j(F4I!>fJnQQ`Ck}(G(KLXwiF$( z+&QAO@2&&Zx(urqqCQ1h9RdIETjcpfOcjO8;)VHv|(Ah99 z(Ya%>B%wVR#-Hm9dn0VJG*2?qsNA3U{Y}1>KscgnFJi$IkkK{4P@^xrwyi-&QgsFd##`+Rs6BRu6A-}g;4k`zhar8ej7Ey0LnJZTIUSBjHG z3GVUwz#WoFL(=y$oqYa%1}KQ@zJo0$P*SANeIgVz3b_vx@+AG@SK z$vD0U&Rv$zUf!tmu~u*n$a{EE>1wQfL~FrSU;`KeWq;0U@L+HacqDi*cpAuid(kUF z)=HxP29E)M0FMP_Z{qP_0eAu^^P3Yv8TU^Dmx3pQ2Y{!5E5TF25O^AR6nHxL1o#*5 zE%03MeegU`=0WF!G7q{CoDE(C%6x~la-Hv73d(%vGLSt%hPCr3djjNriYROM=4w#p zHP?X0fH#0LU-=s-^O2iD);!GLLHy2!HTP&1^>I6hU)bCM?qq+D0`KHE{wQ-7I2XJd z#D8NR0R7;DUfuG&7>27}Lv~8GYtE;A)F+x8-Pko7nsd#al+I_RR!vi46dSN= zHa?o6lR2*;w)4=3hdAvKA+DXa2@&P~UqvK?)K~n;Ts3uVKuoXT*!oRmBJIUea!4j2jMPmgV=~+!^Br zfHKCh4@$>4-WiWB;rG^HBe)IN0uBOYjN1u35*!Sk3GNJ@2krvO9*AM!E8uYOJ#Z8# z?=0~SdUP;2790nT1M|W0;0@qp@Gfu)_#HSM>`TsOfWyF<;8ZXVly%WPK_8e8)`RHr zDEqq2JWzahjQjeo5&IEzuFC$d=;!duKpETE=cQv?1-KjKQwa_StHAN#-k|ieYA{vD z?vDtyORZF0ErJG~ObRtQe$sEHq{8Q%`uFEZHjv>>o3vJLc?Q&*Q zq80BWY`f25Qs!BP%qI%SR$ME}NboUSQP>G1foMkA(wm?xMYSJepLb>%@^-0Ah2&W$ z`3c%l0#2heC6skMlg~5G{8BilxZ%cT8@I(cvDwBiv{1Q{*Jx*0uH2FKD!R59TK09w z)qoC>Hrxz~t_^_Fln(@J!B(&VYy)LJ5duZmhQU992Z8HA&g+Oi1Res)TI`|Vo8V#K z2VfMGeV&JdUxP=0KY>SreMr+$;2`jipscg}37h~P4az%G*uK#g@Hp@Y@OY4SRLzMX z@1UBKz`MbdLEeEhr-7oIPY1@kbJ1zrn& z2wn%u{N#Etzc2F`khLfCH!z!d!7U&@Pjf4n3*H7^0p1NV=P~zykAU}rZ-Ebk*!t!X zZ~*rIdXVwQJO<7O9|sqJPk@Xg<|(iSd>T9zdB%S8a#f$_aBmmw2E=J-KgjNZ6vE)dUT8 zig!emZN##|{`ycuv&$8QDWij^JI59jt5#evN7!_TWZWK1+(#niDmqHa*7Xs-Nn4cP zZ-IM)Z-Z6fJ76979=IR)KG+O?0CJX{`3O7$`~*B5{5NOPYHff0Ux2ObQ556b?LAHeg#A3@nS@)O8=}0}cka1*JXvS@0QVw#?ag2tV|S_&Yh&fvwbX=BRx?N}3zX zj~fze^|NiU!R($^Fx<>2tPW5)^K6gIGJ5Ky9*j1@^vj_mn7(G7zs*n3i#Q7+7@Ea9 zq;vA}Ru=nL)OWN*9A=H|-14Rk)v;nZb)i1OyNu~FLF;T-*%mw7B!kon&XGtg5Gl7Z zuPrvZq*HDQ+d$MH!8P75XIFBOg&VaoFOS6gIV`gU4`LfeNn2!AM_ZU3X#Peox5myO zXY9x7@M{ru4SsojOMP2I%$1r;;D6X&(x8F2b+k%3;Vf-s6WT1%t&=DDq_hHTD%Dsx zo+N##)}na}y`$5YtUOdo$KzWYr8QM$1xt%6E9REY^VJj;RFsugl=wI(wWPYVVxF(G zqPC>Ete~i**o?O^c{h}}#z2$onVV?kx9FLC?nJg@rq2rvHtY}KZO+SESX@;f2$i-q zNV6F$O~;!)i{l8ZW)~^Sgr{ptYJF7&)dl4~GF($zT|oAH6_phwv1;wxqiUTJt5zvV ziKf>EqjAm)uB<3qii^d0sP_gRB5n4dVSP{GmIR*;Vu*CNv-r}4(NGvOS!zZ5Dbarz2sib^VICpEsgm30-xW*2+6m)6)5pYhBuc$YYPg? zO3aRy)lXQQvRzwRR8W>&2w8HgsGv%scJ8t{2H*zj zkwD!tcLH^9Wy>wM6-6iedT+bRMgK9hP zDLZwyL)yAq(GskefzGxiFT&5VGMl7kt7^)91$CSSTv=0WTUuYV&7H(Zzfygo(y)@x82H496t=sxM< zPqEdLBbQ*BRPz+p&b7KHLpBm7LC)+ZIV5R@5)utgLMme@E~&=2NSCCf2~ct{qX?#v zx6qPI&jocgwS2LmNXOKeIa7eBR9ottD8XheZHrXZhw581+493}Y)PsyIkvKrxwSMU zCsj!rFIld-bl&`0%)*TMjZNl~Gwcp@wnJ`Upqm)$r!oXYaH94y3n~kJm4yq?ExrnD z^y-3IQL+`a)s;u>6@;v$4V(l!Mh4#O0OP2qZvwDUa{?AKAn;$r_PP3SG3Ph z-N%)v3Z(^0(e;Wx^-GVRB8BPuO7g5eIeqTvn7)m*1lyXtu_Cm_k2`XtZwKifA!Rbh z%-k4~A4+Nw?t|&8x9fwk;bf+bF?}6pevrhvk7la0l!p^*ZZxrWrs@zrm6J||OtrE} zDkN2w_c|+z3(9Z`_!fzoSE8wtD3Y{D>SJ>&tBXp|>rA-|ii%2VYJ3G{Wk&S7JerlL zBR2dfQ=ghjMj+-vW=~tJnVM$ivY}wbF&Ce&qG@D@9sZ;?+`7Ki{!m!XVoh&k=m6*L zo)A}bID;cil|@*LPUnQQ^v=Mzlv@AdRg5RhwOkv6k=A;=j-7f^Mf%CMV`XV@>LKhJ zilb0N^=(alRC+qEo@Pf*iSi{MMkGn^>ZDU?ADzTGc4AC7LL4F{PR!pZ9B6YwmWs$2 zJ&hheL(h}I3+j$=H$~uBkl{vOq?z~Bn}aQlTF05v5I-WVyMhuatz+@1cC8(!G*|m0 zL0`Kb>pe1Uu5Bf9QaR4gmika2vX<9|(z$ybNgWE72b!FgDorPz3nxmqEjuSdbtmDR zLzSE^Ck(fKC4atH2@g*bn=7e(!X8+%VLA2mYChwscRPpHro30^3(1aHE#l-{xRNW{ zIm5(}Qulq=uteiKb4b?+3TkRf=T&IvHR{9KT=#0|0N&{5E$~)f{qnF(FlD+gH?1qi z-ef<6-W}65MTtQtr$c6++3|QnoO?6mmXxQHQzDs?A)fu9))6Y>Ptp8>Y9Bt)ZIhBwQK`kGUVwyB@>TF! z)bjeUKQFJjKFlhS6k5y<{O$InEFzKZ$^ z-qBC2%nAvvxS+OxRm|?5m$jLCM%g9}L);PR1Fr+UY(sVSm>eQKLc-Lgu7?M-sy17lSm4z*BMQr<@@A$vd6j+5g zxn*uGjWufIfhAU29M8hdS8gEpB&;%jTT`StUGYk?k~7t90dW#lM@ukWgQ%)5S=4>u+O;~Ff@f?9;dXyRfJSpr z`oEoF@Bwy-V+s0y=Z@GU3XJn`{N}r%eNX}Orn$#NNQ6wj1 zr=)}w78E;cY$dE5s&6wvTP7$6NAravYg_zAbgF7HXXct9Wv4*AB%I*rOo}2oEy+Cu zmkS+M6fbUa=^@=kg1PKACfBnV*N#b3q~uPL7)f$sx(_Zkagt_{K4B88E7pDT5~oDn zgqI*jcrq5Hk61qc*r_ffX&!d0(rTgK*#RR#c}YgQ6?7Dk+x|0#=XPpWJ7*NMolzV} z-Nu{Psib#HZta?1N^YDS7h9QbETI}b%&A*jNF0C()`rHU9@wr!t@yYn$QBsm4&60X zthVzh42R!4#xJa{Tv$?}tMI8=P9L^2=E~xNM9|0RH)C0Db0aFMWQo?geccYYxl!|B zZgs)Daz+)=q=7b6sIJy*DB9Qxd_^JMq+UMH-#RXG*d&x`+)WV?(CoCXNsiVru72ELo@frerJ4{u$i2 z)Rrv;Nq_{}FRjB=w%f$Ly{>QAYLE0m$CmU45b}Y{hI*TV!piDe9R~lbUaHzEygFrN zg#|?meO1+^mDQyT+ZC177%t3m298I<4n%8+jP@6E1Qv6eYt(zN~;!1+TbP+ zjEyhiv{H5n#pEju`{Z-k@|CAqIurLfBc=}zVXz^YB{NT7WNo|O+1xf( z^s>WC_IUZI>QEyKlu4>6rFfh&^xCc)@9D1BJ$+A4e#(}u>vd1x;nO{WMdcQrt-K6{ z7vJh3drcPW=v*bfusXK6F?EsEY`)v(wD@jJ5uJ+HFmF)1KhpxCtZgJzP)do#_V08l zGq(WjPR9*AXG=|7>vKlQd9xjL1 z%kt(`mtY`^E*Ht(mRnd>SE8GzgxQBZZv|yl^9w}9S5%ag#rzUGaECyBHSFvl9g@ruQ3g-RI#cwVv(KL6BxiAnuE~p^ z#JNQY?B%A(-jw}c&dsNuEaN#%n7t=UK_<@(i_B^e0 z+>r_Q#S#4_=Ze{Q3OfQVkWS5BxM@E?>4EDMIDhK{-*>vaa$(HRp276 z3I!v<1QBntNEHKMas8UqtR)0evzG5#w5E}{i5EX?(knVzm-|C0GAS|54f$84NQer~ ztN~)0BenHOxlP3~vXRe~?=L#eGYLPjJfz(6Vy^y`MIFoiX=}>eDBw-o_EHjJ8=-{V z8n0amJ9AORTS`rHeY?L_Hbo^=imQ*)H|VtS)3UV<#w(#vo!%)$EY8}o@v^FGs~4wu z_d;skhRfwV`-C(m`>Swl>1IFOcPB*=-`tmYE7`nDw${rkYh>$x(LxO)*)C4HmmJ70 zL>6DZ!E07B4_CpwYBnQ_cUfkZS5qiCiJRqWS>+aIxUZtFoLxG#)ukoQ9+#K)cAHV+ z`avy@$Hw|deLVMkI5T+%V`{v~X>_M+$;%ShOLP=B@Dfhe4G?a!HNLpIlFinO8Cg?Y zn(-USQFT9&lqL5h&F!Wvy_U7&wuQUac=}eEBui_QdC%$krUtukWp8nf?29fhSRlV9 zsg=-!zTPFlu5Gu0u9=h?7Vey}Bz?+b{VC}ovaq$u%Bd-5GjpJ`DAj%XZ6> zxpQl%KnjAue7@BUp$M=1>d8nxjLMLo1vWn~2kA7(tM3{x2(yh2P2n}etejJ*2cNGscanT!Eh|T= zjg2I%OGlXNX5|dB+40p!=!?rcD2}{5|7w>cJKbZ={uaJPo|NX*xy)H3@?bp0b9sLAjekBb&!$6i-lvD* zbcE}h5|U8JqrajOq{$?uH%%6jAI;0t-xR}W!uTm&7_t!r-+xIO{ibKKWY2w` zNTf0RC*6bfO-&(x6GH*xbvz!a(SP??JXVqucId^(vs~Y8OWZNCqvy_Tme}I*j7pL)o7MExe zKSQk*msY##MXZvN>S|f7U|N=y^SBgjvgXy%LySgt?alL5kvAzQd0X0X7K*wPj*K{U zF_|6U982!1Wc*;ScST(l22W*Om8v|_ZWxMcXK0!ZVd6rW@%D!fJIBU;=H)qTeTRr? zyJ*XHDPwgZ%CDE{s$=EBe?#YXLY)ae4_RoIelbq zRZYn}EEmF+LXk#gtpg2ss%u&3-Msh%T6NNT3zyOlC7B%wW{?Euj_9;*M)d8Gke40` zd8fY?3uZ3+rwuDZ`v_1j=}CoAU#tF2ACV9A;r4vL=9=nEgr3v&8Uo_eWzJJ6+n5 zD~JSJc~@GGC14vaibG-06TAYK1*VHVp=cEtbpI4o} zpPR-M_mGN z-4@gmY@!MHWnqZ7BC+&n*P39f+I->q6@E5}Nt`3x5L1$^>mfR>&dDGVo9Q^7T#ae0 zo53Kq2I*d7Qy~Vq3_DIEl-bS{nx@3x;)X7I)W^g@Uh#LA;@GT`m9vN2vwYWRRaqmik7!5t0uIY#FbR($5(D^Z`&_ZjfGe3K9W)%vD~_E88d~>%E`|l zEtydVGka;Wa-NuLJsZeE+8Zb0Le9$hC@BWFfs4Kx>(YB9FB|6WpDZ_wf3*9Sb*`? z!&d#ywR-nKH$m*el;g5uok8bXb2F4ytZC6P=5PjLf&xcRGU7RETw8-u~SL}fIKCK*@eyd$#&nizwWKs; zP0cD-$NJPnAvDIL+3v6La0>L7Qs~vfsaeQe_oIwo3TQ7x}{7U#$^yq+zg;<^ln#;k|f3uTO`uf*SO6ip7qtiK;s;ppWf=0 zi?1TkqN-w-3^6)7Mh1+FT!}7Ku1ewkSZO9%R_@RxHuC#SX0>FU>X$Rq#cnTl15Oz( zwGB=}pm2_Tu4iVjI{O-9hPUl*-J8zr`Y7zgUK1(uw|1lLa{O|H z<{(XRIR;09JGZDVLP3g>7?+oHLnb=B(x$fxQHlxAl(t3Yg=nZ!xN<^7!mTR&a5erW zS;NtGEXQmm+>SYqbyT|@voGOhe6I#67gxv?$zd-hIg104=0eV3E0WxazP{$(q%dmj z3QBo>8z~8C3pp=SG&(^Oo8jD1NrBjM2_ zia>+&i2&*7y@n@A7CB8o8uVU!B;BzYbk>j6&XALp5+bSbJ1^d&$LSe#V|k4T51=;NL^L855AuXmXV{Wul?ULMLoHaqGgu~AB$)P9gjMHg`yiS*pMB1uTkW#|$B|lm# zDbq0b#;ug_kkj*==OjbVBtIvQRpSFDLvr{1tThC2x4> zy*-lqqqKhQb<$v8>87G=Yn1$cy<<|gYO5Imbf_4ewA7((NZeTrz3L!T899|v*M#V5 zc3nqI(RHZHr1hkdibbU?9{LtdX3IlX&c&JU=jCzq8w~8!WdKs8Mm0?oTHYH=W}W7WWfX;RH9eDP`)ircZoRmC&~Q&YMR z$E&Em{xqhqT_LH2J9Iqa=suY=Ws$FL9eb0fbHo!4J8>JL`>Oq6UaocB+>>VM9Fl%% z7srN=O`sijw+s)QV-_S|GFrTd$FaCXcH64zk%iT2Kl?(k8H$3T`Hi6p=fu5YKW~$< ziY(7)&Yi_C$+&DD)uM46-{MP?j2Ek;R5B&!>TTduJ@v|6DS@!?LKZw#sqMXW{d8{m@PutdWFsR-e-bMYYRj2=pv( zK@$i5z_!K~l$0!3_??8QwyTrQ688C$x{Ho=I@-%H*L8VB-S1C$Q*R|`%>+#>{&A`4 zdBoIh^PS2$LC9V1t|4n7_NQ1{8Uw3ol4913O!S?ru9A}8o(wrF*IE%$FWSPW7zvSt zn!?J;vKgvNPq$5^rnJ0D4yUp$MSF5SlDwENr)f=|q>WycNox7T)yX8y+MEq#ZQ3MF zn41t*PqfbeXp`cmfo&nGKQ%28(t_pQ7*IVUiv;p5g!l?J%}N^aorEC=d~^6(n{lyGd$dKv!(6Zu|p;W)5R94e!rmDHCD|70Ntft2%=Pdabx=&a6#M&+E5}({vmxp{X!d+U> z<|h8Yt8~Par3|OHNdlzMeJ!@7?gL{9MVnCzr%OvrEq8a*S!$YXJG)kalqI!I-Ag+9 zCv*_4@nF;wRjRLR1uv{13RlB=oP7AmIh zRg0YV5O376t|sR8cB0V}mlvhB-$}vaw!Zcc0B1tph1=pHG}h)5L8rgWdwNHJ3MGv=EP=PdW>*`ZGi& z&Mm5xZD!J|2JB!9h?n0xc-vNdnRMm2LSgNx#UJrk>Ou&MU$SndYDosuR%a}=7MX3G z5y$f({o-h3#4xC09MF`>TCy%B%jS+Fr1uta=2#_%7A~!+En$b=BKGL{Sj3(;j}=Yl z#9!5!V)P~s)Co4P=;Jnb_!4W+F&9NivVXdmVvxr3BnG7q1Ik|%ic|#KYWxjkw?Y#!S{lY%vR_vNxf|6R)#qDChIZ%4~(a=fqh7q2hpif{qGy?NDos zmD=ANIfTu+fe4fOWqjG+jaZu39atc;!BdStX$Erar*r6M?b50eRn6B}doX6UNGr8F z!9?ps5+`EXp?bTk*3LNNDm8W6I-3Ap9jEO=>g^~v>^8F|sT?uNK3}z1MNLmfjXP>O z=1O(cv;-~5;YbyER z{yQ(PL3}zfFR`Zjb{VUk`It;_B(?#Puf!qD?J88G`I^6DvgGYm-kj;xy7?EY{_^d8 zMQ2t1Fz=ri-Z74GLHU;!1TL{Xp z-=qD*D~|c!b#Gqy%Ge!0*{PauVf7aI8!unkfA-2(KYzXX$c0ahnf4f#y7HgA;dO0`T>9`-UK{fqA-D!=xYdnZlX z@|rdK+>qn&P`UFtcvl zafkWt!f;dmjAdV*c-4eZzpCMzAM(y#M^R=MDSyhrv-|&T>`4a~-EjT9?H+!AZ_=s! zhx$f#s~o>m{pjLPu0PlM@54jB-lqT0-@JSHo3qg~%73rvg{gZU za>)|~cb@+7vcr#P;`=ko|MjJFp1!!j`_5x09g=_4A>TbqeJQ{1uSY#{;z`rKTzkk) z2M)Qea~|J5qYVx0)%*5ii;fHIT-rbP_$P*3eV2#t`Y3y&f2-Q|sl!B3 z{&(k$`|!#m&i=J{+Bqj5Rhe}J{X+ToU-aWca}F)}@{mueJbLWUd}l}buRU|h!LL;<_%XZjo4lc8Ui*-5Yh+6}IkN{`vwGy{lRiDKaruRX z$NUHNtNbBnH9mOw*LxrJ^Q?JS|Ml|h?~S=a`G?@PJ6|31+?Vb-LZT>RQVU(QMs_a<-`LXzbot6v*%v$CEvi?Qo_0A`J2yK7I^-= zb4J~~*B2A#K5ooD%D*p?x91akoP22W2|M2WWBqBv`3{ouf7#=sOBas)@}e>CzWm?t zK5y6Z{ZZwQ`eL{9AG`d4y&rph@+ZsgeDQF;(>_4Lf9uc9-(NH9t^F@MZbEh0pq=L$ zvsC$YTb?le@b)D~*6sEEw8LwUKZ@@uDgW_BH@~%L{8i^1I%~^gt~vShHrlQ7haYm| zHrHk^YuW9IN3VFXdDJw%x4xBxf60QiD^9-Y(B@-TAN1r!ubp){o7$A0eb!E&tnc{4 z$Dd9)s88QR_FTaCjg;Sa*&YvGaOoaZXYV=sszsN4yNYlBp_B*qDtTi6yRJIts&}U6 z{c_3(b4EUjTKRXC&VFI|n`iF#-+z8I^{q2I(VrJ9|H&QJd|Q3lYoC1i#{*_9{;&@t z=m*L__u!YtyuA3M{x|HrYJA?ha>{-L_XhTwThXx7drQ6^yG8rX?;JMuJ6VTOe$n15 z`aHJcw0B1Q;nekezkkt0zC)}0D|Q+D=e74t`gu~n>O%qxUc~bMUitNZ{^5tqx4d!h zuZu5R)&JVhZ#QNR=EA^UdmT3Ek=w^D`|jZFZ+z;DeqUi?|4I3uToAtbk!QB~`6rKO z-{;58g!h#48xB1yI_sxn3a%d6yK~Az+Ys*{?4p6a{`<+Y9WKuEOuG5f<64_XFZvhX z)=~cVi|@Gl+wVgk-1h7VBkOKHlXi8v^0&MBr29uSm+krR-{0MH$~Gtbmv*cCUDn>Q z&5Nh5{V4F<_NOiRU|;&(h;1eO3pxj!I4Q4k@@mP6HU3=X~{{yES939O!bCm!7pQq$5UOW8NJ9g~I=b`pO0yYQfGD`y9?exB4>`Nh2*e0Ny+RbM?f`He09^7>`wh96FA*dP7&s`5vV zpMJ~p)32c-2bpaJC5bMUCJ-;@3O`5lb#>-+C%%6%s%kOMSSx|`J4TF_h`{WI4*rV4Ezi!lpix*!%bK7^`?_&v;;bqH8=T!4Izx; z)}W=AH8ili#WLNphEV-VKi=o@%^ML$2MdYInC8{DhIzgrZyB2&Koax+^|t$XhU&cyV>Mc-zvRBwmp)P zP3b;i-PyIQsUy(H8Kjv5W3zN97!Iz8cvlC)9rZ2VaHOL#5cK9wp%1QZi1kh0OSAi` z*gCZlrDP8!T^0%IfurLa+S@mxOWHOg%L0M$rqotP?49z=MbjfSWy_g_acEyt+a`vl zN-w-Nyi9Vq5v3ec;_Z#gWl3+7f?!>6d5Z**p&kDArW13{YaeAa!990lO7iSKrr#&#%?>0R} zuKBWt{?}d7dXz`2JdxGSx|uWDqtLX(-1KSk)`&YlbAUZ9dMeUszL|=@rvWiy zNTF|RkvH)5(m>0`SDBs-vN1Z^iFlb*`Nqd??VXJZzz$a8V&918SF;n%A6mxo2y9D} zAB3?u&Ya#PWYhr^k+W~lZaRhS*UWU>|s zH*Q*vg3C9iVq!%i=k+uHkT5djsHY9NLHrV%8c3(pd?#iKr$@!xp;O_u-^Gq<5CeJB z3&;5a^QPrW`XpmoOJMm%wHO`#WlY@2nTKOOghJvE%v>Nns~{&U8)?b7eR28nCU%5p zPD)Q3ZfB&)y3{tY2XwZwwNy-n-y=<-+=gIlD=%GUNL0@XT6;nVr-J?tNs_l>H^K(8 zMnE9uPtA~_o>tdtUM*PBjlSwx!6XiFYr30`^fXzH;@Y&@l0@k~vdp!$5xHY3^Lu14 z?#C0ADEnPW)wEnAbdc#Ea%lKW6p)XoBcff%#%?6 zgUU9~TFPUFu_NhQ<&CnGM|UsD6WQikctUy1%TUgEBln@Dcn<_=hu7ay z9^D;u55M}EQ`q{gH`vdvISc}yjg^K6Z!Jm#gC+^aFU4`RH3#dz#tw&C@)6!ighpQh?-OJ$qyEafrp zvDZWHW}A;Jt~AD6D3r(nQtkN zDdSKrhgW4OkNFzvVSOT>)qJ6{O|hjs<}j#UT2@C|%43d$%2M7*mhzatK=o7J1(x!d zYoRt*-VK)Wn7g4iQ{MfS@|dTg`YP{vOL@#&P_pYg+q`QjkNF&`xAOjDDUW$^7dOqX zSjuD07{YEj&Cx?pTj&$(EyboRwsiJaUSCUjOd(XZ^5$B~V~&FIDDN0cQG-wta<=)> zQXaFt*NtParD#pNxpJpiiu#T5u8i@DhZ^&!rZfVzrN-82DUZ1qYAfYEXeo~wILw#< z%G=gb9&-$ogpzGeuoRjB$_eilOL!p?1*Np0t$5jGDxrHsy`8l*il*B~N6V+bl)PhH{>L z*HXw$iOE@t+L~s}6B^s4P&;YJS6a$rHlJ?HVC8u%MZ1TRC$h~tOVNg)oM#`jl*gPi z)0I2lQlucpyDi3x>}kxCP70uQc2Zy|kJ)0DF}o>mOG}YvD6jH5E#)z9L+z@(_blZx z3)r7DM0pjK@|eFv?V`NfE#)!AbDR{Q!z|@7?NClyc*9I7 z#u%?T#ycd&i^h0m#q5LAoF4+UyQV5?DRKlgOnL8Fic!3Tx4@LgJ1R9yTwwBelgy& zF<$>F_MB@tSqhy4^$+D8U@3AA^|JDAu@vJG z)GNw+#Zn&g1JtX^`^8e&Qgz0>ro5q+VyuOFU3o`Z%415F8grZSN-gCvtCkt_hVnWr zMZEh_gPTdadc{(V_C9J_c~zF8mqER$&)#k+j~RXdtwiNUTgqcDhZ?QCt1aa*pFxdL z-dC3Ln3?s?PWEgw+fr!4>^|Ivn2Whwg6O0=!=wy~7QOQIpw`-DUbOU>Urh;XesnTi!sg0Yp|5Z91FF* zwxJU(gJmyQNl`8kOrN~G(iPbZl$F><`<|TD%X3JLwU?RsCJcGXen%Ys9ja=21|L&b5N^P?j=hx zYJ{)=RBnc)JZ2xLkjm|EDdquCyQ$p$mhzYnp~5QniKRSdVVJQ|- zPFCI(mhzZKp-xfW6P993Im(z*l{eHsiS%e%JmP44sO z`6`R5eZ{iL-JzE?`j>Y!*&pNCBWeEopRYWGQypC6^|#4^_ul%5cjU0fvBMfijrDRu z;B08GtXO;59?bpO!@juQ+waxX93IH6roIqjCo(ZaKbHRN%6 z$6RB|<*y2wzry-PFB{Fg2Xf}NztI~BdO3!8HEAGB7N}Fgw82!6CQjuIPnta}%vm?& zTes9|%H*N=FE)sCKyN#dH+oFL3breHL;iL@=cY7zc{!kw6vPaGEiNq$TK0c-WSaPwpo^ zs7HQzS8x`gx7E*@VS{X+=HNtEJ~6G10C^16uklh(<64Na#mly$a7>;&#?q*Fc!8tArO$MOzb_%US7fA#TJuimYFpsXhLQsRI8DboSRI*$cf4g z@Eeg?X6m_9Z`$Cu@YeyS87Uw48+g*EQmy<-<}c%J1JV(FZW&Mb3B%750r;z-8n`EM zk0(620^FAvJBfXcna%$b`5VqZZ_>S4{0_r82w5L7guzBAxr*xBM(~af=WbGr^>n## z#Jha0mlM9&Q?AGIx-t$+G=&H;`2IiaeG7P0)w%Xgh%p9qCK^0xr8R1*h^UBE1-vAY zK|ltQkSI_fatQ=PK$sv_L2QU+7)PzAw$zHndTnc4YAMhjJO)f9Ds8E9+R%c<7H!g` zZ4`S-TYC84_xsjfvu9@#hD-nFJpc3WCzJK=Z?EfjS?gPCuf4Y`JMBLD&#Ji?_laR; zcv-sSwBYu_n)x**kI~R>zFwkm!NN!(wyiK9E$;tKzK$g$XD`ItY6~N^=!C8-99K1V z?0JsR?^;+le^z1b^rbcE6(i_Dz{2Sgp^!aVp?S=k@{#y>odv$cgWh)GlDSl8_G-)y z*T&W1uanZz>s)5M#hBk zxOJUVhg;&z!HghF3YXQ&r-`W)+K_>^8K_MuAJSm!5?;rp*BkePl{J0n(Z^=ybLsVN zVb>Q9`hU}&Q~4#wxp~3=U?1K!g^k9A*I!pSsPMuI3-#>ULV1q~w%*K=jyhd=K-4~I z{C|0L|KO?YNjoliq|}H1W&P~Q=s(lZ&68yZk;Qjc!@C>C4pus7ar4+yn~BA&VR$Vj zzG`4j=P2EstGII>OoSqf+3DITky2!O#J=r++jw|#}#E4xAG({b~eN4si-UH3uW&#WK$xx3JJeSyDKo2H#h~ z;J;wWBD}d3E*GZ6n7+(9@4Q^c8*lmye2gWHc$!~|%ut7}`K69mI{$Xox?ux~vb7Nk$HZnDx%Zj#hj&anWLaE@uhX6$ZlZ!KWI~U^$t+ z$a4iJ?iJ=Ua_(X}zl#d>E%r04qh%!94dtR6n-SQGz1q_?eJ+kKESt*@2Ed=TSf5iu-q-}qMFD5g z?Adq7cZWdZa|ST$2o|)RMR<|lrL*u+XkacTxfmY`!1t>4Y&O12?b2l!!8!&%x*;@7 zUT5ON&X;;BA?KdVj>3l-Xg*$IF+VaL<~9&3A9zF^DA&QG8H;L6rG0r|lP5k`thm9sFt zoEgDKF)%Q2HHHgn%;Y2-H!a3jIyoo3i`_Du)mb&H0bk#Nm8hCU=b;QNkfIA-ShIvn z3^LorJZi=g#*5Tq-obsqtct`tmPJscvFo7A@^!I3+qoBrOZ3^!N+2%GXFIEa)(Bb+ z#6|dQ=RqJYy=Oa*0CB-R+xa38m)WzOwLn~4&vu>wdPLBAATFe5JI?@d`8?aq;L0DD#X}#> zdYZ%?p~DQ~;igs%Uyv{s>Qm;@c7!@JJW<+n+zW0P*wozcdfk=oX*ARk*i_Z8A{Oc_ zi-ilyV^#UU9c7YneN%oc+*!XZBO2~(-&B4u5DWzm2J*6sVpV+*E60u1M>Cz5M&Y{} z-l{A06t3lVl$-K$0-G44Z(viXAL`SI`gBy7Ykd&6zA+;j>TG{LjgrvJK*Nh3UZAPS zEjFg0ep{Ag84Vq%Uw#1ZPKt#O2qCbkv7xapv;C!5xI+kFtFm}Us8!jjr(~-lH&hM` zc2A?B{jsV}@Te87=p(I&h4#Dr0#{pwtF7&u5v_iEMzpH4ZRn9BM<8MRKN1h;Ncpkw zN3)`*Q`VDW?@fJmXX5ChFZXwRglJthCBvzGE|Jh)#z^b7<3GFSL2Zh$E#KL=V(>Wg2n(PSe z7oI0--`+c^DYjLjG=T$}R-obZOiC0r zfTEyb2uE9mX(%&=O-vMan-0^4QQX3qjLi!?@Lh-qEJUuQ163VIC33$;lH|pU z5h}yhjS^C#Ddt?FxVbZ#H06PE<{sWZJX{cHct(W)J zpTZftm=SN;s8pNynH1dV2KA(mv}%*JP@neC0Xoht2lh*2zp!@FZQ?n z_#a1(B&skp)Uo1H>8xDkK&R!31bVw?Qa)^QN2y$G;P z#QLT_{#YZyJu}>NlzU?arF)rNI>har)pUvny64`=tToi}lt9CGU=E2g4h9A^BA>wJ zrTI&junj8;ySCo+;nMo{u(b3-;Z%yahEu}p_VZG<5LH2uvC@Ij5|436O~R;2N&eEa zyHpU)Nol_Jcg6V!1Jk4%Lq?#Nj5UnNhwYp0Z6LefXi0ImS4Kz;iV>?<$%wC9vi;|W zK!}!(LJ_Q9d49AE29{I5ZKB9UBp8W+BB!xtL#4+xZ5}$Wociq(E8?M@^ef;L;FR80 z&h4W{^g_e7fr3uD)Ycpx7o9DPBAZ8@!T5pArG2!(TAr$Bw6CSUsegNaL_>#@O{=C1 zd)1xI1h+OSPZE{H0Ph)MVJ37p-0`l>Jhj zeN$UFO74f?LoKe_Cp#%%RkXAi73SELNWaUZmr-^X(>HgMo_a)WF$^CfSq&(r>QMQv z#U)6%bcE3JiqY@;s@iCZ+QOHcFiri34G|(^#v0PF#bT}4147aIdV1g%i9F-?XBW1^`kQOe9m5k0M z_D$VO$sC|$_NG>vXy_yGBnYm31TGx5^Bk??s{7Fpa43jthoI|X_~i+%VrVOiRegjj zhh5(FQ!~0*suV2E4{#H$<9zMEn?`&V8p$>m7ePHR5z+=1@}yIvbKK7>g-^q1p$?oB zk8SUZh^o>h7!wa;Ok{?!&>FYfPn0V$ti@)T2AnZm}$ zqAwDj#=~nhjMGIG$a%@US(qKfmw8B;@kAo^=99)x&LxMw7W$3D)X6E4kSk8+7E3gjWJ=R4qHh+zGFXytOlIlXUiUU3BY(r`a&DU< z65TU(7yQG(E2VunsFSr@4+f@$cY)*KEkN7ghc?fShB0ertTTF!wL9<%29{Ss2Zrxj zo--RxH&Pw|4fIg!@LelN+YMT4+gZ?`wk9a9M4CA z7>ntQM=V1_JC~my3-2tKLTW{{WfVq*ha2rLx0RCZ2ZilcWxF#QD4JB=>z^ldYR}Y- zP>s+=)N(((Dr(fk@_5x3;aNQb#okzs(lOW%*p9x}czTl?)t3rv#)?c}bNE1c{4tt8 zde2U`_w2uCYEzCbdDKAW96Jr*+EkmFC(LE^zH`D{oX+nQ%xBs4|oSn$RC5IUEFIcgoeed_ChaP zpqIO$qc936TpR;_Tn2T!gj&dv9<#k9pP0kf`CgUe@?_Eg#|h#mgag9e`lc-3(rk_= z`FBGf4GkSy(Fa1=QPK}%gVTOr(&a-#Lm%NX=f3^0nB}zJR=@m^b6aIA~6T zI30~U0p_#-r^B#>ZBF~(^paRO-<;;-v|lV-Xif`pdU`C}&z$y)2HUD&0&Eq_?C$8! zUxbDle-YzB;x0%$ei);Ou*2v}f=%(U?j;&Ky~P%nKo?M$E&t~Ao)?VA3s5_qu;6N@ z%(Xn8e8Vm`?Y?!*fbi#qgkhyY&)p@(& zuh?=E)wx8fgOS^^&2xQiw82-|wsDfVjg0PT>}w4H5M>GHUpzT8p z-8&kB%nL^s*)+P%-?wfHAZ0@mWuxblF%suBWFftoJKGsr!-hoK7ff1`m{!jAyPSM9&L60|3gUaURCM1bd-@geu2}JU>E&Z5B5to`_`=m zq;8Q!{m^rdZs|HsLbo1Cq+M;&lEk!np3to%Cb&$E3eeUK7o}MKZz>Ne5>+Q~`G|P) z(#-aq^)HJA>u$$tOb{z9$)l7}niUuFiD2jUW|~lJ#Ock^(jq?h>TG*AK`Cs92akm& zEdaV%QpD$Ao!hrNpvNjtX^xf`w*7#@#G0OHN31g56fG-Cs_2D@ic;gXqIp(?+O+na z-ZXU+jN_ABdB|1TDt3jHyoQwtwk|VlC5dd+bGuYl*iM1kN;XH!3cCn+Q6jfmlN(9Q zP0za#lC+$6bCd-ls^OyE5R#aVYwc)zLz0k&rfjElYqozV?bk(C1?`wugSx z&-=_xk~^!6rrV`*wmMi`04v}s*ksOxLGj$m7 zHsjLMRp7h<%vCrosvl3V_7Mzi4O|}TSei?Sq74yfA}{OR43Zn+uAu?*GGt2z$2lEY zBoS_9RW-o@elf`b)_oP1A!nHpGnW=lO8a27#ZoYTF$KTS_7fPp2-?&0yY~sqU4Omd zAC&zG;7A|dL*uIZBieUPUCjkh+_9b#0uqZd%kN29su1=~UCG!hwMcK4O*H>yPz}v> z-6BBt$Rr`}20hp8_jj$aX1{0Z3vT6Iv4elzb1>9|sl(9Y?8=NJ=a1y(P_VW98p2cAqe3pP+ho@nLF2^Q*e(6FqcTBwvG zrPeoTCz3)D_DqGo;|>TdA@IN|*tADbG>Y_8J+Nvtl3IOk?AicVB-fbsGt^jK?Gup< z!X?A4{w6j_$rKVau}NYfdTvD$Dn#%7e^(?4|JJOFt%E3y z_6M<0i0vnR?dg7=;x^CkN3>r|33PG|9lcF3j1Fc}xD}TdZ;!d z{xkIZGU|@KL&p;}=u}#z3xv2b50lq^u+)Mi4-*?*q;oTsn`Td?a^unS?kJXf8NQbJ zoG5eez>XE}Y{iTxyi@Q8I7;2LGVr+}P(qB*h49Wwj;C=)F&S5fbBw|;?5bX(!wxPP z^*UsRE0U;QdVW+L?lj35b}dA7xD}U7A^S~il30kI8y(ixC3FQ{YKv$`gz;syHvO+4o1%X5TLh z{Ac)m*c>ty^PW~Z2-#~VD-2UAnVz6}nFa5v3$s?5Dm{{@(rQyBlGr+P9%oc#*4Hhw z{4K1NG}sY_(6n%okb(^)F*|b}XH;q7t*q8=tZyM4onTg(#LtW0hR|d+QAoiCl9-h_ zk29)dr3;=xSr63(&md=1;!6fYyPIRg=j+FtW z#fTHQyf}a98Imuyd4UiuE5;dImsn{rHzgRHAC+AJG1;cjtF$j0xwdE9>6$B6{tjwiO{?r%R88$ZD* zOf~mo@2Jl_>-yF&-|Iv|*eWWLP`~!7M67*NchixC#^*qYqqy5=o9lgkgsNau7MHf$ zN+Fp^vIGDtEYB8|c7d-$CLgM_>(KXXA~t^zP)kZB(6~x|Ma? z>aW{IQTMCC9^LC&r)wdS##9lvZWA?FYAgf2ta~d!tfXy2s@9G6CcSGoZi5|ac>TUB zlPma)sUQZrVCY4E1)o6$n-|}loaBop$rDWSM6$93!(TKeEb2nD#XSqz5h!;>j5&ks zk%sY$_!NP;eSs9Q(je~Q+YOPp1<>oR%dpw%mqOgz!>Bv8}C!H z1=g81Rs}VhM*Zuio86GXxpUxLmX>sMnLpQeL~ePCQM|h|P>ApeMzB&qJlrCoS$L0! z_sgkFp~HOyV{U4qY7)Jta?xv{cCK5ZYtbaulhO>=gxcHQgGq8L(T-3fE3zZBm4REd zyL7JG$o6BKgnPvex#8RF;5JL=A>`J{MXw_b~6@gbe-Ri8pq;q&((ei+smxwch zTV=bYF_`)FjaRi`T5UJ+=d}GED(t4mvU)VU%eZ=D=xy$TWMoXjW-eV4aQz8);Zb>u zTkY5@nXw#_?x0QJ>5KYSJmt{Q#%Dw@0qe*8;|;*xT=POZsSZ1B2Vz{osT--#_-9uk z!Y_(4Uy~gD32D~8sm~y~@x!KscoKes=CbrOv)P2baWnkHBeAMx?n!1XQ5D4?Bj@ro4}ld@PjYo&d_`NMyz_N8nMw$EP#1)V3z!_Kf2MTkA}9UkSK3-e1L?np$EaHZk>|2JI~fseYm>n zAiT_jm`dSJA8Lf|{{!j%KXBHBKUf_;7^{M=?8g%d*sq+V7J*ft`zKebw8rd%k+xIP zb~mTD$D0=hHVGiRR&Mb>QI) zSfZ^n*lunrx1bLmzy(2+Jdvw!U}l;XZ)NkLY#5D`)<+WA;ez#`lWNN*W7-;OT{?jf zPBmL!RWuue!t7`!1Wa-Z$Y3S&qdX>xJn-mEe`$0q)SoL_f~7qM^G31?TCzqdyK!sb zl(yf&k3A}vPCq)Af~TQ3XeOun94n`;>V{LAB`(^nH{Eax-h8^;3S!N5N;7I1K5mZv z5*$-Y2<=5inF)fl&D(t@V?bJ@u ze~g%rVn7cS%KiB$?vX%A2Ig=hm$#3*e+Qz^YN<@y2b?}r& z^Odj1Ld`$oTFPI48+c^fU-$HGzOoVieBjZ>zqa(==5{SvQRy6Lh4ssKI+4quVM%^M$ zfwUy93=Os1Hvl`dV7e{w%AAafd7g&!3bkz8pVce0%eWZr{|Uzu6{ z-mo2x8xceK!*|_xM$&uL~2K}AXr|n?Mb{wYwyFOp@`pF--xV3`$aqU8|~PS zB>07pH3Yj2yHJ@mD94cXW_XtvmiLy!RT_x?pg#t{A`F0qz%o>FuuHG^z)-oBxxnGV z8tmlIR+p_}_mds>G>OXzQLFnq7z}2w#i7JkY&Q->K`gv08r~SI+6V`&etDx43C!!| zZaR*JHqeea&vW)*BAMvJrhUeLi?2(6c7I11Mw?r1?cx+A<|uJ4#~=;ofyksCtZ^2@5)9dnJP6*G9hR?AqjkbDUuuZkTLO>sjCN{O;WYUiiD2o zcE`Q+iDA@V` zy)Z3=0|70p>KAxrd#~p5Se%!H+1~LY7TypIuVVKct6C+~^8M&I8o^nKiVVWY;OA_J z_z0bCV~~xf#L!A4&O&jUxqH_vXGKFVazuKOdJwC6G5XlOTCL1j0}pN5jix<;-3fY*Jjn?lwty~dLinXz_cS+DJ~_>R$izq|15fe=+^+xcjjD?&Fk zqQr7XqJz-6#rX*f%ap9)2jf)-vZ&Mo={anr0BA2C4VgsCoG1eV6i&iK78!x>hFW@s znxmm+ml*dA4p;*DJMIF)kza8!v*faMTs3x@*^bwz$XHg+zI7wO%=X@9%;5g#Zu3*AU&kx`aK*4+F-#EiD%=1PO?cU8spw-mTmArAowFAEgC1Vj5^)~;U z>qOWaF065fYm8g#;rsS)cq?fvS`SUN8?C#9m=9TN|s|i*bcIh$p>Z_OWm?dOfRwZtgPVM*6y^rZB8O&5mZYO{268b0Ocr zE17V``eRZTcqLCC#tMcZf)rLgb#43EJ{1;|4y~mxycY5gHT9^_OySn3Xo28oUKwo4CPBXDasztO#6OJ>p zh`-EQz;S*Z3pOpG#H+JfE(O*x~#0ke5f;izA;6k11gtGuR;bW1d?NPjsMRMT? zBQO?xqTvk~S&@Y};fdOeNUqHjv8pGMYQyXP+NfU$J6BGM`>j0ox!-rKJu2Uj_9>i`|U@skBbp3gu)viUMpN2bvtMs}j%7h~H zjC;|egfjF5RxQGvnfm3soD~-`Q@pYv7{(6N6rIjGj!xDm;R&4whU{jh_AwP>=woNd8!yYmW9W;=-7{tr1MYt|l8GE56jg(j1Mt4zH=+@4$U)sm9l&x4^jX+{;hAbB}MwIi>Bt;F7w1c03+|a75m5 znG7flZ(}QB-zUnE?v`tZl zEE&Ve!xj7NbW*x#s7cMat~vfP`F8NxB>q`es*`%D=b|ZMc&G_43xXl?MUPk|uqoQN z@h-g?M>p|>JFVn|>mOimONZw&?i?*~Pi^Hn5KOJ5JxH5noh7OICZ;b6w%!|8lB;x8 zjnS&D)YX`IH6XC{oZKR{c|+Y(TLa##zM!@@JRd1T{-t_cd|t*pygErI2f#Tl=99i2 zsZn*b0d6P-2UcAQV{UsE!;eq#x)=}N1I90gXFFUbc?b8@vhi&e$N45``OY;!&k7m= zG+odHpgDr@xkl&Pf@*+n7Zd?{Q4rk*eseqD*$l)lO6SWL%{A?>K-09p1=6%10BKs@ z@#a^i^PNusy((xJkft30q-nL@05>ExEb?NV&EYi2D`tod%1( z0n{jb{yxw+x%yL}TP43=0JRD&1OFcp6tL(#AmzbjK+1!mK+1#hK+1#LfRqP!0x1uo zK+1#1fRqR8fs_Z#OL?#bNO|y6AmstS$IS05X3JM=wa)zJsRNHBTfX$CS3d`uUVX$~ z{S}a2{j_qUUV9Z`pYJE$ux^D}Zrpxt{>ia%Wmvt)(pk z`m4090qEbQ_FuE{p0V+MWaI6y@%|3P@4;p}M}Wpi+TJ<(J=km~2&A+kpklB(+qoF% zvl8zL8}BL`ZyZpG#G7E_-2+rAw3U|j7!aQd%yu3J(za~@(suk9NZWD1(mt@X?9=cq zI?1m$kk;i~AkD7`Nb|eO(uP~wtw4Ps*=%Pa(BGv7QJ{|mZ3CJrZQBL(l%QW)S{_~k zu4%6ZdPArDfG(B#)dBrh;@uB)lhpJ9 zpizS2K%)gc3dAp3W;PDdFgjNBh{nZp8?XPA5X@7MW(DM?HuPN5rKL#{jYWg@(nV_eD$^|_Kq_zJR zkk)<^(AOoGSAn#r{t1xEqZLT`+zF)eIOPm%6_peh1MyqD+0JD^s?Rq7?U1VzfwWe? z0Qx6r*-k5vYFKW-9Y4+l((&UHKo3dUK|paqHvrWNx*4cNN-G0WKF@T`%Jgac|cm{j{|9)&j->v4+PRW4*}9T-vp#}t^v~ey#e$^ zDec!lW@G|VzWfbH%g8*-Eh865b14AQ{4y1k9Y9N09JKKo^sq`<) zcbqAr*;fK-uTlb}eO)Dx@@l3wq1|n1D=ck;rTxIter9RA zEp6hzxpiIyG+WB81JZJr18JQ<2c+#-4>U*OJ!|9r5U5sY|7mHj0cqRb1k$u^KyxMD zpKQFp1I-iK5lj1cfh*q&fKF~>PgPyvwke}jQ^ge?KmQ9KOvxX5D~koJFbfT+dU z&U_&Dj`*Mg(3ui14#Y2-!$ScYC$udRC+Gtp9kEaOIKIy- zv>?!2K^FpPimQR16xwJYO=!`VqW6K$lAQly zX!*{m=eQ%{#X$UedA4&EkhZM`h+i+yb{1ROb3k8`TpEFNwEwZadKl=-a&>S&x7<=7 zEw|jz@|~GLIud^!NPDDLfV4;Y9nc-3VXZ)_*#ke}wrC{K0=arKkY23*9Esp|eE4Kl?Dy{sfrH%X~zOSNX0BIS$@NCJQLdyYCS^<#q;8Q@F z-)ta$%RSp!VrlI_izRI*kftpy#CN@gb`y}&egG5^+K(*lCqOE}eL%{|4nxa#{s%}o z`LXjH=Y8S*RY06oVFn4L7BB-yb^I=io(1}u#M=y{wf_l_&YnJXK5`Jvo&@x|0o6wR#swbN)M!)+$is(uM+Qypfhx4W#iRmi8Qw*6RC~_8w3j z*p==40Z1iy$i_S6Q*Id}fV8G_fV8xTy&4D7(!OqKJ8ir@miD2Icj|?1&O?E;RwFHK z8PHOx)p8)MRm{d)YvZj4(lP#7Anor%7vVk0l6DM`ru{6C#=8$lf?-(l*(6Z(7=4fRqQB7rXh5 z1^TR%TTUdkx(7(xu@Xqzu^H$diMQ3p`zg@RvsmZf0jX7dVu0hkCA7gnN~;ChCbZ?2 zb^z#J$*&Da%l!wC<`=xgO*;li^Q*SB$AC1yZ(7=6AZ^=e1KqYg3Z#5~%A#JEx@$5Y z2ihyOIu}S=IRt2p@SqrIhg=N-X*-qzy)3kQfYd{I2}tc|JCM$BTY=t?Tn+*KSW;wO z=H@a0XtU5R2hv=wwX_mTn+0^{Ddg^AAoa~w0|kWkMWELtmnVU=em?=yoZkY{oZko1 zTyidVubvL1SI+~|tDgqan%)3p3ZZ2T z!k8>57iguRvw-dw)DP%$f^G(?7gPqM8gU!YS(4u@pnO5KKzV}Z1Dz>oDNtWQ4*+RD z{y32OFHZwKF7o&mka{;ivgkD+?J<99(Jz41L-`|+jv9w8`s5X^5ArD>^*pWtQjen8 zUcDJeJ(OuS-km_|q1+3k-pGSM>fL-5XuZ_*MWA{?TY>Huv>!-y{7*o-9`WBmt#Wnf zV0VnV5lAIC0Z7NFT6=Y|y}I09-3X+$+6|;**q^&y>TA)}KwA47fi&$nOM4nf zTeJyC{i|OBDJS2zD0_(G6o}mV0;$|C28u|Ft^vAB&~-q2Bwi_yYTZhpH|6SMKuZOE z9cZ7#d)~%-+g?5Q)9}(H-VC5sqHA-2RM+kY`cFyw0Fc^83y`J=UgbCqlA5_8&X2&6eb1f)4X4x~9h2c$V~uvgy( zQfq7hQoi)L240oapg)lEWhBtYrERwYDW8`EDX%^Uq-h@o(wcr5NNf5{OZ%>+{Tk?O zDdQhN>|?VXXQ(?5I1@H6as0jK4q^C2GX=6?bVy@)!Qts#?roOY3nU*1CZwOioM!o zukN;2&l-++BJ%@$;bFHgQcLRM%a$W&sat2Z@ zi2<3yaWt@GTBX<_EodH1ah`wA8q`l}EpvNU%70_1%-DXiOkoK&1SyT`7 zeTnxl&?Z4o0xc8tG?0!~F92zKKLGlPTs`-C$N7PvOMtZB7-mrvNc-n?Ksq9R4@gtI zY~$^;sMigS^Bu{rKal2kCD0t9O|e(!*{ff+w5^u514!4ZegUMt-n&5B6P{7*w&*M% zZPC?0zYk)U^hrV08Z&~ib41Jay%Ti|OBt?U#am1;ha_6+@i zv>g`$ZIQH>0clOI1KKRKF+l4jm+?TF%Vc|XI?x7*HwWk`i8mie<1Gcs71}+PwgyOR z@C1;S@idU;@?#(!t=t!WjI<}w9HbGaQzCH*jvj!e&6+RuR0 z`}(E5`g@>!X-Duz%q0a42bv*h5|Cb945U||wpZT((lXuwy1N&B^us{Be}^@I5tus* zDggSSph6(6^F=^f=gWcK$fC4{0I9v*2&D3Tz@o1LZIoP|15zIR7tk$2`((&PR{^Px zPXkgNp9iE`e78l<0iB=4a(@J*_WM&HwclR>JuW%F2c-7w#1gUjWh?yac2g_9GxI_jMqZ)-QniNG`ty(p=uRSN{m4 zvOEZMy2LwV<7JL=oHK-WDv+i<8%S&LNg%C3e;}>FARw*5jX+w1F+f^I6_D!W0wC4N zuK=mWJ_R&SzA3?Y97_KKBi~XfTk{ahfG z;8%d&6B)f^X>S0j<+TFoTwxkEJp-h(#c$YnKLt8duKp6}EJ42o(lUN;(ns}}*O zK3@g&4WZotr0eoG0exC%Q-QPw^MHm3Edum{pnHL?67(?8^MW1+Qj2;TNPC8F0jX7N z1$tWI?F9M{LB9lgM$n&u1_}Br&{qZh575^Hol)V^`T{*Ew975+Dj+%+mmirD+Uyb7Z3CE}Ti#>N~@QDwJ*P02MFl}P7hM~fC8-k%hE%&HU_A4ra}u}hRI ze~sq@ei%e`|N3s=kyrov>)tJRvBaz9#S*V#f9%dOX$_w3wGB$i(_N-kjV9EhvBggw zLri1>N@!)`)G~=r<#wqa9vL#(bx6p>yHX_P#`_eBn@wVuzsc-a!`<2`Qf*91Wh=-% zrCnmf6wG~QTCLs#`8W{Y;*sr~3-o)jf{TD27Ie8qHv(x2I2z7aNrBYrw}O6zv7lk@62feI=K_S(KOQ z*6(bfDU#ngKw7^GfHap&fHW8GtJGY^0cqPN08Nv$6M;1CZ9tl~)}lo~n#(F6O&bNe zP0~IDq-nndq-meD=p`Ucu^DKFq}U3iDe(AKx!LE9_ql`)%lkbJyRT6h8allEf*3#L z-xm(~d7T2GYHg$w5k@p`A9b0(M8QyhgW&xH5XJCC(n@JZZ{WxmymB8xFg>7CaH z)Jjm7*386M-OJXo6m*kcA4KEM_y|aIolJBEna+4d{1895Qubh*IL4le-v~qfjN`0i zK2s20fN&~8EOUY%&PtY1jgWDtBP1_oAY`3x2DeXjCK}XRcFd5L>(G9QdOMv4 zF%r~c*NK0nMvMoyRU?R0BZzXHKY^P{WBE#>MktLMp)_hlG<+D3$-w9jizk2%05-op zOJ+y6A-8-dl|1_)U()&GK?|pr^ZWz+R^fNOPo7M}IP_;XazK?Mqjc=}(s8BZCsvQH z95&2zauf>=7$bZX_bVc`bC;mPYSLc>VgB4D5iv@(zfcR3|EvSY4X{9FP$b^xsD(Wa zy7H4q`AL-PG$EGKnhjEGBJYy;_G)ijuSS~GTw}{!jsbSz+7i(GTw@w?jRsJ50shHx z(zqr)m!C^4vpX(vjYGLaq+BA(bv7cE(zX~RT$*>JmQ|kh6#ti%OW=J&Y7{Tb+JtA` z_(cwRnWA}O$bCpD)VU^{vw9TXdE2=rl(V`NpGPaG--d7Lc1Fhp`LvLpi}soaM?m#F zGeUjNM< zb53!`it6f`+S=(0X3eizTy(A>!H8Ud% z7cVKkqPTdnQ|ZmGZoyr17tESnw_xV{n#ghISv1Jh_Z@^GpLMd07vgs}es8!9b-d%R zZ3oQM9cRTz$r|@asP`ZYv$@W&ybg?%R4CeKC-4Xiu41r3W3a5%(&_W-Y9tEBy5Y!i z!Sp+7p!B`-m^%qG7v6D4&4P$TV*QwG?t-}y8MQgeR)0c!XdR5H(`ER%2iwP3w51V- z_zhS-+x$(09DBco@MeTBBCJICZG^WW{0_o}2)~Pv^&16EIn}uqh#J+~DK;qAc@U^W zXpb0_>(Fmzir!8igL0i4fi&$+2IV@tY&`m^Op)v0nKzlQxbu`Thf+>bLWrC%OAG1{ z(q+3GqVP^qx;)R{ohcT;qVi#ic%NbyQ^b>zp&UF*S{%eR_oSo%Z!4(Zel5(7pNhiU z?C{Ql`fb7P8cs~Bg;WbN7sl$eOPL9JghZOouvjn9j zOq2XhGEJJH-!y4sgYdJa$sxCA(_|a{rim^}O!GGgX`1^HV*S&37vU6y;MGcwE5Ac{ z7s3MwX_{l9F>0FBEHzD{T!+)d3|)d>;c&(0>#%Wzh* zuID2>3*iL_Ddx)&Nxcvv^+JepofdNyqB1DqtA!5l01fMr;^cB~ZkM6{-#~Mj$*6vY z-UFJSp-jU{vVsr(>lkWXH80axwx4M)!WLK`4qvoc4qs&2WtM3~$~2-}XREo|+i5iD zq%v&|G9B#GLNC)EcReR3LzK?wUb-5Gti++{mO*PFQMA)))xCy6%MF887zTaDGKfeS zM3n2ifYeF@a|L-A)XnTk?_#7MuA=#s>@i#$;o}$6P^fgJ_|%Xd$}hjs+VeCy z_-&ViuFd{C2q|q=*EqZi$a?wtTWYKpUXEDp2xGOJPpZ`tDSwI7YL&JZ`6D2le>Q%re|5XfCUsM)`yi8-+ex~h$5>miFM@XxE3n8tR(@A9-kur@)tyXD`CZ0zr zPn>CYBGYSqTIglkT0hgqjvjZjG2Lq7G_`LkGELZTR}D+WtSN?BTscf&xcgw%K2q5%9h9DI7JZ0wm5*DlQ*$P+MLpcAsJL$N1Zcg#vu&gI-Dv|vwoIyM9Mj$ zTp1FS)`a*TSEEy$mntUvWviS9_(B#a3 zWiC1;d5x&TaEbdh)EJ4BOGK()N~3-$t$QwUEIGb4qB`VW?9($ZmsS)bf*h7hbnJ!= zbNR%xG&yzM32=&gT$EEp$|<5;hx}36R)f6V7G4*RSL);ATZi$6#6Gj5rFc2Hm}QQW z$}B&HEJ)A6kB5IKje<7B$1bL!Qt<}fy2Mh)=o`n6uNX0Gn1*Sx=>2nyGV$I4D?u|~ zHg|!&m%#J8aqbxjt^vtCSeH@wu?+(aaR8K!^~3o}CchM6KZKVdIEy=v{EiiO8KVLw$rgVbI7*@zV{7jvT3x1|D4J!?PI8U4` zrh1q*2>H4P%OcazX6w@xfjKN63|+~750hqL)_lt>B4rj)E?0RRrEM@Mp@(k27CvlW zFAJuLYL3cE=w`OnO)mU$P|26>gW0Aw@1cm-lfFKT>%)Bd$~0`+mH3VCkAHGxsGf$# z!nQ3;Q)`1zC+Pyy(pnBH#agKRXMM>2Q}7!i6rE$Rj^72_x%vc_uB2{%4*lPH<%<_*&`A3xNG$W$Y*b6AF`vHi4V`>d$ z>w7Z(qYXfxyH;zA`g?ihQPSh!oTnowbhAgux^~B@yDX=Olv6}H04WVzl}Bb0n&uk5 zc8;{_;~%P1%{sh8^$V_Wy`0j)I>EVP7_P5};vCJf>5f|w%Pk`17Lm>}l-3AtC=Ggr zSK`U7L)-zQ>s*Dqh<&1^cxBt+HC4gYZ=+Np??pxs9n?BOZe*s#Fca-4z$5F9tbdz}6Luex`jf(ph{EF~%k2?W! z@MHJGgQMAL2pRVS{F?E*&e!EK4ddL7-=;kLlf%30Dz|LRrUdB+SVY%@n+@Dsm1A*( zLgeH214)aite$@{H3%AePqUahG;g3Op%honaE9iUdd_Jh?5df-J=hM8hG3ZGNdvl) z3viAuP?k_XkC27)PMCJhM5+Qrxz2ubwKtbpC0?%VHPCn;SsL$jD2;bIG%ZvmjXQv~ zNAAN$JO1%28)tMusZ-rN47u02G5HxWXX$(M>`B1C5*$9Yf>w*7pgCij4sy24IQ z>k2zjt}_#{4hn6KK{_pBir(V(6XiO;!c|TCjzPJy{;u)3Q99cwkg@#n@cY86K=a?TXByX$_#g03kBrLk)!5%~d)sbcZifb zL^@+v8u_F&a3>A_f;)mnaeq;#eUHBDXe93x5*Ol+D9!6a3`S`;gO(3J5j$rDQUCse zUlD%pQ3l{0ko_*iRk%LH>l=7oh%4--8vm9AcogcX!c*&V^O0rJO(?-{r`yqYw{K^K zEkmT}t!u)bx^o`v#+{V<&U(<(^h$Jtk?3e}OkD@834?NF`mga? zK+|~iEHxfIOCs!zai1#bx+mszBzzx{@cLVzE77)WdF@DT~s1oBWdfhgB`1gUtnx4a;NDA(Bmn#Oz6pj_v$ zjmI8JZ&t_)#veHIHxlg@Xln-0kKaHX|gLa2zJ$Tfs|Z zA`~1n7@W~#s}a~za7#^uyi^k*$`!-l)!s7N66HESLt>5hwn4d07P8fN9BnmT+9q<{ z$u*Hw^FyzRd_T`LKgrWEYjP_jOw(5EqFhR^hGqJ_8q`hJ%jgHHi4duY5b69-XiQ-NPLSDu^+g8JkC)yO_unBX5VOK_E~a9iT*xr zUYH)o_V~nkd*LyO^JEBHsT^4zSWFOr=qnN^^Un(BU=3eY)EM!2Z>> zBfu`po}UM;!pDB5p&oMfbv1h(IlS`X9OkFo3{QuYz){ZpmwM0%wqShWvNJapsk9gS6VxWhfLYG_JUd34jm ztXc9nW13tlF7(d4q$>f%9;w*$zG2fi%O)aa6OpbEE3FwhDJ{XK*zs%By~ysS9@zAH zV(7BZQQ@ZYf`}RQ-M+YRE*=u<`RQNxhTI&CF?NlL##xA;d!%B|R}6b@vg{#J_7Lga zQl&K_Bc*{oX)RIZ)bG!X+$iHB7N=t6hb!jE18%LX62{N^cQYdWupSXBJ-lsyR()d@ z9@OcqZ_9GOCWQ@*o%O9*?dRF0t*V^*-)2P4@MMEGJ#>9KPM>7^2o3Q1;2cUG78(bg zvw-sDE%{t8&zJWT^J>1c8dv)YVu#@$l%EDIh@ab;_@}WP#0GTdt5=66RF+gu5Ffp) zWa4N%7xw|;uffm%pbX35@cAfyuO(J5CH=5rx8c!UjMIg)YVZIZHcSFw=VTpe7m2d4 zitgc775C&Ybfcxn6E zBTzx#dX^~757_`w7Twl$J5ICZHnzUhg-&Ka6rXxhWzCDZ;Gm!oSp-L>(M;v!|e z%`F*#^(lLImf4t{JPE2WcKHcZMh8bCwM!y($(2TzTxqb&lze*}F_dqQ38zntZ;O%J zxE}cSTg&(!_*PmnLT(*mTXiTswsq<5S=DBl*J1il?j-@cTNzJYJmWhE6Q;Se5cN{?|Lq7{Ysxd(a0*K~OKc9G%R0LwQb zf)UzfuD|)C^BIOy8-iTG&Mzld`-SKRl z<=K}{0?(Erw~8Kk#t$9o(ZhH#dhFQHO(kQiZ>lI6F*-D^GA+)j-W9spBVrXG-giXTuOfdA8sr@N6-1>&X}9hw=32LC?ljjU8KkV^u}PiS=uKzFlDW zcA@1Pk@Ag5?Ne#APo;Iox1orke7oZ$@NFS-ySWEl`$F1$8&OhOlHOpDj;>*4UdGW+ zS)LIo&xlmlltx`sT6a9-nziz5;r|7m{d?Lx8yA|GUYC}ZeHIy>U1WJiq&y>1o+*ty zQ(AXCyT53oyaZRgPuK-HqXYFjtSkECfCyI*UmG1E3$keQoa$XeJYLiskH9+ zcAe$hqLaY4quJ*d)8<=QMd+53XP@5;3pLZGdrLH{MQe?;qHjM zhAdz1!2cX6vK_2^IUkd>5JQ*6{z0I55C0l+s<|!GAVb-E_O-;qefMj~k(y;#wx3l! zeg6FFMT-|MN{jnlZJy<>#G;;eT@O3*L}z!QLb{Gjr2HpRn^zibUTG=$kLTm?el)DN zqU1ncR#BSLxD4@C8od3It*brAC0lN8{91JX5?mRJ+T_clUhe^AV?S9>a=9K?y@y{e z_u}G2Uti2L$XZ@=xA9oyGGqGu=?iAoRL{m+dvSXuokf1yhPPi~*_4fUy$jx<^edQ= zh>Q-Paw;Ptl@XENgHu`~@=;n!8KrF_&BwWSk;fHA9xZ6Q+6R%!gGl9}G|EG1CngV!TSgw_zuL#!DeU9zlOT^3C}DCB z@_6ca<$+xVk+h_do_*jJ@k%t8ugDhrcnc>g4r;kY;ogK$m3EYkKI-tL@Ey=m50(O52c-$ zJPJh$lm}+9MjrZs&SZJ~@+8P(IZEhh{CM_QR31bs52aBaN;@%m(AQ8e>taD1KYp2_zxvHdkjLG~yQ+u&>f6U64;97C+M4O< zc2#M~0uQE%EZ{|oEZ(uQAW~Tnsc)sUMzl+5DP?h-{x5n>BN^B!5J#3jiDbCBM?cS% z?En5wWOQQwZ>lkcJ}9yl|M#V1lF{OY^RU}!?!pDtOJ+`=Uvms&N+HT~50>wrpI}v4 z4FDd#wzJR0c$9BT8#TMoK#|85AKO zl>t`tj12xOg$#au5@c`>O1QO${^}dYEQ7_6L)s#c{;CjlaF0|nz>XP_!LO_gh*Snd zDg&i8A|s_i28mg?E`#Vo$7zT%8p%>`j0?CmF=0BBXQn}hvK5-&gVZCjn1q)gFPj_j z>_XJ-amTf^!9^S{&S-}~q>Lbv=P>+@)>Q;HnomR?U!y;V)YE)g;%)Q~j=j;xv2LJS zFS!DujVIE^6QyjtPTNmR;`L~Jbq|f-a2$<4o{2go&m{+KJdrk@C}rbyj(lQ`e*lHf z=%Mla=&2rQtNU@zidFiY<0}J*lmSF38K9HW6Jx+CwC=VZ81VHIV?f$|Hl@!AwKkqe z8&8z7@j3%MvBn=w`p+CkyT&N8&|MA~?wl#N#x z`NSH3KRE8+66|$!zImLDKQ^aW8&CIM8&9N-Cz8h77c$mg<3#Y0ti!RqSZP)?bVy#S zh*scjjEA~=hHW4&=P-^r=;M-am}AHjH@t&*rSIV^rePc|rmXIZe{$#-2?pbR({mT& zBW!#S%bT$q4f8C|W3jV~JkQf`5=N)rJy=dBT8TgVww-C10I=+8ge?CyGa(p=NXj81 z{1|7S0lh85>r`YT)zl*9e(#j)_L z0q@06JcHzC8q4v2VE|7C2-B7!Wcha+rcJg?BT}XjDbtijrYQ|f(^u)?f$cu-qi0!E zESg0W=~B-qc%PZ-}jQc6C@u?WoFwWWd{e?@Xa%7Z^A3I53rH2OqmsH|@ zu;`gLcQM9NMgRYIjv36+*mLiBcZXU}uyW!B=N z?tf?{s&5K{mrmWsgr4d$pQyY$%ZYT8ny<9Ym8=4r8XFoTgApI^Cy173;jOm7`qJA> zi$Xb3eBvD4uEc435_OP>hhyb^qGd=#d*Q`A!1`r5PUL#Y@o=m(Cz`>8<#;p`neZLD zEF9z#!AyXcBMi^2%OzclY%fM$av>`!WTwlB%G=2Un@WSIajte}$P-Bp2R4=GHM|v( zcj_`CzM#l2e@07lV7uG1V72(HJS3AXAA{E&(w_wF90(y_-ZijVuJUOmjfXqHjy~yi zosCyvuigrzd!44(t8;-amHemzepQ|TRVST49{wKU%b@w+WyLhK&M?BU7cdnMGYH|e zb?(Qkrq9BLk=gkCRCT1bWfp7@IFv3qGoQd!ngb{>85%TWN zFoX>Vha-F#;k5{#LU=vG=Mdh2@Fj%B2wz6X&+)v5ke}oEIYNGpXCJ~4!Zw5>5gtN_ zPZ6%nM7>8NYGk{#n;b`-qj+-wn$h ztoBKR(^p^9KBHs!WdNEdO?h|_)(X4TeA|bpsk-(b*fc8G@H#Bi+A|Q$HVVxsfB(9NbQ`xqfrf*~oI36uNN;e5rC5%RTw*an8CYR2k{nT@ zB{ag*F*O|m|Dr4X$zmPy0S!E{K5U^7}` z2tOP{p?%s%+k9xaSr{xsFh#M?vrLvqEFVmHtvJXRG5E5QL7G`%INiZ&I*AeWd1zSo z_6qj{S2?0;yj1o&3Rl%4r&{!RAbR8Z@|svh9Ay+C(=KCc8MK0Q{&@H;_Y0u;zmUc> zv<8d=&bSMhibt1E&T(j!kHyLOn&zn5#b~{soI{T4P^yQ{vB^DHCt7Vk5IPL;2(+E` z%*a%$%|uA6?S+t5n}u)$!W@M3N=`#qi!c`<$JO2l??>1NA^C7R!nFv`K=^fpm=Uae z9$_BB4G7Of*og2fgg--=kMP$B`y!-5o{jLo5f&h1-9LtqzQM;4(n`-kcrL-t-8sip|I@^L0-JUGBTrSZRO0$M%)b&PEIFms-lm0I^;Ij>!37(DGd>c~AmOaJl zOBRBrV+`-?t43cB)V*5gfttj11+6z494tlQfN zDb9IToJ1;4A{D37C{Cq$2HeJFw3}3HV{xRrhrj2Zj|*4()=ij(J>u#3y`7lg>+9i% z4Vy84;SA}r)9kFj{%Oy$iGQVuWfh=__;ZTz<53BAu>2~7tivsaJx?K$_GCoL9wL3K zsM6TOD$Qk&`)YVFs5dSyLW0!p=~=ki6RYOnx_>Q%X;@Xdd%HLXmczUqamK<(WZ@lY za;X)qPb@C^*~D`AX$@4~vgtbXQ!E?ZptzeiAfy(pKqO@ok+O+M*Fu!`qKPM+f?1HO zZ{$qjxU}d_Wat0br&o)%B(w<6#+QzhuaL}GShrvn-lkMNW8tzineu+{7e%5U zG-z5EmGLgbvOK<98%?#cEjB!&>aZTA2-*33&+>>!c|@ctq%^9K(hQGkLEyx!RYLSZ z9ED#(s%&}r+Z3SGU3LND9V_>khTNm_XPl3Ja=6@+7b<{-^J~(6o#av8OwRJUdo%e) zv`o8dBIOp5a!YCCmeP9S))J&TQEn|lNyB~Jlb2iHAj{vh?$g^oDwS@@r^CUnG|r#uAp>)xI1ezltGKGbse@Xt=}!i7?wESQFF zB&^k0o9GwiqxXY7i(xbGhB$OqEggWj93(Y|>(d_cu2QF*p|D)8Mtf%{zkyH2y1a{! zeduoyUWD*Hgsk815wbtH%F2vLWk#gWLMjdNm3YTJLph%_6wFAi%(wzWne{Xg`F@X* zn~FN7?sIBUTQ5ibl3R-F{x2jj4Y@T7zi*OVa&%b>IX1!Z_QFvnBP`cH8QBNPur8D! ztFj*P?H?oz zz;z7dJ43UkN2aGa>^(ZfGwk_0B9_I8iMJ!V&vZmz1zo#sB4rJcIs!_gBcL>wHG1E! zhZU9jq21n$l;sm~BG~MEMRmFKtgnYT7w8<6pD&Andi5I6bm;{11alS1x;SX#KqK8f z{0>^GL4j#FgpR>4o{&SAj_4R<(NN@*MVVV6ge;F85X&54=*^G?&)+~8MEEAc3lZ)_ zcp1WCrJZ!v+<~n9+i$$A`4&}Q4v*`2 zjLfkg!WJh*C;x>eR|YI^6n@?w+jSl9w(R*o?0pG*T}Ao!Nz)}w3T>cJcG5OLpdBu2}T*j`u9 zaGlxbQxUhg%nw$Mz;yKYJ*k~|mgDWrrl!kEb*EMheNr{_Nz0KKEk|MrRKwOX{&0z< zg6gj?Z~qc+0l;lJ&pG{z>-&@=P>lXGr8JvVRCAXa0^O=rL!VR)eNr_NqiQ5(tA_pj zXlro7$$YZ+Iy3%OHbA#WbzO zJr?(3+`O)Us+rC!;ZA~k6)dk$U&zL-%?yy3A&1p;IShct~+|w7^ zlHx2m3K@E3m72`MZC{LsV^sXtl@|jBG1WrzKg9UaO9~_AvVb&V`lQC_lPmNRyA$*h zbG0i;$DnE%gDnet+cRLd@duhSmFV~lb^$`csxNPYeF{RnYyIS5EuM?}q2ur)F8@9{ zN89cgYE>39_`2bQnF<-qdqaGAE(;j$H(uM2=a zSpf9OwSS4-tLU6n340}JZ<_3S#NvIZvq2y(sm+mD?ANiENn5PYpx0zMG)Km@ z$({`jvATQ(ZZ6!fDvfbHM4BvpQe*Tj!KJxk+lMgMF63M)pFXL4 z`sCY-1nM`Bcu#P+&+hO-`VJfKt$2KX?b@?~NnZ)Ey0ray7j za}cuZo*LTopYLk*&?nVHpHz>;s2+(WP)`9EcCT^`H*J|^Gu&q5q(lc5~GSF=BOyiV_`<0 ztVxcy6y;XY%N*m0D@}dFiu#E~V{P3jDyU?ZTS4B@F5|iawaKlX6&NZ|J=i2E)UygM z2V0kG_0T8PL!X>QOYAO1XAZWuRUh>9UmyI}k=W}#k};R)Iw8=$ywijM1bBD;k%!|R z>TShz{D>>f?$3&gPmV_LnL(%!r-p_%rZ{6T_p5l7$T+<=1{yK``T#D|vQsJXTUv?q zNhQ)JN30U#h*e^?jd_LuQ84UYD;0+5JkNaA-N!vW83f`|d!M?)ovFT7XYPFRS4GC- z-TPDlwb0gra3{j8RBAdytBF3TCi>(sRbm{bO3YRhTC1cpE3sjGUp|B39&o&>G5M`= z`0L@aZ0;_9IB*cRY>P?PHdNa9BUsjE@4^n(;*-_#EeQ8+t0oU~&Sx5zJAH%i*-KAb z|Avrwpcv{)wIt$Axz-{c`(oUjaEj$!YBI|uHaaEsx77cLil zz6ZA)?)Tv`4|YFO2)VKmrB9X|eey6KiERhH#P)v4-M&{#ZZlF^?x`>ClDm}+sJMJH zj@>CZ-^^pJl1_*5a^~SKwdr!vedorcU262nQln2kB$n9yiq2V%^E6AHVA#E8DPBwNZkGB2h+AC7(3|h?u_f2Le%+PO z<}gi$Wd{lb6@a4nzCE=qMyiF9Vc?NF# zdi7AIe6(n`-UArHUFb1%@?_#}!2LUK$Iv^7gSYJ+pKi%c8MtSK!*vdf%iB4?fQK0W zT)0dF#&yD2w<4FaiJ?!H1buQKA~6m`B<3_R+r(Q}iAJ-`pp$n0yD>3@mv}Tp9#+3e zxc6OzA93;7PgBFn;^N-Ho=|_d563iO#4!+#r8=nn-h9`X%{$s)oZivKsi?+G$7yhx zmaVE<->fx7pVSn6(q<(_o0XVLQ~XT(8TmF3^vx{j~qa6+0wYWKGW*RDR^Fre+ zN&t2$cH@A4C>Qv0xbxsP!L5PY443I{fy;*XGF?LS$r7SZp5Z95hZLRD@M8EPhAPyW zx2CiFiQAV~qumJbYLq<84O4WdGZ;~um;0jKTSC~X+rA;iIft=z+1ti4F7L+Wg-RRS zv^MCI+MrL?Y>C|keu=s4b@x9w9ZwzX)Ts_m4o?fT8((0j4s)s(Q9*I#s60_B#`kyQCooM+O6Wz>m z$N!XmmU%^E7ntS8BF=hfG8@V){4Ki|T7~R#IBS<3&20E&hg1mP-LSf`SV6O_Q<0|l z1Az*JCNs`Xgy(x2S@KXD0o*UK^%IwxpY-*o{-JMAALK0w#^ddR_QlFAG!8Fj5qR_NJnUHI+gN99 z=UEW)WmfDtBARjD6|OTM}H?Lm~Z$Ia?j4(2Hlz(RDmA7oBNVHaD}zz!K^02yeFR ztq`kR!kFH*xEUAI%#O757+i2n*Ke;6p!Q$&b2Y6*S4-(61rX-5z)c|Gz?bv&VAC z!@>7ixDVeCKjKQYJ?IbXvsK)Uf!!cMR=mc*Jphw6{{SmpTP=GQ?xVyt!QDilc^E62 z2;V@Bd02~^EjU|uUfed#e4!wRD2>~vdGN&!xNLE_5q=|FZiHvvxt*GA!;*BnZJdPVs#vBL0B((#pVN%w!2RfUjNX;o{5Zx(*rgl}(I)vqC~HHlSCPr<6Z z?a_$rN;gJ(YFDz2YD9kQYj0Xsg|;mEq-D{UY3)FC5_?toGWjf7VH1?k>50U~hI?-Y z?dKy}XlL2GtEqRq5N~;gJnU;{;NHhS^~JO|)ZW$BKM>+NSXe$hcE7Dwl}Ca9E-h0=7i1 z7R+~g#wiH*?x-OTn;%Xk#yVhNn)Z2n=DqfxPm_V__~bK$Fh$+W6T@pg9_f!r(*+H2GvyXC{98V zO9&soGV$UEKYl*z5q(hLdBJzL1>Zd{xYIs50>>TgI_tqSHU16mI)2pYQ`m9xG&J;} zJK0fA{^5C(&wT5TvI{-0?(J=@Z#TV;h;YiAI9RQ2Cl5*D>ORj;Q$1)I!Vg4-CR>-n zH%0iEI`6dkN5D9_unTzZVN`;%K=ua0T0E^8dDxfSiFPz{_bYHO zfqNC)OX1!G_cFND;pK2?l#5VGavV;dG)ns9XiZ`qtw{`XGU3az4p6>KYnI0HH1_|n z@xBFRc_(~s<6V-1@%p>sk(jUUixZmf?KyjFzN;ZZnD6_@@Bc32Ez!nHpEO?jGOdr0 zDv6=>6~0W1Cjm)pit08v86w{?cWf>Yg#$78KKAbQJm(9VD)+l{aqx8we7KyR> zkeJfc#JhtNaE#ue=tL&olRfe7x{Q0FOzW8)Sx*7#JTLpLL(x@Cyk``HekOum`S|zK ze<=dfIQz=5s61~!fkX=29?N)_S1(4m_aFrFFk?a7+a0Br)wDF{FDNd?lY!8>NUDn6 zA1fMS$IE`IBglbNu!r!pL9CrnWyG8%Y*vSA-1f!vypDHPZkP&nS4V}gl1XKDxY4sW}!4v;aq<_>p^)QoYeI} ziZ=e*$25epG!kk3e1v%)Uy+A7LPu_0fR0UGX)A+G6;kJ&-EHer9CD4rb2g!LyZJf> zKu_Dih9nx#v7>~`w5&qnX=kB++> z0K+ak06*gL?^yi9Y!Phs2&!bk3x4uNu-m%8;`6mL1)Y)Q(O>?&90g7072Y zJGunn-naY7Lpx&F^_)bB%eS#(}WPz+EG4S+7V9>rXArlL19NcNq7K%^CaQZ;VyuCHr$19x4|uf%RKXBVaC&@?T9{U zNAyWMlGt;KPB-l+_)au9oj3|ttXv|^zP^(U199HGynQD#?tSlvJZ!~T9yi!cr={LL zmF;+{r%wG3<|v{O-&fUU%G@036*c&M_^CYmV!YM3k#8$kfl#XGBbUG>ZwXu~>=dmq z`lQ0>le=dmcE6%?D{S{4;(iskBcH!D`mIp~+d0|b=@hS^>W;Nof4$@4 z3Sh)DaPwl_=HI;E!%e-%d$P;$0Pag+8uCgTi1y=P&hBViN*iVv;S7{uTmSlei^DV8 zzXIk7fHoTd*b(XM)OCF=0Q;(dCkI0_HmWTOY_sGS3f948ThI>oD7YPPu`$UC!(9ls z6E4Tl>*1nZ;I{{c0&q`;%aj!9a-vU`6MeFrB*t=*SmJ43A9&(-b;C{bkYa41s$zqs zFZVR>NvBn95eNFkqJ1e2i;YR1*P7!^@i=>68wJf_ZHs3ONG)-XfouoplUkxL)4CZ{ z61z?LWIJGNt>dQ|2B(QRg`6Clo9br1*SYOsX~<$D9m|EA!zPP^`Q-%qSYU~#(gB2y z#%*6$p)2A1kQl8SR^YSl05BTo@wlJ&>UdM6Bi7~9vJ-{7y*0EfmwT%r)4l@ma4J0( zE-jH)6nbUceQ;^Lr@*DP_QPES7sG)erYi=Q+Bj3|pFXL7`s5T_Vs|P!cRSpfxC^7b zIr;H-_8kcKnk9K?9$cZm&QV!Sc|!vyZK-zj|FAoHd*eVJrNnMibf#JYqu69J|K5g@WV?&l@xo-p>44ZgA@st=Na}??sTcaBUL;1nNbC)S`~&wtalecEJ>2i( z-iiA|+#liIh5HlSpWz;loa}@90Ne-RJ_Pq+xToPh8uxLy(WHOQ98Mc^DW*S(FNT5K zdK+@(xq5l{bFAP?%q3s%9BCZy=r|Up90$|Cx6|=~PDkl~B^|b261jGM?C{rr-M;<%Jc8mKSfH4+*ztV$rsmSg879@$7}Qpr~;GI&DXJ{G=Q_-2aGS@6vgKJ*UOfx^e`b&Bv+z_+jP)xtMX z_*&rmmyogszJCi}2Yknf&~Er<2wx1oV})-keA9*RZ1{48?|k@<628me%M`wA;L8%e zo8g-ve0Re49}&lo;rm?p?uU=f-B>YwY8Sq@0ksL=Bq%c^d{_~%z9@XF;QNB`ZG~^O z@LdnzO5uA5zErv z9VvWxUC7E2zI)-DDtw-WwVcR6PJL@_tzK}$2O%`(drwN7B;-ToYyUpjy@cZnjQ5c! z*N0>hC&7H<$0yf)Dx~<!<_fv&8$P+v}5VevBJjfym`&vtl& z<7CMlf&KjiFI!tozLVp{-6|+k$A;(NC6W_n9Mv)FsE%W2FHxRM8nV8o-19U?A|+Q{ z$?H)pyYPBS{r$Z9dq+uuxc;X8eqFimDt8y%0RH11!ktr!!4&TQJ=fu)!ou#YBZMyl zz8vA30N+&MZjqp7yd@b<(QTSHD_nh#p zf$s(3TMOTd!q)-c%fiO>x1uA;S01!d-~=?I(~A}m^2Rb(yc%zUZa_l zm-qEFeDp{lb2|F5T^JiEaG`aw($hYo*SO}0ik90<5bX?Tx}U>CK$7cA(J%{QQjngu zR)^W1IsKweia%Lq>1jbcXy8<0!{K9}vZf1d?kY zJAo`VkpBQ-cjm~+fYd$%!Gjv>Yy&wA2#z{)aq*KrKQ<6P%zxZK@CiTbT?45AG8#3& zi5;KU6ZP0Z*kuO{nsq={8Avyfn1O5ra)p5m0lCXSz6K>81hi{`zpxfD|LqK9Tt;Z74N%*)HgLWh(rxC-+Y zRA_{8(NelJB5CsH?a~Noeh8Wz%xv9q@{2k&LYn)TW&?Q`NX$T<0-+!ok^d27=E}SzTDzbjl(J$aVuc z4#=GbQV1jiov_2T1jsA{sRj}-kR~842C@c7mw|Kw*<~QCTa8)nxbQlowb(#d+paJW z>@l;RG7t_p*G_QDxe>@C2688m`wgzUf!u7+YzHz4t3XcPe+y)@fjkQ&15LX_!xsbA z8VGk-)Edb9KyEXTPk}scAY)M@cNoYdAUh4@5Fi=Yq~XNQ5y4~wnFC~&ffNBLGLSML zwFXiPWR*r>&jpL-&zs-vK^7Ej)d=l*1-Q;PkhMUrHxPd7=r#jk`*f#)doAbXK)MWslc;V3;e@i!K;{978OUNFml;SUkoyg! z5y*1}aw3qO2C^B*rv~y3AQ}6+wZX4~9b_QS0?9FukATcFkp0od7a0g2NmUp~9gs!? z*#KmXft&-R%Rue`veiJI0CK*8yaVJK1Nj$_XANWudXF6jG8IV1WOv?6fJ`=!lYr!E z1hr}Y{CV>V3cbjpRT^P!Ivre_H6pnR=HKr@3iEepgj}~WJs6WhxfaX~*AIX!Hjw*( z1T-=yhEJyF_Vkh#8OE6Qt!DHmVE)pBJ^4f}OVV(>D4#E+r?GXc#9yIXYQH03MI+^) z~H95g|o$$@yLp4UW|99b41q7s)xY3JFZ$Db z5JJ+^-o~#jXNpe_*VKoTbBLgM&L!typBy|$f}G^}VyKy~Lw#}%7c|N9b%daC=j(8v zoFh|^lOt%{_I#vI&Qw7|P4ar+)vIA9UVEN~ko2^7@oVdOs!t9raJYJrD`?#HV!BVx zQ7OndTF|)5>nNX`V+0MQ@f!EruK@7oYX(Bn(?+}O@ED(*V+9Sh&FjSvwp`$sa~wj_ z(_o;2n{>zevHCug>xNp6R81kLOCwdKtA$(bu? zlDA`dg2t`qxjs4U9)>ITd4k5RpM0O30zq>Me%X$Nr`+<8Uq6L{rU?3BufVIoCucs; z^t2xQQcgk7%}|)P+!qKM%CXzk`7Sw|5i0g2K#sdzb<@Z;sz}I5UKT8Ivrj2<#U!OWnI3q@;>Y}DS}tg2xNM`$B}bNNg`g2FIecH;)Uw%4Bg-NvXzaM2uHOt( z^4bqaJ?UxKbgAty=!>h$7nhqx##Jq7M2Wy>4ZS?oA6Jc_;i{5t^VPn%#3(Dxoi8_y zjBA;YW83>xSB-naA6KoQaktOQTyaS`b%G{&n(GBkt}D%TE;+I+8U&3y&2AbQ7fT^M zEqR)k3mSKt8(ncpIZc9wy(&xc^NdkH_U9b~Uc_}he{u6_^2uodnx0n5U)+^9e)kr? zoK`_YJG95NEj~FbQjoLKCufCE&MHB}5g@PCyI#iN!fUIm5t5$f?h97=*W8u7{5kb<0ULF4XI zHu&VQXCE#-oXDo9x%1WIlM_urPM@H87QeQBqCPnsu?&}XHyDtHv7`E$tPz^3UW^M$=TwQb6N^=wh9_|zE1PWIXwkAU-G5r zbf26vQjjwwXxw&qhEEQfwqfn(%Yw$;W}fMjb5;s+&K5LoJ3PxL=PQCH55H`Cw_Lv% zLo;um@>N0O&evCba?TMnOYob4+xqDPWBqc@6*TTXO+n6Og2r85m-^&f zE@+aM`!@v54*c5f>g7H;-xM^-%l!&L$6a!M?vwL?pg9}AO!JHH+#hGIw_VWeR5Wm`2YhlK6f|ezcQo!N z)_i(|KRv$`G;TQ$`sDmd&}8G6*B9Tp8I8I(Uk@R~T&Mk&PtLCe&HngB_N|+4xNDVP z&clM{IsDq?^=qFTR0G6ir{|K18{7SI9uYLJy5#)EC+AT^PSbZjLg(qt*KY;QQ!Y7= z`sBb|TYcnuG95 z?!U~Lc9>rdbCjOu&exMZIZvk`=l4E2Py6INBWTv)mv*@Dn0;sX)AOvL*@a)b+@JBu z`GcV8!Y}0>G;TS6@X7g;ph<3rw7~Qnu8{UKKFC;{}D7? z6Sm9iHJ_Zn3!3C|UiZoQyHCy=f(DgATpx|PC+ttpn}UYcXs725pPaV@O#yycFHZg8 z&oL18=Id=i<8J5Q^2zy!ph=#de+n9Rdj8>)^NyfNo}PCF4S(%?z2lSfo}fu?&+iKw zw;jIclk-6ea;O=zJ^a8Y=ff1_eB_h!p-;}oDac_9W~S$3pPYXQ8W^#-uIzm6d;W6& zx1ia9Ut7=r^2zx`(AaWjw;qe8$ZJ2J3L1C+^@&f;XM$!fetBK?`q%^ga{hx5^O@ae zJ~?RCL6f}P*%F%L-p_q<(gY3LRn8s4pIK-4(=$rYxa)gb8a3tKCxdnuaV3|-C*A33 z2jSP&bGlCszF0YIzQzg~_J+2cF+Mr?;w9v?fQI$`$=Ory_vec{K+N&jIG>#Hf@U&g z@cQMhT>N^=9mnZF4qI0{J>z|HvINaq(D0hKgS*JQawZ5G_w)BGpBx<3gSaM1F;+*# zOjKO29Gn#o8h3xOk53NHkq3=!&+(s?FeRpbCi>*?%)|7w3Z#eqdvMJ6ZuF;zyVOlP z%=XE_QA400u2u z?eI{aoWli;UGCA28VszwdOpG@=Ww5#BL&TmkREcM_|qN#^vlT+G}qvFyh`_xJ~>lU zki%JLdYW6#RG*ybf(DJLu%92Dy9|RAZ@&0M*tEmxJ~>ATnq?}zJG(wV)-Q)|RG979 zQ9e1x2%2dsJ%vXs*yNYPr?lq&v15F4jukYR{0p0}x&P(s{Bm#%6Xdw<`BGqqdU8v&i2WfD`=9pV|jvxy}T`F zu1^k*nnHS#%fT^JpmEE|_sPK#RiI%z29Gr@=NHxfd=&~BmYSWO0-qclZ3Q{W?GVRa zfyUi`&G*T{kyxM!AT8{dvu12u>`xDO5Sjbp7W(AiC@s*~^}Tjs+IqhnzWrmSXOU0N z@q)&lcaM4U-h98D#XdR53pvPu^=ozy;>r>A66fFhkexmx&2CsNn`@#EIoyZLG>{OE z#@mcTEzQ`AHI2*%cI9itj%$-brs~))P)HjPmJ4<}E94Z7{6fpIB|oN+h^F~KA?r1g zogveAhDK&9WI!XO3OP+9s}-_IBTa;&FczzULyx&iYW18a|IQW zrsZ@i#~?jjWs~W8Y6BmnbBtksm4KM2+yh9A4u! zvdV7$HFB;(j!LuhexpL#K_hGKeF}+cIZGg+fm8bJcEqu|@pj{iG|5_U zfDf6bkRu^S(iAD=M;iHpLJrnQx0YjbU8j(LXqun+XdY9@;hN?(g&eAp@v0%8sr9o^ zA@^yTeuey8BR47J&l>riLL6=Iy&QSjX`Z{k{5w6(Mp_l}j+PTs$O9VrhC&|H$UO@A zgGOFd$gvvvr$Ua=$S5^+Tc#1d8N+K)nw_4b6>_{riWD+iBMl0fspWJk#L4@G3dz?r zw<+XljXbQ7I*st{8D4WWvP&VeH8TAGN%I$tEK`UR`+9}U*EE|HGA_-|=|wh;Ms85Z zuQk`*3i(_kk1Axk=6XpX3pMhdLb5e7hJzq+*|ASmNRyVF@1to^$T4X)*Qp8#Xs!!< zTsJ7>9!>LzLVlu=R~534mOMcXV;|KtdG^3oBjrA%#fOA_$eBLm8$RR?AM$`gvUCbx zP{=1bJs}fNY=TM(zXBm*+;_rJO=HQk-L1fg(5Z z6(EyNa3jwExjyJdjzr9jHEyH<$X$(YWD5{pU$N}5%{LTswMKrVkP9^OoI-BW$Y%<< zNF%w^q~u#PvP>ag*GN<$w`$~4g>2Kv&lGZlM*gahD>afnUB>l&jU1(rZ)&7kA>Y-= z28CRzk!=e3jz;cK$axxhQX$uA>5%jjRPiISVziRna)ew-mBg(>$P%r5gF0k~3B#`NzoE9fa@76##UQ zXMnJP9ORf8SS2=)(}1itko$lvH;}Yr<)P}1oDv{0gXSzCTMgtlK+e%fZf$-3eEhXT zv>PZL3&=tMR-Zz~5Vm^00yY70Bc?x16a^GN0QxlGg*_lM0C-rv*&&T4ZGmT%nD5 zL_VA=5uuHF%*B5Ugt-`}xFijlOKXxw@Q3wX#8sx_BJxilT+egTGaoH6SFjvpE0C~( z{2s^`4P?%2NH>tL02wlnSAe9Aa!X!32hRcwnrnbOWgwpddCoxAAm2L-!c>0MWc>)Tf!$9hRbQ{RUKzM42!}Tx_ zd@sv|j6xA!rI9(J(aPP-Qd)w%;SDwT5Ny5u*N<7A`?! z#2)l<$v5~&U97kSjloqZxb8<0quH=>f3YQt^zsUUi|6SG8UgW(ifFW4$bW#;8Z>na zxEAH6xfTdd1#slN3}li)lY`cGv_TUBa+^VO9T3(*N6yngE;eXJ7s<1h9GW1IfI)K( zkSh#1j{-r(bV;6omOf_Cv;$!YI+E`L(rD1^Ukn0+rW**K$v9lU0dkp<)9J@UvO%*I z$Yw*%AA!7TAp0*yi)|pwfowOBbAjY&WX`&Q0sJAZD#RzBH`$2eZU@&x_*2jb_$4LT zK|Th;(s7V!7zLkeAmu<_G>~;b`V3?X5MGX)%YeLXAm0UYvw=JcBw!$~06E`4J^}Ks zfgG?z>e-2F9*}BiLL%;S`H15AAozI|jyr3EYzO&QJ-B$0W|ZaTsu5h1Ww7<{)oa=u zE^(kgLP%qBEfrj9X~Vi>=Qq0@uJ5V1NMmv>6I@eNT;+ei8_gBWN?b21F4CA>e8QNX zcDSN@tLg8n9IlBa5+;qwRVTRApwrs5`o?=4u1dv48k4JDaM{{8Y}7>zGmrlg8v)A-G_U;=1JD5B}WY`l8|@jmfoAaM|U)W#3=I-0XZ^rnpFBa;*|vN2s`_ zY-xSg;d(-Gk;dd&Ew~O=Tywt{*zRzRDU&d1Os*3Jm)$13`pIlpJuOmPq%pa^Ah>KD zUVH5&*E(^Xthh*Ha;*_uwl*Gp>{eI%bG_ms%_x!Be=CH4NMvTY%!Pxj_8}MfkYD{EnTvgv*?)WM1!sUbZ^sFS zPvzX2qPR$7)~1sLS4Lc}V-y!@Os%z zo8YojxbnmM?k9!3LW+wtCf7QHYuf84VLWVeZBksMF}d0euCagL@{z-Jk>Vna$<<+S zJ^k`QuRC0~DlXEPT%5z>JS&xxi(krl&*6GNagoO4>NL2XZ+S4s;rf%}B8|zl-ryQ~ z{Dm7Gu6Gm{X-uvzgX`SN^phQ~akVnxq%pZ7g3GqUi%VbJ=x`mWxJYAioosMjzV9tx zb-3m#F4CA>8w{>LKOd@dxJnckX-uwegX`wj&}9x+gW@8M$<n|ii>V6!i~`FV1IYuj)<8l) zIt*kRkS+tc4@kFxybYvJBZn@Bj+?9U^YRN8E>OP0d5dfx)*oePVZl7@E3kb<^KIWE zO}9wXEz)$03N@Y0F@N4dh0UK=Wcv#8w9l3|-;OtLex9O(Po*z!K30oG`ruQk&znC_ z#S5Q`H*dZz89pT$K9vIawB$m~QK%))*BtXz-ty+p*BtY8S{7)I1v)JYHOE4os)d@P z$jMq&XHT zj{G89fAHDmR#af8pvcx*ev#H%kuHTIT?$3{cKH_BTFWn*Z(Br>o#y-^TUYRD4m)r8 zMMbtX6=@qPT4dW$k>73^kX}TgEy2#c>p01a9wjJc>>zbEu*N^;syS~9^mwvu3{d~L35o)&)^X$^k zpQp=w9`akVp|-7eeR;IEGqS!i(j9Id?Cgwe4g?C8msOM@w6!(Y7gWvYWRI z#KJv^LhA>6)`j~Mg;w^5Pe~XS*&Obu4fn2(b&(`)qRR)@g_Em|6v8hHV#s$Gud4Uu211A!% z^Wp-Y7g$|NV(~`-{t&E^qtzW2TA>1EnEe+SL!n4dUnn#X>&JhqB;4O0?GFT-n#vn0 zf`P#DGRQ2eSXsy%1{qcxMP=v+2LgE~GG%!VX=yM3QW--iSlZkiY-$Nrme$k;D*}vu zmB>jbSQo5oXj&a=Xl=1!m4;LJF;(U^6s%~dZwZw*)Hk;@wU)PpYHONXLS?IgG_JOp z96Cf*Q&lgBnvGDTpr#bOL4?&WGsEf|1cO1(FF1u7%9aMpb<#vE0C8e z>*J8u2Uo>G8=HbF3?ad~#+KFol$4cLgc?hmO6!6x!6t*Dxuph)WPV&~t&E`b0^$os z^8$g=(qLoh3i+3y3RcT8DqFaulOcJDp2Ldc@*JquS zbp6>SAqqyR5+mv3eClZ!K9vbZ##$DaT1Vo_ac8uDQ(J#W%Jjw;q~dZ3BX%p&%xaKY zbA31}t_%_>iw|vTV;cdZcYQ~g#a-Q4#@cU{^oJ3?F&rq#tqS*s`y=fu@Esx4P-M3( z8toSClDnmm8m|_riVmVt48^*_A%66Egd&)ek+PKqtA*K=jv%#V!BVtg@iQZ`(Kk5I z65;G<%m1JC^ToMorUor_8g?+MY z5`_z!PgFXInAl>i5@{;Q_f-j}HS-14$UZACR8OlYDXZy?`DoBkN~_L`Tj3}@RF94? zKd-U0Rd5f;Iyw-@7wuz7enLi3Tgu`Gmjy*@Qj*&graEN0;@6Xa2yBf-x{XmsGsgoi zj(oNnsaH**lDq^eXSSJZs4ii)ld#H+Cn6{d%AU#0dIIXCnRoLf%D$V%HD;5YRaJL% zU7KuX2iP$CGV9_H)iWFmt&7A0Wi>6$`3q!g91IFoVpxN2y{xvOd>OiL46a;bqS}V$ zmiQs)?SoaNwV|q}(ux}INMmJFLw!|fB|bQ9OH&<7dpOcaMwsnWvyTff5EK;n@Y2yN6a_)!%Co=P{E)$gY(4$+- z6SM$b(IkJu@rc>y(x_Du7?W=_Vp8kD$S`A(1YE9>i1{^2nTZ5kGA?K6Vv^bEcd6VM zxC~3p<{=b|iqBZaOGlgt;*506XuJa*GgOWo@#V};XW*HDqPxu=nZ_gVjg{gNmE_5f zsyh~FB9)b*e&u_qHU~6P7OZ6L+~PxME-pHBBT|@(GFU4uJ0Rnb@&JZTZR_g`_lsKR zQLjjg!;Vr_wL{c5S!EnKI#f=NR2~?E4pBpKho?rRNi?Fam~0#ga)_lECQ8_!6QHQw z#B!bx>+44i?+n@1TxPPYLeBSE${JQV1<^a$-5tV5Q3DFLYj!N!=RiXB>!Pt(w8sN> zhdW~)s6Vp4%ZqJ_bi}$mbRv-sCe^nZZE9)h3Yi#q@&cu0_>tyerhJ|Hq^n5%${<@% zv`Zy6v)z_=cDJn$s9+e!%0l`>m9?c+m`=)eJx@Tk@}-$AZ*G)rJY?33!9`?DWG@>72D_+K# zo|~A_8(DKGp$e%2X*bO+r7g$4fI5#Fbh|dA{*`9gILbH7OXE(}vLRWs>}K6Y?YLYrC81G* zHnk{jqYzJyMtZ{?Z2J59!y5wzp=_f2!+rP^Eoe}5X1EyBw!@m%nK;r?PRlD(DFK1_ z=yIT?A=K2cQs~B&Ue!!dS^Ny{U@RQkhzV_^9m9jZ{^-e=twy4~Zf0Q^NLNTKn}*mE zg*zMqy9MbT>>WRGW(;OM9QGCayhKh zl3c1O$%7z4;!mszOKyqz6Kv4BNPUS;PKX9O)Qh%=?T~KqAP!tk9bjwJ-W6`&5bBG> z+PgvnTYB5ExU{+y1AddTva%A8s#KMgb)}{JyRxx4Sk-9vW3vD3iw;DDJ*YroP0|v( z!fh~#!Pr2+2~)kcEorzu*QS$tv!{KsVe*Bk{?>;pE3$ESYalvMPk@tAvkZnIGlp!# z(0U7D_%d)3rEHL8DTaKyMv2NtNgNPME0?3xp0*8PR6JDQO;IeJfdT}w1BA!0kZL)x zvFkk^i=d$q#v%l(K}diDbZ!2!Z0c52mN$r5i|9hZ$%^FSbtTHh9Z!_%eN@{cdPkoe zQ5ymQ9ci_Q)lN67u*1R*)lO|7ASq-0TS6Vtc8qqBL*^}*EN@gcIb>QK9#gPQC1OuR zB+@BHI!c=8BE>{hm7B_%?D^P#D#DFXOiW$ntLREgtMkRh=(WnR`rn3%$BelYFZ13R z>FqEJ$Dm=q>Qa}@qb-4~Ucq4TCtEc#@e%@h)wtx>)dhnhud%^in5o-l>Rd^8I7D+) zH%~T6&fr&?p-`_WNwjdgE6TPgl^0+X zVCX4kSUy3?h_ocE_Oa!(Cl6AQ$U&@z;ZgTW1c1275Q5vF^lE z|L$;Xw*}?qdD4?~`P!581Z%0ot`^5h{BDZ!CqIcGR2wq`iPm3Csyt&UAx_%e;l2dL znSYw%^X&nlF_1NA?7l$^9Gt<+s$}C5J^W$2?Mw8YO7vzEDKq z6=OPI3ini^NTH{W?6J&z(|~L(j$j<>%jd{tcy&MG@v1KkBb5+OwT~0?D0?;iY|P0CYe+ZtC!uE zor=}$f%Ft?W)GxuZsTfSM!59g)9T3h<7sY$65?oQgc9O**C{Nf`0}3WGEBT&r_3vR zFismIy`9nBo;T`x9OL@So`?x|xe_z%?9)ZN+nbea#p|RenKLHc^+d~eB`80M95wfJ zQ+pTh)FTX!(D<`YopkryQ`AIP3<;*5E{eo+Plw2EL-%;{snWa`;}I(`V?k7-WXG3aYr)pnTa>f-ICx=!fs3_ylL1y z5$;5o!~4B3AyG!S7v&~S?r@`!RAwV_)4OMa-3hj<^WGTD`%8cCO%xzIS+a*yNDAX% zPwQkWWRE1flRUCPm{*r0=5|M&>R8GfY07*hp4X)cR_OPt@RFhXjVUuE>3dRfNX=KJ zOakBAQf9DzVafx$-Yl0&fSXx$H zRZ(A4qdBk#E)jKAprSU2jeNC1xovkIb_dCKuu2L_3b@_GlwKWJwzOesMO|Y}JbJOm z+GMB?EQ9S-)l`(nV{mPiHrUE5166f3b@fZDD&nzu-rsU(zP@T%WmQ#GL!dXjDHQGw z_k??6i89|9Xsj)-SXx>cH}l2@Wg~TE^?@qvh_5d#t&NvD*N$R?ZGKf{c|}b{bwfZr zWHrJTR+Zy*$BN4GKu2T%uj6h}q2_jd(?mQw_RT>5rhPNqy>H(PQFc@rSh{psShpM_r(y9Gm4TYvOSvGQu(#eSKxw(wds8K$+TrTrwZq z@k(+l>PvFVYj9U~l;lY#w|r^IB7`)=4OyVlgMOA<^RP*?7jI*5_vHY0Tm}kO#Cw~m z6nm4@ZjGKuZ)kH@SnRhRo?7fEi1cFnp4u9QJp%=8(E2v)JsCFRa+ifjS_;&193!_q4=hJ8M7@O1cN_PRq?RekD7L)d z^a5c&WQ@Cm1lf`XX4m3wJ9UZmU@{EKcV3byK{D9I%NiU?t&B}ZxwMpmS;b@Ph7z$I zDOob@Hc-UC*PQWQ12!hxEly&E*o>WhkyH95Q))4xR;ve;U`&n0y&Ft!ic4IwcDmd= z_C~Yexjfs&Qe<##4I7?ATB_P9Haxj#o!uM5hG+5Z!yBH(zauOaqw((lN`=SS8aaHb zFbMT+VNA${y=Bg}GqK?elhDrY*x*3813vEL4&xw-CqQD87QuB0=K( z-M+|mwK;f)Ey_dR;UZt;q7Nsa4;Q#EM}Al)L~%KIX977Y;U4-z-`^6kB3}CM z{CS?g+vMNobUjx!sAxv|b5XVV7VN4M(cC)o_Jkx!Ch*C5+%x%vl%6SlLOM0KPaN({ z@{`kWwx66rP5YA*asHp2f(ro&DV!C7ge1n&Ktd|_8bLxL_bf3XkuhCNNadY3CM0ww zkO@ib9>H#Th9z`&9qev~XYjRC!?JkV=wa#IX_DR9uq;MjmKwG0$c80%^AjuNuncBDl!!cYZedYTj_b-_P*6C3e%^w71I@|F&&yk|U_nk!0S(+;st zEbnOx;ef`kv~Yb}0nbDdyJP|)>rMT~#RtA8v`_2jXYt}9>#0&{5jxjnr$yfVwO zPQ{s*Pp_5;kDSi28rMp?%{G~JD11>IR{1p^Scxkgw?pU1;|ZX*DH_u8%9#Xtp8UQG zd^_mw`l28a-|7fVLVi8zn}gt2Kr`tiNjC~kJb8};&jro9ijL`X-0S-w?h~ zjhmOqN1XIMi?9G_Ca)!x{1T5N&<x2&-I63g?QKKIS*N*0MsXj8N3B^f~fS6xP>W z<%mDy=65IXzku$Ub);~m&-Lvq;xxT6?ew{>QF+F9NEnifd%TA(VC4ner{9w<2ls5y z)hXHx{2iDCI@k9t0Eu|%y00NCZ@ZM2+i&BO;kg#FexT&Be1$xkvqNT4&%XxEKNVe? zr1Qy}1bi20GEgUZDLR!8MzP^9gy=;;_^; zmxu7!8w*D}wVry}BS`NN^W$h2yKS6D`-MUD7e{>+)8Oxc`bZkyTA95KvHPX8tG4=2b zdYasaxN~va*Cu$FR{NR?a~_93?DU@tf3sDUZHLn(4`~K)f2v#9G`+-ETwK$GH-}p6 z1(KRh<1clz$-NU_rd=EePN&i#*)+#dN)kI~_Om&1(j9Hy18i zt|6xPxH!6G89A||+@MRh{hf~RYL5=cLmH;L?T zHpFxx-#)ux3y$pRi+LT7znFiv6=&dH>d7m4NCSJcK2I^PH3Pw(zStI#TX%dAVPC3> z?Lx`UaaS>4UKzhPuk(;Mrl|lf(^VKJuiY?&#Ry~X#><=6m(YzY^W>F0luMUil8{&O zcBMHS6V@#<%LwCK$m~AW1iLzt!1E_QEoX=FYlMZcdIKo%0`oiojuK}@dB|N+CIg`M zAA#ry+e0xtodk3O&=_uUZVkTJnUy_BA@XsHbqF9TjzsIWpj{2&Fd-}tZVq?j%d%P7 z9AcVbe7a-piy+op5!BZw{(cpI-vses7D;5IItYUki6O&NieXbbCANd;V~2>1S>iM@$88+p$TU74S0V?_7du2deG=JOfrjk{zy4!iv}@L-8MyhC zD_#LrmrCL8hri3<9tpP`E6J1A;>$19YeF=LKj12aM!|J1-A|EiE!7!fwx39eV4uoa8?WOKvI ztIvM}YxL-oJdBU39F?Lzt5h4_j1|&>-Bu`4YAO_fp-}woQ790l&;y`#(W(LxjkTma z5b$BhNz8_Q`bYiH7xPa2vwTti#PwC^mHIdbF6;NXa1V!j9^4slF+Uh8fV&Ou61eBX zrP?ll>n#s{BZ!88#E6UKF<$-s9^8N6_V%gdAr0H1bP5*N2>Mh;80S(02xE-S?u2z@n;o&8FWbtShi}uyJ7A{lpEx4U<(Yp-| z!o42unQ(7_3mMjpaN*}yA%|{)dkfq<;eH$L_u$?J_h)dw1NV1u?|}OhT+oQN8Z<*6 z;qULm%}5hpSspqZ?ho+yF>rqfm)}nO5nPtrkKuj@`dr-hMQu^nym@(T;V;0Jd+H{6 zsE6gaN2h2DdJ@+XZA6iB)@DZuDefztMNCl^@zf$%1cpEZ;q{>&OnY^!_Z;#>Q*ni^d#K5`1>iiEVrlO*1<)cAL@bo2e@0{{t@nlaQ_4sWo!BN){fAA4^5puF>JtCOKYRD;VVu^T2XoK3XKiuY!tl zcmpmw%(vhk3m1Kl7)QJVw+VlPZ|G#W@4?*&7iBEUV<%j%exnGVjN87v`b8P~+A{Jm zT^n#`)Zj;4$@?{@URBZV*_OGZwS~Y{I;KVI8bxKg>Q0>A&0Pv5kV3uS;slSCh+4;% zB<#a-DV?^zmQ?CuzPvg|eGoeT1TGW&DctFBKZDCS{sWh7AC`KD+UdaUf}0MP`WX$^ ztMj9Xx^;ia=;K_j zdaRdVSV5UmnhM58obroG%cg)`Wpt2dA#AqTuiDKmPr}3rT)n;F?g8|pYRH9hbT!Xx zi|tn1X^U+=SG!Wjyi?EaIRwTi!v6MwyBJ}I!d(UTNVu%yIdG|~>2SSv_M0^M4LZA` zdG*h^VXH^~O$T~y-4!jijTn+X2zN`6Md?uBVFhj4EIK~K$#Dg@2v zdGK%Q!ut`}b0pe8x6q3a_wQv`} zrD_(!W$ugMGFMoS8DhGN;c~ox0$fgIO5pN~%>lUlnsOQ3Hn`<*`Ss2UxEI3>!o37; zCER=9R>8d=ZZ%xi5zG~a*k=C_<+!gkF8kyIIXx;ZYiMf0QsRW{0sJj5<254d7=)d@ zU)(Tbw*Wq?IWGHBjM_$7x*UCO`aVa;k>HcAA2hw%}b#jXcJddF$b zaZ8GeH&n>|$nrxNoc5!frHmY_6mJ7mgpl}(U=x;@$7R=um@8^rn$FB{N3K zvf9=lOhSU`R&A)Xwz0Z2R9;>SDit;r zVb5b4IofK%SG86IL*;d)jiIvAW+WaZ*xXc(1;$|uuNj-?d)JGPh$Je$DN0JUwV@HG zPR9ls!~HeAsJ~R^%jmh%ES&XQS=+FZWz~ZHTRLPEL#l)Le1$h8ogt0bTZV6eNggVK z(#9~PMp{5{d24A4>=ENE890`KEv03(K}>BVG>#DLwxy;V-^wte&tOn_Db8PqLPUto zG@c=Ll56Tps~mZm46@T~24ykGPP7c7Au!bw1Xn}Ti8#lsJ}69{@IHi@I0?@Lbqscp zW-VqQ3VDdJH{iR(&Nq0s9q@SMG++M2C+MknQ| zXfAJr7OOA{lj#|klzas~q^1tOw{pP28GoAPY5^LX>q4ciIM%J9xdH=1Ns%6p0?)c+ z=xA?fGfbqGI;d@}tG99$+1LbR;>b8W=#|38C7=>TVH0Kfi13v)d>>BO#W70Kgd{{F zcPUgU*ADVTRq8lIx7lk4*f0^#4CX6Z!wkH%I3%~eqO`UFt>y}9Fla4OY=$Lx*(w{F z%7dZS`kIzdX?c0Dxf!iityQX6Gu&1&JS!WWhDuT4M19>-%VxSZRNugF_gT{*l?|-r zp2%&e#>P`)8F+0uxrURzsMTD~mQ*i_TdRD-YU)i*TN zmDUQYBUQQ;m#U^-n7C+CR-#8jHOhFo^vjG8Mx)u+B! zSc;AcQKJ5{ZzH);P2!Tv9W4#@wX5;mUowqKB@VR}Mldc=j7F7<8ygabwiU%K_*l^K z)a}Zm{UTW+OU|`2via~oG!P0kwV(~gb`%^z8g5v}^Z#q3?QJ+p6>(%_4?=f?=sx;l z{UJ^pGeo(C;uQ#1;xe+Q9Es78`@?sM#vIlHP*0nQG=w&`_s6grCB9k^iVR>l+8OQ- z<4o7Zw4j`JymA!FIZnDu&}L_3?~hcW)D{$CbS2Y>cj)j=NDL*Ok$s?&8fuH7pInDe z91Ii}hd1KY*3dw7u)jTAYU8MH8QBw4CND0I$}K$MP}rIe)_q368pC%)z_tWzS@GDq z!rgqP>`wE>e4Nl6BcqezO7M@}eg5KNl@8`SJw-W#16V0`l28WL&uKjl| zl*zRw=Ys9^cx=+-u=h3`!AqV_Jj~BuM!=wBItGj{#$&_^{-8T2Owuzc5NgT$fZ>$U zczD>l5?^q|exr=+#k24yRyJn9&(Tk^v5)w?4t6tSWPkAh%PMWcPC^WgMCHsuRqYP3 z2`LhPbLyjxO29ZhBm1{ZCO@ZB5gusokMyzOp&-tJ&@)zr8j&8hMAHDYYUCgw=OI;% zY>8@vrS+|i80t5)He&FWk-ha0?2&6}!r(+SS?B3Li;E>JhKiWYurcXlzA>SYe;op$ zp{mxJ3Tzz8$o@^T=FA+0V}n^n_B~4Ji5j#}h;1Fd2!tcA@vrdp&q2Wc)_jk30zj*#<8LCK!t%yJi4(CW$E%z738~C$~ZQ!a82`Cu}8N=tRPfgp9+@n1ulQdyyjL zwI;i394X3i&`d*(`e3C<_}@&{7V1RETn@8y<;Z1dBE_#BYXmzVlf-Z>BfAa{aa_#4 zt%g+D&Vvn_mL?o#F3QuccEU8SU|n!`^}+fTHTZ&IXhi`gAsN{>CJrwyUOd=~Exh55 z+3av;4=%x?L`L@QBjNDM7+8XdOh)zrqK5+ZBAbrp zniDZ=z~m!CESxljaco3;c%VGmU)|A<&!_WKy;uanqT7J5ULiw{F=*NpQ6Vbl(fErC zAj2$wh=RHp*%d96J;bfS2eM09vsgj0S+km}xhRyaqJXm1Vh)xzGQ=F!_~w{S8X8pA zGu90bk==!452Hn^nSrLlZf|13wpyt^HSW_2EbZ@a+ag-L$6%8Q2XHRqW~0SSa2H>9 zM`R<$UbgCmo{%`|4brT#hKAZAQ5h~(`e?4HYvi<1sYRqT07{%X&>d}y70eUmBnsM_ zQm3fri3sfo&;e8sDBWwXM%+nM*qx(boBbgF+v16q2vp-nEe2%D;o;NY14_O2~X zj3Pp=t>UBWy;0IwDXL(`FVJd{L& z(LNU0R8A@*kbVyUF8X#3Kflc4 zDQ|6VX{ZY|uWoJ$)`jqf0_K7kI8;@kKa?w*qSCM>bk{LgL#W3}HLFCiiaxex71#Ad z+0o3fT8V>$wE1-NQ;o<3hc&vb5?w3@Tj#4(8^apZ6*L>QPL*LR&ShmPAlTm@?XQil z=lcs{N^|VU3c#LPl`=iUuo}kXj9_dLY!X;dYC6VhU>mQ#Z4fW$I^vkrdqkS5EzPvDL3JzenP_^bbXi*?t( zFKIvN1gs__t&`FYJ7&o-FVDQ{(qH{@`;1?Y@52L<8i8N8dEX1>6*m;z`|v@{zk0Ol zFl-|hc-A)$dGnFMFTMVD;i>7Pw;sRLvR)JT)*0s)^*!0Kl8xBNZw^ps0hz4iqREglqj>lt5o z?#}7^zkS2Zv2VYAefwR%TZQ&h;5V1%KR*8R zKm6tV%j#>(wx9Ym_Jaxh*JqUNnET4_#~(lbYkxTJ>Y+bc*2@C_{b|oU`uT?!?cB2M z$SFTM{|k6PI%^E&fAo)Q3hsI1zV>_ae_Yg)f54@9$S?2*8W$d4{>9ACM$La|$(V<3 z+=M+v0)OGji%)x@ap@;n9Um6w&V1p2EbB1Hnv~XG`Nb=ry6c6nj6L+>e}8h$tj{d# zWPzW%Wn$)x+FcF%Zh3fN`h#sZV?UX|KmWs3zq_$LXUC%#ZVjBhb=OnaV6V5pBV9dk*DDdB|`0>jt=6vU>(--e^?j0BXv)8gdfL)!KfuHu`HFz79D{?uV z7(@=_%-CGC;Mg_%ybR7L$=QG-ht}lht%=}EGlO`?DL-#c-W<2bGr6O(g2$EaL1Z;7?#BbI`&Z5U=Neu8{1Pc%w2mFvv5qjHeuY4rG>pBlEYdE z3Ky@zktQ3~^lZslk5|arjaSIJ)`z0){hoa_cO&A zHCAo9*R{28*uyl5ieg(4nxu|MbZ<%&0`V=g-pPJM$TE->h6VR6P+a{{{wQdc%ZE>vNsA~n3BZn%<5&}jgf)Dw(gvP*dU5NC%+J# z@WyuCId8MYP0{?DE8j-T_x;0TkruwmMPHWHr+kQ4W6x=90!EI_f@78P zWm#*KFVottv4=Fa3%(Y?QGwASeOXqu@?~1zgs(?nS1Vtp^=)EsrW+ruC-A{;9Dk z7&%J1LzOSnTCA~v#v&T)(HKXglJ^pg-KVh!G`2%yuWD=pOh)qZ?F9NVt!`}PYK3o{ zb+7VeS@$a+LNjG3N>KSSt^46yAviL!q%X^wpnRFu+ZuaUW3?0H8wlg9E0izGx<>gj ztp)qY&@8K1`7*6mjjh&LpT=SuTeUCur84z5D_@p%oAPB^B@<<6mQ}8N$dShSH1;@r zSR#UygCH}nGmQ|~K znbr_|A;Iyu@?}|1DPN{_7Zx=bnq~c1`CtUtN4HjR)G8k~^(bGawHfO`49&8(Dqp5` zt;TN9*h?DwtHwrQ)+KqzDqp5GPh$%-wn}4bG_29jS9K7=x!OqznyaO7=`3zy;Z3t;YYZbx!o)Nsmxd!ipu801kpy`K8 zsvi7h;%gAv4(gcTTLX?TWQ4&H0lpEwc7!qRIefnqR|MgdwHdK5u};8m9`2*@FUJU5 zjK2qfoC?|yVi$K(G?Kd($uP5EIL?V&a^0)WED9?y$`{ zssmU@cyrE@6LRu$jy^g^{e{_kryTDSc#-o6AduBzPs zrs)!Bp$!x)d!Pjh6iCuNEoqX;qzTQ|%%lq_LzZbXO_~XlNf!|e6qOK*xI9I00Urv8 z%X`Y^%AyD=JW){L2?`2YXw{1KQMJnd_xsK{ckaD&@14MVe=nrx&bi>geCKiVApb3Ih_LCsmEYUfO0e*e_TA9~z5mXrv6lVg(fy`) z`xTm&1HEHV@}R!C&^?~3&#nh2w+rm9?@rFa;QOw9C1WiI$D;>#?U-zh9QJ7R5Xx!o zorV`8ye@hu2Tpvu_N^Ri`R;gh_Cqfek45+Gx?-O-0^og2g&%W>;;}OP*gJK+W#3rK zW8IwFzOm?&lJte~&KGvQS~P}#uXy2< zneWSD&NLos0;Sp5~z88dfZg?PMweAln16+isY!Q%0jl9~6;E*ft+ zc-4!T7L4wk(zNUQ2W#&i1>92y=RTP|3n(7?+Y|uodhwL|5j*h=ukc16XbQEAYuGfmu zPQ*kH?Rv0i7hYOQu8WrzT|28k${&YzJv2#`=DPYxEX?QjUiHf7kjJCZ$0ete$6Fqk zoE~=+#@VfpvtYfCMh^)1VdE_a1pL5w=YbWSGp>k^M-QmZyXv7|&oMvhuPS=zg;~>q z=KxAM^WNrbCq49H$@CxRz8C9{hsI`KyZ7_2Y(r1%Ed?>I?PETgUQ7DasJ00h4fRs{ zc*}R?`|g&P44reNJv`gmM8!G(nJiC{3haL;>9=C?gxvT=WyTukp@qkzGsf!XqY1}5 zXN|30fEFHanLXB6&a7rxhLPydP7nG&G`@D;*eoQM*ZF*%C9ezkI$K`L`8r2lOZa-C zyw1QYu+Op7_@AvfB>6>lCIEIlG&xt{&XTdt1G}RK(H!_NW33QM2^hcuGrW=M0UQ23 z4`w%RnT$>|yr5((x*z<_08btRW4hvC(UtS@Z^;#>Z2?=|Z&H^4`B>fL-41ZjK3iu0 z*xJc^mq@}BCE>A1m@5KXW2|=a-r3A}i`}g%mTg>@W0oj@n2|xGmjy}`A8-0o9M*r?>r*LzmIB~ZFd<%xie$d1|gO4KM z>y)hh4r+0BBXiAK;OR_Z^4^sAdy)gLW~(J|Ss+}`%Rt?Zx1a@C#-NX_GG=cAg4oM&>I zg-$`0I}fUOyTehp1G^DxdWP&p6+!aH_}LFC*4@gkwhODMy(GIzi1uh#dtzi9*gMnR z2Vi4pfqlCj{e+&_OTH^PB0sIqj5li9C^7vc`RAHOIEIvO4%!Fm2Kx4(s(!hu{sL9a z`6_ZAB1=q5oXAnzIRgL(5Y1#Hi4vw$*|Z!SYXSZ2bGFG?bkBIp9)m)7rGr#+pH-F}rNp8=GZt*yx@cZfUmM7)+o=2lbtpLw@ zut-KMTIJx1wF_qM{sS`jUi6KkoWzPA5Fm)D11nl)Trnb<94xMz2c$EKqX&wkk3(?I zycg;jbSU)n>|HBwu-?^3;nfM={Md@g*Ifx^>m?LW^tG2*3Hb`h>qM7(!F+o`zC~YJ z5q)7~D#~H)o$|^%A>3x(+w#VHz8|Q@>~W|udxF)NJq|U7V6Xh`pU_~wgnvL^5P;N{ zcj9j<9de2Jbhh6Bx(HH5bdg zYmm1)@U|6iQ>`!KZBX7$0E0P2-pcT{S>P)0)+lc^c-tUvO?a!3HyYH_c$+E)^&xq? z6mgfyTQA-+^45p9VR@^9wW|hiv#m?;7L~Uxcx#fkcj2u?-p27(FK>6?txev(j<*_l zd(n=29dES~Hvx8Ht`w@W0BYb&edZ9d*s z%3BTIn&qtxZ`j|1vTVhhD)Uafsk(g>Z>lwJ$6KqweG_jr^7ebYb;?^MjO?nUalBnB zaXolbr5dr{K94t5`fuS)QOSSdtwB;eZ@=xczmCV}mF%vYF@E8}g^%q4ltn$>dWHWS zfxkZd&Bk6m>>0=3RGM*N+hd%AyFxpIgd@|19G{G@f5G28{F!GCUKr0mK3>llS0ZkS z$72E0pp7MOo)b_{kv@4)Rb`GK(B+81YoJtEHkxyK+XqXuIK8Fk5Hzc`0#jGDm&8(T zuU9^_hek5>M zuh4SIh=*v&t`~~3M{ZdJfnfwfu063ZBCBh&v7sC1-SIbD+R@v_=iv+6!L)_9jX#2K z2~Qg{4eK)>f3KX5f8=o<6!h*rud2F~i|9Di)r-ppv-E`Ai;D}mzMIaRi7nF;=?vTd z3tOJ;*M&dTetc8y$2Vy!lA!f9{KZNq*g zra$42%&g67u&E3`(aH*jw11ubrRdUL<<}b4WVx7)H;|NVN@vQ>bU6YzQ?&&V`8*&@ zAv)4rnd3Y2B+cP}$)BG(ENhgt-Go2YMtoCk#J9ug%S^sbm$9qjM3=E`8_=bLY#VF> zFDadcIJA)cu(`l6?B*K9yVofm(-4MK^tVR*BTqOfH4WFn`&cH-tF9Tt^oe1+6){d$ zoWqs*-+@2pa0T}k=M&8cSuPG=HYFv3YD&JTrsSI%t}5=k8cs-1%tUHhGS3=0594&# z&iU2|%o>awzi`2d#*&e@nP25A8fUP*53(Dn#2-WmThc-5n||#Lb`sj&yYRi$Gjy4T z?M)v4_X)Rm!^psZ3~3pu=vJS{G&vnJxtd&@uR7bDW$?E7jk?W0j*w-$S+_Z5rD}7& zsW#`^;ldbI+++By;OEimN(WKg9>q^g>~`!w$(#j<_dSjNp z;Eh>!z!S5mat@F<@hn<+hbLz7;{D#3CCf07oT(NsZFa{jTv9&dj#<2{{1$Ia1@&}= z$9dffz|g0>5GI1R^RB=4ZwUA%SF-GocXoJj(Fyz)fA8HMSJ4_qU1LHurMQSx&F6ua zZvGH`=Kzn~=rAwFSdQ%CqW$=nx$>DNZ_e_NXBHQohku#6VphfL`FIW&n8*1q{`ef` zz@x5xp;}g4M1f71BlcbY-}!hrgo}$vk)}M;9e7l|sALxxQF`%-Tt5Gbd^|_ui@RP& z;mc zNM6j3^I~4kive-z$K-x^kvC>uUJMr|_)M`&xDhdnEPIZ`_>NOohib@rA0fnv>tEQh5 zQ7847nzrhgX*Ql-9WxyM@wVuVbbPp7R_RDsgU6Tx5#7`E57H zRZ3o)upF-g_{7A;7Gf4v;Ei?~I|lb8z^!qSikV6noJ+H;51_h)Q85egMpy8;m_>-W z3Kh!5P`nSzmc*=U)k-o{#8Mgh48~2u&q>8)Ax!$V-{(Q`YApC`_tv=v0Jpr=sL4E@ERb zm3mC7U+PqZai=;CF~vpHKMA{f+q0Pen^Z*$&Npzi0|T|0?i9`yUCjm&{V8Pdu^j! z_{!{zeIPW^Td7cIdum5b4YRO)oQf~@(2Q8R^@|*SEov%j+H2cubI4FrAZ82MXbV=@ zq-U4p(uWoV zr32szV`*%!YpigfT9sH`U=-!}TXceuu8KNm_8V&(O>H<3Sd7LBQrxO?ZMm+gAs=Y3 ztC!eBBI+_A){w!HD6&I1kC)xV1Lw&MeD%u*q`K%LTqWtah`KM?(~mPl>Hbu*W)TkW zCn7s`G~gIlvJsv^a8cbt#3lRS)R;f!O^o+2#io(Lp48x`^aPVYHY^QmyCrosmisPe z-pp<{Ngaht$D)E5090PUwo*eroak5>hD(7|76z%PtyxuGTNAAfr9MHolqa0fU7ON1 zHLR`Ab>Z#?a5;u`TxNa#;)?Pz$7A0jyWA0pS96POWySI(m6iO)TV$^;x)`^}p7f8JIXwRs+4iC$>mnF;K3}a=g=Ya?6L5>{JUG&IJ_6^tMfOhU zGuHs_++GDs#jM7v$-6~%Hgv2v0CV(+g8LQV%B=ibWZUui`&SfM$8k=C=M)!Q?iSQl zh;JKJFofe%=5tHy0mNSqxT~*HuxviRTUv?lZViK1dHnDl!k0e-?vGa&#&_zj!sR;% ze3t@l!!_af&IR0cfVoe@ar)v{zGk5LDPT^0Z#X{IH>P3mDvuw&IM93uaKC+DVSID0 zRWM=rSl{)4Ya0v42MdgK6<{vDPQlUq;#WT2ef1Pz_U=}2RG@SHy92+}vlGF~*B4or zd_cj`wpSKKAeR zfP3%9!|}}l-2EDcxcKmuz&&_VI6hA8UIR?Y%?ghH2H`sjFq1wJj&B#zF9OVc z4mdx2&jHOVfO+Io3LpE|kN(a;{K8KcSsU@khZAPO=b^tvh`$Oj_h>jy{rvJ}zkMGt zKfXob3!;NEq%Xcz!QfRMKYTCY%Ur-s`%E~#wSZd=nCmoLQ2FKn&8Gl!@4tuRI~Dl$ zXc#FR{_!i{V~9WOHq;k?e1hsrc~SgX1tWm?#}6Oo`PONG`-6rJ!gmtWf3C>70DpY= zuOB{^Z#7_M-X31Qj{&Y0FwbZ>np6DnJqR@O?r5AlBn%&+ds;mhTllfN8qrC%tr&cq*|Abc<2TLoZBzZi~h z58xtzIp<3Xj`j5`ANlSV0dwnrD!3qi|8Ate`71@%@wBGl3F5m@g{*4<^N5BElB+9$ z<~M*j7aK85e<|i61 zEZ_ZrIrn~r&xZ5l+lbF=0Q2Fm70&nffGPR92cJ)U&j3u17tWLKEkJV>U{3vJ;e0O# z%ttkxT@Rmp?*`1Dyl|d;pGI~wzXiGa?ZWw9@Bs8R{P79PcN<{7>V@;<%Xa=TV2*pJ zaK6KUxn9Es<+}@I`T}6ie>jKFZyZsN7z0e#cNAO@|Kqs%u!g~_Jbw6|#+Oe4F7w@R zd^8f@2AKOa9HIU2kv~5KnB9*ke5`K}AG!-L4{5j{d@SD&0rTnah2y&zaNh#VoJSR$ zEvG&GHV>a`0Mq-Jf(zpZ-v-RH8ZM~cPDZ}31Lm0TD||t6^%lUL1(@$^xS)240`7N! zS@47Kdd$Y>IAHpIShyY!1Lk=R7gP`OwZ8*q+2abI4d-dU`S`pJFjqcNINxUg^Jfib z}e|&=4kM)fKX7i5}ToBz8-^T&-sD=x|M?L2kfcf*2;rO@}=JX#I zS-bGZhyVJ~JwNOQ%*bFofgd zS3b(=-GCeUslpf3e#CdXh9NFKe)yh4{QZFY2-i391mWYj{2pLV{keh*s&73$uL8`j zXB1peeW^EmA27exaD?_NALlds0Q1tb3SU_Hj{WZ<>oWZD2`XPBK7Rl(KmUb-3oGAA z&!OM&$A|y=m5=s_8o;c4UcrTxZxArw*KlFw`yF7;|5f4gjR59)4Hs6v8v*l?7sAWe zk9vF$FcmK<;KSj zCY5I{{;m2g^f3JKvCHS-L(KO*fZ6Yb^NdT=0U*S2$&5Aa`vo6E;3p1Lk547le=H+X(fH|GJ^6-S=TMw9i4Htxudhr-wlG6+0`xs#E(r`ieSl{mh=HoN` z@a5#kr!gFV2$(HL=HUGJDLq(x0x+{m6`b2XnZtJ<^8FBCnvPO%LH5oX$+KloY0L;a2Q*c4;Hv{-~0_Ht)a{2m| z?;PN}Ps89<9>4ODUVaU@uOAnVkK6zDX&8mgUk`f$A5T7hlJ!sg@p02%u0LphDL(=C zdE$=`s^zQKk^Wi$bJmIB_?XYd8V0ZO_|=!=_fo(uI;k+eO&Ug{^DQ6cQ9t0;pB#?w zG*oa5Fn67z;HVe-mG42o9ajeWJ2f0%JK(0D26~yR;ARBigK5Kh3NW8OJsjUPNdIHN zbe@re^DEy0z`YMJm!Fw~^P|5g;Jyf$*Bo$u`1S*C-uy|{?6bo0kzN`Avr)sLTE6W^ zdhP+tinGJ<(Jru6!{AjOzw*6=FINJt`|GR&Zw27CE}mrFu|&b~U%&Qy z3~=8B%r(mj|9bTMgMfP#Fu$$~$Hzk&vm>BW{PE%L zU%&E^Fh2#DPt}Lx<9K@#Fu&1oNal-=^8ELJ`BpR>-){i-N5K4~LBa7jj9>XkCQDXN zvId(J9FL&n_{$FbQV-?Z;g1j7S@3!0@f_z}8isIu{PLweF$1`Z*5vTz^3BOD z&O_f1m~Uw~Li^z>L4*AmFwZs@#y7oXlC=_le1h;%?zaQx?X89JT@RQCG+Y?IrvUS- zw!-*I+b3Cd_zNrFe3Wk;V6I$S7~g*Y=0yz`R=&RgrYIJUZ$1jOP{T+8@sD4BuzxQG zTqIr?--w0@!$&#uNx+SChU4Qnx*afI*Kk4OhSy3M`eDr7-jn23ID5tZ4>)jY$z6$~OQNX;Q;ezVB5+7a#%o!Jl<68^34S>1x z?YVmR)t7qC9|7}?OB7rXA7_7DkicE$_~R2)KKAcLfT_GRynJlGUJXNheEiBsd?SEs z=_-ux-5N%a1>k!D@izc&s5>0rV!(X{FhAFDg!U^R`*$y3e$f+-k8F*@3#T-(Z0g?9s|rT zG+Y?ImjUywR5(7;%O5oiUgh!Yj~Do53&s)t_yp+@_4syF|0HW2{`dsRebV2D0JCKv z9A5|EJ^`3NXt<#IF2jd|fGHm=jISFocWbyHeB=k;2F%~mh4C#If}Fu0pCEiJ-?e~w z@Un1xp8$^60CRmN2j|xx@51K?0kd*M!EyeU(+_sADDuq3zn=%p6B^E@XOCX;DZu>& zFdyC)p6@=?;}O98=Z?bpp0X2i8h?C(@-4@=EgD7u@sD49*&jCn?q}~*_=4oeSCRh2 z%O_bs!XF?0>xb`J;QI|=`ma!M?tKb5{fhV=0nCmo!|}Zz_}&kgIirQ~WdL*fRfX{_ z2h1Z^hvQq1d{5am$=Y^}f-4EAFN^g(z%;y1!3F8DjY$6-VCG$`;DY+?V&n_wn%3=O z;rTAW=hp!<_x*+Q{Tg73c8BN7{dH#nW|f9RF?{=%{G|ynr(Un{1@SB5i)k3V%Hu~b z2k|8ZxULU`jAu|M=m13GsUY z_oELL##i)V1rvsk`e`ZP{;FYv+K=Ts=OYutw*qi;|E+NOIyFpK`6i?Nl7LHnv@pJ# zHB1;j*7q*JefVSH_((600Ol7OE{Oi9Kfer^uiY4qkNa}>Y8brAL+{QwZPT zpP6L+5`TQ`@#{F0&v@#)v;JMd@V7jZ%3Vj}88;7q*LdJ+W|h~Rw?odF+X@Ha?wA1F z0>C{ExPuy&B?!Vd<2HBsg5b(02p69K9Lu)@aJOmLpz;y!e!#pm0l0&JnfF;$mmqv> zzhxQ*uk!fScM-n49dI{jSk8Nb;JyTyUl)L5zSidow{tJR<^k?n4XgB~d^#Z9uL09= zyTTa+$9!+mFnE>6uO4jY?*eYWh7D>z!cD#d^8ozu34^N#%uoS1mhT!3BM9-2U-<}k z#{}UXpCH`+3Ba+PXWt3^6n}hz+IbNe*-rp7^)3ac&Lg7Vx`&4)q5h}d`9r^tTICNq zU05-i>7UWKG?;1^&pF6B`1tz?z?}%VDPK@!3&Y2DK6L_cvjG>K037A-#tFa?-;N2u zali8WCkXfX3BYkb=3^6pWBa{00XWw89}|FMPn`J0!u>({cyb=xtQs%9Oa|O3d2paV z54{j>?gZh^oFLpeesB&qA;?l()t(QyVGT>UU1OEkl$Dj8-%#7s+|4lqls91G}6@26zzyzP=1s*~^#vSj?7gYLS>KGZ!!b?bVs+&GNE@-LmP1GxIo%PA?kqcK z)m5Fgb$DCPP$t{!iEfFlLmlcpv2D%ut+g%D*lA_#g+Jl%z4&Xiir5%$@xHI@rmmjk z(9n75?k(`^y0WyWjC-wV6}typzfIU;UphIzy#B(W3vGzu=Ff z-#qUH>CMLvmX*&Lr}Ot@u{g2pU%_A8nj&S#tIIJ!CfSqToWPC9y$QUIWQJ4Qk~O@e zKAGw2$vRyez&PIluciY5xQd;(>VJiK9<3oP`>XhC z_c+5e^&LUIFNp#`9;fqBy8=~Je#H=Xm~1ign3jVE2xqN_TUDh`!_^{ZI5Xiucpu*9 zbZU>nj3~i}`_8p2HXGauO)uRK2* zNhDIekj+!^*9Q340CEfA^uxM73FbpoAJK7X%Nk|rhY&77cp1W#2tga8EeKJP(Txa4 z5N<&Tm2~tfggX&_0O30kK7#N{gg-%ulW?P46$8xZ2?(!7Sb=aC!g_?)ARI=BF)+$D zzZRjF29H4#vP`BWKMxu_3$CDO_52h5XjQw=Ni7cN6uB;%IOVlFaRpM|gz?$*HXHS8 z@X#CUb{5KCjPQr6@gh$_dds6Sl8t%{l|4CODsxiPB$V-RC6H!=n*IzVWxzX>%xq22 z8-*1G(!28V($7+j#?v05=GazBx}>GwJZuxv zC8a25(0s77c$DpQKEih(tU$=@D-n`^E<`wva52JfAq4G?ejnjdgg-{O4B?*Ljoe1j?-ir`L8hsdHJwk5AZa~QPXhe7dLacO+vdU`^VqsDIcT-tji{D>I z7)Q7V;W~sfP*0p38RdPnZ%6nr!UV#{5nhV$6@*;~Uq{%3@UIAa5t0@*A@q)e%TXTG z!@_5I5}t8zB)$jn;^CozR5k&ZEo8--D^Hk$LwWK43iG^*|Btv0pUOpuPr$hItD=lR_J(=#N8p1K9)aZZdjL&7uQHPxCgBQidg(KWzZC)@ok?v@bazYK za~ifA9?~{<4Z&UT^wO6QX9P#3YnXBuB*p=s82~f_rP~GcethM?!b36g7_iL%eGO%j z+vtl;BFR!1**%c%mdGOkX#@_-VMcjQ-u#C`DgUy~Ij*UX+@|9{2s&p!d>A473vy_b zW&JmVEY3#}UWM>u2tSSRMucBS_;G{}BfJUWV+e0X_+JP=iSQ2yArnU5hWu_pcrwCU z5uT3lGYBt0_*sNa2yaK&iSSN@q=nBT^p3kbF)op>IAum4I?y>*P6z77_oP#1IOLD& zP0H?o(N^cte8j)gx`oOgSls};E@kRQ=xIrmqJC#K9?|rFo7KD}xGUD7*Zu#^Z1KM` zvqk^P%ohGDGpqbpW>)d9%*^oe?_i92btsO{b1*LH>N*kS2;~#X%SF596%!oS<}q?L zr>XaX;T?<5RLrl%`!StCnmT#r3_#{M_)u2V_gRSShgJaY-3NszmF!7cCjodi;$Hz+Z^7@^(i6x=0jKLOAig<)?=gYJL1UrrTBD8h#j9)=7bL3k9x?;&hK zh;O5;1?0i#yAeYF8~rH4A0WID;SUksh7g4x{Sv|_5I&0#a$}SSHJ?Ptm3Qciqd1&q zVg548gGo;zoPx4Fjqpf>KSg*v!k-~L1L3m>%Mm_@FpKbcg!d!-CBkb_ua^+sfbeC6 zq|x6Z{0r(a4}a#NXEop#U;T{x%juT2z%j?^0KT_7`LRRBY)PjEWtu%aK^apHe}Z|U zrQ3RDG)ju(6Tnk* zDW9a=Eb&t%mZ^VJoQGr2lG^FwKI@D$Fryplc72}Be~$+z~j5sWwxgxk;bMnBTI_xcA)vu&fI-#w|TW$mz4ujk|j);l>d+$P3T@rY^0mMpL}pfk@_^>B?5X z5%cs?>i8$4e4dP0UGnGq&M;F22%0&F>_enf7xf%&PiERh)Uc+F_@ZixQe;J#-G(Tg zn|rPR9%=m!^niyIpvWMcG?G-nX)L%3UlxF&;W+}pj|2E9lz4lOJrSTR;Ix#o;3CZ3 z`MXY1OtG$n-k*~N0z^P~J_F5B7OccO`7s~N-A74}2M{(P1pgdOB77a;c7%{6Vt@K8 zLd*%QzahK>;olMd2f{-Le}wQK2xkB%>>Q)q)l-a+dOz$8quUTpMaW%C(-6`=068;y z7sA64eiPwzgij*`j?tMY;}HnYL^u=SDuj?nqfH1Q5XC-#Iml=NzvmzvL1ya}oX(A?7Zl|3r8O!YOFLGZ7wz5IcTH&(Oas z5uSzL)d;$xNyzF#t1lc6jBcfpk~4x~ghx*A5t$HY2K{ z+)grDFiCR95Zs0ja-geRimh0*wxz17zolzO>&Vs^4J5;`IZZ1)g)BxPOyFZ`>&VuX z$aq`Vz(^8?CYAh*3FnAn9*achV`ShIOKVf4v9<#%8MTop?!Z&=IDw_(>pI%jL|b9j zQn`RwLfZm@->%p^jSLmzGD&T7!XS;b)kkBANLy!XTq?*$o@z-s8airMw?tdxY=_if zb8^sHWM}=0iDr!&vfYSwZa&(s9YlMY2AJXp5a}Bk>>tM6hto>0d|R&Zn}!oK`Dfv( zeWjG8YhWPV(}nxtR#LC6F6)60_iP#ZCb2%5g1y{y&SYzKa*)Kc4j!}t9j|L{t1CMj zfc^E!O{XP&g{*SYhL{5sOBj_~(REp#Z~37fPXtSQbvUHz$Nr z715fg?ylja*wBYpZYLonvI`{Z98v4&>N5Gyrs~s?sZfe)s~+0n)c~lf%66f<6T_tA zxw=l1Ec;q8(0c=}Qy9r4+q-&uQ7-FL4TL+#%|aZ2#A~$^7WX)FB#8B-Gs)ftP(O&#XVlFHilCO1!EIOHhy{Ow$7K+>IMPG)h7b5ty7#D;l;&35rMfQDMVTZ8_4cAfk|_-irH5g7Rg~sGpxi}qjVhDS ze^lisw1*aX5^39iXay%k6PTnygUOTFIignRT!Thba8l$u8;KuVOpHDg z#x*uKIpDDU9&zg=j)IJpm65rm|yivuo;*6gn@tv(}THDsQ z+R#%K<|xp|qZ{JF{s=uy;w6fOO``Zf+*+?i{Mm>L8(Jd2w8UikQdNK$8X&f&sa+ai zvouLvyg@fg58y~t-iCFI__ppXkhYPop1$NtM|6GH_RSa!9m!3}OcFPoMAFz>;m;G; z8q65=X2#9Y+WKe*?g3R$Y>rgB!Jgl=zgFpcHbuI^!@ukxc-PxMEu%g9&iUDI<(Gico2 zL^i#>3!5%*pKKae{VD*R+yEp7lU+cO6{+FKI{{TVK}l6r)z>wgP`P3C-Az$`K#74g zHo39JPTF%r;wl4PcDvI$BNXhikyJ99XzgmXyrk?#NByV^B(PavDgXSlP7PzV3Jn9B zDdk@vP;v+MrHG~)2!cuV;>F9Q)q-KD%3(JRRo+0Lt?Ay8fpj>G(*LY8!|)6bC3{k6 zgmAYM3+loK1{b7I-+YG9}K1$ zR-~<^9rM?C}+`7Ab=Lqx^e4U?w? zV!Ba_={D#@p4d4jM8CRMCGY(YmGyWw?eFRMj!*5V(~=XM#NyQW2$dv zsvK{qw&vFkE@$S5dx{;k?8iXD40CJk*6!5i;kuDc5XdqCUW@`^f>&bW?y%wIWim4P+t>?#np<@fH=t zt2TqSwKi`QZJmi+bEu%g=v}0ekP}KKbg{9(giWnY@r0y1C%^5Tt>bQSBQ*nCTnm*G zT}_TLhdCRxSTuO+ni!T!l~@YI;uI-oxyt83Q8sqKUX<-8;}NsKl-3-@5=IiFfDeWo*tXuVD+`}S`pn2%~U#E zthD(GB+XFNH=H!*531D2x%t&#mhMU%mtU?(XGaHY6uva>&Cgaw$t?>NE~k>7kzX{O ztGjeQt=7s(9H*#-a&s%TbvlL7KAci7$b#gxjQTVvOXDswb+NFbIV6lv?bueEa z%1ROCYxZ7y1fwzOm7CcI@O>Lipt`i5f|$NEy4 zbVstkuS@Lypm&U=&OzaPn^MW%4SnkRP}3qI)iLtMR44>gv*&p(3d)t$U8Cb&HL9zH z3Pgbzg(_w%`XP;{=MI#v1-jJ9?$2};&6TOUbndYii#MTHC|;uVVsZ}4(mNO7T!ZjI z4X0)#?qTQ5&|NUo-(DVWThkL%nU*Z_pRkkFa^4fvu+G^J%T3C1$~z~iD~T7;P~P&m z45!h{qL-~iv0(QlPtRMT@bu!Kdu2=;w=iOKr?VC;*)(4xz6RG*G}hvm?H={3xh2t# z5d_&=*9?;Dz*YcPUHuDSugaaTpK*@f0qb(WgY;vqgR08)a(&Za zPoG`v65sT?)v<^^t@KPR{})^96LoFP_V3B~9mQ`m>z?I{h3A?u4@9reWBatn6AjI6 z>tVuDHb(OW&XQp0gayw2Vk%eWi*_rl3(#hUZPb_#L5ByohRsf)F4JVO$`=7<`(g-V zv8FI>Q!7n<39LHQ#+%w&?P{5xa5wHCFNLP0WVd?C(T=o{MRYOjq$za?EhxtxQ+ zK_~68mPBo5ye-idtC#eIaLw)vgiM6_)y2K|HHNX%9K{s2xwEBJ1~EEtRF1o>vMe zA(%Rn6v%xOxgfi0rjv}nXECF$4>c+Tm&z;zv>q6KD`(30HS8a9&^Y1+WMCd-+tUnA3GyIt1=sHAvj7mmJ?S=eRIT59&4g)t- zq6RK*VvAf5&3mZI(*$ObKBr%JG?IjqUD$P3B%qaFv z!P0D7qN8m+rY6x$CY`}XG91*fI(1ihC9FdRt*OVvgL=E#nz#Ud3p$!MK-#x;)Cb8` z(r*DC7AUHHXNJ^WxM{`A81&M^%4POo9sxw?U^e@cWTXUcS>gz&SdzbI$;6|^E^fWl zovnvD?EW_Wk|Pt2tR|uM`leWWbL~bfhBP#-PQ)U$YC?eKg+&|l6|4zFJDRbNvfkbW z=C6b1<)%r7gJ1QAh^sOTY_()eJP@WEISb zg`2vlCCEzRXcdaz_VjRyyFvY>2xWL^ksM;HVK7f>v0?mrH3_;Xa}*@jlSvI_Q564D zOkfTgH(T$5`sf|Hk1$^m%7m=VZAEi!9%NG{U?JmfG&8C5DpMxj-jimShA~qZra_~a z(g1?m!qE)%=^mJ&2D4#vX(~959`Ot?n{_y6p`Illu_(cf4<-- zfaVB6Qx9-9hAD6-7ku@TWOr)mj#n5c?7R(qT*Yq&N|yRSgf^SgOsysmA7|7hiejuh&zxGQZWC!5S>l~a@j z%R|o!T2qqIUHlI-I6*-K^)}hK%k3C$YAO|~#L*JO+Lu|i_4Uzu*aj&n;R<6~>7%l} z&4JFf`bg^HZX4_eQ+pB`2D&z5gL&BCwPl^RjX36+ox6jbi=D`>nOh|ym_bNRCW*^{ z;w@n(&b;Q57=^XWw(_KOhktHi}PQSg`)bnVGU4Mel3IpHJm$iqgO2(-md%?fs zeM<%kpe^NjWOn%IO&{lTR!u+Fga>=Ek5BL5*4rG(yKgz(CRonDy0uw*xIZNgxYWBbk(JC+dcpXx} zrT7b*9KfND0k!4&)FKHd2ycwGqTii0B3DceyrSg z4alaNV7A7+*kFe_zQ!4*pqwQA;Y8V+?6EiA`LjKZO%E~~l{yUKM3u(oN@Mcy_Jb^( z`Lk#nV@Y1&`f#F>q!K*dT!q6p<8qhObXFd+;hq!}ht#H2j|izOMq`n6VOyQv9g=9p zo+NmWqdm7Z-qF^ah_=e=KnqY7)L4T1)vL0QvoY^Up?SB|Zb;PCw${TfUc6Ddn`tJ8 zrm2rb+OeXs+9p-2EUytZrFLK==}{=d_!=52VY`Nvp#xJasy57HT4)}!p&82^wX0*Y z6_HqqG?vvJQ5@G`vPYNyz3KwVKpE>Xxo7judc%1|s5p zSVCD`>PxJy-GdE)VA6hgW{BjKjQ4fdACezoP%Q36VgN2QW^jl4OX?(N1g>6`+W zSB~hm6gI~9B;!1MRmWqa+{3y5IJ?$$BdGxxqT|V}LtJPccH~U?&78Hu>Ew^e^d@G^ zoeme%N0L1K8dqc_o5qGy2PQMOInuYG>@sF>f>O%Jt#J;#tvF-Qo=IoZ4wO_C9g^Ck z-`cuMp8PP)>7#ON>Pii;R%Pzo+fgdc=pC7pavbH0?ZotFs|Uuko{!?v-6h>-Muye} z3RFQ0Eg{;|?Iy=;0(pD}|DEa8ebeElcCmmFbZz{64xU#HE<2p)}z&pM{nF)Vso(wDOkZfkDb6V8{8Of7xrNNo&pF|k-**N__Q4stapeAMHvp&>{#pvaL_ zoov1K5DYivEy(ps=U^ANW_y5m!iOE=qhe<{wjnTFSd{%(c9l9xOJPVXKH6)dHI1z} zto9lJ71U&cXw9p~P}(p@AAJ}(W|H8HJxN)6CzKwpPIlOxf{kvcOkW)XfGTdtIq96; zdjfOndO0>4I;UnY{}ko3^0oTzy5Lf$;n&$unS~IbZn=7Jn za+S$k8n8E6Lt95A%AFtaL~SI3MuUE)4l^@piBqvHoD@rNu{NAi#HJtH?&Qz;9UZ9} z5AzVtCd;rK4-XlU2;5v_^*@q`G;{Ai{acHQ&hI#Iitn}c*jWU{)&~HmPl*5?AJ%ZI zNe)A)&H*Pw0nkvpCTb5Q&GiZlrJOa`oQg4nbX{FjJO(Aud2R)JMP&nv>`yUEeg0Op zoRXTGfs%3O&Y(Dvxfg&PJ9(g6_7A4F4|35Td%4q1y)qA?1lBvuJVcz!SJSY2LqKy| zjD8}}j@(v7?UJbAb_GX)x(53l*_ie1qZCspkd0V(oV9ahdIi=6_zPNZCHwvZ%)3U;(^iL7i$q_ts~4vwNKHIh zF@*=a#MNecM?4Kr=v~n6WsEYh;of2^f}Av|IV`TmffU?cH#bdxQT|)SPxq3fvt1c=24n; z6rh^io)yX%&IXG|p-epFpq2huYHK8!p%a$u&KM1iGPNrVtIzjQ;+o0oV|5#>DEjwtAWW^P{Vs@Uf|trvhh8`@SXm4)_=o9*%(!ljU=a@e(93GKPO{?czw9)?rpJ=fX5=U5M_ASNGvTNf%i;X3r1S_lQd5nDglvFkF$cjeYx<9fHZ;Tp z2t!GCFLubD3!wXfJr2z=f`y{)uAcr1=l)X8S?tAmjNy{f(@=#(Vp~s!OR@0bHJnX= zon?#{2<20$NBlRPt^7DuON+F^189@%p@}xD8*JCdA@Rf5PD08vl&NWN6+Z1)8`51lF(V_&yTeBs{aIKfLmRzvnRFFN z8f93rNXFN>7~nX`vmuT%q!?dkqa+FRWgy|?1TsABm6YB9Y>C9y3gG6@906|JuJKN| z7ZU8ui}VVfQ6Jr4wE*PDEg{(7l;;ks1L!ubSH#ef9ELM3LlTuMWrwI&x@b3DXDkT% zP%TvW%Ld1Q0wXv9`P{z2OLU622}K^ONi2Z_inCF@HLV1><9=4}<&v6yATT!|Zye(GCK z56@7l9IScq1o4dU1V^q2bx8UKh7O0ZtGqr{a3`&*lHX_sQuZM~9Pq3L9Sob%bNMX= z>|Z7Zi|U#5$b{_aHNS*in>S~Yn=#dejL7A~9^E@(aJwbXN3uPB$rQ=qUWFtsxXI-5 zVSRq}CKA{=or#3c`6ZMM@{XFYNKZ`w(8gSb1S5Hj+_7a$c-o;gg?QRR;j|?<@E+-a zvm7!TTp3eRx>@7)i^P+JS&@E#r6vyE!34*+?728{svU50MS3ZlaF18X+) zO9@LvRD{Sk%4~0yEiiGM2AC&7YTBnHqN=KL@3J>aRILLQ-YU?|CKlDDDSi*>Ufv@9odP%dHRFDZSf5-R*wQBYRln;A!{FRli_nII!l zXQA;Bu4yPW>5K&qVwg~ZYN^L*s92|6Gg0MHR&05eYEYG>b6|&e5>|H(qQ^iy?bMp# zh^w`;9cGBO&UWeK{~#e?We-yySp&0&16JcpO8;%0mjoOIXKTp)UnB|Yupl#QBsCac zCIs@XG$brK07$9A+C#I>doRtx$gb98#_wMyNG{i2jk|?QKxG#kIFlMMmh0XKaKdWW%zJzvU za~bujVx`YEM4|D2fU$*+kILmTJ|;u$#5U?kv^mkx*&30!?s<9&QVFtcT_bumz4hQs z>Q<;!84gFuq_NOITC_x(`sn#6HrbM-`U^%tXwje%b8P(`fylICSzIh^oJ zEjhKFc7m4%XxCM$>*6J-avN5lVLfDiB+eVz3>;NLjwfIgssjST=x)n3x;^pZ$UJWr zDO$-2P6Yem>@>9XDwaztpI->BvO?fKQm79XFN7Hb(;~Or$g_sa{tiwZW0+S!*hJC; zSWdZum~57*I$9vn8rqM$qJiT82V3ZWq6cbij&q3Kxb!*R|#wAM=( zi6s3kYU7#|V#3qVChWKblnz4!wsgSCFSO2i6Pdy~80p#+$2f}ogPc)vy{n+sQ;zG1 zN=jFU&3)WTfP?P^9_z4Kz*|pREhC5q8nOQ;z~$JC7ZmF3T8O*$Z`GUGx-PUQwyew7{m@n}%1#9$Wwb z-y-^RBHOijf!-ibL$Z0-y>hna_Zj+pM3YI*EjbmH)uIHRh56oRj^_*v_du8=yCGBA6qIYx;gb%sp`Aw zlnfRCcKx3)epNKKer!*{@i4qO_N}Bj%{a@&;v}pzcJkV6dMnNt^w2verl$&fDO_PF zG+5P>6Mr};SyH+Sp7|vjwL==cWzn2JP))>gdk-d*Rl|XDN$Ia^3|3w|iVf|Fx)bzH1FRaDQ%iXbS602Cq8hG2OG3P!{xC-uP5GWS2TE`&Xi4ci-*T~Kys?C?;@bRB_m&waW~6Z< zatzc$_1U+XMGDa~mB2`kX-}qb=S;_y)B(S;%-|?UZ(>0^%?#j>Bc`m3EJbCK*uBuJ zsVm0~lnZ!VY=O~i5BGxE^P*WnC+Nkx`ZSEsQaSs0s~KzVSTiP3C=rV{VU{Nl*e!)) zUGV?P=6r`~D$h!$cB?I%;s+*WA^}$$iA*+|N~Fc(FZOPfls;_+Ny5c&^k|_euhV4W z@e?Lv>~6!`2Ga0lrZzIkp!mXDV(4rrIjm>~1%J4x%n=bdDA+W!?Ow++QjROzBY>l0 zIs}$9s@6gi!(E$_aB_PpzRfi0StQd(e3zXa7G>7>|B4+79UGY!Rg$eKp#YPfqZDP4wn zpdJqYHwWy*Bvl=duWkO;wjo(CGs7wk(;-I7c1`=UQM#OP?gSk#f=oUgv8!!zX`{IB zOAcazC6j_J6-L_3=3#(wKn|EfINQf2TaxBnEO9BSX&F)12)J|-3i?ZyYY;8sC*B1@ z5XJR6`KGP`efI&5u9cK-w5t%#`!uZzef*Ej2qu)q=9#L7c`Udd#rV@(M421DJAvi4 zTGNbgR+}-sF~QO60LS2^_C`--Qa>f)oX*KOw(pp&KV$sR(QF)X`|LVv?MZA)xpAeM ztFUH8{;5V9d3*B(rXV+Eul}Nqe|5>Wm;tTh^+-l z>nqVpGsb&OOFNmMO&*#J)9{RnsK!?PDEFyQ#s8_{U=x?DQupKQOv@A=N}9{TB}v^5 zXbsKC_G%*x4M$d*WNOembJYE*TpG#`mzGnFEvDe&HirskojK-$tFlW<-($0hi6kk+ zZ0mq=*IUDA$|d~nfKf8@C$nTUTOcqUV;Nlut|t^Bx}bb=5`sP66fL@mNHaKGPhL{` zvY9GSH$fNJqe)Qu$;Jr~IW%%AM{^B{dYG79aqeF^fW-;P%W<6)=R@UUr~jR+S&Y(7 zGr$5P;=5D5DHvAiJE3d9=Jqsx2q(S8P)M!~yxHlg3stq{Mk_GQ!G=_A=+_pxuinO2 z0)!^Ru*q5hNq0Vy$INsn5%E#8bNdd!N~=Z1{ilnMN6G~Hv`%u-J`4&;yMT4J)lG0z8`kINJcD&&`R=5&^sy$%x+hfZgY2I zb*k(LEJ7>QTr9}=Ur{M(t}|#-X>#Qr(cLStq$u5;(*E>hIJbCXLC4x%k!ZaQKHov2 z;?GDn;eOB%pg~(z)da^6!V5<7zwv}7ZU_|N_q+Vhvb#yP&nymL6n0m#<9z2H7 zeTI|~VJiblq~`|IO?KPUqgwjPk}DiZLJO8DDR{c+T4fx!TSKGZG~#b>Vj5v2;RQ(7 z_$Hl7cKTJcOH% zV1(?KC6WQdiKswHe+qd<%w(6Bc{$BxT)Ia>HJY%(mPl_(V8IWk#HnMq2XwM+A0YFy zt+MX&+{VmF%R1ooq%Gk2m_c_kg=WEGHSx zUU1T9x=xqhvqovJSyqcq_)|lk!*ZZn>x7hc^Udr4SAxlfaVBG#7s!&3X;K_CrQdKz z;;URe#HC+cDYu=j;dmJz>vITu;*_Y=++6xmuZid=vg3*0iE6b0?dwOsDYWbfKb=C& zJ=nMN3_D3|?8*%4zU8c|#LmfMJ`}xfwcYb>dFZ&F6_SukkMrH8B5-A)0m;c<6C!t_ zb$F^7z_yUhu~>VyJ5sR(2x;JBp}%AL1=qc0F}7@VQ3~A8kgr?kWHTDPrkqI1p|#QGALPZFdvG@K74w1ooh%hgMW-PC zZZlo9Ww?wI)kNgdK&zQb1iQb;ad3MQ?vW7j@G&!7+^JO`US_N$YW)_3E?rw(q!A8| z3=B{Zsc7ysQLR$ny$Oy_5Y3*fFf228H;FLaKN=O0_1m88>X*qH_aI*w(0TR zd&Bc5Qem2SUoow3^av&EeKtHTV3&FRsg}j?^G)}|()s5125B8wb&U}MA&cP#9&0I! zQGuV?na4z+(ut_iSDf0NquscbA7S^Nhgo|tUXAjixdHJ0pul{VY#+c82j#Q zfY`H2D3%;UJ+izyVpFu1z&3A@DM=prQICDa&{u%#U*VPZGM^HI^sC1qd$M7Q`Rfxx zg#TP?=+jMvZlwmJhO@Y1JPUG=HXH@{qfN#J5>fSk){Fo>)KnvK3iQBoo%dU`jL2%v z!&M-z(#t#tG&OqkZyI@4Ga zpmih8dyR;lSQ*TbJ81Pla-{9YunO3)Z<%#Ld|RDbfh`ygKmLrFZa#VNnBKaes2}?XAP)6no4l zte(J5X9o(N;E8m>nVFbko&;$+KDKvlPR5d(>9|MIUVO6avwd_}%p|-l%aPW52bK)W zuR$Ajz~sD&qu;o->2`Pitlaukwh#48MA*0Fh~I$W!hu82jMrf$DV=ei|Fv&bQYMkR z9&ja#qg{J(3a_PW5S7dbZKq-`kcN)h)h#&Lu6E*+_>YOY0F1k7)qb45eln?Ps%~dA4>Xm!nWY9braY5Q-DYKD_V32U2kx{FLa{*q#(LfTQLoz)cR_Oy)?=hdwRx|P0}~O!^VLw_h42+gH>J2f8jFgQe?@1wAR`eH zw+!;x?qLQ76H9hwdivVoe~Kmps-B;NeD>tCb(nl;K&G4T3jADE)!sEc9EEg}X6(R{ zr2|iFM7G+eGtH2_!~V&{3@&9MT< zlwoD;=xPyV&w;`n`01EyJ^YG*RkDAY1IbQGf0A2JD0)-PO;;l&rO%w}!fyK#5b0WW zp6eqyja2!@{CMNwL3bsYG;fr06uhk`6CK=)V+bO}xN7t+ci!&7kh_PBB%iTso3H>CJ=O%rAUo#NAcUF(gl60Kah~kF%X+$L5d1j_vpdwT4CR~<~C)%hdV;`flv7AC%DmUV0`Z!jV9B4$tq)E*psea&Ac|=RfT}Ca` zaJD-W`)nfBd`rRls6=@xTI%Pc`qW6rMEXU4Bmf3sBffh& zQ}4xNS2~riP~nQH1bN82-EzQIw;v&h$C{N{;|M>=?so-}49BzFDnIr8 zI@tWBOgFiOHHV58k3#Hph~gj%n{Da#BUN4CUn}X<*F8k)yn#Tb0YZDvxS{f<2}&QO zM4EE3t2nmWrD%+$nd?@}SRa|+u>E(s6+$JUvF{oV%&Dn96C$D<^itub7t)Dg%EI8f zJxY|Q0VK2w+$ye90!hLH$GIvO@4#U>5&om@_Hl_uW-r5!m4DIA==n{Q91gyl-9yv9 zKt}}7H_F{v!(*iMOkaLHRONVc2NtB^Pr5xlkm}hfddJ^Ek)g*$aXfb&it!p|dvPcd zzK8Mik5=0Uk%B)d%ktUKg>znrL=ohHa8dT^WYu{)sEtHZU*+nMp&LC$cDoK)|K z$D7F7M6@~lSCj%`9F|c~J+7Tzmr8CImHpkWC`e46ptfoNd}LUI=p|pf(w^VS9QJXK zdj@4NVnIG-lc9aqe>;F(F4<_)A?;!feG_atbcJyVT1upV5H}A9gI_7968g~YUQnfX zoXGx}Phk?%UPspga7U#KMi9kTtmz`$A}hOK_Sse?1H{qub&%FDX0$@{FH`hl{h3$Q z%aAWYp+krK!lj~;?|^<9IOL(X+wJIhSDs2})xx%F?9h}Fu*?Y_!&z9F6|2|NnC#R? z-``-W>7Y8ebAvd+svoYKxa155B z&)Z{-yf~PpeE|8mxs{EJ#bED)x9i(Mh5j2FEibb0Z2bH7!PdFr=SK1%_^rG z;u~NHsKxmU+04Ue4|{)rOkF>U7^lQ)?`Uf4fI|u4N+q)ZuFfrLJ{4n);kHs~ZETjg zXhd;^SKHB1yHT3Ohfr9nJ`5P;05T>Fn%;;p1K$cS z!{Uhem=vm-ffgO;O>IMqvBT#tK?57lCBog=ac@HnnOA$yUqtPUgUyv+mn0JM^nkpze2ZV2~k;P|YbB&r0E*B>pCK z3*Q8JlXHG+LxFa!SSam^{cZYj!`%&<zpzr2WilampLm5a(^C3~vf?G!oVrpeI{6JK z7xWdnS2g#Dz^67g2#1xo&@`01=a-mHxP9xWvBGw*E=12uD#djDTM#E3%~y?A8k|id z?w{3S5`8+a5>6dkZQ8$SwcEj!bGn^#6i4bYQ~((&9P2%r4h#VpC0jZ!i;lw{lirkQ zRur@w!60((PPO82IT)qWI}xJEcfN+%Uq|#pnHpr#ST3o0AprL1n)$YjvyyiE_(duY zO5Z>|;4PsmyJS%cL{>mvQvW~#vhs>0!q|IIz(jkC@_tlo*Alm&;Vf8KIgJ)orrpAp zov|Q4N*OiQqn$id&t@a3vuoZL0Tr)PlWhK84AWq2U6c+&Rc~Mu5@$0|^I$2agc_dj zYIqsu#T3Kq+Ta*xIUs1ybZ6-pv4PA_kiQ*DtnnU4kw^`I&bx7gbUMSsS*qJ$j2nho zpWA6V*oJzn%Cw>}1*bNdp1z&A0V~6Q546=fNT_%wh1-%csU0hwq78$aDPaXOFP3kIDhw-7sR|?uWK!>wM(&IV>W$(>MssX}4h; za-wvB)_H{cd8d3C^23<)s!#sBA#_nj&z;1_TNZMOg zNc=BaDiq6!j<~ZFf*1YUPy42x^k2Er4r*fY=PyV7YunkJcfyL@$nvLmhm9XMc{0<;rdlAQnS7l9nItoJi~{jU$>Y~lqV`z zmM;+B0N|oFCda!n;NMj5Euy2B>=koXh}}{HspW2>{JE@b*WhH#>5`G8j>FRMN~T;A zybg+VBXVY|m+6>mFLK?j2b;T!+P}CXoqOEbbuI`|ZC#37z89v4IB_`a?7n&Ud{<{H zPlkAMSK4kpeLRS5+)$7iES6OQ(FcUs1GRxr;|lrdg=7~nHV$wG#tnBZR5C*RY;NZU zx19GRr5%zDBodrOEumi;!x=VVOCWwyEL{kCXlQCyri`nh6UY>_Qb04{G!5e8Usyaj z^FRW;8OAlyl#ZOES?xf2m?zVCh6cJtP8Y(~P;UBG+iKu}h>rebtKr>HgjPp!8wGAt zs;p1Qq~BK;GUkS@%2f#pO>L-}jnm%J&?*d(z^V z8O<%wA1)C(qz)p&tFh@9QsDOZvCEo=j$|#z~8MHW;wHYY%xZ5Q#{g`h;M9< z3a>4}pu-NZt?k_U!bEo=5pA@#?T=hf-zCC9mK7Ze*H_tCCxMzlUsyl1(@-49`9QT; zVw6M~mmC1sAO`o9X#4RYPzl_Ii+PznMDN<#5Fuk?923Kd@|*!Cee zrC^g4uo^fUL^~(vKILE~dI6E=7QdciU?{TE*kq#pm$0)ho z1SAJrhpSth3}IYxc)sYelPX5YNjPobBZJ8u;59r;XpG?OG)|Gt44GYwpO#vzU_Z?O z)o^AZBan+%;$~U*KTXgHJ-H^Cj*6Y878e{tl=n-L8enT^ZmZ>Ntq&kCYeRuA&vdk* zS7*2R=mcPtO$i4HJth!)nS~Ai3L0MY9xg?qJ~Y$(uz;};+XdAE{2nCs8fJ{yfpT}M z?(vS~W~lel+2mLqnDQv!;Sm13!H+#i{VI`4!y}&zV>Xz*IKoDqS7y)Mc&ipw^d?u7 zeSJeB*4!2s{qj8l09f0@g%xq$DoUf($FKuVPYZ#%stQbAxfT+3H-wVdKKVC+-O0+J z^y(ETvrZ@*5kMuO}3 z>hbFU{_dE;do*!_Zqb6iubuJWnJeCX?z88vS;58wU0A07RVLx&%J z@lVcO4yym4#D8_}z?a)DdE)&)+xDCJ&mVqwiDf+_@ojfiUUKm#``)N{a%^MM)xZ0W zWu1TwW)(d?XZ!0NpZ)Jw_rK@TmFs_73_8C=;(M<6*yzeb*VcZ1{-hm?zI$}JW!*0E zw@rS}jhDZ0!j}{4*WFb6-}f)ItpAbtuDSn@y)OZeqRQI7ffz$4n4ocIv=IapR5npI zB|x)DAS@A-Xb4FlVN1-yqM*Tm(ll|vZPY=9e zUZ}pV=Ye_iPndSnqjMpr&6+cx`#$-DfBTtc;@k1>ng<78{wTO6^ns(NG=Fi*^}9M; zxnj%c-FKm!*9iURH*fp<-Fg09FJ3pl|DyQ^w;A(_(3`ip{rHm~Iqirsd$E3P&)HZq zd^~hLHSU4moOtuRzjphn+u>v87Y*MIcm5Kg|GDU^dr$v%b?KS$UAss+g45(uw>Ia#+-T>^AB_$vf=)Z zuh?|mt!bg$l~Fvkdbj!f!uQui}p?~mY+zDr2{Pr0qwpiM4 z$CaJGH|7hWpPPN4`k}K*56^6$Fn`zii@>u%3CzFU^-mvh%*UTUy!3`QT0PKp=5%9j z68g-9FE0E2zt<1^-KZaie6Z?icoJ_5{lJA^pFHr}+1~`>zCQ5Gw-4TL%*lr{pZEH9 z7&zj?)}MYfWP0y+){XkBF}Xtj&Ag|N+P-4mzlvTv_WB7QPdwh3yOo|b`MUQXT62eg z<3&$xobJ^p+EJ*9Y^?^ zrM|whqWuXQx5Zy$%xgm5nYr*kpPlyE=;TR1pLJn}6HkCV_?XYTe_3|*&claHJuBhR zt7}dyx&=Bc^uCWBcWdh>pE$pC`m*bnzsRybCiG@E70t|>@UHAON&|$OYRza`J{)}A?^~PXI(XM$0Kcz z+J9H4g#CL?e)nFKQ|K=(NSK;%*Dar3bnD}b9)A4q6O1_tHX=1{&Fiag%PxBT_S;Td zef}3+2EPRT75e(}-hEzf``ZPD%Z^|DWA63sjk!bU)80Da`%~Xv`S%ar{cg&U_nf;A zax3&%V=tNeZSywIJ(k{QdxsI7yBl*#OXlBl#2fFFe9?cwsjY80bpG?pUpHp5(2xA_ zrAJl{-2CjP{^wr4d)ixTAP+*{aMzEU&RY;T@agc6d%gGSkC2mnLSOUnuzweiFWA&N zb;#Ve3Sa-hm@|%G{?BEe(`Vo%zMq<%{oZ+pZMu67?1Rw1d*O%A9vl4SvRm(ZboxsJ z?^|HZ^Flvr)lL0&KRMC&_~xg+yKL6QS;i!!FrRl`U4F$onZtif%Kx@^yH4+X0zL@+ z?{_r&$HIrlR!+-bJL&r+`Ka?%LZ5i&!@(23+=?wnJ4s3@#Sqsoq0m;>4QFf zY|<;kE->ajkEjAzvt!jXKvV&z3}R(Fv75{sc|_)J=*QLGdO+yas7JbKe%)j zVlFP)stRYm$>cL!FL|Oya%Dbe#ILv{`~E4 zznK?0`Pe6yO-wN6PN7da|B>Hy*xCK>Z3cD<70rL*Mq~aZ^wZBgXU*&9q)q+0b<%B{ zZr#(>n9lHsQ{!HGX7$*famQ^q`pW~K-559@-O5$g8(Y42>B80a_cPteon zgnn-DH!b^Iao%^s7d*W8=9eGoh;}WF`DEVO`Pwb*A3bf=`0;g+DjMiG3NI| z|JzjqcAfR%>n-}USo&u0_m%%J=0l;kob}?g6Q6p)-1XV#C;s`=MPrR=58Y0U%f0!B zAMS7Yr_tXGy6>{&M?U|HG1GOO!nUHa9iy>rbRp?^RA>4*RQed)(*w=L_K zwfZKM|7M}*tYTzVBap-_o$ftOS345c+|EbGn>*;~o1>-SWrRLf^hO!Dvz%zSj@mLl*kCo91tMX;!mwk9I8BxcrJr@G~g% zz`JLruRr^}*KW9C%^TN0-+zlSJB5DI@A98t_|51=KlL5*@E`9_`reqcu;?Z=ZuiYS zx{jaM{_UraPyWY-6plAvF7&d4WyhqA>Q|KbQ@6RJzId*}m`y?-(f#Y6-u}aVCvX2K z{nEcrcn)?IjydufvtsGtEnnU7&aQTSK0ou-qv4wj5c(fF_g&k4+2vPdw;g)Z#@wEp zjJZcemg~N`@&RAYo_}02(wG~CzV6OGYo0DC>v!j! zpS1tv^JCDay(#o|1*@i?ocT)oKVG`|^_KU)3x1x4I)FUfcE%?UUVZD&gL>Zf+eM=i z;df0H`n~C0x3>8C&3`VtapZ^r>o0!|ey`Ar+OOP|*LTmvfA8Ktec1`O%r@prp}%zD z>h~`^^P$@o^liE155N5!_Pp;Y%>TR3R(5}C?=yK%bzOb#%&te@V9eD*FJ9K^$$yRg zXw$|M4?Ab=N8=NXd0pst&OM^KTklcb*S>Jv*ympy0vT!DmiZ+8?u1XbR9v}de~-(X z$ItIG+?ZKH@6tE(fpyo9*xvr>yOXav=J?LWtPy&AcH8Igyti%Ut$j{^=)!yceHq$? zcFbpb$`41La>^?UE-ps?o!eegNh0ihpwqQ@&) zCv~6LX3bX*j+n#!+1?X+!K4*OSL~lXYVR@kJU{Q^$KEjJYXe`Q1O65C&Yn|TIz4;l zJpa@pj^^YSWarMzomDiWs3N;?YEE%pDY`di7F(E+xzH$k#!T!S>8zYNv(V)A&c@!Y zTteiZf=-_@f5*A!_B<^cE4K5C=al*JA(^u5u3fT=X64POz&*NlIkU@|U3+!u(e=zO z*%dPxZ&o?7iM2c>n1DF5Om?K0(THsDSe%Sf5JMJud1bPcG<))lyy=+x&{&?}vt!w^ zX-edb@Fktn;`oakI%+XV|jUEYPrb{n&QSk z2$r_;ixH7zI9h&Kdo;zs5bnE`T|Nb?P)bV9%quBrY)R%~rc-{wl*VR*?d2Mq#ayfj z;GP5x7ZRyrs}Ur6H!`ES;0rb)D`<2+tnl&%v&L?oF`&jhT=2c2 z95|Kyk|MOR@oZv^styQ>X;xRYITv_c8 za>5Jb)L7nk^77Q(gu{UG{k(F!8HiA-Xr+HHKLi!K$d(pN%PYrM%Oh7;^w!)lp)uJ{ z5xsm&BgRKru|Hr_6iDXn#-Ig`8D@tA-cs^n%0t>p{XVSoNDa2S)+RydE-Qz(Sx%jf zATTl16B>h*s1LvYaztzz;N6Tjd_~ODsuC=G#Pm`QdQ6>;ae3AHcR$+f;F@uI{@M} zIA=;hE?RBApEa^vb7x{;r*vMI#^$5j1xLyydYcJnWJXbJy|&U0utx=!4WAX6JfpE~ zo8^n3@aT$*O^|HkfMx{(fabPQ;>fv=F^IGM7KeeY67h|VpaO4|@wm7`OhnH+j$FB!g5g*_I_a!ZOD zn`MoDdG+lhXBqY5&crq+d{1bCtjbHf<`vJJi6!g}HLU6cW2_0KXlPo;YembTW1$Vr z!EwQ3xVt@^BU^m&B!)bkCn&?PK;!G7#@C)2*&boR}J8+r5!K7VNRx$Z}Z@7l$#* z%VK#AvAf2m=9c7WXG=o`)bW+9JzSmHMD50P@wY3OT;lJCps2*p^B(?A{!4`bIthAG zrYGm(YCpe;HKD&O!+ejW<)D~5Mw29>v&@hH(P-w0VSDj7V?=>;;{NcXzeZJGxq{9MUr{YLO$~; zkf#0ILOwIRnH_JWg?whNL!0l={LL}(R7#KuG+A;UXCa?i36v+aRTlD@G@LU3;B!>D^UuBc7%m|W*HE3NixeVwbLhEB8)GE+Sp*?6JpJ|14A2Wn@ zw1s@;N}%aNyV^oNvkz#R(7v#c&rHDl*CL^1TL`=dDiqp_7D7C%&0tBvNelVRjX+xF zTP)-=*BxQUyWT=R^9P6am_vKUp*`o&UUq1&I<$8k+CLrIK8N;&LyO0n3@u-xg?uJH z)fhj@e7LO4D3;Qn3mTEnTn|((w3{vDGv5J~3GD|9`OL+wj42h`r55s;zXDw*G;Zri z1Rca`h!UZ-w~)^~0>ly|na3^UGkbuvEc-144ZsQojknT5s0D}iqC@+aL)+)j{_W6y zbZDtqk)ZjdS;%Mhb};5h=tz?J%tAhs(h;lvqZz(U{wPNXWE{D8Qc=DgN1x%DA4;7Z-j+Vmq4dWJg%N6@|jP7 z{weW3wUE!0pNSO$5^t`Bd}b5SE{V6rLOyfWSy%xh@w!{cXT|}2An_(x$cJTaSlJ}; z;w|Je?SVd&c&A&)XMPWKro_9`Lbxx`M|xii`OMi}F>_zy^|BCX-7(u9twfUPWg*!1 zKE}KyY3EzWXO6^d_qLMu7z_E#9ht^p@;cJqZ6Tj|4``0iKCqC_zeVVTF7VK z0GcPXw=Co{Cy&7j0-?3Fkk8BkxiK#PQyV-_(pSyR@-5306QHx%877ZVVXeQ7*dpsxdXUy{t!9;%U)DfP@KXgdW zsDWd025}<4;_Uo_$rV$rlQS`jV!r+gJ3jQrZmHu6xEOIqT1uX`&wU|mw|FQ;^yEEWeD?uB#&9L9>ITV zS!X{-7W}8?H<(uuh8D1+9Y)Xn=k@b<@wad9*R#HU+0_CQ-1DUXMRnc(SIOsJ=Ebj3 zzB0#+Ngp;cXV9=A*bpd3x29;QE=H2CUq8Px0)wEWzy9ZxEoy$v&p9#+`-sUV@~BTs zCrFbDcAX0&Y@Hc3uvVHupt;lVyhfT~_#&u%BRe0`n8Ezs# zZtT$XOl-3~YV5ci>`kIyF0k)2a>$tUj7Zn;>;uvVvz298!x9gGY@VXY(81zd;mNy(!O?#s2bQVR{+(m0n(6FtY?( z50Th0zu+{?9>b<*MP*tuv!?s;@pr3EhFLqu_-7TD`_Wg)BwBq~{me?7g0E{Lqr##x z^Z<^`8Zn}c(&rRc%*gi_=FTqgmll*)l+MEKawUSF6MX#E4l^i@#?Pz3Zq3+W6MG#N zaT`uQGGunRJ`$_g>>~MbrM$2}1t=WFWR@1pE-J1l`=xkNW~3tn_?{r=GVp+%4@>Kg-E`4nF7#hRo8(ftxiQ-j<6o%)oVw$jHge$)X1~)A;ecVv@xu~T{=QKZXJQoX2^AZ2o*p5sXnloh7s6ob_+UQzI^J{(H zVIv(&Hx52_9sc{T(0@ifkIfpu5B;Q5#m&fKKUN|@t)>*0`Z+Rz4(YP#MI|NBK=fFc zHl&?#US1)WOXlb38K<M)6wZls)L%TTx zbA{1>qG`bd3}`}`AH%-*5J8(Z)R|~`q2(PbnWp1oX}kyZB@^G_!M74i{oE7JKX?YT z4UP1a(&CxuHQ-HEjH13z$6AabJJ^T|U#!cexpOSGIal#4e*BuMe(I|Ga4&`OemqSK z{D9o@-X^SLz5RoV%JOnc^TCH1#c2C=Dv+Og=I;oma2-A-+G9eOe|8zUBqr!IpO*hu zXs4rT!(cCKV`AnSKSsR^0bOsir<2&m(qLp8jk&<#+ z2lj3{=Y1`EUeoiyw*{r8r5SCK<09-u1Cu15MMKvr?MmKsKQ=<}7f?|r2vCpP{PKwPQEs9%pp=gXUzTRO>}>0`|^tm z%Gf0%Z|KsBkq704xp>8gJ3yiKwwb?1xvI0Ce}#5A8kuV<|Lgx5IcXw&{KdMNfVa7U zP{;(64a6aY1TzUJAc*gJg9QyeMhDI@bqk2Y{wIAz2KIm&?Jxo>11FVAk%{_#gqu*}bZgk4{^}1d7^#m zLK)xW2V1f<7ll5)WMjP9>Kt{|$AxuP2n!aE={{2Ylr`%YuP@I);i~>}3o|Z1N=ij6 z5vmUQD$bOL;Wp4hLV}j^j2dB6Jb3Uz8Ih7b1rd6J@X4~S|%l*^NmiY2- zTC*^=GB^$y;8|55kXpz!`4u`K#ad+-tIvV*0%5&F@h~g1I%~(6nw2A!uq&9c)2Y#& za;KUy;jQ1AVs@bBO;HU0wDZCbROiE450tWI%itT-SwEVs2P>1hQ2Hbe4Vl;>+7l?5>pmk5ALO`34C33Fezmbl{{rl#@AKf z`^x8&xmQz)ooZMT_zG9Qs`@^${77W*Rn-qko-D+Zx29jaBaw=7bCVBTm&?K8>kpu{p2@ zJTdzY2OtHRR{do;5wGpGukDs=S$q0q?M97G`~}uK`Iir`SxBhHxsulNh!%r>KAN|w z+LQ=!rkM-djRO_uAg31=iWW)YRfs7ireH7Ju-!hbdA84oj8ysXXpVKb)N3BL)?pty z*J&R%2X=xfl@_};2M!2}TEM_ot&a-^4)B33?d}CzT)hGXtIpa2T{}>x2@Ax!HQilgna@#uS^bQP%ZloV^0c^V=3agP8R{464Sq z;=>D_wg+Y=7+7oDJSsYkJIcLQI35h_pmNCbhcb2qGgey+4P~tkW^Ly+%AN@Ywg&?{ z3lkv@l1{RH9C0ZhxHA~^xRv2HCfX*6vbF`Y9J`|% z;CQJeD^(~J6{v~!y%v%zG&>Y+bNWy%_x{j;p~1kaP{yiY#+IrDTTFQhO|{BcFtC!v zqn83dWdG&?nus+vD44Mc`Dl@B@d48Vdx8UoLY_idyMm*Kh60;Va68r}N4TmM>@+Eh zCV-`$`nv_skERt2x<#@M2G+9#>$L>ygIPD)3_>9?ZVWDA9eeUvjwtbx$8sx=b~+ z^fZYve5f)*pEej+6bdW~24G+g9VUgTl*=j4Z5dsCQwfrxa`x0nv3NeHA^9I%JQo<+ zpAf1ha*~EJv@OS_!>X&9ja;%GNXw&{WcDE&rfn9zc5mGnFd~p_YqNEkRxgy13|$a6#Zq-rR#2{l81{onA7(K!D><~3 zQRI1GuB>pigknI~3B0BG3%7RK_}alK!NBh74A*5FZfX8yb%w@;v2Fg9eZquQA2x5k zal^r8Nc_pPc9NfJJj&gSHqvob!+P&BBw0J4_wtB=N64G14I?BEJO?1;-JyUtLetAx z$yFOCK>~1jl2QW6RqM+&i*hRqybmm~pFbFQ5Skxa>LT1rW-lQ@Jq_oQw7KE4j0c-% z+}meEdE3HdDjeeLzdD_`tmK6o??nujZQ%x@Jxn0CqC26tA`<%M#nb?rw9Sk2f%1W> z!!p{uIJWK*66H3*z;?0Ado~Al(GI&J?n`r> zz}{7Dh=b*H(ZtV8S^N@`p}EYTpH#JASFc2a*Df|j9vjt2=N<#|o`6q88*>0HSDN&CaIsUG!Q6NGAW|A8P}^6_fu5Ck zA)t+dZg*&p0KFizCxI>zL^+*-UxN87{x25V3qUi4_Oe5J59k@W`Yq5>LGe(Qkf0-h z^uDcuW=Y!9fmX=XKF-yVKz|ilG0^jZZU&l+CrU8)1L^ZV541?G^4;Peg8mIuCCI=c z@aYrGVL)2uQ-J<0SGxdRC|A!08ZW3X&;&v0KwNy0UcX_?ysX_?OiI$BEF8)%ZmJ0D2zHWKIv+V1@%}iYY)^GZjE_$TQ7U0W}k}1}GmW!Mp&Z5{nZ{Lr(_!UY@c& z(0)Pv9oi6wHWp}!T)h-1DCim>)hK=vOwq$Ymr3a#11c4?28g27ol)#Xz4)yoEq|-)f+5gm%9}dkRQ-x)JCHxw;LA z-h7(*9_T-U{4KD=PVUjsL4$#~5H`(>anKYXEx{E)Z%EpQ9olma?JFRa(=*V!tR?6H zq_sK%NNbQE96KnvOmVJW3#7Gr1JJv2^==@o)zuFA1c=KK6U_HOS_{V}+4-FWq<8BH zq$TL*(8dCNB{@%b&}^Wegto{*%YgO??M5Ii)tx|E`X_;|k*j|N;s<)t%*zgKheP9{ zRpr_d$;QMBPrCyp2?_uuD4&5^3d#q%QSzJZphZAjqMT-Ka?s;IcWDV6+Ur2qiLAW^ z#KtPMkjmd4AeF!7=+xD_od~o=@;e9UWkJJ%{w^rTLFEp*8mL^Z-VU@) z(8CV;E6|lf+Yj`bpk_zd@!A3@U(N-3Rj#H3trJw}&@KbgQdI)Yk*jwAX?_nmXf@CR zxw-*J%d!>dDxtj(r1$vLL0THb5%HnLxDQX{HotkD%*;j+NTt z=hl`B?J*#=dM^WU@pzi~2#6nMOfz2qg#`V_LFmcfi;6L!aqSYT2PB7v@9Mr~4+(4e zPcGGpva^mTTdb(tYUZ}JR#bT{4+Yj{%3aVK_`LM0gaVI;Dbvs={$TjjN^(mr%JMKp zUvjk&@&;U^98395T&pN}EwoC#PQq#EUv-rNUZ9fuhXSj@cd|LPv`bxig5?&E=>@it z8aM&yWuOFp*U6kBv<^VoQWxhs@%jP1BJl<|@rDCwosDr&9+2i-2=uC?m8z;hGVYvaE;ZeNBSNL@aM>Q-1_d`GpI?r<& zx};gIjtKdTJSQh^KqTzdU?J=z9|gynirHT}%qCK16ZvFg5v6UzvncKV0<*8h&BxTk>`t^ka(I|+eT>{I)b=;Z zqm%2>u5MO0Myd~k5~)-ZDWi#ehO(@*trqfeC|*p5)dzsL{zH5CkUD~4<3ltHrlGoa!0#WCB;57w@l5#|+PG5e z_=ri;L+6zgV~J2%QCThNk0wo&n$Zh|6wOG5T}nhjPX~ebEmgzB3S`SZdNzO?7inOnn)Q;7meR>#97j9UDJZ(yXQ0{e6 z4p%FDKw_Xj7DFG3t=?1&iMu*d)kdT1!wiI(NiatN>3cP;&ob~LP23|zBS9lC(xkWT zVnH)NQ$#PA?opblcF>(b4+!lsptl7*1N4p{+_IMSr$0igPRuEL#+>r(m{azMIc4{lQ+A6vW!IQfb`e>)0rJq_)0j|xU?9wk z_?^YqJ2~Rqg3-IT`%J8kyxLfCZOOw+0$w7pAx*3Oc!|K2M0ue&09*;>sL_&N142D5 zIm^UN%9u0S2|04mVm|;h3E`6na}hp=5WUUPl5dBG9B%r8Ld{IVb1L$g5}*r&#(qsA zpLrN)xX}2vN#rxTfrbf_oBR(*$l&> zVK^xa^TV*jhH4_iXZIpEJ+pgU4%X_Jpz~ObBBYrk9Yj}Tm(V%_Y1aW9E(@IpbhBI? z;h>9w{vfpJKyAR7G^wr!ffBIqj_c(+nx-Uh;022h4Qo&~r}MQ`IoOD%CF{WEt5-53 z9CfraztFBcPmA4K9z5KtkbT;g1ROLDNL!VeK-!kfcTfmOTb0`#v<^sHl`TL!gyFbR zt+wQ2(A=8sZA;#Q9G~HC7k;5FnQ$>2?uIoZ6D~#z5<{Y%u_QV>mP9>bNz^@-MBQRZ z)HRkwUDQ`ti2C=o50nYE5C5QSw8cL;{)^fNSBF!keJg}41KR@{ok12I8e7S7!Gu(@ zjo>+c9O0~-Vx4b7cnQw8BD@q~GD42XXgfh&({_T$hYiZGp`Or+E#xz+fYOC_uZ4W( zO`!fld)q?TWE7flzR-@akk6bCbe_-#S_m5r0`(KxTnqWkLqL6n_D2i(%={Y3=^YvKN9a1}ox7TDUu5|PGN=!o;qD^m`DBsBzBdhT1ulJpd z_u0{+W(Vth$S?1`03mJkl?W-%mx(;HgOy0%$%uUBL5KE;g2T8e=ieIggTqf3!Jxg4H{8 z0|?k*r#z>;IHySV)G077djb>Z94wcYzv%rJ{z6wPS-*o2lE0k2pglxH%3mU%*tQL=*dq8npF<86!JHApMqXgElQ>FNUShNI zD2tVOAmrp=pAhWwZ}HG8qAZ7(g}FvqI2j>DG!G$JSnRNnNLfgv-3ChAYQ=N25O3o_ zOw6@9M#(9!P_j#}J`O@jOivF7nT8ys-x_oY<(M%8M-2*qeF~!F9T#wkBDb=5*9T9o zdm2RG9Phsbh8YYn?eOD~VQ~%}29;F9Q5NUMJDej@&Jp>{dc;!NCJTi*S3|L%XNNL- zzUo$MswO#TA6~Uyjtdh#9Ap}sgDX$6Q^rN?W7O`2-o0yfA}cjYHvglu%U)6z{q}7U zvOH@OF|3S`o#s3iS{$U?tLjUn93=9|4(m$Wj`&JzK$n%iCs>VO*Y_ARNOKM=W(Me);QNG(SYtIw+#RiIG??W$$9 zx_gCI;@U8`YhJ^XuUS#y-v0hh6^HwZy0Wuqlsl_hokb1JuATN)tU(#`Jfg?vqSsf7 zUw^)D$`M)g!e#f0U-*iMAem(!Hq#<^Xl%5_(H@%E1cIwWLxxQI+xa16xhbNDA?#t% zXF){I1%|g-$uacH5N0F9vsD%%EJK)#@E+8%daRTS^;n5~vgWg+(D>Fz>gS(~~R>cCK1ak_|DMGV5+A|K> z9k#ILx_+{M{^;G~{e+{GJRq2x9`n zGtx7A_tr2fc=qCNoi4WDL?H>A{qJTb`Z(pJnWQ(&!mZS&FUG7 zpM9`AyD-@hH6)#}q~rOedLZ=TT6aZADd~m~?GidH^c9}*co$Cp(>9w(tBXk6Y^9-! zC7!#wHiO2VH)mo_zOfJ#&pO@8BLH54=F%4Nwy<8KP^0ApChT-i`f+(5&pBgew z7W(nC58kJvnr{e-9~x_x*VQZk`_yMy~~2O0V#Z<%SbVTU>p<3UrD z2lOl+GmXuu*&t{x(2IgtkzOtM9cXMw>`JBqLZ;Jh2a( zH<7*MtI!^aE^}gGBGN4efjf>#(?P-QZ)b*(<+%kdhucMN3&CX>F^{7%2jQs*OAz8q zSe5e;c0fqYUx%7h7nzcwE;5mi&b2vPXmF4S79_B^pQxTzI0olHYiFOr%;+(ff6v*;`OCP+3M)G zV~g%^#Ox=>hEgI;pt05gYkJ5T|Jl!J{r-Q(LJM|~T z-}75{WWe%MEWmB2H7skU)y_Hh+8Pq6JtNZjj!N5xbV{pj@NG-a{?fX+_eV?@d^BJEI8+9u?s zw3u3estu`P*WFfM*A}bQcRECHsfd5wp+5!wZnIMdyt)NX{v1jg2EfqJ;(*WChn z(_lO{mQ+1sN_BQjsd~hes(VbSy2X^LYfP!MA8Z-w{#=iZp=_{Wd<(zL9vg!Sv}_Ad z49)hsE|!J1yR=^fp{%%~G*1UqybU+Y!sgT6aA%-l?gl!;zaYfw+{z6IMfOL+}Bp}+RG+9F0M$l}KHUlNdmUm7!U^H`g9Ez#)wIn4oJxf;p^vA(@v=A8_l$x9I%c@6euKNvR^6*HF zy^^SRZ;#~I7h;ee&vK*2NYB@f^pNi=Jw!TdhF6o!y?81je4rLc<9%TvpY&5`JiOpp z@uHTVze;5{q4ZoR8P=4ZBS5SB&4AKTpPlK8>%AKwJr}aG)+IcY9BSd%dL(Bud&A`L zNRG8Gs+Qnb^cdu(#@eaINDZ4CwK?RsN(~W4r0^uXiV-Ob;e(t&8jp>d#^ZV%jmI59 zh#FvXHX(X~X+o*#BpKF}n$5_L}`TjY%VMjl7S zG8K=ViY8GEvgj-f(-+{zNaLf94P!m3G!pq_aXGIhnRVb9kNaJyC zpT>*YhF#m#(s+6u()e)9(l{MYUKF)7Ug&k6q7+X@K&7?(9QXWVJra6# zT=3?R*jO@&L4rN2-x?#q4>=Odx>pG%(mpU=O_HfDMCcBMjB30x3t_$}kj8t^LJhE| zi<(-3N7Ny~|B6|H8`cV6s0-^F*a{zP1(B7*+X~yO_dG)8UcTpcA@JnZ5y|(T1TWqh z9czr#@D)y5Ve(t0hDcjsUe#8ZNLyiz$5vS5u@%;MY=t#m)OPO?spJ~1aMk`q-CjXA z7Y}9}3}qc0!@dPfr{bu)s~b?x7U7Cq##z;dk}%ZOfI`(tS^{+ip}=~51oQ_%?D^AI;Xw`>1*ARpbnq1w0FeW_c%@npdjl2WS!=zeR)Lm?pMCHxwFOQX zm+drPq|-fCkZBm_D*U?8{glHq6aUIuOSRm$u@f2No}J<>&kDDv{%}m0yTsY|sAfE& z9(hLlZ{EbSY7ab-_9qi*`>8axpGvcP;3G`QPC`U7z&^+n_fW+&TsYgq6sBPu{_e0# zXX1tp95ssLs#huy6Yb6#v8}_+h)*zr?WmWIJ$JO@A>_T5qXy8AgADb+t9K>u-PK}9 zrNa;+WeAauK`ZTX#8;Zl5PQa^HS$brT=!cC{Y>|Bcv-Xp*Rwq=Vj31P1;59`eT5NQ zNPD{Gl{LM~*yn5FzU=FxPN}RADQk$rQ#f2R#lVRpkVf^3PwX9{JqEP;IB_ek=X*H8 zG~~pQ_zejA5fM2No+AiJs>zM;r6^^q#uPBzpB%Z@;Rum(gh)6NO{W>Q^gh>=pHzsv zIP{qE-01iXA2!3*voX#t>%P=vb0Zz8U`TP%v7 zdtCf9T<;LkVbpnGVRtWV>bzRb`>?}m1b%-Gi>y7N>`K>+GIw#p@(^hys%Lf?o6vLd zvk%_aJGtyVC@ahIK04siSk}bv<&u5+jN#i|Z zA)ndr#5-W21~_0Fkgey1RyP|#qiD5mF6%;_qUlMKNz;muK`ref&q=orubr8K3tc_h z#Wd6|wxsWeP4Tz^qb5Lo7(}TmyV}(-!(?&@Wmelkq?$q$wWc`T%l5!vt#0PA!pNF0 z@?Qw6x}gBd!Jhba3pf4Nq>o_@6XcyNOXkz;wB>cR?y)CDYi79IE;kyHoBMb!Z!pIL%f zyqYB1K;$z|fTr>OY$08It?~9)DH@;y&)`-b9f-zyIxfx_h-bC| zrNnQiLCCU1nry(aBb5sBQ>B7PhZlHNhZl%^oV;r^-dh&ZSveYy0}UE4>X(eWq!Meq zWa#3+#6E#T<;P6pOi>COLQXvM%&IvW7gkD@w*k6Q5V_^`Ls$u<^T)$$DOrI7Jr&3_ zw3IXrLnHO!>X=b+NddmOS6te!9@}X!QdDd2HhX2lYbVxTnJ^UhwGWns<3$Mw`L@jC z^ycc+c0x$6u`|Ns5uSk%ExtJmAS0WzdT{pOX=qhUf{x1Dgk2SrL2xe;k-1JyT^IiZhqNw;v@VEr z^0d;ngBMD}3kY7kFT~rnHC>0_=Qt$W$RDa&aOk+QG$;mM#5patA~6(yO)!4xzW1Oo zSkeKVIq0nHU=(~^BR@DiKNL7)4~^yaPX)Syb4 z5FCMtj@&`90=V7SZg^8n&}nVdlKY&RA<~*5!p@{WS zxJp*o?C_ehJ8{iB*^Oyv%KG3pHj)b2Uk!e_T4y2zGZu(tsumg&VXUMB+ znA!dce8_d`tOEVGc0G)@rJo`^61j)_LcGmB%Ta>QryTHQoG^Qv_~Yu01@Qyj6BtDaHG~KXM&KeQxA5uz1IIRI>ql2 zXq6Lbl@sYpq|*2jsWfVm(r7M~=CnGleNY^o`XOS4{gO_Fa073JxpnIL23OcG>y=Ys zwqC7o*CcvHu~jA$DU*rxrA}#lsZ-j2v0f#D586)o1W~V&1>s+V_3A04@wy9cy}FFO z8gh8_%9&SX`>|20l{0_JR;vnlp87J_AhnWr#{a6eDgn&YDkst^C-Rxs!40MT!$Lko zy;2(WO5@e5S4qgK?jE#X(kphNcq`1US7i;YFqEXO!_{0l6=ti|XK0|@io8y-JP6|LZV4<4_?T#^H%o`wK&xf(74 z^s)VVLeOZSdjw?zJt>I1^R{HuK}*Gt*LZk6!|kAXN8^}=9#sK;U&5Q#!=rJoH=9TU zaG1s8QAd`fj>F|SI#bAObqwz8Yb-G^OJ`|eN6^+gscJVSu~B*Jqc(7l2piP3S0QHUQ8 zicv=hRRS=5R=#gu5os*tq8R6&VYc>!=%%V&Y!=Tfw33P$zEoyBlJ03@)<=nw$MPs%0C_S35g~)9dHk>H>i;e`wbYHfduyIEpjjohu1(a2W_C+M!MI`)UuB?=UYw)pI%&ZbFyDF zwBeLod*jZ?GMG1`TwVu~&q9Ma0l!-sD!>i1iHch{n^-eaLHwvf*puu>!$_A@c9&zu1RsA;=e2s@?&@oJLnSF7=& zG>R%ZHI3p^D2B%<)^tni{xC!!v1(Vd@^tY9;D&@o9~v_aA2~jtz6s1@)dz9qCxo&N zOdoJ4t!jNdHxjAZ8*k5hLeJ-csy*@h+So1(x8(aUuKWmBCiu3SY|H1K0I*SYrJEF* z9Zjk$P|MKX1sZK1ukoP%xF=B2OkW&H ze{uq`dpMct6NX`KgT?+zIcu0~~ikhIc6QYrtKVdDfB2Jdt*w^JHAf{+iGVgaJlXakyNu-m1c~$qBBl4LR zkVlQz(n1Z8%!Q4S%t1A5Ds}^`X;Xg#n;IH$s5*HuZo==NAE^2?-kyqI+pJRBX;!&c zhuipi-VxQTwv}?%6i&7oZsE-1T|rBeY4F;j1VM`|ocH2teP;CxT<;WFIPGO0@EvLj zUdIr@TWa}}1*4)xPd}xeFvF2Op$4|qXc|t^7AG3Q?YO)RDN3OrFxQct# zXcp<8lSV^87beqF4@|>2op`Mu{>kB44l$`LFLy?6J&h6XQ2THXgnL#;pd$$DPNWX# zI1;JfPZS=kbEcD7%5fa#(YTbu#UIXkOfwwIkIbK6nq+n*QhR3!x+j?p4)e#FGui}< z8QIY-n!=a=ID8>ez7R#?ODp}bZY0*EqIS|u<3wj6SmXVOs#|nM`w>A7-QP-fPiX?~ zIJ>Cmq8ecjzjmyzi$uyEB4tk~kQ(GXpVX?oaY6iFaLCMV1vmHStTcAxW+ex+68F8s zvHMg}4DU;P7d!6> zeNb;W2PzSlnj;EkOUXHPrUJj5oH9A5t=98da-N3srSPz^={(MRwQ7xX9;7*bA2&`_ z?hz^Xh6a)o!>$M6L34-NWJcX2^P$Kkf*q% z!&CbGqs-t|?l?@tIBXl1I#=Q*<Lj}}bYbvU_`!}ezl+X$a#Q&@gm#(77=1^afWj!>h?H+cKC>FJmA2MG zk@?2?lghWG!y3=GQsg$W9=?5OKZL1=Zv)Z?4Hz+M;05^9K_EJ|)!JQ-x0!^Wn{OCc zl6UK;9KI1L--wiNN+aKthK`&%<*h$rDBnK(Z;-c}qmei8EhjU5OnOEDpWuj&adpYt zffhCS*1_W2Oowko$~PkAo6^WPrA6Y~IS$|6ZUVl|L2hH~k++N$ZGn~rxUTD;45ct@nXBhvMhN?V6#QCcM4v9Cg9ZbuXFjxFdV_3&<4)Vv!wY9!p` ztbyZ%eK`Xz${9E+^P=duSbI4pb(b;-vu6*|u@Aly?2?d;PM*V0BIPHMetukOTda7I zZQuEbq5S-y3HVup+(y*H&zqv*XCNbU+(p91sMr^c{^F%Z?A{EAXGF>~BJ7QZk}HiZ zhteX+;EfK?S~fv@F&nv!sfTB~DGYMd(_Rc4F(NP|eMHWXG3kSb1xAjGigPM=ek*qd zywxQ9+--)fzkhLfN2I(XQvFpL^;c<;c*j>umAB+3;N36zC?7?`yAh+ta#C4C8r!;L z&dWFIEA@1(!#5)38=rtBYse zcGhq4Y>LA(BIOy8>Z#IJBTuD8;#ptBP+5Dw33yhD-0Jh|u8)dmStCZ|49prcrg1vz zEqI)Gi=ew+9?*# z3LTyiDbI*h)|5tBQ(7dRu@^#R?VtY*Ji8%ko{bDlh_W$=hG*?8o=tOjMx;C=Ql2S| zJX2aEp7nNkwzCO%b{TTZs7KD0N6oWQ1BM3%M#;74>{=U(Z&Mw<5h>q@R6mtQ{Zv{c zzMbdrZC4ZU?U(fP#;Ez0IVNyn)9EL=Bc%PD?(mFAc}AqNrZmc$(jxKfT!&}xGy%`p z!85uZS-UP8o}p)CSUR>#51<(xc|nwKT+zuJI+=ub1rG0sly^kxvnh=}o6;ijF5ThX zM@_)HUus8x7ZvZu!Q&OaMcb_;{zpeViG8F2c;B&31K+?N!;rq)EQfzY%0D92SEW&3 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%0AaR%gp;Uham(8N1vl?{y|{ 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

Ag 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

{jf78#L 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

<|2|w-govKAS4!=E3 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 z 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

}SQiKam)8kHnx>>QS$b7!EtU$8z}H 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

JPoiOunuqm;Q4^(1ELyH4ShTw-EO5eutt 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

?C)MwTh?1b7EdF1DqY{Fn&fjP-6 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 z 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

Go2w^Z+ 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

  • eSt_yY;x6v_}DC| zmYrTZSkrB)r5hok8zHHmf@A#@Tom0ZE#1!R0lIZnKX1sIZnab6XY^eCJWSK<3`;XY zLNh`lYl5S!2`-9eV=T?i>H(T9#?z)`khL#oLo;|r##f@V6-P5V>GUjnT-nLnU`@MP zOFKeBJ3?Z!363_K;G$@Es-@lR9-v)U?daFCqTO^@yozqwx|Nju(N!PoNYIUaEXM3( zooVSuNa#mM>Z{;bUj-LMzXnUc@AUxvy6R)SUX0hNkiow+W9sBdr`6AxJT*I~Tv*%S z+q*{QxQCzks|0-h-zV2jtHI zxcaN9q#!JyLHJvW@9!Uc640G09oqTePPjt*2k_zqV->C+Ab)JG95^@l{?M=B=7nCJ zXCBJSFkG*P`iY}mqlv~P7+afDpJ^YOJr^9#yOIz{gHp?4A!W%-e7)EgG@tuN0ok`XYsS+aebp78IDd0u8>jq!I zzlxg|d4yyh3OF7bypfrZ4G`$2gfna`BLF=i<}x6{N-P3QNQgv839C;Kk+$6<$k*`E ztr-ZispkmNZTVuoV(k%v5E6nAQUuWh-tDW0s(Q>_ns6(qj}#A%-uJ_0f zsd_Mett`A&k$B4=NaT@t%(;<7W|t=)mkA^?g_MNfj_V0rjUJJihiOj0^$t9l65IjX zs;bjkn&#M5WJ6Qub~r!l$4|#}g0b@(^)}9KQOtu8gLa(9!SzVxqx8t6JL8;eV2Kb4 zk&aXO5`dfFukN25#H-+a9rz7g8MqJPV>Iq*%+TXg{u?nr3p2CZIE48t#QfH05mU^E zS>_QE<`I$;VFmY^PA5l=3yw#POFA%A?-9MGLWvLtl-E?Ma*SL>rjh)hh>3S#$xKY-tn-35y8D z0v^I6IBu;gIHT%#4r2T2QA&>i?5HeHMVNbP?WQ`xiX`5`y~E8dtd-&v>6#rK)yJr% zQRS>z1CZ=9kdWelayLXl+r4Vg%( z@_RxgnrzJ{BqBjbYQErD^97d_3EDPlnM3>PewajCI2AKxv2J^3=YABRfOVOxANzGo zC^c|?$AmJZF!$F~nO4;(gCcv<9UqaVC)9}p9aD}`>SMY*26Hd-)!xl-DAmBpeyfxm zodsx~!Yu|Q%H(Q5AH}zY&&9tHck}gyC~c+TD&U$uiDDjBz-w@A=vl=vEz!`@ZOuW$ zir+xPYKbzlSnc_1sWP!BLFeHzf#s)C;Wtdz$ZtYf@b|Y6ABp(eh>u159mJK0Z$>;G z@hym_A-)yyGQ{6SOgh|#m~Z_#_#n!LkVqDxnDR6Tt{)^za32K8x=_hZs$_|VqGbJN z&XV<41Lk3+r0w&^armQxD-KSdIld&(h?C^zOuo3WWq!jV zWq$C5>A{`seHFSu0l^e*bzMIvOnd zbBI~~=Ml3w^dbTYNCOlYG=<$nrLTz#KQ#{H7Za7a|^RbtWO<385GdGf;OiiUR%$4m|NUuq>H&3lgR;of`n-y%2_cK8~K= zwwXz|6mH4jATdNOr5oH)x1lq>p(DPj{jyC#qUeIYoi&?Ox{mmIDqxN@U|kAU-3{od z+dT5A&iLk^l8f)YR&>qkcmGhZcH}B_6^gD~_3rwD)v_WFV{;vG9xB4D?U!v05=VE| zZ0)Su+%ZszkNSh>)N=LRR(3R`U^tHC@qQh38~NIe%-b2?*b#q0Z!63))V z=t$|M!-T4d++w%`uCOB^%V4l_*8T}UbhF0tGgMV2^-ah(KrjHF7Opvb2F^|@2(#wUR$H@o7R{dX;c#umf)sUd5;@89 zeP+!!+d5H`5tC?XI)5HdJ^SpyZvaJ4^|a&kfxWEd)e0$p_`SaWW;LAEqyaV4R+tRP8?s@+YeyDaEoHl29zT52-dO+z&Mr3nt=?%ux{3YA6

    `9 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

    *{M4U@u5>iZ%>}UnJa7ZRd`4!K$N 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%0AQ8d8ICuJ%l{}ZEc}gSPo_zHasxScH4`68{Ow( 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

    74V?T$M3Gow+-!9-E1>N$qZq6^hW zNFPwU9A&d8lkrcFULRrY;~w}0Ky&JOA%4-~&4l;mpt8T`Yc^K=&SKR$UmMA5DcnE@|N8CtCWb-}(e}Z)>3@BRZcPhHY6zkQ(jQPRcYM|R>_gDpyrAszD@2^xo_i^Xp{_{{^& zsI-px)q!S-q>IIm@_RRE7NmE~?;+4UC+TAGBYF7%G>>I;%00zT z`kC^31av#b#^*N=blt}xzxbyoR{BW4+z6VhbK>)(X7PK_d}J4NWQRse-*$Kx=US9= z^W*bNf%hcP%u?g?+X(ONpjkd4K0hkwXFzlPL_v3AjPy0Z`?La!a>J$Z`7J~EcF^Qs z7NU!m-$S6A51P4!A-ZV&`4Z5r0nOPCLDw}#`iP$jnvq5E`H|f@Ptw52Pqg%r9lHp0 z)x{n2yH(Oic2Vnh4?G_LU9coRKTIPj&qk2lHf^Pj4@zYm>@E?QbQkS5M)jke`&Ig*gGvo84_P<8bz{yXv{O*R& z!=SsqGCn_&zfF>cnc*iIzk|TP4!Y-N#pg#`slNnGmnuO=ztQ-SzV8K^J(4a~{T6}l zv}&|-{L@4Gx1#Y=;Jp?!Yu$n_7Qasr{w>fvF{9?%|)!V3AK?5g0(fE;` zECgL11`3{7^4AA`%RsY6(h+sE{E}UFKWJ`R*fGD&pxGtq;_>?oG;duMpWk%E+x2RT zas~eBiKU0AK5hri{fj#0w-YoOi#z6551Om4iO(+?X?j%Ba02lYt^CL?*#x@v*T&~Z z^765yiN|j@Jih_m+s*O$ksj~1#G*LyPfskny$`&v1WoI8@%d5uo|QDr5I@oKOLo&X z(5+wEF~5%`O-KB`0o~u0b+EAkZ{iAD)OFIKyxb*8%|jo=o&-W0HT0(4KTiO=s`F!@~4 z#N(F?Hr?;ED5u>OpC9FSqNIt(kMcVUbkpyS&u=y8R)8jTZHO*f`4z%@GHC9-Cqx%* zd`acEL(;@cAC=!1p!?$9`218b>H9lD6OSL+b(NqSvo1bA>Q}vzCLTX(m)C;s>igpJ zqxpm1OPYB6XuS0b=$^bkK0lKCy`V{bK+whNS9`%b7c@l=3c6T&@H*sKQK+DGH_ zqw(KcpxGtqVx^Dlrq4k0{_h39SmiembhbZWJcECFV(G~N@V){xzj`b_zY*ZE4K!WX z$LBW)-hDum|3^Wm*N5TLBuWqUtMerdz4Oy0&GaD+;ZpH`e;8d(a$1h@Lm7?kwNB7w zg7{ycJO582eI%#R_zfaFXlf-Lm0vVEN?)_2fs>zDbn7}vx3v>=n-S9i(5-)5fa>jfnv^C+D;qKOG{ke1pH{Y*y0RjYppl zz7PJ_MoVAV{yN(Kwy_g*eL?qnC+JQA-M&uHT>!ctJ3&WsV0$7;Ifv!r9MI)=f{yg_ ztWMBT`CZ)!Ix3f&J3&W!^07|PQTe^r2|AL4zemtvUu0Oh*g$vwlO2~I$z^UQ=$3&l zKY}iLyjvsa(2l~=M{>Wn6Leiccd!$5q<0Q=f{yt8rxSFmH5H@WCHQSRYtHS0rg^TtNEDX0r{Uy~YLO9R*H@y)18H_W3S^bveuO3yNI@&SKY; zf_&BGEK&0c#uuoi&M|4{M+xF^=DDy{c})7qw5a|CWooItthm&bujZCda22YP)xt3u zQ8<<2NI6fPyU;VsSLs_g#*ts`$`==6EKhn)LX#hi{fRU} zqO{W;ht0+VNDUuS6nXRMlS-er(QmJt<(ZR{@4;tzh7a`cEe(C&H+hO$n(xY+SX_{Y z4dzikUn|eI7frwpbXP&q_+ot5m&2hTC#3~b@irYL*o{jM35xh6;{RDHQnUU?(lP9R zBpsRmBk36WKa!4&|B-a0|Bs}DtbfuWGcY`u5O%;M>7Bvwqk9zVXxPDzMOPl#*`!Re zv%_0AA1O)-OM6JkiYIxAxCn|4DL+l=f^!K~zLvNovvWnvD}ot8v9(QpygbXYb|G!!@hcJ4;6F$8n5FDeVXsKsfVF z5dARxdl*B9Qpy?`mSYwtv{OmYNzF~j z!vdeTevYet4n7X#l4t_{R2awnjTSR#kPPZ^jv2n0t#&t|Mv_t1#a1`2^G( zW@G80D=o?>(0Phdi&IEpr|b zG0?|PXIMEb6+^A0<#vIXxcYHsD7QvN@~x1jswVYi6D+9hE|=7EBPuuxgi}I<%S?pf zbw+2Ii&^h(iWiN8-oNHH(@i;jfOx-y1wgzT4!m6{B$qQq`juwKy?9$D@oQkpQKIhz zv;*D+cnjbfUg4{ z1^g7S3yz)b)g2=zz;gjHOV~^|Z1)5l2WSPH0tmI(ObXycz-qwWfOYbHA>iqF|1Dr2 zzzj6qvjB$!o(-4}crGB_eQg808ZZ^`cEJ9Cj{#!#ulbLF7XdyFh}pa5Cjc)2YzG_y z_%dJ`;A?>CfNuZ}1N;Cm3-Din!vTK)#A-_O*%&I11XKaD0ZRc#0hR%d0rUcn1$+o_ z9N-gxIe>J4rXBE9wA*~Za{&tg`vYDISO9n#U>TqTuokcg@EX8kz+VAQ0=xsT6p)V0 zass{sSPu9F;AB8*+tUE4fldd^2D}`w2(SW>+T#pBKj0OBZGbMo9e|a9p94bXn@>YK z!p5BD0f04tmjKQKoC{b7I3EygqPY$5O2E~CK0vZ-{D9%(Es|GibEn{+9vW|5tc1o} zSD_tEHI8-+I*dBhxR;XDEyT@W$aGK{0HFmew2TK~AYr)J=;-Pq%_y;GbI2S1Vasxg;rt5Ria4|vE&yCQ=+H(Hb;yN>TkS97rW>Dqz(f8A$Qza9G`e>3s>iHMAebt)v zOJ-vq;Enbyb<*2qm&KQ!k(K2Ncr`{9Bn0@=ZQoJb6#99 zd{8owCce=O*oQPPz&{=`A;=C6z+L67<#)}j^?4Vt<<~A_(72Pmwn>K3%O;}#{~b6! z2ARTh0s@e&L1u0g6Soi~rI0W@XMl2>WbG3TAKB-t5XfX8vw(~)+T-L!p6UIM97o73 zKtHAIWE!FaCFGB6f)Q|UllUdjQ6$&b0b*>VV6#ax?MlU_j%GXHa=-$>R=^U#>jAF> zgc;ww7;pvP3cxnNRe(1D-V1mm;1hr=0ntAzuos%qUn(~NUVyk^;xwb5P;LR70=Nor zCg5#=(7Tk*<^UiT#hVubVllfJaVd8KV&P7~qHyzbfNKHY0K6CQ6F@AoHq-H`SR8F0 z2Z%+@=2Ac`S~gDwd=Ri6@FBn@fZ)}98{i{=4+H)Ikm?GHTWq8J5%3V+{{+|rHS;*& znSfX2pk8{nS->EOuC zfOi4D3`oaDz5@6>;1#x39KBY^hg=oUcGlo1HH??-wGB0um_=nBN0CN(n#G0R)ckb4Mh%+uS_>KgCPJ(8 z#IT!eaJu7y8lPWAp;f)W#vnU;(#4VHi^zSj`mThw@8p zfRapdOAp#YGnK*XfQ0`mAhCs9@ogX50jJ^pO~7ivw*e{Y9e_=M?*Lv4_&2~MfM|2g zHv+x~cpKmcfNKGF0X_f-o0;wGe*lKpp&hbT0h(BKcq`Ig5LSm2hSEO@a8jH)EU)+A zhUdCGsfaypaVZW(7v+()cfeSC+Qm&&dpuesEk(ti0|uy0e?VitkVlMrq?a>Lo$sE{ zO8SUaNvM3PP#m4c!(OU=;u2y&GC>O24(w#UBNg*AG>M}1DmrOd4GwRqLI1%0D0K|P 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%0A^S?Qe>`}E25j<-%PquU#z^!4wi5Y>{zFg zYN}D?@q=HkRDYIrcJB{Dx*ft~rKZYMW@Kh>+rS84I8b?N=h}m72$#YP^sK(C3U~&v z2B>3(Z|x|l1v-jRSN9z9vQ=_vk~5cmkbZp7KzMkBsd zpT|MhJE^A$M(h51_jm^0hQWS;eay z#kdrrW!0E-M5H|{j^rN3b#uqEYS9{(n5>>vGm$So)il`#tyD6EOy$nppk))iknrt3 zJlv{XU=^W$B&-MJt(_~ZhufVVz5!I8znMV~UC5rs9DW#_r?wdLdO%Q}pUZsjjBqmw zwY_8`3-(m+NY2sJ+GAP0b!6f8IGS;0aX5aY8Fo@e-@&^@%AnmMW#Dd+V&^tr?aB_R zh@GiUZd{J)Oh_v42a zR&Y{%qj5#mklavPZS-+|%9+eyNk>d(&ZM!ri1Qk1=2tW{&-Jukw9@CSZ))NxLCpfr zkZs~~%z61M!t5r_LbLXxrxS9FCV3;&kRA?8TbQ=C^m~N4 z?K2wgJ_2WWS|APRNrpV{y!!NIsqYY#L4!gs*fil#x{WkNyCxo9XPUsBf2Ei;$`-TQ zZI84J4T9-1s-GaKnrm9dur#g9+-#YY!*z~HdQ}~1a-&Fm*Q=>wL7MoLkl(d2^%x(V~+P@pdO5`0!r0C0agGX1LDuUp8_8MJ`P+D z{2B0F;Lm}72et#H^(TQ}pwv$RM*yD&jsva+o&|gccn)w4@Iv6Tz&hY_Kvl-`z~#Uf zfZqZB3b+#ZYv4NIi@;65-vB=Xz5+a+cKRCd6yR@xHNZE3R{+-mZvegtybbtA;5UJ9 z1MdO81AG9u0r)VGGPS7PzXy!=&p$w42`)dV&+6ljSNM{1==)gaQ6f-I2Zh9Uov>#W2uD%V+6mw z`W{QaW#ehRq#Y}b^@ReJuXZl=Z>Mo7U^gww>%W1+fu8}V18K1>ZGbL7m7^>0^VUfV z@zNeNh5ApcT7M-xOWhRZ=sY_kz}3;W$Vc>O97!p!Op>kkx6d)6R8@H#%({OL4@b_3#smK}_gE z4`JqPY1;Aa$>(yAk)Apnr5f&V)PZVPr{^oxbf7wA$aJ#mg+iUIdK>-ZlR0(O{!^Ci z5G70zgFN`p6*h)4p!~P|Sh zz*B+sz+u2I0}FxI0;z|Vn}Ia*7TFo|jTZGjBY-~zBCBN$a1`)$AZpahTa0_W7WK+w zfNufE162=a0eg^d`jwU#a3W9}hbIA#0eCV&&|^WG9n+0xzTW_GzF8OPxs*{a*LPi8OmjXiz*t42D*=1D_#IVd?F9ew7T ztLW;VjfcZe`Sh^G<3GG#TQSP=a+j6BvH1g1J!HAm@a^FpMmoMd2=`Zm|#l-+b(UkEj; z4&5_x{eVO0+{%Kcg?)(C8TWNDe4TJ#e}!#p<*gT>*Gym!y@&e zILhBwxrU_bBYpI>Q{96UE=@FXnQ5&?vC5hVeC@-EN3~kq4UG@NtxI0L6BPoN z>SQ{XA5^|}uJAhV`{+(({s5>t*#wmI%|O-3hd`zHXQ29#zW`MSTY%EjN5H7=HI_(l zWz+q;+$)OcUU8IMwui+fKcvH(NMirHmj4T>;Rz=z5aT6zx zT-`Erjhk>bACNA_$@a`&Sb}7)gqZpawRa$-bB@z`V_E&BH4Wu_ zGQ6~MLG7I8IoNE^{EO(Ux_U(;Cr+NqGG)(v)p>U>?K5VlRn4w!IHR!e;^LZ_mCbcc zXS1`TzCmA4Ww6>Szfs+t32Dc#GO6sD|0V^Cx7fRh5f_ting1;B9DTlZawX4Gykn7a zwe)5}nv}Ey#}FA#F2`whjD*7?b8x07a9GC#!bjgR5bq#1d_P^-A!))Qr{j5FOcNEk zn=YszO^`c2&pRSbK&C_WSkMdWEA-iL>?vH3(4F*@_wOh`hwgFwQitdr4&%e}I;8H- zr}*X6UI%gF!2s0 z-YvMauHLALll9uhlyL|yEgG+1gG?dDncKzVrj(Twoi}RYgwf;1R7@FFG{NjC=WEG) z3!CpIQ|{#ClA=+`V!E@;zAvPQadVr@w`~%~Wp;+?)kVFs9oBy7IZ|EWTj|x6ZZ>Jh zI7ZAS?OwW&L(@z*ddj1BT$%w#Z>Nh&Zw0AyAS10Hbt66ceke70w5)Fw`}t9~>MF_d zMP^;|d8^EtJ)Q_nrjHyyab(5Bk>iu2Fj%a3a?#YJjCktgi6s?DKDb?ymz**w;bg~~ri3W(l&L77sDy@JarVTL^3o&&YMVrw9-`4kPn4oZHiutT@ z&YIWTilgSAz16WSEDp5z4lqczyEwLM;w4#!-u|*Z5 z#uiPOkSsAmq=5stgV2g8W5>*#(NW6&iy!mdG}6>r68B={?8sC&yd zZomBuo4`5Aabw0#^$rehQK&QhRNT#jf}6j3p@euQDR-|E`Ybjd6U?d4L%f(716O1k z0_!Pv{udaqrw>X)H5P6;RD3M|=jA#!QqWfiQ_Ch z!z4R_;k@0{k}R2O-dv*oWBFRx2@INVAv2|p3&Wb!YDkJ-^{NDeQL3y311Y; z-{0kchlN<<3^pq?78bI~$u^|M`sRkJnj)W0la1x~?lgO0VZD8Muco4gL2@jAug?*+ z3C$7h45H;_iZ;8Zj;(rWd7eM8qOz_@5mPxHP5d4^AHT5BYQ{nIcxs zn$=JRA5s%6Gb(VP8Zn zUsGIq+c6boWJmcu5<+=EIRHv4nJSYPEJ+qkC@;g^Pb@Dp4kH0?bM4%zLro4Y=P{A} z*d^hR=i=1B>3G4|I%BvCP@oYjK<+*^~&v8H#0JU)u$|Jc<@ zHs4rLA-8Eh)>0FEv6K-rC;7(mkDv_a&=Iq45X*z&&K@_J@#xuu z8Q{nA@6CR{u<*3zxxCb0Q+=ZPq7$3XV1OUXf9UhXh{|X@gC*Bk{(h!?O`bY+oHpx? z;=?SBslf{Cd$Ihsp)`G7$FHk9ySC<1hKjNLE7C~3uq?ASR(h1@Jd86%d7LTZzLcz( zYDPpcQp?${2A|4ibJ|ru7Is+?m|WAy0^q31x;lLpdC+Myn6sRKb-B^dF=6}+2I?_0 zPj_F|Y8+MHFt)m3Lh~Hf067j}COZ+eTP>Dva%o3HYCXzivGEgX`mp;DLWY~Dz5D&auPH(=vRPMMJD-82x+cxWQw_s*aTf@)*nDW-0!q~EgAVpC{s4YUJslh(;NrYUD9HGDRO>!yl7dm=rc`i#k;nlbHd zEGH;bHdM`Cn98#eqene84GnYa(WP{B3BS)V-KuJ^#5EDWaSS}o)Sx<>?--?{ryenvpa~r#R?P^&w9+md=NRLX1NjpDKd;__a~K9v}oW4pVf^E7V81dX!O{ z5r$E+F~UqHsKJQNimHB}# z<%C_qUlwvn6m{FJJR&^CLW7(&w zWA6j3GaFS`-`LzxWBN}<^Fi~}<6C`oed3IZc+yc)UscIG(TMu0Gtx3zhOs)0rOZ%D zlYy&LrK8HHOr2O-G3C4|QH5oX4Ggy(UJB*4NId19{8jFU$*ST_}jWTK0 zc*c@c>(+onkB8*=lMM~^4JGxnbgYcYLf2z_YcVs>FMhsS^JmRP%IyxKrdi;;dWy+r zpVY)##Zwi#*|W;u6n1i^;`~-&6r#Fnkp?i3MQ#0z=9xkNV*H6liF-#IpI>y6+sgG|H$5}t8Euyr z4!HD_$@l&KgDp#^pLWiBI!~n7(Ce=|{)c~>^3Lj~4&LL`Rqvd`rl4C5{ms*k9aZx7 zAs@Um=HkNNKR)s2=Dl&`tSB1z!k(YK_J`|kolr8e{j%Sf_x_;&;);>$PkQ_1J%{gk z?Q5;y)W)z2NVrdz@+;0?`|wfwZocRE9-B8F{>BQ<2Ql>L7xkFcZ0LXg@Q%She*dRcKOXqV&^ZJ5yM^cXT_tDYieK#c-5-AYwNK{nwcn(vvl>0` z3PZnUVefdql5G?BUii$Z-JYyOe!HQ+{N-1k`|NKwY+cxP_!oY7-T6Ft-5Xu>>C!Oz zg40zxl$==e~PBW63uS{jjfBKYiuaNmu{tv@s8T@BTbCO%0$P`*caZ(Z8tuseHJj?qlhQ7}~pMUs{QEPtoLE?#D-h0t+A7wAIp+A52BX6DE|2yAUblP6m zeD{Vw&n2IGNY1~H`qPTDPS|qK@o)e39=efV+TIs4n6T*977bkV2F z=m}K^y>sr?6ZV{U$oeZz-u8s&wHo>pWv31wbwT`JT~B`Vj6GK0%f_8I4E^^n-uUI; zmyQ2tUiIG!`yT)M_joeS!|gs@KDev#k!N1q_g~xN@$+9kaTs0FWrkk0=<6+~ZNH}I zp?+N#3|YPJ0Lp9V|C)W$N581}?_1CNaLcf}-r4_T*2l5AK3&Q_`pw{Vdw%nc`@EI^ zxVh>=^j~J^ZL?lJ=7<^RJbvM~_P=fUsHd-De~6*a>G79KzWGV}sIO1_$Cy9f{n&}v zr=j0@+QrTCL z-nmQ4&;0b1E2p+y&A#Zk{%7{RSgx@I;6|u)2gZ(&3P=-X4F+(%-Ey6 z=IFc-G#hz4oh4RmSOD263C+ylrp>FQ42?Svk zIH{?gHmkX|y1HiO&KFMOs46$j+9@f{Zi4gOs^-nxiK;dgW!FSiQ@dh&PBY|-4-?Ls zyL+TjX|xJc{h!~CP2uX$kZD&t8K1~%#k*LXw1#;pI%4&BS4GZ|pQyr)?0Rxz<-A%% z?qo4%;8q5nvg=uzgL7+GxJy~7p~`kOBl3g0N6Tp*)f8@bgHFK)wEv(p0ZBPEK zsj+%@W)NGguC3pl5{*Ef;?A8}yBnGS4r1>JA2G#Xs>D9*lKjWZ?0EsdWA5Ekr;~ZY z^1RIsi+e-)ZE1Q(LRj3J&fnj2^)z3q6_%$rgbgk3>AhS_o9M8(R~^u12ej+J-ZD}i z2jfjZq-gFgEbeXNFK-1x+wL&ZW#+9Id0w@{;@-7jHtzKfi+jHh_}&Wmw47_>_H z8xqil2DIzI{$O(j#`}oMmBZrR$6&mh2<;Px#l5M_vlS!HJJ(@xZ!wsSdzHiD-m3xM z+JLWsx%GOJS}_=JJ0fMQ!{Xj|z|4vTx!0^0O|))ded1hgT{czILW z>*=*PEYG{zVR7$Y0j*1(<%@g$9G2&u5YQe3d)r7^3$~Zh!8(Vb7iP}AtzH}!_s#~} z+t9w`u(zlHz0_$T^d)#4h zZ!1{7p>1;*THD*k$n&N^k#ieZ@t6vybTVEdv&Y>>TaGl&tcdp81JhSBf)BpuspA?!{Xk<0c~YK zD`4gHPbS86htWbE#zJ+0y_@Ita#)=t4Xcz5f;ny`Z+A_y%5k|3TTfXX;-{^da(iHY{w^xz2(Uvve0J)q4FXx9a_8w1*kfc9WOD>>G@4MpykI}CevSlk=f z&)&`RPIed;5zwXwv~^(HjSl*K(PH!(4vTwF1+-@Z+LnN}HK3h)oIU5Ir?VR7##V0ReW&m0!_{s?xpp}p%cJR#V(46Vx`i^aWTz?K@?aSn@nNw7N& zZJfiX53sKoTC>9#A%opzXxBR|?)5mC_g@Vy?yxv7^zr3sZ@>M0P0w#LP+_NK_+pROQ@bdAh+i*ru99WkLrm zBxWp3u$PII-#OZb;qzEhqN(06H9}{TY0aE@96T;!zv`MVBD$6(<3=lK?!}3kx*8{A z9Ba3FIG>nX-;`i&OHpic*scI)IkBq~3Bn!qP9TZ?3CO%&weYlW3@EYHpZI za+QW5p*;=>_pFudSpKT!2DW}TLAR%gBoHWZ+@HYyaX(9m`ne=lV+)*O@ya-%qPD)d zaYuY6&%~1g7W!$M=OjA)G+~yyl_#eoeSk$Jt|s$y1KF3>HqAyMb8T@r?(O2n6GDnP zkEc$&AyGS5byGVx!2#%17bjQ`O4QFxnA3h6UH!2?s~YuGHC4`?Rab*98z|V^8qy!r z!2V|G%KjWPwJX&trRD88oIl~fh$X)23C z4JUm}^Dg!3y$0`MusPmBFX7GNT>mCu74&L&rg@dzsr2STuj6WlG8?W6?pG1B!f?&u zS2}$fcdOuTGV!JnqXro@#HfWnAFPUdO1nSu6l%Gz6c>>C8Jw1qU_)Sn4RgovH+=6j zem6q74BiS-XarV+`Qd-d_5WCXeeTDzW|b@YB$9nx=GkoGXj-0{OycNjXw@|f5@(#A z7?3#T7#f~_okr8)oex%XtBuk8e`_!QtJnXGfB9d%{{N@f^0v)OHuq{v##)ox+Df;z zmTq6NXuH?c`=TywrQ0{EYiUhx-PChUa;xyRcQ1JQg|uMepGGu9lr1Y=Z=w)&(z4Rk z2KQ;3Vm{`>-jBYt^yTJ*{GVl?mG@e*x;sK_#7!@f+EXzvEx8v+@1oC4zgc~ca#Xft zb6AQLkd!Hl`LOq+&n|tgIpP0o zO>S;0-?HSX?vvY+o6Ag`C97kbp7X^cljDj$YfF;g*6P;1l)!n)cXyZX4Earb-u!M^ z(k`{U>IxJ?w-(=F>Mvx{*SQ_iUsk#yT|>P{?v6l17V{}qLx=i5Ta)XSm2W^j>r(1@ z0fA(4RUpA)KE+gg@1?3LpM;*TO~$TCe%w~N*~GG`?DtIaW6vj%CoAWom|?+KT9a#^ zNpA1bR=#<1Tj^RuZB4G1xvp1Dv?bTKCSQdE8LzgMZfq;v=!BPljOi6DSybRP?cJ8# zSk_irVD4<{1<$0m(mv+b`y;7ar(|D8>Gk}yvH!lUrQ6z)+iW$hGf|h7S||%kr`VEB z^vSKs?S4z^{R9nS(XswdANqRjeo>c;D9Cn~(Tlv$uW$G*GlRVqWT@{gMu=+>%aU7A zKx~qsVcuc=Zj^qPm2W}6R(I5t^t;*WcXMlUgVpbb*3$KXs;qd_AJJAudmPXqf32mP z*Ce;N6s%U$or#}u-&LSwpTR<_giuwX8es zc*(O}T9aFXk~oJZu59gl$>x6H`nP5n4pVDi;1xgDd}^y@Y( zBeTE#-}JKS^YE}f%VSt=nogg$It{#YMtjWYpIv>*Ktj&gcf`t$b;&+-{;Q2V_@uUH zP4#YiH83vg$Ff+K?e}QUlT7crUFn8fsqJN=_j^rJlFq(+i6^}W?cg7-+7y1!Gdq3K~w7vJz-=T#NwKe%jTj?W4Mq3QmM!H?sBv;EP zZQ8S~eD#v2y0n(B_F0A{SNC4_6-jU-px#ex@zLeSCm*EivN;?+U{PQHMu-P>9$)%k zP>$9Cq%e6|vV{WLJhUdSX)C>^we)K8(XFlgYHqIg`-PbDwyd!7Ak{WTl5|`R;0fIlKahlcCr1#PfO*^wB4IWJ|X9tDW zm0cZnL}qxY8G{pEz8(9I%EbXT2kHB)E~Y==G=ui0e&M^x?V0n~)OAzWP4{e?vgx=s zlB3TuHEc51^aWoY)|47?ZaUVN>q9$7xO!ilSK7=nIv}DyTe3M3X7MGcPqu~jq3wyr z`aewpt>VHXYd?doySB5`e4pw&-R_(2F|DaXf4XGzf)0J@GB>Gl4ae5Db?n@lv}~D< z-!)2F=KQ^zBK^VCwciD7@$X)gaBYSO&^kGLjbg`kpVZced6>rXcE*7h)ll8=;=yqD z@)h{?)^Y~sZj5fbcT+jdr~1^i%3*wLL{Qnwoh%zSMJV6WTK;NV@>OO7OBQW#%Lf|_ zb8GS?W#T1Df-_$qF6{ezQ|x8T-TZO|ZGW>%r(?tS>$?w$r`K+_`kv=AQr}A!_41mI zYAf&MyQuC~2$pX0gF#797i*wm?+3K_DwjfWRKR-w8AU~U) zm2mb;=&)DLl$r#_XD+}l2rxZ+`Ie#8gS~06OTq3jnEaJG`vUK4U|%!XqhQ*O*Tee- z*fj=Q2gael@cjwwF@yaB>}Lk+&fg~t){DP)8th>Hwi~QJf3>lqK%aXvo5%|E(JQmL zu7{3tc4=G(X4CjOm`&q*U^b1PfZfYgV74=9TU-wv!|LK{L!XVIEg?3>F<>@V{lRRm zP6xBO(xYsfD}8jt#+VIeW6T4yG4u%7#?XWFS4<8b0Q-f(R)XDbupfhQ+%)<76__>? z7I^v`i8jq~)-&U1tK9_o7~&E2VBHV1l<@mq#A6U^piE|{&YMPNTScdr3^$zWdx z`;Ecw0<*cg4@|FO7I=?<@u3y4rvmJCFm09V;k^rH>-SSItG~T?hWwO?@dYqjq7%X1 zGPHBSY@X+X^)XVGf>|jKf!T8W0PMRa#*<*SM85>HC3*$SmgsFTTcQuao-r}BE%S#4 zJ8}>6c^Y!BC)ieU6_}Mb2h7TA2D9?62D9>R0Q;qpvKq|BeFeQ};0*@*FM}0<{lH)o!M<;>3&CzS*c`BT4Yn9eTZ4Oe z-voQa&>jZkxMbw50#my#@SX$v)L?Ib*|KT7sx8~cV76@k2D4==*wZiD;b701xFf;% zco6cYfZcDf3&HL)*u`M~FxaKR-K&DTHwAaU4aTR3kn%II2MqQCnAO^w0oI$HKUUt6 z0d^*sEz#rvn;u{{27HeO*e3zDSDr6#On}`DX5~E(#^KWB>UUsPlRbLb?Q_@$n6-@o zV79i3!2a9BCMfY~&(+4f&1jcH&ujqAZ|oqr9?dak_tOc2WGwUCNS$+KLN8n#Ajf48@|2w_HAf?Fe~L~Fe_yUn3XaL%*H(n%%(dt;A;l6 z`MUz_uST-A`&#R~73?lU`!1N3@@p_#w%5U|J+B9|F*br(d;SE>=BjIN-;eJNW_|Yl zU^d-D!E7r#A)pNcvtE8Qn6~%z@XEn#ZPkKVkA69r%}ZN=-2!Gyc|Vxd!GD9<{H+4B zo_{UalcsFj!E9c-_3`tv516GL0=Cug9UIWJf!U@zG@uoM+5YkZu(c+}0x+w!*5K}P zFx$`k9L!322Fz;mB`}-QwP040e*&|b{1ogXBUvXnylSw6!Co`iQD8RD$AMX$4hv{w zz^qT43ue=u4`$QVVG=goYrt%}Uk9`4ejn_0lg6W9HjSTw*)-M$w70-)d;2$-O{2#? zej0tiY#IlE*))y?vuT_G_FIz%^97dq-e(NvwN33CTQ;&++xWGE?O1u0sPsk->}13DV!-!XFxyAUZmhfy!A>=Ne+~FFTd?xFl3&}W#ldXc zeFE$lFe~MFFdZDy!y5o*bEQ|Atdwy9-vqGXhHpy1cYeTE7w}yIrtyCdZ+^hH7|iOW z70l}8PB5E;Z-bp_Vmt_DbHFUlJr!6(i8Qg^zNUx~D_HsVH6t0RfF-xD89{I9?&6OO zO_Mco{*9}zXfB)yG!oozeE~%#Bict?S8|m^zDTM#;u+4h1vg?tm-IuLI6{YWwmZ@| zGi{$f;S~M&o|oXe7W)2%o~^&ay8zl!$@%Mii;|9yYe0&XuWQ?{mN0h+%JW6fe(AR# zP-WC_X+lH4p5D0*%k!o=EbgriXwL?;K*=#?)^sh}Z21{+Qsty2lw=oU_MS$Q(${aaoG{Q~}NC?G1=lZ^EqJgvGsf7%fd2w6y=6-o8Q_BXa0%>ya>+fZjL* z-kiU0RhRnJN$s5w)n4%RBWsA6^tURazhY;1>Rzq>gjxLwi+i#*OMAg#anILZn$11U z$Xj1H%3^V{8sFML&G(DKtylYdizAv-9P#YK^`2klUPyB~K2B!m>&_e}*E!qU&(~h4 z)h0;C4@x_mwlrY0+7f29C5(6Oh-GQ*4ohhZZwD=>i~9n%b17*S_oE+nR~#vcx6r(A zq+Fai@4K+jfKD3JQbeU3S=5awos|?a?8Yv~e3bSgpxpOjpxl_uz$!?XRgkc__n^DW z%X|(CDJY8@yN#GT=f-X$ji^zD-Pk=5ec`&2d_G{}WT&{`cPBOYJzs+dIfr%&1Ua;d zrg}bPr``EA*}4hkE2`g-U95gb0ad@nK0=LNnZL#;F1rz*{;vZgs>WKq``PaZX~IN3>qn~j??O;%q`R1Z3wW@t}xadsAM#!6qq!*DY$MN`Vt z1fa$Z6M-_bmOyjDtmcH-Ue(f8JHD`)@!&T$Q#+Qnvpb^K%+`@zof>0aCN<)T4PE(H zh^ny_TJ$r`ilZza&h@QS*I*C-EG%@Vop#RH-tz}=`iPw}p=w#cSK;+rdeHBM{0Z^5;wh4%+aq{htFD1}+o3gcxqcbAvh9A;FT{tS82 zJ>2smJ4$DNc7^AeKmJoP_c(8MmzK{yGk@%Kc%ve_M_D|Mi#)z&byeRIVgewSW0y&W zfGK+gURi);s>(Us#R7w%syxQ)jx0Myp9(xW{E5`i7gx_5po1bujNlXB`nLD+VYbMZ zRMT1Am!dC0_JBxhQ+|%&!WVeIN|}igDl9bTQp!ZaIaaA`7{C}m?iHGkb89r9L8`tK zy1s9?o3!KoetsmN(j0&}ph8-)4M$MzDm%kJQ~g@>?};ZRz?SEYa9EsoZ?Gjpo8>U; zrxYX4TLn!RCqK9tdEQ$Ni*q)gy_@G1I4rL1DP|fTtWs?2Fz;58?fh~-FgvF^2<#}b z(ZjT`U{2QwEA(wIgHD&$1Ow^WSlY_!W61Js*XZB5-(2W=y z7}iI`yPm5wVk=5dwn7v2y30MAka4cKI8C-a**Lo)`JaT>=W4@-6qz_iJ+<;PoeNX) zFgX)=gR(_=!pQd@W@Lx$L>+;5udCb zL<`u%-J537HmM+Zstwe$;lbUHW=i{3+h zoI*uKS}P2uW@)WYDGrZRrPArg)xyP@N{bsU6ea=(fr_p9s9R4w>}@Wnef3Qw(Gsr~suX{jruRKcif0BuldV_l{f zls~iXT9|d$!Z`T`E=ybKu+)4d)JgdZTCTHFi~_UXX|YWH@i64&(wjW)z=-uKj`FQR z)>|pP*-`1@U|1R!3#SX=rRT^{R9%)lxz&L%s{>&{d6z7Td6&mEAuEjyk6nJi>_<@P zYza4iJ~Q1YJH^B?mN{H(S@)ahy_o_Z3XiTH8piU?7-6cShY;VxC?VRX7jajm@JkZy z)4$2R==zM}NIAo~_E5)eLdIcOJ)c+8c?aiTkfV#&C#e0U`nL{tL-#&zrq_gU^X@To zyfPX;4UA!dQ;$u+iAVdQ6}i|G7Gal|A4{iBqn`iejPbfb7~W(YD=e@1=TA)Z%1 zZ(uN^{+NoWpEt;8SxO!eimx;`Vv~CShdBDVp4Xy$s8?1er(RjU|9qhGre0af)`k?T zY++W}!t5N%(lm#%G=HtfZ}!R9lJ#Ah_U8F6uZM1gP0x3O6(D&a4gLy@>0fRz=`L#Y z%9rT66rx7YB;6Yy@d%0|BT{qvwP}GMTItpUmBPa5I{dn_AyLg)A5A*uqPoT&_*vg@ zY!1^8yNdMDt#tJlN?>&*%<4*5;3-nil$>4?S@ojv&93U@D)JPalZExNzkZmI>gRWh zYSPAroI^+&+HzraBh2bXn9HipGG!9Dpq8r$uGrDKvtE17I0Xi9J? z$VS3#u@TxtZ*;!7>Ha8=c;pkW4eoTAUcHb{Z`D?DhC*$VPKLRRqfvA?$+2l)jz88K zijx%uG}XZ2B|EM5`lVR!72YTeCE^HA|zdWz?Hmv(=lnknXD9 z8jv<2hu+=}6rV$H;qOs*PHpCyZ-TV_;3pH-+ksARKMM3F%<4^;)tjYBZEQAOoNfS8Gi`Mg02emDa`6qnBAvgY0o;o?0tq(vij7?ZM)ir z=OL{mhdyuXj6Rd4WqjvTYV4HyI@5j`RU4hP1v(REbta6HOv$;WJ>szJI>U=Poh{uB zI-8HQ$vJekK~-cz4jUX-Qj#1~q_2b*6_4WsXPwfVwY!9qF5oAHN&?((zdsIiC(P`a9Df0dN=59M}5XSeu2Ckx+|GDWh!IbQDu0nTA$&! z(?8($oH=Q=Rt9q+P+F3bl?WRuat+;4v(ayKesLqabI{Rv% zGhtR|!mO=XnrzL|vgvG}KxaBp^*^mMef`yj9DYrwVOC5?p4-XJpfl~WuhW^f;M#Gp zFsn0RR%ezbompBoo%M#pw$HP6gU&8NT4@eD)0c;B*pbdAjvSvH)k&>&&aWNe^!AlN zZ^EqJgxU6KX=wsvc$^~R^!&)$9Qlc!~7%yw;{GhtR|!mO=X znrzL|vgu5Zs;tg*a`Ue0tQl#Oa@gASozWSewI5f+FgHmzI^nEN&bT^fZ!C2h-CZ5% zPMFo5Fgs?mG>zFTEt~H2h}-H;r!nuU?sn9V>NOo3aSNW7~o|ylJS{#L;rw z+w$AGa?+wsMA)WOI5jTY3mM0AJ0>0%w1}w%P%U_V#5Id6x?5Rs#KWSFcYDg%+-~L3 zwGC|k*HhZCTv%NQFKFl9t*msS8$?;GX;In>fJ%R%Gqf85r3tf26J~cSTiV0$TN+C9 z&$}AxHSf^`hD2$V0^pLIjKts=Tn`bslhIvg{BC~I@Ep8;)6G;kT=h07V zz8*!SFt(?T?Im80#vI9xk?qg$+F`r#k5l(`Ms*vLZ}#pwyXKk(ZTTMc%G7Z!5fctzz*Hg{Jv zHdQX1IWO-MH6`@B`seDGH7gB3Zz4C z`8tqgnU*_&EULCV2)rKnJs@qNWfkxy;FCZ!-|_cSpmEqI32hG zI0L8_Sp`&!tOl+I)&O4t&IG;*oDKW~uon0M@FL*ffENQl1J(iKlwl5VU*J5T^vwI9 zrUlZ1T?-UuTc9x80xeBtx3vHHUXr7sQhj3z%hXG?^El>^acR+Q4zXuir z*8$bw-UO<_tp}>X{Sl}J_cl-s?j4{S+yu40@(N2;{6$zo*&W*2f<#n&_~!7HLHK%*Z|*_{PiKF(i5K ze?#(IZ#R~vWtmA}yxLb8%ciMb(j?kz)3`v68IUrRO>TE> za9<~q$Y#`Q$D>hE8ZayWq!?SHZ0hLvr|eL5PR@3!L$7*xgNb4JGPTpO+_i(z3j*w` zV46a3+*E*RNMvbhm2$^@x%^NDx9GYQqAm6&XwmI+ilbIA9yo!eX&c?(lF5)Ysyg3bw`VV6|&#KI;11pcP$}vlXQ#e3ma$E1HC+?A=Vgop#pV zjYbPJkv9{B0&fWzQwM13&Ez37zgzSYcXPF@W!#Ux$FDfD*yp*19L66LGPW$<_N|#) zy|b+<$29OkKUtviqgJ&K@D4}k*gVs!4hE_ZJOrp#btq7+>M)>MRRX9!@Ce`xU|--R zz@veSfX4#0Pq82Hdf*p zoW)EpVb(16bn9DYp^F@O*V=`y{XrKR%RLxuyulJ+SHM%C*EpSDKLaeg=f0Y|F)lwu zm&P>SI3qH-Q5-E#wQxO{&mR*y+E-J>%+Ik*7A!IZ`};;X$pT7KHnazDhzJC2U{*dj zs?of<%KHswx$JRZ3-l*|s#~=)Tere&-3qhovzE5X@tG<4&eZMjR0XmYMa9~21Qi>M z8@e++<|u5}{Ws^T*vmUnvE9jXv?IO}TCVDB;Qr~6>Qo%5QO)T)Ijgg-veS#6>9uK= z)kh%T4@xsyozGES%EvE(%Ek-8V}UOLmA6-bs!q95Tb;sebqcf9X=$oXOY=J{f9o`F zOyqI%ej;S{xchQfs`W#3EHjH6(ZyoLk;j!Md#QjwCUmjyNzABkYO0^pNgt~(z-B+% zLh0y@UH%8-uhVIWN}G0WJn5N0spMe+lA~Eub5H4pp#k}LsyZ~lCiDybg zmpC;&6R1g;Rg*AlO_nBWvNYeClCj&DyxpzaQ%`QQD_;e@AMLIe9IpH$X|^ofW89MG zwio^8kFRW7vc8)gu4mF`A#z3cbs9CbtGE|^{ZMhFPdUL4Q>GTYa#&bcHM_EQZbemn zb!XR-0&RAD*~BjFYEm24uksMp?~{~U`FaYdygdz+89pEASD4kWFuMWK(w=pE>1KGy z&YI!Hh>M0M5kCr$*A@I%x`LPJ_w%~RLQK%$ zOv5)qFP^Pz<7MC`@LDFQdV)SIzuerTx%Xqn$nPJy-=p2{Pu%Y&eutjIEO%r9m1jCo zD!YzLVHCq&m9ZG8A|`>#$7tZGz%jt{fMbDkf#ZM+fa8Hz0?z`r0ZW0m0w(}z@!mwB zbUF$6I&d;@57M6kls?OWs(c-$VEb@k*6fAZEeDqNxZ{g^uQ@Ew`&~eLH=w;A&{X?2 z?xz8*4^k~nPj74*&Wq26N!GN{Kx`=n@)Njv7+u{2mU)P90DQ7GKScfZJZ?n&w&KV? z%4Ppae@sX@AhSyn=N(v7I02vC^TLni(q8$M6H27`Jf$ZeO(9I0x>f9)&QBp)?F+No z7iJ&6TiPS=Tbgk?sfX{Ko$MT`W{qzsiw&Pt;E#I`;ERB{#=TdN;~u6(WS`JTF{smZo-NY5r&>Wa1k8@+dQlVee?{ zOE1>pXp8XJxBC$=n1ErsBNht_^=0l(4(x)17E=R{gp(+sv~*?!1qh7#5NFh^mOIr5 zv#Jqhds0hNPikqqT{UwMJv3rrVb%OC!=Qs_^PfvQ!9j{4PoE%NKPbIyZT{zhdW2c^ z2(xY8($wZH%~wy(=hC!pJs8gF5bUS}zbbcEZd&$%V76szUFr(b=REr0?ocqhnV3n9 zyPK)CPvEZTeu(;C#`+x&1yvmR-|<{`WpC}D!&cLqx%_V#mmid#TDj6JcEnAXs(yb6 z)Ku}$KrMRx1=t_B1t?x*nWH;C2CCJo!CHSU%+{SSTX&YGy0bLjUz_h}va0}pyB%gv z1E}pl7Ld%>5Ho4EAGgB}F6u{TaX&iwRUG-QzFgmoXtuDhX3o5(g`IGm8v5Myh48da z8Xdsp2c;v8GQ$dd|J7(nX)gsT{jWHU>5+!jm@um`VRrIsX%EA1X`Qupx0t74r%d|X ztR{WD6P+u;O!_VnRHn*B=IBT{^( zQARtdu3fD8b_dFQ8Q2-~?Fm%AcnV?6_0B-~!mRRzS#z~CnX9Gw%8ztXcMu`7`t~Ji zxOAOSpW;Y;%J$2u9TP&MFL~mc1x*c=Rh``wmFA44zJwKO{wlp}p17ToS=$t5)g#QR z$I_%8OEayxSFrUltFzs)FAhH?JwhY1{52RbBjEJYt&M6o@r6GvMT^bt$PENer@@-YbM#}r3@>#wv}%U zWyE-&Ha_7>BhwOhqiJNBmbgz2?rJ^4zP!WYm+Lo5z-}Ss%r+!HD9`GLsGnQLjp#b5 z;>g#i823f|TxgeF*owkQ5X*&(W5olR{%yqv>Y0iYVMd*EFAmS^R{1i3%8#0;T#Il}GkEnQ`O{;IaI!0?L=x07nCBf#(1(25M}~17b73n+wE;dOSLAxea&;@Lpg8 z@H@aJ;CF$|z#jm40MVj3*=4}DfnNsF%XzF{w`h#M2q=9m21*%f)z8l>%U1VT*+k6+m?a%p8lXV-=zLs+vonQ&4Cl*epi zSay0i^$4@-5oTS3rO7o|S{Bc_^Xkde@q|6+-;Y!Q6e6DU^J!?OJ?9gFdW2c^2(#+3 zG^xkZq@J_oIGy>}5Az+#PyehxJ{ud{9K&1`#SQ}<0>2e+Hgd&*uPM!G#NMz5k64Z0i+f^)Jkh zsw_>O$kI&Dg@b1tsz>kX%;Kl;@zvY z;F?Wu(GxrsGi&yhht9i7thxKiAsS=*a9$apWt zGfQ%eWj(jtr?G6X+~24QJx5SHevsWX%6CcbMNY_Tq2Y^BX=`P!`Z%!mWb z!naf~zpJV~)1*3EBT2cAj=QuLAaPWNMxv5y+WbKFLC>7ZhKnoAN?FCc&Q?T+`Nwq9 z@PiCngBuz0R7boUgH>Mc1*#Tg=$byuu=@jL*cuATu;t>u0~`f>2&nvj7bt`OR#0og zY^@2ii)fbixa0Hp1Eh5%scvKW@GXmuO7$V(?qv8!i!-fsnyzJUq{}7>Ox@W*+%eF; zXJ`Y#^n5mR+mSYWHwWrHM<>GxjQq1NGvUm6I5;M#EAc2!oNFT2uVpwUxK3tnb6s8V z>@_SoWhSLT<$?BQYC_$sZ9l?nO$f7Vc9ymheoITWpWaW5=%Wcj zCM(|u{#4F8T6v~Hj^fC&R4?}(!5uToCYMR~2mCWFws{FRxcG$-# zJxvekkG;MoExUxFJbVS+C?8*SI?{tTt0Q4nN5br&$I>2w-_lH{TVSkJPu04sOYNbT zysp^e{p;WY?Y@YGpqNxN_&K`f$Ao?IcJCXX{N#6e&-$my@j2uz9R1sx+?sl@Sh{VA zzI0Cqj%V67yz3%;fx2xHZ)k1PgT7`SFaDsl;L1&}o0(yTr-^Xsy$(g!eseX2r@DJ1 zNq-RqD)4RrTWm1pDLT0SAvD>p?kN<|mcxdx=S|Tye#MdD$qAn+t(%ask8h}HtZ8uX zUj$7Ac0W1LOi%MVbnko|)=cD@h^Tj@DjOOq7p8UdgAp~^WW>w#(C@oALsXev^2JgDBdgU z^In29vo(Ly!L+R2KklkqkC|I>ygoi#97VX_V@F{^)YrjognOXRbIZ z7~>(YJ*Cu<h=ud9wMUCpy)HGAbL+LO@?jpka=g3$q#)W_Oxf+FJN6&Gck??7X8_lr?p9uOynySQ*~+P@ki1woQB4u89{e%ENDt zBVn6;M|sUiW6u6KJ9t-_!MA(wq7OMdzpHFbQ)Yc^yoad~`x5XG(5|3N1&pL~?Ymvh zUDdts&Y~06o4FV5%oIoCVcoks7~gex1|TC~u4+C{*SR;;gOT`-zXqlH*F3=w%9Grb zT2P%M9>;S4VM*#3gz|fQ`VDfs25r0Ivp~3Ty)o1**)$ zfJ%o~bzMspX6;CrwIfSg>-gOGJ+*+|#0#+IEpgr!7#`2CK3%@8wS23dm2E`?&&te7 zw5loUIORN)9X~{?@M3O6x1lMHR8z!tN2Chzo9u$*+}!%Pru~Lx!|p=3OUnJcOlhfV z!h_6fXo^a|6{tL1>zbxk%B}MgW>qT84#X{OCH$7=_uX2$(TnpL$KfiSZ{46BI_r99 z(JwbDjy&96T=yTr9~06%TvKI3Q^mac#!kApv|)G$@1^vj-U~}J-s={i@^PzE(Q|={ zgjp2{v*U0}djx(<^S#$Lx6sA8*r_$JUQ1Ojt%K=p=_Svaa7)`F3(N;? zzH0nSCiBxwR~|%{Le%^&hZgO(6-U)SgllsFe@sZ%Z_PZTT3@WsWT9_;THy**>-W)3 z@YplTGtGIFc2w8bqg(mY8-U8wjZW9k2D%nzbuG+(x6sns;kPv396JsrvoF=|Xee2Y z^phg}Z+IyAVoG~D$c*pJq-MZIEF6vS+VB`7z`g#>bwkcCCT zOGqvdfh1;OQIIHT2@%D8ZN=SMTdAT_wH1_B^k*x!w51hVRN6vATSTg9P0RcJK6B2w zXSoS+`TYKP-*@2L=gBkAJTvpmGtVsNoH;EGN^e$^hYUR!dgGR!ZJ(C@ls?f2(Wa4{ zp|DqA^G+Vt8>4H9y9KJ#5>r|t7Nr1!kb z=SQqn9nS6WXw!A3q3Lnk`FBnoFRiPMvi^=_(W92tyrmE_jo=63+zy9FYGdAwfE?Se z0px~h6Ck(4F-FODIP6@;q32Eg6I1#prl#?V_AJsVnqj2@d}~fN@K|o=m~uR)S&KAI zv$Q(Rha)O8K5o(1XX^ikHKX}Vz0)k22L}@CSds-b&@4HTrlX{pa?GMZD6=G{)Iv;| zrJ~U+70s#^f4`mvlas+8X=nFf5=}2m!}4)WxzVi`^-zjcDERbXHKbnk!aSUMVfSRd zFd5m%f#Vas&>1Pc5L0>~ru3p{)Qh6wuCIJ%r9TG%T(P*~aN+e)zB0iH2ih(5xRtYR#uvx(H zA~j-bft@1QB4Bta8nhN*rwPW%&tSpU0`m*@EU?Q3+X-yEU`K(C6O4OQV+0!yEL*TS zz_J8e11v+Zr-7vj_AaoIg7u|8sISaM-fNc!4V^^w_?F{4yuP|-A5ZDjoZQxho-;0T z)>GtU8Ow=HJ<5!vGtY>MCfa$1Ml>GFTl+?hAic+&jpt^ZqU^VpoUzr$OQumGLpKV>c?Qq0SKWr@rJV3hf~6q#X2G}`_?BSo zN^1r40c#hGoobz6!+>=N#_n~CV4PR37c2|di-KWrk~5@LmwQ=ge$cp=I6(8)G%Ri$ zSy%hwRsB62M!cGTUbwntWLnzoSbHnV$l9iGO$#>45s*mpdOjm+3nOd8b6e-9R*;Au z0-j+rWSwu}(s?RL;y`CVKF9-=USJP)8q*hGI%E}m%9v#i%BZZn9F*)dx)N)u?Cd=b%IJ)4CuNKe>awO9lU3-T zj7^*2q+~Z*DWkH-re*SOm??*pu{#}<^ihW$l#Fyv7R*$m)3Zir(=FO4qj%aVqei6< zM$=e$MvcmN+Cdqeb=XN6)rKV2RAWZ(a8kx3VJ2bY8JlXSWT#~oIw@JZ9hCHJA2xk0 za`BYb~-7e z2E(pxJlP{m%E%V@#?-~UXCu=uucr|6PR{Z^eQ533^-9(G5shrS8fY17l+20M&Mv&!L3 zDX(WAehoP%xa7nOPw#RPgy(=oPP|JF7b0E{SJ5obz^4yl1JYR@E(p9H_E@7lC%WVy z8F;t~WN6BM0qjmW^em5j7w$!Yhf_d(purTDTCnynzPjS|NRGg6URt@#%A@i+M|cc7d|~aBKfCkt z3D4vF#l>)rB`+lhMMPfMACsl*+kgB7n-oqv94b82k5T4xEpn88sF_HaZ#n7vwN@UL zSE}&zt{=9z*OO|=E7g_P1-87XA1jZ_3+4hjMteT+z`%pX z!xo`dj>Y!d?3Tm3eO}K-{^DY|$R%eus9sMle{oHG^!rb^<#1-@_3$-PdQS#?`W?Sk ze+cshPbMP~&dd7G`))b(%67kciA&CxGrCLZq|ZIluFIw(u7h1HN2~Uu${N z@weAw$Z33gK7=^saO&jsyvAQ#4Cxj*wRNPhMyNY~ah-VR*5AA3WC@S8y)s>Luvv6m zIoU2bqg-;hFL%81jB&{s?UKWNz2nK@&b8gok9Eo6e&zAxj2E6m_%-Y~$0bL4-*NPO zxyadRk#m_#4oCLmmB%kUyDf4ixa3HWI8J%;M2@xHb6s-sg{OD>DG(lOz4Bdh0)3D( z(N&&+OU|S|$SHJ{XOc@!Q6J2$Wh}(mGIEpGc5T1S?DNE ze>e>>_WoYwk~3X+aOYa)BorSwxY9SubEQkpY~d*b4`SvztSo=lTC1<|yaCN|N=SMd`>6Wtq zF<#Gp{2F?m?~=p8+3Vp5#jxYaFTUrNb2Vb@^Nl)}oQ1+;lxOGVr+(&^vq*TX{dA#A z4rlUS&mbs=`g#1t2cLDzsTZE7!EholhQ%&9nC3#xVEj_Me;hebKf7tGl(;+-859<~FkA?=ymT7@Q{;j@nGH;a5hdk z4+szK&}gswU2+~2o&bIsCT{#b1|p}NhY(}m_j}MK2W|^I#yD91-Or#5r=0Hy&p!Mb z<@vTt&cnjPaha)G?nuFc-YI9J@EpRgA?IP2oJWM`RQyuU(cAq|;n{^>L(U^EIgbgC zpTD@G`;Eti$Lcp8bIEx^cntj%kM>|9DDRvCMC(ENK;J8Fr6~Vq+G630w!g;PAM`ei*-uSr10J%!(}Fghr=+8HYuBR z%2bo`bDc5>6t=2-TR>oyN#VmN42dR%x7<}QQt^l%hUF&D9G&u@Nx_i;5|T~IcXZ1A zCIv^pN|Hrkj*popPl~S)o&Ao0RYCl%*zRw@%Sa$^hM@R+*G6ozh`auFxsh znUv)^rP`!Cs8ec8%4<618k6#&P6?TmL3-Cc&7@qYQ!X?qV|B_CCS{6FdCH{B)+v{m zlxBHKD%IRjRw{^;Tlk%ZXdBmiAs#C%yC6?1ugm#m1rcSxj zq+F^~ZZataI^{8wGDD|C%G{z;E;4!6=#){QsOJ5)PRTVXFYA;ECS{jSsW2&>Iwg|V zAbkRKB6yTZUZPVPOv)6Ul4?@IIwjtuY|tsKCS{9GS#452)+sAZ%1Nl#be@GKA7cNR7QqV1&3CUhh+9aK@hfoIEEW1dKivW z3@R0|pia3!Fjbc2#^;~9o&;{`U#6`<7ED4Rhkwoy{B z_~yDWBDn<=u7@I&CqUuuLWHshl$&joK`D4z%0?*wWs{9^9Vj2zC{KX$D;wq4pq%Ql z<`s7ec3^Bg0Z{&HqwqwJ0k%}Hf^w3L@);<+gB_`b4+{wHRYxdgpoDCc8$p?Fqr3vj z?KaAPLAlmODLf5dKCw~m0EOXfP3%X^Cv_Pq&*1WUM&OrY=%Eikf9iBts|v3o6|GKq zgtS|iqbMUSa=wRn+=EsLwIhGM>j`y#nS{^uRKlZKQ$6cSb*`EFS%Z}@;jyLqzN9*U z8lC~{J3riTx8mgQ1f<%I7~v7}HJ}Uw7NI;2%0?T{`=I!2JjXy;VdJ^tbaj|yM9xc~ z%&_qs0L5>Ub0&(&R*s|!f&$?dN*gF#bwqf+M~aQ-x1b!dQBFJ)zQsl<0A+`b(f|ru zFe3RuP#(8YegO(Ygs0yScv>4}5-4dV#oB^D0M*{^>bVP$we?8FAUxX0xy{Y$Z=ACM z#Oou2}+EO@;WGR6c(P{pp3Cmj({@WMoBzd*@lvAeTtHP%IkrHkT7Y}6&D&aevB?i z#Xz2Znl;rAK~cL;jIUgiyFQZY3OyBh?5UoYRIDLG*1**ZBdONusmNnb^#UmBi7BRf z{QRF(MN++{ry`F%)n-YR$|MMP{CnGvBdLz)smNnb^&%+hE;&;T>31836*a%dGa~x- z0eS4HUXoPjF$uz++kPI7q?)d$B9A@Q%b-N8xBJZJuaBgfqvYk$FfK#$>F1J$=jU)K+B{I` z{UUw&Mo@;?C=Y`&!bW)=6#BYIs^5WP1SR>Hi*oW%gTqyG7%KETZFO@6rYW<9u)Tb2+wn%Q1cPWFF~Q^Ba|*ssQC!xEC|W6 zQSv|;W1}npWxS1YJ1BmWvKfC(n2_P0nOl}SqsV^+{>a21Gt9q2Ro1xBG(D1>;ijgB zCV!y3JioLc;P+3>L$bVr=~w7iW}zVtAVM-41X`vdC-R$Seu?q>b8`b_ zxzns{qHC2flBTX6UtO=SUKEngI~a)}aYk7-t-~h4e}$L>&&@VD^8%p~N;XdjaK*qL z&?c4UL9{A!L$u#dnU)uZRC+tNSrEk?c@@Zfg{aq5qCRI*<1L~ulhW~W(U(aYdFQCt zRH~F**hXVBl%`jRde;v)?IXATDpMc1Z7(=QOC$YPUJZ*Ds|>?<52{xVz7W+jgXPVr zo|z)ANJZl@Ey!XE6VlY1$jTrmP82tlZlzJd%lsxKFEEjmJTEyZAKu#n0Za%aAEY?{ z`HlQ3a9tQnEJHwXX+>r97&ySdq}<}rr1IQ?BB%46US3)tcA{UXxn-+f>; zI(HvfEd^DzM#gFWX%q8HMUgDv#Oj6N($CE=!KndWb8&cn^`b?~OTtictwX#TCGzolC#o2zogXfp zHxI_*tip`KvfQe&x@F45boRWu`s$|TJtSb+n(z%_mqKS0+GHu75H#$xb?C^!J0Ud5 zszc7P)NES+s8H_?r#2jJ#ODtimqP{e4I1C2vu~+~$c*4U2VG z!e&*{;YdOyQF^plW=sM7{tVVEe?horVNtzU;6xlEms?+3U@=y+v|^6*Tg=sx5k#hQ zI96VZ5*;o>myj1gk5^1om)_e<@!}>ho|wJV9%JjG_NZw6Gr}QWLGMK-b%w1AH8r$U zx3HH*;!z)~yN=p{BHT8M4>Y&bErz_j>gF(QzN|sH4Xb>aL73gg6l8S5NawP2oTywJ z4a^8NO0pA~B)tcP8tazj!@aeHHKLQkEd}95oT)PbCu)gLGxJd^)5xHTo)UeC)qR$c zP|lq*<^s`-x?Gg38)|VKW~9u@qURp+ajV`b!_BkADv}}n3na7_#PRBb3$%3IT%KB)d-^IMbUWlvB2(2d)0VvPFNBe?bcJ1 z*#!7Qq2_Q+Yg1jz@=y)k1^jHo!n&|O3p46a{<38go2nOw3#;pE7loTLK?^Tfp#Dg8 z&agwF*7~J5Eo@$EJ?h)yj89E-q>jvXbO))g$L)DUxXhNdGxX?DBW^cJ$t)cydN*(t zx5s?MbAO2}$nTV%kGaP;=J#D?`6i`H$sG;-jml5An@L}WC0B*}kSJO``jX61yuJ*G zuHy9}k<&nW9p+pa^v3O!+}A(YmJyKb6h_Km)Dho%CV~BgKG7DyD-{>Qi_{+XzVjHNAD_`ffD&m{; z^UfCdhGkoe-3PbsEKT2%STpH^Pj_b0wBr%`6bWY)}jbCAv) zj>GE~+q+kcF8;V_tl4}ux8=s`Yrto9p+b_UnI zLwmG&`_MtQ-a(8KrEVfdi7@XYMu}6m5~D<@yNUJ)>kUPFjN_i7J<@(#(H=J;lb>ID2Hlcr3ZG-*<)-*P%(4@Ju_@J}uXPRTFK3-p?ay60$Sg0htsmlaQ( zR5GcDWY!ywX0p68e{n%UU}8x@Pst)T8*REk=_cnDPAVuVDl&Br4fIf{ydr-|$)rFD z@`+M9{bqw*eyKmdcuHw;(ZrG{DQtHW?dc{%*@d|i%O;jZNoU+Zv?qc2Uz(p+k~gs^S_;c8MtiDae=x5&KW|EIG^2~$bJP>r?{3+W+Klbok{S`E&=}b9}^8_s&C?-8+Zw zyL)G%6Yrga-n>VSh+FTG#pd68bTTjO#Z9blMPMe4Kq}uow&Q8VU)5_*3zGXt=&qQ2_H)~oIE(TU9 z!lzD`A)QZ^J)!gPZw6ly--{u+G$`4<1;dmAWU66$L??U8gofp+OyVv!I{ z-U!H>557Cw6<<&C@BpdyQ=P|<7)@R*Pva2gYSe5imj*eq)#bqy_I(3OLd`5FFc$VmVJ(UlS{c3lCXTe=e)wBKrhal@NB$K@eSxf-Wtf; z1D-h#D88QBV-BL9)Oi$V^z!koi~$egouG#lm%TkA{smuG(h9-Tgr}GpdMe)nDB=g; zId!A3;eBnZy)08i{PKC$XE$ov0bC3*xI}*rKa>P|(j(-EglKx!P(B~{e2*%=p6bEJ z(93lmLt->}KFGTUe78U5kY{-_jWG$h-qd*%Cw}{-+1}%k0#_+`uG9JYkuM2+mUm0Y$Mnw7rloDQzCXcuju*G-vJ8HI62>FPxJABu`^fij zANii@Bj0m<n=X%&rx66)tfH9GQaf+b?S@qeg(eY>bx)uX*WzoF6Fb% zMH7QX6~Wxf{K9cVLwLG9R8d(_R2nL(C=E?7DhPxs$^!XC6N>`n6_=$Ajgll-ksrdo z$7Shb)1t;3NB4&c0(n)FLd5|*>2_I06iMZHN(c`x6xYpd!ecX+1q*6J1)8 zI^6Dcf6S&8Nomcz82$vr`oY#Mpk+9|vBWfSxax7;cN%^qcq%G$D=Ws06M#1YPEImp zGMc*31HO;MZyEA4OMY}<`JT<0`e!9uz_YlnJ~X$rW+6V2r@kgRRR6xDL{=}eMTQy| zwKj*+af01d$)%D(y z)G8OOMu?_U^JDaWgA0)PPzUt*S-2Q7Q3vLYzuS@lM*(8OEguVFy+-42XB~%vZf#%I zk$N@ixBz&j!)};{JbVx7epel@k8U{NH9}97WILlh%)oqDM=vgxp8<=JHs+1RMjP`- zuW{9>19Xm1M!lSMdJS>Tj|DOf<=%vgZ_B7)^aXCk;Zel-Vd)Q)9VJAo);H20rb%Y@ z{?KSC0LxB2#p9~g>6hzzngB>!@B^L#mR0UsjYvabSk*6|v|(~f$wrFO)nIr<0F(3TeBdcf5`u*2r^s$euiv>NiG ze=I-?F6BzCp8=Fd@ig`AYWeD7nIQ|1WuYEeZ?v_9FzU(j%>z6ca6VuPU>zWQga&(P zLqB8r#WyYjbn0at;*)S0!P&>QAj0{1Xr^JlH{*I04p{}G?H6MR6~$P^8ccu|#Y`}U zn?X>_VT?ai%;M^0>Vt?Ufp|1Rw0#a7W^A}is*s;nWLo1(iUUNAM?hJI%Lpttb;y1X zT}Ws~fmj!$79F+%a=cjz$f_ZITNdDQK=$8j0ikCNeXDH=;0i!oJOQB%7mwg;qh8wZ z->K^#g6_j*gfwJq9orv6gj3f{6Nl?rT!+xvRWNlOu2$bY^%*gMmM#}f*HkNY%}Gi# zz7~Co=1n$ImjGdH5qegu*ybEzQa>ys^-4WfDiY^dGLEkW90FQ9AX;04j}v{~0!V$X z2W$hx21477fLQ#?htxL!I`zlX^?cwlf>VDx5aImLAJb5Og8={L(qFUc!ahSHpj&%1 zE}Nwu03jEwORAgds_SdQqN{y6vH2P*wKpZxBr(J@P|2Kk!TO@uE_7f9)`L3cigb-m zy%#!S-R=XVj_(IN4-gCDw&8#e0Wu>jXxpj)zXJ&S)E)->F5pJM?*Tpn_!i)!fSrJ_ z!?u3|J`R|Se4hZM{+M}U_Bz5-Ye_!?j<;Ew@U0R9A!WAN*M8}+}p>VLlh2)vCpybbURK+xJUkpFf- zo>B2rKtCL<_hO)>7ja=sfR-3V+7_+Jq*A#UMKEFy;z<<08$Ts z1f(850;~f37?5S%59q8vW%+O!!CC(Uh;Xh0n1=a5uiAsIdCuZ+Exer6-3Nv!A({=a z2O54-mvAab<{&RZ@i;v?yLA8xL41?Sf^!0k6)9d4Epq}z><8_gq>W9Ute1`FGqE#s z{BP801gs~ocwDp}hJQeZtovcWlL66JMAx4JUWUJq0$vFSJ-4+0{tFO(S4017LqFHL z0pADwFCg`I4A9vo!#!%w5rcS!pCLo*xZeSqa~;Dp^zGb%UE&8K!RVWd8fx%jH2W6U z^$A8appggAXw8xU{jqznD$AnyMAHX84F)5yEYutI^N>y);8A1GK)^wuVdq)q;BkO? z_&XkODj@DSw9Np-X-jPwN^>JxS$>z?xf=}XTCr0rb*$ZA{&$WmSe$U@+*K-&)iVc%^SyEWVmZ2L9f zC4lqYEK3S5hU*-Czmw@4 z<1*8*?*{JBry<5HbTTe*z=RMWYZ{4ReO3Midp!P;#6%>!%_$#jqXFy zTKP^g8a6pO$)qiYt<*KbO`i@jYr*z9m8&!y%pfIcmK1|Q4#K)l)of%MonNKEHexL{ zO-0Zy-9k>)=7yVF3`sc2Bsm!|$9$54Pd6F0WqoL^N|wlB**VEm1yZ&~nlWgcs>~Xy zPfp$w;nUT}TJAQf%t{unr-5vk@2Q%UfSn_(oq-5rITncy#;4;AH0ha^*2Jkw-eSkRct?h4sD*=xJUJrPZ7i(_7ive!{%ml>QdTj-O zs{u;^*8t80ya_M__$|O{z;?jRfVTj?28cShy#aVD;Lib3_qJaG-UWC7@NU3Q0Pg|( zC*Zw+r=iL31H1_Ee!w)q2LWjc4*^aCgznnv0lx#tvyV3d{tECBz<&ci3J4p~9s@iT z@NvMAfY5bYCg4+mmjiwmkmnFT1Na)?_W<7jd=`-3`20TLVZi4A{|UGWa0u+{1;8}G z&477;F9OoHyaebRJ0F2wYhfcCKNyl>h!^26u*=x_E+D=X6LsvwIS-+F=|;`w0Gfw4 zyz#u3^ToWX38_;G%Bt&{it20p!9srv4(!1bmNj^>5#b7KWm&Rt47lH1HW;NpL49sV zoyRzQF!gW|;%)%MAH7>^H{en%~H=>f$d>)t3nd56y3+*G6Ua+dHAsGI@Fvvt;i{xEv; zGF1VV$r$JJ=E}4l+h2~#&GpQ9J7M;m7xX&&AAVJvl(cU^y9Qk z_2vj46Ku+>gKi0eBP;mLz*ep8!(HM*z zV!+P;O8`Fyq~in@IQc5>@mP!0774FsFUUaMA@&kx54Z3fvjH&E+aVC(A0zTej(FfYNx$}%X1!n zBpCjpu?eSHiKnp2HMjsVV>9l-n%=?KL!^assmH&K`3`!f^bBK0Qs25bB$?o$S*!If zMOrlniMrT}?2~V>6oz%7oh9O0qtj1?o>)J8w*Y0unR9@r0iFTKISJ+gGWR|UkQts0 zI34gDzK`b20Rh)TYxEmSR2SbN;_Z< z{$2+-6A<%a*@s#WxEz0P0K6U$a~E0D-T{bvDcYTYcLUx9$fDg1_&vaT0AB^X50E44 z{eZs%d;k#pi`s*Le+GOA@Lz!620Q_E!1qPkQUEssUIK_QsBH}3V}SX9j|0-5KM9ES zh4vI6=Kb1t0Wsg#o&m%>Ui%&(=H=S=0Wts9egKI1wDuez=Be5yz%7731l$RT`F|V6 zGVKLG`uWX(7`wC=0cmeP0(9Ci#yr_qp&l9N9|iy#HjMR(%Z8bTJQzo{AC6@z22V5_ z9;V`)zrEV9w-+0x!)H-jaW&)J1u@>i_~TueQVpIEs&2CTc#ECWsEvu2)2Izgbs4oW zjZ#K!?9j4b=vzXRYIF&wou`70frX>p-=h8$yXW7B^uHNz=?7`hs}ZPc_5%)&sXF}) zv?KNZ4j?=I{{V775nr*9`>;O;9Erbw0ay&U6R-sEeZWP4y8xR2e+_sY;BNp|1O689 z7Qo$r_XGY8@HxQW1HJ_K0U+1NdjQ`A+za>{z&`-eu090B9twAHkoNyKK&)@IzXM|Zs{I2H>q6}?Al7->CxD#S90A07PWu#) zHuyQ9)2>-hx<6hFPP_gXH0OMTX{c9@6G!s#Bf-yv>>ON1U>#{s96Kv@qQ|T33EwWXD#NT_v`+~} zu;3Q$n|c&iK<%%@)PQR(^+;Z`#&Jv<0Rp(NGb6a(lBPg}_=3pL$(po)Y+X>X^A7<% z*Q6Uur^r2O+p^7Eqp;PCz%DA&zh3%9eo}^if z8{2&-Qb9v2PHE`1NM|8~JCQ*@Ex)v!PyJRDm6n8pxs&-<25xc;OfHh>f})DD;@p`y zGkIdsq)^65 zJeE`=a9!?;u8=ddgyd$(R>AhRHlFHCNM3Vt)HvHKUwAxoU~-F?#^lmG{XphWNuV-R zo?98s+)6?7So(%}937aoN=)-K8bPGx1=- zz+@)scicqCLw^=r5@zcOy?shpR8mwKl5`g%-7;sh;KB81tujjIwY7?q7x(*03UZ5~ zfzY(l;;LXk8>=U?HHTZZ*1~u=iotD>)~}h4GXya9-BOLI7_{x1_!AwsaEH_)ivV<LPv7gS;W1*qixs>a%jMW)PFK-?va{gMVv{+kY2tJ~)PlYjn|!J+HB{XKw?7vr zi8hZLha*dIDr$2>Yg0`)*Pz4XVv`g5%sy^hgL*@0-ul*!>W<8U2LD~;sC`uy=rBrtQLN7xfBA?{hUT5G~0{i+X) zrsNZm;2O+A%c`d1s|#4t$I2Mo+n_4vGh^8hn>_mzOkvCMA`=E^>5!ZQ=tr|)4jr5P z4vSI=GqyM_CggMg1HhzE8S+d5VJHYyCS@=v?eI2b^ftwT+>)v?9Q$2bRi?4HD=@D` zSuwp4x72R_$@gz$)>9bB#r#Jc23Iv@`GvXauQTYvCRJhTI1+;1>dj@@CyrVU_+Qo) z+mq7@h3L=Zd7*Hqu>tcX9F~lUFed1+$>*YmJf9plw_}qBp6PU!GT9Uzj>HVREMGOp z1>n837%O;(5>rER@J8Npc(_nTI_6lhGDcgP%{2z{RBgO|5-T&;P!z&Ki2G>y}4 z970eLD9I0q%1)-r*cMV8Do}UPQV$>Mkv9|VZMfsQdb(paj4HX<5yy-7z-pNXO~h@e za`bRK^}uoK%Cl{;=E4Cx7O~0ChHQ~)>>M8%II$3mO}+xNAd7q%ps~J)mFbZsq9UvY zZ*?YDHJU~2W{=XRF>laRB2hG zQ;Lz?=N#+j8misa!zDUb}XJH85|vB;2iKK;G#v->cUI0jS!o>%0?PDF27+BW;C2XoTuqt zM>k-4p^Bm_0-;K=LaxBd!;OooYr@U>4NZl$O(m_1c{(qawKy-iS&Uv}s3{411Vt1` zKWCe8k#?LVnzZZ&=ti8Ku^=wOH*j*Szt?u%;cmS9q5C|NWD zB~wF?rsb8E7LSpBa;IMNilSgyF;;oH0!07P+Rk!C+B-wU8{#lZh+nzMsY=~&#l&l9 zKV?BKhGUaQp^H{b3vhZU1@ltP(@HToFqWG^_~cQ21FFGdUxUA=%Rs^bEE&0k7U{KQ zwAwqW%v6P9S1N>0#Y?ofMHrhrIg*ur_^@b-vspS?T{CQ083e@xox*mqjwrR5wuBn7 zcTiV@wQ_9o=MdWCjN5QHY?Mqe2U+u8CfrLo0EJqNIky_KCZh;AC@G+w3<)P;BdZd3 ze)1PJG`Hd*Evn&Ly0XjAo}yq5urj`Kns+0WlwVa*SsDyg%&e#k1VeZ!8LMB6(vv1( z{88H$VuSQIR+F{38`>1xrVz_Ul!Z2Ic3c^zIBB^>FNtls0CPegDvnqchYjw5upZWL zR!IxG{G;kvlOE2ImZX<@A9xX8Xf>+$# zNlw!?lpxQ5^S%T2M6d_%d3f1L>odlcW^Vb};EFfj=9f382tEGZGyb}x_4)&cvaa>U ztjL)x@7;huX4ZLcKK%H3W%uV?{M~7feSVFmeIoo5OKQ&ec*fBYCo~S(w`x?^>$pFQ z43a!+mnX&zEAA>iY5C7ad$(0TF3-1t{?~__H~;LtLI3HFi@WldmyAVs#(pX2H7oCJ z8{fS)_nBe+mSt@plqSzKfL`{=`ePZiZVp{{ z!&!gEy?rm~KV6l#@6wNcc|y(!>wew-Aa9<8h5oPUuRQblzncEEW#=u!sy5%<4={?jCXaU(YDVJrSW-t-5mev*!&u^vLi5hYpJXdd^{cZ{?5dvbCTz*<*y9db^G$a)V+V&9W(xPC1x74g#OFxe)aaTf8KUQEwxLNXy&|fbbos&O1?mzuT?Y+GJ_D8Xy-7WOrzqjGK-RJ)O^FzX5YfPmgZUMX|w8Z>U=BCM@UZ_nKlwfK4hhjOqeazhQ|rjmtyLUsGl?#-woVthw0OYH6;8u<*E9OL>CC;^n^i zI6uPJm^S*kmIPJ%~P>beP*DU;+MN*x>@ISaw z`_)T@Njm+&*DR2(BQzY&wwz!8HKp0Ax3syXwyxoulqdr6Y;OI$y01GB==FwUgB}~$ z2fy|JWeh8*w?0yRedqEG6zdylg~c4au^rH?cAJ~48|!*j8BSEvk0e@B*NlhZe9bMb zumoRv7RK@=HRc$<1e;>>zKRoGf-R14(=6N%!hQ$;=(#L?n_n!RrRD;vTB((3zSQvC zM&D%sb&Wp$o#h+uyGjV4lc4@+R)35^>}5Xft0wfNW*|ohP0#RMB9gz3s7w)+nf;B4 z%Fg=6M5TXorAklx=884uo2%eA(SphtvW!x}JXD*GGKI_f4pVMCe^s3PYMFXxmd|Dm z)DGa6SiE*f$Kv=_lum2Wu{dq5NxQ|Q9R_x*NWpWxg2iio9gE}hp*n4YNyD>oJWm7p z`moX>7O$o181gk~Ehg=0U>hXGQ5}odx^yfK57?{Ncx{c2#cB7Mw1-Su64pz%ixjT3 zh{bDjbSzGL)}(DRX-9$GAu0S=BN2<&3Un+^+icRdn6w0}fw1&L-Dc=myf#b6;6q}^uHHk-69CaoANv3o?yeL5DeJ)~oC+K2=d8?UA5Se&*C*u9d%ccQ}3zB(4C ztubk9P1+t{_eqLjCn+pm8=+&cA(OVjr0oHAzeT#FfITEBlCb;n3b1%BMaSZ_%Ypq^Xn8sY z>jcIW(4>yVY1@FQv_I9cIBgU*vlQQ09gEYhGHG*7+P6$vhe>U9 zj>T)Q=~$e`JCfg)QZ3an=-#AlFlj@u2f$~z2WrK@ej+K#bSzGL4j49#P`4L!EKVDb z`;JTj&!A&*+SR~R+Ik&})6T}dKE*dw$KtdpCau(@Ei-8=Oxh1j+VdtYeuyD2QODx6 zu_o;@lQ!R^Ei`FcOxkNE&3Cq(QiGZ=(y@50QODx6&rRAFCe3$_N`W4rV{zIRU>l(g zyvN{E82Y7-#c3-{TAN8rIaf}@L5ev#7O&OnSe#ZhRK>n2zB2mPy^w5g8Z9NAbqSNrtHC+BC?jywO7 z%vvAh!Ewq}$(I7L?SdDvFFU^$x~!|e?EH}#^L)6mi!b{Mt(cEQ`tb5c6SiK$63ygV zP>vyyzeo5GGc0Z7sEhRID!vRKElu?@mweo>oDZ?coieNIFY~bkaau)zf$?c**VrBx%Q8s~e~;oP!1 zJbyh4&vnn&LWr+H%8+m^#$R^&EX3A;yG7E?LW(eCgpr~S^d-P*5XZbn%5&lxjH)%MJsdn(BF z|33Z6Q}e#dFY~4OF1Wy_{u+OoPwu>kTA|}Fzj%$hC-r}+{-X4=Z^+)FwvD}M{-5dR zebL4Lx6_{eWYqEC|J&&|J|6vV+G#FNv1swltHxZS7Jj;>CfXf|=wqV(K2PXMRp3i} z>9b`3t?D?m`cP~|d$7ABkdPCIU3Jo10W4ARnoJ^EYy zcOwD$PnFEO-||xwGsGJ@M5?;q%EKBI81nnm>^CKmDz8e>QJByk?CPlMDmSt<*~|=t zA8bbTVluXNHcF+sJ91-&_d}(I2V--#wfI@FyaX0J*frG@7)Tf%h|PT4tmd}Qe;2>Q zjBXDcm1-VkHK~}`c1VQA656N681>%dvDDgH-&m@VLdRc2ct}^^Rb$wN=p%v6AR!SK=JXXoIH@hkWYC+d%}%mDvVVz?UQ3Ir8d?1uH>Jj^e_1jWbU5M#iF5wZ-~K6P3VY8f^Oal z9M-GIJgDx~2RzVl=Lyj9>VqD%-s+WI+V#WqVxcip*5*_lz5Wy_3QE}35pz409PDZj z9`1abe1XH>evx*T^7y7j3e*DG&}gi-Dhb>l^xHf8z}~=tgKa2C;`FWa5(fnii!!=9 z%3_8mE2W`4fi6`vmS@EX{CR)Jj*cUGxmb)1_m`JVQw{G893E74v^{XRz3OP^Pdlnm zyu;E;5PT%@;=1pie#fCLUe0)J-VujC*Qkme;`%H^82 z1^pYc(ex7BFg{d)uZ5Ar2)rF}o7&J5ruIdDj|0ZWw} z*n`X@Xa2Ekebt`w^?_Yw>w|}k&YZA!_Mx`|M_IVH0$mo+d8Td#^fgDlDQnT}Y^<#` zWm>;(+hYS=D^I3Ek0Pt!A=Grol75|UiiIyCAG!sSt+=sUTXo)oZOCB(bCI8``$ceF z7lWB3*;_@$zJV(Uv9p4QXuNDAk}GdVvt9KL=wf5@1mrI`s7Jt_|Fk|b%IGR5#OpO9Z*DL9^Q2_D7VX?*#5R6?tey!FzaFgfYyQn7y z`RKlIh{%QIirJxYTVp#?Zp=yfAzJ*`;w{fMOp?PDof9|`ZqG^Bw335u6D70CR8SAS zrnfx)$6_C2tGZVDddzJAa*OHgx5+~X@NL51u3%Jq(SOBdQ~I>iXbLY4EoK-AvL^#U$c{+k^Yw3P>E= z_kdLPKu6#}PGDc+`n$*r@$CBtIudS7d@hLIxBsocA!ML2!68Y2etihjua&`$;DO=6 zL(7Ih((o!!53{!iVuuF~B|aB(yEm}EJ+L1<-r%8};J%e)^Y+Bn`DjOQ|5PdI0dGI} zI#q*%)A8;*%T%?yeJW-K`?l@t2V2}DoR$d(YRb3fjbt6cqqXhW;n%d8cKxnCG#>VN z_^rTxMp_h^;#oN`bL+vgaa*M$kOF_%%RK7cj=;O^fdg>Bx?X}uS8u}v;V61cPE|_c zZPXV!&9;4*R}Egh!jqsSuHg|Lh~M^6Oh*7Te1azNR=n;VrHdck_F;@SI9OT<6@k`% zH)I_U3z>Qi>~~F2K7~W4-$(O(nwXTZ;ZqD}KmxIemu^eE`8L*=s_e>1PQ2v?sXzO^ zJ|8&Dv3#3nszJy(ylM`3%Z$8X({So^1&|van(5#0$l3^LvhE05FD~80=k!gEy zM@Q8TV-XSqM{o+{&=S$llqDv|+yEy81K;m5@ZD(c{VoHCKU2#F)yA^ovDvoN)73$h zefQHlsLQ_i5w-!5U9O%j9n?LAvYLQu-QNwlA@QZEV>kV>1;dxv(JfOko`_*= z@2J{t8U|uzz)q0?JIZ)HW7;F^b&dfWgtn#QT=z-x_C5cW}Z-?X^H@z*A zf6`I4FQ;nzD$LE5HZgZeT>lhGZXvWLV&bA~(@^;y>e^r#8`!h*Y?*lILOPOis`jnG z`elzSuJ&~P8am?oGby;4i%OIV1P>OaJB}n?v5kImEBqvixvy+09pzS#Vp7)!pOq4K z6k^awLf=-on^0>HY?qd~Z2L#Hq%Jz}J`y(=y`WWAAMS#R_| z_<~eXEf4fbH>^|tyQ+J5KNyI<&_w%~+aWYFZf3!ZR$XOGa=TWKzg=qynt!4l(Kc#b zSiXSD)Z2!gOq2%Cdh~`52WmJNt$)$#x4UxDVkcTTV>)lQ{b?3WR&7!rwO`gP`#b#) zPNVti<(It}RTX{lJ2lo;4$LQyVvZfFHY*~lE0FdMNwsE-Rk^t!?~N~}7e1p{Zs`fV zq_UO*yOUj0-Tq8f(JeMfO)Z939d*=N*N-~|GU!Q|zNM$HTon-g`=+g4ndA}g_ID^B zfAnju-NNnBg*!CaXxsJ?M(2c%)&y963`X^sla~145j`tTz%*R?_&{?$zW?BNLFqi( zh~G!E=|ucKGNSJsYzK014SwiUS3*Rru%L6t<^+>gU_O;3bFo;pCcgjkl}YU!Q(@Lp z0L(402Nc->#3YDi>xdc99<$Cc^&oZ)yRak3OwrLK@2c(`PRnkUa&%jz9b$JrfJxDz zC8;v|W<~)}lVdi(!o_=G8s9BGvb%G##De|6l1n(K$~Gf3&w_Bxin82{vY@d+F(s|* zJQ&x+LoE+$$*)gsv5 z`YbwIKaeE)w6*>|4y5}q0;Nc`_3|fK8@pRKMQkXk#)fO_PF&Atldv32d@gX*D+&V| z#MXyV53B-LuRNfw9D}abUWKVOc3Lq>6jkh2RYV(i8*QB8#a4>BLni$_2`UCN8Z=hCDm9YefI)gYtJ^do1RL z;W78La}zEF{V6ATRWUb_ub+tebl_$H^f$OY4k=h0jJ{htfV+{b1+)qToD?(I4 zN6J0zDL0_v(0zOCCJ%RGGPa66m(jd&rQk6U_0VPtKQtu=0H*b@mDLiIc;~XPJOY>^l%YqdF`;lOL;ZM;r;3^f3$I$%>u>-WVz#bRAzXSWD z&|?J3t$9Pk;e*n8f_)_pZ z(9MEf0E{~kDcUMvN`HHRsq*~;m@3}@JiB$L@XZ9KN_Dk~U29?+OzeliRBmsZ*qOK~ zr_%DVQH6~+v2qh@2By+>nAnejamyh^9wq$~umRe2*i>SF#skfG98|^51-3@`?f|Bw zJY!=22Bz|j#{-`VJJZC{O{^T4N_(}5y=KP#+{E^p*rz6zl4PVEVPfNfDV>%AQ#!p4 zm@4T#z=fu3#6OY+wbzo)ub^iPZs9DVCYEc3?jc zzTLn!3-%Xa&k6PqVBZ&P03H@q@&*IDO=wpF;{&}Z+CpG_P&Y;UF))}1bpHmhCx!MG zU}$X64wOGY z3fOOic8ke(FEBI-_#QI(o&u&?VYA8i2C)0Vm!ka~7*vfEzXYc8-3yE>j{(|WfvFPw z6Brr-w11m?3E1*ip5b(0iZ2xy)C#_ffGK%7z@P@u{3dM*u)9D@(WU`|NW@-g#?AwF zx5Qop4F3_k1VG74J5@em30l=@>LJh+ZLNuo9BjlE0((rPY%#GNdoZzlbXZM_I_H15su?2dlj# zv%{#o+?z=1@Z|Kn9ygVNboS@C z(r@;g%>SRbQgIm}O-E>z3_P|L1Asgv`U&8DxSXFoV;b^|#1+d%mEg%=RM%M9AWvEH z*vHH9#{S7Pp(w$J!&8l~oP7id>YRL*fq%(Yk3w_tuxPCus7fKE%a@OII!`Y?0(zN6 zI?FW&7lr^Fr>R0SR&Xq93m|(yDnsnXr1DGh#)-{7Xv#5i%;4oxae-G98JJ9fqlmK{KTUnSoDIrX0sFd!M{-cqS?UM@uaUh;G3Pqhsy{o=V4r!1B!bkJr!zZ zy615z^%7I+B^Dcu>qg?2g@4o%j|IQ6&=@lHK54fV+3^o##BJx13R z%i`44dAhECDCL}iUt&sE#NxDfP1;T!v*;>8?Xb}ZBfB-GF|rR(%_*Wbr#df04At3_ zSw4%nD;;LZG*sugxQ_OsPWyRZhGp8ReKgMR_tiL$piDkoMqpW;>K>)5do$vcX%bWF zCKe|z=_wl1Dw@&rjqO6UROD=oO%z?bry`~|W8Hvwr*@f!+C3T9zyFuDYm9(C395>E543cvQL$1N4pw%BPK*hx$@_PyF9yv*P$3fmAx46MHivZ@o z2|myZn5xr*&=kv50?4^SDIncq2QH;KVoGzw;VA-TbSw%#qSWohT(UuU{r>)0dhejofm_% z0k(iv?QjfC!^-C1Dr80yJYVuuCZ2DL3}Pxo#e0DA-+UXLBaWhFB7}cb0H(_gEEnd}6(LShXs)^Y?7SBq^PIkHH2HV}B^%KqE!m;bMa?1Lu3-5m;P)4TorGU@vFJ{l1+xa~lwI1;X*2Lr z$5$VihCFoI>msgaPVI7>Jy}TsCHwRp2^9u#|_?O6H?m41;nT7Z5Z7R=3jQ1CYwitS@+9 z9xFTr;s)ayAnQ*obAg?UU(P=U;6*Y+`NM&6k``V00mM+zMsT{F4Tx}#m`ua2nv3hR zeEdlG@@|Jm$@F6AQ5}vkVp`n^%j0w>{A>}+2-UV_0KN*y^1i0K6YdSE1|y~#jF=ip z6>S&(Ry0e4EsN1w6RyUSSL#+)C%gwAHhljh++0;8?k{r?e+E~Ie2Yq9RI}5cq=VL* z`ngb?=kO;?!>V0^tLtm1U#%uX_)bcQ@4WS~B`OWqZ}yQwl*0%t8=GPP;CP*QpWYPr z1JZ9k07xU{7qB=o@(Wn3%fo;PfZxNVnueHa8e(dJsA&7}x1ynGaHo+^f#S}PFR=}eJ_)9=a{}te3z+Hg10`hBDbbTz1P#VSO(=l_ZNweW3bJd{8y<>Sy zJ|?L%TWl%@QFi25KF9|I_i$qB};c1hUtv$-`(n-) zsqpA8XRSzhKx-KyCe7ypuZD*@pl+SwS*7->ee&P}8S&r(ZVc;>>~sWow+Hv=4{`Bk zsrgj(VLVrr6T9*pd1ev94t1pL=qT6$=X9u}bx(WBFWL)!5!3k#72O`d4jwC5oi9%+b`ce*0a1If#5G2->NqC5j|(z$Wlhs9rwD@AL=FZ<2_*%-f3X#d6U z8o{U>=jeDbdI>!u;~0*h>t2lR&(Y-*T$^xJXqFFHhZiisf#!?CO{o*`rM+;|lCb|v zeGq$UZeT_szKT85D%9~+?5`s@RecBh7|MN>qkplk7lVEp;J?0xC)SH6u9&(r0_|Rf zB)H-@ZJd0%n)4Jc>iCs7(=C%g+ibxlGXs7|c@H>l!Ps9PUK&y#3$=d!mMgUvaUsw< z8(+^=-uWc$s^s|+*I%0n5$4RHQHbh?^{2Ov$Dg%2y#rpBI^j1tnZtTOKj5u^LBQJp znJZ3WYI`5>cEH1ccL4T>tUCeu_QG9&)a%`V)Wb8l2FmGGY_nqOxnjLjgNpZHlE*H*7@-MXkh=3 z#36iWyg-U44vohRW8XCITJ3V(lH%0=CR{0UGl%*}!KvTs3&{gy-Tji#B9qt-jdRp! zJuV5HMsEY^+J)EvnsYh8H1xvM>_tQIBjL+02aYodweA&}`wzx)AkD}YkmaEzc>z;( zdLcYN%ZSlHEMT$@p9M{g1jN)xKuj$I6phOOMYCv-WA#cIf8|A2dCMl6LOGcu-B7A? zsC@!)A%`nq8Wxrf`{~zk1vsO%zNWgRx0$_FsXh09H6qK9Y+ZM;oK!UHHUbv|+`1?l zE}zGg)49v%MPZ<#_)VZGg%eW>C#G&sDB2JMtw>p4n~hVWSU zWs!~!Sutr;cIKEYQiaE$WG6T&qp3S9&)BRKCuLNslafsfwWS(e=A?{So-sR|l(DZlQl+Oo?%+uulZ2+R%1Ix)(Lu?~ zh=tFy@?>UicF4)h+HX%aIwQTzo@#VP#y$rnGmA&XTO^Op9F^*%WVbmeqtf`Gt~J%D z^uqpjN_OTZCnf7~N2=^mw>Wr4kL_|$#-y#qtk9a**o=KnO6I#xO4cwqT1%=iX=CO% zDPs>iC>iN9VAs}E85zY+p3E#8PsW(^w2d~(sIgG^3^-9&Yw}J?wi7gO9wAwU<*)9Adnl5f(Woxa4s9=k=UV zAqYp_SexyZLr>xLaO5${6Yr99qVSwVAqYQteLv=l&hjwU>p6s9L(YjVIf=q^A%2ma zcIEJkpiZZpB;iT0lqb<8hhw4F!|68V41D?^1Uu!NEIfztYm_J1C1;TE48||R>-!(P z!!3ti((AFx8RU|4ityy}7uST}KKY?r4oeH$K!Ir`45zr{aG@8mpXVlx-Qt$R(%Q>& znng}+9VK(FZdp4=M(@%x|u`JVs4$y#^qwWqb$UVA)yA1*vW!*g=O zNl*6;XQc4B_2=+D;c#MZXi^UTvXs8J^Ar@Ix4e!No-D}6PR|j2!Z}KK*pFdttU2zc zwSB`02oFCxu;qMIpKy*Ao(u7p&)7{NMCnb>F>o20#Nmpao}>GOGfH?k*kXGA{^^&` z_YEgYc;+E^YCoS*u5gwJb25jQrIygY#~Y>R zfsz_~ouM4=P#!mwgB(h#sf0&4lzKxM?NIJBl>HpavxbuDP(Cn}42R;Uxxtg>P_hjr zTI0@+p@eY@Zu7z}cGdCNxd?lBnmbz?#wm-#vj9Bov!sAB)HqqOXO&Ed6coeDPzo&-h^t z-B&{v9ull_Q1~e2lsO$8`db$nhb9?Cv55xWVSJs8->QI*8wwdz>t2YVxJQVm&{vYl z06pMQKUjV-zQ{Aga{D?Jl&G&`wp?&V)YmrSi#)NuvSWO`^cGLQu;WT*w-gU~Vtujo zkH+x&u_ zEuEy<^&doiH5gyyiS>1w_@XB9`S{?vJEFcijW6=RS5Z|>)~uph@|})X<4WSsnCDL8 zOL(lO@oVzra7q3-Q)g8c%qlIdJUs}QoqsN-*5Oc_e@+4E`fCP$kuCNY9mCB(* zcrk83=jx*Q-Of8pC(Df``DTk*e*W}A1X5T$bG-L?9 zoudI121^*#LY#H%a25v3N$ZIEH54quxtYqD>V-`$VLkEC<)mTOElK1er!~9yCB8Oi zjnCzxNtSDm!-&e|f{Zi%j)kqQo%0;JSzwur3(h*Q*~vvO357x>l?5|$^69O!wJqEd zrYJfb9>{_Wd$gj%u-b4FO{Xgq5xo$@9bF3-*0nG7I@Zr?ZS9DJTRP{3u_bFEwSrNH zBu5DxXO%$D3rZ>rXXU7(cPy@J3*&y#_9o=PD0!*K%P2CgG{#-DlRG6TjbS7*(%w?n zth|NAqPAJCFEa8=Bq0TbCE2J;P{1^!J&zJgKut%yj zy)f8skfJQQF=7wXib~Q?QYBn_Zhy~17Vnd@ZBcmSKyxRu=#N3`K{O0(G2d-4@p&Yq zd~8{a)OX?j?WN)Rd6D`B*h$d3ped3+9wt9rv}DN?+*21Zcjt}+t+BJUd2ASs0&v%o zZ+ue|4to}G`wAv1nEuWpu(E$>FkWdJ>peG6~)2){6a+Js)kYl zL27L7Ejw3VqBv1NFw?Kw?mY_(M@Khlz6co6Z1H9!;are7B0-U z!%PINSOH|Ywh3qD=Z{1CjlMyFCF^0cJKCC?I!|exGyl|_)5ncJ?X>LEbH)c^o}BFL z(@#G=5STFT^l{nZa-qL0=~vc_qJ?##AxYMBGsbW)!m;1{PrREsQ|W&E=`oY;bZRcO ztk*EvHKkD*p9RRb(hJ>-adf#5@8*TXqL1*o7UbyiC`MbwEm0m~`Br|udm^8-wU``Tp;~ZyvOxmy8jyf((TAmKApTHeHvb0FZN^M<-@^ZARXbk z79L6Gu8KDBY`m7gbUHLY9r<-Fe2~uQ4qJgk4Dj;d@HAd{0my$nc(z?9Y*=naex2}S zOfC+i@b}#7Eo&KGK2CU^cv%b&fG70^VM~~g&2T;eJp0|Ke4Gu5#v7H(2+$`R9_5Um zkL_@r3BIW}DOaNKPJr`L!_!}Qocg{Gd=K5+e|X2j`3=LocSaw56bVKhDR9jC!U^SHo`jmPSlILlq*qql;3HFM>*q%w;ql);0t`e z|L`i|Tm_!{3|}JojfVVQ0MDmC(C}jA7p+G$X=Qg?)?B=N9Qk?b5$oZVhDR9jC!Sn3 zf_^>t8tzf9L~>zxw-_GfOdQ_5;On|qxe|rPg`FRR=l6z>W;|Z{5R~;Qc$VG=1P}8Y zPp^tWzt!-Nk59btSkGSv-yeP`ED80h0M1{5=dAmc&yll7?^$lM!E?m}%Ey_>cYo`ZxFj3NN2T;jy1{E_hCVO4#}>k9pv^#PB5wkNLd=JoA6se|Xt&z6(6- z4IkTuc}pdWz!mw(60CpN!J8r}ja615*pei3-SHhj!Sy!Pk}(2rOR zdy1D2nw_}mTL=0Dt1$+78VH`)^hNvG3~v^At}}f7g?Br6>YkC{5{5Sy&Nmqz<&2*` z+S4z=_rbIMhj%EPN35}|9K3uIrEe45^1yTW@5z-ozlXyuWO#%Tf8v!d^?4rn@}E<# zMDk;J?S@A=86`bz`&oL}OJc;tlZ3-uW=dS0KZx}#4eK{L^?}F## zKPcaDfOz@c488}z)AQfTml_k^5+&mAD7;^Q=deF2DH%Y*^Ymjc2E7nGPZ_>M^>P;C zeGNQgSwZn6%Ewf=EdkFe!v}A1^Kl^@o(Infe`08f!z+VZtKktw{D~(Qj=O&YzN2V> z@g&lN1K~CuJPn2~QTnJ?E#R5*GDAxoUM}307#?B7pLprp0s61N_oKfkSEBUg!1)#M z?E6>cOJs-m9o`Y(Ig<&+lPEmqcL8`VHGKW$_iFH5_^Je#FuW7sd?R>%WB3xKkM-z9 z@ci_(-G}!kcv4v6t;x z8v*B;hG%!-wSsTvr~QYQ4(A@j(_eTy;dndvZuqSK@Yr8_*6{Qf9_`SV;QI?32t0}M zn+G@F=fdLri6=jXR|LMJ{;6zA@+@BYJE z0q2XsGi;ag`2gaT2laU-cqV_Pe2MaV0Gux}JjxkAJf?3s_-6jc6P{~}AYB4@dkhbM z%QGa~a&NFB?IgTE0pH7pmwJ$&o}KUI%L4r)Pk8b87~XzgqhErTPonTxZXxhYvZyJ# zDKOva8}E3yy$PO-B;{lORN{4Q@T31({Ns7Lt?bqAZEbXBdwZ%0%VwAGJnKv>&(j9L z$Nt5n0q`-rft>OxU{+=JhQYo7_P1i7L`sZ4OUf8%04EJmr!+47%Q-o za?Z?->t0$DtSYFfs0tSc3u~u_%Yrk4Ws}Cn38|{9rL$>aq^xO9J9aZo3Kchmi}fU= zVt(2OAH~5b1+`^0Wu=9=$1LnvRNvO#+2A3Es%Ib%#U5%!S#fzmC|G?=fYN27aRuHf zRuYYZ70jJIv$cJ}?9kG{)TYir5%z1%u3K2w($w74HM?YLxS|M&k1T98_-yG&MpssG ztNg@_qyR@S2O_jbFVMq;2}4cw?X4ZHjh%tfRVM^0+K|7disj zrU34#e7*&L(m*;F?#@wqDB7%@8fvSa36Z%+Ez8CtGT(dy{VP^ zv+|{8aJy|VR8mr2QqH}EliVIXo2_=|IV)#y-ch-j{=Y)kymgy-J^^kxcglLVPx-nN zCZ$Xf+E28^?ZYzeg4(m2#dNFi zjPwmZ*0Nx=awIvAL(g_N;3pYm^J8?2qYQ`E6$rclh z`k^V{0R4asfFl4SfLVZz zfcb!P0jC4PrgfhK*aWx$a6aHdzy*L;0yYEw7_b%aalkgf5lCML;8Z}!qPrHb3-BVq zMS#@D#em*AT8s2i@u)m}yf*$p(7Z>m(hqG0Y=ZS(0shEi+xXIs641)>UF3DxtR;oUGDFpL9?2Wz<8Jq0lf~X$ z0?71V8b>Cy+sSzC3Q3s^Gc?xwJMrdv>^l9Brwi{#Xhigh%A~BRv$Hu;G_R{=pr;Qy za-kTQ6g$5zF}S7Uh@sCZR!kdpm+33kgjwH4zWIAO;F*9|0!{+F3J`i_^#DSjc!Fj( z^K>oX=YUyw?I#}y*anK!jk?I}Y0u|;)N9B(Qy~ z9ysv#k6gc<@?T=d2*@Yq4gE8eHxsr4kahz4++7Ta$&GH*2cF+6=kEOrkahgu zfcFDp@ZS9{;C}#F|1k*e-UWyOS~q0^+uo;c@RXQL@Ys*nuC9iIx9>ndw5taJeo$ch zv~7r6&LU%X@HR7Gyeh)xmx5*=8lRT5<%n%%H=7imt|dlA$sAF{kfY7F?SHIeZy$8U z%=A;{2Y_~$p=0bJ_I4QHL7>6CI{=7wP)^B91*Dxx1H2qC9q>B948ZRL9su|-;DLa@ z0mO&I-7f$_M%{k_JQ$E=a|j?NKY5i^H_FXITDqAQ=s`E-c{rfgenAhUy|5M3Ti0KP zdx5*2y6SpuOUG_%dtq5cp;Yy$?jSr>ec-{Mrhh{LNfSvuejV>*PhF=>SVv$htq%+E zM;==T`zBX3(cS3U!i?5-_VVo7&c2pY+wBH_b(U%HS^as6o2&YdmFAwh>mufe4Hzp) zi`oPI6)>bK2Wc&)rit=nURWpjoQnK1o!Nk-=Kux(#{r%SI3AGw z3haiJ@#C3*=iqlP;9S5wz%IZ^fL8$G5P)vVV=~}F~$LTi;)VzdUzkb=CKUbqgY4oqph_ZD`Je z#Z!ZoXx;gZUTsc3KaPtr7M_|ukN~ny8+;Js2Oq?^!3QyR@ImAZJ_uB3+PMpc^qr@o zF0kI;4)`1uRGuVPDM_We&2|CoYuOr%WwVbI?gZBobUC8KmZeg)sBqe%F6k5kYYGW% z?U6-jF4gKCh0!w!;nrpuhdT{6?&~qChh}?d2K>s?h-}@gD2E7FBQfnG(Z1KU&&4Of zIOty{0op(=09SoiXSlJwuD-LWwFNaeHRF2YFelQ{8E!y#6$iVgX53?_CY0t#%Unzg z*n{<<2p?b2@(a@jA#MP>Lu8ap$vQW&10i(^uRU^y-!KD_OuhkLicLZ_u`vuzcQD}2 z*3P=-C_4_AlT3C*<}SqKh2)Z%v4{1N8427isb3(14^g@CuyE`Fe@BcsuZL?AM2d&z z@HWImxrt=-xMv>uoFYxniNdyz_11A*FX3b)#~<7|WIxm|+R8B?G#EPUnzS{y0M>(k zE8s#vC|UOsz&ijh2fPyyxP|^t_eQ`U0HXh7-3XyAkk*fENMY57-0v z0N}lV=p=Wq0Yo3I`@aEy0{AB2Lx2>=PXUJ^$FSwy+`aHKz;?i&16~RUv2|Y!xDpVj zobrO9?ppvK0mQlK)}w%&7kLcu3Bbnz*8-x==-vhRBwz~UfPPzdI^a`)hXJkv90j-< z@Fc*e0Z#*b2JkFEw6ERM0b%dEBY@8VE(2T(cnjbw{Ca9w1{W|6wH6e~Y~WPR&K1?QVJ>c1#+%S=e>YgsfM1ut zps=pNo|8q#d3eSZ2Z$5?EN*S*nUAz1ZOwH{!_qnKi22mb%0hs*AiyN6rZQYqP*zr0 zP;_>lsGtldm?+oK_*|vsGYZN|i!lb*bSGO0FPVY!TtzkKDxd`tb)Rdsv6vqF+8IKzx9dvEYdnYMxHTlv0@w@6G(AIc}=*eqP)7M zs-o^Wo{MU$s)FS;xGklRf8!JzM4b4`gR^Sl#ZUTfJy%u* zXTDqBTwPR9&Z)w1MO87XO!?GsX*r};R#1d&XD5gWD>Ciz z4c#bfzl`%>?DdInt5L0oWps*po>oz4sz|szSQEx>fFMmwO;tr%IEceO%7U2IRpud9 zf6SqRS>eKh@?z{us42nKG3qC|Uq8jwMU~;2f~k^Cre|2c?9v*9r<4^;twwiOi@-`+ zP}tm36lrcQiO9lFrg7-D=rGGr4>#0&p%&J4L^yF<(b&iX_F~lz`iWvJI-6zUQ9HL& ztlGt@e_2H}Rl$T2Ywcs)VgorMrV2v&gHsF2!c(gXic4uja4~_a74|yE1{GVIXI51} zt!6^OJheIM5bOO!h--;gKd|v6o_d^Scw^MV%ZuZR%8LuiDxl^wD#~g@K}?8h6fqj& z^){uVswfz)EibJJ7Zep?PCbmS1jdT$)#uih-Frn1uCADZ7PO#J^t1X1))D83mfYNG zQ~qeT2^0ITV+^wF5?A8sVMWLU(wb6q2xFu7(Fx_kAk@Y7 zv@c!kB$tK?rUs=e$MF1gveO*vlu9Q%(du-NNyTvSRZ(>=Tb3Y3g_^kiNM_=c8~}O4 znVtf#tPX{-v{MnTs4m7BK{;Xy$>xxrE&V6Ei;%9>5O5hyEGj{{bd$-3tJxzwf(%3U z+*}u%7!kDJ8r84_T#^x+DYXw1R2rQyDemJ zbm1cDwwwgwAxGgzgGfuHy{TS@0ux5*C z?Yc{{PlNCrv4u-(B*p_FPMDt4$7BA%m(hh^?Yz1I*D#)p-v^r%gzGvnDw)%TEam26 zFA-))I$FEh>mvm=9X8gNkv3pb=1vuC7}>rzeYcer5uyqI9Z7Gnwu-X zA%+tX#;$l_bk4&Dh6e2Ti)Q%@@P0lpUS!Yqk4UHtpT_f8H+OD(WG-$>z>!DMcvzxa z2h8qB@>F=+63?5e93}!HP1ti3jfeSpdk;J~F&z(&Z^ZM6L;AYhIbo9iJOD-~gtZ?i7bRO(W$jFirZGG0lm2jj9bD~qrh)VPgRoXug}u1wEK5j#L**_m zt;!iYL24|A{r1(w2ZR3wrnLroUL5JDZ*OYDoCKzfd>NckL6>N1xDrWV8jk^?)}f35 zg|{A8(&&{13(9LN(HX3$trQ~>0B=`QOU(pH!6k>mNY!xkfQAX)oS*2`2w56RjKyft z+L-a8l7cGn`uK794z{ua21gtZLyY06wU~A}1*~iPv!JoFB5JxY&n}}NEUx%69yf)Q z$XJHMw4-viV?WDVnMXfEkNxM#W^q?B|P1sEA?nJ_lLKsJ2cPKPGDB6aDm)R@hf3wAk6nrb_nnmZ)a z9f!ua)>QF?SoRrCjA_56<3ZiEYqs!kL0tMIC{x{TkGnX18Mm>bx%)H0@)@NVsD)>Y z!+6-2abIHh+}w#>Ex3m`(r_}{yOX=l!W^kD5Np&nU6K6vex=KyOVd7QQS(@4ben) zu%v&*LBh9L>_xTJH5Hf|IH$TM7z*PXEKED0(>8S~`WQM%ENaRI!)+T}?FH>mi(PqT z%3Spvnp%R1H{^-kOULp`cZ9h-60$EWt*J&OVHfyXlh&BtCMqv1URksbQ#;?X?YcCN zT=$}Mg6-|C?PaZV`IVNH54IT=L$9aFBCBxSf_N*lB zA$I{HAGI5=F{>aB-;ysqog zE!)OlJT&=|ylJwZ0sP6cM?HJ@{i7;x&pYuaGk*BRMV9r6@c&?9;pU^BJK~s$SJig3 z{Oy4r**gaQDdqKty*F#eN&B{q+;rJ#J6BoO<%l>v>EpXQ9(nG?1Hank_n-Htlh1^e zTPO6lZkhM5pH6)1f(NcSwW{pkkyDV?A>^-Lc5C;*X8~%0lrNM?b@O3cuD5NLdUy!qY->+YO``Vk! z%L-Rt{E}t;Qs@W#`-O+^Dq8#7j{~dzaNqpDJ_b1m{a-VmeCUgRwZH$whHFRHKJq=t zArG=nPx|`hJN|fIePGk`-@PRNic5BGzzJ+Zuf6QNR~{a9;I@0mq-@)A)a&=-BtN0Q zuqPj)g?{SHo}O_7W(fmE8KMI zyMNj@Z{KTP?zxkjYkw&8^&=L4QT4!UA8)_%!ih6K;PxY4w343m&%fO@?(vU)Q~!9* zBNGVoed{JqO1#5d9r2Y z4`cXmPCUM-?A?(czc+P3?rTp~{0?#u`qfL*{G-cuR_wp@xif}7T?aWlEA&;BXXF)~ z@BeDZX>Xpj&zk!dWA8A^I6djL7q9=;Yn9Xfo!anuZq}IBKEP*4Lf>ArIQ!U}f3Wq~ zbw7Kl_wzTKu@6S*{~7h+{b!%F{oXO}{`IqtbKkD9tiK7peaiW_Z&>--l_`fm_vOE@ zI_WEv*S-w@AN$UHef0;I>^N}vSD(Lo`J2$6ZwdW~rB5EX@rI=zHobJnjkDfA52J{u zg#Ogsd5=BW)-mbsyFWPYgTEh)y(V7?{m5Gzp1pj>^eeuaIQ5~Q{V4TcsMLOjUo^dO z=<|&?ZaV(b8`e$Vd@uC*2BGh~{Pyi%7oUE|byrmQAkPu3^-r(+dke0MMg9HRe)vT*QEHc5|{%$vy?2A&<{FC3|)khW)cKUc@}u zDf0#&Qhh6Cp)iqv`?6Zwmwv+`;!dt`2f~cx&c||~x7N3Z z8~7oz;roZHpZ&=6@H zOy*iz+ZWbhJ!!APkfNHaD_z)`i?PRE1!FAMoaXuk7^&`65RwuO;OfnAaPLDwYFg$F zwxmq~AuI@YZp&V!#)ze!U#Sf)gm!#cfGMWIqymc}SZCO)5TtB$6>G3!l@{D?cNceb zHZ-*&NrP$NVnUPvaY;){V-tG_d)@XrP4AwEAi|0?cMP_XGYW|IRxT9VtK3Lhkd#4H zN_b|cWv>!oYJj#z-(WdIb4(|2&kM+;iC>Qo!f4hHzJyJ0_8X`I3)!W{M0bZS^LEs= zH6^Z93!U?87BzKr)inn?I=hgDK+bsduou-kJ?}+W5NaHBeP1|Rd)JzzteWgVR%A|F zU=l!6TY$gE2gU?05CZ5V=#LKlF#)cV0@mJo3}lTRCxM=Mdf;RUdGJ9^_{KuY8T*X| zHSU|s-`MeXsxVyRybFe~*lARj@nofb8}}UMP=@gfd5c)8wZ&k5Ya)ItE#F{%s}tDs zc!yc54VG&0ixblPRu<+mmPOSLu|%x@KA286DuR*Av<)+50F zAU-w&+aj)84Cc3vz+A`2LOa@Eerq0UGtUo6t@)7~%!SP*Sbi4Cc4i0@LvRU@*Tm4D%7nmufJ-b%;Yd+@WPVwDAsYC9n;M zW05U1)zWnBPjrhcW*UTBgBJ zmcSTFs&$3I{MMtuG`#;ZnBO`)-R3*WV18?iLp#->6+5&NhxQb(KOv4`m^4)^6nGUqcJDB5oy8RMuVkVOAO|>wm7tH4((pd zW>vz9q*@Oc%x}Gn{VoR!?Nx*MtxteW7TV_q^IL~u8_6L;JJMjVL%{NdR$?%}^(|mL zWhd3T%wT@&PGAK>yW3!XYaOsdg|^;ce(M8Zg+lw-V16qDGv$W~?I45st>c050`XL9 zjKTcYG+>7djr#?O`K<-})i2pwND7Fr*LI5kgyUFu(O4 zuqi_O&|rQm73)Ap3N6iGerpu4sX{y6V1BCv*ik|&Gnn7H5Lk)O8Vu&Qt^^hkT93i} z)(?P{3hh3F`K>j;juzTFgZZsZz@`apv%&nuri_DZ7{#}EU+;`TWc`C^)|4O(B3nc-|`)e*>9l@HyFwi zSh>)~7|d@~13Ou0GYy8e0$7F6+6?Bmo;((-3PSsx!Ti`Ni+dZagAST{+np0W+H&97 zzq(@IGw*JiR)fj-y*v?7k4ikHtznM!*{7cr>!*7G{d6zUCw=&8`q+k(j%_&M=|uhgshS67U3ZM$&BD;?`=l@K}%bkI>o+SuCFf`IU4IC{|ha_wlPFK+E>ZV1e)TNDYj zM>@OOTM%8HFa)^99x%&z%#4JC3sA8~xfAq`CVm+nK!6Mm?&a7IXD2BD7u@Wt8IH0r znE#dKT#3){n_9a%c9(yVA>_e=T`JPp^SW4%FY_@e>z%37@{y@p>>+3m$V>sFXljwg zmB6tbC!suAB7tKYKx>FB37j=4kR3SgxPbne7?4G2UZg3?YxIw&nNph?pcpMq{uVcN z&V#bGsHz~?1qj`xbpK1sneq(o;c2po%4=`S<$t4{{Qq+OpJ{*oUy$oLSm(qyJWVZZ z1EKVoY^z@oz&v=MwJ{)v7k8L85SuX@&W6F<8h14;g4;yR*2x751nD z#{$zg=fN>$6=6rn!V%96fri#d2b)}J(PUbWe4X>^&?Iv2WNq)Z<=fJGLOa$5w^KO1 z!5zK6v{loG5GhGcTU9V5Z^I>Ny`dew8I8S#LmGR6|Jk}fe@;)fe~V+c-ybh@7tlhr+ zg`}R^?Y%)?@B8OJlWeVb9+8KyC$zISxU&~-0v$_ z1a~z2kkp>gD=UHzSN4Wp5!tK_?jm(X=n=?RNzVm$C9McOEY4}Gw!_Jw8}dHAY=7GY z1^4OJ;kF}xrL78n+7n!FGsJjZm-opfZm-*8ylzihRlB{Xb^{7EFSvf$gx=8bywHYA zvp-8qXAj@{EG;9r8p&cZ?NsAJ4qq3vIg0*IT=}r*`Akl-}T`p5Vsb(8iw78!Kubsj_{3@k&o{OK)&XUhs{sOe7NScwrqLn-7&Rq46WVLQ@dsPvMtu7BR@?$F}UT^v~z;# zpQW7}+V*MMtaYEJo%^&Tt~a;8Q0r^jV;ipgQ`fP*sIVo;(@{5jhrnG8K-y#Lu6(|0-?hP=C~s@) zFdz*08q{2bJltgt)+7Astjl&VzAB=wU^)+D*oDamd{^(jBG0_w@MXy>leSK9VwL!( zC5x*V4EO>&jDdt3<7>#+)l7xY$zL>n+GXP9zt7S zcLvno^oQcLZNBJFrc=Vb(}(xeZj&Mw z6itNDpY67gO%Xuw8Fqb3NBbjwP|n+&0*Was$-we8;M}31*Y4~s$du$m57=f*8_`oT zLNta=LgmPw=_56AwvrC(^klYx4sT&HTRn%_XJ?k`zBV7zd(1c@SX+o`DV7j(<6QzlvTmZhe^F3Zg<%gvgS%{@VGEXu6hLjI z+|kJz(KF31cW{pEsdUPHCwm+P!^z5WM@*R_9NHTy$@CFDl_P8=0rSY7f{~y@mh%IU zrmdckA`!*a=oUsC$wejzNpa4pF!_idq$hmR$Pa2LuJ%dg&sr;uBqw?uI#N{*;D&4lCe)O zx|;~vQD4xKSA-rk!qYzIo8O5E*b=l{^mOQx%Eg?(Y1xzI0d(_%~uN@+P=0x?KaI}dQTy$Ka5~z&-8Q(5s}l} z0N>tIh}Lww*1<6_oT2Sn@wS_KJ0=81&{$j1I6`Mp(|u!}5l^Vaupx%d>M-2pARc0@ zqTL*@zAoPeQ-(GjqsCn{)EpJyO6EnkXW!~tRkV3T}9VVP=o^%RP2 zgNb4$XhG3y$@!VadEpliN0OOi_ruAEg_O?UgYN7h&3K-Y8Q>^2For*U_R;<>7mTA@CH@}+5 zv@Qhp3&9pR*u@UUQy|s#PGG+jz8^W*qYn10gM9#OBHk413;caleDEwt#f}8_YoYP{ zN5y6VdqimMz|IuEF9Q3P(B1=fy3qdSU|bSW*D$bg;(8M>jpIHCdl}e&ODLZJ`@LWj zFs}HWV3oiq!%VBip?$}pZ2*QvYvki)U=Io(zklHRc#8EoFqP?W>=xj9cBXYauuj1y z0()Ap#lW5s>?+6gF30s1$8|Dx6>udr(`s_C<9xbeonoB^Ok*np##QG`s~VWbHV>G_ z_OL^H+M&ILy#!t2<5LIw4wizszMCRD2sGrMf~MiE2KJ=*sKj#p?Sd_LuwGzy3hf>T zTMz7Yp?wVORl$-VJf-oAhTDX8EU;Sys|9wQV7CH$O|V}A<3KjkS`F-a!PWs&A6tN3 zE3^uXrquO32b=3)iyZ7J>=DqMV_^Fc8(9p71@_it`BuO{O?z;h+O#L=Do*p!FWGE2 zB)(_)^Nr|F$K$5B9$lRDxG|2$SNeJk^aj^NIbmi^TGt!6!N6Axd{CgBlxx_a_6Zc~ zZfXO>W-u(ETC^0I)-k~NZBz=Ohab&_m`0W4opLad7o~2S7@n& zyOys`k}0p@TfkzS8QisO6l^=1XeIQf=hgbUFjcn;eF-IP9kO*Tdv@3!VEsTOG6vY) zf}I8IUco5W&+%sAwV!D~NJo{EhbPbSH{Vb2zJ&Jz&nfS=pDA!l!rl&jl3X9VMh_jx z&8@O>1H^y0Y?Fz4|qD@1%QkL z3sl|YtplVi<^WP-e-rVr`vY?3}8P5EfXu`xb;LZ%E_x+*MOFeS9)83)UD&J=&dwA z0GzG!@aCv26aZWbQuNS4V&)dk);SDu4?(jT^+3#hTS=mS@ z>%v=jgPyv;JRXOa>!>f-8MWMX!O2H%u7iroQ#AHN@#&KdmFI0Uyio#si|{F~UV>5# zMd!*nB&zj+sajOm+!YZP>Rlc}%mU}&jx%Lum`XJ5pZ6#jzf%q7m;Q_LZFKlh8DiR*X*=UKGWWql zCQOHIoM}G40xboHySR#ns0kTtN{UC!tNu9UC3$~a?w z@_ceEf5vC`qh)>qh8s1*dQ4KoGFOZSWU0{NRjx+3MzuyO7mXKbRMsZE<2}ksKjeX- zvR3Egk330w+FWj~!rho->JcsK+t2{fN7WlSN`8VJBp~Bjf=(~fbCRKlpa_h=9Iym#l9=32iy-J@Xa~>ANRaI3~Q5+ngyyl@`MP9tmkL?*Nr+zfxs(RUWG=Pjh z8xq8Sr^$9pFb#A{kSe&$ksL9V95HMmHm=x0Y%o99AC2TV#o@!G2bGlgaNw9nQc?Ou zTwbew0)n9!nFl^zQCpWqg9S3KsXW_W z_}n6H#PGS1lb^dVA%rcEraQBLrewcJxt?x(0s|Um6=9&Xy z1}0u^`V{f9hs83c<}blzopz6lzn9{7f_l%ictv|6M9B1=1W4~E1JWR#0!YzvFr}g; zrlKY0x7HiiR1vb$jP{OO4V}g0%aCz@g1$EPpi@Hw@N7JxQZS_3k5^}#;NTT1{V>sx zhjrICB~+Kt+*O@%QE2X}o(17Beh9RirU3RKJWjts#7Vxev zlm3S5aIr^);d;5@*qj0&*xt@VYNssJ%; zIR=-~HXF=uZFgup92z@U%E!)?`n6jHd+&v-r$f}Y1-`kM^<4h&L_HqXzj$4lqv2CK zHSvmlDqKmoA8+kk2!{!tt_=MQ!&`)RP8R;ilVl%plbdT}18kmqk2fXms-XcBDgonT zcLvgO#xswa;^6$176&mc4q|@ZK_jzUsl0tgu>Zl9;VMMoHDd0TA&GM+@+9dgnGlkm zmN~GN;VxJpsTBLUT82eS@J)<1x~zPQmTJ2|?G8v>`iJT8if_CT-{X$>h^hF9Vbec+ zDUI!b(qgTDk}>|3rcwPLvHm!-$~=Pm^E-MR@yreV#fc^rXb|^5u1DTKNd93Tx7x&<2EP3;??R(xTfQ^AJ%I3 z=$|twQ#59gT@^H9c!`DlqlCgbQDa<>L{3)pEqh*bWN3eNQwESN2z?T zz*YHZyp@l}Tlwr6)i@*F{oqk29}fVQB<(OxSaVH2vU`xA=R|8Bl}6v*{(QKf<|zgG z8D`!eL`%W$j$XQV{ZXwvl=Nu4_QSZ?bHaa=qCVM>G~>@P66Xx9)*)hAhlpt%QW{D} zW^$wUc`pUhfq>5HMx7%VD~nErrv1|XyT!AB8h;$l1-i)RinebuibHNqX2#X8c#PaH0*io|)D zx1x%~v*J*F<;b{!HC>ysVp?~0;2w2kKul#oO!Dh=nRW93HXh`ylLb~?9>q4Kk|B97 zCEU!GEIIX#?1~Yq53gOa-rntHaPxL^=!d=Av+xe-+YGhhBzk^vGilNQJGMWw+i-gp z@li;o6(7m8N84>wALn8GY?|=jnS+=NEn=GT0hz7>KuYupN20`3qQrC#LTPIZpQBaF zm-(zq{2V=me0jc0M$CHzHF+Mm^p8FGka@BaZsb^zd;

    $Wm$?Af{e`6TQCk9y}m@n>leIF!xgETOS9%$&Dy&jXFMiy7j> z+LZ!G-cRr@$9t-$aOsCUGx6SYH2%nwWS82>yQx(6jL2t)qYmLdV*XA?5c->^|LRmJ z59#f|^?Z(9T4^XO%m6r+ZRpc7L6w9>q_kC-oC?YA)}b3PBY-_2=vVvV n? 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

    fhHmdkTN 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

    (iWJb?87{rTL(?#fEec>JDA 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�hjK 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

    (w^3#^U6tC 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%0A32X8t^i}-vM3@ zcoyIlfad^S3HTSlKLL^=ZUoF83E2*~IpD2;I|1GXxY+y-0saNQHy#C62HX@7V-(*5 z@Gii;0Pg{u3V1KzY`_Nq>i{1FYyx};a0TGs0Z#&a81Nr}j{trE_$c5o(AVRD8v|m@ zv9dT>A_&-IiMdv^^hk@|>A@D`~ega7RehNtZ;*f{n_j5qv z_X|Mc_e;QJ{6Z%b2M_6J_Z57vNTOZlVZA5d-!lW@S0)|IdR)yBtC&Gk{TY(wgtguz z%S9h)pCqd*PD8}_PCBN}ZvWUf(lPN-Wg@=@-q>FpB#Cbh_&wkvz#jlt0OHU^{1`wS zmJmH3hauv`4Guf>!}mpq&m=2e!1snEd@~R0KL`KT41{k{TA(<@8bjUD05y)hKuf3% zOYHwCO>?1_QDC6$$ufieN|qTod?C0V1xT9C0z4hi2lxlTY{0Vsu~9DTYHWn}!|{U{ zKk^QyIr&RoGyI6yYPW*#S~Ii&b5N8-C9LdByJDax1Tp`}iUA7-zq`Do1;Y@_9G~|; zDRrvo^P3KXZj?l4#M?yR<`%$b2ck1?r-ZoN^2*{K(gmzd8`BM-5Ub6vO~vL`n->-M zWu%}Y?x^gkG;XgMh`*@1azcxW%KRVv%0(fK&CS7{Sg<9KSJ^3ws(12ay$6gJM{(BafXz>5H}ITnWw zrm*o5hi;{?`4PuFD!(E3)fD{xJ=(qx;GY2DMmf%L%>zuH1MWmSfHM!jP~LD1zreo_ z@h{nK#5_!M3;sPNoMzfkXbD0myF51Z1HwK*fm)*j(b5 z0PYKTE#N#r*gRArAn~;yVDcC|IZE#wTfX^fcfNv`uv1g^SGZ-2OJ>2i(G!?jGk9UO z$X!s9uv*u`V5ugJVEqL*dKH`koImynqoeKyd~qNeG4+Zdnd=mhP^uGxgllXoNXYMw zzL1hmC^xt+9Swwrdt-s7@G3D6(x8xR9wbRv17k?m^Hxywc89oD4@{L1+P5Khx(*6;Lq`y2w{K3Ru4f-KouK}C^ zcpYFVAlAQ-kUdSx2y{pI<0`;pJ(_u#rU?ID=6~cbjSQtGH`S%d zv9c6@Mt)KPI($Lxm&xyhuxf6n;mI+Uxv4nR;IH?Kr_Q2>Ra^wFqPPQ>P!7~DalkHOA^wo)?C^s%g*Xal@;($zBb*;Nn~B&zthccf zzNZweqt;aGD3zWR)(k3)1!e#yPS*+Kzr+=JkL%83O?(yP z8u3>P$O5sqBQJ^713re|4S;I^mjJS|rGQx|XBpr)zykqy2V4#~5Aa|>*f-T7fUsvO z>=DH~0h<6hM$Lf9^6oLjXIjU;g?dYq^a19f%y?AWwN^Uv-Y zQdc}dV)TF5KaSOA__^A|&rw=V768^E4yujVuL}Y1!SDHi*aKD=$M|;0UjoQ6Dg#^s z2-zF&16%<38^HYm&jExjTVdcg+h_%g{f?7yZ-uf9*5?S*e;fG-pw zAb)9S$K55N9Aex4S*$0Nem@4@3Ui8PN0_Hn`YFJvVb4c_jnN*QV+-({N?7zBt_Db6 zJ(1vwKqS=G9#i)4O7bFs%Zq^*3EVhvJKBc!#a98I49K=(jS#;U@KiwBT7CxzU0a@w+Y1o(i}+N)KLC~i{t@t8z_S5w z1w0Qh8~wfzaCg8<0J*NX6mTZsWq`?iJpt{Rh`!*n{3YvOmmxMCUz>Aam9VH*Z5X~D zQi;ylFwP$flIB?3zp?1&V@0};I5p(>@hd2B4nY(YxT_Z)BxdZN#ZZC=Nw}5=skt~j z*l*6IZe#T%y~||y)zjQzE{du=QmBVW3+BnDN%mbRc?+z*}rGMyzEdal7E@$D}l6rM8=`ke^zU!FttRMayQ7)+9~-d3Y4=g{#g!A*86b2tKXg}^K62DZ2$8`_>cT$9@nmLG}hT? zj>l@NE~`!PHz-A24&qTJ%yyN)b`gi{%VZN@0=dq%mIF2cE&yb^D^tk(e8f}xcjJOO z9Dh@f>A=64Ni@zpOtUxsJ)FQry}z!qx+2h=7dX7pF*&g86o00}B=6y$e#0ApCfl_>|tS+gkuCJ{3msR`KZfbPS*4v}& z^4C$-*xgow!+W8&a@-}T?`>@jt&%jij&;&BXv-{?i>@>~qnxE%IBANwgp0bq6I1Nc zwkjHHDJX!&HW&#t2RdhC#I$hehG8xmZ_SN@AW5KSZG`8aSfE5Q<^SgPtNRp?hZzFR7|ynEqz{#_LOCfo%^-Hdp!)~Zl452|FdbAK<)KxVz^1I19>OM@er}FeRPmo9wU+WFq9QP1(w*)&~ZCr>pl9Waag${&jxvoLMOs84#~{4nY^|o)ye1H+F7pR)VXQ0wx#zE|sS1=;7Zq2PDUKx*ZMt4C8t=e%%$CRiM6Ovv~SKf-*`C^06m^UOrSE(XUW z76cW@S#4Ys>5k3q?T!k==Hk=jsSe+BKBVOSaJah)a4W=!t*ER!773va4i?kSNXfhU z$rBW8#Qe@kojZ{oC@v|%CBY(pCEk3gqI+=O4pbCL{60*+7nK&(`oXX%65uK#3&6F) zg;f~kL8CoXkad1id39Mx^3V2Mx^Q2noyB(}xW@ z4;oC7%hruho(E{=x`wJW+zSyRoSHic$nPi(wl?;5#umdy6OPp55gC{ON9RNx;a6N# zT3l5FR904(!J?-t7#1J?W9EjrCEgaub@D=vY)MTOE^5}5l|t9jal=epMO|50HBO%B z*o{nVaaBW^2;*ZNf$46K$91@nGar@e zy$2IjHTC`kD%b(mwk>j@LxK7QmF0e%dr2>!q)mZ(@J4r=9C2!%>xpV=j0WZCcy#Vc z+0%&WNs_0bFg1oFHo7oZ{^y9ftxZ$Lpece!)0o{6FFdY^sF_w=k&+m9d6^=>M}uIK z(>=*Tb|T#5-UFRapxx7XFWz_ZV5zdIs;r`j4Jj(Eq)usD2b+RHuSV4*Px;B&yj5)D zsbWc84b}lmFjb3I%Te%XwH@Wyrt6J>%3E51YuMy0TeujZqq3{9%}KHyl2FYb5kK$T za|`u|E-9<5Sm2l3|1Bl;x^kD)2kOfXXh8oei>lOkPgfGn^LB#jxvm3c?PrI|)Uv(v z@u?@P&;S_-^KE~p{b|{HVQFn+C{o$oJeT4c|3D!rnR`c+wFu0;vFa%9#G5UV;_xbe z7#D>byPJc;mB&nBUn}eCFhSPUm6iB$_Cez>wH)sZQ=|2M*S&2ujNUj94U3FNA>5TRJ1JxKwY-)_k87b+C z;q{=prm{W}2PFn^3uIEY>7chDZn4BsXfp3`i6a+QE&>yYFl9Vc5~QuIsamGv*(Szs zEb$H13#)6ER6D6h>XOTl#g7L`M6qG&Q4%jvY(x;vN5R$5s%jb_xhX3+Hp5kYS%k>K@HG%N@70%R@fG$atwSLjA*`a;7>8C)hm|yFlpcR$q z4l&0t=BTQ{nO;yD5XJP2-$+WTt+nynm~u99$|=`g*A-PPg2X2xLfu$Ts%DcQgT7VM zL@y2{jkx*mQNyqfg&3*}wgw|XNZt~j&rdC}Z7at0Z$;xOwqiHaij7kxC~5DdX9m&- zy9Y{O_o~W@xXiV(IJx~)bBfcchqKdky0oae0#8l>_vJOId%_8DWF=`pgm_D^8VXMNcAFs39c)AqF;Ns; zbqBCq2~goGC}?kt26R)@ekdf}>Qb7VP{s62f^+`S80QnS;N)`6T|lZ@0-a&ptfp?3 zJ|$is3w86r%Y=-{4(ko!lty)9wM=E{i{nZTD`}{mOiN2(>a;j*(L~G!TSV(gn<%&n z*U^RU(k2N7n`g|JlesQgbmHh32{>&*UE!AA&T!^5dZj9c(zNAp7diwa9FER$DkNhk z)4fZfn+>V4-I>x2RWPD>~(k3aY zA@1>Yo22ym4kmPN69glHo=A9=m^Zb3id{~Zl{&mjuDF-v8J=2$t;M}+%aGE$Hle{j zvF7jhke|a^7C|IGw9tr9m)zK^fBk76c!SJ$*P8UknW3`1EaK)uVws)l{W_@KZZuUVp0IPK{*CmcDY7Fm zESeoCU*3k&?pY$27A>g=_?Oj|(S}$IRbY2-GZJ-p5yQEIg?aX(5`}5KaqIr=rMVK5 zfv2miqu(=oI9NBJZ05F9FBb1&X|9i9*C3s)LJMA>9A&72N>@@-yG&+EE`TSwm-Do1 zbGZz#sIe{7j1j}0NRlN?5N}@n6VtL5Las@}6jR$6iv=UyX2+ni6dU#)-A0BY+jC$Ngx6Zw+G4v_I{ot}3C2upjZlk^q+HTzqInzos_^jUlMFO~i7| zWXUpB)F5K6pA|6`6C^jpQFBsIM!%O6Q+1h-CyJRlncb3WN@z;7!4H($t1l%_^=<)g z`ft>~6y50eydxGW?vYEp@F-N0sbwxHYh|8$?saz=NwsjyM{iS&o8C)Lt=f34S&0UE zC4tvA3af0Owx|w1@ZgP4b}a_ziO~BUXHS?U9}ey)Eo z(A}~=3ByL~^m44bI&ZVMS2O@p-1EXfjGU}yQp{(B9t8!>;Z7dH5ZT34!`dAt{*| zUuR!ojM2Wlh0)ijv*gN6nWPKLMCdV5oTkvsvR}$%z@W6~EU{JlYhl)^swyrjSs19T ztE{Q3^e=;QQ@02k5y^`{Z;NnkDTs>>sb>Ti9mvi|DRzw0sa3=x8#7#`Y)oafY+-{Q zM&-N*Wf8X{Y67s}EfO;nV@4{icIsF=C7TgUVjr^?28onlVeTwnhpU#`y6L0VUsqIF zEt}%yWkvpmx-!vl>#>ce+c8QtK&gyrRbVR~ja|@1wJ^nEZYB1ZflQ`` zVeh891g_N<1m*ZVt$X|s=cZ2gQWHya8)N57Y%!RY3Y|HAW`&SpgaO(LskIYIJAY3O zri)VQYc1v3y?*bx05Cnzmgw_e#W+6})LYC}Vy7PQrf|4Z54V|&7nq(TYoD%`&{9+1 z)7T6nS7mo=I348{4zi?R8biTg8=f@P7~z?OWz$bX4iWJE$GDTMPnBGIQLd@3S|*!1%;Z@)rpyF$xpBWN8E2Z>JhMUC zj5O8HLiBX$g2DRJHDL>6lA$QsxD~wg1a01wk#r9An zTo>$UZA;?sU`F)TE^8Ew`VpV{Kun zbscXmLx+@zOR!TjT-AngEvy05f_a>$|D64T)Ot>;(jYiE;ba`7gi+m!`rKr@x+M(L z`80%)hoRCoIkI`iIzwUDXT|&FNBay~FLA+5DNWiZANqp-l%l*)8H&l$?FhD+o zaPAP3Fj8YRxiUur*x6u#>d-1%ZIA~5+Hw7HRL&kax;I=c!Fk3i*|mLhJbAy?k7H#u zOL&S}HvMeM5lC6)N{PpnusMl6A}1yH^H~On0wM-h3D^pB8JuPKWn+G+tfm1WfRhn8 zy;V~!8;$%pk{|U(AjykSqZkFh?l|RzEjek9tt5+|u;0ug^cS0H6MnH>&^w>@laHTl zo4ud1`N=j~f8v=Jwqms8s;N6LAlt4sdQ(QTaXLDQ{E~*%+LaUP2~|>#XzDW#HoX~s zN^&h1L}aBY+!=Px!%Pm{3nvw7mO$8)MIzw{EXuq|M@@1KF1>mLeQo`sKv4tI*VLCf zySk8KMp1J%L}9ApHXQSNM7PZ^>MXx{Ru}wQ4@%)-J04!B7G;&mJnFkEnVh1My&j}r;89o$E*OFdT;F3oH_Znv%C%U|ufqv)8 zD90F&>OB+QEN`_*r0GZ|OV9}h;ABN2O|1#{%V;=Z5ZiK<-LZ^k7b&>YGgF$1F-dU) zNayp8S-%`9ES-ruy?L#FvUD>#ZC@>WC8==xH^72a4w)#z&mQF9HZYTVxZ0bvstm^u zNwG}l;a+dLI_FSZpB$!jX)-lf{**KnmuY1zooU9Ef%-~qI2z*dYs|eVa6_dhBjLIx z;_~i(^Y9=RtA4A`rbF|u(1f&S$2Zb!Y~TWL*9SJO?pUTZIW;{OrjvNp;c)jVn$sGao|;QtSqy)sTRiaqI@W=B%LNCO zAWzecgw?97DJjh^>jb^W%5(f$o1=X|qd3(J*{_{oXRC*K_@!zQ%xVy_F&wz*<9N{C z)*fn&`Q=p&$1ayVi$L28Dpx$Y+06D=}NAqlnzy${xkWQOv#tF z#~jwz*{p(+df-#G3>3iW^$k?!<0*0c?K!^#+t1xCIE7}8oSW@ZYT=jQ9;KCZSYtLB zi+Qvo)Uz@wmRhE;+asDV?WC<-By~>A+iqa~ZDQ9dR z#$v73^zEt@dfrMdng?S;E{3Hhqozj1p7mJcc~U(++=Y;%Jg!NtKf`z8W<;mn{x>X5 z6FAE?G{@z=gL<@|=e~J>h)L!fYr89ncn{%OD}Imn|E}GYaCoUwSR5Jq$lTe^lx4A~ z^wkS@E6^_-4ruI@%VX?ZYKsn!Afvd14CTU)tx_9ljo;PkmSD4-Ye+9fO=*V5oT5hb zD=LhGea`2sexKX%f{!&+rsf?_P2d?8_IsFK7I5&tLhnRFqzg=~q{@ zIRu?2)Ea7*({GY0w_hq;Nydr33e++H8;B9Q9;X1Yrmy#>6WGqcP3>0``Yvln_=ZYd zSrD^eu8Z;NnH~{$QBmp(vWBZO+>o`5q~`Z)G0mmos7^NBh`^2FD&8*{ z?j*IqHxGApnCAZeG~3v6Xm2zIYbIVEbL!iyUqKWOI+0btlIP0AhFprp0ykS_l>6ge z5U-1-5av+FRV6Pi(mKg^)o67^gufj-c;&rt6Cxt^5i(4FHf{@tTbkgKJ2C(FE30fp z2&aOZ^_AOV9(cE0Z{@M&dTy3$MU^R7V+ye!47ajEt8#Cavhhxx5!`8&I<3lV`jDh% zIrCIMVL>U#mZX?oS{p;1Y>I8H?T$;HG&Kr#>>%c91P)NSku6oInN)3xT}P^x zL~tJ2*@$~(q&228l;oZcn?hLj_sNQ_Ql^R0%KBQ|6~hizd1XbQzNARol;vVR?a|oN zDyyr)-I3C?r_%hzHA_>=T=J7k<^r9Wu01E_bK>#^bU^j*W>c_DP|eRN7{9qU;(Sg) zaKY}DWGyF&&$zx7dT}cQR*o2irq5!y(k`J>^O36xhlMPr3~>#Bse}x)d(n2N7Z+Fh z>t&?U>pF>9A))S&g~|CaQ)4%+qdUB^n|2f&84Oppi0;I%=DjbGe)<+EWo2@MAfhNIGpe?M^lMp;m)BA|f8b73!!JWg zd#JM|GiMkY9bmlkojGs7!%4hl?h;s^LF2Uoi;FTCwgT+{eokX#YfKO0Lf)&V$ zq~7@{X)8rmL-qEi)|Ts*55&olV2z%&eup+Y;8r!fk_}>#Pmh%3S)Q6FtMgbRI*fax zB_P>mtgsV4D~yyKfJ76!!8s}`XZ3-&uE_(cIHyow0yA7zP7J~YWl*-l@jzD2*2|Ej zt_Is=wRH{EIM%m4A}80t&y_h%#GG(UQP+Sw(c9qLe#pQR7CMvpFa{r+hwq=*2~HT%1xG> zz6zu|e1&V7Svmhe{W!~ngJLp?V)HC3rwa9P;UitG-2+}iODk|W6aFz6$rkJaAGWru zrZbZfz0EH0f*Zu`l~A*G65-y+axe3xkpBb!ma)iyeU}^8CbDw2$EL*i0DDy$jLNbo z92t)@%CNQ<_d(JI@~2~)4d_O9G5uHiCD-dfaK>D-=3tLCD`!)9CeuhlMk3%9Y=2`9 znipBi%FF8|5$rZ*c(Khn1&QuN>3-}Ul)$Lg)Y#mS=kAziYXhz&vT}Aq7XpD5%@O*d zfvc)$EC3db*c+VshLAqEFi9U^C=`rT<7tXY*=H=P;(ju)y%mZZ3$%K!mCC@(fUg(l zAU;qi#8V4_yoTI;Q|@vUJu( zdWG^=TDBD8CoAXKMHxz8r(3u1(wmjjxwkIT%_Ij3nw| zfBvx!8JwE-K*rZoWt0P+uAZ<-&krJ@Q!*#+zg><=Lpz7mvso@8d;3Xu*M7VRx*rz~ zB#!e%J`iuMJBu5Hdx5 zLLCUFmW>W#^(IpG(QxePEymSA@5IZQ@?`iephJRctm^gr=|k*X%=xvr?K=@+x^2tk z;Z6Heqo(kyv2aZR-xKgIRwgscJ-LoYibe2nvK!K@0sR>l5r`@%NQ7mRTlBB5@{+q? zb^!$ypJK`{t*o=N886ntGXmXB;1XL_&f_F-Kcrbg7ZQT}1-fQNb!XainO8pcqE_;L zK9H(3Gf%W2`q6@)860uPI8ihGaRw+$PLfgGAdZ$y1!n272O1{~Z{V+d9Qy7Otz|!a zvwWn-;us{@17t+%9Ecw>s~=i-nlRZ#41>y0DE-(C9cyrUCi*?viUV@e4eGZufp%$o z$%2|n_{~9gw?*`cAf8&P(r}7V-B1h1RW%K@GRQZR5a8Yvju^!8qQef@0?EqxwZvSi{kk#8;i6s@C==>}wFoKLH8LTzPX-oF@?){|SOEBY))25&jqfT@+@+lCr8m zc|&!H#5IjK>ymtsZS_J?wt0yIhi1E=XGO@4QptjW7-{-ULG_js(QJw($@MijAY;>@ zCX=_`2kXkx0h6oR7ZG<*7Gzje1Oi-e=xxq`Y>EaWQ4$r^;zXVfs=&nd0-B}HiGxr`tiq>-lSBD+AqMZ?Yd2&rlQG7`V# zQWi%;1a()q=P;m-z4qY_UdCR}nl3Zx`{<2lrHEBfIiI}C%E2gQjuvv__N{mJ zAt1Ww8ggo0zIG-FKYlHEO{uZD86q_hGM@vn#vX{RVGENi=$gJjTRpPljp~vE9i>Mso|{ z1~e<@pYv_0CE+gmv5La`bq~BW8n2%Nn)l5hm@7=!VYco<`ynp3aB^ND-1cYXoR9fM zccrqc3+`@UX@z?%lQEq^R_O61i%UVFF-p+xb#101Q~U3hF*|=d(-bL?3l#Nh6!&(W z)53M2UE*0bQ%St`heN$d5oyVnrn9X*gN@?k9+232Kik$cO?yf;{8FeQ$aeUUn=Smt z7J8cN$U`$)$(+W8$XKX_`g2M&%Pd5nW|Brm%s4WGXH5Exq7Hb=Y+J^F^d@Gt-7EtS zy#2)YYp{FUVyG)24YZddJhcXHcG!Ku>Yd_Z}It!0vcN8lK4 zp?$BxR+8i#L3r#oE89B5a5AGei-aj|7?MCIqU1V=-dD8`p|+*2(K74y7E3Icb3Pp`1Y^+Vl{M zoJ40~S33u@w%v)Ns1TQ-0WWiG*Nah2=KV7DX~LWT$OJstyQgj>Eo}rkX{)+Ud1N zC*eeY@EnuGO!0#s0wIXur6zl8W2f=pjkDreIm?_bWR`t~R)s#kaRkAj@;EY6_pqM` zE=4oG7-EscsAk_jlyXIpMdP|^GnSkN$-S=RU|wo(^f)8^(^H(=$qae>nyt)d@DHr- zLh+wCeKy*Y*p?D}rO`F8X60Op6R}V=&o%_7i01|tHQ}X%7(4~wA+W5Rsk>SPnPP=; ztjZ=$6HUW-cqev6c1u$dOlIRXf78xXXS<)o-wvPIBLgz^ZEB^Hh%6kI!7cu*oE!1% zpj4z)StDvPix=5qx_3WMMxa=Wr~$H$N1gN2wA<;S@c9$iBa@ba_mhrd$<`ZafI{L8 zD?kE%xK-gc=w67eaTGS3ZE0Q+vm#0~#L2D!A`VW>q{o_7Y4Z6EvCd7~(vED>dPr6Y zW4)^ci&{g*T86UAc2-Q#w}_`RJX*3~!aRn9E)~j>X}XmoUMkVNNi)Xr7Srx}9P%(? zn1*L`L?c^|qj>+PivNO@V1u7orSIDpTg(j1N=C}zEKu<(Xbn}U_82=ET8XT=CDfg~ zax~+qT~o;qkCs!26LgT`j)Y1tI$g-GMV8|nF)^4d0}0z=l=z#Wm1x@~^6o3EWcFXo zQqUZV3Dd>P7)nSz;m3qLaT9{WZ^`qy^8s4(fhhPryHucVf+29YNoq?qHx7cxQ8tyM zah61rgqYKD9%}gtn-fx3ATg2AvcM-gvT{D~pv5ZfGy_bwQ+!jXB?QANucJ10I?|rT z53$%^VksoSNXgZir3+QHIaVvM=peo{4pZSG@s%OV?F?&CPLpA##o7Qf-9E@(Zu)sdOdoHCymwl@reqPhYwesK>V}dZYN5&}H(-SlKDJ*w zfBOLZK0%-{Iz9mWCgclKgU>e#rt3IlF?>gO0FGxrVMxPK>Z>-bSLFE}p z`cT!|e27IlO~Wzlten?uf9*ogT!~J}E8L3U7VJ(|cr=@-m}T~xhq*!?G2L=Gyx(g} zoHoJGI&+~VDTkZ_Ju#jPb*~eQ5ziq`-dM`Y`D~Uc7yR18H^Hp@D#RgmSR!n%k|Yq@ zsi#uTkcTF-MT_I7pk1$Yrk^v?UN#BwCA#e|gZ#LDz#`_H-PQn&EsI@vSTq*^L_61Z{h z;b#)y&vq=m_U)-+FWcB*p>mo7Kzv#$=|@x;C~6%Ywuk*>vdqTGT9_YMhC5XZT}U}p zD^iM_^DnpJ&skIMn`)A%Go$H73&SFgWGC?iOZNddlWCUS(U+&0T(Mr*>F4UTSUTf> zUcTfx$rcj|Qz|!$?w*e=MH%jpak?bzyeK&qbZk68h}K)4;yXxGTttYq_6$paw%CG# zO5B_kScCKIs2hjy%cnnHgyWg)@}IoIcv=EM9P7M(<<@e=SH;g51&) zQ{)qNMBx7=re7t9$dOWE1YP*;c0l2To-XKN@t}0x!dg@v=E=ZPb_$!DrbT9LK=FF2 zvpg!|OP#VzB?(QQt!KgA?a*rDxPuK-1eX!tufsCJ&V=)jZ^1e&BTPQKj3`0&AMMnW zN-Z0NSWsLF{KbxlT>=e3a}dIC)P^mbc@9r^;w=eIWPxZ8-ZFp@vO~5=I;|w40wv=q zjK#lvM9y1H+pS#Wj@+7Lfrbri!v+uGHqL| zUHbDQ&cx}d(nxa|$Fz1I+o`1a&qV8`LJeB|?Uw6QEJ-hwPN56r*p9d2B(SV8q902w z6kR*ZsVTAQl4X$SbrsIYd*?&fV}h6ox%D{FYbt_N78(#L(oJI{t*|n@B9eThWngEL zm9N4g&T6+eZzc+)fsaeY2kp4vrIi?X%TX7l(dB74!4X=Z{6bMs#&{b&xHi)&m+!EO zOW!3g^wW74BDG_q?58KD!AzR56s7YcYXGpKDl^3qm(s8#lC$xeM7S6OA!t(8BZpV8 zWi3}?Ng(B9rTL%B@HrXNX1duc5hMjln_BV2JEA#~c~)emKTRS+_up1UWdBwM8#`pN#xuzKrx`ql1GO%+ACf*_ zWZRH_9jx1!V&u5FG{-C1?BIx&Im=E9BCi5XeR#*(PHfbA&avOU8@eJNw#0X5>ujYF zKD4(^Nz*yE160A!U#+16M{?lm&rk;IEw`OcjG@zR62M9;loQ`qghMU*sOue;00Pya zPSH4bO4A}OM@fpuJMxNjs2AMC{L;h4m;OgcoBLZ-!br5Nm%x7PQ<4*w{*xK&nZ~)!;%T{!@~{ z-pc&JbeJaIk1Y1B9--w*iUUuRIb=!yDU{9deeCeV(z)(ugNzQWhsI6<88*XhdhDgl zKnGrQDzDeuQfacf@W!JY#|%aibL`U<4p@DW+*Z1d@9PxAs~m0K70S^{Gzn8A*9=pDEZ4bLp5nwK7xJkX3qRMV%I;W2 z1QS1V?SmU0u1~y-Q;#zz6wn=*OI@FM`B^mGd9Z`H;uG%@%9`&l-U1g>CN+iRsu4X7 z_KCtUZ?UHczrC9vP3py&S6BIX4w|oPh#K&b_mlT*Z!s39IAg}i>M5Lbb``-JJSB~A z$s?wiH6Tsb$J)lWV12M{5p9vod(h6F&(3{fF_Z8i6Ib4&_ya$F0R~cqy-2b+-^Du@siCll5Cz~I5ZNb&NMUCC) zWJG8?RPRY*pODp8XLdpJ#+G>!SWllCe_Xy^n67_v8kqX@1$%mmFb}O%w#Z54hFGYR z-sZA$_=dTwldJ)&DNF&JWc$SU`Mq}_Gu@(9oJ!w64$ z_J~Te+RI=?(I}2!p{b;8-Jz>+%gR-|({DX)(!kfe1eA7Q`(M;66ymxL*Rfqy_{|8* zS?zs*fb9nd@C=TLBQ1G-QVW+TDaGt$$+Zo zRhXZX>gkG74t2_Mb9LI!1qHQ@(P$ZFCqZK!wk%!c)c49!`*5TRb8pnp9tF>6FYOh> zP*Ktz4mAgjSSPFlZ{ccRerrqLZ0rg(XZr*y}`fXuGBdwV`o(ny!j=^qb&eX>p0ZsH zuW62yb+_Rfg3Mw(Wxd*4x0e|b?%hcuy02bLl!kk8pIdT??5k_=)JJxy3pR(_x_Ovi zl*fNY_C{rqD~cY$0#7acPUq zZ8x&qleToO*DLgKtt!~L0Eh{bnq{VX+^h14mXvtfN2ps3uvLLj6sTc8ZeVz1fjjT)#A1D>BsP=S* zVvgd#R{h=EH?o&uA5z3~UM8!@W1P|UAZ7qC;R1Y58cee^<50RivSgfGu|lGZKgv4~ zIO-N=Hd>`}ynN*qUG`eDHfwB}YG$7+M?So7M+iIa=~elu?-yeWR@!u)cd{m{nCVf7 zonBI0B;$xJgFjN$ywtstLH#y~NZl@+Wf>r}_p&!tzh#2fM>!*He2}L(j@qSZjI9~x zRm|8QS>F)Z=&Ro`S?1TYa|`-uQCDMGu89akLMm` zWZL`3Lsj-y)nP+A5)IadJ44NVqIdiNip+Rj6xVYXqZwafwdaQ-k@7Nr|Etx`MWpnf zv}Jh`bm4?+B2ff+;dl$B9SVr)i~P}O*D{P)XLGoFg~+jMpw;Wkwb})m_1ZznFjj7=*ZKXG6m2rKx%^k;AjQeB zjDqU%B14pM^$eWcg{cL?vGZ z{WLAhLvMHR=n5A)RxKQ>#tBVn0oxqlHJoYrG5Nk0i=EOkc}{|NE%pbi+If=8MeZ8@ zgbB==%j&gFg(?<(e%ERDuhEilWI;=$TATOqR5(=Us1z^w)lS4VN1iQ5@TpL|BSKd! z97sN6CiQ6#E+kksu~a-9aHoncV+U{;E7<=M!V~U2;8hl-i!TlC?(`!Hs?RCC`tie# zU=BkiXgrhU`#-=&PeBg}mjQK!cd{yu`Q*U!og?<|!T~7MkpVIiwA-2Cn zuA)-BjaEkIc65;|R=h`Sw6_tQle?jlN)Ei0mDCIl=?$b@`V%pp0Ezb15cOqnp>5s@ zWz;M;<<|>!E-@UOkm`;F-Z^qY>3=$CTpX;}S8FTrHYMG22npn1%xmix@GTU!_CD0( zl~zt!Yz9Xkvfa3m7y65^1J-Du*YljIFUDxu>;9!>wAkvPSvx=@MWpBHlk%5kSPA~it6f$mI+!?5DI(M z4u;WmQ!fJgSja%Ez`NjunT}SW5OrdSNe4?o-7OiF2IQhA1dsF=`=U@EEpgsKg9s@U zlj0M($)8*km}}k3*;_;aFeN>yD=QZ&t3cHmW#Ei_@!fD0Hb=zqq)^ppV6?L(v;r98 zfKQwW1Y6G~BHcM~+n|T6tJbe7@pE=RdiM6o)$nw)G4pn&1`V zr;2N8s%DFV@O$8uyj))iQ36S7SXvllXN;7K@HKUE!*Ll{k-bj{3RkB*y0)xXNDAbW z`KY-wAWN=k`JyaS2zkdOc`{~R&OV~7Bok~xUC9@n{B*Pn`U-unTF?7%D2)Tcnc6$h zGL*9CO)Mw8zI8OO5buQp(euoFF?mww1h;n;zYX)0wUo9)hG@}Kv259 z6Cs*%=Ps=N>dN+)r9lkH^31CHBf*EJXDKn`?xcgCRFT?)(mm)0yd^ZoW=;=*$Of1% zsed2?MS0##5$w%qV4!x9_I@7^=1%HL#ar`4izjj!0;36uLrX`{vx;3pyI`PkdAnTt=^NW7!-%6X~Pj-&eFpMV_XzweIBQ&BMuF(%CcfX2u^Jx z&Fy^&h86bz5PPu2n4z$E#+x6J(5ks^@}XF_I3We%pn&ML9JIsmdx@xhdH8i3`kz)F zB{mRkfkfGpmjkH~HgKFLyM~;q>St&)(l4RdSGhCb#hUjQCq=f9+Fw<_HprC8PhY`^ zVl@{&nr#$H^2WDNW3h87?uj0PkP-Jp{U_yQ_eAW$wX%E{gvkU*wV@Y-4)^>}r^Hzl zJ4N~qbegI2KtwDB^`(_Vsru(|U8axPDc)@`Y?VNbt-{-T*r372f;W$g=-jp(;*g7{ zc}5QsiF78gMkTy_DINYbz}2$B8#{kIEJj)f7HJ|BPZ|LugX<}lUl_=`GJC4%C!<}O zglHPifC{w#MB$tr`zaBwPNe4?GVZ}vtpnFsRmi-ms8yj-2$amK&{UBKT-GkoNRTG> z;x`prbd`9115NbenfG;aUF~#CSA~+{$c7C3k~}b6_Z&GELw^ADbWE zUdt;XA|mr0!3`JPvhXBv7{8zNGe&K3OGMF&8uTa87W;`vZ|N>{rX6-@i=@5T1E~bl zX9>k}@gpuSh2TXePoDdIy=N+nU9&wi=zJPTRFnP1)AGUBS{?>sNtzhyD9h< z6zMIB-w^2Ycqq5OG{SpfH#rI|rg82(hQt5HcEEC{OpNxPSq&ldCcw!dpbeBZKeFl{~4I z@TjCUMv8$zfGew+^i^XeLo1F6;wPu2{Xq}qc-mCH9Rr;}mZkafGXhCdE{_3-h^J)k z3_v!+;3nGBX4@K3+Zm4Xwi<7)LbpihM>sCZgW&q84ZIT3`JWs=yba1xMH!y0s4NNO zmj=WTkWxRgCWtQWz66b?hEz!8)GjKo7Jal8%%u@{w;USSb7BPx+Hm zCKd+TXiHsvK~Z%nNQ^_nxeDG6goY^EpVV|73F7WRb-24eh$pCU=8hV5JzN6v#4+xp zSy3wO#blso7I70wn%)^Qi!V1}ox@`&r~gN{v}GyFJ%UTIhPU_nM0hIXDJbnJ{y?41)(yeJaSD z6~NL*j48qC`eSu4)YjgF#~(^@znkYoe}l4;%(=20xPRf`mID~jd=zsR&KP8-$Ha*X zPKYG5V}KB$MW_^9)jt3g2(M}3(5^YsG#Qa4K+|BBCDY~hz(<2@^=y%>m8Joz2o;SR zU_3lia*w|32+zrOTu7Z?V8u~Vo3vh_9J`yw7x>f_<1bfAkIsNFsPvaC2#9!Mnk?`s zxT>p`$7>jIJu=Y_?ARA6Ma?576uL3d$!Z$>PN^G#nn7RirtIY5^dff<^@fa9I)yLE z0LLN*52Y9z^^c$uxF#19Hb;mayp6FV)3yL-sb}?4vQbEJ7M2WJVRtUlX@#AlfZf3T zBid5AmYNFbV>W5(7Q#jOUWj|tFk(VAba8XSsHx4ByG+%1!U{$Ao5&equz5glus0}1 zgDj(>B+9fd_E}?oKch&R8mar|VD!johSPaiTTsUCP|Fj8vsnalvWZjL4Pvq(b};SA z;tG64_I%r8i`9aVi+bAGd%J_HAZvJE(Hh!0Xk2pJ6*q?%Kb77P;W&*3)o`UE9LNna zapi2rpJwiWS*(*x<0Z(txTrT4hHB6uS>~g(@~WC5uKwDQXBx|>w;}q zF34b0V%1>@rTvpbU%-o!qLWcy3xvXaa+_>SggF~9MC$llXD!I*yr}Y5dZL^sA_DbQ zHGa`ok4uvP`-gZG!(Rz4iiWYXamvmtGf{Lw0ffAEUnJtL2Q6{@{XB%( z$tZ^&ewX-NP=M`xK2C*g9nlWihr76X*1LSxD7P8A?OwK687W*&jlk@~;N9j@^%Z_! zGny}4;>FNmMZujmIXVBiJzst3pt5;~-U9BgmH5zv3*Ks;`{6;~zPq;LlYTfOy$QtwFoL0|qW>zcz}x&5%ke_Z^lWv}0=)C^QGX4oxP zb&Q_Z@ychfwf|<}Q+v&P3|B8C{^&dJ9kugOe<_*t))yx{TX@>tO5HB;wO>3t?e$I0 zf9*>qA3RT~UnKs?t6wd9aR2#Nwcj}NjAtKT{2}nU5zF7S`>{iJxZ`1U>8GFV z@R!|>tyk)|5`TEs*RdC_{^aiy|9aKs^}Bz4yHaZ;{vRvf-R6r6R!rY{P5Hz#4xEai z7&n~dbZq|p7Q5~C)R6~9vbVeKklVIbs!ifQ|MT>x8g`y`(5|+ydaAfq;)92r zF}C-U6*V7ieffiZ2j29&QeR5^0|B|=n#ATJoeDI)Bf0y`!j){(`xFhz^7B^q{ zyVoyUjzQaaW0q5Q#z~_#edgs?-x|N~XL~<07I764f5nL7&NMV)B_u_qTzq=CE$fcWh18F-nac$?~s! z|N7jud#i(98S$FBru^_5m0BwCe?O}Dt$qIa+$Q^Oa?%SYo*#cvsf#7PyZ%?Jz8=2o zeK!^DyLOMN$| zu4?NY%av-8_|smRTR;4_KOT1Xr2O)pzy4IG)KwDSaMVFB-!N{=PcGeS5Q^4b+j z{afN6KXPQ-$V<=pc-gr(AA8-+PeUi43!IJ_7CvRKTR*6O=b;C7*m%~R?<_&wDH8wR zC3j!D_^NE!e?GtG>uau3>Jf?GsiEn#H?O_@qTC0T-SNO7-#00>SvJdg za@&>P)?NAP$Dbc}$lN9G563KWfW+^(*OjLpeA3$c5B}S<1^@c%o$o1ij>JztV&3RK zPd@F4lACX;82k5k4^ZkK5`XE>Pd)O%wZ7vkE^NHB>Y{HT2X+Ikj2ZUa5zjyN%h$jA zs_*1owz>6`gD|!|5`Wd2XRp7Y;LE@NdGix0j#Pm|l)6LW@A&?r&2l#y^V|i!6SjX~ z&4}Y695!V+uh$;^^QU`$dcf#Ie%WX79y@@K7D)VScb#&~>!T{#_8Ix(Gq>*$I!CF~ zBz~hmhF2WsKj^~!s=D4iFKgtUO1&WQR}|$vxydgt{Nt2AR96+>fB3VY+s#=134NRU zCRTk{vsvH6vxfhz5p=Rx;;${7bN<9{qPK58?CFgPsvf}ovx_8t=d)WLJo>8xj{RwF z#dUwWDjVbSg~V@k*NG)3g?6kQop7EdTcFD!&ac2|l#rn2J>|wLka0 zQb$VsHxGaR=}qNdoO14^H+DQ;a^;aq{Y~PxyyTDb-o5o8-_4KQ@y%h~2R7gZPDtr7 z!}k35t`|La)dL4S_S&?Mm*2DYXvk)XFFBxf_+zbSzO~1%&v^8JcQ2i))bSGk%M0f{ zeOYtvTaTT#dj7Gizgwf!QxbpB#n+v zO8m)f&rR61Y013@U%2%j&nbBj^5h1Izj)PVr{)*bOuO^pZR;O=tO7=pZzR5J=;UiY>yFd6>;@_CNM@iK`cl`LB zijIO;@2&YirJk1f5zEItc<~kEYR}zw(zS~(|MoD@?N%%&))V&s{>X0@Tt4#0>gRU( z?nI?JBtBC9t8>@f{OWNdcX;^wAAUReC#CL^_)G7uS=iHg>LHKco3-ZL@{2zQ-Hv5B zBYrvd;ZskW`FY>!?GN4g##I$iRwUkk`+fN{H@$x4fw$efdedu8xD(?g@y$n`9iRK- z2}RdU+-TMGhqeTMo{{+3C+@WAzDE>(v;UFTeRS3nH%wG2XKR*!=$6;LaP|2!cA4b)Z#I_=!8PHw#5*VijG6UK}&!^WR^_hwta_t|wP{r>r!tMj@#Fh5HC zeYLapE%}x2r;TR3QMmC#m#tKacT&d;o3Q$pEpNzP-nr`&k6gXBeb1Rn?Ft&gJX`hr zt3Cgof8_2vp7Y~=51#&NBSw@oMeRLIQPCME<5z4+wm5z#9zLDU+eE~J+l486^B20 z>8oc$?j0}jhwOL5*?YV`?de@h_BuJV`p!dGf#gk3R%80 zWXhOfPhYgri$`BqA3wC^&O`otLJMT@Arjv>uIK%$Px$7>H!gX3@^&9@U#HY1694$( z+umHf_qFF8Id{_&uK(R<-AesS;*TF&a@>m5mj-h4PCfjzSFb_yr(m5uX4pd`V!PJt zy?x`P(vNRCr8 z`0{VN;-s$jNsB*%z9jJpNqHHQ!%*bMs4Q-E-u) zReL^r{BNQA94ztKlWyGZV*mRq*W^5Q^pl?zpq$Gj{_%TmtDiY++rN$d;`2}cP&NZ{ z?|q3cuWsJ{ouyw*-lS*8w~m_e9qwUHgC;#@*msBS;$QLH$A8s~>&5dn5mi6N3+&enfndQkP2nyJt<$Thce-mAkha{o>y?=Z^m;5+D68 zy7g8y^Fmoa<*%yw_kF$K-`!Y#)wKWo^vd;D?y~lsqJy7adLQ^JBJtNxo_puCQw~3B z`M3pte4ugWLrUE!@t=;l`Le2mE;!_&$Cq7s!rM+tD;>q2uHrkr$C;9jM^m-x-g>MwXAhe5`f6X`!xw*54S6o{{9#Ggg+hp$a9-s^&0T`mc&omd)DpG&DyH%KRafh z_t3c?<|*|brPMBa;6Kd;%i+z4cZ+gcVX2AcPFyv6=AO%OmAfUpGMbAQW}?gUrY;Y4 zH+S~71QFbO>fU*CrcTe>d+PFDyuGy?#}@bc#7s9a-Rjt|(1 zMVr>WgkId`TpsL<#`4#rqT+mmEx6FA9vpK0SmcIQ$Ii z?QV;rgfvnVZ)rus(Qs=lcSR`L+t`^KjrF#K!nt|VAw5?#J5m*|rW@CK@MX0=4I)#< zhE#y?Q#0htka9ar1TG8`Awv{!ZNYB3IKd7y$bU%1n3gojzRP-*5MD(dTAw0ltQ=B) zdc#^C2_DM)%{@Ko$ZK$uw8(q7uOg?Uq0>PX6vb|T5F)8J)S?CB`V{6-9l9E0?d#b% zDGw*AIzvqxq@=#+avpmf(&#x;Q!{j#rpD%uA(Vo5d}3%pxCc+i4ckU!0Mue*?QHqq98HIC-}RJ0Yz$fI7rcmecrY@G&Ub^UN^DJ>>=&vBq$3*=!e5JxDD44#LeII<2(4)ShG?WEJcyN^=TEB(s}u_ zH*lMpd-?(!fR3SvXue8E#e+haS$iNYv@BT}t|xmzK@!DrU8g#0m@#ljqvn>L(ID3t zX*x3~)aZGR;$jGm5e99+A$2?h43CsUD51Gox}zTf9(pO(X2wI+k#KCiP03xfYV(bE zybS`sR?)_u(1yS>j~;G_axCw!+~5U*-!d8E2Rr?&;;4r35aGHqh$AYobfocQ{Yl&G zFG$B|f@}>@gr_NYu>Bi)_k`S=uq~1|bN!ovJ7KiM|ZVz7A<>4>vRmO7n(M>$@5m}mAXA6hm&UH9 zkZb^~GjW+|vpHgUcRdA~b_$+OEDn}mkgj_@jGkN)V$#6NLGahPJ|j%qD~xhO+Zr@f z0{eM$OmCj0!R?^1VpLCBd1BEaZ3nn?8}JR(tf8!#t@QxgUOm_y2&}&}a7tJo>{z?| z5ckDpGBuk%?Qm#0B$|;zxHUfX+{nB^%(p8VVRhXAtEN@4w#=I%gVl3Zb-{HJmpU6j zR>mTE&Ec*txTRQEX{VPN*wPrn2sulXA>?%?&z_c{&cAjOMEv&g$B>$#Nfb|WVAFdD z1z0_;si_UFQ-@GM0ugZQ)zrxysWedBo45bDY0@9DXF;fk8Q!5Wpn;Tn~fZ(F6lz!5ndgHCgt8Tn;WEyr zmJhRWhnSF0-HXsUk|PWMWhh&XHX)x{<;1Oa;x2LGu5jYAhAVY0evMMI5qb!rY&F+} zd@7F6-zDx?6Y{CA5MqvO^_>a%)Wi`s?_?A5sed4()4gLtxap1CEIMwq3Hj7?CvLVA z_Z32yNvr0M)S+xuYC=BsixW3|l>X{d6HF*uO>*MqJ8`8>+@nDHSQ|BObwd8o$gtFC#CItN9 z#6G`fE563akWc-H&^3}{GS1sSE?=jb5HN|*lM)v)G8CoR;x|Or^exAEx%@~Jxs`_7C3QL zPTb81T_>fyh0s%y<6RT-sXcKv{b`AtVnRN30Yc1?EhpL;@+m$puJgWPLOyjN&YkOY zmzog9(usT0iR;0+@9R;@D0Qz1Wvly52pGbtZGHuYOvtB>Md${}vBre5)mjtssY7r+ zn_sh4iwR+T5&Dzlcod;$SoE&gV3`GfwxQu+>Oxl68C@!`P3E@lzL9$wl*QqBtk4D zTb*t~KJ_?4y1b`N$fy3khfVjG3Hj9LPTW^c+_rlv^=FhfN-aQWt(074LOyjCLN7?% zc_!pjVBJ`q^yugHf>THBwmbmjx z2yI5_C5ijWgdm$H>r#L}6Y{BB5z^(|VM37OxLd^9AjeI}r|O-!B~IM2PTUDj+>Z#| zioC$f-a3@6s!RxU<-|Sd#AWTH)L$fr--NQ&QWNs2Yn-?noVbUlD!AKV`yMwTpZXY~ zO(pI#6Y{Ce@^I%*;V^79q^zp!5T zsg#gU`4NJUL)=mm@~P_)f{;VpO(ul#KnS7@abKB`Pn|kVuJ|DC3={IHrxAhxLfmsE zQsN#oA!tFBO6@0cqfN-CW*{_5;^vqTq$5J}CGKhy!Wbb$oeg7TLOwNTf4C-* zxOpZ7nTXIP5_gCR`PBUg6-(ShCgfA27lQ94Zj1@})OdtSByOS!0nZ3!OWZ3agc-34 zUN0oB%7nn@2#uDwmupZN!;Eh z1lmBTLgJn=A)opJq0J@kYZLORrW)L%lDJkA@~M*%8Y6MPGa;Y)9-&H!``LuRM|JR0 zC^UJK3Hj8{ZMdf->2@S;6upyyCH_FSi0$Jm~c%am8anMWCjnE>OxV9y+|dCD_#4W`67qYlHgFm++oa z0Pn_2R9Hn+2SSTfpUPDgXm1R#1o7DUL42d?!oP0Bcj8|!Viq7(K-C~k9bhR^bs@Dk zez|JK|9Vjt^DS3xNCnFb>Ixx#1wzgE#=7^0V+;O;@SQcTLhXfk(lQtCJ>9Wbu&YP)w6=DMB^Yr$7$f^A z2(K${&AvhM*>Kb&SC(>jk510zU6kD2TT~A`;7#F%HtG@IGPvl{638vgg~X=`)qcYv z!lqzE|N4LIy$yI(#kD@ZLoh}_0~#&1v_?e*KM+XxMo9t(h>{ROqF~WuAO{i*NlZ=< ztSB0(gos6Jz1CW*t?jj~x8+ugwAU)A6}+WNTdGiLOYg-N3hhOumi9;G|GsO@p8a)B zI8g3=`t86Lchk!U%W$~pl@DqH+# z)F)mGOe`t5@`{3?1s7fjL*lRTQ0uLUxU@8?@*l0-|7iK~``Y96!xL+pE=t1vHPsdH zEfc)t)tD%l-`pyW5Ot8s9#2HN=oIS;>Y5X6OuoK$ae|&?ZX4TFvc5K1z@=B(Kt^_Q zjD2jne&C<6elPn6Y)2=;eul7I|9`!w9bcttw-KDCd zOmzFt=%*T?S4?m*$G{#;IH_makoHgW@a$zWQBaFssV!MBcWD8?_qm{H5x>3g&uM3= zY~!D?-ZQfI6XfUBmeh0#lFedFn3g#uGR?$xkpu_TB?e#YT5cSh#_MD!PuCN_p{<=hc_m&+%w z3p^!Nwk8%gG`F`MO_w4E(XbwZhpDa2;_+Isz&aG7$;!B;Az2RtZPH?4N#iE0Y5_76tBb?KO3F*irpydtl_k|!$@O?< zPA$R4>6O)0C1n-yNo7;8d3Rj5kqu(yu}KgV#AJJ67pthj7VGjsK97%>L^SdETOzq~ zrcaE-nFP!qhra`H$|m9?EhZsX4lzdZ|JK~uJWsBQ%?QU6%ok67hvJEXuNxgb z)vrLh=~PUqDk)DFhO(BHOo~_5R7|w|2Afzi)9QTI)L7Y+srU@!^op7I7E!EX;%u8| z>WebCovUsk9n>wuW>%I=#0Q2VaVAf%sCLuEH+A_9A}{~5rpBjCpFYWHZc4-xjg9jD z0KPksEU1IMajW58|9JlHMEEb1duB~3KTKL8J{`ZyDy-(Ku^!uW8K0~xz>UOC6n}vKXnbsxbDOu zJLoX*pV1Fj;v1Lv4tZ-qH5PC%TA&&xLQ{CuIJtCe!3FaRcvRu3?4||$`H!fFNwjC0 zF*3+nJQ3|^9$s|_?!}UNZB1?mTM>?ne_Zq+RszCv(^VC z%W<9tb*fNnL7gVlv!L>XS`UhM(Q};VLGj*sjZ3w!2lX+bc7o!)?i^|otjh~{0p;r+aRvE8f7pOma4YjW+3?O9#EK}b{D zuGpSR58BVjP(bv8_K&OCv+TUC*nSqz$l5;xF?L+PQ-1D5URYwRjNfW(=E zCU*c#Rqihc&4Ew{s@uJILRahn49Moc>j2`~h%T!rA|yjIv~M}9VfXuaH<(P$itQrz zcEb4AFSZR@LLD4&liv~B)>VG6u9Gd-nSFz6R9ZD|{dDXffMx*Ofyxd`85SOa@?f0$ zEAP3QzHA;g7=c}#VZ*1s{kB|_TP3n!s}OYO#(X@~B>?R297xMsxAND>)QZ>I`=B9N z-o1RVDj1>T&`EhKRtlWkv9YfR*>U}T6xyiahS+|IvHk+Bxjn-2e%{3!z*D{_@A8eU zX9RP%cND}e%nB9?ncVGWGH>1H6|W@+AZK~&?)oM3xuN~EpbSZp53NaR8liAuK}xSs zc?1tlI!?zcxo{3)Ij-aBEI%YN`Q-~EbL)zq=H1f0V^S63N?M3=(%#d;iRa|4V5^e^io67% zuDrW{f`Co2gDk4sWG?BdIoMgVyDPRkoE&^>cKLzMa{bE$s`{*S^#1SwN8hg&ype0|o}8DCUop zk3_rfXFIi3TImnZ4P=qrUKZcE{-r)n8vk7%ao_N~n_`=(l~-eLJHdPz@o`s~sIcAs=F@)i@C|!EcQST9X79bH@TcgSx4s(tg|qKm zbkKXc%6I0yke>x|YxYZ!wsn42`JVZ3&}2qmjx)Al+}6C+KSOTw)|LMPcDrH|X@qsf z5V=p^8KAdj*X))tf!|izFU*81De;l*ymgQjD$VNhr}j`$ow2oDHETO-p0@qk=8nx- zow3bbI`s*QY9Xv*E^7>${A@z>G^h!>V+&>kx)w5Eto+7@| zHyp}a2S?RAiTrPOnE&lrtID^pEPs=Rd>3sJjYD(Q8C&16Y`t^)x#6_nQrdG6bPA=s zC0ck3T6k+^&CiAPc`sY^0r1r2KSz`i61de1Wcxy3>`nOa{$P5OuIgp@HR$N)bg<9S z$HjIcN4r^FqAQrrE*hpfE{h$&z>av{3q5;v9LmaDu~tlnPHeYgWqB(eHCXBq;;T-h zHar!Y_ae%9`&1a#fz)HrSDi9sx)0nSJ=Lz%ZV**_XHSe!2Ex4QMEx~vS|H@0<$Mxc zNNbld^^U*TGSpyDgEI8#+wqr1w+!9nN!^882I!b&NS}72F-Q&{cQJ$hv4XmCl;H;$ z&$A2|76m*C|N8AM^V0?&_^^-{PRT zw9gNuTh@L}cj=}u6Q;}ece+ov3{DXGga0zdjK;WPL*Cu>(w7H=9!AR<5VRNZ2svzY z+ob7k%UTuNwlcPfzTM|^x9l5(3g6Qid$Ozi$<)=A_X2FKd`tFbINvSvyK3NwUxFhR zC%gr%jh>nfQ2g(@*e2wqFC*BR8J4Vef3NG=i!Q_8GpsIu*!a@NyUHK$EPoWv5k+*m zYBqQLXOGSr_|iv>FQtPxWmD`~2Jbr=1g_4i@@H3;zv_BaMEb8D;!*$R3Wn2o6%jA= zwZA>7+aGk3wf7J3zpG+z@BK6L;QABzyV6O_xykDD9m}52O7_D4?7S7NP$pOjM6VHiW$cHhl&i~?6D9j0N;b$>vb3IM-^KfS z4&ShE;J)*a=^pJlp!@GT3ljQ3LLa{$SexaWZD6wTQm&)(*Us{TGUYxj_H&3`HD{}R z=x#tBk_q;q`CYNY^L2)e$u>sA7=6RfB9-g$^Ke%U_+bSM%9g>(!8n;&6zlXg1ngs!f zIAroGD+0m%BKtPKhr7!!M*TLwhmR}2eKCp_{T|dM4H*=PmaQ^G7aR~l%jM9r42Ym* z77JSL(-%4!<*OBrVGd%L)Ftmv%S(iPj1y1&N!CA(%1oFx`B&?q`N z$=yG$e0$#N*O4O(1@@2G zXB~!e!cn}(W`lxc?YkNypzNCcc`x)p)|rI3|Et_t6-=c4e7Lpja+E6uR zE(^zGC+$5K?s)H?WYijaACXSln+L?`+|yI}{?78}yK0_KJwB3ovzkqk{EavGtv?XHj7G4(OITUc*`vrYp}11G+W|)K zE90|w*-Blms@b}-=3S#k46V#~eK*GInle=St{K&(smi@sn16;`YEPM#*%cgVZ*2dY zVuzTjHB7iLQ>p$1!hjuffpAg!vVAm1q7W!+njDWk~X=-kx& zPIr|8D~Mdg<6?yAaj~>#45;S7IE?pKuM_2(v9*=a)wi<-&VaCX@DVfTVpli8$vLZI zuOQNPlO?RzZR_gSRnil#0khZD<=PT1qc(Rr&sW9kSu3tVxu{8VPLK(y=`h4RrydG$+knt;-yy|QyP`O}*b(u`e* zZGocDOS=&2|0PV2Fyqg};#a09&a%ZBT6{&QD9A`~9MFC#IHK7@8;_Jr7K<}z|C1us zJzR1TYTE&OG=}9VNgGxVI5M@=lx=1YRD*RSE>&HU5nJBfTrm=(?P0B|k{y%Z<+h7a z{NCeWW#1~b^lI$mr#Bji@+CP@sgrMqu>$Gjb zPWBf5^~jM>kLnwj@Wztq(`7u8%Uc<-KCEg_LCH@T1@%ErU7SNjj46-E>fRA&Rm_`- z=@93CL0)+LKj;ZoVsQMw(+)SJ0A{3z6~8;U{Cok7Vj(95(e>46go5w9bK}Yj z%s>M-{I-f1P8`a&%k07ox3?MnaPEo`@TQGGIF{g0Q$vz^q@;)ZEd)dd`&fL4_FfO(w$$9?O`!=nHuUO6bh1Mbb z#!gj3ASrkF`y!?#8{1FEgmFJ+Uwg)FZO@TeR}aj(yqk|^0w(o|`8DhVYqBfl*4k^y zOES1`=C>0>UR8c%rQAUbmVagJZ^5dQmF(Q)h#;F;o<1j7hqCh3iwi|^4~s+jgH+|J z*uj;t55b$a?tZyx`P1ZeC~6{w>(MZlpk<*-ZFvk9dp-eFNXSoxDUta&z zd*+_;eB6(Js?{62YOKAla7CFmZpZhXv29iZcKDof+Mt6hnKm?u7)%?s<*lA8i`4Aj z;4G|IP8&9_jy(=o*S;|Y?<#-A4E%S?V-Jr@Nwk+8SH6v^+nRR~CYZ6+H4j6*W_%S8 zt8SI|&}uex);#|zrnFt<&x@dkF`K||Jno>2rmm_mqrjc=jmRJFt@9ZIo%Qaxem$Qm zz`xlThx5LA-|}bkF5jH@={vBp=tbT-u4YT#eK+~AhsPnGt7rQVlLR7BzM1^KxE0C1 zM6qk}Km+p7uY9{vHMOPc6t(%g>Abspqd~r(cO5+`Dt9?5_dN(*BW3*M^(#@su{EsT zm94kv8fVA1bOy|X3cj;P#JR!DU7OLuc;iq;|0#@h@42XuW7Jow^_c^! zW81a0_7ppFvqo?FIEpHu_%)NW7Z1R--MP^|G%@bLZSAYgGDu#Ez*%VnvnfgBV~#lP zz#T&}<;=Tp2%Jfyc~yx3GstYdWv=H;a^5TMMkt?#WyI3q-?Gq;`Oh zsXc}|F* zHTo>aHwmz-ljixw{v7WGeCfk{I?F=r77mM=+=sRfYoBl(`XvljreY*bKdQC-%j@^h zi5{Sr-_sg;I>(!d_~s9NFjT;u56HrUZWxC+$viy#WggDyj2)DL9%{-#?3d5SwGF*j zzH>3CONFWd)hg5+i!HX;GK)P7>OSH75~vkIZ3M-8w)xKQKs5;UA*h8y(b6==08koZ zD5ymeI>Uy}0@W$lVo=;CGROHesEaYa$Z@_5s$N3B0ZP;OE~s|FHiP1Rl=;pdL8;`w zfm$k9AN>E6P-o%4V&{PxB9gDS82fk)<+FH7J!C2F>!#QyP(>2=_n;Qz%y-VkZ|N68DtLcPc=s#%n-bELa_=)j}--#a%e_o!dbT73%Y#xZ`HN^KFa04C;2l zUI#T6XO8n*8``5MzF97zXM*BBk@?Q~poR%G8PsQmspTk2iQ=U_yoT@D* zEhv?@5fp7O-}yPHMxl0rdPw-*v3!38^+gHAMsyBaWR7zZD3y{AihBX(JLiGY9E=3@ zDzF?U21;AhB2cQ0Bq-I!3Q(%GdoA`bsB=W#zkwhC&GpOnx~ff_E< z-JmWK>Z_mz3-uPLK|*nV)PEQ1)Kgr&oNuWypj2xW7OS(=eV|kaU$uN&E%gUW4aD0N z+|Lvi2I{Lq-2zHWemf|&tJR>`!tJ;L`tmhS`0H?FrUxfGO2 zo&icF-(*8uZRi?MD*0bPspMxY-}f!w+n}@@{{u?PabX`fwaY+hYU4p^YH=Gn--bSB zv9DU}Sx_3|EgSkP8~QG&f0gp~!6VjR6Y3mLYQ=Lwsl7CS(j068rM15ml-B;cptSY} z?cqOXg63zTBx@REn}{ScI5Ij8I1uQ|?{ptKzogZhlG^d+D zX}Yh2(lmPJyYfy2rSgV=Qh8HBX%41?(j43aO4InV4gET(l~UeZJo2q2F94-+F9M}; z$AVfYe3L<4E7WX@B|yy<>>*G;29@J{4V3EiHBeI|^jDzN3mgPBU9gkSa-8Kt4FuI7 z)YYKw5^4@8O}8G@EWtiyv3o#ix{rY3Oh4aw29!$v4^U--y$GdeEUItQ>0|! z^(y7d2cW~uL3>Qzg<4NB$x(NbA>txK`9L1_*K zgVG$7g3>f$)UE(E1gMu3_o zdY)wYDnV&2%mGy{p*PvkTWsk47W*P7t<`5Nw#ibz2BoR}4wUBVkPSTrFS)5+J^@Pk zCWD$THFz^9mAs6YR#8=8Zc=H7r5_-9b+ONN6|PdJ8{q)`J( zJ@p(=>K$7^skdDUO1G~EhNn(kLX zX}aG4b&2r(J18A-?*!E%*dIVO36)*oQfFJL5tNSa?*ygZaW$y>9G3h6P&yKP8I(%- z4JhUN1E|k9@yyFrx;_86!u zB&Xj1rFO6mlv?KwP+HzUgQ}4jrw(*`gMpx$1setGKB2Az)gcs@QWcAXx>vAUK&iYh z+0d_n(jIn$#WsQJk{H`TX|A}(xW>Kc0$1`7P?{PS95l7*pft6GpftwkZ7APT(bT?g zv5lZKwbwwYu6_eb>m%nv-Rm1|5R_U(43xHoX`n9EvVqdJaJ$7Gwb)lI_8h3;5@Q1> zZI|0YX}kPAC~cP~UF4Ri52$-2#z;_ag356wgVMazfm$G;OF>l%bvG!j{m+5YncNeg zu9DF2SnLH*THZG-wgc2-!nX%hnNWYRq1l5R=SzYO0QDK6E&=t3*w9c=Ul3{(s7Hkw z52|N2^IQVze2I|+HAAQ_P@2<6L1|8(0;M_qp2dC$N^|2y^O z%w1jDr|YVx3ia;LdZHR6@BQT6jd_RDq3`|({<6Ff)WZhw5q1s06W>9h4@QLAbmbvM zSB5;OXoR~NTAw2BmZ12}DOk1!S+=EM*)1$?u3ZhR;%$Qz+}nc!cco>)8fcJpXN0vU zRJmC6k0G@4oKP69IPZbVanRK`>jfJHO50MUrDj`dAt;U84CH$}hgK&0n=n z4`({A?}54ACz|$$jo7S}VFJ2o?$C!@-I>8CPQO;#`5VGE{MlL!NOs-()+L zBWp?m-x6<_cMWy{YHl@EHg;?(R4US+sw)G_cTi^@s*08K>N-^7@9U(~zb#I{07%+F77W%K%} zQ5sD{O^lQ(jg%@)u?^r?%xlZI8`p_f!r4UeEFYUi*tGfsBhHgY*tBj3HZo*djN_VC zr%!8DRTHOAia}jUWT+>uS&5$d87DgqCC6uBv3Zftd-^rU^c}Q3zveK57tLXQyc~<1 zoJC9H9B4I1N;O9cU+w^xVy_s=Z*F)SDtA6~S92JTGxeF@S=z&>F;`R-RwG=S;NmAi zht=2#tSF>L#-SSN=Dz4Q6DO-|;`HfNlg5tKYlcevEtWz=iKiJQvRaljG+|et-u>vL z_t6is}egbq6rEO@E8I z5Wgt>U7U~NEOSnx#(2cziTe85rn<&N>%a*UhE~eAAF5liQ56h)>e7~G?CROp&{k~6 zCdI`wN@B$&r8Pr`6&GIzL-vVkZ{lZ==i|E>jfv#(h#NRm^0*Een-?-img_>CtvHLZ zzNCkL%#<$gW5=co5$mP0+{0BGreNredpTqK?MH9S{(?R80njhO+{BXm8cTi!0F~70 z^9IGPJY1RY12|8@S%i~E6HJumjdA<(t8l#;SB|q#w&nG>w&6+>z8NASw6K^bb=T%xihark$DT< z!63-ZmwmK!w9TscFJL*&d7$iQJA=klf8-AIsQic2{cWl~YdKya;y=k&Pd5zeKN4v; zFVnD}mkh9*)Mi6PvxVnl1m{wz8p|St`s<&5(cf6A5q^Q+!UK(^x^((1Z4R@pb1w0- zMH+&i)fhP{9ot(6CkD(9jr<0jKlXesV~-un|Hommy9P!(`azKI9!!&qocM!uJL*(M28X`5VhDZt@bpqE91Y2MzeBcZeW8hPOhU(?~0+h!6m7(y7I+&mG@Y(Kn6z3r$Sk1NTrj4zA1-9Yi*+FgrQ!?%^zFK3Cw%ykhxEoEsNF)TXFswJB2g zG%C0l+FKr_Al1v^qJ#4N+E8jg%18TAzHYqNsfei7ayqF0f!G|`8Sq$qmg}ifSj$Ec z7_^pJV5#R!N3#}o^4DZ+Ej8(SIDfw#u&CD|e|0w&^_7oQZNAlw}ORUbRHG_xQM0dKHcBBfd) z71W3hk=(~iUCmI3`Lf!fR4N^D>BXP3@XT;N!iR-)#5mNEbh@4;=_uuPJ52G51-Ci; z1r7~OSY9scs#TEE@{+RU?O2wJ?{0IpTb?^E_qP7^&my#*!sVa4>mi=MJ=`^wo7k=H zdB4uDSeqko>PU5@P&C?eAs|PT5S~kwAe5zWOA=Pj7ZEl&q#VYfa=1iTb{_u85ptrs zsylXUb4#MN7Hfu|yuKR~;X13kF!NV_W9N{=W$M49Ft*--d`w8eH=%v2oS8_h-EkoV$@ zp5tD+?fm*ZV5rBb|5CkbVq$dlTix?6twPQWFT}7u$2k|&SwgW22MdL9n7Kth9Mt*9 zWa?4x)#NiLE|GP}JAjQ2RV(ArImK|U;sipDtg6^mFp`SwjiEjo~nLX z-1m4@br-~yccUskmZpbaRg;?A=Qbw7%BmAILoF2-__ZXf+(7J+N=?5tYT_dtswPsZ zCQ|AQ6x$3*ig{}4I)00~4dSMBqo&u~s&xEnDr-uHb%gIeWT>D87^7J;VnZyz=^m-n zgCV>$I6ily>LI1-A*FYq6x#qnih1hk*l^qp?rw;i-i>-*8t7)+ub!E5=P0b9nblSJ z)=a^L8LDXgJoRY|LEA&BUw_<;$nTIYsTTK zh53BB8QzgdZpUx3k{`ue!#9;4&hOaJlXpux_V#pdnBWE=c7*A&A^ZM2CLF(V8jh#6K%E6D-?r47XL@h5YAmE)E$O^Tk2_8k}3b>1l9vFN4V{ zhCnwimd6$FogUn*;YY;k61c6|&PNz75<6u1-NV&G`Wqv`wHS7SbD>>bQehqGk_stp zlMLNF+2<%(x&JL(NUW2TTrOMMFGf^IDJ4bM_Du+0;0nt^o{T4o%2RLf)? zsAZDUr6-2=cDVFJs+V&L>{0nnHPkUI?EMxZj@vRP1$-*@YYF;P?5J~~tMu^dJ}cNf z@#;VJsp{$OYaey1^wV^!J>h8m&NsN0ZQSbjB;P^fG&r{mdZHcHg*9P!)%xA z(8w-_w$#X|OEof5y~KGlw71;pAl1v+iWthb%}~c+WN$-6$jD^%*gnMN)%;;!&70?L zdLu!tJdS(QS03kHG&G((!ZQ#~-oll@IGlkD!pZk4^zbU7ZC-6-ZEN~I$W6n zO=xfDzYQfC6(99IAiC>>&R$pJXO43U{_B(Tr-9_h@wJg8HwD~MjHQ;yoE zJCpn2Vh_e44_o#s8p(%a#R@piak7+R;)8{3KM?V~7M z4yx(z(OWBGS9GJd|FVkjMsN6hAr?F*UOla>B9@ujA`@FCvjOGt>+Ni#w|Q1?q*QOD zRBwt=Z;GYU+X8T?-tta>-i~H(4`pI+&|AE+1m8N1;X%#J6!#uVQGnAusJB6I&wjmK zWb`({>W!4@jg;z5G3rgRbb6Zw4%J)E3DDaukT$a$dt04}-X`H2tZ_8fvMCjDKIl60 z#OV%CA8{%9?xYi-yE`H6`fhZ0Z^pXgr&+73YVdVm zc}}==Ha?SEIXg2g>bn5+Lhj+(Ak>3dp&l6PEJu-f15ori!s?Th>XVc%D=4-Z{EDU1 zX965*i>I9ceYQZ_v~KkIxlHsKE60bTMU5G$FO&9*A*tx>N~<$csxwl(WagpRvnYdN z>2${NmFjH33D6mb@m1aEY&VTTj&AykvT4&|Q%a`A@tNmIWwDCtj5McqS74;`!lc4| zhTDD1^XEJH071J|sq)0E7&cgj{foZ3stW!4@ zjg;D&Vzf2I(&;U3_15bI=&c#juI|Rx?$20nlS-;fGIMO1*xGqUXJf6-NU6?9sjVqS zTT?8Z&gNR3_4z;0*=IA>Sw(DChMhqsIvZ$oHs0!tl>P#`}OtEx2yWZ;TloOz{ zn<1^d8#`N*vCgKKUKN{|q1H0Q-PX7+|TgXnIQ)g39-9Vs2NDaJ9IV(E0pMHB5u`Wq}?jFh%l#n@gIgU<9FbH2}q$Bg^z zVb=BWr_(`IA!h3JOQh$xYru>XUKw8rtR%E1%s5;b=L5$dhf~(W|ENG|^O9?uTkG%= zbYt^e{K)X(fa@@?kvkFY8)`|2_MUH|{KCRMb)u~e&)d#R;_cN%wF?qc6AcUMGkrAW%o^Vfp0E;`_T#xh zCBk|{iFn_*xQlZ+0uT*6@j{Qa^u))Z}p0623=6FEcLW;~0lo z9p0p2Q!McD zGtHGKUKXxy_j69Rs^TM76{J)Zq_huJjD4tLXnNhN0u5e{uqt>DygOA~@xP!7>W8(h z_xpVM0d_1ZI@_v)KgD(cuTpI$0I1b@fxQf)}}d8L>61ZoGwq;~fh z>&PBDl)!@uJq1_V+PgUGaTbPbi*d*UR_D*d@lOsu7Cd%r?Yw!3mSmz%Y|5=AmqoAc zEo5$t^8i*+?Y;Z3YiBxq{MX;qzKB-Ev>(Hj>3<1VD*tY)JW{GWQoZB}8O5G9d}+N> zEUlW3=9Lye^ze|H{9b9R+a8=OeOG60b28byC_|UDXP{3@5$DZxT99+Uny!Fa=n=2P zm0odzQ4_aD(_sWDRTC*ylVVhpV!j@5DsR#6aNp;lb^Hk@@?{UUEaE(Qga-~Cz{ZDE z#5l|*i?D4B{>hO=ziqan89R1fqBV&<5t2(YRMwp^n{EbS5%n<-+>*wxzN?KxpN1>* zR&E^nBC9@9sy8|Ow;8=H37Irt~X2~wNfevkHh zOf#&esYXp@xH2zS88tOpHIY&^ky2-`7@fUh;>iZ;7E>KddOCUcEk_vV0ZaQh$(Z{M zDevR5@&?+Wak$wtNmgqT9Fnp-|a97{1vOZm7pXp@NT;!O7{~TW8aCbwKSrJAMe8yr-zZ)eCQxZ&d_vmjc;QAX}t8nFB3Nvw~KJiHl>5gtie$>yB z(iT9fm-BtZQtSmo^>W^_*xMHSoyGQ9?9Ueae->lvDvxjCYZ}s`iu^4K-KK3()4FL< zLvN}%gePbZXIJKS?62?I(wW$*Pc`D(OVWnq<<8T)rkaNJ1Gi!A!S_4y(ejRE`}w(* zZ1?MwftGPh%}pCin&uX2EUBBDetj`bbKAz|whda*CU2YDbRgHGqV!qcxKKTTg?l@` zhF-+z<_I^uKLC%1dOOCUQI5iOi)j-WEg#Pl-JxA(h zxxfhPhm{C6%U_z`A2q+Zi6oCf`0eX5{0)=kJ)VYn6U4G%vH`MTK8`CJ=GSp$!+Zu; zHq7U7Wy53xVZ&q{v0;9QD;wrzNS_Up`gR*;EoxL7CMj*0qq^0U6v=W=i;M(@>P1;=3yj= zPf>QWK^wZxOGFc-UiceT=yc+|BIE@bhdlWV z`vm^U5ir38iDW#{REu~1GF8}dnjZ5KHa&bxYB}>a4p-)JJgzjoIaZIPRF9-|dal@3 z!)IrhZ0GI#&hA9rt4_arrk{{Lzy4)7hI&Lv|2FVVHK+$Tf!tM-`W0wBoDF`Ow|=qg z478dY=W<~BV(>^%XA8z*jy?fg4C;J|k*W@_BcC~OiOkzl)gj|hN7XoAP3=ZlhYfAD zjV<-H8BW}ep$?0Yu6r;qtizLVEi&Ln(-vOBmDz)$mrud<6 zb{L0xFTnY73I53uX*kz8Y%ynoF0 zw7I+X)ZT(^fd23Mr#H}E*q*lH%IrbW(w=^bE8El0aAkYq-C^yYNNJst()Oen+mm9f z(`z{EH~o>`5jYP&J2v)|9!fs7YsMfiZocH*`CYH-7W@31>&r}WDx~K-9G2-~I0mAI zVqX=W1s4M&?j94+0dN~+V(;QyfHS--UJQ(V9>*u!^YKp(vn*bp`o6H2hJTbCT^66} zio>-SC&#ooxQ@rkquz0rGwlXkKY}Z6Cd!Wam~qNxB8|8*UyE?1Hp&rS^-oImPfC}| z6?@w7*)gB1eyX%L0w*CtYL~^OWv^(_AwUA*;eAROho-|-{hx%@*O-`}Y3~qJUUZ7V zbf`Z6tZWk0!n9+!GX2R$O;>|Y)kI3wL`v197}cbhb^C|AigT$XsvvAxY!%(9rXAtM zp_v8aFne5z9&j%H$>G0)ZlCKgqZoeM!Jmp72O})s0*ZaC!#9B~@K`ZC(iRABiHg>v z#;B&!s)m%RhLk>grP%X`qL`xd(Z?$#t z)de~1RzAn154(+zPai{Fk+?Fg@O``e&jsOz4kEN1++~dq~r-BBr+%_Tq0{SgsNk;WOoOH|28E z2{c$0kx~_r(nqNjdlvE(gNkrpIM5C7tK;hQA0BsL+4=5|U}rGy-P^JJbO>@BEV(u^GudsvezX1jrVANj%l?Z_x_p~0^?-*m{u=m9#C`A9k6p$ zKSxSyf|MGoVl-C8JY!u|Ty(s~+5&Om2O9jwdUcxBCk$&Awc~~6497MBbIrt9XBlI~ z-sWPg*BN7NvMM5_Dk7!Es@StAlVYBVb`%dhUKJg!J)f1PJ!AVven}#;J|Li=Xm6RS zJ;#iSCL0yuBT8aLH(3>tQWcR>6)8p)DMl4ZYmQ+Txfb5D+=DPD&kWzBeX_4!0|}{H z;6Q|WZ3E8&pauE|Y0U^98}f&Y!?s21x);qs58GX|CKh4`oA^8|X-3BzURwTk_%lec zPkKad!ZW>amjN@B!P@({G9L#`E4<(8kCf_Q6E8hxtZ>T~m9GE6-h)!`1dX zPTG4fxIp$?28Wl+Y!|+UWxDT^`tyI~t=ahJ9lbZ(M<+Y+DT&yD&e%cMOP+%J&K(=E zlL0 zo!luE(Q`XXd$KZL>gkjs{g0wR`Lcn=$An^@!egXofaT+47>~}7Yvmn{@O}u4L)XUP zSbG8f$q~8-<=*^lP2i!;#rk|06LJqXLHza&lkDwZ-VdhnByqN37XW0kcfW&J)-FcG zro=7r+Sbn4A_O4 zG0S={t{=m7HLeA?-iPaDxMEDPoQb08ETjStxg6n5-{R*xR;!1se4%a@o z-hy9#v8Ih@5 z`MC&Xy|{G~9u%%YSa^#N#^Ioh%GptZe{!TZ2GnJ|sX5O59Wr#A>21QT#L;fDxH3Pi zM3&)FgO@rwDw>Gv8Nept%KUN;!pc|zeyt2rS{bBtUl+x;89x6M&7Bgn*Ex-H5ht}~ z`TT&ZRgjT|+WEl3`!q8SHG4YFpV_8kMlh|%@a%JF_(HQEiqk!qPI&ZkH8jJtr{T)< z%Z;WuZc|N>QcaQ4S(;)`GoE199O0z;jGHz_7gyHzM5C zY;!BqUz><&4u5ZT2i85hyOqfY{Aqo3ao!%#v|k=}4`^1G-@ut)4*QvbOL6i@m|+66 zyZmDOUVtmhgRd%zfj2{AT5Y7X+DPeRBZ|EZe#H(LsyDk!gZZkG_b5`%xBG(Iua>a( zZ$WrzXpq1-)IJq)yEn)RKF{E7*(_Z_W}_{;S+mSA!$!|^=_X)Q&On?zrozaXmoi+L zpR3IEPOCjqsy$LV|5l9iZ^f*pax1x47w&&nY1ci&wRY}&`chALKRi1HF{w=%#v{sf z6&hCNqX-W#UN8;|z((@jLHH*}8ehzBR357bc5ljWfzO!Nyr>1Ao5FsB@@&UPO=@po z)x!15Lk-3Y^A=Y4uZ_ZY;mSP!#wh$YXhqGHlq#H*J|d~uX7DSv(@?z~$T66ygn9sc zW@(RHVYay-)OG-6MN=;cYnzCZ9DFW9t3(`Lmel%^>LHgz0XzLADt{i4ukZf+ruu%s_1!4Ede1*pZBcT=A_b6OB zCP1eoHpLYjwJB1nB~rbdC&8uIQ-<% zZ8_YIA4FLA207!foG7nzrq?9}1_Z}E7_f8y=xcp^GA`WfhdX`dDctFgLFdkVLVeQd z<59Wg%=36$+13}@dLgCtLQ1Vyu?>b#pM6qnyTx3KjvemUFkauP9Bm(2K&J+jCeEix zZie90uJj^=y6OiRaiyt71&qU@u~Yb9IR42Id^XCh0$ozg_{}WzL%}5kn6W*WZdlFv zn6WW0XW~k0I15+i>m#^Q&23iAq*TqM)TJs$m#Wy&RXY0bSLtFT7ar#NRXQC$QIFIr zJthZhEnB;%u;r#w>8VDgrx}&z8I|@mDs8nYC8a7Qr7Bg7Dpias4XjnmOH9Xm%TniX z9Id3E%@rfmZ_?q_uvD`-#^LB=9L^nKuYF6(w=lgV{L_kn-`4(YDrCAxF$j9@99-!& zcwlu-R>4|uMwaJb3b95=^NF5z*OHhd77txSjsduV}T_b*MT^B6hRGa@gs2M zeL!}6R0|D4J33OT7E;>LDaMXYF|Vcn9qZByB^$xpaDKI%K~E${)}&a)^s4f)W0%Ca zE2}QJ`8Dn`2JcI*LZPj4qGL;@we_T+da#YMsOL0Xsh&L3-z>B0A*JderFS+ITMK^0 zJoU`)D(*p_$IOP8Cr=0FFGRTiu0wd(Y#4{t#}%2!qh^!oJ7C?K4bupl4aY-F7cEL| zPmVQa!_l9b4Jp+NDK#6#Xf}#@digtE_&S=|yjFnpY*2 z^^j8akW#ZzjAouH4W4jp{hag6~-KA4yesS)q#3VC=4E)EEFY2wmm;0 z*m_`p6KW@@|0fjhRs2P$fuQ~@6khUl{v=c*sP~16jh%!2QEr-3zO-OUL$Y9Eb6sLi z?V{SIhQ@~WIa8;^r%$YkPf9FmHuRi%^V*XQjdRSfA1ks$>alEEFu$QOQE)-qr3H-* zO(5#9E){wAWRN>oXs8?PBygj0j&lnJMXkZiSSm)NkY;B;6wQQ800lc{3S?n zJkCa>$nYdW;|NcTopTFyvuJ4np4Baw7tl@pf_U@1R_wa~-6##+=nmv_a8q?&a#3xI z=%y~Qq+omj=0}jYd;5L2>up9Ea9AN~pe|Mhiu| z9V1kKP-BIn1&M ze}?f89-%n2Srb60$!!6IO95<^UMyy2PXM81910*0;1>(-#d;P%p8)a`AiVqN@$lZk zjRE8xApDT7$CHI$%L7Pn{8|%02IJSG0R#^`I8OzTdHD5g0J#UhHV2Te5Hff?-vqM8A_Hem898*s(9!n-^?1IEUxzFYBsd&naJw0ghaSB@W{8TYoMA`rI z0O8K?#c(X1WWJ-cHGrHCr2i>?p38vT7Rcc!Acq4;36L8DvG9hdb0C1=-A`wHAgwr% z`~Xh_kg1qUdO2(ZQWQXz0a+73?g6qsfZR_xcnHCh^93N!26( z0P-@B{Q>01K>ET-duhD|<=JEfE)-Qry!Ao0ptuIhXTmQ zffQg?>E-7lkZS|TFd(^bfgaB|kPlk~mN{a?$YEm+2PDVHj^`h|Skpls3`m|0WM@du z@DWpOER|e1>_&^wp64OfQvqZVkkRPyaDn$Xu}0l%c@!xsyv_1Z&MjbHZxO>YW-8|3 zDu+CGf?Q$|7#aOk7#Z_? z2q_x6HH-|~9Y%&93?qd-^Zg|qJ-VorvbSwz|$Ydy#eGrAR7Y6r9djNw&|5(_?XedAG8S58c8{U zw2FZ|8jy1pkS7DNs)5|coZ^H_!*K(U?E#*8AoUo6c|5H^o)7Tc2IT1g&!>TG2q0^K z>o9H$o2s85|I4?WDAh~7;k!V-URZLMTR63OOgW@ zHL=79!07b6i?MW#5!1;(tlLV|ag=9?(CAXZvl!tQfZ8|#T>rV^qNp4=ZSe4ULRU_|h#a^?@O0om zd46}@@4KRM;7q`?6LP3c9%uOEsBNIpf#*W}r?tI)>w#f@9<>eDLUz_7!&A8E$;+Z? zQN!6;qkUfC5rXb9jbMq0Es9%o0= z!kq>1$bV3uzNLDJpGVUgAUxft#rulcS&#eD8W2f~@6!d-^7Cj~=LnBm505-@^4@5< z3WR4H{=4;ljxQ~h19c!Rw_SYi(kWL)<(y~bs8{5pmz3ylr>uqSEasf8;YeW>-9R?lPh zpmNK6l~W`<{`?e19Cyy(AX{nrIpxIfp zA|BtKG6w8nTP;CIu#YSD$*F5#%u?Zz-UrmF`|tZjRL(@<@%y^ch@43o$caVdOp3_i zs0Qtw|8b_y&yUbshuU)j_i z%@4YK@5FSYjH%*65-*7s?^Ut9cy6PVL3~Mhxc_(1;t}YM9!^1v$MGW zBV)gQ+Z*enay}(Iy!YeExiuo^HsRrji^q>XejhrbaDJ8{BsdqoEh6W3;c@kI`>g37 zMCIHeJO}XK)${EUIm?CTqxjFGW$*aUMdjRyknF6(`0vVD9+7jG@X$-6p*!=IxBn?B zr$cyn_s*4bS47U;!gC@1Q!79F*bi1k<*X1MJi%k-+#QkgY2k76^OYTs-V>Dr2<7tU z=hG26D}|@~{B%b0voazF#Xwqaes=E9$K*I%?_H7ntcu9FS9pr~A7}4Di^oUhtQH=B zz26&=bD!{Z-`+nXJbu4%UqsFt;c@NovYNpu?D_tPoHY?S4+zic_|GHhv|JV~*JlwD zT>E+;BIiNjar4t$SN3*P4onNJS05T_}>%f8<(B?d{oZA2+vOZcjY`3 zk@K+dxcT`+@6VtD!}b1o;o0Sr^KeAYBLO+&La^yj|$H~{73V_UEm&P zM&*1lBInVFoX3Rc8T@ByuKV7uKSt$zNqANwp;JKdcq}64aiG~*=i)!}GivkHUqt0R zAw0QYaP|CnM9!Cm=PV=VnUz=nHY(>U!sEB+FGu7&DLfPSALkb?7&SjC=c~dq2>Ce~ z6ptq(a=r#MJFBmR;wg|xm%Ja9^RL3=UjzACM9x#f&r=aO z-w>Yu_|N+K^^o%hMCE)_c>MYKMnulj!sF_B%H~H?`1yYm9)G)dIwI#=0XeDb>)XP! z4gcMG|5ilKTHzVb|2WTBes+1ZT>maSe*LVC$oY=&T!jBnqjTHqZ>4A#wD#aSz;_~Y zo(;%(zW&->(fptaLvo&t$XO>m#r%&mwV!`Zcn;vdtDkidIqQYT^*_@_Wi5#2=X=8A z*Yo;_obLzZr1n4mAw2$i|9(Wy^TOl$`IFvQKP;M`A4Kx=d_>L*f&8Q%AHEpL&kG_4 zu(Qjktk@}#7J;V(T_swiZw@)}JdH($8N{*31cNkLq&C9S96^=^kocm+qIoSGh4OIo zbFby0hT?dnPM@9g^E?vZVaV4b$oC@1s}^z7`jbKOZ0fy@D=7s+3&i@h>s&0)s0dOK zL2is7w?>frBgi)*$cqu=7Y4b~=I4Mx##tmMSF(=H4BV0qG{|KZnP`wgi!>SJX^T8$ zkjpLdoI$PvqWbx@L8e;dZw9%+B4?Y9u*xEr8RR;P#0+wcMLubeYKtTdGRq>X3^KRrWQ+X7AU9g%_Xar?2zv^Qe|o77`&p#FLC&$r#Rge#k?{t3-XawS@hp6y zLC&%~w;JRji#%YEZ&~C?gS1-Ydj`4BB3lgdWsB@G$h{W%lR?&52~l`L;oxw8+m5a=S(BkkBF{%pmbui_9~~cP#RNLA;W#HOMKJ=f?&)+akX=$YT~c z%?tz{x5yZSTwsye23cZ}TMhCJi#%eGr!4Y{LB4MhKHmmEzj5p&-D>xWd!;62=Z10`F{pE$)@!QjEdJHM;=iWCYn^kb0ZCJOTjG^DS~QCn9pVX|0MNuK?lqoxMDt{1Lo$iLru* zOa#(`w(22EffS(qc*t5HTLZ{1f!qk2_IUbpf(5JckQqSusXPzq0)(J>p6f?`3*_+t^6`&C&V_!SY9K=|@*``2v<&tm zTNz6ZSI_-Fh9~L*JViiwoNR07T7!74sWpOp+8|dTR<<*wZHaveVFP4kXK`l7qyLld zx+H!*g;*S1^_N%-f5pi0klzAfCwr#lxo`kE{Yaxh##)|l7~~Tc`LjVrS!60|hR4S& zax)O-C&wb+GCUsgE|BX3JY!Iw=Le8`fQ%0yKL=71K+Z>T#DelFgH%<`AC9mrn;JTCz05#TxbJlI$OxeCaj0PMm>se?|dOU(ytW)6;=s6=t5x<<55gwGIPn0p*&y5`65jkg>Y%1cH^NPsv zmtwTd&nyEAPoNY(jKmsXWBrSXB|L#xuSR0&(<98{J0_O!1Y&K9#L{QX7;Dr8{Ew$C zaiT5zYG*T%td*!aI`y1qfA~{e%u$P2bqEn2!M+3p4$z1E3P^E)=OXy9$^g&JKn4VO zo&!=G;Q0{9p#X9PJRh98FRf)jwgr%FKxheG4lf;~{h)`m02vzK;g(nT29Uo1;o-%) z5+1ZZfZPM5z#>EDwzc7h9IxSjcGe{GD|q>di6uM|^hY3cTpn`v#adDi84H9J?IE*) za3bI#EkJm9NEeWz0P-Xd)|bb_FSPdzAUlAd8}#wK2V`^r>2ryCKTpnJAjOu)|AyLs z0`;`9@IcdkZNq?_7-I1tPY=f*>qkKJsThV|dEI?ad$E?ASmX)D+9I(E@Sn%kvl=kR z>7hTI=S(c}DE22Hx%lOkqTi+Pbpd1u5d8UgD)5u`qp|#X{xQ((th@1_$IboE|E`-7 zY==T{kSCbu*MVeb72rRQ+g@IEn-^=~Wr~s~80!rno>uRek-W!?b-#&4o?xu45~~mX z^GLo``l1)>$0inejD8G4UPW?;kk%t8`6mEzC)9*3{_Z=g-8dL#nONir#-ek{&SD+# zSia>KU-n|1XJU~j80%+1ytLMo>|E@{8f#*aCm4&K!i$x2^V{%1S}N?=XJU~j80+VO zSQq#G`Tuyat~0U7gIE)*st3-RSc4zVn-Xgh{@aNZVL29>Si&R78X(l1hr9xWTJexS z0%5&*$XS=Gm++90K-h9U+j50C^e6zyR_N5Vi|1RxX+VP1-|- z0KuORnTel80b~gfdJ-?zV?f3SkWD~}E%JN(!aF>}3JZq~A7!c0&V-w$;Tv}oo15l0 zESQW}xo5V|pWm>gxVUge>7-JG*60TW@w#`a&=P(XuPs$bX?sIsvaG2ZpQ>-HO(weI znb@9eop;j3R5)9ElkmHWVf=tY2KvTTT&Fo1fw6WuG79Np(|W_@i-qMF~< zO{EPBT5HpmuBJ&oWth4MMoA;BQb&qXvCZV7wsO1#-xy8LjZ)~=!>BPXHF_v?U7cua z;|#}(nP@A9L10(v+IdMaG%+r@L|SaM;8{lp~Ht63Yg&=T{yyI8`N-> z0?OoTbm2%VWu%qj@)ZvE_>gPK%jm+$Q8d)eRnah4 zUXkG|99=YggppD-T;(Bdk&R(W32cOoYfD*FWU#`*;cht!hihEKFjYrN^9*W~N2xY| znG%t*QbtwI~lBlR%lt^bL!{NkCfuRJ=G_c{O8bF!q8aZ-|Nf?wSJbd_wQKsTR zX{L!8>lje(4{+gl9IiRJ zG`^s*d2VeZcC%rIs!t>HfZ1w#%K6Xl-q7Esj-HO`JX{R$M%z6xl7EbZrs6 zOpIaEn$elnp&&!AW7&s#tR=Bxuxj4ov67iHV^!7h$t7jeVw0rUvxI+UbyZo#6i5bp z6e%gaW@xd97#3!9w>>Gg0i`iWhEUxg(T`81WE3B}sQO`KPm(P0i6|+VG*uETvS3N9 zqy*XU@)Doo3-c-6hQ5~N+y#fi;OstMiE1OvzFP#mfa<*4XIlrv8JjjR*{0e zA~q`pT3HplCLknMURgamnv>F!N%6{(s*>_pb*w57VP(^>oDW zj9K^YQ)KdFwPZg=l`ko_NNH>`k);tN*#hHD&c|m2@O_%5+D6G0>QozDb?Nk3UaIcL zeu@oT8jDNSVyj#al62-aCzH*KLLk3~7J_8+{Sc;KoeP1ouVV%>*#Zonk zQn*M27pG=HJ5+(%PD>^X3~ZiWY(k-rQZ`&4ue&Q!5}#wJEB3zMEv!>9Dq{T{l}VCy zy^n8~{II}yg>WWrP7z?z@_p|&1ru|l9P-7*ZaL&zo85BASB0Y-$cbcA6G|h-&t$$a z9hIcjF;qNDTXic&7jU;zm$oz~>l1AafiWoCM@ebT&|${6XBtNxR4hYw>zRjzO{69h z30{Mm*O;hnEk1rBvrN8^UxF9pw+uZ9;wkBsqyN{`2;O`pjR2c!sr(~3@csbnqDy_e(m%suUnqW&#t5P_{p$h?gK3?WP;n6B*CFbsx&@v>h!XS zv3ME0t?Tqm`}S=gt?i4k+{T6G7YP^p(eFz|0?QeB9)>5ds^rpR4i?ew*S#XKrLPTs z@gl@i5}P$uWTgB)eTdn0w>sX4*EZF~RV8f^MhyL~aeHx$9zFe-u}WA+aD6VjUz_Q~ zhuEbHNs$LLNE;e9&vLI$Cq$Z%FVKAPDAGWbWtP?}T!8l>oNiesL_9hL(U+HtsMM{| zBu2GxWkYMn2*paRLnos~zm$+KQ`f z!_wg?^b^T-Wl4<@BZ73$7|~CNs|1q*H=0pCzdV+xE3S%N1vw=#vH03~^Aar)6zu?e z>czQW5T9S$(AeIZu+hZR7=}dMf<$~?J^Z38)E_#mtPvkNYntEKfF*}i3@y!V$%=|N z_|gP7x5gLMCg;_s44zwC7q`thmH7IlE%k|}lyNmEuB8uh@Ec7HwT%sJQsnZIN>SD< z9k!Jq9ff3AA*o7;@prypsU}T8KljFDTyZk+@_!31RbU*uA=bs)7S-ajjZ5l9g>HON zGpk5gnwpbZSN_^e&1#1%a~o@$Zff%<8KBtI)WJMOkHy%TlN%uhMx!OMsqmnY1j-iGE=Y*DV$OnfSBIjqMBNGNo+#NwM8WpC&ntPOG>B3;*!7W*_9XzAh-TOEv5&< zsF8W~iFr3+!2x?X##=D7Pnl^r1y`F=N#Zyb)!t+^k4-kyMrA+d)h~WjO~1CdSXxJO zQzD*#6 zE^VHJ*6NxZOUscQl$=N#HCSA+(ze?92^81$2I+E+`uEwnRjqa@>1!mIAfp*?RtB?~ zmSH}9(WLL4tAmI%Mvyj1&uzn<9!r+hCmxD?~(5%sV0Sl1;K9!QCY0 z1yQ3*NH%0K$;Rx47b`UusA9Cmmnv3UU#iwx+tR00skM)&)VJD-Z>?3VRBc6}Em~As zvHrj3+&i-~vy)A-(C7F0JpX54a?YH4&Y648J@;j1?%oSps12b+7nyi5Yx9QA%#me! zRT0F~{c5y2t@y}=x3$n^Jr>(eon|maEQ;xW)CC`^oRDWY*rTZ zS)VBeuT4GjniVGGF8&x|VjSwIA)y?GsK8nXN6_mfWF>W7oGVKRAAz=Pg!|FcmSe6w zsdkGASxQlnov%_=MUFDGJ9r8jTKAh^(@-^7!||wft_e9iTAHmnW{Zd1uO?(KB{g=T zkeVV(jHlM?Cm5BI8mohql2nEg{beWxU3RWcJ!hG+;!$@U?re=D>G2ILrY>D?;bQbS zX6^8~S{p@&+E*v4PeDVd&5(suI(vh7LVr5={+YhkQZr}Jc9gn%gT{pXnfv=V=MejA zYe5WM+-P{}eX2DdN2JM^r4+j^YkpE!W6aD@yDw`lQjj;^{%G}4)@&U`y~gaO)YVw? zmZ}nCMpEi$tQkpFiA_dQ=wJHDO)8oeT4u21F43pDVBTiZDHArV=2;VFhJ=X|=45^D zgoSLJK4Ft2XHeKA=#waH(&Rh}n*=$P!kl27O<_*4OsFs?n&(uQ(-sCxi-TD{AHK9K zT2xY2S?pVwyD$eYYcE-t6Ii=29~&tx%%}NB3v;xslosY-FQsCdhDD+!zT)x#CTmpt z0>$CZh54^92NtZ0$u46rf z$(ywi%6HJqC>zdRd`?BpqQ#}voOhOHJ@I?3VHKReg_&i6_!ZxUv%?asn)A(f3Nj;Z zsh2EbX;Ec)AmA;nDh^RF;k_1usRO};ou?M&)7DeQV8Vt|x@@4h%)h9zy1LqjSi-w# ziX7x6A76mzKE-Hl3~#6Sy%b2T?XjL{s0CPe2ora5TMM)3h+ntzwf0A&=P81Ioh=Fa zH6||7A!8C#crnM}=0zg*V#reDT*!_yzjS=o6x zb3E}QyC63&KR>G=J10&f4Dnk~P~h?8XJeK)CoOaO(`JbJ(vGIm2ZcBuziXkxxFZ=| ze}Z%P2*M19GsCoJ0i|p^AHNa>-;b6_z8TP0EHX;e-UjuOir+y4IlW!Gl92ffyOR<1 z(@{cPlfYM8Y+Q$&_->knU20b0cZc}p5FHt~uSe7@v+^B-w4dF=Eczc$2KWrSt5L#! zoR5I-zAciCM(= zVWiFjU*T<%&8$zZflDd$i=LI>`HJF8$F-flS3tiVJYBZ~!C}@X*Ni3lX*ll&i zg^QiO*Fb+2JU{$45FGvKI{|5LDIR9TA3J?i9-o2lz3)h_{`C2geB2$_g%2kk{n%eA(r1IP{Ib3;VO*4F(+jC)Disei;*Xua-Jo9x zzB%8OT>a@QL~2ttd*S)a$zU2DwLtNog zJd)Gi-h)WI1bo5oCD-Rf^7Y`kP4OWcw*Di1_k!ov`=!2-0Cx44>f2l38TEb1*Pp%g z8}_N-@jZ}SAC*TRc%D>z{pmXc`hE|d^arIry?hP71f~@F9iR2+%_!bs{KYV(54SSm zx>scFF#fJkM;%AbR@GEb@05(GGDN+##dTdUg@i?n@_nk zY6{dXfk2ssTJ0~Z!nE?bX&&<0hd8goSt;aJ7DL@3mOGC47O0WsE3wt{c}&z*wNhJ3@(er~*A~El{Le?WH^{ z!)dfP8}?DYasVlBxqu%7qKx%ppqRY|oDCLxjWIhaiM_g^RIqr?!t^|vmu58F7*2Yg zkj;J~Ini#rSjI?zV|flB#qwMmyNPbRxiyyU>MF@lEHA<7w6&Y-Diw1x%@s{0l&$4T z_gse4Sg!Mwee(e+FU2~zkbOR!uKw-Qi#25gTbO_NoVC-Dvr{!M?*54P`E@&r?*^T7NL!-ZuI@ z3Vmyj;nz8l&QuJy?cgl#LrxuyLTeH^JV<_zz+JgZ5pm?AxU5!?Vzk>)smp zvNTECGSS|?gx@KpV&-7V@H%DVH)9O;RsX53)P?Yqjhdz5YWreNDZae2JGZJm+$ zFQZa2a4`1Wuk6F~5Rc6sNWs2=`iC#s+ZX@YPD<7dE;jKT$g%k&W#5leuy3HT*$MXc z;YY4Ptb^Cnm5O4`uC#iQ+?QNqrQ@vwK#k#?j-NVYh?aIEN zr(oYe?aGPv_O(QsY4G`Sh>CzNeZ zreNDZ<>s-sts6fgjA>m9lYz zDYsuM+n!gp{U!z528zjP_T^^&c4mA~)?5MD-^;PV*!HTj?RUzy-=|=k-S-CL`0HeQ z+f1u7q|%}c#=c$3z895!FQs7LKxH@G-ahlUl>b24y{>F~L)nJe7egL9_aJ_fJ*Q8$ zuX8rvQHE$B?mL+BdrR54N7?wN6l}!1nuPB~#`t^#AEV@9YFGOC?DwCs^Ic`BuKo>bSP4s#J(*RckV&{q89|EQWz5|FESiQ%=u44eJ z0Y?CC1RM!SJ{|@5G1O$@)Q-D>z)=F?d|1m3&lXsN+WZceWXMmqVoCS!z6?!WGrvlaho(R|p zcoHDqsR|F^dcczbuLYb2_;tWcz|DZC0Nx6SnV$*%?gE{>(x1Qa>?7t_{7o|C@0B>$ znA!vOcLd*7n_`jf`Tvhx&UK6Os2zka!|B4=f|HI}@CDg$79jaN7w}}jJiyZc^8ptD z768@(&H-!$ECdVz&IMcnSOiFZI2+I!%U6L;el_}bq`F2O6}>pE?_x-Xc&^0xb5k3{ zzSU;2M?-@g1SG^W87r4&;s~YqT!vFS=>E%al5gs9(yQJ#tc#{zl*&jc(1ECehC zECnnBq<4hnfb>3e5g^%70ciEj1)z_{sU6mO{tYBp$G0Ry`C5YWgOl)w551nNPr=Q! z9t?ZOs9)m-RJEPzuI?Rk)y_cGrpY+uE2)lKZSvJpgCfe$GMv=9`*G5NU2{0D&qg8L-x}(#m^l$t?@%L#B(*^+Qhoq z9qNdz3I*{=YY-kH7w8@uquN9A35lCMHqOu(c7|4CJ*95h0FuwP;M5Mv-!fce;H0*S zjtFe0JVycZ0AqmoMk{&%ZvtEmcpu;zz@GrF1$-Ou%Yg3!UJi&pQhWsveT=vQ5N)8i z5)iQ~z6y9T;6}h+z^?(4f35#=EqbUU|!6ldD81IRL* zRFBJW(s2#!r+lMKddmU70T>3{40s9P^?+1%Hvp1tHv(GyMQsGdKlz6aYdyXOG;55K z43&2k&KX|(;X|*-mZ27Dw>eZTrb&=`jM_MgVpuv#4!kHHsV~(I%F8mGBXG{cNyp8w zlk#^f;HiM$0z4b=HbAQ9w*yk%zYS>h$70ZpIkx&^1JbSYTS$iPM`dtIqCc?y8tQB} zFN7vPX3ENIybUC^!_F}jGG;yzG&p89|0m*udN{1O5rzqA69UseE;U)li4FJV9` z)0Kc$zfjX`EI@0VtVg=_S(9YwzH@P&Y8NMJ@k8@O8sl9cs2zg~6K+R}H5ow4!!n#0 zzVlu%0OC&ANBR0LAo=4SK+MS$_X1L0?*kmF{a=He^?Rz({+UVak74mIZIMpy=8nt- zgYv=mVI%qAK|u1s4*|&sKLR8l{20*c1Fh{uG9T6$=mWLFQa7}=lj`niNqk`cVfn}$ zL2X7cPVLazPGcSDwTVrzi1)-N)x6^MZVK zFGilU!_E)CfSu%r{{|#KJO)U9*a1j>cpPx3ez2<(#(0>O#19D{sE^PIgNcQmu#tT5 zG$8rl89?&Evw-A-=KzQ51G{$7=z}wo_`v)z?Z_N382f(%`^f%XfMoxRfMowmfMoy6 zfJ3!^pcptaiTw#5gOAJw3GJd?J@_4LBp>_%kbLkuAo<`8K=Q$Ez@hrUZVY9Nf!RrX zVEJHtL>?GS47>&V$o{th$^Lf$$^Lf%$^JhB4%PmRkSj^j9{wWn83f}-xrnayqw5hl z0Qne<5B9=F^1(hp^1*&U^1)vL$p?P}9I6klgq(E_wJ`?9CypC+9~eK({!iHdA?zdj z4+4_?9|My8p8%5mp8^im{(;)T2}$fXf4n_14-BUK{{{QV{?7r){(l3K{a*l*{di;@ zvi$><|HLHr8$a+Kne~H<|8&?#_KyH0`$qzj{SH8~e-t3U&zVT?7Dl=&PbZg@Ro2z` zz2{@Uq4LT_!Maj!742*h#C{amKnOciR90bM9ly8KS0-jbD25j^X<{+<5^q%*e$QE7A%EKc zBSd+NkxAK?U>BsaV7cGBsE#G*ozQS$+O%dKO_^U%RCGyMsI{r5J+=gk^G3SsuqA+) zjCt#Y367aiO>`Sz?qF$#C1Jzfy2wti1*6K>qLCvo8 zldH=8m8JFAELkcUj)WTQAHr+$`*khHfQ-)y!BX1nL#K`aH4vZ#?A3%fLQ=&@P-(G? zT3?N?zOufux=PpXVC~hAqM!HTQAJ9O0=cTXUYaGBG)EyHuTq^zr6ToKR@DVd{9f!K zrQ6|B_p0&L1{x3^!mWfxBcbB_nhIZ)7^g_bf>hQ}Qd!*)mmdQfmLl=`Ybv}|4S_m6 zr(=;2fFJzllX<$u86d;E!Sc$b4K-qt((DG6EIzjZC0u{Le#dd3msOXVG>j)++MI={ zTHYprinY?2HeP9+2wFpxe~C$a5{M`p=_D-uARRavRB5f2q6Nhiq@aitzg9%YfvPgA zB~4YTjwgZ2s!9YB-B?RL9m#8~H4Z<4wySXYiq}-(th{ygsBB(;HEQ^hYJWq(ho^jb z3sar5ij`N_Vw)MPZePziLp4Ca;{}rxbr|d4z@pVv!Mf^lY;oqT;Tm5zm8us#P4i;@ zMMZUJQg{O}3P3DajS#Fyyj1zP*&_C|0ommb)2ple=i|H5NH+-$8&C-MP`_wr!2%_i zJ}5zyUVV_|$S-!SjKM^0TRP9__RUTvRNTx3Uta@9`TZqc#BNP(Wpyn=9nPplq=-`# zSGus}s;uI+4<7+Xx>rsj2Y5@WYwJP+w>bvXp zXC+mP^Uw>Wi<-#lPvem4okn4tFz>gEfIN_|M_4rHg1VSX*CTS=x?`9V^0!Z0!EHwk#BF?hbdM za}i$xV*@cVTS-$i#H`-#?xwXUSfwSoj!du#x(J#7}{dQ~%)ieJ?f#C|QYU^t4|Uag_-P-k<9J5vu{ zh(u$a(gjzo)!LaRd9 zbU}U>_iA)BSq}HuL9-VXMdWG=*a-u3F&yq=haeim-mDN?05O-HSX-zapP@~8UX_ix z&@mE>=eQj5BT|yS3`L!{@ELv2=*Kot>&~eyK z2ki^f)Pm(K;`f^a-j4^z3-dI2+=PPRBRj#S6)Uhe~wcpxJd#o&~YJ zc49K*@X|jN#@CSeeaN1-h9IEdiCTo+c7h#|mL8)el%Q*3`rh%i(^GvO;?k8yYPVq|N~Yh(*B~ z+%p3N8XnV_Md~KXG_W-2JX1i~gubkX+8@6UBfc7Jg;$M{9JLA_@b-i|>kBc{#o@mE zczmnoJ!!ew+N57%RKVn5h0lv86Bg|v+j)RZijK!Ef{Pj|%dilK!~Jx!Ce7S);77y` z_ruEZ{WWUAAhmaxj@*QOg1Ttm=1_MO9R|1lC&LEX!4EyF!#(m#*2a{dF4)Jj@$6Ak zDvOKag2r}+;z}4h@k7grV5D9$*nnmJF#f8qTtZ_2tc+LZt19)eE5?y4$m4t)a*S%4 zIe+BilJil{S~CoPqZuZL%N%k1P(SekSPgAI?P6YwnvLaYsK2`KL{qBXGvL9%;l2Pv zEQ2U7tu3gBqOq4Dp)MqMz z+iw;(^y*wFJ?1=U!!OSGJ7&>(GMaUsix@IyJifax=lI>zOv#+5hFG{g%32TNlea;* zz83qSaA9cmM^L$Lp`bPP%f6~5mDmw7xFi=3s}A?w{ihcd&FksJQc9tgGpTntvu6Ru zWDfTOLy@rRh%OKw=$Ocrfrc;oxWv#1Q13lms2Z-qh-!RYiM>hPm9ZXk%nN zuHqR7)q6Au2uF?3uMt`Oj;jnIO6>?`cQo$a-V$CFjBzz42eC(xIjyNIsjl`Ha!B8(EU&8! z)Lawtb`3l`0l7YsBIHxoqS)AK(*kS#|+mrIU}B zRHNOcz=$CYd%)ovK#Wr_#r1jIMpNJ6hG?)|nMfuPJ5*s8dJ?9pQGsR+>w&R9-j_GU z=Xk!P0VK6?${l(y!!5)_DjZ`Y-GY%qunW6whnw-{%HjSLO+deep*09p61iXwa1H2x zjJulJ^k7UI=E`nhF|tsO4c74{!r>k>1(Aej+S2w&6uUTLx{bqqmGW>6yv}U_^;z6y z(a7qn#yB-J8x%-XCU~_{ zhP+UJtk+iVA&B8bIHRPpz7Azb!-i{B#!THaLJIW=Z>v<*;%1GWBgrh|?(;k#KW%6p z(;f`Gl)V8&O~o4Tdo>kg4?Rt&hY51D7Ab5m`IaVMqT?OVx1@`Db7~Uc8wyH_S!2lJ zQphHSQpZ#DtDvN7s=`4P;G~RVA{dTf$`luP7lgSsP?tBx8nT*ga&GpW!{|i^=82_E zUHi!RSFT_CUiihyH!S`0h3HvInBH*3g|9t0ef<8rW{udt_oO%O!3u;-e{S7~6(jE2 z^1=DHZr$*}*56_>;cHAE_t|p~-d_6jFF)`+_UpS>{{A7%qrwd`(!7668@Kd$fB5;= z4lR7~i%T!!xi+A`^yQbI{o>zwI7R6So08n^6NE=KXbKwT$DNM^}h(=Nhdwsh<8J`Q$$@CL%X?gO>gXeDeeBPo5et4hjpZM<0bl)4Zy*u*XeDTIFKlJhq zPZmFeInXGsjI`&LZ2RMq+28-xx_QT5{ey4(trJDWbk{A%fACDtSN87DyDWY9NdsX3TXtMb)|6pPEwll*L?V5?(R{yy>YMD`mYI%}PJU;Qm1Ao2AmwzSC`4{KX$Bj@?BQ53K*s<1wg}hNUTSAT6n(&QS#XHj6jXf|s zA_{M8ZtlTQsS#ZTvCeK2%|(q}-H{d8Kh8s|#78|d*Ay0<)<_$`MOH^WmxN={#_X)d zF!qA$f$r?A*;%u(JY`DRq?xm5Z0^F2`;-UUSqXn zwRZ5Ta1^`0dZMu&w4k2sJoJ65n)N<$6<*Y|l4&W%4!y3x`>ponP0g32q{Z5IwTaC7 zEKg==d6#ECK)B08*Lj{SSVhVGKH41Zz*L2!$otA-dAC37(ibjRG#4?3B#WtO`U8n5__6L?I z#8{6omzbw8r?^_DU8~bx1BTx@;~tqPCc<1|roxT!06^1fbm{SxxWvWY*Da0DFrib}Gyzo>7=noZynFF5yv_Q`7_7 z!xDEY%q8wom{T0qX?UN(d`^)E>`yGwt1y??pfIP{t<(1Cv$FF8+5uqiu*AGE5_5@Sg*nAdI&F(idmh-kEHP!Q#1N+ngI{#o$R zB@QbL zqt|XD#X*I+#36+_Mce5z)g{^$hSmaD8cPhHB{9U6!knT@r^R&IGr)$i#Dp^><`PpB zhQ3y(U8~df0K<9*$kiEVN({bI7+N2lcDqj718lgIm@P3#D9kBt*J*d^w0D6W!xC9% zNz5hk6o&H9Y4_{2{lMs#up>obmc%e-P?%FZsMEIUw1dD#vP5yV#L#yu%qh0&v~4== z5HJTzl;ubav8ymh=(KG*?GUh0QX*GkkWd)LK00l?PCE?D$r2TL5_1W^!XTm3w(GRR zz+6%yUt*9@7$QQaJ*v|%bw-S43BSTndlUuvI_*)NcFaQToCOJ&7^N_$I2qV+OglwkPX68P1!CgFMO$twe1GrV=ls`( zQFHGIFRniZ)xlTPNLxZS2G)A8AtW|5F~0i4ZjjZbn2$-X{v_Tg_f3%(v%6ZBi+_Cd zVFCKP~GFJz# z%=AX2HiJ9Ha*dD(K}QG@VbE6rYepK~dp7jZ5k@-QaSiUi0KZ1`;A^Z$%)md7DQzCE zqo7;{-XQJ}1;k#1Qb#Ah$@H8OJ;OsgU3yM|#?)SuTA%9i%?ukLdKS$0WO-)H@W`uq z9{vJCyB%@{!glxnU+L$8eQ~t>UXPM3$7!AnUW78n_)JgJ=Yz`x(Bo?b(s*K8!pw1v#c*%S{Bgw**H8D? z=8((8c$%D8ttpMu)m-ufUB>z3R$cKa<%#F6jGyVmpYXJ-GEk@{r}`d9bj|5al4@S>Vai^FHmAD8{<5LP0ZG5R`@=8~nKq4ca@_ixp4aeWKYkXhy{rRFNpMO5Cf3%r-@ycW41kyiu z<(N2u^v_&5HclY@lUHWM2_#~3L)`D&O@YHJ-F<<>Y>mvu^V$*5&$zfQY47+rLE1YZ zPLTFaj1va5*UUO6ehJ;NX)7ni38dS-a&nvi-7y=}*aSWQCib2gE2qQ>lzW5gNPmCo z4CN!@3dp#1E7Rfx(%8OoSe!sQFI<@(Cy>bEmBZr%5}CX5m^gt%X099=Cy>bGl_TN= z66rUissMHSR~{c1WQXPK*caG$PMk>E^5d6u`xz^bixcSf1~2t+Xt=1~lV69SR)+&`7S4r8+j9=0n4B6>CQV0km^2*?LDF=z zF8!si-`_<&j9$aIzl@D~+INV0&wV2mg1UPyzsl%qaMW^Fw0`GkYE-3OUFx7F#YkV^ zppBGX8+EAzniL~_fde*DdL7lJ_G?m%^ab|YNa;0Km*UKmU9v+B?6r~7>$5KPu68d* z`U3CTNa?j)m)fIAG13>hPk>!C~S(xe#a3+%Fy(%TeW>Um9yk-ot5Hd1;^qf0%bNiotFc*aIbZ+~>D zothLQeSw`eQhKYTOYP9480ib_u#wW+DqZSPO^T7ez@s)&dJCpYZP%n2=?iSPkQeV>QjGKk?zfTB z+e=;Q9!-jozQ8>;QhFf(?&{fdv&SXH7Q2=0=L^p=`F4VsifN?yTf%d%5=jg+8(1E^y zV=w9IYdGAxsbqMc@9@~iDu!=-_A8+_MIQTD$?(Vb469+b^*gCu*^~zMzG0hu2en>+ z9-h`eo`wf2q>#j1-=TFLYNye{s~a3#|HSZ34F~&t2iETxzR7oB->>&kbAwg1=>ERL zb{XdJs42ew8k^yJG6dB+9uy2q>O#++~IQ@C?mcDkWd*399;kS z@J)e(eGLaVN63hNcQu~G_4-15Ta`YLiXMM^SS|56&Q+cmO+JGk*>93(<4a%32M@XM z@jneaccpx}uUukuqUKF%%{HaM4-JQ(9>#t!mm1qY8kx=A(YncZIBsR!-3K*yp8^Z} z+!!D1v09mH zwteL=2K|+6kGU@DRE}!0pWo-wLP(`uvr7NblVe#96xP5SI#qiek?^Bqy zZdz=J%3O70@}=h8c=4zlI&|+MLa8G^NS=-RPKyvSWNzTlx)Y$ZkDm6fn{YLX7?E@E zy3tp%vVAY@BmX&+{~Y8dWzE@7tUF0v_PMVs`|9u-=@`gfBW0gz;}VteaNUIKhT}3Z zg!+63Hx1KbALVi7ep*iVE)vcC70P_mb+l;i(;E-rFA?{R?PHvxoRL0e;8_1AF|9kL zZzGBHIr{key3yBje)_JX)T=ifOUvr+dqgH~`sM*#UHMD;i}e~rblARQB=<%lJ+@^ zSg(#eqGbm%v`+ z)Zgl~H-Wv(w6W+<nt0tz#uRR;ObvI@Y6OU(>P2bnF#iukk(J0rnDO2ldqSbUAH# zf;bb{A2_ubn3Omdn9S939gFJN1|7Q**e;g68<@26C&1+0-URkrPW@cRrlMz;wD~%A zk&dm?v2W|xFLmrq9s69zrecDW3Q`?ik#QpeuZvCnmE>Ihw*j$Nc<>vZhf zI`&H)dsD|g*RiQ1HGK<#NuLIQO@LoUh$X-#G8P0jiLo|d&$8EgfJuq z*f)V;RwuN42bh%j0Wc}?b6}XkiPR^6VLm3XUjsXVG5X1%l=u@cDe-q;m_G@=L%=XE z5?Go8Tg))#1STaW1CtV`0P}F_Y+xrdHV4==#)^SSi2yJuaUrnjoZ12`ld%q9r!ck( zn3Px#OiEl2YzC)(3)rcQeHYkF#vTMFC4LS}N<0nhG)~vZunFQq zU{WFs40GR*+6@eI+JJo-SRP{=fIZ6+*8`IhcL2i-HSpaJtbnnf0K<$j&>jKyEK58M zOiH{8tdLXx2y8B6?*S`f>;SN5S>khGQo@CA>}PZ81Yq+Rn+j|`V>5tBiCkb(!V7Ex zr!EGzkg+;o#f&uqlM-QIQerhQFQ@hbD`9LCuu{fu0462w0461V2&{}#9|GoM>@i^F zjL{DUq{OShq{KVG7IEr+U=@sg46Kr|e*=>eE|(^89I(ZlIt|!4jLib(XDknxl<)$R z_oxOI;MAqSsu*hmR?XN-U{Yc=Fe$MSSPiFs9oV^y-2$wZu{(iDi5~)!62Aae$EiDk z)id@RU=57@4w#g92bh%j5ZDq<{THzF7)u{5H>nvRMgx-)#{rWPrvf{l`Lcjrz}Q@1 z7cy1?OiEM(lM)vJYvj~cU>7kK0d_HCYk*0KjliVDjlhDOdONUXjNJ>YiLoC6lM=rG zCMBK)wwzO60@lpf8^Br^dl#6Ln0PF2N`|_12CxvP&I9%YunA%nuvZ!T4KSMWJVAV+ z)3U~3qXw2J2lgbVUJ7gl)2;+2wOj-2aZY_7*z1g)Iu?^rnC}c=D;diLb_rvJz-X%G z2r(bnuUX=JVC|fGF|ZECLcls1TM0}`M1V<&tAIr~^;%$EjNJ(AQpUCblM>$sCM8|~ z*3GGJ0h77k3ryzzj10{iZ8{bK7G;S|z@!fz05*wpe+by`kvc)la0{`6G5Wbkj3p|8 z$x>JXY%C-uh+BXiV!qpf^)TPPI^REl?dH_daq?$K6U2?c{>ZeKfzh~Yf*3zu^YiJz z{=&4VPP+!!ds0HDeE@7P({j<3$}(CE?5|9_QKvlsY#-D9q0^ibC4SC~310y_BaL08uZ+b2vxxu2_V*xTzovzdKN= znAfi`r+|y-Ga|iO3ph48t(@ zN19qat*A&_Mvc6o>D9O-^uQaur4sfHYD3Y++QLzx?FD!?Tqu8-ZSYu@K>^*L4)RbY zW87`@Ql6@W+7S$pJoh|K={drr=LmCh)swWHiqGIVM=QUvY2D? zI`ojen$1>UUXC>Du8Jf>`6fHkz4*h2+zr#b#h<2C_OPTO zBHKU~Kc_!?>5r_#L>wVT;je6V#{i=;nIOp8k8#pHwF9k->9E%DC{n9MxgL?kOfnQF z6sy35BAhkF`6H+N|RqbIJHB|XBr3^ zUaS1}8_=ZR2$Oyz48OC$UrF1pFpft#K@9K0*lql3%x3b*u@LzKPJ73lh7<=*?I6dI z)5*zH$*CBu+pUod@tlJ5(;WQaLk6bY0}!)b$vH;F8XNqfYB=p2rpKiggvQED_n{y( zR_1TRS#jX#=olZKe)%P;cvMo&^$xwAc8z!F6%37q!wWW%Run-FSNK*+e!=d?z_6+;dR8@Cr zk3Vv$2PedXomdSx-fi(!B{^2_8+Z&q#7M&Er)ibTQ^H38M2%FG2Dwke8^~R2}iLM-`XIpSvJVhNQl@r zO(h`Riz3zu*r@1VSAPG7^802$Dxd2CX93;-m<@O%U@_oLfMtN+1S|)<8IbaR3*cx# z8X?N^B21PSVfa~@O2rTJ6{bh}`gM+sb?&hb@#hR#O8X}4!{>F!`u8*N>GSaV$A@v* z$vQysLFJ8czK)UKt<7!$Xhhe_#9AI}k#?4)UXTox2gU0P^YModSstzJO)G|44&zm= zpv6{chY{8xs|63J$amU7_onh00XR<)uYzAGKUV`%Te%64%I6xu69M}GDX-T8lK+2) zQ~IAU>3_mxeUY>sxRx}nzRHW#?oRK_B`Z3 zHR=YtI<)3Hp^M{)Gvjeaf@DflJR4COu1-^sJ7oToIj4I;{169cb231IbXlP^b>Gcoj?g$a*`taMj!3q11i4 zzqRhS!LyVn)Gx04D*=zkHKKysfObI2ZwDaN{omr0B|w-g0m9@XgQStyB+XFwAI_jr z2KL^=mxn#BU1)GyH@W*CZ_EH+GXH)R>2odZD#?&79-MvDaPgs!H)1{Aoxwkc6KDqHRzvSjL+Ow+3m&d@Rq*bzkE& zL#q2HV6TYjIyqP^h3c^9K+}p4kJ&y#s<9oQJRHDj^xOsT6kRt0Qr<2Cq$qp}r}P|Q z(sP74#ohQzzHw2T!I<=>4v`TZf_))6wv5YJ4Ui*&!I1y{8yXSWaFW^F)R zfx8ClVpwUv15a}ri8Ea}f$T(UNJm~FS;m2+b=u79i z>5B^;Tfl5Tx~6>JkJDII8-~fU+6YMY;F}-DgRnvQ1C> zbdnvcXYTzLN?{f)R2J8hH>WV07A!MSa&}rNxzAWBdCyxZ z`FpICf_JTyIeV>?!oya|Tq-PMe&%Kkw^FicX*Cm14lS`}qU3t4l)OAECBM*0DVS%a z%%LUQOqvVpt(3V-&6L8dtad9UyUR++iCHPR*IFrgo2``mo2-m8Y4_YaOTdkD2 z&s!+jS-Y&1>{qOmoc&fx?g1+$@1T{E?|=ghJ}k^G7;UA@p?BXVoRlNh(4 z;P_awch(9yCNhqZkZthn$6t+a1Y<@$$P##_uoi3$|L$!!BSf3n}Sohw)d-kJF&1B}|eu)=W>EK!0%_yZ`I2C+eX$Ug>Ex#?thR zHt3N)9K$@P;V)b$R(|*CoQx=ZpkB z^xiN%%};-E7G&*uFi{VEN`&pmu$G^333}KwX$9cK5K2t?)61tO>Y-=W^fX%7P17?W zK@WlpJd`UsVxsHJL_L#{lAg93e>FXm67*2yq^Hpn2Ic2F_x}3UL_Nnbk5SK*1U>Yw zDLpMu>G}09UxW~8G{*Cnn1>d6)ADnCf*vZV^t2iHOUFrnxqnZh9=y!~&q4gv^qi2O zhh7_{r%_Z>{It~Gd1;~^dOntVsHV|zVuBtIsIp#=HKl5Ra*Lki|lw)+t_d!_(-Zhdi1mX? z_@Sz~ctuHNBFQXu3MlCD<01xZjCvi%JWQXZD0BfmrM2~$OG_K*Y6ecJCyg#m#{wnA zJfa0x!60_@?TTRTUw2dIicoV~sQD6F>5aBBTZlaZBF*?>Ks(hG7oYE~@h+{XDJd(y zKrC$S4uuRUOASeeZ!^Vmen@fgxnAE=AIaf^O`KTb^AQnw;0-tJzfA;#;f^k_s8qa% z?7)W~?X5cPP#k~3zHnjYV5T${p9>>k&(fvH5pT9qtfulIrzPH{u<^V+>+Wa8#aS1C zePLFd)$1!(?pPQM`b-n5boJWDz+!yLE-v=M59j3pmAj}G7n4uuJOAz`fcBej?(*3s0C zpjeqij`K=)=~pvz=!$LF7Lpe@FudL+S;gKG{NcdDqzRc-#EdV&SH?LmI$Ig}2>Ua4 zP`2?3I@F>kY3{S3YLmOnypkFWw+2^4BDxRFJciHa<^&WrIgU2i2&!77GjOmehA3Rz z9$eF=3WaJ1nV?cbEh|DiiN{tpyRx148^V5v_TpG`F@_Z*!DlN^8EjtO9$9Xiib9n> zv`t;!)Pm%$Pz-YkBb~M^U6Dw45TB`<+ia6NBbZf8?n&^z(F533Jcb=(qrv6vO`VrS zZ8cF|sLZj0c(*M>+uE+SkbNdwdX|SHJ@$IBrDaolS6dV2quDcbz`yNl$xXJmMX3f` z!)toFY*Q)Ms#@5lx1ho8PcsUw`I3H9yCbXnP3!4wU)67-rOmMfqx7Pwrdv2H?SLiK zt_`rT^w;KSY^^=0Ec_8Q?y?$hgWPUWHlYi%!gnx_es%O<)bvWm8h=AhA%q&_|GI@ywavxWU}8JZm` zOf+exdvQ~zxqC3Y&=JIDel0;$bEMy0TBTU5O`1KIZSA&awW;FvjMjQ?&t({-S#||N^H+$sLA#Wrs{0ZVyM$bhGGncLd`wcHk&4UV#J0HA#zDLRGcRkTBc_d zFU($u!Abw)tK#Ch#d*PVykenc{F009lWR+>%Y4PfB{W2f-;wWS;m_3S6Xus^78mE% z6wv6(E1Yr_c=|9rJF5%^E*4)7bVCoR`yEN#o(nFuio5q!zq)>BgJM-<3(mn*fSMMv3ubGo>uU z`JKgt#Si8)d~l`|`myW36ZndYjW1@2?-v+kzf~*5w=my@j_>32h?-@RZw=Gv&to|A zTCl?jPCDr2UYt+95GDE)oG*k3iyxj0=rep+rxbe0@gDeo-zxcz0VvLZy@nUiltPab zqgD_WKkW3;tH{~l%W0E*{pq6@YAuRK(`cuUUL~#vUof0p9~JHOiYJ-ASCDu+__|gm z*GDe}?*`8f#YYcjcKN##^jE+W!|XXa@Lt5=Kl!4Y=yH?4d%Xa$W?elmfe+4|(D?aMB?CLM&?>6v6FCSRnz2Mod_>$>+0zBVZmt5aX zNPZqX%f2G{=rxsH{`P{t6+Bz6kbGwU#qFJh@{Izp>)$Q_{UCU%Hb}nV0CxHgfxZenof{=zfA-P`wL2A$u6;bo5sqRDY*~=TpVkpS>C2J8ctb ziXV3VBYkthckDHiuRncmBrjAvn#TV0)qpRvZ(w~(6wg5VR)Fv9Ym@84TWHatcm~pU z1^DW&v*?SiiO)<#68UeV;?eYpVOe4}vt_Q)XnTNs6MQ{imy|I8#UiWN_+pt-@?^5< zZ?DMOVVn?2i4L4;-!QSEeqelRcvVcPq;C}X<}2P~aZUHd0Q{_SZ>7JoJWz>!Zt6=b zilzl28?37@tE>)I)>Q}3t1R;c>uP+ZmF1Pb+Pe8!(`-Znb)`W(NzBI{?zZWb^}bqf zJ@%g|^OZC#3i^FZeE#`4HkxYj)E({!`NPY*o4VJ|50te8%j9oc%R-;-p5!C(r1Ma$~PoSDoe5F4_<<2 z;eAKGQJ|+2`xLjd_H;J4hhqH;W#*+<~is&!T{ALv@P4hZxb?-QQ3@&m%gUQ>};?i&Y4*=hT!s4HvjRAq!(@(&#A(oBr zyK*AGyv`AZpQde5+6hpeHUnnh)Ec4b_&RkCuA#b@9@I_&yb^E*AT`XV0^R@!TY7H- zJRR^^z*&G_0L})ar?;~JPXvTTy>)=ufSUkw0s8>a67=2(m=Ab6U?HG2{vyyvd83n# z6{9F0!}a)U1no3qIQ0{MYM!&w0Kgl3UEYc-Q z{3Be<#Hk&W@69-e;Y6hHQ3Ai$11q)h|35+Z;M8(Y{-22}t^SWdxt-mQ|GOixrdTN0 zj@3Ov#d=e)6klG-Rbzk>@fw9KB{CQVnK?(UBKycyWWh%t;(P{Yp{3rF52+0H;{4^A z_``>a6{C$@|2-<5fadjh{ombR%xLxhpI^eTGStjJ(Af)Ss{e?FAjc5})*cW?qe?H2 ztjWQ;Y%Vv2A#usT3d&%j=7M5p8D&EqWCz6#LV%ZdB60;{hHR?@tOZ;Qh=(9rl&W_l zpdavhzyRR40jmIi0$2_BIA9H+wa#~f?ocOy__dRMG9p)5As>GeXOYFnBm*{H4(Tj3 zVDeBtUV{%T^qMsoqPNxTWzw%5aW4zBvfAn?dowL9>kmMH)9?aDR>m0QV-fUpO`Xm1 zS7{)S&nOnOgYrc_OUDU$K0b%dl-GX)Qu~S_bAk`HgPhC> zT5#@>$zOYLY6sas{yGllD~h-jaYBkN0-Onm5nV6ZY+9tO7xjtiXm1T*6Cm}6&4BcB zp#^XgU$Ov(-WR~NQTm1#(CYz_`^q z@s^$wtf{T6uC1&;KUh^=8}Rz^hCyEz&^G>JXcTHqYO?Z zPmHQ8sb)nJOp35$HkpcL4@SD{rjplaG7p}Unqx&pb-wywjknetP>%6d!berrRX)5H zlI&>%vdcHO)m8rU(N;^LVFL=`9_p1Z3!ZGUPG#9_)fBT;4Ss*Hx@57hv>raLYlmGwcs=_%%$#xaZ!zti}l3B%6#K(9cyGV2TCWjpF~)uJHkm#^0E zEk*WA2EK1eB+{Pr#Jn8Sf>o&0_^9HeI$d8|?GO5@yd{30$WhG0L^9@p zcWJQ1TUCb7JM|UZYS0aaCzUCyE3FCEdlzw^Kgs~%WI4hpcMhXh1{Ot-)>W6I&+^s`#!Y3Bp5^VKq;5J@INY^}(_l0htgWxFENyR! zMk~VT47!`!)|Q2$&E4TH^x@d$!QpNoMrJE%iiVig+uhx?7UKh@CAp4Fu+i5D{bu;A zg^x<1>g6r_CZ`RyETq*G<88tdA57M=_1IHPju#3q#vgu1Q@LhP3iyna?lB4ETMs!#y6| zD5`Qn9tJKBcMq<*qZr`?W2i6=_at?*U{egCyBt&0qeVrbRkWnGT&CEo(GgV+_t-(R z7ZuTxUHD8G3WhLdak!5if+(%#4Y36fbJ>Zth1xNp-jwH6*?3nQBf)r%%OO7^b@`$q zl@GE!eUN&3qF8Dyo`n*Ke!z+IdVtehxWXR!DbSR9a-Q)Km zd)^v?fPN=xKX%&*c0^iwjFwQAULFLauK8F9T#Cn}nuhZ*KF7%2!TnmYj;h@6T~vp6 zyAJn76R|HyEv6=*)8h(B!)R@F_DNuPj@PM}`+*x0UHw6y&<;P<(NImuO+@x*NFEPkwaPS4+z%@^_t&xogVgBp3~>5=f_(Fi zfeaqv9qyB1!+98-;Caj89*M_Ob3;o@2`^xe&c=gYO{pxL8Q?w3kEcnCOEZI50HeF9 zWG&jeU`{s1cn2VpJ2u6A?3^w4o1|4U8LdWQuW>i zpXMCy3-I)0NaUUtkJJu+tTH6jh2&_l6l*KOAMiMb#O}m9pNBd8xbsQSG1Yu$Rvwkl z&QWZpzs8GpwtT2Dr^&T|oK#*D`YTAbr|PctQRo*H7|_9$yT zc$_JUDh>sN7~z$ghQ+G^~>SD!bB=6 zDvh*b07C-+de6trhKf0AM(Qdr@CE59&A|^JwIM9d-5iRRM!G9nx~s6k2Hu$96-l@= z6y-Q&9db-TK};&jxN1^$qlb$D9xb@UHp4gET50cgD)G9*OLd5Qk)8=^(_jZR4_)Bk7LMu$jnZrfY1D8!&^~C5OpIfThmUHUsXJK?AgP)Awa41n z7y{7{+|*K$Kkn1Ub)3)9$V+=mcoha*n*Z5Z$Tu-VwF8l3|fN-u)(i)H+lNv2+k>+`rHq3+C$+XUN{U&s%{ zj@#x+GpJrxpiRXjIUXu6j^C<6&JyE3Fh|c2hP<3b8tqcktGr8b!_m$S*F-9LV;|Fk zVNI|L&m!Swya02!KgDg#-HM^4wRVb%ITy?Uu9*Fg(^pfM6pVTB`>|+D>%|r$3+0t~ z!lfYZM)u{57BLQ&W2PW#@xrULJrbo~wUeK&Qsq~J5a9x$9+*2|8Wnz(yja>$S6>|n z)}3Eh?+XMmD-rL-(2XxzgbqqR+;fmq>t?JIhQ^I*Sf>`W{K`TWH_EdD&z8t7)f>I# z;I55^J=dztnFbsPT2x|xJa(x+qW7g_nyLw-<4mSEP4D{4_pbirM{nNw+8M`vaC|NAAVd6DT=?39)5q_>Yu1SUdrx}f z9=V)$M%r`hMywcd*Om{?zjf<|2e$rpDK=Kb4KmX1@n%0i>Wf$3y7s0jf60!^Uc_c< zO#jstC40_#`=wE5kGkg7O}F*_PJXM-Nb_$WH){Hh%X_aWD!bsv%V`OdcbWgCFTeck z7axD);M%^ECja!>3rFDn|1i@3$zN~Jefa%fG(ViZt*|3|;*FRW!1M#9tFunI={x&Q zdFF>N_I>BBES zdojMTGktjD^e6AQXL`-8XP^H4CExw@QheWHdU;jz@$W1>c*dx%6ZTw@f9NsHJHW@n zjICCxks=JupyzZ9Xd55p|J}`6Gn!KIkv+$jj=`|m|n7ez_ zZExHww*Kpe=8NH8XsL}9x&+{I6;M0G0|9ShaYiBlW`zG}K1Mxq}g+HO9M*N)klE#j;o)uwgp<6gq`5oT66%O3ym1xARiW-iymP`Ji!Nrj4OvHXa}UO&jTmNku82auxu~(L zJF?kBKIn<&=XO6ctvMQ`QgH*(L*y9&{*Eod`U`LlvUiuA92v&;TqxB5{@7%M-+Xe zs2PjE(9`;AO=F5BFW-Y572C8d$&CXr>}n0KI6_lZB%reK;yWpoAxA=c6i?5oMK;Sr zm|CeLG^fW>a`ds{NL6-FGlr+dsC=6kZR!dixk{`U80lUsRizkMA-McVGa_ru(eRSd z@zS`XkvA>kp|QDZZSY8Ik&1TeS7OnYBh4W9QJqJn44Ubs%2CNr52h19(a>Yc*uNZs zeE8@!<$B>a#oGG!4R%!QjzlA^G0&=S6qDFJ(O3_<08e%v#u2NU_3_0jyjW~K(g5Q2 z1s=T9?DXeayTqVSZ7#d?pjo;|_-S^h;+*q13hfn0s;P0Ptx_B>8 z!khvRE;J(yG&~A1<`h|YqWgepc?xri6~NwS8qKpM%qhMDY%kMj&Mje1aTplg4FhyM z&k^Pn(}2nQ&QO?>p8_QxEp{sT=&5%XBu3H}BQ!q^TKo!giYTzZGHtcOoZ=Z^Bms*Q z=H%x*Df3m-%yxS90W$1UE+|!-~&93$$QLDm{Z&XO!D2YFsB%er>)l@i;YthhK*Ac z<`l2#wB0(5HVXX%OVDEBgt^2rg+W56?bc}-c(TGQNZg}QVUSRmQ#hR3mY<^)<`f5j zy}=S56zoTQk4%L*#YMpAt%XZ8Dao5_c-hDO!$|TeFSiNZ7liYa4cs!N=pFsJAO_9pm7iboZOopTk2g>}cu zRF}w97@`E&A6a6X!dzmz!kl7ehD>z{+MJyDa1UT_$$Kaa_fQye<(8?)mBO5YUYPG; ziQNiwi9HH~H}D)zsV*^3VNP)aUTCGER=LE@3Ui7d0i(H>F7aOqbBf;s8^*LZ6y_9Z z6Y#9ev||*8djLyk+B}6h#Zq9CnbxQY2QS8&w$bI30&gm3Ui9rfjOD>M};}X zN5JSetS<41!kl6<-m$uv_9ca(#RPT|)AAJN6ia}OX4(Y`bBbE#Prg)&3Jw+E@y0pu7vg79+PHhk_pMAO%Wu5g0*rL(R&eJAo#?qTm?ZyK|nzTselSsP*6~~ zR4*?t=eh8-fOS5_S&y?mOua8=hlAXeeYQD z+4LDnsF=5TW_-0r@{?ti8&GP}{3e(7zXlf{>akOAe z#hp1(cyo)wW@QqU9TowY=>QM>M0v~^W(BuB9%C5>BX@aoRk^q zNPz7oZ<$)bUZk<83_)2YO(P86q{jUy{D{T9Eu9?%K}J+{hSKm#Ip0N?6On#C?vqZf zV^G2=oXj{YvJL08#&DMFES%%o9*N>aWE#8qqc|0o!4CQq;(PF>2dBHzks;g@h#3Tw zgZF(%=?K&?{_@73g|~fx&PuwokRk;fDWpgvek($Kc*ndK$Y-y4zHCHrO(OTY$m#g4 z!hJmcMLq9U;_q?9TmT#nau~<6A0b}p5t&wt9*5e42&w3Cti%7sdiJL#qjjf8tD?sr zAI0P${#qH8MGcH~`h^&8eY7KU4*p5G|D*H^;FGsFJsdKL2_7uoHvgYbo&V3LkSyxD zx2(_pr}z}#!aVQIL8{gM>-gJw>F#;!CA9bloma$P?Z2L}JKA2nFV0b1WM|up&oSnQ z@jZJXeChY6nLo>~Xj9+RoPFnuSG3KN=&MhAarTEl4e)?>v+unBw3jYEU}yJ>_*m)= zBEttbcdVQC!WNTy_N{ky+Jv{>zwU~*=LGAH`0kzEyLU3ljxrOO1Kic+MevkP^vuq- zXLeTZjK8>}bJ`VcD)#xS3l(lS9O+{k=@UEKo=`~VT+yZ?bGfs~nkKihRJ(MdM|Z{_ z-C2Q}?>GY`QL!(uWINkt?O;49(l`w?wuA%uaa8BJu#P zy!Kod)R?nxjnC?weQR3yYO}nzGQ0~SLf}`lUdG*{-S`^sb9kp( zn@oE}{3*U)Cx|Y+w}QA_??G^d#}Zue+|D*jZS|395*rujjc>`W-_gd8$O=xdKguS- zt511xz0POaY4KSXFARWz7@YEw2kIU7#b2kWy)Xj-Hp&O%uiF-WOZjatDZfM@)UH!r z_LS<>04RU`3YOeOuR}nu-S@?XG&{kGXeULwZ{gGQv){)sBtb=yn)>aXyH0!gJ^PtA z13Tg`zA($Y}x^s}NWLw|rocq^>yx7$h_`-+iypt?S==EvRl^Fh! z{6(v31xG2Jn6~Jy7mlFfgpcyxH7ytsETnd6xIPP)v2gFVa5vb{H*M$_ z2<=8Grbm8CNZHOP6Q*rm&&?7eVv<oPtZ+xU7x4#D+dwEArJc9j?hm9?rww> zm;3~wL*y+#OQ+uc3L(XR&meTDyxnczzKW3Iy8lE7N4S8wyuzg27a?k(xsink{YXMB zHk3u^#}apy4e=wxsy*(ppkPaTujP4-#D=J=7~;L1(WkC zu4tUK^NdFq-~Sw8Z{v@F@`Ajc2LdZyKwt{%=TqJ!&lOFw(-a^dbQ(&c*c~gaIyBdY zjlZL;EkeJOxJLXcED3}Z+(v}{f_pk0*J-#ELJDr!h9(eF9m8b^ zskA#0V&^(toZF~8*k!A<*V+)(v`X~P1Nf=9*$(Dn{!{4o%keaIX+spt)Q%@suEo(N zTlSl{v86zVu%$qUW=8I^arfG|9OVW;x&h8p?HPcnIge}A|pqH#9GW|>Tn;4D+lh3}oC8@D1YLyEKv&6Hg>DvrIciqoWB zd>6)213Mb_TKq5wI8^HT&pOi8UX+|66*EzcJG*oTvd*o15 zX(IX*SVQ!jq8TOVX~DfwhZGGMCk!x%0Db+b4Q3I=3Fv;I>Y<}$XUuenw^DJz^|i$X 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
    Xef_r606kL!gr>jJgO5Ye!mu> zIvdKP9s~7_@I7fLk9q|ZOOXimx}iMk0H}S!_no0Us!ngEP8Yr~LwVE%p!N%22SXv< z`Y3gV@D&)!qpk;aK=^Jplt*2L_3>v4Uzwpi>Pt`uh3^|fc~nF{d}kwk4GrZ{{~m@l z`eKut4dqc^fSM%O*M{<_i<0myj$mC3tiU?8ldo*1=8|LLm|GPW(#(op*-pole6OM0|3lt-b`P~+9|rN6-EH?!Dxx#r1lv${U)B z>Ov*PrjOwg?4&u~L0E##y%u~+um=yy7?F^YF@Q_3HJzTFGr4T4dFX_39QD(WKjf%b zY=1cmdMSop)1k*X%8S&=Q>D0P0mrlr@JzhPghumJKK{#q$@3Y`CL%3$($sbS0 z+bnRGio0~U$bpO;xX1%O6I2%7(eF-@`b_Tvku@8>UyL))yx0)ji~WDv;Me)C51vba z%!P~$_<*%8aF+qC1YX0EGLnd_qhI!@%F_tKB@nZL9na8dpwilQwJ;M zi}$F(@z`Es9KJ@tk{{VG*PB=1l`fMPV?*A;DPC*_QjlGu5;6-eD8*L;1=(JXbYPSq zKgWyXr@b7rfZhfbXJ+SNe@5@D;=+Qd-jclR9J=P%5EiTF6tw^kGGDegyD+DOqH;55 z=Fq3fCFCp3%`Ek@OT#qKeq~{GcWI6{6F!ubdMD5E^5BuF1v9t_SX6Rx&dj{RvXZ~z6Tje&i9N^iTLzf0 zHCC}#7XLF$#vU-(D>2SS;0tWovvA@c6jGq0gIqYhq@zPIf5-BA?BI++BSs9s7F{Xv zLxyJz7%~VuMrG)|OYm+~T7T~9AJ61+@gyY<00y2R!?6q3C~T{Wjk#PrvgeJ34Nt=+ zUb2I`PZlu|Wc=r|II_YsA|b%d0ANlxeD-rQ1jlh&9$9jT(UJ36ht7`Iz?8(1Zg+w? z+{v@cofP=kjAT@51~vxK#|Bvb3?GydpH$sD#I=9?fQ;m{;R!as!4l#}C0f|n!HGi# z4aT_vmX;I7*D1&>9=zWd+b<207lH(JG3?CHWX5a{4dZomtg2fSjR9XC-&D$C| zfYp(=HQQi+zjhib-<;Xri~D+`y=~f{qUKW{RJC(+GO)-cTN-nJ&v^g8^!+=hZze`_ zj(_x7MvvVeI{Yp3y`ID7cF$GhgX8|J_ONTl{W6H;k*}nqcQ$8Wy%a$ya@lf*hdzNf-b`L$`^83IcQF}S~R|2ot#sw zpZ<>Z_OfAh73>~PfvdK93O@C5@?vs9YC1igJuXPhNTk zmR0U_#P^E$P|l>wNh-&xDkIBq{vG_XR1{Qspy&H9l=*&`lj?-;qIl;xXM71d=IC{1 zqS2X6jNi8T7Uq=XOl2oMCp*@gGdmNDH__{Co$bAdKh%0jC(IY6juBXE-d^tz^gu0vg$4N-5%HFAftq(pai;7mu18WZS|Fc-dS!zH zc-ESo=#y~OYh6;Wb*HXVI3{X z7HT(sn+UZBzfnSM#Emm-Vd@1?lZ4s?DpRN}pt6M83W_slVQL#FwgJM_c2Jxp3sbv5 zac&I0f#QrL@7AV1=o)ibKABFuPV~^b=aO_J-w>6q^##$I

    ^I)=+)s7TyX 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 z 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%0DfpMArEvVS)KRQy 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≫pj?onjyrn8FE;GT@jL*R}e40j6L?r@prL*cR0Ozn3xx{j{VlvZwNX()iqi-!P8vKD;=6X%7wdH3 zF}ZS!nH(u!o@`wo*~L5jKy;UUAc_$}OxN6n4@CRUFWrT2+IGt~ZS$Az%I>ywtJL`) zKe+Q({8DT(qPRI0+3Y^nbD!N<>DK7vbdiDaP#|_M>at5N(m}o+2=85}v4=dh>&(j< zVDaI;AIe>JD9#0y& zr>vLs7PCcn{v?RdAr7_x?18xl)6K?|jc26+V`xOF3%rGtMzam>C|utFcM{wi;WF42 zaNmG?6WqVU#W$ZV-5~E4xZHyRYrwTopSSTE_xa{TXI;`lGn^t|q(aV(pxzUV6M{(T z9**>p;qZG>QXywLDD``hp+e5n=5B_}wN$=0EcRPNg`8a$+ikHye?XajPO5;nGFQC% z*&i~tOvM~(x6Gx#YNugt3QWV~qsA1(DoZ9q{Z6Psz`hJ^_K?X#TLg<&^BAa)q+>uI z1NbSw>2a%hx4dyUhgCSQS>B>J{WE;rYMxc>4LSIcBeD04c`0QFx;BBW-H$S3>O~Mt zOI(CkpK4Ar%4vhdZMVvY5}f`xc{HHPXBryeGLG1rPVC`((2sVyNNE#5O5cVnwh8=- z#r1eyar(96`TX&UjwpTt9yctI(%eyBJbCzaxEz>&mNbhb;|O&-#~zO#If6Poz^4$a zLbr5>A(t{z>5uX7cQ=}i{uaSy{4O*4!$Y3YA1T!zDV?#b*hcUx7T2G(L#~dILWf^u zhu?%;|11r!9kyAc2p)EG}pw%HM)gdX>p<>jb zV$h+k@57!&^RZIBCYeszOP=}Cqxcd7k9YF)7oE(t9b)EF3OwzN;?35}F}!gEZ{Vwq z-qBL;DnWQ^#4Aj$8WDe0C<7jRwbx5u?e#XV_GlIOKoa#1Cg<|gNKhQX(v_@f&KDz1 zSs2pL#d(rHK(55ybe!ID!$AjLv+lVWr~hpV{g8+E?&*ymIRb+stbUs6I`t*mS4`z| z3zEh!*(gVsxUcfGX^Y*U;WADuaI(!=fRo3m$Zy6ITcyZ=2}cZB@8`m$spi2Q33m|O zVz~HZvxP(FgW)cPi&tqa%is=y8-rU2muVgfm*HG)?TD1x5h)%0S8R*n^FBbviu(*7 z-xnLwZ9=0Y_9Q>?^^VjwO8el2cNBZlakf6pt52-BXSC-vw6D=wkijA?iyvJp5Z0aQ zv%dSa2#hr2A2G>(#;iaSg%D|fy=nrX0K!hom)dmK)&y4lecgCR`fgqt*~fsUecm?TZ!Tdt$|M43$BHH(0!( z==}SYWN)2VNin62Ht(X0gqDgw^LoQx96

    &83OLlNfoYgJMwc=I;*X=NU63+ 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

    4J;2N+Pyar^ful9fkK`GBt@O`l4 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%0D+Fe}4aHUkFA5b~{)v{H6=b5_yd1TlE% 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

    fMQJ*EJrk{s`ZXJFRnY}gbVuhz$ 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

    @ftg(MI+YcX)Ach^xFWLhZ_t}{~i2Oo)S}@ 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%0D;ux=~mW$Fv&3R{psWmsZ3vtwyqye{S3=t%xI{ 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�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

    riK(!EfKuHte_;Hut*< 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

    ~RY4&V?joHIM=anq-2y#g@ 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 OG^U_2g{dc4~_-{#d(BG2k zz`rF`y>C7UKM(Gk>HBP-Z$hs5f9sp2=ZU_Vtw#^BdPLJF?3`2{dEX3Ly%SQ4V;!Ml z=jT_4_RVs+$*OObXa1Lcv)&UMeY4(M|IxnrpD64XI1t*R7hes#K0J)edg{(XpY-bn zF?H7Lt2c=&eLk9Qd7otpwIL85+;d(^+;xgrHUa?wj!X$i<&D{GUbIKOI`u{Zb#6jBMoBqJRIeon! zJOm%e4w|FVZ@30r3Hf3~{h+C?L?1}6(*viPGU$Earr%^A$VnR)Eq=gO`b__PjCg8% zaz4fxUjkH%f@XZ2r;1JweXQQb?KcY8w{b=)b_3KLlidaGUxHi+`7-1($aRpbAlE~_4*3e?4#-y_zk~cYB=#b-4UmT+UxSQB+OI=m4}fEF zGuG<0w;{2{u5E%m6Y?EM?h|Z=#JYv{F623oTOeto_aHBad>@i)6dyq1T5TKTPmmu% zx=_~bki8*yK=z0H1Tq=&Q^+jHU68qupFsxquglw~^O)Cc*T5`wDeB-B5rD(R@aiinwH+%XG7ZGuBU3)Kpg1%+_Ueq(h3o zLh*Ak5XrHPE`%THf&Rlbng_*vrB8{LdwHplM?;?m$(qEPbaM~LOvr(dV<5R+I2JM= zay;a8$mx)CA@R#4%@;z>fV>{E401W72l6q4p3hvI>%WdexBFPt z$j*?<$kuRyZjdKEIbFFYCPEkxbZ?-+vjHqoDJmF5|rX|AbyxioG=*z9UzVb`6j zuk2!3H*ilgbl!=z-8yq>LG#Q1Ns5?L{`F}N{2S6tLj7`m6aEo0zR?fZg?E8`Inwb> z)V!ED(uMQ@Pg6mkI98&M>S}4pDM^4+gJj;<} zZmrxE+ob<3cI-&A9-3PRiHTjQnAz!rkGfel&k4^3QzZ@rZiwlFUQ@s0 z2hB!J--Wmzr`i(3jJ96LXP`~VW;NHdMS9r6cAj3;93`~;Hg1G^wkhWre2H00-y6Cl5UoCf(N zBut@kuuBwV2gqnhw(%Iq;IZH&q}LCZw86m;JTD%H^I6&$PH+5y*Kl5Z zJmgBtenUQdHmSM+GqP+3Ycg~oL8D}>^L`M%R(-6=a&sv zKI?Uxyi$D9j`UsTeu2_w;0A%V&4la(i5xX|hs1i8@ZoWg6Y+NzBy%wyvI=qnBny@e z$@^4bnxBI#gj@|d1(Iu7(;(xJ?pct$XFD5`^@zD;h;LjCJiBh@k0IDM4nj9B$TxTm z^M5&xr!0M=uwf=<@@3*?sa`y&D4&SqLyAnzBEU6R%RI|5!C%Yz6BAVO&cJ`dzcGd@ zOpi3Ocj~A}^cyU?73+)~>ft=G)1^NhNd2r*pTR9B``?3R1`a*2+^kE!xw1$pJ+LWl zF&nZgq!)4kB!+=z)U$?qYes!&SetCFhOC902YDVO?NCq4Wv!=|hNr zgyj&zQN{;Sxw1?ieZb=Qs&Cs7!CORfi4j#_y|HMtrNHvG2!SIi8!ayn98ph)rjZZ{ z((m55QEEJ_astkB5I|s7^ryJ$bUi3 zhkOC@ACNCX!gs{;oL4}y&aZ?F_9OV3=<`{T48eZ16}sSlpVzQFl{lUmfe#VP&q(Dq zR29`UlvUssJ}cnaTzV8cZ;N1R-0U|+8)nbR!GM>r0h(uk!oAp+>y?dG+feBfoi^Rj zKN+Jx87;d^`lbHdPK7BaEEnr84zfh)uYt{2)&-ErfQJ17vBz*7B#VxFZqbGpLgwP{ z8z9k_(uJDQ&b6B$X{SYy!L~mOZFC6E=>`e5J@*R62en~d!~F0be3hl`)48&lPj{_P zEkCEU4C8H4O*RH!F1DVkpXi{Mt3Wg#3AS=oCc5# zk9qlOszPR?M5D48*zPwev|P{*Z0}12N`A0D=rir`=OU%Q19iB z&VpPDiMFWS0||f8?uBI1%OKx|ydQEuA7}9Li?N1bE9ykCspRnA@4D4e<_-pe8Y{>J6q0UrZ4Vh9(5! z_as1OmX?d@O+bD*Kpl%bBXEIsqoUJWz1&BU?StQBkl$vI=5 zdH5;)Yc*t7NQ_-#j=KhO82(-hnF;w4B<=b#B>U8LkQf`aS0K^Wv{xZH4*nYw*J>Le zUx$1R@-4_WA@@OUf;<4Z8InbMAF@B>R>*9~ZIFD{<|D{r$nB67kUJpp{ExO163^>s zpF&;=xeJng^kZpS?Sq7p6FFwRldSgT}8mzCNQjH-e2v5Lhbl@R?c&=LDNIO`X0t zZtjCk?b7Vpc&>MjM;`##XmxiD8TXlQjt#LH-Q6 z1@bWDhmgNQMj@@=A=^PlVJ+nZ$Y{tOkTH<#Gh!i=AzMIZK(>aQ26;4O6=YjT+BgA{ zeM37)?t`?4To2h168oH5C&*opogtAYtqUZ$wBsOgPU{MJ8YI?%nnyvN2+6gdlOS^; zyF*Tc>;ZWWWKT%iED`bo$X<{aLH35^TG7dn|AagR5_=F@U&vP>kw)`tko_S!_b56K z-;dIcYIo7G_yZ5zmnSDzH&l7B9fu*J%Im8i*-%}N{b^6R3yt&4vjZ~LS0!?i6I^AepJRp;wZtMLX$l>y zjrCO1Nb(V!k^b*^B`2rV)KunkFW=P{nL0PaGpiJLD-u`eo#(;3%cKeLE7E!Hg1jjJ zW!BZz)J>6J{uqYS5mZJR%vqUy7k!Z)9p?#`QpuNUWL z!oXPX$dlh<$(FmiNeX6N@DN&4nej4yHj*%99^x-^B2v1g9lx7dlxNzKNijS>Z?utH_!PEO6v%D@g@K$CM%PRlAP#8!(_^KkQPv%{Dn zqv^6ivED~pwh-eAWz+!*-aaBYj8za7;Kc5%dN;qt$nWir6y|fw2I0o&QB!89+%rq- z@r|UWT2H-FW^;iFmsWVn&h?Z_55sdh_#QOAEn>#N!_0ryd#h?Ibt?VAH#AAtnf+u2 zvJ{6%GD+7?sVl8DXG-KRIH|uNJ1%5Y{!31Fqi3iq*G^Zpta@n+o8nt)KHRi;>fE(; zHH}TEadoNQUZW%O-9dieZHFYAvN`4CO@*ohKG0am(e{ zeI}?pMI%q?*?GB{qBo*5r&xNYfA})8q`Z2B%1?*?x9d!Off|p(^aTU`_FRP&O?|sX z75<;{zutxiovLir#nM)@Dr-vFZ7aj-y-Ujoz_2Dq1^Yor=awtPoJ8P~<8a9oEVaaF z`89Jrb(8R31a$GLEFOgjl|9M1HXrKm>w>rEe9dq>QPJnGXU zd@s*xTIDYn)+zis(WggR^GA_hV{%88|1j>DQ5 zns(LNw5tcJ45@{MnRsas-z1co;qOVU8zS!sTz=nIJ-^;jTDL~4OHhNuQ8L!Nb(0Ld zD4<>H7iyO6GW0@!H_NFMQ?zcJ_7@_v`lWVFFX&=(`#VFWYUknhmm=MhQBm{TTUJye z)~S77JVibaFC)PNUgjFj$jdEqr|0Ds78OiNFA`t;aHma$22;7A0hA8NzywYVO#ptA zH8xkU7osJYb1G=f=L5;Q1(3n}vT&bMm*VI+HOJ~+|zSd2hRMT&DvKG5cJR8_j0%!x% z543$@Q5LG6euu7)Gs1Wy`8sU1mb-m5b4%;W-DqVs+KCFFvY-Rp)%b3S2ahoXR-TzV zFb^EPOyzWALtWgECMQ>v*1KiN(4+(BX;vUNo`$a%W3qWh7l`y$&tg~6gxon1p4Z^@ z_}sarx!6^8!f_c8y$+t5bOI3F7sX4IO&Ab6R5h zi&wEZ5>?fdH&oU*W7IO|$xa!nul1D4uD9Hwnta~sCVc$>cJR!qsq+Z$u{Hyql&Y;q z`w4JAlUGPbtM@fwiZUK3j$#h?(-SiCOTBej)ny}Lm3}y|s9?D$NrxwwehXwcjvCqZ z385VTLzF&w4TS`Z+RiZl7)`TV=g2(Ic23qj`a1BLVBllZwobUNv>cB=asBot+39($-j-OHm6z+zNgdC>2BG_rF0Oh8QFk!BYSpH;Ks(S0Y=N>pgyqxyU2oL3e9GrJ zQ*}(&?9*&SG=^F^3M!2>$gv7DPCGXr8)Lrud=Fi&0(+oGwcC-%66Rx4nVmN!D|f8B zh+~s}CYoo)Wu|6?oWY%akvkt_E*5d+H5?Mi)`DlUa=EhW&YUj}h@MK7OZ>7>$bBNE6fn8wj46MKa+OGi`9a!56AP=c$`I!!q=SXFy4 z-akO_9y}bmF-!!lKMN-brVbn|XfP*!Q#0W$MV4r88Ciw-*{M@8n;nxi)?JvMDt!Q7 zZ^pC{o|To0nL~DJI>v9k(U`j;bB@3-TbDkx+SMF@YRu_~d~6uX9x^`*?^ktaOv=s8 z!wgjx#33QQed#pzt{aS}?s?m!6#cQ#VP=rotYFefnGwQLq zFiOxaT1YjatmdZg0@Efu6%u8>vCc2dai>ng##LTnhG=w5s|C}VES!~7GhP&9b&=K{ zXIlyzrooMK^DxsFH`-3F5IlCW+hhs>s~F5yA$%Y^6Sp?mlX7zXNkwT)YMjU%hgDu0 zuvB2W6x#&p6Z}_3iz{WZcqKDwS9fyQ<`jthM+FyNWldzFGeERKjG!;TjfQOfx;|Fu z^YgN&N8!@jh}=Yh%p$x#5kq9z)gUfeKIR# zkL@p8y@h9~#am87nE!xIBQXEjnPZAX2Tfc+KM{y4$QnD2cdRejAVsOD2~>yP zvvHO}P(Z3Ws33LhST!UN6K%FEFzLA0&Ma`Nv;ovdGu76EDr_!mH)xNVUQ6nL!hl+o zz@JIIBmo_lAEk21PM1_If^u1y$$MkGd0X`2Y$6GkzGq}lxu3putG2CeOXK&z2IL?D zw=!?s3O_UL+#1`haT`<<^0M8Txnjb9bJ)E7WgTK~)7B{$ z`&ou)&8ZAI_!4zmYHkKz(_b`BG;&@O>v&B@VR}ApcE*Y>i}0fy;o=bz+|;CwEfhOQ zrdd~zM@hGHse#NG4fUN`>v1peD&>y)j)3*>XLSiiLES5rzuS1_|Hs~!07g|^{a;qY zB$`B{qGFATh=9tbvWbK+Y!V1dzy%#c5+D!~OeQQIwS4^Uyv}Z<=Xh@VM$CVQ@X>V8--m=gKGrUy7?g621hF-JXvi zFLGduFUHjlNne~Yeaf7OymuGg^NA>eLGEY-jwa{i#q6k^%~FK!!o`>!vkcqFl=&a~ z+=#+x^<;!{PwkwSvWsgmbt_us=)PGp2`#sn0~Bg(e~$i8nSSA`FaoONre8EuCQmc$ zB(hfCv+8sjnBsE~Q+f#sMFYAjXh(1`Mj|u9PcUp;c@2i0JqKkqkJC>gbJ^es%fJv{ ziz~9h*Cx)Gl^>22QO0@s`Qh2K;T=pfdG?EG{^HyEt5CDqGvEcG10z^s0(_~#Lj3q? zbu_HxW8#52FT7;w847s9^lnF_veon!9td?ee(tIXo z01L>F(*v$0Eg`>}IP1PwY^G!FzeHo`&B7yJ@uMIZE|FHSG*#mVG5n9>2QlIYa;D9g zJtr0i+hq-B(=?-Djvmrk@UYpWC9R94O_~)BPsi+WrLtd@A;(WE3I_&r;-ZdE1A7!1 zXE!Ka-n7EWaO@}NO`jf~hW=XrfG7re!jsSsIB6C-9XZU##E`?i@gfoznLT+5+9%Xu zkkS=&opV-$003|B0Ly2l-um5 zWgkMqG)!gS;5!Bu(`2r0B+(>XY@3jlefTk0nxD$lZ*<$HWj}s67Ta+|G~ykcgrT>z z>?6_e?HiecS*{bxYD%ihmt!hxUvx;Kav#4M6?SCka7pcfgRox|`=szXIy2I;|IiN$ z{fjVAnm;2vapG+GM#V+!_#!~07_|EHjfE#v#XglX6g?pd@W~c z1p0rJ|@`C~4WXkWFTY3+BGFTPv8u#1!(tjr>_yoDiOX(Jq$9i@T$67R^K33AJQeHurV+ z8Xh{&BLwOg7%9wD!w^N9G;>>ODzevVv-x1eG&IYSCw`J_l85={fY4}HSA&W47H6xIPn zE=+Gw>QRFg(&VFicY0AFD*PEmg<`CjDx_(Srs+~FL<2K0&LA~Kz56+8l#*pw5I!dD z+;TDxK8XJMJ&I%@T&uI?*^&5QWKt0pbew{a8(XSV;%CHT$R#cNFBf5pLDZQ=5EWK` zuwqz%Axo)fhRO^U5m#kg#lYN;M#x93`Xs9gA`#XSSd>wW)f3A(oQo6J&>|FTeJt1^ zKE{!V=>TkT5nmOu8W}6;ISt!0a;f4-@`WkjLCp?N&ksvRx!;g06JRkVe=sFa1(Rgn*J|+_ECqo2Vk>8fg{Sxk|Ag~Y#PR2% ztaw!@loD0w;rJYfC&pvbqB(FNCSo^BmI^6C%2+AB%-(ykk|18fJkWX}anew5KBw2i zAk;`}eXhY3C+xn1h!sCI z;yn}>C66zUt}Mq2A@+8R@z0lpm#-yT!{uS;2drR}MeC@1xvg(nb~Z-2^zn2%%gWS% z{Khzs%u^gOdkcG5VK?4#Z*@^}9!PH7f+E|?8C!?cJm&~IWUL77_gF2D((U-nHok1(A%1fnd2O_FKbTgcYIvU-mQPpJ& zFz4H@zX~b^*6pWd7yP%r)@gmZW3kUpTK4&4tq@#^@vl1Tl$Bu^BuvYmp6@9`OTrc# z#+fOi7dnz^r%UP_vJ(*1C?}dYjrGhLjX$fYpI~PKRj=gwVoL;eI6w(^(Y6}iDUjNS zqww~?sovM}xI_@=hOWYxESAsG6S)=MgCvDJS(FrGzU5$0ubbe#GN-zH1!m<{tcC?x zzM9@(WO=mOEgOtPix*+)AG{EcGl6EVoz^Z!e5u)V*@8SJwMouZpk0px_JKhtrw}5l-kfF-;YII0fVUlo338z|mYeXq*%cjmU6`W|<$)EIE@1M?R z``OQWB9S_4$k4GkN;xgN#;djxTFj)i6gK5XiyFR-sIc`!BQ?bf%P@g?7M^{O=V?Mv z{oCiZ+=4i7@T_~QQFN9rNr8G4Nt>F2Iqm$??ku-{x>?nKFpBJ?{|zbcJb7ZjjI`_% zJ>wUsd1NeKdQrwE2@x2fkYX~(tD|rNcr{GyN^3A#SF*XQ!ePJXaQMQk^Cvl{cLv?; z#br1;ySTa>Jv8Y0sa{lrU@T*Yx7c_HHbz^gGM`+d+-SX<#Sj?RSFobl$x zU2_VJTEmK4-VUr}6TA^i*8JYQlV_dJsw3B()VOgZ7E`cnSMacpDVons%@$U=7P zx(Wfrdup+2*sG!ZK0~baAPSj$7XvVJ5F(%Dr6-_APD{L1@1j#@xsupo?4}kmPxj1q zq_c_!mOZ3pk4usv3R6bMunSsRc6hYqb1l{dm7*8BG=kA_e`}|GRe`f2np_u0y|4Lic!% zXY)RS;}OsCUOa&U;|v6uya(NgYBOUM8fPyJ#wcN0_TS>Z;I$Q4W=?ZfHQ1HVx;jRJ zuSfzCP0ko3wg){4>`Y+)$RN+2EhsN7=f+!DBVNp7oOPEJY3|Ti+~#>qK|P4&Qa27U zXCd?$r^0PdS*z_%cGt9EOY87>fHOdzraMnRc|HflG)KJf*iYvnHzOtVUI%M&clAJ$ z;*MbKwVCHB3>&0nt4hi+o`iM!)TLLwDxtg*#=X3h)hi|)W1-^xc=|+Ahx0S#fx`Gb zkJJuy^+%gs?#`-2=r40#X3ITNC%`Q|?tf`!I**g)Ovt>KXR_4~SWvq{saSwHYI`$`)!Du=b&{pnlsc zsIHK*XGqLd%u%+z$F9gn#jot?71cyGS$vmiUUCC<3#%;I*i5>ihc!!rB>O)eIlf{a zj7f+Vd%upi$7iXG?%}a zWfzx29Q>y|{$PiPC~SlCEM!W|#3Y*K%s#w~vDi)C*LMU~p%+ejkYs9}GK(zojIgjP z2@l1|K#En>5lva~vZ{p(WiCV{NowMT(kCD>$F;5FFTfYh0^rnybDdVPq*0t`vQiRy&9>yvZB>bTy*LMkh*M>~#rfIfqO|3f;O`DOA>0RItua zGACxJB2QSbu$;S;N;7_lS4xu)WJ&+SyTk13WZufM;-%uka!`0`67f1^Qy+k>`&Yca zfL1M20@<=d=Hw*b@-OL;AG%rmMLx= z-s`ob_qQGM7^Q@0U9r5XM%u$)@R(j+xg7qIrzyhz`Dl|K>TGpt9#5-=rt_S7I=)(a zdizkvT&hpmBd5!@0z%p2w5M~}LVY;~-<{wYkU$@XxG6&sV7%82;w|eG_UF+s@ZJKczCttxLt2a?1+eqe9G<$HA5bm{%v( z`1hFP>U%t=c!9M;`AjCw`}tpp3o+h18bDtETC&$=b|zaTC!hlGeITzw_N3rkPg!PG zBR&w`+z!%7ILwd%z{?+$zc9|}egKGhs1E)a6xV5<$=T+10h-Mxg&rD^3a=b=H!7qqs z7x^Tj%tscAN5v&TcBjQweI>Egux{i4)4;J}$M+M`9Bb$^O%HrvJfm?P7rr+VMZhki zY4I7H5Zj+sGEf`OC8(lGldkle@vqLIj*F7cJSHw@TEO%@PH{W6nOI^>r<$_N7q<{b z#Fx`T09^^dhGKxn9{*RHQCYmKtn_5Ik4~-~i^E6K zvhQun8^Jhgv^U^TSpqO?&YUUaO@2jjO-*banyfHr0IOz~R9970%q=flDPH_#aimeB zWR|=H{*KE#7LA@Q=9#=f2g^d3XRf%o5X;u)g=bArRpFff;}JmCU|xv!3OMVc3SXtw;vRjo%9dB)WW<{M zs_Mz5)zfve9~{YoDxgN*k%Z`Sv<&;v39`b0=`nfd|Zyu zvdo3zdXhR;umC5yM3HjVV?4hk;gU!OPeW_gTQH*Xp3Q_}yBd`@d)~NnG3+?bhKl}4F$?AO-4Vlm_!QG5fv2&LsxvN*zVZrlP* z2$QPw3&er$qhcKTQjWARAD~daLrxcImypke1ry|ltiUW^RV+;E=HipoorVf&_S`U+ zSZV^$Z9{8>Qns*4BJM`5ojU_7nb;>V%O^mwE0fDH1p&3}>R7%dV&()rj8ayazKijD zo-CH);;`ALiO(lXT181dJP!mM5z8r7_lP;>c!jDLUts}1UfET zT)Q;%3=z={{0O#q(-l&&JkB^rO8V3o-zVF$!jd-BNe9buCGG6y<4Pl|t~45ARz;Vj zI3+4fjO)c18atp7Q`ZV=pBj~(oQOo&b$vSLI8q6wB103glf7{23Rp>9 zAtyhp!ODsGGq_%!N)d|@T0$*5s5g`X)5!C&t#U1P?B&!nOrdk;iA~;$vS`^1SqXq8 zOgtk<$_TCJGBuvI`eWo=*riWiv6U!;WyJhZ^NzBoN|sRV5MgpS?6k{ z&7zDg6DELR)O$@Mk`0bfVO*6hE8AFyd;$8v^QT}{*q*r7<|A$uC5$90IGohu*-Do7 zKY1R5I9@!|fUK57(56)_%4hqE!R8Hu^}zzs*&?y7a3b3vt~9p} zq;oo*hcRGh>goyQ)sp2aJU_+Oic{=w?EQiKxAMWbq7z#<>3x_w%I!mS^Uyix7KTOm z_t|<_Y9KO|%3{~Nlj~8x^C^<+3a)?)*c8CML*17_8y33#BM7#|NZZqWFGJqpfZp{U&xi z92B&fp5V{Tkb#pkX^SA z?76GynAh)+bHx$3=QXF!ns!*9iN@R~ z^qtTB?yl(V^Ck{hKVkHL-oN38a?U2=Ipnq*&)ojg^Ft4AeB^_RE6*!3W^h-=fBB>9 z4*0@lKg%Dm?Y*mC8hhPi##9NtVbRO|j$JTs-G$#i?8ck(pSr@B9}B(cz-!OAeEB(b zMQ43<`sH&Pt~BPKLSNSN-HX5Z;rjfWX8dc?Uv7KsWMf8lWBliT_ul%W-h1`Czb#m` z=e_)n{oCv}H#~V%k24;9a~|ZiUFe&7ul#VKn^%=>FM=+22f82`(cyz=ZP z|NP3H)eXlS{?lvE?+Hy6dfyu!JLs^t-nsXhuf3A}gCWb7;;dq!|KzTv8D}p2!#l4p zt~>jMfu}!fOd8(F>JnXEHRo$#zPsV>AwRnE@ybl7ahcHnIOfFsX>as-`^`y9N4>Ug#^c8PK>4%_qyh{_1|3kJDeK|9%Xgucj-?Kxj%h= z#j($C{K2b>Pl8LeLg>FLJY#hJ1)-0-p7zJFJvMxACC+FT`fIO4^fe#dilbdnHnO_h z{qTjC-1N~MKdXo|o|#cSeVH+r2)+0l|N7Tm2mWN{o(XqeoN@m!nZ86W@ijm!Ud zrZGonF#e-gKX%BgUtRsT@|O<3;heY5M_0s!LjP<2%*?wl@6z?lw|ryEU+)`GHN3}Y-u+cA&f*sOhVId0XPk0m@qh_$KXB0t zQ_jY@zpw>aT?U+T#=|e4k+bOiKIyk^xTR?b8q-35bI~iOjlT5z&*%N(YfbYnzhaRw zHwwMmj+^dZu=xFh_bhsJz+1OBy^1r%h5pHJZ+-E5CAr(4z3$R+S6;ezGtTQp?U&Uh zuk7ev4MSf(>9q~#htFK{leswiUFbb_9=A68z;%1R^n*~O>30`QH|BAn7v3`H%g^-t z(Mh+>oAzXkKUVYzJ-l;TZuh7f;eQR6En5OeT-2Up)YmdBn z1?tWm#-DlYnz#S;T>1Q+d7o{UowoN^I166rZ-2Mup{IXy$jAFaq4Qrpc_es{aTwz%S##6cG5fC0ySIPW zRl_$NG8oMvq2JN{s+%v_cGLrrd2?^gd+pIPP>zKDpX2{_$Jv8+-#+k--@jjT-k;|{ zE+eaL8|49eU+L3+xl%~@#V%7x>i>xjq=I?I2 z=hW&03j6iEblX{1qHcU2{=gdW$&`$mkGUo2iC>n>xdAn~{a1}R{iONW&Y-%grfOj{ zcSU&(Hf+qTiPn~uSLF^Fe#+qaD@x{c3h~L zKV-0bZOGtL2A?uy&(0R+?W{x@ZAB&vwM%GQsz8$b7q^s6~hSd>q#v9onwfEgP}5Mzo@` z9Wksxk8)Y{eC&IM?q&XHM;wk1CDp|^6?jn#dYY0$p9*!6aF$gzRBG z&LZmYe#_uWHp4rTLzu1VDi(<(NlI1ls0CD`I~oz{6CTOj4jrnK)jjh5BHem&1uCGb z7K%ZtTC$3f@<6yG+Sc|Gz7mR8UX@&b+a9Ath-ExDyKYhPcvH=Bc~#BAm8I=a0AWA- zyRk7^#R43I+b$)rWrBkjc%XWfl?1&O>4cjJH3(syiEVN9XarrR{WE zy;!2f3tF>WDM_Z*?^D3yu!8D9=9sHRm?_eZD4Zj@oV;n5QSg|vpyO%4B!C4K?K4cG zCnZocFd>OaN?kPjr4CreW-xbh(w$#xikFvnL_lbBP{2v@ma2_g6NmM=c3@?)D{evPZI_kn(L@6K&KaEBw`{@k z+%s`2U!Kd~!*d7bUMK|6NzflP`eOv1o|)V37jyd#9VU?u9eH~0$r3e4!-X_#@L)^o zc=RLoTTDZS?!TzKEO$JA!@Q^*_lEC3<_+C{+#9+-QUx7_8V>UW;dJP~#034EV?yk6 zz64l}^`y`df$HZ*438BDEg>U3DL4_2^b*kV&-q!WpL6=-J~!M;5=I}*d-%hY4IFqo zExW7`^BI7@gt;aMm?n$T%`S^V=4y;w@@cxc)}oME=V1LHh zA+rVO0-*%#O|&Rv?gu(wXb)NxGKV47^MrP!MIo~m=v<*)X;H|$4Rnss z-mxfT=3tHs=lrCbb1Vv($ARVw?MaJ5W*UAo^*FQLqLBG2kmln?i$dn>n2Vy}Znh|7 ze(q?$bhL{w*F?jWS`;#?9PLs^8;3a~%*z30Inagp4h~+nC}iFMDiPXWEee_QFbiaX z&^UjDC}ds+Di+%BEDD*anB{Si(571yGEV|Ug!Z&WA#)LCYcK`rrqrU4xeG|sa<4@p z(*?67G+YmhLT0d|aqb15hD;OC<&vY`nEy~JU+ZHLvb9O5#$TBP-yR1gw$j1LYdG?Eee@^KuiHxh8YP&&@~`U%S4Mp=G&NOpy6(} zC}g%e+BQdf2=fK5kQ{9XS|VR-vM6LO#4LbiLR(-_$ovVYLTGPTgm9P@uvEiY6f)g0 zTZS=XYNJIVGZ9F?G1a1wDLv8)x7Z?Rr=#8IXk6y2@ijSG4rUzGN$M}M2$Hr4^1zBa zK1J!aC}eVvHHM|?08u3Yk0mdg1P|C}f^+;AL0-6Ai$W&P(ZY@v zb+lEE*7szcX9#;`5$u&kum`8;({wZ3qL8@_XrZKUmqqDjw?!e7K3Jcon@o#BW~8H? z>1d^nw%E}!hQKmN%;#8?ZsuDAnGe;ckhw)6bGxJ6>1Z>DdEtsI3Ylvi?fMvPxG}HG z*S1)cZnjz!GDn@RPt(mY7D3w`ZGxjc=V&iFTHiCgcl%ouGE*F_z|qz_+6G5EdlE_+ zYMpd5!=jMcGufB|)G+C0uSFrlZ6%gVxMM8}nMpv?CEVE-h0K?LF7Cy5udpa&z5_Hv z!hO%8ka-@cx);O!#-fnf0aPgA{%%poP!khu=1R>Iw25iAYR>=479NR|MhcSMt-+^>YN^+heyqy$9Y}_t8*t|o);H~#O8TT zo)nppKPxhU^Sl(#FD+Y8yU6}H1*0-Qlg(T#2F^A8@Lz7+voZKx1IiZ>Hi9qI;9d&kUG3}u2~Hxw z;y9UVn0rFapj^(A$UUJHG)y4L9eZZ(;M{)wa`o4kTv?fd?w3+Y#OHjKd4`xS*r5V$4@Ag>lL+t~?P_a;)L0{(dqG{8PRr<=R+KSTL#lbuHdx1DFwMKTI!aY83Bzm8G*#MXo60gBtW_kT*yl8NJ%eql+U~rn`V_RxD<1z*%#gV6nUu6+7P5 zxIyt`#nh4WrC?&E%j3%O=wb+_QrU`#mZElv324eP?4|?m*Hl%&cp})DsC5SA;+QYZ z{>t)Fyl;ufqHZ63<_YXE`M+52oQo;!m>ez}Bv7O>1fGjY*11&+bFoOZvb4tJV~1V~m_M4c#hRek{Vk z!79xyttzWwv6WK6i3K$b7hR0caTLiEHSDU}m0Pza%S1Ek*5sII&$>0eP3^(r(lj9! zQ@5e}j<0t$W@C5{e{KwK*V|sbNtlh{-TamLa5&?t_0h~F(yPcf>%-f29?p$ez$K!QLd$V&wJx}&di3Q z-Jqux+HgqzUK1^>TeHVR4{Ipci|34MxA#0_X9mCK<))!%uRLuiXhO)eS(cu4)%w~D zrpARU=!@rB2-}1dGS=P=UHScnZ2P`TDN?Y{M0-mL4qnn#zrW9m35?aJNF|?2T>HH5 z;wjQyCV7Z7;QI{)d+@E@?)j1)OL{Ojj;mSq;ayA88Va%yY!{NU%llAPL%}YaJ-M z0~^6;hrvXLeZr79M=Yj($UjTW5;ODt%q%t%%=?+y-Jt|&NQGl&pT>fH?h6fXUGUVV zxC{Ecp6s(u$ z_2I27ZA=xOZ>=v{hp^om!t3h8k2VxMiqC5fLG^#6OJjliI2fZz+>!aoC!aJnX5n8i zF+C`p#)8e>@1B{D6lKgp?$VHoS3T+hU@g?+Ritinp+?}zE32U>XI5k5axYF_^a$z5 zKAr21r1tbh-oy8K<9i)qM5Ld1QbiFetw(n^8qEO}X{H}_yZSU!4w}GdT0^*Z-3Y7% z-Z8HW^<|r6(9@TK-ClmdJz6pfKBKUqpf_~KmDHSuaIRDP`tX*9f?SUmFpXQ4pWD5d zx`Llu$dvOPwY?*;?DxzvzptzczZV#^pzMgAAaVlXKO3fOfjHKMur;FG$gMN zL_;$sZ`5tb^2Ch~b@xnL7Oa6sr=smuV_eq2KV_H` zl(Ms#pc2SuL~HW7vCZ=7VzVER&(?VPY)M@{ja2MZT-BLIy1Cf!Jl+xEu0? z%wIhNGwRVYEN%0w7)`_7j4~7q<$Dv=_L43%l4_6}!rP_7*uJ9_)~RmIc2k?QhnwowG?~mRS>?gK zk(cZCcFVl#MIQm)18Nmt4i(>AxTLGTupvWCN%Z){!4@MfZcje3w<~OP-J1R; zdIV}y*xx4PA#J8V|5+g3^7C%?-7Q)vZ$Yq(nDvFbwnt)do?-vO82eaPHX-gkasD0n zfX|ArwG9FKd+taEIYI|9X4|38tbJ^Z-QA1u7#j-ud&U`NVJlQK-j8f3$g1xGqGZnR zU_#I8yEMjp(C!<5UzFDZ?Fv(|k!9cguI`kLstx;48@?GXC5wFA}D zr-Q0~G~Z{weI9>r7_a)SbhP@a!Z#wTUe0V;M_slN%@NlU;U_Y$>WWeUiy?k&MyvwP zs1NUxuTO;rS|``%OtSitRPe}G%{J*Ib$yWDSiZNL zXx|332w==4AAMpfgQk{qVc>bF7?k50HpV|T%)q@k70_v8%ETzA?z<& zz3WEmGplg1!r)pm(iru>ljGjWkrcSr2&fl+}r>^J@#`~eBkYw4;Q3e^=x$6#_$$K zyYo<(vAQR_)E8}OU`*Q^b1tth+TIY}GCI6#O?YFtsg$95p@OMd$hei=klFT@BGfr(P*aFXo|MhJy}{`w6!6; zl^-~^q2Sdg{?Zl23yp}(2T0%Em~p+Aos69?E=l7vmm`$%4X7beQEY&su|d4qV+Axc z$F+K>LcUgp*BGMDaIG-MyIY^(7AU?)st>PUvMR>Gb)GFMSP!p3eXaWNCN{n{k%bLK zo9c@mwbfBW_)%1BsM1iy$J#grTEl5$Qew{hRm|Opxfy=PgduDqP^mn_vfohfjK>+e z_Zlgiq+VjtCzFOgnT4L)lKDu?T|sjMVRg{8mvooPqeYh3efY z_IOI>!<(;qIrFODN*?tQYHoZ;S-H1I=9Ldoww8dJ#a4%w#p6&ZC>O<-^e~00_-5pH zAh{oVq)~5xH23Zt>ph_Gy&!SHQG1K9Vh?@qYqyr`twHwodYaLF2b=N2C*cojDk=-z zu^dlP;90QwniH$mP_Fha=>}Js9=C~oX&-AkR`>hxzUu{oCnU9BT%3)uejD@*#nKZK znWU#Ls?@Y4-F;npV8}jxzn!IR;Gb7T#O8yIbbNX`XT0^`)M$U~rswZf+>piq5&l z?$#m`knLHUL)_Fc@{2LO^QCfs89}_=3ifm>NE`jcW!Y?A z#`wMqZG5!&!+W}g)3oJKU+^kqF|a7@s+TY8h1vjRg0(?--#~_Fg8i3n-d6_}?W-@^ zvvX1WhxT?W*q!i0+xelr-N=1JvmNzDeE}-2z3xNXybtY_57DBE*ftL=+FM_=TV2WB zqLb9mn8Ko;1yaKUmoIR5OJjJe7Y5yFjRl(!V2hV=cqd!j(}wUSCsyI_n15sr2&erc z^IYkr{72@X^{8?!Czhb#H6f~4!4hSS`8uMkTk8w9#Z<6puPEnUBztstYi8pSu(Mu2 z@phLa7^6lw^=#{VeU5Ai*nHA2k&f*qFWt;!L%|j=07}W`##j!~v-SyHyo^h8>(=bf zxb#TW1f#>Rt~nS+YIMP?YeIEvHfMZ^p}J%~T=dCRFW1hIQG!FY)^XoWtJ~Xk%}7?q zDuB)2_we~mQ-`cHMc3KPf+1)26QD`wirFL5n=UEZpQUY5W@h*>&}Z3{AJ zSzgU-ydP>x;W0mc;q7h=Z-Vg93tRLM3gv?^0&YwKg_6CwyFJmN0HEQywa2BXEVkC| z=#u#Wi^8TS-sn2|xl7L!dvGEfbI#g#M{F_I--`x0!g$MW#O!P(w9|dH`;N0vEi}eb z+1;=8{7UAPS5Or(*1(Pz4&1nivV>JJ6OC`dM912p@K3A}rft|I-5~6D7+vs8W+UrS z>MNbKZNAhtv81x}xM~H_?nUWD4>^ZTtlTsFBMY>sY?#MeR5%dp5xFx17zS~#cc(gR zz&{1+eG2)^3bfF;?2s z+z0fDr0Nl%Oi9b{fM%!hX%o;H5{{nb773S$E}Pc{9SQWIpbLOL5>yTJsGw^dx*2GL z(Cz`cM9{N9+_5vqya#l@ppSumEvQ#_V}35^P=`(c8X@UB4M@LnwnK}6isk8Qpnig` z1R5pidY}g+zFUAk5Og<^Am|%Foaf)u+zF(4+XSR}qm(sodx11> z-SM90?GPZ%8{^Wvjdo~0kmil$Me|k%qgMV`cbweKJ3JL+8E2uY+^5u9S<;ze<8|%@iSVqORIvC!^u zv|j+J6@3m!^?)md^oBnn&^}4u1wdK{tN}`s_-=CHeg>rV%&&p;8?QL@feV*@koWX-AdR^QNMo)6 z(wHxE;l2%|G5^rfUI9{Wyz9^b+%;BGb-Y7oIdr~5YaFTv(v;o>#5F2C&7(kCdR_pc z?Z`1(fz*QR1X2s~FQ6Xs^u8=(zAPO2CD6YFZ2{uyupIL@Ahqou0BLFb50I8Y97tgL zODtJHS_Y2?I#FmR18Lne5oo;7qCgKz%$EXb3E=4in}x>HO;n4&4WxR150I9Mp8< z;eHKNCh@%lG)>TJKzror-+_K3=p!JFC3LVC%V9vYxH;xTpyvdQ0-7MPOaXdXXtROz z-BKWpZ#j^@%M*z;RgFLz%WXg!%L70f%j-bO@xKEp|NaT2{QCqbPrl2&a+QBa0;vr< z0Z6UI=|IY>LLlYPd?4l8VjxW)&+^nXuLV+GUGKu(3Z(De1*G|S1W5C-9!TGK1*oT_ z>d!#R({31Y(h_y3Lj!>RExgJH(h@MwJuLxJ?W}U>t3a&9a?EW&s*?`@DTf{hQjL89 zNVRhUR=H^`mjE3o?_LL_ddd}Y`t+wj>KQ!=r2fWEpnppGJ^|8i^ghf(i-9x+mpk-2 zkn&(RkbaHlYAFx0562$Al7gdw^t)#P(f0N<^MN!~+>ck&at9D=@*MLNkf!CgK-m(@ zcA!#0?*nOkqkDUrJqKu^Jgo-GlW%+#NF{R@kf!PpAoU`j0@9qn3p7dI=m9reZDMaA zP2Y(?n!aKnP2XA|P2crETDG15Qm(xSq`dk)kdaiq4RnB@4}df+2Vhm7rr;1D&CxI* z)s1{0O~EW6O~F+_nu1$_l;aNoDW87OMz6gFLUTCF5Gt=LQlyKS$qnA10{aePL@HNDYF8}>{SV||qW*ihT-eYd@DxA*w(d$CO2*6}DdB#2_YepSZq zE#wfmK=0evaA3dLyGvGK7MG6`1rOQ`D5KoVs}f}&zQ1h-pkBA`B&>l&eSoyVaw5c(E_(6tVI8%X2( z9?-KA-w%K^z6XFbzDIyGKI|B7*@>AS}Qy&&)Q1JZYg04ayg1k&m#?9jPD`Ys#Mzma!Kfb?DTM9pN!sBfSS!=7H3 z20CzJU55DK>)N>{E%V`*+#rH>1w5H!D9Z!!jT{{02RBF12|$^Gh5{WVC?6M{wHe(d5q3^Nsf*TIzQ)dl;e;E31YslmR( zqzZ#4j1Efticrh2J8VTHTICMn#1T}3Kn8d0Fa|j5K zsF?&pB!aa8*d+?5Ii+V)Co)N#TU;>&GEL8hUui~yGKQp~k-=kyN@o7OcoyvvMckvwt-46}jKa z-Tc{7ub^Iv?Wx2vai7f@w4$oK6m9{{Y3c^1nf$L99WXFb;k8!<-f%J0wpm<-&=l{T0qW=^0e#oa(yq|su z=XpQ$*3>Q#sZtQBQYei|p)}|H#FQfD{lt4gX(Hmo#41oF1_{aqdK|LM5hVy(ij(n_ z%7LJA1(oC1s7TAZ#ajx#L*+OTfA6NG9L*e%W`u-Aywf}q>$T67GZ)~qSJ--Pw%@-| z_pLKsrNk{8O-Gyk#m-E)^Z!1B98KcFe5wj44tMIc)<$&1v~JJF;z%>KXWDXW)^uYz zZpnDjS7y_#FYcc4Ivj>VjTey`FCrX13^Ss%42ygIRkKwEy zIEJxn53k2C5-D434}0!=)>(be8k{%2=&ZgztsXb`tiH|?^GBq`YAY53b@n($CBgmO z65|T<=JG`G={Pld+_-V5JiUL5BJsTwSAW>j_){38|=j;rkg{wqcpq-}MO9dZzdFt0+#8-o2mEN@%j?9l%i zgg;&}~hMAFk71C(^Yy5(-Dbfip2qsIu!MO4?whxp01c0)an{;;aRc!<9nic^R5N;2}C zxYHz|scE5O*%k+}cBxyNgyYknZi2Mr#uBw_SZ3|KCN0qqLQwgt8Ezy#b=iWtdw8ujX{qrC9!vs>yxSqby9NnqdHav`*`-JI{p!5TGf$A)sYC> zutOV^w%4KrJv=kf#WOp>hDY^fySd&twy&Xd^t_9Xo~9;R9M{pKKO1&?59$YVZyfK} z&f`4PkcC-e8kjp-NhFUlrl)LF+^=Atjaoa6uzJ^Z8bvNVpQDc2v%}>gJq>21+Ntov zfz)h9$b_GchrcSH*@NGI2)pNYOhrJc&!cvqk@qzpNB`Xl^(5VVRh&f5lt5MsRdwJp^l zi&b@gKSrB!`!BK-ERwI)K@Ih;EDyL=#}?b_I4CCOzSE|UFu#objzmg|qa};I-lzWs z;vOuGC^o28U=~GOBT6i;ZA7v1U+g$y40Yim^krZ^z03sUBOE%lmiqBOxEJDHk9#TZ z*Wk`~8*s12y%G1TaK8@s>u~=H?qA3Kop=AU_72>y$8WZ|`oNlKn~Szf+gwB;!+F1t z3ypiJ5rs?>5Z}NtSQg><8ECP-`=Ui5vmJ)<3jMsHg|hm7D;knt6+gMWxg3Kb{4Q3~-hmX?BwUjh z=n7hhlIzwac=PA_+w#a;D&>^ZTvZB0Dg~mD;rbkvIgdCX_ba(Tad{J@-Y9w#d=G zfECM-LrWU@l2( zLM%AP1p9Ge8(|#cfz3&CW?EwRhOCBh*t&LKeRh2ww%f&ScYE2RwwLd4yQTwi|0BAn zatzh<416$g`)dlG;-Qp&++=8hJzJh?oQ9-57*Gwq!!Tj|6(qB$k!W>sd9=pX_pS9j z2MsTWd{MoDTobLXEr|}X@dU!z0kQy9Rgk%AezD!6^qE8wsfFwFd_<1YLQl;R zSXLOp5>hZRJ)6~BZ{&SUB#(eU9S@T#5%=8M5NL?-9cCOZn>l~~D3P?|JEam%rkv8WG;r5 zDy`NcoXqQJ=-QK~|Am58fX}zDV2wwje%V67TJm|pYTJt8&MsITs;W{eQ7f=6qqPzh z>|tz6ftuk86pi?xyw^qpsqLjnH>6-iHVS^kM%&RGRU-lbOZ{84rSEh z_6-yuzQZsh@ppKj0Kp?!z8Z6}OO~!It}cx%D_h1x5dEDRonej#bherfP(7t9)cm65 z_hw#*J)c-!T@!U~y^y9ATMDBP%7ijd=ycK1&j&feFp-kQ;$zXj7ox;PDueC@bsU58 zWfJ*WwhWFTF&{@7M&XN%%pPnLIRIp>GN|B%zNAye?6zP_V1lJ@>ZPvO3%FBXUc?>F zocRsz9A4Xu`?0vcggbTP72Fx_G*OO&I zUq|fWrJb$js&q(Jf{RK=Cjxv{eWG{nZ9{Sj)nOuzjui@i;0#?V7|*Yyet5l_)8W>O zeo#F|;Lp3r6RHRKHpmjci4hg@>07vCM9h2}ck=8zcBEw-lA?|Uk*Wbv$czTpm3Edz zAv4F(&T%xT0gT}2a7J{Zw?VXTMh4D{(M_X$yZC^XF}fhF<}hyHL*-e_#QGG6ddpAe zNH!Ev--n4Zv3;9dnP%fDFSd7h(RTWkX$%q`R3^T|Fr0vTXkulm#(|<`LpxiStOY}| z5?pPzVDSn@2E`PNhKg(-G6^c@jT%wwCfhH2S{JlQ#Vv9oT+pskBVhEB-dFHV7SBF2r zg0D|d`>KBFX54ABn(z(Oz&WgeSqKCLbGszk9`Yq0N2b6(Hyk3<$jQzAwWro}lCJEcl)( zHEWVlm0Tys{#B((PL+sMm56jdDW!2gDWyS`co;%j-FloPfkPG2Mi*p65BDAE#$C>` znwYhnTP}Et!yG3dGHk00G*D0?`@mUKy!_^!`p&R4?>|HW&I%|Z-(eUIoBX}Gd6yy` z5d-fP?AE%EJ5LYX;<8TrPwPP2_0C@Naiwjw$mh{s6PEMH7-P`gVG$u6 zswP)Zld2Hgu>no;-l6uT1?p9{LMzx!R8xi>4r?Mc#S8!M_ZF$&MK(6S{FUVw&Q zNHj>~AO`>(F`1gRQAq#8mLG7mzMN_)s6(U9hKB#!^Y zL8z!O>$~iHGqE?;*XENc;}vWvUyCms9nc!S!%FZt{2i81Yg|vFR||GtmDAb%i>-O; zDVY~fuG)DXZUD%^L1Bi%2z#C}cK4+DhAO zk=h>i&otr;=O)C$!B}Zq7kwiAHi34v)Oj4jr-tUpws?#&aqTx8;aJ#`)qa@ifT?Sf zvJu2x-aCUq`FF7P6Px9kLY!^m();H=Hn1&ju{BVm=f#Y>3GTlkgSHnoH^4kpo88!L-F4C zQq;l!^Hr5qLGrTsm2zFxTm`kVYPQgbG6?Eh6#B*Q*WymuthD-e0Hm+_Mx^>iq}xv` z?HR~fX=2RM5_{8lNiM&(P{aAv_wct6vGfjT3*TWFj@$1GY72%2BOIpZ3dc@Xkx$2$ z0TU8jUek+wZPxUnNs1#T_Fu^7phld85eM>q0Pf`fKsy3K%b*%Tq#8jKGIv9QO1s}8 z@sQE!!|5NG{+dKHygH1j;1#UPA_+8u?=W?o1Dq3VXU!_JXApFFokCu_N&WAe9 zAX3dB3Yps=L8aYck+z+9c#YkCTF$3Q&|Z2n12Gx%khr_-CHewlOk5v%7qB3(*(Rir0EER84 zmx3F?No*CV8{C$Qc82=F>x(^godHfvTuT~`ZW7(^=5(J(b)N|P$w2Frc9BJ%RcyJQ zWXa4pP5UiUp4k~pM z>KUnYb3kLpa!e)A>4NHj zIKY!*z5+B;XkQ02sTr>fZN5?N<1o+l9#e|LhW4oPhN*5c1DobY-DevM6MtKO0a&Qr;M)5LbN$@nty=m6mCYfJM+@)~>o+5E^!#w=W zKh_$*f^!(GHN1C@#q&E8*Ba%;6&T4YwGPkcwMKEYsygm)(N?zO*k462VKa{MV~N85 zrZ4_@J%*A%ng0TJ%Jp$uGI~LCv;je+4G1EX4EViD>u!;4#?hP4@>Gy#L}z$zJfR7d%A^!xnUoY~HD;pQCYF;ShNWizB^$iB)?Np7QeQ<6u8W zE|UGTfJ4N0$d)kv_O`6rpGtRCXO9bb{mq}P-ojRTeG(KN);82Cscn)hDhyUzEIYxz zBI-x5=!`^Bq0V6Xy==vR#adFSupe2A4v`ieA`H_*^ORO7ifdTLaP*PlRpa@Jqpk54z|hHfvu1Eed|PR za<7h(AwKMWYc$3}15+mS8SUeD`+O|Jvh6ZM{c?<4q|+`LPJ;*#DQ~q+~8=e=xFS&@c2L0841E>M0V1cXQ&`I=Z~b&Kk%sE zh6Vcvl1uv2>tFobeznvNA56jge_+27_Z_sy2ji4VmYu67___{A>;vN8;ElO?mM!)t zEN8j17i}nAI1c)kT3R+-HrmyLac6%*4({wvI289H+_Bhr?d7=l#{EXzkHGyqxF3o8 z9k{bU;UV1n;5ThEX26OII2Im^_AAgM(tZUZ48I@+e41`@Eee_6!qw4mf3PTI-UXr` zly2U)2rVzx3_|N}QAqXy*7&C32~ivR70P=x?^j4Lt1qo#Q)Bo)>KtNq_s1BqNw~VZ zH>VJ1gAK5LwwZ9pEC))8HL4YAzW0;g_kg;SkY!=`Ep--}n+j!2=0 zlLC=Sfk?F|9h@g0Vto$nL$(o*tHl9^Q5?pJCh?)K}i4wJp%IYpu) zNdtL%mNKW!FK@;iCx*I11U=(q#-qG(`WE;6C0A+9V;daAiqAGCv=S+#Rhbe)QNNwM|HY0z6+OZ9u5qb6(+{w2$ ztf$1rpK1q@Y6nrsgu!{GO|eKdMrqU-4JURx%Wo|*aGGCQ6VrJCTb)+=5UjkBxGnbu z2FK+wEjac@Z|&KD9`GG{gKXLtCewqs?VsAF9h_zUU(^qzI>AN#VB3U@%b5VnkXIp- zZG|y@OTiM>x}_kGg1T@HECcy=F7D*rdDc?UhN~_RsV)%dUT#X`UT#WjTTO8W;?bI7 zgrG#WptYK!2fm$X2RE;#kcke+kDK8ftSKTvLQo%q9+Pgr9n^t9C_BU&plVIeY&O3< z8^G$IJkPEZ@N9saQSDU+@ms(rDf4Zq5&A;{DrX{Gz8vfd7{HZRx#@pVk7KW&##gI-=+WIEExlt^Vt6f(mhNu_b)H>Jhb z@@lJnwLA`h@YV7y9{|y;u2&66RKBM}t}WH|@8Wq~K<<2p_10wk%@4@EwbI)mA$t`O zzU#ZZlFQornl=jAUwga58-g-teuMVfUw4xaUfq2*v7M9d+ZDL$@apxe-x0h z_YP<59GOhUarJmRN_?Wqe7}@=udLn-EKQx1z(Nj3B8E2^Jca6-B^>V z{E1ZlL?P_Rh;4?2R%ns!i3o~1&QDYM(odsyB$jV$e%c3k`?yzvnezLcHgdk}!j1xh=jIYfF_Sk;;-tx9e0I<_j66waxd+6KS%QK3-5F+w7G= z1duD(N4x32jCQ%DD6TU=n+Eo%Q|Bo{?ALKT?IFZ+>~T8vW6` z#s>URw*qG(%npAQ#I82SX?rP8xg*f42pMz;_si zV{h*T%0*(s@2Dw>rhSD2iAiwzdohxZA0;Up%xAD{L{Ju(_lt06{)=tdpyg2^5vh=f zLWU(mX@e|^l?@CkCpKh9F_#wL@FdAo%yOX&OTKd zgk-lKZ$ccl9YOge77VK`UI-vpupRLXsKLn$e8+1?{4*uNIC0r(J6J}Vw;X~Yq)yNz z2LJWf*+~aH6B!}qBh_{SO}GkyNQFS8ZmH5(c`MB`LP=|c(ReknKs>FdCh!V&cr@T6 z;Xsd`zsf!^V4j+liDrbLa5{ScCqaKor}Uwx=w>AER8F~MC+nCQ=#+{`m5NBu#8KL2 z$XjWxn%_ySDis3A6*RwJ!AGVhP%0`RP0_@FQaP1roB91*vy9(ZB^{zmS+SB;88k0y zt%y{yh_L(#l2+QQ7K#75_{|Uo1E?F#&aJR#Sv2vX&aHC$Y`LwBaHgTH_7V8=F7kRaIz4F^23g`8IMIUqhYHDQgWGYZ zEZ)MMa_k8WP-P@iWh4rj`yoxGJ!p~bc1Uub0bY{JUpMm0{7oX7L!Wqh)OB9LpTXX=?j}V+T5p5h=%rLgpFdLTQ^U>X@!&L58olz_F$z z9Md(8!5RFYF{dnb(dk~7R&>EuJ{X^}t{;rRs_R55IiirnptL#QxzakK>pw=SE^R?_ z|7ersoGX-y6=C;Rzt+sPw}Rpdu7-A{qWRpkws7|d$6X@jE|E6$mBxm?(mKN3D-p|# z7P$LXOWZBHxEA|FMXQ_xYAHzDLiL8D)6 zfm`pi#I4Vk(J1jx&;)Z5T>e^8&js8cHvcduEh3c`QOHaHca=8TqK--H&&bogElBI^ z*8Pjl@CVx{3E8f~*_n=%8_rTy8&0H>AkzIRl*TCsO6!P~X@Df=wjhbWv{Y_lCfoB> zXlB~TwVSxKeZO!m-EoabxkiLu0OV3>n=R^?{#GKE|Ht0D0M=C$|Kq0*YPc!1h48f~ zYJf-!EzlRQ79mM{p@pVRAK?ulv?(q0MUs{lXbFS@F%)@;pr{}yC_WGnP*GYav?yvp zR8)k56@#r9q-gaU<^TE2?C#mS_mP`4lzxBzoc3hq&e?O$p4r*i+1cIMV{&lqjVxT7 zGk;M{L%z+{Rmb>@*&+LPpyLcNJ_wgERZ)tl6D(R@w$$ zB2+jL+96JH&5PDNV#+CE8lysKY`c`UBb@4}r?5GT45{5abzyCF!`#}1)k|yY=GDxe zH>`dyoIZ6yf0ikqO10F93!S2Bc?qCrLq1gZAUov5}tB*4%s?Cr)=#!pIHYk zb}O|K)5A*bj+8)!D*<9!0>pHXRcRb#Roae}z^_pPcjYL7s-Ofuh!EF#cMDSZpI@(_ za5wcY^ao^beh)x;W_Qc5(pwS--TyHqo1x^o!mD2ZsN@qZ7s<* z%wfZ(lof4FYxip<)ohm3Qq}fM`EWQG+t!zkARS58myI!4)7qmYvD`P)-iMVu@5vLl z&2Hv^W^}qv8s%5qfSmS=_6BwooR|F~OhJmC#f75iJYba=Aufs*0DDQWzQDqnjMsri zpBJz3pj-SP{NmH;PomZM<#_Ls>S{ln@`&S0POO_Zdq!>G)Ak(Po6Ym zW(uKt5`LFDuSsd?w6df|EiEtS)8d;`Zp-qVk=*0vt9}NTEWCK$!r60RWzMf{C^`Q4 zT_lqTj7fg}8Rut%ddM<32DWGcLn{f7@sC`>Bcm7aK}8afyb|x%*ccy@aexDG zb-K{fG)L3cf(*I?1J|75v{l|BOSmhxBEY-+bULK}^wkyb2x)cl9j0ztJ5YW;lWgy0 zZ+>UMz}=Y3cLofKE`Tc1N8%Z(Pp}gk;WanqT-b{k|ar|F$) zI$9+ndR2XGgBgRP8nM*^$^-kXRn0{*L`h$;xTdZ)^)hzOGX7d$hSS)oku92OoT=}pV>WOXYI@l;R!H6jJ%TSy*;@mfGQ?&~wgEWeI+QT)iE}DFb z_V6!zO>^3qk1mk1io?4Lo^QS8>ZN~i_y`GTC)LjQ(RZ!9iG4toZI5*OfSY<*`+&B> z?bbeEgl=m3FVSOEiT9faUrWAnoR- z0Z#&a25=tWvw$lAe*$<7Am&_)-S7oGMC}H)acVaZOGLLrdcGvIFB&WnwfByqFA9yr zf5Z~eRrp>$r7*hIV2SAW$elj#Rf8p>5wHd{-57(>mS8I`27@-&irUS;wq-OcZpF)r zqP_TWf*lA<4UD0{4%nSd^`XF=fuX^jWQuev=;&s&Ygd7*J^n043d=0)0x)nG={$La z)2)647A)y=qHT&L4evpwWTHbwSiS6u!4V@zsU+9cES$Y)L3PcnSr{u#+5ciEuO=KG z?)&|fti{l#^EDqj-7m7V}WslbA z(HeFBY@;3AKdi?tJg=s{7ItB0wT8^^jA&iF?KA{2)eyvD4T0W>jEZ1WSgaiPw8fJJ z5~pHQR((-|=Tl!4;N%hZP|iTd?Y+RM&U>gY7`pF@P+#mU;~!1s&U#gzCHJvU1-2ri zk5^Z6&aZ6x&7wRM&fe(Kziv-ku8`%`zEoh=7gc_b@>AH_V_!a*Pkc_1$w^5Q+2r_dMUYA$&>2=Do6ATPWJ z4~#y7b5RHKGS3(QUD7~Y=oL!E4n8o?vfpcb7t5Z*0QM*b!m`JIH+lOqlredS0W68S z0tbwgc`sC0EpuX8=EM@wT$F&)<{K<7^SG?nm$DS$J!xNGCUsvu8e(0%o>f~Mf?MQ1 z-issD7HdFj2}+;$@Cy#YSsV<7YhmTx!r0Qy`-VJAZ|^cwdepgLjb#2=Dt?XJ8;d7d z69<{alnDOTcp!ck0kWEZ8Xv5sLrhDDSOP_(SF!WG!K8F#JBjTBPF;gBrQ|k@cw_hO z{?k@hy*GU|My;?d+<#F~x3}Waa6N6;y+xR@SMbox74;}wWmcqc0a;Y=YsqKOvpW*6 ze?BNG-orE_aegGMsNL?dMQL{XGo`@!+3AO!9=aXg(^ssj=B9__&>#f#6#pKRte8}Qr{15ZBh!RztC*q<$}yyL+?&zWwVUfo`B zx!v~^m0c)1d8(C{(Adiu{$9S1er8?GyoP!aC#o910bqG>u-KQS637nA2$`UbMgr_tv!c!W?$kW_V*ubc&pryQ^xvaoR7L^(uSDAInP+ZL=W52}v zS^^p4J$PVr0M3&`89SwR7CZaW%XiLe)AXBbv96ynZ^7dEnBcd3ac#YC9_)-s&stF}kB(5tB4 zX_cX?vUO4h+1l=8iCYwK;?c(UhnD9jMFb<5=K?vEiWBqCfWG2bK+??n3{w9?cD5)EUhfBsvf^+ zVMEQlg|&5N@U2wl-!%CA&NTlfqZaSsxnH`OL?8#xF$Gg6jJ%V<1YjLu?{6l~`W`jC z^VKvJls#4?wXselA*M_D9}^mv@)N^0T(FXPM`1MCV2S8i zyiV`^nZXc+b~l@DsKI0cYU(tR^x3D(_}`@g*aw(S4xxQsC6hxw0W81CA#BGoTRa_2 z4q1;+y*#j{{mCIsS*lXt@rs)fV>J5>$p>sl@A6sA)5^I#w4j?ZSULX{@jeZbLrkq4 zVx9$^!zD{m&n!p9cp{}0wL*@t=l}Z*a#W0zc%Zms&+n0=*_pebV$#GN&@>Cm^NVDk zXdqq3&dO0|RWF-gdlUnq>h-+{$MjM!0(Q3(H}Y6OD)N6r2((v6Ol6W7qQAj#Ra&vZ zVmYC%C0>^*}V#~J2lXOyoa*OZ|)U3ly^047yAri zIr@MVaGtXG*V4c#j^FNJ8BoU1qDI7dv_hunKl&3O!+N~|2(MN2XFyJ-d=rq8@na`* z#8l>pA^rhMTWK2%7R#IlyKBY$sgp17!kwA*Vn^*O!;*y_QNMltSSVXzSe1CPu}*l- z*#q)h+E^62tWqFXyHa-Yl&M89`@|z^r_)KChUxRppKHcLLysuSBMhSWEd*Cbp-0~Y zWQYCRCfNGdKvZ2uOy!E0dPJ2*kEqg|N0bwJpP~*5J?eXcmPi+CZcx*DU8kjm{Wr`v)4G_b^xF+QC7si`lcYE16$3 zJNw;vmVc$KPj(z@3Wuz!5qWGujZXZR@hV>`$m>ulo-k6e)<^|)s!9bhl?r0o5mOpF zVoGyTk!5;(8}96yhW-iix+sr+pJ}TrwkaufMER*bkQ>(XqNo@cM9S!V+BMK7V$R9=Xwybw!7m!VXY)@ZQ2{p@0dwTbj( zTQ`4KL8>Di&YoyXRtY)*S8a;{R3ylEpTCA2zUsSk1NXVQpkiltw&9OBMR&Tx>6VYJ zFuudJR`CmWZkCJ>*E;NVRqU>tPx05I+^H>Yf}v8@J9RM><>MfnbQ>NLXbUZS->%Na zYCp{m+TLdVLtN_mY*+67t9C+m>|TvMyx zGkz$Op?_rqEGNq8dcaYD&l*dLYxs3-B=w@Yw22{l9HgCB3!{k!OGK9dGvlEctM zMh8n%v;>%jmcV?t;}&Jmce)ZUYcK2x~p*>9hlhs)}c6mi1X2X@JEhbHY;PtT1@I% zvAIrQxf9p5mr=0P+cvJrBd}po=0x3$@~*F&b>93%=jlk2n#mKrr!qhH;Y7i@;3ikY z%$bJY*8naDycX~Zz-GWt1LAD_E+9hri8)k`lGTbxnbC?!ED_Zq)oP(FHCQ5IXhURsQ4x$1Vu|QDVEVjrgC(MC&DFx_I+srC(VKXd#y%OSsIA7W85b$5fU+7Z zMqgUINclZvuQQ93za-TnlW4OSLb@%yu*ZHau9XKO;`hS-kS-$C;}Iz*mJ|7zXBVpW zNFyLN@XZ_$*i{qh_&f4ajME;>M7}EqhMRE0Trcy7YL1&>tdWC=Xej(uv}k$e>f+dhmcczZ(|ltF`AY3 z6^JRPh$SQ%kJ28;{YtZ(%I1;%Mpk}xBxzUS9mnO6w1+eBD@D#G&CFBEZnA2~O4%(S zc2vr~n}KT#`Q_D5{>+ne z^DO7GN?A5e9qTwnOgTkNrA%p*GNnPvQcaavGyv>m!`F)_UCTXbY6bnl4)M#r@keUYJ#N7m11&-DKs9PJnk$>jK1|V zr5|HcvA#_7OExp;DF{u}RFK-^J_Iy1f{p-oBsg3Yok%u_gq;HHP@&ZV8!1==umc5a za@g&_G}_eHf$>E}Vh||pr;hdqm+r5QwjJ1`S>>5agnR>??Tz2(KNi;y@{OXJC%A=r&5pXRBDZdSC0}H6=+iO{UFdk40!+1 zK;)oVH~wVN1>;W^9pINu+`5fu+zT~z?4U4E-N50#%ZjZ|rFk*|-}x8@2_an31VbMJ z%?YziX0m^aY4H0OfTXtr4h3Z7@`C~Q0E9e?rac-DQ4@|5uO=L^L^Ka4eXPGaXyw}Q-P_OITP4+d~&~tJtxd25HPg@G&|P)R3?V9TTi+@Lc5*aqL87yhnZvsPkp}_s?O^)zX{(RGVN=q+sx0s zfYdwp0g`F7xs_?elxf5g(c|W7VYJ3zG1Jnms_d;03OmZhy+yb_HV{YN!`$wLv;SfE zBS)|C)62%6oSblC5|U`qJcaN-kfhk*PYqP850$@sUjZ}*{=41{ZV(Qwa~vY393rOC z%a!&p?o-5U~1>@UF{^M{3E8m2cSK1ohFEq=oY|=Iua+-O( znk7b^Z}ooIVtx+SPRJo`pNVT`lB^l!*&qQSPnla)5*Q&DfsoM%VcQUzAZtMLO_2SK z337ljK@Kz~$cJ5RCZ_x)rY4BeUdFSO=J>ngCdm1CXxI($O_0wILIOE@3IE296_79U z@TkA zup=Azu7F>m{JGzGa`0Q0gVqMV8H9}DmwEC^$X|HDg}>vC08TIhNSC1UmzeUGmi@n#e2vt+Puvk zx28`YKXn2u-lQUV@@X!b0jaWf0_Zqc{q+rX^A_3w3!$Fl`-_obzZzG7Q_Ry8K+ZTu zmsP59i{l(IygzUZVk#>OBC;!F<-wqlj_$D> zAuB%v>X?9)yocF75a+kz=J$m0Q>RX!Fm|lMJQ;b`egPv(@z77| zXwdAz{9r+Ve8+G@dDO;N#xW{383UJ zo43#fSLW~K`0dqqpS8?O$Xfcbm_M*uA~_rih*ET6oE~$mC8n$;rgL$Xwh`%-X6pUu zHIUgk&1JnuzW|2LX&$I-&FC;7W5`r{gfcr17ec1;9%dT+i0Y!F@`5Ke*MAJLPM!X_(QF$V!93rOf6s0|k`;`U`59FpiOG(?86z%|3Nq@S>N!ahZ)0u(F7tj{x`CnrS*PGlY)wkcY_;PJGZeguN93A7 zhP$FCMSN)SDMo`Oo_VqjnaVWtq&t=C0=zMtmc;7I+%aEYi3@!C)KiVNuvnhTV$~2| zS)}`S_`dCdLcPZnDo0RNT@X`sK}^+!(x@(!mY=$q``+c)Dv5tEHpG&)Tbs@8)%f0f z@<#`a?6r*XOlX2d^-@H%-*mH~F~Ddx6v^P6VwB-fCy?!aeF=5KOkDq@KjfM+G&{3= z>S=Cdc9@?mZDiI@YPRpX2+tl7Sj@~1>Q!_O&Yy`=1QPY)-DAh{Zx?F#rjqnxAIis? zgYR616SFe$bUpS*vGd#EZIn9AnT1-X$!V?A#1hdgq-qe_`3BQ&8}BHT=`_R=(eH3o z?|sE!I>SuUafX?uLy31(V_A^j$3u%`cPXu>j8yPzWTT&0!}$%}(fiXix5bTk+sQ%E zk#%^W4BfpBrK(3SZzadfn)A$RUC!b0f8|+$Z#&YIq;=SS9t1ZifEThaS*$OXzsyr5 z*ahz5OZ6CMinI!u)f!DqYc#P$^db@}?InZx9h>#?m>gC&-3=@vdxTc^Rk#ptY3{oy zPL5Tbu0jig-e4(cNXnCe{h=Y81C7k`t#RgIBPxM!jaPzM;E8m&sVAlx=DjZU;WSW) zDf5WwBq*hAFjq4$k3mR-A%?kglwE(*f<`LH8pA2_?lxQF=Zn$Wuwx_Mx|LZ-3=ATY^*8><3RV70DP@@ zSmr8zI3CL)kYWG~rS!9)h3w@$WbeT^r-tmE&of3dxG>^6kAcWFEE`3%~E|AX9-Swbi~@9BH^t$ltTe+Jvsaas?+;?jvc$Q z)A!_A4cva9Qbz1o{0@9kRufZJ6N~k$HOS38<|l-anb?OK6_IX_u=4jo8}RdBWft$j z12M55f#75I*(Pei;yP?dg_WF(Yv$SQ1j0pA-rBicVHK5G+GT8#c%9e>9Ij*dNUT*} zi6*{>rIR^3D=rxM=|?p5mJDMhm?_VcW=B_vfu(s?yYj_N(0|x>oHnu2tkN1s?l`FI_Zmwrqsr_}EG2cSdS=R*v#4 z^y`oJ3tgAE-{gv&m=-%Rzu4`uUYsj;@y$5>))4G9hh3`Q4$q6*fKwV|+Dt=jGC-CKqr$@qh0y7d=%prT ze?V%IJ5X?{NrH)sTilPci*Jw}G6q`5BN@RR%Ft8N@_A z0a9aHrv&6k-9R4w6uWbL9LO3Air&WicZ1Sh7xWgH?}Kno!ujD)Gm2>>dGfMf@vskfY1Le@R-YGJg=q)SA%g8Q28^9I8N2w<9Sqro~6 z1YyAL6kobCQ~lsU_n6PmEVCWi=}+U)Hw5zHx1>cG<>kC3%kz~BCl#HzCr?}VcR_ix zyl#>5Vo4KIEki7;5%R|_8zF1)lIwD?ZvTv|%exEc7?<}Qd9p2K$0&RQ*~X5ZDraKK zHe#Jt&Q2qzY2rIGXyOO(iXzOi)vjq~38qf=^*}hTHw(3@CR>;#YF*i7SdO|V=w`#+N7Jezd4?S+nlNt6ChkyTnk#I#8#memsC#jc6X_aHWn zImG6qEMhY+b;DHCSj6_u2RwR_qL+91yyht?Zo3ChRQ}^cg_w#8v8>>qOEN8KPSO*MRo=_Gt!EsWNfbTE8S z$u%A0;b=N;=&b1$8>|zC&*1zFpF6V3Qb&f*IOM5c4z;v|uuO>35;IbFq-KHg{n^{}+9kLx=jYde0a3Zny$!TooMb3&)VEItsUNq{6%(xq0XJB zB@j+4WG#y=g!DS`9$qj5^3 z<=KMli?Nw_xQ1*$OW4jXD=}?Bh;_aNN%KB`Iz!9xDLguJd%+Pw-_#0y&NQPA%W8Vs zaWPri;}(^0bnYsg;{&GiUG$$){vL{_$)-F6Tu%Ajh02i<`;tDeVx0D19`3^lkp@Tf zz*-)u3&%;J(C0-SYF!|fz_<~D0ZBpKVleDt>C*koV2P;RrQ-{DM3nZ2a3Fa^~pnSzdKMJ{xXu140(Fw;qE6K6VUIJpvsaay*9of`{GL($QG zUJu8iE=)Qqt1wZXbJfJTe0Crdyax}IZD*h3n6(@>-XVp-1U&Q~Y?GmE8~2i^)tu~; z66BBtKQvAk@jZ-j=+E^TgM#O~k1zso41TCxM@(xaF%2-Hv~ME4(&Bm1%5XD*H@l+h z$TVM!M~@5G`4sQAC}YwUV-NyG%`4l0gc7EBb_$ zI&9B7YLZ6cp2M>?NpXNNuHyFuLA)GSGGC{-=#~0#21Ci%T$7#@))xt-6FdH*N+HFf%ib1<@{1y3N|jt%B}?lQP*$S7Vus4 z-1uz)44p>4AJQep0M)oEMPjNHiD~Exr9FW3N<&+)V^yRsLls$z*L6)%=B^^Cfh{^) zMZOUhj*XB3eVO{?E~v~Pd`6}!!h*wpXT3dc3hYTKFj{ZqrB)GQT19wOs|YczBASj> zMANZ~XgXFAO_z5S`DJ<)*)fT@JcC4xf`oQWB8KBD56P-DT?7v&47A}d!x`EmezSRB z+-$lBKnNV(h4L>O=Jk{^m43F!AT(K3L6UD;`ot2LxTFScp;+-umxz7@nx%iuUcCM8zXs+1SQnjtQYJ1a)?NP&k3wqf-{hE_)TRyZt$yckv zZo-Vv&es4Wf$e@E5*{H!Kdt?DS{n)yHu)R|{5$>z@i*Fy4b~$!_gm_jomR^6A`1h~e8;R=OWj zIs8}PPILHNTkcl~T|_(7rUT?VH{dCLO9mNfWIjp^|Hj~l@{gGEkC=u$P}*Ziue2R* z$yQ2LV82D9TCh)d7+%*ky@k)m%4Ki+fE1J8#u9OAON_iraL+M8;rM#%p15%A15h*; z?Sj@?HN?|e=>ZM+?(L9lU%2lvg~JZE>Min3^%gPJTfC}zi&#RocF=TB;F+3^%0tsp zZ)v)`TdlXGuu@EYG3=;-%-X1+_R!ubl6Vn{QH0;c32AdjN3~}TQjQD?$ge%G#3qIY z5n1V?i12mkhhJkhAt$l3En)|kHC}4~F|7f_x}k%+G=sGN36JiYv>%Pk9+_3z(*j7O zOk1Q1zY%9;z*t}MC&!X+mjEwpsF}C0woayrG5`SAu%^YibB*U}y~?ueF8{OGt-@R|}&%ke*l~dIgxKd);6O*$GV34Mr8z zba~g1Kcv@?RJ*QeYr$Q3Rk-KP1$|amY<*AoZ5MHPgfy@1a(NAttJb6&?pl0NKiMPi zEnr1aDQL|?%T(!R;Hs-Pz}dX}d*2-e+7a1h%PvSVf{-FwqE*-8{waZM@ts3)PQW=W zl&#>26s>?HlI7<)uHCi|-5Tsn=K@U(#C{Om8mtWRKtV8NktiHvnP^KDR58&LP+HsZ6rmR3?e3O!BJA zBr#n-q3Jf^8JZ6JPspmk!sufLOGF1d+M$j%!OmaX*<&Gffs0Op}l}@MwWs# z6$tB@xzCQIa#%?5!5B}(BB5%z6lWMDnrWE^Um2Ch#lL8AZ5>y46)&v4Sc({zGaOXf zEJZ$L3C`*n^Dc?QqV~ayt52PaeWtbGLKVWh8qp~7{UtbgoC*?upAN`8VQPyM*B|gh z^*=Gy|HO1ohtk#{z0%Swpe!|9_Es)v88~jxlHOY;V8hI&qoans5J452YxZ_4x3(PO zX@Yor&Q`pRk;5Rt@5Oo{nRx@vi}A7k2AU_~-oGIKMf_r;CguQBHL(;}b~SN5uCmJ6 zsurq=Pvcr?HZ?IOtieuAl$BMD7+G3Y&cE0$^9271VO+6%pMsEMDtrF~3?shtJBH$1 zfwMA}J#E$kJu`N!70FNSh|0+j+h(7r&md$#4jQ_Zil!^4-Y7sSq$*9|6jX!xO$Ej4 z6ki@rVNveq3Q7O)yQ!`cfM*#xI_jdXz>CHsLF0fHHD4qCPXW9FkU6^w@I1g(fENH> z14v`J8IXKL*-L$403uaylsr{$#1hd;q*^AlD-D*2wgTfFh0=v4mWYNzS?RsQ4Tdc| zfoZy>21`UYI~v!`>%Dh7+P#kU5HNl3qXyIEX8JrXH`9Arl|G65#IY08b>wcito4I^ zK-HEX1-1#_)h{XrHXT?|ltB+<+J<+l?Y}3tR@#kpT|MtV&61!HOpm^*t?4JdnycDe z?cdajcOtfEK}(A3{K*1j2M$Kb7A0IQ1GeM;h2krUP6GD7g0T%#+J(S4p*6Gp*@Uab zIPpk1!phGTe6RUc*Y9mjj8_=VGt-%6o=`lQS=M^`Q<*=gc|@v~{J+!6lgF2x0_8Lj z+Ud{!Cx+VT|C!G;5gQThKYBH=+b9P^an|8%U@efNmnu(Fp0Wa7VnCJwuXq?BeXS5KWYM~0I(A;s5` zqI%|n#l~=?BKGY@@{qG^_^RPJc{KEj8fm#N0mR)A6kQ{Ed@&&3(Tle z5u(VqltZT#tS-8?CAs~W%7Xd}=ko5kIQ5VAkDAu?|2|2po^9wm`h_J!;_DYgbH8fS zUeMd79^ACO*OFe(`4{6`Y@#CMv1M8TwCd{qS0XFTCjoDV5AeypvdVZXimoV{j;DVd zO=&-|q)G%k8?;w(wO>>VY>3cUh=&MvF|hT*p(bE@Zws(jQXjrl%Q?)V0<5rRDc zY?Y)V@888)g3}%^0D%NJ*`;#Ei{v*g@D>Qh8$m_pJxuc)&TF$&9@u=Dr%fT6LSgn>BC)x9uVl1&{{Ta

    QcLfL{Te42Zln&IW|EG(HOW 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 s_8aUQI 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⁡ZCz=Q+hD2M}`3tX|TIU*?C+k{$m% zh2ILBmAu{nJPzaiEuW)X;X9GzSn-yxy>H-l8aP>fqv+|ARP7by;^^*& z#$g2|@2Q=b;WZacM6I$upJL1PUNl*PNLitJr8<=~ljr=zkzpv$i}2hrmI{^C8OOTG z(%yJtWv~2{Opg*=EY7o1X|R!;))((HkMmeg5jur_hU7$hVqN&4 z(mqjE4@#yTE~`k;z6z2`Ip*0Z5FbJy$O{!G+Vw|(E%^KIfGnF`fK1tIhCuL53IyNs zwLJVv99yx(l^ZzNT?!`zVltNAcBymO)mgagz~2|+XB+^Fx&HUrfzN@?#`FPa?8jd{ zH?rgN$K%l7$vD**XQ#f8^J9v(Ax+vBpG3EAA;iSNyZ7TOw@LRjx7eeXpbg4tCNs;4wt>VEtt0AixpS^!X0xYtH;!9OW^PPD4k)b4`4=Xca7c* zS~+bS8t86MrlkDqaWO)-Qsb0^F_nCXMgBRw!548#x{)7qE_qcvJ{T1v#v_3x|6)8G z)g^nPxJf$NWAvG{d5YlauzAQ$pF9?aa^Y@2`$R1pg6h3F4%8PAyEK|WR+DKp2(QNj z$CgHmi_O;<@98F!7|Pr$=;RN}l}+sc{CS(g?*rY+vc|9@!`LSR()vWR$uLEj6BR=l ztQm@vZVm<<0saucivT|dxE}COKql%iK=xIK1HK4&B;ad+0YG%e+EIWU;v56Wrio!r zhU<|Sa%NcHm`fB*o0Bb4*Yiy_ZNBAm&?C;boT$~Rw|s4tf#V#lq`T3;-D2R-+~uK< zm)GR%zUjjY3!vN!yw4Oo7>T9Rm8tX7pmX7OvZF(07z{7O9Mp!Hco8nAjrTZq4vG#} zN7^BEGb`Ot#bVq|6~~$tmqJE)aWZ5x@&JPW62U3qO$bvMd0%K?TwlZUzzel^2GKTTI-^2wjmLC@JV3EXd{Fxq zGG3&e2^?pni^Tb*%g{n_Z4_|woZkBkU+NO4-S#qYZ0@?A8GwG92%+KMf5F2x;M8vn zGZD|v@Z4jHiRB|nG2Rk-4MzdC$J4`uZSf)W%+e%he7e)c(=^(s-;4<^{S>6jYca{C zSa5ZTvrK=1Eryk|^ctIXxe1(4l-wzihISEZ$P~Y`^aKDhKh!JivO5$WQv(_1F#$+@ zb2cE^qNNIxybrJ!fA<4oZ9_x5%{&7*2*`3d2aw|WChA3sE8nEJ@-1JS_9}5O_XS

    ^ z@Ga8VN63lyyYaSM_-?|RJbC*S1IMYy4I;$J_^lUo>=z`L8oYf|_c#Wmf|JqTiz9W%z#CNoaR z)aRSk+V@h)Mf|cps6$yYjSAlh9mqOb49H}`Ru*g9O99v5?`42D0G>nlF8R{)x z`@Dg>*uZTxaGMMq6b;p-Ipw--%u}vh9(GK*dK+#+g(41JB%OvE#bmC-aAO!6OMK=X zf*;{>aMmXK$LPwwmMCVM@;$vw9c_b|dq9D2CyMM0sWa~8!q;Ib9P{Li2$SU&97hw!5fDKgJ$B``=B?e{yMEKU_+~j4UKhbtN-$Po&F)&iKYRV^@w+#_`y*+=%KeVm zt;k!R(v!}{Za;b59B-mDu0`YEUsMi^)aM`zND@!47NV;sZniLB3$Te18x*kxQ`|^- zz}Xn%i@kx^nYjDku@93>Uo|+egk|<7YiY>=r%$|sb$)EnNcxR;4HbU3+kvJ1O*GVCz1%#~p}Y60g0 z)&Z^ptOumF$KqFJ1Kj7HaCRpLv8Jm4u}?xkBub;hN5Z>i;L=GTM1i_iWJjE`bro( z9}5?Yn9x|$9n-WE*=Bb%RUy%YGE66QWQJ*dACT4e0O(}(@l94A-}1FB%6FouNQpyn ztAl>21&0gH9uGCM4TRdeIEx0_Z2Ze_VyGffZ2gqT=fSQ>obV^#yo$aAbb7Iq9gBW% zg+tQC(N(8Aik@Leb26U)9z*LlkE=y{mzQH;QZ6oMMpz-%1c0aREG_^1X{th4^6YNv zbs|8fhi(EMj$G(�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

      RLoPOi&t!2}*M#$*ron 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

      hRS$uBF=hP22S<*iKAma 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𝔵fcWtO~ z&rOo!J34&*fo~i;1orZqLyZry(7CV(Jn#FUMii!90D7o(H{`!F;YbyY!_%?-wwa+@Vh&^P3B%N^y32OyB)r zKDkq`$Nbj1E7TZ_h0abd0eS^s?p`7}U4Fj;^S9#c^teA7-i_nxJyOqZe=xuE!K_rA zogUNoGMGb4^?J;2%X>qO$yn&@^kSelAIwwBB&W;o5ipJK)9Z16TnHxTe#z`)qL2pU~^^y5XZ>)+^2~ zeN7SYI+)L%)ax<7b)E_}F2X`*r^o!pgXyzIugCn(R*VqDPq6&*ICventDe^DF~4iT zyrww2^fABhfcf?ry&m&>=Cinth=tBhkNs6wFw@rR^_brW6e9%j6D+^Yp!XEGcb?Ph zF~5IrGaSPOlgAO2Iw^rEfdyJ**ffy(hped&gPteZ}bX+{o`I;QrX=tas77lF{k$KoAQq z_C38GpS{fkGhcDoENFkgd5cOg5!a_&ZU2!_SzF^+`K(EI)HGB)^ znBwg8I35byfpPYSdcD!ms|53%;_R+}^oLBnouS64kENdOdi+)}2NdVkvz#|F-o~Hc z_=|V0X+hoxLNBuNDG;~vTB_Q!~?Lyar3(0R+*QZB5g4}y7B zad!FOeR6MsIr5Fvvnv-j^csH~YQ$rqv(uY}fJ?zVw^wp@-Ab8eP4hH{YP^A4K{veJ3k9d>IuCbk4I%- zZcv5YpJ;T_>k1}Qadvu35ReV#aHL+3*X>)MAsG=deuC{^cF2j~ z5~K8b^|1X!#pv`nex3ntOf6@<#fov#yARxTE@!>}~meZ+0_^3cdzHw zbxJT;`PD)B{R-}%I?m~fsVf;>`Z)jB4cz1P^m@}FvK!3c`jU&n|H0CC5PB=X+|p2T zy8BfQfQf7*IsOVgOFy{?_GmC`6lWLj2zD2Z!;BGUNkybxEv24aeh(wwMPSNXNlusFpTRV2Eje#KEcH1B@g{?r ztvGM`Ecxa5^e!;<+ekfKeha}YP@GpUNW2e#`Nqmw;@yvU4ZJXOe_Q8xQ`?0Zqp{HG z;=K~gOIFSrFY48&U|#Fs9PfWF!SMr&F5a;S913Qw;+U;q?U&{J3iV>8o?ZXk6x&Z! z47|bx)8qU`Ik;(Ydc6v84}fVE@8g2$?MC{BgNg4bIlKDT8hR_hY*CzD{o`@w7sbFU zT(Ed~-QaI<#}a+%3pUR{y>^`>Bh`YJGxd_eb>t29aCYU)dEg0(5g>korH}WUT?MWr zS+Cau+(U|S(t8u!3!U|PypQ$(m~*>G&aPfHKtME@gsyr$rfs<XKJ zUa)#ay>GxAQJkF~=bKJ|nb6Z&?^-ZR6lbS54FL~;X_V%y7XzlJ;_UR+B47ZRkUq|O z=Yxq;oSoh@^pjn|tnTZq_coX>6lbT$^7|glpv&}nY1kiAz&xWkZ~tQH$9F;RGjao@ zo~~Zi85m|7qMlmn72{08dNy`~7b1I!ac^m@F%6Lbp+FVm|lW!a}EucLitiClzN`uXrB1 z9?V0zGG6}L)zjC(e55!#J)Vbt1?IpwXT4f^VMa47bar|?F0=-7YrbBuFErMGIi@(f za_0F$ivqNd@lsD$uX;|vc?A|a{sya8jCU@WHx*|W??%M?6PPCoo#Q=YQkZc87CO6l z*^W}cT&p;{csY)J0!*tS=XmFXxkqujc-MpZTXA;r@_eDylrW?2ROfgnfVoC-x_Fm^ z*{3+Wc&pKV>rO*GC~=N=NGZ-QvFOTqI|3Jh$u5(eUA*PU?*cI4GlIqIyZ*-czcFCS z6o<`%_Rl+EzY0v|OketfwM&lsrzr+r;ew6p3`BG#xGQH#y$FzYdQT`u$puXx$L;IE zt(~pc>68$q4I&ZtQj1#*e>^d;7E6%R` zI6uA(OjMQBvuhuz(CZ9lu89klkN(hm63m~Aq@LaVgm*wMkO)N*IN&R~Wp&Q6c% z8x5v%g<1*rdLOJl4~5x?2_hT@J6lWK22gFFtKzM_`_QT(1`c?tR6;D_pR0K8TPL;C@*p z_59nL{5B;wZi1!7YMe)5q2q5bJ&uQlfVuDqXT6bNrYKIQR|O{LNoT!Vz&xxto!%Q@ z?t02u?=3K2D9%oA7xMcTm=D)D>qR_`@e39@J3Wp!I)Q2VjI&-Am_o(b>1~JJ^#SD^W|`vb^qAk5z}&XhS?^6SpDNBykM-pbFz-C)toJvVhU+9}r^ozW0_KF`boDv* z`7k353!R-F)0YRP(|XD2^a{buQ=FY1)3+4NtA)&djZV5inG&Weh+|oX=5-w-|?dXxStdQuW-ToQ>O24aG$=W*JHf3Uk@`r z$3kb9KF*IH15>z3a(3h0WzcvEO#e3}XLmfJ-dHf(H|zB}Lhr0CVa8=x=&)JP<3|Go zWPvHzDmnl9=PN(z-34Zw;_UPo(Z^sueoL=60D4hxO9o!yg6$8EPqV;X@s3_^6BHf< zGhv(Lc)l4-Zz6)92Xp>*$?+?azVXH^kq-V`j3w&>%)elvW4Q=D%lPUF*w=z-wL@|) z4`-R@AB%icg8AV?$=THd>Rqxk%vg?v&Q32Idf^}8{PJUGy+^>D{fSAMol=ewNs zT6~ImM=ZMZl|%1$Ff%@P*4qH);@x_^-O#%Q%#<(ndMuY`!PMU)InFBus|T~tzz%@P z`&M%P=hMD=zYg2C*o*!d3myBBV0yeRG;?2=@zr;dvuj6BVEcyOKS<85zA%4>!MJ{u95xH8$9a$@VA>zhr%%kofhkj*PVXu(cUJ55I3KYUOts?d z`n4oR^b_W3esVuZPm;QlZybawL~JkE6e z9oJ3&keuDT%G1y|_bAE*3mxaff~7ASJF3+&oag-|Io*8XJ7B(39BH9v>34bkGW>X$ zvFmTC*UZCN`rXwCKKM_Vac?MR!tl%?mSFuo&!>yS!i`ESbh>yS1#@MDo3<9@B zh8ta6&hgf*9d5M2qKh{N<<}d`!*wOs32?A-UIOl&`r$@iBgy$6-+cWV?|-?wak%j+ z7CO6j#Ot*mg88F~`QA*837n&+{c`r^orGWnd1uo%LF_2sajDq0{Mo117Phv))87?<&qtkH^6a zqr;8+TRH1}04A}uK7H&r7K6!equ1kj;7%|r6^G4&wl_Bdo(1#aMb3H=ZNrVGSm<2dsg3z#R==dkVC8}s`Wm|qpA(>o5PX$R-@^#e0nadvtvzX@Qj zzr;%(ZdOde4J-TX8zQonV?IIP3KW zGg5JOdiNqA56p><&U&$l;YKeky8KdaAebLJ>Ge2nXqF@yA&8$~$0PQqZNU{MJL@f1 zjFaAz;C}7wtQXy-X6cIqH>0bw-eZb!O5Zwge_raW*WUL*dLbFC{CK?V4DOol&U$MV zqe~z4UI*vu;jGtHF*?18(CY{8nN(-Jy^3+t`xV@%Ue0=p6rkRIiLC$(>6{AZZ>+|d2+75Qs%T|n&-Xw54GM)9phdAe#^|=wa z&xShd)yb-v-nrnu8K&3c_@K$~aN|NObVx?f{+{EFSTF-dIP1*^bF1QXdiR1^Khjz6 zM=*aYPN#RqsBoj@<<5FpU?wU~r&j{zrfg@ujbJ`hoKEixFvmta>$MvbZgj)qv_I0p ztJ`DLuLUW?ptBLRypebnm)X3jWgz13h|Rh(V=IDUBxOhLY0 zuN@L~mtsT$@e}O$%XyX8!97`^*E<*79x#6@&hC8Ljr7$UA8vG*;H)7_vL zCNS?!)a$ipCJQA)FI}+w9)!I;xMq{|dJVx1R1CG~g6XmRa==|SS+DmzxOrd_iX>-u zK3LBDf~i;Rtd|1j55?K(&4u3JsW=avrq>&Z^ql}R;tI*x?GGN0iomQban}0|O!rc~ z9`ExV0_N2+y5|jUZ)AeGbB128H}tlGsW(%v$NJYEOwla8UMBSJ19MPu zq=VHLUXN-z8}ngvob^V5S*qVq7K2$`?yUDEn8S**(_{bq517u^IO`RGxkhn1 zy+vTQRygbZ38ujU$=T_#zdskux@(>F_JjFHadvv#A5qtZ8`0N0>kR`_q&S`43^2DY zbk^Gh<}=0F>9PLp1rvRPv)(W;MT*nu%>c8m%2{ten12*!r^o#fwJ6+p=tgI~kHJ(c zPN(-fm|Jgl*4qT;GsW5IasTcmbBnWH9GG;)>GU$e6yNHsw;aqm#o6g`|8696yR%*# zm~_SI^fJNRdWW;#CNQ5V&Q6c}cQ2UoyPWl&0kc(cI=vlWitpCz@%&>sm}eDdr{_k% z%V55^$62rb(s1JfEOd5ytS{}sq~GhTHwVm(iqq-c1?Jgh&U*X6995j19_vf!eV8x4 z-&wB=%=L=1)8qcV14IJ@x>%kM@oD<5#y`y9*>#p(2FJs57ZddOLC zIG8IGr_;L@%!-Gd^*#jilj3xGA&-O`%^%h4C8GQWfw@+3cKd@B^JXwNKjy6W8kj#6 zr_&2r8E%9;?yMINrciM@y;3lxtDN;72J^Y%bb9;1>|3qZy-lt%Wz2L0Z?nR^z3!R-F=buM{S@x2%-uqyFP@J9Ka_IdHX4%Vny?mtU zeK7H_=+npJM;|cXzA8EY`#gO2ACy9`U}Lzk3k#jy`D#A&eg`w^b;8xF|1TQ$!(f_jksN=;`KskU6vmqZ=1;}h#hZi- z_S=f{qj#L+ZNDwt$iPBp7jF*2W`X%cadyv*rJ(#8zl(PHp479u9!kAy!R%F>o!(gJ zx!(^r%C|e{fqMo_!yS_2^FG1O_vd1N)cz3Tl8+=;A6&5g!TWQXe;jTkVWIQZ7t8+0 zLA=AjJokw{-s6b(sa?1a<#XqFd+ZK3va#sm9fiO-V0J3b?)e@*FLdq~;YRN-rJmjX zpx!JnI}~T9*B^RKzry_P9=#sx>78IQzLuQbeP64gw;RmDZzX4U-y!wh1G8|iUhgsJ zHQ5(#Z1_&E_W<-lzsGqa7CQDD!Riakul4?LBl8Ez*_9vl7JzB}qh2oqdXIrQdO)wY z5_)Z`F@KMR&Mti{zpS4yzWPP4Hy#@CVD45NHVc|xUhjDj%;ZCQy?AWD49s@Lp?U|^ z>k7TSVBEhs>t%wuR&jQE+0eTi%#p)-y*5bCg-39I7#2D^y(sAAftmcfv)(c=Zz|4C zuMPA*1ru^qugCFZJeabIxDRdO2XGE6z@@ z4)iL)+;QAl?{hGR6lbT$`O}EM!;OyrIO|;r<`%`->2ZHN4CdVv&U%e;_s&J)4j%jZ z!t%QmOl}B!0>iM|9}Im|F#^O-u>OV5GXz!nOVzO?`1F_D^91khfHl}z20DQ6lbT$`^*c$EUV+J_br&?inG&WdyA|a zVIorH2%>{F};_UQTUmgVWRDEZ?BVZaekep7h8JIQ=o%M>rR4L9*uK@z?0P}Do zXT1Ypq8jVd$NJm|Ok5LZy;)%HP@G-*sCPe@SI^YzwZQ&}I4idkK_Kk6$7tu!O|BFy~n_;g?7T zUg3h(7Xx~Y!8MN2>lHyE4b0Pu<8dpP-a+X70p|NSUp{>8*EfH_^VJ^l5k@u^I=k~# zz6WRynCGpW<++5#i1#Bf1s$E^eHF}Siqpk=6imlNOZqJFE<(IRzmYkiQ8+y&abnT+o>jJJA%*w8M zy{+J026JsU$?4{~&gdRt%)vruH$SuidT)cdu7~9O=ehjr)gCZ^Db8;HmLRTkQgQsn zLT6Vl9KYNT=EI(n<8QEX&VW6lSA>y;h0bn%h{umxz`T~G*Xs?9-@qjImK-(<+TKzS z&=X8WAH7}-wto)HKE>JTH9^2HV8Z(9^*Fxj2qsf;c6vPj$Ocp1&spyoFz+i)r}rtC zzb|vvyQDwH2UzHIdc(lX8Q`q98q8aYv(saJ`4G$*gPiq}!31!i;7q+9pNp#i^MK;)^co;wHJA-Uob`SNQ+KH3bb4olxiHIFZzPymiqq*` z1LoFY&U%}`e5*J+J=W)+z%(4;tk)CFIK|oNvEMBMvuLEV-Ya0fP@J7!1_HhZ)9G@( zUT5szLNE_1&aVHP3%%#T#E;hNu|F*U^NHf@#s}5VYd$8zs5MsV>H6_JFjpzgt{=Y; z@!qQ#c!di#E@21o2DmqJ_4(lO@(7sb<0NNSE_@z47EEEDUT-1vmV#-SFFCt%;qk2y zOsnxeF4%E~>6;AZHpSVckNwc2U_PIqPv1?@t2;5mSc-+tE`95v_cfTiC;7Nw>ErdH zuM{H$@e^!+?1KFuxUG}*=}QOqCz#YC$srj*^?2Os4`%EXy&j)$z7@=)inG&eih!rV zyjAS1_ZOH3Q=QXyE|?C}^m-Q~ePhAgs5rayao+4MFcnwm_1He1Qw+Sq1=}BNAG^Wr zF4608UaDRx`e!V3cIo5(hy{~Y=Bzgp%woma>G3#o517ZNJL~NRb3}1=dQ9I5FpXzA z>!pDiqc}S~9v3EpSu{(p$9aHP6e9`{Kf(3~_wP1v>u2lr8i4yzF*?2d2>cV=H*=iz znp`OvogUK{4X(jlXT4O#==6>wFcaLsd3rsbN0fuPQE_(rgB9~GFn3+$toIg}j}@oW z+XH6Ld}qBz1%skgmD=bIy*fUYz~;5>z(y(0rQOF?DX8w z+YIKrg?hbJNK?~Fj3cn<(l-`*pMdF9rPqsvNFkVe6o<`%_6O`=9s;v)5qiaATVPUXQ#*dJPAzk&3e5(*a6GIl;0{je*Yv`|5pxf z*zIVSck1Cf*%kOkAqh>j=Gjz`TF27OWNuPBjhQ`+1>BM`MOnLHY?6VtKyKYpykJYXg8QT>!lulef!NfZ^riubpw;BIBXVF&y9d= zFmqqf>#<%w3FZyO+39iI`7W4!FY5Jp9&q+c5k_|`bawgWadiloK^vU)t_HJGadvvm zkiM6}eEPCpkK@?duS6J0Sm^BZcz)R*%+^=+dVJ5@pJ2i_O3tqQ*ss+C6Z)Fu?Ak|L zaOq%56la${UXQ;H%#*L{^^%}>7)<*&Bxk3`>su*ciZ)4(zoPz?&dSd%%f)}nfxAyJ z9+MFoV{{N$w6}waM&NyKN-YnU(jX?q%C$$}>)?J?EYlZ^qh9D{XT1b)t-*~_EZb!; zJ;pl=%tMN^idLRt zwg{se7CK$M&s2;6@ncsmGit!GT3ay=cE#%Qu@_8(ozD4)R*X|V(rd^S)qrC@7K7WMSi5`_f!hwI z>qjyl9G3;Fr_@^xX50T^?@i#_ERO#1brOP60>m8QCIUhT5R%xrO=4opvg6<@mYf4j z9%M4VJ;z(V|I3SW_EUVSLMrAAJNM?l^{&7JGaN9W^znU)Xyz)>HqD<0`b zK05#QYCrN(KSsUmgfG2a>c{SB`O^DA?*QJAmM^`&ame>bKk^ZMZ0twA{gLmhe&nNl z=iOiFyT9|0Z(3Tu^!`%2C#K~~?=Sg}U)hg*N#uJjEnj-O1YgCg&VHoly8`*n?MFUZ zpHFzrSzmfT%8{=!Enj-OWS3f#mM^`&PUO2cEnj+lv>u%Bdf)K1A>Wd;eChQOpSV9Q zAK-J$bLy}2uUAY?o9Dzg9!7m1s5<4oWO{!opXUwu>){{$Wy^OqzTL0#a7O$m6W<^| zvYI#h#tXH(x*z!#BHyiP`O@)6^L*%AeYg7(^6i(FFTK9wknih$^mRf@4>Wu>ElLrydV0JkM>h`ddJyrdVRYi-~Ro`M|Otde&nNmg!++hJn~)D zk93Cj?eB;(T`KjXL0{lmE@H6Ba{+`Th>IWo# zQ`y8p$hRl*l&X9nAJR9}{7q$~aXS)uj<)Ah@;8-_S_>o3vOePpWy=vc9{KK5dD*T^>m!H%B=P&mhHb>N_(y-T zAEV0LZug{$(yHpJikd24O{w2AuXul>#^*5>dK=~x&YC=V{|w)&{N9FAe_ex7?k#Jq zG^)J|z14GyGURONiY6l+;p#|pJP_}hQ&S!?%6p=Lj!3XP+}zcQ66M~C(#C3kbyZpM z{vC;x!OnOxl%XO6-8Ovw@~S$c%2#JBsw(#yzIv~xs-nu<;G08GT5GEDEkuEGM`~Sl zd2MNp*SEi$u=^?gU5bClh&)1?@D?{Mip7^V)%3V4BT2U>778~7Is(y1d!(yrUZqjz zL4U&?F%@rO1UI$yG{++$BO30C2ig%NjbM8qk%+WJ!tsf*=4GN-%r3}tlfwtG#y@~x z=&&XdjK>nOmZW=p!@=&lPGBl>TqN3xraL+#?P1K}FHvMH{^`F(h!E@}Rl?hD=}Dsd z^A6HGL?!n}Wf4?{tW*o|ukB!+nwJbG65)6tm@F=y$9<^fF4TsTp0+^TV|JpC&th+} z((6KpCWNS{>>BHXuKLmxUDS^4PlJN9&torPW;U^ z5j}TqW2txU;-gR()%h|0MIB?M;UMe(v&72yZvbQUlbo>dU|IW_8n{syESD%Qcmabo z8m-d6ZL$vBu41U}z98vRC}GElHGkx(~=XgJ<;m{oAT%pw+G40+gi+}H}W>18t88_#)m4$zg{20B8067ry#r<;WUK5MhNuu-i8o#(ECS(vk*Rs5M$o^ z5<+;i_r8U&1mPD5u_NF6J;G9i&hck2etaX!q`$Y__IY(D(i$COMP+DSk%V||Fk|J9 z2O`md&YxX?Z-Vlu8G8N%Iywc70!<*oAy3_^a>h8#6X4VQBbW)_w2LrSr9$KArG8W* zq`u4>1bztr$K=4z^Mk>UFPy9n2jbCs;s^u9ljbv>An}!8GY~pq5T!)ZT!6bW&@PFx zKRBvUII2@Ps?UHUqG6g(dQQFVw$sp6__ol2BPv6_6N zvGNCkkLU&eM;r3*arB+weIf%6zCk+iUn>r*d~`j&b!6eAO62s+&B?+X?6kggA&INf z_GEP=k(^sJS0(r`EAVUXQ6gb&t}D7K5)HL z{BFR%e+*{4HN-sPglYY!F%B!0;^fa*I5}}>Qv_#bAv9suAzL?SBG8^R+JR5J{yCyx zz2fdcQVEP;G>NxsQlbDeLR=t$pxH$tgP2gP%bpEPTM)CxA4wLHGL$VCLn9)i+sNBAd%WeD#@h`B26Lr75GkMMSc z4ZP%H6roc_kSroBYfQiGw$E>pNzU=6GBj7fKg3Ie8gJ6Y z2uTA}voepdsXNUDJo=AdBz$gzaH>kY3H>LyZ$-E#LJVE+z6gJZkos~5LMMJOVuEl( za)|!kcH8muD$@Lp`9Ni;9RvSf9SnY|qLBgPW)BcxJ{r7nXAlrp!A1*|ZKE@gY-8Fa z_~}!7All06>L?`K3P>rz=!k__x2ZxR{mofr)ot2jBLA2AMtF50Y*OjN^CVukMTjOu zKEmA)ZjW#x!W|G6A>0`uO$B%x_AW%Y8^U7{!fU0MaJ2_QC;mqc2k!;Xp{~*2+iudK zQabF>+u%f$l^I%e*y>my1UZuEKkqFq^%}LMWeblO+Z;$lf<_`4$I@kPdE*gdS)xE$ zkD$KtxrtG%#jPo(%qcp%o+tfBt_5*4UXpR={TbSOJ^5|a0K}JRJ^Ly6?`wmRaheNCoevyd|7lGGI^W51 z^-k*7Xed*(l7Hs=)JlFV(oOwuAo7oNy1P;MhFxH`OvbTLA5kz2zr7HOEuCU_{Jczk zUe*;|&IT|Nr@SJ~$CpdvT+mn<4vM{ydv~Of=9i2mVK0kBJG+ubB63_{b-SmEBJ4I&Q6YTae<Y6UcdCiG(hcI-5)4J`K1A3L~H|962q z<$o8rMgP0NmG+ql;9Z7eJxct9c<^w9uMAdJTjnW?Y+_LQ5A~|QOd@*%MA2w`ClkrB zh!09+lOYGv*}h~Yxm}MMmE0y3KnvRz@IZ^;BcVDOIjw@*D&{#mHf<8LNU9fkqG-zelI6~hmFqsl2owv3S1q8d^Jf7A!Rsx;UJ$tul8 z(sVSd;7ZPvlG1Of-%?61Ex3_E+eRcY20MtQ1?%*0`!kZ`~o5R&^rQkzm0Gv!gmou&WiUC9*^*Sgg--wGQE!=`~V>h!AA%Q zy&DnEL%0cH3&Kwk{uCkfgx<>#qK)1=5JIl@{t@B75k80zHn!dm5PpkrDDdzfgft49 z5uS|jJB0Tl{2t+75klYSeHx*FjHbDhhtMgj$K(64$fE!D+>dO<`Q{$mRrqkERi;>E zHBG7h+a@5O7h{`kfweM+fErANV4|s9fv8Zno0RIjMUlAckqOJ~9bjtEW#!TQ1#Mtn6AefgiJFj)ZLUvJ80xvSQk* zC1yesxT~`>95-5G@ea&m;xhNDO5_J=Lq=6J>94}46Jh;IpY%~we73BdCjCPi5IO0s z{e$&Q>;q8nM~v$hszx%hs|w_MFqQXCOEaDE zShKC(WoUns%uB!%YalcJ@NWo#j9$XeN`yND zMhs!^bcEdq7b83lAz|fsgeN0B0pT$8=O+laLwFKGnrFTEzmvxlA%8hw0}JB6mi@3k z!s-CaE#8xP2;nhSwqW5g@KqUv2{diLDQK zlz#*8A5ai7Dqwo80b^T$bP#!2 zWn{+>=Z+J}T9S?Uqba{$<;`RO_!@b3L3Wjuc+n0ZOUmlppd#yfugprIZcw#qh9#XE ztW%Pv5dG02pVWor{A(LA7a{#V-}ZY}!Gru8CV0+2t6(n-5&caE{hRwTkI6LtFO4P5 zVM6k~D*ZG7N#l!Y-#ZuKPZ8E4T#axM!m|)!euy;)uSfVZgij(o58?9&e~IuTgug;a zIJ^Mip6K;O2xlR@7-1OUB?t){mm|Cc;S~s9LwF^^HxOQpa5KVd5RL+j*CN~p;dKa! z_Rw}ObPX{J%8*xVTQCMXRX!MfsJJ-L9%+q+Lq=CL5{u3*oWO}jWjGp+V;dnHkH_K$ z_6fqRv3O5Oaj{VYR^A?t!fi)ZGprZ&=9^A6#l@aLuq_;_fYGVAcsc*@kv(Z2IfTc;XnwkRr{*XL)2#m0L|*}Zrz;v4lp7eT^+Nh0w%Z)bcMxaKO@4*1^&e=P{(WD`JJIRDScW-6mg_E((y=}o$ z1#mUNcx}4h(#7R9k!X21f!(xZX|xrlLY;FML}ETMGJu@knQ~ zK9fi!pz(2e}Lygf0P2>c$ds%Jf*>0;A#IJ!E?yR^b9Ex;x*lMP{#2<(C ze)88_-?RWy*3mf=jG!ja8VS~Rbu@!(X(&cn>s9%{;K*^bl=fLYZ7{~eqbu`tv9wXz z(Hv>@b%ujRb(PPbjq^~mH!Z>Tv$ffJe?w_itx?-pV^nxc{f!M?!@s27>w^=4q|D4C zAPLM(ShX?7LIv!$8OP0DN)6u>RYdV{#}vp^1Vb}Z6&hykiwDq@MOw-8lrSENR)?dl z$uKe+u4bV6H#BzD8tGPYQer(xLtoyQIsAY7B zPKfohkr;sa+5(;Ohc6fa=bWyZc3J!4EadIR@Fv3{KW%$>V(`d@OQZ(b(HO`*4GAE< zy0{$^N0{Za3bKk=G+7mGiDl-%hoXWcghQT~Usq<-mCg5h{6?+UZ@{hGYk2Bv{S9^1 zh8GS7)m}J&%FIJ@X09n+Y?PJOmcupNKabfRHGl_}ax_rx^VA#u(n?W*Ci>J-s^Etc z4+lDOC@G{9P_x_SY<6L3byc}hQC(W;!>Y)}#xpQlAA45V1cyqp$PT4$I617=LL9P# z=*A+g922K2YM(kO1%`wnp-JR1gAS71nyqGXG5`{nTX~w6mB!ac^=dLtL*2x;Gf!qG zOs1M~roAf}@YlECwM+tXf{#Vh1yY7APQg>7kfRjN%=%V#8geRJnjboqMV6$QXVp%C zV9k*j9^t90#_5a(Z#g{pWLlm|t8DOkYhj<2sY6t1S#_fq++8LP71c&*b^W|j!!xh6 zw$@wCmC)GijxVUx@Xf2L@MB>jM{E>QxmuM@nmSQe7XIHBizjWIU-Q*`)I)$cs)zko zfg_tG-a)|Zm|0M$>J?RKommZvgA^0C%t~psObi<}DLPl`*B*d^)Z1abmt1^tiA2jH zZ&l?yKa4K=6Gq|)jT`lGPxIqbPgbKGcUXNRNzx}5^7SN=;aohZ1GQx9gH%QP#Zjoc zPIkg5aPX2N70@}!J{!uSBm!n*3l8ZXWx$YM4T z*!f$v=>%|OIVW9#C;hXGK z&wvz=BiRoZk0Za*%TnH%VeIZS=z;v9fy|XMEuK)pH8#zX;R~= z$iJik+w5Tx%mSgML|yYTXi98CaIVQg3=QFya6B9hhFOQoOpe5~vtym;s&Kkt=YGU3 zv*X)RL}8j#49cGwPigsqAu@Hi$CFqn^LTKGuGC-UF+A0!J|CZ+6Jyl(JpNu5*Poi#3>b60rZWAfL741fPk)s(M~eXDrzk zPDBzAvl(Z;iHBa2G?t3Yb8INKs1>K#uoPnZ36+owt!Hlj{`)K?U;_5RS`$ci#lyVZ zqT$Re$s|)s%^ba&9FtKn$=qrXwG7*?&#V}~{Q);oI85iMGkeRKv}@r#QWgm$u*Z{& z@XXoc1esK8A|`i6I2^?k?3zJjhCO2$bb`!rl5DM=@Fih#^I%0neWcIWZngBWwyUE$ zlEf*+cFHprdEP#Z_^>5UdFi4`UU$+$v<%C!15_^C`Yx5rQ`cDQ=k<9F46BFOs)Fr} zNDYB?&3zCmw9ILnP9X8AR02JywsE4`P-%T2iGDQw6xQnOZEN#K=9!@CR^+s|4Njl8p$e-bpBGTp9_cd;9+`>FRuhQqU>lH* zy6hnCVr#axjRBMV0FsVQSQxs$;N)DmeWW4N!Yr6tnMd49jEnMd2R!bwY>1Jc2u`t3jvJuNoL za5)=}5|&E#NC(o>*wEm`Y$ICVw1){pSy!YTwgG>*qq7~;-&)By! z%{O1M3#YnaVGKu>*9Ri;s%UUFCg}v4s96LFjk%@GTI^ld$79KurEdgQY6|i=slM59 zlwqK1y^H-|ueK)YVHqaAU}=Gd(gK9kmmPUB3=`FE2Z1X3{edP1!9ig+bX1f9%=!lJ zLMNCN@$d>qNv%R>wt||xKaG131xy=fLRAsz4u_Zg8<2Y$cMrNMnM3Q8KEaowCshP^Q zK0g^%EM!88R!=qIvD&DuWAQK+P^D-y1+KkQ4ziH8PRHQxY3q1dX}M8f+JO5KaM=T- z>d1l#sR3++k2DO&jtU%^q(;ZKOG_6HvcYR>#SXHaq4@k&;F}~AVAQDVd-`WpCo?LO zALWqoa?RYg6^Zj%4@2>CQZAuMI2iIsl(d&+Sy?-iw?>_Ey-v(e=_z(@W<{)h00_(3 z6d#F{MRBa4EjwDNO)IP6(QKHwhsC}Do*ag?x!nk2Yc>fB`)qS=5X+tkh~)yDHVAJ5 zPb;u$Ykn-2NlNhs1f)zu6}BD@1982$K=T=kG+6G3T1kifQj{1@nA2}o@fsg4E7u1r!BAO&OXB%^r^nXbOm-eirJ5(Bd+(jE#1;-Lht_sCA21`d`ar%z3hyzZp3NE`O1m2m{x zpG1W+eK>N_MK&gIYCIfSIzVKBRuBt$4^UT+kn1W(HcS)Vy5YsB%+beOpsvWdK&rLg zR(IcTrEp)Q!xN4tai>JGM{W-9y`v9N3>S|<-@w#CcfuJTw=5kW(^(*w#+m@XKZ*D$HxrIs<;9;^mN zjl6c+NR?32N!ufL%D6suX2)zIb2|;ZrjLbXRem4ynQWYt<|Nz16nEB5+E$T%upkI7 zUmzL=Yl4y=jEAvsW+Z5?s-|8alvHF=63vMV*mUZzhsm(Ix~$Z5q*32cRo74jm8Z6@ zp{BH&37&Ed6&Z6?)$(Q*d*@hsm<|N(kWZLwHcrM-OMb^VWFXMg5Nbo=+>B$Ap{N>5 zz45#Az{+7zY1@kiwYS7$)HUL+s#-4w1Kg;tE7=~2hNUKJ;y_Vj7913sIM`cNi{n}f zjbsSMo=bxP1A!jathJdvMMD!(wGxH<_8}2ynLIvht+Fzwj11Vg$9^k})woqhX1AHp zGG>=|ebv=gFJa>{wP9n?84IBebx9Z(q)t&mo5Mxcf>mS|=W^P#vU|p{(_3O{pvfXk z!}X^T77Wl_!7(q4+q^)ctt=8vz*->l*_ZK z+a$=ABE30Vpd#V!PVipX!^mz+B1AK20L(6GCV}a-)VO}v2|%<-5Qh#~OgpBg34A1) zf<&7H;Uw7KGH8jsN-R9UW>}M4kvCx!UnHM}Y`MA7NG!qLR8Tju%NmHs13gy0N*i{I z;5#`~)W=qZ@tzNI5K&_hlZ zIXj%vwh3D$ZdRi$dcGdXg52QQ$WWIN!!iw|38akm9l|ck5Q#BZ*6`4;Rt^EFqw6R!ZGgG{OuB-si_EwpM;4N}zA~ z!nefd_tqF}9cI9_Y{~0=>id3!0MJLPDz_8mbskH7yQy@S1S8eZa(u`+xJJJ=X^HhS zoGDsBlG8ImLoq^BGnKq zSHAjEj~93L$@C#+dRar=k#IL4Rf7r)6?|u7X|*ZnJay$>AA}Ma<%ypW)eILb11lOz zD{HW@BT>r^S!RX<(lZ3QA%x9U2%b|TDQc}D(9Ih`avevlWS+ESS8|&Ks%EZ70p`@B zEyy8D2>eZ9e~(2m}{jJT`0O0rUmgs+Guso4V~_sAR6LqoW}vPmHiy9I-8ASWG{;Dl0$gT z?pkD8MKn#M9fRVm0QCOAOu%M*vU!A2$F==Qn`WHI(di^XqMfmn%d6cwqFe-}{l5&G z4B{5kYP%Y!x0gRTM8(;*%i0E!jX@C*K;Dq$ZmR)!jP@~N_8NIoZ)oT zNwyOTM`7bP0?i51qDTv;k4n#0A3Nh={z^P)M5<^U?vo)S8CwMtgn@0g7#l_?gDS2w z;3A9wsz|aINba6sHAjnf9Gk;YvTi=}AU(VR@2B`T?rg!EnwB0ISOh9vr!9~$B+M4C zPP@5@Ok-f(xG}fE>w(W|HV+J1pj$!B)QHg@!}|`jAj+OIf-NZQME0<2M)qtgx*|A- zQyZvFTOQjRCTB!!YU1uK%1hh3nd`&~v6+S^9AZOG)=c4Ux<-~ZoU>+$goD$j&C1;t zYl(2l&RLOizR#IQI$N^QBP&1&xbVuI-4NSRGG~M_t|tl;l+hf<2~26U%aRj@+XRbc z3vpYhN|JFR*#jqIvSnR`T}DOWq+B;E>tJGeq;plml*@V{k{UlHK+8}CO>`%3un5pH z*avb-6*5N=7}~;U0iz4l*4))%+V8T#0gh|mRKV^-S#=$}S+Jt#(WVBJV~w?+e0Vho ztEg!TNN>U>erdp|E^TkL01JM&iVUp0X_eZzv4UbZ!)xn9<|a+SZQs4AuJifRyQU4B z4sbeSAZDk5+qN8I@zRd_+uFm{HI+8hBp@;`U*xkq3R?Fs}vy*m&*!MLTHPqEs8jBzfn1c}% z%B$N-_{8Mm;J&;f;5B@jDgY)^dJa#TD@?ffHb*4jc}$aWs$x&2Q8e= z;-5zDTTV4Bdrqg;s+o+KoCY}X#fBP@ZRuju5WFkAE108a@sJ>y%b1^=))1L>1MQt{ z0h5Y`^oriJY*@{Pa7s?QQt7!uf&wI_R2ho^CuTq`u9XG^E2RWN%eoRtT(6G{6SN+Z zwLU59P55_61B^JatgBDhw7{puEMp@b?Tm9-9T_35Y$2_yN;M$P_$W=jbQaJWi-nqT zy{X>m%Gyh-cCZ8LTLxE%A)*xLll(j^Bzm>jw8J5}2uXN?K{sF#58+q~fuNz(wODer z1S0K}fOj6gelHX)T9e(4u&U3h4VmK=&`twZOUa!gxiRwrZ{ z-5C^(<^Yd4al-RqFQMZZ4F+D~@KwQ%UQ;@seiiYO(qc+ z>I`x^y0JlBv@c zaEamhIs-wh(TO!?voFxjWFMqwm1K5J-!^aUYGq&i!nrJ_)hNMXji26vkC)N(*WS|qr8}kdgK%?zO7uXYS)7k+ExH}06^7knGCRb@V z=HMC){KEnD{DL|4Nbv-c00*w4e)7B88_DFtVPx{)z%Fcl!ER%4eXG2IMJj35<4;!0 z3^(yt%pETuQPA&z!IqIK7>$pfDXTBM; z7$L8~-E=`Cyih%L-iitzc4_kq_D36ru`(E^Yf1Qt3IpR4*C(^&0X{ib50U$!B@A-y z-niM!Q%A&BEss~gQzyS*SM=MqQ-p)D`32M9YG^uo7*&4E%KUPfZl0231md1P73?6tz?hT+)v2kA3&HXW&cpB;Mn@qkqQNI>h$oBZD3_b$d86Zr+tf{3yXPT(pU5BOqpAh^6}Haqi} zt7#?v)c*6h3E4iBz&$g+V6+-S11DnQk>)N?MsYEaie+FT))fziOLaPI=lKOY_B(rV zaZEm;7B<4z-ODf7egH*jU{S0D#YSW*))sE3i|wp1uPlV?Ymy44Ag)09;e#((;AX@VPg&cxX(fcFM zGeEuaTR>8AaVpN6WDNViATP?R8Z_sn;~?IK269$_t4Dsp<1~7Ho1|lr@B>~$$|(}2 zND;WHFA+GskmWxeHo=kdN&|Q8@aXQ3ghn%kVdoAI3 zf@a(Z6y6WR!B+U)@M8t0Dt2wk^k9;b#ly*3UBYlEc6*}8wz%TcKCM_0<-y$x$vF)n1$GxT(02UNI5o!FrFJsl;lQA6s{7mXAUr`~f1NnS+f@S)q-DAM_ z;OvWxjY&Qpp&IKuEzfm$M11+rEKWh+2UDP zRDvDX{DS+JtHx8vu#j3BR=ZK8N*B>R=c20bKnB;}=Lk8M?>Sl}Q!cJK!;;5rIlKE! z&U$c3FqSpu$PKcV;^KH1Cc{up`l~`q=jxVB1u9!uyhYD(?TJRtg4|4jPFZ<7}?80oY>1`QtKR}Ercg5CkL z&M#Kg&e0Glsi{YgL>viFTI)Qd2gV%Z0dW&JujCgjz_MAwX=5Eyl9EZF8Y^*`0Vl_n zW4DV`FItbw#PVi327+ZdiO)}=7s=$ZNODyK*L%W8t8KQ`5fJ+huw|IVOOr9Yh>l~B zxSJ1)Oj&yYoXTW1WLsp9kvS-J>TH!Po&D66bo#nkIjIS5jVjZES%RzP@(cbsSJz5+ zMZ!ZZfvb2sv9G1rM|R?7WVlNdFH_#hS$M9_TUdhY7V`@(ou?bE>gd4jU-F6y)gtWS z8E@5tH*tQ!KQt~Gh0?;vhM*gBRhjv=DIT*+_fVj4g`m?C+$)}6@OFa<;Q&Mcb(8nN zi2n5ta}qcbvPyv^Xg_YUf!xB338McThLon!HaY^Nl9ot!{CIcOYk85MCKWvI4OL>$ z7-4Qeows44FMdEPvt6Gl~?DU;_{ZuEDS}BC^3`iCIRH;L3&h; zvTnGdlC}2|7zY>}?6TwDH#p~#j_@_!FOWo+d+J$KgbW+}+?(ID>8i5hkVhY~3kV?T z6*MP)e~Op`scXS5F|?d=-7JoYu7sOtdkSzQDu*Wq%4Fjivjd(H{F=Bj$8Wa59CV|?7Do+Rk;swpy z4V#=)OrFe3jT#8Y#u?kDpA6|fsBvS`%d7<}bU9UCjYZaPN!;A2#e91VcP`6&URgfe z;?s={L^Y!M!N(BLXO<82!^RaY30dU>amHOT_R*&RX!u@07F|3{>P5As}TzxhbGASA5 zsu5fcdw97xn{$>@za_gPRxV!y#-k^)BDmPWcCGcYREsR?{rI-g#J1Aec#A&8V&y=o zZ&_48f`G)Ogo4zA>Ny$(I6pAksAh43K%q^fj6`qHT<|M3DTPNi|w^UHyMLgPPuV2)$-5{9B=ar z>P+hd9NK~_lcs7x2$^7+?nG#-bJ>H`c8v4g2Hx?Uva`ac(?p5Gxv)sst!VYeCsf10BQ?)!y;ejfYI{TFXAy1-4HO)dNS%JV$sd@TZ!_tw=K&lv2rvnGO4;9+rkM>g@r7d1-5; zt!HUJ9%CrEg`98XBgLfmqEAJVEhgULl$~A$^fHlBK4SkzM<-&|N(MINg-D{VCFyzC?D4QwLY0 zhKp5}FZ6;x-5yR7dl^*i%bk7BDZnP3JD#~r026>dMO8Wl9|MxvER>nrGEel8aw@8 zT@0{Fs9?7%oX><$cSB0g$+}hXW`oStyCfk7p>Z1SO-B-elGKUkR=hfE7s-hC_p+p_Z#K zT45}63ZPJ!&6&lT5ocs>PT409qfAM|Gh3`oR-d*UXIagCC!jP>H34*D$^3wkC)nRM zx7E$FhfEQ4(ovGXnT}PAFC1PD6_5D}9oJ0HQP&xc!l#{XhJoL2#w_I2L8ncLIni19 z^hzo^k}d6l)&y(OmuAdT-qq33W6;~aY)iUN>oO*)H72-rGnGv(YE{O1@zt|Z1itsKQ3^kh=yhOCn3jiTb@R8M+M=KS%Nkyai_XdSbD_SVdf`fhT&(w3p@W$goUi$65 zv!((23aGG%-LKEmB_c7B_CdBL6~VKaM>e7^_GC^}<4gs~s;kl1o>GzFJE)QGPGdXu z&o!;-YKx1jaDNbk*_Hl{t~a2kplGn)PyfuPNN}hcr^d4I5p&cCNz#UQrfHU7%M{j8 zX;ux={Y+CI4unfPHP5(tSsEe-vl8CCe?pH@n(}IwCQ-lXe3! zr&EqeMvD}piP>2oQuZ8L$DCu@=Su1Qcec6{QQ?+jz0^;u@9xh1q4GW~XURowEfFPE-O(T~;ppGZP#NTf#%)69`B>&fKN$!9XR zGYLm2idihOJfY>1uo0Ets71IoIAyh{YSFEYs_M6CSJe`nO>Zx1u9L7lsw%EVgFPmk z16>s69(YM6eJrZ`r~->VvMN^TQK50rT$<>CrNnq`u)|G&d|Rc)9NC>&$dA_4g6l@; zZ40%|o{FlA!io~C>@|G_V;Lk;1y8okFgkRCTQFA{auqLV7&qg*AoE_$hun)8w-)>tiT zjU|D2l=V|Ng!v}mDYb|%0p-#@vk#IQ^_yA=-4n8IdZ?nMov22(&ux_69oi8vMwbo6Wi zh-L#>Iw6ik3#P+H+S*bQE+I~{5GDX8J#!+cjW%jN&>J=Vo5fT#wSrAeW1TML7wM#! z4U#=b^2M8fyc_qu$&34qe{D>m?VnKtQ!*@e(rl>Z+S&DX2VJ+7Q95xaO)NkjZKQbg zq|T_DOL0p1X64K$7hB{HFez(3Q_|5HOe4#*w4F*J1Ks{dsxdGJO4Egd!)2yt^pe~l zx(`>iNO}W9(p)>8-ZY#jO3ZSJDV9ikQ9_B#74-LHeEAvS~uhd{3f? zoM&TtO=DYD6VsMUruoS8a9mG8B|@~gvKd%gy{Y5<4fGOHi#?VS0Oxg^W^IjcW3nf9;NLty2M692?2j?(j8?Ha=(-5SF^ zgR~!ZfR>x)U~A6GWNoIhufF2Fe#;9T`T z*r2HjWoFLeuYl)@|7Y-QF-Dm`oTK$j$MDi_AX%#>={-KZeCK>hK>(}FaqhnV`+pc) zQp1*;OM=`yIP=^gqb1q#Ki2ae0*!qr>2}DlXvU{jbCRnDGTHrKC;y(K%Eo`$AhGW)G`<}4bIWuRxH*eU(A zh^LBagE%b@eq-u?Y!s0~k~SgMn;Ng}IHC5Z+XY$7Z6=r~IYh~7@2*GS=lzvCqT7>z@|qIXe(r2tyQP{gYvBTet{OhcC(M&LW5aD`!%~d z9PF{sA|grG2v{nj5G{6&(|U=?=(0=|3wLqayNSh+&G{A0Vw7qj2ZXjR?wh6hF~}WO zkwhhzXqnO%s9Q@JWrNIRx>dWc#MWs;{1*MXRIfKz%1dvyM%8lAO+-n-w8f$k<4pTl z4;1GZ&D=7Lv2DI6fd99R#hKS~XxN13+;B5>*D%a{YSWh^PGluPvjz}^g zodJk-mTB(O$C_6&A2JPvw7I5#Wi;>K9!2+qeQ*`l&oECA>p2#~YT;025j-Z}!HW7) z`xg&5qWVgPq~%j=<>*mqE;R?P1D5(yPqXt5^|aG%U;Vf`r5YBhnpnsi!Y&)xOFo!j z%VNJLtPC5Bcuk2Gnor>lSW826`JpEeYzs3XmanpXoY&JFkAzICGr}x2EVCL0Vufw-=|@ z)xG45lbi3e6(^j8aBpW#Ac`wVp3e&r0?ccLL5 zv>`V39)%4-OZD7kZucnr46cge+(rc~lk&kq=IW2wyGf&vhPa!S*y>+ypOR`eFr>uq zj?Fs7!|lv*^2XV!^LU6nnauA_pD31TN@`!Vy+_u!M40>h2Wp=M70eJq)MYje9cV{l zSx4tgo)t;3L`x}}IR@?uCvMa**7nKQ#h2K{;?>Z{5^DU2f1G9qT`@KEm{4-W0k%ri z_{+y186{r@Z5gEKWw-oSGJV16G4?|zoYMnzIHF)D0ld-8gM`ThwHeku$(vty+nOP~ zEQ-^bjiKCUU)xtX%Cd_I=8-QSX3JpSv(2`=>zk8ysJWUa<_w0;J zsXoa)yC}U-y?P>6p`X_1H`_;6vsbns+M%`+@4TK)cy5IgkpvAWbL(n5lFIo3YA(g| zyvvU1D)o#jPsDfZMg2^8hXA~%bIG(64BY;LF*Yp8RiSL32#t0(EVPQ@1(zdgCEMD@ zm9~#sP=Qa79D31COIE>4Yrn_slAG2lmiH*Q{-^C7r2Y{P1_2Rh&p0L@c!`ue#K1bz zYo})}mweEK{#_>+^#|heb5efismKTr(5bRCC&L_Y5W;`4U1y&5V!-WU)3A1NNTY5TF3V(G2+)?9+aDA*j66_HRQT=BNbKKycev`7Y$&Z_m{gd=zKjc7M z#cR|x`uPzL*5&9nLB2CPJP0&^y!9gu>FFE2UAUBqPa`=}7eb-ZEBHGy*qU)51w!_U_l--CgqV+XAL zX#-KZbrW7UFYmy#tYmkp* zB|NeCyimMWE~Crw;vjsdxDxKGd>v#*bam%pLhwt?bXomKBv7s8d_Op;bo7!=AMfZe z)=$9fq*ZBMOG^R_zW_yNSdr*s6fIJtn|c_)w0xR=p(L8m177(q`O@m@GQ2E+S&Iwy z=~8Z5lotTxdfz;HYmfxXeQ3u%kC2LP?<0>+%4-oDBB^bKXtABF7dZuTVK zYxVI@b5Mk3eoC%n(nr=Wav~f6H1T6Cr40?GOL*SVdqR zv?3vmH&>hpk&1iITpk(HPibid-vG%B-$Yk?^ncO+Xgkwzn!iQ!q9T#1`Sn(+Ij zh5Z|;lqDzAXr+IZtXc4sjv1L z9yN!UvF!`|T4)*15#YLiBFed_qFp{72=$oUDrx%K@#f@+G>Wt}!6Lv(FDW5V#8ACi zN0_v}5+x~$`dQM~s85$~QR#l-feD^wr>maoE*eTQbB}193V)+eg!w+H0ZTx*sVA8* zyU7Fac+76=0|-bauJLD7Z4hgpJ~aY_5Mx9N&H2LV%mIRc*{H86X965**348h4a*+i zLNC2ABtd~68OeX}ZYc4@QxcE?mR7m`p~Th}*5P#vGFqMh4bG1K{*WzuwKNcDYCKpV z&x7GE5D&KXqy~kDcmo7V8JGaHyqW;kM%}Y5Ffnb=5Ys#$WWuF^MGxU(1%5B$cR332 z>rN%nQf%DY_D zW^Flr2GBBWuLfrkwY5SVac+_GW4fY5Yua5&m#{weLPLZbXK*`wkhgZf2ClOLR;BDQ zG|^~D^p?^?GR|YYBqH!C`W*jhyrO1K#8}MAhiD4UXDN#X0*P7LW3C|%mgCVqwNbAo z9-t?dO{8HMbgpDNU7D$>r3Jg-_(^NU`M_2MUg70$r+@?Tn}S9BGY;yj;P?8N!dLX! z!|BY(cfeLYF$+(7EJ24h$-W2%m*T(JF(6M|Y4OK>vh>&okIbE5zLnluZ$p*GC@MEt zNz2H8iQ-7b?2xw&qAx_QC4{s3nu=PMFlx5bfnR(loSuOaqy^MNFJP^X1u*7f1{qAa zp|_RzX(i&$rw~u{H2VB?HHL4A&+n}{6Ad%kGKaBT=1v~ zsKbM<^ry+Gocn`*0yvYW%hxcy<<#4!6!HwLQZVtAG6(d5TN`6by<(+tOjLfeTB@-$ zC(@ybpdPFw+DclDMkY((vuAReXnDf4Mw3IgdephLF8C5TfEO$y&Qv>Tq9(kE9 zjulD14etN-CQ%+s@EsBfsN$0PDpULPCjFT}QoQjAb_adEl6Ak8#R zux?H$J`q5vtZdEvS?YIjF|2rr)FU`t^$yett45(G9@8}OYPDeZP`8En0{=#h5F(Gl zynXNg*@K4+JEi{V4fn0T^nnjo)6?*j{_yZOzCZbl`>#K>d7C-iug&>fh_g67GVZc< z!Py&*{(Aij%g^5PqLo6t!0GqZ&p6z3jO)80)7~iA=Amm=2{8^0jLLg!)%x8&y=>*w zeV?fq|MR0JgMsvL`lF{8{7|`l!HT>KzI*VD%g3E3#Gg3*xco1ZFJ8a#;qiaD?$^Ep zzr0I`Aw#I1E4z0%r>MAY%H5Cb?tAcWm5}|_oIc{hJwJS`>n9sFPCahuuoDiSFT@p` z{@n4;|Lun_fA&SsnlZcm{_LZN3$c;Y@3?OH$T`bj`S`WAQ;&S=(CL2@V&YJ$|H

        7d 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�Ok6s-zfI;mZU6gja zsY-59ikYZn4N!s1b{;>O&Dye9&1OH1G@F=MO$^b)@l?^aSS;3%9NKTJK5F~3`YLqZ zIK9q?)p1&VfMYc=v6`4zEgD%ZT8vh&D4NyZ!lT1W1%q1s+)+qi4r@emSL?ZB-4>|U zt_dO=k`eHN`3;XpU1*KS8f!!@vPNW~V>dCeo0yDQM zU`3R6huOW>vioAo?$20uF9N4zNQjBu#KdmV$ZpYM*!@l1P@G5d93FjR7MuOg?bA9c zQ2$-q$moAQ;)v7!+nhLvNgTuy9y|L*tF&0GUH?|UiQ}CQg*Z5e!}5rj){5p}Y3-e__qNjmV$uU* z3GW6-OthOUmg?LqzTNo}IGtw12M@#G|EA= z-pgSd%ERMX%EL!K@a>s`N=#bAGaos{l@|{8OHRZjCt_;Phz5Vl6RrQ{RQf+lPH7F# zeB=~Yp1$SeL`-rbCOL^lIf>SLIWeB#ep%X`i~pCmI}0kUp@wHZdJtD$IRQcCm6-H^ znA)A9-2~Z**8h4?|9^Urf6I5j^bUx8^dQb2aCU<9fSB}vnDjt2>Vas!9{5X!?d)?7 z$QC!(>l>(U!`l(<3fhi1Icxim3_M_tKAsMZFzERWZ>LW^53`zi4bMEk-%hJT^fWW` z{QGuV9hcOK)x^YVVwyB68Yhj47Q&O|FGRzoj&b6A67qTS^bb@^$#tppLMJz zCRP&@t3@NLMT=oIhgXYZ_1$=MOUQ`~YW4GBW7h{OO)+gFZ=Ft?a*n*_!|FJ#PJ&C) zYGPtFF|k@SvRbqlR&x}!e^~vW+nLpAQ_k~bb(~i3=U7cltR^N_i$+$97Q^agMYH-I zJbG0Yt$y? z7*=yEv^cHK#p*w9Z&rta+@{aHtR;G! zUSo`@xsuVT0*mMJ7Dd`L^L#`RS1N9Gq97(w5R)iGqbNj+5e0`2i!(q6T9i7Sa_!bx8N_hW5-h=#jl=-~f z@Xs8!lF!_~5S}PTakZsf@Kyee@C5@~%6$TkacW^k1|#|I@ciK)c#2E$ARzPf5FqCd zbI(7SFJfXOG3{R{+6J30HJ0wTWwkq!zrvSmn<}woiP^6srVw#>D%%|IZ{vD+X*KWJ z5hsUuD+{-0c{xlg3z@#1qb6s5!%h$dV6<^%FOPO&xlIpCT2PfYwLrgdYYaow0` zVVjlC|Mh*q|L5_puZE0RkpC5h^FO+#2%DwoRDt@WAPHryQwovKSDk!_Nj}81a!EAK zv==Sb&|s%A7@D@nN)Y=zi={aX+z%H2&Sbi!VKCk4A?ffQWXKzVvnFh5unAvFUE}il zrdq^=t3Ps-)+z*88GIWaV2_}&*)84JWLO)%KWuFlT5GcikoiK)4P$L?#_Oc*#KcWv z32y^ZiS~rWQq~4WdqYW_apvr-YzF1uaD7^cWxR)lkwM$$hglYBoL4Tdzc6#dPuy;g zAj9@gV_3MB8#0yNHQh#AKXB+ko_<8RaW)hoV{YJifY= zJL&nM3N18y+3)4Z*gkW9sS9Y>J$J|h)#cb|U|ieU(u(HME?G_Kcs`6f-)-yO$&nfJ z67j0$FkGIV-(7(_y;X@N*iS$d{=NWJ?p72Nv)vu-nRiw7R)`cEwDE(rj~vV8Kk<2$ z9wR1cueBqAJ#T1Lz}_<0X^ytSVV45aer{g`_79VeYVj7%VL1H*^`OUk4++fCnM^NX zKL_?D*QC=4(})wRN>za zM*?$1sIUvu5!7JL%L*&7=4utDzuCiu#_2CD==M_I;~@p9FEObvF*PYgW0O)eUwwn& zV_h`Anw}S4JM>X(O43YQNd9C0(fK_uygqP#Py76>9o1Xg8Dh3)d`)TdU}I?6T%nCD zF*fo7qY!)IzKaYNr5dN>DoY)&@#svZTQ{n~=^^XJd+8}h1Wd3

        yo-A)aK(PRTl99;}amsbe=f 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⋙u@JX(J~9rt8}U^4zZHg#ak-K^A~ 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

        >nU&&gJ~DOjTY^(~ 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

        xHc?rj# zut(nUtJiJxr)8YB_VhQd1J8bk$PY0Cje(&RFj`gJrF&JYzC82tA*=^OY zo`28!5p4&)aKee;Z2^w|{^50xKiQO6am(o7gJ&Mm0lK<@$wJKSc)(ES(uj`aQF)^sD=!Gfx{p_@|w`Z@+_&$o^sO`Wrqu|EZfs3$d2t zA2}*_>xB1S-1XpHPkH&|i#uKs;sK67e83GaUwiT7VWYNJTtD@STQ=aP-hqUt$M8${ z9(L1#{mVbWx#n$?55f55_#eKwWa7U+xu^Qy8JngxX6$i}5EpX%?{yQte#HNebC-Ov zefs6^4+5Wjo8to`nm@Ysq#tg1`-<1b?)~ZDav}EJgYdt2#7j^7`TZH+wVyg{&wp-M z2HsZB@u$|lIBIy+qI*|dI_SI$@*X-yh?_aSvDa6tF8*k+caIa|YmOfo zyrOQ zyF7g58Z3u!{2R}mdBhuKbARnq^L^IHgWdq&c!1;k6~FXG^H;Oh??2>%-wt``%om{# zpwChgcK`Lsn=Z+F?7mOa?tkja!(Y7vlU|O$<2Sct9sJaYGuGE_*n88jfwM8{}}P{RrAJf z-+0h_uYMa{`riuR=lF^{?$4ak@5VJtH{G_b-*qS5Da7#{|I^{aDptSv=>rpL-~D6s z&_0ljPjUPQr5$JYJSsZu>6XZlhc4;ZhVcttlalc4Wr?pGeS@##@R~ah`}w3A@aBaa zfAvQte}+FL*m9AA24=89#P*8Q3B{K-p-j`{c@A>QKnCf}iL-}e}P z|E)O(Z#kfN>_j1kV&S0^n&sp*8;``B_OF90Kx?M-z{nL`C)*hdg z_|uk8&J^NOj=yp2j5{Z8SbNm+5p&LaFfip|AztVBhkLdRFC9NPFed-gTMv7tXddVd zI#5c&9XAyH7+w^7cu30ZwpZ(3`~|8V$G>0u(&U5J{r#z&d(PRm{ODt9p)Ya#KSwm& zTDszy4X>>hogg;Vv=!MVU_QvtO z_IdP|Ur!wSyAVfk{K&KK?my_mFK;;IoR?Cs&1kHLyx{oqvrg&V@446B*gEpyFULQ( z2Xu%2IB%1Z@YSx1-rW4ry6*<`{r&s*j(&S4W|SPiZ~NT?ww%@eap;9T&tClDGW69M z9KY-T2ZC9W1)|Jb@6XH3JANseNhmQVk!EwLOn0>>|*Yx=r@&c-KN1zj?2j(`&9frAdfuIsT`M#(i|%F&F-s zKjoq`jw?;Vc>Iv#AK3Wo!`bT#wtqVJ!|887_bbXXK8^4fyg5E+^W?W*IOm8vUOM}s zS&xIBIsVCeHu-g|cOmQitQaZDhwi3pO zXxiwuX;Thdj>F6~;Wg1T+983Fj}ySl!(2kGkW;g*%aOG`zAUZFMNx8fZw1wzSrS!f6?kK+LPF z4I)R|OCKrSAn8^d0$m<#h_+f;(Ic3`06wx4c0eIbugD4Szv_s)HJA)v^c8tG-SZbtE)NRanmFf)BsvDv%@#H8@6$WdT6WO#x zYj(cNdAphP$?I0Gu2!%O+dyi9E8Wm^sd^AOfNR>RuBV-A?hVtmVi1dFk5hjMBFz&6 zEp>k-zBQrnUxAKSq}>tiK=-o`znvD1T7;|tFY&5jmkTCkQMwypb`_8GYU75bYjnlr z-5L!>{(|-TpiLuoeUR@1Xo&uma9{zh+Wm?( zGs5ntZ^ga75IXKH(>2PMN^ea=sH$5<(XGQ0S74SGk*HqGyRW!f5XWQ?YwJCCZm5$a7hs>Ixv z7MN))!JL3m^%qpk;w#!^XmpKnvB)NU+r5dpgh*-bwXGr2l7Vc8dtWmR<`~`Ke=I4{ z+f+4p1xP5DbP2@rmyGgOJvioS{RiZ{=c4`2yf!Iu;#6+nJidzi&q7w7;@c@R!}K0&&OJ1sgC$*x8=G?mFfu|iqpb{)dAQqDg()7Hhju(YH&qqZ1u~{|KYcYzi*BV?qr$M?b+ZP6 z#;OpH@@}Rl8*jJD&+VrsO)%1R2Zt8)P|YA6X`gsEu;{sU1Mc6$T++W24XU~XWx+|# zZWP7PTboI_>(C8HZ@jV{14 zSa(d9mM?PuNUxzCFFGH0%wNsrlr~Va{MjxV^CjWJ)CQXZVj_j_>#nX8E7H@sT^Xe^GlqU%BJ;yCn zZ^_~vynV-U@2R(BaVB;U6P7;WT=kYLUcj5g_p*9R7KZ{x!Ufb@ve;n6ooU47W2fUO z_|;pq;Oz&z^$~6AEm_RQKD=K!Zk~Ee7HQa<`U}U6RBy@RXT1H)alfm#Wbq>Q)&InC zuc)_VaU&Y!M~=Hyy(Nq5uy>M5&_~>)-jc;OyveeBuHKTxH`uEt;eJqW$zp%(HJ5P* zsyDQx5x3BYJJN_d#)!Mph`Yv!yWNPp!-%8(>@tt%jkt5MNBmTjxwqJ=-uj3S)LXJR z9y`D3Yaem4dP^2J7;(24ajzJ0Zy0e2*wro5?xNn3#SkMd&4}B8H|o#c;$FP{#<^`) zZ^>e}6c84Av5y#_-jYQf-u`5`2KAOK9>Cil9QTNNOBQte`FD;Rs@{?X9bcy0`tUAq zdP^3sAWr7{hI&gD?_)2vg!@>%C5yeVuUf{@wXZVmVb}|O8nE;hH>tNi;x_e`EH+~& zGkxtN9#(J3;&UTzyAih>JC#poEZ3SM z9v8N7Tiu}ElEu^M*!RkD&#Sj&@jc$o<+z{KTe3*W5aL#j8>rrr#WcK~$8j^%Te7IY z8;zLb>xw`6e^-frNy^VD0i z_yBJm9JfuqC5zwib|c4$De^5@49DBi9JjxEOBT&|yNTmk)LXK60&mA~+%xJ8V{0n* z?{nNx^_DF1@OCW6%~o&8Vg=rA;kYXGmMqF<32_d`Rj9XQF(6NfB^c^`#GdL6Whum& zGLCCeZ^`0Zy!koq0`-E$D;f+~;+RTR6kDxYZEIU^Yg?bKE%>O?UfYXa|1GxI zQcG_`N!zH{=Jw{w|NGWDd(WA3W+symZEt@)aI)8|{r>h^Yd_9D`<&=fA*T@3QsG_T zQX%IXpz4J8ZI=o;yFt|pZ;wl%E12Op%Y>KiQX%J3P}d0W3YUTn1BKTHfYrS&6>|Oz zYK8FLb*Ye(H`8%e3U9beg`B2~@jjLC*1A-P=GD2}IriA;+de;Wf5#Uu{`SV9lkTsd zS&5F)2^U^@Dfd5@t;?T|{m(p0AiDp#bb9riX%*Ea-2bffl{K}CnwPpi&c+^S=iPVS zu16`bIRt0N;ITpIe*rPp#3{(y>RWrWzkChE?Ph#>paA;^p23rx9&%rBmjtLkXv&giUa# zfzMi92{~JVdnNeGaW{igicr+*52t{34un)&!Dz2%>ZP4P?46wiM~ z9PkChMGY}1xIp}qwmaMSpRpbPS?h%lVbnG@}r(26$;YFC|X)6r=8O%0OJYVgrf z)a2JR)UIYR>K3l4Whob}X8fkQg-!WU!4)*iS`!`hV{AHR_M|npIX^US4@wc^D_O z7MJ1ZNL*1~aoN-v)91zV%8M(pA{-4fue7*4?C9QDp0y}1reP**Y2EaRM6h#`6KiMH zk|itTRR!?)qJX?Q0eTfq8$XNt^+9thn4$4j&Z62z{k5dA_LGLcq<$^FMYz0n<4EfA*!JZ~KS);P_p>$nJmJ@{CD!htff_7YtsUz%TN%2G088os*W7KUL9 z^F3vUA2TpzU|6k*4RcXNc&?4_h7+DAp8PiP=3s$K%7o3q>sUyC+3-loO-GCfPWZ;R zQE>=owH&Q!{AN$DC@%B+%}!X~MOZ$>njZ3o+G7DOipr@=@oZ1^n3zv3E~zfBnmx_W zn^rt8YZS zrQzXAun6L*_XpXp&M&Q=K4(rz;CT}G^Qxxu+m^*#QgrZp#%x>bO0xdJ)`2?n_*9U) ze!4(iA=E)oR|?e)>MEfo9;Z)fGn^@)__Qv=DFU@Xs1i^Mg(?Nbr?1#W1ZuHR<)FB_ zo#9l1;^J_IGanS6s%ALc6~VqL!&v~TPN*7C^+MHw;?vR$XE`W7Bh7GDfns-(;WUBb z^Uw@uEhs((&2XwBoy!g}8K>q!{w;6q94^GTAC|X=57s-ub`dC30j)3AZ1 ztZTz_Ylk^b2mLnfXgdAfoXf+Rt(}?gvW@K1f)n-zq>2ur5HcNSy4YE{$i&c8trW(NGHWKU6 z9^PCob-7dO5^1Nugl-FOJaELz;f*YAq-k2JM*r`>R5 zokrLuiA2Jg0At%+Zx&_uiWlL&Q{vYh<2Vq$O;eDjc)fYwc#!Yp#OIXx}s7J~&5J2vge+4R$N1T4E%STBWpfW)nk5e;JaZDB1w zH$h22NZgwv3ZzJn9UbKDHaye_wcc!gYP9xt7E8;peOHC&=QbiB9&cQw751v%D8V5{ z*xSn7Du3NTEWr`Yuh>>sX#9` z(Y30%EGl^6mS=`C`Q~kr^)2syDN@$b)_y(09tgd>iLOXZRbE7Xv<-?87*pK?XGf~G zwQa3*v!ZLWdO3{q_*nB?$Ov61NfZVnVtI%n$h~>r2#|!qb=&Dh7}iW{UBAs~IuWS1 zwU>j5T5Y9U;kHR81S-u4k+i3@Mo%V@vvCocB2qR&;zhbdYH%L63ftta^;a70 zh*XULs;U-|@V0W3I6+`dU|!oxPy$H^xewN#kZ4U?Bs>~o{~rK=CwDQ66Ky?Gz*@e?OPcG zFnFtE(>!n@aB15#3qjBv?R1TbWE#DeIyN2ck$_EW5$?c8On`{i$OTnALA!2@xEQU; zMtnix&HK_pQe4QQMdI&kCj}*}=Y1RHAV@|bi&6M{&1tmUP5H@X=)fsn|NSTZkJxPF zc*tW{JiSTv)#&2J{X`oKJtDu)-rm#662pcH&WG&9Q8NLfU-&4{ig#O zfFPZ!R^8M;c6_v-Pn|<_YavnNJz15!*Jg z2Xf(PIw2xIkr&~Sf@{lP8L7&Q3~Cb@f-H#$Mds$Ia2Z(|X=E&Svh-`s$3{f>B2#nS z80Fb*b8`>uaC4FLTVG7yf3c?spY-JY=6#R4pwTth8Z-H@sr;Mw-RlM;i`eq_n$tC< zwssm%cBgc0cN$e7ldiP_n4V-WbDp7cNf9HWYi*k{5ubV$E4XPM$%Ze)+A6B;rYU1? zQcMH}#E!^gENHq|P_dr{m%x0EgKmer4`eTa`B~EX9JHydJ7;?p?r`?xT{-RCy`Qta ztXsW$7_h2mN$c|nSk;3-xXZF9KbO<~ssya+ftMjZTv>A|1?#gMuPErh`C>ksK7KwY)2g}S|yeoai_)< zeeR&7WzV^_L~@UoKifj>L7l}yujBSIkuFoe>@9PnxqC=Ji2h0Yq%*o&-_OgrZ4dez zQ!5vzOcR$dB}a+1G_ruAn(pap`zqR6hN2sqDG8Oqf|t3^Njc9)MiO#0VqwS5tPPg z1Er<97nG*=b?f^QD87}K;p_&b7@PnTw?uL~1=LcZMu9q8sQI8)3l#ySW!VZUS4wan zD8=PzP<&f4&-qVKd}A@sIRt8@P)FhK?LwW5zuysR4F29F)Fk}Jd0i|WB1*KSRv()pT6sy-kDOPV;-hW$OZYBnQl3p<=t@$OOC<}Sc zRiGXdY9%Pm<7QB6gm)(>ZOfgYt`*+TKq+c_L1ED!ZP@`zC8rydN=`bKt5oh!14W6- za3+FM-MSi-rm_swcO~WPLDdWO0H~h{^%f|8IVaEgGpL^nb!5nKb_+EH)Eh$02K8B? zHi6wZjsvw%s8c~L6Y4xrKNYG1l(zJ1pftTdf~phW|FyiDqa0_7@U8`=;l5~jPgvet zmiM0J@hx4AI}ViFf}n1e^tM@Qrw#W@8!iK;QRAKfO5;>8u+8qAZ-G$8W@U4U}q->R-GJ-Q^9 z?1VI_-oi<{n{Z@iPaq3jU~yw}!se1(3~@=O5S!-a-ossh+g#{BVy;oBCsLM|A>W33 z6Yi^>=@6^v#W)PZ`#tNE7X9)$9>n7_AZzeC%aV1~3mca<^DUNYzV|YP$4TQI9)9?K zl)4w-JD5j9yyIRiM>~V$17+{Pd!#1_%TNT9GYIYom%jz?`?5^8!(|grz>gzj07oiI z9@&x#IWM}tSuzT-3e+ByCQpW)zY;253-LiS;h`Tdw$N$##WdMMtUcRs1t<$2i^5QCf;Iq84sHn((x2j#hvMZpS;M+Ozt@aD5U*u9$Aggxk0#tW z-kq`(sSsv+T`@*=W_Q3g6O%VZ zoR0;iHVL0bbL!!dfsf~UY*Oqx`v5E4k&<7m!o4Wv;ymvqp;*@Ua2MbGx}EJO+O`l>vJAZH#H!ChPyS1!o4%zAd{NH z*^;q8zXE8G9{OW9D8zA9TFNF0oZ}n z^KubKsp>0(3h?kWI_@|fJwL{L(Tk%%tab>GBc>nX-r_UjjKeUKai^b)KXRqHL#0dP znEAdAmiiP+M9N!gQwGP$$8d>5B&>rUIuElV86xRWKQIzvJ+@%D3*?;wH;GSR_N9>mmNu0}3Peh=k)9o} zMq=-+jYLWtiIg^y^4Lhqi#Ads3x?G+u~u;8@>{Sw!L9Zw2IEl6F+6g{LB;j*4nuW< z=bzmb7RKkN2;xV)28n{6@8(R0W#Zxss*bt4UZ=R$=Xc;MW~3A|QXzTlqrBaSqCA6H zSx*O(ajie5eBz%cXuXGD#^x~)rPPW&@UQiu$T&ptXxw9ypcs`oJ54q~#_>uK z%i&%uv1J!!$j5Cimd%eQhCpJ=|I4CDO3@^RohMTqyZUAG6c~N?m6I*Zvgg#`$hO&=HIsKbnw zALTA8FZQr&e6>CnF6OD>Qj*zVV1EFTtC#`0M8FK;}GhTaA$t# zP-nYP7a{j+9R4C)e;mzMH==8l`QVw0<@L)pULX;ezh+@3r7)8UIbDdQyn`;~m2IyS z#~mmhk4Q#-K?Z=m9Xvm;(7 zW z;js#S!^?8|@%@U6@2eJHQi?Aroa2jF%IkC~k8oz|OCi+$bnLQ?fjZOS5+LO|KGdhf zH<>+n9R7Z&8HZ4xjQd@58hZIg2XV)|9_xFUQ1@mP{IIjke%Qb4!oJJGPD)`X6>?|^ zl-KQ2QP^W}eu1M0ihX>PDU?Q-K?aP&Ht_r?GY(Nc8u!7!6UsCZek9|K9KPft$?Xc- ziIGwyN#Vdz)Ixb2Ln!a>XCRJCZXlwgE?GnMNUhH&MFVl9-$0z!M+0$}i|-Q_Us8%M zDK!wvqk&MK#rN-NAbOIEt`E?GgL)tg#8wyf$1Uun6n0W-Ae2V~p*#cohiM@G_wR&q zss`dt7fJ3pQv*RtktC%CLU}Y0$}>pX^}NLEbiEC~mLk!yz9EBm_%$yN0pv=XHVdzU z7Z!?>qJn<~MlrgQMvFPxO^puo*@>w%>S?C|a{&mgdj;HFxbs|q$}B*n6d+PK-XEcq z_oz!n`yzQ79@FpZ5UT<)it>xs1OGunm&w zT~qnCD~a_MDN>3QDI9o?(kky+m+D;-iD!Jg*m}t%aU=XM@ZrTcMiPfdS5^!{5Wd1f z&yN(*T58bZ0y!thbzo2iWuECD2eAx^u)D@$M@q3Hr8{7hw-fP|XQWKlO)#0)`Fs4O zlHrJz46PgBKf#9<;}ET*akrWMDo$FsqGH;dk}!}`B1M#V@PXL6VJ=FOVZZd#UY_~5 z*Zwj8a-aPxgOssMv*B_wI0r8E^8$+;DMgMHK4#(i;$s#rB~q8#R)*H+7H|q>wht{^ z;BFu?@4RH=Eu7Zp7vMF6E)!Jt6JZ&vrmeijeIqH+7Nb9*fEhB2*ZrnvA*cD^<>3T& zJO&bKKB&uuV)MO+y8ySjT0yWIpdT;Jc)gpA?gej#cW*+>-UpnjzHr6r%0_&066dg# zu3OcBGlEywulDb7D4tq1dQ1_v70vM`71-v`*W}y{L{FlO{z(k$#Z|6G+(lgWlFK_) zOq5w+VIm)qQ-WnK16tzEK+m7)%51JHvoC@{kQzNATV&FM%W`wq?-01g9p9 zxHI8?67H37QMZ;lxU1n(gj*0#ADvPzvS92Thg8VsiorU+ro;Y-kW zU5b1HCBg^h7V_9`C~?*>%I5Kix_Z^}dhI*FVD~{AU@n%i4n~pXoaHj{z_^9K&x6bH z6{M|&i>{O4Qi}@V(zY<%47gL^*1*M950SjpKv756q||tl(lun|bs)U*{M`;;_R4PS zW&QYML?>7*CNKZe97Wte&So46;YV=a>uHYiS?s6h(FrsNg1VQtLEb;xZ4k5me$?q` zkft$sIHYZ%zsIUp6Y_kM3|y9@B`tQegZKj7DhnMcg^pB6_IWDr6~tFw6uOrseMrCA zXpne{!tA4R7KCmo{1ZV(eSPv{k{AA@31%^0-IWBw-}Di}xNE!I*_#Bx1aVRX&~7gj0NEG( z)WSzf;Ukq0KHWe>N%MCxy-8qi@a^jte7=>hl;8`*NfAD~Va&qEwQyBxQVJibK8&f^ zlVE@leJ3BPo&nYgz}Pz)9tGZSk#v0ZN8cqQUpR94N51ScFYyjny(8Z-cALHKyGe1Q zeG#|&&c9r?y}yR^KkL&CmWll>dK>2q4pijo=LRmL6LEJ2VS944O?Ad9o8+ZkqjCn9he>sYJ~_8SIzc|*q}>EZI+ivB8SD1 z$e;9EA}>Y3s`@CA*80WYiEac^Bytzhzb%PGo|c+K+AO`#I=xmVu0SS;)em`$*|v5# z(#U>KrIGEZ(nw0Bk-jR8q(Tng(AIFpE`=}ofzoi4OAVK@G+r^#(s)E1Y5dCHK^kFr z20$85?u#@=ZJm8NA*p#(X$-{bhcw3Q&pRAx+5Y zJ>%D)X-pWYAF?axrQ&iWOhb&V;X7V_1h)5|! zr2Y$~+@G=CS<^(dYKwf<(nE(F?;d&+y}o5d4prtDvr& zC0+uTvnR|8M15xi9kt2CPHi%&kenAp-z?`=geMhpz6DCdJ>gQiTC3qYY`Bzd^2bos z4B2yFXHW7Phi^5B>Bn!w-t5B~l&RR)CX8e3!&^~>FwbChN5u`^pD9Ya?+G@|<1&<7 zg`JcNJE^GdCwP~O>yS}72rj@bga5g{iZKo=#`_CVVVf~+&YX%8D6>Jihs)6#tVGKv;9diFEZpUAS&tQP*%tq1+k%v~1u5NOq`Wle6+#9 z@on@8@J)AbIDyA-RMJWx=!`=Fq^-_P4!Uok=Et2m2QM$~cFbmQ_il+tRDb`Ca3nFlmbjjUr$orUW8Ykc^>s41AJ_9fPF*1z5{GWfd*jj zmSR*s6@c${0p8{U451MTe$oO=N&zON04t9GE6)YEb$zCDeF!r=*ptbb*AK6Id=MUR zBb5F*bSz1Hri39%@xoGOd-|(tUf5r-^q8?|@4F*cxgBFXY|{hswc6F0B#V7;Do0@N+oZ{R!um-TxRE=|#IY(tXL zh9nhoe&_mT$;n~Lb1?tcaC{qBc>~h89B*jj(x@G7Px<6CVyFuEJWc2#|@} zsHJ}zbuav?d;l`eP~3Q);G7v9)5K1r;%_mCs^}DflUWBZqm|t_EoPK|2y+A&(LJ;T z7>gD5V%hv7`tu-vEHB12vX60+E04dofRj?dN$G%7d3zC0c?vjos^W77?$>5;@?$2= zBEKk=!OtGW!(KL?rpq}J-$3HJ9agD$Hu6Fw=WUSmQ(2(s#?#Nk-#^7-9Cn2qxQ&Q* zSFsHecjS?*J&Z`e4!T21w#QOmWGKJzXgFG{5-|rU6_t7X)7P3GqHGT zK(Qd-2%&$da3lOC`s@+ro9#nNN z=0`EJCvLg+i8}K%7iqql!<5ZjiMEGjf?vx=;L`T6eB4vbxzZAgFeyctl)iYPycgYY zo@E=r=-l(y_1yn1=;HU(L6%XR1XxbkSU}#q{J?Gi&kro)uoATO)dlz?R{+>^`V8#R z?gn>GOKa-a)UR$ZZ$^k6@q)`T_`$`bQ^1`9_jvf950_=cx|o2w)PhS&!6l^w4(07c zc;!KSQ`zr@Z}RLN)KpxDcv!^6=QVmN@R>7wCQNz)^a!oLNyC=`tGce4+LPD1Bb^5Z zx9(3jul(R?bXRLf`hkTqB?WTLh8zy^!*;`uZ1V$j=2 z|0&#Sd>YMiK?!lx9S%gmxJs|Yt0#%_#U6_VYvcgDe0+JmwuzsOuBpY_W6g`38X8ZR zp$O}5E`tLwL)RB?+hgoz3TpBuAg<5f*hX1S5qP9@_(tC>XNMb3k1o`3Jd{_%rTnbz zY?ROUtSxoPEs2p_ierrAeiV`$ncCBy{X>F)FWYpr{vqA7mBJ^y)CLMKEK!$N#A7$; zV(^)P)Q*#K9|KBXSflXr@wr!c7lWt5i*cTNpn4mq#KQY9e3J=pDf}-=CcJjhAM4L? zx29p=u18QGL3&Glg32;bQ18HfcJdBCu*f~Yl4;k#xuQqG{C_}L1(W!zV3N`oDd?Le zPw_~FoFNcL4L8)K`mlv|36lN4D45w&?pVR(Mux*75p!`W|jyKLcq`Pi!s|b+O*AJ!&tJ7W?*iCi6k?P2c_>(Z1a? zX-$;XfOqCG&+=(9Zvu`gnQQ}0pv>4GzMJ8PQ?ZcyDaEX$gTh$DrCe`g^W~4hP(95a_)4)g`8cWG~DYh z)rWrhS(=*4Rk7W4U=w;9h*^FeOnj6#^dM0MVDH1eSs9h2wl;VWiv&P0P3C+p@x z^k4+3u5PlgO@@ad7p{3Q*I`KK4pn-{LAtiGst#;kD3 z={os|CKp2iU%}%YaPvJr%#%lJz}!Kl^{Q}m(tRNcqqvb$+(?C-#}QC@PrFoN+}I?F z+nob|TO(4NodmbHOeLHoxJ@lCnL2CEw2NoWm>o_Hw!qU7W>YjI7Pk{z+^)B{ky6}9 zDQ?OmZpy=AMO=BKW+`qr4FGPv$=hA2$Qy90E-$VqE(_zVrqqCoCvOvd@^-q5+f0ia zDaDPH;-);}ro2SBY}_v*zr-L%G}xkz-|LlyDABGx2BBUv^lfUnO9A#6!@yAURFJA zPWff2p{QG#Mxrd{qV7@#2f;NR2Ksa!ox;tPf@hJ%la%5~N*5fJw-e!&mk3WTVJe;* z1^~}hNNrXUJh!HTXSl4q@-l%jCHPX&UyS_)vl$jMQi>U=kc_aE$DTuZi7-3KVs_U6 zV8*4ViX@orOQpY6+Mdhx94=@rE#Gs3egQ$kMVE+6@uD_);r^!Emf9Vx|*lk#*;aJUu*Pqy~T}`;zmmQ4CS%UP+lV3 zPO-RsY5;Isfz)Osk-6Ja(bL&;Qdd&s7Y{RkKb!CB=`@QODaDMG>Z$Umr^-u&8E5<| zYc~u4W{pTK*|_fZlrXEBHLH4BRYk?&>8Kw!NQcFhX=OyYWN7 z?2eQ%n;o8?VrP&FW(6*0(=BGC6f;tanevF4@)BW&)LhK29{|igiPXxH$k~>ZF`F}W zW_VhPsHJAtPIhrCvAB^^+(@Z@Dv$c9yhONhq^NeSWdLyNO+W8U8MpF^@FfGMpRhur zpQRQvQi>TVl{Mv2)|8hBGibYu*>wYe85elwCXuzzq=Fe%MrIUavK2-*I{V@jXI!bt z8|Dmx-BgPmDaDSIj@gvQF`M!dVRwebu5|#g>#ZNXJ02M#h0!?4S)h=S!FL48quBThr+cf-BuBB*bnW2(LT=Ew8QYAa*`YdJYW5p19Ty1i_ko&*ZYs8_vWQ zI-Crwsg(n8>?G13k)4vmrX5Wg2#X!52VQX7<49!uAj+60n_@pN)D_@8EL5GP*uikq zUi@X~o8fC40kppbkHNa{D&NvR;}FH0824QKk;}WQI`J`w3C`OoES#~jrgrU|C6_js z_V<>`b(39(kEH8IxsL;v zyIaYV^>#-t~fqTv{kv3v%E@HxOdSlf{zD7^} z7hGw(A8sCgKLD4D7hi%q67HAbGMBHwod@?3xa;A574D62zXq2We;qC#Q*1*k>T)|N zl~Ph6=WMi+^2WMU$f>lv`IZOC)ekOawwE|*iMM33wA5kVyeJh%z%_dP1n8AMsbCz2 z;bV{dK1xOW9ppSpY*y`(rfGHc%WK3YnDQVC&*ilV?_+EbvyoHUjk2ZfrX9G~PO#km zud)9Yh_f#H;IclygUc59rELLH+5)6P4lSkfdR)r0h4V1cejF*TNP_l>eMCF%_VE6I zec_g*V6)rmFVZhqq)92#r1XO*$|L5=8z{N%4e5{e3u)hOoBkkeOBCWhA(ycqv?m6T6SG&=XB{n2{CQ79>ikpfdVH_&ovA93dFTj2K?g%(G zn4n9T-B44Tq9N%;wox`e=q$J2knDxwU|oI#m-TrIE)B`^7IabyIw>_I%A+As-iHkO z$NB|&94YTJ=)H(J0684cKW{-NrJ$2i(3MBfmFI%KEavzQ4!VAWDDekVY+)nmAOqdz zgWxUq8FI#SZz-FBKXvU<65RuWawA3QZB?C^PkPzyRh<>lG}^)kBjJOXAi8nNI{9_pE+lvWM_+K} zs2-2G-7-zquTlIwd8bE>S1EW(RfBpGp{eB+>C5gFnO&v=Uyu9-RdrrO?NDajUV2lhJ*U8s5%*1eI?X@~v^v((| zM$$!^Jg1hNah`+Nbq&jFG3Bgp#E2zp7$>Gp2qavcS(-^B`!0-_?L{nTR&(HPbh$`R zRw%HoMBZ~+3m4mloON*d@b)^mr@;Lb+(Ni$tCk|Tm@l?m3bzIS7sK5Em&LdVZUk;C z+;+Igr{x~Fn6I|54L%K*1Clq;@;bL9r9w|CL5}r>+t&4+&J7DA;ZAT| zulBONqH5-?=dw<$v#4Kt)n3sR{nZxkXbOjd%B2b-}L+9Oh zT5=%h88R%@cUsOwv3CNaJUn32Q!n!HzOEh%l!xPC438@?uSz(yhVzP0l!NDlddP;u zd|!?f%5$Cp#kXbhoR>jq3}hZK)xQESA2}ar2m!^$GUSmN%>_vTt*h zVtK?p+TQkeabH95?ftHvU0z&uVL|-YYR2+IP_5qVeIJ7QaEjo5JnDF0;eVHh_>IK< z6Wo6sk3VvyHu$nQc~5$ksfKHe^4;XBI_WKjYFwKOBL=BT! z-im9OXvD8(Hk6pGVSABW9b(5CrjEphNk-LP%S2q_Stepd%QOKlEz?A}v`iPmrDY1k zrDd8AmzIfzqGf`g(}Mr7I%1jbhD*!z4Y;jvx5M2C_ut{tGO<03W!ers(7n^tzbvN+ zexyRq_dw+ekMT)`oEo$;V`MpXE){Z~1Eq0)=u#o)q(LU!DK3S$mRDzaFcABZc=Xc( z9piLG_Gxm(3;DXr%8^rtsO^cME`>*ia}t9I@1Ng5a$~mNKt3pSr-9TFCk-Tz^-=?= zJQ~O+gm)9DFAGI+{G3n^fzog^kQ$c;@@esf}D?=e!K?GKw`Yw9|IW^ z?Jx~wOj`D3nxdj!Y;;UC79m9g`ImkfNaQv!2GV|E#u&)=vHahE13B)W#z5W$Jx~Kl z{Zj);N)2SX@Ms`Osexn+HISs#Kx$kXNR3Maso`iKH5?738`ttuG?1#Su?F&d6sQ*i zIs8FtZGsVGTey>h!}T0O-i}~0ggiE8q-X|_W@IOW&W_gg9nK9^-cezBd)XfEkg~mM zPlY$3w(vfLz$?=G>>$xUkkt5*aEBeICKyHzk!ll)=rD4d*s|H+siosk{z>6ggHjuc zj@R{V0j2hm9qBz1j^N1yfNw494ZvZW3^uZ`w z%3P+!qT|ZlzHwy|v&pfd9TmnrA2p-RM9)X7kUu+ZTug*x*`Ph$mt?@HYmA#U3HeLh zIOIGEE*Btp-HM?gvBbo+WgJ}06I+Vl!gRM>1oyLWuYe2XZ>fiS2V53wE8Ga&yWoBS zF0`cO3Ao$fz6ci+;Feu*KL?lXgo&_Bg71bVsU@Y3swE|*C$wY;kMT+AH-8u-OTI-# zD&)KdiO{$|bE%Ls1GZAbmAMpN`?I_|Ee{4JcBr{8?oczHB`rpQe3rDeGuN{yh203) z=Mj0Otrm+%ndM^YWR=M*BB^U9-LRW5cHJ;`>cQO%a=tBhG`Mke9IVfNjsz+?6+Ri1 zPIfsx{&%2~C*QaIkx=J@_nJ^;pmqqg0F*BGF15a>Phc$fN$_%U(~lRe)KIwm{Wk8G zaQl~=7>8l5!TslcX=A)+NzJS4WM!SD30~girX;gEE*6>PrkKSd>@JWAS-B@^)`Qw{ z1l$srkDfu6iWb1l1FshDXt+z@7Q+RaEtPQV;IjVE5Rvll19e^MA*D+_q;#oAd0gsI zo~&frj(*fC{8fxy=W(qM_)!};tUsi7JJd#v!GVFrs6W|Z!=a-)uptmT5dO}lM$ z8yMVam3d&$fg$^^MkfaUYB}03Q{CsXnB~p zxZxhKR6H?#0lwL|Gja3!N&!LUx2e_Qy#v?3F@$koC}eTu_;W$XmD-Y4;sy43^-G#c z8m?U_W{*WOmnm9wXBKUmU1g_aGDs6{kCEe|7gON@kFs*kIi1;MwOF?Ma9m;6((T|x zA5gO1Ex66aI@3C`7h+Dleu^N(;XmMVo$Xb)W8k8{mj&|wgu5KSUx!Os`+so13ioGl zzX|u}aK8n2H{9>Q{RLdE`TP>@_u%e<%PR1ZiK+l8RRK~VXFLR7c@teq9>=wIW~Zb8 zn~?Yiq5vbk3V_XqQQ>!|G#>F^pyJO?K2zY;PJRT+#+^5L&Qws^c~@BKGEh9XF%O4) z8DH*eQ(n8}Vff|7eGrrm3*xE4_u)&ZjjZ`Q{UbLWeOTV;01_>=DW4NqyJT)K=RD(RYRD*NiQVkZur5Y@QOEsXxQ4PKX zmum2JxKx9GgG)7_T2Kuhhf6gewnhz}LwlO1hc+hgVYH)PF)F95FrH^W02QIy+0S`0n zM`!R4r3Rlvd#f6dQZ*o@YM?x-f$~HR_%TDST;1TB;^>4+wvXG1S#}4c!@)*y*zf4X zEGCk*-`yO(d<~{u4fpYg$em<)atf20YZ?JH$QOcA-YiSa1C`hy*TI*@IFUhyk-$f6 zrVoQ-FUFxET7)~NUy>MSCPqoD(p^rbEH*dT$bROur;3fh|i}g8FR9 z{w@;4sjx~ADU~2nDnZJl1S!whpl)|Fg}$7!Ltjqm&iTRI(4?xK_4ztX?1AZNpY>xk zMLAFIfHg{gEbT!0fqx&nLl=T3pfNuwf)Z~eHwV6Ka{BS|H#44i#wz?)%5% zk6dZ|=tf~-)#}>S2m>MGEZFI_dixg z-~Z4hnoQUz)8SqTm-T`{5anNMn~sz= z9VuOaR2~e9qr486%5pj_&on0{z&(-7$z_>MIO3}(GBtg2II{_7)^{VMd@rCI65!k- zuXbU3OT5OS)k@Y_9Lr4bS$W1`g~#B2ic@5{(&m-Vnt@}v`_fvp*rCL&rG{Agey(|$ zi}|;pX28tuX`Bca%QOit%T)-MmX>0wdO}LUCZ%92k6f<~_<8M$;{i=cV1bPI`n6&Q{4VeT%{Z)7 zG45?qta82uC4T}~oua<+S6>}3L)+Ocylr7H3tvH>op>f5+AHXIfAeLSvDw2caYoq;&7~% z;Eh>W+fuyd^{Tuodn|mo_LL!?;-tuCI49%pkwQVG96cfM3{dBzDDmGW2*cONCPm zrP1PyXZz4-_Tys%)o6S!qm4#N8;z7Un)29a%99SYfX^tQYdB5rh8v(st?RO#rfFuF zg5~^fJOF5`!ox@GukW6mx&Cw+&EN?7?nvd%^omIOPA>CD=E_$ekB*dPW2kdz*MXOW znTfsh+{NLlD%bU2F3v;=xUl*%G#f;?=j9^NGL!ox$srqChp|BfFL}4FKj<_avkc!g zIT*oLO%6tK550!%AbdT3pG|=>%NK=O*X24*ngWho-5V*}iyhB=H(XQbVhUZF!XBo8 z8qpJh+oBK zf$R;oxlB5&FAWYMz18JU8?1xC61Yc$hvS6gBP}?JNv7vGDo1v!mcm^P{~2&Oz?}*A zX1F+FqJ`F>4DLN}@p1E(op9&CeGTqhxL6Z)D&U5Y|2(+Fy9zFaB*9 zQ5D}T=T|Nja{g+0|6_SaAT^DfGGZ#i7@t#dC6;e`ooeKH7lz}N&g`5l4t7xh`>_5^^ zEW}sM^HKisjP723)%+9q3w)}{I5IbZJ2o}dO!#yns+rzWn9{)YXl4^+IiQ)d5#}Tf zA73-;-NdH5n)qw?ce(rfWNAU{MK_u$12wN|vcAbw^EjkP)nqZKnv>yDHCMo;YBDXV z<`>~oHTj5ws`&(5s^$;iQZ@ewm#RrcqH1#ROw~LGE>&|9T%(#lLEEZol2X+q6>{D{ zY~{V_QX%IrmiITy%Rp)xj;gP5kF&fJEsv_H;i#G#?q8~Tn5wBeM5vn2pwT`U)g0Xy z)r>PL>x*hWdswPD%BPy+eX2S2|CDNe#i}MLRZUW=n#!YUDvzqEJgTPhsG7>7YATPa zsXVHt@~E21qiQNIsG9d7UDIpMO44hNzNV@h-~H$rT%Ot5S;uX6o<1|qaP|Ar#bLPG zf&Ihow&sL=W}gPJIs}dOnK6S{PoK$Qu=bh$LG12G+3tjcSWlnH6l|Z##n2W}M-HBD z5{jMrd$_&h#>oKN+gthjOxkh(9G7v}XPyW5m5+jut6yIV>x*96&wzOcv$K$Q(k>Hg zR&ouyR0p$^R$eE%zfVFXc#Xtw8O-Y9hPTgTef!gAUV~)WXWj*uedYsj*=K$gF8j>y zz%7IOEL`@P2jH^LWE-*1d>=0R%(IX``%L0(`pk`JQSCEHsbZ1}aif5vJkD*D#}t+K z-riI;DrfEKInGJR<m45q;YEX8`MMwdMaF;Divws@|XGYkhCFijUIjnYcMR!6L5#YeG=~J zaJgo~@^P((rs5JS1Ef?2Na^W@%A;&44{fGLPxV9`A{@^e(0q_@E+Xe$@!9~7Sw7?# zhhbQv{iX^rpLn(}r+VK*DlDv7*t9Uo@)nn9&GOa=(pq4+syU<-HBx$Ryz+J;yz-)`C6#lmJ7gwS13v%B#K{7Low9Ya2sW2& zRj@w>N(FnI^_>Vxj~_nY`o?Rrx$sTaWDW2y^fejd5SlXF^Aihu9~vlD$|>aKxXs1< zDCEqu#AQD3HqVQ2bHMu{+*9Gc1ov#XFT-WnAHiige+-w+2t(*LA1Q4)f0Q0C({ z7xUs{8<=7Ywe|Y83(ay14Jn0&lzvG|d5OzM@sPrrlsJ1*Y8sjs;XsI{ zx>`L!f_BIum5aR`9_&J>rw4Q7~Sz6UN1(C6Tu2=`vNBjDZ# zm-V?HE+zM6+dQPSc}VH8Cd%9AhKowBuFa;{Jonq?QR;(eo^$%rJaMLC{c9dODf_^h z=KQ?oAEpLrSz~z z;R0+ATvb>kL0!-Cb0VbsglhPTN^7bIS@;*p}w;~t+ zI<^<#tke+Jb?i76x-S67Ji|n}{3fC=2vfTiVN!}PDMeU$L|AzrB*IIPi~rbcFTz!3 z=;i1Pv9Pc&m^~FUC5(rd|JdwmS0)#@GP%%|$#RPrDMgHw9-FPaM^P8$8N_sJ8fWj( zhp-7x7(W@&GjW^CukQE4qta(s8HXywwV~g~HLQ007CR-ZUE9=%jZM{d=Hbm5iMf~2 zaPF8Iw#C(Ov(@vDQ1Hgu)y>PB>}H-K6A>=U#;Kxr!rkh^yAkd%_-}&Ck=)I2S%*)< zWgqr!#8Uw!rErr9@huGT&2sj-RCEOA8zNL9LjU@(cvCs=5aIJtsAJ|H*xGdM!p2k& zaE_UN1UC9GzeMwo6&4;+3J)ornknyb#8)1q(LD;A8wfhU=d#4}=`xMd?eOW~y@#7- z*j$`7lh2!%e~IE7;Q3FPVjPZ1Sop3eNPXz&<4iM_*6I?FDG1W`TwW2iCr_G#Q<@Oa zoJ?n4HuiQ)EU$lDh2_Z>)?q$e*5fj`l*wl;=%f^MQX!|y_04h)x>QsqF{{`i%MmQS zA7ZM2w^n|LTi}1OPvseh#XA!Bfw&MSQ2A?W*QGcXjadZpTTSNgUjYKl0$DR$mJ4G6 zf$SR=GExc|DcyIfycZE(c}7m7GAc_5S0O_G)VLN&kM_amRpVFl5J0Z9%Bgea7ZxtZ z5$q{q)KL&K-U)Qa%%^Bj?0~1lg~>l+UuEf@CFI5SE3qrlYuH zL3Zr5&CEM+1b)3VbyylWFBJ`!#YsYN8)PuUp)UAW$>0$XT0T1`-&}s7T?-HYCz2V5 zLOT=pqA2SAMc)+*8?ULBmEY=BsWwE+f*6H$0d8|KUv}~ABP(6zI;;|~ET4kQdDHc9 zPlbCU+_T}fz%7Kk0qzvIH^H3-w-qkSzY#9&0Ui*bPOuU}X{(W^i^8O`oM&BMuRVC9 z-;2WaNNv1No^!!tZCIk8zh*5d;7|OXYn`RO_2`ss`D+06}zh5 zWYHj{Xpqt+G37mm_{xI}`%lo!evn!C&OdS|NiT;x>50#c$eyyvbJLr#FHR4>Bohxv zI&m;;WDrhj2fr+l;KJC*Bh)d0M~*?=e4~qlQ-D zu!L%EaEzWcbV)7up{I6oWzpQ?aB0HBDs69!^V2TJkSp;?Lmyr-+=JPE47_T55>6aP z;%>)1>RkMhtA8t&wnAd%**fNmTC`lORfe3xVLa3a^9PKQ+;6LF@r-}js62SGVbLh911CTJ}Kp238iT9xxDH?!N`(gm%thgMG0kA9MoB&gUc@Wq? zfC1ofL23XfvuXfHsR76m-U}!$DK!9$p$34I8UT$;1E6tf05lv8fQC!a0H{h(b)p7f z7BcU}0OZfRofTB_>DvM{~Uoprmx2$Y9`XfPFidz+Bfb;k?_9n zvSI%ER?e2^{`yAN&bb});4FJFd%M27~GO}u-#GP_rOu?2Ux zJ6w>RL3`YB2woh;W?$~s$DVr(NjkAx|0Iq-@a!1_k-VLelAU4lx4s#LfU`-pRP|jsnU!k*fbQjKvg5L3lmc_dcj`LJ^$za2Mb<*C;gcnfO6Jx!^ep<45N6HtrX3U*#PXc*Z4I z?x}5DQ=4E^qASToWjH8XmqlU^Xf2{Sm|u!9$6{~tzS9i{CJWb`@ZGq@zVQU>KMHl^ zj`A^|03lb>@kHV!a<{ZHoFJ&?V#lnP8BXl<4JYgy0~}vaXq#}auD`ApjjHDi^1OZ? zg1xY@ap5}jr_qnLaj)=HTYMv;?YMw}ioLm?$<>k3l$Qk!bX#O+A{I9>s+490)f0?y=9_9h&<(bSEB9#T1?NhTOGhYu3 za5zgIFS^CKqT07{pjM&u8O}sd`^7iT3}@uL2jShjc?+TNshPKNJ6fMh&$)faUw3Cc zXG-rkb?3mo;V{>>VPf*+kF|S5c-qaca(`>3^kcz1%w$--W? zXFu1$`X1P2Y~QX(*{-&-J+15axUWg)svY8p$HKG?K*D7)fsOQ6ovo zRwGF&#FJZ{V}!@~1SvI=jG;!7RLHp=scGC6m%FFx9*v}iqmk6~ z;uuMon-^Sj^8!xeiDxi(1q>#a*3@7UFEyA%>}u2`!zlsvFN66Z7)*|nGn_;QlOuLD znBNg9)?n&nmj*NOdnX^X!Av^G91w%qYYr(J%#ZiQV8)rG_TOOIDQZH4$xjI!rosFh zlK8tDOm4eVgGtF&gGova=1}3$V3JaU$rx%dNvXlqxHOm=mj+YA(O_yg8cgNUU@DIW zQ+YI)%KM-VW+`goGnn#N7jLmVmo5V-ZX`Mibx!=mjQWpc>^17+L{WJh)-1t2#y1pT z9ELd>_kZT$k6i8(vqm1i(!WP$oRf@pQ=`Ltihw2>$Ie%={@KF3(Y0b#R`yZLoT5fr zpDU}R^l1YrePX7(M_pfe_F_N%&SwSP%L;g~oM6`aVkV!DmEl8mI^E`?@Mt6z|B>Ta z@a4G0fJgv`y1xk^d+Tx^fQ-X1r{nIh10e6_!URujSJ(D$gN8Y8g&Q=e>$1s1pXm^E zPEyRpvOR*@vOZ_J%o_kU%X=f-li;@CKg+%WZZ_O+A-q2LBBkJy(#;vl+v|q&KKKI2 zkzx3FpW@6M-@{#i+g!w+eBQkL;<*jHIX-k5$B5@2`igGq&&2KSm!sY3`cH=`xJ<%K zvAyEVauHelw{^T02(qke;ZmH}!6l;KL?A_!lp;z>_hTuK8()+ceE|G!PHs5!-JD_W zevWvMa=w}j(wpEv(FZBxu$af-{z4Q|J%@}!*~jOKSDfQMIWdA+goJGxQNhdy+gvPz z|5@Wy7p`Ut7b%5{l)hM^yq$=zJiw*e&(*``6Y7{l+;^yq8Nd^BoL$iq$>n++nC^o@ zoRnRR$BB5)9$&gVQXi^Ao~yb!dF^JZVo18%a54wq>=#oBmON=M>v;*U+3VwXx3zK+ zqYX`y;c#8=R-s0Kx=E;$LFt<+(?HEa?cy7xZSYNIkZy;+{}n98p@P%zaw#SVcY~eh z6)d)NQ$wn+VDYJ{eHMSBt0d3BsPh#rrc>Wk+qkf)R)-FZuOPU2a;M z8X`{jr?KAkhY zETv-N#~6#3x09IK(6AhznO?Y}u#hdYX5sSYRKM_Df&^uAuGtrrkF+%bW4g#O7t7KG z95CF0)amsdSN9fJ%t$F_r1Xp_uFBpgB zDhK!5QFCPjLQC9TXKKmfZUyphGMf%KS>{r>EcXl--tSp>Nh!Rf zba%P(_949T62PlRHpi39!-e<1`vq^DDNY~Y_3hn1EO_s*@RCw^Nh!R_BfQEp@S+ds z_nw`tNX@^6oI1|Nrw#hVC-6tEq>F2bpFs2hN#7p*0Fo@1f0I51lw~ynI@1-@Ut1(e zDUzgg$f7(BS(G;rNZyIm{4dCRk<94Jto!gZK5z)!Xq3%deL<0iPOyirIZZ@$eKo=8cATP|NM?ipuk#SeA(=w;a>qMANoGi92-8 zf@n^8^YZsfTrTr(TVfn44hOP>QUf)yk~cLruUyQ*Q))d@;%AG|!S+Oy%Umog6`%Dx z(`8~}Ad24#7gHViXf5lq3BPH$-m;*RQqW0-dXXIOB!pub{4C#9g1QqYx0(3STANP2Iehx!6~9P`mf&=aqB4j|}X zwxE+z&`Bxi$|LB?i-Nu+@u-0cWsC{PfI+DN?;PI@fpKV1j>LVx8J0U~Gp5a%Q&Cb_ zxHd)G@W+q1a{(gcx4O)u2-8W_&MCmn3qw9J1ZY{=+&{rJ09<8Mt4m5@Ar*2SMl9t$ z;!vCv6!pRN(Ma>K0e9h2ox%E% zV;T0Mc~}lppUZ(1e_sigWxEP4P3O5_DsrS0IZ`3#i|{2jSX${RQnnF=rk3LI#kQ z?LixcI4!LAD!4R@O>l`pGhB+nL@NfQR18Rk96m8t9+oPE(nlD|qbU?;G-cD!tg0F)e94V%h2AQf^t z5K4KSE@d>2K2CcW2jAk+LC@S}SlP>l3R>{tVZJiKlbE1jwA>SrYMzr1imAqL6$%v< z!6<`Y!Du1Q^4UMep`gK1J3r^PB)QVuHtC0M#cL6&3pFDKeFmgCX+n-hU7{^g>Xw8K z%g7dCIj4|;>p+Go$e-X+n7ZJOg8L5KF>v37%Q_u|O93eaYT8nyw53Re9GV^Fv1OF^ z2l)IE_n&ZcHS2BM@8EtH_g`@L;7)_S4#qtM_Yt_|DInZz+(+Wh!95H&H&$?m{BgLC z$9)2B?nwLikUKagPIwK0Pby&m;UOl%u+Z*=7yXc}^JkPjLp1kP{LDxxk5tN$N*GgC zziSF@%0I|uFin;@(Z%o#L#z^ACX7ilUO0yFm&soi6QAWdC>T<%-V=(Z<$s0ZD*XFG z6@WS<)R~|Nz3%awAQbv_XS`4?pvDUI0I0u8j7LCq3-uVN{}$?LP=6C@2dMuM%9NQH znDW9iaM2H0ID;e~8plGR`Wipo#=oFn@iT1vsY3NdW>T#qpW3T@&*)bfxz%0cmwjMm zJj&)#*{?F@+W7N7urhMHnBq{~uQKxOA&tNI11sZjo5!*bED!E2)_QzWDF2J6@`T*? zpenz9b^h$CS+g8}VDED=zhCSdtbSkbp@zzW7)7J~d zj()vR?B;I}stDALN-b_!vFhylnkTLvlEyA?uv4_8c45=mqep)>&1q52*)@%Lr*2Ix zBFQ7D!D)XX8FQUoQ@f~nX~8@)Y19X&J36$W!-T7Y#~3UJ^zqZnPw!N#{Q52ynQ~-m~q({ z@q2O~KW5ShA7|{j<1Gj9Ip4s&DuzQz;Y>i&;g9EWm&R~j0cUp%=V##L5B0{{3(jLP zoIilm9m6>Y&SnhIqj|j#&aM~^9=tmX@Xkmy%+cUH62sxQ8@pmSr%_H}grc!{((T9? zP9Zo?$8bu(;aXQT)@*P}V>t7{xiW^c2pq0bMPn@oCl|^Z<*Wf`ehjAtoQ@dIE#QpC zgV|`TJHc5S!}$U@TVgnmfU`S>^KEc?VmQx&lM6!}O_{IXmd0>)F`XC=Hzw9$juefx z51hwhIDZ1CJBGs-Vm2S`jWr0`zbl554bJ$Oyp97W4^N7tdF6vMF@`e=9G;F64Kp5` zJ7YK(fb&QUrxcv77)}K^>3QCCt^{Xz3}*?`iQ%jQr!$6wqamH17|uiB-=Q(gnVmQABXI2d7f5Dj_!#N)IvMz=*8Jtxy94?4nAH%s0oXs(uyTG|K zhVwW$55#a@1Lx5g4kx%z$8b1ZeI5k#t4o>=UUJSnlPF@UW z7dR7RIDZ3&AEJjN{Vpij=3MM@igJzuXMPN4I5-`a!~S9d`ho(Rj&df9J`>%nrsHzP z;3Sh+&e%#nXI!11Gk&d~bM9t8XTrUH&Uueo4l0LfD~<)S9Jf3Z_gW6aoQW_8EyoQr zsmI4TZ*(>m61?>~Z%n?QGj_b6Gp@vPnAZfNYB`$MdE>A5bI#pnIgC|=SdUwd8*4(R zpK~5R@fK6UiFtm`q|rXk#L=_-oG~?i&e*k%qy3;oJ<)NXt393Fo2}tXRoXzyqVf3|OnDLEW4C-TTRP91XKpXmt7r z^A`R>Or78VcDp;8_ojmm9buRnuS+`4SgIpd?+6y%H^Ow{uL*aAP~LRVStHDq_{;kI z+pve$1k*uhjWD#t=z!%K>Pbh-OrODNr{FKsx%^`*ukeP^x}ziRH7|6s2s7G~S9TyT zbg90)ykRsibdJ5|h3?6hS56==bbP+NykRsibbJVNA^!5pIDYo#Ackmggqet*)3n9W zp1d?2bTqxD14D{1JjvgrlNU&bQqx;`xH&X7o#O)Oz?dKm(dPAo?fc4t^@2Jh%t8D$ z;3#5}TVTdHJ#tGlq6HMo1_{8Fq zA4uop5{9)SK9`R95#aRWL(LkT#*wlq&&LDl6iArU-E^)v;}aJJ(_yV+@hJ$TbDD%n z-d@aQa9TJ1n(~|$NN1#kNnWo{NEmOuMh4OuC1H}+>kJ9wZTC@ubk3A8$?J8Ngz?tv z%s@J4OPJ*CPAMInwi|y9K4%Bg87*Ow<1NN22sNnWpU62@Dev4M2Pr%;}A zCConjHT4=FNC)bKx(~-+UfcJ5{`R08o(G@7XyXDxiOpe8c!kk_n0UfwX87rI!KCwX4819_DN@|qLK%Ns`XDo-J=xq-aO19?>h^74k!yyi(5 zT3|rrTt2<|K(M_kB@A~d7`>S1$xG9zk}%2T@Dd60I{)J4RTW6*Qg8>SB~J&cf-v56 zE)Aq}nS@E+UYAQ4_Dx0(FY~0Ma(IP=@yek$jMn{136s3cS4o)1_!l=XoF{?5-Z4Md zbO)yyd-=J~9kD;y7S$4lbvJEsbs(Ju62|m9&zw0OhRtuI7TR=7c@_lHStMaNDr4+J znS&k=rn6YWJix!WdEq1r{PotW2EPZV(F#$Ce{o;<^DqA%wNb+GDTL9T)<9mH zB#bvNZy3$%W(ku#uTKZ^x;c>7=0INFFq&7JgfSTYt}6!$=WmN!B#hT4v<32t1oHBR z(Y$VzFs5Ed{o;i<{Z6}tVY?d)Zw=)2nLu9NFq+qG5@t01^7`iVNlypswFN%0bCBCS zdDYM~JD-&>dHjp}$j;CFBACwY62{wCem0N}x+3J2Je@lO>D&=WXKM=S+!aV?YapGw zQ%DCQjxz7YU!#L}2hzDGg>*hAVLCnO+!ILW^C_fruY}p~g-|L+ATh(7DmW&-XoaZpwnr4;aU; zKR0>k+?)lSTNvjhe5>-h*+b`tSiF4$Vj_8~$StojVw3I=<-{sLqFxaMQUHZ*l^2Ku5{v z4iBBX7$-BGyBVj@M&~XMoqMvN^Aiu9dpvZ|RRGV_zSA?|-C`)XJ752cH_m+h)I;Z9 z#>q_QJ`bIHJ#_A8oEi8=_KoYWT?d77^YZ}XQ2$iP`F;z9mUPwR0{TEFt7WycX|J;6Ay;G1~9 z@TeYi)7|o+76;?BaBNh*p75mgB;(A&_jr6Jed?sM?KmQ>rx@ofeCOixo#S`j-^Jpso~$KX{n_HpBJjFUNEbegeq zJ-|2*9iFioVNQXLGNa3GucCjj)Na*?goc) z0f#&sMQ4hK4tc6Mfy013p+l>ca{^Fee!ldl&wkgNuY(weES{os zpob25;3MU02IJV}Jl#X*V8&@gT5#=*=)dX6MYr9cqx9kX;al-@u!j!4wd~L3f9*#{ z(@lr=mgNNO_5Dx}ox>UDn=+acH41; z4|!A;X&voJ>nKlJ$9U4R7Fpe#fITfcj!5eS#zE(V>)@>yu7vaD)-jT>)3%&oOH0r>iE&Pr zbdG8uFVIbAF5}qyxhHw(oXj|fA~roIeR*)bm(D!KvD?g(J#^+X4%rrZj=q2PtzJ6h z73T!VYgKh{zK2dR<6JIruB`gk*&h$KX`%M>n>69@Jd5MZn zsfW%2#>w1PmNSlh9AJTm4xL&*lC4|hp|j9KXR*NHT>1G(vk@+dDI+Od=qAZw=duz~3yl5vRyeZeT;9AV5)A!*3{9>{YZ$ZHbvXB}$-HFEqY z%F`v}4UJRo!Kv{;T0D@5gwzHU7Ss@`G zYMdSku_$kskb`wBS}jS>`#RRsI+h`G@rs71wBGYTCX#{SN8!wrkc%|sMG|tRhMX!P z;ed*@UP4kD=WGcX)Q~GAq*TYcUqTWZ=T8!1<^4YrGF`{Ymk#s^8giV3bZ9yYB;;HT zsh5!RHH3C#((|f@d`?12G~_A?S+5~?NJyE6{6RwYXh_avL3v6*$>&4~vGUa@A(c9o zDIrTWK{qSd<{854O;0~ArEAOguJYAKJCG|-UGSM z1Nozbda9@DhF~#%KfE2(kSdi3#fS_ht zkXryD>06KiIHcb~ObZg4E+l4gxYYysfrL!essBSl#%oQWU7PeQ3@8r2AR*6Ku_WYY z8WNF?_Tw7zn1no`A?1fKVcfW08uZG+zA@^v=c-ieZSVL$( zA3Y5k@@WZ~9Z;$NLP87;IqYym!Lu}=aMnvmu7+GKAv-nY{pF3LVj>XDGJhTJS61sd|agdD9Q2f$yV=SU4%Dj}^J(jy^V8giM092ihJ{h5TE ztRWvr$Ok&s$(X00=cIs&)gvL3HRKuznX6+xDIq6nNUn7A=V-_&64I+70}^t!hFmQn zYc%9n67pFM`A9-0YsiWMFpOtGK=J&g0{V@ev;hVAuz-H!Mmrs=<5&TCP(vPw`)kHgj}E@gA%g8hTJV7<8&@^PY`tO*ElH&c|=2gFCo9t zkcJaQtUEO1DhWAILtd7US`9h&BoV71pvo&IA&WKSCJC9KA%B;UjhfEsa}9nfHO@5> z^0vl#Q$j)-QgX70b*P4%At8rr$PNkFtReSGh}D9;;DNj?A*Ul&jxjGetdD(Z3Q!-d zOC)TZbHeL4$RPeqnkT~l!?7rQG9Z)iw?aeuC5{ETRYG=XoOdLoMMIX&7nDDxAzuK5 zn%xN+l2;^fEXWQ(aveC6i^Zi)7S1z(P;pq0ZCNIP~PY2{QKqz1NI`20FLXQQ>Lsy${ex-5F z2ZSCA@`1#8QsbPpSm0QYT@uoyah6ojk&4&{9#DSW7XYEhg1i9;rG896;cPgCFzk@u zOUQ+q@)1i!tSK5Y2nanE7aFIM3JZ?~xl2OoHO_v^1kc9>6hCVLp~r&!5D?<| z$biB*p^`A{kn1GmGn(?NfKaSS8d4FYICjWagABl>0E+S}fE)|p%z%O{3<(?ona35b zaF}4t0RuHo8hzv4x4wL>*g-?@E|swu$FRp*<%uQM5>u?3Wh};V#A@MKWN60Wv-6Mt zxK8XSq*zZO7Uh(22w)sk#eXEko_eb%b+Kxi@Y`i9#&M+H=7}ZtTT!ep%UF!#h}G_i zwGIBVc>W|~F^(hFYL4{~(5B#%{9RbK2o$fZn(v%47>5AHEr8HtK~Ap0%)SHiJ|JIr zK<*2RL;9^)`!5$(OF--rTf_X=B|lZ?q7|`7@{EJO82bW*9s#k_S?i%A)=)8et)Rm= z3>X509s#k_S?8f6)<+TcUnCvIA%GEG!G8<^vC}z?>DaYb?AIgwmt`!*ag@&Kp47z* z3&lFQPUM1d2w;2?5PAf}p89$Z9WmQQ*uRl<7>58x)2aN&5D+_^Gd#HvI}Ql{F&T?- z9Jx5tllo*`rW03+TrdtNdj=r%2#7s((?dtB!6WS3Bpt>ffN?@S|1ku_PG^HB7h<0# z;a??VF^(e_5l`x3W{qO)L@d%w#vy4yDML6ROd#qlL1@n~V`5s~w z0M0o4{%3$3>45A4WSRq#ze*ewZN(}AWU>RN77%(YoDM+XIN2cQ0CK1Uav31w9gtf9 zneKo*1_)di8=Y4Gfn#8U7%k964Y8kF7-MP3p$+4cKkj)_w01x?jzlba2nRB>op!j9 zV-c_Pluf)~lND>Fj72!kSerN&Nt2$pP8tVEs`5Hd#v&YNtUit03DLeDaXS&96A9I;>&`Z0SL**f_x4T(s>JVGayt`EXWgpOm{&34hZRy zg);;Ek&al93P1`RkoABRIw0o*LZxHHx*8BF9SiaZAXGXQWG5hH4oLoLQJXBBg@90P zvLG7(32Mj%_=R(?ii;O4EG|)@1*JMvrb7!D3_K<%79rRnMO&8%I`v)_$jCWrgC0d zs^n5qqPQq@{sm%Z$qUhUQ3Y zpgE2!Ns?__2cwOV{%BBNSQreJuBuv9Ra3?67Zn$k304u3tWrpbh(aYs<)-?`Ku>ji zpgY#HJk}R&#T^;3VWtBrm7CfJVx7H_1Wqna_cqku5$j2&ds8(O>r2%Qv_<;|`*8hK zCY08Q}J|3G~;Hgn#h*4Y`1PrrlS3RZySgDJE94{x62dJvwYvh zhNE5e(Se>+FQKGmx_YQ1nptdwk(tBR-pF9IEz;2!O_%ekSPyRV^y9I8AVS6B_nL14 zO*X{4qJ8OTw?&gl8sf6vMU#FCR=l80*$sqb{aCO-+N)xOgpL=LDZQtVhLwx@0hqE8 z3l8oj8u zzaVh2fH%0|3@!<-3lSCiVVY3m)K;^nFW!M`fgrhPDjEa=rNh{z^2f;Nj8SQ}+sId% ztL?P(FG4jl-bGYdS!kM@I}>!ND{d=_P#~I!b#FBziJqbU=m74|g^>utBrv;ciD0aM z5LD&mMmSZwKR%$ZVZm$rOkHgwBego-f_hyDal?4mxYGHqv56x%@aeF2v#ILTaCMs(UK45y zd7;(qEiK{3H0X`twP~QuE#cJ;BH@PSwsl@kszNnpbEqZM5N->%I3l#R)qzRMk4gL%Lj|J*yW@#1kwjMp49EHT z>F}72?Hv7dIANrvD#(^dG8s*zNP^JDy2e_ONzQ(;2U2E(ghH!}f}tvW355^a-YJt( zSuCz!vxp7{HKZ!MoRg`l8%VLawj1D8RpAxlt-jaU^_p_Q;^&K+gXz&wzF}ssswO^! zb|zgqT-GUR0N`;%69bVx)=E@ns^Wdo?o_a?s%b4*1Hp76*3;{TRTfJerGo3)nw#pV z_K=!|s@j#LitO+e#NL`H(TjG~;Et`xKxZ@ZvpvUZp4?|}4O;wzU%Ft>d94^zM z*5-P}kOyE(7p<33*`ACh*%J(^SX4iot2B3nl!*4nH%HBAS5I^>CCbiXpAewl;ZTE+ zK?5YJiU2`Lmaw1%@kA`OH7Jp*!VOBx+^%%K|-d3z= zT+!G_2-GUUDxb|r1l)UQ$%?Im@l&aM9Milb_yyh=;QQ7P4r|2dZNKK@dRBI;;@>b@CtkN;`${O zJ9c)|9OMp{PfRpr?QP-KR-qoSBbs06l z)uN93WJFwh%XyKAY4Xw88;>WWW=Axc;$;2VPb;hu(}0na#tHn|I97E&Bk#DvJJ^tc zcVV|O@(lx)u8{SWz<%_btM-9#2V-n}IS z_XDD4qn*YM2|L{!jc#g-5AJPJRbjN|{wYx#+PwFvgvcu#F-P%1w2SCX?qxw_l~~9k0rCP(#lZ%9a$b{W~xv7wA>N2GI;RnViQ5%M=1wxZ7 z1;whPG}uJ$8%2x^s#H*Ov>y0IQPso5SVK10YFxqA^m*!~ZwJR!FWE>qn~Sm0lFdd> zG?NpT6<2P*)DfvfbOA_UVRUH*UTYXLA3i*=a=`A*;Ry#bV z_}RFs8Mzp}tD2b{H%pHG_vrE^ZO(`;Sq3iL4xk?@%Ri%+=@*kHTAW^{AL=N)Og|Fb zv2l2rzL+pNsYDiDrY`}WK+Dq0%uK|k-D7KkR5NP#1O1Xs>u_X3&fsulie~d3><&kU zD1HuyZxnxr!#9eOl*8f3fSuXl7-@3BX4XmUtT3+LrLDk6LrrxvGYyE1j-DERNf)bx zJ28Ikbh;R}oVz>^YfLO%yeyi}bkTg0b2QfJ;)&!kkIbZt=a-&pK>gagk!X$B;AKr9 zbBmV^8PVi99b`u%H8K&|O1V^i)I{Xs7oRpL8#YuUGy*PH&=FdO5lC<=H1YsMR#g1k zhLNJ%^wVYU5z}`v)Qid;H`|nyt1gSN4beFqfhDiB`TCFo4 z-xP}m%diZ{tR5a-j&+vN6_J6izG$KpuxKx)km*NZWuumWAqdLra3gQ zB{tC24UYjU5W&KzX%rT@GGUH#QGhcKUT=6*3k00Rs3{!las$~sItYHeQ{JA!`B;9P$IC#mQ?dSw7XWxl^1nAP>D1!CI5(tYE+zjj&P~bxsoYTO_iQ`)J*Yr!Z{&BU=Y}bn|L(*4=KEUk`Ougsl#0 znrPf%^knDbNjFVy_sL2Q@8G#(zQ#ApA6Me;eDCGD1&4*n+)YlS0Jff$)z$MT#6BVG z&iBVS3Gd0!$CtJ{*OiW;I)`T3$^u>2bbXObcE)ei&)vtRK>?3E_7P!sW-}X-EID=? zFh?}s+H5Vi@K|IA0h`cWk{U5xcWyIRWZzWPAlaxZaz=_gX5%U6Y%21IWZn7Bt}UgIzl4Q13LY}!PpXyemZ#^|`~VPjz|Lv*(2-r^ti7@dvU zJ{qL6D1NM?RPMt0xD$`|S{eWE9l3Bz@xMAJ_97X3ht(~Ty`p4iDSfLjLVv*K8qrjW z-Eq`bNsqOAyevQ0Hhn8*XEw9fm?d4e_vVP^@ET=aKDJa{S^c=Woo?Miem};f?U~N( zCp!wtrh?o(r5QT%lP&v~jYpf2q{EYty0EW^+8NExQ_aY#!%OzXw7PdPHy>-t_AEPH zWIu+TF0xg!nQWGyyPe*+hymp+Y}V+=+OwM3dSpr0ZL=KFMsKqm(d{+K7KZS%N!6a! z%+=R7QF}+gD&%ZxT1Jv%t-je1wdXp!N|ceRqx$+{j^~ zPA3K=Q(dt*&JDmZ7u{xD;01$=gJtH*kWuM6a;bE+KAQ=ryk$IfDGjRg;3X%5=j@a^>>p#vLYIC%#f z(JB|jl9dbSuqtPahG2Cw&U>n9Mu1Pus>9(?p|++LO2BpulQULRaAkEAss?R+H}Yl}E+!|aM-k9%aR*y*0c0fVd4o=XH(b)L536shaL z73WLunJdos_G4EZZ?M+OS_Z}oz~HNP_oarC(Jq7%I9(=KR$km$+F3;Fr}%eA_o5cjuIIQOr`pmpj}FI4ZH|gx zbi*Fb_n)AC$-jBifEVo;>M7JG8c)B>FixF_Q`^5OaB#RUPRgBDCGqGdKO6A<-K#}d zeKVfzjA?>z1g#0*#@V})F*>U_Xas}yd)*1|Eu3b2IPP8rITpXQ&6KA-^f?)-1H> z&BW_tet`7xp$F`yr8gcgRsyGqt~kL%H#elCHy!X#0_Q6d&yU{Az`F`KpST49Jbv`% z;oT2`^9PAH4!_go_ff$A4xD>_hyb1(eA4kp^qvRK#2*osIFC9Vy~pwH2;jUf@tpL! zVjLM?l;8bsHH^dXp@;C&(R&8)g}|9~8)5n9myYFMDsdPQU+L%-K(L<&-VHw%So`Bo zy8Mz{$KNh+)OR|1#NYnF`<=w~D-VKCy+ctFf78+1iC5DJ?@ocE>DlfmqBnGQcZtLi znD`!7ARA&)0zS1BoZnO^^37aCW=#Y^V4WJxa&@ zY%_}P6X_Nv)H_Od_FcF^2_Je$PlMBtF8NRv8lMf`2%Ln(qxu0n54~xCp9`FeoOm+7 z7D3A2SAlco2zYdE`L)2gU*c*0*sfXhC?C%P=S?@BD<89g_iy0Lf^DWJQ$9`x&Qd3y zCm*E0wZLhXcz*m*KDvOj&5dU}L7w=ba{DrHE|+-BAM^!H%X~W8wQhMsU28+At$Ibp zOcQa<*0!3uCbO=!$y`%c6E<6$!_{@m>%uLqON(ZviPF$oZK9j96sLQqeXqP+vnE{C zUTfBeSBLADmZYK7GBl8i^+)St9f?R{>(YjrF0*DU4oQx6)=&$E7&YPLq4xT=`nsx$ znf=Mlor8%~mkZp`x*B9b%c&0n*&m;Y3y0+2hFE7Jo{V>=3g)z&P(aN96ZoAL8q?IC=tu@D0eB z8M}Vsf`kL7QSqrq6(cTO*mfY?pNjlvKKkgRgYkN*F)4o+!htP@k?M^lao@wF{9L@) z5rtnB!RD4EE`2&Pe>s!d&v^Dx{-@;czvA~eqluV*7oSB87GIQyMbHyUe6EDg zGK_6C2p8h-HvByfe}96%uw>iZI(RPNWNFkxI!G3Z=)Hr_ckpR+$&KO=&M-dDmEwz^ z401c)Ax9RRJxxUce<3&$)*idCrWlL!RVr_>WESUl$T*3#UUK>e4kewXVND!4nwJ^lulJF z)gKvT>8Mme$o{00&UC3tbOj$>5nv`G{ewbVNG7EJ>LLC}CgiylO5l9top=V`HsZS& zf8DY;8*t)?G?pH>EdBsklS>v9hv=s8d13UjNbVak90cJ^1_wc~-!1GV)wIR={&ue zGnc`vJ~-fpC{TEr0MoJLoe>Om3Sa@~4h+VVxN=djFd+*TaGy%CMBhIndVgdXV^qX7 zqLfR%b43(7`Wojg_F;G603Ab}S~4_{jP(pey9)4X?jkV8M{Vn*wvCunba*g6fP>wP zQpw%ytfPRxIf(Sjd{ihD+OGR;g|?|7Hc%5y_JPL`9eJxUsd#sV9GH<|2j+CiNP%F) zTwPVy)(TT4Qlj`ctNM$O0I7ZJaB`(NF|#h7>{x;#1VVCCY;a4`I96he^J2iQNp%c$8?z*eOx#Xn zXmBu^=!_(z#!QJMHOP*X?2T_hMTnx=6neZsq~)qg;y5~RChHPaRH}GWv%!Xp6r0n$ zIUx@CL}OOi^AADMDx{=Ib0IXzu!Kd#a|_Xe6Tydxv)B_|T0%-s>@sA!Nv#O^nOSvI zIZ`xXhyM1zH~rqGXjT1#i=b`|k)BwmxVXhQS_(I)xVDOsPNdiA8{^aIlol+duN6@h z#x%p5Hm=8^7BfWlsJeG(V3To- zNy_65$7b0jcDCd3KK8%4+)z`yBSU>DvE7}GxZ*CbEoV<={_J)2D4A(v9LKS9*A?wF z^lKq?`|EgTiftq)gYIt+h8RB2fx*sA?6{8@qHwp(%>lG`71t66+(nlrmWvWtJNv!?FIM z{v}ouz7QCsrs-{$Gi8SXQ<+NBEObOzQWYRg##Uv!bxUN>?2HTy#4*d)n}}~=Kd0ct zg4uJ)3!;ElM8#Hmljdbh+co9N$V5lb{9>KpV#%y7d3VcT!YZb4SwS>Ght&^nwOWWH z5%pK;i#Ij^r!Oq+kg$kY@>-gq!&Dpb|f(#A~-rIn`L<`Y4TFe2D=7;}x}iDL6DHQL3(bv9+& zVDghdodZ%LiYeVrA)YUxQ#;P6 zZfc=1yVkmG1XNGV=Q8}pC%9iLVq{ydH z*XTf(akw!#KZ$}Dk7I#`wo^(U6>ZCvt(RILF-EBcjL!FiiH-|(DEtb5dt_Q>$Ajxn z(_jWa4z3+Dl)A~4;u*p46ltlE>91pDs;R?y_n~#T4s3Z{t=U=~YNQ)BOkA6S`@L|1 z3T_Yzx73HK!!^bch%}*&SmGwHD>{Ii1Ie(q8erM)$;cOLH{?q0pq-#qKw!Q<-Zj)0&x|966^!FE z(Mb+QJH--{t_&KHiVbX~n;~!s3vQ^2a#^Nl4I?juNjCMidSFvPq4CMoR*WZ5Z6Wta z89gh5(zm0M$%KFwkKEYwC=Q1zGn#gANL2pR6k6tF?XJLb&>OLNMN^PM3)!Ecea*m^ zEjjQ-z1j2`z||nJVay)Lp0TiP=`FoKLvB;AR74qDjO0%W5Fi=o5ld9u$C{x$PXHBLE5h}IdrDq2O+z*A z9Hd7T#yVY&-T2xjuavpT*zo)1#;puA>M;_hmKmP`Y!Y^X5vr*P*O>5E(G+6{e`F#~ z8&9&#l&nh&*~=1r-cGvDRE!5#RPe?CzN{gw!L*AI6otBG(OTD77b5x%peTRIuFJ0E zWD|3!mYM8~x5CMXZ@d<>K|%<2Q|hKc1J7tyRB{EL&ZZolTG)#A}wzV|Xn_*m}S0Cmf_Yn%rUMrKXtkv1tRUw9~{P``^27BFk33hw) zH2h2%8kaFcki1zHYOKK$gtir&FN!lhW1O1S>SnVoRLheknZ)33bE#$!`H30Huf|=q zHRkgAP;D!>!jytvNsG3c{1%%_>aj)k7Mr?oZVPEwGhrhS1lEp~lr9z?qubU3r<&$j zY`Gn9PW8xc0VT zH8zIpvA9TZdnn$32eWlW-SRf}(`*)i%QWjkH} z(yfhZJXtnOnOKGope$=Hm?jBHo>g89Ehiz5!;lx6{~5pSYgb&cOh{@?xUP0Z8~237 zE0krW5`lbqxQ_SB$LkS~lalY06_=XlVp!F=iVCa1=SxYuJ3eUe;Wnokb|$qQ2HOsk zgC#-fEY1Rn>!{6c+}1YKf0N_JO)HbI4ZO|+VZBB>af|~Sl4ETs;hBx zBb2Zn>q7;1x%SFBa#W0Tv^Firt<|AsJu@lCZhU1ZRn-z88^saOp(d4JF{2K;J^ybPLOJ+w6c&9fP>7v+jm0kvVj@rYYN=y!Cx^m@?CplDpzD&%t+fPyB zrH)a}wKX_dQAcK6PO~c-rYsX=RV?d6{tG3Oeu_ZhOXf)t30XSLKE$=UkS!GG&N((I z$uy>ICWgfh=AlGtLpRmqqFD^NbjNyV0Y&Q&>d-Jc{*&`>#d03;Y-%5f5j||svEdvI zoV9v*ZBqzWDEB07@8{tCE?VQk&!(!OSYN7cpbaNm_hDSdj!82HHe2D!vMyvLC`+)j zk;Lf-xs#|KO2xao?Fk&~#KUlKe{&+9irctV^Ni{3p@#=qSOreP&6tp`iEMF8(#E3b z?WDoE6)Vuhv#D{YzayG(;gDJIR|_BhpsOwpmnWiUxhPXPEx@`rnfh{?EUf42Jqgh+ zMiO_09tPf2J=76Rs~LpXZ)pbM`RCixvew?nV6=_SqOp}rKJvY_o_MP_8=I<|n%4>C zw8T{v!-AK7SEgoxg}GLy+OdWf>X{iytOISp($_v411@L7VNA5x9ae>Gs=qo@MJg`G z2*2GzD9=~*h3ey-G@>dOe00Y9sLF8P>IP&y-`*tBbn$$yQYFO9FLO+%irD#4y zHKcFk*j5E#3B@pKfub88z?2F|s=mpZkha}2jOjcUPxeq%R3WITGbhK= zD)D%(O>CwUi&k&ztQW{xBqvHgq=g-^NuD_&N|kBR;2-I8!1SJ4^y8mVFHp zt%32wWyQ4oVAXLcaJ#}ZD@3J+wTV(j)FVJYw8g9wecx7ELus#*tr#6?4z+|DXn3Tx zttEsRC=^3unAa;1dSFC!v00(1v3?zvX->?iNaIF~gf!$X2aZV17Ddd-DqC4=K3(cmXV3Pe^lWg{>8im{%rKN={BFWyW*gz5s zRYxf2SRC^kJWEE)jUtIeWUF0IRLyiO>ax;-L8PR3NtEg#NUPwd=pG@}kHn(62Gc9{ ziEB$YNv)kT(#kU*p}INb$yJ-AnO^p~zBwYH5NHr#4JKN1jOO^3Xrdh}JLNR9wtvb* z*4f7IL|x>iDY8*$+6xir>IpgMR%Yb3o@evzZM|9@nO<DEXEj0zyXPJZ zB2(yEXP{cm^abQ$4rQY{L$Uxs)3pGZI>U3VN%Mn|o%twB!%#M?wHXuR#vu|uPQ$BO znpR?1j+$kPkYn&RtWdo+e$`Di;Z_*9_C~Q5g*0n|!FF+ZOQ^O1-ViOvj19n@)zg8q zyae>a&UcDgHt9BI7}ZVqoIqc}xam=3|jD8F(Zlcv9tM#sT( zCg}1nlSUtN^ADCxn~@ayFCEy$l&q*gl9<6x#)lG}(U5{;EI2oRYS!o#6?AA0c27pl zD4NvV`~yZ2m9mX!%Mfi+x@f)8KI{x|@VvPgPC<$yS{yG&{0U=^j~P+H2jx5`OFBc; zZ?agZLe!7YFpy$6_)U`qXVi)c{tYpl2pW6R(ZDKKtUtm^A1l3uzFG&Cd(d-6{j$=b68%fo=vtEV5$%n1(S*w3q>N~6b2MS4L;3l`C?e>Tjz`3o z(naL4bX!h{rKht%)Rd_%?pZlfT`c9=cNR9RHMg%p=LQ2KuxBt!nWl%uq~%m#o`E4J zbe%9G(-y{9N^br=1=<;Dz|_c0fPM|GrGElYMTHecFRCWY^_^Bk%Co7AgAwQFl+!k- zwPnlLxO~(!LWWAqFf^Q-Pa|fSAgVQ+ktH(8GXZGVkV664j!ZU_?X3@o8rz#OYuMD@ z%$5mRFot3SZHrho=VE*pg2B>5Hrd<|v+8_y%tR(+BoXmS|J35y0 z@a~aJ=G?hfkn>uO4c{3JX=xGGAm`@aA+^HKpqnPy`aU`?ENb!wplBkA{*o~Xk&i`Q z*I+>hCTC?UmBbZzj)v-RyqS1}yD6fUeHoYCJh(v3)k1qn={8}AF(co_i#dPuN5U&9 z#sZIAo;$Q@qi1f8XV8xZB6Vxbb{vX?`MtKf)ihdybA(#Mjc|#na1NxxAsyi4zdvH# z5RE$(scb0O`kalXywG$@DMUV!v$-u|0h2OStwZflZ5|X$ws}HuT)vwT|&N;+EapsuA)i{ zyih8RV;!(h6GuLvy%p5+v3OU!Zj_5^jircn0k*?37`a0nxuS205+lD#=d~6rGm?n@ zr=X%rd&9627>9+KgE-4i`sO2c`(+`>ekRsoE2rKgxPoPKideQy4hD^#L&{r#8` z!+I{PQI-+?)&Qaxn4AAwB}*0|F92D_Uf}haNTy#$#$|RTW}#R{Ob|-9%s3zE{INxI zI11e*IrGYWQeO2#Yp)C7tGLk!BDiTrbzUboF5UfFk z@@E<)^Lq46bw)W!4OP{jGEt0Fu{}nWk=TLaQ%_|XP#rDTMV7g0t8y@_hOyM1 zI#yqU55??Y!x;ALU~fSIpr1TmvCsnJZw@7}P`*2XMu2wevR`$EDmhmNS?;@I8~JlZ z+cYu7VJ1?kn2DohaMBwW{*k({9Cn*{WG0?b=EHQDVrfUH-Dp=#xK^XF^|?)1{k}N1 z@rqTpY%XpbQ&UIf%A*|MkIe=BaMV8=AY&bzo<85&HXMtbO;tFQtWp~a^N^xJE%pwr zCSz#~m=27*(EiL?qtg|Q!huM9A=V3WRN>iSU^h3v)(NYq=*C8^6gTig?pHM1hBk-Y z?cc%uw$Z{6EA1!E%?~IUm=66=1+mOn1*EepWMt@}*%M9iI$e<~3@*@mdF-FpK7;M8 zTd+KU%6fOa(kho~^I{;JFOi$S2+p*uG`7PfWC4oA?c`O-iZ^NNJ#}A~`J}4{j>NhN zZdc~2suf315H(_p)bHt_L%j`AtnJX%GI%7%0a~lorHP!K-sk{EU=lHOjnU^$^dx~s zHNQ_WkuC$6$IQ*2RjbH142jjyc9)RdoHKC>2y-AEoa~E$6(XlbM(>XF$&Gf{U!R-5 zPG=#rIhMN3`tiQ5>{-RpW?Tr+(<;<}jd#XKk|Zjs?^aN`CZxnT+Ul#+Da+bxLx)F4 zzAG)`<@||O*S>O>>h|}h%h#ws7&l>kJ4-b%miDrpZUg>KEe~l%c-qsdb3&9On;1P- z%qF9LsbUi6uPiYeI&ca~DvG9I4U#N6RtZm%Www+vD_TwJK-e~Evh8M8tSnH8SgFnh z;T9ztSKZfjP>uU?<9UFxTx`y8{S)R_bMt?Ivu-#c;p9s*l-cy~z~N6S9T6dZVZKI) zT8K1*K78vOvJLpfa+v_iF5Tn~^n(n@@04*d+pr3PhE`7kv`M?NSXk4!Ii=hdZVczz z3W#K|J(Gv;vr(8wI7$yvCF|-bvSFFw>^~{dN)`9Fyzs2ZbY1G`KX4hz&C1BqGVV;4 zDI4R|5>anyK;W}V(sl!>)kB(S8bv}zgc^u)r14~S3!hciP0gr4z zn~7|qjAV#u%=m(_QB-`fE!?e~Om8=z49!L~rnb6_qJ%}{`e@k`yCUfN=5Fit3zX(* zApDx@*^u9YBG9#oQ%l!wW})PuO^(wnrJ^n)rZY~nKf5tX$!XaRRUngD#Dj6KJH(=# zdKw^^tD66gSXYcrZN?D*5zIfSaUBc`@%+)Zl!jOp$(@|+X^|VZSa}Re93(Fx!*sH+ z-crc!9}72bq`u_{t>Aoc)T(-KX0Xm+GE8d)=tDiJTV`%r4O41ZDo9NSg zbXWHJ$PIi|XV>45kXp!=o!!70n%Au2jAVVt4V*eglA1NF;L6Q^QRP>TjVoPFTUTh@ zoTf;QQpTfGHpN8K(+-nTenV-E));dzmEi8T)lHBim|Fi*Y#HBPD76Jua*z(_QYLB{ zR&ro$L^19%GQ^5#EvXUQ=+^wMD39codiY|$PHU)eoowcoD;*1k5>QgoiKR2QvJvDi z#UJ&!7e*|_`D+Gscj&AQA!-drquCmbZh~=Rg``tNyckV`(E&`7MVSblE96C?p;21w zOOD64(qb&{Pj&Z2dXj9kuS|;M>{{NdjFL90N)nvDhH?v~@=wjp)pq+z z-DF2=lCG!hK(Nc)QDtcq=0B<|orC+dq9`|iKV3_f(`W#cPxu`kr9%Cu!LLm!haR)b z4X!r3($Q)|lpLMJ*zJ&3BsN4;bN*uY?WtiDqn1>fziN@?Z5IoL+2Zg_FB*o`d4BV)LW}=fl@e<5@ammKyqC>8^4Q?n@RxXrbA9i_~_s~XONyELl zOO>uEvK19|IDCWI9P+-SldNz$G&g0hdtdXkG`1G!<}dKE3A)rsNXys&=&lG37!uty zu1YI>DDXl;9(eqP629%$6JAKdIxmRduF4L_T+ty{7~3FQd!QQ5)%7Gp?NJTV5+9DF z0+Oe3vF_}I=wKx7bdt8!UC{k|6^4mszWmdKY$g3>mE5OeafPcufv7Kx>v3GrF0;RebkHm6lj&G zDwrlTzly!KMoodS;~1j=RgpoIio+6jfx=EYZs3sQPy2jq(WtT%yp5(fK(*v zaOG;oU89QZ($%V>GM(+D?eGb-kTlmb$2m#_6V3|9DGAQ(r7bHKoBau@w(G{1-?BZ{ z9o?bgauB3(KVtepRm?cnCxyvo?M5=w%YAB=ws5R#G#)g~$#ix+(|}xwu9r4fmz_Z_ zS=+GFN?_}uOOOBPBN=y5DsfTY|4r5RS9UG40#j6G%%vR)E>wif8x%p*3{i5}g%2#jT6NtZ?l-OAW_}Id;5Za85ubFfi2D2iICIKB1*Oq6}&}y0I4+VA7jn zW$*nL^spCqs*ghGS}kN#36f8TR7(EcYF}-j^%0Am)>0KXySWQhyT&%q?4bKoRLe|m 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

        WAFeF>vYd@k;%Z>2FQh`p+p> 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 MurM%KCmmFhEcQOO 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 T|_bSa6`rM~Pd>{U%?HwDt}CKKh+ASF)LG+yQ1 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 OXud#D&q8S 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

        Z326;+C;?Zw2YpE}f2jCM5H`hng7 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%0Ax&nXBH5)*lC`#fs{DJ-(GxLw0b$7@tSn* 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 X_ zzINv9x_NS0e5i6vwMuEJY>qKi@!}Uv3F8-}kaDY1w(23!mWCaenJsa(=^WDWtfBeW zY>Gev?KMuQTTp*O?czjb&D4q5c@*7#_i498VnV3789tn{CzaJt&Yt_k+1M6-9>xvz zs>MXvoY^zy)lR2g!#P!t9leJW@Aj zY|VoD+4b-bT3GnbQx|<|UBkTT_*f0Uj~fyYN?o2rCqNs2W;hk*Qe9664Q3fhF}N)5 zuS`6%u5Nm@c0Dqr)-Ij!POF>KFn3<2tdyC(p6b)#JQ>7FD03f0Y>^X6sa=?!O9pT71t%TRCZ)~OywEF4ukvt~~ELX??- zdqqwCG=xsfvoMPmWW!lX&|`z{hSbep%o{~K&y>d`O;J7CrjdKzkwg<}>$PaZ;9m1E zF_bYo#Dc+HE5S9sc45Pu`XM!Q=J0dOB?;(7J75!LfmU}G%b#9SIVV1Fr>y$19QR~m z)hHfn7f|R>&@fXW!7vsG&*3(u<+KTn>Vr#y7M3CzOHZv?>uHGGM>L6X-(gnc<%>t~ zyVIe2|9{+_2YeLO!oEkTA}Cl8J4n2uqEZwEQ4$g$fdoPo5ezi=l`>K9qc*Sfp-Hp$3jv{;!@8JnLUbOwokQSWDRP+&)tS5{OVHnXC3s=AW& zQWW8&yepVKqo#URxk*VW-3k3+de;zfq`L_Ed(-~6mA^=ql7S)1pw#A+m5r(nBEtUK zg2|(+Dh`|3xVWs_+1$|&s`2z0%t$6ynw*Kt%aWlbLvf`##e0vgny&V!yezW?59JFZ zEnRHW9Qlpix?QNCZ_Q{2GEWnnC1}F(Dr#p`md*{%G@xuss1waRI4F`MC)HF}R*tDC zpKThU8KqTKR0@Bvk6FX$CeuKp4RhgB52BU@p*SbMo4-JlJGHcGO1b{qZ-B>L7B$Tc zD?Fy&G{l1uFYA{66-)pB!HFFz2sx7`&73}y*{LZA{xz%3sVW;(IwSV%e!TsNXEv~z zx!||4RDy;Gx|$Q#tu@zA&DS6)sh?;Zndr)<&zPw+%;F#0PI1;LIjdzzjY;A-(#?P( zE?#7MYAj3?`jrey{WLTEiMuHw$~|vMnYNUbm(Sq8K8N}|&J$eE^Z_+DVf@gXM-` zw9lmvtq|z!1y!}>H4Mns<>WZU8~5w(%#2_PTr$WBB`Qfe)aW`AE(lRo!;eQWxeuMi z&$UoJ(&Y{(%<7tP`ivs1niO@`l!_GEonevTU40wnGIVs4}K&FwP-PU2(7op*mJm zP90;tw_nz}jocU!jrGUOWz{nooR!o~EichOM*UMpeoOVI4mPuhDfAWVoC20(qWYYa zYUL+z#?0EOC7Rc*`x$~!V`{Ukz9i)Yx&q9xY32Tmd3f9rGFR-gOG;|XC(W#>sGD2D zNO#gS`sM0r73JA`dL<<#xpU?WtSOydp3iinvb?4zpOsH#WT!u}=x&2zVwM?8N@iBg zuBa-TJhO^6sV=-ft6S*ks8#87|L&nSzu`nFkw`4>G*Gm`li8Am1jud-HFgi6a_W!>YyXB}#>)@^>Bk>GVYJnCYsn?b1b{q0lg%=G`w zllsUk{JY~2QSkrnE0GmZL;m(Ss49gTfWJKs8kGD`$6+txkTU)VPn2T%Uu!>?KFer~ zOH}RnGqK4EwKI*KBPts-)~l$RTpb?lHC(5^Ms}S# z_HdNe_29G<|IOWDM%@4Y^QR{N&$M^pB>YK_v}lCZ3vIQ(U+Aj=J;yYBhoHaL&-v|u z2sHf*0_i};cLdURH+)SX^l|Dp1tN9@Ulxei(eQnNh<(9V1|oI@-x^5Yk^04f^gW^P z4y5l)|N21szJ4XS*(Kfj7i8z<7Y@zK9afm_KP6dLT~fi*@!T)!w^v1NzrFM=iGEo* zIobNEhJQp+c5X3WG{`IFjn?P55fD7%-mhoBp0zBTVy>Z)ib5!+Cfl z)OL-%I(U$|#Oa5H zN?=0)q}&e9D;Qi*oF5szY$;EGClAZXE*g?oFsPt# zNL1$OY_<|SID5dLfw?(F#l=xaMi$}X?Bc@QyumpGBd?UBEDp&YHXtuAXW*cLQRhlL zWSw5_2WJl{%pKT2zkj~v7~Kd-KV)e3Aimo$G$+Rt`Sd)@Eb|RrKyhxtfa3h3$np_9 znjM^oweRGzxW6FIs9|zt-OSqZGTzmc^DtY_$>n>c25!Wse(^7>qKZdEODnl;QInOO z-BaI&7&|V<+0DC;N$u~gWT@k}a%Kcz-=7=`xEYNJ+=Lk%xFL-a+=PY;Rw6lWup(&# z2rHF3lCVOlZKxGWYfP!CD?9sD#uihP#p?j~Md+xPYx4nAro%~Gi_-1mi zUcEYY+^1K!UfsIslL@T~*E^%xfZXY&N1or(yItSWChT5T!^82j%7ec=??>L`>DP`@ zL#wuF|HNIp>Ibjq^?Bd(9^5(js`^_e8P`H zZR~khWN_KpsXvM>y4z6C+iA@D-T~&9d|Niv*Tjn_1l*hk!*}>;gzKMM-#h-5;M}*e zC&>l>j7)Gb+W;bez7jyt&n0zii(gs!#F0cZ1DhF>R`HJ`Zs^h-^hKV9D|W>e757e(dYJg$2c%#UBV{d7IL ze7U|?#HOIvD8FymQ3^BsYqwt|#~%;#bqW{d=d~ien0ESi;HRJPN|u*oIql5nXTscN zIFc2_FI29SFK@xL_$BbO<;z*@-Vx@W-`wd?zI+PP`uBj-Yg9V!=el)-S#EyuTJY-8Kj~nvs8%6vEz+K!f-tSq%xcpk;_cq)|o4Eb-t0bFm+Qb{mrl8lT z{L3c2l`yw#?)KC5c+W8MQ;70gK>WUfJ7WvC-(Zek4AZKEJAP&Ob%B|`Wx%!IxTtdf z8lS%mbNyBUr}#$2?;`vLZQaCse;arFUf}q4+rqIa=*L>3{8qC2fbE)i`|c2MZQzpe zOV*>U`TSv+<%SdO`-R#o{lLnPFuQaP{2I7WzuJN8mJc&w$AGi7FCFkZ$1uG0LsU98 z!|x`zM|N`i72xm?Q^KSyo2ADFi-8{_T$$#y^VS|@%CX;u%%b^s6WhGeFDx_ z{`7h4eFMff!}w+vzbyRj zf_pvR?WgvtWkD0KFPj2~MaHiwJBndO4RQNz&haO~TxvL5{;7Uk3zJji_B#^4T9~g5 zr=Q`9%0G=u`VFN$80PkSlXUD{+{9adWWXsuqx`<1!#H$Q6K`B;z$sl({epfAwClts z-ob1NsxQ7@s9$)U^PUM)UhY0`mrXqH`N_1qbK=kY=@jDEz;&`{8+S5y6mKx5M-uv0{Cd}C z;{6UZjLYvEc9y~oKPBGpc*D5-#uC5N;66Il?Y9V%%};CMEn`zqKOJ>_>&ck*^P6}V zoELDeaaf1*nWwNR=ryXo?a1fDVP+YQ=tiDb^RjxFWfum1wtjFB$FF};6R&_xp`o6K z`su~^9RaiNrAaQT9zBi6beLY31)Qy2)4y#w3FfV91J0E%J*QP+0@7vMLzgKv)aJJT>Ozqa^Y2zUK0@qTX_ z#^v`tJ3oMX?bdj|7PkeA%TM)fW4J#I>&n0Gx5xXbJ?IU0{vGc4sl9p_G~Vwtn0pLo^V2;3X_(y}bNjJO?UlgXYB-yp+JnbnIz8^rKc#mH z%-M#s`5lShwJ@EQy5pzvHxlMB!`b|%;&&p<>L=WOir@B6(l4+n*!(m;I2dO0XX5<^ z!5n5do8Lq1I1wi2`FOutn9B`k^Sgr`cfyn|i}yPh=3&Fx{1&p~C72Umar^0~h3|uT z)o^5cWP3G(9q+*mea-Es{;}RLy!As=f24K2)8RgN-R-9z4BqsOCSDesf-Qb^?ARUV zs^xA!rT0~sHHNeKX?*ny%*eOgeoF6&hEeNDuwI8|tbUogHS!Fnz-#+a47G{@^-F}MSc$m3{v-xd9 z{XHJ$%1`6{UV{0`a5le=_^pNM@VVP>0P!0Pb7l$`bv?8m@fgg~FWr6`pZ;VR-ufZR zPvgly;5Pm$-Y>^6EoxIyMTT+tb;EBo+=<`D``u?4 zmtRx-9))}SyLi7J4CC_qm7TxA{rr8r->yFdjLYu?;@1=Iz8~ZLJ~NEVZvuX6;D)b_ z_dDJ&F2C0Jod$Q|&+&dw8^-0gf}JnH-TCi$zmE*#^3#0g3%Iv`iT7*sYrwet*0OVR zxHiAV`}H%7%TN8=Ah_dykN3OBFfKp!zYoK0?rBBde!o`j%OJz}ATLqv%L+ap2Dit0 zZa@7ui&B`23`aB~{a$6qRWP%fxcwBr8w|r+KSae(>AeH4Wiz*5HV%CZ6SzgkFAu-N z;T~!3_M45#H!xFLB)O>gt);!c80PF&0q1(I;18G`HVinu`hKDHSpJilHyEbYaM(xY zv*vjx!))3n8NaCYoPHcXz%ab^LsUAn&TsRm^WkoS>9ui^i}E{?;yx8-;hm(u$9;oCO#Ze~+x zST_q@k8RlZF3it{Bikd-yOteIwrlGBvVGvE+8%X1$)YaQStIId(U+|n0xZcJWeI+-!dlgUh>aYABg!#~LF265f=I6Nm z%JI7iX5;<=r`M?Ts=n$re%~DHU*oX(%T#6z{zgE zjqo_lFuox#QP*uVPINKctyA27y6^nHVO)OS556%qYXz@)n1z?}o=R9%oaq`Tfei?l8L@=k`Lh&gQ519RoA%c(+_SE?FY8|c%T!+)# ze*XG~VK~GOQTeCz*1{bz-|eSy;;k?%4QETQ);GR_`S5hN-;Qvboe`hjrktoZ+%s|~|jKSZTh<>d^xL(g*i9R_z9Oq;U*u5y10%(aHI z`K`e3c9=6Sbo;5EKV}%-`XMTxRj!u9J$I4YuM^zwh6&uFubcd~znFEsOWb~XzIXsk zo#AZh)%~NRVa~YJ?Wg!HHcVXnK7f1eGPmCdOj=ydc$ZC~VcZmYp6epwHydW-E8Twk z;gJJ#wBc-iT5rD$X8D4^FTLESkL!B;llcN$TKq!gRQWOuX1?JV&P3L?37mI1}cg<3u(ETl`kBqa#eq+uZS!-#=h_8_wpJjZH4h@prlX#^U!+ zn4b;D*Hj~~$9U4a*WIjh-4pn^%GDPz&F@W~H>&+pIUTD$hAEN8Ok7vz4n$ zVQw>=&99gp_rtV&Al~mEFue_D^UGsLF3iaf#`|3hbHCwierK`cUoayciuaoVbG+ef zejV6xI?S~XyZr`mJsyW?`AER&HL|^DM>m+P#{TS!WVDoE@-%c<+pNjVz4pU}0o8LR^sDc^%jN4E7JQe0v z!-`hp9E3=%{?r5aLppp05Xfu6#Ki<_5#r^5sCz^90QHZzSUvb>0Gu7SyaH|ZBuu9S|+FjuE=QTdm}i5`Rb_`Uda z^n0K695w}8{;3_B19O_;Z0UFk?tGYoS0w#x={N%B{uC}M9od}db(r=a#;0Qj%xQ+R zr9<d`Md~bZ3-8aUiH)MKcO6a8lTS#VO}(xEuTjcztu3=tCH!BI`5I3w+7~` z&jQYNKVIKsp7A-?mrcQT-j?jU(J(&9OVoL_o^vPMi?bDcJnfZ=C^i z?=Nn@^YQo<=Imbs&USq#P_DN9jq&{-0cX3udfxU6!zg|VQP)@Z7k-6X>8}vl*9mWj zYrkGIZz-FCEq<4g-r?&v^Hw(rI9vSmea?fLHuLJ(6gVt0exulNG|bD*0#2{VdXy~B znwK?g-pm`%reJF)wZ1U}roM&S?>Ic}g4wfWz}f2gHJoS$%w`(~TzYzw^}I8F$H81{ zI9%h;J&)1NSP1`i{?%OEpyvcmgd3W5nnU~L|V9V$6>=*%aTibxs zYg9hVZv{+~cJY2~U@A6o`yG$pr7+uV8gRCJey9n*R{+y~i-2?G^9eB58_t%`Dt|8; zhPQr*svjEvt%CctgF78N;IR9a&AehZ1zY*ke4z~H)verq*?2VHx|uhSO~K|j55I9R zA8zCJQ+vPJwgKZC@)DI^jT8IBP2SG!*Nx*ZGK|Y_EjyorTfDv7?`61eVU~0ZIQ9Ec z@#{-Q4D8g*JFat*iz=sDFK(LE%^3j(`S!l zI+E#4wv+N33v-g;Y<>^HT>>+vTfAQ#%vFZ7`Q4A-y)aeX-F|xhbUw_(hO_x;zV#B! z#Xa19O7DFz9~;i*_Z-~MFiU$z`IS|$+Yg)Z`Vq`eDO^^c|Fqo zw%)6mw+EX-LpcbI*W_0O)2Uay-$@5)-tRk@7X1Rw=BN1W2=lYyMBA?KuG!7J zeryUhKgI80nB8*X<5vPxYdDwR*)XO3?Do3=zYT{s^Zv=Epx3DQorT{kFq1|mxv2cxmE+GhjQkX${8XM7!(F5Y z5D9vX^6Sdy&lpCWg3a$oxEDsd{S-fMOu*=^g3WJNxF!d<{j?sjmtlM}i(g;zZy?-p zW8Hqb53$fNF2APuwK=ev*KVBKPtV=t!b~(Ahef8>V@D-S@t7s^?maz^pHQ?0VB+Ka>ox%^DdA$kddBfSxyA#|Gh6#?0KJN;4Zd1Yh zoJ~Qm$@3=L13k~b`=P9ZuqlwN$aJVZ9RbsSn%l1jT%BQf>xZa((Rl4TxN|DqeoF5W z!vt>8@ms;pFW{b??)Fpselv{APx0HMs+qTSwcAhkt%_hK8P1h|(_s#t;r3H{&oqoH zek<5{FWd!(x&3r~pMv?&aIW}$3G+^k+fUzv+^DvhSHz}Z^IOZl17L>Lx&3rKjx~(@ z6r#$@_k4ag-1RfvejVZ7g!$QUw)p)D*JM^R?+-Qwy++j!%?G>BW_-`4U~8|mUR(=v z&>Xj4Cn9t@%x!Z6PV041>CLCz*yiwNUfEFrXKSz2ZhQi>!O;O{Yd1b8;@x4kJ~rU= zTwc_9*Rp%P^$1%Qv$A`-3_&qFOuGRm|>>{oZ7#r^DZF0AH$q@ zX299fTg34#&Z2#0Q_!pL7dmeX(t8rj>E|Tv z^PXW-aGm#8m?oDb{i4pRuh5?ebL^#meKFCYdc{Ogj9q!}> zNx$TIll{T~xCaaq=l46@>;H87X?)u9s%GBUs{^jBC4MW&m$fj<+izXt?iS^6v~dTYIJZjpJc%xXbOQ{_QQp z@YWAebXY-rSj-O#p ze8laidUPMmTZXgwdF)sTv+_~5pUPkR#m&5FYznsWr}@V*FvmaU_RGQJ9+)2uXY*SL z*Xm!*ysy|4^cq#)G(YP2c)*BLh$_#D-(0w(mbm@);rQEOJ~bSNMfxfK*1)V;>h?R5 z<2ygW`YD@&%`cA~H^Qub((R}AbNiPQ?RACH9Lx7#y{uw)B4L9FwYv!*1lxn_Zdu^7u~S-U#mY~^4xJof)8V0=SfqOP0f(<9*a|2kmx z8kNr_oOcGyi)#XIZ;PM4H}S)FjPHL8xb*swyl(&C_{V=DU)U5lEHZxjee~a8cKmn1 z=`|{TY7Y)D3~&7qmEPrC-!izqzqX2>4_ zXS=@o{lAl8u3k?>@Vnhn>FvyUKZ9xAB;YoIjY{tfPPZ7Q+XexradFZw*v5aO_l@sje%KYIGf*C@@4Zj&AsUx zyZw~USHf)AHsEaSUnTLYhIzZ4+wW}r+HBI?yMj$&BetmYYF&PpO`ChiZRYkJ*QP-o46TJY}W4n02GQ+t13Q2Db+#?<1{k}0woZs(ogFDCj9cdVs zpXL>(!nNNq-Y?%UaeiaqKKw_#-)1`njLWYh@!J8ee;2o() zIJoP&$NMceOq|~*a6R^n_bW4u%TMLG2JZL0;{Cey3Ya**{o$V3JKpbC!?^rZo?GqH z+}ovhyx(}k#Q7ZxcWNKEpZbr7U|uvF(TJ=c>ObCu*|u-I-!PbohI9EK`!24RHIZ{aXn0g5hlKmHa-0*?&;H-wc>j4QKPy{OAgpPx9maIuuaP*%WMk z8XpXVIdq8IuPYvx8OAr{C8|Hyea@%g?k{xvXFvq8GQTeCw={+!QMhAYj zdE-d@M#5ZYINQAEOZ=9=+;M9~V@ zIRkG0qmq76^PZbHeg@1|M+cm)N0i@L?4AJg%?Sag{7d?!r=#Y?=HBIO3bu5d%Dxw2 z4m>Huh32)I_MQfF^8A2v%^QD!>2P|$+2)N0aNcZ~3k}y0ztDNLe(*F*sS-}md@w4# zT31;F^Sa?0%4z7jX`SMGm|f2f{A~5NFW0Rf%n|1VoZ^=}Z*sn>_Wo9w#fIas$m{kL zJD!0#=e&5oB`|Lo&gJ(3%#9bg{j@&!Hq08s+59?^5x>A}eQ~^B5zHjRx%{TXoPKG% z-=i?E8P4VRKFlAN$NP1^qPaJSO~K_i9OkeE@qSmsJYYDRpT<{@!?d_6-mf>zFvHpW zbUhA)nR`vV-_0~Co=H9?N-F~_rb6`#}oXhWAm^bcn`>7w;;O>CotskPwO9xK08C=(e zZa>BE5SVJi+2W`1>0Fq{?s5C6pZ?A;LF}T-^EUYX0=LC|Za4a|lQ1f0!JP%%81`gm^Te)^Sg}rt%f<};lM9_9FgqbYVq6fk>=jf zYzhtiYN($s!|yUNivupbpHBKcjmJ2c&W|OzsPZzF6CDNf+LC}%xk&cE$#G5=pC7Zd zxpy_2f^EFgCgc?Z4F+?&ScI= z-^zNcxz~?Pp`pBl#$hM3?_ijfhEsWoI`1e7@cwTzZhANHv&~b~FD!@o!f>{H&SJ+8 zFk8MK_}TLLD*T4PtTvo$o>IM{xp(D}>>-H(lWdn8OU$P);M_cP7lDuiSpkh|p@7Z@&(>4){lv=NsTY z{D$?HZ{2?CFCT(=^}B$x-Otl=c=Nt*?oC}AaOv%MvYqTqd_IS1^K-y8T#rz_R6g$o zbFkrT<*GG14ud)B7k4^3;&(gDi-xmZH?42H33KajZa@8=%=<9E8P4U`;&<-n{o(f0 zc&!cp4Y@O$f-SxJKiYf43|c?nZ0*oQB6K>;*G&RW?R8W+_y+FarY*dp<^gAGhxUX! z2IlS-Zog%4om#f=)@U%!8Y_{g%UZ*%W4Tw_iKB9x%D>-G2AO-3e3C!R_}o*Yi@CQ@0E_+x_2p__g1v zg?Gi)Zog&tErVIGjoWVyeqFb1;a#(x+fV)X>o8v%j>96$UpIFA46}2`c)x>S>I`S| z>&T9yVXo*D@3#!*GsD^ZG(Y+dX7A2{pI(#WzvOsQ={*YO0>jz-Zehm)n8F?7{my~8 z*>E<$Vs_jE(`=`BzacPXhO_zUdQ`z&(Iwt*CCqPzv-xR!-(u$$-qpLf{kA3lK7(n# zYrxt3`m&=fOkvk}zjI)2H=NB+<>djGH+PHo+kW>JUSBo^o1g02K$sWyaQo@G!_B(2 z@P@M~*!q3lU#NyD=^k*l_W4S1e|OAw0UppC7Xh+pFWy> z!(m=DoZ=VN&**u__4>5%eqd9urQ-zl?X)lDo-M)I{N9Cmsc({ts+UJ#(qz9D-qCCd z4e1DtuN1%QU@qC;?RPBPb1+5y;{9gARAjsT#^84;%$gJ~D!ti6ymL+qZ_7T^ zFH1O4HC)f(Za>Wz%3)47oNfHvlpX(sxpt)6Pw{)hFp8T(RQ&Y22CLwfjB@*JN;-ao z*81)Of!p6#--HBFnw}+QY4XsN1g;Zcmu=4QDH-@_QKO#%XT9 z6>x9EEUFARTRBj_wc+#@-gj&Yw(BvGeLGfBkJuD!@mtHj+hMM+j`w>LX5Sg{ev@Dh zI?U~->w7xP0>jzb4VAx}U=FWw`wfS?1?D%yX;mVsyr_ZiUE9LzUFY^w{HDPiZ8%%} zR=~}JnL0Dx?-H0>4QKOHyL%tZxwG7UL*bUfY&tvOTE5FP|O%hUtGqyk8y6*@m)U+pTm4R zFWxWflosA-HU*oX?h94GoOo)y-+eHv3}^FG{{0HG&3w0?#)(4><42H}sP<3e_E~V_ zPLKDSZy1-K<`oO!=AYsA>k0P=%o@Yl`Xi0Aw>*>apt z+fVVE4zs{;w)km2{S?eY=eYe8zpo6#TR+(1*Z$lV-dAi2w*GuP`#PT2!aI^J!A1EM zGfun>=JyK&&NWUPdlB`BO~E!k)ja-em`@F-_(h#p>-Sq;%(}{@@#j4r<_g2v&fA1? z{}9Zhmj!;d`-2PU_;N01JbrbOORks9QPTXdE3cETY2ls0rqGa%(E7ps>{|>o=h}d4 z$=^}w{ho+F1@q920cV>BbmsV7Zem@9O`)M&h0d$-#!Q%bh9mir=Y5sW&w-hIb21&t z^d{#~Z7{e9=Gt4_>Cn2~4=_jF=Jr$kZio4o;cW3+0rwotEw{(}y$7?#a4x@JVBWsN z?YB7wZSG|K<*tC!Yt(hS2yUvFg>FCn9#0RLGQ-*8w~QTCF#F%@_S3w3hGBT?hp6~z z{C6ze!S}`cooN_j7n$Bw>|6jh?|!$RuJ3~|&l}E`UX{N$U~YaO-tS$QZwzPiTY=xd zVcvQ$-mmqd7T)%33NF8$VK#Wk?WgOpuVH*cUZSqY3O+A{>-uoK-yw!^`Ds2_4R_EZ z@qVWp#^tB$dj;G{kGlP`;qHf7Yq*AXH?&@?{nTvYyzq67K~ zX2`RFpR1jG0OlRTx!TF5&#_L!reG@v>i0Xr{A@T|zp8Su>+^w^{1l?nq3hNcuFDJV ze3=P14(3I}HKZey&szWc31-nUx8F^0t6?sDIp9=JqvBV{?$NI>FMBKCY|jrBas1wI zxA0D2Q?T`e%9nc$AV zHvndY;cR|KvSU2V@~_=~orqtnZz%U{3by%W7JmI;CasD0J0Ip=!`b|FAL1F97rt}* zseSRj4;Z~wh$=5?U)sSn`yt+MZ^QUz7C-fG`EdLE81HweVdDIbfSdMHyx--9iSxS+ z?uxbXe#;CK=l22JOFzf^HTieI#QALo*Yp>+-7f>~-fTR+&A^0yl1w_n|Us=s^u z#yTOJ0*6JG7mbGsVfOqz-fuF@T*KM?R^oR&%#=Uee(LuxhS|u|j4@@N7wY#n<3zn+ z2Co-zwsFZQJdT7}W;k2^X}+))=GFDxe&@k8Z_?7cgiS%OQT1&VpMMVXa#Oe832;rD zwe;q(DcIJZHNRW}Q`jQlT;sn7Vcs=dLwZB=WVIX3TDJ7svnklFTT^y)gvr{#osK*_ z#=u-+I9ob2o_rnVwpMPx5pXMDdTi*9-#)~zFHBwQc)#ml)*8;1-h6hf--dFvQM})g zFfSO+=2y&)H`z^rlHkhH?y8ZSgPB*}OWVnWU8Opz| zM0~^TT6%kT4E$`@L(f}Oz#L;Zq7m5+slJ^8Q`*Vxr}A>HVR-9@sPdwI{~EaSc5wSC zeoq)CaEp$gN5tQOd#7`}-$q#hGqPj?8+9K+f2PxIB|V50QOXY?v;)xc!vgafXqf zLR5Lt^_T%SXV-YYn+y}UMf+(SyBKa^SGV8haGw~)<+p;Jzrek{o7+$6ZL@p8xcqcI zI>T+hhucs0b%(=L8P0V*=D3aNX7~c9JDt;<2oAhbvZM3i3uLE4RVFI`4`k{(F7H(``x8D|+ zoN5@C-zs+g6YiA#+}t0+!> zPc+i+bGY^sf^*yablzQH#>8+s@1cg_tsiXhJEIYt&U+W!dyP2nw~g@I6TkMQtoyJj zs6DX7Z>nK@(80}bBzH$6IHmVhaTDXO$7V3ujo?PX)Hi}V4`y);w~__FS7Gk22;x_v zeDR{o>C4kwdcU(NxXRTgRV}^!*<4&9J4e7=VK}WjMqM{u-?v~kst){Y*H>IumDlV6=-d@~1kQ6ssB8o{ajt$=HNnEQH& z>j+aA!zmpT48vPLM5R}LC&1kig^cuw}eswSl3};J+;;m(I;cVAKe(euu9ga=G<#z#0k0S!k z<#!y+TZU`!n^;@xpTNB6yx~yqbz8i9P1-Qg^XJ`12IoxhemMwnnqO|w2(AO%ZjIo! zfg8{WPJX40;PiVaa~sKB*a%MXyQh)dOO4=E-&Qw*+YGMVQSsNKGu)1i;B?;nMsRu# zs3t{-~7c;?aZ*F)Fs z`bKcQ;1)H4(;3$^f>Szv&fqfBq55&kG4bj62i*0I;99{w-w198xHlTXX?^_XMsWFX z?d!wo$V{)!dq@UHdmn1odcxH=f~$kOJA=zSuj04UvGMV{0BxiY zlEG!huRC022AAnK1Mcz+F4J!}#qap|_)UfDlfh;Bsh_zjgUgJc?l0Wm2u|hd#YS*D z!hP8YPVH&C6XMe=zr7m4sofpd2u|%Xy55QL z`PUk5TezJK+c2LA)n9RgU`EDpo5CGt7~c9JYMe8lJtt&vndMZ!f6(@%a5^%%Lb!2_ z;8d=z%iuE0{TR4sGPun1{>u7a$CKmZr+#6ZQ^H*4dFR3P$>1{2yARyIGPq2?E^z;D z1a}DB4yT6Wmw8@~^wu|m>x*CgX<@(2__d|LJ(R&^o_BZro;xGnufNip!DagW4%he0 zuwN#p_P)GG>GuUuMSMy&ppGktcPcjOoES)p`ev;GtuL`C%hSRw2D44SiXN#Zi4_*uN zLb_jM{FcM4O6M}-r{~tch55s9>Fr-K9m>CL&u!`TW>aX0pWjZVb44%}VJ?)L zY{eN|W<3%&wvpU~Msiad!Ks|i$l!{zch4O$Dr;=+=tSD`c~cMflwoz>N$cJnJ9gY- zU`|0{!N8(|kwrP9a`XG_P{Oe#BS+;G3@a%ZIjrP>g1iAGBZ~**77Q#HFk<9>-FApL zq-bPr$(R8n_UqoeTjc(NQ3FQgj2bqgByT|f(Su3~2aFj|xL=P5rx7!&>MEv}7gkKH zDXp2iUr}CJN#5M5(&-hG^2#U9oWc=#0|w@dE*w=@(7(?P(`#oGaa7 zipq+ae*-SI#J{sjH}~sIHn)Q&F~i^~6KHK3?B;>vhyW zm(+0K9{Qey7FA5DsjjV_T-UM7h@CqQn?X`54zH-1!s({ZsHiNbJ^O(})QcyAMr?|2 zBJ^S?rKbTBX_&|Rk=`Ib4GBiah|#FOt%lZqSg)?Uwzj;cbW&ZPKDpJE#ff+iBHo#w zc-wfJv`sy6!UnD1#M{{0u-&hJ{PD-E!&oSsT2V`l9MIu z((FGE4X0I6)hRU^QwXQ^Uwjr$tBz4xcVgS*Z%XT?BwjUMvpHS$+KR)=y|#R)h<`_} zPpmATT<5jp6ID=sQdd(kWon(DOSH&*s1Z&gDB8*=rM;{9kQ!UBbPYmv9rbq>T7ZW0 zO?j(h6Cs>$r?6vGsEp_s`RiJ2+Q@u6I$Ui2Od;WX;c}w5gv-egK2qi}^36!EzD05w z`*aNyl-^y*0j&b9VY`TJkk>3xCrV1nr%o-cDx-d7^~?9)UQe9hlecDZ+x@umms{3VX)oqX-Eud|Jbmo20Dtxo`NS%U%qK$|>s;t7q1*EZih<5mbP^tAp4n2CIN?ra)Is zte!))Xl|;8UpD3inE$GLQQ6QhDG~=i4C5o^)o^rQbR^1q%D7jrk^X437Citx8y$;Y ziynyHfsR9;L=Qq=MaQEbp$DU1pe5*PbOIW#Yx<>%8`x(nd-K@;Xljv3DSJibHB-uK zoyBfA#jZGKOuwvAG}a@^YiCy0<(5`fPAr`?tw(mrPsTNK# zb#NoEcf0FMG*;HDg7j|pvibWd{#J*~pGxCY^RYx}SAEjTE9Kq~m3*Z9s6unlYLs@@ zBUbej&>HjzlsZ*^5=zrhKM$RWE<|UcE6~|!xW06t^Y6mG)@%xDtGjr~w)$-Lzm{6u z!u3Vtl(;J6SB(G3Iuov!)T43U+o{Qlszv|bCM~P`|K-GWQ#oD3b~g2-Fw}M=%5w|K z?bhqkcIaaJ&4+43B4jonuckB~>LdST^P!$ctigtlyG2T#D|9a%}x>=;i2G^eR-pV!(K$eg=9SdNg`H zdIov}dJcLcdJ%dPdIfqjdL4QTdLMc#`UH9#`V@LQx(sD}Q~xe{7piaP-;JuQ(oScz z%^ULhO5)s}Sj4_U(SIY1_ z)HeQS)>%FOo8~?Ko95mBo90x0wP_2vrei{Fn#zIt|9`WuQzP57h>PU6ZYocSkSJHI zLYO&72Wop_aFjL&*@C8^CC8n}m?P18Xll*;G-xB#tkkKnm6+Ypqoi#(LFy+@=eJsF($qegNli_y-_RwRJ~f;E@rg*K zo==PL&j#ny08TBtQjtK_gf262sPZEaOoPaRkJP}(JL zD5?YuL*GS$404zwLXsHTE;D(C;7q#>u8qEz$`gyZNttwPOkwW!$Dbu zhJ!O159;H^Q2y9%TEp;EeVHb=X+z8{`A}m%&4VY>+LtuM+3))nuuC)S$ulb}{So0d z@QHEb?CKg0sG5|FUuX6{$07dsw7M#3R?@HpU+WK`wUD6b`KL^qlxt4ku&0#CdfJ*j zQSn}8Bj`rJL%@o8GSV8crVe?}qG!E^U+69{Zi3llrf0+FSG`I9G#0UL6w%JDCh845Aes^PonSf z_fzO6C}ZyW@6cz^^~uKPP^}Fx2Cv^9eG%OSW&NOjAM_=3fAnQE4}Aqa0euynkCM&x z|3u$FZ$y`)ccO2iccX8ii_o{xUr_S7z6trxxRb82td<1^o!^fv!aNK|ef_{xoN54gDQPNa@1o}OyHt7d6JRWmh&pDSQ0=r|kaspHiKRKc?4Heg}v8N|ifx zkxS7X8#%|aUw*&OR54D3L~%|ot(@?Ca*~y{aI7|0edcNOViPN-`0Euxucf|2?OAoQ z*UFeiY2~6LoNZBMH)3*Z5G&2*5o)QZ8_`~bC^a0i33U|Rr45;w*$NHFuNN%#1Nz9rNlx| zl2Pmvy}e@UKfK{*Tv}9KAR7Az7e!r|`qJ5ZGB}wtsd8pnd70k@s?SuHUOTmBX4SOv zDt}!&H9a!vOCv;(iF*4ClZA06Q#pDd8ADLKHD;1Yts1bBiIvq8Gft}`?noY?E;Zta zaQ~jeQHKO&Pq#Cha@4t|STR6Kbj68hfwF^SDOR59gZiogyw`tKQ(#@%pLcJ74&`sw zwEX!t{|&nyS8pR!Yw>N-bI^9^wdf}3UFfFhW9Vk+Q|K1x3Y7Z+^{db=(a+JXQ1uI2 zqk9mCZPD&%XEYDZLWiL{qLa{np!CTeeWJf^wJS>B=kcp|_4HBRZYX_`w>wIry>4hH zv^%PPvQNqkEx6XfL!B-5XUuxi9(%%H^+r8Ql;45T);}Uyb%de@AoBR$ME* z>bFF5(Jm-`bNwFZ0902$A03Srpa-FY(aGo#bS7Geo`@2c`rFW9sLH@_^igyKx)dFW zE<;D5@1vv9uhB7R2d?9R=yvEhba(V1v^P2)%|j1H2cjkD5Oe}M0iB3eqLa`g&@%Ky zv>ZJTos3?IPDSrVE6{L%uJu0dv2X(_2;u&`CHs#_?P62U3&Ga)gPE2D)-Ed8zIeZx$y zJ*@2>e10_-xT?BJzXw|~y>v#y!*rTXRZRCM6KXCu1O0hx zT4-(!=pjshevs&3{28JQQ=3GHIf8%Z0b@I%aod3Chn&O zv&*36(*qaZ!q4-M3SN}gYWFtc&m+y}vnkig|G8)mdN^9B{b(_I6sl7njh>DkgPw`j zqnDt^q7S3Tp&y{fqaUM;(f#)BL{!)IBs5%qKIijWV3o%T;rgTgtSq(orqmyE&!;%C zj?OwbbJDmqN}gv5DocKPB{?+pETKyBm!65I75=_+X;8R^Z4vo+V5r_H?{(doCwaRx zvff4KgkSS?851G1<`t*ZJdLdyYF^@2n`&6?q|!1SJ#EN!FtHfVMo=x( z&`r^uT~Ssy)o&v-0M#c`)xrlulGM>wDZ9R6BP2#!8lCy0M~(U#DzfVFTAvGEbnR4+ zx8ct(&FAx}U%H;BqutRn&|c`7=zi!~XdZetIs`ojRpie_r=jPehok4Cs^1r&*Ps`o z51^NzFQS*C8uDI_D)LvLs^3?l?a&1%_x!wT(BbH{DEHpH>rl1-*P}D%8Sr20*W)kt>;4z}b>kwb4boU>c&H81byS%>7VX-|HYh#E{kA8y zC}g%hc~rtgudfQ-(Dta-FX01C8vHuPtU>iqEkP5i)dbHCb@+K1{f;zTeIjd$>VUhZsMe`I zsrS=^Hs%48hG&KsklsX4`ondF`KVu4HbhldTBE8f8=`kvd&rMxPj+XlSDbyZK&z zye9_BC8@BM9N!OeL@O2=Q>k^=v_^?8`BUuZy_0`3e@R9w*zaYLy;|c*tP|@wN8R7l zbBH1px(Qi=JSiLo98TvhXDEb4+T9Nl7%G}cX31v>_ ztwov3c|W7~p#MgnL4QGsi}xG)9m?8q{rcq3AE@q8tw*2P0p(t7J^iWI6x|VRj)wcv z3B>a<(weAQ;lA`X_KisG)l&M>k>z!xN+*tF0N$wH6IM?b2G3BAP4x`*l>dQm!}E|k zlCJP~FO^o67u^Hcvyp96N?iQbNO_eAi9AcTMiVIhi3yP^aYJjQ36X{?kMkXcy3&an ziTU+K132Az(j>`miBx-2XF91B|5XfBo(YM`RN7M~YC1FxJD!TI*;PqpMOC@KsH5tx zPlFp={>Kd~Ai-MZ4S}!!s(eyi+l0Ro>D_^{qrA&Pb5P2Yzm~ZZsyK0n=A4t~1M0U%d!jp`d!qZGd!hTGz0hzO zuA>fok4NHqEZS1fFD0MF+=%^0rIxppGF((Tt=v54%cYJj$L7JxLFHBDH5HS_u-Z{w z6Mj?}pVTjG`gaPBPd$C8xc@y-V1D+$AQIjGH$);ae%Xq0F(R~XqOwF^u6tNsuST{J zp$q7@6Dp61keH_=+li*s$3#1!CZM66P!$%QKf^4X)KVzDt@t$c-iBI>+LFoK{SI1@ zv=tOJHLdYXZ$*MNR6QHuug6qY)Z&}kxYTo2RX~Cwp`~Q|5JcZHP!CAZ>E;2a4xiLI zJ;!Hht&_$k_w%7f82(Iju0LG4CiSDl!fg7}X7f1W!r*K&S($po+_XeYf#m5b1;t?r zcU9Agi)zhb>{RcHHM~r^}my$`-`cqBVU9MJwv4<{3qL^ zzUbSXFURNmEvoC@>)#a#?l}Fghz1Rs)`4{|ApD&#T}zcup2hR}tV4Six`uw6rZSNT znQdA=l`YYxX~NOars?ro;j1Y|lO|@~xz*!68n$R0RO=TV-Ke7M1W)3qfhlHpdV7|9 zQ0Qx{D}!jM;Zk#IZ@3-={AU1bj;E$Xccv$E$3Lxcs3W`58iR0KpnMIt1rw-C%Ii|J zCt8MTK2na3LV32)|9;6-RP&JvRFUCPCx2~h2Kp9%ABL_#YtS!Ho`Ll1D9?8IYh<%f zwH>ojt(DC|cSh%;d!vV=MJUfq)*pl(gZg7SbTWS*kJg|kpqi(ggsOa;jE38S(>VWG zY>5z_ADqLEywt%>%GfHmvb17)|LQr7_$>_X1r1Jh2@R3f$*Exua5r%)3ia=_WL1>5g!J%;`>JjYa?>bfxR z@%C$E`ASKyU%+%t5+QMIk_9Yv#Y;~SHWV<8c+}3GM}wwEXLM~cTU(X7%%!Mc73-Sh zky<*^eR_=pwT@L*URq`zDb<2dS3cH=ui@i>PqxZOkT+)piBPMohBm!bR&{uaPaB%w z@F3TZf5~*dtx=XX#v6+3!oXQ+smG&=sjcvEBxS98+KP)(%8SaM+6s!O zH{X1IA$4D6@*=bkdNHbg=@L}yWS61S(92Ps{7O{UZUK5R`cL#4^eXfQ^lDUB;2Km} zb}g!Gz7Ewmqc@_;R-WCj-vPY^Ro>l-YQ2nS6zdN`??lf-??SIY??$gf z7os^|!n+r}AH5Gv4~xT8CSTUV}b?K8HSqvbN|wjlPXOgR%zbJ&Ur&=RJq&`OW9i4aol&QSOg<%g}I} ztF?_g$fLGw3hUP9P6~dFp}%H+@$If2#40dPD|YJ^+vfgf=CN(=e`s&oT+Nljb9Uva z%6BWYU!&XHwD@FxhCTwvGRpKpnXmN9mUX`Tlxc1&?X@Est8N z)CslPfy5BGVW}`YDAqj+wL@yIYfJTDy}wRCOUK<_zn$PziJ&}FJE3wo-+cH6(b9~+=SF2M9SDib4;x?7nRmbsi=ytC;so1q)t+UDJT_Ya_SjE zgOtDQEDht;wxl^+wv`XMCb}Py)5x+NikV-w6YIFxG>rF>V~W&uYZak}F-77b!hI&v zZTeqi^k-(lxFVxOs#i-L&8GIP^_*CRhmg2ym3YopeXV*qE!6}wzu;$q68C{r))GPa zp>o@r4=T-vYbZa;qwmlh^n0`r{SnnE*P^GRzo3_+zoP2LenVeGe@EXz|3Fuw>oxW2 zKSS3?!{zc?K4%D#_Uyq1{N0pIeILJhk#P-mjF>Cg`Zw|#7P3H>QilC&sPjgI`rv0; zbv5Fzo9<02?-DD4!Try0dy{(Mw5G=RN`= z;Fo-uXgW)RH9-}@hL4hKf>Gr`c^fVdt+;N=?+ww-(blL^&<0ic*a*!>H%1jZe*e~Q z-!?^$!RhwTFi}G zBOA*EIqmVUP-C=iR`k_>p&31MQ1-Rn8J-U*e^fUYvgJ0i?58B=Kk1hvJIzE%_a`pQ zan$yNJJQ7C&7pZuLq9r$v?PMkr}DQUYMM81Ys!hzybY>;bX!#YDBq>=%h~p**iNY0 zwjI!Vv@<#%%|bQ)-Vwb3{RbLuht$@%`p1XZf1tD6jjozjRXw|^am6p?X(xa6wItO# zvMl~5_VkEK-}7wY-zL!K%G(uedFxc3QX}-Abct#~HOMKKa;0&ij!A@Ydv+Z=(w?%;XwQaLR~52YP+rrxl10NdDz-4K zvuDGY>S5v={$7;QsQmqiEq|TLPLwNT<60_B z`=cr|{ZN&e9CQNOA61#jMO9|<(38;tsP5AbM6W^zq1T}K=yNFF>#KhWEkwg*Woc7( z5RXI{xmEgoBKZ}jUfYziqOr}uiYYT|%5zKkef;W14AUtoX-}ernw>x8*icSbAI)fM zl)kQ{;U2W0k>w;a7Jey7%_cP-K}dXiZf(j#Y+7_mD<#YLAZ@_q@qulWO;e$t@m0{W z+X7IP5P#@i#*oqY7@nqo1R1NxRU9(Ga{yJg2X%6sjX9wSX7oWJP zUOSy%5KlGI!+45t@Oz5paXy_{%f>oGIX~BuJV7$ydJy}`AOXs14aXBDkbFwJ*hk@? zPu(GCTKAASrP30WHM8KlsM!csST*ZQbxs@-XySX8tAeQbN2yM#?Hk8mJh$hEVYE%E zrz6n*=t#5(9gUWwV^Fnu2cXBJV^Q^ECZbxuoP=&; z{@xueT8%!7&Ol#5 z4?|a=HRvj|7Uj23^dm;~zoD~GJq$Vr-5;Hc7NUovBT&A3U9V?!k3n)!&HT+XlHR%e%`=T2-vRg6OV3A}P}fd3p=b6VZR7+z0cnLeE97Ls`@HZa`Vn^=?90yY+5HUq)|1zeaCEe?V_X z*Qb2lfwn{MMj5+%3(+i;exQCA^gfg^m-hh5n9Bc~{?mJqzl+gDC}qrh2%UgFjB>5L zM^LVXw-~()eGDZn`t6YVtI;RWa38Ba_$;*$T>a`a~OO*C9adQzvJVqaol5iTR@3Mc)gWhC=IRP@mA zAylNE2vZtT$Yp<%J&`6|Hs~!z(-YG|K9*Yc!`EoR8-VK0TB^NSi}fO zmVpGanFU19VUi5VK$3|w6Bd<<0!j=~+;M4LYu$_1s#W?Il`1M$M69T2siFm;ihw(o z|M#4`%zKlW5SE|X-{&`e@SL1?*K^Ny@4NTD@dqqR#8v%kElWdevPAKPktIDv9E7|w z>>+U@@i5Xw&XNKwia#jsplFTa5%SlOXpN|ma6o@mJ3RR2>IXbUPn~xkQL0#UW8@i8B@$jf(Y;#+vl54+ujP{R8L+jsJ&$ z!vX&RI1+FpU@qW40crQ*M}QXqehf$}oSOg}0Y3pGJ^UBop8&T2E(iP!@I}C_fTaK1 z0K1^he*<;}{2Z`5;1_@=0B#374e(3ALckq>rGPsD=K$^kq*&l9z-s}&2BiIb-vIsw z@LNEN4Za6l3HSpb?pG7L0XG5u2uSk(A3)lRgpG^yb^s;-?gH!x_#I#;z&(J60Coev zIs-=A53pFQL=o}q$67p#cUJ_>cP6wl#Cu)NjIGyg-rsOgYclgb;$8Ip4a5(Up)c?( ze;;f}Yd)|;BG&3(Ya>F6tR0fWh>%{#J%X{B(DFLGqMl_?>0YTJ~MP0|wxd0d)| zi}rX%>)7p$Kxt%LYHY?uo1rMGP>?yCoqj@;3hA z7u%A^3){7MVtYYbMOxbn*()-Ht<4Tst1SuX?;wn=`6)Yc5(vE&Jqdb3GLQ^NcH~e% zvLlB9k{w9_Bs$0g@d#9FXkD5rE48j{Q;Kt}_<4|ojVcEDo+ zsa-t*e*`=Zkc{l{fJXwJ07!fLT!3`us25;9;E90e0G$otqDn^7ReGm!;3Rc#ciePIs{jAQu)A5vkxtyOv(>xkiG)Rrl0)N7BVvwTp` zu8)+4UiRas_0|L}k?FZPKVBn~^8blP zThztr>5+TETKO~k_W~B#+YlwLKVds?KgutqCF#GImZbe+S|Zii zL{U3!PYk(YyQ5Z6SzlV)oi($ALIOHl{~9WqMbg=NF4{^ zpIk|%h0E^vE9&NMn!~J9C!&KY%%G%tUSPYcly(kK_&`-PU=@Qavd@ev^=A|uE0c7R z_BW^)KOOr}36-suc`4l6B@}^}CQ(}{%%GFk{7ox)vxeQ0u0WaRV>t1n z2GF7_rFMP;#vYS2$i$q3#++;^jXU{u`kezCNPm|C76O(5k}aJ8NNWib0TH!{a{-$H z&jY*%a55m-<|%;B1D+4K8qf>)JzycO- z5AX^=+K+i9-~zx!fV?gVcn|)*3Xs+x7X#uq?$kOi)ywkD};gGJ-yV?{ykN!3>ONmNNE`ToSnt!^Zf)XRvfl9KlT z#rS&?eds8EP!8`FJpMXwwfx8%33C`pBTE&erQd?uN=reL1>hS>kpjrNbRMb-;2?ww z*aa$W2(S0e^6;4)BI;R7op-j!yu+f23+1Pjtzwv)(6T?_AAa`40Ure%4fqGZivgDbJ_7hS;A4P)1f(uL0Z6@g67Vg+rvQHd zdG{(%1vkmf$m0S*Iv9*}hW1;EjOF9K!(t^^zd_*X#E{g(h~{o-Xn zeCJ850t^7Y0yq=!H9)#+Y&GCwz}Eq91^gS}U4U-@J_xu5koIoB2}tvfwScPt-vY!v z^R=s z0{#<_^z&oDufQL80`ptk8Ts*7Peq|PG7TCJGVA;^$alXzhO^CMq#ozh7uEZ6{6U-t zhd#Ht`hh_5>`ZyrY()D7%rU#7Mj@M5(KgfNiqQ)4>SbCR?d!A&h&{U>6hrlI(hEdmm&6~`|3ly2V*oy>`mw;Ke-rc z`xFoq2DI@u%e&XS>Dy!8}Mw<`v9H;*cWgr z;K_h3fTse!4LAUBC*Wy-{ZPhWK)!bb(1*W=0aDC+1|a#l;ef=jvjC}QBLM#lI1-R1 z6r%w90-g;>9m)hO0?Y!W7&aU54}dvB0wi6!=>W2%d==K(ZHpz-T|(gm$a}4_)|2zoEy1ueN(wegJ>& zv3n<*AI+?+Y^-an#Yz^f3FbgUgo@5+ISjC#R*?^|8Ei6>-H|@l#EhH}CAUq? z$P2}AS1yprvdc9TnyMk2nB7gAbXuqwgvQfb8ohj?=Sr=d5;~4sOt5lb2P;wcUCW*9yL!-sCc~tANnRwM$0(V z3HB(SnS6Z`ziM8C2R!kU(>`j*3XrHFbGRY)7WV`7YqT0aauPIAW7o#sB-*3&MXIwQ zSSs09N0UO(Tf1j0K6Em0Pqq(+KV<9&<}VSAaQd( z;6s250UrUp0&peZm4I&mE&}`yU^8F}>VOa9v#~9JgYoy(fL_3B0IvaD0{A%KwSdn6 zUI+LV;0=K91Ktcs^P{DJhXURL*d6dzK)UDXHb58P?SKOTe*-uO@V9`pckB+pF@Sdh zUI=&>UC3 z3qxA2SApi3J+h?p@}F!1v!Ny4`k6!86!Q`jKrTgGANJV~5IsXq&K1 zrsMw;@5m+`j=%0z^yeUx#LwpevjJZKq;=VqfL_4A0?q_{36Sc18SqBHRe-kvz5@6l z;H!Wy0=@?L3gBwM^?-i^{3qZWfS&=r2}t`+-vXrZeH)PWkh}wU72tZnXdR*b%Vc-R z_0TW+9a&%Gn_?H%C>@civ9}eC++1ACl$+c71sPPK!d`j|RXE@p5C#3u*Fnyh;+IFk zujo5vh{v=p-xKh>eb6h}bJivrBK_;65u;5s?b6yrZqaBHDF$g1N&IY{#F8FSTcu)P z-w5w~AgzPjmFaLTWSzRYw!5Ou!AlX|Y(5>pYc6mV;VC^KSLkR^BM5 zW0X0Ds%P2E2#>D{%hYE2;Y#HHXuL?5kHVjt@&ADC&=_t690K?e;5fjK0Ve`( z0;~u86p-GnYzDj@a0?*m^fthU0sjs7cfij9X_@<8U4Iwpx}#2#0s3{t0&^D;d3VtZ z&ojlCRQXi?pYn78x(@KTn6g_m-ua%K<&~<@zlglznhjnmCy_L73Tah`T114%n>rFS zl1P$O8RY8qe@FOA$-adY5V7@}yAU!j!9V;+0JQC|k&86Zk>IOHMq6rBY7#aQmzj~& zwljL)ayt1x;t|OUslhfy{|iXOH|*s>r?H+6i10(K0PF?$JRti7K$0WK*}QVVzXF~Q z_!8iBz?T7ofN0!2>dI??cLA;j{21_cz^#CP1KbUW*pb)u-vp%2yajkP;5xubfNuj* z+z1)uJHFllr1kj?fPV)35b$}xe*n^Y`$oXEfT)YVeYXiPTCUuXw+7VR4gcszKBSL` ztdB3kbD!PH+k8k~eI>p&9P(ks5I0=ZdK>JQ|4qtl%(qfAO|c2STY*C8+wIkwhjRC!!atIvhg zUV=iDj34dXUa3m;<12nxi{Mvayvag(;Lh;GMXBTqh0H@3ean(3P|rJ4+A8*!#uy0ZABU}8ciTkq2G~kGKu()WR2p@96Zm9 zl4Z(6(uQ^jS4>$h!!f{Y+!cjyC05`jR=qza#3DT!S@n;KQ9qmSHm^lUG^u5S@Gr8R zhh#WvI}b@LEeaWljT|O~hZFQh8$SvKb|V$fxOAf&n|AI&DsqqbQ9ww+t}K$YCsJku zo>LTtA1%XCgy1MMT}6K+dlC6tCUfxriHGFV5655kD*DM7A7TjB|L2iHo&rcM?+=&* zcq$+@4tuEBcb^7Gtr!SM@_0JnQ-EoJq$BBo@Z)q-GVk>r0=OA}4+Vsb3hd|QclBoi zl5U&@2pJQ2AJ1nCMgm6r;$Fx{KP@lhi#y_PEiX%fkBpKR%0p>Rz`v7X%1eol?%B)o zR%Kzf-BbLEMmW|FGD5>bOyVo)kh<06od%im>lDEjy4 zGqn}(3g)E%?gpfG{}_W8E0A{(p3zv*uMEb-9`CyGe0&ryC=bPL1WRM`g7l^_>?`F7 z4ET{*UsbB!xe;fmLj9wLs~7Dm||cU;-fRQRx7f3)l(pJitQ$F9z%k zI2SMx@Bu&zkZkIZdC+OmC6xl&6GSLnm61{32oLJ7lvCr-h}uAX^{9-DDu1;f?s$Mo z+jZ}0(*_~(kR^8#j#o<~!oE-lTeU0085voDKrI#@y>+hssAWcuZ<@EUHY~p;Q0l+P zCyrBPbQJi;R7uf9BytCXf#5{>waa06{A=QH%my{qhy2y`zABgMg+Jtx1Tk0@>uOg% z)%(+(m3i`T^L%4Hd-)L+=!mNlmp6o6=!gf+3s#Ats+QR7if)~(1$_Hb)sr9_=P3_i ze>*_>OX)-&r@FG4b|Y*Xn4G!uZ`5UF(?iPbCD@t;!(0>--V6dTC9V_ zONIe-sifE-7pU~&dk}4;9WaR4REl?-RbFt4#_%kkvuZ=1J$6!9(r3AHR^p-`gx|t?WmM;jO z8iWn^*EQCe(&n{UIhE#{-4Lkv)rS!*Nq;3|7LO`wgb_F$VDxQwnP_9W>J~0%VFMPW zaYE#;i+SdQnw$nSt z)$puStnQl@IYv+OY)C@8^PqJ)SHirGyW7rZAD_Nze7Xx;$Tb788$RnXkv`%+Mt*T# z+tP%2um7jrrK44cq5SDbBJ>xTSw$sf_$0YhjW#U1J#fUE`*@-EF_^`LP_q1GmX^9p z$~53R!GsMb!)Zp36 zcDCUpXFolKjreQ}CR`aASkJ)Oe(E+<+G&krCGyk;LLrE3TPgkZ)5uiJLF?K|c44C* z>n?@fLS7=Xy8&m#w4}r*5jZXNBz9U%$SR0|zAETr8;N|g5fO+J+e+g1RSq3`CZw~C zVmPM59ff64iSlf#RxDJJnYArKvBwCsv=bfOx7ob9KviRHpzSWGg}8ST9{ep$x-qU5oTI3Xz*1^7h2VZx`qAqbLz2( z>#6Wfqk}JG1!BuQRxKMsywYVeBR1`p1|t-nQ|n`6L(zzyQ$-r4V!v^yh7z<9+K$gD z_WFZ(fjt7^KLG#G_n7O-q=9W!hEPK<{Izb6BSvgHnTfTC?XfGgPfgmc)*eN*QJyUs z%A>)FU2)J`<)6(f?AK#r+(Bd)m3St&OG@*K3Oxmx@rPeibrnK`YVU@fA| zQ;dKL>&h|@`FpD35PFhVNQ=!L_c`U6Wf&7|q>v9g)5EgNtb8{jLm3~~JI~7mt-U8L zfKbt0C^v?=EDvkW&Xy+9qwLILs!cx8nYz*w-MhSk%&~4klly4C$F5rXWL=a+MQL`( zqV%IAdZhUwA044uoy@t4O3tIu#EqA2vNMMgnK~oMv1B2-O~(6cb{^pP7viPV1Z9irHC$@}*+x=qjElA)yL8bd%dCQY&$HG|9Syd0}BuOwSV4CZ*i%Xp{;hXa#XEe6$;aZb-g+2sNyX1|K4|H+hbBdM=c(2Ad)h z>yC+Qq1il=fq#wrKz6`?|8e7KV+wZfH`ghGNo&2|Fhu%R)tV;mk}THKYzEw~>#9h6FRWk~*0;W{jt} za4Z`o+WLU4e1$oleD|0#W+9Oipi@~G4wO}rH#Rp? zJ~#~;78WPCO`YH}Xwo=R-c-rEQs`0X_`G8Fl0*aNh!#mmr`phmvN1~G$c7UQolrF9 zRFopuJNF|f;e|0$dQV=KN=mb5<&dtn|Q#s;NmzYb;s&o}^ z9;1pzkEsBx9Tma0%5un2Q{j*rdPXhxz-dasBaxzqU;#bMhwsN+Uay_2*dunwWYq}U z$jDZmN*uGz%Epyr3Oxpnn?1CaRf?1-slyUEld{z4nAc%9W|WN0Dk&(%d@m3TvA3Y2 z9LC65l#~$d=#*`X>dY)+WYl|i{fehsOwLDgDCU!*U35lN|I0F2{ykV68(RqHM&TSK za`ap$D#;u>RyjaQ)4|S2q{+tOlDovCI){X0E-0a+??}iUHdX2uzUqB^+>V=p)E#kf z-4v@DNzR1oJ|wDm<#XGcTq&U5KcpN)6hl<$YEZQbwAm8FIqi{EYK|!!n?k5?-bf-}PEqt1 z<_#6&in7$|rKiwc<^c!ED;7e5^F40d7lX*T4vE|5r+fkKSa?t*J`+v1AB9GcpvxtI z$TA9B5#A^e8H04ywhp4LwiRTa>&eP2%$b;%QaK2wh49SQsb`Q+Qc?}v9iDd>fu*{6=(P( z@A!#brP%oBu$ZM7eqK(c@rMP64^Zxh+C<46wj*Zp9CudvSXlS`N&F^>GC7P%%uI+W zJ+_SWdXF+Xj7!{%d4+l8PEaB3fBV?D_+rGD(_1U;U>kI6n#Zbx(J@kDp# zcvXZ><7k;lBg@g%IBXcDk^W9Uc33ZZES*2~-KJ_$VrI69v=THeHEL7XUh*kX(|hh> zi&}JL#?}lIho(+Gp7=~Zo6DtpTmo3`4tp!GYFySn+nvw3 z`mG(aBW|WGX2sqr^?F$Erf`e^C9z$Uh3{l~E74f?WHQLHHHZ?cFHGgbON0b@vJYS{ zta;pLAx1k=`|DNevEGIfY@ZMCGWhIh`yRLD|YgyQSTGR#=46B8o&ai`ll@TfE!R;w(RHyb99}Sjm@BQS5Yf zung<5?)pGubxj$hl{O_tcb3An_|>tbsjs7yHh3#($27&CaynrjIC*Va4io{c^ry#Jfmd3E)Y+^YyO%k<&&x-;(ARm6k=yh{WVhwjpGQ zz0l!&H|i+NSu0I&o5z!V#G(oo#7i(wIL`697jH}5W3iArwgd~j^uC%Vf0QLbWf@!I zb{Fzwl&G}IP6cJ8VG57Yks4rdcx zv$N&2fFTE!+J+{mGMq1~C-RhbBBYj=R4GFus-)Jb^tv3{JSy8L+v0q;9Vy4zim27o zDAORvC!&M24*WWq$^NBQ}FXI>C@)5@3Y~3aGkS6N#;p?mOk&m0No@qN4 z`*?$Ffs*UHQH)J>Vr)wOxi*PL<`LR<#@_j8?+(=Ns`hn=-|ZgMz0;WdM87a5&u(LG zlq49F7%dVsZz8F5#auOr%BIFqoATH^ikSz@y58Bqc%yIIlI~$~uuTSSp3?dLJbH#0 zH=*2L9vN=(e#EudlWW>3g|ra`N)d^vCqh9y<>2Gs^e{fgoS1s#`FLUFpY6qUG>NI- z;EEc>7B@ii<16an!u*BJ%I~aswG`dSdEO z94IsALZ~^^k9T3y+wRA3ECfp?V?H`;2oJ{+@Z966OG_V)O`URdf+0kJo-m?C45Mne z#~a4Z{0bb*3uR>ZW@00dClqK5R{AnE9ieSvYD&A4XJiEMMbkQ}$%oBwVDCO;rBx7Q z8-;91v9i_pYVlbPN1JD+VNE4W86zzogZ!QMKYvDsY6tbaV>`=f4B-y%NE5P0)(tQi^nH`vf0W$cbsMz{udKU5*Ej?{Ms(tg#xwCJABk4i`wcErl)t**w+ zr(VodYi<3a5#8GEolZ$R-z|KDc_s^8zjRI!QT-U#0U2^hDwC>ZkYj;UWc2SNS zcX=hIzDm7z+C?^mv=J8b;IW=!G?L8rZoGJr2PMfC5ry1Axk=LllqN)2#bn6wUZSwP z7|~%-c`@4~7t)eL7|w0F1h=@L^LVGo_P@#enUNvM{1zWCHprAU5VH`y%D>)$3Kk>C zAJ5N@L4}^NQhRF;<*5ihr9!wVZ=eP2HFCG+Z^!vjJ;$p@QCB(V^C5ToEvs}Jzm7(b`M3}7z*R3 zXdLg2^u;(nvh@QI;S^^}StFsHfzw)T_Al*B=ELcGOP8L8S2~Hjq+*lIR!bGU8cdF~ zv;Yn9&*ry5b@+1e@u1PE8BaNO9b*ZkEN=pxO~fA9Qg>lCy%a>J?1}*vlQ{f}#DS!a zoB7aQb#M@;8#!q&-9B>&yG9Z=<-EDJp*kMm5h5whngqqtE*26Ec{mEqqL*@6wSfv+ zCK*#3m_;hZvMvXJb)CBOWkij5Bkx4ex}p=#{gV1jE>k^w+W{E;dWK#QV9#4(>N()K zETYtYHc?6v#TfYr3}k}*K;;Z9I#LKl!J8!JRM3hKq6CthFQIFaoaGPC^5gDSIuOjq zxb;~IOkky1km)k2rk*-Z*Op0Vsy%f$gGM1C8@F5GM7Svx-YQR}7rU(oAT1S*&PR;{__5k?wNToJ<|PVR3m?*X8ll2kJe+aMm%y16`mjVK}i+3xevVkXME`ZCSxh!Nmo{wLNH2FN~8kUc6+FU{m$uG6wO z4A8Pm*Em7)W+?%q0D+<-sm?TG9s=vv2h_2~%;94u^u5t~n5v*30X${~!Rio_k<{1f zMv!sS&R~}OV-)uIC#Ie>Ru^B;$YHrt`@BfYVNYLhU{TMLIkQzcev+SbLDNOiRD+KT z^ijOpP@-ENCFExK^)Yz73QJ5K9Va!76fcI0O-S{`rFyLXm)^I*qW#(!)k}(MomXt| zZVLEZTI?CDEwc0egS2#9&zP86W~4wJ&WNe)>RH6TIBdAoI<^%*wG^pa97b_ye1#Sc zyAm5YQfA~!bb8GtT0Z!;6lFF3cV5i`!$CpfF74J^$B-xC@kyF>QCetBAW70L%uyw; zA^|Wtew?RHNK6fB*Ey4Kz_%N@pI$2d8;=;m4z& z=iv+R2oNl(fZ3{un+O!#VGxw zeUr8Jm%cYar?6||PgMEOC!B-P%lGvd>nW+a&Ml?|pryvgkm&{!X6Z|)2BoD-7a8BY z4~RQCrsI(DpXzsBdri?-xk=q7UUZ?roTmAm^wisfPrl1FCAla=>ovd8x?}W)79?1C zPZT;zP|Hz93&R}3=WG5&g&GvJ@eOahCN{WL1>C6rXtFby9mFs2)(=)ShZ}J(*oaZ$ z&uHlbM&I^zol6erK5C)jDCdfV%lv1%r{lC*MrN+3iQFTuoZ>Bn?)V~1>d-ihG!ZXx zbQDh&7U^lDhnKh!MzmT!dITl@MJuo|MSGvX{`9dOPljpT)J%ZF!A3O~rn!7>9KP@? zc3c;UC2hTux3_*W2N6M&Z66V*ST(O$fh3Q&&A(rAAfr0@E2H$K5FT0)#xi550mqQB zW;ug3vsSAhxlLvuYi71ynxShE>}xaEgE1T8DxuB96}Rj1N}P>|v0UAbD=i1G6NYY) zdQC>7f^)T@V)d+OoD+XVd0%#Yhz}6-rN=k;L0ps>z|9|(_!J-xV%p+)yYcwx^@^Q} z&FKB~EijJjm(Ys1&XGbuXo8#y2O7hkz%&oW6klhdnRIa+Ghvpo$hVqhZ4Vzy$GaM} zu1%XBKGar3Zc1vW+YnQcb)#Oxm07iH+2`W>>y%(1o<$8^jV4EjufK5X_8uDluHo!| zSL62OdE8pLnd_(i2w{2;!1?61RyDSpF6 zaRa8iePo^yj zY*usB3a!0BkT_ufzpHg{mt3HpU!y1w>zMH9HDvJgVGPnPW8r?`tKPg)k!VCJGDqOG zCviLa^0qb#t=^sgydGA*nRrnv4302`5o?;cByYhQ6UUL7=?&(UqwpyN+uJSZ4qofY zcU-pPoTM{)BE$L+tlaC+AEEu7$7R$}UdT1VRvqw;GE zPn?d^{Kahi$U(^`w!MwTOm38ci4qWcrAQlTCK-!HF^sZj^se!7{ebKly=nAU;j0K( z7|?NZBd&5otdEhytCKcj=Y5Xx+rg>mA+*&IwT}SZoQ76^XaaI}F_m<`zX`q%Qh-FE z-OYMeNre3@b8<(AmW9Z}_zh=qyimU%kl__%UKFC1u0|XWcsj(@;HyAV>gyY8YiZ6W z_YTosDrqTlaAcD1TIZcfY1&Q3pUUt;=@)}-9&wh>JA)UAXzgNL92qytEhp<|Bk5b2 zx((4mTZDVSQzvJSJ zmsEUO%DYRaXyuD||JT2?LU}Ul@r6?C=30qNVPmpXB%-5HWv+hV@d*rX9(qxur6(e6 zwlQm;BSlfP1h>f;L&x4U{nm6klI$`(i;~qS-tp4|mwBi4_yOG|< zxA^ELt!r+=_H520Ly(3*h!@t6*Fxg2$G4n}?_zPe5!u$ab}lwX|15K=i!et?)8ij| z<*wDTK`TOpb3b!;XyI8+Ab#PhM@yWI5DAZ#P`Mt&oV3R}w#jB(soa-H3j$2rpmVgf zi+aVw5qmlkWR223UCnwUn&{YB#0C_F(z009=zYqAD|51DW2Y!>4gBa-KJS4~^3Y9V zbasFi%l-yaQHCYh5?=@(s>%j)D!i35()s&OabKNr+=x#!#bcLxK8m-Z_Y(M|96F7# ziQX!|;c{F@F$Muu362usVqaP~T!b%W#wk^vQK99BEUeGl66Mv0#|9CWH{cO{rP}t0 z=<;)K@hnrkKFAYx@t=Z!a+tTmPT6YYPatSEvK(YMo5c4Z_|zxCc-wc_+2=BE#Te|G zW?MhC!BMz9sKB%100l{OONcFn zIortDuaB3Vj}g#_^+BX$%br=wUnrwP34E+S#M7(uj&mg9Cv46iidQ}wM@Nw8?k-#D zlo6Z!8fwNhhQj`7{z|&Xqn^957Pn2=QkstP>sGp{#`X}r<0c?hhIc{C80Nn%E*B5w*MzCbc}Iy@vJQ8oZv_!?XE1FP7a*jN`@j5Lh3?h z-P=YQQHumeIopvX*=UnKd&}Y*7*eqKPnqX5?A_aFjuZ|ux|>dM^qYHJ9`@IU*vhPq zr-a$8t*$TQC%9hAzB6=I<#ZNvRMS?ohDd{$wg`0O0Qy)VNX)9=NuVk5r z*SFC^w2vfr*U^q*%S!MHltbPAjx*QHb2{gag+V?H$!X|g)I1#MtvX>&tY3=Bfa4Im zyKq7t?!fR&7|d%ecgKI8k%5m8)_d!GRj1Lq)@hBS@PSLL)a^@-=rTg`4Z;z8AhD#Z zERV)HyVe^DMGnB@{!bh}#R!yE1_QOV6a2neJdMB9LCVO$Amh{wCH}4HJ8oDR&p`$8 z2Cp2aA*i53p%>u1{6u#NZWE=?RL}{;laPRqiQ=RjmjOpooQ3DOWC`Oz=V4DolG42M zaK|afN83z%q!ZB~JOg%w!d|)LlZbw`d5m%J8N5z9yI&hY6}*jl#oL!&HfuZ*Ea7W} z0rZRHp6)R(@io+X@s>P05X`L#7Ru{G@nKQE^NRYxU6se~>4YG4D~C^X(gs?(UwJRL zEAyephlxLQ!c}P<@$3@FrMs%yS2S%J);8IhEde|DtgZgMV;(M{%cPT&)RI)3V=OMs zrO!4|ergHM<*F;#S&V~JjdtP`q|`F+=^pRmK2DVL)!afT#A5u zqUpYDdi*B-#urp+IBBHd{{)})C4qQ>q`07hMh-0}3r63LjCtDwB~R>zQ?TC;Cfyv?btnak1~^JZ zphl5ZRFprQz3%mDY)kVBis{y6HN+eTPPs6;aoYb=bBKkbQC6*ox0m4l4H90q0@199 z*nxB&RNVv|-R5Chs2ZVb$Mu$M(728;>cF~em7f*=aMUpg{EXaU0ZAaadlqHj1&9~l z^z@@G)KgGMIMRl(s8rG*6&K_%=Q^4qxIse^dz4Oa(>)ZjPP_mh`v|R^7T~fvl9W#< z!trlfrYx}yI9s}0Kh7ftD{JONy2=Gpk;lVc#y86N^rHcJW$TY zVO)guxk|lAveL}};ieL9FTI|k!`MoU$q0sAI5soJC#~r*jL2IV)Nw}kXa?jxYkMAs;ngyPDRU?Ce$*LxLQwO z2G@NhGLY9OhOOat(+vuIfdZX|nSsP+#h+1YhLxK`HM1BZgo*;210-@~o5O$%GkvHvoC1;~_5e&0&}t3Q8BNt~)NL zfNh1#%#WB@vIigPD2IbZ`UE144u2dxKTw@b6M9NE5qAU7JsYLCTrV;8(|I!4J}uw$ zA5exngvfAHgF7I0$|fz$;uWS-_DwXUh{~6!bn80JC{5&@;}0^UFW2E2bZ!8u%tjr( zV|z)*^+-clSn^bE?(j)_X`VxsBX?csW|DiL?>7|l*Bi5H$7h5dex>HfaAZ>$`# zdGa@#*3DRa%+i_oPH+b*C+X&6K3moJ>&@GST-34CC1;HjVlvZHdd>ap`&S#6PMf~= z?5mS^elNsbOz$-1q!;hF_oU)m&g%cbgnPcZP>8RXKBlnpn2*ohHK1!l&yAN3{q{NV zx+9hU*&U%LUV7v3A9q{Unbk*f9_{`;jY`Soan0GdEw_r^)4KddIj3a^k4n(>ch8Zzx*(ckK0>qfdDFl*3B4;ML>ip=S&68qA^0=eLG*W@$3cQfvYo>Gvwlt$&U@V`r_-Lh=KgUkMQt`I*my~CfIvaj;@%u7yde(m@N zms?QQE>!++M`Ud};icnF9C2lNsQ%x-Lp!fx`iD2weD~0Z4=?!LRi~HaAK7z^5U(=5 zxq5BiUKJCUU+|kFZ(N%F;^p|-24u8bLiwSK&$z7N-1+5ae>d#1vgQR4bf(vJ{^G*h zzFCodbJ6!>|9R&#rwMTb)3;~O8r0{8-)`-*>XA2_zxtq7h`%%art?#u-m!T5g;#&R zbnRVlt@}ZU{xMk0+w+@0kAQZ7+P7xb%l#{m1{N>&+Dxc`*|OFS;dM z_Vn^D$6xxV?EV|ST=eFstDg~KKGVG?HGKN}MPEPq!JX>|9R1lbB|^N&^wg1uJv6gl z|EstCrmEu3tVKJ7NKB$~R`;0oP08=x`)vEdsUs$S+7UKmJk!@+{MIXbzPe`DoaPgb z`s3os7?WF=-ut>|4m9uL$uUrmz0}d+rya(C!h%1U!1NO}EYa zyAX#SM&&$Le8ySX=UYE^82Z7eLss5B3;M$Q?|mx7Q%vuB z$>WDVoHV7j*K05TeqGHe!-Uww^e=z7>HKTo8u^F3gqFAc?_aSE@nZ^=f6ur%)2{jB z+?uAD7p=bQy_@e7VlmUd{`c*JpW5&k^7Rq6XG4Fzfks%ge7m@KIWZyjoF{{Xt_~{ z9tZ)tC4779X`kMI`7L{LhTVG2f}%v|^#rCrf7cHyN6mF_|7_eRXMXU;4=Dc*rn}!C zn7Lx;2X9_~@sn>|_u}YPLhN9AM)wCMKQsI9YpXX^%pCF3wjKEJad#^J-`$qooj>{Z zsViTd^t(m>{96UyzcGE#h~nQbzb=1W-)HVlzVyhW2f)8D{nPAoQtrPjp~IE8+_e7F zht5QQ4>^L$$-U_0jTa5^Jm^2O{Ishs^(;s5%=F}QSN8s{YyP}N1#gy}b$PE!$OF^A zT6xK;SL-{JJ=)Lr!jg;U^%vr8rgzP}bVSl$PVW@DdQtzk#*EnmJ{(EqZ@Otn+Qd11 z-+kujecaQw`{n>rIWkO70`XO6SoR@m&@?F3Fz2({b_wx%Ow@fd-Wx$oI`aXKfof9Yi z;mqzEKM-Oo(_fwN#D^0GK5*;Y5r-~%=$g;#h1iKW;m%(8pD$y|tUz$al)5>tYCo+B zR{5rQ>%8^;T7Tn|nrcs=GKl!EE}-x!m6dpL)mRyxf(I3}Xg07$RAx-UrdPZkt8>vd zwUDdd?BT;snSyt(Re@O{7cSZgO-UOx#a~}p+lb=R1`QlEFzw7iL(&Egn$n0H;-*w$ z>O(ih&BFUze*h&ONUJba^2TozZs-aILV;;v*Gzw?(Oc^Zg&V8<0aw}(G-hU{X(aA7 zRa?wy4ThFr4y0LfR!=2`;y11R{K636)~|z6QXOwfI2a}AF|32I1n0yrvE2i}_gEY} z*+RQ28|HWpl>Z?cL2i_hZr4LOY! zRxoS*6$hoHIU$thZG+eQKJaE4AbtbeTj*@`w8}T_z_ggimMAak=am35O8Z>|T~2c#`Eg%mxVC;jN|=cksJ`G7+%Jx|sr1Kw zlwrb&%Aj|K53l?Vq>TOMWh`rPAPqraR8bL_jUwWNM(q_bql)ngYM0e&y;H7+83zqriVp+NQ3ZFuwcvY2nH*pEIa1+J*AoPn2X@j2SA5mKfJW#Yb@ zYEs5Hg43?j9OFHUR)*sj*j_flkV|2V*Ru8&1eZX;>;7{bmzm>s@BI=SHD;K)1Oo?T ztuAZ~HPBtb2hxfQ8@*LQZ@6;5%3u|snNHpQ`3}xs?ZY=N{gpF0(vB}8`yq3X7M{l) zG%4l+aScxWG=CfOo_5P1b>ENe$#L4(-f|97G5$bk+N`Sm&_~%btHcy{Q(MJExt4o z4(+ehV16du*1pG`EOqi*9tU82P&+L)#pgr2M#kytq-)ua;n4wLMFme1_a_=>u2dd` zX|I|f9=QFiqg6S&;rQV%T0IH511+rtOdH>2c;L z%SX+jS@^!IfKuiL>>RA9r6tgPEkZX0T-}@dZ7)-1hpSa=zrT$kb}0EjK-)CC4!ad8 z&I4->w5V_}tujzohtn1ZS`uBpyU!zKq!)ADHrD&vJ4%jI`}^M*SnmcUy>Ym*ALetv zmfp1_+gIAKHhSO#-*ynu{_gRXw)o9yUqN+KWOJkq?Ois=)!SFm;2H_wZ*bAyLtLl2 zE?@%aM38@k!5I6aw|P8{h&1~?cnwB;EBU9T@(a&2n*X82eHQoqbR8Y2T=pi&jVLX zDIP-)Mh9h4gSB*+ff#b|lq+42@`2bQ+0KK(JUOIkhI5&M4En11UWoH$BCCtInlG_M1KZj}XOW+Je6bMNA|o!x-mxxXyTX!q4=K?sF%`Qu2}=@H z3bVu#VDmZ028AVwjS92GBJ4q=r%7V5!Yr{0*aFVc9lI+DOA}oudX{RX665YU7%8?|xE6fr_z+~Q1g<0YilkRns?p;Is zz|eLX+P8*Q)m4Zqxm7m+%itC)RhT7aV2|MlrUevciCm;Ui)r}^vqV1j@=+;CqF7;; zxEh!&?>dE9VgT~Vbb}OTiAN0WF+*ErXsZnk8^^^WZs{OkBSB9RLlkC-D}iM)tyy7~ z*aU1e(>5#25}DW~cQ(`93bVv-fsJAs?X4rs5-#k5quP>0Z-rT+7MQHJL1C8o!KB+` z(#^mQH<>q}Fi3=<-EU~i4Q+*?-HY98P29_Mz-TXIl31@WOH9F@v}~qLRT!iM`^YE< zq(otsr~oGOPE(jAcA0eFnsjB@BX$+nwg6ZTm%K<}mdL@*uRNyZD$EiVc5CG_jn2pr zW{EYx#xiZ4!YpwUcIb^^+N}yh>yN>1ai&dG7^Deb)ua|AiF}1w;(B1REjKI75~m%f z)1@iQ5*HX+g`xe)(Ee;_?;6?%hPKPlzBRN>I04_x-01ESVjQ=$hr%pz8L&d8EmRnI z3ao%>-zv-!)xB^4i)k|yW{LNJjc3}23bRD`L|I#sn5{5NybMg%`#SCB6n$!nE%d2Cp$dmI6PcFiX4xOqTb)!YuLJX*%7D z3bVu>L+dzDK83AQSdthNp`9+o)k)+VrvNMC7ED!`CGG=uF4G=V7+MN!BGbNCm?g#x z!me1RjZ+x(4OltTZdI5ilG9{uNury=EKv$f);m#Qme_65;RFr05B3V!HQds5z$S6Y z>lJ2+UW2jElWBbv26+ZHnQ5~X26+Z{9@Ab^m?cIJktHXI9EDlpQed)<`3kc{zo9za z0ENNQ09(SX!uQ?9`CM`*g;`=Iuu7&~q%ceD09L`YuN7vA`ZI*^GA*buOMC`wD$_n! zm?fqS$8K?^O;?yDJ_2?D(>_(0B^I11Ta_dhDa;ao2PWJ1p295gXogPrxWX*)zM=iY z&=#Mi(=Ab$C2lvgI}Pn&LtAEOD-CUxq4gXo#I?+|d|*}F`eKDy;!a>brroPBc)w9H z2fUxcpn1S#-Wr8jVx391-lQ9Zvm{g-ytBeAu@TsH+=6bSg_y>*byt`rt^wv}+Vu*v zME6V~YM9nTVV1ZBST)mrqcHfWELn1r$W@pn76X%YEKwLDylkCrsKVes46VY@RvX$H zL;Kp$zBjbvb98wpD$EiC4K3Z!at$rt&<44MxSqK&71(s{QI*0h@lRm2O#4J(mZ%vc z#0;j@DhwPND@#G-t1v{@z*Kn(gJhd@pPO_?fd#l^ zd}^FAOWXzQLZ@tuRZ>E70i{C=9;a&^|P@ zLke}et_rinP(wS@(54z%m7y&$v>OcVSwnly(6$-cc0*fSEW}OdM;EaiSnyEl(F%oG z;)ru_$dYMCD-2c{Scqw}6=sQVfl(<*VzmFjdo6lRGhfZfb3*aWPR zOWv$7c&0LZtea`$6b2gsjB+53RhT7umg~GOg&|e}Cez)hFiWg9v^9p7KS7A4+=8VF zOA@y$%o5`!%BM-9P+^w1!qBcVv<-%~(a@%xD^Ejp5sQJ%;(jbqm?ho~ngxB(cQsY(({6=sR`z+`zF6ozQ{Je_W;!oVwFw{qV)O~#2TE;&(Qmhb?( zm}!*?!yE?~iTeGVdJr3~jZctueIa(}eg9b8Q>2dCZ~h3bVw>Y9TITTBgD* z@iZ{XktCKY%o3ezbY4qg@D;#hx+;aiPXqfc*VfICbs8?YyTUNiz~(b;j>0U_X}ZjT zW6KJ&L9RaY-p}u3vmyZTnwy*`&*_kOMDM(3Df?gFiSjmDdrzcdsJbTIBy>2 zM@+jwVU`$lnJgLcuEH!a7nrQ$GKIk^&)4Y&D-3I7hIXByJ!NRm8rnuf+hk}p3$fP9 zJz5IvT5i?t3WH_10udh5G8Kl^OJLVAZJWYiEv}TMz*;B_cZDp{w}K5;RkLvB^F!Z05Mb|cf~D-62YB6DC)qA*L; z0h4(zRG1}tT&>gfR2Zzcq2(IdZeaIu3kF<+IOkB3_CX56ssXU2OuJfPmiQdl%}m>& zFiXr{B1?gsD$Ekk0+Z!Er!dUzuhr=uR2bGluG6&c3d0xyt4t>QH{^PWC5hn*v&1Kc zw#Cp6zd@%vN@0lR3@s-@yAks@F1Z2NR_;ewVOZ$^ww-D3D-2w_Nr*3)ma8yJJO=D@ zru|7_mN@=qA^y#@6BTBOW?Y|FU{gSWaxr?V6W8*6A& z4ebU)TWV;x--_8R_j0qsu+FbAjOuOjX_B~FVU~Ex(4IB44-M@jL+gIK&f7y_h);o4 zb8S6-Be5jWQ(=}^YG}6`+InC!I7jc_N({3ig;`=2urHZw7c0yXmjnBXX;&!B64wFS z#k89gW{JCj?PS`03d3v+*bb&WsW5Q-4qflL3WK$H80$1Cqyd=czd6oxe;V0Uu5 z*A#|T9AFouP`a-b1}n7;zK7E#D-6B|n1|Dyt}siufzi5tlE_mSR`P*O<#Y`S!yFOV zJ>4kXB88!Sz`UI95rtV|C9r$DQMy$Mv&1%F6`XFn!Vnof20O&*5*3COO<XIkg<0Zvz;PrY10&jwbH*~jJUkT3bVvLz#imuzgL(gUITU) zr+Y(Tu+MJ@@err$sW3~F1G}5kO;VU8-T?M6r+Z6bmNGG(^aq`@;o}%m$ zPYxX?m-v(_UqxfJ`ePvWhl-s$zT`VzU45!7loxAvnK{Ra=l*&=a_;IA8sMS>8OSDr z{_2{rhmL)^dX01ymgnamymCS~qK?}^`5OQO8*q#TKSfK6`a3=HcMzvERAQv}i3~AC z%n|_+6f=O;i8;b0s)b*K0V_erSpd+zc;XfHpx5GGBPcaU<-zkxCvt6S`x(2!W_I1g>M!5K*ESwOo;zs-* zU-`NQT+#4jIwLLEPI#jtv?yJrQjQNVV}zj z*Aoi6D(1Lw-!zVI^8MpKzde*~ludGl1Kh|Er;Ku-|TYL2f{9F>!vKSyLc5qot_rJ7pGm}8h;4;o5|PqlJr@D#@Z@Zjd!Nc z74(H0gY~G+%L!a`n@fJc5K8yB9=aCyV7etoJ2z=59v$IoTs7R(@S!$sPV{Dved zk?vd+;ub;OOc%Z`8LsikL5L&~#X;Xpf1ok6w{%<=@)1+!pgsIIpRL3tq(K)S`J#62 zEf!IH#o<=wQWZK}Z|a`q57&T+^^ye$Rc0V!i7+!(97Fs2Pa9Q9px-H{jlvC}-hQW0 zNHYjL!M2d_jDL+XCvtBWa*2{MFTzvfA5#K^x!-(Oohi z5MJj)*K2$fh{-_C4I#1DLH9$dhPmi0xoJNSG&h6#Sb-|5TsTVa3e5BcYrPF2@HBwI z4r0V1F&H%x%%btGDj&X+PP$lI8<^#-uk^VB(@-^)gs;4W0`(bU;J|_COok|uMR6sW zRm>_|FR`DYE)YN+nk|sb47vjnGKz*Em%Q>6L5Qo$A4DAxeEbissUn4taVu^Z$5%qo zb~Pq@lbu-OKh0ZY`v^hR-$2UlpcRO;rcJNQJKj*5k8~ zNP{D@2vh5UtqNP}JVBnTCO#-K3;R0X2P|9x?=d$t!RpGb6=I}s*8Zps1yIQO8-JIgyK z!&T#9aUt0OH=NIAI-X@~739z$q*Vc$Pz90mR^pp3{z?~)0f$4qh_U-4Yuws2Jzt_2 znk<(|WYa3hkyPU|G>Qo%AxJR^#si-$?@3E5oqTF|Mz7Q3~9*9gR_%=-%4YD`XpRzz08itV|hC%L6CCfF_{s&u2{X{9aR1j@rE64&y z4Yg}pFi?kKC0`bieQAHC1%ZB~1dD zy_xvc?B4w{K|-28Ise7g`nkJXadScPInCvXC2`WekStcOj-=P+=z^&*`F#2wo|9JH zMfDV4wrvRj-3br-7lTl~lIn4#zWZTNOm9(@}?b)-3|9siKn-We> zu+gR`=u9@^&XoS{pe3UZiRi;7TOX2a$+xb=z&4d{ zL{Bvn4hJs_wl}BJ|2phh)8yW;wad%y4b*f9LQ}!|=JNGT<=f`Z-6q16*1fH{8%9c| zT}NrxQCh-F1Ie6$6ehw90VhT}$)xv_7T%7V` z!OnA9$~R)fNadu|HMu3D=ggnGNn9GDG?2nmrEqSe#&8>fY=gR}KkRMq)(qv*rP)iK zj?s+dX)fO#Y&83HwELEoFpH)DJ@5Wku6L~AKn%J@s}o#>>*w@SD^_IG|Ag0_c|#^PjH&~bJvNK ztEvC<=O&7j1$bG6E+@_(E*eXwyJV7;otoS$k*T9@uW7g)S*hw=Ps&S7g=nmADpAhBb99H8>X$Mh^U4}WH(NG=b^v}F&eyT{@flS+_l-=L%HOFWW{B2 zL0tx~*m7P+8Y3wdJ5u_u*pV`c7U;!}lyemvu%@Ye1-i%?o7^z)$xw!Hga=shr!qFe z&}VjPD!;SIOD{d*jvxKqvD-*Z=KRwJWyYOVp zccjqmhXLpY({i#-hXk^_#WmC#RZudT%4kc$YKABdnvo2Pxe1nwlj=vt18qikFI6IK zYis;o!IGyeyoOXX(ruQ8?joE8hbY4!cX#r5-J7#I?O7u^(H9EP4Q`_+w}ac)Iy~6g z)WY3gfl{`!Usegb!OH8{0d{8o+%+OhhV`t1&2ukC+NN?Ch;0;;z=yPyF9qv1aMmXG z)6MRuo7_);8BlR)7n-;0$ER*@YFtlz(#i|>(G3#R2Ob>tZ*wxZrQl93RJUa76xoEv zGUz6}))EYiu69{-!Lp`;hfy|Spoe8PN3~>hQ0)@=sC?yF=!lR)w zCbJt3BNJ>4LLewmVsm+qX7}bMh{>9!g8R`TIAJ3^#{6hK*4=mCZ`0!oC|K*R;@fC@ zQwu?fp}rWV&D^Runz@3kJEF6e7FR?amF5|W?V&P9DGLVR<(wWJQfc_2mX<|e57$Qh zqnOwbD0;R1`Ldf;-bPWuMaqI1Y)&9=+Z#J<{ZRV~h$4an9;fYcoRrgJR~9}258bQr z08s?T7~8oSavVBry;--EH6&%>tI%alA}N3fwz!v5xw`cjrwwqX(ugQ`iQP8HC8IXw zE|(Hpk!(jws{3A9<#Ve*dp=?WyA|9!E#>r8GsoMw$P*aYag=rr=R&+kdT5V&Y{{jx z$hK@5-+>}b5+6y}+Dpa&(jv*3!C}qiYv#X@0A1a33;8p{E4C@CxF6fNV)$`LDHQn$ zD6%A>@QyrON{1ECWbfB;F4g;#=hmRFFCbW;{@>1zm?QSy->!Qfkp-Gg(I~ms6>}cy zJw~q0-b;J3r2t|sd#?;k`35vx4qKD^VL3_CU0e3DdlUMKL0fiK!Nb2!(Fvu@Om`-R zqgy4yr8bd-Q$P@;3)@6Zwl|TY;Kq|`3NRiuR15!adWQ(E`qpD>jT|A}%9ZoyuH>4G zf;AVcL{0iRYI2H#s%gSrYodghZNakJ8)}mzTkp0WvSltNhA{9QeqE?5m*R6a`vhe; zXwKHs(n(tfo{(|RkOyYNJh0V*0TQ;Fwk-c)&mL{rB6h}R*~qY|P%2(LwHO?ZVc*nz zv_?12gbjwmk#LLo)7Y8ISuo`2p5;z#?4gHR%Va0Xj1F6$*H75%NplL(hulegX|a9Q zwu3|&E_eszyE`C0t!E$IWT+XBKX=CF z&l-xy8xPrX5A^0`_jV)#;Nerc@n<42K^n{RDI`*oi-3ItnX1U28>hRZ)@;yelHn0R zs2FJxRs&a2_;uV*M>4;kr9aG9=kf4k;hDk70Ah|aeN0XxF zqRB1Druo)_^ae*ljhkUN-H*}<9ks`pZ(@U2EPdFnr}I=4$4%8Er9t zwnR|PdAJcQcB$Oti=~Cq*8eGvm}Jqb7+?kCn|I+hH}PMn0B$rY52=lVwDgT<7k}>qbJjwhG04?JEWmp_2{GjMDw*6kS)(1ww8hwT)*aa z`3lJIJSHLFFK%gBW{*&9f7(zJ;?9S^h46usssts79PVy3+AXE;*!goe9)gu4nTKnf z|7}9b)oCE$QRl|4nEQ2s((<|nI)|dMuJMGHZp`9FW9qvJmeZ~`P3}8&iYE8%5tO5q z#-lX>S&Sra83g7`pDLR`i!RHhT1h!id1{qW(3GdvfIXVN0urKeEJOV-Q)VB;|OvRp1YP^h}U}1?e%bC6#E4egbgL!xufzO8d&v)WP z_Eysz=@4=s%?0`_QtH~B4*vA@yEa6^SrPpTPzRF#`s>Jpu55g!~d%qLYO)SKZ z?rr+}+$zwYhqVJa%caRn=dVZreFX{!J+t4|5tRFOmCWQ`YD;7CB0fL>jwdgu%KGty zA|k15T3d`9qbp_rx59HubG60yBSr5kx&KHaY+`CGl$7`=ol3Mt3o+NHmVk>f^lKwW z{;l3`*!XBeA*(bQPFe6Si?dX2czKc>_P=JyN50ZHQTK}j@W#VQ#wb{Y5~~rG>5h%0 zqeUj38tGt*%XZ|Ei_$1tdVY@DRN1teZOWGEP_|A-kr+=rblEyB8YKI&B?YRa869Ct z6t832FX~Wf3%Uukx)e+Cn2@y$mmOP>Gc-K156S3nn1u3PcV`lRQJnJHMi zfx%G*4MHr!r_)Lq-g~6hAgAE}p`7CB(7BDsEyD{$WbJ8S%nhG}P zewq=G)A(d11>w@&C`>w*W>}T<>2Xgt!SL zU{q98&}dO&3uu*BAv{(Q4T2i9zG8$xf+4}MK~P>cV2x{h)JN&RYSmh6TWe{3TU1mO zRJ3TR#Y!tGDlxQ0#Y$T$|L;3zX7=vQZn7cRV1F!R=i75<=Fa2HnKNfzqEJspx^;3O zd-2sskWq0P_W?83KGUJDaFdN}aCp=F@>SuL@C2&@)KW$)kt+L)nBGf%N#WC?)zSGv zf^_Iv7hX+yv|8g>T~|c82d#7&%-lMlQ?72j5>l+L2xHUx>%uE)=dbW0+0-<(-PVQg zV=VVE78wkD;`q&#@-^X4d@OffaI}=Lecyxl64`Sx{UoCR4oU0lC-`cbDezHz(ADxb zc!^b?Kdc1=<9!U21w_q?#5v9N(QHz3`nL*&pAXBRP25 zDH6hWTK1AFCE~4K&2ctjjy1Yi;Xr#3OqWJfQj&;eNb0R|tPMg7qzcoaTjzI!FPex9 zC6S*6^y4!jHEa`;A0}ka*V#*r%+DV>8lmmb7>CeaS*IJ3e#C{j1kRNpeQ1AcUG2J} z$C#+Gm+99MJze9gdockflsAjMMdE9Q~U&Vbom7-zIMGR+F4Bg%daD`^>m=vN}E6Ioru*=Q*v8;{fu z*TiUi)NW5_PZ$%n4U-@kn4L(|M$M_i#ea^=q`zy_vRAgtx8lWDRX+WJb02Ocg%7F> zzQRYL%58^YtEGjb6pAc~0=H--rq*lcZ=i66^07fYLEf?f|0JN{g_&#oVjn<=k3cgi;*40Ka z!2U#>n1+G~RQc#!yg|!K<7?!Y0j1-T#!(>GpT`!p@<1q6*}UYa!alYZ(kK=R}O)NJdcPL zZa1xEM?DQbC_%frN)@mj@>ortrg~{&(c;+_4R444ZLaDY7g0fp8-OIJzyAh*L-jPt z_4D}~wjH;I6Sbcc<14-rM? z!D1Dfl!Hnce>pT%&xx? z13e&|JY?U?kx8cSN3`fZC}Z<%MtqR{cp|!X5q*3Q>%vQ;W>u2bVaLXfjnDc#sAZsY z!-aT_kKF7VvX@Z#^7%%$Z--a<7UW4sTVN>6DnDp{LUAzt{4r%L94T*+$y%TR;!1gL z?J?O;Z?%=Mbm-Q3rzD_5d=CA1;WyNZrJ-TA673@+8op;}_|Ew~qJ=PE-5D)ffoTmf zYu(?FgUmOaFXN8&P$=`E(`M^pyWpCRxXEZU+%-c|s53hkvc4Z;&Q@{%G@W(oXn)4V zlbajUrC&3nxkfyP;@2hn`geeAAEz2wCd>mE%rtN%5Y$MR$E1aso?G=YWVut}LojUC z&cEM_q;u_FBc{7PK@K=2X8KH{uSc%1vKT!`Tr^bG!pnz-S1-W49849fF($*Sqv3~s z@cDcgNtZQtljo1k$0`dve+(1RVa~i4F2m%rtZl`-^E0y#a&-9c(K}-Lvong>RR0JJ z+mVFF(6O(^yxpd_>787zZfmlfMs+`aT`lIdc8cyq(g{qwC(&iFJ54kP^{ zEkS>_7;N*fvw25qS5Pg&7eup9I5 z#=KpaXs%PrqVU#YWOh0>K4E{NV~N2vusC!IuQBOfj`lOO@UaD$pIC>8WPU;z81Ks% zTC^_Gxq(H^dbfE|Y0y*6Bw8#g>N_`t=~YZDmd**J?l9Dc8uuZbz@{5a0T*F;my+4HM(4v)Gz_mdPZCIDJ8J$SyhL=QOqNDFl zD<Ldf#d}1Sw!qN5h&ZiHWd6dZEzO>Sss6C?3W8+JW4>(?SF$I#3 zg)|A$-y7*kz`q-9&w(ONv~qWasG1qVkz$s@qR;wuC|o~}a;2Z6akY!@rw=-TRWAyS zSR1%r&n+;~b(4@=FU5ovOn6wxVT!`o%DU6YC!FI7Py%Pr9=LXjgMMF{3;e%OJY~Cs9Zf$Qf!u{Xk#gm;a-BG`kH;P#ZE_?GVI2D z*?1ef`+qeYjl6TgOZMVlA|sH*ScjXv_)2C987PBm6=CL1%FXB={%2|Eqs8LxmJ4MC zAG6V;I3xxvoC!Y03QOriL{RH{SYf`x$4?kV*GL2nzfsd#vgewQCTiLi32f5O*SSgU zT#fcTMC;mAjEm#9Nck6E>G&7+mq{{%)>EQ^O$9wpE@l*i)}8J09J2vj439n*g}=~R zTx1BL9(1VC%|4l07v9kbldL}Euk5Fbc3^!#v}V&YA7I{G2Pm&?#KPP&9I2*upp& z<-AqaS`5U~bUqF5gu&SNG##EAq1bOstLcU?kQ@xdDzYgU9Nt=k;?(yH4sVN$hMYx7 zC_y_kgAFYS1E{BE$aG`Jfh%H*xSO}9tVL4p!k>5C^T@AnOJeP-3#&8bgYi*lUD(^^z()D4h{f#}aUQ?sUk5*xJMFM{ePpz>i1|XJgPYNP39*`lwLrmT-Yx ztjr4Heo+lrwS-oGhERkb3s)_P7+Pa?RJLHSCs*(!A9bEzeaS5Zx%JoX$J|I7)$8Cf z^&94okILidm|HeXxI_ZNXV;j|oT0byweydP%B!NME!i+JQH)-lB(GsMJg-_pZJa4( zs)!|30-oe|=lK_3atlEqRU}EOMn>haNtN;0G*t@^jLNH+D!f7i)tz?BhQ>Q#It=%Y z%9`4`479wSsDSgLl19`P%X*@$YIx?|j?ppuZJ6*lo8%?0b&CCX<{dA3R@V(@JjN%l zZH%7Qd4mSIrbn==W^hl0gVi`y`{lrnZsb@u)CRza@+bk}3Pz zd=e$6{bWE^`%e%L0CBqaL@u&~oX7D*Vee>8UH8ZM=#tf){7j$*uVK@@L=U4yy`!O_ z84C_E(IRX0*LI$RR4A+YqJ3?n|A}f6Lrk#O-VG+E`_P;Pz05n~Lq;{uRZIHgEvy~N z52+1l#Y^~d6&2Ds$0jOVAL?XLRN`omd!e3Wn@fj@Fg$-ru`s;4j;ogB!xyD{e9GeGi|4ZiCrTOPX!r*rY2a4HT1j3PU-GU5 z)v%qX$*Zn?l6;XiuiPXL+~hBES8#pdi``3n@>*ALjHB_~E1#rzz-M9hwNq%*S(1kz z?4;u3Ze7+HhkwXWxb?VKl$|hb(@WNkB^W=f#9I^Dx9_*J2(*!e??)d)#*z3??g%7% z;~kCb;eB3w&}r9CQM>nR&ou`dMN?uG*5-aHY=_K%-VOVO>W)US#!{P&EFMeNQAd{u zM~dk+$Lpf}Ug&RnVpzbuE*%T1(=LGnvmz9b-9$B(t zUUw6>L=v}Bh{lcO&HG--8Ald4%3&q;zPgd~(`%!jWdEuLS=J%;((GS_S9HS8x@Az6 zdSj_vpJ>rCbede4y*zFqdydVJEf$Eeg-~y_={63sWR=&cFpt)kZbs&Lor>~cP)48L8;Wp0@e6CgL(B=YB!H%iD7G7wk*YDT%xauZ z&!&#X;Z>c8*LJKKE|Fx*3txk^Ee|SaW4FgekiOO_?tR@Evp?31#;;jn+=54%ry_l0 zQzJ!dL_vn3Y|YT{`uWhxmqGK>;dtXa=<#}^$8&?DIDR=sh7;=~%P?uJ6C?RLSdcr< z?{-Pyx?B{QWV-P^CzgDT!%cpRn%LVe;%w3$aUMaU#<&5wvguH!`1+_bNeoTeEt0KiHXM+ zpRF_#%qK^s#>}jDllr=HOH%t`xM#mGa-PKeN7Dp*OeucKER|na-X9}_A8B%N-cZF{ zx|6+lHno)SrlH|pkdtqsrZg5kiURWyTPY{&jm3EB;PCo|;AxK68oOC4>OiJluyoCu z;+pL42Cr=N`5#==6Y+$5ay;sb2fo(E`O2LKUIfG?aj0Glul9MBn{jq{DL)scKd zHNABN$w`IualCgRpCf zc{zt6R@x9Ei6PXo28UPH(69oo(Zn?3kbw<#g*kp&!wiWf2g~Cvv&5ekhRD$nR%)fB{V$caIp}{*(2AeN2z47N5}^2#P*0- zXxirynZ8*go8y1o=j%m2Y?El?3>IsLelicDQJmj7K#tUiW@HNy(gY3zbopPEKz8B)4$$L51>VIn!Gf8-ddFz&WhoGLh$-FxaKV__V z$px%{16MR&$l+!z<1|*Ef~KUy(0KX)LyyfUsDgbU>F5gL4;Vq*9hY_R&#^U;2en)D z;35BELn3a`>t%6Q>EDr7Nw9n+THoi^BysD{4U#XLXe0fXTV&dgpSrq{wPoy5{_^NT|s?sx0hXt3tg z5Le}5m9>g@_pkzonmvN1GDjS?S_IaGbTXQv4%04WQi8p>Kci-;X4!-G{CL1!oqCphUyS6DFXAgwOa}%ovm9S zRa3PJ9&0n6VrrA?KI|jd6KSrF9iwH6_s8(_ILB7?H5=;ZulV#Qc0(0oT_H)fuC{<0 z`x62uTC{y=(T>OktibJPSvzdOz$Q&8Glnu0GGI^{USL~dnzeC8S4;GPXFG&wo}po7 zHPGPFa3H>xbttxN4DCx7XKOv`rdv0ykP$c6O|zTG+y0Xv0EBbd4Q13#KvFckNI46+ zf&=nKe_AOQ`-P6?i@Kui$nnr{4tli0?RACQINy&B08)G#%H@*6?df%eEFSdUESOx) zRAB~I@PV&7Wq+3hC__8*aBG7|d+|Y~NBv?6C9L_{5`_D<;HVUIu{oC5@VYM?)Hn1N zCM0J!T$5uvm0FRXyRB;=%mr*dsw+z0o4c$eWT7ymqO{~TUheIn2tp%pmV z`3_A1nk!Fd1D${cBI(}MK;MV_%m1ICu0Z>WzurI-Bu7UAX^#2>X+F*aS|%aNfci*?B|yAr(33!#QqCp~7TPC3e-iX> zpf?4jp<(?|P*nL;}SNK5kDj>gN(m39@7me7xZl$%}v8YLyP9!N{* zA3$0{S?D^RkeCku`mMefXeu~6-5UyYfu!nmAdPP}&=`rY4oKts70|ij?|C52$7?{> zNn3pr=te=CfwZjt1*GNNC&QNW*MYR02Low2p9-X9FbPP*UIg@jyln=M;awoD!CQdN zm#23)bPv!p;ijJfDc3y&q`bBqNMrdOkmmf4Ko?3Zp93i$r0rwVmkp%pI}%9KcQ#O& zyyJWzeaAE)O>-rXzHJE*uLH{UZgNjo0NpQd`vZ`2&f5-c1yUaB3_s=aju4Q(V?Q8` z`4AwLO(z0re5V0ve3KkvZZy6dfHW;H0`dBuT<@Pi%0r#O4T^GsG{gx&yeK=}8w;eh zUks#mehHA)`79u=vNq681kp zymBbl%R&CNy&Vjs()(*bT0-mz6rBWguf#kVNK?g2IyF^1&QnwM10YS+{Xm+k2Z2ng z99jpYsrm>=Q}u5kO;xvUHdO}#X{wF{GWF)rD4+_-(L{$X0n+p>04kTK-viQj+yOLQ zXuk&1oIe8u68PW+AQTJGD?msN(Ca|F)+pWkBhblG2AhF2<{dy9a|Zlq%m)K$%>97i z0b%Ch4&&D&BS?W2AQ)Jt;&G+NLKpubB> zUk1`x{sg2_?_-CkyPS?}rh9#Xv;~|5q&$8Okn;F6Am#CSK!fBRbwF%Ex!(0aX@Yq5 zk@7Py`_caV2_Wsyp99)g{Cxm)x1es_ZK_TH;x*}LjX;`~c|g2MDBZgf=z7V~jXCedB?~2&w@3xu7e6 zloPK5LgYx_O+dewuy+CBKWO(l+CxD53hi-6TLnb@G2L6^XzPL2N-Uck+UiheM4>f! z6wp~xR)c`FtWF2&De1cyNIBwCAkFzAAg#+NkmmeOp!ei$KL^sj``18oh4v(n_UtQx z<_PU|pxJ`{;-0<_q#-^A(pa_wX^1prQA6|uQpwr}=yFNv(LlWg9S3x%prJsG@{Vyp zhY76+=t4oIK-xZL0bM5k7CLktke1NxKnF>PM}W9=4_XzFmet!pT2`L`X<2pH&z4mV zke1cKKw4J)fwZi~0^Ka{JqJknSnR22eg&MyMe zoL2!Umn;C%oYw(q&hG{?Tmqym{t=*#67%aoBLwXP(ss1}0iO3wq4fbeUQj+zm7s3{ zT_ETbAk9$`&|pd5G@x4r%>uej&_W=UB~c)iCI1fynMbYO4YXbSJrAU@ybbi3(9(K( z-aiCo0_oE}KpB#PFwj1NCIWR4bPlohR{q4x}X%>ScK-7f5-iH_%(+Zy=Dih2cQjbIt(Lw0sxnZSi*t zkn+&4fgIe%9G4V9-$9QrrX)GTAX)IfTG?wi^8cSv$8_WJc|B+Y@ z2ihU%XrQfvP6Qh4v3(2!8Y*Zs&@e$`fmC-a1TwlKPzOoh#X#ADB0yhAeDi>I3aSU9 z!kg>e38bn2DbTs{^a)3M0Z4Q7D$scn;?F?ZJ~jg_7uu&lnqTj5o8L?z&F>*VT55fP zG?(81(p(O8w6lOd(UbzEOU!oz={tT7q&?yjK=b73^FXTGz6qq9vl&R`Y5EbKS1ml$ z6G(aJ8$ilAqky!wrv7svO>=slP4iJeHIn8*K$_-BK$^ZXAWh#aAWh$mK+EJEj|2Tg z&@(_P_0|9_l`?$;NTuF8K>Lcntw7%rZu$&JN8sL(cHDgckfv`Wke1acKp#nbX98)? z&jb3K(53?&A~AmlNKk?`j}@?*~Boj_pADj!s{* z@5lvGS&|2|Tw?w@&|pD>fK(P2096WYERd#Z3eYT}T@DlybS;pk>JgxMnie3F79f)r zAd{B9E-gT&HvrPKkCCuls7wv-AWO~Lg*=Dk1*3cr}()a!oNZ*@w zw0-Y^KxazK`9NCJCjx0rj|S43J`HGJ@pmK8NI`c1jS{pB=tx1o1yTvJ8c6MCzXwtY z@;;E-rM3d;d()4xPY(gou*U#t*l)V0rvho%NkC`G+e(3k35oz|>K6kIm$py`q;275 zAhkyQ0BD3fy~92InS1(cAkFV`hh7A_Ekqf+&Y=&1elE0r{U8}6zWzY^wxK|pmQg_Z z-rIpR%`4o~RY0nN{uO9yCg1Ued)g)6#?lQ)-!>6Q?N{YM-MybU6lj2;wLqGxw}DO)+GZfF>1{yD2OYlQd5_7{0YHxn8V{uJ zxBy7wD+AJZ`~v7y@%I$a1VL{AO%!x^e`_r}AE;Dll|Y)KTY(l!j_w1}96b%BZ+i_$ zbF=|ypoIMp=r}<+18j~C1JaRKKOk+%!+;(Uf9C={D(EsGjrl4djqgSvjqf#})5Ko` zkf#3Vfj0H!K$`k1fK2LvuF}*4Y3g49(sJGkq_zKVAg%oak3-Kc@5lpExi$pI)GyH0 zTE9T1et~o>9tBdX?oB}2D((i-5_$;8a2?REX$ry)od=}j z>2inafyPL?{2q|D%iDo8=6is&UH%LxEdCyF{#F3#J5~doBu`&)Pv3S=KLk2io^EkZ zJD*_lkqe|X(;Gjb$5sXXm=qNVi$Qrb6xlyk;AbPv#vg%4H$oht8m9!THO zZIJDgj{#Cm;hTsrK+Ypwr|X>wxqfZv$N_DM-fPd& zFYz}3Xq3>(fi#zw0jV~!8fd1({0UICpo1`kQFI}YKE2w}_QkMfs^qdKkmhm&kcRji z=u(L#7YeJ=j&rCGNS~HF+IJng3rKVHYoI}r<`qDf33?q!d9n|>e~o!4kcK!FNJE?p zq#-JRG{g!Z4e=)+4e=3>hWICthRB5Kpdn5GQhz4_slOs1^*7D=`wr0lsMTEWR-hZD zet!m}^}7N{>-Tjal`0kCvYXe5xvat@Hz;3A-3$kSVa zG|l$_r3vi`M|&CQXHtG|IrL8;)i?HmVxi~=pgH32c%Zq0&IX$9k;Bdh(wd$IWLh`S z2zlE)hi(N@zIq$z5(&E*s6x3bS&?W#WEdqoD;JtGl?LMGc!dFiK zX^VORNOS&opc;AF3960Cm!p7gmijmWNb92zNK0}WkZJ|hKyONZ=K^UNECKqH(5`i~ zdw^7DcmQa&$31<>q16t(52Q7ni7rjkcQnvMN&O%oZAatX(+h#VEqpZ@NO`RiNcnj-kZP(+ z99jxAUgG-+koH2$9D3TJR~*_3bgsPPGa!9O4m!(1iRBO=Ex*1Febb@Q4ow9*PhzR6zYg-=HV>Dcd7AT8%ohpK>7Z@L^vM|X>XbaZzukd6$01ay?7c{z~A@)po9R1CYk@ znM2v9T3P{+mcdvc&E*+Dn#*&6G?z1gG?xp2w2tlo(h&CnX^3S&8scdn4e=(B>Tp|u zE|U8A3`pyeiiMUz7a-->ET9tc*Bwax^>Y4>aQ;pOIy;m3JqM_tpeT@O$w124KXJ4N z9qnVFA4^$f7JA;t!cF@EX$w6B=!f$3XrS4Gh68CYc`A^$^Rt0|AWtVde{-C_B|zHt zZv?ts{N3*S{l@uQ4y01$1)%SXzt^3=51qdqK=_aTqr-T#UqKmgP8ZY_NO`;mkn(tM zpijCoL>|zmg8Bk&6O<41nIPRP*noJjEj2HrepFWUnhGp2Jx!u%jZMAE1%t--CgVONE^k{|Ibky+!1ChfT-vyWFF`yrL5_RdHQcS) z)MMeDfw!$Ozn2>KhE!san|w5Y-1B9^E;p{`z$N(xEOc&~64^r>|1xGGfk*BtHZiY@ z55WDVO#_&6*F$p&D8N}O<1S(a-3wm$F#(mn%N}xiOW}ZvB$^A9oq?N zjN8oOJ&sB2kx7sD$ff%UV&tJK;t{(d)Qzzdj%kyt{9zzr{G9@HzW75|Y5YwB zQjLmQ=Ha4sQ~_zs5ught#9Sbac`=Zt;94LJaWjy{@*|+3(&s-4q_Hdqx=3Pq21sLB z1EjHR1X6$RlP3N?0#bjU0BOws0@Am2>|jv{NT2p_=qMnKuOHA9iLXD9#y1p5-+Pin z{uWTI{`?;o(H61Cj)6%?nKb~o$t`K4&4K!G5-u`ro{XJkjDHtkjD3l^Y=PXwfOs^ z^XGNK+>!85Hjsum2uR;M5J=x~B2Yxa4g=D6oD8HP&H&O7(}6TZ70_%65dqQ=3xPDm zP0rs^pgH32cIWRWKw2)#fHcHPAdQ)OAug8?uL5bz+!bN!5=cXQ2BabW1vF1W>;%#f z+!dkz4h2$wM*uAle|>?}UwI!&fhqoYsKH`&L4MZX!8;AAg-rQ_i}(VzJq}@^+y0{ zs!jybu)~0EmJlO>Gz9m4sK0Zazha;Y6=tKbzS^7~a7R*SWI3d}S8uG#Y5NATXWx8UFI{ zXFn4FNY6Ed6Ar}sMML`-?m3W7PjooByLl`Q!_dz-{5_a2Bz$$46`3+*Nb%^Z88fR( zXU!^|QarPyyn0xKxVmI=WXO;Sk?OG}v&#IW(Nz@_N~$B}k@Bj_;rWSU5NheAH6<0r zk*Z{Ydml4Ae`-ZlNhE*3aQxq665>y9OZo48lqrGJD@%(bWu=wHvrDSWOQw`hE-tB_ zHmf+Ik5ecL#3Y3=-0S7_$YK39{q$bc13L*ayYGM&xMm@Gl(O2J&8pui{B16$8L6ncZ_h84Pd3NE%q&f4ES|M}LMtLmi-0a_I1w z-+{xuj^63rspAa7pZ$=pHX^Z1uVt$~9lS;4wZq`<3%57ili?l?muccx7w;T{GR4YB zTF6@p&Lzt9ZZjyv8yd9@X1LbH9lp}+qS~<1JVyH>zO-SzB#220HXSxL()q_vu<3Az z=%sJW|2t+_E-Qs6$N`0j?|x6B7~ zpHV)oEF!##S|NM(XZ4s5>+b5#9y&nYQLRFW1vM*{>qb-(>&X^tBF*Y3Jhz$^#|+9uM9M@& z(5z5%O1sUVgiI9Etl~AS3}K;H5S40J9|-D=SBC{9VkY)Uq*FKLC&*0HaUbdwFJ%~p z%=9(fL zDwVKrYbRA*#s#UX>scucP`fX%(lOESk|LlvAxQn5!^=FlRtUZdiKIf1NQEF#$eRF( zqcoZwm6r1GGA8_vO)B!JBq3(`gVRLhEx_>MgpTnd&#zdW5fpi?9u~Hv(Ac$cY`Z4- zf3MN~3(ZNaLUxQS?aMz#Zi|x2ZeN=gkv1)&khcPyt+bT}iGC4(H*@WljJwz@{AUm1 zv{&C10BI9&ZsMmnLTroJcib6*?k5aiJhd+VfI3`d3zMz)c~@F*_XE3f|YKH@{ zx#!9%o)ZMIod(C@6`;`?#%KIcW$BAwjGdO%XJJa%(6O_%tQHrSmX(!MPN^uZ&Kofz zZ$$r*ql!l4`4o_XNh9){1m_R!K$6Mtm=7oh1&m5shu_RnFk$2*zj>v=*=h?43eZ8@ z@1o*(V@tunxX0@CoC3VUs3MX~c_#>Bpi#R{EKTj1>aR+%#+UNMk>P@`4oeIuC^*-9 z*U#NGm6w%QPML~|uPBY|FlG4@unCt3hM$!GeeuVY z(%k*1A7jh#3reFn#EVKpY$uJzj4Xp1qw9X!H+7um;6K=N_LgJY=S;pr!$mQ*>J*Qi zux7KeDi-EzFsT{xhIHQy)oy=0;RNRv;P+r$6;-yIneGu)c4UPym<8=+Y`ZH=#J1@k z-O*db_WU)tTv3K~MT;iF?FTmtZau!b$f+9C9W%WG(1=1F*YIo?+Mx!8ygaCZ43X*e zH7MlO?xP_xz3&T<>zcmJhaEyBVqPub1nk<)NiJXe)v9T0L7bP47)LRxM90rth zQ9|=(yJsa*T7Lf}s5j8xWZhOG9hh1(>B-D?`$NAEt}b90Yql%m5BW4_1NJG&Dwq<= zsnm`5M*4~Djak*2sL#n~1R$GQWA)lIk{c{KHy9W)#6L*jL`N%)H?=7lZ!VkXH{LY0 zVUra$f|utspbc#|vhG4~ma;C9vMy1`>kXNvv^;|nSkNZIgm&hnv+p7k#aYoxasTw@ zpdsz=Fr?|p{mzi4KcidigS!5_Aj1A?JlvuvE+a8vr(?^uSmPe!Tc0yg@m8%JB*0Ol z+-9FquK2?9xZ+VQXB}jfCQNC@E_XbTwzV)2F zXx9K8Afo(wpic6RL_+;pJf-f#XZ&RJ#$INukFz$t?P#%|d(GMO;*5AL+TX;eCSo{d zQj?!t^ki&m%|z0=m-$V8YHdn6yqJ6b`9Te=;V|D8nzp>g)u4Af_8dDvcQP*^+{NH+2>t(5LRL90;KU`p{A3LgBZ$@?9 zVw{$D+W0{*z5ANn5_aHqh%1}?)!;a0=NmG_I5z`YLcb#TG&i*APdx4(a}=pMK? z;5S6D_j`QlSeWu!$HGJ*@0*a2X+j%pkm}+LfgTL)hbZLn-VF^~XHdxd5fEi_ruSom zLf)@{ItuMUgF@a~h-ZzD`!O^=bU+PAnA;dVZd1ZB^XJkX#E+SePc~*wT?b?uc1;K5 zFriaGqHt)z5i*DIPvqlEK4yfh-9ydX-6J_LO4z*-wn;jmHWPgO3)wGjt|=rMCa@)d zaomF5!Dd14AhV!%h*{A4J=CD;T12XA5$P~NX&fdf&5a~wuSQzJ0V2g4Gh{OrT+)<< z*q#lnk7F3tJlpOafxaZx6{r#}^_J@BZOD)|1y9awsjkPqzz*^34g`^5b_ar8&e0e7 zwjY)Smt#X@V3&h_o`?Kl`MhA{5QpblYeZUWL?Q1ql&;by7~~t=wV~GTL2Ty++N;0T z{vBwq35&fwhG>-HuZE^7JW||bbj`@X3fJ?{=G`VES-DCH-P$(JrRiELL|Q9EAuk_w zp)~G;R@&~6%=aOc7dBHXypKRXrcWMOIkz}cG7X)nL0Zb?m66hE)!5c1_SBNf$gqp6 zsw(oinI**{-EwlENIwE0u1Hy;y-jN9P!?@OmxBU|pkK8!T`p-AS`#tUE ze-4*j|1aS7hx<#oU?=Z0d?_OnDI*hwybNdyO3O0H$H;By_D=){{^yLNo^#1lM$fN6dxl9jT2S8&|;y`5fm^zYFa<*Xsv#wV>fZ z*9b}^yT;*ZP4bjggONO{GqAw$k6ol!Nr zR49JUX%ys-5L;@i+|0|SS$Qaqu3)^yGb7cwZcI1*o(1ac(#e=d?$q5RL=N|6`tiwv zH`;6?z~yMc>Dr2Q`fh@F(J$s{5du*rk1=#CjUkC<2;PstqyHA+6kQ(tw`dgHVz~5M z0+(fRFnP+Hb4#-M2;GlA!1da>Fc7#?e#w4hPaR@F;hbcD$pFceElPJ=^XgN1Nto3mlC$ zA3ZDY21on8quuXl4+7~KcuzUn^Nz-<4tDK-0F6~j2IS{TWTK0wBW5;_wfH+bAXpiO zY{X{;dH9l#zj>TlRUH{McU0A!(@LjC{EfmtldbK7FSj2i(0s6t#CBP{(vDmF1_*`z zEoC6C_RH+P4eVbE)|{z7x7(isaHU(Uao|jZnhM=p%r5R~`y#l^&sa<$z>MY1Gjwd! zTf{uhh70?XcNtu&l@M=>3gFI#I|}aQaM`r3fIAB=gx;bWxbxv&4tD|EyWryFo<%=~ zy9n-maIb{R^7{^4W@#$Ev`GMcHyiy<3Wn zTiA^_#%1j8&@oma|| z*&E&uneN5rm4>2B-WOvaTg#sXK|Fc?K$+yqxx;q};%w4~@)VXQZ{MzbTJLB#1HCCv zZwJyDrn`X-mbWEp53k}WRT@MtpC7=;=bvHv9Mm{-cigJ+;!!noIcmd7;fc+x?Y4`- zFRq!}+#2xK8P9e42opyWM!MDJl9pyBs3wd&r(gh*P&9Br0T#SBm*#V|yBypRXV?ei z0n3cm>nHGce?ZaN&E`uC;Y<-HlPbNBiC-SW%CsK{67#V$8tcH7T&EU4qj945X~G!| z`|kh6>cv`GyI9W|ajgW-LE9=GUpgn^B(P8>RF}?{6H8dGRgj!==m<|Dq2T4rhJHgqI5wQ7^p9)`UkOj?Jfl?hikm}CVxvOeTl^{uPdTD_ zC?j%1}QTO%ul4U6M**U}!v@Vw~=&Oc^n{VYWV z@oo9$C6B?##5%)ac#F`dc~8J){rwg$U-LP>Q~@DU1%xQ%aT%1-Xl7NKGvj4M3v=qA zj2r$-#9=)VdvhFiR{{=W7^ar(;{WaCurG(hXq;!&3y0aM9*SDo=}0)g#4nr zKc3hR>xf(iN$2Gm;%^L>JqVX|_mJVP?T)*Ml)H%3bgwj;?v)1a!rCY*qti1)*5TOd zI+zXS@9-jhqJ_CmEsf?x3vi0tj=Ju3BWdWYE80$Fb30Q*a{&eH;~1Fc@rXotk<1B%e63EU{vwk4Qx8N~O7lKV#mc?*co+XBDI-mko zC=n^!5QV%8P$Nn!F-T2MN~7sX{rOl)yGNg~=k44G z+tdf9*7^pcjkeJG+S2%XfYY@HB+|x56!N|gPFC6v4GMY791V(>JT<0v+z~+y3ezcd zh1;SE-ZUwb~UKyA~zLvK3!$=%mRZ|&(1~|BTf0M{#K(@=qCioK0 z`rnA*AV+s&3>{l5Mg4mPE_vxyxKJRy-@)Z5V=df1a9@KH-R5%hpJkE{4CR|x6%tF&EKjSg7h$$+AlqlaUBeDz2G2hUC z2)iE3?KZgkz{OelV$!(7*!#XfB`8}EDO(VQym6=nrSa|srA=|PGDibjKwu6HXGKop z7y$wk($TH6$%@h3k&U2b4K2)=wLgy$Co=^ZiG0i#=1Mjck^fH?=He7ma^^Y{Px;}P zi=QBKor;79nTugqNE7i_oS3<)ODd<84s37ns^Sf)Oz>&7c#CH^mRF47D8*O{15QSX zSaSzO)>!jq$A#>$Cm13fmSs?8@uXpvFOHsAgc&ApxnaU5;U0(IPr>CR*3)oV2hYGo z^?QHCmog`jGAB{Un}u3b8YUYBg*+~4R@x1Y2Iic2+={EiJ8`_yPVlDk8--W2D8tU? z<+AstU}5OQs`4>-%4Wr8$q%`TzxhX_$B}sBV*!z6!yJX@dChRup21YiNz>16WvV1b z4we%+h8&V-lJEjJfGJu9m*uzGaKsyqBZ!nEh(aC(lF}*+5_Rr^=NL^;8S89bgOKtG z3JK0!E)7&C!!U{b%lcAnSkxM-tL7%LV6`Lz*mT*!G%-stv(79&Sv;|b`<{%W~B(8_kvwAgN{ zgRu$)>c8ERBg^J28^pVm3zpHEjQz-HPQ6LaXu9sIwXBxW)v_9qvKmpy<0?s|M-w8m@%|4D{_EO_Tw&-!ko>_T;uu+p5sK|1|&aM4&r@ZP$K!k8CQP% z-2vqS{jxiF8N7Z$fKeHSe#oPl{F09u%$X`L7B#~*{FY4M?Zz0+g3(?nFylO1i1BX9 zeHNDuvIgZk1#Ceit5OZ>G{&d&IGO0zv{{#wiLCE@{PA;Yn##n};8IsFgv)9k50@=s z4Zc)H5-H;nDdQ@QjH@&%F4>QScalA!t7Q3g>Ky7Tdr!ADH8_|@(JoI4}(F^ z4=|_=a|l8_oNof!;~L@^)MzYw`7?EHUEoh%U7fi?czYs3# zv&1mrwO|NkLLy~CqL8;89HF!w28r}k?fIJUPVyXM460IWK%`UU;3vpw^@wdmfYWRk zyx0o|MIna36*OmYJw*Ae;#nnA|F2uMT4E;K5qI)Wfsn}Z<&1|L!6o4!*2hLvBD<$N z{PFXANIB>QxQu6&ao@rZU2k+pYgl{+b)aj&VXVJb;Iemn6)x-YcZT!+<~WZ?Igbb{>A?+3+iH-?F4~srvGhyyJ4|Ma z9iV8Z*qj130O?b^;%(&MT)EVPF(&R^kB2{|93JEolzBHJ6+;5tX~XnKh_5xzo$YN9 z*dv&e<=ga=vToOeIVt)$v}O6*59=f-_uc}x@!cEX((j)Q_pL`|tK1_}?jzD`ihp?QF#}O6Fi< z^72wF!#k;R&sW@9+)ipcy9l!C`Zc=&$bV91u(DZJK{Y8I_6wGI7q~1#Y`K%p?n%^= zRyL7VHc`lxoD=V+| zk*DL`(_)9F1HC07SQ+ya z`Z&`~a*w*U^pr|m+1X5V@hjX>0tr5pDij!;;+qY9DefWxS=@JaS!s2t3=kPZll9x2 z2K24pCXaHu&#VQ%%(tjJXf9_taZR^>itk7$>nyvY;O4@`ox+Q_$mAHfr@-w87h4Rx ze7G#%W8pGc-B8oYwM5FbL~0yW8u?dg5K)1BF;{L`j98Lyjae1mfahL);A}M?r`Lto zMhn;a_Rg${7Okl(S|1IsM@M|8@4@P5(Q0mE!zP#Y6YGm^bGu{e!YiZUmGG@6wp|_m z5T^SNm%Nz0_!-~3>%uFdg)2;BTOKW1Zf*H6^E~Endv)Q5qJ@uP1pSbE!`0yrFtYw& z$%;tF#!HTSF_LB9)p&8^dD)L}{>p6Nc_IA1hkZCm%wk{Cmqm+~)fL^(^W*Bn@1t?w zkB8duqeUBPU+Pd-v;hxMPKzahFh4b%g<@~$4wh)_g?DrMRJRDVun7oR*U`Tf0u$=P z8(rXN;l{ecb@heo_^rvc^yWs@H+V1h^))jBexVDRe=MBK;G!`i49IvylkQx z$3UD#SJss-Wq9|xy70~Qx6DBvT)4XM4fXY;NCH~O%M0O69im8meSHN&_{#IXXwiLj zMfV^PwB^=^H{p%+OSlk`fAZz1N(MEn&3y)L4T;_q;w z%>g=0&`m&x3c4F;zM#i}t`M{mXs)2OKpM;24pD5bl$g7rwl5cdxC+)gSkQ4mIf5nt zabI_?R|@o?AZ&3n{;mNs$NK?=Bp(j|sc3%+h^xwTy){7kjz0itN`H`sgyYdLR_x3`{6 z!~9=v&3POpQ+B@z*?m&LszG@_5YKR!nRoKB0P-;d(ElU5+fp5Y7_$m`FEzihpR}JG z3*4;`=R?<_6)ZcpyB6n%4m`p8i(k0914Q=<)$;!dp*k>F;m7Z-@c(J)8rw>qd^ao2 z@stpSC z{ZO`Z&th*7vJCx27|6J)_+_{w;l2WQEZkS&R>1uo-0#9&3-@8Tufa`2*mZEz;r;<` z2rlAY)C2CH;PR-B4RH5|`xm%JzxJ%%^2lqO-o8Z#QE{FNT{Sd#O zg}WKgL@HN#yb=4Kk%D< z+vjjOrg;}%x;>sFOx+$&6!H#*uWmv++@O$`jv-Q4p@j^>2|pMLF_uiPr$M-%6{W24 zon=tSn-0WLSf*ELP{_LiC{t()4GMYZ!BWIgVy0JY5R8;S`v`5OK_PEFMyC2+ng)qN zv`{o4Q=X2g1==0>*OY-t5*|COgFo!QH^aaqfb`OyzCZc7chQRB#63UK3MlCZ--}V0(gz z=}^@AL1@mo-asHV*PITd<{GZp*A|OYm5jfufz;H)#TmJhk6!?(iRrgM+a*3Ow^S3; z>p*H^;smRjn9?BT)WpPdKGej7(>YBFh5@OGX&jKI;7lNW?>T%b?_C6>X}%Lk(~M&l znlUlGfv3%xn6ArUche>l6BG_Ti^nY(&|^=(4D(9z3v2fpw_H86yK&2y7)!I8BINPD1fVVI2HQTC$*~{6yn|2Te0zQeom$#E2h_`o20s=(DNXt_a?Jeyn zwVnC&1n4Ed4VX`<%g}uKEZpz!HJ_GNmrRZXukf@BIQEEDX}f5%ecdnJT4%FuZyw&; zWAAAbt?kVbBGnSusrNEDPGf9t{(o=R{T1uFTVtD7L;ROyo9C)QziFO&LwlI!4~O-K zrg^S?-3XVP@85-63zw$(YvIx~|2?=gq2CRcrunDg(lq}(T$<+p440<)ZE$It$GTfF z&1b`1{J8ygLyWt!tUyJqCrmUjywcw1*ACspVLDtnbY==u0up7dAD`+ml>;8)CCAc#cy| zJP;=FI(3|UARjwr9o(A3t%c!$p35*?VaRRs{f?F3_%h1`3UO{x>>wj&VEMnkM`!o! zapepkYbyRMqg+s~8{=C*pJZbg>un>Zu2^?@_~WMn8zT6723*!>C0sCz_a}Vm>SH2Z zeN3cV3zf#Lg-YWFiF&g=ryg5!HX{Zeq;-v#{m5!8PUR|jJ&4~tkqtU%9^RXXQ?E2( zOo@5)1o%U;-7>`B2AxC)HQO*8k3Ex*FZndjqyNWu>g=9vu1#4~xRHHce^U!|SU*8t zjDYu8&oyvaZ(#mBs^_l?GnK8tudz5z!II2Z7}ily-{|%LxH# z$1rRmT=aT$P}*TVX)#Y~E50Hu>U)47-7~$*xw4vp8a+tzE2xAh#Ti zLu6Pl$G~OX^n=TKr9@F~AyRH33VAD0yGrAt0;MUpVEdpP<(-&oY~N_PC&)Fp@uUgY zNVbp~CgBI zp6vPhI{%ptEPrwgpoW!3 z9#R_nyt+ahEU6a}Oh}-8$*wNkQ-ya7MLfA4H}C&J5YrXhnRN_kq{D-J$Y)p?A~Y`9 zJQ@1&hJbWp82ZV>-;??Hl8^RtxI8OT)y^mA8L_knA1)zx8Wimb$8ENBG5|NVao5bg zXbo|j+N3cgJO9$|opopUB*9|XE*NYRbfJ^?G50||87{0Wf5NSIh!j076 zP^DdKknE>yu|Fo)^AnV;ji5aeIJwK;A0HKztVNZ3h-7VPPd;mfIf<8JK`n_sD8>A> zg0&qY#qNj8e(#rXSu1~ZwL+w|LZr9RDy=`Hm(o(vl9JWRLcDEUGqoZso#Drg35zPH zmQ+rjYkIrURh5wvoP$|iJhQrL&fHW>${lu=kbhZH+mSneNzsPE-?U+{q~3?ilKP7) zDIzT?BFK63G}BvYP}}%-Gh%tLnUXrGDgXLQs=W@hNVQ7hL`ovwO|?cgxEdkS8X>}Q zwy0C3;x#6+Nh2;gs<7Fphe@x2Dex}dSC@u{s$7~b% z`1=|DzTQ;SHs$zsACJ{k&MKc)SvsXRGW=Cgo#kLOiXHp0V`W%-Fn$YpLu7wK)2&Yf z`o}Npj7_8Ol|*uTa-``FC~Xh&oqV0?UP)9wV`fEZab)hy(pk;T-}?7&w^W>|N+Mh( znc%Q3lF*myf!umufVGlt;CXHnu&Wz}B0a9se|#kyR;MvO!#;y?Q;;ZLvIEE|!)3Mw z!lm3h2NPkKyW$Pk^0^bk1j<6(IVZ-|AHyAt-}k`fDc?VVI~(p#;a&sxKDazT;b(Av z0GAVWl%qJSO_b8$>KY*5I19Ekc%ruU>l zA@3!ibfLX!P{`{E-CpDCWsvV`$xTgmwRA-ybq7lipdm6%#+ePbgT4WFbu^QxKrXy71m6ufDV5ccY`P$nP z1y_zGy=jN%EVp>j)b47QK67J#Ta9p8zie?FZsr;K6KE;q32ecTJ3MgOhqRohq~%cS zC(^+VQON5J9bIX82ASa}M;*OzfEtB142bs4#H@cZp7LXR`Jla~5XpWwpoB3DizSS|!xAfDmi6}pBV0Sr zqga!COkGz=;08SHEEr;K4b_?8L#us)w#JT&EGQjUl52T_Jz$ciMt%x5wZUjw2ea3oV*VUDvapjq-3m1F!3mzIUt zMHOtiThOqLiD5ZR4DQC2&9)`CXkrNGB(^eSqZjpC8F<8)S{cfL{*6M&_2vSF&|l_y z*8!=$;r{`tz2Qed-6a-Ev7o)-MbN09Smi&Xcf7p;3w*HX$F~h2k-fp+@L_u>c4PQG z#`b`5`~W!;=qqM`*c0pzEW7>%{ri9Q4G_gAm%?5R2Azrd{&HMPRf37N;z-G~0$3-C zM^?@?*w`ZOg(k2y&<(P^N93|1wz;dv_^c!(_5$%ksEY1T z;UuOLIm>(|o2&UyPE)<)qKzqr)*b33Wp@v_T$qM4PQ-SyAKW7R##tweu7rz4-HUF4 zdm!99;2s3`9=NofJOsBFepCJ*0v8IHw*y~lL!q{&HWZ?ecNVl+KF##bF$ktqq)Pn_ zHwgZKsH4H3K_RacC`V}J2H~!GSWYy)%?7o?hH`QO8%l!Jo*B_K_2Dm6am7)m|G`XI z!VB7Z^7QQ3+RwvK5dT3|b3K})n8?IqPt0bFOlfVAoehZPp=L_z>3l6GyRL0dk)5eB z?^Ax}MONCvzfZVYA<|kQ($$7aqXbo&T`TRoT)?cQ+F>U$vh)TFMB#N3lO)$lrwK{} z3Ys6eUX^r8D1L%#r3>-yj{|kdFkSGMhrh`|Z7?O}(?)^< zq!62KN>Yer8sr@qO=Lds+i+Rd=Nc)*{zQ3)NO^}S8LfXJt$(7BcM(cnX;Tc6`u`GoA?1@@>4jiE^p*vNeZ2w7?4fex)zChW$#AGg{ND?B_UxNI8QjY2+LA z*K)6-HP2p!Arec7mU?cx?60PYa zD8E%o5GgMZg*?gzrIi`f+Fs&gGzHxU`iY=Ka-gMNqBGw8vj7kHdkHz1Ly9v=FVUh= zH#p|!0=uRont(5}aw$xL1CvjVEsh%m%Zf&NX59YE~`6Q|5U^zfg$IwjINB?@`8 z;wo*BLBSqgZ~gO)GyBAiGjpN^X&hyCuN%ohXI)YAqfKq;iQ4yg)ESbLbhJquer=%M z8HS@F_G#w_>b<3EZd1!;LYsd4UH3JutYm-Jy|afI5(ev>`3-9I{t+R|!Hx*CoV+H| zIwuNw2cV{vcCbNe*H;=jLjBP`#r^x6nNwL*%ON3_>fw6Fot7$R*02t=W;t)!p~bds zi;ts2@&f;8QP>CXejrfCRvvI&?m@}wxH#e)9qvhj+>Yv2jEo=E#mRB@*1Ignt6%|O z`OSpOGO9Kf0rsRS$BDH5i9#Nwx6&pUByGNFRmY9~wSK9mkvkI0?w0hle<1V^1NH0I z)5fP%zb&=wHVSa0F~P^LdL1)n7b-K@mRqBHvA5K^B+|Mh!nP9Bpwh6)S5RyFcMu>8a;>G#I>CeX*(g(GdPsSGdPsiy8cbu z3H!Iq7TXD4DW72f#(P47t8r}GqU^po&`zABYhC}=PTZ+mj`lW|l3Atwho@@wvkJlo zXe@rSZ(LiUg0QP?C7FIeX|HXCNZSe#W(UBfO5=VIrLnE>T&L8mzS)RJ`;;6()K7x5 zOP24G^(nl-`MqZPlph_7NaeG)PjOp&ldpn7M`n7DQ|wCpi-l3!xlc*e64G*KG8io= z(3!NQFX0v-Z68G1K8SGqA~;iNiw#nptEmE=Y^rrjdyQO&_3AK z*q8j`SZN&i()O{pFR}aI|Mwb6%ALqAwvl9g2&KEW5h86PL?MqYLuowyOlhtU$-w0D z4!cw#gNqW!f@(IYUU8$WRL;eeOlY9k; zorCLZvjmrUW!0c*$f^fE;u-SHdxNpxeCVo#NUMZM*ODoXYsr*`Dlvyii?!~8=eSdY zj}o`1?tCLYe&vfxFj$#1#C1Z%PX#K7Vd#eoSN2a_HR^3YJ!j7mXmb3MZz}4 zG6=S*VzeQa%SCWmHYKJ_{mxY&kyap)PM#`_Qz}ZcZ3;`f5(~$5Nh`A@;rKoh^`k&# z`i0~2e0Y%0mn|HVPK)lc2z0ZaQe90~Z?;AV-i;DgAxNYZMx^KMDUIjtDa}^cE(^ie zQRLSKs>Lq^&q>zC+9m|sTn9}=U7!xAbhlR6edLOsNQ<5bcS)nbm4$FCQMO_6EX$2AC#3)pY(zs+wX)RXJ>$_Y*E0O&L%~a42TB@Ly z>ti?7M)LW1tGo60Rb^``<3?8*L|Pd{AukP8ptKBwV)Hh;+@t&&$-E>`C({62#vDprreNOmBNz0(|b+IdRCJ*(S#7JoOYi0iq{R=Eiox7A;~T3KC!&3J>UC|>4=o+ zh(g{LaDmdc8l+6uta#2qHg|*Dq9z! zel2B3~0R|GGA~$6zh290}t|{^z?UU zbx8C#0*uTs^fMZNEAk~6zSN4trLrMMtf6C{OJm6X&U5L~rjjYzk&iF=n09DN(r4Dep5n13v&xb+so|-Y;L8iSYGk*R z;7SyumLQRqAW_I$kK8D2gF$U8LGI`KsF@Pnr&(SMZtmN&mBQ4kQja*dRT*5l(3-aJ zqN_Momm7io%Wd)u^o2khIT2+%y_44;YDM}r#(=5Nn*6F58^C*{KXbDYR&OXiOk0|7=LuQml*`u_!l-@OnrKp+Gt53qG zKAAn*cPL=*W8zo$*`kkk{T#==c)LkXbHAj@X(BB(BIpcwztYwk)HXSdgZ;ceH&bd^ zNlHz4ZjTnraSNH_Yt8=h*Isv7n`uRJllha@$mUmE?Gb715#i86l(y2&F{o{|_c!Du zxFp7}r`*(R?X}l=8l1YVAVC}JuEZ+6=_hq|JIz8)3kw{CCDCALhRN6*^+Q#3Nh-GjyrT9U>ylY1^ zQ!A=UA}x&!?GZqW2k$nyy~>pgk(LZm2&Wf#p3-<6s?yrRUyxSbDb1A3fq`itTQVxQ zgOfmFO+<_dK7JmOlg)NdOZ?cC6p@w`k)Ca)w3SGX(%Mo|-$g8EG*eQWlJJn0)ajMD zP^ql6vUqk$b$Q8@^2x;|JQ^xx=GqEVKujrUizfBFD={K1F`^JoMesbOtud%=t?os{ za&t2!c3aE6iimi3Uc6t|-&OMyZJ;T#>GO;HW!^TMLwZ-+V-RVn6NNlZrzkDQpthCz zhbZ;mG*jw7Z@JXl!TgtMoyZA%PIR=T9dKQ}_TfZYBSgA_OKJJ25v8?7a?C)D3~HuE z&Q2m@FRrSpNVQyUitl{dq<404B}1eoL!`Zr(%Abb4JD&z{Frm&;^t;>v&v@pgt>fs z?dlG7;q5RV=)rP*Kz$ctC-F?piFk^Kar3n_ozuARG5#i_Vh#xyxEY3i2H@|X`S_BL zszt?OLsL;)G^;dXCv1}HMP{cmk$<}yA<`NlQjw=Liae!B!_Gj1WwR~J;*P!|wBH@k z(9n$eU20eFY&@{>0G=I*$0Y6Z7=n6@X^kC^TfwC=Y^%YEs{+tiGyLO+Qx8m`ZP&K} z4-bgS0?_DZ82;|c!g;@ZCuRbbTvok^##jD2FOnq zjr<%4nUmR_i|*z_BwsAQwwqriGV#FnQ09xY0C*`94O)mzI``l zQJiN<1$`ZTM7p;xLVp*9o9-P0v<@Yc>oHsV3hf-A%dy`evDm*1Pbo^6ZGOleM}aw5 zoD}=H;IJiLk}I+LkH{M}>g4M3DFu`K2Dk#pCs3=C3>Pa)ACY~sjp z!Pt?bCY>_+^wZB6Q-CXr&V?!4myDXq%gQUKOoiT5Q5wk`G2*|P6x;>Evbh*#^I@Rr zusn~#-&FiP8WV!9M1~B}5=&<6O?En+7G3hEC_?l`UtZkOxsg%qhw?)|IcRIVGpd#35=c()0~Lj-@*z%8?IXDFCXPwoBmU=(CU>C}kK_wo&-M5@cDl|_6r zk8G~?!!jNV24xcR4e>W`Khs3ylqu zDC9*@vkZ~x%`qtCO~iH}4O?UoM!Z1kZ>2%FqNH$Z10wRGXXRzokIIUU+ur25S0?-q z(oFXQ(u-dY0vgwijhGuxV;8@&6DZsvq60mFl^Hv%%s}S=!O!hP+U|3KwB7S1!Oq}l z&|($WbPd@5XYYI9yR54JAO1)mKbsD078U8#sZ)jy!GB=64JHE_Y=hyyY)lw31%_iN z7~*VFj79!Ut*q26%lw;vQnLg#LBCdJR#s$a)DMHcp<+^z{@(9%?tMP@b3f1Lv(Ioa z=*#ok^EqedxzF?5=iGD8IrrRu9QWr-H1C1`A*&HTG7N|ut})noQn%A3+GU3QG(bo+ zrI>apl;Ws?e&h`$(RI%5g2W95o$ydV3~>^pa*0SFwJ|X@D#UbUMx}9OMy0_O&>8)1 zkxOo2|JRhWI>Cl)UsEcI8xpdnOll{+g*2YPskp`cUaEQ)ENN6{SKyrJsWaZgG^25D z8H67>`pDLDO*5u7&cL2>;scBtl}Zzx;l9z{9|YDRCWn8?`aZj9fvN2&4Jqb<7T;wu z7~jTx6#*6k@_%w-4t~^f6H_J=(=7^=w$`M}+H%wQ#yVoC*zK!_NKLdxyl%@g<;7yl zOH1%nHRdA?*1q~ANi6qGwfEtJBh0xP+%H4|Doi}4wpClupH4p$*3K6vN289Vp+8C;E$G_J^^E%#? z$*Z6~yic?R&5wE&9M*QTcol~N3%!cu_DcKa*sZwgwOBar1e0Ai8y&{w<~L)%V5`S? z1NZb^S@o8XR#v>l)a|PW%D>N4Z0}=lek*U_K1}{r-k{(Ds8M|+bg1gW&0fepY02BbasmteKPF3+VdYydV`+a_XCH_VkOaowqf zCcc$kW1{hdWH!K+>1m}1$d#7rFLE3Px-#A~vb3I=TqwH8@W##*ZBT zr+OOxPjsk=??+>758IGQY)HKkUV{xYG2|5Xr!b;K8@?32Uwt(?`(@J>nEgOU(6}20 zR@>(TQnuK`LjP&3p|6FHM|pb+knOpj08RjW2Cxb6SwIX^4W0x1JmCKT@=ZDT(J&MJ z7xf8=#e;ny)lUm;UxQ&FB|N;Rg!Zz*FeCup2A`4>Ja4dg@DQ@5&wJEh=)}gSYPx|2 zqn}6*P5nf1#gbjdtto*he)7M?m14NO3a`x%4g;pnBN^~3aUO>O3!O)eOUObf8$o9n zf)VNdvh>VT;($iESwoPNbX%f+_~8k-%9nW6p7$`1Ebm_w<3|ot?d?i=CBu)?VG8Fp z&1`BxNTR8E9tPC9Ti&OOn_>wV7s? zoto1QLOn*=G?-8=1St46el!F_OhYilB;3+VvU3pySdP82GsSEFmE}HNGb;(}y8MKkqj#41ZH3T+1}4ScC*W>ExuPVcyKZBtgbkdhXokUD^ z60w9%>Pb(!e}sqRdeUFttBv+*qsA89DZ1hO-rdw-uhXkrOBgek>#0HnJ_W>q5;# zOf?U&gyu=tLi-+4MGtG~Dt34jTJo=Y!zA1m+Ruy8IFrM)(4@V!Gp0JhEbp{uXIUZ- zws}75eIU3#tB&@42;A0|G%+nFVqKThok+EF%Bk6p)9o}~?vCa3XktrPVx1bu zMM|o<{E3WP2A6~5FDGeE(*g~KzX=k0G{d6+SSh-6(9;tX8tMKdho58Y^1Ktx|XAAH?MoH7jK?&aTD^Iub9xDgGFUCJ|xN=~7 zUwUQ&sjaO&`_wG;>6$A%ecCf+|0#?MCJ)a6WZ9n!h(Ze1<44P$n3g@UcrYI&p)`(9 zS6X76u#Qp1h^!PnAd;0fN={kKRQ?WJ*{721nZ8at_z3x)HAp;{5TBB zP7IZmfkDPpCxhqdd8A)5Y7;1sjewdb3!!)h$%jky= z$D{_*;h4m9&gHv8%FTDhOK(=#hPx2!Lpw9d%Gw- z&T2`_`Yo2l$qxq28)BIutV6dw+WHpYIV=%ZWzv%(jk8(C;&Wfm(41dcj6`xoi+ImA z!Bc(jo_&6ne$)SJ^Zcf+1=RP#3&1nq3ts|pB=0d(Pn!6M8A+4uVU(U)WMXQOiD6?_ zl#bGt8!X|KCBl1aN?Dp1?u%K!QqE@9FGlhPKTc~*X>{d2-iyQc!(RdIyPjn59@CBp znuhT%9NTl&57P|CSz3%AIZRO| zO-D;VWWpT>-Gi$xK^A&910qahXzF2Ss&iGE>um(bu4r*T2r@5&vkmgiiWYa0czWaF z#*0XmHoLDZSQh@GPIFP#4#;Z9iM^^)iK&beiwCnIfl8ZW zu!KQ$`;pUyrEb9EqjhKz-kVAG-$0%Et|$AvhxtDg=LNp(>uMO$`?r{D31c_K-MpoD z$G&oLeoj=`qw}Ao93S82IeH^Na06s&SHB9WQF$b$@<^;8%6uph4D5T5rNt~&^}V1*lw^22qJVk}|0 zgaVa7ovS_*VZ3yK`9zAI4)m3TaXvR1=tlmyNJ1|~*d%idCf3y_mJK)INeK;J?UqGU zXmD?Ngn`>0hzfUA9$^>~EzcC!!wo}TQ*5-qZHY&glNoxEs5yq<)*W|vM!MSLrb#$3 zBGWEY(zhDZ548X9aXq>h5DncBJ7@iOGMtF*MK&#=YJ>jhBCoH$SXNlmMr3qIbQRO$ zv?6gVTxy0y83O$zAVS*`5=FCLT}Y^ny$@YS%*Zg$K&&5p`S!Zv@l&r)ai(JJD+JEqdhH-0?p** z{~4e9HP6fEJ@oQ9g8duC_>m*o)AGWUdr&3Y({i4rXMaYU=h>ePLaJwf3nWFoD`M(h z5pz8I3}JVQc(j}qKt?EMZbXhUMA{oT{}~}?1)wtxTguCd@gv7xIh!%NamIy>GoxG5 zwo}x#NfTI8*aKX*^QJE#CGD|ET zoB~HdX{82B$Z@9b0xluSC!4i9Wc}Fm9S2+hg>q~UKT3ETWP7fsLwOIsh2MPaFnedR zY$u$F-OD9Ov`2T>9A+u2f3{J(#K5sqTNHpSqg6Ozu>}VRHbUmu`2o8qogaSzJPiN; zKR^~Ew;Z74RNzNtl97;?88=PpZ`dlkJONuyk4d%jv{Iq#GOepz12A%w0jyt|+3!n*+B z2?zH8LP&yP_))ndrgBG2HxO6aR>*|X!rqXyiz4rjXJ*oEcjEd&uTzxwP`AZ#mKEbi z4%KZ5adMV?PhN2avDR!-Wy$Y$%kM-TXO!9=%qw{d^MD8H@k4ZEGXFm^9h$!kqwmC& zr^MpHW~5Tu7K1r;*$n<9_xygPfuNCYIqO>t?v{S4S8I8XbiJIF zEal^;Rz7T><^O{n^O{>`HnyN`f!^EF&a7_8eP(LPK-$37aCD+muBQc_%K_)KiJ8lrfCOjxdN8n^g zcT%w>t0hwz>D_jVS;`?H9-5s{KzcWK9N9oSy_Zu>TopCbnn%JZ(dJZJ_OR+J{n+jg zTL02|B)T2DbuIl-L6qlJINi41T6mO{@il>>p@54G0*B^TuVTabc&UJs52a z=!TJ#mYaTaXgRKxXK-Qva3B)M(WiXknOI;2`ZD=t-mB3rgGI&H>4E8`ZQy>88@i0d)D#objg6J|yh-OY9MkY`?hfM(~k2F)i-6UT$gtT9fAaMQ1-^0ZpBWpEVt zMjhdYQ&xaRt!(Qb^@r&xtky*jjJigrp8zfy2w?XN z*4TrLFxn2B61)-4^TI|fV6J`dqw&Of4Raf@3UJOKKAi+?Nj$f4UaKTx{&-u{yrx!J zWu80k)I&t!Xowb7nXU%a9{j#G6fSkrSVR0SNc`qI0m}iu2Y5Q*U4T;o?*^O>cn@GR z;JtvkfGgwHFjAt_FcOQ)zD6Gx+SN!$3_A~@8u1S7JY=wVFb0_3JI-M7fWaC~_fnV+ z^E+S1gEARS3T!7H@Au&!BIfg8T=mT7`(Ih$d_43xPkv~p$y)}CrzGS@b{riwNJFHU#FP==f#G|mqcXb=ObyC~@2&-eqy$q;Ih`TpbS5aoR96whRI`wVvX-k|+s6iB za+H3cz9gL|58uD|5@=&Rez`jS9FJen@fEdYQzzFN#)bc9$-!4G2R~|}RF8r{eP7?& zY*s&RG}R=sGr;HXV01c>zaIf)`F_-NLQN0(OHBDoEFQd!R7zWCFo(bIUjV73e1^IL zc*f3RsD@8cm=-0JFbcx7I{+z^5IIpE^&!)UDbt9>x%yC`v{eR6FfGxWY}Z|q^cJZ0X}@$~SJr^J+}#B{rDrLD*PO0%wT zszg$Dqq*6YM6SToeQvrExp^oO$g#7znTU@Tm^Tt+l1Od~suD>|xkpSTQfZV(rCIK! zlgL-o@~|t3yb+r2g zv;0hz#y_Ox(h$;7osWd8$(x^1cy>Mge z9bav#2@f6Vi66}(jS78+jzkQgf~+`h)F_2n@?=(_V=?eND!3Ay_Tamw!zpzA!Wj@L zzJDg*K)^;LViXOnvc!~0#Nzb)1Et+(u&#~BYiR{7n<{&n$1~o;JX1)o@_80If|hw9 zAxkbUvs|>E;YA=sdWJrKnJ=HehZw)`P~#UKX8b}bG375Y;lDnz$Oa4~F<8kG;-0&BzMe)0_ zc7!-Vj5aBMi79`HDSwql{wgixFE+C0HrjUJSAV2<8z&?nJlKvVohJ{!CBtad37*9A z9_u=GI2^659W!}s1z4#_mOPvd!51FdRr=WWU(njpG|$ZCPO15P|6s30ScRI-JWT@3 z1Dp()3s@O)j+kyvN-Pv zviIm!!rnoB@}8)Rh5U#a|s?A?QWiktIRS_9zN@rfabHF z_wciZF$3(KMqOgCD{ezsqL6+h_CtfRoJ6PXTEQeg;UtEo zSYeh@{1^0fh!lt2TX^WArg`Dsl2ka0@xRkDcUjB4_^dq|EM)#5(J~8u7$6ELT(R@w zkhR2=wZzniQW|AhX-2({pzO}-DC;}oMRK_Vq3N`P9?2Lhn?O_Kvk5exsl11o20wzE zdy1(J(@OAMd+=Rknrn*+4b#BTHfmhRqR8RGkXgi(S;W+rQrdk;uQV_VyPbDnwE%EO ztWh1%+>Y}8;NFV5fy--RvzZI-eg2+!KkZM)maSTNuu`jHH7<4EH5J>KdeaAhFj@eq zUQw}adHKFZrgO!(eHj*D082L*gNzLbMghB7Xk$Yfi^JF87l9VT$?C>~YGhwPrhNnF zTAZKoj3Mt~nhSA0OxcvfZM90Qf7B=eQVIBq)WeS6*^YHjCL*#emB6<3lLF+-o*y6| z2pUV&1jtVw1X-7(99Q-aP99Y5{7)(H-93Is8$Q$(fn^}kGJOt^&?}iV1vOhPB^4(4QULK>%9z->%9<_EV_kEwpIvS(M-UP^Z&WFapAD*tqArKFK`=Lfmt`jji1r%~xdrgSNgBhR| z2#e)Zd@s6C}5rf5p-vQHm*@LC`4ursHx_pCWJ@Zi=2x^(c%*Ud1y(VcICv>r+ zoe;8tjJ3@5oscVWEmNoYyWpQ5eWp&XPxSpd|42dF=iAf@UG;JF37+~G3PKnvWX&&d zZkFOhwFfuxWqKT9#;E2XlAtx6nAUV++G(z|wYWuTVZ$R0?_S+u-nHQ!qdc)^zG)!o zEd54I2atfgtDSrXT5^zmi)P8Uw~qJtwiSeK@$Eh{lI8;;--s#Sh-tG!X-^}!N(=e+ z{yR!2WRpEcp-n1`qVs-wf>Ao0-e0Hyb7Fi_mfXw5^TlXInHT0^JtWsPFVM1WEWpWt z)J`>kG%uVOr$R?enMX{8PH7Z6rKK>Bi}Xny$>5N&s!19^9)4Z@ENE388+i}23)>t_ zNYBRkEzOG-Cvj0ISu&BKvyh3YK?CMty~oC}U>ox_29PsbD*(yHABAirrfejpY*ZTA zsI&}htc&?u9Q2n3nV!bOqE+Fscr4j#S?sg-OStB0+FXYcq{vze8yrUCYP zlq}hMsAaDWHWY$TpE6m>ZBQ^@>+vD{7VA`95-7_r1|-WD0n!4an^IWMP1#j~i7D%e zX}m^h>yTb)8CajbN%4Lqc+yU1v3d@^pBW{=Ery+NZiJl+3>&%Aw6c+yvXPidu+k{O zN&_3)HxJaN#u`xRA#QJ9JS1oxie^G*`H+r^tynC(qiS3GW!r+*ybJo-=@K0kTiBx5 zV(!@}@XzNy1=k?>AT-keguoD^f&R`9CII^t@(?ZfwYW-EW)BL!+k*IbAN0z3dWH8e z%_N-fP>SSmTM*^t<64?#rkg(Dt`V8knImH`(qDy%#7NzxJMZCACtYsXZv%we$+is} zJO7@ar1B)(=T<=SrxO0UTLFL2hffH&qlWCg@hISF`2R6L>b}LH{UxT7Lo6OlM+qox zrokjwl10nIwl|U&T$h%_Kj6!{Es3L%g;wMvT1Y;Dt1eq8ByRg*B(5LlHVoYM!|+oJ z$2HDtY-yUIqsK}s!^Q;L2VcbLYgWFGa&-*O{^Xh*eUct?O4GbnN<%6!r4+4F$48`T zJp9teaH3TJ^K%oP;`#zt!f|3AmjN=LpEHisTyRl`B$LP5h9HLhGmwf`bAp=;77u;{ zOw;||U~w6PrRmsmAl8i`$sf;S!P0q29#aLyvU;lO38F)iR7Qi8JPI|qFRh|D1XmM` zOm#pGM_#vhih}o82jt*l{3C~}D5xf;G&Z!%n7xyf#m;>}mPUNsl4OMeb_eI-M@=N*cBkh(EEz(ldh zzdf*u3mBedrOideF43?-T-tJhH{Smb3a&OwITV=--n;L7^ zcgs$KA}3vO!;y5_x8UgFi<_Hf%Cw+x=j``aG~JQ--6OwQ3QT*Fz-UnZ9Y}zR3^5fM zVy?)vuO65%%o+ve2+I9Y!c~y2{D6k}-)TjuE5ket5zlR&D7l7txGzeT4GU%)W%*ya zq%|k}EtOT-|J%PaOVM5IIVf*J;)<+>0i?WeHF`IA9!JZC9t8SBqy>`;SyfRdrlL*^ zyHesdrL`K&75~r^g@gw`N$Y=h<>YXgpGBUSyBc$iFXlELQ!@NGm4fq{W;V58HAPH= zY?xyPp*OeGw_-PPXSToFV1;%>D)x&jVRrL^4)k92FPj}*L0cLobr9o1lyVs$F z-X4qyy=@Zj?syo$4T3S?v|cdujRbTUqni4rfmq5*7&F{o95a@cN%H*s^=I>s^pN}-&rJx4 z9A{|9h!7_l6lqPmSrB5W!<(J^E|Flj6cb^#bb}o}c3H9^rN4F(PJ57t{-#yenSkZ> zfG6YnmjKHEZ!m$&S0H5?xTJ(?;F4H8*oIWRniFg{SUmV&l$@q}(_mOj0p6XaD>7I& z0+$b>y%Qa{OmYzU{OG#Sm4ny^`F!3BP`VD{s7P5mZ{gyekty0971o}5VwRfkJWp1j z;DUcjSyM`gspcb=*6I2#?%FZ7e;90kEd$%1j%53c=6MMJ^khg#+k8?2JLBP57RG~Z zZpCF$Jb)iHLd3Kvh@~wGUfi*w$U#y3Izv(XtQh%`!^DAwTRW)`diJqdvVYALKKow< zHNlgvY%~}9bd=63>?N=4kW9K^g z$tB}zzFn=MN_&R#~&G40s&9y}U*ra=AJhcp8Vw6oCFGhH{%{*>f!vuRd> z(;k%lRXE+TB*&Ph*|C5eOHyK*WXD4fYLkpwQk!JNFl_*=YGh5*U2iZ9 zI|HWa)*7rEO|rMLYmzZ!60M`VYLfjCdA~D*M|5Et-4N-(8*xwA$la@_KdDacnIDj) z8*zM_>zhG1f-mDo-3VgpMi5KunepO|iPSG4QeV#?QccCkj~u3rW5mX5j_gUow5Me~ zOEEg5%@?C@Kq^#>h^ZJ6ODje@?%;nDVl*#<7>!LMM!T!_VH09Em+36UB6-Iel)em% zQ?cL>ITZ_HJ=jQjB%+ZL!z;9r!pK>)w(6>pf?@gCJ0#5--xxSM2ZNw`ItXtj@`-ca z4`TkL*N%0a^OK52RpLjrCG(TsnNm+GyAV4BvgaNqqSHMmE!-wSM*K!OY5uMVZB3VsS_NxlM`_21Ti>i;JBu{-e7RjfN8q52J42C_M_~a zv>lHco`^j4&7cZ@;>n0JVpQUXk-m;xNhnMCH|x=T@Y&D9@}3;Tv+G`#rFvR=g>SW1 zK}b|R5mWU0T(v?5`0E%j9hN3Dch8)VF)p<|ZLIMT7r(`utF-hL-0tFs4 z;77%Tn2HIp9<*XFM_93Q@CvnJY$isFT~}7D9%6THhEUtZvPJFgu@S_cvggBbrKzDb z?5`9o%@9gEvDnmZW383%d&6Z%cM;`*dfCgWoxlAW2O|;i(sU;oEFR1Trs?JwtQ(%zKT|!eaQbH6 z!&a}vfF%2*=VIpM_G`^3;?3VNw zFt3t%SP6J4;1>Z=c)`E$^=b@>sWBuL5AHKpb7c7qrC}azHhobQTRJPbfd7_S8Bu~| zdlI9zQo5xM@@yqLqpp@R;n*x)%{;0ks&UmX33sX_yF5mwZSjSx*1IF9Y=cc&Y@f&d z{(_8rC+kZY&gbod80i+qUmCt6rC9krdZZh76t0XP*5v|w3n25+hKHas!jsVBK2xG! zloCA!L~>T^F0r^whUC?p;AUJU7MIo6G~LVQ4qc>P({TkJO_%jfEr+Mp-E2fAeYfRD zJoz{p`8*4GkM^J_Gnu4NDR#DL4k_RLlOLk6GS+X<~hQ zHzQpadD2?c}F+2_d%%=P{XPBoDG{i>E;J%i}6EvZGvN|b6_vP_2a!_;XRxt zaRAPrABZ10`i$XvIpt8Yie%Yr_|@S_DweA94dhl;B{5Z%#Jb;ZNYR0ZMacNWc=V3R z_;6(Q*z_`9Ke=w|#PO3V>bdl8DD3<|oS(z#ZwKPa`$k9JlO7}tcAvZhO7FmArn3$d z;Is$xu^gVctM$ejnWreJ%#)WY^Tc#AIIrqtaAI*ToET`jUm7eP^v7d09akXJbXjY? zlC&}}7SOKK&zclnrd3~u{Ny~#I#Zn>w!u!G@?>`1donpAce!#xBe)VPvZJ1=_`f1d4bf6aMZF>Ls&s> z#5v6?2)Ba#zUzYE^I2W|ckV!qNnRa1s>1jS{hw$m%txi*=q8ZQT49LAgIhr3)tumV zgX!kenr@4^BaRVvHeI2?x?v>B(o`5Y<<$Fc<1EB!4`ip?_JH@Wdhq;uLT%ZlN0;u{ z+M|heE9gqtgYS9)stJE6MLkNuX}%lkSX}K(L`88ZFfpwv#B_B`rQK()CPJ1w$dCni zkiVjw%a8{KA%PsOzA)=iE=?>*$-+oI+{Q?_AZ4Vd%6GQmA&?MMTs@FCVF-PD)g8o? zA;fgSKczi_Ta;#(LUP;)XWa&flUW3qZUC7XttJk_Rri~yCRj+Mv3k$KIozw>yoYJH zoYO1zBZ5A4NNEn2RqG2=oC>x%l?TL>2gG_ne-=jQ&(&!e)0O@_3Ey)< zTK$=_FkDhhjf}kpXSK&zS8q;Ccx*ZeYE1LI)`li5XCp%ehhvWbuHKML+X0Q4v=klk z6y<2IM^U&$Nw@2J{xLBEw%n|1A6+b(wqDbDGU zB1bHq&%?kDfNO~jm+(ac0@#w^IbiugDX%_;E?1C6#tH?w{nz7T-w?Jr-w;FI(OdDOw&$B+Jb+ze^9>WZ#Gds;F$ZSk)Hb z;R15p%#MquPW&K5W@7V<3uTqvVdnNzK;^2tpEUoUivQK9q%3d6Z&;5P^WDWJ`AWzh zzw0W%5r9_%jt0CIkTS`6-71qTH-<3;oDE$^rOGbWevUT&G2V{DLW&QoC)q;r`3z2f z3p%D{ngKY=6UE;=Ul$83nAdoT6frJG98}tNOTvY?UO%Pj(#F89l;008u0LZo_O920 z^Hm7neG*v0_ZOO{pMm1x|A@`CF;5t?E5-Gw6c?QWVygd%>C){=TV<|B*n~7ST=q?m zbq*XoXkp(?W3hmC`$<9T0a#?ab5LjBa0=z7qa96v<&g0jcjaVA@OufpfS6vDs~Vov z>U%hfbwEG{t8$nC>>1=gpV0`TCTLStO?K9s&p8P1`7eOn+c^S^?gzTwV z^YqN9QC1{B@qScJ#F~`{2K@#h19BXV-)coul~Z372NhDCCJ3y8YBm2;LGe1pmq)0u zDEG64q(A)b^(Z_PaPTQZUjjKdyl6WCG_2gxM$OlTze#{s05WG+0-guB4DbTL&jVfx z*a1jBqU@!( z28##Rg|r((8V9Rsx;sJ|hXUw(vGSl`*c%{B_d=MCRSEG8R582hb*hfs2bZ;e(6D?6 zUz0D3{GTA&vH-NfLX-6@W79OMwh`o@6V+4uHAZh~y>K?yh?Am`AG=O|u4v>yB8C;*hKldczPcanO@q!Hp_Cur_fNm71QK6j%jH}uY2u=s~eZ)Hk zh=~>kMaO$F`T@{V*#3R2nxynG&1|* zyRPwk4BmqW%1%))Sp#j?iP~vHavYVRI)mA^hs{1BXHJLFvu&o~VfDnLAegmnS+(iX z@t9<)`nmdVFxC9e8pY#G{O|ZGl}eRg@`3}oXxvUQbnXd7{u~Ba00^mUI|&fN*47CK zU!v_Uz+(XEyWEc-Z441pV@NC>3X4=t2L3QmC%m+nU^O@Dxfc2`RF9U^|WKgbW(Mmi*?0g@kdkWkdY z68xwP5K|c-78jRFX{Vr=l;)Hp7na|)kvYzLc>KHo zFhwPHp^B~Se~l{KkK@%)2rwpx;+L(X0iraoOl!W&kcO()+CQpeH?H?pT=RE{<~>Zq z=JP%W;75+g#gDC%e$Kh#rQ5gIdkl0e?kgWNI?^^H>6WtnS7wH29&`@DV&D@nfHeQQ5Hc9ezcH?X(17d2Tz%+Il&r(Y13cRtq*BE zQgHZkQ*dyh-gm*>gJ<{~RJ#Q?BwfLU9XO*#g#$6Lx@JOYW?hz_Kd5_UnG(m@k-}UK zQP;vGriDo?j)f)A4Jx$X8B8})Qrgy#W(pJi?qU^3SHv#4aQ2H3sM$!OKh}%S&@lL= zy&lH1zQBH6igcsv;#X;a=^OvHqJtv_V^MI(s}am z^~kUKz}4{ve)Asck*jcSD#ni-YC!f5cg$|MW0uv@ZPa`aO*?Tz?M`S5!T0*=<^`f* z4>QGJn>01%f7_(F*!-WNNyBnoh0|@){0wtZSk^B9<^!TWwXw)i6WZVw2fqWP9Q+;- zLKaNLk5*%1T8)XtgFir$l=iB@;=$iS+8ZJ5KOwCT%%|Qv*kC!qkdS7pd&Tw@rMakV zk^QK2eXVE%O%dUBB(nJ`RBdH5F=aEcxNOX)wC7E_gyYFENunD& zDsk_s5max^10hvC-xI7hX8~m$)}o$K^iCTwpY6{}C^G@syYB4N+<{ zyqNk(s?E-tm>oFTp9M+Auf@mYOGk+YIM~FVAeyZlnCi?4z*J|_cT$}R2hQkBzDw_& z4@`CDvXHg{Sd~1F(yKa?@~=Acc3^Knbw@kh_u^^{r#<|pFheI-dqTx~=xBZqXDgMx z9In&7b6ZSDi%7b;ws}Z2n79MUvu#Gn9Dq(8Hhxe4ER;;uV&tw>^h~L_&+3_Z=6|ba zt~398dZyZt3CIgJk6Fpal7IukDvtQi04eOh02~eoL2Mfj2oY+#8SoWA^6-yb52BjZrNPLXNnTYd&_B$u#7G%{NvwWKa&O z2bxrJ>0ms5Qt&7`8IuX<(G`i;cBEMr@)6hd$ zi7vux-Q4(HguRiYu)A>^_~!>7$=@QJ7vWqo3_o(X+A*1T?liR>pBS8Q^@a`=TUuaV zOps89cCf@c)HU{L*})PIwi&znK~q&*ak0LBR&&eThB=aIJ??k~sp_ZBogdcCQlzp6 zzndBpf0*c@$3Ic$js^NJz;eKU15N-`HzKh(x2|V*CulIe zg2jU?A)&k@2Rnr*77udz27%t2XRvrM6PTu(ZLoNNn)W&$6!!XUOc@zLZfW(QlGk3p zj{+;nVMQ-1O7k2;ee1y@n9iM;=yhO zd;s*f0m;jM0J4hG$f(&Qre>2^JU9TQp|lSfEFRE^D2+YYnhw1ahIT?oqbIBB=*eoj zXipaVLIxdujR4c9O)ox-H6&DCYO5M7Na+jYJ@oBZy?B|`KE{3`0@iK(?o$Badj+2WBo96bh|&!%#g7&{F)emt>f0)f zzOB--EV?aeYySH!y7MDzes31tuwhw7Te@9zm8R&%o1&Xwitcn%be{=}j+ho5F)cc! zvFMbBqVq?qMmf6hShqkd;OK5nb#!xUtRsugUo)+@Zi{%jTe9?Y{|&3}d%CwE)4HAO z*94n__bcr}U|a|*IuO#1s|7f%PWCPT&$L?ENVVz+~$u*Ch|ID=D=LC%A638FW|fIMZ*tAM88R|D_)df1NGc8kG0{ zdM#VZND9hs9*%aU~=^1TK z93OQnkfy-oS+l}sKr2#&%>X3u?F@Ok3a4vlTFuaeg@AN0F|e$W5QY;Gj_Q zr%opG{b!gW=KU{#Eam55_|=;rrY4D)PH|S+Mw3orFNVDcY1+PlP94aud>(|fKf(Pv zijnt6TY^K8j(kqX`}c6|VUPE`hu=W2Xk&u+I&8RZHuegvpMl*=8(K2$A?XxLS0$x2 zy78ig*n_RLIsIaDSkom@!Lu&Z8*QPo)xkn-UV=(|dgEd!AT3zd;u4(p;P-RuJGWdf zLOGHrsJU(A%K|`_EBEQuawVqaN-Q3fqRuL9ticlfJs4<|OGg1^t0Tos+2%d`!m=0B z4j79`-1!+PYv$ou!C10rvV;-{G$_T%PvyyjHI7Xnre%#|;N36vQqY-Z6wX(7^HR6p zg{(SR?I@ z?7A%Our<&QK@zr4Y@F2^&SVivZPWR)6VY$CMl#PF&+XR8^`;D71?0E9X3BuILd$@d zmI1MNfCj$QnH<^PNNI5X^PZ^4MP1B$Vo=__FCY#*t7Bl^6DW>4kjne!-MbnWXLXdJ z1s;p;%eFbSoM3HZPHk<2v_QX%qsk5s-orHfvgSl7g#8LSjxtQ1giy|{g}M}qz;-N9 zAMqvHu^^p0BF&}F-Fz?m5!_hili(cl@)Y2Q0G|dN3iuO1=I68~(lNn=4&mE;7|+!1?^<9w#D^W+hYe)Q z?Ob3QJZuD}-QV={wEG*H!gPPP1Jipufob>mEg_9rE0*Wo2~2~B_W>&fpQ9%$y@;!n zJW3l6U)O&H_2z9)`gjj@!1Fk7Pe`9yc;n?q#_IQ^7C<&bk=gThe4FF;lary_@6KGJ z1k$0yVZ)a#SHO`lJ@9t!(m9$WoWRgw{GTl%KST?J0vV5lEq(VKxX0_fCmBI1~?HAnQNN~2L0?Y-x2|ubEiD?Zc77w_0 ziqhH*77uOFrRy zdGhdE5F8-zcTdK74?Q+&v|EeuBgcPD`&OmfGQ@tKLhA@oy3c4!C*5iwQrfWO+bW!V zv}M~ov{lK=WU^1fnTd9cdz@Xao(v2S*H4^7>0oDb#WM~<*Ne`t5jZgT&= z`jD*9rTSp`(;54NRK^b5RgAq9jAH?R29S(h0!YSQ2FOB(D=Lh=EMzP(Wh^metkTF> zrKN<3Yi`9ged zK^fk46231#m;vmQg3&MK)qGBF4Mq!%dGcEsw}S?kB;Yk3tZ426hhso1bAzjHG`YUQ zjmqfSPu^08)n#Xn$6$vr7S!Nra=!lvoY&#}7ZEw!SWxOKMva<&vBaB7GFZ7F^6c#gA5!MOcdh!p6s2R^yaVmB4Y;s}A{l1}Lb zl2_laK$e3~Y3JvA0vWN!mX${lNLKXe83gj=VMriHT7lGMwt83|lNa35L2Vxk1(JMM zfh48^$*U@m#Nr&95@@=24c3h%U&f{iq*+^0bsbe9)m8yKJx6Vsd8~MUuoyr20lnDt znunU3Rnt~a-|u?`*S_l&4)39_QiSuLk=mlXd|XS@%ye9gIDSX5L0VKOnj+GzAsA4_kW3=e}8u+{r7jpC;f%AT7jb|5Unv!hvf?|NVcP-M zc=)Zl1)xn1P8%c_%@6PChw}iOE5a*%rq5hFuVHS}jDn_lnETZ*2TLcl6kuRy!I5QC zrc~5Utv{`7{KSf}N2)t$p5+6$gQADosw;3V@|}YRBu@gW4YYAFKCF7glt;w0aiKIe zE|iAGMI_(OLki{FEj_@u7CdcI2EM%(GCl*}%FD)L4dXGVbJgDL*e2nH0=(NEe9d=I zSbYHPE76{iM%n!#--s#Sh$-KcM!qR69p6qu3gug45AdxkdAlJSc>~|-tIKN3sw$>d z)Mm%HD0$nsPcq+*G<=&H@{O4CjhOOHY2=&I((#QNM)~%s9^l(0c-oW<^0qP?zKxwc zX=*(x>-ce#WRd78J;%F`8Qz^9@{XADj+l08DD824i_+5Z?&y$r=kx&Y=w6+hfp=fX zns;L+Pnt5dwr4cD< z#FU@Ju;-b%nj=#om6nd5CnBxN;>;f4Cmd?HtLbgVm$Kn!MOF3GvxJRVu`iqYi`I$o zY)Z&8V#+gOy7z_B9>g~&EgjEhhCI8i2YANdP;CaDZLrEa$Y3wVPn=jWu54ocxZ1L@ z<0~dj&5Cm>cLjLAJ@_i$X4v}sK*&2{$~$6Of0f4itF&~yn}HN6Z@2aU@4B)Xf69h; z6DLoZ+D&5{C38OCY(4#c$TwojH)3itlt!DOv~+wc3HkQv9^l(tJZ*dinY${RdOB%x z_LUUxi{hDYXA4X{tqOTYOnF93>#5RMPnDLAXCsk9Wv!tHc-DfaW%BE;&5CDr6DQV> zsjIDhe|6O7+hK-p)gj-ADc^{xtSODMrnGc?J1*qg^d8__GoE&O23fl%Yrc&wn_8Bg zV#`L>4mCWR9P*5q@{E|un$jq1N=wHxv~-QEowo~kc3svyn^bXTmc}3(o)sFN)r34F zraU92JX0EZrnGcC8y@nkz6W@A5uR3+LC&tunrD;CCsd5dl55%NHAHj7|Cki=jhOO{ znAT6Fv3@Eo9p6p}`8J~m_|{eZygqBbRo7Nb>$&=QxZzoC$TMQfGh!-hN~5ePEgjE} z4S9BM5AbXuo>r4V*1nhx&kz|IUxqFVZp$<2^ekIk*~uH)3?gq6L*5Zn-VsxuO=H*$$Wk+w!ig#1t@e1Fv4J(QN(N!DkDDaJKEJC)i>O%ezQ~nXt`l>Y6 zSEZ%nUt`F>Z}tHHx@u$nIUlc+BSU-PjM~YQ#?_xOxi-6?T$F9_{aq__4~9G=raU92 z^;K!CuSx^YB!XFuMTePb`MJOeZ3;n>V6hR6b6$g|0!Hv9}m3>7ccbcJnx~rFru@6WUM%SXtcF)5qijH z*0(mCHw()I)-RaddDkX5eKX8qE@4 zZoZKfdmxz4@f@5W5caaVgFGpy%s!4>q~rLxR^UyDcny$l0BW34oc7@NataWFV&T#c z&tXs;AM!td?0?1@>}`x^{S=UV`57R!#Am`nC8mW+3`;toq9`rTVDX?Nq>T(|&{8^0 zX#1K{W}UrvYsy9v8?lN79HmeW!Bx`j!D3|xoGsR$1OJLwth|S5sJ^xq<3|p+la3uu zQ^5Thvv*Fv`k3aqbDQT?%$q4gcijBj+yI*5WwDK0;`CdIku7x+@_YPZyT6}~ar{0Y zZT$m)2r>l^0`j{b0%WnR3X6@H78|j6Fc1Z!w0wgl>Zk5Hd6HBo4EX&y@XNo94=e6t)p_J43aNl5f4PNBk+3dn=KNICDbJKdR%xlN)#G! z)vYOh4SxaGzv_ts@1b;`i}S5s6opB!Qz8rQ2Ov-ONGA)d!Id@Y12|1Thr}rBNi5hFU8sd%I|A84Hd5 zNHGvFw-%%QI5fI*UzHQggy4$A{W~TUvcQSQIwlk$g}uI}+}3+5C3z38!oCV=1xQvC z?5G(jay3;SgNd85fZz9fk(ml$t3{5^1~yx0Y+0z3eF4~q@zK!(wQs=Hm^lHY_mIl zd8#4a3`yeuUjsY}@auq#-FySE4Dc4f@qo7iP650Pa2en?0m--90r}z|hmuH4C6Sog z52ew5C@o16u`v&(L2c*8JkT_oK44T3U57N5WGG(9Z?}i9KF-Gle>)`J!w)?YXKg-y zz!=#dSDHbM6RWMKFd!~cQ^xz5&Z6YiL-(3aB_fG;O)22bhwfYiM zrV)$F=uM^FWzxAC9gY^5wx2Ss99zI=#kFEQDHGRb_^ufw#@=J!Y$h=nl9J)p6Otj%e7A%uGItb{nHKC)`eUnrd%VYTvHmkrnFubwJ#@H z@4~e1@od?L9iBys8rSe~nRba`+9E)T+G4}B3qqz5Q>GD9rYVg~Q(D5m>ntrwR}1-N zRIm2%{ki|ag&RDT%X>b6b3dHNv(V+(mHr(4#j`T_a&AqZlH$v`GRtqFI(6Cq53rlx z_YNSx5zds<^!svbO(&-8Cl(KKQGiOL7pF9l*<4wY5^h(lv$|+>P0{5!Vuy>cWeeI` zb+OL!B06TYtFg|q!qMf0OLF*MO<_mfR<_1sot1?hRa>D)hgNJwA*NX*;Vfh`7pE;s zUzuKuYo~j~$a|<3Xc77j#g80rF}ed-M~$i+)7;WH`QpZwISuoL_k3aM;qv~+%|`U? z+}-;?Xl})xbH=>+Duj9BR=;j>T!t18^SKm|c||Nhiepk(9K^IZh{d_8Y@oE44JL}$ zEQ-*+Y9QUD_SFM7;%cBwrCR(Bs#3ILaxkuvwJv)pA^iUhoLAwj^w`ULnC2rm-^hl& zhP4Z_l$8^m@mV_;tYjWJLyP(33@w)G=^<;0DQk&oSVd`MveH6DqpK3o1nCIA z_NTdmH{8R4pwL;-6^gD+%V&nQ$kP~39=q1@cIWf(fh()n|>6~EQjR@e5`GQ19uJh&c^WwFnLNy`{sfvx003KuB)9DtUbACaKvg8(~P#XFB%fG4wY$3Lpti#bylqF zsMyec*@mDs?}C1vRU4$LbyU1e&ybZ8!3NB58rV^{am2Ho6&oL8slW4D-qow$`EAbH z5v$Oo$-8#dJ1^&~*4a-8lXg^a)mPrye%a=r_1Mm;&7E}{I|hlk$q$}W&6!S{*&vb^ za=q9m`*+l>=WEyV-p-2k9ThK`MYWiRx|cd?hB(uq&Y{HSN`tNh%71{&0M+?WC*%HK zi|jT4;|!gA&aDkj5!w%d>1?T0zz)IH0Wur+#I({*TTzU(R*(J|#dj2BALdB3%13d1 zd77C~<1r|;^wdHX?b2zkrgrB?C0#Jnr;bZbUOxtN4@$8LRycD(wu(QqvaEcX?k!$g zT7n5yUvzWgEr7Mla}%y4%MF?Qm1N1+qrk&=ao$S?%dx980(l{-Abc}kA2XT2R5*kd zI794tgqc1Bs+}Pgss+2`NGmR$4?kxC_iUy8q?m9e==0{-wJ)evNoj47wJ-J$K0W9w zATgkL0}L%k9@7d`3Qd2=8$V#N8d{(H!c6S8PXImzcpBi-fENM&1dzPM{A|%ImqNC6 z<{E2=P81>*=UNZJaG^bCu(-_JVUeE!ofR)bkL5jFm5V*%22c@F z>2B$)+L(7Q!aP;$g|uPQft^sp4CrqVWw*XxO$_P~#L*S&EgA5A&GbZ}C$Tm< zCID|9UGdW8m_RzP=7K)6`I(({>-+J-7W4sx9RNSubcfNQHj|DDO=!^LP{!`6gsc+7 zAOZPoJqI_5W@MP?D}v1gra>gi{tZG~3hZXVR)kk+1ZJT&43L=VxpEbIGY0nwM#*>^ zXCY2|oP?_*@eivI5Be4E+TADM`VFprbLOCqpSPf~rM0}gdC|_*xAl`ss>_n}HI?$& z2zWVbil^w^Ud>ymgcMcAXZsoDp5j!nX$nL=UTr*LJ0g z>4VL#UogL=v0)}ANUJU;@nTD)8mBrgLfq}V^P0ImT8`-WT<978e<1$nTHsc#*Xu57 zTn*%9LtelTV*Mgf_AeP)BRWx)vd*C_4tO7TZs+6lzQuS&KQ?FOXu$6e6s4cJ!6Z#i zM8&r*k%+4p@_CD3IoM&9=(M_86Ui^jl@=rq|6OV5e}!dWS#JU?2mBi#mB;@Aei88R zfDBx20lXRT4Zzz0-vqo9@GU^*b}Jw=^fn;t@IL?<`hExSLx9@=2Lt{Skac+pbctFb zY8tgf#Iy-GLTL0hiDBn>+{rtzbG*Ug!QrqgdhbyNiwAMEJ~iF`28##BhO`kO?aYw& zsgMSB$VN(Ho%EMd3=ic`RTUeZiFMLz#qhA178;%!tbWw5H4nf28I-5u(|ui$f3vUa zQ+%AS?~VkGbe=q@@9h6{X*X9ni@1>@&7oZmQg@%+XNO�( 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�*O8R)l$odc(oKH^f`IzYXb?ed# z-zuc*n^;;hjXlDVx@^NR2fY<+;jL=!wL8iYN133(}r19r1 zycLl~<7-q;t+IqvOoX)2P}~~OD=sXi9()g2%|@dFJWowxVlT(!6gIJ{zYPow%^ab` zo-++i-Y6#N@4B8jquh$ zfP_?lgtXmI9NP`WMU0T2&8(&oVoc<060!Zd#_{^GOyJZ5=fQtlb3`k#HcLg*A))K$3h4F6aB{m&)E#T;5KgV?~uIM{P zK0_MbJ4dn!z}>z^&yC${Tp!}RvgQLCY_}b3UOU)t^B#e@@piTxnKjWt|q%V>h z(x!xlbQ227ZVC;DA!+FEnqxe%v7|{r#I+}7Xh{1ZrXk@-Kw0&GcWN^)!QTfU=8I=8j$VkE zi=$a)vpD*Lz>o;3ArVqTQXCCQasM|Q(q&2QXlz0|Vnt47N0m9GrJN;|pmt>Kr>(jf z-H&Eimj4SjCQ7BBmX+Moc?ugP3;I7BTGzudl=* z9gmm}=>)`dNGBquLu!wh@;C`G)0q(15h1lBLTX2fqa7)((w^4E36*pxn6RSrVu*J0 zF90sO?}^Wtp4OgtJ+0KY`fo;M7PXl94U7zf$u(AJ3eyCp8|`VG1p+-eot#YcqW@8`l=ZSBqZ-?RbdfeFf=zZe3wG4!W_{` zUxtq$u8+Ju>dWwC^rW;^B&0GVq}_eRtp~m00vTchKe{&+XY@-f#fEq)nblp1`_VHL z_zbOXUp|}Sy9eySD=!{dP*T-N4kO7g55c5m0!cDI(RU9|`I3AZG4uJ1FUh<>l7v)} zg!J8m;x>R@ae*ZFjKWm!sEQ<`beeoJK~BZ}X!YeY6eQj2?XgZ@&#ry@4(O)Cbls;) z#%{2?c^^SOQhm+noIIyuQYqe~2Gd<%BRs`>vM;bx5cAnneSvXksHR6q1x84#ui{vJ z6&Dp)j~dlCy?7F{P4ABQ5=-?HgmEP{ErG`-^<}jxLyP%mJv!*zEaj_D&VsPxRjrn@m2JPc3T)DVR=njAlmI#X%$2Du+>oBRt#8e)?&;Sp^^m=;GD z=obe09tjaL{X)ddLy<4ia|4kQQjrqUozse24tm8!MS6@S(lauCj7(2M8g{v(GA+UV z6C)jRKEpD>OuPlr4tdpuS_&NpLXFClX|bbi%e2&&=|sfL!z5p(n**5=QkfD`nJSJl zRa~rMFOY*5<5^sNP!n%LvYOaaVvc&css+|TWu-L1-IzwE4GyOr>~I^ zk&^YME4;+L3WB@hFw45!)e=>a+!cX+5mLz!($iQJw+`h{oUt!=DNY)s9eiAHZ&5@#$AyCW%=no3;O??4n6i3Q90flbC1lQSI32vI$sX*H?>H@+Ipkm_zsj z98qsWSw_FVF#y9R%6A}Q8tNd#P@sGOSL+c!g{#&;D9c+2Eh+A5ABxo@vu02#6MAXh zKk*aa80cA(8N+hizc}K2_zW{kzcVLd3>=Xrmb+>`6`}LUFKV_Z*;5Gn^^hA zGQ5SD<#-!01 zXvVd*m@4f4StSR&QXi{v+0EoFurBIo31aH$R^QqNz!KEj2&uIZ!mtXOR@??3idAo( zd(SiH7Bs-#OYS!7{{u}Nd(-Ocuz^z=r=iWLDTWg@vZlDpl9|#)`x`goUbMf#XINdB z`QPT^M?$0}_4^y8WvLz|5Nzbx-=Ab(hw7mXLIJ-)UDrFQ!NGo7FAp|*8lwJ`d5iW- z-t)A2Z$`{KzmFJl^)3hmPDlk#D9d}=zgydT)`zmZO#yCmfb(12F+kws$-&}mIcMW3 zaH=V9L&!6}!{w03NS-{R(vR2MGs8CyEpGf#(r4?!W&1qHA&`FD-X7D8N;Mm1ODotP zG4pbOZ^lzlS~X)rDpf+-+fy8Sdx}fkXPE|@jW0F2&16z5#Qo^`G<=4+WqbNEvn#=0 zMVI;vUuf}g)b^N0bVlz4*c#J45i!$lj~K#`6F^i-HwHaBLRsE2|88yXZXdELJH88< zfoff?rNhNw7hRsj){fcR2iF^M#8Q>F%puu;UsOCyD=HqSO2orKD)TVP7td`Fg^Gue z8WABKSSgOZ5ycrJ;%76fec1H{U>AL(Xp86G#vqVj&vl+&R$SPnU~*B14&_ym)&A|0 zjuDt{kDB3T<4j*vy?jyi_C@tpASyyCDndF{qBu^KC@v zPYS^;+JbW4f=vZ;^gv8vr}-1@sZO#Npg)>$?u}_gr-)yH6qxR-zBFF*ne@iG2!n4es_2ppgNDT9d?AEW%yZJ)`F6;TY@%L{CfOGsuEB7uR<=_>tiE9jE4x zPU&3C-S%l|<^_{|E~eXIV!F`|)0C!|fA;@Gq)E>Js9 zI*Dm8@X$OL6)#Z&b%i~4$IpL?^G&INs3#u=Tr%xkg!|Ezl6-~|8H{WF(fE-NXy+$9 zxzyDV(~fHB3e46qKl2bXPxJlRySsr@4G~fe5z_rJidzkO#l`&9n|aml@mJ=rmdE^+ zapS4J`Ah1?=@X;=Y6A?FZv5|v>91b*4R=-`7D6f(Lh7#+cQ@!27Zb~<1$lfg8n;un zFX&AL2j~o|gD)2jf7M(Fsay!D zTogySC@!eb|1Ex;+0wJB6=KCys9gZjk1LLTTp{{#g~|gco~QV+etc6*#XJ(XLx*Yq zSwGG>D2RxM2#Fux;;a20AXV*zRPBV+k1LLTTyY1XCN;u!7_P%{@qF1MapmGV3fD2X zn&4`Vs|Bu>xQ@lu3RfFk?Qordt39p`xK75^1y?s*XW;6Kt3R$mxX#9P9{c>Eham~dw57#1G*WkJy*NwPt!gUL-TXEfq>mFPW z;97y}&$w3NdIZ;_xE{mxIIbsgt;Y27uS2ZKESmN*LGZApNUO;7UWS+zVGGu6nrk#dQ#_BlfzE-IRo3 zFWf&a9TETL;hgt=98x zgXafU>-pn@=g$f~Z{+Zwj*Xd^bbqP8jqXi8OdQ3V{8ffGHNfzRK3CcO%J`f6v~haH zM1gdv)JW18p7D59g-?1s20qU4p=VAM3{5Ke`Tv#1*hf4WRYg9j@JWRx6*;HECl%XB zC9RtA1mok3d{Rj(6+29&T&d(am9$c+%Rg0GKUKLZ%TFR7Xr421B07^#6Q@dN=qdLb zq}^k0;|hT|RGA}CBS5nR$^~?pKrH}WDiB9jGX&}c=wgAo0lGk-UVtVDGzd_UK%Bqm zCr}}vt^$<+I!T~%Kqm?`9nfzCnhj{NKnnp~E70|Tt`lepps4~a12j#b`v6TAXa%5h zfmQ*UD9{=}lLT4^Xq-SB0F?-|3D5w6wg4I^&<;Qy1=1}0Vq$P zRe(ARv=-38vZZMUpqr$hR3FCl8-dyZx%o_1eywHmOx7YT_(_KK$i-%1<(wEc)ab!0<{1%O`v{&E)Z@RfmQ-KU!c{1@&#H8Xt+S@0Tl?e5zq*MHUkTWu zCBgHz%k!!9-b@-uR02#=g2BTqByf)RPT|@F&~GKBR)B632vcI-Qi1XS-7ZiMKz9ga zcmW|Hl^!GI@q2l?4xqaP;u!7^A;}0k{G`h9-hktM0mu7)6vyQO$3F!e{}f2y1Zbr|-2gq3avqr;9!MBij#Ow& znMfNi-zEXxqxM%x{#hHIle|{-`6q(sUrf2IRZZimAdOc;c{F9Qb!BjNY|8qK@S)b$ z2t-SN{b$Sdb3v}(`BAxkKFIY8L9XBbQ5@F=9RC(@{IJS$FcMBx`s;&KUkOs(5h_Qj zHv4yZo;JHPHJ#HX5XSwzjXb_^hZQ{O1Gmgn;zZ97mGylmStGP3CiQ$MB$7f-*$(WYuhnmK?@lr(8m8G>WI zI9_nQ0G$vwM<#U>gHVFWDgR(jOl?V)lbVt$E%{_gi#4>PK+H*}xasHNjvbg*Wi^!a z%!e(-RBEUxW1^VStSx0=4Xq^*rP*0>&T@4Th&8mUK&+wN1eywHA9;c`w5~vTfb0-W z*W9a)tm{h(%+nc?K4slQAj-O@KzV@dkZ1n^_?MRT{!#|YdOv|E>pqfmmaDHolyyIW zDC_=be5z~Sq~P7vK}IkY&f<~87V9%FYuzsqVW^U zr$tW=$tj+k(`Rt6UJkW=P>I87Dn9c$vfOzl{3-V6Q#gEUT>i*uBTI_%C%VtdjY2)C zse7-U0|!~fvGWqWS5R1(Uoc8OJvydnLcV;Qh$qJtl@yIHnou5;FY$Ae%L}IEPn=Tj z#UmL}G^(_$C_ga`&Xz4M!|77a!{zxU1@Z96FHVvwno#H!7LAxP+AA!cJh22HtLaiY zWkMl#jOXCv$tO2Cs<6dTg-u(Y;saS&gWUliw(Ez5qow!^ZJAf#jrVfA)9^v>5^VdP z47dr-5NeOLflWcz8~BkzI~nw&u)H(}A3H1t-4r}og1-g=H^nOit`vW@#*({Zab(Fb zP<6#`u{QzFmk31>{+|)c@0L)0Q`|WYS3VTTCv9Qdh3baqXg=YBH4)8D!IzwJj?QV4 z-=*j2`JH?9>f5#Rpq_pE0PJ~spWfa349aPl)4FNXoRd}WO^}$;{1jwL^-T@)P8ZnH z>4-bSs(Qhix&j&mTwfd_t61Le13T}IU)o$tTr3ESa&la&DJ#N0wW6|#WjGUVB&ueo zDfoLLY?5Di)H2|&rsuY7eI7FzEyq9mqc=LPw$tn>r@GWSHuyF)r*bwz4fr<_1JVi88<@hV#< zWWiNRn0=d^W;wLA(osz=C@n6`Y1WkH7o-6lhckdg+eq1S0>h&}YJz%D3K_8$G!vbv zdAiA~W@C6aC6 zwf)ZRf>0}JCx|<-X4Jmn^cU=#EU(|l!lj17-1;0OWdJu5+gfVM668w+3X$QDaRKGs z0p%QlF2JXkOUpV9IwhyPv^1xrbi(LgxGA~-4rnBt44WdJ`xN^tM;wv5S2`g!-*j4R zlt`T;EkwCg&O+SDk$V%+EV0Roa*96NT%I3=3e6PApY4stqawTpmKRJYEGR3?>Ds(` zPOst-Wd&u$MU!*-PAShR9hEbnV8ZAk)Eah63gB7`@mnVDp{v&%|Jc1K_C`qV$^dDX zr*9~=0rDhs9?SgVr z%c2C>31aV~1dTj3$<8A$cJZ_+%t3S5LP{B5YCS=3TWUVEPi+*Tt91%^#4e^)Dl)b0 zx;Z)l>~tlvNOrb<*$!lhuVtPVtNM29CvA^i3F@4BV7+BMpe^AodHg!na{|6sfyTLW z+2|=81Xa0S^+bwxN3}CF81AUrt(#ppVwUs&kCoEa;@cQIno%#wA=U`kDTiOh&{%S> z7?YjtYk&0&)%Og^o;*w1kBRW1u~AGSS;r_$TbYP5U)rW${q>LY*XMfYp)S$a*`CMk zuh7Sv{z+oLnFE?qseA0zaDX<-kLgPb0uLIif3_C?7kpPUNIND!ZE4xMx^0l@)v+(& z_7P(|TwNI*XbVOyn5m9mHIO6yTG!$yp#9(sOAgu&4w20?gC6=E8gxK|K`>L!c>xB? ziev=S5SSu?%&lWj?L5RBW|0@1f0n0@Zj%{hLz?CTd^<5F#Kg-F|7o5;OyUW07eC&l z5FOLDPlsSWD#?R+4@I`+A!a~mxKPj>)mo{Th~lu<07rqJ=|X9$1N z^Tc8EvItwPP_9#RyL6HAgi2_aE_5SbX2|o}hG?CczXKLOAa``>hUeuh9)Mm@)WkeF($Z4k*OR;dK19IfR*uza~QLu~J+O%*qhvW?(4x z7|k*uvO}0Z0@FT(SqaSA5awxM>cd^d_^bnFXb6MN&|XOhvl*DHLzqv1$pMoXpIyL= z2{5?>PjA<@ZJSoR0}O6^-{Z>M%YF)98S(msF#7_tID}~g%zYuu(ZH+^VOjw*9KKHT zqp2U?ep!HF>K#DC^{ufycLSzA_B+QgeSpagFv{nIc0D4P6I%_BVoq2X!L)C4cNEip zb%0@hh9a$<0Y=k0sa*yfidBksty<+qF(>qhU|P4C7{#>bp)Rp8!@LE|&=6(|FvCNbPk|{3VRi$g(9TIGwQhAnZWME3`v60I^}tg@Lzn@; z%no6O0kb%S83oLm5N0AUTSJ(OfSFpy&f#oeR)sKE0<$rMSq#js5ateG>SN7Ntfcn= z!(9V0%)`KN#d!>~8W`@(h+$p;hWk8Xm<_%^lA7saQN&eG|A4zYp{`%gxO2RnS&2d~Ul4;7kzR(={ed~mut_&kkY%IAq4 z=RD}j@Nl7NkIc}L7!I@es0?#}jmhxHM-JX((`eZn3r+H}A0ae$*&ADFDIaPoJ&hL2 zu;=9yy19AI#hvuDa!ZCsI((Ru%J>{DG;BGIE{<~e9Fqc{CPFjF%Fi(lpQb7BX(lx6 zb(;J%b@((Fnv?j8>#cK|L4hbhsJ^!lnmnsq%^f~c(<_nlvBGDmm7kUlA9|kjv@`gN z>u(=ijc#-_KdpqO5Pay(8IE)Kv<5ak4M!fyIlu+)Kl6agr;X4ow(`^3;nP-VUcxWE z@Fic>p6&8!Cp6r7M=#9K*5ac!e>|}1X;NDOT|4LZooyPmRgTrt(}WwKCwk25>ZZlh z3e(dXTDmyFN=x~)R~q~>)Lyn4)KM9V#?v^aGPcp);e!K_kXBFp^68l!pW5W|=_oYp z;Tm0ZaQJi*8WcwOOl@@VaF-9?+@zE*0v}F`q^E7R_?+VK$rBo;h-`a@ zymiynZhkro4gIspPoBf4i_kR2FUY)yU)ed!<-<~^r!BGM)5YNfmjoJ4He}%HzV|Iq zGCA69Zg-*CWbx_d@HtIrSnEONl@7e*7MIWILSx(fX%3$rLSyV=$kyhgT|Tr5%y=Ln zL)XLMBegiq+>g)aOyR>(f}uOZ;nPcKOrK=@ckR)@M&;96Xu4T^dO3X1c|@KY&eRgN4TKLk@EI3=taklqjDAcbxUD%jYbip*@>& z4RQDk6&lX{uqVA_@Fj2((fph(Gwa37U(qE_dvU(dG(or3q;;N?R=&{KY1uTI z)^MRY2)~qb+poqR>6WWNXly$iZl$GsMhFdC4NAA|e*0YG@);>K^+90tHNxRjC^Xa+ zLwUbvZ*%z+;ZAzmE=%u)4xdp%W9mhh&j#P;@_{P>pWPOpQ4XImLPI~sa@|w@W}H4r zvCyov$~DH}GgfGlmusBR472hx*5Ol<0-y0hvlG8Y&Ls|?2`TU?6`G+|ekM44CJN1C z_+{HP`@A-B{MaO+;k=mXlT5VuXuT*CnnU=D>-qt8&#-CK#wH8RQTRocyrUa^Ip5W3 zxzN~Shsjo2%4dquu=SyQYOVVhGDz*(KI#IYS#9Zbio*x47WVTzeyP`+ntyw|%ZH^) zPa9M#R`v@mK3eu^LSvWRrqMiKBsAUli|fD+r@+NV^L(+;th4fbk(HM6p(jjFOKyiV zgl4#<_vsFwOH$x-snFE7_*~-fnVABg%YP z?0P!e;WJlgjNh2@_>6a4eO)0mt1bD=b@&@8mdb*01S zYN1J9E;L0bJ7>p@{ao$vxmIYBm+LyAnQHO5*5Pw~3Vd!58jcxFey(@;+$c2cB~o91 zesUSQ9Z|jiMrc@1joxo`_$(G0Q?9ccEPBf2bCb|axAL>t;d8UlB$x9oLNmtVbF;%| zNhm+@>&2}?W4EVE96rAd@rhq9bRD4gRS=tz^KTtKOGA9(=jV2zS#I%J>hQTE#3z1! zekU|5EIxNQe3l8#q4@%;EEUp)u|4_vgR$z02n=p|R(7 ze(&(PTWA{Km-)H&+rm>_K7SCJaw|V~JACdDn&joWS7_}1#yt)nbmO4Y zxzFMAN1;hxE_Az*mhI>N=CJR~&jEIto9d{ziea{2sO zXc}33Rycef4&~?3GvDp&>isW5)63%Xu)}Ai&?J}hBSO>O;^JpkP@$1E7Let2q zUynL`R)zS)FW2KjlVkB& zFUwx>Y(I2lqI^CSn%zLx2E?$%;xkn+AK^FlUhka4CY)>2=veq;p=pX=rcmePr)#=t zZ50}hL5waww$f5Q+k^%kBMCJR>@&~h^NG;dW7usDpY1}!5f;;Ws{U(Vx_ovB&GhtG z*|%GKwCw*BnxpZXfve`qlRvU)G|!(3%^moyg{%0pVc-~*^JhXc48~#l6Q4S1u@=YX zGw=QI(i3eOP3v=^X@p;h(L1a4^AJNctuKUTHwcgs37=bODIbUfX(i`F3G1Am;q#@# z=PRK(0Kd%7-gk5PY&1V#3(XcQKVLa~z7d+_`Js2h8V@MK6d^D4KW7x*1~(n8Uv-6s^}_h@eJnoe$La~qkv<>#aGOSb0(-@k>9m2+ ztiZ3ajrvwv%7?38)6+Ol0>JyMc{;KX&GUXjW4D9*I()K)#Dn-38x0*k2dBX25Qopf z4j+y>)6}1P4aSar8eq?m7k*=KF0`6 zUF3)1i6^)8cJtFjXlT{O#*T6LG!>fq$|k|Ore;F3%i`12;nQ4bl9#K6&`h=XGGd_LEldfRa>AC6w}eh0!~KZ@Zvi;voBYoR#= z_n4o#7Y>?g)2NNL5t`&>Z!0ug!NcgHjg^-2X_o?@4-+`8mzWPj`pU=_%xgv!>|JTlqQN;nOpP{9wxz_}Fsp>F_yIXp-xzm(Xmo z@^hxcr?=1~moxXfU>*s-M(@2HK7CW*)6e14*WuG&Xc{8V3{P&kt1V=Ln6h_p=>7=L*dv@S(3OI`GalZhnRd z4ZWgiFV1!NoF_EneLii+FKg-YIX~cIeCBx;AN85}LUW|ghy7=pMt$9Ip-FD51wv!D z7sIWzln?hgRW>#sDKwjrAEVO|4xd7yNnQtwgvPdwLWj>Np=pe?7{<Zp-En@i-cw?e~}i$G>6Z{De##t zGx3q`46hfOUHCOJ zyw2jIGQ2@(Y#G`#TJ{@-Cb3Z$nc=W~RLuit>r@s@LY%8rhoV1oXY1uTI z)}2CQ#)A*dJM$yAT)!8ZWhl4N>77)y*oK9pR2JUdyI)@HrnO3F?0JC4thAKR<3e*K_|(L8?}*uP#>-C#4fhJs zrWqc$_^5oI6q;PzqyPDRi_f35X*8|XLh}&ra~}4TK7YiEM{3tzi~f|*uw^l}xY|lf z`8+K&$Kpwb!)~k?p|^pN;eD z#?jX+Lc^BVJ5PIIH6;!)+R^J8ufj zqqt8Q9=7!lr@LvrrD@^U$nZ@oE#>oekQM-MQmxH#>fk1!8HQgY!?zti@1(%zU5C#* z4xjggW)|{78P=aYHqKnZW}#Vy%4N#+p2bIH_5*5SZOJrEkbhyp5)WdouBcX%jZL(VZYb#+2Zi|NNDnWK7ALw`K8O}W1*R6 z@%hN%vsGw}U)`@&!L2TzZ9>C7lF83jhtDTM(+c@vxMuyIu5kHm7npTRGr?YoXq#oc}3&Ist9k(;W_q%`)VLZ9(0)o{7_E`$}kRKflZ3qc;Dw z(Aa$&n?`N*n-tR8?WFaMlh(IRS~iWQ^)I2J9a7s9pC64Vs`q~jO+)^IhT&gUTFPfn zh|kw^Z{6tf`A%rya05Pj96sNN_&hY@F_=I!KR*b~N{i3;4j(?G>&N(X@$6gU^ncQX z#vT`VHE5Cc+8&-7m7bPdKIuZU&dN^>i%(%OZg^a+ot~EM)9kb3%D3Ed?IkpJpFhLl zQ!@oVdpmq;I(#xy;8V-tlj-ouN`X&pp@BgJ^*zhsBQq_P$Y&qnWB0M^IDG1+ke_-& zv);;2U55{M6IZ6M20~+(tG>f$-xT=lCp5O+_jUO26pPC8v%k>T<;r&W@PxC<_#Eiu z=KzO~%&=9WFMdQ1XG~dgZs_niIEDNi;_x}x;lte-m6hvIp|R!M$l-HX3VaTC@^hHO zCnp6yjfKXxpB#tJ5h?IFQfM|=az4W0!xbr&$>%7cvGtYf@Htv&S|KgAgVUCFg4+Ws z)E_%WXm(opIojegtq?an?)pzp!va}(dfzW=UgPp!GP_xLmS{?p~tQfT^tkLkCxaQGZ6GzH+pK5fbA z&-Qis949nGEk4IOd|C<3jo`tw9xEt3#pTmlXs)*Sv~u{g5t`=U!7%2nL*tC&+6s+r zhix1_oRPpMk@#;vUnw zrf9GAHjSorn$R3W1_&z}T@`2Cbh^-N#(g8_)2y_VPYcUe0m9uDOde<*Wc{&=`A#y!QGUrm&2!z(3t$Z zbL!+iE}y3kc+y3Bnt2!S@ykb#bNTca8e2a796mh3G(F9f>+{}yzjgTx6dJo+ z0~|hsgeJMZ20Qr~*;dmeB0Bye7ntPt$_;JbH32@KwUO|<9v&c`ikmlp2kra<@3_TecyJ|8Y472th7cuX%#zZ*)*Eg*ic$^ z3pRh`rZrAz_E>3+b<9tRTvDwO97 zg=Q(rMH^$dz~M7hXmW55WZqlL(#l*u(}c$M8&e%VJQ+GYZ7_HM@Ls<7(u-X_7YmL3 zUgjc)&vc<-d%-aHs`_1AJ~M=7kX5ef4xdYehVy<iB;|9^H3z-n^0`cC7F&E~I(#k{niBA+iR+_{AH?zVvxH`h#piN|&upP#KZ^PJ zbaY#oBT%7o%@LY;7N6M;pSdAEmmYIdoN`?uGz%?0a~(eOgoZZH{M4Gc1f~X5C_fcK zLjq%m^Bg|&g~r&=_+j@nbone08oU2I-{G@RXgVVY0K6BE*y|~m&my7Og8L>v3mraJ z3XSQ{pO^F1yDp!rgvQR#l@6b)g{D2yqI~u=ZoS6kbB)m0^10gKbFI)!_xUXCGW7|U z&vio6&64xA4xj6V#`v(0FMQ!4m(LACW4G_uJA7^wnhTI0`nokAe!0-)^BbYbwDNPK z!)LM3-$$Kj*{f2B>M zZNcqAgAOQ<;)M0v4a1!dpSy&{_?F?1?1(cSyjy5CSUSDS;qwQfIS^@p%zJJ4+r8ZU z+#@u0Tkr>m&%HvkH<+-WaAn%$5> zV@h_646qYCes>@joQz$AxAhgu}ic!zzo9+Sn7y2lwcoH$S%XZ#IqE z#*;!*g!{E{EjjS`I&NC4g=V@{_9v~hl+RNs@L@U9(}v>L==3Rv&oe?p8Pbm}yzaX= z{qQwPW98==htFSy<{I#*i|gsm`Cq%`dRA!cxzoQoe4Y~;`X?lpU_Jj@p|RWC=NvxI zr@-e0htKm4pBGc$vrcGo@oVJ#qQmEJDe!s8;qy0#&&xtX88gJ+pSxaY3N3xT?C^Od z1wO9|O)vbKa=qg4c`XG#8yr5bIeh+}0-x7~#_k*c-Qn{_3Vb#?eBN;QyqN-@w}d9g zlJlDmpSOjEb6)_w5C65#1h-yn5*m99^0ve0ofP=I>+pHU;q#u*B)6Zd6&p%S&vqflZJN$>k=ff2EeB|)?(BboO3VgN-jctb?JAAgKz~>W(&o+n8 z_7wQ+5E|PKw>y0PnF60r9X|hb_8{&zC9i*(EeN z_%(j)ONY-_De(E);q#Tl=NqAEPUnnp-}SxEbnE+Wq1l1^CO_Xee7;Q~KmQUM`(4tv z4xfJuO>+OU$KmsDhtGE@@cCY7?Ed_B4xb-V;KOcV_?rShIDFECriDluYlNCUbge7r z8bV{g<48-V#O*ag=|W@1=GT2N_xCQJ456|0mG1D_OK3QEfdYD$e*2d#E+2k{EIrNk zV|zJ#_7)oRF7oduy&C78OQz7+OYL9DZG)X@zW>da;kgr=HNP zM+dtn_#ArgHKW}8@Y`N9)TX=*`qkZgsg@*4X7~-G9 zxu4K1x5~b+m6r0!7Mgp&gL2+-QO_&fJnt_wS7RV!##h-EAIrkQLIG9%4{MDC^anm|XXgXQCIMhl@ z`5Z1Z$=k0Sp;>G3Io#pXI0ZgOID8sAe2x?v&e(-H zB5rX0apT^Cdwbmz_5Y4@-tU~8Bu#(}b@CmZJV&P=aZ=Zd{=_l; z+|SV&kcLhHam?~Oz|k2<99=IG=hq%idFf7iIcis z)DXukht)<{tW!%IT`%4_t#q~<=aIxQ%VDjfGm1Dt$cxP&?VlHvgUjRnj2`ac$GZge ze!(b1hy6T;IC@NizlUgYIL>2<1A{rr(+?IDBz^saxyjIJbaa}CgZ&QfgH+CKPH;Z6nK+B!U)^Rl89H2dT8OhP zXrP~QAH?KvnLn5~x@_cKv|YrFbCfu18D;EXBP`ZwB~EV$2cqqpKW7|7E52;Rh-1!| zTOFOL#Mx5mtdUc4o~tv>(V6P#OeYSGTQC;YeUF{$>dYWcPax3n<1Nzb}EM-gY9p>w38b2M>^mCl3LPl8YJ`F;#>-ZXTMc65#<&U#8G za>Z9r1mbm$BhGz>&asZp@x=KbGo1mn6Bh;x#mbG)N-B5@WdorWh4Dstm< z5^-i2Iwv|hCld$zK%n`4x#qBaT%A*hlWpjn?C6}DhR$ik>22to>gb$q>HJVWIl&qG zGl+xp3tcZxcXZB7L+32w+-B&U>FAuDhR!*}sWf!Xc6827L+3o=pr3WR&UJLoPebPd z;^25y>zwcCTu7WPRK7RPUpUsy_lt!5xZ@D^G z5oc2v8|(4tm4*)YaaR*(ThPEhZrsM}A8&HFZ@Pv!N5J=DDV8 zjIdbeI^rCsbl&~nLl3$-*E>4bIXX8G=TOkWIPZ7(X(g`CjgHO@j?PWQIa=vFKW=e? zHuGjj=O#zz7UGOl>FW8%CG~E6ZY53tB8>AUd~PvxI4^D^jvlMy`k~2TAKp$JJ=a-p z>cpqqu>MP&&mjywroG(=i*@d>bPl><#zI%;PU4v5@D4}kF5;x#hn+>7H;wq*<>=f^ zoDF~j)hEe$iF+KKyB(d`#L@maXWeOaZo2Lz&c{Z4W;;4_ES;BL`83bfxsN!ef95zk z_ggyu`F`aWT%8AqWA4k`@8~>89KDW|_+6NXocKKG=sax2XU7XS-PeuJBgAjqM;)EViL(L38OzUgvoF2P z)p>$AICs!v{>L4iCy4`2p|<6`pTB8wb)F&)?#Al6{G_47b@~5@W7cJp!*y^zaXx^s zaQ?oq^t3`Ztfz^S4`Jyxe7+ObGgep^Ee;-FayYDKiPH+>ep zo^`@{-U2ntgG{yqw}hx^Ez=t5Etyf&d<)<)zx{! z(Rtm`d6PJcKm+r1pA8p}b9LS#j@cKy>FB&ooC%^A&N*3_pMA=zN`q&Nsxl)6n_a z(fKwFo&OOB=R`VP-#R+qrJ?gZad2Hi>wM?v{E&vukHo<_k=FUa(fNrucoqO?zCM>+ z5C6vd`Dfw;44t1GonI`SIeY$|K<8KD^fq*UaddvObh6%pX5NX<@5C|BnEmGH{6U-? zWqtl{yTR}+K3#tjXEh@}e>gge)6n^gIOf{>Vn^riG<5zUj_IGj9UW{=d3_a<=KCdU zPS{PCpEw`G_d4HwE8!>eY)@7iIz5PEje# zUyqU2GIV(Cw+?ai*bm2JCWps1>k=pRoUtcyaD7#WwXPG^dRACCXEZq+*80Th0d)t* zy}5lJ%y!eY0dcM}&h4!4gtZ}Yc2WNM>%C{jn;Z^nBjVf#92}EW{~d-U`1rcKF>$ap z(_`9=oUk?_&bFWdAABqIS{ODt9M-19Nj*;3j5x1?hOS?m8ey@{=EPYW{DX16cg+@v zR(zcQLmXV&(K?$uI=#|}&lbd4WW=YJqqAiiI$Jq9TRJ+uiL(*J8P}uw?QrSQZo0N6 z&P7JLdOJGX5GNNjfaZJfXMDFR-ap$CXMv%!jib|tIMBG$^ToRjhqyZ15yu?=^l@~y zw{&jt{kF5KvjcI=aqsqy&W^-MU4C{Vj#++obaZx3LuVJ_EP|Bl^0Tv}vuheUeI1=$ z9i82Xqy2pG#83X~`e%1XXE#SD+tT^w$D1E?b#jPf&YQ9wom@*N@f<&oIA(t3Iy(8p z34jlw>F}+&I@)G4K%#Ejp}dca64Z>9Nk9k z`r95Gn;dRi1`;QA8QX(6X5T%~2#a<0B#zG0>j&Smy&Grxhp|h`} zGb|0A;lv3TI>Q{DiZpaa5XYPsR5&`7#OVp?!l&$zU7m5%wI6ZJ{HkQob_-bh!Kqf~&>FA73 zLuU+e4l{H{J33>Dvo*v8d-cNnCld6_`xB>+p)=Oe8JC960mL!agvU8L2NFlu_d6bY zdN!vI0=+rwp z6D^(Q`to;Nok@<)L`SE=(n&lXi#R$Bj?O{EITOkbeDHm``ZO3u$Bz#u6Q`$9ehzYU z8i}LpSK{BmnnE0NoY3g#G^L@_Oq`D)zIr^?-$AJb+_k3Gk z_cnCD@#&gQ9Gvgy@y|3vhx_gs#L?rQZMO)VYI3;Gok<+5%OI8HyzwE#S;_F>Od~AT zIg~hqRGdp!{_izzoDU<8IgUEi(K(zrRVqHatiA7!uFes}DKO%5xTAAq8ahW2r_9hf z($P6O4V`0%Q)%cN?dTj!9GKWsP7a;F)q!rhjw6nlu45gYaZXX3`F(GA!Hv&J#HoRF>GKjNIyxs4=Wdm*vG*_f*3~(MI9OKoI?2h7&Z%kW zoJJg6gVj2xIy$GPp>qataIB?uPIq+9B+j0YF8JWP@uy8LaMN`badw5Osr`JWqjNTK z^uBQ7-%C1&IA*;#+tE3fI6B|Mi*|m+jn8?+G5gAM9i8(fK9DTm<6Ga^$>U3R29J4RD($Trviq9|4?Dex7 zpKFL?`uS={=UPjrUwJtcrT9MOI^vjPwrd@o>xr`w79M!E7&+;1SLX)eEQ0T~f3A0Q zZnWZa(2qy&;p*H(9MjJ?IyyHKNAGP_^~^ol)wzW@rk`(ibZ)ic^U1fZP-^4-a~p9? zKi}%;+)kW}RN5~s{__x5=fA`mX4H$@9i2Of0~?~`!}5pTztYvY)6u!Z(YY&)_{?&2 z?s9bQCQfQU-$NYJ&v!dIvx$T4AwFl$9dMVMu6v1N=KE|%XAW^TWf|XdAN+Qjt8*W5 z%yw*!qjNuTHc>jGj=nL$d94SCW2WnVN9RE+J|Fz`_y4)^dC1Xu(9wCAIHf8+gRi=M zimUSoam=yk!;a2e;tW*zd6oSsT2@%w|15$9vz==%Psqw{zg zI!_SiH$&%fN9Rf6r0!3jBF;lb{d&^T`9I=dI|el02wz!(erG;$dK)_b=jc35oE<>} zy_@*`f@g?>1nr-v9i3;1vy+NX{VzGQ-TZovIBP+C^my!9N9TFsV7-I$Cu|tb--aZ{>%8vhyyob*E^2Rd&JTCHEe)C!MN^yN9R39XCZM;hcvAQ|Nm*) zNkwja77@qHuZ51z2gDf%8t}pQ%{NzpWPE;oNE~x~_<^JI5pi_7W(CeIbag%^j_IF| z9Gy>y1DmGwto-7AIj+v9j?O2J&S%6)?VrzyWBTVa(!rn$u(;6EoBRRigB)a%gTx#J z-*2&X@XZGsx!ghUw6w>dTKZut zJi((MM%D$t=!cPA9b}*&+CL2n+0U;LTt~oXrL5jm`+Po}vEZ|oAlOIZvxXp8`tj*4 z$R7&XP>^+0!`e%b?G>`AAbTlfV?k;avbi9W6|$uuM=N9Y=Sh>aNkJks}@CYK3erI*%*lAVI!T$RI)1!-fo=l?2&cA#Y3Q)e7k^ ze#W&{esp|pR>&HnGgl!a{F?KTLhcgIdTOcSNC|70LJk$=1ce+c$fF9mPLPija+4q{ zt-gGRclou|J_^}ikf1^e1i45dR|+ymAukB> zxOqXxT((l}@ko5(5ULidN`BEW$1o7+PmBer-g}fmC8KRIICG?PE zb+SSp6wbxM@hNZI;UKRo$v^;(V1t$_05= zAqR=oR|;tmWW5c2^gJxcUJAKSkZ}sRLgIXpLhck~u0nnlWU)eeNPKp|2{AlF1*uU8 zqFMNlFX|u{DCBxko~4jkg1jhJ+N*Cn$fpkSql3`T4N*L_&YCz$wUC`0WQc=IRYRjY3`#&gOdQNXqIEh2%@x8x=Ctuj71#V|BMeRuScA6f#$kPZTm- zbk@X)K0J2_XHSJ3E^(frkePzqqmZKo`CcKP3bG|0SD{D8xk4emC9ES9(jv$`3K=ZO zI|^A%5PXXPpKBznUbsvS&kcg?t&n#GnV^v41-U>WUdwi?Laz7gI6thAzXf?kAyXuG z{!~b_Alv*0V}p;@sZz-Gl8Pf0(%-K+*Em)WDD4(A4ij2E336_P8+p9*?^6bS|JsJJfo0H1o=%NUMhC!&0%>+vxCf1$a$jkgTvWzYt||EYmbdk$O1{%Aqu%o zI9Ds=S3#ar$PhtR+r~%F$D&iDkX^+ahbv@DLGD*blOTU8q)3#v-IkSa5oD-BeiCH5 zLP`a>LLnuByr+;4d+4-p+Q&!F=Ykxdkewwymnx)}Aa5z8QIIXRV;wJdra8z(3YjBe zJ+F|fSJLtMTOqd!lD$1EPZVT-g&Ziz$qE@S$ZUm75adIJ)C;oC4y@cD$es$hLt;2X zA?FL{K80*A$PWs+T#(&&WaT{t8Lg0W1vy3`uL*L$LS_r{qeAYN`0TP1D?cd6D22=s zt1}hyh9Ivgq*##u?94hB3NlL#pfJBq6)b{kXsdUk|6IXqK_66bM%^ajvF&IF{=LS_Tf zVj-Uaa+Ke+I(rYF@2o5n*>6vu4|nW6<+A~qw~C2m?FGuKn#iqy;7XQfg+FB7v!{tn z1|)ku6L|oT-W!<6H-Ox^p^0p}4kade8PobUikOKfY3t9mWxeXDhhaU1JT0xESkWnQN7L->Hc^D8Mlm-u} z90WSx5f6DEklw)akbO#hz6F4K$nk*Sla;0G&K(K?TPV*rCM?fy8JsM#-)=Dd2maAI zF$eiSg=`OD^&t9Uh3qIu&Jfo5N_4(bNP)y~WEpb~6XaQi93e=coH+*y@}xqJ5@fG^ znG+IZoCJ8cEAtwm3=P>3RB*;?=IYy8{!?K)-w1NCLS7UkHkvsL1!)+= z$OnRq8_USXe(jBy_h)4N9vb<493wjjXR8Ak`AIl8Dda*yb~}(cl`CnTV-+$|kbXht zoGn%h6!NVgP2-s}Osp0uq)0edg_u(<$oL72>@7%c9V3VPb$sqt$kpPF!g}V+733L( z{3XcbFmw8e@){Evxmh?*DdcfMj+?}sTLl@^z(}d+yr_`>3Fr0*bG{ek)PorLKS9P# zX5?u>`ZhAMizt7pkb#0UPhrlUg8ZhC_5IpELz|dWBAoXWQY%PvGjj?B*`S4ylSF5t zLSB;?o^dd9-Vo&8C?lT<@?t9^UkLJfjFG8+9m6}OGV-KwhEHSUDB;Xf$S#5uPG`=! zf?TPPb)}4jW-w=>q-&3vj2tA$dWSHwxgdpyGO~prryRz}|B3Q93K=U%&Ed>BR*<(9 z(j+=>9l@N9gp+j?BlCqbQ6Y_jj6Iq;;{PBd`1cd`TGJ!?vpZh_C<``E66PuGcr|_^Dbqi zRgi}+W8_A$8gvCC4+!$im5e+j$evd-vbN|vdkrJ23i9o>jI1fh57#mBU(xyVdPc?y zC+kK=wi0Chn;6+zkZo>eWGBDQ_oo%|n{a-+g*lfB(&sits>FxSDP*)Deg4aw?L>Kz zLe3YRt?y*c4}yg6Vx&TJcAmvZjUcz(&B&Qzl{K4@uLarvUPks6tA2ABImNG2dii~f zTq{28`2Zu23UbVYjQk_W8V@rvK*Bof5k`gxk~NQ!AH{0-#~Arpka15i@~j|-KE=rM zf?P76ksU<&jAt0xNswcnW2CPjQ(s_YcR?B!FtV*6V_#-uJ3)rMsyKe_pH*ICB~SPM zgps+Diqk%2!8M#t)vcF@bzgS)T zBO}iW=aZipxku7||1XTJES%MUV`P*d<9=u4KtXQ$gOPOw+3;^h#tZWOKa5NlWN*Kp zph`hD#tTv4>Fd|&TA+}N1UUs?N`vQMLB2<12+yQ?(04np?Ds7yGm%38$sTGVF9U*4 zj!%cR{wjW7V3^671PDH-iw|#7$lns@?-X*ha4O*^gOj!zlhbD3b|O2g$g-Ukh1mJ>Rdr?SIBpQY=jqE!ZTC+6IIB`!ud`i zrweirzLpBlmx6qzkkx%U70+$VoI3>xZo)`~AU|!!$VP%Z*o%=P1S#Hvk?RE6XiG-c z_K>X@nI*`%3fWqaF}<1dryzT6&B&pC9p|m^+I4t-7tU(iGV-e+KPse`ST$_NoUa8b z+n$lr1=(f?Mm85DYez;l735=uY%NIj&dm8%kiNSxvQUs!cV*;ELEcfwR)Wm#%bcTp zI;Csx#>g##+@+A81|d9x*)eGWS$_~;LEJ=JR!&> z3OPoQH3u^1AD{N>F$(!hkUtgDQ>?z+gRPDcPQN`FX%OVXy%{-7kjM66O;-BL!Jd!bqzit%DhPUyzN;7`Z^=e1Sqf6wdt$Ss+MmIa_Tf$d>yu z@|Yl3DCBiP{#3|(L83$1>SaOBR>-=7OdQ6XCj?owf{`@^d1C}4_X=`bB_qQG8DGuF zbAr5qFAc-9o*-Y1V&o=4RvE*{Q-ZvqkR1d$b}V!56J)pj8QD^hp5qw#uON#RGF6ak zg3K8#$cy6{IY^M-LyXi2vRfS^^@1E%&&YT|z6mo@DaepXj5G-{rGb$aL3W$WNTVP# z6mpIrn>8}0hm@bc6>^*)ktxg>D^~f7sgpOs-d4hbSkP`%X`8ek6B1rxTj65UAX$t8tNa!Ty6bO=g3L_5* zGWRq_HW%cW(-~PL$W3Q3GF_14&t_yNK|WGQu^{W7%bXVk>3<$0R|xXb1&r(=$SW5z za)}_PUBt*dK{mLUky8W-T*Al!g8XwCBX0`w_2rDbE66%mFtV>84_w8_wt`e&&B#@P z>~k$6dkON}^^9B~Nb?PhoFqu$jf{*Ir2ZyG-WKH4n;E%AknL|{Bu|i4Zf9g4LFV1T z$Z3L1yOWW#1c}|n$QgocG>Z|RAlVKw*g?iBh&ZrN?LeQ$h++ihnU(A1) z60I4(ty;ao@1}#*YVhAZ{CYR%A*JIXtKQ9~R|_W>5VQ&kQlU5=(xNysV3f;qtFsix zL+(|`&7$+JLgomv`aOQSd10;~0YLEaki!-7fN*XGWPRXV1@lu5{d>jnkiyxl>>;NE zg3o{b+G?Icei!6dh5RDO?)S1cKJ{sEb+Mw5PUo&=RVdc70x4o z;Nv0t-Orp>;k*L~J{~gp0YBaIvWic~=Vn0g@sMu-$+wVeAN2cnvXJ0Ie%}NO+2vus zugXIH0%WX(y!eRUhYNIGSpS*p_u;azhfD$FBnz1f$XOP$-aNnWA`7VlWPyb&0^~^x zse9D#+ZYn-g|+EpejhGzc*rY&;9`Y`obkBdhszEgQvQVBw~D2+(vyDQIuRK`E#y%^u%lVUr*m+?e7|poh1?AY7HN;O&eMJ$Hi;h6 z3n?>o;zZUSVOg>3e`-&bQHrvMVPkUs&LWFd_&_8uSuFr0-$K@Z!|%iQFg?x$Kn}2w`vAdPb3D#pfZ&}*9#ZzE-}iup zoC*lunc;C>1q9#v^^ncq^84_eY!8_T$XY9#$UH#&7SbCkPCpAd6p)=QC-`PxEGdEf7wXCb>U^!xBF zP%rJT0`j_r%v|L6?XZf;+28}eZ$k^Y8<4Fmr20d@Z@7ib1*FtMaz66=4z-Zu0BNw0 z_W;2+MZFmI|CoEdZ+yDVTnq?49x@*qF&wvy&(fSRpEAcoz5`@m;M57{sLz<=Asc_r zIv#QxAU!Rs;xGL4%aMArZOEZNBBkY#jab=3iZ)^7G{5%q>`fWT@sQ0KxlEANdoglb4{f#cmK@gAf~?k? zIUe%$*32o8l!mrrj)%OvBO}j?PX5k}j1lDAU9#wuDekp-W&TP?@u(iU%zw8l=gxX! z)sUU#y99~{?!J*#Zhx>?I|~tQ^?qKKuMqz7I9QzyAw+X(27n1Xp7P6kaJoFCa-S@k z$5lz_{Q_*|A-#*Ue2-eK`eA@vY$5Lha|Dtl4=LS`Id2MQJ|Osb$bMDK z=`C?Ctj_X9fwLtcx?R1T5M2^>!C^T(p4C>hj6_A}>rq+0X~1dGI#hG7Aw=uU8Jk6S zk&hFrGsb1n3}~#j%Eb)3+z-E94*!L$g{SVoEFV@wkAoS8J)XxY7|-$XlsB5dDfN&a z>X)#=bBPWStK2WTsb^QDAntC7vnjzMr9 z2jh%A-U0AmPS;jZj*qAOU5w-GA&*XHPCp6#_8D2eV?iTNhfZbnPC`(5H(Dav8=u#t6hPGjITfV^~M6RnhjQ1=7~c(e<~eD z%+SAfLcdaUiVxw?iDQNSjT8C-V$}pz7&>t%^i!1%BWCE|Iy!vwEt=h|bcjPb&nO*6 zOr8HZskl+%^R==fj+Kh<9IM%4wZWmBcH&r8-#c-BSgeY`3e!#;it|jR!-yH@ADqzd z6P;Pgia1v2Kav&JKj;R0y*AtHfGe_eX;}zXJpm;Sg}&oqoC-$F(0_75zfD4qDl6hx zq5tey{VG;BC@bPvR=+q_KZ(`*%8EFa)vsh_mhg|M$H0Vbaya{$IF!=!0Ktb5Go`;d zIsx(6`bV%1amfB0K=5J2)cM`fDG{9wj$|F;kp0zw;KPWigSQa%@SEv6SahkO- zt#myJ2(DCkoYhXv^6hAGh5>Sq#kmg=D_z^2mgPIk;xq$NX~pLOKpHL1?x#b2x5By} zkTQ$Y>x?Yld`ss%K>Apm1%Q-UoVCw{QfG0-0dk+kxebtap%L=Z{wE+eS)8F~ftAI% z7Lb6&Sq#W|7H8nuS+xG_DNhHa#p28dq`=bI{G2S`FpD!DkZg-{BOp6koUahEIN9fB z`Bt(x(*fyiapnTD2wddFaP#xBXa?jV(*SwM;=Bw9w$C1C_wym87UvK^R<@qz#_~R+v)aU=Y3|F6FQoF?IfObPkj@bMR%XLmbk16A*kDF?IeX zoni1DR6pPR(;{buL}&8lY(*S2_bmpb5B!%AQ|BMj(Y^3LM}4;SB+)tJ3eIKXkj^$& zvN9v44mzWU-_$usbmo8+mKNfW&WNj6hY?c;yHi`IUUWVOE7Tzl=^S!3>o8*KppiWm zJzRR~wXb0-;#fU(53(8!+Ta#n<;c0O-72A93RaXp~>a6ahf`8Q-%@*9oR>ZMV zv4#`+a7jhc?HoFBDD*D?!G{qu^fgJxEaBfu3vkYVxg-#W?DxBqbr>;qaP{9VnfzOj zXtv%gwjz#|inX0oY$B;R{%%eMaVYd-X0r|>X6WlUsn}3-j+(=%AP(vLb06z4V(P5x z=%)9O~}gh&y`|z^|S0B;*fuidY*L{G5xct zqtjpVYy69>Lmbk1{bkl+#MIf$Nd^DbJem!EovnytrDAikGF$agl8PJN;8vYD6#6P} zaryC(NpEwj?jg^-!(lOE#_&HB)@7iCBZ6ZN?RDz964uV|u?}%4tZNs+NEkkO$QB>N znBPJ!{*2?}an}EeLubScy_e(XN(uecZ`sepq0kThj&(d_^bc9SdDe(%HX!vf!Z*X( z!pVy!DTf>U$jZdA@?uLTh8syMx;I#%*N8(gT<;gwVZ;o5D@Ui7g#PJotV0~qY50S6 z7%_EvJ30$R=c_+ihd8A3@?zFu#MIf^(OFw`9{7uOh(kIH{$?FUOr32Uo!3R@vwv8J zIHWUKjYJqRb+#p)@xX!)zDIvK;kzyA6PkSoR(rvJiGzS|p&wT6E#$?l9yHeSIFI(= zQ4b?#SbZogvwpQmSa-q%1p7?lU{JmzR%K-m8NNmjnw5CSmTPlZjF@3d393Ky<+=N4C#0-6VC#BOR^qn^2 zloE$R-=G&Od&u8gatuA>tF1XKM$E8wa8i1Jg!Nh<)*%jsb@dLMQV(g`nN#W^d-vt| zc*yG696BRr=sP+o&6Chy&*hX7heCfmkCi>-u6&N6hg{u{!(wE&39YSU3jgdRVQIws z?-~6$EaDJ+DB!Fhp){0c~cg={>ahi@$l=?e%xo>dtjWfl?wWK#<{91xrv zcvcqxvZ00C0mv{5c^Z&P3;7g~8bNl8%0Wvy=h4Hz5qyWw(X%JL#4F?YS5^VX8P9@b z`An-_$cGyv37%Kqzw;l@Do0r%$F|y)tT2W6-lfvMs9}@-~5O z5FJ+DK=vVWY^xly(&>8T+}$qntR^cf?kR(OsCpWXi(nCDsDqO6c(TNRL%E{7lgiFY{Y{CZDWA;-2F zNLK%$kbJ(1IRhZF+G^cB*&E2Qt@a=*Ts6UGoAG0O4SxL1 zvl_3gkYiizMOIs}k?-keZ#3%H5y}cV9P2j$!4SN*7LaA0S*f}w$)&=+D2K8>9f(Rp4IWn3OTmb5VG1rS;byI<|NN*wIU7+ zIkr_9S(PcPxi!Zw_N;1^6>@B=aIxNBxcs|o zJgbGu3OTk_1zG7<>*|kpTGg|{B!G17aBdtYsv~awpA@zZK6Ui`Rrb! z2U)p{!$OX2HIl4!-TA8Ov(Y+!K3{)jg&f;z6j^Pj!uoB@HAbs7MOh)owi-=V5G{JD z9-C*h;nyiEeMea#$F>?vR=V##^REfUxNiM&_6BlntNqDJ z_i=msj{2V$R;jW=j%_v0vii^CuTAl+j!;&}v8@gutIbuqZW`449?xoyvO^sH)?6>@B= z5LvASHeUILjHc&Quv!T|A;-3wkizO~WrZA$bx(K&0ON&Y30tR*bnw&>K5y^%*$dhR z?&Zf92jD@DZBVY^#Z6 z1w#sYu5Ed`)C=oZWrZBuY7$xLy7Ot@qoGODIXHVbhlL#5s)4LVs<2Lc`q(o)tDlt> za%`&zS*fG6z61Jxc)4dar-H*mj%{@iS?STmb^Y)8(X)z@%@$F`b6Ry!)I31@vg)C;S4Kej@SZPi3p2P&(D zz0TdxvpQN?A;-3ACMzGTKjPE4>lQ_xRY?_xg&fZt!9wb&MK^jgAkdutE=gx^&wE98I`F2Jyn?@+SZ8aP-K7j8dk zch73NvO)?s7?%{^IN;k)HI&*}nYg&f=JaI%7bv>V}*&ab@B=BghIWm2kaJ z&nYY9*y%cwtnmFzOxN(7acg;2-zzKR*kK(-RytiDt$OAep4Fyf+4IP;t&S$EwILj4 zzz2!zp2`Y2w$(9YrSq%ofe%0OtPWIG$g!=CwXDW(u=qjG>J(*#9I!HS`8cwg2=PL1 zY&z%o*FCErl@)UAu#P7y?Ty1%-43d?&aYAXb6SyOTb)2ws~bM>tmY^yQ5qe5TF*-lfPO+?BdVkZ;J*!8Q6>@B=Q!T60j%{AYvwB@wA;-2l&9XYH=-p|a)wjwD zIkwg5WQBQ(&x2=8g2h*zr>h*ment*hl~mRA8C?P`md|$vS(U-3_3=;Z>8q@WL*G;b zg8uf969GYAddOXXK$SF*w*bL-d7R$?!4lyiTO7!1)E-g@2-YDFsRyLDg`5Bgj*L9c zO@QoZA5FG=FeZfGn9jI*kL*kg1SCFrLP@q!|nD#CtQ}G5CXb%n4q2&!M&^{fg!^j&r zP+|Gm*-9lpCr8BqKB*YMC(X-&cW5}LbKt#2^(kNR@^W%jit=;vh1XyCDnF+{`58V* z7zNrkH(SR(H(T)r%~LS|OhW6YeVW@} z!tJlUmg~hzdo4dtav@LWWnSI@ZIL%Xrzk&9>E-9=d6@QOzAjf#Q~LV~3xmS~V}^{b zEE-*2UfI8Nbar5DPGBtJ!{c#+a|2_FkW7E%!5?U9{lQ-aYfWNsq{)=OkQxj|rnCg% z-==Ay#z=jzB@_)!3CF@w{SEvE@08|gVf|-oEDHZqe-##H2ZuG+O^(C@t+Dz*V85c$ zK$(aZ7UnqLj+PJ)Zf%ane1+j?v^g3mt*R;+F{l(2iXlbCgGS}ogj-un@w;KolS-QF z!+}8dSoBM_M}@$EN{J5!ON*+jORH*vgNw?Cl@1DEdLbDtE$%u;TnyT88 zn&7bV>Y8Bj7(gn=xIB<4A5uZ2YU^82FE0YyQuwZ7sQq2V2r{tv6}7{L1xFO`TUt`% z;)9B6id?j$wyLVMA_2XkbaVo=vZ{2XB~m)PvSy4Mlj5R5!OEhlqT!`ArB#+ebxk=$ z64PV2Y;Xi}I8cIa3IvLZN-K*-(jUYN1jwt|>TAq!0&?Pj)`n1HWApT2U1K;D)ndS= zObJhEiOm$SxHMRS8m*D0NsZxHbCdH;W4LKjtigcGkRPhA4`LY#*UL9WAXVAFsI0OW zD-wL>x&gl-9c-OCAr=kQNy0ELHg#l9Adda3h+B#5O*_+J9;VsABra{CpiTHIe8g2~5BGbZ2cvJx& zRK-kjRo0@bO@qK#%pWd$nyJekG%M6B*mvUriUk`(P^yy?AjwdE!cFywIN~28 zrG?q$B_l>uL38a@F%ua)m?~tBiDB`X5fG%fbTA?_9Rw?)!Gr2fVh9^#4Hu4q9;2ve zq}GLx*@2>B_=jRJHs!a2;M+pO7R@;3qZ8QiH`#-Yln) zqC4{Gq1M(g_N>t`{1-}HVV@!4rf@V;H!@rogT59@b#ZfZVwB zm)xABhL}x-#fiTzE~O^8uul~wmt&XM(*gRjHWq1YHA_=9j!X@U94vR~dkqskq_KHI zh|6g!4qKcg8if}V6Kjb=hcFR_vfL}sPzRjDVd%B;eX#XnJFKVk`mKgf%r9nbeSoYvGyR}`%t|2TG4Tn64>Tye`ULzPEs*Ta+SSS{TJ|sFR zYXr=MU)S6e3q_h*H3Qw>CIK|KxI-@+Z4614ps{>6BbfTzNv2(yn9U3(`GSgB zE3~N*7_y2-pdZM=j)UVfp?PXkJ&bFEQ=3w-sN8xIJaJJS5(~$5N5OpVR}y}iqvE26 z<}d?-89?!{5hX)mqz`i}V`?;PM0HK#Z(w3jI;3b=a7b0rpz`=h$*8Ik6+?ofsOMH{ zCBYH3HK-pvB-GLpj&kLTAAv#s@`OOxJiNo6huWhYPe;C?8Ae?LlnNNtgj)ha2?VOm zewRvFp`Ic0*kAXGCDGWR36rYAEihpirDw0fLE#BgCk3ZK9~go%NmE#yQ5OeCWz#e| zSXAE(W87dlG$!vA}`oCaFV-%Z|xI8qiF-_>-R5WmI;xM#vOA}16 zk_SRr1A!7}XTb>*Tc^$lErbk9rNpo|wzBQRT^pBNAWt1Xg&I{$27hh<;m21p;)npY2 z+NpZPW6p#5Yh2@ynU@xEX2QtT;~Z}ph66Uf(gE8OdK}nkD)!*!3W$okHLdod)5c6W z*ABk6F2o5XE*&^BEeXO1rL3{t?C&9x+U>}Qh9|)oIT%B4TRMeBqw>M$ z6RL>7Zbk$2P!c2PEnFK+>O@$SPOOeuI2gXQ_2c;>Y|~L1qtiScR$5Gb;A1jrxg{2% zse&0n_P6o$QnaBUOjKz&7X z1V$g04Nos5u(&u;1fapjEf4fE)h90fB_>s;GpM#ZkV`#*_l2f&LR4kJ80tsZYlt+}zyOhJ zXP~GtG6`}3i>^8R!vbB#CORI2o1?|J%o3U~I08$?W~6D;$xBZzPN=yl30Bbds7mwF zNYE&@q&Ru_g?%7dtySUHsg1D`7%JmJVh${~mGK^!S*P`!*GL1-BlWn*7_Ss&TXt09 z3@bgLQ?q2F+2F!yQ}vX&4VvoXO4|zAtG5;t`V>1@9Pn8TN(E2*s4`ezI_7cKYJ#e3 z$CB9U>arxZ_Rwib6yma!TZTA~Vf`=6vDB0Ef_6?NA|}ZyYO4|jZI`-4w76VR4P3HJ zO`s4bpt2Rq19Z}Q2h%L6X=&KIo9#A7zb7mmX$6kfDauFM8pA`A!^M$Fuu!gs0A@ij zD_1q{XTUN6{HvS(K;qg4Gd8D4nM%4Lu|{Xff`v{(8dyv-j%08;9Gn7cwGr5lH~bzK z2=5osNDRA|v@NED>m#rng^TJ*)zt)EQPt{snrxcQr^)5ne41ohZ%C8Ni{)*RabV1& z-W1GKW8gFdWY}tsp|J$f_%@Aj?cuI2B&n?>P}>-TrP4Jy42M9H6)lzdlsCb2m^5!l zA%`A}o4x5|q&B5w#93k*V7?P>O`ZT6!{}P9$BP&u*#+xhX8=x5w2^$QSg@rLi`0c0 zlanEa#tIe2Z7MFo<5{j4%tzXaq!|enQC_Kp+0Zgj!8AY-t(#1 zFoLNQ!`kt)`!<8%?SGu6C8a`5w1z8K8ep(938sW?*jZ*6!D8GkZN-djp4yf%?6dNW z&{Dy`OBzFwDG+q(#+l|$gCec4UXUKQ3Kke(Potu_X;?T^AI7Ja$U6t7FPNv7yj zg(o(`esX!!n4%ex6y+IQj_!gzM_75CQqhbvS)C$ z9XoEFtHUvD0&yiFX;@e&V9G8l5?p1$QcwQdYg*FWGBce}xzch((I&0%OrxUudK{UuMO^Q@oRSjgg0%G`NUX+eN{OpEmZ1WU2CbXbzCjr|S_1svy|4k)3MMjaX^*0%B{JZ=l;C}+Sa z(~c_`Fg1cRo>mc36;6%OIy?f2LoW+8)i;Jq8Y6Vdwu90SrAQqjgx00QybPg8^As#y zF2PtW8MP@1n**~UO2kS~qf?paN@?a@8+_${8fDm>MS}R?gdkC`nTv;&$rr5h#&3uB$Qk0Sgwj5#`?-A}sOL$CF1BYfC6AkMUqy$b8 zftH$(KBj9OCCz~03Ilz zv7>eL0FSvxX29t$J!*vy<_T$4G9*VKkDA*K3+g1xVq0O#rI>Ukh%!%`!>yCU_7FA^ zH7=l1egjS7-CEQNiLaa7c8LVH!$NAwP_;o1f9kD$g;2JJaY|YZI|^wD0++U(Irnf} zuF5)$1ltr)CDD1W#;h)JBT7D3fZ_0T5vVW+L6T{dz>RTb4lSsPBxK zTn18czBlVTuj^o8ZrfovOw{L7CgTZ}^vsNM&ZUPnWCbcc6$~6*F*q`5YBXFDYQa^a z^x}+WQeE+bvzd@6TXcZ!w{%AbTstuyBbS{Vw0LUfOFd%R3F8G5jEvpSrFJG9;>EQv zvz$T&md4#lv(>3`k78`vnKJRthmcS$dGFzb1red9llralrV&lyL6N9>qos|I5^YFw zZzla8XyNX4s`!8#%y6h>qfWZ0u5Rj-sj#F;D-^I!8w)kn#jUp{NI&j_#R&qU4~>h{ zb)<3u(S0E~C;kOBIO~HBvMNG4%@bw1J$96aJ1%}&pJh`vo1j_-%XY92h?XgNHjtfdK@;(q*#46RtMYG40DQ)D%gtj?{;jSEd_j zUyi}Li8so;-c9ZV7cA$XQ@R1Wy5;2p=`OK9qk6FX0(YH&ZGg3!+>uQ@w6`2yOLHrY z!}UwH9pBDlxG=7n(%eKXUdINALqXm-;vg}XJ3Pe1dCL(fg+W_~Htmq&#Nk7CzI-wn zeU6!o8)?DXh7eo>QU{9@a8W`05~ewPtu5?R8H<(yJNa-7dP<;$51tB_4#k>Nsqrhf z-h19@sT%{obc0cQqE#7^(&EzcqT>DRsgLPonx|w=WO1I6BDS4q5rqj) zYqz&FVQs*4z)9Nh!5Nm2v}%)jcOH@eXUt~=CrquI3?J1sLm81RMQ|MvUCo4k&eTX^ z*`Y`lLLE%Y@qG6KpD1msrl4rsO{mex!J7x=@oO2}ppg^##bT&-&~vrGeO9euyr2@6 zmC|h-De}YnWa~RSRMkl<;YNvrTV9%}*IZ^1u?x$x*Oz>5(~s@SFIZ4mRxWTdrCkxx z?O8CT>)IvRA!);WUN*w%7RSy{GnTz&nPwivwL+r`S6Jc+!T8ao(V$?s88G03XsF9o z_`*GNvDF$4Il9;^3-_V1l!>dc5yuWJYjQG}NMQd0JX=(>FL3Z&!L% zIk5_C$3<=lOR!4dSv5)lyyQDD!Y2$~73Tb)&a9+v=XY0-vJ3 zo0VM`JG|^vf=j2tz+)n{aGnaM+`-Cdcv@GE|L~b`KRxzG)LwRq^Q}!cvlnl7zR)5F z9J=n5#OPDzd^w!DudwstLJM`l!O<{WCr(!9z2g;&+e>da!K6IT@;Klm*3VN#fo*Mso+10rT(knX4DnY}khv>v+Y6-^D)ISWLsdpSYV;D;90?l=U zog5J?5EKzwn_KE)VXc+8Q>~?`LL?0fJj-_S)afy@r$fsqIvq8^S?cIP!KVXiZEj{P z`#y!r53I=WRBdTek_$_{dLL>zbnxm{UWj>u&9koJr{ytJNV$X5RUD=FnU=aKHijJk z3dbztp$on$-<2zrZb)&WYt7InOr4o(Kx(Z?r@3$mt@e^lWXZ`?k~=0=d?70A1 z^rcA65~dp8E-?33QiLEs)6{X1!GSCOCR>Mv09P^T{th zx`r?u`l%02fP27kYqEoK&q&Tx33It5YKa71byQ9jml`?MG5I5<7>@tI zE^WsILQ8l5DsOq^tHb;j_d7?~xJ}19U21~fA&rB()7+84(9ai6jN-2sby#BuFYKi_ z)JH|Lwy81F1g|aA8(1BZ-X&PAUv4!M`ZM?`fe!Qkzo!Y~E9*PVQM^s)4FX!>!n(Q+ z%$U(q!aA)rgVh4uxvz=T&+NDY$bKzvs_V#h6D9)udwObzrzO^5qk<)#bKt8Y{O$*Q zsQvdJdgCnyTv^MEGlxqwXIepX%$w4!m<}*{%?=x3!f=wde7r74&pTImpLbf17?&YD zU+&HhS*7T(%8+=vMcHA_Tvx=bu$Cb@ECZl5>ihwzvr^HW-yOIvgjXS=$MuPW6>xB> z)?3uep8S(3E9Nj=d7`lyehYeHs17bDf+^vOS^ensReS@W+Zn~BB6Am@ zL%Uzq9P4$i71P~G4?sw_99lAF2A~*;xzm7J~ z3`QoxtDNvUC%iYdLUzyPu>6`K^OWu^;T2xY66;My_>pKBI<2tf(>R*nY3o?L8G;$n z5b4f{Sg?~bqF5a$S^7ASpd^25lE_Bv|g+D~)Z>cgmaKCiE54KXR6(1dk)@Yiw4` zPKyr@RfQw;8+a>jflwQv&b5>)-j)rFC-p6u!`*8-S3rN@`$v4?rgd{zXD^cQs}=OG zIs%r>*S=X7KY4c*WmbIQwW7|BP^$aXIy-K5=4Onqj9a@hvtYT$`z4+UFOtikeAbtQ z#otYr8Byee40KmOvMWt8BcgWAfs?Vds##P80S}xfeI+;(laMi$-|APolnXPbvoRXb zF62RIRn7eeBN0yPn(EG@jH_KnliO9|&FyfKwydip!fvB8zk%zTe$Dt+uPeGWt|_E@ z4qz7$PV=d&e=$+GEoj^(n-T3^S8+BpaCY;+?{E|~!VgV**Nb+$JiY7Z$d!qX{u@5V zx2}yp@y-ug4YMzF?e=)bd)&IWw%g$y=kWBe=k3mgj>`pHXokyUlifmW-zD3f5gnNk z+~UiXx!un0NM}1Y19z3N8IKaY`{j6ty}PhM zw^f^$R%gU?RLwZNwxqjwwDV^1C7Igkt2Db<@fbc+enzsp@#xsbBNG;5`7BO%p2Nws zcKz1ClC}tNeH<)WcJ9GVmFJBixXzVVP`j5@Q{8K8uGqDEeGjMI-B})KZZdxYEG>_A zmBDx1k}mf98C1*Ftv}s;`3lpQcjx#D)sxdXv92=7pkWgpp~W$XxuKi!vu7*j?fPYv zuF{WD3b|*-0ZUgYQf>TDOxNQ;3_&?_71Qx4~IDz4FS!}%hwICaex=yZNFs=G~Ej%||s{?jx%d)etX zt5R|ADkVTK4)JS)T_x81awFEn?mUme{hOw7{x=0Lv<)ho5OW{xT{${YYX=*F{PF%NJBe5mfrjXMW{9!-kR{iq_-9>aMim1MB zYb3w*Vf~_yrL)Scqp9Z~Djj4bd*@=Q2F$Um<-B-%VZ7{mL}yQ|2OSCMj< z#PIE@Rbk_Pk#3hRg-hk8QS}SJ-OgM(XVTWLx@@_7G7(nG3?{Wh`3m-f+ z)QEEyNN7@~K9?$&ET&}lQ|AHn4nLlh=(;f<5{=YXheOf2hCosWSziQ8hLu;>K<62U z2FnpNU-Z%r8ZmTuI65g@5^AcC)Q4hWlQX6$SOG1il{Gnm>|h11e3m!WMZ@q5E9Ffi zriG)8p%&Y+EP-KJTt2JV@|l(z_~|)3P#uazCNz5SX|-j86-7>jAd+_Zv2+XjR5wRs z#WRbWXABEZjM<(s#m&!SiXi@@sq9yUr!-Fs7l-OWz^35jzj)Y);)>!CqXSN<%!x;W zlr@}K@8HRha8o!MsT;{BxZ)C04K*!hv?Bq?wb5nh{rcvq;H6-!A*_G7q5VQQk7$|N z+5oro)lG)sO}iE1^D{oWppQ8^H5TSV3?3|Ms;{mKHAb2ynF$+HGJgo`V$^ zeW>=1-QbE#%kcZ~lomP@lZX(kKnCvdCHl6gsEl$uc`k7@n5CCUT_tsyT`N=sC!fuP zr1-wFzpfJ6_no@?LcM}yHk5?Shz(rirK8f+Tpx~a0?aaBSu{ETZA3Bd7tk4Yy(h3F z2in!Kz(HE8lYV-Lb49&pYjqn&D@FyrG$Ue47sbHM=oF>FnHQykjEGWkDfPPQ2KmB) z85pVH@R?NKG9+s4YzFwosgN%gZd zF54DNe48d8z^Si?!Cz~tYLil3PLd`L0~`*kOXv$@?nO(&$H(!?QAYSQ~Hiu8hk z$&5=>xzN%aX^MrTyt^oWL_?8SD~xblGb1~yliY1;cq(C*;4muLPpqU2&|E}@6TgX~ zmx~o6bv`Yd;Fm1(mQ~oPa+LZS8mk&kP8G0>Qaf{GY38l^Y!{PMDM-K6U^msZeWSb1 zdRSA5HqV4!qNKSg7K*@9gStJQt7yk~FJZycQ3~qcv*$(PR5_M$Weye~z+;_zMHrWR zSTO1Q$Yck2WM($hT`E5V*}RZM1Me;s^U*kh;WfkVU)-=4sEt{G*DU; z&2Ar|@_VD&&Ta{eF%~Q%(VASJ5D%rAC*r6~w^Zq@Lm6UYV8GT+>ul&Q!6Zl5Cf)0_ zQzlWDWVw7vlO$ORZDu>;q&=(Vpk_Rht^tJcwTnf(R+796x1syQ6iz}pHXFGz zuMzL^DJw387XcDA-(5asFdB$&xc?1lGMa2_<)e)`94~MrCDE?}z%YeZRP?+z)yxp; zfU${UO$(RJibc}6QXHKb$%IIKBnrm~;mRC1U8{52n^&et3rzT+o5;(DDIfoLNhW>E zIs8scf2!%y^7Dc-m+7PpintYlcCWN8)1z>me;~+o2kk>cJ3%><&VsBu5rhjWnUR~) zfn-K>jJ6-^e`Z9=8Dmql63qSx*Q0FuV@d8WmSyesuJ$kEQ>SoEU0p-CZgRLD*RhvN znrW=21M8#{395?9k=u^W=XRZ{?dZr@2WRChZ^wsf4$RhI@_mGK(|2jWQv(Yh79d+9k9NdJjyC+>H%%Ezj zI{si$V`Fn&P_FW&qFG&3Ue@&v#liG6(gYU}z)Q!6z~u#4>w`_1QgX|?O0meW<_Rxw zfeO~ekLl|Jlj;)LKG{X^8$m?@Tt?yRGvGrl+_n*n>340CZUtZyQri%Mm-*}P4uxpS zSC664wf*v1J8$UVh6AGE9g&4bFzIo+d`>B~D{KmfRtoXdYD)-S{g)Q8!$x%+C|qR$ zFT3GpN79($>-jMCUf$6n&)`8GT6yh*ukHuyrnJE6661igaZN>GpNY*;?4EHbm~Ji@ z?jKXs4m*3iS(u$Fr_H!Xw#pC!ifa@6K350Kv)dT9FWDhZ&&gO++pa`LUU7i~H@Djo zC)#>LQfG3C_dcymrOlz_FT+w3Dia4SPEkzj?N2ML^vx0nJ6yX6BR#x`Un-S1)zXho zvKMySq0r8EY|~OU-jp>eD;?A~_K&;DfWXLkoo$r=<{-CgrNu6k2~PZXt>kb9rI>ZN zYkE$eQX|>5OKAFUFv!3~54Td~cN)&)YEfM@+Nl>-|D0M0Z;^5tI#Kq^lsR2%lG*w5 z^bDKSbp5v}p~m1%0h6L|@Q4O>p{7_MSV5B-J=u{#MwfZL&S(~Kl$@$r$e;l(yxa?a9U%LDBPIqF= zX?r)F!&%%O81q^^V6gl3_DdQK4GkNXRu2ac?LLOb2VbR?jvxIkZJdlWCY?7dn=s zC0#O#PqDO?8KoC?kaMMzu5FqaYO0%=8Et}| zYIc70iR*Lta1!6)rp_j1OeOC=oRsjVYmD(;qB92B^y^aphQmoPJ4n&w$c&Mzd9t+% z@>a4}2w-ta7N}{zAUd@!mTaYk4naTg6YLEf);$Kv2+j7&Th$N8ey$O^MFVpIzI zMY4&XtQFz1lwd6|Gg6>Es(1EbPd~}JtdUl||Bz}qCz*`Vo3U#;=)gkK&Lmsk2-Zh$ z$7DuMq~FtIMtq%&gfgB1>jk<%ce(v%+eeDfndcx zl}EH2b$+GdnqFQ~kLW^`Jdf}_16-{)Usj@pRX9tPaf{O6uI}Bq#J_B7RDi_G1L!+^ zH}K!G8&?(9*S|o@bb}!!wi90P;KIp`9=>nU`O(6oD4gy5uUb1X_AzraWo2KxEdz#* zP)TSbGu2J$vfONM-et@hs=0`t87}3U0+LS0;PpfCX$kC?d9QuLE=lGc2+_qg6Y4nE zZT-@>x1O01jUr|{oJ#pOOlmTq9^q+Myq$y_a(!6R9jzOKfiXq=E?)d8Li?DaS89@o zsa0?p_jiT0A4+(h_Ex${G-uz|xIT$zxGCU&dARKo`5ip`g-gykFD~tz?@`9`&)zt- z%8sla5w&v`YNn%|al@bQ1QSW5u{ulXm7@>KdmBHl_uc6E61;@#zAk2}Hu2SnH&@2;fYSSa9PHNPRGRb52&W;ey z6uj%}+FB~kghEL!#A$K&n;T1ZluR!vbosU7+Tf5d{Q5NPWh6LzT^lTFnyJoV^T4+- zJJkXe*Gw^@KVilfpm}DBLu*=)40x@vw~&w#Zo;V1x`cG)-DAOJbA5NBJw2mj!eJ(8vpad@LaURq-iGJL zT4Q*!HtAuqj$Twu+L+_vFQ;z<_err$eMo}5ophBiU$^&O<#f4}cgfPB_DJD}}4x4_$#iH>Hsb0w0ZVXTr$w(8c%cCfBCOSDv) z!1wLf!)$418r5p6g|P? zlZ}kX?0?%#7^-gab|CdsDkJhkbpshQOr;TVLnWI}zis%nRo&<<{h zDlQ%pjnoH{Hhb0=K~~PS>A{j>rR5Zmf*dLc1pY4;k=JAu&utzltuCECY5HE6%ZU?B>y;6$4P3&w* zxv$2x8dy&0Mzw)T+X`CumaKn$GUYI9^J7ZK(|eiaIr8+N^d_Z=T&h2tOAdFhON|XD zN6T4WtCj;y&GYGRY?(YieQ%*e<=0b!TPShCluPss1e+PJ*<~@B&a77L;Z@~Ky_GAO z74!xzmx^n2J8gQ7p6Z(KX8Ls+w{il!J}{md&zV}*z|c57l+2~dW!#fFWjDTjVQ{9y zou@~4u9ntmae89DaKBnMTaxZmoo7qZef-93NxB@A$BE9Cq-#3PHObaDI-JgJ zo^$m$8Edw|zt=MzvG~>6X^F?DicL#AKJ{T*;_g=b56$*uj9;_5wPNsz+%NoK8Gr8??g_|tGFO!=t z#HXHax)7gAxamSXHLNi;zBYAsxjvgZt6^rfIa2%-yIFF4bh}w{q+VC+)3iP}mK@CG zYvOop9JeyKw!GcZ_{2N98`|yF3%>SuC)^=^4rf}U^V9Y8M(9&0(;J~r<(S?Gefn9` z8=-nf9&a|i5iTyS5Phj!e{!HNmmRIB3c%IaR0|TaDJ*Z9=otrWAz6)V<0W>8(Jhx{6peyVrw3bd?*D?3q8eGO(Bj%t|-YRjcoL%*)VK|u{VF|2)#RR_|)+Sx< zt;@YBb=TE>FI$hbl0l;y?_$G(-O~Cwnk|*+S29~H)1z@7z-&$J# zO5Re5{<+?=R2qNcvNP3MwGf@jvDN7cCQQv#w!7L}mD;b+r%bfhJ{wbP%t@(FSiY3} zD#xZ>?^g<&D8XZC*44{0YctuiGnHk-)qVB%ky|d)U&~$DOh+m?lp3onox$qfWI^8a z$V!{jt0%@%4N0>_Z1W0#v&8tNB|j$72Oi3^`N`QFNmG-e(&c9Vj-r&d>8bRW?w9iA zQzg8#cdn#QnRsv78TqF(#uJ(Kriv}W+!tLkkk}Gw-jpfZ#Y;lr_8HTz1kXCog2F^y zNl}(v4%fO)d%jnB8~Hp8)UzO%KJIg{4b(stW#IA+>~Efwo$ zDN`fZQ^eYat=6J1l^h#fQ@pp^Ju6tWYbW0+@r3$s1!qh(wL7f??p>IrIq{lhSBjL+(puPi3G&7l~phBGKWO<6OzRr0Dthr&naJ#tfflcICEFAYP-WT=J z-Op0=_Ul}m#oZ4f3ciildGSxJ-nd~N3$pbS#ZEsb@=Bhvt3~f+?5?*~2?vw8!8JAY zvpXNga$W0)GLdO|7*)xQ+9@`)Oj~UAh3Af^?Yq?r&;Q(#S8!WTiL!?=F3lyhvBJDe zZn`oRXOcDl^qJ|&R9^h_J?GY5nR07xS!Ot`Rn(!>bg52zST?b$Z#`9bmOXft>0s zUVp@MCdQ}HDxO0X%40=U#W{Bmy1Ot%T@!gCuf6fCnB>^>c_C{Xz1#P7kB#ym9K8o< z8e`pL=jS)^oY+>A>McXfIX@2{<*$dnu!u$8m#s;Tui>#wBcsW&R9KImCb1_sX1(>G zX#K?9n>TMOOPw{r+p2QeFllz>(gT1o1xd2_;1fFnnI|Szn-~kCRFsO z!Kt0R*%r#*+ik6uzI%RaT5CUZxV|Hts{h?eEuWrIV-LPP-NtGy*t)f##`Y_?iES*C3Ke0a5VwwcoL>^@2~X)QM~Ffq862S_|Gy;>W$C2f@s zru7(q@6f7R09&&Fyz@I|_nq~KoJ3)(8v*7m8us?Pymidb#H88Xq@6Oe;T_7%A-LYz z=ljwNmV(!@H`G0USk-Klmvt7s9i>(`%(+yV|7xu%&lY>I7n5BpDynnU@*m^TdpvH$ zRlu84{@zup0q*e5(0*6-xy+^5NH>VxuY*Ot@kBkmG+q1Wc_Q7pQ&JBI8 zN|ziTPp__82(JZULTL+X-ikJBJCE5MKSQmS|3XQ%g!M!W_a>>$^R3%T346P$JVA`x zwyHjUOKb3R$H%MPvD+n|x%t`FVr{dIwOa9}#<5l_-gsfd%nWrMTuq|gVO$X1Mk=1S zy>nKd)>Wqpwy4AE9V#YzQ}#A+-NRGW?&c2%G;wK7>N>ZbR#j`i9c)Yc;kIhMJ|SVf zE;Lac$Zpv{7WGzJ<7#U>Ji9S!Z^39hfguTKhb2z;hlaGM3D&uFei_;T%hxw|*3EU7Dc@f9Jt? z-VToa+?Z-XZ~2~qwr!`Nz4N7QnZdCX8@zdK$hy?naB|e$q^yjUJl(!7THEUBPTS9Y z_kSkL)XF!h_ZaFF$Kdl!>M4%F=lRl89D~oZqNg|p&wXIpuvz>zQQo`ZyR)~ZzBU%0 zEjv@qTIdSh^k9#vs~f-rpEu=NH})GxyME4ZQ?}NZXXR#Pj}NM^n)S5wK#kSR7H?6! z8GrVfwYO_v9tHMXnM^d6q%xWL4tHI&C%!Dvkj>(@H#3iw#!xq*#+V zGlVjFDh!~^*RAmei%oy5t-Zi*b?TqHIW;BgJCJz}=h^ezEb8^LOgfX!S@(7)R;7oB z6B)ehj8Ds&iqkgR#y%@!+rW%=ZM2P6vaU87GjES@-4j1s)M+&dwR+W0I+IJS9^)zA zrs+v$a?wOrO>Hd7>ugLHF7K?WhCG#XQ&mHrl1)~X8ggkb!(QU&sr0Wdes!>Wfnr&r zD?M!Arh+TC9*HlXKAy@Ya%0JKuH37!X85W5Mn4rdw~L~t=37cN|IIdSyu@gdx3nY2 z8c9rZFO_%m>1_dJ%f%jJ6g-r*XR4A*tt?iHbXzP^Q&+2n8tj##v#_4}?Qx{~Rcma{ zdu!`#EL@*0bk)N3yAf?R7VdG8M8fqP7Yf!I(x#Kc>2p#;iIMEO6vNv@et*$6GrVP# z&2;E&8I(EGwku;ZKRZyX845WD304l_Oo z&!=RDEMl{U|1+KF>cqpgHkUNh79lg;=1IZEkbO3vS2z<; zHR$|78zcX!2Z$TCm!pKWQI_%3=)F)mxc&0^tcK8>l%!b;L}IG^^QeicKpbY@ky zroO(ep`)#@zvwP0*RQqlY<9ROIhGu8FL!IhXrikp-dI zNH$wcYKKN0yEYQnYmZ?YH~jt|6Tj3o!oB1g~hoDjIcCy ziP%tfls!R3FNSa>afR=_270OqRj;UUwn$QO`rR9Gtb%YobX!JTs^mmdxr=&Y_M;Sw z;__T)RjT6H{4Zn+cs$-RmL7@*PV^Q1VBh7+Lq3WU+K_1L*M{!mD5I_HI&Ev{?(S{W zMy(QE>#mNi8oOI(ZESa>wV1y6SCq;9OeCOK0eVh)Jf2-Yy=q8w;iiksMV3-x4AvU^ zOeV*zoZghy3#UIdm1t&$)8bZ3Ycex5oN5?O53Y^69f0v5uFAiRC%*c%U7K;eJNnMl z*y_}HXw3LkYwvA8Po?NhjZX~c8W?a6BnQ_nP_MybiLNyBlhyD>t$oh{0^-G{>=wXo zTP)khwr5egOVmyODpyY9Mz8fX0UFy1D)$zvpMx=lFq?DZE}Dky$mm2a)t}8Jhn+`O zgjGnY1rMx1O|sAu-@C=q+(~OrXNK$~jixiJrE&9&wDR?q-hx#F*|+Y_4DE%dfb-pu z(!6Z_=-ru*r^a)}&>HZR>7isURj%%Ma;Ch-^@e#*cs|GBbb!)}y&1xTA21Xd!;faxq(&_F8 zct;s@YJ75LnohsYXdV539>`Q`V^Z-}ir1aphT&v-gyDAuBN{VPROCxG^R0?({xG^=H%BAG4%O|$f&^Gz%(x{hZ)@HJ2XDUm9t5NW) zt5$NhP-1BkyRw;%RB|XaR#_s0)U-Kb+=-E0HK$ikjHMcqqq^r}b4qM;g?JN^Z{YQT zNAzrNS~gS8mM5oly2r2DNnM+s#6a2JWG|mW*+ngY(mj>J-3h0s%0rnpC*^*v!xqVM zCreo_9$kmqWK5HRo+0sq!sw`^4D*BR(p+rasNI>ihK4+uG?Qvfk1+tztyu2%#M><* z*Yz=Lc-YJ9uCp0yaA<|(hnUC;A224m7)ZF|G1D+UlLy;k0^JIX4GvC>Objy@BZF>C zkLQw^!7`mLSx#y832~OQ_-M~n+2hg$ggE0;-%hx1*K-?7n_F$N_`Cef#ciz|*wDtZ2Ru^ zw1@QKr)e_4P4>rIPZvdVkk5BzxD6vU#uMzP&m^YZNz9N5Rn_KfkaIU&?uV5)^JQ*h z8ysdvX!?xJ+Pvb9(0St>Pp6s2XgAsKl@4RK<%GHwYF=sa{CiZV?t5XToSwn5HOcWc zJe_4^G&z%=iM>B)^*sw!HKaP4lSjzCMDHNgXva@jCxcFocaOQfQ*dy#{tG@pl$ zTAj`1=dONMhyM9lfUd5@batJ?M;*^c)fWwlrc?F#zT6Bw^vG|0Ea4t=R!g6~J-O+4 zDj6-|Hd6X-cUvudz0$^+51H1g&%CTpuee(IwzmG==I;!0pO0?Oyv%9lEWfJyX@4C8 zEso=K+(z%rQ9M75zH|zO+qCqaOKoar3g!8!m96B2%Rg_YXd1g(GF#0_moFK&3rRF- zQav#+F}RkSCZ3m-hIiYn*eV^zHlJQ&RsCC8{chto+f?i~PZzd?5MUl=X+Q8hZyGZ+ z(l-m|v+dml`A1iku8eD1ejOXAvaT0NRaG116$C}k)-sP$b#0o^8kO@rFlN?gi$T~E z``%htHGna0@aFbAR|#*50hG-A4sahzhW5Lv*ez15)qAD|&=ZY|Hr3c+&Ss&$^vLLN zYFla|+@^%HD6x>__;`AC)kJt`6%!U)Q1@1}S*xpN@7N4ATz(Uf)$;YeL2dJV>o!!r z?pBi<;n}8N_3&F-eV;oXUIP=mRq|Qxm~HLVHtJQY)oyCMYPH&p&-kjbt39+kiwmOL zPPKD4cFw}ay6QZ^7Ijri1_6oQl)WKO8>y@6-TaY&rY-#@bgK&Xd*7|g^;9~|QBbh= zhOw%Or(DIZd)TVlom%ad+*W75>^xDOi`lZd7#u{kS6S^<4*4&g_)U>jYo7I>@Syvk zHlb;**1T%X3$JxCif6saw(xRL=K%#{ z$;|5NH1`%xvc&DTy;+ZQo3Z^aeh)(H9vfYg%p|JC%;Tyzp|NreI`W%J+qS7^5WOT@PukT z-l1e!uD+(8H(1Y>J-x<&R_JCCyDh8koez9!imS3!I=eQDw|N)c^HnwKgtJ@N>=m7= z!GjCSzqcqiwwL_;={OY&M2?%}1y z=S8Z1O}2Tg*K=hMHEW8Xs1mdmD#0wiN5ay*d16p)UDW5bEA`Lad=?d_eA*1%%|IP@ zS_sP#sa-Q^spKiy@*4TuGqTbM0<8sl?6zn&Fq zYy7flN}pvVTv#W3u4lGpq1Tb|eAG-jlg=efT}-S>4-Y3Yv?zs#h|SPsr>U`Rvu%L4 zGNw1#I*r2&sjfEKMvtJbHX1Xp+cn(k3%G-mY9z8;kN%kkSWswa&nt_b?mkV(m^sh3~fa}UZYpQWst`V>t1=4UB4$<#|b*wzeu)!3`XKB(b- zVP`;o?4NJrtwo)@J1xu(Z1MJqa=v5pjJ;^cQML0a-OFox{%Zdvw_!9jUcswHjR{YK zop0_$=eAM3t5dA`a+vWc)_h84$l-6nmOLpGMz-;5xzl+{fLdv}`B4gepa7V(dnP%P=EP3-5E@nFA zRj*w2%G!@(ZZtHn+LBlHU95>uY%upCg>I?P&G6Qp91|PD2Cx1|r>mDbeR)4$R;ZSh!Rq9@iH>ul<8>h)gM*WX6UmDN(U)+ZXGiQ0H`w54ZhXIoEC zbF{&zwhcM4{_fuTh4l-ElDTAkO)M6T)Z6ryXnR{r%hFh9hYvk9GMd{^%x{Y}wsv$i zHgtDHhtoVfDwnnA%~SP@)8qAvrKaL5I-?CeB)GAM4+clI>2bososZ3&|P`FLeu9o)ZmX?<8XeM=bA~l>ENo8^Y1=Y|PUE0{$-q0Fv3XNnu zm)wvT%|}Aox;uJ0np?VB0xla!t;&w266U)6W$~q?tu@x%)7;~CSlxL$mo&aAFqJdj;qU(?uCU(?XW**v6YCJ1U8mewE7 zFWtVs9BapmJBW95H?&jd@t(ylsiV8EKk!E!MN>m`iBqE{{{Nrqkm)im(@R`DD%~Lm=T55FV_EN{Y&fL zu>Pg=Z(RSZpRMf2VrVHAJ5K*h-i>}lGLdyE+{hTzr$V$wkV(KQ{g87Etgf*k+SA?L z)*g>_oAjgnSgc?FxM4XK>(#$lK8!-J!>mLZA7(D;%X6$>j2;SfBZqOat&c(kjS3?Z zaSPo(w<+4u+0_wiXv1MMzSi=i^{5TSpbM~;#aKz=2`iuu(Pj8UQqGX-I;$QOj2SXrx6JSH7Zba`TnA=ETjXo}e;x)Qyl zp{u90t+S`qNwTp7V+24ui*(yor?co%JzT>!=k3T3)Z!A67;Yksg2 zV9Ln+Vv5{U*9oyrO*L^9EG1vwuGnjjZ|PXt5Nqk^F;*LFs|^j&miDC`9Ta_0D*bFV zZ%|WedA0GbXlrM~((caot|(8knNXugwZe<2YLUCPakl#7>;rQeO+U)DZ3HZeH5l+-Ujtat3Ss znMq>7yec={+Q!CcOProady5=cLz{7Y6HGLk;%G7d+Y<4%mPD+B_Ab`n*4@R&d~#dq z0yTEVo4ebKOF^=fT|eV8VWwP6=1k&?{hiBw6$vudXyh7(5ro!bv5x#d(*&5}H$U|2 z2Xlq_!IZXjnUjTD?5L}IX=~HchNaQ5lW?o3h=4Bgk$V^G&3ak6P+m zOGoq4jxKu63yj^j*Dsbk%F=^rXj_*}580uXN6Ndcf?5_k!s=RM(XLoeOJ}Ry%Rz#% z$puD3#U*0CnL;)SDEJ(sBh!6yO3O4OCfHD2EeH&|e2ZL=ub(rvQHlPX?9?`NMdKZ< zv@#u*Y1j_pc-tn5I!cZ==N>D2G+WoA(dp8bp60H$%1p$!AT6yKZ)+81U_Q3Q!pxAs zap4J*g(cc^lSpS)Wuwt!<4&$><1Nv~j;44=dxt$RTaXAJ)3-+3mv%Fj>#;|R#eAPZ zeOHwF*xAxX%`$`1;tPVt=nYIYbhdSNEp2J^yUa5z&1VO*U)tEVw2iJ|_+`ZdMq+F4 z>FH@~i**HE<{D_`V`H4z#DFf=*<+70i}U6?lh6}wUE12x+}P@?j*zJY#(y0RjZ0(A zz6BLBm(U*VZfb0dHMcbT=FN9ByfoV0(a;=kjkg9|Q#u^(incH&?4lX-yCh`JqNS(3 zxv9I$S06sZ=q2?v@p#KvdMFyWuvhd$!b}Y5ne6U$z(fOfu1Au&ZW6Pr#S%BqMC9e< zDB0{71N`K`s&r;3F}@~yHUq6;mKj#1b8e9fm&dba-*R$9H*4l+#u}N|pwrjg)E-@D zUVW-ovEQ`Hi*wm*{o>&)!+UoNMSr)WsiCR6yU}t##uLw?Au~B`YHDrnY`0rj(+Zd- z(l|QPyqZSAwEUKDEVQMbK9;LbU^wP`p}jQ?v9ClEgK^B}=R$*JS|KCBih9hcfvuC<~R?LM4)3lm}oEv#AP9YnvK&z$Ax8b##L2K@8Yl(Gs zM*DKf%usTS9stIpC^;8*qzA^5W9byrtKAdy4(TW??oH-%-`o;yi}$oOHx~~I`|@2P zqifR#GAcA*O%b}@3R&@v6hn5-!%lkX?JXlv|+_+az0*2 zdUv$5si&v4+nQyfz>Fq6MqFC@5>?QoNuqHkmVG;YNl5va+S;N$txVQ8cUeYmm6)ZO z1rld^T1KXc-H0nhVTSouI-12c8ZbHX79M$M6Jx3;-VV zYwnJ=uxioO*ik(9(WgjE3QStIYGpKqX<{^f(IlXteA@>&3aE>tjE=_Ersfuwgp}$+ z>G;>h4v{?NxD{$(K56xNPg>VV1Kiru(Ap5UCgCb+2Tb;it1@O`z8V`cRmbGZ*wCi9 zcBQRQ^GYgr!QAQ^NojMexwVJhdO2;E$xVQ#a_K4mF~qY5mZnjWRm1YO($F1kZ0Trg z@1iR&;YM5KEG%UM($ zyNS~z$y{QIFjb+DcJs-!>z*)6Val?pb}rA8S7HxJ>}+Un>#-MF3aQ=Z>l;%t@pxx* zM`L$6l^4`v^kDL6!ZxQwJdLXnW=yY8D*lF(*LhPc+SuI^YiVz^)+VOaRtmME;8#rE zO#@{<88b2FpF4W&DW6$nFAWSZx_eq!$zHl?{=(?Tcpy_!=ATu> z#y1;-D5%*}wcYBgjmM*%-7Vd5mY&T9hR{J>ZyoIjPkF>#G{}teWMKEm@i>hYduw?# zvfr;!>*s}jzga&m2>xkN*#WK{a~RJ_K^VtQNqI^^6`R7Hwuyj(?x!sZM}5;4fvx*# zmcMA)^b_Ctepd99_8TxLO^B??dLh^REz| za)JyN!dDHte{jMVxdZu3`1+BN=%Tt+o*#<8dbX$WY*${6XrBKuR>KyHo?~MxR-DE> zP{=;D@N3)~)&iNHooj(Sdkb6e?}fc=;T&yh3uoB7+rmlO<`&M-ez!nIVdGmMrDz9S zAj`cKE|BEjJrhVO+C~$|^6sYzBo;Q-1X98$CyOt0O>E{(^O%LlAAjup!clkZ!bOW0 z*DgMONg+(1>S}9`Jr?4^V;3B|V4*_Jd_l){tL8K{j3i(Dn(ZTvJ4eiM^w1bHoa<87 zw@BnkK5T!c^UcN=%!?dtc0|?mIlnyAx?SWy@P6}!?M%>z=SCvY$h^4C>vwoiBEP-c z;y7W3H>M4VPDmuOX1_=z{zES>8a=w07TJYMzW94DulClXrP!L0j3aT$8zPaf!u#{! z920cSj*-axNY9xTZ@oi{^zRUfeE+j^A_rb+@h;+*0sL;?3i`pS-stujSe~k$bNzFK>sh&58VyQ%9J* zbG|+&vg0?(%R3Iv?l*+XyNvW*1*hr8aCwVK)7du1B#?i8`8@)8SHipRrf_+8as7@r z&x!nmQ-|!rPu@MqJL;A>k*9C9c)PIi?sZF3@5bLvpJ8F`*^+n4YM;rz?y zA>KFM2MFKpTXQ16=F|~n2M6%m9=FelypmH#ki0+g+hRB`yQ93kZa8agUXZ+pkT(Hm z<+sbry9CbXY+jJOjmY~locG)rE>HTq9nLRoUXZ-|;QbEH*S`}k54REdlg;6yIsEM4 ze*N;@Ig$H0b%d423%)leayX}sp!Ds`54CWP`+m5*gOTw%n_~p>&o6x{k4xZXe-JKD z_VP(MH`%PjK&=2QCPUO@PB=2c{ zYl0K|QF(deaNcF}g5*7gybr;7&pqMtjQzp+h0P0+r~Lj7&X0Z^F7Gtu@h29CkLK_z z-^cmoba?IehRc&ZpJ#I{Y5w*i|8gn3(fh*X$zDDM=VqH1lwaBNcj4Ug({OnQBX7>n z%I8=1d?>t~ejYAQ`90p|@X;K8`cwVwfp^6H;qsK<)8MSLd13jTgmdvP!sRJ_H`pAL zIR5#iPx<{Zyz71$F7L(g{$O*$L0nQ8l&*E**cR&4&lD-9SKDE)}?F!GYoj#QCc@NHsEacRY zm*;7xWe2CjIosw1*@67z`Eb&|4bO-C#z)|M+2#ewlU}|F=Yzismp20MdvK0@$deCG zfATmYdM%s}{NCb)>1F$e=R{u4sUu7;-Eh|0yr6u@o+sd}{6ly?q?b$JeA4Cx$y5FP z5}XVE7%orcb{(7_+q@uoPs95aoS*+GT;57}yZm`hWPno#!xUfp+er8%oHPFtF7HL~ z-V5h5HZLfB*TTCR&fp`3cnkJi7+0)-cRrk7*u0(i?pHtVA^f06@dunbg4*Ac`R(Ap z&WXI1Q%6vKHBLDf&ZUo8JoTRo>058E)xZ5Y{|aZ9$35~q^-b}<9L|uJ=dtI#iT6!# zKJd5l@jeb`*T09yEBiYVPQA?wDvvARwZVDRC9ja*LU|}3yZ&QNq?J=gnEqD5dBZ=; z=i`1j|FC&^c|Q8v^NBf;F3zxcYsla*oOeH2KHfjW+2LOvd7gM>&xgV}*5(E2@4N7# zaCUyGATLONhr=0k@%-#LN<`GJtFjZC<|p@Wd-ScmmE%CI`WO=sRrO+9S!dSIA6ATL3+Ls-nZeL|AIn({q!t(pMZ0>%?pxu zJ-i3ud}!D5^1cq|_ckv~-oN2|dAD$Rns54%IJ;ZCAbF~9d&7Ca=7}AY-~Yfl;)UVz zq`#BkJZ1C3K-&$Da!_WRS?iqmByQd|u*#3sn z=0g7M&3Pf5%WR(5e)8n+zXs=RdzF`WBb<9|UYNYU!ui&V%FFvFoSpZ!cwzDmhw~qs z7na|n_L&=ra_R_@cR#uUXVPc?@l-$epz{Wcfr|c^Md3legA{=!vo99iyTBf=hP7SHU^q;PUc@;Y`}RAbHB~$KhlSDKGDGIM>>|AbGOCpTPOzq2=X0 z0OxU=7bH*pp%>Q7jr^HYN0|K`aM;{PEvJqkdCG4WoC6Q{lUEq`ycAxK&5=AEe*QE< zzvOlBUib2Fc}H^nN8xG$Ekj*J4?+$n$ zT@WtsV1)b-&SN$&s5~_9{ckwiEee;Xd8CClCoFxMXMH=ocP|c?r+K|^!THaz7H>C% z`jzh=`FU&!hfSVn0;y8=8OlDxB}xydXWRA8{|7TTTg=CqMKzIJ?$cydZh<8~ec7AzEJE5;(86 zd13NShtnP_FYi1!AGCQv^8QKsJ_+aj@$&M%1Lr}T7bI^Z^8Nzn2Myu!7QlPP=J3%R zes-nw9n&~Ba%fYyy!r5!!I`jmLFs!M-W%b(zByc;#${K*`IXHJvOmqsKL+RLE#dNB z1#g#Di^E5A_~loA?O1p(YzvpCac$J*SknCKrR1%KSHHBpyt8ahm^`)nm%+=mhs$e% z_gR}0CQs@63%uJq!sWf50(}C`XqUy)e2Jg_J__&qa8~t%%j#;@=k%2p zZ)d*y>190;eF@H?r-#d{;reB8HrTwN^r=0%0L~?6gv%R4-c4|hc};=mm%h7@mxS}G zgvAS6Kl%uqn{8f@o=+s+hiwiY&EXfX+QEa*oEteTSx8@@d<*S|+SOBSjxEkt&ysfy zylV%-<(-R=hv5tiT0AcEmDk7*!*H${3YVvH`z@RuQ{nPX*}(wu zrs4b`WAS8He))JD-tpPFkt5HtctQ1T5xmpkylX66-aYW1fpd2*TwV^|vv9`OS-c>< zydAy#1CiO$l`_R<@`6#jeLnS%wFQedoP@Q zF1C0E&GX z@;x|B@3nYgdif5VzuCMXdr^D&lK0Jxq%RGRSAP6KI9GijJRcgb{vVv3F0*(VFZk8V zTJrHRICp=zd_KBALc7HoR=$t%<0s*~`=b``g#qziO!^M^*xbk!AGdfx<*Rv%pTYU; zC&J~a{atW5^DmzamnXmb0GyY6%Hrw2pI$VsSOVwepAMJD_TtD&I6rss{N$;hy~`D> zZ*l4f%CF=d^BKyQ)8Pfl`#(7Mezw5#YgaE+T%Vg8c`Ii*dEbO{_2&ybKY6c5$b)ds z_=3gD+p}l=P5HeL&iXHwm-j_DhkdEMyiPc=E5qfTPrT!B{%P~V(s#gBb0hQqU${K2 zi^t(Cvw4`Auf1#}JOQWv>Tr2`!8^<5@X;K8<*RYe1@P8hQ(oT3Y>q9?H+>KBVJRR=7h;p{rDNYJHHYxPx^Zb&aPjzctQHpIAtF=kJ`MT`l0k4bgd65(WHpi0YU%t}cYIyBmD=+Unn-eBa`ge?*9^uFP;NAL-^78&}bHe0lTs!xMxsm_l)Dcv^FXp#BzezulQwPnHuRY&I z_{nf~xv{*w6XEpPydZhf-)cBZZYnP?4d;BD7bfrha8fsym-j(9SKGWGc^gUJ?QlMQ zOL=)eh4ZM*3zDb&Zg=b4$d5U7gq6qK+vZ00=hP7-Pvvn8od4RqFnO=~7X2p9a`INf zIqdfG={prp*5(DJPx-w7PTw8j@&@2t1m_PnFR1-^3f>;yrhj#3d3ndf`H0O6lXp9u zZ+<6S-WuY46wb2mTD&lM=fRoyUbsB@=g+~p!R7_|XX)<_IG27uT;8kU-3e#EA6PtY zxALvO5hCh?(|1?6Jf-gozY)-bUiR4bCTjSYF<}a2~dK zLGtAP9*1++kHY13!TTSaj(aR#nEoz?bMcSM%ew*2&Oa$HuMtk;z2Wjy9_!$|)#e4| zcO$&_!5P0VT%P9nKLh6$n-?Tc?a}w(T=&!R^8Ns4yPsLSAbG04yTY0K^Kf}bz*}r{ z_-GEl{)YN5uYtGt{&0B<;jM=AVVf6Je;Va^1O5X=fg3>4b z)%=Ei3jY@_PxjmlXQj;xvX}ed4Z>NnFG#3 zg!4X|7nHt@@ID6TyobumyBf~7Y+jhWyWm{;`*3;tAmBG}{_(KI3);7S8NB2FK!4+p z;qufUpZh0^!$))Y=}-Q2Z+MT}+#q|F{to#w^^#LZP<~au^>AMFm+bn-?bUJ#fx?w7k4e!}*%c3zK&%oXh_jE-y+xegbE&$1I-y`;~|4 zTP>XVkB7^X{(9l0Y+g|MGk0D{YP~&Nsgs z`SE6WAOAudyuhg=sQyactNvqg43U3+@??Lfz&rZC z<>j4ebIQp(3tsZ+aCz@S$ot?N@{Gj`YLDijzol?a`(L;`)sMHs`Gn2mGT;3Ek?=3T zdC#-u<=qbFXErZL-b2XS22`P>|f7gWAEWc&h7 z=iG34(%%G}i?$D!C;fdL&i8FzP=2Mq`{3NTLwR|Bg|pp`7B5Ji{MD{-erNN7@~iai zv(xsGBRF*g$$N<37Qoqe=kWAh0&)B@6@v7>_gK)mFcep&2$6ss?AI;&HzK#6y zG`t7)374mRX)oM&`$!F^j-dLc^c@Xn$Nj?PDSgM;9Ldw+mp+wm8@%IR94=4gyVmAN zmJUC88wo!T-fLbGE>HP=m(Ag$IsD{lf5~UyUG>s%c^aSpADn;NydeE)d_H&o?IVwI z>IkxDrSISaERG@a&o6!2N3jH6!^_Ico3J@y@>Cv|zg&vbHe03&5yUkyXBy8 zd1fCYoL%QzydeF_U+n|u8JicTzhe%zWQCdRzI4chem$wh{F0nab>D$PUm&2PpJY1gg`xToLCQs%2U3hoA zJY3$(;5`ZFMMqe?u=0HwoE?q~m#6eCu{mMsQ~7qnTlR|b^4?-|!sKaR)yLp{@|EH8 zECx&Vq1xD&H&Ne9z{EmG8Z9zPT`5p33)8o5M$Q_@z(fJ9iO&V{v(TC)=Db zd9vp|c-_Z_%hPjC&bK*X^5m~BgEzS(T;7Y}eZ}UKllOgiUpX#ZUK2tdvN>V$)IUA) zcF*8jR>i~RMd4ir=YE?PG~QBvpM>*pL%2NY@5PN4hmYp))1S)YNO;fK z+@SJ!CA?#rwvU{~sUv7TRP`eRXK8bI`qV!?*XBr`j-d3t6W%~exICrrQaHERys-4$ z3+L)qkG%2qMNfjf26+$K9Hq@1b7~_;8(PhJC#Z%G?`gASIbqRxwNWqcD1N*S-h(z* z=?mgL0q5YQmdr5TVmQePcoT3wSpn}lI1g69djihE?cwQ@UKZP&a(Y<_@1hFieW(I? ziua}pc@I{|+o8kCYgj%M?~xVo7QyR;cfQS4J@>N%$@@eF@?=-H!+Xr;2HA_`&Fw6o zj}vc#8Lt3V5=Ec`M87 zS-hhw;K>d;D&WZuQWfx|=kqGy$qqhL0Z;Yq+6s6ok9#ZN$zJ|Y0Z-$yXDZ-nyt?;k z<;z2UsICH@>|l8XJjpw!0-nnE6BY2J=j$ur$*z800Z;OtsDP*Wy1h>?uRrDE=n8l$ zkCqB}veTgocrEZIOL#mV-P5k>evj{z@aP|Sc*^O|D&+mL0^ZKZ`%MY2G=1VdTp{nT z74n{}koUg|c{`rrwS&@pi1ES_Ua6jy-@QtBrSimkX@$H){CEw${WU8ZmLbL*jr@NF zyo}9Ne@6X8UIcJVbF8hSjn_{0b;kM|T2DA6!L^CL{>HZML|b2X;?%arrbJ&)Q$t&G zTT^e}$+d_0T+-RskXYW-dve|JwZ6YQuPIJ6HpQ2X*%JIQ?p}h&*3sUe~z-s@gV_ru1{ z^x#-_Ji974|A^ir=XZ~i&Gb3x%xa<<8BGtT#_&u~YdD=_0UvhbRC;y1m*!40=}!7L z@VPP4V$!eQb?6##j^^A+x38OHyZp-|PB_8+)}F*U$9D(`jXzS}g;e?@7YLu7JjBYR)RFpo4ox!J{efHV)*+?X}COuA} zSvj60V0>&aF`ORHMfN06N_rE42u-86c?8|Th40ga*+e=Q*^7{kcF3x+?1;i%7&(5= zb~|QWEcJPHr~Fl-JLx#gCeG#e7LV?9jbjr#l(&h&x=k|+_G1*x!kaI}?akK_J~px6 z9P2F=Zksq9i%`1%#(5`3)gRfxvGqhEwPp=($fe%Y)YsR#ZQA`}u2;vJqNgs34`&B@ zQ>&??{k&H_8jZ!5w>5Nk_clhO(bFQQxus5I&gLc2t0ppo!>QaBO0HQrjj|U^qwKnA zlwE6==hwk@kDbZ}4kvs^@I__oc(ErlHGCcyJBOT!b= zcn+8#{6ZVw37*OKkJ$KmFv<7pZ2XpuKeF)wQ0aOY90Z>Rhd^(8@?Y|SPl?csm_zN! zVUdFG_${Hs?pp5h9i7Rw^fof79;X?P2Kkb{SWj$u-GXp`(#jD%Ei&eg&Er$1CB_=3 zUhRdBdOYcXDq#XjT+Nk_dLK3$z@0LwfP7tuliyTUc0BBTcOpe!wIxHE2^`jCe->T zov6<43Sv{{pk7T%Pgj6z!OwuIYo7(L1V0B}2Yw#B4g3OlH~2;HSKybxKY?&3rEBVE ziLIuH^EiG}#&vjY_1HO)$XndjMv zJgGZcSn`;BIf(O_JQ17#8^Cp7J9svzC%mi&rCY{hCG}lxYAZ6O7aiXEuC_Ddu4bLy5n7@+VjQTlqEDIiY`!(H|LJeQ>~{d&YHRziM7^@9aJZ}J#|9m zqB@}+(fd?TC%k$w)j|d99HrIbT2Hk&8yi)%c(GkAF2Vi=(yJ3{wF)Cl^-R^4jWahe zoT3iRb;dlVfAfSDpN5&&!_>gjT+c9**Z7&n??gj!HGZlS7dz<$m3P&N7xGzsO&#ZB zyQ&j!0*?hR0M$po5WEe%2vl1~pLFu4;9EfTCy_h(d+@E`W8m9BrSTGQJK}gdsJr3b z2};-RvVX@VxUhq5pO~KP++EtgDXH*SU?{JN8>a_tzRfeiZcjMa6pr z=cAnaR$v2fa7Sefz@6$+1GvXFfRX{n?v$Q7Ojl8Qrr@mkfHkDUIg~b)(F?#c?7;V+ zJEiwha0&Q+a0U1Qa0L7yh{VWc;2S{33zMG!KMYO zk+y&`hz$+Jv+Dyp&J4m=6nQ3GP`6u@#|3S=IC{T-BYpJGB2Aupu6#*n8e_b;f-<%u zH-#&8IESMa9ELrbd?=`JRoXjqovH4s?`jtR2zxjDjlSpGse2shpwg-G-jC0B*x_HL zoRoITZZZy1c9X9Lsh5*yg4crs;5Wbt@J8@L@FtLY7P%Qz`QHN4hmG6@!ijtf-$eZ8P3l@`K_OW&EWlD7l@uGmxI3q zSAY+I$|t_GM0dzEwhNf!2MB&aWPAQB-N}C1Ji600@)nCv$TS zr^xtjEAOA^Ca*jx>;58TsZr82s!^vUx2XN1ZJ~aeLzUzyhiX-d9gVWRZI$vPUAx<= z2T73f_*-yK@OR*R@F7t0e-HM64}%Ht58x%>pTPHke+J(N{sp`Z#Q&Rq-(w)Q9eEs- z{;DqqJ2zKb70*s&hQ?1#=hkE=r13D1Ss$}UZ(h%tbPM-* z&Z&sN_NDlOl0K92E(5`TME0-5wmkVY)l1;J?8S zg7hiPeB9HZ^zjVn^?jET?ygW?-zOXM)?ZyCKk{zQ11ivQ!*DV^f-R-SjdtD9A;CHP zoL_1Eb@w%wajEXl}5YwTr@LhWV7)bu^`zH-#M&iq$?r0ZS5Av>IYq4AY- zKwMg6E~vP;`(UyWWIl4T8{838I(7z=;4a`G_yX{qAa@5%N>B7JOLVXB8cyf%>R#>N zQjhP{HPZdtIbT+R?ih7 zZPwpbII)0AzjQ6%)M1D7WK5%L<^_$eUj#}tcitFXGtQlywXS*P~NYZiK&v^T18hX;(HjKF-9uF>H6dh;oh~!w%N%AzbRxZGah<=vMjg z>h?f%Bzs{zWpq0ql<0%OMv$kqn*Q3M;OTs?0i}n-K(DX(n11JU4zF&%%Mbk?-Rc^} z{~^wUD$s3jYB-e~PjzK89jW9{YOGSrmHky{xl2e&S?#KgpX787qneocgM^!*<7q22$e@?>Ar$6}t$ z^syR2ub%NiMe#__?(zP6k<;kz=D7M$y{T2hsli-ZW@T)BdOWNLwSvL_QnwUOXK9lp z<=0o}YnJRyP=3_#(tbq_uD}M0V>a&1t@iB^WgSkh=t_!rUxG>|5?(^ttD7`?@Tw{mi$!2?kH9l3<%Z-ehZn&|9i|u3xltGBWr=Fxw9yt}1 z?X0k|hR@ES@n}I&v|le#yH^++sjt@T@t3-0XTs?}L=LH-oZ7}aQma|?)$SN~T&~Z4 z?N7cR^m!+-pyHPP_TuwL?eH_nm(r624+jUpMc^P91Bbvia1|&6;rhvQz}JBngKNR} zgRD7E%7zU}+J@))G zzjb-^t7|ka`z+_773jA!nHyZgG$+$)6C)X`1FJZl!-<>kww~p_ZqAYuZPJm2i+&9O zR=;#NLeyBvk~b9W*xg4`8dVOu(CH(cD?RZ2JW%EE1~3Uuf+_HP@N)11@CxukP#WdxT{zQ~H04)ipgi~6;TNMzeSa&c z@z*6_6Ud$cGq?F3P_}+4coX;m@b}<{Kpl|x=%tu7Htlk~MC==2vpL4K9a%fbD@PlBD`r@(IT)1dNj1?aWW zoslJ-IC}B=&X4e$x38&dRA;sW53fKk4cW}9^w>yOwm&(rJe?g*YKvrro;1Wx^ZHR= z&pDJf>1S60hU~!4k#D8<^I#PGBG>|c2|ORX3Y1>|A9xFR4R|~FW$?e?SHWk&YeD6i z`Qs8jsxP2&+M82{x30@Bz2hNWqjLK-=gTY5qvIp{a%0)GsZ-NKxivx#bJ$j< zsvM%lgQ(Xs(-`NfvE-o2COMqQW!X-b%nYU?FN2_5i7=SWjOUV>oa<-xBpg3GA}7u! zOE&JBEmPMMwYs9lBWns(^DVCC-`zs=a9}+zI%d~ z+JQGv9@67C!Fk|~;C|pupnUkv;9~F=@MQ2-unD{k90b1wsvZ6|_!;m{@N?jIz-z$o zg4cuJ18)Vt4{Dz02cXLCF3?-A7*j+R@tf>Uhu0n$_m#}4=^Eu@0eD0O_R!tlm`)Ck zvEz8KGc~q4WsE_Q`W&_~sDqd{24{bc8qGmAP^P($Hf5Sp8AL6o+1boktk8X=#5A?5 zIUtqTNIHWpjGED1Bk^_l#48iDj7;juUzp8YptdzEXTl7=pS>OK+?g9P>d>Qy(uo-+BYz3bI)qXt- zYF&gl%=msga8q^m0WSBB*WEgMMP)kc)xNW-R+@a=nVinyr?c(JvvjrtD4p#HN@qKP z(%H_SbhZm9o$U%rXS;!Gz}-Qw&OT1KN>Zl|ubs)>y*kr1O2=iKudG044eYqD+|bkz zRmFV(7bRbxvp0dWPkGCN7>=8B(F;2 zQQ(WgSAk0J(LOp@NcenC=kV&_-TdGktLPfZKZf(@3Upv>X$qAfyNPl-hteY*>;TF( zbns>=qk}qI2MfUYgf9e@?nR*29vTRj9^Gx>PWJb|fwCiSzgpLbb28^K73iXGG&Pt` z4oe&3jj7CdI%nM^>_u*$2>b}U0?ztG>q&o(jzN_0VlrFDbu*Y{&XdVMt1Rj&e~1XMT6Yof^6lxRZT#eAP1 z6|2*)=^AIyU=0`C-9puiv=xst7a_fB#mm|?syNgGH4DImqHSm5T6VbJl}6=XI^PW( zw!=?Ex6;W;-~#YuFb19iwu1Gb;*WwkFa~P;90%V5Hh`*wP2hXM7Etm44jn2pmAArVzgKfE^UR&;8gUvq>nbU;RBrQ4IN#j*7M#>}_nsOESk=PU-zmLb zyKYAp%0mYzyY2*)pDxg=BbAxk!n}69E9JM+qa$6TGW;v&f(mq`J1Zx0sUSVMqer51 zxT<qHQtlT=?n2#m>Okb}6=zEAJOuB=cY2 zrT-U#=i1>t=vn%CHFzM{3#uIYKN@SEUk z!AHOZDBYh4ddo9Qxa>Q~=C9y4@AyU6$X-PQ5m{(+lYiZ{(FT>s?sPuD_ZCTd>tr%z835QM?mE< z3wrf-7U4CVZoR1tl{xu}uW@?YeO)8YTFylk=*`+6=T@C!^f@+Pb?PELfYrNpv|9a2 zw=R`#uP$@wM0uG2>%etjFL*YX0M~=7!405v_Q_8a5{$J^(i;-n|B|$ zu2KAob8!W_>@(Z4bJ>hror=`ws7#$w-TejC>DFVlbDzQTw6hz-959fZbkJ2uE z$`%{#@He6t$2=<<2E|}*Vpu?#>acjUaf}Y@bEx#aBW>Q(bXE&T?(t* zF?iN)r!1EIx-R1u_9nLMN!Id*^q@xK4)E9tY{N>G8C^(y&f%!Buy?qh^4*u8owg$1 z&NzOmu+>V|AwTu#OKD*S%(UDYT&>Ae`cxV&ug`y7P}HnwcJn`08WfMV#;IdtniY53 zbv}Xfup$n}6vaDxK}0_CdM=CdHIq6!u`W4mD5~g&QioxxeJXCxE`ZKdoDStj{Xo+g zGIUo8t+ABxyR1Sd*g<7nZ?TLWxc;KKc^TS1tr#ue?N0rl3H^vgRB|tcC?BMnqfV!4 z)2)Pk%3Yh>*Q@>8j`HQu_4mLnZW65gXtxn@d3X ztapLm0pAPW2fhz{0K61@2;^kG zejdC6WIjCd8IU>6$Y(+3Bzfxs`?$f+gWF@@Uj&&$id+dY_J~{s((jG@Kajp#2He0`COZf!_ho1HT8#DDDD33EmA}1O5=a5hP8MzXg8` z&ZS&_0`jo_$i3h(;C)~Z_*3vK@MqvU@aN#$!27|kfWH8*2Y(5w?mqx}edHDB^#ICj z9;c2k;UkZ9`N+=`R&l@XWY=nHFu{EQ(y4JgdlOvCX)S2T@i^OqjYzXm2Ip0}-lTl1POCAvlvBr_ zu>tAg5pX&9DEM0Nui#qnF>nn0J9rWJ5AYq}Kf$kq{{n9Y{{!9+{uk8R!82etaXkyN z--XSv)B%wCGs(V$$o8Q0zXRyC!Iu#pY!nM9~TqU+?8Ad+8#yX=2a1KX_g;x4Tmvw4H zm$y!5lG?e?Rn4Xv8M{$dna0cmb%f$*!Qr8@qu6;O^iB;0r;;w+DDNI1ju7+!OpcxEH8?-HX6~ zfO~_|>pq~@<~}HW!*SH*?PF`r+`E3DYt$!I+jT+(Wn~H}X3WwQlj8F^?C!P3%lV>l z7OJGraoKi4Gf1Y_;@mAjuRyG)xlAp+#ZrHvsQ2_KB0R&2)aj+=%Se~2i|*5h$tnwDhiHe{?II901Buy$n=Y(q5XqbO(Woe?F-3&%vPl%OT)bz(c{iz#8z^ z;9;QpCWnLn1CIdb66cX1dtf89zmtvNtH5FKXpntkky`LhMg*tV9Q;kApBYilB^dOr!kbtM{zN%wumM#4ZUj}on?NP68GJ9;0)7l^1!WU$;2*)I;8S2b$UPL14)8#bzSra{z;00M z(>>rRU@zDS_JeN(mw~c{72wyvm7w~Yr-SULh@1g_7o-n2`D5_4AZzZC1jt%?QCA8d>uSdEmw9+aM4Yyo?+#t2&!4a ze3t8ZR9hnI*r^k>c1{@rbr@4cWnGYiF4qz8~Q=cDS{v$NoVpGke=Vumi{r zmGnkC)bw`>();aT^XQ&Dy^zLhN!-<>lf%!!YSC30PmZOMcF(AInn1mkgXAJK5VLw+ z;+IYn+)wCYi>RjIDYWmMCb)~p0;dUjx&DiV>&s3Pm^F3A-T6cIB!4eKAGO0%_(7Q# zV_maPHT#Troa^J#Dxd>yFy`L*CXz+vzc;0Smnm;t{5W^Aaf*<_khd^ zMBWQ(zTth~ept_?AZ=mf{UExFd;mmN_gxU;D^C)gUlOEZUjFH>II}9 z1NG9mkAs>o_ynkzN?Z;Of}aA{fS(560bT)WzTh+9&%w`vPlKNWU%mtLE?_VC1@LO{ zOW=>eE5YA@SAh?Mq;2vA7}qu6e&CluS@qYz6Tz>8OTp{GmEbqPH-Y43@=EZV;0@r7 z;IF`&z^B2R!T*7`fO}zow}SQHx4<6oc2NEeU6i!PXJaqwkCGj8c>DQU2lDO_)-~$C zoW*%cMLv^FqxLv)lzH`d{;nv+>~r|_`27ZBa+tRN)WcTP)t6haCkJfj=^l~c7b8(C zLitp6?(;r1KlN9#Pe%DwoqhqRzPgU@qD$%Edmvqy$oIj6z#o87@Gh_&yc-+@e+a6M z{|L;0_khyhkHL~Y5^?R#Z|d0Uh%+bbz9-{%gn7rwtL^li3D#FoChQT^%7%HOt)2sB znleS|9F9To-LE**7$|+xH@iQ%v%_rsmebvhpd|y^Q0(09VQE@a_KJ_^662%EOols{ zV3_*}G%|jgDIkSgy8!aztIN5_Ih040!=40OY6t!l{i$4j1}gl1@blnrz%PUU2g*nO z4*V_n5cn7H_uxOlhruVoKY-f*{YP*Q@K4}N!9RnCgMR^!03QM6Gamz`>&HQF`CU%9 z=BpePdh3+p^RD&j8rhRDT0!}h7M^1CIVil{BfCj8&ap?KJ6qGyRd+ng6Z!tF0v37$ z7I*{dyaBZYSoJTznMwgN5S6QW&X*}tQ@7MeJBRYCGF2VA%MN@Jok|z~0`~y%*^>*w z|9~fh{{x!UfepVy2OiA%{?Z( zu+%);Xg^Tnr&3K9zJWej<`yt>u@KEseU=8TC1+~*E8K-pK;i=1t z$2*UrYh=^ca>gpK1?#@5-ekt!Cho+=<#`+A;}%w9bqXaphgnic@CQ>vVRO=nE^hA)TMyY>p**#DTEs4x9YW&_jRuRV#JL36-8}U#a(s<(`Re3oB7N4F z8Q$(jm`1(s;jOwTm)qQt)KHqf1(%o($08?~+gYr-q_Oa2PN+q;evsQc%K3piVhW)L z5UMzp4r?f^<*dIGDy`;ki75WiU-zDQSAG0a>$cwynFI_%-r#)s6;9= zWR%ro3oz+4Qbc{o4%J;k-7H-U^#p$fV}@i!%9nn_`kD>HT)Vnv{8(uv>-4BmF!}x;*S1HdFT- zlx}jk1Aq2+i>#aF{sCE~JCYqruS)ACd~IAcuMKcVk>aW&)MQ!n9m8DZJQYqw@(ADa z$#-9O4i}^g*R8RWCbRXHoCYQTC{TwyR3|S&wG#`iLXP}*o|5$1JsE>?><~GM($23# z%~6%e9(3i9Gc^Ncgb(B>XqUX*D1UrWJv@H;Q`GtcDU zWq79F#f$9B8fh2!2)}oO+84o^y?KV@tHHyFyBAbHs}D?q{oq=V7u-#r1uh5A0eL}~ znZM=*R+I1GJ17x;1T7vLvA&0Aa!J^@|@}<&Y~+rw%65*X4H4R z#}dsavp>i9pe1~kAJ%aVHlniqGKedSd^OnZ3GS2bIO^ z!PVe5z)|o9kgjut`e*K6x)J;o-){o12X6*%0B-^B0B;3<2;K(%4Ez?j5xgCI47>yU z7x-;Z^9gr?8bf{ul-j-zYChoy;1cjIuob);>;-=a_JcnH)r#B$YK-|~a1#6(_)+lZ z;FrMr!JEKefIkF(32II5SD^NWJpeud;#VgB1^x!yj(V{XoCiJ#z7+f&cntUucs%$p z$UPB}KY~laKY{(=pF#GCM;-;)_ZE2!yaN0is6Au<0Dk~J0jmBz33}`FchQf#j(h90 z#(duUz;unuU1iW*S)Gp4G;3`FsYH-Tn_$M9+dNK>WX1E7%TH&6)#V z0L}$(0k;RGn;k%}zVY{ZW^DerpE(HkK40d!S-;QE0TsP-r!_gQ(QKUOiOG4C9jbM@ z<#^UgH&IqiT`kjOu4HYYxZ|f(+Hq4VZON2MJ9bK?EuK6fC!YP%uU`nOcO{p|S z9U7;r-|BrHlj^s8#(7{%1-{W!56$r0?H|-(@chDptJETm zhVRZ`MiBW4$RwF@Iy#{B9M;XngGptc-nCSE+2DN~bWHM77jC0|} zh+1RE)YuqLBT!G`0Yc>lbJ-jZG_ePHlA(d1Vq-u~&x82X33JAu)*xFUIa_K$;{CQn zOIE&5Rp=z0hX=pZQj2CGG*nhZX3~>*6!~3tm^J5VGF!O*Q(XIqb-mQ0?w+pKZdRDm z>=gugT9e|@Iu8TVP3$_HWpqc=O44_Il5|H{k}gNkn=N_Hh}@GT&7YJc$r&%co8&l$ zY*207F$7#_hwnmLB)i-dJO$hXYy#(j9pIjz_BrhZo(8@MOoMxaZvkHnei(cycr*Ai z@NV!xP<_RNz-Peup!!$`gX&8i0-g#U3Mx%C;0Ew8@J-<1;QK(Ok3_-iz&Lm>*Z{H~6=?*wNAFFb>V7lm zZTqhy{#JCfH>VEuwcLA$FC(9CayPQB{Z`zE*PqqfGFh`_j1<=PuW-F5tOC+-K`b)dyoE% zzn4uo2c}~mj=#T_YVY`ajRy1n-Wk&BWqAYn$+q3NTp>AYhE5|ujm_ksU2DS%mKo}O zC=+^sr6v@|jXPHlcrL@Svn^vwFd;bp|Ji#J_^7J$|No#Uae_(|cho^aQ9%it5CO>s zL_!j?fG9eKWJpG`k%dLEqQ$y^OWn6tao^gy)xE7&6n9Z^*J@pHEw;2$#rk`H&OP^L zW|)Mqe82s_zOVn)@OkFBXFtz*&U4ml_i;)~etU{N10@CfF+X3xyWGizsKje_OTzAJSmTcN0`I7h5oTkUweYF3Nwf7G1~7@?j< zqi}KKLsIDGr*~!bSU#f3$F%`1#bn91MdQ-gAalcP~(Ra!R25j zsPXL#@J+B9{M`N4K4bmXp{*#`8=MJ_0c*f~klD+HGr*HT&CS(;cY^ic17H)VqHhNO z1Ga!6%ApnP3ATZIyWc9#m~TGUHBX3 zoOUNpdR_bc9FdJb%cDK7OXBrVoGvWHR4HS%O50bg7<8x&%d)$q3^Tpc7P*r=C8%?f z<;4*`>lAR%iWkMFCP^#)S5kz2{Qq8>FpaHk%zmi#)^Jtl2l4(_;89)BmFtzN)s~VP z|4H)+<7>+g+~U>dC`V1x`O4Ai8K)hkG$!-@`=DDbioCY5uG&sNO3leZ6Gpmkd@BRp;SZ0C z)IXW2)xGUWsTUTJ%W>GHrKQQm0e?^UGOQK241Ns|{0OweOPcy@(yw)6T4GQ}?W%pa zbOOG46p3&7dy8q_#dT8DqX|gUJEX{7TH;T8`u&KV#axIZZ!2xJw$etM5_SJk#G!4H zJo2uN!j_sA!^F4{MqoS3zLqU67w!VRk2HI>k*X;Fb6yzECMe8E5HlE z>ELDH>EPwy67UM}N$^TgecDx^A?&Ncoxy9s1HoT`a1D4Hs5#i%!F|9x!6U%mfMdYlf(793zzXng zunN2foCV$ss;|2rTnat_%9eN#d<1+5d<=X9TnYXW{0RIL$hk%H7}$;aeH`os{u%5C zJ^>yHE(4DOp9H6YPl252Fv~&75Nk>c9|xZY+2?3p0@2-FU(W$OrQx)tD%g zUVek$Y25O0_8akEiFNpYCDvj8l~{-VS7IIVUx~E~U;X?akYV5M%Rr|ke_KxNT;nMA z1)IrTu>0(HKb1yn?@2@W4+_jZzP(pSC$=lRF4=psLZoc$S3ng(V6?Owd~u^;S!s2I z@2oWS)iN83F!q=f0Fux~X)}*o=-zd|DoOzbxn|I>Ox8{N0Y0KcVPGnH| z#+K*FH)CXe&9{Tv65LF4@ynv~Z36j=wK7v{_xUJMvOa>zS35ef<7Q zKdc6AIoCw43<3pYEj?$}*$pZhJZjZz2YhS8%A-lYIcRU+UrT6uKZ%N#`*{>foGlSQ z-j+-xkGD^xkC2>Hf?8*u0cx&tCO8SK0W~*S3)X@$P~&X&MJ${T&H^t38^NVu6Zl(j zHuyN$46XoM!1qD+QP}n2Ht;|Eo&#z;Jr~p#xp|;$k@?`B;3;4jTmWjl_*8Hd$UcmP zCE#gbHMkI*2c8bf<~Rdf2mT!FLs2aPWj~z>P6vMhE&$I0?*!>LtqpN5DBEEP_$+uH z_$EkyYVZ8G5GHL!T>rr3Z-?X3g+=_5djvwL1 zjknbvr&xintkd@oa<;twFbm`3P8wbRFT~H6&i~sf$o#LTU@&r_b*+<-mE?0qlAr#( z(;lv(F6!|0WX9@qNumFA_laQqejPgKe^Q^{Ncc{lOG|1z)vmgw6%*95)azq7u`4^a z!(fTX>dNQguBR*IUy44^s#1olZ63EVzH&T~5=>N%T0gnfy7K-}SxYzW#LsIS|0>$F z%KvI`nE2okAag19zV%;&rTo4YtOKtDPX?EQ8gE?>{sz1OdL`EHR zFsrW_k-K2T&xrU7jH3>u6KkAndwt(p@H%S_7$-~{yiCwPPrkVa1j-w7t4MN*zru4jWKU69AP zxUEEn@#{b9OQZxUULq4tk4a#HxhzS>ARAEo2k#{pANYZTN~`2z59pPS|19;S^gjnm zcd{RK;X?2QP&(>G@Ymo=;3MG6;BxR4@Kx|tP~pnqNNooq7b%gxLjoMLJSM$zfSR*%{CVz8}ApFObfJ7*e zDcd2a-AiZrkK&hHFboOCA3KsarKuOFboEY=SLt_^ouA)ief=5lCd7{s;%tbr`bNHd zq7dBNx1&2(Qo!{^~0qOjpvUQ9!jkqQ5aXSOt-Ygj{vSR!$Lf4CGVL~$sTD8&c z1a~e=b1#LD{Q)LD|dufqw-1fscXx!Dqn1;G1A3_=)@d zB{+oNYrs+9zrZXoS*NXnucGhCpB~A&+J|_md&QT0FQoj)&4>I|bfNC~-YM&Ku1#!o z(^hw(+71RXTJTeH)zoX)EL0tBY0_*{)OIz!;0~X`o90+`oSiriw*M&osxt*r=a|P+ zHpT5p$rn`uAl(}g3sJ_ zv2zWyjX#^KTzeM_ZG-?ylc=Lw?>2AsRcG_(KgyfRaR(R+9CHq`qx{YVmEC#Z(cpX# z2{$K$3S$9yC3q^RJv#`pwM|b4)$Y##wI}E2;342Izyk0rP-VFoOs=2It-J>2i%fF; z9E!iPBwI&*l-@(YsT*BCIrD@2M&bpG@cbvv^y#E_ROFJXgd*4U`3mYmmp(C7tvcnG zJ+kRv58J*begVEEe?00;WLd>`CdupbOK^7;#o?SM_dVWTFMpp`*mG!ItGra_efg#O z(eq2{LS=XnI0U=|%mOb3>%hxF^%+-!3&E?w2f%AVrTIGWGjJ)`oiMKlHGg~qs3Tf8 zf_=f8!94I5Q1_PH3QhrU12z7*9h?Q;32LqTH((q1J5ZUu3%m)u8~hV^FSs1M4_pcU z9()&k0Q?Dj5ZsRZJ_KrA=3!84+>d~|1L_Z;0jG4SX3?7G42w0$&By_pSu*244do0$&H!Cf)%53cdw?4ZaO3Gw*)`MSy&EQv{SAJL44aPXTH5zyu(39HiM2x(RzChatjN}%E#Gn zGQ{sin1BfdmqE%e;zv74)13cnsR-tyo}f&QN$Pu4jsqyaJ-}&QZtp3|&Ng|~i2ro= ziC|!I1=8;iOtdW8N%PmFeNO^VkJfIds{O0N6S^o_T)kli#;ZCh|6YOhJ1JevCn4ui zi+nI>xOT9kl>=R7Sml4>wI$fmtlq=F2`$!8#np-}-iaE&Q3rm4=~=(`v)$n}E+#qC zvTwXblC`JahDSMHiBtJ)53yZape1Aj8PBySqdJt1P}^T)Iqcz~&8S|#2W9)L1E+yM zf{VeQz>C3d*qADg?%5u?ggsf>jS<9?gM@T?hAeihCyxK>kF;{_XD>fpZ!3|YJV_U zCwzmuaY{RXdS2Qq@t(K2yq}UJ|MH`|dp-k??Xvv0>kW4epOyY`iqt*r((lhaZAynH z3Dw$Fhvt`-{MD2soc59tC!xWiF5BDa_7M$6ydizN!FDIU9`q8NYV`|cPXA+n!liHU!nzZ;bnLHlQ_$7I6S$@>N|G>NBx*(I~ zwXqgSq`iDFC)%nBUm0MEH^t)&u=VDal|;Lsr1eoLQ7K@JW9=u&t(l`C*&Y25HRnQ; zK#~scoQjMoNx3-whpv6$^ge4|AL9})X*gf3*zMX9v0M!frAe)@wbpW1Z@ef=u57S! z@4t}df7iVT&dz8UA(z1_nD?EERj~X=Z4VHpounasDEC=(z z3UCrQ1*`<8g0JN{|v^!XTg)e7r|NJ>tG%DHdqfzUK+q;8T<)l^cZPTed@WZkFGXO3+AfMr#zD9 zs^n)E+;Sg*IiU+O=*?5Q6CIxY|Cr)(k1ziGJl&h6lql_rI?)uP-m1>x4mW9vQRx*s zep|fcQYL`5e@V%B$C_lqyBz`A7(U(o)UhFYTA2;w9Lqb$3RChXDf}lh@C~}uXhvgO zb1g^nt?E<{tf<{RSK3IGxHuc*rRKAEG-mJ{LTo(+`7nk17!|{#v`b#4lf4-cC3c>l zvbK69RvFibTd{kmalL~CYBdkS&kp!%V&XpSg7i+#QYJPB8j-ZSb*&*@bAL>tW{^0Z zJqShJjNPk_a2(Zan=3d#Ws~tZ+BXU5Ywa*vxJ*eQ3JgUtW!O=b|Jr^PClF_TczTnm1LEutw0(d<*6}$mdUEK&$+vXZ7O1<`-v+g}>>W^dguDyZf`0+e1m6d* z2R{Js1OEy>4t@x(06zlX13v~o1U~^)PoIM6Ebe>;>awy`;C|reAm6btUx2!|=}Yiv z@GDUFHhm51p6GADHgGjK7yK4n1pWj31-J&}j%KqKya)UqTn?@S-v)mKxfj;_2jsq2 z^Ao81^62yyrcuw`z+J(u!2Q9k!9&1pz!BiKU>?{591n)TY2fyt#Hts_ol7PIybjz6 zydK;cyc_HdJ`U~za?gy}73BUGvm5w6xCh9+EM`wo`fo2VS*N~5a(NZ#RQ2ont-o*i zyN|!*J86ACukkL@1)W+v$?4Oax>%F#(G_}%haSBHHL8~FtI;@Jrk3q%(x0J?JWZ;W zCp&FiTog*P+TAwbFvsspc_=0Of&Ib#!GYibpz<~lOfIhl@TIr?jv(0%dYgC2chty_ z`egO1Cw8H{TxsRcZgaEMiZI3F3?TJD!MweUSHBzbb)U-AFTA*}NjA4{<~VKXU3(y9 z?3*9bl^(ZUpN)%4i}IFSu7fEzd-H|6&TQ2oak@FMU?P-Tz{CYNg#{4j1*|9YZH<+=~=lh2XMkK)m|ct%&swXL2u z>7=%Jl5OE(MdqH3E?Eh&FR<}KtahLdHc5zmquQ0WwKfv1bA;IAO6E7Za->U2TwVk! zAJt6{=sd?SpzKvrB`yhbWNYNA8d_AeI z(i?Cq!W2)cGFV?Nrj`SxDLMa9@~d>t1eMm>6#0JuJ8vBCqz?4#$mC!e|EWCGCSmwoW#MkHrVIHmWJgGTbxoA*I<_s0!>|9u6$RP%d)NJ%JX=Ep9hHDmw~kplJ1Vm? z480sj2V681@&^<3w#o4sA1>Y1VQs%du!m^lU;521n0uA9`J*m(i;>1iihivdcxaqB zpDeV`OT-83O>QU)ey{HZGvAK0e68rx;NRHMKFKzg97&3Klp$Z~#-E_p7%6^ybT)2x zp@Mi6t%hbA-P%M^a{i>6+KT42{73aCSs4IB>o9uGLN-(vXM;O~=YXgLb1rx=xENIG zmVlZkJ`bD*o)1=n7l1MFLQwnrE&`Rji@^)POTf#(OTpX0%fWlVE5JX1SAw5`zXrbn zuLY&QuLHLujY~mg^?GnW@J3McBR7G=!JEMdcn4Sm-U(`L=r^F|>V5}muI?UC^CqfuPisK6r+_#Pv3!RPisN7r|&_vryoGIr*)v((^es`J#7uD zJ#`1wo_c_4Pa#n4DINR+*c1E|+yU%P``8iGeuQ42)}J!K!@-@v5^!g*9_$UOJ?#c2 zx2H!)w;sQbdVoGkmWtm;X-+@OjL)!++&}W8_Yd+nDRp~du$vn?pQrU!Twmg39CeU~;)FCE#_u>&>5@Zu=zOyQ6vISp3R!+}ihKCeQ8e^YTXT z2w*GU)nFH3RqMEM)3Osz+eeCY@tD0qXPmCniC^OOF4@T(H-ts*#`vg`7P+^4be!`0 zUyd;Ie>+0SiEOlsX*bzP@~^r-hC z?{qYmLAJ6_!dg0NrW!>i94%HWQUhr}fF~nIl9}p&_U?|KbU?e+893NBnyXiTk#L!c zCRY3veI>`+SS-_MG)`|E#&Fx+J0q7X;3XdRQz9>f>s>yB(QeJE?r>yQ*~Acayao0n zO(>H;9`$|dkKzoS;l5~r*y*`cL`MF`>Jyvu(^z!`%Tg*`05Cd9kk~lhS`9`SrZx?~2}%obCmV2m64F!M(xj zz;{9HtIq^K0*8RB!J(k`-HiZse|HwByD5(V=Yyj`txJpnp8>~$ zFM~&d-+<%5)nGQLIrbb-cT?tq`+|8O-;g%>puQn79@HHB1aLk$5nKuufX{)Gz_-9c z@UP%x@ZVq&*o|^8277=dU~lkf@BpwBR0WrTjoC?;1(?IEz zW5MM9W*PM|P<6zg9*w2r&z)ZbufwyU_S-LRx?o&FXESkPVwX}-J}y(6raCYNYxDES1+}nLuxec z^s-hOtzNR9mW^-LN8nIRn@2iGMth)xJXMgw7Ezv(ZIRYAZ=Svl%;NnVumGG3mV@)a z>EL`2eP~Vw&j3#W7l8{vmC>nSvTSHCCHgn8;UpW|@>^x2K1_RKllw6Fk(&d-nJLS? zqN$p537TJsn`%=uDIQEY6_1KL*mSS*x7`)Vh@Tvgu2XNt7esu%H?~l>qsh8E`nd@T z?Ql?M;!hD+XOUUa`F55d@snlBoj($4_1uZ&YwOnL zz*V4)+gbhq$D6A4%uqY`eMMY}s9aU|%Ha~nZ@}JHSvP_*q?VqH;}^m1WeK%KAxAvhoxtSy>LM=${7jz-K_| zi)X<$@Hy~2@Okhy@CEQm@I~+~a0U1S_%gUR@xB5|W>$i#*VjPlikB*McWaLf3Glwm z307xiHMG@7n`2d6T&Qoc%#13LaRHTU=b4 zH#VF)p+jAW;Vz}bmFIBhDRp@!C*Si#!7A7LQe|mgT%5y=)-*G4sA_CrqO_rPbl{U$ z14oiz@8dn0`0Kc|s%k5nhYpFf;=H|}4(&8sab8@G`aAav$L2e+WtK`U(oPzQ)TF&+vZECjm(Qt{m5Dxpz zXse0v*JAeT#6fH249*-@+Y(XTbW15e5$=F)9ijBLSIr=om?Jmf!_~}T&iPJVavmpT zTXm@{hXiFgiikRvvOqLbWhn!%^9xmsh16(namh56EjQRw%eb|>p@#jK9jg(w7%91N zDKnoUO|H;JI)6KFoWHozbM?7_Hkuif-XSi=-BZTMcZe(1Kwa{D5!kj1j!Bc+ze*vs zy79x-Ibtt-yzGIOsZ6tOZAu#FMw=^`xuP-0>f7pr&=z(Yxk8K1YvSw>w*~A=Xi{9p z^Ad4EjSh0}YtaL`942WT;{3LB6;|E=b9+z|T8f^%GaAF8v#*)WJcv{C;zI z%4~W4OM9*QI(NsexQ@$zM(6Gm>NO~{?y0gLq$r{G{4yKXt;>E$o$ssL!mZbJ?k~Q6 z4si9;+r(K5v%E9HQ)AVwwd0vUw65^k`%twN@}_2*dvMcy>=uVNuJ{+XHESK>X8>Rz-{ z%IfYHYhYV{WgXUMb3beGzK3BDTG(g#Z2n(zWV}40zuZJiUUQ6fa~`THO_id6pC&a=O(!fg^7 z`Q%uG=RUWwjXvW*=V;qxM|Ar%8Xb)DzHK=?p-wv~lEfPJHO0vU(@PS5$24 z(ezCSz;P2j?w;teqOdShoO4uuZaImJS1U#BZxRF8b^QSHvdgn+59@gsKhg6Z>wC_v zC@sw|Dralmdj8$3#2`|{UzC4Ld8+uu-=OD`()=l@Jd2;`dAEeb=T9zS=%ypR4DaHT z-u@!ddtxu0lbshS$u7;FoL`<_${wX28QW@-)w6=CqYaJC^^wXMEiyd&xR=fvcQ4ry zWZx$C1_{9?#-CXBW#t7_y~GnEL8fhbd-Todu4=Y&&aGr9NKeve_Hhne5_|`dhG-?p zXiciT_^=bxAf*|X&qxucSY~iCHY=;PvV~EnvQ77pFa}HMC{owR*)X-MxY1gY%UA=0 z(^%_#QrDTY*=;edw<)SDva?AY2dCK=dRD%BA-Bp&YPSq>IUK}SkE&^poj8ilqZ4I# z-HDS}v}*Y9QJu$S?Rbvxbs7*KOmC}e?A(o;T~e3TVaBAPJ@cZvlWJ;>HOyxPl5&X7 z)HjADJ*k7_9y&hjq3Mx0@r$cQPtaOg=hsE8kjhf?$6xKT<1Egj2u2RNG%rT64dkz* z88OvdXOUrs`AU8L^dwlOojVKcP~TEW9h&c~^JwEO%ud3Kb4GZooYXmOuB?vDvy+$? zGl<^GRNSNTkzXzhYr2=;EP{}&U|_I z8+C^coy==aqSFM%%d{Gi3d2nsCFRB|klmb{iDp)b{d#6eR5Pu$Y)0sj@fTKvSY9oU zR1{4rDxO-zX$z0pP0aCy#ZwE4CPd2BVfk;i(wm9-*?H@|Vcw!VQbI?}WTfXu{e+^} zMsEs=G(#E5Ke{5joH}7L-+Q^OUY2L)6z1C*5V`Lm7Ijx%!0cmU^l5sPn_Z$Hyf-qs zrKICa*3Lt$uc|e}qVTsOL6J3>eBMroZ+Qwd$E;okDW>uk|Pd!4Zk>dP#8tUSaU%M?fMJUK6%=7~ z6lUkr_51BDUhl*g3E_JU)9;l#k_sHU?#fScCqep+xHn0Ddbn*e1?9ODBY71?Ma3z5 zmZUVf#@&TPxo&MgY_tncS4?{1&2WaN?nC9hNXB#cgrs+E}Z7^C7^P@ zjph4F-FLmMmsIH&tJ0Ox%1PiXpj31vXQn9&9$?W2f$*eEQ^ukAF;^3;!- zuQJ`Uld!BH`E!lQwMN&YZ zR?jP_1Vxe|a+r{39NHoeQs`$Rp&A2ME>3?b)U6VCSUQ2c zsgqIM3Da+cTE=zurP<}hr9m&3y1-|!%>lhm+jE_+-&8l`+%;9deK{STlwcRSD|Ejl zbsBV#GrzlauB}m#u$4f84{Tq_lKIzam*I~p&T-RTk)r(a2*sc-uL!kJ7|AcPrgJ@x z}n=?Yh}tEK03V6MeaQ_ZN#&YtU3)7`gh@?*yxZ>Th42mfV)v ztqyUDw~Xqy^Khzv`UQFm*HI}=a-N_7QaaDe OYDK09UW*4yJDM2Ho^n`sGiSwxb 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�|$6ix*6;!`k8=tXTVzvwY~L`caTS=n~9F1cL{jU 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

        y|tv-%V$H@y~I7pgmW4z?H^ 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 z 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

        =UJ}F$|W^+ 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

        {0y<91dZ&;cH2Uwf!)!-FH|Wjg75l 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�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

        ~!|x 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%0A2zz^q)*51>)xj7l${Iv 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


        2-`TO;QlmKi&+@ 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ν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
        #i= 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 z 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

        q^>e5k=x#B{tATD3cN2hK6Tg#z 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

        6(QMR_7@)==M}|g3if5a=rnoT>^u*#c+6*!< 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𝔨vT$SapK+MVE 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

        rEAwY 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%0DXd7m)%2s|p?8{Z@P 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%0DpRHzCvvxi?K9`N1^YynJ> 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

        9!r+F%oc8F7 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�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 wD5#t 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%0AAqee7!dK28DD#fCQ#%I0zo)D?zz1C-6% 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�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%0Dk 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 z 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 JSF2jPU6D!Ip%O+KYJB&IhJc5r?W=_3S-fS7j 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

        (h$(0m z(fQx)sXwdOXLdKaT!Hc=J8GP~P7K1alvn8<2aX4i2lGI_IgmU9JQ38~d=e;~384Dd zDd1PYiQxCZQ^5zpT=01?59GZlCm+lN`C@^2N3IZ*O{RcRJC8(9!Lvhje%AUh`g@dg z)DCn!p0cy{e>ASE<@Z>Aj_hhqyw@)o;U@-xXICc>uNRb->^F>KoXea=Ih6K1@O5x8 zCkHsA#uOi`_tou&$$9fmOC8Pp4IcpXF0t}}5~Qnh9CtIwsQWsE5$ffn{0wbgauT3|moN5NTB-&EI8+r?{P z8Dq9k0p<ekyMWTU}SlhMh-9%Rv?hJ5vZM~cZ!w014wJuoXT>eqKC-~XV@mCjHwm2 z)Di`W>fBskR=ZfQ%kRs1H`hDay-h9ySumwD*A=<8|8_Uhs58cl)@iM_1hc1?4=2{P zw-I-uqtop1SW09J9Zq)I!?(Wu*y-!bcl_nd*NR{I`P+wR|AP1rRZp2#c0uf)!wO$I zedJ@et+C&=$WD9V=ht8ILiL$%XEwYwb^L@E{$%%zWT$1`xb^#&R2+T&AMae0z5jFf zv9NxVczBxPE;*YYpV>YcpWEEkxg;-lNi#pNbhAey zFLz?@#Ju9%NqG}xENhRS1~j+Fbv`LRA%3A@z!$@wblQ_5uAUZu--_|^`2}t&rA8?DNj?d0k9%1;jkc+3Zr8&SNeW zbEc---xM;P(_IRyK}jRixxl4jj=a=b-g=+c>+?4FyiGpu4xiV;LVuFU!2>Rp>ByhH zcrj-`s#sK}v%gEloD+QB$v*EIs6rEqyrPTBbmUo7RLq%3U)OISnNGe-#hg+oD_8DP zF=vU-Tk7+kg_>+)j?-*JWjfQXW1 z+fdmimhZY$%z4t6d)k-V;`8KbQ1Qi_b7&YvCgx2pmFe8!QZeU0p)^fpI`R`GD&}PE zYc(>RY?q2T^17!d45OSaE|uxL>QXVM8sq6It<$Aqj(q3oce+u|PM6AbcDYo{sl+Jz z8x8ri6BTo6p`?-N)Voy7Y4drVK2IL*tlV`zZx_^bliExSB`VXYaH*Jct73rbJsM>#VogecN=shIPk&)eej9y@?{K#WFq zj-@i49G8ljp8?uTELXx46?1OzpI74Zu7fHyu{`Hena+zY6>|E){e1VNS~{@_AQ6m6=$caj8t_S(l1Ab zrDz8(MPEJAUZt*0&jkgr# zaH*Jcq0d|9^Va&jOMTu}sCg!qNyl0$(ci(<>hrGmc{lpJT~PB)EHjU@6eEL6 zF_!qeO+IfcRJBd_cuSG4OU0b)ecp{eZx_@8o5l&2A`O=!4WGBk=k0=8Xf;l>6dEpt zhR@sN^L9ZkvKl8@3JsS+!{=@CdGQJM3Hd0e#icTxc9)7dKlFKz_`IL_ykGjftv+wN z&%5Si-lZ~mdDf+v#a)Vd{}g*Q(>d9tV$Q=*XQPqnJnm94=ctLgD;Murmx?)`f?^<{S>iP=wr3 zF2xE8ih%{*=`IyBPdqMk4m|Lv(tm#Lj`F2*KRqhz_lb@7mySYik5}c(np>A}kK*pf z_V;H`Y;RcRy!poKk?qgiw%NtIyN%aBcekzj=kB&b|J>hFMc%wP;F+yKfpfFnC2(%G zZFuMQwR^{j6NhZZBx-~ z$hMJ~YlZ%$^;L}}4>{x^ySlF`Yk^znapVI_^h|ZS_a%Gep*LgOx5y97zF}C3jVl=Z zsnJ({$}o5L%@|SL7bB`{qRJwwjJ^dU7P_(J^p@}JS-;cij?0!+Iej%_dn+<}tFx$t zYCn7Z9sRQ;wf?BSs@*;7vXykrZbW)#WcTOE5WD*pWcSwW?mv=fde-Jh0A9_m-UT`R z*$5DMMNV(k?rj(HdK7#Zy)(v=dGeLvWhNtF?hz@28hd7&`rLba#<0fVwYj@z{cfjw zayIU2b<7e%X6;mx9gx$Ep+12~Bl& z(SWJIY^Te&{_g%isUpJpwdH@GqeG2yyN*UOUR_SrO6|Zgsfv>gr++*7>OZOf1aoPu z({+du9!ocvR+T~HkleCs6&VS19u>J`uV?}Bdv+Xr7(qt^~hlx})Zh5;# zGhOs$^gNtKUV3Bw!}^c&=Z|b}_`+K5l#=7KQZd;%nfT~$7~&wC_tc!4vF$=LJZG8i zbOf_q&m$we39oN~=01P^&2}r$%r<1ojMz1 zU83?*qh6VX`_igyEUEfTrB>snHY|`@z#gWE^qK)?(>$LtTWVbKR!Fvf)4FG|vY1vr z_OhHy>2F!ns&YDGJx{)~?Rgp)qiRj|w3@M(9(0*%cv^YR>MYaxw|!q%M-^<|_DzUw zck_q7F|7ME=GbXfW7p(#WMFG*#m2Qk(yR%TPR9Xj+;mp&W8z{}p^n(nzk(=+cTdEy zpH!t*n?tGpsd@Ne5Y7WfyE#+w|J^ zfhhE>WoTw1Wlc1;=VIp4NqgJLDFN#r=`)_2rtihis>j6NJ!x+T0OGV`AuFVeX%*R8 zZfUycE6M54OeL3XdzzQthgP1^wme>k9ueu#q-W<(R>Hfr+#p99XU3^ZMh8zCo#a=< zBg=W@Fd733i%qkRuga$TduvZFvJTZEsIPn+i%gazeKm0wlRfLlIb9?-POGGfu|4bK zI<3*_)vPCXKT)b%6|I2$hA;bU*V;0*OsG=K@3AhntNl^L)PGd}p;}_C4=gJDCEf1+ zyMu|jIEMt^%C^Euu5!30v7e;55+Z*bq!+vd;+ zMfuEn?fnep2U8BS7>TSrg9%vsnf_rL;b4tmKzsKs=o4y>XIXpD9!*ONSTxlhHMKAY z&&cjR&`O7@wf}%Yn6L)6OD{`){d*N=`qQPsS_G`acl zpIZca6YV`Z1h!^>uSI*ebxSInuTCsa$bgV|4YR=@mI&mg@zG-_?T!)Cy1 zRym`u`g9~qesrqgP{RmYEUmkC=#mWUo)IjGm)TIsa|RiRLrp`)4Gy{LhuHfpVrDk- zP1Cm{XqVo0cVJAJA~lq*4@yRg(^a^)E46L6%XEPWf*3jGt*Gt;qUo|(j9`;-2zq4k>ecC=w>x=_hDX%NH;HCF5zmr`J6VtQb3h+ zmEQx->dA7*pp9>d{jJaT0$JLj0I^Pz06)lR0KVH~3KP~0xl}GdAWsXzfQx`(bH>q_%RT%0fD4Ul}P&Nm@hMI1!>J<=s z_23a+u8xA*&*bGes0$4>0m|CyEMM+IU#=di*2t}dvbmQV5^JHyp=^174mH}yJqxwe zP|rizn3s?A#m7ku77pjH~*uzft;aZoLWcdXAl18SAw zRrtK+P_2g7?(;qaWpj0T%(L1Cs5T?_NvL*1eGcj*L){K#^ZY!Nwe!nR7n!Sng6c5T zU!hJi)Zd}3#wm1st5FE0(IMTL3e{z(8BkV3pMJF(Uxl(7-+<~ia^HbkZKxkYS&b*4 zti}sarCiN%PRi0&e5LU-s52~YU#~Y_>r)HpVrQDGE1}8^btTkXL)`>5!%(;SS0D0u zzl16=S6}m~H=yPi-Uzx_rJ;_4vT`$_W*J_y&$}9Gw&87rsxs8${?$ME)IWU+uivi5 zaZonq(|qboD4WKGP}Y8pP-}=e-B}5>)=-^L)_#{lS^Mc_8mn;^)H);g4XBF^^<5~d z@d%XF*oSUh&D9*|1So6!JSc0)`95zAl+Bf1r?ut18ES#i{XUe{cpA#a@@t>>C!hC* z&l^tHwsNDPtZv-rO@*3oVy=W*XsDG?R_;xV zC@XiQ&&&6z3ZJThvNe-{T5L*mDU{W{7RttVpHFS}ul^RwwwFIZU4m}9^D5M(hT0Bg z+sj)}w!Neu=*4#olub9!=bZ*+(_IW@V_pKa-o#f2^$|lgL)n-+plr-ZD4WwSKv}D? zba?;;=YmI>-kh_HuBf*-#&dWf<`FJNHz`~Re@4U!opgqCFep2j^amSC-|d4Iybe8- z3$-|#L&otU`Y~QaPULGDj^_{}*O$<1MfNpT<-;ovE3%}{St})#H`X&rhCt^;j#0+- zt0-Q#ad|Q4HYnL9)A_PX#pI^hXz-GfOT`>>~c9U^LX)uDoCzNp=`O3aJcT{dyicVVaD^l-nX3xQu9I4d0pK}sVMk*1{ z{qmpZv1}jl^aT~1?i_%e3a5AXYfC$pSL)?`ZPek-D-+H@IJMy^*X0VlvIgr)&Ng&@ z6{zya*@m)lGKZ}zQMRr`#hl-}S2LYgTq-74$VMa6IQ_D6)D;ggHCmjl^s&o)Tn0K_*h)#)Am2@O?Do1MTNm`?E zET_!@LpkeLZ`jjnQkBT}N2p4q?0HtHUFi8e*L3s-d8y#=g7T=Kd}^VmP(IxHRAEVP zs$&j#Ec`P;nRhOzGF7_QH2~S_5@oAP6z_KP*YdWyR18mdczthfhr?#)M{JY6_BuX-4(INd!%P{P!729C{((k^qS>8k*_1g>)TozyY$hU`PK(MxA8MC&ntVd^zijtUO#Kr zreh8q`?oKBa?MMBp4tDk9d)-}^}@n0{QM`+-2C9E$Isk!t8?RXZ=C+mYrg)Gb5#I^ z68Tk{*xYbV_lUH2-qFla(#VJSCg$dTA}uXxIl)iuFseDj(}Lr+i6-=!onc01OFs9o z68A&!6FVB!ho`A)g+uUTJncSL;OY5`HKw>h*A$G5p^oD(lS_c3VJsfvtl&&} zPibApSxJa55K4Mwh%*(=jUi42oSQ;HV_Fq`{8@@wfr2>T^VYfSUX4osR;9po|9l;c4n2MB_9p z+<1}Q02=%V(I_LclfR-A(v7o%U_2Rcho_yyU$u#{DsAr(6^w_QY-CO#Aupbc0r4m& z!_zbsDL>sKE~EmY@o;O43~q6aHYW_4DyzcRrAA11;zrN7UbZa$DkhvqxH6(GXP5=1 zbZOOk(=yj%emtXHnUvPy12`wToRPj3PBfkCQAu&;z{w^DDGp8(=qq#nE%QdqbQrz^TR%DH%Pd(|n%d;E2ZA7~}1;o(*xw;9O6oDIWD_ z0`N?T!&ZDJPBTc!90liIDm}$vJGFB!Rctx6?sTB7LN3Rh6_P$jNlim*M~E|9X=Qm@ zl34&}V~C??kJ|2&N_{1q_7GZ;o&ZraTkn z6l;VF#KU*-vQVF_xc{Tda8{pfxG4=$a^}_{In)zv!7Lr}()DXHxF&C?{_O4JVLRVPS4j zl#^Ex;Y`kNiE;`q4Ra>vP11(aK+Kc#3ULt^=1jqvQkYYuk;`hyK3@&D=lZ6Vo$M7? zpv%*q)waUnTWEwouI|0kZ@;QG*hi^73A@qY-6ZVRgLjj#n-Shk!rPwk9x~dl@E#)C z!SEg;+SKrFB4(e175I1f2DkmFcOy5ccqa&dZO=b^})I?6)v{j@^>NhtK@4@tUviMm}tSUtzxY?fJOJzXL7 zNO@1M4c!0n1>BTh;@Vcvr!S5U^c6kpNUS#K;?z5_K0V1;z>6gw7xZm8*WXs~jL*Ra zt`&sNCWX%Upl#@uuQqUV#uu0aXT%veBhJ7XaR$zaGjKN9sU7Ht<-_{4Z+H|6Sl#Vz z{%3yO&r{a5uGGgVPmRCV*H-h2@(YXN3i{gWf#z$g|1s766r#Z}cnhfWT#hB~#IJJ` z2Kn0RSe6^tA-CyZD>54>8RBcJD-N|X-d`gZ`P%B0T>RMpxq)9>y`II zb|CHy{2om|K;hzP9=?WFBzkn0W?`Ps@X+k=bdU zRM=ae!QxZ4rt;Kam3eY7bpEusScA;%Q&1r2#%HjvtxhLHzjkGepyV9Bwi>asmVjfZ z|6nM|E-8u1X)ZlvfE@J^iBEEe@1fjLdmyL$9Xmj7VE!a`${xxU?xEaigUJP!5hQ7D z&&wlndWc5{dtYCx{U~u(IBB$Mo@>4DuhqK40bT{(|F>!f{y6k!+TK|5rNzC%M9#T$ zG>;x$2X$8v{X&s+B%_<|+Yg5@Ax+<)CzJS|!T*hU{;h}y2|WLnqheL>a?(YwljWQH zWf_=j8qKM))Wy-%XvA|MOE~y8#7b6#sn0suk30_YNh9w^r905_g7RL$33prO;f?s8 zaqJUu9_A#q)cgWC3;ZH@7I+JIJ-88sc5Vgl1aAXh0~w!;C#_8&U-)sp1ZtuGW$-fa zD_|c;K9ZjYzXsk45=Zhe@NQ7H{5tp+@r~#3LM44(!{AW$qx7O*)sl|tN6Yk0L)6d0 z*)vQPxkId%oQEGm6{(81^V5Y}#T}*+UrjNVv2QtR%pl(>l;YNu+;YmEIc7_W(a~r) z&!sraEa$}(XSr=N&!#x~mM1@vyg>=KdZh$qE47D1IbL-6KcOCEzh^+ThhKnd55EM@ z27d*90(=&vt(dQ_{ucZV=Q}~@r25fwpdKW$i6mJC{tnb0AJR#-fiHnckVkpR+rTZL z+QZA>pTIwY{{&wJ_aUFOwd8@|pTMKQKZB=$lqac&Qrp0C@Gqe1z8{RXr(1Y<(?TAH zYERdoHzo2*mvm&0&x2nYqCL&-s9R?mlp-G_d`JyS6{;~|O?!*|oYIXhqrv>7re>p; z!kYNyvMq0NXqd3yf_nyuZY1<1#Kv%w7p0NjOsQ}FXyj2tQ!bi~ikha* zR`|_Q3GgA8M3>3b)9!T*TsR3c{oqM>ZpVH@osGXoE>&GaNTf8-e%zWUHXA>D$iy?2D&f6AGER^igno zo^A$Z{Va@U*U)u)p1S__NPFG$_xK+f;qxnKPYU{mn&SI-;M^O#t1+b))DG2GujZKP z@<*rHzIrgIzRJTK(^q+oW+(V7unYV(xElN|xCVR)Tnp~YAhr(70WSuR z0WSql2G@f#!H%iB*4WM2C{TMi66kp!}j|ORLNxkOzNpKc;19&dTyqSBkohQi z33xl01iu1a4c-CX0)7?LtDRp1zXRS0J`UamJ^_9mdza~4D#~942TkAqa>Z{byE5}U$nA{z(qbw2JI+;(7YDIT31h}| zuH|qj$Tl=vV;|Xuae&usXETDQf^;M^9sEkjHmUoAvzxn`7V*}R_qj8rF-X{ZBWW^K zW=lBCt%ANoq#F@2I!Q6nSXbZ0m$oDrSVQKUIn|pI?HsJdg67mUjh*JIW^HqB&b)cu zE)_QGj=}`LVw6H)O`2!sX>SG7M4S@PyzbA+ngw6Rq6(g`efw6=4$CxuWna~;-f4Q( z<-bkc$>wS9OIG~+Y39MMV}$);B*;&w$v44l@L=Y#13*2e$N{egS+6GfB7*rsogffLmZ)RX1;`ZCjbj@|<%_ z@+M1j&MB)Ztv2UYkP@I6@gJ}B2>CN*s z>QeZbV+_qSv7GEuG3RC|X=FMZU5c3LP18&)&$$$yG+ip@{D|d)Rz;c4k6j8sj7&4q zz{jpj#hhn+-m^Y$i_d%2=k4%$TKg&%O3JF##;0|#8WG=6AB z#hlmS@dgRJw_GabOon0Qrn;2%Lu+~RLu++!9o33%()8c0K@BbshD#sRF2_&$)zYI)PaV#*`;F6 z^H2vF-b*g^KjQ%~{7Bh6Do!mS^$3#?k};2=3@@|{56J|Vp6JIpyeHu5r3wQ)`r%vy zCqh%X8{w93Fa7sz_J|boFqTOnv-DrF9=1+`YTlS z?qe3bDPK8n$_r7zub;OaIva;2N4|$h(BX&ih_n6Vy{qq#$HZ-V^)Oi9J-euzJ+1JN zGq`Qs28ZfqPa9yk*=S06x4LN!ArtW(vq?QN=wof)a-itEbla^>jv z1Q=Ua3=3|}?k#^cSXZvM$G)2Fo>viec5E3`VrxL+#X%)r4M;rKSNNTPf8)|&*5gW?41Y}+e$UNsog%h7=y+&m=tKbZ4Z^n-Y)dwE5 zec-`uH9WTnSZ%Myj|UW!`X&|ez_v_c+E9LD^@gfV3pUi;6xuS=v;M}6Js(2uQ@r=t zc<&Aj-q0sF=9-@0uR zQTCraQ2LNTrB@?8P}MxD@{3(KxA2K9kK+-kj)xP$ zCwtaE$&9wA!_plx=^fUjcWir<)!T{@O}bO@HpbDHUtKX`MRwqP>zkubD$jaz^tsCa zNmbcU55GD3T6y;R)#wke+A;c`s%QIZp4l+s z+TQZ#0v>jEnlkOg`RcTqto1Yd%C`(J-#NVext<-vM}G&mpZHSU)mQ#%U)J>qTDmvu zdc37R{ErcRHCy{eTuUzf)7}x+_TRZ}9nYV({fSKVQHHH)qwkTupV^Red2dZ1X&mFq zU_1M&c228O(luL#*X$f#^IXpxB#o!tT||oomBdyh0ZsgU<+~oT%C`@f?YH+;ZJ$>4^hd@R-)mbro1mK9 zj{CUDsCGZRg~i;Cfpv|i;q3J|jiQCT zO8Uc1`Y2ATdHN%m@3GkAcw5|D{)azTj`STy9=?~RXe;(=> zI7m}_40H_bu%u&LZW?-^V|bEo$B-Bu!-~BUZThKxS+m6?u!Xiet(<;2m*jiaZyC@r zs&<&Rjw_oT(`wW)%3mB_PRIDbtsAKSB1Y&(4c{0NvbA?tI_(lV_VQ z{Xy?1#}JEI^$c-8xySe7q5H{g8nCre9bz%a&!r~Su{c}RgCHk$D?8S|m0cVe_21Kn z@u0UOzN5tKZCYm6g|ngR zY3?|l4Bc_`!PCl5_hMURZ1e4d$2M?V=ALrj6}+c-{ zs0sWn;m9#gZYCM3j=xr8C6v`@hnmHaZd~t_K;<}En&lblJN&g8o1v`6<506X(w!gk zw}d0dxFoQ0=~&CkWkOXLxojvaHv>vPF{JA~3^(QrpsdC+s5$1Up2}Mde*ZV`Y3Jyd zZ}Vg`N59XS=eK+rbC?&4x(N?5iTNO?GY!RWXpW6#8k8;3LZ}($>JlicQ3o~G@EW14 zhBoQUFudEKtlU?iDh*HLg_YxL-foHX*3S%c^&e1H<6lr!hBus5xz*tNs&0v9LKSf} z$EoqDMxVL{N>6fgoUi$m-ej@7KSE70SKoj-)lmQPsTfbLE$<+oI@+i7WjTBGY$%)O zIw&6NV!uYHd4`gMu@Vz=ACzrFw?bKsJE5$Gwrb8d8sCPp8ZSfT8{L0ES&iZJQmc^x zRc$o(g|ZrFKv}stzT7;h1x9X>FLxD`Z9|`ivKkwqY|LMRT4*%B24!P@4k{O3j+4Xv z+ER0M0@TTdHv`JXr?26iVtB2-+@(Mnw^{c<^!TyW$#tD#Oc)D=F( zYS26_vrd&tO&WCM_jIbH_hJ}^{P$w6g#LfssnW5O!FqlXWj()$vQCv`8|zd_ly$0P z<(}l+%3;mE@;!E{BpvHi>3FC;bE*`zyJqfxN2f|BP;OgSqHJA>vQCvO?-kB1ZT9=Qza?ynNy|ct7EsJ`S0pfNkf~hE>X6+L|LawmbaC2%j4%u`PvEkG%~wp z;_|^$@4Xyje)hC-Me(+dctL)AS$jK?@cvqSdOR80@|Ly4!i8se+EJGH+=_wCxv>#fWLzlti{(Yp=Wo)&ot|37=&#voeA?x6OuwKGWkz7w(=AFj4eW`Jp@yKLftBiMdCafBX(T`Szo$Y`$4={I~f(($?46UNQ#XpZ_B*0~E%* z(4$q48?>NM5Ngq2r%To^0nQxG#)mkqoT&;^TA$#oBEXw$+OZ9@|5CS2d9MQo#NaAXAAdlDbBrc^pWrs=f`luX}vIj(?5Wt?K~N-p1qiF zJGtQv=7mSE@+n+<-5rNo%6NXsos_FH-L$%1cycGn$!(Z3>4Yd}N=bxMn7cT_Db7`Y z55`;^^}>@|TzF$trs$3^C%-WFu_z~B<4Yjs{K84wqns(bBb>>(dRP|Jnp}KxgfnIG z^a!UYe`$nMT*StlU_1qdxi>{Q`RW^ivyyMcC{oE*3#UQN~^Nz6_!q()>W>SWWrhu=Yeva{nqy%Olir-mV#u$T6!@tWsP6_ ze(cti*4?g_WWri{bup#2=((mBQd*C@T9OHCskfxGl25;ITT1ICS4%Qz1)KmJXtdPU z!{IG7!d^T=FBT5wS0^OE8;kELqc<3b5DLE1ID|;*?a07ej#l>H&7BXHFYn;>Zu3g0 zX0n;hEp=U~Q|ta|F@9OaHgny~gzLEnX(Ne+b9Q@+NBSES zl#YbibZf4aHZ)Wr>zxdr$#JQ znUPby`KowQ0)8QbZ6qQSXc6X$wqGR{w=HVE*k-|;my)$Ac3MQ;3Vm2kaB6)oH?<^D z*HV%j369GzC~C-CHYIP0f8J;XQ|D6}8;hsl>Bq)X&{$s_2$+Sn#di~O zweSGDtb6&Ai@Fot3FD6EJ-zYd73UYn737U)KjV$(JIC55;u=l{^Tv}}=C}jSAl`UR zVEpZ3OukuTBSBAeONQ{qbI?IX#Q$UD0#l1FXmY=JfZRZDJU?gcz8^ojy)@27R|3R` z@Wyk&k?iQ@P++zk)O*fO_!l9Qh(i!~xNp7Pbm8D^{3_k$m~aw*?~LPJfkQ#lQ9K(j zK&C>*>jwrCP9ULeaVDCh?fFpg=~sobk-65D8!CTVcHD@}=3{Jp6n{`}JeA13;mTM^ z)yLr8cuuGOgP}y;cmflSu4zFwDaX_JX2MO#X z9m94@EyB7uTI*Wmi$Pmz|7c7k6@TZZywULL)H`p{PFpVGXNux6M@WF+IYY4L>CR3> zbUoKz_OILXbZ0na^mpj0j=iAr=!ROqm^QdfeoINJj7ve~st(j0K|QGcfLwAem;lxP z8^P9-oIM<^df25;)?FYUbwY@iM4(;*Y!T9oN zVUmqwXKX6Z_NppXhWzg}w$v>*)iH=8AMKNs!+Y7Xxht`X-`xh(kIbXsIh$B*PpKJO zKi_cAz3ab@Bdcg9`U)ezQmBS$$D_n(rWtTosg}Dx#4sHNT!HE z82lutU)XK{sZ))?$qw*S;AP;a!OOwVfW#$-)5%A{&x22cH-j&NUjSbNzXXRF2L22D1$YqY{1QACd=^yMksV-9^)D5UHfch%AJGN|jA7D|J@4dr zDQeG!iB)Z@6MJXUA;zx(9mbl}*fdGnUQm8yQ{8-axy*MctMbSLKVwtcRkDopQJ`#^ z0akZRksOm;{y55})Z|Sj2FAfs zkO!klE9rWcX8~lD5bh_4T21)guCQlAjzGM@XeF=v`0cBQRi$JAO49)_lf|cMj zum?O1RC_!Fq~AFu;4W|msB)HpQQJKPUvYXh9JSr$T$|#|@~f0nM>@*S_c?Bf+OB+U zSE99{w8QgerN{>f0Sg99Hi);VK)*XD5RdX8JE_iP1BES)wbLI#CHpF?El;?q)b>@J9}Yy`Mlai6?0}S#-l{gfS9hbrrf&OE-o#bYtA*1Bsw}; z+uS_3an_XAl(X2iE)izUskA2&HhvZqlRfzmd@1ZC);lf6`Vc1~>i;AZsVT*CuF-Vz|n_u;tJ-aOZT@Z9*B7{53-K0dLmotGHKCz{*iI-eAu z5Wmnc;EQ2TI_*gjS5J%6vO-=cZe!lN8D1WT^+F-adZ7>%a|&sxnuRhoUmGeWUvWkw zQ(oZ=6_fuqm$%aAt?_x6_`IuqUZ2m~=<_!DJp2Ng_w+_N4K9`GG`SS-m_cc+%7^=0 zD(3v%m(ve#`6l<83q@r*nJyJ`4)%G6`Ml$O-UOegj~-iHeWb+3r%&Hl-eRApWn}?r zjB=K^RHn1krDBdgJD@w2Oy_==!b^rPr%w}0H|8v5`8dhMa+gbGI`_I%%y|n+(|M-z z50{FWj|xj8(>Z}|9XiaBMYJP#4GU5a#}tXzXj#hg2!CYxAx zx>TmK%cWwDyuI#yi)oyhjI@z#h-NHT7lu+bcIdd&?2$x@@8r zOCvC0fG3SCwzN#6F|+G-pFZ_vr?)C&Mb3(}z{cU-E7-1@u`s}4TPqt3clB0e^{n6J zbeFTCq-M9b3pnEehL1gQ%MtR5(0`=aY1+_s-8(yENUG3>5n&!p2ma@+S{u@}kdI+4_R=s_Pjf(-b3U$m*VW|wb; z5&h5imw19xylr?Bd(`@!5tkjSJ*qP@s+)9b{;U}08E}NRy#@~&yL;A=A{*(D&I)dg z<3hI6g%gJ?HstK?*_`buWhhgAR8-6pjI$I*o999yV4uNuXQidGwp9_B-9C0_o9d55 zx4kSj7U>?$BgLTlc0Zfd-?i;l#Z!~fH-kOL8N*96pr;MHbUID0XYB~5t3Va7Amiaz zhG`!XUv@RJSsSvhVILA&SzeLZd70rggqn;uMxQhz0|k)dT+?XT4EFG9iTTwPNw@FJ zEKJEpXOmKf*^r&lduB#~-E|mgPkZbgCA1T;zljX=ti!X!h=R@i=leP6TaeW^;tI1V zoATm}g0f~kG2#FdGTgN1jE7$yriR?}NR~G=vT2Z^lOF63om0Hci+g9O z{S-^aFJ314-k2=_^O>2V)7{Bdk5%IEPUT29%Oy)K+=2%W#da@0Mz0xU2ZhZH@(y4 zDAV24HU-McmHKkCpk^A4xxU;cs1r>ZTFh3PtG|WP;wi_`($vPHjdPk()1Apsvkj%C zskPOweYrnCjWJhWg{m-=zCKq3MSOI1H$EsW+bbY=oL+ zG_=vpYS4WifaQMwe7d*4+v0HUchT5~OI#IiS2hHe%ZN;m)If3JU>-W!3 zp=`FUMA^C$Ww+{B-YcA2-Y%E2TXihYOdNZ^RY%HuwpAzk9Q`(viP;)m{Gj_+ZZXYp zpL+87zwi6!8rp1iiL%ut%5K%MJgsLf5C5|9I{kbQ*n<+;f?`A(8afi4o%+`Fyqd~N zo~?wpsqieTtz%uhB~iChpXffeA+F!Ok#CLLJGi4_x;G1N3X({eGf;-lxW&VHwBL`@ zhti|*MbCK*75V)6K%H3JeSADMZeOwB>C>?dC&ycx5_Jt8%{R4IxwN$vGVL+P(B~i9 zaDlFIZo^i8JIYJ>_x$wmo|a#F+fklTiGl*$^}Z{A z_9^dk+K2q`frI{Z!6)wbwxj$hcK72OCtsTN`@bDAb@$ZO%U{j=+$o(m%)iu4@V{|e ziQeHl*GtCW``cD>qZ`Mjzy9)@spvGJDF`))+GiR%OL4R$%LsAib2c`_Y3ED>a7t?f zXIfsRI7+r6#Q7y>=Y%*rIco}W4qyq@72+HPXKjcx5ss=Nl@`AYI>``cE}Sbvob%vZ z6XG<%xh}+63+H;D6Wn^jnu6Da^`=`1)K|VfW-&kr%4n?n-?BYL&&tiq2Bws8hZPY) z&uA62jJKRGxg2pV=fMG--?^L&qc!-3m8}D`{x*O!%qGC^>0avily^3ha*A^#oGoak zI48l$rm?3uMbZj!DkMX5O3Bo~vB67APn*LWy=xifTseSqJskP|QOvf--3}+i)wANM zEhDnwz)vviJwki$Ucc3`nvaIc4!Intkz!sciR#WtVMp-Hown#kHXzkJqdS7_o26Y z<{8$zY9D#mwsh*ZbU%{7$9U)HE&jlHbr&!H>y>wYPM?=p9>8EcU~Dz15yyR5)d_kxqSMw%`KuEko1I279Z0PrfmGP27HCHfOx;t<6Bm z5O1|lJi*F%e~nyVyb%9Mj!zDd8~9dx(>Q#c@bu-8avR$bj8a3r)&AFN$Jxc9puu{u zx6rlL8MeT2{>Gue&t^lu)joY8FI{mcXc!wTK0VO77@6A^8L=Vb(_PqBWDavzEJNk* zWG)6K#sTbBkf9ZoqHgc zjoc*zp8(##$D`*>Bs+vHN$z&)PX=kmc`_#f~P z?j0(ACV7;76t1AYwW3x%z0RSvdGs4w(vggQ*T3;_2ov<3*#+G;qg9EzR`bHFq8=ph zo}ONXRpq(gSnA}_XX?fC)|SNTL`x@+O*6+RXRZ*R88<8~w|+5>_thIovyMl;nPc<` zsC2BntZgl;n#?i!sA3mlt>(=CV3axYKlNlX;eD=AZ)ceo-EC!|o7#7v81_tuU$U`<6*^wXCkr#Ho)*Z9iDAaGDS5WR7_dMhW8jYNSf8uR@Nn*{w4r*9Wdr zrL1TCnLp+Y6!h5K3$puCPR4U++)!A`Etu+JC8*V03pfj01*(s?f{kDsxDjjz^?>gp z@F!pgIFh(1OEMGe2659u!fuK_Ow`SzW&9{d@YIHBlg8|(C%`zC;2=L+LLU+2F`;FQzn&EEhs7z=f71A zu~Y48Ep;6ns^jUL^y4R;*6}F%qk88{-tMsNc76Y%rkPr=zBUks8UHGck->KS#F z^Dmw2ny*sNapY>gYA1z+jkYUg%s1lnRB8;xa7J+J1v30vb`$g>mn^Z^d*_Gk+?Pp=s+=4LuEI&c}z2tK1tVoeMi}hEM{d9PJ_yzsdC-PjoIs}yX zSk+_w)nVXd&U=BEf`^0mgGYc5fk%Sqr1=R(*UV4wG1ND0%i0rkdLrk?g7~Pl6&;Jg z<2aX|(Du@rBl`^a26!U)H;_IqeH8jm{?ccG@*7+Uo&sJ4o(ld1>gTbpo+PeAur5{iKfOEduwDzG@7G05#R#!+j&jgeGRbF>n ziDt9F6xsCs0FdA|HtRz^PEY8&;wX%E`20#t--CWCsq?oII>*r&ozF2m%h_G2C8)dd zTf#!qD0NlFuwF$;%|*vX!mVnnX^Hd{K;pWK_D9o~G7}xB!WfJlm;?@kO zGYv85-0en-bf;h(sqc4#Lpm~@lM(#zA8N!S?Dw&sVs0qjLXyAeDMYy>X=SA$o8P2k<&P2dyY&ERjqHQ?LeEui)n z{u1~p@XKI-knu%&8ptOt>4hM&NZ$&61^hmE2e=cw6Z|uH7g#`Bz8gFWyazl3ycZk= zeifV!-UqG#*Mbj#_k-UB9{_(2ehvIB_#pT$_z)-?@i3UQJL>1hQKz!cI(|%jbjRvY zEVDZoBj?i+c1LkgD{l;VN5<~(I96F1JQYrV&=NSM9~?^8Kd?F)U*>a~X|>9S z&Su$@lG>oof@ee-7xh8sOC3vjlgTocGOxR; zYgfv1%uWU)1~xgVsmc|FO_d0kIxCiVDHiH^xyai4K zTfn*CUhrD*kKk9qKY>30{~i1t*a~V#_qV~f!FNFUoA@)Bk9@diT5nSR3LXLe4b-P< z?V!f*{{d=z@}HpE=(}LD-A^Rn#mGiK9oSAAJF9&%F8B0YGbGXO6$dloode#PY4?}; z6G6<*Pp(|3jdRrKgMWC9Ge47ojrV%uLH_4;)>i8|Sb`Tk1 z%(cMQ*0?<1n)v�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

        * zo*-je4|{3j+G0>+8|-HKDezG6SKwjb>tHWX?d1qi?d3>NHvTBE3;B@0pB|w6{YdU5 zV6rY1PC^fCV6rYZaV`19rsAkP8W%Rj>vHPll?y)HpeO2x#Cm4uRY!SJ#TlzV^W%j* zKP#Eq5o-@YZCX|4v}S4_X&2M}EB~sa=(y-qWTP?-0ws&Vpz4T~o9T(*P_P`N?=qWq z8hAD5!@&*U8Q^o^nc(livq06w2vBkw2_|KKB>9kn2Daug&ZGU$%Um0rur-P!n|mlY zEk54VlPAvvBNr~LTxxZow1XqK2j|(1Nz$F1ZEe(6LRUsPpElGA!y!&Mtcs0I)o3Je z9eSXMd|bK4aqYj#r8?=s?^>Tf1(~U==Yy&%UUgajav`Yx@blnOknu$NF0cap zCO94Bxx&NuNqQ@I3Ah8C0qz1Bci1xlYjV?)=cQn>j&3EK^dXR6vVG`&Nn58l(j}Ge zrg;09BBv*doUIF*9HF8|?&`_$FqqxhchHYV`v&Dra?a;B!M|-i!JH+p2jNr89X>6v zDCb#KrEupRnvQJgNo~WSQcgocsYVPy-e{0;#NW4!MAliF?SBVR3VDT*^42jo5&wZYp1rrOGmapN>tG zS$TaDRQj7i$?_>svV0m$gU^7C;1*EjV*UI_l2y_tcT`r##O*Dz8fjB7?&a2p5?9#k zNnA5(>v1|LS>tLGmH$cgX&09@YzXy|gCA;>1 zdi5o)C;KMF(fu`VAU^``urVI8nq0SVTJ3mENqs0uWe@Z^=&dr((vyQ*gUXY1O8v+f zemeG1Ugh&WP;%k}1(Q=AsIhPt@J4WdP-W=`Cgt-SeAzkb&yHlfQ@@k!7ZgYL{W-se z-u$z}rerB$c76s| zbrtl-uCCtbNlJEv<5vX=pXY44I9hX>9#p5~dNQl16a5r|soC%N=fTwNzedij;?!TQ z@tFe2MD-ROXN^GKlGE9s_&d=Q)h zegm8a{s1fop9IeXRTq3(nN`1vFG=gCBU!&U!%Nn$;way%`K^hM8}z-v)S4^YKr2X- zV9|pH6^tE%wh|f}n)L$ne<)*W%CBVj34StjI#wYIm7xh#+4-c_?8?pH1kTrh z*Mql!ve#b%rH5Yze+%9Uz6IU}9z*(H0sDe?fRf9dU{cm8`0poc>2p#a6-W8h9KouD ztX&8A@dbT|FKEf8a>k76MT=~bPy!DgyE?QsswCBlUrC`3r%5X~REDJdzlVHOt{;Jt zKOZNX{C^C}uHzRnT?PIGyc_%}_z;NC`t+;d^A-jkV3J_#!S%r)D* znm*L;jr}i?WwV24BlO3LV!cZVSGAJV9pmTM)YVkZjfLpgU+R(g+>|HPt~l2WJ*l2Q za>~T<6VGOv{UbV4)%_kX(RU~lDke^<7(Jn ztEs066=vL$4pwy@^_Ut7K5fcKOjUl*Z%|>x=G3`Jjk{3I?KHKMeom9VO%vWsBX`Fz ze@KU>XjvP->HO$MSU#QYyYw96XZtR_$N1U4OO;+x-unO8d-D%3?X#<(aq2g#8gKlr z^IbZQ_lO_gcj-UeGw45~uh9im<|+Sw`WYP%`WgM$E=&6l3|y9e?4$;UNxh9Ksjrgn z(=XFsN*~YU*WLDG6;)tfP(`I|q_1wXz{c^SQr=`#-i6aQ0xsP2kXIG*7KA*#*LUI4 zA@ACd#~XA%J-r)s;dsMjJH2(+T)9yN-YlO=dB29zIK9C8txw@`l0Ne+r|{G1Qz=jTLLO+j zdd;WsH@d%zQQ&F2RK>;nD%40zWtUGCcv@~HUdo%!07spDfmh{I>`w%xs|B9+adhEM zrea4~DocE-z+2{1DerYC+4chO_db>KE;zu&V1o#sN_itvZgkUi8v z#`~>L;U$yBZZ2HDPo=yns4A*L*BI^ zuP;?!YAG-CDZI`4RLc7Ul*aD`UW-qqygpQcVib5M_*BY!1Zu3M((Y4uY4xd;SK1@+ zEjr$(Qr^8#ic#R*?^7vnL&)10@+MPNXIskm_!J&geTofnpboWE_V`rFE1_BxqrmIq zQXL*Z(|s4Qy8u{0zJo4ndMW|kx!+(XQ2+aRDS7GDQ{00Zf_WF+#zmDmhRrI zK83GgpGtXuhSJn+f%i9`Vp|df^*Q4e`xIINHNo<--ly=I>r?oSg*wt=yysIX?`Q<2 z7zN(3K80NidHqA)nIUgf$eS4Qri8p%A#ZNT+W}Q(x$1*JMWJgxmGT~f>TSGl`xJT_ zhHDAK{Vn9Z8}hm%T9;mdPoXa%uTRL^05#Ea&=oO?!e6^jVL_nuaD)Z%DSS1D;nHEa zolui3l@k!7r~>a~pTb`?)X~O!*r!t7rZC**Fx)r_JK0jX)u*UwpTd_f8Tq88a=1@n zbD$KXz#HRJDQ^qZxt2;XHx*Uj_428dw-Bntc#C}s-3`NS3d4=zR^^t;8lNigZuO~@ zw-btnOUk=^irvJ*aQnh=)43Jqj&M~zm9j6AF=+6vfhQ{Ey#sZ=@&4*l1$h0(`$o%^3%+BN@Ew+L;Y zIQi%9a~{R9&p{}s=-B58J}-D3uIu)y*XJ`^7QTkmHO`~2+AKXcqvpR-^5X@CQk<|* z!8Ib-Lwj%@nf|o!F2PDJTl$spDI>20KIXti0QsPfEWgY6mdN*36tE@X@ck8F@d1r= zf4uG~%b#5|J1=kzf)AK|@(Pn5ZdM2f?*#0_*4{9VMB2Ujv)O1KS7-ZzJ=qKS+>Y-l zW6qp&`4hm;u^c_ zyoC%3Zsl+O-}Qqw|8L%@yOrfP_QYX}_8Y6;-y8tS^_sSp+oRmzV?b`!dfe2YljVh8 z-S}M2j3tBNkb;2DQl}WZft5>Jn~o*0tq{meb^vu5Mu96XB$l zXXu7quR2z)jc19re>waX6iGbi7KZhJ)0TZvr!Dz>oX8PMDRg_}{2n=Z<#KzJm$|K9 zda@t))3Tj}oj1O~*}@0;>5hA6xs~`$=D#^~f+2qwjXm)!HLSdK+1cUFm@7ATl_!SV7j)QQjFl`kg%4e%hTzN>Z&T*&t!D)WX@5%}Ig_8T3K%qXUfH5B; z%|Gbk1hfqQi22-nc+bxJ1mCMxz}Jpy1$&#dCSERF>&EgwuWkhYyVP~s3E>{4wa2Bk zr@6$^Lf>#Fj$ra}X+icHMv_B3gcJ_%QhyHTfzC_to%YcZ_rv}}?$~4wx5L!z9;%DN zm8Y-r>OUJ)O(B~%HWaV2W+11;!%O$Az?GDQ)^ILfZJXzimg+6v+{Wx%b`CKE%VJsV zYz@VoWEU%0^P)m}!_UdDXP-enTV$U3i{>%+0*paQn-4nXcx9n%-$~>0ah3QuP3@%8 zLi|nb<7^B5Hq9IB4&1bs?wHx*RNsL5p50XieBi+C%6B%D;~%Lwuf888HD|`{@|)F; z3gYVpqcOaE-&F^jmLiw-m8ak0)pu#>(z26KY=AY_~jb*9}GkF-LR@ zPWXG|dRjfiGQ3nfN$*>E`ZZpiD(F?y*nMcMdF`HwI(Mm`PT8!&}W?`O4*jDyLYTeRrbS*K$fz zS$ovm5s9^X%MPVqGsnkaqb_XensHYZb}*6tIG6d%d4JbGxcj#^{{lk3mLp9)sxGZ7 za&-tf(~S=)7L%ZL2u@e<(B`X!YZo#?^@pjBafGfq&PM?V(=a)|Fh#Lt&hA+E7<1y&TvNFW+l2yO$XLATHxo3%|30jU8UrO7ry9 z1xvijt2-t*wbsw*tG>Ol>pJ-w47_o*{6sC>*BLp^8(y|AYjC%}26y{DU~m^T#3mmb zpXY4PImHvxmzJ`m?Tr-Kbt^Q5Hp*`9?1q)@TYfkL)st*%<$Y1LDs1^>b`3__d#6<^ zp1&{HV3OXaWva_*=y^RqM^4N34KHiE>eDC~&luR)K<81%R>pc!4b5-a(m{SZwvRdG z85{q$oMZXTWrT7@ju-Y5bS!3gx;CV;GZ(ane}eqwf3*DNw8QcKWvcc4;n;XtF15*- zjFTiy7pv3W!f4WU#D$GrugN^kJ$gLeJ!ka?C@8^ima?7E)df+xh5&C2h%uAzXKBiI*xHqC!VwPuf_R-TWg z-{U_{`(tEn?Jrbs%Mau75A(Pevj@$4DVYr(at&iY*d#PRLj0!ky-`c+I`EI_uJn9o zXEc)KQR1UIBz0pUMw_&^qK3k2l1A$TnVlggj4+-4%&<3a1PT&6Z>x^V+B z#|CX@@IS9Em&ezfNyLYYCxjww?0SoNF)hlgFEYa;i9FNw8uE@c+MBRHPMi62oDjoQ+j9|@GLwe6swZd5i4FW(4zwG*@EXYn zy%q1cY^uGR|58b>sx`HJI=^nVGqa;E;`}Ur#kTxKlkPa4pH^uIIb{Ov5 zFx+`iU$nb@J`BfVDSOdZ?A-ySS0BaRzd*TrY=Gh|C%OL#RE1GbK)HLIuwM|aKNRmL z2{#1l5~K7w-G$>LVL!cPVYsWIW>~oEp>A|s(@-v_ z{h(Zo!BEu}V>pycxdKYBGmAa#zv@c)ER>789m>W14b)7F`zn-+JB10JRmL0IEr>A+ zN}AWrI~(d!qb5K(%~=5D?zRTX-QzAO7vnytSr+3#C>P@o-Ggv%LmgyS{|Z%O)VokF zT<`oK<$+M6xLWL83gzx`8PvfRV=>fhqppNLV@lq-i^ z8;-HK)legix&z9k@&ME!7WW~j`9{g{p-W{Ol)LXPsBP^#DBcKD%BP_g81)M%celMz?rz6nK1%Iw=R>);l~9LSjG0iE88rvW z#l0QM#eD+GmHcI>5td4K%#2H=CsZ$sdnnXGqmG1fsf-E3O$@_Lg<53cE(pUt6o&gQ z6z_Z~(GQ^NjQVjHZg&{&PhmK@JFK^G?P0jHF$OMw=R)!Jm-Nnqk|o8FB9zmdo5FB+ zgyHUmy4=D&5Qh6h818MTBkk&6p_Ul+ZWyjNZ(W@oKP99lLzNM(*t-PE3)E4T^6gMp8g)06tHI4-xL=0hUV>U?;dX@K4#Q};^p1hzJvDMZ9%{K!CqcRN z&JV*?hT&#Ht*~%&!f-c3xe`4J6;luP-iP*+)uC!t)*e+k3A7l!M4kmsc>+yPL2 z4xn6ml~A9wt23dlHfj!(tA(4P{2V~}Ie>C8ehPJs#ds3R#ds$Sw=WErcQAu+3)c=|&BQnqo2LK}|F27AP0vZYURHEmWn&_&St}!SHJXEZ^ncd3Keq$NLMvKKz0M zvlctF(0~rnK7M~2R2lzSUGDWIZ^~;>9!6Seoip-D)7gYB_l7{{_CoXkS0o$fa!-_V zxu+O>(#C&LDGzCW2$y?`<6Q0ygUanu>O`*Sph4P^l=~0hCKpgDj>>lezfT4cy}XLW zGu;Nb6?1JN6IXK_QEy>dt5h+yj=gW^F(_~=mq&=_I|UO@=^r58gxVRE?9~)(ClYff zrNxtKUpmeraAvV&U&plnL0O}9buEieb)Iy&cN#obSE34R6f4TP+;hCwId{BvpW>sr zkY^7bAKvAj63p$@Z2(uKPWtIcuEmiO{lDsRPvv2>Xq}+wQr5%hd>qK=;R9XnsXKGk zCCXKoDCcs|@%C`;czkD4QmOqpLN7)bGxq$`#*w~@BMVYhwUCuvB{hpmCbGIBl@+Fz z6*XFFQZlc4UhTrAIBcq%Q&Kw6;cAw*{4PuS^OM=P<0-5*_UxTr#t= zW^VmL4fB)n=2u@{63_p_>bm-c<_ats))ocYO(@mp`<9$?$|)uDZ3F5ruwc+Rnab?3 zmizvl$y2WTXh*y+k-o#Sm=fq0-~TDj!s>glunB*Xa`7i1+eXz}`Y?&CV6zbu`O zW#o9Rt&MS%|9F_}ygI$HJiEM9mQ>EghF2{uSyWfMu)3zu61WI^=f)G}UU1+G-yZzfOK(2<-mW1L-ZM#MOOgfk|_VYdu#T#S=KO(w)Rhr`i& zluX&#)4}$x%y2Y;bwL;=x{o&VKxmzI+};H><_Cd}b*()5NI&Pj0AG98rR423g- zAz6kq3QlW`GZoGnCRH+FE``(gz$j-aoNY1A^>EhmB$rTY)bHUW$G(`3raYwo&P13YgZCylLx<_B$VjXKeFybPaQY1y znB)u_li&>KdvTJ}Umv_iQyw@ho!|`WFDFpZFhd5cOL7KnN^ph^-5%%Ql&U?+>7S4G zMN%Hve^~DXXFxx#6pV%$Fi9`>_-z?z{BprqE zSCn*gS&K|My2kpCVA09@1c|Ied7n^|gU!x53iAOK{6RGw>~GXz@|ndg9R~5&yL5Ox zw*JM1`rqtSi%C8l0O2<$;vh?HE${>tX?M6Y;)1^*%4mNo>)!wAFIxAeZ|Dr!J zsC)P`?8T_}F&vs6F7fbR6d5Uszni{${y0&YV}#dtQ}l^nSJWp?K_1a#L=pac68TfO zi*kjFI6G7ty5%K_a7>zdRKZ8``*S1dP4L`qK_A2KPvy+|`7`><<<&pf_m4h9=}jJa zsIWu(j_H|JgMYnddX-;t4qb5+=4;^3G?8Kl`$bkxtzGCglvk2Dj%yC$&6wM|Q12Uw zvB=(EXq+SsTtxi3r3&Pw+rT1x+yg!DCYrwf>pMyTMq9e z!4B(h5jlvPc`fpAB)2M`^niz`aIf?#9t2h9*`SI%2Rss-3zmcPz)EmFcsE!JJ_IuQ zO1}m!1pf{$0tb?QJ$N?AKrUSdUJjlQ@(MdW1H1yP0j~ttg3Cb3o7ccu`(kMx=48_D zs1Eaqm)w6(aa5jCaK%v&cBl?zgOT|7aIak@o#XiLs7q~DCeIMk1-D(CYdN}o2b)tW z$_}E8AjlHFvU0nfxk_gIUC?v8e{m_JW9R>A7eRwVa!_6CQ;F?9^Co00+1v(7Gnq)V zedWFaPU4*BNvrca!J9e13sjx+OTP@>1HJ~{3u^!Hwcv^1{oq;P1K?8dYao6@G&`66 zHu!b$yWls#XF+r_{Tld9@D1=0upRsk*p+<$3s?v~3XTTXfvV5%f`8%uefR~(xx~|X zzRyUu^M8k*^dF%(l7sZ~s+f*QK}Idjs7Ulq{tX1VR3vz<8EuAY!rFx{Y{IIyJuyAV z;dDZQGCSMpY-gwk+AuTlDB{e7u1mE>kT0hSw$I%f<Sc#`!P7cfsdD`8?PL_5oi2HGBCYcn*l}nH@lX zvg%IPOGu-my8AuXlI>e@y1^d{K6wa)9ctfZq@$Hr;$KVvl_x3cruUJ6VlE0_N=Iu? zk_|SC?Xb~mM^lO4uVQPNnaazqE^(v*!L6&T^}2n|HJ=k4DyQm9wr{o1d>t98?9HI+ z>@9FC*aE7~_JY@ge*#r!=)Ua>+Y0`UbNanBVWc0n59FW0Be+i+cq;f8a3uIwa5UHs zO3wcQaxK>G@TK9Ez$@mbBiZi$4lh}Eilh7&fR7`3clfq>O6B}H=T*+FcU#Do1Xtro z-34371_GBrC5#dLW-jDCpVg(r=7&%>8}_hu@WrssSk1E+j1gT?173DnAFj#^Vp?qm z&81FbSDhZpZ==sG%yV^m5U65k4@K1}3w_g*LHwK8o}b!N zaSi9%QxQ9?cMs;9A>Us(lOgxKA-pD zqn3_bRPBaZs=^#cw(ad_^(Nu@_151Q+78rbxUo|XQ!5RKRQLeb7-=8&sbp|>oPVR^edNTG>CO7CGmskS9uEtC4ej4-W!ERRN zqFI@`TI(k&Q2A9?y3?&^WIO%{P_WA)%va4~oZcsY0(xCFczWGrK2-7CN! zbABaA|7gD0{taBtc^>y$0n$!6arTtR8*sakAW;%&3buA>AOykzKnvnviO9W281!-CLtgN_DjvhD@rnjTdyLdR2vr z;>NT=WzX+tW_wHK1{IgoTxuGiL9ik?4cMj-P6J)0BP!Y7hRLD5c4lBb5ki&G0`ZhV0Z5KU9cE@3{+eH9*BMM)`MRJzYop^e*kLf#Sg)a z;0ACT_^;s0AUw0>KLP*9`AkkYIr?(xTwA7s&E%+O{cp4=(ymZFBK>wcl4F%uy6_2p(nKB4 zB1_5OMNqo%5;zt_{$^8t1Wcor?{CM+l*&WMKTm(FJWJjM{Hplr_zUt-IsOxryx#>S?|q=! z-rvEMAdNZwB_I#{2FUZI`3u`0+{}45P_kh8QI>qEL&hua?G}(Vo+;ycvMnf%^7TA; zZA`w={x%e{lFxBuTjWLdkfM@mx@H0ORTU0wU&H<_sH(J1P>yY60xviWSvi(kku0^; zTK%vrx9n^<7?R~yGpi$jv)rBPn1im^IaUqqc;+cI=M9 z_jb=cdte5KruY}3avw$?a5pPvrdeU(-A_-%goah@Cp zD2~D$16~)?x%fCB)H>ZD$C0gd9gG9kCA3N1eyB~-Kn)b6O{NU}Y^JhPgMmN`mzZu# z!7_U6dUN&Grl-zLp}K!Nbv?HxT_S^$aLk|OrS0UJBi zg12$L0DKU<4BP}R1l1lEfi2(?Q1@I4YV06iay;XiFS)+pGR`N0%fXqTe9GxLkY$qT zRbU!q++sfEz6D;x`BrcxxC^`%#D;n|fY?m00Xzu25j+}f1f_qg!K6-KMf{V=TQNT! zNuBP;_2k@u;z&M>vAyeKIz5(Zo6M|SsLe_`$B|<^5qSN|)T1Zcr=Cug@18J}OPx7g z(Ib=jRC9Jswp5lbu%#V1SW~L|e3hz+nLmAe?QD54)O87KLO0Our8PEi4dxJ*xKrtH znyG@SN-r`l*+l+=Lo$<|9l~$D&wPaXkQ~1UO3&7V(zEY_lfWN<<=_uNJ>#%2*7WU1 z;PagS7<>cV2<`(}E^Bi|o4`Z3-{YX>ik<*RgHM8=2RDOrz^A}P;M3sc;1-bQDDPQN zb^8l2sV~e|d42fF=IKc4OB=k?6VF15qjE9_=G~Cdm$?;H^DCt(*~3uXA;-~y+Nh~V z)JA%s>I(EAy9<3R96!C!vu)5RI?W3-!gZLke)VK9(>>~$Bpu1J%B=d1jzfQiJSB%$ zLDl!afvWE}LDlo`!Fk|ba0STsrs+GtKY{DOe+M^%t)TkEx4}Pve+DJnHcE%+Q5{u8eOHX1IJI=jGzNp+ zd#>*3e2kbgiz8sX!Vpt_LZ(idGOc3##L-hqM^2Sjl;E0b$F7Yj4X>%@-iXEf1%DTY=d9uszc?_J(XUwWxSW#yoHZp|8v&qDf<3>&$ zXCb0qGzy8a5_4!Fcr?iGdH*2{ou-ZKoCl2_L{Q_MTTx##UpWxt88i>?D3`D>t(uqN z`8}UPGJ0%PhW+d~bCS6_Z6xh4h&pm==`_pf!Ird3xtPnlA}Lo)tgWiH9Cz%(L-Np5 z?vzok1*m*`u_zPk=T&A3%c}}IQFk@BqIQnm+MRIg0sZaVlDVW}nqD_2oPUI=mY0pB zCkzET|DVMVNSBsR^}hG}^A7C)wckBjaBBKE=Lban%K!NRDH)9#U0gY@a(>O+n)-{! zon0|$^puJ*EJ(X}ZuNq?+W9pzDlg_a(S1?zF?@m8bBCTsn1jW3;r&5}+@_kz{H|6`bsA9CJMabPfef25|&j>!{{8Q+8zd+s%`L8tf z6{!pNpiiYjZxh`;ZFVujV(jp#ls9dE_w-)iUEouAJb-fH*7+2E80a!b61TgjjV(m6 zJGxJ$yu9wNk1g=__bGOghjQVne2Ow7q*0d21fL@JKE?jx2LwJa@_j1h4TMsR0&l2K z5srjLTPl-%s=%A(Qz`FfP(3WhlRlO5_J-kF!*K8KcVZ+%1C37#yi%V^d3QjKG2T5s zmGVX~v?#T_toEq_`@Ubilvi?~n^(tQgHNTrT~NA;-wvN*2YWKCF-Ui>n45}X2Ya7N zd0&R2-+=cOpQ1!zxYjUS9k%#vOJ$Q!6?mI{D&?I@5;D34-TQYAmGX|F6XAx$IL4<^ULBNT6nIN~D&-C1;dHX`&hV*}HxG*J5biRcN_nqAacg*Q z`V`(Kpfo>I;JxQlDeo}s1c}2t(x*~he<%XL8|+glZz2?b@TT}w%Bz7o+IaJPDrL`r zpERB|Fc|!I&_x z4d{N92YKDk>pp1Lz}QA-&6=QK!!+9;ypa9Dd4WMHFMePuv2Dki^%%_kOu^kMXpCD3`Z5>)Vr&fd%Ildh-HJzi5a;6gBReph`!mfCJP3O?M zoTx{xFIj% z#DdNKidPOrr8+CBowo10tG1nqU9xSXi#{FhIQhZb5;kk5(l)`&CET3x!Th>zjv6kvK**5u>d>r}m6#ud0yUFAmZ5lX933n>)I=r+!r&Ehg z$hJnlMSQ)bp7vx!?RyAd`&c$eZeM;zQ~7R0>h|Cc%!zi06gRp<$v#Om=ijJt$xr`fF%`4j$rkJB5c@Q{^ zO*^T<;%E(Ov-L)t7BuI{H3iNnN@+M3ZF;ANp4@mZ*yH4F<`x0B6TP%sdoS9UYCGK1 zx2WY%aRV*L@OA6@LOJpX^v&P;)%3x6km>Xer?CM`%L+4Ioi;DAaZ1a`c&D>(_IoN< zA>|7D|Ds6wXeF)DLipR9I#Xf)tvvMa9qa&{vsK2j)cgjLp4}x7lX-mzM?Jbfo6iT0 zi__g5G}_i4O^qa^t$>@b#wt&ws6|bs+u`kvwbaJa?TuwS8cKIIlqau^ngpVUH zy(#-R{nu>Sli1LM{wrf&5piSLp5bM?m&@-=L;2p8Zd_*jUc}c>wi8n~yj<7B+r>3D z+&1wwly7M)-4d#ML+Q5YPP|(sqD&ocj#YT3N@HE#<{nL7QgdsP?9b8%TZ3?M=WCyBK9qp<<4mj;^n)V z@_if=Hzuy!IZd3LthJgPf@U0j0E${UE6+gdNqF8Y3Z6F$>6kh@oQ-==y26@Y;WJ$* zCgtqFZszPTW8>mxy}^!GeVePuwmW~M`J})7M^IV$vuVmZ0u6Ou=favqW%jToJ?*-o zr>{ECl(2cb>^yJAl zVuq93ucNkBzmq$xhn)Hvd*p5YE%or>?6G@TlZeTB^WCNp(eduixINy1)f-;6!?(w> zxn_GAiZsYQ+s@(Tx+dOs-yUyoEZ^QxzEz^k*xW5qd%RiRJ~G#~HI>V>ZOhgix{6H^ z&Doo=F0nE5wjNCzOgGxm4d)^u(r?rKI;+`eu6DLi!J$<}H#U09mNu1d@U^DR*PzxQ z?}XU!Uj6w}g!YUgv<3Egb5M@Lrt)=R8bQ03e(lTXm%5B~Q3Wh+9$*H1OHfD*_}<{o z^xK;gHqP{g@y>@C&&NmM8b33het_?nhK%be?Wd zToe?#P@~x$aMk68;{t}t?zvX3X6hrur1+RD)`9O{eohlcK;uangrG{A=){|>JJC2T z9P80w@v*e4o++u~;iWt4ahcG|tP(fu+Vb`2`1wOV|Hu262i5K}w5&l*(+<>InB!H=sqb>~}LeF5g;YHH7gdjU%C z-MV>vyX;+Hla1>^)wBviH~sRczwE4rTArlkxHZ z6C(%8mUje{bT!+%2Fj*#1JnT~?#)mohH8Masr)zyw;>4kD%1=U?x#Vx7N}g4@;{+$ zp0oDz?{Nf_y+;nzOcVEbD0`2QP{T~zN+_G>rBK5SPahUgtIGCXgR*&k6N<-*(n+XU zhI$*y)?mnpN4ey6gHV5mVY|1Y{ z%`sPBhO#NY2W7SMUr;tikDh*v45+y#hTb-{G0un5v-E6lF4VQ=>M|%>Z>s|838=v) z+*?pK<#(ZYw2Cx7fGRUo3zU^^_Wpjjqo8cKSROR z0%i5|J5Z+>-jAUA8|p16S8^yG{i@_p<%Vj3vN<@EhHAqd17*XV05#u)>knnaT?l3K zcWFR905!(k?T1h{&o2a5-+;1Z>z3h{<4`DDj}#ydf{<{;c(pca{Mp9J9!Muly8^{Ir3Chl;keulab%GTEHP*xg0 zg1W$5eI06op+1B<(NGzge$AW(b-dxtfwFnN3aU3eKBfazX{fJ3Ss6SERbY6JL)mc8 zKvfyu^H4V2+fX*odXd~x15wBe3774i3uW`14`r|FrPPV$>eW!TZ2F*qEzwV*Y>ECH zP`yzWt6?WY*-~BrWlMP(lq*|6-33)(a{2(&A%=Pcs@hQBhq5)ZBMA3l5bm!~SDSEc zK{&0Xu<4xwWz#zY>KYSn2$W548kEi7BB&F%n(Z|}9c!rdP{$c+E0itop{R{b`534} zO?oFlEjCntC@bd+p{)F7Ls|J%L0S1d24&NG0m|m!4^UP@JPof*+6tNX7VKWfdNn-9 zyc@1}8A3d}Pm905iivJ_W2U|EYEGDOg4={8`5yn>eG_*GCm+f~hcbo3%_^N;rj5gs z^U8S#VWf(;fMtj|B@1TdC_;|j->J-*RW^Gzd)Ig;Af^;$jj$rJbn-PX>zhz!&+^ml zuH^$yAAqyPZE{NIS5z&b-l3x#bX(q_$PFy7gADc|ZX~(Ajdub8ZRPtCHu?S1`8dJ6 z91zKhk;Q_ARXP40>|0)+9|m!7?9ecRWA}Ofe%k-|{)fF@X{{>v_tQT3hewXPdHxxX zoH_d2hxa|8;KW0IbLWD>iYE>n|If=tzA^julgft=TkxBwUzu;yVU+QIwoi83G1i*; zchU}Er8BDM^qV3MjyF3#&PrT#RCqV6G!sUnA{~!EHdJnwJ9JHl31g_E`H$-q;*8|1 zPlTiUsrOIB`Z{N_ED6r{I8#rU;B4lsD8l)Kv+@W>xx6XD83pI=2&WXz>Ii2!9E}|l z_j(%6)(B@CoShL)*RFOqvP3M6<@BUD!8sC6T7+{d9F0E{VR(Da%ZPBs!O4tpE`g&r zm=m$)!08ik!aGbee4tLXZ`vNHlHa^o1-RpCV%a0dv*gkaoRu9o8c9ZD@pelR=k*Sp zw>ofmcOoekZ$%_={?mb@ai=}}JRjbHqg}eAVb1En8Qp<1xdW%P1E(UwVOznHQ41?% zJ~{mSXy;aY_#Az*F3P#R1LwXDoYfsTPj%olb>RFw!ch**mW$^0%8xi^=^dQzL7ue- z_FD8O!D&%CC|H8?8JuF&DZ$C$`dY?`3C@vlnrQF|&S`K~FiuHuMk-7!%$X`qMwqhz z&Z+~#oa^9J92n-@4yOSBFOl;1;MC$jB{~q@XmLB8=5C5*%(gM@PSryO>db_3J5>)EOa`NzGi47WVb0d*Jc;;EM zY!S}ToFvX!1BN7Vh7K)A;tU%wE15G$GjZXRhn=a}w+QEKy@?s(3>q|0Iv?Q--k8K0 za;9v3ILz6@T9Y_K2g-bg!VDfTI6H|mXs~AQ!eIuT$(z#=&Y5S9Pv)FmoWvP+R#h@* z=&~qh$e^K`_Y2)?$lw8*>x*y(H6?M*JZo#fq2j#$Q4J66h}nayiT$MC{6inAo~Y(H z)5TI4+C?Z9W+4=-cJuEZOvK7}u@ok{3pJ*LSY!DgJxYm@yuY+DY^gW?jVv?nBuHqX zaVH_n4cy}7PJ*zUIar?DNs!Qr~jK!7fh#0EA<*`8}k3juFWPx)bXf=)eEY;>Hg`si_M;D_FU!lw^t4d;Py6m zQ51w!M)OKoA`bhT>nyP<-9M9*eA?fh*@g>J)zHzur|8H966OuJ84M$*>sliF?#$1< zJ5@UvXZG(j4i29pswy>pLy#!CLYf5#04kB3JxQ>~IWou@0c=FGC9~O)*$GltNT`6f z0$rNXT!h-D2@r0HevF{q8Ahm;ne(vfnl}J+pQxf*cDM%o4R#bZ)H*sOsQNU_Xo3Md ztmmN`kG?+59@F~rnEApM=|uLVX5(tbo6CI)s-`R~EHiIcPM?itOyHAZ<4YFJDP2^s zsBAtpHJ@+;>|F1@;RQ5l2#>AVkGRb9!%#B{Tbb>86FrIC%L6a3jxe(a31&l;Q) zI=*PX>7hdg4jy2_Yrp9u&3@BAJGzTkL64~;)qd0W2Hutp$u-^^Gx3DXE=Iai%o3=@p3%&o329W z{pK(5?}0n(orrTYP!0}<{^w+BUurYD4$9F6KbJ6P9ALw#m(0t|9GRTnDe$WabH59x z-ZfQvCy~sPgn9eG&rfeK@sH`%#hb!UhyJHZ?^G^aL6}=IZ8&wysq&|p(e;G+$c5`H zz0q9wj41l59D#A3maGjNREXiyoOkWLuIRg15?fv`L|9n68f&T~lv8SV=eJQi#t>Z?{<@HOhAMyJ=zd=cRd?=2>=&g|}kAyIX_OhH@ zJ)^Q@eg$8N)y`!~H^sru9@_d!cXXTfR5IeWyTw+)tgN0foBd)JE;7MFd;84dX?uE> z_Tx}6yF=FdJb$sr7i{m5N2tX19y)WoGTXhbmcj53m9Ll+CJ)S$VDVWwQmZoG2r}{D z)q!Kco51nlQt)OF(_ec#NP4vog7x5f@D}iOumRMven!=`UAa#qmX~IKLZuGsOFQ@| zJF1AX%Bm9H%v7Cb`>ay@&yIVs=%J83KBuz$-B*(L8MT}3d`$e+ek!2KSqw6X6YQPO zbyHVA0F~<>f~u<@fvT&u;AHR#Q0ru#1dG9^z=hz`U=8>Ts5<>Icq_OL{0aCRs5*Qe z{5wef)@m;G1@Lh2B~Ws20+Z`f-Ls_7SzW5Vou1U*6i0QrKUf}VZ;8qbBulu^L1k(i zTL+~zhjfE44PyWA%b1AwKtU$y={L9W2ud;{GF`Imhh}RBWqa4`ipLur88}fl*c{n zzOeq*SY@e9>Bj`So1cHE%*C8Yvz9yNzmccpfUHfu?gx(HoM#$lUnFE+JCE}i_%Mhq zu6-HA1vdL}qAO<4blg|7$1kpDZ8z?N%V@rRkOgYp-NE2Uus0}~9|9(~#eb2m`lvL1 zI+E-0HF(K=pW-P0pYr=jZ~mD>^*Ciw$%4v?g{~&|q3@I7{G5tYP3=`LC&QUXc5K!7 z^%nZ}z+#(O^IzpC=9j^*oS%+kkdey97{S!d$)M_{KUfIj>zlec4Say}(?M*YcLulx z8~{r9S%q)x;$Tp68UiNEzND-CYkPm7gY2hJXM>a4km4wRmxH%Q+R&&aGt0|n7L+cU zZyb+2rP%RE)r{0EBm*_0#g#0QOZ00??CB=NYObc(zPw`>*S0tQNVJPn-RlPPjH&i_ zQZ!GTsh)(xW49yoTOge-lPt>bWlUZjQ(vm&t6G^+tZk%` zN21nXNU?Ob1iv@YRV=8e;(S=v60YdzOHOn?40-tHzFw*B{X?=T=0t0SHacb=7ndKEtoT@bPk)u8}p^~QygfEYDQj1*uC-%g01+Bj(xiN z7mcE%Kl95L*be~s>S8s)*NeqQw|u98z*aTYqBg2hkXIAm^ z56PgI6Pd?59CID=m0Vr`r4KKH(uXE6AKU;=0bd5CAFqHjz>VNl;7>s5%d6l+Aaz>% zIJgPK2lrkFe+Iq*z775q{5|+HP<8QhFu8u&gE+EBYO)>3Bi_KI`c)j2<81K7h#jDQ z6Gq@vf}}W7RI6_T^3bvhQw!qA23StXV!PLKcEC}!Dome%qsmc}_xFRg>d`B;dibtG zpdNmWTlJ8#_3+bJ4 z@F?)FU=g?*oC|&g%AffdTn2su-VL^a-vR#yZUg@g;@f-w08gauJ_Y3;{u4YO{0zJZ z+yl~onf=O3!GCjpJ@_9GyP}7TW>4uZAbROxCu;RRMmJD>P#XAW5W7)J9J8N!7Uj}@ z=Es3OLH5D+u#2_QlNgw+d;N)*!>!c9btLQFU*RS1&#O3+lghS00yKxSEj;=un^ih; z;bLP}a@@rvNYx3+&ZtH1M{}J)beRz8NTkQ{o4wVnPClF#wKKjdShM0Q(h^ofCwiQj z3l~)Jsl7^TNu(<)LOE7>i#hMb?=R z#9TA-OR=xKsyyUWm`HxNkgx((+%2@zw`ZakYO8%OPa%0N;E^D?rNTUqWg+8<$|B(EOImzRf;rQoLHnB)Zt`Mc47)x4Hkme zfxKT;i{Ij10?NlI0=Ixu!M8yC&)VOD)4;bu{7~~PkSoCVIiC(<^E~|V+5;%d3=n zAM;N^?PIQYwpcS#+aIh3^Fdbr)#|;iYru=aC14TwRqzV%YhW>WEvQv+*MWMc>w55E zuoiq0ya9X#yb=5bSO@+Uya~*rK9_=hz?;Ft!DZmlU_E#|cnf$U*Z`giHiBwDw}Q!S z@*(Oio1gSRM{=7~n@=8NDvtE$etx$_$C%D8@rYWjQ3uW90j5) zwUfZ_g5@AOV;*}x3f{r_YVh0OW8i(@_dv-Co$4Te<`2x6syd9sn|bb!LHRV=KfXKo zH&C+wJD6ObjHArEpMJF@*Qffwp-E#P#Zf*Pqj@(6m8SYEpw-F^Em&B-WR4r*4ku)a z<8zE>9>EjFQ)f$fUf`ZMrOE9vHwiom6QaU4LU}?ur;)3MqSbirL0mCMC)McBhU5`w zNyR{O2UVobE34<5R=>%=gKg%U-KlHla*j-FZ3G^gQFn>SDCqKHvTL4@$j@ow=O2=7 zF({6`-K<_@fl~T|K*CgOx7#uV?TbK>DBkS zmi$c}#gSgE<9F4O{4+-vmRv2EQ(ii4 zCTIGLFK*9WU8~%p@~h?`t01*Zp$_QCDUT4Blzt! z9Q=3cOLCqGia!e+0OI@B#=+U(rQjT}7@P~rE|-B%fb+ms@Jdi~QRU!3a6UK`9nC}EF0&6+11n&l`z#o9s;LG6EpvD>3fUV$Skhv3Y2}rrTuYw1GUjzGrymMma z$ZJ69%5`9}{;lms`zMc`>7V?Avy%D&#gSarfQu6Cm40BdnG+wm#4dc53$3(M9I5(t zDW%_77gxG^3zyNQ_0LjR+1sSknDBgR^_x!@z<1>mFLRFHRr%y)kt1HZxf_dw>&J@(iz zui^l zM>2QQC-aS-gyuqKnM(In!0O2tj>}~3{K0^=OupZdc)(K4O?gY#=#3U7=t$C=)s}1i ztL(*4@>uRQ9KLUfTqO_Q$1-~JHYmN>4qgua9+bZP0elpE2Yd_M0qz3d2mb-?1bG(k z{SnLoKLBNi{sb0)yTFUVW^gh1A^260x4w)&&R zNYJ*^hs7Yrt{M9+Q_WabUCsIcZaCYV1!FzaN;d{+nY{Yr!pg-%%;i-sW!H$;`Jt`r zp#D|Inb^Gpy(_Zp`F>s=Jh>KKRoNWFxbC;8L#oybl}!eh1W=jr&37#=QqX=AOL= z!A9^QkU2;1VURg1@4Mg!;3HrfZSGN!v8uNkWDMp#22KNcCdNN4){+{_Tw`!58MM5fd2xggZ~C=!2f_h z26=&}_648|C_l3+sCmwA;24ni#6R(l1=Y772QC2nf!JE_co3W9 zodCWDo(S#)PXdvVcQQ!cyi-7Udbhgv9Pm_7?>?Ua&H%9;wO<7Xf{h?Hr1o}jF!(c& zx2tP+f@guBfoFr-7jP(e5;zPT1d?{`C@>c+0f&QEfnNcC1)dAGg6DxBfg?cKl#yVv zojQ4cyWUrATZinF9;Hz{cR zFjIo&c@@hk@S&$AY(kmw>eM z+AG03K-s#LAkT5VJ3*fFd3S+4AM)-75ATNW1&#;51r~$f2IULg3*H6Z2R;XW2b67F z1-=D70R9<#5KKp39s*AW9|jo%dEW(RfscSUf{%i$z||mrj`tY&Huyb|e#HAeDBp)K zKpJ1?2jE4V{}7xH{s=@y-dd2fyvMe46XxL zg3p3ag3p0(g3p6H!S&!jz!$*%(U=#(zTivX8Q{y{`QR(ybZ{fM2qZ7HUjttSp9VL9 zo59z?_rW*7Pr;vpnLY8v!4pC3aqU3x=io^27ho~C1*`<$1V00R1!~vOt>9tcZ$R0_ zx4>jut3GKox)!#z6v;!(#@614KAoL3N2@prb3IsfB!oHS6HZuIR=K3}Sr$Jim|~X2 z|EhZ)m)*>Rzid%cRu!Z_%Z!4u2_U=UreXq*aE5uJ7uebPrL#&GE$YnJ%G&tGR>rB7 z^T@nzy9=VGKl7EwlR8s z2cS6}J*?avM5kc9-xzw{pgA`GQ2i8haw5Ocj!)lh=J~qqhhG3c4Lly~4xS0_2gbo3 z;1sYYSPt$FJ_5$THDEgU0hj@{fd_!6bB_bTQD84nbF26WwfBGrff~2<1~qOw1SH?y zp`g}c^#L{RI1H=-4+mM>e5^gI$ z;yiinw&Ezvze%&YV_WGki=y;X9RD}XCE}LMG%A+E%}v`1wVrhLm9ZD$&&wsSeCwsQrjwlf_p1dG90AbxP|jo=J$JvbA51Dpk>k#;GlXXUd& zwbMDEp0&&cZwKdrdPa98_$P1ys5y^?U^Y5m0jlj>1?GW^z;A+;;GJL<_y|}Ht^=HJ^DMcp-Q_m=7X^+Nt0T;9T%VkmrA19asrpUSRu%9SSGmz4d!%#yB&%on zCHLKa9NG3~l4KPaqyL?_W*XrcadAT{yr93f!b{POhWfRz{FL`%eqs5oLoO=s^PuFn z9+doE1m}S-fhubgm@L0#@D*1X(vd8`SKuW-KlJ0=#I>uBR4g4<*UWU-|CQ|QLqsDx zZfGSLxH?vnDV`}BNy^5B<)|_g^9#%Im&ix5_%$dwvM;}p<2LX{&VLK4%)bMZ<@g}{ zp8S*@9g?HcR(jII_xL40r&An-(VC*yI_jZ@>%JtFbc$mi8f{byqmnE&8fqlTO{`pV zpz_E)8*QqKRG*Zmi*}J`iZ>Ok!b;8s{QN^@EarzR?~UfC-LGxa4uDq zRh5?-_u(Yh>(B9@UQP@8>N&>!zLxU~51}iqHk(sxs4x~*1w}?xl#C4c0GEud;oy+WlRVCKlNkwN^>ZoA@P$ml1L|J^^NU&Wl{@yl@hgL~Nd zkfXpH_&MMS;4xqscr3UOJPv#U}qcrkbmI2X(X zd0)XB4lW130v&_p$3W%?YTp3I zg541HIPh@r0x%c65aijgHy)e{=7V#=3E*OIBFJ+&uK?sZnRgM$b1-ib$nz&}GWZTS z1@yWzX9a5h4~ z3CK9jn*qwc%mkBdme!!=QK!B!Pwpf1E==z%Zr)_twWU;^Z%r?ic_G7C%n`^oR4di7gW_<4ZP#SUg=1}IP-NmxzWsf_X zXBw%7I@MHC@CKB|HoC=PyFHF9jz(ExElKQ{v%_a8*Rsi)Gf+Cgdr_NQ2)!32d$h%! z&$xy*Fp(B--nHEZ`iJCR%!x$4*)gxCPE{8*pt_IiK>4RE_^6!^-T+<;-Uv2;b>Q9L zP2dCIQt*4=&EQ(_>!8wJ2L2YT2R{IpgP($p;9&A`D>xqf1~?5|0ZLcC3ElVI`4>*Al_C9h9c9F_kd@VVZKrK1b|=lP|)X2)I% z{?3h3MWvqNNHL0+S|}f?R;y@!pE=ib7du^T*;PcHtWNMX$?BD_C3Y5HYUFwtlc2AI zp?3(Dg|e!07IS_eKh>v>HONq9e*#oqp9IH%%w5)&fX{%c>mP%Uf_z)4b_4hKWd8@Br@f0@w?D36xx$z~s8x556SQncY~&wd6S$#Zi8{f{R1GPU3y}l0{3b z{V;|@>8CiTtqx9(7=Cq`b)uRGOfi)q10%`%tzYp}OF>_+rYC=~Hgsd_&IErCYF+R<;3{wjD4DzmYOjO$!S}$O;3wb*;D5kBfs)TIFj?lj z>){m&ffv6-W8xJrZw8MCQRJ1yP~v1}Toc68fP?({Coc?z@2H`(;;a z<5AzcJQlN7!HdTwhSP`pWQap+O{}a_i<_~~PG8CRx~dvzTFH7C3b4SOJ>|}916||J zY)`P(ozWBM?lSp`xTtK-T-wF7;a~Y$*&V|S5>$=}-l$Xv<%-^MvLLjqkpz$qBf(QZ&9R*do(G-=E(T8rZvoE$HP1>2h0VvE_yhqHuM!Rxn0(hzX8akGh3*&k;9Xo)hLeI<+b3)LARu5HEcyZ zt90@Bk{PV4pB1u(x<0ggt zqAej&NS4K%AIfi|;}=m+l5Ytp{hk4y3eE&)gL6RjqkI+6yth*Z-o^Pm@GuK_25i$VEEOF%sv{wlZxycU!W z@NL`=W6g&dQl8$C|rrcP7(stf4A1p>n=*Sl2v-u~l_TpM3rD`{JI+$3IlQVor|Yx5qJW zM|LXnJ)oR`Z-HaLZ-djod%?xveW1p(-vRZ`?EPRn_yE|0dpror|9J=;0zM3CJo{a6 zHuwmrXAh5pdJeD}WX~b*G4Lng_dq@G|33I@a1Ho2_ybUDn|=r$1pWv-7knHX2R;E# z1fK-8HuNd*X7Fk73Gi7^_4yo_Yjb?hH1V=+JJLpeVkn~e1Eui$|mtZ0ID{vOL z6;xWk25$p@13m=41-=Px1Ahhn7L*Ks2PW6c2ct9J#kKX6SmC3V*=a>75mi*`T2a;e&6ypFbQ)B>ot2Z>&f^Bu znPsTMaSXev@hPtANW2&$zx!^(v;QQIVn|t;<(B3B30X@Kv;6K2>g6&{8?(->_4gM1x3bJ0K_8f2zsQUO9m|Vwk_YA2&{VO~PH}{)*smS63gyB*4Ym@O*c`)FdQfAg zgYRVJS)xN%qM@c|6ZP93^%~h{c~vN*Dq}I{a;NWb{EYo=y&VMhhIcS16=pq*S$EnS zRJ|PnR)B|snwMamjOm9D2jAeF^)jX(?hC3ujs*3rmT&NyJ$;S_RbM%vZ1*vsWPL1{ zTz{G;9Y7kL)!%8vOMcFzII2HA=Y3oSF^A?GMweAql$R{=XX}-4ilbw{n%ITejYc#V zY{yZ4^~!1*Pl*I)aI4aC@@(6uZNxhBJv!^(`EHZ#Y*RdeikexS`7PLPoM2ov?zbp$ zKVN_BW(!+s(A5N(V*`YIvt6NbOJ2pCAI@*P@OR*4U>kTjsJZhiz$}#qRQ;EL$vUO?b)?sR+fB9!CvrX6XHy)>qZMrG zM5js$N~+i+<%>2FRGXFUcdC>^w-iE_A#k$A$WBD5FxFhzmuk&SJkT_!iM>iy^)nZi zv)U=Fe6~O7#JB5w?4UfTw<#lMGv}97SWjR5!6ttGAvqOu!t*BW&25gGr~}DvIjDBr z2uhc31*J>h0HsTOdCut4H$myrZJ>1Nc2Iu%O7LXxPEhv$9#H=Kw?K`hzYQ(|?*;D! z?*qRNeg~A!+z-mvTLu0ed=P8~9|Bdc4};0N@*nu8k_X?#O4gNpt|!l-DUQnf8Tf1` zx)N3urJv&XQfBB&Xi5(Ej%td`M#5ObLVbxOdDUOh8x&AA$skt*t6~>L16>=f0 z(aDBktW07(iaE93i%OzXt13C}%x)1NHF8PKO0q}tO?|yuP+>fu6uaap)F!8WOYBr$ z!VwBg)!-YQ*huSP7nw9W{0pgY;FHOq zNVt)HQLw|$j09o#JAh#taq1ZTx}Fv zwl;7xl<~Fhy1%t_9#x~mf0@Ic?`Qf0sd^dJqa%2kL%Lq%BI$zau^2pwpZqx;L(mb` z?N>lm$GM<%{XB3ymjrYMd07SNubs$Oa_O6Q^3o>LU0LqG02{Y-X);srHeq#OHTzgFMS!< z1Wp4r?|eD96TAZaH#i;CyX?i_Ag}}+0?q&@fiuA=;4H8hECox!IiTKkp9`uTlz|^n z?wPC)$o6_<9ik4;8$W%*#3|FqOe~x*no+jpc7ba-ec;^6Ag&vn$?=Qhlg3S%I(^)P zF%#J_$6iSbU%6z&qzU6DobMgxE_M%Jj8B?0aT2}J0im@x$)Be?h=|(`;_0n-e!+P1 zRX}1{j@Q-aO=dZ?4c5)E;sujUkrXw}@y3ss5--A0?2+{jtE*I`kt*bfNmHkfJU`%f z4fDq+=NVbYs#`M0h|#0tqlq_ZbbOMz>CGC@dZQ+epEzmyr1)raQ}Mbu-uaW_@d>Qv z>X9XGSH~SWzA(;kz%nJu5#tNSj+j1b?1%{y;^VmzzUO!)Jbm)mabu=n;-gng^6pwR zr<9JHbP~Wa5PBlP8TbmAKs8Rth(2V!_l1Yutp%@kvvR0xFbhWz_hI6XG~! zJ+j`%fUEu{$H&JH6l`GNB0#?-=2%Tf%DXpRA z{20!!nK`#a=^n)ObvEoM4be2BQXDNx<7yNP9 z?|<>xVT?Bo|D}Snb4Ohs`&ZX9e}8WGjSpVK+<@W#?iVY*_Pc@$K1-kVw{!aS|J?`n zJ)+DmHy?A?@QY8m;>4FSUn{=<)(upv))eeV|KW`~XIjCcg>x2_%+DE9R$f|}bJF6W zXPrFl5+2Geyrwee!m_H$X#)pLD_bzLyn0qC^^ zkyFY1k_BbuW!2Nhoo;XUPQTI_ z6**r4$|`bnJ|w4q&J~6MUkrOvX-|f7^(#4FI$}=0L4!@AXAjCb&7_PPe8f*aG7{$Ej*97RdlMsF@6{VB zrnf51(}Ny*7tK)Vdh5(kF>f`L*6*ZyYaA8x_5|T5fD3mo)IBCItiUl8_jOdvn}i6p z0xR9S*ikX>ZYae_*KDMq^Yu%pN` z!jtdX!)tR?y4UWgm{*5Tus_83x}##=7AVC?_qIAJ=Isc0I|E*Oz}pk>wjiE+&E5J^ zL{aHpj-z7UwNTi2c(sng)RT1^F2hkVZ!Oe)CY3#oBEw`;yqNcGC|m_nx!+OLCCTb4 zb?K;>cPfGO20{;Sv7^$xYaJEy{sx6tM~qJ$74r&UC`P(B#ZhPul=iUh;SI^QRJu3R zQ8Dj9DE^4?h@)cOG%TlLpnr~{G zc^d=XrhvEpSf0)ku7}t2I7_8_8IFp1>!A=FsWdq%=6xE3`&SSyyPqGokE3E<-{X1S zZ&IG?sC2K~QPc+%q9)~Cj*58$Pp~o4y)zw!mIS0sT1UmaM~8V{j>*CI9YrmiV`ESYj*5B9b6G25QrYIHbZ@(( zV%{HzGlOPQX?9f1tN4nIk?vJFD(3Az*L)e3wlMrWOQm~xj*5AYL(y2!tEU|m^ELPZ66*(&AJq-1@NoBXA(!DlE#k~7RF@tDgJme@^Jd|S4;vE(9vPZMh z#-vj0D0~n{#k`qu<{wRrIgY|AL-pyRR9WF?VFWtF4w zEgTi|4j*sl)zZDA9ECPPDF)i)s2C4hS%+j&8SkicufS3C_E0CA7*9D0%O8Z>9fYfz zz-n}pN|U3~y^W5-Lz&2WPLs+`N5#A~1vUol$Wdt6B-XN7 zJ-n@s!csdb<_)++Uv8Ephd2rk59(RNd)QGiFQ?l4|l4g@P@D8odT1}EJxuDJ1XX#Je}3KCY941g+42OgZCQXG462`;~qy5 zW2RPom>7;?#4^jqz*;y8jR<(x2E4hYp4Vhje#%kl-a1Fcyos~*oI)v2c2vykKgY&M z_s(!s%*zdU=LNhA1Kz}dH!I-H4R~Y9cxTt#;{r#~Ye1c8c+HNAc~j?UpDyL)a!19y zN~p69?;1zNyl+4aHN4v$74yCaHO%mS=%|?YD%3fK_lBcl-n&q_hWAHD#k_w*4L7{5 zS6V7&)-7J)_3nMlh<|-+b-eh(J9}jOp>)-cNAw`vUXQzHlr5OXtj4rir8BDMBu3$< zSInB>ee&@~EKo^&z@Bs&oSToOgO;$oNu~CK&AOiW=&!vN`Vg&&Z#O-+-vCs27S|?y z@X^MDZv)vdi4V7trw$(jBMghc%tzAr7?HV8hmYg87Ou0z`!6>CL1l(7kZ!7l`7WL0h1EO} z?68=&BTx2wf)V^H`$6VgBtBRktytKHlEa>sZj-CN~OJD!O_-%^cX5+Ut-vBYsKKriQm{uR(-B8$blDiqFt*^!R zC}_+64e>p7ON}KWZ|T{<5lT%X^K5yCyZpcNTE*qEHGMpY+O% z@A{-yR$9M{MD8?XLwt9EU!ImnIcxai<*#hkVdT-LQ+aeTqA>sb_`W<;c*)~8AoB34 zdkk)Be%+j8^4jKWaaDoWke_jpi%H?y>T0riHK3s|JGZdyT1wbfw~G>HH{@sL=4W4b z_H#y}zYI$>We#>rqFOdZ4tBR((h$!?Oh_z$Pu+$t_4#`m3isp|W?w(NG2U9xn7<1F z?U~dN&+uiC`AM%+;;qOBDT&-=$%g!%eqJ+Lo*djHAsP8(|2Oh^#fZeo=NWVI|Fe8X zcP5{c=XFJ=P@$lX(Dv4OUPECk;_B&(E2HIAD-2&>`gJOgl{8GFnmt~x<+WTjx|-V<--TxEbefSU zYU<{b-=0v6a~cbG(DJq?w>+a%I}%E@-6>VPJ&W`fq|+TT9fqo_QeG$sB* zd7izu)-EE?mZF3?iZrg)8br7=)VTIVgij@8VA@ySzUk9Wwf>zHn;PHQtW^r3mMbgM zSh$fI+FXDpCz^C-V__5AP1IW(>Jc`YnGNyHx$#ZaJsa{j=H@q5os+^2rPS;l%E=C! zlO4^C7^K(Y+jW|dTEvLA)eLS#*QI<(cAG5h%8h4KXEo%v=H_Qs?@vOqZ!KM0*4Nc+ zr#Flnn*-dhL+j(tOa$9Y3TbsWJ;rc=~uJ*c@XI=6dtn-$zx#`q8 z?@lzrn`E{#6OApyHMYXtz9Gp7_j0DIGyjafowRTI7Hw}YQ7s|0LZZgFRFCj0=tS#I zq+Ng1T#3#6o7eR}y>&v5?^gvG4BAXua~Y}1GSyJ=yA`r!Kg@D{KHkCZ`ofI58u|?5 z5vae+xgPFPUJ=c!*)nJgH>65L=q(U+aJ~#h#+Ix(d z&1@*l$SusgZm%uOF6CyI&CRZsMRflC^D|7xy`ur!YOWa9XeWKP+zmSRc5@vCYUfth zV|%t^d$!St+rz43yr1m}?`NC!ez5Z{(To;s&(37~yN~@@wADXPK@e{3op%GfE$pl< zoAV#aD2VFH_Jn1iQ&Q{MLleo3Z?BounBR6$qbZNN_L z%(UlSbr;U#+4h{a&`0O_eS+}v*!?CJ^4L?}f4ely*w2Re_U7qov7yFRAKzM6vo*C1 zOqrZDskS)Vnlm9(PmQ=v(H=(5!yZZ(-yKk`qT0p7DRx}rGt7AdZ_9ie}LrinOT`=1%Gjwa1J44K!EjOr|t1@W5CV4VR zHBc>BCTwtKoV2p22r4F{AwOFj4J@cSs)ks7#L@VoYv3I^{mI!k`x+fzy^Caw{_S-a z6}8U~Nb4d)s-5BC)~-YYjC9RAYvwl6d#F!J?wT9pI|}Gur~wM=##NF{T0itTXh?N6 zJG`o6I|;{NEwDger>hTI-IwuyHcPuVQ%tmab8~YyFkvpz>e{>Py#upJNo}%8ZEF6G zl8Q8xE#Z{wWHZ^+{3-sP>mw7MNW9$)mD`PV+|jGCkt_?HfBv5O{5INO zuOAg|Ylv@c%ve#M&p>3)hJSX)AlL0U`q`sNqyHv4%!ce0zxuH5y)IS#<#n_rypBE2 z>%bBAYu61+aog(gv$|AwZRy^81zvxL97lRIa{Qf0jw7nse*HCA`~HP{>I-Ekdi^NA zts#GFWA+X8g{@QsL+JkTJs5n<{f1AwHx%xwd++FVCigEhvTDe_rD0R*{QKkH6#4Jo zyqH`EMabWqBCPzpA}nYq+>TG!zp%YqCk5HFp}o6&ig%BG&Sd^gx~Yb=8yepD)vmf7 zoeMwIxhI5=X>-EAI91LQj%#~v9N|A0$$4a;(|-Ne=tGQ*+q+53ZS=Lhew4qhp>S(s z+AXF>-hv-w6lxd3Hwr|K_eOy}w*sod6)=vIsOMsRT4O)#{KQ`SUlDuTGA-Ir+d64B zZ8ZZMaT{bKX&;f!$@qV}t9#LHR;J5A_fcO=zttwQgsJS%b`kA&NBXUC1oH4M%l{n`a1ali85JGdF(+ zGArDkTe!`a*?uiAw%ihtnyKH;=jT$|%V>FDR(V7HLx=g6P(=;S~J2sd3zcOPfCKRn(mr-p9R8-DIpQZ5>bIl$R9(cOep@3C~{kv^`-@ zooU66`MqjJ^IW6&L5FGNG2Hm1spfA}x^LD$kjF)yn`wpwR3-kxYfQ4Q+VsONU_CsNEkWokgvSh!v7i{6Yua%2|HxMa9n(4sJ&WNXrZNrR#2fJtRQ?x6wGPB_s46Qv3dn2i49?Av%LI-8@f zN`&qE(x(4%DoUTTpb*`vq&#U=ngHlth4N(YSGCtevd9!qvo<0_`MM~@K3$b!pKeOA zPukv(RHBoC%A=bfEp3!OFH}NK-PdIaVbIg{aI@VX9B_btz+!9SCYNzzrB>6&WxVwgm&h zX1%K{5r=P>N&0)jH{1gwGkil6B78#=qSG5D=6*Ap2iqHV@3r(U)Av!zLlUK&F4EqA ziYc(UW(zz@*KAgXnzAS2Rh}5ctK>ljVi+ohiC1Za`1u*60lR9;Xuhpuwyriwq|TPT zmO5LD67f1@Ymup_&(Bu4qMrSiobNW-{4dj9BmQ=?cJeU&1ry@I?7_Z`+M^R5A0V`F zTaW=rvdZ1Qa4tGDVbZK|TsT2Jqs|W|-)UT(+2h?cm)bGHt`1`aJv3t|O=Hv3*bKiB zWHM{grTSR;fhnHHhQ_5WD^rbroc}QTVk1zd58d=40yfi&`EGjAcDtB@?AK`gR{n`z zksfldeaS7Fi`YUHBB3qKzci*&E~GE;FY2f5+>MRDx%oEP?vUus6Y{pMHG7>MJAY%7 z+tfVDb_ER=Wz-k$q6QnrX4dC#cTTD4=u9t*DRMKBp)OVu>~+)SMmaN~^dfvG-ELb= zIfDU)x=M#0t|;vmj2qMHTB?8#YI^OWv>U|Kl#1rN2w$!6X)ACS({4@pl%ea28oF-s zy1S)L%0UNgoXpI8?l)EcrfpF2IKY?2cg*f}x^dm^|NF+#U)}3T;*F}xjaGIWn|q)b zCNVt21EeD#_qt-!$GtA~Z{zYHDcU?BJLO@j@{lE8+sJgPTvQi=u%QrJo3-ZFiuq;I zPY5?M>T0VQ84}5t6WI?`koGSp6+78xrP9>=5gAp=N~ z>iiuIg{yRK?9yhXvr+niMv|CIwn$@UcNZ>9)zu>1-Zf^Q=PnrCGTDq=a92$s_-Dr8 zQM0~kzqEEpYPx0*xdrOoT+KQU%i!jAgUjk{ak<|Ezg;QF#Y z+6}(xHH_}QTj}fWX`ilY~n_*zWJVi5i$FDdh=cX<_+URF>RLKe9ynRpI;L*a`DX__Sz}& zEs?UQ>=Nea?mJD+$)i}vJZtm;JIzhsd`}!{(dgbg=XJAdRsvrJMZGss1%*4zKw*ce zf`d`DhVe^xU*uOqTFW2mYVP$?j#yGQj@4=$t8L?0-TWtHXUvZk_LZAZ+YE%Yv)+y& zv-}e9Ow?y%5;F~(`YO!!xqaxJ<-a%NZwVR8J~Ea&V4IbLkyb)?ozz17dPX*g#VJ3k z>{kW+@!iE&cV4u?_ak;ayYo+b{%ZjfN#lNihYEk?PTU1(&v&K|nrnQ8$txVIvLU#FK@%Wb&f6A=_ z(qfFQW--QAo`B>QuJ6^T{bqQC){wt~(AMqK(~*Ywa-G9;M)#?}z(Sd1i)4+njO{kv zxc(Ixb7u3v>D15#a+swY+CD$HV1hVvZi*9$7EZug-qZ<%!^vLQ{>LOmCX1{DjVu$% zn+rzB{Ogb_b9JqfTHE~Ezh&&rI;xNaS%#2ijD4DKWmp@#wSM%<)|R(TTf|I+Y-g)( zqP!)UbL<}W++0-&ojv#C8k=k`Zq~(UKXK)zZVgjqx-4yR(#p}L(URq=RcIL5y)wA?x%Mx0~G8e5M$G1ky4yM^QOlfSL zYliMdp+}Med*?2GA4Ar-@Bw?=j*#93Rt++bl6y$t+{aw(Fz5pn1w44 zl6C&J`LzoNA%^V<4c^Zq7s-tJJGE{7E81WpzPUq}y8D-0SBNSRf{LRW;u}q0NLyE5 z81LHx4NNqIr)Bo-~X^nWa(62+b1yhk)tlMFefzkQDnMEI!fj~ zG%0JI5zs}_QReK!Y{+t{#B!?=%bPFk>35WSJDgdj_{(hkWzFftkIsgysjFGjeeY*O zZc=hL+2n3&=CeQQcQqTb@>=s0(M*UmYGH%xE)!iNEzxzH*jInpAxae+>JSqhr|H9F zN#b`X9RKLZT)L~o;a^t#UQztZir+1Ye_8PrZuO4lrZ*c6-fR{iuj$pOu~b9;<_42t zB3LEf!sP~&Z?Vk0%6g@S87Q(nHk8SN8+Di*VaKNGYEj(el7FUqH#~QN(qzelPP*W( z$}-!c`$;9@x*$e6{7aQUB5;u%#u>?Wl2kbGTHTj_pPy(r2KDIt9Fsi4DT=QUkALA* z%mq^irZ!CA#6NTOUPa?yI9gH=Q?aX>&of=RS%(#>$-0`&-A$L?-8Zz1-!?OT+m&+s zwo7+X_7fe0F+6tsX0EQ)RlifQV?Wc+nTyEO@3j5?-uA8Ls;Va`>V|i_VqwkIO^LYN zE->Sx?NxKzXs>NM{KS2uS51eXxNY=eC{yOPwmc;0O52s*z{HhGx-7e)p>+omca8Mw z*7Zr;HF7Z_CUeioHR}!}ZfUdYhN>Ih>&j@$TvXc$>L%t4=g1Hzf zXw+9QS5w?}!;U~mGw`|)mLb-)VxM_-x_jn)Eq}2u+^l7AQWgtC=mK8)*Uv~yzY&K zTh03u{xhTcrCKMIu&DW)&ERCSX@>`6U>ioS+*RPWML9h$C<1=Z-gZ*8>Q!oOuTtAQ z8^ZcMF2~sG3|iDy`7Ati@P!9E(`U=?F+!mBnUQpX<@dO%>!v|8LeN|Q<5_<$pld^6 zU!R?WJESr<h`g1hu_f1fIv+?&fV{dZv=}ewga0IYay&pofL$NJ>Lx)4+Hom(;eiJ7sJ#ga|lF9nx`$y3C$ri44mlYyE3tSS=5<8hO&_JKQ-ux^sT3YAF%=MhnV#v{tl@h1&f9g#F$ATMZdS4!AN z(^f%tHvg6f37tOAPdQx>UAu9Qdl12+tk+qKvT4y?D{6Gr`$eP^^`_c+v5v{zz4iCE zN$=TUvUB zFTgM^Jvwh5Aq2C9J)6r=%*Mh^2q1W$meCF^mL~{(m4+;Sm&U@){xgR(UfS^UL*YU% z_eKj>Q`~vMnp|OnTbhFLZ)$uKivyb6qkl?DcEf{_#9JO2E#J_>O=mO7R1Wpmhjg>e zLs`dX9*LPL_u!P3!}VD$8CnmYh_=4Ngq~@SWB(WJk@lMtj9B`a5lcUR#6tT_IacYn z4`Y>RD;>$BQavTx_f{5dt^cH1?As%lXe)hAtu(TT(6!RN?VX~n^h&i-)NdZInDcH* zBH?Vc(Y;MG+D6R_mb~xct3gDKBhN1VHfr9Z*ocZnSBxfJdkor#QRUqo+NkBEXrumx zq&AvRQrAZFH=*3YvaspZ^;ct5h< z7isxsJxDUUKEBSG10G56N?BLTLFkSR@pT={f#x$VGP4S)R->ov{q`tBdu)dGwDeI8 z^^|SP)F2MKnk|zWtQxiHGhgu~)9)XoPr7E=a%R3vscuumw=AXN%c)FYJoT+Ef!C8?uMW9RZ^ATA;Z}fTZb7a>aSqZndT&5h6@>Km} zF>8=PsHx`E3Ph*MK`3vq?3rZeUn`3D!E$%Zsm(F+yP;KkUp&Ci&Tq{X<*Ti+ouho0 zB`aq`rnq=YX(hu4AuNJUAcVn>QTOh`=W%#yM%-`AyLicCZWtORpU_n zu2rM>->vE^{70DtWZM5ietis5}GDvqe6!AQN-zMOEp2J zI%?_Fuu`<9s0`6yF6Ek}dNuA(@fsU7n7XKOWd$(FUdNsU>)JBwUeFb`S#2;ua#yNU z*LH3Bt{aAN!3^MXP06^hys>eXl5AM1lu1(Y3mPI4%WPb!Fm)ey>-9|6`lY8rH#U}v z^AVh^`jsb%vvjsNyW#Y#Z|n!nvJ(>)A4!hgO3B3+6DH@BrHbY*E|q+IahZ!s!Ch>W zoP4qMZ2k=sK@H~h?)sHETzNpkV<`5Ju%S_`i;U9Gt%cEO=Jx#iVpy~7d)BT+pdw?5 z(9o#=2=-b4CoK~ZD8K$)GyNO(g_(3ivG(bPqlwVasQ=L$N(LQn*av3P4aM508|D$A zp;7;%Hw?>_N>+h=L8UcDswAy3QVD4dDJRSG|D zTB;#F{Y71Co_d9tlWE9$I9X@&%~q>hp4HdLCY}=8d*toPq~5yjdUKd1+(# ze)aK9{+>Sh$6xH7?y9uKR3Oh_Y_BaY~o})E5$u zd6_nQvLpOLa%){pYwBT4%CgyEjH*|gpV%i}y!)?B5~6Q4USGv)uDqzYiMMmji;7KT zCfF1wwDZ9AV{p{Xi=%tOFOD{aUK}+GbVDy{1uwn^gTsuL$C|$;^T8up*lLT|+N{~Fd0m)I3(J-Vopv9SRBl;HxkYrM<*Okzz`gElLG#X< z3HFWrHcW8zrN_FOHt*U)@X~V&GinahmPPDq73X!*Od9dC%5XawR=i-`p4svMXA$vO z`LGK5ztVT>;8}sSH-8@j2T;LD0L!cWd7ScZzS6N*+aKH7N6Y+5Y?EqAW8EJ(Y zuX*QvZ`I2#;kMG+(!9hB;E@(a2Wh1mBd64-&61XxdDTn!gH0;9iKLR*Gv#bp%2YNf zl}$D;o0|V@EmeFCrsOHKC$LU<37PP=hIz7QN8>U1g}RN~`D<%X zPrTjVShyBLwvIdP!l>_EQ_W=sf|wGrQf_n?CjNZMdWC z`r>O24EdQ2h1>ivJ=u|fE-rWh&rXK+plX_b=T?mFnSm4mUIFXsr9W}G5 zb+$a<)q-ti%Y!Y6m#rhaK5VTy2jx+ptF0V%8f82|E6rVJCDL_asAD+qnJrJZ)KeB& zX47Bw*|+{GD&K{e0t8?-a*_EDN{N-vP?w>-o7&W6WSXrIGjj{uule@Vcu5bl zla1N=at_i9XoRMM{pxee+^^%su3(cbbP=})Mw9a*ncH*W*$PIxeGQ`@OpejiNeq?! zx)WLHN<7kh*`}%6`5Sp9`Us|g+Sy-WSbk=WiShCm$B;03Eq&iup$zZ3GIP6AaUn>D zn{04JU|X&5?bUGwMGEeDs&W~==iW)ezbCIXN5!U%uEKc;x<*=EJ7I^#Giyv%qrozg z@({{u;$`G7>2F2d2kTM>&6c*QZBjzYK?m;dofvdb8HwH|GHKdYGeXPLlAI^T)Ar3? zyZxq_c-p18x1D~?1kWlmT7DSu5ls91|JZvM=qjq~kADI&#G5FI21P}UiinDsggnJ+ zc!Y;05W_=MG=wBTFeEX#K~T_OK*X39t?yRFH@;eYRa&*8V(~3Ls;Fqu(v}!%QPE;W z{eSj8GjnI=-axSZ|JVAj^_!K+{?4Ag_nfo$dCi%bb9KG0aDvpQ?vE<{wNyTA@ia~* zm&u-7(vq;W)()1sk@5dlmb#Gzx3)^tD4#QJA6l{_oc{;uxLA+%L}&H10R)joZ@Yar zENyO#rQgz|@r=|q&*;W^4W2f8eqsUk>1B%R5Ic_89EGg3a%$$IvTVz; zZi%{Vf%km*bSIUPL-H=-5ozguhU{Z9&fEHb|el(K>(FKf>k!Y6&Zhba;Voc%K z6shdK!m(-L`BE^M;8^qtg|KCQ;@CwmS%hU61trotI(I`U?wCdzd0mR7AIi>?a#^)C z(Obg%Nmu9;(ay!PsEcz%)pN&_gS4mGgLwO@vwZHir|p5%T4_+U);9ew<)n?c+ihvM4VDQ!;q{{~_SO5BG>%f7uArZMs~(wg zp=7+%Mag()VX42#h)mOXnv9LUCS!w4?UHYrC7j`O0Ns6><++cM>L$16PFA^jQ=6%tI3TmVGgWS? z-6gNMJ(s1^JZc*vq4D+5EXXG744bJ{X>|QFZ;|^y--PFeg-z`|_LrW-X{PNIa_9NZ z@srYePFk-Wh=PVI`gSgVbbq zP?sVPPPe-ca40=yqI{IxSvy6qyVvwj)_p`>m^F-Fdzoc{Y+GF5#aW}5MlsjUI_u9- zOwZ(+Z^XX6cl$DO);{SmDYZvykJD?+KGNY7(r~@#B%Cq)>X;I1JrYmFl!#1F=@;-@ zS-29niR@~w@R*~Y(lK2MChw{_zG^R8>vmP`k$JB8E-E2extpxeGwNGBZW~PBD=oKc zYFW{$$WlAH*sxi&dg!E83nxeJ6lK*wSBXK{W}OLP4ZH`Xh25evAzOw{T4`EXCVN=7 zauGVx<;r?{k#f;_ldPZSy7*_8E+-6wlgeyM;5l6aXtOVA&e3n?1F|CbfX4{ANf zo@SlNeQ;sqdZOpiGdlG8AO26oP1Kuu=pvR;~dV-4{Sc;|-9} zcn2guzmj0R4>B6xf|kNdv(kDw8i#?5#!(=-8BeeVf{ey3AajjpKqi-ebv)i{A|HR5{LTQa)3bFTqtOIhxuA`zaWTkPz6-Qe z)3O0%qW>+(_~jTH2xBD^l&ZS9ppVRTLB`63Amfb(LB_kGBz{$0Esq5mD-%HbsqPfe z$BNDcnL7BAEBCf5w*mAQmHWt*`yOPj);HO)d?d(NJ_fW&H3or<<;ftEw^c5>a34o^ z5omwaxE%C}B6%;sC9mqtcFOD}}D*^pnQ*{H#P7CM&)wl=r4@D1vjP84`+$XNw-$7ecuG5uEB0J_9 z2fJuI$Xsoai`Ie6b>9R@kD6e;3+hnxA;|dPJCLy#B4bNAn`Vsw8G99=NpYgv>Z1EV z#xL)I%r!m%^;OG%2Ysff6J+w1PPUEQaUdgiBB)d4vOz{}BFLoWI#9c&laCib z2WjeG25nXJ2IyH$!9JWaatDHpTtCP^RqhCoksAgw`JD_bw@!GuyJN6z1@rS+NLH?!aNswI|K_&%XfJ_R$1@VW*50Gt& z5)N@v&>Lh@a0qA_XVa|HKt^{W$mpI0`a*Tj1DUJ++LgPnYyCjRYbSt=m6JgxmluFc&07Xq zsHu7wWb%7dx^uM?KxCdAWr4m?lm{~9suE;UH3wwm8bSZIMB_q`k-Gt8Qt$}KXgmcn z8qb1uSfcSKkkNSm2+JBDC%n%=Mq>xaXnYU)RyBGY>1Yf9O;L@1fsAhaQI77uAfvlK z=s&947xXMB&AJnGzM`)|a}?$Ew=8)HBEh-?WK!@ThynobVbFJqeg`sEK6T}`x^iED zcBdGwundsjDGAX?sWGvqUl0~2CFG0rg&4Zl$ZW!$3H~vH?zlVX0m4P5*5|EZcP*1g21Tyw6aOEy`CplJzfzmaXqd>jX%IP3uqyYEq$pd{6p2QnHr zf=tfe1eu=cZ=ia$l6*j(??LHmUq-SeDwThZSOBLM@GFJWwGFG;M+Vt!XAfs`> z&zzLzfUeN9AAwAo{{cDzUV^n1l&op~0%X#B^eK+qi6A4F4cbTL3P47#+Lfz!<-(wS zRc^j3CqG|m{QMZmq~MPrWBGYdZ`F7aWGsIPx=+)bc&ekZAINAN2$GKz60Ck8qj56G z__-NmJhTjCJhTdAMmHaTjGzAnGJf8t(DB+qAmit8AY)}Z$XK}+Wc+*w$oTm;Ad|PJ zUGx^ncziR+uo5&yQ!o#-L{U4)jBf4#U8uY#K=Ty61Tqoq1er2q6*;Jni)uh- zT=EQPq3Z58$|+4Jx~SMiXM_4``l?+t$3^o&hw9lYLFcHw>p_Pp?^mGbmG>N|M$s!E zWA9xTee9yoK!>aDcOYZ0*J#=%6gS4<^#K{**MMw4gN&cIfad6RLt`C}9|$t3 zKgvaeT$B$wN;SrUOzLNXYBYUwK_;b3Ky#IME$9VB4}(m3c@eZu)BG0b7)9@a`m5!Q zpyyO0;WW#-NYQ?v1&WRUU96}YG)>Vm&{9QrfsEzffQ;owK}W0Q)gWWJ>~yEiSqd^5 zSAzy(CBeELG(a_e1u`1Xg2H-@jUc1(caYKO1RbLq+dxKRpJJy53$Cxd(VN6)fB7)4ODxtf{eW%T)D&&M{XZMDz_iV$PEDH8WqNbUUxWUf1CoFkVDGIB#fC#YN@$jCLi zatmC!MWDedceyLK3S^?c7BoxK_cmy{qD`P*DB6F#Wi3{e3#wG~Fz8Z6&w-j1{TcMQ zqRpT(z1o*9+PBoQ?$EPGftD*e5p;#3p&;Xz(Jq<=s?f8GL9L3`fQ;AP0~xP<0y>_v zwD+JB^}3xPwqEkV?P*eu`rK0mdCM{u*@ka!GQDXV$fW8ikV(sW7kvRTsXF~k$MPi5iE8C+kUT?5u*yNtYChUr zx$9iHn?dsP0twb_uG}-At5oB4(D{n~;-UjcT)XlHgXSn2<)RBgCYPM z8towCq1CS3T37BRP=U(5?#g`!GIeIZvmDEZfsEy&KqsljK#;Lq0=isNH3MYI?!}-M z1rBSUv@0ERO*FOf|-UjO8X*?owB7G3XSPTjt9B24uYP45(VK z@jB>gMZKpoE2-!R&^3z2fc~gxBFMBV(?K(ow-jX3_e)R~yaek;(5ZUeTRH? zxN`4<3RUi7S1yU+iOKnqAY*wj$XFf%8m1cgAY-}Gm8*BSm>+tc6Y~im)Bje0OwN~rOscL14bl8w4;rCY`xVHf>NQvHJy&icXr#)0 z;>zt`?$|p7WbCDbid1eO$g~2PAc{Ws8b1S>loo@QDz5@`rJ^wCQAMq;+*2S^ia&SJ z$Z1Y%aW=@#8_3QZDBF@)UJn{&@&+<_TL&_7Z-R{6yP(l3_n|BI9mtfc11cPibdb?F z8Z<^VjsqFXr-4k2szK%&^&q1W291rARLut&jXOammXClaMx0#-nhWAtAjnwxE67;c z0y-^D`NdMj}JiKo@&gq0`u_ZD8U1htw+vq`Cvxdw7m zKCE$OaZOX0w-^di4~Hq+sR&D?%u|sJ!_@zh?!N5aSS{{hVzmS+`MDe_$zYIR$4Zci zm7tJ5r#8G#ZMl%n@*Cbxm!~f~C$<-{uoQ3f?Bum?c@fPGS?gL(IKP!>zqWITt(+D! zRMNzX*JPJXLX`lOuu2uVgZ+d+s7$kLhEhk0D|L&r1Epbd%sD3wmD4LuDy2zokHhKI%W z`6*yiwFH@P2@2`MaKqcevEezP;oCU?TZf1p{P@{X`5r!qa4nNCnd46 z1%vYxyupFsh>m13lRa^N{^=IiRA;JDH={FJD#!5V88fOIc}i_6QF??oqQ1Esr-k>e*WrB7kRQ%8eJqCIeRPGYmp_131+vgd)*+COzf+i@WPnHbN zqL3S&37Ry2^5JH%0ZeRtsYhFBe3|}#AmF%VeM5yza)evG4N#m)WyGO|%^q*O?$rP2&I z6;j$wiI8lg;G1?+A1CJy$dSAm#SiFq#zSq zK_Tse4DVZ8E~FFkh9?usMy?@T(Ue|SA5O2To>5a*U4^jK)I5DgMJ4@l`pM~1l#r2Nd-D}OMsFK@{Sn2DIj7eTaT~#{ileB3D znkwdC)SPPwE32lCvlWtbxt7W2F0OrMMPpq}-OO~)Q#k!+=|@+I()8;2^(1ai#XQVaRnOBCL(?m&W;Zv5xro?P zJGfaCIg~W|LV@G!o5Kyw;q=Dp3!1B&!h|q}OhY{bv?fV4Cv7`XzMoz{&u6=#W?qzx z%gaok-p~+9kL|LkYje3wpHY*CtQfqgYYnKWYpSWL_K61b7CesSk3bAW#Tzn7bJVq? zb?{z{IEUvqNHKNe-dJ5*A%ozqe2o9*q&E|7t!?SlF{ymUnPcl_)JuqB6|7kK3g*4G zx~VBWJgcHEJ&Q0mrO%*Ok_wG(Q+;i-Bx`rP-Ik@uHHP@EaY1uMRUeP7+!NQ?<;Ev;)s zV|wv~Q4)_RKX+xf>lpj}?_MVo2)UFeU4Hoi^L^FI+SB9O>W1)%4Yl>sD7kHdrw<9H zJ5Zm<{|vqTz%|-n4oz=vl6G};Y4P}p<)!0B)A*ejp3`umd!ZAL&KOc1fW2#2d1>!iDJavU{| zAbAZM1FqZPh&gpgcrteAZl2|uGAfWfYhLZb%v1oAJn1uN$LTj3rFhW0Nr|<$mQxMb zWYcY@_B~e#g%XTe8~r8x4iMn`d^>-(0i}lH|Ubbjy^QJx%HA$myW%0-fbrg zyyE_QZ{2Uqc~4I`^@^wey1BLT?6(d-=FvXAudQC>r02Jj8os`LQPM@5_C4?SBZpn~ zRq=n$8UFH&UkQ$2mlT05>9YDjd1Rig2dE>F?vT!jb2I5t;ko z$c%S{^9r0PK8}29S?lAZ;qDe6=VUlH`Z(voS?S}n!g$a|N7{KF%X>rusPYRaMx>vG!u-+s8Q?&aZu(v2a%TIJ4ob z@o|0$N4`hn0(NqNWIG@6aC$|xqc;*_!*AdQsaQgZv*UsK5Bk!9yb`qoPNJ@If z$=FBI(;R=^H_>*IRAvwYk_y>EQFdesq-UJWl8K!Uezv?N+Ri>IBhS?wJIPUY_Ei~a zs3kWaXI$4BZKt=&Nd0v3wXfPKrwy&k;-qfrYJv7iT+WtYIh^Zlj&S8Fmi15+=T)1N zs9NRD1TwNA*UtMhMsa?K;>b_MnaxSh!BL!nQJlOe&ZsEP zSy3GMcF}*W%c3~#QJfp1ICn;IRz-3C7{z%dit|wvN4}8sr*L}|Cr+xqZjQ(Hjp7{T zw6~J{dW4 zZxrX@D9#_FI4?$V-j3q@C5qD-#gT7C&E}+VFKJM9b2$4)aSpRNduhHTr>8L|DDP++ zj;IepCWGc7!jUge3u)yeoZ)bm(+Ng6rNW_cjd050$b5c;Qx7MFJ;GVSQ96x$gmVp? zX*Aan&Yf_U(>O;stKqEQ&&yc{r)7UHXCs_dXDLm?p*m(iYv?*TBJ8)Wfh7pnJgwrt9 z%ZZ~jHSjJ?MCJhDO!IOEz%iRscXFdRqoO!vQJnLlIP>8+jil*wSGh74z3|}3?U&w7 zF(RT=%Jx=E!gB`opD=nzc4h`;#oTfAv}{fm1>9)aoU9xQosTmlGe5w|$s#yDnVkHp z04G0pL6DQb+|S9%%w7@XzYPTnd%CpSBLO^}njKFG=6 z9N-iTk-H?1<=lcCxhL{*^74b60$w@r%H-wbO$~5zGa7=NtgHN-{LIXiLC%n;f}EUJ zgPelR0Z!JC9RW^$MsmC_h57ke=|N6*Mv#*`#?L9p$*2l)vgQRj*>XSZ@mN7l?g}3# zCnGCQelam31E=8C0B1<%#vo_N_5de8FPWa&YbU=TJ-{i*%m{LZj0tjbrujLUIoaVL zC-;gVCx1nNlbf+B$jN#!$jRLl;N)lR2yhDW6S)iW);SCmVdb0C!Rt7nFtNomutRd?IoSf{fK~A1@!=9YxJ!El^lXF*qlb7>YkdyaffRmrG!OzLd%8)xQPnz?xvUUbJIVs!;_+;|Z z1DxDExtsFJH&W`Wv`>pUBsm~KDVS|Y=E%rhU(4TYyonEUwO z+C{=_2gr00o5=XJWK0&h)|(&q-4f9nU~7qtUyBpu!8Nb#6KCMI2 zZoDC)HQCk@8NU{{Jf3TvmT>k*5v@8~OJw|7+!lGfacx!U@`%>uwwB2FwGQ%WP0l@c zT14x5TT5j8THJ7XQaJR6^ot@|_t;t@Jp=?!^7qE5}w(YRnO$jk}fPEw;MBK^(CL-_48s{sF^p4ccVts zH`Y}*mdf+TrkG+fZ&Mep;Dw>ma2Em-c{yrq9Zy!9*cqO`YNC)WO5&Pp;s-gf6Z$qOrbVVtq+P)A?NpaFJqttAsZ_x)wRZ zc{691QX}L&n_Ws^N8Xz0T4r2*P1F3{B}j#Km!yh@hFaUwsG6AZR0-G2u7osWyArVT z)rAN%l%>4oGOV_~Zf0q?qH8ys!a1t3ehw(6Sk1iA)s*6jaJ5S9%9vKIipKf7Eb$di z9o((p*gD=WEUuVNp{v@ZNi2@5u9-P&dc9OOJ_d+c+v=LeDj zjq~-mVkC`rW4(RAS@WX3h?>%mhDSWo2UzlGp>j?|gE3AQR8>F6Wx7^vAvIiE-#8>o zMKDu0f_F7Ys=VPg0SDGrXX>ev`o@M?6XZ?Xx=NC)h1^cQVArr546CZ5Oi$;F0hNoS zUQTi}N*jOo2Y<8*i%z7}PIvhE` z1H*}Pb)#wckdRkk7?+fd9v+dB^jFN&+>fm*qjOe65npm;aTf}DqO5vO{oLvi^~8(# zD$8v{G=Q`zc1UPmA~}a``y(u&DV58F#jstb%t3@b)`nhdMp3dIuJEgB3e_Q;8CzEq z9@Shc9^oi*F?TR%PRQ6#kv*DI?2g^^C^AyhL(jNOk4e3M6y|Vs%;g-oBPhOiUhB=uy)=SwnZZ(4;J@O5GloJ`~IO6Uo z!eO{wJ;M)&=L}h#W4j}FB>ck>6^a^sSmpkqhJEZ_jX{CUa)uER2^kFOd3@>}A~?yR zyfRv~2Lv#qx_?K|-`OiyN>eO$bVu$O33S_b)8y@>qgm401v+3j-d-(m=ya|Dw%tdn zwP42?5T)ugR)?D#>x$&PXolmy;%fIDw&abLzvm^MyC&;}NX01~z8_9 zUYw3?Ms2vciPzlA$yh~gVMbtc_(Nvo>zT-LwNEm_pAnOvosm(Hl{sU2PIh*7RuxZn z?CWJ`WX9y@W>i$=74{dUDbJNpvvY9{CQ`17lacS0L{pM7>_n2AmMsB3NFF?w12D|fGq8#fM zO7XpNB)l!7c(I8|{NmG$$Wk836j~|6y)Qz_nJV^c&N4F2f0gr0{s>|_ ztxDutPheRb9y9n96^HN0yv!;5?d%_}V6pVu z<;c8jRG30OJgp*-o0C4N@1aQf=SM; zV9yK4Nzkb}Cyp!{HEdGx#Nx5TPdc(>!sHQU6GtBD=Z-HPIc``<(S#%AnU#LGd?mEl zij(IUR?$gQ&#Z4ee`?A6^wBlp^bz${)l)0xRMgef)-+EYGrD~Ih_dpLjIyRm^IKoX zeb7`brBmrGrdKr8R1U76KHECUIyu!!mlC=^%Z5&AmI+ZqOKK_`>znFlgwqF>9h)xS z_s^-hNIve6K{ek5HIjy}+559Q+q(eqjigt$qbM*5P$&Icz`-v-MMq@bV(+Ut16Xm= zrqqcTx^v*|Yn_*B zjuWis^teD)^U=*YZ;lfv4IqxigaD^=+MDjV0U1lWZ;k;~fE%RmQ z#ZZ~Bh2N46y#y+4=B3aAXbXSCp^KoU(959J&{iljtMb}(%T>@N&>NwbL*IbXoVAEw zDK{;_Se-#-kvu!D4aO>-^Lc@s4=_+ zmJ@d=Eb?Km6qXvj%tl*bzFbDGyV+(`RoBj=y)(;Ltgx>oM0_A|lu~xBFxZ&2ZxO%T z3YCo91|0=m0i6WB9a;;$19}hiF6iUXyP+>Z;kEn~dM~sCx)S;$^nR!;FZlqpKlDMU zyuA7lRF*gSEmUH$3L1ds@l8uH^mXXjQ0h|4Z0LHZ)VDXGS3;>< zEyP}aj-zD-^gU=W4qw6V%kFqBSkE5iTyQN4(Me$c7yATxQlXpHGkLL5f*>YiY@XWX z6nY7YR3165bAmD>%~5uP;;$TXBvq#nxp`UvofADv>G0MN@wp*Mmc4KUwl5RV>iRQqpCm}`6d@8TCfx@h%Pd>0$ z#&$ar1foja>TlQnN|4O9i?~RmCD$==kv30`JaJiV+YlmomAIs_KPU_~+IEdg2r7O{ zf=XO?ZA;s$eW3E`&%V&y3nlphZy0KOcB$d&{C?+TPN)Mdklj$Vs2lRsH5RCMy1-BmS4R`9QZu zN&L+;p2S~l#@J%yUz$R>dLg^1a#E}1Xuj59XGCE}CS8@3FOhFxcQ#3*_{rN|o<;s8 z-TZur*2{9}2#zbDr$eVhrF>OFrCwG+o1xXvE1)x=(w2%Tx;py1FS9(0__A`AkGIQ{ z*bF~N`u_wK{yM0{;YFy#;U%cV;bo}Qo!6jGKwpQhhrR)ovGaPU^!aZ>cR=5Qicj8# z2K_8`O3J5PA;u5@<8@Qs^(BEl|d$)@9H; zpsmm+po^jOTb3-t`VI7QXbS0G3Ox?WXG1O2H|t8M#HbA#jJxDpN~RN+U|atn=Yn%m zq9f(+bM~`+eScYXMU}QlVlu`?$YlXdsjMdx))_oJsFNl9q&b&+r#N9YXmcK8T1o;Z zQ%}y_xXcYQZ>rmGxT4c1HrPBNlGb3GbQ6A%^xp=R(zXIR3VH|h9O#|UYoK>QZ-?Fu z{SEXU=wndohK?&&Ld6Fx^bzIP>w21>+IFh6NK^4%7*?GwQ@enp)9LJF{VJZ)t3shIQ8Qmf zitR&rJDK-}G&0-Ws_qU?B{K66bs{6z3OknchHfNBgf|#}nHO3EeG2+4^abd1&_rVJJe0W@ zYb~@M`T}$*^iR-VLSKY(KWM!SeGu?wI{nBDPB}MA6 zj3;H2IxNTUnnO$G|DE{HvUx%zFB1O{yTn+w&+wDvZyQwV^cPU6(_cc%pD^cS!(GeN> zd5?2_bKI6V>=!`up(jDb zZ$qKMSX>G}9i6UXA@ad_4$+ZxUJQM-4?s7!EPFbpbo*R@5RpJ!6dNE1_pXWehO|D*eydP`OV$2f72w=h7`dK+lEp%*0}e zua;rZa_9)?G^mUXE1+R$C3HTt8Y*#_0S(5Qc}T5yPOBd5CoIkf=PyJ@@+afW^P=mW z(^2$AB*sRdsac^fftvII^Wv2N7F7;_?06MK+u z*_>y`;w#yX$G)7u-ad9}s?=PGkF!bsCFZ2w`nAoZU)Gpk29@H^Vr$y=Er!ZH>=I}d z^m6EIDE+oR8@mE}KgY|Uo1x30JQuUBfgTC{C6sx7>qck;^d{&+=*`e;pudLR2E7F; z@wgQljPXO*mAWi#scgX*zYH%p77!hYvGlu3eSMSnMH{DuK*+lhVyQe5VhNWS62|E0 zrDKxHcpDz0*W2}*Hn$=q(HUc3$$68;94BZ&(c84BXU&oqiB}T4#6Y$O@ss55Vd#O- zN1*A@$DkR|$Dsw#-$92%pMX|ES3~QezlYufeG)1@dI}o!yWH1_54!UEYn%(#Ezyy5 z-OK)!6foVS9re9bA!cK2p1O6f_*9)LEn$qBAQ5s}PxE$5R4An2%H~v*E6gE5Frm24 zb8KAi-b>kMv=pyKQ z(5s>ELvMwC02P02ga%`L4Dn})+Xw0asn5i|!>A!YcW9(M3(jEK0=t+vCU&=eTZPrsZ|8smJ zdD;#YUwjQ61^ospzWz7#a_G0vtDygZ-T?g$dJA+X^bzRy(5=uPpfcC?BQ%-oQOLCq zii7gJ*6IOW0No4P22FrUyV?sX?NlQ4Vd&n_KSGnB;%}DVh>GE9YTjRuq)y2$_sN&A z2j`s}9m(Sj{up+1l07PlQjh)`eP0`Ca|*eZv&r=(279q*+srKTCTY%rhM>97VbFZ2 zq_Y4TEWh#M6VAylTd@4feM+$WicW$EL$8j?dnpf0WP-r4D1x3XR{3>$XDP2{M!1is z1Xom6vIxDFVR2E6cHYxAG zmO-U_PJq4wodlKqPlg74Ivl=KzchB)fAg@O1n`H9RO{B4uW0)odIox&V@EXS3w!D=~#6x^v@h$2>k@gf;ak3&&5#Q zSFsjA<$3x-sQB;_XfQ7CqbFH*I=5h4p5$Dxo{Ns8TdqCLHx`Y2ktLg zDCqUjV(1OfR_IO8tDrYSuZ8{!D)$b*hCU6w1^OoRR_NQ%+o0m370{sH<-Smgu3S&H zpx-6V!TUYYk#v5~Ug7tpv#e}^w54^Kjc{}fbw{WP=~`bVhv`Wfgo&^6E%&}X4?kNrG!D|9VX?y+Bhia-7Y z4f^<9_;L-$8$lnh=3KDN5gke2TkK!B!wqe7A}=P1(HL7S_eQljQfMVXh3v5&K*e~f zCjs%il<1B>W_i*e=@ws0A2-$Jzl%>KFCRiB$t+u?zWxY0nd6V4(yniU-U0mtx)%B= zbUpO1Q1QcNXwbKv@TGp!QtB4;?eF0R+YQl?^!$T;y1)ERY~*8U`8s(I+YNs^A(IKx z1W3iMGmk4`G#lbh8H9VwccdBd^qZ?N<7|?4@vn64ciGHu@QdVUCsh3VJ#-ZGN9ZJx z*~{Fw#6cHx*aLbcv?o-?dGXMjpb5~G&|c8Tpo!2wK=+2e0S!SnLX)5$Ls?p^WfOE? z=-;5dq2kjNXfRGvCwCPmX}^NcU`0pr^*MW`KTiL{2T3ue?3^atGl-9Vl4RzC8c3V7 zNqQwVN$gcN^DulNdFT(7*sz4T#^xBPJWCn~y#{(L^mgcRQ1Qj_P>I1HsKopPsQ6(p zH0aw<59B!4RUMGn1>11Zk#r?MtD=4DnX?niF*X{Rz?_}b0cQ%$JV1KKt^?kuLowQH zsR$ba6=4^5r&=?_*WP*|`3csG0(>QTEQE^hhe1a{M?j}RM?!Cg7C~1)M?q!IZ8UT{ zbPRMbeaC4~nPWR0D)TSJ&>Ns7P~Oe6#z9v@$3y=GJp&p?ddi?Zp%bCv=Sk3D?Eb}d zQrNp1_q@)z;5>ooNWP?8R7c0onS&FvF*Z-{utyJTVoW1QJ(1Coub%AgX^p8j-abR} z6YMjli_hTCf=cXapc1>;Pg?_F#Px9g#Vk{gFQW(@p#1|L%c}(=od~6o!N@EW7;LSQoR|G9M-$koN)1v)cEEIb{6n2xbUcL2MOg@2eN1v@T!Qbhvhxq%{E z-rFnBxM;a2RgxcxMQ`@SHvc(%C3$=iD!zFMDzSJODzSJ4DzSJCdL8t2sEmK!fIbaf z50%)w3Ec{P3o7#pZ$o9?>mBI6(08HY$M>MY*zE2ZOAqvd<5TZ5mRT`k<23M6|6*(e zraKQ=oOZ_7@JOuPhNl}fC+4tr&!4iGc1wKkY_XoR{1g95JimhWfo_NPhkgw`4*CtW z3i@y8Y$%Jyw%i5%7J5JQKhVw4xCHZ@r6=@A{2vdM=PY|edZW-)EVY;TP}v;7wuUP=$i0=M>tLwl=@94$=;2V2O^5y#dL&fZlB1xKhyG9*V_e!(o=qgDrb}0^ z8*3u59*V|%g1j%2&e6v?_{+zPb(<&~X zP&B!yZ0y9d%EyiyHQqYJJ`?XfbLOzJabw4g=4D2swwL#0QCZpeGSV8nmUktUgM4ZA zt%K5`rjHX-n@JY0;9XQ* z9@gV@j%&-C`4!-NJwAft3oB<;G}`Bx+qLFal-KeBD)+02skhUhmQEZtjIJXwbuWrt zIX?whQ7h(zQ>f-<)YeyoS#wJ+C|5m@k3Vssqcj6UmD%dd^gSeYTUq{G_|y`ekKdXrH|qj*{1Y? z^YU|#oq8tEXX-C(NaV`@!ZWo+{?*eP_{r7&)in+2a-5xheENCHfG-Sl&}0tsIs3D8>!&KF_s<%lMzb=~ zPf*MMy{T;1l%@CO(*Gt{#i_Fy2dn^}&)&=0YNI6mnMUD-5gmp98sA^l-ZBgfcBH9|6~v30L-dDptU8(rRAE^npFd&=dlad~{9p-&=u zSvT4!Nq^X|R#SQaV*|OTOtKEP5h(!4*(8g%h7^UYLA2pC7x+MaVnR@oJZn=Fk|!0k zox*#;Mj@F&x8=6Da`KZAMt6tHi{H!PCE6%trMbMmE^m;_%W!#*f$B6>GH?@=BqMA^ zA!{;7?$MI0vuzZztdTYfS@QE>(*Gt|SK26K-Q~*3;`XA86%frhelBFFEC?$$!U||V zW5q^TaphLJa@#?T#!8YwSg}#aS_P6h{Ul3%_DN94dexO%@5+s&Fw=FBmgP1|vaYpJ z$m&C}p(Dr2K{g6mg&@)3YBma4TR_sm_Oh}mB7*RmjY8HfpaYb5yNyEDi>}(@3)vR2rLYk&?^D_d<8vf>GqXwYffC}b6b=Bkw&ZA4wLQONoh)K@jWw-F_g zpovD3t^y?}WL3eVYbGtLY=kFmgcT4SIvU^G2rC3lG_Yc$kTn$~qxW9cN*g6v585bX z9Y$CVR*fTV6tYeRiAIuDXrqwz7-+s)ky}DR)BqcWtP4ShDDPq$g{*5`xf@-%WCD4S zTA5;_Bx|aTC>tP#1Xx~gBRuZPZFS{J38dV&5hEKBBO8UR0R%{Hs*^)M)1d5_yDWWD3cZE)o_ zySyzfZ>P%>M~UT-RSUWl)XQ3Jqa^Do8-=W6am5jOwG(VaDFKNFrNl<`M=o!Q%X<*i zqLz2qD9PGsqmb2#D`cKF$y#cokaaysG?J{FZA4q*@*Z<}`RUxNBiGAXY$JLS8-=WW zNbpgdO|nvLM2!N8Mv^tlMj@*|m%j{NFRQ^uNmkfKSiwYpW5q@xD;*>nNmhRwg{%yh zm+kTjUEWBSH^t>mb$N+gpjA^a(MI&=HVRocgO1j#-D;zd^+#9kIals=m-m*-``G1u z>heB!d0)D`L@ppHNV1Y`6tY@Ci#1iR+K75-qmXsr0DkjcH4d>+$Qlb0jU=nYMj`7g zmv^qqt8saAT;5`rcZJJ~KZZFMO+l%RlB|g~qO}0=$JN%`C}i!h&r-r{L@Pg#x0KaN z+OY=FI@%~?m4o=hN~MiL)&l!%lK$kO=!UGd@Rq8Tl;aGd6|hmrx(vi0RxYm1E4R^= zTb{*pAGNa4MoHEt8-=XgA@XLSSUJf?A?s|AXe3$Z*@&^S%bVx&wt{}Hmh-a>O0rJ2 zQOLR*L?WG$>a#3R%~< zyz5=wgD!8C%j=iN(=NT*EE^?RwKfV_AA-mfmj7ZSMxd_Tm#$o5zOh2fU?X}{(A8@B zK^rAmt85gq3JS~{qDj`zY{Ym7BpOLpsf}ohUEVC0w-t1aTFyVoApC42#vmZvg_YGd z!q2YUc319-p?qhcR^G8ulC{A`A*<NYxtR&QR!tpWuqi(jg3Oq-lv#(^(1Q_8_^4aeyu4OXd^~Ypj$K_n{1S1ZMIR! z8hk2mTBt^rjqo!_H1M;H@ERzjywx@eS#N=8GuYp?5qAWj+m*M&Mnt+$S8YVD%0?mU z5)j1$-eoolSzm%E0Pw!C5v|2A-T+o!ij5d8fd~_FgKQMCMt}$oywNtIRR-Zqc$GE^ zSr>tDA-qd$6tZpr;ShMgvJvBPj?c6D^f_YK_cyOBns)m2y^=q!Uh%}RUhum;l`*}h zZYuLn_L{No8nS~Ms-|0CefdSp^*3r=WuC)crj`3D2fNFFD$iLuQqRlsg(3$v%j}UR zIo4&_3^q%Y8EoE)v-#e~C+N6KPl4Sfj=;RV>#jqiw*5=f==Iz;#*I8nKbUL4m*q87 z#w-cp^6lp~=2+iU((6`K*$-7!NBHs}Pp<2EgCKH@x_i!1bYw*l>^fAi<2=FkrwS_L zeM}md8TF)}0GN!6o;Ty} zv8|`)Y(@8+dd!UG`y!XZ&Mm%fH{W!V6z@}Cd$stKNo`wOw~H4w60BDRb zb}k#140BRqnV*@0R_jH{R(NkLwa!binn$#k>^#G^6aR-e3@&*qd}OQCPHV4A51MVw z5~TlZspMrvJ34!0ufw{WrUZ6a0ARlF6M_l%KX#GSa$mCo6q)PMrNCS#r)NQgocF$1hoP=?P@6 zZFsUHnM`ByDv-R1yW#nv9qJ+1{!l4q^_DNfa>rTo;qT`a}NSHKYTTH|z?Qjy6 z-1!JKBAESGo%%q;x}AStYC9^lKDY^q*UTqd3n|md>hVd*LnrN6&~58mr8aC;&7!Rx zJ+a=pFvYrr_@@jl*|C7~zN7Us%6m#%QS#8DluJ(fy##j2OS`ScTg0$d1&VIR{SvlG zDaTJrruH~aBJtZ>7jEB!$ZZy*n@wsrcTS;(60KmROu6*r_L5D6ZDTNODN-Rf5ix3- zz>NmBP1^1xDY^5}wxaEB+}!%r?XtB~QmAbOMW!>A<~dSoC{&5AX@C8VWj`)bgVm3% zYiV(feTjkCPr|yXX+zeCWi4OYpTw*UF)f-l+*sVvIZ-N?Gz*f}lAS}x#4kwpHnqYY z1BYfUrHE>f8h^F2q(c!FF1A^T)Fm{Rg-p_%{I+gQncQUq5Ho?M0Wb;N-XSfw$EQvO zSdiGJCI6CGB|oNFQ?HEKZ5=lmvlRECXT)EUOrD&kkfsigP;B8XOQElDi=5O8(+?zH zk}Xnah@QBIez19G+r&q9E=ybFxF@k~xHw5p6hFLkS@QDEC#9VkjuVe7!mc{=3T0_I zO>Xw@vzI+ke{@bh{+_!qQnzYE9!Atd83j#_~q~+}X;`EZ{Mdw{~XJ!F-KJX_G2%xALm5>Rnvb^zf-JmsI4fa_nB*`ZnW5Ga$J&Tj^ng? z<;57ob;Cm!YGJ@QwLf`i;(~6Q@s+a93{7LIT^+RdXiHwSETl{blbdI)eYQ z_n-$v@+RSS6+#@vFD9N4cRrOznPk_Q!9a z7Hmp2X|@~n%akSK0AVq!f6w?cvWcaYj7~a(JshE?tW&5%ou|}yo8R{)O*eQeC+lEu2w1c4$rGNP| z0~=DaYP zNwp`MTjjRMy_srVxHY!(VjA|15_@2y(w-{R`BDo{p)*W%-ZriW5?F%*b1$Df_ zq(tk}Vjo-19m4L?I?J{t)YuZ#!D^9K`*jO|W$jC*LP|}NBlR_T(_9b#HC&-CQ)-)%tTQbEK7Dd5Y=G!GTkw#<5JPuo*mj6tjbT>KE z5ErXLO>zWvEaM96mdILz!tCtbrnq%Y+%g4i?Q&|Url5EGWQ1Fv)-?8Bau4$D*Nx#c z{u&91?XR-->m;R4*yFofq9&pw=@n|yE2!gru-y7Ckqb*-pi>umeLZSxm#aC>O76H- zQ&|X)RGtipoyze)F_ooQlvD~esZ>rbW9ubyQTLutuWjG<1(LYzhaZ1z)1XqzhrG5$ z?f9m%O#htn-?UG6W0fwADIm87%EX>d!o=$GV>TuJHfoYIN}Af%wRC0M=mR42GTOjr zIKj4OhxXdt?2xq1l5-i4=nSA0?n`T58c2C^XMSg{WBYg`+4IsPrEAryrT=2gJ~8Am zvxGX{>3TjWW*6xjsC39gp$<2?-NpLuTRI*?Uz6G0fW%Cb?_RRAlCd8FPS)uMJ22e3 zZwYiBTdZ)bUMc1Ue50ez9?rN+{g>Wld5mewpMQDpaL@eb%WKEiQl81GolO}^%{G^1 zSmHFQ$vPA~P{tlXUnh6=kpYuoN1FI9CtQ2CFVcuJv@G&Z&bf2M+&!ONB=hQDO0y&f zTbzU7)%$j4wij(KmFXg>HH>YYBr~$v3~y7JQHkUwrDHbji5-AQ`IY;XMCX1bFm9FE zKBs%|%uU9Oj=yxvmwP5UPA%J=zCXG@IKJw3?eItUkLWuox7&`MyK6hPpkwW-NsF0p ze*quM-5%ag*<}q1)G%&XnJMr!eo>R=8ZSy?m(N?0cl*4>|1gE(F5_Am$#PrHEyRfS z$m1BdkM#tt8|}I0F^Zf=d)6NLOZ-J{iFbyP9_Pg@IsOuVlIqhsBvCw= zp6mFVsRD7$6Fs$?X3BKAKe1lCgV7Fo;f02+NAoy;1K4$E9y9&^lE1Jsue%xd-P3lC z^mJfkZ?oJLmTZnae@mP>zjGOLw^Br$xlN~6aqdQRKH`5rf2H*==EOkE%Hf+4>-d8@ zo%u@UyLK_f5z~_IPO-Cz*u^y;BxcTFWe5~899pt%;nDtP zV=FTPWO^t4o_lMM-1)LEn@)M@;`w3B{P||UJD$+|(LQ!Ne?I?oUgSxg-$tn3nvWDWY=t zZ|tZX+vOhFOqQBw`}%yWKTUzt$tJg#Y-DJ8ma`p8Bc|jDUw^HNXq@^g1M3dfBDnL%M5FJOEeN&JIoWk&UG?o*MXkia`I9`hBg5m89r`G9hm4IUZCY4M;rEpG4Xq0|{KWUA%mlje%f`+F zXA`mw+UDEYNbYQvfw(*Aw43%mrtkgr;s55Fcy;do=9|{?2%DirXCLT*gw}4#^#PaC({Ifsw+&t=$NxZF0LAaHlzIvvL`~r93fD#BC(=L=0CMP<4Ce*H`>I7dThwDOYG49{=p79&$g{`fQ3* zFu4|w02q>QTQ;0qOL@NA-Kyqyx_K`r{>@F;Up6diZ0e5J%=o+8k@fkH49Wd>EaydT zf;`SMlWafHdAz$I;d%2D+_UU7J42}iP(Gzdus^&NG=Sr3<&EY4T=q0wXvgq)7v4TA z57gx-&AOBScd#c|5Ak2##7wXr;lFgh36|V+UB{lLKYwZD;usXkYu*V~0!SX>CCHD~ z+j7T)W~oM@i_QcYU3m%A=*|GiE6fSj`5k)8nZz6tHvCV(cot>^wZ`v`7s7NM=as* zTn!|z-zQiHfF3Yc0~y_+pbO!pS=AtOHI@~(HRQ)bA5@L`Afv&8%eLH$uH0)NiF<ZBVxc%& zcMHhGqfdgPaX4r{mFo{$rRZ3Yyrhz5&2;510PU}5=Yk$qbg?V<0O;4Mk=VXvD>@5gv^*&&~xsrRZW;?l-R7YFF-Q(9ZcmH zpf!qyg3LAQT)BC!9P>fevnqF)EBCo8w*z#jp8X#5oT45yWyW4H$Xs_a$jF@odS2zG zxpFNa6a8O-jK+72=rKY)xzPnx_JR3i~&G%f@gjcY(g zNkJGiN3C2AGFFy@jFsy^Z>z@5AYCeWA~dk2Gzy+I&jFBfF& z4F&yKHDpN+V{Zw_*t-REt6E+MGP-Yq(pBSK(7TF01R32QK{u<$!D)_0e~{5Q7WAHK z38cxFlFtfTk+C8dL#Fv+f4nuDsuaT9o$&$XNLh zbcCMW1bSc57Lc*>1;|)Au#cm01n5YW8vy!1(ea>bL21^Ru3UvHHv{yc%AN1ZEd^~< z-g3}Qs`~)Qr0Q{yxyBzrAF13kAajk)phc>&9c28HOxI#`4*(h6LqH#^ZaTXQy z2N}8Xpn34ptP4P!_3TCN*=s@b_3T}szvnZ?q?vAg6*KARqk6*r=lM~*Qs0{Ljv1tpaFVzBxtLmVvxz@B#_DFjUdyi+z*Wk?kJZP`FyrH8Shf220A|MpX2%7#U4487Gd{vy9K91^Mz0U-6V=Os8NCUx zWg7C?up5=hRypPxPr*)5AFE+ImAwEne%l}E=%v9j@a+uNk8SEQNeEb|{^d5zovhi1#@$nwa`1la^ttCD_h8Z6RALHEb6qxZ* z4C}3WWiTsAe4Gt4K5m8?y?bFs?*W*M<&&+4VMcE~%;d+{Fw>szf2?!0elQct5Lh3* z+6Y)14P^|>gmN~_+|l(g6W)`s`S?h;UV)k1+U&C9X>M-O@G@Z;%5q_CHRORXQ~u6? zU8|wYgBc$&nDMa`)=qs~1T#MFgk7ROehWKOLw*fr{Qd=I{QeELpZfg=%=kSX^J~Wn zmT6)IlX;J1Yaq;y6|B9=N@1mXwR2&{?^2lYdl9UI>Rk#mejj)B{^07p2-{!vUUT(6 zhJ{qN3s$Pv=!9`L*EkGju5lDhW@D1A<6!0*!(a{SV+PFlm<=;N=E6Fvj~bZqaUX1v z`gj_)MA;iK_x%v{!O$vkIP{>>f>jy1J%dRVWw6*@9Mqo z>ir3Jkm~)_)%yaLt}@wCZ259(&apu@w*IW z{5HZ4QNNeL?D)BQufzK4ef$Y_sEMDe*Pf=zgqH?0dWXO|tKJbX6W&1BGL6e9*kS5A z0amQCGhv6Ttjv{N0lQFL?}jZ__Aty?i~VSp%ym1#a&b-8O|Op7P!2<8t{ZXn#=Clx zVO>=3bXRYwt9PlZcNOeN)w|Bsd&<>&-qm{} zO#LR)2pS)$FyrH3*l*Ow;V|Q49L)Hrff*m?!Hkc^u!q#gGMMr4XIJkX7{!CscptVy z*;ZHYXc{sT@-UbQIUi?Q>g}Ms+j9*uN&Jl8mjls{% zh}{|*_$-I`Y0Iwzzm!z|=rN?oY+hYtHbt&xv*Eh3qN?h;@~X;O=8+C`H60%Y!+Z)t zHkqf%u#ckg#?z#_s+!_iQTG#W(#kl8#6iv_9?tztV*o1Wl%<%&jr@*v1d+2T+EkmR zXjv0kNK;bMCPnAqg|RW5tGC8xAoSgEqx`76w%rqPqsG5hre!%4niDSiak;0LP2kCc`k{El`!T1iFo z%Iu;mx;__7~Y$-LRf1_mnibIoaX9 zXh_Yhv9iUzd@Si`gmMf<*?dJtY(a*~%pd1oy(NE18&mR^f^t90K#9g#{7ha6GkGN} zq%#*r_Aci}w##O0w&=?CEw3bhO% zuX?mId36FPdBq0VnpY)olUKq_UI`2743&|+!?}@3UKyF>m64HGyzA1$6O;Ow=>(oI z()Wa&}t2YuB?JnuqSN7zLZqqX%F_GfK1TSj@VC~=e{ncpB~>?GIL zd@E%XC{<@PNPpZq73>L)0cE&0)^?X}ipefvCcA{Oe>s1RY_rX@0r@UjBl-H>vgT%d z_S{3(3_K78J(5fv`hSx%t;!nbGq}IAYszDwWXcTUt>Sl-M7MDg*vMP%gs<1R#R$dt`<=prX zxqRNEHe6a>Ru-)h-6_R2m3(6%TwWROR(o=|x~?W%Tv}Sg*T=)tdVXa@vA(jjR>HF7r-aM-8q+|6<+9>H7^QlVc$mIx zy6&E9IMHxK!Sl-K{4jSfDWzf6MCUOBJ0qPDvd5kc;6bA}IbZ&Ls zLb+clOH$y1Wz9J+79nQWzzWV#-W$SguBSveQK*&NorReEw!;v_=XZg^N#cbfct|Y4=7>GPC;C zYPk-ErQhP=8cy7t`wEA{J-U_k40kI#LH+TKo~jzst+-TbkNVQGt$L;Cl_t_-fPq$N zaiB7_kUkN;hFddD1(Zt?gVB{`RZgXyUsGNe4cAqLCE-iMb!3*N3^iIRacOyN@yv>- zCY{w%{y6vRB>emq;^gSbHTjsDT-9WoU*8GFO-DzNC_nd{SDLn(=6lv7ZKJcIHE0I& zDwrqT6J$VlF^qvi>)fjocVC)U)tud{xJGQ+$ze$hDF!4)aXk4o&UJIECCTkXYF_>^ zxW;bU1#KVfu_+Hu5?eE8j7P6 zjBBEBjZX7;CDLuF-g#`E*Djj)*@n@h<3!I26-c7DU>9w}=;W=&$1#kgTii4fh?>Tb z<=R2puX_)6+40*uTnQ&ZHA-mbgLW)_b8OiE!`rcDdAkQ&W^@x6vqWj`riq&i^w3Dc zU_K;D-+iz-&EoG%qaVQTkagC^!54Hpc+Hr$X9^s9r`~YRZ^-_(*ZueReeJg64(|N< z?N`h%S$M3KyE$PvzBTd2*IrtCLw)8yFFo#^)YZ;;>_^21jy$gS zxX$;S_vFYA`W!d*%QJ?)SaxL(iJcsIB~^2)dzY6^t#6kkyQH+W^2(ycb-gn(E>B8| z8A)$?swH*vwAY)2pSDTfc?S)~>RlS0SwE}mBspuNI-5r@<1Fg#Ve3p5L0kDHX@|sh z7t*^%%DWM@1KK9lNpKvgZ}u!SO#X_S9IB)2VEZgCIT1+*pUz0mWO^m8Q^A=eMqF|c zXE{E}?VQPQFs}0l&c^yA?{FqFiE*8;IV<%^WS+j-CmDn!=98R(Q$lk7&a&L=sHl-=l)^hL7GCy}RsWhNnhU)4xtB`_|z9Eq%|#3lD5 z3Hv1S%x{KIvJHvcf85sr6pFDvNiQT*eG-P-R;f=i2Z?<6HXe?AWb8bj5TyMdL7(fBy?AFEy!DHgz^BNH)glcbAB zVp*jVSDs_6i`Uw;SDl^w6(&crhV2bUtiayF*M#GlGqiZYz@mVpv(yK z#wSH}dJthJKA~pebX1)^hx4Om;dE>k&H<{E&0k5M`gSuuZyujcsw1ykN{Y*IK(laU z>a=arp2JB~9d9_P8V>6^H6?S!uE`PB^x(-r`(nwigb!Tn(ZQ7*B-v{pl8QVX(@fI8 znPfyWNz|5vG~^;@N|EpmaIaO<%-3bMq@(RiXN)x#sje^ixSw;F7~a!N@`x*O?){l& zlC{kwe{Uw)VN3RNul_ZXja)u1Nu@~T5fLLPqN^ldnAq-0B(Czz{dUS_+}DXnR+9R0 zNe&X3<%~;CK~mt8jFNDCl0qaIRHeADnIfU$#3eOIVm`@IBpZE_E5sL7DemhAB&k%K zxa3ZeP)*{JUn5!TO61-rGDuIQc*k{~5?>VNxa3tN4;vFViM)sq_w^}~ zyhFT_w%qrsL%otzB-Mv`C0&q&5BEw=K(f{+>5F7#7q8ARB-?$G@kr$1?Rb2qAt_)9 zC@z_eBqQvVEI^WXj91ctBz&w_aygRJ&n@Ymij?ByS*j zpodpy6Oy$jcqKcKn8T?lZ73Ih$$`xzM>UgVHIoc$CMj$tnbS;V~B!evsvtu4tK5DrMPGcy8`oZPViNx#gxpd@>VPm+_7G2p6zBs1%-pd@!yP||;W zK$10Jb3l^aZ&yIlH=|>c_r7v6`ek+rO0uQ3iQhXqeMbc(1NusD(5o|`f1O{Fnc4T^ zprpU_{XD)hvvkWsuOvHnO+Y6nXMI4Do4GkC$=MZ<^zYk&BH#_Ve}C!Mc_djGeWhRL zll1Q&kYx8C6_Dg)NuSN@D?J`--y4FG-1`EO-2STq zl71QMf|9Jw0ZISdc68J|cbb!tGbkv@og9?(FAYit%nnF0Gv%|$-jK7iuMJB2-WQbQ zvijxsHDGN(l9M6tBYH#5$qv&`@JVvyCP?EDCD9ODqAQ{ki zjbG9?GiyUYlAYa-K8YtjeY5*^4oGq`djutYr61|_g@p`Aax>2gO0w$$l75-eYxIUQ zAm_HAq~D`{Np42gnt&uLdqYr?D}60b$hlbq3>5&l9};9K$4a7azK)k)sB9E=Pvr^n z(pxciL9=d+_VsNGAsCI&U^3Ryi%ReThyRt9Qxlvuks6RFCdD zzE&#t{y85XMft@G3hHX~yLFRTUb2eh<8S4~6+YqM>YA#Oaje|s4bB`qSO!i^``1PD z@&@D$uv&0*zVFw9lKsuP7F=auwg)HuDqu_QvU=2ln|?L01vmYuT?=lW59!smpyGUJ zumxx5+k-7Q^YuOFbA&Bu4D)@UumvUO1Ai?$7u2=v#zzfXaMZ6Hw&2D!%~uawaF=oB z9-JoWqWc~c`0if|u2W=9dAQ7+?@3`#ZhO4A2H*14_gn{@Z!)%Ub^9}oExCHiTT3c? z$!h!Cj(hOkVrCaRpMPx0bNq9VEotnjF1cTfY{~N;3XD!#>@m|+V-K0O*D_;1OxaT0 z)cc+z;4d~sLxvBJ3@;iwe&X=RL>^Qvn#kFtQKLspmXnbaBaw0O)1hMvBk{8#V+%$N ziJywcDUs15M|ph4&(*7Qy2oe6i~O$sXP}FU%I8+2QB+(~Q&&`8HM6L!zOux!#bvC_ z*V057rJCq`R+pW#BKrw-R>bC3Rl3jn;_P|!*A3o0&F<=&*+Wrvo;K`UVJy_RBhuJxIJ^b9w*NY8aGWB^Jtwe_K%kI_MFqO z#zw2_w5c6G2E)Zke(kJDQ6AVJX4G*{EH!?J$|~yWYk69)NE0bHm}RjDGx;RoUbc`3ik7*Kl;)$=U6i(8oA&SrWU zdEPF$==I>2PW*ibU2<-)&+y2IA%$Znj~zYq9L zi?<2($8>Cwr#%jO^ES@n?Ml51NqTcJyD2^*;AF05J4%>df8I7cja!qwSR}l0&U&fQ{9nw0xTJi7*idJp72j84O zVLFzyv}%5BcuaX+?exry>E)Fr74@Z2Xzz^PnFBI%GJ9uCuP3t8wYSlG_V*8{q>5*G zxcm7(c!*AisIshl7BT&V+m>N|vNbks;*sWo6&c^B=;mp{Li*aMESIO~!y>{$RxXLp zDjzcWYJ;$lH4!Gu;VIT>HVavEVY2+4Vx42NkR{*ClI89ctI1{|>oyp9j_fX*g{-Gx zQZiGlKiDj!k6FyH4nFvpAzxpASLCcQKWpFdZ_$;%9l~5y>unLu?R0Y1wnVOF>Rnwr z)B1GBCtf~ zamgUgB$jc>7|x^>jZ04FOwu|oDd&uJR$Jn2%cQAmo7989{$l~B|1X9=`YhdaZOEh% z>$A6hMQ&EsfD9U4)2}#2`xR4OVL6l1Ek~k$#h^g@ZYAhfygU?Jjb8szCY+CfycYTu zmrO7^&R^9F^ea{opB>Hg=vR0i`4RtrC4(QF#Qxxynb1z4;DxP%vx0hJMUH=fS2+2} zA-5Y&MbGmvqR7Pt4@9TWujR}%oP7gU(+cl+aoZ zFB`XGe#7He{N!jUezMFt1D%T=GJ29ViQ?B6`4i}TV(YaO-f$egLT9kN-^$Tac;j(9 z2c1>6UQ72oityH<)8$bOj?R=FKhH9@xU4wHvS!*kMpMd5-YTzs5V_RvtuHwm2J=$$ z@`8F&cRy{WM|la9D+%w5W_pRk`?i^0;_%wOy!ZIYbyHfYcTg+!j%cOcajn!lsg-)! ztmkX-FRc^)6oqnlx2K)=(t%Q^{q>CVBLUAnttwFNBI8(b))Q(RVXPQg!(Pod779 z6ydF}QhhU2f=+Po&Tbm7-O5D=rLwX^r?I;NSyqQt;i;L#A}CE!_T5oLM`DQO!x&qIlc0p4Yk z7wXq=Z*u%9T^5_hr|p2#M7W2ffwcdaH0w57`nYA@1%4Lnh-@`D0{jCw7JLp|2Ce~r z4!!`s3BCw!0x>iH>E1uYnW5*Fo8``H!G%)BFaw8e9jy4*m&z8~igU zd9xl2=J!(M(#zqt^a$p+JcOPb$Zzo@`Mnq%+&sU{yima;&2R}j!9j*g?ns8)xg!}X ziR5I1oRcF~avF_9)dI~XiDVr=-h|a`>I~20XR@giKIFx1JA@L=@B+M>!_9ChX-*;G zy~tU0v$gO!FM?CbYMB|6Oh1zwl;cbKopL_MJ|94!W>*D$@%UP!rGF)Dq#Q`pFSh06 zVNBBNOHgj{D{ut38ypLM4N5uSeF`lHR+1?PY~~fijlL$&ND?k}FO~Jb5xSUo5K<ieI4g=#p>Fb)fH+$r1Fczn3Ik6+3c2zlWZbzpQ99AFmquY zrBkl-s4bjXU8~`4v(L-*Y^QxTM|H)dIVE4r9;e@iiGzg3t95!StB}=`1=@=erR@l0 z{$qA@fh&6gnM9r{qwnrXVSm8ZvrD#Qgp_{?tAcmYH9Asp#NXK(ox3>8<7_sGB)4*d zeZIgxUu|p8C&|1Oqc0WX0BeR_QIhrbmH74}@;IDxNSTs)(x2bUww%$r){~i_6pRv3 z>PZwl1Ej3St_Ej;zXYj{vEP8$z}OQYWBeGl)~Ww4;Hh|B8OTZ66>U``Aa2c3J{kaf4 z8e9&_>lVy2#N=VTi$HkJHZ=4d93Xw@Ymo< z@G+1!CH5oo={E2%@OJQM@DA`a@J>){!d+mnU3nD$sl>4-=`V-anS(&owI3nrIVjMs zh#%3p2OJW&GqZRzy@rP`3M=L1GuZ_pT54Mxxk7@Y;Xt})C+pT8hgfa2A0d{TkAu*?N;hGG@@yYgwzOW*F++fTh7DqJbq3M>1v;gnGyFM_PLlXIhST(8L!?WwH_FXVuvQ2btvD%&oC5C$VnzHR^$(`A?TPpl+MDuw1d}jG9naGqH zdIf1JM;8Kd`Y#3KfpbXOOMN_^-*8+068S3m@kfy9OzRDBI`}470saZR0Q@t!9Hf57 zJ^=p;(w12pz$C(=4-z{R+z1{Cz5`~1n?Q-f``~Plx)h^qT3f*1fFFXmS=+#Gz>h%L zlIde`Ah;crdh;n513v@VvdH=zyaJ?7#_j>X1XqDygU^736?+x@7JMIU(*`>Mwg=_I z68nRPf+4UE*b!u37wZ5}9xUwyo()p^Vz+_R`Iwa11HoWDs3csmaZ>)|2y-rNsZ$ST za9<|}>VfzXojKsi@p@2FRmt*G-Ko{lS(B^0ooWd`!Le_hYUxDh5sFhlopw<=*;1y~ z*e1U+-oUN3y+|3C`s6fers0&DL+empswKMzsU(MV%A};rD~NJ9CEaX;x7`T!ucWV(^&|LgvgNmvcarA61jR1= z3Y4~oR};05_5iqyb3RZKyAkAp=NSEJ>tS#s_z1WKd<>Mf2fH1k-)21l9tZv&%mAMR zM}bd)r-GEr*c9+-unK$*d;okNd;(kpJ_Ei0{tJ8&>_Gf!4`N-xSHMj0Rd5#g8Ytyv zEf_3|)MxGMi*1r4SQe+^9vs_=A4!+z!ORxR;$FJ?QhuZYI0LyB#&+qbiH#FAmYuQr zY%k)o#tZbUGdfbT7OEw6EU_~v2;-8+&vY5((sI9|U(GInl~rnP#T<)>y>3LRCEOVk z*d@G$;iB5tV5uFDwt)1J!zqQ5ch0$EZ!a?<{VVAzWl+{1me}%eTT=$RgHi^M2c-=5 z0LOyNYib!h5qyC2lfVx_UVDulLwMM#nB-w5C@(c+f%ILhZ17Pq7yJX*50w1u4+hIf zHDyQaNlW%>y7&v&EAb;`qyo%sRz^nV{O?(-Q~qt%>O|5=4yT+} z+6HY^b~{r}`0$XH6J8w9a`IzP%E>99*s45GY}F7@Y}HV3BRC8cTQw3CTg6MsYO6+r zVyjLC#a4|0#a4|4#a88mVyni1Vyh;B4}!d=5PK3V1XqLf4P#${Q@{}Mr;ixx4o(BJ z!85>ea5^YuhOt1iawz39Ox&cR$`Q0xXXBn7D2L)l%HgwMMhoRoEmc@TY<{%9!Tb+d zDj8ZjmTGQs?b$k_lip%aBJVX{(r!8fRj0vDV9s_Xo(z!|*4GFRNIRD#l*66rkaFp@ zUy{~A`*l0{DCvJMDE5n&Otf775|ncJD^SYi{h-*d2SBl34}#qY?;%j^i)_?3AN(!2 z1bh@^>}358d>WLE+a!-=3$Nf$2s$lbZ>rGgl?HQ_k?5ha!kP zX<@cGloC^}ZKm|ioaqLc1d-02M8ve2QtYHJCuKtRtud6M8dOuUPUIZm?Ujj#f zFN0FHUIC?Sy#~r$>RRwk@O5w#_(xF6+8f{(;5smqu>S-O0sjn+1OEaRgKvS%BUrpp z6l0ujy$v${wf+YF9oz^q-mu;Qld)m%f@0e?fkVOf!BfExKpFG%akUtIGiwX@Cio$k z!hL=O4hBC4$AH_xso*DIDYyfy20sPs!OuV`r@S8Dtn5p_c28}05%C=uDEs0^%D(g& z`!*~4BPtko|L-;5Qxn^{|HNP;*nUg;2HWq{WK))T5lzeTVW5=d!$B#_M}Sh6j|6W7 zj{>Fr=3{)?euqJ6zq^9ces=@glDFMKX}^yLr9Samo3`J4uut1>woB0V`y^1>?+j4J z8kwN6tdR@KSfd{(V+~%8)3L??P|D58V9*Z#9{*X+zsj$nCNhb-9N6F(B)fAJd=FE7rzBab56jkN@v z;GnUV#!rSin`ua^brM}9qA#=KJW|68Vv=2{NSp>!&S~6y>lPAiX&IeCs1*G?ex^Z{ zp=5%-moqM`M$tLso+MvV_?6niyV{$4xfhhE-3N{Ue+iBSe+4#x_k%0I2f$U}gP^p1 zzX7Gq0vTM( zru`Cjf`crO-ic&^B%kT>NF3yBHmi~*>GL>?camfQLuP^O1fQ=R5oZB|9GLC)ahxoP zuR%;DB5!cNx%7O8bdmJj1WJ0o2TFRr4@!D|07`mp1|>b&Tt(CKLok@0 z@=T{3)J#33jM5cy=TfWS!MRlNBRW!_`p46=qNuu7A5Iu5n}xD`Ig};lmOn0GQBIxp zODR)25Ys{>b~S^abIA4Ne&m{6ZQ%~?Mb6nKCMNONnc&{Wp&pJ4rCj+?&Q2)AP+ zL5m+r+f%`z@q45GO_JvpO5^VV*>=zgTs(UYZcc2PR0C%%R&Lg*hV$jA2oXpfmb;%V z0>=u9z_EIr;d%Uw)e|pj2isvuWj0p?VNnr*Od5+o;-mtZcosnqM<5fvVvS|6l80~s z&pVq@kTcYsX`a?_W{4NM3L9+eFms^>DaJxVD3gfF%8D~Ko@pkh6Z98F%W0!$&ewQ| zg^^Hr35=dwqJ)fk>L5@DDXj$ z@k>l>)EICzI1YRf91s2lEC4ry6TlF0;pSpJ!AYQuttNx{AT#o@N#JQU#Jd>UjR zxC|T)UIw~+@uaqG%Yjxgt9x8!<~mJ7+-U|NbF(b)_RZ04{uAi&t5o{Bv%VZw5shj0O^}ZO%fybZ(Dm1ODYB{kBc~~Z|m)I zv69kzOkknpwi1kJW!+9fa+c4;R?2yz99Ja7(4dnq5s@JqMlGgvE-{D^{L zW6Ho0;4E+~I2&9BmV=jqbHHms)=6VGffe9-unPPbWKJV?0%0?!5gP=~14o0*ZRoR2 z3qTo5ECfqH=7eGuAkQ!8Gfp(9Ixn*rduOMp@6W)Wf!BbnrCHa4GCy-2_&#_&C}r^HV6a@@%7fBUmc!hS9KyZNILsqHIe|7? z{D{ugU?g6yoo5`RVB3wggqGk4Jll|2V>wG@M7>q@CNWDP}<3t!8PD3;H%)P;78zEFqvz;4ju*m5zGPE z9xC=@@J;Xra6Kqx_^;rL;0ACb_%@itJ^T&S&3C~*oWBD`z<+>efbW5qfFFQ&fLp-7 zfLp;&z>mN$!GD4W(%yXx9szC#SsS!=fTO{kU=jEkD9;If4pJ|yFTme|yTI4Le}UhE zUx9~`H@m@J;MX8)MAkQ86vV*CD#0Xh8Q2EA6l@FL3GN5}9&8W30d@elfct~rf+27} z@+}2C0_+H8f0k^z7`zlb1eAJ49GlhMe~=zMiDD0aa!73x`^IIp zO_Dj^0fD+JenjW*;D~tLwcB^I&iOyrBJI-})83k?waqK_57bOaeeOY?IEUng)aPUQ zb+P4}$Y;r)t)LjdZQuy-BXBJEPjDIdF(_@+cJNy86HwZy9pHL!Cn#;yXP~rEUxI_c zuRv*|c7x-=uR&>}z5!*;fHJFX6)(`}{3@?(#}*)O3-U~%l?>hqwg+DWJAgc!WbF@j z<9<@WlfaIkv|XLSbHT$w`dJorK%Won0g3(9>MWwG%c^+UJsfiE~I=OL-p7ucs{^Mm|dV zj{&898VgGMln+Y#G!B&L7Jy5@3E=hMMDPJ{68H$nc6+)Ob{Z(lb5lTRm!^VJccy`| z{(1%|fzN{H zfYL72f**r*;C{3t^FV2j=7T)DVzKpKYy!9tq(5o>1Y7~03*HQ#2hyfm=YzC$7Tb|) zdxY(eVf(Gc;8EZOU@o`>SPMT^bOV_6`3Bg965mxH94bp=S;SXY9?*}4iu$NCv~2Y3zm1b98T4!jX$9niW7 zl!oOO;3446U@!0%Q1*ME?-G-3tZxIQF5V6X>$lheY0tXylOx!k@ys*N+xq8^#1FyA zGiKK4c>T89Gk5Lpf38WBkzBBPw`P#l!UMKH$RJDFuT=8DIVA0+zRUZ|?QHqW$)^2! z1C;h_9XJAf6O{JrPvA1}&!Dtl>p^M1{sKz-^%f}Y7n?1Lau!h@F%=b85UC zJMEMfB){Rd{Alu2^5S?<+N>U+ zv{@&B(q^%_ytY{Ohl?BR}DhHIdt1l>Hs$5XU zRQ*92Qw;#6?HUBim})R6W2!uGBgh5~+I9^EWlS|3lrdEVWPZ^a3H}5e4NBP^1O5RV z2mTQp4}Jzt1b;-^GYLEnoD2>G+4Md(2|NvyXT_(0HQ-dR4m=&a2%HYC1ZRMcfW;u= zNQ*72FvIK-zz6AxOJy{RE`_v(5!+->mb%yTL`^Q{egF zo8V&bBX9}Wj`Fb-ln*y719_gox)9{~1Zz1c^>qa(bAT5Tx9&`INq@#1^Vs91U{cYP ziK8b+*iNo+-0;!kMna}C-RIrwW_Yx$n8&k5SMtq7)*Z0~Uf29`cCTtCEM6eOz@9m} zU^%6{l=lGx`{Jm}sA&1D*>x;QdV?R5V?4+looCCR99ubzIKJVH9n%p!?KMK4_L8TY zWk;V&=u66uK9eG+MY!A3i$;$dF`lQ>jY~VP%akD#$B_&~&^Yerb&O1$IDR6j^CM3x z26wKK&4xA{C~KahM~o<%EPqDk1n&3$b}Sm_Y&^J+I~I92F&aH?Qe@&})}PG2MoHw9 z?rJ1^64g`0>)A+%kM|YH`#?s*=QMR6q7dh2GZkH+%WNHVNK;WH`u$b+7<@Z>ARUPA zqegdFRfT*?vs!gz5YqC#NV3z>-zf!?hD@9|D`Bvo&N*rqNT~7&u!+$(6+CciP!$Cm!$OM|1Im?CT`qr6#qTe%!Oaxb3)t z>js{9_i49&aSrQjTp%^+sB21}UA%L`lCKAiyyus9r2I?Y&qJQ^%T*I@ZRmCDyYDwV zy>0YE6Xd&>!*(zSu}pw z#G>JBojBdy1j^per{ssoR67z~CufAaMrT&@b;+*L^6Idh=Y&rR&rkt!5tx%&bJ8Ez zABQPfIw#rzl>NC1=wnM?Z3e&g)@GZf=%?UB7Sa#-VP1IZqLDH#EM&<@LR?d(?;xkzze;GxqFqWz6QQYe?qR zZM}`I>^$t`S$efKHcPQywpqw}o}Ns)hWwJvLNdxyA1T(~Y!;FclP&wFD{I%@k#(>c z9}Xu8i}h-D7P5x1AbYUNM%pZ7od+{|F`I>~t6bT&u523*mdw6vdz!GtZUTw9_Qmi#L3t5kJ zGSBg)SdZC^w16leuLY@?AD#cRQPrABULPfD~(*%|h0DF!7OMZLwL%`plL6%a!d% z<{G{IZ5Fb^uB@voo7$O?gT~-Co3YQG&DbN40b5wFc8<+L*0V72kzze>vyk}>Us6E-Zx>Tk1t!#U0M3EjIh+lSvKR| zY!^N6;yek{z z%JN*bn&1NBM%?XS>HI(!d4NI{)+bm?Ioy01N`Z(BTA*&81K2od&HVauxdNFIP zp{%u8inY#WA?y9#thuO<4{a8*hW9Z(Qmj!nBjgO8L(ouG*(}9cZL^TIHdDXW#&y@( z4BM1td=O`wg{;XrjG{G^l{VvkZN@&8ea+ez_19)ty>&rC1d< z!`}BdZ`q_+b8JRR!o&ydpv^*74<7kxR9R1(g{%TtNM)04#s{lmDJrY6S;%UD(GVfO z&}Jd)S{RK9vKwp`vL1xdgdlswW+Cep7)=AR*KJ10hGG1XePFYY^(74BkL(+p5tl*c ziT4z%#%3Yw78r#Qy*q3cvJUyN%shzfaGQm!3>ZZaS&q#@)>s(D4OxNBLe?x81rOQT zHsgL_6g*@X+AL(<1f!54yTxW9>v335l|5y%|IDtUJ(J81e~*$;GHctptv<1*PmyM4 z*A8|bpLcc`aL!oZtR!E!}cxJJMq@#%(zbT*Z$&e?$U_a*vyTyD@WD2wkvZY?p)8AmUhz8ysltc z;LiA$GTuP~;_&YJTG+U)VOx)eMIEgAlOH87t);8#j+H`3w*K_6IZ3mH>7UKQ8di5) z5!t!5{qvEXqTCqSxrKdTtcFD$@h@*0&>uvQB-T zo)`X9+&}F!ZPkuWsVd&lX~vozou)ngX{WTvhOI}5`=%D%HLV&W9SiITbXXDD)v#!n zRo}0*$+J=JXQR2FjayHd@M)*i$Of+6uIn7S3vx4!kzG#k=_?}Z8}oNf_?DiZWKX*$ z&&@XC_THJ#zU(&{2oZmzE6ICMLZh|J9=`&q))4hpFh9vBREZ>&YDDx`RNlH z3sb#Gl%ZfxE;IMkPW@XeQCds%sefy?9MnzD5H++o7tUY6iqHo?8Tg~!&crpV@kru>Z)nhH0Nkn5crPStGR|M|!hqAb2-6mB); z--YIF6PqF{@pZ!l&5d-E8=4av3mWq`kW6l#cWqd-IjNq2)Z$1$@|9Qa#=R72yIPd$ zlKI=AzH?(_L#O*An;TZOzpmlk_HCbedRN;Ok#$?!pPj#!>$LP1!Qdv%iCb5$cPpByByiqJ{d`{scGzGNk7QF zlbobv)8xf%8g{h3sLk@ow@vw9Q%t{^*y)kTw@!)f*qFb)ZT_x{3cp#NhEdf#+vUi< z_Q!K9&DykIdx*YldC;f zL>_4JRDgy>4D2-Ux zPdiPG^puvfVOxhC(x8cy_I7HdhhI7^(lxF!EfRK4)DX_LxSgh}v5&wORbC*2@)zi6S3AcxH(o(Ei z463oP3uP^pa@VoNTk70WJfs<=zY$6OVts-3JoXSs*Omg&+#e*#Ev7sjQ=T|O;u+=7 zjIAdp^6M{QaligdmdJMqmI#f|K1PBz#COFGE0)T`eNDd0wQKmj2(9`Ir)nMVRIQ`z zjHCX{Y2)?_;ss7aqtB52%4V%%o<5uQ5Bj&*KSr`NTK?t+Z9Iye{X zN-SDEit~+9wpPg?L52v8`KjKXa4JC#_YNJ}IXSntLAZZh(n$)UTLwI%jPGwhx_?jm z@jm(agW3;yx%0o-etZuL()EAdf@paQ?^}DdTkOYfa+UUK_m)MFeX}2a`yzq=ssoOya5 zG=}>)U*v08x5z8q(vaGXh?!_uZPkyI2G>nOrwg|?E6fzc^O1F?=&su`g0P$NSCK(( z+ugy}I7@FnwX9Qb?dkmD^VP$D@*{7zB$aAF$&v|#{M|ZK-i=)!Sh%WF(-y8_+7GuV z?QtR_VRl_!sf!nFTb0Z+WqlhXn+Ha=E$St0q|-Yyy`uOT z17asJnVZ_Qm8QrIiPYVs3C*PO9FjuH?@m{nKqIMi!tAh4%%{^O{jk)0k?Pbdy|Y64 zUo&3p)Mw4SBU|!7k8$e}%^by_cK+z9rAnVNEwV;umUHRlQKWV=b7DsDYqa&BEo&Jv z&@tA73g(GykF7c1#aCnDPNxskjwy+FH?1k2YD^Gra+S8UVUEF52fu&&{eS&`GXDSi z|5~W^Pr@PS_v!!p+i%&cYv1g>zx~d}zo~&gWdGmae!r&ecPsk;+rD%E-`{o@oBqFa z1^oU06_L$M7RT)ZbIRXo__jGd-`B8>>8*WP&-3TsZ%7->zg7=*eEGL^Uc;hPW-eRX z$MI#%)&V*i>taS@5z~wEj002YNv)8%h{iU~psXEpTPu=Wi>daK=3~$8tV}5|1L?Lr zc3X40G(6K@V7>3@9i4ivVxB`3JMK+!jZSIPPVYLOHg2~pkS5c`SRwP{J69BLXKvnI z_4yx&A0ysdr5B6O zbrM3){M{?^(;ExZ2kH{$c`1y(2Wpq#{1MJz_#`uv*6ydrqBn7mrYyC2EVVYwk_&gF zOCZ-wi|mq9a@#&-E@)b0SA4;DIt#ut?8RTR@Vi|!n1*tegqv$@+wvgkW9AJu)9>HF z9KuHWRqoPux>WA^v_M3*9xehpE3)7$FMi6R^t4qP$%aLnY!9BO8V~jgwBG}_abjd+ zqM(TWiL#2^{36>rO^M+A0>$HS+UT<%W%&5-O+qlv9_7Tr=aY_-p;`Y1(5aMfNtR@tI^DFsVuZj&p7D9vpY_ zJRn1u)aM0hVWfp}>i6Da?y#)d^*t$IeavLMVzxd#@ks~IM3q!`gi92vd;%Zqoos+d$ zLTI)=>R;h<*28=&OxlC1J6akKyS3w%n#>ZX9cb#-!#qw+vij+ctXYjS>!XdWx|Tlf zl~g}p3_1mLsu(i=A}!6&R4J2Q>9k0?voI+oKh-($#Hw|Rv`z~6meV>qQvV$^=7%Ye z;TBURom)3)(b$^coQwDq-;w%5kel4=9s9CK)@2h$MuO_%q?ep@c1}Er*Seq@elJBW zDZZ}iPp_^0j6&PEg8yDyTs$>1NPz;>*d&F&#kJ%Xm&Y5gmWtA1u8F^d3Du}eqpabI z_b>i3p;0Sei{Z#xcEWI+9Q7woW0O?beZQM#Y3?s53DVqu-FTY&^TLUxKR8F~55tlA zL%?`@o@@B-;mG_LMvW;jfB4dn5A7&cjRx2kA=boYceN&;e!E5$HYQx!);`Mj@1I0tk)3$n!vyFN@W<)=Jy*F|PIW!AdORHFGm z*(K?zT@qP)(bW8$(JV-yCeh3R#o|ehito!>RzDA2Sd|%A58RY*v`XQ!G z*lc=ZJ&Dym^o|@u>rX9tazIx8T1pk^hnTboSkT15IZ~fVWwxRfJr3W!NslApy|t>x z(Ym0VxcV%;+gh}4uG)A^)siF91%HEmp>G=KUd*oH2AGAO9i`Mq1_BP-1fAcy2_47H> z8It)NL23U@d$Q$qPk%|KdYt(jG5(3>bEG={-+Yd*<0t*7@7=}uf#-AnJ9|vpzNcHA zmMoS6CQlM_;yJuR-UmFXC7aRZmJCxraL zIT!JV;Yj@9BFGp_;=4P(a8HE=gcYj;%2%*>1xZ} z*{DSGOzcylAE`^$jX~Ivh3$sq)%=T<$qV%J_@!G@_`6(X#r!pTWw0idoy}jP*9e=- zFWtI>zsAP{FyrH4*d_dut;hIle7psl$}ip8!r#-C$pe0M^goiV{rP*2vM_(;vDaiP zkH0Zx6Zv~7y2;iVu%D=3`2>WyuIQNSE`?pDdKbaWb!B;_NPWm=l_S;lPcXStw(O&W zW3I0SaNvLj$7l##9;pX9Oi_~?#xh3d(t0*sz)Dt@MhET6tGA+Lm)kZ*@w zsXp$386UE}_*v>>2h7B(9gm3`zX!mK--BRRsbASv!1(P88?Juk+pnY4Rkp?~P{xNt z?C|7M113D#8Va7*yUbvm6 zeyd=zElRp|IqVD*9&EZYHjKB%!;)o-c01%Wn2F0Fuxr$njo9swe+iQfP0}sdz}v99 zUAD_*4eiY~PU+SaFq3}wz)b8Pf|+al4tA|x<4Kr_{fDp_l!augT?fa<0Wf*^BH20! zcAc`$Fymt|tV&}w9(KLDo&h^YW%t8=uCi6IaVlHyx^9Bqpsw3pnYBNgRjaHc%!JYz zc9Y6ZfSFK+xUMCzU#M%H>w2;4`YYHz?kq*28X9*Tt@^33i*xu5)F-hTX2R-@CFGU}7hdtv6lShc5dPcBi@~vvG!r%Ym@F zRCbgr>jSGnmTnD)RVyokEmyr+Fq3Z;u)9@O2OFVm5p0b5xD2*T*>7RS@6)hDRqr|2 z{mNc~nOgRRtCz%p)959`#NH)aDKMkg3pPU9^x%yn;q4Obt( zhW$oeAA>DW*^4k^LEeR#@IHi@@IHn;q&~iYnbeitWyYxA<6*`}CakmS<-#6THV|fF zFw50D$JLt$dqnllb@i@+{Z?fwVZ&hQ)_t%?RratedkJQ)`zFj>_bu4(RPXOFbKUNp z%mzp4)*zViF#=|MjDbC-J_=yQ$3oZwz3xRYlP)*FjNdz8#_zqb$JOrxFyr@CnDOxi z%=k!3HJhp>Tgk9@)kg}<_~-{SdP7{j5wL%#-WXSJE^M;KYB|jKxB_;B>Rkidq)aw= zGa;+Wjzd-QU5?b)SU2r`LTJ zX0E#tX3E;9u=mwIyUA$<}cuyiC{!>SF-Rl(nHSQ`Tm|jE{3*T~u!# zY_qa+VI~H5x_ZBM^&Ww3QN71qy+6Y~RM|$DDQnwcTUGX%D@&n4HrG8EX0CfUY@6yG z4KvrB1G@lOy6)R;d|c%ExD@u0`nbyV@q3s_msel~>iQnc`284WuC^2QPj&ql%v`M> z&79F20y|n=N5Et&?__HX%;?Q`^%lE&%Y><3qpK%d?=2*hbn7{o33;vPX~=KF!s_EK zm%Kzk3OiR_&w-hoUId$>vK21-EzI2I z)37kE$<}kQZW`W8uzBj^3s)}*b7b_AVck_P1!nYm!6vDXQ7{woM40h01$Mmpm<}^O znqYPt<+A%=b{hq=+bEdbM#1bh>M*n6S-MpSE7a@CR*2@h^I_(?=fUI?M9J1-n7Qsv zFuRR{ouICd!4_yJFTzZ!y$dtpeF!t*eGEHMeS874+o;1GyKy|s_{fAELwLznF6<=r zF%V{AFw50D$JLt$lSSiX>s(jw8dxutt%TWa6s)((9(H9f!OV5vgdL;TeGAq{_5Kbs z*X@q+TcUS42xfeYfEgcSU>WM80A_qFgqd_%0W;}xGtBtC8)p3e3YMvUAAy;4c?xFi z=?5_5;}cj{jo;@m8FM9DU%|}Pj>iZYy-b+V%Y{u>y@4>JSL*6jx_Y&+GgWVat9KXd zEWO{yVJ6T24l{NCBbcfC-@@c06^tQ{G@INdTRmV#mI0%g$MvT$=~Fz`hMD>{*p-#RCJ-LuE!a;~?-`eEaM|ZB zJ2dRX>S&mWRae-(gpzFagqc|Ng_&55gPFJ#!OR`af*HRRu=_0WTL&|K7r~6*8)3%B z?J(ox9@sA}@$n$c_;?&v}%Sq`@67d);Nb zT{ev>yIA8=4l`DHG0eoO5oTg_8Elot>S~yY)nl;X>h~>}89VQU8Nc7aFk{?N+isTi zw6YGc`RbzxR;8>8_Kdoo3p+<;OJUEd>~dFjD{QsO9)gWiy(eLRP}ys)>;sqyiV@SOYZK}>B+F?)inw;;Vpt0zZb&RsOy!k>_*rND!bd2{SNk`%3g$-P~LT2x4~Xg z*Illx&GCH7Qe_9g%+)%>UQt-IoOvqKP>*cW5)b$qE^)c7=71&yJ{fjI6 zC+u~Ved)@Qd+@nTl^qB(ap?kkLuEZ&SwGl1m5qX#xSZv>R>9s>*O=>it?T+**q_vO zjqAG6b^Q?bXLbGDmF;%|A6-(}Auw~b-Y^rtA+W!wYrZR+342Rrm9Fe3u)nHonJc>t zwn1e#xUxH7Z>#JK%vva?~!lwAW`u6}QZ(GXF4?tp!)>|U6ud4G2G-f{KbhizBAt*+h)CpqC| z!%TSnVV|hpk6|XfBG_bP>DEtRCI(Aj#>WcS4)t*f%=mZ^X4=73Fk_L@dO9{|fXhl< zcB#ugfi>vWtX_`I=?pX1Jr-uJdpzt@y>3sKx$Xqma1&FQu{l@4jNhAJN2!lnVLO%G z1v5711DLTnU%)<7*S5W#Jo*vrbCn(D%1(lPp|U}+ajO@|rRo-lKlxv)0sI@Fbog|$`LR97|= z)=p)Wu51BpKb0+UWtYH`Rd&5AyBpSCWskv34F2f4z60x^t~*@UP^J^V6JYzR>&Y zV3qyal|2qSL}kyrvOmKPRoOpW*+;O>D*Kl!Ynx54KxLg^CZ>nM4p&(>SN3Cx`lYzzQ`66JRC=XTVGh&VuD?45F}k zs&^60*v@-k#&)iT8NaW>=oXS1Z@~Jg-}NwKJNxu=Z0BHDe{~%LGr3;~8=$gcS5^x< zS!GLLret3NlWlU7tzWpZ-@;5NPs0YO>npD8PcUOUyY{y%*}^8->I*aB<-?5MDX>%2 zwZxUpg$-8OLRYo|mZ!4oVJ4IZUDqdIL)2BaXEz~#2pg)huVBWzl6YCXuP@XRhmy20Ag7 zP3`4_n90_UVJ754*L60mKwaxx*%hz}D!a**-2;;~;AGvv-sI6U$R?@mRab94Y_iHW zxw3!43RNas*&Dy@1~J#CvQ(In9S)nKvhJ=d7dBO8LtWWe*y$>p>dI!qrm0M}#y8&nkL#AbMpa2xrwUHr4^OW;GT zk!fBX@gq7N_{kcBIffJ!RaBJ}R}|?tsfw!khEZKvQB}2kHLsQ#<^x?#$A`i21qb5V zF-iBQI0~S|LCz%}&izbd5k}6ZgA%th!H!^rUweH@ zKv;^d9Sh_00{oS<;qwAE<3lhoqqoLpA&bGqaBY{QqjCJJFzSFlFag*T}hZU zJQtbI1MrALN}426p2$YX_vq?WCgJZdvayn>Q63jaNt2tC@6;6yshKslyjDJhH$Wzq z^cak?IaBqnUhZ z(~~WuJXe!A$|3Q@Zs-wdYrbea3Y6>^4R!-h1$%;HK)I)}w)+^k$u40gyM*!OEdCnV zW}9g>;w8+c2s`R));PPYc{Xoro;fmt%jcIkbLh@!=164a2xiU`$a)7dNBqc5XY%WC z5P$SYs;xBDsFk@hQYy#L`m(ZU4Qtq@5{2WkVO8~&@tWkVUHg=6V)wk6CUKX;n`!ci zRyn^2lyqnWnV7LI277}|pxo;vw!5^KCewtOOcNH;@u88)c+SX7eG>CWO|rMvi5tKU z4KK85ENC~;-5Re8c`I9hE#gHuDTm*(QHyNY!uIJ}*AC-CVqVkrJ1k>ii4EjSUvhs>(d1bh=sxDj_Ei12#mKs@AeVtEOK9>esC46h9G+b6wH8(7N3BsB`)A&*6 zs_H0#gv+XG!t-m&>qMbezfa@3$~S6!VRK%hg1N<|qR+MQ5|`j!>+^t)6Nc@@njKwG z$_G#5o)U!P)p2gN+c85*t7b-f$=7qbaSWw4m-6KtK9G8HxLd#8S!K=t60|j|ws@Yz z_1w&GbV14NaBcm}Md4aLM_f}}S&O9zb95`OoENRB3(qXCEUsBdDV|wf5$;wR=H|G9 zq_=44(XE@f71xG~ZCAO5_wpKUMR8r!@e%IUjmw2izEste&mtH3UtL%0^H(cvy6Z=X z*PncZ)$zskN+ovu4<6mRnah-x&y7~rN;gkEl`n`^)Dq7#T#pVpQ$y(1jc?vo%dOJa zs3|8w&zK+1;9sxV{FzO!jr1$2uc?XBfut;jB@Lu_kx_OURaaFnGWXa@-Lm3}+GsdC zTq2*`)mXRg8st%_bD`G6N%a$4EL1zYYJRnJW~qs@YNEAtZG}f_YN!!pP`BEX!+`=G z!hK3{O{JuitueEzu8tZOEv3>83TO1rz@cO|iizrLz%Lh-Oq3d2RTiEp1-f=%xW3jd zbMi@UQW;TYRalA#@=);l716S~1XphsPs-hFTk(`||K5F_Xa>WptEx7^of6K>jNeUS zTQjFRO6~C1=0K9^6oW5Kt81NlCALgVPhGS!Tvw%5itnkl($38%FN*nL#%hXXL=&D{ zUrQB^hL4?pY?v%Ow)j|_E&t_=74pjhQNT}k&rLY?r+ekhg>__@*8nGqYirWPuj5>S zdVNg6q+Z6%W%teyJ2#A4M!`He?0(c%?n&(5 zV`JUA4X-Mx$0XFrx28`H537h4SN0oPEiuZ zSvst0u7vKyr2q}0CML?V&9BvGV)1;rdf016`V5&gZ1m{A*xx?Gqw~s3q9bdH7fMs2Caku)xJ2xS?KW}b&}L4K z+pzr8$24<1H_Scu87-~%lF~jO71g?oz__cQd^OzRGbGi; zax3shZMV^r1f5h>UsDnd3w6V%9Ml#>Yskaus!DQEFJ*^qr}h~c;Y>oZ!!em9GA^XQ zJ-LaFx|4ynoeygS!X*_|wRB}n-y|G%^17^|zIL{X!{NA*4vQ(YZS*3V@@Pq78!H~g zqI&D;tel{gYTkDdd-DG$JJp&r@#;8M>Ibkc7E0WoBfAOUp~71)+zAUGsD) z|6kjbbG5GSs|A(%icPWWdBC)2UG|t3a~?M>=6o-vCCt&Mnfb`H{Z?YjtE;ptTvt;s zwo&yRlY-&EEcj){RM@h(xw0*T$|a0JOpXYeqtBRdFLO=%d{|XQ{am`fVlpjT3FtGi zYQ7OVGHFtV4I4dq@`&OEzIH|ZIreI9aqZa>j&m-2&$en2{%KXEAc>`Ax|~HJwODq0 zY1`juWvS&@HL+XtDZOS(`$9omCVHw>CjCXvc&@IztV~98GF`|K9CtbWrB+`@Gp>~A z>(#X51K;x$Cn`+ByF2eZ^+RI&LFP1JRm(q}%_?>f2XLIO)bgLTM-d3}e{+ zGN%vd)wBDKZvRl-;zr-?qk8SG2)}>7vAb*5+$w2x*C`gC`L((`Ml`M_w<||%u)*zu zd4@Z9jD6nS#)$^=E;YFAR)cHq23HQ@S(4#Q_Yb$uIyz$Ijf-5+?cg|`k^h>lI63W9gv&0V9hga5598T&5vHc@|t(X4I6M|^jD2bUcLIZ z;|}ip`R!NCKkUgz4|)I0%YVD{t%*0j_R`uL-Vgoq4=Z!e>)7qcx=jt|55BPX*|pb4 z&iH2Doi`mgYR2y;4L+)UyIqkhPA@q0g8E;-QLx|E`wOc-yLoZSPc|Mf<9EY{T<~ed zpaGSCdidG7>n~pR$r(@H8XbI2Xw~w+X6N2=-K!NJoRjg%P4E7H?7a(o71h=EKOrH+ zlSmScii&zryi^f$zX)Qugo`E+0ti|(1d>3wBrzAkDtav5Fr@WXA-=1Ex>!CwGdu6Qk=i&c;p!>;Qhh6^Ae_#FFsiXgM-h~5R*wO_pAhhB_{CH95@Eo*3E36J#dn+d+|$5 z*fhedx{C_hGLwZP@5B-lWa!{O2DgaT7+w;Pn6OT6$pidLKvD#Vq%6dJvAN50UO75-7q7B~?f=VLfG`Z)4! z_HrNRBsdTFIC*eZ_&6irtn_gz;jHp;s^P5maTdT?5i3yA?G(GJ}7kv~PPpZnu7des&IYKe< zNc%}lkoR$tuUF5yF%lck!74M#6Hi)9JbhJ0+KuGq_3Yc0#Kx1ZGO{+u$yZ;EhqV?h zvld7@kt0kD!kJ&Em1A?{$}-AIj%1Y)>Ss1bXt^)z>SH)B#&BMX;q0?HDdz6Z3vS{I zx%WCql-)key-u+?eO;M6o0H~p&WZ_jZVYFt%aOdxF*}BHSq$gK7|#7MoL|OpejUSk zA%^qk7|xCu&POqv1V_o-ydNCHIo{^`4#}b@E;YM;5?DIaA?mM`fa%COFGc z?jIpTlFfcjL3Z}eASb6g$jQ&Z zZhA_iAiE$O0-XGu?jR>OiAMl$n)CBA0-U0J*$K%jQ&c!8$SE!jaEfy$2RV7Q zK~BLOKc_IK_|^a?H+w~ple;#^$y*oXrK#oYl;VNpLGc04&PEG!um;1uPQ z203|?1DxVqSz_XerzodjQIJ!(EXXOkC&0K zkW+AVkW+YLkW>6XkW;cMz$wgL9pvO}2y${a1vz_U0fbXJ?R;FA4Ufxum!tBgiSt4swdigPf8@0ZvKwvLGi%cGlv*^W;)elDjg< z$y*)daTzJTgrX3}$+a}$PzNH$w! zdRg93WS>wxMCftJ<8OCHLtSTw5*dFe66v{DWYeqnM?>9VhY}foC?<|P_quWTwo9U+ zWVcH>M8+RV-daTSw##SSGh{!mP0dG59PnO=`aL%nB* z5*dFenNx_SaP$=u`F!3f`96%!iiTQfhY}foC?=^qp)T1c&JLW?xXunGGX7BV6Up~AjU zlP~x)mE+v&Av=`F5Ng((d9Cu9H^%^elp!-6{^LnPRFA5wm!;I>8k^hOgWe))$XThb{JX{Us1dFZmFxYs%JJW8dKLcrml$=#s@>y^Q*n8EsIpVJhO@? zz#NnBh>aX4)F@Urw=@wK)irWH3$c~*a=D{zvk>9Lu~g=4l>5n#1{C4u`3`ArB{7>; z&sW8jlcu)RG^>EuibWadTwM(svfSMI?U7X-umoxsW4JEE)5-%p_cW&IxmVow z)e_a*8S^; z8N^}E+-fqX!)t3zi*>F~ZgS441GUeZJb7tmB5fmTs?2<%THR9D*51;nD;dY}$*T9f zvaLl_%Y3P($t8{QDWAk;s?28SMTaAwk5soTklaY{1vT^PCf6-!rgy7rq??EqmX=Cv z58@X42tIPu=`sw*c| zPpuj^xeO~gW&Egd1B)EqWnyxk&2O6!-XoOZTeu>ZcJQ(&jX~uedz>wgo~2gC z2=8(+k*no*BQHF>hst@DjLEeyzr8VX*`?m0tjL|hFN^g14yIhm;2ERJMh~A-KDm6{ zh%=9`m~`IAs>!2{_j4zdj~YL`qHNOfVM+G;{5tqmSPAlkX_cKheQHz7yy+E}hQ~Ct zg-7z;)%2PLHH{7P8``Ij9aBAFWECUk1x?f4FV3dx0=ntVd{3Iw+SWdEaMR4W)|uAO zOvz6lwxKx2n$|AfD-2dN%xYwldmW@LeG<=7CgIg_V#@@7;G`&r^9?2#n z(Y+XaW0FIxKAG2Qf=5m$pHL+O6sptk5-h{haSHb}++H?U#vDA-8D^qYUTsD!BgYOO zKfbJ-E8cs0M?Oadu6Tz*{*;zid&We;VBP_e1iM9ZAw_R)W)Fvs4qP&KvoA`V-f-S= zR3=$lrg4^6kDoAdLgo2v`jL{^#tr6Iv%^bXuAUFzeBrD)7&6%uBqdX}q`0J}dcJHD zlEHazl-X<#Q-_3bN;QW1`AszvM=G2{kr_R%yv#b76ROyfHL^&{sa%tBT6;a~4O24H z<+NJHZo1`6U3GI4Y2oREP`X*)Sdc1b$=>?=KG`sAaoL`C&w0D#wHH6(Ir<#s|F*Jd z$jA#rpY|$vZCLLO_b)U~G%^xieeuT2UadUmlhoROojLHdSKl!k2ks?|HS)~ql`T!P zdD00>SJoOnWl?eAx28|!8)5m@<6ORMo1T+BolkP-x1;Ade4jfwrzAU{FI%U#li2Ax zbR0bA>qj(;uZJb~3%~IgozZP$eZy>0`aao~*^XqZJaZV&>MNiz4b<04n+oaHYrGMG z7pBOC3h9PnyiMRtHtrHCq+2a9Uk*<;NfIh#Er4Q<7~aJ;71B+*Xx!)Ih?nh`)`XF?o6j< zZA;`@roqj%Gp!Flct1>BGKnLpkg}2E?z`?92AuteP36O!CDq%W{M!{zKJ&_h&XVeX zoilOA_M0uF0V? zO3AdKoJBb@)gomRmJ z!e9Tfh|~X#M^H~kCY{(BUpB5_l}S+novs;I9IoSvP4#B0V#!gwamCeAncgGLxT5$( zmiQvK+b$ZZ%F-Uj6+e?|@*FA`7+2)e+WMa15rQnW7*}`}{mRulnMWLv&C*z@R*tI( z7q%*A1m(n@?6?5e6a3^r%nD~9=UGZGe6hjZ$n5^MoSCJtr5TKm0{1ew9*!+rIzj$(+|3z8`@^cQ^+EA>p(>sJ|9LbzZSxH~t#jh~1tCHCc(QLSQB4Yq^B-jtxIuep8 zNZmF|;*N8$saXcwAc+PJ<<_+g%-Pa+n@zKX!#+8!%r*3dB}tRvWebz%vUien2qGf0 z349XDz#%nrFZ(IoO|R2h!>251nUy*~Mb2`j%!#Qa^Jl{0=uc=l-(ybo+_U4-a+@t6 zd6oV`BD_@?96z?qj!P>*$=^@G(IC-B%E6z5*Mcj-W#Gf$TJRC@S#TBjC-5;)wmM!7 z%BHtZf+v7$z#{M|a5(rhC>vw`3Y1MQi7OJU$6MitiBr-eN3b4c)7qhddXz9y*EfPE zMeEU?VX~*{WL)dkW>}(*J*Z8o1gTBC5~SWFDc*Xc(0%nLGCQd^Bh#i8_X`oy!>u^c zlRb#Z6GXkv7Nx5f_<(z?(*&76 zQf8tLhw-D{^mvK-kaBzlluU00M}vO>%fVN{Yr(&Q%fM}*=)-HE=)>PY(TDAz=);>} zCioU8^|k|)ty$j&Yr%KG`QYEd7H}un2EGd}19ySn1OEX^-To5{>dS}lC9PTf*|Z#A_Ijy?F)oVw>%kWo40y2n1yKHWpgMD#&YwbJIY`L*f;+fu7O^an*B z*nV2|;aE`g0asX&Tfs260UQ9LOXAomf=-Atr-*FyeIiI4;xZ{R17w_{^@<~*$U~eD z1|I{@0AB&K!8gDh@E;&L6p=d11A}^S1NMFp_j1}@P!FypTyVQr2_t$SAG3*L9CIYZ z+KqrV$bI4*vDQPXSyZQ#pIh&aBDnP~MeeP4u_xQ?HqI0_>TL{18*&Tv%&`D-)YiP^ z~i+u|o^0763Bi5?6XR9sYu|1A~^4OjOS3a>td-yqr)Pv|A!)mb+ zdayOK>fQuUim(zC-J1xOgH@pD-Xu_TZ!##l$JWKFds9KtJwBXN-D3-4)jgausqRe& z#ip>ucjR8M8r%S)myy4KHQ;~1nP4x{Hw#Pwv0IT4I2$|xoCA&q=Yq3A>{;YWkmvu1 zEdFl-MZcQCpw5bolgfAMFQ~I=To3B3gb|&+9{g5RXBWyFblqk|rUw~eFpn#4xzeF!S0Y$&}fuq4s!E*33@LKS5 za2aUzvLep|3E(C<1^0o8U?Oq$0gnd{0*8aCpv+>Xf%CwF!G&O7a0!?W{u(?K6nmKk zz6l-%k|uEm9w9B(5ukh^)ejs29tDmEj|MLQ`-8KqMIJ=a(1aYQ>sze@S}Rax4Ra099=P06pyqDM|+vb9axaTvj%b~}#=Y`j6U398#HRpZTe zcV4TV{aX7>Mi??&5G8kVGfN|oXBwL`^NZSxSZ-Txwl+U!WWkCLH#O2kY$17(lA5^= zMmsr?UP2o92F^=4*S4)&QEIZJwb|honD)2P%W1Vd<5_ggJ*2*+?UeFEm-U#4E{P7D z4@%oX54G)l8(Raj8zXxo28$Rd<>$ukx#(}@L+UqE_f(7 z4?GH-56XCV0eCvt2%ZHtfsAjgW{~lTh2BRRz;W9%L-1yBFSri; z7x)bL5x56r3z7({b**l&4{`4UWscxeQ0A`C-w4m6*5}|Dkna^DjQytOIOurF8yrh}8f43PF_9RkvBtV2QCiIoMS|JGsP zc92hjBcg9df(N#*DC@ zu#+z%EKxn4=JasR|C^GP!%z*6vhunoipN3H-b0;PXptDFeWN!AST2VgC@3akTV!=QTb z-{5Reba@VV3fKS+2Iqpq!TDenxB$EeYy@k;Ch$k##o)tW3-~zL3jPXg178B$!Pmh{ zz<0rg;6TdvQZOI<4p<0Y22wWG;=l0Arb5cCV?k|y}?3|F=%8c*au{u(n7a};GQc%pCinu#*f#PacqqtozLf>a zvo>Sh$VuSgpp5H}0EdD7z;i&Ji6T7fSVw^ugGYlrTUhEQbm<8Ps5W#RXzL|Iul zsqDNmmI$9;J#PHy3CseUD@oofQ-@cLXYDXc9nHnw-iu{bRTHW(s|V}qJ*g=A&cIq^ zS@gI~430H!^yum-m0 zRU+#(dr|Wv%O{L4!wmMx9EQ~tPQ|3^5$8`XW64}fW+qaVE%tiL5a;u- zMwJcnz9S`b07-Y&b{@j{8gq?(uVwpZF<4)=-cwd^{*A0m8eUa3{Cw0V-ttdPkM!gc zpIFhlmX^k*>Nb{Qq-5SqV)4DhgP9$ZeiotmaF>mybFH0l^Q+sQB%6@y8b%x1AXY$KFx<>{WXwUj6CNF+Y3wC#iJoVjnXS20R@8^vz$* zeeA)ie-0aQ$RjK)__OlwUDUTT_sj`-Yo6~n>Dd>?FxvW%_?h?l|KwWNuf4q2S(Uq> zZo#bPORHPI;g!Dfog-0xg(da6n11lAufOh?cNZoR11D#P2iDDO4xa@yG>7FpKYUvF zB4xlAhB;|9C&gSnD~x98ypfF4WKHo<#(Xli9mTJYtZYy!RkvdmUdWPBa0n{Z`mRld ztec?ZYN~acO@-vmlg)e3<;jz#kz42TuoAz$p$yFdOX$IZc`y^8q3Zl1b*>sDr7agJlT{+ zu7)hxHsu_Rd5cY@T3c-@WTnvq@}F3ojX*-yN*EF%)mmj!A!`$T-nkk}ze62wn6ib0 z@Iuy`Q1mKuD$nk!tn`tIm-kPX_aB${naj&M!nsF3o5D9J4_FnN z((EG*m1^bNRLFW2iUJ{3uiI3}I_4-xZh%dNtkYdyj>{YC^2%LaH`I8&+bEV!2$gD$ zwW*Nx9u!3g??amkS?AId8o3EJ6|%nV@~U0lJeSwx@-B0ESGv3om-l^__khb=;qo3i zmRTZA%P(vyWF60IO)8P}on%uX>vkv#7~b7B6|z=AQNZw4+Z6f-CC{>{)@GXuS$~J3 zSmEumsgRWz=4nTHeQXLV07Zcycf3u7tRYY&7T(!5^*{5)g?GuBzI7xGvCEIl6|byk zK~fxf?^XMmy{Dxi+^^>)1v&xM!|T!LwdiXPH?HV3GV%8`4F*5nRER|deBoCp>b5m) z$>J2N{Y-f(wys&%cKnjFAgtb39yvE*j!^n%r%+2aq~W-AS05ZBi!d%*yW|;u$>J=+ zKc(Sc_|ov*629An@9ug*qGj>Gl|@f$_&>FsZ0?_U<+0Jb&+YZOs5c2ns&rEFyRwWy zdh?9Xb#^llRc_4Ifzf`pf4Wlf?rl-@Q`4ENzhb+1nM;@M&MEeA7(% zrfK=6eYNuScx_HvTDIGEsr|dM?NXh)4(gb)Z^<(WOQ-BZmxh$>UOZiDW1qJ+(6~KP zN#9^b5)|(x<*qpMJ*1ma`7D9ekLc!8lH0$t=r|sIuIs0*&EI zo0K=IEKSu1=@|@ncx^$_7Un1mQt!9$c)giVB3)UI#3k8|O*o*|7~_cD+ZrqSO`J$F z%Sc{k(m*B2G-SsVw|!M0u7i!m zn6i%+pW+x|EXEGoT2$4 z4|C!>&FSBd7u!5XN>=~G>0>iAOxHgV>6ntWp_f9<;^gxph!j0cbX@MZe2 zUBYiS;kS3m?8cJC+4TQT{qO(yD*HE5@f8E9voLj*f$sVSN?A+Gx;x4S!VV+SACZ30 zSxz(K@?O;}G0h!i-ERBrKtJscoL0V7n_yMvly0Z1_Km8XF67Iyy-l*c&18F9*K?#C z4V6>dhy=$PThlwQ)$GY=!@YG1qm3nt_lQZ@j2@7ky-rfOw54N8J~`P9JKJ)?fMc;YDVh zmMjh*z<9-9u-_-VcJg*7)7sb97#4TfPG#*jW5wOBeCL$iZt=?yf*$T79Y>UH z@bn%@OS%)N}YpwI%SrUEkK4a5~?X zlRbkY59w`)66!?HH4o{%H)0)A`k~hQoJ>)?bZTzu(CmF~(b{Dtc}c%ovZCq|NV>0l zoJ4rWbcXb_K8kstDc_rjQWF|0jt1DR2=R>_WgF>rY=$U=Rs#yNNm3>Hx5=XIbyRFx zTCq;X5MJRu9cAmNfZZ4e_YoqklNjA*$~A|Uii{QjCZsc3R7sst6O!cKA<3B3{*{`O z4aRg}DrA&k$BOw}>mA7M^xWEg0OIjpTt5{j(>gPhDplM)v_bsnXltoNQ5Ln|GB(<)bYf`Do2XCjb~AN>1A{ zW&E{W#%{FeL5#O(Z=!qKsbwuoREH+3eV1EHI_V+SLnS2fPM3}5FaS%ql51*-X+A$CV;Z+Z5M(%9JlEr(iw*8(u@tflJ z$)6NJ`qgiHbDAQ?$`wN4S+BlHQnSf)6PtGR@{W~d zp5^P0&pNd~l$Nr;0}cQ9tU|+QB(#lW7OPj=S^Q0GbF*iUwR(TqEEIEDv>0kLBcc5W zGkKBX=ub-Cx~{)-Rk|-vyP^Br-K+h`z>rLYpGJ7sEH0;TStmk#as5CpGltmBGl4Uv z^gI*r95qK&ME~^sOfZF5B(EgbKPZ$G6m!v&RC*_#5cVEG8T-d9UDUt7r<5^TueN0V zCbgg7?QE}E*M6vZ&d_$fWCM18->y>;%-{n3wmV6n7c%E!K;5odSYB(b&j$NFqVYG* z0!g!{4bUlQinN#ClhA(I+!Qm>QO4vsDRs7 zr|h~!%0Zr(qa$)|O(X7(wo-40?mRer*{!#zhEipzZuNzuO|CV{5+Cix7~ftn+s-6l*J1I zD#r6Tz$tS}H1OkT;Mh{nKtLKey;(QvV0Fn}4CE^jxx`?H?Uk!nIp(U)@+gBCRAbCM zCdM1R*NSzWpiy7|n;avu-_x;Zp*yXHb(EXx6i##)jeT}am>+HPDUJyeXcTV{4t zIxXNnQ}mSnUGWH`*D(O|M13>f?Y%6Y5$%t(SEy1WR|S0pBcP4?aNJEhNm8r zxMRLkl%8frgZ<)WCULmNU2n&jYrCj}SWaikMuzk9j#l3BChK=QA*D{@?*gSx<8K|m zENd!%ja&_sk*kMlq)zykzSn zsCK1JgR*PTm8)^(_(sIKMCInWa`(D&54m#kUB*I{W2L^G(qBWFlx~EQ3A|+MT_}^5 z51>q1Sih}nyOU)_wjGwW)pl4`LtE=L?1@lolq!b$l~Q9|-UTji9+bI9E0np%BB)C> zLa5c;N8I;kD%}}y3D9d`)<-G%C^yP@&&OHV|$$Kfv6zV%lod#8> zVa1`XNlOisk*kNgOy%Z5)v4UQP)6<{C?hA%1}|5+)leqQzlO5Q6v{4BD7#FdOxTa1 z7Hingp-kA6WGC#QPmu<cGnIPB<$VBU@^LVYqe!nF3ze(XSx_UCy3oBUYxnY%cMa6pO8pqBM5$jw{Q@f4 zdIrkG@(R?W$`dzkvsCUl8b_^CxllPu4Tmymsc@-AC==geC==fUP%|~e%PzG8%H%DR zDmCdl1QdvOOneu*yatzQg);W^cBpgpZa;Q;kGgWda;bknnVR_+Dw7b& z);_53DV0D~nHoGD%E%Q#8M&cQ-&eWeu3R%zq25>a1u0PKTB!4sTJBzb*uDCMd-YAI z*($deYK~H2ZgnG6vh^*fo0KYrTB+1UP!m;d0aU$G-+{{3tMXNVN%K8W{3n+CfSZ;2 z36#m(CMa{?*P+aP_d?yGa-Txos#NYF&V9w%`6PH*RyCBl?|dk8->ad_eZL1qaPE5x z)NM-L31#m4iYxa96#tQX2e@6ST~J2uh(n$D20$6Plc4TUxznJG+$>jao-5Z3b*IXS z!>~b0T?KUpRF?H4s0m6v4rOfn@1ZJ{_bybGQmI)^3XXs>Dd-P%7gv+5flwyq)1gev z6;P8k>bu1z|~}HB$QoNQ05+uP^R{;g)+5&2b8JHA48d#ABQqA{}#%` zyaDPSjrj#A6Z1cysx&PLhdc2d0%hVm7Rtnz4Q1jx6UxMQHq;L_zEMynK3R`z>O=O1 zHoA5Nl!@;KC==h4P$s_hP={(P&qMu4soz7H_&#>!5{_`>lA+}JAlXWVGID1@nfS_F zxpSbFt6UY7sq=3`nL2NW8p_oy>j9{Rs?0j4u?VkNa<*(`;|Hu%A|RrD|eMEcP-S9Rj$L8`?V|goGbTVP!FiwpP)=y z{t9K%@*gOZf}|sz6dVNgpoZuRWm0e|l+mWMpo+MfWtBq}D>WO+XxR5%>M^L1di8mi z_ZpPR`G26yeS00{+_w+ZPxQX&P$s4QpiD|nf-2SchCrFSRY95fE`~Dg=vw#c58bQ3 zc6r;N%zbx4nG*j8)I)mTe?gi1eg%wP~_}ic%g!&i1f&82!C*&YVNiAm@?}CqEZ3gqCy0 zV-ZOkPje6S3-rX*ZFIB zZ`xGI>UMeiT%OLorgWCE99h=8@p>_^bczez_Tm=i)@9m=R-;j8#jPr7`l3$qlS8U1 z8KfZeb1PAz(*so{VMIon6DH~jxs(om-DfpXvH}2MDQF?jLo^AhuI%2Tw7P)&{$W?6?@wtA9q}1eN(uhF??d{nc-GEJc`R1wwMUFHHGuC zv%}5J4Iyi4O-rNjZ85prfW)QE4XEqS|MLYE>La~)gYCtX{qa}`0z1&I!>a*=6>a} z^QD=XzBIkaeBHF3q+5je3t3&UIa*_O@(DN9qiQNPud!)iqvmrVd9C3myG&76zDQ(0 zsvvKF_1N7dQYr=qHgdDZrZ8rA)*R7ixnFCzzNx*jRz6!X$%;0YxH{5OH@~K>;gY(r zZq(HpUeMm!7M@ub9u~$+j^v?X(adm7V{I5>R(NJp+ng}byG<}|oKF7d;@~qZP8PHT zWb=)-x<=x3u8X_7c-PIAOuk}^dmmqYG&HgmUqfwJH);yEHrLH+sBfsN9TIMDm9jDH zT&*8pxG$(j-QiG^fkU_2aD7YDg0Q5GEI6MX)oH<~%z~O)uFTF4YqrEvIXTvH@G?xf z1}sT@d*(}PQzO<%bJ7~l)mq65H`lc+(A~acbLtCQIVo(u682UG%F+@x**vjU%Z6(9 z6?{D1^u>FCX^Pjb0&TUH?~!u~hlK4fyQKEe_u}x(=4MT=6lZKbI`v=6&KYyU3mf=j z*ZG-YJ8!;px8e9uYg5|q!WyTs%*R=-mPF+2dOhBeDJzaWHddADsdc`=(tE)pNAYd& zD9680!i3Xqs2-Ly!0|7%=Fx`6HCs-8?)s-4AD#6z{ob)GRK|8w*5 zw(3_K=Km?O{+Hd~x%~asf=`dBd-^>mo>F|JHVa{K4!NLCWa@xnXZ3k)THW$+}2 zpu}Z+$^)YunFo+TN0f6pXQO3^IQRN} z4ClXn9Q6g<)O@Kw)Ehn-xhCs2%;Ch$?vMe_K}OZ!Ix>M!HHQ=PdYjYR&6n(uHzPr6+mYENGW?>PL{Wd# zAi{TW+aLQsh=f!a9V>qoboa_=0%_)#+6(6VQ z6hEgVJG(r<$;-Ju$jQ4i$SGJEf z*_+14$=w*_30q~f-r>=qS2!ogDP9!dUX6zO&<-Us{!kgdP?1fq-X9H> zY7gv0#ve-F;70E?`ihC4MMIrnhY}foD0!n74b}P3gU3We4Y5Osj6c+&zEIa(aPOXI zC|SEBhsgLtiT#b1;Z1`cdp8n!3f5R_s^%uT{tFCTX z(2PiRjX1c*<#%;`d*dv;ecNouLG^+KO^xnrB`#lLKNnTccVz2Z>gp^ROip&Z-b`*9 z(a>1aa;b7h&Tnco*GGv@pC-c{Q`a`Np|)*~if}Tvu3`3^Hs@@VO!_z{?gp50k4bfH z6->GEzCg~#HC|HJVnWpr$w;P3qi2=ut7*o#3z{ye^TjgKcwwv>Gh%X6dHVtq+c?Xl z(Y}&XIJv1` zJ9FdowG-oOQc@eg4QWR7lG|e3h}`y}Lh)KdG_+s$qkLx{f2U~9Vb0GJuU%jc*S+!DIb*<&RJgRG{6h{%&^Q)U%HM1jRZk-89+49t=N=@xJ zro-`^;hvA>5vi`ls^%?K?Pz9;sb_gHYFCk~)24=_O6Z>Ra+Nzc@|89Ct1v&vvi7cp@S2vkCRLP<`&v2E+Iy>+d zUi+jkGA_2w3vPN`U0pxFtsPfzSPoJ(zcjC&S4kYv^SVOs5#`sbob$)w=Vuq>Iy^xS zpXa3L5#^WE=SSI5`F!5KaJX{$`Me_JJak5JeookPe7SG&g5naDpAjlgI8=R$Up+^C z*lH*5oqrWZHor8+$i5?vZ}EFhs$N` zhS^JP86zq6Q5xejT*lRFW;+rFOEXGie1XfTeO-)Ptgmf}Z$pe+Yk1y^J`=e{CP%ElqQ=r@R&Y+K#@1Yj<8pU&5qO z%14fN6jdIYq(0y0_a48Xe+~&FGOvQO>0in3SSWc$yT|6=WSPY!cYu;w=Bv~P!d+lF=XZnGfocnr84oC@9t&H?WS?*$(Oe+m8s{4ek!@D=cdPAd7mWI=!_g{#G1sSf)P3m4>tQrxxu@&0Imf$-K5qPqvabY3x$YY_|HQZv`s*TmI^@y;T*6bBp<;!;(m)%MxK zW*lXTR}t|D)6Qja!Y64KU6VA=XMvFMDkBbH9F9@#mC;Cy$SPYzGHOJ`ON^_s(j3H@ znCl0`_1m$EdUXz|PtjTFHy*J0&!8(($G-<<_HGk62K)n90saxZ4tx>31>6jB&3XxZ z8$@p-iNy6XD1P_;43>jT7DS|9-3p2?n7@F{;9tRo;5JacWe+d2!d>niO zTo1kpJ`27DijM9CrR{Zr;@E_#jL1H47nq7p?*`>f;y*xnfA~*uDu~UBw1RuU?}P7y zH-R63_|lWT>m&Hcv-W~AM@suq|9ZTni}X#zuL*bz*bT}o=D$Jllk^`@_ImgPoCNaz zG;#^}DTtpN>of2f@N@7TkWM;+uMVphm;+LFkwUOHDD5m647S}Bq-PL8rG>~5w8t6b zKj?!@!iYV706e;fw(A&Ti95~_uic8Gr6GG@hS=Y5Wm%uJD`^zku$`9SafH;Cqt-i) z<1%SN(nf9FZ_CwIwNv0xJO^w9X@`-e zUTurJ6;j)>?q zX;Gi3SAi#Rz63;v<=g29x@lbpq8rvyum-#VByI9Vb>vcT87Otw2?q7zE%;&5(31_q z&hkZ`UoRw#l*8Y^V|vgFY>-Z3ee)wiXF<2m%pAr-{Asb(zdu95m&t`3?vPNwc3)wb z`d9KRx*)@hdu;xXC`%~=`dih72SL$=pMatZ4}qc!E5K#oPr>KGpMmtD*3ZFA;#~C1lst^pYrYCpLe+{XD6pp^fUV6aXnVgn=%Y5e2}wsq3Vmnr@_ zl`xW@3h>w->NHxR5__CuKN`H$p6Hsd_N4dO8f}xgq};d?m*JNg5z2_qKO&UzmRvU@ zLT9jNMufxSj|iPHpcxT5LryaylwnpW(Jj)O%K%l*%-Byxg0{WL(Qaw8b8lxbD5FEk zlGEkMh|)jwTNe#thJKrDk?7D*I?sSvQe8};zMMnqNp$g8evC=)x_c3nI^PVA z244a%0{;Zof@pf=N8lFl0r0=U*TGjn##PoW!pglFvnKL&S$DdguLU>N)-mfu-~#=ZKTmEp1ykn2I))w`F`7sl19FRWZpeK{DEmfaV;7EA}1 zff?ZQU?wQG>kv?E*P)=;E_OUp+jSTyw(D^40q{srY}ZjBI;sBaUjvWfT+04fFj$}e zfnUl!M33bN+OAfv2YpLR7^zPgYlVBLPq#8lCDzzuKTMbNFdHVcQ*$!D5L>bTrYVlg zXt8!*WSYd z=5r4zbJ44Q{5IKK#2Tu`1V%Ry|7 z^lcGrj5Qv_rdW)rb$pIZjnP9{c~?xDB!6-Q^>8iW&kppV5=QiJ2soezJ;bg|WqJ7U z`OS08Y?<67&Jj-^zx*LhB*eJby~u2xn2;=#@~dyDnbpRJ>8Y9hITH<-+0-I$i$sa# z8O?e4GySiqwFsI1S9H*hb!M&_Ecw#k9KO-EsHY>Cqfv{#ISHy!jwrjs$z^d-boysu ztDcJf$-U>8DMH_zh@^Hm*PSWCT%Fi^%T9~q43%dsJ)HAfJm=1HB;#-Qkh&9n9>j0H z&A$P?kovp{6n(xK91Y$AO22w5D5<;+d<0|{)yQ+;9iZ5?yFlqre*hjwoUGZ6OaR$Q zNbTjlAkPNYa!|%(Ji|qP4&D#G4gMIUuasx~$cglS%wy>D;m^PYoc|motc9P^$W!1d z@VDS&;1=)~;NQVtg8u>^2M=Yg;tB9D@JUeiYa?vrOptwzB8}i$Q2d*%1D^!fgR*|= z8SqW;S#S^d9EiVH>v>T268aq|>!UV;Vekb|=0yGrl--1W4@%qE1P1N?l_~ytOlfbT zV2I0{j`bYnFf7pCB#g*h43;JNHTSzT6FAinVD`?mMDSCl6H})W7!vsl+HP4YIjhI;NjLHnZwA;T#d3C#-;h% za@NI;PWvJ!El1Spa6avoaAL{ri1L)N)@5937&6MVCGu$nnL3CrrN|DqW@-qh=O8UI zaLvq=wrHotFq~oU;nt9aK}$|Ku3$CqwoCwMgY8Q33`zJ$3x9m^gImU4a^SPzCl={wlHOZ^5P4>B&c z27-)7trJ1UO|qv~gu=s6tIT#Z-KOb>r@aux7hJ3(gh9z`_M*C2a&aCZ;=bZ zGr*fc<{TrBf;ph9T4Zf|MAnMuf%p=(^1+E<0oVjGHyP;!i@-;~V(=}n1nk$Fz7;G4 z@l+U@4Duc}(gvOd{uCSrz7C!Z?gLplA2|vmHyj)SjsTm%k>Go_CNg7Sgw8{lX# zp$~m7SP04ox3bnuKDb>9o&(CxQu4v=Mz9?G6l5+nB3=R~fTO^Ppm+nU0-M0eptR#D zV9++m+y<9)CjlU)FP1TB&^AaIk}Gp)*73(kC^-`7s_eIGY8c!%S85yN9&rx3V(Fsf zs}ulGOr^2HU{fz;bTj=v?0$jCEdanue6%DS@cn=fRk4{sssxn0O{2HHIove+YU8B2bG zWsDyLE#q53DdXFu48c1$5c9i$s`jw(bU{JbnO5|0OG%!+6;~!L|K51eE1r zBXksYUd{YgMw|b$p1qIc!87`q|L{?xa3eipLe;3UDki)7WL}HS#}rH`pHNj@RW=Hx zFuVktH>RqrY&;874Y!xg9Z^1|OmiZ^#Yg$@^2)Kpt4EFzIaj>*ESHF@CygC9 zdNSSy{Z}-4`&amMXl8c{xcF_|5*m@10wmb?>)B z?!6SzI({@){9-pPJMEW$pY+y-XO8Y&wC1g;7{iImkM*zppz>q=Yj-PuU&^kNjyd;F zeHyl2_-5BpKPkmFa)XS7_4j?UVc6obJ@20LcFAime!>fetCauS%Az47FARO!tKhX^ zy*J#yQ0MEAfAz&1FMGA}oKI3~|8?fT(_Vdtu?03cBO$(@?tgRb>$`MzomR8V@0)a3 z{r{d5Y1Bo!QE^sWMwmO8n3Zj zZd0i`&=6k8k`cCyHd3uKZ7O87LCMurOZIX#a`%ws2^z~zo5G*BO@*vwd_j7!hPctD z@B$1aA@BlhQz2_LMNz4-z*Z{NO0ubt)dAI4Lww(+Le_6wxo2FttuAky%e$UTh!yQ) zZLujlXWJB>i%DF%#(cL;vE>f8k`SrZ9GfEN2vun;>uib=x2cddjxjj@2~lBFA?tD| z2|=0KRLHv3<=yG>M$vgq(wJ|wsZ{G$n+jPublaQ|OMy*=tldx&0&TJ>%9O|E$r?*P zhR;H!TK#P*Wc>#UQFx!(6k2kaBX_+`kv^Aqr^|c5<*jgeYhB(tmpAkXvr}##>w23? zwU*gb$jWDIP7+ChjM9Y)S+7A&QQjLi6|(-}^4@oOpSrvRdMpVMvJSSXR4dcv9pmx_ zxV&PQH`L`#;~Rf@j_+eVU{k5q3Y!X91YH*TNf(T z%Cf1DbvG161Mf#R6|y$Ea+_Sa>|-q^J47zurb5;OP&1Ub!lpvjGf;;s?|GY|g&ya4 z*gn&yLRKXd#YKFRZ7O8Vha&Uvnr$j%T?ciP@;YoPWc?V5VnFU8o1&FLkx_Wh*i^{+ zD-;=k_cxpRpYgig)56bqe3B)ig1{s}>@^;0<+;w(H|E6s+WPLh?i$AF*?-tnK1_FZ3-{<%Lw9R5e|8eY z@_5~rQ(QiD-Ab>6_nr72b>fCMUQtZ=?ykuiUc4SX4P{;PC$HD;xZ#ag6cc`Lm&}}r zTdB5E_018_cX-@bjF&MJ%bu=3LUdGQxSlkYbSJg#cY=(Y5fjz!t|bx`zK-kyOOmLH zp3=PeJd(#vmGL-YqT0D@NavItxK=UVE}aU%{VBX10go)(I}mj?O~jMXcH@do>v!6D z2UfwxagRyF)~*j2B=qRECT=E-_Z<^{OV=+nJZ`C|Aly>zcd2d`PZXO?EStNSNU}O{ z6VzF;7C*Y{C;`_SNCy5Z656Wx+pDddze#PQ`I{p5>kh~DXcjls#=n=j-=?m8443@A zRCao9iPw`2OBQdi+Hi1(pDcW5$lyzTXKa)hIxE)T7Dv3ZZE*A;twVXPPrZ~~xuh?l z9nVpe4W7}u6RyDBZbq;6z8z&dolr@;2)EN!OMi-1_*1mfE4j36mB)b}>0Rykki&KH z4)yoB121wzD%PfV@^YQL?nr-h%Ic1?Rh?-!F0I(pgR9bY>7B2V)6R-*)PlHD6+INU zrLMa}^03#s{BUt>m;F=ZR~S=mvxLhrL(%b*5lSnL1O z8|fw6k9&$v!#ZuFsBqSeFTcCwO?nbjJ zL+yTfd+KHc*Z-UN_AJf1zH6Xb2)z2@Wq5mH#oi_FC#FAK5)wRPJ29e>nhOD+jVvaj0JOj?rK=j!be^>%%pVpPrT z*1v%>9H(^Bo%@+6`*2ZixF>MKbiJWm{f+e3zB>|9?%0+2+2@~kz5XeFD9d(Up2xqqM#^uRdr4IIAc}T13GK(k-BowVhK#N)qyQ&#KHo?9i*kL6 zVkB_C*qyRi+}1_iaH)4X)FZ|*S(TGDd%>YK5Y$?xc75dV#N1aygg9v zvFT6X<4y|FY#w60A^iqk*0Bcr4-I^J@Q)<-n^ zc6~%EhN$*j$PP5G4C-Kdaj2ZQV(B$Jb9Ov z|AE*G|9J9zxBkA`c=AYTQ_(tM_;vteh&Y2v)Y+*R9aOF%ehar<9v6mjwaTxRI;ixx zq18d<{$|jppbRRt(>6`ePFk8V8arrxt~EgowoCsWJE$~GE!y4~bfsY5_cv$$Lh6Hk z@2uFuaAHSQXW4ezz3ZEef!!7ge}A*-FEN=RGyTT?rps4MT}`3~(X`OW)_Mwu({)}g z!6BWoYEh@2blL7GZfV&jj{|7}Z|-4ywIjXr`(i*U_N6~svAJW)rp}}rmX@ut{lbZN z#%}e_i0|L-Ayc+5o*{mqJ1aI&amJ0NxVp3}HLG*VYMO9{aqPS?>K@+l@hsK79f@@m z`dTMcn3y}t)^t>?X4tdq`(4wq-QJ9&dF_*M6c}wH7^H2+QMkHa-R9^!3ba)Ow-UYU zx<0LQiYt)R$u*~OP+VR^ZtK|BwTik=hLG^kD`TzJxSUBXA*x? zc~QHTZ^WKltxD#qig`%g-wgU1%C4dD>h21V<;^y}D@Rh0K!EXocniYT|+ zyJmP>v)01?=GSjnCb$am)eK9zD1^_jZ1lD-F%{87V=DHhKcVBLo-E5&PwPT_ThEr| zX4kT8>zJ}tEz5=;Ez7LVvMpGa%{^F_byZZcZCbWOP0ME6eY|5@HlYL?J*H(t;*{1S+Qn677# zEQex|%vp}c?XTC=57RR=B(+l3PvakH$2eH|_kOft)OWI-$*KK~^}rs-{7*mUxsQWR zUcPJ~l1b@RPFZ zNHY}gu9SScswTcTc%}+n(a3~L=!!YMNS@{;o;B|o3+DBrIYhpmh&N80o8Y;1nlH>6 z3A28CoG|L6+t%H-ThvGfZ^}zlRH(oyI^4H;G5#O;}-fLMu(4K-~$g6t8n{ zF*r^;62s%t#Ng7N$DYoL-L4FG(9wh1k7@Twp7Wm566#@OnlMLX^p71k`B)`StI~mx z$5mYeQk)T_(?C3`8aMn(3D0M95`JaZ8_d?2nU6RfP2BJ+B>V~!enr=PgrA!r%>X6V`3Bszh|W+&N_f+>MpgaMk}#mtL^c{E~yOrN}^oR5HGzc0k~~+UL)fv)xno~yHTy*-Yby- zpCrQ_cx2d`+DER~A(AyN29E9=ddBa{Wb(q2@$VKL|8C*YAZ794zT%-pE**8-wq1X9 z67IBuj`D-IVI9h}b4qczdbjm&SRIpl>(x!tb!Ga(zVv3tC=Kcu(WG7)Px@44*y*LR zw|G8KAd{fBMRMvwA4g0c zUwTus$Q?V%rNA=E^Z~_p@ultdH8%?>BDm2mRE?e5@>Ya<&t$hqHSYZh(#H*Ar#sQE z>qNUG%QXGH9Il;#UU4!o?-?g-{916b;6&xi!@QRg?dta{(+0mXVPt*El-QFp^|E6_ z=}k$miz+?MQ`6vS5^H0xGSzL`i(3(@-RrywA|{NKXm^4pWc{1Yef_yuyMKZDxb4VJ zeQ&2y9A(m6I1RhEoeQ@~cycjsqZ78b9oEf;>XVZV`v$yl@ML4&GbZYJFZr8o_QpP~k>Yl;ksPdy)zQkBx6y>{!9K0A%hgU$av(v;aaC%y zw=%dvK&70-#?FHjs@z zfo$}#%RHJ5hHP|Qon_mcu}4}Doz0>2FCFwR(Fw6#ujj2}Ae8q9?H8ltkCYytU*h)q z`=r<3XL|j8U9!~Eskjf*Pc36=4%LkIE`4BD@M2AvX&E1;Pg~C@Zrumz(^Qi`NY9Yv zR1Eko+W0~G1zgK4>$am~WEYH%wr--EqS1vUI;}D6Z3V1pNeSGhtlNK!L7SN_T>Os8H^S4&1)A)NKKm304 zcLu*?U0Y=2>N&4d-aP&qxjUd{DDOW08o8f9iEOgU?c8DUVIm#OfWkO7ML$pGf5R0MAJ-!Ropdqe$#kbKAt^jxLn3ojE3-v!%peA#Quje(M~Vg05ncZDl= zy(`xVHDBfUD$|bdH&8?2WvMrk8G5zb4e=?|0_F8ebVBfzm+hmK@2{*PREOh0ra^ssKpDA0sCJbb0%hdB4Q0~T24(dAIw+I++uf@VLz&e72Fj%V5AM~z zG^|O)oMoL1HBqTTD3kgTE+vk}OsX!1Vi_!{zXa+Mr7nXqsd~tjd(4%40&1bk{mPa5 zyDRs;EB6u9B9;5Zl{=ayYjT+jHAAlsg)%7^4t1&WMnjnt)I%9PSPW%CTnA-BEQ9)v zhPVmJgm?_fgxCmWLi`EJgm?w&G7TYXh)swDl*-tg!=Oy5od{)Y&QvH9OAVB)7)iG3 zp)OZy9+ZjY4k%+I9)&U?o`NzVegm~wLp%#*LcHh7{o9rM4C)G%OGH_W+zC*|9^^t9 zdoUcT7`ZHKGL*3;GhDeQSMJYH(qCj*X%s-7Ql~+krPMH}F-n~WWi)3V)L7*$gfg15 z#HF5un!(j%Ydw^#OH8(&hq_X!-$R)+f9%R7Pyj|Q87iW3sZd6)2x^A%hP!g3p{`Qi zxvtziD5E*wg)$+QL7A9ug8Ht8xE;#G`~;NIgFir-5U)U)5Zj=ZXoxqUOo#+7nGpS; zObGdg&4f4^xLQLDf-)f{LK)4ehce}N36#;ChoDR>k3nT>*e9T_QR-JvCYHCMjOM%# zWpbHz4`srRg)(wgQ2eJprUKU~H66;xT@Gb*r~}IA(A`i*haQ14 zI`p(FC*PhMx$Hw69hwc5Ps~}?Lr~_vk3sRD`#u3&uhg%g%zgh3W%BlKs8X(GS?Py5 zVUL7@P1s|hmMV1ulnFZy%9O?os2O^74wMP80O|(iwL_h*)D=+KP+8Vbq3%=O(@-;% zdIrjb{T)<>TSdM{Oro0oOOe}+;Oe~|J zOo&P-6XO4{cP4OEReRsx3?dycK+)`Gc}guSQzqvIO^-u~;($#SqM)J(1c$VNJcX2W zq-?P4UMnjr>sndY%DP&bmR43;cC)UPl@%v2wXCcx-|v5|z4sYOvim&m^S+;Ff8hLn z`@h$Jt+m%Y?X_}YbxPx6n10I}Y;y~2a|>ZND|3If&8>wEL6&N~4b%Sn$Y$TcE>TaT z+geYPZFVwDKRpMQqs(0l>#f*Km=3FJV1tzGX4q0#oUs_D)5c2JaP{VmkFkSlGYO{N6_NdLCfnBIH z*4gZR*d55IonaFd`vpdHA~TLLj9V0I0h<6zHPT@dm8?HZn;QUIpkyxF+~u~pt8H^0 z*saQ3jcx8>Sh|vJgk20vH9oT0cQ!k!z4f$*&Bod6Dw{2_*()$@bJt_7nC=UEM7dUC zvpx1x`4m7u?P;^8VLA=1w`D)rtnxVP=?yTg`%jzo?_fP00n<;fvsv`<*3&jH{dAbk zubVXwk&SL_X#wy(p9mVKRVM!$Cz z#*9nX$MT!Uf8;aoX&41v@=bgU64Bbn|6Kmh4cVJSbi@ozOd}zgA9W4Vk&pJCsaJ*w@X19Giu)(eIR-_ z?h;g}33C_^@GD`HAp24)#&4|I5v7y! zIhxtpnzD?PkvFh>>WHEW`Cz+m3Q1U9=U~{s-)LHZ7sTHa`45b%xzReVYCw6P8^A=c z2mg@|um9M5nqYipGKcJJtTYnTeu1K^;;OnazRo4{n=;ENQ;Uf~>p0Z<#)BAU;^lx0 z6;ZAzYf@FR|DHQ5Nr|CM{v|odzg(f)Mo1z$BP6OshhkpYDh)V&MOjCgN;Fy4Sr0Y- zk!X@Ak?p2}qD10OHrsGxUmnM;R2I7fqGecsYvRX={EI)&l29%+4`gl zC|jRMvX-q+B$#FE6L~JttfNbq&RW78>X=?Ft2fO#BA%Tt8xRE@jE!kz1)(zQ7;0;y ze5E&8&KXiBvryA|p|S|)wO=tg*!EDn^-S=s!Dju3F}z-Q`Fvdr#Ri^`6U%)`Q?SA=zQ5i&k?F` zB~ztfsi${Ob9S9lS zy>Fcr|66TzhtBJNtGn={a~D7G&?}p)v*LHJKj)j5ex1D9IxGIn$3MB@whqNxt+V3) ze%|C~D(5e4_@w2Vos;IB)bh#PvhVM|F5xQctoRW>Uvlp2Q*Q5SofTjHw>@LK*9@Kb zN$N2bLlYjIj^ETZ;J@rlcsY^iTFV)Qf9_29-1>HF{MJ$1t4mPoZ(XI)0Z>(?mR!J{ z6!m^HS93QwNV1r_aY2$-xGN5lG;rq$lC+7^y(bO4 zCSj*Yb;T>K$fv}!3#5H%%D#^FrRi2%V!8fJn1mhs%*!&vo_rya9$^yps|zv1PH`cU z3&JFm!z5*4lIz1HvYJ$1mJelDu3*W7VUmA@NnQ$*Yz~vWA10Aq{es<6$zO>q{~RqD zB1m#lm_$w$2{tnWV$J7VW*#JBsCBZL2{tvXfpAF)`5~!k!)e~$8XOdB(j%+UvepuCC)%e8Is`8 zxF$?e8z#9uOmcsiy_mWmGqhyD(SN* zM8YZ7!IJdM^bMhs%j&n-kDO*1xb322$p1I zWXRlhfSHVptg=u^ueqU;K8r#mnQ1cP9cWKx#@Y}`@7~)&C4K8dBz@8k21_zC(xtu( zusM@mjY1_ovqB}k+3Px3tM7ymNoIOkh@^MOY4bfZd-q)wVx~{}@?c3;W-s;w4suql_D7tBndoqycJLVXL^fS!>ogu**CSsOz=6|6o6>qsJenrI4?1^ z#7wYO5)!{#TR(1J?|183Q%lSQYf-cYXa%2eey6D=W`ea+g0wFD@{+UsZaraYiJ4$6 z3T@mH+vNJXUH)JFTC(~;E-`~v!1>{AkiVPvc44vJz9=v9L$zN~-qifcii+uM2Af}^ zPDGXglYs>V=N9Kro-wNYf@vIAujGR`jyQT2 z^>(*oIA)qHZ|fV{kl!pW88MeZx}CQmDz zJcCoyOJ@`n4#@h?9mO4KtK_^uca@7Ah#hidw;YQdcv(kgM>xtm(3pL+cIK3(j`Hp` zr7%DPduPv_IY6Heo|e`W$_d@QGMoX|;ZEqzNbB888`rQq4Ak z+^dV;B=2}cCoaqCkZdDL8YzaW--HWF%V$i;zS23g$n6|dT2MG4e`bD3QE^e_gkeMT zMhzO1H<%J)f}AB^T2eGQe?mdwq{^ui%1UMyl~%YbC;jOIm(^_W7ldo@Zq@(0uQoef zyM_-PrnmTRYG3UXcF3NuqH;vu$Wenv?C{O2gEpX+eWEL|P^uD4|DkQ8QQOb|F#d`1h&wx< zr{v)~JIhFKq@A6=LoRmyC-&w2e{Cz`eY|!&|FU!Mv8*~-2B&CX!gRUG9BQPQ1)<2C z1i3JF;Dkxvk3Dit<}k*8NK z!TL>4OY7B(7DdlKJ=6Otp|mTGGyc(GX8y8`eD^>)mn%}cLcU`Nx+1hIX7^{sHRkr4 zbC4He-+(6C6$RNrwrO)A?TRe)H-(v_T@f%FB(|&{$Z41(4dbN++RmknMmdd~iJ|7C zJUQj>tQz89F0414$(U0C*ma)zSDTT9y7a5bG$}G|H<50)DxUK^yJ~~E5*#+rn%p&D~bo?@oShlXqsy({JQZV?jNisT&eAo{1+)c#J&Q|++~{kJ^Sv* z%$v{rzI{D;dpueo&;iDPwSi@yJl)R!mRE%ZTx2ea zlp|`#--tEC|0C`AKi`J`9=~)BcrDpoT_WBp{vIHZrS_Nmef*~p*}X!Rwuz3EHG(Z@ z%jheL-u;-u{DQG=MsQ~4l+4sCKC#=nEH}7k#b+y4d|FSy-@i>ZT3CiVj~JPr)r$%* zSdtMc$?O{@=^Z8s)5_=*Y9^y+m?TUqJ!n|*#~^`$o!dw%0|o_ za-xETarhtOo(bycz7tI&EV8qX!4$20+f&J=L*kA&yvwvj#vPT495N`jU;sZh zmC8=;D^V$*s@xHKzde;B8p35#`NzJL}Ii1%CbV7>YK9A z%t+tTT$KAMQXq3#_qUm25Z3)=QXmFAUmbG)7qjtgnV0Vc1I@=tX6Le=7lho)S8;*Q z{~dDQH!=A6fL6ix_lDdb47tBpIyPLE`*$P--%papFPHUvZOHuxW}3I2_a@u|%`XhO z|67~j=RbwqUyvI7{F#7z>-5!S0pmbYPA)*@9sU=a^4kojn$yk6>Gt@;5zVQ@MZ9O za6Ontr)C4lX^O@xpsZPW7335-V}ubUgeCE#vw7x)eMBe(}V z2<`*rY-;W*aN&AOatZ2pLFnT zFcb8F^vOJDP+rkj^b7@igI=&NxCmqv#`6%^AAA}-6MPdq3;X~)8~hkN2mBly0M>(p zz&Oga!C*Vk1!jRmz>(lk@HTKbxEwqW+zXBX9h84;`Ry4AjsoS(pd4^H$XJl)d2lQ! z-@uLo-vucXJUc-~h&EO5E3{buRDh885#-TiI!4mKs>l zcoSF)&Ica^87cF~_o9@gp8engP(H=G6>J6G26hE+2eZICz`o!@@NDo-a1eMmm=FFH zyd3-+cni1~lgW#j!L!f+8^e`ApJ+cgxZz>-Jj|U$E zPXjsE%hL;74vq&O2Pc6~fK$OI!D4U)coq08SOq=@eot}HnSbjdPtiKjqeCJqqCBUF zGGh7P$A251XNL3%L`TeY67=^8=n51JJW&<5iU9e@-Yh~jd3PMrWCOTT^gs- z`X&1qZX7S0rEbLrbvsSn5;*#{KsBk_TeqsYB<(#J;HRL(1*@FH;`a{9 z-Noogz{n->OH#Ds_e}1yLgH6+#Ef7|fBdp2AT)x-<_K4H@EPPG-M!#mPnL8N0=q$3 zJypC&>M-Nwza?EXk`C68+}!z7RVPR~6K?#VyIEEjNq4iPM-2&4W@%J-~ccd90j%jF9YMinP5w>0*nVA2OZ!>FaeAr zy|doX(+cE38qZLWwyoy^Fd3u_H(G;~#YP)&Etm@K0NaA!f@}`!=|=iL1{?^s2Xnz= z!COF9`+M#HJAjXZ$AfD?&KU9h2zCSyf+vD0yz5CIr>h&Bs_w}HJA(z_$>5dXDWI&} z?h0-MX@jei(m4gyBfIS27tfF28DKi`)*X~J(rMuNU^+Mz%m5z)Gr{FxPw*+Q7x*s7 z7YLpN;<*pl7VHNe2lfZg0Lk;7Oz0yC)!-m-9yl1h z33P$dP96eo0$IuF`3gKA^np3xUT`${EjSiDne;Udl+z;l62Q|Fybv4h?YHaHt>1g`{pkPqlHd3u7^fMh3w8r<0{ekpa2Plr91pT%l&1i^87v1$s~$JF01U0) zClc-#N*>~0F2XLTekad_oq{ep1h+8(jQ5xSjQL%_;+VqVK|irP!lefNf(El>;6!S7 zYp_VhvSd(43d90t!~BJrGzcb{<1;eKV+|hZ(J2{h5glD-S|eVwR8ee|paDg3gu~ON z;KY(cPHa)bGvXB)#}aGxpqJH3m`-u72bSd7EP4IH@^X%}m$#9TqKs71RbjCz&g)Gp z3My3VL<(^6df6ZZY6jF_$+uY_#C(iTm{lkHJ%5L1z!N^uNjo99{N+pi{NN*EjSTe2bO{_ zgY*N8^&stb;}wwhxUmtu7u*EWzBS$eUjsLTpM!6L-+^y|t?>KX;BnvR{R;6vbV zpzM=)2;2fPsqOg^i~}PG&C4ESl zHj;npZ*`qO+LJVM3V1Bo6`TN`3Qht~10Mprfv^Z{3a{lS;PGr>LJSzrhJayB>sJO>;O4gfC(&jqFa9t6$?2ZJ|) zE|9w47y{l0G6t*KtFoQL6Wq&o4wTDkJBOX%2=2-M1{H;;0}+t}o(zr#$AV)(4+!@x z1;>GpgSp_FAmx|m3-AK)C-6crnh3cFJPEuQ><3c5c}9X0zze`j!CByC;4L6+WY4|e zL~se153U6%2R++CzKvAlyM>^v@0YjfbGFzus2u&4g^cV z60i*X8+bYR5?Bs?09JtCf$Wm$NhDoVg3>;{0=y8M1(t!c!8sspdCxrXD)27wYVdxr z3Vay67W_Ln2V4PO555FegHj&N1w+d?CxzQI(o$dMGf{R<1?lC&>p7g4DYPWtJxgdR?f_5fFa(iVLR%m$wZCxHI|83Px0J&ai!&ww8AS&*?}V-+an`wQR_kl^w> z1+D>K1z!Xi(=%QI_kz5arv>?X9hd^X40ZFUstKfK$u>;Qpa1%&h z*LV%Q7JLI-22w_QXfGSI6FszRjkiJCiN+Q%i7?v=9t*w$W`gg6^7Z;Qkh;it50tj* zzrZ2j2Owp%@gYbVYWy3#3ETlb34R3P2jgQ9H;hj}>^63S(kA^B#H_Ik`~my|j3cRh z2|B^Az#(8gI1%)LGS2ZeSOhkJC14|10qz0oz`fu-;6Cs<@LTW|@H_Ama6c$*((l1~ z5Vt*FgFk|Mz@I^>M}7g11rLHUF7hil1pEz@zRw|WDoA1MDFUOw86b6@N50x_0nP$> zC(o^5OHjVTjtAF(M}Zqa2ly(O0KNh8jlAbeFd2*`E2Mxj9@iS|4z>aNfvMm~uq{{! zGI#2^8l*k%SqQcVWv=;HQ0k$-fKm@Jx2o!);WzU(?A(7p;71A3TA+z_1zwV zQ}Qg?SzV#y5^p07op%r&ye;#rMnX`1Cu@d3)Q!ewtsw`uQQ|(eGa&|ya z{c74xs$V?{9D+Ot%mYV*cY+kXsx3Mee46`lU_F=%O8ATiL&IFgN>h2}gtdT2d?x#%4)USlm0vJ=uMu90WCHy7asDxEKUI9ux z&ITnOuLLC?uL9SASA(yEtU2~<0jt24*n2G~VNV}CEIye(RO`GY{mK;@pOW4}=XOL# z{3T;1t^Dz6jqL@*ri6Edi`bOaOp=M}Thk&@xkw}`7g4H~sca;TGKo)r21!V<+CEJL zf5b_Xz9}+VB$qWqQD)wsPWq7Ok(yU7J9<<;Tc(BTSKe9T2k)x6FcIECcuF|@6>JOs z4V3h<7(5N6Uhzm=(m(M`2k!%yf=j^1!27{n;4&~3`x%e-oCLDZi02}31y~F|1zrh0 z4c-i{1Z7U*8BpTjSuix8ihm{ak2GG7jvTLMN8tbOczuKLlz80=O1!=UO1v^JqT+QM zDDnCpDDnC)P~!D{P~w$-r;1nF4=P?i1tnfT10`O+0wrGSL5Wu%DDm0=O1w6L60f_# z(0JX8{gNjn@5mLJUs=Dz{?kM3xkE7{I`Te^{3iv(YspNh^G33jlp4eupI=;As21Uh z0}-z9@p!A|Q$?%{`^d!Qg|_4NSd$DbNrmXf*2$_fWDSlNO)V)c*UJXCXS(?9b55_f;$e}^eQnXr{G=?1m~nP*ge zukAG9`+<`G`hyce*6(>( zpJbc`vOdW;2fP{_06qgU?&En0JQv&mvICRnb#O2kh5woNRPz8sz%kqp1tmU*fuZ>} zmp)53{FKPQT%q|^`i!AzM06xAj|NjBrV*ym*f~I@5wSeN)pVXMBYDd3vTDytuuJAt z^{!;%CK8IwHHkSr5aG|#Qi*OcowpLfxxA8G*8QT8`z(Sg@VPa%<~xpX7t z3MvlVGR0?9>$W5+d%1$ z-wsND{0{JJ@Gfu^xCoSVbvGEAR@d{sQkF^iC0A%#-HNPlNO>kY63#F2-#RF*j-63d z#{L!Tu;Ct|<}91u%20A4LrFn0sCOu9h z>BqX{o#Z}=|GB2{5yDH}b2%vK>2Yun_yj0r6vI=ViQo!w3iuE38gM084L$?bg3p5Y zfzN>tgR8*h;A(IUNT1&$VaeJERhG?*k+L!|<)mbU>dGE?VP4M2?7Rzx4<0wnI4%ag7->Y7B)+EA_Rxc5MXP z1Y}oC9b0%sp=@qJ-PJN>2em?iF?`4n@yGvu@igVVtPp-PlbLPQ$10U-eJv(bdn>2m?RdUq2 z`+wPRc9m=I*XMoF_oKIeVKVS`Wj=iWgD;f)!?zb){b9~|za$iV->>uOAAYIUh+}{3 zgih=4TiPk-?*6AeI{v{QFIQ`ek)Lo^!TRg=kDmMMnL{6Y{NaS37#qby$x%o5nLpu_ zwaL|w&$v2zLE3o~N;0>d9ChF9qw6yIjmlj0YWuP4UmHq1e22Tt`O~oJHzB9IbZUA2 zOy>~R%~UwM&hFFe)Cm_9l@yfDs&JlPIo;HDv)QcJpAPAMB32&3elTh$ znC_GR6Ok&dR6NmnT$-~p%d(tj0Yzm_xzBQ*?z~J1kc&XyROp*NJUz>K#EQ<&>>nwX zX7oyPo}sKJx$om&+BdSd#xb;27Q>}fX{mZB!V*+pS(rn<95G~+EkV8!QOsfVgx#uS zeNE<&FE!NJP6@^^lR4z;3*)cK+*p%2)Gp0;E1Asi3v`qz*P$; z!H{)M3zWHiuv?V5?@i_~VkjkUR=~4;C=_Yd+ePLdu zEAvpo9L6G;w4M@-#U^tY7t-9+VK3in>9C(>%jDZFEo1c4G{-onDVt}@=G(GGwv6#O z(;OphrtWfEw#t^Rwq=`a*=Ad|-IndJW%ahK(Uu*sWe05;qYb9Jj4zmeX>ZFq*s`v+ zj6Sewu8%FFziP_pVVd@huw@t8vI(|~UX5w4*p|(POeUrS?$$p{UTIgESS>b_8dalgqN#?|e# zMuIWNWDdh?%Wkn{f3s!x*|NXevL|iXKW*7dwrra%+iuIo9ZMfu`E-fN5{#uLa~OFH zEAgU)^JJ4bj6E>XNHD%LnZr0_%VLhxPaQ^*$r6ktxG%*s@Gpc8)C@WXnd` zvaz--&z4QLWu>;P!j{dkW!1Lq7F%|^En8;GmfNyECouY;LTIkZ5{!8!a~N;K?p2}j zuE`w6$1v%Wa$b_j9EK0}u#)XInZx)Q_K=eOW-^D7&{3bCmtZ8BjQy!#4=Qs`lR1nt zU=Ju+y2%{I*|7VS>|B#kbHbJ=*;tb~jES&El&rvH4&w(H$rnHWY%+)Oo>RYhg7JaL z9L5*6%xBBKw`D)svKA*=x<{Fen$DITYs4@O_pHHHkrfN38RjdHEtWVCop z<}fy$qSw797@JMzF#Zh_jRfNplR1q2w(Ni{EAGm?qq2FG$r6m!CUY1=Pt~)>3C8&* za~K!HL?gkt%w!H@x-BcQWmnmDY4}= znZq~>Hc!b0n#^Hj+p^KN>{45nZ_8%dvdeARJX<#3mUYdN_JX+E&1Cd2V8ku|!%XHd z?u0$2WPdf8!*~@&#fG`pP3AEA^<*uNlAUcbhcOP;LCG#O83(Sx=n|ppHW~FfjDjB7 zEhcjqkH9E!k^S9d4&!B*Q^{U68SO9_g&gKSH(Aqr1;$~n+5OZ>MI{p$r7(9bwRbV? zURE&4`0m?%OKylV8mUJdt(#%msu9tc48zkCa%E5cJ`az34wgE(>LqS(#Wh z*FgljXNzn-OJdnC_hJd1?+BB#L2`3~Fi2)j2q{_Ez`GN_N$yPMKc0WN0{2hk%*yK; zWmIc?byd7k*-zG&8#Qa)Csm&%MqA7|cDi1BG)->n<)?Z>Vy$a&L(7dWY5sCL;$mNB zTY7`p%SPAbt{PM4T9Q+jy%N3yz9q+-9Y5OC>wv}mUQjN)b66J^i3^Lg3yXYPQ*pRz zRn#?c{3c)9Y=7P%w%nm@xx?pGwk%V&EQ`Ii-}A~ZuN~Ge3&fTM+Li@A7q)nFS8`h9 z4&H8y^>&2H{_3jz1Y&bvalTkPUt2rh_e~q7pc1^U{W)fE#e1{&Tb9Sxx>kF0_m43j zal5^`YDrvWD+!KDtXa|$d%UhCwXPN3>=o6%s9JujR>URUcsurbb5|Vdyii=)=-MmL zaFo}zw|Z?^io}MO_s2|h6gw4E$I9{MOcb?ZZ&lfFzsu3Fr!M)gefY7vGJh{Q+ zyOd|X?KFV=9?srdy^hz~>&@NUKNk;AB=$DCEDyU5sMk5*%|6gSdrMN?Sv;*<7>hN5 z$9gJHThSiiX@WMAr|05n*Zx}9T(4`cFB{*~)y4n0VDOm1;PJXVzF$(Xu_jRmgPl#p zkAtl=bcz+QCrAKA@MFz2s1u#p`)lijdX>PpM6Ax;ImT;RZ~9vYh#4!%Uf0fu;qQBb z4|jZC`N_o|uWMz}lddh*Yg^u3{aMSHm)9MLsjV?^tLeCrJ^(2Uwe8;Q)pe=Y)#mPs z99MN>QPt&=u%<^%kE(MW$~i=FBIQhS^?@k&U@Nu)LLzc()y&o*L4+ylRlmMFDf_(H zyJE5rRPT$qDfiI46yMbt^bM1rD|qOCi_k0~V`Zeaq$hK?dtIyR5*O5F@2aj^nVd8? zEhy~;XO^ToS=lG$o_e9&L-x_X`h~1K6YxTj^GuCfzYy7Gp-`_9_+DYW0bfK{4kdH0 zI}l5Xul_V?>!&XeXlvj7`p0*8+fJ$1B|YmpRJ}9CditVN=cn)UzV+_Tge{ihuG-Y= z8ZO1M*vjE#!gW7u<1N>H8odhRd*7}9af{d%du!6OxreGhOH#JU;}@kBp{)BX;blv8 zS8eRA4M%%(cf}AQ-^SeJIy5iZ_pu}+DLno0kB22EA3(2v?v|=6ysr2h!YaBhd)w&X z$Zvi&DAQpj*+8hbMt*&FA1yIRDYmOFF{gT8^b~LIwkfqKzANQnqWH{>iKbJ)l@U^a z|2=}@eS1>fkf3M zZMQloK?X%6mB-yY{ZC}zi8?SOB87Tu#=(9mhiyxc}JjWtRdJ0xlBkR-W7R+}ZY$r?{SRrNi? z&veRDyV(`*<0FoMV9wpET19)Q+WNa_f-F%Po(dv+yEk`rUF=P@u7GMTsFetkW}cDw#)JmQc!Q`;`dPpDV@`nFQ6 z6YG*LR5F0LBweWT6Ou~;(M13xoAN*#Ycx|!V-pomYEZ>dvzMyMW@&ZRQYxE1saCGqAFKb2 zq~~1Qx*Wn8>KcMax^a8y6&;|Cv5UH7-()ea;&Nh8-4a^p1=lS>g&b9JOdTZp@_Zsu7W-5!Wb8R@{RF}}V5ssbzfP||a`8?O6I z-B7pal1HVbLje_x*_$FQ(cNaCGqADfI=1ruF>O-EcX zb=I~^k`d~ykzb#zF(w{2Tk*J?+_2Wn4c`#ko2=O0BmHHHkv&qsd?O{sZmZouPnm&* zUBoaQCf^(>Cq~Fm@1UwBwEHNFenY#DO?Mu)OAP87mN4FY#9{2zp&(%_)LSFJz6B~Z zS>3F)M;yi-wCxhcLcKNe>&pmAeVdLr^|jZwOSTm1RlmM%K?UT7;E);E{O)wBwp~I- zsJBK5t|UEdHq!%XBYUlt9!MOyo2*o`2U8nNQ$elF2&siuW9d(+*GEs4S|kN|xK~-LLv`?YoZ8+v|sF>r&(0 zGH!i8|3>C3%1{3@0&l6j?Na@=OMM&TrNg{Z52Z@MZiTXpiA5Uzju?VV#7^m?5Ftx^ z71+sGj~f17*)rnrcSKwCV86CyvF{9Q3Gh&?4C-5X@NhAz2lcg0i+rEcWW+x$lWO>! zk|z2li4$-3CWfvVu&&Kr>vgTIb#3rwZ>Y^?^m}z}?y8NhWnxI0&dbzz@3QKuWsame z_S-V1C)Z^+k|O+J^+&v>X9~2}?(hx6YtzIfv9exB^#;aeE62(dhcu%7GIykDgoxp& zrxCOh3w&SDc=Yw89MbOOHd;}v-EplZfd`EVN19iN=#HLO(C*Cl$*Mna!}lxYX{2z= zo$jo2Z4L~%M0um;mN*`9$)jEJ`1ttC@ZD~^6dZE-5%w$7zO!jB7hoSFJX#ZRd5Z;yX63ISCA^_h(3r zMGWU!ZuQV^#mqUGv1&qKRlqdN^l00sR_v#$JnPHDsp_gtQI)MXy4ET$P zu>R?mw@>osZVH%$iQwgA?d9dt7;p&bErC0C!08D($GB zrrjBgJ3b%pUYEO?smxV+_9Y-wGMpdX{J5Sitq zsQ)hnj`(1sYlQ|C@xI@<;d!*%!EcMCniTHqh?9`wZjcpohfCaU^MwV)9dr6(w{nJ* zm54VaW%=&pN2Mu|NSgA^<;O};MZjqa=PBkfJYJ(UU7$bW4%ucopIZ%AS%5@-s=)25=Nsf||6NG72fonKv> zqFRyhw7Vos;#DIOlkJ%s6qB?eG1);fJtk>FV$#V(bZva*T5tBj%s1`*OC z<$0NptlAajzKq{!H-6j|>mI{zyn6({$?hTiws#NU*V+6kbd|WR5-LINyBN1czw%^n zcB0knh^;;lTS?g_4PAe`!^iG9Bu~F7s<}3dU1QAjZG5e3OG6T!0;|NQ0lp<*y#lxO z-rOygac;MHS+8MgbGx0yA+c6nRUeg9BNYM@G=#?vT}lV|hVJo>pxI&9avJWUt0tz^ zWZ!;=#%%KXo|pJEt4V9tFN%~9j@m)Gr#CQQ7kH+eU` z`!%z%OcgQR>S~N3^0{iGaKLu28gEjg-vV?xjGUVqn0H~C3bZVfN^))HubJ3}M!0iI%ib0Tqj zRfTjUvl~^4-RyO3Cb(5KIAbdx0L>fRc9S=IGoi@}166LX`;1dVY;m+D-ujs(B`L?S z*n!&BYM9ZOh_OBIyG9~xI6tz4%F2?}RT~U#z}TwiO26fLTPr?J!!O*u?QSoMDg z5F_{V_E!IwF8-kAR+gJ-;7cn;5NoK^h4~6;{Hs#8*{y?3rbU9ilNu2Ixzv2e$mRA(iJ`?8S zv;EKlw_QkqTO%XA4XuO9TqX0?$rHOoudS))wt9{HQnYr&74JfMS(fX_%Z8Oo$s219 zAeT7XShL?`6z&U!OWCA|S3T;lf-R{|%I=Ldd;Ny%giDrJ#Jf;#`!5vtlIm{5a9vF! zJjYunmX6lX@sRl3N`lGNYs8FEnW9SLG%NAO;}@CxNw)=3J4|=_Z|lVW)$5{bHCZFK zL#{biX*q0T{@3(nOAa_reh$zy(P0(s?x;yDMZF5Wcy}vJDC+xA4d|l2P6Ae!_BFCI zvbRotd8OYA<5a)n%?@K}bu>GSWxt>1g|T=)x^jfKP6FHNtBCeO*(BPkv8iFZ3=mjqG7^femyd>!Ry5&reoNzx#N>;S^sH%%lBl~YuXk}RWhV}F&%lImnDl%S-c zvZ7RLig;Bf?61nUq`G7YG989G6O#)id*Y$(;vp*>b@B@hLO6u-TYb=jjn&J zC*K4-QB{zBu(4(f4sv>=|H{~DeIV_hdb~&NJ zc*JtwK=ft)wvKhdGL03`7N?!FP4yhMsh-0&)pOXUdJfxE&taSDIc)m_J%?rD_A>4E zGT$pyn}_QStPSlAtYz%RUnjX%(tEQ~n(8aK)>`F0w>yIkZ(xj|eN}7K+VN(uRBN(o zbM+Xuq^XUr?Gh=fmEAy&?t8@Zr!MwwvDtVS$17DhXy@O+nsd1^!n0`F69qQ=GLoTN4?io z-`};ViXpxFbw9Nb@n;=Zb;P#QS$Mh2?hUYT>^o*JzpLIGHP7{(zqj;VU=uS+nwZ-q z)im7aQ^Ons@a{%e6TX|(Y~Kx2zN7z%?~+!jzRk;9cLw?|2LGwzSXTLFf9J2RWJbgG z)gwMND)tz4zTa25jVdG>2|SivRm~>sXtrbf7Hi3s6=vD>Qif&Iv90f)yQyk8VaIA^ z{8s&G%NJB9YU{esqGc-A>T)GDE3h8+&60AdO^~-jqVm#a2Ua>Bh`~>+M^0&0sJz&4 zo9`}~H%$h~q-F<6FMrw|+f6H>%=qa_XRc2yg+IdwIiRJl*I$t|HFvGPerq;E@ z?~m+872x#98d;Q2Pt8TtNMW%>^_5tS6;HxlLeHJF;J3WLYl%P3U+~H11zy(%zALG& zS{&m};x{&F?&~B|-x3}*coXO>CZu~dX?9B-+JjrR*)*xN?_J;Z}#SHW@JIN z7iVlTZfZSmTr2wbn^CZ;*L9y7HznKRXiL2HQ%g$ILK;e}p|Kk@W+zVNFn=e`_ix_B z{}RE;IjL?9Pn#Kk3_jc>rp-8HS$(A5DE;P0y-_U=?Tu<_jMa3Q@p8;fN6j12g7F%v zXsObfv<`T`SUcW)`I05N^HUd4k5pG}r;}=pULLNK8Z;rOI;lZ}g@>OTk7^m+vSrH{ z{^g3*(6WVzan}5J6RiSWKdEwEl_2WdrUO#5s?SPf7W*L;If>Nf{u;ub$yUjSk+*=? zjA*5v$;KvPZhu2ABccKI?p|;1K|5!}R#)vcD$^{B{oe>EPpY2?BfkvT>UnPUzKmft z@xBqqPxbrimc#+y`ak%-5v>fKxv%hMcP9Lt4B2#`FlY}?g(t)9aA4-1G9)M*8c9c1 zI0OW6L{X1*(xJ>mw4aB@Yr>%}uevq16v3b(^ud zJ`D;Q-_OcB$$wz9I_OP(^38|kb2F{P%sJur(~3&zzn6p~hH#^VaH9_4#s-&Od~wij zG|6Bx>oBZ>f<@GlW&F>nVrr=Z0wP$-u)w7mY8pVL-~Wv-RvW}xZSTbY@$p6PM&?_Z zn*)M#(8HwQ;H=o}$|EQ%F&Rix!%lxXeIKf9seIKih?Pf9_ecC5<$j-EhkGl(t=w-g zqo8IMEJeBVajFD!S6KjrLH>b)I4SsIMK)7_fiquh!7I%G<^u~lUX{@2F# zzB;(Yen-Q_G>H5Tv+}0dVY6M_+^#L#?z>O9z4xZ5v>Bua)9h5cSuEVFE!-U5OZ16)NH*lnBk97Y@#3>xnUOrSdUp2?k^d^F5kd`t6kH->IX2r%yf!QvRKrL(23o z4)(9APv&E{zPSgguELngIh0`J9A1~4bFfuqv=n@aF|GqQWgnc!h{T`qTX1&WN(lO7 zIF97Q*R!M`RageNK(jNMp^v_<1J^WrS}G`eHk3v5aI>3z+axf}f@51lCly4jO(2M( z8=@N?3@hAqA#Ud`bG-o?B;re&M$W{Dqw=HQtGpQ6 zI@rnmLKANzTYSiNAaQCFY(6c7oyPCuiuK^v!+)wVm0#IRELCm2qcv{iUTe&UJ;8sR z+T_p!OEsh`pv}Dr)8^iRJ;{HZ@jkyE{!`TSq{B= zTA9m-d6e!gu*((WXjD^|&5}*sM3~l1f&D}2wu5P1*<8Cu>B@Hz`aLd#X^qLSl}ck8 zOl#Z>(;7=*T0>UcXpLuJ&nS%-U|NI2ri^lAsYX()<rR1b*Q#KTsi(Ctt#LE#MJ2l(rZs%93S_B96ra#)caMe5 zP_j8NZQq@+$CT~^Fm2x>u$PojkbKYuQg7DX^oR%83Acfz!NkHfTm&%?BRFT!3`=GMcseX+?_To%Bz?$t1@dm~Ki%Jz^O zmF}%Dt@|=eYkUCH8ehP)#@Db-N@EX9Yq(M@-(L#TX{ZvW-{apfZQr*rZQpM&ZC^}l z4h2;9#ly6HePLQ72c|V9z_dm_>~*Cv1*SFbf@zH>U|Qn^nAUg+_J-2f0Mi;Lwz1OC zJut1i5~g+6!nE!yu+2*Mb(q%u1*SDxr&<~(z_dmu*qchDD@@B5n159f?2h$pF!L-JQFs<}{p73#K(jwY6fQ0;a=$F3hXU&9m8j*nA~h0IO5% z4%p3#ErQ*m*kafM#g@QsQ*0^hcEy&#?oezwY@uQ+V0S6D61GUORWO;hk26-o{;F7d zJL`@5!^mDd9RS;+m(UDSF)2~*-Ez`>;}bhVA__8VcM2F*au3Z0H)oofqkfCH^a0o55Tl7t60oKx3ey^Q!oE=E?uBWMM_^jxUD)5$)7>!b+D|a8`y1>_^)&8y zOIMEc(z@MYU#X|PVLE?|glStYglStYh1Dx_lVJLN?}F*~eE_E4_a88=yB?->H^F>L zcMDAW{sWly!Ko)$aefX=>kfx$-I1`bmF`%Wc6S4;LCH45w0-Zvw0&Q}v@QE!+Lj++ zjY{Jen6{-~N6XzDnAW%$rZw_lyOoA)96JY=YCHtf=AMFSbI-!QQRZHRX}@fQX}?T& z8b+ZGyGpV3uoA`IgSi#^5;jG#?_tvv zi#^HeWwn77D_L*Yw=n7jm=2fcVHYS_bSHhNM4XWT(@#Hv>8BTTwpbZ#ztXr8rp;}% zpU&-KnR^&ERk`~jOuz3Yn10_kVc#oT-ht`&{TZg~l+=?gjT2xriSTnL*bj+GlXFzx$ePG|j#GUtTp zw_FC({!8n|qbP}^fiUgAi(uLZ9+Q;p|fwTf+o={Wxs_Ly>`0hXfJURac} z`Fog-nG?^j%$*L?=F(u%%3M#FHkS`8Qf}M>(>6Z>(;CZRF-qepnAX?|({cVeOvm|t zn2z(9?pB<)hLtLtPlOdKmIj-ySUxOP**qPl!|DoH3niOl%e=5SCA-6xErGREvPW&% zGq89ilMR2heeb~JP}n%*-?pp)=1{Wzwk);>wSkhgf@$63VTnq1vMuWlYo%npZP}%; zdwHWcqX2fFVqd{@tX8F2EH&L?x7#c=!;)QYv*DSR?9?oaoe$F~Vlqs}(M*_*qjK2M z%2%^sI*#sw>6EhswnX`ADeQj5mcbrSY&q;f#a6(UDz*~#kYcM~4=c7B_K0FX!n6;f zdg=|k7vGZVBLpI}Wt!%jnCTl?BjLTqJ<7!x?(vZz~$0&0T z!nCez!K-ywz~ocCIAaxTv@*92rsM4^nAX?_Yonh20Bfx@eu3!_>e$QjUq6`E7!1=I z!-Xl0kua@M4V$I>cRNh`@9!|J`wUF$z5q*Ax-Y@BZrk3LxsI?@<*UxHw#wY8Fl{c^ zHkW6cD}c3A=89}{3vF}v+2)qQj#1_wwavY4n|t3jw*w}lm2t){m=3?)Fdcs1!{(~D zY}Lo|^D!{(=MJ!AmF|f!?dNl0vz5je*oErdCc&;#G7jT1!|D~74y(6eZI!ugu)iq# zK7eWaTJ*KdCBd}0RM>IK+_5li&Sje$Wt$rZ>!8eCWSg5~o4e6AHy zz;qZq1k+)#2B!VI5vKjJ8Fqrw-3rrw`4*;I9?|`*FlY_CPK7~dm`*Pjz_fk&uy!g8 zroiNjh&W>gOxw4_Husoq?n#(anOkX_dj~dF*^yObe z?So5T$0&`7u#=QVAx!(=ueQ0Rwz)@Pos_vJY;!-tMkqHWCC4%50f!F1XA987DhgSA&aeHC`9(s%==HGZ|twLIH0mk5)?l;VsO zm^OD7OxriqHa7xxx-vJ~HdhYQv04Yy8h6384;I6^DUJJK+U8v_t#JsZHI6#R(l{D+ zhSF#Q(;EF?S|b;xHS%EEjRIJArBMW%qr&fBFs-oR2d2|x zF3fZTX1W1O({8}D#*HxT#se^|u^gr~o`R(-jb~w6qaJ3a`+=6miLhf03Hy^_vR6-> zaXL(E42Nkqifwj_&7Osse)cx5!V=@s^|AaeQ}zk_p8wALTbIKkCKg4@DU|-Bk>|qC zHHJ!MZC|1zX5#rzNVdcS^Yn>z%MJbe@ajl6^uNpb^3Hl(zCX1-g=#Qvj1HllQLesLj< zt%MYLIXUAwZ(#Y<5k(bpMrhxZjtJ#C2gCk@xzn^z{ffV(L=nGtRuby_Xr1zFKzW}V zK=B4S!i+0nI{HX6jw>ybxYFiA;)s-mTu7k3)db$y^YXlDtY;=hN>+ufA>f7U>l6_NE!4_JTXYxeK zBl(w0qACuw3c&~9XM|)d(GfE}_&>=XRb~;W3P8&`Oaxp~Yd5z5l)~;HE0cl>J5fG> z(2b>eV+t!Oi`@YQ-mn0t#E%j!;?FZpxhqDW@;wZc=ok(%vS^$KN;IAi$~%oPpI-vk z(IrermoSH#8ql(O?zQX)qegP!kwwk@XmmCw0q9ZSv&VPIxe$*9JQKH)p&5WL*Wmcs9!JgPn>EiHpcHkRLCH^Vf>PAIWj-%}>!=Z?qehs{Pg*AVNy~K9 zNOPR}$KImTYBt1IzZUJyi5+9F?dHQDSwU-5v8$Jq-iPGKor6?VW(_4BSKVMg6_&?; zLE)65l0wqJG!8;5EO*KYYtAY894?QnsN{nP^IRCMr0h&S`VzPbw@yM_JGuURYjUTJ9_=ab_7drASKeg>z+2C9>_-2ITB| zXD`dWBaroup!>hFLg#;17)&8qmE_MX3{H8ZvzZLNIJ$4tC{4(l011)B4#1FC0H`M40}}{MqC$ z^vC7qj2L%Oj!WDM@q@dvj8HM(&oy%Ju)$+kTwPRAAs!qt#F;m!Yz^; zP5CFx4%0JTGrIMZIwaI@mU$}>t$W)KmVRcpUZU@^iW>=>N+Q3kaI(9wz!_?9XqvOi zI;)^8P)U?PzB;{IMz^ePeY&Oh>Xwn!EiDZ%=co$X9=`3rOY5GQ$U#47_RrDI3HUXK{7p#HrEcbt)qh`FIXi26Lprm zeo;_aIjgjM#u@qLQjJmclHH}Sc9%Nyo$kV!WvUdAATr!D%T%Qo={^5P`Gu+^BnU#| z#^^$geR4C*(MWWbPSGVHVLy2q4b92Z^39fKQH63R-&s&JwMeQ~gPMBQGz!#;vi!-E zs;X%qZUvV2Vr~-SgNO5@ib|YtmzFv!X66@50UgOde@3SKp&atN63M=hI5)2E(stAN zF)6->*PW1d-c^5{HTv#7pR^t`xAW6y-FW+_Cy)95`2$_k5?fWiasR5nF1hQ|k%Mj+ zxpr{==&cW1_XqM0EcovFO)*P5wQc{yL$}TPwdCkUqkB0{vF;b{UFf>>@h3VA|1SEW z#&YL5J3C+W{-h^g`ncx9G55Uv#+JqR4%z+m{J0NhSodAmEq(o>)c10`9Pi#$eeF3n zZXIz~LHDWg`|Rhp$M1Z7@vCbdxwrMO%hrrNXMLVA=*!7npP0X9#dSAcI&_c3iChDy z%F4PI6owpoy8;{aK_S#_h{ALrYB$JjX<-W~BXGNcVEdZ@;)t>UwI~% zGNYJ`708`m(uq6iz4|3Xx$6)lk%myWAjwVK$@ryT>q+i%f+QbsCz^gUzj1d>kVKYS z%ny!kZccUfM3GImYR0glJ0KW@||av;76kc|1nYP z2hvx@%-FauUKc6x9$-dB4`QOE2*y&QV9b)sb(#uHV=a}L{rn1(D^A%RXphAG;p{m| znF+KfKFl8RNlesf{NiO}PK!|XX)nUPd0{(0l! zO}oSWlN4sp(P8#5=D~Z(_=SXXW$a}?gxiy%%t-7?%*mA;W{-?|AI=`hoiR~?_OuSO zCsmn|aZmBjhi5JDg!`whGBY^9KdE8%$fVif{Bw*l6X>6IVfM(VPfV1I|42B0oVKt! z+&?ms785lL|5)+fUfF}#SSV`ha$*AuF3Km*EDMkbeabeY?I!n|k~l-OkCuT-Zrz>l%(2{pTo4;OX0+Iw028RdMZgfTdT8a#;_$l!X$me zB(5;Ym@r8}n4~mJa#fh5CQPy@OtLIYvNBAvE==-PnBaXrHJ!uRUp}!6)2I-qqk68_|4oQW*CC>OBj(g z7BHOam#jphFDrj-2$O6JlhlVvehQNuEftr#EStL^8PHF=t`p#yNYZE-iGQ?24p&}s zR-j~(*fTItGD{@t5}P}Z7@3ig!EzE6&XhkQ>B~zR`=Ufk>Ov&xX=yCMrZ5PQ5Pn^V z#Q+JRC9&w2q!XfX6lMXEzSu)$YD+RQs5F)Yx}Gln`6SRxdIt8qNcC!KrDxzpImg&9 z$waH3YSETtWZ*;j%u*!kz0xxo{v1JdW}8XR{6FlS3w+mA{r^7`#JQmin}tR;6%~bW z_luy8%eW}xGMKl}Iko}AvCUls3i4a1IR}YGhGmJ0iDijKNkxf@No9#eWkrRG21133 zxsvk#e4TSXpYP}U*>_yj{{4Rcf9J99Uhnh%ywCZZ`~AE>gy%#$uQ(?ke?Cc972*)D z(R4a-P7bcxvMk5=oKFC~Uo#vGWb&1UzX@|n@YvgEN}Zq1>MwQRU9OBjh4N?4*&%-l zwPM?c)DL_vFe-VREXWQN5D-QJ0~>Xouw0~*ZN3VV&S)SzkO^78Xbhy$t5kGNY-E?JStDHs&x z6w6u2RY7*P#@Gp*f{9U1@g)&XPIhgSliM8S6lfeC_Bl6uX_QmAGRi4g6XE3LY>0C5 zwnRB4J0hI?ysjvxpf9yD9G?8*tO%zdTeF<7OhK;36bYPy8BtDAbCgqZU4&DZvogxb ze;~>!+8E`OY>jY=a(6~K`TL`sLVfo+9Oj~uK@m=Ijx@@LWs37AMmYsnCUOdM3fiKa zqNNc|ah_%rA)gD23)V$Bg&U%rlC2R=NzTqFr=Tm!DUvdi@ViP%G7~vP**Qa_oV@%f zr+||$VSkFUi!|N}`COD;(h%X~!O_e%~4LlwkW44g9VUq2n+ItMmYtgQBKj62&Xu2dX!TzC(0>W5aE>MERAyV)<2PJVWjQ#>ZZDagJg%E@hra0-iK z0f!-kmqESp4I{LgIajq7GR(t#kYBHq=L{YGcPcKb*dVH!GO4`EZkh*Hw?}?{b4ydr zB=-1A&(AskeD+By*qWJU_Hm{(&MPe~DJ}65WwZe^o?l%{4+66eD#2?m)~4$L-;*e0 zb|8CrVWQ-e>ZHMTQ7f;T*Ml$dQ1>k3zv<8!9v z)m){`_x6@Lud1qkUNiq%?RHYt0k0-Sp4v0&{=FsVQ&m-U4R5M%nprigy|KoB!K|8w zrqheS4*0k_FIMQE5nI26v+ei+P4NZ-f z8dJymWYa>!9aq;j#vG23h%EIKq*il5%yFi1%uM98x;CFg?&4;GZ@Cj1NmzHY#<>~Y z)S#O-)}egWMvr?orG7zO;MQ5RGex$sLEVipGA>_HH?QfMx&*&f--5QrqxgkdFs~}H zy)pqvY@MPkzb%ULX?YAwud^*g_+37y*)@L2?DC+cuC2YL(Hwu7z%k;meM(!4SJhB8 zv%Zld1@TA`1#Pz{WsGfUn#Y@(TF6KvWukU*edBa?w#@;ns!%%SY@hrRZUaVRrPhH`QG`FJA$UyIZ!Qk&Dp`7B~*Xcx=p0ambcEH zR(DOE0z*v-1j>CN%bU)->16CWtWEc!z6bu^Sir|`=bUC7_Bg6c~h>8$}te~UgbdkTRN1F zVXE(CWgr)c$3FN+o`m8Reli-glx7f*(0-oyXYo6qTXXgNWRyh7{2R=R79(?SmZW<2 zPitknvq+nhCDn8Iw8JwPndzrkIi_7Ue4!ODJ;@@j6yM^;XpK5@dRb51FrcG2jH>0?ew-Hhsa)s6KH_3bmpkE@zIx}s_fm3u~T5N(FZjTz02 zv+J8$+uCOiYnnONJI5Q*-^)_cz0doQcS*Z+Mp!JbuW4y&ZJO1VHMru;EM4E7SN|~` zeqpH4%<0RP?iY_)nAQS-`2psFzi)pPdp*Cx$O&-Yjn+I*VKvp76k5V~n>D3zwmHl% zzmgcPEgi#=Z6-@zN(QGcn<+4pl}NAgQyue--Zh>d#X7iV$xVou{AEctrZ6BMdn5E5 z((}XUR~acT2*>M3$mAU$UgKT;A$%>N{^eki(#-=!YJ?)?j@zPQ#ok73BLL0zRIARb zBjOpBJILA(o>~jT)0uBE6n?|d!Ed=zdK*T4YmGYF!$>!l%wtLe)|gGY6@!PHZkuqQ ze}HtmFrID+9r3{uE>ar)?MZehG4v>zDfJ`(UKLfAm0Of9SsNBu2Yoqz$GGkLiyVM>WUPF}OlF>wVK}%gLJKCYj zx=%MPl!1x+lmoVR;LbK*8Ja4&!~Gx_(CYc>B}AgEg9w zoPY1)J=ewiDi`mD1H`+hdcK6z9)5r_|8_#WnVMhLP(M>cJDMcT-Vajh6IC z&V|HJ;rbY;uq^`L00;5&jbAr=%3sCzKx597czoSh`j7?!evQ^ZKx0lb7!XsL+s;o+ zGa%?8z6y6VzJxWVeEJlqwuZ9VV|;n9G0}eOD{v1qRy-mhzNY;;qzGrag1qxMTB{(& z;+hx}Y{NBCR-sq;{6ep`UIU;~@q(7^(B>T-E=_K7X~NttrgE$^I0L++`hSKAOfPR@ z)wHsU$|@#IzqD$?q_LAxB4wW(8Gce$Q8BrK;(JVg6;5lS%Nr-4jY;=etw~tgJq|x_ z&~(WgJ$d5f3a#^UMceXH9M3HGGBvc^BOF&twUXJche3u$OCss|G zJbLn!OSzPr+W#ujaS9#VvCvt(tf8u%p-r)|t3{ZvI}la6<)7Mry_NOH6Go<)LUm1b zRfF^cWgv4TGFH!49j?SFHNMVjXsT}G)KfZ~_aQTO!o)J#q167WhxVoJsq(#{s_CkD z@FrYhUS(cC;gZqiBc~X<6(qDcJjVH?qRo3{)myY6-ad=sl-j?atW{bhZ!jv3s+yb3 z7>;(@s1m*sOyQT2^4MK(Z8~pp+1^(!c&X&~&%AX4T00E?(J4j4M_-=y&m#(cf8LRs z?w)T|IA^5%_L=1$|Lv3u-b$~1=G_>2IEVTM_FA2#RRdsNfJ6$cV!{(J7Dzc{ogs5EZ@)ak~>CP$@vn;ped+BiK;_ZB%S&07m~hH}upuUbCapy*5XsdD{ctj(|6SMa?1R9kq^1_vSbXbqxV;XTTdsQV%sQP)uZ~ zbg3jVRGPOf;B60hIt74!WAfulN2PnUj!N^k2E6A2USC!nS?R*XC5}SRfTK|87VtI) zy!}wDiQ!^A86hg&o9L)C@AiQArGU3C;H?jMd!Vw7FU54HqSCz)j!N@Z2fQ@_ZyQvO zaWR0YLz(!8Ni{2`a^s5EaJ6pbdl3mui_)k3Kgp&U3W z&7(-7{O0)MPagTtFRUrM^1|DW>idVfRga9M7#(`8XRl`lZJ=A%4c2*wHP_DcUVrV? zEd0_^jKV|FG3E=m-_Ammcm7YGo_HQ=LZ+^#PI`y%`Q-ij%-eo>foc%<(byi`r_7O< z`L|P)`J%IRub2JT{eRQXesq}f;}^d}{mAy^Pb7Xh@IP06smW$LtdG&_%HlVjrFOM6 zz2Tb&{MW=T(T8 zJ%ioK{RT>PxsTEN$g(oji~P58(td8`q#e7|Je7{1ah}QO*Bux2vu&Vd!SA>)B{k1pfbH@pj=8qO)^h)d1|tu zUWBqa*sqr_cLLND^YkRBsfIcg%7#?M8J5$|n{S?~nSXAh zla(8*qx2N0zj8>MiTM_#=Xt(S6qXsY0pRT>$oI=#y8Zhrq;wO$f*6Bjk{ zGKZ`6Qca1?E>SkSL|IjEmbVkT<+-K5_=+}9bl6QhSw_QxmU}t(2is`-@(*v$K7d?g zEA|lla|>|?^0V7EThHN)ZcFtPpJZD(J;{OIG)hb8Gm4JpZ9 zMsJe1yxa3T{5bl#k<7b5bw%f{U)_0h`%k{(tFCzCf~h;UpLq5AkM8Ju?c&AX|E901 zqW##05o_B%Kh;-F@tFxfeCbd3pYevTTH?=FH(h_hzCJhKwWDq7x#!jg-=|7K zhovg*OWgnPF{xhg4o#IrmUF#o_~_3%66oznq5QJnfRQcE(Wxc%hH=g?Z0Z-|994hy zL~)KrG?@t;jTkk7i_6qw8yIlH$EH}ZAYMAKr7_JZ>)#v&V8SwLLJy|mfK>@(_VHho zOi!v3)Hfc%FS&{XRvz$22ef>DdQz33Q5Ir7s1(qIJy8{aRh0nSeB(tJzx;litj;KG z_8Z)eVM1%aUn)*2BMmOvhc27j>*so=v9(P6BJgf(r3svWV2dSi^cAO#2^=ZRP~_tN zoQ{U)I2#i<-;_U;k+?rkh+~XWL*^IV zI2yI9Jj+;_6D>GS_(G^kd9M^5kds-y?FtRWF}nVlmz|@bvZ)F7LMWU(m3iaJ$>bIf zjdDsYOMaEi0HMmae|ZC6FNC_~3nbu{(tgPpd{&Cj)mt+RC6`bcxydIi0W z8Wfpir>(cyNAdqjPFs(lFYQZ37_a^kqi(vihtt+Oos1Fm<&vDXp6K_2PO#MDv~}o~ zme_;&HALhX*1zM^!k@;!30{hpo)3LZIaoywpB8@iCxta@JCdd#adY>-+t8Ezi&2NU z4Xv%`Hqx}A%I@XL-j2P+ZRW~;GIoC}TK2=;cJ|+aa^}V+Hi#3pq2Jx+vDrOVXG}GF z4|k7y&p7poJ6E4N<@Vuc-G9+NZ(dCu<^>rkCw;#5iBImEdfh)qjQi@>zmooUKK5+* zcP=<~S?)QL^Va`xz_cfRG;W~XZGK6C`u}jZ`CUiZ-xr@(H?O97VO8sUyw|Q9jPHe) zt>!KyK4H`@X=tmR?zhPQ)zCD#lywaZMWq=%c$$W!8~t~p(#$8^Gzd!f3Mnn3(!5Df zcHgkVQD{enViOU$d5%i+u7}e0LAuxBs5EaCl=_);PlI+*Y2Npt)Oe?Rk2&gp#=fDi z-SU+SANuPpm!CU4x?g88% z%I&xgnulR0aKr0V``(#APq*Vb&p^W;KN%`>(%WqN;NOYNXI&N_g}tZSalb*P*O>@l zhz~S_@h@^aPFhK`hFTf_ zKjYn`x8w9-?*x;E+yCh8xcUWcT%n_(&i2YSb4$m=8~badGrTWzJ6iXYZ)TwttfPBoxxTu5)`u8v`yZ){qG z)WbQP0Cktfur1&!H8(?=4KvG$EcBVjbFR|PJ$T~znk3A-^lg>t?}Mqsj`1&s*-J&b zthEmT^FI4g2A#CNQKb^2lh(3Jt*uM}iE^xWg|qkZrr~esWU{uae514+k45Rf$1!89 znJIm50M(0s8XODW2v&d{;8O4=a3$CY{v5mo+zH+a{ssIj_&$QP0@P=mKL?%)vLG4L z81(a?Mg{m0(_-H3;1|FzfX{+o0-p!j@{hd+-U+@1t^#`#?z_Naz`McsgZF?R1{tr! z27~v4x!_kom6iLzHwag_P_$t0?S4SFn?Y;gMQ@k+ZW?*^tt92oR|KE}D8G{!3ZQ>k zphlTauB&WJ34H6RY$%&)=8W;PeTK7_;9A-I8umGkCs26D^P?HjrnE5+lNJiwBcS-} zK^?^S4mbkb0A2uoADjq23SI(k1na=ZK*j$FFq)?I@a4D4j*RNGpT@6ZC*Qi=H1pla z@4pS?pE2<|jkW{(m9PURs(<^$)g=G+iMeS;rS{LNTl+$j=JyAKrXbBjb!Cbl6i{JQ zI;syE!%ybt#9wjyC8%`#6*v<7HCO>Y2iAbU0Ts93f`^-4I`R@NgW>dgGkJPV(+$PL zO0J*@Bu35i<4vHfb9ySEHnCnKj0a1rUBq2!wFgvM{TWnR(N>tW`YWik+6yYJC@bC4 zDyFdTEL^twV3)rtTc=acqiH2Kl34_DLDO&0f6bLoR^`=9} zaJIST7V!?(Trc2q+sr0?^ESQzDtLVez|5uv=IYF9ze%U-G9AX&kfVmWSqE$swmI4P zZN{nk4}~S@YxKeuj@j1K%nD$7|Lr0FTgV zEO%lig~Zqk!v(L__`SvV+xC@`*%X%v-!4t1y!b}tMD<$-$fTK3CMCu8g=}M)zAzme z3!k;n*mUq1@H61C;N4(9a4pD2N9+}_KiCBx2j=4E`$6@69{{C|asXHdav&|%2%ZSW zzz>4Af^3$>z6;WS#$EtV26uv|fO|pu)7am@L0}4TISthI#OdG%z`>vnj-3Ub3Gxy9 zm^Pvqx5kP58Y8X^2%t&A~=y_MQu zm0jN`9I~t3Q-3bgOdJ)TR#5G48#oeV+thq}?;23yo)1R*sH4d-k(S{kGW- z8AMJ4618b4vqzH0Vjgg=hzM4XThc5 z3h;;E=Rn2_-fbZ5h4*=o`t7X*)kd%`8*2gY06z|X3H&Lz3Va5<3+zRBSS5=ot?vb2 z#lPP{_k3&agPy%L*E@V`?&6UZlO{|W_ungZp?iV;4L+;p?LTy-?qu@Q-?wE7LrO7mWVvU0l|#Vw|Q_xFIO7Sqb9O}GAK1-wCV9;1vx z69Q?I7M1Sls~w`!Jbib=?uY!qQQT4srCyJYYj!N@BN@sP9;Z-?`TZm9r zZjqzXye&{A#+QLieMO~vS&mBco`E{n@P6SaZh;-`%Vj$%%^N}TXocY@??y+ZdrKWf zT0zE1|3rFoY?$pxo^9hK(I zB*3MHH_K6JUJOculyvVpN2PiDpwz>sdtHu7^NuB$G@9^^b5xpl7L*1Z>E19$@hw28 z;|*_uqtd);sP`LQoukscMNl6wyqKf7NeHDeOS<MYy4>#w+4vbb-`;?gCHGgB6y^Bv>MkJ?UIq6%71CByhK0ADm)^REB-L4DaNUyP@nWjlA(;A*b7tZd(uW#wH{J1bKw-1{;J zq1S#IpB=yb&Bd8Zx>EE-@*R4|?li~jDBIClwxgr0ueJB>D9c>3IKw#Fhob?`(RSaF zVRn>l?=0WmQJ&FRCOcoOAJADjaCl|rwW*zDS;NZ)e4@!ukF#xh^t$%+&dLE5x`AR6 z#Qd9k#M>(5BuwuqF2tF>yMv|UHl=_j4y5C@-L-SG=BD_brFL+mGM)&%JInWXq;yv9 z?<^bGF)9;VXJuB$)B(CTS>Cr}d~fq8qhnO6d6d~Pm9*f|fR6DQJbG#r(`dcLzh$Tk zb6n7vYD!P8UwYhyyWZEHbinxa-JRQ6p4!>JqtbjKzWs>Zr{J?6dj&Q4iag;;eTp80 zciZcIk(+wv{YC!!L+O^WoLcjVcivO?s7W+@<-uOX*EZ7H>L?dcHyaY_R@p*!35B z+GXW?rY@`8N$E}XbE>Zra1kY@@9^?Hiw?Qou9x5It>5c+-HP8zcl;^K7+$t>(IK}Y z>*UWm>(9Df7vK-|zjAfOva&T(I?Fdrb@`sLtnxW{+u)`8Je%X09c5igo~Z*UiL@b0 zcBb@uuxwjr`I;e{JIe3qtlYEY6*!g8b(XCj@_0wtN=in*2g|n&DeqcH8?sif-hE7G zCCtigLn^yED%WrA9l6%0HgIW39kjniXl@D~5J{M=on>1{m#1kjSCF&I z{hXySTQ!%Wvx*0s{DzbYv~OA2Dqp7elEqzK`>{(F@An8o*}h$yX(FB~+pgG}hH-0W z<<^c$+p=ypQSIBQIBf5%+}=^S)r4JvQR`d2qoW)d!he=YhC!W`I|$Hz0=JzobV2X) zUre^`-Nmw&x*o6n?9TF?CXyNLAxG)~wsv#Gnjt~+(xOTxueg0na{90Uz?LdnDTqXH%Ot zJ_BI}4YYWp`cnRa26fQxd|O~ME9BEop6S(y;%Za|Rt877n%WnigAQbnEf*TRm-6f5 zoy>ntL;Dy-E~5=Kg#X%5$kaVxCpR0)$~8cZ;n&Bzn*Ubr9;i~o`#S%v+`~|1hW7~n zt=#iax%@KCF}hNyKHg$d(Yp8))L6q~S<)P%?xTfAqlP6@ON8zn4?!8LN7b=eS z9lwSeYIrY0WkY3pl}Gq)FNb1g#(QT%jW^U>sKJJ6g;MM@y<4Di4E1HGkC>;wgeoc;`~ zT0r$m_4D#LD4R0{P^G-1k9R&4vrecnP?HTc0m`QH=L5OBpfow_<9!8cilM$1$o)Ey zdp?kR8EUGL+a1V#fCYk5!#f$u`gb~1h2af>vhST4$Tb9VS3^xRa@PcMUk~IS3FJ0F zO*e9n1#-KgY%YwY_>bUerne}dXxz;Z@A4-ha|*IRG~aj=)GMcK>MqO9HmrH$2FAj;}3uyUKRTRBqmF!UD4jn!LlCe(lR7Mw*Y z$f#WTW$(Hk^cG0g=9MU$SE8)m0?T^=yXAE`%IYn!JTt6GT~@{znsN62sf_q46M8)! zbOmaUx-`;~a%4IFuigSWs~9b`Hy%`%HUT^hWOf%*H+mtcCVirNuI|xhmnfTEqO9Hm z%iD?F@>nHnHTnr^>t^vuqFNq!^^GW%t*^~8M<%jbo9k-gJga@&GId2RtG+SowAOR7 zSe>tP4$jRwt#+toIB9XxJkOn2%xY_D%4(=?nO(=bF0O8A)VB_tH_dG=S=F_*QjMEc zPr%w68cxO~tATBap**O)et~f?tEruD0>#7M(lnoU)z&S@st@8>gU0cBjgCDx$-C+o z)F!^&tWI`Iw`iFBbUcK2`bYi8z5Vc0*<*h>*FWn2^D!sgduHQTmri~7##?`RdThku zY6Ccb#=@6gTRrd(NEKC9nenZV)T zirLtYznvo|-l_zdE8wh7;OGd?nt&75GjJr_UMV^rKNG6&G*$17lCFY zGJU)(?+8P2lp!#d^KduLvyPK$TqV~Q>=qMVNPBS$Fm$KdrFl783FKa}D2^A0HE@9!N@0>=9b2|HLh? z$d?rDhXtz+?Nf?}rbxklj0fi0z2My6N#g_&-JnVmd5Ype6mAZnSKSh}M^}&&~ zwdM6KEhucR9o5vrcS+4h_(nI>H&@ivwDFBe&O*ySGL7M$|FVD)ex()hOG?NUEVB_D z_XmzjK}aSs&qEJ_95%cPP9fK|aHcr?Wk0k*B-r((zxPV#!r3Lcxmh7|useLYxw+Ye zMqYRL`Wc-I-yUb~%}{yi;u#~?v|Xbiv@zNIZwQ)W$4sJgVbF&df*`l?!&YVrP};*C zzU`+te;gROh|YzzJR5UrRId9M?t0Nu??diQ(};WCPjQmf!x!%U&aA&zsr8fgE9srP zeejP#CS|0RI|@j4=k6@{S{jwp(DIyaa@}=cXn=cOM2;z< zN0EC+U(CA+|0cd`9T@cs8med3HN5*Pf!!9>G@MZ~t9z8uLb8U&N-r&{Y0z;__S+cb^E?fX|3_}+;()*h!aJ6yZ-_w|59q7VIZ=TbWR2v668XcUo z)~$^V?hOlO8uuHWb>U3UT>N>BmtU!h<&5%SJhYbXraOKsqf_P0$3dDj^JSNd!Nu5X zz)yf*0jZCzT+)jAUi_{UhQ9c|6?nzolMxu`CJ*_7yl-pEfdQ*R@XBL|>rdvn} z)xx!4G3@Dll~9#%dpdvP!K#UhY@||zZU@;)p=xxXO7R@e6DmdM`ctimfnSpw zXx+vmOYO5IQg#p`U$9d^E9Y>Lw{`Q&Cfv9 zn=Rlv@LBK)@aNz&;4i?Jz^&jvz+Zx?1m#yC_m#{Y#S=j$Lgv1~HjsNl-tWQjAS+R( z-uw~NRDL_iT?X%Ya1HnZ_%rZD@VDR&P}_vOGqxN26Zj^$6YNd=c7ZB;uYl3=tf_D| zVa((w6D`lf@hAGVI=NB$d;GxJ_Z=@zTeWRI2f(qHOKWP3h=1dbk4N)8Wi{z4U2TZj;%zDiHe0;6&=gw}^a8rZ zr#kQik9bYcNZ+aV>a`N^t4t$rRoM6AAZW#dc3OGw8>OAf+e!TPJ0@kql(+YT_-^i~ z4FU&X*I4QVuneTk#AvI{9W~lYb4QIbXzr*{hP;z_jvrnYsIe7oc5DQA3OEYXowZ9r zCeE>X@HFt_;OU??tIq&G4-N*u2A&COnMillbnj&tsPc3+mYjHlsPQ$6 zda*VzA5^Sd!e63Xgc~m014<=v)&7|Du%!QO4Kx@|955u<)O#_CUKD z_UhI;C)3z!O1c`_cAV%_ddHIpe%CRpzNNLzj*Hadev9mqQHv`(8#2cDSLUy9cK`YP zk>@%aAmhtxmp^RpB+F%j7G3RmhI^?VsBEZyozG8YRfaRZrhZ)osy%N2)t=7-F9#bz z#vEP~sCJzNA#*S6YH&Mt?tsPAH?)G(6?1=2^{O4a##+~ap8@BCUjY|@+rf{4`$6hh z>EtU$U9?Cf{dkN zzXDf)e+54Wo;AHRz;9T%g@EUL<_;K(t@YCSq;0o{wP;J5{Fxt*sO}eNh2)8q; z*#yJPZFrYg8X33AjbxN3e@$p-w93-d(pFbHN%eAOQ_Drw4efkASGWFqXm6Gr$JFs0 z(?h(U!K_-ARQz_mMXRa%ePO6x+LpyMJlGZ*VYNE8&QghWU0g9~Q0HXZ2C+=*LyVej zHC7L$YW!0+im$4(4U}4jX<6Y05SB6ddPSO55oNDV|O-psOB z?6+ZklJ_?9DR|R>s6+M}5Jleftq4@N*6DL^>HXF484ng3dB0U`L`8>M5-A*!@pY_N zdmob~A-xgwU4c>lsVz8#-$2J_UJ+A-Uj;u5z6R<5(CeUX$?OA_%x{35;NQR}!M}qq zgZ}{OU%h{V^o!oVz!Biv;6-`|2LxzOJnn>>K9zbOqdt0UfyAgsYLiUg%AF^3znu0U zMmhEvhsK@)xkGO5mJ+?#FR>pB?gZH|F=IN~x)@>c`h&W6ejKQ=-TOfGmGsM|FFqce zfPDa139`Kss|Hb)Y}y!PyVa2zip~n6pgJL=zW8X+uOn-)N55(+HrWki;bGk5w$xe=0-f=bCD;!nZaz*qQWN$C$02Nd-$q)77dL)7!0q(N6HB z8LHJ(of|_OMs6zJevcWwnyesbBBLP8u|ZJLb}yJ|y5xtu*C4G^tO~uwhD3GBxpV_Y z)e6U%Z34R#hKX)-g9}-g&Mm$56ri$KOA-o@Y|5Iqnv`h4$FkUrXDO~bSu9|h?03#Fm1yz+Z#2L5&;cfMkXSU<1@)VP4TK&$|42S{5$^YtUe?A2YQ?%xOiVVVbb)f>6cC^`>zsUh7i_Fta>-!q78qZ zcEY4-WfjwDH|!T{mEfZ%PM%aoYk5@v^9HF$5of}bs_B!f#*XD0re*6x!V{-eO}}_@ z)u>CSmrcV5t4Ua&wB^`Sl_o2x{YMhshAQ(x+QNKJZ>9D>nn;YAe91^->5ql0^&=TJ zBGI?y{W&Np|q(Piws{x$-*00Tt1M4SH;5GKF7-g%Pq)pmr`9v1=3`xHfY#$IB zz6>1rGP7#>!sa>?c!i_YeknM}eyyY{Vu$|O;C=YAksnPbdJLMD4*BMvroFi7@edwZ zwEo458Jtfw{O)?3?=}4HdYroq|CwdCU-O*-SF}yPe{Am+b07VkS@%e)CqZlC87bYr zO8l(hcmFE!nY7UvDarLjKftqhuO~WCnq1vB=e^Kw9QgNdRl@vEzD(@zqSd_nM0?La zy!>zfl=Hh*t{rHteowyY{08%eRTSR~_*p#@qO6_?QC1^$n&D~eCMr#%Ambuk;~hhB z2%gc1jyN9WNdcrNzLD#wH18>>bi@0Jqtd*EtQT0h#g0nzw3c9bE8{#C95u5)%6w;8 zRJymr@zT7n9A$S+)4i`c3cUfeAXYBbQE8sOm8=7xN11OWi?ZKJ7M12rC1S@IUZtbb zxNL4+q4v?m;)&HTiT%EV{ErcX#-JT1h_kDeCI^eow8ftQ8bC z-rDU(?pFWeW^Y~R+`@HEUDOUMwm?V4kWVh&`!9T#R*MWJ?(P%BdE0T6|%1#8(LXo;;@m{Yzb6NZ@Gxvda>|#ra%ia4Wv-@Z?LM(Ya z#ax=-KfG*jzh&AST~@xCSZ(5}{YFB%ftToBb#QBYz}zEr8zyvLnOE;ovbGQ5&hzcx zQ6%2{yYaWH-?zE)&Bd9rJyYiTdPBH2vvW5JCo(d82gEUO@JJ61vUur|$5J}VyL5{@ ziI?WuYWdEobC2z;+)RKskwO~@<_72>Q3gr-flHv?(t_aAyI%d*+iy$hh|j=LNM(e( z>TIqAz1#Ags5C`OBJZSpCn`;utI}B3H>xs)oI&S7R}d-6$g=Y1f&`G7g{|bXR0jk% zfHUTD%U$=(xA@NRWgkT=UXUnSJ5;pDhmwW@hn~?MsC{_UmpvVXkSn;OnJzr zD0^*3QzxGyYRb(_S<5rEdMxVzSt|!TMH?h5!YJH8rjH&aRoRm=N22DR3ls^Ec;%ht zZTvC~Z9MO6L;GF5H&O3SQV$dFz_WLRhw+A1>sk>_LP>o|y#781R}?FgRnL*?!4>fg zrEsXxqYQ2L+L|eBMx#eiC{c@%(Q$-YvW(84OrjY>H}ArnAivQplPL#&?$H3Nb&wW^ z%+CIP0qvW&ao5vCNbgIy@J_;7F3zoBSRCEIwj3e z+yC14Zr^o218$1NVW?KHJ+F1YZP(ij>{aFuy`0;A*1CUg*Q2)(5jAu|mb8Z7jsD$;ML`uYu-smAo=s^{qK+8=LOsiM!) zMt+B+^R9Z9Qop~mZ$?M?4k=yfAvk@L24KDMVKe>0{?6WMGz3BH&>_~9($4S?3;NW< zctPf_$A~qd>(zd-@o_T$dtE!hB!;win3x#bW6%2$OH3(JxvOFhzOX$I1l8{;2kfpj z-d@4~-q&8@Qm9wh-}m4x1L?RKY=sh>=5;fQ=2VC^+}vx1g?s73hnIErTc!?E!^yoS z95+QA?hB1EQEju%shYzd#+w>b>_G?6@bYzw3zwmdZ5i6wu#*Zw4^Kn9qo>lJvHLr7 z-}X!AX1{def=&iCM6Pu1HD%+IwDFzeQ-084;6O}(s+S^hF^tqD*y^o7S$gY#mOw`Z?Hl_ZKt< zjt7SE><;DHlEvG+wp@lRovG-*(h%mF_t8AzTgRBsQ5<)eDGDvtwy@*fo6*)M)mUcW z{E1O>8MEvNN(g$x26UwK5WO9X(eXE+lU{!(`ms7EF5A=5_fxxnCsk;E=$0|o@o5TM z`To408f!30_4PCvO@E))bpNIhDh?K8|E^;3UZM# z)t0%v=N_3jS9wk&FF!#fFI{(g{3N15+5wY^BD%W#G=#Ywrcrkk%nxC13%!go_&{hT ziFLJfn)xs4C_~R&IM-L8zs-Ls!b?Nxf_05bK-}#rN>E4`1$Em(J}>VKWp_u}jcC47 zvZ*2LG7VuDlc(Y3JNqp=i*AW-0R41?b1{0)eR8j6Cyb-Z*)B_-;t#{;j*_771RlZ&`lo24yn|B!M$ zFokWiyrRTiS_UzFSMkf_N|0Ur?ZYWMyOn_UE~r`j`got> zzm?kvW&Qgxl=bf!sM-Ab=xD!_)7sWBethPIVmaDSCqjM1P}xul1OhInDVC`t6-HNBruRjt%Z=Q9Pz8qiWyU4eEUJwsWCux>P{fbg6|p$2@I>sx;JMs40e8 z0dKw1Ch2Xdbb;-O+_#`?I{y*MhIAK{_4zMQt;WUcP}b)hw&bkba40KR z3e{%h%Al-VJCs_HOz%FZNrw79)WwF{26e8XUWT%{l}@8kVR#>cviVj7H56VS?{%Ess?P&RzOgyN4B`Yo`?P=AE7t@6*`lNX} zHK6LDE;K$bf|_8cPAJimG36i}B3)I|17ufs(j@AComr+~_3_tZY!0Ck@6`Daiz^uGh-%xoHj1D)`2?d9n_5S~<8UvRTHigxX5A`i3J0)D|XVe?UsB%X8 zsa0!sIyS4;OqA6asI;*f14UVlfmUuab}L6}9)`w1xv?4p2SXj2#=vO0e;b!Mk&72< z#}q&L`e90Ufe{;I2$CYzKI-Ob@-ld@z#^Mr&fQ66`}Y{T!Win`YJ zhPF_)j1Rq0VZ4%`!l_1F=5RFzDr=J~c-+AgJ>}GiqtbMup*0JodRAXxR#S^njhB-( zv$@$1$?4eo3L$mlyInOu*3i@_xJ$M ztw_)AdG35U-M+NCv6f8XzJpbl$Y)FEMDnGvsm4L}Ylir$6)(-tdF2BSp76(-t4m(_+0BDD`>GYE zJaR+IL$TX_y86`P2mI~cTjyVS`<#n&gW>$G9lkGt}RH)h{m(R6H?0a;;BJjp8)fXtapYnJ=*`c@{Zfl4 zBUIyVhqeR2IOh^<8fwKk*J4w<6zANFjZQqo`31HG37mgoTb{ttLc@v#&Hy+o6F53} zb4LQF0M4oe&KNkW6F3!c)+BId!g(Ozgq0>Tw(N+Ew>WuH-`7;0$mQjoQ|B_-w zZUh_C$ICM1%zSgwviPr(XKv3L)IZC4(z!}Cu97QO{JE2fyV~B3vnSyAZ`VygYkW>0 z`%0KThZ}(rnNzxPbYRUI-_^)&94$g6%5Wbk!r=x{gu~sR2!{bsgmX(b&K=!2U+czs zq#H+zUe@@r&<1auBb{iMq0ubP5w#;hMx1@!IDKp-=b7)bR5n`UbM#f+M9xRLaYlCI zRCMFibmO#k<6P%BM+V{f0-WuHJI+}LXD>}nobw|%F_vE9oZrLAVyYbH{2k6JCY^Ck ze>GRe_%R*WjWf6#C$}5t{BE2H-8hxqIMv-azDj_2UVJ=3riuZ`1x@v)?~lvekRYSz ze7PIvTirO1cjNrL8|Q^?oPWYewMph$fP6KU0cV(QqB@(V0=-gJyAoGZa``Xq1F7@O zFDcf%+$_vlb)NYpB{>75oV?-$PC<5lj`|+svr*>>Cr_i~FsC?MeM$l+Z(WpAuqDbV z-V@=JWbaSpF6n%>G^VTiw!`LPyFiCjj0h6 zT!Jii{enZ*Ok0Z5-@2Oi7M5D7YUb3{Tvb)m)O1ySU1|P%rnDB7#PL@c&rusZtD&vE zl@CQ!p*pv^p)^0ca8_M*-1z*Nvx*JVJG&%5Co5zQrujA}w;;EuL=L3+cA(LG+x&2f z_cA@5OnA;Ldp19*kxDR0G~aGw^0ykfIbXMuXcX{Dd(eD)(vu0kS-DVOrKdl|uTOQ8 z>#q6s+bg)6^+|)=4*FYxt{#fO5>}@4EmCl)Bj}Q(|BkYGMDLu8;0m64WIIDDKZ@uZZX;MwPgCDYfSt*6DyCz+YU$PHDPDQV{ zn;hjJQeNcWh;DMp-#g|I6lm`wwaMHrPnGCFP( z-T^@)A{u1IQH$b6ZX_ezq{*2v(ttdD4&UgR)6`H~Z1zF2+@lDvU3HAtH|%9U??~S| zXyT+CDNjvcWHZJOGfE=%A{-n*yI5_o?bSw58XM}aQFrTadx=*wuey0wL-lN<-Dsa5 z7BA2bChxT$6X@U(L#m9l4K2rBNF&$wP<)j}Z>!@!OHow%{TkE^>^X2O_#04% zD}D>!0{#yC5=dKTwDbJ|{0H{!;IZV(^I#_U0(dI;BA5rh1QvsT0;P3lCpZ;+1)Kx! z26dtB&)_G)zko}?z2JAj*TIb-eTvb*#m2JHxb-&>?OooRV05!ttGH^*6d##rIa&)Z zswG%%ln&4E)BR;@RE{d@=J8o5qe_dk9aq;_*TRrky5{tbBqo_IEoG5{qx@}?9t~x< z%DEWzvl^RBz8z0V+{nJXH9>~^8kL&;C!oTsyyWbNSIbX^^f!6=0Z=bvUE1X3319{G z6G62BXhn+M4t@yy8u(%GAutPk3_Jx?I*^au(zZ7f+&g&Y$9*&_R=OXpHu6<|(kxUI zsiShEJssieinKA^)7B)aJok+}b>?98v?x1LPYX+;45?ubSKPuP?l%XFnufaS#`fl_ z>Xw%3g;p1q;^-=wWhCUFvUIE40S(lj&2bENld>s)>HVK}3|sBjJ6j_k^kTD!mM*=& z&ge?PmQ|1@H&Xwla$&WhZE!ZLfb{+#{et2lg`mFLF5|ELqL{+xD*!VZ%H;K4=UG&p znF6xMJ+pdArP1&X$7!@5jM_1sIaOernyasFm!2BCFRU2NCMDGz$=!2K ztW|o~MV^P3y2c4;Y!(TG}MXWEYBtmeE{xZdQ zlVeYA(O#Gja>W=H1o)n^wT^bIHDGC!B;Pc&&58 z*@kBN1grhggs$DHdEF;J2wUrXzCU83xWjR34M)kc8BWlS>)gWwIFRvmvichezP%q6 zF#P_{qczX=OKHjAIs7p-5IqbYWwcum+AOrv{i};eM?MLguS%b1>iKW3S@oLXqCGJ z{0#QXz#o7g1)l^j2Y(M<0jfV?Dik}Ley18d4`e4Ub|F{;;-^;&q6yZU4Xy?0%VMv9 z^kp%$R(e-~r_(<*fFA)_O^xM&SA%2077z_{Myst>HrueHq0MNumA2+uo)F6Sx5E1aAOY^NrmGO6%=?;Ag;xz?;FR!R6q7@D?zIqV`!(dloCelfln{+2C!U z_8>kFP6bzjSAk3?V?P9$w#7DsOv_>~gG{Gle+QW^#f~PASAo(}yBgG?{CmMV@GIbV zz^{T&f?orF41OK_J;-f^*dFjfunQ!wVtwf79|BXs4d5~0qu_bqM(_ggG4M9fmiI_yv$U7rP(K2fqgvfWHK#ee!o;5qJ#! zdI@*|cn&xj90AS)&jmG@LW5&$Ie0$!4X_kk2eMNedlDQ4{sbHiz6y>3-vrCRlW5Y$ zfg{23-~@02_;K(;a2YreycH}5KMzg~@8Jhv!#=*D2i+)`|ZYbX7W0FrM%%@l{97l)l4}|TkO5P_i$%eoh+$PcVuTHNk z-08&+_gxwCS>YPbk0NRg1?!PCV=AoDfcYV?8JrGY4c3B;`(ty!Hc&^DXFaBja1SQ8+#X{xF(m<@JsA^Qs%VC!OAs#3V~P zjfTunflz2PWIyPk@sY+TDC(;=<1T;P7#>|}_~VaTa?FTyqnz<#JG%78r*?FiL>sln zQ2U(|J8D#J$%DCO2%}+;Y*rVwa#O<`H!!jR-QYxmp`HdgCJ4<8A~jOdI8F==4i(vT z*yH0m4Mm@m1d(m2yT%`qt#?8iINKqaMz;w=G7V`HMpNq2W&F{MwOc*b8V!9j^4!|v z&wG=_GXChMf5>hMt`4QHcb-U4WkcmQpWg$H-$A)kdASu-x&17tx%O>fJ@|Q0`-LmP zPk^_BH-ldQSA(3-FkcM%68H%AFM}IF#s#rw!BwEfGIxP5f%ky>!27^7!oav8#+=Z* z9~=yR6&wz7$|F_@J^y;BfE|D5%pd8$s&0$G9f85PTdYt-L2d z;^b`td8hXz_*3wQ;5P6na4)zSd=2~&xDWgZr~_k9gU5iliJb`k3{>5H28^}`LrFIo zik>lQ4-hqWwFj;IqH76qBbl@Kz4bo+8RNdnrOhYy$EG(;Y@b)(Slw7tXQsWrR0NZ? z20=N?4hid>Drb7{Ajf}!_{jbusIcrv62CKum}*{zbEEjFY%0ErpR}e&`v|#_%&A~k zkMUEBXQC$WlbB>tQ(Mp%*;0Nj^L6msu9C<;+u1XrWuJ*%&5i1KJN95wr3TJ#@~me6 zt#A|y+vJ(11Y3_EpHY*iModm@ljl#Ht={j1_Dn&1zzHX7zU(AlbHjLpreOQ?QW{13 zjSn@lrM$7VeV%CpyEkuLNCeHBTC3lZIWn57h2~17j;%+^E0v4W_~kqP-zf*mzax6t zb)sJ2SnM=zrX4yGyahYwu43N1sI(d_On@)R#1df?41&@Ko?@ zFxn36Ap9egM*L)=^<*N?&y9==sC?si>+VORWtm8ZHu}(cb{Xs zWxv9iqOM?T(BTK$im31hMO#H#{U~eEfl*qj91r04wBwE;pOn5Af@(D;f-1-5p!!p; z(wcHS1-uXYR8SXQIQ3`d{L{eg*r$W6je3>fS>Q$BIpD?M1dxlk=F56~y(PxH-Qy#~ zG3M9a4DeR)a`0OqpVx^oFZ8NF=6l|i;P1d{kolg+*+TPWnp!YgzMi6dE+Q>#QvuN#)?!+)lp32M> zq0F?+tzSlLbL$WG=9uL|zeLWfUZ5hRNdXF@oC%7hMtpurrk9kYN@_6HG`1bQSRt_` z)i1?nsZ#-6?j8q4S7l7{e$lCMLDk|57IJR7_jC*32AXVPwN$`DyrOr)!6siuX zTUlm(C@{)5m1XtGGaP?0WkPv*9jG+F9#mOo4aSt^PlIZcJHQ9QPH-2v4CJ7`_Zje5 z{JI(Z5V#yH25$jXW^V;mW;mrvKSDZu1*E<8 z?gOdEy25V0j&wh`1p8M({Pw;E>U#UvL21YO2B@zjJqT_D9|BE10Hby5C7$0%8inhY z=8Vv^M^m2tmzwbad0sZ_BI zl{h=T@e94FaH<7&xFTqmki*rl&D0Bxe^f+m_46y^95Y3Xxo5N58yZ@6R( z8~21dtkm%v1+$HyD!bZwQCru*ELdr})xDTzgV2~aFM^fWCGBv|Of^=&<~JX5B3~9b zfyTP|etWUru?Ve;WB0nR<{_y28ltiOYK%YOwDvw;DO^2gT{Pjjwa1@tru@nH6V6|T z?0!EPbACupWd>&)_2PFW}AKU%|Vp|W1j>60Wuf$-U2lb+z;*o{|Tzi`4_19 z-`n6n!Ia*tC6i9Q!1-Wrkao^H5~N-6`hedAj{?_&d=@XZ3FPZ4v1h?_khJvrf@&X* z0i$is_ju1Gq@7>4qWwAR)Ql&`1-&++p4_MpV4m!){h&B9$=aNeEi+ALt~Vqx$(kE| zN=eO4DZiE)4n2fsR@R#7p3byi(_HI{d(hFVCGkgXwxd^ljkh#@-L!+vB%ftctKzpK z$>vq-oOeMN9<*fIBUCN*+oW)n^eeU~YLNlmq485Ku`y6jUGn5m4jNVW9f(v%v>I_C?H>i@2>3 z+mAgDR6WZFH6ASh3&29K2`mD&9#ageK9zv%lX&NVUk68k8h@S(YTS7qxEo~OC3ZC7 zr8$nV&hCu_r-P$F){?x@;8(#hAZt7xTZFN7;5blaaXc6;-|X|4xNAHv6D{8#(EB6h zTW*v-rY-1k-Cz`}A}tI35*~ED<}Ja$cU{8O#w+Y9zHR2DkU5f}*NN3q*I=)(qF5;S z+NPD`M3E^*DvPd+)H zWUtJWp$4!8{yb1+s0rKzaydKpFR%sF9K98s3Q{{_wcs^iGdLeqf3W~u3N8edA0Gpw zd3-5+H3}Lh$wc$`$MB+gEH?_b)&n*NnHOrqG~IPyrqe>M&e7-{Nldal4i8Lf50vT& zHCWl8Axpwi@H6g}@x>G6%c@X76c^=-8tD~|zmjxP{O$x*$5(-4!Mngp@NRH6cn^3N zcrU0v^()}>;C~4=<;+qh8u#ao%tdr8JjUR(2bA8%0 z=NsR${YN89UOG6k#kYr!$E=5!*z0U^Qf_+bY_``)GMCgSajz4yuT~-IavV3hbvC=D zvBQ6+WAUb^+y>_ry7ET*CF*rfAedUNaSXp-dH{Q3zqB9D_h|FX@gg%Q-5HXxEy@Px zi&-a81GU{TLW9t?&Q-jx+5;!(t5njThLKRxpLcoYAL-DVzl>k<@}G}6WF(duY=En8bj^?wfFE6sI`@s!E$gH zSPi}cE(CXjH-dY>72u!2d%(Yd4}yEa?|`p?zXV?gyTEY4d!Utf^%t9J~TP8~WH%mn*^wB;UO6}^D5&nqu)pIS6>1m0LAn)0`e?b~ z7=pfn=>0g-E^uUxuYLvV`tsU0gvd9^nr+oVg`%CGsoM$XA9eQ89C$UQmv&kW1(m>_ zn$q~qZvgBB*B@xw20#-{Ij{{tiW+NUg2g2Hsv(|)sG!AWlHAicR3Y^Tx*9{;iK+&= z3PW49{RC#Hcd-*yO*&nu?X+A&SGlm`Q2DyWapE;MG=i`VK({_>BDo-=*`HnDS6$V* zj&GD-s;h(e4R!on%7XIn9FU^{-f(anI0Bplo(tX$qV7HRFjxvc3627{f@8oJ!7^|c zI2KeL9tWxpj|blmP5@5=%R$WtCxK%@l>5a#3Qhs90;hr>2P?pvz-i#^AgcdjYrsnI z5%40A^D^GWpyq|#-;8n2#pAqBES-2>25MgTQE(_Y0~`ik4s!m(s{%)WSAv|g@T$Q| zkQ<#bmFF5TT1PYw%_MGq-x(d_^yYbVU0-fA22eZnlSmygm&?rlo_|o{aECZLmFV}D zwe@Xt>RL?QQ2(ga1(h;?gI}vRNfz}rw^P{)^;jxdK_{VghmCk6t2eWMv0-3n@K^jT2zpB3OO;OD@*LB19q`#Ja}@K4~~ z;6Csk(8K@LU?1>aP-T7%sCCq@f|>_C2z~)v3w{-R2>dqqFsQuwCK%1{k5VUB@D9Kj z<+s*GWY<`Uz2I)=m*qw>7lThH%kR-NVBA17IW5nVn4Vh21+G<4J7G^tta6#mIas@T zb)6GY!(oq0sDZMXYmanjilK608${)`Y;(*sWx2D}$~zU9`~4+}_>F?_s5-jbr>3jT z`C-p^XgH@vx0H70sicMtHsNjlbR(a||<%lEjU1hW+rd z+UGk_3rEE^&q<2$tfxHs+phHLr8Ce`FY+Qz7pH3&;#NRR- z&zwoqNBBpmb|_1$nm)pMcsbjDhWEiYpz4gj!k1tJd>gU=YuN|zZ?G3>{vBQb8=?HW z1bhp=4dt(~IBVH~=o)h~%MOMAfTzKCpyq)56V8JzFb>~^n)|UEu7&SG^;P@}s;}bT zunN8px55wM>+mDE8@9o2I` z1J*<4ke0m$dqVnC9p;jj(f{e}3ypsV=|6P#hr?kmoD2_uvLj!DskUh&=MUyq^7+#* zwJy4gd`s;!)H$k)Ho)J7Y}162X$y++*GA78G4nc887(meN>@npOJ|_e`QcSXD35KG z^(Iy}L^cLNzlsLE-4lF^Y2lT{=G`Wv2kL35!6Ho7T7CEY)R|~3VB)F|v48iRcNRqdm z^vCYAM`@4BL%KD9KlQKZ$5O+lUK|FMox`E(#V8yHN5B{y3BL|U!SBJ*@Da#-(N;=IiopMPaJ>@c^>uT|< z@-HC)UTR;sAl#Br_3w7OdsUuW-EX%F(P8_ieYd;n7-_FNa_&`Qes6|X)p@-cyL407 zEcqyIFT3hk-R3N_5QS>G`oJ;C#*8jvdNXv0>ez5)*hq|D8R`%zXkX58--nU9%h6CO zywG1Xf5~)XO=LSvCYdQ;NjFD#0pvmDxDG1ke+;FEk3jjSKY{X3 zAB8`LKZS3?4N!I4&tN`j{Tz;kkHgF1Mz{d}0+zxjpmhJ2@H=o5lz;jZRDa5^;IH6j zC_Q@`s&0G+egdC`z0ij$sP;}Z> zz?Y!S)aQ1dAN03+n*AK{lF3!Ik?g7t6&{4*Q{ zUxU)qzrcBr<hIaapGjGC zq`$@FU+Vm9ouhI;16Jh|Fu!(v(j!;_(tXdTRMSpYWEyD=bt(OTUJAAqjdbY`cx+>DYv~~v>SD0<&A6Ix7obP z){J;5g+PVrD(f~<2zi~F$ETm?b-LS0uk%FmQa`U}LO$jOdye9j=hDAH{5|Z&_jL7d zU#RSgK;*T%17HpO68sZnN&T`$_!amL>UhuTZpa4!O#OH=)cD&#sB!E;um%o>8qYojZiA;n>E&rq zeUn4rJMeV)3FQ5wvVF++0=OSM3myf}hRk_%&V{GJp-{ST9!%9Q^{dFaQ~BtZ>Vy80 zxYYVl=SaVfg@5q|1kJd0Y{4R4t8_>7j8ZA-G{3zmmC+cpdXXwfC7>9zMoT0~XFBNe z3psnHl8}sMQJ&sU_bnMcjK4M;c^P@4XPFL_2UkML=nSYjVkT4_F$+EhuY&3$n+yL5 z=RxJ^d??>+0qhGG!sFp0I1pX~HMejHR2@mgr?~cb#w>;r15PV#PcU z!*!KB8|=DDp5gpVu9D}UlyD1fM~J#3Jm1Lc8LqLm*>|R7dr#?S?%Fsno9sQh&Xio7 z&GwW9Gv-X6Q|vlea`8Nu%gqkicnQAmPHnIe<}8!6x<U@mEGfPLW4p!$pXs7cvn@NsxO+z925KLNKuK6O&|d-xRG34aCOgM9d;EEAc2 z8fvWb8F(Ii77mBiP-8z^;B@#Lyav|5GWctF7knPBgD*hM39N;+@I|;2{s#6WKYj}j zf?J{5E5Cz%;LGp?SO=vKufS9t^X83sI+ki*ujP4Cbxh~TCTT84T?abGYG=|h6;+yF zmvl@59?~%z;p&(?1y9Ia9rL^kSI6X9NKW^vV_pNq?QE2#)+uw{L1DXvE*LGZv)jH# zNrO%eXq2b*$>xcaFswcG$wXWQlR9~iF#|(6u9qwOy~%&?=ap3-B4o?;OHigNixwyg z^)6KXz=w8B{qP=C{qQgNBlvIlGsx$6%3g)7aDUSJ0IH4tA-n{B1l2a@<2+^8!H?n3 z;3u#e;_#ZWk?yd8?F{%&mXTofFE6jmw;eK!f z+#miN=0f$W@gWB@2j~EpD$B#UZa%l>8S_+G{vrE@q>L}>9Od7+@Xe5~;I*YEFC3`; zbR*76JZi+MmChZTwN>f$qIO zRM{U7RrV)9`35IKmHhy?9-a)}gnV47tOX8&*`zxd9tux^C%{vodZLCv<;&?XHLsaJ z9jcpC^ICQD;FP@9Il5oXpMIqSyWyIRVAaeC-miT=@1<&%28Yasjc}I<@hiFMHx%1W z1W#|19UFVAt!Ja4?$0mV_8l9ZDVl4hlXx|xF6s4UsOV+S!ZmnbM7YBmT;g*wlISHN z`{P-cPS@7$>*m)eG5x%{+1=j9xH#&Y{060_U&nQ`%2zUaG=E;*JPFxRnNNk1(aWIf z=F6e#<|6nFI1Q?gV>)~sUJ3sIXTUt}Y$ogrXF=JetDyYU+3*H92R;tx!RO$7_$pio z{{|Pqf5B^@>gL5zeHTmMW_Tmyy-w$5sJ;h2V_x=GcnegU=2oaa!7`Z3b1sEngSSD= zwhj+kAxB|+LT?u)2!HGlZ!<{fy$3Cw;EBXo=7t?_7nIfTn}Z>9)+@JKZUYqk3re94N&&% z=TP?SahRIdygw4MXX)A+srF3g$nU%l9->J|=9iM!rrrqJGp}~y;QwdrnatCF+n)V} zlGe|&XYO{gt#K!%reDYQOy!$u&whvOsLcNW)zd87sGmZFMJJZtmH3nBis)E z2w#U9k9-3j0sjgwgAK37`3vPprkhNGGK4WOs^?4iiz%Dhxey|zJ zp1lWU&;A8v&;AW%&)$c!XRT27>;ou!_92u#`v}UOwL#glkD=_@f1vEyCvX{L0z%pC zup3+fGvI2-8Zc$jhaNCh$3Cw;`+WyK!;t?&?OAW~K=$k~D0_A|ls)SMWzYIT*|Q^| z>{&nfCOitto*fNk&yInzXU9U>v#&wfv*V!bS$~+C*Yha@S)Dxo^h>p8(uP!frgJ3Q zS3xt8MkhL9d*%)+eG&Go4{3+|GaKQ~I`Mp^Yt-ygSI6h}&eU7ydwoha+*(XG&m_Hb z_P=4wO@^{%F(_MhA(Sn<2+EdCfwE;6L)o%RplliIJsDfZdQZldT@Gc-ilF*U zSpTVPH@p&d!zRsud2l9F-{35$e(O2#S~w3bhx6gR@M`!FTmaQpTnKC6BKQWp2Fm6w zhI%i53G7XN6hn;*@G;l2@$gzW5ncx`f;Ye!@J1+|xCy4}8Sm0K@?*WGqnU$23sklI zyZnvfdZ~J*bCmDL!h`)LVnEN#TJY*VQOe#=DcWCqzrpR1l#%JfpRZQZejDMcRemzU zovx(&wnq#y!$7jJ#r$3AO@fu)tfz^g$OXyPl2pm-uy8fW8yZa=2A1}!TheRcx@{Eo zeR?tOn-d+hsHB9tc52^@l2zwUiT0V9@#_Cn?@UlZ)i~1Ges7K1bOZB~t*3f>LbA8U z>rqmS+rCs|$tL1v^g0`%>@e2JGgryZ&y6+DEa3p*TN}4vnd*ILEgYa?qDBK9E;1f`~ z{YxnM-30rS_LJ~*_!JxsS(~lwVz?P<4kRBxHvL4;z}wk=7HSNu8a@EGz#qWpp!}K| zsJW59hH9@p57lSz0{j5h!hG`QMX0gl-@N7Q>N9;6YV2wo`~!RqHp0Ka_aUEbHe*$)ET0LTSU4BML*F6j3>w3`g zx#!3X`I?>Vzbm6$yq{NwClFC=<8vdffA|$B)7=}&KRgJ^KRg)9KRg7kg?u>N_=$(X zXW8xp{{Z{K7I*|ajE z_)|C(J_FB#FTr6@x;h;0k32`=!EgjT7LJ4(PaXwNf}^42{(P9KOJ^z_@~R_Ux`F3O z9q-UN(xoAATRL4D;*TjR=`_D|$`qW;IDh7>;w7`^%xX8n;J#p@8c8zgO7T`J#nLTz zzogj6tfMYSNx8PVFybKr)+z4$X3`r^P24+@f?5H0BLZ5Yx~%=1(4LaGm8k0KphBswk9kmfGapKCu7;W$ya3LC3!&yME`su3uYtSZ z61WEzL%r*GE&MXP9;&Xp0T#d;;RWy}cnM^^Q8Ol93N;>h3%mo~3Z*YB_-oePSqgv6 z_HFR5upGVvm%%-7In3m_?tr;)1v~;)K(*mn$F%Hg@J@INtb~%iyI`t3|CID3l9~MJ zms&TxLR{)M3UrS0PjkTjkWQW%@-W?2{ywFg{H2p-Zy3W$$v`8CZC0#Y|E_~i2Lz0# z>!Ye}u*nQEBW@kZNo(?!w63m^6WwyNjsF4prRV$!l$@-Gl9NYa4E_`@fsaA?KtF>| z!=FRVC4U^g4mZNT!e2ny*D}YgPWo3@Y8T8do>$8zy#dcgxow4{H=t3oPPGG)7E6-n z8A#*h%h-4}GFj8hVtGc*H9x*bqJ9PmxUOSVu#EjC)C$A4=jq+6XsyBaI zZTz1pFXi(NcqrTnRlo0oSHZX7jqvZV0ye@2U;_RWvM#Za%O?1HwwvJ&_zx&~dpfTrS=ZRe)xY6)*?u2>AGSj2(Fag6@gYo=v(3ayR63Hg zboNH)==nFnKc$m1h9v%Pvp0Gsm2=SE^vbsW9F)E34P|c*g0eRUL)n|JLfM-`q3q3J zQ1<3`gx?dvi3Dy*UQT-W&^MZ@va)Z;peqH~rx(cswkDC%|%e zBCLQX!TaC<_-%MH{4pE^CC7uI%Ip-FDhFGL584~GVS;nBCh7c?@n4;zw&~NbKAjw3 zZ(KnL+8a;OI5CaAk={!CrP@jJ;;Xi)hCYLN@oKIPRvq-(JKhj%(73p^LfdPYVnK?W=^WV`^((xSZd?v`edvs7i;CwkA6eaO zxXpsxn3pI*#2Em_Ur5LRJaO` zgm**Pk$d2!@EdR*ycaHl_rs--b@k2K4Bvt4*j@wGUi~htg5QIZg$H1&eEo>{d{IU)BP2Rh=N;u6gom>T5gW+|3Leds|Gj^|DbwHM`@||eO zl99G{g42O;c{ZzS!X=-mA@JPFFUi(H{B5)Gzo0CXhnt~f>uD(2dIn0io`sUFDk$07 z0wr6|LCIDPlx+PPO17SdlC4@O*?JL5wtfR8Tfc>pt*ub9^*bopdI?IlUWSsbIw;xV zn+!&_{s`}7`%iE!tcNQ1Kf_d6YUcX+{ONi0OO++}qf+oK^&71q4nX*=?*!ePN%bJ`^3QMk> zM!!Y!_2ZDUtmeGrU=e@bPtPhj;4>F=Ww^h0$VWZ@9;iG07nB_Q8;*hR!*cimd=P#J zpNAj8Kf{lq%Ktx5dH4xTEf>uTXctN& zZTD%XHTu)7y7GGnvg!Tw49f3*{2g!O`{ua$eJoUde+??XkAu>?{!n^%Je1y@2%m%} zLG?KffYQ5xP~|xYz7GdO`2wfFqu{CV9C#Xx!XZ#?(9_|3cm|a1E`WEyGvT-3S@3>% zHdI^p9QXu07yb$kh4K~7gR<$v;5IlMz6PUEgQFv06C4Tu0Y||$I2v{*U--64+5YeX zs4^~usdA&|Q}HUF^h=eSCgS#{&o8B0Gm&ohFI1l;RGvQjee(Y!>TG<^Pt)h={;xH>_SI*rZPy)Go7RRkqw)c-e#l3ky-LLXg?Z-A7*+5?C8U6-UvVVsoU;;`G z--egMCaAn@hNbWya1DG1{sjIL{t~u8)xGb+-@x7QFYrAmUv3XnzsJ8|2KV!CxG&^8 zR;I3Lg{o^lfb#7=gsN*kf)ijHR6F!zsQ%XfzyXg*kXX;j0iKz?8n>g$B2KZB1G)||JJMM+@#@yUdI4Qo@q9YNvqpE!`RLIfP z%>Q!oRX=Z@io2bhr!tDX)h{?tC1^`j29lScEjfeoRk@r8_k+XWNH`qIE=S=#a3uUb z90h*?&xgN-7eLjOW1!x5Ere?KjfH2!ad0dg52gDP;MH&ZaUwaum99|AjghlXNcm+HUPJ_eYm2d)_0VQ)YVX7Rf9VuJl)sCsQWIOv( zzgetvq+e@bpRW)wzknR$SB_iU^(rLPCRw=X2D7$X(5Jj^+TsN!vVCRqWBHxt7wXpv zR5ltLKE2n=_9$-!DAhGpHcrs9Nj?tbZ=)jk-A2CYc~?N?Qw1CWS3=d_ad;=>TZQJ` z{JWs)maoGda24DG?}iTP^DV=&ec(6XSKw-REc_-^{{Y`OG-JMeF4oMMSOYI4{=0BG z{2o-h_S z{Pi9@`{Yg|*d+79Zk9lr>3-!-U5TCVM<4HdF@EU>MZ~pevSGT1@Pr({$1`NoWK<

        S6~C=Q^Mw*{8!Y|F@8EBT53&6^TnG8?rWvpKE39R^0ZOiRz*Jd%p7`P1Q%ACT z6Z=zTRp%%_H0JPnI$0gW#MOcB2#(TD^GjEm%G!A4zWA!?8V=E?(cPu>_9DQY7gukc zE(y22f_XplGl;OKR2_?Ocr2)0ovR4Rv>q(|`X{E5BOBQe$Ux=2Y>Ql&Z8rX0%2nm@ z0hD}x2qm8%LCI$uoB=jK zk9_h%f~H@pyw?(!+NRMt%5UY_UptcbF859c#|k9wD2#+cKAxumL-w}5O+dihVaT-O z0oRk9_tSGomh|lNZRBk7NY8dPlq@ZPlBI=EvUCkx3m3zm!zEDue+g`Z*TP)Vy$*gA zUJsQ|H^9`qU%~O2_79l6_qN| zFI^4T!K^2*e{g&t8C_p_)|0>CHolT))74f%^&8#|hr(~bE8)FR`Tk9)`~DV8&5NGo zk;);9KmAhW@CU@Dwn=o3%1V7RJ3@KEx4BJ5FnBe6k-Kz)C*Vpv@N1tP?vS+(x8}-S zOJOgKjg+Bn(_aykGu@~1Oli)y*M6Kl(7kVhlCvkFH-hQrD%>IVxkVjoafu0_GQJ?~Pfw zWXb%QOWZY7mAd!i1n<{AbKN&}ayURb?N$WAy29P>S0`jy@)MhGm6m2r3mp`$(p0zT z0&^X${jD0zT+VHmsNtbazaK;Ojv~B%jO}cD^_yGcsY}9(aplA7`|xYLjrNcZYCKPu zR*~1?9qIQv<)?h#1=TO{790ux1|=VVhj+t9s5&hHUx!Ul<=zZGhW~)4 zljb{6bF%&kHU9N3yaw)uKY{N-^*Qc=^3~sm8pmpd3HSkQg&)G6)FB_iqhK4<+~AL) z>Zbodt#R5d*PT<}9coR*4EPw#gj-+_SPS=oc^SwgoDBDc7sCj=9Ol5A;ePNzxIg?6 z%!R*%y&&H+a}I#r$;U6jOn4wX41O67gI|FYU~f1HeiiDoEr&wM_F*tpUo`hMpFCu@ z`K8*Tk?c?X2DHwRK8rg;w#csIGGgK4@sloE{HY7M>_-=>y{?e5nd|iM_Vyby_T*D& zr-UK~r$%T7bLfZxc;CT@(^9riHBBFx3g7$%^~)U^sq=0kxn{b&RjHlt<0(RQvTq&L z6>|#Nqo3Cm({4VQ@=rR^n?Kn({Z6Bdl(%O?nT~Vd2sjkR;CXNc90oOBG!lLnj)LEZ z=fidI0{AOf2-SBt7H)^*;Z8UKN){$T_0>#U&nvLxD;~HMqRjO9yl&8sy1}?&(h1qgg^Op*Tx?9UXJ=ih=wJdzpg-4j%w%svVj_bZ z5)*m7`uSpFui^J$3w#Lv8$JyCa-TnhF}M!O zZ~rk=Sv~?&B0^%Sn8 zhMLlScgL&U{ppKpPg;3!r!U@XPnlt=?`?K#w(BmeWm9#rDq8pTqYd@|w*|b;JKQuD zI{28YWKuWfwtzh`c6$juSHg6$`0Y}zs4l=_YKG)1PBZ2#o_QtTb9F!0x|KxjbGU-O z#=9|nuTd$<9wz+=`6hMVA+B5Dxhj5F;(hjvq+3x-Oh|iH5#ei(=Vz$>>HQ=h(v?&B z+ic@sM)o8#e}dALdMI7_GnB5p24}#(Kncor_y~L*J`dl3@;e(~Z@2?agl|HPZT<}| zhku80*a)A2Z^M7WX4nH+{s%k;z5_?Yf5OXQ3sl?oU3fFx4fWlF_n_8L-vb|p|AO)> z{tbT*--kP4D|GM=K7jHwK7{??M^J01w?VyE`!STi@d=c_K{1srh25am7wHc5-faf_ zG0cQd!5;88a39F`U!9&%Yiwu19P)c#cqEL#ufc3M8twBDzLm~Kn8_#YE0X_`k&t5i?-_|VJ!_kEXXNv! zp6bX*c#7&930V|RwOu3O8NRTQ2&iudMnY!9OUbo>DMrFGPB`Z-VJ23*vPK<=I6QiN*#Q9Km zVhog>U~Z$a6XT)m!~`fiF$u~}#GvfNg-~|lA}BjC1UylU@5#5-U+9|@4(BT z){?#)s_(D}%1&GXWhbV=-EcaTowyQeP4^j4-$9uP3*js{2a>5~E%(___5s6N_I)@P zJ_F~&?eJ>211^AngA1Y7bYBGbMX#@c2gAkiIJg9kg2iwwEP=D(wQvQz4n6{}hwI@D z@OgM6{2ROp@~u6m6dnz4f&JmFZ~(jw4u$3LD!3djfw#k3;T=%6VFgUJH!5%axQzM9 zXXR1M_PcO3e`loF8=a$LhV%Egq`jG6v}9)S*qJ58i>J*uUx~kP+I-`%a#*?_&WQJh zpEOY|bahtc9N-=7kNv52ag2>kx{XH0CDYzd_oeN9_&d`^uHl(=uMfa|;aYe)d=M7E zhoGM0VW{W*7AGIUUFeS7-?h^g7mba^CQlqXrs%wJ<0efmx^UXF zDSBaa;^@g27mXe}VjOQdxO*~#doCI}aqQ@^BN<|GclHSGj82?5ZX!9gU*M`^SOvUr z$yJkPvh??yV)^JjdyV`mbr&a&8aHwDB{b#SnC`@I{mEor&t5CJB^@$s6n7deDjYr5 zkJfQs^w25hPIR;$AQ?S;^oSAW3A9U3;O!bc)_r(?r=GyuIdqEMc@Q~wgl}+%4j&#J z&Yp?GqZ3)AvS+W`Nffg(Zp^reMH8dLakt#KZZ>Y@#AtLZE5*36-EHi7V`5R0-#T5l zJ9NzWQA4@-(6M8qDv97V$0*^VNux%OnCu*!vd1KE_l572lI0>DoaSE6O;V?Q!#sta z#J$)>(a|GEO(tW)yWFeUow}9adFFC<-(fuOF-GVoMhnMX7%duBICOl`Av1yT6;0vVY{np%+gYHgrrBiFK3co_ffL*cggQ8SWfzkI4ufbJ6I@qudPjuag-% z;Jl%e$k1_PizZDR#@B&+_PWzN{+Ob%U;3r1VO$MjghCHbsM$=&2Mf zMIh117rBQ|@^|P)NV)xvp6nRrCqz<*lGM2*r97MzJ8%5xDbX=SMs14J==XM;Yzpr_ zZ{$R#KDlR`%nI+mP^WwQO_rtX*ZGHV{*!&&r$%UpPL572nv8N4T@sx*j^fPfRf4RS z%vn&psCaRaR!qz4HI$h7MYHBFoK}45V9dCC%;F_{gNq{~Y|q0CjGuG8*+=3WtrUis z?Y?YZcjashYcb`J)oYV`tUpIu=`G4sl~6Q)&Jy>EIOR^!{DoKYUWmPib4{w|9+zC=HkT*7TOExLEHn}N6F?GymDv6Xp~4PBo81-?QLf7*pjQKnGGd3 zzi8pS}Qj;dE+MH0-;7EUjjMM-4!qS4?K z6u$eQU;ZOZQAz_VJk`A9?hL*&oo3GV!PXz4@HKv>kf= zVVB*0-G?9Fa~flUTp+Jo^@AVPoLw4idHejgPJjL7kC+^Ai-~`B{AmTlE{lBJ{gl_w z?ospo>zIpT;$M4t)lILBKmVib8UH$?U;o$s#(YbBiM(zPT)%(iz%#}T+Vp(yNzc7F z5`W=6uDcKZh%@YrspA(fCL?Q%0)L6E%_qT zylzSHVqUW%$>G-qgYy`iz`Y+-KNAo^9II(-zE`Kc{5ssF6kEhD|IQ&WPXC z`8WX!7tFbG+Eh9K`AF8aCtmsapK(d?j5!Ox;0ODHQ#7|&!~@Toqx|~ZV&dm~zsUpo z^qV<-QJ=HGoJD=KJ-AQ*K9`#a;uYa;EO9r6u=lJ!&SyQbPrreKOroa^>~n%i`ST}r z^2sNk`o$%7>VPjSts#TIu%u4^;hZ)$WkcVQ4gF#5$9)w zG><>q`GpNdoUQ(Gb^dYsW~l0@p3W*8%69Ixp@{P`A>~81^QsL+oYx2`N3xwaY$)P1 z5z-8^Z0Dag6ww#&op($eZkh>2^fh|tA11Ds4Mm*82)%3KjBH7M18;a+His*|dHjZzg*tpmIxE+4nKm0hpqhXKZ%NO?CZV12+xEl9oL)rQsg^fGZ zkL&Blo#4mu?FD<>S$^D5Kd#V^o8ZS?=EqI*xWTkr)|tC6v!QHfnGHpp?S5Q?AD5rcSd%&93LDCHX4p`~ z=}QZVhv#{ZvZ09cXF@t7+j-rFBF-K^uGNn_lVP_4DBHQyh9XW5gSTWMspQ!Z zHWYDMv4-nS zD#MvbqfoXp%7!A&k%!T@ZsLxyp@?(y;ofm&HWYF0^y60faclgzwSL@sKW>8`x7m-Y z^5eGpadm#&E&G4M$F=l#oS&Jioq4<)!dlo+#AzXfsPY_pY$)P9b%J-?Gd2`)w)t`O zeq8=Ztj=aqzQTskC>tV&2qE0cAsdP~`2*ZDvYp;G6mk0bamV^`gZ;Q6e%u&8ZoD6t zc{1z5nL8M7L)p$`8;Upw40LB`XFFfEp@{R$Aoq-HXNwI*oR|E#-}`ZI_;EY^xOe=x z-F{rwU@yHK8;Uq+mFjUoi+2^ys{zk%7%~wLKqRrfel5R<}=(gxO*FlI5lUo z%8E%P?<_Zz?d01~#CePm28dK1x1oqL_-yaEAvP3ohWl}&{J6<}+!Q}k9)$8d&-Zi^W(Pp zaeWFIjW>5N--aj;8^VhugvlrGt8EBR)j!S|>z+%!Md)dhO1%wbJKJq2;@m%uH(pID z-?gELGi$tiMz%B8h9b_je%y_I-0gncN=hxMfxWV!h*Nwyvw=-2 zRW_9E)YwqOxu%FdH*-db4N)Im;hsUAY(vo5s-i9L1#+j_MWbVb8<%Vcq z+7R9iq5kHKg*JqC`^Q!J$8ElfRhmpHS+m^`8gD}p=QcvP1Ki8)HbfrG@s1m1L*&(5 z)WJ8qEHSYR%l#vZZoGS?F416CO!UI^$`-mo$W*b5#Z7AZ*UBX*A=8Oe4ME?OH zoq=@PP{bKh?9Te^=`6FMY-fcHMVt=^4K!zbY(w~0CGHvcS2jfM68fFFmpU6FcWo%* z^uJcCE$O-^*-*q8MM!64J7a7p;%p-Hl1U}=IyXeOybVR1B0_`B8CTj6?HT{Lwf=GI zujhSClS-=%Wjk#)6mh2Cptoyu-B~uobqVPV+5t91J$NHM=q8n$Z3xfYhG+p1I@O%f zW8b7YikK5+QHTrSQeq8I#yhm#8V0ft;qLpPsSad?CnLDVn zA!N-zZjXOl)-B$-IW~k86Z*YL`H)-P5K?SI5$89AhM1IJvLQ68%sXzC4bi4s%6A4# zDz!G0?QFFnYN6XSV_SK8w+-PHl)Go(71$8cw9I|Gv8Qu|4I$$;6mi}mbcRV~w+&&N zmb+)5Gd2`)GVkD>T5~VsZ3w^9h9b^$gbGY5FW69oX&3Gp*fkqs>03g7G^uR0p=_tl zh9b^E74H0nZ0ArL!tW%cGw5HlA@YjQpG+$CHiUm*L)0lNHQQKcoMl7U1423@+nH}e zSRX?5CY8Z)H^en;DB@HTI@_G_Ya8P3@AQsaW<%7CcQL=vq%y;XvYpvB6mfn)=slCl zk8OzDCA7!HZL*<=^DLncP26)fgbWe-z{G8{AzEXET20(rHWYDo6MEmo{o95jPR7@n zJ!s;3+EB##5}|*YxUbky#2G>8920lG4Mm)r2mv2K6=h*Ks zKh)eyu?^wB*igiIp3ns*mEYJ9{Z0OHulvXC@#9+kxG`&(p=r(?Z$lAh3!yd>_q+{7 zoZG*vnU8wjl{Q2xhR`q*_a7TV&%fu+OrqAXA#5z65$3qTHWYC#AT-j%jk6(qQ9`3k z+&mk?dmuF0#NBQ~5$6Fy=bN~PYzWK1_T|oj2lgHM@weASuejiwJ#*fex%QVs_aVO1 zBYxB8ESSm|=+qfArsGz3JjcOkbByq5Vy zSYX?H&L^<#ev%}4yjJoLo^O`+4;-(Rw^R0q?ukbq>MfZZJkHN|Tb^tORzo?iChJ4@A6iN)^;tsYttwVXw}IE0{G zoRO*EE5N$9l-FQ`*YjWB3_L^f6}4b~1Ya9T#=CMG+}DSD>djwX=-y0bhNqRYKZ`&8 zzJ34wXM=Now{^_fX{Uz9;?3pFeaabQDmi0QHx6B1ReVJGSvt4Jtq0BJ8#DaOe~k*2 z*W^@0_cZl>hq z^u3jr=5;Ua^bIvDm1Z}U=ENX#Lpc?Nt?^iE`Pj~cyL9p{Zk!z0)$}FZcD%67E3_=0FaFkL z&&|SR+WXJQOIFw9rA^nCC&9Jb68Odxa$fi1v-rPTai<@@RjIVPskAnYh{v)fdLoC+ z9uSY_@I<~CW;ONGMN0C5$2H|O?XM@FYewA><}5w**5HrlTiT4f<6PLaXI!PbGr1R! zu1egyUr4kvE26dKrL|5;ui)Jz7I0K~X^vAoj{mzAkLLgG#l!eNLwS>vS$vwOk;k|i znR)ABvy}nnzq#E%IZzwrHJQEyz7Wlk2UJ84He{_30B~Qwcf>f$W2BXXw%!Sd5ySCo`1K0WIoc zKC6&QZmwKj%w3YvwZ1x4u3n@Y58P~4W#xRLuo<akLKA%TdJS_Xb+LHYZ-%=&Y~O}Jt@x$+!pzJZ}844qW8_sj7Qgu z_Y{-bqt#Y#P5Z_RTgt1uRTQ?wV=V=-O{JH`qb>2m4e#Y1m$~%4+>3jtT-g7F$-IKg*w57bNTZOLGQc$=# zw{l{<@?kIYt@yW)k- zRMb>%Jbq#^QluQ`>g0GEH&zgWKhYsWaK`PRZ& zE?x*R)eXH(Om7>Lv$A?eUUs#4>iqJZxpCZ;{JX1nW@T?N$K|=lWh<>+Waujm@j?n^ zS4I9(lO;Lj4emKht9SNxGs(teF0F3J%dRu2WGWTq@QUgkS=p~}oO@7q{?dxrE*|5R zopC&z!d(?(R%Ip*akEXu$iq>LZ9G}&dE{gD2N^2eojo_9a!&s()eYVCp!qA~wXeR- z-B&0p>&-Ke@HWzPGkRs=wiQ`Tk0$hW@^-nY>*Tc)mt4dpw^GaDwG)}c%6Ddj<>e3? z6BL$%%Nw}apr{~h?s2}TRPW&at+beo`f~XW_awid@@-78pbk(n?F&k0`URz|aZ76Q zQmg^eyT5KoXZb}%;hC6VQAKpUP*EZG?s0x;RqyQX7gv@MoqgJ6NoJZX>E13&I?RvZ zD{~Ul|C3IAh9VEut(nrQ9l1~CN)BE@d@voEOXI(JwUKL7NCwa=34BF#8~KpI(eGxg zjBQ)dtLdkS6_jc_F^~%N!FNV^jJl#i2*%-PY;L8zMucA%k;LwKAzDKWAKQ&bYmAAh zDKD+b%&mM`$4TK1FW=EEtZ;|fm|!^`TE4SeYB{2+I@2r18Yx_JWqz&A@SIg9zrU(8 zLniBB8xs`4gUTD+yYQ`*5kZ~liD1nuJCN_n%vZv~(mEnQ z=T*DOTD8j#Lm}zOD+yGU)Y)o(Bx_mRl#G)7sXdbwJ;(U9uBmC0hqI}gHnwJBpr+l} zL6x_u^hQ$eUNX>Bt{bV{xD%?`b#X7W-Vbe1$W*1}HF-^Eh0jyx>E?l+*WX!}+PDu!*XrXX8{;{5RphKn^pqY{qX+TWM!&2vsvDBx z8mD34NdY3UE^wGBu)vYg#>>^-`_wjWN_()p*|c|y$>%K34K%$R>6)(HOxw)-XXVIr z3*fJ}x&C@v(~w{zkTy)_psJ>Rv-LvJ+$?*J97ic-z?sh)RHd6Y?QfcJSx)==>2zag zo7xZCkRNR8w#4)3XC<00|J;AToWP|~x90NFW~cacES6^wGI0$`4%8XRMn&Q#l4|Nj zLVCb&ES{pB{sWg6(?PpLe(`ss&Rw|2v!m854aKJL? zPTGwJ*js_3`BkhxN2+w@A)5Bw5Tp0&S+dcX2B1+5EE`C+o#meQL;BBceW7)h3& zxzZ^y&$xErh(E_sbHS$N{w-W-o@GTYc?(`zFW)@p9G zm1?#iR#kcw-g*W(Z2fVva-*BMt{GUFxfDb=}vnf=-a0s^1sb_5yyD(+g}PpD%q@j9+8qIZp1xhI;I?>&QgK0kK1Z58k4 z_=lSg2%TZ#c9ZVIWQIrnKb~9f_s2(G<4V}vJbSl)l zNGmxYPv}eyeG`TC=-4(-$EXX`7u|)v_U$UH?QUUhPb|emxN6(#C23u$R_~TjbAO*v zW2zBbtGH@xI_{;6dyF!wF&#lyAtr$@ZVGT`uV+c38+neKso6Poxq&pMpRoIqW z`B!eyb(ipvD%1>aW(9wKufFXz)GK0jyK|3=*2SZB)s2VKZIStF?N&Li*^Ml$p=TqS zljgLooL0Cs9^LAmmgAjPcrT|F-pgr)607Por`GD!T6&#QPrXy8-ltM%+^n-ClY$Ra?AQs(9i-)Mn5>(vq>Vu!c^Hs-|VszoEj$F*N0kgWZ+! zvU=%oy`&xII8pj}>W8rBHjt!f+jJ|Qs1}ZT_8B^$XP=>ibNRnVai{BqI^ANOdy936 z*YLrRBRaGzV>S2;zE_Cn5fmJHKYbCS4DVB4Y%TV&#w$tW$asz=ogNU}svFtr-pJO3 zKD46C(-QZRv~G;=3}IsZecZ#HK^L_my2_52$n6cQ$b;EZsl(2U96FQ(EGej z&lT?WDn>U^TipN&a?cu2qgDn)y zJ}Qio>y7)kr&P9?PSvJ;5Jc4$g;ieXWDEPEZMa$ND{QHd_q3UwF?04Q?7=Fx-T%HB zmOV>dp|>zXut|X?S|!1~a@?YuP~U{6aB+Tja}PaAO5A(6#l44(_8vCI3pe`rz&_o> z273=1uz~J9^eE}*9@eM7hxPPga}P~7gdTjIz394l;X2dfyuBc19(;QR^}GAv4>N#J zLC>O;eGfNO*jiDzmVL236|uGP=vvq5E+}l#gETP8q%>P9qHE%XYbxZ8H}sEfH+_oB zGNQYTGPkYBN}P%5PJHmO?00iWrP1f5%_~e+bw#Da`f?w7SXsEnXp7rS@wEgoSktHY z{Gg&Nuj>3zdsrO?Sbe{F-=(EFMhrS_pKGO8wLB;KRGav_6r3JVUwdgEsTPRVplVf~ zs-e9tt`+wi1{6qYqoLlDcv%4XJ4q{!eejzX>_xBqgrutN+eh2lN2vz{T~n8z*PZXR zmCj*A#5j^v-g(B^*qwVhb^ayz0(4$)lheP-9&=nF4(R2Kq|mx*(2kW&k0qNlUMq~< z1%+t$_l#{ouR^v#+n#NxRF{oc)nFd>81takY(catw{nUx54(_vM$CiSVfa}g^MKhZ zC~TBTXs(D!?P<+L@w7Hq6mFvFR1n)GlYk~mRq3BE+(`4NB1WCmTo7%PW;9n6N>yWx z6|oI;iBv?_(-%@uxJ#O`z9MF{ZC3^TT+%kRx%$VJRm2|FaHDZ3n@&>RJnT9@cKiwN zrjUHQBxfnkceOXTgiloGDkTlxq-TF|=2Fl1&P~Slimq+y&DChcB_l6ZL9pk&+~XPX zqsuG09g|k}l!O?CC1YDNw%q@uHsAlC!tH4@yUEKZn-!4La}^th1!Dg%Nh2it4t zXL8xSwFyoAJ*8{)ci3OMMs-r48vGpon!ZIr<23iAXwKp>ZXj>*FgK9DxYLz)*!Ow` z(NpEU9pS6rOXXb?P=B1 z2r+6&FeBTUU>oJ?%u$erpBKcu6AUP3o|y;0ReN#O?#0>hSZ`yao0avwaZHT`#cSJz zMEWBQRD_f#$K$yjlF9TT+x=!MwXDkIp_rO>%>%c6kl!`?63)3?sZGGXxJ@yWg>A;K zZ|lO0op2UzG+F6;^OmQ%y6F>a3DHoQY&BA**Su9w2!X zhQvq_nfdBYa@%kCk=rT;nyS9uV}<1J`(}adV2j)MYx=&xgOZCuzb1FwnOeiVajB!c z*^7syoxQlc{v!rABQF>#jkpOVeoC6bY}Yi#VV>-NTAJHznxdPgLWxUA)41T8)Rk!_ z8)bc_NnKgG&wxx&aQ?k@y5PvyWRWDamTF2z{qpVHbmi(g{+~EEBW^Z5=PrjQ$SU5q z{AumYyCvs^S{#=`Wld_N=13KP1Xy`cd^NhIWH`4 zwV|fm_-ch^Crn`J(`J_pWaVuf8aIc&uxxpoJ)^R+iV%0MS~&rKq3?y6$hYF!{+sasSpoe3n0R2L+Db|!pn(osppBWANXFZiTH zZct<>M~K`=Wa!b&v#FXj0r#E@Oqu0Y-Xx=B9y0f_)#e)J+Nx+P*PGP!OzcytadSbl zuhCp&5C1EtmA?v`{8b>nT>lrC0?)1NrHh#4GAhks?=sBNt77#!bENtIPLuN$l?_Ve zX(L-Dm%52of0!9}Pur3E%8pH3uIkms_v_-7x`!h(?~boFCozE|dDJt9aajL%<1f9s zlW8~R-b^w&r6Tk0rc(DBnI)HbJN>hJGM1`~w4}XAu6Gd~_RJw^u0lfIRlX8mtzd?m zH}ZCMr+B+B$=jVFZ?{r{<;hB>EAW?NP6z$YXhgC}Yy5-ZU7Wlc?nUg?&cV(4>icxc~0>usxp%1jB3Cg?(#bkvnrEyifZb_ z8C+YPqxIA-eveTOF?4-a8qe3SbMlz}(7r=dH?EO5YlCb>mAqhJAO3V*pqgWoE>}N! zdE0>+kIk(ec)AUxMXp!NjH){0)mFLN^oQ4)?V1j}-0h_d*4Jb(=g?K6*k*hv+V=D- z#Y^hr`QKz7S<}|0RqDI)jA~^vUox2+7i?3tnUQm^|Fet!P1xOBk|G0LYCnZtrDK&; zKvv3IGfM`fI5eL+XS$L;3QgPe-6GmO49B);I5zh#-nXQw;1_Zxb)8c@(DMsATlY2% z@Vt}Go*|i^E#Ehw963#A%#|yQ0Jlxh{1?CbCSQIOPY{r7n3OlF&!d2qpwK$m9e$x z?i%*rhiYzQzc0=Cf#alb%CA~qq_H!*%1d{3VIVHt!e&OE z=svmJj7)mnC`=?_xGS@tXFy*6u4Z-9ceUK*@pa`Nc2f&+E28H#4Wd~>CyA1xgKO_e znIz39%2s-X=(r8u6AxRX=90M?+f4Gi=-F9C>rcHifyqXpG5*@p(#pa+jqPJTuxBoE zDhux=Zar68N1;4y_xlCVyRuL-t=6)C4f|C@@LhUX!H&-J($>b&%#wimxZP^xHION zQjk1gMYxl)EZIrubw6^y1+nJb%2m=%)A_z4UbsvHq~>)6H>xaddI-(1DRU>hLDx_} zMq}v(adV2>$)zbJ=2e1trQQqBki(fPyD?>kIi#&j_}f#yH5<)yvTt5(|SQLg(TnMdLib5X5$Vec2TZLO4NZUg-qX%ljt4L6}(iM~oGY1T0U zE#;*xS?YyoN#9wLHc_`z%T2T)u~p7d((tMY-8*;@?!2NKGc5J#9Mu)K(uKjN_RPk> zTLySfVyl5qt(4wzan?H74`9Fy~*8ZI#8yo71QO?3^W2F~(+IcLa&x>+L*ii<)}2$>ZocCcU2_h?wfUn)fBgburet2{ z=RbvO+36&O5}8g!1~N6WZ8{O@OGzhluEjF8%i41?F+75nM~bSq)j2MA!Iy(Py1&hw ziH%-ez`5>wM4i4=c#Q1_wiy+uj*tuaXpLTLhJhMi=#e|)!X;~>s=$%#WlD-)ud%sK znUTAkH6$EnbE$+osAaa7UgEYHNWRLn8FqCrxuRJ!BU-6s9V0mv(rkXS#Q4-ZN;SPOna6E#09dEU28^2}jw#nWd3!H6QCM^M{u2?mmmE zc~(XDrpFWAxB)KEz2vgw1wxY(n@i6&XYMku9kfuxRX64xWzx6TQl?~A&q7PlXXbTO z=8P|YmrKOBM6afwC0LSz67gm}hUSstJCvDR;=EmEx)j3?ExaMX3)AG~W+kl`Rn0ZE z;SCHvY!1tEpHGLnQvk9#)Vv^NW^Ha_z??yJy-5^XJIf3!w9A6TJbVSyvp|iT>^$(= zcV~7@|HH#Rdbc2KPvvQwYIj!`EJ1kU+XEy@DtRSe3imY2dJhg>jrzDS{{5gP|2~PCgrUA%+MR$83lcwCNy+3t1Yi{P;bG-peDzsMl zUOAzemHP$UbxoaQf9e>w{9~p`=?xhTj(Z+E^~1TPMH;`-6w5%v;S%HHZ#Cm4b*2?y zf?G|{TAi%dFRS4?QU3EPKlk-QDnZPVMBTn!=v~$uIk#i-xs`8mJKRH`(j)EE8}H40 zb9Q{$$}$eX6-zwe9(YCRq262V?h(URmSGC%)-Y;tGYPNd$kOB7%PRpo#IVhzt0SIN zI{n>K^#(;t(`Zg<&?$XM*c|fL@F7Z^7~ZaZ@^B16;AADLJ>IYr6MQtENaI7);hx#f zOY|`Qd8^-?q=CK1RU_m7GU=l$lS#t;BRgdr1O7;PYq!qVpW*(IZ&@>E=7(jP`C(b6 z7R@vB!*GJr_z`IpAUuwAj%PkklYd(BmAM)8OK{76e;kgId>V&Q1ZucYbmE`nFSa+c z#5*}xof-l4^iMW!S@`6iyC-LroMEnf@NAVY=cit!sW*c^+Sfki#auiuc|HfFyLody z``V{G&_44g9o@Eh1v_-xN+i%7h&}KJ4voBwr@xlh&^uikVS}461~=J7+9iPro7wNl zve6gQNRNsd(m9?pWF$Iw*-vbadQQse(Pq5qfUuq(Z7eSE8ae&Ek+`p_6lQa-D_iz# z9ISfAVhiyy>NPP^U)5Ajd5Oz$Ebs(0kQSFqm)16oyl0u0Pq!uhfP^;1=H|JYo9ynb zh?;kKIzJyV?2zi?JE;pzD3|nn_O@l*GXutb*ONS!Gw&4#?;~$k#qa}LOhok#B4YWo zDkksOk~HF;HN}8tE;$y9_ez4d5_5k!8K+|>55ucmY>kPw=vCe}O$(ys|6-t=a13j8 zgI*q*E}^6^u1SZ195%1b=vD3e`)_%L7E8w+71z7&*;cRHd6TqpppIt`H{Y54pyk4`coBZz(ku0weyvrDpXa1rb7L?D%5}ul(%;8%7dsv)q^nh zxGgb^w5U*7+Mv<6#J13q7Qws6PisnrE7WFL1e7@N$dqb$C8xRFQ(xuWWju^|Tbz}J zc`L^BXfvDDJDru${1w9wY)dw~Jw>-2bGhYel_PW2Z};S_{oE%wxVm9~)li9jRM9>$ zdB3*mojF>9gQy|WhA5au}5`JMrE2Pw;Fd-?`~qeBg_U}F0(2! z&rggo6`n66rZNv%I3@}v{iF8pn=#DCY9#lwOh?9+>Q+``2vq3FmtlC_tFaVsM6Y`B z+D)yoaah*yt6yFli5DkA3&_wAi*0gWjWX}RZZMN4H@aO$tY@QViRYX@t0JrE*G&~{ z1sh38yBE^e|DW5x%>TOmbK4W2)c}tF0u5lM?Qs2HF@SfpGk}?&*#H)}29SREFVq0; z>Wl$w_b&TqH-N0r+s*(Ul4<~ZTRRpofcZ8mU;y)MRKNgwmNQ@gT{9UpfUZeQHGo>S zsqnvN|B61d{W~(P{o@4;HC-}qSN|CEYG|7UmZeCxTmE10_qtyH z;I5g?>IPiFe7S;2-_PrZ(6H;0u{0~H8#B~>@&rej<>v4LyC=QCJS{5M`U;Dgd48c; zW{zG9ciZfyoz1c|O%H|Jot)_3E;66e?yL$n&b%I%44kwKIccmSf|KTUN7IQPTqLNm zl-DPD1M`LlXeN#He9A2T^NJP^MA~nmp2^7iWpS)JHN6Lvt3_=DKdIRKCnxJzr^a*v1GfZg}DM<7$T}Mqn~OI@KPgl-CkOZ@&(`CqAy3=G)uH%7Yj5d`(V70E?WOu5a1Mg1WX4b z%M%7W7@6d1S0{8k7`J&V5^mt-{-+W*8DFC%F^OE8+s?tNOSUj`Fe}Z;7G@qT%x2RY z@XC&rvHTU2_iMHmiB;};YqR~h_fiHMxy+Jr=$mP2GOwKjy@eYySvgN;saY#R(y_~u zfm*Q7MtRFNy4z;IUK*n-=>Y_`yeeo))+h7VGk+L9t$9#{kB2F#V*al&9dveSn|@rH zZd$7^nZKcVZtIyx9IX$mnz@cHFFFKxsWe_v=PuJ_{2dmM@~kwYVJ%)it=B)>mGQ9f ze3E8WYDqO_J_)lwOnG!-eerN_!-FaHqnS+3x>lGAhF?<6#S){#mFQABbD_7!g65)& zBg$cun57#-<0*Sj7t;N+rJ#=2Qt=IT@g>Ahi%!{@43h8+h0wF)azX>!wZJ+6`(h>wH_}=Dr zce~1aZ<95$yjc?=8Ez;&RqYflL`tRH@j|3b)<9mhs?^HD7F7Mo#EnMP_awfLaZcWr z_iVcND$^Za%4)m2om86St$965+)P2Nfi+U`FI3;QmhTAFx5d0tvBMn=JT{O!6l3G9xy!rFGsCG*zx`#VvGK zMC+&*uD&$N_?f%rOs-ZWX4Yd4FH_3G7Uu9ul3pZkYhrqj*>2EWBdsHV1=swnSxBe4 z*&az;h2*Gz*)tE=Ur&mR{2bCX`3d#kCuXFS5O;w&Fl)}VnKfs4E0vjfZDxi~TNlr`x#i6eVpFr?v*CR_bw>#Gu&< z%)tzf+_yAc!p`pMlK00cIJ>2Z7dqQAOHR~Ki9cLHSNSga&0Z;RoGK4*Q$p+?t3)c3 zFEXgc49p)HqVh_8zZ*sM1|dGJk3F2Tm#6>(?xa<*9GuWeB>Z4H_QUMJ?dZr$;TD+bLF13voNr8hh-qUQ%%tsR2`IoD_PirD)q&m)2~f zmTB8R4W%(EK!)#_y|;8{6+bf#uC2PUH#);SK_>E5Cl1i++igpCYF1zM+otP^eQdCA zpX_RBTddZuKM`%iM1MPRkrXYN9Tc1QUQMV!`*Z2r;{T4mW$Q9Y8Ia-quj`u@Fi+99 z*+$>aw6k|+KSF8DjiF{q{o~dBU78i(>6Ou>q}DYZZB( zP{8(+&^-lgKmmPQh64I77B+;TIp1Mqv!0ini~=@zR;RrJqC-Ii42+70YBm(`0bc=W zjJb=g)w&Ak*L2&H?o_DN&`^2>!{C8dLyKmve(0{j#v%S?IRL!iT{$u4e>Oa+jW@cSiYQeBOl$WBFW~OQzzWc-ElbN%M1q)2H%Syb# zj>PT!=PflP`y_?&&4@NBf2Txd<9ZnsL9 zW>D`jlc4t`=R>=}fDpS)3w4J1ZV(UMtk;HQ;iw$&1bAyI|f^C5E!I>0oanZP4uGC5~cWqK|ua_mX4P1Mbf1@oVg))b~#4ldy^1 z{3mN!a&YR5kHnv}|M%|xES5`5o{PCPJu7AvL#KpgNSL?JQcCpK9GGGW@8SF=<^}I@ ziVwiF1jZH`FT?H^*7dB0n{Vq8UFE(&4w#j5oPSAUosXMx;X^a!hm0@-@ll`Tv-E4>&8z z>;Hc!t_Uc_RZ&r|h#hfz5tQDPCPj@Bmu2@ZtSr0B7K&I_#EK}QA_^)RRP3mz*b-D! zqSzZzqliQyprRp4B8mU^IcH|>%-p+x=KK1+{_}d>`}xe7=RD;+{h66(HVu+iq_4Ij z+nd%8IIl_LZHP?A5|92#vk>0kVB03?F|?(@M9u39!+E%C_2)%hc63n-?;o&l^G$ck zwMBNVZGE=PbNxj$Is+z({zHlyv&0TpGy&T-$2XVYX$RR&%vWpfW@fCO?`8!uSu=BY zAEpa6=9-zmCI3R@QD0p9U;5kP|C9bUxUR5eCsS@sZ_i(OKQd&tO?%7Ydmv+e)dx(& zOD!)-*-unVTg?m=mQ8oyM5cD$rZawlU~1D zYQ0rvbZ;c)lA)z}*#k$H<%6?O?jR)ATX{Y^ z+1*=tp-Q`1zH1~6p5_nlfBc&9MaZX3mytjALU{6xzDqCsw8QS-Yz(&rCrCw)$x4+} zT(>4OnP3q+QqO}+I4sZjEdo}f%=`0rP6Mkoq5J2o)-0rVqAGJ|joIG&de5A0NzPd~ zS)=ETJ!rD-!ZA|A*lJDRSJ0hSrL$GZDhwT#to9|cVUO&p6WKSKmW-P*&+)K{JS=m= zrr~m9i$n(&t5V$Ev==BfKY!)@u5f-{u=D)<%{M4I<8QbgaL+T8SLbz*2QMPGg#$}0 zWFU8)b~8U^HWSHDZYYKFb4Mc&4z0UzNNSwRx!G^|@nxE0-)YMzBq#Q7RDhmRiVh~wL z+Vng6Ynr7!^i9?@ZC3Z({Yn~sm0S9LdSkwmEMGea)XcW>?%>;0-PM7r>pl{+yDe7u zIflF3@)KM~uv+1db+lF_`uvT7_)vDJiM~rtR|Y)dl*+BIF3YRn{>Mq#Dx8lf%3PgQ zU%E_u^gq%h=X8knILJCNX#L>C-I&n*?Tr`mDJs?gZ8rqE&}~P`Oi{ zxancC3Ln$z2PAw9EiZ56W30N>gl^!#ts0(-;q6F!jl18v@Ma3DHWw$n3AKA0FC0Lf zppDgC6y)~c3x98GyC|%Y7|OjiT?k8D8JzW_N!)` zJ@ixGX}T-yp1VI^4NZ?ywb5#&>VI@Wbm(?FNNF8^vLdi+&SFs=dr>~;%hvRN!HlTKK9KT z?sD($hnrvW#Tt2mJzzM-Bdz6o3f*_t=QYyb_#dI^jL(}7CbRgqLjAr{ z91|noO?z_Dmc&=leQflWgk{m#o*&)aFjq^MtI1isTfJ$SJ0}g?Z+H9JM0E^S41MIw zUl2;}9hL_?;_8Y-XCbeQv9tabItcyrMYe>@_I81t^m#%{&R2NPV$$MoxN0Tn>O*6n9c=88GQ1h&75~6k*Qvs^}bBXi?b~H@+b`J(c8Vp zHn*`Qz6^@E(7b-2>L+d^%DRp1#5-iW?DdPjd{R59 zVP5l^>JElXdaHcR#IV1Ssqf}K_#fz@L_H&E)o}A66C{%7HT55y^=^Ceu~&bFTP6$O zsgEXmG~Hv5J(}^8qq%|q??|t#`O*2;&5y$?4~M!ok^2U)8hxb!}ES+mmu9yWMStSI$}! z&uIR-OL4n9q6pvhf0pc}?0TJt6jgUgOH5mTJlh}+*ZY(yzIWj-*0F64E6tJ%DDbR) zBMOOU&{QGEi}CT^W-Xm)YXUE}rzo9mgPTT2W_()Ss()R1TP0oJDkO}v@@Zzd| zHwLOIwwZhBg*WQMhI4;KNn0slth6vzZdy;T{eMx?o)cf6Ghd(EbPc{zuKuTzwnBWA z<{ewC*mRQTV;lT!Dm%U{r#3p`Mk)(#mb=^D`t2nx(i$pZlltsH0noH2_VhY?CD-I@ zDeUU$R%-?<>o#YKySB;h)F*DCi%P#WULz$c%$;>>X4!Ape;U56hEE^1?3SlVfPB%Z z--EI-0iTn5P`?cKHZGcSJEY&zgbVos+~}ozplWu%B`kl-diVPbsooC6kd>#^Ug#8r z1%cT)r;B9I_CzbSI1nSQu9Zl&x$JA=lbB3~X1VXTnInae?#(s>S*$O{GuxH(MeJa# z=Yb{e(71+q_9bXf9KEAiVmse{TP6#SPVF&fvC9z1`V2 zNV%zx$)e_vt%QR)W!*6J>RsE-hX$|9N5$m2|Ac8Ah`v9CS4mVd@ z#Yk-~%cogS+|CMZ7f!`Z=PDJ7db*WwVQM{PGA8GKy?c%W7q?hW!D z4=vGlR?oa7unUhoNO+zzu^*RMq8oKdb1zTm_hkoYu4$vTeRkig{V8YL&8#_Z;lV?$ z{yI-JF0^*3JY~jYFI8Y=+t@wucYP!uN$D3dTj*t2%yu+aC-&P$d&i>I5Np?2 zHIxlc{B}KHw`jZmrP-}n{ka-fUE`;n-pOviO; z6H~a@JSO2r?%V_y>?OB0>QkNM`*!kOTF2(sdyO5LX8Fl1|DE+IUF^b=Eu_;}B}<@* zxsAMOSASGs6cHQ-FaroY)!9~7&%Ksc?rnP-nWSr|~b}jZ1gN@oyRxFw>X} zlbwLmoGCEVSn9ib%y;(`tf{(_p`N+>5hk5%n$w&s4X||QK-eT@U0}B;lY)7PGMR_W zR5lfMsj_Qf7OMp?i`8u~Sx!lFvb<-%GcOLJsY zyr=rt1GZk>6~WBEI+*!#AIx+gg_-V?Fj-+pbL0bPvj!z|psFeyjrP9@AVrol|(LRd@HkiOV7o`9XN8n44l;{%v!d<>IUGssn# zX|!VmV(t!vnY%-Usk@_KmW~r)arJo^tWMcDSgo>pSiQ1UFu7fv?tBQlN!j->vv}(? zFSK-+g?1opZw>8mn1yy6EUvnPU^U8We0B$HvC1BR-KuO2>?&nn!z@ML!7PkzuzfU) z9WV=H4|XoFFb;yvSKZ@aR>t#SmX3ZfOUIe8GTfy(SHlJ>yA3u-*>c#a%2vTvYiNIl zZ9tap6tr-hEqb-pK8`b9Stppq`DB>IxgX5pd@4-7*O=yvfLWZ+fmxiZVHVQ{n8p4^ z*o_+6VwlDL5tzmP1(?M?ot-jeuby;gBuus~OLt1!dNHVgSqvt_>G8L3A-Ma z?hJ&P{YJo~Ay0G8gvnRm(ws4{FVx+1nAPODFl$f$0JHY=1=#iKZY|9GTMxr<`0_QZ zz52HWwqD(}Z%^m1>`<8boDG|-vi`7Zm7N2-TiH}!b~)@GmE8)vM%m-AdCL9-vmAUA zW;yr;%yMwVzK&C&?&2_$Jq)W-**mb=$~M3(ZQEd0UYe(S<)tmm!Z-|OVcZ9sqqs6x$W*Qg3Oyd%mj62hu%VDPR zq3>>;@9uA~{nXvxeRuop?>K)_+2KCR@mX(})zD!utD$3HRzqjPq~A+(7Wiy2Y@N!M z`?6PH^4wjT^AXHq|2fQJzX2vsx}`Z=U{*i=3A6f9aDbPWePL$jk+7T88WUhv_b-K+ z&vRhr^E}uA>hsMov&*xv`KtRm>}F*j!OZ8cVCM7hJ2*}suBJH`z`j&pZiMw!+2g+K zEm(h*ee28iKG18q&V*U4ieXez{40ZXQ2!>vELO8&mcMtwOyfbAX*>#(kxQEMB+N9{ z!K{pLfm!T-hFR>}9^~2Oc$oQ@3p4*tf*qv(^?;dwB`~u~EzIn4G0c3v7G^&0fSC;j z9PIggI*iIp{LX+KtUjLuGoNR`EN$~(7MDdZ)3_7XQ8n&?na1CJciVh-|AHN&?*8k$ zJEo&&gB;jGVvz3ifmuw?f?3(9h3(MzvFD5%?o8OB>faSG3-(m-ZtiFpWW1n8o01nB{5(Y=MR` z6ShM&u7R2E^)Pw0Bh8r)Gu_vHcOUrfK878x?mqY3HHmqx=>9OX(6KN}c_GYF-VbK! z9R)KRl=!k5Uv?SH+Rg<&dktnSL(Soyty*?+oR2gvhr_IA&x8F{Wxahi*k{E)dmd)( z>1!}+Pe1b6o=12VY6qi<#xDEAI;qbG!`359ce=r>B#wZYO~=4YqZoFCYLvlD<6ht0 zqrST*Ve+I|n)9sh?r$*5x9?$QE2pz(zx`ll=M0#IdlJmT?E#bLf6|=3Fbj7A%<^Lz z%<^Lv%zVB9W;w$LPu!CD0?g937G`0rhtcWa^VhJWG>k1U3*&^NJa_ppbJravQ}HyX z7tGvU?7O?lcXuu97M@zylNZ{8>itO2a9X`3Sc(M z7z$gavU7deG}t7S&4%5gY$42Y<{8+t>hlLMi|OaE{c)G(Y=FsZGtJoqvzWF&)=S&5 zFw@9}nMMIjo=r`2PKKGrMZUYseRs2AUDe$UFiX)Qn5F0um|5dxn1%5M%))pVcB1Nj z3^Uy?VW#^%%&gJ;IQx)yy3+}Eg{J%>n3eX0u&Y$I3}$1gH88W#=PdU_OWe=a=II~paMc9|hHo`1zKfn$^mgf8f%h0s#fSLU| zcJ(ZN0?h2v2WGlMV5U0)mZ`dD!c2E6%rvfo-L2u?3bWDXeXwaNTM4^X*?Tb82Cz9Q z`xk76vNk7r_B$MA_RE2ph5EwGYQte>mm-+irP7yO=*#xV@WN;ZtJE+Kg^h=$IRjvp z%F|&TRCWd|OH+9c%u+c6X7z0z%rq9kOyf>iwrbo1GmTeZH)v>og_*|RV5aeRSdMD^ z02`;_{tUAcws)rET&%js!Yo&N!OWLIF!N<7ELVLw17^My!OWLhm}$&_nMMOlHd;$_ zu7sJ!^)S=82X=vmyApPhviD$S@y}rvmzG(c&*`uOHTDO>Wc4@AITU6#I0d#qefb^C z;!*-LjR~*<)tCe`jfJqOs__)8#$w>J&ta2Q_C2f&mgcn1_I%zSWl%t9SuCuy8J!^RPAnsWlo%E8I7#Tu9KFw3{eFow6dn*!^mx-(#3sJmspyJviN ze}Z*acdLAN8(`O~#vb{e&uw7lb2{u~)i@AlJ{Q8Q3=M)=t8zZfVl@+Hx>vwXQQhlc zmZAkPOVRT%(|8$X8n3~6sK&c6)A$5t8vlZsMw0?hBMsJ5HTHp-#sM(X$b+4yX&VkR z-Lqj9S`kd%NKSJ~VPB}bYhf2EyWeLo!%X)LnCZR?>#e#U!z|n{VHWPcVN2DQR)wC0 z4u!p`8r^+%0c@tay8(8ovb$hba$ba4xNBe*?mMtP>dS{Pi}O#gn^pJdlRS+~*ult{ zpTqj9MmN}cb$1TT^1KFSVO#(+jZ0v%%FO&6W*Vz}cW?Uc-h=g5cWZrjO}lw@Ivr+p z=0uo;vSs3GCmX4{g`5MzpVK*t82V1D@PG7dnmmPhI7e*$mqlS?O z8)zwqxhaQP$}fOftS*O{#%$Oi)tC!2jTNvbG~7SK7AX4!cDJ%`Vb?0#tB2>`zA*Ez z1MF1w?+}>z*9~SPkD;(zRQFt%rMD7hHkbjk_Vikqt$8ehS-bWy%w{YbVDD=fEqXf6 zSoQB_P}&mMX-$O9fLWXu!pv%q!A#>hm}$HK z8{9-RUV)iL%if;5beOq25H>{J9SU2oF&z$jR@r!;&4E3yvL!xy1NJACeeJWo`#8=D zl^yM~zObiNc8<>~VP?|>FpK?NutRZ|=G+S#sSjR z!A#@uzFxV{hh3+>41~>9Rs=I&Cc?~@YS?h~r5`W0-XhPxSN;kFv!rL7apG`he{BNH}CHS%DlF&1XygDEhx=@l@u>FqG{ z<$jp?@(66S`m!8mzPtxBoBkbU8b88J<7b$>Pno6*ho*7#K+mSVVWu${W*Vo%&Qy&v zV5V_C%xro!%xtJrrFw^LGs#mx2VW!awW*YrrXRF3(Fw-c5S=%%VRz+OWo%uey2WIWnlQ2u= z*D&+>AF#tU_S<3SsL%g_xp6toi+wiCGdPxI^W|?av)T@rX|x#ZY3vP?yQpbSdzfhy!miSkkAj)TxiAZ(1XiRP z6JVxs4a{4;!Z%r@>643|67mm<6j+Hs5FW zz}yl6vy^Xyna|r`M`-N-1uIdX{|hsp4;k*oJ_lwRJz=KN4_2xgr@~C57G@>lD%f=z zms??Tl|2eGU!I4VFE7I4>dUJz^W`g;S?xbC)7a~DPh%fgnQH6{GmVpARw72jOrr>9 zVU)tgt42A@H0HppMBD~5yF3JQOT-AjM8Mn<;mcm~W#^9cO2ic~3-@|hXSL~k*aQuC zA)`ef}0^KJPu+i+yL9X=K1mBNtYo8YjU_qXafj zV=x_NCE{w>T$SAkGhZHpnJ^&V5adem}&eMR;e1z&hRvjgIS5_ z2Q!UfFw+Usb6{qdg|I~`TMDzX(d|sHY@7jsm3C)1psF!OI5%+gx}Gi%I*-K;)e3$y<6HkhUSL0|T)FZ&oa zT{SkrtR(JvwpS86`Rrt$o#nF$uv=7jpL0Bm4;|xKaw^QyaS7~b+%W@!)oMCs!z>*S zz|4{_!gi>;H89h72Ue#VAHq!IN0?c1-`{(d>R%Pi z{JQ~W_WJ|O?Dq)F?Dt2Q+3yWs_Ng!X8D{otd9G)_o-nJ)BVcBsr;5C|yZ}2!WAzGb zipJ%2n8oEMn5Co5SWn|Xm}wjeo2nW|z)WK_%u-ndGk2x1Y3i=rcXt)cthNwllo<%PX*J)!koVuPOT$W~uxS z%;L9Si8q?-0<)|AU@xe~DA+1xB{0*N?8_Q_*_|*8cLmI1|03)-bkm$yVKX%LYhdfu zzb!C}{eNK=`!=Os432?W?&rYF;(cIN{?39~9*y^}PVuki$Gw=2hgn=E!;aUuOo7SH z3(P}d7MF!Ei~XB0(^v~LjlaS!RE_m8(`ZVwYOzm;-K{A)0%pGC!OZqUU}pPsVP@S) zFtg-ku;*3xLD))V&%$0&_8QFGeFih#@BFL(^{;js?}b|kv)K26b-|Z3XCUk%jr|aq z#eNdZVt+BrVm}vVVcZ8Z+dly_+pmI|?f(KZ+i&!*{^VbMX@VE$pI{c3Cgt46(YU0+ zF4nlTf>~UShndw%VWv?DGmTnUgKA8JnZ^Q`#r|oSTgG8EYPDwPdF&9FUF`z9Rj>Ai zEmn3W>@{WQ!H6t%^&(h6i+$ z*k1xWQDc8O>{5-(Y?#I6Dc{`-zPndov((+|zPqh3TPf-|$#Fi{a8HD-R(1-^!W|E@ za3{kuG~6k$%hbOaFbj7f%&hi4%rriOnZ}o}%T;3|%rw#~9p{f4S_bS-%FczYRCW>U z1!cFw%(^eZu2tD*Fe~?4ec3Otd-Uo-bXrd+I}v8G-ms-AJJXk40kfE156k2#Pa?ps z(3mcSSxjH`-M!bJSfon7KO#cD?#M1@^SE zyI?DoJqmkU*-DsM?F-loD%(I-c?^_!>lyj39~pq z0JAtRldBr%Ctw!muYGsl!*cN@&G`{_ox1zkcXxE1=U*nw+~vXMnhjv)-&mN{!E0bv zUKYaM)cD;GvpBDXS^U<+@-*D9Vb`mFTVUp2>w3?oN5D+u1ej@L!RDz(KFl=EgjwAx zhgpr9CGIo^b79th+yT2uWy@h#DSHcMVf+PVVSEO=LBseGW?}3(#T$nm0JCw}5is*P z3wD$G*AG?(OLJOI^~T=$Fbks>EMKqohux@QoCdQnE`*u8D`5HR?i$!l>h5}&xqB35 zrEVq6QvNB-bT`2ARd*9?zUqDt8>g~=!{V@Xr^PhSR>#AxQQ0XlD@~`vtj3RpS!gq0 zmX~v27TV1)3vChXW)1C5n8oxX-`y9m0*%2}um$RFGtAr_z@Xi7>qMCOTnICbQ((8K zMjx1Il*6vpI8TFFE?nWW`7q0myL~qFeD4|I$*}pVdkO4jW%t4?+(%)B8q+6Xw`#c0 z!YtgcVHVS0V5YIx3{PVp*h1CV7iJpSBGWK>!z@;3!YuY>{?&T_>bI~vRHNVmFQx-w z7SqWv%a1EzJ2a;AU?(ZN8Ma7cun1-`cptVyuYLwIcVEJ8Q+FF-=C1vPUfMdttbX)> zneHH%=?;b6uDT;(raKj8HoXF7F}(q1>AefKP*e1%FI(x$GB5U0G!SN?jevF2IG+i- zLqi(_v(Rqz-QDiH`vYvTx?AeI`>XHnYv0`#*q!R`d*5CA2JSOy{Emb@p)3bxr9BR_ zSXIHgb2ZJWgWaXROov&l=EE#!?uFgpNG*FF#;_3f2Fz;N_b_wU;u6p2_OO$2m*yM* z`-A%25oSIQhgl5HhMBt}*peoqQ3^A6m%*(5&Vw;HBHX)Sw=cUu?CvJwb4S>E)#wgeplk%p;xYzi8pW`CRHF>GUftaeGj~g2=I$Zbz3T2U*m`yM z8O&~2z0}j#6Sh<}TEk4E0Oqz*Fe|4OFw>m^v(RS1?o-_cnCUKoSvg$}vvRr; zW~K8jn3dSieAzd?Z2aY37?WW=h&^`{VfSkoGhi0RLYUd=ewgL-d$50~#>cR2%D#kI ziTDL({Z{M>$63kMbf*wzvca$yR9586YG77QFNQs!F}MOYPJNyWvsQiy?4K%I3j0yn zgRq~JErV@WwjA~^Wh-F+R`wIjY}({Xo3&BdqmwG0yF=5z|3lA!%U+TW*X(N zWvWpLGmUFu7W-AOPe^6D^H12P%39M*n=c(;=F1_lN7a`jVdHR@=5&Rb#ZQ7+yD=VS zx|3nO)ZG-=W2!p?W-(X@vl!eDGyA;`Gu;nhru#AMan=1CX1a&Z_S_v0Gj|!V%;jrK1Fso57 z!mLKUkX zb4w@8ta}d3bmK77JrDMj>Q=!__fg;7v%b5Puodd=W#3)1xt@P}!_2?-u&34C0WkCL z9GF@6VwhQS9?YzJuP=Mqmwg5^>*kOMv+e+xwOk`%X6JD*v-4zM*5J!p;>8_m=c9bq z+h;{So8hyYef9**@}n1Bn)y=fvrBz;htK}xvoC!13(S1k??$h0>qoqe& ztZB;Iq;PTjJ-=D}dOHK!0sbL6;-&?^R&70TucD%gs*>W0qT0IB@~Wchn)1rJvZAW$ zy7H>ZTAr9`@4NIg3}Z9fbG3E5BYbhuFjE>?S5;HY;$c%~Si2v%n&G>!cUmbJ8V@f$ zXS3WQ@frh4+73=VR&rfsEuFhyVw+aFx*)8juCt0pD_uho*3!Y6vZu~$ zzIH2LuJE^Nnmw@j>9gDVn?ZN@y}VYXey2N!!%Fz^#xMU-yB~*44$ml2yFbab%!u7Z zN78o;zr#F5r%BP2GS}D@yD)Qmr&T*KOgof|M%LBDizo34N2_*Xq@E({UsW@yxK3r_ z|6U>+ESVbT^?+9GByrWGrl?oV_`&71b-YDa*zPcda`eEl4EHJz^2d#yWXUy%&Kgziq+&Nhh$Y6*qonK5h+9`M6ybB#LbEPI*BRu zXyRs+W|QZgchOL4!|rC2WXTR*#1CbOC~rqthkr#Q;z1N*F2B_IB1KH{z%!)ei=2D;QUO0Mk}sZ)q@~#b z{OQr8x@u~fW{T)0ACf71V^;~OC%>Yz^i&L_r@vDRN1G_G3IvP&R}^yz<7-gju+c5{ zW8r2;VP;2REu9DX7uHH&0}l~al< z%1dMX*T-XJRW-5lvdXHGNyUVj%Ke$eHI?O+<70$$WbH|@L9Tk;^y+xGSV>jolz2^@ zTpw3l8!wGjRmN&-N~Dufzr4u%akRA6RaM0%6<1D2zoM$9R%3ztcm)QjuAAVfm>9*1 zYif$8o2lF+Ig$8?6*I+GB2!#>bX}|_KB;O-JSGW>)m6pDl~)$mOeaG9YHB2{mI?w( z7^>xOz7~m#CBY0^RbLmYDvOP)s;?}q_3aVJ^BA#_Q#ZTKUO2WA5x%On4Csc+OLmqT zb!xnP{DeBQRdGc{?39yZ8C@yHkvMwJN~^?Jwe^$4NSWQp4!V4Pl9e^Z^!pO&keR$Z z-9J*REY-S-H6kC{mVh z-?pwD#dalC@v^e=lJa;Z2JMa^O*c7CN%`e^g8Rn&@zPoouMjg=;&kWn%IXr!k;J(L zWl&{VRiGHx#)>N#3zSZeO(=$2jlv>QtCdNc+qo9aan9qIc1Vc*)3KZuhW`N zfhlO|{NKhy66j{+uHx;QI1+EoMm0f2^@QSX)(lXX)ed5dV0?#E)x=|U6N)P-7{<+^*SW-6#-lJFMwF%CCfp08)jSN*1x}q~d9A zBYjFNH=|pOV5Y|^ifhKl4{sT5TZq_F3i#>vIaifP$a+}sz`@TE=CgS&7{QWIDji=GN z#b25KX8-?lyX5>&{{G+E#clV0RT_VbEq_az-MCf6%j#+;l$X`{-FSv};{|l$emPGx zZBC-TcmvHY*;zIoru3&AQvJX7Co|8Yw7cQ%)O{IkKdpf`x@M@C`TuKwnG)E@Uh^|E zFq+v_er9%w1)9JvUIS=tS<)P8ckSYrp$(9 z@fr;)Q$2R$9GbU!N*3uOOBvuaVkxiD9DVvN-+kVG#H`LQKHm50 zq9*O1IXP$BrJHL{j@`N9*2On}F|^P89e*30v+A}MOODvD!;g2*n_9V7lMBCn?eU{7 z`*_4{Z@vEZqV!8|829u;H=Xn9^%tBs@0)k-xOGGK1NjGwsY#GG~eocna&UNiqO_}}OBey!|=V=B5AR(|-zOOw7R+5UQ)>hbsP zf7sww2X$CH{GqQNIQ`lQCtO;y@Vk*+FB>qn^vmt%ANkDK@kgi4e|N!}3AcSc?SLl- z&Fok*W6nX7`ewHs=B2P_N!6t4uH~g?)i-Y0BX%F3Hi|8U)m5`nC;HEW{FVE%O>U295< z>tq$5Lss6JHF-mTv+^UeDwwt9I&-2y~-?o?t?98)p)s zgyeP3szVZ4DV!CO9MZ&Io=9lPi^XyWCn1qX)!z?E|39*Jx;o^Z1l3-x_Nk{l#sLXr|Bvhiv{Yci4x zLXwM+G=wB`kjx56o=37IBzYal(vak1BoBrp8<8vvNwyDQ=8PU(onldT;MwyPKpH{19ZCP$hheh2*_ zTDUome~O^fXUK5!M_AAwB8r=12*~rNMUp=flV(lio|D9~P%uUj|JxOxEFOe9^@lulHFG-SrBuTV5 zsJ`bnOp>H$lH{}` z$(STbRgz?SNK(Xrz7KQTaOjtX+{m?gNs`4$l82Hce@c?PmL&NgNwO|U@{c6Rp3-3G z;g!_`k|akbNxCIT1|&(&NRo_Cl1xvM%ubTbPm(;4Bw6W7_VC-5w~%DeU?e1)khG-* zPe^tkiSf`zLeg#@`lgWN1SIRygKh>OX}e!gG6qS{1A~%!BpEzfk??sg64_@XA$bVN z)=ojm%Se_T8I*jEWcblR$-l(SF+quJfBp6eLCKLwGMH8*!a4=X*36*fbR@%Bhe)_7 zN79yOyc3f1MZ(jx3CVoX>J^mSi=?4XP_hEa%KkygpT*6fpyaPe-aa)b`9|Cf4N96Y z0eO2^P$JLnR5L3|#OFvPD@O$-xkxg2-YMaxACj>=_mq%~MzXjlC@Dj-t~e;EM>4l0 zD7g&D@OV&iBa*h`gOVlU&xD}lStQHO3rb!?GPWWp`4Y+SNkPdENUE!Xl2(+;vDHCI zCnP;52PIiZ+Oh_cNNH~*Z?h(pkjUoYE9v$Vl1WHnj13Z!25~bjD4B<3?)gE<5+q|U z2uhw5e=ZJ6UPUszAt?C>$-0o_??|>@5_I!l(Yib+*|$AfR|F+pkPN>%C>bPft_@1Y zBdNYID7g@c9bQ{^MUrG;lH`db$;(NS4?>cnqSCsm`f?fYad=^E4Y}z&cxYBGSLNdq zGE!^iAjuc^^7yq#(nL}yl7c1yNoEF;(?gO>BroD@+rD0`?k>QTl=H$ytML;Vz zr;sNQLz3LAv0+JGX2u0kN!Hw`Bxi9{lD8rv$theNk>qB|xm1M0BOA0ayw?!nGnJs8)0`V!x$?P1JWEVsw zxdWq;!f6pnZpO;6q%bS5d0Hr}!mNT05lMDN=cpv7AR@`nDve5VrbQ)r*F+=*8H=Nm zZ2447Ank<(x$;q%kR-p$o?%I0R`;l+pgJVU%gE1ah)Qy9j7svBL?s2w!;;Lb{8dp& z;o68KJ9leDl3ySXw&B=gXGvI+o0+jZD#=q=; zB(HFJNRpqCk@0p^lC>cs$YF(y)xpOKxH9+Bi_XGA5reIt^Bg0mu$!i%wH0f6t0L!va;7iB-t6;Ba*y=wj?2titPN1&S6PTMt)9IQaCUo z$;&@0Dk+>6k>qDy8I~}pT@aOIuZT)=S4Sk7d21t*?EEcJNns1t6cD;2^L)CH&Jjsg zMnP1PH8?8C9UGMtR751XITu7Ed3kfglKhPPWCyWYfDs;(}KBGAQkyMd>D~r zWoCpW1sPexqmrD`s3gB3Dk)qPmK0{>$jmMfdSOQ1>Zqh}V?>gf*__!@P%Epjqc0&t zoT|`lOC&QxlHi?d48mOxy2!x6&|8mdTrF|KtSxZAn)^o0wxCv{?#6A(jcRuT|F`>1_)e<*hExC};YFP8}T?wrXu9iSp zD?OxjW&dX9CA4<9TH+?G#d2jJtOc*{@yCQ#x;W<$H({;)ktAZcs^j=I39T-!mbeLP z9T3tw>#K84PH6RYwZu(WOJ>N4ux3u_c6UN+jH@MX!dfi4qUGh+zV$T&5?XbxmbeLP z9TW;{@vw2j5?ZrdEpZdpk~ig=$)cnl&(0l>!MqZ+$kh@zXq8NuSeuul?mF_{tjRj% z!9RIhvPX4IRmsreN%5XNGJEvk2EwQbHSyXBRTZTLJ$n}REKGJVLf_8mBd`7NlEQ#^ zWt_)&cFS!ej(U}r4&a${&&S5X#n}*EZkbeEu{*B&*lSHA2J{|PCGHyuJL;@IuV?M1 zQzA2@c-n3{9$8%1TOM@UP3OI8#_fj7-uhzHF5ODiyB3z%{>2rwarLng4@Xy4 z7ne*lV>jZ&3zPWg?b1nh)-Ii7i7|HVYL_l@cFUifUHVh7TmJ0A+*!NKkepq*DA=`y zM^){@zWA{V7o)0nVG_L9g$v@@tF)LG>8HeZZr#RY-1A8S-C7?6=4H_^o5K`h?Ro&BY$ZVhyuN!I)Cu^5|hBvw?+UX7(MMdS4 zs&P_OTvAh4R9-c%sI0!S#PP+pEeB8MPO7T(w~XL&VD|{ut-U(vX_oOSqa#mt^rjOU zUn4Ig4`t*vlF--|LM~|8=v@)7EFE20&fDOVRBC-B8SVC*_NJ=1A6h@jE~>i{dYV4G zep+XqB~AzPT6=Mg@1`#g=+{(D_s=Pm>Pt{SDe2{(4~Wk}~vp~dUPLga`Wr4~n>n9ca87C)Lr@vapDRNH-g-7dk$jx?xYQxl#H!@@$pz*rehIXP1=!&g)kop^b|RMRZI z=2jS~5mkfhc~@8}VA2(dc}k&7u2NpGsZ`2K-oz>8MW#MUa(_}3ykfmmDEHj7gs+$p z)tx)N3HqYxPUVSY3!SsNO)*gk`k~X3pui%Kn1txH;FKfiI8%li5ka;!CvJLhp_7M* zqo^C57)0FUM9y{4AC(2qWl$45m*IQxTnFnx0dWhS%0N7L&Y(JYDue9cIcfKX)Ddyy zG%=D4UkF7mG!%}wOO?k_%gf*~tQH)?2CwLVH7Fox8J-43HW&>`Z0H%4gmYhqmFgrg zh}84&kTK|sH$V)^{NZ3w7#ed0FIb5U4E2H+)pQZnR6{D&87VKt`PBf&aF zQ;KVfhV~mhYD6yvsl$ei9948iufYT#h?&MoVpLIA&#pT##$XjaxtA3>Jb89mW^s02 zJS#pfvm_@w%Xgn$R-o<^?&6K;mo+9g58SJsKRFp0jmUFT`jeB9R~8I8;ZM9EuQ;LN z%d_(}Lf-kfvZVM;n>49sPG(q~@W`0c^2Ea2!dT$Q%*)Qng%ZtSd zvhs8C_0rgugPR=UJl=6qaksWj^y8tjHX3|4PR=vTkogpl7sJp;@1Gysa&&*45m(er$Ziu*()#eX*;&I@s za>g^0JUJ6{hL4T9^y z-s$s37nY zGplMQju|pNHlVyN)~Bj8KBkyW+sZ4->&FZnP&BO1h@!sS%^6cc2Ub;CUQ#?pTZ1u7 zX!JGWs&VJB<9hdYPD~2&zI}1CRkc-Y@o~(EV`H*u=%n)VW&foi9{Db!UY(?!Jz3?!QSGjtI888$C)hsNQUJ zH+f|Ep$^t@j&U5>u!sAYt=qMxMA_lpVpDe;a3{H?<*yw+Z*e`6l^bTGvZv=FS234t z+{ZcBJ!hYFVkFn)%PMkoBpJ5nr$dvYpZZWae`2#~-~s$rxx$r>?JoIeP*VLG*dJU2 z%07>8fD6F4z@^~Z;49!e;5zVKP@3KMK&hVZgHm)q01pR00(*dKL8*6t0ZYJ-LHRV| zC!l;r;ZyK#@UNh3kN!C*TT&B7!?WOeQ1bdq@SlX!nV)xDhCG84iN74t@-v+4Cr8SU z=t%jw1iW=8<%caq|*at9DX?L}#j=ed?Y~aHNpD?Vgp_$^xC1ufIwddido_ino+6@nu|ft!lpSp8Lfs zQQ~S@Ig#SzHt~*E-0a+no45Jz3O6hPv8R-+bbb$tfP*HxL2UdBsCm=G%2pF_1oEcf zH6YJ;H#`mQ0saF_1DoOBo?s`i1$Z2|7nlvU1iOQ+zsyIc|C#3!Ku_oTbgZgcd3a+i>Z%bW;AL z$?}V>cqO~nN?GyCMq#_R#TO1~TBK~8hAreMBnYo8tW$~oiCv^D9LVo|SI!ts%K~k= zmW3>^Ki6_VX=if51zph3n7{lNhs zKP?NiISul$p;N*6AmyY%K1?tSTo2MVG{}Aor-OSE?-AfBAmymxRB$vX`FjQ!Ei=~< zA8Ne*04+1#`S+aDHuA}%@J8L9&TOtNN-8tn0;p`wEk3049h#`%Rp zO2C9vC7`gKR|vh_9O(ukxhc6@5jme8I8SUQE&1ymk|sHqI__zgVJ}I+L{R1h72rwW zB(OVJ4W0^41_y(+;25wDjDytM1}V`~z?tAwP;ADI8%g;vmi+6$HP2$vx=Xu~v~joS zNZlO+-jvVYyqgMD8 zqGL)=N3!eoq%t8(`-vM3JFlVMfWRvp{@&DegkL>XPbFr0IzdmRv98Y2oN$1m`)IB~<(9jEH9My0-_#8M6d>*U?8CPjt`x6+oqtrR^ zOQI)7)Q%q_i`voCxq@qVq_X4iV(x9l>*6)`5d!f)#X%)YvZK@#DUxcbX*`vtHN`jO zbdjXv#H#QJ4Ntf7~7Xh46uKX=*Ch>n46kERsiml%V zWsLIySOR_s)`1^^mw{_RvCm(?sLl7IOiO+S%dXT%2}jEAOZ>V=`W4X;H|@a1NjC2* z#^&BkoK;)y0WtOxfq&H@rK35CcEvB_uHv z@yqhEKolemV&8rFEpg>Lu#cpRfrhq4O~C$g3JwF=fv90TxCeMUNFUxHx-G!_!M(sI zz?R^%U@Pzyur(4UB1=LXiH*ISG6O>;|p?yMy0?j4d0aeDnn6J<(oZ z8Q2?~5B34?2K$1`z<%Hca1bbEg)wPT`IEVc)Vs#YpY*ZOaj58sJ<`D~VkkXi{iImR zoE1VXdE#@5gOVpjOIi^rXq8%+QVco0u}ukqsP8(G@rtuIlCkqNXB@6%5GqZl9Nu+1 zPjjS0_1liQ=0^V|J(A~b_|0^1&*XVk~-@(;#Fm3Jk^A?ZDqo%?9%v4mP@AkjlcB6 zvWVc1XBuhNgN;qOKm2vQuG79+8kTTbkRgN|(qi~|yVhj-FZPhU?Z9u1D`#If&D$lQ z^uW99(A4tp8$DxyWuJDdGIChPoU)IN-$bRUPmq!KypTo zXc=k7^=KIp9VsKPf`9O{KT?0)1<>N%>_KEN52>Q57asO=3yKts;*t`cC)AZu$#QRf z$r^za-F>)RNRgBN#4B>iO@x#;>09J|opDvf$S)U?XWk(;ka8i#^+8wo3HBAcdR=&TifHVSX=)TtB;bk zvY4Hy@qs?OIuI*Km*izDexSS z=Z{B%l9xw;Vy~mYXdbZMqwTXd8jjYz?f4fRyNQnEfwT)tc2@UB_R^Z?J3%LKkOAHo zj9ep1+be}3sqK{^o8R_I^%0v^(}zg*Nad1S5u#-^FvV>KaU|I#j>@$mmP(t*7U^_j zq(=^~A^rirKqdAk>6SdAWH{Hj^6uDFY|$5#sLR)?B##Dwl1Jfrvo&r{bgTcw* zP_Py}53B<(0qeo*!71Qka4Pr^I2{z*%>bkMaRvDlIdU$CETJ6&;D^rQj>c z`N1qyomVu;!xST0QTBQ~f9@+qz?&nvvmrlkybL5j zN75&Gvk$)uM8Gj0+ew-ifnuxM!2aOvpybIN;N{?*;O*dD;977AD0Sv;P^Mk?fCb>a zU=_F&l=~g`fnv}5!Dt>Ghg>YtSRTn-s31~jL`UL#6nMAaxcPmM<&i&g72i`FRGZ{{ zl73%e;iUl7WggrHpsm%=Uwms!hH|y41NHL?LGvf z`Ef3CF{x*@Xq^#%qxm5^k{@S-_a^7Zh&az$m&Cn#<2yhjaHPx+$sw_b_8OI?@oB$t zx*$2`Eju)tV^W1=&07NFlVuW`Wuo*$a|2P8^hzEE=X&fbt$DZ~C^6n2lsr5D91V5= zi@^iIiQqxt-QdBX%nR7RxM4kbDEM#iFffyF4hQ>!oxroeBS5ipXE2&~vVPS8T?t=~ zXx>SC7ahloj^tfCaH*d)eqBoBonN0MgcQea=AYCsDO-LGldSO`H)wSHE?MJ^9^9;v zq7fXHxSzC?yb88=l0M0+V0+gM+ew;xfnuxPpyX8_Q1YrTSPb?9C9nE}cYy=IrQkqN zYd%_E*4(EMpEkM7}mbge{mB)$^neaU%5d)K?lo-*-# z#bNMBnKv?w6ZdI0$BB%x-KMUQE+|niCIrHfc#5rC@*CsI&&383_hL{&8wZN5OTfWk zDR?Ou2d@Lmz*oQtAkShr<)EbdJTPj@Q<2M9D>&Zr&c8=4{^mvc4o^qoaNU0V>EV}m zd7nXF5Zd|umE@j73^g1}+7a#rq)hg7uLwvS#7=wg%i$*n`;IqA+-HDdKXx70b^MD! ziR;B+H2r&0#-uKJxgM?Wf8tuStrnd$>y5PmZX~<$ARKicI47IKR0m%beFY{%`h{wpAu# ze%sne?QN{1lX5zipLa;S#nyZA8|4b0!6uTHm7wIo3t%7cMQ|AS5_k@{3Y-VN0?NGW zRZ!B;u60Q^{RMft`va0}DtU5Bq#lco#N%gv4>VSeBlk-sj1NfN zftQ2L!3AI%_!h|SiaKW73yj)rl(=_)fR<_RT>2)t_ZnT-@pOiB?V(2P_S^fX6w5Mx z8{3mGy+h(5HVXDn>7-HOe*h@`QwOjYcn~P@Js6DIK-Q@{aLvo)Xj}OP*P?Bu=ty1^ zgAX@m16|b;pHmzui%xRi)W~YG42on9;0=m)(t<|Dqk-}!V?^(e^oT8`>MwGIh1g2c z*aH;X^aT5Zy+A2%y+P@(`hZez`+`frexUSI{lUM31Hi-ae-J3oshkQHf~SE!z`@`! za47hDa2Qww4hO})Bfw~$$#^*(zdh?l^GxO@JDWp1(pa7ih*$B*Ma^{0I|(7hv731p zYKfJ1uc?+v!vpoZ^PTPTOV4Pw(*N7m|+^u5coDmHeFyio6Dt{H+D0 zU9JPAU9JZuf2V@WKz3Pe_!^uJ%J}1aQ05aeK$%Zm07mocG~9db3N)#mnT0Gr(sz0~ z1Gu(eKhcsSI0hbO_vU`fAo#wv=3QXXQL4rdNPBu$K#7CcG1$iNRU>UZrL%AzWzMl!sPpL=^# z8jwazqJ8|pfTt2Kv5Ca3yDMKxn&tcfP`rK+l=0R>U@`bGDCu|vjN0Zc%1n%FUJ{~p zS>~+Kx-2>pp4{6yB5a$`gCTk+SnINckm5*bphmjzKXuc>|O@coXaoz6G8I zz5~t!-vjRi-v^~We*pdw{1BA2|BpbP5qH*tM}vO>dxCtatDz431eANae+91uKLf7@ zKL_O=-#YLv@C$GS_$9a+Qd{_wHft?E?-094+33J;jVo-L zW@Te9P?FaYl(NwZECySH6Tp4IO0W%B54Hs_1>1qwfbGE>!F|Cu!TrFm!TrG<-~r%1 zgwLMZ4Q;`LKD*LCM!nV6?38tPkr2jkg!4 zq8D9H5FIHiJV)d_mRweN8#-RYTg`mfQ92XxJ;jl##AGIym@KXJvgqdx&!ji^UPGxI zm+44G`=v$i38z?Ukip=ZKpDzXwM6-l;e~%cGn1Ors-3*B;!Wi&V$u@%McIm}_smuMU9p}VUdzKhd^vTcLdBL+z7FBHO#~dd;GN(_;KSg>;BpYOd`e=i@U~^{(9Sg6BSLXN0=xd(m^h9ow>sm5zTT%<>M=>YT_E{ zxvoebEtlA>M&NZ+8r(Im3+bEnktk_xPIfcbyNO@so_|Z;$#v$AdUy{w+IgB2Ln_x_ zcCY`?-p;qU=iWmA-KDZ|NZ}UugWPk^KRXY=YsWmU@9E#QIR zt>74N5jY*Z4SWvd`=bpngLi<^mMsR41n&eVfOmnHfqwv3gLi{pf%kwsf9u=}_63)M zBf)6-vJq8I`4vv1)cZ6e}eCW1?0o!T+5D(|3ydQlLtPLZ1*$SP{xLH;&F-ttEcQt#e|Z+ zpa~QA<>jUI6j`w?c{neIm%dF7uX7bUH;BMJBn@Kc;4?@EVjoG@VW7k#28x{z2M2?l zz{|nT;9~Gd@FVajP}bXy27dyN0sjLY3(7NM$AMz2M7V)$joN?PU80=Ug%qFKj0xKso;1-W}@b*mkAL z>`&4p`LQ2A8K=lmfW0K0r+|_lJwVBio}lDMFHrKM4|o&U7hDSV1D^-`gCBqcK&b}< z!8BrWDk$^o(?D7091O}ldMLOI91hAn|8#H*$XBNu{sWE#n-b4apxAyi7|l-^3yZ-e zzH&s{u^*8|?>UQ(r1N(0sYdeCYsebUOvyc|#T&74wYFqle%8}RRO_HdB+?ZAsv4H! zwzcGGQ(`NJH-e~k&yRO|{CV!VR|9Q6Bl+VUl5WX!BJ8hymt#}0MHMJzp&INAP6m$y zYrs;l7CaBE1DAk&2VC!6O#wG>ej%8S{}+Ruzy|Pl;AJ51`Z||`)4?miYr(6)h2Yho z#`rCO9FD=`}{KL!NaNbEdtK%mx z7VhunZcol@OW3BYjQtwfyHski#9Q3y08pN*mVzXL$@T1z$p&EJy(CPgH+AK8>Row8>}XW z-(70E(V#N>6Z=XT3bx}aiuj?rus7pY8^*H=pWqKAK5UHtNj zv8@$LA@UeKI16k8${snq z!rSmykZ!5rb8ug9E6Dfg8aiW%{XpJdboK{%U(x9R4g?PbtH6W7i@=WH)!-rELNEs2 z2_6pe{*==RifJcE%vEZ>_CU`t}GS~&|1D*i#oVe2!lS_UHuxx*1HJ&}f;@Zc0nQ=4D1Eg zfW1Mv?brvL1@aBPhAY5+V6=VV-4WeGNP2HMqV3D$*tK_LoG3a{4tO8Mc{;g$k*#f0 zwlNtRLed|@_T)B3BvQr_-G)dcmf>b09Z9fRkOn~NoZA3M?;w@iA81O8APt1nL9a!S z`W|f&{6$r55!T{jH(CVwaI_tbvXYj@=WUUvHV84@*>KE~Dv>uc((iBiyvZpTg32b%QcL`5 zBORMmE2%biyDP;@Z{glA(XXry#8lEcjdS{E|32p@*iq8|1t@k~4@x=w5*!Tjg-)H1 zeFa{_`Pbkdz)j$C@bBPD;AZe$a0@8q@f%Q{U;7r6`;Fg$hk#qb9PkIQANUVYo=@2Z zo)7->|6}e=;HxOFKkf;H5O1Ocj1?>DMNx6Xkc1Efl>lK;B4KlBu_2NG!9Zei!=j?m zh#F%oT5+qpxU||zTerGYtXQyOT}mysXwlM^G}vNAo7VXE{hss8Ja=a94GG%M`@UDh z`OR<6IrHq>JTrsj-7n5(NEyTb8!36yfehz&BfQLxy2@{vmxS+ii;curR;!;6&5a$oP?BHLPEDGBNi?ZN%z7&HW&Sdd6(>T*@V`vo{x7{^jaSIq1AIFr1!Pil13V6}S{gpkI- z9gezpq|F?Au4^qq(o4#Qe~<2X@9=nKWF=(U~%XX_#;B;FGikbUsSmxmjVLtccGeSCFD8JE{1 zB`ssfaQ-}n{k8mcl|Mh@TzFkdY$TkI@b_XMe{B0F*`pnu_)hW*<&J;Zx2~oprcZPy zw1v|2C0%sN=%0|{GJY!cU0A{_>CJ5hXM)RLOL|B=T9K08Hz3bLu0~#kyb1Xb@_R^$ zD_?C+NWb5~ODU4_EWdDDbv4{5XQEvU6&ydkqZy-NK zN_;*;hRc|&vq@Vht)%?IY4lgPqEH%%jik}x$Y%p-BxS72DT-Vs$&a*>(jsP08kwL^J>Sc_> zMfFfa4c zVs5^Ea}27*M|!GV>kV}J_P>Fu)Z3X_HnaHb;u%wBomV#HtclZ{L)|l}{xjzk%{Xhy zS(A95r!ni}KUq9u#d5Ys$2G6jIvOn}>qxqO;B_p2``2k@J6K?VF)9{x7ZtLmK#;TG-70Z8b6bp2or?ukS-^hlWm>tGS<9 z6Q6!N|0me`6SeErrxcp;(@M`{JQt^?oHes}#w?m6LrKo5j+7BGlPnuQb=q0Q4EYQr zX(TExo#mwWFCw_rd~c(sJjQo%Ghp_^blkLaix^O(_rD@4WrccLuIKu5u5=3L4&Yn^ zrfhAwxUww9&E)j{7gD|DF|vN(h1`e$myf53Rb~8eorbCIfIqKzm)*e-Q`{?6; zaP|ZLzKDCYTp%mu@LMZhzGBbxtG*aB>4!ghDC0l+4p#UvCzX8ruwM@zbMUk?Z>w1Q z(U0^!mGJj0KcF@Dlxca-{A%FLmtUR4IN}q+^KIrJ&iGU2l-B9T>Y_TAhz?y|Sa95& zb9jKiW?6moOg?`$XL!z>swMNP8~E11@SI^e!-n$#_u<2G<}{EPbMzyK!xnyhNAuXS zC8@jYf9}!yPUDjKRSW)?AzfU#cwX&_vikp}Phu}`tjFb7_|!wK`;muvUq3f&Fow*^ zi4Li}pf-9cqN+A3$NA9{qTf*hUI=qgZw?AMdur6td94gJ)10aOU#8663zm6XUuTz# zGMwEmipblAsdciO^9~n9oYz5Ok>R}MqKG4RObqvdX3CxuaGKfPKX7e!=Ov7XJ4eZ;Pw>^KuI8M5cs10OI*IDbL4CfIS zMI7!?(LIP4?oKI+$bBWX$Z)>tqKMoRa=GIzS75nQEH}||XIO5ow+7t4KYxlb*Z67jCl$3+omkmaJ5+XH$+Lp3(T zpbTe%iz3c?kc??FoDD9DINPk=cB?mrNy(Gyp(Iq@9T8Bhzn2*g^M`XgR<3PwTmLoBktJ@=P|1{m!kBvdU?!68O}NvMV#Zv z`h(QVNiK>w4Ir_|a8|e|;;gb zmXmvR5`u_xDOvh+4b>(WWjLE%6mjN}RR?RR7Pu(lJPZ@!E*PKLC>n^ zT`r<^bWy~)gvbt5FPFP0;%o(pMTWD@MG@yVE-!16eVrXH%5ZkNDB{F$!C(Z7VHAjBfW$#)T@-Evbcw-Y3L&-yy~ zhZ>aO6uKzlTm|BPyj<&|i1W02Hp6+&MGh!i@U^#=8_&_$$>iz3cHK&WEzFBe6e%p;6NhLh!@ zi1Qd|y?W_zQHIm$qKI>El=}qgWvz=M&YPh1%58B`#926)wGOzx&J!-maGr5d#2J00 zma8bnBY4vtly>o|{_nXrT zxrlP*qKLBx#0Bxv;i8C>b+oa_aI#$#an1#8(6Fp^5nfyraSl6%y$tGQu#4!EL1K~N zl)5P5YzDoeUIrd(P=+(eMG>bNL?Ezeby385#_Bz9^`b-B38h}DU6kR}x+vmgAIE+Q z^)k>!5oZEOEHa$QE{ZtMgEp#{^y3Z6a57yKah8AxEEaVxqSRTv)mCp0Xp?#wdxAmq zTP}(?H-iW^UT$*{y^Ga*!s>N^UR5s>PBe&+x`>mV;hbFB@D$%iyAjb9yd2W7J~2 zi%4;hSdii_BIcG`XSqxB%$=sb&L$VpYq%)lT%6Bd8})LTiz3b@&~KF6>>~R85$vsl z>+9@s5%tJL5$DPImTMc?k!@SK!4Y0vAyi zEVtTncUtaV%ROefb(VYHa_cR(*>Z1MZky${TW*)-c3ZB~a@-KtxKSouM47Z)>S^W+ zLVcZ57iBoJToiGB0itM;roVJi#QC$;`+}oCW-*O*XuETPj zmV0CZPxojD_PB@|<)Vo5ez81LBO&dhL}QWRq`4^K46xicEO(^kjrP1jOE5!ZpfMDsqel{t&5oTx+vnToGR~=kkDV@qKNY|&{pN1 zc2UH6*>W2#_gl;T-g1Ao+}|wsiRJ!nxy%yp8d)x)w4bHlGo)m%cM&r_7e$<^X=c}G zhO^j3wD+KQHKez>DB@I<>emqQvd%>r&J!+*I7d%6&*)`1$GIrtj0OEcy-aXX#OVP2 z5w5Q@VTM8U$u45FIa9t~C#e>75%m`&7SvxCMVt+wZR#a!mO+#z7crg$(L7I9~f!yXS>~>Lxv&TgdXZ$(b z(^QK|E{ZsFL1K~NRJe$K5cIiv$v)R0+E^DwoQFV#YVkuCMVuY(S>`=1BB#%jIf{5* z?xKiu6DUKuTU-=zo&aSk_l%1o&Tl}ntefGy?IOk{pcLi4a8bmm|CV{nScbFAMG@!5 zZ_BQBv0dY$h|^~dJ6@IB&qWdE2+&yNj&c#>b`Z@cwx_!&;+zel(S-Y!iy}@Phz1RA zsf!{`D~M(c?nW0yoF9T{#^8SJq6jy-_^O6;&_RQXzPRI&;<;zu(l_({%6p$KN`vq5 z^5X?nOXjdS*+JdxANsVeuW? z&w7ZxkGG$4NW$y7dlG)8WWVLT$a;R=S83bxzSlNe&cB7ivx~oyHtsvl$*zJp@4gz< z`Xlko>(hMUk_7cq$Ge8%;(pAr?{$Jfdwrdq&sL6;T}N&>`NP8TB=5CYe%^ikP+T|u zN+QDrGFEdbuB)$S@rBR#3J!Y>eI0^NM~=+x|3}j=^ft z&_yX<9wbcDhVy3&{DkHs-xOmG_ZB{F1c#Um}~t3ng~?&!S#lR8zgH zXSNo1dN?(2efvR#re*ey=IK!hOv(1<$wLJE<@}d72Y#BLIbSC~M-$Mdm01Lte^b6{ z9)3#PT4%pGqqTUKrbp}SZD2{8Eu>Q>Now;Y+SHNK(Bq=ATZ+nVNjmbX?FMAHs5GtI z)w^N8jm0~ooNSMfYW*Icy{mcl&X(ex&Ba?aA-6a8*L2+0JULaewRmguxO6?UrFnX` zo_e!+@*qivh746mZypzI|Ayqfui%JDb5T?kGMmRG$r8%h7l*sP2pl0Q*Z>!KE)0y6oCY8S-6KB2T zUmAim(z3Z&@PK|-t&#wgWR5QBY*^Vkdut#7RFp-W+)DE9^y;;=HBBo!oQ6qcU8$`j zUMRb3r*=rJcbHi3XnRp(-_iE8$avd9-QUx+a*xw6vZu}8c5%DixZU1 zTlzQCuu9(dYCm0y{p9F$o6Z#Lri%wUF=<{~CJzjpm=V`1PM76Z5>*-_E$;)rPI>l65TF6c>(!NZlCvrQ3RIiEeu3QFcWBYO9 zxTRz#1;4{9M08s;@*T~SP1CX`-n7{KPF7q~;x*L`6E&z)ic}|wO5N{l&!;9j(hX)x z97#}Z>N8qOvNX=ALS#EJh-@X&n^W@E`^w$dy}k?&)V*Gx>gBL>7^6 zg90Ja@ry)mUXfPy<9HiduFW8?X^ckERD?G+oDBx{qpHbWzm z*d6Wl;;vy7QBI*3DbC)gL$LN^AhIC5i?$yGk$!1E?QQmJnVr3{7j3@No-5&K=pQye zRD#qHv=LWg6UZwW7-;$o!6JG3Bpu%c`yYAURja`eX|JV$aLbkq%e3h@B}wWebsQ-8 zZSugadd!k8m8vV_H_y2g4{dx7RF#3Kbb7TTU0T*wYD_CNhC=OCWGXui+UVIGu_az( zINWq(y)PfC=g{sbjaQN+ALoMNe%Y&^wG2T z#Om?Xv^+hlp&%5D)XV9K_jD7C_IxkezN?q)ncmIS;|VJxWCl(x2J?>-XmZQaCM8cS~= ztmQph%KK&1xb)F|h>Ejxzn1+)HkYI?%1)S9Y?O*4jU%x$!@-T?(uG+_6nlz6>FJ=Xef3!PtKC*2p90>jhDvVT_8}&+I#yG z$7>H5*9Oz)D~`S!C@9*0%%TC-31GHP0JC)hn9T&xs}B1V=r(x-Q_5eqWCP8gv(ol< zJssU_ESA+qX}G)=h2-7G=4z*eVW+w&-r07oxGN4cQuI5_llr&J&hq8qp7#EWQsh6i z)Cuz*ce>oZAMH=m`V@wU^zNfe(pMf!YfqzO2a2?*J7gHV!{6Rzwr}!}B?CG7RoeGJ z5p26cGx6)q--A7dJkd?cq{v!8Rxh1L_Wr6x;m?}tcCJV!?vT`R)AsA;sZ2<^$eSH2 zM=t6mLo#Ut;#s-f4EMMD`<=|zlI=D`?axSY@EMV%+nQExV}}r}N7GALR#OL@+nUGe z@H(;m`l{5|t%d1U2_8BN6?KJC>O1AwZ zm3FnpyMJ2VUGe#ZwpU*@J>=P8+K~U@`qWcWCd2J^eBFp5%77akhx#sAp3*F9H=Uzr z?_PNc2}z`V%@QN@T_$aJdBu#h*eQ!f38Mh*4R>|Z8@9K|HFk0hTTL?CVmv0+Le=q# znO!sT#?Ooo_k9MroOt+WkPDO5C8FLjy8p_9rP-Ryu&$#u^+qqIsqODbmpVPuKb>TS zFUu-$+CT41cROnv4-J2`%kgc}L3&_D)OM;VAB>Na)Q+U~fkA%T7hZjvO0CoGkNP%N zTfSu7Us8{zMJ6ER+@7{aRc6{WFrzYge~tEvX7Q_JcXP>(*4fe!?I5r1k|c|x@$QJG zWxM~REm=LD(3sJL3E8gpY_Dk9UNti`A9U~N}u2J{0OGry=qUt z%+!rOsK+ri?URY=?)LL(!CTU`;xabv96c`eQq~o0v{UizG|=Ju2xHgXPhz55#j`+iRP?oszztqf2&O+T(&2D6Z`_T9WMe);Ca28n$5K z=29PnE7Ei)J6mb}LxoT#H(AY@SB7e9Tb)z=>9Xdr#t=STwVYh?|l z;UO)>a`Q)*=3B?d>$aX1z37iYHyPFtH_)(sQ@>ky@P+??=07?~-~n@i!hj z+FsD~izh*nUMQ&-lLW@gp7x7wD=k;^=>AkE0nJo}HkjGE3ahgi(4@uWUb9 zZbEs-nODZgv9>ez=9i}Z@A0LBDO{^z&pcszdh_fKVnRDi1D2k&e)S+>21}PEvo>3U zsUo{uX79FBws>ZG;n($pq~pz`buv(%+oZwtML{w{qR`nz6q0%j7Vr7uK!#3a!;LgQ z+~DGNMUrxo)K{>@_-4!Ofeab4Nf23f+vTMKw{ha*?XKH{qzN9#zqUI~{F_$LK_+Vx zle!303272CQ>3@x9x}ZJw~=~WmV&k7z{Ex&J&@h;`zJlVLLj#7{j^HN=l?-Pz9MjRiiIopnb^I~T}o zF6q$jtfP5cdME~ZJxsb7uOzJu!TPj{3v2r#x1w})iuNVh+%KuGV8t3Gbu+LMu#S1VqC5g|n^(Ou9(ItB% z{=1uJZ=(e%-Xk}aO13qVHZoR9mZM3pyj52GrMD!zwzd_?m5X^hR4Jn;VL$ zmmeed<7B(oLQ&U$lHE=ud*1rMc3HCUAJ0vifH#9t+0@0t;jVtIKjA8}2_d|AxP_uM zdkZ149i=Qej4pX|<*`z}0=s-Mxs{#p~uoubbjtZ5AZ=+IEUAIfnPF zXnE?oe@>b!fx%(hBa%DuHr2MHJsxWYx`XyPlB8ZW(E8+Ca5N)rug&z$&69>R&^O4P zH?xH8n|Z3u=?E^fbL7{(Hs7dzGQPux@jGi8Q_hwf%>i zvaM_6i&_zSgQu#e{)K&(V`cYTU4!*oYPwZS5Du!YNzXqd5~hcxv8L~RZfj=m0a%En!+_& z*W3o4(YoqRL}_cQd?Rgo>zb>C)aKJy3s_u@2k}e`Q%&Y!K z8}+?+FS7aaQL{gXYEP@ux~7wB*t;p2tJYIov~1couBVmj85~JWM4FfgY8%7lTGygYuh21-kh%jpw1k_(G87Z%j^vh>C#J=|=yA*+!%Bi7 z(gZ_L+pAy+hPV4LHMl);)gF{u*66>hq*gWeYH2mxopLliwZ*8kN(F45obKt~EQj2_ zaFti9a+arjy((vW%2IKf#|`q7cd2sJQ-eYZ^`NBl3=?07@3-`O-Sftd?QRYO*xxPLEOLov%vh?+i1 zFa2jxBZi5CNMqq)hBi*dOOi2du6j? z=0=Gbxh<LV=^RS1hQ{GszyE?U1*Hw(8t!~;(EWiXh&OQ3{P=S{@{;k)YrajblEXm?fR{LsMMDkqAV{pYGH@#V( zWh|l|x^&a(bE3;Gnz-}(4bwEe=d%qHE;-g$JABZ$^ORMbU2->Tk1t(z`8|Kq@A%@( zPx_rFb?n6T&BdEFpIF|_ZZ6rvHAZ^j^#$?7CN9^UXV{@y;Ppp^z3EHJ2onmq_T;w+azuKF@ zvo~>tH@)EKpoR%Brgm--5{?Kjo;JBRQvW7 zEwiPkjh4zHp1t8i!$Yih2Z9nW(4h^8M|rD#)?AkFT7CB=+FARPRQ9bW`Zf+~`<T&>UR4BrAIfLenrpi)X)~5^JTrW%!l;#&CRk5+ z2J?ScPs}Zka6O@*%c6ZeC|%T(Ju8#e6WYUgVB$FX;J2lf(d3=I_mh8D(d2)OrB=<%96Ct_Lq3yH1=a|{PJ~(%fL8<1Cxqsc` z_AGG!x=p^Xy>Iyw%-_$n_1ee$VeTjKZJC}*an5W>oKrIKBISor#h54R<~Z499nO7j zd1mSZT?d*ozBKpBMSM;x`$t-)XOGsmGOQe`7sxgj$ZpA8C9QBm0m#xVvB_qJ?&dsA z|F5@9%SpyVF$zs)5P}|=G#tS%4>RmS8i=J;mJgLiC*QH3~ zQc&B?;xeASsm-h8LsT1A$(N=$;{L-=2h}_ zE2AhS)9vaSao5@^pHT9KYOE`Y=8V==!rHE*{d%fsaD~uL9TjN$UW+?_`mz`{)*E4U zmlzTSNnepBF_ht9cq!a1scZ1c4ENtYkb&Ukl8`1@;R@B5W7&+NY*F_|>ym!67 zE?NEspWtq5AwVQKRsW?Ady~d&4NQIMgI-j`^rm0hhMQ4chn$m#$hjO(D<-=?n)Gsk z?xXz(bA`7)z<=`@@p43K1aD^H%_RQGs@I+}RFM@AFH5=`)&<*B-Kc*TI}z;5b*q=z)Kc0eT)srUvdvYjfcR}V6J%RzlqZzag+-3_{$zchVovQ&#~ zeUsk(ivGgC4=a*uKB!2Z82E>xLXbSol)Bogaa&(NMhz zGX7o#8GpY4?XUiR3o;@79Q0?k{RVSGqb*thGX5?C z^;dsO1*yMFKqdrtg09xHUw};6&FSlL#UNAu&H)*J$wdecA$s@^P+)TK1%Jdn}*z190b&Z^#DK?kWG-=B5$ za`*H6jR6_GB9OfOB+Z!!GXDN;_2df-GW1Gw(m?XH+B7EvWMVV|^cM|jDagd=TOeam z1{$aq6(D1A6X*f8_%Y}qMZW^wr|3hF@giSzFkb!xIz+vsWOz9p0hyd01Tq#wLB`@F z&^Og$1jv+)(?G`J+aP1H0AwtxL9*jHjW>RH7Arx<;sKDccpPLbo&XI}i|0Y+8n1wi z#k(M5@fVP>_&Z1*F;8>;1u_<&gN#MrOs~b94l=gqfsE~UK=OsVG-p1@*w%oI?IobK znttC08QX_J#`ZDL5o-Gc$k@IBGPWOpNMJm-fd~%hGmt6wL-zO3IFLLulI_d_nQMFp z^bNI`2a4)77J@!fy;Y#=6+HklwoihL?Ta8|y8$#JhtlkRHQR?|JtM@aj_ng&R4;rF+n?NRo-U68v+5vh-L-i%dgk?XP zEfbalKu4?Xfglr>k)X|LF$Hv&qB)>D6*Yq%S9CY%MMd(B57XBD9%QcZ0cap+)11G8 zYWNQVQH{>ms`E7Ktolp+3NiO^r(hKzPDxK`&*E? z#(N-hjSoTcE!H&WZyN3%;DG-?zwi zZUp^JZJ!1i+m}G!)KL8jBs+Q29QmS%vEA=LPwzmG(HjUFrh12gjNYlBo$7fi$fW5d zpf=@h0R2SK4?yO+PlAlUXF>8tgEZ%tpn46O&`;I&I?y$0aXZN5%tMy@J;-?e05nMT{t6ndp4&mY)XTv%Ge&PP$mksd z%2mA+Kt`|1>eXAl<)A#(TWR&~0zIsrUjyB%Xe-E!7fQ&E&?3}m*y-5$!cnvev!pkJZ$xTV)dQ^$(l==^Blhl<{Bwfv8aYV z4Ro5?W`ImsP5_zEpA9k=b3w+U5_Gy+ECLye?^(UOtls^gv8wm5)%!JQgNEf@kSWgx zQ+3QW27?A`sEz>@sqG0MbB%MXUb)qq4;rU>7h1hLtlnCy_XE&))sxR38h`JAzN=yB zLj^P;=m$DdLy!%cpcaRK+z?p3a?nw#Hy>1NLI5%?$X!c=|!L+8iJ*u$!c*4$XGmO_10UxS3px#@7GrEBaq3DPSDeu z8pl$_%r%CCj@D}wfMjhs%^3|csjb+t0wt%Lp-n&+>*WutfX-6A%dFndtlkS&@0TEX8YIoxX!Y7bt(pc0 z9pQ!G2+*+_f*~N;0gY`x(D86-PB!RVwLJu6Y|pWJ<)9N(Z$3y?C(@h?t=>kf_ZH|x z)q4l@E!F!Y$fV?fRA_VE!$3ywNYJ-c?^ux0n*@4ULwYvoHAM?Rn-$fA9#M1y$oRVr zWc=L)nxp>i2N{3cL9eLA=OAOzm#S?nGC}97MK;Kc3JwEZsusgRKU8!k$czQP4ce&O zMIaNZTS3P2eV~&#o8~+O`i^>j6tqh%-U7X>=m;vlu{aK7EQW!~)FKaLEb2fT)Z!Y@ zi;8XqnGnd=q6~T(v`NqI0o|-fsB8O$NHL3u#S#7TYU8H)eK_>KTLB{h_Ame#G$asDQRHqid1{u$(CsEp!+aF}S z3<7E|SxmsKY zGG2ZTx>`fP)+c=<7?K`ovGnXr_h{vuqqvkcU!=vI*NcOPiDT08{0MEyMqGXCBGeWn(F2N{b! zAY<_#kgV{hIsXST7Kd`mv=JwOOdByCWNgm_@jn)&h?Q!4F399%ImqPYH6UYgBPdrb zZUJ4U7T*W$(ok)*dT&|1cR-h`-XE>rzd?=4iL+1D_E3Ak%M62CdSw(?KTH&Iets+c7gbx7=4Vm zR&756nGhVG&p1)JJdn9=Dd;-o&a+$%s71NumRkc_uAc7#U9V>!vS&X9nGk#l;(tPr zI)bsc>g@+IAs7KNdZ&Yo-UQGMsyD^zHCVmNt=?6j@2Xz2)qC9PJ#F=#2d!4U4WN1r z%j+N$-`|1$4VUeF1TtayH^_vg6Lh26rWAN#J`%J=EpkCC)ZaMJ$I8tD#gw}SWc=L- z!Vzh33+N{G_kEB_gZDwdSKB=x(?+C?^lY<0#`Yl4_tf^AAh!&GZdPsr=wBuTAmgPP zWI_-F880h9Yt-TjkV%c}KqfVw1{sT&Km>;{{|a=ATD%4_*OiY!8NCR|==B5Ls(RTV zqc_Fs&9r*wf^Jj2^R3=>piRm>4>F!NfQ;u?LAUGKw?HP$@~uP@=8r(89(97=*EBe8 zls9f41$xD#3&?n$3o@Q7L3gO<#USH(Dad%f3UrU!ejj9P9|jrQ$3Wj#+b2NA_63l! zeHC=K+P)8ZP4#-8!Zr%!vO#w#Itpa;W`J&0ZXw8AEe0}ITLHRLy<7ou^9^LKb_>XO z*$BE#y}V<&e}Ig?|ALIaFF|*yzrLeAe_0^o?`Y5(^)dovN>edtyK>(GeW<7oWISIC zGM+C7-L0Ol0hy4l1{u%yg8rnoFMw`W^d`volW#tLpj^fnN}Zy^K*nMc$XsnYh{8ze zJR5Y6UhUf;Q|eY*y*sSlJ)nD4Z>`mP*XsS*>g@#Gr+Ob*z5P%1O4uNfDPhw) zn+E!^a_3rZ0qAk%YAtsqXq|E`mRke*iE?*a?oE&>Ie!8D!IA48T;#=VFo>#28XN=q zsoI_ZGI2Wx^rfCH2N}Kjpr56P#f2cFcO&QtIzh%__;_+qEyjX=py*qm4XPId884TC z#^`mMK)=wl*Mdx%{sh#awi`jl;w_M|cn9>NTKo}YEK(_af+F)syeI8omEmz21{Nf9aq{RBwNf(aQ&Yq9K?H zy2FG8^nFF_z1FWWJVPuqBql28x z{zqB5Y??8e8LO!)Ur_1va;Ei{oMi%Me-Z{cmT-9S`4$r>Ii7=*u$_<0L|(*SU*}vG zWypEuBF_CFNt+Da86t>ppt@)IcDIWnPB1n95B{sAW)qf0dr8eqn?|A3te;oDtg_~GYx41mUcB>3garP5#s#K9mwpL~Im&nzo z!WGpmm|9gIW53_1{zpK{?{t)<+?zHn$B_E37gvADzp9rh`Kyo;pR17)j7#`4c_ql? zl_0)N?Vjb^)Gp#1!j_ZP)9CG6UP=C%yjltRYI!9i$eg|8)lrg``jfme732RWS(Q+) zlI7LVRFhZ7AtkR)L`q&=#-GV6K_;&RMYIn!+y}0n$t%N2UKzbmUM=EX_{nS5pz~k; z2397wjsi)$lsvaic`{E_ck&>dJdtFxtZ4%$yhrkQm`gTQABwS5%WNl=f5TmQ9-OpC@+UvZsx+kN ze$1bAb|-}@me`06E3wXz@vL&2Ky3g$cWC&2(rfp$0hGqBlSc~zjhz^GK+2+0*^J8i zhU%EF!JF*6l!Q@!63#J-*tpQ!X_Vv1NXd>V$fJ>GASD~mL`s~dy5}zio9q%~vP%%3 z`{rN6?R1fL_g^Jzq!xa)tho=%6ZeueqX(d%zZBEr{eP1)T4TD)nx|4t*8ChPS@SGX zvgSFYWX)4M-t=%D}fgwB-We5Fu#Jo z{PpRYz9!SILrN%GkjEmgM{@tiX+=t0Z*b3F2{xG~ z$Yh$Jh)%o=ClhAFd6~A4O`Wup$+N7xrmnmCROZVv?UQ<#Vcqpe`;;%lE}S*Vn!1hj zIFePrc6*-JkW!yEBc(pQj+FZJ8~6Mwu*n)hCTj$l`eZn%PlhvDBg1j}AAMQ6uMcWT zZ+f*?OKIv1`;;?J1nRqY^i9UJ-e1alNcr?FPhn{fbqJ0x;xAjb&NPCO4=bi|M(Ui` z<%H{;EQFjKs&ir^32`QW$9jfN%F_QgD_z2vU23QFZPIyq-I$EyrSiycBD`<7QD|8G zSK=c->7OMd<#%@Gv|=W61)0nh6w%Ru;r`?5Mf8Cc!)2!! z+lYKVJ-VbO7Okk9U$vyN!l_!aw7j~iA}ZfhkFBV!#MmjWtE;JtRxODhU4Ke+SzT4E zG8(IiF0Nc$Q@0{Izr3otQXa5iyGD7eJm3s2?yq*m{OWRMjck$NQ}&g0QLA3ZvGDWp zw4{7-W!FBs2vfrnaZ!Fjb!Ak1oI*e)K=NsL^|hGmMTgeMSc6!=CJZmm-gN_d*qu{e zw**Zu#&E{`~sNSaeJ@XLJ-0lOjhra=dGo#|y8PqrKFvc=_TA?~7@Dd0k!kia_y98pm)xnm9;Ji_WjBSsbXJq4WsVv$JMTooefu8~%8q zm!j&gd0zNUHS*OvH=p8Z5b$Aw7pHu2inmwEY?o9ni)w&vveZ?^8tSA8mG&heye9do zmQ++O_ezW{D?NzIzWPguSF$ismXoI8yqdkoJ(({r{r$H7I7?n>6`@=uv;QCInt0Eb zS~xiAb!`1jlIO|mOk6QpxRd$oDlT3cb$6Yv?7jSQqn9*($-nbc-Aly0=uAfvn zx6u>@9XpiIGp(piB%0pxx>)qIXjSEsiqYb2q1&#}g?f2EJW%XRJaU6vc`RC8Szb@m zx}=g;y_QDSM1vl1tfTfS|H`v0k^PwohqIVyXc*i6w_7Gi^C_^H$;@m;Cn873VXk zi;9yIqYGVGp;F>hQMI^|4wX2HTe1=^YDb5zdVST!l>#qrI58@Hv3A8KE?$3fvg*Wr z1o{ab3C5ksC@WS|6TP5nfir(WC3z}#I@09Y%NdBd*InVkh+{RP^Z@8fAI#D^x1iKc zS-A|fQ>o)wH!L~~O+I$@<-IK*fpEtYS)6IV-BnprRmp$J5?hkkKzRZEY**#b)0Z(f zBN`bU7~O!4^%f6~rJSzHYFA~iyK=@gd~GZhQhA+p6lPB2wNlX-&5PDu&Cl54TFFv3-MeZl;$dO<>DF)^Q&!A( zCrDE6mhl%XKb*Gl@ny1Hk*g<->yisr#HaxN*d~c;xNY>Bd#R2xk&y~5gTv9$hI)y4 zZDrj_wcK2lqFK(`tHwPT)~e;wR_KKp>eN+LE|qDYKTT_^%jZ=ttf`jCUDaZ|slmeX zdTn2ZC;F^pv@UIm28A(jb>%#{J?ti#)>+~vUJ`9+6Vh1BYmBpKgDt9$8L9N=D+5^Oju2?Cw9qOu@j@(Sh1L5>M{Bk zHxNeAmuSqZsg{L+S}5hnRzIbj*QZJ^SRWmFbj5KI<+VHv9vqz#TEj6z29sX3N#-WP zX}xyG2FY~12Bf~>0;Z3w#?dgIe02TEN9W|}+6^`dX?k@1u%o3PmUgf4bpGMD`}8Z1 zK4{aKz5BO4nB8Z={qH?6clz!B{L_FLR}J~?lXp(o^7OiM9w?tyw(X;jEAD&dj(czY z;H>eFzw!DHp8Rx2jd#4F=CM(|A0Itp?NJ8}{OrM-mObr!_dkV~{_#lfIKB3+-tU(7 zKW@q=y&l|E7d?H!6Lq}~oABnMRezXq*Bh_Bd1vQ<0gF#qciN}k@rzfT9h>~cHwPYl zSZqhrWv5^B`ji*ETVcZ~N7l zOVf&>7 zF(swZFvD0?nipHDt86UEIlWVIJaa3DRa9QkuwckcA$sxGJLOHr44;a+{kb}`gpk{n zy;C$(?0Esh>b&ufS!3*-G9lF{ynW7n=f+iCQr98HmwAzgu<~b^<3X}s8)rsxBrB3} zri`N@0p>c6#srw3aU_9`Tm6osiU6~RquKy7h`3)HU?#xa8(`$|rDp<+Z0>$Dz{pm= z?E&UPn2rFGNs?#5#zQDCZyFk4%3#I@m@8pQ1I${OxdG@ z?a*tF z%uO&01I*Jfmj;+^FslPhS|7Hw1(;)Co(V8hVKxVtYM5;S<|dfk0p>{Q3Rce8TWFNh)i?*Z5@|HM{2(y z`K76EzaMFXy7RN2>iGSnC-{+&^iGjhO+qogMDjTto($EIn(u`tlHf;L!0!C)pWr7m z!OsDzBX@x$6t6wBi55UrFbN)bD(j=%>HxoQQ(tocyv9{K$TT z-YI+cbD-+@{R~L(ldU>($63Pjhf`NKCWhxA)sYt63r}`}AK9+dU3d;w9e;Sfk>F>b z>d2ipN!|Bz)-)xCNA6+vPMJ)2ynG+1e#*E3Hm_FJq2w1;5450CB>AOTrod&=Ei=<) zL{F~EL%s>j@&sm80&`OWb58>EqXg!;1m+Je!zhyQlzF>-2v?R3^WPGz`bfp%m+4xW z8|T6duvYzD9brvOb6jSi)fw$F*_J6zu$t#G2bgP_jbq}Jmw0(8Uz1?9GQgBEJs8i* zwwhV1W~<}*`CbBZPXhCJ0`pt~^GX8qb^`N$0`t!V=8FVoe`&7t=Y{$31ZHRgGbVwV zn!wCYU@l2u)+8{GB`_}~Fq;#YcM=$R{a!F$|4d*y6PN>}Vb-6Q8qowMH-RZmV5TQ9 z=O-|W6POhV%+(3ZO$p4s3Cv>&%+C{;EiTi?mR@xR^KoXL_z5ub;=k>b&bZEvFmLh~XYS)@H(g$w`8mvb zIjKPKFpWd}I&)y6$M~6AnA)L!MqX7|dz_!SN&GM^jfeRG z(HZV%ehRZL*UxN(S)cD`-W96?Kl4wRdzm=KJbk(0{bz}lFEP)vfQ(J6G0u3dkvLjugO_>zpic(HfNeE0m*w~VebhC^mf%F7!y ze3Tr~C^@|y!{iQ^1PL%BsO|w~MB&sBQ;;(^%;d%bOny#I{`Fy|U~QNwl+~5^)$?

        k5Hm9G+%S`WZI~&1BE%HtY!5QIIr)Pqq`qtA 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

        u7}h_@^GH)BKOJHH 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%0Dk}#l7_ZO|j>O*L&gC}O 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⪚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

        vF!MLw`I`j$viiHs`Ky6hc~`+K#N#lF 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�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ℜ? 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∋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 z

        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.%@;H5s0wp>sk&ZA=u33VC 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

        O75_h7X>JGCOi~a?Hqzu@lCg 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

        Tl{K2tQ@P^lW$LsCgpI;xKM=#(Qy?|r1 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�L9?dtURI4;|0mk(8z#NzQSeR)F zO1F+^oT^F=qm= zkF`RhbZezX9&2r?vQ4+{*9bAdkbRLzRB4oM)oO%PBI9VAZnbITv5o)@7Kt&ZD3orM zXymb|;GDMUR=GwVYd6pkkr;p%bE0%>phg~RXkVL0mE*MaSX+Ry#odz{d93GwMhfr0 zHS$>JV?Fg!;SJKrV~qiV=lGRq1pj~_1m2Sxd8}Um;Xio4*2rW10f?L5(yg~N@>oe= za6Xf6_14H^od<+&9lQ%QLf!*$WJ|ZkXaqe`Kv-%9?;4Fz5Ab}0b>^8Dj{E4rO@XSb zzTBtptD*Hj7)Sm|H(q=;n2R1)ueh2O*zD%odDeUHzT;Zlw7l?}?>LMzicidg4?MtS zkg>noU3!J+-t16+) z@o-lLDmqnQY3r2b$CBDc|4{sT*6CMenz~)d<<}wjg?sn{hdKg>zF2dQdeA&TIl(qvp zZ3j962fEnodG%7;3~IgOwO@{~M*m0>`GPZ%a3$$;C2~JiA*QV=+usq`-}M^A-kwgC zZrZbyRe?0Q;Axay1cU4%I9p#?>hf>j+kKu1>|gLlVJJPzNFILk-f z1NZ#vm+n{<*yW6c(_(kLMZa&C9qa77asxwsVEG#tB>!~BvEH3ocdV-1=1>WkqI`kl zBZ(dFgyYeHzWwgRY(rvgZYn}0IJ$h}Jo0FfOCA9_%*xqRnV)E;5rBkyWCqb}!$K zDh$nshnMe2SygrzR--Eq_UpWt{sji^IM54S!lk=9GIzX{?0g>Az2m@n>3cfL2JU#h z7reQ2M@QNR&tLSs(@oL`d!9d_U9@*!`cB8Rln(LT<616-(Mv`%l+UeNS*Nd|5px!j` zp1GnOrI`G%gJzCLEw%55S7mff;-z-U_;Z7<@iLzLU#%}6yzu;6&dM;Z8>MyNf)iDl z9S2Y>Qm1r{+0mtoMwNV*sxZp0Xq7>Q(sc(}i@M{kXs@e^ma^l}c`@}xS6NjoDr{Bi zC>I^BU0)b6U0cA*`L78)wkzobgoK{H;_`l2KKnb(&r49=fr|H6yE&>mdOdJBJB5nb6RP5to z9qEt{MLm+f=MYn5qGwk&m!p9vaAdl=|CJ7MplS`e^VZG5(Q&hGox{H9x447T?u-7> z@#|kuzw9EE@r?EBe0E08n((i!I*yQcuz!lJU%Kiz>lYn4>X)N4i`FmQp_z7-^e^vF z*#PYk*wIbLjKR8!CGK$J>leQf@C7tgUX$^j3p5mea|B(6zh3;Zp>tD#zr6|@i`|{+{ZQZdT{LWt)UJR$F?wM6HBFH?~(d$VMh}`dazZ z7JatQ@b2w5@^@8>zS(V`;eGL{&7sE!sN(itCzj@V|XCupLcea zoAyd{D2h0@>ml2*H@P;(o)6Bgdd%tQIo&V)^wmJrIqhh~jUbkGMhu5FKP!ea4o|Ep zQK@n~v6e?UH{i(|!)e6R;1~`z8A%O^N_BuU!nkp6BIz=Xt=So zrV)iN#y%OwEmkzqQ+iJ*2L9S^o{HfFQK2S;o7ok?*lwOxj}DG3JP6lz^JbhIelSqR zc4H;EIru>Da&uN3=Mr$LP{d3HOB!1r!SN!yqMY&Ilp`;q9DHJwt4pGstHC*d4nlFT z*QuC(v876`THvsdt=l9lwpei3jaciQoC0!w>f{uXbI@@3RE4l?6MF)W1(uxjWo@}* zz#r$^?r^88mJ&C@z7rhQ3&l}q>GE?~H)1&XC2mg9EElK1&jlo>R6*WSH>YT&;W)RO zVoexvF2dhfvj(w?-TNQA`1rrLcRn^Emegz6T|P@I!xEO+MGogP*+mAVccg1<@t$2@ z+qOX5;bBUse*OaN=vGz}vG3Jb&2Gk4aLwmgedjK4+4apn+_^t5s5gw{U?aTRI>IgS z_9hY=<>F|8d$)Ch&)(Fgqg3Ts9_+EsEAmE-y~i5L{$h;1$2!+noSQE;++&?-eH(kM z&#AYp?Yf*3?Xlj5K{LiA*ke5qV;?UhPU9#C^G*CpxOZCZ#b(_UQ;Wa9$k7j)D0fEZ zfpFhJz0Jk|d4aBjY!b33+O-#(-O^-NJx#P1I~((p3()+_bWFH>DtoaViUJrgdJF5N z8q4}Uel&0fP3_#X9lNLeDENPZo7b5j7&e%a45ZiPAG70<5H7vLkA_*9$Up8G#3>4^ zvre4#=pQF=zk!=n-HG%RzY(y=fSWPw17O(UN&H;-mj-^5c0+eGB^f0p&ViIXx?6k_ z?pRK@#ks@YcvrX_YCjj}uDrzA3Biddi}<3;9SaFn_t_e5QVVjJ;Xi0HJ z38HMd&jO}#XTmM|2$L5CvdcIla3a`BV4jL&!Jnf8X% zuw;~k%q^}ZaAf@B#{BY3aKxC6`AiIV%<7HzKJkw`VoTsoN03*1aq2=d5LKSfwt@)z z`42Ap%h^RZ+^=;#zv+06-jKuo!#1o3Rd^VLANQ2gd}yhC`c{&PouGX|;fK`^^c>LBL9y4%Is=q1m|36=pl5<|a)ZfT zWCQ2`&@G^6gFX!k*~l(X?hQN!%DsVokTUKKJO}gw&1m)g8?hWKVYwiua5p*!< zV$h309|OgdG4ef71FcY|y_V9fR?+4bm##i&?#B+->gn z;N`p89A((%l0j!CXmb;#dypo_PtgfX{6Q0Su7u9rm7Kk0Y$dlZ24QtZ%c+qY%Iux> z(K^n$i&0*in7ZpYG~%W7 z{q1IcCYVxe!ZaO6f3T(GgdOeQ=$s*x*nHK)Wr58kvES-%HR~?vba16N6UVCOVyRw% z_hV&DsSbcs_DCh*_qVF&wZ_DRd-;uxqkprJLIw;odBkiEuK_3O(0lFD^>fhIK%W6U42nJ{g1*Lj7IYfuuRt3?v8)wA-L{?sW&PO$`Y7o0puYrt0rW-C z-+*?5?gix%7kH6=puYtj54sPO`&wTDT>$zrXfr7G*hM-(_k-RGip8_Yw?JP7{XXbx zpgd>vI_O)V2SHg^-vo8{S6tMhVcnu({Z9r(y^;M-UjudbSCpX}w%N*P{l^@kvUy^7 zNt2_$f{R2ZQGdk_hovKZQ_R@SE-0p7VudGD)nL=#m`FS z?kS+|{HVp`mR>Um8h3xN6ZtsC)gMrX^{Wc>>K^k0X9c0RSltZD5E2+B`bo-tSKCWu3wvv?q#fjG7&ESZ^{V3=_H67*KE zE<_Ug^C+TU&Jljct{R*G)l5^z6EidSnl1oSEs?b+FcR%XVLj>eE>~FVz|zr!>PU&( zzNlB&1KK3cwm2p85TDG<{YFwoDC5)~d?ef)k!Js7QpVX-W+qP*8J3F5HfI<<6nSRm zf!HvRvNNq@Gv;v+DaQ{c1CDvhF%_2mt$E?463AvF-bB`EaAY6R?2p52eBNZ7ERbh= z*4Q8CplH9|*em&s=J_TGf(M~e>_DqA*rr0PIP)89urPK{x!3iag1Twjv%zqDW}jjk z*5N8VT#4UY&Bt=O^qZqW*)qp~vfsq4GExqD1t?z~$AWGEEdl*H=s3_Vpyk&NsCoeFvg6n$LeV^A#GM=-~;NLjlt3c6LTh*ZGE3J8;oFCSJqA##&K?^|ZKoM7KKImjn0{RWmR?welE|+>@s<$z1L&7PKLY(S zXn)j?2S5jbVw8?#gMI~c6zDq8NuXZ^tpI%p^ajv}LD?s+2X*(eoDZ^2vA3de_p^Th z&pq#=4EtF&!`U(YtUc}GYc!P0|DTvDCzw?6HP7y?&^PO;vRtgUhMAxZ(^&=VoGYV# zNn6Bwh>TskKxf0vv!FGgzX0W2`In&UL3e|4uKa6I&Xu17{W<6!(A}VzAIMz!1yGjF zZ$LR$ei4-U`&-Q)3_IJLXs+-W9JPZuQ5a~#1WnlHT1 zynvezKsjGHmLN}VMEza|J7+yU1J7tSGJk>}xC3^w8A8CeC_^_jpx5-6CwjhMXAJ{M zV3wbb6|7Nm2X23>my8hqs_6rVPcx#bxx%sxJBl%L1&(PYu<38va|I5aMpn%g+Q4#6 z3^?{_IT`Ia>!Ff^Ie1^`AN{t;$w72jjh!5>SK8*R9a^N^7 z9HuZclXI0Awwg+C-ef$;6_=b{#kf>6jOY|WBI=r9U@3&Ju{4}vtcD-4GmI7B=v=aA z7;6km%`hV7SG|y^=vD7@P8OE*VSN#ds>WO7q=~w@N<^%3Gz;_j3C{jB6V%X{=T(m9Xn(@CX&aVh6&|?7iDgfNIxX|0 z?}2iD`F&9KH$MO^2i*$Fca|T5ZUFreDBoFr47vsMDNw$%{1@ocpgTZ+2Z~Sj5xz71 z3^Wa4{T!72%rl_uS9XC;0(}kZJ&pxAH_c@p$ZP_AYF5wsuZAyD*HRu?Gx7V9lgv}NmUQ1%~(LB9g} z7f`mLBcSef`6ck@BCnk7k{Hcj=0sSRikl}=hHmZ#y{^Z0X-|gedjj*BPKJ7FrmXZO z2;A9BT~i^}c}^7K+GK)v0yeLMree4oQ*J+>`ZiG zqRn-0Y}8eA<)A}jH&+Z~G0*70&9iE*GRJO4S=)wXT!ja2xU1ECY@ms-+)oAN_wCa_ zCxV^{%C!iLHIWsdXMx@Wip_7bMte5sYj{2f^i9xnLH`VTK4=R3z5sLps24OF6k}C{ z+k6Irat+}k(1oCbK^KD#0euAY63}mf4hMZ2^ioi)yILba4})F?$~A;+&=j;EAL!Yj ze$X7yTu_etICmMD2AU6gEodPq))_3E!jv`KV$hrMJPP#7pkqMs-fUeC`WMi#pj1L3G5U#9~FTVC51St-XF<(vFASN}B{d5(6wqaVT@WWA4YZiVqbCFNXgCOW> zpz}b_1FZqg1+4`w2dx902Ra|L33LG{^JF3DJD}f1CUUf8`jp|O4cU;HkgeX6;#{+l zCh#QB8U*$r_C^a!+ ziL2m-^x&7%9fJHPD9*^R`eg3MyI-<3b<(6@`LxN{#p{gozg1~Wv$ey1LRA{fS!&nl z1??IWN~cc?U|)8h%Io)F`GsKKo>#AHYq zQTk*GM2;fprTAeegC39Y>Px@-$C_B6N<1Vy&dG>8 z)Wk)Nn{ZdGk%yX~sErf6D>d?1vw;=}?>db<)&d~D&81uX9z^7^ZUU+k-ZG6m`~rmm zmhSj{hsa}b_EjQ0e0LG#;g=K5yT|bGwL|kbKcj@ldcyFycB6PdGQ9sXJgmx#Ei^?K z-a*4VWO!MaMT~>beXJ^tpi4s|kM%K7f7qs5$-NcwSR;Tak#2GIgvev<1R5{CWMFDT zlx}5dm`jm);WD_cjs$_GBUhu!y9FIR~X)vhBwXdt~ITFUczb~+iiFprP`Wi(Baihi5Wj?{TkmV+ zu|C3S9!jKJNtlxoLEni+(05{Z8x3!h;ZetklHF=}yA5xT;f=wkoPfk?rAF!2YK@TN znBSc(G04`)W6c4gM7lLsBj`^7nk2qJFS4L?t3)H{N-?}WhL?iL(qxe+*C^eZr4e+X zVBz%~31g5(9xIroB+{)KjXc)-hW9taOGP81&*_#&BahYJ@Xj$jUjL!o-s}1j3!>cpAg@zX~ycLEw00B&u7}RQ% zZY|KrV_ku14QD>-)_9FP)?a}rk#2pc5iU`~3xndFqLIfs)9}tVyd1;JGrUdb<6T2y za8#po>zGC!YZE?4(Kg-MtdYkW;KeQ&;SJQtV~qsjTS>Z=s}b@FC@j1yHS$>312qe; zS|g9u280R)*`*qJtowmbdB9tzk;nQm5ULD#Khelzy#|CT1K#g7@>qQ?RA0f;t#pk% zRt->txSOw$$GR5?*#O!5G=l6Pbr2A;8hNY>f%sJ}-5R2i$GRK{0fIM9BeWDCcm&>D zjgU4V{0DETMjq=6Ko<$`UX47~W}v~s+oDm=T6U7*?xaWB6KL64>h*@h-lg8~bpG{* zz5ENaR1DGx+a9f#V&$ZLfT{g)KLNtJ~z8!fjs8BU-ROD^xogVqSZfG&)!-PPV>PizAfw=Ht3=sK(u@ zHPy`_+$xZufH%}Uao4e zGpD|3adiW3G*;ny>l&)(Ux-YQyjA&>Aa~Jz!)*)now>Daw-;-9he%95k{@acx6fbT z2;N(TzSrBv)fRmBX8 z#_HM-om;b57+^@Yv?BP++M8)%_}nFrTt@-bhUR-~YL+o%x|pex zdKf*idZN7K1b3v$KdZ)xzHcTc!!}%kYHq6WAjLd!;$UH+0D2bB#zHmicJC; zM5NKDEb&R(&dw2DDlu$|K1vdF?#JX2KaC{FJ9qw^D825wqmTPadNuYl?HcDga31le z$>W~#)sdy~dCC0p|MT4>W@Y+Sm&G>JRb12j7M znkP7>&a)ji$~Q-E3-3c|4avRNrmZBh>#2M{O}gD_{b$9wHa|PxiXc;&`c!KL{$j=r zv=Vv|ik zu0P<m|=`G5};q6*_`-OkZ+tZNPh0x6s_4e(Ox36%;v-gP#i}f&CI#lu1k5l@1 zBWk};w$PM#QtcxtT1j+nLaU@|ABecLkIkT>m-6!E*p}8__#;}}`GT{RCG_POTNyv` z!Ixui*Ry4`r)|KawJMNB58DQGlnp>j%7W^>zU5SLsiTm=fZFoi&F^TehQ6bA`DZva z11cSQ)HozY@&lm_u-X&pbW9lWqm1}b74f58kFk3w8^Ha~SZ(chZ6K|#A2;n{TkiWi zC*E=fS$&$OcpjT7`6sEvoa*v582qR8HN2WbZh`bpN&<;7OJ z>P-_kNbC9>JVxY}k4kDkwJx>-?VM=>wljeNV?O_kw!yeTh_H>g`um;&=X`?%isp{=Y<*=P)-F7TeIw}v^E@8F#nSdmb+B^@5HczM;JT$s& zbHC0A1MG!~0Lu2D?HfGb*;%$}Mkkb}b_OZXa&%*5A27-!*+ghW~ha=if0r1sALLfrY81L;gt9K4G$b(*Swc#KheI9$^)Y- z_urNVwaKdj+o_g!|EjX>(5$AS{-QGE7z}n7hUYycl+HC0J=u{>USZFu0Ztz1JK2C4kZP82Btj7lm&RUv=@Cb z$isWf?r_=r?sGouwI4((K~L+IuriYRjg-(A_uLmEL258jV+#7gej|Gw$9*Sis*Yw# zC#s^smD?PZW~;-^lMXjqj2qYF12d3+&&Nckv7U`dew=80y5sOV)Eeo!bAN`eL=bxq zY;D8bvFzyQ&rAbYS$Ry`9JFl?**1r@%|6>^zio3s+w8V&_SiOiKiQzTjw9E)Bt!&l zs%sOX_L&We_tWe9mDl%om7QQvw8x(45R4vd?Lw7-=xT4Mz$5t z1lUbbPj%&!qG|fcj=+rB z%2#Xggz-zb7{cyU&yG=yV^gL~F#E08AuRv}=3T&wYG*WtG-QpFg|VAMS}%Lx;*hq{ z`LN!85UGSi8UxO-KKYP_8TiPg;|*!3mUhfLqgwP+FhrGg=l)8pjB?~}Lqbl#V3lBNA3)dT{$t=8`8#rip33!@Q#wTZ&5ZJDhgvsnyPG+}rG7IGB2H2i6 zd&!I43XVo>(Fg5D%!dQ^gH(kCEqZ`VbN?AFI(~9#&oAdnrT)~DrBBw{cd@ne1Rq-a zuCC{mNs1|qt74m>xPx{&}qwB6{tNXde*ipG3)poyK zi?CKtNjJ}Scfh#oEZc9l39LHAPN>v+g6849%ND})YJVsE*A)*ff=y4D}2q|yQ*v}W-O~J)r3yBOo+@4?6F%W zp5~PCDW+v^j<(E=Y?+(cGJzZ|(|*mwl8b4Xd+f%@mbu%0=(%OGb!YVYW@@_g z>yvZAgM&M_AkD-tOEeod0Hun4axRypT7~#~qo6VPTZLbiZ2082Lwv=;-?@T1@mKL4 z0Gc7Z5Ak=rARZPD0i{|)fK(Wl0jV%}q_0J6M*-yvngCQJvQ?)vE zk@ycFCHo+dlI7PgB@6XWS{4eOwCn*OrXbZi1f*o&0aCK3p=-HL!W|Bz^94wSTL{!H zvQWsPWv2is*$|MDy#q+et^!iB_W&&xSsq4G;X-|fmfZ%VWT7rX%f1YxWM2bXBC>x3 zQnE*YRJeZ!Qt9oBKDSQXWdO|=gyY@vsSjGsf$D`f5NM$wACRgCQ-D;Qc_@*aVN-d; zS+=mJ@({BX1TV|F$GE%SxZ^R!n?&Lf;||9<On%XH1b z0V^GY89>;rh!|WAbhDuAfK&{42%0a7sTPkvE3^ej#eOT0lBL3xTg2VZfK;yi8c5~Z zn?OqTJs`G+RI4}Eh7|7%pwopn4CqIKt~KZtpr?d)TB?n%1-eyu^MF)ni-1&Uw*V~@ z+vUb~wXxj*beq^dZfw6}YsgpZ^FH5!=5Q+hfMIS05<15nB(Ciq#oF zO11!KB5bp)*+44)s(}WGL>RA{dOt(4FX0;$lB0IATr4NAji62-d_C|6>& z3g`zS`)#0Af}RALC$?__eO`Ef0#dc^eV`(-?bFw8Z>Iruh`atk%H0J(%H43|&IhF0 z+Z8~oMPd?=l9&#pB(4KeF`aKvE70{4?(GJ37<8XOJAhQp-UrkmVY~r!wxB-(akNXd z4g;y0%?mD-yP-hJ-DN=ch&w-!ayJ7=wSX|tB-mzI%Yjr+_>kc}0ipKx@SIEQ7oT4F&oSvGo}=%AoN;UliM`44P$71CUDPVxV)x z-7P@(3gXF5mC7wZD*v7VQWDPtDTx<>){4aMfRx1FfmFVn*$=9)#P)okX+T-lr9kHi z&u>t%L1PV?3N%Y3<^ZYuYX$nU$leO1{QCmXSaJ6dP`RLQ0x5|f0;v{%7)Z5vo|jcE zz7j~a_-Y{4;#+`Ji(dhBrTF)NL0f<-h4%{})dpV$Qf=@(Ak_vx22wFd&$Q851`PvJ zK3`!_C6Mwt45WNs4y1g(A4vJU5om_QV2eT949dpfrdslJAk~t?K=(l+)oKG${WH!N zTlWj^ZXngVw*oyNyzM}$4L%E`+ThDT2nN2q4)ma)F5~W9037 z3%VU>z1XfawhtTI?*gfkeg;UD{%?R(ZoCO}mH5&Pr0PNDnRY!G0<=MV9uA~>`2rv% zJKmsKK+2azK+2a0kg82uXWYC8|s^9J1-$qvepl^t6p0T~k*am^F7I&>c zm4a>uQswq}pz}m_jY0Pr^pHWDfM$v84}g^Hvp}kEIsl~V%U^-!h`Xe-ZFi>{bODf( zC;%!JcUJ)^iP=EP=Nf~;2JHh4>8*rrUS$TY=wrmm)mM z&vnZ3#ua7!C$PAHYS1 z9h|O&X10Y}s^^C+YKM3iwmHUy+Lb&7&y0tio@?>a!sof5j2n6iQ6`iJ+(&8zQM$~L zh&DH<&S;gal`{;cA>l z;q?WtguF@N7M#Zx9{oRsyiyiwNHl^lam}b1!Er6~OY2+PL?P4#VA70*s_VuiNm{8dzrlUt7Al zdc{?(n2l+$IA%6vALGImhiL|qCDq>DMA$_z*Z8AhQQ=)!+_H&q2)oQxRFt8ck@!XR zfF$XHlGb2*2Nw?WNs5U|TBunirbt-E)C|@JPlFYqR_GmZ6w4GxP>dssh4CDt`GI7m zUj+*{QXEr3hrsSi&=H_lfig{{+P(-_6&H~zE+UV05Puc#kVfn_VoV9z=TE?iIDhsv zbPeT;zP5j4UH`ui7_is(;d#Hye(0?;O1}Ex{*PAw_KXki%RX>R|2G3q^vmzPVe5nI z?|XgPgrtHi?iy5o+v^)II&;ALkA88*xuN&@2zj^G9p6x4tms{}jl{t@8q^y7VwXCyRC#OHY5OERn&%4%+_at%Xh#Kb& zNo*tuueGa<-j0MO2sgYRiKuC4&X1H|yecd&r;t@yY?3X_DfYTJMZOX@C%4LQoHzCK z1~)lrAO6x@^-2Y+yEY7+M%)NuOCmSQ@!^S8J<4GnWK)lFYVd^K!@*gGC-yc`H=J$` zjp6LX6Kh!1&0BaXjp1aWt=7hHxG=mlhBF_WwK1H}gR?P)vjv>3F&x}NU~P-x@Q#4( zF`SpdVJxFDPGakW6RWmj{f+7lD(8JxETQD2qxehLG<_u2PJghr1UJL+7tygMl$E2Z5;^^0 zD9K4f5s>ZADRKU!iyQVnj8A*Y4e!VM!}^h&Gy)EocQomOf~_~Uv?&JudL?{J02mFJ zK87=1bI4WjnmEo<%{fJ+f_C2wiFD%+h9_<8ur|bTz8S}PDvm>q63W>A?2F?ZjN?#) zC{3z~Pcrh{i(iz(rTCl_Cub<#Ap4_kioq#~;Xn_mwFQ|RbrS+-`>9UOP2e1e;j9Ix z>I|owN5RQB%gKR;Ms1i<-jFxNzHrT?0@@ZGZU~_d(ZzWuj+2U1Dr4s%w92_S(EH}# zF!cC~EuquR;f8Qx42M$FTbypl8P`i-CjxsW zM#XtKI4fc}o#3pD;oJw#YQvGS(wFC7c5{jkxj6a$0Z5k$UHOxrKg-Q2TIu2x z_?R0`siGWeD~#dz`y$Z}jz6bxpo@c>9bFv1Z-JYWx7y7q~?ef$K0H} z40z)7CogxXo0C5!mXqhpnd9d8YTX<^r{nmKdMGs^&zF0vo0HGajWKSD*10%--!?ZV zcejg!@^W*02izQgx0{nU6!jiV6T{qs5*Md1XO5eb+u-IDtaft>?{{;G*1I{yn_Qft z9BM#v#-}LvfSZ%w?dB8?M5p19%J&r&xjDrXT^zrU7X~|}{CTx*PQeN{r;wjjol?0u zYuz0G7B?qvkBgI6c-U}|{niGg$u?+aFi*yCobzxD#F!D;{h&D3y&<$7Ybm$T zEk#>M)ht-lTEM8TnWh!(>;$d<{ATTZZIKH$p5Pcd~T0Ui5^pS$I1EM<8NJgJU)P6kf zl4CGf-`E_4sjg{h3)Y9{1?$?IYAnN6>y$O&#>Q}ySwn-hV>yk}yoyk5drhdKx@pn) z`ljlZnc6Qkac-#;f$p3hIxaM!m9y~0t&?HPPlDFj zNtpLTR=EkcG%uJLy0M)~Z=xKgJDzKEY|mzf+RCb17lmpkG*+u@nsEF}y^*`otGdV4 z){YOi)P`D|`5;A6uC7^QqEHA><susWX1CP0g+y1g zJi4_umjn@FO*Wah$?v^$-mZ*oEoSvxM zeO^#33bWLo6Wx98!{z77J?}n0L+(ER(Zy<$6~~`Mcc1e;C&nbW`@9>A8r1V$#9Z$0~$3%i%Rc=x=Ju6m9iSC0C_&GXW$ z)H?ULb_cP9@tX*X@50Ro7aiZf>98I)7%PnU(e%R4o8a#FDe!MK-0WpVf#GUdqPy8S z2RjG#(`iaF;_p(YyYmydbIi2p$Nl&Xa=BxnqxJkR-lbmOR9oK$C2TdH`CaO)_e+uH zEG8Z%5BbjK$Nb{Ao7pI!JlD4y%FxYd(8*ZaQieM8r%EJeV>nSCH0g5!aKcvmUn|0E zT*AC2D_yR{aC(_5G2|5(c4CFGCF)%*qMU3Z{4hGY3N{*Eqn9qX-soWck|(Pn$Q)>I zZVt5wXDc}OBf9gO8^Uc+N0pwr7M!<`n@!dDKAE1mPK&gJTIHG7WN=?pb9JqRu@BEW z44*L8M;W;i#5OSO=<{Qmy1EnB_KF#Zpm;IP3#?Nxd^YzPtWjwZ3)ZVCKTF@_oR)gLPs=s&0{TW}vGq<~c8T3BT`#>K9ML!YQ1o{BzHc-6EMUH@e1+)+1 zj<`g)3bg?=7xWR(NuXZ?od)_SDDSuVI%o*=Tc9nV-v;HH`W8@bS^rN^u0nkW^bOGO zf^yaSNl=cv-vjl7ejk+gWc>h?>qc8ad3DJTLAiMxAHX6{g8mqEJ1D-)$laPxfgZ&3 ze}Nta{R!wPD5&kA=Yj43odEh%(CMI0gK|^&PSE+FKLfoP^yi?RpwEDEb@o@FTR?ve zdJyzE&_9Fj0j0{47eEJt{sxqqp7(-|0sS554AA|c&7iM<-VORH=)It?fpQJt4bWeK z{vPxt(1W0Fg1!m*4k*?iBOifwfu4eT^%m%vpl^d-2znUwGEmf!NHOT2LD`@E1@s-% z8?J2iM^_QO(E^QKIssn~e18x8Tzo_BlX(vs6t4!D8Mr!7F?H58!Ku?GO~>|CWz*Yf z6R4<|UV$&*r-~kZ#091lli;$}`7^0d4^vxoC4Dlv(+?eRdFk|7!P2SI0yD8Kp-<*M zaFaBbH%Y|bEpZlHy?|*Bqcf>=+^j$_Fm1y0i2)H`KTv`TR#Z+4PMe^O6a&$Cr+q za1}ndo$M76UPP=R*p9tLMJUiTsU@n8%$#*iX#hQOTIPjtv!rH0bxV+2S<*7MW?*kF zU-BBby`@>)aFKR#b+CcESo*@vI@Bxi2UQ|1vo|EvZl)0YAg4sat!oHZx8?dJzH*Dj z@h+9%%?_`@+nLoZE!8(ULg7Gl1}s^ZRotgn&ML2*CEgzY>WRaM*tGV>YH`Ye@H4xI zf<+*{SC);#Fq)Rhh;Y@Uy$+2vEfdGa@m9u_6xrn!3O0vP2+)6N9Yr*%@Wb$cJ0s%n zp14x@KPfL9J>h!KN4@f2xuW;ZN0z8fv>8e9cTdp2jHGX8Uw-YB*>_C*DE*a=hO2|i z@xB3mBLkT*YHoQ;cz#QDqjwVSCTjH#U0PHyZ0>AKBg0Ety;s$@wa)eB%&l*#X=twv z0cJymY;jJWFFR*$J5n(B{~vcnL}%5X-CYqgFkM`aA{dRIx+{W6-4#LPu{NND`U&q* zjXZKQxpG&9v0b_2mu$uBqmhTVhicwghBw0Satv=bM!ukgu}359Hv*~>-XV=V7QY!( z3y&Wdi98l(VK)e`Oe2r=1`w(@((wn4pr;)m~Tif<~-=<_R8Cp z7aGaE5L@D{ZV5rTwW#xs(al|3-=Gv`^A(CJf1%PBdUo@vhk8h@s1&wD-!R{j5SgeB zVKPSYPxd@iuS9(6sCMc&$7@Kqp`DvzbwEA%*IZj?O@+txHR$A^;=Kj#n%W!Zg<8Df zI&Vum_S9PV3*F#N^RX&vO~FW}`b1bS2)ESV9EP^{260J=B@3{y$ZQBTw2tsDhRSdy z=!!GETtJ^JzE1h%paa*0Qmys)%bh!^vNNi$Ao!-Ds9uRJFSrBnV_QnYk0wr??$Qlp zi~0bn^E-J(nVWfDe{&LqI|7@#-bUM&gU*Tc@Fvv$w~6w6se$~au5XAu)Pk0X`p;26 zqQyz*8Qn-c7@;z4o;^oJaq%aE&C)swwSIFwnuA3!h9Xk-3k6m@Ov#x(Wm#L ze4JumgOl=UG3V-cLunBXWbcN>ZgXfm5zlB+LV|`n&TB&h(jIEBrNUDx{4lC5GP*h# zBWgZ{=GF{5;&lIZ8x?-+l#R3I;CIGW$)D|Qm)Z({2O0e|sC~$Vc%{D?RClB-y`51V z2pRN#f6S?J#u7*S_eeU8N)qJO7NynDsh(*&l#f8`&?+2rrxLgaFe*qGIxC?q!A7eB zdzH9JH4eOs!X&3a+Cnc1Bx_+3)zqOlsfGjUI-y{|8O4E8Z1Ju{y@4s4fsPzTR_=q4 zK3or-yxWkveRe4h=)u3ry(sT}c5w{sj7m`XWTJSA#1 zf&YP2@?>YI+i$3ajPVlLyGtp(F!E^&la)SVQ!FUe^-3+(dS`T?LnC4GjuV|&^-t^V zC^Mtb#P{0KW~`{lU{|a*CF-s;35zQ3NO|Cg?A$*1a8+QP-6uHed|+Lo zra0VPwJ_OTyVjw0?X@E?aAA@imCk6yp%f#kcxz!lrJ&gOk9^#>D6lhm`LXktodOMR z=Ofl{_gPf7GkI0n{T-F}uc}<#0TpA=$^ivQrrtqnEj4}E!9^n}XrbykwJlV5Y*lRJ z=UV6y=_uQ3S77Ks+iHC2j4I_qq>a8e=nYxpaI?}b5x8+`G~DfQv&Z2ks>jW(@&Yp> zt>@uFAWr8}<$799JX7VP$UH&$_&W!`ESdZ%cZ=|>+%*H$;Fl`;7nHlN<5{`;PvZ`Y zPqK+PmCH-oKP=qH6f~7fH2T!kUxBLdOSS&T@J>aySuMOXfMx?hI|k5rL1Td?3YrNt zK~MwGRf6sWDiTD^f2D%H2Q*F)RYa?pQX_>*(LSIMY*VcRKqCcp0r^GZuRwLe!|S)4 zK+3XC2bwIl!+&3M%+@7j@`5BPPXI#pyPmcWwXqtraF;GAdt}?dD1>tgG?cW$66)P^JDgR~}RAmrX z8D@&?9YFO!sn%UU*9z~8#@$0e(}nkAAXTc|&Z$b3+rAcxEVp~9QhfzTl`6M%@)bMF z`U?N#3!*hy>%LXB0}L?$in~gC*X1rN5*w9 zel)085k4aaB59yVwH)Kg23E&(h}1D1B6R|ed81Ci5vdb!%H1wJD|esl1RQ152{^_u zalQ|S4NZn3@@dYQ@81Xi|4S#}m`rC`;S-RQ6+VZ=oPhJeohmCLRaQjm1f1f%foH`# zrct`pZFryZ1ROm)xf5_~B4}r(i97=Q|JD<5h`OYOofS<0C)=2|lRW{)PFNKekt!}C zbplTD4&hnx?4rTUN)9J>RAyij9D5x_-0{ToAfAU`;=gLW8jVQ)P6UfM`RN(p@lwQ`iTxM zz6;?g5(}OWZ+nLcoG$?$Njl_E+GIbQLURm@%B#Tw)7aNsIrLCCimhPJGNMVO9a2Qys)A zppT^Ti#bb(W)k@7_dtU=(dN+cy@Yz&U;S#CB zCBki>+7`EgYUII}1|@+TYBiDx0cIzWvG!TiO~K@K{#iF&X`e;i`_v8l-}un?tA!nN zH#~Rk&;OA2<>LAeR$YF%eHQhsV^>bBtodk!eHQi3MWY^n>}M&zx6h*PpZ&LIEBbmf zhMd=SaQSUx?>_d*pPv|V`I4%yKXm$(8=jgucGSxJ=cZ2l^Gz>3G-pD^gqQw);Itcl zIC0$P-b19t{PWJHav$3eI~bv#?rbXeuW_(@?;GD(puFQ*2pknD;1f$zosIyf=>K8w zOyH}k&b7Y-5#vdepwXhD90e2wF#|&)s9}hp5all&Z zfU~Vut+iEKZ9!?lp$e^St)(qmdP{`1*kYwE)$jkTwf8>z>~o^QQt$V>_bxbj-uoa+H05+;uPes@;SlvZj1_9U!KojnZq(4(^%3q@=?af80rN6qE`WqbRaK@Gn%K~ zNgTzcPZCFi@n{l9!{7c%oX_(#Fo_fAN&0Hz6I^Ad+SxrrUm-4oT6|NJ+9ym<=0KkR zr|j4art4snE;XuDHRsLKSHstH)VSIKHg>-*hGyFc5koCbUCkikDx*^YbXqU)PB)_8VUQyy3(FFnVx=F z16jF=VX6fX&LN^TBu ziu3isDCkdd!INQ5;o2~#Xiu0kG?xsv{*XXtYf3)rFjUVZ@6PH4yL*P*%A9`6Jl?N8 zwfUFpN;1i=4uz9&b;Y-T-=1)FufLi-XlDu}x-7ZROkrlN)F1Q?JiY z+F%sOY^TC3nYBAs+y_4}W5w2)DO#&!1q;++6uO^7=Aou(VJ%C$Y@cAZ5KV7jd6+GZ>Z*A)wY7HB*eBR1^wArG zrd3{1J)Ol*RTN1r@pVdr+j0IwJA)EyL^rKx5>zzL?)^d7Y!NE* zw){j+Ef~S&;|cTedwE6_6dG~u<>_Je^0f1o@4Y9c+sl(li<)H8?B!X)3%cI5bq0cr zCPhm-*~>HaSR>;9F>-zXgEuIC>5AqD^TE{@b=>K=D{LcN>G40oT^1-;8p zoLWf|j@6$NId%j*<95f?cy?O+xI2e`aJc#j-;QJ~EYNsPiU zLmLW`B=T8&8f27&o{K}zBSO!^L(juP&qI0VwP(DwkSZM+RmH@hotkSVC0ClKTqr%w zCwg|DiLqN)TV9I};6Yix-erz; zoS3q^3{;iCK6VDkhp8BLnzxG01t)^@!AamskaxWpLl1p;jC})~3O)f&2Y&+20Dl3_ z1m6cQ0QZ9WAkv3;@Ubp-EJ$6BodI3~mV&dv*Tir-Gxdf}A|YnzNlNFP*&o>3l5 z;6d|ivs~s<@>ltCHKM|PWtq| zujM2+icc0eDy5ukbMZgDoRkOQa=M-TRleK}s+{fxRZjPTqrv+@mD2;@a_~X$1CY8J z>yCeqg38m!z;HPo2Y+A7Np2J$)$P+$%Bk>wMSW5pgv;q^@>lut9H?^o0jP3X3yucY zfhwox!R6o!;Gy{QBKR5bB~W?#G8ir=-7UYb(X&q3fBDdkl3zoML!2jOyho%~h4 z{1Q|-{R&h$Z2?DvzXnxKzX6wnzXd-8e-EmE`7cm;`Uh}-m(!UkqbL6y@UQ02sTBvVfR098)R|C(~j$gt(q4OBVN2BwtLJ@5zO#v4aywPA1^aS6}i zafI9`K6iknDdjZGl#~4Q%%?q$&`3ZVYMY6G1_Hy(*kEgbV|N6nj5Rc#kRvU3+fy!Ui)t>wqix`tb z*(uLiz!wvr?}V`nAnj-D6tFi~0y6U-n+YBbUJBB##;yd}ryF|^WIP(X ziSSMUZv{^TRjvcUaGgGwsXFP2rz;2W9Ml!!kfJMcqj+b5qf>NcxX~5QKg66*TUXMK zIlW@Ddf;h=)dOiok{(Dgq%?_A@2rd$DuJ$1zNn1()M=J=id{gSE3Za?D&u1CXz(;p zWjPYm;<-`ah2ZI68_2sv>;v-tT(CR-@|7m0{4NLgcNvaJDZ>%}SB8{96+fBt$#a$A zEKp^5F{m=E09A&(=b19B1XYG}K$YQKP-VCfR2lL*43gbLG`?P-S>Es4~0;R2i})+LYlJK$YPaL6zZ3P-_lWgGYn6fXeSL zgZsM-b!CS&-urvW|CJ#b;?=`7uY+n!9|l#1kANz}Z-6R8 z#zCeGzXz%ep9SB={%_RL|J$8UMi}$&?amKxlh<=_OMF*1!FRq}T|TOB=4hFEZJF1W z@)n-8#j-*Nwd}(VbLT&_$NYi=#ymdqnDw{pm@)3q6W8`Bw|mT|pmYDX$Gl5(|4Fm{ z|Hdx!{?qfL{j29JWJ_%S>Y9a7Jr8B~?Inf*Ukv-uWFLyLJv|!jUsz=93Wr8dF#^uN z?bXoz=T%{`7b~@2S^Ro96MLOS|8XC59=`(}-Y^Z7ZFF3`h%<?UY<)u z%#u-c+y^?k@KjW`qw{%1MVzPUuq;m(k6PY93QS|Y1D$4<%61mHRK%HmkhRTrs$44K zY=Sz{xah+qx2S9<>QWI$S6*6Pj!Q+HMNs<8c%ZZ1rLvukE){Wd4z{-0POeKuoco~E zo1!@`h32?a#MyO-wT0(W*MZI=m&$gQ zxD;_d)Y`&xDZ+(1)`T&N=`2y%PN_>poKY0G%X6uS^DLCU1Y|pFT?##*z)3v6p)M71 z&VkaZ-fU-*OGTV{P$U`NWiAzQmP3(bcq?2g;@knH5lFUkw@XpdP$U%Ivn~~Jeg;MI z;Qi92KBY4k2vZuS_@G$Eg!apy7cYz2_2dWj{9-+|h%1dg?B6cY_>4a69q7%j;ym_} zrtBl=-J#uuA1icJSA^c{N^qOHBJ^-qguc)Pp&eBpm$V&YK2{?7aT07i<$frl(oVKQ_r_=JYJEPlZN@IFMwadD z*}enGczK_7Z?P+T@1V``Ztri}ygkS`XYc!)*S*y@dmV{h_jWgY8uU`U*ZV)|_k2() z^8V({Z@CgJdk6g`etzcrKUw!q-|UzAt;2~NY<@??*{*k+aX({kKlx`Y-!_(+gw@eE z+gOsmz45#otiwL>mc8+b*9RT@_9iBH7SFlXjfI4#-x7?$uC|PhKYj4whaC^|=Mt69 zE56yM{QrgWYd_}y)h7SR1G0zBJrnjSuQx;X%T@X_HgB~Vqik8%Z&O^wzBit^+%2Z0 zY)Q69xV(@2%vou&1(#&YxG!YBziHj}zS$f5ZH|}kYU|Z8lj*RIJpOpuvQPP8^k+Zj z$1R_dK6=_{vOB1Yn_W%x^>9~Pw~n#OBPWnYzVblqQ+~a%pY^9TlwW0i)@@a#8niK< zfsUX(rfyRw-;GaltJgZJ-N)CxewjB=p`~r65|S-$B@9+lWzPA^oWl~C^Z!+Tbg4b- zm!alEZCHnhse5U=-uBuqSthc9My!*z$mCb2`7x08z0c;Y?B`lg-iNamw%W$BZN`=b zWqoM!-+5&K zG-Z2yzcUPF1YE6L*Kw?E+x7(8wmqqBn`Y()3+_+t3skR-{`U6ED_)+{x~}iKjsx1t$y3|29u%Lk+vMqP(~nXjuc<`J zclUe@^_bDSJ@ZbuZ3(;d@=?=(fT)0FV`p6zFg!ct$nR$uDuk@>yp$V*%-;syj3`r5p8~ZIO-&sYaiGYW)AI z59>N8^{_%5oBdKqAsEhCDT$WBRoK;rfX7}@%41I*e2+aHz~h8nKnH?~Vngt>ArQj;(}zFo z=l0=7(?0C6wJ*^=Bp8AA!L+?(URIF=}Dm77_W9CGth2$W5iF?e*DMv#k3wlbx}QjDOo>gIRZt$S7V}N z{RkTWAfilKtuhhSCBPP3ZP;ZimvuFGo5;onWZ@pfqXR!+8j5prQCIXQr8Z zINmn+SBqZB>wdtBd%SJ%@11krwyj59enj1$fB*8mxtD7e%b5S%_H=E{xY!HEV3)S1 z2R39dZ_Hw>sBy~%#F1lfa!EjTGDgNw%xapa1V<&Ssk#Jb2v3@zOmIf=q|8Wg&gF?& z&H(2^o>ck?nHrunO=~&9%^}Qd6K8D?kv82i_1XIX*DP}J04K_lCYdkt)6#o!x*N_7 z{M8hDg7Z~4r394V+z)3V0VOz(!HF?Jp5QzKM~B=dI4{T_CcP7!AH$iF9pq@9Wj3?5 z37NO#5A(8?qn#AP;7F5AN_Cy+P#8wT#W7cfO2nLy=5vONGoPQ&86l45Mtx4PI8OvQ zCE_SfzKpr3bZ-);fTv^K_}Gg|3*l(SF5#*O4ogT}&XB++9Wssb%I9yg(G1If%Qb1q zTV5*kXm%ZVRDt7BZ0B-q+0ErrT=nEq!+dJEPmS=YVxKB;PAw=dD2gV`$L-}BF|4@6 zN^39Ifo3n)xzrD%2V`5iy4wRlDt=o~ z(x5SNfu=)ts@kRc%n&f??pyjT)olrKpH&Njk@lLsT!CBM#eV>~I<*V|Q>uHO0_r3y z>G5IYN0Q<533>L3_I$hm!pBfwHPVxk`?$r~tm&<5TqsOtUQvX7Tw|db6 zm99mgx|Hi&{zTh0JLiFl;Z$%uI1Ri2M6u1iG3SH#@;noK8pJO4B1rcW`x$r<_!c+| z`~yhm8run0fNBzFgIR=M2`XRbfZ?)wjee&TS;a%9KhMFkx(IiLp}l!>BN?4{Fe0g} z+-n2f!YY-Aspj7*EZs(w*xsh%(+x@Z&mZWh8AugS4=nJi5JrcrNk6(Y6zl3sAez$@ur)xmz%L-8X@&!;Mp_SlmU>o=pcrCaYq`io}0bU2P zC&An^v=#gk&u@dP!0q4-U_Zjduh>c8&EOf}YH$(AM}e3o#BK$(+TbhTS3trv_YJK9 zzsvL8;49!g;O{|n*sRgKAB>Q`2SA+x@*t=~N*@AsztGn}-7EBU@E-7C@ILSx;70Iq zP&)Tb@Ll4oV@Uf_T~%<_Oqx;7#UvA_Rg5p2R5q3CW5zLZ&*|0P#}mM^V$$ex?xXn+ zTzvC?>)X6+{`c3nwcr(}0hr}xtiI^AfCh9*%_3F_?E4ilU0Dz3t$3?$Y^-mnXl6Bm zUE+4u+1yLhlLtk}-d*EfAtSB(*b7|#t%Y;D34yxdP=)s6-7J~2`n_=1ef_3Mvp~rZabmj z0UDz>4gao1hqM=-Ho55OAN8L0!i(dnVt*x`7gHzyH?F_?x39IC+t6683wr9R>*g+8 zT+uXS{=c7%o}X88$^-Y=;^ikeB0#SX91g%haqhn#BR?Xabfq8KWyX+Mpw{D^#`t3m zw1y$}P8(77P8(4Xvue(+RnlH#Q4y_Lc2|t)W!uV4M00x^Uv71&Z0B~Dis(d9eAREF zOGTV5P;!xN&hilzar*F%d6MBpT`J<74t28Ojdm$k>p`7hc-OmB#CZrx{d>0ah)dxg z9lu^}Sc~RTtR{rAtEEnJsfaTb%C43=-=#=7l*XOe&gCu@aoV7I8D6_fu__HpBi?N1 zA(x6c>!1!ZydS#Mr?aXmIN*m)3@C|9l%H~0X;S&igjQU&?#ydln&Y&Le427~R;+FA z-+H>l4!DZ1eOdMnf%#%=*Pqt)TraSP6Fz5Twdrfso{sf!b)>6no!Po4qq+DQt3?bd0bSz75+wtL6txym5QXG`zUeZt~Pqn3K@;xzt51a?YlrzeH$z3nr0 z1y0r9nTU<9TseTL)E#~KiWF?v^xqh~+ zSliMQ*D4C8fZJxgzN6cYb*)Rc?NeEAbp&E(P?>MhoibZw5ii@)F%3_5aCb@$#hm4pNLD}#`0&pvGXH889$5sI2)=cD zXg*9y0;E!pT3e6WNQP#V6n@$;InYn$g-TCEA&Pn|9q8`ezq>% z?X(nYu&!%!0+obFr%U7;WL$YxTlpK@L9(Nf&+cg>vtAc>5IZz;y-{;}Z_O*v8@;^X zR+Qadp=R#ruX{A8c(_`Nt6k9c9+`OJf)76X7=2bVeFDE8=H*BYc@Hz&J;+d}@OJ>e zJagAV)KGKzYh5%zSr;0%4d&OwoUCtM@FHXU%+pZ^risbZ=6f@#k*8}y-P!y%ed;|Z zMm&U;K^|&JZ=SY*x}g<8sk7*zt%w}1Es9NtZu~T*6*VrJpltlEg0e2Iff{05v_aYU zt%Fjh(!cOnP+?;s!zCiZB@3{x6`#8^dUm(vs z|L?tOR_}P~%aexwbnePuoPO8nL!bNdru&P%V*Ss3iPVRM{$4N!KiQYaQLZ01t?5&l z@GjFOg)~)|e*84BPjJTaq&6|ZIgh7k66X@0`X_PJq76*qe4Z!uW(j|;KybZwUoWQwtsEIM&*UG2dXMGE#xyP*Mmz$yQY98k& zhOa*!=dBcuCOWKYlG(B~qVxj(<^{>y8p&gV`-(lSQ?%4<77XDGUwqQGiVet^*qwxX`)<=z+C0ob(NP^bC{_;(>3X2 zQXVE$*IYW^p1;b|IL=_Shn7liVXcXR_?~kPa2>;;tX$8b@TYQa;}x6>YZ;Bz%`J`f zWsQvujZ-+nts;B{dqtXwa7~Q6bKjiSSzNR)UwDg(3-gCXW%Px&xB0@`^J@DkUMi68 z3-9YFQIbjXh4)FukC|xp(;Dqz_!8!nc5+(h&H+Zm|6}ArUwCiEcFGC9h#}H_;cdaM zZOC0X(aJuC3Y#yyp;J9Iz&w@DY9;(+5aW`RDYM<~Vwz#{M-A9mWJajX#;B^4=H`wG zHm%}o=)M%02VFTen(6!-NI>61=68I`lj+Pqbs8tlcAU@glj+Pqy>eVX+i~8hG-93l zr$K!F98PTHC(~Jadt-4SGMCS_at8qE(pv=oUSxjm%5~ zOk!g?^KTp$OOaVO&&qY?pW^pdWKOvBqy1C-@{yTk-i__Dk#y;uj5pUK^J`bGv+~f4 z`@6`LTxP@d%Qw(z$Yv97cvrbHR#NqY6$W#fn!IPB@*!+uPHxIdgtZ7wULKN+po5=q zCBn6MHF1BeM5t_OZuk$JJo{bZm&;FsFPVN6NDok*>AU=1;ul_tAUBfv4!;vM=U|LE zEkv=TTVUjNXs*0XV*($y`{J0pk74Y2J`taEWLc*f?aqOf!s)@1ss?*pY4gA@;8lXJ(LNZ z)69qaBWU-$elX!R%gJ;VSGJX8AdhjVBv3 zEl$bq^<=V}=7u7&k!278c2xsDNp@9$sUwrCnvCq)02|pt!+a#jte#h3nA>5RY^dfN zQe|VaiP3JDHb#YJUBebn2yM3k+@9>04dA{Y^U6va!HLKB@`t}JKT8@Fo$Vx(@UVLqPBEHc@DYk;ZcAcdyr_rkpbg`87!>715%1X0rK zT(^NO>7_3(CA}^~XJz!PbsT?zp3>d0%pX%9pwz95bNTr}4 zIUpyu#%jPrz-vHO4#hTrhl1~bhk>UM51nAA{!J&?O$UzvIW5baV7CT5if0YUj{$Xt zLtpT>U=(~GJRZ!UPO;J>rqw=7TgFO2#vHNpKvsUl=7A@J%fLaPCIaaLV-JJGA+{DA z0=@zAiWU1K$SRiD0i;!@u^j~#f`woasGCTJf)(H}P%k0F!RtVlNXPC5nJSIxg4ff) zSHY3se}Sw(iTx8i6FiJ+H3l3AmVw0}eQB&3JR58SCxUl_<=`{m6mSQ49@vwC0C^TW z5u5>@37!wm1TO>|!HYnBo%<}P%TXCS#l8dTM6$QROTeCV5VOG(!AkHXkmaN?eS50{ z>%mLGHQ;=3Jy-*70WSj&p~GJQ7J{4$5IYBK0GEIZ!8M>xGSkTxjo>?A6L?4#t0BP? zz!vZV@CtAVxEQ<{{2cfrkY(nvcfe&}H#&f;z@cCayZ~GdE(CdPjokybfGO!K22aJQyfY*Vqg6-hz;Pv49;3_bW`f>v}9J~=M19|a{ zO$ToV=Yp%jCh!(eeZrT)a6j|R!JH_Cu65SW%s@}V{fykG-aQPSl(wI-Cl1TsG-f~d zGitqq{mgWp1O1GK3bS2SZ9~IC+xV$hsS0q_(y7B62hZ=3)K{pRInE9{I_sg-kWO&@ znpaa_S(^yLYhS&NOKaA=#&n(;o~U|$_FL0kK8yO~5nb!GrSYG#~ zerkR~#D*+pElhQp>K;w!rJ&Vcn5^MO6x*##Nfxu+%EBPi>$f&}ZiD^SdYHj}OWmLe z!0)$axg3)*UJ9=9oekrQi#;s;Q3h>um=ah(j9FR15(2tymiN5~pJX-H%ylhPbm|RF zICV8mO$;WK;*BoP@8DE?>W^#$hns;HZ?wcpcmtDvONQ!9l8z%OyC^s9tGoc@;ms!^?b&I;*<&6j%!K z72b>~p9g32`~r9{xE}l(_(Sk<@JHaw;0BQXPiGIs=trEFLE1Zg_KMNYI6nrpD(O}5 zKJYd058zM01E{}01@-Ccb#Ny5b1(+}0@Nq0H^8UBUxLqoTfj}=ufe~AzX3l(8$y2> z)0O30!O7rT;CbLSP?wee7q|>0?AR^fc2FOvc7Wdl{{(Ia{|x4kH-7>9gMS6j2X}*? z1K$I6k@(-h_2B#9cJLqI;q*2C1V@2;!E?cXffs=vfHmNU;3AMgNbGxHH}Iz*p9EuX zfIYxn;DO))^gWzz8aoC&2-LOPj00j-Ag8LvR)U9s>a+Ne82bsxja9L~fxSTWSzI_D zD+Lb&t3Xcti`@Wz27CnU4Xy`|1m6WY%`tWmeNZ3pSnwFI9~cE^fUE+IEe08f#2yAu z1b+>l4ECfCIt3gBo(i4^=7SAj0eCG~2&(TY0@Zg72e*SG!1uvoum^n*{#kAH|WJif(yWl!CJ5utOGv} z)`QoA4d7S6h2Yn~%R%+0tlCZKqu)p0DDO`D=yy=pk)azl_>?IP1@l6-R=3XH{uL6dD5&5IY>_qq!h)m!7Q z5jQX3G@J6Na!!+VxF^9_lBVa`SQBoK(ISJP1Gj1s)E501g2^1Q|!``%`Qlm;p9|-M~A+?%>zKOprFx z=>fhCa`Rw}Ho!RuJPM3}=!BC4E&>k*H-bIE*TGz{AMM;>;6m_lumwBkz-`>j(Yk-hOcg1VG$y318UWDrIo|k9Lm*FA>&*~IoxZ26_3l{WV0apl*EvD#2yEK4n70^0#sdl17v*R{1T*}cHRW( zU$vVdHVphVI0gI-NIUKP7F6AP3tS4m4PFgy1Eq(*2gABe8lC>coho8XKc4Bv&GWn9 z9)86k-Ig24tOHL@r`vp_YVvhjzNaxve}?r~8miqg0S!Hai8gDJG&K46_~dH@yzMoM z>nd$C?p;e@nsE)w3F5Eit^lbX&KJN*Ao(7f0k(m90lOBw5sZV+g4coS=h{K(&X>S!a21#f-T)o}-Uyxr z-UKpVAw7;U|KNNDoDJRvE&;y^@}92s$g#V?JHY$FJ3+?Q&RyU}a1Ho-@NST?sB;gP zMf&aq)vn(M4g&878ACY_fRn%n!Rg>bAbq;?b?_SS8z5mgkAmL^9|xr$-vp&c*U*M* z%DSx&55{OeRP|h@0rOygF_}Hja#seq6x2c^8|K#W4gA1f*V7eucP8@f^8B)?XHUPd z;_OLhO=caKwaEuy!R2t)h1Dl1yA5C*{_yyvY;pj{0 zgtMp9U|CK#!zn*|+BAI6>2JeQZ@^2SdsE1N_Y zVkNt|+%Xepl$qqpxsp42;*<%aE5=S3J!w+eL~Md#PL#(L(Suf@6CX))K#0ECA?CkLqrjzZ-RyH)(Qc(%IGr_rb%E#-BpL~IyJa+Pw z3r*H~tg|OgE1No<{=!OS5UP>U9-RKv=xO?hq76E#YTl+GJx6)AdvbL3Uh>8uJ*zXi zqOzj4rpa#TF`ku89L=nCR<8pnMLzJ)t*rHqwEiv4(zMZ2r;fhR2$UM%=hZe;>IiK4 zr=HB)Af!!6Llrp+NV|NDV>1q5L1kd?kRIgDY!&i6@y^xuJ*loWo+yEzu9j}0YNH4XcDugre-(YrLb zeqN2X;QY_tDP%t6{(rGi=v~xH<7w>@8b(E313jLf-6bT-?h+Ce(Ja1MAfD}1yHvy+ zv0~*k*JS0?n@%vksJ|4IZBE4&718^WSx%kp9O6=(u1q6j<#xLi6A8SNSYD<}MV#I~ zPkV^0e+#qB?V7~-S(oC(WtUcd3Z8nc0K04ew_z6>;A3dB690nq{zZ z@T;3o6uT5>L(_`RGQMOn{1%n% zE){WR zLd`S0&$?8^`2o~y!+XJ{B2G6x1d^GA(Zi)8&J|GVE3=)?xm3hi1*I`_wsW&fkq#)b z5Z>c16>&B|ku~sMcBzQ-J18;)-XB~l;(P!_Lg95g%2E;MXeg=)yuL2=>FoH@{z7kI zMSw0KDo)_JP|t}MZU1E?z)N}gcG6EEIZhP6CvQ@`P~SDl_(}7}1*Lff1tqjWiRyTi zRv94g-xpzhp6s&EkL-)^?fWA9(7p)Yx-Y`_?Thfu z`y#vwVSi5`ilx~*cZXy9itRj1X>Z>JoY%g3CouIgCvNJ6zmYF)t>f0(wT!pRA5VRA zakN^hGBs}e_uS^dZYN{}uBam$Ris~&nG^og%lB=KL7oZ?z0`>I%& zdV_T^c8bO7r>$%8lVYdZ5RP5kv~X$b>17#iO${Y9O`Xo_Om@QxeVJ8rv!iFcU9|Sb z8X~@Wiyq&}C|NE3((y`?D3bIB;AMx`h$OWdIRv;u%}6-?JHDbEkT>L?yzz5jpVH_R zTD!Ccbuk6f?iGk(##gJ*ykhPXUm+Qyqe3H>jb(DqsnFUVx7I2g&+UIuMbtiov&c)^ zY9(W8yN!3d7jMJ-gw^69d6=ALKW+OzC)JLG)!9qi{;zCnKGmF5Q~l}X1&}(Qi+mpJx%=VCtqx0&$3^>^Vy{F z_}voZj+ywu%nCSd<-6jCXNj1xd*0m|TF>L0fNKxdtMbb7f5goov~9-LyNz(!w)nwD zm#XEBHus(5i0cEfjnbzm@cOOQ-ix5{(LK~E*jyp(O z`|5F!_5cl&U#;sY{-@!!KBvEg($)8rX2cbW(1s$aV+5fvtZ$cZUe`zvuk+~k_imR7nIXk`{ zHy&($+mChIiYJjs3fM$K7h~8L88aRkX-0QTFVOfx(V^POXMcRrwqgyBCNA-IkslW? zg_?+0TyNGkB{t%2N^;uGXvq_#1Zr{DW#K6Z2ZzL4%(D$=^(Gz|0K5V)GTsPqq((fc zOc~c0>$tUcE!|P08$~m&QLN~V<-eD+e&26igb6`DF_=<7KOV;2206! zmdU=Fp|6sKwLvL!;K`^w(**sy!(hG{Zp^&1_F{OPj4!dU4L|>g>REI8q%G z+BznxW7mPik}_6I$mXEeIURlY-rPxr%5kfcTjZ$WM11J7@Ir*Wv01wc9yNGHQE2x{ z+Au$%?kOstp6)3vAuaju*1a3iJy-MGs;#!qSHD1G7^*Spn=)@GAx{$3i`PNpYe;MG zoTHwS>u63#IjZCp`2Mc`Hi@3E7bueLtLH1h=^GU<9$v#xg($7jY&lHdFnBIJRh=cz z+gD7G!?E)4S|b!Nl85*2KN6 zN!Pl0<)0WFF{XHy;9H;5U$s?94K$5YFmg0bYUljMsXeJh&g|-Z=}P=iTP3t@m8gz! zWR*M1k!W_V!6x3WzagE=YF{C)AD0a)?&DEIgAFTg_o>HSO4AXd&FDfze6o^canBd)0LxVmE!^{MqalcJV+ucERBA2Hl)A?)LR&2en)4aCH+6#c! zHu*&!KMka-(z&5=b$ilClkvin0q>}iioO>(2{+#QZv&mY#hLFZeUjeac=38`314io z`YucNwqoZogSv-a>>_9tlTa1KPJ?xPk?*~{ei`p_@Gi}$C9QWmUGId}J5e3Q#=9(M zY0iQfSs%8UnJZmhM_FyhK5izL+RWRmdFewe2eEDP4Kd;=GTyGgZDz8SlFaD2LJNV- z>tS z6RD*pyq3XFM+st(oosez7}CTux8pX~-LidjH^&R_0+YU}$>HrLO|2an3pPiVKd-c+ zwtHYvu~KYotn9SxcFDG`@7F5iUo*n}FtVKp>mzR`b9kox&qr_WmYn&XKF^Tz?6+dmEOxowR{y4M zKq&w0mz<8i_#d2ocmr#uF1pXiZ8M$L2Ge}YL81p?sAYN+Gx|}t!UuW#MQmiRp6zU> zL)PmaBrDp;iZHSwMxK}1vz`67tX#;7PoT>+K5_A^`OXo~TWNa-`_Vn4`Cv$zf< z+?Z$?PfhpYMPSf*S#4$@Ay17*gC^v(nfC#A?$n)NaNiN!BB1+GU21(!f1Q?L-mv&Y zyJ8{ps$)$pGk-4Y=6Brw=&R#1X7Hz8KBMIrxBWHJp)cz@KG*u3BAn6Ezdh*#R2t#j z9p!P;kB&4Yv9!NCH~bMj%#Nc!B5dAiZ2KAd?B@FCr>f%|-DYS^yv?Y~C4 zv9gST*S?%zyIspjw#%sw>1{#@-D}U&-LlF_w!24W^=$tt;@-`++`{VLY>WNQkrOhP zE@p*8d`zxxfX!Q}TUAG0ozZ-_6pk@Jt6&)L<7m_k-CE9(dX(=TG$CtoFF7jPJ!nkU zf{h=xm2caT<1^Zr@-E+I?(5|O_N~j1+tXIIMW@nkZ7bgrpRt7loI9E*dOP@Ex~K0l zf8|bBRflxtuWfO?gU~JjW;oAPdx7`f2(AcsO$+g|-+kOCb zxv|w!SL-vI`dps}K{Xm%ZJxHaXZf}lKs6cLD&Mxrw_O3%Y;14vZP)m=Pe8R8+wc3f zKlW{PUgZ_Wc872K58qZBu&*?>y`gNZPK2_#Q3AEd*p~UW(|y}{P>YRiqi?(1x4jAK zbH?^A-}X`8b}iKBjqNMG?XP@W9Z7Nywt3D!p_UlAV;R>^HM}uU=NU@dy~_=y!$~Z) z1Zt^qaUYa*u@TC;*y_ve@u}P%p4+}q%Z%GWP~(ixV}09mp{_EvGkx0z-}YNjlZ=aJ zp<+gEqc6ABm-~k=*PR*kwx-#k?X~xJ?q~vDC=K2 zlugG>s4p71t9-e8eYx-XazBJxY2^Os%k`qMvi_X}W&JCHYBO@5g|gvZ<;#89m(y1D zYmMBCP*(1bP}aW#Xez9KJ)z=8ZUmH-`z(}|(}wlQ*mA!q)MVcot8buPR-XB(8w zjSr!$+k+1A+#UjTi*b7xly!S1)H%lO#ZVIs)c|GPE{3wgT3~xTvSB#5hsM`z`gR*XKg|coRfYRu&hx3GQyAH~>wm*eZ zZ`{NAt#A7$-}VD28}1>jioe6i6+l^yodIPvwhqdMb|uuEM(!?O?gd}&SH9fuq3$wr z2lw*)D}b{8T>)iNc{7yF$$Ne337=Z$Q$K~8ZT$N+l+EY2q1G7QAE0bL_c_#y=_ycm z8`}~nn`;xGY`$Csb&s)~=i9dUwkx3SHMZY?nhKTYY=%0|P#sVOmuS8kCir>dRf~Q&&Je zWaRFIvax?2%EsyysIM8@-M;MyP+vE^6Il3SUF1VOY`m# zl#SI6U#{m7Ubx3YO-C-zDTT6SKG~-(@u@nWx(aHx@wpAkmihHi-!QzJpw2h`{QycE zO!AyxK}|8#J5V-^A2ZB-)VTNwlr8;TP&OS$_V(g89BP(vI~~fpo$FJLKDFGZZi1R^ ze7*z9#_t}e#|-a5C>y^wp=_)=psddaAL)hL4{EXrw;0Oy2GgM)H@;Lu+1{WD>YIkQ z28Qud>wm0}TlnrgYPyN)V-u9`#K-rcs<0!9RI11`@x2jzz0Q&mtKjNC$B?rz`qyFRrR zYNL^R#h3d4%EqeqF&=d+)Qd*$WGEYMxo>-^Pt`%aWaJk6ayLS~Y{Gvh`l*rooiFzns0-lbIUhn@ zVyL5{o^}p^dInw(XEfAoL!AqCh@qxHeb-Pkpsb!QfwFyG%W-xyU7m9b)NCVnCzN%2 zFVy!8?_sD>hI$g}OelH-sAmoD*HAX)A3!~4c#-2hUOv?K4R4gsD~I}l;a%wSE{C!$ z(sHP?jP0FJHoZ?leaG-#gPLuqUqT&hsNX<6WvJgl*;H=s=gUF4a!^kjx&MN)Df%;% zO_9#8u=#Q{)LbJs0LsSd44*f_=T-W=1wQW@pLe~_d(h{7)91b9^IrFPfAo3p`@CKQ zyto_D0kjdW)V=L-Cet7Gfh)-FfUpE~EkT|mA8t5^h zi+JTmGQ6fZ*}42NW^{$!*3O*`>}2M+*_!(1c@+%{n`;{Co6LbUo@6pcuRavpoL&@x zYbqvNN7I@c8adgXHMjPt(|k_=R2=lIczEf#h?he>&jJ;>JvWm2hlXEij|RW=)*{69#%iRP>V_IzgdQsQ*DLB;6CODF1d108hI7pBaa2q%u7 z%C}7O*Gp@#tT^Vwl+_AQ>Cq7tVE-h8Je-0qIScy8-U8S&E0DSoN-G20aPI!g~?CYGt(4>i5Jx2;?^^J#+c zXuOshS#AtP+EkxZrt&w{ zsOorSI$mWpre)qdZf?-Akjl(xf;X1ypc4ffE^I|PT-XfKk_%fQ>B8#cFKzAgbea?y6Rw>Pzzx?&BI<+<`BTwwA)Twp1+GktCJ(iW_ZPmt|;{uZeCKj{|3SZG@eqHHmU zikN#OEpI2!mS<~Tds!|OiW;PK%E=cJVzI})gE3IIRDshMLlHL8d{6tsHR>MhP6>5R za-$k`DnDteH5qObX&Ok+JI~T$un0b`fmCCts*uzes;s>8qP+T%D1r%r&=f}*#Zv%bvkJE*i?@7k9^+d>m%3r$qS93N+SI!(v&yh7W@ z`lQO3zR3RF`gFo)@YkPnKtkMq@%6xs*|1R_lx1;!`rGp63k=(+x4o_UcMj zJH%k>!5w0#GcDzpeuyy{8`U|lT?^N_A7giFsLsiabXN1dCwdN@41a|235sx^#usS^ zj-8DqRC#2)u>_>*VQ@I1^vGoLQ$fmbV17(#ybF{v+zTqbe5W#nuU5>trsKGdeKF<){Ej~FFJEuk}Q^-Q1_`*w>G4L{EzVCW8J!b z6r}N^%Whpig8J5(+k%hOD4XEU-MRs#S1IH8){qp+2Q| zK+7BMQzLvzqf~2K;!_3r9PBwxX{e8K zI{BR1>N<0aV_3GnA*ySGxC>oa>2Qi+Ge?itRyJ1`3~64}EdSh#loD5=!)vN6OnRPj z_65Tss=|rvT1O1E+222qjTq1Hbze-KwZallG=Mu#JjzCUp?^pJ{`44 z(#@5}_+gJ#<~{3VT}et*Jh>|eN7R(18c$$;K$gS6I~Q-UFLEXT66m>Cr`EY6>&D!m zX_D{Iump{=Lnb*(d71wRxj@#PB)M608f&WOMWacjqWOSiyCi2$lCT#GFD6xkWgl>m zMnL{!rc9kYcGBqbvVq43eLUVIHpM>SqY;ojuA0?lB!@R?#>9z(ja|WD>8r0kj@-zE z%HJ*ZD+fm@Pl^N$5Ube^NCu4kh$i_QtFZ8Jzp7!i@7l@5&tV1YO40NZ7KZdwxuAcZ3(wED&vX)Rs846NTP=O zbuT^P)l=Wr=%QN&N<%a{plLvp(wSTry&6r@U;cojKh2wq~8OTR_j+h@DJ>J~zuI`0P>QBQ-RCmC*-OX{c>Z$ONrI85z z$?&8yAJD`#s#X=f^b?l^Px|P^!Rz{FRyNjiV~ac=&~#colQ}D6Neu~Ef;W=0)f5-IeQa#akTa4LrGtNSx#hJb9o9JUvOOm-_4qoD@Cd40PnA z=#r@CXZB8(Y>;-xV3%K4KJ-+@#fS!UVC}d?JWg=`cl8Qa@P+yrg>ZI zvNOLpb3?;>Ck(l$*t0Kqar^QQ9{k$158ip`giD^AcIN1A&W@KW*4}w+!~CX8|N0A- z^dy_oxeav-htyPE(2|*H88d882tW;KR8wtP`ZCcy<7U@BXVLDz zx+EYw86#t;e*D!3ssu+L@cJZi=JKR(9SNB>o=THAPw}K|O2};GNiPHm&YyT%l*IWb zPfLplJgq~3-?0QP!Jmhk+jH?Q7`3SOy7>-RMe*Isv4`QPHIlK>f7_Q4XGo$0 zF_&a?&)9T?m9D;AYwJDpSJ#y+yE_$nNv@vPltooYaCE)d8#HT4oH|`0YdQU=jV~%H z$uF6JZUi|6g|kAOVa3fM&hUbjVNTJlVb0J;!kpo2!<-SD!kpqIfb*soT4RR&d^)KoMBIgIm5MIEh(%Kd&8XKJ~XpQG9^<&oZ|ddVNSuO zFsJbKFsJB^FlT5c&2=!W;$d28n8X=AG0YjUFw7}#4s%Ktg*YYoOTwIjSeR3IO_)=( zGRzrzU6?a$RhTpU<}jz^)+El*{QUeiVNStAVNT)WAx?3@lVMKb`Y>ncrZ8v3wlJq; zcZgGxpGCKr$oZl9C53&$oS}omoMEHFoZ%C~oDnO-oZ{QVoRW>noPzxPU13ha?l7lt zPna`wZ0wUE1tCsB{;V*kpf=1Yyfw@zx;@Mpx+csS zc3+q?{Gl+Xcx{MNSoC_BGc1=ON-*twa0+uu28TFB`9s5;f>NI|WKL6)*K&VGEp|qR z_voWqONdig zuqVtZ%wu>K$e+TY!v=>r#ib$6u%hW<&hS}bPDyQuGrVv~m^19YFsE3%ID_#SQLs16 z89JEZVv@|TSz%7`bsBPU1#|d-iFK8M*R2JqksqPtT4ITWG%PZfR-X*uCXBM1!rsgEw>#j;mOG-;R zw=Vb?`@(egsW)VOv{d-ctaQ?8Z_%=X6-hUsRs`=R|iCQR^fg$+ zFpd~Le0VfEqGb4pp~hx*WMali&SQP*Dz85z!-=`QS8!@g4NpG5C7QDdnn-TaG>fdZ zUBEVZWp-Fj(>(XR$5wfMGD>bV7rDSRq4>M`J&nvGf76qlh$zh^9f2t< z@lWRW7i9XpuP6KBm(D*;KIJ2G!5%B8iH&sr6~Vs~na!?TXYtb{%de0*@E_JcO(doB zPvusEOpPnonSWc5YeHtS<_j^M`8N!^<;Z-;mFvtuO(v~HCi7p$yH5R^jP-D2R=9F{ zaZZ=nP<7=9uV_9uAtFo@LzNWUOW!8l8 z6_dwKtr%Bb*D$NLdSP=zea+m;S*Eq0Rb4;7vVLy$kcK&zaUuzC?ol=Lhq1%+f)-tZ zYq7j$Zev4J!@TC`z^NxiwROF&=5zXTJ(e$2HMP}^ii5h7{vuoxry+|%^R{Bla?-Ev z(~JKBJcl=!%8g{c2x?NrnhaLljIXS#tDHV{tl7#F^=y)nt-?Lopr``A6vw!#G7RS6 zJVq1yin6u!(J2*Eo^mCy-S*uKr>>^{ippBU>dm8JRW1_i5Tvvp@*N!4S6<5ZitJuH zd6q~O*8u1A>dCvdHQsB934I$vH8`4ESGf>hN_su(O7($hH&2=kK)XEGpz>ihcr?Fl z{A8Zso0anB8Bi(uE;t_i9ykNU+t@1bIq**K`=EvbKLCFPt^!D3lP6!zXo3e4<}bNXzI+$V)ck`nL7geDY+Ar_kUq|# zxlz|T1YOb`=@v!isZyO$r92p=V*0A&>rFzH`XI1Rs`NF5V~np#(wtXGzKpLqf8k-5 zVc9>*i`kGty(Hn*jv7r)YsC$|KYyrE0E5PpHS}+ro{!mY22N7@&P#^3L z1hpGI3#C+v z1^5~8%OGLJ9tMvDp8}5tRmOe5u-?eM@?E7N6V@BjLi0A>w3SwZ&4{>>-sr&31Jdfv z%$nx;qiYw=uQaOT>7?i0#V)DN{%Um8%;cmtGunT+oo2>u^(sxAr7%BsBk3uO^yQ5} z0+a`{c~;t}*TxJdf0Zw^31*}G>EH!Cp8?JT&jjxVOTov$(co{vG2l*+ac^ulSO%U- zzK;jb1L^-_^T4ygTJRijDL4_l9xMl+0BM6_?|_rRz2Fq^5aNj+FVDK6$$5?GjJCQi7jXzscCXz$ z*{;g;T;8UA+mn^_k~0}kF(9QIo5XXC@?kc#ss??8F$>9K<;|7gA>bl#0=O7FAN(Bn z1@QCWP2e){8{kzS{gU3TW4{0?huELMt3kEttsw1za}B7zX$3eE`~pZA&KJR(z?I-P zLHeiIM(|qj$6y?k&RhrfAl~RxOy&0_Fsu`5d(43_yITrTnnxO*MS;yJP)eRcmbr}cYX+VfQ%br z^g9k^7Nb9KUIb~!otMBN;LBhQNLj`jz*j+Z#n}X+1I}jf0g#&_%$Vfo;0B%I zI?&;WqoqIw__Q9uAA#M$41&%C83#Cw7ftz7S7S4I&H}4J>TGN^$T%`~2bcps4$>CI z&?SfQLkwMUSQrwcY@I{FJ>X$rKJm^2$AO1~Q^3!FDzn~TSP#^0OeAi4ACU>`!2s-s zh1vnRQ9hu*&Y5|}8GlUQ5N-(Mbs9rMaG2A}?;eiuO0*YDwf&=UbA+>)_Ym_=VPEg$ zkKghif~42-A3@u%=U04}i>Up*%o#0e{g2>P1x4>=x&yWOM>y&M4uvE2v4J(st*ou) zm8Vy)Ej~{Rl@054pQYu!=KVzlE)&wBhb-6pRX)vzI+Wk-hQo4j%0PKXpB+=y4Fku4 zBS2*q%XVU#GCd7k33B{;Y&Cc~$h(en2KWc?OpxhDrxff#I4q-#sjS9;8gGmRzYd-S z(k?kH{xR<@XM-xYbHK1J+|k{R6FO@X6i&ELkQ=4vD_~Yqn^1OnOJ!}%=c>IvVIWdz zOqcqE;K*@aBb`Fh>uR7mP=~J)?zETCs6fL2cT}KeMm>u=W^6XShV;s16dT4HF#K*L zancX{uy2$Pvw0fAZ;8vlf;?8~dJsGe#7(R(_%%>R`+prA1@gWVy9j&)tOdUTE(0G0uLU0iZvmeG zrFY)~!@B$w;T4m2%6FM?yLKAs54US_qw>N(=b(fxYs?!~W_g{)pv>xTvaoU$$P9xO ziBf(E)m0Ufp1P_lM~SiOeB($;XSKAcrLOa4FuRu;Co5QG9B$-Ue%CZtHePDt<295u zw5JMc6B4CJs1;NV@W#b8>}4q4T z{uEReybenLe+JG3SpXQj0sIB{DEJ1r9sDJzaq*krKtkREY8?D)Z~^#RkTJ5e6_lR8 z1u|B0-UfdSZUg@a{vM?7bp8vBf`0(Z!0q5AUX94eOAL%8^o*H0+RAd~$23PHPt%yx=Ca8Yp~81n zuFkyrNWvrLj{Vtf%=#@7_rrY|DwSHO7gj zW0#res1NmmGi|jx+7^6lLg$JKjgqO|l}vNx924U;ZlG7%IVCBni61VCjUQ5M`B7#4 zkmf$*xmj3iT}gB0skU<2jCjNqnO|pOrfTL1m}uyY(WHD~t*Jh$PI^{Mi;ebkR-rK^ zHZ@0!84u?OoUPE@_TZ6o67hIP-XKOP`ck6)H@=VnwWQnqrh8uJ{sHv_5ptf z9s?eO?i>pa18FB?qroWnd5|TpF|}#OgExZxz*oQ%K*s&fiJ;yE2ZDbGPXZZ#Iwyk% zfwZ@=ejp2DV@2R8U^zGhoCTf=&Ij{B`Z1>fRGJIH&w)iC{h2cqqP_$QFG z#{L1$20x2_ab->HQm`7V1?Pd6gO`EJzy+Y%3;M&9Hc082j?U!qlL_~AD(~T;F}&PJ zKaT;k)3ib3%`SC&&aC`SW4hE7sk=!uMUAG$DW0}zvfWc}|9Ot7flsu|W|r5xvmD$sPJ2*p88uGost=$* zgU^Qso&(=mZlz7|jC5f(5BdCMQ1BFZ9QZVNCP-Toqs?)?3(}@I-viZ7Jqs=bp97bG-v@sKJ`cVFz5xCiTo3LB zH-H)B_eSs#khUv!H24yzy7)2}9%C@RHk-ma8)GmBobo+LZd88Ci=3qTJ)^#fLmn1t zo<^&?G}ai5U>cLIg6E;>iifFxm9_J(tf^|Y<5ku2Qhs)js{w-7liKf(svqtMrO{M# zjS*bNrFIY_Wp_Dq%*Z3n7a*@HdM=Gus?eU__T#3;GoDx0a}7{jj(yG3_{C*ZnX032 z$uiz3SN(i%^42rT)7d;k`Q^C$?Ua}D`A;f8kg_)QWEZ%A=Xb%cf`0)Y0p9~PC-gUv zZ-36;!M}q4099}3tIT)E4?w;pI3I$u6;`I58$x$XefodQy$O6&<@Nu6Lqdp?U=odp z6*VgEi0oTjSR58*1c4M$6aoYYvY7>`8U+KEI7G1(i>+2vT4_raEh@HXLDNbV+o;&0 z#TpfBMyQR7l~$_%_c`a@J9lP+2DRVce_n*o=broQ&w0+X-h11C(vH%>)nEoFYr-`D zMSlV_K^X_M1NVSgAnQraAz%kE1fB_IgYu|Q4k%;e_Ta@Jy18fymnbQC4^L*hruPu4Ble}SG3D=+zu>Z(N0!td+osy794m0_xO zGGgvU$)~At7v%}F7RVUAWU4vv$BpVdam0K{YM&&L1T@|>uF=hjr*WzK4^lppaV14l z@47ydvX?UJ1xi`>28V)uz$?JMpd`H?DDx^lLAU5>Z~!PeT?D367w3Sv;JILTa1bc# z3xmO%!SUcd;3eQg-~@0Jcq#Y_cp3N(I1&68csbaH^iBe0U12gP^;!a^=nA&57ikfz zA;07?%Ur@s(G~otu7HPrfvyZ?Cqi{aB52|Fb#z7SUjboC`A#d7$BucCk7|H7Dluyp zFlA=##2C5?=32XeHkh?LfYt~*XKWnAzxP}Wm_4*m`N1t{Z!b)d}ge+eD~@_EEX=YbD_7lP|Sna?~7 zvJU4w0^SV%3KV<30c0J?c@+E`_!!7~fb%%`FK{E+hI04~cqq6Dl<~onV6skcCtac& z2h!>HxOZNX{S!Y@p0ZAm`vp2J_RrUAiKK^hk~zzGr+%r_kwSLkAjWhJK&q3tbe}^wjtbI z;Mw3i;6>oOpo}+TAp4@ud!X1b=3uHv%)u5(ng0_^uE)8o->o2QFXLjH4(B?9zYqA6 ze({{7dK5q6W-^%fCH2_-e6>yzMGL>0!#EE&KsPr!py9G3L72L@(?R;53brru{V`Yv zXQn?2lMM|?^FaRCQqgsCaVzRlsj|4mlKql}ZWq^qPENLCD!G=qMh9IzspzRYBx1Kr zDATbD21@z)^}ffe^?I{^JyX-`b&YJyu!y1~x!1kIjBAmEBsS2JW?ML3H`;-(-b#|@ z`?2f0d3vc(CSHMbcGoyJ`60=JvYK?UiUD`jr|l70`AEv7#AHGhcO~6@zP}pQ!6C2; zjdVkTvx;u&ccU+q!m(2H=6G%?%34>xP9BTd5AEQ{NxOVqw-SS`HEQigMuGB6Y(Fxm z@qVIXlerkp-*Q*pju&5x-sOR^SD6ov1rGydo_09+U9bS$0v-Xr0(Jn~qSr@)vbS&) zcmnt>a3aX3V)a}~At-ag0#65J z&GigW)|0w`vc`HQxC!hEvOer|2gMHe0A*g*6U@Qh_5wSBy}^^gKA_CU`hv{eoB<$n zFsBII0iF#q#&*sDGtlXCLB_t$d7#X@27+gSgFtMAGZg#)90umF&N3V%&CUq0A9w*s zSk6drFc<-G>s$n042}Zj1G=NZr696JE5R|~T5v455gZ5p87v0R#_(MNo)1m{CxMrO z)gWs^i=yB}a0PfdxDvbq{2@3A{0%r6{3BQbz6nkNKLDqK?b;Dz7} z@KcbrrbY6B+d1H|;9M{a%6D7Fg7V##OTeqZ%fTv8Y}^7c*=`mP-ZFH{8~^_reF$MS zDORuj)Km>F77!y_@JO4U2 zJWWE+1KCZl_m!|PPt(<_*m6Jhy)-TR5NUjRwcow6^?5ORdnoSdbSRp*74B^{o)W_j zS0F23I_hjjAlX+#j8Ti9(h?VveCY=KG;~u>o~ag3HZT^W?54azeTfbAef3aZ%iXBV zs7h+27jg%^VFTq^!L2v}P9=rs67@Pq<0$v5m2YhY?H-PNNI*)=6fscXPz{kP1 z*uP(cGLHWZcqF(96g&DPDC=8KfwI2!TaYzzXEQhn+ycsa*3+P@t3M0Iz^x!_9nK#> zS!aJ4WX;0a4jzkkyaILyv2lx-Pda}A$ALS*Y2d41CHNY+82l^99KhKLz5xCWWDMxM z0k*?VHiGmy&YR#s@GTIV>%0wOQ=MHPHq?0s#6~)Q2d@X;1#bhJKJ~)4wyks#FJ= z5^f8>RAXtaQ53nb#~>)WZHbEGbn|9 z5;zn*8I*m&Q@|DAsi2$*ISqUjJROv|#~I)!U>8u z2ZQP4cL*qUg)xne)572xTn`1$28V$&!4aV7?ge0Sdtl#PKge{T_HYOJ>7O+J5;+y8 zP6HQ$v%zb@YeAk<)^$wA(~H(}eLX1Wqiz8I43daNd%?wE0qMLEJOQi$2Z2jLnd{#K z-UxmdTn#P*In(6SfRoJ-h`>)@_ML=5GhmZJApopSu-5QeM)2 z3lep^w4|b{yfjI>S{9A-{NnlE592(kosE#N@4#56n+0GD0TG! zD7JqsxB~ncxEB05DC_sX03{Bdr`K~)zXVT3PZ)I<$1hk_4-<=`XWjo`1qyTA>g z%*7rBUjrWl-v%ECWp8LB_&)dqDCYy2SL&IOO`xpfKM9KNJq0G~^FHKaOb?{bE!k@E zBjvFdJR(t_b?h>@yllqIN?t-?UlW$#Tll4_bE}6i{|C0(Q(j-2Jq2w^o4?#vd;0F{ zu4v{rZL6hTCR5TuTm2e!E_KD)g6i&Dpy=+~pxEkNpxEknK(W<-2gO#u3yQ6dfnuxQ z1I1SF2E|tI0mWAT6BJwB49cDpYZq#(LRul@td+8ASSwaxoMnHT*R+yH(C{to;c`~XaAXXgOgfXTYuz`Q`_ejWLfpNz}J zGGZ8YJ!1~nXD5wA#E-aP-sE&h((Q_pvZ+Jn&7N02c4pc1$}z(R>rg~uXyKQ%3@jEc z3upe|Tm;hS2J%-vZ~AmK(-N}?W_W@ES1?5cVkadp;)1bor5uXS&SzCp%|CDGo?5P< zh;4V{>7nD1M%b za2hxal(TZf!Kc6x;78yEV4rl>62WhS7lAS+9tBo{qrvZh7lX2_s_U0gjXM0$B%iNr@wCAF1E z*e(20JAwF^W+3j%ZQd%YQ-0fsi~QCRpWTWQN{_Dt9cdmi^6`cd6?AhpRTL-5BX?<$ z&ElQxl+WfQwd|f9;B=bTJy>tx^$j+m6}6Y}b!_83uP_k7^fGN0+Itbl42eS`)$Rkq z6i?vw7P^=xnUI$1^%gd-mp1N6tl#toKX|e&WNE;X4jm0iDAItvqA)+Zkoe1TvIr;5 zLVmqzwud@bxYwC#VB~%_Y7o3{*YW!@B@N!U>-c@PmG$SHcKd14HQT!WeI205p0kYo zy`SjZWG;H}Cu1Y|$wz%f55EtJNxdDEK5ivA9=rp*4g3N4D{vL~5AaS<&QJUh90C3a zl=JC#fjz_hrtQpBcQD5Z2%X8kAa-qa~=mdU*~KD zWiRCkkn?EHuR&S+`whrBCub9wN%=hqb^xCOPX>Pr%4}gXcm=oxyajw3Tme1Wtm;~6I3tgOO;XGF}btO!V~&^#;Rn-$O4`I9U$E0Q^R*iI6%&ATp} z>n2Tx7GCj8vyp(bYncOiKdJM{T%5pPCs+Ot^hxyKWAGU8U!b(-Pr&KmK5#YoZ}6w! zf51lYQ}BIoKPYj02Fh8L&p}z+=k3nAN16u8IH3(FXA9Uz)8|n#Ksl?D3GN2lfuDj| zpcuSEz|+7GI1J1Nr-C`4oT+aQ@(h-9C@9a>QJg@;|Ah_ri@Gy{PS)9W`Y41mX zUBC`tckoD1+W?r{u9ni?ZYL|jc6A8Xh_%1&M7YW85aLJN$h!Se3GFIUHJg|9@d2@t zxgaB49ob6wE&NiOm+6i_nw5nJ)dWf0K>lXuSnUl0=1!HoSn8xfdOB!LRCHbR)|#l-I1aeRA@L?QQRzJ; z0BfR+?v*B6awe@y!0UQTj4Hknd!Eb{PgX2NzZ`uFW@%v@q%Un+c+ta?-57)i4D?nM}o&*j6 z*&koT^C(UUI0KvlUJXtKzY9(SIoIx#f}9U`ri0tT8Q?qMOi<1)lz|15>nyMbcqKR* zoDI$d=YTTU%pr)X`|&}a=VvFWD{j8b4mHhI9<+<;9T4Nx#X{3QhzFb z#0~b%`BqB1kCgC+&4uw+FQK>a`?C40bcfK*cdx9eZ*s5vWPA2Vzj~*AZAaIM_O((L!(G9ZSF0`P%w?i2C=5s}v;E>>m@U}g z3bf@*zIGs(zyiPm4YR?$9k&c!ka#6wVQxl}U>VjUNU#icj&v(}<^4o|CUen;zfG?E zPIOarY7HpomVN@t9Pg*#6z~D?E^sX<&%OT)+y?#}l;_ZY0iFV`1N(r#1jFEi;0@q< z@Wb`iNr`m~@y>TZ~yQ6obWC$;P z=sy0upOn#LE@+U>9#?qCAvT811tpJp;7~9hls$vPz!l)(;5}dg_zUm|@Ex!ND1GUX z;C}EZFq``61WMm}4A=!c7Mu$)L2KQ@|YXRPZqH zG*Bk(r-QN<))g!R&jPE!Zs0<&JNN9Ue1c+=NLZE*d(D$Ib0dM)1z~L1Qi&anUf|-C{S}25*MPj2ShCB5v=$ z{fPkt?}Lm~%oxk(9_7u=7{hk?!+4TC4UfY|jTvz%3S^QtNQi$N`#UC(Bn=)lZuq40 zM~n#%88>3oMPrFKC;tS|Km8@V!Td11-K1F^GHT?gF_XrG&!-ugEX^^QzSW!#*Q9M+ zsl1__m1q-6toDBMA;Sk%H6xWLuB57lj2v}QSPS@=4kn>CCJhdc95o(yS@|*) zkk60uQN~G?*nq73x9OB92iCCV{vhtpo-}>-ypl>@#Gi}gEWLkWc#IT!HiCSj;%mEu zIK`NiefJn^n^(*CWr?;uj)&0)a!(A+VO(ysaCA^* zFU-u!pHE9!P%>$D84tGvQc}uCKIMR3R(@MN@p)xwH^ERz+mIpZV4$W*bHgL}e&S_y zT@wF2ax!?{!a!n2T%xIwQnGK2S~-c&!-;I@h>>AUO5A}P?jG)5#A`D&EU~e(C(XMu zUP6Q`C8W6=afwv4UYkSx0&}n~B15%^B$5i=Cqv#O0f$&>EeegVI5J2bO48)T{A??9 z!eOplPLh}PyJa(<_t00CGOgQ7h_d^FIpe*I^Om3St9Qq~UH|maZToI~o3X!hvC6mH z`)U2T)#2v%E_kQ^>wo%`iu$3-e>=Kw(U8kS|83Lz^>f?S-*>gy?7Xzs{M%;z()olDE+7s_=nK6ZMA3XqGyE-LJzA9v3w{K_5+JNM|Rfp+iJt?*0@8a4QU zKh%zK(#ZUiuokP~llg0>qXA*rPBZ@t3psbAw%IDX*JUAj1D)Q@mUqs%?sodJMqjoa ztt-KAJ9(dkvTUcb%R-K<^~zWy+u7r?kR$I>5Fgp{M5?loJOk>=I=U?6j>&2TUHK~h4lFx2_;)*;jXM7ixkr|mW!cUOmxY`UVAw}O`PgM4XEB8$KC+#qE(ZA+0L0R3pw&BF!7PCZ>ts-aysH@riL=jW!cV5mxY{tFq!>jJNsQ0a^@ls zAK6a1%Lv(*E%#-M3RoG@kmaL5!m^zPmxY}9N7%ds-EdjRnN8ns?&JeJ!a~jxU$)Gb zWnkN9X~?5pmhFslS;#q*BRvF3Y=^llNG!7VT^4f2aahCLUE(tG>&xc*vgOCo32VqZT$b(Z zbXmx`uaFsnhWt~Pg`D5R#7DOCoXbK^qc7X#%Qha*N)+zeITKg0H`+BrL1 zMw(rQk1qCxEbO?;Le61b%}2J=!DZM)U)If+)puiMPt%;&-B`9$;IfeO98Bho+0Gwb z7IJRv;kmoXWwdx-w%V6%@5x%BhFsXo7`=hZLe85o)QyneaaqW@ski6uW|xJW)xKt6ZoaISFKZkk+aHqiF6SG| zcDlKYvI^UN9A)J)rWr#$cR4N#IsJy&IJ}*+#AWo7E(KW4wr?TVPjZ@RM~|tBLy(b4(`^vjGl8W zt12q%R5r$CA*T#>y2|FbEaWVOouRT?m(f;X7$Cx1^=ZGVYAN1cJt_@GV@Q!vle=A-6_@H#;tsZgn(XENhXWVaX_}|{> zI)B;}=c5llV4ORU6JEo-Pg?}I`z~QU0p{J0zmA?XB)pECYy1Y^K$~>!2dDmm4)GU! z!=v603b^mSnor{}?!6+*;!S$3j=D>f>9K=zC8V8R_B9A`? zWa+c(z)5j&lX84K=r(W+SHnv^zG&qeJkV(V1IH{h?Wx$gT-mt>qsH1)PUVnjIIAd}Q(5$c2K0wuK*d>OS_)_{ z0fn<_!+WFQy|GX5_EGMo;k?}Of0&+o*4FZKyns%z6lL6SY&?)zZ9YH35|lC8OW8-c zd2L1ZQEq-XFIrqsRNV2pgUD91o2}+(xH(ovYNFvBFYJuk@UCbi=VCW1F89<_?{cb! z)l~1vsvN}sg_T8eR@_A77s{rCK< z{`_k?*HjlcRmU!_?)W+PtB!~k=ZvASyaZ*%o<%GLUzINjo29#x)DOj(B}uD1Gg{mc z9|fZ?rd+~#6iP;CsZlQrUPyU_y1Tjs$MNLuuc_YeRQ2=fBcLG%sMtogVjH93#@)w9 zBl}4oDl^6lvM#*ei#~(sqwie)%r^OX`k3cbof-{y8Xb*vyjYW8V98G`gM!#is(hlo ztxub1uPB{rZ3N;Rtf{)gIk8$xkbQ85jn^(`tv^&U=9J#;OuWv$Pt zXqn_xwd^tpHPW#t(&@T`$l)$Ghr6QTU9pY?AuY7PZ=s&Xf0Y(Wl@e64&UaLu@8s${ z4KSdxS+P6fI*%$O=zI(6;%QrL*i~RJxd8<}Km!#8mYP)sJ~3LnpO%ytOiNB3GOsE5 zDy;h3QS51De$aZu*K$gGTD(t|dyF4E-NVPAPX`-kPrDGKLZH^58V30{wU)GX_YXHp2B zy{A8J-rermaI?sy=aRKdsphP2q?KlAP#@;zwU_We%)Mgkhq;$-ksfx}OxXbNngE^n zv*G>XX7?dc+S}$dS{;Ri!d4%7aqjrdt^wccHJYs5JIE)Fa39%Uvn8!IvY&QVRGgQ4 z>(c}yT~2kI-ES|h-Y>@B`ZnTz{~6(&k8)4n9F63i5fS!>k8-cj)HG^0u}fo7+Njh` zUe@cE?;sCh{^Nxq{65T;Wmds14Gd&zs`ok9XEB_iUzft%Bln__J++a2i>voZ{MA{} z;(fKnO>(zM1XMPC2uTRu7Oa&C_YM#gap>M97VlT6HH$qc>QQ zemU-U_e+e1+#XTwNvE$hK6{nuzLD|S3RkbZ@!0}@JkVP6VOk(Vk>tTn>gYz^sS{|< z47i$P1Qb`d=9=mz9e*|J_^TNM+xq@i+Omvbr7g!Er#9VzRI*8tI4Vz4eLC;}3cbnN zT@`Q?Pvk-OJHh^zffIcU1E=_?FQ<;7lox!^aOmjC9Y3KjjGqcMLGHLIu^-Keo#Kz1 zye{C&yF}@fq)XIs)8D0f0`(!|rq&m~bW2kFI&S*W*HF-e9z`CiPE?tMaZ~GanlL&S znVmq@BHu{ zO-|gfPhe`cC+kBo$*v!)|ISoL^ko`Gs^eYKRqXsQcVZZpAKsqS(d~r{wN@|Kp;)LQoNH53T#AEP?&j~M+ESuPB9tt{3 zKpXfkQXkLFCP`pDeOOpngxeG7mM?L;=q@kPvZQ0$OHoS46yE1ewz6U)q+??4V>2$T z&r`L38Q|69myI?89VEt+_q}`F%R!G$6WUpbfPxmKHZ0=MGFoiV{fXx+~HIn&iFE3LNc!2ottR?nxn2=hZB%iqtL?L&4o+IFRf)5KIcQa&hsmhfmsQzn z1y5}1@`?{>DLL-M!rDzvyxp|cg4iJ1^u8(fyy|lv?WVQ!oy6uGwf-PXLITTY-MmKJ z+HNUnevdMV!NJIQ0Uew*_?Ya~g}2eW#z*$iVt@8SbK8;Bt!$5XD@n73+`8owTBLzC zAqx>ZJgdkI=+bb5*Y$A`p)0v!OJH)dwKlRfTD(FbMTx73--~jCFl%05&l3q40@D@}4R4H1C9pb{3+f`fE|vlejPdiBbYw{n*Hl>9 zQj=&gsT(Bp4VKjnF*#7Li%=H^d(@hJX_c+c`+5mb9ulG!*2gwT=N!nptl=c|9gTqu zpxZko_S~iN(4XX{YQeMNeNxpj*Wageed$Pwig#6yXE2icP`EJ~*;!Yxn1M@bE5K|P zMRru5LGwv3-e2=!dhTOwYEiVvcDlD{#?7_i23lDvC4Gh#QZYSajmf@VF?vqxuF?K;#9caD$ z-r~1xA)q;0u)>wS#e~wOO(*Hy2uWP*iW;*UzU+Q&@m4ps@YdRln`857ZLxFYzvI=C z2e%;B1Z%f8yml5UwGNe9jh*nP%BoJeOSgVuas0%Jqo{b@b!}s-wc+0p?RwbYPANnf6IT`%1Tb-aZhM=wnoF-sQQ=R zt9eT@vx$4;M^i5g3n_X~;OW6Pt|jM6(Y*f|LwiPd{>E6(%?ZZXTVEWf%R#J9`WfU9b#*CSb#fXRT^NPQ<)<>V3nCQ)$9qh+7ND+u(n%R z+heEcq$1DnpVVeooh$>=1T$WBxa>3~h+1#i8zjmGi?Sgm4?fCR!V63mt|A3~*s_nv zvUL1zqqN#>wA#(V5ihIj@!F{kV-w;VcXW|vUK`NL1GI&0o&sayWCT!OCw8(q-fX>@ zt2Woo)z_=;TFaAFnIzq9LaAL5x|@7=SCWNGzTcQ|Usm13p0W$DM=ab`qPwcVsS7w8 z0)~ukWuuhUCdz7kf`yBhL4uj545W+Jj%E{$_#vdbMMuL3*E!(Z~k9UKcN* z1iQ95w{E?efTH5{1a-d#)q;6jmtfw0?PgTUey{W(NgW5p8t6E@+g``<^@_DfigmY| zgr>Mjh!*b}dqp( z*>?pEJjc0VkT=Y3{dhgzKw|Qi5Q0e)Ymw8Y>V#S8x?1L~*(S`O^J357dX_V*O`wgD zOk1mM$x%dI=7aff+)m)NDd<%f4w^i-c-<)@PS5g?{kToR>#m?zh7YWicy95!Lk6mz*QgFy zcQUtW^kg{MS6AHVMV3()-s$;f!oI_E7Tge{)5)mnBC+bSi@$RdzmmMsn|q$~61QBv zH7s}OTS4c`oSfiPL`x&x7ArDQJ!Lj3yK{9klsei+ppbMVRmH&){~SYx%tl%}>rGUc zsl=npPVQvdYX;sNxYf-dkeZmhIPSpBAaSiZFV-k6Qfpc^QiB<#GG#}s^>g3Eg@W%A zuxRG4Bn`pnXQ5aALQj@du1sk?#R?o$NpO`Fbd@!W4VQQrqSk>;kvi6=yxC0-U zzNXDgT=-c;kipuo4R5Qd-j-E$O3Hen*l%A;^3cv$Z%t03@#BD2ft?m|?S7&a!(W0G zOI|x{Y%yBjq~U$L7z9tblI`bC4xEh%+E8t7JALEDEVZt9XFxX_XdTKg0nXh51f-SAJ);zJ-xLre`r47-Rc8<2RzMd`rvX#Sx zR=fK`_1w8db@C?xXycyU#|G6+mE9i_p-Vai^$ym#oh0?Uc+UzFdoO=Z&)?~&=U_U^ zHBuvM#4}UqSocz1+!>1J;W^9k1boGV{s|M1eyjHAv!qDk9{w=nEE^VWqoit{avzVo(CUI2RM z#m4B!BbsVQwr$dNj{`;eYmM~j1BF8PUNB#n7!Bsdx8h0HG+epWal=oKj%=@q@#538 zZh5m!bX?n}+HvihXfA2FOUvl%+|4vOZnIOD`*yObSQKIMCXE z&7#dlz1}KCoV!%aJ9~wg8dIC8npj;}sV}oM@z>?)Mcl zMyL9aXT!2S$NPYpz14=<)R0+c4>K$oBEnqoBpywDq~5n$fFS!EgI@ZhCU+@R_ffng!9`r zd8*{Q_}q8#oaD8w=G9ZHNQ0%rf=G67<<@ixoD!=WmzQSCyhOBBf@!b8_%-jjYSWS{ zugoIbC>XEI#O8UWvLYH@L8%1FY`I%zk;dA{@@VmL3OgF!Y87{Lq;XkR>@_CRv7h{x z|2o)u7pgKsi%=dDR#n-ls(UZlQrSu{0K8c0`M}>mtksM8WIz;$%yL zlXd1~Q?z)adfDpkUd!_NE?qvSK6Vuq*XP##n%KP-6D{75j>hT&IVFcFm~ei3Yuj7i zME}twC&HW9>@0jH)oz zocv9yaHuRa(Zxmf_k2M|$TsoP@rEeMw-0VixlVf5b&|qpcwOvwnKCC|#2BNIF@~%= z#K%E3)r-Ey0AsDhv)1BS8@rr%zVQL3Jh1;&1{jGWEqQ(Pmklsv#pxi{JrW03dSKJB}=i}0+qley=fyOAAiw@1tmJvtxna@;6%h*J$ARHc6FpjB?8GrY>AGcwHog>`ur<_}TURH_6p`g{(z?x-!|j?ay(Yb`XC6b# z)?G^fMDos>_tN?o@2|elR>^qXjb?l~pY*no^p^YS{me@*>o3iu(Cwln&0m}YKTmDG zG*7W>un@7n{AYDBSxx#rw>0B*(WrgnzTCP2+@ko+e)~1BIjKfAi4*M`eJ8BdOC_$L zo7PIh)yIXL$PHJV%ZuoSWE*==TdAzHNwpBal8n`PXg(v3p7o)F$(^;p~- z*ni$Z{f6bg2>(rtP_+{xtUFx708j?z{_%27VCPtW7m6opnDmGNcqMd6nlHWm9N)j`rDwCFI^_(E8j7Z!iz~a=NF!o zZ&Hy<5eJ<}`6d>*+I^JWL|!Yk)2e#nF#x}wyrE5aZ*6#4G_s5;4Ahf1w2@j|5)Chry`9K<@BG1DM%YJ7 zJx!;c>H=nqiN_U5%aQiH+c=ucLD=oYQ->$X4kxos?R0DEbw#?hX4W=xDR^4J&e&h6 z99iC<32dOd_LIjFdObVMtxce9=2`-`$K-XBJVKCr zRyc0~hpD|*K0%*t3^(i!iHVh^zi@-};tdCXFm0O*2jt)g1+p#noHn6^y(6-il@xQA z&F-L z<9hC{qjKeB=^iS#i8aVw-u;d|fkflG^9f1zC;zUc!(qG1JL$v}1W)Vm7`fu5S)Mxb~KK+Hj33cLVv~ zMz%H+OHjER4nnyT+wsURRPLPt<<_I@I}cvD?UV)8f^zSO$+Xo5l>Tm(DR=UtIR|~d zpR$f!uc7=+#JFE~yQ?<0!j#Shd^ z;6!B?`tkj{kC)D5|F5OTK0}XG${L2(?W-k7Ov@&eT25?k^itE&(#Oc9rL^S5I*Gc+ zWHJ@kt5$3TBrg8?>TdnZ=z}};X!|}?0(!E?HG*u`%UCweW^pZ;?-maw+IEkH)D)BL z9+|z#cCfUbfJLKQ*m)2KkgP>oxVvKVr2!dqR=3oxw3seydFH<{CVCJ^i%w?Zrh`kg zPq#PRXDs8ITf9HLI7e->923l~TPz_(_G4=~nb@GCQ}o=^+{nK4NRB){B?lk3Rilsf zl*MMsViRSNYG*facO!SjWXig_oDbTRXlFOdIZTF^^6=!|-FL@kp*=Fzy#5H$(`Ff* z@*v0+TX+(Y+G~?~#N+GR!w3II_VC;P$M#SkXrs*q%+xn%50{~Af&S>A>|u`hZM8jo z6&*~pL8%(!|%;Uw9rX>08HRf^NO1k<@rHxZYnE zZbqZ`5O)(AEzg~ab=(-xXxhMbj$v`PnY(+q>z`i9iybDG@eN&Oia!tk9S1rY+2WRY;<|+_sYvINLz(HpFA8;Q%0m+^7}FNRUL|8w zUHWI@7;Ec>O)r%kHm?!!9%O3mX6Ee@w(MbI2yc)5jP({tcR^~{ysp6uyS1B}DA#axg|HL$i6-5tZrmYhS3aHY_3yOoHM6q(Z9h!NYM$AbN2deL zpUqhg8p;9>4ZG7PuVJV4(F}$n`QeSb8AET-ArZ?CdEt%BZo_uRjjn$&BlX|lS+{?g z3Gs|yU?*5S@sP(Q;f)CO@xOIm>ew}2uQlsE^C%a2@e9u*;?16PrX+LLKp923Bc{%B zc22~fTi3Ok#=73SDI1;g0N7eu@ft5)9$WSuWWMo3ZunqJO`a^P`BpLlS44TSi;A~akGAKh)-pz2L;uB+#D?J7mrB;# z2o=L44@KaLP0u~X*08P>bieza*hKm|8P0kNnjz!b_yq&p_yw6xI<95&_xZA3mHIxZ zR-aT)T)=vrRwD}n*Re{Or&|v#&6`^sf+kwZ+cluC{=EA*_0Nj~2eZ~u6gh~;k`qm# zd__f`3z2onyHKO}lW&2i<53#w$zQ7Da-AK0_DA|M+p~`2t69yZGR6xW#%AP~sOM|q zO6!>%w3p{eIG!Ya!ziirXKVFIlvQ?(O0CxG74e0Hgoj-2%B@SscO8!wdlM{OQC$^f zMb#a!(f;-n6*uz=Bc8Znp`7=)G}p>DDATfStaKNJ_i|6p%WRc{Lu_lX^0u`$d^^fo z6lvzgNX2_VLw6RUK#T!}hIzvt#(egGH zMe^j`NgIla3wUtmJlccUR))5xM;N`>%bS{X{bPl+EV;Q?_HsD!(`EB$xoq|>w=%3d zUEcR$cl|@Hd9fx;PwXc;IgGzdkSQMHfyH}dVsmgqg2eu?AN{y3d9R_2SA2nGYm)Z` zRSm4EUdL)yYdiMD4)S@ggLEfI3)-{v#_KW`-LQNa@yFk2;d_$9 zF6N1@Azu%Yh$j(C=f-F;@M0S;rrEwHjD7x6xfD-=;;BF~nY(0?=qxrq-XU}3l=l=K z#8U%_+bu8Bj%7!|Ra%;8lWZ=;FW1H!P=eK8n_KrBRcz~uJEdp~ymrpUZ;S@szTxyULlUM04U6Zfn(Q zlZ?AIk#GuiQ>@aht$1nPCF|hvOO6WqrjVjvE&Wvd?y3V6{hHjmBQ<2{U{^2&1?$*w3z@B$l7U$5#m2C9xh#Ky#`+YqR_ z4a~X|t8RUu>ejP$Mb*`Xmrz~u(8^wt+U)6So*sW(CVRm=(0C+O7~8JKXirj)uJ%ZZ z^vl4*-qYU#??AIOHjcq?f_aCYZ`{%-Goc7;P#opm!D7P}b@}3(BHbX; z_9``-xz#-rneGSEeusMyx{V*q5$eHp*|x=Swz+pRlf$|4>2`iNf#hs?Q({a_Ps8GB zHQi!|S9ykjam}il>Q#CkN0%jc^NwZTnRj|xjJ%z}S)r$ew=S;UCLu^r{%K(bOv`Jk zmupZpd{7KsK(@@NC|CsX)hem>jiYRi%8;aJ)?GMKam90duc}`aeXe{u5EBT*(q8o zCL_0QgEXroi^OIXQQJP5D z+jNsHx%z0G1{dgzT*cJo0c|I~g2&rQK*3*R%;D;#sVnUS#oFqgtB<#nwmY<4@l=Da z-`22Pm+^KI3}>5rH{MR%aISnY-cAC^+0qzqC&6(1c7mSCL1_#=M&EQ1_hOQT84SE@^6Jc$gxR0)s|Cv*GZ38dUka%9U)#_!Ww>Txy`rT!O@nCDKq^Czmx(%KsY6XuGL-u?9&j z;}E)Dm>sQ@%cu%#mx}vno&3+-scvN_2uc!fZLW1@iwVUMb&IMSSs7U_4-WLQ#>dzw zuwdyvm*s)3Uv@dT$%^f=Yb)es@;$U=FrO}{8qBsYufT8plhBC^1x+bK#^#!8UbZ@r z{|}-UPFysQPos)|URoct0lWp6SJwqQ{rz%qBHrQI^T^IFFi> z6G91(AG156CjhJHCgTrD*2Nz{&uHzMXW|0IJz^lk9f_`hj&~nX`=Jx%o&!C-taGU$ zb>Y2UFP+ia94Aa)dC8}qtJ+Ka{;SA%dwG2DFUwjiJRM0gAK@?4Ig$Ufm7U7}k19Kp z{~zM7z?sbd=5993++78GjK56%o{zcvneR@{*_u0XBd^=dbe`h>k;yOs4k*P7m0v$|k_fZz;_D&VoIme&@l=@AqJG z)-KbL_h!k9R|}jMeD*QSLjDYPsos_E^G;RPA7*jL2LvpR3t;jzPNp*oW^r5vD^nlU zup570_VzNJ-7pJ9UX5vKkq*{;bb*WjcLe=A+Da zCvVd+ch|t4RChP{?tTor6AV87klU~rV(t!wnY+Vbzg2e~ zVdm~a-`!Z>-6gQi>TWV@q_Q&DC>U@0fm!X}1hbl13$vQp;EFbib~Og8E>om$w_%5H&KC|i7YFZk|Wf<2?| z{^Gj}G10K_4ue^EN5bmW-ElC>`Kd6=c~6+-T)seVelLTW-^sAwsozqVrDYk+O6cb> zE1_q6wjCxX1qz%GVOCb{nc-Q;N5L%QV`0D7kWYkJ$YGe3)p*#Q8cHebd&;hYS@~7N z>QweKn1%c+*r6KUM%c5;o`hM*AHdArzhUO?GuT#jmzm|2OD@dH2S7mj+>~WZ->KRzBre!Pa56WJES?cAp zROT)RX72J~&#Ai(FmpEoX6`PAnY(Ypo>zBQz^wLXz(ye}aBhIfJB>4)@4>7t?}u57 ze*|``x_cF7A-@B&kl%xC(~$oOdq~}Nz#Lg9eP9;Kd9cg$?s(XAW#upn?|PVpR|9)N z!;`OVT6jN)m8p-%U{?FhuxTo5PqVX7j)LW>U->HMAC;X5vrq=ZEG_a?PV+GhWQ0!oly$ILP4gxgN>-V9lJ8Ew2yX7?!~U%9s(g31!%Um*hux}vpMzN(+hOMSRoGwD z@84h+M;=9MrExsWe4GI@AKhR()JJca`6%(-UFo}<50kTYnS6iAb9X1q>SG=37ERUf zU~85A8Ma(m%)h%2R;RKIqPKjU3Y)32b70o;M!-x2FsvpD_(vp8}N_xyH*ncvPZ^VXos05c!MVOEzDU>3(znE99q+o?Y0 zz|6;;zPtNy(^fGty21G6^x1Z=6w{s6Pq_!`VwS(gr8D?0~fWk14a zSHmm?i(w>|vcCz|s4NP5P(%I&>~>{aVCLg_nE7acy{SH4ftimqCJg2-8)okEU~j3r zBVgvPH*AT9d=boiTmmy6m&4vxA5&oF;}+No^|20SJ|2UakKe#{sgKPt^YM4st?J{y zF!Rx_qvs`|D7QV+9`Ux!(aCLQgCT<)`Kn1#H;XLrLa zr@}0@9x#ioFD#~^oDH+|$p;XuKCblHH9q@3%*yW`n3d^+Fe~SykM+v5tIztwtV~Dx zYy!;6RKE0V><2Il<)<(U`L{5O?W*IvkeB*w1*+iJxh&y2B?#D25cRy^mBR+lsGdr{aHVRpRvl(VR&ik-A zDoa1!ael7sSeS)(D$K$=6SjxDnNAOw#XAOetNK^~o2_g)Y?ZQ~`?4osZa?GSeaFAM z*T3851kZ0F%)&bhW`2jjexM0zXDL4U!fh68jU>_*!0<#oM_ua|& z#m!v>>_c^TEzEMh1ZFv30kfR{3TAOU2{XS>!#+~K&%!K@&wY1?ob0(f6t-909S$>h zePO2KV_+8YM3{wK0{d8fOoy3|n_#yhD{vl!SuNDVR;ldozU*U|l~DRA-rbX6=A#$P z?hf|vPV?_p_;`n>~Yej9vuJA8Mq!}h7WcVJf2@54qR zD{%e;vzk5zBWZD*0<$=}!2Yd%yTdGwGT&W=?`|PXRs%DgYTwirCVV^2H6=t!Ghnc;f4RcEa=9UJ`{N4uJuYT`#+Z- zyLVu2X~0GyqcmV{X`JE3aSF`h=mPsp{dR|098+O;sNZs!^;V00wgP7T);&IZ99FGm z@C-~=L^GYYVBc2uo-g|lX5;5BT|6KCU~;%8)0qdGsO)NAb_2|Oe7lF^tk+as3$wCX z3S*Fh-TW1(q=qsIX61YtY&o(5=X#jMu?%K@>tOPvDXT6pi=!T9<@^TBe8gbp<9(PMwaauq zf|-xQdwKP70_^)5TX$bJ(3g#cU8{Fz!mK4<1G6}mz$}hhScb-N3(Vqp5O%%#eG*o! zY)2o*8K&+g_Vwlg)A~8i`6|ok@5xGG*Qt*mz$~_VVGPvB$4_Bx)yFSj7Tfc%+ttUL zF!Qk+Wnd;+XnE5zufak6^%-jutwNrQJ!OYz(nAQG`FbjD(%zWGi%TgbAz|6-} zu&Y$|Cd{<%Lzwy94>P}MMUHcby32%_-_v2YXg>PEuGG6%!pv_4%=|8dh4k(snCVb0 zY?S(a2xjf=DVWvo8D~4rkM!<^u!+j9gI%udhp-wL8a4 zRX*$(WSLF}Shl9>Xqe?_7|hCV63p^Z20KQ5%!SF5f|*VQ%zXR^X65%3%*yXiF!TE= z>=^a?H<-NAD${uzW`5h9>y_WPU^Wvz3ub=%!p!g4FnLv6rgJ{b$}a-5@+*N^`OSw} z`MnOa^7}7rqLxA7d0zUigk7$(T9}pOJuoZD^)M^Rr+n4`vy%J-X6Z{C=s3q}-ZEji zn!aq&ud8G_55vsID=;hjw_(=1q!07_wuhPD z!(g4%?~yR`dm-#@M{4>~Sh2GCuwN*P!4@d%JRDo1e$Rr9QQ1h?FO`+R?ol=eW<6&U z%>14>g4U>hyTZ)xg)s9w8D@TG!_4oyF!OuD1?Z{zJribrFMyffNig$!CCvO@=d-(E zKh;#NgZ)_9M%cHNZH28@_AboI`2*PT$e44&3N_wOVOCa0U+C)}%zT^;GarM5sgI#B z^DztN>L1M2KbZMl1v9^Q!%k4Y_rc8X?_sX~!Cd`=ncuxI^ZRd@?67A#pTW%U2{dE# z+Z*QUAI$uYhMC`DSZDQnDa`y{4;!Si+kCdhXOF_H$9@hrR?F&jpEdjJjELi$tD&3+ zGkb6q%q;`|?tT8zRPEa3zft{qe+zER~-Q|z=+#L-wcZIN% z)!j)jb9b@t?lRxqWY{U{uGDvTr|<55-`!f+sp{^RzPrD`R%i;|hFQ6M2(xl&d$Ct< zg)qy<=`c&*S+LVIyk0O%-#D0sG8JZ_G{VgCZyw{7-+y2hUIyxLqL#}cu+ufXLtz%) z0GOq3D9lE$GhpWTDwz3Q06RndUJEn7L#d!!G;bv^^Km82e9VW*6RGU-z|6-=*zM|L z4Q#x!H({43yBR|_LD~JVsIsSE7V=h@h5Q2SObz)Zn1%cyY^C~0!;l!ugMD9R$NB6o zn3dHaqBmW;24=I~+hG>lk71qho9WyS>#DJ>g;{K``|jTL-R*(Nn}IW(4}5nglCeda zf?+TV`C^!b{B2k_^>G=@LS6y0`nU^bWwjY*exHMx-#@{+tKaP~^LsvpcZ0?@8D=$e zEzJBbg_+-*VRGgt)43I9ejkEaY)`?+0DVu|rC!avdzn`=GPtsuIT~gmp9HgzPlxr? zkk5iy$d|yZK4$ssI+)eWEj~Mqp@`K?WRh1i-+`^yv^)T_*dB(Rge=o}4Ax6y`wh%u z`@nbisqfC2>^Sn#gG{F_%-o#>yOmH1oS`rac{I#IE{63{AD6<+$0FFz9Px1*Y`L=4 zFrq>BD6CG|voH(qMVN*6XINhi@2@ZmuU(0^QrQV+eoyt;0GNexKFmTH0qd70`M3yX zpk&To}EoCz|TXv+K`Dn(ZLFF?>mQ_@8s;PheaR}vi9*(7^ zYz@4d3H5(TcSrst?Ot6iX=8P@6qNkj1WGa(V7PT9%<4*5NcW#j_Ll1|q-(Gy+waTt zOmS9Sn6sw5>U2L3>?J+<$_?+6=JFgSM?sHvJr}6jCpVFv+?7(3Klw>jWr7rhHj(?l zGn1-H{D_;g_&Y(0Qh#Y~MQJs8!Fe|gr8Ts+nxsnhbMQK$O2qR%gq4IhX-sKF)$GbZ zwG0o$CTWyvk#wHz%ERf-BDo$8N_C6?#qeAJb^$L0B~K&W`=j92w1io82@C0#waJ>e zHW^jJBdvkgZOBEI_v#UG=hW2ay?XinSE)McMO2IV3x-n4I=Nm%#YFBEq|}RCd-XCK zetJ^9czz@==|}RP{?g{pyL!4-iug_aNu{)>TqUM~{7t$u~n-m6F>tFiVOD9v zLb_{WG6$tJnN^x}Bl7XFJdVZ(JCdxLKeUOC&KTprEP?mH=ok9rJ<8IaKbHq`i?1-scdO^((2^*pwD8=*Ze6<-6;_m1R*IX-d4=7( zb_+Rk%H}R8nXRFnT{x#?As5cH()pD$Rn$*H@7bep%KZ6+KeuFtO6QbJD|OS6k~R&l zY}x=#Q{l{#io%k@sq<#bkU)YsVA>B9XG`h(D*0?N?NxK#Qk854_+%4rH zIXx}8`6_XJ4SktjGL^A%Tw%^Jjj5^-eL;CbQhx`kr@19l|Ic+JseD?M{^WEXWEe$c zvaodS%#yiNOXrl%t<*9(m@@a>_B+dzO;m3xjbpyG?dj#zf|ew$_%cepuxr<@(o~s; zRFuq_KU*rp&FR^N-9=B;wPzl@>wa#VJ=pM)%R`gnYJz0_s;ZLNW!IF*e5|mXtI~?f z(rJ{!Oh)qaW|WuA321?zS1)na{woU0DtwzD*`8aHkOl90-t@wXvTI5Ud-U$3cEfB< zqDhkcTa?``!^v?bw`_Iqwfd5|W=CDWb4#u*?=qvylxj^*3AQz!@YH(=$&+*>*g}cd z4K~>>Q;ZceOUmb$soVax8sF!ZcNI4Q_HA(jI-8R=C6}HdhoX zr9U{BcoQ14ABR_N-$34Gmdu`hb=frf8LxxtE{X3Ud2;)Z!f9pYrBg-IET8{R%Hk`e zGeHj|KYsargLU*p>GI=?tMC7dG+5hmb$2?63Ydm?dXm%V4HjH`h_@EUI({DAE<4fA zor%GW8_pz~Mmv~_0iPjF%{5>$WSUu3iXHRAO-@%}c<}Y(swkn2s}YqBJpUa(-dUfqFy-Q&bS}ps+`f$syJXHzYTsh8+ zFSs}53+`#WDP`zJNI80Tv2td4X~oR=HQF@0Y)+Xh);OZ3b4#xlTUs{v%=xoRrk096 zB(%jZ%%3|JkpR4yTk!v-;ayp3lL}9LSrIIEEkMtOOqKjJd_(b7%;`~hPGQBI?v#Na zcIsH6WNM&i!`;;G0iz_>Jp$KKp6)O7mlMzFe~X;-S#;hH@08yY=h>}B7n@zw#T;&B z4Yd1tE*2PWp5$InHf)>+&L6`54S$P%>*%l9aPy?icI_+*pm6{1#*>cNdSQBg?C&Ec zZ2HIQEa$V19k+M?_c4F{XZ>SmoZgf%>zaEnf4SQE!KL?Z{Nd^!ym`@(Lkrh8KG!yL z`kE7u==iUneDCVPIfXy&G5eU3rLT>-`%lj|+||(ZTK|Vz_Y&K>3gUIkxN4VUrh5Zgc30{F0heGVge4 z)wY>;|9)Aw`^IFfzUSSAM?N;<#!gcYdo6qN4JRL8eDkCZd(XKx_R1RtM^+5W{@EPDHjL=l(tMV^=7hP@44Lyx;zf<%^YfOd0GiQ?yCZcWGXKC0h0Oz$tEN_5+v^+X-<$FN*T#{$apwKNaRFC zTrwTW*$I-{kc>-^Jd9*of@BAhg$WX=x)lkMQ;@7lkX(#J(jAXo-Yn3NAh`ocV}j%< zB>NI1yO78mJLBQBhjvbo9F64E1j(sLx+F;YBI%YO2_xy1AQ^|GUxH)`lCu*edU(kZ|#Ypn*&})5fg6%Gye>?X*)j zd--3O{Mf_g|6n+>Aeo+aI{%XtXGml;F$xQYbBMZ;vl(7ESt;R2O48G0`A*VPm2t(t zQp3qsH*%^$QX#)kN;tCMXEs5?d2Q{~t5d^iuWokozZXtUN;rqA8(CY{aL!q=C^ej1 zb#s0oJ%^@*BSoK{Cd-ymDu3&?vL-d0e04LNaJ=%#({LtXeY8Tk?>L2oFp2FAy-1Ku zcSSksMlKek8}iHaCHJ@zkxEK<>q&~_6<3mFad}%@xDEN?yp`fB%`L<{-%XAyIn!;^qBrC{JTp}M<9gQ?DITpzZDnBmif@C!fCoVY~NdrwFE*XQQ8;Tm2OhqEyOk7eS z;T#^6$m;|rcL+*uMbga9Y24SnND2#sk_|{2P6$e#7hj!&lDClLof?$LI}@8v3raeW z%gHP-#N#>($)f&2$vH@x=?LR)#vqX~UR*L03C9@%5_zwO6AnsNB5AlFD3P~KuBI`@ z!+8uzBilN0$u=bO#|I^iNLEY=NCSnIid5iX=n21;4~5G43BSZ~k}U5@C4>ZbWiS zisY;m$$%6|I7Ko#MKU=>GCM_bZHnZU6v=%llE+dc&!$LTO_98xBKc2>q@8q|`t!8z z@D$1MDH7X65O1EZb5h(4Pmx@bA}LFeEJ=~9Op&ZjkvyFuc_l^iPKxC76iEjeAn4D_ z*U2f8J}Humk$B2!{f@jr#{0ElB;!v4^i3P-Y1hgCg5PP8n@%&CuoZ>D81h>Eom& zrl(Io+4u~mux}3;n*=01y7jyyS<+iZ<_T{4%E&xH(!V}Q(!J-7BuTHnP05n}`;#Pn z`^oq@7;?XEGBZn%^pMwLCP;cqFPtFhzcx|QvwMGe$63Hl&mP^kB};nlNtX1^VAPx7 zt8b?yNzd*wG7h@w-Dh%=q<`Nv$&&sX6D7U6b(eRW1;Xjotygohq)!f`w4j^b{R)#L zeY$l^mh>E$Ea^QlS<+WdCa~R(Q z;_BPIS7EZGuZ-LNKlaW9zKZJX{}U1xlW0JrMMVvWOT{I7g17|8WlS7ORZyyEvBj;TqD7^a2-c{vqN4u4zcb67JNHJ2 z+T}z412^9@&zy7S%z4f_bLJVppX{urfFwUhV=}*={QPA>N#Xi{q#(09D9IkcxWpGv zVP@grfFvvH$e<*5LQs+)4oV7_MoUKK<=z*R6s!(N@-sDZ@}*~Fe)eFR+K41Cb7XFA zP*N}x(BhD{FXAl2aIz*pd>$)8xB!^3Wo$Fg_)T_Np^9x zBtI{^G$_fP8 z^24~!cXwB#w8R9O0^jC_dfW*mKhdG~MiM#Kt=oRXIK>V1niEQXqC+wD_Jz7-{x46C zg!;P^N`9h4eJd)|1rPkSBNFO!CzSj|hthrM$aUR%?V|5RLhXTuwaHI(sC|({LOt`^ z;LVXxhdQC;Cpy%AQK7I5g0{6vS+g6+t;ZWz7cf=H;-oKW%;9coBas3m{s z`*0+b>@aGRpXg9pHyb(Es%ZyukHOW~RZb}Ri4LWArX!(#|AU4zBB5?}Ldj2bsDq+H zo&19-FGoT>=!BA==ujC^p$d)|N>O!F_(vy{{6vQu8Wrk{x6bAXnH%aYCzSj|hZ<%= zxiw`&_1h~Wp+0v)$xn2sgQG(2)!Z;X5^4`>tv30I4mBJ}q^6vff6k0Zr~{o)@)I5E z5EII+mCGj2fNKC>gIsrKMBH78Q*w8rk#Vl8VN8Rh2vNbb58u+|f1l zb1UNct8JcNv4fM1t*dQnsAz2JIXONbJ*P-#@_CGx7%n_yuY9ZO;be+r2VRJTz$F#+ zJ)FTlIKHa3s-dE$2R~)CX6cwNhJ}DTJ$b9DXl!n%+Oa=#x-s4wm!6`lYpkfAHC79pr_HUN-86Ol zm>zuYjGy9)hIv)BU!t%QUc{lOHu7)=a?&17CVwSn#l@HTn!p;oQ01JeF$>4A60*Lc zvC)pMd~|VfsJML0sl2;YK9#*`6DE!;)z0{-q0lLj-7%BOLXo}Elcr1<9obdD z(?b)-Pw<6|?3LzAvK}K zkj{DXsWKET89i%O^L!(UI*+?!H;+-rz2?~}_czAIPgK&lXy3jYQ=nNj!F(;G9ch%n zYaor^sOHc}q8qPYouv$gfR_? zkw-NfMiOZx?0~^0!ISzL03(a7?pC>$WxC~9Zm%F~hf;iceU0r2cd>3pm(QzWadHj2 zp&GLS-Y1z-!TRs2rmBWUTe)t;DhXc1+8JG0c}nyAnY^oImn^Tg=pa##JFTLonVRM7 zP8{7}inFsjP372ebIPXbiW)@DIZG<$RZXj6Stkqh%~iXJ@Gi8pidFPf+*9f%*0N^K zJpIwaYvb~gX()L^WfAyF}jzD|{If(GI?)9b&UR&6?%+HfxqYe^^U5uDX`@g>(*f2jv~{^3k-jYwZg!O$b-@4Zxboa6X(WE+_6eQi?s>V37Zt)MkBTZH&zn8V z7a}6(QG;*u$)m2oljjr|-@biwLGJ#{K>o~}9shb~WyYlE!uj)yqOO$_1@}3P-q&$L(S3_|e#g=jc*1G!$``Zvjs;Mb0y2ONKW z*pC$pFP{Ybv0Tie=pR!Y8aKLZQt70LV~!nG zGVQdnQ%j47MN217Dn4a&Nod+IJ)Sfs7_NbntOPBIvqHyCKfSJD-t>}%8RM&)GRD?b zR!y&%Ur}3KQ{6m$!uayZW2crE(=|=6p}nrFt)5je-ISK;j60Y)*3LP)ZsvK`vDR^e ztPE*(FDyTv(X6i-*et1@)lk=1H@hk0@TuR{gx!XGw zByJmeZ`WUpzIhC1x#^$BesA>l{+UkArcaveVV&#j_cI2Q z%`4*XbFhd!cQ@tr1a=PLC+kGo=2-R%;&o6rHtQixuXR4u%1rbeE`yEmdPpXOzYi%Y z;XlEP;G6Jb_z|Ry4a+iT3!DfqhtuH|P+ym6g(??|;8pNSxCCAWZ-I;9?_e9$*Rm<| z;pZT?9K&1SwJ?qA=z#mc>)=7~2B`JMH^HMJHygtt_+vN|E`<&7C-7Q$GrSMp0-u7* z;A`+U_!hh!s!ZMigXR2i`jjHB)wvOD1?Q^ zlh@itQbAnnN^_ksl1nG559$w9MzuYHzNM!%Q2Komsy;jgRUiHURUg(u)rY5{>cbzQ z>ccaz6Fv*O;dAf{_&k)=&llh{_#!NWe}VJiMtCKB9X8@>#;z-@3VOr%`C z1NAn+-{HRSU6=#ApuS`H9@M)9v;pDc;Rmn;lBRGKq)dk|ga3e6!ELY|(x`;>zQN~E zD}YFQ`1g=bJ*+PqCcyV0R<^^b5EYjo(VbQXJ13Qc(> zIaPJDO=GRnd=}N2`ZBY5wuye7iZouZRbl!VRhDi_puKrrh5DH_j@R0mgg14??Psb@ z=dji}Zr3`6i0&@p_YJB-ZYM;%c3{;9S^d=J))#v}(qT|mjFm{^i9gDF)sJEPhB#q) zHzq87oCBqfbKw+N4$p)$U^%RSw8i?OSojt=3%&$rL)nF;9)@N4t{T=s#s=XFU=3`6 z)QRvSSPQ=c@e{re*2AaZ`S1h9|Zieb77QjL9LijDX5FP+8g2zDG z?(k?x*$YpDoZHloOW_>$!>|Tk0h?eeR9Pf#G3EPn%6%@^=r7-DOTMgpD~$Yn0=GxX zx7{!J%eNwqvwh8uLG{5cWjiRaD*lv5w{p!E1RsP=y|RQulv%i!Bk?LTGDwEu)R?f<)w zw$|!`Da83648afJ$*>zvg&)E*A!RmvHT(!(4?lswho3^V|DVBU;OFo)_ytsX=Yqn- zZ6!d$SbgAjNZ(+}eG=4os4rB1&=2Zcw*8^XIdvp_7TgV1z+^ZZrod*H3NMAb!^M!k zCj4DUoeD371L4mhbu0WUxF`HO+zY0WuZ+!1zc3gc%|3lpcnsVRj)y~F1*9&9_0Abz z;SFB{8Ow#Qg+t*II1Da_2g8++YYOYTwTHo1;NfsH{5E_Wj)3pNBjHDov0zwri@F|D zU*AJsOjc@@hqmB2PVGm2pg&R=m5+DeXOa5aP&L~a6`WEri^s~&oJDcR*>=9ls(n{u ztL~(xs-m*7UT;fFn(j(9BVeG_Xr#Ij`K_p|JiocFsjATor-n#MW%Fh|{%&J7cba3n z7fCDlu2<@yDX~45COK|xv?n=kZ*v|WoU&(6CdH&}0Z-8DD=JN;R~^?>$5eWy!R_oK z(;9VM?hsUI@Mdl@iKRHb{!Bx{6^^i05j2`1AKi@E+$O=^x4SrXfs;_FHut!_A33h6 zf;J5q<^Ofm?CyJWD*6&{Q+ZGuawI?cF0-9VSyLG~9jXmE1F8)<6RHiN-kCP!Y^XMb z)!3#DIS2lU{d3_9upFil=L~o-q@IS)ft8T{&8mX;Lh5aJ9i+bs)4o`9A@$a(hAP7~ zaBnyt9tvxr#)@@t3_KrlPK)_bcphwocR<>K@Z<0T_%fv5Gh@FC;kUT%h43JF5iEcg zLrf`Jm%v%D1ulTJBjM{ITq?V?|y^gh_g|5Rs08VsGi>} zQ%H7mJQh&X+PwTTl3iw~)@Y<)P z$~C3IwiK&ta5tS>`_hxf9@>uJx|E&~@L+f(JPTq?+_Vwc`3@_snJ{?$w<6cpo9kB? zolj%)kK-dLEt+ zM?t0Wco@9y9P~V#W9j^~1?z|IKaC314~0>_9|J#)T=y*dk=@w2&9(DN>-^(xogmJ} z)$in7Qa#l`VlZ8>-PKB@L_58qW{wh>?wg`hZ_fu+x^#0={hoim+01@*tr;l0H!I~O zGKq|I&hC^^$0NPG+g;c4a4s^~R3kT{)>zzI3GWYA!r|~yNL{m5LzM}}-eI*Ff1|&X zz3yRBo!Lr8pHV($^t4cZZuz8%r-T?arVi2s#oo;QD~-fxTn~r|H+tIGi4zO+?11SU zE~2ZjH{M#WYTzEmV5|S2>*%Hutx4t6LZ^kMPAomMeBvqNCX>DPk-q*Tp{Y|RPbG!B z50Y-}E%<15->7s%t(n@BIIrStm?fAzY4TJpprRVtvIIwF)=|;=+tNOcRBNJ4VijD8 zwO3S)oiO^8Q$mwWu0-<8zcOpTsMJI+(~3^%q;lVytzaxz_%H zL-wLD=b+;Bhx4!V8pQQpYvP<#e#+#rlc$_XGe2NZ1}CT~Z^qhtq1hkG{sQT{T=u~S z3{q9TprX7+_QD6U-RcSsf8?v4iym^q(z6<90LXk3P{ zo2Fg=$?EF}s--aIxuNPD#UB%|t8V>t^$9JZuD4J6>&RFC^eL5F^>kpuBU1`SjXfv% zvp#vRp3ryoZ42zLVGm4r`A;`o{PL8OK253o@YvxaUVh7tZ(zc{Q$AgF_1(+&ef8;M z9)B*Uv&R0i!@z`DEk6t&w|(*GpC8`m!raw+W!hf^yJz0+v#6msHWo`v~#gmmrWOVB4$NO7L9aoCA%yA|2NWvbC zrC5s`SF$xC%?^=b9pku?tx=xrL{E0IC!6fa&h}*Go@|~ctMgzIKf`gQSe1?|*;?kwZuevld9oFrtP7XsZ2hg{P_A4lR*~aMww8FZrJn3APqy5X zt@LE8J=x&B>={9StI~0$SaTg$vbDyOt@UJs(-|9^v{X7SLO3o$c(S#gY~bFkP%$B< zJFXOKhT}@MZrH~@nquAPxX>!~ngYdDE^=JS*3G!a7};%(E7^Jo7i!1f3dfafy@-qK zNA`;2O16d#=8IuQcBtc`cH<%u_$zi?$=3b2NCdKn99OdSM_fdN>{-W^Y`u+(|H%IC zxUhXhzol_$inW{LO16gL+Rw-iaa_sPak%z3vLeToY@LZqUQeAM{Ust!mk?M$_2rd>cNqx^_A}nzItaTbXfmedSE+gZJN?KwL%q)D@QT z8%ZMGId?bfe-{l&j9L)Ev8V^f?AyoPiHmzYvLADUk}w(kly7R0X=2QV?LZZd6Q5o? z>4ec^#8uJ4$S?)-WOr!aM6Cd?pXS zPF${eN)6jGu*B&;MK_PXzoBy|?uu_HF5M{gMP*H_on5DN%XWUoA(a_sEp3KU-N-D37k9-n|=Z3da{P3DY47!~G%$F;T$ zw3?4)-o_2Sl}*E1)oNLNFWdJ#Ypz`8&t|z=SEsgx)^F+mL}Uv5k0%Zh@MwO&nsMe==n}=y%Ijvx@@NtvQFXG+2Pl9?x%!=Qd?K{x#`!c z`X7C~YGa?a(5Cj#rkg%8SJYm%siU}060-9W+DkThU%D937TVg{vb7f}U#l~(wa>h^ za~aqBM95@NduVf8sJp$SyRD?Fy=*{R*+!Do7Fyk2lG@st(8k}E)mGY~yLHWFn@6cx zwVL;B4{c2hbw6$;6R>p^-n!lB%DUP^8?PC#c+%e6+snFIA5Ca8lGc?8ZJ~{=EnSJt z(>qEwoZ3;geX66N0er1Pv2NLo?{pY{+ge+;CAAE1FWHv%VCn7~?31-i|JF6>gBA~L z4|N-V-CLf1BGe^ud&%b3RY`3nn>$b7ZUd*W(yqHt^0KbBvTe~ZC$=0w%xxuWT3gm6 zHul-l*UpEsHIEnXz1`aKd`D=*ln%av6q~%VZRUFPJ&{qNuFG~Nfq!T(=`tClM7ZJ2 z<)yoMc)XW~TVCa}G+bO;ACBp3K5N&mHRZjicjbM9l)b^^OK3yqYhS&*M^~Kh_qx1C z*OxNFJNhCsoP43sb&V=ZZK>f4VTqwGN>0faX%Clu(fUbpbDu3Qr9Bw>Vv3`Qq$^i8 zk4<~Hc;z4QUUSebFB3YA;!RP5O5hm-eOJc9~kyMe$E+N!oJPmWdrD+o)+9 zeKoCHsZf1zYEWxScVf$av@MAxTieUJuPNSp+hQ_dt0}Wvx4h`+tMd$}T3vdvsZ!n1 zQ6#BK(SoQ-B?YR~MpLD>QKdHes+60KvTk$f-AerCgpr}{FG9)IPNna#qIbza!p&wI?8w1I`7+ikzQnHJJRU- z%(5)E7jgO)r?hY%mG1P(v_-GLjN*!@wL>5uH@)~j82(SId0Pibx0Y&GrK zUbZ!{tn2YU$-c<8CYE$Po^YwJv!ZJwsuO%IR4~+*zMX@q5R?tohCynrOSb1cZFeMg zyKM@iTOM=2PWyd7V}q|)3ZqNWJR<5{DU8(Uz+F$Y?ss z?qhaq8t$~NP5ax2Qk(X)5AEKxn|&yS*7i1Yuyg3*lFw;(KX3h{EUjZP#dcn(yDaU& zlFt)YF^FPBmei6$88c1V)-6@Eva2=^KI98LQkW7;)U=j$uX=mn%eE~(i6KC@Kji2{Gki#5IOANhlMkJ&9<%I}Uer9wj0*GYvpt@m z@ei>*J_eUL+2cihoTNO?Y}1Rev&f6%(zGk}D8{M6O-I{9>%_|r(RIC@Fm1)4Dpz?V+ip^luFFHuh=SkH3jcKO^yzZ%F%%)LkC7hb5g>V ziPBbIWpWQ^GWr@AmFu>`21G?ar4PBBaOv)JljLAWaq<^@V~!@_qR*TrVVjzSF1uGU zS+5(e?k_uUY>OG~owYEyud0V@DIO=$dQ>qGjoqzd=0V zg?&$IeQNs{CS5x{dy1aJ$jG3^YpLE)Akv@h?0jyGy8AUMPVJ#JohJ~Z*T!s?RHGbc zO2U+Z#-!y$=1A12vV!HZ9WTE%%wB z-^%tfM*k~2iU)pi(?>1zf-Blf(iz-Pl`) z8k=sbS$*UbSDLi5T3M~DUTt6X>dpz&cBkKdBDCGP>d4HkYgA}pOF9)Qv1I$>2^sBW z+fD1XeakDYEhKYK>P%v2`{ULydO*{EZ}+m$?bzLEkC`^DOzXIllhCb?DoJl%;6zf^ zomjU0@jk=&UZcq=K0|AtFxfj{WabbV2y~4qQR1A?8D3~FaZW75e6g5R*{P-idm8f2 z>x@D=LuSNlE-_B(h7hCa_#@d*oc@8RGXS9epGxaIAmWemqP}K8>&GKZUo)WflVh6r zWTl<=s76aKDUjxSuJ-(IzV=WUexj}d!CH8(jKH0+J;)% zQg7JuvYZ;3kRCJIo41DMe?Z!UNy$urOv#z|3|dKDoHWSPo_UY5$MN(8W=X5wNHT#| zZM20+39GgxrK~f-R=rMIQx~TX@b>IzTQ{b0JHrT{dEJ~UHF?#?{Zdw$=%0DRcP@59 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

        xW zZ$s&K1eAV{gwpR(FsR?JJO69+={Hh;cg>X(?~{jf`MF!XIYmBsEZvQQYHN>&YHLq` zMeszZez6E%0!Ks5DT<-`!w`G`@)en0>ndKq=%4>J`E=#g#a&ZXG5umZT}>vBrK?gX zU7ZG{tJ7f-#I}#o)tOMbItxly=RoP|Tqs?Y!(hGAJuvl&J@t$6=70YCX3aibMe5bR ze|1Fg`Jc?8{kxw3%_ZNZzgnnvvJUPG&xd+$)BwlAMyTgTO;FE`nxUQ>VYA819~Qzp z*}n+(R*&)Ke||k);M1d5=l*-t7&HG<-e^3N!mpB_wpQ|8dTfKz<26uvycSB29Z-6_ z4oZ*LL+SAbC_R1;Y94qalpenigL=ePT(9SU3Zrzr%x{5Dk6wMm!r*_yIv3@Gbe7Cd z;|y&#lgG-NpF*{rcR;nBcfun0GdKm_1=V)m4WEO*fG@y%pz`%z*jru2>*xHs(wC3y zEn&7>=XOz5#q@LWboCH`6S>1rh`f~%l(g^fC+tH+>p^#qiz)_x$s}XVHW5?XK6)>?scH3YQlrH+h zpnf$j?(Kb1g;Dw*;CHc4zmfX8Yc94>-JHwM-INc(esK@-Sb4J-R9m|@R9m|bEP~&H zs*{7^C2(J;ImHloA3OjmUk`-6)m6NH(XXpZe7f@L;;yNxn0_&yt_~xQrK=;Mbagb8 zu8x64FcV5w*kU!h%7)Ta9+a-I&1!U20E4>HIQQ$!|5|*yiqtE6;e^}Qati2V&E9&4cVI3EV}sBv*``#Jxd;xeBeBlU6DTs#r%=i<#NE+CIp_pn24 z+RhfJw)0Y01TTYXI~k~&w)1lM9Q#+o7vNP;bBe2BZ*>)~pY!X=42Fpti@=fj->#{u zn0_vvu5KWYrK|5l^>aUj($x}J1aE@U)sLXYBtM4I)h$rES_Y-7TVYUFFCib!&+U_b z6PW*DLp|pGA%)TW<#~RW$E{cP0tvTu*TOg9AK@k_{rwdN%fzpd_qP947^U|CeyzST5$S(-%|#u- z{#W@RUH(7z&ICM)B7Nf>1i=}E1UV&Y6uc3+4?zt=1T@@-$3_DZkZ2$gg5b4A@c`q2 z*RHzmiubMP>aObvi069XdZCLN5fGGJQBhH&{(s+B)jidnflPKeV)j4J(|O#zUD$Kso>LFv=K0i{p>7R&~}1EoE01f@^-9+bIDCAa|m2^7En4AxYu zWbxP4>H)^URAJ9fLOazawKx^UOZ@ zU3BaRijGHsqT>Kibj$%o$0I?}aUdu<4gy8Tqe0Oz7Ze?bfKeSE!CuoiCwZh?($+6_ zbWF6zy17Xs8t23h(Kt62AB%5(14`d{0w{ea|CdPn&U{e%&T*jho#R2-yEp-qeP{)s z_;n&!Q>~K4IajMWj#fdNtD90)iF3)cnu?D_tLdOpFky$ma^_d!tfT>y%{4}qfZpFz?05m5Af6pZRC>r(RBn`*zwzGvvJ z>6JVB2JM&srv1OV|K@3YEZRK_N?-dND1GhoU^e&yD19yemrwiJm%ul9|0?)4_!{^= z_&Qiqt&+t>SF1}Mt^BrFN2RI~7n7~OF2l#7)d!$x^${pqRe;&x$DnAn0+hJ;2`E~9 z3W`>1K+$R~7}e@U>~364W&e%jk+s2RIWBXwO0=u08#K1Z`l}zuw$%Eo-w`L`qT6xy z4%SxPxG27g#zp?8rLL`h56U{)4`2)MM{rN@C-89aXHeG9egX4AZzr=qBMp3#w++Cj z!5u--q9GX7_j&BDzR__{vbZRDq`ocYxZKed;)9-%08?1plGo-7}a+*_L{~; z$s^@k!EuG7Z=(Iy%}pILrkTv)zr+usU5q2o8av`+@l97y`r7WG^tC;}Y>@vut9@-R z@NC}q2A6?{fggZ}gW}h0u%=oii;J#S^Bk>$wpcf%suCBIX*C!hi&jHH(P}s-T8#j+ z!I7ZE#ZjPWH5wGHjsr!j<3Z8tH(*q&SFyYOW;8Aylvee*q~wvf_#(%Zj#i0wRrQBU zws%}K6N>-txnwvlW<;Jj@(Y2^|AKJ)PVrZ??<_zI@!_eU#Kt191vmwi*jNloY%BpK zHl7AbY@7zl-o@$QB5)QcG4Tvg^f(iYYW#QXuEx>WC~E@I=Zum^>f8$)S2-F7?XjxF zr1W3gB{ps|iKTya^%Y-5^_`6l;=fBknKPDy62C45v%t$iiH%o)5*z1%5*x1sB{p6K zE(CuME(WgyMT_gfsJ`+nrKYh_@<{m}<+$3>H_?Xc=0=ccY!p9;c5ZCE1s{uV?gXX3 zy&IJN_8u@Bk|`x1XjTZ?lPSle6pUG#e&lz#G`U>ooQ zP@Xk?2=)g*0_9m#1$Zv_F?bWW61*8)1>OO!25YKgb=BFF%69B_#vlj8s{XB)-Uk)j*f}; zST{FZMB|+JAsXjm_*i_?6qLR*1C+kA8JG?30!rW69F)GZ1^6b|27DXb6_oY1wqQ-Q zN*3o_t*&#l3ff%Vl&VUcOQuzOd@Ne+4~kX?f}&LiFdIAw6sU=Xjf)ag?z66+8%R2cb};F@scew z2b8teWItXavqE?ODzm~W6UEMUq9|>2j_({$d@5~J=7XZ4ybePz@$*1X?1R8o;9zif z@F-CBA|4IOUc@1w%om4(`QR{6_96}kWiR3gQ1&8@0bc{hf}-IuV6P2+kD0!rw{)6KNr(OhYxN5Z^rT^My^Tyg-Ewn#y>xK9CQLL$H(HEi@|2#Tu?N-1k47@LFwBs1*KoO43xg& zDp1zrR)IGI*|#K)r5Eud(18z@@c4rYUQfTGo% zplEd$C|cbQidGMRqSb?7R4ZwBnH;S-0@1uqcOF*wb(y78VBvMs>EEye{GYPy4@s}{?*l2{2SHx zU38E(`ynW?@*_~Etr#_sl;sl-OfBmMew95*{!CE8Wh4IXtOHoA+kW|A6ybh(M= zl;W>w-+2I9hz~o1>0lR7=AT``c3^j~AJ_vN0rmvPgT27Zz~11~;Gy6`@GwyHI2?>> zEHTs7IF;Bad8E!Q;kd=oIB1VmB_^f+`t`=fR3whZM)6ft-$Cdg{u>511&4#;#u4CN z;3zN~91Tj_9RrR7$AXuF$AC|PzX6{C^FYz!1TdKRfy*T3rB&Ru_Sy)x}^oI0qE1=7OTtC7@_^87Nv^ z4vJP+fKjdP!7g(~f8H4FH`}IFUB8t)Ql2|FZg;dww5z)J<0~>rar@2Ab|F^US_y~$ z65mK$i*poM<8}C5{PibL<`6f5ZNQtsuHY@8Jm0z%90lG6o(tX%-UQwS-VELiiqG!> zYpSC>Z;r0Fx;ozB=oqxQ{~Z~%9ag8~pYgls_%~2=d>j-Vp9Dq6r$Ev1X;5^01{56^ zf}-QIpy;>+6dj)fqdKm}Ueh=yd8Aw`IPP?GOti%HO5gc5 z*a>_G%m&{Dhl9&N={w&8mw_LGvgY;?D1NN~YpPYUIOl40m!nnC=IW+YRpMMSt=8gW z(dyrzXtf>`t-b`a!LLBk>T6K6+5n1H--Dvn51?rEBN)}{RqUA@ew<5X4k&qK{_-Nn z-Huj?c4anl$mja6Z9NC9@*ApER@1t%UTJbnj07jRC|#nkn@n?b<~N=m1N zeljQVBRVO~0mWa^{@nG^`i;#TFb>N4Xk)MixHGsX*c3b*Ob2CsGy}{Bn}M=Ex(m1n zYz;mOwgE+tUBRfv|LywdJ&wjfd#oxkSNC7rWDdC9B$oblmVc{Yvh~q+=pb$O08nD$ zfuO{%4qz785j+e$7?kzVPT+}PXYdlR3%C&M2`&bEfwDf@8;t7PG_B^bQSwOn;^4iG zzKJ$mH#devW25*X8XJ$m$KsoTp!BzcLFsRg0<*!RLFsRE!7^|Nn8xRf0(S&QgW}gQ zU`@4378_ly?sK#X+G5?5s!D83rqzk!b2OL$idGXr(P|Qy4W0~&R+GUpun-ijib2t; z1Qe}K1EX54B7GKz9~&Fglem}oeeuJ|7u~}nc_cPgaNO@`m1tLHvql!@{nxgRjqb0% zZK>}!`kOz@qeBU{erS{{bnaf|=j7~$R%wrAz9T^KpR`BmGbJv|>rAu}pPmm&teg$D z051S#jBz2jA9yi%Bsd2g3(f^6ftP?+f#u+P;FaJ%!K=Uu@M}w;&{N(K4_;^r6;BT+9olxHc7ATyUf3RQ2ZCw{zkMBpWX&aowyy8IC=-z z7Q7SO7rYzH0q+6FfcJtE!TZ1~!TZ5w;GaQx9`Xn%Iz0+TwU@OfxyGinPxgBOl1Iw< zD93}2_K9|1H#c}l`<=|;zr+usVT>cs8lT3;;+tnd>7$Izu3mmP2c3L;3suE9=Y4t8X7Oj?pqSc3>X!Q}84OW1n z)yJS{wE`5aR)M0`YEZQL6pU&m>uS=bHr1}GTT^|=(JIld%tj6WGx>P;wM{zJ|Ni&l z!r%R@|&Zl1Iw5g5%GQjzN3u{=c!WM*I+sbNk?9 z@y&st^qmKRoxqM@Hh3^N9P9*2-`N>l2KE4DovtS+e(eR;RI6lh&eiG>M=QV0)lsRc z#JOZz^~1-a)sdiRH3$@~27}q)QJ`pbG$>l-f}+(3P_!BeidLh*s8(-a&*bo9QZaJ{ zcix!n`~Q+h<~Z^_f=3;#678z$ri*PoZ>+L}+GDHlIW<2zj!z`^&EoK1;xB1`?wV>I zT8IxPfazcXD1GKcaBuKrQ2NZtp!AuA-~{j#@Cxu$@Hwyqd;vTS6g{SaQH@{6?rI#J zA12##DtV;N$$H^m9F2qaSXE+D`mb#=l-X_)NA(q7MfE)k9mId*i(+(QYz_ z|4Oz_cLP2a?QQ~_fj5KF-`)adgSUdx-`)n6fwzOQPIoUT>vZ>lvQBqDSW~T%#YR`F z#~iJKwpcf%suCNMY4sQJIT}0xidIj7qSe!2HuwxES}g?2z(t^F^#Ukby$Fg{FM(05 zDoNjg!;g)_>xELyR3(q}>)&zw&Cx2+uFQrE`CR{1-zRhz&2;gx5f*)#H@Q^O~xhC`N$V-cn-J*l;2cc3$6#h z0Hr+ZLDBt7Fj|*>z%JMD>rylZ&!jFz*Jve=)a`FM9(U?e(C({NB~tpY|F23JsZ}NI zXWY6Zevj6rAJ9~^XwbyWad!kol7`@JU?Z?SxD$9F7z4Y2aZsL}?hNLEO~4|sDR?%R z4&DW3fM0;Ez%Rkppy=KPjMk+Ou}hoZR9#B8<|}!m{IZ_>gj1Ii{ZifBv?A?tGKc>X zKZv&On(totSbVcD*bLks>;xVFW`hTU!@&-qXm$|zCfFH#8|(s#U%P@e)hb!MceQ%b z(JE;7byKP;@jjVWeetnq)ejV{`h%j?05BWO0Y$4LLD6a;C|Vs2idMOxXf*_kYPAfz zv|+zp)%14|o^rHGv@5guL_XJlZI5{G2IKA;XWbD%=PfZi_P5q1zLDw1?H*Ns2cc&T zeg|PJdPywL2PKw|16zRO!QH`=K#AoOz|P=Aa2PlV%m+^fi^0jD{0>4P_zE}$d<~om zN~6h?#_sBV2jOX_UIcBpYPH}h{%f1X?%G@}v_F{Ry95*+r0*8}rESY= z7J5m4a2_aY&*y^@8)t(OmoETCy9+_-CoTquf^)zV!MWg6@DlI_upE?m_7&i(;5_gj z;FVysUaZDm(>N@7q`WIQo^k3$qQ9t{8)Tw!So{!;!#Ch#@y$)3^zAo;qS-BAHh3#2 zefw>o=zlvXefB-z2jIP+`1L-prdlP7!>(2f9j$^kTsNhv5{Hv%^(a0TtsVzOt0zIx z>M1ZAd>Rz3o&iOxg`jBl94J~n4~kYVfKjca-DPt4ak!YdQFUw5l1JjhiyVs_trG3Z zY-o|s^8#MTc$iLD=k<={u)B5)=6EVv33JywHJjirxuHIByAWNXrr zN9x=Q9E%-|gZ5ZeVp96AZ4y(ro5a$;y84Q*qWXS;4&uLW!JWbHK#5-)!7T6x@G$U4 zP-0{yC^7OU@DlK6a3Q!uQ?t*vJ}6o=0HgZKT3tQFGM)u*J-;_zc* zbf0fF`J!vmlBXeu#M|c_trG3ZY-q{iy#LzPv9Zd6^OpFHAU6`4-$C%_JIS~Hb}>KU zF72_*cLXT@lfG2?%u)_{9f>yL)1hEGI1H4v<>8>rM@N7MfTKXkI~qI|90N`U$AZ^@ z$AGfG_XJSJMJIxyQ$85geiimC4qy9d%#=Oe(KTerBX#j(j^`cigLYa~dQ$qYZ4xtU zll0oY%lz91#eY%lC!>w{v;=Glo(76*r-3r(oDS{}&Hx93r-R3UGr^O=S>V;+8KA61 zoeM4p`LHt4={zv1eRH&}X*`uYQqFYn1xNd!-S_z4*#9Jc5Dncm-%IeZ_~r^w`sgb` z>7%a#v%#xD>7%a!%fM?v>6>o^rEmTtD1QADSW~T%#ZyHDQ` zc*)T!(XPzqm@LlwuWcPqtDlH$k?)jN6HgP*YRh~_fa1SspSlEX#HX)-GWUEHYyrLo z$~^IPa6j-3@JR3<;8^fYa1!_ycoq0I_#wC)tN=d%MW+wJsP=2HXL0!2rxH&kkJQDL z94|ZC2ko?~^rZA(+a#XWCh4ohQ}N#*4tFf|DcXonzW~L)9+X)3B`DvU`3l?@+yLf) z-+*JlZ^4P+ci@%aMo`93zknZsYz8P3ozlRl_N%eiG@eQxDW{Cj{_bd>X!mtT30hqgBvO>!wsy;%PFi_QuDe)d8Sr)d3W(4g#~mj-Y6DFeqAe0!6FtplHxK zQLSFZF8#INrxp`;-L>0}ypPULC6Dy|FLJ!ErJ1)c)R`t7Nptlt)avVJ=Syab#IE(E88i@{Rx1#ku!)mX+* zHI0vwN6II2+SeV86YaQeZd{4RNAW{6KK>RTi*IIw(&t_XN}qcXmffHl=BS$uT0TIy&Ow8y$BRh9UdOsnhgv1s*2P_()U6s_ii+2GBf zXmtxHTHOkYR(FD;)m@-ybvGE*>K*LuIsEvT${r)hBYnGkkK_$Ut3`#I%z^6bNdpr%c1D^p81{Z-tz{TJR;IrTqa0z%l_#F5$_!204ja~*t!@q;kdhr%^ zw_Zf&qRI9cNgk=EOF91G)Qg}ESFIML^k3U2rq;4*q5XkdFT|(Odhr%|iJw0JCGLI* zN^JZHl=*1|xEJ^_*b)2$%mr71dEhEgp0Te6uLC~?Ujjb|CC;w{MZP4czsGA#CqH#Fcv$=2av1s`tD1G}+p!DrOgW2FOp!DtRRxB$6 z(m;7O*ASF7#YUj4DeeT;RI6lh*wyMSN2{O>*G;La#NlLGH4~qsK`T(SY6FT^yMozZ zTTryh1k1qPK+&olC|b1#MXSBRs8*Gv@4(@=tD1hd=WR!;M7uH@P~>y{*S3zs5+vP_ zX!iR0zu6!`vdbpE?&AjA&i}#Uup8_*^`Fr~U&!dHJA&PB0Cnl2JA$PhOF!wqL@Vi& z(>X4+#*SzzvAQ=X_Cr8<{@MrJ9qbG44IT=L9*2Ql!NWnB2loRdW*-4c%4HkiS zfm6UQ!0F(ZU@7=5I0KB(al) z$KspWU^DPSuoHL@m!wsy z;(ao$uE)os)t^AoYCb4h-3(@fw}7J6t)OUi8z@@c4T@IxfTGpCU{tGDv1f9$=8#u0 z{l24d&>pKw z%vJo?Hi^UAQ(|qmv;5ly#mCaeHs+96C$BfrLfY;7pv;f|2}%rG4rYNLf)Xb`0*8VX z;ECYJpsY);02hLvf{Vd5;0xedFsiZa52^qHmB z*a2Jz9b-DN)4Xy@7t7}2g>UUr^_}Zu}S7wt;7U%s}eV=T@-;Q$k zEp_+)`{_y5aO$pC^LzZ#le^2)UAhPB#AS*5Px@Vrd(cLF`Y_l8{4>}Bd<2xa;-lbx z;9tQb!N%*?@#L+&{?(61eoM=2vHs|>_J{AqX z2BnYw29!SfTQD2^4wOE6BUlE04@%$c?PB`oG*IR|^}w2Hl`NjR^V5}%RzW+hn^IMY zr^&R6<73e(9TcsafuhweU^dts6s=l-WnfECwAu}nIJ!G1TI~Twwfc^!Z9}5m7AZ5koH*SI|3B{ zMf=qK&_;aP36yx+8EgS|0VSSx1tp$#2ag1MfMda);3TjYcoo7lDX+YtP`{x=b8@ze54^?eDQ-09=ybBR_b50q?oJ|r%mTmHgJsNpbB{DX^U?DamiulPBf!j4k=GsAoK>3>4(r+VE#IIO{vTW0dTT(!Ud`ndA?0C{uFP+z=^pfB1#CU@Af2hZw{)glZpH_VGwDD82jw~#iI6Z5>S-pDf zpLa~*)Pmxf)3c5)ES;X$xl>-@)Com13MN83cIw!Wd^9M|vQk+*bv81$kYT<~Dj$JxV@Y;{=l+}LXNhMi_ z0)-`6^1fTvfmtW20lOH?o9X6FFU}sC^&e- z*hh8i<$shXePJVx9oc=fh8T7mT>9IF-g?X8+FryK^A4uT+z*R;T`h}whrn_;;-35u zIAJj_m%jtlHr%q9cOtC6+D@`8=9R#XP+O^GG4Fg>Keb(CSw+trVo{M|S zEsJ@d!Q`oS-21m>F|QIPzn&H6hnftFc}-vks;!x2F)s^tfZEzy7W2Bm_E%dE%VORD z*nVmoWLeA`3)@$1$6FTjCd2koTajfk?@ZX2 zYgx=&36l|3+*@N=%=-o=Gs?L4y=BxZrj8QT;$F@htAOwJhfC2a_F>aj%1A zF|RjFo|wkHLoJJWN5TH3wxO2Ayx+j&=~~>&w~Rg;_PN?hEQ@*Pz+{FS_s+8{=3Nex zr=)T3D$8QtO)!}a#l2fCqi=$JsKDCTC z2>V2B8!d}@4G8@!)V7mlF|Q@;W3}ySSzejFyNw#!Wijt-*jsA*&a#+SpAr3=YHMU! z%xeMrhuYd$7W4Ljy`i=PEQ@(PVN2E4$1=tOu-Da=Ygx=Y4)&VbPOvQIodSDRZBs3a zd1t|1QQNte5%XZOb1Lr5vn=NQ5%#j$ZniAuJpg-2Z4X-(^PYjdsJ3S$u{%VOSFu;XTi?RPb2iT0MoyeDB~Cr2ZeiiE|z#+ETQ3v88v zZE~ip0!fZXEQ@=OSr+qd+s&Mfdv{qzE#93GndTU0S==kIEana0!<>zKqb;K!f^k8v z(KySnxR-7jBk92A?P<;uNnjL$9FJMXe8#evch_F#Y}~ugGR6Y!7-MRV0?XpwWXn*$ zy*V5Ajw(^b2S*ZLXIabi+c+#<1Y6#XXD-y%ZL#B zF>2Nv7g!ee=2#Z3%{KIMEu+?17W4XcGH2snwq=Z; zVK|dgZL}=zRazGF)^s*!;zWqe*Qb2jcRwG40c zX2z#E=2#Z@F10M?%{s)KjeBQXhBsgc#x=V2F)Z%&vJB1p`nJB7F*1T7CpjuDi!;SH zHq<)IF#0RYxGoHd$+5(;xc8!E%#IH?XKDME(c5M-6V@Chmc_kN%VOTRe&#G~-!kGQ zj7q^ZGLJAU?qyjP^E&nSZQU&6K44S|xev>@j{(L;|CeJJ?b0&zfKg@0vD`BBunawp zG-uJnGV~ZIzl9??=2(Uvmf@E{<}7+xh8{2~89BNQHVi#1Lyx0;TVKn#4;U3s?!z+f z<7i`xvF>abdRWGFVN^zPEU^qdEJKeW<}7+xh8{y%Inf*?mZ67b=rPQkMGwo+14dQl z8kxflLl4W)V}x((W*PSZqaw?FSjK&fG&b}YWf*!`h8{2~H#wGDh8~uo$7pjFJuE|y zF{~(Qjyaa0hh_L>tT~GwmZ1lX=D;<&9b*`JScV?Q`nJB7aUU=mhTMl`+{baoh91Wo zh8~u2T^J3B97`-i56jTwH|8vQScV>X+R(^RVi|f^h8`!Fv*=+NdcbI2j<}7+xh90Nz>_l^vScV>!p~tD_EP7am9xyrr(WA&P^stQhF~zqXYZ=iL zHb`@Hnrc|w>t-2ibH%=`$TG%UFuD$|F`&e-xHrf$Mz5#&wqBMo=7JriIo4ao`m<$> zsi&EJKvc`u$}&c?l0ETiU}$uDGSjteYf zWMo;)yY4J=HtyYM8TWBEzXh#13M}J3ETaycW6n}{Ekh632+c9zw}zpIW$1CPZ|h|l zdcf!cxsUahp@(JorOcc~56jTwJf7ZajvFmQ56fr^=bN*P{w<^J&*nL=<~Z9j)&MM{ zOjxxR%97-&flA}jQ%a-&aX4idAW1TxO2;5UgI0gS*~jt_XZ)L33pP$*{OLz%u3m zH~F?a%eXGAKy$R8Zy1_eM!#{hZ|iFr^K;ll%~Agr!YX5pnMFZO2+h z?Sv8HxJK69hQ+=1mQjLxd|PwNVqO{S6wUF9WwcPs=mqXIXPLQLMjO13Z_{gzS(ecT zEn`*kesh){$ujN(R%Gtu0mHZt%UFMT(6WsYbWZSc>0<5+Wyvy3)q8PVVobC!FvjO)TmG{=BP4I>&@Mos*S zZ_Bfcng}~hbF}}fVbny+D8XaCt+i#e0N6CmvD7l!pk?#|e=}!UHL#3m@HoF>pgGRA z4BuPEoj+mDa_5$z;FIRNP4uFcahH}+cb_t6sk@f3_Wv}$jG)&jwTyad87pJYn6pGv z%czO4(=|udLc^$umQfQI`L^bkQ4?V^HODKKQ4=j=^tITW#T%Bf8LxW4q8S{gq^858ogi`HPJF^L}057Y?EK) z8zq|K5zDBFmJtVEGH1Cr%ed~#=J(DTde>P-nJps@{@t7<4qAqSukbAuy~ZrdP|z~s z;H%~=anLeqBJ8)Cqy1}!Q4=krCcf_5T3bd3BJXDR?r-iEu+kq(W2fqXX9R;WsC%2=WCAU?-&;MT3f~% z&%3^@k!AF(u-Tepp=Gol%ZQxI%-Og;B$0HCMc?B)Kbm8iWkfK`@YO%fS*~jttqgXd z=2&kTqdvNgcjO)VYXpRma8^$QyGM<&M@NEMuqknLqNJ+);#qhD*z zG7q(kcK#W^(y7ZWoV9LEu-~VMvu9{oTcVi#@GjTwdSb*jbV&^ETe^f>)Wy{R!! z84&_@qvqIX8LQ`((TlPvL(WnUETcZd{-`+yu#H0)WwwlYE!#bet(Rr=aIimVj`fz& z!&yd8!=@2AOAlumJzPA^yGe80Xc_g?GW^1J6gf+qv5f1oZDqdZD6=f?U0@mUoQ*DW zme^<+eF+<4Zq^(HmeH43#t4}$G;$V=EaN#2>=wKf=?={?&NBK$%kVuLp5!buNXzKkVRved#%z%iMjf&Y-?Np<*m_w; zyM*1PIU2F~N*H~jWsCsWq-AW~ETb=h-K{z5v#m=QeTikv0|MK|z*fMPuzNJe0?X(V zEn_U2WzI4dwT!-f&ou8|&5>sreY<6hTJ|z$nL%1cn`xKk-KRN@wT!l48GREQ-{dTH z%`&dBcN(!xY|Sm>lVNeS&9RKV6|lx?yT!7Y_c&~4wLNWF%zGQwL~ZX`#VB$$LPEPDA?pRWAlK1sjUuN-HtvRGTjX30W!}Zr61|0tCE4hb_DPK3D zJSS^zPUU&$R7%I&^x_RI2;M^~e`$Z2BrYG5IkG&b_3-i`%}11vNryLvHyW`^X@W5H@&@OmnV?nx!l zg{dSOmr9~OsU&KdN}?|rB3J8zS5irIXDW%#PbJX_sU(sOq16^#_L)|j=-&&xLNpwsqiMphcXy;TCtzpho zZNZ;SC6R34ulAG9NF~weR1zJWN}^aQiB>gCq2LQsN%V(Q5}lq(q7kVik}tSa>+y!E zBwDd!3ZL{;Dv7R3CDHU$5)Dlyk$f|%S{Kw$CDBI>Quw6DQ%Q7fDv3%`Npy57iS|h) zQCcdAma|?{tuz0cN}{V$Ni-#uM1xXE)Gn1oKeOso?cKeXN+S7EX|Pr3j5!I&1sxC#>h2^VGc(&;t6zKn7 z|L=jV=Ydz87tbGNuWQajh1m=DShS|W+?;hUmTH=6gG_b(FRUnC0qcenB(nTtNIhjItvSR~t6UjMv!J@IGS=LgPtSpBwRq`fq*tm2!i=hp`As)@h;zdW`-*+hNXZvNRs|90*c?B6_`{w0i8tHo{jttqLJtR$Wqc%^v#Pzcm)}NcR zp7z;i$hvcOV^F1D-gw~R@*!(TSKj!Ncq5wb+*qg|@k5^ace|E%O`^QGU}L%0uKp!e z`{hu1Bk|eys{~gker&h)^#A4gb;XC|{Ylfy${3bx!9MWdP4$6`)@nB+qrBY{qr3;! zp6Yjke&yf9_+;CbziOW-11lM&GU}uJ{-|#=<@fuWbx!}dW*hX6Yovc%m*{WS)v$l8 z73HmY|G268ap9J&-`#Be-ocOYyJ?J%r;9yp(V86u2NO$oi!X{VHACCG*G>vo^3>yf z)62F_`9Cw|*K*1vteq`?g(*LiGs@p?v*mAnYEI@3OdV6I-qUf*mI?oB&e@CVO^+qh zo96T48Ra?a7F96G*?8cK@fJrG3W8FgIt7U$e`{tduHm z>U(s$Z04tac~_e9GA!Qy<=v@W<9SJj<=emiTT$Qdzca)AcYVMA&aB=2w<$mUw<&+n zf1C2te^dTy`futt)$7;Lg9r1s?O5KL^x!qA-&?8wj?{1IzqL!0@%L`Og7J5xeoOyt z%Fp>Ay|+gZ|r;pZ=TjSJQt}zva=*uW9_f-O5{&-aGm8kxh-i@7c2R%j2Z}W-MB< zqhG&wwQI=X@he6%-(=!r=9{~l`p)CDMQb&)^z^$Xdio32_6z1jHEF+F=l(u3_ecE? z?k}`HB>lV0r)6Tt{m~w{KWPtge;=FsBNA|bek7=Jf0<+L0Dc_<;vMJ8I&m-{UgJhhbRBm?-Smt7!wj^UYSVi3=>I(fhOK|J#SmZ+HrBpxpH8ME@7t_J_l-QMyJzjmD0O0Dc`-b`-|n|#L^<$9f0e0{RrsCS zHPTsmr4IPlpi?mNH@D;5P0iZZR*D~y_7$w(?C7_rU2Avzh_s&|ewgypUMPR{@ngqd zS^U^;<^9#gk4Ap{XdT24cl^Bh_|Z@@OZ;e4YvYHxKjKGlf1&x!=HrLCKjH`Xx5@a? z-j5#@W$q) z^g|=hONo>f#7uo|y4)v;a9P{pi&in&D~|^vv!U(wIAar!2a@i$^W$rHe`?dqw$A)?1rtNFhpW}* z$4}Acy*mHa%+eBCC0at2`Du#vf9u@eXXgIs--G*0K7NWm57zm&xj$M8_vg2iD)*N; zmI@~ih^cTp{i>(miS|<)ZpRQ! z?I{{rbf-nkA4#M)r1sIZ93H<5pV#io~~Ie!>?( z%zARGpjCZd8}~0o;#V*~G3BR~Q2y%IzjpeS%}=&ldAHvDWb2G?R>b}I(jtg2`bb&! zZ)TcNS(YQy-hvETlh2kp;&Y8M{gnKRT}`@B+H zW@A4RH4h@uX2&}z&ZoB0_|Duf?J>CD&{Np(_|El2&{EC)61lkFl*f1SK!ovK<2o|F zs|~lajmLLeDgGsCe@WwCbibpgP|41AkTf&$e56x8D3|>x^esH1Wr8&4Tfp`_w!Gzqy_W#&70+X*t|)%HubA;7E7eq>hZ=YQybpGP-P? z^|^m;(e?4Bm+4OvnKkmJejCgP+MxU7McbgP47+oD`Ocw^;i9|!wM|A>_cWzmMn-!X z!Dw&oC{|zBruz%&HHo)d&mW%|f6zt)f2=kBpzQWZRFyRyX^A@Kb9X-lZ8o}Es40y< z7#-pdJ336}kF3b^EmlXG&Xuoe1;46Ok=SJ#eQGKH&4e97?k~Tv)koe3zg*&cRjis{ z)~PsWuy;5 zq30)A;m3K~`*wq^LH0{>m260Drr)geI{^DN%S!#4rEJ1g!uKl-k*!hYc7t{K(EX;k zp0JhH=Xdto{w~_~gYo6gepKBhh^n=6d}+#0TQ%hm#+Ro2L`lkD{rGa{U)lI_yOsA> zH@-~w>vwt(+jL8(tk1W$>+`|$Uvq|D-ajMXwAXK}%Qx-QgO*T>$Cu`QwX|>82<_fg zczo%4B8XMyerY+}Z))R9o$#Bl=w~kam|qOznPe(ofvAH2$E? z2L4!U{6X3Ahu<>SxNE4JA8$tYaOil`_yZr~kIjrXJJ|8&a{qZ;g?S#gjBy$38Y`Jb zX3QP(7RF|CWsi6;4Bh09J2t&+iw;BA$uLy5J(TC@=5#v@t)N!vFm$;)*j(nmdCPqx zKjIY`hHCrhV8)-d{Pq*W(v?A{pu^H&kG>2`xd}4}UFMUwe3EQfT9f`^D?LxpN-F!= zn+AP@`xFZ!b5^2q^!vBk;x+h5i%$<){O48n3#K^U-a7a9nYlmOdT@VLpWjK}7yW*& zwqSFAv|#Sfw&1Gwr_a;bz$D+dU;{4mHGag7uXxDw^o%<4JiRvFp5M3p=U*qO4bRh) z#O5k%LBV+0T@?vhW;1D_GG1=-YZxyliM{S!Y3vR5OS+!$qjH70UwSO=H?{FH4N*2& z(LS5~y2r|9d|XRzCkTUyb*P$*jf3%iit%CVtv{}y1m-&dje{8IK1udlTJrI+`*hk* zxhA^DMWdx&MxtfoAX+9{f86f=_{{i&9wqR{TH_DOZlA2{m>}u+*xii~wAtt$7>%yR zA4FIDVWVp@e`Lw`HK}Z-1-jPn_5TKLgAo`}{% z<)KX6e<agp%U?%PQ*#C?Q;~%0s{_&&x z=KZ73Yn%s^^bRdj?j7X+t#85SHA6T1yrwcPUnG#Y$!~-#l{ea;{5LwW^xw$03$9q3 z8-8eG`Um2FExO&*dI$X>Qr!mBe2y$8updYWPt^>O{|sSn*L`SHlls4v_Dh&pNPP@q z;m7VSYmNB9_}rYK#oPVm8YOw~XU6A^6D?kT#o>{9=I$u*{^CJ1aNA0`4EwDOOv)|L&iu2=E{`h#O&5w`WHPqnwQPTNwbhm@H)|P&2 zjRmbW*?cg?_PX`_@tN@l^J{&mAMrkD8e0M=j0sqgHkE`H??guGP1n7$$G0=SN#eJ<)nloTk7a{9t(%7YYu@Xj z^Evr_o!W3a+jxAu71yu$k2Gfex>3*u-6xlRORH$4EsdJj+O)LFVExLRp;r562LHj^?QK~+mlFtp_h@_cEegeemDN0KM4G>*8Q%8-Ji^f!ErKWO#% zBS>ld!T242$Y(M;Pd0wn^=tbBI8Dvdtu`sQ{VlrDYukO_pcdV3YHgoyLz<0UYkab$ zzi+Vh;@^t4e*13_w13@(A!9pm*g?wPg>_U`2|HNX zp7lMild>aWot2#m>!NHPtgEs|VcnFy59_Y%7g!Hv?HhPrPi2E)y_8Lb^;UK@OuXLQ zdkoe`*$1$`%IfXtd50?77j~GkT-f2tPJ?AD`yH&GvL|3iD64?=SJt4R=M7MH04zt@ zFxZjGN?`+)T@M?i>}l9wWuL%~Qr4)E=N+x=AXu)lk+31kX2OOlyAd`_*&^6*WvgK$ zl*M=QyphT}!A2q*;?4K%9_MH?>J>$VaF>w7WNxu=fLum z-2yv7*$c1}m92wG?QZU6#654EvL3MU%6qO+0UgvcqAgD=UD_R5lkjOW6akGnBmvJ5$+4*jdVUYwCGtD?0*qj|A9J!OE1q13ORIkFfKVWu<%GY-KsH3zVG#yHME`u#1#E0=rn*d$2jmeum9e z)-J>IE>SiJR<3Lc>{4Y{!7fwwSJ>ssmcy=4me$Pk<|*3;cBQhTVOJ?DfnBZaTG%zp z9*144>?7Fkl-1wG^M0>vf7o@(hQh8_HXU|@vg=@fQ1%q;MrA8te^l16x##^!SqIon z%0|HED?1%_v$8+HZc(-ncB`^gu-lZyT6o^=$_|Fzp=>nlPGx7n?o#$A*xkw&!tPPF z0(P&m`Yk>0K4r~e55RWxTEiYxmI+&+EDQFKvi7itmF)-nv$77bN0fDfJ*uo5>@UiC z!TzeOFYGa8*|5JU8vuJ;*&x^x%5q^(DjN=aO4(@G)5?y8J)Gu*J$I z!=6=E1Y4r41ooV=QrPp#X2D)ib~fxqWo59JlwAOOS=k)e-<4eodqvqi*sIE}fxV{e zI@s&VZiFpWHXrtevfE()P<9vWO=b7N-cq&z_O`M|VDBh<4ECVt%I#pwjQ=h*#_8Z zWgB6iDyxL8Q6|HLwaV(lK2z2R_PMgguyxAPVgFLr9QJQztzlm%%Y?00mIeD#S$o)5 z%JzeOt*irVgR)MrZ^o(BVH=fY!@gHG0QQ5jL9ic{<-#hJ4Tt@tY&7g= zWyivPQI-eu(xlCdgQY1efYnnr8McG6B3ON8C9np{N?|)Hn+0pA>}*&gWo59PlwAOe zDVqa}E4vidSlK+-&dRQVHBojQtf{gaVd=`|!!nfJ25YA5F4!*0?t?W~wgA>b*(0!) z${vHYQuZWF#&$b;3t?@PErIQ->_u2xWv{?8l`VzsrtB@)?#h%DTaNDC-65sjM%om$GbFZ)F2u zhbS8a>!U0e)>qkZn2e!!^hU!DQ+6!uaAkS0Y-QtM{gf5Jj!-rk)?Zl>Y=E*7SdOyu z_ipjx(K}?UJ#kX=^G98kx%TJQt>5bW{civK=BN=XD|S7t<-PHfub;QiSDmTh`pTYA zJf);#VZpI8>Zkoe_20qEo-}cMX~#~Tu1rfSGnS48(C3zHkmYFJH4j;i;~fsxPdA@a$h*wI(y?^ntkU*V zreg3KaO{w_-|tMly8rp{@=^9R%VGmBOMPTUJ7s*dSj;D1N19G;T+3}(Dnb^C*k!xA zX(X0rwRJ5L+ZKc@?_kNM(1~k(f@NvQBK`BY-P|;lSkiZQEz*-M3|XXSDZ$x^PnI^H zmE~Hb4K4^-q;+KP>82ToWogJV3d^{?+%)5`WVLfGMOZ3AmNT%-YwxDH5KH#nuH|Yh zGQCWcc|MkfAD0ruyo5!j)QPLVi)CTRvJy*K zFE`Cs@;SX-%P&|eLYAFrW(yB-)9i|6ejnGeAC|JduBAJcafiAVS#`)d%(V>1QW3J8 zh-Kd4ZkkiEWM{jUGqA|SK5?fPVObcmT!W?L2sh2mShD)NmItxO5CC zL5`b7)4V0hXm9%Trj&3fwe*$5JxUwJgIjZjx(RjV1eJ*YY)%^vSLzZAY$7 zxK4PZ36@T$xRy+@oa$Qk7fX?A>4_zMifb8wWqrsp63bFX0f}qnV_8t_TBcx`U*cNM z#4_(R*D?poxM{BCS}dKWyOvwAWS6>@1z3j9a4k9M>Xild{B=@J~-HOGB0%EDO$c(~QJ2ugtZK z!%}jdYng&&`1!8oEG*+@yOueU>jKyEJF#5oT5c7~MXu!``J9Vgi>#aupW|9y!ICxC zwY-OAeaP}Dmh^Hr%?2!;E_E&S8u2-oxt69_(l2){yGfcWT+0DiI?Zz}y(G<*t|do4 z=PK7SN^)K8TE<}+evNCHiY5D6-_kyJXy@)k;N~sGA|rS#-5}nc9Aeo~EJSv*?i^T% z>}Fjwu<$8p$`M$I<7R~^un@J)3P@n-+zHDs90>~p6rDjPEDT4y!D()qu2`mqEK+D0 z|0Qxsp&tubq|hIPEK=xt_1s)iXc>VeK1T|j>sq=e`)e35JEDP_JlWRWs24Oyhj--Iku z=3QgX)q6^r4-Z+S%mpEflzDE*B4vIcWRWtz8L~*3H@cQyQs&*_&eeNKnU4rrq|7IW zEK=r6Ll!CXLm`Wl`JIqO%KT%|R~UoD;H0nNM*oy`{`oge+3#M?w}U^LrtS zl=Y@yH}g)J1ie$&v^DfIqf3xysUvPdAD9=1^C>%tbw{8ZRN znOB4@l(}KLd-cwgxkK1OnMZ^zl=<|qg);vkY@y5xLly~ytHKt_9LsR8-i0zB9JWyA z(P0Z^J|k?Q%zp}7DD$&n3uRstwovAsn}x1UnY)B65(tk8TRQXHG;Ha@bG@*IGCv=- zQ0C9W7RsEyi+lC1l(~D@LYa>bTPX9nVGCuxEo6~E_)^$Hng1QOQ085lyI1ell@;u; zg)*NIwovBt!xqYXXV^lSUkO_%^Os=@Wp3HRy}AU#K4A-G9v8My<_p6X%6wjZj9w}h@6I*0tw*>!}zNqnH|iq0WlbatJgZ-QL(q6u&4o5U&C8(l)) zpkH-zg=#|=*BkmK@qw;4x`b*3a}VbOL*D4(dPCnNKG5|>mr%Xv;(9~hByzdl=n|?M z^v{W6=$jx{SJxZ*CUMI32J;w4%C4?A^i3j{>y54GnoTyN0DyVr8P(KY0a zuC6!qP2vMxZ*&cLgPuR(4Sf^j>gIYw-y}}C-e890l#rm{d|;@hbaTC-ZxSEqdZSyY zZgg|Kp>GnoTyJy>d83=_4Skcy<$9xA$Q#6zMB(*KkgL1v4Skb1<$9xg$Q#VNoDU3n zqr2-3eUtb=*BjkK-stXnL*FEFx!z#S#Sx{u>kWOA$mM#Yd&nD1+Y*J>H$ko*t~c~e z;*{%+9wBe^aJ`{#61iM&5N(~p_i(+TZxXp&Z}bSYlpd}(^i3j{>x~}rCUMI3Mvss; zm=Gqsp>Kj*Jza0;o5U&C8$Cnb=;?Yx-z0Lm-e3mll(47k4c^2K?%ca`m#oCAbC0gw zx_9f;vvco+O&F7w9zA-1-MaMbq^HKka#@mnFmuZIFBmy72-BDQ++GYa+L8Scp;s*3 zbD!PIxyH60UX`Z-Bj{pwDoz{DxVc|{XTN{go!P8gr3 zJ0$W7W{zje#Yr8zbSysU6gCF;&EOurhTbl0qds;919OW*3MWh}o?bkuG;6<+`)3U+ zDJ`5*cxK_$leyHClER{i)69-2(Z+w}pjjqwd{?(;1yRPie)(m0PFHWBmfy`IY5H+) zp!GX5;*!EyLu5QUVCHy6qM2T^bot;Uuk)LEO}%&qqh{}9u1mfGH87#~4b$095zml9 zm2wo9Oq@2pw6J)p*9>cOEG3k0`oyBCXX^ujaEmDV^P(8a6g4a?9yXpiv; z{!4s1i#Jlx`>gS57T3gQ*MoAOH-H1dKY+)AH-e;*J)mW`fb+q-!JENHL2PADgSUZi zg13X~z&k)$-@X%+9btEYvP0`0PN-gkV%TE7V_CiUR$_Y?1F}Gg)}TK(Ymq} z;|z)^J;ZditamJ>USl$f%2Fw2>N}}j@@}%$tl?E_mSpkkQK5e12AidDYQe-=T5XqG zi_WkpiqyRY*5=kdX&P=V)uvHl6V5CtGHu1LofynLEU_sj70;MjphZ}Q#lO!2Q&Y`; zNqF!Q-K4IvQNi1QuJU@FIw4xV14>EnIVg4Y1CV+rdrHe50xQ7B zz!l&#;3ptyW#4Gox8N%9CvY{`fNOpV%C5(?pzL(~43u4qpMyt%{{n}D{{|<5Uw}7( z>%p7BufT`Eufc`j2Jm(82k>L?NAPQ~5|kY>T)S*N><+l4)vWu+ixEt7AWu&b%;MUXO=Re^4vvSwftP@cMQ zPh~^F3~&^<3njSdG zvg}Zhc3w6LWKU(8JUgM!F1rHE0{;Ti{>v7FdxO$G*(+K0CAZy&&)$QsQmVFj4IMKi ze^gHHsQiIBLvu#<8=W(NYT7uXQKp}OlldCq*xc4I<8oTU4qh%<#^#J1Jo>o&!9$N6 z##eyMnFj8eoRK4kjU*`S>|8CEFgIlS$)hHoK5<%M=^0)tGM>;{4SpS#GE!TnyUpNaCr`VSj^ zoY%x_l)t^(}~ljO)VxxocFts=g7gi zIrNaGKt=g83a3hHIV-7)@{3PR6mRgc!N(Nkn}j>toc2!St$b>JVev^bCQ)4*Wi*wy z`4gs<`lTx=ChNp$)6G6}>G$Yb*jv5m<{y_Fc23Uv&yHHv`-9hiWUP6V+MgNTvrqpM zVn5aE{=s1lmfSMadgTn4_NLp~4Zpt6 z0e6qR^}ExEr(7UCZTH_7JbT`T5f}W_ci=tu-x2?wv4h&@UD9OLcQ4fc?2FGkE+7AY z?7a(oA4R$UziC4nzTZew2vP(jK;?c((|gM$X`5c4DQ#)EXrT>FN>kdjvuF9MdcuBJ)#Dvv|v3{E!YE9i&kw&JQj!$waV}PnVH@1?tV9IDLLo7{{PpR zcJq1m`OeJFJoC(DXJ?-2JcADY6~q6+>I2$K$Dcc5?Q=uVd-nOMRAJgjPwkjDY5crd zE0f-kw(Zb~{6GpaI^?Qsa!uboA*DtEOtUpt_tajPL6<5z+ z)t_;a`;`pSiE>|F5rUV4h3~&Sf`km4TT(o%_Rc|V6b z+3;R+RLc7>k2&7(j&@YadjLw~p|rQgQ7NyGjPmLWPv5*nr97>!(Q9zpJJnGsZwi!N zd(+<8j!JpeP_!=aY8{pGnxNF$ro9^-mGbU~I?(X6i&9j|`wrAWhWC9(r93jpZpMQT zKC1kmpMA7q!8xBARPdYHHQy^oAbYP^m)6zKqcw1Ep23^wsVizO_1=2(jp$3Bd3lQt z@Of4-m*lRzkvQW%`sFrmFtrb08d2LnstyMj36+N8{?J$X4Fw6a%+tQoUFyZ?quIIyXRprk~ifbov zRphr;>|}3yCoQJ8BxlJ07Z>d9>nnB@>$y$ay~e>UO@+CQ+C1O#ba89tt|cCpk>`XS zPTH`%P&B)(st|VftR-gS6NxS~rYm>x!;U$b$a~xIs0+ZlUZOvE0$yb!1yr zFHz_oPxCP6Qoo6&;<|QcX+|%nl2pwIbgz$NS24 zw6Ca#F0mTASgCUfLlvG<_MQ^2t>UT9V~Mn@kdyBs#o1O_;AbVb6|-1qsjmc>Kn*{> zWk;E{e;W8VoNmSF2SGEj3ei6IcFyy`SVN#SoP4k?_+blLoYRov?|{L#X!F(jip@%- z7>yW~+1gscDNsE|{yijULRG=wTQu>Y)C3w$-RNy;>P5)DI70QdkGi(j>Bic&inW~| zq!DimD|6MZr+>F!`{cWk!_KzK&9j#j+kdJ7E`wOc>Y?;ik9H!)ZP4AOPPJ8R@oUK8 z;TqC)dRx`zIYCUBW&*ocJ%m*4-9#+gpu3@WKyUE{e0b+_q!X5JkmtQ`tDba<^<-Pc zlbxD=p;r4z)qxa2vFt?t0~@bJ{EAK}P^*jEm zn<_HfM2|I8E@j0?8J;#vT1p!Qk1)J30q-&>``lGf8gArytD#OaR1=ha?gLOqnXuo6 zvLSv9WkaX|D={IShq57dK-rWYOI^`WCC?iUr2$HwHvvksYen7?C>!6EP&U46p@tiO z%}_SJFGC$>LUcgc5HCR45HCWNnh+U-8GncOVG|;c*6V0P9UM@@ppG=W(NM*Png(@@ zp{fJwNhm9|7oqHPUxl*I-3B#+5P6<9kJyyv(r+ANVmSe7n4v16c#|T(7eU$bSQY&G z>EPE#p=>Ung|bh35z0PoGt@})wEu*%PwR!UPdkSGWte%!*--Xr3j*HF0q=o;*Aeiv z!N7)nH{hiiMB0?jAXWxUtBUKFHx$>@E~=}qt%0SPYu-$jT{?f{V%@%Pmx=Gn_Z^oa z2;v*n&*>Z0&*>Z8&*>Z8&*>Y}&*>Y}&*>Z6&*>Z6&*>Z2&*>Z2&*>Xp(k}@N>f7*= zeo0^^zS4e9Uui$5uYVfAOnyi9bNc$H0nDVYe;U9{eErh^hT`jI`Sni&lSyCyG%!JY zrTtugOZ&P0mJaXV`dd1@f6KSDpWBzxer{h%`?-B7?dSHTw4d9T(td7VO8aL3lc{h0 zGl0p&*U#-sX+O6wBl@|08PU(}%ZPriza#p&{*D;YzwO_M5&hf#jp*n4JEEWK?}&aL zAB^aq7o?#6j_98Oeki{FE#Hy-Tz^OQbNwCJ&-Hg?KiA)p{oMbK?C1V>WIxy6k^NkM zNA`37HnN}lw~_r^e@FJu3wqEVjOyq5JF1`S@2GyRzoYuO{*LPB`a7zh>+h(3uD_%D zx&Dso=l*w8Kli_*`?-FM?&tb3x}V2?qx)z4XXf;mHLhwXzO=S@c=4qxRwU2!C;6jo zDmIIP%|`*dS{Hvc=5|?iO)c~9+&A=n@0)A9HLv}~CyzYx^S-&pSO56n+5r_`d*ypr z&6+y3{MlfZwU*+y;t&{vR*3vc`20}o4S&4-VS2dHebjg#H)`?r3= zeEzq$xsEGTT-MmT7MEl=)43ZK;atGo@exi9clwH!3B?*d^ZhNuxe<=O6lFMfb2m1^ z`8;>0M>twRQWkK+TU7WcMBcSYWg67$zkFAp8FBMjXti(|YGa&l+VO|(em}me@evNU zkxNUTGaMFKJLmg(!)FAcv=P8M-;cidXE^gwuu02huu0DMBh#qX`5bK&h;q)!;#`!) zS(L@OB8#Ihq|un~&El-d;%Jd~G}O}p$3tS_O+Sbn$!pt>+_2Zap(R7k{lbMZehlxA zaOBl;hMhNc#E5aFW2FUQ&WI8jtPOLa)M>cLMJtXLZG{ov=- zHk`Y1($d=Ml{P`fLwQY2=xz?1yRNMD87pfW8dug=tX#Q#<*bI4mWp-#%($2rhwiU|gS;Edgtya*khz5Q0 z#%Uo&Ssy$9UMQB2j5GdXJO8u<x!>M zArnTi0+LIP=)K}X?GVgZ9~Qrd>sXY_e8=;k z_4xVA7{%6id|C#(j`uBi!AJ zpU-tJBuAYVY+J`setr}L)xwk`Y4t@_6ur{ zpNhK92wAO)+~MelgnqldHA2_@CqwtP5ZLu*cJ8?!%qbqzxRI=vI_CYzOnGI<0%w2^gEPTLz$GBEX{OxFZqj=|cA_?G*!wk5azln$WpOrql|#5J{QEcH zQ{L<{kM1P)!%X3~@d;%?mpqC6j18vd_z~kb>?jNgUWE~>4_^)HT2LQC`db!?MCp+1 z)TV0qFZX@&s7Ep=Z%%mG#Wkb0OR^78R?;ZQsesg9ez7KCIf|08GV*(Lb43z zE^nx2Y~u?e$QB_&E?E%Tn(C`sy=f+%2*L+qktcsgX&t*5(nGW*Rt-Q+b-2zi4n0ok zmdqp@zX|y%GErWB4oVMy0ZsxpgNwkIz$WlzkaocAER|+&;r`R$E1=}?Dj1h7I%ss; zPkmgrFYtT3T~-*S=gVBDC(CwneYMdpB{#t(3-tgbqyWcoU0!>&X{C#xRi78~Vzp># z^<_pY{cXUuIq$2LmcS+ch`?39Z|Cxz@*;U3z(w0?-0R3m`P&I9J=8NJZ^AZzjQh91 zC14M@0z{_GSAuVYDu;JKl|wK13GnaW7r}pk4}tV`&63@}z<7D^Orz_{w_LnD*1;={ z>AJ!wz1>`AB$NlkJD|uVkbhy>Yoyrrt2FzS@{S@msu&Q5ebnFI;CP$lZ=lrmS4P%&!i5LV}|@NJRPk z244e!;4_1IGn<=2m zhFzJ>lIL_VUPeF9vHeH^zstqzMj5|Ph}8{+Q5pRVJS$d4_Qi2>a0H$k))R?qE&%$jT?!U!Agx8y%Z8MK6+6{5i7`zyDi8Iv#U_FFHym%AXW9OEd(V_ zb{WdyP(4jzGrf&9UEmvBsB5TQX3ZPO07A6zRWEmN`A+gv*?)*@t79&pY$Veq;KAVK zAOkj!^FK`4F9TISvGv?s1G4qQjB~C4zrp=V@F(CZ@MW+8`~%ns{u#UyJdo#J1+uGN zTL7A;f>(o;;58u6_O1nQ2d@La2r~WE{56nwwdQYuH-fUNaTBQR0XKs`1#bbR54VDG z9lMto&oa`Wa+Hhf7-_~-Omw`ZFp|f|6*i`0mDQKmPGdXv@{o#^DdKFGpkf*iOWVU5 zB}*1com0CjjUK9Hc8rClim3YzWkAjjI@@SA(9bJD_1 zL@F&@XvR@~vn39%RZ=r4rkW|+uq`zAYR2sSmF9i}_vHkU;wn-pa#SsiH5l6Wz)9xP z%VI7pLKycb<*9Ob0+e2U8&r$?Bsc;@7n&=;?}9gg-ve&}*Mf{cJ$7F;ZwCJz#JYs{ z6e#`sAvgy75lB1bp-atGU9N8{ext$im>y3zyYo4G3VT5zRn{XCT$U;iH{~o z7%X2&rA@v87Nc>)&5$soP4ibRt6sX)jQ@V^SJ=#3y59VsB08gt{+oZa9aa5`w$7!d zCzgVmV8cy1xA?dAc}kZmlYE$T$&f;N$djTPDFZKv|R_qBbdAugEXG+tkgp{(JODZ9)84BHy%W%Oqpwb%Y zmap)#uytl~JM1^sb*2gg`su5+TFpS;c$#f@rP@}PY|ZiQFPWz+P3lXegf5MB_N`Q7 zfDK%}lgy-V64z6Xc{1f8InsU^eZ%69(KpIU2LO3vz$$Poco#Shl-{AcX5Iub;3QCeKXc~I9|J4E<=_5P8;E70<~ERaw7DIe z0ji8ELEhiIKcPc?8`n9^v&MB~+a@r(b3yr>nbT)Z-FM47QF}B0XBlUvZ-MzeTE-bn z>Bv})EEpM6IWlBZPN6zOHkh`QA)BM%_y%(1Lx*Y3n2+heY31ilGd{xRaSHI!f<_x3 zj5_vgEJyZmR8y@z93C2ah@FsTrgpFG=lG^~`mmW3N?v_6-N}2kptFF4qW=A8LFYR! zESxj8{@*YB(9;FmuK(@NKVdE3XdK=j22%dNX8C4cOv<>gD+|5%VFpHRnZ|Uo0y72m zT?0LV%UXdEWv#%7N_mSYos{9JoJ6Jc7G*-D^}b}Nl(7+G!>aAHVLuc2dobXAHQ;?C z;Hh`FVSgC#7?C=j`g$85EwWkQG03~$QEBf1N2R=fLZwYga|T)pYcWu#8{W~5N_nRS zywZSoX26>m@GcB^^8(%$s56LfkT;AzSXA26S$LvS-jz`5!qeV0j!Jntna=vVKk&B| z>P!>M@%vdS?VaqXl-CZWd6KkukE2rFhQQy(z~5Lp&$CP{H#;ir>9jHNQeMFzJ0qF) z3LTa5#zN`Ww0F9rh#9KP#3DO6qSD?_N2R<^K@B#%&pImQbp-y_1^&wRx1*Fn-kpw0 zdv`kuTRf&rvCJw#XzC%YBGZRNA}WQ7NyIXkE5`c#G@)qEM<5XmG&k(D&@TdrIBaa`%gz97Z}#x0!O91 zTMwp_G5+pwRLXl8ivNUt)KMvOD!fKmY431ARLUy_=*8fTc2vrf?I(>R)7~6MrMx<* zLk(}4qp$!4rCA#+KsgHAO;Cp!o=!;@mGXWFb-3X@?Wq45n@91_xWT>usgN`Uyx@~n zlo$Gh6Y;D0)*!5=zr%4wr)90btf@fvocQ#OA5X&Tuz6ne6~ZgVzsgGWhw5frmd&O@ znZmhY{90N{51UPUGKJGCQ#j_;4D%mrwJ zOd4S?ry~aoGGqjkHWP+49ipdCBQd@0x%c={<1hLEJOXj9BpD7t!kZ#gD z+ZZMq0u-bBRD&~h66(uZE^=z^dhvbr;wjbqe)-Ed&_Y| z|GF+UIo89Coi1lP47+0D&nAUEZ3Q=xT9skLh?b@zuW=Bm?K-h*7&keMSaI4l$0a(q ztElS$l~8b>+cjWBM@F1sc_!7DoW&BG`QxI%bd*i6%31a05upkxJIOo!B=5{5x$zQ- zd17vmB&wHD$1xiAc(*(st~QB}x5a56-_v!Xi7vmbawqw2ExNs>JO9nWg%w3_4jz&_ zER^*En{87*2nrKsN%>7Ql@%$U&ac}1`g(yusGfFX@TuoB-&gPT&fom3}++}39K3wzB%|r;!tLlPh)6l zJ23<%+lsnA$6ctTZ5v|pKN4$BUIU3JTu*{!TniI-NtVMB<-bGKX@`~nj?UE(SfN@! zz(&-EToWVOu86kVh_-j0rie22&B}EfSxT1cHebhO>r0lmd=)nax(X0{E2h^>JF>o_ zTZzk(`r!5lVYg$0OL`J|Hj>}!OMbJHd@mk$`h{N9(zMlUy12b+W8B*|KOLrkx-$hN zt5_R(P+(uHKx*n@&%{i^yD_EJTGib-lW8PVP$>!uV`Q!QT_h|pHr=JolMq&YOQvq(X1-Pw~2}f&~Zm%_ItHN)! z;kS0aC>Aw8dIX-efg+CBLo8^gU|kK~VD$(Si*1++bdjS+JH6{Bw_`I+ z^?B!;gHM(nvp|^(u%<@e#BWdgnw03Tuf*i(lv0@#%+(BXkbB{(BT?#X) z%SA(Zy<*DSwlO`vOhQWf#=qWu7d@i^(!hl=Oi$~8wo3Y-?X5$S6x8VF-1pZ0M#f2< z%*XfLU?sNS-O>xw1kfUOKAxp!+ryR&W!SKC`-IAEP2>kNo;zd~kWO!hvRKKuZ~KHQ z{U+X4eq+Q|xwWloYirf!wu;Su!J3nYQTn&VoJk8 zaXyvlKr(}tT@$Ld3~v9CRIuVnN>=9Vdi*#F+9_?Pf={|~R8th_1}eDDyYBk-ijKIq z-f%p4>v*^Ef@n+?8~wDQ>5uv9=N?n_l%IxJUsdrqiF}O6gQl#g^Ay^;c8neRA_|*H z#O`ON8#DS-($X~aJv3910YfM2An0d?uFv6-w6E&05(eyv4UAPp!fU|Zso6l=b0!RJ z6T@3YwBfruI}}gGh$33Dy}fFS-=QEhGk^)&ib4jZSTbzGOGsZCmRd`fbO&8mgiThW z$Qf;6$gfU?ca~ifDz-IEkv&(96GQ4n5lS)CJ_V*ZO}kLIXz-~Oo4)Y&y2;m2&$0Em zLsh#gx9h96g6nl!uj6^%QT%1j0_s@)>Z3)Tu?#pB%34D#F+440uv8P&aKqCl4I9g6 zplmFkhni)6eTcs{7M6lJfA2yu^T9K65$SA0>BIHOhB_GPG^ir)LZ}gj(v+Qj+EoFi z&$jlt--0SIVfno6%`ue5q*F{-eQvh?_;6&O6We zQ+gYejpgf5r6%liP&Vu)C>!=AsPj!&9o}HW9>i4KXcJ-#lnqf1RcQQ8fx5s@=Rnys zUk+t+c`MX(6IPRanxZT+$E=Js)bHR;Gt@x(lrlq2fwIq#?ObMwkc$qwzR*w~g|ex- zEAaQ3z~ASgE;9Ze3j93_Wz+H-D4UjUD4UjlKv`*=m1p ze}}Tt*bb$M(;{!yAV19?gdodRX^b~=>J+c^Ps8OE`Zx05)u7#Rzetizg%HSm^O)VFBDVhbF^OK-#&gTTw z6;L*BABUP|LVOFV%upRrwxl-()H_f%zc~epU#ZW7ns2Bylr5Pus2PTLHk9>uF4O|U zn+s+A>HF>s!@C2@`qSak)rNN;l=Y|MrEQKjL)nzR4rSYyflT6Bsf~oPrK*FZZO-W^ z*Aks~u?&r}kws}1^;fQ8T)snS5vNc7GzZ4-8{o}c6JwwJ6-ItgAup|_!MO7I_UH-r zjPmVi{tAu?Xjn9VIj4IquU}{^5iN8+Epl+N;btY9sCIVv%!wioce(!%-=(zV2b%AZ=c$oU-#o8UIyz-Oc93FX0O?7GH{#di# zD8eF4{N4yTX3`mf?L5o3%y82OZ?C#|Lwl2Nnc=*3H`G6H{h8OTX!x)H_~B1JdG{CB zes;~LUz<5;^`DphxM0eEt$+BKgNMHT<$JGMeb-%;rLRBm@GY;*dGN)bZhGKf7Y+Q< z9sjxdjVoHd@YVCby#HU8o<6Srtw0 zxF*8UyN$Z}OsEz(n<5-7G1wmAd=HK)WhN90Y|Unu4Cj|{c1HZX2B#;&(Nv6D;7q80 z!BI<`;T$l4Tey}J-lV)AKMc&#_UOBy#=rjg+W=hHkD8`|8ayfruV&7gE7Zr}C$uSg zkny9GiIU4R8|1?ASjErrJjjnHKPw)kWMGaOPNk z<4GGoC*wgmluHHF5qc;t&nq_1XYA@Y;#zV}7Uv4b$v2_q`<)0OQb9b|XN9^mi=$;C z*7;BWau(;?S)3nbab%Z28qX_PoX#xH-?BLS+bTp}2)^mj`c zt05&EQjar!JjWTQv1^z!aG0B_G0vzG)$*{PQKe&JoUtX-;+)cXan8u4 z0f%IGpNy78$Y2DG9A)8`T=T|PzT}r5N9npy@xDHXyZt?~#-vZ5@l_{%dWC<2KvXnl(Mpmj=U;isMYIge?K7W4QvK8}j)jH0Q<0I!UYOG(#$&rrjA4j-s+4B0} zy^^0pub9s7LI$+UgOH0>)?&TJ=$I`jcjGTTazDwKlOvZdulGYx_A?uoUCO!N_BUVq zGPjf2MZgBx;OFV#do0?7Z?*9-k_IuN=@2LO5XZ_Ww0oH2YyFdbx)@pjmAQ+krsKyI z(XnG{=eXHQ=6;B%ls7+QiH9JOdt;er>HNhcZiU8g@lof+e8U^mA&;Hy><$ z&IZc*umtq4p^@0Ezfi-jU)3pHdT88VNm+ORs$Z|9{U6N>%VS4dznTU$mVjcGaW=uf z@L21||6AsjbcDMG@%55%Jo1P*MyQBvpDf?GF-~NUJ%rOYO3-TuG3=kFbX3-`Y?3d2O*5hF%8w(oRDi~Vq#_N`(h?W z`-#+R+dV%u=3e6ld%wzTK~i!WxR?*CUfE!F0HI)(Rm&OY+1turAHwg(MRtZ}b|mSs z+FDeOC+#ZAOshTW0t%G3X`nt8JRk<{JkqB8@@b@53H>NI1?00s^9*nvh#yVCH{(ZB z*v$(-u4cVRSA$L9rQogLLh$2Y4fqpq5vYl{%fP>Yi$M*z>cA9uIVf2#1>@!S82%+{ zH{Q{X_elA@#BcH4WeTJGDBs7&%CC9~Hq#nv>*p?4>nuAsdoIY^nd+;lt~NUy_qZ`E zvia6_cPbg}+4U7d+r(5-H&E$23`x^3El>_gL;*wyo^;0Xk!)Q9#HbT7mSz5x8U!t zOf*puFB64PI={|!LaaCpF7CNT>Q+4W?P1*8~M8n06aQGw)YV`RUA zwE9lzm+aGA=(TZckd5;66;QHAUPks`1Lts0UX9EtHzV_JfXLVTCinw2Uch}zeFwK@roX3UqglT)^&`>_2KZINW{ zpo|BoMe-$Y>w(pBeWD4=S!s{U`6=Y0{5%Uv&g($w_;aA-ydIQpZvds+&x4Zl3m|3U z{S>53WN_42KKL0Jm$TX_6e4(0j<+*PS6t2tqjWvZby7york|*)H(RvJSJherPl`Li zWpx+XTeP(uH9^$zMn(4$y%p|=a2pbquhJZs?{?&&d~|}6@9UuC+XYSsyTNAgFQDYQ z6MP7K3w#3X0e=J{(`L!yZ7?q1oSe**CtkAJ@!!FVTMbbdrR$$uC&%O)9xDez9)`yR zmnG!PzFd99Q4vXc+Rpnk?q&2y+U^_bu$CG2XbnVBY$b|vQXp-Q7f_}@zCV;kda~j^5@i zAj?~fb(cfH|Kk2oQ1d$<0wv?az<9a+ob*lRw|p+Sc)ggx?{NzT3ZruS8F)&p+@h~7 zLCNV62`;PTva5&sTWy}UdLLLYSQjfyZRl5@S#Q2cs+?Sa-5M{D8f4ltwO{_`?fT(n z(58LkPKPW*o4p;w+9P-hMmZ1m8^B=Gxcxa}e8CzTP32-)ul@4zX_yTwyC|#Hf#`Wt-o?Fb7 z%Ow}ruNUEsi;d3}M*8(Q*QsIss-`MOU#vC2E5=)bL$~}c&UHwtu`+8BZWL7B;YL9t z2dhVFmp2XZBi_xRTowV!@fQrrRmQ9RfS~fDGA`g+$|W}+St*Z~f#NR))g~_iXMvZ4 zjKht!pR2)T+%uLl)_y(>F6UljiWQ*70V_etYZVwTgXiE&zxpbJP5c%g&nb-3_YBu* z;WFS|ZgSnCMddY1&e!ydUBsc-6I@pHw&tAthIhrv+A9%C*ua+GsHzASHm=;eA-Mvn z9BnaY>REFrNy?AP-~(KWT<#`hr99pastj5|mBAgL#vNEXXs!Y81TP2MLB`=8R%n_( z1KtIG54;=vA$Sj{_V`{s3}h>OVEbVD%qi#YyWxX_iSjq}XNq#l zjC0H9&YyeHtP0{Q7?N3C@PGCY_SGIjw)q3u2e=J^W6YqQ*TvB7%<^)^15x7$y6A!WnA^%<>iCe_P1^{F%!+qak8GL8(;xH)o>N z9{t!|=y~QP;#n&=<~Nw9n24$>%c&tGac$!c!RvMTuZSt-BBs;K`8YaY43}UN_jg1f8Bw<1^d}0BBaGpq{UGw zZx9`j`lPg{qt`{Hyjf7k8Qxq+VS@nbczA=nqCu9z27#ke-b$zgOo%HTgWz2Qr>M)hZtU)qf*{OP#Qa>y{|Yb<^2fiP{Vu1Q7P|LC_WP4 z@3)TnAG97|ro`0=F!YN~uUcL(=VbZ}FKZf#bZ1SO_`IyweCIdeHFD|v?BTzOH#!{k ziiuk?MNq+8ZI(5Fp?&T)%UMjg-S2LG4i9FN&!7<V%gp}bDp z;3ib{T*vmyo|YZ#sV`#H@Px{u>&NWVHlwbo?EYjWE4x=CTfT~JIJv!IhuiK|;BU3k zmc5D{ZtGBH8&B7>q213`9(%oeKC=6{t5#dOF(JTm=zPorv{vp2Z*$w($Bv`!rV~j$ zJBQkG?_hhSv6(QS>(wRiYEM%SOR9ri(uG|=VQ-bc-^(oJeP8Ka9NN}vc6MgA#&H`; zZ)`*MDeYz_RCHVLn}a`Ev19gIW@A<+$@yK+_(?YDWvd*U%JxydOZG9nr?ppgvvVt& z-nU3^W(#sA#RXj*ev18l!=c^b@6ozKR6njal_hB}f8y56sA-1s*!Ewe9~A{g$#o%i+|to_ira1JHvdO9iQ8?&q5XaZU3Y{xhiA(|C2Zs|xzF}+ z&qdUE8{;m!>GAteF>?)x;iJ2EnU9KX@@DU~vvJX~PJ18`#)Qi4Zuf1s+kM;JR@rU# z+3uK7rQfvscAMLMyREHiTWi&(w$S#`)`~6Ra@wqolbJHy7%9*`nyih3+ndQ?d*xGZ zqvTe9bE?@C`IHK7U7OkSy^dnt68wt6nTiZQu|O4AMjJN!iDE;w_5*8Qc5lGzyqtLs z?FjW#-X7Wu%wA)^kqlK~Q@+LTr~O$LmW@n~_{oX3mJ$8l*)+1fa+?!VRKK@LOl+O* z=2xj~W@mfX54ekG!KD9vwf8qflgxhYo|e~h0ui#0+ieA>*rmW(Mj@KUTWcQCmXsdq zq^fTA-aq5-!*8SWbp^w&*qyDF-Cf^-ryObIrx9j+L+p6N(^z&CSCQFPca)(t!(>A| z1jSIAu#fV0f}y^_UmKze>S(SaPv07f4Rsup4Lckv4KL3d4RyMqm_O!QmqIZ6Xzbe- zd5=L2GrV6x*|4ucF(4=GAEC}LR2P&Di_KZ@C==oksNsgfKB!B}e5g{xyA8_5cMlZ9 zb>jOJ)R~6*9F&c3Ez}4TLMAAVFjOzpNJ9KS6!iP+FX8pL-M(uLL~zSg3MC zodji{J00p26XJX*n~z#3E2~dI9c_Mn66#b#{T!;;P=A0r%}{Sal^E(c-WBb0heK(I zNm)WoG}Htr``pU{e^&(lu7sLo{9POP`y7-_%hv+x4Jhegk@qhso8}Mj#%cY12+HQ@ zTqv9RWl%Qtw*=Iepo&c_--WXISPy0M@ymc3#QUht(GV!T<>h%Fgqm!q!=P-AMnl=> zRzTUb=>68F;65n#3@97l&!P0bm*>3COc0s9CH{NDa%2t6B4B){aEB+0?{#-PFhK_q3BIz7uHA{v(fPElYIw zk-xR)_wS5*W99d6U+Hh{x$Vb;zjef8-*|K2KYsK1U4Ptq_z_!Q|NRwzANd$rGVZ@` zi;h;?&GsK-aNoA*Y<6+%|M0dAndqoG#tEsuIF-6uvJ7V`cf}FTGVavYWc=L2-Lwej zJKV8aD&*%k+%-fv`{&p%y_tAQ;H-)GIUmlG5l#)9wGqx0a99};dR8->jtGY@5oT*@ z=2;KIkti~pufy3G;rsy3rhpS(kx1odaru?hgiE0QR=;&8;GDknSy#;B13C2+*7=-2 zWN~(8aa>>m`k`bbC>qa^S)9`xC$phK_Sp-GJ;Rv^rz66-6wV5+j2~J0k8b&3lc^C` z#?OOrWaK8p`7WHDv|ky{PvK~WEyMY(;xW$8*PpXE+1p(PSp_AWAL@fyoTIZi!?QSN zWpT6t#yUUdOR_li0mq|Q!W%`%ESexKkvr*;#x0g|+d?$-pp{kqvYZja3uBy7B_%P= z=y7E+&e$=tqMYF+qZhXD#kJXN<1KPFpW|0_ErjI1JC1ftsm%$d`6egFI1nqcNrZA=keaO?XcCGX9Tm$UN~ zUVmoeikD&HJ_55K2me{+<9tWwQX?MaL&3EFz^A9zuVP`Re-{YMq}d!|Y||eSn10Ia zvT%1(%u<5L-USpba-V$4aIn1~#Xf@3c3(iTaeLZFFlyw;F{6!7?IZZ0*+)=DmwYV! zhg{M=0=-d0T*5wrvg!2f`0JTreX=INE9+w)!RIxU2sz^~wvS*kaSgaQ|5^J8 z&Sm&MWdYmG+N|Fb=zID)QTVhkvL=B`j^rht0NewA5`M;fNxsZ}$HWtb^@@dO#kxvsd+E`-Jawx)QjpV>Vxl&`P1YERq=my zf6ArRtLhg1H|$UO1^M;gJe2=cD4@nE8lS(x^*mSHq>IAH&wp^ebufR7v-?wA52bZ) ziZ;Qq=t^s#f+hU?H0p$7$_jusCkqkYUb`f10wr&+~5hpe9_Z2P8O3Mypv($x!}vc5jGI2U1b0u#EK+Ej--g zYUIAw+Aj`0SLv4Q)kgbW&99J&^73m?Pv!m9tS$X5ID`9bU<>#=@Luru;A7x+@Mqv3 zLCN7yU|hDdXuOK}P4UXbWxEw#d=0q5C_St-_5RwYY$s=As|O^wkZjA5ZA~Atm317I zj)WZ?cDoyaYq_ud+Jl8-)kXDJ&OcoIP3SdZIH$Zx{zJI#bG&~dH|2L=j+H+~MvVOT z110}F@K$gTDEa4u8^IL#Dwqae0}DW{?fw8rTxQKUJhNt;_2XvExcbN;{LcDbvqoGp z)*A76xqXRvBvxH=@p9919b@dBZ)-J1MG^lzq6i$P@>Lhs;Tf#Bf(KX##8>;oDic4{;-eeB! z@=U9xa$CUVJLOH~MptUgF^WG7xhcOVfro)7gLA-B!KL77U^7?(YUZAK_vX)mBS6V$ zBp8?bgYeN+a{)%~{=IaIc8)ppsZyW7`C;^ocVcq)$KUE46io;3uW|R%fBk-2=w5=AT$>$FptMV_AK+3c%2gm2rS)u3?bJD-zKNi# z&8LIsf@g!&B~w4N*8HQ~YpwYbunJrSGNWeNtqZ`rx&J6A8L_7~OYYP`Gmq}eD6a3H z=J)uXQH4?Y|Bb6RCU^5{D53Y=?#EW5OLhC$@R@0GR8W}~XJJNHSC9tZDP59jnybb! zmy&0tRcpf47HduT6p+<(=ET@5!B2936{unHYVbSYHQ+D6Yr(g{CQ$jk9{ejfjLUcD zLr8vM8T$9qUFk+iOn3b-syBa&%g}87-@WE02yxtj#ARGCuF34fkz9PIXX{>akzUDZ zy|>bQCn(+1`fjxoTGxFpcsHoD@(!1k|Jm^U{6c2c-K6~cVJh+e_gMZbmaS;8g9l%t ziZ$e@x$h_cdUibj50NiD?GaG<{|c!5e-%6j{2HjVGJ~9zf7P*kF6ozCybe78Z)B|e z6-M&Elj|R`{AZ>JqyvgM!DY)pbwo+ zgU~3I#~WPQM-cCG6=o28`h4%7G5OhjMM!YQwsZ_QIwOd)aQ;Td&$eA8O>FQgk zd+c_De)V?Z@tx8y8He8m{*G*vr*}d13$$|0Q-K^%b#?$)1L`DH^{4xRYP0gde**`B zFMxcFZteti0_rX>1u|ALC!k7R1>DEWpc{Y6XFiu)ybQhtFJ1-;qxAlX>tC@lurqM| zQwCDx=w76~m-!0P<~yZVG7t9;#mGW=_y{PO9}7z6$AOah@t|bR9FmdwNub_~P6l5F zPXYe`o(f71e4ELV?c?yJRg$kwhJ>rw z6WqQkxHg8V3fNX7VV8NPUs(`(tkNv`hR2FJWmWmmsj5n)PE}RAQ30ymm;x>Ur-B-5 zOb5RPo((GR=YVltReP*z>{n&U)4x}H(Zn?(*53MIRJLY0ve3yhn1g-KU2acugG$V5 zQ_Hw~r{_yH`*DqQ%!|mI(mfAUTYE96cIFaL>15qVR^DHPFFE@4G_Fhc@>@Lb3ZpXk zDHqeb&RJbLk6nc3Aa&(^uhmGeD)MZUr1mO%6uSm;eF{YKSnNL)^ zrJMCcMvk0$Y2?VaTqDQNgKFEp0Jei)1od9_CGaKiVeoYjM>UI{pukhw{+@ivKh?1$+iP7kn110@s0efzN?!!1W+=PTupNi-hKgIyuK@p(zk{yHzsH5`}xLHn8d7z6Wrd2S<+LQeCh43@=Iqg z3_VBblT7va8IJ!dc~_c$14^c>ATa&JHgGQYuYqmg??LJ6c5n^&2QV%(>E7;Sra6sK zvHn3}^!#sf?H8BX;<`osBekHi^OPEP4x7qu4NAfBBBOF!*TZsC8sl>7A^%GEJD}vo zDnTPRR#zCg{T-Ct*ym;X(|>}>QFM3KgnFOUF!I(N-;7&92EZua0+-NsCr)vE(4DOrRzt7KLU>de*q2ye*=C5+y)*8 zN`A+K@iKWEei4`SS&njM%$<2RdJSH@OcZ7im&QVavdg5831q+236xzX;SN8TD~=Xa zAN^Kxxv00xl*MPj$w>SD0q5 zxGfz&jMA2$T|RSa7uf-onrJ^>yoOzN2}%43rgNm$ZxXUB6k5-h?80NwOUav_RSRlN zhJj!+7QGBqIv0cSyi1k}vD|tKGNkhX+0WKw>5kb*o|V7Vpk#72sQ&I6a29wisC--p#%1#=e91-agIv5V zeH32&oljx(e2o!OG1<_T&Z=Hny{xvOcBQp5q1Y2#wr1$S10}qfX?t z+Vn(yyy;1Q{3@y^DxH#5nyZFOt_>L|?H>n~^t-^5z`MaQ;5}eHcrU2>%Ib4tv*VLs z2lt->Ujjc3D*voW&ys01e3ggVL%F!VJpwN-Q$Nhb{FaW%l(A4uriwkmWy@6GE{#m_ z?L?}+T`7}>>`9`wZ`FjG4 z>*1~Nl`3Cb;(GY+{1&gH3X{jBHnAWkGtKYEgyt6qzQYcoX^^M~+t2FR)*;nqB~(!< ztfnB8*Guc_%?B+CU)`16tKLMwM>p^`#*#I_!&x6V{ zCd{+ss5+pG`Wh0K<2U#%{+&c&^j!5JABf3uPHlC~UVaZey^!X(ZfR{jwV(dZehA4C zbA_q32_H}7OVSFhXZSLSkozXN2(^JLEZ6*1dL_GXy=M1^k=<`VDg1B2Dd20MbnkcI zy&y*3o4*Kd2fqpa0elktBiIH036vamfN>ptf<9Bv?Mt?NZ_FOA6GpQACU`)CY~A5K z>OvKDf(un@Crqj97B}^UDPh{~@C3TFQWmTlhzk>rtFU?3*YI7f!&;}nu60mc{2UX^HSr5RRHTcLi=4he`u+Si!?AySxgN^xX2~tZT3z>-&CZ@jupQRZa;tD5H!GHR+RIgrT~d z@XbyyDyk`RnaZlV*({cGO1~64JpMfa*(gt^fl5XRI0YOI&HzinTfvdw8gLY-zIHVD zI>?cR&F_F?!GD6|K)%&`<3Y)30vMNlGyG!w_9c7G^To%%3Zryh2NovDK2&)XcY@2V zyb^9m_Ns5uZw3j2W7SjNVp*u3>O-@snZe6vIY}_J(6pQ?i~B=~QhrnxRKvio;WT8W zJkA7_taCw?#Vk-|F&k7_oCkgqoC`h*R)IeR*)M0x<^nL6_%8%mui||SJOP{svL3*@ z7`z6Y4@#a3z<3#{Z&DiiYF~fKZ}GJi3ZwLYm1{_>jH>r>;a$SY3N^VBw{Lb>%0G-p z%K2}D_CC+My~HbwlCfbwgp4t}3nrljS}I!}Mn8 zptutpbwj;}o+>S_=kPF+5t^_!cNryD8ECG=F9X#ibycnvvx5cc{Dq;1DV>t3o+5pg zyAK&C?VkY;20sg)27V4a6MO)i1!66zc@D_I9%jB|4H%c*EBs!>)tAnGpWov19txx9 zzsz+|Ty}F;Vs*XRwd;yG!67++$m$CtyB$fGo0q4IJSD$i{;J-z`VwzMoMxVBO(+RU zyW}~9OL`{v1aeV+)`BYQ?}JmoAAr)2r@-al55b$kAAxs(KL+mvJHXF@PlI0pp8-`D zo(0!|KLMWup9435>%q<722e759*mdEWAIhxeU;14_$@vktuV^Rqg+MtatSZgQp5=^ zq|kTJ2Cz`ezTGE$Y*I-`*bPKeX9_dkx}4}9;4j>2b@%?ltxtvSt?FmZ2`WF+xC*$I zI`5m2mGbxsDE_OU<`K4n(*56pGr(=&Oz?N$<>2qZo51bhz2F}}&FTLUl)O5@cp2P6 zJFk(6o+B3@?`XY5yggSKrSC@Y;CLCZ-~=mvrcLR4#1pR>u?|-QB6Wb0d}M~upS-oB z<=ylFwt|G#c6AVy@05PY{9vvp9rGW^MtREF&&qrNIEDLxpk$p3-U{Y{cY=e!PlNg3 zgW&$)6JQGL2Gd{r!4Fq(%uBwlt*3}rsx`my3M>=N3wK4xo!{+!_RjYkfpcx!HcgkQ5co+8m^%Uc}H(E*;nKV zE+PBj=|cMgCV?a@E0I9d_o?6Vozf(Egy(8Fpxfx;d7$d$Tu|#AIIi1#hdCc?6a|iTs2&BHONMJS^`RzmxGe!GH?!9 z4{Dw3a`1L=1^8JITMuSTwi0}l`vy>QX$0f4R=rl-y5!=regs~;4OJMWD+l~gf~@^E z)Q?l~hFpS-lhiQNj8-pP$Z4*NmR4V8#GlY~X2xb=nJS%encj>Hl=j;|rSEod3fKx> z0Nw$99J~`$J!}UxR`@u`o)nKG=FQssdqCy?UNA0G@zn+R`H#!=aej-BcNIqI();FN zahbY>PQF|fcY@n1xvIBPc&Cce+daM>`gMPG=%GrlWUD+bb^J$>h4SzXQ2cL#lI^#^ z8Q|k!3;1u~z2Fnz8t~ho-oL*Cc7xvq{{emvlswjgaT&9=+w}duEaEbLo^bL0Lt&J@ zIpE=O8Pk7c76j~l?=Jx=ud3>GNF$@QOU&Dc+L>TUi++v{0}=+&{;)aJSP+NWi@Uje zr@To1gSl>Y%;%Al^7kUBG;IPU|DS`iz+ZspgTDk7*Je;-td~IP_{-pS@K@kl;1*Et z-2Vy6KF}*5Ywo>QLCJ6{7%vx%-&H2M;hou9n!D9`botXpYKx`rAsqwACAkqA1C7zC-iJb>c3KI zj^oQDLoS%$i_2E`@izPbWT8A1fs*aPpk#Xp_%U!OcrSP;_(c#~MP@GkFz`w44+p!z zBS0euFs{cxW{!0%e)^KF+P`=kt}sd$>!Q3PlVls3&r{q94n>y6<@1x99hKJlQ{>5$ z@f+QHUU)J-VUkbk9-VpDJiBSP>T7COXT2mU9h)KE$=v z@lQa$l1mAw@){1RyhebRfFr>ga1{7?a5VTZI0pO;I2P;$$AOw_p8#sE{d7=s?Pq{` z-#81@TzeU)x%P=*H#iB@T>E5DbL|zN=Gv!%mngm95^y@m8bI$H@Y~=Fa4k3!RGDJw zDoaoHH0Rzyy5oC!!*lM%aXs1RNp~rVq?@T;na-w+%T?hMYyEeOG zHHY`rWVZV%?gSSq7B_a_#RZjO*&&3q=isvgJ1nyLrRUUTc{om!lbzsH{E$N-oEO zlFNypZY#ldKNbEjz$X3U>H^Sp{Vb9uF~tQ-n#(z&xP;+?`W28c1^+?f?{@`sf3^raa6F^3s5 zdWxLKq60}9@xU?#a{@`|=l`DbS@b}SscKiQtY1Fg9(i&Q>N;imj0$pOQ?qn_qdhNW zw}+`HtxCH~`ujgGrGv<5vatiO{LYiU{ipMOzwVjC_8YVI_ZQGQ%r^YodB;5ag@=!s z^_dALe)ar^-noLk4~GBYPuDzqW6$iH|9Se1%*;KLf^|Svl?$v4gbfp#!Q%Waq6D~M*aHC{nmZy zD&9>E|CJZ-zV?+_Xa6Hz^VjjiPI~2!W}g}Hd|~wg?WN<-9kKSgq31pO{M5tkc`OrY zKfFof=gnHV{4$mT7EfVO(5m9&SC1Wi!n_NZ#aw>Xs^W9%8dl94UNR3`0ZSV>w`6$9 zsU@clA6GJR_^BoH8adN^-ooW8Yjw8yvg(G#r!MZt_-dCeTygdMRs9*~RjV3SVqTOe z_vO6h`f6**X5stKq&fDzpL14Ix4b`N^iQU*UsNZ7y>C4UL_ch9N%64SOIH-10o1K1 z*8RxhlZr1f4ESQ$n^pE^EWe&n?Cop7;$fvDOr)hH#iy8<`yr~4epH@W7q5YV&e=JJ z@x>bGIxc(8jwpN1j;NHZR?xbNH^xyZSz0h5(%wamN|}+h4Xg304ci#_(-}RMcT2!) z4R~t;-opW}gg37xCRNutD(y8pDy4leytyh>e{xjHV?Tlkk=70bL#4bsp)NPEu#(SE zX>Y5eQd)IlX42AHUt*|~cQceiq`li6mC~1c$6FKdChuowKnHnuJ1Xtn=ctr9!AGN& zv^SU`lPI1Bwbbw~bX3ZF3Thd=L0&$eQ$(e`0!O91IZ)~x)86@xN_h=|ztw@in*-kM z0Z%rOZG86!yvG8b?3L=*ls6Jps5dESc2wHC*-b&g7V8ytl+2y~E%Ww4`C-tkZhk@j?QkSJn-T47^x6tOspSeR%lvavXdSfCVw zSR6$xP;_C)be*G!#Zf8m6o#&P(MWs49hLH?K`BJqo8hRGw-#!pi6!>~mZH~oRLZ*v z>JSs+R!610#{z$k2mVe+N%gH}kaxSI(%zkpN_lTX>18wR{oPS1uXwNxk@ki;D&^e| zrP0M8Z@Z(?-VR5lyoIP2T`jR(=BSj{45bj1rK32J3Q7ZuLEcD|N>th#>!_4>J(Ol| z(%wyuLhl2AYXX1Up)}eb!_6Xbl~qNfxn*zyq5xAcfi{j@ETBzCiAooN2R@Wj!JnS zpumqdPaEPWYB!WZP`e$K@>W1yZ(@1MQE9KkQ7P}k6!pky~iAt z@&+Q><4lM_j!JnSfl`RHcY>o*URl7K9PrjcwV0T55v?em>nK`6sN)UqR!610UiWL- z+ZFgLM4&CkUy-Bm2X(WFc`||$#d&UyN_jtqI>GRsbyUjxMd0t{z+ZR3+Zpg05ZNsz z<_<@pYmQ2JCnAayP0Xh{ie3XsA=2J;j!Jn$$=IzXmKsN;y~U2AU4uHwgm~OhDeuL= z-!B7yzYTc54|snGcy9%~cLUx)vaRQm0!O92!vo&kP`8;>ZFN-I+vX_Fnyvl$#JK!x2cuND`4yZd!3Pzr4DS9wRampbS|9RSzj!Jo3-LFW< zQ7P}?)0poxvFvnI+Us!?two8xo+*|xN2R7;QR=F$2_HCYFtkN_(3emGY*K(wB9`Qt7CaR|BOG z)CxzXyzNkTn^;OlTZ-|4qf*}YpzuJ5A2^B-fxjJrzw5>@*KA_h;Hb2>(NQU{VytG8 z70Yx-(Jw$LMA~a`6eAv}drd4O$5{$}aa78?8;U3iai617-nRpP-wXV040xLY-sJJ@ z;WIJc?I>b#RLUDX!G1+ddj~lxh2Uw9N_qD|JpgZzx6M&$Z@Z&X-f899O{Ned z9F_8BKq*Apo8>6#0#wTI);fw77%FXezjRc}`!iI5;l1Igly}KQR$v?6rH-OJpeP8! zH#;ij?Sw-7@Om7@iKLV48AzN+>Zp`=EEGb*--(V&dF4=u2401uQr^W-WrkPnDEb~K z5{AF)9F_7u3B?29ea2D$Gv|DIul;quLV7?N7k8$owcZ{wiXSp@8}TE)+g?~evo2m(G zR(S+6sIGAzJk4+R>$8o|(C$Y+E&i65;6B(+V8c{r3f06{?Uqyr{==WGTpBXA|6Lps zvcH@)#WaxOFtx)XmQK1y`jGkfR5kWgwe9<$)`F&^$Qwn#(R{gg2WRtzj>_!%kA$Nz%{hbioYuY0UqsxUd5G2I zZ~VTUgZZ41PodXP*3wj%(=h(uO`-o{kA>dd#o5E%1oql0x;vWSC`!$ECJSES}}7Uar%U*~LZy3tFe;c1>7c(W?kK3bCrU<(Zt;DzvkALWN{o*^A=Z zV@Pvfu%}jL4qPpeY>oCWZ(5BNUX{qo<6@_mOzEA}} z#GP?lSiu2}=3LFp8Jariwl`6~XPZ+pOMUG=&Q`YE8$P^PvM_&^3<$*L=c}OWVh)(p z0muk?m)AI;t8&S^2*Lk7ANd9+X5P|q!?DP}>x&d2pWW36nMQJ>$#*F zdA`T`7uC;iD>70#J2z-oXopOi_xfbw$jPl;HCAG2Js4~r7LDvSSOt$^8<+Imm-KBc5%ZQM(vWG0mA!&X=a9nJD zR0oi6-|^>UG+>7!Y+1))vo?OymO^vlXa4$f)5zL`wWH0aJ!dz+&vRJ!;tA73=~rcv z{HT-zuG6FajO7MW)mg%vOFJZYgJI>ibVvZL<+-7AzYEVd2})}45))(<%4WHzQw>)5 z(WZhInB&e1CRFuapHxzb(ORvt(eCV8Nt`r06NZqn%-P5^Q@yQ~I`f?B^ExdOP5dre zr0b8AcQsxdK5m+@M)hWs-|SW1pYGb^|7_0am73;0V_3PgYXoYYg+MNe>Vk^S*0=X4 zAKT&CjP!P{$&$}b^$$7@9{KFNZm;DN5qsB+w#tH*r*i^fsCl-+*x8gUjNCWL_T;B~ zoiK8dUsldde$DtL@tpF+a*Ni0I>Z{Np*hk$$ZOBu=QSe2u7eXwFVNq<>uciRDB2$6 zDdzIrpx{IK-|OlS$$zJ25)~-VnlNrfwr>39! zDaU8~IX2n-IoYk)L4hn9d|JhhEB9Ytp$$Fns-N4bRBIfxlW~w6%3oNq6-*C9XFH*)yXok5jyBggmZ5|{c%*aI`znXHw-(*l^|Sb(+UQqN-~DG|dZHQr znyW{R2Uzj)7SgHdRO*D^jxrAF=1rQzD|7^ld8~2w#)WUnL+Aq<4de%k>06m zh>>Cbz$y)@T4&|Qb<}SU3cQ9Cs%=|+nlau-2h)Pk+WHd&bOi-o;~A!@-Rp)tnwYxx zHV%$7uU#kW`ASp)1wy*ay9bFfDK%9Qrg;JJLYaKO@;e;)5w96i^P*#(Tv0^vPaGP0 zN~Xm!@?<`Nq~^W1+(tz;uD!Bnc00A4LJ7293F(pQ4YTh~!E0{NIuykd<)|8v6uXUB1XPdekZU|c|wzM>DVa8@}H}UOIyAWy!c6bd*Glq$g+lr;3Fl|7Wdo!?2 zfT{n*eb)cP=%Vt|diVDuzqggF=oI!6``FNchPj-b*)2>TW0IXsrx2l;MB9}$i571T zin^Y$tV|Q0-(Iz2PJ6{RhIR$M_L*stZHor8lLz;Ox7SU+<{))9JHo7MPjZ^f3r0qh zx0#!`in#94$bWa=M+#!!M>LZa8QQ8^==%sS0sZrRgclEna?$T2LDjSA4V8?h+%n}5 z86f939TV=Infq8mPuXKy#~l(Q^Mzd-qa$P!f8XC567?}!AGP8l+8^(1tJ-Pj#%LI+ zm^(CjRrS2?q9p^=!bE#5`?4^=j9x>Hb9Z}XFk5ar;zJ16Hj!cWuJ)qa{qcWp*8u+A zujfQ(7DM&TzOTLa8TBO^tcGUPKbo0H<`qYSa%N9744*JNw~1K+=Fv4}*q(b&kdLmH zpm9jFHQLp+*DvtVcD5p_g*&7z6+03qrqLmO-ql)kJ2k6qS}t#y zs)1+wvsS@yP4lmPzdt380`0h&?9ur9?@zJ$y}suU_9Di;n(s)ACo+z9bDD^#psnC0 zzuC2`G}(}ppTo|!xDZW@);M(pHMX;7yIR`gQy+B2V0 zbG!cCZ`DkC?fmgxkAov6*7*aY?#vmdRr{Gm?PE$QG3!wguR_0b8V^-Gv*Uv9I=^eK zQU62zR;{2d+^UV~8s!gnL-SaP4~@v%Z%D%B*Z23j#F`p;^XvSckq7O;UJrjFQdh+@!uW09SQF<;%oQyUrizAt@C7*9B%Y@Z_YBAuKy z$Na^{?6-^7icKv|oA!DB;s`T;vGG03HALqxu(8nZ^B3A@*l+U}GKATW^A~@n_33N= zVsQILe$^aC{58tV=1gkO%s1pFwBU(aur)G&u`*N+2i*UAd zeTY|{s?E$&29tUPok!ZaY|}IP?SCKhkBRMIq#^mg`3v)X^S#I~(sy?ri5kDR_mfCJ z)cISLbY%XbJ8}M^J6m@%V@~t77<^M1+%5M)%Np>zoRU_k;(0Dd!{GFJJ$atk|wT7R3`_I+4|F-<6UmK{$ zw>(qq56a9U0DTh=7JVkocqcw7QnFnKm{&ulmSlA*5S z@29znJPrPiK~wU)cc5$tnRq*ZyF5>eI3F^Uj*qq>vk4kBt};4)qN~bwYg#sz@g6oWF7?eK^VUra*nuP#BtX z{xFATHewgakeAscQ{-)cvNHVz)FCFsub}?TP+OtwGj>5W!b6gS{17KV*$}5fJz+wO zfU+Sz3iUY?Vh5Cc#+y(>jlXxGv@A5w+XZDq9G>q#<18o}Vmg!!F%#-Z6XHB58{$`i zzt^A+HNXDx|1oza@Ku!8-=DCAm_!L06)oyjK~WI0F9an4fs3S@lF1{sTSpvTl=0?7Eh($%{TbhNtO2zp%6 zt*+i%uHO5gZ>j4?peGdVaP{N^1h>GYTBRTpgL6Q};@hAn)uIYyVsNjk_b_Ofx;_Sa zO3~A<-lwkKm#!Y~@#sg+;;n%o<6l0=ggXgj{3`)HqyCk-dN;dzcY=;l*Pnu(Rdm0r zx5d@_*wy<4^c&UN?dpx93$=3`Wc(WkdQSBwfK2>)Kp}dicxx@lSiA;0R`uQltyc6d z$XE=ft2KH@fsEdSfRcdp(aKrgD^8?Ih1 z9kvO#2ozG+DWElq&IXybzYt{F%yQ6tb-e{-Y<~hWw)cX5tF8}#jO`B4Qn*xWBweks z$N(L$dbyyN6paTNix!Xx?Mjdd?S~*^doRe?J^)&)whx1h?FhPGqc;|Gg1Tmb)+x#d znH=hH^)3gUsIKzKhugqiQ8lkRhKs}N46@4zbgNp#)14cO6p*nv9Q3MM91SuSxu8z9I1^N*u9YBT+W<1QO`r|x z+6FSVkGp!$gGQ?BOQ6>jz3l4k0KKl9e8i#-lxhuT@GxN<1v0kBg5FTQ6G0}7>8{>+ zuHJ>9jjC4-GJ2h$KPq=E$b@kh$b|6=kO|{gpf^?Tagecn3q(gn-Pi^)7N5G@mmp&+ z1KC@umjJ3%Gz3%)O0|ZA8Wc?c8DFM?jO{egCbgIaGU46;dRw{MKqk)jgBGbT&w`9E zYeB}B^`Lju;x&-*8RP`$@N zM(=r$(R&H>C)Ily^aIuVE9lS4?E>AVT+)$_?cpF}do<`h)jJMkYzsjv)uJ3!rLOfL z6K*TW*e(HWQP)dB#`bYn?|IOv>iQDseMK+3djE3u;)XhU@u0t`UJ}UoHwx4NmulsK zK2X;pkSWzN&{pNnak=k-K2+{@m%9h_k#fIuxfei}!=+lUgO1VO=R=U`hY}g;|Ed;; zflO%WAciSwqI|-HVFfe=G+&W?xWu5vpf0#n>uQk6weNvOsou??ZHn#y-K=`=g050D zfT=@+qN709C^{2le3=0n4Hs{n1KO_W+aQxymw>v};^(06Dw0p4nEcxSGIe){i%w=b zVSFA7I!*n{0)4D#Jg8DpG05aW7s&W>JE&e=?{m>xAmiWrpfT$D5om{^9Uv3aBbiPZ zz2iYf?DnV1p1e9 zJ3uCklS7VPIw(tBb3l6(6@X0I=7WrX7lDl4V$c_sw17)Mb{>FC9y|>)7QY1#>66jR2N}IHK>ty_Ng$(lv#WO}C`Vm?3i?{n{jT22AQOYXgN)C6 zK*r)LkQFDn(eFgZ=Mf-NbBaJ_v?>Fc99jZ0zFYyy)zIW)I&tbtH^`Lg{h(WMO|@PE z8H)`dWAR5&Kec!VWGwy#`o3BW8t#lU$AOIPDIjAz2Gn0|GeO37iK}-7D9^+SG{D5l z)w>@wP`O7ybsE~MAQQ&hAY=PyP`v7W05V|=X1Zwfjsh9IV?l#d??jN%n*@?KmHA{L z$b?Z1GPa9A#mwOsyY*&L4)pi}IQY~HsRcng2g052Z zHOTmK&`FN%As|^Jink5}nQ&)-$oTS0 zP^a3y2r{;R1R2}+K*n|}=n%Et4l=gMCp+U?F34CEf%5T>aTPRJEzSm+7O=$CyTaAG z3Y4OH-LBrfpdrdV1iDS*_cF+Y@kfve;~mhUs`nnqgdtP8o75r&RHbnl2{N`BAY+>g zI!tZHgY5XZdRKtPsqIyuR1-f}?{Qb}c~|cx(BZ20va7cPWLokb&=KkycZyTy2ZN4O z?g*Eg0x~T*3^H+E2r_YL0S#4)4v>lS_drJ}cRR?`ru#uFH4h#KnO@+pAmiVspd&PG z{{%g#=u43C?=+@-x2Ww5kg@nS$XHZ?9#V^1kg>Se)q5B;R$U(heWK`TSMP5i7jb{^?OvS=rcJ9d4{N-+OK0`?&3OmCY^f>_^?k8p@%rrek4bh|k2!7sgL? z>B{NGXjXf3Yj}RG-$zu{c&YHrl zie$O(VxBADNwXQavY=_6HtzBqLyYz{V(yZ;wN!;YW|9TrslITc|_84 z6;h%xkDn_{Af>EEBc-fr`I)j3WXeiVqONZk?tNR&l$GJ6tc)II z#REG%Jl!SFVDFtF_xe4}t8)zw&co661A$zXY9&eSwL6o`7^&g%lOwpF%TM4=3v_4Z z(#H%<(QP5(>_(;Ifa9I|>HhmBO-h=N?9}3GKGOD_Ep{ts*0yytwtJdTi5rl)Jgee7 zp5J(z=XP2|&P$L|98-}aklb90j7FY~l;O72cCQAT;u2(vOAuepVF|E6f9 zT>rbGk-m8JK8mJ*^;mPnnKtzQrew6m?5}7ZqlHM($TrhbG*2O=Xk@!-DH_>sT8c)t zn-+IQEW2m~nW7P7ipFqKG={5b?wHqD8w$6!hL?q!n%hH*!Znib4N<11wyvS6mM%?p zeh4k$~x(30Frwi2CPoSLXvhZ>n8l0(LWljjB3YHSNK$b$43z zo)}+}HfGG2rsYH-CXT)6g-#2l|BrQp@!410Pa^C6IkB&JYB^aaHN+YP!;GfQ*!*w1 zN2`{pltKUZ=N{B=s%>bmuWb#T)YcwuZC^^3fNN?Sms0&}LvA&RDZ`*YHQ}~UxTz*o z6Ry#0o!8u6?=iRP*Z`y{yr?#q=WXqLvT%{I%`LTBt(>rMsIffmZe$WmEBW|b=$u-% zjA^EA)FiU{Ml%hE^aF4q2}|mo)4mMr?7hckaUF~1k>uvOP?MrIc7PC19DT!j-0`cp zwUwN)TVj(M(A+g>C%#%Bq0qNS)LbC$jdeuJnn!*#G_`cJlQZp1SM6+8_t9h!8SU!! zl}Ew6UV^`#dRx>}AA|n(mal!~RWzNNOnOpp+UlZ7!`bA& zc3*BUVt1+Jo$2tLNbSGRJ6?i{u?wap*bh2o>+fs*VehNI2*xvb?)Y!oKNq^q6gcG_ z)C-;m`wPb(&xXpq_~CCwK|gx$+x%&D!U@K=SH7404(gfIGJ<}ic5dRN4PEPx+ZQ<1 z!7_Ey-`Mxt*25vUu}AB#=`^&ZQ-hrNN87sA(*3k^6JMw9s*lp#Sx|EPGj+Y5uB*1y z)Ke`hHR&sFf_0+r_HDxNt$};`12^x2{`QuaedUkcp6Z%An&iTb?Y!u6?X=3ddu*9t z;I0W*jyQbX+5LxXkN>RWu3;~I{Dc1t9lA07i(}rs>j!r&`|cNutKWU>^e4aiPT7(> zpSW$+&F@c}RQ~u?aSum+@QQQ(Qq$23-#mKjqj#Tp_|Sje^Svcix7Hs&|INEja?XE! z`H=&T?(F!(%6De|@YR<$+_C42!4JQ;Yv6g#`5&&hA^QhirK7)kZedo{J0Jc1!HSm8 z@4O=E;?jSAd*biwzCW^Ye16lLkG?1?czP68H!o@#(@-;~V?f;3U(4llVO?#weN0-~ z4RLW1!;E3NRo%W=hm$z0`p0=Myp2C&YHH_o%pX2W&ibiN;Z(kFE$Z%J>&zCSzx?7f zS6z1jV_MA+A$S14{&AB%!0Ya$1H<+z{mU;X0?xb2}aT%O~nT=TYOABj=Ox!aG1S5rUXX5W)bzL z9vJd5*TBd=Pf?xwfrUQiWtegwvkRui#~eD4-EMqLF3iNg z#^}hLi6XaZX0GCnCd!t#*BYccyZJ9j4jz5vztP4?%{L8{~RCn3fkiAn#sQ~58k zm{e9y%7XDpQk{`R*ojYKj6c$s?a!ZsWBf^u@#hfLku@sGpN;_+{xdc{gH>lV3X&^w z91`PC3T*$lefu*+b-ezhxIX?x3W_7%3Tb`-?ZhXz%rQ=O;3#=UZHi$g#xP-?4{?2Nim|%ZW|D0yT~^gFQ(PnD@Y{4wbya}^9&ddA_ zM%rLhM~1W2KIRaZDwJ-5|99zw!@@QEu+jA z!cYmLOcHUa@-ZQp)jlQ*M)nJfT9v@0FrkPt7l@9JsTbxjug)@a2xHVNp72^(M?}AF~yv{1~s!ZkSa*W)S62eymsL80m_* zyAt(z6iiCU%bX4qI^N5a!9-5*G8e*Bo#}9${XQY?81I8Rq5AZ+? z^GpmQd+zzI-i~2*z-&0hghdnL_zLFwQ@uxh}_tIaN0rGXnOXU{8FHpNmSOU4 zO9M~v>5l}N%ymH~drOeX*%M^)QW;@Aan4RlOA9g?@=};jC$luj zWX}yS8R<)dOy>1LCVN$o$+*>a`i2`e`{?fM{-u`0-9%Y4jhm7BFX z$mDDcGWlBrOkT#`0F$4a%Dm3wb6#57@BovMF+Rv-%?>g-^#LX~NA~#j`kb39b7&uv zzbe4wr9Tp6GS>&0tgS&NM_&8$`ka?Hl)>A}8^uumtm)X(In<FF&& zCNmObvSb%xkI(t(IkyCu%pyy;hldn}SUK&H$5@K7d(<*D5O`)nyobt?&A0 zDV|j|rmW0T@X&M6k?V1bZ6!L)Z9G<~Fj1@5{ycP>bM?i{-L?`Pzt!PBtH}CyeiF5k z9ggJ?9jvPB7q;bODZ><+upUzE{kH{+%Chj%BDsMwi+j#`R^Hy~A*MDpv^Rtsqs)Ys z*5>MI+;l6PkUn98u1rs2g}uGDurR+c-|Evjx@Xt{D4M;o`c(ApD%Pixy(3kh?y^Nz z-;S~mS)Z=DGg+Um?lx0>YIruo>Ql$Nn^~Vq-tEoyq2$@`tWPaA%bLWxe0!e?&X#C> zD#(^x=Y$(O`p!2r%&uvD`r+)O*0+MYv09%h5{lN>eQE5chT(^^A6uWk`1fb)Qw^`8 z+q3nlMZyn2%fGE#pPtR+PSHLcXXy>{K2>zHvwgen#|L}AxIX;|JNw7=t+BuMYi}{v zw+9E(%G^EZ`u2wMb9SZMr;@qpweL10!Qolo{zSL2>stpu_T9`RXH0DR_GF(`BrLA` zE8%@tlCU~^{irOOJh^ys<;3YTCl}A;3DwG(oXskkI%T$;oH?_&cv|#yVrfNj^sK0~ zyrd|4Du(A4Pd&55V;MbHQ|EM_4~tj&UHuO~S5`JGYC)qiT;1AU+0Z<%vaX}4+Op}o z>c-|a#!E-ZJdDo0zeUYW?xVdpd!F*`OV_M{imLOFsjbNqygcddgi+U8OL(5~)^`#e zU1Ml_pGjlt9XV}HXXi%SZ`q8~hPoH0!DcT`gWcL?>v=~ioAQoJF69}8Y>t|&?ZrNI zMwqCpz2~M07j1jbO>^#y6^^w#GDPj|JvUu@UtZv!)5qHu{vJK*O|)lr!t(akjxjkG zqbLo@c8|6xo6r{G#iq5`jI-mWiMxF^rK7RYad&!9=iFb8cJJso26Ec&hrF3Dl&1^x z7}8-mXVLD-VX)H9$T<&I4(&=D$CxZIy@ccJ=`yTJ^F*LNAvLwB-FMCmRnE0}OsidD zRo2PVN?y;E@Oh^V$1@^0VS1?vfj2^QhU@Pm{I8qX-Ru6%d|ivNsw}N-X)kM=KdY9< zN*dZ}bd`0D?Hz4A|5>StD`Zi`cQ|}zU2PwHou40@o}ZT&iXQ1XnOWIcX}Rh7QBF{L zT3Sv{PAHU>nU8ZcHHzD@3t8n=K|NX8p2DLA=qrA54{$j;Ka<634wh(m zLnJnS^3=w==%nbwv3>g|Pg5L?&V`qWZ+-hW9k=VzdC%7CE4@-~pP^F_5#K!N^{n{| zKZ*NPS40Fwk3y?(wfFj2Tv%+g*7QVm1Qn)G4+8Z?^wu4q-umA3JlE0^#wvar0($bS zB28!P#-lqO#&yCxj$kpYrSCceWMB9Wx#Y z9XI#f=GKLC%a(=CY-kTnYOblB8(tJ{YG`cem|JpY<@8B2D<{`3YM$Fj_tD(cP#vDD zwUqx$!mTY?W18nJ;9bP=L#&Ww@L_!2XHJKF+seqYhU(Vlw&uF_(8!smgyaRdMGY6r zB7rS|tvj^BXR}J}M|TS&InS=T~sf5}4+{#6OMmoWM%}Vk0^;kbjXS2|eOW zEN2m7V{N&-bSE$DiQl~(y!$kmcP(UPWj^;8TN;+O@r5z-;!`_hdp%FB*ORm)c{R!s zDqIsLNjzC4FKLLkLei(ogTp+Qlr%(c5D8aZUt7JfvbwpkV-ar+rryUIYk&Q^Y znTWikOp}hBjJzCq8ZyFPF7is`BxEOYI&uY4%5NnySSJ?1OPnOzOr7vg^}$N#%}F|U_;A%&hSrKU$rq1%-s-7;_4>5C{&INC_blPY8? zzX$lqfs9B#J&crW`V~^D-mj5q$VZS1kdGp%6Y`<7$j_1Z8+ji2B=Qa9Q^*gI&m#Yc z{0&lGtbYzEubHn#O53HbM2e9wBBi|7AZHyJeMM{}bmtyL{G&=i{_$~35BUle) zpOpMSJrEm7-&x45eb3-l~E07gB57CMg7s+H%{TGP9i=Dp;M z9K$e|S2AVL_%D$uw1ZB<64)|DNUjih`hatiWqNa-W~j;ug_g1ioi zf03JzpCVsH{sZ|(01MUm`1!dy&n^uaKR{{~+Z% z%U>h)Tf}izWIg9`$PLJW$eqY|vNPS2|5(i7_yK{UCJ1MgP zHW932zk?5sKVliQ<%x`>rHXT@f;ZYcWuxVO3R24b zRHT$Ub3iR``gI)>#vtkct+7a^@-kLOjU$8AskkW+C50W+N$ki}o9l zk1+5of!2$Bq~z&1WU!o)23po+Y$QH%1j}hHb_IdHKy0L(1|dI;DJOG@-%wL#GFm1J z5^#G`6w_+Efi`I|J!79O3NNkhXkD!3J14gNOI_G) ztJXBs)v2!d=DZ!+ppAcxN2RugDUX!8^czm8OXFW{C&}py`jJ&~IOp>CvG@FRnu_;4 z5;%V`aPC~DIsVn|d`8;F`vKlFKV8)tAH6Ryna|WCUq?0|w;&laBdLVZh&&Ow z2>Cd&3HcI|ekrmE*@8?aBU+L2N!>Q&bYuteeB@%}_mE4GKSVA={tkUvAxFGe0gUW43;ydEhRXEz`R zBEOH6`hO!b*rxK~vq*DaZA$v!@qsoaHj?kz$XjFDlv%E0<;&BkB!pg$|GrU49hXth z^po{O-;9dd6m=FKZ8>f29WC0%ekBc44|f{n??b(fYk{^SXP92p&}1D<7+c&hwe3lV zD?!%K-`6xRX;PbQHp#n`dM^FBw=FKRBjL1#?@?rO$hlkhucv-Ehvat^Cor{Y@-^fe$gRkYNXBUEkH{gE z`I|`Tm)}Opx7`1XJRSKSat3k>@;v1GNZN(<7bNxA`T*I3{1ABy@~_CBBex-mi?tnz zj`cC}A4on*9odci8&ckQ_&ahe@)P74$X&=n7Eb<8C$w>N@2%lK6jzW$?9*sN`NnS$e$ulKt6~(5&0YB zaO5A5CnMiPjzr4SM5iK$Qos1MYW z9@yY`EH+YaALjQ_Oy9u@bwi84>u@?I^u0%KU58vM^)in7+qm=`(llxL_(pzmOd<~??o*M%GoOr1LY5+{kYz}j3o(z5T!~~X(7DhIf28=EBxrWAc_yN$??}T2HSm{`Ye9m9@QG zh3-3RW#S?ED2LOz$+&)tGUlJexe6#<^RCNNnP96PU!*HrIZP0FI!dfQGe zESj3tE9a`SX|eH2u7x)^-nZ7)aZP0gOpSr(+B9~0I)U7m!x<9i2F{r|`P_dHIRACv zoYBsw&*UqcxRWzkeR3VS&mumC3 zQQxGVtU^lp-ie%o{0XuYc^C33}qkuM={N4|_)gWmk5GnB>}a!F}C(lFhosBQdb60jb=HZD_Ae;apOeV=XI znWFmJxYIXy+PK@xc-pu#vu<+QxJ+>O-NvJBVkl+g98zvooP_u#+x(Z*2`S4s`};)w zkkTdwAf@jgh^#@zBjuWI5b|DR0+RJd>ma1eYZH-gA-TTNYr16QUpPMm$y$~*7`YqC z`&tp!n5-d4){d-0k%N)U2_q8MROG41!;zUtT7G0a@XOBc`x#Kq}1CJkioXFf_YaVZce$&*mD?hr9SC>ox!xVU|SFy z(OHb#5z`iC)i*EEN7qbS5YKx#IuGS;(>Ps2IKt}Z-Xw8{AL-YnzbfR%o#)2dx^Q*7 zE?sNWfURq2bqf_iKL`=i-*T^}@N03d(N0H3^tjCayan|EV#xUz?Bx8*A43d7sdKP&Smoye{JMU%ADxU9g)M)3@VK~jQPQJvXEq6<_m6^7^IZD*);*azd za#h^i(N2W4B|dK_&1rd`1kNk%)I07hvgzTR%U~skbN));oP_|NyDVPF;pj7&^PT@8 zaDE!ml_Q@X$8$|uZU-YyQjS%~lle`y`Ol~$Qnp_rr7iD8N?ZO4IS=_CHe35qtdo$kM#>tAuCI(le$Bajj`B$I=~N^-`dP{xB-tC0`acF49B2E{)+9e= zvL;8cO(hf0;5aKblJC3mb7!zk$uP_1HeYTuU;EGpk>JbA}z}uXXP?b+WBo< z+_idOE-fEqHdnK4PmVP|~R5mzQ|#47q2f{eOK%2ZY+o#XMKrG^jWm?2LF#dzbL zdM`tsJ!)2~_s>8`n_VO~NYp23lAd9%J-x3nTdyo_b2CQE(C>`V5+SE$GvK!I$epBL z8m>F$N^cMxVYi`R$Ix^So9yuQ=*K+kp);z5SWE}N&0aDuMLgYAPBa-zi zYZ3BnBx#RSA?Yn6%a9i#JCUu(YmsfpXOSI9uG=iO&5LYCE=9_<-ZJD@$cvH8k*!OR z`N&I=6Oqf2(ta;PO1q69nNL_(B40#yB0oW{L=GmOuR_wMt?wYE-BK2M&!Y<|WA8Oc z@<2A|i;!09TI3bT?;>wQUWa@Mc?0qTB#Y~je;~h)l(u>!GT8n%5&t~$+&iYqH3;fD z&z5VGGps4JljtEfqO%eCaj^Y|XS3GEXOqv7B^JH@)B#q)=;i3`(o?FwM8`YIO52yV z=-g_Qk=I$4@!m>YO?P1q_c~Gf1m~*Iy_G2BI{VU1Nc-kt{*d6%x0*D{A??Gd{~HXY z|0OS~Ku7XhqYUf5{mpe;AyVQ~ge*l)Le4}^MqY?4M#{4$Q;-)S&q7{-EJNOaoQWJk z{?9_n+C~Mk0(mY{hU_`WF!DU4j8oOfdyqBA&B%J>b;NH0@>b+Rwky3`s zk)IM?28BM9b>!$bf6wIQwW&=MWk)S8gNA&UdeEOwi_I!Nr+DVn+2>VGoi=5bLRA!6#c1jC78``N6#{-F6F<`SfNd16vY(X?sBrGdQjzJzhKFE;)+GW;GWyEntR7^^(YKkT{*G1bo#k;DG5V9U>qPxT$mIaBHPpWhV?d z*J$V?nyk$x40*!%HL1B#KHlDgZBysy$zeod%GAo0ky{H!mNYCaz~eAGK1nR#kT-0Md@*$|pD;OS%T&Hv+R zSt-9T+fY3vflnGYx4gA^ek1kuq#-!(`Wu=cvo7+L!=2ml)NYcnR|Le!p|Ihu?SC{@bJaQtozpushXf9dA?4$L~9eJour(MbAl4(?zOs7lWmkJtNhk1Tn9;a zttd%WQxzr3T87Shl4SKlQKDQ!+Ilht65B-iIJq@jeMw-pD=5j5Z%+tHv>pN-tekxR zK~SRgA6Ks*6D6Z}h>eo0LtSp9%Z+xq5Rt9GmqAvejgqVu8zt&jt`5=AHo^%?v_fQ@ zSR`4)ZIo!qoBHRdFY>Ovpd@RkjfgX7uyT*sDA7tvbo2(>DAD?s%N^%(^35gV-&mI` zaJdOCcecw-ce!u7T&2q`bh&1iyTs)#ce!qtyUyiqcex+C-2E>1pv$dsIr;jM#6Hm) z#vJop&7pc5C0UI&O0-fbNV+`9H5(;bH-p3?$-3P}iPpU?cfZT6cDXe!HwVw=XlQra zD9O6dMr;KEVgSMCy*5g;vLM7F$;z`4^%-=Y`oc)3i27`!L~9m^KP=9*QKGfNc1^Ob zwo#&Whs&*Ux$z9t=c~_G+bGGp)<%ieCm{at`7;|OT0c)U7D?7GZIoy|<#NAqx!=3o zA6)Jom;1BJee807ce#JN+<#myk={XKnq(bfqeSaympj(wPIb94E;r8Q&TzT2Tu!!8 z6`vEW^Ih&jms{X+O)j^><*s(Q2aezhS95ZYjVM(cC0cJVxgjaU{w*6NTDJ@}7D?6} zHcGUfV0@Ho=0TQhsVRtl%|?mV(;&Qrd(K9QRws`x8@=z?DAD@9%iZj9ce&iXF86Df zd)(z-bh))I_lC>KR+$o7qV<8x{nh36x*U@STW|d_W+R|M*3e@OO0tI8DABqLM23)} zdu^0x9ekXlCwuB#prIY(a>u*eX)c%Ua;Ljok;|32+zgkyz~#a&x5(u#a=GO$cZJLK zxZDjc_d}Pv)8&5Qau2)QI+t7Ta-ri{10j|4{5GQJw^5?ie1ch}OS0N*#JuxFW5IZ2 zqeN?{%MEk6kuEpdu^yvvoiT&c@dxm=CQg+_4IXkuz3VrrvA>q`*LfwGkC`~)Rh zc_$f*Bx}5l60H)KD|NXlm#cBP!jr`Z@o%z?60Pe%5#_#bBXVP;+2Wquuu-CQDTpS5 zZNx^2)(=2bP`KM{lxY15L{)`*%tp))KvY_|*KCw%Z3j_7;r?bLW*(>LX9?jFY?Npn z4+^Q?2pgft`GwZuhaX?`)ou3`SDpQXLCJrvUG+H21K;4?w0R9pbD7oJZ>G6#s*P!> znP+|Wk5AX(SImoGy>R*>P%pf^7-H-_5AwTu;lM-VPFUgKgRhPsfrr{$eg6YlQUCP; zAv=7}!warm?BY_?)^mf`(Kk1E?ELU7Oq;Tyv(+&^0V&6Ax88aNV!|uyOV7}am{L30 zx3^=Qu6M3n-F`yn>7q99@}m~S)eF*p+XQv4N$x7%y<^bYVjjw5g|2w__9Q@e*|4>8 zZgnmXS?vdPSA^CwBbC#HZ{Y7P@pqT;ch~k`W8cHpP(2lU*mrFxd$6Ul2U`j_8JsY~ zj?b{p<$J7-Nj(*NXWGnw15L+H32&zfZ|9CF-DSfGU>E`HC4fEP1jkDRg^;wVycSv%x6?B?CSiJY>Ldlqg<1uw-(+tKW{p zP3gKcfkF3BB2EtP7~(1X0qX3{bj|OPoy$|dLA~?mrCeW8*PNn}Og+#-@n`DOluqaJ zeQ8rtoh+qx?DnzpgkDYb+JR!_y|nNr*-P6?%SF5hf*oaw~*WT!JZwq9bP z{}%N7T1HEHlL3wu<)45*8WdHA0_cj%T)pFBCo)?^Um~NRyJCwQnN&89TVU0Hjl1!~ z6PHj|@utq@o2>StlahfYQ?JX!7 zaQPfKTB^Ner8dMp(p$ElPWRTitj6j%y1Qb}XM<0jm`2N_MRphOazeuoaVc_KDt0>2 zP1tdxlR0#Anm?2OC;j~MOcx|wGX`k} zUaO8ZOT@Ko@4^`+Uw2h(!)R zwslwREU4Ia*-5IUeux%+RBW}iCU=!>?XK9`Rk3*o7`1CJMFyBU=C%-m-zQnhL9E+|R6EYB%^j~B(eb!^{{7bX`5 zuaE~mG*e5R0xBizH`$q5+Eunm)4Zu*V%B8^PMR~EG@l|_JhAjZ11y&?iuW!oDgU~w zY$IWab$M6uM$MFs1v3c4$rMi*Qjy9JC~HlT&mJ{#&N4DOdbV&K0dCkaSOTQtoi%$@ z$sCC8iVa;AYc%<@o#f9Z`RncE&+aN)ugPCuFfp&s0!ssLUa}Fr^)T}iHGsa)mYt347Ks8Hdo_oC$!{qJfeEId)!TvDooArkqWn9}R zV|;h<#_gY&{;+e|@P5nFoEmJ8qWv%5-zdsB++CLJi=sQcn4V(hjKSxw*6x0r^s_oF zY>5sdbRp8|%C4*hWm}g|q*4UNkX@b2cUkQxcbDzzT(;C|Kh{61Gx}ScaU^-iFDO5E zV2g$m9j^8k6mK2eBM&S>2C;3ZEEQpBGQ@vY=w? za^n}h(SH2eGpb^5SHWIVlLSH*_z;tkAXv>|LNm@)jaf!pPw z9iz*bRX&_0K^lpQ0P=ymdinvUbNS;(kEYwk+E zQrnYEAJ-1JS{sl|KX%KkiKOo&U!oUg<>)#^BsHvfZ+{(I`_R~4BsDCWAp;0`ZINBE zJlD+5^)mDAT&K6+-+F}a`fW#3w6;hY#dS&VARR}+!~vJ*OA@>>XY$jzd^dHFdLdcT zez<0d==UUF>C~qIJARGP+KDB0ui_Nz08h_vuK7LjKj8HgU;MW}Cmq**x=bk|nc-h1 zDVwMrVCvQMADWaJsXQgp4R(&d!D`QOve8pT$b|h=5!1CwIMM^zU8~Gs?XGoulhjJ> z95hcn5%%SY=EpZ25B-PN}&SWkM2HWm`=+y*gHGF>&nGkqGR=+fDoOcH_Rh-O#tU(Th157-@@UVB9&l zhYucDJ;m$ozLrc*b#jD)SugqS_Aa`9q}O;)(k#16()JZo=FIidQFYI#=`+q0F5VRG z$D1nS&0I~_ufC7W- z=Izx0Z~vuTlv}v0Vr*Jlyw&s>TlET;btS3tvgW}cRJL2EJj_UYT?W`RxaR?kdnz`P z=shHrS)to_7|1pX<#gL-<&m0`#I>)^{kH6QNOPLS0p@DEwMr5o7rl+bFf7XCmxxf5 zEjr8Frgqz8iA$y!uHVuZc3!+xt#+!_PPMvJt+uMw*6kDMC1nk;odJblHf-$?`iT zOEZ6~ZH2*elGE#taMs_3^}3k9Ql6yVk+@c+7NMf;N3%{Vk-L;R3voy(m@(k81NKv1 z-Vi@U8b1YXmuGe*iI*8aQ^im6To%8&%2HWqE~rRZe!zjq3n3DSNE3*l?L18FyI(Ot zyS#0ZJ1jRYV8znL30*7YLG#XM<-gVOjaLZ!>PjWIx^9v;TxhB*MM~{Z(A^`a1!bv& zuNxzy+Ou+MwPzT$Tc4DhfB*Vo}_;pOycz9@g1?lM)wG z*9UHIr6R6fDUaSuPIN2kTDghy?jBW>o{QWRMsw3Prs~3qov@wHio4Y@-l<(vegXcc3~!legx-z09X zzg;Wk<$)eGa0ZwGozH4Uv^V(!@}HS}>7Fsvo?PY7liy?4eMID z9(!-)s+Xr3dsgm+cKl1Bc>2}LSJ--bgrCuUlQa=R6=O$hXxGYhocfDh{JKeOoIFce z(7#*t%5A^wBq#UWBx!Wi2K4y+9?;VxemglZVEZF{>#E1Z!pXCGsmHxca}xILU|e}r z+@D?v9~G`=zPoeX1=0&o=X?K0MPzeUbebZeEBc>W62ij)1(7|!nwof*J*-eSDNjh97^DgzbJ^z`O zkUL$ZBbBKG6C`>e@xv5NFTGYOJx!13&hYm@$vx_W8#iar-FGCUaJ(JAOfBTTVt0>3 z!X(Z_!q?qNBy>Vj9@E{44{mp7#@}-HE@%@hReN5q71H!CW(sDf zJVk1Q=*{#`*^+xqzhtWo=*rFlfTTa#0$4rwjcl1KAM0=rT4aBuZK|*asEDh zK@AUNNY%09!?o_PK8Ho(uKD4_z3;wICRn5mO8kltLRehcU0^Bj^xf|JP9y}^I39Uk=!YlRB}E^&Wn>fmzq2C z$>z?y+y;`xL+;G8+J&~>-7ijFSi;?Xmj1bQL~tc~+nom+c5`=MwA2sL;_iOgE?bM6 z^Sg9aWE*$)WBiim2yDMteAwx%rmWYshGa82;Yk6V9;`1Y87Vghm_TeTm^k{pB(E)8Dp|85*O^}0S9bj`AE7~{neywaHZXA_oA`{`iqr5$EXV;fX<_~t zJ(EdG#TMF~tcDOnov~DG;f9~y=*17c(_WFha3Xiwi#L-%Sz#^Z@di!B=7N%}!Pk9{ znBr^a#paedc_z2a<+i-!2Di-JTV+|7HxN|kQgZ{F0+Jipa&KJ5+vq(Fn#C{G zdWHWbir(XYgkQY1o&P2bc^`eHa-Z?v*oH{YY|c`x@gQR>cWM?YcRMHoinrt)TwWvr z$!)l+6g>zszP#(|edy|a4Em1hed6lzHB9SFxK#NrC3{#1k`HT?D&qT#)*?mnJ-2p6 ztsseQymcigtem{}TczmdAQRIkKns+UuTexm@z$pxURDA96LhsA`L2wKa~cx|qc;v@ z^d^A1RFC(WZM_y(Pu_bsdY6N)QN0ze9$&w){d>yQ1esLI$BM33PTmpAQ#1r*{L2Lyiz1M`wH0qo0m%0eHC(E-+(p-c<|%i#i#`IKrJTG=R-;JXAT#J(Py{aC3WMZ5uXw8tB;7;2wGd=N zdlF=P*$y%mpM#9Wzd_$ui++Qg6eWR7ibjEqMJ~u#$S%A$s>NiG$%8VGu{bfou^0<7 z7P7zXO=>Y7WGsq7#$q1GgwYBz7E3@sP>ah!#^P#_vA73hEFJ|Ji>E+0tHlc-WAQS` zSZo6si#;G?@fGM6wHSDiV{r(`Seyeg77ZX{(FD3xEf#}J7?*>L#Zw?-@e0UTybiie zE#3hciw{7?q9W0;s0SH~MWEZ&q61_sE&~}0StB)JtOps3*Fblu#oHib@fVP>_!?v^ z1}8Zdsh}UK#W0Yu7y&XC`Jm;vrdsns#`Yo*udGq87K47I=n~LU)%&@t_bXTLanO%d z?>UeOL-yA-VQdDSqqbjx>J^R5|HWP&Ii>hCvWear|34&d_|*alm;zz(FRbl zy8a0?Rnb3O?rWDzp?R7%I00m0&&GI5^ma$%Qi1(`VC3o>Cm4B~Y`LVFB!r=q7p zrewYVnOKETnu2SpzGqmWXg*v-EiMA_lAx3?=qHLU0U2Lz2hD*?wf+u@sO!H$#^P(x zUCIrDFlkExnY5LHOlV6$#`X%(VQO&|=x#;bAQRf-uHN&m-b|ssKt zo(XzLU8lRQb6nRRkg2;r1ev<=IOt)ucn)MjTL&_!ly^6OrLG^juAjKB^2X+`)is_= zVq-fPWNb4*kEm;b>pIzWZ2>*1u1j6lD_mFE-{>)Qm9IP+pLe^iC-Y)tL|xNCM1s1T z1A1Ih0ca^G)%rH5LeT<{Db=+glLv2sOde!11vS0i??F4&m#v_PBKcSas)X?w=xIfJ zKqid5p^n}}kkLC6B=42*raNdUDAoEQD5BiGAfxvH=vn0+1}#;+H$lHq?p@Hu%6$NO zPPuI$Ge_DDDpc3Qk8*rI24s9b0km2zP6g#D$^@B`DF8jM+$7hv)OGza=mmAX*L8i! zb$tz?tG95_X^MqTvM%ULAzA%Hqbv6{Ss8Eu5W`D zEBZTVp`!lZax8{`jKv6$u_y-_i&~JeXa|+6?PZ{5MR$NMQuM5gUIl#y7jMbit*z=R zZ?~>d?%-kabtH*%CTNMG63}ne^*q=0BG9Gk8UeK^x(;OG@*@}h3RI-7Pk~-iUtR#2 zym}c_pssI#)~f5fuIpCUbth<@x_%1!oudDMOga*e;p>jd4F7KIO0|Z8)+;w0 zWWqfSWWpT}lB=pz>wJ)D3+XTQUpjQ-K4O$9HwVrkL*1CG~PVgU8?=@F1 z=~%ulsoY^869aiq*u)?ov_V~qT-UQ)*Pnr2Q`d)G*QZ?94WQT6b(8D*zU%rg&>QOd zwd$=vuu2+NJRM+cW*IQlJzk%LT*Uw$o|G2J0 zLwqY!T|*!f?kOOX8xujM%}fI=v$SMDZ-e5kO3)?BT?{fU>S~Z_AGd-k)%91PcR=yh zi=Z=l3rtM?G-J=J^E)q4lDMY;Dt7lTr*zk=RZZYRi;!X8key2hW#4k7A#2q;g{ zkswoo3qT(z*Xp`n;<|np)SjH(1+^tT$j5NWct6GK_98>eXi?j zkf{f+f?Cw)KZ8t-_?wINy6B*j*vCPA83Ho7b~MQ3+6ka->Uyf{n(4Yu0Bu)Sd9U2` zdgp^aR<06c`nrXn9m=(VOcpuB3x6g+d!tCz52|bLk>aVo-JQq$f zsZcn+%*e;BxIi=C@;^wp(&lPDWX^?``J}3RE3LAqb-rxm$68hXkmE3xL#{#1=Xw9Z zS(3@MMIe9JaY?X{>fag|(?pBz$D@kpnM`~-Yjpoxf$ z=#1qT{a|8To!P})TZ7{r8lFR1!+{o)6p3tS=PMF1cDBK*G@sh_6ibOGD2byKi^Oxh z&C5q8<-7zb#W590ud5%Q9F07ib4gRF?Jk{-DK0^#xCA9yTlsIeZ8l1@oT5p!i>8+k z6T}t{Q$Oo;e!Uk?HZGEr5?MKdh4T#Dm_Xr(jU+OiU&3Mh(<82}=^K^KnbJ5WcJOu3 zR_3*)5rv}Mq~?yMXiM_8u5VOq(w4l1CUFlI+II$-Lc0bj`Ou9#8F?*o46+9)Y5lJ4 zF5|Q*G(o1&1o3?{{u@pna5J1KH0l0mNiiK@Lg(-Lb(asAIm77#hf%ijZt-&7g_nBx zHLvIt@0ItFOCs2;(Bl?#Zmfr1qqDcH05o$MG|af|NYjoDYdt^s_SUPP_m#MliqFYE#60?)=oi$ z>YG~|F80R04?8}~9FlEY!|jsOBWgltgrN8YYg4VzeTFBWV^%}486RTz$x5NThP|dO zJg<#dd2CI12W-n$F72VV#^x4JWaYEaN+tH5Hxg!R!~FVv8TOU08eT6MBw^Ya)N49T zc>6T$)y~Zy3HY?AFVUjWtnvikYuoesO?k@hpOjKYfm98*{CuWo|14-Ms#1O|w zdacov@Ms#{Y0|7t2}$XD`oq&hBdJ9CcZx*a)Jqv!rF>;**1U-h2oCKqy6HtoN}CEY zkEv))8|f>N&bhfss*gK<`C_KMj+6QQX&SUwYTsjMm3{dP%tsxKEfFW zJrzxcS-VM&)3o=dZ-$xZxa>8Mtv%>;%uZY6ooD!$S#Zp`ufJfIEX`k;(-fF^G|0HB z(;>$E#_%$k5S>}uRNESEmlj=3hBkK)=f>vtHmzr4#!%w|a|-DI7Mo0W{SS0-Qdh+= zIA=*8t36d)<%qPbnlUX+^GSn*47%AwOsCfNyCM=c4H!~@j?69UcY?J)4L-X2d zXD69Ay`#N_O0|TUPkU_>Go*1LPjns6JV6lAVBNI$LNZxu&oHI@7$Qu4+eb6~rv0d9 zyX~!D(~=V{f6Gp^Vp}%-xxY)czG<@^`Au3Ad8_*0urW<*_OxVEaN1_1P^2tJw2fs} zzPNIPU2)8Ly?fqU|J7!u?oL-??~3CqF3V}R+Q`Ogi_<39q~l1Nw~bZWyXy4HP1c$v z%}6>o>VVU#+Q!aXHnuIaxS@85BuJZ7h~;V1MhciZh>>>eE=L8D^t3V>dn%Kick-MMx)O&z`~Ec#WEVf#uOe0F*)?3jK*WaE8m&fRq6T5{pDvnC`@Ib-yZe-9t@cHY3>KYjihwrTkF`7>74t>1FUg-=c{ zy7IG+M;2e7H0PY(NjAt)Slzs+WlTfOoQ?r;@}6UVtFW#%+&(5P?S{Cxh+)Rm@a6mV z#d4J=3j``U}%t#-T2{YQq z6vCwW7}>iv%g4y`qIo{15k{V9jfTZ8)4Ka+l(_~*UbivKnD*MG?ZX$zZ76y0ky5^z zwVv&`XN_olOIS+Tqa#Z;{o|zBp<>m{Ty>GDLEaiQNOdG%1j!MvetZ3q<)Z#^r}CfZ zSd+@isbYe>{v4z_l2eX92{HaiO!~*k;)=wlW59*n5)Jy3q&kwnl0rEWWBie|xc+fc z2gRRvPQN}9>(9ZeBYEfelN{sEA*v&bK@y8Ur`^;U>(5}-k(T15>k!vRdCFIgcq^nn z=zhkA;=gfpHr*52Fn_bH64a{FS-QrZJq2u?f7?1ytD~e@a~$I847ZtNmyx%)ox^w_ z&kdWy@tK9_05c*9P9qMIdN6(Zayv!LetB>?DGsK@`yv&6#tB&_F7r~gr zN!Q94=Jpuou^8rs80OU&=Fc(Ar!maeF^ufy;g4Y`hRKX!PWLgDOxz|lw=DDfGu5Xf zZs)`>^)XC)40A;c(-Xto6T_^IVP1`4-iu*Ai(wL-PRgyBN5?QH#V{E$j673r4yPuZ z4fD`RrnZ>IR~w@ffswI74%7cU?&=6LCOQGp+YkNYCP_EV(ed)Amkb&{>&(oo^z?K& zqaiSxv6-yYAd@pPz+~m*1)03L0VXd?<{Mt0^Kw=MnY>#9On%w}K_+8$kjY#hWU^&k z^@f$7Bl83wlQ+lDWTa=w+{L4lk&||Jkja)$UiftKwg#Bo^q~}jS0^`9_DS_I+4AO@ zkI7vfVDi%T2APa3s({yuTn#cg_XU}}Eq*35D`O=6oyVWdtgP_?CMQ#F`gnEn(&TMn zFO#4DfS<`q%Um5`GV=BYn9MZ!`nSiQtjzS`K_(+F$YjnAGFdBvO!lfEld~?!2bU|S?PBNnauS;CTmlW$=(xWauR5(KA-an159?>rT~+dIoi); zr)S?7U^3FH=oCCYXJ=$zA7FB_9|>6HjbOnxN5&V?5{qdU(d+E${&`0iO@V1nwgTKwpTJyEOAZ7b37TOH=Jy6KR6 zu8LX>q#es4I#^ZLFKo-nQbuM5{o__C_WnB@i%RcisuP^;X$vQ$PnclVv}Up1)mSTQ zU4@1Dh56RLbz}pV1JPqcm%i1ad%WyJ$G_*xJ`@9+!0bcQzb(u@6n*=|>_boPAne1r zOt$cz)gEqd+lNxj-ZJ~pjqWwmw~}r?)3>u{qjaMrTc;MYdFu3;lZ$8aRGw^1TRE#_ z>Xg}XVm5JgPd&TD;^^HN);2u1cLTdpp|tU zP1WoJYSYf%k&6~JH@VL!;=I^iN~mn?OSjE_5UVo!|6H<$Cok}eK3HaAhg#Lx{HtTnHtz1~)7 zXqm~%eOSg0W!xB}8jZ1>5aV*TRTlrkQlGffIh$>AYo<2MWP99LzNo2YmOL3;V?r`f zoZXzKr!#BA7}nG-wVhRS;<8!xV-TuCfTmu}X1RDCk4`MKDqCxL9;iw0$WE1%%e~vm zMGI>hT5a6ANO22W@SepU!|Ktw+>NaD6?QM%%okQxw#kz-JhD~EV<6QF$<^kC4Yh?? z)`Y+V=Q`@{tLw9S&+GEi zcumaE|nx%&hFJwA}Q3hcPl8wHy>P^0U*jl&VTBjXTtOaM+^o zPpZsYmNMJ$-ougeG=5vnq)JZBk(lCJEf?~>6S&vF74b78j7mMC&`OzTud2^BEbI1w z^`|&zMyj4?wk7OFercx~cjtehl~(9o$rt|H$8tYm6f>i#MoaEWgsk$apdJ%^>$(cw zu;(WSYE~!(J=Nld8Kl!)XJF695 zX2SojbTo`COd+2GSHGt zPbsP>on1P0;=IqHQ_}S^DlcyDx70)^$B9(R;K-S$gr>K&%a| z9T5qjmxGrN2JY0Qo3d^{_OBxaa^@u$l)bMbB(h$jn@i5wM>&PBnbV?pFM+*uk%eg4h;N{VB zJNU&)Y=xL*;+(F;?x;pRx1-Ff61IlExN@a<$}x;E<$>%|?9R|RUl%wpBy$~o&jZ`C zF6tao4pp3t(#3QltB@;@HzHReZ%0y3BQGMaL4Jkg z!u0=ecP8LfRQKOMK!A7?4biB$RHMZe7j{`(!g5(Ofv`l>qDg>Yf+5h5uqf#G4_M`4_wzkxX6}-pwEw=(`#kUPgwJn& z_w4(eIdhJ8ByRo~o(OM*CGaL#34a1>;7{R|5VyP~@Md@i{26=*{v19Fm%>eO8TIM%9 zrS{_-dD6=DpVki*_#E6zqcHPqQtE0GqKouegfU7gR;#I^cHl$Xf?Qs+3w%YDYaHQN;+pTC6NLy`- zS#sE-vK?yLg_ZavOzJHGms*;HYTVtlC7%+_PRG#slmy?bYPetJomo{{m3&=6rG1_f zka&NTvmgH6l~NG=9{*Zxz3+;CQF$qWefZN_3|+ZxT^&9Zst$LBs>7#2b=POYYhgF| z6lCp%_a^KGKY+bqE^eI#)z9~ZT6fV8>cGkVa1f;4c_ZQ3P)9qR1D8W~_VTn_SRQ;F z4unl`5PTJ~rJnZ>I0UvK1)}gkI23AS$S_D)%y6hRA0yyIcs{IxBjHlWZ{8h{_b=XS za5PjM9s^Z($HFflM;dvjld?sy2fPrT3&+Eu@FK`3V&)P!8U6sygcIP8A?=BG2fPeE z2#etpuncOauPIRP*Dr@}!*ci$r2X-7$)79WIdBFX0omKkQ~jO^Q`-!+oys$QwpVJK zu^4Tylr}?l)Mk9a-_5CQM)+*4j#MtUa?wzz%TY%fbUEtG%ENjP)=bp`eIDc+tDzQ* z%KjL83RiF`JSF^TmB#}9bZsWC3gcT)p?DjrOuhq0!FOQ=+y+&X-iNjD1GoxqhbpVh zP_^@nsk=clI=Vkw;0dVbhqxQtqfH?Z1br$OcrNXOy&_?VNjE6!{Ay|6$RafUkF&2 zf;P6iOiQtC5wRbOEhT+}OX*s|O*j4)`T9fnOjBvisvKKJj)W>Bw2HQjaLSLT@$mN` z;{$UHybB%&?}Nv~XJHqpGI9cZ6`lgOz*FHTuq$kbpQpitAuD{mqu`ma2kZvbzIBJ% z2%CQ2j#>J^A8~&c)Z65~Pv+q>Zr0JD2Z5R^T%^r3Le-CM>D;N#@iM$N% zgLYN(2*IWFE#amMf9jWY{e^L-()?Yh#^gPyIkox0kT_|m>w*c;eYawl}_Z<8Nz6@EK>%9ltv@xF6 zQnrO3L+YK!IK-qu_3;Nl`g0S3>fTyI_c_w{fJ59pL^E+i0}Xg07z{ zW>!zKij8siU8vR9)DmiavoM(n2-mrNaJg7X% zgXhZ(EQItI-VJatyb}(AYhV;ohs;o@anUe%7C~a|t9Jn$0e=9`hpJELyr&^`&ig&2 z|FL7{F;MksEL1%j2Q_vsf}P-n@L0$g#ybV_obNGCH`G~=@vXT8GA=dv<;{T;;LqTt z@CkSsdK+m&3)d96kgq;L~s_`~$oK z?u3;viwv3ubqIGAEQQnIbT|VpfIoykfivOHVGUdcYvCPm7JLNGh8y7=xE0QYyC8E4 z-a+K!Rj@mp2eotUd{_s0Uh!^%*TDOr2Oom;bKawnyzm+!^H-kg{&g_5kKBa*dh#@A zPo5-S65Erur03Zw?TPHD9BJ+5pIf#k_M5ll21Pyu7ZD4t|3!ncBB)lbi3rA(t_CGm zvYEDtS?AZOcoP#eD#;C!YhoTz?XXu;huP@+88$I@roa`DDm#rHd1PZ z)FUT1I%+-=+9lWEtPE1dH8^TqzoWrXYn$BQP-5++1}FZ^elletxKsv8xEaLX(Z2pJ z%9qN;DyS5E5MBTuf}2@NL@FNL&~zD zulAmSzkwRF($?5{HFVxK?i=AJ@L8zx`y9-M&qKA5O;BUl-$I`A&F|oF_yXiP*f2NY z&4MpNja^@YYG+=CYv2a>I;3s$cosB-!DD=GUV)6O%|^(0)%+1&4PS+Ia1+#8_}8FT z!2cOO249E2g`44P@D2Drd=s{#y8H#62)Dq~;9GDGd>dW|{|dG8aVymR*zdxJAZ@Mp zC?rk1weWrTXZQj90R9br2DifwfU+Yg8YAB#tF{ zew||juu4CYuJ$dKLZrs813|=p7etMH!qJY#V`>59K=MO+1?MF2qZ$<7x{J^@6hV7o zTctH9g2bF`r(uFo4^5?OKs3KX{}f(9c{m*n{i3}VGT)*6UJTVAF~@D61AYSYx&JA= z4laR<;LY&okh^TxqD;Ust$)KF^$ zTnz7qcf)%iZIHPa(uSCokUD4XgP%jj_;w!u0jN2^Rqzn_AUqX549|l+1K9TESMYl7 zAAvW(M0OmJP?atGX=W@ds$UY-C zLY}Y9b5M1NnOg57(&HEkM`zP9`^S`tb|$}gZ1lqDm=WVHE*>#*=qPiP|4UlpFXIP} z898F)Fmr_eWBbG(qhrR58p9<1f!QiU?n-@A-wBIbDBJDKh@nG^3vo)CVMpohaende zQDa72LSb{7wrB{^IDE^@j_>7_v>fYT%w9+M8Lf`WA2mj6v#7>S*T&b`C0dNkowlv7 z)p9EveOXuZ-D0i5!v~HW8O`UHL_ZT3eI1$dOX3Q!-$mBV{NjSOV&qsQt{S-aW?ySi+cFQ;k8*SZlNkBML!uO_!hzQKaTuRHsk~I4WMN{wGhtu(vN>CN_FCsQ zi?+01-VAF=%l~JUvJVa0;>p?em?>sa3oB%BMw&buiYb-TOKW=eNOahG9ghL)Z)^;H zqPWpWD>lDX)M}jG%Hv!tt(j35CB$mPMK*{^Di`H=VjV(|hK|UOTEF842#k_)C%>{j zsnp)6>Qoj_zapNLxT~aeKai5xI*@xgGn0j8ejNS8v`OV$vN@#JYM~!R1p}>B1xL#U zYo}0K)3dX5TdbvoeyYu2eNRmp53X+Q#vDlV#(c%}MO`2L+t~M-o;#}jS!>@LpYC?K z?bPPkJHBcMcy(5cNcg=Y;Id}-wCw!Pmvw|&!{v)yj8o!Y$l z%HpfuEIj|KjLDz&@6z>6CU%D4L8mrn-qYc#-d`O0_UEg{|Mihi4|&V&5~_JbGr0eR z!s_WvB}~h;tFdxVp3}F_DHFz5R83})RPF^8H8Ur4?>3>LYEotGyP4^3`ts{Jx&N`n+%7$OT1UJ0>Xv)Db^5>HR?i-R zTgHwzDZ-2`^RwSM)V^=GySa9>dmi`YmkhIu|0PAtQ{Z`clOF1L+{E``DKv<_5;z z&fJfEDPr^urqewc>a?E8>D~-=AB4IOL)~Yg?#ocufdQJc8}X%x$qjW~LftMFXZ5$C z*GV#xGEAN?MT|~}q47bt$d@8!O=xayXfFQ%&1NbMmikhLS>{U-(~r!cmBy8Gd?{i! zBgsaF+2TtP!+G`QGV6-IqL7qf*85V#EILs4`djQvY^90h%x(9jh}j+L_Jq1jvcQ?s zDJ7C3CO?Z-)%v#7mk6^jMa(5c8?W*0GGAgVGa?}y8K%IOBIe>ycWJ1r33YQq-Lga6 zb5%#P-Ip@VPG5?c-{iRSkTT4(z7#P}QsPUjZ%_MD#J=fpIz4AeVh*S?GiOL0O`$Jk zm~p-oF@2A4??yAs*}fDpIrQ4HkzqRfQp9}52yc?red$ZYmp2)D%ptzML`abcHo9kh zDPmqnBG~A(tG=X&`2>j|qWj#JBIcm)xf2aC%)!1CF{dIi=D^$;zQnd?NJIeL2w#er ziAY2M-4tKa?3eQL&_jGe6ypB3r4uWvCeTySl4|u@*s`(- z&_wge#~-!6P>hE**OA-jTl=C3KU<%ukLyz=+>+b~=iwOFC~tTMOnrFv&4(}9{rl7x z!^Y%dU+JfsOBJ=(Ex-81xd`X|enbAbcHh#Y>*nX0+WySZF!9(}b9`{{`Vmvxl*@+w zZ@Z+rrc6!^)MAxJS7o2Q)G@;$^VDD70nHN#8 zclzfq=HOZhx4O@clx=CmWj??}BswMcV;t}m!IJJ!`Z$e3+ceT!rn?7BF^dvrAbQW#8a;avTO_f;Du9WtBd#qr4Lh@}363-^zP7H_j-X`C+)a2V9 zde;y)nr6Mcx*;KFQZ~$|Y1t4oEd?8b0C4{A$$neWvT0HDQkxd4@xIc7W-6?ALDOQ} z6Uue^ztNuTQJLSP!cS3ZepD<-w})6CsUvF#mD6~n$FhTDAYyy9J-Mho%WK1Pe7~!D z@0LfrS&&D&cND11J(m_ZOJ?q^Ys?ASV0y>BbA$&#umQmUT*DL(z5$JU)a8OM%=rph(uETX6>KGas>zV+nU{9Sfa`%Q|uO3kkN=q9o@ z>*0b;96haZf%d$&EiOM7?Y74s^K*2gbEa-?4ug{iux%40o&EIv=92Qq&}?tp+T2gF zPL1xRo6b(_GCFH~qZQN+`UZ(2ap;Ac8a#$-?C)$yXdD%mS_WggOl^juM#C~ZX9p49 z-L)u(RMWs_S6922zlMlAgTj|X%G3|cX(-wmWJ!?bSqs-I+^S5O^de8WNQ5IU8!2T* zCdX~;U!>x}CEKw{q--A_b}=?m@eYAzDj`xjg?nfH=*~ncy1T25kOsWFy4o?XM$`YCn3vuyzM=tU%RO$~*fce-x8u}#`o!8UhB zxDIizr5)I0kB&$WazrP`tL_HH&J};2OwJ8PJ^#*N-FCmt7ZC#5{5rlRs_9JCh>b2! z@j@+q!Jhhpy=s52obzww@>VtWTU}$nwOMPA$Yorq&n6P?dE^>skFMS6VerCz_Q`H!X?^#j z%@b3jQm+wvYogZtPU*kE1rY<%*r@m-2iQRfpY1N@Ma%hcnXif7X z9BL?7O<%Q&WZfKO1EZZ)0}8gzqYYa^G@TpV!G{^`@YZ5uQz9A!E#!5M=B$#R@``+-{5&ZB8(}UWuQzFrR|O zF)=*C`UQZxy`7Pgg0kZPhR}7-wy7`JO;1F`vl=?vTDx0)WUOFAL(aAJMLTKGxnCbE zXtMWP7|{8)sosrk=qjnkBwtp;Yv|Qs;vA>TZ22T>LfYa_vMy=-IO`%x2`g-~PFqiX zx8s+5jqk1|hI{LaRw#8=$OH+`c%WZ&#r*I2zZdMSFIcYMm)qZqme&_8BjDCteRNr@ zV3~DsubEebTgtrxnw@9&w5Q6%inhlxZy+#r?;iW~vDokWaV+iH*dJcqUbnSP%?bSQ z?3b9^Q}@oXDr?@WjOTY|q}>$!u(Lkxrsl&~z0myXH~go?Kq|~x3$wMK?5LF0L=wNs4p7J{E1V_X(*=aGz^auN2%fAWEvLFL$X* zD_Uez^@fyGZM5TMMukDDD%F-M)t0(c+g0~rn|?)0!&KD)Kuh%d68n3>lKO(hq-v4O z)fX*}MHl-c@OfQHMW`P&3Q_z zua#B@|9dI)9>H)a@}H#8a%}%6DYQr_pnd_rT?#EqN}=oZ`}Owsg6r!G7Q|C%K`go; zNTFOmg*t~RWQ+gKSnZxz=CA5A7dKy^WJ%{g3S@XT9V59-m+7#xVANyVbNS}l^Kd@1 zOE5=zlxCR96&(BDc1d=YbghQBne|0$W6`zE3&I9H=#ajvK~HWYhp0j4u{LPb<*Dyg zr@HyuZG*nuHt5@F&|4W#wb~A^R#L83h-1;!&0E!=+h>LP0>44uUx!x7p;gYIRn1yA z+Yntz&$EKYI&A+K!LAq(-9>|5uyR1bHX3w#s2Jun-4QEVvCk>B&ik8Y2~ARTd2=Vl zC!S6T4Z0ovZVDUUWJ4R0+xMpA_I+KlVcPe^&VZI9?7#4@QCX9lOrtYDpO?YHiuwWn2kg-lSbqfw%*+PdGZ{W9g?GM9s{wOcx%5TriRMS49pwlxAwyrGr88DR{TlZ$p4XXn%eo7{;hWYXjRe|)plty7RgCF zuj#6Iau)5j4fAf2Y(SLc{6?j@fM&dayxGu@c0+x1i@RSRD{8X$JKcR_tZ1FRPe@K$ zQFXmaJ=^sL&Ai%up0|~p*QPY{%o-+lo@&MyD>)b2oL2*~(~iifjynewtj}s-jW^$IkbU$D;n0|8qjgi699$RlcZ`+SPEGSWKfGg* zW^XhO*lyc`?X(kVSq)ur&ds^$t%&Bq)&`;ML|vwZSRE@`Wm|x4q<7oe`Fez}JzT|k zs~xCrQ+;Pxm(A?up-!#SQc+)|W&ky_Pg!S1ch8ErX{cz^j>sojoua$-W0NHQ!x2l^<0nS%>Bu82Jonz=et7B8=dF7^kbuZ zS=oVfBL7dZQdj=Jh`$_r4&?<_x`O|m4OXA|Hs&E+&R+-n zN%tvMYT*CV_{*^eM`#I0j`;)sJG+~aoNsR-mGjrZyvzU2w+N-8n7bTvEK+|f>4k{1 zI{?Yq%|oiNcGZ15yJblE)&`&R@T?)18;~xwx|@*{gAV2vq#sz_ok*2dcQ4Wvn2 zW}4M$cs0T5_HZGnrY4b z3+WuI%V_7;=65jqJn}*Nt3J4>wGy8`n-SJrf23Jf$7jmE9~U4wKePne<q^+kh-DEF&`kgvauIwk~P6cd8f#h61@_@ix7bIuy6r|~==Wh57t9ic8lW94*rBb{r_{Q+r+mEK1hY$a_w?aZB?!7?qYI}gd}u0(Qn??Q5R zpG0zYUkuH)%?#}3AUV6kkX+11BVm;My%0(LN(b`;Bp0K_p}AW^bH7BIW6iAy&HW`b z_kL*ZL!`OZ+&@EeM;#dWdjgX4_f(`St+_LioWDzu&PJDGRv@|3`3#Z^^UFxi?nb1m ztliB>r&#G7q|>b3j#MmX_jDv@_beo5_iUtj*2X|2=kN7MW31iVkXG1VA3(a_N>3o& zYo!;EhFf#5BIR3Y2a@ySb0p`-UZnZfMp{-7z5|h5_y!^kuy(INa&~KxNG@{WN~Ei; zbPdwQ*4zW3xyM3tPa<7o%{>#E+ksSIZD>KfbNL7)=khT~p0)9PBdB0b=Jmi zBgy=_P??Y~AEZCyU#@F49whtf$%E*JVBxm<{b(l{iSANu~z<-&j?0!iO;INjk# z1)(|)i2_PGpNRAeD|JP3p&B2WD-F#}LAu47yCO9AXlU*?p}FUfZnfrKKyvPVg5*-; zYb57y+oSE4b%dZJk~4QEQXY15%m5@8-}8}N+%87yX@4z8I@3zGBK5M;Dx}_4dID*j zm3ASGx6-xWV}8_1--J@uF>Z6P9Mc7z@j!$XNj@wKSTrO&7F|3v;; zKl7eWBk9s-sqN6n)<^uQTn|dws!DcbhAz)!bmBjI4g9w4Yx&&f;Lv1X!!ef+RFCF! zuJ4EHl)Z6Hu#HN$(1aUPt4&ony7>A_XsC2Q0V-^lLbW9)^XJZ|my}`0Ig%pgPX1Tg zWSDz=DPo$CoVoSB6fvZxTf)$Zhu?%3$+6*Sqhp=I3GdFAK2MWjZRgnMv{SijJ>B(- zt{_oT)BV@{);%TNWk>N-=#C96nl_2Mn}2&UAI!(B=~&Ljaxpt$mz7Rq9lG1VBu~1b z`nasd>g4_b(&gI^%Iy9gikyb)#RID^&(~LH+79nnl)BEtaQsvGZcb_cSGYU#mzY-z z_!Lw33!&n}XXZAqx+1&0lH~GAQpCK?|4#R=FGaL*jj!7q>g*&`dP9`eays zs(-wa(q3(X6YZ2ufpfu+j;am&n@!qsWiRt_Nm(Mx`nGG=ryv-U;hR*EPt-Cw- zxYgf!xZkutd}_e=aZI!gGvO&$cv^L{r*kvuXlUoyuQ80iy9qm=Bi-$JD7f=u%F=2be+Of{33HsqDd zRk`nSE#b&*jzaeHazHLy;n!A9t~#lPgVSfsD666bCZzEcohnX=;M8e*cEJGaDW4JA z9SbNQDe0v|PmNM*VMS+M>V8^o-(1cD=UcgnGiETk#?b|{TXlFLtm*U1In~?8{`ucMg}UngoQmh4Jbl+!eX^T>y6tl8a!t38{Y({PUnC5gF!D%`RU0nJPgG@125~AdlXgA9oOh_OucPfqe+q>NtzYhF*Hsv^GELHBxye9 zZc&ov2u3^0k~D+RtVz-oqFI}yxfIR1Buyon#w5*^Xqu8V^=Q^7X?~7oLy|^Q{~JS1 z;z?kPm%+C#`vH)ZG#uB(E=J+y zG!X|zw6fLuIm?IpW@OcgdR^kKz%T6~m8{W@sL7gW3ys~?z#0nNxvYhm$`%^!cbDvP zeG3iy-K3adCmMUT57Xy)G}`knu6Y|xBU8z74f_t8#`HvucAs%q5N7tTP0_G3ZHh)` zfx0WOWj~>{sz9UtX_C#9w9rgzp}Dq&Mz3#@-MPPoMqkt?n|ZN?=Is`mk6LKb(o)?y zsDo`mF)XjEi{8$XvVhCOl+a~VGGT*Ei_sfo9w%G3`^GB*+TPR3(ap@Xnx;9 zqtmOCU4FlXW_JtC0W@IUG84}c)~l>S=AcwET_*HElgm_KTywsfJsx1=8l7HE;kB15 z{x{2ve{nvb-51N<;vMaw_CwG$>0xiFlibO|z3o%HHRGQ(+`C5(29h+r@>4Z^N>Vj_ z8B8bJ>Zg7u(Vafsu20o;S74IN^iaQ(r0Ju+AW?HxH?1^J(sWNx)%56+s_8W@RnvQN zs-_S7PbRy3mUhWX@T*7np374;z1O5_`sxLBqOBg?Hm7QO>)YxiGyOV~nTeX7J@v9W zLDRE)pPE!nUnW|T%=GA{7uJckdh}plu4GN`^{JXZJCilNx}T*Yncz;Z?)^HYXnJ(- zlB(%>cB-b2TEIkidYm;UMbo#}qEt!2iC!ybBTVBA)tZ%by9ZP7?3_;t?dQ0>I3x46aM?K4P zz9aj*6|;e7sIVsdjK;zco8`eFmnj*#4>eBUsB z1)UaIIei9)s8(}qr+>(#PViLJ23AjW=WK@Iu%WB1s?ph!;o++LI7ibSAUm#X8b@B% zxKlC*@AGKQgm}4_+GzQawy|<@ennMTp>|!@d72!HIr_9*V&tAb;CPrTxW0Q+Os!5`;etpj2m^ecJ^kD-#a-I{NKvi zo0BhK-UxFm3!SMCK;Ayi-dv$~;R%;DmvYvlJ~v6{&1~Y8*UH(Og#|ow|9}^w_c@dA zGE&Pmt)IQQ?G^T5=1-TRo4b#*H}_y>=SFLcw^YPqA7^j&U?OaSCd0TiYG}>9lksQ< zW|scR8r!FPdaL#}X0l&(=Jpjn?Nf9VW`_Bbe#)BG!q*%9T+BS=o7=->^vGHxmD&I+yg84)^BW)d%v zoki^_?_2C?Eo$9FU{Tv8XJqT}2*qM<5R3JJBJf>1(ff|fwCiDV$pBr!SvBc&WQq4n zQ|`B?+z(Suas~El)RO!631{8(4IXd#N%>m>m2ao{`kx!OlH-?9IkX%Og?GYoco&=p zSHOkvZWx32K+U_|3(?s#RrMz4KJL}!J_z^1hhSTx`Y`MPSHrX6BXB5u6c)iXa3XvR z)97g*hrfmTRO5GW zDtrOXhwGu<5WEO)hA%<(yEiXG_N6z!hdMKd;en^wF1mJ4pJUKHZH zSbu?|;TEX#*4~1eVc!Zh^Yj6H3H}X!3AaOiAVJgQb%NAQ?-ckkycm88C&ABPHRR2k zr}^hS@GFtgA8ft#{8+Zo%7wiw)wBZa!*bZI?JHVg7j!^ZV zxzHA8Q{2fkOcQyka-vIZ$^j7XY@5;!;hdBH^KbSOj~`bn;FSrRx#DEUwzBU>L=>i22(WxjQN1FD3$*oIS0PS7Ii@CvN~ zQ^KU4>!sgxGKHL+V^cm9F;|j(J3^OT-t039kmJ8o%PZ2 zv)rm&1lEOSRNSoJ3s41qYt#Dpxt~?;h>|=ED9fs5)VTARRwUTyWedZuz=%36ce2qU zR5oymPrq!MJbMK_#qFxET*3X0l>0|JB>#T7KZe+Rq`oTZm;K|E`@8)1K?dEaBtJfe@X{l$e){lj>87rY2Q1}}!s!b{-q;1A%R;RN^|BrM)8cp3Z}7Q;;1 z{}QM-!ljV2MD5vYdebq9d%e%)?UHvLEQ1;nOo1!l;3H6by*~>T=)lg0(=E_ha2G# z_y!yc--MULzrcl%I_E8cZ^4J4&gOa+{uOFZ`mJy;dObrNUxpo_K37YJ|AGg=!)X6lOXKy28SrdKTjQMz4}|B#gWx#W z36{WYSPA(c*_#77C&^m?8RL4|fB#Up3?2qGwqhMli}6}5@mx+@NpZ0kbu?+bwt;rx z+?4T}?2zr|hw!%6#%n3Fsd^4v?wn8ke}4vSTAQvuO`TjgIMd^tdP_TsPQU zdDR$q*w<`{Ybtx%;BAO&tVesfmq%`_wbQ?wYR!hjyUHHc>>hs2!>k*RXaMR*quPxw zHJ%E`N{XolHEsw~=}r;TI6^K=s_bT6+~(iA^N@FQ7Y>tTzY>M-g-hI(f&FSX=3Npu zfF^jlmJb>eX`C`Su;GST8YBm~;hfL_DHz(gv@*8&-I+=Y@h2#!Ly0~XgD0Qde1)BkA-@!9|vn;5v0#IC6GSUltTJC zGZ8)mCqeoqGa1rmn=(jSYo`EHUgWCRpXMcO<+tqL~_t(H*KI2o>lSHk;X1H2zLLMoH@27Cy<4OxeLXC6&2w#PNf`5n1?Ra0qP4INaAFsi2@Xzo<_&U4-Zichr8*mJDZA+22k-9A?_u##|u@XG4R@Vf6-Xa#+(gdNx-_XZwhm zWtY1XIoG1`ExLYYHHr+HcHRM(x^6&?w=7MZV|yw!@AlR`g)j1NC+S<8?zXpF<*VE= zqw0uc{#%C#>RbH2$2y@7RF*1i_i?>{XZ>)&T!AVGrt6;8pb2|r^?>V8d`e7o>YRFM zb$CG!Y8C3`gVRH8e{?%O>Ixpb_1w+)J-n2MCEWGlZ=J7i%NKdd*8}0H@E|xDX2C0A zHe3ylgm1y4U{E-d+k~0 zr@=pRe>&U&&xDM{O%Iq!JKYm@hP_}H*c@Odikv z=4r^Yxnb;N>vbc{CLYhi6CiU{UO)Ie90i-;WcXXiSkC+oGKMqj;nk2Y54;=UOYlxe zU9xBX^6YBg$NV1BSDTG+EBqs*FEoFGD)XgC{+dL%nC zb0WMawI1m`hJ7x!>%hV#jJ7(-qgJkOc{uiq)X7_;6Q2ing}AkTa)|GIxwWi1 zqQYGfJRpV-W0P&I+RE?Ft(mpcZ0((@UdUeI!?zwR)dI+&Iq~`XJZ@cEqPnJPWHs_h zO@!*Z_1fO47uDTVdl%GwH=8~$Fj-dRLbc3yYjRoD^l3JY)F!!bx>vn*#7R+@;5#vC zl65iOL^}J0fqnNVzuLc@<08By_|>(0yM4Em@rqKpe_uMQOj)QtWC5xmgs$wVMRobm zixBk7?nINKD|poYNy@z*u@Zk@kaGWl+Dxv%et#ZKg8T5D#d7-H;8J}r;pQg(miYRs z+q-9H*28;xc5Z+pAg73WEJ-sr!kgh@xC-6`KY%}l#}nY6!M^b4P|wJ`kM}NyzktlU zn_HpAPOPrCW2W2SYVMaq=5fs(koi$_CuF|T+yxJ#jpI4d>jv+J8XK|J-YbRo!f9|N zoDT1UJO`WmAr(pNA7+6Rd!| zH}GoV@8FH_1$Y-+59#mBi;(`zyaegT3>)it^j~HJq@Oashk7^i2S|TnHbVLl^GB#< z6@P-7A9)qFBd>Ws;q`>C!L^X@p1hYJ+w^(bRB$uYJC8SEH~1Gg6ut#V!?z)MZMH)4 z%De+fd-FaduI2+sT+H7fvT24oFZM(D1GocDgFE33@b7Rr{0CeG{|VQ^U2qTl2N)TRcqqIP9tQ7&hr{2%&hSt02)GFz2|s{G!7m~6Bi?a5V}B2x0*`@1;j!>8mc80C;Slhg1ccKNM~Sp&*f#pzOXaw2fM)jP~(mPFm){R6#27+tm9{Ur9Rs; zFVM;E~yNJ2TM8HJvuwwu0Ynf+_gJqE+c)AyMr-2=_c}q{ zWAK3CI=gjff+zoA+9NRGmVhL7khT+Dg%yRf%Dwg1IAm$uBe%kAHoxl%`n)?R3W@ic zrcAugqbW+fuTHtAIY|0luVr-w?*D?~6x@e>D$l*)rE*uoT{(aGzP^+)t+H4NkASp$ zb{@J4>iz$8SPy5w#c(Ek1lGXc!CI*K=~?hKI2*nT=fHo$xlr@fSHc76Gnpgx4ukXH z>2N;GgE4p+Tm)yq2Dk+N81in{+z8bNFNVAmH8;V(!k<9iF&gGvJwpO7g-63*!0zxC zI0W7bFNVutIlK+lz}q2n&*qmRHme+VChv*1JUf8fLLdbk??9R3RO>}Vc=JcF4>;p=b>)cS$Ppq_`G zga=b#o`Ra6SO-snzk%Aq_i0!JpMjUdMmQ5b3$KCC!x(IWw?N+Adw0X%!C%1_puU-2 z4?lu0!q4DFcrXQV6FeHe29Jk-hGXFCa2(tWHRyW--U{D@jC0IiAmbRb1u{-Be}(kx zW-I(Fdj(~rIMQ}T$teR#x1%3#t;ol);$@~K@g#Uy~;4Vm9 z%}0(9a)zM+rZSm;0=CO zKcEIySL*!GtLXZsJlDz&!7!>jD^vS|QricNttqXkb#p^OFN5L4D`9S^$hH2Zww01` zwNm~DP@3pf*lNhv8M9{APMTCUb7p*kNZRs1dnjA|o!k2R*}XJ$K_?ToGcyvxqd1lD zN7rg5^QY@b(o69?7Al&#unXj!hn)vy6JxKG`z}!PpeMjz!4u(g@Fb}8I~gjiPJy37 zxe;8fwXwUa1gVso{%U8=Hba@?jbE~(aFs)~`R?-9M>5Y|P*z%{C6X1BN-JF+oE8{L zWHM1Vy^Tn z;a*9%#@A10&PQoVyJzRfW<$-9&4tt8m2e)s3dZ0(cnh2l*TSpe)9@PjGW6j4kli%A z_V`CT>Kz2@;Nfr~{61uzmUjYV+jOrRq@DFjU_C5@F{pfA1XIfn@3-u>pZlu2H()Qd z?8uJd`82$vm9nEzT(oL(;q;0smJjL;O)pHha#40PlcLd^a?cH1RB(b(h#lq&Q`@hkNbJJ#T4sYo9!wWK`~QNQZexF zS%V>WlM7xjg%MvvA?K<~YbvHEm2@}FvN7&_Vpi;&&r=YP)*qvFdu#iFN0q}wNHDY-sSuYJ_wnJwB@i3 z+{tZQ$og;70jm6UggKBs3GBOf-XD0wxR1a~A=~VG*T783`Z;qT)EI`{S3K5nnJoA^ zWWBjv1IfBTJBG=DdI!UM2>WjRFgTw3!y)hG^)ArPBOC!WSNlDvcP+=j74TTddtZ|a zdB1CpgDRWH!_@N5`wq&pHpX?A-d%Jg;xrESoh0kZ*j7Bbt&|;gftoA0Gqt=At*ERi zt8Q83kc!vZ)07Q=k_Ls$TR1V_T#AcsfTIXBkOczhFLM#Goj7`Ppdg$6&y z!OoDes&@$-59h**;BD{{cqjY;dKnstx5~dP938z8Lxm7{UxlM;}!x@lwvxaXzyh9;lChs^%@9FVw)Xajz zAZv5IQSeHrxwNaG>c>2oTIcjErs|+}URUb)L~X{oDRoYE)Q0hX)7+I>=iK|lL8X(E zdzr*4XFYQNrSvkhZT(U&;}=l(_AsHu*18Aggc3X1Jq~LSl7~h6afLbqHRvkzu9In0 zV{5Olt|azE6?V2D80}Qm+Hj~l$-_>y=A>2P)ssn~I$$lRkFtKacLzbOantasM;cA} zQJL&Qp3sZcY8_p_Y?cArE2t!Tgwv(_a4b9AH>4kw{w454{)>x8&w(E6 zat!O;y!YWV@FUm=zlP63)(@EHVR!gD7=5*@fDb*bcSiNh?>vFg+Yxsc#D|{ z8gFLU&mvX0azc&1D3nGqux9K>hteD!YJ#s0gU-M@BX3lyT}9E1nQE5qD%^}&D}79I zy-~dghf4B8j;Q9iS2ecV3f|AnwG)7A`7sY4?E5=5-LUU8*ZJP!LV0m{Y2_?d9>{5R znhH+%6=hhh)hEh?DxEbU&%^qn=c?dRUX^fj0)M@H{Rfl-<=@|-()k}y_2r*X?`?L$ zn<4WK-mUOs_!|5Kz5{o|qj2j}coJk@!YhS);0(w*KTqTHFX1oYSCDo2W-rvZ=4;5h zdGihYJNy@HLpTld?gzp)@EF(@_JQr-c`yyCzO;u0umijhc7&HfzVGvD=O1;nFoN?##6O6PQV zcWONuU0XU?TR!ZznMjb9KYs zCanDq9(G+H(aPL{3bT5JJlvY(mSzVJFY!<2^rL%}R^im0dj}fyA9H5d@B}>+--pTB zU~o4n-Y>W+qlM{VIo^nC!KJh;;pTAuntbKy5a3VYlday6N4)%kM z@NB3jnseX>@Lc#YJP&>Y2f=jmb1>BN>=1Y&j6$tD845K%8wQua;qZMp0)7b3hhM@A zU4D;a-cpV%HZ-&F*3OF1-2Ki>n&aa;jzu^7?cp(1pUeW6h3!ugfBcaAE zqoDGs5T@q6+G+J#3ZJgjyx08vIVpKBJIZ_caepg$ZKUgb^-FI%G=Cj9)OV zDfhT!=NOjbZ*VCsO1M!GTjDEANoS?ctpqQ{f_534Z~n!Bwyd>N#mT z)N|4g;fJsqM(~G&+3b6g8mP4kweSo$3o74dL*>aF_!0K*Veb5R(&49J`7fxb8l(9a z4UcAyn?Ag(;_~tua|~wUCtYC1{>*_QHY2-#$L~Gt?{PoayK4IEvdQBsCfAe?waX1V zn~vE(CJgONe(~7oh0!r1#$8-IV&u?KY<}u~NlW}?{J=3IM~ob1j_`kMpZH^R%$QMQ z=&KIQR%LZpK4(M}%)ET8wzOxnbo$4R+3(orjbVlPqsA5Ij~E#pOQv?r-i)@5aoR$> z=!9+yx^`y7(4ocB$gVW$Rx?iOVZCVaJ7%A8lqP}liw6??;l)EnTsUG#lrSbH-M}G3 zqC<)YjT$o~I>!2UolW_{qw+_MDIOCYVqKT6jd8kRW1`WK49YrYOWW4h4$3czQYoEM zi8e65aQMLD!NUiR92w2$mqb7F<#6%X;Uk8QGe@TUVx9MYOAcv%u{_y_HRqjkQr6;m z>pUAD9WiY9I5IE!C+D00qk@uX&wA(omQBK5^BEkz=D{#@W1) zskS7*;QUb|qeQP`_M0{bDMzEmjH3(<9uplnR)r<_O{VQ{L!#kt%G37}?G3uP_#&GZ z(uOwBUTkyvJ=!#@jpj!O;|oP#oXwA;=;0H781B+R`zi zY48DAaixv~QfM`2T{v#wKrpkzm1{Vx0wD-;+8G(}r`hIAg zgr5R_y1R`ut;;rpwPRu!fTDtd)~do6kM8>L{P+94^~zUAxWm#q zwRxuStO0{BjeOm<_gm+-Z@P0f>y)hdH(yzN)tiOqf0Z%$)Bat$zWIS$v)rjo|1Y0= zdfWEL{(1O2*~e{Z{Pc95t1z$m0W-M&gu?3SoZ&Mqm+9NGnYky=>D%X&3FBE#JAL-d z+zTpdW=`ndZ9+xWq{`aKWr$~VJEMEQZoRsn(QQI4aht%IE@g@%r%{!kQU1SoZ)VNp zis}Cihk}63{;#`e9V}+Q$SD<<6Vhn^3FD_%UooLzZtk#(n%u!G+L=%~t+cA5vZ8jv z@L|QH29GHo!ZQB}I!tAH6|WH|xV<)eoH5CC8P_ehOWDL3x#xh28M(UemD@G060jSTa$FGbAWP)9#w-HRBl(UQv zsLKm=`Jt{b)J+I=C84e|)XfNW^Fo~$>K28%#i4FRs9PE8R?#JovnjO4mom&=Uy7Jd z=wFFEvHaYZB4!a!DYB7a7W-1ftO#{0LtPCWYms%i(U&qzlP^Wgjf@iyv9A2omm)^T zOUg!u8R<(AGda}hph^82G3&nP4v_3<(vNXchRO7$h$%Rh^_A9@(Y_Qhv+4COw7RQ& zDPn#U>SCep=b`S_PD}(ya6B{9nDr>$}rn}DPm^Omy+$|bd4`X%rYd|$S})& zDPnTYU@qOdQsPS)X0k6u%-@kH$k_PEmm=o+Go6hLv&fesrm!0`@z#}PzJwpX6fuLl zySc&)Gt8GF<^v?z$S@!JQp9`~>b?whoq7c3a(pRb@_HK6XnkAcOVku!ikNx5+=`D3 zUWPd-Vvg+XY-E^Yd?{j14RvRPx*?%%c&J;`hqnsWH=XS)DZ`}sQpBu8qB5gfZs4EY3m7#8JKi0Zi-_rU!iP4-dMa)*D!>w=Id?{j<4hYOG^Cirk z%`}B|<+O90lwrF0Qp9XP>TF%v=t~h(a&BO5vM)tU-}Bu3Vn?&Umom)tz7#QC@_036 zT{+p8B4!CvlhrNtrHJV@kQIICm<;fx470$OBIf8ptQD{}a(yXcYLH|j!_4s|d>gEG zNxGALDPo2rX&qOF$@is*DM!k*x=LT7#3CJNb&Gr{V!lLLZ*|}JQpD5^VZDOY{m7Rh z=5wTDt?nydikR%EF}YTEs4qp#=}5;}U3Xt1d`QPz9ghiCqP0c(zSWicQp8+?)Wz!R ze2Kb>bb{3__oWC={d@~*4n6d^fnVRUGFo!M&pKwlUAFvjeMYhWW4(zLRTCIVGty&2 z^!Ui{j2V+BnomCdXv&li&Q&_g&EIdxKgSISQ#SbIH>Yp8Nnc!VCvD>2yM=aGxR&~X zIKMGr+hRqVbF0ONsJ`DA*Zfd?elHAD%f%i+cw2cX9fqs5mvw=?q!$#SKdpb*7uZQz zEFb!lv~W`KPMoNY-=|Do=3-xUR->tO{&WQ==8;e5+9PX+)Xh&fwf*&e$t-NFIlhkS z&EwQHM@(%~F3JA4T~b|BW_@()j*c%xx5{uVy0w`Zc~dt()6^XBLUfCi`gMy8#|qM8 zMO*4`T3}74zmPY>*S;{Y(n>|?u|a9|(cRYikVIe7l5YH9Ol1jutYG(OKO{L*+r^4@ zk4ZF{DVJ&w?AcgLU^dGS1!l7iYQbg>P~JVpx13%d-Bve$TSBZ)aYCCDeT$hkm6}=GVPl=O;6{E=2o>?!JGG5(n49fW+fQvDE7~4-O#1Db+IDK& zSaermtY8~q+B;^d@y&OxkM1N^(Vd0X`@qWv&Jqq>Y$)0lIF;6b!BAhYJv8H|!k?51 zn-qSff>xT4VVep^f0D&pI<8N$veUY_Fofx%6N+Wsk5_be=s~OTihCNyi|}!_F>%xR z$A0MicopqT&aH;%-q87mf?Z+w8!#BgE4n?w%(l=>tY}YYrarnc7EO;8Y#cEB?D?Y` z5`GDabdMl&Pf?*9eKtYd=+d}cDbY$k=eT^H(Ux`l1?zFNX-q@3v9O_FU1BjxD^y&A zST1a=ozzgUCk*40O7ew&su>daJ|LEmpd`_H+-f2$jmYap+o0?#Jh?7Bs&+b7dJneJ z1CKMQv_qe;p1oMJzvZ|^GBxWvL6>#uK@_Ma8|vn7Fty!+xcJVu`>tx@3eop%aBam+ z2yRjVOf8ONPfn1t6soczou|*U zAxR4yNUvWwLp~j9gOnB&nlz`5-K-z$iO_&#$5qXFY6__LHnr8*wMPrlDZVXcf}v8tbeT7stg#anbqf2h)aROZ-P? zI~H%BGk07|b3{KBE4V&L8Y*MhpQJVK{DzDPOG?&)MU(!f1pvNdslu-gt0;{5`_-e?C11sjRY zG78Ps!o-erGYukRnZ#5hG+RUG8={+oLYCGLFH>m^MH>^$EQ_0IC{d)v z=rdgV(C(TOY?bZy?Y(BFz?$FXwYz4(Cs~&)ln-?~(?8aLgZpSxaARX(|7)dLJUY3$ zu1~J6o8rZxV6QFzd#PgsiYN|GP#hYf+sJekh_C`>s{C*JBx^#nDQo5PEpZs&?ef)Sr_a1&`ilX^VwPLo7DtqV7E7^GT4f)k!LKr zK1khk-)%eo+7uM3^yVJ85Gz_A<`Zp~1|5E$q|snB495tO+7y_{M7eMXN<0l+BBqxt zlu1HpWA$;?C5_a1{0rP7H|qxtkvUoZ7IOvZ^#g|oy+!Y!G@NEz!{LO4=6A@q7mA$Z zdb}>4amn>~enn7+!xT^*P8>7UFU%vf4FyXWTgI&Xi>}Z8kuMc0ym>%y#H+!HHWOP*~CU8r9;0l(=S>YmLF%%u_ky63tC zE~VL?W<&k(T&0UOUq6T;_FB>@j1%51Xo!c5N*d-Hm2_>QTYmSNwV*4FW~^XCQms#q z-K+p54O-G;(WOCvZ9~&O$nW}v<1jomV`@gMK~fL{+uXDZA9LK(%0?o-fb`f(xWksE z^V9@m6!Q(%fbTv}UUcGz>5(k7K+ky*KJ7SIO;|h}(#0C|e|>=(v!cyOQJ_GpxeXh! z%!Z`!rnF;mhZ|@V15X+fn%m@7V`aSXrM4QscAbc=z6%1UQ~(=_mXIE*)f+-}!V?|o zoX{8Z_@v%{51sOWg6;DMHWY24dtZa)JtSt>FWQckQaT~J#nsD%&RN}QkgPi%A~6bf zVs&LuFftqBokd!6Z>1(>@(DK(I|SnxEmyM?xRE?=SRn_)h>%BT<3fBaQMAW)t$P?l z42W+3Kg_)gd==I8$2)-#@g$X?(V|6-78M0CFWx@FBM3?)Jfetb63B@Ogd`>>2$pCR zP-2Khi`ECVXwlM2TdK6B)>c%iRI#O%wy0>SQcHwdYO%$NdcSM!nSEyFoFKOUdp~zR zIa$A1`@Qzsd$0YNnO+?$h$z^855z?nYQGfnQ2X5yAN^bE?XwThLDG)zRtJxXf19*s3*_ zS?LO@Z8`J3_5NzhYA;&n<;B$dA(6D$VE!>^o!DT9LN?gW4yOCQqAFYw7r0ELRJSllMK}u{ny2OCho!2t8C*tafyUgpLJB4owuW76II8$ zkkys(8Va?Z3pz@7W2c$MCmOWcYXm;+v95PZD%Qi^$M@bN-EoI-+s2cro-d4+M>{bM zmf1R#xxHH+dX^<#XqHy2qS8TI<-m{4LTYfPW+rSpUt3KgpKrdlT;^+H8B^Bfo&8yz zrcJ*vN*By@zBa-efj?_;Zkfci%*3>;Q(h11tN8zJnr7F&WJKvG-sIYf8MK;Rp72;V zdTMdYQ%=lg^hg&9%(}+lU`7j7x4eo8+{pZFb5M6>G~X2L13HRU(su7fWj3LTo5`wO z)5s#LV(ogd`zv@ z_2kNq)LEEeMH@cD2Ae3J)*r@`7Jbd%sh6EV=qg{>*Aa-MtC-{S`3y60WUiv!PHKEZ z!OWkw!9U7E{ zk=oHA=$_zHc)xm`k-@;fx zq4&4c602?%$mAuS7S_4uM5Z4Hjhg#RtDXdMH*jQb=4DU<$y%pBP?23m>bZAuFpn$Z ztt>c8=+!X|>ts$hH(na#)(*Cj%&-RWXQyqHC9rx93y%wV~K#SX~|C0*fZ45havO6~kQ ztE?SGR(#m3RwS%Z$d=p|E84cDvdkH;pTN{*e+%ZgSKy+3I+@+a40L4imKMzMJ!+22 za<43{t?)#uW2-5LsSswYW|h@bA8U?F+HK=A)Et*59Z@!G2$AiTUimP!cY4v&%IpAu zA1i}I6I|`@<;41s)LH&7S%()(Jk}dK%o9NB;)5x%5#E64GpNnFbhU(ZvrYebuNc(# z3J;5|lXn@jJmHxLbb4NPGsR4geeP{C=9BmRw1mk2{o&$+y;|6?UD=Dfy~p?*+KN_U zhqRS0SDu_S5zqa_^NRj)&&HvxXa)7sR?6naGHPi#wY1!r#&ZgNt4@6=gl=W_^khs? zH@JIN?W|YC1+Z}ryC)lnN0!4jdJdUMc)I-_yVftjR1?_G%J4RtWR#H^{su1#S$HOe zq@Ja_muc%pPvBV{@qnb#!6JdrmC`KnFQ$p*?G`E3H`z~R%l5dA(luTVP^eCMl{|Cc zZgbM+q|T}IEk3Y|y}q6G056`lqScFARy)n7`Xi979M1!h$)2ie2AOL`hB7g>9>}B$ zcVlp9_2eUaoFX5)B$(9^mp`SjlYRP7#(=e`g7i|QYjp)@Eo&_!i&nR^$b8-%ncNXc zR$+Vv=_9*SYr`39H-nis498Q>Fq>`UOt;%8)GAMWEKOMjN$qT;rEA%*^|cf7y1{H~ zSRIq~SFtd<5Cg9QNDzY!OK)H`f*vDYk^XvUFIq)^mH)EVi+^`@>sCGgQusf15xb;| z*d^kZ12Ola)?LoolXfvXCA>K@Q?#?wGz%Go1Jl+_-_{mF+~->*awn4mi z4~)M1TFSgNcDqB079La`VMSM#LwqMIFg-Jiw#taV<)6K#>rR4eF2r|ESy_*7UhiEY zx@1qNP_w&bwNe`HZZCTbTsu&<1E`?g-phC&>v;$NiZ?TP@-|hr%n$dcpLsfmitZiOzu!a1J9JhHTqXXRTWie=m#^p+r zu*G0=Voy-{S+dgcQcg;JzV)gVqOmJPgzZHuI^QtsRf`uc;1n1G`{ElG`3_e32H2#> z$%1QN^3q%FG*B`|MHj2|h`Zo5*32HV+X%%MNF9TC;G zL`RTrY^TtHFY&605k$IWPYp3JWs|PmZ0c1bO@o6X*Z z%@s#ewu~&=xhTT%t+wKwdtcg{C8r!q_poEKcu$I%!S3z0_X#gGV@+dpEbdHc(?PYp zbj{*-Ilpj_{>KF3f6GB<(fMBg>&tis>5MFv^h&q1mG0d8GU*lVlmWnGR%0Z+AGO~t zvri_>GKD7B@eWtEk>g@TD*j_H+odaN=J?IN0mXabr)u^LDBag~w`^%k-5T0k_loF7 zMi%XBNpBbLdNhVMk6$y@I>((P&e-&RugrKyek^zHPIT|3ImEg*ClHU!Zp3yW9)Xgk zp%RY?!5+4TM8}I($<)ehG+iS%y^B`++IWL!+n?{Pg67M*+-h$Xlw{E0J%?ZV>Kj+d zcz@c3O3EMChHDznEJe5%$-T6|ysAy16RmNehzj(_h zg>3c@K>aprra46EF_s(=p4cpI|Sl+JpSRS2(PGU+v85j$PT;i|5` z)Ki~C|Gk%ri&T+NuZoHe{Ii#-ADwc_2?d=LR~tX}Gy)yw4th|v3*=a=wF@%ER?s%e z5nNvl&-H3}s8_>-$hRiqRk8}VD+y=CD>pu-cTu@ML5cAyUE+qxNoq~)nhu@tm$(ZH z9cG8VL-)a9>c+co!h?===sx-e+mp)h`J~y)&9#}7`rLtB?9vC*w`5(Te@Y}fm3ByQ zMTnetiN^F=`ZaWk>X0s}Sh^v$eYHo@ZfJmPiI{HBN}n!%Mp3X$cca&NUe>=%PlSfq z1qmhsa-vP*_p@bnCO%-HZAIHWd(v*?XP9A(b05Xq7?mV%{?lITdv&a$=a#)43GZ8_ z?P{q-HEyP-ae60*4|J&1JE;}DbEU+opczH?zTa!6o7EY`2j1^BeGAI1`ws^skZ889 zD#@O9Jnx;8h>NLJl8mowIoTgj*H7$GiHyC!>%5IBiH}5qozU$q13GjgOLnSvSY1h8 zC7b1>muSpZuYI%fEW6lJ#pKqqyRMD+zFxdGO4oDXP6n()GRnEf8@KgZuC>8=i~m2= zhOPzLJ;@AH8>QQV8DHFT$XRsQy4X%n)6NmoV%A;E>CzIZ)(-iP9PO5nyRj`LU&p`V zmGpL^B1?ziF?m&L94*(rQ1q18AEMk(>1_Qe&MJ*8TG?``MD`R@3XS8Ry#~_BA2M|> z>zuZ1Qg<@{P#u)R;7^s9oo-J#GWV|8yHv8Td+%+dGcmnh7!?zf-9Nen7uIb5!o0!i zW?+#`=L;)|n)a%fX^!WMTRvqrDCQFcD=_g?bCbMnN8{oMH@s|qPQDWaW^b(+0d<5$0f2z z!`yoV`G`lyf?4$vcNJ^BEt4$Pt-zmMNh7~Ye6u7**>%D7Iyq4?ax%|$csr*9%&?z& z)9LNS>ke;BVM5rXnI_v}rFIS%$r9YFdDdCGSVddst)ht?JlSs4$ST?jFSuPrTVcCh zIalbek$HPN@foApTtMI*V(9w2mBdvv|B|<=?6vK_LP;{Zm1nDoaefUI)G_whZbto3 znE2sFnL)8q=35O8RIz^*ZBFRP29u7hIA(;ayU5RKWRoO6-T$}z$gvKux`GR!>$J_U z8#!8@0E(*?9a;Rq&VQployUFr>8EPc4`98yoh=qww23#gR`efx>X$T%#VxH)EYF(& z9BD_kx7o|qksddZwNg%(*p+*h=Q(;HJ1UExwM?FZp=UhNZzWbs%XM>($uGg$C)c)> zG=N_y)JO96R+~b6-rjg`c%kky9{>q%R#}Zo?flk9>}184l(ihamYgT{DyujPYEzo8 zlYW+lhkfDVOp7JbHsN*;yYmCJFvH(s&P75r7)tc?6Z+s7@R7H z(a@F|IEJU?8~8u2=kJj$XhUI@ptCo5VTffSYMv>uWn)F&t_m?`?Lt4j+UItsPd~Z! zJ+2U#&+P8i@ja1U@lMW&xi%xFdRr-HiVsL_h{=6Gw_%wP9T-`>qot4;(KG+)A(r^A zQ-3N?nGe{)B(*(j#VhYFek&z*EL#KJiw?w>h~&v2Y})-D87oL+?+;{>*W9DCNyfjT zefRyl0Ww>`)AQWT~G8)a4yt9yS#;Dm3M(wQkt$s{FhG=%lpl( z0=AcCzQDa`B9HSPag1gg#c0mX&TNe_zJx4O7M>5$=XqN$^!i-akmxRk#G%hHBs5It z77`#L&zhlXIV*k0SMk1zD?XqH1`cpeWn}50ULD`1Ov$zgba}3W6)EY}_Ism?R7ueu zQwIWNz1Ow(z40fwHnCk!7@I>8+hrN(NaEV(6@(7YE(oP|j-r~SlkH%?K@J+ww!I?i zrqDLo6xvFzikXS%q^F3D5Yz3l5Vm9fOm7GYobI*i1GBfixR2>k z+e@>ILd&Q-KGn-Ly0cq_%t;4oKE67i)xlDaxWJ{0cWaw{U%QX}sKdzO1HC$)gl)PrS=`<)^ARtJ%nml6Iyhfz&WvPwb&e{|kP4nr zypuXF<>2MaQqYXwv0JAtiUpDvc?@dH{Hw(0cJaB@x0CnG{4p|`NfcwO)&m9fX5sQ1n>-=Gl%Etk$HC+~3kW*p|2L?d4N- zF$N!|WoYQhkiJi2MFW4<^+2b@%>hNs_OMl?`@p`=@wKPq08!P6I`+SLr zoYiwJjTxtVv7;M4qaruIU^oFR5 zePXX@i+{6FDy?XnIbtUb$Z9un?a}RMdJ54&pOF}UkpUTx3ygJX-=j#VgKuL!aBONv zuMSykkP7Kwl}40GgyPDB=A$cy9Jh0yJUlVZ@t0%!-d=u(-qMmXi?-0CZf`tYo6W&^ z1KH)aAUj}WbY4pX@mIKid>E<4Z5iW#(}Jh4N2(BPM%*Fh5O#wRFg;6&uUkUGyJfS1 z(=%ZS$89D0G5@yQR^Pfd5@z^3Bn?KE82k&rTU`m$d}VP;8nv%w9I=Eqhb2rmV1?A`D!xL-@M^_wwMfI+P=nj zxtX7|eFe?kuc_T+ja(T@)Lyg?cK9X)Nu%2>*7I(uLh89wK2#~q{ibAQT+;Bt(=@3X zo~f*BUV1Y8tXu>;jbEU&i(C3=EPWZ%J-z>|SawKRy-Ufs^iRZ-oATgC>rgXp>UX&K9chqT?eeFM4w%>oBorpbF!OgpfK08=|A zTWQkymTo4mn1REK4#6ni*H+9H#yLg%n9g2mB8gGE@%Wy$QwJ zF+$L@HlDDjciirF>zmtHmg~!Icw4s@ing)-C${Uz;%$oFgmzZ*k1``rH*2b?e&=XaMi^YoUXdzT z%*<-LR+FTMPxeXX_DL?833Way6`W449I80AWCT-(ipZibU&aPu4( z+%#Te@`)kpHHOY2vGYp%_&Yt0nOP6M9SPNk{$2KWNoysrV$qpOtr&YGN!OAzd|-v5 zbFd(r&~BiNZ$w-=rs1U%##%cu^;5@GcEfJo`Yyzc+~hWI0&SW z@ot|dBMyJbp>7!i?G!ho*N+)wd;J&%>-A$aOr{PpY{-_O*z+>Qu=>_-?=Aje#A{$G z&p!W)JpY9}{L`oZPO9sPWlj%QW}?#i50mLhhX8wM$5YI!HAG09 zN2iW_!mj(my8qnXvx^nXr82)6Kz&jKfnkmI9E8<$REdWfbTS8p{NbiG{Bjy0P%R zK<7#gyAU)-YwI?UXh52CFKCv!@+~*#j~WYKYjf*^@25GkrJd!x3^FzICy~hIhTR%S2P1;TE+FCKfz0L7J*DpvjntDd2N<=C+N@0 zyT|e#2AMqn9%OR$H_+Yq%W~3q2-@VYFX*ev%LSPnTmUjTms1!jf=qv~5LB+N z%R#0;_zuYQ2Ty|D!Zpo#8e}x*C6LjVKU(xQ$fWjn%limq^x)Wt`C>tq(+{*o12W~f4`gz>7Ic@oZUuc!(OV#s=l4LS zK0X08t84Es(54mjvuHTTlnBGeMe{&ERDX*sZ<$3aEm{wH2Y+eKk3jP@#AeW6mG>*l z`#q>bUEczgEBXlZT}4OJU5*8%IcI>rr@S1?8x7j5yvsqRtBSraeM5P7gG|id0hyS$fZo;kUIv-?UIm%> zGJ1P?J{$Ci#xfXW^85|ZTIKx$bf==tQ+W6)kun$zuAFO3LjpYnQv{-#LY z^KV9o0igGkCvW%vyQ0A$Gge#x+ONDKkkRbRK!xzKoNGWc6g>_yC4U7pQ+XePOb^oI zI1lx<=wyq|wrH?Lb3mq*#Xty&5-kM%L(z>OGp1~?{(fQoJqLPU{cW-S{$u@h%ktto z3iMC)*9&CI)(2DwFUvU#WbBvGpr@60HOS;D3NpEx13I9wG=fYlUjdm|?gM?Gt`CAX zYAla}#P&~f9<#ikg8r?%Ux4mWe_KHZmG@iA`x|JJx*h_VI`4VBhq6H?fBiuwf9HZe z)K~_CO#Ute6>2Oufu2+JRZzS3e-DC8U$+5d`o!lf?{$z#V?W5G@d4;Rn#RW454flP>NKqka&&>;;m7i2=jKqiEIlF_u3zkt?i zENNf#T1r2VDP;l3lyVH{C+hD?kSS%g<+XxL4(PsHT^xhYO z7OCr0kcnlEMe{+c)peOg-vj+pdC!4N%)bStXv}{AnV8=MbyMEkpzezHgG?XxDM(f) z(wx*U@j7lrM}rn>%)LQr$~zHcWO_QNP+jF~Zzj(pKr56t&Z1I_DlNJN^fmRj+M;zJ zGsgeSqW7%p7y5c5`}bm?0o|+deFbFd_b!kbw|)#Vwe_Oqy=QrmlldyLhCKmf z!Y%}TTY29AnXnr`_bYD`$dvN8AY(neVbR|}Gt}RxQ@kF17HFpOmVr#zl@_hGXq`nH zLHB8h*FaS&`}aVt%Ik5er}w=;z2Pyl0Uc%P2=rt1HwJXGqN_lrrOXDI5Y?cb8lnMo zfyS~BRHz~T3X(5cV$FfZC@(deuShED4T`AiNtTxn+Muo%gO(^N1*NOM8K8~Is|IB# zZyxAp%DWyUs|jh&ZJ?hk?{3gB%DW$A{H+1?Qr-rT@wW-I$dUH@JJ4l{{tPm_zkx1R z-iM%NijF?bac)&~Ca7J}V32XW#JXN?(eTek+GevUR0W!JzI!KQ0q&eRPnOr>q zGC6n}WVG`W(Cr#a=IM^prs!PIFBFXj84a5TGGXU}Zcx`7K|fIRRnW01lG;j;$-#r5 zBetZF5(YYYgOPvp@Qr>uw zX-CsR&B~hxnxp7ui|zp}(!4wdG9`KfWJ_W@KgiU~ zDQ9?T$jI+YphAuL3{alQA85AnMuDDEGzm0GQ8nliMc0GID_Rc9*RU%= zCgyK|3f1*Hpo^^`mX{*0R$oHi#)Ew*qnH>BBWODEk z=puDZJJ&1av7kcbeGxQDQD2ZLWq;6Pn(p}^6JHVN>&jaIdQ{Qvpt}{x_o_x~EI$O5 zDevc?G0J-uG*;0IAd|)`Ak&BK0h#iCd5~wdIjB}$k2#O; ziz_+>WWtUIU8}sCE&4I2MtRR$e}4j*H2!5#N{*MtNg$KPDv(KI9mu5d2arkQ3%MQ| z3Ywv5JPtCcy#ku4ybnR9E_>v8sJBHYTQmY>Y@cZ$Q|H%!P9l~x`N+Lfq%y4rnOhf_=q2?tmpVp|Z>7bt~?>NwS<@EuXULYGZL3w9bf9HZOQC^<) zHv)92@-DKx380C}yBzd$O`{T2th^eK=_3|_E>qrZpfT$2K9K1<9|uiR*PmP0-&ogO zpeHoMe$Y}yJqsM?Hbo~}bT-KJLsx*>)O8-n^vXAZE>qqepz(^n0W$s7lOR(I&x1@Y zyaX!IT)hG^(%lIv)UbO%Cba{gTb0*ius80H1>LT^%RweDO(0_r-2u8^UGE2(SRMnJ zSbh%bP}gmsA1HboG+FcV9>~bg8RAJd17u?9W6_zQ1`RO`RI0HQgG|ijAQN*FXo~u~ z5oBUs0W$Tr3S?qlYmt1D?LLif6UbORuUXf3tm{FLk!k8sPo_tMrfO=vK}M!0feJOg zVW26Bt_GQ~QIM&RIiP78wh?5)eg$O0eidXwd>v#$tOAv4h&3P+;(H(y;uoN+HMLhj zS1EcMbh(Du1G+-d-$1gb$9w_wr20F3n3vi)Ad}j8pexniP>@Nj5M)xD1~U1Z2{Iun zKr=K%4akIO1ep*wf{dJR2bo%U0A#de6X;6K%S#}$L-Z=h>@&R!nx(EEfv(atoZ()r z9tV0#T~7s>m=n?ZLedds?|Ug)`I zf>x;OxuAy?m4G6kG$#r&`MUvR@^=%cujcPI5K-c91*lNNt^%3()>`xoXuZ1bu&C3z zeqhm{i@en2`-#VE%ol)8*3?FWjKr@8-Kg=c0DVi*qZU05GUa^+WMs9?qN5AFb(+&G z8Vg#eX_SL*QnVCgDvqN7H6ygnA412TFr z5@e)yu|-#cjO?QzBaJzr>=coBBgn}9DFRm`$VlT-kbLke%_*_G+dwAfJ3%Lqzcl9_P(Ste z0LZk^r$Jv(*Ox&?et!i$q$T2lE5)b%#dN)7P>$kgQy zkdel2kO})YP==;^(7Hy(dU-w;Wb*t)&>0%vsURbb{-8olZ34*Tv>aq|S_d*Yy#ZuW zYXg~_J_|BA?F5;eo?YbSbOgxcbR5WpodhyDonc+8ELs3Ea&85gJTC>Esd?@InLOVE zGI{+gB%?TjF%*A3&(q?-XU>GlQL;8C0d{Zct3oiy$-CI0Q1QGbfDq<^lJE4DW4_N%wD{K7_@#01ec1{|z$fj+)^4 zyA)*nm4MDwf2APfZ!zc*&B4z>rlz-oOrCpO;%UhRptb6+5@ht{4v;Cww?Nmc>kmLt zMSlcs0i`*A2K80+4rrF33&;Xq!d<1btt5$B|8gP6ZjgA7If?i^hN!X$Z~)ZUi`2KbOk?7x=Lw z!T%5V_2cJV5f8ZZX7bt{EPnsNZwbHA&c(eU_L4B-rzgMkOpiUPtgN?P4 zzO13KrY=@hR^Je-sjq9Ij*hiHy%2_G-*POj8M0*RUS*R^psBI?#)@mBPB&*#@Aq-b z@jO5!599esKD_eGz{HaKnNZ2w)zA#+`TUO3uVD*H*SWKxh*}RKn{-`;5ERi<0>+=z zx$%cIInv9K#7vGGX2g#q%5!1unNz&izxBELIk7k-OqO#R|1lK0ko!5f$mIzoEO!}U zazk>LFjBt${7&@(Iw@uIt6X8%eukKjb<%r_V0sg{Y-+4AS}~7Ley8^qAr%U5Tz%ub zikR{w{-cFAQ7SdcLT`F+DO>}ZQ8uda+KDwyF;1ur?|mvvxh}%9)Rfur&M{2=FZq_< z#9voSx|zCK3YGHQ3YBbN_PBK=$kdgfh@QLNM0q^i=OUK4p3d~T?!B#iiB4ahlN zM5$MbTTxm~UUZ(Lq0$)rX|Q!m!OCqt1`Sj+#8-(HGIuOtHvC5 zme-`%gYk)#BmM1Ye#t9mFfJlV$*f%A%6SUjpit#V7%5~fzn;hOPp_1wI@64fuy!t% z#xc6Nsw&#ZSZ*3ocAPh+zPT>mlKidfb5)!4d;Ut3yoW38Ha@p5<+&Xya%hL11zipu z1nq!IS?_S&$AC?x2{M%?D59qt49`Ky4bN1Xbbqv@gbuLh;$L-ZFG-y;+3N%QQn&Iv zi@fPt^zhTYX&iai2d=fPok&8agFG8FieK`9X%a3{v0mc|SM1BUofoQD2_u4#;r%Qx zpp!EH|I3<9=p&^;N-LFaz-y4wZ%PfxH4eV%H}$B{FvHdVQXZ*n>1m|($@O3lQ`z5y zN(=rLRLZ*sDwQuy#Z;~!Q@Mg7I`kXfhpxYfZonFzEI$~3e2P80u0EDs8Li@*>y=Jz zv>|pL%z5=e%;(ITh{!oFHm~74pQrP3a&mJ9HPl^;+Z7d!bv1R@X4lkZpV2fTI~H9K zt0mIx+0nXKw6RIksiLJ+j?5kFCEsZhzjLPiu zv*(eO#^`ltRc6;U&zlu(%&xD>7B5ZN{m-a8JG-jB(c~l&&U;PW{EFI|O7)yQyMBID zY?Be$b+P(}>BMq^Nih$DK$Ddy`sZ#VHv5*m~Uu4AM%IK_S z(I1~$B`ae=uB&JMv?3)`j1h4l4CB%^Q(jTvK=6yov?cv%NU*j@}F;xw8}MK?`x-yqd~|O@rzxg84UY5=~ScNiRt~ z738_)3%HrEBJ%t}@;@9l?q2X2?t_!MQxWG$MU`1i97O#)uC82;OZHe#M@c&;rywEk zuzflc$bItI5#E2RQ`Pm2H8<4P#r#c2>cX!R0&W&87b(IaV zrn1^-RSfNmC9PN2Pop$;<0+J%%jhYhb@k2HR!g&@D~wihUzy!d&#Z|S=Fj^?Qp&!r zxuPtn7w1KAD`i7`@lI|ukPW9v0itforJP_sZRz@&ci;(qeF@{@lAehT7##4tIm z91bTV>C$`x43Cp$u&!u~GK|+&#A@b8YZqoWQP-FZl4gOVeI}9AW>?Un1eqF`RUfOi zMvdf8#w=S;!S+#KN2Cnhn%KzfSbcqVRrLB`J8LBIde?S{)w@GGBLPE+_-~q5QClnR zPP2j**o=6F6>fn#OXy$F?9c9Bj3?sqx36(EjZHDPYZ;O4l}5TH?O;Y`*F~e1^f~g# zj6d8|OeKV7`XuZ%Q*P;+Ou%gE_OdIg=&`cvo3Z7@h--|_!yM8+=J4gw;p#AD*8b9X zGIBEpqEB90XMW=}RPIpzn;RO)Xj3$nUDFh=l*8m-C1AZuZr8-v+L(I)YsA3F(oi#j@OUjEvO%K z{=@0HJokitPTh@>6wp1>{|)!-+<=>ep{EPzy^NIST6<>%EkGKO44nhBYbz|QYOI*8 z?4g758Fmk!FLz)Hq$8bz8JGWy)Pi{)MMa9GJF8;$+-n9E3~;Z@@CCu5Yfb%$^m^zVL$VeCA8hSWM;z z^rO-x*|enp6`k^%q35@3AV6UKS|~Yp)!b%Bc9XFKir(wt+ydYj7jTssO#q1cVnsnF74jC zvti(XiP_h-Km19bKHGCYJo)wSw7s-r{`bnJKA4tqf3#%MsSj|ve)l= zu}50fnlB&U=U<9B|Pp(+{+LUkn=A~_`w(WUs_z!Dq?mgq=*zUzQUUb{U zk)=~FD?aMUZ$EhK_-lSX^`eY%7Y_X5dlg4N`R$so-u;J9o-MiZi5ZhuS8aXu!RceB zjCu8w`)}zv`x>X<_U@6BDxVnoeEzOuuKDTMQMdea-;k5unDNoe8z=tfs?jf2eXak3 zUkv*F>-UtOReS#Mxf_nlQah)8xZ;+K zn=kACmC3V?Ykzdd_n%*u^YE0^)!$Tkh)87A8B|j_y*V}I(@$kLqOdAj5gU|~b7x9Q ztKkf)Y>dv1&DSo6^)R09k%23C4N^0$-&Emt#yG(D=T{LC2n%5A4RfVA$M_(tn$iYX`Dlq>za6+Bbi~T(dTCo zcl`sLZ*x}|;Jm`!%m4?`IST?D*$-bH;K-S~H33cw99fHx=jXd{b_6(ofO85hOi z;l@Lq4M)yl#5ptIj16#Zfg`8K;(pe`k<*EB&Wmtb1Dp@w+#BF@r|MP(IGJ!(2RNs~ zSrg!#3ukSBb3UAP0S?0*3X&^LfU%38j}O=Wi!)o=D(qO5n&lOM>ydnZVhXz&Vt_IbNE+ zUS59AO5lu4;1nltu1w%mC2*P(ILi_^_aty0N#JZq;5?VW`9lKdodk}&i6vO}PZK!l zUMFSs=d=Wlyt5@3&&3Ix$qAg<37l90XK@1On+cr96F9$2;QS`QDZ{E9Q{TW6ghc%OW+hGa3&{k$`Uwp6F4^| zaO9mg=JHDMU;^j+37nrMaJD9Jb|i4#O5prGf%9PkCsl?`y}TSAo4`3Ofg^9>35Jrl z@dP=SBycWI;8Z4X8WK2P32@4ooLs_MVKA-sfFE(YFM%WP{4tkT(jO;qHYad?pTOx% z;K+M`f-$Fyp`n+T)+q^`^Ab2?5;&J9aH0vEMG2g{0vwUpR92yb`H^=B1vyV7a5g7! zUP<7*lfd~`0w+yOD!n{uoRGjdJ-}fXt07i4Z+Qv&hiw}m-*`@)=jF@Xc23bKNn{JdfPLY(}Zf-om{ z&w2aulb=6qLzpvsYlu^j+Y`0*hbqXInOlHUFg?r}ydcaOx-!fez9GaJoVz{D$rCHz zpVr{~KG?MZPC-tXGg#gj81OS>e2`Nxc<_QSXXvspXZWfRXGrdrFeiV1m{UMQ_NQJj zWN=29GbAU>88$u48NMXM8Je>p%*ovm=H$s)FJIXUhUOQ9IR(?hoFT1Y&d^n1&ajPP z&hT9!&aj+=VNUL$Fefh)d&`%@!FlF4CXp{9%1VoPwNwVNPygh%LXIN{9lb^F9%*lT$#2K2u zIm{WnC(IdoFw7Y)?>6+6YiM46NtiQ4-ewr^Gjv6mGkjx+lb^Rg%qcjZvDqI_{^0Tu zXK2B)FlXrc5NB9UPsTZ4Jj3$xR|WkH%Nu+s%o#c@6e>TbJj}^o6ygjSes72~GjpTXH-&XAHYXXx}WXLu~c$<2}TjsBQ(b618rd8@;m z{EcDG@I4_;Ue5L~CwCyrO8&I+@`i;u1tnq5uvKBs@U0;_@WJPYIYTFgIm4F(Ik`DGE5n@JHDONP`Y25Ri3R%mckLhFo)l*wf~EzzrpSu(5r+9>>Cohq~b0 zDjs_ALOte&5f=i?qeRgH6CiV8%q2HL&@AJUasxquYNKfs>ux{euAOoS&?|C;+CH>Q}HC< z?uHUS!B8v|`*K(~@E}3FP~UPxiJxGoQv;zcA98hhJk%3zDDgw6+0}EKh7^EhwNBE~ z?F_lK*K>p@<8<*9IaDT_)=ksu$LnEnWh;lLv&PFg*4#u^9?xXe%BiHvD{3lZ)#K!t zigQszWBu&QD&|ECFUq~>BDS&FwAWp6IUrpur+o?whZhb{>Tetewl8P*-ky&LeF(hM=iypHuVz+EflO#8gmS`y@{BQB+r1q6gu+ z_Bl?En-OhMPVn9Q+XIcGSVqrYAIlFHH=m@3DZ zj-VP;3nUw#p#>G{J~hU1`K01!DR>HJ1EY<_HI-K$-iPKdB%ZQSW5*VaEgL;)%GjbQ zJZV@qg}bTaCybjWHy2MSD!MFwJ9=ViQT%Sy#FFu&;lZ4n2;88|<|#7?Q87ji-chBM6Y542fj)kw z4pXDG9BLT7a4H9{99g}eJ+Gp{Brt{a>gQRejotO63DmOIZ+0B&>c(({B5*T$v{Pm} zmI^$ZlQ$kG*wuL4gpS4U5bQ=g7h(=|8lFqI;d}fp8ieN@RDX}_S9XtAQs2-({ z=Gs~wrgYfEW$(qU9Klv(ax*m=E2&w)AxiZ&rJi;ZozxhscFL}8sI8ApMYn3B^xnR^ z=~v2qw2sao7A=WY(CySlE63C{&gPk05xZ$$(pE<`&T=ExCMWe>-`q%^@Ks#j*ibz+ zdR=q0ZZ_dKYFXjsQn1aX+>ENMyi6Z`GXADS8)_?NNByk0Vu^q5#?ehRyYX^6A$U7( zRAXZW3M!sO1Qm^pIr4ayVO_zqOwqCWK#zJE#eMZ8^vI2zQ7?`w7FayBdETVD3G$rS z{0c-WzKbj7(sR}|#VUBVQaNL4YZ|822Yu-(ycfINOrVQ$>3v*mTY9 z*y#LmjrH?9H;zTiVK%BqM&=S8htW2nnlOz6!=faHRm;g%MONt452@(DtPb3GL%VSr z%PKrd;@;HElS7j7(7emJqJiSOj&fv3u&rLf{*sIFORt5x94L7kY_{qxIBO zBXuY42^~d+3?;QvwKyYpk-)V2e2fkDIz0WdP{ef^m87omEX6cOR2Lq7`O%va%bpO2 zs!dY(ScPA8yj%CVb#eCR!6yV9LoSq=nd8f4D4QGWisa!X+HByyB*r+S`%!w9xhhs)<|!uXfNt1g z`U`Uf{mitQm~^COjG}S^7Nw6b;?^M?Jqneg55yxB)!>1v$C1y*Px%`N4b^KugwLI= zOwZpeuUwJy@^T9Dvg23okoSacgQWJq>)!LXr23e>4QGBM>i=Ldb~ zRqXqwc{`U(4E?83e4;vVMKS}Y^Te%z-AO%jIMVnW#w@td$s9e%oLrseg|7tc zyx6-lRQ>tZXoM@fa)sl={&EWaCkMs#*#5l9?-JfM=^hTrCtS8uQXcllg0*w+GTz_Hw}FcTvR4a;=Hj%<3^QEoHlX7=n9DCWQ z;-aaiXUn?dKln-YU+SdDLZeeOV&)a~jdN!fFU-EUCYC*h)sC4J^D63UYHONjj=#8U z(wHe_V_7zsDI-pO9SaOIRr~la%Otsj>SxVyMmXp9cCtlLj^njY)0^dW=Y|&7%xC185j0zddMa7+{|vvp z&?_w@jQDw*U$ZPV>Xl-0>6&2jZY6hF(evO@-X_zF_fJTQ*Jhf>7Wim^d09yeW&=wQ zb@jZfFQfO{DmMw}EgSKAAM@%8`Gf{3>g#^)79U*lL7-!tYkHgeG-nEae6O)sV0`I+ zDML9w$zv@)xt>ljud&z+75*=wEaW=RL$83o02THA74#wKi_j;aFF{#Ob+$r(4SgB9 z3;JuQ$mloFu-r$$7aj4-UG6=-c>z2)BzG^&5ZvY`m;01xmA)!QqDgWgdXcmw>XWqh zx+P&XMyo{rDt)8163tYuX+zEeZt?NQvUtWuuT66U*hlzFS_jAi!T3wUw%lYUYNh*c70f;-h@Gv z*^3l^{>!J#)6upDQAyF<14pL0{oT0w(h%eYEN{5?!wIgME3#YbOHlG#&hJ=$tN6+F z5wg(i@xCg$DklXhGVTVw2$~8lhW3C?fgS~|fcAtoK#zvr1m%mGs^96*Z*ZRhT?hRF z^k>jxpf5suL0^StLf?V*hKl@-gNEzmHU<{T#+#DN74Bc6)KR!jB#iVgi=hj`b>hvh zq)sH_Bo}p(>C^H$c{o+y6()^Zl)R~e$uT`6xk~RXkr>UdtYU?ll_l@BV#1wQQ-@Dh zS)`H3riC&q7F5cs#=59z>D}b*I;ALtbc$NDy9g_nSJNXXxc^=bLdoT|B6FYSOd}G} zj2lAk=044leo)-M8ge)H#@*KkPItXYQX=Pas3_q?mwzF3D6$^|6>*J)WDwE{Dqd zs;5J*f?f%&gkA-WL1#kSpjSg5gkA%cr&h|KPeIF}|ANkfegd5hJ&JNxLeWlEp!mH8ae`61Es9a94L8p=0Zu!sfFUlnFozQ>!7XBdZ_3rXTlP6KL>t4$}IAe zE3EtSMAAi}{z$@z{0Bl8cA@(^xn^xd9v;))UJ^-i`P#v3w1oL-#cb7MuN^Rzn#BtU zRN=j5VB5y$Y6UH}DcYeTgI3_Z^sPpRoqeEY}E#sZ|hYH`0oCxq(b8 zmeKzJ9RKM57sM!+v@F|a9yC1tFET9`5B&Bihi^SlUn1vkLPZ>_q2r(rLrbA+pi7{S zKz{*!6e?r;TByYF9q1>}??QW%fybaZ&~?x;(C*95_BhY8uU$Q1N2YOrO;i_JE4DuJ_>yc`Z)A$=mzL+=yTA&Kz|4QEA%bs9;oE6 z6Z$FiU8vN~g;f{5US5S@x>0@gpXi-;N%_jTIfb9pi(LJXos{_;sN`?}RO(_NbRv`|Pg`$= zo(GjW$$@?ynhSjxng`tp&44 zUH}~ky%1Uey$CuMItnUZV;BvsfsTPLfXYinmq5osS3oa@u7dJ(X{(&jm<*L?f2TmD zKBq#%ZSNuSC+*CyBXaMxy*1z=Asz9;h<$xyf{w5l>{AelC&`seL1d&9@k=GL@y^bY zbhRakN+EsYSKLUw0aN;#=`K%*X0>P|n zAA)83T*X1(W25z%q#O0dvK<8SE|FC^H1FilY1)D(!R|RO7HI zpbMbChu#SN19Ulb2lTtp*P!d6uS0(UeFG}(_fJq6yLLgP{qkIR>oMeGH#7_S7wGBG zzd{S4JW<>_4*D*18gw7D5&9l<5%lj+sq6jFu>MFsMHjnjclYBK)*mm-<+!yb=uc@= zbTo#ryUTZE(|tSU`Ik>Ti&|P=7qw;HMO{KZyi4*{&diJ(UP`oE zluvZu+ch!~iM$@qgsqn~5{ywG{nL2YNr>dJoS*au=kt?mAmx{w@btLKi>FdlUU^WF zS3XqA#Iq?0a`JSeD}8!^a3e!<^1_JhZ%HO6HecE0Jv4bv05a}|)t zM`Yq%$@FO)p$D{dqOAkuuGOiaJ+9r7w*_uYy)V z?}AoCzYVQ{Zh+2#?uE{S9)#9GMK1Nwu&mD}fqQZD%lc^dUhI0-EfQ=C2_t^afG$ZU zYxkIfsH4Q4jdT&aM2UGvbc4T!n19_BulYUPm8d|g&pJtl2d#?|Qvk?cP;)WyZ+DUA5~;-_WO#OI}yF+`z(}XWv%SmUxe` zn!&4FkM3&3@q}&g$7qIKnb2%-+0_+IERSnZmw7(j<#G`k@9Qx}^g@;467P0_E;Gj5 zTX|WbiCToX4z4G}YW26$^~c*+-Q`FTqqmSU-z|WYwAL4+7GD%zjC)VvCGX2!PwpzF z==_PYN5)1n8a6+0eV7 zVh?@|`Yq^6=o`?xq5p>71I=Z;|2kCGP40!tI^P4(Z$o(&u=USS-q_LlDfFAr;iUZ# z^a|+1&^w{ug0j})tbsCrb{>T?&vU*FWiH^Xg<|VF--XVF^1hGON1)$_{s6ijiVfua z5X#u3JPSP?x*0kc`b+4A zQ2e&a+df`^mOy#3vGq#mub{J_FGA-+UxLP<(=yvGy(BDJ1LH_`K6}kiZC+Mrtz0lX7|AtbA*6!5vPG~Ra8_*M> zZ$eLp{uwI$%v;cK-zA+YJ#)Z5!>jgX(s%uaUwF-5!iXQ~AD1TUyNaXpbf}PslUzQ- z{YjE{wijE{p(gl0i+g`NOi4gDhYkI+8QccFBS z+8><+{h0eNL1jImFI41oGBhmvcKVsa$^KWwGc;ruNf?p+ZP442%HB6vcU=Ra!8$B^ zF{{60Ta2}g{3D7tBnr=48S+LM(flSdD3{fAGk@7{xcXnpQV#kOzun3~*N~Iy7F6nC zC{*fU7*y(EI8^FkB=kP$`OqIiFMw`?(nso^Vj)!Kk)xpU&9BkWiO@07xzMrD+o46! zZ$ZaFzXPRjZQTN$0A(NExdh5yvNI7XW7Z_-8BqG()(fGNq3lsPQ=z5MY0#z6QmE9? z<AdBiW=5U{ z?dn7mq~bkW;0Rh_l7)FufNtbeE>QrvZ*cDixF+;n?!DJajee{(f%LzWxf~>|e3f#r zg^{Pop#dslxDMJ6+6X-d+61kHGWNC3fi^?eK<7ih3%wq?8+s#D))!i#r$cXsUI}H4 zY^{af23-hU2E7A%JM;l)J5=g`F*KoG#pb7QI$l8%>h&3T;l9*A&uI(SYsLTJL?=mK zDdU_>bnJ?RRMTUUb1rYhk^xDscs1#m)nK^#KiOR8e&i$dv>GaU{t$E=^kJyXb>veo zcR?S4%3SABsLXYE1DTFh--RCJ{xPV`b=E<{?dbGWa|Q>ZSGXOWO8X1jdPZ*o!P2T6#nL&zCfB1kjgjR-Z>A*ch`JzXSN6nW z-%N;iX+}(9_Do!xZNKR@Nh?kxcLm;7sVTD;No;T=(s40v;^#Pv#9k@V&~l0BO< zS(Wi7T%LoOp-9QMc&St@keO2ACark#CN19bm!u_A8>x*(djqZugya*LtehDhN{4%s0%KPtH z?}z>dx*Cd|toug4gNhEn0?i|?KS1Ri#UG*4`@II;0DT?$9`sFUCOV5<-O9NLXBV^* z`e*2a(6^!NA3M9D>;*dSKzmT2ze10J?ty+0+6m2uz6(7Yx);iRiL(#N{)h87=ve4` z&|>J{p);ZTp;72Rpo^jJL+^$D6S@_80Lpr<^8s`x^xsg{U!8-{H01UnlyydjH~Y1I z3HmWq+Sw=2aNCt`MaG$~?9Sif79Iorwtjokw(E_75_6L4zcu!gjBwI-igE?|&d;>= z%@|kh%UUvfKRwOpTW_f7+p$p5x8tB4k3;)F_duC%X&-tLG%WYe zviF}QeE8g^-`-!IAou^;;P<9kJ`sMV#h>(GXQIV#+!gyukRh2}w5L-V0x^YdmNwfP4_Wes8oRBZmCP_g-kLB-}D4h_ryWB6jBb*1-P za2pn~`6Wym{12fW$>r}Gw7RzcLPmdr{G~@0dq8?$Z@`k7z=dLf>1AgEGOBo1zd5Ai zP1W3GF>ilqlN(Zql%pIfMUb&xu5rjn%62JK>R=*N>VUU;Y8_k#l{zSeioI|-^a1D< z(BDI+LuLPW2J}DBtDq;4&P=GBr@00y`?nQPIoehUm35&g^ciRsRQ74Fg?<37hRXSw zIZ%=JT;UUMKYrdNcBx2N@+()^?l=H1d?Xwt!8_0TD?BBEQ{!pNRrDpJlWdw8fgswIzf{LndH=* z*WMa@@k-vxxliX;>GB!hRsPjb(cc>AI4EnHx{p%_UCMnu^eJc)^l#7@RL)B@LuH@+ zdZ?6n0aVuJuI|CJ4rEQf3~8uA`S!`CMgq(^%ShhxIDzeRCzB0 z{ohf&@1P}gcP5riExNpD%7kfGmQA>9+$3aWTvGimSB#o+*@Vk3c20C1d-xrTrc9YM zg(br;^cF2QSNN&E69W?D6ms#u-XWONiDkZbJ%oe#U;H4!zNV!R0hq+x z*F1>!`JGH^uA{{1cl5s>qBrGTu5nH*yKK^!NhMdZuH3WtT-s;}k5%^qSD&PqXKgtX zd<=|iQm-v*=F@${=s0@ze(#G6(&9Ulo0<5YST?qZ>MR+h-cQ5(^|Pxh8q4GyZqMFV z7$4qjw`cE-CNXyY<$K&FjfPYfWGa~5(X=Gm9{4dIT#pisa0)dSRkigMF&@#De0|?! zRP*UeNVCF7?3QH0^igB9jCWCN9t!srVZwC1IgYf(O_*4uxox(EB^4>HyrN2<`<5Hg z#@e#_xpAQphvdaLAR;6&mf)CO76r(`T?#3{1)(|+vQ6V^~(o5@z<$uZ+`YmJ%(<4`w9lF$;yA` zp^r9S*iy9r-An#5{EgpybRy66DgWt`p(Dp!9r?K1;5RPpvH9Wa&6(!Rl-GW<;w!I} zT=G$RHstJ?S8#%?{`#iuOKW0HGjnrhvYlJo%(H5IK{sbm?(iJGaGEo-nZnJS zUC*~kC?p?fuO3wWzsIMqGWoxV$jjLE|K~A!Z(FIWs=1b&{#VcRnWy5RWcQ2C zl5h3)i`Fz`%Y8xifb46O0bdyArpeq4!}Wq}s_q~B#J)*$CiZ>+du26vHov3vgu9@0 zXTQsfIG0e{C=k5MToiHUfsDWFToiFyEKh7tuoERPesZrH5uUVMFA#K(9+QB7^5i_)E^ToiFq>4aqG zftK!~h;tT5LZmwbToiGJTHZ*@E3v$3mgisrRcUJM6(~xVT>?cBS#zO*OU$gUD2h1D z?_Gb#yC~wEW_hwpT1AM6lWTd*I9=W-%PX?H$(F}#$@Ry)$4!G7kITEx@|rF0X3N7e zcm2t`WUDmKSj{f)5QojK)l$kkQ3a(t6I~Q>{s}r+dH;4%#F=}v=da#H5od|zEsOIa z%)T_{Z7xc8w!0|eoPrT6=ZDiBdF!{Jh*J)d5a~{(i}+xv<;5(o)$*2D-U`cGX?bfc zZ=L0pVNZCnapek#|1M)mZv7ObAMM2D&KXw1G}nUWbb!&MNC~we`2b@?>b1 zSRzgq<5R81T<#)d>Y|8qCG-C;Ys^=>h&+QNM7p!UMGll{sOu!|zjSdfHBcgDLY;>@(Xa?9HdifPO_*#@OM1ulv> zcYp@qn(o}?qKNY=*EQXF*+mg&x8?1zyq%|+b0J4L{b_8?j>Iz1MG@yGpn=N!nTsOM zi`L(-t-seS?@h~l*Ye)8yi}T~b2aE(%|V5WBF@d$ z-%{)EPRqO7^43}2dduraW4m5cYj9Dz6LV3-8FVHqADUX8iy}@LO+rGXJF{IBaTZwK zBFo!_GK)2Plrs>e5|r-bxG3V>2RcuA-*8dH`MLG?jP>`j<^9(3_E_FN%bSiWE!5Q3 zxG3FO>!OJBWz-=@Q#;E=5oZWULZmw*TtpkRylIxV19XGN+>fdkL~rIItRPUX@>aPh z;%vA6c36L_sI;$WEPGs(?(B0>#94@t^E8$g7e$=qAPJG~tZ)(iz2&X8ymgkh-tsnE z-WJP?A?|xM2b)}!?re5Z#5o)Bp!%eCu8U}mAPGThbWz0F42mdki;E)8JD_ysz3U>Z zFNBhzyq+$?`T~7Hc>`P&amIm;QQjpkia3>^UdpR>QN+0sl&QR1ToiF01oc+l!!C+A zKLasfk)Nks6mi}FF-*bxvx_3mCm;qLc-;`ZAhZO;5CZQk7e$=$AO;C|6I~Q>YCv@A z@aDOQJ_poCd3U)e;&jVry;6B;E{ZtWApQv3&qWbuC8$7o_qr(Jd>=Ged5^n@o(42T zdB1j1#Q6(osPZ~p6me3BY?$(TxG3WE1r1kTwu>UpaL@?lUEm_>jr(hyCPPCG>X>RIcyxL!de`mO#xuyZbVc(7n9m!nk|Sp?dzkmji_E0}o7FHyhZ*RpH)` zHESL=&5FQ-d#>Lk3&J+u_(NRrID!u-#reSpPvZRWgBEUi1Z;ZdRd!w=Hy-sPfwJ)@ zZA$b)^h7ScE_)$FzBYSdY5Ts#`!W`{^mLj>Y!t;=x+!-0;tRxEkDE@MqjLxIZ;$X6 zZ_a2dI=J_!7m5zbZF|wd&Tj}U?m5|YPhEU4B{o!-K$iaQGov~nQ5`T*9oSo1y$m=f zLOXrAdAkKbtYdNiLlPXe;W8?~yVlIX8|t(s~c7&^g_x z?Uu}xSRwzr#g14J1KQKMn;b80$#9y}&8xrLiZk|J+FqI=lOQ&p3cU&&hW@*nUL1u<1zzsc}*wN_h;suCeTu1RCTjO3XKdXK3mqxi? zgw|fPzq3QBHjkdfuT8Hnd1x=qY@6IiTS->i_-u9R(>A)FIH|PJ2nmuPP(`l>EHTESqM}ko#fmMhXlbR2Ewr>!OP^wk zEmdmKq9&47)M%rk{=dJO-MxGF-XN&Y+voZ3CpW*dXV00PojG&n?CkE$j^-+J-b|9; z?IqvEb*nq6zqYz{X}H>kg0`Ur+q*TMEa`-dwADvj8lo+uX?AX+`Lw2)*!E?1PmoDZpv<1&=G9Y1#Kf|PV)u46VXu6 zns7B!v7c72xG>w+y1A9ktn(TQTPWS#{(+wGnpg7PeiJT?r^q?#MD7uFYg0)Z>r`8aK%ZhiNlM%^#7{i@Z4jqEbU z^8}`Q9G>aB3-uAfgI%7-*>V|fBZ~X;l>L9oYTvDD->q8X+|5sca=X`cRng#X$8@@W zuPw;-12(C)ol}*2^-@4Ec+iO^eE}#p<^-kApWT1mPJ5-s z#5>*O8KD=Pdhyjh+GApS9Bl3J^H~QfUtUkV^Jrbjy#1#|Ge1`ZpRU*zry~<-BXTD2 zO4R5pjqXOHI~uLh=x&Svjn?|%eF=vWHFBhpZ8Wmc*d>i@TCq9DF5-2ynE!}BPm=ZBdV5x1Inh2S6Cx1W^WA)z*Q9->OXV8;--cr7n@p0Ap| z>vZeKjIgPG)%5)Q_G&l3bu9#}U;cjaC)W4)j=>9~Qu+Cm4KyL@-&ui|^8GwER5!21 znKdGz)B93!uW^5YUX)-@-Ffk8Uhjl2nE^UC&7ey5f}i-DVpninhGXpC~0 z{}sz&v(nvc)7{+6#7~q%E9KzE;Q@Qtw{qB|bT`>_H#IXU8#dbJ)LzwimnJV5+qmF5 z;47BNMxA4$J;%o8m^nu)_dsi5H7=N;6Err~0$;I=Ht0MX?0Ggc>otwW#&RXwcvmIx z6)k3+QeS6NU)QX5VM^+vfP3gvA6->9Z`D4G)U8#bDhJGPZL{WsH8&s^1==BruB@B4 zl0^5mEv`|bYiy!xn!A&z%)`I`NHw~qsBgJD9#F8X-V6pbM3>cPL$MDjy)gu%OPQyHd%T@RwgTb@QUykTN?7*V>$h{?tz462z>z8Oup>p_X5cb#j+hn(WC9e=xU;+}P$N zyGX-7UAImRBlD9I=S~xTUz>REb`mePiBCwGc->r$hPrp#@>?y|GFr?%cBaNib+}1R zM2DNq;esY}Yt%-*b|;@zEwA<%b743JUD$}^a~uD2ra3y=Uf!s7F7Hx%dE?tT(ZS|K zT{w{+I^nD6L+ydggahGPLz3qV;l})hk17HNY5bRI&l*(jq7g9LJlQSCv=0evYfsUA zq_nog)_$7llVq))#|eaNDfJVr{bQ4z?qAy4pF!Wtx$EmXevz*;MzSXtoHE~ujXr8e zmfQCzlrDx5KTiGErzJRQ2CtI`5KMjj-@ZSqYpHCv|4Dfhka#1duXh^@)+M#peY-hJ zyt$fBnsxKm?ZeGk;*FHPL~bnH$PGkm3ODiPZ={&@m>Y<-+(4`$*k4WhtCG_1QP)Pk zy*3hPohi#Q@rLSFlm2qjUqSjSliXx>U0cV!zhT`f5AEMnY3A|9!X@N+Dd{gusxO;% z3a^qf-&>Tne`B=;uhdwuI4RA2vw_5$su*eV3}j!QlqTLm4OJpkSOXQ-K!r6>VGRWv z>(-}v@tht@DO!zgtRJqi|As<>(%yi(SJp>-|6tvm$HJw(fhdhmO_t%M`)8WLJ zT&y3tGOo7k{ca}>&l&T6x2#T#S8eddfx0wLB0M)wfa2nz!2JKm=X>4bCid9>KR*9z z_cvOJ;H%u<)W`)C244vwjQ#QfkUm&7A!huo5=K$I8-RGw$-4za_?>8gyg)-M4>off zr}wgfYy=TvVm(18c<-4c%qs)tPQs+u*9!Me?ioxX?w!G4n{r-K-;`|<$xq^E@_bTx z#*pZO8-|Br|LdtR@sGXEFH z!zm;6geN%7x;l&jOBi}8IV0azKgQgt?fv@{ z3AZ*oXVL`Lzt#b3?b6V}Jz?GYOs}KoJpQA#Ow-AJ$?*rC`0_|Ev)&zt&|A5B<2K#A z%gkpKP`tSAJYXnZHY0==R7FAwVm!<4rOzyul9Nx zUIo-chGIn{x73#Ta^Lsmo`8DT$gy&bE62Jh=H2gftzcr__)d2|gtF(*H+_0}EM4nv zxM$0Ndc^P!g0kguB$O?eUQkv;vmEJd@pLC2O79J)Yefb(<;#3t5tO}-QmExdPG1Y! zl$qneP5F8#n;z>EnD zE`d7O@FqcJ8;Tj8&70=w&bOd?7~aiLdeb~zbK{!#%hR3jLLFpyk3(e{>Mv0CystqW zWq5Bw$u85Kolw?dyXv7Bylkg8)OQS(2Q}GH%ya0K8k9}tDyYXyDwCjWD$J8-zTnDs zo`kZgJP&o7No6~fZ2`;;WxfH;cDkf{Rvdw{IXwx=o`bn}%p4-=nq|jXWKz-Bj8hFY z3F8m|{r2jtHF(9@l4sP7x9CzMU^1Sp%{x1h?5?)^Ts5^BETJ?m4ygPLekdBvxieCn_+-g%FO z;sYkmdm_{i4Alq9mc~S1uF{vg8fvAHyT+IMkuSH#mwOKCheqy~zTDrTZ0--+-_HS5 z#K@fp^&>;|fwDQc#Fs1al|G%RLBnf;qYzYK@^D_vPO3<=%lh(Hw1s`kA3V^5xFO zf!Xtpf%=9ydNGtn2h*J^plqpK3$++twsSX>)mR2)H6Dd})@Xbm%4$3hb+ys>8`P!d z=sQqW_ai8)`x(?)bF?Ea+3Fq(Wi`%+vKr%|dKJqOC3V=C0I46g>t>fQonbr(Zf-Fu-n7`X?atnM$NerLs{JxD69J} z)NhR3hfr4ch%DaHG`!=XtnO)0R(AxH)jbbtqmjE1>UOAXXC~Bd4ewegtE-tatnN}M ztNRet3r6mHP`4Z17odJ;cz=Sjx^F{SUCobebw7gIWaK`By4~m=N2m3B!|MZOb%#S) z-BD0hcMQ~j7`cm~tnSTFe=xl7Kv~`IL0R2ZP*(RRP@9e1Gf-CdUr;X^-oK%&?twID ztJ?$0>K+C4MLep~4b;nqx)y4YImctZ+>^fCPoZ8ha?kp5e}UR&c-x`w zGP<8Y*>iNpCEIgkK>f|gb%V0!$bqUg8u?K6iY|q+x)Y(S?i8q3jcz5Bn?GOfNvJ;N z=ue^kZm4H{xwm||cYV1Jp|%^jPkgzvL>xOrl&l?T(55v36=T$@P zFuXZF?>4A64DTMF_d}>R4ezHuZxhs8hWC=sJD!`KCd2CsW%Du;s@d?y_`K;*ZyVk< zKJQkjorZUp&-)S7P4Kdv=Y8rAP%TDot1q_;%9ec_lr7Uwq5f&)Iv?R#(}7SnSDG}< zY7{~BHFBj;|1wksl&!71d^vqJZ{?Oly<_Aa_vK#l<^Jx=?SR^4K=H+IZ*eTqnAKg-3d_d8D0sL&GSuA);jNiy4)On80t=w z%4(=f4eu?e`wjIj)X9eW5bAwHeFA0M?~&a8EQXiu41}^8`A}9P3e{>f&WExZQ=n!W z4PH`p&-NWCt9vh$)qMc!1Ec#0l+|4i<>n8{YP<_|ijn&e>O(_)0_EoKDCU-G~*>fDsjlpii>j`Cb`$JjXGoY;QaHvm>+__Lzw;Jj*!4$A7*Ky@{FnGa<(ZiBKKcS3bC8cU$uoI*`TBilJH!l=kviAHdD69KBD66{}O6y;y zJ6oabb-V^;uVX)MNUTN{RF28tp-}r9jU%CKi$B+w8{^Ae43%NzuJGk%Luo~9;teR< z=iLuw&+#afJ;(Q~p}u9xU^|q(qBbb2+u?XmcR#2DjBX~Bn?EQkHwLPo zxsHpW4z&66<-YC9-R{fX4b{!a-S5ji3w6E8%b%fa%G;rA%5OmFb-Z-vZ77?A1GtI0 z*=QUArPY+vo#UZwIS+(7$nehcd6S?HHoQuoR}ZC`MAMx+eBKjKhZx=(pZ7eJW|mEN zHv7D^6PUTws9bpIX6}r`Oe%BX+3R@JmwUpOTMgC2$oRTSzTljkd;Y@Vk;S=~yg zBaQCWP&UtZKv~Oq7|QlXPeIxKXakhBrhh}(^wPdzXOKvD(xIL-rO_42rZ)=e4wHi! zP*&qxP{$g%8=#&t)O;wbu^P&1Y=yEKuR~dlx1fG(G+Lmn2G2Lvz;dqqRVV)6YmSOi zZ$*{*TZT_r;zq8$Bcx>C^y!&cJ{X!Gnq4Ra#8h+ zT9z-f>y3Jni5OujSj}aMsk>XzMOJBCZS_n|r|-@8n&Sz8%EL&0%7=G7)J#nK6F}vS z`i^CSh5Yt2btI~*S!+mCh8e9@*>p7{hN76&ga1};qf2EtiKTfT{B%=7A3%9$hcvko zdRw?O>o_oM52cyeUTM}$DyjPV3e!YfUsRfiDR zUCp?!C|jCVPNiw(C{2BpYu}v8)MFR>2&!RZr!fuP{Wn;9T=}bPbW|7F#?r5VN?qTxO;zsEgcr8^n{z z<%@TYW&y1=a!O`@@kUioDyb}EV6AJGE>5$977d#@Wt64|)siFx5@tIKVYAp`Qe7$E zJ@^GJe|`sR`3pc@&&{B+K}&G!N|dcDQ5oj0&hlP&etrQRZw59 zu6}}Mc!kVhT^+BoG@I(mHjMuvRkc@j)w`3et8ap;E3L|^x+>yl+m$F=SE87+$34oN zJuYSI%F3y(tQ>V!*V3gi+Pz+H3GE)E52pjot8N1a+T17Vd@ZP#4v$1xRi2&Fo%QF4 zEL=ZrYF6nWMr%5UhryFW?o2w8QFwSy( z6pbybVM6Ud6B-#fmGY=2qTZzD(7qUcX$`JcMT7JygxmgAg!Vnr%b>JvC!m%okP7PiY~lDy=7} zs(A)f)jSKTYSx0P8m%v>C}6*-~iw8)IwnURvx(wSv7HIWLGXH`}nn<2g0>gve!lB&58 ztqf7atb*PGrRD@^U)!&5?!2V*yk(Rk(yy6bQdv1PQd3r2t5eoiM@}eJ;-NfDcULsp zqmG?LNcpvwIK8B_O!?&cN+yLaTC#@a3eBo2nOIq-^G`3CRz~T}KGuoOoLN27D}}hg z#90-Ur4h4UQ)Ds%x_XoAP@dZ@H*;KGiR2}HMy8sRy%8^u?X+jq>@SHWs#B;5_Z<8gv?XU3FXC%(PeX(nfQcK z8BImiH6@i5r9&y*IqZ0cnDNc4hk!kP6`r>ubU1G{wKL0@)LJFSB=^?vy>jD-X$Jur zKQ|d8%;aB@i|xw9rk<5ZiE58^zalyz*X~}R$MseKbL^rirW{P0(YYd%ODZaT)2XVK zjoOujja=UdYYH1%Q0bwSsADC4A$0u)C3zii*9rE{nyBwdpX$r${B|{9_xyfqvl&R# zx00uNGU(2B)ymxyCd$w58!0D!YYTlNxC{5PLf2I_M+cP`3a^%Rz_c#2mvZ&Yif;v3 zDavwkWyzEphipZ(wpc{#AD3X!Wo{BOyc7qNP-1>bLAsF>WvikbEzlg%;%E`G2%4Lq zS!6oQPLVHvd1q2II(8*B&KplRoY_FyiHF)r-_3A*-RsabdCPZ(uhm=XllELvYyF{b z`Pfy8Hj~iCgAItBwb%AMF)!)a6H}+{$<3ZwQOoKoa>h0blvN-vUNT9(F;!a)x4%8L zGp}WM6&!9yduk)$Hjv8R_tvhzj19+aY42<_E}v*%xQ~h{<*vCW9x}G4f1!S^sybpD zYenr`+gsGw_~678Ms=cAQwTX{uim|iJ+EqVwb$*=uAVvVuiEJ|WPYx}B>MUG>@r|e!9KyZ1386u?9R2bl7vnH*(B z60pgyVtc9lz}I1So-KV@`wH7pJH9EY&c0s%bkhlkY`majR`cMe4x9eibMqeftVfS6 z{XRPCmHl5C*!%PoyU+W4@pG>}a>O^@cxcUi%kFvY!m|&ItlIuU=k&?m{sq(SuGxM1 z4{uz4{2@I)eDsdl!!sif$&p8^^aW@^)W@HR?xVsnUoCK#!f=oVpx|@#6jAc(F zI&sb<_B4zc=Ww%ZhF0R7IygNOWbR}ylE7KPUathsTK0M;aJI0gyZv~|E$pdu;~YIL z&P(9vxe|pNkkJf`8uW>4>7DdZ2^`G?p#qG{+zzKQf%6oc>k>GBhqEMslSX~$+T!Va z6VAE>&S*Hgwz$kZIJ*)!55dth=eW#o;q*-4ybDJwa>ix!*7&Fd&ImZA37m;=bhUA< zo8in);5-IraRTQzaF!)-cEVYmz&U^2x+HaK^ydk-({e)0)7!6HX^xKPAFR z*cbw6^&&Arn{$@F+xtz|v)<`(=QE|>?aB|Xu9M+dL zEiNuI8_qf!V4QP@(%~29Jj|ZDqBv)bIGApn^LsekG1NHc?{KuvQJnJuoCpRM=XAwb zV+ow&;cQOeoCYTclZ$JeBMt@@=UfV>_>drH3Y^i02068G79AGkd>c;Wh#==4IGcF_ z6Hj@$I6Z@$r{U<~XI$oaIJ*)!FTu$H&Iv)z$4bX+p7nN@!${ynk~q0Zob!`7 zmn3nfByr{>apos+ZcpMYOXBD|kHkFdE009Z^GTdPC2_VVasHLW`6P*RfZV6qyfQp0 ziIbDW$xq^pPU1{R;><|m+?d37SFcCCtfHL=;H5fBzgsL769Wur4d_3pXP7f2 zC&bCiQOp|D%FDep%*mS(<_w61IfIsjIfGY+I0JIFggO0M!<_y-=)Z#b8IYG3<_y$I zi3u`;O2eEXb3&YfIk$#6xy!?x{+q&_f!o8JL5gC7XCIWKZyggj{Yt}}{1hJz8kCzC32}zxs=o}%49Oc2<_u8pm>@Gqy<-Arh}PB&a0ch(EDv*X^%Z7ew)*7Kft${h$g*my3mJ?+9Yjw~B&H$|v8srS_zah*SuriSeqy_q~GA4A(`BqoG_=KzD^CMliPoe&mn|x zE~RF?jfiMc`LvpWd4_Q?|2w8>+$V9uKnoT7q~If;xB zWs^&ITgi%)OrOC6gDHqrRE0RM90x}6NTJ4v#CN=-C39H(OUqw5MJ~%-LCfDiyS!}D zG*&5}HJvweJt1B5rfW%+0IJL@bv>TVY{%g-N@KV%Qbxz_eY+~vyJ7jPFt`$B=>>S%iq{^Ii`ETFcB zl!6PY?LjPgjkP@p`-`saK_+1lwmrxtEXuYAxzHkQdzQomWw%}dgv+CLx9R8w{m^AiymXbYRi8=g5XE8#1KFb$eOmNw`_Al8=`6ntGHey6{ zMA7hz#*T=N<)!ALvFwc-dEPnWwR7&+X!OGP?(k8C(fHo5QKLr=i|HzyT|VfiV}||zAs-?R55)95=AAGc#o!{dScP!Syhu9mpyq>Wpxd1*$Pc5tM!k} zESt@nS>BN%_sa&J0!^>3^4}BZaNw13|5WxX2w&EYyh+r1W7(DDb@0k+|BRDomXVX7 z|4ZD{vX1Uy*OPd=-m;GFQFk}!w|vR4W`a-hrGg&FXZkM0=Oj1`pPS$wd~V1Y1o?rc z@3GZ9g0yW5K@Rrl?HVgj*hv)knxiLT8cxDaqP*9ze366`1RG7FL?BDU^;YC)UWF{E zE-kC{#OSXprkgOp)^dqn{g)IyvCFX~PgNU5_>*~G)2}q`sA# zUsF57N=q-CHGN{)Os7b@)aTi}NkXXL?wxmWN#!g|kVMa}tgf<@p8{MoE~zN3EjJ?U zj4adJG2Y&YvKj875pKwY0rm0+5 zHrpwxEMi^Nl9_W83PP`}Bry_-X0j)uc0pBD&zwu?ifP0ysi+#yJ2d76Mz1oGdsyeJ z&<9E;W=ZrviC;gte)Wsh65N*6DjG$R7Sv1`SH{ayyibI?nOs@RD;=fIsku1=b0YDr z-@yKP1M+eP^&1lBiRzb=GjQO*NF+CB@W4ECs5oO(S~us3p3_T?8EL<0Q|uaicCCFq zTdiaiCt=Izp710{$JR2cy%f1ikFt`vK)%y`c<>pvj+F8nb&RO^X5<3Tv32BDeyft? za`J;uyCk=QvGda-JV6|)J^OuR#2H;2mQ&~+8OEFj{IoHc=0v(97kCaYzQzjkkm)^K zd-mB@es``T@I+7illWC3v&5C_z<#Rq^n7e3GF#4;R{QDcnbZ*@9H)Svw)XO;QOQe? zsf$`U24ncpNaY+KpVg5!k^6}&Vy zKX?};?K%7&3(4`)y@Sb}IwE?`u) zC|~;au#w+IPMRLd?frVo{tC7}DX-na#gSo+H^UO)l4DwnU#yj#G}!M;S`q+mx)k@da8pzIajPOySuk z+WicJ+h327%j+6l^?924NVfzB+Rt#Z1Dsr=)B{dFKRT*8hQUK9k1^MLtrme%%Wrzg z9KD)0+b~rU0cJT5BfDm)C~C=QZOKHYY3rKRm;HS9XP8Pb8Cd3irbFaYU1>NgT~2w0 zI0vA%*5~kwN!P3u?yj!0vSwPv45PLUE>-C8QY0&-AHrv(n~k}^a=cqgliF%meRhS> z+wAUEaKUqpz#31W)?B~V3(=Kvd^WGa#J?<>WAvNc!;?(ssqC(EIrN1p^sVl0W%bNz zo4^j2GuK?sDtC{g%6pBi27S|{%PFZUoo%wQ$rYPDqtaI0Mwd}up>$;cTjCwAMMRJ|^SBvWy zJNGu(d@(yZna16G82ojw8{0xk!8f{%e( z(s%`!4}KpU5B>n02(AR@fIk9n1y_N0f=_}EgHM4^fB12(AG?1-X{kp_IjQ zpk{Mi2VM-W2X6#_1%4ac2rdGD3oZp;0KX6Z4qO9n0)GYm9{er%NANG;pTK{BTfi3Z zC9nM?;H%(C;CAo|@HJ2t@H%)4_z&;{lG#9|HLDd1BeZ#Bd;vtd8*GjIUdv5Vtib1{v=4+aka&jb$# zhk+M@*kVlM?Pr5}0zLw40Hfd|;5pz*@Lcd6@B&by=%c`oK;BD>eFlyO`!iBK1{@DE zb84&@90%5b$rypX}_?N1`8(+>hb>-ES zr9`*-_*!T3HVn$!{#SH;a=I!db%mwXv#V@ZaRl5PxcU4{e^^xOU9)lCUcV9NsyA8U zy4-kw={fm$f9W~+@(PoX*TsHOe_5$_LCu!XUwZwM+h2O!PQ1VLJ5<|Wmb*DL{pF!# zd4rn4%x``jU7*>h;5JKkD^v@qV<)P1yFMUfkeyYwh%-UhnMpqnq7S z;{9l#tF`^;QdcCgAN9f#?}Y93qouAk1!DWr9WWC5QT3YYY2*E9psTf^TO}g-h}g(U z^8;uuVr@?m=4k)Bv?*;p=|H`CGDZfPirQW=$8Y9$y36OyRnzZ22ObNbm^F3<_zO@$ z?mCdZ%~=o9hdI9lTfkp|ZQuqlmwxkka3r`9#HTpF1#bpl0B;9>2QC3Ofu!mD9)#!o z2lz+uMQ}R^9s3aEO$gHuzXbN+I{yrw0&WF|gWJGwfvR|iZ&fq)jr-SNm_X9go_V`NE&vpfmWIq#(fCqwlH?})C5IhK+ z1|AG90JFjSKw^{F-@wDczk|ns?}8DqGyUYTU?zAxm<9F%Bj5nAFE|h^0f&Gy!P7u3 zH#!u&9ppXN*q^~+p!!|PJf`RSXM^7WqhJnr4p;-856%HcgL*bU2D~2}3oZx8fz9Bh z;3wc^pynCA96S`{ZIsxN;FVwmyb3G?OTo!t8K`IDlfebx6mTQRm_+PNa60%NSOu!z zodF&PUJdFUv{|6~-`U{xAhBBP4sb4bFL*8Z0Lc5+ra!I&pJ4xHa0mEpumk<&LhwMa z9y}Jj1sno4fWtvzzt{p0Ta4WT-T^KJi3MY;z{Q~E0=^s6Gw6H3_27Nrhv5C-VRVp; zp~Q{{zY7io9{|-aW81Myz-8cl;BxRm@O$77z{kL!gDb%2!N(woy*V)lS>rRzbx!oY;x99b` zrFhTV=Jp%2ZO`j(<=`hEeU7smq%Uzk1?elC&p>>%!|eJod@+yb$q(2O zJObHXXkM62+HFq zP&R%v7;ZOu7f;b(grBx>yD1~T`Jr|r9hIl@*lEx0ro3Wuts67zEGf3Hz2V59Fqrso zk;|BC27w|R4GseJVm}`z;SK_+Ic)RnIM)ooXeh!MX|8D#$5`kq-1Sf z#w}a-ja#SjB1lFr?9hanb7Uh*-llRcW``HJ&D`DMYq}SeJu500TOJF_mdAmzQU0c{2E8a0>WWupA`ra4NuV zXCx{bK7qcf^#T=e4T*z?9;R&?Hl=Ul{E9`;D* z;F0Lqu@{ZS*B+3i60}?RVZ-70srW2D2~T|wBF&pQ8}Y$Kqb?e&N5I^8SYDdTGf#pU zDYV=UE>}-=O=hL8%-UzdXOA3q;f2vr90{H?_-y%z(2?MS=ER(iDhfPx4yy$pK}+pU za}~N0douTd^O2!L_H6D!r5V%;)dT%vpjw-tFqO&g=eHlZ7U9yI8f=V9VRF~B9 z>QDxpY1sH^o`xL=eJn?3bDuP`NHd0Y$y#HN@s^He5u0ITG~LlPC48OCyFE&=GctD4 zy)v}K$&a6-e=bwsbjdmxnRCt?6~*&+$(m&j&thgi_o!;VvZ#7mJUi!IYEESjSiu8a zO?{}&d9ESwesLXFxG@}|-CI~UlROWCJOqn??t8eY|^x}AKlJ6m7{g!x&?g(toEP2o_W5rN`P&~p;g*y!Jmh~ddeG3bugv(g!+^h? z*?Ggmv+c~u-P2zF!=h_n9)12NT}wYWtyiCy-!x+@$bVXsb;fVs>70GjzaIR>sZ-v( z+Rg=hF>S*+`?Lw8XI4+)8}G}vd zC(^5IqQ0l@RaP-0qW!!`pU72)0bdNeQ)71qbM%bJmsX7Q%I$9w?KdDdaFmD}u68O~zv zYSfSK=WKVWuFejZ%5bjco}sHrWtK~2I6YxVqpK5fsSKyD&&%<7BYd9T8kGiTvMt81DWjJ?29cXy>xKxI-ADuN>G=^Z!^5lFaeL`KDG2)&?z%YCpz!H_b!7_XNMmS zrr-q!Q1wVKtmEEb5r?HX<_3{Ygnaklr?Ql7YrF5>d(Q;U`u(O+XEM*=jV+7WySQ#% z-+fr|d8yWBU8ORpm(>8uyU$9UsDT-TPxUeC*uztY|!sUiW{U2HoxqiR? z>zeQ4EDeQg`xLH|=Gs2dbw+c(G{vnioZk?gU%xfX`(C%co9hc(cV@fX2_AP{eY912JrneL2J|-87i_kAaD6>e z+w3j%?#&@fJ=aG!1xkV4Ee(ZR>I+xZ&D-o;&kA{)>!UH1YfO1;D2UY;Y;7o9*RgQ( z(89Izxa4&m5m|5@7se$QtgUYp*>IQs*B5T|XRGB*4F#LJJyEc=F?(TsAyeA=t4?xY zYoCJ69NS`!v372&bA8u_Xlwm~IZ8LIQs*B7oNxyW^=lid2Y&h^n1tO(pt*wWbP78d-3UjJI>hQeiiUaT)%)(~B> zetYMJf|Y$J!Ice#t#z*-qbe9c3fpful@#jM9YZ4j-dZ1B-cYcdm3U1uyBZ2s^(k0h zU$Cm7aQXVzJCiZg8luaFMpw@3!qp8e*mxa_bDH+jtgnMvp1AIp$E^RjbA90kU2V4o zt5mvC65g@%*oJ}~ENxt0u%n@HQ$w_+F>_IUK?}9QO2CF@0mL0c3pdXDRy!*aZ5c|jSW9E} zji%bSG!*PI^sa{Jj-kRJr6IF>eZe+nt%UJQQX~IqtRVfTx9bbH zH$=A`AKh*zZ1wWFd;Qy8ZhYNbOSE@GCJnWB$IL~nfV%$e?mpk+unen?b}VSBFKD9p zsduk$>f)Aq?}qH#8wz@NB$+7e?jGA?^somz7BGiL@NSe?2jLPNF>AqK^#1=!-x&t@atx?Mf#4ob2&G-ZU0@@SsZGgsq*o)x~t|jSP@IVN1OOpz`x7Zi|Ee3LZXDrUUl@2uDR=4r&_WwE9aKix&g_|3qeH%tC+Ff6;LQ71OvBF*TCY)5p6jqvy8LB?I zgpjji!LFeNtH@a4>W-4tErKzF;5|cq!E%yQELynB#D2?&5efE8I7FDV%tW6{6n!os zCMA+=h%WE*OA~DFs(bAis!*}$F2$mSyKDgY@0aTfmvVy`h_F`ni7ur`8w!>Z+mbQV z8VZ*TEnH448r?E9x>>QPshMUyPbQG9TYt>@k2=>Etkuyc_c2O+yLZ8^4EAD!<(}G`e=)<%&cLxkLgc0=!#}&%F7oM@b5@ciu&qKD2P_ zbs1~q#hTYCxQ>$9zVL~w`V_9<=sex2J<6fxlc|^H6QInM-d1N~*Og?kTVtzwtAZ`W zg^FF9Ouy5_{Y{{Pf^lpU1=+1pP9`4o>Zc2%v!V^>Nf5W8ZBCO-N4V^e!9dxt2(gxKS}p!i$P`c~No8e@0YnT7;tFL|4W8N$t5RUZrxHKT+v? z>&ui#6s5Q;j+e;Vy5_VY1zrfPrug4nD1HdNhkSf(A#}2fxYO81l8flnf8EY&n{RW2 zZN}P8D&SwLV4FzW4D1nD8SHjyG-u|SCS3A@BX-OoZ=d@imT+nvUCz0ksU5tSsnci^ zG}Ud01R{4u?4!E-qk1CW=4Rw5dIa4Td#pTd>VnoI&ai?1nJ`q`V{V# zPHUg&ZlkkVI^r@^YertzGNS5@7k5Wz&yjyTf@c)jANREp{1=QDZ%U5*NsZA*cd;=u zP~0+=LeXIH)Jz7rFk=`jxa#%s9-Bc zwv4rUyM0S*D2R+{EZl*%&&zCNDKFQT8avt{JK|qTJ1Xpj9d)pF#OJZ*S!%j-0u(ps zJf%K~|7RHLRQ?a*m+chszn`J5;lG}~raLkITa5)!di0m>+`@mWp|O3d@jR5(coE8K z{2A&je(7e-a;vc)wPfY8psd`XQ29nqLu6KtZ(dxvOMJNrP{WK|36zy ztAny~jZpj{cLxwP)ICsEZatJOtH1cv=1HAG(#HZ#$+49rOk(N4)=jZ1b-D9A>VW{3vCz(_(fwI?D0!8AS zV=~mahMERtukC&)Te?p{S&g+&R%1QXNTcx^D67!|Wi>h;=4l)NWi<|hI?rev1~mvO z+c_J`rd$AJ<;FstZ{#k48f4_^p{(4UP*!dU)CETFyHJCS-1AVjKK|xY<9m4ZF$wAt zqcPW~ZuO7e@AIDYsr685&DqY|Py-E>$vae*ia-r8JgsS;W2o6sHm5g2Q6-e_%}}EZ z)c|F4`YeNZ=YMcyZHFBXYG#Z1Tti~j$(+qDq zl$Dzab&=uChO%;6tNt{@`!ST2TLU%P@ScORa&JM|(*4w@_Qw_463T_LP5O=bp$l*!A>8+4b~9 z+4XZ(Hg^47QFg^wE4Pt-D@SSW!-}ucv8#yohT6MTM8oC&Q#AiCuK4;*uG`j?C|g&e z?250J_d5HQ*XB}Po!vgqM4$V}Po=n(qJ;*NWmru6_~Lg0hQOMp#5qi!Rx9D>;_i-Z5rpNJvPtL)1j3&tiR~ ziDi*9BXWcPnQ5Ch_O%w`=@I{1SM5$@wMToICrpW)d4{FqAIU~en3CcASC_+o_4z1z zvu!`iTMFmIXNu1rH1GO{yrppF{j~3hNwK`^^2U64>>1U)26{{11|Y&UP(eaU&7@@A%BFqrOmGE9QtZ&qe{634t* ziBuP(6+zF?PD`gM9;LA8zMR4LN-R^WuB|?C^KY;UI`0u@^W$qhdFuU!<<2-ANxk~ z0&|Q|v$jk#EmndirO*tM@o6NPL2^XJ^s=fNrbJ^VOmeCTC}&VAmK>p}@9YVgX=HT8 z9Oim6`(sOL_yDbXM#4OjW?spn$+gv$xkWY1`T8Yia@@n5j74Ue%KRL6qk6d5%KZM5 z%RH7r&D}USHxl2zXzs>AOzb$oh->b~BhB26Gdia^{c!-=QqA2sDzUxOrzX$cxTu%_ z1-Z;JlZ@s}a`M}myYUox+Q4Sz66YS&J8O3&$tBM{sNw%ht_>sx$sC1Ab38u9;Pkok z`1X67m7R?fiL^7v@r&6V-@aJA+Ho0=`x#YPZC6~V!aysvbB)R1CN^aC%%8lPkxe0qAr|T$9l1qKP z<$EbtxfgP}-Wf@9$>q`=xj9L4qm$}Qatl+*1y(3PM0375OG0wQ*bXk`OU=!B3+at= z(z2BHm-sH!%)H7cwN=+tS6=gVOw1V`mz{v0IGwyHq|$a1%_%tO6k|U(G~a@BB*VA+ z&fO|lvuU2P;e6ISO}RBwlPKL38#63u`b*WYI{^Ws)LpZb1Kq;Ro@92Fu6D~O@qJy_ zEKTp>N>72PZnB>f!H(7|CVrolVc%qp^;UA`cI9q%&OwEz7 zH7+;B{hRuO<<3^JO!#JI<&vI+`QIm6$k*D<6`TVO^G)i%R>$L;ITFKwEIG zs$!QXzRJHC)KH>=Xl*y))>J18L6u}Zcn*mD#m0dRU@>?rsF1S}Tnyd@t^>aVwt$O3 z1@E_mO8ZVw=SDVG1KtDP1ug-94c-ef|CE_a@(u8Q_TK`Rf**npf*lBfmw^X@4}qFT zVmYWAvPZ!w;P*i0D>8FQGS85iOOknjoX6om41OQ{G57;;6SxxG3jPpm27d(VIph=I zf#53e1n@~vb67nEo&o+CJP%~tJI0(8X0A!u@f!BSZR2|Q`IL!g;^DSY%k>QmwGHX0 z9=-(*KLo;T32ozC7C15OBi}t5g5()UYRvqws#e#KN+u;X61UA{BO#lo&8UUQTD4o6 zqCvE|$83X8>yjkXzLoe!t4Y{2V{(aUBBN6`k$}0^nr5vA;U;BL(zH8XO16clE&5GH z_J2O*s7>~+eU)=?Uvt!W``+Abx}Eekm3c8cz4&=U9)G4jRS$myRdAZC^BnN+;8oyu zuoQd^d;okM#J0?wo!El2gZ(Yw8=%9v-UOBQTcDn^H-U@6x4~uLPEhUkpWt)gzd#Ll zyaWCX+yycZn+EdDJSFde8pe1ZWIiuFFN+m}AA-!s<@_6DJ}NUu=mzi;_BVsOLFVBx zbA&R#jsiGi=Y&?VJoY<)XM-KVX&|9*OtD}(D4XQ{f+RaRL~0hHZs z24#1D1Z8)B0%w3*Kzy2`IsASN;zP|Gy<5Sqq|4kku_M5j!Eb`EfU@~*pzQBeP-Txz zCDo_q*qcC_I={AOk=xIS&$UfjNzYoPqnKQCE1Z+MKIOLxtEx23N+mO#*qKLl9&hvP zhy7GlyXQ{+V5)kpTL-M`RL1<-C8oAlx%FFWoM215Qse|>F7hX)Zq1(8?_0+f@J80L z1>KQ#Z2w5M7@3`n%&q;Ji6&*wWmcFy&q$}53BFe&E$cBkXT=2*8?5v)HlwoC_`>A@ zDQjbET#>0rUX^D#b9rKqg+03 z^u$!(3qcKN)r04PnzOG6Yyiu^TS5A8rx9EU-Uj{*{0{gMxCq4eIJbi*gLi;ef((h8 zIN>hvA@=FZW2-^lA2NRMUhr`I*?nMd@P054)ZBijftuT|7S!B+oXgDZhm4uq?ocQxh#JOJ_F)&V{5@x z;Ck>W@b@6GM@(&FHHfcvdhzqNjh*d7kZhL`_Mf@rFYG_1BR`>eoX<_&-o`Wij%{R> z-kB0{p95*NKxI;`rD~1|vwL{EbB)Q$ExN{L5Zzt^wG-S(I z;!4j^4%O7vEWK;6QT^69$6jV2X0hGH(zt{h)yJ@IZC zU{gDeKm1_+SZt*jUOvA}SNc`#QFf#`1?BJG0@dF%f#X18<5)5HHaG{|2`&a(Kw=6r z_uxcw`Y-nH0N(*$05#{J;`;YMJ*1(H#hCBa%sHqyUULj8Zy$rlfuDdUgPLRTbWn2) z&Hy#H;I*K`{A>6YCk^~L*csdoYHq>qv@6Xmcr2*71#`gtLCy89IR=M;42s7JKw|qC zbHzE`K+Qd?IR!Q6>=EEmScU{~tpWUv=_3YY`pdt&E;TuW>m$UR7` z2;`b#)4&1Xx50tno!}twL2xj*92^2Z4h{u>0-g@82f2qabHASnhW*fXjxVFAy$)?G z#Qok=>WI{Qm?`>SZx25XuHM^%w(rsE_e9xj=?m(Yu z-N!<=wU(N;J>T6cw;ihdhZnS2anCzhZ{u~+*4tDfolk}o!kAz&^B^z({>-8ZL)5nY z&b(xfO*pal_hOEz#^-q+W$N^bD#MUNaxdHZoH;P$p;#)#O2k|S@n@-tAQlBr%A|1S zW=g(m7HZd&*wsJE146byW_amXKUM4QRw$lOd3x^H4=}EClh{Lmv4M83>ftL;H)d zBk#Bu7kl1LeA!enn8$CWtE>4OWoM;6vcI!ByZw@E2e` z_#$`E>`2lb^_#jvT za_-oZ;KSfA!AHR7!R6p4@O$7^@G($r9^aYdN6NWQ#RU<5+QRY7K*~Ej?jarZL#5z( z34X-R99YIWY$dfd#)l~F6k94EvgdmSEgg_eN@`i3_ow!`BmyfW%&>AXmAI3Dfk9B1$+~{27C)#05*Y(!Ddin7;l4bfIC6P z8=Mxf59fRb><8`wi^2E6YOoc&7W@Ew0Q?aA1^939cVHXH{j2i{_)l;*m`=Vw1&;0nBH=BdE658N3)w2PcC2fwC9YSV^+M2sS>4ysLV(>3qR^SdAGD z2=!&s(LIgkjDOZ2uF}|>XM+W0B~``*m9)1Z?QNJ~mebi&om7eVtQp1#x*+1#WsT{H z)U(O%W+#rsl}{qesjN~Ri>y*Q>VPI!mP|1z2SQ7GKP#s%DeK@Bk!z10PaW!NcD=r7 zQa=+5D||IMF?$Nwjl2Th ztaN8Kf>s}DGUeU-Zg3gp%p7Xl=vp{l=dFQpJMnk0yYsqt-BsJt*ybf``~R)puAk_V zK%%xw4D`jNW_Ym@6V~Q+Z=Z+u$6#9CasPgLl`EtJva@2aKfmQJKL;C@?F|8SKYbdg z`{|+J#UN`+n11dIa4Gv|f-AtYz}LZH;0NFcP;q$_Jc+c=1&4s=gBOAqfckcwXVx*@ z_+JPrZodfBeKs*}>}ha3_#3bgWQ@tV7<>)91kBRdu*N!vX&5725tc-gWNMXQ$XF1mxG6Z6(BLTL+owFCt0^4 zHiP|2kUrU&4n7W6flq_g;Lku}^ceokxf;YTIW-`DNONY#9O_{awXx)Yvg{vV}DDV_RK4usU6FQ3# zXjRr}T%rfF@+H3qC?E17cmnuGFb~`Uo(aALjs*V<>RZCUfQ&ObTS3PEoWFt^1$h}<3%&yW8QcbP zzwfYyOY9rqtDt6-_&dmbv$GvM4g3eF7<>mf7JLI#JAD%jxBaW&&!9}awjYjZ3psCi z{YmL44pUv7e+Y!xf^Glel9?4+h26A#C7)tT4r^_67`Qc_ZsSqqEfkMt2U*0UYU^H~ zF7vcWsWG+?$l5qoVS*Zt*9u5ob}xsJPjc6k*zR|+_Fb28jqw3$OQ!jmJ=wfzd*-B@ z-96eJ>9wnna5HDXN9p&F#kQ|9$LMAVZ;CKb%=0$GRoXN&~p35w^S@T?tsR%nP zxWY|CtZUqm->jpsgm&X?va4cta`@fq^3yxpn75F0sjad3TBelVc>Bf_lB|4z{5d3Up)ex5B3Ca0gnQ|3my$V3LXP$d_DsH3Oo+{ zEqFY*4P=d!>_D6OCMaKU5*PvdfTx12qhx%*$>0R`PXQ}IX1q0PhA>7J zyNUgN;2mHt$g=^bKez(S1AhY!05#svx`?q?z(F8mm(CEd4Ll9ZraXs&M}Vh;jL|t~ zfQ-F4XMz`kXMy9ueDG3`d*+zh_1R$9SHwv7bjlRFG#g{5330;3T>s!uoFE6c~nacbC)ZW zDtu4qiPcioDSGjQ)>MeUZljJ@66#gG_ETfpoV<|V6)Q%N2k{ay5`J^iLs!oyxh>gA zeSfTSE#}gK_s2|dVfx83Q2pd&Q2pc-unH^(zYQ`T5?c>4-WuBsR)T*Ar-MA7cdEco z!5Lsj>hx-Ge~>l5V#k9uU@pjvx8~XFEKtwYW`pyM4b>I)ddEj&4^`P#b zZvZuh9s}FJ8$r!HaTBQf<@sP0cr#c7GA?Y^ORWcGPq%7h*YMSZDlx~VGm34lpF<#vU=kqfslxceQTWUI8|L=D0#SpzON9-pb-4VtKp4pzC=q){>( z$b0_OMh9CtZc;X3dppsAXW6Nu0|m88fUe&L(}8f?8nk+PFP~N)FM=KRv+J031l2b71BZiMz$?N1!3r<~d<4t{p8^j6b#Hwj z$U9;V>wTK{V!DI>Vm}M~6g&t#lKip`cdQSX4Gskl0WSbqAJja@Itszb$^KKDL)}WSJIoGVggD>P#!E#J01tlu;S#p-%Oz z+S0Nawer(h{v)D8;{)$Xa-nM{hw8OgJ#Wo2qgplr*;bYr_Okosr926kAD3f zHDYpdzF37}$$$9QYBQwH*k*e=861-J589MA^{ZY#3gK_E-(vR8;MeNPUQFANO&5dm z4JDv_!$eSH`;)*$U@53E{W96^!W3U{|Bh9JcP_PnIKR+Fu3|4`aU^UnP zUJc#{)_}hTYeBt(GYk9}oCE6KdoI`;{1$i?crAD#$eO^hE5Ui7?!B)Ebw6N-h4{{KmY8By6d|<$K<#G<*xvGr2Do-BSS3+vII^~?nC6jEN8;AldLrv5T z3vA+EYn*Fzy!ID-9t_{0`34G0^a~116lhz z_8RyW_!ig%9!tHw4W0z<1a*Jk0-g^36TA%k7pU>@cR-Dq?E>!y-vu8BSxY$fQ0=r0R6G3$JO=z291MN}YJB`Na6I@qDBEE!fh2p>1BQq> z#6PyMJ?eRX*dC>$a{B=|CZ#=&J$JaV#|Tm>wp8}0VVi(G;^h+_2HBTDcf>2+J{?M7 zLsC>1=NgE87%l^G8P++AL40Y|tgUW6%P&RV{ zsCe!~Q1RS1K*e*tLB(??fvmPbU}w@l89Wp`1=M@ar-FJen*+*+_XBlbo(oO~ z`-8Hb0pKEVAh;A91g-!FgQ}MyVA%I4E{t$)-zS!iu2jR}^6-M|V^_YhM-_1)9JbHPebV}jGc8n6n~m|!({H+VJpFgO$Z5m*C0 z1J;77t65;U{*R$goIxJitA9PG50C9hN7s8KI4)lQdLon%cq`o$Tk61DZoUiB-t!kb zXsc|wJ%s6d)ETKGNO-Ho3;axIt;ag+XvmTxkXEuw+10}q#dCI~MYpjMus5wW`5 zSFf$~6(cJH>RH`7s4~|lkL#V#mhf_^xFxLE+q!92$rh27aAKsTkbM- zKsHtk2A^3k!G2|T4}&s{M?kf+<=`mrQSfH)F|ZMQ99#;1AJiDr55S*;E5W~kKLT68 zRiMMUp9D_;p91@UKL)P=SA)gi)8K4y4XE+ZpMlH3XF&A}&w@V(*Mh$Xp98o3Kl0uM zzKZhd|DBKsaVMHYqhh7HRlGtm;SxZ+gv;h)vjKsvsAvczKr|$n3!oAS1}q`QVnvG< zD=M~Vu~J2)Ep3CMQcG)8+M=SxmRe%cw^3u8zM`J*TF=bvnMsgfd(Qcv&)J`3uivbB z)_U&iStIKKwpGD4SfkJd(|&P z_ds_---7-c`T_J6C}-)d-$2`;zk^zo->cA6XcM$I^fjpT+1H^#J0SCqzLbS@F!=<> z0V$W@890%V`e=hr>)H-DqkyRH;)5yZ-0!9Nc>4WeyinH?h$88gcB{K7-d1hSV&h_V zapFuwo%U&5OyNkkbeg&8SJKTL&Y_%4aw%g*hbOmEPBXdg!@smQ`TUDIkh1$6Dw+KP zDs9<1+O*{asI=uC&^w@s(3hY`L4ODB36(LV7xX=7GW2uk(a=+fF9bagngYE9nhMQ> z9s?EM;aKR6&@^Z@G#y$8&49{$@Hpsw(Bq*pmSjS=K~I3b20an_9`t1B-=SZFN;^0O z8f;rv(&omKwoLxz6Kq@GM=p3CLS&?TWFIvaZ(E)r=E~yAd83Niqm%_uQQyT!hnh|c zIx_Kh8kjEVWb2Gxn!Yp@WesGw@vi2u)H=Ipm@W|XCLBk?WR+u<#4iD5(8z^AO`Rt=BH!i)<!Sz?ma5g8xsxH#Z1t0Q9FrCpw= zr!od=ZX7F4ii%532BnF+f+m!Vl;ZO0ij7%za+tmsSjr$m6g1*a$Q>w+rgeBFS6Di^ISV?eVc8b5Xt{cDC4`efq(gQP_|MgpFxHH zIW!FY0y-4R!-~4*mjEr{vIle(G!ZImeo4?@Lyv;~2HF$a1nmXQAiiX%ob5RpDs3p&704oFv7^STbv#pKg1ax zv89d$?`j8ntF2TYuyp3blCn8OB1zj!0LOIVTbb;Qx24>NF8A7uMf2^ac6Qs0d1hkb zv}sA|A}vGd4OPVB^bRrjxm-&K^H8aDASY(c?-*OB`v~S1o1u?j%G!c6G%YICZZZ~q z^6|~P_tA!&kF=ecT!_uxZSzMZnCB_K36*}rJfcRbleSxPE_5PvI&>2BTIl6aStFkU zy%9>=uK6C6wJUv}1MA*3`?L*t!w4@bh>ACEmYRKu7egq^PvsUnNacTn7`;6 z_-yFeq_Ge>7)sch;ZXLs^gQSdP&p4;0+r`4=R+4mOQB+;%b-7iE`UA>y%G96v>f^x zlr^@RBKlh;v;tZMT?}QtzGf|S5tL^et;Nu6I?zqfOQDP>HDjQ+KntKtpgeP8G0&>0 zf!+%JHk7ry8qU1(QVZmv%b=V+72mIhGp5#Z=yd1`Xd(1=DCYq!d|rK?dnNQyu9>&h z{200lD$i{*f2-jPmYnyknU8^^>}qa--U$_h_igBUC~L(vPeSj4PV2><7?gcR>uxCf zh}Ie?`*PMjQ1;I(eC!(bv#jqzpMo-8*09EDF;A>v4br+F%37oKJ?Kr)2cY*sncvm0 z7GpgKWevkx4`oe4ekG{pFHpwYnvbB5K);IuiwhW-%Bcx-Kiz7Ks2 z`U&)L=>4?YA3--lH$k6(J^>XQxEUI>tH)6O(uU<QKtQXAd*C>;*lJ>!YEP_Y`OjG!-hgi}f~rx6HB73a-3T{g^l`2^8>ai`CqiH0`XuNcXm6;j2}9}6))`RxgLNj9_Ga2#Woyc?dcL`Uo@!x)C}Q`WzIys5b3F=sR5FH`M$E zdJ$CSu9rY%tq@;U-)T1rD*N!Gp%+2NK=YsxsGMaV3$28XgVsRDLvM#pfQn80CbS8f z2YnqHh5ixBx@XOsQ0CV)(vPM>gMCwM&`!!e%)fl(IUKLgLz+1Y+?w4nF-J9 z^IXfBJ84gIpyKn)g^Hb-2R#>B3>BZ}dZ_q3CD6H0##{AyN}+4Hu7ExZt%SY{t%4@g z&lf^_Ll;5Mg)W8;gWd$a0(vtPKfz+$R{OC8`YPAALX&C#OQF~-F^al|wG4{wv2KUb zm#uF>>6_L{sLV_2pw~lJL6<}8p$*VGpzEOxQ1OB8g#I1+ZRn@a)liH6cNeq|^gGag z(7U09&^1ure_`DN6?}UUA~QC_?O}6A<;5bJ6A_o3jLe%neq{dW@gpZrjO2008)u#<&YwDd!q{on z*8+D`y?xK0(!6|$1@cr;Nsz>y>eb7G7Td#7UzkO}@%H30CxLyiS7x z8J#y_a{jbQ`Bz7#Ou_^wXNVVA#cP5VRF>zqO+JSTlDIIO`%#V~$PD>>tT*sB=p+&rC|i)PO&5Z%XdbE^>?T~@-p zw_t$^q?5EUjsTD8<8S7duxjOvx~RNVms^uFjzU8|iyZ|eMRs~~H36Dld|64a#9ERs zNy^UAEL}kcCQq0?Z9<;3SxKddbi#B`lDUv1N`V+*QzR1lcp@D;AupoZ;{k|H?#eJ( zl3#X1JgVZwyyr?5=H0?VxfGV>f5LRBHoZ2YBotN0*pbVjeX=H(5^sKS*{rHL^rqyD zG`Y;5U0&%Fz=ASFi^|0ZZs&h7{|qBmdP3P9{ht2Y)W7U_{*grqGnta)( zDTSY0*tg$X?^9Dmke+Zwa-^TWr5I`obBL%gg4L7t9Zj zod_?yL*6*IE4X7G@FNmXGHa6s08?BQ91vj=3&s3LE?q`bUH z@;JYsa^8S>|G7Ta_KVB@8;YESE&8u(RE7Do%Sz`I&n2Z_;r;H&nm4=8w)#%X3imCV zwIF;kq9G$xPVh$v%tW$;{7$%XN9vT;6n-w+$;Z7A?KxeNT!~Eb%gh z7m{~HV5KEhycI$bu^r`v%d$~Op6|A0b6sAZ%bV=-WNl6~r^wU5b{rdeGB?%~wAm=d zYPV5HPRlb2i$sl$Le^f8NTkTwV?`l3xu+*5ddZm~MJaMRNKwf8F>7CpT1Y%)qmXqC zla}$y%ePU;y20g@xxD2rZ>7uIpJIMzxtEp2TK@#qGT25TYXq+v%2eK^HVRoEflRo6 z+9+i8pmGhbr;S3^aW3yfmv@HCJKN0FVE#oc6lX?a+i^oUY3lOf>Nw)HVRpf zQM5Eecu&|UWNpJGGT|C+6tZ@?ye5~o*X8YVdF?K*!{u$ED88vFkf;QuSV=YtS^Ge8 zLNvwNZ=;YEhGD|>wNc0#h9i`xT9(@=#ad~jko61D-Ku4~jY3vqZ`P=kx5Gvu>wApR zq9w(8&_*HaM=tM4mnXj*ZNmM^Lu#Y!tHI53^RMDfqxfAuIC?BaveDwo%C1awcm}s>SMS5cOuGkhK(qt4Tg;Z4|O{ z&vL?zu~EpHem2gcYT00;6lf&F4Ge#@HxiO?G+HT;4pFSK{*4_G9Np^S0kc zDb@iSg{%kqv*xL>J!GShwdNZ}BE?#3Bl_C_*7j6O@&yKAfo&ABE(YDBT1MK4{*h&# z#2{}r3R!Ej9ocm@3R#<7-WHd)br7eBG`6I{2H|wuC}h0~3Ttd{*eGOW4ROK^wo%9$ zpTij>)w0G$-eGODb5t@BpZdSLXb#c`E3-k1`p#jj%ul~QHr(PMzqP{=DBIw zq>a!55(%`}2rU<~XKl3D2rV`WS^U1YSRSkKuAtLO5X zT;4^Om?xBbSu1UnV%=e*kTvj9b5xA26Bl^)e^GgQ3ticSRGgM-jjY8H!P%r$I6zgUi(XK$UmX~6^VWW`M z4l=SGHe%&^g2PL;5gw1r3%k7CpgT1m;mZu7FW4w#o%T&;Rhp_ZZ4|QlVa`P&#k#;o zA#04w8}IV^Phv$+H7~YNinYW>A?q9r69XGs`q?OCJqZ$t6zgdlg{++}Z&#d$saUO= zGwJSvXxTQR&rCCKu%OS_h<;9oG2!~!h;h*6UF7o4rFn%^Uw<2gtUOSP@+R9TWIYdB ztGt(N#P|!sd=hrQjY8J6tIV$wq*&8!6tYS|=V`cd8-=V@p!1b?r;S3^qaaKm`W~}U z$l4C-ue=v+gbxS81QKqajY8JHK^Q}LpV>(EGT7a=PB`K8k)PeaF*5U;_x4JCw`l!y zBXL{1KeL-vTsnh!^9=L5T_r4@m6aCHE*P+&aF+G)M<3EKb*9fTw6OgAxczJ7)|Cb2 zrK~%Ii%Y|2Ra_XpLDx;fm1Sk&l7jNNMI*xHMTJ$f32}PJnov5Y%n7(?HWR?J3j2rW z86b5N&?QmvZrt!}d+kPa%`aPsE&}T_(wdTC@{8!qAZ9ICfDVKzdc?2 z=5+^}0F$H<;rRtONCA}=Eee;F7D+xyW2FX}Ur<=o^>v~5ex$sdEZQYZ!SS2vi^5Bm zNYPz#@x0KN=Q+E7*jqxxeQ4eBLiJ0L=>Mn7RpK*0UvCPDYo}n95zGhIzH0x!v5qTQ zWC|}TF07oV?Yx2?l_?n!E?sPzdQl-FI-#^ulq2M0fZ~(71>r(OoLwreep`P`*~HVZF>E= z>nd-)_~kXDu2JbaZDO^xHEY6*S(HTi^aRp$h4>qKQ_-^t==uMxK2#1Fe zkYqcR5lrhL^WRx+aes`59rLU*MkFUHd3-k5$b#|s%0vXbh2o?&P!H(nR^HE+hnWHe zqDeZmU8wMla;8kP11dV%c!C+;A=`$hS&)GE@4Om8_ga1{MwI!^H3!1zkvwl0WyonD zO@vRE@Au{c_vJTf3IjZeU-+;kL(Y5u&2LZmdHP!bo-pzEbo#@&@AxHbJdB+Qr!2$> z+Hq?7eNw@aT7+%Y)bH z`I|7Zz4=e)Kbe2|+<)JFEHzk{{&rX1C9(R}+SZF|tCOv&3%AM)W<_J=8MPNnu%niq zd_AYl`RLaHLA5(l>msc!yG(rSoyT;33C zo6-2%rG ze@RPEjpy$A9$%aw>8;(7G}+1N&oun&l^2-siA&F}kED}})XTqAE>lXQ>f~CAq3Zbh zSn`zXEn8!9^IuU}Tiwy4GL`S7%AR~DSIw%ABs-BNQT|hoG@;igNiCy zM@iE4J?i86LTa~Db;K3h?I=fTXG3JSqa>+5x|8(pB2i5akEXYyA=>0BZs4|E(n$@G zoldZ%hIrPJ>LWYq|9b5UyZC7T%KcCJ*I@dWB%mSI(Ww{JRyQSAUg)&b!}Z$(Qfr#_ z`pALiy*;EUdb()OjEDv4g9qE@Tm09Sf=T#9bNQK>2uNax~TR!x8F*ii|wzA zrPoI~;{7vI`f_GnWS{g;m(O*5bYERG)5%A7`=`@dJ^eG9N&TfynI~D$uP*vE{ga+a z|IC#BN!RoA&zH3+r&?*tA3=k3b*HXtJHk~N(zYE2-Kb@$lZ5Ujxl=zph~0JaeYpDD zEA_Y6)Xv`KJ|wkelGk)-#}fCTZSHrg=9t%QIx2hE1n#ZHVo6Eop6a>k+8lC8~EB)w`N` zgiU%*w4L;}IU2=XtgSv^RgGWEld^+i-5PFBOTkqLFN zt@V+u_0etIs;}BspR}xB(!KT3t@W`j{gPG@2#{!l4RuMYTApscii7^%5+kG61$wyl z?~)_y-oCM*nHT4ONjGeuCXJ_a(AV+Jd?9go|KNtbi^ z_>}lcyg0(H*_QsEoAExqDKWF}Rh79drYP!;ix^_F-)`&KN8WGxhJI2$i zt@mNH)mFFb)T>>mUhOjVijU?x^>Va!*CaFbicj8{XSDf!nRcdLaXX56z@=)}saLy9 zy%^mNNIPNH*xgJ(S_4lmt93Q5k2?p%fHUAwKc|W}FN2cA?0QCwsQa85Wqcf=^f!BFd7B-ZP4Ep3 zktLAPmu$&ruUS zb5t20oG}46ENHCNWpnvSCFW2TX&uv#_YAa7NL`Oxyk2>u2`aV;`K&rs4|(#P*bwRn)c-LAE%w) z_;K3RjUT0@bAp)njHO+-^P{w@w||_Lv7$ueWr3zc40(qd@{ao0a(E4S>7Nge;&AaU z0@^`GzgTAN2MH@)zg66yevwQTdFmpb0VKMmu3@pLi*+Q%GPRo|jA*J(L2Y6*vo5-s z7-9!eQ5VB#Z?0QWscFaijn>rPBN-7-cf~y6sv>S+r#GtqySlzXf_qu(u*P-KHqqL~ zM5Zp*R&O^^)|L}K*R|z8Y7=Pd7fC0zD;i09w5=abMKccc2C35xQXuuQ4Rta6nYP48 zI`azdj@VARV{M7zx~-Q%3@bry*Vjka*G1RV$JW$Gh<tj8USu1?Hc zRxjQVoMkLY>vGr~AEliixuZUE$MyrKeUvsm=|zd~BT9ZI*`XGcew=od)`Y1gc^`#@ z>Ay4WS-RQ&dM%Sg9ErBXRnh$`lbb`xHb=$edm5bMx~sq58#m6X%B!vJgJ)1%9k!}+ zYpeTqJ?Bc8C-Lc*-G>>k%xVQSPZw%y=8=D_a&N1WM$%hW%;d6(?jXZrDzY zXZbs`KGwUghZfr@vchfl73dPqP)^(HQV|*Cd9hMY?HSMoVf#{9cl#jeC6%GWXhDtL|Ow9@H4{Cu&<4AE7hhUoF@z zBaO!`H;WIt!nXeiR@nUO1WQrsZ6@6{$o|Cu`2iwl>nqxdy}>Nh#jy8w%fYf}lVPGF z3n+Gz!FiT;=r&x+BNsdb!+JTfJBN*S;RrN1mh)=vo**+m-dY_-5E0 z5^x3%pUJhN(X+6F%k3W}*P7J=Y_x0^$-q|^+wpN)x|&i3y2x&A_~$SdM)vR(<>pn4 zfL)G?k==(_!r7PBaIEG{mTV~IZO)PnBi;@#izOEcvW{^4sh8y&7H+oIr>^RkdOMaOF}9~ZvZY_@YA_&C7L3|imP@W;YTV9{Duc`B z`q<{}AL!undojHXE|JxYERoe@F|zyPwEm50&*E6NGnOV2`$vhZBJC@Cv|OwzHi-&` z*-b$eD@DahRiUGT+LVL!QC7R!>oS)$50WwH9i4W#jfyR?__99rrAtXV9u=y6U4%w6k@_vc3G!28|)yiG2#SNpX;ANVT$Stj(XxZ3*xaUX%E*ltxF zc^3O>A8L2TJ!}*WKR(ppRT|?&H`&KHDU0-VQ5y33k$uv2L0xs-jOd1Vw~cjZFY93F z8xc8>*6Z$HD#7(af~;~!tCni z3+Z0o-sJc6+C7W3+P@a)4ri`5<8HfE`^5v^Pi0_R_ctG_<7K+KZRw8NmZ?5orsLzO z7uSt0+@=3z_Iylq`UdxB4S}2hYS7NP zE|EU=VPe{|8LX$&R>>Xnbv zX2`5IveQWyqvjgCfXGg`Nvkzor!wdhpf#EPnAF!cX35(7R=?S2Rr7T+uKj~?&GB-z ze_iz79lv;GnY2}or8MXcuvos%qPZU)(7r?EAgy7QHo?xh$a2yhNNsGN*z}Nd*UeR~$%hUK1W6}15>Q43 zPP{NAC_~HS{FoHXE8I4tgvoGofwaGLzI^^u){*VM`HlrNucfs$u#0cD*E_rull0o^ z-3i@4!{9$pBrgb%-qbto%3se(yI|*{G`#|<+r6->fyk^g%%ixSBXY9xuLF_rWFTs$ zzHLPVRMCU~+%e|nGdER|>39>gHorT=JvXJZYbuzX0|BS;;-kV&w+IfeDY0?W4UL1#rXS&oL5_dN!9Rs#ymC7P z*@^*n4P?_?(`l{>$|Lq(9Zr?!6VD z6Zh^;x&1>1?@pE0l2H8>$A(X&anR1>Sf*J*jk`{)Q0RoT+wH=C2YLw?RlGT|L)Nwf01(lzuRqQt7ww6W23eyrdni6v%Je$3~cvL4R4k-ZZ>J$-25E! z?(w)nrqyVN58_ z-eAnb2GX$J$rb%}m*=2AXBLdeZ9p*d4l_)My`?vCjdEf&-3%0}KMHppDi( zBC`aWb(^Xg2N0)0?`2{^{KbfDVbC!-Su(W^hk%MqGfCI z6Xajo^q1(q(CFroh=$b3wIB9KdyW~st)50Qo;hxNJ$*i^>RDoT)j!j6c|66wRRT$I zlp@+eIU-n}xw4xow>H1RTwZ+D4ttieFhf=ZxN`Rfn6RdE@JItO9djI7X3C9b*L7uj z%V@%+SDg_IL$y<1n9IqvAN8117iu}h7ecK#6IX_5mi3yCAt}u-e}-|3_axTL_qi>w z!PER`dpd;c_}%}=?45u9#|zm5LyY)3YMk2CIJF&tv*sVq<^6KTICXdQ^Uw7bsyq*8 zblW)k2W>qJs%D`s*71;ZPW29Zb1p>;V8DLG9aQYs-oQYUW2leC_Lq zod0%Fmtb%l>PH$<1o6<$WcJ8-Ysn@c=zzTE2Cxa zdg{m=@b1pb@j!Pe&6QE-)LoiDX1~ub=M`hGb!W__-dTT1-q#6PNy=E`)}8v{ossEoc)_4S?};4pZL9*R2_j4^`DfG^K5Jc zX&>_K4z$XSNdr^PhS(Oo#I3k>?qV?>B5VIa4>5ioi4L(F57D>pfycQCU7Ni=VJfqW zembk&342RF-J_Amz1+%?n$u@HhB&RO+lM3gc^%7f4>$YV!)*^~cB7jb#w5g@#zvV> zv#;-%XEK3HbiiqQ_<(GI#2;gktr*|V%zDo;V*<17zfYoZytfnTWBU^A(Q2P88Oj{0 z9hYuIv@xyWZ-m4(Vk?CS(*|eLWUo=sCIp8uw%1XBquHhk+Hf#NM7O0iNS17eanB+A zsIAr49fPG zzmP6D;_%muNSkDf{93Dw8*D%5+XIQsn~Q>JbRZ zO0CnCj%!~a{Ib^78t_P57Jqa7j&@162^>+!@h|6(N0U6HZ4P-Xr~cixmM%x-WbsW7 zk#=|S&A*oafpqY=E5ex0xa~$DYeEdCPIuyRr9bc*d78(uZ7eSx;-RUvX$`kZM4VK5 zQV)=uH5_w&M}2gqUavdELsiSu8u+O(>TQ2=+6sA9Da#~@u~uhc=b*;_=Cw7_@c6na zLbH^n?Jjie#2;Wpy2*VkrY9|{F4nZHy6Fql-71ez3TQb+_Fd%Z8GRVHr6)~YpXKLt z01F{I^;F}!L{2QoLG^I4&g0ILCdOksMtPP- zVl=dKj8sWSU9>}D+-R%fymoBkvg(aajO(2kJ2b`(cCbi?9uV44C;r`fRz+~Z>!a&v zK|1KlSnSzuN^joGa#Zttz5?@0U0t=(R%B6y_K;-ORLom*uy?FXUKd|O6N4oO8tm1x z88*FI*Du?@iVy}mJ<=`>map_EmsiQxbUot3+TqoagU)!g@C3bd?4=w=SlFZGsOHgH z%mfUc_j%`94r8Q8_%aDbJbI7^W3~qazIiP}gq;jfhGy$!{TBNu_atF5kYq#-yvZ@| z<66?qeW{Q)HDu7PXfvB`a1KJz$$ZkTEhzI$a==1U!<>jkVc-9(NudT zlRP_p&v+COG%?bbQQLi%radv%m*=YGSsHm3N4GV1)-{Zgz_Co`JRH?Y);SN0rG3(# zwAJ)h7ClH<8aQHDo(JN63&p8v4ZA6K#y?G7c*U=I=!Xy=B=n1gITJ1e?GC9KY?7J* zPF{!cItVc06(0JLW1UnbKCvdBk4)d+C4n zq3Yj`aWLF;g5lUsOkV2>Fd5v*X+Or(k?ZBj&9kf-kj+GhBClRoD z4l}2C75S!*ebc`ECmpK#s;R4fJeF*U6>Fg>uAyzpCS4-^TKK0eqD+u z7G{6IUS!wS!wSC9ggNI)Dfd_&$F;;V$pId7AhU(fZbcnvuM&$M=*)u zaV$}=fk&|d2hmrYYby}yRge)`-*OE7PkWg3zV#e+XWvB5x|1dz-ZE$1J685+J{eh_ zhS8mqgH)}r$?Q#Q*d#f2N<2+YAexHgl*)c(AzAurK2`urCuv5R|Ew1YAAQp8vWV6c_WW@ zUf_IOnaJv3TGQ>c3iTF#JhP_u?8n?Qc3FETBHNrQ zLzFnj?NWd3x>bhF;N&jm>2!4``zA)y`^j?=T{i!Km5DchUt^&8>$$>cSe+u>whA_X zr)}xJ89kNOyIcxzIS)<-^KaSt7wXM_yZ|pzlTjlIYU-mk!Imb=C1Ns!dKF~ov!5;L zo*tkaicue??9z-#H8Mn)y?Zfn-gk-659HxJx4EUsp{IkSsW#0qz`bCOY_|4J>qKx3+sTbM5wJKLtP|)HWz4F_SZXIHkiJW%_wK^I`wtB zh^(Yx3lgKL{lx9L z_t=_*dNpONC?vGMFoYv@F0{)!{}d(7uN;($?`swurQ*H2$W3Vt{01`>-`xS?FOHSz z{s3{$OwuR07Fw_0!6wvX=US-bS{yH(bIKrLn$QeeiO~9c~Re1#@74V_X1LhJ95?_la1?bHkHq6nn*OtzH>t#6R;VC&gx zD-r4zK^_79MIan$I6}K@I7e}#`E|^$=V22T<#au+Pklt5X~db(C(`;Pq^-Cb7cst& z?0WzwwfYJy!1jM1#lTqm=hL>HM)~!7o_(R&j~AIU+A09GPiQ1Mh=Rn zJsT4@vMw{Z<)pM{qw-j}c$ImpIr%H7E_HRweTO(4&WK=JGCZCz3pVQU-~q{D@l3}9 zV)V$|zOM&;K@Nwv9y0AWcQ@^4q&*w?;-{Ma*JvNDiAfnh)2mk)liTY!^nSjCKpmHf zV^(o`3PdoDGzjSDun4=Vxk`#(ELrp2I=k<~?EV|RGUi1?@z+bGR*%$k7aj6|Uyqd$ zyEvWXn21rFA;l?0%fQv1IBnTMgLtH`<;U^j^qobaIG@xOPw|Pf+*@}IsC>ER0hMIE z#Hu z?dNM24b2xxvB`_Vc%(U;w&Dz5vH4EIrB+|81wd0=hPSJ2@OY;Uk{5O%q~cCAl~zv; zCCZkN)F74A@>IOYe7i9e*^i{ic){(Hu`r!Q=P?J&b*3}bVJkm#`=8lHmiKE!JVh2r z;&q*pczQgExa0d1lR{2KQ>#+R=b2t2Pi8n}bEx9Ft2vkAYRPg|$hy0`X3uJMJ#Z(P z{cq1_`FSF0|0~XCBQ^1vl5eo1W@JByGG`ikxXEm6CE>a?la1p1buo<<1>QNVyjkP0 z6WABEvvq3%%bc{E6WFcJtKqf;Cb0TyIGMm=hYmY|HICrb?%G@pBS_aX*0ZGxE@KFa z*F$i|`i9g)?2t3o{oQp)mM(E-tGEpIS_jCT_a4D)Ra{H)wuQ>riFc?|R{LEX!MRuk z!H8QYBb}yWd#k6r(@@V;;gAzu@dPDqp?2K%quW>;?{v21yNB>hs+W4ak}k`_(c?+a zdR&sode#bq&WQ2Y+&7fO%fdWQ9!ONP6j^g`D*TYMG=0BV^vh;x`-7e6P_s0u+@7Iz zH=FiUKDI8HO>qUK*o{l*sq(I~sa1Z+r39+Hi)93RDImHw=&FhPCUFaOs=UkYM3qPO z%4S$#&X!7*N5YA+kjPSemu1mKde%sluc?o&38rVfogSgS=HF$aOqHJ?RsJPYi{WZ* zyEnC1y68xI@*!6)WK5Hy75e3!SZvxM7F4Ql_AI7!S-Q^JOnkB&v)4j8zw&38og|@O zo+S1Co}ysY^*)L5U@iYWt<(8FR?*pf->0Y_-wpg{S~v22v!Z|TZ6suqz(^!f5BGD` z(~_ONTtz2?%;TqV*u7Wh2OFc>*L4 z8}ziE0U0g71Q{*6K;Kf?w?Xn_6PZ>kXrUr`8G`(dM5ZMZRHIp*oi&=z1wFvsp4K-& zrVOqH@q2?vRDfy~-Qn`S2QvB|bMHRy-hIuzD{HAnw!^*KE76fX1$3KgKHuf#xM-A% zCc0=5$fSN5C{5FRJ4l|->uJ@4OzP#VzNx`iK}O4(Xq@W%Hps}{2QsqX2R)*)kAO@rUj!M6eIO(80mw-F z1GGUU+CfGlv!`WMY8>Z*Or4Ja8QBQP$X*6|RAncDjBE+$7L~olMXNx!D(^lQ?Eu}W zye5!|<6j^XM*{9^hHCB!`k|r}kcnd`$kg;TAR|!(G7{H=WZ$o+RR%H=_kb!iw#^_T z@iUN-_!a0emDm9?67PXbn%i9T1<2&>*klI{0exFF&jT6F<)GtL-y)FAWqMjmKt}UM zkV(D#Xtt4f1!N>%1<8tfPir^GNUS{C3AY+#!rcRULc=`(%2o6OkZC1bK}PdVkdgQ; z=*JrF_aGzjF33o9fEIH%(>jffyjO?qR3YFatGP3^!8Cian(w036^b?g0fsE|=AX6X1T{IqK>g`Gw zotWxq9tSd-F9&6+zAHdaDY^z^G(Q9~b@ae7j>MxNBk?%sX_a^il&k3HAXAdR1(`VB z0U3!ugSKe64?srZV~~+J29vy)yP1~!z<5N_B9PHi3o=?(f}T+=t3gJ~eITRdMUatr z4P+$#0D4v>-US(nzk!UzQFLQ7_M8GTvS)&f?75)lR5lA_WQT){>^RW3xSMHR0Wx-N zF38xm+d!r+*MN-X?}LoyM?hOu^F~mEYS{^@RP+wW$o>OlWd98^vY&%~s7q3*+6=1KaNAtoP8YrFq7OiI8t#q(W@X+)9-R0%KBnh7$sUk);|OF;Zl3(Fwe72OUp zvOfSBoAV6FSfm{;?+-5TGf;2*v!2${llUQCMUQ~Qlk91|1~Ty;-P?)xc+iO&TW`?w zioOoI1C(hk1)0*l7qnLIt_K;3M?o(r?{Sck*b7>#y!SySTnlK2^4dTq+~AXWz!YAl z6#}4QdJJ37$}WJpcfS_ z0hw}M2f9i1{Q_hpUIrP7U7(j#;x&+wNIb;}cMQmcI}Y@+hC2yl!j*z*RP$1h$?u&Y z(}o@cnb>{;GFqMm?Nlwl1m!Av8Dv`Q9?&hS?{6T}Hmp8QU%d!q^o;=-eG@>xRxOu< zjJ~TuMqdS}LiODVGP3uAjO_P7uc+)JAS1g8WMqE_7Q2Mq#!N8^ow7AY!l(QP18ANPSwsvZIL*0gK{{YKFfAXCnNa>F&d;r<7-OT&Ha zhP#Aajv9EG)+CUrkLy5_ly?)z#I_7%V!IvmTh($WC|A*UL8c5gf(ljkIZ%1x+WvD;hu?MR`cj?_HL9-S89As+Y?;sQJzd&>}VmkEyQ<8~iI_NBrk-Y$9WCw%Z zP}$)iBRd;(Exb(YX3$JUb)W)854(4N>fYVy-u)xUl;ry^`UGUkG^wwHjy=n=E>V4> zKqhZjflT^lgD@DB-#pN6Me{+X#eNrL^7cc}EYxzw{Q_i0#9g4JgyThP=Q&!IfQ*)9pf^=Z9Vl1P zcR-_6Vgty;y9Hzq z9b`2B3uH7O1pQ4V5-xBw_XC+WbTP<`8dE?fM};7xr4(eeRDcesmc<~GzO|rRHQpb( z=vf!N2r^~5+eLqI(WWdXwm*VQZ0~^>04cxsLCuO<=$0~v`d&<83p z1Y{%%Kqi+fKt|%*AS1B`)S?pifsDk9Zn#(7aJxaR8tzRuoHfw0%Hgpx0V-3J4Kn`A zrJx&?HyKo_s0y@9(Q1%M%UY00%LAalbGN7UC@5Fak3ptyZ3Bgr_lk?&0HrAJJr{if zGIg0W$f=p*U33P>)JL|9CWDNYyFez6&=AX#L*hNHGeBk@FxEx$Tr?ka7b(cJ>Ok`q z-Q%K%K&Cal3^MtB4HVWi{{i$rirxm9vi}rh`o|eLjzoWuk;n%9LnU%RMq-v5uEY&@ zBdAToEp)>@?1tOqhWiQVLk;(=8}1E|DTB8`rd&P*_0`h&0%U6S*rBX8Dz6X7@V)`M z8hx48NYGS8Q(WFWmv@WH`xeNQ+TAXC#J&3*$Y|N=^4@iMAG*BHK#MfCbA~ykmJK>x z^OghpNYMz8DYa`rrku+`YxV9Dkdash`dE3lgN(#eptZ`|1~TEcgW8q%63B!*0IG$T zX?+1QsXunOlfFJ6b9WHP+#TiKo$TJ7>)u`H-dzQ{O*P-=@*Z{3Ph9jz&{|E^d!REE zy$||CQ47eVH046449)-2P6Qp) zaHoJwxN&Z{%iVBSfIic3*SO&pflT^pKqk%if=tXGOZgxMxqL2ByI*-2@=~noahsIF~GG%Zl$dv8|kdgQ?$Vfa5N>quhAS1CKbhDhiwt@_LQ8tmUfZTu?7f=_nAHqJ$=b&Qab>&?$=Mfy^9sksGeo4R?Osa}pROa4&8f5C|=b&^= zb0g>nigto>6}<+cc@SH#%be6#e$!c1TMIHJG&j%T)qza=+vxIMb9om>op4u!Ot_m| z-UBZ0tcgyzaUc_Jj?4RYoHxk{w-RK+{m|vT;qoR`@5O~LE=mG<=^?p_~iZEMw?B9Az?q{e>wl7 ztZ^9-_aibACYk?~bca1MKfk1Gc0oygMP*@eS^k3Z;?l}F`DF_#i_1zYn8zRIhIAwh z4YR4#$4bpO(`DyRGD1@;%gPJp7Fj*4Nf{q;H_HuStRo#z)8XWY!mN>WQEWAmHj1hy z70R&5=~W6{QHoj>;f3^6gp^H+_BTNx-MNsvDY_bO!cm$Wf7F*X_}-vUKR)U5`t&L0 zdD_|?y{~;C6G@TDv`*)HB>z3NEQ95KK6m8f6iTq%pXFY5pxi}9@^>!(r#XUFLjJ-z zc43zsrkIbjQZl4qG7!$6T3KFHFrOx#k|BkZE4;B~zvqiYqEP`7=D@G??&#NY}dz@6UF)kb1?2chKeO6A{S`^0VI@>F0eboNATVSh(*A;0AAS6amg1 z>o2IEVhd+>Syh9$E2Sp?@{y|Q38f&ki#!bdMxd%hM#5ac{~1!0`bn@WN~_6H=iD?@ zdP8@sNvh-^r`LQ{BElUoE76xfrKqB+q|#F@<2|uS8l_q!ofp~sNTO9E*SyC;t78K6 zEUqtu_J@8GDtXGY?~ewXt|iD+m!Oa?pc&o)t_=^MpR(g>FQjiuKjE{_rfoL0at*r- zx)i~i$5@|#F;;n&)o4?jv`G)E@&4a-)(JbmnV8Xh?-iS7jmlUx@AKZhcW3|m>u*mP zk)AcO<>S*o{A~I?4;*#hd6U0?%92e_|Fh(wt@p40?t2qQf70XTTTj`&Cbr?s6MFyi z(eEsJ`fF2{+%o&sJ6F6l<$+g!)3oloC;s@`$NJy8#g5o|GPdB8hnA(>oIK>wowuwH z-M#PF>wY?BIdJ?-_DE1#M5-k+}xFMqWx=d@cIzBYf%p!7+9$~>uJT*_nD zJMrbtE}Oq#Kyl&ps-%Q3zL3t8JEy3iazIwrT?q*_hBKhByl8gi!XlBOk>coiyP?rE zps;9G)!e=eebQYe%<7p8TN2#;*kPs#BT@bn3f+4S7*JSHSzupCPe@F7F=Q^!`{bus zUgsnCeyZ9dKhIJG0+ zIAh_g^>K>fZ1izf!`bHJ$Z^UhALm6lyM3J3;q38o-h;E($N2}GeLl|TaQ6E+sWh$w zK29GvtuALkWzpiwzVk~dc(s3t2~Xv-kb|CgPRr(7KHf0BxK2!v2964=aLW1{O>6e{ zreqD%&bNe?PcN-Qub!jfCML*$NWoj9qmzkCkXMhyl9+HV5jlE}?xaVigoz1a!6iLa zN!R_evmO~v6BGK|dFBH9ENu!mZLVCIPnh`gD{d^WbQqR!W;_0 z8cy3cyqpbi8Zp%IFh3DJL%f{raMFi)Ij@NnOQLb9{cu)~@Nzy9J{HPOWYbTBz{`IHl zwN9MBbmDx{i6h5^{d$h+#5toAXLu*hq)wdcI&tJ!u|KY*oj9vIaUSZ#d9o8n4kG(C z|F#q7{Z1S?mK>MLUr@YwblHNN;v7K-ePM)iw3t2pI4$9nPMotlafWx|Oz6akb>htI z#Hs4Usqe)3ekaaToj5Oa;{3i7XJ04I$DKGyV&HwHabhRVxt%x{b>if8;>>_kGr{yh zGeBJrCl?=0dZpo1!K2^Tjy{d zhO=BPlEeA2aMZRqoS(sQ3dD>KAHs1yJ*>V{#|;{soikLzh*3_oIYS4^EX2ndg!%Dv zh7|@l!?MI5^GFRGGlOz6^H_YH{@yC3ef#QAnIKyOd(90Q;l^5g;oDt*E{d?I7B=mPkM$78zRH6k25qgz!^TUZ;&%+a*&g=Ajlb3 zWm&amv9)d9}HLGlogM{3x> zoE?77@T{CYLC&z&04F;;i4onSXL$CI-a*c=!2!;|EP2?+D>ZD$@*ro}`T%G6z%4<} zkftDK=s_Q6NY;>{;!nim8j_VWuz!#=0ILOJ#3v!0d@NmBvL5+S+ z&fu)QLC(OoAZKtYV}>VRIfHY;0nX6DgM*x$@j=co881D0hGylI1UbWM0-WsZH31Hm zEyx+XBgh%H+s_%6HM~8*$<9t@TIWg6uXV7MsGhkLl1w){Ij^R5oflBG((*p_lXc$H3+B)K#Np={y-NW*(?HmgysF?vl zKUdjO62>o;1}8B=%1u5u-WGXWLYU8uwv>eNOQpk!OD%lnuMKgjWww-r@k_}bM?8hE zz1#ahTKCmz@8k$YLXa`Ls^mXa`jsZ5{L z^!Km1I4(T|~WwR$1%rDBlH2cy^nPiP(*X)MbsL0J7o;&mAV_g-1hAK+F@w|g_f+|xQ4}lC4J1# z(N^nc1$(#uuJ&a=%jvnw_4QL9N4iQUhUq&#w$tO38R%ci)67Y4ieJ$`^dis|49_;v zz6%Bs5x^h8D{I+b* zRaRbDRIVj4ZC-g%#k{hT!f9oric1U1$=eM@<)uX>ZYs^CE<@V4h<0*8Im2gVQF()>iZI}m2Enre zABR7vVAvoQN#?lMbB1Zi_;ry_GR~jVC4aDwo0a8+ADopl$E(TZ4;re9-0Q(Z3q*x` zoik^S2s+oZJL_LOe}3-ZY=3eBp+sDQnY?9X9g13^3kGIqWryRR?3_V^hYZddnms(u z6O^5mm6MYrbnwtYdTVAVFCoKvvd{d2W5VW8u=w}hlN55D#s4;Eav==)gwlQcw!%tc zKF~_IHklIhIgS5ZD}9vrM1}AR`9E7GuAYyE^PGl|TQd7t)hS$7u6Iva!pYk@e@VE- zGX3K-jQ_ATd1f%2O!qc2ZF@?lZhTl+w!-Oz^PCD1emno$2(wuxYkXLK;)EFa@a&rl z|9t-cNtm!q&-h3Yb)`>svj-DqhD^x#97^9H?mbMH-`n91l|I?k{u5zRfOk*F>c4&Q*xc3oZMt)s`9WuY;(HA4k1MI8F$IWm2u#55^ z=KC*p7-jI4Yh^Wh=bpk}$^QyzOx_QbNfW+cOl0iHSl+a}38OANBRchp(Nm_4Im6GL zls9JL$Y^Bh8DUuk_>liQ`JZgj@cBe8oN;AY`3*CoH-*O)SB6KI6&B4Xm|swejjx(9 zeq8>f(NprrFb2#h!St1t7SAr2p{-@cY~v@)!N6AxD4TV?b)j`ph833F9?wD8=~eQo z9YdqVv&+jW%H~vt&z*8!Sk8COFTR-}gxKaUK)#%Ge8PWU{+*As>0BCA*k+sqmNgM4 z565vmEO72lWF*Wc=!L8Ym`{S8(y@}#X=T~77A(*sc%r?FPwjD>U%OC`)}3he;Ea(u zHF*(>28G2OYvmP z_+iTFh%25ukP1l2*lUNGRZvl+!H$J_5avRx#jL71n!O!dYmQB#C5dfuO%-~)^j^D; z`j8VjZdy&c-h20M*5%gkv6fI3$X=TY<`|))kr&uLB-Tu0i6N85;_Yy z9r`HrD(G|2tD*l3y#^|W`3YN-3FV+$&FRqVpz@djhlpwhKntLo%yo1g{qQ zH|TQc-=Qm@8I{ZPqXdQGev>v(;dI$7&C=0SR_d>BlHQ$4-hCU9x z3o3p0J5aGx=MqP6t5?RI)OMnkmp?UfMP$l^X;m^gM4kL{Z~N!~kGj+`=a!o+bb z{h6Cbd2dFhOqn!=zJE-Hv^(<&dUWXs?xkZSS`)^O&7X`a9=cFYvT~*gd)#0mNX>|! z?e(oF9EZT|B$*>#lkz4_k>v$dBD@5fr>hL~6%(?D&6O1c&9MZP9Gmrq(c?!>oEXXD zjyF#4y2aN5cf5-j{*>nBdsZ}pV&3Hq5xZM+AvrOT*^3#c1a6tw?3<#~E9YGWIi38T zL*XV^QzFqxS48qhM@LT1pEij_myuUZ9X&EHf@SEHafe2mmp^gR=t+~WqN68g(4?*M z3YHr4D>2W>88=`Mn8E11)48{3_Pl~}?j6Uyt>&IPXAyZZXbTJSOXS>oI@d=L#yqhg z8jpeVC(<=_ zlKd(rI|$2N5iZFuyCI(V3DaGzCHW?xBts|uYQV=yG;4NnmlyG=xalt^%(NbB}eUe z7{jnm`ER|t`j)pQU-oHA;U^dN?f2IE#s^GKNSblx3lDBMbMk#7&VTHRNB(uAIa8XR zaO!spUs%?D`SQ;$8u$1UKS=pEFDE79^n_veKX~~|1#f&|H9axmq1m%@I8mwm2NxgP zFz~`jgSNiZd+H0n9@ob_s5}$fWsSaY#^my{xywB{ z*;zA+OJ|o<;hSV<4agdhJv?i0_JIG3y)%LDqPYA2gv*#j2^tkEYQ(6hh!Ac;4M#YX zC<0NdCreTdb&5iO?1mH7e@={h8U_ z-;o~@tWRIh^ZcKE<(Kz&zdJKKJNL}a&U77HO-PKjgJWHa|9yuhFhZfAo%V~n7>wVQ zPAr-9OZs$b(bNg$Gsac^l5XfQ=dfEVm?Gt=Q7oN>`N);2PC~aO*JjrI4Q;Ki=>WYs@dO{QcO=IiVt*s zeJRC^L{ed!YR33dikXVEht-|uODTrZlUB}NdmS|3`&;hMJ?F$5c1inN(Sm0OP(e38 znT#(f9ZTN!`wwA%qDy(^#Bp}R12yFD z(v|MN<*OgNJN2L?6g!43fDfrTR##fj>M%K}Sd#s>QBuu{wA#zo(&F5d@~Wk*)LE%v zBoACOGt*QL3U*@Hkwa^IheYR)q=sFrL+MFXC$p_?i>l%LZ&fuY*t>d1j;{6{6`iA! z8lEKBwSny{HqgshtVdx-W^Ed)pwd1Y_Jl%KCt1l=T**>Q)#Y~JE4KFW`v9lcUZx&I z%?tX!6OX(K;|e>``A$+p2Dhr4FSkbd;oPeBGBx&VUeJG2J*wW`Z)9+_xk0=V+q$3V z?kA~X5z+tZW$L8pf!XJNzGUqKV1+t+sh{;h+xm$Z=9{p38DY=UXkU^V)VHa#|3lB! zUZze-%?tW(s{03i?c&l^t67KC&6llFHeK0&lUoE|1hxuXNpG0MM_F~&sX*7NrZKa6 zpSpTE9ND$@GWFZoTYkROQQ;>w+X>stfeXpCm#OPjSFit}6E%%VI6GguDEsRCZ90?G zmsGu<{g^Sv5-wQ-$0(6vAU|VNopn3vR@T72Y%D{tMLX`>t&e@U`g-{|^i+L}l~(na zsgpTU5uv~fjHR({^nCRlxw|#sr;s$I;_Bn->UE9On;C>Qky(G4`jvq{GuY_5UOqjg ze!lcU2&8T5Uw4^olm0VL@#9LiV@zdCZdqpoVq|^2Y={1;pD#B9$6EQm3!~ZhSa{wr z1Jm^}iK|ujWqgj<{SEs>+O0*k%qjfZ*inxmR_elk>D!p@{2y+mKK#$&mtmK8aOP;X z`Q|P{Qp=8oMERe?FT*V7zcaTA$+`C?(uw?7#DV`g{4&h(h z1XtVG?}40+1?c)&8(K8}7%Sk@{M@7a=*j zbx6*x=9`{m?cRiRgq7|>I?CF38i__Fetr!}VUuCjBlWP-*GRpsltvlk%w;0EtE#LN zt{G-LlB$plGZX1}D_w`w(@J-RlIEH^-AbeZ_Ud}1fmZqkNh5-7ObUg3SF7uYG{{Q5 zkw)69!@{fQgjdUuoXh%Rrkgc)O(-oya-sVq(qQXe>?hs1)&>`wjGHMGqYsUn;Za+I ze+Fms`|tWmx57|<&Eluy48{R;J{BfJjkl;pbT~iv-Kiw^-Kiw^Nw>nrebOz-ebVjB zt>oO9+qqA=WygKeeI!!zKIx7R_h+#Azv+{19w#QQw)aVQXUw^{lH}q_lKZ6F=|1G# z=^A}0)h@f^bU*WxZdq>LC*6vwHkej+QWm+J-~ZH4y79Vwmi`hrcJ`BQ6|*k7B)RC4 zNFQc-z5jh~MA$XSZ6 zOWe4>>?i_NjwWkh*B(igrEX;eJK8Tdn;y|0+z+LbF>YWrZ!RlX2-%JCXGU~`%Bp!y ztq<(c#VnYxQ(xkLj^$xd9+BU5$p1m4U9pS%4*x2saHxZa!8uTEgnFoFz1qL7a??ec zBo}FtQfw}AIt>gtor^Rz0%?EcrN{OL>XK_-Yf(3{)u>Z~)=UTDwr1uwyRp5N7Wi>f z8@4)jyOXIQ!`PB7R5R>e8j$i?&!FPb=9kDx*Qf*G)d?GCu24P ze`)kET=qgqKnpKu^fy>zLGL0ILpp|_ckd$X`h9Ao1c#nShe{fiPdeCR#Z%+RDDZ(t9LRQp#L}lETdJ zO;zSZW`LAc;7ITaDYLY!DsyTqyzRM%A31kfuw291Su;zo?eW<|!Ez1f z-#o5e>&vE%I%NN<4K)`Ze?{%Oqi!Dg*zg+{KDXB^^_EFn`7cRF8#@gk+8vcPJNn#yS8FEvbNl2b?kL^v z=yQ9b7c-iepeNLk(!?F*=9Wn+@G)loa_n5sO__+EezBW1qX`LtJ84ba+1;8sng29g z%-_1suW9N|TWdxW5rXj9J#_I7uIY$;(5*@}IOL{VS3Opvic3eb$>hGw{Ig3uNt0qV zlI#eK1P#DXjiSu5w=luI?5K}b1)7yHwsc9KX}TjY)6hhtm%XuOGMi}nG|>!eqB*;XrmBhN z;wGA#(I`*oa2HpHW~7N;)J2tT%cQ%lS@Qe$Ip;f3pYe9@t5s@UP3}J9?cO)LYf!g` znryjY-LaqgVy2Jkyl74Lt~v3VYz2L^nI7He#A|xo6lxI62eD5P_2EW4uC`3NQifuV zt=NeD6r<_jvp?f6=FRT^uDRml{KeXWdF7RUmL3;rUyTb}TK@dBO=ed-{msZc?&+m{8v%N*^^z)lOQi66%qgP#tS;)!N8s_~J9nfApp6ikZrDojElqtb1{@5YMGCc8_nynN&D8orNgx zrxX7%2W=yg$j_REcohzf_yuMmmTFG>f58mIwfHZYpPFqtvI$Q$O$jbLOmshtAJLN? znOVc{TGe9qNKz?SR$8j*jz2LNVOaf7v*2`7f9hT(RiPV+NTV(*$DIN@HX*00_)!p- z(giCyUz5=_r?2fE_Ky4u=kx^&Xe$1KL;f7bkLa_jpGkj%aUIcH;9i{H3RPj>1}DJV zVHu?P=-mq!z=z>oa2X^YdwT9g@JmQ`3y(Ggn(nu~u>2Qc+cU27FFOj$7Vt26$R5#Q zIa0x)wMFH0f`jmEXIiTfpu_(};NJ>jJ4ungzaKrC7~}>6+HjZgWz%`U)OJfTpvWn< zw^|=D-or*wQsALT6lnx$3Fg)?m{L$Zoo{C*oNJw0?K|ZhUg@9Bu=6KZ1=ldn0$z5C zCo11--K?1vfsKe6jp6uax?4+|QKTw$DKwSbHlmPEoHyj|1~jeQ6Bbx^m!Z%jmQ-F) zR8dAK^lf(+QK%!Bs@X>6T-5m|QRjAeL>-DPz9kt9(um$L>AjJT<)kI00S1RWrJX;( zA@Gk-9iY{4B774rfNw#i$+zLh@Exd5$)8{w-25}#6O#VDU%_`_NB9@0{QXzh2d;xd z;oqQUaJ~;G!u4<(`~cR#58+erBlr^B09U|I;M;H`+z1QOi;qeI|F_JC&8`o3P}F)=D@Gv6R;6#eZOy@-i&<>ey(IyW z#EPCU2_6GmKy8i8qTt>v*cx672`le*m<$)fUEu>T1wINHT=HIkd%-v1-cXw(6Q*{C z=zj1E&O5*#AuCLJ%ExpEo0JXemh{1E$^3N0m$O$8e%<5B2H8=%n6GCGi@fNvVc9)?U>I0QJ*KEtwpXTz&h|lmEVj9PE7`>zVL_~1t}NUnm#c`-EnF^N>z}z? zzAm_yFbBI_z9z8Y%qS0QfHF1@Z$%T6hl8>uDi2R5sC5K+Sd)^2^Dxg2^9|{O;z5P) zq5S&$`X0ow;^sK0v3@%9-f1ugPJja-b%_}S7eNL)yoX>ed=d_U%OUyCTM4})s`j)TgZ=fHe89x87Z!l|$bRzk`PZ#p~=UJfhZb+8gD-B!W) zdU6JOCE4xOlf&^(ueiJ*I|}b=xFk$R>29yLJUl`stsg{9K-!Thp(eJ$~%@Vyo)Uao^f;Pp^-&^$O1 z&W8)&4N!H^jqqc5Go+k1w?N8a&6M>hZw+bEqdYZt!1j=VDDP;v0G2>1R8JZ5ZdeZ& zLfkTopz4-;;d*!g{G(yj7k2Ywm+bYydXg&9f2wv{tD?;DqHWk+T{;5TPa{@Ej` zlrK_GE~RN#G-Y_{sDesnH`|h2&L=n$wV8u2bZnXG%EU0y;=~N6+Kp5p|5hm-PiIGxVsD^m!9;861j3rO&SXg4Y<+NFRz<4=R0L0+l{5g-V|_Q0Y^%a~8nM;Ny@! zg!emmC8RH9YT;UV6{PQCn2+au1?gkhe$zE@Abw$Xo=v~BU%XQ}=leWw0=yAYKN{xj zc}jmb!#}`Vpwjbg@SpGwm_i+LC)7&k4@1>GeBI_<03U_;-8=^Iqj?;1PeUKayA?7Q z-&+lzhVQ~>;qEP|n_zGF9GncFht-g;w!KH-i*N~C2499RLG@2whF`+v@H_YlY)d$= zfEn;rH~_AM(;j26 zx_sFZs$NNk%9p!B<;xVPe3=TBFPRr>^W|<(`LZokzHA4TFZY1Tmj}WzFcZ#%2SLgT z(-GFggCTj}@L7RJo;HjrcyB|#*tGfb2&jB{Bviia43#gtzzTRYd=PenPs8r;MVJkh zFIgMb=1aa>wfV9a+=Fn&EpH#l*o8M3_Jhig{h{*Eu`oVg9?0{luFT-4Bfh@;GrIV3 zT-j0lF^*w6C(M_&O)6&-9EsYbzfcQD?bx8Q;bjyPd46ix*G@p19_2$lm(r@*kyCtq zK4GS3Jp(GOo(WZljDEU1uS- zZ~Rf>mWrAbVZ$Uko;4oK0B>}w!EbgnX=Ma0rl6G(^kDo}Mx)>82wNFy0~ZtK!J)8L z`Z$8$SYOW+Y@0r=fJz@%LZy#dsPu6aRQjlc3*a26vg~T8vg{hDvTQC?S;qLHEz6j3 zZ_Bdlp~|uwpxPKWLX~B=z)A2{cqL>!(vIWY3F(WP1#l&#e)p0ndme>Hz{g-VWcI$- z8$JPZ;FD1O-KStVq}=glz-J-t5JUUGdj~!TDUZ!>Amyrg9#W2(rI2#SP)>QrL&iVt z*YhvIO3s(T8IbmcR}Ys%p3$s;O1r;>@%e#g+v)ruJIW7)lj)K$KlJ&({NT5`|K0qc zu#V3Ue}PoeU|W~lt|52*a`PpJIxFQ~eG3sjr? zGpPKq6)Hb`36&ojq4ERYo!I>F9n`qy_fYxa2dMmz+KN6W={F4?1$Tpe;O_8PNc+~K zUux3fNstvB?D)=}Q2AjmsQj=uRDPhowfUhvG=#^#kb2(y3U-I=t>aPun*HE;aDS-$ zZ~#<(I1rNeO(vWVJ3^)1gJFDr=*#^yY>>%MM|}ODcQO6Vkgx!i8QD>M^n{%v`60nL zl2#Ja>%tumOoZjIh9Oj0s;lP8a#dYAE4JObjNlsGI+fY&{d2#}mP&V%g{WbtOsQzD z_`^w#%3p=Ue8LD^nn&r}uYF0P{-R8KSP3q2M4dZKb` zSAAYJA*8Y0)2Ok~K7?;@C|s5H<-5+l{$GqCDXh1`z2TSeNca`hyadJ_y^~-gEQ8;` zYvH%>X80Yv3vPoN^Zx-p0$b3YeF?UND;D%~9fxJiVf1QgM|{LqTG8LmWX;_S+g^GS&!% zoXq4VHWAx_6KTS9Y==Rl(X$6;Tw3fLYBZFxodG%}Q6=ba_N6(=L)%4#l#2CG;R|xT zbyh<~NASj~9RU}8eu97AlOkhxb9Os--o`ZIP*l2K=4{#jii2TD3jW2u{zS?u#mgyB z#la}pAC86t;Hhu|JPlq3PlxxxU&GhnnQ#Lf3wf7o&VmPXpR?g1a6Ie@C%_@F2&x}9 z5%S*2OoA%=i(xq|fivJ_sI)Q_#;3p5=#>zHq!OS0dUL&7T>6t8J!cZ^nlSy@0#wc> zIQ~1oIhenov&H5uYY@RlLWg3E9zesL$6eDovD?`$f`DCkfSxwo;`ADxYpkq~N?d`3O^|Keiid`-$X8QC0Eo`;Dg{=~-S{1Dte$wdNQDaCoZf&b1 zmeaB;TWMveT`4mLo_zWMKJ7|w*N&5s!#Rmx<4Q|7vAWcV(YZs(2+8dZA^`+zUg`W# zTxWqaJ8|sit%0Rgv2t)VcF`-}-7y0OooMfC{Xt7)G?jAbVND#9hp*G4FbOV{`Lare ze)*-b!hkE|);qOMmYqXo&f!5R>VCnMvc4#uJtA%2D>rxQaOAMNhkv`fTjA;l<+qF3>`SR;i!Y^^0%9kHvsBI5u~Le; z2uU_lsYIQWVt0-`2Hh@3{b)(4roS(xnDda%wz_IxV!b5F=2WXo_N5f_XC!C$ufCL` zF#}(>Db#%(>geIyt9;f;o#*Uk_!4=HN=I`gcd=_XNn-UVUzcL)kj7cvHNKQ$K1EUu zm1_R!ODX2oU7Rba=1yNqF%N}0?Jg;oSw$h#tqgS;ySi_dcQNPqQmQHRr4-YEw41%# zKYS_0%pR4Kd@04OBA|{%w~J|y=Om??4!)FP)*_La(5>^O6qA9o&Rlz6N-?vM zjV6=yv-BrGnVv6aA55U|mX0b1&nkBxJVou*DSj}s!FQu3&B-uzc(|sw$ zY(*MqUCE)5B`MVm_N5eaKGJxryTF(Dypbvgk6~_CUm|{yoZXvziM+5MMWA(gq%X1B zm@lQ6%aJBnSFZA<6thUSFzd?@K8r59v&M-&1@k#hexD3PRn~P0%sZjT9s9P24R)@N(L+pwxgw--%N;NBdiIw9HWwgZlV2m%Nm|CQ>tghad zQq0Yv?)Ff(IMgi(b+w1tb#aN`dS6O0_aTwo&^_c!DQ3S;ZeOQVbD%G=vK`W|thv6v zlwwXnB0*s{-zaNL zeI70M!1?I&KK49jsEX^6b5kDaGMY>bD{fVGCiBw~x3XW&=H!~0X{KsdmK1r_8qnH) zRqdiy7hw^#q^jP(N#g2dZ&h`yQLVsYfBQ~$>--h#bff-hvA^7Hn^*~Nn@(B5V$*qc zExu#^#7?W)+|94%Zg7Uv>T);Nwy4ir79Dz|g=MCy?c^jsK3g>~$wzDXc=5AH!M=Q3}%-m|K+SJV4VyXuO!G2hfY!0yL#r{jMh+mqbGrTz?$0jOn@&D4g z+@*m}INew?b0aqi!mimj$xjQ?QL6@~=<Lo-(-&7U~9S1)^qDzBSt897D$Ir%*B<-?skcf6vI&Dz~+@eH4m^BX_yhlbhwrX6MT0hDH*|tGQcs>X&?e8Csvanjj4qdLnT=!X7;?44S}w|dz4a0b&LUJYF`3XO{KCdxI zx+Kx9QAspNpXtO`;HjwOm{iOYxk}e}i>$g;@x`k`CC9A|N2|olOW)c0Dxu3Rp*xqi zG`xclozR0A-;w`ZLU*ogZqTAtK%<2eLsRH~1!Vf-ZB+#qsE z+IeAPLmEPq<2Fg>uL@E{n52i)M~c2y&3)Jnii{2JP8%BTCQ=fo@r22`>eo9+(k(Xi z{;Bj#YlxM_UZ&VguT3Gr*XFLP%UfHUw`S8FBtXjeFabtA8B3-{8ca6*b+C&&CrW=i zZtpeR$|Ea#)aP#|b8d_-yV7YE>_j^fi6$n(gLs}Ev4+Hg6M?;4!VtqEKPCfsZW){9A2nzr>xd+L(} zX*^*x#MVk0caF(WT1qP z5mWnY>c6Sk-42)YTqthX)KYDdNV<;c4~+OX>;KitkoWR zUGXEazO61}?%SW%e3(?N;#sf6sBspM(y4K5m%{bc@)~RNw$xL>)>9YO(+*T2KqF!# zEjg`dZBwD^u=yoXr-Y_y2xd@>CA6TjEq@CQFYb%6+Pp?;^xFKbS`gEBwAE$H+FpGq z^gL+okuFqYEcQ)W&*y^X}7#k)O61BPMn|7rDscA^6<-Y=H_)iB%)!_ux%Z;sN z>4O7*Luh$#fBN-Xv@;IQxFoo=tv2J5P50wazx)jswQe|+oT=blM!c=B%iF-+`sS^l z*)vf{(6agZUA)ag;WSk?CXou%Di5Eclhks^_xQ{5xV_WbStkbfw_dX``KH?ItuCp1 z{q2o4>yz-ji)-uoCD!vBzg{iRx4JgCw5_()wVM`g$8WyR(i8h^9X{)un|^U0HFwlP zSIfLUER)xKy_UzZse;7J1Ij#_u=m#qKWKgVd_9~WVCjT(zr1y`I{OcqwWEiuZn5bV z?9}G1w>H+zqWhp^-}dU)>2NgsjwQtF@*0oK+v?KWmLu~wb5DG;6|Za#T4@wxOKWB> zHPy{7jg~2oFC$Ee>t!m9mfF(D);GUw`E%I6S^ntd$p5VJr|18K@<;R7cC!4jMfrbe z5wwAv);B+$QfU9!QfPg@ybV9U2>S0?{*cYr{nCZcI*N(DdFeY<{wxd1pLLWhgnpz5 zdR0ZxEC1mlC};{<+VY61&JOrCqy3w(o9G67Nl=s{+Zr@Fw%zt`Li?`$?Cdu-%(nJv z|1xGw`!~^;aY9#Oy1|l==x^xC=baRbuM{eSxvgsgs0-(oIQLt0?W39nwspr$Xj;Y_ zc+w2pq)_uBss+fq0-hjmZC(DF`c_xb2Vp>#mJ#g;niOg|yVl(=*hIS5HZQhPvT6)3 zXs&GGzP5e0W#%DnBy>aA>e=dAJ?f^0O&$VbYvLx)##z5uQxvaiOm+h|j%t0y`$Nqj z3ag80Vm4xOL)Z@WTYHSus(~IhMcW6@+@vYGnbJ~iu8p&@C<$NwrnMsB!vmMtCh2mG z`ej^Ix6*Yl)LP568Bp!K%@mbtHg9Zu^=1{7Ur|)X3|F}R`!Ab6bNTPD(k=b+wl+VDCg_s<$MYxIV)MV7IsH7oQ~7gQ zkUv!bs3{a?(FSGFFJiN(8((8bH0l!yH@Y- zyW|7P25&~|;We+VAHc}ok#E*4Kd?4`1NJD()kojP&1>n*=5M1@J&UoyZT)i7W*)}{ zTfS_IE?>4p%9pBN)#YYls5ZGSpRQwv+7@G$?>!t^yy=8mV46AH>`GeN>M%0~K z>eJ>j-mqy83ecM6t?awjZ8gg>ZT+&XUtZeGDqT6oR88_<WOKi~^tSbnDVgVQZu?k110KoN|6A(vx8QYu3|>BLtXam0Ds2KnH8Tj+w3+Am zF;W};e8;l*=P`@$y12wwF6rbaq{jd$@WTn-h6Y3HbOX#o9vIJ+W6od zWU{H=`S@67A2y?9UJwp8O#0;q;gFkLH!O_|W?xrk2czfBjc&pr>aB(ihp2E#91eQ^ zG({hepI&=PEBp8vwZmMp+6T1n)seKL>KasUyW!Gq`0vgQ?jTCL2`%nK8eeb7uiIFw(8-S4dksg0e{ zsM)-2?4EMPRyvXYzvh>rz0S4oI#<<=bLMK1O04c`{yTF|BlY8#p*2VCoZAeovgzB^ zcQs5`#g#TlldY7BD>Qd6(iCg%q0n3d z(#h!f8k8nco|X6}(ceQ(UnJ^DGwiJ7Tr1_Fb5bdi^UL{2&My}tO~qUrtq^3liD{#? ze(YYg8Cu21?p>E*9zYsm-CKe*+DcmI!@2iYB*y^chmNwV{sTNGq}a zi0?{Aq@Gqc7D@BAGR!4N$61NB0Q{Z&?nZKU7bCg*YUY!>FW=gmGHkRluOYenzJ=uO z%NN-G9)X%keUf!qGpU`V;mHwJ$Jcshl$H3N&hE;XVa`VyY;}B><@;q3QZK9Hn;$dA zN_@@Zo8$W&UrK5nq=WWI&d(i@(y-CS9EMbGrOrq$9h{9+WOc5cE>`#0C2;vyNY3R0k*ciAhaowayCON4 z`y=(X{u_zZ$4X^LF6=Kv8fQd{dvZ={Q?)E~*E*y7M!MQCms(oAdaqR`x4s1` zh|d;!Sabc6+;eEn2KO8%BF*M%8>2;H-E&-m^$K5&_p9!7FD)*?A` zA0qLGxlh35R@#i@%&iW8PY&>8D{r=+&2~(rW=y;)i5M? zw^2w01HL*9sm@CJro{Q`%Fx_(p}8B8=2&yLh2~yC8g1|PK9Y-%?~z=5q_q#?!$TTt z&D|ABk0709b#EfM_^91CFxT!^fiyUj-b8ZGu@T8V$LB~y9nbMKQoWV7A)Rhr?zCTE zE*r_2>y31^HP;`>nVW#*o?{l0dyd|{n;EE2_I6C6P{TX!eYyQcO;-(Y70|SdD zY25k#R(Ip3*o6+bn&61uNLK3>^C>o4Urx3A#Zte=>=zrXb+D_=w9+tn%U|KM5W_bgvOyM^01`!cBKxg5$H-T1keu)DZ+%N$=`9KKITv?6nVTxT<# z=&L`+Pu3ez8`;LVzmxYr)NXVT8&K9yaz9~+$1Y87ZTevz@2_~T#Jfw-xH!?hTy*|q z97WuV#A)<0>Ct|P4rbja{(O7(tRJ_N))L)6-rZls{!fH`B0v1(v+Sf>@o^NJ+x)$g zVv|d3`flRExcm{Uauw|ct%>cVVLzh(V{QZ+HoyJe*n&BiU;g=X2cL0Na@XI#n)ciC zI$U#4pQm3t>b`TzI}e^8Y}kC)-0b&my!?~j2OBoeD(p7mnu@mf1{*eSJ8@v=`8|(+ z>f)1rb;Z1AQ)u_PBggLTR#JF+b*rQwe^mXPGqI?ks!P|d*Cr)-P7}QkA(YJkO&4!C2&QXioLsY%&b`((!9MNc;hvt8jW)f$3 zD@vnYR!)rONzTT^Xx`?mFh-+RXjP169|C4}jHVZwxiK28H?|-~b3U5KV>BACUKXQy z2FUV7H$nS z(c3|{M%yy!fGk3kd#!HxW)2FDXftg%|KGCpw4QAkp`oLV$)xqDW1_E-?8KQ(G`IPh zWNRz&R?m7f5FAcqEq?z9?zOy$<_}FYYny2P-bAA}2|8MbPr*9qHvL32ZOLX^NGcJ{ z0chs#60PZqCY?ewVkTFalM%p(W{liPi`EpPDQ_38sgfAjXU?J=;XHqKW2DO*9`g(Xi^Qe*||wy{sZmbB6Zv zvq#{cZ85fViB)9%BQV1{uyGo_S#d{Trh5}jP7}>ZO*E{M80QY_AI53)p2i))y)JK} z(HoptGxws=njwlE_lPf|S&$j6c>_(?j?o%cUNbodM{7Pt^Bg~wEh;jJDOQ z*MfLW-(|6y>~6hOJ4D&a?$$^3YP2T1TY6HQrh8_*rk6_gXj?sdYZdcoO|Pz6KQl&? zJvUy{^Zs~^o$MQJt8Z7WwH%|#UKgwB-lx~*cugNxu8p?Uy>HhJ@tPhz;x&B+$7}j( zcZR6D_vqDgO1!4`m2sNhy;QPC+3MLN`{8&^kCkznp552QX?l0x9IxrAH@nd;_wJn; ztLc^9r%#-wd)L$BG<|waiP!X*6RYXnz3YN_P4{JSnqJxZcrD65y?ga+MQ(`J^zGIu zUekS8sOb{5jXbYM$W6ukk3EKv|6;e1w}raf=-2HZzun6t>38qI$iRWyH4wGPOCmD~ z7JW%%4BrOpzHIkifdLkV*?|)*6|(~qJGk6q2iN-~ydGI!W;^$f7)WS8T$9FK9T&6W z<+u^!M&%A3H+tCcA!8V;8#i=RZth8u(}5%Mb0cR1MvNRbAaW{;r{xYGIxNa&s#Dk&?iG~>pVOf6?a_i+UiDyqhnl#L%ZvAT3Z zMC~lmQJPv-8V*)+IcnU}cY<4RA2W{5_#j3n*@|9bL5!>>iPa7+s;sIg^G^m877k=# zN7rcaH?odCQEHC4I&h$W8kJJbxCH6a8VeGcZ!0*}Vnn)2aIVFOqR(Sadc>Udv1j2k z;KyUVAsqI+Pnpvpbn=%T8T1%(4ks)!X# z4VqF?K8o$P3rZ(3gey%LmXf3IUO)(rEO8;|HZ?3OH{+(*QGg))-C1bMonkLAH>zlA z+4B__wKS6r*hogHZ>}RkMgnM4)q|rs^7gcE6@}sl6_2`}% zIlA@g-lJ!auD!eUiRdJC>)N$fuU@cQ_rBfxN^?%ih@>OTqaCIe^u096Xcm-?=vjd$i~jPm+{=cr<5&8(@VoZ3V04Mt;Trf*Kcm&m z9NTkG1NlEy*nwV?qp3F^crn&Q)X|B4N=4Le0+{|W} zQ@C8x#9Y&Gk-6Gtm{Yi1+r(Vc@RNJo^GbO7n*7Ax6Lr8 z@Oz_)xu)SKb8j}&+&j%Q_ii)Iz1IwLir){Km?M6pdI%WNzT>7L&Kz&*OlD^0(Svh` z49FibX2kG;$8^jaed?f5V+MDO)t)?J@JR#maz}T}RCs*GPxE=Y{3veJ?X1!HZkFjnK| z1r=UllYyv{4tE5{1QCVZN|Mb zza7edRPjyrPk5EeU>?^3PwJU>0g~t zHibb#xu899gAIeaS&U*odeCy;>50`-rf6HEN_)d)!412SEF-)0xh;}{&A=wx*%s3y z_jUoLX&Fm=`|P|lUafrTrl2FQ7<5w$D$lhKKU+E?U5}d0?7q}?Rld!#@`CfKi>x7S zSmQrkrF%MU*%WB9tuJnqLpZKSu&yhOFZJDG7r$=Sl=duEtWGVdoLW#dq1fhxDx0xvYF`Hx7{{;q9fQX z*m*cQG5hr<Ki|T=AkpL<3crWF;SX>qPr{zR+tPQhU^jJu{WYgfxm}*|KhEKEMDia zH=fxI>TLsI>?!W{fT_goo>1=!GT@<*u=ldz-f%qJ2bRM2@B+9myaetCuY(=nLdXIk z-ed3p_&z)kZi1QcYj_ZBNvEPCYzx_E$=e$q0`)z{p-|so90q&A!{I=91Uv~I1SHPk0T1fxJTL_24hv5luH9Qe& z-Tx8r2bc$UC!d`JkAx?~-jH^THwf|#lXo&41xLd%a4gJ+MetNO37!V0Lh_0?3;r6` z!872E@Jy&(2F`{HU;%s>(xvp4K)Q_H%diltj-)Hsq~84t>1aAhHoC3BBN(FFww30R z{(HsMyRsuQdOP-xYCwC$)VqVIWo)%8w-X%As&<>UIaG!(px9Kw&JMkE9p~@(zWL$j~)B|oO!l0Hewx)x^dlGka?yKYu%6nIrYQnuc z!tIh&mj)F_q%PGn1+_||R@sw&r6bj^9c9>D3sn)7k#cxYF1 zDx?4%JJ0=JdR|Bh7 zl&zRbZ;r2&Md#F9U!&l4)gbxb9znHtbJV%2HOgX(xd9MzWg*tLWf6MR~oH_ zO50b#A+Qc=yn_11%ZK&w8hACF4_T|!?jd?D{D|}G;HU6Rvh45Rr2<}SWy9c(1_d@NL zcpvNv?}w+r2Vfa|5YB?!%ew|X3^kMB5%@HG6fT92!QaBiq2>%c0aru(=KTpi1vO7# zG1R-LXP{;YJPW^tOJEY=y%Zh@Uw~TP=0%tfUxHKNGFS^=hWEhb@CEn^d>O8Qzk|Pp zs_R~bYan6csa$yteo1&|@e2;s`TaQw+O6s%M3+^w2)Co-$|~8B8STOTr;Na*BqjDp z$4HJQI4Go)vXi+Kq->XDm7oHRYoy9cO6zu`ol0v>H;Z%)R0f4&XpH`fImWhp58Lk_4SmV*c-b^8ZE(GCyXf3=!j3F`*1zJK9wDX2lcc0 zvyzQHRG;Qo7FDV$9b~(U>ch+J1V_{Qw9WcJ$m=!nHAJWKdZ}MbVT3z0w?5Qd&?k!?wFJ<#5xZ zX*x+T)}!cDftEvSqCAK$+eAT8RWQDfO*TOxWan?Y;w){C;ErJ{C`fUBN4L~k4U(6& z>I%>x`B+t{?G2~%s5<&mNUC>yUevkm-738-lL`M&7%9E%#c#2%8%y{r+$KPUcOg`I zDS{&*v-Z4G;UqX07Q-802~=7<7t&uf%mMK>L;9DV;Xb7>4N~`d`@(Wa|4DJ_Wy4BH z|H04?^`=5r2=Fd|)8OTBI#gWFfbr==voTdAZLbWGyYcBmcJ!R=vuxgtNgsntD$A!7 z%otoUabi^Z*nX9#7}K5o7)y{oqHCCGZoDI?PZ;Ks{h&r-1LJA7FbK*Rf4nNFTDV?p zioa63hg#sbWGe!-z|R2tfs z-x^;zpEy$3-UgMzZ-*n`9k3AI2`_>R;FXZE25&jM8){r+A!O{p+ymPZclW{$@IKfZ z-VcXE+G}=C;s;?R=MTXe_z1iSJ_>2ana3dQDf2k|D`ZT=`xkr?s(yM3X28Wz>4ElN zlQi}b<}>kAkW}K!Ao(-Co{}Af!~5_rfkmTwN~75fhDW6@xt-u>R{66hai{V}F{@$r zsu|@)w%pJ?ZJ{)=qF_Rm9l&dksvg7T_@a;`PN5oU{)_MyJ-7<~ z4YtAE_u(FJJsbf)grnd`Q1v2hbnjyLF`NrOf%n3VkT$pZ6w;_)n<# z`xlHacRJAS?us8W`RRyH6IWobZ(O}3J9^&s@UMx|#L$X@87Eha8amKcOL9KJ@$-{~ z(u!`Yv{F8$tjeYpMW_-+Z1cMV8k>4-I+4Z9KvOZbGE`=vj7d?^EpEy;jY$Uu4HHCE zKk9y4B83ej?iycTow#uym9G53Yqf;@a;nl5rz*MhL={2nqk>+MQ7 zF%#X6$aB{Y&MX~ z367dQc&&Mi9Sz!>Xx?#6oUo+)4`qofgEX3LQ+sjZ)c!E0Zlcnhq|C{9R$4oyYj>2C z78XsnPdVFnYf3?7m95zCN8xuKb|(YO2~Q_j^Gi4nG6Zcy_hRQud@#OxqRlZE`3_Dj zslY`Ax}-9Lu4;jQorco*cofbEAcc4GS>S3!+C)xq7k2Xl74p|BoK zf>%SvkPKf%*gQ8Ee!}^+kp8c^4j#p$&4ctw%ndLH-Uv^FH^a%0_YmF%@HXf{zNzqN zUzj`Ki*Ny40q=s;QDzbR95S}!btI_ng_IBGKB&3J_d|^XJpg$|^B_cL9)TMFc@(|@ zAA|40$6-st^GSFxd$?D2o%APJa zPO^C^Cp;fN!DhD}e&!l)b61ev{2W?gjogM2Uopuw&j*LDOmeQwjTjm4`Vq>bzNPWD zl-U|aLfFGp1vxLuoO3*?gqURSUxkqzB4WI)=w(S|%#MpD6<{i|Y|$iZH%0C>$qlb9 zifAfSm^3Yp&hZ^_#gR;?^mIY$f@eXL8_w0vzMTpirn++~1Nl?=Y76WLKZDuub2t!w0Z)NjVKMv?J_Nsl z%i-6sHRWC-YzM!AW8k;&9QYkv2)~Dnftw$p+RIezc04`_s$Jg#GHz&E!q)h$72F%P zh8qC1rC9{WB1O4yTY?z3S>;c@P5{-fobptNT}Fxc~;A_NkFwP42j7DSLc+{s!h?tbe)e5(M>vS{gQ3dL zEO-$-1TKQSH}vXXG|2ZSo>s&g4zuA2Fc*%1<6$1uJ667x^KOGD!{5VE@Xv5G z{0I_u-oIcz{0^Q9ccBhA4ekk9@z6UE{u&+$siVB!@Jy(>Vl0fWe@N4IB}R2wbg2H} z5lE7*t*L%p&$#+Wc4X#X@NbFgpE1lXE3}Qxkr+#GG^@|0zE3)qZ6Pz=HqCT1dpg6G z9=4w)l{)Eada9e%r2nMeku3S+Ln}EAYX^0xwxP&n%!OWj!GsC66CX6#Tqj;NfgEr% zbe2WzkGD5n5~Z*uk~&~+h98z96P#2vt%#VNWGyd^Qdr9})fiE_k%r9?g)2)HHd|5J z=juj#{bVX9jVGx;9vq6NVVoSzZ?><$m^7fcyBwy$E8q}#CDa&pEzE~kL5*S8!TE3w z{3EP~8dtg+GPlKC1C^%c!lSvzwNURrnA_o1!|UNCa2|Xf&WEo;zTWhbNNYF3-QZ1d zD7*!p0dIxpz}w(Vcssll-T|+Ncfv(*0n|IjyWnbgH)PzwEQD=%{zXvzQ`%u(H+U}` z0PlmR!299Z@Bw%Md=S>dhal}!^Dxvq#7E#0@KH!R&pZZSgO9^^;1loz_!RsHTnv>z zo`&&xj`x}-i!f98>tL*n;-XcU=QQ?mTwI=$9kRUMnVR=AtTp~cjem_QC_Q&DgHS~k zMWqvpZ06HFfKlre(LH<1A^W(=zSR+@A5w;Rz~rZGu-gl(eO*E6!TKD4C4 zbvIn$94WLT8tb^8g9i&L7_aGORmuUO${%*H>HG2Eeo$ee^sPF3k*|N3@K!jjhx)?r z12`0Z2=m}a@Cx{MC_5iRrRR+B=T#p}PmmTHXMz}sE{>Si1*O0P`(ai3hQeeNm z(Yv}#Io$O4xpA*4le(+Q8wSp8Nu>f;C2)>(1=HQQsM3uc>~hKiK5de@Oirta;_^!8 zO*^|JOG;sh#`$Cn2$3T^X{a`-q4^<8x3+Kb*pvuAH;YX16iGBAn03OVJm~-Zx1qZ{+AYYT( zaj0SN&zuj38oxOKeg#j2iqjD=KAmuHyDp)^Q%8I{QQNRzTsa{-N+&#*`5-2p*ze(j z@?msU0TW@BP)@f_H~IHVCX~I1ESpf203xv!RM^VriWa$EVw(^f{WIISkh`jCUE$;kD-}-e+;vb?+snG^PN{2T z(;?4bi!bXpwJ3B`rGAa?EGMFL1l8xJ3bli?$<0zL{E(=v}i#+Jo7V_WUD*xE*?#5l# z`lr0yaDx$RP*n3=n#o; zY5LN`y-;CyR{sbaI?DU%Oz19dwv-C5prE2gv~`jmI2bD7RdQ_WD7rkFZ2dCKchC(L z$?{?}t^l$IiaAwiM5bD*gpwbu?^RY-`3n1`fy%UtA|`C1Hzi`g1)r^6anu!IdazZ# zk;t^Ipx|@Uw&b&$0%u&HjR~xT&%M>x_^*t8_CgqH=^--XI0K`>Tl`s z+{7;xck1WRi5rKE&KxB1h>Nb;Fs_z z_!U(DhVOR0mblpnkA>gD(eOK155I?c@ALzF3^MLu`!`g=_FX4)#O;`P3#c*imQeG# zTEV_N1MBy@F&wD(NxMSkgP0UJ9Ws7l%f2-D4ClMSm2h{cYNRbx8JG@#fXqerk}13P zfQQ39p~iADAn%;aUQlJ=-tZF0xQNHNy=e~_-!}Wgb?{eE^ZxgPAHfcABitXVOgsQG z-eV4gJz*wfJi;&s-cv)bBcu;#4u-G5EJz#K90Cs^z7B<_!owi-lIaAg2h8Dc5j+A? zo|~iK)36Jq+%!i+m0w+9e3^(}>^ilX#G8)z_R@ibPkg&tcKFkCnvXK9HU6nzMSE#v zQN;v4z2h6U!D@D>I2;=oi6zCMQg1R^KlS?WS5-a-8aFjr1&Pu#J%mcb2k{ zHoRt2+4iy8Oi~67?yzl5IJ$NeQz%?>DSFVOo7HAvFL?RaxRIdfB2v zC4;Z%X&+JTBVW-i(fsuwySl*=l>ol!9@}f*E8w<8%ysK(?-P`)c2ZW@R15BG6{;zG zMQ^KE6H)ZBipGedyH%)k_O0}_BTB1L*nsy3QB=05?hFp450x#a^IPTX&n4|C&G7w( zw-;p33{Sz$SfYK$T@4F4KOa`YX;AYmro*S<4EQ{}04fdh{fF&)UIcqmHt-#Yo!5Oa zR9Q0%YTgAmwd2Q^z~?x>6skq~gpM>lSV!vg&1-`*KW2PQ+P0VfZ19&@R?uWSp zegp4>-6=yDQ?>K9AA(~z=X(~{E`zn4KL&Z1XP$sB!YARI@F}PwGTTerkMbE%2 z_$*{B*erpJ-5SPhy6H z!j8x(ke(l(!2rb=b1mivG9+u0`lFCM;qI`3H8m-V0*X~?hCu%Ci@84v9|r-bj~|Kjce}@ zbYs?_hVBLV45!GQY|6gk4}SsPc~Q@4P;+4`jZN z=?f>qW8nF)ADjo-7s+D|f;kqhhR4Akg!cf*J1R2}9tQ_Qm19F72r2#K@T1LBp_UMh27f|0O09KMRa{Y2S!@T1 z<+Un){`j~s!RF36LFRIKNqJY*iF|3x7PT#0&#l;=EBk(hr%MY8!m>v$mX=Jl{lcIy zb45##6N~M=f{YsX(S3=g0P20y6iphoN7z4A&rhY5^Md=lPwgz-GX7&fW&JDtYxGis z0XDy>WS>7Mi`>j9b#+y?%CQLyo>i8(@^npj!)Z2-ws5W@+Yj1cgzakuL-zvvXtRB1 zm`JT6cb#nDs{ zK=ugiyYn_Ssmi|EHaY_P^eJP`FVqVTj^O&+{(11R!YRsC96AsB%PN0@L-~6cCx!e} zUg@Z(>`E);p>q7;=J|nS*Ws_Z_ z;3}y1es93mr0+k#6u2552H%7lrhN-egv62k{(TKp8}l7_Df|=ESRwEEy$9f0_#}K6 zE{1=FYIClG>)?BE8~htgCtbV`)%IKu+rtlF7W@z%3Yj-x+oBtwzJvceWW3jW0vTU5 z8{u=1J@jn9dJ}w~^UaX41hWP14L^hG3w;jh%bPD?XZRiL1%HGmLOvYv&VosB3Ty%C zcbJxN0c-_nkDJzz`q(gk!K1!4$&mWg>CX1hr_%^fJ9E0NORN3LN&HM0U$_aNwy}#XFmAd@_2bF>NFc@BNbI+p28(g7C zMQ7Sj5U?hsGohRN3O693?4H9fta5{KhANa%b!#T4Qn~M_^zgPV?#gKmM0D~E*cx); zl!8gNcn_)^MtfEI2QA#%+=Q?ntcpR9jewWWGaRg#{AdQMNOCUg#`)0_w7M^)4^F)iCo`Q043p{pep1qOHs z`B*J{-^VVHm!b&UHM(hIXv2oW|073pESTW#OqQ2H6hiCQ63eEnq7 zrqWa;RJ>QgA+Q>bgy%ygpJ`C-?&)v|oB`FYzW_GE3!%Ony9nwXH`^`SZ&ojcGdRBl zdhk+sIjn)#!`bi_cqLo_YvFHT9b66PK(*8B;TCueY(w6d3v=LgQ1gE0K|9U>^`7S@ zcsslqE{3b=hb*a_YZd&7lLW%?qhG0%J8Meu&e++y

        _q{Ev6XnBU5t`}g#RrD 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 z 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%0ATOy}6~&G5RF? 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 #nIf2tEi-0)G#3^(c1CnG9l=oGBpo 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 z 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 FJN8Lh(Beae{NHR3O#t~|ODEEvg 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

        c|3I7kQe-hSsAGUek)MWJgnrMsmE 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

        XSYqU0-N>;3P*$RbP+7-kRLn z80IUdE9~7(Baue6kkeCRN(!eplay3WpAqStz7x|peY#esbNVhz8;VR9dY^P)2&bUrRkhrtJ64r zdv8kRbnn$uJ1Zjbbno4JUmB-Rp@e1BPoHji>74GJ(m6c_r*nEvOy~5{>AsYhd+VH^ zAFcOOOH9`el;+5Xdzncv8updf(QbVzd z774X;$?JbhhI-NuB|oX5Gy_YfaNj*cUQLF2$qywzsiBxwL_%FQ_EA;~gM9tb4<$dT zp|qr!%-8Y(JNPCNg!;e_B|oX5j!g;m+N&i+$x!Vzh2fGPLPa!V<-=*yY88J|uTK-A zB=rDeNi$~_OPV>Rh^DLP$;8l^dKfWaN6#Myym98$jvS`2+$q9<6**W~l75y@NzXh! zn5u~qnVX{3syUsF_=#xsXu(Hx+j*!1;t>40E$YtWznc=skE7|)>2^#nZcl?=q;SpM zY*A+1@%Q$Za7=v=Dj4geIkHM|)zwtZH@Y;%L9ByV7eIj{-b!(Ca&BmO)tvIW8sB?Z zZO+TMDh`AzeVje59K;HSS7O?=f~T1ye1y3Ml$DLvc{=B@sPxM6QKmE8XN*JVWkq?R zMLL%Aft}Y)}suC;H!Nw96af0%IOeVI@qEc1WDeHbEJICZ;`8~9Sem)49JH^d$| zPG>HSk}w#@;)_WiX_dv-G_o2|`q``!P_4_A%(=2`7BxZ+Or7Z9@~LxY{L^%TqGq+C zZf*DJ^y}Z0vvUfp{+|I$)=lxZow=vL4B4)YUT&1oq`b3y7A%fp{aw$r%a z#`3Ow^2Xl|eTm@G&YS)%XeoVLYhIDd{6*#yy0w$=m-LT#g6!|1buvvGXAy&auYr7C z8|(buZT|XijIJB#PEIE@#4v5We}VINEAbb2qo<_%(`snZGCm3N(}lNYwU6$HUy7gN zM)}g(H0f(Wo9Wl^^NjD0B5F3i&OGQ<{IvSAVrx0R?%W%SpKE=8Ev4^lZY;*nBg-v1 z-q-!~Mdlp3Gn3!zz8|^mq7Z0Nhoz0Pfe4B|xi-$4vhryt@BHNIIGKuupY4>l8p=g8 zVf}PzhOJ4NX0LDY+r;nuw9k+VBR`ekIhrQg)oLnYi8P{GqPnzh+RVY0;u==_j>!vR z5B&Pb2T191)cm@d2ND4zrLh#Cj-RwvmDcfnD5-MHI@Uc%mX{}+v4-5c}~Mg8F&;t+CoAzQ$9~7ioh$u@!%YgPo5qN zR;KZ=8mz*775GK42Bhg~>r>*JAQ?$~8)P*!@e`0~bK-fBh55wqK+=);Bgl$+;vje} z*qZcR2TJ1!T{Q72a3RCaUi_&7*H?8ayMt+2a8D)P7U+SjMkCeWmZ|0)(kD{m} zciMYL1kO$)M)v5*9-Anmd*5_Mk2FTNbRXT)eH8XRM5!j(r!vusU$v`Y=~m1SST)iG zQ(H~~l8Sa~`5b40Z)=bZFQxee&0`j&om6?}G)YNEl@74g@qjrrCrMQ`Ff~k`<%?hW z3RFZ@lvlD3sc(nvehJPwM%$D6cIbrE(G|ECr@5a>bMN-uf$G`M(*mO5rB^lT{#Ba0 zBP}F)|3cp##J42v{?F6g!P;z)-YPXcuD~t*ZMuT^cBI|!?5}PF{+Fh?pGkA?_1!^y z)6~_tg77~|a}Sibi`>5}&Hb$J4&v*iAv5BCTAKU*h}*=hX}L^(32^;NGNFWDmS0-* z--PIh6Pw_*YPNL*E0R1rLCK2j2(#k@vrW!$8uW7!NWACoTv74px9ndJ|WH zjLC^Lpftk%0L%iVDewre6)h$kjDc;z_FxWpDk#mc<3VYL{R+sz$;3B6G=V0*4WivF zu?{>M{0Z0r+zcKIegNi!N7JG>dYQNwJRY0?GB-#}0Xu@_;E7-zcoO(+knf*~-QX$U zyC8FjL@Qbzo4^w>@YCRl;OXG0Aidf&<$eY{5BHg%Y<_+gYyg>)C+-J72fhKG1^xx> z0v-UFV<-L&vb8)Bqs5*Bo(P@`7J{reCuW0%pf=xj1D^)FgD-*1Z4$46oEk~&0(*h) zfPKLO;Q3%%TJ{$}O&Tu%hk_S^^wjt(zM_B(2*KQqns)2bO}~UA_ztB)Dc57a*zK6%G&bDn){dAQ)OS->PO zAbfem?Zl+X$zgslc~#v?PM*n+_GcG!?u6=lE_gh6H8>ia4^9WK1uMYozz4tu;977Y z_yl+ZxCOikM232cz&F9gAhO6?0&1RL5B39Z0Y`xBLom6y47>_=BluU#bmCEP zIruF26>tmqRj>(M0qVQU?O+c1x&u4| zG$wunybQb-ECufaE5ZB0Z-Nhi>I=y9jQ%A#tFmgTf9)lGebVNF3ZwEq5A5DT{~8{4 zFvZ@?^+`Hd&_!BYq=}b~*LfWS0v%pzCtmxfgahMX4ScMA^+G z!$v=NWp(K+bd5zjU9uYn9n*C~`Pt?NOLn;(J}24bf^OMTm%D`e(G_$#=T3Gxjnle< zF1O2f2VG8fxpm1MyqB-?;}l3+RW7?7G{~1vIjkaz5?RilB?FCT%?Wdsn z8*SeD+l!$3+e@JO+s{GuxBmpy-?oA3Z@&Q5-;nLr-+l#-!2KFH72E-8z2Mg%eb)O8 zs5Ji;{1&(qd>Z^6sAKA{gMR_v0N(3BCh92JQ!c0=^5r0R9!+0v-T=2EGrz2L27) z3H}%OCir*o9q=EZwuF5E_6FH&lTe>)1E!CY4>2H4r0jxzd^zDeFiHmFq~>8g)B3T( zsQXI0b&nSMao_GXN-FB$Qk4GnNjkCGy82bniS_oi7T)C` zgF!9Yi!~M|d+~=1oa%h))_T!n)u7zz`CSuz_?0%?N_t!x9bJR*I@zrQagyxTfiy^V z>!1@SyLBLNWbj3)2}Dk1?ff}Y85^DQVr3@i_;33~9(3GMG+gwWXeu@>!qBEgcp@k*!g`0|ead7I@+dJ4x3mds z|Ae#&&jpLYo4^U+QjoBT72u`dec&W;2RH?M14N#gOqmLvNtF?2VhC6UN*nTYP{#7i3E5Jcne4~OWXlo z3rg->2d2xiACt}z)I}i6(&zk)4;ivdVKgQ^0;)^6D|OD#Vv?3f6?HS$Cy{09&QV#W z8Gj3cE07>j!4>rW|DGAYnW-12zA+8ypRO1JwLu6{z{gy`bhF^aGoJ z+z)F0!JOFUA8SC(KUkZv`Ny|F%|E^kYW_i6O2olO!Aaovz}X;UyUq94fnUb`AE4&@ zyqnm3{|6v*BJXjKxsUflQ1kr_pyb;V;8Em@yd^q=PlA2HjbMN9DR3b86A*dgZ34%D z&w!VJteKcB*bL6X{XBRz$Q&c_9q>g^{eU?}M&EiG{xI^`Qr}{(#lb@z!b@HXqw*%d zUa#;@YTv??T`3Ee*1;5iGuJ2SVCo_19jqM#v%6Ae2EjZ#+QEXkfa_qvJi*QHgT8B@ zru0g!L4Q(o&<_UmyFX)Y1M6d|N0~CM)mz?Q2pyKp!(O_p!yecQ|n** zLG`b{f@{I|K=rTp!7boHQ2p!gpvLxpfFFP#fPG0h>zs*;!6U#aU^Z9{wgs;NbHEkg zk)Xy{%tR-C2fk%NF3yubvdwZ;>CYV!u9l#Fc>ll!Efp;v(c<$wc>QBdkL% z^w?zo3VKtre`O9}>bJ=OOjBkp3y7mhwcJ534SLtzl)bK?H#v8*H)$TGE9gzgbGw4x zgq%%rKSO=#lK0Xm z7FZ2-1zE386oIwico0<|_6|K4{334Vo;Gj224p<<=7INs*Mf}a9+vcMY-4U}-w+mp zjGNvKAmgIW&?bHk-Uzm%-1!2Ppx=8pgE~#|MQ|Xv6r@bNdaw$-1tc!70bB$w1HS|| zf)9ewiC4hop!z3s;uiaSJL*MOC(@z*%=FgQs98tISVN2U`93Z5`FLq%p?m#4>=9M- zIwi|G3Tsm>ZQanSaC2gynPqD&QU9M9piBd?kS+%7J@%vI0Pj*J2R48jW1j#e2c8Bc z2Yv!d4r~G?2c82Z2R4I}1J8q!122M-13v>L2VMdt2eyKm!@dkk4)D%qa^OEf$$@R4 z|n zfU`QIC}NIXJbKUo?+jjAmsmE)mltj;8tAr>`I|dFi>K>9!qdpoIpv-_o-Qe97dw%g zkFeGj`K}FPU&kW$CUl#dy@Z>rr0}hV`1psW|yf&r6%D&F}0}t8$2?#DvVz=d@$`c zrG^T-^(h%rJhG%ad;6NZF{q?lb3vS`qGo~&9W{Pb$)M&UvpWM@yfdJ=JEUw-Nnx6S zra?-xHMf!hE#Dg0@~uJXEyG1fnaT83q{SHj(xQQ*MwCn#K6v~vlGu{vs+0XYk{zK< zs|f?fj+9}e!!~R6f0n6&ULDxMnh+oU|JZvQ_$rFCZG1yQh$qn`8Z1`Ss8LZ6&q+?c z05yCZzD)QIqDGUD1PKHZLxP~vMuV0Zu-KwiOI!58iY;xiMT?dyC@NaoqEbsOZLv+; zAZee}rb?gE`d-&PvvYPQCjx4p_x=6G{R8ywPu2bB)sTrmkm(&VQTI4EN8%hEXA^$7bz}FUoe%$G*A*)w-S15Pec`Wu`j0cz`UkOgLBjk) z==a_QiT2Xs63Whh;cFYupZ4I$OCF#7U+>?9XJdGf7I*fSs$aOhXZp&2j+*d|Z+$)a z@3K28_@5q0e`@q=C+%4qeDM2Azq5Eb`XQqKwPmNQ$sRE^XWL7IX1?&sguybmNalAq zV@H%tYplPqv2s!7_*!hinK@)xLEgn>SL3}-{mn}vQV(Bc5zi*b9D{ia4bSn z7z~Go2g{nVQ&ia}zE{z|efOh}9c6c)rbRW2sv4G;FZm>QYC`O}Y70z8MwDG$-?*@> zWO?QUtbD>-X<6l>%Eh&HwasM{CzMYeI|HBSEvhf$hcWewYpW{DFoLKj)>nNJ8LI>G zk@tK0s17r;vU4)&xG+2O(##t&FVB?cz$DZObmr1W<9TlbFvpbD&QU~a=P06pQ-{Bo z3CBJdafd~pX%h1!k4rc>6Ml1;XF=-TVg6OC6YO)j72s;Y_Rfr2b0SHQV z(B~Hva4y6nYfxNVq7lLZL>I~OO#o5AS!p;fYpJ*d%xL3F#sLm@hbKyQW@!{~?gir5 zd9rh#MgeC%5aXBZY|tp+d<&>vxFJtSPMMgiw1Kq}0yYlMZi4EI~Z{n>Eu8tz|)>xWr!v=VSm z(J0wD)o^DU?mWW{H(a*it}xsf!*LN!6}}mUyTNdC4Y$~EjfVS-;qEZpJ%;;&;l66P zM-2CE!+qCq&l>J|!~Mi?uN&^yhWoAI{%p8+4fij@^+OfW>8BCW&v0iO?mWW{H(a*i zt}xsf!%Z>V48z@ExVeT~Y`8|lea3Ki814bXtvB43WQ?C7_XjvfHG;tC3pvyoplm61 zt2DxLdMB%^$qpB{S9&#ut2JD+;g%cjPQ$es?mojkXt+lW_qgG97;cy0(lEuiNl_GlDv_8abi;W`b+y&LHQ3)UI#sNs^(E-HKc zL_p~cGTdOp@mm}n4Y%BIcN(tEaQ7MRLBnk^+*ZSJ+q`)a`eKceooN~c zoSy^bNl1UGQNZ~+dYE*P?0iF`fb*2$o-y1@hI`d;ZyN3`!~MZ|RGf{`cM1Jwjgp-$8U>v2Ie2FzAuZ4dJN9KN7kFOK2)hg#Zjj-!3^&AZVZ#*| zZk*vJ8g7>1<`}Nda1Dl=bspXsNa#0cl=$xS>H0YZYn?awp{IGsSv;y}=p< zoS{HZir!@!VGmKDr-YlRQNSq!`o3@#8U-A#sd&EFyICXbSPGOS+**xL_kk`D?i(5f zoacZp6z&C$u+JtCzQjPf{7R#M^H-oD!o9Ciz&ZI6`9cGF=^6!`i-0Z>y`dTfoH0N{ zg&VI?z_}i1m~fREq0bM*5&mT7HjM(#TA<;=t-PqkuCQ=t|Mc z)F|K-0u>2&xkmpxdyV2TK)xbPf*gR~N%#fuOVH=U$(o}KhO%?Qxq0~og`>xe9Tyot zVdA98R~45`nL2IyjG41aXJ0+%nrkl|o|$#o&Be?xJxXW`@ z3q8hfbbX(7y6)xk88x`>x>cW+$Ko({?sJFnZr`~ckw)@PsLwe zk#l9A4tSnJhvadp!k5iR;S^UOsU~`~M1Pe#NB{|kTo*N-6Nm(Wv%obp_fN2Kx>thk49Brx469|2XGk&ry1p28|FI1!%u zF0ZiS#jw$VhS-6w`fqIFRQaW@DBfVkp8vI9;sL`$N<7y3QLHYwI-+E3D!-rsT4CCe zQ&)$V#J*f%k}*vr6s}EN(Yy|w))A}XR+-f4Am*cX;4yVvkLgyQh<*2h@ZzsZH}Mpv zw7xjkI@D5b#b2W%u9c1iRJoPZRNb~ZKGL2zR8n6DLw}*C?1GkX;9N;uaaisVOoRs~l)Q*TwHAyQ zmSy5OD!52#C2)?4pm^4HRgd&_hLJxpOnbCQ`&x=m44l+|v_Isfeo<19?E}C=yN}X%-Txkt6Y?LB=nK9!mIuc+LQcga+MHgYM~4r0{SZ%Ap>tsCJ17 z!gGX3_#9;yS7{$cMADwb6IMjxuh=Cm{!vrnD|UEQ+yf{(Dtz>X`t(I43kuz5s}d8& zRi5KdHr8vP46F19!E@+Iyx~mvFcXq`v>*};^@gs;i(rU;Alq}!ObqN?N+kcM#q`?1D3ZQR~*MGik z6!el&!pYi(SP77e6|ukHOV_(6#2EFwlBpKf8G(Hw0x{jhvZLIHpG(a0NJxWNx*iVu zFYw7hdkKBM%vZ6gU0S=Ob}lw)n7ceP6dZw#D`d8^(yzi}hJ1mqLMdu>(bH2cay)lg(FSTRw@W2 zWBW1kRoPLwTQ$G35gU-yU=O-urxB({W`=r~L2nqfiW|sd&@doQ_f2$yKzM@!6b9me zMxs*ybcUc&K%W*=1cdhzxH=99Zwi1W0^$7tP%#kR1psk}LA(I~ngx_8Xbup^qp&|G zP?n$ypbG?X*TD+~%?G+jP#qA)V&S3z=wd-lK$i$w2E-w%MCUdjjM@RU09`6*CD3p| ztANl;!PV73=#K!c1!DV<=&S=mpAF~%pj<)gf${`x0LmA%5vV}WCLoO1z{O^u5rVb= zjTE#MXq2FBK$i>J4s?Z}9Y9wK+67c3XgAPkL3@D42-*uYR?t2mjIE$WY7lfA&`p9`fEop@1X?0!6;P9))j-XH)&eaRv<~QIK@R{e z6SN*^xu6X|w+Pw@bgQ6EK(`6n475Vf7NE}v+6wepLEC^@1Z@YpUC<7oI|S_lY8A8_ zXr-V%Kz9n-3v`#DeL$ZRv>#}dpaVc{f(`=REvN&iT~H^`YC&BP%+Tsf~Em|L(nXs zZwi_Nv{_IY(6AlByApNID_dAaqZQX$_>5pPV`jIEo;R>YKQ3POQ0*kiO zJU}w%aKhnzIXlFdKB<*FM!%&9PbW(e1#>@TGX&*@! z)9yjqJ*ey+JjD4_?IkH~C7tc1ovrUAwBhfH&cxKu4daDK=LcDmYzyMsB{SPI*rGX7 z0o)`=xpPPJNiRnZ&?IdiphkPifwqz(?WIX(&-k`T*Mj~J%Qcl1s3+LKG-*w7+CQdS zw)VTW_KSY${-imE*k#TzjN@nj41%3F+AqQnm*#$I*c&&m`dS190z6 zcvwuB^hlcF8qtZm$MtKEC`R_6&GJXLt9Nv}knC&51^#J5q>b%%jqMg=CA(2ce5qQR z_HsW7+>=o7v>B4B33dsH##r0m<=Wq+?C(Meh#9)>SfShDy56B&?~p3oZBoRatZo6& z$y$=3Qu)y4{z%qDy8tBF1z@}D*>>@)bUO-wKf+zGViox=r2Lv$aep^K((zUe8cNeP zF&5c|=FgX|ZW&Oe)mJCF7bHF`u1pz-##o!*>V}nN9oe!KWguqYx?=@yi|d*O4CLmc)vJ)i9E@7Kp&v>Utz1$q54LHe)uWke0x3g%IYipC( zD&2HKZNN!(5s1cEC+kMn{zhegBin!&fnyucD{vcJ#~YO64Iiluz~T$;eG9jl-c=j7 zUiL-~qp9y{eLk)Ye^>OJ_SwP(18}p^H#F&OSgi&prAt%HZXojfNPJ{HJ3HH=21|P6 zCaDY-!C+}mw7t{~$lvYkeZaNLZYZ+%Xne^7sHKOW@RfGA3>|t8O8T}OD|+40(0pk0 zdR2&ZZZOtKFc`gcCm21pK)s^3*0sCVL~pG`uO0mbH;MiArLSg)la{QTU+aplk*RmS z0n-cO9~KWxmG9N;uXaPiCkbTWYF7FF{^}>K&cfYi#-l&!22L04Rj%_@;=FWK+kLlT zJ%(QX>Zg^|uc>yE^>$kvx5U35XcF45~k89!;o z!1mIu@$A~+e%Wz%M*6B*{ksnzz~hM1bQZmtPe(C&(C~LRFU2$)SP^D-QFrOqpi8Gi zn}psco^rZcpAWW24#r11SEa#@6ySb`f7rTWH=a0<8YB)4L)m2xxYY%9d6&~PuD$f2 zNsol%P4gX0^BoLtdt?Wnj1Hnb%=xi|%KwZc<#*agEx&u|&tB!v-b3$5`Q3u@yLATo z0KW3O^#scA9$Iz#l!w+y`Q6g1{2sK+FXDL6O?VXNUG0%wt(^n><@Y0`c8SL)PwfY?Q0Sy3pjXpLcdkxPVTYU zasA>zcO8CSiu$>0O1h9uJu~Lh>lnoy#Z;b@VtN`_kxTRXX=@FhRXxQW4;84FK{OTZ zk^QSurn%2v{SI$$U2#ClyFB3Z^1!Xmh*e-k9x8RTK6SZ?$NF>zp9NW;kWTwo%^DpS z_2CCT9}a!eISnA8S-(zsaD4<84#7u@tynXx6Cxv1^pnr#aF3H2cJc4*ZSf zqy*j&wj!st%~+7+uTa}gphEepDOSe74Pk4q3U$D)PzUgw?4~>_)NYjj*3Oe3d^!Q*r zBO{%uYuLeASkj%?x-+q@WJ|OyXA6xUEN>BsxJ5*^#Pj}up5_5voy;u)6}hiEgPJV& zwcciNw;72?KMeMarPbIK=R!1J@g?23TiksIbyvk*>O9Pr*Yb~sJ5;4qpqX#Y*R9e0V}&JwSlKqK1^VJT;{d(u+HO5V=a&VGfF z?iCjzr5}7c1Hpg)??_T)SZine&`39`YU+0~ZjUeRXe;eF{1R$qd}(Luvy=aYYW(1{ zmr?&;sn33a@gDhVQ_#K7U8F|35}5>h~cr`rzLkqfPCRO?}5m3Q^}vqyL4TvA+b|5VOJh zB>S%wa{t%;S3CupVd#(5e+|g}|0DKacf|Sc{~x>mdK>D2bc|1P4Ih8URksduvy9Py zeHmp;^;HpS@!J+{aO9325ss-gG~$y02)x?!K25%iE8A(%+BGVuKXv zh&DL7AB)bJ>Dsy@*~fYXa_oMrl;4Tb`|XL{ZV$4JJIDwjeut{1{BFnXcE=2iC;7_n zjuW`u`k(4fk@CB}*X_2`zTI}B=j6HF?rSgIhbHuPeiGfXy#M6ZSC5R5hcM4g@VFau z|0Ch8Qi%7pcBVeq`r85V&+j}E-xk@+o9^XWL&yKeY?_wE~s*eW}_8ie~jr}af z*D@ckJo~$kSh5gr(ASh~pS~dAdG^<>v3rj_Rvq+r9`o2;i@qd8w{RN<7e+RXINs#& z_x}Ef%CVroUBui1$cT7s>q#;uf6jHeaY0of2p~K39Kr+-45yg6RRq^d*cp;c>1{< zv+y?eCMs&oBGT2mBZvkGJnC{o>Brqf`P%wJ zKY@AOH2Z6MzczI0k)|s?1z*sBq&}O}dMLQ?wfOkbgKeb;55EO<$yzkv$bx=&=LYp; zB%(wn^;u-~L5!O3Z7Vr=_yDlEkC$Q?=z!Cd{0s-YhL#>^E5+plNCtUET=-ftETlf0 zkv{VI6YroRtg&nTf9gA`j$3E`Q{O+dzNc}F^1~lM|5M*peNXv+t-ha)HiaKqC(5iz zF4UALvmtL0l#Q#`17*kzx(Y$dz;U6M44G?HC5SIss|CFdR3nI$hf7dkn>qaD0uUMU zY59CX{Fqw#I|)enI|Ybcz(i*z{wjaJ48+IwMCThoYylG;?#iItz6}(_FOgdzaa%N? z!}wc=iYbws7&xC1gl!9S2(W;=)*B3@^v(tPtms_`q(WK&#Kol&xjeOVuEdgy zy7H|=BA1YMW(e8> z)hcuKZlG(#-yZ^T03*@a1;m9N5}ltKy}tpeP{m_3DJXgYAf-1LNcmOn5%CCsZb5XfZts4Z7>j*j7W4Y0#d$}0I5)22UI0`bB$h;(c227 zLdB(UmA&0Y?+v5J4JnnC56sncJOe4;3V>9o>VWtxn&>P6;=&V&&S#9?Mj#ccCxAGx zl;~_TdaoM20J>f(RD*z&y>oz+y-R?Uzg!kdSt&JFZ!}l$0aBsb3#9!0AE0Fts{WY6 ztE^lFq`2!1_Z=V=f?t@coH49iT!QMPT#N!z+0ar7eCxBE+z5%3C_xC``-hTrr zdp$s{V(;%j%3eOE;>;0lGSF0I4``)uPXnoT?Rg;8uKgKEwGl^vriqL2DXza047vtL zg`f&ZgAl3f;5lE%v73nTF5lC@&0jW?uXwWx-RQR3* zQsH|B=x*`tIUp6jgFq^E-v?5ud+MpK+rdC#ad9qCyPyk!l-p@QDs|@rDc>4_l#82z zIGqCDNdPGqj{vFE{T`4?-RFT+>UIFBc)SOs?D69fWv@Tb8nG7uQuamzsnnfm&^#bj zPWJ)bBQ6dAsnq>FkV@SEZtJS0J{?H4{Fy*1P4j>%rQKKvq(b!>gW3)H3XlrvV?ZjT zn}I$r{yqVuLOL8XBb7ZaX{KCE0#Yuf0Id}lvw>7d%Yjr#Zvj%_y9?-E(Ywd!eaYzY zqZ;MMX+X-4Gl7&JnLu9)f&APAe9>T0_l1Qr0XS+ z^7ltTxngB6&^kds15&B+0g$ejpK@KC3#43J2y~yg7z(6ZOb62S5=hreAYCtkRHz;W zQX%*bkg~TG=zg*HG?22#CEQfWi67*amz#jTBznt%R0`bzq*CZHpnIi6d=Kbm(fc8g zDlcyUt(B`sfmB#h&v4PXKq^#2fmEo1Ko5wOTp$&y*+42yZv;|ldOMJE+YXc`F4h7) zD2U6yDYwr7sWkmLkaF=hkaF<{pohf8VIbuq{nKumo(H7TGz6s5bPkY;#{wW_uL(%m zTMop2HToq$%HC5zDotMjQgv{|nX+Xs^u_?GG`$K)rRmK;%f!mwo^Z~VcYu_Otw3KB7f%Bz7ry{fsn!FeT>J}2xrjdt-+PFQBp~Ht7?4V#JAjtU)zv^M z4Za1WO8c`wDrbHIq*C{7Amz3Ok6sUp+eJVsb(aFE)O`d~d7%5o==O4ENBbn-cF zm_G%i!aNx05wUzOkP7o}jov#(@4tcmOZ46cQXz0M-4LV!sq%agkjjP8Kq`f<0xA%< z(||S#Dg{!$tpHNFa37Fz@iidjVk6L_;^J{2<>D0}l?xp}%Eh07l#9OteO+7}0a7jo zpX;V%Balj~+kjMBeFaG6!nc7`E<6jQa^W=~l?$bK{CO;nb>Vs-l?L;GR4#l0NLgMF zq%7|TQn_&0pnn3XFb_E24RZ?6Cb66jq{93`9XZkktK-_TTBzj%r4<>hMnWhQo-7>sQK5D9&hPgRa)Hq|#) z-dN+fn@t5>1xSX0=M0A%pKH;b=Xn_cCHier`^1Fl?P=y!)1d2LKsP}A%W%#GDuu;F zNlQE3FTqtFZt~gb{uHi-taPUv#%~CI=eQ1?xbmg*bYj;XBbmAF5fdgIj>~5@HP%!v z!pFO6%cLT5dPOvHw0{!0VrFU$dS}V$j2w4PD<9o>V{z>gF8g1Yj>bTaE1?|SbT6n` z3OBCayjs~$<<*^#jL%(=%&XZ*F_l+DDzAvJJhi@>?EF?EEURm{qlS~Q=%h7~G?|5e zbUHrG@@84qL_*w4#N&*ZS(SsUOf~*^FstxPFS@KEEJT-DSw%P0xeUMa zn3QtF>5P(Wa?QCHm1J!=-fUu)9L2i}UzX7E5s*!=S3aX=NpoG3CtD_Zd}A1SFr1?V z;q%{kr-kPeA(428vIyDM7cU&-V_f_%f zhhF-1*XO?Z?bDLum)>{EOSk;#gRhS~>DKK-?mQ)>qW>e)fBUNqyM9@_e({`tef8mO z4{i9;+f&BA`S%y*40`Ug^ERG8aL{{?e&OclF8zVg!_?OlI+OXv7k zuX*DEcqB(rRsEud;kDIsniJwMl^T_%XkJZa)9_&M-nh6H#SE`*tf^{RT0;j2uoEBW zEwW<98D3p8xB14bnLIgYv{hBwM?fO3ZF1D%7~#->{z zy(p^AYdk~;zE?I?D#Gax86Q`IlC&P^$BXCgQx~#kPRPkAD9q-W=s23mVea{uFnX(g zCO6Y&@`l(FaYv#ekP=fDVeeOWf?}rJ(RZ_j5qF~{Jl0)u-|41 z4_ZuikoCrECp*+_GucOMCWnRD=PI0JGr4ItlQ+m_@-qzsFXS_RmW^oKufZ8x1jVSh z=Y+D1E6rpNvzeT*&4fqUOzt?F$t$**e0F}kG0iF95T1`IthShNkOO&Mop7khX0mUy znVgk26Xt-2&ra?-o5@>mGx-~BreL$p6mGSc+~9Vb3GK3(>^(MbhS{yLi}SZ^3qG^ZLrw#LyqSg+YA za|@XHMn~1bf}D-Uj%LE#FWVc7g52#klgFJ^d^-92Y^LC#%@lT7Okwbd&4dzgqx4!X z%uchJ9KHhc>4b;aOfL6%@#*9h*-SoqDt?`UIW|*R?PJ2hV6eevLbusW_9~mnS!Xlh z4K|az*=F*#*-ZW}ncV3Om4N!T<}l9X{q|ob57FNZob5If-eohndu%3epUvbSu$h7mnAUq`j3&p0`OgO`4 zatGT?UY5<|53`wqu+0>XvY71PIGYI-+f4Q>o5?A&nQ*nuTNnO*WH%o6Qug zw3))y7LyZPXEUMoHj};4W^y*$On9r!Yqs`=Qwwb)GHj}^IW(s!MOyM4j z$q(+cna}~7$?mY3oGzOQ_t;GCQJcw2z$7P?%eaX-ui>{Fzv#XDS2)|_W8T3TM}(p} z@8OICdQm1GPuLtIiZUFtIpAZ?0&~#ETmq)U$MA(%r;iyArpw370>hD|s9$^)*5hON z8j530Q5}wLFicTqC(g2bOefA5f~d~Pcor=7F*#r=e9UYx4L)W$m=+)NFqj8?%u8T6 zmJ;=gPog_~%>RJl$VpUZ0G^O``VsA`oIHwBH?d2_T61l(gkH>SFgvtmP{>TrgbFR53Vl&OvxsCwQnFoNYqrGB<)r@wM2kV21dZ zHDKl#rhF`xgT_+dtNaXB#hwV?=|Q|h9j;W(1xGcbw^`!Sor;ksvh3V~+bkwOyw+k0 zLz`?SXS<)t$;szrQ;%hgOmtgJekcJ|(xVd&6%MwT>`>5Va*J&yf0@PPgt)t_*K$G5 z12&Vp*=7oNTTEf-h|T1uVJfM|a&BHI%Vu&4Y$kt}%@np+On%O4o5|f^Gx^*f*6VwI z;XaEg2ywEjM<*}4FbOrz%jARx+e~hO&E!{GOgPkFF$IMyEv7K^fX(D?vzh!3Ka(E} zbz4kcI3d*+=KQ?8K{itmwwV0fIW|*RZ7~Je%lu41IDeDP6mGYe+|YiTDL85|dD%&6 zzAzW$TM$ee#!l~1MCV5zeg_ag%c4Zwj3UiDzf$sI3LUlc-&|DX&ud{U# z1*|SV+SSmQDgsL;je`%N?1J*~rBljtqIhh1wmz9Tang7OnMxC;&YD_2)_XF>doo&| zz}DFEkUo(pm%EqLnd?fOxdvy>lAzP0nb(wznOakD)-HWTMTJF$u{ERn_I-$wcO$nWdsGhHBx%O}i;M5aVf#}t=FqGzLvr%gn$ zQ-w!4ygD*z!bB7$*JbovoVusw*aW4V{k_HP@Rfh)9IKB_yPq^%v|D<&>V+nK7T$l42YigYG*hS6os?twdVrslo-dNMr z+_+eF?3lE;$#*`jsZn~d*x6%B&CM>HQM0tBaY@v#Xkj(pc#EbXqXp5T)Mkz*=&~0j z`XYV;T@gQ_3y{T1kHoL2_JAxx%GOjhH`X>SFRz+kQ?(FDT)(ikrYP)OX-&nGI{RUH zs7qRLO+!=3k{f3-Jz%!4CYH?r8WuEYD2W#{MTXGV`u9yTfs2lGQ- z5|=U9nU|NBnOTri7*g65f#SGC=UampRX&J5?S=Xd;GF?PDu`bKdfdJvkmh?<;h`=S(|4d}inO>48@i4zEuK|8Y0QZ8N@mU;J7dYR_?V2K@o6IWM$V@=aIOuZUY+w>vxDIHAIOT}C}`uGT3*VQhraZ*5_M=QHA zEXG5~RGNJkKjw*h(BFyp(eErx7UMCJ=OvH~&lE^Ij+bcN6Nw|;(C!fY&ho|)59B8n z$9N>=@yC(=+HvG`T!!TaNQS38MjVHM=h0UjZ^pH-m5+2oyY%yHZyc-YYAPE)xmeoy zNPq1(F4l3Zhh%sfV#E=7?XX;?;KzeymFN8Z1;2;LS#fmT(7$uMag638yN83FQ`2ZB z#^EWhePrb+D7f8>@AJW;zt%=N=3j!-cN2Y;;4u4e@3` zRzsq>aK;f%lAd#c_b+z>B4+<(b#G}k(Of|pIp{U zTUO-pf?>1s{@aK*L-GV9^ZvV#!y&&1$v8X-`8P;6-2i1HCCa|?emSn?S#^Roncl8O%YMuG z-gxRVKK+v^;=S%u^mn56+s&&tbR73VGCV(v5yz{+GynT4;}77P9Y@#AOkB(I#!;7X z6Gs}3aU44%kFRyJ+ct)aY2a*$J5^$RT0?*BeE%QBiDCH%B*SwwMjYKB_7%riWt(nj zHx<7NT?5`e*z%^DPofiMx8L;2j^jyjDvl>ZGCZk}c0Mw{d3ehnm^XraLR1bi;V! zb&7MbH=a6gPcWVzD}NalJKp1UyeC64jCl9jD}PS`&!eyWy%pCAta#H6)e0_+TYR2lvD%s2RVsxu&+Yf0dh@YLd|GdL26 z)k72)r#TrA#8bIq`)QVgd)U5Hk?~G(xf&WAJ8|@sDUo7a@%rf<{gQovoD%V@eNC!Xs_)@Xt-lA365=z(4!t{_2YUyB@(q+Ir#N`svzR-s5EQ_uJM<=qqhUG3U`mDR1k&vE_=eJ-lwj2%%nt+D>b#>z#R<1x^)By-5Jg1n2% zuC85NU4QeE%&TgfmXw8pWwnc|>Y6d`6bcRx4i6Ou!=d59vSvi0Oa_RD&;R&_s_OA^ zAX4S#Pu!wAhP`-R?TrZOM;K4@j-*vNS+jzfSv7MTun}}tO>ILa&%>ERGj9+AJPCEO zM4c4i>gAb8ZnhI_^RcaI`lTrH8-aQ693ZoSh?1oY5C!z-?BqCKNO7xx28s*Lh9OFp zSujKaCyX{oaRnL$9DY5+`_KSqn?}hFzdRuqa0a2NB}#Vq^@rj(W93ugV!cMm&IXMF zP9|y@uO>TL8U>vBK)e?Ya5z(+DB0PjQNYPSS6*?0GzvJyKpa>dAa4+fk{!VF?)e8df20Pq@AP)i*j@561cSHnsJk-txvf&`-{| zy*;7~CADST?mCLC|NiT6aegcp(4TJXtjV~Yd&o)1wuw)j@9)Kew&!EX@S|=0px1iv zoTnwoyRoV38^6VtYRPF(XiImu8*=?m5G$$AFt3Kb_S$c~F^qQus}{mm{=-3%$N$vV z-ew4PykUhPt@U8MGX2`y&#>wt@m_s{`yM6hK>GKFwZa2OV)Y$giqLPJhOWNyWWY0M zY~aPt-}duHAT=5RlYVgE4gY|hZ}(#ax?@BDi$f#tsqqY(r4NmP6&|_~tNsYka}@#6 zPl`uQb;qYZh1E?wo51RY$FT;sx_);_+NvZ=L-{9h8QuDBztr#d^D9`_=VAA?d2JpY za~o4+`li$G8CKNu_8Is77h);Lzi+7m zzNW0uz9`{+K^YI~_?9Zj)HXJZ9Q#ELA#gvHgOaw?qdw1~3~LfQ7*S?8&e$|YnNc`n zV-jVq!Wp|4QRW()vC)Y#wK!whQjGUSDel^cSDXrx^XtiD*}K%oGA;Y#CWJl*j=S&+ z;umGs;jF^PY{c1GAM+&64*HlEah8U5HfrZ*U>bbPAHi(!G4Fxd>tp)kEQp{*?VJv# z!pB?yrp3pE!EEp`6Ts~7F?cX`4*D2&xw{SHeTj^I4APM4;y<_o<^PpQB)(U&<>uj= zFKBUQhC}taJFHgQBr~RrWA!#5>fD?g1BUUAtVbQlaI4otm(c1Q@L+)40O(VD$SbO0 zMu$N48aRonMF$x;2cobLFY?{vSaTpkg$4ORQRW z>P5e%;rDe*kDW_o)km76@p;&r{;}t1%$tWv3|u>>eo4*8pQZ6PgeeO@_gD?U^k!P} z;DW3?=a0{#%*)HIaYon8DqI`D4zC<>Ram;Jsivf|sj+rhcJ-{r%Ee3SK;WM6Veh}w z^>mFQ7-^!LW#~ie)vsJ?IlAQPwRaK1wWw09apeX%7eP41xj`m<@WGjuWU!rMb<9)u zV7M#rWB+O#emu$?_1>r)k~g>tNN`-pv!wxYF65n%RgjEtHKd(}*MnzzxdF1%@O!vc zXr-a+hPTnAzS3}J6&LwB{`6ZyeSi81^$DdP!(4%%H~nr$dNA%QA(?(itCou)aT9N0 zRsS61Y)GVC3**`bX{XA?kuaqqh7kq7gEIXDh&Fi%Nz_vR4%>|nUW5!2lFr#x1@G)C3;Nh zGBu+J;XYkTDV4bFmr|;#Us8#JTA0q~RUU4^Rp-%y%W~^>i>SxARzNZib@=f>nQCGD zQ9oNaCbJEa9l56=$3vpWF6H+JkgIXN9r8zzKZHC8`7C56>^=v{ufcXeGA(yP+WC_N zo*g?k4ek8t#x;8$7u_&?36Ozk{xmdI`Wpt?jd6HhlD+`faJHm(v!F_P8k`s5CymE) z&fAv+)!K>i-`VaPu~BERGv_8X9$IR60h5M&(eABJRl zc0rzK9>ERfb4)PlfK$htN6F?&91=U)@O;Gl@w7y4{^*t{X8v4yD#OF$e=~m^yq97A z41i?*AU!010+7s~WJu;u3MBJ~@1U7Kr$91)_%53HgNF>spHm^3Kc_+3`Lh=MFzVvR z!>&Vk_lb20{rN*T4Bu+V6kq;$8a5h@am1=XCwuOzXycx6*y<)R%;%QW0Kcs<0P*~L9#Ah0m-~Z8!LHT1i2CCqao2|I%6RBL5_uF zogW8@^5H}v^C0;ycP``v$d!;2A=@A)Lo(m4g0#!R1Ie`iJS5W|^{`jkZw1d}a+As~`)}h~&}s+ihT++QU#dUt zJq@925lY@8X2JiMEny$oP}ut})>k%2o8_$ojAI3U-a3GVy(J$Whh!c21|;)gGbHoj zTaYUuzYTdGg#s+~0^MNUdzN_@P+1AFNcJ8CPNXb`Qp<0w;X$wo;SH zSUQ|>OoQY*)^x}Tkf%bHK%NHqImir1j#CbV+y(h5$X`Pag6x7k12PfzKMh$3c_t*E zQwKv{4v7uoT9}S!L)v+R`O26M5j!t)Brj<=#_>_|GDk9(q14&0GM7FuW2D|O`}sViHJYR%#>j1s z6{R8UJlwG&b*{#WcpZH&ISLU!ci#8|iju!fg9;$lfz`rb1$d+{)1?fO*URyC9j@pMx9^xeAhb-3ECVvqVOAXh^&uh&2_uh&8{ukVFq zUVj0Sb@z*qEQ9MHAA-COlKFB!|Ld|ylI5TDg zu<->NtY3zHep332z|)#4qj=V6%#Zr83A4P)8dO(azfgjtPGZiUHNi*M6@y17FqO6k zJ}kozMHS)b^OZeXNYuPtSi|ZIQ zYvcE7GneGQ_R_oAiKCuU^J}@L+9x+H79ENCpTsoVPkeUm|C94|eQ#Ai#*E#MI@LEb zD?3M~0cVFZFO|8#A9>cWF_n|;no`g3d_3Sh;xkbPHv(tjr{)n8sd>ai0omGFaTre% zy?|`7r?^`Uw^k#}U^QGP&;?={{Y62T7phUfdCYL%G~D+M_XET2HQYYKac%hv#d4EI zmF6 zDBy4%Wu@0`^y(7TH~g44tr6x;YZP$u2G9b3BQy#)tAU0Hw^pNolY(rz7#!yAYJ|DF z8U>tpfl|c9dm06tWhW^Y$C`CM>C!0R%!5PrbCR6}8evW@5M5wSu11&> z4yEB@g|k$MFehB2fb^h+ITkwbs#HHNz8D#jSvl~+ghFrhtkuTun*74ooS6J;Z)3JO%tVrCBOtaH?(VP26d~czGvhpVcoy!)#&))$ zod+?KTSzhFhA`d^Nz?<(U~cV7v19z#)N3PYtzAj)B8XX?j4)E-7uWan!5`5n~Ir465nxy}`sb#Odn|jUja8-gBT~opk zyz*}9oSl-!uf6?l>a{y08KOxUuagC;AZZgW`>+Y$jLov0ZeH{<8YA!B6qNKE+`1yk zX&$i+{S)WT9Zl!8vc+)vfA)+8vKx>3qmwbEEz)y%z{`;ys1r?Snh`xc(z@b^)0}_2*1KuFTUqZuT&1@=0mTgg$R&&blQ730@LI;X8E z>A;qjN26O>Vt+(tQRiP%=S0$`GYPYJ-of(}b>3cb#0_l9;m6w}vWKEO5&!?A>48MK zCej&A4;IEq$ML4eu#Zzd#-mgnNBKDJ(&sB5hgi&5M>2ZXcI0_X{y<+vDs|15U~Nt0 zAc|FIU&X47)$y9h0VzER9EIqn(FS`4Y32Bl2 zQc?xNF$%4>kRFXP_5Z8zE{dJL8PW9pu%yQB zt{*k2r3sVr5q_ANo%15@{U=s)_p_wzS0!ctp-HH@tt(P+XLwrf46hvX&ajW}_bK=L z4xI#7a*urNw5P545g0056{rFJC{VmwV~uUghQ9 zL-zx`9688S+%X~tTX)2@MezOE!I33Kn^PN0DbpX3(ev<2~NA{}T3 zx@E&;UFy?xH^E^o8P^}x8r8%#Bium6wMP!P@k=?hR4VTQ+`e*tEQUO_L%zUj?aDZ@ zT=LcDLu(LM$))_`&7~tuvLj3*G%AOup}a<8j+)(rFA1?%bdQ@StnAe3c2fsL*P3W! zkicZpNrc+p6(fGL`;1`Re1=2*XcMM`!2-Yz21D9sF^uV6-6E9x?nB$eeHywTG0Id- z_gzdNyc4JYU59Ut-Y-y}SfKC`=FyQQ87s=s^}r`~saNk{QCO=Jm0gu1(p5QvHgsfZ z#)@3*zMcA=$kBN8HSjHI>5=wkw6SRkx8tsna6h|Zyn)QYH>P4wj2(XF@Yebtw3T$DNFGn>kMgEIogaa76nUKqcQ6y~ z;a$sQ0?n#S_}-!AsJ@40<4=staPwo(i4|{E|5S1uIW*&hvqSa2mHVDUr;2+N@8ix6 zfAx4>vNI!g|37AS`is*S;GVa1WUY#tVPv0gVx~5J4}g^Aw}6!84}gYvJg<`Zs}!1^p68*&BcgqxATpm(n{Os6_P6 z1X6kD^)UJ_j^Y^i~_a&!Orly?cQ&(S0(ffzdI}epe#rJX`719YnDx}3g*NcnkKq{o40pgpd4Cj8JprHQ( zQt`#xg(aDb>zgvGYxs?GH7@gwMYV8?DywVM`6r?yAG}ze9WNIvobt6H=ek=q?eNF) zqc69Z!GTYw{RV3nH#9e8VnT0IeWU-1<22SRX|C(zqP7*X-Dp1B=C!R@LEscshU>U( zY5klN^rK1ib-w@K@U!JgmOw1PLD}N{xeLggKYsr1KVG@;1$P0N#T}Dt_mBAVX>BW< zCqKyl*;Q$$+;YXD+wR_U@RS>#9yj`qzt)W^T>R#fFD&{^#;2A{NPc_)Y|8QPTVRH3 zK&)}S5&6*;nAxvwoS9k5=2jo*3duolV;kjf$KcxzYp2n-!R+D8o5Kd@UShIB#eRdR$S4^M}@=XA@=K26GTSmnhQ> zrUAWyDDwfBG~C~!%qgl^!$WsDqRd`Qb}#1gUd*Ik%*#}BYRNp1aV5dJzCohLJ*Xybn`|bVt%=uiVg4qYDcs>_!okpfo5|_6ncNiQq{nhNCmY|v z_?a+g;rVp(ifyK#+G4`N7Q-N+oTq#xiVUB=-2-LJvl0)gD#{qDxg1NM{5@_zFeb+v z+7)&Du27xfihp^u?0M^vsH@*;SG?+Xg(?qMXb$Cg=k&^lqOSg-T~Pqc?h(B=R5S?%(R$TySU-HOq1#3nwmBf>ms{>A8MHjeVXRQzHK8=)_k14LU0^v z-kCbHYpP;d@~UJXOCjdwdtM7+W#RwI5@u=-J1m;hYhSv))-uAf%-%(g)SM}c)RU*m zy@ko)nbrn!ReZ$)Tf@19KtWflcLuBLR(5igGyfNaJ_5TYAFD;0dxEK2_Eg<;*Jx@`#?#lXLeE_+^V06)B})urKLc zmR*2p+R@`!E4zimg}Fgd=gMvwva;JL=zPAVTb)=dyM;Y1tEk0T*=+{~qqt*p7Ke^- z{1m^UK2~-cF;-N}AJOx)*SyexJIhyl>GfXO?eiF*IwgW#l$I%T{{wfK4tBTm?3~Uk zY+)-`V|pEaJfP-era@2knakq9jvPJs+YFsr{fNT*LQxua>9g!z0{%PD`GwZw{UnyX zA@Jx=&>8r7DB$SJ9-`q~2c3JgUSHwkIQs+8*~RWJ4s=yj_&j|o@}qEreNXG~oJWyU z)N3U>-odiJB$v&fqO_u3E7bAsIii=o~>=%v@&9{nAEoO)A^Q*ZWh=<&{cLodDF zEA4H7-eOCSg$PyWBdxTz3ic*{GAr$U>?QX8hOlJe=N^1JlZg|i4Ud~pnAtyLp8o~E z!}!@>=+g~#-h%vr>(Gg7s9mPo{F#-D8tQ7$;8x0aj+s!6ad^I8y%9#>T74Cs0$ua{ zz56Y)S%BeGe4WatfF}H~s(*c5eWQG!8sj5j#FPP;)_H1YVmx?@wkQ_dP_0n1(0_^UI@u1=OW0L zAkiMQybg&`0QvIx5=gGFFck7?NYw8ZzCpVb@@tSm$nQahAYX;dhWt4szEW;s+GA2d zuP;`wKxF5@52hlIZy-OtU;JYg2#nnOS8}2owoQeQ+xyN>$xPaI52(9Gtjsjam_QHd z&zz%iZ_e?n@ZEUNPfq2f_p9(~l*;7vO}Nhe1lh2s$lZ`FkV)vb+z!c+l{+BMf^3BhLav0&gS->6 z1oAFOj+1;2aw+60$nB7Akk3Qj4fzL1#JOb{@?i~R2=X4tJjk_>tYh~=+U@Wrgl8Di z+^v3gJDh^}+p8GT4cp<3kUw-CdfH*P0jAv;N31%_LdK@!#2R3Kr9BNcSf^Maq*A-J zf^|R_=cbU<*5CE6t*r8_pRS@>k78exQR{TEoz6s>xChgM<^Ej!I5UCAH<8XvpYK94 zQfN!1o!$yrjB}JhX{Rw#D(&?5A=yr2*1WXSnA<1q^fQoW!R8MjQFol}kZh-a2>A%) zbC7JOcR=oiL|JZm8*&$9H{^?u??JuZ7>AQwaa91>s1%L+XBvRzi-VL8XWp@n7QmymWjLz$QHZ>9$i zyPUlT&R$)NZkUd!PtLP3%9-342Gd&aBUT|hjvK>AE>V3fHrBgD@s42HR%uFQ#e##L zC@|hEQ)l3}PxHu6DO2x5G7XPFj)(j^B+JzQK;8w3_Ns+l$bUj^fkbQFvJ)Z>axYII z--L{ZJOtSv@(5%im@qHE54yl^Wg~uf+KQ$kC8Yd#+An=jU|PeTISI;$i3K!*FNs7)&?J&l1QT zCLyDJ`e*l z8722N#~!4=t7kf_4Rxxk$EDre7^$uvZ?;6h0D`S4z?<#tHikECx`56K#ZGAHG;5t8>p^vhcQ0ExG5EoeKPn<0}B zpJkAlkjo)aXPjFgu_6;^{Y?<*nxq)3XC13aVk=VwPgRq|_K;`MCW%d% zX@T7K#chGup7~oKcP&XcQ7sUgTsH!JwLmOW`|)!RrZ>yfApG`d@@eEH^I#_=^X_>_ zmZ=vY%OH0_E`od!@-fJlAio9qGUOj2Ux8$w^Hs?Hu>T`S_ILI`VjRW!F=QC>Cy-+y zUxQ@-=5@%MAm4!GGv?1AAA@`olFyDmhwOsf5BX=vUqJp9@|Tb-F9#s)GI%8#jsk>* z@#A5aLEeW)T4N`4!}yPcd?7{|#535{wN3L!*EP&nqha(Q#u2M59=k6@4fcifo#RF{ zg~{m*ei4528Y`=sFvT-Doqcl_n7Q?h)isTx#Ah-0Ay3_N-EkOo&t>`3R_A6*Lp7)O zeU-kkXu66aG0n2(28jC(_@3u(c5TI||g9f^A-5mntrlp1H zzk@c9!ANtSUyi)-o`2DE?yfwyOmoy@zOgJ1!w=&Sa%9A-vV0~a%QAM9l(LL50lAl+ z4arcR1Nm)8%)MxN5%OF}mZkF{c@Mn+@*LQ_5OONyMUZSKFNVZehI0wzqmV-(@r>#W zgZw?@rI3dqheKX~dszq){XhrrU|JSI=0c*abqXL+@0>!&=O9Nw?t>f&`A5i6kbi@` z0`fGBM_dUx5V8moww*DMaN~@HTnrh3d;}7+LR!8LIT>;<;&r4I)0qeB8mkXzxp!lX1+z5$ z2K~m$+b2#I1Y<4^zIeZfCh|YvH-J_ zR|IaEsvIeNHju;D>15}TC8k!~Y;oP>$mwQ%x;zJ|pvI<)5VN^*kxhCLTrLaADZ9Wt zU9L|54}0$dUqx~L|8GdRm_(CkM6_O_q9Q1UI|ypHgi9rYKmZjD0TKx0W-bs^^l(v# zA&S*1-YQn>rA5VlQPENhN);6~C@NaCQBjFtjfxeOw*U8MW_Qn?lY@fx_xpeUuh)My zyq|q`W_EV=nP+Ba_Ux?oc5T&F2RMlw*abYc5Kf!-QAWGp#>qmbs-o_fHt)FI4^I)=TZTE4HRYniP_V5un8m@xl;iGUF{3E;>{ts+`kHL>2 z?{t_IKd`@0C(?Wpo(-RZ)~P8660~9QIKC~ zn7Z>fFxdu2gJN-glJ ziCZg*Od}EF8QimNTMty1R4Z&E;iXOVFCIuV`?lVA|r2`wlU>bw?3UeZSu$3*WVZX zt>Z7+AA4~$NBCT{jT!6mX9A6xDXkbAU7sk^lF6uHkjdB%uu|8aT`NkNtRl5?R^gCA zsmEjX=aw5QjNy&FKEP;#dYkgEd#|~XA+B;FWutsv1ex-6CP5v$1j=vaL5O2|zX`}zby$bt1#zLKe zQGEo((fynYwf3>y;xrMLUooPTh3d=8wC>yJqMCx@@Ss-ka+Ga%!!*_XY{#zmuoRx8 zmOYy1DVeKIWfaDT83RQ#!|Zt-a%;-!jA!vTm)|NSrDY&h^XE^L$gOsil5CXgfldmw z_ey=bH)^omzcjzUq1&$qKZWBKDw;YR+O1GD9pCFJY6{JBfx6W?`5c}LGBeGks-vMO z#3-_Jo9fO>Q&V1I((wA~)IBBXjik*jH1XxVm32GwsZ6M+r1(>m2|bOdcki9GTc%N| z1LLVOyO}!eJ&w%fw2GzYYcEJQ8^n9;tts#Bc=fxPGkKeAL3a5I{`6}mS$QZA)88*N-U>?`=Hkl`pA}Va6i3goN5L0-aN zyjo*g0U4T_12YJOmz${iMM5kWb8*75dWPK=u!X zW8q;?eI34F8Y+NCLp}Q*18;-JLXD>!2e-its6Nl}umkx&0m>Fngwgihjtd!0UUVJW zqT2<=qWN84zA~0YblaiT*>wL(jUO}Cz%lb~iS0$p0J9XRpv0P>XCX8S z=Cv8`j#pMsomx<7SH_Z=DpE;)jqF|aokFkKZoYl1Y4YsHcDChxm7AHymgKIrS5Y>{ zv>2W@FVd-1spOeesfx;rW}6sm-Sg_CO5HQxS?21z$5uiYmCiOPsFBerigXUolba;9 z3`7Nq_Dj3TX4~(@+x<4C*mV59sN;4&e0)vRal0QrzS}+SjTW7bg=q8kXW>bM`_Jpu zN;W+;==@uv_TLZe+fI?5D>}KUDyHmBb#M@W`W1w>A=t8P@LZ_2XCzeHlLK?$d2lft z4OIuvhb!P1_(#aE`9mAvIQS;ag>9%aFduG)Q{dNdDpZ}E2IIJf0vHbqVG5iM&w(@GP*?=dg|ndEQz(JCuoNJOR#uU11H>dpC38Ja`#g1TTlRa2{lw!MPIh9PeBO zHC`2hJgYhL;mL3z90C_X{o?CtSO~9ym%+vGCb$H?25aG7SO?>{(@S9+cpdBruZIKR zGDz7wH^8Uijqq8>7n(y2@D}(kTn;~lw?g?JzT4cwr=5dgEaIM~^QTR1wtg!@Hq7%^ zGyBo+VJeQo^oK8neOmZE%z{g+3reessHu8#Q1UT0eB0qIeH)2TS?$`h8q95PU(l3F z-c5tCsPv+mR64n@QV%)Je@U~wGexc?%|4_N4#f-;X^HC?+B2$EIhEdUTG~ynb7}8X z^1FwExwNopY0G?N)r=k{rd*1jDZL<+=C}2%k!wff8a!_uUOGsLdCfH^?OtvYyCRsp zRV_kQWwKhMoaqWfeyH*pMARugzsf0ln2Z`TQEoJH(r!ZT+2nrxtZPC!&0iOc zEZKBCC#-_8>3D9MQ@I+?4eNSsfqRZvVa&ABs_wR=w8oXeKbw%}!G#vmC{WW46Tsf*e?FZ-d4Ik5jv>O^q=U(^k6-|Np$ z#O}RK_AZ~Qzmcx~8S0Yiz^gC?Qtv_|;AW`){A;ilz7Ex&$CH~?&fbLj-NRc@V>Dag zN$_o$2j79}ulxKVaEch|J4DNu} zLi|DKMz|9)zp5{|n=zcv;KS_y13m#ihwET7)Oh6=khw4COUPW7^A+3=s12*O!9>W|ro(q%LX9vPrgEPShKIuxI1(NXd3JZ&!#~0f z@UQSl_%%EV(#Ld;hTXWY8IbnOIUdp;IHy4TrPB#M1W$#Oxx-gxLTW3!K+fq5g8K5z zU^om8fm7jdxEPLr55sfeQ*b2wJIsM8*vEM=4f4&JPzD?ePlMxNUziK!FUP|#xc|TB znlo6;lWTxtJ@+)TzGP7ml^O-T-_Zl(3aO@f}3BfgDCJY>N-iY&t{r?Ndq@Cb5 zOC$3JjvPIFVBXl_BZiKnWRlZv^gZ;*yfN8ByftEe5p`(TnC$HRT0rJ_ZpA6w#sp_f zcFw5r*?EI=29C}fG;l0wk2)`J?3lrLv$knV&1pyGoi}RmsL>agdvp@9;<$l>#&FkI z`zLS0@Dby({X?yShX#!tIQU!~Ub{4nMpU!#OLu8XMLOQt5qfrB_ZBo1LFmTvTb#*qShT z{63Jz(#=DbN!8?`hupATuBM=(qO{D-L##z_bUs~AabEa}4qzc1|I$WGG^aFKA2Crk zz|TT)Ud%;u4rpB*J4U~bjN)Q{U}czO{en2gl#@&82o_;?%ffZ<+S& z{N3j-`qzMAzkleyBpzt@m~=L*8h6j5e}47t6CX_e-J@IYm|%WmLHaFM*qO(PQ{!5$ zu%mbLQsY{#uyYE&I5qCBnnUWlpE;_>n&&!TbCO^1 zKXplel%>-kLPuSz~P;S7L1*S7HSn^~X#q zSGZE5Q;g%+&ufz$H35jw`Y1 z50`wFNoA`mB{|z%$*$(3u?oAIkEBFr4IOU9AkVIp=&YasG)LOj+2u+}PO~c|I+a|` zAtuHgS4wp5Lo&0f&hK3*(OKu~Hu$=7E<&F?YU`|Zr6gyaDxgCRa*y9yrX76}5GCyHb*~$CVPD*BBNcC^6o2 zCGvN;jY0lg2`lk+<-YC;Ul;OqH~BiP(ldyZSr_RD`z_11&SY0&T_jgZbUsHSJLKRi zS7HsW4mL)TbGa)eI*WZ>ov*va*WK>x?)P{TK&NoOD5;^_el@gsHOaTosy5X*r=#2Aq6Mfw@UpK?oRr$IaU$@BDE%9}C__`Io z?p|8@Y|hKNX0F7#X0DXz%sa+@oi53l?@EczawNrI)g)I+befTdnp6fHYo#P7%aszH zXOP;P7|*#b@)C^-i$Q z-_%A|qBgoxqI1)UcGe-uS?)^2=xAe5D_kkj8GRB@a^{NeaHS+?g)1dGn~^RxSM-J} zQS(mr)iTmcDt`T+t>Zl*PZ9wMj9zV0`^?)Sd#VPE%@uY20pz3A&+@pbR`y7zqDZeO>@*LCb{zdTAC;7XLUDGu^C1=1R0+nRaR<$?4=uiOwJ-DiAebs4FEpk0ViS&^_f!iB1C&6$9NCS7IGJ zBn%#1vnwS!ZM!kcWOPZcl<1s@lwowIxKg5XHWFq|+(E9C=v;(^aihy~rTc{=A-SX-w9>`lz3J2KR$9$ILTiQ0FRw@y(=eFpR4Rh6%sQ%;uNV!y&+GZ~!5^Yc44Jp7$O+B6@gji+m4wx|`n7VgT}=NIMe zS_v~0ZHN9@xPb)|B3FdCDNY~w*B9ZRL~^eF@pU^QR)lEMy8?EBfTv9SA76wcaz!YO zVJ@7P9#@sczpbi%;>td+kaa%E@2@Pea8GED-yNdX*0=I5aIZO!n5~NKjJy zy;_F-F1<}^$Ikxsx!c`u&nJ6XOSa#m-yZx1Iya@Uj-dYM&g z*Auxg%a?S;_ql>Y%=nQDv+&|8@l(wWO63Oa?`@7;Yo(Y}>a+K-O3K>v>vPvpD*mc2 zEcml0u4)YbwyGM*zX?@C`L~@6VoyfZew*bctsAk)7X7BCy{)*L;gw2QDrQIElvFdD&sm#Nf3UgM?J1AsuCB{oRiC_!r(39;Y#asws9AB zbA7TyyKaK(Ah?Fz&K2#ouFe&FgP)Z&*3D~Im$QvCUD0aiqjkC4IM2$u><7$w8ciAG zv-HOL?^+XjVdHU6s?F-MQ6`+e?DbCmZUHP@yuY3gV^#GZE5C$R7it8py+B0lBuG?Qp^JdvB@ug%%D zq+Qcq(v`_nA7NHTX=YWLy6VQdc9$>eUNPC$RT7VE&)->2UJ|Njn$xi+A*XBm zWLtB(_3yKaqE|X8-uY~jZ8@kDHb#hg$_pH_b&;*7-98Jp7n&FUlX{Y%S#?QqwE zF)Lae;EHUK?(h@|mD$+H#Qc?jYwGe-D3=7auCsXl1$q`<%X$v{f z+8qAU8Cq*8u+kDvLaQgXn|IhuGT7{8kWhPfVm{$zm$W8Pc%cnNb603oIagElscX2z z-T&c)y7b)+Go(g)Y|7&-0o_$MW}>&R`&2p zuP%FwxB7~fBs2DUfGbQ!+G}rPF9)&?S){%GlZ%eNCr8@#W0JWzf7P$#Cbc!(k8nd~ z?ngv9hwn%D^4b|Far&YAaa79V#*1r36+Z!b6We#<1LfXZ9N71L z*sl9v%0J`h^e1mM<$oalBCS(Y6l4&04Z`8d}~oY@q5?60~Kf zQWeeJ%>Aa*bs#IcMix?A{Cj=Q7P=GL$JDbLX23tuvD-r7@9$+sme?b{9qez3M-)?& zes>+n3$Gip*(WQuhc`3kVuxi}1a~~O6F)n*eUCwH{Jv*;&nuPBTUid;fC1YpOA@Td)IHYYeh5mD$08% z9%VZoMaJ!$X=<=Go4c^TH#E|*=!ea=L;BMkONtC4+zG=OYz)>fxr%V6Il4RL@gMXo zTLZO=;DH5)Bc9ywEWh$S%eK1Qt;Vx#*r#WiTA#fI&(g3D&$4a|x7c+pb`fFYS{kBU z%O;FqW5Bg+h|k@#@XPpXv)3(YwR36H1#&LIif`_J-vhhk^XwU^m6C zCdIq{xnamw= z&V~2v@_~wy>@`m5Jp1fl6u2@Rup4sXg|4C*h6f&x{M4nq^_JHSff06lZ;7j5w`=aa00!F-F(sDf|YMxw~+- z&E&kns|@6D6YYQQCJy)mTFH6>^#`=t)d!v<<#4=uB*){+q~Obe$DaC}U49tOV0sV6 ze~i0Z*ZjjPQpe3u81s*twz?~NTHT6&<{Gy)6;dGk9QceG-wu4*_*pd zi*sLhzHXe~<4>*6UX6B*v67&6CE8Wz&%_SGTF+eK>9h0OK+J8k6HkjP`|t-hQr#o* zI$~mMZd3%!Fx*c~b*;6vpA@51@vM=p6Z#c4)g407_~kY;eyO#)+svC3RYV&ZYh>uP zc3k~--2DL*)&>>U23uGgnu_opyVnh8%2; zu9XXF6%luHW8Fv-)pttmyjX53@iEe-Hkwp4;5SZ7fTw1gwC$O_qq8=*t}_dShy9;D zIYW=;#ysQHjkGyiqnz0@Z~nlXm_*#1Wv^~=a9_Ee^-R2XW8E`no0Pq4j(3x86(i|z z+*$P|w7rbCj?Q=>?OD%waa(45W*e>Pu18qU zne4+_50iCbn&GLMo$s-JaO~yUc?L56?6kY7Ue=$D543XGG6>I}vUdb`cI~r+8q-fi z`n`KFeX8g4stPzjJ=*WD1B-Nk7m|=WhN@cIXlkuoSp2;9)Y^F8u~B%nL+YD%{>{7b zUfr>LLG`Y=uDV@aLYvxzG^1SqzJ7^p8aYE#{aTwq$%oV?TN83^oQiAitE}Q+6C}NT zZF)PSo3%0Ci*NVW`6p94);9%=&O14F@23>!rqntjCC=vNI-HQ3A!DA+fg6_4Zf3k4 z0P%-iX(%IH|2A$357)JkUWYbb*JO+0HK(q6TU|oC+JyFA0h*lII&K50oMHyDc`^xY z{va|)psWKYi;o@1`oU(moLVVRdaK&>L%f`r15B8VYu)S?cx#18POD9B6E>FIMljmG_2pG;k{S7?eSA<@0%?iH$lE=Z<;Ca$;U`V8}V zw$SQwJ1CLxLh9b|qV<2HnZNFM04=$F;;^@LTT^$_?de#Tn^Bu~V5Sl27C*(CnGUn} zI9AbByGQ%G$LZozQ_jflFq<;zoSlw%^lTe?oK5S$O{isFGIuxiqknGdyd=#Gu8X4&zLPd+cdZ5u ziN3Bbdm~ecOjFn8Y*@HHu76JY6=Z<7N6A3$riC9cZODx7M&>Y?z99_5jkuR~W>BD+ zgqRnq)6nCtx}0^Myu-MlX2K{y`jXn*?ez6{7^>GS?7F(-1+_ViPo;8-F1dU4O9-b+ z_MVhSr~|v|4%V4p-*J-02~j<1j^^yCTc7d>vlrDn+yMWW|FI46TzrF@0wba1uzGup z5KR5rgN-o`uK%=MZSJc7UD;XvzbiY8@^<7wb`1|`t9f!; z+3L5eNyg7b0t|V0bw#xc>FaHdFmH`x&l&du_Ky)o(BMug9xgOn$4Wep{&REvnx(Q~ela-)gEKGY4BDs-IUm zTw~dt^2m!kTH99@QXWrbw>D>^TRS+Y`r90z(_r6gNO|NL<|e|mPZJZ=?B@F9YvXz6 zz`Xll!far=fXKna!6eq=9pbY$#AmOI&t7}${0~$uH%JN*BuaR{o@084Kl5!N9mD1pS?>mKF`dHZ`BUH-<++OL2b@f z23~R7DfN7I&qO9sP3%^`%nE-Jv&j1}uw9S@bUZ?p(Xl z+-=fSYhcp+i$d#$5_-N40`A5Et*7~J$N z@1S6qTmyNal3AIzQy5_CpSvez(F#)pdRNE1%4BPw=D#Vhd7}wMkIh^%<8G-5H>iNO zm_+PF8SR2PWuM0h8Zs1V2}{hRS2$kw7HMzTd6$~59LC8~6Xx5LG&yGWmzgvW(?~@b zme$52uUpk+&Dq5invv6C;4eK1J*_~+~*!Fl=WRhOOjWuoV zmnoNQ{4(Xj^~ydic`yV1!(+k?;ps?571f>aO7zq~6t6@t(A+0i?3ZX-!h)U8afuAq zsHm=`qvr-O}L0V7KYgY8KcmNc_0QqXu9Qr-BV0o6{lgW}C9!AQ zV=GOZePEA;%e36*0BYDABDU&vGYOmB}2gytHf|`Ga zZEywAWhHZ2#86grRmt<4y2@Zr;4=bvorRzBn%Z7f;k^rYsQebr+v}t(y~|u5S!?8g zdCs}EfATdcix!{{S7g(htIgd_Riaep%^<&uVf$IwsZJfXK>BSwFJV}Or%;xeB3JS> zKBnHk}KtFsd4%)ri#AF^r-{X!oFPjvA(|&)I}_gGnJg zcxxw78%zpet@kQh&NkBs?5b7!#H*o=`~L>`y}Gb_?S-y(zk2$g((_mI8 zg%vi16;11Dcg+M$;=*|yoRmdoqC97Jd``M~R@xh%+rd8W#Pc++$EYpwJVWPf!8ga} zrq>#89iQDnFTAKHMJ($49uo^^Kp%)$w0fINtW7*%nOJo4wwqYnxg9wj=ty^|oMf3D+7bKtHRi?Lp^Ll2Ufdl`+i4qjrctLEtoIsjy^Wl^w@Ys0mnof}@mgrS zN0;oaXx4ceH+bsX7vm&4>%#YT$)RcM`~p|rMV*4qui@nAUGD9Y-N;_US1Fggh?_I5 z#ahK7Oe*gPcim{F3VTIO75-??s40ouhtrVn}Zig53IAoq~@&i zFVgcG``ZpToot@ry>wb!q^@IA@H+flU(BbSH4B-&Oy0U9_Xo?_;SD0Ex(AoqgXYai zf9fnXoN;?Xd#`f2Ym>NM-Nv+><@_q3OD-LP&d<;x>7tgeGdJK8bAN9#XTHfKZp7to zCj4_SCB{hdE~mQJ0T;<(=DEt`>4Iz$jvT_O&0eJJlbs8)$w0)xjkP&TG)>7}T%sw( zF4>EyQvOsQg`xrrrA)wW@ToAHXFQrFX1#(nVXl@*L9;oK2U+|) zjh|$n%)d28;#X@<8Gq@{1pciux_th%;R=!F8r>}Zwc&0-vf=JVvf=JSx{SXz&L8;K zhSPI}4fhF>4X4ML%lT_#ejaYarEynvo^&ng>Bi`eWMlL}y28X5fMjFnQ;0T(KD=hn zp-)NJ82S+CJQG8oy|*z|A`Ld@(9g#E8%a-h{Y(rP5#<8SPtxw)F-hnw$*y9Q~Y30LQbd%_R5-VgU2(jpV?B|n@# zU1dw7Ek91M=S@bs+Jw^wiEL?fLn=g*%)^s z*%-e?T5Mw6k7Q#!k958{$9AMMjr0xDR3o)%=N&x;X`0b>MLN$&XZc4LAY~cdT}Wpe z>0zW%MtaJZK0&g%`T|MMT5X(vA}uk}_eeHZr|_u&8?GCY4c8l~)`aViWW!yAWOHAI zWbJ-2lFj|i{?Uh!Z0?^%vblfRKY9oiYoN*LDM;rSsW+0%{UBeOj%0InDbgV(FSC)Z zHPYosHdpr}*>H~{*>H~|)tPXA^22@Nhx@`0_fMpyCfxUaxL;6V>{WJ0vMCQhvMCQl zsy8u)BH0`iB3V0_hh$?cMzS%MB3)-<+<;_bJc?vvY(%m#UPH1m-a@+G#Mp*pW5i)p zgVCisha=fiI|<49oC!!am3*WW6Soj)nUQ88*;H;pvOeMwBpc&NBpc&tq#I0(XOV1- z&;4-U`r-bKq&M~2IPn;Z4R<1v^#|RNtUnltltZ|5XB?9CC6keCxH2Rg?oFhjCR{QF zFw96@kj5J6Y@|FRjYqPUGYe_5(ak{`Wu%3^^aPTBd% zm*RzMgLIP#mxN@)^+B@f4Mei(4MqC333o118B)443&~o}0wfz_DUywG1JcbV#?44& zCdT7P)(&1qvN7I5vN5(HseNqYypL37V#IOC#^``#W9Um>HpVGnxruQal8tdblC_*d zBwK#7k*ww1k7QGM6e-QbeH`glBmD`{YfSxQ%-#l8t)=xXr{p8p*~T zj%34)LE?X|Xacz1NRyCkxGRvXZPX!I+qexWhj8i6!${VKp7O)#yS_GD=AoVqO-CAT zV%(49UKHtzFCcbTKFBH6fGk!;)# zkv5v6-y{9iNU7;wDjkq)D#swLFh@^9>S?5|NH&$BNL5BR8p+1UMY`MQE=00dc@0vP z(Je!=;eL(uTcf)T$%b2pGzne0^D2_f-@Cr_6;hEo+UjucXsR!rjAW0VgJfH^3z0^e z7$r!ytn|?o+XuN0X^Y9h9Z1$TRwGR@F<$qNeuz|U!hM5ukvZD7y%+ZgBzv?Al0AAB zlD&@cNLePvETqXsnu|2fNLM3`GSUscbf+&p=u3|w6_{}Aed#Tv_2}rmB2^jbdn9fr zI_C(-xyMMYkxG%$oo+}rTz@1RE(_^i6E52icc~xlaz9)M>31gF)qc49kop?kdL*0j zOGq~52BiDU(KnE64%&9$;{xc?onw5dhc8{=OIP~Ry}tAUQeTtaKalL%_8{4_{R`=S zbF|fw-q|XUtPQ>DOP!ALbXWV*`@VGcFTA5;kVcrCUXIkyq`VZV-01E{vSt4ml0C;W zzVxauH6huYeub27QrUy_fRX-%WXq-d(O$R#NH*L+qz6s7p-48|RYj6+sVqFzD~;ty zHtq@}8~1let4-X8kZjz?k!;-ekX|uI|AVyANC%zf)sObRbfPcKM6&0oLc%#vrgM=V zGt!kvwzc}bA8xfD?n$J_O}MB1aG(0&cKhMJMS8-7`?nwN*wekfSuZ4;gL9B<4u&AD zF)>CU*&Gxh6{1UbLP$2owMaI`^+->e7&jr=7*8Y3Ffq3H(x<-UboGw5_odT(=>jBs zj;ToY95axfGUq5kvgf$n5BEDi-0zY8WWqh-hr9R;K3s3|QiEhuUVvm%UW~NX#8`?{ zX2R)1L!*uKccgAc>YwSw9gJk-4oCX4i8~spr;#o|vKH|xBpY|VFJ+*xIp~CBQ#l>! zX%n{>l1)XQ60)hxLE?YP{uWSdq}50zM(Tjk&oUC9YIRfYk7QHMLi!6w+c?9KY|7^& z*_6wWtOs7|ODmCPn)LpR^p=U+fMn0M-Pe7CWb<-d50(QkG0sG?*ER^r=3p4oI+MyM zB%6bYNHzzBNavZj)kvd^G~bt)0+S&+7eAZ8zm@#8aU^}sAI{3(cqES4^x^w>Gz$9# ze~b7V6t$R#;wVfz{*qGp$7}=h?3Zx!%;!Dx%K6f0RbgIPc~wzasa+7#3mM6b1&8u+ zspK>qw!7txvXRDCl~v?VFL1n%kz)w{raUa;PxG0&b!! zC7E8Ibcv>KtFlQly&y@6&IUi6{E!VtX~z7ZLEZ3#^XtOzdUUw>*>pEfx*0p|#a`@k z@5~WxUhzejyZlr1A}Wfb>+8hdab83xE^l_BTiAA?0glGlRLoksM+K8cDd#&qHATDSWCW!}Jw=_B1@G0OR`y<94Rt-&KxLyhfA(HUviC|-qVt}6G|BnEl@iV8gKfCIzK(mv#7=#- zeww7I45r1RzCmGLiBSaRFZXD`n?9a7ak?@4=qe%;P^sxpn{HJbNI{q?@>_U%R25Mi zg~0+$Cx!~PlM;OuWQnpv^p+VWN()wd%GkhniapSZigF=ZxI&N zRA!WxRb@;oC@d;1n8pDuVi8L>Ejk?Q*=S9)48E~jR$NwL<4rBAF0C>lbunf^jErbq zjC0PO8ku@@+SB;x@eC8B+i4lyPs`|eT1MZDvWkpu*xLWrYxp_&GI2|)E2}c56lC=1 zo-w7o{AZPKtn{MG{J)mpz9zf>z5KfA?N@$1+nUM;;>!!B$wu7blQ}vQ@+(UD-ZnOy zaZ=@(8C>#oV^!u9{WGd7b?_9kQ1~esRTcTAmF4*rEE$uLul33kqvLyKY9e^i`NVWa zr^4#u;<>>TPF4FD9p8p3E6-hQ@?g*wF~UXnkpfJd~8iY^Z9I)p8XK6g}fmcfk-5xsvhE+aAolNR|c9nSuS z%a2OT=0EJrvMVaE0QYX2<;hG0U7)!i5yy4&tBdn1GH7utifR<#$BzH3I-|>u_Kmu~ zQM$R^GR`_HV{Q+g+qM3U-6=m_ey^K2`d}>*Sb8g{5dU(Hz% zcUt4f?awA&{mz&>Uwx_Jj;_ZHdh*VkOyD9!H~IOE{gk(CmrOw4s3Y)z5I4o@g>7G-J`| zC4_JotwA(8LZb=)aS@tdqnQ|?xfhLIVF;)5M>LZoH0#k!i_pA^W=4eO?`VpBP1mY| znyQW^rCgTNn!otC>*+;($MLy0Kc-v877U|)VSJn_I6<6gV^&;htt@DDZB3Zn{3}UY z8MKvjK*{%1=Bgmgwg9AUOMesq@$d~$Eo9|{8T4g^3Rs(B$+U$ z5kOa{EzwAM*mo(9;daa5{CS1>Qz|`$BaJq_W}&T(uSvFsZnXB`i7hmPTunO@E6?lo z6DQG6XH<(=7q`$9xti8~EUl^A7^kc8a<~jl2Dc`x`3;%|3OTHK5Y1?cE38?ICW{Vy zShESuibH~$_s}fk*(Dt2GieSDY7#KXhW0_tQE2o9_HeAz6^4=8ux2otb;kuYV-zbR zs3}8}(J`p0Lz8uKP_rD(=+lB4))RI&uY9yhmfbu}LkrD^Ei|7+X!2;M2A7r3jZEj; zh%h?V#xpYi?sRCOIkAPtzI?CvUJm=U2s5IEhSewC&5Jdqg@zR%qr%K@p<%Ves4(}o z&^*~f!}@Mfu~=y>O2e9GQ5se|i_)-OS(N6C7MinLXnxs3GoghhzlEl_h32vrn%Wkc z8(U~rw9q`%Li6VqnwMK>cA$wj)@z@^9p`&A(R4c-=3097*Eq%ZFhvGuNs1&reCJU3L-S!M@DOU zPL9y@%Iw{LuWmj1rABFb zcIz0W>C>Zcw5Hd{NKNxh9^J-YYEh}QH{-z6eUpW)G(ev_g!J-U@gY5MeG zST7=-KK+(QY5I0s8L8>nqqo-H37oxWkG>62nx2_jfi)PWXOB!;qX7}k$@Lc`+q(*D{9UZCZ)xFng(V9M4QJS8;Mn`FScbgok>7ChK z1AKwA_s;COC`!|-x7xyBm|lHXMr!(W@4GHa(<4)DVIWqY9z7bPHT~p{f?;}g&xq9Y z?b$agO4BQoRg#0T`u6J1I>nKip8C;bAmzTjdM}IC^i^vV4AVPvRkWs;e!LkGrq8Bm zO+Qxtj0n@GTLOMD7^_cj^`oo?2V&M}618D`Y?nuR+Q3uN!5oc`^E|Z)?8f0GR5zBw zv~q&aR&=+BMS+`b_G2H_duQS$BsZ4AM8--%6F%4G_d4td$9l+(r7)4PGzcAz725R9 zZ^Nc&!-$XIC+v8K+s?ZI%YcimVD6B&yxV&Gg8KfdU!aICN0SPByv>o5~bdC>N0 z`~2I&u?}{NR$+)Wb;hhpmUz^r7Arn(g~W)hCo#_P7Glpjr`tK_(229Fb&Rzuc(5=> zR#v~Pem@fI2gCeW8b21*9BgAn9CFRAws<^Dwh8t4AB9mov z%?XATR1MJ_mcLU}QczlHCgOD}4v%GuN8;G9h;~AGu@}XZyw<&SBMi}qpya{D6vDt_ z8<6Oc;=qb2Ma*PW*nDuwFDDX`~cB9v8t$Cc&eS5390Vowoqm4nMlXBSjd zjVtR*!d3a<0>!}=R1MZ#qdCBi%z+?CBV2Kurf&+FKR1~glV4d?P*GMsVzk*EOTDpo zY53R~vLUM;@9$I;R8?1$nz8W_I!j=GbXA3um6umpFtxg(sA_KB)ENa+XXQ;TE1OkR zkk!-aIFC}{zWZ9EtX6}p58QuH#%*+UH-Fo-v*{f$}pKg7^I!WC!Gkf>$osrSEN1yJ! z%%RDNBjeJXhmJ1Ezv=im=R%&rv<1iPwV%nKo^>L&#MFq9PaRu1gB9rsw_I;0v2`WA zEGKnPaO__CY5JQZDZH6*fu5<3Y$C0VEy87H1xIBS?i3Qd=`vmd)4LXIddkRfMo*3o zr;*nWlj5Au_|v9;Gg1i`n17IdH-Fy{W@oYur>1jN;j4-zx^26ydgyOtQm{fh`noa-4N>Ag$M-gVI1_Ri5M6me_jG;(hL#MRH4WoT+ zSx)AjF@wWCH3Id5Q2_Sh3Lbe&)DcP)P- z9SooCC#)!KtYuREwEXfa8k(+UQ)cpWxdCZThDQAl<0asU)p~W@GN)*2MOkH8VO2(_ zF{fte4Y87<%QSzk)_^scE679in>+0(5z@Pp-12*_!xW{?t-sCRnJ$U%DMqY-@jpm)28!i)BR&;#_{gouaVD+x_^qJFxmX| z^eLTQ#GipmK(>;tV%JiC*qfFH4m~g=Fk~y6jr7wW$b9x+P_0RWoXg?z9Nq zTx0(`BJBS`zW^fazd3CGCFXp)0*VTw+2E$bGf&}kllN_bFw=`npg=t;v4I)`fhueu zy^!Ztwvs6(+V+5^$W%zxTE9Z7ptgn;B~yybyOwTy>m1EB>D|lL+EHqLJ9n>NP5L$arHpz2~4RGl9PRp$r6d^i~14u`<|VK#gp z4uzk=VelBz91hQbjHZY5={pu93lY{i59Y#AumFyRv*7vgcaVAVkjBXg6M7tuhku3> z;QNqS^Ux>o0(b=1L_aLl8D0#t;U(}~m;=oCdK2eW*p{>#;1O^$R9$}!Qa_zHAob6A6V8BdLCuS8h1jF> zHY5+uJMeFiKU1f-!NaL*te_amgpF_jq`rqVNA&^Bf!pC^_z~1B)F<#}xC8zcHo=GC zr|>Db6YhrpfciYp=TINZXomgZ7m&A|oiE{45MLPjE&K*P4EMmN;I~k9_&cbNV|)+w z=EPq3Df|y?hWOaf3EYP`*d6lWkdW$0JdCb;@+}>SvadED|Kwyv)jh@0{rnL2@vXUK z-P4HFzzY5`^-pJsvF%^|Q{(Q{Kew&-E1qrZy=oU|>%HbbqOH#$52}o|daA8g#!L+k zwDpng|6Efc)&AF$iE=u4wkkjEUwlMW4z|-KrrL6y!B$+grhlMVwW&2V6-oVJ$5l#H z8LJ*0!{2Tx*sw`ck9tGZqdrjeh)=(SMnU>#p+d;#5ko6rf4B-_!y)>A&RH;ybDRzP z!*k#;m<93g&OlfX`GAaR>jp#WnllViryS})2%C3Cz^~yip}GaMbD<cZjCtCh4CyQ}w*9kDJ$va)t_PoPdZXzmbld;m=$xuso5{I7gS9P)O3~BUhrhl7 z%@p$x7sIHPSkS0#Vp}4tT492HPn&$O5u0NAkxz2NwE32g-(xq^RqK%MpKSj`{yMt) z5VoOvsvqyDsxO9PAn!DWN?$rKE`@s_pExqlfY-qhq`eH&{yzQ7>}*ehYKABZ-+-h`f?$?gLxNR2=9h^yOQ=GgzVe{ zAA-DJ8F~`_4mQIF;K5w)gRnFFJsbxA0LQ|WFb@(pq%Jn?N=SD72#l^P^GHw5Oy#33 zx~`;=|LiDVt~e^!xv<|4)D_>ChdWe1%c1||4wdXoj@>h3>xtLKNBF_V*f;?|mH(h4j&l@5P^)zRa8Odh~C>6>uwj2fht8j`a@g!hQG~ z>;tz!`s@zx%ZBE_Mz|Q_7elwe58(X}{}_4*Zin@W!|JMP^ z{~ZbC|Biz4f4_k8e@DX<(mDpp{~ZhE|Bi$5fAmK~zlOYFY@UBR!pGP@3DQq@PKNS} zr$Dv&_^QyU@H9w2!#N$&PjI?I`N1<_9?XR58~1?tET<>j2zhojZGUfwZ90A6x3Dj4 z&GpkS4jJ2m(e|qM5?AY*_|rCvd?h*w{Ab6C?k#~RJFK2TPNNA;N}J|3yfYZl)#%M6_N&RErV?D$XjEBbxKgu$ zb4_n#sTXUS>61=&cjuHB6GzEsr$klFf($}EJEX*$PO>_ixFQ_=;&d0 zg_o|`yTjd^VV;%mWzX#)*{b!feUtU~k!Z)~zQahUH4HV2Ww{;u`y&RB$ENYV%zQ)|K zZSHPmb%`0=-01EXPUjJ&fOF{LN21Ik+r|`Z#%oY{_i>uZS)iY0ANDs8#4oZ+Q_9V5 z>ef1{+%!}^_9kr&M=3O2y+^2*+PopdLNyrfzC54$eW}z{Z&MwW-^=4K!PQ?x{a3v$ zgff=t@Rx7~91Ho~LTDzO3GapUkwU9sG5iOluM}!cK1v~DicT3k7nZ}TA$`rz4X^^P zhn4VkSOXa!aOOgu_nph&*YI*E|91sUgN(JA@xLn}&p8gy@1cCiV0&mfoDWOkVmKcz zf%GYzT1cPJxeopjUJuv9Wsp9Ga|5K!cYX!;z*}G|%49iAhPOg|yTivcO~3JWIDq{- z;Cb*)crpA9q%54f;I(iCyc_ZtS_2tp2yKS$dv1h!$MXfa7`_OX!k6Ih;3oJN_%eJQz5?Haufj&y z09#|9ltt(lknxq!G4OSG0(=YV?e?v3ID8w{z<1yR_yN2behBp`(d}?6{0PQl*B`^f z;V1BT_$fRU?u7l}E~vKYGZ@|8ecR5=b@^j7Phf|^_D%s!<<^WV#B;~f7YV-o0aQal^_vKO55QLk~2V9NUbb5|B+;pzixrk#N zb42T*v)jgWhQd(v(%8mS4X!zpalmS9wPzbsukDy3@2~4y!r_S4bsrg`(Ar!o6mJ_h#9s3*0{T-fmT*mxrz!EkxXKUtC-`Ogc?HkPTCZ=xeB*I z_L}@zrhvD&2d8@_KF(E4QBlaEvQT(gben9oiaJGUjcKCG-Q9>Lx-ZHs!njSeQc_DF z)&A~wquTPC#-4X7+y1T$N3rd%#>TXH?e8=A7jNHdfAQ!3CZ92!y$b$lN6dC;f^C0~ zgX(W*!13^Scqu#q>UEzJ;iIr4dIO*a=<$PlY$a&hReS1-=UT z9fKK*&xAYK?*`TGGL9Y6?_hht_7I;JIsx{Aogi~op((Hrtbl!C4P-tdv;dwBmq6OC z(5-MFd;kuDe}aSIW;g`C3$r25)Xs3I_ICtqOPTxHq3!z;dyWd90%!B zIJuC%f-@e{);kj*ZLl*D{t;dPY1^C&A#I3r5&RFF1obPAi{Y8@5;z3rLDFz0Lv&6) zyaG;vx526KH8>6Kh6PYB8x_JdI34PDfivJ~a3<^qXTjdE7@iGF;JL6APK5kMGE@M| zVF)r87`h!+z{g<~{1e0^L+jvds9#1fR~UK|UJ3QPh^ydtFa(onALqkk;R2}kbs-!J z7eW25?rNxh<26w2>|(eAE`h5dbC99Gz-ysC+|4gHLm$JXa4)Qfhhq2F!A@`)JRRNu zyThAd2-1fMErqwj<&d%r-3xDrTi_k=J$N_N?+Shk+f!fefqme;a0>h#tb+H!YvBEG zIeY-#3;zID!j*6}dX^A?p< znn$7G6t^~i)LYL!%eg<^ru#CSolO3iBRAV~+;iQlm!ZZSUx7p6t5EYj4X_YyhASZT z-pu#B4nJjo3)Fni8&LB-TOsdHIB&y|@Ete_(*F(>!)>qvz6)2v_aJk(&fnoC*a%;P z??dKLosZx*@MCy1KJpXT1MYxBA@lyBG4NA(3H%2vfS*H+O*TWu-<>bu-SA8J82k!8 z0l$XN!GA(M6MYLmg5N>;PKWAX zJ9r~J2=ct+Btq4TBp6-Smf*8=f4niL=(?u4fq_wD>x!fMw+No?o9I6J;NhyK)5O^R zt5r>13=JdtRn2y+b#=bVcC0gkswt+9sMfgE$ks@&*A%Xi+x^RpsF8u%WqUEfZlN8K z-5ySyj-q;Tf$C&yt$Jl%y|%A7sV|vDM#J?uQ1@*;_WNPB9&aH=pdPPrcO&X?bND=7 zJ${iURa-^2i> z?3VV~jNNvJ8oTWUM?>1{kjCcwK;9E_crFfI2Kh~YC>wL)gjx!Z5 zfYTu3A`bnO&`MYc)yJ9+85eMhAkXj4Ovv-OGYdAuVz?Lb4TDfSZg4sL1-uk?g_Tf! ztZGQV!Rbl#i4-brIOIzRp#*%u0@xldgq`3b*b_2d5#ruB z*iL8&tc4@twUBFf>L7V?mO|2S>LGER>tM8>D(8GduoV4wTw4I!! zYHqoGd&+y_DlI9hw8M^a2nsgGJekUaXm5sjCDU^})62@HO)V=n?!v3+MS3Vx@4&t^ zP8`SgMS8}STTx2(8CU*7doxYCUMo)$Rs7b;T#UTIr<6`Kejk{VM(Y;awF_^!OuKp?P zK=n`{k_!-nQ-xu(Y@JskC z+znrZU&HP2pHTgaZ{WY-9+-fC_!hQ--@|rrFFXYP3wDD4hNIwrU?rqdg{omI$at<3 z57p1$*Wl)z%r@{f_S?dL!h_%*$hS*E3EXF%k3z}tV0bb-1P+8La1u;~dImfU@*L-+ zL)GEKVYFXJ;yNb zWGLyDTdb~&T6WJrIkmv80I+f)XsZ)&$Uxyn;1UzJNHRDJ6PRo{BRsjw%U4SU0-un*LnY+tB))(;*; zdH08!ljXTLbSgXx4uO1y#=O6H4phC#g7e^DxDXD3D_}PK6C4WPfWzRIkn!n|-lt{} ztWW~^9|?62b6~VxsQ;Zwp7v!I<)jn+yA{RJ^~+lgjIfKb<`p`A+*ry7vmlrqBTWxv0=*X@nN$v0~A_Idx) z-}lDl99O3UDsS1KY;Cs`Y%{o*x(Am+=~=?n*kC1;&#!`a!)kaxoDJWCbD(~5Hy3^m z`7V*My~|-g&UppYJlQ;02Csy?JMPSfb&xR_uWUB2wg${XpM_cQUvMx?=Nv=ei7*?=j##A6ybC)5j%WXu zumGM5<#R_ujaTQud*FFc3{;sIigp@C?Ypf1#dmBJ2k* zgzCFo1bGkEVL8B%Z1rLoZT}PK8$k>G8Nz^ zMW7UHl~5shjZ2NLS_-ea6U0`dHSS4N4E8;YJ6uhneGf&odRb6qv!Z^DTl~{ZR(7LM z@!P9i?(T7(N+LRC+hixIYbWzJz|~)h4a#;dgQ{zMlgQLH7OFILZ63TE{grSH zyb7ugGoBv$H=GaqlGZ|~_skbT)vc>xF}w!ydm?8s)L8WrxEa>MMtCj!9M-{uv2DiZ zO`B2=d$E5V@GAH#xDv9QW@s(E32uVFhF`#&VLaD;3rvNK`-i&1 zTj4qIHaHO84u`@!;JNTlI2zssRj*dS=(@^0g!w+K`i>eG$y7UYee@wJAih zs*}nV?UV*3RKav6rlD0ORRhhg-V0N4d9}^fKgE!%Fgdj?>Qbf29kY$0(vUNA)3A=g ztBrOVd8>QaxB*q@8l^xMlux(yl=lm_o(i;iW{=9HZ#s4<;Sp>Ft2cp2OU znJaZZgNxwja4~F#(Y}VcO4Bdc*E3unt|$6^SjCZVXa3X4Zs}{r=T{Wv^LhUNPM5&W zB+#I%SCt<-o6>?`;hWt8%Om_mr5RNvMU2|Y)zFv^qqvf zhUXTD6X|(uXTa+(__bRKRd@G1nrE~F8W~(rakX7BM^#K)FP=vaaV|--`)!;Ibn1c^ zV;b7}ndAM^m`3;ajWbYtuKMR~vK#q=Ui@k7PFs3A+fQJb>5y#jSU40O2S>sTcnv%r z-Ud&ATi}Us7wiaio|E8dq{$-Hp&sxIsPV>3mCYd(AW94EFm&^$!L>y^DS}{0lq>z5=tL-u)N|cfmnWzF;ua{KOD=B+Q0=;7~XW z4uhuu1gEn<0%~63mvAvW7v2mrKzk}o8L6mzg z><-7nQaAx>UScBTJqqVScnzEcZ-f^^)$dDSw9n{>ei~&S?4QUVpf>%J*<5$;sCfd# zQ5YH6&M+-LsD^UIm{% z+muewLz>=;=V&VI@u2rImuVa*xt*k#x^De`mVL$ethI-cc3!Dnq!Fg~!7RrZgfSOy_2;YM*K;Aia zUWA%!cnQW+uA5*gd>I}Cc?T(^`u!@5_8A(l8$em9I%$g@f4H7<>L2AZ6i4?-^Dx8q z;WN%F8=J3>?HR|R6U5kBKF!!>^uOsI+@WQ;kPNbr#UEeVn`I^|RY|2N$*(bMBAFq% zi7hL%e9H#H$}hO?MsuAT-RMfscT1|=N^`nRQBhUdq^bz3R9~f!cp*f_zS4_5RQf#D?SEh!jqud?UUgwcnXx=bb`^g z_`39*JCi?c(YB~@gy^wg#nE-X3WrD7;yCkxpt9m=W6Sx9;50R4#u#;m7+XtYtfWB0 zW5I<*OdD62Ic=$RD%nH9H2S^vQ$%V$(p`0MoY-r+ym4Z6QdQlu_?vFN&m}9#V9yws zS*FW4`i`C|zeY{m5rk6a70ULv-4iSNX(+w7e5&m8wu;eH*;i_M1~j%msP7q^@RlPLuB400qcE6|KRVzOB zb)eNrsqia-s>nG!_eUR^Ti%CfR~OMW$tmtfxdK*NX`7^=X`8wks5pFz#EdEhD#R4~ zbnLlr_cs8l5o$Etv$?a=_FD_0e1@*?+B_n`qE12;qY@z^|;G6I(_!c~!`@0otPVjA53EzQN!N0*L;d}5c_;;vx^c&$(}wcpx1G>ua1HzF zqZ~>;qu+m09F>>)b-#?TTV}HP!f<7k-ykUI7+Xt=jnO*^z5>kB7sc?$vM@egB`NZ!5Qw!JoG1egWT2<6APr{EnN#D30zwzd>})jky0g zMWs3UHRJf^r+xiRDaY7a-hMlUw0{mOc(*%{di33nv;gbuG6?6j*YYW{6g6?aj(e@) zaqnp|dO}&@)r<7(Aiu`8=rjC+@!yqG(14S}in^QA1$-en=w@^Q*N3iqz_!$GdYj5y zwsk6h<6Ql8?xpTQ2~?Y1s(TE}U?wbw`kn8ka6YVne}a`z@32+D)}&Pp)8K5V-}%mg zdMAxVFU{|K=R&p7mqGcid9WE?31w^i*x0nm^P%Qz7eKYi3!!}2H82-0hEw6SP~X?6 zhxPC}cn|!4ntL1gsH)?A{Dy=OH<2V7HEPsFgQ6hjl_W;xB`hzJfDjHezg3P3!-enS0ND*#(34 z+s}WMoM-3G%sKa*IdkT`+`D%oeHQ6mNMA#GH_|VVZbmu;_rC=xoo)RQQkvJ@gOtv; z-iLG%()*DvN4gbh6Ve|erFq^@kkT3T2a!IF^dY2Vw+|zA_Jx6FC?_)W^ge9#>z42;1g-M;GN;5HS+pokGs4rK2}AE056 z!bhSZj+I!E7BP$kS5ZVR%%Ehjq3_j&B;KTv(^%I{=j+Y-b?FE+*isgU3U5=`wP}i|(m9$P*KTdD=4`_CO!&`3E|0WqgeG8xBILPJbTl zOzra$(o>KgKw60OWu)_wzJiq2SYJi@6w(%?dy&3|l-5{ZM>+tyT9Hye`7Kg6(l?P_ zhV*wxM z^CzU_(+?x1=lb49`Wey>kdjaTGtx_uwj-r;5g#I@wcH~}OOSqq^an^kM!E*+CrBw~ z=s-&QI6Jbd?M3=Gq+cTaJJPR_euk86{3udqzxitv_Nq}=lg8oQAtix&UQHQ4`h1DxJyT*{bu9 zQsSX1TxXGEMVl=Iqsk2Tb_1(5{1$eXScTywcyrh~g40Q?yu@`dMfw=~Ir2T49>3)4 zf7P!Wi>)`o#OY%!&K`7p$0KF@G5GQ5m-?>Ok6Lu4bcO7k-2N#1qq!}8PL0Lbi8KYN z8|gVnuS0q+(h8*KA>EGDjdVBCAxP=$;rU3vLV5vG@;RwU#~~exv;pZwNPmQM7*d)) zUyL+}^b(~1Ksp>Lts7m6bOO@LkkZ(khO`uEI?_6%8A#V6%|uG`<1D0)BF#qnGSX2< z|A;gPDa|W#k^T#59#T3Vaye2Ov-6P-M|uTP8oRGVO3$TSg>(ke(MSVG$0EH8X#vv5 zk&Z`7&-Qwdeu8u&Qd;$%gp}5{CnKGV^lGGZo_h+?B}faA(!P!tDV|T&rXr>Nw`oWp zL^>VmcBC_qK8AD_(gR3mBgHd*S`pHZkzRw8{L&nxPG5H$>M;pzK!Y`XoH4?Opk-?l zR9HwnBtv5mor{}l`a1ZDiHH#lcgLQNREPP%(@~$IObri1{l|!xdGd3NM>ohhaBs&A z!8uSDFyhGJ_S!O}bQX9y(sraPkWxQbiL?jlO-N5c zzN?VZSlob=#^9Tg(t67+NLM3WiEObhP5uLtS<3o z(nKUCk@QMFIM7AK;}X&H3RI%IsI1lWg9dUZ!fD>ismKAf>S0xMtHJ=?q^b*7r`9hm z;V;yKDvPUcFzHcVWbhL(9o}zVsVe*6O2YB~%VY-m%O`g`wY& zt6zjJ8eRU?r zR;K@EdQN`9_g()Ukp2Eu0}njB9P?|YzxTUMH@!Fg>aSu;zqmYg_mkN=Jh%FBM}>D1((m8UR%Amwq&UrPf3>5xreRD9d+@%Ias=@US8*( zQsJwcm!38cKQmETUs?t@GHqmfURqZA$h3L&xQBWCOL!y8zq_J^)wN|*Da-%s8jT<8 zt6EgC7$yA{zq?an{Nm0+Ep>L9JGE>LFm`C(F;o}1;qlvRIsT^VUg7taMLgo)M)6Q6}`ZUdf-e}l9x9mQ(hI&x`G!Zcw( zu<~bg{Zkgtwh^rSLhjnx`-z+lV~X}mMSE7!o>#OsMZ@!- zx;~t$)M&M0kTwhzM<`Ysp(B^}4$!GgdrwC$Z3iY6!nadLE^TfsVq(^^T}QFn4js9) zhvFonjn#gtBbW9r5J|*pf6|dl>sGWLMe98o{*5({A1o+Vo1`O`whRYdPh%}N>d2+N z1w<0D+8=b}(z+C_ThUU{^wU^#jgDe9pN?GGa5T{AtmQHtxwJ|kl8Du6bmY?Jp?apX zmK{2Z)pqL0rQMcj-55A_-Wcj$B$CvYNqK=ISU`o2Mg}_7|w2C4^Y*V;#A) zeej?p5vw)p$fdO^+CfD-qG%n8)`!K1nVj1sY#I=X)e3dw(#D*J^8rj7uOpXs#SnvU zjE-Ddp`uM!v{FSYSG1&|m=FtcLKtvZU;4(iCIJ$EtAHL#Z7=*Xqrd5K8GYIo}h_N-_-6>Zq1n5(g7pN?X+ z6*_Wh6GzH!R;)HfM=tGeKqL{X9n}%W_R9=foQ_bt>6rbo=8Zav)i&wKrJa`{&lJXL z7wE{PVR4@&VzpH|LVwG|+>y0x*Ae=gj*v%|>^{b7<8|cH4girvtk$9z|p=U|P2b2~*xF6}T7NyKXHI&x_}iq@-W zQF(a(glN_gH0#Kvoq4&Yxmn9OI)Z=B7YW#vj$GQVD{%Ufwe;x-?&wOPxwMn7!kPzb zNz{=`TQyp)VhX1tmzFXX&w;U)avjBLl{#{1=Z?dQ32QlDM=ou2fk?z^1v+wR(-du% zq7^IJLPe`qv^quGplBNvZMp|1O1V^9brh>@(-C|&&`-Hk@9D^;9h`tQ9j3ME$fZ3z zQMANrKhu#*drHyvDB6pP_KKptt!VEk+FumyV@2yzG@80onO)kt$v6kgr9Y^nSglP* z7%Q&EsuP#=r#fj+xBShEr>I&x{rQ$-?HOVN=_ ztART&W-a@41b?a{mv$4}G@K1A_7)vM3!E-VK#PuC+OU~;0}5;L=?LCJM=tGBxU!2_ zB3(zw7l9l5l}fd(_}DIK}A*MQ=g_FEmfv`>K&nD#dvxwP-2 z!5?K>iH=;_V?ZOA_DdbPv~$pW81_(>Av$ttIY1cVK+D&WOPd9B8Pn$I$b~c5auzUF ztJRT9yB!FF9c1s&kxTn25C%5T9@CLadl4v;X|L#r-mXji_q5Z7jQ#ihJ3RBJ{Af_z z2W8uSH8ukDe$RszR8-BwtZ<(E`e-G7Q2e*HSkkAU(u`++Lqx6|Z(Vx-4Trzd*&S8u}T!5Lh>R2Sx&k`u)tdX=oYj>TXz zYZ9j?>>+2PLyX8Fbe&(ni_q&Lr}DDBs0ew4dqD~1A#lVJfNv+XEA#$E2wP(OfRI2x~c<8rrUWsE+xKEqXq*guJjy>opFsa2?n; z@>xc$+RG*-Z~EC5^W7+8GX7EDj=?|r+<)JFh-b9XzilnNs>t8f*p<}S5Tn&!PS56O z>zjS&H(p6>18+HV33l4?;XfUO8V|%Zd3rksz3SR1s`Tn$n`zu#Ok|^ZljIz^?TZaKZA?2*LO!_Lr07cN;}-X%llj3 z2TAEcQF<^q14iYK>oiE(}<=%z&pG`M8mH3fear zILX=8DUA)?T73Z>v((nV=Ii&J!_1dxM)`wuiqh{HfeeNrgH&YJZQOi9ljlfd!x621 z#);+;DC#!4QWROICBK=-uk&obHyODlA-5yQS@me-*khFq;IdxQsNiq8cElNYdz-v{ z{-VC7qOO3acX|N*Dp1q~b#ADWu7?%|4(%b04PBZqj(WEb7TBxRFAjLSj9wWPDC$!s zC(TCgCt3sKOe}Xj4`sL4a+jeR_uTIHjzDz`L-|utX5}Mr>9D_O1jxfcP6bP^Q8-*W z)Y#C@cXF8TqO51?07)>JA~l!@%vxTeVO!w@{Z+jHm#-no&mq zZ?B~u+bukYEj))554^TkpJDXeZyE}ksqZvXXCaI7dwUE$=#xFcid13@~w zwFLi(1$G!F14|b#l+|Cgdr9qHQVT~@lz_t00DlDLtOj@}?GAWU9#H{YHq1Ckht`a! zqo}v3s1HLmnLW&#+(W?A19jw%Ni_`zs&~L8_t>4w^?{-uqp6PBS-wpdXb#dugX@cj z2h|;LYwcz=s@@6mVJ5TZJ-#2wGW^IlS<7y!>D^q@7l^N=DmjEIIgILQ2Ud{@97lJ+ z?6k*pv;l9sYKZ{+kI^ats5LMTd>Q>Uhh0?2U2J7A0L%CW$I)#G!PtMKHa3h1AD>2) zlM4Q$mqW#;Xb3o^-XJ|u16NKDuu-3n!ScPu=As&VV|?Mde^|{uRO%kl+!Lg8jutzM zLg*YW{0gf{!d=nS9sCynhdNWpc2$k`MuhbdVHHZOD+;@UJ6K@?$8$-D=fW6sSS=lN zgB_x!Be(zn{S+}-Ql2N}=5a>j_Io4~Su>tPR}3G|k!70RGc=yVXxi_4I70V8`*JAz zk>F2|(s=j{5eP~~GYjJmEqyF(J+)IFvf_!vqQrRj`r(yK9OdYeSgfR}Lx0 z8qZ`lTdcjcmF;~*V?!EytSk;9a!TO&V*CE0tXE;NROGZ*DdpY}c3=p5 z&vpxICgV4KH~J9<<1j8NtSY;i)kBqT{pOGfg|Pnq+O56K=^>MEn9YPOmaSETbo?1Z z%Ku}{4+qZzprO$iCi@qQBML_>-pj^^Xz)6U?6dEmKwTx8#t!BF)co3@e9%i~(>0$lt zvi9CTl@*%tbAO9v@A&jUZcx8eU&zPtaY2b=#({-2(w z`LFu_7aZ2vUmLfzWpIUQoguTkHpCOho86Je?r)#4du)2hho&dS3W_Yqge-<~yyEcE z7JIVK`jvBx>TgZhz4Q;vIf~Uor!+;Fa~icO0|)H3UQj~>E~K8YXGVWm(?ye+YZ@Ee zC(sX?X_#q7UBZPn2S1M{pX@e$@^_d6>?6(m2!-FXFL)noR-xSq%>iUeEM?pqoCZyL zFZi}|0GauT!rei<)*cE^d=9XSZg7`q*%jOiE&ts)fWFvD_Zq+Mc4{GvN!A6gowUN} z_wF=e4#dkl4X+tRYoGlOGO`x@4@)M3{(!v9sfj8AO3Cjd)5Ww zHZ=umNTnj*>-Vf?vX9B&+`^^cocTf}F6e7G$fT&Z@x_RyqFzkW^F6KcflsKFyuFCG z6Pmp32x6%)n2k!p+c+fE#Zp~g{gaAJOFP_7`>M7bP^5f(x_P zd;I|_Qy^&#W^0k2?)|+3{oeLSFn@U73+F+>@X!27YyEHj{?o?4MATm@LYw`3e@ZCw zVB^uq_&u&j@8KpdR)9OW937qhU^(5drz78!vT6u|ZnRcM(|RTb=#C@3y^Wtm-oAw> z8xn(2NP_qO2gR{0p6DxX(kCuKZ8tWwpm(^b-pzp~s%iaP%F7bNHLWitip66zt)E8} zo78+z%+@XHSNs|E&tL_D5N z@lUKLUH$;&fvRcRGMiQN1^^jOFB?uT+A-hT+Hk$zp6CQhZJWQSEq@E$$EpFCIeXf; zHQLY=zviZR%O4<}{-`zn*MHy9*dF0K9m|iHfzU#`#iSEDe;7;$??GH_wOzzo z%miz&Z-jIGUAo|bGWZr(C6`&coII3|6cRa_ypb;JQ{y}%hCAn?Z>9# z`a%?n7_h?_o?$u|Xb*Bd0p5n>Zz9K=l4=bIzUBbkAnkXlQ9Lf-IiNZ=hBaJjN|gB0 zZHX^4o3FPmE${?~$I}+v0>;x+jxmREjCmsKYum}GZWn*KJ%~54p?UQ6H7tY}F=pzw zi7~g4>TRNWTd;ssf7>;Nt)yzJsM;Fr9i&EAOV2o=HHLdh;k}~p-r%FG@VGmsVb>To zla|e*Wpl6uTK>Ch46m*yuZ#xP4L1Pf9AGyEJS`aKHdzMPO==(@&(r?_b|c*my^sLj zVPo(v#4rJG3yjrV%p-mEE-4oAAta$CSSPF+Be8db zQEv2(oq?hQs^|gF2Bp-l52K^nW}u-Ce$MY*r;o}Qg!f^8gN82|m9Z?|Orvr$Ze*XK z9hr53=xIjH?X#4i1H__cIG=q+-rzifAyP)|Lr@C@m4|IblJVGDs`WHj_&qxfHSqR4 zewu+0C^U#1!;>G556F^LGCVoFd4Na!Eu=LNb$gRIZm)5XRr8p{7s<_=Lo-G!8b*8J za`TH0#Rt});o#e8A-Ku2*El!eJ=o+WZ{Ae2OW%*enkZVBBZzh$2--2u<|9uYWAtrx z8pL~e1VWV4!-M!e5CSL4EXAVIpjdwI-bioH{(lYh7wwIN%wP1;`lvr@14e5a9O}O( za&oUUHi=vyX#?#*#;tAg?)De$-v4QGWYI1Z)bH87zawENb&yC;Ta%~F@7=vW7_;U> zrqCT7MC`z&>kiU5#A6KhB=SA(RV)0SU1-a0eTen6$rm1zJqP6rk6k=G!g%^%7QL{S zF2i0D{5WI;BDI z^#>?34i?4$m{w*B7GP!UsyG0&#UVTVMLY7h&`lv=s6-sk0mBY!z(9H}0mC?Jz|dv% zrvxii?K0Y^mKwhvDuZ93#%cJa?TJHZG*j35=K3t_6;mIsoMpXY>O@R(z5Q5&YJ4oE zD!wRV;o!t#mDABj#Ul2hts0-_VIY3p6Zmr6Xe1XmN({-z3RkWG0|zJs%y32IC|ohk z2%fJM_wH%6+I$=+9G$5;B8s;ab$Y}weuOlwMmt4eod97zg*3zb-i{`?*Advs!4eu~ zW;hMwA7F68MH6LM2xWwYVh@9OeeDVyayo&v1pA_83Gb;S|5w%$?AsQDShJdap3qu? zed+3Xb4ATEGvH{)Fs^Uf;j*tv(QDuIgI;1|Mp$9-GdPyjjn=S^{M{!IN!XU0f?v^y zgGkM)PmW)i%Wk~mjPRqC!iwXCT4~9mN3wZ=2!Kv1fkJ;EvLL8%@ECcT4FXNQ+Xk2KA?3~gOD{8lrj&Ix?)$&C%I zn(q|Kl!iaG6dq^YJ;FGGOVqt-e>B;$KdM&4_5ILE)L&__6RYAluyZ2ofCni)JxB(E zCJf@2cv0W_Iv_$!W3H0?ZRRSiq?&Dy&OW|NXCE!~enR`9Eu>0cfochEgetDaDb_Lj zgyt#-NZ|pw?E}GlDAW(%Sb8rE(V`!VY;>+H&M@Na{RdRG?+d_XA1xJ~MV za&CyuJ*q`)kbAh_n}=gS>f@}>khrePJV1#{9W;Ycc8)1Vht<@r8>QCGR5+IZo8laC z7UxL6ii3fg&I?45|@U^-RbxaQKUg}8g0*X810^* z$7ZT}~s?^p0kL zsyij%fNZ|^fDgktPB6l)vCHoq(D?!{l3Xw&eoixcG~0PNZ#z%M+k?$09=SaXVifOi z=&h^|D--(~JFsZqOUvNBjX|2f(;<#kXVKE3F%VmZsD#dU16a*4W<@GwNWgtj+c=kV zyBfyP#$-56JdZz6f0itn&@wFrFsgedbVkz}Wl?kIFN43pl(8X6$of;MJxl`${t%bpM9^R|pHYpK zK&yXUk$i5sJJMW5rdWYb&4)YZ6Sh1uS(Ea#2WgW>j*Z}%3~nZ@K%qor8)^d&M_}W$ zo2yK}Sw zAA}R{jx37HE9y0}?UJUn@6Q~gtO-W8U6E{ecA?Iih}y4O%dxKujF9GWO&EHUo{YnobcA2bq`}gi}6`AHf@j6d}-KG&D@B zPM%~9MtSYmx{GK%`)=`1ClC*X^#^wU6wyC>46DiRS$;)L2TSPIpTkmhkbnnA2GX-H z-2)rKP4U9&mK7oKT8D$zvANQuiOwdep&rfJVOi9MVYHHyF`POrrzA*xtK$DqTRLEQ zkO&%DOw+Or)!p%dJtz(w7?!26Y~M;d8J=eO-r_Ghz~2#Og>`>j4a>2a6A3Hq#Ov`-Pt z#-D&WL5U*!v-Bpb!{hO|=cgau)HPxWvzNpc@M;XbxmyFMlf6b}cy zyFpc+F2UkDAWF~LqF`Z`MZy+L<|k6HgTb}jXH-}Pb$jid!(!>S@x3`dP(ZT$d@QUT zor(-=O;gbhlh%UmGNx_UX-ytuUyg=;>&cki@qxdgPyx?o^j(TbX)>vne$YYj%!jwT z$$P}?JGKxnDL(KR2-{=VrL`+o@y z*CC?BMqj>nTf=nBSh3X?S+tc;+YF#nO5S@>n$6gyYw~ujY3QQqS_4)MyPAq*nTrU1 z&jBp&h@MFACOU9a)U_e8b8~PU^|*gy))Cx+Kd5ipp$PP^HC-E_fVx=!AAz?U+*LG# zwHO?){TYtK5<>LDL_Wt9mb(;!c5<#;Rv^hA13W|s6jH;xAf97%wv}2dtm|xnu z@{agG9N%OLx-oU-eSYtD?zWr!9)q@*jto-w-l)^i4a}}+TW#1HAE04A;90GAWeRr8 zt{mVUb@Xs!D>}glz!CymXfOgd#bp!(B^h@EpNC@to?aYuH2bW#hbJ68h|KegQsM(w zutT~xlD6Q(e9=q z9Kry%Z1!U>nvNE*RL7cz4nwM=$-9fBc8L^@2z0Pi3?C7I6x9(+SzM2|tI4~Qq;`tb zPCW6BqFYWGb_e3tqDE;ehh|u6O>912ts#+fA%u0pR~K1CD5ze zCYE|(bw}3xYa4!yDE^K?FvKM^?TgTiH%!1%PH={9_e%dphc&yOacp4?7T1the1Ogd zhW7R~SO>!8hI$zWaa{0{7iEk65^vwp__@Zp!TmTlNUMIHZd~(@uUQe12%7@oGv( z!&tv(ZzLA<^qE0BP7tAnjfeyXx!U)C7=wer@P+YvqFnHkIIfQ63=TUEA?$cONY5;o z`fbN)I^qL-oR$tXDW&Z=h$I@~_aw5X!*M7&WO@mVgU*p&;yv6it7%#DFT-rusfC)& zK|TkyE2PwHGr_GKCG|{K)`3P;?n&1FOL>ta+#-G0o@@6A@1f_~+qO4Qvm?AQtWS( zWcMWR!;@5a5=b*O+t8Bv|=}STbziIg_n1dSRCsy&|D7A@;+;*B> z&=!U5Y$!AqkYwLmVj#WLNpPDqQHa|Fb8IL3XN2gZTaW}(26yKp!C#S2w9EiPo&(u# z7R2TYb~M}qpMz-=+}}2yChayuF55B5tqtfON3fF9j=pjjUKf$rZhzG6MpY*W1^$i# z4y?h@HFzqxWI^y&-B$k22ZMA*j1~%w)(V&>UvMH#9eKeSlWudgARljW4jooc5o3A^ z%k#82Z-wRde*24F8fJLS28|h{Uo^D(ixZk$^^hulnG=S`;QMSPDG~jDzm=>Mqj53P zb@Mw&Xbg78&v|W8{ADf6EY}Ii6tvqxT4r5NjlO zTMbe>k#ImT!3z%II)rbYBk`Ac+Ly&Kq!8wCr;9MyfeGPHqNk5gA6O3wE50XUX^mN- z2ACM|hgrYpL3Ct&s$#@jnCN4E4`WV7e>9dH>1>#aC2_nu2C<0K`t<$kVf6kGAGYX5 z80UP_=&Lu)IK+qdEZ|VG{(6M|FSdoOtz2X{UPa4Yi=*&EUJc<+APVFmX%R7wP^AI^fij5#c7mIILR> zm^ac})7;b9{!?IDIHw9nr}p`9jvYI-X!l%scL(`@a}gW1&@_Nw!f}SY<}1tcTn+4| zDWdaizI>WYtW~kGLyU`TZZ1By+SfFoGtPSC$NuUebF8u+;IM8pSf3KJAH^{D!*cs? zvSDK;yO+F+9In~5j%Bi8HQD{;BsST&NPf#!WdC;>?Cx=ZXmQ;F$C%){`CB?hijL^S z2fyL)1V#YqIO1N91eb}HNGeNm|Gqao;kN@bZsdjK8#RK<&S#w{I&Tw)MDu55b$p)X= z^sy*{YYL~R7mB=CnC_)er4foO^B3wl`NmGNMHL)PI8{A#N+zbMh&EP(xm>0M-lR(! z*l+@Bx^*=O!@Gl@;nv9z$m-qNiKyw))nH+(EBJF!6GLY2j=4Fv|2Ng4tHG*TN9Upd zmPq9RY&X0!8JvAY*Bi(!uPLMLTRM$RM-pvsbfeLpPI&3;2vyZVIM}f*3SfJIf5e+K zF#fxZ@gI*qV*J-%jKNoNXY`&8W9DI5wGTTII!1Y(X7a1WEJGN-TFkJ?Z&GL@ z`{9Gb7R^4?(@)S~kY__m2*2AKR*QY8U&30F*^W}Q{=ZMm{uF_{mnnH5nNiBXuy0)q zTNeAH0rZd?MHeA2IwYq8Tv3>FZ?9a^8`yj#HnNwFfNnltQohVSp=3^+_ zQ6o2od@@p6c2}-8&e(OQ<8q3cU>xl{HdSfG+6N{9F6z7SchLS6oC405@z!#lCmH)+ z-sC24Yv*7Ko%Y&`TAS!e#%_~01-zaVI9=jZbbR-Fv3{6hzROmfUdBl@H@&dN=$|S; z!{H>n!J`v zF^ddqGW#6V953g#X~{&4X|z=xZ8KEFOhh&AKdl!0IHhxT_y+H5W^b#cIUTcpyJMz)xE8 zJ}n%33okfy$O1LKAK>rU^fh*_Y{xB{u{rDQu&hyHpgLk%CGEy)=567 ze2s@GvC+fSrlNy*03+X%unOy4?R395Mfo7VEO$WXKz`Dax8r6S{<6QPfvgo^4G6el zgD)T>vodTOXQ&K1dX1ipbyh4=weW@;#wq>#0sd~O4BNU*b3-wfSS;(eJ-qi!E5N*d zi_w=V0hQtH8Sd@A;jOQ6;1`v_R9ctw?#uTkG$bn}uM9v@^y+*CwX-Sc#o~;uFHpdb z{;;NN9m-9e;X8#uhcPl!2!vIw!@)av(+C6Dw+Mj_K@o*Ohp+_}^ys@shBr8|5U5R$ z7Vs!mTkuOBRPo>sjTTz{34}lgbv0yi!KYcxw~3@$bv3QDnO+GsOQOnYOUGFJLgmSB zO21dO?2FT9LM5$iSxguzWqo-f!Y*@R&FB;sFBNwBWnXNj-&Myzgcr-m?yz#k36>l& z(Zd=fJ|e~a0xv+VvOhI=xI{ZVcu7t9J~=-6g_!3OQ@YMG$J;b zc53x`hVtQt^7Cm;4*l?oC%azDbM^@h^ROJu=WJFt;11jQoXswMS4-YCz^4UpJ2?8Y5{{ZSu{7!h zN1CwK?Ac8(HeeNz-d*r?yiC6H_M}bN@wz)W1LY2u)28+y{4p)S@SDbl=xLZ{>Wk7w zPm1dNBkdxpuVxU><3C=>cOr*#?8_Nfl2LdO)5J7hal7Wj=!7sP22YCzFTj=1F5Sz! zPT>aduwBl+;z2*Cpl5(bJd)OM$a2}S>w+E{gRQ+9b^B_n=|2Z4)I09d0ET#@YZ(=b zyTj3pJa1paP!h%R>b0IOSz1tg$#8{zussy1^HoeyLmnqE8pkXU?F)7O8N(sXywAXw zNAWM3e-JH^(S`U+6T@i!0i;KOlKAH$*D|WaUy)b_Boa3P{R01@wbl455q!$2bOF_1{mDe%Wxq8msg z&W9@&z7asemkvZv=SOR!fP}AH@zp3kdOa?^DLYzg04iW~E6@a>B<*paI~lzI^g~8( zD%!_Dl5aPV4N!kJ+k)R_MB2f+W6iX}zDqyr4NJ?-A(9N9h zFM#GUdId6C%l-+dfYA{k(b5gnz_R}V5`E_&n4ll|OVUOF$<2Lxp`k#M+hstKTNcpsoLe4{SCd zK%%7=NbG75+?$m7RE5q{Xt+W-3Kb}H9gyT!1|+#H0s0N+Rt+S%`GLf)egz~F`+<^} z?-ihCMsEN;43wmO2_$xv2uCauX9J0Z8)!dE3yWW+0I`s`&a8Uj&AX1I!lpKfbBvOGy;$omzSz;uR zNX!8eYpMd0Ho6f=EaGV((egYH{SZ^M_99RVqgR1M%U}$p!j}vreCGhY#(d`k3Ew!N zwV)+w*8+*eLLiYS2YQ_)mI8^y-9RGob0Cq}4I~oJ0=>Z!F93-|x8nO!@qG={%6w7r z2Hz+k(RUS)=qmvFE%QwQk~W$RByF?`=uTWs(l!D~8*Npz-9V!61t8J)640BhuLVfT z7l%+p#-mGsq@G79G)|$}K%(z@AknuF=y$BI97y#25J+0^afRMc=rEAv(V@s?@>Ua<#`~A zm(inu-evSEkZ2i`kKA4vGd0j&iMJqk!976OSxInWPGD}Y4b zcp&@_o1Bc~|1p{YB%bhlK;jAgK+@7b0g{&fIgr%ki$J2U6$t-B-&;tIFnR|_^8FG> zWY0KL(|&-fn5zMO#C(?m)iLb~AkjPtXf@O30Igwk2hd7JPXeuDL_cGH8>8PT+J}nv zxuOj?%ivpmwvor9K&x5ySs=;d4It6?K9JmMU}~&;zXbaiBSjeht*Xs0~Q`%NgeyxeWor?Lo_h zK%X!g4kR^RtN2zazBND{%y+Be`x($$&f|F?xsO+YL~|=pkR{#%63zbv5{bd*84}4r zB5@ATrz~+kkVwo{eAg?!g+QImSFZT(S9}jEzDI$&nC}T7smZ-SQj=XkVx3V7BC-%*xmZ8uN>qvwI7Esp|8uQ>HW15E;wUh#b(=@r!qtx+fdBxU&((0ab#*A)7b zLW3?cN|gu%mw>XI4%E%)Y#_0StAW4L}Cljtt{~iphx-Y zGe9EoYoMb{`wfstd;}zU^Z`A}SEGj+60ty^Gc5r~Bs@T3?L|Ohu}gtOb~%vbwhE|+ zW!C_S>`#G2_8B0NeFsQte89yuXE3?Si~3AC2; ztpF0ubwDDq0;rcI8h}LN5g?KHHIPUg01}DUfd0i2Zvu%#ASuBDpcKw` zF;JhB07&d*Bary8hk-<5Cy+=y3G{E4*aIXI?Ldv7C25}m`4}xu*R&0c9spX#=oujT zg{WxlB}MxJsEMzhoMA|eR;UiDuDc_SoQocPv|H0L0?FAsI(^r9{ zPJ=)a zkd*I~QAYV@0|~83(S8ghHnbl|%6te&a{CJq!ad~i2~Y&*)&(T3AD3g;%lSYeF#<>= z(t+r=i?HepBoYf0-x9@F4HU_I%YmfbRs%`9-3=tA`Z z)>Z*Y>u&|Rm1Um-5{Z34BC#KccFLl)SAayK8>o>b248MSBm;@WIY1||#Q8uXaW&8l zEO9N+ZH&r+)-h@TTFGdmy83{+IwIf5BMV6K$OCe59%F$DARDb+4J7q{0rS>ItGDRUo?)XOPX7!oN!A~6IgjwLPx5{W_}$zvgqDfTY$2UTL(#*$Q0*bQA6G0==M-Nv&?(IKvf}#)NHqULp+RE|+POfI+b|%>?NXpqSxW|xzXthRl`ZCZOMr}Z=8T~&Xp&bR1x<7fWQK~b5hJY_x zO9479g3u5kDb-jY$!$82(UKq4_7D48WD1BpaEP$NqOfJEXR zAd%P#bS6tY1SArF2AT+oXzfcNk%;mb5+?zj#S(*oMB*kO`q8LpZHq#C6zTxFkxTF& zph>Jb0WLr^p9LgkIS=S;){+V&nkNCRXW7|6w=r4>w2o1&qODQ1O^WuQqCJV*k@CHv z&|eiwL6M|X6Ola1<(mO?0i$bxQn*yt0qOS(bSszOM?j5?b_0p*3qT_K63{s;+X5uA zJ&LbS@kLC=h{Jp*0Tpn*rvTvwV9yr=-OOk_kmNBHNb;BkbRNsj1(G~|3M3KP6F}80 z+o@<@C|df}246mq@LdhGf+en1s9d3kfTRSE0Z9oS2Xb=>_5exge*+|?e+OtW>x-Wv zhpUpbD}gGQHXZ0TM#VtVst15JGOY*5&uCDg5q+Ji(0K}t077NL{_+%>pwMz4Df1ej zROY)CXb6|t4 z=4ICciROhsB2i9=C6)q-#7`C96N+y)&`{=kR`GoabQhQTzNwg3@YVf5^O$z-G~#sgi*5|e=*W{C|paw?E6k4m$9SYsA(9aZl3rH-d14wG^DA0w_7p?sh zh<@ZPTI&On_Dz{-)N=-qNL&FV5@Uhrj8n8W0Z1fPD899d?>3+j%(qeTy`cD76yI-w z=#4#C5m9_mvy6NP14+K80*z$8WFX1+YQ;BO@m&ja8S`DQ_-+Lf8{e+bL7*RVoqhzg ziV^8DZXelz3{~XEutk6*)R1(JDfiONnNkCG6ZiPky{fPOlP-r^P0;VkjYGkwu2u%!q zcPTXZdxn>~NTJJtq^C?#XaUfAmh~yL8c52rQK9F7q+VVHx)>7CS}V{Me7|o2N&S5R zBvE869HK~^1|$+^0nstqXze^8k(dG`_puO2B$fh+L@m%&EU_F&BpwC2jmx}8p_hTy zF>NabDABSVNVGf#L}xdnwI_iJxb(jUn!pmT0Nu{$ZG{ee->}I)0g1j(fG%O#E}${2 z?=zrBST^-~gD(w8__Bek*k#dlJ%p>HtIc;-75Nc4>Yn#lJt14v469gvh@K9Gkc%78?o3Fv0N%LjobvFwvT zBKsVW$TkB_VA+>}ME37MjV${W&~1!d^NrRz6G&*o6v|Oorvr&>T#1pJ8%S~+3N(>( zyA-HEqxKyIB&|9XXgg?0S_P1lv>r%gZv>hYK@w|$MAi=^va8X>8RCh-zt{wWJhr&FvU*`j zWpSOaw4%DWrnaKWx2U+f##d2YRfo0GQxvBmA*p-qDYzP!c!44pPZOb8zUtbN#bw$6 zZCc_{TuoCPa$=gkQ#p+Lf$N~dz!YJwrm~@Ht&T%F4*v%6h)pP#BTzyv_6Jlqv0Ouh zTzt|__*(E?_)wejY6r&?o&HHtGyDnaB{a$3evF)GDb?|X19 z-BIr(L-#if|IRZ6wTR+ni}cE_{Dx{iMTE>!+8O3937Z+C4`Eb5HFY!DO=`$M4)KaqJm?lL2Yuu}~ zt=0{Ywpx#r?g!_{xvf0F(pH3|tq8fa5AauLf6Sp7duJEP#8s*_`bQrLqs%VyFld)Lnu=ti@$WMHJD;kO zKM{IEaWfg}jEj;|Z|H9`QIquHSr=QAkZ>=EKIki+SyoqH>9aJ;Buj2oM*2`WuV91< zj?`Au_en^}DkdWxiWJB4SC2qC1u5NAp?-Y=urwDTX)Z!8K8ho>4ty6{O~r~jcU85| zU0SxNqN=PE7qrr{8ecgRbKTXo?#v9(7L+W!VR3DBeN`zg)Gl=|DygU}D=pQ+$t#*J z?p{z+Lwf60xJw{kx6-||zRu@fQ0BhsN_Q35@uUq&huqTdkSDbS-4x}0Nrk(lw#;oS zdR^^8F1%3()EYi!kva)!%VV`gZCPpkLK+8DTP!H^EiWspa%XTOrH?vx9aG^P`C2Lp z6KLyApj@`^=1ox>+RA^SBACXg%CD2iAW2`YZd81|q7Ic(Nsh9n1||#|Y=gMcnd^UH zcgWLLCv-2hBixiMmSh2!h#J?pJ6t<BiNcwxRx~?n!STXZin| zcK3f($KR!l-?r}le`ME-^I@rO)8T8SIV02E!`-FnBXgYobzw=>MdW{OC}UrW4hYXg z?XvWe5OX(e!{`83d->nm`**v?I+xrd-=cXl%J#p5uaf@4<61}=9plXZdEI}fvY?J2 zZ>=GxiSu=b>vq}~8RB9L@rXOvDoaazB@`!=RIMbJU%#{p_Qv%N4vApw+2EROjA35t zq+z*rUF9X_fC3wxT(zj$2u>g`eqNWSfmqRGxC!MaeYlfFi``%?tE{72@s(4^EKd3LMw8hR8_Ey&WSd5~$6Ta7l63~!E>$mM}KQN$9%~p1& z<-6<3d_LW_GP1M9c5LDI8{>B)ku4HLV zCFQuNWFgiE+*i2Mwc3)Z8~Dbd?7Fm(Y3`9DN4nETreOg z+$*ni6Tfatb?*L^nftyyfAfZDVZeS(FI%oYmZJ@kGY{(}E8ME2stk%^Z>r*u-4{~UOHt{TAxob}i~qEk7`JgnNy%~jjjiw3 zl~>nSmQn;)PBW*fA?}J1OWaqwhn9}O|8!&ITL`ynoNFpS-dCg42@!@zcAO-%^@hcxP?= z&(^;;^T)q?A!KVueFFRd9_Q98FiD&p&}X`ye-qOua-$h5Q{MntR@%E;2% zvW327?Ax(Ui{p!At@h8z(y|5hi&JM2bpZZFM(iw?ty7av=b23uT9k{7;H4Oo0cd0` zg+D^Vk{@_lNgY1DyKhMmM1ScTeVB*Q>H0U5LYpYG++|X(#5Y=BGATG2z>A?K1QC7Dn&O&2uw^6We zrya0SR)W%QqihGI*G6dpg?<~zEYD}4q}nKF1AeV+J)=Fn?`+@XJYd;;tJY+Y7 z=o8Jlt$L{cL`GbKzbJ}U;GK>ZA!OBa67$gU7DG==h#o3QWCVp3RG#{%>;Dm|Czg50 zM(Gae<5FmePKwstoIhI6U;-bN2uCMEC@<)g7?vtF*1^H+QhMG9k@{l@|Z9CbDR z7$v+Qgpw9QxhjNG7(!VPLb)k~5(uH(7ee`22<4d&%7GBd??Wgbgi!t-LK#3##a0_} zHcBz#$^z_y*m;s|Jap}%5K2}EWn2hlS_q{igi;woxg~^hX9(qi5Xz1a$}=I97egq& z521V%LiuM1C63%Mf5^tD4#!qusIgJLS5{kXQV5-4lOjrb2xUSDWmX8KID}FcLfIHX zc_4(cBZTr)2<4R!%KIUdzlKogwK(!I`rsKMlnX;BIU$sZA(T0wY+E263BxQt<)92G zB#P{p;(#Y8hFg$P?&j5_eDtzWhH!@;Hf?OT{&<{Tnlsao-W@cJe4t*oxNKL2Y zB{?YB>BH=l^vtv|PD%z`uT@WaW_G2MlC#c1$x5ShB9`3Kv$764DLE9uT6wb5=unW2 zlC|1N8MV(&$w<#>byD)$9h8g=ibXA&GcvMMP{B4zUY3KBnK9l;$);G;DwUZ>v8a`j zmA=YB$;sX5pyZ}+b5b&!os{f0CnfiYgOZol=cHt&!MLpD$;-yRyOolel|I)=$z0{6 zWN&g(a<(}r*=f6+lnjpY(bBrrWoBphIeBuE5Z78tn3Y!w&t#DE@?sZbKb~-6J`<#@#HV0)?Mhv1xOPRArWu-bOIT>ko%BY;2*-lDcrGt{2 zzS>F2+~lN;+UBI>?sZV|(z~3L>=;CimNMt0WhFT%S!uaWN@k&xl3nSf zDcL*il-#t;gHB3zhm(@i=cMGt!L3{FA~!uF#X-r)%ym$5Gv+xdS*skBy!1_WN?vBp z0S6^3t=&P%$?JAda?=wKfmuqJmz$aDq-2kGQgUWHDR~=gl&rL@tQ}6uD2fryyug!p z$U(`@=(bbRGxAap%~+(;Gt+aOl&nH0C5NIkn^fL9J0&AMZ?l7vkxnt0MJgjBYp;`% z)8?RLrgb?f8BvHZEP66C)03Q(%wbMS_7zS_&U6PQD{a1$l2K!)WToY-c2e>-J1FVt zyPTBFBTmYw9tR~S&5fI~+*ejkMwXM3HQq_dnd_kBrupoY?2MdEPDT*&>#b725qCPfdW#{Fk*eRpZGIE`i?CDNQZl!~gm9@@E8MVzx$=&CmWTzi= zQnI?7l$@Bswla^(8|8LV^2XRHIce$hoRq8@Cnaa2gOZ-M!$HZ(Y<5zzk2ongQSr7C z=HzB1*(tfX8HG+tR=JZhYMqmkcdvtzmq9Npw6tJuUe-Y;WmLP9lG|;kLxR1}zu_7bt{AH?C7b!;>l*1ixP@MqaG9|aKA>)(E>OA(J<3e^ZHIAQ+0 z^+9rnDfPZCMLc#X+=xYLb?bW%n^IrsQp97I!i`v@=6-w~7Rrqho=io6L) zQCJ|t2a8mY+Q8WQXDB3!$CoWC!6DGuIMFz#qSRMzqf9ERSX}N?qzQ{>m)DkIr>3%0 z(YzH^1$07E5ymaP27Awj-np}QBW)JWN-Em57TV~V+UkWi^*GETT|XI&WYG|9!q=A{os$g=}GPA;tT?J!nYARRSc#mJX zq5Q|KVP?Okq_(1DL1o$THBYRpUQkj=<_?X=x-Z2uwR%>G@7Rp0JI|`YY5&rGccKZE zWh;)6H>%!OTTg9&2W8_qbGvXz+vu75NrqXas*z`pc zD?VW<9y@-#XMFLvX*0)rX5#sU;+gn1YtrNiv+2vknI6wn^Xs_6B9HlPY~l1tW6iH5 zIL9-2;v|ct`JF|Lug87(rMS3aX-zRcB@1hP#TC^HiWk*aEz}fQo|wS~@Y3ok^)v@A zTORDtdGRO)PS6;Vi)zc@bdTv%`I2e;)L^qv5IoF5GWH8$NZh5v(8+w+6Nb44OB5#= z=9-c_mSQDrGT3~W-fvj7?E(bRvqR~+z%kT`lzGwWrdU@Pr^NK|F38B<=0uEQg}Mvt z&4gaH+)+5!A$ch$0B#4xa0^Th;{=#)w*cz$Og4HY*$Wda-I>4JJ1>(|7v!$06)&h> zQ8FHfqiU;H$``bk9!1b4YQ5?e6U(ZXmicPI0du6|XC{-CfV1|B0}r&2B7;Q3KmpE8 z@bz)%88qgJtMrsEE<>~8P!`i>FRz|eQCe2&AWtk=y0iptMk}tWUs_^* z#Bxr7ud9B(J8U2h3IpnyZ~OD2nA z3#g!62n<|^vg&nKRLo?v%Na_je5`M3_2jAw1ZavdyA0i&Gm?9#k}j`u1eF4|Iu9Qs zBst`uM~Cvo2n^-hczQ^O^@DGG#nQ5>I)19pkgP#G2u|ALK?~uiEFJMP__?{zy2khM zv@otqPN%a@`~^m3exVq#c5EfC(5V!*%|VFL>=Sa?h7ZoqLo z(mlNdj~}90s_Pe*6PbzVnq{?8Pq>enI5o&RL`-#}GT&IR;lV?TI@6e;o6HxbVU=h% z7-5~Sq{>G>RkRh6Ljp~NX5+Jr|hWcjK-~;r5|);R;Gn2 zWU{y;lZ`zKkHA91X+a!JtR(Wd5*+kZ)H;p{_$xo;2Y**vwiIn6k1p{EtjQGkTfR^C z!9pFwu9muxV*2`;;u1c|nVLCD8|`?AlcWFR4U+oUT?k9_)-9e@h9;=+p+1WjRr>1d ns8vynlFBiei*nQGV}38=@5UdKzQ`bPYS6RNMlG^RXs-VcH$eTi literal 0 HcmV?d00001 diff --git a/3rdparty/hgOCR/x86/staticlib/debug/zlib.lib b/3rdparty/hgOCR/x86/staticlib/debug/zlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..a2574863ff8453ed7ac3b5d4457d744e75c34242 GIT binary patch literal 226576 zcmeFa34B$>{r7)v5<*OZNhBx=YCv2NfrK4#iNF<9q6kE7MMKB}k&w_VY>He6D3=S0 ziWTdIN?WY9;!;723P=SjDpahfSW&5hp}(SHMMe3)KXaCQauWo%zt8XWJQIfZobQ>L zGxMGG%sF>XyE6)_ipHLm+%>DA$?4U-N6#MFy>ogrlxI7KIeohKwVk7qEz7#fveJe& zZQHlCEZNRg-)5hV+dVz+o~t3X zQ>=oriqi7Jni4KBVMEM#W;u5sy#C;y=>{ig=FnW|%SVeXmpF^w4#z)gMtfaamnqYH;{v5C7 z@Pd+(37%wllgSxArGi3p0_k9AWm!cu*8B=mI=-wTdeuuPf?{;$1u7^ltd0igUnuoE z@#(;?5gjYHWRJ3~q{f z#+2AGizL_xOsuYl+6v?4?1GEzWDlp76^<#%Jv-;@v%f8Sxw(CF`zk^;9<`z|Q%Bd9 zma0Z5-z9}r$mK4soKQk#A2YS2vedx!URhddihj&g+tsUwPP@LvsKnM`Rmr3>RZS_V zgaWc@`>H7^FPB7=q>+lOg5na>PCQ5d%38(dhzHPmyaQ9-&I#(ezXdo_x4!!h(XVqf z)G0jou%x26tb+cq&bty8Z-*a?WSX^FGrHeR@=w)IAx{xcHYJK;y zwpZUAcdSigupP>OZQEN`RcFiU@&J6+vQ8Zwu(n?ru)e%IU@h1hu(q|1v;KKSoD~`q zXYERgx7H7jw;nHu*FbG0TS-=Y%wL*i{~d1WuZ8oMYJK}(3*ypWigg%q9_Ad$C96OC zy#7xzf376SoRPmItC`i@{58Y%?SBbYqLo0%IR28XfbZ}7Hsxnr&=v3+rmS&V9ai(_^OWzDd;&zA;Gd8gmnQ(0jhO+)h8J<)wHSx64m?$ z0@HGR5~myVN!%%bPvrE@M&jgSYHdwfxddGgq=TI7>|VWkWo7l~-LsoJwhsv;S$}9d zzVKnj_Y)bXWx5n=b~~}eKC-NA93ukmk;CM4{7HcwhP!7L9cEdx@YgoQmb3%8R(gNO z-w4;=NF1f9?vYL7uZlZ`!l?WdoNMs+k>gi4{kc|lZkLAMtm~0q*diKEF8rJb1BMk0EE!)pQa8>c?Rx9g0PA$? zj0}>@45y`ataVwf8|$}&OCz2))bFNVy5;<`5P>#D-Y#sx_&K|RSp&~((t5+C8;i(TEZ<=-wdZGwvIu4 zhg(-V$B8B>riG~<`gNjo#_FVJz}87`sPy-RpF!%SXQV3`>0BnZeCv?KmaoD{Crb4t zew~;l!SAdR6}eO*ElsGYGWl=LvCOgLzsdY64YBz>%gJvpRI<*2AH!F$t*jOqzxUGW zEodHYC1ptQELTn~DX5`pBxR_<*AA&i?|uWW zNd7vm=i6sBTYKLm%evFZ-+X1k)o%_x|ErYZ&ra{q>CF%9_|gOSOg?;mx6?1`zT)}T z!=HO$5FIo+CH{nwCp>r0k`spB-tW{0F1i2nUs=}8M!xIfOMm~+8(%CMcz0yr@ZHH2 z%6cO|?zZCRX6(6m*4JkY`okZ8m-2;Weadx5#PQ#N(?<@isvN`GUDmlQ8dqnXGPzH$ zjw3H+-Kug@b=Cze^p4EQ9$8jVR9?&2nUmcmyGu^r>>fE?vPagUijih1vCG&W9#Iji z#nSDhA3a8UwX>+QqO@$xkCD>q8Wv7}l$hK+k1rWtG+|0XHL3ejVX!8W(H zJFXOKhvQ1NI#5G(HpM!{aV1+LaZ%X`vD9&;SPwa_WNV)%qc1Z4lC7<{n70t(6uLsW zQmoS)SF$z1lht^#rMR+8h&_%g#oFt*lC8_>G;}t_DsWuM);LdA>B(k!vN@h?C9ZZR z=A>q}E5%B6T*U0j3OrejC!6fa9>=9wT8g#8aV1+sY+YitYW3BCHWNqxuKc{no|Cq} z+-~dJDCE%V4XddmY2)r>mziXj3B{v{;n0m{QCiK@U?`VLn}WurfkR_Kq8W`^8kfd8 z*+erdYh_$2U5$~6M$1PTR|o!YZCn*4CB<3A(Wf{xxDq-jR;8Ky(Mx67OZb*6H!Jjn z)D4Y$uB@V(<^8gvvXY9LEZSEkPlN0Qf7b^izIhy0SX0JBr>u$2Lo(vY>C&xBPL7oy z*|mZr>x$<#7{hVhuFQ48eG;wej@E^Y^U_?y#Wy0=K*f#Yinl$Gs>@lQy#_ABcQ}9%hJ!8!(9p&%C zQ{-PheXP(J(kYk}Ntlhp)0C&LNH8_+;b8jE{VH~=Zf$}aRzA=t=l$oDy7t&as|$5n z)j!e7!*#rImEq#11li0JTdlt!K4a&9XH7ris<>Z2*DJZ_!c*>U*Y>m?FCY6!zq)y^ zm%Ti2@Pl)9X-ww?Y3KO-BQH-3D#?9xGe;1vE>{u>&dlM&;H zIeMQ@A3-Rl-NszJW#L)2tHba?Io*2aa8F{fK#w2Gk@R3P<4F8B__|Sw4=67UjT5S; zq{fdMPcJp)1~KLP>_`8$d%XQZKv(x=4;E2m4z`xn ztxpf%T2`W2%etDXtbSX@-xzePrjS5Z8<-~6vL=x89{5|LQp2c9=N@1!E6KgfFg_iB zF>6YHBCcZm9YNY;q*$}2wXB%6C*|XU7=KD6D*Ik*PqT>c+#j&^ za5O44Mz85_hGYR?zI(0e$-%e<7belOh%7LSF}wS zmau-XLP%XyA-YfB%Ys-97t_*=G`X1Lv!qEgVPbZcl7VD@F{#x}td4hatZa`joNN-b zhhu5Fyrfij)F~OeJ%OY2PdKZ&xoe~c8HH-=xU>9Pw-X;>6YQbsRdm@?|nyU_fhIgbWeFawRsV4-D}wQ zlyceklyY&uM;2^ZjpIr-cao}^&86f=_Vp1f3S2%x1ePSfICmh@n$=eamTNcUR(}LT))7jrQ%HY4${3(Nxpa6T`xYh>sj|cWnsq=FZEuV z{#?f~@xOoV?_ED5j4?mmeTgPwN@Ua=(tU|<`jtS?_<$y0nsnXw*rsiET<&X!_K`cw zmhXlV`YB@)EZ2|j9I~)c3B!bAzO9R}Z|rs0dR&Z`Xe`;+$bLGPjVL7xzJ&*_!Zlc{7DPsxV_>{<1vbhzej zj3j*DS#@q_dsbbep%n8j_CT}hvy@k#G5&nFn>tlP&G-%e4)1S!lp=Gj++6=nmd?!1 zL5`olR@?rRkEWjJW+Q)21B>5q4HWUcX4Nx^=Z8Ge^-AnVexj=xhm2dQXPOCsbMgp57`os7gaieLKI_*d=-r}5-P z*Sr=gbO`cL!kPh3f^|^UWELCvUdN>+}VFhG{6S^AS1eJcCIy9PDpNY zmVF~(?j-zrQyOCR_GP?1tNjXQ5#2tR2fv2H;eKeELV^`iTmd*A#zW0Mli*r-7)&Mp zX`pZwm<5Ge&O;BfUKfhq?jny5zj4Z{EF^_7rs!rjhn^ z2O#a~xteYnS~<#VkIZ?YpPvVqI|q%5OdG9oy@`G#{Hq1>ObEfQ#Y9a0wg({{$z(N8lXzDEtjv0hhw3;2+>h_#|8d{{~-# zAHt1L`ujW7Q{-1+4%`Bzfj3}2>3tK`cs?8Qwh3Jvix~c z`RVv$tY&+${g=YXPaz!9Fi-YRXOtaJjz^zq)B^q0^++zJh%sseYDi60SKZkuk>g!8$jYs=G=|j5LJfepqr;eF+PzTkv zXTf~@&4JQe7{=DGFY%W|cvp3?ed2#P7yGu6!boNRg%`R3?LM)=50bvikfQ8=pH9)Q zO|2pvLQ$$e^A)9AHjS08zUMNmYm{&4T>2W~2#e9Fu2}-rNtVKna15-4W8vRm8T=4l z1*NxN!Pv4;S^7>A?Payt^3(NV%kOsbqAT15b09wu30)5FfwSSg@Gf{CTn_JtO79XFTYk*p8qCY| zJiR$uQ2ZZb6;G@V6s9?H=7m;jR0k7&#k(ODV@nDrn0{I{&NV)LG}3`PF`Jdnyg|QK zlu~e;NyIpFi}#1~IY5US#y<&Xp?6kvk*@=P`oP2M&-5>58Z??&A!-i`#@^G5%Ckc{!0QggK}PRP-P)%FW`n-Od# z16n4vB^!{uhJ+W2s|rmnwz-${*9EQfxkh?bUFd`@cH}!LGwJ#xsI{7Us5-F=wuk?Q zx`qB9$O^LcA9ybO3~HYLIh+J}<0P~Yegieu?uRcz(h}MZ0`Myx!ep-93}(XSum?jj-Lo_N9Cn48IAz0Tka=TB^|c#}Z3CJm^uekP z%BT&fQM>(03ddbz`c{RJAL;V&hHXGq$)5fx(k4vZ5v*gKZaUK=(ZBml#jC!mn@UR! z)~lNm>VoY^)#!5SYb^`js<3V?w(n@XnyD$M9z&_x7Z9+5ifGqzT~D>Mme@?S_mA-x zA-oEU(Ud{;TFFqOwr@sw7hC=QWchH6bdinq_hGr{S;_4WRbS78T_I&0>JKk~7s4TM zD5T6ox-Ro6b02yM3~_uJ)V;w-C|&DEg|X$QdlsqM?ZXNwFaNmk5$9t2FojVc`wUEr zmfz^wvhrdUGHAr=!~6xP+TfT&>%-iUpn{5$lHnFiNxA!qu6n2jW$sQ-y)suxc|DOP_z>Yi^rJPFeFLY?76 zI0#OLg>VY2gj3;Scs2YZyaqlDr@@tQI(!DwW!IdvbD+`?hML6Bh1GB#oDAnf z)^x0!;gj$-_$<5~X3?&H1AD?d;V5_)jKIb4L3l6x8r~1vP`1cIec?m!0{AC*Ia~&B zg@1;>g}en6QeB`gX;i=7;rd#9@b?eulT{-=#vac3*#1FbZM4V zFbAw&4Qh*8SA!lxt=+2%Wfi_I!W}Uy%=2rnM$sdvUF)f0)Cb$It9X<$Og^$6_@OAhad>j4)HX}W+!yLE;_J(gj z^&M}*BKQ`Z58sBrf&YYy;X7~{+y+;`cj5E!J;}yDT02&EvJ#tCtr;At@yPbJ>>#l!tw-C#y)>ZN%z^ZJZq(aD2Z>c_z49W1V@P@eN$a@qTy*WbPYMD+xgEA*^_~7bZZ}bLPY$)yyRL0L97NIHb}~ftjeR z1(b%lCkag@-Rbap^*eArJObVYTf*PMO!ydV1^*0>gwMg&Q2o`>Ft!hTob;)F+I6(? zn#MHFb&r{MyJ41b?ucj~XwTc27kg7TH&XohO{0ELtNw1cv3ttzY-*PxF+(a8*9)QsH$BervRj`L1R<;|VV9H=W-Gwy_SVs)oG zv9YQdpBMG!jw9a|>!4`Q@6LsqinS!_%^gP$6sx8kGon4eJAI3dbpvU=C+f`|NBprK zpuVau#Maj!^-T3+2$Z7opt5!$EaEB`K_%*9xPtJ*;M0(2EulByWl(kNmm=|Wz`AB9 zo%mo54m7V}&eW*BDvZ+eFW4$tU)>+O`_?KIa}%afebxL`DbRgVxwj;vHY7>0k*H>> z#?>PA9~q;9d>t2%lt>s7C!231>ny@Ze$f1Qmj*tML$+W0cw z+~Lt*u>QeUvy@w~7{%(=+1ObB%K5)Uy}85Vfnsfm*MB#zv$3&0MXXvv!RX@d@OYqD z)l>DRmN?$sIvX47YR-?0dOO&RN@=|=I{i4%+(&7>Kk98|6JxYrucs61gQ|jd);2rd zW7GNq=U{zdhj)*bAy2 zp-FRJ+!yk0gVhhJCY%AEr|iyz-0xUtLGD+qv!Ti~7izHR4|#@f4S*_@bD@5{H3*i& z!Ehox4@$r1!`n&VFeuH8fNG!lFt*JruS^xpm;@S)QS*`YiW$chM)}{2Ju=$ni%V+Q zaH2r3!WYy`nP9KNDDEaqqgL-O-)czG&4As$+jBI!ob5OY#urwPvwZ#JWM8C8kMyoy zquh~~l2@gXU(J~^;x}_Suztdr? z4tdMh=+DioS`Wo!?8k66Hg*lm4bzWvM@4lwx~za(aefMBYfrH>VbGp>KwZ!4;nb|9 z04Y#)U&n42SjC#APj||i?|&heIZ(bwajr{Ddr}x(|9x!h z2Klykc+zSnr=S5DQc&*5v zHgm>ILykfIdTeCnY%<8Bu_n(I+vnOe6^_)KfSJ5hUql6Pw<=WfODIhH#r)c$v9$Gu z`xdlvLYVCVD$ItP3UU-;rOwH}vTt9ZiJuDS-Tnv{bvyLf9}mQChVb2gOrQ+3qvi~) ztmdudqzu(MZ3s$XHJwa;z!38T1nti-fneH@!Tvdc6JaU$TuB+@Nk99r@uXOFKq>a+ z$Xrvs=XpwiPAUQXlErMz(DTrRP zH{R9Z9wYC1QqmiD96O`p($QaznKGq-1&Y^pp`TfVThFEJU&+X2|4K%# zWb-u3mSt0CY?+=yw=p5K-X&Lx*>6FvWUH7tu`L_xxa?ofv^62J8G+xJ=ru*Hp7!KQ*h#APT*W)Q8S)^n-pw!T;$SmC0jk1gz9XH z)yHuqTjjX)ETy@%!f~ZoD;-y|)r_f_&ayMA<3d-SEZdV^?#T)~*-TG%ohMu7$sYG) zdvP6aQZSGLlPkpCh4?zku;$Hg8Xhude_1H^G9TX!-k>R>|ba9k7K04ll{q)J?hC`^JH&$vV^1E>n1s_WUG@W>*~pV>B+A2WHUV3 zY)`h#lRfUqUiV~gd9nmLCR=|=jw{*9q!T*Dl`lilsf?(<|Xd9qEOY>y|~>&Z@_o3XEZ zvg1m&&i7;&da}u$>>5wD1J|i0M?L61=I8l z#gk3*WJ^8SL!RsvPxh)O`^J;S(WTheJ<)NcSRFmt2v2sIC%f8{P4{Gf@MM4TWSczM zYo2VMCsWsBUw136PL_J9Q|Nl+VoxB)m255cWJ^3*7G26|CPca8O0gz5F8UWww#}3E zpwsAVLg?qsa-~?a99Ocn!IN$DWT%~Ee(g-ECOfVa>l(+EY_0NSYdu*Xs(-SH`3%RE zYz@anhl{<`aWSglqDw_K!Eq&9*WqemWOE%CImbmei@zm~E7|%BE;?6a&pNJT>+iVe zNRj=+aV1;-#zpsu>|@8pT?9>$jucs{<4U&Lxn1h%$-)`EP{3kSPmWXMNNpj3#j!BL&DKSR+`Zgn7ew&e= ze~3{T{SZSf&p6_UmMv9`Dmu5g++vC?p4j3zi29HDcJ;Su)Ak3NV}GEbseP*naMo|* zIQH9kj{P=)W4~?2vEOnijay004@*pLmXeSf-y-htfO?;X#=WL{E%zF3+-{tS1e0y< z*d!=>m}Av<+Wn{c6uXa9KdF9E_JO%l z@dP}HUx_7IXJA)iufgua>iY;YvHh`Yu4_CoB-*e=*VVJoozgFOy=H}*>GKe1{RSJr z&cL37U5#yry%$@EeHY70mvs~NV(cbt4)zi3udp9u^<|1M_B`wh*pAo-uw~etSeCb} z+p)jEzJcwFeG)qb`vtZcb~ZMM{VVoF>~FCp*neSJ+_P@Q=3`&O_Qd`fTZ{b+%Nm(A zADf4L3ELU_N9=g)zp=++@4{YzeH(iw_G#=i?AO?q{pX_p$12(@iaIM%>Ma zuNiSPqhD%9-_wl#r5SxlGx~{U^aagm@6Bk_&1kpHXq(Mwf6ZuP&B#qN+KT;EmsYR^ z_E>B@wk0+N+XmYldlXhieYV>ls-KqB?VFV{^~36WHUHGyQu9G>G0jR&7CZ%;jqQWY z#SX=e!cM@3u#2&)u-mYH6MJ1?*7h9r`{IC@dyG*yFIV zBN#Vmjbxe=YnkM2lCBc98RZTf+Loo+LNPBX zJfk(^StLJc-OMZvY?5+z4pq>c?ckn0&3E=1Vl-#7-Lrk1v)xxAFAdLF!Q|USx>B=n zJJO-%+W!3;%?>qe7Lyd2v)B$0nYjcZWJW{OtqyRN@LYwi zo0e+!j7e7tA`53IgQazA0+FDRgl)-Alkfbb$joI5vnpWnA-8tM`6v+9?l9?TPs}li z&L^f>b9uZ*O!CT!o6HGia@I{cF@wueaMfvqPkUmf&T9Wlu9>=eXLI@Ith4K-oiORv zPS`%9tc5d-ww0zkm8Km^Q{NfNllGg@BC1u-1~q%lm4ka5Y@S)StL?hrcKb|H-HKUq zrQI-}|A{1$Q8)FpxY|tg=qcZb!~IWFDXZw&KPbuF@`g=$l4h(?k^6TOV*ee_2YZTc z$5UkHQlq`()jQ(Zaz}CA^pGTLl2?DE-AUQwvtMxUq(pWB4d?BxM>*+rYns_7On~&d z)d~Ib_D*6Som8vl*hqdRmrN%yscdGHv&eWabjM{cf zZCdnX+tu9!>1%?d-LM7;B~iB~fvuU+mTOz4q)6DPZJWvSTqQbXJ?_%5ag(^T<#QyR z@vhOEQ55GR!;+gqLw5Y%Srs(a0YwvYyZ)O{9s{Va$jStgbrn7mlul&@9xaIdW}uk`yG7F|E`q6Tj{mF_(vaVkv8-_T{W(%Jcn&)bJIJXh6Y1%0u#dYk+!26`Q* zU)W0|Zolv%XPz`3-^HWp%ES4)scS0!pRcCt>W5O(_cl~lFeWR9Qr>P)p{C^4_h=oB z4lU98mUQ6yX1dw@%y9l*RA@$lpRKdd)el95F*WXV+KIZQgSHb_Z)$Fh^+xv74`JNk zV(F{DG}D*C=Bl|#n$4I2#LQHZ!b2H!(m&rs?=|B+)1jIkR4M#6zlRbjotW7qFfv$O zZ~Xb0?x?RmiC#KBPrX@~UfS!H=x-YIK^$M~Y+cSyYtM}Fo0Rs%tmMl`M@-zv=NWmw)zj_0;-yM9C1hfiwmfr&t@g+) zlQkntn9*`bD z(dW(wzhPraQ|+{E;w+<|E2Gs<<6+&d9?n*k+PX5*p9$zj(jB=tDH0bBZg!j!Z*bjg z0=dO?vyc7ubwP9E;Y^^ZxOsa`UDQsIY12(zRPRAuJm(AwsQw+Y8ksr5C^yNe1*(R- zOTzfAW9Yv#slSlj3hulOg)>0yDp# zw%MvVIc>QbAi*}LEg!KUENukwE+hf&C zXQxtgV@QGSQWxO%3)>>WZT*5Ol-Jqs(=AnQduq<|9h2ZrOqlUZsb?;5b!QYU-Ps!7 zrs{<&Fl*jpRJUj6)g*Z5Fs0gbRHi-jxmV@e{jYRL>w+8PW{Xnwh3b;GnA)?Y zZrYZ#>FpwUTWE^Zwe!D;4{lJCqm69gG8?!|-q!k!>w+5feauQwIjJt7&k3ByV$Rgh=cg+08^4+=`5V>)o3-y2g#BtPq2Ux zYH`uA!yRSRP3Lc!c7^Hgn4DzJnEm&fT#mx_OwV-TW|(0+S<<;ZY`SpTpgG*l0A_br z^m+T9H(eeZ-QKuM2&wgNQH^LGPnntYdn$~`ymTpyKE;dDnVhPJ&^R#bI^$thvQaF}$Swo5 zSh^dj@ha9m_Hr?AI-2SX^%~713j-#+b1Sc+H+{%vMIYQ8cKU1kaG$40E@QlEVMjHZ zDjA+*x_0Mqmsiy43DcIRE}*#^SLT9vx;c7b)So(&u<^lttP7dpPi3*o84LTZzvc+_ zoph&9+@!PN{0%Js$Uk0;|8U+08l64E<0gI10(%VIrMS6-)5D{>=%HVG?2zoLZI7uv zdr(zOnUI3IC!NYztYK9pYqGAwq`5M6Ssymah-#I7$u65jyKL+UO2Z`>%~qS8LD>$a z%9yHPs&n1iRR2hA-@uywN$XK+ujVr2)>Hn>JO(B+TJLd&U>da6FWH$|6-b?I?cvDg z+A`hSKB>>Am}vy-fI}7}I&Db3_70KA)6%Hd{epXHo7b=0`5sr`JljxD>tN5T=<^q7b{VhH#ht=Ru=5F%!hKfF2wDOI zbxoGzfhnFm*aNUXh*NTETPz+X+n!bh{9=kz;`)({J;~Egb2OFFRETk#=utG@Wtb4B znl?9XjcOdjUciohO~8rb2nvgNOp?Uzf}vL6wi_k0a^P2T{Yj>q+*2#L7P~1BDZgHY z;VYn>*Q-8h05at}l1;%6SibuRPdxtMO_lF~%d?P_(4I-uMeQsC7aqA+-fIEbDpHWW+^M}hF7Sa zPB)!Efu=3DTY5NuB`Xap52c8IvQ=4K{ZJNKwl-Acc`vXyISCL zmanK4fe9s&P@!e z%-xdHZY)Jl&Um3gM779Nx%|zJ@-`!N*N#=?Vmzyi!ugM*$;a_{&|c*y)1W5OxHZ;_q zTgx={`aZQx+Hq^ydd<3=TDHEaT9y*dTS_fk`g7JYUHss+Y<)v5*|jX?JN9b2ZEf`D+ zYYw(5Fm8Q3aoP{q=MM=SZpJ-(k;wPiOyB)h2PXP@MaF4udx_cY)Bmaq<)_a0NUxXt zZ+fH~^PsCg%egalDihza0!bNe1==GeIgN|e%$P1b-4xSy8kboD`nlc}(8UklxEjAJ zpyYo?-R$w{X18v{9o_71q?^pToeAN*ZRkdm{GaXaNEbi2Zkl=8?X%`O6MhuA_2*QiE`D%D?rPYB^N2_b zTqZYWq%$|yhms9?mT%7Z80y%&=% z?0d1DE$LKIh4a3gS^i}$486=-kVv2MZEG(qcj9l>T>Yq*ClfS^4Tn;jeyX(>UHssU zqVd{`KO5ggi4E3XBB`@gh54Kv4-r^&IYHG>3z2&|CFrR#3ZlC0rW1BL>20Ley$4yz zc?vR|w;mm8+W52e(7O1+br`e6qE|399v?K-Za=aOHQR$a(?RoOZto11s!$m(VX}sA zzq=XETgxhZ{@&Fe@e<}t^AcuoZ6t54TSs{=W*%;Bbu_9@(bed4Mx&H0o)YGUga1p` zu40y4Xx(lWzDvd2>a}jhuLD-hy@| z;s>voF)J~um|93awY|{((uA_tN%SqSuqPR-ur1L(+SDnr4~vn&eC+uc+bt%-s!9Mf9lT6Sl-cnlX(KP zchgRWc~-xUpMHWmhxYLJS;jDk&d1}IoGMb(xoAaw`yO^>X zw<(#jXCO;A;umUp_u^MSEy-jhe@b^ zl}F0a?3w#fCtF;*Zd)KlPpp-E<%_zrZ_|6`b)Ho7h&EO4PEUW03~t)tKA%yz6?z{s z>DtRpLd|=|hxRTRNi@C>`Zig8ccQL)QkSu=Jz15#e}rz_42QgQ#1&} z=Va=gFCI=U&{-tw%sax|SMvaWbew^~`)O#RB-{CFkN%EhIhFembZHv5Om ziB0wV4R}G?2@6{PraqSE4nRfTtPR3|w7}E0^_@_Qv&q=i1CK zVQg8KOndW>OluIX4#r<+l6jJG4e?x~ah+&n*W==X(jNlbH309n>pom38-LGuu8}Cu z*8QC*#s0a?6S%a{lW6TgJ$5O4>A8B63Hv8F7va*+b`mZ3YrcP8+~Kj*+vncte$Dsg zn?LW=J~wXH`c0!Zjp^{wdORDGt4&zDloelAn-I`L@pvn@w4|`6OLq26fk4QX_&)&~ zAXHOdt98EAJ6w@c{P@YG0N&N1XAbFWzP``CswT$=^x;=3fHiG*c&8T?KNz!(sO#B! zQhykg=*LZD$VdQ2wU>{%`6T)gmkt%m_H!<-ng)J`A{pAik6Mv7z=?(`M>3dN7nMvw zvZ{e(783oaD(dGJB>G8JRB|7ZQJ%#Aaa-viKA_LrcE`1H$(d&ZOu_h)@kJAKHJL0& z8;{zDXwH>rwzL2nm8|1vBN~fJwjf!|g`$!jNLDqFe2OHSyhr^sBaUoSN?DE$TOrA9 zAZdpriwdkzww^m9Sw=OFO7yvqRWy*OWFV3Sw9%+!D3VdM!KmbNB)RnYQAsJ1^mcxU z`ml`+B(o)DcVnIQ4JH!J24v5Y{vDx&{IdJwlWM5@xYeV;2cJ@}u?vcHL zVS#_oLi@mMQ|S6~HW+jdoy`c{LwEnd0yZ7DKMrhM_9th*_4{u+O~yCd!4O}d15@*qPmV`W)GNBNtKTvKX0u9W0}L$CY&r86RW$E)xU7Ad_|ujZql+ zX#@XF_i3Ae^PTvDn!?fL_SV6R-E$3jfbW<6k&Bo;o3*bn#biEJ#x}y$%*3LfueMvC zBy`i(g9>A=r$EXCn<-nSvyz~#6U!u2PBlx(V9H@OWG^i%FE@h4j-aZtvc_Czjw2Xf zSW{$wtZ$Jcp`lfoFbf?)aaH96=1-{^FMH}KH(&J2XegsU zw3_{eB>8yU@licxyt&c>=eVq*$iDO_H;O{GqE?2MA-IFfk1eSxF==_pOG~jyi=w^8 z3FUt5a5BfY;7{LlGqFrSa5X9MQtyk!P5n|Q5V{Mw$H7jJ$&&eY`*>K%aRs~u62^SnqzXR9aW#An*1%1W>zeO8O@wc8JPE!7C&Pb1 zCPATna4OV3@>fHBEaDodCC_W&nQ%JHgCYKD`cMZ)!&z`Dq(2DFgx5j7AI~lk?E4Mp zz`J1>E`xKSZnft_egEnPsJ%^Zge_^8H^a`5yoLC#8ar_C&2_jO>LzIgd=x$jABTT| z&%l+CZ)CCK2HydN&p^I?WvzmIvx*%@$S+(2cfsf3r;rI!D^@FF?Nc!VW7| zi0`_vyM`6wdo9|dKGYt*1iQkQA>SrprxLzr0$+vtPQ(^i4&Q*+!Z#t`NM@G}E3^P^ zg*U^u;l1#m@F_@{gkFQ&;Op=`_!fL0z6(Eux*^;FzkxfUmg(zZ3%Cn*fd7W4!rkz6 z_%URkdwu^dGz5MM*}vY}1FwXi!7=c^ung{n?B&j`ALt)aH$v=D%?>7fmmGcrpMh}! z$`3L&hW-Vc!FrekzlJF=u^BgIP){UUz~dm_g$w1tG}srW!~QS>o)3?JLm<=P&`5YB zoC;gRS+EVf1yV;tOW?8a3CPdgLYrY0d;^{c-+?E=_umU6X5VQEs|V^8A!Ck$Bpi>J1Z-ncEh^R+i$LgS-86Hn8766-~8YryFvhgMaN zsVW?wb#7UCNp;pKll%1QIPy|-bBfDLs&u=o-Ek7pkoJvAMi(t;b{Wj@j$&_{=uQ;+!-z=lU%O zd9>Az9j(r>3auH8MS;MKKp-vIDavItlA;Z2bbkOAABUxeN|~V_$b?PM0nD$EX*$u zaj`{4B$ydaKcKkvx`2w8M-6)!pw-X>E zD<@X{OLfy8vaZdno0eqNBr5YY=3J2yHCw-jr0H38Ps`;iix(odO2Th%TCI#;++UW} zZJmqqXpM^x32u$wgiF5ze5U@j1D4*9Xz7vTGonW-4qh#9%dZn3=jU$cM9-*{S2ix? zmG$?t@E*Rkm~_@Xt^ci>6x$J~$*S)c3APQ-)&x2-U;l^aYl^-uI44u(&}ZFj9pXd_ zI&ECRIV!XIHU~Iq`&nYc)J{s1$8%H!ezQ1V_XLsr#o_!#>w*i7r`ft~kTIo49eb6+ znit8Nr>Zz#cOn!^p!TpC)8>t!x0{s4VO(uX4u?`I6O&D_oqQOVcL7#(%3nAq{}H2> zwyONpgMRsQsxzskyn#WJKy@^UaQ>t97e#&HrK(r-uv7k=h{^BV)S+|omZ59ZM7tT< zDQ`~XR;i>kl0YL0K3bnl#G|^uz|VxK`zt!-Ei}JJe3j=<3!LmMQg%X-yihpr&PaZ! zQ~rW*ekc-L63JWm>W+BMI4W7juNUj4g{;~)iHNM5;0n7SlDFi9yahGMk^BXlJ|g1! z|EZg{z^XYa5?sIot`mYw!isH4d>%htUZP)88s(E}(+EiWiqZ%*uarnh=XGd_pVM7O zAHZ*vm*-tK`-R$e$ol0k#w zn6UCL{X(mj_P98lw~zvl%vM3q=hxIu_Ea(yx?d?Y$VKsa3+Ym-yF~IA#pf?Hy-g(V zp-$_=c@L>cPLHc^$tjbOMQ%H;UuXa5GjGwW@5SfO3+K-}lnQbiiS$w)HYvBeCF7i% zw`dMOUu2hyxX64}$hrB8=Zu)c&n`3V0_v2s`U{@b>HMuauOHmS?VS6yYUdKGroH+> zG~FqAlDYxkCiO+^JT0DVgV}814DO!-zKod3or8wF)tH>jxCmmN8-!dHiu~wSV zhRkat=3HgF^uNx@h^PUh1w`G%n@|$4fuy~`T~sm*$uewIGJzv*)f`FVXBS!;(A00~ zO|xeJ$8huP7OcqGW9rZS~hJ2b+jl2?QVhwo& zHD)CKmi4lIZ3ejqSVP`>mKT$87=OOXE8*{`IU~-F_1Aa}`QKeF>&ro`F|ar!!x|9P zh&5z=a?VKX|4yc6{rMW70B5e1y()ICxexNK*EaO0=d|efd#yFkBC2zL*jlq{aF-vt z)U2VWgD+b<+L?7S(?BIIqU>m|rZImEFQA=wj#+0`82J%jNylM~yUxrM{)qG#4ZD8$ zBv}jAVBJF)bI9hP?%57QF6^0|&25BV(xY#mMv~r*B)u9*y2VQRGz!(HXRM#zJsL@J zVkNyANqRO)bC15Up>i7KBBxP$avG&Mr_r^t8^xU6DCX=&`O0n-b0a->@7p~l&E5ON zYNLDa*qFQbioJUGM*8XAJvLOg-m!VlX;c~;>v zDhe(6uSZbB`Kl6op?!zrK_ip#umM39jc!7%?O`LwYiSc>N7vfR`ForY-oup52(;8z zURZ4h*^8h(*BDz_UTl)N55atV*k6ZJGPXI9R61AL?!;jpS194T5GWbmqlm3e2=j5*Pd~S81*58;nVaxds-Ng^{Y7h`<%03 zHlpj{=`aijz`5`jFamFe^WY*lAKndbfWL(cAZy&#&G2=23w#$YgqjwxCLdz$)LI13 zgSW$B@HbFn*d1^Jyb~^icfmFAZny#712@5Y;al)NxEh5E#%on=q0!j{uA;HBlJ1^JJdI7Uxj>+*4hk*!+*fvK&IuP`yoHX z4)GmL>kYULz6nody_;tsp)=rCcrN@WoDbiDzlPhOUK(RkA6gFIhp)ixFpU9=XD1;| z^FM%{;0|~u+zDqvbQGEo>*22<&sakD!GFWQ!2f|?!T-P(tQqcxY4Bs%8h!##gglc8 zX-)Anm<#_4&x4=COW|Hv2)}?6;a6}D+y`HREW3q1fB_iK{3i~k!g$yUCcq9b5q5(~ z@CjFU7knA^hFf4C_#W&F zKZHCB3w;64gmK(6o&}GBXG85?d=4B0`@@Uj0C)*J7v2R2!4KhJ_ys%<#&gGc0ZfIg zLWhDd4_*W>f>n?;>CiP$-(#N-S+xoM8s@_%;3aSsycGTw@~keDN?)n(w6}(r!_IId zJQt3FLt!Bt26?6zx)PScv2YBmfMek-SO&vz9E`w9cq^O$Z-Z6vURVtugtc%roCu$X zli>$&3hd0%`&1Z&SHp|oHSia38oUxthvjf4ycX8MIdB%d1zrd5f^*>SU>H6G=fbC8 z1g?kk;Hz*x{1Dy%cf%Xu7jOZL){>n zE_f$=2;K$PK>EPYCU_705Z(*-!TVq$(}VkAI$Q!3HQOIRy=oxneZEU9NZ6w!axH32aJQGU_87ECcsL_Pu)US!{%@{ zOoGqAWVjZlz?Wev+yZ%q9(o(5!w+Ew`~)Q{dT9Ulq)S z^Wi!0W;g)e0|&wf;JNS#I0(iaO+OCXLFOuzGT4SM2L2MB1}}$W;7C{ouYj{5?>2<)fTQ4YSO{N&qv1bb z5!?og;YY9p{s;0dMCc1R7ACf#e~0OC96T15!!kG?&Vd#1cd!yZ19@j6q%Rd-4PS-V zz^!l^tcTaa&mm8OLUC;^eGoo$IGh1n!tb-@RTVOZ15S|5Zg+t-5;V`%e7Q@@& zWXN1FG!@SECR`4y;7X{kAwCVS zgS=}JiojLyF1Qx{9zGABhRkt83CGi~!Zi2-JR1HDo&aBjC&HItZ@3Ab17C%M;bwR~ z{0F=kz7B`OH{ca;D;xvghUM@B_*?iPd>!tDd*MegE{pySrow;2*6@E|2lyY@9qxwx z;m7b|_z4^hKZVc2&tOhF=DF}Z_yrsazl6i#SMW2d;W|_$$4vE&1!f(}J^q;E+pyU& z>rif(ah%)8_-Gq<9V%E+Y?h)FOB05rs3vdeWABywW}M@M?#3k!xB6!M(s!&^;mkel zDBmTNuEAKQuzVfIHv7r5QW9uJU4e0sCS=9K4ln_p3!A|L$a_bjGMEIFzr$dx&R#*z zbkJDPXzlLr$WD*ZnZj@jqj$orFB<7=cuCE`vZ9)@%8J6ODMovWzX{Wn_FAz3An)yn zwm2G##JW%|R^lNg6=Q1jUHX&^EoIao)?!Eo$L_*~3EkAvg;BTB_hN#%MtPFHnW|U| z9pOpnOZhwvX2H&|BkTgtf?c7)bb~6R?yv;*fY-pD@Osz_-T?c-rI7p2(4XL$a0NUI zJ_~c<3y}A~LelL37+YSyMy@*G>Qrm3I+j%(e;6BEUT&D1Ik&e_c@1h*UW%&;^KIpo zMVO|_%Mm-}rRA=MZNsbkV|^D?dZkxxqs)8aI+cbllrG+(Gj%=_cHsCZ*d4ZpzktWU z>F`)M8}hDQXaPJPD*st9R;M?hL$xQxFB7|dy&PFiOdC)b)s4AuUn89kpHfj|s=lIa z!Zf8yt^8@JuRZ=*`BUB20-6rB!q!-KZtd5~o)-3WtlFQ>iKS83Y2c?R{h3y zN6veNrk>A$S;%HW)$=+SgxA4*cs*3V!q4kM6JZ$6hjXFYOa$Hq=fTGy>nfo&@CLXE z-UwfX3*g)ECb$RQ3iZw{>o1}9@HVJt;)~!}@D6w(yc3RscfoRaH@p_!1LwfSP~~wi zj4k8k$W=^9See)|R@;d!V}(%}>!&;4G%91gdu7VlJEM4`CZ>#wOITS|2c?#47Jw^j ztBUM3VU?QJR?Px#T^R<g7U2T!PHOh=o+&EeM%3{LZ(3aQCH|BxEgkaYvBd(d3ZTo2S>y8P~*-E zZ~=S~s%>w855bq<6Y%eFJ$x0aUhw{^c_;fdm`HkFho{0VQ1#$VSOwpLli^mV@_!rN z19{&yv=nZGkHB}K%J4lHTQ7!jJ+*s(+joyuC#GP##k74l%!QnL(JOs-&M>T`nxRM! zu-rKD<~K1F!+Q|WM9*m6SLW+^QKM_Ce3Gz395MY`NY}a*s$HXF(>F5T33cIk5$pqR zhyCGipwfN^jMc|W$Q8G&Ol&)O6j|(VMifT%Lu1#TruEUyD8!8ve}2=HLfnZ!4Ib?} z-(SD_(sWC$#fYm4Cp6hD_RYA{i9TA%Wc4XJ}Q~c>5;ZX8 z)s#a#RK0EnuYmL!p$V`#)ch+6(k86Kpmf0dRE_jH4Y@Mp>L9k>Pv%_g_@FSVFX|%# zblBu#@u8wu>GaO;_M7!=L!y}QUz++)5JPEdd zN@qHZty32vSH6?5GO=~)24uZr`am~~`hBe{+Q!X0bIQRbg~cUR-?blf>(wuaax5_% zpcXam7nL6AM0pruC&n5~f3JKEfvQJ&Q1$3SsCIlYJR1&!=fUAn`56IYb)@hzZedDC z@f<6DjT5(EW80m=$j{N(&l>6Iyo$1#0;3;JH)WctAV)aut}W3`Ea8U|l@+`O9c_9H zCMAXA3(Snbn_Fl5Vpp1^C#6fekonZ&83Wt{OTeV@z~NF>|N&w$%Ku{7ScKe=8k1=R?xL2G|3>3^jJV0yPG2gqOihun@im$H9NV zTKERM7QPMVz<1yh_%39evEGM_Bbv*bx%R&x*Rno<#9@9fwG-~(_&*SLh<=hUWwTBM zcR`g8<=3dpHI^k|RmWvw%Uu0XY`>r|%CGYFb)z!ZebLa$vI={Cq_~?fO%;3NGV;w| zbA6HM`h&5}u+q28A8F4@(=w<&@ez0ud=x63kHOgbemZjH+fAeLu47rX_nWY>d3VF8 zZ`t1{@A(z$sD~Zk z$1n$e0+ok7Fjg-^kt^(h^l}5|dd7?uZkQpQGYc%D*AHC6kNA1P?mMeRRU(ymq!#lM zWD^b9R*L2vYGbZZdZZKO!K4X(L0*-weNa028cHYMK+QS!!+tQp_<25zg9;np#CR%y zic3}|w(d05Zrm`v@gJ9Ag7Kf*R}SD8aMk(x9qo^KUy);&_nR&lx4t$v7FnkTph3~-#RDV4mN-wmlM!GIUF1^ai#MU#78@;V_Gt5cnKR3)3 z9DmYC*TZZ6Kla`SKFg~9|G!`Z#=Yr=3`Lzebt*c<@mFvt+t{rWnQq7u6Xibw4p?lH zKZ)LWqjEDXHA_n?D?g=WezeR#X$49RjS3Zuiu?>eXq%(LTDgqk`+U96bzS$pF;LXL z-+sSGH(YzY&-*&(T<6dG{JG9`&ihS6oG5J*AC{nXZ+m*a%3Adpv^~bVnDVd$%mbH# zCxLa~P;ePI6{KA4y^0oZ^ZZ6obyvU@{Lb)+)H2cBMsAhk9bCh^m5IX0Pa#)ZvP|YL zTrqF1ZKSTZ(%^1SKSWPmkusFrA2*QAZC?lrp4B)aV~sIuz`Y?;no`6~_E9RA;HNan zo!V~??&aob#o%Gw8xI}@axOh~0?1mKospjab}yG(dbu*s!k>QK$MUD)jp$Y`3Zv(1 zZRPD`xir?PyY?5N)E_D9J^XrVlbU-e30mKu$Hx`T_Z2f$=~lmj7kn{Hm(2bnzh-Bn zxvigOXI6lcvrc2VKT5mGPx7?e=if%TC_i_C+2CE^VDN6R1iS~l1Y`{9d- zgY*a9S3uge_cc)C+}FW}LDrgV9sfaa6Yg(-&w~$v+re*vZ-5VjTF?4#P;)Q#1I7k` ztWm|Jo8#M{bf>UZ6)OQB1Ixh2!D^7Tx!6LG^E|Pez^6gg%`;&4`o5Ltsh|&3-(TZi zQMdY57?lrwk@xpxeb+N-tDiS(*_;K|41yT(l=@4l?M50~xLH-+RolS|bx_+{p_Vjg z)k~Fq6*@XnE8jMaCfmlklxHcOs@uc4=%4L3kMUV)UkHl72pj}n4XQ7x1=Vja2B&~a zz!~6DZ~^#nQ2q8YP;u6S>OUL6o4`g;<#G+EeuRBRJpYi+!|S;Gr)d78CR9XA%Pq8= zqbHm^3txIiunA$;N_a&XDium~o6X#UkWdFhg?5Ri-k2h@(B(CQm!)z&VZGh==u zpQCbM>AOP^VV%X0Pkd!7nSD!tLK+SCnxzZp*3CEHi}8Kcsu@~`VI`-#!Ue^rm*M%# z=FM|YP@Yng%v?WXfL3zCNa`2^GX`kCSWp;lJNXfCyF6`1z2!DY-F!=)x``Ck5OOwN zz`JAz#0oCDLUc47x#!aVy6BZ}fBxR; zX(Y__e&tgU?{`q=8L!=^BHrJiqQ?7&PoY1eH#^^qm+ey#?>MLubB#CB zry^b{)H%kB`c%Zb1ZuqTF7>I1HxEj0qnX}9pNe?Pp~e|cXBb39bdtjxYdoD}5EapB z3*LAXmU9(GMRY>Kj-Y0GkNT9;?=i~!ac;rZi6S~-zzU|qzT#66?fz$0EZ*;YDxw|v zyg`V^-g~1WUO#37XBaQjr;s5i%~FsdpF&>DBoZk{I%u zL*C0F@0THOcgWil@?uebBHp-=cTUK=AmmksytyH7LCBkWtW(2G8Tb@s;8Wz6(TvPf1{ppT@w6L~?2)5K zd@9p>%%>vWh~wPdOmB=&q2VUvRfW9tkFf4zu~hjKCFxTUZ(GRQ9`dFi&kB)+c)+JJ zy@z}%;$`H!yO~~=Per_GP!ycX-lr&gpNe>SC%C(rUcOI7ylbJz3L!T8RHnDZr>LzH z-Cb(Srw9Q>rWC@b2;ox^ukj>zH`80`Q?#Rymk4?Hg}nPiUR?pZj4bA7d@9r1;8PK= z;AD3<(;MPb5w8}C0wFC=`V{TWry|~{Q{3H5Z>ytPpI7D9?=MP+*1d@ABqoEq>Z z`&7hx0Ez2>-PZDxqOOPlejh<85}1wx2DK9%Wp_!Mjh$u*5=eLe%+Grq|$85$|cJ2zN8RANo|p+X|Iwylp-e@peNg zmP~JtPth6~ka-L-uk$HdqfbS=fppHgo9P|pQxR`y$SX?n=n#pLSXTH{rgyDRA-i;; zx{K`k)W25S)69N6EQ1+DMvj-8QSTkm52?whzroAtM`>lulI{)MEcfKqAOk$5nxQ58>(XGp2IodV@0l zm+<61qk(G__cs&%FzC5lh1(GRgSxr@QQCb7j3ow-Cl0LOQ5gi8jpKB`JrdY zsO6%f`acO~aoxf-8Fwe))1VoTI5;vWC5A;X5j`T{% z%D{djp|9Z@!~HEhKO1^J7frGML!iq0Ca&{v?zP&-?Yi8uvN4f9==*V%#*q{@(*7Pq%Va z;(mwls(;DMK=S{bU;p*EsfYeQ_Um6|dJ^uhf$|^cnuz-i!mIu-=c1hZf7Y-6Pv9=b z{R_YTuf~mB_kSFeJT-A$i2JXESAH(#Ix409m*YN*`#+4;(i#^^KRxkANL;! zukxJ1MZ4|)MZf;9$2|e}tA712#Z7n8{|BJt=~G-6jQe)K{#W20i~B{t{ukgLg8NZW^|g+x0{2^lSN$KT{Xg&5|6KeO z;Qv8T{?~Gq<8C9o;+xKuhx>DW{a=fFJnmol^gpYX3j- z>wh+WPQ?FzfxWqI;3~uYI^k6xALBX(_hjeCN73{^ehN~3!|8igHxs2;*+@J2&{$KX%enf^ zEQOz$(dBIu_%*uf;e{RV#kI_@?w5H#8n2V>K(YyoLd2!i%5nH4c>ZoE7O_L*z*eEbePN z8j;0MQ+1wM4cfbAMfwDK#YQYK?QJeiFM&22H(A)yhnkqM}X&XiCiOLP})fTlDPg#Pq;;;42UaQAp9PW7JE&IlGN~0b2@L6NCx4x!x-PFUjVpa~*K2M3cai_Pg{IIQydf!^J72}nZ zNM3cHfa$mbjXK)lUm>7yx>w$IX13E5ndtDB@YzOuk;ILwN#pt+=o zs@oUj0bPbX{N#Oj+}MI~q0WtM8EG3wzVy`baNd3kC5lH=h0SFQK7OR>)p~|rJ@Fmi znH~RI#sT~s?)+?&bysX-cEsOI$08=lf71`Ca@|g{;;Sez8MbPw+@7cy5?{SNdwHgk z8{J-9HsqS4k)7sJmjcVBr9dylR*VFCxrO{BN(Xl>>O>R`ghcWP1upTcc_dL?q}(F* zUPFJBU&@Ax^!`00u~m`OJd~(T?^d`Q8voEXk%x7Wp0i+Jn9h`b?rEw)deBhU@p4OA zv@;RKWZiC4DvHI{j`*{(14^zXJXP+7Ojx`TxWVJ{*DSUn$cY1vT5zdviUsS zo`RI+p6s=d?4AqbtMVn$qoN16T8!`PW#I}ERI7WE<@-Vts;v0V^o9~s2YB_f-ulYU zb(8ySHFJg;R;U|WymeFiNDM2tV!4{<=LKCumX&oL?V-CEQc~Qb<&U8_DX#pmv8nTJ zs(GJ{&BRv?r>U%fyd^5qg91@KF0tIv9Mc=-ylbFHFN2t`e6TE|T(UE;Oh!LYkih<#3{GPE&pBP0AQ&nK8PIL2wsI(W z*K&BD-OE@t6Foe4%}(vc$X@#r-9nd!@e!se?>pOMFHv326HJgLXie1xU0cil1sQHX zk_UI~Gjpu_Gua-eGVmLu6~Uj>Gb*L!m_ToewiZYCpy^jeD_i5MTPdUGk<#ShGD*^FVuF9*~GWfWBc` z?`*Td24hk9Vh4w%Q0yiz|mo zdJ?7OmW6UYrnjAa6dBS0!z+U2ohE;FO0i@}GPZHcA8I4`Z;o2>T;$o053tO(+8C?& zt+-2Ffy6oc-7wk}g5|%wcv3!!nf(qxCEZk#x4v@wx~v>ymJ^LjBSVMRKr3l2uGzEf z(-v5w`T+~VV(rs5@kmCCBdr*0JhiH6E@dRJ`fVpFII5`-7eCTz4ql~dAu_y zSsu~dRCxB|ZX|3qeXR(QYXGIL3`}rFTV`A#loyu{p*;N7fq;}ZO(|F(-M&sXFjYK6 zgZD&LxnCZYt;Llp4_|Cuamc527snw}Ra8vR{XC7iu%Ou)$OO;CZnl*{$|P(LQLqxGAdm|!pdkL=?>58%dGr= zcvqoZ<15i8ex~N$JNuEZm(kwLl)NL}(hr`L9BVq>LNbWsBI0QK3gIa3v~b4pS&QiX zP0(c6mADgCRI4-jYO_~t@mI^4hoYSgLJfEBfP^Cw9c!db`}b+4jE!2$=6ORjx>wBJMx&JwV_u6WA}WXy?l` zQ;S@s*HQSQOL$8cd2F-*@3VkhW3!~>j8?lV-g{Oy!9(VI1iugsu@%Ze>CF z^lAGQJtm$RRwlxf@RXG&qBfj1)H90Fn@O4eo?yV;p#hgSMe~6aeNN$PS{WX9)3I#{ zDuVe^_r8o^g&OR3G}UZLQ#Xg5c6F#Qd2C`*d0U0zGC{L;Jq{=3cz7siXINU_XF0}S zJATcxz35#`+~(SBv`_H1)F<_A>3Ci!EJX{f)cXX|gKxEkH{r%xvf~@lt&nG0Kf&vk zwVGC5nmcHrZxX?pRdX>f<1IHk!YdYhOW))Hch#*2Y)X z4y->dh$zbrHrsw9qU$e1;?oC5v z{Ml)mcf~iP4PE`5K&vZjP_stoO8@UYq~U;ut}iOI@*Azi^(4RYEtH z$kQfKzkA13)Mm#ESO~+fQ`vsOw3lCFsp2Gmm87aE_x421uI$I7uNOx&|={2bcs--!P$XLVWj1}se8f!@-O7P!63I3$+h1s@PgS?9>`$o-r zvmdW{J^pO(aWx%bbNOeMa(jrw;1hJa-+7m`#aGmNjXl2||JpUMrV6DVRr!;aC88Kp zS1%slh#=9_8C81+t%aW1T1(p)!eONSjrcnQvTwZ0@)LbMz9DT~G?|}a%Fm%L1Ux}w zJZOHJquY5L1x2Io#}n!N4j}b+Sh6Z#k8kWZt}>adyD|xVs15O5i#at}*T*+x2FdCd zG{$~mm!%d^x|v11`MpLFQ5frvtv7r zx3s}YV9*iPwr_6R#Li>5EIewlgr5KNtfoJudC10{%vDs`kp`ABdzOpEcqVioYyKLW z>hw%C#k$0#D(L32X{`R5AGLnQ5?cE-*9p|Qm#?|b)i7mIul>7#o)&aEi819dSOMoT z(^=&2_L%8i9lQx^4pZ%d)YVKr_^Y&_kN~ZuaR~#{qSmQ9!-;`z1+eS`y@?&5W%XZ z^cxaU`pL@Iiz`$6$>oaSP}|4n=n{9`xFLJ(k9Z_;?pm{RkEk2JYf0FZsM(hNMD!Qj zd4-;DTiOfOcLyD}*e}1C_H4I=$?NNBFLX`bc1E2;?j_@T0$qm9{)|q}{Zs_6P)cd* zRb-TAVx0)M2kh@%|GziQ3YnmZ8!W^V(KpBe^ElGI>&BN@WH(8wM3UO_NH$UKito&C z;H_hCvjtI=IZrl&dK+1Ho=OfdO1={M$kuZwVbwfK;6uaaMOwa!aHaoOZ> zbh(d^huj-KNpFmSr$B-xr$|tmEqf%&v?j$M(NravJpOQddkz9s;3@EUYl)(a)=A4Ca))_h-l@mL?t3xdk(Tg527gy?~u4ae5;_V=wM0AG>#%dIS zSlr^xuBm3z`ra5Ds@!7VTjaJSv`u8oR$5vcf2EwQEY~MFD<%zjZS{=iepzYK+NAH3 zd)HT&ugih7MM)StY&NnZCD?fLi)dug1I=To?D9r^lI|XAi}1e*wG=9=En0G^$W5zk z;q4(YDc9;M-<$}mm3f7Ixw#^~y2ULZ$5-Wg4aZa2deJScY;p61e#PHX zXd^S#pIrOpw$;m%!P?A|wl;&@v{-4|0%0xbh_B!|jOCq}scJvVCd`9_j}!WMd9tlY z(Q|aN-n!4`U$WR1d|Diwwlz_6r=qO6v$#4B8S80ov;*-w(DJ~=YL==>m3`dx{+9Vw zT`J*=CgO+qei44wt?4YT&Tlxfr^L0F9Vlg0q>NA0h=bRDA_S(b_O&1Vqz=Wk{S~hJ zSiT#oZQM?MdVSv$E50EN^%_r;lvK79SL8HYLgg_>(&Tsb`P32es#yzP}vo?ujQ&~ouKFVh# zN{JX}Zkpr-XRf5EEZ>}TrTONx<=HtVs#jRmAwnnm(?e3zqqIK83YbYNv1b*USkqVJ zg{e+pi%wn7W5K%SW2|dhX22)7x-4gTf-D3BwxU?$QFo+1& zth5y<#j#Ge6~{U@M<@>Fq-oLH(xSJdMb}w&hsIYwgVi?6nw53qVS4LtB+TZ&+jM7h z)9Y6}XK7Gm|1Q5R{*V10)zoe9NtfLo4gE|^+v!G<8#>}E#%efFZ#~wD&=83b-(mM{ zjc-B-<+bM<{&x{t!bXqRHFuwm1h1k!qq`uJLpPmyNl)lVXJ5-;WQJS z9K+ydke>sT-}0_mDe@Yo&=$Q0jnAGsT|2g;hpj#8T1ztO zBTq_x+oDeJDeOxq?CiB)QYBeuA-5iTK}oP)H{RcVG2XQlTcjs@C52lFk*F&1`%V7| z*o(A9to0S+*G(SOfx|{@tEP(aY(F8E#H8`cdPPaxcb2qow5Pjev&zouTWdO0I`Iv) zfedF^!Ka%vW*`Hs)75qr1A4&pLaiDywDJifqbVcJxgv5@1g=RLig-nBdLS?3EoOFc z@SdvS*==45;e}t4 zTCkOg*do3`WHnW&#bwd8s>QL9sx!X2Q-N%BnMNRg50I5Et@T2Jg)bLFUe>gLNQX$? zn=116y=ak`oHx=*cRIfR4A-h%)c>Hu7mbx@QeHt`vn*j053zQJ(rERWq0d9frPOhg zs+LW|W1kJ~y=Po$)$$4ww&qz|Y*FP_6~17WAvXPDTYEOQ&WRl{i zt|vcr){;-{QWW;xZI48wscbAc=;)dQK4XzzYLPt%c|pa!YkxU1wY@i&3{^X(Aeu{y zjM9{Ilu;>d(YlbZt%@-DK<;{KuMb*`ey6OyWc7fcMMbmT-kykNwI548ZTwq$e51Y{ z;H79arhJ*YWheNn-e(|xGi+9neVyOY*O-(eF~dkM5>i}~#hRNcW~{2bscZ;E#8V6Q zy`-*QZGWs~MEw{=q)w5?vR^AjK+^rJ9e8|M9hR46Ww1p&-jBGsv_#a%4ecN0ZqD_G zTU{~sX2m=6ukjOJ>|UTMv-}sRoJ0*Ri$vwnVZ5w&@w6(MEU#03heU8WOG}cK+T(cC z?@3ey?Q5SNrjV$ZQ0Ws?W2O}nuPhzyXE?TAw;FTBMxN~TzEB^jIyGBq_eLccY*2L5eGymC!DzEMLI7<-fQ zWy8jhU~>=!mi>eDi0wMO`b97M2kVvU;*IK;a>p|2zN3L)8@$whY7=fA&>ZXtWcbLp za$sFIpL_1+5TmqPw7~X4ab*>$toLc3rJj~L)3^hg` zQYV1+8mH}_>Q5=Ipc!ZQy<-C%+g=+7tn*Brt^~U^c*oYXB>eT*{`_Jeo?0WwgTC)J z9zp6DFWI(8ZPN?ebkS9N_qhG?Kfru}rkk8^HOKS@uIOy0l1$@)+fy=i*3bv2B_K7= z>!WjGQdYZ`=S+u0v7S67%OT^4mvK8Z6ycoytX<2{oGVo|-5_lvq&?DnJhoS1*$thc7WI zKedX6BM?rtfCkny*es2-_p|oZezx_YdA?lp+CxV%ptvTZQ9T|~q%2*leu-JGrc`vx zCPuyYdzLRhJgB*(%5tNUbRQH+xN+he8Q+2T39{GzRz_QM|1SG zpEpuwayEY{w0V5WggT73GKcwIqB5spxIg7jdJU&E_Jo{7#VC^l(lss1 zmtKE4e|y){n{=o;HHdWVv;6a#(#ifXz7H@6X;#ZNl)ddI(D%6;H$Jad*1Z-g^Ly!F zAuZoz+7_}p+wW3qgh$_C-5#F?y&+t=-V6NIjHR!slA`N@C$$8QI+67(4$g4*JSdJ( zK-~{D&8VM2vBi}TO{@%FW;_g3c^@P?pE9q-3{F*wO$`74y; z?W2`D>To{LIcgi!~oCw zSjc+;YOe8W*h6?KRIYdZV6BR?^sE^5GJEG;F8>7O%6SDR78cmuLC2$f z#i-vyoeq`jt;r8Ud=<)tn0A6wY0%f34mAvaeZ84bXBssZN=>z|w*YFmQMFJbjH-j; zh#q$vpd{>ly%kWSjnd)mF-FCp&N6B(lt$>j-a4ppM%@B6!KmAyN{qS_s??~vp~{T9 z7iywW_d%5#bw5SCj|LRA^H4XWCx?NG%=?SRst(${N&I>)G8Q0E%;Hz?Plu0AoKo`!O@@KQ+q z6Ux=rIKF1w|rwT2sg?;}!x6?=mRo@9!bClIG-iFF_%U`0Gn1YM}ah=R=V&sJT!i2kM7V zh&lc;3xlu=L+Zhh`ddg9(+Rm}Ja~pXKHk^+K2)Z~w;aKBdHZ=tb%fOLVIziN5E*4e zbCxb!Hg8TtzSDJ-KgU!cdW}o2Ub1xglKeSK7uPMDS1)bL`HSZ@ELb{MVNi3vaBjZS zgO_g_mk;JYxaU6sTk==c=gU$6zu>9M=HxG4Sig8y!<+?S{IgNubaj5i%DQ>UXVy0? zT{drSzPp7YHEiM3E1rg>OY;}cTCy_V@$#20%a;zlSxe^3%dcO#c=poT`Y_%(Xrc1` zh3N?Lghuxu3QWzpqbbGH}F~=D;S8{g^mFp(&X}#2~cKr>T zJ8yR5RRtV`l(IwO={1#}bXylszMrXLrkNiNU|oO1mL(0@r*kW<*Vi(fk1ZWV>IMCu z?&)WKjG~XyF~Ag#I_6l&8P+gwMMJ^jCGysXE3Mb>87DpgmD}2zrmx=&U*(tRK3=}% z#7zzM5Pgy}hx;?>XOf(iaEfTfNsc~7ZtcRkSE1-bl71e9lTSyL zNk1x8>Ay&FcEYJ64~{cq*4)~8%SLLPT zkqe2({es$Au^;CqJ&W#D&yt*BRRqp`T{vHZv$YEcO_ttFB*KL%n0(Rb5zGLlogj|n z6^?AWOFO!8`Z^9S?PQc6<6vmrEF&g4*kWgR$3y5x*5W-`W=`QSvyd(2BnPYWo~#@v zIasFmWN$dh!Fs(X3&0^qmf$_v>J2%gifF8|&YQwPGGvE0g~PLCkvHUw9zixVJrKw8 zKB|Zm%Ia?DXH*e$Alcnbax_rMvTh28XUVp1$dUDWPu6rp&Zyx$OZIS6I6O<1aYN4V z(d0|EYm=O_$d|0lCOKotMQlI{XVfTCD9fOspHZU;wYLjLbs?*mp`Q_FksjH*3^}9D z!jCLVrf{eWZB@6la<0uVTL`>n3uTmztDI7w{%3%tJ(vY3QkTY6! zDvO7XLlt=&klxymGc4JOB9+u&uT#}2^XrxS#6KNXaLM`OMvUfR{LGIh&R8k~q3gmK z=jC_hj2P)p7ELx33UR6G=4YH&+m&W{cXXGfat{Z2JcS~0e;&Oji4&tJ+PKg=e*xr>xL+$Lw z8Rz9t11{9CISa0?AA2Em|$8MoucQGl5r*Dya}2( z9Qf|iW$44Skp7V7LIneyj7A1@S7V3)x2ws$fNMtM0*6@_3mnd*R2SEX@Da{_PjJ($ z&IFF68J2+KjE(DM?Ezj*P8S`gh z3oW>rqH}ykN=HLGSlT3$?;O> zWxAKe*r4&cgx+31h7+&E%PC8pn~ATP+2?&fa_eXQQf5)&U5Wtz6@Qg}!ZhCIdsQ=2 zdm#Cn%5`;+cro~uctsmh+k$w?#}B*tL#cyDS)5rOJ+HK8^3=%}l%0KIY~|yL3fZ>;`GD`7J?|>J9cav6>a3qV!|gkG za;?1*DaH*xXRdMd(Cu*a3_n?!1Gf5c)~Y4SM_^3QjCqL>*q&UlwANW+dMJov@vQo* zE#)n6k}B^5vpPz-3|7i&;U@nvzOs15y91Wg7B85$Y@Wrk*^k$mF;w~=@j12jB*nYM zk4Gxw<>US!jHwwHXIsEAz2OS8D~QD}_`rhV{AEiQd!f$w772y_lMJYhe2xoy$o3oU zIlbc5AX6l1$26V$yo~8pLTxXmFg0K)_)$>p@nhf>;N{?a5Vf>84!;UIp^*7Fz;d3oZv&gDb)7z%}6Y;5}fB{~E<_0JXFq z2Y&>v1%C$K3~mFNoy7hCCcw8r@*Eq`n;9*540tPe8u%%&2)qp}25$$;!8^bULCPp5 zU9oq9SAw4buL3^{E(Pxb6X4z89UyfX`#ku0@GzKo{t>859O|SuM2eH|1cB9sTf5iPs za1Zzm@GbDi;GaP0i~Tc*EpW3f_IvOzxUuo={T0k+iv2b?2Bq9UK4-1qXt|z+7+)I0&o(j|4vk9tG+o&R}pZcnr7%JQl12 z^T1^w2Pk9Lg2#h5f%)J%kT?I>z2M2Y-H-P- zuoNr;CxOF3jb&)4HhTq&X>)->eP648ptRnpuz}eQs@|(TQzTn`t+_E-hDOg zC*tKlO6gg0cBN%X=_!&9u9;jEJ@T}_{`m`yzrX(ZFB!k%kBOWk-kiPh=WBjBr}mET zoPr%(dmDtYP}Uml}DS9R7Q$k+*qo21VW1n>^sH9H&Pn%C^Q0SJ>d5RXk)N_WJ zJ=jgvMTwgGIa$!8Lmu1gmdCP zBw5pK<5r^PAx<7<*PlmHP50U!>0aAy@rHU~_L%N99)K727w(aQt=)EVu+RryR)?i#erajxgL?7cuo4&U!}W{cGBDP*%kbPtD|P!-^|8==jmbA9yH zb;R9i5q7qn!N8*L?62iyuWe?K<3!)993dncl${Z-p@wG`*X*rlv)sET+!X>TaEG^d zr`2#sa2IL`lq%^`Ay0*DFyPdPD~tD%(RY0+xjw1pp(YgN=>!*LQS)2d5U~GKxy7*) z_P^|nw~*i4nQU-?`&C~poAwWKZ%=V_Z~aA_$uX5B2d$b3ezIqAl?!gX2pnXN+6eJ!E>+7Lm24=qB6az0GT6)AeRz zNUQ8{d-RHHcGZt-itaKIp|aUq(&0`P`Er5VwqA6otfa$buTBMp zT%WOy6Heh~>JHodp(ooZCZ$#dNhx=~{@ixxq?`pq?hjZ7=o@Z0^=k%?+jt zVn^E`))dgkl(MC+gus&)=mOiBwq)OM3Ng@WY-~kq0WGPuP^V7msCR9AElr&; zL(d*R1@tAR)WY@p?D%X=uv3Z6#%#yS^5bO>@K%oe#h*nT%9HKLWNTq`>r-^np7a1c zY2G=#mQH;ZS8k~vVCURAomQ1Z&0`8djc<91mkkT?n1$ffP>u#N1{}5t>ktz=_)E0E z@p$!t#NOA-V`|Rq0BQx)0HcC0*$4hA?RFG|_igz`%Rr9b(--jI)AXbFcYJTdKkoZ% z_-Wev?(+-hHTM4HjlCwFd+*YxNr3(Sb)TfQ_}M>rjA81sCk4YR+Vn2> zEyBom=b*e}<-`4SPrr08_%wM0E-iHE4n@o_kLxr#c*jXyBvp;`(OjPR^_sSrRS5m; zGtHQhMw=hUIcqFWaUX#AJf}}NV@KNVB687b@Ph?zw|H1EcPUGN1!G2d zP^#hr9(?9mBUyY+{@!inTK8GN=BJhGeztObYO&io#S>YPPVOd)ausVD|p^FPGt5x z*7;Sj^|Zo0o3!0J&iM)cmh`Z~t!VyucHqNDCe{?#|Em>lZ8`bSSGYF~bQ{>HHv8%A zPogN%X9dQ4nHDs>n-yk-ksslk>YMBrtZ15IIA0D z_LWr(Pa{MeR9D+2NsRwX&bjqw0uO9yGX_ zlIs49-sJfO{bYnBFMgr*c;%-!9CzI z@Ex!o+y_$jvHmoaRp7DUC%`7~TJUjjHMj-54tx>39{e>J1F?4RtpSe!Zva06#=#-r zTJWRbP2hC!W^g{Z4%7;G0&E1S^Vs#^r@*_w+rh`dJHU-;N4&&_<8UK@E))eycf)+VSfQU4*Vi`D)=REICvj82K)+mKKNDe67YU-A^2b5 z67Xx_CqQH~_7?a6co-eTgJ3TB4KN@4CO8Is2rLF41|J3g8~iEw2)GSIwqq^ex52-H zkAd0DO}+~r4L%N@1U>%bjg9Q+^fR`7qp`@vn{Z^75WcJK}G9q@PHVRW#q;CWyhcp>-)a1r=Nuo2t? z{tA2xd=>l?_zw7IkU5F>7w}B*ZLkFF1n&p`20jSB1O5oy3+@E}0k(sD1CIR}Ob5@V z>`jpBX%j+51a*JR33)}`mESH;Hls~a0r;q0KzLyY!FxomV;-2 zHQ+GtDG=M6u^)hZMUDL$90C3n90~3NM}hqrct(Q*!7<=qa4dKt$XD0cnIH;lV(iKA z&H*0<&jq)F6Tm-!rC=Td)D(ycqm1unPP- zI0gI;cnSCvSOfkP{3y5s)6!3Hn}HiCaaj0(7d-vvHFH*3E+ zj7N0k;kp`VC26iup9P+I) zNPRz%Ti07$|I0O|TR8+_vIyH6<~6k(+~zfvgyQMp*HcLhqG;$XwBf;X+fd5*3}(Ai z^pJd_@^`0b=B@(!C z_z<_V6WPleaBs-eiVKhM8-m(_>LK_kO>#5+u-&)fQ})&lmV<}kUI88j(uQLvfU7{| zfjY1+?2He*l=K_$Eqmrftk_?|@Z{XRJgmrH65j6Z$ws}qEtB;A2l;G#%UL?%lBpL@ ziI$sxG0G=QEiIdzG&)})qx2TJ?)GSrzQ@n`|8_>_l_0(B=q1>U)c-52&}$Qe-mrKZ zw`cr++A96T`a6Db%nxoo{>AzCe0jqguUuz4RoGq7^R58q!iTywQ=2juu9!FX|9@8L zZ6)sCYdgVPRFAqc?I!pmeWChorh5Kv0#T_}>5ro}H6mwvC-{`xO)%JaMesyLykaOV z(q?)Sd@ACd2gL{jkN01ru;~j`V7%!*713L!9hl72`=n9WPKIKXA}sHKMn&`%=V?_T zQ}1m?Mf7H6mXNVb?NbrG?byN3OugS2g=JuY}BHkE=7!CWG-q}7C@vee$WqP$wVOc)peIn%D9P+dy zPaz`ST_NwDkoWbFryY9E-xDG4>5$hP@_rKXei`z#2H?W}F66a`ythN%-$PzMhFh19 zOrMH)M}@p&L*A(&uQ24D74o#(&pr42kauCoyENoo9`ddVc~^(L&hn@y_Cn zOLsH9VxNk5RUvO`$jhfFG`eHG-lwo$?^6-)2`FBbiREdZig;U~c#Y-S>QhK8lw!&B zcKg)7b|247P2B%uA(}GykA>*}Scv|Qh3Kvp;{RhIx~qlw|FXrr|5%7#LphYPTjM_# zqW@zd`v01R=nB($hUqADp5=wAOJ}i=YP*i}Y?mgA$n*-MZEF7BG4`G{m+2LW-FK*I zD{^-;nlJ*1F~QxY%9dTsm_0}V@Z~n#+O2O9b$8T3`Nds;170$Apvo_VCt-);Rl$jkikZDI* zXVS8q6nnQVA|iCIrq$0kYnG?qYK9VXrtCwt<|b4QYUeJdv74j2^`PeH4%44Ij!@|P z-@?8!+keRxW@jU~Q(Ktbp3u-nFq<~n!rY1fd)x2C7{zVcY??Gd*YRSTZT{@Et(WqK z2|6s}u`_Z*eD#L3LFEwZ2P&w*6dh@P7gKci@peMe zyO^TuaFy06AeYV_WH}0tRhuSV==|K}*SuMi%c(wi%}?Md#Iz;8y2WcehqCTLWNTVX z%f6KJZb#YbV1y|bC75X8&I$ymlXnlwTr1PsgJ2!5(9JgOaAcurKM{Z^t%CC9ti!t2;* zrpMLJWeczK&}`u?;04o)r&dxTpD;C7VsX2bLhRpvBda+gg*WnjgU&jR9s+vTK`UCQ57RNH)GH3wf4xHso5?+s3NG*$}+SOy&6zh319_ZSh_)3+J28;A@KAd1 zPw?#bQ$KBsDOe6rycrnNYoh{eh*3gP1{fN$YLEP2Oz+Jejp?;ghJIApH|{2joYiPE zV|txo!+cL2(!(rps6%4!wH;j86BwWE)Pb806OP@s&!6)loOVD%rCQOw?VqFw)^l3s zV3|0G)xDu)Ak3z3b&qpJ8o12r9=#93iPb$PoSa>9!nuz6WUu?1W_53aWjxwuR`-$_ ze@|oZcUkRuKeb54pFeoUvGPE=G?)bD`Pk@Acg2Y8x+|KTbysaqTly>8%sgK*{bss5 zr|RG%$zS@D{^zNBo+rOFwq}{O*?d6?Xibyw0UM-^Gp}1J08S zSvKck*nF~^9ly;7u;X_e`xl8Ey|_A4fCZxtri<^{j$bpL2_5JwPL$TsuuSwmpdG)1 z^-oju(BxyLLVrLzeg}KnE*1&x2{wnLFT-S?J`Ar}-O^j_<%X}DJaU9$d!m9#0B0y# z?1%&BDRxWqD|a~IkZvhP)BSksz0reQLJMg&hip?6mr0AQY2YoCH6oPz7CEO>1qa3p zh>MehnDk>N!Mr^%4nqs32hr(6n|{#2jW>B>7{R2U8h5itpyv&YZD6 z`s~WK;>y%M`#rUmX1@ErpVs2~?8l?6H*UyY`y1C>TLZ&>KT)a5Ebu`L`*oPrw62Ez zlnEL3Ym;HW)U3Rx9(!+}_t#^$U8>=SCkGRBqdE5FPtRp9?SP#*=Ny?`F=>!tzg7(U z)qlVltTX^1T+Cp%Q{(H)%4Mf(yPYG0(PA$%5;5La%qCYa{FA`e_|E(WsR8GG#ipZe z`qn`G#9L(2E#+*VeAwB(=FmsdkXw9}%(s2pS_Mbtu>UeS95&yRJn5sz`;n*iPm$>+ zO46T~1a{suFG;H^R}oj2yJpzr?7W%uQ%kb*re628WMFqx_9P9FG^eR{((C>v#C(C!Q_T@nv{K4o8UmXl-&chpfzKm>VJ{mPw3M8sl~!;gQC1;=LadxYOA{}aKV;BSb3Zd^ zNtaw@YRzpdi9VyH8QbqfG-zlqly$JZe7=<9Zy63cB}7PGKj)@AL|(N|RAvq*4b9{p|mWM0{AIMbtBqzC>Kd(hCr zz#5;7%?xJQz<_2k`f`_h~!*_j)y>$al-24x{&;giiDC(9uMS zpX-;$eK)Bi*W^ zv$r72D<7)Gkqd2#wTGSoyA7(?qE%H{Qpf z9Ip;)gz@_FC~bz!^={R=hVgXhO6AhmJCVeVHfk;F#K#!54l3WMTcA!b>Ncnojk*)+ zB%|(zDlqC^sFRI)3`)XBxj-Ff)H6^YF=_+U@kW*B+V)HQ-30|3>MrOoD(CqBsF^2Ey#B<6~SsERuhjmz1zYkvtw~p7co!GnU z#Hmoh?{c5$Lp!1?;J1KlD`KAHtbmhG{v2n<`&KEvUeVhxc-H3vM)-8Seio5FJ9<2Y2))ejsUEerjO7(@5;ovs`@CyvUb z`k`y$uuGD|QBa;iQHAlCYF{1F3OOS=tLo|4OOnHRR!;{KlAKXIT}Ka6I7F?(2adyI zyvMk7?7(qSPqEYWA}zB?nSQ@~@rXwqr4#DI$B|Wj=Eu&gj~+X^o3i22lX~)=MGZ;=vFP@D4)=$u+*c=~yDIp#v(mxoemPP#{>t4|%Wluw zZ&UZXrzo@?iB{w@#|_U<{k^MJfYE0ajkW;N3J@`^08b!%=lDg_lU4xj(CqT-K`X#o z#>#E@o2K!R-$JefX$4qzqIn7bn7?lNY)@r~{~7-NqB#P;QZ75~-_4%}*Xu{}L6%ED zB{e@sdT*0<5XA4``ZRuS9wnFd?vcJ6^zC+w?_&5r#ZMkxhJLi<9^>xv(R8yPhWLJjz2U8_XA8h=p&s3 z^HFwZM{<;c2Cmw9*UYPB;^vOxi^JiaSq<~9S{a_)(Z^#{?l#P06RbNnA0D34(VagL zW&>C7Q+j7|F-}=m2iS==jREKq6HiM886omjgYybAm>sFP~n2N!`q0PdGxbN{odgujuP@uP<_ZgkS<3ZNGumf15X3fLA}Ie zfa+rUgXe*qc8W~`4+oXkY_NOzsXmnYpcuN#`cvE+)~);$MslLE-5vz=koEb=0u1T{ zFR4EYP~~H-%P%j9t9+}x%<7O7Eh|h^*DYJPq+$M{b}TAiWmD$@=PzA` zc_yn96F+>jaEba=3)tdgOFwPKNa zk)T-iZ^}JNo%-4ZDNj=xXL6|xPv_E)lZ94J3qh3==Tu??z^lQdKu)W~hJs5$mGd&N z1gr-y1sg!+xe@GMj;Ay3AFLd|L%8ncs4yx=WZL^xSY)mo=a__rOnjyMdMd{(U&2&w zbFA?O>exg5=90FqjTgqgxfFr=P_=gze3v22PW!f`JX&doZ6-J^JXkR)Q&jl zJXEUcb@wk*9ee*SclA4twjsA>O8N!v*PSzTE2sJ`^!+pX+fV+Jb=2aR_E-6u36nA+^oHY^b7lE_&PH0juLV_3 zH-blkH-UNJ&7j@^)`Mq*O<+0rNli~eZZ7W!;E%x#pz3xb*j--g;2*4y=pcP(bkhc)Fp`&A@a5D#g7uY!4e!!J zsOt5=t^;H0#7q^fiCI|l>JbJLM89LK#b4>W`+E8Cbbp3!@(b=eck=#q?snLNyxq;+ zkG$v?^dOQW-a*2j@;nol`URDVe)JV4M}t81{iHFbrCa)#SP@7+ADajs3tk8w4^9J5 z0GEI#f*N;E0&fNjK#e8HUhFI2X`tkXIc4l|un^n;4h7!?hk<)Q`lguD$}?j*;BfFH za0JMF-Ly;$2gl+*2P_891IL4m;aYQwT?w8GE&@wH)om%*U0xV>ynLRiD%7ug|022V zE-wlrc_{(6b&(et+cbH}S6uu5=w0@g7je{V8@Sv+t)4(#gE)cKJ?X`mQM;_3vE*QqN}7CJJ7Pn|m_i zZR-@5fw$xS7^w8~VIlS;$Q;9Di~cS4bKJC_*bZzLZgQc(G=1MdPq4t@!&2OkD0dD9q2fybV~eGSO_lt+6o+cPV`7Tl}BHjwrk z+Y4R~_NH87{2v6~03HLb1y2E~qnLK0t^=8Cne7_pP~I)LC4Y>^`^j`V@eU?W5-R<= z%k=&5y34e}s2pbNDovW?{IHew=qd!l&|N&Uv#OD`sp zc6Suv2}Hhp&VpIXW;oM4(mQ3Aex0J59K2}avucJ@T~)_wX~uwj0+p>~-CHrZIrNNL zXRa<|z!CNc{A*!c;U6XZ3`~&E;-Pxu${3)@)>VoUFLkVZWtbXP%ZCD;?z{_3!%;GU^DS~MVY*Dy0Gxdt9`4K$>EROS6sKaE zv2dvtMY@>d$;0c@x;FzmH$jH#ma-m*rZ1xC;G(}#H^N8BjbHxzrgK+E_q;jj^>M%b z`QH)pNygt_%gz^!|HG=YiYHzX`A6^3zdg6lrmrkFyI92Y>!08DiC)X~Yg+E{xBvRGBcHDwyZGt#dzK(@8ozt85u~|xPOtrK1R-0}jQ63~{F%FO z>4%~12ixiMRJhBLHtaKg$WeaCiL7rR!WnaxVgyzxjh;RI(xuC;o?f{!|NMmwn3lvm z(yYa^mMpAY*f_o7{23QdoHC<)-r}XxSJf_@Jw5o4_8}+}`tZxj?bVo3Pp%547UdVr zn_ZWG4zRE;U+z))h51(+1HKr}QSTgMxqD7NV)YhR2A4Dw?WEn@4SfukvvVZMX(kfo zGz2+b40&}t%{Y&>5V!eMrdA`27xA*v9F^(i_*BGO3zcUfw)#}2x6P*_o~+O5Zl<@w zry^bl)NvM~q>rOAy>g$5cpF0ArjVDz!2S^nAsw}%GQF8Th5nY1w>#wNXxi}>;(njX z^d9i3h*v@(=`PRpsfahEzvty!hz6e`%{~?Jc7?pwkaumwZDs4{ZT6{5Z;MYwykVK{ zZl*WFry}0DA+IdtT@>=BguE+5-t3UKB;+j%dFw*nEg`RtNz+M|k7s-;)7#)v5qo9O z-AvQFBMJ>rhii5#DcS8)ncg0sLhnwtyPN4v^{I$AGvv(;dD6S1STenakf#ZzkN76OqX1ID5^0k;^l_C!6C08KspFJgKRaQ^Z|Ml$d$&4!;gadts+;Z%1FMrARyTLHXLiamw8yv6-_gsQkMmlb zo#$W%hePMG>6}gJYgXkvx{{AO+NK>}G2LtMeLpDQ+FPAfTwT$4g!Wcf=5U;&vERrI zZMW#APO?t(8isMJxnvp~^Itu6N>gbS`C&IXllhtz>%p5FW`v?JTxIcLt}RvRtAP)wY+uGAB_nnZvVe(@x!H z?RHwTGn(9|kKE8+73O=*${@Q+KH1gn;o1bf`ltm;!lHkW!ti0-WXp4qh$Mgi2U>Zv zk2=@05?Vu4P0?Ie*gZaUc2hJb`@f^I5y$Rpuc3fUj(q9u#;oFKPJ^G8f2I~AX&J_$ zXRqNSoXxg_VO{PjC`Yn&UO+Q4p5Bp~N+%DuMsr+}{9+9cmnj*|(Y-EUXKFydTrGT# zm1v*%=6&s)O7ul(zuejV@}_83P>eeKO?CUvOqL?ajj!(T8nZ21{hOnDmD|_OIeYAb zag=^fN;*=WpTYCnwCZ6=P|POHIzyQv&7CIA=JyR1hs4dqwWhPV%!w(U31D-P*l&WvD*s&tDaL(bBy_*SJaQJs+}&7#~+-p7;MN3yWY%FeUi`pT?z zll$yj)a%xoece*ptHBDJg9|QDvcM=WC;xtXzCoEeV3qZI(oP@Dlq6o;m%r)P`7ErK z(JxrR*=cj4QPXcKn_AU0sfsEMo37u^UDG|1E&QoBNuio_m-NMVXZR{cQoE^t^pMb? zQ`+esZvD=g#Q5(0PJh?$Ab^V~@vu*_ZYFt;JMop)DXCW&>NOs(TyK~g3NRjY9Ah8d zzIrLDn=>s1)uDS4R;5#m!tQhUB=oNm%dHCCk}(>pmKF9XS>X-IjCE!v@42Z3^PNEA z-&6n1*A(@~%2s1uO48ExXoOg`(Ka*iMEwrOQ`j(c?9Fc&$>!=pQWB-p+fGqPR7Chq zf<{OIS(7j_r?9%fl~LLYc%y+>gC<(ivggO;k$nhb4x@w#Ns}FT*%N5fpo_A8q2V}H zUbLgQEU(^<7**%dCuIL%a?ZXRpKs7Obf3vXXH!`^+FjIwN~xKS&ykq4(u{%C8Y>c| z83_m(>)YEjDZRKNZ`q>IRVW*tyL~70r1UP;*kv#}iv#?U=%%s)i=Q((<_KhjhiN?J zc7hX^kk~j=YJ8Em`lJjopTpX{R5C$T|@ zYR!nR9Lhl`R&A&R&I{!yC5xMh(jgYj5U;V2@LdEoh_)sp7;&={?F))Y?I|BZa?@N| zV3cHHh^R$lEvUsexq4B?qT?6oNK#W7N*|K#D&Iyk#;CD&Z%CJPAt1@@1_|k!KkV-D zZ1U(bro`tbCLuGF3eD1FN++Z85>@oRGz6WJN>tHlayl9b%%Wp;(*Y~*d^Z--6DNz^ zTEx-B7!-iD2pcD`SD-#JzJkJC`&Feu4JaMQrz}BKZhCRF;~JjD0JW>#bs&sxyEuF= z0k7FZ|Gc*;1395&lI`6M@}1u5(_BNxN7&-47U|?!kQl2Cy$LFwiu6L0Ddf_kO>?eD z+g!R0#D5z8d<{t4kFUt_8jev9p1t-}(yLy)F@mP2UfDPP%wkxN>$vU9 zmKa5pre>Kzowdzy9btTBj%wLGUJWuQpob(TxdZk*89LpX8a+j8_ko7v@Z|ZQjf0(p z{j=NC+fR|8)U;xeH-XvL8=qs~vywuF!miGjq0}j*$Dy*ii( zX?jS9LBHLRRtUr6xu%AB_GCTz)(+m(uy2W^llKo=LarvCUF z5?u983_62T%Eg+PJS5~nEsO!@41A)##-*Ip1`~>~G;KnmQ0#27Eb9d%FFU@`@=A}e zz-x3ZA6Y6$RL!+wnagucT}?)zCS;Tzck>FRas{E@%j{Z;oY0#H0lT8~MDVEz1~aQkW>qkT^!O(q!A1o zA9iU;K)JN+4S9oEh;qF1p^kECff`~dxGJQUL%Fov9P;jhI^Fy|67pn-NsAY`p3Z2x z=YAK8_kON(S*CJNyBey%c;A3J&0^UIHOiRIZnR8e+W9h18d!&NALZP%dl%%U&+cH$xS=5K!uD`+8r2I>jg%QF0;XvqItg zt$=d=)<8Lbw?R37e}ZCNg0!Tuh&9$?IULH}Jqv2E-CYXh%H?&alZ|(BR=~R%%BAo7 zP_9hJ92S({bxEqE(BRidwa3ZHpEyTC^avMWwA)l=u7l&+cZkIVk$H z&-*^l=N;I5XaBo9JNKELGyj=;LtDE&0vQ#GYDn+Ar%7^6o*+cB{hdSc9~eB^%IIfe zvXI^T0bIl}A~u~)&*&Z^(ktu8A2Y*C-LDz^Afpj&H_NKDW>!7hm$(VN!JVy{t71VKj&Q5rpR)e&*8oL@2+V2Z=b-EbgGm0%ptA zb+aY(1F*$Su6LVnV^R35)5GYeaYsW#^*DeOR~p@EqE8Yq>T%< zdkgpow~rFFJydNp&-OjS&p76R0xJLvm+d5RPUDIK62x)*H~g2l7N7T~XDD~xDIDJn z9`rJ1*UgN~dy}JWjZ#8;&*@NEh01Cp$n zoa85rn%a5X89xuytmAU~8EZc|vYAWlJGi&OTllj%BY9{}=E4;7G&ne0IZ6dal0xhCN50|M=;{_E}T*)=8@l-{Vl*dFl2Yj;hE} zrErgw_^R}Z(Cm_yazuqrSs*Jz%6r4HojdphRcn~2njH-i_o#M|&nm_*ztE}KMg61V zk(IHHzceyt+L@MX)E!;P%24K$@82rCy0NW0DkoVPqj^!_P6u-bv1M1WotHEhT-zjx zjNEjg5IcnTjM1rYGCj6qwcO(bfjiW4z6m6g13~DH+E<|HGjo$w_o^ zDTk&xwMec*(h<*wPnmK?NlY@yTN9PI>1!lbi#scDXL&2hJxH7he8}Vt`=QK#S6fYQ zBpgb;qidZNUF+U` z2KFx0ncX8@Yf1W2mA01jOU5Mwy2m8_2C2%8xHG7C@3NSr&wwSNB&z>xy@8ApuC+G$ zoG$&sK0#?|)r?u(;`bPcx*0VyOJ~>l4HdSa%?j?c*&JcHFl}eQjL@i%H-ZvV;uJSY zq82SqPJA^tY{4t0%nwumf=8t?-KSJ(8B7%SU#==#l{$ekZ)+w=V4q==U4k=nGB|NF zwQ#P~e;S*U4U6@2iiY(bHtdTc%qf2-j_F-EI2kctu9e+)P@&x~t?c%um3Q^Qf@q4k_*ulCGtc1!rj?u%6Iy6{LoOAv71 zzP`tfM`l{tF|B76)kgLCBc>>g*0aJfTYdhhA-570UrXy*RcNu7(MisIwP_me$HXb~ zYb(nu{>w_wZMyJR;UDT&Pdy)*E>;;k*$13|k0Y)%7Cdt$*Pc?1VFv98dC?|%%EdH> zE}~}psj>=nI)izhSv<4rinP|#Q%NAaqz zgZ!g-UC9yG-qJI=N3*e>4jwcO+c08-Wa5sfAz~Geir63?716r8f#ct-VEZ9X&gBS< z{9VSO*Hv@KEGJGBmRq6Zx52&O?NDDZ3{Rz0yzYWS;XP3O$a~@0keP|8>F|E2xTx$>|o`>~}{C5jn9gXWLmA(dPXRf9(UzCUS*%Hme>Tjq=p|sKL zdtIj`AflqvST%cJ-#0D#AJI9op<<7IkWJ!1Wlc35h|@Z`S+CM&2#ms1#>t@^U3__0 zG@=yFqo6{h{dQI5N*nJmcnll~rHywo><3SW(#GQx*tGHV4KtAQ6g&=I3Z;ej9Vjil ztKo2XHyi}fc3GJ_&fMcLEBTs{ckZz)BW{iVlIM?a~ zlb}{7sD@gdpaD*Ri=kF0xDsl0f~(*;kUVJn>MD&Vavsk&&*2XxJ&|fAo^R6CeR@Xm z`HYTOzWK@;v%!>U<&!`aP@nuQIYD>m=iop^))HRjFU1iU`KgS9ksMP20jAj`f3Bvy zsQjTxkSc)8#58To7vUhzUxr2S6*wBc3MatdK-GD#LDlnX;mz=MsIb2Q1~R@N!GUL-mq^e0&xtYeKtF_za zj>ss|*%3$d-ZBp5v@skq<%CJ^s)XuWOor-vXq6MC^>o-9R>R|94V1rU!FajR2c@0~ z{2nhi?{O_YQm1E>$KK|+JQ^47lcd(VVRAH$Nf#OMsz~R70vX>P)RXZ>N<(n!CCLO@ z$>r`eJYOC=zt=wxw3JsxuD7&l%YCV!aF%h<+}X+_!1gRx*rlDU@+IwL4VYg987DIB zZk32frL30?~?hj+qe_!ztbJ`bg>toW9;ay$*? zKbdG6X8GqIzzaCy{XIRSd(o>984;drc7x|Yu_ud4o%swREH272pLYU(W^m2RPWbF`Hn&P#`JVAR?N z8fG)?OsRVaKDyA(f);#MOLJ}CiOcP2_eWtV<50O+#vwC=cvAR|g(?qx16n%qT1%%Q zs38Nql9E?Oz|oMrlPZCu;5Xn2P2y}6OQUEy$*$uAj%^(A@)tZqAK81HSaHUcznbZmOo4O3MW1QQpUPLOWKsE0{*?)| z%H4T;FNsXo2kRmxxbDtdu9v&ZVGD6#?0iS;JU_z;qFU%ne3`B&%w>=~Z#z5#`{_;r zJ)d~p9r8}=cTIwYoL4}lUnNvKFd0sRQ{a3!6{>$#1+RvDho)|VltKH(sewP|d=`8T z5{A^PuokX^b?{?Y4|DJ+wc9r!F<3e_LQ&#B+R??dW#(`=jiTInl# z%Q?@3H^J`kX4n_r0{PzaZiOep+aTX#rrD}Ib_eHwC!F0l0y7AAmGu<=GV%HaKT$88 zpyC%AJ)`p14@&dR8RgrG%1|FZln2)x)8^cuq9*~uh9IaorqU9%$=NM!=f;Th@>dz> z`*SE=W$q))^6ULjdFw&A4}2IN3?GHc^W=}zaQGOc9`GKA=fNl71@I|IJ~8c5(%ZC4 zzYCv5ejOxVS)ES5!&VrgUN)`t7a?wVFTu_5*KjL*1!m#j*I+03Td2IY7IufP!#6=#-hL6LkX(8zrZ4{{}qmge}m&7@n&O9AHZ`s-v*Ty#7k-s z{0CeL{|T4DPvFh)U+`}DDf|W84xfRa!}s70sQB>G^s9b{SkaWH>zH`?ScoiMuj?6w zOLfdDJ#0pCTsOVStrihVgR72dqgbUwuUFKmAEjnh^}Ld|)e3sl7om|K$~g3*D>!7@ z6F&Ki@tf41kZ;P=L2!3?7NqXB{!2%wyiUHfann8Fk2v28-U#=Blq*}2?`M#)tJJgb zK=>v1GxEQ*pPvk4Q1Kd$w|V|9fCJ!3a0o1cv^kbO$HP+2he6sxZv>nHM?%^tTOI8ZSj_qN;R%qoK-#~l`{8Iv zz2}_*si$nUwBJC+3~c;?m3mUtGqx()NAL{JHRd+~=E5@}dBavmBTv|BXa~UakgM)J zA07*73sd;jR?p+zUIphRuo9NT$q>6Y1vO8K;z8>ra*VAEMfxhqsmgOp%?!`oC4t{l8h$z5DRh-}?Tj7Z-kK zkB#r1vsP`z#pIE6n(oh;JiVqnW7Yp((;fZDBPX6!HM62-PF?bps`|Q#y$dH+&74%- zfUH|3yuA`|Q3;BcDm zvN=t6+0a+E8cs6mQoAqVZN-*vPaI1=l`YrSr;;tm zTf)0Bl-&}_)`qfmp{(O>uDjF0o9Nqkhi^-GkA<>Tp{z^7jgxfnruw#AuiCdIythKx zJE82ap-dBa3oJyRhqBDvK&Gj@x|-|l8Oja{Wrv2cL80u}P_`c1J{B82Y4~N!^$LAk z!kZh)E(&G$VmsKL*zVhKf)5wT&~*20x!#IUrU}8in(I9n%2tK4XF}Q9P_{0VEg^d) z?QO65wp?$mZ%cT^WF=kA^-l6_32#X#yCReol5Gw#S1$5x=z#mSgeU!WU1e2;P_{ml zZ3tysL)o@artIaO&Gv1~;0$F2p)487x`ndBP}VP$6@{`+lsyy5%Jy~B#yfa-`L7ITf(Ct|0lKNotCVrzg&z` zhUw;QN2mETdbQ}i`)cB-PDnleQ>Sk`!4$?r4WkzQH>q!J9*B;HuUHZ)oTA5r@-%8P z`=)m>3)PIcijC7^Z`{(NRem{95!EVh?Z@2%KT6l*0%m>Z-!m2so-a}_k7(~k)XUMf zN0TI~zME&7>F6TuOuam+CEi(DtM%Gb%&SM2xMRiw>A)e>x4FAay?!wu`rHHWkB8O%t|gn>gmhqtQMs!NX_;hDxBO4TYkXZRg6S@TTx> z3OkBZG!&&g7b?a}LAAM44^vJ>o!qXQP8{2vNsCMBSnU1lRJYhAO{!aHgY`i5M_UHx zac|QEB6=IkHb_4#e^E!isd>TB;*GZO!Jhh*^QON-uE~3rpBK`>MOoS6PZv+lW}{Jx4GQkXpA$o)7iaEmVaEX>qWADxiYjpHlD{6 zfeY+R*@ssVDGlezjZDt*fm3`Yr*yw^%xG-_PoP)o()8z){m4O=PsmwPz|sKRnZrKL z%_Vt_Z|K1w(b32q#r;a1O@9>iRF_xQ^RmGifx7T#NJAwysUiN%o>1UX_ZT{^djq+T zH=rN9Ju9IFK%zd&8|`l#tX(s^&pwEhupOmQCfw%AlVW@9$E0A#&A->9C?>kijWdV6fcb3V zrwvl5`BYg~>i#ZpDBx|e1p`|AifSwI);X#!O@tM+sL@gq@IcFT(*_NT1qzK@+7<@a zeh_Iv?UbEvl@!{SP)oXCwR}hhW|z;7J*euW|09iOw36fX5mLZ+~#W`;|t60KO(Zq&P|*eVlC#TnIYg1YVUoF%;S zV;1GGpl>5roBr)qD+gN}Ucb^dF}8-Fqzjchu^~-dQjaAL#zmsKqZUiBPDK}&_p{V& zxN6;$uBDvYcHtW8FS!z~5g<+4{KeL?$?I`Fe_kx%Ig4c9hyo&Zi(bzpyN2BN}p<0D%^>7U{>UXkq{$x0pmr|Q& zXVx9bJHtvq>0mYUHlDLW$s#W5E^N@bJ&`ecLQ6A=_J00D1)UoIb#TKltD&D8 zDgUAD%;TDQsNo3CL-!Tz5rvuN7-8;-g}l1yQVHBT4Go9z+SMbnb;aVv^0VSa`I?(I zPgHO%2ApEMR@GoV4$GUiYtV+@VF<$*)NpDLgMQ!lQ@kD2E_s`7;s&W3hOwiL1Z(?zu5RGR znL#V{Io=CHqE_lUp5un?fzG}b9|&DlkNP66e%8GI0k zZuyArO7tKVTI!Pu?!;ZU3Idtu44u240PCO7x>Aw3t6DE1h-Z7f)kmzMk)x(^fAa%X zEZKG4<$rSQ^LHP9VpvtrHgdR_V{URo;}j>fHh6H zHKF6?o(c-JeEseg7M26Z-hANZebNTI!zKl@C1mb{#igfxm?dZqa-Tp=OwoMl9PV9wh-NFJk28&S{O`5I{&H;Xp~1=n(%ZnV0K##W^|=wJBj zCD@gheHQ~h;qby)DZlICQkEW&+ zga$cjqn`&0Y}V~zW_ui2H?w_+O#>MPni}q}DKHOPXOmr%6}Z=z`qe%00=C{bUUxBK?N=3J@4 zcBIJ`U}KC2_pZX`p13KrJ%H^fyYC5X?%6+JOWG4d@g`$)JbNED7n27v{^wuC)`P3< zy%VsxXTO1s|2(1Ht<{3I_r4iky$ajWCc8eAJ&LWD$zBU(6-2yCg*!UAR4Q&;8 zZ{Q`D(gPS8bZPk=Y|eilV{=z~G9c)loq)|f8&{d$nJRSyJEqKHPB1#sl`|`(jcvOt zdT|x&s+s9ktmE&|G?d!Px;osGLYdRhCN#b(c3Tx|UkQ7s*8>%7-0_gU3BP||*~_W9GcTv~rbprn1>wtW^%JoYcScb|3K>JQHE{V!ZH^Pf|~ zmd;*H@ET)OTaOZovgyQD*L4zAjHaA&k975p$98{B-AdizjIIR+1zA63oJ1GwFBQ%&x#n%=W}d}ZbSrmWmb(oa=LR5GxyD%Mt# z0Y!1ips6v*pu)MWC4&YOs%IE+XVAa_8lQ_u2KVm!S}2LCIFs~*%Q~>wTFkRpW2(u1 zo{w(C?5ieEneXev5Uakn1GZqUe^6Kg^<$@F{55rsErpbLEh@)uny+O3ggjZ@{H{Pd zRcqbWTrlmJFV!a=IH0h1Qbzj3yPH077L~zRKVs796KjrCE0ac_xR90t9Ww8tL)@LW zfuf!06MuX}E7#n8F@53}$hBvXc@9#c#~jCD`oyvOC;+C+bNL|MHIeu_uk{4 zUJ58C^j}PWT2WW;-(xrOr%3wK7u3}S=c4=_Hz}{)yIoxG%CVlO&=XE*2!;FDbTcpARuwjxn|j(zFqzw(x7WmH zyMCsBJ(!%$>4zL=`(i<1DC3Y<#&F0SlHumB9R`z}9}X2)-J!B6qa~^F@Mu^HdqKs4 z=DWq?bvkmzq1=~Iyy{%X2OO7j#P!I6XQpuNwrISfWuhgE6tQ|fjbTEiW~l0Ip_ZWp zidu4r)3k1@E7dZ;cxl8@`J;@3?vS^LLq>D)^lr_;Q{6&2PwBem;Oz}H2k&U8Ie2~G z$xv~oIe0}-bM8)tr@_-8y&Tgi83)xj<0lfE>vuX-_%$al9;cTeSAc>zi09SCT#Lu4 zo>5-?Cdcj3IIXRm!(<IzGQ7GktQ~js)Q+#B;q_SgRvWF0qj6SQ^Od)EZX01Oc`jNW_0BR5`E?A3OuI}MKhh6X{764k-jROj zJ`ml2R4=$YRGyQbsQfHF(Rkijp!+%GzDzvtT!t)O&*>S(gW~v}R`Fmf|$uuTi z)(Q67)J_|8VP-bW@OBb8AL63YIWY1^8HdVU@Es!^SNV-_SlrMTvAAJ1HH({rpyK9W zsJJ;4sw>bHj)dKy!gV-|$5k0}<(Ful3C>k_&EY7F<(V@7e);d-Xk1OIt}NFYGhem# z`hvKb#XAC1hDArTT=gJK@~_qqP@FOJZgJEb?#a1!_B{%sOOomd2SCNmKsW*pf@9zi zsPGJh@i^KSxlA-aWpS?eDvoM7;%htT8Qrrt$Ia0=3Y$$Xq%)E1q|LysSqy4-39R94 zDOZINH}uXj4!ySwHfrzi7UDJbdGk7jOg_JYHUYz_obz^o;VPs>3^@;j62x zbZTC5F^!3YFKoSn;-UnrnLJqwAxR`>)peLNwQ}Yp?Xu-mDfdDo)k=$m4>?hK21foW z<51cty=8tunB~`};GytoD1SebCN4%Jm(TUQOgt_wL>7+=JtOx=ar`727xk6ZU#6MZ zrX^1sO4p}}hEwk>mkS=Z^F*-Ehs~W*QR-Uz^%V^-iRAQchRyiPTOT z_^l_XoxW^+9rY!pXd)BqOD^%nx}>m_LACD}`SM!gN#UCdRcFtG%0Khrf$*EKKji*Y z5xfMdUQEIBU?Z%8i=aYq8JrJ!Z|W+@%qP?TyBul&tQkH6zYR0+!%~R;kB1(M>5zUG z7IFSPcoJL&>D$|m+w^z6?{iLn*4C<;1FzwHA-ooHc-O((;SEqTv~Gk?!sYNqcoTdZ z@^f73Z}1lQFSr8IKeY9oSP#UzlXLn$wyx8;@Gj1$!k@x9@NUSu3AWDDP4EHE?}QJ+ z2O#fGJp~_z$~*kt-zGoS5D$uT)w?qB{Mdjjo*(s$(o5f3KaS={wGV!N4BB39iJElz zaVNc{w%@&aZy84p#~2Qo=LwVi@)FcLUxv!bzlQt6HLwqS1?oHGH7I}o7RLJxS0n$T zxVVn%@xG&;(fgIp?uy2RD_Q@J*ihF&(*q;rRfX+D-YC;j*i=WQB=U{?R>r}wo0V+f zZ6Mt8?~CTHSUEJc4t^S8Yw35_lZv=z`mh$Xbi*G|sga*96Fpo~d)7*5WFI zT8pa^o(FG+rSL9T2JeQGpyF;CjHidvPbP>nmH90HTnPN@vohM-YFrB2VZYWgOA(p|PIpGtj@a{7RfyU$6uo%Dv-YPdFZGSosWC1c@`# z%Ovkw8*vtt-_M5e_?SjS$PMKWnRp$zg7}H+x#}5}Bk`s%nX-rmb6I#pxl(#FaJ<(qy*t8?1lR_AJ~Ws?5$pZVv3`|iAD=$5s* z%mnUheFvG~`5pfGQNDZot3Y9n_Rov`^WgdMvGck9xoUicXGP>ZC{L`r6dL8tGR`PF zTF1#uDfwUdma>piyFgoLdd}5Q^*?QFst23}d&3K%zSC;q2*`JojW3Ws)-KF}Wyt5k zX>cA?+RcX-L&o+}SHO$l&5-e+)I*Rl#nhkRLiiW>E%-OM7^)t<6n+Yqz;?uY6YKzS z%hp%B5~{oT9e5!80qh2^fsB27KZJ$wde{fv0HybQBRn471V=;slsXx%fM>v4;hFGu zSO)KcRq&^9CcGD_&vzeO1n-CRCv7M6AHat>r=O>_NK^FFyhkAYF$XW)}? zEqn^T1)qlR!e`*0;c7@*YHL<#9g*ib-y6OF)hGNFJQBVP87s0iEBeDVoU^W@)-_1c zHrS5nO8a%3zXd;l{j=OU49CNNa(*iO7@iA>`_u)HxKB-o+u=g^8El3bwC_KFneZW) z1>b+P%hj7gpHYRNk*x|e;=<$-j1-K)tPJKMqh2J)&ma>&Gz+L|e~ z*k*kr==JE2b?x2uKC)o*8JOK7zXU#2!jR})@CC}SMNmoY-&-?uE3@nz=k zqJAu8;p*ORvo+-k;#_pt?_LM?^wDcPFCdG@I5y5 z-a2?6`?g$fyKhT)!M^Lc-oy^>J~WuICGCkWB#CUfUedSW=TLT0D7zQiA@;;}-^O>x zZcfHd*}e@e=};z}_CxK79HK_HTrbbJp_?Ddq}{HoXdGkfYENiZmuzSp`?iEPh8H@S zwxf_O;c1WcZuZ1l-FnDQUNyF!_QXoxmg{L(cFEXFoKBu>xn5`A z#(S|HZBJa|+j70@eOtooy@$J+>-G0-JQ2!DLfN`}H;UK6>rUS9W$);zB6f7Rs1pVq??f zV&8^_dMGOhW!*zr&rr4oTW|AomjY)aU-`C#H#L-1hqCq9`q&da_jWec6Yy;buN+%n z3wfn)OL()e^)p$$Z%cUJ#CE*NF7a*T4Q$7mY^iTcct65+tjTWjZ3*vgY(q_Uzi&%; zzrZ%cWKa7x$_%!_CVS1dCA_z>4KmrgzAfQ>h;5+B{^8paUe-Qto3~uAgKs0RVe4=A zb@puu?=Wn`Om?JiOL+HUQw*^hf^T!W^iC#SdfD(_c;9QGY<(!(5X!cOvTdPEv)!G0 z*}jc54`l_REE&qWg|fm>)-RM5g|bnhtR$435z5L!Sw$$D70T*ESt^t*3S~<}*|Jc! zJd~{nWh+D3W1)-+_&>Rd0DD=Z1iYiZVA@`xN*xLwro|{Fh~uRhF%>^})Ao|q$3|Hj zpFv$myW8iWBN58bRz^)`dyDR;ukzrl*gLJx$f^Zr^L%Ud)lNL_?}YBwD?oD=Jt(wT zO#=x1wY*o}Mm?v_PEps-%dA5^Ri9B(@RGvxh-5@n#C#TddyP_o)s7vkyC$0PBuJ z2=BtVZV3nWQ{}azcvDmbx2;yN3!k2@`cn5#w6zV`McWkk$4xXXyvDf`x3{RK9l~oH z=areV8sCl#AiLdy%S`*!^!G#6b;9S;GZST*cw+7m30vmo!br$a`avtaNRD&Q>Jg)4 zGsWVToow?IP~69>F)iDOF0jQfTD5G*U7UCAcq#0J88l3!YtdSkir|E8Lnmx$=xB<; zTN_aH(&n^^+CcNERn%Ih4cu?h4Qk`+*lk0{%GC)U51k-awc^4~UHuQZXYuoSB;a|i zNa;w!O(M6!xsqCFpbSRdR;Yn?ty| z=xob2;i3rni{EnD2z7cCC124A&yLQ?8k@&j1beaTEGp&`v>bz%f5rV=zC>F~d->nG z4f`}LTp+EzydGqXjt4whGTusEivl}^eFOU~Hy3Z{TD(z(JqRMdAxdLZpSpfFE;5^~ z#bGvOa`UZa?Z^TL77nXZ?PWPx=#dT2+lz%%Sc$;4!6hD8iK2OY-lm?oFD0@|sxCqo zHP5Rn=V`x+2;-G88u>+9Y2(O(9obPA-86sYmP_{XpA3Bdx;)%cQcT}1xc0cNSz_A~ zEtm9Ng{CAfcj~*UX~Mdu;`PmA*R!3kX-ZC5H*|tDC5i4Fl=#t<xE3f79$QSRllugB~Fvod3xKx$I8NuIF0SLQ$=^k+LM~=#r+AGjtkB>*gn06=ExI zu6~pTEBSl#S#2^mO9q6QJGe_a%#GUXxs#<(N%QbC2$|GDbMntxH93DTttYX)d3a71 zmT}}V)9rgP&HEPY()-Sumf_cb(e25DhGxRHu4uXb%jttF5Z&=!&`j)uN2GbUt;g`G ztZ|{;uc_G7I#DOJij5cLzj0^cp~ksoUVT^c0EKqD8X**M%VJ9FWkfbPkEL+(`THpv z`6!H2ew752+PtRG6HWcJov#I*x4og=CI)S#5C^H=m$--7h6*D|a66>{1Es9J+_=tXUMgKB|3|8iD3;? ztbr{*^z?T*w`x{OtG~`-CgpNmZqwn?)%&fuQ*sc5ALlp%6g`Qq}g zjwZ6SGRx`_W5TQYFyz^e`A>9O{A&K9cXY;9?oZ@2eo}Z5nzUFm8$TX=2^F{QX?$PJ zb5qG^Q>b+^SCShy_8>p8P|w)>%f4-HZp(k@D!IO++tq@3)jBMjFEr0~yl)%ta7iCL3)Y>F+YXd5AqW#%^`X*YMLRHymnCk0CldRHGFSW7HSkjA}Mv zRlTS%*-953H`($*YJ^y+N(H(lkMX|qaSz9W5~F1h8t3&?vlY8ht)XCtdo$@kert3uT0abr;Zb=i!4Wy2tjcl=~uRDV++D$ zvc`A#pr&!h@}8y%uQeCH);#vL=8{2O#~rJ>SBsSOeVzpaMh|K#IhK>47Lek<>X>|u zYkdWi*r~~gT**viMa~l0I%$_^AIdt&mb06xgCjWFngplb^i+HAYHX?o3%t9rIahv*P2)@jUJr_=Mu-Z$ zZ(`HPPl5L`Hh14&L)(Fj3c9z=!sguDflZZMfp;xqeC}#T@|^SEdDsrKtJ6cO?z(`HpN$aZw5B!gEvE4 zd&cRUtQWTKcAv)hoc~I(IrpUe?e4oXyzeP&BkhUbVsm~e&kGdRwf1BWyLvk|_w0kA z?G0>4+12)p;yK$eY%aA*unn@SXJFI#QG4%fY#KFc?@h#}ai;cO8Mc9DtH7qQqW0cY zY#K>w?^R>d*bcvTV;f+$dTfKuHW!;ldD?rlWh=4x+uRqKj7r4&J4ZK;zz}JzOneT? zBCh^V-{zjdC`Pc=C6F!G^dDq%+uRqK>^A<&=C-+a_dUnCyU%(CIajjGl&U=~rV*^X z82y6%n2%E)p@O!aoQB^!a}=odZWHlJL~{F1C%ZhxwfJN#m+&q_-KaXmOh&jHuqOY= z&9)}VY?pt_4)*HnNv*Ec4))sApq`foJJ<)4AVx<#BEQSD=TMfHxvYbm1aUc}?0C&k zMe_=%YU)a;!ovy_c3s8MC8TUFA!SSG=W#2nlv%1rCv%C$+F&K>6m%rf+!)wK?)92; z8lTT(vAXeLbKQlsRj*d704hK`_(GzWWgP@H7;;p(p}^{F2K)$0x`aKAD@ueQed4p2 zUgBDO$1^>nh&hGho56!#M$10W{|zZyz`NU|tdjc$JQSp?rn@MGWVRqzN@M+yLv>qV z6doDHPfxQk^P`>Hs*-fw{l?+U2IS5a|^E1OGP*%DTCoa__-KE{wqW+yA~ZH#f( zk+mjQ3^}ag_+a4))*q;;oySu{lGOio`WG%baemR<fyyoFw9`w+)ulGFc!1@i17Z1BEcYE@?IX`>$;oEQ6bM*O-pFZr!jpv^H zLj9P}hg|aVJwLm9!2`UdmHE#tRw0FORahn&CxMQ}Al7ax#ut#d27patzc(@NAp z5W`-@_~jQWy{VPlHrA(OwM?6pu?<@XonqSYk9#7jqGzO@+SQuiCRMO5rXy9iY=1Qkd%r@ij!t(NGtRuXla z&ut~?i)2bGiSqq|R+0foE^Q@IckjEcB=X@6tt9f{kE0SMq%z$tD$y<8s!*acP03T) zlF6jxvc8Wyp@LOOIl@1CW48wF}?c?NJh+;t$xy{ zU!i}$RzGQHtDhWC-plvXD&6WQ>sqHHjeW;f&5JH~p$f<&fxA=8Wz;|v?PT?nbNqYk z#^An4QzW@6^oO`F(=QjQ*lhKaNmHlS5r={4j%6SJo zc*w-FYHFuX96K+0VpTnBYp_2^`Hb?JRn=7u6Gxv|dfLeGrK9M&Oq|aou!+GsG`1v; zR-)mn@awPN@psgRn+ngJe*o(_;#%!`M)!>7xQuR~Gt9a-FEUK9 zv+ocog@m)yi3(e}OtZ?><8ILsN%sMvcb0MJy~lFMP$8srj!V{u+!OA_IY(+gxHps^ zvD+-zYVy$+%!1XW25xUSX{L5i{cqSM>3_hKSj~`Cr1+af=~NpTmR8kh4Bg+-8*-9p=T`p8%II!)MgM3va^QMtZHsk|cTDeo{URN-UZj8PdV@`{S0g9?&=j~tUVme15>Iz!)^BVA9fP}g)ZYH;-bR!^>?(iUd@ zxA)`*Q=?Q9M)l@ojw0>UJ5nxGPfoh+@t&NX(LMd4)B&Bz@V#g~IXRieM0#@JhPLX- z<#Dh2jFZtBoJy(B?erQ|i6k}E6{SuZY|DBqZ>*!2mPH578TtA99GHE0R7#2Jd{kG? zuB_(a@+oz6_F7a9r?UJhtD0pJhNvr7;=(lg_?TcdkVCOwP&vhVpBqD0C)c-n?j>&0 zzH1ouQrG$SO{$qS&)yM#k2Ks4(zuj+kM>~>-lO;4!MOrHyS%!M7rXH2bmeUKsP>GH zKDy!y9=(D`f2?R$$2Yf=R)?r3A}??n*7Bo5dH-Ag-^qN@I{C&o$2unfNyg?5TZNp z4TArGL!k6TheFl@^NxiYnLiHpgTvq`I0BA^BO$um9=aMS>Fu2Wm%{Zg^+IY497c37!MB^B}r_snwAE z2u-i=Ja{q%x(rsqa##l|;3cpUE`gKbci|LxEv$k!!0GTz()vQ!2y5X3unxWh>*1bc zfCe}lqU)N{;^Fh)-Ecm91M>TEDnUtE0QZ3x!@)2GN5X}0EL;TjRlXRiL|zK(;AN1X zeY_=5C5|ws?uM7c-@_~5pWv172r9I1!vXL+a0EniCUpwD3QmCEg%ja2I0;@2tKs+I zg%DlI)OGM$cqhCL{ssOJ{uBNPW>AuEgnPi{P$l~&cm!Ml`@>t|Ja`*i3~z_uhNM;M z8h9tX5&i_;27d~F1@DGi;63mk@Lo8C;(s3;1s{N?!k-Nef|Qx0sac!4PS)6 zfG@#c!Iz;HL1#8p>Mghiz6*Z?_n?P){Z{@LcnbV0oB+4Na`*w920w)Qy?Yz{Cj1O8hM&V`xC34bY4lPz!VGvHYzH5P z?csZ{1N}_kknfzVJ+V0GtH7z$@W_ z@KJaW{4+cl7BCc+gvY}};ByaslKzl7c3YSSoULeaMPj{3T`Gyk zRL-1IKh^q38i13SpN4FihoFz-*2h+dO}!i4F_S>LWguMlO+6*8i=&jDQ(HdEx=!lP zB=IDB6|~y_eF^ar7=>SH)r%uogGy^lDNY)pCQvMbN5I8U_g)J1JI7`4EQov7A8CeD zIKKieg7g4W--c*xrmlrrQ%ZU3yYOYmd~n;x9X-y}JDgt)mBy?ckop{612s?kdZ^!; ze*`OYe^jmm&5+>CO86WEvZxBE$}ROD_jU~hb!Qna3%aPd=k=^vHr_l@VA_^ zRzd2IP-{wUhWEg&@LrfneBB54fcHa<)II=@fDgi<@Mo|XJ_OZ|c^GO$i+83ppZ^i4 z{Prk}=i%=VZq*w>9*)-=Kj&IJ59=9~t!57OC!GoEjT77CVY#2id{G`&HcFR=eX*a1 zTjxpjzJnaCUplP=tp0B*@^blId5Y@azF2gLG_ktkmvA4>pM}bYtKs4BIoKaEf|x3T zFTj)FuiymuBK#(N2`+?M2dfEc9W2Gs8W@jv))2Bd58@^s@1OEq?^xZTXB6*B+fi-e zeWX5ERAmH7$(>OXi|&fbI=3>WZnqk|rlEFHB@yFd(aL$9ooYgePAlqcK9S1(AtXf2 z?8@5e@_AOJD;i{aaht06JKbq`{zB}0bL>2y>@K6{!*o-<8yJPXkduQrw)?_y)X9pE zb6^*EE>wD*508Oma5%gGo(Ctv8L$HC=kiLZ^qCC52dBaZA${!BZ{alf4>%p}i(jf? z63&F9ATwuDCGbLc4rGPil=Q|MAa#j18&Vd%Iq)?&4{m{M!Io-Ic)ke_h6^BT%z78Y zk&r%pO6znjgi7m17|%ZnA8B9*u=YMU*LT0#*gmoR6Fk#{YeR`>XM%F;c4klpk~?Wk zECbPK%&=BO*+cC>t94XIM;y?5m3B(2;8&baDHD3n=TN`i?11|9hSX1W2N_WQr2cCY zcIrbbJ3&T|mz~#nu5T>tdPeW3uJwks33~~<)6A&*3Z=&aA07Fy!3utZYFTNPTgvMz zr_8gaQDtTxubtd5b5g7+jgDdT!H3H@FhOmmnAM_b`owpi^fvQqtKH=OC~S(~12{JL za@HlVvQY$+$cDos;R$d691Tx}S{vPfDf*)ORo z-scMI#WHRRjKZU|-;Lu8Usyw2DFC%ld7=(>gY{7NHb9lb*-+(_^(<54;9RJ9nFr(b z4Sg&x$+exeR~r9~*Ef1bWlsIS;ceo2L`{SLg&}v-m~@e?cv55^%28(x7F_`=P-^*I z-&Av6)sxjd+UH7r0m)QPNv8g)WYL1Bk>a0nV1mKJBvGi2aZABdUn1HjDSV30Xq)sM z;!a^+2KBOQpi1?%@HluqJOTa)PKGx^wMoliExZ{ngSSBSVQ+)W;q6c!yc0eGe+*xQ zKY?o@YmTIp2511-7#rhLsU4iN0!b!3W^}@IlxI{tO-uAA%>smGC6^bEvlM z7w`hO3QmJhL#5|0VLXqV#QS8T^)ka)VR=;FykD$d)-$^2M2_Ryf1!(7-0ve1I%#ob{%{D*N} zCh%xH{A%yxc~8&ieO);Y3Lf-=@N0vv(yv-N+jg5&UgdTd{_s&z$M{F9mXd0?vV2CV zW~2DU*2--mj|4{k)VciH%@=O+TwJ{m<^R9Hc$`e-0TqO#|BT{9@g0;${r(W|OX?Zj zQvvnmlc}fC zIlObm82xT$!Y;lr?20O)lL+Gxtr*jLq7l6>3#HbCp_?(UG)S4&U)`!nf@;D>g7l7b zpNIp9NtxgiF)Oq6dAHcPMl@uC`>%+cx76KheOGm-(xng%;&{=Q|BEzNT5X5B!)(4Y zhQju+7}B2GH+%w?a!y-md*$#!YVC1HsCt1Z#;L`S@4(b|Ad_rU*F(MsQ#Zpy;GOVL zcpvNv)n7ggs=YoOu7XFv=V4E%cKK+yH#`RNtaSdYJ?;%p<(xL!#+3TPQqKFqDoAXm zYT-brakN2@@iLFTwtagJfs8+S$3n)7yyM`rkhb2&oQA=_a6TMrY-t3fj8Kpnz?F|WYb5K_8 zoA;E;%2`&2g_q@ci%C~pTbBWs9j#7U-twH*38}{|r~cE%2}K1Nbrg2$JV*jc~=mKRA!a z>oV?BoJQj{IR60oe2#(M2?|DNf@hW@85l-f5U;0e-S3f8D<`?_TLOo}r=4Y2BR1Yg z)4K~f)Q*pFPI;3QPVAGRs=X<&E1U{@Lds0)GFS)I53PstdjpKe$5Y5vp9bEJ=d&BQ zRv3#9J)?Aefz}zt!Q_ z{2D4cUW4lY{2m?&*TUiOb$Al|13V4>5uOd-gR|g9xD;-JH^TSf-EcE}9BzSXtNsFC zg@1$Zz|W!THnhW2`@ziij93gXs*8D-?Z40jALRUU_$a&zZh*_+ zCU`AWU+X$}B>WMif8^Z&>8E%%LfQ>)IlKhk0{2UH|?K;p`f*oKz%z@vB zyTMx_bCztL)9#SE%i9A|CwLvN}+Z&V-ea z`DESLS{3g5{UIaga3!w7P z#W0>HZzTeY2z!txKOx-Fc_`(a$Md9~QM@nb&na#5WLIoqaxuWMbdRQ;7i6)h|{4D{#^nx$i(yyz66^;51doL3v-N;KhCSg*cr<(l_JxW9<`<{lA>R*z+u&f> zp5P6E9pO-@;G)%>VjiwH3^H%lD}t}X5%3hEeIzV_qu_b47&70)I|055PlT_-li<7X zWOyohhWX4X%R4ZhAHRivIun+ih*a3D00pze~<;+^bC|gR=Hd3ul%eu-}$-Hr!e=q}nhI}T>#$U5w zN638g6u*mmwNP(FW;(M9t8Qt?S#|bUzRXv0Dj$wf> z{#mK@pix-%mf}`m&Kox;w#0MVo$%&G;mx%zcuZuMtWx4ppa)nXP%f#E1OOf@BeJ|)4mElJ@Mz)00`t_y3@7c;3LF92?)KG|3t?OzyHCutz zFqa!&3?>&T=&pMo{1(16;*k8Iut)RGI>IQwy#*y-4^=MThTR}_sr6s}1dBL-7b;KD z$FO?)&u}j1jJMc$>?Zhq&fka1W1HdKa0^uU`HpQ9r_Uf)d@Au|6sJ1Zp>np2Bff`X z@XRW%6}QAGzbjUhI-T~fJnv1fPx4MZuK1R#iclMqRSXBiia`vk-iyYs{1lJhrIZzg z<0`1J+V4Td?=sjOejln`yawt!=vw#n=;yeX1nrZO#_tU6%S{@7HMcagDwuW^^nUDK^^){f zZnP$=4nZk>sowTmYWOLm;3!4)<~6>f)m1a7tR-3NOXkcdubXZU2H(bkbM|2qe5~6X zFz0XO7*p#bz(J02-_RY2@4y6Uqi+VaXEKbLSeaZ4RVL|YSYK)#Jc9E#VPE(boB{s? zl~*>vOWD1PVVsew(kAaAwp^VeyaMJKYhA{p2p4#F{JKzO655xWipIhzmD`&-mJ~T$(knwra}M zdghRI=p>y>DL7PCl(NWNB?;_g8J-QFmR8g-fpA}6n8{KnGpiVSK^LaBzOsVcP{b zC~EPQO!nlODU52AS01XbB<`Fmws6NxTSiIZeG%V`Ty{4o_GuCrDWl{EL*Hl%^nr!}= z#U*)Qvbp8oIN3Zu1GiW&%-1PatVM!jx2w`PNe=6xx;zs`;k>Wh3u8nsg-a1$V~D|w_&61xD5xw6yXj>_(F>|KaHm z-1D>h>&j02^|wB~`m}#i2buh!A5=WOaND>=pB;PRkAHewE)y0{dGXK9})skQpl{pkCW;)`Pue(d$*M2bEUawEMzuwpNL+Dih zK1qM8zW=gQ143V^&R3sAd;XnGIk*P9#tz&{DzdqiRAgg+FtWCjRr@w}=L%)_hqCuV z+54f48J_;L`}?+pX2Scj3875CGP-x@_Zj!zyF=Oiq3pR(rr&Gaeai`oMgTi_TYOut zEn+BH!W*@lyPE5b_H7C8j8JxVD60r%Q$tyOD4QF~7KO4Uq3rrlwmg&-pg&w-zAE!= zxwgBWWC?F{uDhCR`{y~?TKd6z+Y{aBu*#O}b@y!v@3~O+Vkpx-cKg^9*Za0yZ@F(v zct_BM(bZh9hi^-G14G%+P=SK*e}qxCA?aaSyywt*}g5|T_4Jphq7fP_gykEtF|@I6c8mguX4|btAC) zvgqJxk2KkGJ?)VuTf*BI%C>~E(F8|xYdUz#d|R$}jc>y}ys4|CzHeh)ZEOeH6CHWI zY`I>6Z%cUfp=@p_dj?z5J%LAL;|brE@RoUM4RkNszVo zZ3*vWZ0^2OeOtmiCzPEZ%BF>~nW1ccD7!e6T^`E59m-aOvO7ZAB0BAdnormGwp{Nu z-^TuuNq3cf8GT#ATZgTuJ<%Nx%a-f)^ljw7P_{IbZNYZ5Ju!$^$(HLK>)R6Es!;Y! zC>z~XU(1%NzKvA%ZR{)9&0Qtu__l;MER>B5WphK>MWL+o;cmWB2d~1n<$6N!N>_8eIle97-4x1h4P|eKvUfvSE|KS+&G&7jWhfgI$~GLsubSqA z!a`>wWudHFKaIF4hGzLT>I2`F@K%Ph$3j_2fA`x~2k&~{Mm_G^65hw5YuHOQX!Z3*uUY&eeWE#H>#KEjqT**|?-!kd1q zo2Q!V)%dpm>>6%K|1&VzyH}rHy?e8?sQ<~D>^*pJ|D*d9_8yo#xw3rb(bY8#vyvy4 zGjDEQvV3Mma%_3+^yKi0>dM+AL1<;Ny=?kg*(S^O+UaA*x3~9_{FBi=9r-7d0|UA2 zDgHTmQnn1)Wy{RqA+u*@V7G^zx4ja?yK}HH27mW3+tkojAKFsbRN&g1l8Lij6UtVE zwtGX{W1-FV2dIuNU$=Nw1KW?~wY$XjZd;JBMesIhw-$EqX&%?5Nt;%(9T&T7x$U^J zz4{y$#A_Vl)$hr|cMIocYiy&T8;)exAM}Vq_vG7|+|j%ctJgH5vvcwxe2SB{|ItAV zo%7qnQyuh}b<>bQ|mGjqcvW-ZuV@ncZzaBsS~o9$kvh{Kalc+5v6# z@a{algRPWK#evN;lzolX3{l*bd98J6!gma9>r_f zRp*trdyHK(^vO&7VC~$$e-E zPIlu{{LQh=JGVEkT!ODM7icTY#zz*JouI78;%)A&U5Fl)u)Vf#Sg$O$xeH!tTxmjW zl*H(?3-tOdENpu8W{Pid3IrV{s@yNS!4$miOCiLJ7@uW7j3_o<7Q zzxZ?|T5G3VBJR{FZH^XmD(X+)wVnC%t2^#;#%{_4`uOrT_rkwHe%f0R?DEq^-0-53 zL|bjWNTlM?7n>$L7Y*Iz6P{aApk)7om`t>d$<@PM!bY|plON`4&rR-bDY4h*G9Tg| zd}(pirEw71a&@tOr8ZwZBk!5>T^i@JCmPpQ1^IfFU6aqcSjECMRd)6qKgWemvO%w+ zVr6h`rE2rQ&2Dz>!Qk41)P1DKGg-x}vWg$eDqfjY{Gbb+{+^VxBwP8iO=5Ow9-Y1L zZ8E)|)VgPU&XT;$bP?C3d0h6B@8?iT>|K^A2}MzkB3iXUEF*Pk9+Caz#*T;C?RNc3 z{qp3d&b#OxS7BIQxy#Qh${()o*_&{<%#^9Ta&Hhz_gd^0-`iAtmmfJwg`CTa?^67v z4?^B9`=1@ty!wge3_&m0<>$zuPj1TD#c*4uAwzX_$;qy7M7*}NWBfEvjI}=6%LF#eVV>s3AMt406%h>Hh zhv(&A`l@qLx#i@%9-|AI#;#-AIn|)}vw0kwzi!VeNxIEnRT#5M3W6$G?Sr|Or%Fnp za3!UmJzOw!?6%oQy7%=c-sT50Yr?klA!R?+$IOjn)`WF9&{UG7t`4F@Timhtory#}^MsAN9)xiPS=z@otcm~Yp;$dUX@0V1<|M4R zPP=5C2z(vXN}$4*<*_vC`1qw^Xrw5aRSIG3!_&mJjYBV}S#DO1p6 z>{hjov?p1`TeWc@jb9{P)X4RHl^Bhz7>pZ@^DGLZ&D;0eD+;%ocU_vx)nxNYUGg6) z$Y`2yhrKTuG!aSndiUzfC*0AthHhMN2TfIPC4#wU8%p-G2MUH3D*y_9L5~SrT?(-u zv4XoHL#c1QX7K{SWjmXr*ME4?gw$^J1%J71rBNUlw zvgekT?71b(o?E^sdwyAdJgJ=`bBjf$z0gHo^Z0K04`nBsidUF7l0m~y4p&szO;lkk z+E!tW3swY?`ELn;>X0d66i&%syj~|^I^{1~?k-w0lZp4JBW54oy7!x|EiIv1c4@dv zb*2*g$&ER?aBr-$)lw3A_I(k-tca zJ_OlyQM?A4Anjt-(#32lzGm}GyTRJ1bT?eT`NZ&staLXl-%O(Csp!h-=}Q(7-+9ef z<$xWpHa?TnRJ^>oczILt_040iZyI||^Mq@fCTwV2upzUa52X!R4cb(Cb&-AhaPFBj zvtfS=BHtu#3)rA~e3WLDyV(8vKHMkJ84Y_x0+hXZ4zhOj7rIEs<3V-X5qVa_H>@m; zLEb!WRNv<(H;ozbxf5ME#`~O|U+rX6q|{Qu5WR;WUp=ClS1Ni}7wNlF5xaWfgZs$J zNvqBopLuOQr*@DQcp|%AJO6&Dgi+dcW{+}BC-gS`Q6g2Uoipa+QDD`-&p>6@9^dd`5)t9kkQ? z(qC9Tyo+Li?T#D2y4y8fHq!T(NWQ^;QS=T&7 z2$dnTB9bBHcHI&;Lx>xG@3lYYoKA6{=ef`G|Nj2p*Z==~UY+*(tUd3&_S$O?pS57G zS~gk_|7Buewj3i$z9#@0N6|cSgW^seN`MeBxGXW{_!pw79xE6agtwNBXRpYah{ucZ zV14Y0^iv!hE$;*gys8lcIucN^?hz1xp173{>RiC&0<2@aJ!%s9fu&H z&MX$43+NaGi}S#_a0aj$k-ipG%OJ~`6iNyk9u9n@Q(zyB#wT7UDRs4zSd!ucEjJ<> z=?YyaFe?LJXwTLw)Yj2L#$dU0SjSMq&S5DMANFGqf{je$>QtjZH!<$eSbZpZQH_LT3CT^rh?yu9yEBkPx^v>QAS{L4AbYgA0gHrU zVC+hS0!ECGO0+|{1$Qrw#WYEiV%u9I0BZ#mNs$57&; zDG8fV^dBTbYd&~8)d?M_yn?x4MEbx8=7DpyM3Dt^!0MEl7uu<{^c>7pmbeUcnoF;u z3KXIqJ%fBOPOQb$h$ffzw&T3*ntHp6V>@!*j!nHu_(9T2oTtP-Jd&m@zZ4HG6HibY z)|sr;u>cjJ;`7&^YiX7UYhK}(>N7cnwl00yolA19(FxVuK2pXdq=BueH8fQ%l3$_P&7q6K)-eL`DE^)Td0jJ^7=F=*QQ>dy#(!ZNW-h1>uBolxlOG!jT{ zywx-l3s@l0wk|IwfTewyr9GC&>NLU41GhNmkP(#6p-H%RE{`ISSZI=1}EtOLWp z2}KmdvqVMtd#edq5yG6*)HF{fiMXLKIUfEZ93ZY6mp9_rt`K$Yszw|&F?IKd1zej6 zS({0BGwbUg^*5vo5qAS`lHzWdQj#cFB#Q}2m=I4eabg`|8s*F~(i6HYXqF4(SB79h zf?UPCDmhGJ;7x)&+q`OpR4=6#LfU?4LOZG{PE~?jh3b)F$rk(-47Hxk;;#h@Ut=c( z|7D`v;J<9Nb@i{vT_h(|mr+T)>$#0~EJvwvNQ&UrrA{xAFbKN(Bp0P6g?6hK%%$y! zOwM_Mrk!4&Sr7&QOmBa~NbSKmrd(~u+$gNKEgfQ*kQB;8CI|Ak;j}e`q>H!PH%jxD0~;Fc&I?MXVNx?u&04k<8bXm#=%LR#9C7+R5KJJhm?tM!9_z!TZ+b`;H4UjgHw$K z3k`7s$CiCzS5S6C&2#c9r^qL)h^Kij834~FkECB?YcSoZ zIDwUTpCK;>RIMc0s)J{DN(!|Q;93Qi(&TAOsAgPShqq80Wn+Q8bv`~6dh67*7A(}! zjMD;|6Ss5(Ra!zP9l=69nFWLJUwM%g$Ve&19O0A}^rX=2kdL>Z1DgOKlN+$fz(AfR z10AIptikJL#FL0SQe{{SV;xLmJh1>nz0gFK5KmPi0fw&B5#?gebO7;Uyg^pM8}<-z znFG`WOuf)kkD=J&gQ0YUp5{Pt6z5{jgkhmaFY@#31?r>pJRtDu3Gx&{O~Mh7*~Fne zM4??-XjgG)FM7525ai0@ybs-h^FE5{F#i97Woq=FnYQRwu3RT8Drva z30Emh?8tjYGM~@`W8t5QTNYFV2exmMP5e0QiUM`ZVt{m34O$b+rt(Y}tMNkwPS*Qd zau0EeghWTK~bf7dKTyo;F}J0ah8J2$(7%4JZjmkSHg>9?rraZ35`Y(u%hZH%53h9a)3w zv2B5RB2!}g_3XG7#43`3uuu{0D#*sPYPwA*bb4K*{T+(fliO>di#h8G(O8!V^72yb zj>&(-K1gn6tb!&XY$Ad!C^EufC;ePi1q&N^(cVPd+BV)wF(Xl10gl+ChqFq^4~Vv7 z)s}aP?$3D*k2d4HCPjDQyn<=RfMU&xCIM>kTt+A0tHk7LWTi_+y(M1%Q-xf5v2`n& z-4!zg3JK{7lVYlx1DjkM1TVNb8*_sa*8iApaflEJ@uJSe=`~i&jdB5|j1=#eLBt*E z1yz{N>toJSd(kX}?2jTI-E;jJx-}sq3j?R zr0P@^M61ktw&JB!r6^CjKD3{~DuiN!V=1MK7-ZrS4cKG^AGNW}jqXj2E!yqm(+v!| zZh;*~gsww@YBb^h4N?KdBdxB9+hN^_Vx_K?`HU}ukmvvpek5dB6tuyUd0We|!znbJ z^fCtpi7=t|0^LTia`DBleD>-ie)Yktc(p2zoaL~D=5m%rkMd$#RFkqTc!;t?AF;)* zlAJ>{xTaEyWaMLxuVO`tX6JJ_!=cJ!T~ATi(q2%H?Tb&WUAYG0n91AWxtD=;^M-J z=}7-$UK>UBC15l*LgZb7gz}LrW6A zjs~SZ%#zq7;fs=~O4M z-gvnbe7d1gu3!zhGid!Yd ztayC@4_UUW_8RL6x=q8{jKoGkZqK}WIT4%DPI1t(ajK7MQLRcM1`0(O6VcTjj_~*< z4nFKCnmnEA(zWQF<03Y0^|LV@g0<6JVdGR4)r}2w+R&7bfoO$IBS@#x zsYJJ^UV~m@0ope8qIrb7mV~}6NB5v~Vys|{;01oYf1Gt7HM{VM2 zILl}4qeK63nZi}}3(EDekn%xj{Ks_+M{PO``FIEW@+>|}1?LT3O5a#{#2qG2D;~|n z#Z(UBlMSdUgbv1wxlJHzWFt4i$CHvl25RD%pfwJGLvscSJz2k@d$c(2gH2BtQNuXs zfRC|^g;=dog?zw?kg{+DI8=iPV~}jFB0-GtBBVo`G3akG|AHjL`cVyQDN$PDLTH&# z=b$`7+LB>3qJvcx1BJNiwD2V=d5wl4*H5oaXgB_~W+FSJ12*;+l#fX zi?vwFqK4$QFl3{2sa{F63&Bpgm4wLzgHy4hXs5`Uh>zH5NXdEd8#{;!#+UPc-Iy(! z#(~?E<;FlS6UN>K;N+W84*cy!IHA+y8qfkJ%*WJ>ES#LvV-&uT4WeWshQiWa(=9;FFD$9yBEAZV9@G%|9et(wjZs#=!^sniw^_YSMcq#t$-a;Byl` zVK9p2F|IY2Ca{6SMfI_9=(QkP9Ki>@1ekW7xdM&go4E7>EF8h-$|pV5p+gZ0TZv2{ z;I7~aPEiX}%fl;ywLD#RL%mtcQ>yiHY{QrStplV8LF9e7x&~-i0Ynh2W@^REz-? zLK_D>BqkA4ts}m8gLeL@Z&$-NA=r38GGyv@y6F zh!81r*Zq+46_&Eo6=^At?SGlmKwUhCo4hThGJqH_nbg&(_AzwmOKOM^flj6%L#@N2 zNpjN%Z9?Zb0;&Sh3YfG@3U_2fqk|B3);P6MVy8Ar?9>K)%Y~7O3+o+6`X2*E&Nmv> zmw?&ggPTzl9iAS1BhS7ByVz--)bV6uE?&4qNY)8T8O^6d9k!!o#zKl@M97?`B%;_{ ziEW+YR!1Z%W*L;U(B2Oi!8||Ift0YYsD6TKxg6_+>B-Tw-i^Sw~G;R=r zYo2g}Pa5-aQwkC$rjd{4Nk~VZd8p4qEzOg39LC~8=B&{szr4?inkN#-AN(Hd3 zX}6sc6=8%NhU%I`>um_=2sj{_N=KCWQcRiRT}rkm$g!Vj69+%mZqZaZq%gwICMh1p z)Lh2xbJWoEmAw)A-jW35lEIAL>2%db@tiZt!b>%8c@8E!%C)B95gd%6zOs8uBD|>Nt0*q$2{IC+ z20D!qkr+dP9Jm9TzaWQ7F*#In^{f<;gJ(3`PeRkM=}4-jXx})R>L8fw!&{)uH40wk z>>-0bCZ6}0lA>EH91Rg0#?Yj@j!gwZ))>U-P*-j7z{Ob)W5&3tLfok{%2(YBpAH~3 zY_!Wpal$p$sShYC(hJIE^gzfhZ-^(){)^HTQI(8&U6fP=V@!u|;N;c(Py%_(P zXizhcig=p(gBKlwS_tN__Ce*a9Aw-cGY6HRkd=UO8Z?1DN$;2x3Z>bX7PSJ!W12igZ)DK#yaoFQJ8F#d1%_xS&GMMmEu{=bObtgE9EvPS%0#Q()j;wSW& zBZeb{9@7Ae&fM7yv4Gl*+I5Z%J2#37;~LV06YgDlEv{yBMp5i&Oy<(v-ek^b5o?Kr zxhwTD(YT@kdiRry=|D+~=q6(EC;Gx?HZFq^qhO>+-985_@*>SQqJsF@ILy&pMxRS_ zC878((Wzc4UxePd>}5{lq{L)Igfp?97DP)xWY;+R{O_8VUVc9>y~J`HMQ%DTG0Z=k zm#V~!h>5S*%VLupM!+175uwFQaP|Ve8!c`!nu3KR7%jNa)FX7Oq~>y}WS2ZDZQOD- zm;Eo1UBpF38OvE2%Y_beh?8nA8O%*ajh96lNeMERWJYCYktA~ch^;hXyCSL+v6aVv zo2?Mr9fQSA^-OdLqxKWFzxY@)>LX0}WD@5}b3>fihx})I=97tn>NRp8BYO}c24med~eN0VG zmr12KhIO)+_O~Q&Y>{9tXCedf1|~A#?iXEplEyQU!TSrlH!i}9a%G|*gwrobJ1AxC zVoqephg8a;gdB=Go85uob_@qF`IaQeLUEI`c`U`dP{`Kh1$NU}7Z9Ul^E4wCq0H|AN{A_oc8G*- z7pVj!v2puYR0!Jkzlwby6YkNsIit_`!=3n4Ha=CLG1dv)%6Sb(^w9ziUZ-C@*0|EOp znoBlQ=pWz{e~6EX_&#h5ghtUl21&XxEbg(S5e7DO)5v(>1lsV$>vdq>n3K5=O{jh_KnYEH^O^U`r5U49(UOwA;-#+^F56 zOmhI-0vu1TF$3ll%;U6uM9{=?siCei)Qr|6- z9!SfhT9gOJMgQ?4NeShvKEW-L3fMA;5@*{}v(a%sk{G0>!R9Qs`2P-zZL$;siJ-1x z7F+lquvqEsFwy;O)&$tyqK~)5jGLG%JJO_kf!tEl4Rchr6E}#lpr9sXoy_gES|{sh zCwbH4+-xk<#p@qWzJEEAX=eyYH=BGJ>Yq)%^tZex*-ESHmyn^G9N>WMfB z5Elp`T)c_^Z>iL{>waL+3y@TS9UuM_vcTSlK_tLNGl7R+Tw`IueTa|A7RP~V;xBtpeRj$w`oIW0m-}=Y8&f)yFR=X% zZYnn5?qNu6BjGX(KK5iQXgV*@!u5FK*;<&9=~N>|7CSa{2_A=Qo}}XdS*eL>jm_{5 zIG(Gg*0RSdF4k*_?)KR;N~D88&X*luvNKs07`_OsV?w?XwE{XkT;*d|Iq;Q?&_j!( z4V0fdFT=+b4Txsrt%Xxd+<2wK1>C@(5tYuhGrlP2P6mY@bo+sLG=xoDC2U$`T;<>|F)IoB07;E_L4&1!8WjJqS+d+m-L@GHYfh6q>Al4i`T)6* z6~~U9`k-6;3cVk&cqGFkM(T1>z=9haRoIfp$ziesmaE`O_4o`n8Jrwn%5Zbe9Gf&6 zCXu+~`ZAC1+h7j^({8zqXEZ2=u~yNd-2qovaCf8*q9PK(4P5Z?uQr7-IOE_Do{+qp zz5&w*82E#{AY$7T#dL;{DlKC((J=2BMlAy9XxUuDG5cyZ^VH+s9yL{?bX(6NLWmSy z^=*>$HO(conT0C;lThVEMgKI^>3=B{Eg1h6LomM05W0FQ$WTH z($x^BcOQCzxVEa5Kz{<_aw8i+y;uw%Z81~;h-<$#xSP+V7YE3Uh3nf&3|$Ar#qFyj zZlOtlI9##>S1f@x>T=pGb$I!JxHhejKs=lfaJcpo=oFyNEZ-tP77VHZ#O2}GM%)?! z5@H66Ab$xIBY`pjad~uWD~8hBiJ=+^v{oNBM_3+L z0C6!4aE-YW!%YT+#zb#z0n~*-X8?6&P&<%=6@$70LSv%Lsen*yK>Gl3=}k8jQ^|Zl zT+jRrs2dBHiRR&2?HM4hzJ@^bWxf|tZLa1{$ex2%BYTcsJ^)scZ+t#qHN! zj9V^&iX@N%h>wdA0f>un63KEY7sKIF)R|39bMTSC-e%7RQx9Wsn#$0mPMHhy=Pa zSe(i;KwQeML&UfsKpgIt1Xm@&8QY3;8)GMqF#`}6qeOyxBf(9u7l(@i#Dyyb#L>$u zK-`#7bPz+GB#?~+k{>D_3qt{MwDCa#wRIHJt|K52H+nUpi|&GU>Js(V zN~Pc0?prz;`00N$pE|bm*$ktxXHR#{&qZMN*pd2gvyf@yW8`J%8jKvzE-27H+RWTM zO-3f3!NKVY~<_$HMqD z@uwHFNYZ}Jq2=Mo$rRu}SUyjE=Wmr9p8k^`J><&r%%TJ5L>teTNf>NeBG#H=u;c(} z>s8Hbgyo(#a3U~jTks573AhnYOra4&bWQBN5rYQjx!}jjL%zK6_~qiqVW88UX|V=^ z#iIJd?i_x0=wwQV!z=^FLt7g2GcdWWq%p@RjE*!W7Z|!i)tJsLV9J|do&b}fCmrSm zFr@CbF;+bgtH5O&F|>d#Z-QwJOfI-C7sl706dGEhE$E?I_)d+SDt_lMt78jWs78iOucWMqOW0-$HLs)%F4imQwQ?-zp^{;$B%!BW^GJtGl<<|BEG zmnM&j7EgLsB0p>J4$}rnw^-RA#A^V7tYR3 zdOo6XPp~?uw1hfSno95l;b+M6@RJ^Ugr|C(MLnB5nEcQby&avL?Y&*ST!%Xh?CdsX z?9kC(j-8ug-CZ3=*}FN7>1;^z(i{8|@N?wJu-g7z!wi_t8+(j5ko2}2k}lv@&^|ss zhNNrGbqkpq86FiL6m8gjbPq%Kh-g^wnTNpw<+(E=LNI}#4DazX#!viUVq%Y)$fX&C zc%``9ivXMOhKYKK3q)}!49($2=tu66;bx?NY~76v0x2PUXZ#Qz8gV&$Wu1@=*_@(x zN)fecG#K<2FVr96hw`U)DucK#XybT#N7#5O*E_h)>*@sFN%fMhE4_>BdI+#-v$~4o z*duOdDj9pYy86z;F!)C%w*GEyrELxlMMjVa=ppM*V!KaiTffMuw}Eppg0tU z`oBl>zJT-`5Q1srAJd=MhFoVP0s6Cm(q)bSMTkBOL20+d4<@VnaLvr@K2y7jA1VvI zQ+bR<$ip%m4IY6@WrU3KUA@6Vnmou?r*MS11JrTi}Zpzk_CuqQup-}!?Eq-`_rf?snRo)kwBc)H18+*k+3 zGkp0W(a|EKvXrj)AzBbUFs1f)2b0)3AhD9EtXu1G%I}7}!D#x5x|Q{7p*R<~R8DFW z;vpABcn$O;mAxfgb-1nI>cZ85YXnyp?r6A>+2bd{Z3CCa4~&t=PlekK?hLs4a7|Gu zXi|)~g4-Uh4P4mtj(39F5$;*IhHx*#?F9Ea+|F=|;2OgvTk>7tl0D+CaJAv$-bQ>| zxS*wYYTq7koAbVP!2hE@+m7<}Zf3KQ;!wR;!R^w#&jLb%*;xC(++j2qNcR_&v3Y-C z&BOX@AY2IhJR7*f;0}W84RTpNEZ3WjAF7=BWTo<^b;F4Wjces<_dcdW&^@Q8J zzp&xKc%is?iBBLa_QPDqBmQXBtiQx@2EwmvV}At)^&v}xks)(@ArS;d{i~A}vO_e< z6ipm*b|5!p(`-cVQ86>5_~Ue7#1EB)`h|E5$#C>cLOrPtQ{bw?^@U6Gksn;*m*6Au z#&84R_JWH~d*l1Tod&l*+(5Wgw;;I9+sht!O8c+cYdQS-H)}6(oWbzx_QUpynib;@ zi+KNdmZ#~Nvh9rgMG?ee4WXzF#k`1C)iim#YZD#QzL@x-vQT?b9jNZ~@KH~C4~I+g zb_851>#QHt{}||lG_;DVLG(i6FvTZ&xsPApX7#5y6lNFP?&63%k!&NHPkmYCDditL zf|lstflM}OjavQdlPl%QCRb{hdYs~L4MPbu;LQt#37idkl+=!OKoG4(hR3q^1)x0& z5I$|16z!Eu6_4s=j(4J|Vi6waEAf=;BDkI4#=|92j$tBU+Lzy)9DZGsCv&HD*1^~n~v;5)pn za6#9+47l^)Zi7qv9y{S~gu4gscDQ@tQvYPaZBFy;ksm$cuA}tj@GkCiqWON!WGIS5 zVMu=IDUR5z&#?vZkEMx!qoc(%PyHf(s4VnO(DtF@=ge99>E&gclqw$Y9!uxP_6he> zCPN4MctnN=V{gUK8SB3&!|rpet$O&33z<1BJT}U3B(^hrEX;jEW=`eDObY~PW^QIN zz`U=8nYmBQ)W~Qbi2=X=I3=-7z<=95A(Ir%{y%1&&_ZHTkZ7DH5wZi=3pAb%m}E`P z4j@6C9YBIqNU~tQsw6`&NQF2Uh?Qa#iXd3x5~BeMWRimBeMO!gq#uG* z*}8xrST2&__KP6cwo~91WQx2SB1n~2D1uaY;~}Kda!r-zBZ6Rw3yn$qUXiyz1gWwG z4dGNIHVIXEbs}FCo}V(E+E9%BB1n~YSOlr?3?aynuPV=21R(|>T`qx}KR_|ChZA+h|M;be`AJ6SjeXl&J^v(to*AvQT7aWOG zG|m1!t^N5`)3i>ue`|O+)MeJGcV+hH5*HRfY*$nHWQJ!}ab3ZZyMnRl{8qVp!=}yq z6!7Kc)xczT9~qrezQWY0gEc?DS652CVmQ-gidKkgrM=(1$XUVLiz?*?4J(!(`DKav zovb+~`^%p5X2&EAqN+g&NCh40Z)wadoUsz;VB2=A@!I(_`U_WpT; zO@mIXvVS~VVb&v=9K$>5J+D2o}sjXKP^qhXX^7h&#nR$bNO=*!fLr&rZl~x^pCYz_5ES4#nR2S-0yWc|q&PQ7u)c z{+ehrZS9cI8R~l{hR##Htx@^&H{~_m4)RovY*Ae3xJL8!ogGTcroWZx@HJl{Wb(Lx zkJp0(<7Zj%+y1T)HgmRq@z-*byTXa{9%|hf@gz9>>8VejYR|10dhTSKdn*q6RqeQc zKWtVh3n>i#D9Oi}Q-oZU|pvTR3M9d&tVqW-{DU**t;5pq_3^W^O>)cQU3 zej2>DcEwDKx#vQhmml-L-cAsdlW`}!i`BE~qu0f%-H;omdgfGX+0MPYw(ve@bNW(u z)w4%ePdsiSA9~DZ&$p6%i`#`+DO*Z=wLe%k>2UtEpSr%C`f~G*&={39Gh{OrlsDU2 zY1AwUR*Y;lj@Ke##QAkP^Rk~EG&wTgTK|OFPb==MRzG*|x0AJx7j%01NVWLR-K7rC zir>^9doq2d;9^_B&z?=rKYh)7&9O1NcN{lvVO4l~jY7%I z9^=Zq&IgwonavA2mOaA%qOAV($!kr*d-gx4dVJdowF~-BTTD!?l{KaDZ*QUBHX*>O z&xJ9jCi0i~)12yJ7cSj1acseQdv~Se(ksKyBDuY?(ho%cykB-H5t5tLus%`HVnVupf?g)?r$?Vn4{y3| zl{tBG>~jM?|Jzer`{FGc6K`%ePF(k^?$+go&PVt7$7Y_}T~YPs_riBo#)7g7fk!Vr z{N>=}$u(P@9lPHM3lI4cG5cVc#emw0Jq>#)E2_@0HfZ_I%K7P0#mSdvc}2W34-BjO z_^#)f6Zsa~W6}(SeKQnS{h711&FR!cjk#r+U94-54*E9tUDP?3s?de{m+S}iEF0g# zeeP?=xPa|D` zpU({|%kr|@n&>`Zd`peiZH;s_A4XUk|7348cu&}uz~>X6FX*CtecUwb!cjX8rpY|p znylC9#vV(*FF8FARTv-mqtN!asi5Un{!!(n`;1+#zR(?0*uy#Q&*`y&&pynx?S0b4 z*eY6IxqZK$E#=?lj2U?>)n#-RlY+Bm>Zgduu;iO?|k)hmU7bdgIeyBYkf8Nb$clV5vped&kl9L0lsQw>grm04`= zS=)2TtGQv<_Pa#f4cDJsZ`RYfqQa^yC`0kmqN!e0UY!Hqx&8L;sO--CO#R@rMDwm0 zTYF?5yj1yVYuT59H{RW!|E217PFQCAmx)I=4pH8Ebdh!9zQe`_z24|5_Uq%^vqMy@ zh2rsw2$%PTVV+h3=XtS5Cr=$!^7*>v^NKq+vTl4zO)M!N(Q^GERio4sS0XZg7TTXl zbe?P^r^vT%chOeYVu^-EcZYQMV7W}MxZKZky%%2(aP4@>dhwJxqx7HmXdHXIUiTM$ zp4V>^E!-P61_YEm7&G@)8~2LgW8*%1tTQc{UuF6`-`=(W$=~!5rq44ru z+>`_Pfx~8|x$t{ujESkTYB?}dQQ0We%UH=I&{n&0?w<9#Tyj8I`N)-(BRdCv8> z+foZ_0?NMR8r428JzJ5Z(@?la-Bys?HSTDd?J48Jh9p=S;nUob4__%Ij z+@=1?WB!}FR9<%0wl8WgTmBGV&R3mnDH5hiavVDix z?Hzlx_v^4< zyR}>8yf)>|Zq_BeRt{LP`l`*Tdewo0{&2KaO=U^?)G^iqiwnBw=m;9D>J)%wW#fOb&_dUSGNG8`Q0))ci#Bi zQ1_j2r|!q+^z2x6+Qiwfp~ozhA>Hc?W|>}?eXQ4}EAPz?Z13MYH+56Q$KS`#Iyj+2 z)JDt4kp^AX#G1H!&W?Q3Cfezzdogn!3*+2Rj9k=ONqu3bfZGdpM#s-x)4^fRwG8=r zU#?xAf7mRCzsxaiM%icU@ak2cXY!Y3g-v=H8!9{6VtPO8cOgoP4h7ii&X^js&&1y| zuiCG;WOv}NXQxd&E!R0HHKaV)@Op_$n{B$oM|B)Ca&Ao8h=!?U?$?zKMy)k(aRH4Q8O7`tWrOaD5* zSC!9tSKUo|Rh?|LujZ^z$cxw6t-ci8DQeil-|#h4!TVb;t#+UF=RNq-;o_E0F$aC> zU8;HS776m-b{(AfT6>)Ho3-}JbvsP1zyG{0_2bQN?jQUn&nX?(|MUY5VZ*}#zYckn z^L|!Y%GP5~?{s?qeXmP z#~VXuEWO$8ZtiW{m%SlPoHVMvaj8AxexI=u=!^exgZmdb1y4!QfK)p80)FbaL%_w}9 zx#6_o-dplPzkHgxbKinFH3vtw>~W~&{_q1`E+5#hxA@JT-ZhrHXM4x&w6{IE>tc`k zjCVr^Zu{lSf*n6^IJdnp>SEUKZ5586+hcb^cr)Ro+M}CCZH{Oj3(y>X#5*wM@bu0l zXMA0BPb+*FlWnm%?bPw)vK&FV!P$pXCZ2!QH~k!q|G?m!?363Yzx;71tL3;20W15w zF6;l;H>}Gk>yn>qyC1)l?5?zMTKU;uB!1w!cDg(YZvw3kr84GNzntWAJ=Jc4pn6r@F37e$Ou|kBDm`m)1?V9S>3#K25>QNx?@0yWa`aV6}an-lG4RIbpf9UsrIM%J(DUI%SElymn zJ-l;AlA1xg!;cm(DhVEtHs_8>UB{Vg>xV)ZK*4y=}dHknG-oHCd-JD??_NhQ{x6O2` zyhzRDx!3zot~}^b;bZsBYgCu?st-{~DF<8E_HSKpmmvRhw;?&k9jiOp&+*=PsH8mQ z+F>6{n-ddWO)2`#`*57cuzPJ^e&ctt2~c)k_VD-WK35V}tcWPy@~ZohPoArM$5ti` zv=~27puBR=^O=?%mGYLV&)7XMYiEVs*}SC>aa>6BCW!s2Pt%CS?;{XgCBEWagm)7jl;6(8iuoVS{J{J(yosIPm4h6m2JkKipMB~DJ1Y6{f89)ax3NX?acmh z*7l3;PwskQ<}u;y1^55Bb}{^Z`w1#XwpCPi(0R9b?%t6lA=g_S)rj5avn~JBfXi_* z@n17H|F%)rSk)@SYNn^biao7^mgdiTIHXruc(387?yh~kSYCPE^Xwz@hpX@CV0J{` zWyqbOrW0oVdEvvO>fLFe8SZv?#P0(zh|2&t~%d7t^G-@ zX`zP=-@ZFF%O&xgeObGQ#S3RVsjR6h&hix8T~g4BpFVb4*xuYP0iWh22VQ-tBje*f zRe@jnS#$8zR3-KIHZu*cxQ1v=x#wqJxjlGRw4 z)A^6iT)n?P=aXHZ2mD{1p8CW*zOR0JU(w(RT}#dPdzSGAUMca6KVRtIy3_Hxtg*)~ z8r?p}atJ^hspZcy>-n*hgBVBJ%sQMYD8G}vJ zrtvpCpXwtM7Uo%J!1oVW5@`P5Z2)f+Ut!%VeVJYJ6O`)m-fLbQ7kIeza?6v|9x3Ot zUo@ObS`hH0{ZrkCro)%tUGVPDV%I>oqyFOuW_jM)k;98FK4boD#M52&gCDFb*;#aP z#@+jMe+~_)4(&U$wBbN-lJi5q>_SI*(1_P_n2;_CZEeZf_a7PAI*lePcloT`@A zRW-w<{L*(@-6?$ty9WAY4j+)ntr%2y>mgy-s2OF4Q^w0Tz&D$vpzPt zr}+n7WeW^9oj-O$?!+^-=p%PFy|_1Qz|VJL56M63svGsVwcyvOsx8+}vq@B+5jtdE z=)}F18n;!~D1ZA|g?F&qLd7jdUTdy#T&A?+P6wH{(?b;UzkUoDH#t5q_UVg>z5DlfRBbC-6KDM(|DyZT zx1)>B1i#sxGcMRROW}#jQLB*;)J+~9Qqgy{k{j{CUVfh6Q@`2^dxM{PTg+Th>l|`! z?sflT%X5MR?Ye~D$rwHTnbi%o*mY-Ahskx8ZGFnSMc3Y!PTQP2dRDc&$?=J+eU637 z=a+ojlT~=zqF3pblu2a=+y68z|M1JHZ@b2X?$|6lV~xsYWrfTd4J+G7#o#3^c;i~F zJ3k`fS@t}g`A19+s-4icUVUf9Pruzer@r8E?Mc-~PdhEWd#CtK@iT|%Pma}hd?=W? z_+0CoA5L|h6n;3iLht0T*d(Qi&%bGgMg%F?T+^0O^;sFX%-@&c~`a>w%b1b6i>^lSZbc*rofAv0qi9V`kRQF?#kW4ouSLH!@tyw1!y zIHv5(mP^Bq-d<#$^{x8s*|!GQPUk0&Ikv{!`1p?9rwgrG+$>R8<5f1Uhf!(p`C~!z z%r5$m$eui1U$$qs$=c(p=lWkzTd{3oi>LagvbCu+{@dzX*!QstNH8%Sb730)lKjHh zI;XJ{_bhd{Ute&gG+C)A|IF~uwN=T#)|Fo0pXIKWbui9ti@zkg(PM-XY&o?Nx zw|#nZqQ;hWiN@QPZ`J*E&rxT?bD6RJZ>lPGSG_Cz{X&_*_~E6afs-d6{Ke6EYfX6A zjqbA}zJv_02s>!lb7HNkqH?d62G%p4I$OQFJX!JRs|c@Ibzy<#XL`Q-xZNWEgwP-@ zW|d+_-!@xw{?tfJJ>4a00OPJJcNtY^JxwO<;10dytD|_Ig;ZwXYZcC0XBm4 zk)6{sRg|+nU)4HzJ;}Frvb%E~Ut>n8?akZLF(Sk7G+^eumNx_Z0@VO5ia}d zC+mk-IQKLQDzmCsbV)G-%m1lv?*co^9)0(lerEno^Tf2^9$PcIR$e-o{iST{r~B`2 z47^?SWqy2SSkA_y6TckYsyt+0qV=L)2F8c`DeAuI(9^k(qD5?!OGL$S&#=Px^PB}% zQzsvdz5cmm)SZgwnxC)%P+pRldT4#i5hqfORDaHhxRQ9rUMOcY*}0uHU(rI>_F{Jp zjU~bE=?-yTnR4E9Kj*pzTwlD{`clVqqq-@_H1_=bi|+czzj^WW8{91>mIMTByft^s zgW(nKZ9G25jh$a&x-Q^`L9uCSa;v`U&y4PPrYcP#qqJ~J+`E^<0`m{>UD9U8jLGOd zu%%U%k+Nc@lCf8)wr!xv`aN?iSLV3v+L@*wbT+wXx3|}G%4-T!x8;5*3n+bFYowD? zaaMg#VMEtsfvs)Y(YT00<5MBmb?Y6TJKIe95F!u9+b`P2nRTe!DgqS4ATTeHY! zrTT^?_tm^>E0o)Pnx^z%%@~y}rYfpF!v-64-4W5g^6IdT+haR)@N3^gzqjiCcCY+@ z(%bhmzimj?`Y&_#qX)}+1X@jLGrs@kh2i}kUa;z`mnma0?tG&8x_ig^ z+zoqSsV(!wIPAAoT{2hh=~ip;wX5l*t40BCuAMWw%{P3$v2!Qmce*|29Pe&&x~yZ5 z20!QSLsVv&&N8U$b!_$pv-ejv_3pp@K*Xlh+*#v){}|O_!okSLmK$T&bTOFi>24C; z=1pYGy`P-ogpcPe8hOHfp}JD*1-An_&5e)VIme;HntAdW*XCco_JyBgc6dgdy^4lPoeIz!ji-(+8qUv-{m;O>&*Y17XB8q`_t zbZ~h{s!Pdr!{NHy+Ke32any*kn7Qs{QyWGZC|`G-cyhH{`jcJG7dNF3Q+R#I$!^pK z#{}a%`BpCUoOSZqk=uX# z8nvtR`JiJyzke+a`z<@TPvt!I7PVbRSpQLJsQGgHma(t=>inyEKdY>Mm2|gepH=dU z5TCPOT4ld(D7sVdbpwCPH*bZ^&+W8&{rO;?{--S$9qN4!#=PTIyS&X8EP9CWT+ zBY!IiQ+sefGpM$>_Q8pJrbibS2JDnC%D82D_jyF<9piSBFHQNXb#e3BZkHeSj4RNy z8=gOI?2QZS2K||LH(`6OcGbG;Zin_>TX|{gm8(XfG{mkpaWGp`-M#Jl-9t8SnC7)_UFR2X*Otd$+L}{Pza{R#?akJ$*8lu@ z?zZ%-aN~`!En59#ac0D(cSQ?Rh5gKzkMvbspx_V*KZd(NFqxG6k(^O4#y%_BBPhHC~KP6_lrQ_^|*X@gn{PNi+O z$SF%ce%7E|aDL*Hhv(A!zM}D;of91Ri}IC}mRX1XSQ)TkT>rAyeY%ACKK{AH`qZW4 z-D?*rxhIF8EuU6`4S*5%&u704eek6GX{_b=saj(_+K$^=wafhTXRWO|4*Tn8J)NI> zCAeVEftX08p*L@ZcU^a2QG}_sp04fAlYcJLE8NoVc2&3SQ7at|UpCyYG;i3|j6R2k z=&iUiNyR2O>*z9GVQ&xXkPR<=)s{?n{cP}W8w3LQ-Fhy{IQ?ZCvDBlj&(L&KgtOJ=?Ixb1zq`_1jsUspeU>1>uQ z^!lky@XKxyva?>hoVn`SyX?`Yc=M@Fzk7$-W^BGIDEO3THNDN;WX;IR$^EbURCpX5 z<@L?(Lsfd0gDFW-t^3!umQS#&&l%F~=T6lfjW>GFu}>*4Ib`W`_}Z%pCv3cbE1ELQ zBku6Gmu>F_*mUAQT;{BNrBC(m5i3?Cbbqy_c$Md;BMFsbeFu)W7`SJpvY?~o%;)M$ z^OUj%?w)bhu3~44hNXFJhWF@w=>4b>eLBy6m%K%LeY(lHIfffb+s~=HIx^SgpxK=- zGP$AlLAyS#pJL$NbHLomTi0*+&FIZrx3IP?-j~Gr{T@)X!nf>1O}_Gq(etvZ`%mXN zmlk3JAnB>a3w%Dgvh)2<{+mL#$SYz4;Ji%Ug9FEBTInh&k7*w{YSXS;J-(fszf@bZ zpdxy;R_V>2`_JvQZmaDaziYP9gUdlNe)D9sB5xo3dM)bePvdsJ>0GO~e%O}-12Ubo zr`(wB_J_i)H^Qlp9lNGZtGBQE)O)U{{hAJa$8g zA&P^3@;sN=&Fazm)f@YnnSJ%>>UC=4ma4Lb<&$T%>|4<~Hq*-NmUi;+eR8(Xoz4gr z8~$3JHhYrKhgQR@CwzJ1JtUoSdF8n^0)cO#9bb+IrD40vF^s-tTL=rR~UHC zTpHAR&ya_+@_U7s^;&!P)Np0_#jlTKKVP>)efWI+BW4|j-WlTZ=gbMF)sH@0@C;7d zedBOu$7r=%^MX$KuPtk#@P;XC(PAn_pi)DuSVc{&%SB|oN2EN7F8kxc7H-YuMh}HS z3j(2}tYOJjGLA{=RhWhmiL#RFZwOJ-_J>}T@IsD)w@_0@M&Xn+6L8m#mrb|Xm}N3G zD3Y^u5}7skCX3CMYZoI!9>OCdD8q*J+EXle5p--IxRRxt(&CD52m*~B&_83Dn9RbH z4iFd!gj!Cu(=2>Gl-?k`wk1@hKV#wDlwhX9a``G2o-~7~F;yFC|NkluI!f?D3ATW% z!*B_cS?U}3H(LN!>6pq4t(eQ`1i|ZX&GaL2^tN%dM>AT{5>Xudv#Arr1c-MS10-d~ zoOP3rMNp!{N(P0!N=jatjKM`-Xe0?jK&VlZi>#mzI8Ym+2i zG-)|u#Oq0>DX7o_GlbSJt?CG-a1?s{I1}9eHqQcAB{NB!Z6~opc(GzGavS+2O2RQh zHn%OV;DJ-gClUD&%+{Cxo zT+6d8q}rBal4ZP)ac9va%cc?Nn$-e_Wwut48aQkjaoE4=2`+Uh4jY!+qDfzT&tk*! z6lEW|bu z$0d7FB98m-@-UKPVXcn%8{_UGo=Rrz8hI*2Ln)rxAjMOg^JwsAPmyVH(n%ZLmE_WL znP_I_N-{^O6~QtBv{fsymQ$)JM&6CeBt`LSptw+ED;#TtE zQ{^b1R#Vta78lJIi(k^`UfXCQv%G|Q!Zb2(k=6p(3)JGplHSeg1+*~3h@pj9L83Z+ zkwy203zpEgTJYl)ETNCO2&&OcSw}D}pE%$wy&5hwN?~DAQYnsb`4UPbWgWc~Jrgpw z=29xddZeb(M`7Ysq*CfSdL1qDtU@L{!9}IiR7$~9>_BeM zpwCuEP|g#st3(Llk}CX9NhMe{m0)Ctg>|#i|3!9gTB>e3noA6sw4h{3%MR_VXYvL5OoKlC(BX~6fBM`)hc^rV>Ej6<-XZ*_PYo1!PbH8h z`jErXM{68J79uzZAG3*|n-b`Y1hT{K02hwzaM7m_I=r(~8YO{NNuUi9=!gWmEP*=WqZcl{t`f*z0*#eG>m`t* zk~qdb33OBf-IPGjBv2Q82*c&kO9Bm(Kt2*^s|4CDf$}8KeF@YSiE-%}N+25v0;%H@8xE%5639pbSxcbR z5@@3YIwpaxNFXJ3ae9vc(ML!+JQWN@`b1TMw;2$9T%^N0DuJ#@AQ^m*#l_G8q{qVb z2gJpQkoXEDzWV@?0s|dhF(7W_iPh0vQ<(URk!QzCVs&)JRs(0xsOmjENpH{umls<| z{{(yf=hV@W>K{_~)A&d${lPGX;w$kd<5FRy6#ignA`H)v^WCtw`>&1R$d4Wt<_GHN zNC8j~{2zWj6;I*t89Mv4kb_$wQL%D0-+6{Wav1VOL|z2ARwJeZFsqtiOo7P|VW=ih zK7b#oV5L|b#u=ChP(dSRJTQlwV8VbQR^1q8J`lMmLSydBDGYm9nW2-4A2ppF;PO~4 z$ZHQ5fc=MZzJEc%*lC32K89s#MYzU+$}mp5if>b;BO+gs{tnR_X@>CqPU(O&M)Z|@ z)3l+Mi_-=o$_rm1+xhxN1x}5L42hoWJ9T>C)G(AIJS-&8t}j$?NqI3OPX)@X`WQ+* z|4g@4p8*3bxZsVtt=@q}(SV`n-_>nZ2UbtIt-7Pz=^?_g`wQJx=R{#xKyf%J9g2jH zKw9m_5?M1@%;sfl*PUknBHHZ^e6$vKZqhemaT(5`E|){Sh<_i9Ni*F9ScbX5YwD9126< zr?(SF#5eMyV*ZOC#~UJxX@ODEkgh~3hC~QgC^jIS5tMQ#{EG^YiJTe;X057CEWI;+ z9Et+|=(~Awov4iBx(?@Y-_4JJOXVI3w|QHbfsVZ3N4d~LZ2>8QCvJ<6fO|J<3yMQw zdctk{eOvTljX{b2;DOQ}v8DjS|3?}_3r$4xUo?JvD2U*LMRKaK2oo3?$=Y>4q~#&h zuF=qxH-iPK1ByOFp5Z@-6^S$fQ9JVkgQ8gzGd)1%z=$8JH$BoiB%p&Mp4tNK9}jL# zJrz&9!U!%+1zq6cM;efs{*rERE%Dw1t{dE*a3{g-1=k<0DctFB&EU?2+Z%2S+&*xL z-6L-N2Dp9UX28Xy8NVBDf4KQ@t>IpWi++r+gNvyq{wv(Ua1~JgA#kCyh-V9z`p*t- zbDA(jczTEi=xIJaW&qb*AC)0+M0-?c{qJdlQ`l$#&1mrd(F3|5Vh2b20kH%57C&>T zh=w9qn%>8tF7)mNm&$={#8sNsd9R z0EQ?4r#6Dprk;)&J`LL$|@9TsAf1Uo%sZk)Q7nZBx`hE4IV8lCF2UuWpJvL>{ww}BCiT|R!|z8vum(Zh`bkVQysO`Ctqld zSVRZhCIxLxC_sN3Cq-e=gf69pnGVkc5Y}seEX?|tSy)IEZabRZ3ff}()IYDyK@r!Ka=&L+Jlz6D0{z}&WgUD6tVd11YoxHw4 zz!(9>ISgf^hr0Gh`f0lZA1(?*;n;&R{JS!IA`)=^4`g_eg7W`Zgl{gNi0GcpB~(X} zV`$!|b|Lv)fM0W+trUmCw82kCJQ8>^Vjb%LSTZ3QQwb3} zU>ztMrUASMya{XtnbW#8;41K5kkhRNwPbQ1xB;~6?nm0cPWaE5PT#mEd-8Ew}^R1d_+} zW^gCC1x$h3!u@&hWv~xaUC4r^_3LW#p`*Bd5w-L6>lNfupK%JKXRKWX2zL1P6t4}H zZ&$IGL;_p8YBpm{>A2pj=J38-Y7ZzqO`J;84V*d-l2=_H0+r6sX36_G^oq}Cp|ov% z$GuXYnhK*j`WI)V4;c3)KJTHIL|>*nT71yNE-drv*3CPjtY>ek(z2RkTUHIPXH)m= zP0#G7H;PiAJgB^s{QgM)I_0B$y$P!Ay#-zaz71k$x_7`k!FR#C!Mz~u&AkVfvmE?+OdAiqlIVNhxP5}W{E;PlQ1*>%Bu2hKE7b@w`+ z+Sbvzp$E@`GwjiS(JNtSf3_17UD*Qs5-vM+bnNSEKmT##_SBAj2fiVrC+$76`z7p9 zB>&i(;3edj&`*3WEzg8DH_|jlcKemI5A_F{qK5tiC58S3B_+%Z2z3weeL~%fNSd%N zHZOvbu+bwORygBasM{Dx2{%GTS0A|8EoV59lyv%MtfYkdG}h@Kuc7WV(h>{N#CRns z>6S-Q!u=BKhGX4MI<0VRU?`H3<`Yo5gj;x-8_5u%)IrMzy=vQEiZd+CFVF zVH_^lH-UZn|Eo>d1w@_3f3e!+oGMEjpL|^Wtr33M6J%54>Zw%UE)P3M>TUR&pSV{% zbF6#~i#y1eH5K;XWq*B=9fL49O@QmI&JIoGex;jv%5|#y^DDz6sOY03me@;elceQF z>*j4^-`WGMd9jXX)_GbNWMz9xeouceu5Mn7$NaiUEM~jG&e>2M5%=_0D#BZ}?=UN> z3<7yw_o$iqK_Ksy3>*1q*g#kK9Wovd5-2Bez9A$ZmC(FwGED*M+=*y-u5&dE%C)AO zMACphy%A#mRB!7Kw=BEEugfOthyFO(z2Y1X*>UmKW3@eG2iq$s-9`!oYtsJzNM6=HM*~9jWjY4!i{W)Ee5T=t{0y}Hl7`}9$UoTARz0p iH-|Ti{IMu}w{LIRG7gAqab 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

        Eyfod3RZ-w^rtjqac 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%0D<<3Btu=^z9WL~xmGsU)NnYH;Sl7TZse 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 z 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

        Z5ggBjvt_ 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

        PffU-OYPs&rXIAv7~S~#K((k( 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

        Vcgk804dj*OW>?j@ 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%0A}NO1O2d))eg^bO*FS0%9L@k@WV-`?og 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 W<#F?zANv@S~-re)$^Q zkgtj6``v+ZPkDK1X^|!>P`T4u8-;9(Ik6JAC$FqDP+Xqx&cm(qtD9QuY6Unq(^FJi zhtFbUm7W3663YN3xT>^f&2mrUnq~FNeR#-5MR?h=`t@#i)~tL4iriI|YwGC+`Ifp? zyR&(#m((wBu{)C=u5V~9S~CY3X+Vj4!+652jmwtVBFY+@R|lILTN~|?2!_`zrCXBi z&Q)w^fejL!Eeo$+QrDd5tgpH5%7o|Y*VomS)~#9Ix`H6Knf8R2)b(yQLiC=)iWN0Y zb#rQ#G}PIZF28r!lLq^dmg;D z5f6l@U&EeTzXnd*(71F}?zF}*9Jp~Aem917*DZG!c?yg21Nrbs>GjKS$9nEGy3HBB z)&TFr10BeT*T5^y4aQ$on(qx1m$?1SHMRA4L`Ckjb& zX^DD#?qDFVxFo;a>#jy#bEnld*0qQxx1we(;K=fl79rodq6TWo^$Qxy8e3=At;Mq+ z>Wnvv$DCiDDq2=p(=vNbsU5`E*u1o^7ZrI8O)F}G;$ar#6fnDcPIJ8}xhb-(71S@U zZ%q=*de?+kCkdyvk|eaWaa~<=lGw_orev|Xp+fgO|J-2S+@hl3bT7Uqxvy|vLBX=r zc!JoI1wRna2RjsM3d50b;TV!r-1G8CA;YuqgVhV+O5?dul{_iV#eR_>o@LY0S{uUi zKUTAcgHgY_DHK|^w4t%3PW!dIuC+z`LC+hB{kXEFvAI>rt)qvYxV^Jyd&&#EZuhKw zfJE`cBXQQC+oi^_LTx`GNlsbbFTqB1{_d0zKi3nwqXYLc5XJ2@UG9u?!( z*!kWo?b-Z&_RC&dv0T zM^{wwqbuBnT)?@7q_nm%jCdBJN9@qUC=y{Q&rRW$6(M?{P6ALND~vtjqqPxFdU98m zA@1bOuJFzw^Lq=?s3_GwL9B|SNxTMW48DH>PSPBo1U+g()}kpt;<+wnbe?yv%n&>& zRNoS&mScwGdqZWcr?m-H*}5!*4?F^=roqk5n_nOtr`n6h5P1sAix8yQdyq}kjxqDX zaV$WxEIne!9e+mDPYtrPrq=NAEE`;5AVA7(p0pJQ)(W$trX|$e+K^Z+At`6gA`XY} zXqeFIdTLGvnU*;9Fek|fr)Lq-EaGwbUW5d#mJnLthILEA%c(l4xtJ}H@6FBE!0d-q z5f%`&Y&P*EdcKQiMSVl9v1`y;^knLSjb|!lTjxjB)UOHE()oB0d^c2v3N>Yol8bqA zJ)%`(>`6#17Wqn)xiHQlU;~?$NlKeU*A!}KY;5Ak+t}#~6^DuoLuG^~4{2N$;u6p^ ziNq7H5Rol%MWP&`5)$KQeTA0u=(iampk__4f`v%2422NF?6dJ^DuN4CPbKc04NZ0K zDHPRWt+9G)5aB$G*2CxAB3$H#{P9XqA+ZRSi${A|t4ljODbYh^sJ4T7p^`#FW+o?* znaPP1#+-zPIkBguxf6n6WW9294{1Rq^(HhoRBYoDmA3xuc8jXlp1;(aV#-aNpY#eZ zlW;1mc+667aQFo~Ej3GiOk8hZl##zChCz;$d^m2_ckg8Vkhw zy{5*7`lTB}n7mnM2o-tga;m3d4kD)-K?b`gPvJqLNGN_@rWbUAUtOG((r*~)MM;N*5?L$2)mFMBwff{KD=MLbm%PTX1(YHH*uY>TB2>_bPQT0k>Q z-sCYbWvU628{6ds2@BS2~qH-o|Z$e{Q9O}eELrZAMhEQ$YQp|Da+JVsv=H(Rz^J&%7Zp>^L zWAtSbGc-BN#L3u)A|r_Gr2XzAYIz!EOpbE z-S9-(z8$Ae>EsO8w;Fp}_8~{+?G4h0#d{MKmC!39VZHP!rBxNVyCu>mCz?B{mr9K} zer_f=sHLl$+`Vcw_=DcI+*szX!-JvgTQ^`)r4Em3$3?AGxDGQF3;7|>`t?3s6{{=6 zRHmV>ISag+Fx{Kh461GgmaB-JiJ895;^= zpXdLhiL)iI|2OH_`QQIhN>j`=$f^9V76$CC`9DfMp^g7n>Bm`Ko69C%k@=#FBo_OA z{b|^?yDzycW63T% zws=6Il@hZU&u%RxO&zvSz|A=Q62InrlYO2>-39EMmZ?zNq)_fJuNKBe0}}uO(wO} zOWagaFXxw;1;!WVOX@J@n1^Lw{}tF+E0b3LKTE|@l>gD}CcY-Pfd9L+jm7@@Cq40n z`#(v+ScI=IH;B*cS5sxo)R!IN#^>lO=rLyJtB*h9GxoJ;G-mNj4QTa4Hi#9L7A4Y=v~o+Yt$u)F1yI{;$B9);J7&8^Z89XU30TE z?Sz8)3JMDHeWiJRckcAW?|;snF6s?mh8w%`18!7rQLz{IHTEuR5SmgNC@=JQJjL$Z zN!Vv#I5RoFD9@MYD=KjN%>2TDzc`RrROrq(@u&FwrG=%1#bxfy`Tu|&U z@sxUD&B6d>9`ALHk+{W@oKSp-v+^A4h~JJ`hAW7s4Ia3UOx)TfYR+Hk_WKL-%e?u8 zZsQg-Bv6FE;@oMxO+I%TZ*jsqu|+Fr&~9_fFLir^!SaH<(qcDuiseotExFUE(U3?> zC^yqrO4;Qy_{va;F?SU?nC!*Pb+B9sD$!&J+|gPbC@aUyuHE!b=-eqZGs&Hb_hXx2 z{$h7gX?cEOX@R8xrZ;C(yQOz$YdOaadIdgjd7z-A)NObVc5ZfVWl=6l>Ffr7k(5^VmB0mc4uVbt0<1K?&| z6pXyo@77+i9W!vuq?)B=#o)dVY}(*kf{`A~SDs%~;B#ZRjXgi2PBdhEdPQzup|1#G zIq05Umzz!ZIK1p!q;JMS}l^SyoV{Qk&Ja-wQNMT7au1oXF z!yzW#9*!I$zx@7i&FK6RaXsx~cYZLhxYSdGJHKPLrPqKPk`|>mCrWqQmU>Eq9_&HX zUL+3RlW!8woffApbiPkq>}5A3uZ!lnJ?K62f`Jlq#Y&fu zwt`2|T|T0~@y_AHeeJ#?#OR>c5)LRHO{OqF#1tauOE-K zw&cSZ8eP7pq_`;P3%JEg%IPj+`BL(@9t@$ryueeMSMGE3+sk`F7Q4$lCEn8FLPS~G zY$_vhK|l+$Q%xbu)T8*_L2rI(exL~b)^z>l=f-G2(aP)rD2OK*3={{DOYPn0!X7P_ z&^D#S>n|%U3zVW`q>3^0XH$Z3UTKE-!)5`GxmQRWj=E4&s=PkgH!Q&}4tG-0Q>W%AI?OshYA%3X41#O%}NkI_aOW4ly_=EcfM= zmX~_8ajofn@Rp&i$6a3R3kE#C5{#emYIw?1LAmHd*+V>jWD+4(KZ}tLdRg35FJB<9 znHrT{R!jrJa{m`lrYj0*nt~WH2J#RN%iUTsA(^#l`Y>!Z-@|9z#3u)*vnScSa^5|I zd}4N1{D4=mr`WS6=b@#bC&Cyu?hZd8HnopoGUp@_CYGZ_=Vi`%KdtAmSKKA7xYZGR z-^sK4VrcIhLd76O+SD0*YVqJwM~Y)q!RngtJftYUPEq(UzNelTcvO z^DYqAToC&uzTL{OeB)F4h)YjQI`=|xKKAKWCb{ErLvixI@wj1D+-Ts^#>X^?Z?_GO zo@+NT2^=L^V23lj`;byOioZ3$Et){T#2e}|h6NXk_lB((Onj1oo&aXZMS?|7|Iu;c zJxX-uPCRhuGGO*k6u6U2I9=at@E2W-CxPORj#T{F=^IWD@R@`snNKDZo|%I`9jEJ~ z(--4ovBV|H-(lds2~67*5ICIpv(q;Q{Cj}eZHv>(`vP!Bfq60u1dcTP+3BOlsZE}W z=WF7R4tidYj??u`2meLFOv4|JMCHY!q?B`j$+pFr^;H8CwZ-Z7BYh75^Smw2tnVN& zXHrIS^p?LFz*N}c%=)eb=001TIe*UqbHEm->nlf|{tHat63!k!v0AsYuJ2r&z8aXj zB+l#yy1s$H?FQymi6eJpeIjo7L@MIByZeB7&wz6eL)?gKZ=DeM5SXiG2uZWw>-o#Z z>6d_U5`n{v)AL6em;=mrCC*$9T_2VA8DRcmi_`UmfE$7*bFIW59Ru)ZXTS5ozZaO_ zN?fA$b~|uAz}%Jt0>@zd+3BO^(*w+unS>Hgiq&y?{z`FfJuuHoTyNz)0?bL5vAVc+ zuIoDwr>6mPg~Vy~8&_|Hs|6;K1nwqap6CPjDD*u8%sTnhNwb~x{L$0Mejza+`LMGK z;dUj7`&|;aQ=soJN#MvXA18sU1nw*Z!6piXIOr*6cI6_(*&tEHW`+*4-khb`CuInQ|_!cm~mN;{|x;`2{{0o?KyreC0 zeO&EOlySh^=M%U@?d=+z{tGa*{@!sE_U;1a4-yCUw)K&c0-plr@5MqNjR)=O?cRQP zGiM3j?^7ml)Sm5dQ=#ukVE#Ev;Lc2dYeE5!%|^Y=6F3U{x<1{`)L-5YEIGdx05L$FPLsHFQPFHNgBz;`%4hw;KHSftkNd z=u1?NAK~-{U`8(&xI}h2gww^qOj#jtiR?_nAZI<|2L9+sq;DoNv;>$t8U$`MzI6NP zen7+K4^WsfYXlDNW5DV4I}-em#0aE4?k$|W3b@&g0%g{xr+WcTZwKaaiA!YXJAr!- zn9e4lFA)w^q5Kk2uNk^N2pa~=g&9Esx4aGbkXVi<@I-4FEo{TcXf;EqXbqWR1i;OfJeQ{#`0 zME*zReFT`vR3IFQ>g`6HTMEoa5@+@oJ%6oe*pt>N%H11S9lsAvFNf||6!z};2HwVo zKRV3gPF>$OV6gdchTm@#xPkbx(|0lWXQ42~R3IFQ^0yQDyABxtW`-$4@uln2(;bX- ze+SGv*9hDo6HYHj8Tgl6t0*1#qa%_1D4oY8hJpC7OPA);&jI&lyFi^{!s+Q!{JVJz z<~{hM!)zD59B!ODwFA$~#vdL1@Mo9q&EVGq^B;*rShB^{f`8U^n495`jzs#%O>P2a z(De*UY!{R_2biKxflH+Cm%uFq=Jc%sXZ9D}F4W$x0_JXs>yO`d<)!xUro;%15@$1S z`~z_RkXU3xv70xNzK@dBcO1A>Riv6oAH}PaB}O3a%W((_MguoEDo}~)jl$G8U~ZE* zN|)_oQ{H=kdDMWjD=)?8r-8Y2yGXY;eFebGG2ra-(u*P56n|Z=-UU(dr9c~5SR)ITsV5m-<7~zBXNoH*9sjfFg+62o4&Je!Fv($ zM@J%k9-O-bm~Tj2qBxWe+=CKB`slFptMTA>0e4tpDcwZ4e*=^8Ez*>Dyg~Xd1g5eN z9GN2o%!hs8-URMH!2IspAaEqg-%y-;M`9R=k3@cY7`V?3`t1Dle8~5|74HMZA03I( zrSeV(rlt=Z>01TNH~YZR{PK2S-s}Un47dZp_`U-Iht|&H;t=7k0H!Mm+#A4L`dwC+ zP#+De%7EG32adwyeqdJJCiJD^OZThwf{D*D_<;RbvkZ*RmO9f@!YaBd|q&r2Nny`4TP?`c24yaIo8Br5M5oLd3RuOx0Dekan` z?}vy*_@g6{K1z2EFr9ti$nWo!7}7_FUAlyOF$r8LaPI?m>D{DB%%kk|5pFFo&-8(# zbpIm0eeS{l*51-aP>~Q2)KH!=qwjX}m;mCgU&bwbqTuK5Q)!SZRCfo}GM{o7k z49vX}r|F|dlL=A&q;dPRz`P-GPW;Ao=dSqc&Ln?AVpx!HHrJC$Uk`Au`vi*hCBR(* zjK2?DI@B~ujL>MGF4?s`2^{68BMDp@aFHZ%#lYQS!MQEh?N0^nj~1Nuy8UUueUt=_ z>^%5>TsOrZ9f|BrexENf48(_fm^FX%!QY+)ZWM6uS#Z{JoC#d&kMLnQ68X#MByf|U zXG#*dlYm>21di&r5xA=)R%;)IcS%y#3HKdf?&$+Z^}9=ANRAG>@}2_z-Xw73&xe!1 zkzM|o1dig%*+0gI;jqi!ML0hz3Eb(xZAt=1<-H{dTm^9VTX0rCodVqF7M#`pXxx6$ z1Nbl;cIBmVDxN?wPYJj;`;(9B` zHehZy<1FRq4}JFn^FSXsvh$6@^|29{TP3cyay$r3S3EAR9A(h=1~8+43Ia!O<(L4>OcTz& z96n%5`oK{+DuKCD;(9Ab2Qc4>$HkRnIrRMmnDmFJ6up<@9AGAzaMp5A`$ZRUal4@swfXt7vZVA6+y43$XDc@U2)l@(KaH13Qq`kzg;#tdy?(>qB-8#d2`BV zhYGy;mHtqvx5`^;t7&$4O>6z?y3+b3%{9#%E(;Wd3O3-W?e$A%Ko1=)gLVGV=P~F(P zYC&K_hQGcwgWe{zpk{T=n)-(N@Pa~rsN93RV=KL+7c`6PENGPvp>3(byV&rap4N$t zOI9kEDl>;WM$_<_I;ck%DcX0Sera=KOXITEjB&Fs$S7|@Ve7wv8(NU!>L%Qq*9<&v ze83Ci6h*(`PNVtdV=cho*}wE2I;CmZvekS8E_iG3LO0w`(b@>Q2@kTks1`eNLDS74 zF&gh{z}wlxuVr`_Ta1tQ($&>oBp#s3JS4IdZ&JI+kO}^6P}V~4QIm<|ooIN*qtF&c zh2eKhwbH~dMZ0JAhKmYVf~>P`D4Ezd-Lvl*YRhmJ?C+XAB7djg+|+8t>d z_Q{`JJ9d7uZ^-VfuJ)Zy*EhR9**j!skX5ul>x_6)pZA_{bab_z$@$=q>gZf&WX8(% z6^uIEFYE2dB4^gy03xAIDDLRlbWT>!vK?xfGwMqXro75PPkZ3nKXrR--hrrK%uez&oS^Epk#p>!_*8=M-jBsm8(FlU}`(4e}NjH z+yv?^roInqDW822)G?;iz|r=dsqf*plJ&Og9rh$y<&!_TcI^7(?IC+n^j)&(yMn4W zHCFu8UFw|7)M$R1T6`pHHy7dwQo(u#f}o_+Y0s>(k|{5!^H6|vr5MzQT$FN9W0{v+ zbw&b5)rG0iE7PJ^rKu?qhw5=g@|>zCHIkRAzM>8cic0SGQ7BNleW~IrO?=UyNH{>X z`U>Y*4IhnOl|gc%)}v(^-M$Qg&J%hzB8_((MZhN;L0!pbsb#&xRDXQ_fvFsP3SNQ6+X#xT_@yfy`1~tV?4@b!T})=^ zr*dV#$MD4>yv}}Zo5wdRBxQK_{zQsbw#vt833Z+oEQG5vtUbmTk;ppZLM^K&2A>KBP z+99dPb+>{-4PJM%JAk2lVUenPt%EL(+O$KmFs2P8oKjO&hbN|&fikNfE1wmZ#$LuySy#2Lh<{LJdInK40bY_lx zZJBAX$&B#gq%-qwUzxG%{Dj-cvDYhTl&ED(qtyD2t2haAWZ_I>L4C?5qYy8QM@}m! z(T=qIAGf#}Bn@ptI2`q_|Ken*=NAswO+aNAxJnMkO!~KTwoLSyl#P>(Nfc;BT~LPq#D$m!D%r*_Y6}w>*au=3Z;C~x^I5YV znKFUx&(%xgJ7EA(V6Ax8NR`Niwy|>Eg)FlfJHHUaz-ZY>W6ontDvstOcGW#GuDZ`h zDMS}f5nYsLrdGxhjc2S>t)#s*7QG^=BN0_~4ybQ)1}MNMs4BZMtJ`S^)A2&<0M)V5 z(KAerDx=#sgKe^d7;Z+(%-w(42+qGsu>9HW`-JZnarp)Np5>)8NgGTWBYoBvQm(u3`NtlZR6Fo>>FkL5hyI=uaI zWzzuB0_3Rh`9%vcxTVpjm|vn{B?lLi%cS9AjtMw&QmwY7M$6LFfsp|iyheOZ)t?&i zrAGZ}IXjWZY|0}wO-1A}>d!#1PH<|fwk#0!&qSzC0Hf)??Wy+eT67;dpPJIG=9&zt z!Z^@K}{Wy<8y`w#+GM>`qj$RXr2Q#;Y*FAcjn}5e1pn8pHd!eJC?H#UBjGDr~^K94fm!}?$TuLz(P0kT&!HCp|_qaM>nd?pOQFG=ud5@|?+jpg@mB%^hXj&1B44|_! zGN&_D4V=h}1Wx3*HvW7*6$t$(vP6wptjy3*;=Nuj?Gqoqu+YKRufEdm1Or60HPN zNVVG#<>Y#*Q}i4pHzcNnpf*ddVs5>G;}%Vb#aNUED`Hl7IVdqJq*f=^I;p1+>!0nQ zmb00(e&DEOWNMxOy~jzJCO~L7?93l~Qyr~CSI`oHHba(SfVycHB-515mc}tD@PhqF;tp#K3Y$jz{Vjr6!k#E z9?@g#!yW__X>&H3zEGWfH+2&yW9p`oFInFMIb#%EppC)FRGkd73<8F{0FND2n_a}ds7kOrJ zrn6qhr5*Kn_Gz0=b&c8#6eOVk#)$LV`8lU;{Gey8C|qO{mj0X+X%1IJXAa7FwXGbN zc1qfNoWCTdtMoHmV(QkeAQ_eKh4P^>tv8vqE=q+VBb%Ja#M7il9jaD-6zdw$1FGJ1 z4~p3Sc|X_obd*?y{k+G)IsuDpI|d`bR_fk}7iMjL&jG7N0>fM#zr_g=`gYM^N_3WV zJ@F*eYP#}WP~xJ|Gob3Znm*BZBk)`B4E=ZoRz%rgTe`v*Xg{vml+lBQuuZ40fV61Z zC`tQnN}L7)8j#%Oc;qUlIy9%u*x_qM9oeZ4i1^Y~Uq-~YSnZbb!=UvCoIPrr-)D+u zkQeYwj)L+7%=3Y|gQ*3e{>>CJPh&@Pq8P12{7%y-VW^hyOfBIMQfA+!h^pymKQgjH z-4|K-k($yI#6`eE@T~2Bh8eTEq7~^?)e-NJ=z3?&cUqh&N9p=h_$azU3@SZoG@$eh z!+7lDiVtJr_S3&#pGb0NR=Dh3LG7!Zx44u^h>MJQJa*Xvt zByc=?h->>_Py}i#9t;eIIXf{rqw&m%>;bNhALCRUg!^*>ttSO{~7`Nn#U+5$?9W4p=tXs@!Q+TdSRXuZE z)m`WTT^BnaUfb9c9#J)mW>K$-D1g&F;dHg~#J+{pUcLAj?tEBg;g#89p0yUqYiS>A z-xO3ZiwqBorKu(8n~Pkt7NjQ{jc4vY=fiR+oUVY4%@8@yyE<;;oX=Fkr^U2HOJ?@0 zYtVA;DWGguoJ);%1Sv?)EZyKq38aNzfPYUg7)M?O?uDqa~rHe7*Y%!?A z;HN7gPy)9_&%yl5rM#C%a1gp4{ zY0dgL56?{R`Tk&p=#8ligB;j2k=u%Ts1#Z*sQHMh9HhM+f`@^%;A!hhi{FL+H+k zQ_ag6st<9|7XT5VA?YD>!&&Gpk7lR3w!cY+b+d%`AVw0@Nq!GJ(Mj^~SAE8IhPb#1$d#}0>7 zIBnpB557yDwXGPvp4#@2AO4-wcEGi541O;P(T1#DBT-(_rq2Z>+VnV3qD|BFDbc2< zfD&z*)&zvaRiK2#wV;H=^`L|VP40!nAXKf87z#>AoC-=voC!)ui~=PjZUS{CN0nPa z35h#FWian#?%Iu7`GmOvTqMR>o+o z;#3)g)pZS7UGQA*vstf40$q{t7Ia`AxQ2H$Kz*cg52DNV^!_w9c4O77m3$n|xg+Ae zKf4@p>yJ*jI`{muX46H7-IO8Gc&Yc-x?ju(ZdFUt5VN*i36T$6!=MvWg4b0~de+C3 zUMtcQNqZlRgr88ANaZ6DY+tKLja0r&GuvgTBcRo`mk}{k@BV1ouSrFu?G0*cQ&Tr@ zN-{jOKfgd2V5K7xzPV?*SY*h0K^A-?6+G~(?2&8^uCp!V=PX$_aGVOaCvm*^qf!H$`A#MlZk?? zTC-7{(n#AujDjfO2M%~t@1Y*=0k!gOj)Qx1<}JXwa`@nTxcOHIwZF=N z(`~zjqH6f&l}gWak%(|mHLxE^L`faKZ=v?m&K4y83F*)E!Z8rZuvV2JAvL3y=+%=aL~u#S&Z3o=u|;GlqC&di?h9<~^bR(ry`S0D?q)sqR) zzz#ka4Q!L&on%s`)wcb}_2KinJx;P$wplgLe5e81FYULi(Luw9U+qTTl z$s}9y5e0MJbZz_ZXKZ-3hw6P+4Rj&auAYSqBdf@wt_sG9t{b5Sp6!|18LPXl2uAJx zRE-m)i#gu3pfJAqcL-D$^LjLj`op`J zcP=O@eY$diMwM&Sd{FbCeSoqUl(63_Q0rNuMWe3PsJlT`vBZx+35kD!TEM)IG~NI# z^^jE#57R-nRhv;9!|GdqvnE2<+H-E-h%=K@rl3L|8_+Koszpv ze(&J#*u|Qyg=kfl>ov4QE)=^!i9M<5pjL4PXu2m%aGpldfKc%AK#9xYK2WbBdjk}5 zSnXOqO~rUUIN>j0`@QuY2UO0(O#pnW84s=HsiIZ|!g{ERf#1Ts;uc!-;SH#c7ROfC?WPsc< z(txapO_317^m!X!PmXvGMhnFvC|x}`n!WIdYx@D1h8F~41sk*Cv6!_u?AXp;MJcoi z-3Dh?&*5<*v-Xp^g5BwA+O5<#%z{IH#r%<#oPp!Y5y0qlM7H^t@uk<%JC^;@ElMg#?1#MV(?;6BF5E$5;5*E zP$DWm1xiRf14=~2ZcswvWl%x_a}6xKVJ5H>*NsNdh47UM_8p{Sr4H+M72;wq=5F9t zR5O1B_}s|Bb$CZe2rcjgNJO2)CzrX_1V*^#zYtQD6znU&&o0;et`A*{c4LGQNZ;p8 zrwiZd%DHf-=aHLq4 z?C8vQbQbr^xn$%1`Jsm$GDCEwV-1QlK&he(bKzELJTBa@sQ0M6h*HhPOH{bcZK+D@ zh^>L6TfHB4dhz)|XW+xFfn%NCW1WEy(8Q0*q0ve#({N>AbiMGXYx_k=mRmFQN4-5O z9YJFfu8s?Fesfz7)^PrStgT$nvKUUG`#`Xvm2fNuKjGMn2J))ddydgZx1UEy2q@kD zR04MU)5O=Xo~wJV?)IlUHaj+Bq~kB78H%4Q0SvVyd}WBQOz}02z6cuZ_Rke8y37RJ zV)0cgzE+5@2Krjo?Qen$`J2VSZA(|{oVW|0rb|$5X@^H8I^XT=B#oXN7;D>Jw0lDZ zN@rQQUfcd)a16b6DKT$S4&IxKV#lJeEyrM4H|VX zC|ZI{=TGVn(#579>I@a5yHxf3PPT(Vp+!@=_^Ke)v(Jf^5<3?@$gET&>ovObt1PWr z+*t?v(fHK2)t9n$Xy<^fzJ8r$DO<}NojylrS--8mfm_R*oj&JQ-+<0C(EU4o{X5G5 z8?v=5wbPfn)i=1a4D_H*-=NO2!J$PDJ2)p8F-RNG6?7WfaXHM(9PLNe+pcjOQ*mW+ zVXBrx*OsS939kE%SgBOwV&)g?+h{S@1wSWjW~?Jq`@%@E!Ls#W^i?dx|=2v5x%X2SptYFx@YmvDP4w5 z7}_wLPl@ZY4?FAtWW+ok*pS1CaXM|$`Y)T420QmLwGh;|nc5CYxZZuB=vKvaorH_dI@ML*Qy}Y?`6pt+;i4q7j`?LXledFOAv6 zNR1Zpe!&Hz;IEC;aK|ZvJeJMT8&!$+2Gb2;x29er6^L7lnZdN~yLT6?+`e z*k2MZBEAg8plv&%nzw=ycc0z_ik9NVCWPTkp+HsDD{w+ia>Hp^J@Dl0O(Qmq=Y=|7 zW;E>y*JFA8g7|RY!x7Zse(Di7jo7$v^QJ4&M?|1TKM6HiJ#+#q?T^RK@M*gtV$P-o zZMjLKRbOq-)F+H-rTP!wWc*E4E&Dp`is5bhc^qAbAS+@zG!4}0%)3>WXouGuoy`Y4|1E7S&!=Qx3Z$PE9zFnY1 z{$2s)XWs8L-T_d*V5daQ&8k|7{S}A6!hnaaq+;Eaekj36le62MN+h4<{T(#!*fkg| z(bOqmT+Z6ZfO-Ww2Poq}(O!7lNbI(a#8_=U8k-7;Wth!vY1k`y1gezQlU9lhaQ2Sy zdgQZo0*ghDU_d3~CwZ3Zv043G5AA_}spSokz;4i4Sn0q5=^M0UdosM0CLss1Lzq|{ zM;=!yv!j7WMDgUT2Lqk`b{k`9fh3p~sodNCS%25IdmyYX{1so`tkJe{x-s9tTJTX` z0q*1#;Jz1Hq4C)fSubRlEx?MYuND_}@_L-@Ib{nr9z#U*<1*=eXsoo-eX!$o*Y2+er7zw-#0vA1#UE9UV;s|xtf~=3Z0OzPhwcJh}?K9gQn^Js-9e&(E-~JCr z_y`tRqt0Ahx!V36m>gGVk4C+FM3}Cw;tomNw`yq6XwTG7MFV@-uvC>OKx;9nT8FMx ztU+Pv?1(VD7h~cyHE>XMr(=s(f3?tg*r}FwoM!^`S;R%c>9g6Ji>~_yZ_t1k? ze z@4^-RnDehUJO99lA6MNm^KH#vIT-&GdBr_<#W*wvboHzRt7=j25kV(jM4JSkgV(|v zWy?yicvcR?0Nx)eI%Vq3UgefWow5UG)0H2A>R{dwe2RE643vl$r-KrcG@7o9cyTT$ z5id4@5)w3X5E5HK35gp(35lCQ35mBsb>T0acNL4JruXrC8pi-y#Sl@aAMz&FPtE`( zV$En!DV*mbjW=84{RotZDRk*d#FS@1iI~z2O2m}+K{@f4u6%}1N+(@$BJ~-ZgF*Nd z3rr`25(`Y3pu{p7%+8|?cqV^ymFe3}AGRzUIbmF}TtssZQJ~?VR3^11(wajVxS8MPWp0=Z9EVS?1z7%kitJfQ!7K;_v9cm+gkWX{4+1oQG7+IV>9Rj zNe_5GVRNkkmB#f&gXc$>N4;3AZuZ;N$=+V-WDtZ!P0;$XsEG_vzvC>>VxCqLv_co_ zV8*N?>xR1>Pdpq9Vkc#~wJmaW}t&U+VSP|Dxv||^6vT>(~uFd97Dwrt#C9bu^e+gDA5WhfD)~c##^|rz(@C*VDW@AdAy@% z!NUM&^KGy5nyD~!Z9*|K`C9;(XN@Qz1s3~Yp1Nb>1B3m>7(z0bT za}s+r&4je==THSBSo779cWvrk2@rK?xg< z1tl^|1<*2^z=m%E^VMuP^()y>+|i?IclelW`dHtYi?iv5fo!8R^rSq(F`Bl_sqUeh zF!ta!4_Nm#3@5J9jGOkQt=j$@@-Z5+Ki_vtV=tCY3>VmtirvT9#fvcmdus35B_n;= ze8R5S41dX{)98jGTrI3n(|*RW(uYO1fAKbWC%-7<=Nzig=n&84fFnT=FSHBd>Zj~Y zR77%9MLmi=4;>%3o`u0p>=Iu@zb2Ofq9ETjb&UNDACDdeN3S} zD(U>#?Aw`A!MmR+nkb6+>5PfW=qha~N)Q-2;2e3AU4QW0RO(NbK5Ybb+GDA!`ctGAVm_PMOn0Rm!_N!dxVmJqXE*H^zHl}EBqb8UCP(|9l34i&py+?c%{h0#vYjdpzF7_}1Z_ULRVLT?$w zDHt++`|39DtjOz!j!v6wl(=DsmH@>g9VmMJ z1^jennnqm)im>TQDJU@trtK1PJj|_xtm~k<% zFBKR4;-?oQumUgF;xHyqkJDD+R6O*LMQ|fo`wVP@R|nb&s@<4Hjc{$J<$cjK+^N5W zKdY~xYe;F|Icn#p{c+D0Vo67Or>le3<;*iIOt0XwU@O6u4qVZc zTZph*^4VcoUD*3Il`b0x4odyk*y%@^*Ez8js3U!QIM1Eaz46r^?@?%l6|rivpG$!b1<-brn#glj{eg3-d{Zg#Z!pu`o>)u47V@1LN~ zf<(HKi{EyWG2vS=uPRP%N=7>^gd?2`O1KJ*!=L8N(Xc~vmG&bOOr84YfUE#OeAsvD z4G4DLHzJkCX(Kzm-L0ZZY|`Us$a_J9;9{z)?FJRI9rIlnPo9Kiu+dIkgj@7ZQg`9L zJXhJy6s#Fy(&yU#2`oZ)E>e4mEIg9+!m=F*#96QB;2xXOJ*qD~Qn_EOz~NTuC(4gJ zTc!^B#u3GNQcDXw4N8(uV^7OU= zac}nN*za9VyE`LJ+16%`!jc0 zHg@CYO00E3?WyWf*hi|y{zIr%!-rzpRqsa;tSpA;)<(K((Ixj|55xq4_96O)W&6@x z9Y3csbcIV2ZljdD*2~g1og%IUq+{yFTi46duqSk_SbT^qO7Hd!qb}p{!stjPXII-i zl%=wdvas$wk;;SFP@gWEHtsLjQX+SfeU((MZ;ui%F;Y)C3fGOppMm-Mpa3B z%=hOk#M0piS|`MQ^Gdo`?I>@)dz3aodf!0Tdpu{4YumSIXF2Y($6`3OGtohu4N7zn z6h+05>H<)rgP?9pbP#_7^$-=gv-K$hG}P_(ZRd6|0%t`jUU{8P?Gqb|cqs!HLM@ zo9VPAD2ly@*TXKx<K;lMFWfh3JoEaGLCb! zi=MoCwAUxE8oFyObRM$w#!xB4B!xtg6E`RkFukBC8V=xRuxbHQ-HA1FTw_?+bHJv? z@!W~;L(a62sD2s^pocj~d|}cs7OIcZ-cO0)Dq@x2PGQyEuiX{_gzq;QPY(<(Wog73fbpCZDcKbHR=E;v3yK9 z7t~RWI<8SL!F%|DQ9zpfJ|w@7@VDkk2Q8jNu~R74*Q(Ps9!>YeS(@4j@0tSYDK-^d zSkSx+gBm=wgtiJ*#nvQvAJjl>gQ9g0TF97=jZJIidInv-9pJiIoE!#CjVSy8uiP$I^fDB5BCsFjG;cjf8=Ohehk<@I>`{7Tw~ALbR)+UbG^^*RdL z$fN)mY$R^NMX5xBR{u)Jwo z(iOxp)kR@-u>JWoqtx{3m^V}H<_rj*hwcV@4&CiL*P{bMS~=e1ZT;2oM~Am+dn24! zS6-NjW&(#Y?%0v>z>ccA?o!b} ziVOa;;a%YB|L$@!ER5OPlEdZPD`ta83?MfnCguh^5EJvS&onFt(ga2{H{uYEu)o1E zn#JA3F8_}NlA8(886MD>aRU~=sK7iuSrJ*t**sXxDMAa^O=(sp9v=p@mxHy z$KAv>_=xH}iv5-TSI{>_sC^!!_w;C6)*Jp;-oSR}(VIyZ;{KfWM(|z*+$&FsQ#IaR z@KonGJcXoJf3cCA_872XUdKC6t8 zLZ@EvTt@k;-6>o6j?(`w?K?R@_mEU~pbK`My|Lu^+YWz$9V;TQ^f)&ik75trcDP3@ zVkYDs${#>>-OloN=}q?XqmU?7+P&faEw5p@gNp|ChutsUqhX=EJEQScV>2<)JO1BT*)OE>&IsQTJLb5`A?({v0DwYfHe1*^a( zsh%Wh*nzX2Oe03q2W9DQ8hu2IqW?5U7r_aoL>n50$5}$H5>{)RQ0pwA*1Y%#_$5er zh@2ASNcH|Yct^o3b{+@lYnJBKI5EP?%D%DQm;Qo;6~1kn1B?E$Iv%FW^Uu9@J6TQt;k8YfW4xjxH!&w4bm>;FB0 zvACEcXeNlCiQ*?${N#(DOT^DC@#7XhMf793!KF0^YE}8%@n<0>#wc3l6V{`(SrMaL zeIMm6?sI>PSgNuWSR-R}LnH1ucOmv2##nKEMC#3p`A9H{afl3X2dhJKX6;6TzVL!) ztgm419`~m7JRiX1cBl_Gkbf(fzOfiD^O`T?YC5k?{W6wvoA1Lh z#GA4m6GxO*mb_!$obLEeV9Aa^%qPza(SR|rBxnMx-Pv_d2N&JI(^M+fTX zRcV_hAt@}jIpamC&B(#2t8zr`iaV)F0VJm4u03r9SEX%u1v^7_)0(_4pKArt@D?gj zs@%!Ip97ZP$_(?pI`jM3yhe5eUL!J*zVsXMb(7x+ntf^B(Sl2NJ9h}(mhPqpuVUWg zMNHHwx^eDeQzF8KrC;a;Og#Ab@98D{5|JLu=)^(j^(M6Y@98C8-5_20h;dwS~qUz#& z9Ve5hP{+w6EC?oE^`JhmI<`^tQ<#O0#=3SZ*0tN~(7koj-rcnB>K?pLSn$-^l!E6w z-0|Jxop@nt{m_!Gr;fVgPha>HcTZh=Qm{4e3#<-wdz`m*z2odoAAM-dch|fX_HheYkQ#JlMSEAiC&t)1#d6fWn6zBnF|_L+G}`;Rl^%> zweyp92Hl|60^u)e_l20Ur)SJ~8D_6q#CEuGx&d?8d?VYw1@FoUq; zv3oew*TDiGNef=imZ4=n(T$jGRdRnn7F;B?Y2CInW!ozs z4w>?rdU2cadt~AUQ>=APLwif*ErnvfO3ypQqWo;ce#lj}0x`Pr%u?uezNQQT40V;}g7HHI&W(5yeXMC9$b+C9 z5_1Z_<}^_gQ^Io*6H~VHkjjNP$o=so9OQ(DChTMcdT>XdexeT?&}(=KG5{r%u|sb<1J+9# zhT;lY=mPMhDl}4dbBy?sGT{R89d8;JX=&WdF_mBar8IFNX;5{&n7L_iC;yJ(!QQO{ zk~l?^n5Rknu1TV*)Uk9VTa!I$caPBQPLrHtm50hdow=wy?l~@g)kZTk{vRC|znXr5 z#($rQUo9*37Z*8DzIgH_|0n*adeL5|RDRHKDaYuxwUA?@5OZ^E0%F@arlz7w>#Oy> z%uO}K$1$2`{@Nt5ujSxpE-HtIO#G@wYTLp^4#%>CYTsg(MjDoIjO;*f!=$nch&dc1 zJ3PuU)eecjlp3apNrRdi?JE;juizM^R?aaOVmnM}sKV5=`kDsqvJq*_)6$@~dQufi z<4KN@EZTOKEReoxx+;zO|5(3iV0emCA-gT$ST15U9HTXrT8_C9tK(P+VhcG|h1epF zEkx`xjwPl?y5mC9pxSydb5qGK;TYAuXE;U@co{T_47=PXlB%Vxwl&K2^DLcm9po70 zdKt$k*W{KcRdFM>oMV)0+9;B$P_7#}*5AA~F*oIP1;;3_FPS6);Lum=g*Az*G>NZp zj3lVi?0%_-=_?Jz2hZ|4~4+M6DB zwSh1S5WqpL4W!54SSsleqZ$v5sSXwHX+a2BXbLo~oxE1JP3L z-N315B6f&ls*P11l7kCL1EoQ7HZeEV!K*n&b?{S;k%Zpbn^9{u^<({#rH`<5vh+0^ zBTHY)F|u?Q$J~fr$1$?>7LHXR_7#pLrqb8EZe?!DYm8%**P|Rm#1iQFU@F^)W~QkM z={|;IBq4`m?aT3F4PB^Ng7tdXS+LSeqN0PRM~L=@U8(Wirt#5Bqk@kfE~es3>8>Vx zSlupWrjUjw( zJ!rK9kXy7YQFRoi$l@4T@l=il>XD&F{u+9uzR{(BqTSWh9%)gtJKWnDZf>M+%O?_a zG_==88&*!5G-MHjv3|7>X2YqFp>S}-Wa3zV2IzrJ&4Q*{oQ=~N-WEz;Ny?%YrHDf7=ydH%q$vP&rwXU!j z`74@%&(RDV;+m33dXGjqR-<%rYy$vq*cuh)k8K4=qcZ>bI*0D|7WQ&s#3v8)ou0d9U&^T3Fiwt2MtWZr~qae z$}`vjYON-^qV>zsC-9hG7ug)gBlWw>^(bX94 zh`QSATUUf!mych8a#*osq6^IlXj^@_9eJlx>KLvRH%FGkXyOuc;Tjm0hoWmkA%h`Y z^_=u@g-J;Wmt{jkXEfZrctxl+)E;hF6KaS?+R^0nszN3c|7LOCf}I`78X7gH)m*|f zD711+tpSq?J+-CON>QZVa8cMD4Rv&c+UpylZa35X(nO9r!GT0xVYwq~v9njQU>ES2atYVwKJn2TfNKvjowu-PQUpfkxd1|k+|lLgIb zC(^}ODA9e*B%X9E%vk{Q&JT5THb;H+&CSc}8&*$t2P>+)wdM}Um1JwJE(|)zY^sSdlNvzd2u+4i-uqxZMqrmbOXZ z#`~8Jb*2j3kX>O%^ULiFFt##Stq3&QeYa6jm4R!RyyLwKf1-%5qegdV?s9J-$WB~ zC;nYxLLS4vA`|i|{?Rm2mwXui7MqY$VTP3^gkDaInvfbGTTKXUS-#bT&-;Kgw&zW1GbNx_q5e>Ma zp>@%mmR6$UvUeOpjJD?ezUrkG!6j(c5eZ*$I;aAYu4kW7(VfOIqnzQm;&jlablN#K zH2B5kRyij!4Lx9?R3r0W8a3P^heiRXV+7<-Em?YZF}4igkJMS{Ln$~NlW`_}-q}zx zEZri9O3LZ@5N9ftukRbP%PNN+GC3XNBu&+dZxx?xkwasQ)3Fa{((J`CJy4&FX|&G> zrlE#UHq2{!t2@&o=M<))EmxGUvsR4%k5vwBMR7Xl#)oJ&-+8p-6pI{gnU3D&(4zvg zoGgnRs$I@w$e~vc%yLe%$jR=599sD>%gMILp@$kyMC%$9MC!F6tF zGcH(mrbP}d#5x^R&#Bh@2x}%m!Z1)(mxs> zwdymPX=X^8N&l*P<{XP07t>I(r1Oc+Pu{f3p&U82e5L&3+SM+LoUu$3#F<)tW2kDk zRSwl;r{g@F$%b9`o&BA$7CAXg^Ie>&#s2N5L!mxd!C0TiGff`OWXB2PU#iHl$T^p3 z%5bK9{V9_7l2sqlM9YR@I zaV8seOs``iEgsdlZh%BNolQ@G&ZH5mL8 z)5^sakuRcIe(A((tu)jVIvq7Q6ZfirfBcA*h90kqxu*daNuF1_w|RvNl0W;;|5 zH;%4cV5AXa!6i(i_LxQ3cXwE`?^x?c)U$)8#Fik$>(8#f5b^1T8 zG{sEQ28F2xH2%edK1$EKuwe<)(6~cmck$yXcNAM}Sjsf?(Cbvh#y7ZIob@kc}(+T zoGI^r`hDYbRvJv3kk$d5$%Zf8{=j=ieS{6GnTC1>k~4nDwa-{-&;>xwEGRP;vF0tl z7mYL`U(^$d`61QSmfvk&wZM|ETBf1d0tNT82Qa?tbwlU_lR?g(a3(oVta=9~*J(sr z3z_D8oXLju`zL)^XGv=j)7&9x?%P3+P;@yWt;?7Oodt8Zy}Kc7rMaAGu97t2g$J9h zG>c7g-hN^E=~f!*;q~!r+?#iSDN&!LOtVp@_1Mk=^v{VjL8d_`$U1-ir&BQ&B+@Kn z8nO>vx$6E=TdXwoOhdD13dQe*5lxh{99NuX;JS%Db$Y}^VVuhTHG6G_rmXf z(ul!Imm|_@WjS;oNAsJjAFWzz)JNDS!Zg(XP~P{weO;v0l2#kjxN)WwGRl{J&6?H~ zOmj1xaol~?I#hu~eb7ZBUsU>hrEc}pMty|N9ZaLv=Np%={2wb#lxa>zzDSPmSJjvd zCZ^TNG~_yk%Kc|&%|=IpKPEdGIp5Ac^A}QQgPbcZa@JeqP|u_H8+p6Wd)}J&4NOCOhp8+!H#}iuXKH;; z2U(k}a(?^ThpqZ-Vwy}zgCAw1MW3sghO{C%Zy)_*%qnLy(-`GkZIN>g)AX*-wH7(o zSmbmu&3ADoeO{ct9OFe|-MEfvTp*w}_?3*JpBZUHyV$}sV{oQ2OLM=t;W|rNUtyZ- zai$cyzyIi`MmeHBf0b#_!7+`qto#&7V<>k_zY^-tS1oD5te}~NGv#aOuim-GDrcKT zPRt@F&NR#DjAQGiA#_M=AA>$<-U<4|EpoblQgQQaBylGa%M*f(PSiV!pm%k#nO(&P`0?!o%r&S<-B28gi$V z22*P2d@{}yo;m-8*CmaiZhQw<%w_s*iw&vu>G!#Bgzp?}P3v~1QSGyR=Qh8U2GjRr z%E6EinwdCL-mk3Rx5z5zPNt#R0+r;iI~&xtV_1W|s}D4H_krg7OhY|6rS<%fKVkSu ztUpK|I#bP0!|{Wk?1#y98qxp!fN93zO#RRJ-yPU|kHyYEWEwBd#GU)Mqm?3tKgwST z;^5+|@XKI9vZ%?KXhvHQ@<(K*nQ1{vEC_w+&CEqFl|FBFz*$mtmZ@oLBtiTE_+E{TLR07vNU9sMDEg%>m|~yArDLBHVyfUL@v@0=NTgP+co5TiR5cYu|%%ckd+eoriR2M zGF3y~l*k1dl6R&^D_cXZmdN)t4 z$hS0P&e?+N91XczBEvQ05s6%=A^(=hbPbtyj*xSjhD0QCw}$*eB45{#&m}TRLn<)0 zr|>-uxlbb3Xvq5#`KpFYbukm38>qd+8j1W+L!OYxS2V;uMsQuBA-71ROhf)55gIFp zD8aVyy2^IJB@l}L%S1y+>R38cQ1uyUK}K7U=@!IeLE0?H%@*V#3-YlAnLJMDr)#+0 zg1luxGIIo1nwGD)L^3txWr?iTkV)eOSCNKnlt@%V{vweo4JkiYaD7`tzAurRHRMx? zH6(Dp zDuX1SZ7Vr0X<9U{j0*%;frhM=h|qA1t(>UJFtSgeJpdm}^qU zI&G8Ly+ECgb;O47%i7h?ix{0ZOF4pzknIu~sipp^lssEQhD{_&MbVK0AT*g7r_qEZ zjgH(7gf!HVKS-`Zjmvov$;H~bh7WN0++Ng5r=yIA25W{uZqnt)Kykvo7;E_CD-AY?He8Ig;1eiJeW z2zAJnn&ex6P|%UT0XflxOrI=tZqT@{1VTYab^~z%iD)!qrVxb@*#d;}uG72^B-4bH z=ZU=QG`|EwQu}L)NSg>m`ku8ZbBkJsOWW?$AFO9I&$I+ zk<&GrK68Ok(2*N~P`-5JPe7;;OEj*jGl|ED+y;bdf==^qAT%A-k$RZo3={HOAY)9( z`Ljg6bgph7R5}Z_)K8g>zb52%Af&TSGvQKEf+uNQVIUNAWIGVjSw{{_no~6{S0OV& zZ?!*M2jm=pqc!AVNuwi*TeLVGDF#9LM={5{s<)7gpBei{5|gzwX_<6P|%TI z0ij&zh~gD_*O3Y!V@x#P1%eLH!1VzT3YTbUUF;Lc=^7FRLOsb@8nRQ;=tx$P*x!4C zM)MsY6m(>QU+AnO_XD9JeuT!A9$+Q|5(Yx4>oj|SkX3bLT(PjKj%)@(R@IR=fKUnQ z$jlO~NCRosQvV(h3ObTjDpD87Bp%{&))CE*a5x=g%^^4*S#!$-7q5cikJ1hVbyC%9@(UF;Deu1~;4sWS}$%Gf#l zBN3yVpW=ekLEWVj$K30ez99Al68(H|QQyln1Sr=?IRY`txer&(a>QOE;`*hO!!!ga z?@BoWG0OQFt_nG1)t=4ojSC>mTCIBqTrQwYgI|Pl@goqUoL}LBUS4EpvA2il zr-F;hooNVAu90#CVwCegxN6Rq*i%7VzXuoPi)jc@PO0D@i5TVl8W;3@WnKAHOg!r+ z`Z{pA@XIs=C=WkjPRLPOB7s0@E?a~ z+ix|BJwinN2PubX2vE+i;vYpIMmZ1Sg43}WXR^eczb(60?C~J_Yb6)c5THB_g!)5) z809tsq;j6F%1DqEf5L215D>#3<)CK+XDyeNDtwH(%((Gz2Jb0HGidqnt;8>T;+aioNN;Fbx69 z4}nk+h*8d?K+V0V*waqb?@KPGG4-O4S-8Z`bK)9FMnYg36W8NFoepZEG%nq-z4LUj zuN!}qX351g1SmfTLN*kLQRgRs>T(=scc+N=9f<2ADTiqYP-fN$IRY`t*@3I(yo)`q z#C09GDD1%DH05F^Ar8`v0*yOj_dfmmo#bK~6W1Yss&`X8ntK$%*{KN2y@c@h`&`uyt$D&H3GRuKK;l8b3rz-bGG z4FzJ9^IMjaPiGv|zQn#JVvB%_^kEtTl$U@|5XdC$z89a204knAr!a-_G;@*o$26w* zfc7#MrA*C$b_(!2mauJRBjh?4~B&J0*l0q}MNCToVbL|6?jBBgpA{vqYk0c^= z2CTdYg!(ca`4mXHh8W*(`W;ZGBMWB=mtICb_tboiyiA}(W7hC#AWnx$cX!Tpx9D7R zBp1<`xt?Jz)#~%JAHe9N%4m>WL}TW9mbplK3Z+*+(XMk{Be{si%=LR9PKTVtC@W6> zV}s81faD??GuLy>bt=vjYVP<;T<7{oauJQ0>vNlJA0MRbh{xQd^R=xN;|(;^x(*NZ@$4tZI5zwqFnb*|?mOf+V$mzZlb z&J-R@y(dHG8cqWy0@0Yc{s_eBIFl|Sv|VuGS9LC*t~XSXv|!%0C74_A{K=IO#a_bbgq9$E}}7Wy$ZzXpn9nG z0%CLlpq#Qqlo!#MxnSs|T=OIs(U`ejV=lEG?wfJyN4kdp11<_gW9E7ti2gQ8v~}bJ zo$Fo6MKorvH<(Mc^|k~5{Flyk%2HfJAR05*n?Rfn)$$7#??Tp985c?}qA_#5#az^f zQ+TfH&zp6w4U&s!%v}3{IBDx72j`BTKcI8%kzD(6&CK;S5U1mG=24XU>aW32scM)R z6fn`4x!z%}k&?^*R=J_h2P7BKn7RJKT-B26l9Jz|LsipSE4hfq%=IpFO_5xle{Vo{ zrE)zkxroNh^;hOPS#n+Q>BWUQm$FR2L}TXq8xY+ZCxkK#b^ct*MKorv_n2!8&J=E5 z^d4G=s$tzS1{I=FxpL4qiw|0eF-4`-x$as<6oLj^G%gD!<$a*~`(L}>Ux|jR^6y$k zJeViqFsJna5YcZq5ZgFxyjSP?>oPzHL}TXq5Qx)p0^>MwP}54O7ypUI%ykfm(=m#1 zMOilT=p%Ys<0Kc+n7RIL;woPA>P($$uH+&ba2c%e59S(!vjfM|Gf%%;=ZZ)!qA{oS zPv)YT5OIA^`N=an*Y%Q%Xv|!Pm}{uy!ViLKjUP)cqA_!!OM*2}(KT8<_N3$@8Z+0& zy>PuPxrhc_25X?QBCR5v9XNh`=mV&yYB**&AOxZ@r}Zfiy>6JT(IB~q#?18@bJ<(t zF3CkSX0FefORXE`QhrNv5sjJaFmu`4@Z1JmL?9Y)8LV*xh}hvz)|m9d7ifY*5Tnp0 zxroM`))zpMS>sX3MKoqE32w#oXHyRUgG~QQOFPyzeHnB>pwtrYnc0ukmMp7Ggl9D+4mcJBp1<`xkxeH z8s>iEye5!S0FBW4Mil`lkb5l1gC@i{pLcLtDJ)Vwsn*yjxrj#9P|yrvF1lx+u=$xk z->s&NIjH0!8Z(#E#C3z`^)))z`;v=jhA0jcPvPn^cm(oATARWv0`ON=-PzO>Ugvh_ z&GQy{akZv3+^~|o7)9-_dRmr;S9I82A+J`^($)o`mbPX%pX!aq*BOm8HQ7>BMA}=b z+9T13T@qEDtqn!>Yi-r8Uf&T7wIsV*(Mi5hl3fk7hptF^Eew}nWuev;(UnAEtF*6k zd8l`@5k>DBRGqIIrD);QCiZ4lnB(!dl|n(~^SMj?MWvOMKEK;n-&%MH$Qsz!SmD(A z!l}*hH&r-w`Fi|;6SfttEumJ8)m!W?uk=+`mX(!itb(d=YBVBvJIsmAb^AOOW#w}! zy>3qwh1(VlH45Uw9A9Z;2JY5s+|?#m{-FQYt^ zC*pvE!8W*sYk+?vP)u@B=iv`a5zIBlYr$H1QCw615o0hI?1(l7;eV|KuE?Sx z0O6LlV6ds7Ints3i?oGWwM(#JqxNTQdl+1Wg}L5vw3dBo8T}B=^Z4BhDL2V4d%U%| zlijRYeli&z578JXCnuxi)Jj{!QFk(mg(Z|$h&SD}j_8O_A@bI=E;)72j@;hcr3zaw(-5p#~I@WMe zVNS8|ohHk>gsnnlWY8-TuX^|sEAl|k|^mLxeTC5fGc;tkEA`t~IJ3rXE-(N|n)pMS3( zp3OWp!Ej`GXA^v1fuShWJBtS_7A7)^off4YztFQVSZrHqJbta`3Hpykq1DkuH+X72 zx$m{{p+CCBm*Ywgx>}bsem^5R@D8;0F zwnb?uDT_+BrPT|SsGT(xrM?o+{BlnfH*l_&g}D-~_AfAWhLi13=`oZVUAWP0qJTXy zgQFr1WAKRtC21lNIz{f9_-!x@RPBib=nU1akqOl#!>#B$qGoDTBbjCc9O>1ABw4b- z3Q34bNGKW#wnf6N7$G}?;Z~KU!y=o?++;V^LTtB=`ZegLBEcq1V$G~Jl|UtyqeOz` zs1a+qCKEQpe`}DOw%SOis$%FUL^JZhpKNPmC3?+veI{tu3dX{4E5~KEbc5Apl?xK- zxUXIT_k)R@Ci^R7SB02hqd3^{CF%@yq_)?%1fy*j8KX@wH7pM2sBWIRc#CKhhTGT$ z5uSUx#n~X3dkL0+y9F*?nKc_yGC7kLPBwc{G>)O_KtCT|L?bP5aoXsMw5?BYyJ%wY zqED=yJjKnT_0G7LBy7sw*p2tXY1;*GhY^sjgL~6dlx}HjR1#z8ZwR^JL=i@wkE#)B zUl6IneO50DP-bh0#tmD@ZCOR8(?}NmY&SN!)6+Jtn8QpYEOfxXQ|^rOn`5hIVUcf4wJ!$71awYfUT?N|V!?R*hG7ep*Gw(T2l?|gM>-pmv>~fZ z2-0tP&{pG!goF8fqW7%VUbqF&@ zTK_nP0l3cFDkw%`;mcao9`3#SB#&ww)ep5~`&56?VcS$SYc(O$A5#n1h?MAUz_Hc^ zno;OwZX9#iH+!g3IA%XqKay-|JD)AIETNS5X{pJU%CgiXsCr#$5+r?FYLc|n0()I*Qe~D?JGU-1(Pg?r zD(9-0e5px@DG^eV*l8hOwO?vVP}g$zhU@wwkVU@ki@t9ob)SlDFoar4xnDwitrY!| z*ta^=Khad>tQDyrva~yM?mhZevd5^V{m{bWFF9^5vcTX}(uMs=+rEh%w$URnRO0=$QFB9FoeD+U@!%fwRw&S4Iifx^$cJtNkb^w;^Sd_G2=z%_ ze^off1h2nh?IwHVH=!tm74OJ;_MuSk<45%(Zn}W!Io2KJ1+mb$fIekb+B!e7wuA9H z@ld+Fes#zjS;zYb@a#aYBx6dwz+1TxD;hAb`t*Q1tz7-?l<$IVYDXcSWvQ#C$!O%$ ztX{~llxMgT)>l91p1D`~bPH{_HY4u2!%eM8&PBkzOBc7TXm#e%|wSm zFL4`UG!AZBs=PI&6$^p^zh^#m4PL#KI_Cck8opO5#d@gV5u}?5Nk0$^@;Mp)KsS+ zTIa!Y!B7YF#{-nydv7v$>DYBIg{_?}K`iTFmk(AT2b>prAS~|m@O`(z5hqHqaQ=XG zLkY?UY<*k=5GflTJkcis2c9X+K5ZU);4$@pbBLy-&Gv%+!4!wFr2-o>w529PKZNa7 zro|ZQrY55^N#4Oxr?CK!KFwb_>%&Ls)UJYU)n5rF3k_7r{LWTXh%f8QZOE_PQmDcB zJUmm)`4Uwy8SMWcog(_cn_MY2WR>>xi3h8wZpH_zsA%T3T=AUKjU9ZUhEB|Q)(0C_ zh8k7}8zPa_;gCBYd-Q_7b?XAyP#G$zZ*6Q2wdVl~t;B~`=}!)ZH6H2{MqF9_g4pY@ zHr(3Sg!wSGLG(_Ylba|R&C+I<7~N@^RXElLBdZ$6;K-Srkb;&;n;kDgpQIVJ=itm9 zFVB<&t@K>jBqHl#Z+TD3#raRvt`Di@BvcM@OJ}Tsa&BPJDj8*BrBL^^^kox_C6VJ` zPE5D(m>XCusU4HWQp@_gPr;gWKP6dnZSF3t59E?m{ywnT*0F@mG`8t+B}=TFePX2U ztY3^%%?-~m&pF1U7`yq4MTY^2v+GC(CNQDz>)#d=OD6jzCb2$>p>7cONLbVy>=f*Z zXVBB25=*GpgPsPBJzsVj38Tj#@076UKe+PkN_vn}uqlHn86+1Yad(rgSk0BO`iB=kZ9kY+O<7=SdIBn+Nz(*{-A zbaPF^yy|%O_gM0F{4(rnRzIX9^ik?Aok81oWXb7Zr(kD?K~KY`-3@vgHZ^|G)36!y z20aa%US-hJNa*YFfQ7cVi)mWN|J~j$OXdDADPq?K{#&XfbSTHYX@S?H5_`M_k(Tz+P|cwT%#_X-#22c8*x8X+MP6+Vl8zv0tY+zKtcY zb&gF()}Kt-^i};4lh7R$0`n!MB%a{X)7~)Nr0xB2ueQFy?@u0+Hnh?xHgRYY{zKF$t$|X1XldLK zhIX6qcvMy5*z{&a)Q8_Tk5Y}}mn#0)&yh{yb!}|qA2SEN@fedy_UtvWgnFSfiaU;{ ztcfWcAFDCZV?Jz6OsX#orUd%=NY#>V|K*s}>B|F8OWJ*8GA1;jXNidl3{;p=v3@;J zOjM}9LX3(G_M^5$9lr$mM)e2x2~wi+gD%~u`k+0DNz{5U1sfIa|I>v;4F@F2sM7H- zz$dEGF9}8!279eFQNb@kzES=E(z0b@F8_OK7>#k<3oM4kQ+1Mbyz3xxKcHdOXIaTK zFM0MxIiNL9qu}FSAxtdLek|)j#DEIJx~kXTGBHXrsWgD4DWi20ZvgtfHf5I5-}kd@ zC-(zdnzEGLfLAB_w;W`thX1u!W)dp%V6977GB}8WjaB{2xyMe_{!2=w&{JLQpO2TZ zJf&s+B6v%#)f}C|X|nK+J7rE$Rk6E$x#q=ox_UQkyw{%QWuLg(wZywpzFt&`7r%U! z72=(*U|DJPf}nR1kg7$AX)`IbD=n^Iy6Qv%=w0f81V1iU%(Yw=x_kZZK>1vMQKi4! z9d3p5U%dWTI29gt107fshG*Ya`L|Ka9k~sj>?@n=E1xsh=O$u}QNpQjVV;OiGcoz+y62Qvl+D4rH6c(;SsQ6z zT{xu$-iB9%$qzAH%N9l$9%jy7S?HyC~o-og46Z-A&S&Td=-86l|%7 z-@eA6DIIt!E~+Rm^HzC%W@2pI55XCYF@cfHth9(AH))(p+~%iMO=4tgOP_1m`G0 z=7vq%>(>Xl;&=;liYf}HR@9W0nK?afzppd^ZRZM3HY>3dRSFhV1Vc?K0)469S5)Cc zxsVqjD29v)$3}%yg^nVpRBO1pQbfyRg}bQ4Q(9VDqm4sXEiud1x{6v5tw(<N3RGq}R3VQ$P+w4#w>w4i2-PJ*jI5(2F>;2OHD$WvKT zRO*q%FXU-uPh#;_5{{`{v1EGX>R(NgufkngRpFgm8jy7tE>X?Z$RJ8oPhA$ZCry&K z#O*Jys4Sa{h%_ktjFZ)2o#~Q6_@(T zihZzUXDe&Vouh1Mq86JZP#Y4pTGO`3=bk$k9z81OdfdXaUlh2(m@ksYv$Rzz$o zs92VVqH9ATG<;1$rQ7Q*E-Ue&gJZ_F`f$6sO;CpfW0X_|JY|(-K6gVyXEfYgIAw)+ z|7Z<+B`?fhsWl>EK<8R9r`SKIys{W$2>QyTrJ-L%v66*@ogL^{S;6`FrNoOWYdbO) z2IuF(*IzOk_a!tM&(BMCU0j~h`{l_VcVRBN9S>fiwpT@nvC4U)_65hQRB4) zC9Rh<6B#eb-eNx7gb$=YWApY?gqo>-vderAh+8j{0f`}B>jQhtsul-TfB_5B4Ld-s zG!qYs9HX%ZMIg-nWxXb9E{`uO6}_OotQ52o{Bjd87VVds()8&1wh(+%H$~iTDkJ)Q zhW7F;zjh0#sX0m`1Y&Su((KNaLH(cC)TBcEtK#`4G&fhdI6r@~%Md0{%gdiSHTROq z`34Zt$+@}HrcHCXrsPhZK7%hU8(!v^rJPgLQXe@_d<=>{(KD$LpALzxk)Iq=6#5`l zl)g)348t=)M{g$Qs9&a2@NFa|Jlsg6C~hUwYy5-|UCqR2dxoBvNauDZ($Qz=PEAjs z%gnXVjRncLKG2;8I)5MNE&$!-c68Cux@b;ItEv&1WJ>~_E3;~uv`avxqfe$?54!J3 zT4Y~wXTmNC@}>d*5oq3&bWZ$dc}%ws|3o+oKSx1x`bpxynNHWQ4wt8b=4+B}DE`~Y z8w31t(7Yw-=mSqWoi6WO;KQg;48e}>$H?GCpnDmgH>8k?!;Wq*=uUxgULCOTKMNzz2f{v<=E>E}1Ea2Ngb5PPH%g04XHw)jt^iYLBpmMa6M|SxRXdabx$>fp! z-<33oa$tF)eVFROd!RckX`zN~J?KV$>D!XmpCM#r<44y|FAu7xo6ba?!9f9Rg3c!0 zM?v$9q)V3Wo8W&LG{2?_hA<3=UAk+4{|hv2qlij;oK&aN%j0}pyA?D$C7rqc>G_C* z?i0{#I-8`4PunMxw;eRE+S2Lr=;Mkfo}(zAm-jjF zzk}v4R3Q*FJ14YX`b^wm&@3IxWC`_Iw+o5+HfSD^bjj*f2k8C+n%Z$f9@I@*zRN(< zW}vg{U!Dd3m7pokNs!mEj$En<5N9f`d6Gs0hvb?*1Wq`Sv?S2Esefj1Ia-D%g6>Ap zJtk>~;D0i@KY-@neV`jLUQuS_ppZ;nKCaCJ%@#@L#DBYViSGNL`O`7zC?B7JW(;+N z2wJ)(>xqwrPX&!%(xrgbt>o@V9N(y$YLPS~j{@u0ZWeeU@N4=&N5y|%ALyujpX&pi z3v?g$fsTsnM9d$I!7d;43BZdjbk=d7=%)9PuCR}E#eJl!>?2)WALwY@4_fG|+?aY@ zOiS*if%4Moa?b)^$;`1qAJ*Zk7vM8=!P4r=U|neue4|y-nqsMce)a6!u{JE_)xIEB z>}OA&k!yRsbb)`qXF=usV3FTjQyeVw*ZRwBCBbV?G~5y@3omc4Z(l#VyeL?-9$()J zH(+B&sJmi z$1zWF@R0AHxwsDN-HXfDyNbh67kx)4WZ}mWYfmZWrn-HZSE)iY#BH z%v5HLaEzrfYa|l5f2pGVmWT1Vkd8=G)HPxL`L4<~1RZso7_DQ!(nExd{btQFsNY@_cwBHo7mkQX)LV~U7l{i#un!=D&F z(kT8l;ggIij?Ytu8ZQ!`ePaxXG~k1Z7a5e`{{~?l^f^VDI6jRCe?3B4r}$K&Dq5j$ z4zzS!)IuLeggQJBQRnyXo}Qk6;UG*89~FxDKjiPBLh-Rgm-tqq0%z~%MP1^Hh^~4U zeGk#Ke7#Hi8e&vZ2*4GMFiD4^ecq6u35}uiJJin_vXs`w&W-$A3ySOM&?jRQo5c@iETXc8*1r$hY_&1I0dz> zXK!(u_?IqzGJCG>xq5GLmSeMH^T!z@ic2!;cI+)CwZK7x6MkIchlUpXn?OHATD7-$ zp@0^PpJn2wQT(hFKV0dX_7=A(%AVqOCGJa!6{o~~X|duo=;|xsMB~1NvEqesUv{iG zJKmAK3hg{<_^hePsSh}GplRp>~WGOV2{{Tm-@-fb2pDbkxYQ?P_TZx#!uF)_Q@;nsrs&$+i zDntB`TEKbx;=5y=M@0!!9+bTSQNn>V@lTX+K$LKROZf0RFn55;n0~AF21G#zL_r5! z#0Y!u4RBc>esynP0zoG}wKpJ&Iv|QVu#Din0a4TeQXBtdQ3t4~1MSMZ*wSpF_Yt(W z*v6w^|TycLE7hY#(osd(Wj`GWR z!ZRcmn1!FzSiqg};Eaq1=cP0i{A=Tgrno1yslYR2)36Kwl=0v$Q~_i&lY5|BV}YWK zCw!@02i(D?jMg2WWc&@+7VT`xxD4?Tfr$W}D)@26Qf@=)#awWv*>UCL!f?6}-=p%X zJeM@>B|C^JKsPg@3Q)f#s=zM9$ZlE6aILugh`kFeRk;$eLmad8Z&V@f!X?Gn;l@9T zZ%pqFq{R7ltZtQKRZ3OQi(OAGgG#a!@u28M2}NZl4VYgW>Dh&nMh1#6mxIdk$P+iZOY*10>i7T-{4%@XLke#vRp8o)pLrOd_s*jzCD59P< zqhf&xtFpP6vI_#EGPcw}T-~aa?!ZLdaw!>GE@jw>qM4EC5&X%r!urw0w^Zh!r(i{1XrpeGgRx(f7Q7*flt^_%1+HgfH-4 z#7;y3uj8vD5nI7APE;??LzeOcrS0VAe}Ee&H|TdLIQcAY+bQ}L96YhCu8n_$7MH^b z#{Fq1$@r3NZo=`!T`5~$>pZ7tDsil&6H`$`UYZ?Sn)7}PP{xA=7#jD+Hf0}vC$=%o zG<%?G;ZH+b&&E)6T6f71!}#-0G5+kpv>}i)qc(d}VbcxqqMK4a$(UG@5)b5TP1pXW z(ciKg9O~tC@qY+@_7vUVRJ;YX*&9%pVy=l6L76Deju%~n5+Pl;Dd=)O8T?oEjm zWgNhtxHm0UG~*!0(h)nvu}s81v*^*in>(8>T}ywPAbQpGmpda81gVp3V$o zIi!48-qcm-h>lxHb1}Zcr&UAr_yJO`>&fgmW`S<#Jdq=5u|O_I(qn;qj%3CHmtX>* zrqoR1ut(pA-?OvJsA(~pwXPbbOMK6_;kjD`vC2`wJPI@o$>N?{Or2$ zsf;If&lBQSDOGhbzr3+J)a^g24s5RYo~1#Vg>#U{ZX8+4xj0|Xu|+sv!7=K1qa3>* z=WQI@iSvydqdFDmm}QdJbui2BK9+9I{D;7zWQ_3dhk?2Si>t)^gg~|5q-yL?y36-t z-a;iItgGLS(;e=v6x2>dxf_RZwlEj}zkwr5S%$M11|aBt{1IaGLEv4>AV5=rwK%eP z;b1k#=%z;u?=Hk1!I7$r$N3ftBQ9!R;NYsY58ea^0rGZyZ~ zvGe1MiBE0Ww>~9r--kmBp3bOzIxfaTVk)}9VdZ)dE)QZMBSlGr zCYx|%DHr2B8b_)!8)sS@N>wUw{)A(Taej|uy!4Te+hRxjiQjLC z#XFB?On~G?zr#U>eijEzH*p`1=dbw}mC@RX*L=ahIjbD==8MT660dn3_jdSQLYk1+ z%$8^3{v#Npk8~Xwy6N_K&7t_lgI?fV+%N`=p7FIIxL-l9v1MQMl%BOIoSiCdLK#H2 zCOQUsHu*IiSv(Q{J7TFyBhK>P6tQpe)fmn+QOV*Z40<$|s!(&hfw4(2vEVI5Yz<>o zh<%-7D8y=Uw~C666|Rp^oOJJFxNkinxOB=64Dl&8x2o@2ZdG5XGu)^CmhV7K_o=^P z$aJ522MICWrgnDI-QKDcbfo%S-WnJU@TgVUn9@lYcWXg{t#@lB3|sEjc&;M4+!o|N zRjI?dUA2Vy7RRRN?@YsL*F|dou1+m6+9fPw8txAacNf}<=8rh(kvQ+?*d(0AjAfb@ zD?v>3Z&iq`z>$^M^Y?vib2r$H(|^qFyEdgLo7`QS(v|30b$LBAF5NUTUV$leT6{!L z{zEAE#0l> zk^XnkiGveWQRGz4QC#sFtf$6m_Q!{y>y7!}jSq*o%=ihh@&kyZ#~m^M!4K21rci!h zum2!%$4BSwi1|O=>Oazi1qQ5aofOYQL7fmkEmm{%!=ZVfWBvfvVey@y`Y>gW|04$y z+2cQ=bj?(v#3o;gswuR^Te1Ee(Epqf+LHU+rNt#-4ou4g9iH_;Gk+ScIZuK z;3sLI9uQTT`W~ibYbBv3S}K*>ail6__w5|(D?iC5{yUh9_GTcDwt5B(p#FK_Ayv-c1dn7(0#G4*U!^-;hpqj`n{?QGWPIDRl<(LqfP)#%;cjDhACgd^vD>5N;!&qfP4&&cq z6LKo_UTH!m1EHH7T_0Lh+-gGB0=dnEPD!b&rOX=r;R8Tbur?VW|#+Z#*dfK=qqdvkubVbxUs-HiZ^X5C&v}m$m zPAl7z7Tq^E9dF`Hb+qH9uYS#%7S|jH-3^cpUwp3XTSgjT=TW%gbexYf)t}QpSux=( zOIl|$O}C1 zS!u>F&F46i4O9Gw@3hj4Wg1jIu7}gw>;7n@5qTfSG$c)J7h^3t=P(UTWl7WX+t)s9 zZSUim#@OC-EOO3enrEe)8$LU`UPuI>cxBZ)S#il;>vFX+YRF0pvc`g3XFxeERE)nq|uRL z4E1BceTqi&bsGFl$QwXtBp;>GOgf2449FHBR2g)d*MSh%IU3jb^w)%J076_k&2vB~ zU*j~cQ)q&qA;#^{6M#A$IeZn1eIMNX12K~!;Bv{uG^Wkg=QGztoT;CGWX&xT#JmN6 zlr7*QeVB#-dz!}p3g0C63Va+rnyWhQmx2m&$6xe%yXj+m1W zbvL+3AEqHdd0EO4h*1t{;&kNG8ONwIW-Sq8F8(MkOpb_=X$Vl-X}W|U5Tl%nfSToq zF_)-+E9Ec^0m?|4QXvS$C}$E-bH2nlNYu;0MfqYH0+b(0IRcqv*t2~xu8Mh!)?qUT zoj#OYOv7jzrf)>2BY8k5Ege|^B;AB`08sxg{6Tn7Q(R z=sij0g>&E5xi&~HqA_#jGnWfz3bS7ifJD{sSCWfp%v@7}=&drnCIh#!D%aoXmQQ{(!>o3y1()n|p|A{sN-B_^)T z&;0pro$G4JMKorv878h@o_#4M%W7KRl3YY%=E5zjLBnZx=6_Y^`i0~o8Z#GeEDc=K zFBpTGrlz%5auJQ0i|&0yYeGbcbp1W9bG;?Gh-QeAdYYmXt}d%@UE$*$-TXoK&L(WN zhWnU#-Xb`)SzV*~9I?CVX~Dkg4!bMf&TwKr44UF!^rd=wD_|Y-zW|#g`xKLNV{9}NHx!k6um`t`Q!(JSB=XeXy=U~w>$T; z%ap>VNc-CQ_C~j#{Yt6tzVH_d;5Sa7f!!S>VU`AE%!&ona;BDrpS z!#S6QRD{;bWoc3gDFpnU1vT^WHqe6kHNFLIca>Lziu`y3NX1EmFl-ya_sPPv*6lWZ zlGp2p@k)q@J*X%7H$F zR?`smp~4k~IvRTCUs!?wBl}7`^j2Cz?Pb3-eW(>sWFZQ^v^6S;tJ~@uLhdQte&AxK zKO(>;15Fh^Piy~hC!n%B4q#0dZHC|L}Zmtc7 z)KjS>#!#pYABVTpboRt&WT%2a z?or>Xrcp~Zrw4oDVjdL>qz0Eq)`=R*QPh=adt|*5Yzu2JqR4GsxG}ntar`L>g;%VM z@;`VWUI70KY8>Xk%Wcfw9B!KrhZUIiHDlP|TI6YMtd6v+^`iqWkJPxRE11Ax^h3Qx zFOL#P)_WjNHeDgv$XLyi`BQ@A64X;036RSrH?^it2brxYd9gzHiZ6w{Q9oM&YshaLY$6 zj?Kg0Pcf)t7%cnUaaq(D1fhvvw>OCFtvj&m8+%jlIAtYTZ!o$_i+Y0~l=V#bO5R|I zP55AtvGpZ%I>wfrI8JDtyd~=c6lj<2fr?DXvN@Z5?aM70?Uxw-Jdx4s?Xmh2qx)rZ ziV4Gqt%v14a2S;_w9oZx9j&UYG0Fgj_&H=jbS?Dq? z>C(f^J1lfo{m3MEo@okpet_tS%Fp^hhv%xw&OXqM1>JLfphJ-=AN7Im0?-X3BN~ET zK8kUDvW3oVvELZbt+UX)xc|+1A zvvU*ZGDhI-N*omE(VU&UZ$P0KXwJgpI|}FG(CKu$&?Db(p|Sr)K0-}q7wTW$0nGtP zNBK==myba+L_YLOW|tiBr-LR}(rNiHY*YaWKTt1{H1wat5UZcNd|apk-F1?d%8mO2 z8$Wko}a&dvVt!nU=zZ6_@uMGPa__0|KIs; z3(Z^%4|S^-x2$*Ji#0C#V2$p>51*@vG_(gB$%mhaFBTtNSZw;{!laeR3cg9;x^%WH z*LCi>F7a=cOaF=jy|qm*ZKmga9?#gaZ_|=^aT;E0n~@n!4|MHFDfno^r+Bq@_mTh9!`N(v5b90@ty>DvQwPfE-YCuqapdooBA_4<==q$;%ih34L= z=vBq6B~|ewb}wUda9)EWOWBRHrK{TpY?%Ee>g;Vi+a+mvF%a)ei$7hv z2QTjP-&z&km>ust)U|g)Y*SWzSV3`0=P>n3Mz_Zi8wT6O^0y{9m0>3ZS-c~%8;OY* z{daOK59dyfU5fJ=9Gj0b?H5gDmk?_a%Tlh!S;VeK>?+2-sl~P9Se#>w z(KK&0V>t1yMfz34Rzz$n(Oq=i=&h?~D$TBBx$8=z&OA(tvBnS6#GYe@7kO1DKR4r= z@S`XSGY9{L(z#k}Dq>wYviNO!an+0e!qUYWU73b)YPx?1t0zXXVKa^_c8VwpiY6#` z;t=){1%no?*^5L~+3xkEVMSh|}!fH00Mg)+2?V|YDA*~l@Rlx1|{AYSvOI?5$O zs-+eLQaXnU+or~A)4EF>v6Jyyd@TK1_DDdtBBD}LM~4Q9*MYe+n|>Uf+3D$8<(OHUz8Dh7+(=Sf$BAxMR%7U;F+)HnT-v57c;1xJ=ri1UMt72({%ST)X3#^`2LbPUT7 z`we55*eF-x$Wp$I^J9$Njq^IjeucB(AgLP|+k>;{RGvZX*Emv@mv9zzuOcSo9n`Ro zH0*Q4eug7e`8UpO92<&mMo2kHi_u%BLf)B(33=pSLeS+S7Gd7m8WuoIE;`DG5L0+)x`(gO-&8so0u>r}UETgnZdK`MSOzxZ#_`0wHv zPL@D}wRrh`Jjc>-p1`qmoG;|q+U3f{jiEIcw{|u+D>y0RJAjL@6+f6=erYde#6PS5E$QC@%1m;b*y7d3PWL}TWnn(uU=of(3f z)@TV6jhSm05T}E13S-|m2Su!Mk)KNnL}TVk1EO#1e{$p}M|7_Fl8b1}TqiJB7S0sR zuWGbOE}}7W4F{6!)%1HM7txrx$a=|MO@CH$5sjIP>Ugpj(bJ?^h{nuy5_4UEGX?W& z=QAZ2(U`etp5$~C6AQv~sW&$gg$V0qglNoMv@k1P{3gnq7rnPw=el2V5sirU;AbIm z$OEq!BD&0k6aZ;9AvHi~aKaBC=#3GjdaonjL6mwn9eD^*>Y;VyB}9K@LOupULxWC} ziR!<@giHkTjD{GWEO1+OP?M(G|DFGjz4w5Rs!HF-@0frQStcmD*hj@)C;JPTWK@SgXZ3(lA|@a()%c{C$J#3Iv15)D7`iTSETnsn+tkjfa@*jt zA0;qH;}cEQIOh4y^NzITnPPcdr9AJq*SFuwv@GqgpTJnlezc9}7=a-q<@tqwe1Yym z5`{8KUW9jL?^O5Nz$YC;Y>SxejIgX5#l`Kq~=J)++xGrXwy6+ zHT2Ls^+&^aQ)=h|a@K5>8uRh>!)XW*A)fj$n& zoh;Gk^^%9JNb@&nXihdYcn^{o%jki2&f!=ZMiETSLTIR}>2Z3-+$S-tu|5_{V~F{9 z?T&e$9myjtF}?~b>WczH3ZpM&27xtJp5vj_AFt&RfY24NqG}WvQW%#@9@bcSPC%^A z!=or!Jtlbsh7`s-l7}_cYgi{D)?AMXuxxYqsT65N7_22M5BHuVtfC$Ne zBXnb+A)Kk13k{Xj)Z76L8M4N@5M3Nk?;4033>Hb-+=ijU?s zdw5$~5r&y|NDX0i9y$$_;?qkRPyIw%njr{`mU@3^X${~L@%$0DI$v4|jP_Eb0m4c) zLF4g%fA?TKe`pEPiZJ@Rj%I%|hk;(PplS7>v?7ddHAq--tH+A^q3h2ut=35^!f>wt zE;UdPkLB87hTx(4v6hu^xJO7@35?MfOVZ2>_kiapv&(`7g~bJhg(X3{YQ=ZK(RC|G zJaOShI&tMnL|N}oD-PzDg~C}S;jEx}MN7MbZ9q;5e)>GCASbA)hvetw6%VOu8r-Z* z4|HV?OoSmZ{7hU>sl^kt!hW#QWrf7kyKxR%gnF#EIg01arbaQc=}*?;NwCo(9q|;q z_2~$a-|^x>(yGQbJUAa|t%*kHiug{Gh)iegRMOcfSn|AyTs5_|)I=s%R9?8V`N0E< zNec~6G~;f8uGSQs?OdDm@G-nJV1Rh|m0uY!77qM+GBxFw6@lKlwb)J*jTlc3fL(kkJ8^N7@3exfzVb>iVf2@Xv zySiv=KRnsq#kSLL07kHchu*qQmhjw{i;HcECdY~_TC2^`cQ!&t7fUY7GhSV-I8|-( zQJ5}Q8i=gVnM={rq#%NP91;h71>O0BjME|6T5VZ~X6x%uJTFsyJx3f(}or&>5p& z(bm`!#2v&5cj(gjjr~2~ehu6q9&mKte2@nm@r6C$js&jC1CGx7FYd2OF4qI@7~sZwz|r~Ai#_1z z`q4EWaC9x|UJp2`zdw1v5#Q?`ai4m?1;F>C2OQPQ!GrN(2~Pf{YfA$>;HZBTd%#h> z)O*170dA289JS}0Jm6?NSmpso*SB8qfa?R?=N@px_p=8age-PhL4>%f! z#(BVzf15nwuJDMv-vf@utF<0*UYs-QWR7?cfOyIO@Nzc)(FPwtK+QywLM>d{}~0Jrm!t9&ps(vOVI) zdcaY-7kI!?IWF~pI}o@#Jm84$2@g2(+p8XM)Q`4!z!BfxL-An=PX3_$1w7!W{?71- z8|wi_{%!VvqjB<54>d?#@};LInVbv}Aj;dUGp-1sJ*jkOLA z3T}MUfH^Reac+EX0`rN)CF8pfG+zR4Wcee$(|~zP;@tSI3*%>pa8PjL`vWk=C5&_9>rsk54Gs!!eEon~BXMqg z^UJU&#NozA?fDj9GDkAb%^!P@!q3FuppYzo#CIex&qGCuOheZb_6 z5ir;BDzzMa69tYO@YgMu61J-`%TT88BncWtSo8<U;Tws2dI5)m^QT)^ej?VZ#0%l<~Bq&M+RpLBWmhqI$!akAs36UksT34UBW+`yQCR8yV-u*Bh9}CC-g+b`ze& z#zDc2??zyT(*hpBjW4Ac>sK5U-1rUyW|hRb@wK<$TpW(h`0fTKzm;)reEv4v!;8bt zXTEWVmMtd$(<*V@@LjY&vG18KZ0X}j9QOjVUgA>m-Nfm9{{-fYsbrP7@6q|{fa#Dp zH@?RSGfmJX?4xwPLBNcbI5)nFfm!E)?+0KGl1aGnWdU=A#JSbqv%vh-1K-{=3}X}y z3T}K0f%&b(x#jOAVEWGNoUaI&3nk8t?>b;U^uU*XF&=crLBWmh9ANH|IJfft1(@$W z@EtJ==caH_aO1lbm}ex;Er0(2X29&u`6dIiK;qo^ehhf$tk&&c2M(b>nLS<{F7}%imMLq%Q89?=)b>Nt_$sTwtE}!1og{hqZIM zZhRqNu9i5r@~#HvV-I}$UXE+eI4HRBEe7TRiF3=}Yrq^D>zuCym_~_n=f-z8FpqlRdj^=pt{2IQC*zXkZ#Xa`BraM0jss0OFtaQ;bN(>PLAXnS`GW`C za$r8}1UCVEn}Nw$!sXE0ftfDh+JJf018%Py@ODNV6q4~(Bkn3-{zu~W!gr_g5^kRx zG5+D8;D)0g>)w)xOL&v#QgHl7Vg#WewZF;pWayUwyowAEC|z;=&EZX+Zvo@GNx)oj z2LO}h0ap&pd=I!Kz^w9sdkYxf%^vaxOqK^+IWY4*;FbWh$^-5#V0^cD$R99S9&qKr z%=ds>0?aB8xVM1u-RdEKz+`#Al>;;118xa0t32S|0><|n5BUQo%LA?)nE4)XOMqGB z0rwU#zS}(H511?uxN>0Td%!ILW|arrTfq2k_mDqevOM6*ftl|Cw*;6~9&m2~yJKMLYOg#UZrkWJ@O3V-PvvKyyXG`IZX7i1^A7dn^U z4~-W}H{rLDTcZIy?p@Vl&_xsok(QdqY53t=@kC0*A*vxdO{(KW_-)SOvbwa0!_`0O@YbuprM%s{#sF2hsR^UX;|RaM3Pz&r;*!M z-xR z_-V<&l!~SR${m>8+;}0#Nh!;&%&Hn&>nrfQ>GTM|Mm80Z-s4?`KYCAhps~S(k|H8< zB+_WcuT|ou-$)lIu2O{+6&w)=V|0CEV`~laF7hJ^t8l_~RQyPbKt-zYgO-iW7Mp4G zTbf)&rWNTDEDG@g^2Ta%(&T`!X%R(lq2E;vSSv~-84-{Oy^uWIR@YkF#MaYm_{Tcq z&5W`271ITcDD~uMU2SwK{R(&hg=($}aFlLQ6|JrSZA4k(M=&et0XoW}b0W&5w!w)J zKQYsseK@vtiLa!a5g8m&U7(5nRnsKXQVQKL-szm^#dm8e8KS6VYTCE-|QRl;S_1gJ`L^0-bQg36i~v&` zky1rqY7{TC*Ud;3X%bavtqSR6ZiDy%)CT-otFn~61L@S(*P=#hTW1*J7t#YQm5rzl z>Q9qvrz8weY}JC-AVd)QdS)?qKV_7zW_%0 z+KL7=FDHB*3eswnG&Y=4-8OUP4ACj5$2Ui(pw+8_D^uaR2;PoBKblTW4`X~Sem;QO zZ-14ucufnnc#*zUNA=Ig_=o=vZLGSf_M&EtPe{}lUlXW~ch81K z{1`3zLBeo`evF^##hej=naD2>OX$s2(MlSNY1}a#T-`*Sl?NF^|2czQ_G1I~-%a@6 z`2z%-u*TpYAoxf~L41BJq!2zkQYf|vQqEpj(`*px?_~?1W1PoU4NxJ8`8c)mxIrMkV^2$EaxbxN=bD} znhB{$oNg`KQt5`Z69Tc$;40$pI(q7QvEHpm%HvWHK?X-#Nju-IZrGBc~Sx42* zI;!@g1&*qnb$Ye41ywu8Qnj;0)y@)CJ4<@CpRcN&W8JGgvS(B~T?621U!tm=byV%F zqiUz4yZC7W*6G#G7F6vVOV!R2RXa;m?JVilK3P>e$GTU01y{T1(W0x1kJxs%(d7W7 zjGsE7pMyEvw28mAJ1YV|y1Q49|@K}c+yr(#PXG0VA1s!-B}N@`Qm0!Sfb zw~s;B^lKn>7cZD+mfN5+2cY}#jf2le|EBVR; zQRM~Jkr!A;Uf3XT_dUSRyZcqP)O5@&Ze`7j9Et;8=Gr{ALgG!fU7z z_QGSz3#=nAu#UX&vcQoSSf_h|EyxQTOI~1!yzq+h0_(^NEa_gjLwSK?-Mw%-d*Qz^ zNgyRTNszQFCy89}@g#ARs3e-VS$8-j)*S^YOWI_em=2psu? zb!S7`SLkx^$rjWxIF>pFOXLOGJ9ZbpJ;yrg7%b@><8t8znj|>Zy<@ch7rgLa*frDK z#}4?Nascbd0jwhj+$nJ60M_XaU<+~p$C3kBs!|f|BUm>RlDTWXLR35LnmLvnU^f2S z@r?t|&9ObB+7CvVxZ1B()y_JqcGgj~|61Uv+F7SpJ6lk-b1YRmOH}PFQMI$ASNnOY z+Bw#}+9&K8)!rMG!PS1Xs&>{{-1(RP8M3)qbw3c8+zg z_H+IV)&Ad_VOOI@xbFX`>YjB}_pGD3Umzd<#Aj&*PR^b2x($`Et~YJ|OT zukr%x$P26^FSH9Bd4YAh7ubTlz_H{7mdFc#QeI#kd4VO}3k#JOIM&?@3-%x{&?7_a zh5M8jSVvx99eLp@fg>-lPWJ*^kQX?XyucE9VV&{<>&Oc%>0Y>0d4Xfyy|8Ex^1@`) z2z%i+@BTR@5smia6HY3oStJ zDI-!1YJ|OTyYd3-$P26^FGK~7yudo$3v5AN;8^kkOXP(Ql^0k?USLW0!c^r2j&=7! z+aBbF2Gj_9;ZEfR){z%jr+a~Qx)<1jyuh*K1(wJQ=DBIskr!Cfy)aXGfn(jhK);l` zr}TxVQ6ubyWy%YzBQLOyyzrF3QD0!4?gh3WFK{e*fhF?7TdFUxj=aE0X#8V#x~}OI~1!yzn>G7g$GLU`hAF zJmm$Bb@#&DJ;)1}qDI&Yzg1pf9eIIu=C!xjYUbhW85k{a|FJ#jyeYGsAG&4IPwSU^p3$6)G;`gItEMRg?CiPU>$V~mh_I% zB)mXvfMeY|M&lmj1$u&oy>PSg0_(^NtRpYv3mkcYb-EYWg1o@71-2kBa4dO&CGvuKQi*ls z1(tL#+@QR`vF=`2vIlu#8ES;R@R0HX>&OeNBQHb+j=aD+-3x3%Uf@{r0!!otbHT(q z@&Ze`7p_-c;8=GrT(<{#;SZ=0_QD^O7g$GLV4dy-*6Chg3-SWTk{4JaFPNt@SVvx9 zN%z9F$_pIp?uBdiATQ9$gT3&324v>{=g?F>5H}q0muS&tvE+|E} z-CK%3I+S9GDg{fspcMObp%iq_oyQin+@Tcw7#g)GmZ%h?MMLOvi#lNUmf~@TQt*>o zR0@`MK`DB7p%ejRz@sm|awx^)sztFxr6~VpzG&aQrTD_36#V26`GTcgP>T7xw-o<$ zCEKwJfeKT(k>{)>@JjIC&s8p9ZJFXJ(Dk3+667@S6wK@PWa*(hf?r;!&C~Ec7ZRB z+`XlE!=V&>-z}AbrCm^p@a`?eTMnh*`&OwGEbW3)jNHAYpm&QT?pXQ0PbvjVyPy=O z?A}s5=THj1Z<0#E(k>{)z};JljSi)_QzS{HU}+bWV%Y92#b*ws;QRKd6fEt6Qnc;f zQoP_$3cl}+O2N`DD8*U3w-hfql!EUYqf)T63rdl-drPs(p%lLnNm40T+6ARJVfU6| zy+bMZz9lLJOS_;HLw0W|UU4V|-}ghMU}+bWBD8x;@tQ*^_`Vq`1xvf26op+V#ZH_9 zdE22Bd`k+If+Z@&FFeCp-i1;GkgUgD(h7%C@U0qD3YK<(FOJ#0rTDW$Dfm_gDg{fs zpcIGg-ctO-p%i?p0F{EJT~LaPc5f*@b|?j3YNt}Lv`?|I3jiK|n^ zTVD7*M7S(Xb?n7}O3v@7_GrL2sEQQY(#FO9wdlL)sl!j7b#%>#V5%V}i;oNTGG&qF z1#A1p_AVH{efF>YM+A*nep*M*WqGlz)OMdx&-!AAKO%}j*V#AW=q_Gu{E?98a{k9c zqI()TL_0qfQjVGX|Cbr(nu&$d&=!W}rOqC`Xyu$zF%FC#zB=~aIDhz^jE%81-~YX9 zBSQP6)W`(kF}mN4$AM9hcpN|j`M)k@x_CmD9_UgK-H`Gy4!RkFP98swgKjCH3y-we zqf@c8bfwKHokXKkP_)IPlQ?wpfVSSWS)#25o$#d7g|uL&OMZ00j3!2!R%n{11q&^` z=+wy;9CXT^E;j!Y2VFYffdI!CM|HdIATbQn7l%M`G|1l%8-5-6cS71(``;=1AG>7# zptAqDOZE>b`@O_Sv9tMKrtG_S$^H>#-=jyrKR%KnTl z*}tgl&+d}_%gR2xOZKlS`@AmMzpm_yx@7;RvM=e9{a=**s4m&RqwL3a$^JcMe{PrT zKT!6Qx@1o)QJ%jhcgg-EWnbMT`@bvu3%X?giL!6#lKrR3zPU^Go0a|4F4=#s>}Ph# zew(tN(amHj1Mvfr-kFYS{3*UJ8KVIN;=y$7MY@zVoey&j%?b!Pnk#eE*i|J%%a zGUNYmzKOyEneqRue@wdDKa#kQ)qjrPEaT(!iXkY)?14ANX7je#^@ zNaG=@ubf0qHkFx*F2$Lb@K(ok9v$Hr6+tT3hw_q;5Xi+oYgbMJrlQ9WdY; zpD~X$r&cvbD_f`1BU$2p{uJN;kf?=I#ZN-^qX$V15F05zN<$CUpBqMZ28JFupm5Zt z!%t#6`j$!`2!z?ouv$?}iZ6{K5!UYi%@3wkKfXo zzc;O3lUl;)R{IF6gJgW{;;m@V@pAQ$+f%~mRy~AOyf(@kM&aS>xYclJMHt;`Ut!f3 zpAzo@*t9ofg7~QHTG%3Er$pj(%^5=J(R=<%}gwd_&ffTb2$DVpBx=uWYZ%Zq} z=vKXiRXm41K5y(}T6LG^gwd`1!s=jrQuySoTP^+?CanmgTctyj;-gOr*BtoI-f~F#XxWuT3jDmq39qx)rJnRtHcd!dJ&Xz1*}qp1LCfVRS3Pr}#)u;o6?3SDIGi zr4?axE6Q7nFYd3;Hav8eX|+&V5k|M7c59}U@z_3Bn^sRsE5hhjl!|FpyW^TX)9Mpx zMHt||{p9qA}t&V`k?8~37nAc)j} zpWcKb#_RAwX+;>_>L_T;a-ICEg?E}(A4@C3=vGGyt9V-bj%j|ywCYXM0s>)ltA5a! zbIJ>WzicqA3ZxZbbgN^8RXnZ2imL~hRu@Yv!su4V3aj|+@NmJsLrkkjq!nRwtK)=K zyd8FodAGo{`czsGMz=a%v)c6SH&2>Y2h((iKp5SMu0WV=esJa#3`lW*jg(e|(XCDt zR`EII@UqVzFs&9zE5hhjSY9Bl_^dZ|^vflt)e31v7~Se*VHF<_OA1~Nm{wm(E5hhj zrwA)RMW`6|(G{lEVQH)-jBa%*G$}sncNF$}|1rz#P%fZH?6*vR)o>51_`SGJ}Dg5{r!B? z>S$V?AP`2k%77-t7jM1Sh3YOdty5=OT=3mUWL54-KX2GeS+v?7ddg(`zp zyhY7C`1S(RYO%B;jBb@FtPaN~g;h7+V;Os&mR5w(t%A^)Y2DlNCQIx6T3QiCx5^S$ z@j4u_-^M?iIXsq@$q0net+JspN6}xUoUqZf8ZWH~qg&-@R;$*%@h8*j3TZ_c-6~gD z#aDV`heh5rt=38_!su2ZVHKav@4EdQORwB6tq7xA17alXyib*TN=vIZosuw;fj9v1=m8R8lX+;>_ zstB4CALW6qcv5yv*+wqBohVkmBmtZguY4N!WYD~r$9Gn)0JrPEWTHvxXPr1Oj z^NbZ3Dp#DR+{QD`1J8IH&o~>;IRbMZKB)!Yy0ll5yD@JzPxRM>bb1twn4J^%6j zJN9y+GbhwfrHv=*AwShNo~Vsyiom$H!x|gU6dMn9juf9e&jmJ~S{u)W9(d|(JQvz{ z>OJt#K&AK7dK*upz__?}Yi)}o!J@Cx2@yxdI%=N%C&&D&?#xvgo z&m}gV`8J*f9(Weocox`r7J1;oke$#k7TI_%^T4y%#&emCr`-e3Z;s9UgeDwDEM*V=flvGH8zf#-S~&viDQ zB_4Qgu<#)EV>u^iC?zQp!*2Y6U%d8(~p8IV)_t|(J(0Cf3IqVaAetu`; zdBDc=dk;Jh+IW6%ev;oXWBEcW0ipHl8&$p65L9th4bv zXX9D#foFq_XT6PQqX(YnZ9E%oJTG|QdC|u6f{o`T4?Hj1cwVycyyAi9RU6MMHlEi! z@Vsv0dCkW2h6kQEZ9H$-c;52B^A{V>TQ;7zJ@C9^<9XZ0^R5S;_iQ}x+IZgAc%0{p z4{SW|+jurdvm z=TjTcKWsdodEnV>>bW1f*pbBWY^tu*gR&HpIPf%~&nsnT2{HDRUk_hC$l(p)DsroYxm&4s{FKf3sn6)GN(ksd-9i#z{@B(#(>Y$Cc(zsTr*_&q>YgO0z|3%9W<)ft>oCO4DCz z#wks?)ZDE!7fVfx(%d99E0kur)J#yCcctb&rTMqioTD^{{F?LgTcsH;HI+&;L24dW znv138I;FW!YW}J;Z%9p>()?R$Rw>QVeL3}OlqO$lHYv@8QgfNoTq!kgD9sRGG*hHziqc#qHIFLIa;dpRY2KEa&y?nSsril4 z{Q59XeT&kZE;TnPO+;$`p){9C&5cU)2dVj3Y2J{UB}(%zsrj4I9Dx~-!hEGEl$w{6 zrbTKRmF6a?`LoijkeZ8><};~zMrr(**(pSnroYtuUTI3Drb1~hlA1p#&2>^UQE48N zng^8TEvYd_+U=U=)RyU06|EH_KR@C##kW+*xJLcuKL3^?{-p-!Ss253QZb(n4Fyxv z6kyDs6y|nlD43cz1B`h>VY(eDAcm3$UR+@ml< zp`l=Enj~hW!rUw|rsjExxnE&^kQh^Q^3j~uy$UlP8VaW7a*0`{Fi%K~so5+sA1O?r zAM==+NzhRJtX7z7CC1deC@~)@%ufL1A8!7*o^ZSmt?N zVX~m1U~1+_%wH7dj}l{QK9`sm73N4<4kMVFNzinM=2eBcR$@%eixTs?!id{KVP$I0 zIG%alQJ7k2D43etB<4MZ`HRGunm#8m&sv4ag@%HunJF>r6y^bmF*P4b%m)hNKaqJ% zO&&B<_D2+Ero@<<$0X)4h1o1Irsk-Vm}j%Xlt4ql)XbBZ&lToDi7_=FO3bGUv){?g zV`_?_p*(-0Fmoiv)I1?Ee^;2z5@Tutr!ddU3NscO3Z~{-iFsOK)=G@2`AK4)RhR*% zGLNab02<2kg9>wl#F&~567!J4d?zuc=EVNY^E-tZ2Mq<*oGOOie$z=qLv4zWioF+( zZGZdzK0X7CFUIAtO2dDFA%*d*1F<>}UpXSHLkDtx z1cnqwF*FodW92b?i9CGeh|seokHC<^SSEQ`W99MLc=(JoS$!gT1cnrbe~|cRu*S-> zmyL(791(svtf-y^Mi5*ed01oRNwM+pl`Jy5S@H;s;8`zuSYzc$wej$k8Z!GI$s;g= z=co+v&tQ#}r<;w3&zKRu3|3Swfe{4ll7}@`p6)gtK4VX2Yb1}r2%aA#4{NMEd)s*U zOdy$^I+*h#FoGun4F%R%dD3h=eCC$W*GL|LA%(F@^03CrvyY93&)AdI*OEtINMW2f zMEo;YW98{#&&%#=}>j z2tOWHRL=q<2-+nNYpgu`*?9O06q)^5@(7IJ*(!NhW98Z3#=~dq$?VW!oF9P^JSEUj zV2zchkBx_~@Dh5ywHCu<`H}Ub5OIc?5_nV;WPGR_N(EXAAu1(+0am6 zjg{vh8xLPWAoO&}BQT^eelK}gW92#6#=}=M$m*|>M_@={?02U4XRyY~bBK+Huk;Z< z4^~vq0wV}!OCHu(c@DMl@Re&adtCAejNsWUd01oRIn2hxSFXwI(6cx{0wZ`vLPLQy zR-VIcJbWhxp)Zp>0z(SpG0DRkE6))&9=;QUto|-}1cnqw@3X}}gEdy3fQ{z?aSed* zS+Jsd78pU$D0x_Osyb7E9wT^Cfr5|_Zj)95W1KphH6&r&=hD^&q1?Nv+`vlGg|7y zph?$w+Mp@ZFb_dPzf5lC=QC(N0+p#bBnN$7vlC{m{_L%Pi?%p=r`I zee>WQO;ZTXQjKR8H1u4$$@362@qkPqtkN{rw@DlgcJsNC6Azl!5pUmkbD*>$jQ&hb zKh3J7{hB7z>T7957~Sd^&FYetv)7td2jz2)38Pybt66=2@P7_7t%A~uFuK)on$>k3 zjpvwFQ=}DPbgSbvtKlDwdcd^0Qd$v4w>m+y3YRT;+O&FHS`kLKI#IJKKeV5v4nL4q zgwd@|(yVG~*572Nl~TZUNEqGfWX_YOrQ?z!&Qe zH?1a1E5hhjLo};XUpwkK)2dxs5e8N{qsH_bpHoh`K22Dm3XEg95SGtn(n?^2{$pq` z{IHeK>{rC|vWdxorl*E!fhJwk+yzY^P4gx+eKpO`&>X61P99+x0ZlU=ntqyQAvDKp znx~=CCVVtLF%Aq-5(_9Kom8SUK`|FkP-@CoS#)voL5>J3^!IZWDcpA+}PF%`sT)_%psHO8Y?eM zD1BitJR-j!t1#D0f?*YPbrH^-weqt|gL&cX?5wh^0zC!298M_}1WU3Dvdi*HOH^UZ zltc!#gbIV9!o2K~vXZ=DZd*Na-_lyq+JY*oiK1NfC|zyC6y1{}g8BJ{Wd-4!B8L=O zqb;pAi>x4Ow|GPjN}t=9Ii#|!xjEW^`XaE-of8b@XN5!g#d(UGK#}^!s;Gv{$qVM? z<`p69*}-tdbaL(VXkF%zDHSLKybd=sH(p3(pa^ok>F@mDh`ge*vaI|9l}J@%Ykfs) zbM5p95ok4(7c2@DWakv-1+&Sq$Tf;kMMrdU+my^9jSV_J6fDZkF3B$}HCwGfMuZ!5 zY+*1zyC|!yBp2<23ejBAFa_O5)C&>I2CL;K6wJ@c$t}qWWvkqaW*uSU1Z;7BadA;` zc5!fYePd&54Y`Kvi2ZCu=VS$oic4~H(Ge80=#|tWA}zu`Qe9DrzN?oaKbRlR59NmQ z3azP3tF3B9U$du^9S-J)@`|&HOY_Zi2<(yuI(JS%X<1=mI44+Ghbn5U79DLeS}K{M z#R{jlG*wh07EQ)E`SEmB`GopYm+7Y9e=78ev|VGI!-pB$~LjZUqYOliP9 z&1k6(R%OA$()_aGyezX@a3WRF>I&pBNn)X3UiOI6{GvPzC(UqNEj1~sImeQe1@npu zLs?PSZY2B z2g3yg;ev3uI2f))jX9))W@a1Z(5%Cyg~bIqIcBpKrHUuj*3^`k6daSEon4fTX;k;n z)QY-Vv;~YtXxa_YXcfjVEt6s9T6yByrSIP+=Q}-p{AuO;%t{)63iKqT~?ZnsvD!2xog6=R1s+B z4)a|hX4JxhoN&H5XsWj7G(U!ea8P!3acO}|I`-MFAXr*bJR-X&C$U(_T*L-PEsV&{ zDIF0Gl?6vNPJ<(wqZhT+Hq&%MlK|%Ysf|>iip(KXqtIwIUKE5|!^NS}#Iy(+X|gpt zTEBz~^F|aE6ehHVcyEtMtrlM9W8Zg^vULO(6Ee&IYD#=R76{k=KcO*<8 zMM12J%Swy0Mg&VRJ`byIn>lj^&jMn$ZjMf&aa&6T>&~*gvb_Al#8EBY$s#RH&Cv?I zQ)8W5ls%%TtfVBL$2F|gYtf9k)B}^%SZQ&|2#oLMP%ZFO2Uu}{pgLi_gw~ip0y)E) zLoM`aRyHkc9Stjja9&|#^@1+syLY0Bi!tfl#U*O z#a~ttmd3J*an`7 zt8L31R5K-F4kwt3!XscD3J0l9s%e2VB(q;mUQ6bH%prBP4f3m=B!;h&qWn-%7|X2M zhN>v$=gfY&r8r75hrkX5`QkuD$793Xmm+N~(JIbBdGH);dd3$9&!v6nSbQ6gulN>; zL|R%g?L?bVFW6&3QCr_c%4Yl-nbGFv#^zvX)F^CPL&4z4Y#3(ejvG7%BV~x`-7ls*@ku#n2IqKX&nrN2 z(#_F6NxZTb4a0tF&5_Fk*5tLHN^|CP$C-TkxiV+2o7IEf*>$NCJ!Kk=AopE_ANg1YT4$pQCc&bHq6CBo4jy)-29bSyM`2 zF;6d9K?yw0AjKrdF6-$dN3u?E34Gc~A{V}-xDa>gq^&TollTOCTdPa3x5Z2Qc*i1N zsS{0FdGw(tDK3GJ*8=u|LT5{Ya^w=Hn_P0nTsD;Qn@U-nxs@lCG`{%qs#B!mw4FY3 zcnSE!2By>_%?sBw2#H7RK4eTPoHT>@g9G ziMKQo7VjRD(XHH4vMuplQ%FR+F*`2)UD=&1TvM=b4&3=|csF)At&Tx2@a3&eO2( z`#coIX5^NRoQs^cj;={1x9dDL#|@*0)ST>`QsaTtsSi3kDLKA#c59#W!fwSUXO9n9 z)V^$6R>zvsCl4pP&Qo*Ps(MJvZsj#4Z6oVBC99QFN}jg3j;VREbW1T|+gh#8+q$?OGx`-i_UHi|xwqWZ{;A(+=D<0S5!gPuuC*hU!L-`)M^I zw9+l3-i@L)E(s-Ws5?!>!N4^E`(C=!BpgkWCE~o3c1t6vMdwLa+PJqAbc4=V!7k8eD-M~EoF^;+Iqmx#hi=}&#@UZhHI%!f47M&-d&$fJa%rynwz&!!mPPlW= zIGH3%M9wa5duNBDxLUa<<+K5ID-tJ_#40hVjPDy#ROO{;14%EI!wsXYsD9Q?wXeoieuFY~?I#q(<}^}XB17sc{^!<{#jlel+7bAjyLMl@1= zk?h?V)e~Rt?wnD42=LIdMFX`iFgxu@j%!6P`Ey+PB_BofC6@;`>joa&>$>7{E0J!f zt)O<+Os@;ft%=+~-6IN*@1Wfy`U<0ivB&vT;SiZ(*PBEVJli%THbS zonkF(+fK2sgQZ_;S=EJiaRIs+nBCdQ8o_cJ*iy&tQDn>d`FT z@5EAOCvC)P#-mMqo$3*8TcUcjQ>)XRzA6!DV%3?{!gayfsg-T5xw96Y8i{3v*(txaxa<^dT~{Up z_a8Fg^nfJ{JS}7JkRbzx4jgPzLc~0bc|8yqJakA#hKM@9N3pNQI6Sw$V#hSYxXFii zDk7X()r^-%OpWq4{I~{$G3oJd@_&zX;Aj%*H##0euVgIj9skDvgGPF`^_9b-I$I@%(xqVL&rJ72=&KG8(dxqq_atJo$tjlLgsa@gFn$DX zVt|2XxEwTx)F_`+tG~cuHnr5QP#2~hLKi26GzNrop9WbX03UdQfEm9| zf*aD!Fn$7NV1LF@`!@N^`a2E!w+0x-z5^MTto{}vL;1kGFqCn4)3k-pEXQ&b@C*Dv z#yw{_;mmZK5WNmgJq@qYr_d9JnLm^7y?yb6Ex;_s3xO$Q;V^L~-v!X`hu7rJ!a*S! z-%7-ND=~zlVDg#i-hg_33@^tm8pRkITAgs~p#L10Wpac~=HH&+dl{Jb#4DZgqdH0W zR-qxCJr+MbHICCw)(-AO0Yl>ryKv;t{;vA z8%Z*Qm@h3q=0-7uJHrERFmRKAyH;YU{WJK+~z)}8g z@_-}0H$32IJpGFY9Qn7;RD4*1Q@zkUJ;DR-K;Y(kz-0kJJaQ5~>>HgD(b58dgkGStW z;{NS`!>NV-bh}GoUbt{{IBQH!!5K$I@S`J<(PMH8OCyD&OC#e7b3>8QWg)zUzA!Xu z^jQOraxe*x&WYe|nX?8C8{imUI3_eIYfR~=NNy;*JU>z#8XGEhWE$1h&{|s`Ev}v1 zT+uw^tZ;55cSb`+eQo8aXkE0TC5pszLwQ-{#bb&Kv(GrHzGZ4XKO=O;dE@Y&((}SI0{OMA0eW5MdGU9Yo>!0`Da}FN z@sd6%pV!RUIj^-*oVGf(aq)91Neo9hN>1Lr=sDw z)&SmQT@|3SKDdFUE*ikA=L7U!R3pE+qN)~ec@0c!ZUl2nZB>+Pqg7L)0lcBS=|}?w ztO`^$Mq7xcrebQ8QkmRBsMeZ_)sSWn)8i zEp{et4Yidu70oSCtRkdbQIEGe)1s%gL693w)z$UlmOAJf8k_5J!mpJUyiItJ>6EI9 zX`nIa+-O{GXse$bZRT&)czQNTjlDa`Y5SCd79OSxZetQ&c97 zY~htA%+`k1iSKc0qlw<%+Hwm0XhfY+9@}=ojvD03sJfFr%fx5Kb7dW&Z>#PmjfmV# zQY`#!Rr{|6g}#-7{A7Q^p3t z^CZ;97WyEvyWJP-0ShGQLt=-y4fjGZl^NJ0ihWfx4^bBw9UV10cI;Rmx*y++^`RH(pXeX)`0(QOp`UEpj_I&k7y8L3 zu(5F3f>r0?>t5~Q``3rI%>%wYd=J_|=)u@Qi{5WNAT}Yjed6}^iOcXMJ(iQ&9(ru6 zKjVGYtq(m$31qBn4?SJo9(od(y<=@pj!eO6;CI^6 z7QXIZ6oS0q;^{`mi0S@?hvLh;Ib)30-m#qY1wW*;?z7;B?*2vHpl%PpNO^fRwhyX5 zJ+@DK_)Q2sN%zjyo*5hQeSPR1%ES85NA$0Hedq)9&W)|z+QT1FE;jit*wGPwab4&W zuAO;vW*Pn!!Jh4*%^jf^%UXMNEIJ=GQYNZn>#_5m&BaKBtc>nhG#>ic%QD8_v8YVp z7OYK+4ULth`d6$!A+))D_J;QIwCdqM&h8s~CANCimh@Gd)2oNCnzK)A^-1gf%U5pQ zD`RCWybY?^#}Vuh9oAFA+C$s6?hPkUIbxv~F*f)Y8aQth3%xl!^if-nd9yz;{ENOs z{-_Y~+!v@^>A4RkbRuBKT$nhF$j@PIhR}T+uqx}9`cD^5=aBv5HZFz!-Kj@c`x`dILfgOb zf4cD-e|qp_|G6u__Mfu`ksJIsuH5nzz<_+jkWT<917tNIm##z#fPLh@>+crEFy0s&`_yXTjZa=Y5 znt#Ox|B5vyt%`;5e#VaYRxEJ4a((2cKFtL_ozWvV*G~fHVvrb%gdHKp%=;>Ja ze)PXB_x`kF$AZ~c`{o`N3-zV;)t#k&*J;D8W5#;^Rw-#c_`+|I z_A*Gnisg&ZsAt9wC~QN~4h%)>&7o-H;_%7^XP`%or(x&^3_~0Ji;8I&nu}qm6vNQ5 z<}j3R8HW5&`&XnO|M}ENF(Of;qJ~(888POg7A!_6sIEL7s;~W#4b}d0S5ZyfvulT~ z@jc_c-t5hmUO%p5QDUz*M+fTlH0AnNymrzX?d2QVL+Kb~+A#spICHFRoaqCNb(}Fr zKRw07QPLbuDaF3AH;`s5oPN@4?V;`d<*S!s;8i^=bdUeiyD*-i^@xF^Bio0*C`Ju2 zWY8u?4H?JBT|o6uwT=ppj~5G9`WKx8qAj#)18y7*7QlT(exd;b_)mDypr6L9_M3x7 zJs>=2l*4Uu(0JZq(D)Z+MhrpbpfTDqXsqTz!++VU0FJf}94BHFi@mVr^28zI04vJB zXesPaQ}dp^2ZGT$3*{(18HFg{ELzj2uTx=OMRPbb}6;n@`_pDe1wC0T5 zffe4%<3ul7xUwyMN89$;%cJApTaQL}#JmQOQUwwq=@G;goD`(gybID|oH>v#);rH5~tc*ocNlS6l)frvpdrK3-9 z`17;+c|gA^hPQMJGCqRv@Wz=ncN&pN6R_D>-3P00!+0AU5={ktjEIux zTqf(LprKqMVi!WXOGvjtdR#~kLb_8(+2|-7dmbc?y#Nx&z6B(9;GAaM;XgTyuTEF`X>cOcy(n7@R?HT1L6jY~6(hehlZ zCC!AiOz19G(ru8q{vL(2Sj2t=iOahc5|_8vK5^YakXSbq(k;RwsH71};-kGFA>RO!Z&C5^I?Qc{{g0yC*n|_1W+++7aAazf;jf3J?MgM z{b={Qy3g45@((h;8yDLPlX&Q(SdaL8`3VHE%-_5P6qpImW+Y9Y)|+uyBk_f+gHld zG7=}e(=8KTe3je_lh&xQqN35V4p`>H8G$~S)6K>4v`vFn3gsav75DYaAaP%({>FX% z5lGzES3=^x{ufBx*QxVxUl$FiFA6()Z0su(wxEnkTs#hKsO_f(&%TPb)`L9s13t>X zZJ)h;&aZ1=%o{*J!#^xon~MMC-^M2PTySyPLH;W{Fib-uW_Ex7RsIFDSix%%v4dD6 z^i|ONk6(q^>>K}i*jP+jL+iYrSQ@VuTbS{J0;}K9=1urZSkq!vgPC`ez$& zi&wRWdM4&jz|v`Lb}m}@$vDzOKM0%c$)K3NC7QN^)x*D@J+j(=L@w%Q#mmF@ox67| zr)SLAdRT09YDe~t;T!OER@zDX$8xX!X=}HW_Kl@3j+Jj)w6d*N^`aeZ-TlkgVS$*x z75nJfJ!hw7?8pP*tjA;FpGsmA(-u4>oI2;o9W4b|Of4bbPctQbHStnEYQ z{wwIjA}zW`7x-8FF#PRV`=TEYf7O5Gz0k+G(i2QmV>t!G*U!%4_-=ECh$bc!RTebIFBA7?H1$BDH?v+xaaZ^)r}TYIk; z3UFbVCQ74*K5_mme8>9GVp6ONT|wuK7ABrQ!=Cadir-8h%Ia#%$+L7ib0(tU;QW)( zC3&kHrmpEfmv$&(mx%wit>Gu!f zlP2l@<-xS2!!M!*M7|ES*l&(g~2&C%w}?@q?HkXfNL`cAgW_Iym{^p~ZBP>k6FYDu7aKJ~^${ zeLF(0%CrLUw0e!}2yIa3=dd$gX{Oj$Y&z3MV<&_&ecNJdcC>wfGcPZrF2`Y=A#w

        EN>2eX#GRb=jhg{wse(VdHV{M#|>f`vzf8<~y+eK8jTBRp$H(}5%)Y#Xc4*O5fyHP8@s=H*UfS~us80P8UibHZ-oJp> zO2k)&di5_@jBmI)apgSx=NYiuoKr!L#KoA4AvtuYnE$W?#u!ZB`&wp#1#1JyxyW>f ztg(36mia7~q2w6b7v)?wEcB%RivOUxgxQuKAR$B8$%^H~PN%;CD97_-L4jeETcu5GA4E@dhxw zO#Z)G{8zicCJd&wT_BQ?oIRD)M@h#+;$7e=kPML@x*<>P0!PL|xtKcV4K-q4wWdcN z@vXy^yUSOLQz1bE)2DwNZ4&ZN#z&-B%vCSY@U{Uh3Pan5X#+8N+_0U$z1e(lbu1KE z>OU7}+tisioL%d`YT7;&6ASm-+JgklPVM1-^PU}#92u=W=RI3Tf`9qDZ7Kfc@64NX zve7>AC;!4LNV(#L;ib9$+gIarPRo-!<|5(Y@64_pUK*TzW-K&#cxl0$gK-8s78;7? zE`&2th|5>g{wiodjK@Ggj4vL8EUv;l7z+=^97sdc$txH8&h)jUtn;Dk4_)WONO&eb zBbNHW+4J&4tB0?i?T>A+T)&yyJr)Xr8kJOvzKRSN#9qUw>c1UZ0dXOF>WMNrq_qmw zh&ox@+~aFMZvwVrv^ozBfzEH9{OW=qeY5xe6IIC89#8JTKdeVfaXM@8Vw{H^8Y`#b zt=r4ET-4se9jz^*(ue2g&g~Nm^;-&I&c2WOVm~fEc*~FIIY5k*h=RGtGooP55%ZqC zo{}ISuAPR4F7CVKMWEO1<=e8Btqvip*tp`~m$1Of28bG!%8EfzPy+!4SIy?n z>?V*+0!aXsum+OlKfz=d(3%hoQI>JhR(++f+S+QXueIOOJ`{Ylk`S5%rHYhVsL)bN zEttGERx9z9XMUe^?)=%w?qYn>-@s1JocWw{&%O8D|957(sZY%*74@gncxpP=!dOzg zCP)pzpAn^jR)v-$ci`cndxA~w^l$>Mw!&AtsCTU(3zAV_>aE;WM z9+%E3LKcA|smNq)Tj4cdqlvR#QJ9ZOgmPEtTZi+2~c4v%`9JS^|r= zTDG;T)gjeDFTi&vY@*n)4AK9iAcincJFi2njThsXzVWX zf?UsqY8F-Je12D+*ATv-zCpj+CITru6PYaY0{+D;z9m z{+@bys5bp}a@pg!Qq$PE{dpLyITgp?-zWyn4d;fkziwCPa!`>e&?0m9z{rHM6f{>-aO1*yf5fiugJNBqEMZIGL+w3snVuydWw{2}OZCDKxkkkYdh` z{HE8Mkh7Q&9B4QeVW8h^Duseolvr~cXdQ%|@k||)o@uQnpQ5#c0DdV_3(m`#q5-?0 z=D-hsity7Ua!oM5al91SNV+v|=ErR#4*Z37t0w5fgX+Q>PBLXAgw2oYyzlC~-+&Sl@9WgfXbXfy zkxnHT@NYq+6AkzyQ5w>#qjz|4=aE$I9qa5&tvT27^5@ z5&zDu{$1d{*dc#pnKi<>WiK+tIbJ&JO^3N2=N3xP=0+RFQZ$Z?&ap-OO|(B{3-6;! zrCErrn2s1l#3S9K)H#PvjH(IlZ|anvAgV*&L6Z=VsnZRL7n9db&8@al5yAB~SY5H4 zWr{IASEn6T+UM)j5g284XF(2uO=)iEk-`^65M&Q_%3#FXeQ9JScIP-F)=1?^cV$m_ z80|J0f(ibkQU4whMz~dtRQO(!53O1`j&ESbF~Z~UmC{N})Zc>;t#g$wzSl3Giu#{Y zFz&wi7ND zw=~#9V6IY-ZIoZmmVZON0JO6u3W6k@EzO`-dd!AlEdd5#N_WcaQs?dibBQP-VxDTI zf|Y}F7R8$p3ELy`GtuIVi2o^AHHK#IKT6=O~rcjaBf9PMJ!Dgpv4D9r7;9 zq!+bJ5>p*w_M&+YO;Oq!mqlBsORr5#(451`ew;0p|Ol=3% z%+&LszRFZPsIN0c!^?-5@}R7VyVTeG2J>1$J(n$* zbD=#&x&@S|3UfhG2~3fSLA9`!GEk2)ZwV-2eS?mprCNd8uH&B8aVQ|_K<_mFB>SO#;q}4d?ibz2zs;Z|V@{x#q4*LkPL-iFJ5;k{~qh>};{BwXdp;E?DpxhLBiFUt4qO{XQ z85N1%Mt?7%0*=YW&X#gq_HXLn)X5w8EKQcCmcyZR1)FT2q}?&N7)#qTqxrb#9+P!g zusd7mnhfb|DN?Bp-tvbM-$L7HV9p&<$c1@E<#ny-9zivN*;s6)j*XFU6Jp`tqFe&gQk5~0imf0V%7}>n5$th1 zjBB;EP@4)=*hXs+iB`k5NDFNSMKwkfpOF@F6kJ@)7gQT{r*$%u1LyjQD8#3eD<-<= z5cA}SEKToHgVb&5kY7c+_S4~L@pk88%DLUSohJRGQOW>zRHZk{28iXqU~};Z`?S`r zUTi%d43!*36DhcO!{x1PX%bv~W-^6VpSrOFtD ziN&q0@~gLDYN4lo1Y$@l+K8v9zlUPUceihZ@&=Y__8|bV9gb_^<&;WnG-_X^g^~ah z*x}*WaSC!%_k`GFiIS`7u_YJ5^zw1o(4k-U{OebXaOQ&7$Y&u;hsj%gxOVN7N1rssQSNb-NVoQA@?nA`}K^WC(VVx+{)^ zN1%@A9;#G41&;gz8b|C4L`O+j5#FkHV2~)-r>uA}_rKHG^6#jdMWQ?gN|BFJHaK^m zb?)v{I0qsvnTU(R^#!_+3bv)~ZjHzX75Nz^j(*_`+x9J*`eH?gw!9lkVNIaW9>3+x z#~y<=#lOqB_n5o#_@+9g;b1iU>-o{}Vf@bE_W^z%&7ar*(n2yT+|&OO*J0^g#Z)gme2h=lytefso_sjXxJVJCA52FQ^R}c{OytK zD6YeOBM?33_O}Mq7=1#g=q+k<8qpRz#r3UH)CL?Q6kVB?$eg>S$?}WH2Bm99#E<2% zJ0GIT02zz2k8!Y8AJDiPYk%VEw#opq+S_>@?h&I5m)9!qkx@{fE85p81Oti(!M8g>OVsWuPg8@35+4b7VF$t%imR!SLOG{al49yq-ilxcadxC(7q!UO zqZ~#`Y>`>?ctd2o@YL|o5IK~kw#l+NMt7RPx*u4v6L?7^H|jQ zJ2ihbIjfw^Sxt@CiAvFE84e1MI4W}aDChD~J(uC8fGKZn_1V=%JjP8$SrvL!k9bkfo$xRo(shrFbtG;qm2ej_z}d1ChQheV8Jw}(ORMbQRdp;rw)v=x2qYdopqFfRN4(yDofQEV)*l~rS z=7T!6+}?wQAUc<5!2V>}Wyjqym-uGIy}$9V04#E$W( zSMWG~Y0?n19}%WfL5XqNt)RqR+6+tcAZgMwpnlHO-$BtRFhx2GN{qTLLrc7s?@j_G zWS4`YEnsPq9n~F`;xy@UP@9>$29y|4P6M@xd3S(PN0gwNnRgi`uY{HeDC!WUN&7&F zapZAOVwCwYC}I6{3~EJ;azP2+Y)~Q|cY_l4y$njk=tG@n9j4vA9+b?nya|+uI`&dv;?Mdh zx(D^o7aT=@1;GkGo1#-QK#5VbTc>h#%BNF{K#5Uw6{uePQlucx`Y0Nk7_q!|Y=P3? z2)aMR6Is7iI@&%E&yelIGh`k56Iry~qYI5c^#st1&~||~pG2{u)tCC^Lcv>55c3e4 zp@43WY5Qwx+u!hf+S$folhFr$lZLFU8NF$29ip~L^enp2MQXOAP^vqK>W2pwPiwuq za-RdMr#mf7@K#KFSx~7QH-CZhDfWus(Ny=tr{Ne61UVCEZw6|!W0l+e7Y&!;t0Z~U4mYA#x2U5E_ACf5^kpElk_ap1taXObXo z&LL^j=A2mgiON127GpQ8)&*{jcng{~c`)dwInU<3w58ADY@WDcb1}AC(-?g;S&t|nNf3*6mRS7oa+pJ7{Mblnafapk#+WN%(0A}llX7w1 zfJ{o^`t@n%{aEK+j5`8H8$AR?OC|IuQHr!4XR%U|@0gDvXH<4zqv>cFs}P?kpVAb-xKhjk z$j3Q5mGC6QQn5!y;lWYN?_jizM^`aj0JPfCpbd7Dupw5lW3~yCBWZ3+$cxRjBWC$i z!$W7v<3cl)0zCfZ2u>~rv`>+z-~k;&jn;F-26l|0GAH}7_{_W8r(hI2g(u^%0iK>K z%+zm8Mmm0%QGJ(luSVip&G)pNouE@ia<(eD_W;abDnPK!7kYP9<(+E9y#cG@x!*N)h@IS@C<`}?TyJ&o!uL6inW21O2Og4kovL7H>7`~m)6 z5|<2kSkRmd{b2+&g@n#Q=zaYCtUr8CI4#FaM26Z*QIfo%$Vbwo4LFCmgiv4P8Rm82 zEXqn6?g(DJPJIiM*s?}b3IcZyl)|#?ZA_J(z8=OMOR7y?sA$K5&yYJ zW#8GnbjUS@uE#^?H0hI<2Dj8^C4KhhjW#LNd)7lBPxvoq3MimFOe-D5K6Xsy!4Xjc z9Z|WrOf7E zDo!hZ$HOm^Kg2fsAXdzm;;-79K+)kn99z>-9b?sr8YX^T_x)B(ep2btHkY7*o(z?f z<@Yfiqe?pl^hMMXj4fmi#eY<(I8Kl5RGi*ChZ8$8CpA)*wir$iV*+=hI`N;zV@l*C z4ygbpi!MBMwO+&NDv7XeGSEb*b@Pp8dr zyW40xIX#|=>BJ`@l}}+)x%`Y`#o&_HZ)tsy*KgyN2bVWNH|-_gqplJTSRvHzM`;pX zU9;xWq2IU%H)!d?#Pv6UB{r7BL|QpHXYCYg2AxV{>S`c2VRopv=iIY>BSCc)}BJ)IXT$v z>2_ry7I50GgI8h=s`50Z8EK+o%MC~jOyRoaowO}|m*i}@0vz#7^i%xi2%4W2Mb!LE zbSe1SJV7_!98sX-kVgCzHWHhkc*bVIl>?;#aA(@;Hzln(J4}rNjqp6BE zc449$Dc+YrV_Mu#`rPw|jj@k^m1u1(N+L9zT%Y9eue^bee|Zu-{&i*dC{jm_GV2;g zk3Ne>oUl`ER6pL{;Xkfa9y#-EnxT?Up-Sp9svLBc&h08P;Q~{obQ!t`Nar zL#27QeGP69^98sn!a21525q>b3Su;}DV3^Nry{qyA4-SEY_f?tWrd#s z-CB9tz5O)mDrfXlM0?A-VLUJmWF{fedviYe9@tH<(RwSE8_~jI&Wa+FiYQQ%qs7VD zLiL}Th9P5XIXWvlu%?t6yJY~AzD=*4WQ`&0{(3@cT!VK;P#uoCUJUm}`%1+lC5;zp zQNt$x?o?C+jN>ukXxj0QZU5*{@XmjDBl_$QY5nrYPRNgGbq+k8%O!UDcTc5#R@kB+ zm7B2WMO9w+XcLR7N8Cj`OGWgWUV9ZuB!yCuK4@f(8_Gj8CPB~k0ovNP3eEt7_+bQe zpzp#!;dOG7nP`XLB-lV!2!uA7pGo~VdTef=Sk~*`Pyi9pIl@x}acSn_xN;nYO4Mzw zXWm2j^bk$UUqJxDJ6oxTBROw+2j%((B58E=Ubodb>CZrH!az6m+i09Hl70(gAy~Md ztlN;`oYZLyjQIT$WW6>pay~Q)iGcj-l^Q2de!=pAg}-h%Wg;@Cy8yvcu=^<3Un1CL zQ=F6DK!Ke|20<^@6e!rPx=RT;T$F9RMh9rzJqoeAj-z>KSCb3fOWDyli_?sHhLmRc z8Av_6=Y=}clz6m6%2)A;H;EIE9VOL|Zi0A7679%nY^FB5P0tCrXQ10ax&jX=iqymf zCop`8OoyQ#;MPMMk)mwCoru6_=rGhMz5;HJdXQz6J?{3#faV0V$ga{dn4sCth9UyO zH#nY&ydeV#-HwEg1Ym@(wC*C50PgM}O1{#jhSR9X-bG47o!IP*aqjEFdA5^3QqJCk zzkpNB0$pqfB@B%y=*2Xk{ZDN0;oTFQYzvWCrm_3M6Y@bVolaC9L=xaFK}M54%U94) z38fWCZ46Vi2S5I zXu#72y^)f9)R9|{Afc6t{aFW;$~{O2o-^TRPod4G4C%fcugNLE15c=1U!B~p zdl)seitRx>{E8L#9kbxvlRh8K-4&_;#g6fP>+euy@ci+>5Qa{EL$PfGwu=Iwo-w7M z+H<0&x^2V7Xd^s41U`f((Vg4g+2QI5)V=v0c_vO0U({x(aR&p z4G(X6jUJPcLU?LIRPQ1$>G>*Cxk{$<+q7p?7=3JgA!j6+hvI_wD6PkI)FSd})6Rbg zP@#yo8}_O#NB*opexnu6rui~<_8~c-NkJdtu2$^9)oOAN8(!AGAs>7Iv|1^h+QM;k zN}HRYS)3^}k7&G+HFMd3cq+v6`AJ_Nwp_QevgKqi8-|q`ZO?(|9xzw*8w9Cssf^n} zmrkvKMAby>>I%)CiwCrx)hU`O61;;t^%*EJ=QJ9*B}Ty2pv2gkM$>}#4^R&Rizoch zMtzT|t3ipGnaQBO%e;F1EL*O4VvR;n^uiMA)u&0*b*c!|Q_NeUQ)_hU6et=3rb!pUZ)n~Q zPacC3>kb8=#Oz%QD3JzHP-3>N9n=q5mR5g$%v27tA)U2&K?yC?oQT=GW>8}GE)9cX zk>ZV@Xs2U})C@{Uyb4N$wjY!T?QKv(_82Ik&uZ6jC7`ZkE#;tumRe9^v-sPfL};f# z3C*`)Rp%;}xJ_T*c^s6O3Hc2uA#oPe62=W1solL>r+x%Vc*$N+LUSi5VRME9Z{la! z>p%&s?gn)&^X}1kt3Z8=({H^_ZPuxXPHF2kqDY*91eW8e+b2kW6aUp$WN7DI!W9`2 zmJ{NFx?HCw=+w=icH@`E-evGEp)yb1_~dW4ob}O-3w|Jd(qeQyNIiK=V)_JX~OxLV;D$w z%B>KTum_Yj)xV%j)wc1!sBPoliTMI-<9|_|fyrv^lzR~(rbzZ+K5`de!;}tO(4@gj z{7%YO`F)gBNxFN*`zX(VUYUBDLZaR7^6~jfSL}2RHuYi?{oJVk6u9u#evr<&rSsMO zdE4@)V5nQYEzg5Ll{}0@7odl_4fHfVB^eK&=*2POIXCnL)=vkYnsU*GFXjxU_BQs# zA==wJ&?a(EqzBFr!E3jW7W+9Z#whD;*!F^0UWBc5*fJzi1J)m;*wCvvk02QiMK@Zs zlsG~u@iwQ#QT^?lRKT>&9dh^&lLle1_M8cy7A{_Lz`y1HKMmPGyC&m8JsK3?6nXs(_`)QA0$B5!@J+lbu zt%Og){Oho>4;etVpd{;W7_hBOov-GLnuYd$xi{*6PSy1)JzWrfQSm=_W(dte#I?$H z)ESc0ieHLE6O|PRA%$Dtui`3=TdilAq8XVNn38~rFpk=hW~L_L{ByqhTTo+|cN}L? zqkam?$-K{W-X&;b|AQsQgWAdzJs#A^6g?h9lc8zSDp1W#txUz+jKri9oT8nh*sfKj zv!98pN6`qWI%tNbfptv4S=5==g6hF9MVf-MUT310__a(c_2{UVc*yw>)vI8Blir>P z4rX>S)g5-=^?kTOuYO5a-imS26^p;kUr3{V`%&tsRZ=?UVly2YO(Ot;6-a`<0S zt-XUK>vx>HUr)Yd&9g^0wXYw>Zy|C>{N5o4TX>1tLe{j8nt~l%DJC({`8d~bJpBTv z6+KhDHR1_oQ&TRwG|t^Qw)xK8Q-ki_hEYLfZc5NScSxgca>wHKtk%WtNF`}Jo%k3E zG4YtxFn$O2UR<@}M=+Y+riq<*@jHp%grSdLhCfLUsx}6Lp<0WSXn#otPL=c^6Vd6C z+VD%^XAAZ*MdjnanIa9tK_xp#gBF^G;fUj6;9u?jK)iNs2jD~eQlv>Z?`J9#=U*~4 z6Xy=5JUDkURe*CBQ>8c`U}_=GuQPQI&TlZa9A~O3Q#cj>|BTN+I8=%c)ha0x#pf-i zC_aan^5Fb7Qxu=WOi_G(%@oClM#3r5Jvje{DT>cKOlfI{3qG_or+h;(PI?fIa{efO zBIl1WMIEHyG3CPfQ>K!Ip?MaCMY@t5T3E*c5MiBQio*ImQ{!;{15=bz|I1XePzM{c zKe84F&hIfrq5X*|7tR(KMeV`oA723^h0}^Oq|ml!egVCR3H4S}q*R=VpMqK(-=AYD z9p_O@QS3%DmAkrj=_=R6YS+Bl4fu1bs~CSv@#)jry3mT+wNp-kS;@o~mvG&1$6!Ru3+BmX1p`96;f{&b z14AsUpf7inyNXMMfn@_^O!y+C01{vhr%%~BN{{m8b!xH@mm@c6V)bofSXEQEHc*exg1c@PflYBSpA#|pjnMMC8hkQ*bv21q4@he9<%{ZC*NXbu)yNrq z00X&SPam%~#elLe4&f@xDK0F()8)l?PAcZfx4I^Z9E!{MILTOOA$@HEpUj|u4O=rM z*Hj5#hH{9y- zqtH5Cin^Z^t~=SiwA_0M$zJ4h&LaxKAkOjfZ+xt50O>hSrJ07a8rY>I1LUCsKK z%eD9B(r2ajbJ-(%T?w%|EoE_xjeU*P&#eb+?_o;u+ zW&i3R9g>IDNH+Da9e-W;dBpY1N9j5Tn>_Gy>2@ zM_O*o%>0@~Y7(5-&jF*BmaGN->7nC&3|m4Gs;yw5C{egJ_YK^54MF+pK6nWN;RPL)|ii^Hp&2 zO`LClL!C1N^Ab3VOq^eXv)sh_8#o~oXDrOxYU0cQXNQTi0Gt<0oG>`#4MymXgVSo_ z{0y8!Iw$rczSJ4AT99q*wI`N%;lwaZiv2+IMU1(E&iFMwbFSVYk+;U`q1^mDJv5DvKiq#j79+wM&zN;Mlh=OxvbmpK85fp| zG4xsG98k_nUulika}{G&;!JwhRX$zfiqkWJF|9b$(f>vPOc-eM)wpA|(5I9s&(@C& zE{w-e{bHr}uyKAZtNluDJcep`tA#$HOtqfp$X~9B$AAS)8%&@)owfEl#BiWJ*D~h2 zh}3LQf7o!(^RXC_hLadW^%v>+c*vFiyf!ZG*D;351Rb6yKm2FBKa)pTEtH0I`2U>o zP;6Mj$0p;B)v_OF8-6FsJ-&F%6vohJlBra8ZMx^51d~ZyaYdC5K5*zRI~y(lpnpoH07***K}Aahw!NAd}``*zQbj?4G!?eY5PNejMk{IL?|l&gMAIH{v+$ah#qw&Q;Vk z<3meBPaJ2F%9*0a^l6pj(m8)pIalf&jA-~6t8+G}oNIN?Ybxhzox@!i$X%gx=2E8y z$MrfVqH-?RId7?)ujrgBs9MJ{LFbgKoEvqHqH-qdoL{M&44pHcIzBkkb3mllXRV17SX#4UwI;-R0>Rbzj;6*UJvYXDqJ1iESS>E~ z_N|UTY29RS?pHNm1U;fEdRpZ;boF(9pJqG9J;E<|uy5@B1V465z1&1^nnBRj#sVX=(Zlq7wXKW;?Y4{mq^S^)a z#P`LBgYM-}w-g6sq*$peaLrO;d_m|MRf;htDe@|-h0mbIU3Ocg=v|Q1!;m5iwY!*X zSM>-^Z0Iw9vs$RsQpNVs1A(VRuM!th26dBhFovlO;AH5WSUop`Yt|!rxg_?6s)sSe zkgh~`ne+%wte#uI6(bkwCOqn%GEIzJa3R$}it>vw#E^ak4jqCMt7j&-R!ct4)G0{2 zzbhhojJS}lgB!T;modbU8pttl2u`e?S>T%O5hDdcABGg!!x&;nnQAvpaBd{mV7@3( zqOK!vG9QnsQdH_hUH2k56n}&BTX0Cy;PipxFmWz*iF`LOS>U9ZFs0y-%?4&2IFvyK zXB#-$VV=!!gKf23t=`PN?00)4wNHs9T9;rG#w>LkI93a#2^~e&u2qIqpNp9iVa!su zgJZQ^CvHpauT1=gA$99jf=w8+)Ez8ErHqd6T>Z)WhE#(pMHsVGHaKD)fTVsfIu&gM zI`@3EsZxY7OL@StTFCe4cy;{`)*4bN69m_TKW3>MaIBV0aa*b!xdd&57SSt^gEs9vVy@Uy?^G^GBdN)g5^MWx1SnM@)$iuc@exgj-K z&3wX`rDSld7V;uGc3xI0U$XWmSqWW+@*_kss6Xk7>0_ z45@#rQiL%}6@X*4SV;uOyqwg}45=G41eY*osX}m!c)k1EH>Vm>1*#Nb%u=&iN(<|2 zV{ZSAA*HBNgfUA|{#q^MpL9HT&E_Wzsqd>&gfUA|{u+L`V%`2%45>4!6k*I#ewLyd zn2w)3y#J&jHI2G4I0$2wDh9`xaeeIj2OA8j&8ie(%u*#RMP5zEcP@JQgdx?cN)g5^ zRSJ&PGKEBNl)W=Crlbs~E&&e0n5E`|V|dh0=Uw)o5mtpNMHsWxJeKm{Ovk03lV~xA zhzsc%Rf;fzM{^z8AvphI;>6C_mjP(Cm}`Aav+Y`;g)nA&%2~=LZcDe{5PVq+8@076 zMHsVGg-L4tOMi|UQd3kZ!kDGzvy^7xcOTjExFL0$Dn%Hx)B=;#gwu;r5o+-&SEUGJ zmRe|%di(eE4r@(nwJJpzv(%j?sru{6D-EeFsuW?&Qg@l8%8oAoogwviR zVa!s?O;Q`D^nTlr+OJ9xW{7kISJ~NtJWn7qPxi>O{r-Z&l2Xr|*)x`6%wD}>Emrok zXRKJ8J!1)N_Q;-58xG+V#C2`hqlxC0cnb3h3UmFrb3E7=kUbNa;EJ`?*)!^DmWHa< zE?W&H!P>g)8LL;Ut;x>F$_N>%rMGHq_OwU6wtgenm9| zDYTmEWuWRqHR}vXucy?XGkZ>MiR@VbTeD|W*VfdFz?WC82OK6ZsTcC08(y(GRJgVr=F;|#^I`JBq1s?DA)>gpZVh$>g=!N8Q5s&mG{0&? zLbJ>6LuRi@cDFdZW=Tz5vb$bv{z!U{_8t}0tX&pbPLPB~=Y^NloIlwJaefQSmRGH- zDX&_xx+YP~b5|^@t4bQXinUdgEyIAy8r+MzoDa~0}=(!8UGYc0B z)vG`tP#>xeglg*6aJiPUgLO4Efi*R2JSvJrR;&d8d$$5hSJzb4d9anLtlZ<7nfCG%84RfzCXc2#vXLjzSogfs{N z8bAl?YT$({*4HG$4=^g9LP2e_p{lNW5b%XSufaAVjzU%9C=3XJL=vUbwD^RYW=biF zJ4ZVZT3)j@K*0(NrzJ@;Lp*W9C6yCtZAyg!SS?Ok5ELnFx2daIs^;P#@S$~eNQYoR zOAO&ix%qcNS9WH3ZplJU5zqWW)R^<~J)TU;8{U-VQSau;UJ5z;PWWI>&V0cIk?G0F z#fk8Ffs%@HIGh}~ziQn&_>6GZ0iH;>+@g})&jDpmRbjegdnkM~XKT^iEekBE-RKbr zn4T+VYbLRgnG0l!1xkYl$!Ag|qlzYDO^Q_b05!x-WTlo9q$YbRqs&I$=b2kpN(sTH z6&Euwb6&{;-K6r80AG5&akdE908`LDSFK)(NXNup)3;DWxvV^=yi5d8P#{c;VG#yi z?J-yj1!_%A)mojKD;E2n zs)*&r0BsZ_gq~f<9&(0axFCv_C=JM31_rRpEUc zCuN7Iil;4Vo*0-ck{@*AnNy;|ASb4xPBdm3pLe&b?6v|{tp_~ z)zqvCRE0z#r!tv1>0^`6Tua0>K*CSC9-^v@t``LLEGP*}+C!k-L!E6BWG+sy{&yyrB9AbSW;(z$`AwFNoSiX?Bh+F>S5jP7KCdFLoac!Hxp#t7dS^l?lok4l8HWjcvn~Wvn1h*Snb)V{Zs+FY^JKJG zY%q%!m6Vkyy;)dPB>QrT0={`U`Gs;ZCbG@K3+9y+`vMDiG01!e^L1;g)@k!)nD5V; zpI;ls>^iS^#?GAQV0lDrS;+UuCB?->xrK8)xnh3;*3!LLT%T9FA$x|Pv$AL4y%gCq zVqQ$4FXrdZ#-4`~UtZpv($81GudRR{dT)iUA#b+F=PmI2X8Sz3*;!iXI+Z;O|7IBP zufV6YXcdh$!Wxj6+`(NbT0p$4a~LS)a#G;L^^ zR$4Nr#8*&M>dBrl)pQ5Z!uBC~PJSV7#lC_A$)grW>;uBGh<=rsJ+q$DTDNCfv9~Zk zUoP-N!!)z<5=1w5PC*HUB34UOOINA6KZA2_M!o6*>Lr5EwZkdB1z6)KE-vu!i#o8^ z2*%LnAiS#s#kWutVOS&xY|Y7@PH|a>?ME?gkni*4&6!=8>zz{^t0-0j*F+>Qq*1>K zrNXR?{GymxV^>k$oZLAjMTL~8^i~kVp>(6Lp^0AmfiPxg-)u@6IoFe4S}5mubK|0g z_kVD(dc<_I5=AS|@9`CvmdK?=IUcG*k!|#D4=puj@Cu^X5Jshg5{VSYD%aB*?pf&d zmFD;gN`kEK2OJtdD=2Ol*E5-6TrZgwb5t4pYLiBTUz3bKV`|Nknd&JRgTFcU zh~W!ERBZ-7I5n|7!DRTQu?A^+rh~cEIP`P^pKj?#3_hX$>6z0QYv6>qaXmAb6(gzh zrw)*tT4mNVEtBom@wY6^nvN(+BW{{8?G{(eG4- zoh9xWQDk{Xx-x%FRqanDsoaV^k~m^t;X>E{z;DY{M8zBk5?+=;`?&eof%AP6 z)C={GM@r3&-55@6+WS8GY89aV@uX&Y2I5H7&4a*Q0^Gtu;I0R5?I3X2r!Vaoh?C;& z!wzIAoPkr!ktiO7YaRrSAYU5ZZ8U&8g@7IZNA?(h`5D(e|BGE%W{}_OCrIy|k z`_d4?x$v8g%qyo1#9_fN5pFYXEC%Ke*D#D9;WBU=1rujHZ6Mu*t=qHlqr-}yfivvm z_h$ohP~FO#V#1mA+41bu)#~$8$@EcFb5smSJ`#oN#+{l$;Ak83Gr*;ggW(v8pP|pN zk6dadFn6msn+a#c7yGNFW?(K=pGGp{41H69%LZnhiZh36=z9{l?*Vg*`cz4>bomQ# z6~Nqf0|*?+!li7j24-7AoDuF=;C`lJNFNn;qO5nrl;nt^#v z#hL9h^xX{HL12d9VJte#@ip|3|G9v1C&Zcc-3iR232|n9KL(~NAx3U2$@GPAuN;^z6{qKKg804<%qJ?2(j`%R zb1ASad;u9hI)>oK{+B@Cd|-kqE}1^My$+{mV{pmz{TP^E#NZOycO3dUNgp1DpkoYv ziOPoz{(>2JM?ZdajKI&p8U8}`8a;*Vrh;^$Y^{9B}7= zduFE4H4J|YeP;XK2WHqTflFpz6t`~z=2aC(EITDpU*uabkT5 z{5c5RdKH_@pYtK#1kC;zTrz!c0`vPATq1vNg}&3kyugkqUPqNIzNdg0O3z8-NEYAA zaqk9Td@4>azXSY~`muKdQ%Vko!(2X$d@IJiUBC>vgJA>ObHlINaeF#2XH{G>`*t8< z$D@s9Uhni+Te;I?VO15swz! z`;CfWAWnup14s4bT|Sg`{OCw#-=`=LJAwHRYDjQU7r@YGr1L}IubPXuM&n0^6F&oI zgu4L=`|vzT`fNVK_~Cv7XXvA@TE_xO`Wt?9B+Cywk49vGxTrz$40r#qk5gHT6m(pbhJ%t%_ zBuW=D|C_*lqGFS!O9O6Pc@MrwLW*%DOP2!Nn_7c0D}Hn&%MWUvUs5p)#EI=oP@kR# zu2031UnQ#lE(U){P}3y-CW`NBl%q?5YhEKTRL>>Cjf3G2!)czSjuDPg_$9)S{4v5c{O>C8uWZCv1wT5H<=aT; zTLw(sW`Rpqua)EW!UrYkMf~V6x0gowt;fA{z|=M~Ow!AFf_%FVm`DsRQNEGB$AL-N z^7;BwfpNv)lIgo1n5ScKoPG)HdmfnGF}Otf=D@5rU>q&NK2#4e`C+6>9r1zrx{9-z zaOQmbFJRtHh%@w&zgQo_i(v4h<9z9SD=@QTaEan^4|J3RvrENUah)t(4g>SvAoTSB zQ}i$t;W(eZmB8Gu;wT=;?Arp&sX^!)vK9Sx{OCxgk5YUbFi*tbjB;e8^D^MRtzt+Y z9m&#VXauhb!;g++;ogKB?CsDW~aN`AFe)hP)Wteb=zg!LeKG?+E)DN(ET9hHF(5-0KYp`3|;dv zB-8ZDFXGX()o*~aJj)12+UWWCsguup=ph&z|^QXE3OmiBm0_x*{kA` z*+=321(>lffWVO~z8Sc8t%_kFPKm-L+?+w+DBN1$zV$ib67DC!y!$yg3iod+1|%Pe z>?3_+{{#Ii{OCv)U&56Ev*~kilpl`+)A>0#%8z$}x%7u1a3sq&(l-N`6)Nt0_B8vUn`Vy#>JRRdLDu zk8pnhrsT(@Eyli>SK|?%@^=F;-%@eIaqW>ZTL-R#rGfts6$6qFjz^tY;Z?XZ{Qs!{ z^-m()#khC2g3^$h}d8T46x zf>X?qD4iX+e>rg1s94>v2IL!!oAL*tk8leHfunYLWl~%Qb^rMwzxpb0kE&R`T#{QE zFli}p&jOROQ^-;Oz?14x{nP-`{AnsME)z~$H#KmSAJ+qurQ-B(Ib96gIN*H1EFA=H z12B&d#0`iCm5=9v=~8hb9$I-b!c7J4Ffi|#aq9ZCfg1{34=^7l#NnoTP(ATa6{GPI z`3vFt2Z^)(RMRB>CemletzmIEj~Wj{o^Z}V;w~K|Zu}r|*A5bQ(;#q^ez(NoH2*W= zOE~u+aH+s$$Kguj(vNT@gTw_A;IK90CfWg8==B$t`E$zi3T~Yc@R#KUup9RFsk1UO zCnUJ9y>cdyFXvYH0!8=$Skdi?kn`|l{)#m_Nnk-?z8s)Wdlh;M<#}Zs zcB~?Q*?b5L&|XrMU!3EY%O zRcor&u2{Vyyr{qzD9M`_$gf#btI~_`k{pV`B6`)t8hj<~#@Zz-@k-a*MqAJ%4dYiK zzl8ZmsyFGcf5p7*OrvH)~xRa?yLW z@bM|UR?Afz#HX+DiL20k>uMxycf?)s1}#^Wi{1p}T5_LDe|uI)MF@r~RLhWhNq-#{ zu_jg5T&KSVi?ys>;?lbc@YOK&g=_fWSshY&ZH=V8R?Wq4Rddlx)kv0J zsfO>M)vUXUKIM#WiOyH>omPjE>D-%ZbM7s+O>PTMz+XGA?Vv9KodP-q^a#-S<&K!# zwz#q#;{9R$OQX?Jd&^;bz}TOv43CVUuPl#1dcTgwg}-e*@H@(mMBh=4)bvLDr{uVc@Te)z*5svkF2vd{jd?E~x8bJN@2vqma<6x$_kYuKh_b*CtyOKi%`?%t3C zUl?{b+C#VC^S~b~R{Cl$zRJvBK~`q=Z?G*m4U42#$}1`^Rt`;`V{87@Qa_1$sZu}n z1tla#B(uX~lj6U->yY~MY>@>vCD#^7RoqH;q`{#KLzq`7CANq~DX>MRD#fFoe3VQ1H!f2_OD;cZQrQ8XS*} zz6Jg|;y`@^ww`R92^%d5Z45*6>8R`wU)^0PtrSB1d5Rq95FZVmgdSK5*Eq*Hd!B}J z2lJie_%@gitnkoulQaB6(<-(^Xjb}DD_ZJGB3dwwUc>* zax7ALnmn_fG7%ai#m*ja_K)NUWx^30|q>z^aO zwu{W6k8&sVAvL!zkIC&(2t~;s&3R3K-uMEU-NTt}Pn6l-0h#?fB*yKW1J~m$GIl;F zk+A_#Uoc}k;xksMaG(ZA=PD(f${(;F6|pzB+L}MGgnLDWp~$IO2k3juS%()W4fe@r zn>(y+e;wj(a5#M*;=9>nC-*^csNxtFvFAe6{Z9CA0U>IxLFUf?F6D35FH58H$JOMw z5D-hJef1SZp$%vwHIjC=OK;uCrEgJUu3*uw> zX{4byy1~{t43a3|D<$R4NVrGDvC~VTi3mng)D-CS(FjcH^ic;5e<*I!O1tt_2R=|v zYMQb|)zTT0A^}R0c1pNA^qdw6QUso;)@i-#EiD4s)XP#3c$D{|1Xv zEpeEst3iq6nFQ)p4)z96dh*~4^ijDF-eX^&e5$-zDw3enXYb$CzX`FlG+CMuOL3J( zS0Y~aNC{$#+H~`>bm(i1_#B-+PN)uF2nkXOCjJzNKNLUJMc#~Tun83<=~-P$=jK1+ zd%oFIOVT-Y_SyIw1}oWk>S#R3)P0~al9wOx zfl&ZkiIz_jE%)Gq_HvK&u2y`_UOq_|r%%WywQG=U?Xf^AK4hLZ$$59{N6yi{v`!yI z8!=?>@ASFERfhO8iT)_Qbk$qjzHwoDw1nQx40cI+G{+M0r7J#HWZYK8>>+nksj+dX zp$~M&HZCCu|DF@!HBkS-6v|3-Te{gZjwket=NV5%3xA*)mcn*Q`$NK zhNbYuPuMGOiA3># zTpgiiPP)@5CD*WdMzt{+w?$KKiEL_aE9bI6K6a2*f#5}a`l}u9;Lb4W zshhJjQR^pi^-cAU>dphRTCdi}vpM8RBCoFj^`C48)wv?q-8#i;4Cm~N^8!dFbk4^( znDaPi!ZMom$*fx%uXK+0pklHsww)-dBUh@uS`@ zt#@!#{h&lP-mOyuq8i_zCyOe5R5gV^1}QR_8mSUT%Yo2!iZ5+)+e%wo-;mO|tX^%B zoA;w3ifxq@)cp1cB5jL!Y-reEl;ke4g)W`%94{$Tg)q99%A4*Dw(wsUuXL=mU|_>K zp)Al&1@B>wS~;lOnOdduK=21#=`X4$iU_;jFo|p(rlcb1VH`5Ij_ylCm(344$LFJZ zoiBNT!k6Qg<(tPDZWfYQTlH$c6)08ya zS)-H@eVI-#r^4d)OQ6J1o24q%qCs7VMCD|`cL`|jCN3vdwAd5tI4bWp@F-b0UMg=U zc*t54Z#sDB3JPAdIFs>8qphVsbR~-^O77~`(Vy`19QIeM!iPS0#c)6w1tAA^$0;x zr&>@Gb?O#SqRqSw)O;?hIiLpHW^x`4%o(lWJi{qvZa76AOhOPMZS@#_UK3izwtbN% z^t`s6PGDOV^ZpOEm40E{;L}KgIG@&1?(YMvqv6&@@X~~Y(d5LZ8c;DlVDyLXVjE3O zj#6mHurzAhO#M|frUS3djcdX_`iJPCf6_iAl*5VLzy4gb@!U$A=o^00ZV8Q5oKZ)V zO8i{CtS9a->qFDi081o0Qd2~o%-C^hU~xITZwPFG;&qMa* zO;_?3swJO0GKBIpy3!tL=krzOTNs9lo_y1@>z9JDtvMh&gQBR@2Qn}C0Q{KbTFG%6d z)^pjE!6o^pn6rvaYu`BZd8cy#gB_kCy)iw}uLLl~rnE;YQ~!%FsN;SL>KovtNP9uu%6CtLlG?N0#hl_R z9MeBKA8SAR?#QEvX}cQJ_EO9sYq7NtuIi(@Ls;SgC5pEU>RFBtb*l6}Lvs(NJ5y1H zly!FHm{Mws%Dprpi3zz{xj?r-VOt z=65tTII#NAt2Fc}Wp-!&r_P_e9g)vP{PsvgU!=m}err>nyLZ#n=xx*5{xXE7Ip>U9 zY2h5Rs*@A)Id5~P&E4DhM`$EHemf>+t!4Hc(n2a4f1x%j4vC^FicX$RZ3FdNPU^3L zx{s3@KHS`sLGk=l3p5^)N|C?ZaGkLr|9L8sIy zbADsW>v*T!OPpY*+=CVS(Y~1-^2gFg&PEx_Ssw?T@AxolRtnRg#1Ziobzp+;%xsj5 z4qu^#FK(w|;;}_bW=4FOtX2^b8Y?1%suq#Knu5pHJtV7DDanlZrUx-=A9VX%&PPA{ ztiK;uc3h2fKGG|$QgAiF`RIG%Y6PyXbUtzfS52FyNTC_ZhJ{gICTD-NMAUDy!snbV zKhqFn`@`o1qOVj#C_Ys3RM^@(eOgoE1bxqkf?Lwon9BQJG~j=&m=;1dZ&o1g>?0uPxj~EpB=SD ziHEUlOKT&od0`ZHJ*FF5dA4yO%{a>EI870p|D1kjaTo3smj)H@sA%z`V8lDqx!XGe ze{aR_Hnfr6auJqC{K*%8*3loev7jal1Ghq3M}Ep`$ zyt!A`+*6*YvBR7>rKtZI=4HLBw!m0NYx%^v{dJ^`f`Zm?vhCy$lrg1~raq+RUTfB2=gXP1{JqZY zkAopb{50;%dnD(1)ecV=VbX*fwhfqNLX1bR^*-n_aWRNerL>` z>F$r#50Bcy@V@@;ap8$dMenSNLk(Yna#b@Bj-Yj4r+f(4 z6w`?R6r$=r=G;yLS4xe_lhNBAwEi<{+h=W$G#t!Bon!qSW?P!iBHG!r!iVbbLZmN> z=6$Bew@{ILDZUP+UFXekpEY87dH5Q{&@J~gT&c*XHO%_aT0D1h{wV%aO2zSh=3~{$L=ne72eZO*_p@79o@Bxe~XWdf-CIk~O{71Kc(r&yFy zw6=4(wVjLB_Ax5^)V6A^ZI9O4_EKxx19`Nz+{7ZMPj$+D#6fHOF}1ciXl>7NYx^;J zEog0X3L-hBN{*)^r<6L8!y-9F)M9ny6k6yn8X;}PE+yg{r+Cp7a5?vSQ_urS5$=nT zv(H`{^*O-u4xy8}27{GfjPGbRr-ReY=;_CGsyFw%3Rr^4omrmlKfqxz7@sfN~c4 zN^_qzl-}Hz5*pjwH!L)&xz8RN-rP6T*>WEXVC8R*;>F6}tF+kns=Cs5nlAR7kWXvZ zAVtZpIFf}HIF$xRQq}?V?vGXWv>a}%0k5(L<#8h2P{PL*+ji%qcIScvA2}C!Qa^$o zXE_S?T@b#jE9kt5=GUb4BmeGP#FVrAAW{(b_TgUJ`jJW-$~}6fj&3XJfE@Sh5BxtR z+-pF%+HpQ)L9VTw!j|z^W7mA8iz;bhtN)0C#CDK7x!-cOv?Iip{_w)A13Yd~_UR)R zG3~ANar=A(-Hr(qgSRH1RSs$Ct=LAPUl7STM|%zaj{ODw;o}@iq~Z8pDmmSYqqb~! zU&B2RUxc26(#N4Vi~a|LrOtstRUBb^De2NFtggwuNkc&6N8MLHi!>Zn+R)KHqWF(T zrf)v83n7D4rf*if<7Ro&!-1C8aA~p_W*wjy9>VUXS;gs%PQ~j|&^5Mg%W)T{Kk#Ay zdY4EyxrdDNy3ljun2ofyMvK$cqEyTaw%&9ShA&Uwir}N(R2l~LPv5L6aL_!H|2X<) z#aJXhpx8FUKRjuawL?*h7oP&o*C}&#Lbc8#sCBk#waz0{>qIQm4sWe^jN{up z3-wJcLgD)6u(M?;6+H*1D7*4b#qWq@VpKmLsXLVU&fVy;dMRrfE_d#pk8JS{q5f-E z<47VWcd32Y{_xHnBGH4_r3A0@4hdQyW$~u0w5+s1o4Q3J-0D8-Z22$57^Qe#G9M=o z?`!#_al8`l!k&zZ*2!minQuV(ZS4rofMESk*^U5#B*nv>4pisIfl(_P% zhk%lSzJH`)Kbhw5!u)H+PH!aK8cEw6<@^$E8E)EE0k?icVIH#V%vKEDqET`$fnZ-z z*oPGMx-;*ixG4TzD2S*NcA*qIA6ZH)uU+9*i7R)6{%VxHooe-0oeQ|~#7J=u4W(YC z;eo23$^n%&qimo#xp6tUs+c3f&6M-(Um)4o(&O)eSv_tP+((Kqb)x$@&CM>Iiax*2YY#_HO$r*2AvC zW)h%AGHT_N1)xW05~3dRx_ck^b<{5gI`|8O@Lbc(5>57s2|$|AOp$00mFO0Zg|Cav zCN5C3QK_Uzvp|(HRRt=CDcY5j&(t%ZW-#?*P`BZiChf)f2Tc79XE6aa5g~b)M~e!A z_pr`;Tj!nCd1=u40!vUgv4W|kp!`g|14?Wr`wJ+sKV%3h@z?k+jk$#_9#HF;w;dE& zmL|OfN?7n`P{OLq(MuLQA1J|F11i80kAf26o&ZIi(-i4%pq}NsR;;E83ml-tbljDo z#B|(^pwvk)P+w<>T2Nvk;XzO|wn~$>>(nk#Vt+=fj(Z2x&lvZfP9cN2tGjZFBJUEd z7Tlm6z9f3W+!PEXS2`4VrvYaF`J8n{tt-8a8j^&)>0NA@6MiIObp@!OGw&KuBF;2v z`3vUJvZ27qpv3ax9G#l0QwwyeQm2;c)J9OE$KC*{4t|p&JqYR~hmoXPn`qtw^Nvyf zBN47RL=(yT-dYwSwzT!FqlKC{w4T(uAplU+hzW{XHKIg0#Jr$?r`8+BsDGDYLB%pw zNsm+>ja2Swc^AE5D{3jUOYaI+r%b(V?hWrpyVMHEFibgPScrD1joYOzs@Az#dJvB1 zK8kKInx*xil{|aYe;SkB7=qBQTDeD<(ePJMIVs`O7~DJec9uru7ipR_@)Fg2k*6tY zk%m;&=npW75{-Jmn;VVh(=GYnT!p;{Lx^_aELp8WX9U}(<&)^AVeBL1kG8z)+){>A zS4IYv!V$r?Gs8b=vp8FRhj>NhLzt>%Tu_k@Id{JqboVw`ox8hmiP1w((0yprQ0MM_ z7zOXfOwgx_|AQTq`*8Cx^=oz?(6H}dv#<%f!@2jv$-OQ8jTuq-G-f;waUfe-Y3}57 z&@CUq98>2vC+}1G-tM=ag~E57d;N!ZSlfu#rN}Q@<%1yK{`BoWw9^+iW9~RK)Ez$F zkP@l1N5aQ3e!mP8Jg9cTJ=I`W{uv3MiZq-=nqqMV3EOZowgsR>X!$4FF|3XvTFCX= zS}?hi8k!Px|Gi-}q7`(1N+wNiLqvHl)PD-r%#x2cTn(8Hd90=TDokWBkq$}F-43YA zLeG!}2LzEY$wH~U7fI_r>fEv$e-YFK3d5<$2%`^EW_`}xofN_jtBhzkqcr=hgpXpQ z>UwR1i!F+M+I>;%tZz8D9JeL0k#C-u804gcTWK4EMk;gDF?BOS!AxZ+Mak^O3RTu8 z;LLFE3y+Q50`Bn0Om|Lt_`2?l$gSO1E0??5Ll-f7ypoe1nc0nt$gNJfH*!n&kVtmq zzVxPsvFK<$L8i%M+B&mo@J?9w`KBSY?f(Mnv{@CUa?dtQJj(kO|4tOxGhwvus4O^v zOl_*Vkb^csO697EszA}G-V5qCTq)7;p9)HvbPdj8Bu>qWSU3oR`X%3`*_9`m`UvN8 zrdC0#xO*8&zG&QNrk12qq&q-SM>S0<07dU(cn8P@+C|fw!I$VInBKK86d!BVu=-Rkn`;Kr{tZVQYOA z+WX&fAe@47dI+wM-SDlUArX7DfTqZYME*bat^_{H>e_!pLI@B^z^JIGL8F3f37cTl z%uF%~flLyzunCMqG9d%WB+dfF8bpK2FhprfTiRz^Y-vkds`N<}E3E+$s70lU7Oe{^ zZ9#Z_)VknO^Zw`DZ=G+FjF!0kUhXgR<<9y3=iL3=?c6(qmEnuX1#n_ftOC16dC8F( z!)TrSU#Wj<-*xPgw^QdNK7kOV$S!=tL>m)w-!6KozM)mOf2A(mpE_>fvVz+_kPz)a z-(9aKoEUK12T1QFfj$X;m_0M{M^WNmOPrb;yf|`e;w&7Ji2N}!c~)Bi)>|B>g^J60 zKlJy7E?#uI1fe>S#TY-SzFPRi2I`&g{e^RlBEKI)TbS{`A4<#FzbvVPGEGW-z?p{V zq@iaUkBr-LNl<)GiF*1M-*F)0ZvlFSxN)rCPWxcsw2Q@(@}QUz{d< z*Qm5Y)kj;1;_VIaU8ly6GZ#BnP=a~s2_2*IQm|){voA30Hsnx8?y`Y(fXgR;X1C3d zOEE7IUTnEh$CQ^wyLGcW0x4=)NYNLQte4F)|~0)RW<=v|S(c z!O}@9t+R}J;SoyKt`GY}c8%JNbn4UBmUs>J6T^`yIxA2adlh$Gz| zwqV@}r&QiMQ5gxPwP(dDQ8O@^WFnf;6B|N1dLH#hA2F`^w})XHKlf zWJapMJ0NF&a8NiK+w{OC?8b7!+c?GMJkpl328}6xn|)lDXV(IO<*4y0xC{^nBPqm6ccfH+TfIH8tT|x;Q~B=7{(IJ_2!&TZFzOz-YY-2>)4!y128G8y5V8!k@_)1p>dcxFm? zW@30|GA*G;Y$;)TB0bZvZ;gKGl5ih*W`)ZVBiZoK$-|^jpYXZB^O`&Mx(Sg8z^djn zDVRtiS2Yio00_Pso|&!~(kTI--ASkv48l8~1D+Mhju{dpM~87#7Y6mfp=7Mn?xIj> z^F9|H4zF=zC-XY)ZZ2<|c3IB;HPHJQ$)`ll3s)UGkvsvDA53Aemn*g&Hqm73`#jm& z%oDA4^g+t{9}T0H+$h&oEGizt(!1P3M7yB&LLDL5W;jlvh|Y=(#Wb#eWMJ5ta-u(N z9@9RP)HdtdaMczppgOij2811l(T2_Ck{xE$xz+ZRJRz^Y@`nBQrvnhSHij_Mf)WzZ01e z=V4l4$8py!c$Mdkb(t zuYg)2{!J7Ais_%6^C^-2P}t&23C`&03RXU>S0YZbaS5l$C5&7|J>?QUX(-_oD&drF zN*DtZF5w8xo1JNBdRWTH4NncX91FJ`JwaRkIL7BVLTxHM1q%+y(Ed2&je2u5JcSl* zT8@Yqhc>LO+8l9gihve+`S{he2piqU^BK%@qIwrvWfw~78TeXJ%3=#!(CCQ8ZA_z% zb~F1ffCMpJx)_>4;BFut!EZOfcRTy;gOBPE)X&`a%{@E-b~&@ou6gj)`UtKLBm)fcuXq#2&D(BAg} zEazf}c?^P(Fce8$eQ94PpQ`<0|N9(#X`7xNc5bBZ@m_g_F^e1GCZ&7aEV@Uu%}x6p zG)CeT#;xcWwiY0+uH~~i~!%W4#ZL(*+XE(DEuwjlA|p^ z-hETH0G+49ZMWbBdMX+)Iacu&phDf}Sfzx&2H~&f{%jYv;3)h%EaU&OX2CjyPuu)- z_7!9GEf+$;?cQ}f4Mw50IlES-M0Stb zi#0WW{hq zhy##&5Ni}qLGZH>Oojwcrrx<18QGElPS%SQ}Y1`3^Q#v~iw@s@6xLl-3#dk*(DwT) ziJCfMHxvOB!fvV@w(q|G*dAbTJ&8z3*s&q!u0+c4wsi=;!*THVYWznywK*@gd~?@Z zX}kV`O8mmgH6jMBL>^o_HT3Grff2{6qZ}{EYs!eqoM#arnUJQA+r7*NO%fq>dTzwI zGiO?25GMsgBc?ibgf5%n+!I0vyOCd?A8~HVNrtNb15~}^UZ{HKmSAG5<5-_nEge$O z6LGF5W%t-eki8E{qf_&W37nHw-%=lY@5Kd2F@XnQF9L@#jN_=H89PF<4a9=euv&Gz zN~YY8m(7}8hcqgK%S;sTg41ozjmL->32jTW!pp=xdT{d6`MYi>mKDYK|-yMHh$;zLYP~Mym3-_O(uxPR_ zl~tt9+cgV;a`x#0bYRdoRBS6OIGD5JC<1928yz&AiBN-1L#QhUx)yG;$V+Fgh2z_0 zZxw=im3#Pm;CqFAKZ0*A^iaCAPo*7Hac`<`Cjyg$QA(0@E;;})R>`7nfoY}iiE+;P z=!F_s-t+JY$zYOZFzp=p-r;a*UzIGX)1|B66Y{QyPsp1IpV(nt3!jkkWB6znI7!+9 zpWyv7d>=CHb@=|xJ_~x~LXK5B_0Q}(A3ni>iRNu5sWH)cTxT+wjI?YHJNHokw4eJ- zF~T^YjxY|=2;%@aFl?Zl!N0@wZ?EHJ8crM{!WKbaL;sG^gXUpBMFy;TY#l`+^^Wi2 zi>#ii4)C1moqdiY1XZo?PtrHcLq)%Tn7YB|EfwSc5IH<+4Yv9nWEQIR{m)S5SJ9>) zY~L``roJCDMCTS9*Fajf;t~2dynrryIUC20t1zV62Fa;3qS}69;Dl!dDZF4i&5kkU zaqPhBe$biNhD6Yh@Ccxt`~R1biRc2j3&s}XQ}oqwObh|+$aJiyg`I0C*maSqm`|tC z?M>@>V%-lq>_iGptk=tfI127w1h*0I`$hKQ3kCOG4sMeeZ@f*F?X=j>{2Tm{<%yBm zI1KQ1Cp!EvbogKBb*FtZ^gng&Z+F$TcfpRD5?QdB6uKJ@#V)^+Mnpf+?VMf9iOp8v-vZglE*$=tC!J>F=f zSWs`?MJ$%(i5PU!qeC;JPlqO+Psxam#IpXdC_gRh?={>k)>dtbU})O1KH^-X)aK*; zG0P()YFHbO$mMpDhP}V=w`c$v4y~e-0z)HDM)qn0y#A5Bqjsl0EO+2INC3m4Cu0um zu=|O^e*uMW5RfSZw9~k*3wA2}7B2jmo%ZGvsY)1o^Wkc5eo9VI=ws2Fw=Ct1@ldGe zL>#wA+EyZw#=&TGk3Ff)xreh5JK5--w{Z8Ifh7@i&*zKoc`J3#JAwlvp^sbl_Cf2X zvC+p^MPWWb*H*Ph96ObK591J&bIb7yF(sxx154(|Y9ly>vFlj>EtZfCuzRRe!`cwi z_IQNmE!^F`K;urTs;MJ(q2|I)b=<*aNqZBA_BnAb{C`@O0>9cYg&k+rvEvt^`!*;(=)Hg8Krl2PraHkgQgw-|{}3u%n{;iT zV9K?Y&`3=7r#g)ZR z8(d`hlqglB&CKUMX(fDx>}!Wl^hsn&Df+3q;S;oTvNVHjE;koz!F!iS-R4=J-gxx1lh=F4nX0&~k0%=swKF}FX_XPbr0EYCuMQ8QZG zQ8U^cN6I1?{0x@&vQi&T!%-esJN}8z^pwHcaRpmDK7%>dGqR=Q#=#6AV>~rqXT=BUcTFy^S6#bF*Y zPaVPG{Uwyq=2%xIcBB-WfVB(6D%6HZ)w&bUwO)@AK?KRfdM1aSIiWqLf9i&IH0~}I zYH8TJoi?euT&OiI)7DXjwv{Ae<&Jz@?Uy9ak{9yiRse$`p(lirptaV}mg5fz!xdU= zxZ^$WMrfdf5k)nc5te|mc?rm|ABv~yQ0THH7DY+bMy8Ry&p_Dw1p7bI@jiO8;nOfv z+7lU!Mt(U`Tb`&S7sUa=YR#0FYfg+I`$*?OEECabC76$5fqD;MVu6~zh7Rm?9O4D) zLs+0bjC4P*+-QPkL<1`xwaLjJiu6)YoL-rh4jP6pg4R}&rq7Zk!_-@;lvF`g!6pUa zM$pn0oH~9u)@ma32!-B(u=Lk;Jph`pH~a`balqwqU~2G5=Zo5erYJ^y$euDux&glF z{B{X^Vzn*=pTPYVzJ>gD2Abqz=9mYc;BculpGs?iuZTJBfKSL<51-IRoGk`>zb=*( zAw@RNqrt5()T4=v@R5mwSW?V{&xeR6Nh9G?4L+i`=<{Rl^k8_7y`F8{@U_J(oM+gf zEM}3poH#tPLp7JfxYof2bFfuIzXD5tMZ@VW=Xg}R5iwI%wbsEe4v$QTh{GeJ=J7aY}b5UWJ>GWa`Sy6}vs zpKI@$16@q^ZLKRarQo?r#8$V51`s9nj&C9FsoSGvxmb$kkUXK0y9VqCA>z)%q-YLA zLWe|yJ4g)L@k@5Jg1# z_{9I9ZBC4 zc^WC-rKFta_#BHRH!3kprm@bk4#&w=kMYt&a4;+uDp>C@65HFVEm=rsONJvLE-Y;+ zT<5^huNn_9`!$pO4jd>_?_WE(|Z&1WyW?eSRbsDr^t zj`Y-r7s90H5Dp?g+)k%GF#ef^&$1!WrApsUxq|*M$EYrn&vFBZE&=Ufz(cUb4KpmwVfDR-oN7!#PVSs(DV|FsGwqWfOS&rI3THeTmSxv zoOhX))cj8n>%L*?T zC-}tHap2 zJ_meaKvD^x7?6A)K04!@B+&t~KeO-Wc%ES2{dgW=--CEMSjz9=6GM}O@GWE7Vfcg& zu^_%;jIqRO*d|raJ`9UEHi&sQ3S1u8C_|dHw8_|xpol_dz zF>yynd17JC^|$1k<1Tln}` zJgppY`W~PMJFy{4Cr0>6q%T*rwthLI^$14`GxC|UmSl(qM#dNzzJ)%HJPivMwT$?H zNI^244uORQuH6_CE*KVu{wk1f``yd8X(Xd4MEkMA=iy>9P55IDieJRNofB40pt~wz z)O_tWtfA8BFDN7`U5*EN;hL98F>p>PiPBWQY z&J8wo+5sOVCpRg6WdY_hAx^q6-HAqQnt{2{`jB&r^FL!WLsxT zJduo-{cvp>ZV5;MDRMPk+ZxV_q~gnL01Q7Lkm3qwExduw3V09?VJ;f^)2zsNzAtsS zHUv3WZr66!v-|9NG8^o6M#cCDE{ zcpoQtpPib#^f)~h(}Nv#y!cU6B@0?l4&!SRj-s9P!Hwmx6rej3c=|}QSe`zf!hj0X z$CL8)5j2H7jVa_i$`tZ64Mg5$bCHkPcH&6{!BavS&c6c#cai?O>&V218xU+SjhRa%9?KpVkYXDzND$E9AOlaZ>U$H$=47T3b3@GpAa z%e87V1ii$HhL%|9yi1Zq$De3kBJMJyQA3jSXO(sez9URagan$kBuPWy6C(?g9&SBZ z6H67-@_7}m``Su_-)(#XiZ9mMj^#1FSZfFE8*WEfScu{oB8(m7VenoUAz|xqCpvTt zOOJu$tjH9o^8RFpO6H3l@+BcKehWL-(^A3)UIO6|HYy?9OCf9&A>2#*7V`tlg5@4XjBeYhQvJ?? zduJ%-5lS;{a9Y5W_F7wf-dh(k6Yn38YI zxpO}TSgCElK|CXUbhfDugvvQ3+da}s#5P=;Ln{$mVX=U=2HVtaXnBt9dmTG@I=)lN zakOJH{yWjoT62)woav!qVWekkI3aSHY-W|~JDl5(UyFJ~KM#|P9KR^s4@QMKIid4q zELS_E|M8+2>Y~3?!d4+I*~Jx$lXXJHlt1XZBl6w2?$S*`j zj>`JTLCnoU8L$d>t`85U=vUo~J6FP0vZ(~pP|nM@_rlH`yRGfPOqhtHHaTd@iM$*y zb7}ZX8NUH`=q;OY>M`P24-UuXRW0{PsgB*42t&9QgYC!P#!7{;hJ=ocZ$~X$$an|op=xi7kJGE5^1YeAV)AamhDUw zEyOPsMI>~UqNrY6kPg+e0DDA#fv$pHn){rhn;@s^@GFkPuMErNd?g(SuuyO>E>M2> z!32Sddu7343V_-V&D4*+fGPj4CGYY~qHs2@PvA8rFTfhQ+!j zG#Gc7p9({*V96u-_)!V~Y6^E61c!u^!lC4x3HS}BgvhDmf8bZi5PRx4o!UWBIS)hW z{{hBMski?U6kQx?MWT~9;#LUf#+(7v_&1;~JN0pNiZ~*ND4knneMkp2Qp5epj2I`c zcVHR$#I+H}4%QrK2xmj1K#7qx{kEJwq2b{HWQx8moV==KC)azhMI7y`T7HLmzYD7v zxLX1XD5B+I{~9IPvK|FS@o^km>)3L<04+zSJq?Y5btV}!AB&_>+2$J6W){Ax&Eq_w zHk;8r_N^Q+Y9G`l8HdAuk;foHvou4q>@#T=<#aEW%{ik}AA_OUJbZk+xL)i}z4M63 za!ieniBe@n--*ga2H{2x&h>4S>w1;z6e?HFby#+=%B5V-pj=;1xqffhxdC-vY0VID z{5@G8Q9WaQgkn(iQ6K1|0a5t9vOYq&DEbKHBI_fR3k-J*^1lr{jB}4HAE|2&CzoHi z#DeuN(Y5KLvlwvHKwWn9P!DuUv=v!%Z$JJI=uM@~T%@!axd%F>qV_Wi%?ELgXyjiL zS+5T_CF}K}GLS=p#W;+|YVuIaA&v)d4j-DOL2jAX95$ji!C49dH zpL9NOB}PmVDzNaKr}}7>hX%Ik(jJvYhF=1giBX#Ht%UDZ#@(sXw!*iHX>`O!9>>8a z#&L9JS&a9dflrM0-coTN!uJOA_DfXOw=RP3O{S5-+G~hKl4ONX;D%uuEaF1uXSAk? zxi8eFpsiMYboqv${RKV|=QmZ_e3XHBd%NoUuIk$fpGeWO@co5jK(<3I92!dMI2xvQ zq;H*R^&7F3!8D>4OHLQSw}?g2H1!CJ!r+x|ktIv|*|3s5h8I%g@NDe2vzM1XKfdjw zj$1MQx+fVd*9q^xfm@O&;0thCGBLd1Wg0jhi6rpQ5u?d{HdKgZVo1J1-gUc}cHPdWUAJ`FbxWmPw*j>4 z))%{Op#j>(?`=+T``Fs5cj!WdEx4(-LTtI?i~%-RR$V6+$6zXpUW)F~3p)m2_b2tC zcHH-ai=ai0@S*J8DX_q-qZG)wl%kNSbB}P&(m}R$?8}9(fPG>3X0Y!~_*S!z4$z8< zKuzT*OiRJ@WiF{P@ckFlX!+-_OtZnK+9sk?rkU{2$Oqzw_}+{x=Xvn#p^?NF+ERu@ zW+%2?dv|2w-DIPY^EQ5-@kyL|Da8;YXIJoooH@xDZAd5n29qTW*l>j{dORHIqw9}x zs``d-8u_`BK=UReq|}G|q&_?kOZFHf!&(qFc8}B0-45doKW-3{hwk#IwwbV?ezY<8IE8>im21?nk3~E;Mj?%u1S$uxB$Qs9)vW9Q*P(8m2`Um zt;F!}V#dorOC+C)fz~dV0cl1cQwtJXDsV4TDPMb6k+VDU((F{{VY(?i>him|*QCM= z6J0lOipC*DVkN2^KI{MIkg*et46m4#`dBvlv9#H#k2Uwf;GcHKur-DsEQ4SU#Vzch2W&YHMaV`=Ed0?JD*8%>y z(;#V1S3*RELw!PkK)<$v4ip#5hR*MzA`C48a}C8Z~5-&JWpfbVs#lW(YR z-&WsVi8q4dYWRc{s>_07Hhksya7&_N=E`Mfe5|@Zq}-&uHQJ5bc5)S7#<-7Ev4&eu zD>EB(+maj69f@tpd&Rb-GUdS8THI|!$AdS8*#ea(Xf(j2p6foGt=+=+4_*laucTEi zTcprMt-I1WH!&?pko#H3W||mOtv_*y?va>}J{!NI*t&NF?sAAECG1mv>`oNIpoC|z zAKjKxggZsVN;Os~CcKAggL2|?V3BE~G0cMj98~p2VHzn%hm7>LV3bW}S*uT@6UnKf znIabWXgjTScY2KTSZ70!au_R>7L-=Ocn0?|l6h@6C$aWA)=Ba~tQ8d4ep>KZhXo(n zd&gN+F>6N?#Ad7&)%_rhTwsic%cEccLw8^tqA6Gvojhuf>_Tr%o7=F{#a_5FL&xxx z8Wx&}^N2RJr(SF}OqcVCtRULN#H#t>2<&Iz;y&{a)?acu`83ERYbv~|?Y(1^e zFrSraQfvEAny(@*5Jz!gdH7z?x;xDjxxno>w}`5XjETIE@N8kknni&gL|##8?#C;T zDBObxSN?U){QdB&bcC(aNxxIL*3oj%#~(y)DHHIusQXnLkAFPEEVDe*yl(T^D>dvAc+@tN+-7|KCB@?*Kgx>$UnTR+7}sSY*5#{okxcy^!GM?6Vk*8 z_51L-Sdr3(Kq32HQGK+OF6@|Jgik2z|AkMSytxwXT--b;G!$f>9jW;D!mY&VffHCDE(aHaC|Ps zCljA5@Sz`A8HEr1AP(I>G6kRO@v-4kfDe>s2O=U}+V`91BZy8Ny`%K}9iAk*O+#{m z8>s+ar%ZT3W0iO@n2UDmNRATMPy0U^yt6sBBj7v1DaeBFB>Seo_do2j!uJpMO@ohW zk1&Ba#lAV9{gZu4_}%3h#hLPqOwvT2kwt8hnvQt+-&OftpNb!B9RB+%f3<;MNeAJ` zDc>nx6z|TQBKHH9OS9Au*_RF<-Sm?r4TJAv_EC;6HiX(;s=>yw{)G9drY$w_E3s7m zlRT`Mbm|m&w8)brQEX|~NBlx!ANFN{*2q4R#b#)oNF!NFxX};@V5j_7a!~nB#tM2z zwUV474<@4Ql>hWTz_Fq{B%^^OiE3?M_ED`(VxJYhe(akDUo!j3;OoymsGzCZhiAJq-5{E##>A%@`EqvS9mk-~sV}@_V8@*HF(b<2BOSDGS^XubB ze&ss?C&e#ODJnFIa}LLf`l)N!N4oPN_L1&vKm*rCuh{DC|5AF$2EG*;fqTF80y#$Zqyo z;nO=1dn`VM9AXAS_yhYWKKs~5@!8Klc;a$b0+qyheHHtX@f^rLN;xg43hg+UebiRz zD7w%BRCmRwWdi#$@Fe~u$?MCg_11ebE)R^(sQ3Edsga6&O`%|hx52&GlM!re%&2$! z7kh?hjJUjJG+vJ!fNLdI1RMP|^Xbvx_WH(FH#JGam*d-*>#G;lH!gD3djr7{Bgb6t zX=n;Ij~FRc*L&Q)P?HNUtCt3@$+#@T-?%)GaUJAkjKgC<41~byF?NW~a0fXih)Bkm z>lN?ljK=!Fbriv1HUC>wU*oNcBAGcaaOjoZ<(hWnR0FA^&;aMeT${M zdT;eoC1jC*lsg8DB3S>QN_7YaL|X0~_9^ej=GtcEX4>tAes7I+)@)?_Y;Um6-nhaV z^aKJPzq>kUHPBso#YGjB*6~q9R}s?lG*4bfoog=%Kdty*FfsI*a~ zJzE(m9wJSoAB<_Dx3TcUSt{XaQ&JmcQXWwH?e2i5n-nO~p%h$c5F%-DmZVkJ<9+Ve z((f;P{pQuQi3E2<{(nmTFIk6<$*=rqcz^l-`Bv%LVFeu>x85r7%JYc)nqvEG{BEbMEcIckDrt@XHrW3#fpZjn|A%Geq|D%3I$Nu@+2Sl%VC!Huo) zED9~otRNy4Rf1)s;XQpB>#uPK-GYqt19Q3fBHcRtN+=ekh?O3QFntVM^d`Y_sm%4y zmWOaHnZjk2sf00d(Rd`mLbsZc``J%UV?|ow`kEl}4BE&=Wt?CkEl2LJ7thGixPB#w zTn~&~G`mi)(25DU2i|?HUij#FQuZ>2{R5DlqyaU`2vA6CY7{#tnFdNND5DLOHK0r} zP-sUn-$2;~3iZ002C#Q)z3GZv$nEf$~F8wi_ta zFSi>gwD);XrRZx5xTrmoBaD%Y z6m5cqa-7@~lkRv~8adS^kGq7pJ1th9BMN!-uKCm%yJ+)O3q-DoU<9D z5q3Xf&V7JsMk z98-MgGUNoy1{pJDNO7V*ERjD$8AEprQ&`_wV_$lnNe)d^6D+j7KzaDU>APRm%Ms}! zD~$xp-|<8s(pkSOE7D^`SX>I0D`d>a8_r*PfhjB+YbRJJC&{gz_Ed~=r`6E}3(2Gw zJMXRUqL8T(i82*oQB6*;49An=lWcwNmWxbbUBZ~j^u*`F#h1(NOD`vbF-rYewdv!) zB_=r(N`j?pIhUH`3^&Q4((FzS)h?|*Q+zHn$)R2;!NP3EMqG&mPL?2fGBHuKh zV4>E5YR~R+lbkC-Pq38YNp)jx#!M*E=zJc*7$u+kOug#HD@}4nGNwtE)BlMiH2r8f z)K3}9YotleD8?WXTwdcoet(iVUDU4_(>2N@heq@X7CW94iwDkG`=MFRSd*MFCOKrR zkYJ&?0OjGe57N|=)1}MjER&pZCOOpl5-d>D5^0&y_9H)$<*?2a^?5vF9C(uM9=0%f zZnjAd#YE^9s`IZbDu|KK6B(ng&l5~?kgeUy;o7e1RjP-ROmePfIoHt>pPIq_Jmz#w zVT@9L68~}g(yL8!rZR@=D!KDd++;|X&_5VRAV3!^*dKVzTz{;1W311) zCOJ078LgV@x}q)DIRH-}hs4x+oN_ol^efndDF{O|Vdp zK(To9t#PQ<93R~nfRvCJhf{r?m9p!XdW@*^g^Ve|voAik+l!7Dn8KRIn8)#?I^TY5 zX}eyIs2k{t5Y|Ry4%Ne~>^m#WnCXl;jwi*`d)-xlM#p&uW7_eCde*b&QTw7C*Vmt7 z#*n6>IFDIZ<(XlMvy(A*;7RT~cRk-?4vSK)>8QhROnSzQA4dvskG*r+off1>}^M`*ir>lxFVCJwY2R>nFUqTK@2&)E9s;irC_MI}znavm< zo)qUlF5k7*j6qT%hYoO4{v7uI{Q*5j)Wf-qQFP|Ep}!qF$CUPYjQI_oq+32JdhpL? zIX4*O&{%YyNzQ!6G~-EbP_h#l7F`b);EhN-VSc#hs=LjYg^VF2rTv#F+uk)}T#RV} zfYQEy(4HssNc&>OP}`!kcMKddz19@xI>yX_oU`Hk-u^O_d$b%cV}|2NWpT^ytsQkHIZGHb zP}VIAQr3+y%UQ}8YC*~PJe>9TtR*Hn^^6JNNwFB|U;c=>EE*U?eI;SY)tlr{t4XkQ zEvJz&dO1FmoTfPB++>o|WRl}&3~69$4KKFuLsN@x7ZlqB3n3|=&w23BYkG_*(;#D% zvY`GeUsF#`ZVAkstsY}%v8 zh;qN3F_+;;{CG*c?LHHdi<&=qweu0?W-6|$qrfB&y!$etVqWDb|`h8;Ilw5t> zM0rW3%vVD{kGg7h3Rj7VvQnnFRjy4Y%zl|NNyWTj!VD)BX$b2E6Qxv8A6{rK#qb&Qek#$y)R}6U8l4W~q`_su-m#!Y0bMOqBafl>1GTohHgY6XiJ*<*z2nhbGEU znkukU;yl?zsWDN$E>qgnv_C0RDpbn5GG&-b8Aj7BxT{r4o=nM6DL$Ffs#12#lvOGv ziH2!#x2cpOnX*Kstd=QtD&;YmQlnDdmnj~Vl1-g1T&+sENv4#ll&56MOqJ3|Qz^I^ zD&^-g#idd{mMIsglq+cB1UFoz6w8#gDy3PbG^>S7VWJ*}2{I^V5u2SBWDN|L7L!PAGsZ#z+rqrvHLoy|xQih!?;&Y`+nJZH+Qz`ez zl!!_>AXC1kQqs;7a@MGnI+@a>Qhp>;LMr8iOc|+CMh+En&QU4fmMIshl=oyxfl8@8 zUvN!RDR0UYhe|1>$vND0D&;|$LcOrpvdg0A6M+-Y^Js|$u0-YfhD<3^DQ6E8m^_uz zDpPDKMZ$c9T&_yN<_|lkN_k7BRH~GpT`VwTR7zir$;pjUDIGGUMWxgZ7ns#5<;10e zGFzp*Mbi$rDwXn&OhH+wQifh3DC1Ph!Yc)3o=SOOgrLk(Dd&zBl=D=|0hw~SO34}{ zFlVWhMwxQ9N*SFcFsUl#f3pQ8U8U@wC@6zfO3T%PGDxM&nIb6KSSw(nw3sO0G*NzL zpt!0%-g-qahvllRZ)~KAK0DIbV*@Kx=(alnbW{{A3kllPMEbN)0Gi0XANx+$Li*%4Se#fT~gUfkK_EMtKVqQi&SntZQH( zWT0e$LX}g)RDeQNNTVzVg~FPm#^)EHkkcq{%9v|a%mq0DqfusqLiuyMiutLG(I_8* zLe*@kim_iSu(9|8w#wST)%6J+>87TNhb$+3WnG7F&GzxVW z3sed`(kVHt8`RL9<+vvTZ>Wz;;IO75=HPW<*qVw13ydq8Y+z(vv- zLj-A^ELl+Wa=wkXMmfS}fVg(aau`Dd=>u7gpy=g%2X8ewR2E{5nz+U<74cyV5v1Ee zAtxw$IU7Muut4eaYUrN7-ak+56A}73aAn{>V~8MKSkM1tieAol@xmA%v2R8A8gNnm zFop=yR#}dq=;eG5Zxbx&{&}6&wq)RJv5!Vv?}BS6{xgOMlD&cd$rQaD(i91nb$FhI z&#`(5Do=y06uq49<3)l6 zO_Xa|$Ev>%7kmAL-wm!b{AUair2b9(Pp0VQ`~WYE`6KpN2|p8Dls}9ig7j-yj-cq} z{19)A=@RyJ#5Lq5kuJs%K`H`;oS^9CYy#ETmWQkPe4EV07(=VP&%`AxKgJ6!?bMcq9U9^90~eJkV~8M~kmU%9 zUe0E`HKtwI*Ads`06k%CfKP%U6+a=0L6ZpUH9|Loi$Z4%5u`n`96`~C{!_fwQ8Ou5x14v!{lfZ@(0xOqW-^8dk{=Xuf})qR1yoTp zNtX`#-fK0&0*BB?z(qBaF+`9SEaQJNMK9;)cwvl>u!bW1U%*8zg)u~sikI_0nWC5T z3%oGqkFY)>{O`d<`OFw1NI5I`pG?uq`6XT?SmxlFh)>z9$DS9K7=(WWT-2r+Lj>tO z3@s>z8fDqngcj8(f4+sGGDaWPR=f~eD+#^>8z!GCtVakxd8H&-@t-k7kbZHSkgQQI zxdYnPfcf?s5g!ecvW}T$Ir`9lg%?I0CG2|%fBQW`4r5q=V?F~3=faMf@cq9o<}!>Sg7hM~`b_-SD8JYs!qO-$)B&m(eOM2GY7A?zs((s0im({N z{Ap0|6qZJL4oa8GOQUSu#88LxNtx1z}H7LUjnAxCYs1*JAf?tE0U?GX*uAg@|ss^=u zayNmC9AN})i%cP^pd2z$J~2^7lDd+e;HofD?l4jAH&Ommi9%Qa_hz0IvA0C{paXlq-5yr^19h3yiMZ^O4di!&? zYFr=7T!b-l{RR~6l*A9c6F_^)k!uGi!g7zeu2`CLvBouF3(;`K6(1wlBcLQ$ly>vyrKLF zjFIcN1}@L`-@K%8eM9CVjFIb6<~kowa_97UB1z-=wai5rBiBw)5-ijj6YvoZjO;qV zl?WeUj9kA1MLUD=(ulu5t%bFKx+yrq7`c8AipKS;-xNkPuJtk(VT@dlG1p)`$rYZz z^0dZvK;|Nh!j;J*mv&G@dsoU<2hN)a}CFna^tlt7LU`yvOs^5BaAVueV}N$@dN1> z2Q;n>nTs$+uKmo_7f%XHI3-;hmBBnM@Kj3>F!&323%6|Nu4 zT!b-lJq3z5!$MqtdUfbAjq6dFi!eqmG*lhessk_mNaK1=<|2%d>lp*rdfUs(G_Dge z7h#NC2Mt^orf>X?#+5(=C^*6xx&8!-mageZ^Ip-oE|j?lW8`|4xs*~)`N<=d8rKAw zi!es6=L}qHa#o=bl$_6#xd>zAI>cNwULp7B`o-uZ6|M@Ii!es6=Rpzeg19mU{dJDU zb+gPx7$esU2Clcxb$?Iex=-dJOdn}KzUAh+@~p0`yaH>P(>8sEz0_f)L)*ENY8pKO zU+$D(?xZ^RGEeR#Iy@i9ozz&HJ1JP_2HC3e=2?pz`9-Crc@AryTkur-abOr+?%YXq zq#W$c_!0Y!xW?1uVCB@F^rFN?= z7^GAD9>kWwxtV!IH6A>t5BBTO6z-NX$s*g%)|b z&Nf1H9m9$`cax{my{O(3E9G|YV!yl7)K&T1R4kn(q09~5fU~j2Qy)XNsP?7S8MdM_ zdwyZ5)ke1yprY2gQ9Ei3b*|J}Vk<5z%%5IhEe!!eZJ@!^(CBYAz)<}i)1A&~MWtod zxw(_7v73sk9k>~IecXVmmx5W5u&6Pl)@pmHwJ2{|k=`4$3U0a%5AQj-Azp%KV?p=;ESNh%kv$@mEGWi zO@8E7Ey`MCnUH7Cr{c-YshAZb3VuDOuImb8Plm1so#frZnkP9yF(T*QKQ)$#uzC1p|3)?0wuZ* zjqkJ)5xBcrG`^E+q)C->X+ZDtd(fYGmC6^zrc@AxE1xpQQ2n}L;F=zE)q4Gbps24= z3=Tr%xk{@lDZ9I=QMuU~Qf+wLENeWTCN%PG2Ln>E`}o-f)M=dLb=4rq5%!sKSLg3##$r_)(bV2YzaMMV+aySu*H z7)eFk9Lj!ti4_4=2cSo*qi$=ttTn`KN~|=v^w66G8vPg}TeUZ?64d!=Wp?WK;TK)G z(s~(YR1!dttlVrA1IFL1`k0VaQE98J5QJ%5wz=pSRT5!Dcc>9r68bo+jwDzy>{5xU zy3C@IFHyS$wK9lCR_-bCd4pC1MnpBMvXm;m5?k=e->6vRp3g;NqJXUBtIB9LV8Dqn zNv>Bg*Cda!5}I-r&Z@xfeZG}V)lulB2Ugc6R4JlS%gC;0|V^<)Fn;x zV@a~v98S?ZxIM~o$jah!Q!df-HDXM+A}B7?>qH6-9d(USVMV~Wf3GthQd5FUmw0BS z2?F9>>u+qJ(OV}19AIa?N(nacE$8YPqdbskif$BVfW`y*aO38$q<*m$Q*y7n+K>LR zI#Ah&Zn}DDp}#TI)M@HP+V%M!BR68nrmFcVr0Tk11aJng@uTsSlw08mBC(4qpy!r) zSgGmjKDSVP)tB`?af&q|Q8`_~Mp3^4{d=LYJHjDmur1zEHOJzbG_*7 zGSGM`Mwh(t){L%&P}S(N!RWeqy}nS&vQz0@6lSM9pSCo+7i2EZPI+RLXVw|)45H*u ziykpjRP8-*fvjQt+A~4K903>kXl2<>ci{G1sIHPMC~`Oac*vGKkJ~IeI*dilEycq#0BNmU64>NPA-DB7ZUDv92oX>2cp_O!WoT zUt5wX!RYz(3fWX&NCoCKVqM+GInaaYrg62XGa@`ncFzXaMPePknlB)142Fx)H@k5u zch82-12vaD)a=7vM;5|z6=OL-UeKsgzS5$%E7;tG1(B$%(%13aOnEs2k?tHOmOAuL z)N_n>l&~lwU9i)F)OftFnlN50{ZofPyU1PeV6yUQV@3mg9uGpgYnnSyXN3?~6>Sh< z`O=FCdgm!*WF2^TKJWH-l^i6yEa(>j==HNMUy)p(JU4}~e-v!&B3yl*#+&4c*32xM zRnMuU9JLQip8pS1&v(>|W>AeK>Y&T3v_vXcZXVc%q%sj-0@$3S=~_3H}9lAHOdn&VS_L;`vkG^@K5L~=!`Two17onf!t$9~oou_)Kve@wdOWjc> zkfK*t;`M!n+TgJ?PFdukCEA`*2~{qo!{;sLET{;*#^65k3y#ist1#q1mneQOg!@ER zh+km-kRG1xcQ?sn7DLDP1!ov<>d2+26sOX?y2`c9pWgfwzx<-F@ZGcrwRvbtOw6QR zK6InK)w3Eur1KfGQ;dJavYv75Bh!@8PlbNq^CfC(qS;}H1{8iCE zbU5N>=yo!0gf4QaTIb86i=Yv+c}?uAH0~!G`7cDoo|i;HWGgH6WmM#% zOsq4r5s_{nl#|^+C=0uRP|0)yp~C3~GPQe1wkdCQdt&mwxo-B3yaahKD#h# zi@NHe2wL>1t)Dy1`cEw?lM)ymC)Z~-a*iFb&n%B)7pr1?c8QbBYKqI@vrC+8%)wZu z*qT-Br!dIIXr6lv&FI~fyFC|HtR~rmp~YykJs4VyM%{yRj!#x;UjQ+j{LyIwV z=)urp3^95zwCvBfnq+^zd6^wU5%y$e#u!2NWN=hfblqC4plA^JDb#V#o{x!3MSPiJ z96gTw%;$SdDgUgJVs%-cSr&Cjy83hG&mftSea3@`l^#EmJ1P z%Nbp}d4sXLV_=3F6N{s>Lo~`cGJ}9Kbe6}I1!qQX^t^$R`&my6nWFd~2#c%Wbjt^Z zo!gk@V2+I5+TXw**V;vNKE*FBdU=8N>U-j>46VCFAIveA(dQRIR?>-l0AQr$y~#FJj`g_@i`y$F{SwP4L`b# z^;&0ogLQN!QP*RAMsq?oF?YGD-NEX*%-r6LJ);?Gs<*vHuxF;$_8P%zMoOvyP>=1* zcW3M^_N8(D;LBkIt7)^|=GNQX=+-Z}Z|t=>R}4lz!=cDnN`P$6xsOwZ54{bpx54!` zxHEGKxzh$`T21{59{Dg$D8GsaS2AO4ihU*15w+WfUZVH70Ind%9SeL=&wLBRm;Jba zIt1=5O5-BQSFR{c8#QsY%`ezUy4PG@o1XWY%VR5Eo*%@gje09D_d1{Ny+U8g9_m!}qtu-L~I^qAP^7UZ}^omybC89lRZ zuf1Cfe^q3BOojxlnx^)wX)30ly5W0oi|cK1y)CY1TU=)LWHJZu zZFRV9t+SmQ-J~tnctQ8NcTV?Z|Iv^y#}PxcI&l}IwwCf$wEK@LP3ZP_ioW2Qz(2|HnT8EtaKwA7u(pHIdra=L4wQN;aqn?CaZvpWt_iXp z{+&n6obGo+;OLb+Ea~)^eJiE2Hte~*C&|YFK@->Bmxs$vN?!~AD!Nx{Z2)7^p%se|+k|L@oHB?cACo^w) z?qpSzy}(-L$SZc*O7fAZhEFJgdW2Jfm!eV}{juJ~ej&M>aoq5`OM3 zK>qv^CHj+a{70ljO+%i;>L@LnR_G|q?^F;Q5XTawO35#@PMe-rS~R1q$ZAJgawoZw zuX4;e134clVUtACI(dtnZmbVboK@NOY1Zlag^ps|^b%`%sN>UZo@7_}ZE8$S){^vb5#pIm)76+oxOYwlcggEU@NID(Bop zS{75CsHs-Iaux9zzalEoF_YE6uI`yzy>(UFo^LHJw%hEbs1(aQ)u@SxpR*E=Ql)k` zBIES+2rM&7i)}^u$nd;+Z}n1hw(6_Ck=Jf@mKK)Ur`ZauqV9GPSoy>rO@4V6o7eTk zE#~;8NT`l-RH~kkE`*QoN#WTxYi^be`T|;~=aQg>Qt0>A*xdn-zV8vqq(X}IR>|U6 z@8k@M{R%(fsr~vV|L!MdrM30JP{30IpWoxI$L|vhr+lB_nZgA1du`PF+9?ySc6+kr z$07~qktIdrWdZVA1wYY%&Z2AIIX<9I9iLshXwt-q6UWzN)17QGJv%mia(4BEYK{Nu z+N*2Hfp0}agLPuIG5DxZDOiFD9%kf6^miF1vL-95v;We7ag!!a$@DQimh zL>&>{?5wQGlP70nOv##bwRm;ofMUy=(#81=?&-ggq>2QI-PjsGRMj$%_$Ep3!n5u& z<(vF}K$)Qzg0@JkM-B!M_)Dih47wpx%QoW*0d~ZG;T2H zS#jVl0L~T%?tI{Ghy!;iaKSiml#Xx5fx85_U&nzP3f#dsamV7oQT(JU=%Kk-`J9f| z7si1*7r1e8;LZWg5eM!(;O51Fqw=^Z4jiT9n{nW%ivBDP9F@l(jJrlaW?-42M<=3hz=vE{@}37KI7#5Tk~e-bbO%1< zx{_B6%n2FSmAs!{ElH2y)1AD>fmt*~;JT8RF%@Gme7cfH_2n91UX^iO)t8@MBS{b8 z)0I4`FYUm%s3F636~BwFg&x9(Tvz#bH83y8xUS@FxK5Hb<71ZBTqCHGGy|Udf%!nj z8TFsmeuo1$>Uv2k#)q6yuNmb9fq6{EbtUhgzzoUlUfwmp+#%z-lJ_t$hvSeZS&?ph z$aN*J#R}bv54o<=yVoj7gKZ4!QeGY~H8QR%dFz1ra~$&e+a>8Le8_bruN;`~%eb!6 z`wTFr;*d8qPm-$fA=j0>Zvpd=jO!|XuL3hNzk7K%0CS6s>q_2cVE$Lebrrwi4(Ka< z$aN)e2{6BraeaZ+`b%T`_&YGkat~#cr}gK};LlQfF$!5PPs8m1{pWGuLKaDKW03m7 zG!`Y%yhV$jCT~a|N!n5*Nx!8A50{KjEZoinNg7ZrNqb8fCS72_Y3Zfz^vN>l4SdKY z;S)>VQVa+t&6K1~a~LMkFhRp<@}_`3XPzXj$A_G89HFJ79O-=lm=W^@E(QNIc^d98 z=$n99u|VMZcY=EW`SL6;J{0)C~_DvPpy+V_ebzOpA;|bamqrEq*tG zeitx*mvLRm>$?bR4fv4jOx_3xxCEF&kHD$@R@6B50u+2|E!vw;;AZ2WmVa7#&~Wpf zn^0fyA!n@jS~?!ai<7|oc)7q$z`xGq-G|D5fEoZ?XYz*ik)%(6x!@LoJ0Jfvd0M#t z06o10W9^j!cUC93Zz7=8z?`>Q;4U}dwDi*OD}09}J&F&x&g%1(c=tXq7vIS+E{|C8 zBismJO1r_`0Nh+)w#&G__#R6h;r<4U?JjuWI>XiCT>zLDWgN0IraZ#^4=@#L;DPH5 z_iF^S7?`1V3mmn3Eq+@5LA6N#xCe9j^#a$=fYZv2>Q#%35lFo}4M*)^ODtTB_V!EQ z9+k13wU3*SjwgVb{B05Hh4>dM9TdO(??_T3KIA&f=Yhzu`+(W{U4cu*KTV#Njzj1O z?BA25bAKps7a4F`{*{0}WfSHB_>k)?+^ZmO$0kX7V>82~&g6~6>%^a8Jc$oERbF6) zVIh;$s7uB$kRE-qq_GUkR3n%P@}p5Wp6|!Ny%r}f;b&@y?1?3hrYBbdcY}&Ee_m$z&sTP?sZ_!+8RgvfN{owa|6>B2kt&#o{9taIxuJbDk^@4)+t&jHNuP4dj^qL%`faKBL? z*Q==gl(PW2JPzE|z>SXscQJ6@IB+yhx+@MG&9nb24%}ei?vDdk3*2KSoH_pn0(bcX zc<5ZL{2Pk*S#jV<-n2Myl-`OsaFpKKIB-LNTOJ248Mts9IMOFyj{`RXxNpXZdo&K* z<&gJgoVes|0P9?=ax1|5F(#b39uxr=hyynRxSes}Xqlwnukp~iSn(^z`vMcr9KRCa zHpYP?ef2jJ&b+@sdSk$U3-Q6E`VN+>|(QG>*%O19t^*bK<}a z18!v;xGBJWFAm(5z&#rWE*rQH;=s{3x*^S0?8*nenSQ=Mg+-Zf0&Nwm{FDh^rRXA;xdDE`B)a9(mbHRB0y6mZ0S(nCm zUsUNRw^f#wyYe0OszO(>W0s@%x>(5akT2+M@DzI&`Q85J>zw(n{AQoK!CPJKsrSG( z48rpr1-7c<%HksXHJ3I7mQ^?TgRz1{a$FUa`9-C!qKZ=2?4o>!s{&THMFmBU@(K=H zFUVOj3k*@xON;YMY)(hTr5RLM|HNkvKGP-3VEmID*UZOFEKBD*n==Z%!Hm4d8qa)p zgWKn=_lD+AD|D6SA-SH0M%h2#FH$f+*x2L^R@aSfT(m^GM!I&e1wCOu-ZuKpLa}{B z|DE1ye`BDrHkdJ@d}Kyx6LQ6SGt5^JPD2xH(fyLGzCNR-u{y&W$Y}C6HZ}T#UUz*4 ztp-Z;AOmlAeZ7m`N%>?0mC@+SsP(S!)MRi301aqRUUhNt3$_cFDnou>Mq_PlMop7} z%U!>?(T@vT8`My0yaD?CCp~k1V}@s$2f?`mL62V!&&)}$^=z{t*ppEkLdqIELBF>; zBM=P1VogbpK9T|;<@?>sGhneirXB&-XHaCx@Sp2YvFhL$$CwXz2VnxRF*JWg7TyaH)_;zgu+3>r_P}3!GeUMQ9n(E!nl8vsn z4WiDWdDKXyp&+U+>QO_Zzgfbu%UbVZSeE#_ltBScQ1!bT7I_y3(4f6OEEb{opw_3mFCWX!gi^}F(9IRs+0;vuy z@{G|%g1_s81?q4TLk=9#!buDvEd(Wq?}})ti4JK5#xx*j>k)BOG1R!r1EZ-N;Hi=3 zBG(Z|ua62D08tbFkGr>lkE%NQ$M2F50z@`wtf;6_LPbG&2`Csfo0q#uAe)4j@TMUK zl8``1Fxd^D1kfawf^53=d_i_#|HzL+5w z?lT#putqNOh{8Ay2*HrJ|DUM1sEch;{0#Kg^7x+ka$b}EN%8jx!-;Go!}Ce8pTaHL z9OKUgyP^R69OaDCE(H{a^;DEL4A2V3jQ~^xC{8nGBt$o*#u$^&B(}4hZAj9N(~X4v zkcmjd8D_i!(6fv~4SyEho?~%#-AWmE0lJ+G)y>F?HuUJG$cGAcMp9LGf41vBederZ zP%irIWiH-b)Q<%O4}_TOy~YgOt@DTy%wqBP?)7o2Zxv|!__tuMJnbnWgNO+Q_4qcn}pzN;*1M(yrP zK})T%+1pP*N7J&n(zd=agw^~L$R#zRlH8HLe#Yy^2xkmp5ltx$f0W^lZi`$?SWc>M zjVzqE3$0kYk4s3Rb69y2GY5ZByhl#{Y80QsdziaB#YY845gx(a1Sp#6Mw>XYEbW;@ zX=%6%2gN>wgX9ZTY(f<#^Z=lI*6JZZUuCVQpZ58h z-8q6QuW8wx&cS`jT>c61xL^+Y3|# zNaul!hIhf;Z$hg9&1E}30_X>TqBOF-&|#}Cs1`QiNiL~{@Bc5<^e`7aW;gaAfv)rX#Zp&Te+$AhSy}W?yZZ zU2tS}!I9aoVmdOr;Ou4>4l=u>lGz0!vkOFK7szh*4W`*8wRf|B<3Gdf6JQK6d!1=^ z!I9YoM`j<#bYynH+08B-WOhjmI_#DR)FBB0t81DFpB9YMR4{C5DuyUNu>%9h#J2@)c6Im zH~w$4*~y=j)ZQEa)BhP}CzFcVA2iJ_I5NB7=$ZD6rQHk8Zg$}yvr8(OT_7^MKxB4- z>}G$;G`pnsZuW1n+0Pyi>f$ATn|=nl1_iDt77`k}`U9(A#fK8WBTMixCNu%iJkZ5S zj9`};_6Ut-flBi*>1BW?_o+I>pLoiKo_Ad(mvl(d=RD-vRtB42y_ujk@)$R;z*cM$m)YiA<#uA z#f_hDDc%oL3UTJC6arm@QjGk3OK~(zDa1FXQV4VrN-_HLEk$RTQi!Wbr4Z;Mlp^^8 zN)ZnQ&T))75vCO4s!=HfqEdXukv8K3N)dbRrTA-@Qi$h6r4Z;M)J4+gTZ&_0N+FH} zl|rD4P>S0_OJO*$%UC~A^L@cTEz*Cf;qb@$r^fiFM*62l(@u<$65~&eqRN8&e{HZZ*wB4g|Mv2Xo z_^5Poa^^RV1R}87<{i3n67Jm-#`c}9x@ zTk^Vmab=XQ_GX5B?2OGAfbm_pk5 z+Xd=SB>9>$O_RU=Rc^y+qy)5y)8+yyW!xe_n;BOH=tm4S5FMvJ4(KP0d&*3G8_@ln z`d2_+hUnb?6AbkSMEfRDS}dRqjJq6=Y>Qt-5dPw{VYnA?>g|BmGtPy(=sX?JLyRMR z1>$COr{Re)-e}WXk%i{ZKY~`TA2s@;`NkUk{hnh0VhGpS5tFzF&uw}qQ6@I~^-oIu z`ibc?o0d9efvTU;0#rxjZv8`tQ8#qlyK4(h*WaOe$0W7;A{*ZIjhHpF%Qpmeohogl zHLl5X#Le)!g42fniQzeBGDaNGJMDCTVooUeHlAY0Il() zx3Aw9$gW`MxIJq<5OM@#hB%s}Tm*6|kRrw~CbrPO&H z)fdJB7Uyhu4={<0ZrI~&e3KH~Lkw3W28NprS4{nBhxdm1(|x?x)Sr&<4yivK<-M%_ zbU*K)`qR(W+#{HdxEPKd#olCP>x65~C7R)s>$hxhnzy*g4{ea=wYvi|fyxOIo zfhmG4as2YGt}fZ~-n9Zbui;kG2&kB$9|3xpp$`BxF!Yg``g=UDX561}pT-c`Rd_?z zmi3*p!*1DQ@ZY)IpZ^ruXCvE(Ti+%Wom=0tVx3KG`m@LyzQq>$*{#2zmA2`d32}lD zMnQsdJKA(U4`C$weVu44ml$_9c6s|7{rq}DNB_jGHl5a`sNwj;lcj!qsm+&0&2C8I z9z!4cF$O|PE%isE73$Gt^w8uvp;`>v?w}sL_*LdhJPCdK`aN5yqJHWi^_ujjaOmSm z9y4KlbQ{rVI)43_A6241Ma^}Pp>ImkxA^w2se3{5zTV{<)1;s1@{P*FIfyRbQ1paY z*Qk%3qx2yd6rEeUkBihx;<|jXsQg8Jkk?Z)1DTCkQ#V38TyW$gl#_c+GAxi)`a{oR^3ori!oeRr-|5vh4&gEI0oQ<0 z?=$qhhNs!^ZR^+?OcE&?UL5tD4c~@kpkj2xo6g3s0(Ne_KW32(I~eoyXz17mG{(ow z$Ws4O{AET>8t9AhYyJo{C>k8EHarRbXtc3Q{QdlOok>Z){{D!LzJ{k06Fvr}ZK!vh z40vf$i+2!CUBpfDZ1*`Q>g|~FJ@KW6E4tM02v_psbI?Dz@TfVqi{TmS-0CQ8Y+iLG zSM3H&rtKd)KiKn;b6yKmbi{IN4m4z*OnG9pHD*i};s}Io%;e&{jh-B(QM^S?w7dl9 zPL8~iJ>*Cd&0caOX&|VV@dz*ncX8d91ERk;je>mh8TuLSku2qTKr(+`0cAer*=s27 zg1Z@zgXw4`CAd2P$=Kon^h^9jY17Qq-vG+sJjR1h=q3XaO{W18O}&7A%yjjDq(qOK zbl)@SVDaN9o(fa3X{}(@hLAHlksy75#r6jzVJoKzT@OeCSQG%fnpGbO=vn3n87d#@ zq$xSKi%+wdv$(U|ifFKO5<1x4wzSOL!h_ zjV`n*Nm3){2y^7zPIv_ix;R-O9o0>>4-pkw-31^g5r&8 z$TjqY#65{8F(IHlUCvp}ejmoW!Hs2j!uU-?)3bhkGoh9OHK~s;$<{S!fDg_MwG!wP zVRPFAH6Qgi&W5Ze{n0##B||pp4RDPnpjX?Q{zPN$_PFM+@+20u0HB7I0hoaw+31IU%Zb9ni|L8 zCoM44M;o!mQjCg^(u6V+nI-8PeNk)bHfg?Vj7H)>sXaqBICs1UFpy_3(-?zr_9YJOo%eP?;@@Ar5QJ+w_2LV>+&e zI~^l@i~1m`%Xci0IAl%TD9lj}&W5*Od2R&gbi5h~o}(J)Q=z3K!7~-Kq-jdujtRk! z@m0-Kt$~@UU1qA*HoYC<*{j-z(vjQ6{^~xejn{al+HVwWuTRpvDQdEs6gpY8hMlao zb4{C)gww_Ti z!r8C{16tBfahGYlg;kwfT`_)gLjH`BK%WvgS+TbO)|?~uJ9oUk0aMlQpu`^MJyfs* z&U@ZFKgyE! zLJFUx#qVoi^lWkN*bQ;A(wyA_F|`ZT#BStoOWYIjw!d*D%4nb9^SVv&2QU)S1b@Jq z;E!4p{87IH1vE~RmABvqZMS~pd&JDi%Hs{6 zV)*fF$FRrEP%UmLku1K&J0##W)F11^CWE(vB}-lOHq;E}icYc*Xrw94(Hl_jJbDI3 zQ5KsC3g>frXBl`jhyE-h)o}9#8E%}7qyF91MMI9W;RZm4z8N0MwPTK;i*8Axof%CPXW7$%FhB@sIWc694E! zKo5dHPWuAX7fr3lN*f1AJfJ55iKp~!6SoM$3Gc^Ui z%FTF+(q;jYc*Q4xu4P;nMw3YlRR9u?>Mawx83q)|X@E*t=PW>#tZ4xt(f*qz^g}>m z$>#uxB~JhnA8c5^05lGeST_xj^4b6i2ijnWH^%MA^vTwZLT5ftx9oD%x43FI0}=;~ zw!XRaxe?)My;Nu&1>W9%#}FE2G}BmKUkywG&h>JHP+Ng&#E z){nf96PR{7X)%8iW9V)?(-`_Uo_Rh&$Prz@+3-FxOFALz5OS+Anz%L8B+z0(w|19xgcjk#khR>FI&^NL)j+_iiMxQ%8XW7XmMNX7W%Z zUq_le6JFYIqJE zzZCUTIB#4thuP{uCNZwHfEME~O8YYI-(t&?|0*%ACkf(K_B}wg4E+*NG1Kh^BoQ_8 zO25RZe*ttKr_x-pmT}{8m-qz7y@pc2c_(5rN6Cvm78H}|#MCS?nG@nYbgJkARU>8` z{gZ(AaGL7yza7&NL{1p@E@H9qYYWbluBW(6j*5EWjh9%2gqDryN@#>CT31xZHHIGB zfkAUf$6!N`>4-7(xQ>2Z{jgZnhjzhkN4d?cD>!55r?GxC@{e}>RC&9l>q$mW*K#D# zs2-&~14znBzWlEk*9>SoL#=>*%}_g_ml)a$=)V}+2Z%y!QQCe$zhQ_imd$N{x!>~w zwft=y8IPsq1_cOs-O)_z4qiR9>CIr)5L;AE&2D`!Ej^Gm0$g3IyH>a9`yFc>Yud14 z;HM+>#3eU8vGS|GKsy3aHVzkUc?0d4vxl!vMu^u<|Co)?7E zxBZlR2+~~6#;qs--bpA$Xwk2qL7dHSV_rOs$XY4RAx-)|_I(3F;X@r?2zjNG@(ro7dFE zYt9`9ylI&6c2P&9DEB-)jyt63rs>BH&RrQ)cD*E{8MwbZ$r1n!2HI zNFnGg=RI#?PP~S?7Nq6J;bAzH-Z^5IbM7mcvs+6sP}Iia!8xM!Bj>%l@Z7$vZ~bq( zpcJO%fg1EZ1W|2Jh$04vv(AB5_w1o1P$!%#S{I0?6mX(uV@e)%(0fZ`*YcZ2q7Qpw z7CFRmM;#fvM(UrK&%W&j9AMABjwmA^t@aFL?Q-rYID*Xl1#m86J=klQP5F#MFZzUR zzhNYFZ+AM6Zwd%qTAe&B!OO;X%dKQN1?=Z1xN2+Ymo#5K)C1m+OU9Y?Hq^-;_W9Iqw^0IRxy1E9vJ-59Yj z2zH_vcR=L7VUGIWkj@mimqEsJ6b(U;pg0JMCie`#zKO- zLUn|wI=zvJ%^iJtwSmzBp#&A5hC5K-8f%;3>b82ZsuF4oUmUPdJfSj4#_Wf0=j zDKT^#K)2|iV6{bB---a#Y2$V2IL;lJQB!e?q+1{74sB`>6Y{EWjUyE%Y2HzRY=@N% zgtN&4`4(<#v9$lZ0ZpDwJ7^Rs?Z0Y()LRFF)`vu2Ws2*?6jwE3&*%Xjw~ja)?*{;r zI2+3VGdZFQIu6lOQktopW2AbKgP;gBFwpM==k+Q5)?XafqMb;$q5d(lI9& zxQ8x+891miSl@@~X&0tMta50I9h{yJiTlt5v{+d ziuVw~fi-E89l-YvJ^vdy6-`@6THUMv^H$i-Eb+y8%Sxx)vbOhJr_YB?L$ za&wB!k5;{nB6@?IqxaSJ2VKdDE$JP@8E}r^V+5VsJj^g>@2}_^189&t$^2<8&R;g? zaV^7DMxA13b!WJ$cFx_!_FOa@8?iXO5M0}|xunxM;uWRu%TR7F{&taq4}Sn{(M%IDmO;&cj-(8lqjT=d3}B53@S6{N?q!qC;rWCXP_?%s zp>Pb^0k5*;fE2H^u0?|9*fuw3g;Yc^t<+_Gx8+g72!yZaWsE^nL!~vd8kmU)i7ASn zgX<0gsZ>}ep;SDHL2*lFEp1%Qf+{B~+u$l}S|8n9a^setaI4_&lYZ5kgyUf*EOKm^kTl{X9;dc4m=@CS-cHV$DPCt+7 zd2mji-;IEAGY^ZHR`_=vR`BMBE>t)p3fk<#NEp1uJPx=D_9fCys2Gr}$tnQJn(R41 zvL<^4&^qRzvpGZ9OX-W}F$~dBscKHW2KNNUjWKa4fP{`bVxgO9($OkWaI~u{D@6)0 z32qA@SzD5GE6`CuqRamPk`O9|f+dgZ00}Q0(-vK5LtAjaIx^-hVqMkS%4(BIe;X!2$1AP8{~p(H0i!-;=XCp z{nW(01xRxHlZhLG=JqOUbqyfVY6Kvmn+Qnq&;dQbbbA54&d?ixgyW2v8VNT_0@?im zN$LVXZ!kxhiK_u5Wvd4yc^H7CY~MC<&zW@FOGu<{`9IZ8{QH3(WyoR$noIA#M9j{5-# z$K!xRs~-W9QvM52CG+-)4nXLE95zRf_!)*XKaJZdTvD+XNt5}X7HhFLmu9XnG^>$jw zHd7LXgvHsyYRk4Xz!{xRUL7Q!Onf(yHoIM;c!ZT<662fRc^Lmxz>OlAt#F*-4~^3C ziJ92?er#W0c+|uBZT$~JRukk#W}pVF10^`{gYwB zMdR6xn!RWg9*V|eef2t4H$^b)%a~VbfrVM-mD($uBVK2hn*;OW)PJMGBuz29#Y3MIwtTYfWsFZF@foa zcNZgQoETMNB6B(%?k3OU-2Sj7YIvS9@*fX0t>d>NdeEiEno}zpUjDY@s}VX#;u5dw zi!yceYkYUrjcB)l`QEnn#Bq*;v*X%ayt?d|gh#*_jI_os-^j*yeK$6qTs3SW7ta?h zzup;gezy!%fhAACGxtuMIenIu0CCg>$D2+MJxPbOxjY<$iDv8cbvE9J#sVLMPoy;6 zkI*!Zs6^G4GH%P%U+Cv=!4gGr2B@UtU*MF!Vq28U3+{b3g?22v{C-3jy}f0 zK+Y;#TKz{s?LqjXEkd+VoJW{L=Mko$Sqx6gR>#&U4MRjT9{p)9^4JunJ)*@wC7qq8 z`Uhug{CqrpY^;@VQ;D8Kra*_QbOu_#!JnZkQs)bE2muNsJ~%mi>_zcG_6mj?ahIt1cK``)kBK{A;*Og* z4I{A7#RC#v8lDB0VM2v~rm-$d0f`1{07(q$D<<6!0m)qX0w9?y-vcCvx0HchXSIsI6yQ{MQOA}Z?Fv>1yl+sO8W{R*))F=kWA#y zm=M~9@(2#uJ%aTY;1P6jhBl92Dt2U?v#{_RTyTb7ut66p#iF8hR@16Dj=N#r?~Cv? zZprWtZbfi}Tifyg{Dq9L)i++S_ml1nkFxK|R@(hL2 zI_3vfZFB11k681si0W%e?v*$#7_F_oR5EX=A#&2MgJJ~T7pDk~@=~wk3rMtbox2Zs zv>7cBn3!d_V>2;~EE}e_r`ZSVxJrI5lb;y*>B~P@y6%_dtOO&%#vq0iZgFr3n-mPb z#^OO<2Co8C#0`EKAXzAV3y?JPp97L6y$cX+w?t{L0!rovPyRwVm-wC6x6DLf;9h?w*cGfQ6(O`~fwXmn{$wyG`IIR-UCRia#qv=I#wh~Yw zsxTFVK1#t z_F1cw{ejiV0a~5xhiEK84#>|D`q_=T!O{e~k!^h9SCUTfPh$mKG=i|fq$84qCQz(CYUCeV4=w!#n~_e(pN)_5 ze#D1^$VWBbl^9YzLvSL~x#LyaA>`*N5>Dr2^N&&M4?b#4 z1qxcnsq^98j~dSs1s!$UNeY|3zI6;83FbrJhYM)G^b5uq|BGJ8{Fh8kG6aZMPG* zo{gwo&&H-EYCc?dfw*QPsm^CQ+r3xV&vY6m-uSfsQ%7B2-pYk9xjX1Q=Vq+9q|K~n zd2*6-H}_g{JLOE~Y-w8?m_*gym9#6Fe+(7qYH^lY?b%rnn* z;@!`VDBKY0L}5KRZ892jpB(LPuf2>6fL5&DRdJ5k7xKEwK58mMf0KtgKxEa}y~9n= zh@jU*N5c`1)!QM|nbC#`N$u2dj&vTHHfnH>OW=ZXv2di6`VzbS@mN&htTgu*K4^+Q zwRaIs`f0RGS%eMoqi9Rq9MM5NYXg(0p>Lmx-qu8Y3%?$msNr&TZ<63t3sW3*=|pQp zBP3gFF2x#l)g^QQN15I-8>@<{qYf^+?`#IJ<*#+lJt*r9UZcaH@6_H9&Hv!SUbd+`i z&~p66aTH8EYVyR230$mSi1?Zx*iGajEUIFOG%=-fq z+6GA6igy5st1$p$c0W8tX-+^gk&&M-`aJ?j^xFbREPkDz|q4iM(Tg#9{d- zAaOc0c(LMi3;-mqixZGIC*<*q!%_rj0P9i;NObW5lHBS5^?YD95dFK5qp}I8WC;b{ z1c;*9QQED5o@M)C%B3Sm{AJ+2GLS?WGoza_9sWTGxcOrq=C|Vqfg%5V8R+DYeEA#8 ziCM-!`2*y)pT`Htub>xZd-@1D>SqYFnvTCH{vRCW&;u2BCgZ5Ma_E7ID~BGqxc?tg z1~C_yf08@0ZaN0%+?UX*wCPDZjdx}_JqPe!>#kGpU)Y&6|GY??NTKf~(6MMai8c+; zlpTp{FtUG%l%C!5I%#i*Z7J2J{^a# z-2X%j?(8Pu|D8RJ6u@yfb=7zVa7SDl<4ANHV+fiCuche-lG_?1!Az*#jnM?bY0wzM z-GIk+zAeIs#G4w2ASvL?GXYOKMkDEkahMLdz zHjHdb+Eq7*PHS=TSgdo$r;-;xb$r)gvl*;V{jZNfy5<{MMv7X6L`gJp&4L7tYd-#a zj9n=6lu?N&Z_89k43t+*sEu5TkS{|tk^xu+co4Dty$UfX-n+xRJ)pibM#LGX5Pra9 zhJ2WZpAgiGWx;q-hj5J3NuRFjTi-Qc<#TlG_R&d@kN3E{RwXt)Jpynk{NV;F7Ai!Y z{OOD~XiHfMIC$@i?e6+ru}P;^9$r(2Pk7`81w!Evv#?v6o+jS|*{8qQ-i0N*dFq5s z#szXW-4lxwagcMsLgF+aKP-xD(%Wa{b#W+CY!BK*9NvW)RU|SNO2P{J@QCs~LCreY zsP$cuE5GO*J)^0;b`1UOt*xS;eYFedXMgQ1d=bAXWXKVvun*-v zfqwSZE~KA*wfE4^{@Prdo|np!O6W~{P7JlDNGE#^PNNeEdOJZwI&LQ&_mYlnDIKk1 zv!N(3UY$aFr8`Tjh#gOC-D$Ec$(!>rN9WY26%4MU|B=i&?c%tr-mLN~TXA^MP zLYkpDfQ9YbTO8foKF^87*N#!=p#zPyy+B(}!9nNm11H=4KL$jB$|#Mt_9+k@rR@f! z1B%oB1c;6;Mrj>@Xd639y9_B3=v@Rzg2d#6364JUEb_=bapNyeqxa1v7)tS-Dwg+G zKuZ~-^SCwmi_;?UEZ<>CC5UnKERJVAAPMEtn<`uI7o}~)T^zACK+iL7uZcSZNH(tj zXyVAxn-0lQ+DSlp3=KxPTWAHqn;?C-!RqB=-BV!r@3NAaMm{xaBx9^<%YlK+keD!7YP7g13~= zlChM>$rpT!2yaI8+lFMVU{@l&_w4+7b0&S}XBSYk)xZ}7@l_8(KBaE=F6uig!f$NH z_&sYWbo8hdI$96sfj71vr_j-Q603Hvu?f#F;8Sp6BSnukP|_x%;C`~Gn9jZKQ|^Iu z9eu5G37iejqZ(C2z}fHvJfM^woM>&q@oYr6TW~zy@7aXFH>wAn4q82HV4*jU1`uL<1MmzyxD$woHx@02gsdUQ(_?3x#I+0GNtH(gbV`nA9AMesdRR&rjnd+ ztbsFCcMPW;kq5qo@)X6Hp5*u3HX8a`R1EKoC&S1|o~Ptpw{dt7%|&B`Dxv5-k%%w> zy2MC}q=W7;iSGiT6s2A6ZP?|00R;VwU3j2;UgUhX^T%=M&_0bHNe3ho`gR44ZgClC z4$!dHiP%>&ZU63*hDt?insP6d&bEE%+>wTZ$uKGoZ}L{ay`C6azGJfvCih?fy%+N> zHUPJt2I(L(DS$m7wV2;&{I)ddU(T&Njr1lUvZ7EH92d@SiuNnoLk+?2@ zyEBK-hG!FeSbRC;_*hKjf%Ew5@;AcZ$A5vYR9|-hMWoZ(h;*S{Z9w3xbAyxxG-1up zwjUpC`y0F2eiFX+aH+96(qFfkzGh-%DBGh_Lv7y$+qZSMeFHT;ihDX6C~li{TI~N5 zz-;2&a3(H9N5z?9v9C_{eU)ELnxm6_(R@d>;QcB;_LX*I3`#msmtpu~j9Fz#@2u`; zWOxm&W2li^(Uj7abO4Vlqes4Cq^~{G(a(4lP$c50I}j67Z`6>4G_wA5{e*^j$I4c<%!=guWfbSy^^>8;Pr6i>$sK+;6<)@Q&>0e=w<4DBi8y^J6a zl1>JX(vPC&ubMpz#l-7lO**!x@ZBI70;koH{y}rzR2&p0e}v4dykrVHo#^s)s%UJh@pM$5pR)UF&^xLapfRlOJM3BfphUlF`wZR(CJbfj-{G8 z5+K7tMz!<96&7$6rc(^Jj5K3&*0;L&!T2pd!UXEKnSb$0U)aNdFQPF9dk5B*^dpcg ze!^3LR`H~K8o5>9qutgieO4zn&>pLgX|MM2zl#BPNPQ#FRk*b}V z_Fj6A>I@;&CX@M^CGSb8{V26>Wp;vnW+&K>aT=WfGZ^of&^UbvCiT>8xi`^vwe*rS zK#wqvo>wq0y>BMFeAItr_l|lnO;}Of&!k6?$KHs)IQ}YO1*eAW-eLI?-uc37-0^6( zeU!m5jyiarIN)qtMqQFmRv|Q!^r`c)QXmrdG>!KmHx2LL`}V&?OJ*}Jme`DCoAay9 zrw$Bkk!cibTQpzQAK=r)b9M4El(0@glg9A6uHV&-vviq1VWrcstqU z_Z&fij1Td~qVexj?d|A2*rbmz7rJ6F7hY#%M$%je z?;!@5py}{+nGVs?pFH(%X@}FAVkSYS2=#HXj5KwI>?f)i$QR#ftUrdaVZW0%$&6Qp z-Wc5Y=JI}c6Wf^BG0a$j-~obWs|Nxx@?XZvZD%?L8Cfw+k+ij|jchk2!A+~{Ogwq& zfZulv#>XCH(k|zhsf`)=2O?0OSLEnLM0?AhA|nb;;4NV1b!&)QjXHRj?y-72BAS_K zOpi%=eRZVK2Q&YJlr`cO(IY=K(qE!!zh&fZBl2PFYA3bT-NtlxbX;MhTM4?pBVRY} zTxVc%+X_=1b#85kf~1^hKi*@;XE1%oT+SWs*b7SX99n6B5N`~Mj;<7hd{6@Dn6%UR z*gdFa`jU}RFw~16NNmI`cpQ0{90Q&tw;8T;I`f8a|K;zGz(#0$QzU(;8QV>V@O`bO z)K4)#^S7C{o`3*+yAXbRgmcF`lIh5UNxN3f#&i@}8bqA7ukLpKV zX!yXu{gF-XuB3f079*zc(V+8@|pY{m|-xIU+r2*XmZZB$00T_BXllqU1?9 zvJoFTceJ67l6KeOwSQZFR|fKXtB3qPR{6cf`C$Y2(CX+6h)deNvJGFBz(E6i)N>T# z_+7pc_)J)rFCIohIn(I{D13tvU|=^*eSZR<6U7c1+4o>Uy!U3J0uMY9xI-$&*Dv6R z*bE&QhHnH*zq93nS1;g5qnD3j8C^@yG%dxc4BoOwKj+FbqFRnbqTieTR`fwVKGc^v z*gX!Sq93ng0rUaV z*gnVUlq0^Zg>FDzwq($cKC#zZ-wDbGLY#CU!UN3)d+;XWA<_`H!TQmLJzk3UnY+6j zONO#mKLQ)ZEItv<2Mm&SJ0DGj!8#&XU~E5lNu<|QTCBWIZW0z3w07YRM`u~Xb?qSa z%)Z^}oj{7=Jk2e?SYTUVPtL%1asOcnA1wNjMF#tgMzEi_2%Id zT)W}%BA~NZErIBj@MGLcSv}`y{Se!5S$}uZ3Fl+9pft_tf;mgqgDzl8)G-xbEJ=Q+ zvL?k8E}Av({k*J6>vgm5^y%bqFRs0cItw1lDL}cJN0cRi9_10G9*~UhzXK#=G7SX{Xj@?y{-{!Dl6?bz z^zm9cZ}JEH9l_uG_&bWf5Ab&ke-!xd#NXfXN9RjE!ru*jzjh@u>hbD}l#4|}D}&&S zNG^)n;|29JvexqeqBL4UzQ7P2UC`J@7b@|Wro^qLMA`z0qV3@e(y_&qxYLvv{h1`T zni5|&CDP$rOUHn&-G9lhWVfC!h-16%Wx2FEevP3Kfap+fXb$IEQ@>?7R8#vHqMC{e zEAc{ge$&k1Er#Nd!+wUS9KU0T%0UN_L(37!mCA$O+~Wl?Y@y$?JSxuthA6j#48;Q) zdQtLt*UaOPna5!>k9b=iq&Jd!yeN%o{ypX=$1>r9`2T3~kGLTIKbicaE{OlnCjXcV z;{S`uKmLOFkDL4xFNnXxEs5d^y5REgd7@|?&A%@~{Z(u03%2!!jUb!%Se%123 zMhq_=HN5zyTkclC0Bu%LbtO{osIFQTKfE};sx*FnMb(1E1lN>!lB9|JN{R#L1+O(3|@|u$3iydk!G0(SQ0OawCa*tOL=-QwKw~P z#)TWb5SEp~kLF&FIw(Y&yNgPhoUEniX`VbS-K}}tn%P&X7I4?0N)+0f0h-rWSyG7Z zDy6)m##>a4@rX*yRm%MjRMe8JA;gPLFe*Nf*1LrHU@a^zsqhw|#zw^lI#Ni^RX*=h zUzn_CVYrFM_($1WL(-`DijqneShJ#XK|D3jN;1i)cx{CHCXI5^&`8dUv9e^DHO%nf z!kEC=6R<8BOASkE3{ojM)Fc6qyK8vOC^B-89Zd_fju@f}7ZmY8hyk~#m}ZUmMOEdM z=p^1M^v{x7lvPV9MaPS;E?HWFK3p8X43@Y<18HHo_tugnOT8;b+!ViZW&HIDRb1pP z8i83y1QmL#3Q5q2o3tyozA;hL*4&MmDjC1{qibLCH=m^Ipn5)%oXFRo)bla*dqVx5 z#;?nzY4ItVwlPI`_b3^Ay3q!BIHPmAeTAoUaxA~b5KYTZFhs8LHyEO6`ALRoTK*P8 zG%Y{P5KYV9VJIHZGYlmF`W{2%uz#N+*Mh1gOK&YNesNx32Q9=RG*>AMeCwDo&;bW+ z2y<(3b;$y6Z3&n(FliBv|0d9O-CA5S-?uP<4!F}w5j2n6(&^#WYN`}L(_$dPLCbKu zw%*uKAbj*h<)({h`q;QACBiY75^=rozT>?ymgIYCR2hN*tsraF6!}g?fl|%n=LLn`AHYi*ty8&RxS6Px&s|Okk@?0MKpFUvYus)VOPz^ zY9YWypLC*&XzW~6Q&#_ad)i~)wYXkZTts8%BAZ7z0_FP0z9HDh4&-%GaS@H3i(0#- z;lGzup>hITqiImVMKpFU>ibrGeOUL)J1nkwii>FMTr|#D?eK@+KOLmulZuOI>|8Vw zMmTQ9ovuG$I|aj8KtnoNOBd1DxoDJ+aAZ&-uHQyIUTksEDO|dU#?D1w42W=CPl>o5 zpYxY{EiSj>A{sl_wZKF;0!zyq4qrRc;##k`h{n!Eqf>-~#xA;AFZ=kk#kE;+5sjTI z9+(IR^;WuOKJn^f7S}6^D;_C!E-I15_0vCp^r^*lLU9p|o$ChX!eGJIbN~Hbg#z(& zg(@!7FnR(oR2mC29T@5p7G?=B2_`0Z)*A+_)tB#{`&dw~{EEtpX!_s};|egN@M}r_ zD=-snn0}Z{(rp;}zb?=LgSb+FK@|sK3V|uJVIBm=Yr}j8n6)-c3osjOm_GsYtPMj| z{elg19Wc!{%-z83Gcm#TA*)%v`{fCZhXS_1!D?{PMKtyr91cu`gW4Wld57!kEUpcT zi)idzUj)YL-MQ~2zin~7rMQU3&UGVmkuZTmiW7{fEm5%1Iuq?U+3(MLHT;G$X)`-q(J zOtT4h>e-w7zxhb0oC!=rArs-WDxJ2Fbxh+Hv_4x=#?{X%E$e9=-2NT#? zIP zku#ZT0&=Q;ea+EOIg~2iML^Ev5INa4IpOv3gviMbk&|-{a&klDmrW{rURjZ|)4GDPx-FQ1*dR$Z1`!)066<7q|JY(UVJv12bhLh zHF3Y-Td*lq&V%Pbvyy3k4rQnx9vw%AB&_x<_Q4_q`p~RO{p;q2(oHKv?1O4nbqYWm ze(D<~q57<58tM~tz2sYts^h$ZeA+cgvHNVRL-KlvY3_&4R|87!7l}c%yUq_YO`wfs zbR0bLP>3810my404Cn;ZG0E{^upDV)4NS8i4!|{l{+LraF_=c|)5tV5gF_|l?+JC^ zZwSfj5vI9W$$8}KCvOUs^ChN1g2?%B@vk0X2na2!Ki%ny=Ni|vq7cmT5KLnT=4&CC zXF@Q~*)WCJq*z`~{fMqW?!U3oP|9yjjMO}OiHQkt#S9=yxv1TucPq?1Q}RrcCcyQG z!mKiBzO671n3#hKQ*L6e9w_Y+0*1y>F0kS$3v<0l5M+yFxGr6{gUXGk_X2UjeR( zA(+J>n6D|!C{xZ)LumGdVE!C}iKc1Imiy2U%;*q|D+Dt&1hXUr^Kb~}8zGpVgkW}t zVBS}lF=p9Mh0qKe+`U}cA(*E^Fgq3IW>fMzAvD*+i;yc&Uzs782Nb5rl(Su7mYSGP z73Mw@Gww2xTWVtNRhWlN%wr0(+Qht|F!d(p9fheeF%jfU;96*65*22piJ7f1l_us< zg{d|%FDXo!iTQ`ZJYr%dku!>`!NfEuOtFc1Q(@+tm}|cvTwW8CqcBTM%yNYp2aL>2 zPbf^LiTQ=X;E;%-`MtvAnV2&QbEkxg#AGPUTobcMVO%C=ox;pCF+WzA+f2;s3X^SOK2n%e6LSSQ zZMbHem^&3_yoo7Pn8_xFVq9_sdco5nn4gDWer>}PE+{D{pV*R9SXxn4RUM4EwPv}w zeY+M35e`~~(RGcsm0Un|y{#nQVrqCsVaA%6YiN0cYov)u0fvT-`%TQ36^(`Y6EL)P zvM{&9l_9Q&O)eifH#W?#fFUlSNyyHbFb+@K@y9C{4Vc^Uppj2Um?*+bB+MH8nV3n0 zA)m#>j2(lgbvDdcJbl@Qp}ZcqVG{AQ!NdU2{s$UfkKa186t@l~d@!a27@A})nx}xF zvR9d0hZL8ExdHAMm0d6>*KL$L9crekji8c_Bb|Tk5Db@n9O>L@!w?r8d?zlU84rlO zUcul&D??s1rG7~Z^!MM8^Jl|c1;3s2v1n?6A?b}K*K5GgWnpf{s^JzJ=1ag(^C&U7 z{s;_R7A7TL^0F|`07DvD7{~Rpy0b7v3bVkJ{3~GSvM^WNAd)SN4;YecVcr6U24tTp z$2p9o1Y@QGL)Nfpz6K1*u`s^_hB{Z4Dd$rq$HLr_AT(1=nt8y`WnrFBG}BF*c12@h z9K%IUzDY9{7`iOXLPe8n(tK0VSeUmIO@T?{_@c zec2hIw3|lIUD0U4Tr^VHxn%!>sPhyT)7ZF-5H8uxA+Bo0#WXgqN12QIXaxSc*8Jsq zi51{M`v$mZ++Z3)Xdfs!f(h2S38@i|U^%iLB(B?T5;;sm2+ao!U4jXg^BAypIkFZe z>KBz9rXhs(7bQn9!E$J9wabxM3UOU^v*^P#gwXB*hAzPb%UKU>gd?5q_qws4V)#hL85;FT;y^v4I#8kXi&u^ zm|!`N18bKfu^pmb2riPtG=$JLDLH}(mh%KsBOIhIrW~#FkEebpdkT2a-UnASewl_4 zTFkBdqcFj8zK#UD9ErUX{q5i)IZQ(ctz5|wOt749Ak{8MV(-NDl#;_VgwXaWIf4n6 zL-V&?j>O)HtM6#hhiM3*-3AO@f(e%MB(QclvNu80Wl9dy5JG!O$q`JjoNpr4E=OYB z#Px=f!!(4z2W8|(Fu`)Zg#^1CiM=xuxX8{-!vgM8as(4B=cy1mvZp|7Ur}+TndcApy!yk% z($9g`ZUz@!L_>Wat5Ag@STHY!VEz<>xpF+w%OzadA(&Mmn4g7U4uxO_ObEyg=#vqG zc`yXCH3ai<2xjDM-6by!!E6e_91Ou+!t0XYvb#bsD?%_^LNI>}!CX4AyM|LjFb{`d zeiefGCAxYqDr^fZ1r$1ow;Y0UP1aai^>6 zeV@55!JV#+|G0dZ#T84&!9_H7 zt{(ss;RrN~FJCjZ&f-c{Tts8%`XO_v<(W2eUle?AsV(eTDK4V1b3Mykak$fUchem& zSzK=`E~2q>{Ro%{$7RHV>*Q_gzG87j-X&O~v2*{e-zn zai^>Fy9pmyT#FPJ(b%~*1A~1KV!^d(>|Ts80c-qRaS@H3>!-k2Cv1!7u5Pus_A4%; zv2*>5xdM6R58RIi9LVeHyOD^CXzX0i0b|+lwzw0~7FW9BA{sl_7Umj^J6$J=B!*tvcVOoZc7V!<`&x=}$IzM!~>#?JK%V64-jQy*;`YUTB3#YHrBuIHI6Q2uqt z{_!u1D>fO4xQNEi^#U*v4yeV~e|dlQvc+|i;vyP5*NebdT>WwIKq>btE~2q>ZDTGs?sP3bF#c1E>k=0u zHKMU|{R$Y_og|9Ax2Jz%ab>#*hi?Mo&(4Le3$7`Yi0gs$yZ2dK4K7A%L}TarFJK}Z zssLL2ecMpZD+1&xYKpr??0Grab1!kSfa6W{Ti4EM~)D6YYyt_|X9P+UY~=i0$sHz=;1<;SnI@_I#a5sjUznYqNCH@=<+BoqOo)B0w%%{(C|C2ZF$4u zDpg!WW9Py^7Q_{Mvgi*M*J{N@G^dOBOFMTy4ySA%?F(#lL&N;u@AFSfa6WwF493m?+6w^vV1iEUps8MKpG< zJ#v2(q`Tw@j2w1ZP1I8d(l6&KOixn5|7XI~STbxGq;* z&(HA(%|wqYE~2q>y~$jOifjAh)8ehXS``=3NF81p7^F?ia2qDrhkOe(@Ro6>tLD{D zF=z!^!f3@sG&AZ*=s#07;W9K>mjO8ap{bj{Ti|b2@i)idz2W?z${9(v3 zi|adzi)idz@7TE3ACCXf;@YaXh{n$Ku8r&9jFxzd>$i%FXzW~vY+P&hzVls+>o1Cn zXzW~vZCq>J5sNIYF2zMOb}kIZLACtEpzl9oab1ytL|jB;=Xwtqs~v92FMQnMx>0cv zjh*X=jq4w;9fF$~XuY>9E~2q>{gJt1ai=SPXu?v9D?@P+jh*X#V668GuFAa@<76PO zO2tJq;7Xe|BVl$LMo0XISIjjE_kr|iyPi;7Ov5R^0fzdbh4}|C)QT<44Ve;wu`tts zq0(5GMquJ>nCF2RV#B--49!s%*Ptwkz*v~Ofl08@Q~@)>#C#i1$;pLjuEH^?*{&#dD*U%ii+e3`0zyXgz}o?3G{V`s%rW~MDheW%bJ{!lHxMiQeEj;St*%%UWSVj z@wRm#y{Ju0cETyH$?4giv?*Xtr+0vpCsb7?PvEafAP;(Xp2XL56F=FNnVIEDO>w81 z;`uzA`o2I2Lt2_EJ0sJRmhMh>&G1zthpN(26lQ7ntcofYR#oHUAy!GUU7qa8DSCE> z+sdlErf7aeNl%%j=D9q%IjI?Wy6#G^N}f@lk>S5``TW^V4}RM#x%U4ndkR831tyw&BXsT!{j1+`U8wks#iO7d7VPOI8=SDHK5lbt;!$F!1syJA5ZUU0V+I1SZ2IX5FC zJ2%Uf;`P$k1d=B#!xu}CA$6Cr{85)cHfYpVE?KTAle1DY^qeVXE=*hrzCuyURuP%5 zoSgI=PwM0>S2{k@fSSNTK~;(+<;BU9LQIf4*_Ewl=T1qVV)aB6bP=q8k98E*EGUAS z!FixG9(U^G9FIFR3t#2@qKcx*1+dnH1!YAr-GUOUFqy8&Iq50c8E7VfKCj3NON$m@ z46x^u=E~C3vvPBhVOmjT@N=~+Ca&Bs%il_`koScxBRSXlPO|B`a#%PAGt0)Dm z4E0QxJ3~*;&2#6uN|FAoq^0Gir@PZ!#pN|iD~eXwQgdBXQnK<=(=&2iDK#i2R4y$luYd`HYd+VN zgWAhTpX_$!`an{J5pqe%lB()}u*KO$l?&6VDoe{3y1_jiLreK`mn(5@cyg0wI zoEil_!W1qwWy$>Vg*D+)QhntW-mJy?tv+(Ls1ul@!U1Z zuw(_k`5}*iaxGS((|lfx_u&LD&Z(+il2={jtqP}Ep09F2deO45rJcS4Jq&keZrHOm7C|9Lp=yC0zO(ry`QR94Vn0mjkLr0 zRX(#vrRKV_(lWDBJ*nu`YUIENuh5@qY)2ENR>1>1w}{{-jtL20m@3Q(ATvI(c!4%Qa>$Nn_^wYvAi?$wkHReOk(l+-Z=QqC@SO3ZI>Y$<0M-qDqz(RTqb4=uSTy^pqtXBrNjQxKP^6yi~HE zmWETL*5WE3Ic`wCkOtWE z6hTTQr<_N&sd@^kGrU%;&r)AaS>gPm1&hy5lgyrkig~zN&O=Sq7i-gtVbj@gpV73v z3hB|fJ##7Z_CRoU1NXql?S)L-Q#!Z7o{ZcRlhp{56Q*HStt}C2hHo7%PR#d~SJVVI z<>@pa1aXX|Mt|-#P0gcQ?mem7TmHd3J!ue3W9y5gLk5P*BI&5ywewQ)Ilmg|$+jX> zyC|>3kV9WITu@O`gt3c895v3|#ui~rVPL4CEbvJ)%%CP|s-8)LX#67YPzEtc?P25! zGiKQ-Vfo-}Nj%jmeJiX2OSW*r!?0w*kDZpTXU`~nplIpRl4=_1%+b><5vpyhMQIk_ zMVWe+R>MA}g#japgw%8l-pR>xATA|k=8V+b*)A7=F|L$U+{i+hQu#}8h4|!|YnDDO z9TrX1lLN#gdWCE1^gLLVrwKhLhuhDX=`&JhOlR|B6&`{jzT~k%G=zXpSXhmjxx{59 z6y^xG)TxD^O$?~0Akx`F33ty#rYd!6mQ+=to`cv~CG|1MAbh3=-UcdQEEhhxP`6kD zGcJA1%;zmB#Fq@clt}7&C=|J?6Rz=8P$_+9lTc3uL%&~k?_U1+$GV*pq>6U)`h}JfcY;hv0tc87Fl7nbWK3w(&^ufXg|4g>-u zi_1$~<7s)HwtTr85tfq7qRQfmlIld@O1)JT;|j6l1zb@+e+hwjz8@=Se7JT2f|^Ju zDJv6>gr40=J5?Aj$xbjfteat@`OFh?VWF>b8D@@BMB^$-ya^akKHC(ZFb2lB*fPi3 z4Se3ye27NpDf1Bb@RVAf;Pb?5+ci z6+O=OnCyFTLPAP-u_T8p_eGOUgILh`WS4t3Z{;(X<1>gpyFEUO@NUhcy93v2138;J z7}7*8ru1-Txv27~sdO8?FRFZ+V?R&%6YNdByY6ReG`+ayXVv?{WuHr}eg^5|&TjM1 zAidk*a-IvA5UZXae>lsXrvw@cy0ysjltA_k8eW4}LfscyAzAf8%w_9AZt(gecp28K z{2rKk&8NrJSMNFX#MWD0JuJ_9%_uxiZ@B~;!M?!jHKQKcddn;9;;z?h!f~86hme)u z*|X@*(pw&3mWI7%5K7;h^d1(Cz2*>}r?*^sT2c0zO%F`HY%^}rGv767nsN@0GQty0MUftEX0RECPEBkX;Om)xk z+*pD$IsZjZ_dG91La++k)x+9f=eIX13Zh#x-<2ZQ8;I=x03Wg z->dlUj@()0hhgX`gHT7VH|b%idlDVqgX>Lvj~qQ^(S!HaTOK{L^pr_h=dHIa!ZReN zOrNe#n^EXa$;#GoRwQwzd4v#$e?7V zodZnXoUo+GCMzR{_x5qf#4Za8WToIhgU$zILXuNc(s?&gPOR8jvva4<=rJ)XJ6q34 z$u7*8mXe;O=Y*7D*0kK5jKWzssMB2|buc;4m6wA<^I2ILuE76Zivyum%lVWy4w%y! z%X~ zwxyN!;-iX|n)_R8@AH~-CK;4}@BO~Jzwey0&N{!n_S$=|{XA#yLmxIYi4TtCiUtZN z%a?AZ9AVE*>zX(6|6q^DPfMb;In|N;XnyhEWBQTq@q|k@gyXpVY5HnE?>(L{IYWB! z;j;F>-{bL&fDKd3HAl#kW{kP|S)ZVPfp%f>5UDpzQIs}@Z-Uy_wRber>)hNTB|P%t z9DHX#Y_Svurj=s+Jy~d%Jx*2+De>XqP^K(AXxU4NCjN9htX)|>a%~}gi#&8fIC<+p zBI09?q14psKsH=nLc>2>&OMV`yZPt8^oQo$LPDvQA1A?MZeGltJJA~+zVPDoTxen-`Zl8sj+Y+=&P@eh63}# zF<)hw{O!H$m!MBl)**g*Z{l=WIl81eUmeyth9me6SnJq?S67xb_pZ`BuddX3FGBk& zED5ZNhlA*s8QQN-VQB_0US!*$1%8#~qQjyGg(W_9^Wt@ZKqTM`babs+tH+KO)}R~p zVR}@uuZD$3H35J9JS-xU)kWpBWS7uo`l{}X^~qIOJ{hg^`y&ybNM`Q2$^I3of~9;| z#%Eq+6bSh0{jr)@O)&1GtQy`2ga>K^{_6UgxKB>}RhChug;k7LCdj?UGOjyK_d;Vl z*Hf()%lx2iyf*5q7C)Eo*o4)J7Tv0S^QuEwn_OF)k+5x)4Yrguby>|~uqqr84244x zpYXJpmQW!y>f4%ufhu3H&L0g1vHX-4?9oD7vFOp7gIU5sQr1)j0)csc7%wk5m%d@S z&BHCm#HDF z8}o;&YkV1j2CGprYU^qv@vyHBOG;(HNY9lCG{%+XT6c(6hGCJ7o?-A<9SKJ8f&IJ; zkIgHwlwb&tVP8#+9}D2?QBa&hTjz@8Dch%$muw2w5B#3 z(u@l$+wmuRbkP&NWUZn@pr!L_$|$22LIlGxEL{$x@(8zMAsURK8%zDLu7ldz&dM^a z_rhka>l?!I`#P*si`C5YH6+&KJ2qr|cAvVxs<;nJ_3A?5DzfvnnpUXq8jvAIp`x<2 z3fecJ_14&^(^hNuxL9nf>OVnVqiN4N>*96(cpcWGTOI`Je8E5f18%B)%6e(#zNRN4)3wUf z9I;hl1%e)t-pryK@rCN@Ypds>g|g21Lvpg2R!Zy1DUugvZ4}@@468C~>SKXwTBVh= zv}&TELWYnJtVq_9JEMuL_SHv%HL=?I+{0g~=SC2vxIPqxePNpd%UA43h*T1*S)BCO zy(7}dl0YyLu9k~h6TBn{ZL-kbT1iudh{#}Rl@=SW%yn^P)wL1qEKySn+Xz-8(=r-^ z=|O*_HjL%l^ql8I(BPPCq{@$0zdjbOi^Y6YOv^uvHb&+kaU#K5?BWoO_&O6Cn#`GC zGaCkUTQNO)%))+OeW1237_5#`lWv7&TA<0?P_>}>)|>Di({2eU2=n~WXt3Vz3pArr zquHYJHC>qP!3}LpfbVwKb4HkxD1eGT7!5|M&|vv#AucU?7Rzw3j+xdaTig4pDqlQW z8^0CT*b3^MR*kR$Kx#r>P zu-J^T>#+FDQRuK9tOL+&@XN|)%<`Jt)EQ;d%gak=O`UFHf}C1fI%CERuXon0vZ><9 ziqW+$uX1kHy5^au(Z67Xo6GSHP~yLbPPkj~Y&I}Il{gaX zggYDj(?{cEa*Px9V#&8s;CvG60^TXU6wbUHKHvUju&}jQSWEHe3M?C)|19CrOCOIpM-c2>J`)%e2`W92Gq$+;;F!hEeY( z!-gZ1U|f&s*8s%B@k?OdkvK|EAC)&NjO`(o$303`?SPTdDFu+V9Lede*>5oB~I9Z7OnxLc*IVK`?sx`AyjCuc>hXwx?>UZme%wTwN7vYK(`_ zsjUt*G+t49zJr%oW3UPDM6Z}SyVUWywn0i$RVc79(o`G5_5qHP8ZceazAjPQzOtve zXVVq2s-~(<*l?$PRYL;XAM_>=cvUFuUs$`KwmNY6`RjVuuj=keW^iMTix7tlW_@i{ zoj(?8Jl{)&;0+v9$mS&~?KG@Jyg`F!T zeRYpe=W6|hO`>N?*UB}@<;t9~uJg%2DW$)^T+y$w_EkMyyRQ8hms2Zzp$ z4Q_Nd57a1Sp?Y|c`bK})Gr)leA$?DJ-U;Qqk|(d3zKEsvJ(;iWU%u=K4{s(Zq*I0n z=}1Wa#aS^aV^+fmJaZ4q8ZB@&l#lS$MJ4GXbRDf#;YtYF z8(d#HxPJ2B`bqPdy+(-xkq#Z>JM~C^=$ICJFCt4mCPK?uIEt0IIF~b3i*tyn#W>Gk zij-j~aZMaju_-ln4W<`1;AljmHwEM~10}j#1E*i_{DjbLZp=rY^ua z$`qMLgeg)?Br}xgJ6zDWsYprXmF*!Js%z2W!FaK*6oOWd>al%0-XA&|U$l6QVrZzR z!J7O2N`6{N!aD~ndpk^{}4bD|e_24|6DeC?SO7-Wb{gYLH!GPafT+;s1eZcVlp6RMN z+5mNw(znT@6yC9i5&7C9d8J%rxS@1#!{osYlLj}G45spBw8pE? z4yFnaVNjq0+3 z{(_(4MtOv4itSG=Qd32RRR{Xs8<&n9Q}-?|ta>88sFBq|t`;*fm@3wCb>XqTCyV>% z4fefvUg6D8Kt$ogX_7Wrf~|`o@14S3KLl5eRf(z2Oe*bU{w)2vUb+vnO|GocleJ9%AWF{`C(sezb8hAboofzkEmx z_HP)GUUpP{u61|e!+{U_8{F!%eFGkd-RbJD8wBqd)9N!I{|&NlzX##H?n*tUhljw7 zpuR!d*&`xbdqpz#?WL4d_p1vzIp0B;v(@Jd&+{Si=OH`~?sfNEkNZJ<^#)d8xRscuj!nM#6M#T3=Cjq1yN z*Ljph{k@*W$&<9E$)j$`r^4GGEWnW;7ZsN{qdaWilbpN8BW_V>M4?7K-S=cc-<}Wp zj*i@L7FB?fpVuGC*V3`z^@%X0*S)BcC35r{MF@I5AN8h|E9tz!8B7n(fZV(L{xHh@ z#NMOsbg)R{28#!R-1svi9UPCq(?PF#P<0Q+$I0ySAl0<=p>Duj9L35soC8czYKEDj zrdu=#luA+NQErH|y+!BU0g7_7Sh*Kx;p1UYA}0qx`EV3dV~U8T{Uy}?`q2s(QEeM4 zM*X_%i6VO3cX(XmB2++YP~wgac9#xzPv)qosd4dio)*mzZ9pz6lA|Jb7NIB$UhG)e zD}7InPcO??kEBzFXD=-++(lI#tiIp#WA?VCI2}4vc%GvAC%N~Py;At?(9wR+j&$hl z*-IxE?z#~eQBjn=v;Bpw)oQFr9k}G#bnJ*aYy05Fsi;cSEl1Sq68FKvZ$Dl3g8Laa z3dkGo!iP_)C>W*AD*XHtWlwD%EWBfH#q-I<2sYfe$5Zj<=DlicoVsuC(UJYdH>d|u zxjlk_w*BJJyU$G+0hvJ{)h)#pODAu>Sxp^Qp?~O5&=neom{cGVx7G~~4(bIii>#AI zy#COc5G#t+`JhCxqHGqKK~Dtb)1Pv>Q}fh!JsR~%oR0A|ijkxRX&1Fz`~Vgu+n+`1 z29HyNrj-{zN{LD9k*BqbSsU$m89`7cfQRCu;lia0o{-@)T^r+1Zu! zuIlQfeY3m`{>5Ir6kMI~CcC`x_Kn^R*iPHKvb)=Rh4;di(VAb&wE%b2Gs)u(&r?ik zfGOBrtD593(7p@9$4!{d)OL4d+-8dxRO9SO>_!}h#>#cpTin6G265rSN>_41mvNwk zEB5(K@mCi-Iywq)`u8Yb?O%{{kxfGlr(aNc+EDHa=>{oX(inaHiCp_We>Y zGUc4XnDcNZx8pmXLM@Ytp?cfxqA4&+=lq$EAyG3iR1V#)?KqRQy?f{TXln^W?&IQu zvzKj33@HUuuIP!(B{x$}?x;GgdqPB`#oHfa+jRP~0 zPQ!dfW9Ysfv2pgZMnEytunVBbPQL1iLYj z)M>~Ic6DG&|K@HDSA`E5m;;-+PfRHP2-s(wq~{n!5tctEg65wR z+3-K4A}|PNUy+`~(AkM7n0?ZhzC(r-LzGFe`ebiPj}pgk*wm^HQ0|Dd;Z!Q)&67WZ z6l~%jooW(Q*%TQjyR^-jv14L7Dt>_-i^Tgmm|)QcLld&WV|ns0`F6?irqn54uFCGQ?!elUzYDn9=W%=;3j$2X(CBAjP3>KGj4 zvf-}9voc`5ISh{KgC9r?$s^~K9}B@B0B$^0NO0NeAu1N7z$})yZ2FPBW?&x9LEh8A zype;ve*qJpLfQ?jUkfm*#AVa(ACPe;Fnx0DpND%RT?~7nYU*)d{v>f$J233!H^7}z zib+izD>RR0Zte<3i3B`%vCJObRgRJoa)Q#@wj z`7ePRGe-b*c@FydfQd_7HvQ1GR;~o*=O!G7>mct}!2HF8bBZs?djpsjYM9_C+-&kX zf!S)pWs|oPn17jY+2oC!i@q@qa@pd06&{=i%(ayQr{^!%_eT9fRr4NT4ojS#&Kd2( zWsrBSPf=q2q2*1$<4*$fki=yxZ?6LP8(<3Xh`y5)(M81`TwrjIV^G6^dsCmz??H*$Queb5tzDRa2p_I2{6w}9HQkIj|;$eH6YG7$Yo0xl2;4N zK8YJj-ammE*T~|s$~zZ^=>ul@B7vKRi&Hw2eho|TSpp7n+4P%<1p6;wUR)}0g}4~< zjQpT{TXUtNJcomvZqFI@8sT08X5Li{8xpr1m?ww9d7LsU z41EL~ItvH6Z1P^lvtI-Ay%mJYKF@Fj2{xe_b4e`% zHvt!?cyxh(RYFmo#z9W+C-!bMy&Mx?tCUb;o85>~WeUSe^n@wF^LsLIJWu0*+mj>i zwH$HztIf*6ZfPDVBV6j1P6lp;#FAY(;iz3r0&{N;xQBrG-7q*xm$xMbBs-^YNxyMz zD8o3&QM=%TBmLF@^C^kT77uDKzYffwC63CalROG{OgrYVaF81++!eswDskDuC3*J( z^Wre_C|%x^7z&r1lYTAWpRor0AspmR!jTR4A~3VoGAt{O^!o%b`z0=0d`Z98Bt}Sd z4wvNRcPPpn9OSaeqkOv(m>m)~RQi1em}ewzD0zp08MlsuRkF#WcubZUfpm@s;o>>s zk~!cg-|hnLn8aqwx5>aQ>ckp19OSaaV*#Fh3Yfo1+$h{T*#RY6DJr*nsDgu|dY5sQ zS`Bp~J?zF62f2J4K8Lkt=YiiXF@z(>@-pVzi^0Dw2OP!kOF7`sd?;VG;fieY{2t)G zV#C?z+s_5=>p9>~1MWZ$xC?-LB?lZ0D?i8qHw(B~*WhGwPU(CFo_FVfI}^BX=775p zxF>VKQ9S;d1Fj0V3wm%eIbV^_mTv`kzS@Sf=UWkQy*c1WzrGxB9|!KoIp8S${*nWZ z`f(pP;P8s<|KBx?JCP{!KI$6AR_tWh-Tjf*FXGkiM0^X)AHjH=z4WhX@5)WyX6$&j zx)WcsB%=!Q*q#P@;BaY6^9JfS z(H0^a-I-dqGSMUMT6+@LXnfwq>r(N9ZRR16RjHMUOHE4fy-8SaTXT0p1`f6G_d+2p zg@vuS*F-Db&3M#%={kIw(V;BGN9E85AKWAp-u6x}Z@}QizBb;jRxkg)x>qJA{YSvt zqkYKZZSCqoy5i%bNKbQ1J5t@df%Yf!_O`bq$Zw(rpQraG6WtROtaxqlwsa+WDOcK> z*C!~HmA!;Ywlycc^ah*OXsj9Ju3gI)kVr~=e&eFWOqKlGp^$x(erJ;@PedlsqBrXyF2 zCj(ez)sjAigfG?C>Ez+=yJ(Q}@VO^?w`juil*>R}1fEzcDkw7DGnsdtPL0R?B<9V= zc>z<6IE&95)!31~y`H}Uja7OeOAIn^Qfo1ohdSm5>BEN zs2$9+TkE1P;Gtr%)i=_qBmH%r{dv+p>n!Fv5RQ_MfiQ)ROI%zQh|3bX^w+Vm4up9K z&k^pgGudpIRD)MxvtePgVPUg7w$U@VfgQTd?${|<;OREIW4F%JZFa{!I#0LW9rx=z z-FkOCsPlB|eTIyeRmGA*!}NGnEt%cdkbYwEi!i%V@Px5d>J+83FuNOc$_syS9L2(} z{^w2X?f`f3&hi@V=x0w&^0U8D2oQdEl3k>=^oZ?a>|a;(}}wGJ2{;)R`%~B zZ$)%6xeg$C8F5D4o7I|>xlXQySIL7#CmCkDbCF7^!6C_^6q&LU_`@KKd{ z%0Zd7<5Q-RQ|3e{bI?JV-s4jybi$Om(?OZQ@hLOngekMjL7B^sPnow^#EHnJpExK( z?@7_PKAH?XQ$ zN$e26r&$@J(zq0Ux;PPMf;t0Fk0bR1$DR7DBdh12+x;23QH55^yh)&_>vJ5sonzMx zi{sIisMwzz+c%d64^)XNV%fFa7UwK5CUZFG+U5oqU4Ou_?FV*SQQuP!_V*TC^6X=7 z$m(D05o_Jm@Z0?j-gMwM{p-DI)!5&q1HV(lzexvPQ^TMSso~esfx~L}P&#l#4IfSi z-d4j$(t)G2fyI-Mi}6~2aD`Mg*piO4r~??r&`v%ymZrgoSpHv)W$pR>o*U?irjz={ zV%6==6TZs^XIE^UDmDrU=Bu7Zu$6+ER}uE4Mrm#Mn25SCzu)gl=c(cRbn(uLip?)J zA%Qr!u?UX7Jt*d_f@rZG2TXhTu#}M^bI-t5Km7p`fei^fxAUGu)H~BXaB7`!%~tA~ ztvX)KbPxYCnsw=#bsw*0x(93TwC`|{1Bs#512f+TVy$meIRrMiLVsy+J$r3 zo^_?!IUkx4Z+tY@v9-u(Qn8I5(;<>udR1;W+=AT4D ziERNy|AzWob2;&vL5Y#k7eNW@e-xCTpQ^Ffv?^Awt$%0h2+>Gc)V@?li`ts%=npv5 z^Fd|l67?PKSo8%vw${RL^oMrJbnA~DN{5cf^h9Y4wP7&mLK=m3;!$ByXdKA9aGiwf z{kYD;^$}d7xE{cD39c`(|F>}0@fL1TH+Udr#O%D(sp>P^_oO^)Jg>Xmdt|DQL2+IC zR9hO`p6raf>%=A~2#kgF$J%5j=u;pxT6&@lsjDcT<@g#CAoSsdNZU=IMB3g9N~HY5 zpk{I^{{)mszx_JZAIsOe+FB0u$97u#+qc?sg4#i9?TUF7xR6OLy5LO$C31(Fs#CaD zp9U&R?l{kvy+QkZSnI&`S{>LQJJRoYL?mQ?=!jJ)yPI%W42~Vk>A4gr;U$9dq zxbO}4-~BoT z9XS21&BG=1Jen~)h0Sphs8gBR0!j>OZUI%uJPy$4FdwlM ze4rdV%%^jz869TZG~33OsRgvBTuoW6xCgM zy!Devskoj}G#emnZmXVBx{cY>$U0s>!eWOQ?hKhSesjurjFdTz>?tQ>GTD&yKV-_J z9a4tkZcdrT6O%H3v!@L0y0`tEa#41Ljq1%p~ z+vXRj*A%%I7tG#JlwNqWFt(wn>?w7BI`wwpx1abS6}ET(P`G>VyDy)7KUI?h#k?lxY|>=>t67&@gHr86)C8AX^XdFL(!Hq)ie7&=f)eM zRYSg7?@>KBV4JGfudaA$^Fs8$D|(8y#MED^2QN8r$#dvLyMNIzpHx%^4--S9Ze&7A_aQmRRMoRNd97;!5+&L z#smFzC2THuD>D$TBH{FMrhs0~jFJ!%j+mHFs{<>~-c}5Z#y`FFf3+Uf<6YiND ze3<6s_wTri5X^y61Ez`kd+7n(@_p35yO?#M_G&FxDfDvZZ01oNMjO@TDN#^m%p*$_ zR05QU2MFaxI~VUbo;pN+BJ#dX%lczO4mH^6bSJjnCbB8n(klc5mLH zcp?>ZH~+n9aJ}e5l6{BsNsdUqfv|^e;00-Qit1Y98Y~(JQ-=+_A~Uauc+2-q!P&6o zUShHnYLUJFKd2VX9REM4Rxhh%>y8XH5~qzW3wQkuN#1u|fl_$WXNjsX2IMO4%br3D zqFyD(<1e51@whP>S8EDX*I*pA_z^XB*w?qW4MSCgUg0jh^;)X&gZU`BALk-5*nO1vJ~GeR6<6Ook{vJWy-Q#wor+unqkAwZ`WW zoO#&48iLORuUNSsl<2s>21<0X-UB7NSb4yR&ZubufJ?N|2OVk}fXdKm9L~9*#Gr>} zAjfj)o&+k(pa#&%&MdM zJ=^*{+bJx$-zsJ4N2qU{v-CD3t2s+=M0jF8fkq2+IMKfgN{lZCK#45er4H#W zw^OI|{+~*0?F9yPEzF}4WAdN{>Wkht&FqL2PJ?nxVf#n~aveu&6F?N~lu zma~%7nXn8}%Lb*L0zje8zHa>1O4LkhjR#F+f9SBNisI~x0BjxovBQ`l6EtUmoX?I_ zTsI!O!gT(wl2xSGG*op2$DN=#k?f)x!iP?WrX9ep- zC!yD>|Eqe5xqs4T1)bOly}DU1)lZq2zs4hKIV}VBjRsOwlhpGR6nQ3FH9PupVidMp z&Mrkve32AEk?%|?OIQjzH)3!y)Sobxu`ScMN+`uc0=#9~lAqo>Zu=m$Zt6heV`Nb8 z{?THO>2N+hvvCU?xitLF#L{>sTzu8*9SD0BWn1My zxJ2Ad8XUa-`hoCdaaT%rtpnld7*d93C_D_g2#QuyDolccJ2j;q}T z>ZSt0?_+)xQ(AK?4kRyVD}ZIUkp_Hn9PlBD)%$?x-$7^5z6?IR8?>s@nFXUc0*NV} z{IXYWc;XI_vYkpVyl)_Mn4ZzQH~dK8esu(T0!0{th8_ShnurHq&r2_RAieCt{$1oX zz3h>l%YM|FUiMHrwiBb~(5*abW9ZlZ=u4ehQ#Yea9(QNfIv9lJGk(k#4sx@inJeSklC!PA8nvbr#M?LBF5!6F{fE2$UoKd9VgRi^OsRw7Lep9&XQ3PxV_y+FQ z_@rKJDbJ~?2So1CyDzoQ1DolupT&^=`Z@F}i|N7j*v1@p;`3vCu`9T#-OLrq-nZq5 zk~$?_iEp0MTMnhS9De;A?A@Lowf&W3VY(u{>~O`hBdO7NiaD;(;q)vu^}GJqed=$+ z>Xz3ch!PTrrB*=kTO%0cAi0>Krd|po-Tr#u1Dfi(PaR{8dY&cfqXt3`BAQ6kooW$2 zx$vl`B8^^1FWgOObSpTcDCh5Z9YD%on#&lOjy>`^-rIfOHEqw%(2r0BBrmLpJ(BX= zv?n!Qe5CC~`s9^BHyYO)Edvq3YWD?V$>&4U%Gm%C8yU5Uy@*d`hIX2vm6t{KVpv4aX z@U5-nt&rC!o{5iJF~WTh z+im%j6&LgQN$axd{6>wyz`M=xB_&)@bfNsG>K0Qreo$h{CJIVS*~CDJ zDI2QT#gxrzP|G2unD=cL)DG}gFz?ek^?6V>9U8nv6iV9S*LJcuB>BanU<2t5j z&Ol77U9VH01~r|Zeh23ick3PoB{cmpsJof>1Sp{?waG%$-+~hIj)0=Qk&BhhKu=)m z4p0{`RqWQZnh8pDXoEU6A5@reOF`8zwHlO=_ia!@${wAfeTT)C;2w-eO) zOx*{nkty1RSacc>f)XE5{TfsmKmD^#{R5Qf?!Kc_BSvBwGvmg9n#j}{IyC{5c*jKh z|8C}|Ay8|Wst1)~>Pj8A5>zdCdCE1Qs6xbFuH>uHH9j@;oT&0)claFPxxT%#L~otQ zIZU$s?aOx7U*Ozi>((Pm@+;9oP(o{(U=T6BSf{9~FQy-+>(u2s<Z%;APR-8&*U`p zeou{fWV1SZ6kgzDe(ErjUbgqwxzdGepJ{W~i%LZQ#KAhsGrn@ToAVx(r5xn>K+WY? z&^yeTOf3f`az%RwtY@q9yI-1tD&`k|A{%H{_$1B-8ae6NVEt_8qs3XR$5#g5VKdZU zgxljR-i1@`VgBga2c<;!pW-Yg(vCaMB7x{-rxE9};o_WihAf>rbjyw+WD8ohoAxCA zY9F;0=>6pNZM=GPYHHt4c0;z3Jf#h1(FUOH+TZsZ+_`LXP59Ii%hSi7Gcw>iqE)@%&^&pJ!0jd+|`(q&h!eWpKmbHRII-oD*@gc0~Z9 zkAY6cVScFgv1pc|`o>rI^ON2+;vIEX?PP<9UP90;+M^!CU*23otWX>f@0uzGWtFz= zC((-#fx?@c5i!cbaE}`Q&{xQ&|7ozllgN_PI~5y zPR$q5?cX$Kale0-s3s-LKd1kiS#l~^_S`fXYU+^si~zT8-?Ozqq{1z+w{}LS--3{T zGOGk?B+r+8-}K85Bu}S4OyR?OEy;<2;cV`Ky;g#MAv}c5s0qACqU7L{CNs> zNkrFx26>`u@KsRT*zdPMiDvO2sA}fX_~b06-UM|WOL-TR2<;?15oMbibP+DSJ{93o z3$c}bl!FrCQiCqStpar|4*XvX=NlN;07^)vF4T4WbT!Tb*8@s~u>q6_V=Jhe*l!;w z5ynnXA`JREiV(%ht2jrQq7IOt-UTJ%HmFmhA&a_P#fl%)%`7>Lv(Rb{D4_v;{VX(C z59$^id7L^zgKfAM8cHlnD1npo$S%p7JkHq9c-r&eK}fz&8D7pTMSm zf>Y&M3vuE#qu!uUb&3iTA1$P}9OD{q+}1Io0XLpY; z+(ni(;2V!K-m>d&+kGViKAImH6y-+UG@c5KUch;gkNo`_7aBHjgTmx2)~Dh}ZKBi{ zJ|4}RkCTT^BMKi^=9`K&W_$rup*)voD79q~OX|Pv5h%ryr4~nLUo(Eo?ABI%PjM3| zjPW>CV3<>e>i$XiN}#F)-#Achf>am!=~6epuv|+JYMXE5yr3@E7N)5CFFpcDf)aUq zJt&c*+d=hn;?qkCVKujbq82GnxkKlD2~>#XJqBtyKi#80eHoOnmDfOhoN?#j9AOGQ zB7C=je%kD?XGE#~&%EiNLT8lV5im~XD z|9={?wJ(;fU-BL@Wp>0<*#AqU7d~>>^$e~&o%usD(~5mEYtqY(y!!`CK*%Z1vOV~| ztnd?i-hJuhz1nyJf2KVoyAJ5qc-hMN)R-QJ7pZuys{P9lo$}X5(xeM!mt-Ge_IX>+ zDtiYX?%*eQ`(@J`%MbSLZ>u1ZpIg$9bUi>NC>@ zoZn9AHt-zDgAE+Ol}jfI=bMGGBPg5rG%OzmkUBE70US0A;4H%c7WFUjq)XR$L`{vk zq*uz`(ei!fR-s?Unk|ta+bMs$B?i()~jW_k$%f>wIWurbBLk7?U z8_1gbk8`dX{gSl^SLFT;ps0DuQ>gVglPRhLjocRlisyCQpFxS-e+QJ2`$zciMA>p* zzT2aL_#t>xjCa2FH)g}<{$=*u=U-sbs|xB-D46q%9Yv~x-li^&&OU2v6dxk>!wA*d zyT$Z7&B3V=o_jC2n{~ppIi}9>+1%pjB?s_V(TW3w^=}1nuEVE*$12X+{G;vf;5(zw zLB5gQPNNWY*-`%EX$T)k=TmI)A7}NTv=$Buw|u2{qz6Sl((j)S%HKNc9nw;G7PD3X zo$3K4J6WJ)CkxakIZ^sR$xaq1(Z%^DDC&F_D`at^E4fFfeg^6$erg-Y_Z=SZ{PN>9 zHB~^fmhWsGg^o%^>E;XCsFfT#S^9X+P{EfAdT)Rxl|zTbyrz1zpB?`Di~V@Vp}H^8D&$Z>g?mdmy`J_w z2p!c?6%krYB|pz7466$d(PFAm^!+6kQDlFG&kFvBXQ$JdO*|En!p;}6O7y@v3AK<%y)k%=7u*}BS zdq=e4Z|pF=EBFARWu!I!A&rncni~962A$?F5m^+cuYiu!plSYGQ4PH&;bM|{XXs?{ z0;@mtySRLbh3}vWe}KvJg4{mJJGp=1OGxGhwRWc{nS&4Cg+RA$IawL}0a1mI`#gnr z?p3!OE`0bYd@Wm0`1n)v<62JOZ@8uOGu&DBrVpPDYESWTZRT*V2$dc-;)ng18%8Q; zqI5+-iPBXE>Qh|08bOKDwFHzXUDT9{dE%X*>bWF+S?B!_RFZkm=)8Q~uVmguIEz^~ z8bmcQuNUVwrl?eknZ?h7+Q7Uo>C_KFZDQU}b?Vokgf9O8RmV@MsT4f=&_M8lphUew zu@Q6X%Rq_vQpZ-zskeg?@$Cd9;@byG_cm08+&F02*~Tb8W-+3rwGj6Q*# zqxTP9v`xO!8+4H{G};jqwHl(QaEVS`u0O5Ssb)~3AJGabjws|Q)Eke#6-Pgg zT{v#TaXXGr;^ZQ>o&L8>7k3os7j*8)b5<^p6W@RXBBvn?2C@55`>;@r<)4NP*a>zen zvN?($`Tqp_DgyPdDo-*H(&FpuWje6x6qvii7$#Q`F=<$kYl@ z^olW$>xBP=_802fe~-f@?H^)_wEsR+K2Q%cMcV&>DboHCrbzoonOXsg8ZWz@=bGa` zV&7!n^ioySHy7ue8-AWCvf&q)A{+h%Q!7Bd$kg%X{V&-UrF2YBX|0|B)8+uz>mMyF z?Fs?xw0rGJsX1Sd?MoaY#r9>UD7Ms5%u{@zUSW!2`x~Yxwlo(n>Xwsmm(2mBYo=j{ zM^4jB++{zTHD0J|{96v6H2xh^r19^W@`3sTQ>5`9nIer}V~XdX& z5W~8$K;&_Wpft?mn)_s?sJ0oyR1wY-nWA>}<4ldi`BJ8+M@pLKDS@t3C-$CPjh!Yp zUNPyymdO{kTzu(VNsPv>n%>s-j)eEZ-pRbzr1!!W#fuJgXr5Bn(nc$*R;_Dp@4PxGcN|@X{f;N_PMLF8wRLrOCt8}s9q&Uqg?0tqH0fdm zn_G6R<|kf%V`Hdcfj8{0uJtx1dm!}k^Dpc@zk+VCE9Vs#wp4g82+%H;AV-TWJ?E~( zKYE)GK>Mo1rE|sJos%y1UU7w22G+Gv2CF?oEU-;!M+XCX#nzbXu_I{<)Rahz>w771PVS3Giw!~Bd%exc%az{lj`k$}U)hq_=$-2=mG|9A zy769gkykv&{T!K$)*P%$t>bJ!#6^^3GF>{iMfD-zM!xydBCPx^nFRF~)E-LEe7TtMp zm*ML{!9?NC^fd|`x9e5;{M-NhZHFXrq1O%M7{k=tI8y~yYZC$9GeGNFoYLU^arnBs&hbYZK1o|7WMqdc1(G)hvgs)a|0zGMsY-QGEE5 zDTlsKGvvJVm#24(vB@c73^icn`&#$Er>---qUSz&ScEca>m)@oN1Foec|EsIm;&JV>UUg?J)78PKGsJXWQh^ za--q&p)z8XbB;~Uc{#}O+T@&PlQV%aSI`+p%h*u~dw!kI7(!BQ?)k@!YbV&`T)-GA z^<-mj{^%c{vD+cl7*;#Hz$S;vtlJgCnZoMb?S09v&qa(e+s}nIIVkXugQkV$yt*=s z1}W1HC)wmow8^=cF{Bm6>yzg^_FJ?>8T_%Rw~(45a|+^Tp8L0X5<-_^g%o8<^w4d98} z6@oF7MV$4myCKrB4S@+V=0=<;ojpc zfH9gJDqoE@IaD*dT@T<)ZQ+&WbxZAX7BPlOE5+;aPu_U)LYth$j9Ecv96RSG)=D`h zdtSmAv;8c#$wBbYX9b;cILo<`F=jbSZE~(+%nCZ=aF%m5W6W}{vdLM-m~l8$>Rx>4 z{X_P6p}P#7&2pC6AH4G>;ux7}JV#0ge}T-21&%HhmI|nTRv_ezpDH^Xy@f1fzX- z#;nc()5e$$IFlXz_vtS@W)4e~op#1tfHTGY&Ch)uKTILCdAzfRF`Asy3(o$gT@K6_ zI-BLJvB~LR4E;2ddJLl<+=oJ$nTG2ua_-qS>R^XWPA6k#!Yhrk4y-$6g;|cs(=NtP zN|GHulv;J4S!aRi&H;mJ0`VGJP7hpNTR@qr&@rI4#rc7n0Ngi+Gl-oFQ8>ijI zxk+*=^;G?g4fAsw=Z}&T)_oP{Woj6(aZ)zU?KaN0Y@CBO&RaIlIn)VYr=?H8##t*l zm+Cs-E;$$LoF7Qe={n~{$?4KLMJsiD>-NDoVO&W zN9R;f6#%zP=iDMWZ93t&;O`o%4X?oTqc1mz<=|`M2aW>6}vPI>D{cIjxd2Tj$&%IgL8! z$C6{{{H%@hdmCruSP_=t>nzE+OqX0OIcMseF3IWEIrm7;Ql0ah$Ur>R!BX*wq;IWe8nAvve%ob8fh#Nuun=Mfv{S2oVuHcsj3LLWnN zgN<{ojdQn+^R$g476FoUtz1k#Lxk0-bJj{uht9cIa@Omd-%8E~opaflLe46kvtDwH zux__-n${)Ot?J$+ysUYDIbX+o0vvJ%=NWLQ8lSFXO3q@4 ziL*^|#_O1$gHr}rug;l3(>WH-b>LiT;rur^)bO?IzUs%5A2a7!a7fe)9pgWTAtuhF z;E)^xGZj3JXu^oEC7%8JsVILl$mueg_UoUaR{$|042Z=BxpSG`w8L+$S*x=QVIh zj=?FJDC}l|?rSMH&KIGH(fz=>KotHGgCV)*(5IQihL(>44BIOGh@Ss$mA zz`|@DvmP9B2InPksQETHmtP{@+8dmEz#)$Y=L2v`Eu0mI6xpGHc>aJ*BfZZ>l^fkUDU%nRU9-D_|zxlGJ18Jz9lR9Y~<1t+9) zrfj4?wwG)KL%9}*@z(y$zuoa=F&j_MW>duB7^9edT?ek!mv~o8=&PkK##nr9w)qlo z5XjdK>5DNIUt4Ux#CuQj^;7AKF&1B2+1GTON8lLT_Lm7_b{99wMN>r?WDGGB6&!Mc zV~*+d;JRI8$0X;m^>o*Md))rmQL@>PoFjPzj)F_d;{;NS$uEN3UU)?60v zpb7mY>5DOzR86z57MxGQvF^?I<>KoR+$cYjz8FIc#QR+GRfuMhQiCzXQ07rX2`4yaIlIBN>LcDa5qbxFkv@zehVmmRM{vw? zZpTw=s-CIO)4nBrF~*XrpRoB7Us+IC7gf+13xjZ2%ljvZW2v>ow={$fNnebygmnk| zGTY&4x`ud(&5kil{TDc7hk|2{>7C$OQ%t-aAa75?7o`|uh@s?BwFD$> z^C%o+AI%?U%xqUnUyQ+1MfnOiq>td3<$M}kx2pr^(KrhK@$SXqjSp@V&lPl5cyk$1 zzLtPPa@dzLg_>?gi0}E_E-&sV23Ge?Dd#S*g`B6s@!-zj{1Y7VX>iV%E8ap0j`{1p zyGf2q4u_Pd4t{m5Xc56y%HfL~VXR-=eFhx2tC$|b&AoEh1BS2Lq%Xo)eSH=jw~N|a za$hXD30a}t?U%j?BY3|Bhsur-i+_PbVH%uq=njpuaAtusUgwx&dJnj6mkVdZX`wg3 z7dgTRUc2NF*BXoe0>|y56erhz*}ii$KPact7h$ZvJ_nBRJ>-~@){%yg!%`#M?Iz$`#*#{sY6;Xdm$u5DK{U#JvJ`E^pF@GZmFKcz3iSbcqyeHG$N?koR1e7521qM+asMrb`>a)>WDEf!8E z?kX#rg1)BGV9-|`s;aK94~Bff=FZAl$;$FoJ^0{0QCZ$xS>Dm!3&zS#xasX}U){Mb z(dpB?1|q&#eXzd1wzgXLDo~Z>$u8lyx3a|V*L?(Qd_jL*ZERkBz~@gUX$454MSv?y zg4HbvoagmobpRGs^lAzi0oMC!{MGS5RixhM?*$B+wKij=N{b9+ZEbVs>R?xAYy0Xj z*o~>y*7l7)U)lUXRY0j+yRfsJ)<$45)9I;y-OBdWy-rU8srHU!b>{-8i*+H1p)kQz zva7Y#5mDFGvo7A#mF#i~BA)78Rn@$~QSHV}y-2BSPq7kXWuhnB({NAXnyk;-HzrzY z6P>G*Z3J;tI+$9S7&_SqF|>w_ZOz?@17D>w6E@I&KkRgoz0Xj*`g4~N|$xL zv96Xxhl6Zs;2~dVUMv=^u8;ec!nV7xYN@@G?Yq4brrpuCYHekCR|>||)r$MBly0tp zdS7)gS{;Z5V7Ibtv|`OnWjWR?C1GnFu+i489y0Y#*sj^qgT6?0Z6FkzSL2KHG`F-T zIuXEz9xT|YEbncHrE_SBmert;zukJE!LTnL^UtdZ)Q5bFp=)J%OIM;-6wJ2f^?>tw z9^pUP)(o-iH|kp&SrYdzsjiOC2;o}lyV7?h71dhv17c4V{8%QR+0%SW{Un8N%5cLn zg^z{iXHARbL-97MSgUA%1B#Keh*kpQez>la}V~ zok+IM=8mRS9f@WnQf+nP0*>91_zcR6Ma*fct*)!_A!Zaev93*r20~GaMsrI`6V={L z&8?6qo;Fo42sQW@)Hg_pQW^siV0!nWL9vH&*l| zTe0d)L{VgBpo;RivNX`Ok<8tP3Kms67Ol$zEv+nx zh$U}}c*&bD$}wZhGK^t*PN=EQD7O5b1k!DN!siTG!pgLCrBDwyCEHM-u-zzB(9!(NkH_ZCB)LWvOTd7W824DVAzRH+6R*e!cCz&Zcx+=;=A4{r-h)Y;@*K zZwlq;Q!DqCwya&0nQjYn5h>G$Ey6kZKayN7AeB?Cngp<%xFg}1+&1ISF%qcGGYW_; zeR7vHWbw#dOm0Q!IOGjo%yJhL%?*n3R{0U~V@b}TINM!r-l-vHBST?M+Nz!$WmH3k zsGgcaAF>od4XtRROUTRRn^tyh^eqlGRB=OqdVWEmeu#$r@!h%QMJs=y}EruSxG10m`GXw3_{a;A0&Ri6!A8PLIGYn4kggU%>p z(}#X;dfId?#j8j5$1*x42x+PrtM_3zt7NZI*wwu$I|7nK)!axc-(}btf{?t?Xj5I>4=8t%=XJGrGR7%PmRQ!Q0I@UJEV=m{$Ezr)jh5^xQhRV{aP+fgP zj8j&a)YMFlrOYm%PK3SCvQ7CGkfn<9D#}P^g#mMr0-UnamN^;lA#*1Kn_Ko|dLpeI z`)L+n0PU&4;F$V{jH%TFS7q6|gob2Jqp0cL(GE<{Ia^KlSuMeYF-&19b|s1V;~Xj{ zHPyso`p9Q`v?NTWv?sBKw*tY)w70j3rjAlQ2@8zVrL-|#TP+4%!n$mYCRM^AKMXKO zi!h^yF$gm>S9`Gdp(qTMQD!jmNxRLGP1<9bOWN%anWRCCJSye3pdr*Ka>*F;h(nS%P9q8Xj|6 zB|$;+ppPuay4{OtXSGn8>PYdb#LCoa5(c^0i6&Edv?^lUD727cU2C``X4R@D-VcYT zen4e(s;T)mJaPNqzADK^oyA8Kv0)!#3dUU6;r%!~iS1{oBlHoxZ=mS}=je%!l#!As2uRs73^-BCSbGJO zUTa{HoC3W$$}4petXhj4=vv#J@J*)~v*5;!Va#SGqKI`zqNfbJ zL|dDaVQY!RJOkA?R^aiDO|8Cd!F;6gq)odly@1T7D#w8U*Em!)G@%2& z0aLfFm}tj5P)WAl#zzdNWNJoQ=Q>ih>6hymyQDNDL|bE(V^U>~xa}I9Aj$SL`jCkZ zjcw+WZ4xZ^MBql(7Woq+moqEF5KoZg48zOb1IRrka-LSOrPhBk^b=VCa-QO_#rQul zvEpPs|B-N~*{je0NVpkopmWoZyFDLAJ8)b=xkAe*)h9sL5=wS!7vRHJlyWZ1ZnqzO zf-JKD>TgDdpOLbule=H1!f+hEGpfrW=BuoE;5>I_i-+?Zmy^y}kfdLRNo7Gg6;4Mj zOQ<;ICX+g(xgpDQM$X6?ITJ{;-8;lan-|PUO$p95^)+~oS)jpl%m)pgV`gaZ9CJj2 z=a?-TJjcAz;F%d@>lj)m?JUD^dyXB4Z>O5p-V$XGor{3kwCsZ!ZE{_oQL@-#w$7S0 z$m8om+Wk6NYVILt_OG*d#;hS*=5B4-^kJlMJj}^GOja*36ml4`4VTeo-%crbT>dlK zUgzfAP*)SkOk^k z(He6zG|ZE8hTJ8xHB8P>#|qXN>R7otLmewtXQ*SP>I}`OP(RF^mn~yHgpkbgDrVtM z*fg3=#S<&v$>dIO2o9Edf8}0l)Muh0u@+OyK-WtXKl%HLc}_C zSx$^#hYsh75$uqECq}SCJ$qsV&$8R}i4i>ee@gIFnzqd-h9^elsScIY36e~Pk!YhS z^!Coyt|4AZm>{+uw)L%q3Hf1OOPIXd0y-h@C5!;F^yEI|l#K1gM3O#`|DSp-k(qDD z`&L3Km+L!;%;0R@{@kb69LJ8DIwwx9#j0(Vl)JiGKiV*xY~!}vWm-m)GU_KxsyX7> zhj_Uwd))5~WQ6|1VVk3E9~b5x-Q#{?Z~{#CIKnhX)4BdSj;Na6qRLpD7?EZr@tXTX zR;b4Jnp(T6CG`mrX;w1#X=c5Rm%1F6PjisN%ugHDjq@aNrXE>QmN0Xech%B(NT@}q ztNWRz+v@Ll>SjluW+k)NfmW}M6Lm5tKBNq@8ut3o8oYU) z&1P7`WN(IFbFj{pNk-7Q)Sxu1e>Yg*(}WXwvJ{89Rxa0huM-e zE6g0B4>8-58PJClVOHYAj`B10JK@sJs-KV%Ql`cyMrft@D_#@*6)%J@mCF|CD<`q4 zxvIWyK~u244(}}%1{d%WsiweEaNZzDsCL%mda9b!Fuk>*?3a#_+*A<&1@j#3&(0g zRrR5mkCx`PVhwj?ImzjTII+f-Z?*N_LZPX_+L|EN*#>87)uB3k1Z?%ZxS_r-(zLjqz8JSY5xSHH>*93*e-ye1 zP1XjQTN?Nmg4V?u(_+Xw;ioKC6|MHiv8Wv%EL#(#-WRW#S63eng?x2bP|v?!lq-&D zRu=J{jn%{Q|BICwsafTV1cFte`f$Xzihs;lIZghVv2r?o&1eZJSmnbi+CW`A48?;1 z7S7pb{_UU0NU{2OI{&>Z<}iqZ+9!7nWODPNrK~-pD^HtSmzaLCRIb zceQU`ye3rVkI(ZNL7V>TC_)x%V&IcZY#wDc861xC4Th*XUo`3u)nd6fk_>C3@t;RL zM`HC>mW$=n{HsS=blr>(UghFx+6f^L^#y8z^8%4r)TD*=%U?Zk%UW-&*p7$&{+e*e zr~L-9vYh?{iI|HYK_b)e$+0kI-tfRs7%4ZeejfH;@Ke%PJICJ?SNdCIX8g&cE|H8S zh9&DY(Ry=clvS4NKaNCU5)08OM|6)dUrn$oSXUjbmJ83@kvv#mjtn!cY!CQ-_2F2c zu4Hhu)nsxHi&XTf26FOX89#$ z<@7d79OAyJs+iwDueRQ2{HoH31V@)vyz8I#@<+XB3tBsp^jk}1^kp-qPV<`F)EQ;d z%gak=O`UFHf}C1fI%CERT&GVjpUIC_jIMP}RnDzi*Zc+S@bYu9&j+?eLLp18Psm&4 zpCEojyEK{I=px|gqx6zSjeQ4*@8oND;_6e10_F{Yh>N{ol+a1yxpwvymHIMq=i*^| z4!HAyyEz9OZAbI99B{7!_e>^EvFkSmxNnTc$>f~kLHa$K1MUpqUdaJRTf)5IgfsnU zkyOH7Ldw}EZsBlGA)@qHbbJjy`0Z1E*|CBQr`aYM-)iM?~Ya{ruc^032@GFRJUhXRH( z^fTf?<){U?qY_K$Zs3e~P`X5s*zIyZqHO816}a1hDI5y|j!egpXM}qdGPD<%XHI2U z*7Tc<$Hk{9iVp|5kvN>>p-NGDfJsZ7ZZ8>jK)6o=^L2@%ErnQ~gI)aum}gA#oa~C^ zy#&nvVed`gt0?lW;lA8(i4aVXh$x~LWK#jzTo8eyJU?^P z`FIIf=8#dtGsg}Yn3_2%BXz)#v>~Y@N6E7N8KsXJ1H%Ei4<9;kSikhtQLV%5c)NmKDA?Q@z0TJw;>KI7pD>K*u;rsq#CDJm_>Eem%Td2)DoG3q3LE{26z z%JgEKL6$&&Vc2`^Qy8DOmzO?;@y@4kQEpiNDqQN|1yAkE@ZtNyY<&M+zuiebbI*4> zIqo~0!tx5IFyG)rFW=vU53uJHw{oz8*I^W|Z{#kl|4DI0I>0_NF*iwosVU}_Gp zOq${Hcn4Zeb|-c6Bpenp8E@_C z=Nq^j^-i|1dL^5#PxUIfa8{VFA_`BM6E?4rE7J-^gv*LVQtFuZ!jbBbopUn&ov8lM zE4dU-3!`!1HFRap=*X_A_!JvL_8p8fB<{W?qbhZ8_FZIlGK!?{&90OY$Ayv4#%~IN zT7h3k-jBXb&`F4S*iLpL=eLQk>YorfcYpV7;@$w-`H~T{xE8-;F|Gj$$t%sT6Ru+8 zL{YK%PZtJJ)T>I%!8M33_^2^sqskuH6B!@>!=`#=1M`?u&CLB(3-(V<9wVjtVN;;2 zStPM4p|UEWii;dER``m|@sX{*70#S+G1mF%I4APb*3|vX$JiUWdC~JsZ64MX-~AbK zcx>1vs0-p*g8CrN#V=XjV4p8&K4MjmJS67{CkxzU>UDQiy#^qgDpKy+s)m~b-H%_$ zX^B|XaMb2LXsz|((%o9i^J*<=T4G+s#<<_Auc~1arQodSMpL!_pfz=q6xXgPZtjrd z)l>%NRZYzRQq5!mkgBPJ)REox?v`wM!1*IJ)6ZWsabC?dWqXRLG5Kmn`wv<(*GqBj zn&GzGbU1=wD^azW}_nGlgCEp$46eS`Dbu`LdCxV<$E(Po-qFD zq?q?dnq}Q1+ZVq(H7;@BhcZ{OIj%A_9(x!Tj$UY#ki9-EYrFW}vR0Aj{X1UOd2y0D z^(>`gy}|1BP-cha&bJaj|IXJ5^QHJDJG~II|4){WmMjs(ov}<%Az~i(lAW1|^90Fa z|Hy9mH`ou@4aZ15?uiVFt6J6^=Z8yE8dmR&YZFL(q&h>EGdA*)Oskfy#wn7(iYJEx z1|lzKB;HnSgt|U6CtO}#9-cZg56hDBI#cU;Sot?MXFnE(U><(S_?8S#ngn%6%vDZy zh9JH~5cjmXg2p4>j9TUp}L=bm>wlaNJU3roH!M7{te_AzMbuWoY!Kwih zbqmQzY|;P;iAe*J5}OQ4!ZeI&7}GA8cEL0S(-cgh9HeSGG9WuLerM&NY~)dc5IHX) z5~#_Di=^(3r0+_p*qB$Dx*JRH6->NpF4G6ZFRm^-MJl(Zcz;##ei)?(&Qlpq3*}W* z$7QH)0nKykfOxLR)}X`#c&u@-kj2lIHI4+P25OSF4v@3{$azVAE=hC;wre@~^2OO9 zIoH`Hi0!xlzhq|(;$lIcB37N}PeAH06GAan7ZFMS)IHqpM6%;G>m5-?mj*~z9W9Hg zjx#3!spAX}{C~wSB+cnMAhr3On)3KX8`-vH0c?3_z4Fxv9Pc7~gjJ1SVE5_?n^-lA zB?n3u2|^@e1Wx(dU&hPuYfxJz6R?!u$|RsOVY8Bf1iFv0k)N$`fQ};rt}0tf$(#Fqk#08kB_D)yP$3R+6Wh@NHt!l^IR3MG`Nn{w}e} zmD_O2l{xyE{w&cL-fR2uH?T#!3u zzV+%{vbuT_hxA+U3(4n~*;lDOajhVKPOOf)0@s2$-G*OCt|qP*6swOncErg? zAwagAQQ`bgpL*gxnL5YnW8Vkra56GLSU4gjWirk)JLhLVJfVJo8zktY zUDPWdZ zOeGk0Kwdt71+&Ito(03Y_B3CBskWF9n#n7M@vqkrV7=|WXZ|DT$YGbzR`zb%t)YvZWrojMrYKG5FI1gi7*LAISQ3IFn@^k{2VBieK__dhQ z_E+Wd-$H3Dnig8KaMk`&^@SgQKHPS}0Jjl0*SC-V3%w+luJ_6`Kp6o91MFP%CPjzB zR`1V;slmWKh*{&qc4lpfE)P4OV4xLZ?rBHfbjhrwsC=0)d&10wQq z*K6t9^^1;*%7=SGFyQ9%^Yq7_i_V8h& zJ$Al^Qzu+n>k^A%m!^OYjhNIWfXIN6!TUT)0T%RgjS}0Mr+3VPW2U<@xCQ`$`+X!KlUnRF8p+ z4OlcJoHaTh#rX5#X7=*o_xil=+Wn&Q5sl)!?y1+ ze+R>3yJGxHKMia!!0{EsXD{{hjcH$pi-8(@blL?>U0>Of`$0&jMwPjzo4sL%T8zIu zT_tC?*6W`!1dU7Of|j6N)YNkdG3S1@>3_sWZT<&-&q+NJ{F@)T`rofU{nl5X{vY|Q zS)E^P`u$&LI_MXee(yJz?9V9SZ#Q_Qzx!$={cjfixq?IW1*O_vaEpZ=_+s|~_~1}! ze(oH8P7Pm)o0~HvcUVqNb`IY3Yu@sXcja{D|84pX;OnAIg8s0?f&XIujSt5B-oK@z z%zykZj8f{_{|WW`{;A0q2LJJ5xL>}oFM9r0UVF_yESF{G%_+{yDa@RSkMN}o#EYvB ze7m*!n8KifqDff={N~#Ld>kkzN;!(}YW9-5Nu|kqwbS_Nu&nGT2U;v&OzrpZwa#^G z`wzq$huro~X&T-uUz%5!LA?SzwXpUjvn9%(4%BUU#!NTU`{(iuxp-?(JCdKEKGIO%?QOY{riq7xN zWe$^Xd`$kmZ(R2;AiHQ*VO@)mPbRR{7fVg?`7qpAIB+AdqFhn8y0W5(ACZB-2w!=r zH7EJ#+hqLRC3AXK8FrhJI&`&GoL8@G?Ad?ho$~yrka|n}bbN@bj)h0P9zMnY$B9G# zPW0c~d0Vd)`mc86R%VByQ+NN_&VQXAqt@C`-u)gS^r;sdF>(Dfugt5A=oW- zjr#s^T-%5#>IFUam)hza>zMZg`~MVsD0Tp^yoaDw9ry>^LzAVo%7f#0dYq5KmurHW@Eq3>jfbPE*dv@#ILnZNFi%kM8@vp@j zAI8l&ePhJ`5CpDgsedi<%BVlo^{+)<`SgX9y8gAuE1SMh+rK|}t1dqVU2EvBj6v5H zx_e{LF~65$(D7F5?ih5ex)85#`a*5%%WK(PV$kuCi#`YH_^(Re?RG9|27WDYefBC| zqebAosM`KrM%|OpoW`rE2nW+;LG#*g=q^DXak$2MDX+64)RiA^{yqTB$-HWcP?xSJ z8p6fUTt8gtJ`VWTL)}7V${lFGd6OLHh$%`p7L(f6mk%KnO~t<(@nhf(0#E1V#~b#W zp!uLyo%e6G-q7ubrsp&OgoEWb7MhY;b#{Ksp?R@Zon5}Kp$Qe#wp=^EHqd0%s+Kd%Jn%<3n@r%|d@P zN9itbmwQ0FPXeDaUuoRf+rHj(KxWr0pWy%(_hJc$2X<-CI~t9yEQgP`Z|u&T9u}fzP@U&vW9(P*=afhfbb{ zrd_4d)wRAIkz4@H3azUvzlqR22hAxkwdQMU=2uVT>cg{H+-ES-8h zrMCPoMp|2F7HVBx+k?6Xp=n&j+z!$Xkk%KPTYf{A3*8IQbX&&U)Xlxx%12!qG;3qf zRYTM6YROJ+7S@*E$LQD2hUWNdm5$>IPv^D!Uf}mZ)BQT7GyBm2|4zms)hW^%r9@oE zzmso2Kv&zpf7`&mDMsBFG3pv!Z%QVhw&mjfs&g82leL!Zxi;Nq)ZZd#Qg2duj;=%Z z0(3Xwaly&ADczVlbX@LJs~qP${21z5F6*Vq9U?JNZRMlx^cZwp?uF1*X>DE0?Fijp zp?OQ|uv)5KYWX+z*U&V&69NPtw`==1Hrvs~T0F#x_L3^ z_;|qb7<8gK({>x9gjcX#h~N*Cf$X|7iz1&bCG^hlrAOeZ7p2i=~24qx2Cj( zt}+H)bLiH^pc@L^Gf}$e@|^(PQL7R8LT&5IeymFjI_8%agO2SbI|dyeOPw8qj_u%@ z7<9~UZ45f*wKR)AgYz(?~(488C?ilDs#Gq>nU0w`2 z=2sPij_qJ|3_8}!12O8JjX}r$^rIMb+|PfFLDvYnqwYcE3$<;xCP;4?gO2@G=NNR{ z9s^_0wSz7{1|8e;)iLP0LAN>v9oP5G7<9ah^F<80MCh8WLF5ay)ie9awlU~3|q?CqZ{n3_9jFKL*{2&|M#cj_v+$G3uU=LC1RjBnBOiGtOE@ zUZ|~}xxP(e&@sObG3c0I&lq&4K$j7Nj^mBFG3dBGmc^js_P8$wT^PD8G3eM|eHMd` ztfJ_p?fn19oP4V z7<63UHtP`iLT&ZO^*tj79s9|PV$kuttSAOuYv`(C(6L?JAA^qDV_OV5?w9YzpksdD z#;B`*Kg7OJTRn6CZ61S;NvaeFL{LC53FT`}mG-!n1j zSiTQq)cqWTj{W4(>k;`vZQG6Y+#?1Z>v>2FI*zj^#-QW+&Wl0E{q3e0bnH(bjzP!r zy%>Xz+wIF3bgbuk4-iT zj{W_MG3eOtcf_D$`F@H)$McHhzajF4+O`MRqjQY9{xRrS&tqcHalAG?23_a5p{ooxVYQxM365b=?U~ffG7p1S~%VfdS1A5fmY!sZvg$@A|8rbjHD*v zWvSfSd8k;YGA(XtYVz31K1&*{EUUayxz@ zdFRRN!gV*?Bp_bdludpJ3X78BeXNyf36*I{l?##&VM#MlO5Rgducx)%dOxDpcN6ca zEZ>c?R1Hh040W$Y&7;mEq51`=fsCnYXOdcKTGj?;cY`cD%a_xU z2S|-*s85twmuR9-lw^y%#g+L)P3jUY@rjPIMc%f%)hB9NyU4AAWINfZTDBf$vv!+( zIURj~)QH~miJIA>pb_o$iH@;F4UH%Phc&lk&23Q!BWmLl9czn{jp!Vo=r~(s>S^T# z5Jh^UQK^OI5lMs{xdmQcZ@u38nE~-m&0GGiS)`iMU2|fG`pjg>fFlx{3`oMKDk?Ue zQ@L_BmlNzYfc^9Hs)&uMZsgM0O9%1x@yg^S=mJ(Q^p*N}uQ-3GC>TB@j;*eE`W#)D z%2DCU(eaUbz52(MH;g=|iUFb_%TO=UKfdyKDZ?6H8Co8uGQ8p|!wH9=3~H-bbrGqD z+W4)y*yk(9iHETqVGPRL{UUrA%Q4tjj#h`D9Dk&J7W>N3`Vf@ikG72!zH*#&7|X!{ zyW2L}9L93&^p&ISVJt^doL3+14r4ja@|C0gVJyc)UpYD)#&Rt2mE+{YSdR6+a;PtU zNMZi)G4_x4AKQK9IQ1~r2mjIM_8%P&V>wulZaF#~#&Tr%%F+2SmSeWB9H$+|a;)-| zqsw6|$2MO%x*o=I?DmzT+hHt6^N_c{bU%#cNb!}U$6+i-p06CIAI5Sl_m$&}Lr{)C zGDhCuE5n(GpbUTX7`MY$jw&cO}hBXaP}c6!ynxy7x>E2>+qFh z*+O4A&ato1c-Nn<_lbJfC0gSX^{GqrxKGsA7B$$(Yc{z4vg~!AD8&|;GOgqb`rUzw z`f8-q;{WvlWb=5h9Q_a9hFqEAE60GtSdKhjIR+laaxC|iBlYl=W7!5@InwOLY_7Pj ze8ndkbQlY}&sUDYc43ot>fLi?(h**ZA95HAdzP;p=h}re7nhd}^@+}_L$q?DPc-!K zt$j`mdH@e!RZfQnA(C;MUGe#9ajqMXXYDfO-fw74eyZW*}CnOMz7C)j-TC z{1pNcC^1cql&k%;3w-Kia+JRW5{sc5cxL*;oJRzq(+LTH?0Z65u z1T}^Hw-wM#;rKqwIf6Qw)Lua9 zF_Tmv_2|jDK$nVctU(ii<_T8}q#j2pH>pd3;_wSOe?`o{1|&PL1F8Jp23joMj}7_~ z=rZAc0aE$#GN;mY15&wM0Hksm541!axdu%KQn_3Tq;k33q&@b;}XK{q$UDO!pF5ylDQn|D-spkNFE~UB%NaeQ>NaeQ} z=w9(IGw22&mES!;D!;WRbu-Wo$?szzm0vs#?kc~=Kx-wxW(KtcQu&<*r1I-wQaSYd zx8ye!NaeR2Nac3}(1ViSN`vkOV!sn|9tBeQJ#JE82l`&}`xZ#$$AiAguO-k1@wPLl z6VSuL^#xM-4K%6afYcr}7f9u|3P|O5HxT=~kh9L9hk;anTY*%5FPPL%fqs$l)obMD z*8xc7*9quJ$?pte@%DFRaYm6_D5 zfWDON@fRSK-zz{Wzc+w*>Y z%{6E`(0jsN3Z(M8+@#(L#G_8g`8$xxZwHXd?=zs!#QQIUz6bhPxCV)CehENI*9M5U zeM3%vAeCPpkjig5(AVOfY0!M2ox)uWq{?@_NnH!1`h(|yRDQdGRDRzB?Gf*<2Gz&k zeEuceF+eK6-=24V6z>%VRRQf4?sg!R-)fWkIMA+hm0x|J|A_ZUgN_FJS-AEiqBeLxAqJq4ul+iX&Q08+Ue-_*^e70}V*IK`l@Kt~BT07&IB*rZMb zdR|f&0IB>|1F2Ho3)DhVA2jGOpyt9o52W&Y#iZ^8QoU3t+0Cybkjk$sP%H7CZBRcT zjwwUVC?J*J1txVVkSf)BAeGC*K<&lxq(NJN+6ea+kjmvfle!n^B}qLB&nBz<&H_^T z^#BIv`wWR1$2(29t)(r-GKTEcP0?W)fj03JuGcQYk9XxeFCVpwAgon)LI7cS4EXy2ctsTeTEO<##iXD&I<=$>P1opmjhhziJ?r-xiblKF~gK`~sx%YlFY6 z<_dQ*P`;opKx$j20jZ^(2UH}f=Noh}P=RpMfz;AUOzKh~)jzKRQcHUks6-rZ0+kDT zA4o0jJ0P{ReL$B;Y5;$MRVW^4ws6M*simE0QqKfZqp#6GYH16A7Koz)Xpx|$KpUi; z-UW2IaBG0B6m-8y-2$Y_@*EJ)1Vhe04SEM?sc^f1R9W_z)FbfsUbT0(2U2B82U7Ws z1iDVV7aKGQXt{7@Kq|jECiNPicO>j_}!ArQ9x@19Sfwk%xOSsX+40}NosF{1_J$6xG_L#X&0N+Dj>CtzX7RS zHUK>&j*SLwqfWSYfK)CYn$#bG_!;n!a}-{opz@2P@2=RG@Fm)gBQWg29v&R*!Eqie zcHyFpm&5PPt+3|ST65Lb-0RldPHS$zHOFW5y(RE+l{d$y@4dO9)*PRw_tMI&IX)rp zrSVaCZ;sEldvkoa-J9c6?B3j7YmU#QdueQZ9G}$l=J>pvH^-;eyg6P} z@#c6(+MDBZRNfq)X7c9vOp!OoCwsg(K40U_@hKN?F2$PT6CYk0FM@b;d;-Fo+hNV| zX#g*cmpHsR-W~Vm7Fu(>8SSO0qd2_r?=FRbDl{d#r6W$zeKY4S!3FOW3R*W~t8zSBu?|gW3ycFTh z@kWE1JHJhQRsV#@xx2b=+lk#?x=fXX3UMC8FIhektq}S#&2=!SyFq;n8fwr*2IUzv z)1b=@y4Ijo2CXybaf6;SXuCn58?@J;dgvQenc06Sbb>)0fgXW2**V*w!3K>nDBGYC zgBAk)L%hojVh^UczZk>|?23EFARZVL$4|B>wA&!wR!|)KGKG#ah?m(FcZNX&4dO*< zl{(R&LW6kWR;BW?x`Gkg!TazdpN-#yuF|<#a>7}%z9DuJ5ci2>C*tnZ`=fSh zW}ym0W3^;~lZ%)OQ!^uJgcJz>v8ts^pCKy@auBPVbnSuuj^FPn(>;HnOyPr-iM_*t zWnzEwJIchJI^_JmdP+W6nLe$hOppG)GOa$KOcfg^N{^0~<=iP*A#&mw`NA8(4Vd?Ot^Sj~$9d37ibg^7v9yoCGa81jF(eq_o)O49nwG zO>r``EUcRYk7Y`W!G&RYyi+XOysPCgQL#KqDYjyBO4SuSbgE)-&0RSUuZjgQY?8?Y zWj8Dj)2eW|AZ=J4%GCmKLD;Z7+$$~jD|cxe5-2S$h#Ho|2F2onq-Lea99^gcTqiX0 z=7w$JV>wDuTJB@+0y&aV#lY1m!*aBvSX>=4EJsADDvtKC95pGnnUCejO0jJEzFOu0 zOckTKNkGFe?6E$U137GIoXyhW7I_D@rplp(Ps;(JVsUC`ip)WyVmbV9bKt;Iv3x6? z%cdCiM8irgbBwCwVUtjG1;??9ZRKM*)>Uk4AItHuV%gKW3*?wtv2A=T$JL5$>ti|g zR%|;T%kjBl+Z$Gj%wfDr=wK46uHaB#u_yajo(?GX6d%h|2F0H0W6v^dM<2^m52fwo zV|mb2Y-b_gQ&vaBm7n4wR1%dI$APs-35&kL5|FV$b%m9IPp}myhMi zsbbIZu{?oQY;PaSlU&7e2<@&kPlVO(*VnL8WR5mfLW)VKx`OA_itXoPdETwq{yvuH z=87HQV|o6r*nvKl=lF_E^|5UXo91IV)>hgiY!a%j*lE}yK9-jzl=fU7 zTW#3$d@L_;K!t0e&}1MrpqgX2tAW(u;cmlm zh^ic~8uS&A@;X?OLd}4bj;BN_7e0NYxC;!&Cyf+$xk0xX^f!Z^HRwYil^>t4Qm7I3 z6t&z|2JyKc#bp4gW#k&f6Bor@YY=yE#qo}{La!V2l|j58rc#eJ=rn_PPeG+#Y|spY zc>PwT-e%Av2J!SlrG9MCK7)=#PpVSe7<9Hl83yGWbg4l%7{upjR4yA0ddr}13<~1# zp>)R^#HVLejSn_xfjFapwkTMZ_sFi@(jAfAoe%TrvHuqXV!o@E#4P(T8tjb zS&3gVPL5o}A-&?*B`d^%twJ1LD%92>4zd)-agIV~8pH#>;szMR!=B=J2vTUYK^Gg8 zWzZCZrW;gh5Dy9}mrD&=Y*56YYYe){pxX?(%b&9)pDy0;)A@3<24_JZa3&|gZ^p|uQDm!qXs=; z&?bX;xK_HC4SK_%cMbZ;pf3#i#-Q&E`pF<3>bZ@RhfVd$)E|p#X6~w*=aOUoG!jJ7}%- z$%Dz!wU+1ATGF({yo!x+zg1sV!zP-FZZuW<4_Z?zYN@F=Py~NXaR9DrY6j4q_$50F z5UZLxNFA~FRyD&bC2ac#y?}Snno)ls)HM_5)l5^irxJ|6U4Vp2+n?-DOaMdz^sQtIM+ zrmik)mz!9)HSyx=?-D0$L*YY-r==&%Y!KNk8DRn4Yb5un&Qu4>@^UW!vqx0SzuqZ3 zDe=SD2ORU_geg$ms7e8B;6gi?YeLFxxBv6_9-q#7;pT+#vRF=fSD;85f&8|Wc-<1T-#yjx9qxTgGgSx8m-D>7XQVd|%m z^zC22Tv5}gEU}^{p{(K5z?hnDl8h3TpOhCsOUvT|C7N2#!%DQdIW`kFQc^`t{lvvP zpkyDsgqE$TS2@nYzLn_@aiumyPS~2dT=A&0g- z!)x2jY-B{;DaDH^BhOc*E&*MGpe`OnQkPeyKUA4EuyVoR%Cw=C3lzO{^b3*HZISVh zN75hq`UbTLxh=VI;vz?UU9bDIRfB3Ou}kf%KPxGcx_eAb7rprSuTNr~p2|9HS5eb= zOyUjIBN88}&Vb5@lHMNQ5xYhzBGg|bbyro@M3iYvO?g7i`W+4QL9C{{jp9*cYz%c| zTgXSN@ko*wYRY#Zdrfg6n8PwP;-sd0w<=goU|#)-ng$C_W9d#|>Dorp<0Ji=S5)_? zsA-r{)o)xz;`P<^h#^wGt73D)*C(LZEGgcuTE1)42$VOjO-&cor&erEu5hzGlGz@? zY~#9Df34oBIw~XblH`R}-a*64@hiB&Z;do^+xaTDov&8yeAU*})m%e1g0*M_Yut9e zmW|+EY3J*6m!p}Nouu1%3t384`U;sY9lbu1x;B!&Dl&e>*V|P^sa5iB%IRT4M|9En zB!~2=Er8SzfaCa=@k@595kDtr8{)eKeS!EDK|dhopMOHmFF@*bzr2tAci|cUsn`7` z0Id?oT|hSr;t_76px1z&74#*LT1M-7cqmD@K|majCp$$zPYAjk=qW+GJNyY;xI+oV zd(Aa;4l&Pt%C1^pRFmEb9$Cxx4e_L;2O1P+3m zRDH6CH1{o+jzimx8ug$R>%%_pQK-C50a8c#(|{h6^7a7QfnP1-pNd^cwe_!&w=2i* zthgl3NnG|7j1`w8IEk14iKrKPp4|XQ;mH%b&0Ud;ap22~><_+OIsenD;cC>Am=vrU zFj4mq8Hr6AAR#enKvH6pK}nc~F%4td1=B8=reK}plscpM9xEB zU6T=q-6fK~E2Uy%US;ZTEWKAS@v6C~9=wkdheh>nteWEeRmJ=DPCYeGWjHOAhnG@k zxO-Oo)&cQc5$koCSO|88#*x6(Kuyxt0n!mf&P(!hNi;=`kL3pREmGYac&cVT1?Ud^ zlASe(?-Io0yc*N}1f)j4A^2{S)JXcL?rlrip*EQT-Huu}|DEDuF;@yY0kPWrCjs%a zCggMg+JPTN*^xbwv^cz^d1&`%|IQ(Qb>i%rPrV~N1l_Wd;5#K84 zBE)|cgvgo5NJ0>0Q!i|8aM;SV9wkVY(oB??kt){%K!>kff5y^lFV{U%E{v48DMP)| z;>zpGHi?8HW8$j@2P%)mA*V9oGK@*%9@mO$zt&<2S2+(ORDKnt5mwsSWucssLj7?16-u>CgrXN54V?9FUgg7}FigS4AQT+gK1gU<27c~9{ zF4?|FvuM{sR0t0Vc(eqEFC2Tl$C@hBUyqc>SM`g>2}#w3ah2m=sp^-2vyiHONjL?m z>X%$OetXsY?UkuJx2Eo57K`6ayu1q2$UhTLTu7pF^!0c_aO#RkLmaT=6z5g|ImKC} zhJLqhOuhv{NBZx&CIx(Go+8HO21yF zOUJK`q^^mi-x?Wx{n!7DjE$?<8n^hh^2=~$6u~NBygNJ2DQ}m@e-q|$VG>21-auQi zxp`zrb9F$D;LI$edE%obNr{inO^&>j+w0}|%@Q9y7r*{T<@VaP;E2e}r@oZ<=ti6x zRIjM2D&rZ3`@;MAuj_$EWNh<_r;$TLxZ>bq7A2v?M@QCUj?XPO_bL@G9tz5$|mh!W-}CqCNm$izp7G|cU_ z5srFZ^>bo91J>SmZDe}Jda^jy+8hiZxcI~zn~U0 zsCjN>@dTBwQqo_@tsFegbt;c8lzGmML;CdH-CtC^TodHr{tNs<(o3sR4~O&H@Jp7# zuNv&~sLG3{AtxTO>ce?~nwL>SPBLQEhaU^HO1vF_HVMiG+AL_bL8qc^JtN#j22BD| zOS=SUtE4Uh+9JmZ{?lA>cNmWU<=rB>YJ;`|sS%W_1Q~~;UhMIBF{)G#$Rg)PKUCNN znW~Hv4LS)(W!%Z2Zb0{8rSJzrpdI)nJ0Btb6u-~#`y9V7@Z%ty*WY;_#fyZz>dnC> zFRiw&f8DW2t~1m}%KuFbYNp0t7%m%iT4%s2I2=i`RfQZ5Wm(m#L9Ih#NJ@V`xVi#! zIB==t7~CbJ4M^aU7+5O|Y`_fMVhr(W;vAu;4fV89c?Wm`0!wejBG4PPj&_zw0u6oKA&d^;= zoF005x}NfhBnGyBhO^W}KJP<#ww~{$r|0NtZ$0g!r+xJ_MNj+bX@5N(pr-@%G*wU2 z^mLG(4%X8ldU~#&o~Nfn^)y{i`QQx0a5Zr<^mK%tasb4@cJ&|{r8*t^8gn73t6hS) z*53$9LHsX4EXltGG0)wCE zIpTeSRv_kSXvkTG_-8?D5dR`*J>va>HX#0wplZaw3fhL4J9x6O#R!-G4~dAx;pNUSE*-1o6PYD>@;E&rER+eE?$K(F{3Z#0>@Uz|crg7sR~s z6LQW%+*nWw;v)qOM$AJ@$jLy=JVVX}h?@wSi1;W$d5D_|Dn`shQOKE%_-H{35%ZBC z)F0ww1T9C*l7*x%<{=C9hxj-_YY_83YsguT_;^7Z5VsUmjrasX+Yp~9=oQ3aLE90x z60`$xYe72^pCo8E;x>ZzA#N*(9b7v>@j&ebB>{C1)Eww!L1Ca%1o2-JrwZx<#D|L=(dp#FkVfCdN}3^Y(s22iS?3xLuDO#~VwC=Y0`pkkmQ zf@TAqD`+9md4iSz4HdK;C|%GBpkabm0SyM2bw1+3245c=0FPsg@G;=)B%WVh0zJnB0*;XT_z|6s6xnTs{}0vsuHvUXqli@KvxS| z1H>9e{Q+GgXamr-f~tY86SNKJdO-*Fd9j|4+$e62_iqx^9O&&5k!M0H#gzoa_U4`o)oGIio_U1C&2t%?&?DyAi#m7X`3gpGh{@yB z9x>0I)cG9GmO>8CVR(KNasd#(xjr<_>M(> zVK^6`Q4O~(?HDe|F9gVTkUDub5cQ`rRs&{zU=%GWMQIkvZi_5}!S*78^ zqVVjzoct+yWgWw%Md9+&oN!jSG{0~PvYTF%o#T|LPupfHE>meUC23S~*5sUUX<1fT zsThk(awg{$6&J(Z*C{J1EzT?|$j&S)%AB54mRFSR3@9o@(X&w6lAMC9vizAj;h9+l zj!$c1}V5^!zd`sUWLxN~tO&3O_j~lNpLRv#2mr zvQw#Q;W?RZwK-||v%{t3rNudunGZHQ7lD-zPnK=rt5c+9V!fQo^%-+eHmwi|Hh+Z|w<%StU$^by8_&VNqEot*X4Wc)B{H(Poek&O*hY z?(%X9QRuAfoEha=WjSG*tsQ&naUon1VK;OIgHi zR60GYpdgctArtkPIW4E8(8tg)fj=x8l!JJKpWiuhRh;jY+MOQz(==41oFrYsAiTg*~zL1mMhgZ8NkQcD&{^*3^s zhufCzUbkVaDfT^hx3^5onv8FX%L--Z z(7ND4Ugo zJytw4OE!8ZG7HL_l%G}FRh7~vyE$nk$dNs`K8{F@i*rveBh(R9;Z1 zJ=oiBELo}AWx12Oy}ukfRPQe};O_pW%XiYz%Cqxxb8|{^3UP2oOGC%k4%>be^mJH(19T{X(W!nOBfV0y0(No2=<#x}FtwoR`B?9)!W^~!&iT>>s{?7c zlWc01YtkIwUWP6OhbSIuY2vo5)yAe$mygvZ#&pw`IABr-CVf~{2Lsu*)3auqLaJ^= zAD6Sr%Zg-gP)^j03?o$ET$)pyCEHW4svNT>!@|yFs2sc5;Ytsr4$RWEEAzBM-KWT` z91PHr9>i9ZjXsc#4{M>V*%(>i2vk&nUIsm=8jVPEHp7bSajS)~|4V+<)H1=Jr$3hw#GB%PS4&W18_Fs?2v<5>@T6ScAJa&b;FW|sz`>Wa{4 zSdd9Y<%QWiq;jJ%2fJjdR9P4f=&s~|<*61@*YYHlOB{mYVPSGCmZiAINIk;U=T_Vk z^Ro(OXVT-YuqLxgCkvgX51(#+k{v1#!yaSt>e6&0ew$iRR7SWAEv38=gL+*6&nP>s zbACxyVJXUlQ!8CLC1{GW-4F2KRIRX7nFbcg2owjA>G~MQdc|2$j_j%SvZzv>^hjxC zs{T6_3SHc`| z;0UR$*vl|bjKw)yIR~p{$qZW?j`TQppPYsB*`o3?HgJqDOR>Y}OrD1JA&WhrR`XO& zrRBvqV0lGlR;5|kVP%ACZ@a?UwkUL}lGRuovp8;-Ov=KDH#?^cJ9iO|{Z>9|?@G^_ z9d>s(4Ak>;y{0m$K;|>i^i%>5&urkbSGjv|?H*M@?6&nn$LVS3$;HJ^D|AoTB9o_; zcIuNey|`>nhm&!!1KoVVxG6b>IXG{dDJ7N*9@#mw!+m;(yM)`d!!Uqz=SV4d?v&z#pP8!l`AM(OPnvg9)N-5@l^!rt#n;p6 z?lex%yVH0*?@kl+ygNbLipaz+iwkh3(K;_KP;7 z$l{tQG}qe#%yll2b6w$sqH!N1*mC;f_q>NJcuA3gntGOtDZzmIutLWB74topyD6x# zUA#;g475hfF#N;5Z+fn|ij)UAY!@$M1_Nz%`lYSfc&oA>_yb#PljqT#a*I?j%CL-Mb{f7k#F@9RRL?bkBEU>&D^D7wl zA}+TpZhfPu-2R@1?}q7UG5o5_Sr)@*vIbfVzu%EzF?=3toW<}90(lnmZ!l#R(-g&8 zVlk(KSz$4Jr}P?&;k%L98oagOJA<-}-bDS*m}%_$X5_a0X-iT1;t+=Rv%6SNX8T z1OqL!X5p&+rA?#qIa)NmwI=J~W;aCV!#&H+=jf<>c=I6`aP#@+d#CBX#lK$7qw+Z> zDjz;_<>hlr&0n#l4_q(a-muGaY*aq7)&cHC+`Ybi{9m`|d{j@H22yT;1Owb^)G)M& z%BLmRVBlJGI@}g>zkc)G=cx@A;8CyIv4VmS8e8R&4m^-}FQ zj1*O#x;3q0(6koKJ&4&?4%?Zv#lI}oHck=^b7PNx^R)I-_Q8*Rli2n t03o-ZizXfN!drDM!*xLpJ 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 SGh;e6n5T*)!%${AreWsq=jC6}aYUKxh-03=*o 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�JW>vCDVO_n)B}gWl#6>^ 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

        +B=?vgsclu=0KM4-ZT)`iGn_`d8`Zn@o2~ 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%0DqAa17*CWI=T4iBeFt)=#f25i>gooS$5iAZiqzyL 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

        *QPAMiCn#oiPck5Ekq)ai%)J*PI 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≀SsBB*A%=60 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

        2x3do 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 z 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

        aPv@w)5u5H`KxwYg;ZNwko5>zro~9Od3Yc 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⪼_9>HaDSf6>gnAoy)mlCVrCJL=v{7~9SoN8z zmc`k$>R2uSr8*Y&^dVeIpQ+igK;t6SoRy@aPw_qO@on4{4esYBxxV^V-^@+E$J2a| z2fFz-{sYR-?g8_8r3-JDZ*Yrm=BwX6u%+;ZGw>PvN4|mE2#f~XYxVX$%X}O2x_#uE z)q+o3A+!^!^n8!!@##I_z62FsJAM5(f8?719bVM1=K*(@rDYGlp2fo*ANi(lQ#fF! z%UYY-zYy4V-$sg31s{NX+6r#F9^7A>({j^EwK+RhpI)2ug71#Uk>uK(ZN58x0zwa_ z>QfJ^c)v`k&S_a$ir@#d2^-M!7}Ulc0)=OaeKVme`*nn&Y;kKxIISG2 z^JJXROZ<^7X_a%L9z#)a8e-e7PX!Lz&fpQ!mNMW&-^NMZ2E5>V_<&vlHG|rKL%xS! z9I(sxFmw_5eGk9t{nY!%oIh3iCX}SkiKZCZkJGe=k)(CFlC@h=v!;RaYwVlYb8|+( zddj-lm5(=16ejlZXY7AhKLV{mJk{r^wL)>g3=3uV3CT?8SdWr$)!|B(W%&xBa678w zVo-g=dA3j~xSuN&+uZp=rQuF~GIBZgi6>)us_=N|6mtUZl=lmcoS1~1Lol?y2L?5KxU`P?;lw$rQ`XKG+h7>VQ zsqP}hoThVrp4YCJvT@*)Vrf}1bbicvmQj_6aY}K2Ceg>76AdY1oKoDaN%S#i#E>G! zDaAdRL?3f*HlzdtoTj}A4&!TaJ_RRM8(FS64vqDHrUNq?9BvX=Qggr=>EQ6Y|3U}n zZg4nOSyGRIGt0qw37k3y=YPNnIXGt^TI(E~5#X>ETRvBS^N@oR28Xr5!h8jsO%Bda z!P#kY?Aw8Cv)<3$=Zg;_R;+ataV|2XmG4g!gd)PepI8Rs11wG`Xr1xuIQ|f`tCG1)~8&*GdR{~V`=PA#l?Ic z;Ns*O9DY{k{CJ7up!EsF-&0@vrQsR=RT)zJj7=57w+)W<(a~OTI5P61EQPs}&A`F= zDmZNG7G@7P^opOlDXG!y`b>`fvlglCo=o*v;|E2mu9EQ;LrS#>yA(%kYpkS{YAKZZ zg&`#v$0t3U3pk~$4}tz}ND0Ov#j(}-A&{!!466Wx3Fj7qAw#>1!wa0^*yDU5xYh?e zPc6Nxzv?B3-VG^6Krm!zS8%|AQylvTJQ?76J-i!H1{HJ7hExU^D(8O)4lAd{`5icv zv^WRAVZUo}&P0JST^463IP7~YPANES{T7EG+A-HH&N^^nPPL2s931=nr#FCJkI|5{ zrH{SStQl=d(;hISi0P(1hF`IdG=c#f?JOBv48z7V_=YyNvzj}CMw(@BHFpFyS8=PQ zA?UF6O0+D1)5*p8CHdn6*!;{L2@H2!b4Qq4u3$7QF>E{AU*Z-N;6?F-{2*Q;2V$GC zc%#bQ*xV7^j#Z&?Ll(cWBWng)P!uRH$s0F5AMc5|Nt-)Dc4;MW?$b(?uWeNF+^WqT zVaj&#RR0&Bt<+DcS+saz6;84i!AN)K??dv#^A?7R>kGo6hT7V=h|-27i^`WYgc{f#KyapVgM9G%Sy z@bGH<4z*wC0ojNoi2X((V{SRG7IAA_@#o~rg zT}|V>M*AUkIp1#_5zDQwfik4U4LClZ;5>U}sV$SUvdWp~*({;Jzw{U}ivQS84AxcE zS1+ttl6l;pXE@G!o|waZoenFX08hU-lIuK;7`Ml8L5{svS?3+UIENZ)z=vU7$wGT4 z6FcyH0?(oT2Os(D+Tp;Fat2Vt*}vgga+Xisj(+xURQ3pgT4(=W!7j>w8S9D9diL+D zknhUbzt@3###j&=L25X21iymojB`k9lhxfOqPN3;J5e}=j`7Vz>Kru5}o~<0?a1{j#(Zreq5U7VIh4jE;?Cs zr1Qly6ZyyVE&%2h1D7bh7XkM@0|Qc=6+bIqn3Fqz%jZfT&Ka(S zdk@dn0n@C?17aNhyW8Lm|i zxYc+*_N0orF9pXPGx4v}89{n;qk$n#T!J%#dMBK;kL7HanP$LjM-O)aHypT^fa}g3 zUpSUqJpY)Ee!xsLaNHgdoU=R7GQj7Vz9s|5`km|bq7)$tpq{|~YnkL@&^JDiKJ075kxRXDWR7|OVIMFzg?op)XRBAi?_4mc`CMyNp` zjaps^+b4_h@i$rht7|U7m&o&~Ag+9=UyxC=utwxRH-{))$DQtH%j?RyzeT{QbAPu9 z)fe|_Tt_|kS0^Agb#_kb?A1Ks+0Xq=6%KB$ZQ?5M{=Yi+cReDk&i$#J%EIrt!n+Fh za$M@%-z1?pFsXc84{DAjS5-|`gHkzllyiSp-3yDid_`#HOxI4gA;;*8GHs}bQ}tc2E7+EV z@pVn^G-V9&m6>U~%XNZyHkE8IzmahPfUP%aIi|xOTu|2Fi+NRg5~5;vfh19 zQZ|eT9tfntpw=xAb4nb7gyaoQc1cq7b|YhGJhwU6UM}2M<}iDLhmaG&c3Vy`ThfAu z$=+{gr@)+KNB9uVHFbpB#fND)?exkVGmCOQ@ihf-R!7-2XstoSRA#Y{QkfM2r84Ut zP%5){hDlM+fKr+D0w`N%r6ONGoL?Oc8|i`Fc~~(`fz9B_lT~8K*oEZj&mn>P%ayrO z{iCK=L#J1CT&8kiX;NfMO4EVx2RL>WdEy~XmBKw#Re`t?0Wni=iy6C31B6F|{TjPf z9)0l3v58utig2$K>RQ~d5o!VMvxPz_)3&g$;#FV&w|tK$i)qe%cmzA+hq7OdbR_w{ z#O!D;JKXYqx8`XndCk3=@f!vq*YKa7k0MAbhtbotK$4C#cXAl+W&9k=%8OHRY132n zeAZzcshj>s13Vpv=qQk%64{LM6(JnUOS^_1O{ZiFxUb>=UvTY;yzdF$mGh@ngPTi} z^glGG-aFu>Sooeu3u{7vAp{^jonAoVub%K**)KMARN}cx2;wOpR^ zJgVx&kM%sN>hV+IiyH8_@UIg;*;H=CrOuR8@I}ZqT){wcDEK{rALNPxvgn>sNFBXdL%P$p*u^c26-;ZYr zh1l~bA;Bf4+r0xahAqVGiaDMLK z{0^K=4i0T9?ld{}TxHHBGDL6&2Q4^aoaYERy-9S^ag-rNj8iIEq_|l~_uvDE?zK)! zgbXQSoKlEr<9bvhowvBJem51sRVV3_{5n?co2EaGWfilHN1$04j2E7 z;F);h^(@DoaXx&@e_di%b+5J+)mg*$3{1bQdtP&6xRCIAxOQW$t$h4v=tj}d9A*dD zi=usz4R^{<{HM4v=itfF&MclQ81_wUSC**+{4iDTTj&2iALkLV$%$4;_ak;8;$ocL zF3y=um;-aUi*t>O<5r^oV*|sJg(~z9432ePGn)klXDM#4HaOP#NE(Buv(86uF*w%w z$dg!s;Hnpg8tZgPboo z&n#Le9lvBq3C3||@qCw*b<(lLkP?hTigOz0Nk>cNxerNTJ_!c@HLZ$?f>RuOoaM}- zhwY1X#(C25=a6DHs&kDXv}8`5;1s8;Cmm-PQW=osh>n*{;IJWN;8L9X!C_byhe{17 zXmS3GpG=p<`6oD>+gO})(a*5&u{c+N!(6vGQ^1Ki)lzP9alY)}*k=yCA!?m{ymCY1{a-pBs`N2Iq3(ag;oi^j*~h%<>LR?w z2`>>{v{17-wJ4Z3W$L70C6qc>;>hIG0-SiXvkevxPL|dzvkAummFJt@6$U34nEpA1 zC)dPISjG!mbjKFr4O3P9+?xEF(6XAEdLGCunOam{R$PkM$w5q>>BXC*8)~Zas7#}1 zNy8#RF;+2L3BxUDs9##MM3ey==Q{cN3hG_wN;;=N1#f;p&V{1SsVNJGL@@}V)8Ute zrC-QB17PIClm;U)#G2vSbHh9}cwv5l9X4E2jst6e^| z+Bt6<0|g8DTC;YA{h%vVNjqvsd0vUAOAam%EvcFt>Rh@B{76v7U|ZGlI1j^i(Orm*i_5_?tH5EJZ*yO^RP-gB4@brtLu3wyEJ(h!~R6y^_vCpGE)&Jmgthu)C zx3H!W1ATV-RkBnR$<+@A9j7 zc&}QOny^3|eV06@H%P6WEga9Xb~>~9TRhDHF2&e*l4WKf!K#B{b1zcx$iQCvkTw5I67ia5^ z_iSCLF&wH}a@=b5oT}{b%6cMBnRJ9xcC+a9RjD`}aBt)<-J6GZYx&gMT-4Fjv7$#? zkUK%zo|K$JzOqBnRjJVTqR-Col=Q0OKGJ;6IEt_;MV&OLFb`z_cSsNRifr-cY+E%Q zI%S%B-9@i_55Ewd?H>R=HR}Q{E#!mdl@q%}^@AFOHM-+JAPyg`df3Oj+eB665dwb;hj%dkY`nKov-uLbdjnlUd*c>Xs6KEBB4*&kR&o}G0zW&bu_bRRz_xa|u;@SZ=!+!-AATwTR z>R6s!>l^ag(i9xNh)zAMf1G#o#~n!F%G;qT2C@Uk9^G3-;r|) zH}7Rb;;Y!y z*7P=hP=0IEC#3fIPHWl;qPbVMU$XOQ`NXTYM!&fitb>2?-Pv;Rm6Nwk6yKuB+1vG2 z0d;y3*^(OVo_zo(hHfuLIKB(lG5}3)VoY?cE$I=yxz@WIM03+&@S%h#y(8?$NhX}s znbz?b<1XPeH?{L|bJJ_;pMd3weixraw)BrS?E=yCqHpcf45yh$=v`X-h#6}3t0<58T&FDr@IA@L~ z!$zy9w?J_p->>}>_tS-9Vf6u(tkr<(CsY&^_owPB&8S%*7aIzQIW{IbSz8Cz+gI8yrj-41adGIKOjo z{_NmXE~;4sJ@W>S{@C9`aO79J^Bz+wMjSQ>!3ceh4W!aF(800q`?Jni<}CZ{o^!co zqyZn}7*fPI-^cS6lO^@S8|kR;DkQu$Hl&DgO0fhisaK}7WLQ$Qh7>W~wAJ`!=vO%U zrt(zz_<4FU_l?RhoKLBP0j9c!h1K@`4;cKxCPn$Y<@`FD-$$3{jg|e6vDjN{po-N= zP;={);D(7Q0TJ2gV+fN&RWKriulr+ms_1(@5%jVWwuZ*kgbMLpc3td8#o~oAvJfA2 z9O;AMBQArwHv6x(E4|OMRs}VQ`05KeC|$#06czu>-m|9?mvkFev&rq!Ui9;%cr9U+2`i zKN7gH2A0({-j{dRfIq2={{0lV%}4Q%)$TX({OgpCmwwp8{^`f@p})LZj30LGhC;C8NkdmaL#a@{zZWK)=~Upz4{d}TMQiQL8AKd958R# zaPjI(4&-+O)0c1N;f@r)@xas?xFe-^EifCq;NN?|bUR;#o5(+@M+QbAR2k51+)b~JF#^jhV1AD-0$fMd5{#m{P&CEzz^qpsqjnI-+=591j<#UcCt1Ukogw8@FD47yP}z+)<>0HS@)G0Fh5d;`*+EQApeq ze5w9wC!EadI(?}=3*sHX%^ahA<2V}+hpMOj2$(+^I23nW9F`K=KY=M83j!_~S3LjF zRcTEIhB&%JxF2)@$A0a%z0vXy8u5Z%J>b^%3X04;UEbV|*Oz?~^WEn(J*z5^%qC;oKTg zSU;Zb0D+-?`nU9VXGdayIHxp?_P+$mke zoz_L%nO(r8Al!3YICpx9>)l1%C0)QVy+d6%cm6Tl5iXoNe)R837tZY;ad}<9r2!Xo z;mTe0fVin~aR1S7S)<657PEyMa#`w-$ZC1{V1CBmHfy*l2*P8T?MT(CFE=9l{haahuX8aL_-T+c}G2X zjUCNP(pzS4PT^aA@TPUJLTmbmFgX)V=JV3bn_Hd$D_Yclw>&D%RG1iB>3YyRv(w_E z{V{g5C|&uWe6!do@z~BFlPq*E7dl#$p>Lft8z1B_+t*2J%LKI@mtVe>zD;=S6BMry z)EePUGI=vW-6_0zChta2>^YLPH74)NpiUOv-6n4XsI?;d6O*?I)G4@Kpj=Xk553S1I|~^O2bc@@Qxmtwjk@RpSa(co z|Gw|s=e!sp(B1y`!rXlKJHPXtbG~!VcOLiLbFzewz1sdSCt}WhgHP!RhLQmmahw2Z z1&gHFhE(I&0c^q;&WVa4Y3(og2}}MKs869k4-2~(o<<~YGvmbVol}k5vZ%NjcW-)% zlZhKQfb>_rJ^>MD_oi=I3*o7M5W{8Wi)Br^5VqpPg>mG1obKM zzbQ6ua%DO!X20#0HBZ@MkL^slpHnGEe0bxD{_Q8$XEh!{T%-^8T0$4e_Wq1We@4Fz zj2qOAX|Og))+?Y`ri38n=Zsa9yq~Me!Y(&hCl<#K)!YS~6q*bZH5W6HJf|u4c6tmC zVi&9*F|~~x;Ui1h4eAHXeKLq33|eDjyuwx;(U80MvZ*i$NK%Nyw5Zi(Dv>pL8}SblCv@2@TA z?&&+ceUx?Jg-`kphmT?{Sb=rx7zio&c{)BCc}iU@2pb?vy~nMa9K+dt z2n`*zHG3bY%?0r1VLao{D*l6D*X(V-i!jEE#v@ZXku-*w#uSYqXtht8v=G#FOgTZ# zV2V0#4Oo)6T>kinWGUp2rv1FX9OpVJO9HWHlkFnzD`LAQ?0hyJzf2o8kXj+(LFyf_ z(WXyBz58vwLzeIhl!6`9D~;SvcVMw&TBgTl&%p_eFGjvbeN_9*7dB?%yvD)X=?Srr z>^ZLhRg-R?d0^xD_MAh)h2|Qu#&2khJ?Dk@?H<~9%9CNA`7%Kc2nh8|?Kyi1f^Dlj zPY*vvBKbtg=MlZzsng3A29}OY>u-U74nMIpwQ>3Sbor0$4jss}4_IW|39+a;vfL(* z>zyx!uZ$GRX_0x6?Y7AF49{R$I=oB!%QB_4=)REYEW=Vtxs0|Cb42FJ)#>xAZDA|m za#}%p7%cLpVQrClJGN&^p>&c-QVg!t8KnO5sYEUV0eT?MqD0UbporWAie*MYS$g<# zgh_A>g9LD-5M@rN>Jk+pbnP#aMhy1fu7}a%pu8xFmU<||2XX`0&#>eu*XNq6J^22(L@|Nre4Hj=xAUC(xeI^CiVunyD!EB=1m zY0Q!(Q4dM9b{~Th{em?36E^+R?iMCmMjB5&!P2k5T{M5xFYn;^Yh_SPF~y^GL%!c}&E0 zK)$~3!%(I?HxhmpL(Ed}-iLS|bRFUV1|qJPce!3|kGNi%KgPcEQ8497Ti!2m zI&kZJOUMI%W90n+4cYd){?ju1;4b&8y$ht!l7eGl+s=dG;=W&ot7O-kSh$V#`Pg|c z6Ya+ZvNL`DywKPpSlfc9w|;=7%CGmk_i@eG?S55uy)1{Hl^gaAJtDt8l#ax~Qg$7| zvgYfD1Swc0*|KZEzKWL7kEY0CDLwyf2M_lA2-0ku#|ftl8MO6wyG_AX~ z+H-JBZ|0g0>@#0CyFEj0Fy5Koea6pBF4%>V(?l+>n_RFFrRMTByNmYUq$QsM@9N->F;b5$BR&&AF0O^=<`ve`&NJ+ zIv=H)xr6*nLXlQ3E_nla!;!ulfohNRHQ^7E-Peh~ksoixeXuWtJ6(f)J%Rw$0g8km zkg+KL?0sm={=PNfTV@~Lbx#`zu5M^^?K`RFqDG|eJZ$f?ftERSR3(aX&;U)LY7x3R z?;t9NT~v;AwQ>|ZZQuDHnwK407wwenecvHQWi~ct6_Y;uOBe05s5y8KMIL4VpApQ-O0@eYZxUCnkluY0l;ByCeA^s&w;og? zQ+mL*=ZNioOK80*Douu{$V(iEv-Noa*cBbuU716(gsS?vsB+-Dxpc@}Xk;#xGCRI= z=)YM51%Zt474njFd6X5szRc1%QVRl^Cx=WR2zEzJA|)$4*93vx;7UPy-j!*JLzI(y z2l|-3dp7qzWsA6XL>kg>`IzQj?RV6kKqBywNZwD^a%x2%hskHhB11&0N@M4r1D_`S z2dJBwT8jGtJY`8;pk8AhEeN8Me$%9X*Ld`;gD@>kp#F_rn?Z${>HzgHQ(d3}Oa(v< zvgE%5CH&G^yuxVx1I!B5f;8!0L6PZClU@TQ4Ac=&KW4u$RkUd>h8BGvZnhO%zxC>q z6*CmCJ#X8ro6Yuhw8=9r$NDspRPf5!9nnWeikH;$4&kzL2jdOz80zk}KV_3JgXSTv*m zInLhopuWhIjIZ=EsavrEgStKTnXe4)P+vUIsBW)#1Qgu?8r4KK9o1c*MWqwyRn*bW-a$rhP0dx7E2H0iH;{U->Xhs0je7}?3=M1@LQi+JpyS0Q;Y z@?2l-pC6#X8}%W@c+de#)SEcNg^9@1ZvbGL%tR3V?jsz+`Wc{<8MHyytCk&>9n7yC z<`zUg##=>)E>iK+j)4+Wb^DQ|aAxll12pL!zPjV5_|ri_@h!#xlfU*w$KsWumni2LxOdPR5{%dg#)i>lppPrrz*v z#opIPYeg*ay&#yq+m1>7cS_R`(ev5S5S5_|)>~@ZBiqpRUGw^I_*IrnTY76dghPgW ztb^sdNxqFC3gb;MMjIIv|1@T(N{cfK$!`xX;bN(eKj>ZS9{jSTa@?t$WJ%SyKZ#!& zZ?P?SRHXN@YcKBKWGTBq2_y4aP~T-94J3t;`68%6{IaBP<4&r|;+Fot?tp{T_6@q%_8#qsQ|HixMjGx%|JC(? zJQicBOw1d&9|VzssRP%;7>pgn^PuZtl97kO*pDz0dpv@dk**W{;q*xOj)?27i0kf% z>kARr*LS(@gY%c+eT=*ZSQ?Z4z_Q;pAl*e{vT+3m!f89U4M<^3>ukVkGA*G1RORr zkGS_yL=VWb&=EfQNRoz;0GdXOhj%r+ia`nWl7Egws=efAK+Dy(e%BkKuFKorpplCE zZMoq$?FGlTWwjSPjlS}pX;0Z7gI;c(z z^b7QDE@<>A=~L{rG}aTgRO~Z|?j}CpT?2l zK6dLljs5OBxbSJC*ameJ>)!W{1C3C>`+f$xL?X%*{^xE1RI_HqvHqUu}*N>mdEs3jbQYd|He zCRN{nD~|(@p_PJJ{-Et%;^37$+I^I2e3_0qAiE}DT4Vo?SFMseH3ckjoe zLM4Vk_HyA?1K|)J8)Q#ZlpzqquaMRL*j_5|6gmqZy3qdEQ$t|yH?p5yKaUfw%o*R` zUjx%|!Xl=Q*=0DqPktV}QL1uWhx%PFt;ZG)y+!&%w*#$9JPw@&-=S5YKjqACF%pdXZ0IhG_5>V=r=# zctq((N026tR-zZl6aR;V3o4u1MZ|jn58e-CuGD*xEQ?BboL=ND+>0C|j~jlFLKLx~ zmm1tbR1DX~bo9k-|85x?HT#zxkRxdYAA>b)b-=!MP(vSdE9C0FiWEEa$aI7)a4MfLe${XI3P>< zXHfXu9Tbm;n6g1N=}cV=Duby>pvEvY6%#@!1_7&xP1g+}+TpC`NS*Q^lq zdp{aYgE3|8>TiqhQ%tJ7B>u_}5%xHQE5g1Mlt{r8P$E?`Knc@3N2AI>i8$73R0F7L zXf91!1xho=w;Y|AZk&t5b|+c={VR?S57V2)<&m$Hg5+oqKSE^Rhy6b$*ZyA0Lc8me z{{A;V8XjIQ|0?p8iQtR(W_XQ;%|RThSJ{m>`8jw(=b>*p|3%m1A{moTxp)GdMf4od zLs^5&gK%k(If7aUH=_3UIf-f??3>3Nj#}^Wwwve590ET_`l{fFrh41d4)P>G`_K*I zVt&F<%m*3T29Uvj-obdAj>!EKS-kwg++tq^NLcCgNI%7lrUK{VuSNbbInab4MN{sh zMEA~gUKtY>$<3+;$5%2QWmPl>O96i9C`C?}L3=xNFIv9X)En zz>F66QP@8o`iY4_JoRjV;m6k)`P#&62EFzb;cq%~^FAExt5*b*x%*3`Zvr0YKSHY8 z-oV3pk>&k;oWs~3g)+Fdzn@~o66JnMt!%qRE%I4Av4>3WCs{Y!hgo=80gK!EsLX|9 z_z}XhR~W2wp-TLz6XWm~^aX(8?JBPaM1h47B=fjhwV($C5EVDdJZ7#|E$ATuK}}U5 zY-D{hSxlO>LaTvBd3-O~Qpm2FpM`t<{0W1%)6zo<6wjs1ZJIxUOgE+mo)NAh;6uH8 zCO%F9@MN2XCPwWM_AR1&&JbQ4d$7mLAty`#O<%u^Ucl3sD3e(;c|XOB?fdps*dC^d z^AY*Rf0bF!+iAFu(kk?ar zDNEV}>W572f`Y{4+g+dzu$22ii5Os_0zE$8wsgu7tO)(kzWiYCV5apiN@ojMFvdP( z553^HX|Bv`MNRWiHkyZWPQ)xR7khLtYC90DTH7-ru8dv-eX@D$!^->fdN_ZLqp=c{ zPzj;||8?@7yk9nAKdR%AH7EKvXSQSFYbQyQ>U5#<8oXmq=ZKDE0#E5(54*NAy}yBBC_l7m@dCyf~9Rneirj@CHqOjOJZ%;@8z3_rX7>if{2IX$DJ2=^sOP zkmhJG#Z%j;?hU4*vLmiHsbQ#X6r6t7o2r$;{!N+vpQU*m45fxSSsYtV4Ms1BnCP}D zjAMv6RaFK>^?8(@&O+9;J_%C*xR_FLf)Z0I<)FUBxGGR$O63MngZO1hx8VLBQ}<}p zS3%v+KJEo2a`AhbEA=)$!Y_;aBFCAc@!9)K(JK@BWpO`iETm-d1k9hnOOr0eGu7`b z=}J(7H$&s~yTvq#c_hcl*E=6?#2wFl$UyHg;AwBK4DbJnA1EWO%i0|Hxs{H{Agt|t^J&X zUp{`cdYaZd(7Hz|@~NIYhM*H(5F^o`!U!N9U8EAa)W0fUaK%Dgnne_AWT{Y#??^6V zY93${nR0@n7tCo=1t@xdpT;LzQQ=SH(-a*{sqs+%Qu@@e;W6fdC&`B2B=$|E{%WSk z5G-YiByhV7PP~gGsG+Iu#EW;OgIU8;b3k3gR4%B=Oi^mDWy%REhbcMARKUJy z287;XrfC|E_Gpw#noV?3nB=~QrBMtQGnECZkg18FoJ>(U`V3RPZbv&lA9Gw2oQ{K^ zyFs*JHz0hUQ`H>ubxTXJMc0Pr?q;dN7ieC`M05ALaHmw_@9Oe*OVtfkRZ>mBhjXNX z_jfydZH}uU;+k2rgXb)8T+=>QYHjVp4(?5U^~1N;o*oJNf;p~Q+n*-gx?sYR9 zmE9Y0DnOe9dzSe-!z}HZHb+~JZ-%2G2n3?$@O1}6-sZL$VB2c?hOQIIO;a|dU{AmsKXa@^fa&Yj+ML%nl||Z8=AVdIM(@a zMz+7r+tl3E-0kc1g_}CodHk&bPn);Puh31ct%y};(>iZAj>2x;h_Cqkff*f=ue;5= z*|B($BiAu`GGa(i3mrk6Z{VS=h&|GmzWBw(lnHrxd4-txD#SCc?|_Dt&3lpm;=Ky} zbrKJk6TcE*pQPN!bu-`b7yKQ@pR?89)icA__Q=}N7P6&Q$=OaPr03@Ty+zs~IL1xK zkm;B@p@!dl%@7+a(1K&Ox>m~<%m6$Ycgv%GQKIwp)KW?q?0aX}IG9|l7ANjJ^M}9s zg-#}4gb_87CL!oa=WNCkSwq1w#)oQEqLcf+1~RxQ!VeKhez7h%j{QM?nK^GIz5U5sIhYzjT;oZG>nx~y})0Zz7wLqo0UCeH7` zp%y~-MH6MECXNFf(zT9R3{I1YLn|mcOq|W&giM?-gR{%Tc>)|NN4n%Uz`5VV`2?JY zO`M4+I0GgQZE$@^;}~=B9B}nBxyWoas@f!s(r0@8zIDXkK&6k zW?$!mqnELoUln2ut@=8o_#%wi7g=Jf`Sy7{VWuho5xrGku$FlJxpfn&9({ig?> zpLwh9t4#4l7_+Z&?2FP%*H^#!XPA67hOLS(!kB&8!O?f4eEy=V@JX8L>lVcqVc^TK zJsZ_vt3?g#ra!!acb?=+u_R?6c^_ACrW=YOUzuDBjdJMwH>>4F;Vd_EnxRb1x^2eY6lSCtitbx@sm+tsow(gow zl=yJk$pVS3pRE>pXGNGDUq2DNC?;JK$knn)!L*GZMvj9q$>T$sG3(h8BWF?ya;}b%Gbu(+He)ExbX_v^8IzvH)A^nwYR)0wCv~6gfA2`;S{=^E8JsYF_MqWwig=7&%i+a{k=)gQsKV zP`j$@kmO8>k%K7_U?}Ev#Xnt?+7+v19U~;^Uz+DEHHIbhL(3klmQviQt+njAXjg3g zqOrf#@-DgK*Y(nMuf<|!GUgu@%+LRry(BiQT*ln4U`p#g`{h{7EXGj#PxbVrnF}%J zsMj44=h=)|jmS`*PJYtYY{ZEAp2rx{0HupgDV-go!#RwhjonDjgB!jFIHk~NTk;u0 zo4S!jJ9^G5&R7gv9!m+_DXjB;P#ZSJN5uJhxL8kuna7x)<4!4F`G5rtT6BEoGX|N& z*Z1EGKd4{~+iWdhjIl1yk4Zb#VylHp5ruW1XY9e)uog1r0Yrf;(Spz`$X-1@LeFe1 zEpE6YveI{MylvXTn6RiTZMD$LJ8Em2@BK1V6)gu<7Z|D?q(j%*h8c@v#1Hc5G$vMF>7(B_)Ne1*L}_yImL{j4ce%6`PHr4e`1s)@{4lQY6;>_`uVSiR-?Y_ zaTXY=HCD?#xRaef;JJJr+p=?w###lBgV!}ezg`9hFr?g*vTP{o*rJb&? zQBrYDlN{`d7rY8b(m01=IKPYGd=SGKMH$bRDp|btB9_XzA_j9^45u=Nvr6NL6k+_Y zaa74S#c=*1hI3yG=f^Re!!exSE1W4>Dy(TDoqD=v$8eU%aJDF%Y)#G=70&q@=X(mL zLgT!maLP5#C@N&QmS~(Q3TK|iaVwk|8mC9$lxiGWK}=VP#`!melcjM!P&jimPF}k3 zHDBZ0sBkXSIFBlve2w!5g;St$E;vWXS*UTk6wYFe^O(XZ);L#?QNZQYICm?Y>om^8 z3P;bK7h*WSQ#dmT!{B=n4f9$I#!iD6zSO!iH-=Lj!>Nhktcl_HVmKQW&IBz!cg0}#Dx66g z=65leVj4o3;v7~ub2VR2DxB#W=eIGw&Z9vUu1pOxMd4hkaa;=L3XKy~IM-^NZz-IM zG|t-!XST+fMn)RfH5#W!;pq8(YYgY^7|xy;&g(Ip_hUE<>2(laYA)Xx!+AJ{b3BGq zMuSCM*K4Wxtio|=oZl%NJzb-yv&EMh`b9CENhXe`)$8k2J!z5`D440>SS91x^kRm#n;su z<}rnHna25*!pYG%ms95$*TouVJvdYm@-)s56^za~A6-~7>^jE>4#jY?=IcMGn``2X z$55U`m1&qT4em{xUx7optYa!MxTjL5bN(G16c~kLJbk_jTzz)#z5lxVTVm`9wsg6J z?l`RmKh!3}#<_0dSekIBkhlE){T49_z=Py;&>b6W)Q@73o1B9In{8rTBu+U za^fWm*N9O79whr!A{C4whSUxYU4mnjQvFco*Xf= zga>Kd)k3q3A%>I>4qbv{jB_2h=Fr8=38B|0z8GT)y*|d5n2#b~cPhRZWAfDy<4eqV zkgvxSUyL#NYK-wE=HkfLhl(%8n0zf~U&gW_M)c&X6xl~5oH4|ZK1UgfOK^<(Splxq zV$`#k?IH9#@I@tFDR5IjZ`>(qu&rVT7FL!O6u_teiFAS}kd~)Aj8Of4@`pgXJ`e9KtAZM53r< z#mb?X1bxo@xtm`T>00Oi>GxGX*pE+lI&wG5cy~Um3X5HT?DLf7N|?6<>rg`&tK%n57|K|NYhn-MX*46kmif z`|4m{N~b|;eek7^bYDMJd=bX%%g4SHWl0SyhhR2D$-rXGsc^(a7_+bS;8-o?)nF2xsN1n;oIA*|rMW#Sm?awjl)T`vFL zYelLbEO=9V5yl*!E|afC*R?;Y`x;h!5ytEbnPCV^E`8!Q-IskD9B~oG?8^_19>a}~ zyw$J!x>E5)7_%=FGWbfzovveFEqg`xHB<3L7_+a>fTR0b_t?P8y03D@7h%l40w!NO zp8dr)bzdIE7h%l4g6zwNJ6(4by}D8NwMp?s7_+YsIC>1tzHV215ytE*%)ZpHre^-< zAM~)kruZU^*%u;Y(0t?EH8<+MzOVQqjM>*F_LYe{U5;^Yp`ljG>XV8u!kB$+21mTp zBwzn^QS+B{UvDeE2s27LZ#qUtg`N_pC--D$_if-!aXrD-fUhUyan|wQQr;=rA88>fMsi~@})VvB*VSdOj{00lNi;6TKB}<(pMb%aA zB{jv)qEN`&)f4iz32=8ArBKbX`u@ z61TgevZmI#5~bGf542%17?oUKHwta1zjZ@lzCVlt>~F`jKdcqR;u>dVNkwI`yBH-> zDfR7GyH%JUz`8D!wN40W_XnsDccWAq%W#Rayt1m;Mz<8m%XTnqEt{NA9bavjYZ0Y{Wug2I2OqZwi~ zzjJGfs@yfTCDl%`fwn11^U8|c&_u0M-BsJ89ZYg==zaIP%J*`6x^ znCrsdT<0n$&JHc~R2dzJ%_oEwdfd@`hR-&fJ6f2B2bL)$8P6mw^fW4t!cBdm150t9 zXTaOz4}?4cXy4n~;ceYOJKKi?UUCbD+B{gv*TvZjhOeuKn1MiRM*tDdt*c*FSzYdQ z-caOnuAn5CI7P*cxlRsqRx}VYuq@E2v5Q@>wJf2?z$+>$Y_a^ zgBvN80`vv~FyO9b%SviWU5H*WbW>cqd`>-nmHS) zQAUfF)w$})Cq;}S(cIRin07Ow$c3|4OF5ZEh1um|nPMX^Q*>6agrcGfk&N7$x@F#A zxD$uBYAOr&V5Oed)8Y+=Jbryir_&5wLArsRJt>X@GRhQO6{_0e#yC2~xwr=Pkm|+p z4j!t=PQ$`jlQ2(pZBb)!RZX#{q@t#>#O0}~tV0%)chZDO`3d4vp%n6{jzX$2Mfg+# zy|g~oczkbk3ZgqAkdL~ZAnsjZlpLHP+!ND(fj3VzYuJ!BPjk0gju6@OO`6yJq1aei>M)dsB!%4XH`@e*R1fAh)g`yU?>!= zT#!Jg6KRNBg20c?m()WwNUUtD_cu0ohGBe2>BXEu!H(w6PX8uPYp1t4;8YSt*-izn zle-ie7gdwEWRIHLVV#lr&09P@;gCRhD(hX#it1~Yv5lcNfr=NQTfAsmy(z%~+|(Rs zizg8R)!<t>v$GZ}?~AEl#*vK&qeH_>(FO(lThxQXm;2g6+5zGfUf;Tokm|Go%^1^l z;g%3tGbOpj#yY7+89i0e9D0;A(?6&1yGV^e^m+hHD@H!Q33ekSbgZuN4Pq8VR3a2?>f zPo+|A#ZFR?a*bGXS>h6^$%%FoLxK7LJ|jVOsMylu4|RBhKGV7LYF-q2Tq(lU9$Mk7 z7;U8@fmOg2Nm$BL7s5si@ji74T2gXLUDY+q+r{heFZ`C$l4{5@No^^_-0 zXB`#8Sx#<$R7*o;i7;gWf0v4bmRD%KtrBh_6ba-)R)vPb7`y+S*XRX(C$(uy0) zFk!H)lu0#iZoc%IK|!0WpBhM%@uLBohdzMucVi3|bk=(}qi~uk2*pdUA|{hWmCoEn zpm1T#s3qfpSR#Rqm1-JdM7T&sQCo9Q$hXm3(n+%+?LJrmh1_DSfJ)qy#0i5LRS8I% zsL(W2_l36bVA~nD&Wie69M_HObASz$ryI5aio$Sf9Xedxy`knWZhufjO0(i|Rp!J% z%-b3cAa))ewjoRW8+=~p92&TlY~GAfXO|b>l(ltw19{-Jhy0zhJ+Qo>JAEx(M9%hf z`qz1SF!;v25BT1W4&fmiqtQ46D-+_3bt*k*;5MO( zF)YgOvz0C?Z)Yp4{IeL=+_M;&2n!+Z1@&%%f; zvF6TVERt&ZY{ny=?NW35Y{r91MzpQ@Ys4d-&HHP_gKU(+Zp0mOMj@g)U+4`{cRC70 z{nI!@xftb(5kxGK3$7_*Q3EZ*@GNl*)DezpWMYo#ryX~geV^tS#3XDa#v?KM9RZ=) zaq8|!h>bGRBQcVSN&W~3jV_62s5c%H^)nMryawS6g%qdQoS~5781*w05_OBc9W<=) zVOA!|7)OVksiB9~kcFD@9{0=*aiUT@;yp_>`fBS(6O1$q8P&{SGQjZ0CegST<8E^X zY0*84os5{AQImFd<6tVM@urf^nkt+XrEx>Es+ZL8cnh-5n8qcw^s>)SfROKmOR#aN)s>VBWv*+c@YO2dU%Xxm;>>`wsTT)$H zU0hUAf;S|*q6d?V>QV}49^SiY>dPy|%8ROsqFN^=E)_7=9{3W#^W96Ui(FN;Rn95` zDIPW`yJy7@VqSG|N#zpPl3J&_%a$4`Wv{IS-j-CC7nN5*bLyU4syE)5E54_>?&`7{ zS8Yu>B?tR=DPDwD=GN9=Et9L(?G(FunH=X}kyLqEZH1FI>oU1usY%t6%F6O`SFv%W z1J+()VG{~kDHS%gbcv9voWjUYODrzTF0C%ikBK)H(Nq?d7FA=_qf^;@ ztZ+_YzOwxoEdW#Z9}^LyWm?)YtYRdgq^!8Ox}=t;@(br9lp1{-G9;@Kza>dyP*Ul1 z)z(%nse&|YR))&y-Gt?9+ID3W9d*MpERO8(X~DZHoMq*x)U{=`PA@b!n>H{joZW@x znb^XNmcU{8*=%(av%=Zf#Z2>CQtYf=QjTR}CguKy zZR$p5PM9~tR6kGhgVo*{qJ7Rl;gxWwGtWDpu4e7IJ(n;28T+8&(x2x=xi_-_it5j86}ckbM|4#(`=Il1%L>Bg~DmeJCMrCrS@+~VULT6k>S z)Qz71gx{+~7_YIJ>UK=@jTT?{euDR9Rv!6}Q_3thF107-IQ-~fG~?yW%yk;Kb0are zxPB9Gy$Y88IHlZyXnEeHlJt26L;mP;W;&fn;!JACD$CrJb?&12l8ObBJSAw{>gus5 z*;83p<5^x=>hjdpx=Jd`DqYL!7UfQgZkN8zC(U)ORDS zDEHKqEc2AoZiIqv3W(@5`FrqczH?K6mw?Rhx2%^INDIeXCei*M^xe!O_@GGr>-Mz< z{6T+v$dR*bilYWEDZ6}sN4p}z@b{pDKx_YtXh}rKL2EBjsf`yEi8THii84J+8hf>` zz0KS1SXzOY)p}ej>Rr`!l{M949b>QV!FG{d&5oK{S9M91LvwPpc6v5+1U&6MbLTh~ zIK167<|Mqg)7S1OB4wv8sJW{xo}i!*h_y5AV;vsP1}yvWb~-ltv9%<>D-L>>l^54y zg>+|*$FmOW^qM;zVJyILObz+k+iADL>Da|FY&|TnAy+XDc?bSZVRL3UAG{^ci1rCx3x11amIK?s9k-NFQ9YIq- z>}GIWyx1|%0HJ8afy|m~z=-s(_D$W?(>ZPZ8iI4E3l}IM)O7gUb4a;U9M?H! z;g>rFX+U~73dw-86d*?=8E`g$1&(cF$C|SmO|rTq2&=2Gy1&({XE*0|8*5(ARAvSR zvlTDKL!uN=#_NyBj+>Ona5sGq;iXMULymxd6Ve}>|H7vU+Uh6GnxRx6;y`=+K|o11 zGPb7^SqsmibP$t@2bB(zNX4V4Q!gJ=b2xqQ0wKt>MUL$`Q*$_Z3QuS)vD!vNU4}}- z`bC)`4gc@aq7q?MkBc19icL+gUH(8%hriTE>z6D10Z;zs{3!j3lBby%V-eMhAF?== z(kRMJY!Ne+LoBw~C`x-bmV+qeJ{$-zMW5ynQQ$E7X~V)i!Pes>$}SW_HoQZ*4OBSyqD7NP0^&N*uE4l+l1Bn^fvM~$fi78E=~Dz?HjYid*}5~O*7 zpjj+Miv@(R=v2g*;{(eY6Cc>dR0J90GdoUvAUctlsM@ed%R@HFQO3ns2^z7;YQ!r6 zRT@zoW6Qo?U_XVe78NPR0GsNBnzIS33dPEon${N}_^TBEp5{P{FBGI0t0bb^O|3*QL6w-Ul_YFB z-z-`bq)=%XqC9n~wh>s>;!Ss;Pp`IF0iE0K3#ihtB+=i^T_Dsvs({lS>!)K^b}a6k z?(otdQ6miv)l{Xgy}26|U>0rWzPX1e6eYFSt;W$*zaYX`uZ)eCs*xUefUwDqyjcah znuyu0FonVd42?j(5<6A7j>YIYD_V6-TjYQk(E@6KMJ$^W2r1NNqMiwKUV;6$yy)apP%7Bsb@?p_3%Sw()3B&3~kvN0i7Hlno><57z!Btyy)TQ=!EkZ7lmm z$%+fqBSOd|CQL2fLYyc=XalC`L78$5s99y5!$PotdR1n4R-1!-c(3sjd=pqm|t(337o4zgA+Vd#Gu z1S9V?C&XSgO%S4kgpM#!hCPDfeE5mxcZvaYiZN$dh`nklPbc=QTalGimbKBQF;yos z8G8B91!0~dQS?;Z^+2my3DN44=8A%$xf-%ZQLGjco28M8HVZ@4)rKcpvs&a%8g(wy zG(QA;z8)nuZ#MqMnmMiEqoK!oHZpp)YC2h;n!(betqIdJAr)cUOx8$?o7q@u@iViv zz@yk|DM*x?#)4+7K1t0QCWVrWKxi1AM=wy?QtqHBb2QYSz-N-}o9Mf=WL-1Wjb80I zd_mVnZ?``4@z?3Coz|eAJ5r)*8Tw8Cs|WZo9S$vHkxo$)$@p*T^@MW4n5Pc4{{?IH$PTom-97*~D$tw+p?Wa;(wwT5< z(IXhOno#lD^4G2*y2eeTe05}wQXxhY+-94G5;QnRMwb(#ZwrQ1ZkCJqD9r(QL;i&_C!lWdAu zD#Pwmvc9eWUTyu~94IwBCWR*%MyeB;ra4f&%Mq746jV%mv{0qDqRKD~(p00dh~5jC zWT`GOvSQ|GKJ~09-bAS7EwNEM`K)L{F=j)1@>$V@f{X*Zlh2Bp#GHb8^d>157dxi6v@gJhN#RtoL!Y1mfP`$ETTdRb;PoHR>l7+WjT9$NcNR#TgD zH5FFfekU-Krs80b^J%A1PmZxHyOS=+Qh>Hp2s@+(Z#ZPmi- zQ?maH=V_x_ZsR~%w+f$fx;9FtKHyH!ABY)5X@xCbAM;eEUrlyUZ8*q0fBG39eFbJ*+BL>5pnDH5D2(zn^ZFI7+HvvQIDGx=aR%C!LC=k+q>Uh-5)&h@W>*)BI zs^xD~trEsOk(tG!ALS*Tc*UuiQRCZEgH29=Msig1%x`d2AE^1_^{MjCc8WgBo+yAs zc+wbmLaF6QV%HN*^=UISXLEX-KSV30J@2qKw<47ewTk&)HoHDu%UGBfnoAT`<_u4$ zN6+wR(pkI{)+YqOF zsG63jd3LiEQ$?s9H*?XB?Yf!A!m4#pVx-y!^ZE+27rnNhdVN2mGy7acO=@UVYw!Q4 zN&lF-8E?tZY0O1M&-0_>6g$sPv-YCPp-exii`wu8ApSf*^%W#T;kT%Z|*R6hK zt;-Rnf=mF9r#Xa)pO!Fo%=YBuU@!hQ4`%c?c-95{;T{it`H+M7PIt`0f6{~b>jd#p zil+jHEBI-X{AJkvxTv$U1mC0LW0hcz{#All6R3ncReYVoU#oP7yZ9rPpkax<_>83k zQj2jwf;T{>M)8X8As|?^IH3;OytM|W8F)i5bJ1&MuZdE;QntiLGCi$vd|(2l6$M#~ z(p00aXPWiPSgc?(gv#2=o#LSAig+RnO6uyKR(#5W9Y^u`6~5wV&2dcD6SvxtJ5|eT zK^Y1QzI)&l&j>0glbcBcYfyVmGmJTL!cRSnSt+GML7iecQVS#hw9+vr+VwCe5+TWyI}KO}AIENB`T+(V4SABV%J!DW_M%RVk-e zzf>uwSGrXxr)L*cDW_+ZR4J!t6I3aG%^GRwAuRK@h55jQ93Der#l80BSac`A;Do+5 zKE^`#Kpg(TBN2>1(W#+shuW}n4+h__=1!TZwXdS%(Bi|AWYKc#Akkf*4wnGo%h9kG zFw8=6pH%c4=p86E`Plm%oA9%Az|m=l>1_C>EzVe;B~>_MqNW7= zc4_@_XqQfyX(NT`0nEfQPlb)XJ=T6I4>K3hw>>xU%zjk3(3Ak_8o?|NDU%}~t=nk= z%*jn2Pa0n)3oCILYv@A+MHkynq75;Ehz2(#E(ROxE=%LV28gGXM41U>ixC8&GEa!a~xBB zbV^65ws}McpHiZ1Bq5fGQ>EsWuUbn@oT)TSi_d3NdWdDyzfIG``WtpvRHXi*HV zHV(R>4U*AQ;qx?7dmQ5`nr6aK%Z#>~+G3*waKzlKF$f>oV?D;JsXaA>!OmK=*>#(- z6A-&c0&RS-2_ZuX{DI5gi`BhP-p4iPR-gp>STR;$k4UtRrU@LNX~M>w->m|vshIRcQ7J+9 z5PpLK0~(>bqy_r&K2L|DI)Mal%ce?u9-q#twnj_9sw0@W!{Uj zbVI$rrx;t}K;C9`e


        T0e`g;c`@GdfS-OGBsKQ(|V>%rjPZh<0t+hA*(l$Vo8Kx zC$gX>D`=2RIsQM$g3dw)DD!;r%;v0Qwi3P1Gi5A2$`nF;qlqnIw34lCwewdnnxwiY zOGzxfx){tORP{G*6K82gQ8PigW)tMtG&Rbu!T_}3m+LU8Eft%@txwx#)I@bFDUZih zU0PX0+e+5gSGhc%v9M}u9eD-3MHKDq)Wf9M-07s2%Gb7;ve#^ykf4*8rrcQ5L|TCT z;TIZb%rwOsrm>Qf_N^s`Eoic}BT z=AFPi!9Xka4K;4|>8dI(bC$cxYVo3JiIeuBEGgx!%?k6Q_cnuLz5vh;XV_aY*;cIB z^KbU`yoaB-oovs)>+^H5^B-Nb=ie2)=ijx+0y@Z@E@M8^Gv)F=H8Y4oSDZcn?gsk@ zq(H+JZ_mHi;Ozj$xJfT1YB=_359QovEkXh{J_rSXn< zI6BWNyQ>?{d|itBm!fcv%-S1gMB$zQ?qT2pw4WU=Dqrz%4}yOiFmul#lq69di-(&D zz7rV#NpLN|Z2{(&3XW7BPu^_sFCHsNmH5$>C|noZ>J$tEaf>I9j=KLs3b?7j-Jb&P zV&D#^fV&E~cT&JPfE#-*$`*cfB}(swaGL{6o%l=IaVBQU2xv_b@PTo9Q;H2hfpJ*C>b6^M1KJZ@6zDvh9T3bs*wC-uIz>=WaOK zuPl|MNI0|a!;no*8yb~2FdWXP9e$yAUwYp_xU}z=;Va}%;0x~O${TGFk4;{aIaG{W z-iMJ*wxM~EpiSNnS36w69dvR(V8|g5J+`5X;5bg+ZfiV3k?GxMLm54B+$XzE zc-F3#-&(U*9#jZ2(DnGGNuS5P8NVzEDY`*V2gk?0^G-O~uiSw+1G=86D{${&>T2BEn99Mu3coDAYssQwh0wA&2C_Rt zJ~UX&nI9P|SKA^>Z1T8BqfH(aNsEkKyJj!7RX4H}F1Q)cijsM|GZ%~xU$yga==|Na zmIXIh!WZ@qjOyJpYUknbn|TMRfZOkeYAyrWd(fghsinWbox!g3+>qXPI6PW*WuP=Y z1r?ktSJ+THZ1SF=KO%yW3Y+{C*A9^*MrW0sceoKA$IIai`RU?<=R#v-CzYW0kN^sS zbMpK~WS}AQ;6_shl`b@4>h0=j0eLle6|qYzW2vOx62<#)-8*=J;hO@28t4;2-~ zZHSA&T6r%D0=1hr;%BU90}l~Ns2_H$uk$B9J!-h=9otnkSD zscPEcL)btyFDWN3lec9;fILQio+PksQ~V=4js7Xb=qnoxv2FHcOr_&a)jdt3s(BSt zc&|IDYoc9(oMRa{ty3Q#EcSa12 zg{>AEl9QOV>BA_1P?Sjyby2LA2XQACDg8J95{n^QVYSRuFn3LszY>d~if6U7;7%zl zJ-X$)u^1X3SuHdKr?6Ugzx}0H42^lL78-ujmGLj1tBl2vNwHco86ipkdC5N=jKz?v zo)_QktwIrtPCFeEV6{+>fv#V^nfF#KhI$rO%THqD*ad7>G*yu<`Tvf;ZD9c482nli=h%|wa{>yt{1<27t9NxJ+P~- z82gCJ!7)Ldpa}7$ac(HIAb-=y$a`Cjk8bTWN4gY3gg$EL1p|8fUe_8Lx4+D4g>(&X*L<1sdlug_EUmURF34YMf6L&P5vMN-`?A zF4j233TJ}G@hhB5G|rb4&ZQdXR|-ecI44XT;{-D`p`tb^(cu_~+htUlaWRIedEgLE z=d^-D)=1~<1c&T_;216BL~yMZsta^2UUlaKqKwkhy-HYwFi5MHsU$>JV5hR5$7R>^*b8ru#}GgNlnVqonzGD%?~&uqxxVHOi4IIZ=>TOsxfO&OS1;? z9BVO+P>NZEcy4uDf|!CxWXl3sD4aiq1FFbx&~)Hd$x>%YQFWDj zNlmd+n@JI1ygsSKF;qAOOPf(qBG9b`SmRt;REc*m+}B z?QSS8S^@O(IrZLP&_!-lew6<D50{_)8(V+OZ z#1B%0!vIe=k`N>q{2HS+R|w-c`MT*qo;V!W`oY0`&NM68r862Rq`slG?~O0G`A#P*B+9%nQR7 zUlNH?0Esf3AVE)aTVhQhAY+jTdYc2SiDUk0pedD|Zto_8mJNjhhocu_g4L_Jnsa~> zmh5F@;aNQ3QP`tTeFUZAt;Fdrt*)%C#tDr)2FAI6Vh|jA>|Zg?AYAG$URqjQ>(ocb z@ekj_+t@ju=56fUx%00VczPRqh~LH@{=6jpR_PYTdmDSVgBohX73Xa%4Iv{}889Fd zy^XzUQZz31Z7lUEK8eQBNo`SYW2xI?yE;l<92|+tNC8Kk`xzad4de@|Yqk0}l0Y~-Yvnk-pf%|q0&KYCJsp)t(1_yg@m~aDxR}I;(m82c` z(KQ;sc&iX-bTulWGS2A1!F#At}qsgq}3Wf#Z7B5`FrB6{2;%_3{goL;@pDF<( zW+?}_K?O^LX_hBezLlvs3bzl9(mm8L;j-Z8%)|+(tUq1eec*o$n38FP64TX*%bIVFL24? z_us&rH&5V_>F;7-9#wG3471JkeIlF54# zm^V_8m%bS5MDU|4nY=z={#n5#i{Ep=TvB*)c}s!mRB*}U-3`pIQjj;^DM_>Oqbr%b zRZdCz7JhUkOYhH}XhZO$E15h;5vKa_qbr%buK@Fef=edvZD3{$-a!6lRT2rxfOLEb08RJugC$>iMx z%$F6M4e&(uZ67dprR7d0uLzhH1!tD0uL}N}MUr*{Go?brk6sk&;p(_1;64w``;`Kh zkpTAua2u9DUX{S5C&2w=6ju8Jv$#g!sQ();+#A7v8kniI0%uimar!S6z^qVkh=!s6 zqNn3V@LPa+Dg}9O0COw_d4C3G)eR7gD_Q(D1G7uPC5qoYaQFvcuB{XD%=xRQV*@gD zB{2Jz3*2P<(e@jURIDZdGKtLCHBx(DNLSCZyQ92$}FajArexuSb7X{o~?E-ZH{^;q@J->lrQZhX+?Ls>6qbpH5E<(9~5SaabfwSXJy!cUb z-_(OThaX*u;^%<=UIga-&j?(i`u0B3Q4+vv{fz>5A^zy$>ghcnxb#hE_y11d#+z`u z{wRO<0rNWrmneU!c-n6gvebLLaQ}pKv;((#n?Rk1Kk;x=5zuSEjJZ|d#w5U93%(ne zkb+B8o(Z=dm~W+k`#vx~I|&X|LwW<4f?g1~5|snObpdlA1>B#3Y1ql)63V0EemgL~ zS8${798Z6Qv-C;QI{fHLhPw%vU!Mf`a|rkoFwgE1^3K7Zc;SvkzDrk-0e2fP52b+H56pWh;L`3w{P3eIY5af*q=35(n1@op?FZ()6mV&OkNDwt z()a-rNC9^nFb}1G+YiipDd5un0rA7{r11kLkOJ;DU>-^Vw;!1IQoyDCBjSgjDSoEf zfw~39GGN*j9NByRnx!QeB!B8vN(L|L+95dyqThea2If&kmI{wIpGd=>* zVsP=_6W_h1YzRvzIVP7(Kb3b;(j`%w(8Hs(DE;hs$q_iBo`qbcG}q=?J- zJR)hhoS8^R$+G(F6(tQSdk%<+z||^PvP<+;w&VZjuPf2N#up)$@uVczf~Muzdb!EH z#ZiuJVrW@dQ*&2yx3AL|ZmKBv)RZjqlzO}T3f&aIim>LOmp-j%!Qal){=5=#_?!O1 zk|&^~HeV2{LbsfS?=9nf4YLwE0^zGuUpIZ_2|x>W1>E59heOz&$A0PJDN9oDU_BVp+X(aA>PqUYQXoQ{(x^CV$z8nqJm!krcTFZv3He3uM8jrs}Hd- zaEk{e%%eJ$(*7F`aIjM%3LSmqv(DS?4K#JJxxi2b3mQLP0mRif_!g9Qs-}A`kt686Ef(yv@5=+ayOkVf#_+ zY44!~dg!y@Mtn7xfiD#8eFwL%k;~KZ5$OEPP)1qrfUV$t=lgLz(+5Wr zhpxfV)FGs6|LAo3GyF60MdqbCnpyit(+r!0Pf*7Q($c>vt9@`Zjk_(DNIv!NB8oCtOti|8-1MAGE4^g-J$62MOQBHOceFHN2GaPc6~t3ajkrWqtMO}Y^GR;Dh) zoxYq)ldjZwG%OQ58o1twUz#*i3%!oNcVzg*1hmSx)-jbdqFjWdYUEE8xFzyj7HrI%4Z?daT}<|L8VEg zdx85BC_NYM!;`o~F3?w>$OSHGTm<2zC!mitg>TEzbN@*;cJj{ zfv8A+7Ve)WC)Vzzaw94My-^TFpYC`ifh3c>rL3e08t)2?HwhF?Os7dX8jmtURHXt? zq7pbk33+9jYYiwNd6h;{mIxkYiJ-z7)eFkQS+X0{qnssQ)Lg#`O3#vS<4If=;IQ%t z_cL8FbbCZOaYpQs4@nVqVhLvo*(1TDIw5#eC+KB|ut$Ptt`ous)d}HBbwW^Nj|4^b zNKj^b^dPI9?2&M#I-#pQ+8%xXEU5i#*&`~5Lie?r?gfu@FLg%8rba3$Rfsu|QimQ1Ez@W|8)%53WYgL8p&FIStW9;sdMNbU8EqtY&TX0;0+q;}y-Y8Mo#T~MTUL7CP5 zFPhqgYjU-J=d7yzj18vfLja-nQcdlGM`{;5Qu}>^bN#f(!(1H)4Y}tD65xyES zd-qKgp}8j@K#<$A>^V>2FLjs^z#rbXue^@Q`hE79Ke6BT?|6XoEQBq)9gjmtcx*a9 z@5A{PL>J`Gwl9Q3d%OM0o#YQPUSWw%6K}QG?*rg84neF6q*dxfX-Bu z5*pX2rx875+V~gSR(}K($zFaCQIPC24{RJ`Up|^6IP=J+bJbvvYj)@2Q%8r! z4Z64|Jm@-#;L!klK!5hTj!W%>u4BrZ@(As<9X?Mk%Z`-guEnU~sdTAs&l{tbi=DS+ z_YvCN{AKL#Jv!q4V92)L^+(I>!}4EtH5|W7cD>O%PYPX8;QkZZ_U;4r)dx{(;Hf${a0!HzWuvISXJ5(L*bW*_Ww}7|5(4|`0sG9d+>N7|8!NvS zsv(_cNq$iDQD~O*FQ9faH2~_XOzj6HYWwq`3OR?~2K6O&B}K1c%8EOEf|?~=i~9n` z%>z}$R23+J<2=p6UivsKpt0|;{Z4w{fW6h}b5rcM{{a#kaUGKnL>i7R=i>*?LEhVE z7EQO`mIX-v_W$l1-drNv9=FeQPTw^7J$ojn9|sfk4m9=dY2s=w@^a@ucpTISiM@ZY zAc!poal;dM2!DRV2iq35-zD1~Oi9vscp<;8j57EycyH@|#N$#t;=}>O27%YEA2l34 zF&s|kyc7YGC&Yc@%7XW{T}5Eqg93R2aPS!iIslQ%U&visPu z>x14sw%)Fz7CHPu#C^=(x9^kTVGrti-a*)^zQfxWqr_0dO}duDnVNx;vv$FycskjH zbo=tXC@#g*70#ic)t+;xsNlJ+uW+f%km?}dZqCtlpl(BkWJzDqc>kvH-URh^cD3U! zs4|V(21?X=l!iw8@?Yj1T%Pw~-r>Aqd(QjzoFRM8Z($neyEC?L!`d9#Mlr0IW1soV zM%d^TwTRw|UzZQ1;ZMi(Vz@cy*=N2?C4I%QvLfuP;jN$O>%ehw#h;W zK_#q#Y#{Oyn(XqT1dt`ldRe58+G4A%R;kw3)>egk_m_sltG&YXFlIdcawo~N`wJZi^*ZWwr-5AxldwyX0p z)&zfMuSPA_tM144Tf6LI-&%5sedI2Dw;m1jZpDedWEMK2!Oqc$F$b+S^<<{1j-pHr zdMqny1@Q6v9{UC|6hrlx3{BAA>*+7l2`?9ysnwYa@n=Azvv%&r-A)jT6kxw+E0B3w zci3;;i>TWP-Zb0oA*U~?WN9;r%#(4s3C0B) zfCv^(?7Yfe&8i8<*cqdA=R}v|4g2~nRJlH}kKQq>W=EPtD`b3$iR?Ij$*Kn#4sh7- z;d_F?I^g5Qo|cs!W3X)azQ=r}@O_{8$XMzp%(no(pEDnQoSoy*F!)gh`!1fG-)8tY zzv;?H?9PW!Swo zuvGaUl8a8I(~4ERTnz~MpOb4=Qn|Hf3f-B3b`V#M$cGgjri*wFMnZ?$7_UML)<}c{y*2G@(nVesfaQ(3N*6@{nlgC?Xv} zX&pu5X5OFG9KzKXj<K{o<>AV<$X(^N(-t=}rh&1#U>9!R6*j-KiQHLwO zK%dccp2K@&WePeu$evHOy;Vb3yZ|xKd*kMd*Fff*cpFbV)|Uq$V!o=p5x%u73y0#l z1=TM_x(2>B=8M9|mx_^%=Ed#1PwWHfn zn`cf5jsiTq4oKjK;d9RxQbx}f5>r^`zC=k4@5<=BUSVF!d>xTeUCr@(wrFX_Oi*D- z4R>4Y8*WDi_H3c_BeGT!dJ2mz>OC}lO3xP3Ycx8Mz&-X(t0zV)d(Q8xQL?B zWeka=CThxDPMAojX*}OV`t7aXN4k|qDH;sm3Q0(!k48r_F2u7E<*AjT;4QXKd0i}o zF`aTuKnR~f)Oq7%HKkEjQqcXfaka{Jt`mS*)kEH z1S(MHAwxSaZZBZ9zP(@~<#>BRF8xuWRP@vwMzK(ehuF8dGJJTXE3f<1QeqN)tSY*Y zQPnvWMxH%tv_p=Q&83>;i3+P@W@?miClwY}?0dGv^B9Wzy&f`3sgw*+TxF5gBE+V+ ze7q8XO@5Ydio$Ail!dVp$$ZE0q=qp=qV>1$Fdt15|AYBj;9J9d z>)~6+d_RQmZsvOuKE81F5`27N;Z67+V4?J-6IwLLkZytRUgq<|$EU3k_`b_v--C}& zU|)mpdkmI=5zY^o?<)BC6m^8=%hr4j&F9v9weay~o>wcjVW{pU-j{`(6WfW2HWsNb z;fW(_e9ne?Htzc-d}kmQH%j-_f*3iDc9Pbc&Ix z(~h01Y|5pb7vo;5Vn^GG^YC}nUS-<-r#t&87fz}slpg-P<*-t9)X|N;*IuzVlC}{;qO=GgRT=j6?KJY|Hw&gh0=`!h*UN`b6ry8) zoMbd^WaG}ZaNDwo_c>a{dV#HCr7K9qi&(_EfIPpaHLMqjtX-yggEVh6a_tT&>fP5a z?;^l%xr0`-wu?Sek)IRII~Jxw19Cn)-h^tQ$S>x+$CkX<`I7z-c^55YwOP_w^Xyr2hDf-1}ky2870 z4=2|^@DiSSduuidD$~H)Yv6O7PwfRpkoF(7gVF?Kro}wqmvf{SE5xE;)8B>wL-jkEi_-vr+ z3N44XV>zzhbQG|NH??z+xK~iAI%ePY?K9yM=@`xQgI=v&2hJe(ck|IQHY{ichLsN* zJ7a9iG>Vw9wnx{lViN;Pm+AJc(k51056ed*p<`4IG0Azi<|Kj%e%QcK@IWTh#PP)Y zH3u;@lMiA5Q9RWXZo~4d4a$H@94%<2yHF^V z9kcvowqpmgmywkz(%tZdSvI}`AD>{^@Xl8`E{BhAFQCCi(Z@764I4y5lmU+2=(^I@ zM9S9KiX6LFo$MJv6DQmA$O?a?@Oc}yK;qiyyH6|wzsC^|pNSbKV%Twj4!{E~KO(Si zy(H4Qk0izvjIFHF)VsBVrD0Q~^&mX<4NqHjn?givaJj2 za%;N)QtaU`toHSPf*0Av7%00(vA>l4fbCa2HhABJx5$P@MyULQJ(yQhgVSNZmt;q9 z*}BtsvO)v`gwJFRlKtMhDWWJzDJDiyk`84F)wrL1>l7O`KV9~1JL)4*l23U9e8kjE zEqyN^DC zXZTb<`vx+`=K4{hBuRLC8Y*&>n4!wTyO~gV3FmT*ViHGMp9Vaden0Ac@T8apRin38Lt*I;QDFkd!_N{80BjYT7Mgh?>|?u@ zSnbuXAfzS}3p)7AB(~r4pHyZ@l$qF0XkjZ(ISd#o$6 z?PGUhi*{^V^B~$?7)HzAL&Ik-#%3(5*^#wda#4gpx^~MU(73}rme7TGjfzZ;QYLp^ z!-Vj&9H(dq$Urq(VIX`(G$In3llAn@^crSR3>t0WXGy~ru5Nqlckt3l`NI^1zj7uX z&k}R|-Ao)=ccASU9I}sul1LXj?f1L`9bkDFc`sqdVi_9pzitHC`Y5HtK6c+yY%LJ> zPU;1wg-=<6PV6-R4S=ZLS~mHO6h5@RGfjWl zn2!x9+Ea@5Ry|ih60Ld`KC}__b82k$B>7oG6O9r&^O}YqrYSPB4&4qK<2a-ZEckvF zwbXptNfTP$^^kRCD}EW$YCO69$u;Px_(XLQe4K*DC44UT8~8ZwmzwWMv=AKD0Uz(m zy3q{sje=J&uHgI*!N>Xi6+X`I6nuPu!domhwBgA$jdJcI1@vjQNj9aNH|^zf-r1Uu zEIR&E3Wi3J=n4d=3tChMgLpTXXl$!EMV;a{&l&1cNJiGB zL|PXUUR;+b`m%Q)UCY>}KSY0n<3WGgKJwMyr6NH@#8#eXcCZz2zEEnP#!^e`p{PgA z{aFRHZ?)UEwM7^cBCA(Cr#LA#-q3*0U^M7tyXqaDGc6eYc}~|mIxrpTuy1XnsTZ3L zfy6$RCCq-$YAyk7C9om!u`3v4LZ^0PN>zF|EftB*q={&bsrrdp|1HhJSEQBIO zjp(77A7cNoOZ=t-P%g-HcEfhkp3e&u`mGr=Kp)-ZUu-YGfmb7oNw?2dt z3fmQoMcJSdX{9L-Qg{nYb4GX5M1*97d@RLF2dc|-*sE4YB^*@?sP;{n2NK>0gm{(XoWKiH86c1n9Mm*d)$N^N<3m zWw4-N3PHhjk2d7iSz5YRSuNI=0)5aEpK;BCPeJRH!t8Zk0$zsn1HicNRrofr&@_bb zcI!g;_)3QiA72VAgKs~>qqdQ6KGH0YTN0BE9Jl=V8+?2&Hx<~tt-S+2KC7eEik~tr zcjC!ysULukFEY{sAi-1E1}a}#qy@lD;F%%q*6`kjj}{P9r1$XTc*o&e&0zn~V3(qq zp~fLY8VVneVCybilsJzO@3w>H+qxOV99;cYP%E_QRYj89LNs8!;*$ zcZzyp5X8nk|9U;7HurCh)!TE8Rj zbepns6fL*V0?u~)EwSN&x$g&WQp>1Lvcv?d&Aw(WsDM#+A5E}ejqt&Cj>jfg9ZmBP zJ8uV~HV2Xir0oi}ML*b{vz;_T%`P~A#jPDo6X=7`=FQO3upOz?wQ+bMruX~auR-!g z%f#UAp3p&_FqVDHYpV6;JpeYq*~v-@O&0kM0G;ExlNI@g;akCcJK<|#zW#Vp_05o| ziu1w8mGJQa0-bx|6?VNAN(ZZWWj_EPZyq|~YsD`^`V7yzn2*-@)e1pnj}KhDzc*J5 z+B!N*#o+8{iGT}rHGG^gO$E4bJbeE^v?e@Z_)-e3oHoil;qu+GC$-|aW+@qTYxAq_wm;`DeC=KWdct^LSe{|){ z&aq1QvK-d2Dg$X6&#R7X+J8rP)fs5G-6ribm3QQJS<0%pPM|MFoTVHp9nzhBo-ztlfJHzDnk!4I$n> z{uMrMCzuKjk1{S;U%C6lBM6vY9gWfkB`>a3^bswL(0U?XRktwmi?keVh3VfGE8>&W zUj_qg=tn{w%I8>xm-pLWmK^di`&w#gCwbwS15dc+1SYJs!(-s@_`D?$&HWVeN!C#6 zsFstOU7LNIyB}L=D~Gv*eH$|d;Dl5`ja8GXEe)SoyMi@1Q>Da`1B?elzq-R>h*e|` zhAfW;ky8BKOl2JP{5||&qcFGzHWY&chk~PED+Vc0$r)pq6PfyYWLC{#?Cjxh;E*C8 zg`p`-pF{hVmXp>{M@2NPZMWP56_IgYq^hf3K1iyHwCsx7UO9yrVMA$!sepW>ej}`; zFK~p??Dw|;<@g?;(f-BDwgC=#h`seW_I?E1EcR_hXYAXY{j41#8L(=F3fk=3XnbhY z%zmbsk+71xWiK0&&OnDT6HVD*@4n#8Z1B=2J8LX0GdpWi3Z=8EiwfybOfF#oxnzh~ zWqgs62AKUfZ`wWkky@4-nyM<^4y$)Rt;V(N!U)|9E0iw#%Y~_DK+aP4JRwze+qV^; z<|)(@XWy1jORVZpQ*DoXP1>Y$PMVsoC0B?<{gx7?$XFOfy7t>W2aqmW6zziOJ@P?X z7F~EGwZe^zT;0+`Icr}#9s}jIZw4FG>P<_!yRXm6oH|+3thsIBLgr_TR`uls8~TKk9YsnTG8aIOU_Z;4?@G|h^ zc$4Ad1F-*qk5fDaAE)>`e4OH+@No*-A?6g*;Nuia;F}GM6zMMbI9}W$arngOL>qb9 zwp<5q#T=Msq3US>W@d%a)EWEM>Qij-74_~_D%3;R zoRexCuZ7wIEVf_tEdu$_;f05&JRfEynNZ)aIYa{nJoqFJp{Sx_qIZ#l8H2Ap4~v^o zFPD}kWu2IiHKGAgYBItt`>pm3mq2Ekf4f5|%tQh6wCRx39Xo4`@g=IzP29 zh4t!SES#euABn-%;HoZC&drFBQp@M)G%6ZOXotBa+E-K&?SiPgDDsiR3y-{8LzZIR zqxP}h!}fbLp>`ye=Df+qUb(FnYCG*;CwL6|UngT7}{a;N5Er<30VXdiP0 zQYHQ9vt5OE0>+GR)S?kHx)hst9mp!fI_AE=y$Pu=+IFbytCcJ+DV zkA|%=8-JBKdtf^W3v`)|pJ111D7GiA!&VSkT_L;BvsxT-M(A=HXB61CO+RBr4>jb# zsYu2|j5Zd+6O>jDZHl#LnbV4(6N{^7#k4dcA18067`+Y zFg!|VpEe{?I}~{r3Y!g+v%&KA;4t(nXIQ^-##cR$Xjvq{kg=+U4X`6UA?mlinV6_y zN_NmkR#s_QQTgZ;=2dqoAjwd4AP{C<+C)!}O~F3jiuFpUqvyPE2L{te%o5`3sX_GT zLM9SuD+$y=eH|=MwZ6`PjpJ)$0p^(TpgiU$K3|VY_mLP5DCk7}zdH>WaS!F@v-{DrZt` zwyf&Pp3r_|Q%{KRePbO6gM6i(3`Y~$j23|R{m8fsX$^e56M6!^TTp~kq^IHIozT1R zZDe@VD093U;p2GJZgRYZ@Nqm^xhZB`-h*!gei_n-c=Fj1IyH76j_;i?Q;iXb0wX3E z17TiMt>muBc`s6fS51v>}hQ4Fbr|XLsu?VwRQ~+O={8=Y{+KZ=h&g7DGFjMXG1#MbB;EG@2*F-FUy0-UlgH!F0m0*M2|Qt|_b1lmW+Ste_@_r$iykpxvW( zD7G+mn9<#_29r)D$=yoYJrFMA9;gMGZNKeJ7mTR9CtwMnRWl{`9>+)aR_Z%c1&kvF zKxz=RKn-hz8t!L0IH}m~b+pkov$q2=KofJ7OPL}@zA8E*G!r-h!u3$1zZ_XI8A-Px z>6gZ(p#P|k72B`DhRhQ_AdRw70Y(WsX$g4gWt5mpp`LE2r{yxmdje@aPUgiuur}v! znWQsJEiwD;W)YnSJ1UXyOjTu?s?x&X2Ss3J3|kcJn&&?3=(2D4p+N~_`l2+ygw! z$SuArl>y)LtVLM?A7A?|K#Rh=Us^okurba8*ynJ6jB^wemP z1=eJ+07+YeQ!_T{0x+&)P1RQ*X!xoG{QIgb2I|JYU?1(i@hg0^`%-oYG0BI!kqla4 zr(-|-5Hs0rrbtGpJ-JJd@nEmP%|mRj?yWmFP15 zP;K`f%Gsmr{QNKHc9deMdlEPld0m)N5Z!mrHCK5g9{sadVmY*cb{l$!OE7N1@@ z%(2*}$Pca>iXjAjFW-rE)09bNFFk^z*kvz0=26~4=%mo<76-^2L8}dPE5<6ejZR0` z$}1W2G=@BlkoR_?%YD$1yU||uRwqvW!n+Rkyb!ZM2|Y;GXf^90lcQ#xef=D2^=%u9 zCfR=2asF4y2wnh?yOO4-*p0a<;7a0=TUHe1TlBMiF2nDmBN=E zaqI|X5ZDgZz$Rm2@anwW(H0s)@Qc8PVoV{foi-x&ASR_|lR9p=9IVhSJ=T+ZPfzX| z(+Y4pTQ8#oblW$41f6aaM$t;)`Hv_w&wni9U9Y75Fq+YdFez&LVWeuEk~=xG6kl_gpUuO-_U$)AUzuW z^Y}eEZ?5z9uoc;(ROS__h@BhyBRWBJ_H2V2^Tu?{8)pu)4=2q|4pwCaoia6gp)<4|?g*a(J(F5c4gOhCEZ5f!4 z=ZaI1j)r)rl(g^C1krce@oJ=s7GGP=SBg%PJf2BuFRwVINXi?LmSZ?7Fv<3E%Rtv8 z+XfKRLgJ9{#7kFPB{I*x_Dv|lm{Ydn+W~o;3<;t(WZ4Ofc6Pu#-@ZNqI2J6ZpjCAp zfLte(b{5n!!07?TiZ2j4>J3LnONy%k1G-k z)wVHCoI@&poH%u1Z!;4%ftx7s$4Fy7Py-9Dx8WxT(PcY2WzQxTR) zg;=;a2%jjwOzm-HScR%<1ek1`NPT~3R?p(odP#yZXzHxRO9kejh!*S8TrIS;qNF9c;}%HYd$h>;GD0}hTA!s zj|>>NEamV88NW*SM2iL=r)`6ebKV2rQik`shIb6U#~6%cq5Whs>!3A2GAW^zdHOWa ze*9>in>M80#_te*f57iBet*R82!4OTkDA91@Iy;Z7Ixa-;r$=D43Q*tAdzU)K)YEf z5>@#f%tym*+HX$LI03+1Upem5IKHBB{HKW{aRMNzqcD=Kol!Bvs&k^>qtSnUPV{>< z`Y+Fk{xyxh=bY%@(CDqKyr_BHSN$E(=m(q={aYISdFMp`UmCsroao=t=r1}a`gb+@ zOV5e^J&peIbE1D=qrd8$=>MeAUwuyWf7a-)Jtz9VYV@PdiT-aI{n&G&|8I>xhtVf( zFbo0t@TaiWV;J+L;+e&K)W%)QeAJ?laSOk#CY$-F-J^Y%6lo})H!$DS#--XtaE8nF zaA#Ws?qBE+?0OYi zm$|rMSztl)=uGYAwaFvKjISRgji?ixMrY#cx?m8Iu#5hdgH`6T%u$&m<_?ky8|v%n z^0zsS3l~BJx?(Uh*l4;$kI2c{$0vIWyalIU<)83=~JW)$}3hyzf6u?ziIao;(&L?azDvHw)jxfAM}K z4;wFVALQjQ*D2s#0{*dpf0FmwK60li+{t;R;;)nZ75HuE^g9LqP7&|B+TZJD-oNA1 zktg%izv!h_#r&w_A{e<<;JG^Hhu5#}9%rosjT4?=KC0=PnU8AvQ_M#-{in=F3$8z7 zKC0=@G9T6SUou}Ne7|BoYAa|q%WtS6i-{CzG+bPL{Y7M+Sr!pRYinJNtsU56Ea%EKviRU1DMRD@%uqGcniWdxq& zRt>ur!vU4*h@c`IGZpQlSS@Ue624omRb-uNC{+72%kv1~V#>f!y?m_HNLrwhJo4F;kIsnV!pU45j;+RBe19 zs0hbQbrGZb2A<@W|0#2=PIVzweK^7~Q&Cy6T82;{+#j=F_)@2G3o61fQ_-HDuEPtq z)E?8RmIx}sF;h_;(QC?q-v*x5seUG?2**rysfp^?n$J$^RPPEZ!ZA}(imVpuN65YZ z!gm+yR0BohN;qb!%K))j=t-`}_Qwf2)nq|Mp=K)5xz(a-{^2{_|DjVY7E}~!rlJyP zwOoZKx&AkuFlheAf{Jj=RFopCMJ-Vm1};MXq?V1tf{Jj=R8&W-mXUapJ21WoC@PhO z8YeiyF;h|9w_2#Sl6&U$x6vS}R1QH!IA$tJkzO{Qx#lTZrm5`JmFkS3A{;Z-)r^Xs z-JRRR0iEgkz=}$*9zJV~z967MVn`1 z$4qq{AXbZq0^#0Bd9Y5Wsuom)W2T~B(rTf6B=_Jg|2}<@wt)VsOj4O!5TEQv3w@R@wqXM&m@M^ zd%B>q82wC&!=Wd&KUHPBpA+SowNc9e!%hvT zkK^Nw<5OYc^IY8nQ{wsf;`mg=@c|iRR^>^YuBmZ+ro{2Vz{S8Pak{3(@u`gCQ)S|l zSf1%|e5&I3RQG|;j5t2kaeQv+1D{*t_}mi5=Qb0c#QH%;7*l?3i{pdt+@R;g`k58S zrzVb%zYlzFkK^Ny<5SxQKC|Qa)W-3d(+56O5zX~$j)4y!Cj=PIkI=!L2j7O9icp}a zw=<3t>KV>VfN3;bdu+z(c$~Qmhfeg-plM&fD}NG?GmqiCf^H2%GwGvAt2f8vP$zG- z+)hvY)_p55KfWKlgW(wa(}uWof$Xe&7R2$HAIAq1r?c{*0hhUbUKq!xk>NZ9{ZM=O z{)3NVupF!B#SCXY8pCVg`@tLIe`&R<6h~dlwdy;4Wi|?#4^5JD{ z3Bw_o$(?-TnXY)8r3kTF`lax3-RARe!oWe7nae{@tA$1jK$D)@_2q3#y&*vA7o^V$j zA507&b0$QfdQt29@t=%*xPDeLoKGM#jUh+f_sp4ioK*~m&a(}M@7SD=(6Gg(Yc<2U z8c*s^OK zzIGfHB^GBb!?_ku3VFZbF_bYV)YP`L_5tUfKH%KTaH!Xya(Koy=*sxGkcCKB?>Lb@ z;M~V>>hYx1ybzl6WPDsoA8^+90Vm3E-a$kI;T!k#5HOC_^9F`92zhZSdov%~1Z0#3xr-VgxX~J{lnBTz8srWEacGbY0#c}gIsbs zm*+MOa+84QC928<@h=Q4Yz_oD8K|(n+Pti;HdxCb_v2}`l!?&QfA?tZnm5OO-?I|665hVuu3 zqeHI4c!@aQso?|xA*VxL5jfx0a56EXBd0^|282e#bsEkK0!N2@C~$7oa4yRvE|R1} zN;5g1=^D;mfRNK6zslq|w`(|m0)(6nxo8;2nXTb?03oMC?iM(+G@M@x939draLP2C z!NWNp9WogZO8Zm|r&i$T5Jlk3&~RQ9I69$CWwh=$8C6}J~4ZZB<8b1HRixdDARRM-W z0O=XQheM2fzJpMmPtWTA9>(WQMAaquFdPC%<3_MQ5{DT1{09Q8meF|j!|%kOKYxnP zPYJ&nR5asaI0TS>E%nECK|CE-Uv zMe;Bl0!aTQ_;84k&qD|`^Wk%Rq8g6r6!Bp=1dvwJ1PhKsjC{TesF@F6{~_%61RsV& z0DLr;{gF7t$me?qF!SN-b%b9CDw2oc5J392;KLzCKAR9~=EK(^iRwp!55pmVv|sSy z5F?+55o+ec*V%}w-*sFbhC={p93bR4#K`CSfSUR6bvDAT6?_;D0i^E=J{)4?^8^F8fLox_$2p&fgIqO6#h|u& z%HH`fmK|1=Uc55Dw=Y281NkA@Z z8bFqrsD28_dK2VbKzt_1dD%GeVuCmUp?LJT8UVT31bG;c7d42{25&QVbusKa)e{H5cmloR!bfQ!bN}g@^5sie+eqWF;hJSh;HBV(+fWRyH543al{F2 z1AbKQ=vbp3AM!7Vz~ zM}mrQ%v3*PR9SeE^GNj+%Rf39e%v7jOpc2DJ>9uABO`;m}^MZ32C}~@ z=L|tbIA$tpJ9Mfet$#73Jxfp#j+yGWCaTHT*Be@iTtP)RW~$#Ys#HA5J-&YJ18S-; z_7hZuW2X8~Ky-WT>QDdk_d3-~K}9%bDj*rCh98@CqfQkRRD@%uddWoP$tj_R8I;j!ZA~AGf`C@n)e5t>i2?*aLiQOO;nqzzcAFngMx~1%v5bA zs@41c@MAr$6M~9x%v3u}R4Mk|Cv_^DXmSY0OtsTQ)%M0;kU45O94e>?$4s@$MD>lf zje~TmTtP)RW~x^hm0IREx(+YVsmcTu;h3p*o8sEEw?8sRm2jq@A{;YSyD6@RF4%mJ zP8AeXgkz>cV`r#emYH)t(5co6D#9^S?J-e3x1$aNd{x2+1r_0#sa|DN>3EX!`W`aW zlqUrh;h3rR0>XEkiR#4tMd*Umxb_Mv!ZB0rGf_SM)BZoysXi7|gkz?9%|x~N2MxtK z)n%xmg8T}QAtuN> zfDAQ3z62!G1R06eAj+(kG8sg;#{ zkJDRGP*G7%b7P}X;b5(xp@<;wMYxx zPM_CRQkq{OJF6jU-h{fwKr_#pd9_P`&d$+t`ry1;u+?bu%bjKU1+M(^VwbauRM^S49pH8SwMwwwao#Z6>|fN0!_8ShQ>vvxGJ2bu3}$)p{K&>YDR8Detz=Rgq1Hl zOS}c8Ma5<1nnd6~dx1Z`)k5x+%Y}s{6=kw2%2}nzFLr`?smtxsQ_MK~RZ?@=g@(#2 zL_#$B5*0<`?9b6ned7G296|=ub#f;w&hvsPMUqeNJ{T8>~ak zi&2{MCeU&02Fk9OXiA;l0=K)c%q_=6voO#!H{d6-7z&@$Q=VVyDUnN^#S0fVHBzCS z)7aD$Ko3F1ffapz(%4K{;Vde57gZFZrQn%OROsMLdMZHHxyyX65}(tJpb4z(QB|h% z&dq2~=HZ0)JXRQ4-CU+s53jS>>w|g=Rrbr~#WF`em%0iHipwg{yw%R9+9nD#I5T#Q zbDA0#hs<*4qt1GYi^_`7vZ?h);Q2`^v-~cnFW={O6}rov?xxx~x=I4n+M?DqE~PxD zB+aQ^Fvmn(;VdjKDMV#05*k7hh=&QOpwQ{{mbgk?Wk>@ww4jkS;{nKz1l1!3I)tw_ znW1J)LDZ&~dc4I&E>%O&W1!9t2F>hj99oRSa1{KD$oX@TZunbca=h#_NL!0F7s6}+i{&7qBNCy%g*BCKx;1XP%aHjh4Z z(6l7r%**mnQ{FIVI@*cGCa2Fey?9a3N5c!KmfCO>KquT3mpp@Ut7{BlMB@+63$Psh zY8+-z`dxjGG+%Z>ZwWoJy!S3BuVG zoPX~k^o z=8ZFj@a!{zrnriVva@*xu^FZ@w45t{xl;$K8OQoI9gIHRq%ZV*O$%xl8wg#pjMR>E zGPy8&Y^q({NNYhRlo{osK;;@)yIj+=oyd@EmKDZQIbJW880z6eMRmNij`tT&lc&0- zRZL~Y3K6qHJl+pgmpWPTnBBO{zX)>p7dPR{Nb?$L3PqaEQ!@xe`DGRP<;X2?D3)l#gPcs>cAy-U7Q+a3UgI-1b6bl#0$;`PEQ@hVj9Z$|g z4mK`k(>|W9kXJOAq*k5-4RhxEm-+b=I9|G`Wj6Du`JGtk3v^9=qxR9XK&!xJ8R*Mwm_XH{>LpGBverm#(kZdx8I25}x}S`R zSr0M%w0c48^89{Tou0!=x91?FKjmtL~Y zb+qUAhZZeG_f?O*s|A7Jx$?=%hBW^kPU8}!>#L1M6HD@ycqC2FSK|_smajf`i%ZH^ zX2DWoC?}{2=RD|$ljdtMisxM>}5f&ofGw!IJ};?GkR zGe}9uI1y%Yj!A|ty>L!UkvxXPBb#0#NJx-~zox>(gPw#@^iCsUp)pItqWZ>j9kgge zmLS=+d<`yvc`>4VrBOmcF}^AXqX=Jlj1ViqxiByafU^Cy#~30{z8)*1P+x0A5UZiD z%giX)zqR|174+ZD+$eaT#t5+j^_3`DM7-ThIIa*y#u!6F>}0GH4-k4wKvIfiQE+*Z zj3|=IABW#N`$WTn-crGZN%_Q<8y%K~YKY60emdNCVd-c!}919ttE^KvMj~>=O{$cl&4PfyIsX)GB(w6rfa4sFi9?~D4*sps3@5i8+8FuQ{b=(bhW=N7mZ@SwVlKP3E23tSP>H$`jxRKq`1MvqOj0eQUQzD zqS68+r_wK1OXGXDM>K!UcnNy244L?+Ys= z4VODXB|%O2f)Zz$*Xu4RlAXBQ3E{Zh35J;Bb|;<%WJ|_wdqRLlSm<&V%B3!kue6jK zXVYa*K)}8?9Xk-oL3x6qeQ+KEj3)hs<<5#SS4D*k^Wdo}cN4v^fS-^ziR^y$XkqK@ z_4q2hp7IJO6%t{D%gbCHWgeLq^Xs4V+~8nMc9_uOphi(eafy=~BfHCZE@Zh;c2!=; z4#P>HaWalBxZK61sAi^s{6c4;&*v*DE%iD1jZ%gq1!`R|lb|Si3rpR;Lbt~$Zk&RF z?F3fw$;wBo!4RPkcCo05g`yheIx*leY~HYK8-VH;1j%p~KI*@m*}|#sIf01`qP^F1 z1pR&XB!jEf;d2b&Nd|bG8bu7>y4g4A|227X>H|se12-6*9&cbazv_xVb+`~*a5KQi zC+1UcWJ6n7Og}mG^>YkPlQTDlFW$N0;@})p<(C_y&pA5&vV{wsIrVc)V#L0K4M(dp zX*;Lh{H~$Z=Z>FPKVc4kOhRHz?*i>ce&<+yvcEBC0$W2@-vyeghGc*B5nB8JDyv}; ztZ#6L=}v4QqD%JOK)bDRy*3*ZofS7`=yX*?=}lQ{nEgUT$|N*5O{tQ~kUzFvg0qU4NsztQ`r_>E2>pTP}E2Ob^V;`hH% z$bt{B^EC|+Zl^D9C$nXfOiS-{?-S)ZvyYjKH$+w+Yxlw z*WjE9-#EaZ0?r|U*WZMv^K$?`=sbK~ z8b5O8cy)f4BWxjX)(JdwygI)y@O}cE>*%;OTr#{`gn5ATw7{bxnTo_cerF51dm1&w_WIpN{to@j#*e1r=<#Wb#qI?E}s#J40h<#Th?dkK7!}&yZh* zgXHQLdnsOLI_gnOId~oclYrMbm{U^GNhII1fYX<2kKsp7lh5$2N`ixxl%jt4gaG9F zWt+b5MJ*Vtfzii8pdck|TkNmdu5pPEy z@Tl0m(FZ)r{`dQU_YL6vGXWmDkg>E%SM2r{S9)F33W{zT?#DM4{FT#i2HamdlP zE|mS1KDnUST`W(noSZ#80g1P=z>h_~$>SzvCk$6DwEcy0ewD{xCc{QMA*ZRKMYy3j zP}VTJskUkPWN)Fra5)aOH_VwD!0CbJ03t7x-L9&#X=TOvHw|CdykySereF-zTR9zR zhyhlV6_&faa^>($Y8*bo?_T_hB@3%+@=Y^ww0izb@A6DfLokyL$IVoa_RTEv_$vyg z`U`Q=MfhjpE^)}bPNO79aURq@$b6QUvC3eu$vp}aW(VQ z>oO}ABZUoj(mlTgFyh5Yi6%+n2cN}V&JvE6UmMKi$L=$0aqBX!F`m6VQ#*1W6c`*p zR}d3Qv!tD&C(y{cz;!UG=4a;_mqqh4AvRrGEZu?&o7H3QxL%lUV#X!RIP*?-Im4iK zQC+i$gZ8y>!?8Hso(a=?b_=wmo?*{qN7ysz1Uu2v`E_=|@i2+bs%NsJ>PQS7RHs;G zHxm|}QqK%7UmTFCloNOK%tKB{b&u22H)T5eoAZhyPFy=sV9^kEg#t~pXM)VJ)zWN8GnTXomne>MOhwgUgN{aVnU4(TPx6D%hRa&*rj(q_>0koANKh6;W0o@fGT5g>s+kX8b75D+ zrbslrAdVUT7WL@5X}5r>)b64hfIrlVN=j8Kbd$zaln%uRJt+C3Bkl|(|K^B0Q_0Vb zxQ8hD6C>`S(fpad-STM*OHj^sQV~;Mte(=Co>2NtdcxOn*yXuqJ(0>r_FZMv>gD5? z!R{X9${UII1^A_~yVR2?FRoypsysEsPyS#`E}U_(~a!B9rk$D%31K z9hb#aX1Hv`B7k2CyQx8wZMyPNcx9FpEzhb}T2guWRy;Q3gyKm>MkpQ>+ziE&Njcy_ znH{2dP*jHo2kBx*JtKX{U!DXHaxqQuAQRK?^W?5`=i0Y=Zm37@;O|8Iov3(_n>Q=F z{j+Lz*rabkB%YoE_;`9M;48#0LCH%{FGH!Vp9QZ~<7ZMKHKHOineK2-XMe-HQVklW zio{f0i>Ojqd&yNi2Jbv)bKv8`(K{Ee1U{;x89d8&YRd19Q$7{+$qbc77CakWmJQ((nWzJm(<4ap8yL< zxhiLSL_WDr?yir>U9Im0&sTDwi-F1|k*d?3{c}Ex$frR%KxqS3r){_Vkp+?Lmb<0! zO;XV7=m@2(Zt0dn1yg#e(!#rJ;XEmHUPMw3MFxPf^HRloIzq}#i=-%jblez9i45rM z7qLdYN0cs}+44!ndrYZ1()kPjtlOwzN|m-iFv?VxdEpa7D^bFt)3YK~N0ojN`4~&p zg-Wq4;ynS`&R1ME$j;MsqFwHybWy4(Nhej|yGi&@E#u!?S96*~zXqb)*1i|IQf*|T z-lI&Q`)W=ra<}3=p;R61{4YgLRXXY|?zFb!>GhWK3-G%T00fgWagXs7JV$!KP@idid^Ru=yHnHGEM9Yt>-)!?%&as4DR|o`CNG276kA z!NaDT^w)xqbj}g5nJiFzS zQa!66C@J=}n-LO~yLo=ww`NDZhZ(j4&R!JB*6sGSq$x*{Ex4j}PiW92`ADe$MDK~< zN&}fx@7TSl`2iVwtVHszsNC%+ATcAT8qU z>O4SXv^ zQg8xmNZt%xPop=vyOO8aSIzRwnDDBTirhtM4;}8@t+b2QE=^hq;fq-Us1i7tj}p(5 zLaL!b+AREP@f+U%0jhgRU4Mi?vB*1)3!Nl&6lTM(2EPPC;KyYBjL3C|#@6vxgHIyrMh-5{xQ zaV?BW#mfwA$-+<3na+va`Qqkydkvabc7cj0@24G&|#>C}pSB zLM^P>85bg~2-2_Gp8n9@4f^K{so0Ps9P>vIDa1r`(GDB+l? zs5n_ISBh}o`{5RyYOpBNgkz=}$f#6pRQxFq5vUTD2`a)dQw?HNBk&}*YS^{c>Qwg# zD#8JkVd0I6z18w-dgAxigLD3Dylib5VEnU?R?9W;Q6A*ypMULn66w{*hX(vs%kSxl z-)quLbgLApaS@j)men#2Pon~ym|jt^B`t0hcN{6770_I9H@e6f?JCRR%=o|NBPe)TsbF;?b_7|t*}S^1mv&D$@G zi;EfutK~I3iF)IwSAeC?hsTBe2;e+JPy8NO{&sde4lVriyr2{g4Bzk_fn!)urRK+c z@#ZCQ@=)Vswa{`Zm960;U&x7%i~0kr;q%w>vlw?7W@=QxO6 zEuxZ2H7X9`iG$R}L4t9R2jU>VjDsAFgIFnHrc~s_L8iw+?u~;y5eI1(5WAMr!*Mv> z0&<>)a}gCFxbrp0SOK|AgZKqxhz40LAQx+p9|*`L8sxVEGFXEg5ReNs$R`4lp+T;p zO30j=U#>Vvm4Kv!3K!!T7TBrt(?52*`LV!11vC6v0xD`((ij!N9~FFb$g6-*dA~rz z`B>oSkW5rd;-f>#0in8jkw&$GUNwmEstVeU(Oc|~|Nh`+-bxVmbApQDm^K84GOE#d zQh}lic6eKd7wJt7Z5Dhu#CYMxRS30OGVvq|v->YW#c){A$AD0Q(IHoWj3{-; zxA2;#L5yR7OhBy`!X&q6?^E-+HtDTKM4t&iud-VKA#LcK-vWf%R2|X<2(@ZDBpn?f zX`Mriu@3{(YN7s!+(#cj`h*%2u3n*T6OM4qz2|U1bgKQi9Vi-VlQLaU5ssPaY7^Ck z%^#tIRjJkpD#9^SWtpfh_dI=@PW1~xML1@v5sZrZP;!qv`RpA!)gJ^E;h3qe0mN#d zo{n6r_byqd8bHGVIKnYgT?>fSLUo*6aPwUNsOg#{s0fF{RtN~;a>)HA$isLOpH%MK z=S~a$fAk$*m=peQ_@HhMKPJt-$4EA4rY|t&nZ8Ms_>)A2FB0|kDXzR*5D~tE#J?S7 z{vgs<`ux*bzT1@7%ZHa>I?6r~=I0;n;$KwapY0;!C49KV^pPd!t@O!~=EkO=_$HHv zTI9>0kaE?!Q&+4&7oD)RAZFq9%Bnz8of zPsg{ts02BUmYrYmvmA+X#`N6|gSzom1N<*nb3#4#qkWnqDQeuQTRnGUv#>X&F}RFt z%r`v@BE(|HeCy(@84)MR*(kEc!{*U+N+?08kHOFtkwm%b@u6N2O;PH2G3keFTvzcN z<1vja&z9_1#%IO<|I9fjeug67=k%4k^Gk}0Jx+BY4krm3@v&@Xh8=HOKM5iDC~+@F z_x}UuqIhEPCG5g{4>}pIQ>+@YREX08W^-~frpKKH<)!7Y#Al0&z2W*wi%RiLYoAlB zIqJCeF_!HxlP@bM^i_B~_%JbA z`9bNe1J3sZ9!&~aIt&X)0I?;8p9vg#XD)$-CN0PO5_syV`E3$#HQ6H<* zo!gBIAq1y#^-u8X5&Wo%CbFoce7cs_I1Db4MJ4HPbRY1jIF0WE9;IVaAMhpv&y@fV zZPfo>%f@w3O3Bx^Y^3?j*EVhZf7`MVd)P2O86~GF-gHOXszIM0!qfJgrDo^&?KL}h zLNlxlpueiihKHFy!1SRdRryFsaSRBi`p0i)W>Vqqe!;2Oz%PeomDQcDl&6lWz<-;y z-1czzFIMaRwp0BaudcfG^LOzarnu8adGOz6b=w>}Rt-kY{nlWY_bQ4Qh?F6%-6FdE!sMg_Q;o{s%Ap-I)JWP zPYmV3${QTOSulo5yTKgIKMO{iIj`{mSW?;80=o;0QrMDfE%UkYq}C=w!dj(t1M@A$ z^LG4Fq`UAWlb#HAdob4>ZKY0Nu;=j1V?Hj!ariac!TTtw!h%gHi8myqCX=(lf~;UO zLi5qU#DiaoG!{=MeyrRm7Ahb)^tg;3DJcCr(j`SsALU9L<+54jjLu<7aXN~Zb(>JDlk1m?GY$x%9L~zUpp(r16dg+COM21RkU6r0h6;u!coo^$^TjQc{DD_VD~^v zJE=`5#g7l$_!FK+a}7QYO2nNmFsw ze412%FJ#D5r7BF-DyqvRZmn?>Gu`0d&!_8f76mzEc4OUg+*P0haDbBCI7i{l|JS@j zWCo4U%v%>!lKN=gVVE6IGou@7Y<>FXOum(2G;yHpwp!G}Gw6YZ7}nyydTx-KNHzm7 zZ_lU3ZO>ys4n8zzA-C$_pF4Q3Y>bNrrhMCm;>%6D>+yIT8u(c)G*=6Q3Ay_zZ=cWl-HDZT{nhqW#ItG6D!Ecj)#f3yggD42DM4R*Q=B zy@T(B;&HfH2F*)I(!{0`+$@9gk#H{Tck*Pso~fFf^_}F zxl9&{6LjKT-!kt<(Zi)mD$WD}At>=guP-3_w)!j$N2OXH2YEaW^6NOrJ^|4U2>vM` z`Zj+S7XtGcH7=ik=%xvG3CJJ~=Scz44H4cD5Pf?-%gU06Hdy8C6c9;++!hCE1cXX1 z->^5D3s6I?-`_nW@9C>Ke|r8z@DWsoQ+KpJVcz`KH_`tJDk}F3huBD$Q@ahvA!7`4 z!%G3x@8)JmBL9$sf{Jj^k{Hh3aWfh!)dGbRvgZZ?VmJ))Ge8KaL*B+KNvK0U2ZU-Z zhZr}lxj7EiKXQTKz#ot_++8BTgkx^&XoJ>jQTxt$TPHrRQ;ic;gkz?nft1xkEgrec zPoF9Lc#3yD^Yf<60-E2#3S= z3JBr$lm3Xe{}Z>3W42Op_^fsTZKyUh;))jRJ=XghaY_#N@F4YBe*cm=xEW+gEnUw* z9vo_`U+({Z*!vd1sH$u288UZ@uhXtu+fmioit7jCXanx3(`7^PiRg zRG@=l?qo}#3+`0jCRI>S1H)2FR)w#NL-R`|n}KBbA3RXBQe~yWE>K4*kuCE;$~r&H zm^DeiZpNHer1}&rbHHAscp~%cg4Qz-8)oR2QIISj93QJft>Z{f$ zu286Lf)(3vq@t=SsMao2TclJc;RwdLgmDF2(~(kZ(S?(y6n>DimuWL5Pqfco&XKd1 z69XREd*JgT)!EB_$Mb|3Pl~gbjUc~ZK0*cL@uWL@X*VC5CN9m{%k>%HI7_)J101(F zzL5&&SiLYgUR*Et!^xg|iaq?F0rxwNC10vN{4nV60y9HD^7({Lbrx|R=uu$0kAvf$ z*#=;Ksd1e2rIJ?wIu|PiT(H2UiA+m6am+_5c}qcW0p>-GV^ycZeI4|Zurzyu z%QHA8GZpSC&~q@!ZR122j&r_LxUYeJ2QZiD{rPnAz5`q@Fl8sg1IOr7$z!@70Oo5N zXXQ6V{cZwgmjjooep${h0P{zUv&z{qZw5rlfq$JY-I>Z@EG0j}usJrX{ z2|YV{l^hDe>;as#mcuFEY=2N zz8_z}SI;flTGZECoYggbPH&elaMn72Jo35dvCbE2rVIJ;{)GCfCt=BM$ffu1Ag zDP7wE48J-$zae=>l_A^D;P`1f^2^am<(K;vDz&WlMqJsRV%#|&$&=4_=LwDIGNBKZ4`k`Ub7DBbuM!b4ob}an6I@jyP|l_ z(bbQ~jGgk;|8@>}S4s{}!CmEwwaqicYTsv=t8yA)TReD$kJ=@ar3qKIXBzI)aplQJ)y+bijr&xgp#~5Io7VdG0=N7dXecH0&<2Nw0Q?m3Qa(jn z^;ss{PFwFBU!w8IT;sH&Jvt9v7b5*SYpNBmvrclFdC1PA`LxHLf^wt z2ru5f`kvU8a!Aartwp%9J^8pZV|ku2xT{QE0H4ZKJA5kh%ivR)|Cog{EF3bA)|bQF zqdTh{E4?4grOf`&7cevgdV0XbYAW-uyLgbNdyo{!!GZEeu^*+p+4c;F+!!7=sXW=P@U|Fh<-Oeejo2tt_#XYJ6gv?!lknt>!IOGwDF%m&LmgY zmd-AkbpF^eHSwj~09o2qwQNj8Jyg%XVB-0nb6P!BOO~`OYFd)7pSAhRiEF`!1NmLc zTNZlGX|@o{;!Cdq8JeHW=Q5Q}b+vS(0b<LaVbA0S&dAWop<{M*wJ3kr2b!L{A%V(DO&mLOw zlVl7>8TG9r-F=pEE8_V6wbtlrzwfDI*Ia`B+6q+lzo~q*kh*f6qQhvoJqM@Q|u$f z#hSu{KjnQuQ|!aRmo$aPbIN-L8zP*2$hcHf?1RXAG{ruw{F$bBEIGeVqIlU{#F=sB zB~d16iaMxu9`g+cXS!p)4$Vajj;QQmOw^L8zHCLMl7Ra|n#99FmDru2kZ4oh!cVqf zn=)*mI_6Up=a@Nya=by@=?+{{{4i6aoOxhJjQbFctClRUSy*E$N1-d5T%CxEjur0@vAKSwxzZgD znmPGW!7ZP$xz1421^FV{9T%5hSzeRt)&u|fzRfjNa}nd_;x>^zs^bToDWg_%5##2{ z2gN?NzTu@;kwufMRdW&J<{Bkj9I@zLjjX}QW^&!4xrlLdK{VnrxqfrcV~cIB`!yFa zZmzS1iz6G|4%mFy`#B^adVv`Tx{!f&y?)=fz36F zk4-pYR9-7Jh13C_di?s=JIuw`CFzfja7xv_bU7gUaMwJGHJ=rK$LVfK(-Oo7d1A*2 zXMJ_0^YFE$9LBbGwzN1x@R_O=RC2j_4v9}O4*JOFLIMv2~C&iOdnC*};u8+uW&P4K3Yr z)a^t%;-S!*mg^ldoj@}&AuE>hFqHS2iF7mTn4J8Mh@^PxTbi7icS6mm?C(i&Xl<5E zQmhU^$Bq_JnBS)!OWs@LoL*)p;uD ztg7m=+AwO+jZ$LWf~S>*Lo-8lks4iJ5^-6?`a07#_5(W^Q;PJFI5!0HkN5TBq-j$o z&k!WPUTlyP^pSWqtJKR!bm|lI9IhIjF3kzLwGW`NsZP*2dAW-#OovPLH5I4mk7s}z z3tT2ATom<}4CHabGnlJehf9?{PA)IV0LT2!$^geH)6!Hp$EF06Gy?OgPXYH;uAJex z=(kUbR|<_c>>+qYW957kSI=pRU)C6S#ihdSN61I8%Kjr)+HhpCady06 z&>zA|`wv`g!*MEWw%10fjN=uH#m3s+3C9gVT*vdQ{y;qPL;k8=zD<~HUb{Fbm`-g;38nI zOo?-sUk@-pNQql1aq!0S`wcK&t_|VR<(Ktw7BE+6T)Om8-baD?{Bh*12kvoTf?Qp~ zx#ijUI3Hnc8Y4j5Qk7pm=${1cn;MI5kP`O}#<8b>+02zD9M>PId&c)5)QpLL(;fv2h8^lGIuHM+a-`5xc z;+9Gt7oGuZEI6IuQoI3kDsbm%EXyz58!!`rX>{OH#mjA~7%-`oryu= zO>B13u^HMpyB$mi-8%_yR^g&c*ACcTZUW{}jZ0U4KLlAq(w-h{$MXSKf+<-8M^pEz)-%K1Ma<27K6X(BG|IK=1qL%{q<X)g~cQL}w2c|{ieE6LTHyiX`U|!caw&zs1 zt3W^RBD|Y{i_VWL6|Nlg9|3bJA53rqaizmm0n^(b=h)mOe?G1)!2CkvBwkNy`$-ov z(+(%`Iu5-U#Prl;faCL`Ap_hn;4aSq$EomPsPOiU>K z!>^kmE&uh_pWHeb{`=a3>N#{V%u(EnGJ(DThpK=-C)OM`<`?wV`WpJ;`MWsU;``{4 zeen?ol-J)|Tj*33u&ZJ+19nx&vtd_-bb(zJK}E!9yRHOps#H{}-_`uRtD;W*!r0DV z^Y|-Kan-HioDCHtZw=>es5rCL2Jkk3tshv9KnnH8C&S2{hvQ>E&+DM6Lo^a{H-e5W6<{vg&vNsaDz;N-&AZ zmbU;O1`Rf1aObN?cwG-6YsI$)zFWmdgBObS6^r&Yi}quSw%?-t&7z4ZFW;MxqpW%r z+TO{wce?Gp*!BjM*EA3HXp)5@HrlUA68Z4EO?;e=enos^aKA%*oYCGbzDq4%EqvRB z#)$`Kb=hLAij6>Ne`xe4hQfSHsgFiWx_yQR22-{sO8w3sImWhKrFj&vvvdTSODUd) zRDOZCx!h_yQgy+%+Q`^j6LfYnO}iL0q)EN)sA-)OT6o~OW5bQ+~vN+c=4x$B6GYY3760B+H0!KOR5Sm-bhc-I3524DCg=$LY;rHi+ z###K$xboz6OGTS$(OBxAz?Cg8Dk|JU{JvjkowzI74e+V@{1|+nlF&P?P}b#5xbi&r z;jTizZG~>OXzYASp5$bECU?sqRPEh`A)WcAF+H~@~hBuEFYH} zs^M`2^+BjoEwKZ?q~W<6&b=VJMsBI2{xxG71KSO7wrs7bdN~`vRUM3hPnCt0!(=rn z%#BJLJJf&TQufw9l(ao1;wacon`#SxN7@b@FKwwh+@FnUum`65#dB!n5MuTV^`ax* znrtJnx0Zc?6@Gv}HO&W_)d5rXiys2)>=zf{w`!kUHK_70gHN^ISyt#3R%pzkEwgBn z23PB~>hOcMQnpA{!v*lM0J1&jK+BV`kuJJ^>Gruj2uC$q|x_Mwl<~yVU+k^%oxNARe;)Ww#Yj9;Hbh3k zcjkr&CTkV>FoKxhTT!U>L#>^R2iRn%IYpzQJP|23Dk>9^N~5AW5vevR>JpJUqhfX< zGTW$_mx#8fb)1)c_u+P^nb3$7syuw*(2iB7IWpxFPt~ zAh4-sKe&eAB9u>xJb7PP^+NFU99oW7zZ20r zXr}N^!)s0xH=5JLyE#o{iDR0`rw=AG7$EMWZ)f;H&J*v!j4=8z`5!Tc;-&svV_2f` zQFwA_0&X*my}gLvyTY5vL*rifJ^=I47h&A%N&KL3ukU*sCcQFe!~7jRGd$fn#e2m* z8a^aAI8f9^-Lf^X{t|SHo+l?K8h2Cbv$m1Nz4-D(j4ZyS%*yTE6@JN#X+L7xXPOb) z&zN2oV}!4%SNpM%g4mQvLU(N6fdm+0rI9$~>wqy4qvtSVg)b351mB59L>oVR4}>J+ zhwmY0J7Eb?8$X22vZFdau)c{FYS%qA=T6y$*Z&cn%1*(1W2m-EE9>1Vj?k) zk8R#K_*idLePwX#{MTqBF1puf-2LWw=xFMVJ}hEyoxj5f!|L6mM)ct~@Bdq0pZa>@ zW)x!rnalI^!pA8_o`DykbVAeQnN5aC}t=m=nh{j57&!MZ3;G(TG)OjE6YaW52 zOc?A;gdfD`1eU?hht0P1$U*cuwCY6s5w_UPXh)Bl?PxRW^)YEjPskS{>6_7LlvrQ* zNYA#(iRf0gq#bq-*=_caXH^f`tyf=+?d@u3uYY=AFT^2BYTbe55CwN-Kwek46I(! zU!z;!tdf>_pALA!!15GBM&o^NZbi#9!bj)Mse}Db$JZ`BJMy%d!g`e9N0F~Q&sFfL zHrZ*lM8op^2Yi>}%Jw{h`=^Bi?bJP|>^XFG$~}RoKM}>~mk4jPE9h>sg6>fjbhiw3 zs_j0A3cAm%pa)q&_e%vmoPGd1i20Kd@?l&ZYXs%fuF+Huc}CBXtnLv#N3y$5?m053 z`=p*D{_ep&M+OGg-wOsA@gCub_o&@UH=C{W2{qzv-W7fV*_BSU0}0z|w$vR=*fvSn z?&Gx7$%w4Cw7}Sl(Js;WEMq)`HYf|gfDy!S_YzV*#8~b-I7nJ3I#GO|-gm%5U_YM^ zeo4h1JxMBh1!gge`oMe)ksV*4X$#=$*&yu@3G41z+AIW#fd z_(h_^SG>j_AA<0M0}~?>Wj^Cb8^!k4jIfMZYeF6f14MjpO)mU;l0DLT6d#$OGj-7K^v7Hy?Py9GYAKE4e;HII1_J~c4>0ls@Aj(6bWv?b3oHVd!Ki0?x9ROqGf zsn95V8zi*V@}Ugg1WDE1cFCWL4t}akCEmSm-^!$fp{w%X^|KZxujQbU2zI+ykKP0y6{e9(HMdOJ$@+$ zoFM>)fX1jX664{{5aJB^0r4b4dT=1egb?+0#J6&+}&g4 z?h<$IPRGXa2h5xYc{^XE^v{wPnZ(fJDk0{?n>qu4W4F-_N4jBC+Bj7nMKPn+U%b0} zo>)z;@WJ47ZEk#~!MT#p7=~@i7mJ_nE^vl+4@ZB3Os_ErcfTle@*v2 zc+}_jVB6d3EzRBbJD4@UY#6+G_&Z$UW9%b={4Orp4C^^m-eA1kI}20CC(!mVm-o(@ zi`FM+06XB3Gl1P(o^j~FlX5rzv?;$lHFx4^hiCJ%3_QYfSBVLqdH3F!Tc`7B95$Zs z4IfsE+Pc5u@F(QiU*T)*sTeR2E1!Xh_+CC`f9RdGXG8QQBm4xqefN^$ zIG1dD;tL_kcn)VRuPJ%@Q)m#5;5s^2QSmh|ejT!Y;AyR*><#Y&w5Mf;;<<_Vkwp9`gH98{`p1ch zsrdR|0)R-D(&1@ST8Wf?LtsHBfc)n$H@+l0`g@3@Fnqa7f<0{hVPR?`;Fz}*4KSP`z!8>!-pBi zzX>e>-v;rGgiq~L7QlD2&}PA>&c6O=`MNNvQaEZwRk$y~r*PGnKq()_NcXzy=0hAj zQ!c&!+;bCl(ypJJh;I(uvKk_c;TX*WMO%x91@7F+t)E38F820T6qTi`2z8Rn`eEhd zsLIJ<)Hm6-bf3JpT~1J%kVSMjw4AFs~x-oxu35Dr>!1 z_k|B!Hb?z3!Uyo6LV=BHV+%2MTT8vgzP|VYYi&oBCR@V4Dc)|(KfHSQxa<9!2_F}K zBv7@pczd9FUt<1Yr00zfo}L5}8QxrnnaUw^`Iv)e@L4K7&si(Y#lAVt)Zo2>&1l)J ziP%)US1?^NeQR{TfrslFteSTi^S8eFIF^he2HnWH+)KS`dkq=Nme--x`PEhU{Q#~! z5BD8DE!dA7p0O?=P8r-r1T!FRLJ4#1~YhGQ^vDBci!injs2Cj}RSPw_5>Pw}pRPx11# zWR;e$Sh&Y59189@Ys6cZpc|)LCO#;!AA6ZN7MSgViH!58J-jG>gU9| zwIgN1u1qon%C|XoFatk`oay|zC6e#{Iok2FXUAmo6$Tg8ziv$qhPr{M{x&A_0B=V0 z5MHuTiF=OKd;euIN{VR7_`4BF>m-#i<6DD}By=2#o&V2K_&xZ9R&`+Da z7adBcNtalN@=$xdOW?~F+I8@qA-)^nJ6nA0(h8S=?_8nr)J@Sg!gs#VI3Ot+2e|P< zd)T6Ff{!~Nd7kg%&Ot3(h7!fWW2Z?%<6KP9hT``Wp$*4f(MG|yL8MH8Z@PpQS)u%0 zEHoZ@DUJu>Q&RZ$k)rWrOi6hLJ|$(Z6^f>B)c6h{7LPH_?_uD1NXgkYxeXrG z+qV1QQ`2*f*gd%Na8XIW+wr+?uJc=sp{+($c55P+$Fr3F6he37+JlSFO1>)aLtK0{ zjZ@IqaQzzB=z*X92>zsX0}=Ai#NZj$$HXvBX&-4)#&ofyu-Sl4k&FAE#b@&O|4VsU zK%{e~yypPOmQVGb7az->n;Y4leBA#kKFX5SJbtBeOt%@o8E)nUQw4EmT9^kqKQ1po z*`nL*Mf}S46yp9P@lD5_-96hA#Qn$OtHk{$;;X~`r{ZJE*xk}O=F&{r2mQ+w^1+}| z$RS6i@Mq#<3SSXl5O>bWvPJpdtKwq{e=fdxxc@?YX8ic!aweU5F-yk<&_7tB41XP$ zs*o>zm?ZtS3sW@Eq51 zx}@}=QC7CJh*QOvgZpXX%ftOIl*sm&7IpJsQ1_BC=QNK$r}_K~ zF4dkP9w<8qdm^RP4Pj4RXUB3_LWhd=rX`oaQqd5PwqT1NP;{nE)T$qm_LZ<*zP!DA zVcR7PjI=LlS%z=U6<>8rYj=KEdvi!dcU?3@C|&syZGFe}+Ba9k3K4*7H1)sGw$ervrrSA{1F;Kdc}Hu&TWh{^ zk*P{WHB1H&<5tSTCY$9Q&Oo>a?mu#u%~hg^(yZNF?6~QyBys*hM~s_`gH$?|Z;y}# zju=!kK1u`${fnd)BcSz~i?RzgRNn~RS)y9{f8QGy7} zxOiquM~s_m2q;#v$;N|xrhOm<6AU#k}NO3%4Uc9{f~ZtXCuK1vl2cP zlI5KbA7lOe1-?I>Am!?m!&lL4rBDrnt3oPvCx+cH%Zq}O$Nc!vYxg@bDz1QF!niZ7 zBNzBDKPf3LcK9qWckI}1UcDxQCc^S@rkMjrmiKhtajm=OXjg8M98NZlC+FlOIq7UP z^#IB8x&NzoVsh9&Jv@8N@?L;D+t&Ag)APl=r1Y@;XL(U@lCO+*uSqRDU@+)fg#@9ae13c^O_N?UO z3+6uD8M5m$!kMWgF4XS86rMZwlqvhUP!PK;{LXA5Qu?o7|t zk$0RoI;ngL1oI&7jN$E5pQv}rQE6ts&hjq7oo?o5zK-hcUq0s|B+I)%5FXE{XBSoDutH~G?8RT#bq}%w-bMMr7cYFss9wBZ;mE)4ikUdL{&n&~{`LAQP*uTCe2w zFQ)16XJ10J{W09=$?`q}3|sBhIcNORiBWZ0D46NEvrfCCxlde}l%9!#VZF0d*4+F{ zJkk2cHAyf(#GN6j?Z_1g<`)34hs;{}iSH-NnJgHlmvVA%{jP~|lp#~%F2l)5X`U*W z|KJ_hU-q85J2|dtf?>@vu1mb#NIreeah@fkp0LdOuYNiTa{$3O(lbLa9LX6%H$5pm zV1t|y5{fO(okLzxrAfk*CYvW;N*KyFlPIqyQT~ub8O0=uGv!Q6qBLsCIaXYs(3Ep6 z%F~)M#-jWsNlqb))fLx*B+4f><$O!d_9V={B+BoSC|Mk8U2&b6L@CvjVOCsoH02D7 zvOI}vV-n@jB+7G|a*-wH4@sCI1CvsiL}}2J^DH?ZOTv67iSml3>!#IEk_>o@^P4O#dTH^rBqW!SaKSZFzYpCxP|##5@t&h z<=07+Q_SJkk~3CQYzvUZNti}WnP_pX(3CSR%D-#MB#ZKbrkr3=4rz+5iuJFWa-oIE z=R^u_szs^Sl*tz5MopP!QSR21=@#WNO_^X(eyAzqEXn~*xxk_f9-?9|vM6IUWu!$Z z*OXBfrBhSRvMArtl+hODFPf5XQO-R<#Z_QY>NUkLt1IAODa=JzNji!9WqGV%Xz$SgFMHvGMolU6&Wf&-@SeT_6 zV^i+Xa%{@CK_Seh`~*KkpyXI`{z`z0GWJAepVP+71%-2Gn{o>%qg<44f->Gk`8gK0s<{N?;tC2ETM{4dkFWU57`6Vw56@h1vBZM7 zRR6j`%TW|(PD_dLvIO{G9RAn#eQG_3AD%COi>*a4BzT_CaumfWhrK1sI~#Wn^PhhI z!b{ZJ96vm-XfDB!;K{;rmTgQ?oN~$->b(kg=HLr=KR!*ZyYa&_o{L~O!H93BmZK<6 zIpqk?^776{?xh`{*sbQqWNQakKK=@Z1kYVsvZ6TUgc0hNqt;F2dRog73<;i*Y=m%% z;#7{$#hI%3@WKb4?ld0FaoGyeRCSvJ=W%|(ox zs|pm``tE(R@4MaR`i15q#?3WTxODUKtiJINdItt%&tEhbF>Wp-2ytQ975CQLpZ~HQ z*99EF;fQf_RfA%4?VY?ETMh#Vg}YpH5##2Hf?_L&o_hX#WZmRiuepeEbJYkJ$2hw8 zuJE?mT#srlV%%J{pk#TuGeh_E*(dzb=6YRo5##2n10~C=Cm)_)tZdw9bDg4v5##2% zOt{RPxD|(oG#4>$u6p5O`=k5Pffq5Bnli4`T*SD!8bHbNatx%adimQSo9hnEMU0a4 zqNWh5D8F`5{u95n^6av*U{$!hs*X9OMZ?$&}`fmM&EjZA~ixN0P6Bc3Y;lyR8Xg$va7@N3IG& zvvEm36VNdJ9E0VUrIKw=3AAyybmIIZwr~k-!34t&OUP48p(A^aP-4|pHM4>+LQIJ` zI9b%)W8`OnTL>buD zE}7`IsU2h{N-EGMVa>S;gF=0IFen1iI6Nha60V+o9FyJM+F-faVwHyOkf`r2DV!au zou}-DTTzJg?vCY4aJU!L;i0f24U(?QkuIpISK*?s-pcE$;AIVUX!&8W?Oh`(=*`%j z{RQ^HQBG{}R%J|b^%&M*|AsgzO-qC@mI@lY-KzRw%{F32!hDp)Le;gQ;}l`ZL=Cfg zxvHB&O|F9WeB=Zg^yj#MOc2JxWf&_L#c(VeRH0HVC{I;(k_uS67JC76TRNNPws*Hd zKfWAy2Iq!Z>ktmv6O$s4sv;y+2Fz?S6(th|plhXzJl(3w>5Kj~&-;s|b zaI8j>!d@Cwfv8xkMKJ}Srb?t$-%KMh?j)8J*40*D&N{+#PRbaqOqCm~uXik2g;H90 z?d(;{p|f7)vp=52+u4C5W>|@Li<&nlqB|8iJ6l?p;DH1)3$azPrj_koNpMP9)Y6R> zNh9_lraX+sXx5J1A5|72lAgl4@=&!-dIU}<(k4=B$z&Vl?n=!qoH%r`{h&w2@F;5$ zjs5x&;VF@lIZnYgx3nyeE$mpnDyYy_5yLp*d0v$iI*J`rgfP=@ z=D-oe9Kdb{o=q*W&W`J2%J6uXicCspo>W4bwq#0@Ax2fLZcS#DEJr;r>R9He8j}Z& zOhl{tbx_etoR!;!hb+^UlqjYfjXas&*0S(g_1Z)Ke57J=wR9P8om>vH31O-K$#zQJ z)m_(#ak8Oh5vGJ_v3NnFf$v6Wn+mFmbO)iF@XGGariI-yP((UAmO2?z@uV7_>RVv& zp{tFPBukDp_+W_V$SkSV@%EQ7kqO~zAkn7IMeWNNZL9{M{=EUVBa}G~z7LWaHVC6E zEeqo?ld&qcQ0fEo&THFSf|FsjC04d_WrWuJDw~!yFKOv40h5eIa4-n~uIER#i zN#IY8#|2@D9S6dKb{1;d0U=pZI;iBVf3#`A6H}xyEjU%4(}GjwJ}sE#ka3!)^eeQ9 zc4tphbuK_bsyw@8q^@1JlvMfaCnZ&``a!0r$ap`TDx-duR_GPUd>7OP} zM7qa`6O;OR;zXo;pf~}?c%pPS!Twk3=ZQ2vml)@x!0N%agnq#-Z4Tyi!(@_}V*p(O z-6Kkpn51AQ^KpA#e{q>GI3xHF+Ef1|d>A52N*fx&^|NEtKpn;kv1m@XzP_xs9Bb|n zRt2S~KrETmBHSHTUE44_ZD3V(b-1FmI#y9%T3!{d!Q#fvJh#5KrXn_1wj$gi<+U}l zV`a59%G{OA7Gt5yL8-gEzYu{U{Z$n;f@|mxK+dX4u}TRexMo&Ta7nBz7%L3b1?y@e zp_x@x6~T~RoO0`NWl2GK4YxjVMVdc?gtHd2qO)yd(s=!WRG^pRe zwz17g*jiLHilZi|U(imE4V4BX)uEX)Yi34+ju*IvK?=p4jM`whA{?oSBHiZe-L~xh zX%1BeD`DHLuBtK=j04Vxg*F zxTZE*Q&U+Jl-J5LiMky2(;~GMb}qv-29g6Or5^@prH zKx$pm9q(#s_RzA|lu7xvJFaD~qUnfD3k!V1c5DVX9A|mTGQjazZ9xV& z9=hOVXO~NrJ{HNX8Q?|(w=n}854ygW0gi82?9Bj|4cz+~;QYYJ3%LBNU8?*RAk44d zAvhL}Z)J?n0LOBfnE~z`;Fe^7W4(Pc1KcR!9!!OEywwkg=Q><_fV)T^)AD3Em8BeZ zuO%7-uQ<|C*vlt*W$&yM#2(CdKvlg9G>3L9tVgY|I<289J2 z7~uH+fQ_@|eGc@G0W(UUkEfHza#;k-M>Wn}ezv@GfxAaz;1y@b+uUx_?t^D1aEtXx zG?OW~6!kj^jnF(rcGs_4UNvxs*J=2scWI|VO6P34PFaBg{aIR_B10GOp57~sa>vdh`VF{OV!%j1dX z!vkl@OHt0B&xh#%Ty*YovE{8r*rt4ZbIb+?=Pnl;Hw*$60ket&5?l_hRO!1DxVL~= zUm!41Y@G^sC2(aJw7$Rw2A8g#;?eAR1DM?N1eP{^S0gwC%$GFIYR@UkWh*dyH4e#0 zIleIXXSjJ;5pcw%%m?Tv0Mn{*>B_GaxQ)R4P2&cnk(Uknu=DX24=y?@-W2&54a_75 zF4Z{1YPcAft2NGwx1Yr>cAsvIVZ7o76uRC@BaQNI>xYx)pyRDP6Zc34xXA#&1e~7_ zY&h0iDtT-N=K@o&am+_LTq`i2$^iEjU|#HxyQZrPqAlmQe70v@Zg8vf?JtJp%PtddHpPBaaft7Wtreq^Nk4z?8pFj0dSws0CzTUPiKIe z1l;d4zzqWKELNVwrOF4#_j5DAv432Y0gmrH1~b61epe^qf=Tmn;%>){!;?z6g_$W$g>wnmW5$x-Eax(relm zaRkK)D&KxxkSK`Rx$a)z-AUMMsWg;ha)Qi{sOI{5C~w={n%`Hoi z@cdT1d4~`3$K%8JW$-k6YLM{!rslDa+g10!UWGkya?6R-nuHrti^zc znZYg|9G@;pgJ+OOz4Mo^Uitec7FAu$h8k&ZS($(7CHaN<=boFdeq9WG2RF3DxCs=aB`T_~$tilz2&~_;cD_;J zhnnIUx!pODo~^#(w^qL!gI$dE@2#Z&?6#j{P-#Q6Q@6zfZ2tjLdv=U422~axUUM?! z^yWMgp&ni+l?7?_@B0E2#aT-wu58Z?+_{#@_5^XCCB883?~89H?q9*B^f=074!?BzZg>9x0njZtFEFq1;JTV&|NSIn>E$!9GMrXL0^*pXT`Fi9H z5y3^)UZM4DyZTLdWL@!~Q25Kwo5Otvex(4X$`2K}y}p~N_y*PB&PYlvkZ&3D{qJob z&|Tg}fqg5E_O3m;I8Uj)dvCiJT6_b&If>q!UOs{@vrKuVGWiBo(=H1~WIw@_1*KNT zPDi0>EkZt&6O6gz%9amwRmm0N_hzB-6OPZ~QU>F=oX+#C!Tr19<4C+wd{QUdt#Uq` zr2dUF_s!c3Wh(HsZNZggCsx zn4d=lRmSsuKgwE@)AI*!{N31<(7B!KnWLJBF$LTnt*&1RX&2XG;&u&WTcX=J(9b`8 zKS7??Z;hWOK)DHN=fJ@XhSIn}%Igh`5h=abUmO@ZFc)EoDfze?*~JkbR01peJH|;O zqPNrwUBVInF5d<~L?;af6JKnBd|dkoNO_{W;S2C7#Yt1e$HK)@6Euz_Ug^qM;%nMD z7LCiP0$kai3oRO(E61R0`EEu@;kN@y%H@`?2|j8W%l2Gr(O6jucN2X7fh$k!#5@OI zw&l)9kXPOg%tO$2lf<8`fh(ST zJCJ({$ELs)yITVjG}nR?N%~@7%(nM-l;1D}JQTU@;BXW2MbK|N6d3cgv;fLb(an1j zv;}Vm7VLgIaMcTx|4v|NIQQjnF51PDIUbB~NUo%*;nw*`_0X_?u5s}lu-G)Z{^o6b zjEY2uDoPX2QMWH}%Q_4kcNo)*2=hHc6$C8JM)KbYT=fh{xkxm!%S*)#(M5qPwnBd? zwELD9jF3FTlPl!}k6%g!ihtXf2Z_FCM}dl99;PUas4~Znq0aA$VqRFXar7UGr!Ggw z16fx+jbe%BLLPFN-*adL;t%E^3zB|kvQc@iWCIw@?b$I>(t7zG6hS5USank3s1CG| zdEui{C%3#3xaCYVY7wm30P0PiQ)VrrUe8eVIy8KkRer;;z!=o*<@y>LJ#z3OfPW-m zCs|>nk9IZ=wkD^rBlrPhQo6kf_lbcq`yg4agJ)Vo2W#@d6HIwR$dxfw>NGbDY4i5u z+7TG@Y+%ewY<+<-JMagM{i+urR5#9{vkOM3GL-1W%jOtHnX+)5EkMX<2JZys!ydy; zK540Ff9r3CIUDqq*p-kW9S8A9Z!vR&#vvK{5PMBIif^)vKh^L}6JN~ob-<@a)*IlX zve0ZXg{4L(P9w(&jSuM;aOH`GzcE644ZklE-(TVTwuENkx6&lc`!|J_3!lPW58ny6 zvOTM96A2j4`AZ54cZ;#&)!O3Q=rDS3~;r&6#PJ|*u*@TnBM z4xf_zCVWaVEscDfqcSFY?Q@FWo3T7+?fBMKnD4sM`i5k+eFEF7|PitVHCO`ww)WcKfskIi^W~y;{-wZnk^qZo|U|b zV}0TSZCvt@H`}e*UhzBXHyg3E+|$v7(QEXD5&G4z|K$VwxBdLB`P)q{0p8Rr+CgRGBY^Pn9{Q@lek`x2P{L7em+3@X;A-a@MZl zjDAkfc3EJg5462 zN@8^ZD#RR)?1YZs+-eNUW-G2ds2(x3o6mvoRB7J};JZ&kxu#NO{bl%633CKcrM?qB zRn}aisj}V=pK9NI@SP^|2H~#cNlnbY7a^EU!R!a>z>kfSw-&>2$sS0E0&e~jTiRk4`X>o1N>cb5J32fS$7=&A$`Ux{?uwV+E`aNrM zJ*x|D@~wZb^UQ`m8N%;k|7pw(eBuv?Xtlq1XQ1Z|_^AG#mIvD4_b4enJ91$*FR=b8 zP>lE^4DG$$nqAxi8x2p?bl6Fdcu%+|pjQHlY=LXJNM|xn>Af3Xx zzWAe(@(3V^s5riP_3N-WWHdgU@C`Y5p(H~9Mei}|5OO+Os>QFEkwtR;R_9GJ?dv%* zByh_BXf<8zUEHTb-aI6h+m2G1anTR26mB(}Vt*PX^~6O5>om{9!xiOggzrhAab(yo zzIC{N30Jn%>KVfORs7zKD^Ko^ijVW&Z;3A(m>uE^!1tK=*mClPw-9%hah@jvpTbqc zw?$}I!FLaQ*`5{f-7CIZ;d@>}lQu8V8B*^0yquVSpyx)PCvf}kz}Rymb)B<$_Y_+S z*>5-So3=O)8CPQ7+-4ljdO5KM))cOm;tJ$u^_E?&S1xsdp@R?*$Suna46Vq;-+cVd z$KOKyEyUj-{s!?E$O=7vmo*#n4AHbC-n=B8B?+x6)gDYFq zFslt2Rya!+wv(f8m|J>MiuU^KwWJ*@HpK^pi^=4qBTrVks;bY%@89B5N{IJLD0PoV zeAq~-F52@w=GS=gPrsZSxMSO&UOr*BIeMVO8%JiGv^KZ(4lErE--d+m6Q#u`t$w?2 zg*klt5^Mc1;7AGFEzwpw7HmHYgu5iB5bj(7=XtKcoy|QD7tXci&YOBfa(I+SB$Fna zGy^5yMz%4>-&^TToCG6biJXs$xwex4CWBa6pqVgC3S^gf+6UMrK9y!l((M#uS9Am- zsKlk#hNp|K0QXtq<8H$H;^V~NE4Y-&hp-eWmD?9_mlEy`=hiKz!AQ!8$p>i63(z<~N$ppiWO(EuA z@?eIU)-kVac0a|HEpN5#6CZ1h4JX?riRg5WDWs&I;ZnPMhs5Vh$+7s&l<*O*_z(YG z{6Dw&-xVKj$8}?YPztaw5T76SLh*4VC=wrQ^J4L_=aq<$rNo|@Ejnhx;u}(iBf)&0 zhvnld@O(KT6YbWQN86k6jo?N3cq_ZRAkzBx^uiUNfP@C@-(w(t|h z48e2To4ebNg@xj6e4M%@zg&qQpWn5x3EDLzN+|zW+R?83%b`_!N%tyALH;>YCroVh z>XrOKN>=A6kBCbgbF#B)v;PX)uBogJMQ4y(T>TB+r2lRS_VwL#lfsx-^KVe|n12=O8T?T-`$O>s z`QgQc_U6YH4D_<6WO;(EP>C|3u<(;!&pJh!&`g~mD_SUltuo8|M|xduf_fjRfy4p0 zvb-Bz;r!uzr-jeNEH8UH-8cUDizUj(J9`bCV8k~XceX*B62vdIJDbAi0LM|AvKGI_ zyD0bI*K`-<`}kGvqHq+db5S_$jSV7&q5oP}1pKAI?gEBgW0ezG&+~ck7bBSaT8M<~l*RhT~4>)+K+v z<|4+;#nCjKF8PNv7cp)wt}<=yS)*S)a~u)M9nf6FxVbpFv2`BrIQg9;HkZt_5KfGn zi;H?&U!7Y6{b)8NIAYvfd^V)hKtEq|5##0>DqN#+r*mtdH}$^~ot`f~f47eQc#j~|%d9TBr zkk37^8{L9jP7GU47T5OThJ1P{0D^J6=gHK%wJE35!akKqT&FKO=WouqR*H1?^vtxd zvrjQiZ$I$|ObGj@hjUkVdeUiOXI;~M8J=EN4K z9Q986Xu;fvJL~)5!7qMHV;uE$wqTfdvtFHA*p-|D!5mx8IZ1K~9BEeXpfj~u-dVV_ zjdgtgj5nNVR%LjeV3<1}FKF>UH%ZPI!5mu-*C=*fP|g^K9QBU)Si$fuc1qm%P~=;x z6rA;iVGDAYHl}CR8+W4KSyFl~5rJ1dzrD^fOs9pNPkZKl<%F;IB*(?oRF;=-t#dpb zH#V{)8FQgv_{KVWep6c^ib2xj=*xwI;oItLW9M#ZZ%QubiGmrAJJa*^=R*Svlgek3 zV6NsJ*M>`5u1#(~MS^kWeNvK~$%0|cGNrG!--Axjzkf{;%$2w^J%1}5g3i<*BO`{l z72yndG`{e@WXv>#sOJvj8aCkFcQwY*=BEqBndWIpX`UgN0^AwbGr#`*qsoULo&=K! zH_DSQq1f8e6puyuZW6_QwZr84aT4ZNE=mlVhgPbg!5^j;2Oyd< z&EmQ+31e&ZHo2;jFmqg#SgX)w9Q;xcpk(SeDb6tso5Pwi#-i-j6zV2dn1h;fu0=VClTdMHX`G)#xx__rY9hY~oVN9b?_E;R zq=n&6qvp!D;`+3v*m}ob1BG+Ui56xer?)Q322fauHs%+gu!~VAy~wQ^lMRCf(B+?=0(CdGCK+QnNH31KA$`K3+o@@9xhf@@%oFJ%ndMHQDh=~5I zmLnJvJiD|UMR9(~Q;JY~ZAGlgA^#rHT*P2qK&6}{!-a5VdGm4CLneHto0O+~f)Q^m zD4ZwRlp8=Hr%m}BDD2LP;!I%~s9D}R+>_n+z%>SBVg^X?+n~_dlyk9&VJ+Kng+L+9 zro=!Q;iB9G%1Ddi+^HxB)!uW+d-looX584}2NxYN?)6s~lq~NA2Eu*e=$gxHt{-VG zV%%I2P?Qxca{ctkVk|gRK5-C1xl7zKU_VJ-nig3o9jKzMU0zkrf})1^31()``b3x2)(o=#?3WL zxHuBgW z*Y*D0YfK(|`J=grai^yS6q{?^vp@Ti&1HTgOpKeW*2Q&4>3&Dv{cO5$#JIWGYwWl- zJ~QwKc3k%~hwlh;ef@xVX++dwPq_ z)uy?KadXWUE{-X58;aMV63l+FPID3C=4u4R)^YyXP|brj*BzRR7&q4(7uTdAy*q8L zO`3}sa5=sJn=4#w8)mxT)$Zq-OE5wkij58CMp1(JRdQ`LR9TnF=SkF|(hzUOcSF!? zb6Kby`gpEwv_4o$6>v(lxpQGKhGF1SuU-HP(dtrW7gilT5Z5}g$;uMJ0o)RW$dmO(`` z)C5$h6`spax3=}r%wVLf3>uV6tAeaLDAkcKz)Gf=-*`dDWclY*mmaDP&MXU6*HlHy zgXupHbE_X-i?q%nU=MWn2} zs=Tr`D7z7^@|;#t1|3}G&^4q#adU;1{qNACue5VPO;jy(WYt!e1=ZJeC6ipA*Og3e za~Do1STnN%Rt9P-&{y!?ooHl&x-Ka5nu5-PUQ;306gxCZ4N&ICctPkg}z+~6>KY1NiVd1bhTh#&J5{pS+d0ZAu&M+PEVIY1@a1W z_ok$zAQoG(5NeHAG$EcQdhqQcJ_v;#-Z=FK$GWK%8_yq61xz)`Ej%_3T6*Fx3qiYY zsC@3^*-(HiN6OV5c!V`Wm3HA3fV;KfQ$Wc?hkko1Glk}A2gR++7;1%EI-w4{q@Y55 zRyjvLtE3L|@{Tx$WEnw&c&GsfHO4_Ws)H9b!Oen*b+^HK0c!XI3z4*yexRsB;Zo|s zPLnoC)$({(TkM*qh1Y)2^g#P@I>BsRoh_m`{R1V}EUA)$df`^3nKl*)Zp25fUCt73 z5dF^1EQ^l$50Vh3zXHZInwF?1B3m02UaKFf%3V>iW{zc&K)w(zldcT@YaE~xI6uf_Z0Vl`TtRI3=4P-z#F19%f5 zh_>3u0#QT2M3tx6oe&Cz?3JsQcc6WCK~ub=4QoZx7)-($!mR;kV*g^-g?Q`;rPD}X zRF+8oej%bt9qIo2C74+$Q`+D;cZu@L|6rN^TD@OMMJr1~jgfHa?8f?VOeu~G21P|W zCXX%FthFm0zofXnrK$P&P}F2iZGALWS6@5378)fTI@x10*`yew%#o|{rjFL04v^gz zTp$@+9nXhoOOxn6kAg*_n0wzOh32VxT4{Z0G*%vND0AgXq82<~dNR}NPM$-$z!$1VmCC)c5E5S6 zv;+?`6_*;D!_bZ(spEr|sp@XUOHIpKiNQeE7;EpiCXQd|hkT5%Zo(^It!LT7mRbQR ziy)%w-fkjbhCGXzf*b{jU;Wz&V=jrs!s(~Fk`H+j#A1=mU@4?=N_!khPDs$HH8K;e z^-J2XSsKGLa8hhJj3>Yv!9v(+!sFkmc>RM8CT{M3aA0u>`!EKXB*oPqg3wfI(?1Nc z)DZ5jiGO%_Ov?U;Fy@NhZdW=pY4Isik^x(0aXI@$hVeL9bQ}(?(|=DFaIk*}eZZFX zAv7#BD`inY>)ifuL^>5$e+aFreKz!lB5_Qt0_sZ)$T z&W(V7tNT6 zI~_Ht=XmnUmp0|&n2~Q2&^f;%;O{@;;+yO)mqwHNoBfV|f}Y%v^9+$PUd45DmP?u^ zl_vF*09jxjdTDqn4V0r1wj=}GaNusw05=x6`%>W?Zx=E-1-PCA?rn`_5v9^Jdk^SG zfw_AiJa9bG6`bP@1JZeFzYmxL8b`6BiL{@FQJ%8pn#aQM(*<*bNtzpp8<7Hsici+a zh_gKGAi%^xtg4|lHn*xA8wz#dvZ_c`xW3_%!qF*Mq77v+Sk1U(;*7$S;iidItgS*3M{m{`%$9}bC8FA#MvVRSwV^DSHnT(dp|jg0c`O~*BhJr{W{9_mFC z93=0eKDI!;lghu*_Jy4tT^+66`D5zO&*xlcY5NV>_{!(@4o}#c{A7=SO&E=zoFD^N|(#fh!4a8CJ|}`q~n@_{=k-y9{}hxaC7A#U`VO} zrAYxFwew^1`P=90@7aHFeP&xWEeCOjb-!y^O;ZBEN zeNlF%_$Z%J)Yp>*;=>JYIbXnn!$ax+zB>Dt`|6C(Rk}H!dFFQeeU0ONb;hSGo%=hh z83PoRE#Lhf2_HOJUOsc_+}~MsYc68kTzs=C-FH@B(OkrU%kea3OIGhn@)`W|AK(3Y z^7jCP1#=JXjCJ?+;do_^Xu4l($#^b9GTmrveqvH$NtD|(#cy#vt|^0s;(UW}2xO{v zarhu|yCIq+7zsKL6cTMpJ$^EmHl+&`zCmbHK1CMoR4(M}bBp4fhw-gg`%S55W?z06 z%T&1?S`IPp+F^V)*VKC^f86HUuepdB;CUCn{_mZhq}Q1K@135)f29{%N}HP__y#-P zDaSc@U&20Q33EDK-&lroS0`DMc=iG-!4BpWpgQ|(kEc_XJU4Sgi=4JO`5ke~L2l{7 z?s(IZ+ITm$Vym~tcp$?gv{Z*e+AK0RdU(8~6Dd}dog9u>a0*!k>vfTNvHEZWrs=Mv z9@Eg?KXI?l%#S+yE3&fgD%%j2^`?n3Yo8+B{=y{J(%*x1_>3u7T$%28>+nfMGm54Q znCtMXWF5YI3iLPV$5N_wc(?iRRzo$0|6HusTds*OD&RCw+(z8n@tuRyrCNtmlzgz~ z0H#}C2e>$OxKubk>nCP_8w*@T2Dk#?uFC+&+3aUBz>Nm(+Zo`_0q)1CaE=)VAf83I zXo0M0D1WIZVXE~%->Z)UV_NTG^`^p6FT&@vEO^DKeFCZ9h)HA8{s`PaE@j{-FO>xu z;sU^&rEz?|r;}F%OxbbdO$C1xm>!MeWXI0OO8ioe>x_GWc_JmwwoF8MKLaNBWW{$Z zdHhzSDkaXAcLT&M0_Js%v+~=o-lY6AM#b#Rhb@n|f&G?Jc7AOfMV*oX?n24374*%PeX!s0rUE~3diC} zl@F>)J8=wjEpVWQbGHM#{V`cffw@ED(xq<=aGQad!p#i0bmj6G0;+)d+XV{ej@NF_ zGZB2v1cfp0sq%3n0v`tMJa#-dtDIA`tBJsrI&i7R(=R~AEMVT$xODxEL-^^1jL~+f z()SYtj|XnRM1`}`*KfSyx-Um#Oo<{dMLzO?!>b(PC@)n$T0x%x%$*u%)ki#!Y&_Wa1LvQlq%q!9xXGZ81g1{o*q&42*xZ+C47}n5*Kc1v zA0eLt?pqqm@=Ud_&S7~#5pE7A^7`$+6E{2qTt0APGr+N&X99PH#1@5g3aLk9Fjltnkl?&^0R0cSf>-ibrn2!rG zz_I;K%>XwHxak?-_!ys=0gmMo%K*pu{mQhsf=&dB%ftO+!2P?%TK$s!$cBlLny&-% zg2t)w1(x!pf7n2_=U0F^=*H>uDI3S}^N+y1e;gdA556gQR^g(v($}wFvK>s;7y;sz z>RgQN;Nm1)vV}D1hZ*1)Z+Q|fnDRWXIz!y-3~)@}RY|zye6T*QPQuj%vGn}Eb3l}h zCw$RWb2~b(y(+pYzoNYx$8*gsS2ZndTGqa#J$_YXMXa{0K30y81hoIEPIWAK6<>nE z>3!FSV3_TnZbDJu~d4eU|)6TVM|is$65ek*3|gvQt$4R7*|k8-Q-4ONKeF7} zRhqAU6?i=BN_LfwQGYlG0z)Bwg|^dw1#b?w8va3^zUzD{!UGJtd^?9qm3mH!SK*Q< zWl4k|miruhnHZB1u@23}rrnrF!LRJbaPgt+l05(#)Dh1v@b`vtjG4*SVR%mZkbwB4 zdlFZ+htK%03N1;|^t~XvY{H~V%)`L-PfV}K%s4TdM1(6bRGY41T;spB!nYyfGb(b~ zxCX%l6x5GL{5?12c;bU~n>cvdVr?g2F7%@Nj3EiXG1Hf*M8nH5Dn=$EBaMpuL?qv+ zC`d#KjEXUd$QYwyd?GU5s3=TC3XPpO%6-x&i$<0BX-Lxw$p)K#KQnAezhR>-Z=F#J zV+MCSeJgybi%3S0toOox8c-WyX|&d@m`6CO-LR#qb~6gT>&^JxX5Z$_O{yFy zV`k^-KF@ewYw(sh7w65@%D8nBpaoi*q_K7c(D{N!6Hvx&uKsjD%Shh8Af@s-DEF$uDne&sw;{Ql|(Xu0BDP>nUPXp`%EBqDEI%!6?nB&GOIf!kI>e=-b5v<5ER9r#!o z(-qGx+SBvCZ}pA6SNzqo)*&{Dd>e#&f%#^IZ-cT`RKCII4gkRnQLlJdEae;gW{5J^ z;|R%tfxY5qR(~2LSN!yvGZZd4&eGziSN{r0?DMUT_s&HU`8Z*|bCa=(o-%#Hf#md0 zx!>eToxZ16f4ca2BrZ*arNz&${uK@BMUSdV+U48KXA1DpJ1?dk@B=m~no*(mO@*zM@wS4l161G*CPLsIh(APFMvfeg`Ew$asEEJ$pc{FJd$v zPUPK;4p98g>fd0nfxJ>JESy*DU;Qm({?TziFODBwbB3yaH?u!6@@53CK7gha>e-%$ zR3dG~jYk5vU4!;+#E;Srf`9#cf!m)kQ;sQ2(ThlO<6)KL+_i0z6js3gCO zBu_I2T{Z_66D7&pUK^0L+X%l~>|K+`*$NY+LX5_DnU|)wLbgOs{K)DbBWtD18r1D0YZzf}y9im+#tp7Pu3o{FEyo|v ziEkP1KNnvY?oWwtCGOmS%k$idyW;o+e2U}W;Cmfcwir859QWY2;=pqe)+mfdyeKt5 z#-%Nx0T`Raj0}JGh7Z@_cW?Lztbw3=!ZMAFk?5%5!-2Ukn(uC*17h@fvNM}jUJm+T zk7^sn*S7=XAu2cgE`t+ZK@3xNV8(+`IzXBCAevB{G8qX>;L4LXg3dO(6HMgLhHdWu zWA9A>qpI%x@jICzM2Jk#QL)uBKvXaYfrQP7nJhC&AR8nEP+$zn1j3SF78ZqoMwIlL zYO7YQuWDDj*=nn;t!*V>SzOV!KB;x9)}qiBtyOFT`F}p=oV(2uf;dOH-m$NvX>WjDtpyGA=K?%60kxosZZ>;nw5PPq*F$OOnorT6)epaY z5zBOW3W6Tc^9temL|n@}-mx!tL8H&u$Mw8oxWD)aRMOyA+#*o-vv4&Y7rh9F{|t9W z;#vk}nlfFvwd^}06(goihi#%rPY$+E)=+x^e6gD^;6V(Qk%MRuFs?#*LzW?_U&9tX z6uCEHJs@(>d--4S%Um74x);e&B66~zo4XB%N7N_=874C`#h#hee*`5)zy;+<5|5E1 zbQz8wEc_(7C^L^)i5xUb{ru;>mp#5Dw&bU>ID0SqO~OK-qD2?_6s-t}B(saPT-sQV zWp+Icn^_U&VDBaLa3FfiQ3cXaq!u-2>J_X4%S07m!p-m8j4CjvCMxCHQ)SAfs+222 zoQ5ZhgwrcTHAs!B21P8gAQAxlS`UeADaDPJTCW0 zw=XthUT4~@G!U&-3K}D}0{ED$)SneWMc~W*vNak6HmLgBi#&Nkv_^YGYlN}Vc<2dC zD?caxJ1Apm=qekcKl|Z}4PC($v~`BVp|Rcx!cl4hyZY2Q`m+eGCtbXj1u7LfJ z8XV>0j~f(>^wP>R85DRHC#XI8vv@Pa2!^cC9yEuV#`fGNHpI))z#;gpg2rzSIr6v> zw%Y{l9^7vcwjbdxIo^j&au}^Y_Rl72{aHxZ`XkaO()5c8z%tcu(;u%EaCM_oggDO( zF~8oZCKN3|nue>A?S3AL(V{ti6on1^YPw3las;#>x9Wqv^PvM&j=qa!zqHfdFQFtr zzbHm9&mSC=v(HFqi5zR)Q(-k}7gF>JDAapJ_5dLv}&8MzgmI^Ox+n~uy^X%jwJB@?Gqbjavl zm=eg;LtQBAV|!F$y>BKK3&U#O%6LP%Eqntx4*LQO5QeX2>O^{>&kvOh2_zCnb>9~u zlrj#B%s70}jDx7VBT)L^g*rxlJtd=2zDPQNX^P6eslu%&>vHhRi303>-_qgH+D^5T zJTh(-h=nLF&?snc{iY$#7%n2Fh;;CMppY+J!2|dZElf`#?EnatNbW3Se@T%00 zN@xfzaU5u8hYwoM*vPTl_g=@Q%nG3%@@4fQN;9T+jK#oSwg{d_VqF5Th>GW?Z+y|t zJ;LA~ck^-BN5rzj--C-7m9f!LNsku*%whSEB^QDt;ECdp%4iMEhqh!YA1{y?4oii- zwAj_P!p+W(G_CCnTddYX6|U#)Ug&F;(>R>M|~P6bl$|3EDoW4 zNzi8D{ue=Gy^*w)u*u%!UfABjl`Ot>eMBrpPhaf+@S2L_^M#o6hw9tO8S5MVP|cgITU8GoJANtcSB)cX0TS^IHPu z0}xIUc+7G=sQ{eeD*I!1Fm-oOgsHO17*liy|EOje@nx6Z*Y20|hJ9;C;7#9JU!{CT zMe2Oqj}KN9<9TwzYPfG(XHVby3&fmP$cKuAcd6TO!yFCTH>h=9B&M>qb-wM|@Uk8n z(LKA5>=HWMcgNPf>&K~9D>UMG{NBd~_qD&aJNQQ?CWo#VlAzH<`|%hO#CpbvGA%fQ zZ!iK*3v!Sd$`mP&>fxB{yqsfAKgx#G$}W`$%IVGw(7JK?#M;GLVOxf~w6WBFMbJ(~ zIl5EWs9W;u!uA8$UW6@Ki3Ca~4UfY^ zV`;;qO1`mS6myY;m{U);&8d$@@})2jS||ix~<${U@V^&r0Ynp15P(nTXIi z#PBUbN9w+{9({L4kG?V8kGJV~`wZUVTd8TcLkeD2>U1i)i_BTnEwuF^ug<|Afw`><<{y@uaMa#1t96??ji zwrBhU@I9S>V`f0N@}egZK9RF)tG0g7QPK0(U_Hoh{1@;Zv0C^$Otv7pYT9~%_#{JO zYu$N_JJKCl7=)tc1yF{*WFNdo<}5N%a!PH-2vIG^BM@>r>~@67C-f|yFKC=vlLNzZ z@GNJbsKrd$7Q^;^!BK@mJWg@(YGSq9 zGYyIM97m3xPVdAX^*^Fm8KXPq;^>VqC>d`Q!@5CUjqqwspRcjjq{m?Tm z?f9%-&aaU<`fxh%2ok}Q-Z$4%lym9EKZkAlLU)H!5LitvUqN#yAHa(7zM*PWtpkZ~ z0Fx#aS{b^~^1^6mL(>9p)v2f0?kAuIohnMgT zLNTH%g`O0{RgP1VwKCl0Y-lxX&k5Q>+-5L-o8g?~j5h?qDjXI*^ldlmh6F zs=7AGxlhb5kK}y$55U*?Z%<1FbRu_Cn{rBbRbRL7i#dDNd2;r(PS}LX?^4BNn^+PXU_Dmqsmgpi^=lEa-sNCt885F2RhQ!N^!LavVXmC z8={poLCS1vWQdjzF-I%?5G^Pq8v3bImC92~n%1@Gs=2E z@`$?(1_8DJ=_S3q2 zlStF$g?L9pjFXGwj6^4}BV>Ug#>vGDOLPL8BNG~8oLqxJv9#4VwNJi478qijTx>5A zX`dXf$_p`0u2TfpXxwR>+9yjD7covQmhME_C$Cpr#DL4T|DNrd+qF#4aS~(Z!~2N9 z{&^dQ1={U82X{JC==u;5rOl4vAkyu+40oC*e){%gg|Y47XQ^;%X*@MXBb(R6FckH_ zOG89Ocx>*lo;uy}#<;__+3n(Rilr^S_Q}%(=Cca3<=)=b;W6%|vI17pdpE0Pk7Tx_+zb0iw<`b)%jlO5KJ(>R%;yA#b(A6f#pE}Ts8(J`cSZ`#WRU5X_QOAP z#bW#dvw-hmysaUOMTI-IGByftoMp@(lc%EvhNrREHqC$L7e{0L8Y3`&;d-nYRd z{Ib=rbb%q6ZNV9{FGXt~jX6(XZpEE(-}~DR1V0*czQCLYGT;2-Vozo)hB<{c699&J z;n*7jv6!&}!|?;dthauCcPwU{!0^Nsb0zHyzlwul%k6gYv=#I8Z+C2|x4R?DPlmuS zl^C9JBd48lVN5!Y7nn`BGw$z?yC}=kHFZ<29h zgYq059z+$G7jS2Iwl*Z)8;i*n7?vHH?*_))7aQg&c;hV3*)d_BDliSWGZdEQO+08j z=)Ew0@fIidVkj@iP!7gWK8m3Xp=S=44Vf#aYKC946(-fBELD^R|MI7cl6LW>4oNrQYQIrcz$}UBrK0)c^M~Xsyf|4?U1sZ0INvTs5>gJOe zLzlFr5%Ot;q3%M7`KO{-8V@sBq+rIGn2@4ax+di$j0S|^&Xo#7nsm7%hH_&J<<1z& z!!eZK#Zcajp$z7bN*KfU3`L>tLK&WUigKn&F|>}J3yMtOR~2TciSZ1U?s`p1x}s#8 zlnOQa<_3eg$hVk`uP1nm~(j-=RiGG2_gZkK3XVWX}|Ikq8J zFSs~T6BrUSLsP1x*xkv&TW2ifIFnojOfDFKfusvdC*vicx?O(URY8EwFsl`pzzE{! zL19B-Q62_`oEGH;P{=4L_V2Hmpt@Z?+-ZJxd;L>Z>HjBLV2E*kabTEYN~M@q$I0y`T|DgX=QIMU14~0SeREip4{qFr*gcIZ#G8DDQ%Dj!Ch{ zGytkB;i_51vuaYbq4+={l^AE3^FXn_G;hDQTp)0RF?7NbW!E# zgkLnoIJpWyal1J7rnz9(J-1n0cPTDnoLq&VxLxOx1?H*l-p4GiR}~jAPOcy*ZkN$O zJUHqX6D+QDeu}{mB75eM@l>BWX`63J8kwN(|*)2gTk-%>$Pu zg^q3*u4vl76&Eo^2n9f^!H?Tzl=<(UTiauCovsQRF;1@e4z9Hi|GC@Z8l$*~adIsX zTt=;Y?v)V-EG|mgp&`b}wGb35UQV5-vlSOHPA*go8&}=BuYA|?t4?tdJ2NyuRUUg*!BKJ|xB7^49&#rk9>HdgJHIZEek~qqPh!fF`qI=wF~~ zxiK0kQHP+`FfXrI2)a~y^B_-tmC%h`vYKjTs2R;n@BvrMNl-Z%e{EBQBs2aysxK@? zZj0bRpH1Aw(Rlzd;!W+V!w@AwWuvXsh#6-cbzXk3m{6g!wI7U(e{L8mUgJ8GM`f-` zFDn%k#`DUCiAm@9jh9IJc(3fa5v*SpL9J_TY})|EFI>+TqC}&!Bu$X8$)+wBF(9?PmxOasCt7sGUIATHGrZB#}+!iW}zz+(TuNoN;$#2TZ+Z^mJQ)n zROPzmF`7@MV<L>TYXWQ?%ah{Ew&Oz9279Q97%vvLGL7&rQ6N-2tE8-~qy%XucVgvE<{**+mU6SP z7t5&>YgVAR2s*(kN&;$&meh;IZCZ@Gh%xkBLHW5*fG##|IbE0?C<~R8l@wRZj&Wjg zJSXJ#E~gt%mQ@-mE-lUv1+eWacZ#*|%TTg4Md)EK2-W9Wwy6$BrWY0m%gSa~lps#>TSTDRO5S z`H(WE;xL;FvD(9?K|@)7<*dA-0HT6TXwVGij6l|`{9tKG5wb!C0?y{;nK?T>gjb~{ zW%4!Vz(eiecIykLHQVR>1=w%g8;igUC3tsrwV6YjGMOy@Mq+^qQg z@+C@hyz!oVISESPGV=mK>V`{*nnv}<;l`$h=0JdzmLK^MXe`8#E?n2#yt0w{cB90m zJ9M()0SKw~Eh68T&ka(moAs;!$^nD!khN}eFFP|!A)W4KXPWL(otvRLF3~Tfw@)?H zqCqeow53hW%APU>jwH~cHg(G6=>jOUsGTjOx8H~9V9uJ+#FO6M>z41#dmQQQx8miy z#>AWg2B<~Nwj+k*Z{gaCY1#|b@(i7hCuOz~^kQQP2X>lxxCrPE0(Yib!{uyXA}O;M z0&}s#ah5oql-UVzpb(fAwP3&?#PjzM=syJJD{7UKv!?NI-0AU-!oVs_qVS!I)yIo) z(Ig5V*Bqt+bFIR0#yg(B^`Jil%!pK2U=qb6jCa+*{6ygr0(KhVUX&Eg(?PF~!o`!iN`KZ35O?(eaLo73 zF}OgC6ixbjLkuof>LuONV{q}^yCnt}>mFylZ;!!M2G9n?O40o9SB)3SD=94rm6cSL z!7y=X*6kq@U#dyXXK>}mgH zP1Xln_jX)BV6Pnr*?)fFjt(hka7)W+PuaMCN%#Sm@^XpgyAQr{ADKJ|ByCrkG)CdL z(j+NAax7TzU3ueiWX9K(H$u7lV1Ju5tjV&$9z!qt$UKRBnpJCrU7!Z!%Uk@$0>@r;wibC-d(JH)L8+LE1I0lyHJ zPY98bHojp`BaJ+^H69O24v()B%e06<@bK>75n{Ywz+#eyJgBPaUf`Rr7kIko^&);a z%G9D~<-E6UmHsciDkbAsPhV2bj`ni>iHtosxP$|1t@#zq^lYoA@a4BPlpPluF{MtG`wwsj>T((}i{s|uS} z1+iYWERFK!kd>^5;&=nundvIh^Nt{U^E->uJ)J$7oxxO3*SsS*ww5z5&3j|&F+=be zM7SttL$agblyu0gtI3)%tGHin}R(2})ru#FQo)-qIpEgj==^7jRh zIxls3uVYf-RCq>62!=@U&gXzYL*n9mqY!U3oFXebrsMn?j+duCvSq_~t!^L5mB=CE8O#h?KilW3)|DUR|{K$Hm9HFW+(VG4&Lkr`xj)Dw<4NW zmV#7i@$CQG;+;l1c=jK_!|`IhUt7Er15FhtHa;>=Y;j~vSUzM-E{09U1f`&JPai5; z*7F~>r{(Nfo7{IEUTWSSm8D(t5jRz}OvWL@?~H6yFZANxoINe-A)^P~N~?P4JThkO zDUusSSvI3M@xFK`TgLNoC2JR%HikgbicH&F)5fm{215uZhRg??8`nRQg>0JsqCVe~ z@xt7iDp?719IH>&*Lg&RM?2-i!AfV_%=Zu=>*?$&!u=;*MV_vaIB-cpvK$UFSA1fF z`US8hYXRJ4GmXSK*`818&vS%&>-P4Pti5^<13Q!L8Zt=KeaJ(cDYECh?&2{x)~d*6 zvV+?B`fFWzy^^<5q#mU$?4eVig}1B}$)fp?w&{3gSLf3zO&e0+e@Y;_TnzZyNL^cV z%O%y9`rDeD{i~XrmLaS(#=*Dr00#6d?=TCu!`=hS7W;Mb4!zw9Z=A;dxynx*c~FM7 zx4$t7nSj>Vaj?K6Fpap=oOX5jz4Ft|?hYG0w=04>xzBleF?s!7e6qW&ZmyNv^EyQ zFPP(DyaK}yQ0B__Qy=(etUHX6+toj2xWF*vG!M@G{=G6@e4@+J_(g8Y^7C6S~7G4QuP4;qv9gQ={q}b zi_5w7?~vjm#>sVt;9{FW<5ZDrO#cz%1>k`F9jFanZ!Nt6$ac=!9Rb0d*X;e&{n;UoY7*@E$ z;l|Z#Fn`?Gv=%En_2D(OEw!s7ZIPC6Q!^)+@za96S}jcma&=_&YV12vkGbImOKa=H zwX0S&*9BVJ>c!>`vBpYg@m6m92uE64np;djWqu(yZ9s{KV61J6Sg)`xLhg&mEEf|I zfi|3mkF?a*L9ME>p&)ls;&;>m+tR$cpt-3DJv5H|2jXHEU^By{$V@Z8Nt>H4$13ri!*-DYc__Ut!5$>xL4xp>IYL*~Us%eb zd{(Sc{)oL*v5CNNFkunRdbySs!bX<-_J)Q?OH_%$ekHlZBsZPte6jl@P$L%L;xon1 z$Z$E5JDO_}3qd$suzr2@@|Nax!S!|6)x|=G)tr?o*Q;xnVkcH?945`lFU#k05qIUH zMpTsM=jB%fX9r|$!uH+?L+d)X=noiUjPIhLLYFvfOo-|o3 z(inVonNw!i7jI0ug&XMFP1Y2-7$fe-Tf3P&Eo*wFKvMJWY_WE;ZU#;psg60`+RalO zrP)oKwVONezQ-8vC~Um7n^*CU62qo*GzP=YDBj%u-$5@0CWpNxOd{NJgu4QmpQ-kl z?QuN!)&ut{F!R}K!X(1w0Jj;KU$9q%N#t)3xMzSlojqDVxVP}`0$@&M9|psrhZVl{ zg2vkzTvfoVRk%dqdk46?f!W614W>W$o&n}vg-hgKF1qux(dRAT*C7l$vUuU+@N+IE z7``HAI1{Jew}9IL%(8P~f#GPua?jFanGX6^g&~e69&Rb<-vw@{8WAUo2XR@z+;$w? z>%jdAn7cW~gF!aN^%qq_`wlR#N8@a#y~)pFcMzC=+i>yL1haq}IqXdws~LpZK9Ek{JWTSsN=qta3UE^tSVn&bVk2 z<;Pd??pMHEc7cE;ET=4X_X6{%!X+v%V}RQaOs~Qvs+ZpZE^RC%+u@?&XJx#2aI)te zV0@eyg-H~TmylqW0CQG`#3kd$a?dKyKLouB7}t1-;|H>Zv(j%0=$8X?v%)2EuK>8G zfblXTU=pPZ=ld>F7y-mh_#3BObpZDTg-uir0^q*`m=_f;Q99QHcLg#*g0G@iEymv*8_9lIJi3Ck~5*z85d0=_lUazn0E$%OTon5N>1Lv zByx}SybG9LDjd@}QGVxrUOit7{?~w+IT;q1MCFvY2rxSafO`j+A_f$uKlhq} zdFnVgPD#BF%tC(M!Xzp$#H|MA`QzYr0rwU#KVU_Hah5Bq9!z}>)LtrYV!2-kl zh=-%U>wx)&!X@&TxSs*@#sF|10yAbh7-0HyZyGRl(YUC+6De?G9Wa}ZgF79#TNH-= z(unv*X;Srp{%zoX5$&GsY$$n0<9Y^|!wM(cwfLG@{{_qtcI+?;r}kJlHM9DFIr}&` z4ui%3ldEuM`bDJ+^Rr4}=r4^GU-`^?8m{>w>CGl`Nz&3=dZvw=<3F+aLxzH zQ&+FSmvM_mF{M&9(npX@y6K2sbj6HyDIJvBEyadn>Cf{Z_Dd`Zc(7)vb#70C0M?Cf z=d4TH)YiG3GRY~+y8+{wK9vfAuO?8wg-ytM(LFveY)=98Y|X67ZyI@ z$rHlw7wm!3w7=+^pl#=}o;mQvP>~W$31LNO|AHg%6&}IQjrT%>OxE*yMH<%EU-!5x zuE1jNaJ@ZMcXgMfb$Py=pEEyo<9pcDArv8`h<$$fs6ffu?FiiUxWt-WoG545qa1)5 zs;JPMLu?Mcqqi?9y&>=Q|F@VH4(qhEPN z*7o@`@=`iJ1HDSj=W7GV=MeKbxpP-qP9E}EpOcnB#UxTEO3sc=bs77hO$`KSblt0W zU_~3%L;goSrWg{VmvMfKv5* znPe8p*SW(lOXR-Jzq{J+hp*7}cMg1uS8DgM)FM7R97UE26~g;Rpa4>zEk+xfEPkvV zviRL-(zpf1ERweTI8WwBNEE^y0cRmJvgVbTtXVFyMx?(;wEsVU66Md!M*duC=EbdM z{``kYtGDM5l!szF3X~`c)hDO*wWk`=;#E_VwRc8&TF03XvObbqRJ!M8=Its>>UHIm zr)~T@x3N^sZ=0C){EV6u?-#xfKlH^=0BYz)ox_V@9Yzr9eu2@qa%?#RsPNZI&(y(2B7BQ>WZ zZPUc=b2j(9;W3*W=umS%c>n=qOtCvdFLbAM?#%4+{JaS8jjx3-H(TJd0s0OupGJ9o zTZK(@I!w;~)AH=B=Vd39C^@Gw&5@k^qJ>~=CjAyzQRCA*&msfBmxmgqt@Nk4R9qgi_Vb5s|R_Z3%lOBJy2a zK8^CK&4i8CNdnah^S=g|Lzy%7UACt}{pGg1@B&>bG$?f64C|K7Q0wD|N}(E~aK~!D zNYyI4%MQrQUwlA+mTE!lN{6r8-tGrr@=F5p`JM4xfCzRy^(Q}Zb)^_i#m7zF9*>(J zT1Rk6?Hkh(`(&|k=m((rw3WECHv6a^AdJ2pBb;f zdbDdc9p3l-W5?QG=dNT_8Iz&?+0IP|H2v8X9`9}2w}r-2XR4?+*tgdH6MgaFt|e(( zU+VZS)YUG2Q{VZEOoZjbKY4G4&cUI3vbLjH@qTIhhc6E8G51eF#hR*&*tqFm&ajJH zRo95l?Vc5xmC(v2e9(i3s0OGD?KixK$4XPU>A!dDL~Q7y_BZH?+3x+qC_D+EE&SfC zLk$eJU3$N86gxq)UYfBatz#zpwnC=jh^|G`JvmFDwPA(pAezXu4D7XhaieF2`(V-v zX!0E4mYNs~I(KL0EJ@q=G+T1v#ueyEV|~06ejrrb?|BHL|4fYAow?xMx)zYW_QU!! zRU)d_ZTDVR2U1barb8R|6~L2CgW$=*Z-_2@BNFMjTPA>HJQd+`FuOkMT7ZIhOoWZ?X;v0?OS^I>D3?$b8F_GMwa&a~ZR+P-4i9)wN$ z_JnDB!?b;1+J<9t>t5kr)=PTu&7X@3^}6@wogcn5^hH#tovK3Ztki?A8I>w!r>Tto zk1>73d2nrmaFKgPWgn3X+X%!kSwjub%sxWs1Nk3+@IfYHF#;}aSDH5Nwk)F(m=PQp zjnvS>Bx859{4j>Xu6Aq+2BrpsQD~UmJs6DI?jn!;N#PH)Y)-$1l{0tk(B&k^&7yK2 zf7f7aeboo|yp>er-i5ueE4038qBvuNtZNGEf+{9!@FyKMP`**`vAB7Xw% zhh+)GV);`le=6lqwftEie-_D~E96hT{1NF5&CMi)8M*1)mzp-dm zom;4-q9Sn`Miw{OlP}rHL9*p+7M`S$&fbQH7-w;i$ZedmVe=>t&76p{9Jh$0GR{F^ z++m5TCTNX{(ld(uILW|%^owwTXFIa*K#ge^k**h!#`~G9KHeMt2#C4K`oa%-MtZmI zC0AZAx`fVO!^-nC9`Chmk~%*cb{&4C7jVa06LsqqgO2FnHdkXe)aWv&28kbgTNW*mPuldKL>-FvBzIL7<>H1 z1NZo=o#wh46YVa#f;{kTcaf|KMIr`zMKy|2vtG0)qsK^9gV#*g$w*h6EReo3WpT1V z`pUG$$pY!?N0zTf`WA^ADSVZcvPe`)y`ot9T6uDOEjHsS+lM02KIj#fNM8$2j<1)P zz6NO9T~x>)y&_ZkI{oDMnn_PY3TM-{yGXQ}IQ1lb#fiC-k*|LGC45b%ZFkXF{=|%} zcCvy!iYr-T8IdEaaj?mD@=n;=arv}Ia9=BI`*FV(SF-ju+*<{Wi$8L7!STd;LCb^f zYJsaUZFQz?jcL2uv~|KJefyb7d&;!!H*Ig3ws%e2N3cm=Zbz2>=9{(()3(U8Ei-M+ zuu0x;n6yVs+iy%8CE81uUp8%jhE4LGjWL^iJHfQ&n6_fmR%O~QhfVU{WYWHA+8#7* zzcy`qP1|#@NnX*WSwp|WF+)G3jCPgClGAZ#JL?l7oRje)Svwcc4+~n%^g!I6;9Y!; ze6TaAtw1zSeQSHWJ9<}S%69aFovyYsbZ>WR306Ju)i+0KSY| z$c_jV8MCQKaTmHq`z#iy-Q|89Hg9are`dmH*d_u>d|SK0eBLTTPF@Bl>C^Z3Z^numViCig7r>(ac!#l7U9A5+XC4>^iKc#EJJ z*)wB4CV@G;!PJ%r41%lUWNx9$r+c8T8+m*r2RhcfnIQTe%)D{&u>6Xy)P3{?2gM6h zaFF(91Smy5k*{;Qt38Mq>1CV@=69ZoWcejJ=Z6>huEFfEw;JkE8Nb)o4#G;Y<)`}JOO3^|YrtWm7y+uO><+$P{|!FNNjz;gRRI?D6 z2p)#vYl@z%KeNKsmzMQ`!48G5{6z4IPlWaqjd4Xvg58Dut8T?o^>*Ji76|1b&>s6`8W2Bh05-*T=r#li) z<^L{G3{v2jj4zu+8Q)Q`$@uye+_dtEK-f@3YTiYaTs(k$|<#urW}LE;xT9 zX+@@Ou4%g*wsu^f%9-C=gh!vleIqV;=2wmk2=A9E>ezKjs|FSK+LoEBGXyCTFiGPm@a<`wpwe zkT%pUG+NPt7-`K4xIf{M_KzQk|H5p;wq%lREC zl?$H*riTS19eWfP$B6X&eOw>lI)dw8xCWw38~sNgpaScnC4u2b4F`ZP;gTxA2LqmL zszWx|2C4%5W#JA#s9q7a5x5T(E(Tz;8zY3qukntdH9~Cn)u0(T{*p$&_)UsKftn_4hCg(Ze2EO-F-87~OQwj_Dt)5-ADaC1&PvgN`u~y1f9}WP|F_9M zO7P>+G#P@zSn{hVIkBh@lS5dT)Dr}28f=ps&QdcsPk=(LM5N7rKvi&#c3|-!4Bg9i zywRpP9|17ZJs?=*O$LHxO9tXs)2^RF9L#2M$1h%Pv0s5YY!sf*SpV>nK`zz}w-#uK z)V58?%>1HD+af9UW0(x2+r?7gG)neI6{(ol1Lh7V08e%qB5r|s6?dZN>5cfjrOl3E zPPknx#e6erO7)jxF|4U>7Y|+%J*S3>*rMHGbLDoeSC}6^{d+t|V>s2~cJaU^-%NVv zgXOW96oCmU%*}&~@P!oZ4nKF?uD5Wfi=)SlMiXLT)`KQhze+Vy40Gkqr=dNX@vz5z zD4yM}cW|dWRXqZGa|;F&j<_;NnQlok=oy8*yAqC*k=W16z)vt zVYgqsE|J1(cF-(iZ_ZkR&MCUAo{Kk@((upkAJlwKOn5#gFk^5hchSG+blBaI`HpOc zJKw>bCH*V+Zm*3EvtM8?#GPTTI3wLZGR7~)$nD}mNY?7}UpN&6JUH@ww7~ojch<(t z_ex&0V`Ta;v~JfF-09Am@7?>G(J_9d3rqp;xFUNmMEe-+*Lean2X~s=o>;M`@njF7NCC4{ zx%1BU%g`V(WcKr$4qcwe)IaY%2;>!)o#_Dmk(aBQekZA zoGCE&x|~Si^$P#GD(wcQ@ z=EJd=sSeDq4yQaCi(!1e7sc=BI)*24$T=Fx|O6hH|?}kuk&Oh#1Pg7|P#bD5tq3 zX{_njL`C706!Qm*E{bBM#+PC!Ka8Qg8ACZ&ItLdGmkVMj5k;YDW@+6TgLx;0;$`&~ z#^B3gQ8@clpaNyW>UtbNG_^@ zmdW{LMVVkyM27*GrOet;OMRY+*~U%<<^q%QQ$-nNQvReUmcsO*LnN1_RDFV?uxvEC zzK+*sCQB&pa}>ssKK4UJ8EpBbC@Ci8OtjTBZj(~3C?1n?y`orB%zmjTmc+F86lIXf zHJ(FGm}HaEpeUBawC##A*~I)sQBE@{XL48yGs2`4DvBkY?UG>eisK7KXV@3Pe2FD70RqxXy*|PQ~IJE4p2N+-d&4;v5ctl(`>VEQ+5MT#(l`JsXWK zzXmuS!xmXm(8ONmq`=8#4$2gCQ*BNPR*p71Dd>V8byCpy?sHPmy}azCpfh>LNkP}~ zPbURoo`iyCg?S3X9CA_+<|+qeD#Cn)lY%g>bW#xJ`L6~1~QV{0X zofL%mT(nbGn5QDllbsZVnO`{;W*Wj=>ZBmd^PLog`4%SyVg8Pjf-pbqq#(>YoD_ul zX$K`66pqkkcvys9RHaUqA5w;RjY;j%@U0unign_N@i?NSHD@O`|A zF?_cuhVS&j883@s_%0~`YAtEJWBZkvhHruL5GZW<-9oP73^@H8K`~sOfe<<=MhGVW z=S&|-0a;ssC?Y%Hu908ejI@KY2Nb69FcUNBGy$f~MNntF?g{MnQs)<DDnxbOpGgm5T3 z6BuHgT*aUyQu}^^;vz=6RH`T-C`#BtvCDof5iT=b(8lz+Tf38qfDC1jN+uB$chDtw(2MH9;%T2Fa zUfU9GYpHF7*4siUe$yeEvk)p?O|hOrQEu-4E!nKO;b5%vP9cC*sqoE=77H3BvsNfM z{sieRitVI+JTWvFpO83Ik%=)2QcfAWF|Q4uC}Wq>Q-xg97*rKS(?UWn%F!o`HvJJ1 zSF&B>E}|LU#SzddrSv9{R*T>%(YQ`wv<^|UX3-b&c8|j`IUq#du4!*w9$s2ow-Q?X zEaAJRy&vBkH4pI_2#>vfE=W(G!^A%hpG=lSQi6}eEaW_YqJWxWgb@M=cZM2s)63(B z{lC!rxaGnw!&pi%&V_dI;};ax9FhCfjXN+nMHoXncH>pH1n8%5zz5ml#Lc*V82d@@ zfpEo5rg`O%mmRbf9S(=f>31GQ%gB@yg6-H?zIo|~I)7Z+a^Kjx_95H+4( zhIom7-@#MfFApS?mn$Bm?Ew6e!L|Dp#h1W8#b^0f6k%3Yw6{U4ao{)+gFto_GY3}! zuT*lBgUc2-2WJBRjL2F3vBWtz6ZmOF&+_vmNsiBr+p?CMZ5QG!dlah!DtEL@3TiUM zbU?>}vxeoShvzjlHZ`_2LIcEAk@|3bq@lKbRa>~BaTR0_PJ-Tme%h51M|k=H+M8wZ z?bHvpBrgviCgJ%lwQH1ai4*iCGXVa^rnbm3Y`KC??cS+8?kh zO}nNdI?^|IN=tJ65Q$ zh-p96@H!lBZ(7&bRNv6vRJSV92B-Ujr)N)c2INy3oX3Rn)A2W*x~rqo=Tq`IDxE*2 z!Am$?SKC&%JUwQp*iQ{Q!TKV`)M|Js($`j02igP2WXb>;qy0NEJsmMsNH*RHRdqxa zoRjETY`h$OPl8^{=>Ao&6_cn?3xC3W?Queqpcjnld5;&80lA_=!gh_?g$C4S+Q9v_ zf@Y)8Mtv*CX);B7X*vAqG#}9+{M3AnEVrWiskK?MqN&XI)O>Ag*{~EJ3@blve?<%3 zx?%OF)<{p4eUX*118i-h3*o@o?4{@=Hk;7_Jh@&uBX#0UYiwvgmK*&9V?gcdae^^0 zH!y&mM*U|{2G`IW2u#fna1mu%+^=f&@8k|z63yOSk>0v8mWg(D%P4ZeQMUUrF^C$ ztZ5BS6aB1U)0IxGM8Dd^$y29Hhp>FZ99Lh~)a*$TOMO|V2z^=0uvY5Fq8N?+pa!3@ zR;O*`>Z9Gn(U)~A-d|~~&nav`OUt(}1PU@RgSZxNGXX6S5R0WYnh*9tSi?M<>zK6T z3TTEN1VIuv?uePKFa|ZAK7!GBxo`kDuF79M0NjPZeK8)+rc{>U`8uvgfm^KBqnVV{ zpMpGy)o)NRw>n%^U06~PE~%;r&o3zqhN~)r1tp=9;M}U2nWN*dlvNdkYl3rUPJ;He zc<)Q9gLCt$E9Qm^gZcA{!ll8QU};>J=C(IM@_(eXacN6!%Z8a{h2g>tO|`2V>*hvQ zMQU3kaJ(=W%9~eOU0RZV@#xj9YwOmuv_(FzuxhlQYryZ~x&c>- z<`O$!f)_8E-`uitQP~E6QDYmF4%9~$)vm5>YFyRWzNok;Tv33qM^-m0`=S;ZoJFgf z>nBZ~{>gP496(`w%RNbZ!@X2{+5IK$ckZ3q6Ylr4U%E%T?sr$Z?s9jyZg79!b*1}1 zT?^ewNxANfq%rQQq(SbhlHN?ZCut}C?t$$pP^$1I1Bj%gg+N~kt{cF87hJg?uKg0O zJ^|N%2VY)>Z*RcYx8VB$_p^O(x$o|K!`;;PvU_IV@7%-so^Zc%?3eBbj@|FR_SjwS zdB<*Wk2`jy``FQi?%yBHb>DwnIx(a(oyQcQOr;YF3sg3FVl6G$IQtdOnle7`N*kRWD zY~Q)PclV9yZR#7}JF{_1K-Yt zub+YMBM^$uAT;M9RAUgj@d)Kqgtic&u0rS|h{XoP<|f4IKE$pEv3wb^{dey@i1|*W zz?(_6NR8`}D)%FGevec-cJxZ5*bPXzyO4tSBPD-{6nz3I`#YrY%Sh=rkm7G4O+U9Sl#kyv_R#4k?L7Tr$OjY}9 z{i_;V+x$y6_-k8R8<#b$jx@C?gd{)OiQ4<0YP>a%zQ*_#u0cyHN$Y)^V%+hB;r zyc_~jAWH+UA}KmI9ceYc-h#Unp5E>G+?^Rao;#wa-r#-gxt_PvypQc|@HRc+y_`Qi z-pe5#ec_Y19*0PqJ>H2=w0QIv4<;YA5!`2))m;Uki5_Mamdr&@Csi2Ngj8I)R+Cp%6~u@klvh$3 zMD(*T4wzd|Q5X~{QCLx49WJOSud1Fqub?_yT2fUV&R+;h<-)j7I95_rE^t-R0C-c9 z2N!~PT|PVdwKdcoVs_3A>)A6;Jl<#&@tP)wqa2M+5Tns^u@&%PmHY8VqlGNnb`xhb zdNbb7V7arIc%#vm@qTX%E;B|;6)WMl)qxDd$#|noI`xAA;3fd~&;W4UA8Q;0>CfNs zc=^u(x;JWw;gbA~7Y{Z`*#p3_5vmygj?K=h0pQrcet7^mHniUx0ImqQM`Cb+nEV|D zTwe?h<-pby0-{}s%a2~|i|pB8*z8+cF)i(xY|eHn3~@9TuD(%HZ~zmQ-vYOeEg}r# zpGdo6E{?ZU;G$vsXlYk;x<_rqM-{F=_kM#!{5=yA#_8UMdP&8X6)dj;b0PPv!#Lx+ zUJ`L<`Yi%xlftnnx8mz`?_0ne9)NqJk%$FMNEoMkRyyB=fUgARU*c0jZLP=GRdl{x z3pZ}Y-t^PdhI4lNR`@LUI2z0ZW}@opS)b$KZU%ibFkWo*rg5f=<=z!|mj}$(6wdV5 zcI1@&jOJs&Jgacd{IJ}+0J#0csNSErc;UMo^dZ1R6fRNt8i2bUn4=2E0fBHYO6w%k zVYu2L4y!bAv`(@eIvcp4!qPp_zSy>blbN`Mz-*1iamzFT$}nB-1m?R6$8sQM0hYG5 z8W{do+8>mCix${!9}bdC{^yii3Kmy;A#uir`2KKAm;EvB#kMbu$Lle;_}UN+4cC^x zz~QSpeL=xIgGPT{=qFFXMI+K#%MAGcFV8AmhlB`y(pd#LaQQ^)60v2Vp>Y`m0X8*q zf3!F}sO+_?mo_eA$;JKxe(Gs!8X8uM^#;(Inp;+{X=!e2hJ6iIxh|@&T?c2hb{Ogt@y7-W7 zinRJ`TO$6t+Ew@#_AhU4X}qersjYUER=0{{^WgMN<@8Rz5mjg{!IV*=lkW;C4TPj409Se zOeLH(kaL!r^??p4{vC^TN`_6Dk=B+Pf-L= zS@r{@c0N8rA6%Ssc+=@{r#tn5ke=u1atYGLzxH|QR5oBd36(5P{Y@3N0PZ{?l&l4D zzeCt&;l2`=5Im@tKsYXBdR{{<95qq`wLS%JHT{Scgx&0rgxNiaZ7t2NK`H#{djV3Y zAztq@7Fv*Y4HDy9XaN{3tuF6a;Y#TT2&Ix(i2OCn~h6#7N^IToY zP>!(Mvked_gA77x!%KFuOK!pC69>0fz$WK)I3kmBWG@u9&*FZMu#LoB(#|t!<6vXw zoQ!kd299U6IL=8Hl4m7Hx%qaXX=8`?fWR>or5_w{ znGuxZm2bi(O%i(qArKR)EB;sHLOSA;jFZzm2SwXR+$D{<&%B{!P(l^2BDNx z#`ZxV&E?(7jDhH9kDe?Pv_T>%0VDAsRVreh*NxfPU<$;hW71bHeL=o>GF}uwh35jQ zYBs4MPhYF2FRO2jr!P~+G?)U3l>3*U!9>a0l3OKH1{xoG_b-8-o-}w5Rd}M=kqj?( zKJG(W>L2E8I_%w=4`Fe9g7Q%zSRF~c^+l>lD|=r`WfzUFzLT@kJ6WmM;qqzOxNj7; z8r)@hX5%MI0^h6`Z?DDuDq;H%+^-h4@0qq&VQUk#_i_Iwu4Ex!TiQN{>}nTpIXSsj z*eYP-u*@ffC~Ocm6m{k%^p-La)AEpB&~Gg@Z3@kwP@uX?|XX1=RL}kWjnYQJy$&6>4E3^9+)5c_z8UJh8WX7}d$&8oDiKN2_11iW-ksy9Q zRXmJ{s#T~xgKd?^tWrhss?<7aZVWc#98WP!gd+%tAq_V?F!z6!MY0!tF9FP zj-ZKQ*&x|iB1`H zPm^QXb77l`3-Swa&lNU~AMOyg3AkHh+F%OOc1FmvsS3IzD@58>FPy<9Fm! zld~!+-2vm542EI-mF{mAw!leSL*&@NY3!3m{5o*EURHn~{qt28c4e5>Gy)@Rqj6_S zNQ&JZV%;v0Ca{fu`Ewc8>RSL58e*JlcI-E#Tm!y;{PceuvA7nI1VfA%?5hsZ@SX2& z#g&fB3gIJo8t<3&ZK!Z4SzV zps>bSnBRi(9S7xIP#$tnyom622W0{%`%H>G<(cMgEG{?OcMMtW&lnM^oQR-Gw7 zSa6-LxQ-5P-C=Rvpty)}a*4bb5-!MCN)=oe;!fjSJHAeF5#!|Im`1Lolk3vU zzVHJgq!FLpuoC0sVmFXzCH-H@FJhcr{LXf}ig2fSHu=_i%P&7G77Q^?t~5~Gu2Fmm zbL+ytphz1bT%@>&0hetdXgDZt7yDh-y}Rz)gCa&QJBFV$mh_6V4_=9u(89zlayaQ)zv=dV{7+u{JtYwnLWbz740DhC5%I~>l@iR(-;^Gkd!efzcnd_+pn7x10z3gqXg=(c;<` zgLyE9@=^?CFbj~wFGC`v<#JUF=BgOVj}+w$#7j15&nU{-Cgrb+a=J-LWhVf0mPyG_ z6ie=BwW3fiq0Eb|iegEPd{9v+MNVQ4DT)<~!R$JOF)+g&lnJ&4!gS!QQOXx@Zi^^Z z{G10aW*Oy&%9vIvcPz>^3PVYb67vIvkrcZOsq=(i9KkT;l#M0Z4LoQsgNunKFeGTF zuq%U+6uUd;gX)w;CEGEgr-F;_2n-3@Qss`M*taTQfVZ-~o7F;a@OG2p5*R`K0Vu>- zl>bzIS(GE7urHOA3ATmKv7owLmBOXy+gW6RAx7pYb?@=Xq8OVDh?AJlD=tZ~kDA7T zf9|%pzNxr~adKq{t`yv9Ui0?OvA7;mT*NrJ z#)D$@u!DVVPg`71DK281Txiy9T(7=+)b5z8FZteCAa7D=@+u z1cfOlDQobQyRx*lX&Iy(U|o=sZ>riGuwWZ-pb8tQ;I?bg(Zc> z6#+3iaO^FcR#bp(UxlH9fLfPRZ&&7t<;FN}uFP+5T-8?6RE;&rRp<&@`@s~nw>393 z#6^^2#j=tsmhsptv4mNO70h_=sy4J@`7_bmamthBr!SQwfe z5KFMwr^q$f+$mxamirH}3X4sIEfH*K#5!z%=UuB+JSjeR8lg#w0xG$6JycV>B;{adoX3%1p}e7*}=k!U|FEC30q20lXItF z-)5*4Qhr35%g1_06bH5$HCP-76~XPwP-P&Jo0U76Ys$HkS7ZArR+W*9C=j`mje`-n zld+g=W@xEE3lg>up)?6l-l+xHJ!9=`3j{ zhLAe!GfgC;4szh|ujNKsTAEt|=HAme`H*gxUpPOzI?~!26FJNczAe}`AOu{UkfSoCc=nOpGBp$WB3{qK zhJ;poidRuUp@WB_JRlfg-~nOyi&ix+tz9Ksw16mH^W=j}cZZkE8K$GcarZS2&ea7d zLWG_#po8U+b!ClpEzKba0cvkSiDHp0BWoe>wM})A{7BonNTi8x%I1YCD@w|%DYS#U z=&YoalDwv6Xt*IAPN3kvi4($Q&`)#ENj?G}FEG{lr4{)BiUG+Dp*|HhB9v{7%}oUm z=CLf&N){yEJSzfa!c}xz5eT^vEpse}u9elctUSJJG8xvl1=qKsc;Ligyf8|cK?qTc z8EfTttk;k*SQsp?m|G^}lp78QV|xa{CMr)j9P0nIjoWDQ6L818E`TDb_O?hxOC!$6 z)G|@Y32{dA%0j`yqF|+wmnw^@o9(4RB)uc$@i0kdK2xi>U#&0DbGvbeEN1Ra7C(bJ}3BdlSLdj=(Y`sAqs%rhw2;tWa}<`wtI?>Za~V*|f7 zq8`PG=xpO_)gZ<>gTiHvapuH|1SUFz(i4M=J%chDPTZ{~MhtJ`o!#J6@Ad)U_#ytn z0C2MJ8(}cET@{Rz4LN< zn>bE89|R^@O$Rt})?R!TfplODg(faM3-@f(_aKSA{ZoMpDffu8&Td%l-3NLlFdr)1 zU_8eQ-zd;$Vp3rVE*efXSUAhQyFkAlm{B4FrGhpK=Zx<%V6IiTMDgY1*S!h@t1y;( zmcJ|UX4e34w*xl`Gy8iuyALx6S3LI$kYN7;W+vBNU^sOZ567i|Il!z|I5R(@%E5Pm zTL+AvYcw#4((eG?6$8WbAT)`>$A!UW#{*0`rl=B}!*5=bVMxcv@f* z#g~f}0buqiTq1wD81V;S-idZEPB}dW%rG_}Fmx|oIjskMgu)O<6E8o;fWC16xK+U2 z1Kd!qKfxr5?@qiM3Cy1q&RIXK@^?7`J{Id#om_{4apJ6UKOXP)0`pIWGxOIrwM~Ae zpCJIB&%(qx`@;5b8rQXKCf?Z>;w~QmE*rSb!2LvFSzh9~$9Oyk%u$77`UzarSsFj+ z!_l}+Vgm=m_Dh_lX>kHsJg-q0;%MTv_w2H68vu^kb@u>pIlw(U035@8I0hGpIn&2_ zeIy1K+piMWI{+NZfyPG0W&&xI0Sp~tC3*b!i{;>{;F3^TNmW^1bwTmPqr=A+E@GGO zF+fQkpGRVpe&RDX&GNhWlMD0E{#T#9Ir*nu|04GxXLOPls zndNV8@Gos{Z>n!qf-D*^5#r}C8B-uQEYr~3A`Z)FMJ=`U{Fe8xYiVv;hSMzd5%Nar zmqq+o0a!Cin-35C_05r1O3YYZi(^3WWoau>ZOd!h{1ht1qc6wVb|5L0-O;YoC*g2Y_@3uu4dq%M<77O_LGwK9^ND{ISHQeG!f?e@=lHu;Hxa4^knNpc}zCqA9 zaAC-NS`F?igpK?2wh0?sfJR{x9$JSC4rlEVlt=JV6Dh_K1xJVSkbz8Lbkssdl00M} zQ#dBO`%Se=88#!;mRqTow$i)2v&VD1^y)6ZLIhK$l;ZC92IY;T4;i)3BNOd3~0z^Yz0+pX{3D191@c=!3dF zXLtJ_FUL88GxWhdZ+XI5Ykb$dbr^n6TI0iUu&nKIi0}$K&=HoDtuJ}6+X67osQp76 zOt_R=sIhUr!qY9b%MZp@`pQb|c<0mbvR;wuc+ba09DHeFBfUJ6pbku6n{`^SH}U%- z54;+LV;S)4gPeb~UoWe{&P(803oakTOkv|Bu4Jtm_g@PeGeOeYOd8W{9;NAEM>0J9 z4E#JBzxmwtpXY&m9U)m~x_9EfwP)ygzTJ5#eSMqzI$wLYbC2uozrz_x+1y#{JB;@| zuX(caeg7YOZvr1xb%u@KAww7-GC`+`l}do9D4;-4po3ht6j9MRa;wawPIZpKmyiXs#vgM#TF#3aRY2q^M9Um&fFz)CmGa!U;F<& zzu&$0z3+M6_bm79_bg|L*vs~nZ}(pCC-0zLAA6@^51rnHo~74dcb=s~ycZOuF73lG z`mh*a>2?U#9r&bfm;3M!p;5ejRJW_kVWv2uQgIWlcvyMMwo&FSDb1H%-kauOu5aCe zqjkHIk4&Qr!);PZ#BUQB4-w(gr**r!9vLLO#E=Uw(Vd%46H1TO?do=QoemI$_}->1Zzvmx3gch0+(DjC>G;zDZ?#b>4DTRmbBoF z84F3OMXyb%(vz$F-9kO8^t>)r{`@Z06GhIS+ef4%{pBeotFB4?_o`Ztwtify_qK*r z?|j~)aa}gHGD^lCMh#*QquyP-&p_IE&2|gnx*e(dUM^kngl?~xR==-0r9|=F;mh1u zc);Y3+Zg!fVO+^*IY(!!vnX7O%O{rQF-3_0O-2@E0A2+HDXXM3JhinfV|Ta+YYMz; z?jiTGRA!nxNPg@TzDwJM&mnloQ!<2;%`iC!QOBaDRJe{%{wuTv3!D1M$?DKB8LN82 z1u`b|m+@`j)gwvzR4m`|=mDSn67>Nj11!SWCYJ1|MHmI}yNr)XpyuQ9X-up#KJEo2 zQ^{-+@#t3F{ zuuesW?2Tt$G-tjha^`v73-&tX%m*QF$(e_Lf_Lu)ugSdloXm@P-V3%bP4iyx{L)nK z1&5cuA<{T=;gM=VG7BD=!>ll9hqr7ebKU#iLC*?u*V5Znek-7s{wCxC6H+hKi2OBx z&LFcNrn;NT;^Zt?>Mybg$x}s0o)2-*RiDCg?p6OA-ulB>OEs;ceES6qAFkwRp)ZQ_ zMWQ@x3b4JvRbprA$to$SWn3b0>n%tTSj_ep6z*vN$`3gR)B;>SF@Gf_D10;_-xi9l z5%H97r}7(c$tnL!qCl1GSK%EClB#bo)*^8goBoFWocNk2Ga&k6U*liK_1knoh6j#87QlQ79cOhNDJzt$9F>i{-v2(w~n*002JzS(+f(wpI$gON$HU5a&_k({elo4(lF zyBjR9gfrFKJ3kfAG(6Mr9ERsGJOg+J@B}hnEdtD$sh1xL=g))=ls9eq_!QmMhE$3b zrbW$xy2ja9YYNx>N!|_D(>@3FR`q$}Q?@N?jVx+~AhXNd*;3)P$+NNHK(TCTBQG`O zco>i-4p3=LIik>kBgm5{>8`o1w$!Ga6k6%yQ?0yI!82DjtEL(^BFDQQOa|GqX z{X9X@mqP``QMF-$a@uYq`tRS^0OYFqRnZZn8H*Na{Rb3a`;nP*W~Q~D?64$lRwZ`i zkQc6WN$%k4sx+y#oKSWoPW!*^PDjEwj=WU3NyT z0bGn|p$AVKDUXXE%H-7IZHSF?7v4tOI8Wg%*T#7hZ^bswF}z)6<9q`tjTzE(YdAP; z37VX#;H#qXIDZ7E!N&OnoR{2X>;w^r9MoAH4m+}ZHeqEYpFRb5Bgf#Cd zf*8A0cW{zi%&0WQZ`GkA6O~HiM}Q&5F4Y4ZGY%)co%y;cb)}Lb#xB)UNS%c{&5ixf zL0J%W>oz4t45Tc7>sTBoxh~=z*BP_U`dms$%yRJL0fz5w zIei;RL;L8-f1t}n*Uz{70rLtBiz#Agdd29WZIbI=-1!YA9-97atbck7On=;&l6rmj zhGnTSdQKJ?HUp^VhI>C;8LQ_Mfr*A|{hM7Eo*bh`&Yb7{kSuJ&K~;2o>6Sd!<{=uRPoui=j`FT$k{U zDTF_(fp ztvKdFy|)#|T!fd*4-YfYbX{?{d`}UiVG&);7nB(tK#X^dP7<*gm0&tRCtgmS*FPnDMl=`!h zBE~K?44fpFpCT{^N7Sw|rMzCj6kRmw{zSzgUvj3~IMz@M2gY0;`iDy|M-3Yd#kER` z7`uPaOo3FiAU^ikSbxMjDyA(%lOsP%He@9a*>eekviWs|;NZVr3HmtPwPo1vX zhkW~~k|L&y_8i{6)MCD`m*hDtY7-0Y{@0h}{SPf=CRuZ#lOl^Fkq85V$-a3wACmEG)i=$9-cB2-nzTRuow+ z40eWG-y@HP&#Z{9ljB*-oO542vjXEw*x(j(W=?o%90sZu&VY`^p&8Y3dCFx4SV~9l zV6$H=c{6P2;iy&SFr4vFI5A(I5Fr-n43FWAv~aSrN{0ooaz&hFoH=132FN&acIo2j z3zp!k%nwA@15M5jUItwB%n7Uj8zI&`&8&n^7OtpRfKfDu1y7u{FBWXkoFpfjIXQW0u%rZwU2%8@{bk2HuK+RxL}rpPVqu)Kds^*I=C7LFyTzBOlVhLZLz3fWg~I8NigTq!buZVynm4;Yiik8j6-JFhRHQ}44#3)>Nu>| zb4m(w^<3s~xmFR`0;^IM%qm#1Xd%{}E}3InwuqB%Ma*SZ1QUd_s9_Sz9NvC8rCJ=> zv4dtV$MN3N7YDw$60EFYF&F&e8lpjIpB|P3a@1De)hf zT&HX0PB7Z-tKq)nC$K5|Dn3VaDI3?+iNo8!0;TCZ?X}&})nA2Lu4J^WEd25bDaM~) zLF#l^rT7JsjAfDISCD2*ZC}BMFutx@Sozhcv@gH>>OQTp`t!@H{I6NcskYWQ(d{9! zvvRSNJZHRYb=XhunlPz^D~z2j3nxqn=4VZ)$e)sxTNva5ce`-elt~lwE6T)~Xm%Uv z)6wIL^U%UB7#E1vkhTpgvI_zQ6SA@kb0SX}zM?{BB6xM0=4*&UFngEXDcyklLabU?DTbB+CcP;<( z$mO4wpFrPMrISH-T0O?$$Ugw{y23Fk1G)!&^18vTDhfU%K=4${j3#k!MJLkpp4v zD|g~f*t`H=T+YkkP`gi4lczB?Q|!pf(PWNS$1M03qtohljj%Uw=^#6s{_~%kN5k^d zZmeU^EHJ;GNAvYO8tZYq?dH)~>L>mc>TE6m|HdSt{+EBsedYH;h;@^7E=do8;h&&r z1E9O{KRh}g2ep~{Gtpbs>gF-JgB8bPV4_2oTl9Z z4(mdb^E5b&36t|SI4K6_bG&{14b><`7Bm^v8o>;Jl+Ga!v|^&zf0T){8BOTpKDoDNS0wf8{& z^LrJbk2ATXEtC>nl&0eZGOR)lbrlN~OUvX6PPGQ+<8ZK*);uvyEKHt_B%vMRO`nuf z94<)Jy;uUNPjZI~Jo+S$Uej6@E=Xw#h~7|BfKzrP9Lpo2rJG!3^suo^RBux2SJ+VE zlpvp2U^G}zgK+1>DxWxKXe6j)F|D3_pE!StQ_g&1y*;M^$u1ZOo8gpK+0o*JRJqQg zzo6)5x}g4Z9W55PcJp;d>;KGx1vO_&E4|Iyjp=N`0tW(V?8_X+s4A1SgMAVdryj;z z=1{Gqh_Oqt8j82f;pa+<7)V(vG>?#Cl}5YkXI;6#>?*}}kOmmlExS526)~I*ieq+} zUWmaQis9I&8CyG1vYW>)oT_hyyYe?l2W`RSd$+;P?45i6=7#!wPlk+M?l#${3 z+{W?XBYoY``nscKJt{!{!0D{>B2hX26I0T%X3n(i=8OqgQ}cpZmrk7$tSAXyT7g+h zQ*-cx%gRs85#kX|>;plWACoufrxHWL* z4D6RAT*02-mWeX-NP@k@FTOAFf6bp#YhO6GatV688P4A)8~^d5yVYVx*HObq%b#!J zZuB`bEKHEYhYh>vB5dV4eAFo1Y1rrNp`DUDfBJ7w__MJ@)Ba!GHt>FyK%bLi%~h&W zqaGUZug+4nk;k=L{{-$NRpC&z(?2eb6Y{9G{+;01m*kjWRwp>FIT#PjRh{5ijaLCP zF994!3|A(Ay9tKxc|u?YBwQ-1z)zKSvi04iZ9>S6q}~G z&^c=3FIS!-UcQ|PPWBzpc`9!^ixx}_Y2wM<9dMv@kDhw6~~pmv3hS zM~X^S%oE!z6#Vig+mhXt2Z&?Fm}iISo9FgSA* z$8B(G6(`ByU}cCfW-It}*eNGj;+Leu_$)Jk+tRE1co3!~C35V5$@@p1zBqZxJv*S2z~OW;ov>^p#Y z+Yx8(0?qjQH!uTO%EHiHQ=f_31pW|Up6CSkPvD*f<{8$9Fsurk^o;@kZ@{Fn5eO5{ z-3wrM9x#_HoISjz|A<=#%+C|R?EvQEPH<;KU+;F~i%#L#3EU{){;ja_!tn$?d^fZ( zww(q680J4ypZVRG-+qKq)LmjEHGcfD+-U)(3pW9P5p9gr;;XIe&B>>}DZs2$xOm@# zpX+D9JgRW{eao5aBKpY-_1;a%od+03`k*|aQseP zSqNH;z&ZHuB;dZKu<`u&BqHJ*VBSrW3JG^|m-)>*0IhCZG{*O6_uYO3yD7l5C|no3 z3w`Z&d*=|HdmwIB_I?C+daeoOqbNJSt9HF)%AT!Lgp%tT0hop|9OM z#xz(y0^A;jWxR79qjfNz^31mBRBAC!^%jfK(ZCfbtQ+s~aEpLhl>qKOU>@rPmkoCg zC`{Cgfz&|Ed{)jv8NkBaVx0WP@D5D?$Iehz0=P8bN)y1bUR|01j>U3)0yw6l?6Tq=p{(W3r`eIlM!*s9*xI+p{e;E15 zgo$~`t-$nVg$N_dp=drbfy^Ig05jN*Q|Z*iu}OR(Fxd*n_%ze0iDU77H83j`&hVc& zg~5*749o-VaiVxJf~$>$z6M}EQMiu6@i{QP&Vc}o!o`Gx-Nin@^jEl!{C6QRliTCk z`EL~TRRZ$^h3m+FKL_SfJ1)k5U7@c5m}fh|F&(@F%)1H~FC4@j1EweXJTy@pxvDspzYW2}0A+sb2o&$FcrTPb>IuI`ja0m_E(| zw^aWyV>dT@Z%Sqw)wOV*2fLbvYg4=r9uMcG>P^S~;@#YM?9HCL&eAvMvh=Xt{JE!qB3-^vdw^qteVAu1c}zrd9&w*IRG<gbcDNUZ9N*{ z5E+&e3vk52c1FQ1xa6@8sc=47V`FF?t`j)cfek|Iu?}+d6EW@IS>3zt60J5_Mz)$j z!pL&t7<-(JBisQTSo51iCVKRIMtUUQ<8Oq9G1MU9Mr!bG&F@#!`*F5;{r$WfE2fEaa^njY>2G3NX}?LDy<3!KY@KWy%8@*+&hDxx<|UH!cidHdM&0o))u%>^4vNpSp4-_U$BxH(=-`p(A979OaVaUov`KuB+9LJXo_o)II4%WSJEQj=1upCmHO;rqS?a#_l||?Q?iZipXr< z2aiQ}S!N#4!Z)PqJKN<@{OAeiu;^dnt3O(MvbP`hU3OznXHoE%py0>W$Qf-)jocAh z_}aViE|gZ@egRE?J6wLi|Cu+kN-#9|9Op44HTm~?BlE%1x9i97jr?!doHcs^+DnWz zd2`zN8|WgB|Fhbp$TFAz&6UZK9DZQ`&YFRnW?lMSFRA zz#rkJ{#m%@Nv4+uo%@%kqFxN{0Fk15!bQ7~hLCP{GzE9je@ss=SA~n7hkZAF7haf# zUU2EN2(Jbbq5rM13PgPlgu_312qs5JlHd-J=)1tOs}KHBTOSLoYv|*R<3h zU4Di>^^iU;#s6VVZ~w6yPtvnflXm)#*SP(ktsFRaN(bSBT-}a7dKdkrguXfHu=xT$HBMQFbg!c@kTVvbs<7h8Lgkp42zNY%ZQO;ugSuN#`JiTj z@@We|Nr@$(q{Q{0q{NM&?iLbjKuL)d^~HT!9;l~;?RZd9b_%El!7BqLWv>DyW#{(M zgNI}xjWlj<=>3@EhTgJhWp7Kz<%oDE3CLCHnvSpUy z&r1n)_t&O+*ZctX-Upj9c8g-P1XW49QZr*8qZq})@iFC|+DRy~Fkv|3RWzPQ=*Ruj zQfhp9UaJ4)nv+nmc^}-Kv`u%fMwyOgNw@5}CbxfT%E~u!){-7NYB3W2Gsb!)Y`b+sv4 zb-%KVwlSB~o(8A&i79Q>$K87Gwvor%rnvL{m#jQo5p7r@I8AvTD9}_A%yaVvGL}8~ z<&m`dMC-o%d2FI+)3%SmU3!4;9QKwb37J_ownYPea_QUx88&8zx?OGIP^+ltqs~e{ zNSB(V@}@k|D`?8&ptjbO$1zeohVj8BGMmR}52IlzJ>8U-rfF$eO?l}^Vb7pdjHWQ! z!Ds|G<>fM1(gQmgiQDO(Os-*2ywEAga-*H+QJHCbw5=!RL#z=94$nyngxH{w�*f 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
        x;F;m_f5sq}pIpB(nJGh`-5G>kj%C85r)M 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¥}l0hrT($| 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
      1. s~wlIad(;?acI%#kxRhb9TqjsT3b>5(+t-ek3x@4~xno4mA-H{r) z!ydZB@#a>f1C5wd#HjK@48KOmp>k4ibZ9a#CmLytlBo|XL80SM4&C7*&+>s!1z{2h z4K!`o&yhr7L@hu&;OyxAdvC8S56;cI$iyJ}hRE7PrSB*_O~t~Cvj~r(9H1PMJjN3L~+(tt_P@E0(eq_G_SeSaTJ+ za4{U%2}*=}2ijgS&DIV|^hz42GmuD8z6|P3mi-PW(f_Q$P)*2kHb&0eKRAF1x4StS zS0W(26Kg-2jwj9P+EC3=EeQjtkb2B`j5&^WgU>-dDIQ~vccWi{(?(NMb!Lm&gJ+mi zsG#R*S?D!}XcvWQ&Yl=V$GV<{C_mAhp(g8HdYs*>_9*mBDEIl)~v&AEQ5- zcO*uJrjDM+V%j9x-+zEgH8m9MLNyqsO+7J0j!$s%^@7w+Jhun;L=6m2nI4$?#s@eG5)t*r;AFR+n?Qy|wL^ZfaYkT_56=>QK%PM{Fr=q`bZl|l7fn&y(NOTXKNLL1Ez-OAAqP=7Tl%Da zrF;(ex1q+RG((%Qn|O z@q~6QsMWAGMVSc7)VX1m0nYZV4yi||WAk90#_Y6OOuzZHV2^YA>+?cLNvDvK0O8<_uuc&37%|oIk&%zXJm{MYfd@0|6Z#(4&0nh^`Ll|^lRRa{mI2i z{$xzAopSp_-j5NWbH_oHw;ptjP?S@1rfm?W=1%+w6L2(q+(*k$9(3M{GpczgNgt)B z;kasNJAGc@+`b!feDA@$++OtpJUSkwqr+hGSsV_H+Vh+q_$N5hTLj;kZ$s#x;PF4l zdj@j>PL*sp>)gHz(*U%%BPW;|I3I^f`*XafoSTag6f8aQLo6V{&l&u)2czBKwM*#{ zoC^})qMmgSjrKhwHE++RwhI((fdgg*FYFDvs%xv}i8JX0;>39f7L_m*Jc?K-4{FaE z$7Exk(z*Q=KaCD=@#82gJ{pY@j-t0OI(pMB(W4~h7&^DV=iIT^r1o`E8TgqWnFO-a0Zecdjyn{IMbiJHVHPElNU*=?b8lo z(BeIY0zwHK+^sFZkO(^3sKq(!&v_+y_0r@0q^I{7(z6%qhk|EOm1}3utLEyA+^2M= zcc2f#nwNw%rj(nDNNES)CC~FiVLVI5I#3W06YnQfG^`1CAR^tuN=3T;D1kJ)@3(kZ z^5-l#grLe#n1K?2X9Pr`3XLGHo_WGx#9^CFHaxzC;()Z>i%?5H#O2}_ zkAk8teZ<&1AJh%-#iBD%+i;~QmAH$s_gqk7>`gU34VO!K5O<-4M(TokN2e}9=@z^K zow^s42<;1?L}(9z5~0!Kz6kA6P$IOaL5a`~ffD-O)~RbS(ic3hPPKy)5>bJ{v6{!Lms%hq;xl*5yL?Cq!`3U(DUC*<8n zQ)JKaFeFVoKU70gwW&1i^%5RE&>$ZS4{mnPmwo15^(Yx~7%B0!0JLbyp^mlmmmWnf zz}V?$)TMxS;z3f~bi#?T0JFN)O=JTm7rNCgMD4}k2%0uyY_WE((%sPvIoqb*-o5H+ z+g|k@C5XY-ahldXk>1&nNkJTtm9gfa2FqD1=HW3tN{`u_pT#4n)1E{{|xnbTUn=i zKkA(WLyR=Ht5bc4M_6bcj^R39)!9M$EbV5CN#9{8z+8vjKf`-`{jW3;pSEM6;1)_0 z%z)VaIX&wy?(C%49OqbVZ+i-5n;zd3 z%sK?^7^z>0K6w|$oS5OkknL$2uFc=c>8Q76u1y;PO5hr8gB{tI&Y9I&iAUVCshm8^ z9P_9KF^!p*Woz}9y`A2DA_1wa(`fTa1RP$jiQK)@j`X?$vExx^+*qQLcweF!x&&h> zV;Ils^Ul%gj@ih%aE@zjPiPDFP&x)Cwzoa41ScZ>_&E1YmC_Ie?`az8htqJG82Zsz zALu~Evhcta?ZyP?MUo@&oU=8NQdOOu)WqrO`Q{r)6>U;DbSh4F!XH+=`QPY=XhuLi zM$>mC7|1y9?LhkKZ^BS9V4Hjy=5|HA4BPgay3KeQwhb@C7HmWAohU---{2NX4vgP7 zFeOQoU)8v+<_hu>tlH{*XVXWv*3o#_LHjfk3(bc5cOD<|n9cd*&Yx4xI}3JhQQui6 zUbN9_-;ODW=rX)_dZ*Ldg#<|pr;&Dwk_R0F9tcH`fcfqacM>Si7vWiyI|$G&qN$5G z;fmF1Jf$Gu?v8NJ;U7{sw9|WkZDbF^#bs05X(cek-(E2klRBrBEeqZ`k*q9u$3LU( zc-t(h*NHbp;YNsL*Y7)#jPeBXn6op4xk~5uUbJp+ZlGz)a0&*B`$(1%da@j*WZ^g= z7S;YC`9sZ1j~&sS+;56@Ox1@cZtIF`ig2=27 z_-Cj0air-5EFu|H5?yA-Q(#^hJMr02$^$e)<825Wn z;z{){pv05vd!WQ~>_2qMfv!yGyC0O0co>wBcnp+~pu@EU^(#<9;zdxxg112l3x;BT zS6FZcY<%Qim<>L62(ff6suU(%18lTL^u%p#H&HXiV}u zrY^!OPLV=YpagCuD1qw$C2-#WCDQ&;P$KPr0E)Wk6lEJIk@i0WCDQ(FP(t%iM_BU| zP_$GK%i2I;um-9V6iv3dlm|e4o%MYM)M@tpF{p1c?@6841&RiaDav!8US`}2pgv~a zYoJ6fya7t&%-?k0X`PoeB#c8xLjnrAdil3Y{(YSP9w$#ZL$S=Eapx3%oN?@4HcI36 zxKEBd5@XhBro+qEw~j;G+{X+E4S?Rq<-$Kj`8!jiaHn?LrHla~=0~p4si~kuNi5bW znx_`L6*?6JC1gLNQ+MgqJv#L;C^6siO;D>4Zi@09Q2KmJ^0 z$48h5kS|U5;{AK)l#8M4C6uR8LqZFV=A6a@*2c@^cmscajoBWIf_6D?*y+57o=`ho zLvr5RU_u;V#BD(AbKdi9LU>PM1bUJu3|$#jVoCr5Cwi?Lgg-{Rn9sy3;lnhW`CA)i zh3T#E5x+j4p{aX#!0|;yCC7VMydU0zAD!MkoaWjoyn4epHiWOD@X5`fPP~Yox{E=30@IurUZNbqO|@O&U#ieIN_wSs8!?*S#6e3~es za8eYSC=pHmgP=r{|2Qb|TJu++sJgh6y`av3N>ON{gxXV=@_SIC*`X;DVM`CFlkEEs zP=h&)A$k`)9F*W)s`EyJ5}L>ByiA=(=OT;Hu!xbH@lNk?`S+y!8$AKdxg(o;GaYW0 zOSdH4CObGeMGJdXT6X4$BD9C=zSu=`eg@3Naz25)HJfcuq84=%xuV`AW_Rk$e3B3H=c(kfk8^*}_#*E?bBuyg=mOBFV) zrq1djyD9m_CvsGNMTxu-lqh|rIvXf)b^kRvn5`|0pOS z@jXyNVjHMkEb%i?LgE*ogv4G@v>Hb&PZL(ra7S20FNp_a>a^`_$&^%cEXBiN(mV|iaPeGw%$tHl~X z?J!mWYT2+#sSYhT)BCdXS8DG(no`p6z3Oh+_NuA9&1t>Osh#%GD1FKJFtzvP-Zf(K z1FP5C_e`L5$d#^;FBM-~;UzG>q{7{|FywLYV&u`#FA|UX7Lj=4K|RBXmkCNF9vLDM zZ#k#~xLnFQ++W0n#t3(M8|YFf;YH#h$>`O8N)BdoMC+}kXtj>cVq1tNt3#=G^Frg{ z5O@QZ_>wt6f!7QHT{aQ{IBI=lZ`dWb24G)^HbZ`&@X*mWql?hadD^akaKI3~n$6 zLz_!)E&4%skKavI9IFelGP`5{y212Ccye)?U#q#uukG@WSBJ|cV9P^dQcp-UfqIf90-%HhwIxEL3zT>c{sSm#j9olP61+_O z9>Kh6I)!9W(~QSIeXMXQYOH`qV%eZm$0U06F`za;R|3@pySQ@=Xktk$Yj|T#%T?lfPGsDeKXcDhj5ocJ1s*az1HKyX#LF3S#ervi4`s<|nW-t{_%|vrGhovZ2TP^Zn zuruomr(oF6{1?JpN@lVa>QZJgMGa6cQ|X}AFh#Zv#jkh{pngk5*cK|8jc1&JQDJew3~YQBCJL0T!eOnlO+{{|#e zS=Zcf!S=qq+1W`mf;9CIuqzFJ{WUq-kaI z#K!ucEgWQ{`jo7={n!a@VrJ&&ZOSIWF&~`)A&d&&7s^ccgw9PdZ52svOR}vn`|X~u7*fv&CQ>p|ipIFfw(F$-pRXuGz#u^sYK*PdAKmK-? zAw@kBIl@?_hJa&OxZ;LC&oHE#r4(VTQq(IX+cIz`H*w#d_Y5g||3r>3Rw;V)PPSc0 zo^YOPcHs-uaJ*iTQiQQeQ7b8q4I`y~>T zH>5hH6k)7V)Up~W|4eqr5kqQ^lp>5(>U@^E0(Wv%ueG-sQoT}&FjgsgS};mfNY+VsfT)=^P6%}p0Nq&xiU)6*eE^J&LrDzr8}fly>#jAKl=Y_vaq z`B$%rvYEz5$uEC}JIs3O8;MITe6sDkxKrs*{qu*1qstE(J85&c{9I=WOXxun z2L_44F4l{zvqlc2M@e-MxHb zl%7n+g!MH2^73QRdL~8b$u#K^`9&kfWE-U<<-i@+{`TYOe5W~wWZMed$(4Tbhp0wI zehEEO;FD}y#|YGUhj(r?CYv$!67!8c*WDY9naY@j5;Nwx+m}aUrZMJExRVu6ls@o_ zXq%@q=5^f3eQC(=wnythHw>E}V+1z2KK_HhL}M@n0p?lUsjN;`zqKqnENWGfZR>F- zdu&Voh@^^4pPLvn3xl|0pD~N*jw`mF0>+s2P4*N<=~1Kf6fx#@+{wLh$%Prw zdWzvA+A&HWaz#;kO2AFF(HAhtOvO9&H%LxGi+)GgS;`oyWhuB`er{7_xPElyPuk0)!m3~l9i}lF z)U(fDfKD$`PbFh~xKmkud3EETDx&mMF-ENC!UriAw^{mkVKbUG#OoE@VYV`Q!yi$( zjj#k}4r8dSlFw_6bo5hX-KkChgXRWdQU68l>L(sLRx46ZO#+x&#`tk3=_i6q9*x#B zF9FPa#?X8#<%Ruw&wXT$yU4Gb856GWk7uN;ogbCXw=m}0xDUoPR>}EJv>xuYZDZh1 z?S{ks;`&>n^xOuYWSbjzO6T|P+qq4|3qO=?R4w7IRnj@u=>H{0(K#ldIJ^gD9KfJUXXDa<0-j zUzMCWI_I?H%+)zJ$j7pabk6rB=R%z`k*X!TaH=kh;(T6mvUREFBqvMfqzn~Wrs^Dz zFH265E@dAkH0S7?sgiT4&MB50Lvwu;=W~*iu1kF<3Ug3$ZqqTR zqcG=DLl1Y2j=5TLjL^#@XOxav9EG_jit~dg&ht^6_atYmu6Zyu(CorFcx4o)KypUv zQfnpWVx9A#RTvp>rlnj$7w^Msmt^&Nj)pQRnGUWMSE6%nk(>&h^A*V{(>bq8&U~FSfd&+C({xU=>>E4!_$LOJ7aK0F+jMF*O!69dGmViTzlEJxGVlLOEek?gx>YPL1 zP~p5p=bTTI78cHYa7eR(`8qh1WixfD-%2Tib3Vp7lJuoN91ryk&460w>+Vc>|oQEu8BxK{CO@xdR*;l^c4V0;kHt=>=!8g;R)0 zlz@eEFF1EvI4^^<$-=n;27lJV@qTcF!@h&*z49;wf9;rO%>X`oqhn&F~kC7^+ zyutaZ8Owuver87hkoQbC6#1_KCn1_7ttp~m>=6?vkAf4{mnG#pB zVwUm|$2Nueit^aS9X}K^CtxU>(?wn|h8W8C!67F&W<86*wT3Qc!wCICI^7jz5iV=! zb;Pk{;7*Qg7IRJX>-}`PD+*&QHdEa&Z0_Ck*D+!ykkA*85jHc17|MKb$O(?w<|W`J z+o+Tz;X3)p55Fs(pz%X_2vSrs8AA-^kklhMWH`zw56%B~?-tp=$#PcA2D2JsK zV~C+-AW{@B!7=M;1lJlb@w`J)cR+;V#Ta5J&yf;1!7=Mu2ClWVi1`gdkGo2g7RC@m z`2slP1jnprIk;AP#5^0Jdm%;kFoqb)#H;y_Ab#jQ!cyar0Da9CO9R|k^%HX^w!!kIRUnANvgEI>p>IV(Z0&u8zFgWYL zp|W9cz61`MRukt*aMCTDgW!Z6-a9OAZ4Lig1wuS~hB?OH4?5pV~oZw6} zy^CxDH`$hsJGrz=UVA$%gEm1*5ytwiq#2xKn{48hmwZ=d8B$-CQiQQe-N90FIHEj$ zSyj6s^}3WIj8&?Ir4RtS?_ZkSVMqP0@ z+Ni2Ev&s#r&q^u6Sfzq2CA)v6-JXBIka|{15ymRDnx)WnvD;bn(P2Z%ex2YF#wxW2 zoMc-#tmKM}8bhjDN)g5?wU(u52G)aRrWVXRW?z%kxClz%O4h#~c)lp>5( zipE=pl>L=w5Jgc6u}8d=B8*k)GZv|P{`0rLFr+RS4^KG4Sf$p3W8~NV9~WVC7Y@rS zr3hn{YGWxt+4+;+RSl`HN-4q!O>amJfd%J%3&&iWHUN`sqZWkR%6Pi}=bme7(8Zt&Mj!_=2qs^(IaE?h>`2q_Q$!b>pDA-02iDA7+=EU6-3p$Jym( zFNRI}fp)qPc|~q-WqxI4d3lL0Dp0xEfhHl_nw#PA=o0y5?tD*0xwo`3&#j+-C%~|_ z1o6$tFV)Y%lLo9Z#Pi+7mHFlQ`JQ4o4!489I28{DievF|vzz=dA4lNfj^#hPBup); zEGQ_-D=u)yJS@*@rs^&#E~zLf^r#}7@F{v`{mn=hI!P}#8%OCG0TsHvo`TZ6ih{zZ zfaq*JOE}p@h4}>~1;v$aep6uan^u&c4~q-)-3YvSMcq1!Z>77;Q&N>zP*mv_$MeA! ztUhX}k3dy;%8QB$N(F-Bw+tmw^`bCA6BKa~Ds0U~S)wIK;-^(R z3JeOMx45LT%6&5xSFE0DT!q=yTogKF$%>{W%MoTc;KfZrBb6%MCHciAdEPt}2wCX- zD5<&GEe%U>ULlrb!HlLB8Mvhg<-3bY%JWojX_>pIrLMjaCoJY>uW4yobvu=B6d^7H z4fVH!qP0?bp!tRFDzB%sEU!{^&x5VG+4W5gt)j#)ty>K^tt@L5@`0swP|LE#?wgC| zS9#`_lvGVs@i)_bi~AN-#L4cPJ;df8S@^*q{^hGN`}u06C;WUqUu&S=7ief%$!P^f za&)V6=AbO7Zujgw1d>-UZ_3<;)>gHprKzR7>2^9< z)9uc@1vWLVg5p(mD|}0EmS&4vEib8_I~iggb$-=UvaeRKeB~t-Wp1~KNL_usug(ua zUtnp&Dj%64C4D7x)j6KIm2;$uC~+m1gsF`X8v2o=5S3iy>zcZj`k2^A3+Drmvn^Zd zmIM;U`&$|sC_UXqs^_*epjAPHAl)&-)`%L3_LPqh+&6vYEBvLbG z$#An@O`vf_tGNtUbA8uK_arLo3714F8WBOqv$e0#%`))}Fk>uLkZdSIi(I#YgJ`At zT;-_|KScetM3@RitOhW;{Y$L*i_`k)!lLmLEhkphuJbhqWh0fCrI2*+5W@`4Q*+UROEkADxn8Tk>dC9kF<{+_B?#3N zd>B2Sn|>pAe1&s7MG;w)X^ykoEtHya)FcCBrkev@vZATA!EGd!uGgxJgP#%u<{?db z###ZfQpl1(5pZi#)i*TYSnsChbrIId+~mPsUM-r}sWf)5szQ0qtHlVAN38zFwRrMt zZVW70>Z4B`WQ$tMX$#SCF4Pvv(o2Pa>S{|vGo5Z;&r+fpt`+40Qk=OZC{`X%;Uteo z^(%TJanqj$mKnZ>hVTj&ElZ3iTGDFrsvt)pNm= z>cVMHYA7A4$&ZSSEXjT8;Bw6-H6sIct2poJfk00gbKn-f$Q*03Q>u}L%bFTj>B_?~ z4woxkHMg4jFKILv6P9mn;Dm}}5*}?Rq+Fj*jrruxiNe*==PT?N5v7A3%KKDd2DtI` z*03bl(im8WST`(Lj(XX&ys^POg&yqk*RCzZgG57d-KzQ(4J}#VH7s2!eq`k4#_MdX zs5m`>≶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%0AIfp=L&M{&i^6sTqt7282Z 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
        GR+hpGtG=}(afMD(@gI%%S?`o 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�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

        OecvH=Uaz~RzIfA;!#!7`(;9}T6z)N% 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%0Ab{!fi@Z92PH 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

        mM6T9`H<3>)w%R`1 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

        df@pby_)ONcmMM;;~9m zE!FVr^}#c%QSoW+T6;P#!$10U3q^NB|zlq15 zDKeyXsZwcpW0e{Yirv-^cluo)``RKy>OwW(#AB682gPn9t)}1K4s4xjNTsV%#AB6$ zvYKKeamoj;8d57&DdMq8WeO>32hnfk#7hPnQa@Iuh{r1B0mW{k79af{e(YYaA$44p zA|9($7AV|WC#er^xL|=H)lW4-#AB73AfzrQ5&WM0}Ht}&$kp-K^tRcZ<- zb{lCm{hmub_<$ibLM>{D$10T#ilOtTj~#f&kXour5sy_0$pa}hDAF}UUNuQQrAiTx zRcfk5>dTA&UTFALqe>AE$LnV*1q7AyjfG+^Pp1i&^+p1Ts50m&ixH0!@mRx?1B%_I zNzFWTa;_oeR;7r?DmC3A^|LFALxxm>Dn&e2shcfQ4b>liV@M^dQp97Gg4r^KaNG^0 zn+&N;Rf>45QZp=4%ijJ=(2$y;N)eA$Do;ph6`gw<-KN->r%DlzRVv>i6_=6pBg3!z zRVm`JN)=e7X8x+?Wkc#QRf>45QmD8fHnb4-@7HW9<6cvxh{q~*t3~RHm%j@WuI1cX zRf>45QZp@5^>=*wk|A|Wl_DOi)GUkCz}WSx45?OCig>J2w^^i;@5sK|kaG3GOZHVU$0~)2rb+6b(+AvcNa4tG@gp9q6bdJk)bQt5o;0Lps8YmZ zmAc&`b>jVweTLLRRf>45QpFajS6@8>lcuHDYE_DOtWt9GsZj2f zV-2ZxRf>45Qs1*k?fhUzt0CpS7%%Z79;?)RP>lRFyyTWo45`7Y6!BQ4Q0SVZ=HB)6 ztA-7p6=B7@bFuGH0(Ga{;@IUErKYV{^j z^{1$)Xkj@rUD49Yc?-&mxQD-}d85Nj_z)Tqn%NH}sELmDv zQGO3Ip#MLkd|`P741*v{D5)%<`9#{oL@|*_d&;DlMEb*mMJ0=u@>d}gkj%wo846IY z0m;233k8+N8g4FGTE5UnQNfI4oI25nZPMZ;zRD~LRi)-z=TK%AR~BoYjmNw#)nCBz z6>}C~%1Z@*A;OYgj>%XRH)EPjelas5R5wpZ&%nG5M9O0J1B_ub5o8M^DMikLyGs^w zW*Q~@#TP8N7e>}wTsfDcC!>7vvXY9*#2Mwxp+3(jPa4i4r4KjIgp$Q26>8XoT9Wz8 zo@6lOE-J@dCF7YB+j!G&5)_9{^RjH_=q|#Th*i%taUNMQ(!StL{Ss@jnP|ym| z;V5v>QEfJ-{0QA*>uO<73S&onTMU?mJvodWsbOZvqbV>Wbau^mB!ubxsId1)I@9|^ zc0f?{;#5j2Dq31H*H^Ki@}8o(^GoL5Q8c%_{Eh`BX~|M*(KI$>xtLptDP*D=ayEm< zWk69j42O5=_i{10kDQf?L~-UVUU~;-P6U6cl$u(UkybP;Jw0vWgq+N2=~L3vU`&># zreLmJYKl6aGBsiR_%w|*2b}5Y8Qw`*X3oUa6inc=Fs5gwWo1lApO!HxJ578oPti+F zNlnP~;+mS8GAuQDSZA4uQ#~1zJ>H37GSgTlF-&Gc+N25D+1~LJGORL~@|c<;W|&(1 zn3k3`Ib(dz1aCHd0KQUuDowBJ#FjI0>V(V;d^*_Xb;X9S%ub)2m6bI~@FC`C+9hJ6 zBsC>Mq~xSc@OaWE5{ z>=eALwCssl)6yqQost$w7ZWnGQ&Y5nTU91)8ctX>9 zEk2}AO`9-j>QpG^v@|i@H#G&-|I`#Q;n%Es$SZn&F@H+B7txsR$?{}POEaln5)ulk zD{^KE^rakOn{OgmoS2+8F?+Ii+T^UsX*_dS^H^jgo;;kIl57chrYCLU)bt4%889&F z?Fm^?Kr%d5(YZ-EjCv&NB}3~SQa#*I&#IK?w{^5lt`B&S&k zP0kW+*=dueWagyjOw|m9@Isx>%uyau&XeYym@{cI>?oVJ)Raid+sTl6#-~l5NviV5BEcoHljJq;wQ9m^R%t+r-Q%*(g=0 zBr0DR#)h_mQTmE<7Zv`}g_W4!J`V^r`h{u3)Svd8G;frk=+7n0U_5tvU)t$?Y3KLF zrKQ75l1G({wz^w7XV|b2qvp*SHAe{O?w8IfEgd~_c=E{PPV~9Mh9xDBm^U{CVAwE& ze{M=j;=B=~=8h;HJ-l?Jg`P4pF?r7DxpPL0O0m#KjYv*T89uxde`)F5IirUs6(?KW zpEqn+VsX-llHnpI40q#_3ck>eGj7%Kai9W*oGyGK(f|&8s==c~;5GI@Gi7JKv4F1F}_(kw^ z8G}Dbrx7sdBT7}(5${32d(k3I-88qfFlhfIZer7%?#zA;Hl5w-nn+g!MsrpBA1)0| z89pN3^h+E8O&gXnEGf}M1Vk_q_wn&5qlb^?SGV`d#(dn*`Yta1_HE2YwxN3sKl2=Y zdZwPs$J8EEdKSN4G1@$98b%SnAKzh1e-Le3%*7KeC-uj8=wyEUeyKPUqRm#FG(*F1Ae`5 zMe>){d-uFrk{YiOY*JV5y@1z424Lj?F8aA}MRJc0ftz@(BrP5&*t&F&!ngT)9K!lt z=Ibhav@^#AgCyz3!OTa|9m!wXTg`O?_KzIGd=!n5_{tEzX+v>zN+R=7I!5B7rSw-N zVbwtj^U-HV;_C;0zZ!uVxiqZHSU&EB>5@`_97m68PT5;9gN7 z^IeI*Nd6ATcPJQQ`|a(_N7*S7AEn!u#Yhtx6vB^^FA^W=Gwt7Y@dD!NI=}73yJg_X zq+u2Oy2?l7-WKq@N&_kQb(KFba~^FCFfq|gGq|$UNYkE$@`c`yGIJ&W~9gN<=E3{6?1hJzAN#8 zLGb)+9rJY+FB9RO9K=%W`OUvkKmx&Czz|N@NMb=9aeeH z=H4xc=l#!M_R#ZZckdp!mjs^Ie$0FbM#S&<69TjgJg;C3pMG6^?``1Q0-o4cnXjww zNbiZg+`u#M7tE*Imx_7RN38#-C?EW${wP3N49ee5e3Y-pb%XCx@ZHi4zP{jF+zmd` z%j$0MQ5E8aZtz_MzPGx;N9E7fZt&d*zGL0sqxie@m$;dJk>Z)YH?bRh^c_>X!50U< z+q%Iw0DO0MgAY{$>A7z3kv-nl4L%usA9sU~zW0l6@KOAAbc2t|mAGHwX8J`+k7T^R zu^W7Sz_+*?e3TDYbc2t+_t9?fQGIt~H~HS|2H!Zi7wQJzAn={(1|Q{*>)*o7^otbF zqz7}m$yd=0K8lxB-Qc70@!@Xpkv;fnH~4M>Uu`$|z5~9fw{bK5BE<{&dr3F=NMD9_ zlW$xkzBx;mnu3CrvEjd!F~e#)mkY!Hkn|%Im@+sZqd$gN;&vcXT#cuGCzWgkVFT7qt@%%;@UwC?u zd%q6j3wMv~#=BvBIbrEbe7n2J_fa?bPDbEESIy8&PuBRn>>1gU(r>)lo133;^Ng#l z#A(@?Q^$KfxgZxWtSqTmjQI_VF(2wibek?%T3l4Tta!n~Vr*tHt}~$s1Bk`Gg_ZFX zKVRT_5LdRuOL06m-d0dvamQ`md*UZ7sEp4jpI35Q@uK3z3l=W$-8OMT(X@=4i!w_V zmEX1y1DWNEF~8}yijsvT#Y;mfQ$MewYz}g_5kiZCG6!G^u&lAnq4>?qKRI0 zEOB%U({@yjE!;+SgSg$Ir(`XVljN}RUiD62g0|ywUu+Y(!{fqRY&A_oSLa z?8qBaNPE(k#K;48YkMt!DHrX*ITASksA*X*5HBI_lhGQ&t0ZiWJhTbBFmIKgs7cGg z{^w%f^Jv`XCD88haS6QfIrfq++(ur1h|4LqD44qR^9+eY1JcLvY` z#FA4&&Q=enA!G6yE;oImzgasbV4(Jyu?5JHXE{%Y4z2XEFKoYa+raQRs05b7=m zJ;$^#>!+bmg7%^W?STaKP17T!x~4K+OOGqhk{*!B_}^g71+`Y28WlGo8*`TlPKdI99;vTq7b=5bYb_>%O4V~l;* z6V<$cFRmkTZzGm&v_NJWN4qs!3uYnTd z3Y8(=94cjp>aTdIMU%fa!QbZaC9v1cVP5ND!}$&oT{9E4{Cs(&{H*#uYqseO1;a#L ziR9$-X$A@-bPb-_M2!Zb4n4Po?q}7g%>iNw6w^|gkf2hGC7uHE3ED;=_5)pMs>JI+ z8RG3Gpf$Lh(tEfEaJi+=ac7hFEfAe?;FKukw~Dt3K(`CpSe-^E74X{}poaw?$ra*q ziqm5F?P{Hmwhd+44}e%=qmF3DBtF4wkIqN?VX*}DGcx*2N2h?;m2Y+Ah|*{YK+lU% zB?575j0WQPy9tQ*YtI7W*q8>yu`v_q$NWV=oC;My4++|XKtB=aCqPdM^g7T+f!+an zTA(996$qJA`btN1zzlW!x}|G@IP^n-IDBJ)IDF%Q&VbJ;WdU*e(w?qA6tc9#)UyJu z1bR-O2Y@&P8-O?jzW_QU-fjV6-+m8tP|*GW^aFv;0KG3zFI1?RufL840&)0;19A99 z0*w^kHWrA(Ckjg(TjPta{>pUzSpIyt%tzFy`O_s1IK&?NbgV-zpFl+?IXD7^ZT@eg zDpUR6I#6hS8;wHq+jEtdeBAvk)intDa`b}~VUshuZIf9_x5+4RRHOV|3R4V)skiR( z$&1S*?IC)Hr!5+v2(w(E8{?-2ZB^R#cVK5^&F&DTW&auMDXvj)w5kf*l%sm3AwS^b zGBaP{G7q*$Y0*xD!Gi|@Q%C_vBSatobgKj@kL zpxns$_2)pGU&)SfehmQ;hg;f(JLlKG0C9dj1;qK)35|VB@Wlc>F3@*@HVTvi#QA1C z5a-ft{p}3>Z7~q%!-YVc4<7*HeE2lbAB1}^0CE1R1A1T34gqogLT;H(TQcMH5~E_7 zJ0D!uydt)`PpZ+*J&B=Bt*bj$Bvya5;)b&pJnH_cMJRZLFdeVgoy%g)dObJc_$}_5*^3JEj}X8I>7XLc-cc9xa;J1BFI3SP<&^L`lLHS^TDMC zg1Y%QNofG(YFtiPn&{epz5@Z1}Uk(uSf5U@A?(EYN1I6sN%w>)I4s4(}FhwKs{CSN^l z5cM3kdpLcN5`z+j1EJnEs~{p-)ZN<3Y!Pa2M@0%nuDaFG2~ccjsH&ELs@h;pSuTro zCK>1MBF&7d#wg;ST3f@3RMwNZEVVWD6fa?i$f&>?;o!j*)!6%Mla(FnNdjuH4+bPb+aF-8G#{8n}&|U<31eaT!_`>S7 z4bK||Z4d5j9Zmpox!wbEjHs@}7UOClR^dTF?C&rjF3rita7gLg(?^BN`9MDsi0V#k zS>^$;W%)i3Tb8vz8wKA(Kpd8rfes7WJ3#F34j}fIYEsR3>y-8bvA?i8Y97&>?UzO> zqUnIp*@fG%|2>)kD@Imbr|Hi*8aHM=FWiQf{DlYr&MhNbQUh%jZH(DOjGTK9b*woX)wsm0}%w&TvWhAhlRLHh&loWH*SVhcl!YDQNAv8}lQh;zUQAP&nI zAhtDBI&n_96^N}#B@kN^(tfr-WMSC;1c2E7kcFZ4q+5CdXrn+s1maNr2B==pXnqgZ zalQcJI!+W?I~=MQAPyCsW5<^0G9cX&{a>vC^+Duyrv}7)RBU}BBxd5ykyiy|)PPI| z%*6&wUi}p~Oj#jbu5JW{I*!y@M<-jsZ4vb7+IOPuQx-oRM+w+>s;5f+>lt5dW2A8t zB~8uH!kie{8m$$rmcY4L3;3|vl!@bze>=HjWM3Uccgo1;KF`vP2;uygs7L2WppCfP zQX1~8@A*KS<4S;7w-*Cli_0m_sN@`XH=a3p9tPqZ_Y)w_ajyZf%Wna(%fwA>7Ps_! z+&L%x9f)(%*Fc;fsq>Bfbpx@#RL)Uv4eSq)o~QiHY8zZ$?Eqb~j=E$YiC{Uw(ObXtyf2(vKFsOhPFny7beu zyAKS7xE^7p3ZYvXj{C0!x(RnmShtjgJHMR<#BZsg%WvoEZx`xsNj3QG13)j}a*GBi zCn_n(b-0}3jSb1>6h{KC5j1k2D=@zUVkMz=4=V{(M_Eb!0mOcs(NRyh#WZU2vTsyH zW#6s?Vig(;WL6=~iqLlJT4rPwx&jmwqj@MsV+t`Wfs-tYw&9daRP}nmTM5Gxp=AXe z<>wrl$Ww!tG+D)d_EsQHyx!%PySGjfrQ5UpRl%Q`2zAtfqP|$kg z{tH1%0OIo0=nzT*?P>8g2Z$?QQUz54%NC7XC%G5Fn_8;Y%_3q=rv9^Y(LrB~>l{|XcBvE|Qm!jmOkv4JExHee3 zjM{P@w|2^SKb$vJU97pH^o-t0P;O)~-=K0&AeLaP1Cwpj);`pXom*%fL6IC>H z+QHCvcGeqPy;E~m9U3HOFW^!VAEuzd?p$VC`*|>Ac-{pk)$&;tuK36M0$fgUy2m>4mUbn6Q=s1h z(TE!AZ9uC8-(PTN2^x=L2`BQ{LxRr@#04=Gpp0mYid$ZTfH+f+1>*0Zk*RpdI;AN< z%>v~B@pp*P7By4LtN(Sz?r#Zwv#>z6xQL$)YVVgJ129snL^222?C{Z4X$HqJmQSR ze4JFGc<5Z%pi9DumbC%T9+3q3+Q2$2ioK@Hk)zEYiD&D1_I_hN!%ZJ!2u`p+<^R}j z-x_MeA+W6`_oy41`qhT%1;)>z%JUHeT{j6%&`4{UgU0$r@jw+L8ZR;2Sa5DPC>NF4 zI()UL<%kc4ImFqQC>IQ8u0FRj9Y~jaHlj$8IxVktR%@oKcWoku;%g6m8imog1~ixS z_7P6n_C(wF=G$@l_EGe)dA5k)l}Vzz{FrDFw{ix-iRb>>OdR1Sju&jU??5TntE^W} z0lrCXpyQ2TFdMx6$UU_b;lo$<+(#^g!<(gj9Ybgiw?62OX<4HMWKeiHg?dF@#); zCY-0}X;XYHTG()SvzlfiT-i9}TMrsI3-W`GI!;r(N1WlMjUu*8%E1woc$-F^t6DP( zQKeA%C3PGw5C_F89@LMtAud&~S45uFB}U-1k+{p?1{Xntfu6_ZmL}lN7K&Pr8wG74 z?rc5o1$q#dQ{35lJc?)PDtC$+B6SZsh5cdcL7fUL@c|G^{6&}e9EgT2oWdHd!IM+e z8UsLX=_0&g*(-op_Ie=pjfP<_#pRT!(~)Iq87#}r0AgD@4~S)#0I@6;x7@m=+B3^O z0K~FXduCfob!N7&zXoEfN=5F|B7EC{HVX6+&=G;C`pKv#GBb6ixTWiXf&$Ue*VX0Kv>aG7HE4aKSf6gDkiAa>0prN7Ro_Z*N?y|g&t(7WaW!cf zhm@J@e|?}Tn(hA~ZEyhgp9_D?5i^_bG6!}1xTNW-?S=i0hyA`r)AOPT6=`)ykIXHM z2^$t+ZV$oSjx5kh7Ki3W#0gWXBgR;yZgmf7QE?8dt4%|$*Yfu6P9gl;I<5(4O9P&}bBhDGe;nlF4IJ_9=s+LJNV~7D}vYkzFZdo*} zZZwAk4;{Wec!UX3Z5*O04F?fz}H|!yAm~ z_(6VqDG<}BM~o3oC*$yC19ABBfjE4#fT-KnDcugl;k!%cTcz_o0K`^6(fO>E`v!zc zQ+>7qd(9NG0>1^}+?D&#@u)IUwFj7vQk!)aD*NA6z1RC{)r!6F;6GixpO3gY84|0|L zutN>FdLIqMeuyNVN8PMDJT2hFjQP#MRApIQk%1x>wL-2)e`rs{5}6JT;scF!KT+`AyYx7Gl~J&^FURth;>x0VaM(J z3hX=7TK`KbJ(}v-u#L4Y#Xm1v*@Z#{F4_+Vs4%&ydgWcOmRqLwS0BYynW^P9W(>ns5*HELE`==qM5ODD= z_-d5?{9UM=Kd&{spz79de>)=9Lg4?8urva@9rK%qD;{u+yc6ewaD~e*#=mA%q zrtfdz8|_tF?Az^s0-t};FKoUK5FUinzC-aoYpXhhriBe{qeZXTltL8AIH5dOoKU_6 z-%nrU#SDU4`Hih=xyy;+q3F=6|Du8Otaw2xWh9YS!$Ip>e#27(5f0&WNQ4?3c2pre zZw=a^C5R{5Uz@E|y@e>Vd=Q$2IojM0&ujP~o38;MRJDaZ2h6^s@Idjtr8P}De9v-9 zsSZN|F|V~us4{XG0q8)oZ-(B_w#;paT*8ZS5Ou!B)re?rnHH zL@W?X(2>K8s6U8ZrX0d(I}l4W>wGaNEm*>%qv=3gdsza+v2iaD$HodEu9d6?;&c;5 z)>v(1@G*o@vx!_tecw!>Lh4Qs%x#kqc+N+GbqH5$j+TjA3)FH0hAQAgw}4h?A^-52 zj{?oCqRd!C(;F$bM`)y|IfC+XBiE{Ep_VJ)tHrc+H1gZE(o1iq zTo!4Rg!9#GZJtvBJEi{V{hfL#!LL>S+Vas4$EGF^mQFNM>Z%XO>q(oa@8(Yd6dZYt zK?fz8gocW;0~ST};lMgK$^BOnU8!m>L;FljtyI_4C|{!Y{#~S)gtkkE&m~$bM^$gV zut09rO|(MnXaouO?JfS3Hs5}w5M@)7y|CWyfx&FFAs~T5lwVE0C(tfZs#=u11~Qqa zQACi}Hdy>tm`?ePQ=v~Cc3&OaP&Fh7#}3ai3JEuvx)F#)$85d>dIBh(TGW0z*{_Jb zE7lojTH`X}V87Ya8H4>sN3qeE@gd}#k(UE;=B8}V#)q0PoMqkyx(Jt3`VH>fn4vB> z&N7F9HsErLaShIHMh7r8Tv(Rc?o?lNNs+9>>> zZWGS>?*gqCH0lIl8ub(~jk-fPEVQbHzhey$hlNgE=7!6|Kpd7=biQBed~||3n}{ts zpD+>XBy4$gU(i|iw0bP{PUsXe5v>TQ7;`fZxc$$~CeZwLixC6(*#nV;aYtU>Xv`)s z&tj!v#m=0@ECJ0$M?@F9;>$gs+25G{8Mb!s-#+^rF+hv-!sc+Y6<6<_2Xfdpon_j0 z983xR(l7_5eL1 zXvc7;DuGk9_k~QnBf@NXG%FDt>#P)1noW~Q^f{Sg)@9)~ts2(1 zi=c|tC4CSiR-)lRY|?K6;^fZ)x&{{}K;X_MJr`(=pxuT$n{;|+lTKq|>>gFi*p+QS z>`EO_8!o5l(`6<4Bc5Nz<(B@6J4<{6#1hmN{W~tFFqbUR2in1Yj0SoWZ!uLEh?Lqb zO$B;bAZmBAQqBWnmlp%E%S(Yy374rY$}Y1BX1z2mK#A1)pgM^<-+>xfSfGCn6U-g{ zCM`R^b+slF%x>^qp_U8}eP~AbTNvRwVT8Yh1_)irLNtBwr-gmA z8sTkS8ewxN^K}!9g{)+P?^NVqwJA@_wvXoT|5g;|>Z)!iJ=ZKSc*>)kXlG-^C2KlOb&11J z>G>%-*PwMPsts{!OS>agv#Eq}qpJaP2s0CCjac{!E9wsPwWAldP46vC=scxL-tbZv z3!WlqY#gE{vc`_W8@7vNw^?&YV_6~(=tgLOdFf>(Xk`7I!eUZY8M9?UdkmLbSoFsQ z+JZZ4=lejcL;HbPPaA;PH_}-4?QcM=r(XiGo>J5NSvRNF@XVfBIK^HDoS2fYg&^uo|1@U2=8+8JT-uTlC29Z9HfAN)LPZH!^r$*{M= zus6Ut%tnG8w__;B*Ag5n`pw{={m=f-ZGpTt-`fZ_Cd2Iz38a~%ZuC}J%Y*MA{?9LW zu>|EVw(~QASQqaEVx3(9#C%k)aYdeLPRvI+iL2#Q1>cCvEq#nT=LVWq%lYhLAa?I^ zAa;)|KIgLmK6f%1~0)oWdp%w18Vc zeLJb6V?L0xKL~o;u`LyPj$8HV=P{!T+vIhRAPq+sw#(~iphX)y!@o8lO$%rc&Abq~ zB|?`Myu?-&0dE)ERn?%UnkGQ5qg8X%j$79PP@vAOr@5mp%pHxqV- zLdwOikljlZuFxtXcBL=S!$Kk*h})!8@BN9OEdydJNVSLxTu$i~+@BP0-v`<#P(2Xa z!@mJB--XDDjD`TQMWzmY_H7anhmYnTarkJ2k!`av|7a;_Y@6=~V%z*Q5L@Kufj9)z z-OnL-ABai_xAX^~9|&{?h-zYPsTV9IhoHZX1_E(dh68a}Mgq}1ET=RUh*NMH5X;^I z#1gcz6-#^%C|O7>1Y!xA>&|>Zo$nE#L4xmTAWr=kfjB+(0&yy!ZT)|Bu{l-xy0h4v z`KT)KiIA9yJ4bvK5G(1QfqsWe?3RJ@*IiKkRi$%>6P=Q&ym5xMB5Xz9NVQ({bQOu7 zAGx4L9_n#bT%{SQrbzYIBJk_A3ZD%D9{kxIVL6pG2aXz=DQW> zQ(U}-DD&NcXEHc$X*uo%LP6I7JtAn^aDPRh|HEoY6|3&3CG(wIEsY30-+Cdnr_k(( zLG|DgwA=d_jc~nsq-~wW^)pobY2Oe`4l z`4nGFz}JRVM(baIx+)&G;*C|R;xPqF>n&>uc;nQDQ&J5YRx^|@f@9wiqZPqvHvbnG zuILk-%HRU~eq|p>{vA>BCVJRQ58L@6=(6J}^m$a;+CFf6%+~wgQ@nAC4-?Gd?S(Bt z$3GDs$zJFG8>XwpAymE%>L`Yi7Zb>9p{WwYLV=_Z#wtGU&%*=;)F<0YA4=MZo;UiI zcfl5Pyc_VuDX!hh*Gee#_t;QVjJ&BObRt^bw4b`{vUfW`Z;C~84}W-9W9PS6f)Z!1 zS1#z{EndOdi4K~~qF}0AYp4lM)?oEhQxpiH6XcV9ACb0)PDBw^TdjkRNVGGldFl7W zMI-nD$AjY$#mjgfniSTErt)%}Yy zsgf*)@sJB*lXZE{MlOZC4owH!$%szvGB#IMXy5 zZQkaJ%gb!@>9x2CcB&j}Yri%l1dW5#9}Y>k$c!Q2@OEaVC6kMCi?5z)4r6KR~=KnE|tF#;TzPZpqbKN zg8N&8=~0NPI<$e7AHgNcol^Ns9f~i63uAygd+ULI?{`pU)k2!q*M@cpQogGOBkU5huS+#jI#`D%wc0ttzYw`jh_>oN# zU`K)uznF5`GG?p1`aNRHbD@Xm!18>W_!RdGv~X8{pU4<;-R5uT{|?mv2GuFsLTx>i zv1<G&$Q@48s+S4YOA# zpHa5u58AHp_vkwL$Y=!YC@$Utokj$m64hk5%$N=2612Iv(+H|l3zi)R z#1gbaFS|msl~{I%jt(Ppb4V|DXwxD^i8lip2$Ste5cUto?=>RCYfpP<@bxAdd>u`L zugNs{I+O-q^;z+;kt`RrTZIuMfXW1R6eF`s-N0mPwe7ph9J$<^MEyeOo1_^DLo}0k zStN%sY6KUH3ADP>{n5yBJ0}{NO?d`q@_I8J`w~wm! z7Gi~MY;rp&4#?z+$PlFqB4iV&U7Fn2EGD-UlR;L49W#}z(Q|&*mrA04(fV>JWLV#! zN>$u6&HAd5VX?k?WWf3&3X^t{^=%xD?LOAil5f=6L@zw1lDbbH70|708?*zfJWv}_ z9BYwv2BPX2bgiQL&@Op3ZF7Pw>)+i$Zi(RvQmH^*GnHy1@ivM2{%8WsH%juuSnoIH z%gPyK*SGr{)!PN_peXh0KpE2|5I71w|^z%1_?`FbMRwjuQ2q){0=d{ zgQ_Oh8Twr57%4$W#~hZ|&4NWgv6k{jn?tUq(giV-*F+ydMv^{)RwkN0B47Q8p6~Qj zKcc6y9c#BjZFU6Zv#8J+yZ#w8D230Z&p`O#6n{ob_-72E&#?PH?WxqG2z-YG`8!&= z_>Lz24$MeyqVKqczN3b`!;Fxztmtpz5fg(^yp4Tm%(s;n(uAZx+j$C8w6Z-NV=Gx} zqsQdApc6jKC5}F^LO2lP8^;bTu{v;(a3JWo+usr;|C(KhLi3?CARIZuj+`7<{nhf( z$`0jB=|i-v(q$X7yAsWncI5-b{a_%*U*quq-R5hAe z!+0p74a%2CUCUS>I|iD%?#_Q=A$lRYYg@GvI9DxyRU?{)@NyAIT>_Wja*A~lH0HrY zDi?v&G~)ty4GdlmMVMf>WDK;9wcVytZq{Vf)Qc3LwG ztv1n03n{w-XzHO|MUAu2=hVhS>q_3Vl}gc%8PtzdTg`;sV~fK;ALRu9&ak!{XdF#f8!e4MMCJQbNkb z?5!RcH7I!7t_2Czlx zmscIfaER0!1F2~3!65df>UIY`?+LhKg6=D6weT(l6Z=jpRdx2N7RbdI8~XTqc0k%4VP-pA*y=& zw?+FG9kK-q8|CV~m?EGQ)>BT3QqXF~c_{R0AvvtDYAao)|#OfFFrUR7FRCHp^mOq44 zcB5|qdPKPJ(4ea30Cu^ks#U)6dm0={ALS?_Z7byEP3Q|~6t3(-f(Nik#O~1X=-zw% z9(Oc>edN#a=s+(eFD@_{O3_IBMC=P4?-_JoiikrpDZa+g$MUL=MM~{Q_k~he8#*ph z07*sB5peel^zny8gkkFq5wr%mdNFJzM;k&-5hY>`6OOdVLL4|g2xNZ1aUk+cj*=HU zIgs}Y>gA}Uyy9^o7schP3u8i`L{SX2kf!I=+P5LUP}ahHQBwUntl7hIu}g!FE0tJ8 zq5A#pw1#A>8VLsj=-Jt=y=o1egxaE2(xQ0Xq0eI{k>aClMFV<1veh6T7W^Gk3L65x z8dzP-=?YXeBEo~Nw~-do=??*OR)_q9GM#n^*^JF+6gNVo zTyCUFI|oP&PAs+=HU*0^j}fvaN-6JAkzO#&YI?=e9;HN;gYLeRj34)8O-E88+3aVK zHomtgIeks`I!lUeL5eARmBOR;!p(T09HazBR+KulWL8K8IQ=P!+XB;}8z`Y$?1%03 z(2tKVB~Gcs?v3?(8lg%~gSpkdTPZwb_qO}DIrQv@SYwA+QR>mT)h1WhQO>HWql{UH z_8@wErlLQRK6Dpyi#@MZWJ&S)vGm!l(}C>M4hn`B-z!rXgBy#mdVtKX+mFYg!B#6;G@!X9i;FdbQ} z!-r)W`B_rD|4XF9agPjW!Gwp$Ja`)jz9;{XgQ~ z1wN|k+8;l|j4?uVqK+CAH7Y7Jh(JKWL76-z4@gKL1XKtyKoAfTOfo2y02-o%!vK9* zwJ+OxZ*6O@v{g&1ZFxx|QUvvCRBoj$wNYq`N--)m|L=FNea@ManZ)sTfB(;K;GC?p z&RYAq_S$Rjz4kt2iZQcQ@O68!1ikx1|2r>mNkPr`+ziyMyKzuYOYL)hSdxesuE8VT zH(!HIxZ@LF+c$WAP1XUFTU%tC*@%XKJyG|=vZZbJ7r=+%(K7}^E z1-Zp=3)!jbKzvxfQ1Qw9l8SGad9dYAD)h=jI>L|5k6_NyhTVhxa#=eu(}wmIe41tG z-&}+!%x|!mCaCn7m52PBvw_48vaB802ONF^2iNc+{G1ohQFimHXOS^IdH1ifx9)*51~-fbVz0?91-a32fenE~Bk^ds}Ofdgo3l zEnTD($!uxv@U*oq;`1iDp_n+YW7bIskbl@~=0OZp{KNM6hey^%3wr#+E4QGq{KHVF zhrB!d!@rTvpm7?>j(~r7>vBAxF`1dwgpbt{3Ii2YCK03`zVf%EbAHhqw5L3z%MX*d0oEEnctfKd4sb7dho0 z1o|`cYeYq+}oe9_qH6Bs2X@1TZO!qdLMU*S&OT3gx55hl0lYrI41^D7 zpWIP<%m*>6?e=BAtoClA1H~}_oaO+*HlQd|n0Y#krUgzlOT69C5+Vy16rjAJ5FJ}! z)EK4oaWhr76-*x5ixy~v$0+j6C(L_>dXM{`L0jSS!EYfPn6W&;<%&}*rN_BFB=Rg8 zogF%QYHbzUA$Pk%hP~Y@qU&RBB=oI9^r4(FNgn6~ci5N|d&Mcc)i%v@P$h^{O7*+sf|V zi@JN_;g3G1n*7|n%|)D0jlk!YWJ!h-m7c` zuQD(cm6);c7*VDpR%LDDu=J^;gJ>3&K4tp0VDuh-3?oh0t|6FmFy4ag{*9AP_Vj>N z*_W^d%*sbiWlZLJ@={^U1}iX=^wWQFsTM}E`Ip(dI9K!lBs;~p%Z51fBVJ*%F`q)O z@)TnfW>I7YrW}yqa?r^Ot{RZwegT7)i!lM?c|a118bgkP0gpx0a3+@{DEP3pvF?O3 zV_wu#>TQ@Jk6~ya750%sTlE_rOK8LADD^Qc48?F{4i+o zjh_(*%nw>HP7!nURoZ-&$D>19U=vqC9=j%BRG}t7RU^&X+g5rALC`1`gLp)Txq}vP zw-3W5Gtk1>)bNQl7Y9FDbFo>{f^$}ewv}d@X)R`c3rH}`={`Cl_|fViq)JoBaAsTO zkfRp>c{%`d=g~93gqc%J>9kd5qBHzG^#kTvvOb0ZX#Uav}|d55_XmH^Bd7`;I@S%79IWAZUhw z?z<~h1p&HU6!=qDs!1YDbs_da2pI7LZa15cXl^|1F>#=#aA%PF$z2@Pf*aF2=`x=K z&aSq=y`f+@4JGd1_$`h(OChj_aVB7{2Tl`}hq2HBiN*^(!#U2DP&zn?)GFB;i&>P4 z$(+)gISUq;zx7)*h_UJwhQA1o7i{62-e`DjU^0(0I;E)PW2Tq$XP8-t1nl#!4kKKn zMZa=U%({?`meK~t!keaQzgf;s#3Em(H;;Aj-Tqpq&wEHJE6I~AHw>Be-C#o zpMg!wZKZ)|Sr0JLfcM~g>jz^IqAGw#xcj_@`h(BQ06gK%*__|RAyu4Dd5<{w3xTNg zP>!-1N)JW8jnrdesR|kUm!G5aLAmFoZ4CTOtvR>&icVG;Sn!FT>EZuxDtH*M z31ic%+y?Ifs^;cH(X?+cTF&u3W$l&xiB z^_@!4`kw3E`VJ*(ecKYWKBNvsgjI=Nt?#Lp@T+Kfhj4YG^_^v6#xs)fIjt`h$Csh? z?ZR@@G5GPY^`Z2uPE3HUx$zm*{0?I(eJ>n*qK~4G>9P^Q62$R>!f4=Y-cP-IvoKHF ziE)Z|KPFT$z%?rmv_;VFj|`8znuV~?47tRZ!4~*xd<)EoYk?VTII0C=0ie^>0-s9Q z0*_&ak}a^AQ@il8;})p2Xkew&1kwHwC}xMzmOXkb9`)UW?#OP3Z11W`2BH)u^hC_l zPEX}N@7`$OU&NtL@>F(s-&7NkScI#>%=rY)MV4-_o{gxnVu)@V!`YonJk#Lh@UT4Go9%L6dtfr`PR^l;3gcc2Gr9)e0nV=u(~Su-j;J!@|k5!=lDSsj?qgBj4) zyj8V01E<(U0*I{*Q*M}{hqxoH$D$L9iK~QJf^<(uqNBbQ>TswbMQzZt$Gy=Zv!R}R z7d*_u=Xva?Bpk`E^rV-A-ysj@WD$9=n>b9xKywXwxMhb@!TJDqRH*NI_!9yB83F;d zI@g`(6);V3b~cR+9CZu!0G62^1_cZ~68Ti9;Dz122XApG{OQCq5WM2?yDyR%?{mC+ zfP5Gm>tcAZbk&7u{~eRY13c01Fk`~Ol~!aDC?iAn0541R4hs&?F-YqmdYzUo?=BS; z@@gkXH=B>;&X3_UE+fS)7V=@pTl&^O$iVVS0PgHg>y~jdo7-`cGj0@TTF z_9A0L-j{myBhj1zsB-oz?10y+&c=7Mcb6)F17`RMZ~Kl<2ACa8_u0`RcANY=pk+I& zgDhub(<2IY7q>TqVV}4C;3o;_K@1k5$NG{Leuoo2Ru0@z#Ijg@@yqDYunr4D5i54l zv|VgvrCo5nCpmZnxLA7v~2%3QRwHMf|;eoRsb4iVie*4}(qFM5|!;WK3zRTE{`=IdJ2{ z@)fEQ9YGOx-5;}$#={|bY9%W=R@o{zwG+c|Y2BAk`<%%B*Ypjjl=~$$G0*UoM zGm5%80#|7aU{x>hoLPnClfzydLb^Sx`3X!$o8d=!it4MwF`B^m2+Qi|Dv*F3FrkN| zLl1Wjuk17rW*vY~wpD)Hd<9VRMsrtN<=4%seOXWz$J@eN7*7}`n7D#PeZjWKLr4Ku z9<6AyMw}A znQ^c?S40(u0EW9=lslDJL*lQu&?gwcP9^0)uYfN*)&#vfz2vnOTc?*1`Rq_tXP~vO zS&1OL>XqsYR8J9Mv`Q!9rB5ekk4oO*gWWAV|E+`CMx~6oY*3>Mz(`F+B%yJV8$;rU z)LZCtv+~!6{t$!0WUO!WKDGhC`MG+ z!)Sp>6MHK3109gXuji@QnYNbj33LV+ByVK7pHc<}LPl~`vDtaw;yoxqqwUI(y@w$N z>j(H-2e9FmK5kaQT?y*&7*|hrMklUd^=9ZMg}=H#$d&#e>YFQCjcN+c4OlZc2t^eg zd!P9lG$|7XcIYe*OZP$qQ~;BUMh^83QpfV|1lz$+X(b&{RMB#wj+Uzcq+cMfhzM2{ zRcu>7FE+Gi6`|xnj^oFwiWy!H8?y2cR#UuKQo&ick71krAv9AMZKpVPU580E3{ZD1 z@nA-&_ab#?`HsK%yj6PJF6=@z)+&J(dC9R07l9wcCuo&SJwt{$CvGq)eU95l@TKYw z;QLvN#+qmBLiEmrlVpFQ8;5ZkZA53`xssD*I56ZP%$D)6FUGIJs>5otz3SWz!(q&paX&cFGOw4}q^CO}JV zewpyj_V6*<*|O@4ju~n%6P=P;cz)H3Wx6L1Kvjk&HoWMM-iyG5nnSy^D=Oy_! zaToxy&Ee6J0v8#*f5h!v|NZIO=bli5Adxt`!Fs~5F=GGO(1C?K=r;Cs2z zAw1lPD_asFS0|4vs|*%2QYNdF?|CBsBL_zW-)tTn^$o@hiZU44rE98A4y@3bUGGH$ z!@vjQxuMY^YJh^hWxHCIVcD4XXct;h5Zj$K72=mwj8lHQ7yhcUwt?DTKqktr>o z4p==88H%Po0JAkZT8673Kl&5`T8ZWA z?PmC)98M~iZdcBPQBw}UmJ9nay`M!+r<0e zx7`exJ~5#ZOBeKP()F5&88?KnQvy(Xki(> zJrqG#%a$AUovnz_M2Db5*Sc=}(Hnv-DdjqXeQpAZhi*j(Q_Gw?>_B! z%^+|dCN>wHlBE@_V?2p1WONHaqj&{Y1fHo9aaDFJ_W-4Ec`&8-K=gsNs2H;umdwNV z{u$nM25qSm9IK|H>T{8Qj%km;soTFXg~};{syl{}iq!ovRrhqo&|8+qA_%Gbn{5cD zKDTsdV%1F?zHY^k25WG)V4d~W1AH}9`Ese}PCgHFo)2@nG$6Ie(E@kJuqLrXp$&To z!l~E?3J?3C980p_SNlM*QuIpfK2WYo`k#59t04*Yfy!HSLYZhEXDFu&XHCHz2sM1=kFklsJ>@mKSm13(7as)Ihu8=_lTuxex)Q zTTFqQ(M6AV0aMIyy$`XN!>OFIqGA~q4g4GVGQ4l{xELHb2iNu1GeCn9uiC|ZSxZqm zDSbNSap}>_OZPvShgQ%CW9Xg{C_iji>S;_xday{1jiXpge-sZ`gq8;^HP_|AVp30P znYxQZTH*wx#N|R!gMJb}X1-Ep!UkLGM7q>rVP-pTwW--zPJx16xY1Lv8Bv(tv^R z!Etadd?M%UKRY&c45BmMmS!?^Bd zV9S%sh3h+XNXqK)4{LrDJvsJ1y=|L+*!qM8dXy31_tTsmb!#!uMgKil_Brnm3+ z`QJ=$*_j$Vxaw&%k=kvjM`ZV?j}c+JXwYoT%=!p1S_4P~w$t3NGIPuGRCB>SY6lax zOje|?`V-k3hX}hlg}X=5&bVz>Wpph8@!MH-m*tk$E2E`rvpTRwi5$MfZ-X$tnEa_z z8!7dYza72v7ysVLpUPSq_rM}YbR^a0vz?zkc7AA3rESR#zP{>haA70pJwsFdt-nF? zp^PU$>^G&tE;gqG%*J8ZRD*c}t9-bSke+(~s`k+vEUhR|yqG1H)1 za9;07c+-2|$8p2iFGPK3<%sU~9tgg)>bN;&m~+7Xvg01O@xO28v0*7a%3cEG)T7eS zM|7Z(SEQ}_KK-rXJ2fRWgoFl>(2aLMZr;5WW;GI`Qa+U?_7p4>syX$K-eCHXkw0A~*>hG8l|%7N&RgWAqS4VC5w4=@>|tLj zEX)^RUee6O6o(o`@MClsOe?>~VQdh?xEIMk{AqEs>&Ac*zK?K#`o?WkQ|(k77)!xB z6}z^2&_td=(VOk=CUG8chWS!fhvn7SsrphB(qYT1v1^MzJ?%m9k%1?R<;e&ymY4q^ zURj@o*NPL?XQhuS*Pr3|n_lu@y7z#?rc{;XUT3*R+94<(69xhbCLi&9jP}%uiokLY z*2b95_V5AuvrqnX$e-QvXFLCJIp=5iYqn$Vx_iK?O3X0wvpM01%(MqpU*N$9IJJkP zC%jMfK0C~k2gQclIRI-=9?Wgp6dgi=fpD<$p;f=(4u^Y21Yd8yLWKvbTrqSx4D}9(v;K_F`5P3vLIHIn*(RAeD#lbvioYz#qK~JvMUR{HT9e zlqI1&#^}H_>>I3T%Wp_IPpSoDs6*vb2K_~MO64*MDgO*zS}zw$)P~!I63&o*Vkn>)Gmn3uU(MYRG&G@sH#AsmamNu^_1&4OBo zS*I!!WTO@5teS?p#dWu5F0RYGvhjvY2E<1Rsxfn7=BSa^2QwGcBR#iAmew>_6a$?w z?}t_81i-UNXN;nJQ)Bh6bcX$L@NiW3Yo6kvV@^&GO|aJTQ=dycJwy zW(<-2W(4Upi_x?Q<+&(xS){Qkb6zdun>}ho=E#vFGsld(uF623Yv(zMnip9pl^CBy zH|0RXm45YdxgAcgx4L?)G~9G!=I9`bwJ9PsP?I^oe)-CQ#)8`AO^Z|*y1)|f8H?*y zprRIlWodmw42xYRDga9c`>kX}*-t(9Vn!WhE~;sim{B3j!m|1m5SoETFH$Eb<5?Gy zoqmL=slGn5aaqmMrIanUk(fuR4_zXSk!6|n3p4L(YRqh0R3BNofOR^0q-rE8J7Y#< zjvWC3v19F>wBB+~sp+Q-ke)_cc%(Ob)_4|{=hZurkj0z!KZdWy8FTUY3w3z`5ht6-V3y=66w&M-WuV1!&Y4n>@}#sl-X3o{oOn)40~KX20M!u%4L<1Wl0U^v&|aPdpanJ&yV z!0^;QhvpVw*hM**dw{vkh4~>cce^k=b#T24^Cw`w?!u%XNV<$WA&&s~oC`xUd7le& zCos&3!}T!06E4hiz|bw-p*akY=g>NsGf>T=T$rnYndrh415@I{ECptc3-c9VmfM(- zO|^G74P8cIP;%t;pbuA4d(MCpCqy>2tQL^wG+bT}WeXWlKcB+IhQkoNo}suS8so*k z{{1N(PE1^|4?y!Z+*5Hq^0jv{b&=3MVb_9gK&Jb2CP=|4S4B4~KpC&w#)IPJ}s)9hS<7xQD>v^?X;S=YiG*us3_hb-tpxNXK=-j0d5ZdedB>Xub*AU|g33%BtdNG8D~Ai0g7d zCm#F3jCdLv!d}mGot}s4ezYT=hNbKE97Yl@0`%h(0}`Z%Z@eB(HWJF7x~?QXoFR&a zvPznorY#%dX)abYkAa4#gftAEhz5rTSG(XFuV)O>d@0{-JP5JwO~W@*7ZU+RUf7#J z4l@-^|8jVlqS=o-W&S&JKfwX2z2jo(ex5vEp=f@MJ6qbmjlW$S9}Xqd>)DIo8N=^9 zr+*kvLkWd$LA|r)u5J0|u6P>ueqK)*)DTOvAo6{PNbfXXt!Tzlz2f)mBWHXTPcsZ} zyq;|+XL8S2Hu=Z#G{Y6mCCC&i!MJnYx5mcPd`Zz1AsqZSIz8W>8Bdd?Xr}A*416S< zpiW09ni-&Bdj2?Z@b>s{u2D44P)+0a+Fw4pFP>&3-grGXqYN3&-e*%!#M4}>XjUQ| zCTZQqk>PlnQHth|2!#2X-nkJFLyXnoqZQ2@{pQ(krWvDXa?vGFgP3P-EEO6& z7|$S;{P~Pb6^miKsxibeUc)%*!c;F@-mti?X(8XF*jxj3i4ZGX8F84QHpYtU`Z&zg zILx9rOk*6T*@dZwsho$Q4bx)SDQt7m@XaG}m>cSIV?NWEGi}T{G|lik%f^h*m^2%cr!kkdB~mrNW3I6= z?`X_bHs%wJ8DnDxvb(}>w2iq$V}{$9u^Mx&jVaccp*Ci=#$2f|)yry^&9@XAFar!? z8f%**GKC>{2e@=~Xl?uh9S+|PFk(l(*}!-`v}5`E%Rm1TB8B{Zskunw=0Z0NF4|fA zHC=S&7KiJPnu|1Uu5rM4J+wdh`_*mdwmV$s(Qv_!G;S_hpk5CxQvQ7DLmqIrrf4qG zxVf$e#_OSl!rx0@`Zf$2D_{3%F4DNU#slN^&|>HB&K)l!0E_E+%|#kF*92g^9*#Ts z`*8V!yBw}=%|#kF*A2jUJ+yxL`*6@X%N(vtX%6B?8aG!E7_WzT{^ne>1c|j$I8$?x z#?3`5)v2%Lp?`niaD7vAk;ct+qvEp4u)6I1uR2_>YcA5bxj4z>l*ag{zWRp4b@rKf zi63d)T$6zDdT7J*H@ST7l@8Z<%|#kFR|pud2c+uvho$BWhiirA3gMlbD+d^iA{CEe z{9^3*3Ww|Gnu|1Uu3W`M%b&l^$8#}0wMzaUnu|1Ut~_A89*#HpyYSh4XlfSMI4v@y zadYJZVx6(}x_dieXvZ95h@T)Q+E zY1~{08YyHO=Wpe?&z|mZd3AP4%(*YS>TsvV0KstPH8v9B z?^ax1Pt0%;&sM#^qPa*TxMS{cVrJuK_Y=-Z%|#k_F6OwnZhiIWd@Cl5RCV!_#?6JS z#-#bD7uW1?xX#yHq;Yf2b#WbT{qrXd*HxN}G;XeH7uSu~EPTe{x=wSE#?5t`i)+Qx ze~mg^1)7UAZmt@|Wm$o<{`Ks04%bZ0MH)BPJQvsHU30H@xau?)Y1~{WXq2H9SIXa3 z#^{#&H5X~zTnk)W2mhGS<;3+}%|#kFSFMYyqI1!k4%ai9i!^Sog)Xj(HnqIuaP8Mz zq;YfI?&4az@68`LT<>Tu(zv-6xwxkM?cog$*JqlGG;XfNF0KK4f3n5lIzNDy_>soV zwFDTa#cjzsw8G&Uskunw=7K7TsjvBWJ@R9R>n6=b8aLNcS6pwsQH`!iS~B#P<|2)o zYnkG*wEAhkc?*V>#kEj#k;ctc=i)kbWZa7mS5$M6#?4jl;`)!Gt9ChDPiZdFxVe_Q zxPEx3VWh+LmgXYO0As*;SUz3eP(Oca&9d6iq|uWmVXCQuz7T~CH7iSsL!k+w3H?xv zx%=~J#wJ0-aAqhEgG4bZ=ZxINbu|quOX}}RL=l^6hLx}ULOzd@DeF7d*f2@?`C;a+ ztf*PGobDg}#q3bcsIOT3<=Xyfi|d+_33Pg4?u>fYSwT%>Q-2{ULMh9>NTs;#yd+WN zGwS;f(JIP{W%cz>?f0A64H;wKAR4P+L=4 zv%LR6rrXX+{m~WH*3~xD^qXoOTfb@6G@qaJ{u{T{d4K86qjOFFfhdyCQzMGV(IeH> z)l2K4q^cX67A&r>mg)QI`sMWXYBZ{=7cW~5lIoiI4NcXH>*rN3jMU9{(82__jAiw8 z)hn#Yf6awZ5wu0Tu%Wir;Ou*4UE`vfhUKL-jd!4R8`TSxezC;91kO*8Mx$Dsr0SP0 zhQ|~rIK{7W3a222D6DOowRl0(BI}{3cJb|tnyjaM zdd}DnmV+GfkGQ~D0k1Y|;lP3!;PRyw#mx{po5T@7g;IS$FC5cXT(>;ZR8ZfrtVYs7 z+zfaGSYh@~e?A>jR5DcV(WZ)*)!Z(5M{4k#2mct9Mje8nt4w`kEs*8(4N`p5=^It+ z3O294ZbfZF(~SD@60-eR){s3$p;YP}$ZqbvQL)dxGOL2n?ad)8DRy9$rZ@yexfcxu z*Fj0g>V9@Jks_XlG}2kc^Ges`#xsOO^u+h3ce*4e3QR?rQMV2?({SHQ&&J0&*+h1WP~96S&wjnfXBlZNKxgly81 zP*K5@oRY%)Vv>T$QkIj(X?NmDeP5-L-%bHB1_} z2*9MF`DJljMWHF-{L+$=@{sr;GY-oUS+SIYZE76b)KJ;f{G!~P+``!GOd48LGJ4Xe zF_T7(oiu9vq*0@?e&A$Jf4NEejP)&dVt; zEG=QAC_Yt&^tyD1JSCJrH77SbCBG~-aaLK6V|k2@Pf-4pP+m#6q$CGrp&eT%jayvD z$xSY9$nvh_We-t+?ExqGA+GX>7bKl;lceYN)WVU`kOzu~n$HoAV@< zXq8=*XIxp9h02Sj7Ut(cicm1B&QUt?1ydR-m@+kYYH>knNGXP1`RmPlovT>$3PQ!@ zQwqvT3*wVEYSK9Ec^#9|@pj4N6^8P|`DFz;%~I46x&|Hi?`d(zN?sjlRghw>+v<%ElJ@-o!N_a|$ZsC2AV%VQ&V z^XG?AqJ`yU`T2>Xx0;euP^$H-raamy+T2h$cWOayPF^^qJezfdiDWD{94ag>E-Nh0 z35WU(-Bs#kp_1a_oN!5gK}fr>qi$(tyQp$=LQ~80i^>X7EV1d(GU3vWIiZrWva+dD z@|CRX1Y2!8mNI{8sJN^+Tv|{xHM#c8uLhn^2tk&Y<%P>baJ@&1T!^lu2{{$-due&2CynjZ15F8) z6%>>e6`-N2!ch@G^-UUw?qJe5)TZPyUV%YV7v`2snVbVnk*w~mvx_P>KU9)CxuBq+ zSVfF#Le{WWcziY*JF zRhLW-ql@B3fH*RY^A=5oTR zy)O0_gI_pq{+RLB&B5yg$Azf_in^z!EsE|Luahns>3v|8-2L@)x_AgU{FEdg?SnF~5Q7 zpmR2K@XbTG{?dysWTfZDy0(z+Ob_4-PR`JQy^aQy-_*XdP}Gw`g!>qXZJ{1(uhM*{qqjzn}5kf3Rx z*)UL%8C-2lME5xGV+UbN1TOy4a3!MSCXyL=x$#UzW}M##-6GH}ItyEb{6cp@A9Tw> z_Y4Z>D!n|{7u`Par(qGKQ!j)t`b6oQituj5LWbprg3|CJ8#q%fTe*D8GM8KnK-*ZGN~Q zr?O;5NpbECmzP$|%$q*rayPQ91OwjEaK+`BT>F0?mx-&?5Vykc4RdDIH{3C&bY*7Y z;-<{J`USOfYL?a1End1fGN-7px-4&cbw1`T=PZR4RA0Ave$AYQ+NHHMjkR+cYZ^F- zGqQf(61c)mJexaBPB&OLPh)l6`dhkqenWj@{lccqVbh0aa^7Uw;xA*MjHs3^U%a%o z!7wDC3T&8+g>x}MyP)=N1SjuFU(--qQhPTNu@q>HudKsVdG5*_@w60LnQ6_BEN`@4 z2p*GNwGEBfpcuLH0anMonx;q(in?3ryJ_v&QzSg zliJ!78D<^+k}(S@?0rfL&-uj1%=xEc=8^$jq?l!Ps=xToInJ}ech|SC9<~G@8BoY* zY4b5>6zRYh)gM#HDdx807-uOA)V@rjq8 zTfEe}cba;+Bo*mY5I**e^XKuY?$tr$#$t|^p3wQh$p(9Ha1B2FhOcX%?Hh{B;rIi| zHS!k-ez>aLY}bbLGYthzo?#@y8LsRN_;BD6#m^3+~q|=znk@ub}sEmugp4JoNi`HnN{bp`o%J+f_9vpigwnJD+SR*%pJNzPQ<(eR-qnNl@NJb2KbScdQp zf$+YC0L=Ee)!BcTZHEg}*Z3-~6ypNib8!WXt8kanqg8(nt`wzLX!E8h0hg9rglCpz zK#9LVEYbCft{M01)Y~@P!wPy7ccD||!&5)Mn1;d!IniXkWR=|D3YBej>q6KDny+Y| z*;=P*rBz`bSMP(z%@_S8FZoM8orP1}6>14jAyN=d=fUA~Cj{!YNA?P)HIIlp#bpiwMzBNEZ&zx^Ri7CvqG*MFkuC7H83(DhNi7 zt@>Ux+$|Lt4X5fx#-mhH^|^gc3mA;-QVEGxrE*Cz9IYC{v(#ZRAfcNI2>lA^DsY!N zyaSM^F}@M#en9280%`-h$i%npw~qr7ef?WNBJFztN&9#c&`r1k#!(yU0VMT*1{9g- z@Jj%N6y4P}ByHyZflT;I-u9O?r_I7g$5qWZB7vh}wLEl3!^fqI!8dU}`e$4(1C1vl z*0Osj+PhMUcR^aLHXjWiE2n%o5-|jy-!oQ~M#EivaY_hrXiiIWS5M@+B_1FpZl@u~ z_fUs>B8M!ki!KT>bYxXqj0~OnTp6N7B_l&Zm#hp?SFq~~7@Khy8F~niNZ2+&(q--h zGyzw@cpZ0i!6z&rEGcP#8v>bo$twM11NS7cI?c#^?0micUqKpo&@2o0^^MJbQSo`mYe( z5<}yc4A9DI5mPa<9MYtu(y8W59B36OSppUd2N#Q1jR3+NdZ0O9}(6eZ2=p~ziBRSDH)J*5% z5~<>lLNwDXKmk?9LO0E(n+a&8qMMDo(A5JHI=+$cRs-6EE5&HRUFg08NTlj%Kq5iE z10*uH3(!|^r5Jy}ow_h!{5S5xK}i#ik8EfRB#4%1z?cq*=?SP~G6bh|R0ex<^h1ti zov0t8G-)el<}7VlQ?p2ILbK>z2R0PGiv%0$7JL}N(HO94yUMlp;Ax&+(_odILZ5?U zrd3s`P9`#BiKoJ<94HLczeo%a0VI>=)KBaR!$D)HU2Vd$MN0{@#yHZI8e5^DD{z-S z!m-fV0;OE32c!&Z0ZAF&3FsDF0pkJOZ&J|1xJ$eJ5g^h1&jJeJ(w2M%zC_)e-rCcY z(tbLy_~z2*8?EY)%3ak?qrzdF?J49&Yrn!W58h7HYK65zi#tmBgjVZS-H8Vey0>l% zr>SCZOUZsqwJzxR302*z=f{jCOw~(3ai>`g6P8y?^KqkjtWxtT04Q;OUfLRC9P5cd z-%Hp^>07mznFnp&y$UB(rq4#{oQV%nwVe*LMzzOiI8Aau9inlUAp26E!vL{8rWn`Y zzDhx3aF-UtIug41fP`)lAgT9dHXSWEsbjV=(bufS3Ah5rR@_Av_5mtXxIf}9`ucr9 zA`59~MWUrI03@=&!#PA>D=nSYax4S&c9m6c7nCzOZi84_6Yuz%1kS;1r5@0g*nvW5 zD^0C1Z%Laut*uJ8D`IhCK29t)j~~RbypSsYrhkD8-NGz<=Q(;1u>J@U4vh?4iX+y| z=B_M!Z;hXbGC#uiVz!tcBd+z-Vf^d`zE*LnrP~w9?YS;GWoB4IjC6W!5Ax)mfTu_A%>lynj!@150rzzDOWTv!v+s;BN8D&*B;>`LW z>*JO8<1{^f_daqW2j8c`H<%@z_%ffrwGuI*-S88t>MH>_2shoz^Jac_xf%^bMtY8( z&OqW*aiypOA!-zKIquTxLxA#e1=J=Nk%QmkxkTY!!(C+P2p|cC+H?V~6yqPbODLzK zriDXk&M!VE@qcRZquUf?4ku@ZPoa(`L{e8@L(52;Wb81zWpKa5plVf>fT7Y*&SSiW zW4{xc+-Il^UV^(6n4=~`z)6v?n-Myy$=h)yHo2SdMw-w@KsmSq#y4@7#`FU~(p*#{ zp^({Q{__&F5cW38exdptYPF^FWn{Prff*`?=xyeb6gO!;v@oQoEZfvPZVx_SQ<{4~ zng({s94Gb%;Yv}*>nvB$rMOFdUk6C&sOyD}Qq+hmMfJZzM{Od~MTsfG6)=|K&H@Xl zkFwhREoT;J>7*;QDk(KndzSlJUKlVckT@XBIgz62AfZ<`XGCIaDVk&|M#pp4}7aGZ9^KA{S9dsIQX-W z6)D>cKm%3AF2;R{f|yy+?-V4Vn*vDa$^lWcqbP6}y2cuuZ-~WqoK7caP-<6;8x(SJ z-8IXX*37Rp>Oh9sRu?7Qc}Mp~jBz7sdJ)w0elJJ$S#dYkxY)01tdY|nt@l^OCt^Vj z+$iJ-M2kv?qE6Jia)EIbPCrCaIj0<(&pT>YCcus`{?AUayA}oN{>3hO4!|pKQm5E) z$& zD*oMjFDeHKbDhkSs%W@udp4lmlb--nZyLtn^*oL{>tR#JfJN~%Y<6DHc(9%iXz0kS zVevFnk2nPpG#3CG8BG0hJdLVp50`04bI~o|y&|6GOcf66fY6t_E_*tjhRVb1;Xs)a zdXG=ND?Ofurh(VPrCG+h{naKE6&_sW12)k78h6H(^LqD?cp8?R*VBSK!_B8__o zB~3Z!T$hpe9K6TjD$`t~adT0hc|8n`zd3ijjB%nRTK8%$(zv;(y_^)jcmF=jDp*`k zYA({axoGG(T%&*ZGjw$p*BhFPG;XfJii?_xzqyzA9&@;SRQ>po#?5shFwR*Jt-;z( zhijzfB8{8tA{WRYr_#bZRcrxVdQ3JEtF1|Kk@J`&s!)Wk-r1Y1~|yz<52> z`usic_T1k%T;nuXCf>NYE(6Bv(T&!4{7V;L>|n)ptL7q&o9lALMVaC6mJ7%K+2LBD zxk%&Yx&jzS=AT{rz0D5SPc#>4++0HymzAdfx?}VNhwDwvMH->_P-B45m=voaD@;0` z-20Km2Z4SLi8dNKZ?)$`LLz17x?Ld>(kT~)7}totiDLa5=tR*srQ747FWSW36n%#p z8$W#|`lfWp-#=|{4~)J;?d_A%H>KmHAvAE$O=j<=dy{6PKB2L?vCe{)RxhZl!4AT_ z`Up2;S&zjtYnDdf1gxH!TWi;)jj(rI+8BhAUk7hn8{u-@Vip$|3*qEY2=MGCm|VZO&LXbB-t%6sm4lED zoUr8}gsrn2{J9&26;4bOuu!oAr@V%Am~QcsH?bub;~JznVnbpDSuwaniha{tELrBL ze5ZEfBk3)lRwRxzy7uoOZr8Kg&$qOC5t1jRJ)^#Iab44OV~y&C5P_-K@LIx;Of-}? zU@I8{SA{vX_AVn-T@6>M2zRPg&tFtK{|;_C*z!~4Bsp$7#hCnZYziq2 ztN05RxGTLVR9IeERGM3sr&4E65%m)(L~CkscyejklyJzNJnDyjba7E`QE}lEl$PG> zf)2rHF{-V=b>G^l0q^|l5_{*5Q7-uQ&GOFA9)JD#>lK#X`He;wyz`%#XBgk}(Bz2s z&aVP4jU(>ZUmxE2i+j-}^3MMU>>T@KEFETF-ueH;2;yHHMc~KeDKBc-6;Pm%xY1PS zOs=2f2K-2u$UC3b>R`}Z8bjAtc*8+6A%-qdc>E|p9%wdm41pg_xJ2II#D9bl!$q|J z@uQj77u~g>srVc^PE6bmn)_+v<99W#MB#l8_%zt&Kc#(+AE#Ur(LIdhbvKdcL09?G{Iq{lFuq6q8p8O%Ruv8P1jd=oA6=}Xl7iaf-|P$PonVt2l(}) z;EB$F@#DZO5#2iAKLyR2F{GlWZDP9L0RKE_)^L6czrMnI4dr*_W-B@rF-k%1x1w{h{u3C%=wQ-MDTn*19`)pxzI z*p`CkJD)?x;&>i3-Je7E6VPR1f?zK${`!)8`jeGRG>pm{h3*{uNtBNa(4BD;+64xd z{88T|qKl$k?f}iyTt(KWJpT}{zm$g$P~hUPuloHF-p$WPeT5ZSpYi?@@%{ufRYgL_ za!QoG$AF(b8M+b|e;jBhqB{%uy$g#!tr+U_*H^i$1l@#E?08~D(Aos0!lBLjq|O$)3;Uq^Bk*Z+4C6gq{Mqu-YgZ5Rw}G8&%rDU{9O~KcBtge? z|1?Ru-zPyw`FJG>y0by|b`o^V@9`w)yrA>W#VzKSs9ac|DM`?=ePty5e8r$9()f2|Bj7e4i1 ziy;D-h)&g85_C*oI0-uH`&Lrq4r)!g>`)U$& zqY>U?Nzk!B`tKy@ST6ref{x+6p9CG-$Dnz*#rzW0@1=NuX%ciCKHZcA9qpG$5_C-8 z-AT|<{x&8__njo@*pB`yjxH3!l#pxJZzQsK!N{eH=k?n6+Xwpp#UA0&|JU{i$E*ri zduJ=K9eF+$11ci(WbWFK!) zYl#s0S(p&F!c(x#5c6I!$a4-pQ;ek+{BEypni^R)uNDWjmDe;as>3C5E7ioGu7uPLrT8vZ5zKnBYV(G8}d_kjHcu;fy zu6I0lFaDji>|@8rbsvjQ9SExPZm$8!bNKEiltm8rjoWFHMHCbw)^Myarq`-@e2vs; z#jf)P9f!S?#jg`yC3({V<=y; zX@uUPd_Yku*KF=b{z98t%sd}<$IYAtx7&552d?zXd*ETeel0-m=Qw%ynZZV1bE=t_ zX8N`sz07tuSN`(oSQu8@pG2{1d6gtx@WSZ}&H&J-X+ z4r7`Z>O9p7~=G{JP zuSYs|``Ejzu~!gPRv1K%H=e}}0O3=5XOF4o6PJLx=QXo?iEoJqTN`^`14COOH=^Dc z+6z0FqEX0wkfF z0wkfF4L%8FEFj^y5s+}?0+RF<0uqjDn~sxTLRSY!LTS?Mep^bwNOVS(PQJJmHh#qh=7kO%~t1$4ZdQ@8ePSv|~#NWa$P= zelAPU7TjCbv$wmSafAc5Ua$@g^SEludS@iZy@uI6v+cJ}eFnjP#e50-5Tes;|N6a9 z2RHhVm=)t^^}K?8J~|El%^hG&B*&Ca*Y^1(vKzugEBCcMy$#V|*F?4}v^A?^8ly@j zG(ucJ(bng{j4iyZdjp#~KkbR!9BpNYk~LLevw99dIax(@Wl~9$V-H-Z){#|6WY}Xq z&wuGU#%r8Z$w-e(h_-eiYP(!l`w(yNrd4NHM>zO|Ko|Q|>=gC2`F`C~0KCeG9d_gi zQx(5PSlK`^g2mjE{Rb3<)E%}naYf=0R7i@NLlyz%?A{1mDaMy@e?Yyx7LW+=L_qs+ z1(aL5K(q0@N8#q-zD03RE}m7mI^4g4E5&#ecZuV_07)Fb1jL4yqB=f_gVG=&v-x}# zS3os%;iaMwUMh+Q6|V<(;ibwD-YWp@1x1Q+9Uy6@K|qogstgHl8XyU8CZLCLr5Lku zm+LA?EN!6*85=^MC^CfET7aV7v?*m0rL&X4Cx}&Hy^SkHZ8;K-rFfQ#X#^w{y&llhxB{xL zkhfAmEyvgiCb`{Ea>G`ly8cY74gV=Y0dZp=k9Dx@7;FbURgP_hx|Gsz>c?f@N0N+| z?$g#>F>4V)b+ZUyhIq|tANCfH(saHxmpEhzEP^z2%W4PGOl%&N?QGcl7p>^Yeu4JO zcJl*&SqDy03GVfmypLS_%w1V~qBr+={}_DJU;3uG3;QLr_Jm?{8T@d~3K$mtOG7ZC z99t)xAiYP&C_C>i+B=0w+B|G5{bN`42-T_Z(%xg}DeBb2e<kZ55QJLM9Ma zWQexVRp(_^rdGH4zJd-6o9(ev(JV--ZX2@Rem)cVkP@bXp=FVxPPma09>HAV3aE{k zLRV?i%>i@*SBfzYccEJiNa$FD5+2K0nVrV>Y&zCQ2d;qXJ4BD$`q|b!=O@}xsE?z7 zy5->#ms%zFUSe7?QY@tlU5x6rwbZmkJSZjTD9a#7oe4W)v}HD0rqr4X`rx!G*Je;# zNhv#0D(3?_2Um(RIw{pDMkb!6^u_}cx?Dg)R|rUIqr|401?XPITLowbF4-R{yesf5 zy!Qa2`JQ5|1tf8>-EPGdFusF(8?F@NKXDgcz7bw_4(k*zYe#tZ0}>9@Rqvx{5*A6d zt}Xn%9GZg*oBv<(!R_tZQ6iRD+M+k z+!l<>6kWMZx5lPp-AH(w01Z`iU$g0`e{a*@5B!q34ClJJJv0l=%2*J2}ax~tK9@cf5CnuE~v)wJ^D$q*{5y{WQ zvmL(H(f08o3FQur*lLQivU?`1_N~66!ep`yXuzJa+c0V>U}d)Z7_LzmT&W_ zJl<|kxW|ZGZRxzklQl52FqWjT#StWH6QjlUaJK?@Vqx}MZ4ouHt2$;Dp&RMqjM2r& zIdo&4nipYmFzUqI$QY1X$}GLDfTrPS9`>YyWsh?sNl#moI4Q@EW@Mi{8fZ@$10r3x z?FDK^1mj}_-TD^hp>Ea_LTL{jwN?K`iP|S-)Xa{fr)9r@Q(nwBq7@!}zS{P|-m=qprvmq`*fIHR-30eYHN#NB4u^-O7kvX@cI}v z5e@56t*JCcoA2jP6Lx8ts?f7vZmaBm_XD&Tv$DJOWq<4aNO3gJ6AY)VUX3`d67X-{ z51K^rzWWQjKofH)AM1;9J)^1i1utEdrmf#n9GB*kNkJ=-4kD4uSYk0ntY;7&hQWpE zHqqe1sd+d$FId&(-xxiGd6k#_n|_d7VV^vDb}w-?kH-q>^n{6<7@Ngw6Os%T5plXZ zj8@vlJ`^jvC`WsSllFo11=LvA;7Tzr!(Fr%b+>3OYKE`k3K$KzZ^4yf+-pN$2PAg) zcK}IvY`nCPQq=h26$SkqcM0$BfP{|Lr1W2>NCVMLF`T)H8}KZ2d4R4ag;4}Z(pL&d z!kY)^hj@$AQvp4!pnCubFQ+cqVWg-ri|}p+PL%%l0ZAYEGeFWu?gS(``X?X>g)B>3}3QZmHHO1thuTrfQv1K$1&tqLy54 z1thurH6Tgpc0f``F9VYB4gr$1{0WeR_YNRQGj}2i-5@|hmkvnMd>$a7%LXKAo&-qJ zd>bI)T>?mW>j6m|O@M^A#ioneblmAyxqJjj;y49J z%H?eIcRy5ho(V`ez63~8buA#_7z;>Jm1onH+H}(aNvdYqbc+E=s#XJ%az+ns9kF7o zvy6&Gh~I4(smTiKTr_=zlA47@E4J<4!3ic;^g*?nl{U{kzSUJ~d1;$WUfD`4;co8o&+RCP9s+Y0YzRRW0cjY_x3z`zsFc{ z+V98Ub&Q46xx_cCtt!5%*&z8eyt9G>o&0X!35UlmI=P3&Z?`Xm? z<#N=RKp{MfP!t1_+;RHld|WbXCyK8M&r%A=iDYEWm6o}6K_c@AV+%FFPy=IYaI)rD zAEf&5S88^2Bde!ktmJfbHze#RhDt~0%$8%I+=XPK=ardq_H!-&^hBPT4cUkr>QFjF zGG0^AWw<+%AtjLuoX}B5-cWQL_zK-EfJB0p0TPb80EuL*0wj(0UO*xl9R7%8d>4={ z8DG3Hnjc1|dKUUG&Br8`oLn?3>;3GW?3Y_lu0A*FyD)d{_<_+fk3am9`El^IRe!ha zNRA~TQ1PxfP5VG$4>v$NP9&_>>Ow4#Dl1cyO-N;h{EuzE9egOw);#jw* zSsDn@$l8Tz+J#%zP7Dr=`ht-Odtl`CtWI0ID%f*oc69a7L`xQh(k4oGB(k|Q#-4v=tg2>mv$6m^uQa6FD@ksRKo z?d}33yu1tVe*^k6t`y@<+=Z8eb>Ynh^f2%Nquj>b21vrY9gvJ7mjjZJzYIu1UIXZ_ zDr8Q{NXS0`B;h>)NO*q-hz&Bucpebbt&WkLM)lDiK9xD}3{F}*Jy3#4Yjr$5)QCDv z@Fiziv0`S{-t4z9c--Fl!fG0o7j6iQU;9aBQ`Xu~&S<)7?I#19E@SjY-qFD=pLrqy z{dyo@pN7|w0of-*!5yo1Yr*CS6v5ahj$N3bQRqYF=2{0n{TF4kjM%tx5MZD?{S8yjsbNmSLXjhTypB%Q3YL&`+5as;U2{$Yl$K#c9-G^L&A9!%?457 zob&n}u7EmkR%)#l&%(h~icfH*81=Xd2XfbI7V3hw()2`g_?&yfadI=wJ8_gu{HS)y5Sr3#vcnFO5)sE?rin>j(;7EV}NY6|!6(qNIVxk!p> zLdz$fCOcWPuv!A{gsUa+_~{wDzKgFR%qVqw0IkPF;EhC`w&tRKc-=FE?Cgi)N>O*o z5obN6#TEgQ+PcN2yA9AsxKfOTxC`B#fJ8A<`3uK407=N-1|;K3Y6{^%{VGKY4QeZ` zgrB8QI!T(1(xPD+m9|hMJSI`pZ4u|av8==SI97v9Ut9iCn7+0HiJ!iPz*8kUGuWs4 znZZ_eJZ7*jwn{%?<42H~p)J5^up8~^Yi8&yBuxq|1JH0>vg9Ze*py=tt{j_=O<3s4 z0kKb%qZWnEZRJY^uqvbi9swj3@C=|1Tmj?vxJ%`|21wF!7?9Y3>?vi0@E#yr&^d8D z3--{uH-I&pF~R3wx1V64uY!hcXLF6&jpc`|PjS>VYRn!mB{l1V)70Igr8b|M^#L9R z@z&Y+Mg=CNSKkuc)m)j?iD;6ELCr5(Q+Kg3#LO=usFtHn3|5U^T;1O)q&^(FYS(or z04cu^ASu5vASu7efTaB90Fts_1W3yMAwa^*Mk2gF0wlao01{p*Z{ghwNO;*v3GZis z*hQrnr$H{RRAG7HDNmjsjfJM>`LPFXzy808KUKwl?opMFrqd94 zQ;Irs`#bP8jTZE@d5{#wPfg{I(r{+GIe9mdoN7CHPTcx=zNOvpE$uN&hrrYXzja9L zUi0zcEQN|jIK5_m~8pJs+L+D6$1qbj(+vEcs9 zwEH*C!8)At_C_R{eNR6%JXe<7m4Z$OwFvEnfCk}`FYHJkM8zdSI~UM*a0S%4{lf78 zo`qv0Af647qKtOo_!V&9QyhQC{kIAl4;sNO10=XTfF!&FfJ9aPHy}}!ZvqlknE~+@ z4(<{bj>Ui^1$BUUh-Zq?2*_?|Nn0;7o%M8@@OJ-yegb<3N>6D%ZMM%eyRF$4e%!`d z!&q}cqM-8_={?HfUe^GYUltL0dP;rIFE?f$4 zp~{X^c$^{Ii7Q~_;4X#7Za_H707>D^03-!Kn@S3=9*`8?DnP=!4v_Hj4c&!B?$_ff z#drjF4kYx~4!-a=kNDvLc1T*6L*L;9`X<{ph4uQT6Lc9nxAyP}{;?Zd zd-yoZi3-t#KLYz{PS!-jN8I^K$JzV-R%$eufA@ZjzajtTxA}DjH{OEcaut874n=j@-NxLApWhDZV&qs|1J?S&p0@EWa z8kBBjuAz%oPOegH_~*a}GEpamvzaNcT` zqU!)8yoUh^9jjgFJ_JO=BE{$iBy?xtS*A}i0SU)&K*BK+5alGr;7pfr+yZEe!mR>S zg)7Cl4|hr5e*u!|h#i2wtKQOr5{|zD+Msy7kmH8|!8H(&U(sC#NJ7a1B%#~{=s`ut zWim-$4IoM1LO}BsFT20>D&)HWMHR<=fP~{KfP~{gK%AjVF}@2(IDQ03IKGJ9hnvMr zb2&dfU=J#)6Zj-RO{+8Y@4h^Eu=$b-bI60mv!W9p#KY;)yL?%DKm3oLA_zEq1f6kn z!j%BL@8x*LDIzNQ-ZKnRPZRJ)a-VC{vB&(k;$V*{boT-hIunqDw*`=)N{M4Op+nhx zQ8yioG~w~J{t1K;Eb#fGKLh}?KOIJbz3`Rr168yP?BNWIetb3({*<43n))9t%qHJ# zn=zW!iU{c)gz0kAyXXG1VXnPkhF}0 zfMnct43O}C0w@z#iqV6+)SwSB+2-IEUL!#jD!;v1<~=^;yN5CEnv`fE{Pxm=?W?p` z?dSSzYlh>iZ8zK`mkxB1`^@fzTQCl}fIIBY!4hcC*sb=f&d(c;sI6`gI=i9XoTyfh z=Au`&Nya54xl}n4x~F022VQ!L9=L@*_5Gu+f$wo69*Uu!>$TIgj+)OjZJt%4`87!l8r@1)ZXVPdN7C?Qd}f47WImn6UUoOejuL{nSbl@<2dB z$Npc$BmhY0XoZNFi~%GfOKansDmG5s>h7rjKB3pQ2vwK#ITN??(Lzi$p(00Gb8q;R z=_173%e6z1Y6pG}LBwi}mf|zgr>4>LPbE(mZ!nOt5|oD3PHlNz+XJJjuJuncV~7x)sH31o86o%zN=SGI&15E% z_auQBP$7l@i9{j6WP&e(V8k+v0b6aWeP6GA+4iT_YHe#<0+xqb1+f|*wWwShglZJ3 zQ7QbsZ|{9xb0#6Sy}kF3dtgr1S?61O@3S9k?|shNYwJ@2ZjClyB+Aq|qYychAz$dq z;uwo-na%m2WO0-kxGGQ=A*-z~bg6wLuHC@h4C-QmyA_lS?>K#YC-L)&FFoXY zwdV}pK2SRZk6o3-aRnOnm{_zq+fi(D(S&v+ff2nZ32=OeO<+F2$BP;I|P#lv8 zO@#P9*D@)*FcrjNo$`43&c~FB5J*E zxWxqalcWS(C+t!Rp5WQUH~0fZCRea{)?a}<#lk0OGtU0fk>u3amdve~^SNVBXJQkl z;IY^tS2wJS@TxSo=hiG?4q<)cxC0{|h|Mv-8)rVDr_!H9Ope zHz3iPBY4azz2RJzV0x>*`|FS)jRkU!<<|ClHnFB*DDawmB{?)RV{T%H?1uV39LEdI?7$|QntBA4nJ@rcdk1Dq^~H5B&_blhJ;&$ zk(8ePGZPhp)$GfIM9ap*#&`jK@r_Yd$U+0hCMa<=piUHx>?%+aw-S_G8GZ{W+1%~~ zCFfCWLX!6_P^Svn`wiYhpk!Kp14_oR1r)o|6tQMp#zA|P?||>sXmWWMC^Sn@Qub<4 zQkL^CF7Hawmf|dBZv-WAoEb_S7iw{^kfPm*v&0Sc)hB0*e-LTm?lm&x04N!95h$5@ zy0?`f8#6imHO;MqFFZnD!l|4w2ub+y4CDSMkai7!<*QBgk^-8WFFp+ofEOc60kiiN zoLMOQta&lR{vMG=KF3^0zB)}q*fJB&0L99cc_woKiK1b$ zyYZ7d(#bg1;#$VRmlX0%A*YI_zJFLq+>f(-Q)pH(7KW7N>xvc;$5v2M7KNnD`HZbl zx!pM~T)@z*#aw__H-C_2dveML<2>}(MuEROs0a!iE;|exu3K-!+RH&=kWJlny!W!b zOt-WSGuQtO9`e;j;??*S&JFbX0VSR)M}O7PVR|1wigtK-*71l+me6!ir{I?&_M2@N zxg5f^%;hT#9Q$yIYX!wdnxfrk;8?mcyssO${{SUx%MT3PPYoPr6*4@k8`@c?i1*Cv zag`$0dCOS}EpAxqUTrVVG7b*+r0i#)RtwoAoMoD+v}CP18x(6>iujE9J5XLRY?U>Q z!@z&=Ln12L@kV!I>}>f~G&j};&my8}&x;%jO2ErOe+C2b5R{*fh& z83TX(O-qnf;;*lM$&%(}B63XUeOhBvE3(ss>A^HIU~Nf*x+ycN{x~~OM(SH5C>Ofm zTGSF*>cjpEzWU}R_#3xXWn7W9HLR#_t%qN(_#G_cw$qF&lV$Zt-DSRJ-^IR3xjt;C z6JdcxS|n$lOym@NmkCx2 zypEyBROy2a+Ptfm{_tv9rgIxw+nQQXt(FXziD^a#i3-4YjDk|Ul@hH<4`eKJ1dZox z^Ia-JXlQM1Y4stvarzByc}r`9F9MfazU-^BC+qBUwed^lk6%(dQws?ZRk00u8LY1j zUbKcMg7C4JzY;fGTT&mf*M3{DD)r243J%8(v?_aUfKNAgCSy6tOwxRK5RozvZNs(m z93h{_MAv|e{{eJd;MOdms6wV>V?X;{9($4nirMV7B1p`x^wTD_jI zdf_~-VTmPWOPX5gNz4{?TqSI75izv+M2m6gjp06DxP4iqX$9hD0@{2xG>MkMP=$lK znW7jMT%_rdLA^v;T6}Qrb`6pyg_w_`4KC%bHrC`rS>ou=^Dk~$zT%RmC68V0PC9lB zFMu_FV?%x9lB}#RC24CU=MvQQ#gUbKE6lefcu8DK(suk~Tdi{c3LcN1wBa&I@$6P4 zM_XdVB@DW}>Pm7h$JGQIhf@x}jl*dIab`H2S}e42-o#bJ#!1E_viC8iXhe3GjZ+BD z12zsP89%pi)`Rnujq_`8_SrZG!Qp#MGcF%;HqL9{q#_0QBYybc z1Cq8QCTENr&u-%cz~R) RXor&A_p6F5t3oJYWk*f>4lthaGK0_PqZ=L;vm{@TU~ zfb*n{vmBfk4UTn-R0M~1k%BWGTRS!R@L{<-iE0;|L2D2OCLL#Dc(?`68V*A^UO2-9 z#u^R`+Q74hlPWOGsSHqOf4k^b8LJh;7p|@(-Um#3=D+@m3QWq1;k*0eVMYiH_fp|I zt$WtowAdLJ=Z3B%w#bw4``smG3Xq{qNM7u4dfjjVHGIQDcUA#;VL$Ki~& ztDG3l>|9B&;(R)Ozdi8bQ%($X&y_^mD9%+|ru%!G7|sK*bui8>-Ru7tu6JTi6&TK7 zSOU>SXCi3`)b?Db3Ctv%8BW(HCpS7VUV-60DSX-ehaWtAgA>E2aV7l;XFlPkiRVCP z#>d5{aV6c3Gi%BGCw_+kcRXgKz;F!Ba85t-&U>7gQ3CT4MEOPNymM#1?8KZYFmL0` zTC(HAi|=$|&Jq~Dyl2h+#gB{ccVfOEFibOR_=)`ai z;!4u<`JKYT1oiM7fyu#{;r#HF=O1^5Ge%$@#F;hn7uRMcC@-JD@C6uaz?Y7mi$C#c zK38Byfz8^M`{mD&4e^+<0>k}ISaJ=cdr%SLG2;a0KXGPx)!ubG8eBXkLtuV@GvoSO z^c-YEJZ8MWaE}u{|B0upIOxQjCom7-%odwc^`n=Z7`Ad(62H3f*++hT+Si z2n;P0nF~d&k&qK}vB0o>u{DnUO;Mo}bBVxQhV-yzpS1GPElvy`1Nrj?&Mb?v&0`uQ z1{d1bnM53J%_np%=D>=RVsQSbIK&~rI1V~EpE@|h*uc~wrB1hT>KfH%mcX27#5Fk% z)3&(2xlx3|X`T#cjt#?`3mu$gigSh`b+h7(G&pxF&Y1@1VZ|9`aQ>h;XBnK=73Xw= z)2leA8Jxc<&dCNRh3XH-c?Rb!#W~;LOjMjx4bCjZIosfrE6!+xvp{ji7@XybbB@7T zqd2D+oUbZQros8X;!H3&zg8Td!I3MlSda9w&^Ng~*WkRbq`U@aI6HqF7a5$h73V^O zGgWaeFgRt3GuGhLD$Y2A)1)}#4bCl!lVNZ+D9*(O=WB{H(cnC&IF}flUn!2q;OtPG zG=sBWaZWNgsq8Rtq#B%y6la9N2`Y|ea4H>~ItQo4!MWMNxx>NvvV-$I2j>w7=l2fI zOAb!2gY$O>$IEV59C~dz$HAH6-~=3;TE+PSa?B;dTVY^yjnwJje8a){nZaRt>XtVw zUrZn5wiNyW7*(uF+qluY**P=8(GUA}&{<%cn`3|6{4E48br$rlk|M?~#SsGfFBRnP z{`|^ErqoSJiWs|8wvb}az~jS^`#DqUdrFEJyA*p`bCdRm?)%CiQ)-WrBE~K?SxB)5 z=3(EyTXf9e5@VN|0*<*Y`FZa?jX|8A8{<`A#Mq_KSz7Y2=1^mkDOIJUh_Ope6H>Bv zVDbDd(>^q%U6!(pOPZRE>!@Ii#F@x*wFj_r)FFaD=A{^QXz0msrxf- z|B5NKQ%MnHmnsxedTwn0cJmpg)LTl57`s%FkW#m`J9|d#F{MVRra+8cs@NuV{Tp-M zHl?za6ft(G5+S9h@al8i82;;dbET3Z#x7NAlUkSC&|^w9iWs}pY;asj zs7B&&Y3b-k^tfJEQpDJ$=78f$^5M*5YiZ3kQ_8DU7cq9JYH&;qP}2YI?@XyGB}I%~ z>T)54hY`o4-W{mmdI~#~6ft(G8gNVv@R!R*-)lPm3TJUoB(RZC2% z`AUiyyVO-eO0S383LAc9N=20vF?Ol>LJCz@96!D8vHMM_UnwbK>{1KBF;m$1PUrKc z)Zdg8F?Ok1A*IJPZ0(Fcn^NaNd-EX1E_F3Ht|WbgS6a6b6+y2XbxMjDyHuT!8izBF zhgW}bu_?7dNfBe0S_qCSNtfEv{t~(!J+7TfiWs|8y^vCsK+FBkny;8r!&KoDW0zVa zq|U*a$G0bb^%YYpTS*aPm%?Kpg?gGMy}x>)Db=c^h_Oqd0zv9boO!I>wa8L?Hz+A$ z>{1QjxRN{+!Ex!43(;uwn183Fh_OpGf@8MIjoOgU1O8FZ{=ev&A2W+ z9XD|hW0zVAj(mg1`#*U6(8s3K6-tU2yA%ejkUEPZIPPEa_rIG`UsF=V*rl!o$ISV6 zu6k#cDfO(9BE~LtosiPw+H&H(V@#=iN{Se})G{HZGE1BGz=nHFsk4+KC&n(dTu31T zaa7h`{HZBbtfYvsOErVzN}48xv|HM)*=$Nhl@u{{sTLvSQc_30z(85%mnT11SDTxj z`TaBeGZKU1cR@QoRBTx_FwER5ZD7nCd`2JqZndyE7#xGm(gp^IE!K{6`*@LvFb0i9 zZsL_F8f@O>*l5kNY1;rI1MlOONZ@!IyCss5bwh6ScD(zRjo*$3joSM6dz2-Ae>jjmfza zp9I&{)h%mTT)(WYEwZGkrA~h8sB2jffyq>x7I#;Cq)LdjT9D;hwigRSZyh?z-WGJOUi0Ix<-U*VDa5vr`V$GuE!%BdjnxARIxC%i%hK^1 ztoUv|{zhDc#&)MFRqU{J5z?~fv~sv}sRD~`({^Ep>)omjk#}S{=-cTk99A0SiOdb4kw`OE0MF z13q4mYREs?$||H0F2(cx)2;jp#G$kO&^rx_+hN{#Q{CdF4U4Zs(Y0LH#E|mpDy4d? zh6!!`HF7*Vm>N}T`S@Zs{i^hHdBciGxb2$i23V#dF{b6)5l*hKtGyONxs9 zFqY1nBFZyw3M?1%rqFaTFC#zSucIsd6(yw=g{39M{$|{UNq63qMGbjV@-hl4^QL6k zuz`@jpfXq)43y;imBF_PR$10M(B)NC6%`eJWeGkAIE;{sLzP8=Vt-rxKxqvG{K3kK zvdU0V$ghmY2ZR>*L*dduxG-GkH_XZh0%unROG*nX3POH7Kt}&+k|hS0`HS+yg@xf#9g8N|aAV#S7|`R? zh-xQH=p8W>1WQ8U{6Z!Sk387(=KD*l3QO|?cyJZAsPpp4t(86y^p})}i;99pVKZk8 zdwg38vVs*=6@mQXAnS(NY$kQy zL}1n$6U_Gq^ULxp^GgGMkw)~vc~e@sS^`R4UoMe1B~jAR36z!vD#Dc&rAq$|@|=M} ze^p6AL9jAhj0DON#$fOu;Q5t>(5&J;hl0wr7q$uzh7v9=DhZY&5xP#pP$I6DAgTF9 zRBHiyfC--~=zr2iBvg&WYnhuDEm^>K2tU5Xte~yE>PmHsw^oltb~e??@XjNlj<3r0V)JacYu^tmKBF8 z@~evcV)X|kS&cG+1xTS>ToNBwNkM*bd8neq&$T6aQ@FS!Z%TGvMqy?4WQ$NRU=y4c zt}HAluBr$_i!p~X3d?n(0$rG`)}c5GOY$pF0ZH`ty(P>LiJ27`erR7X7lH^`+j$nO@BWUM!`303)nq5Q)9d<+&)eyXtJ zGFkE4;;U!SUszdKSyo;k3a99Jj~(<^Ru%?AMZt2GWf2$T43bNDyuz~5(oktxg`Z1x z;tG>1cJgM(B|99-@HzQnMIRkP{gxq%gN0D_YT=IY{8DcwX!VoA!EkLp=M7Z(i^3JrMr>&ho`CgS%%io9o>ho@`S)lcMq6Tdxi zIKP%2uzqzQ?hX7}hLJK4zn0~>N^s0r{)g{F7<3Fu7ms@cD zbi~U!O~!J5_7MjjQM&<{ZzvqUc8KueaF>Js5HPM2g_vf<8;5%bH%SG+saSD%5NqZ}W~?!kxey#(MmAHPK5O+k2#XCt50M?BvExO0)d*KqU5 zxd7l`_K5H-U#Z9+jo<3Aq|C#gj`|XZdeCZwvv);`-|l zaFc;MHUu21ik34DC(Ds2Uzoo9A>de#s)m4LybFhbV|8jC0*)pL>xO`1dE7e$9OM1b z5O9ol^AK>1ch3-TEZ==Yz_Iy!Gz1*OJB3QiawIBWG&OD95O926{}6DDw|WRT)|ZAM z;HYlf9XP+E{W81`2d>JGu4-aIs4%~#{POaWz|67X>bb!=myfkGE6WQi^24F(u|79~ z`2fEz{3^91mYx=xxd2}Yu3Hek$yd}A@daC!G%ToJUf@ZjPH{7(i zwWY14G2**m&V@d{WL(~KGX`piZ21ZdW?Gq!6-_r*M_OC1Yna!xB(n5!OcdK1TUwWs z&)1#drsg^A&25#fk)PyV=LUpvJAf}wOd&oGVy~~TAVM&Pq-rErn~N?8e&my zuDE#*oV4V;K=1ai!cR@|M|-xrzsg$o$eNtZw?ET9+`nsoXMgId!v|bZ_g4dJKc)1l zJz{^o+O1TN6ZO#H-M;f6w!}V;PgFVxdx8&2f<8~SgBDJ54A^VeA{!7jv(Tg%9rO?cAFLw=bu_5#MO+vB7oXTGX3$z=PZ$fz8N^ zqA8u*+&Qno$#)=k*Q%ev7f~uwTpV@(vIxa=_5A2`wT+hU`YW+pz<9?oEbl7(QpDb0 zBLsC0&NN_>UZqPxd9@;(C2lq-iJJ?G#jNRIZ?Y z1xm_31xm{91Qijo&w-M%!Z%mCsPl03gqx_-+!OvEZ2+Fz=`P6dcnQyKo^@<)@T|yf zI9T_U=geAo&V*M-&-zCZr>MXWf=E!ycA}QSaS!$ad@bh%R5fhjgUS}}Uya=YG*jyvktPp$-3|jP_iy?!M6;r5R?p$u7_k@r~)O!yVk%(3>+7; zZbC>Y!Y!0hXW*T2uJj&lcnhP?wn!GXrh^~GOCf=MKh8?ziw_?ApakhWjeqG?i<`(K zAs)lGs;D*ZBM80Hq$}_B$J*1C!t}yJ;<{szlT3~~It=ApH>3TqXXB3`+Z9Sfbvsfu zR|ZRO`lxYfp81;(c}{U>9Bc1aLBU;IWE5{7!M)k?<~02t+_@fJ^>ggR0)N&_Z_YIPA*Z<-Pf?Gpu#o$o^jxkVVg2u9nL&Y2NDym~eEX8SFBvsgF#Gi(!du=|q}qV2t1 zlh?;mV&PudpB)p5=EB&kze6gt13oC4(XnuUY)h=;2poNOdn!MRb|6?#72T-9vGBft z+UgH5S6^<;;Z+Z#KBi^v$=$s=CH8de&;eJh{RnhW-F%^hvY>>nj>0b)>wsQiauapi zqQ2^ggnCCH#E3#rcD=)X@_2eD0*tItrrzOeAgOoeAP;1%SO7|fR}ZQ~gxm;9>Jw@k ziCb;pIzdUjLx(P=-r3jRc`%DrK(1Pc zi&)?6-A89fBN+ukh@NgSdIezCwQ0v98I$pwH5aGiDsewnkg=rmDgPl)dMFLj*Cx%5 z^$Yc~``EmBfMrNjd-`02lvKrV1P4RMYm*oZI5H$Ub&X_Pf$L?;L$L_7^Qi*QJdtkP z$wK%d^m+575F|!}Kb0x1Nl+@LNusHKv^(*TfVuvPNF zo23J=YpB$edd(X`Col>*FICi3P_jbJ0~N;4tJUGmN(E=7I8PD0pWvJ)s26bd3u+(E z0YQCaP^qX6mkFNkLKRgSJip)-fSM$z%R#Zz@`?>9s64$W5>1m7E2yMcK_wM4sIM5* zcR*1EdxbwCS*1A;!%IS>o+_bQP#lt36e6Y^P>7#r#AVfihLcUtrUw!3fSRBy)TgE$ z2Mw>+n0EBhWwPwAJ)4>a3qb84F%FpA&_PevSs=uG!<6UvbHD`1>4phDg1i_I>{QM4 ziJbESw5OPKV9PPj#tjGodie>Vmpl49-yDa1L z2E0<$a_TY0I`uderEsz_^`N4DE!MFwfZo3=?Kg-EyBZ#GA%?>UE_b(>k__+4$L4BY zH7OBO66y0>ul_?(yi|>{wwwtn4L`Zj&2@reM=uqiIVGtva94qnQxdiliMt7uY(?uq z$&kMaN`}mVp`4O@7nGFP0ZQUt0wr;;fm(xKinbSLiTfKUiF2W-C5~;ZQ{d?NU*hN~ zR1QNqT#((t>!76UJD{ZO0Z_6#=mRBXF-Yhueo7 znj2KTm1qPi#L$i6oj~OL&i-^0{^)>ksAvu*Ie(Ecq26Fff%!$Oy&u)a9ovST{5adW zI+=q6(RKK9KbRN$BpTZ5sXV&&m_OjrRvVsZ$ILUIC&7+M>Bg4b$J)KKWgi#g)=km& z7ctBor&q6@fjxRFp`N+X+Sf&n#i%>AYu(4%_o9g$dr47;NzKEY>ex$SM=77!)S-Vi zUAe2APCX#s(O};LF+`dXPWP<)E&_{&_s+o7X`>&dhdm%g8|$h`opY?c?^yd`<;fd; zq`b!VZ2kJwa01>Q98GN>HKV3~^^^_nuXUxJ*7<=eus(@1u=fv)CI9T$Ax!ZaWA3lT zp6mP|IncQ+xiKmL2M}4TrZ*Pen~x-Pxxa$6Xs(`Iq^0ZUATd1K&#l9v;eD7XdNzKS zyhG92y$EmM^dYO^zu%g|4sUAvd3>=^9D`D6-`Bl2*>xz^gY+^*u7K+h6MSUVdk4-X zYAjHI#Cps$yAFvYA6a!U*1k7Z`#MH^c#Qlg${@TiH{9QWS>?g~OOaM%qb=l|EUIHK zG2dRAhk^;ch}stCsy$)PdbOzCS7VmS0b)9yTedlBmf`qG&9XpH)GV?eV(%+^U`_#~ z1kX}}+J@RCMNB57M7x2z)xg~jYOcU>;4g9agOa*vFDM!Eeo!*x_dxN5V~WN;dxD^j z;d}{xUg1cbb=E8V4NKW9)HEqO1r*y*iZ&CJjI9)u)HXGsqz2;TWTL=zftn@4`x>aJ zg8BofprH1GDi+joG~oh4aoZ}%`#UJv^QXA5SqJXoWf3Tus*6F%RAqx&B<@ZFB~v9d znpgTp_T2s{;?e7voU-(S1AUj?`B^Gv(4VCrX9gX&Asw1R=h5WItj?qE$h6L*DUob6 ztjOS-`^0bj&L%%Eaf8R38xBrGQUg?ru_*?q~JIfLU2am%RBoli~2 zZh6QPY?{|E|FG}ZnBWtr1V&cR-tNwL%~O)6zYM0L3mw73v|lXleR+6F+&#s8bK`7Ka%epk zl+ozeogKt(-=Ak_jaKT#M}*JyDjvh}QRtKh-=F4cQMgx|FYqyTPW=^~%|1bm=Lu~= zjmN098XX9}jLa5wDOSrpj@P}mx+L>xw8I;7Pm5iKEip3tyDF1%pZ1jRj@I<&rrdfq z-lAcM>P9$7KHjzOPmXz~bL#~wlAxtN;(H77LJ*3$(}HI!qf@VJ7jR=ssK%f z3{rRN4I3r6_Qe`0yX)p<^{v;?hj-I*tPAihX9E9@@LDE7x-CbV=V$pYx#SYxQXjl=*J?Kk6J49!jWE=;GsKlCdV>_b$tikM zyr}WG$Sq;Z%tsg~+nw&C3ASXay_6QUH#Rodeabsi6rUiJJr1`Yr#05!KjxO1UAz6T z8YV#Hy)S_Bw|=m|iQ$V8SJFMeP+b(vdB*3&3>O%_*EnDpIN)ebUwMhE6hrD|hZJ{x)ejlY2L?xvi+!y;bPk&SD3LJIva{x!J*4=iq$J!Fj;JdBnl#RvgnwuaiYOtt>Q7l;4~>ty1}_!afTTjx+0f{o}TYHIFBg~9ZO2`c^ig~3b7(0 zE}ULq*p7L~N2I%Q{jj^LI0bB15-PDc9+`GG8m`I~ElWueW0zu^Hr<%q_{5|vQ>sZx z5o4D+O-QjF^XNG3@DWq$Ka>I`5_2Qq(3Ui@oQDqBerW0x8!q$cCcqwZ&(5>u*HNfBe061|b(+Hv~N zzx;|R^$jIOj9rSkXFA6D<*CoNno?Vo6ft(GvxF3N7mu$uKZuS^FXg`~DPrtW)TXBM z$?{Y0SZ_*=Okqe;%X#X`5tEcc*B}I%~ z>Kq}(`pM&g|2K7sDfJU2MT}i)3^-;A{}!%1YD&GVq=>Og`GgefCy&VAuEgX^PvJ;* ztvG!6*`>|}$E>}7X}IfcQ>s8o5o4DcE2P+hcs%#mA7`0Tx)C-pcBygTm`)nKPyYF! zDfM*~7cq9J3?Ze*Wp{tHTS*aPml`jmSRyQZ}EV8kSA!%oCUF`J_vjNKF28zyo!0cb)K z!~w8Qlf(glP8-ERfEH`Rwn1R9OQap+;D`j4je`qVB9{h@iQofTKT2?%&kcu1j=`L6 zIGklD*X4tF%UINMqx7_+)qymeT41xBdYw-iUM%FgH>}%lG9*Y!Ul*VZS+H%NPVQCdMSL;i0ef4RRVRpQ_~2Rsd3gXfhOBhpfcs6f-4(XT^5N-P*aRB5}Lr) z4Ok1{@VWlFhH!PDDN^3D`11Ni$9MOjp22DR3$FxCi#PPw(H@gWd&YaG{G&) zKj_1tZXj<2VSjO9AY5KmR_sS&u-M6XC4<$D`toM1OU7#%`|2mI7Y_!jO3ShCixtM| zonX3@orI-W4!Kf)Wmz~>8O*QntCu-yF_c`iUtFG@mo+&rYieHB^t_DX3VWnj99&dY zP#Gu-sMO-+MB){;RX_#;!Ei~T6`ANkg8pDZNpV3CYv_z+_{M7!TlDZiP+V3~9tsBX z6Rv4gFOjf_k8hEXF18(G=@}M|7grP&1hMoDIgK^eBJGZ~VpUiXSXoe6iAUrDLM$I0 z@EMVe@=C0*EGrN}4uY)omlcJBrJ>>w<5s{#nNjR77K`-DEBv}|0a-4ELNeic?||dx(WjMrC6oy*OQ+h zU2u&sV7e-UWtHKA%8*~aHXAImfWHE3Pm9XS3jKVcHW)PMFAEg}N(zg^Trw!%EOHU2 z({BKrIFuHa1pc@fpY7?hs zP4iif?K}+!#P4}10DR&~=a`4OWFi)tlFJ};m za4Wz+3QV(_y$yt;Df7>PxmeA-I87Dd#jPV`Fq4=l%aLf^6{qikA>d{Lcf}BJe&D|B z!1*2Pr1%2z1qaT#9+J4dL%=cK_Z&E9yv(ml_%_6HB+3^CRXhY-32+M>IA^?ULf>=X zoX<<#kA{f*=@4;`3<1Yx@t6ab_&I*#z-9TNd;XF2ZJQA7?0>=fHZlHgnc6$au%;tAf{N*$MrpHyW^q4AD5d^it% z(HYTl(b-r~V$s=b8eHNFudyZlD7kg?QUG)tsWiDhKrU;*SL9Kh$C4r!bRJ8N7{*#R zCo(US*0QkY4SPNFUhquZ4N|-f@m$co(tXHt+$xP6^D(y!v_zNO~@KQwYC}h(y4iiBGNc7-rNmJpvaOzhB1hzIEE?j9)w)_Sc?A z1LZUR5@2---5VGGjv z)CIBaGA^oPynI82;u}r$lc4za5}$@Zos08y{Jg^ONa8AREpgSL0{Eq9SKush5m4+R zQ^dNnYXo&C&QkV=prkBb&}t!Z_c5FqPm1eP*9(N$`sUD7?4~dsPjNg5Y$9aG7f%= zl9VvdO8>tmu4ya(=_U?^#EK-FrD*pbdal|m8a_<0uj>BLbL9!V-w3W;YSo^GzoEl} zXoPXc(+K@Eo)dAnGpco+AXLi{nC8wfnk6l~E@kW|+&ZKsR&4r*p~}&` zed{V?G!@9@`W3AD-0g)<1#(1JAk}J#29yVa)NSdEPz@70s*g~rTKUCcuxu3kEW^*@ z(q2a@5H>&AC<+Z6`%{Ul0TsYcT5w9-N?c0?atA1>KsJJsaXbi0%02`tgkOsG3!Kjt z)MlJzga0!qsX*QZB^5{tn&1*#rD$9>Cd0c3lnieosM+G~G*IUX$`4A0$K{9|F?%&y zaLy3a3Q*SyToja47WaXYA%7o~4Ee{Pq>6YLlzhq;KuLwfPv5e^zXwXn_JfkLe+MO1 zQ!*5Tl;sC(8QU~NSzHQAs+=-VQsvACB~{K!P!mO(ZwDn+4)-~g@qX2y#6q}KR8D=p zxM$OUKrBJOSGzS99@Y6tQY54EljO)4z5cFDG?Wniqh%PuST%hZ@svJ{$kW3xh7r#W zc^Hwi84Kn)gm^^^AznudIYC4+aqG$vy0N2MVdNO)MH91SwlM%;|JgcRs0uXH+N~zV z*`q8RR`XQ+5?6B$_arW4;7UOSghVCIvJhFZWi`J6l&t2rf|9b|043x2E+~eSA}nss z71Sd*%WC;7C|S*41|_R`AE3C=&QGf*ot8X%csO2 zMy=KE=NSuPYqw%#L8YS5fR5yak z5_gemX3 z2w?<%@grJUd_mlil{0MM=773fNU%sHj$Ot@_<62>&nAvQ&IF@WB_1 zuZ=TtUn^(PuuvVYDGztFbRFL|(-$Wz<-~V3A)S43ygU*(N!V`+b5&efj8{Kj*g1}{ z^=B2&DB@R7%}IQluc^%^@?beV2rl`YPtw$UvGA(zb4J^8YUj*NTiP$p$$9iL6h|I@ zIQHW2n&17;+K{%%q-Z}3P3cf1{r2M@@3jWyYhn(EZYh|AriKP$vzlZ_=St!$V)m1{*L?b#6LX@#@b$14)U@l1 zB2EkkYpx`=`C<6Io>?;5iD8>}C9P1HJJJeXa$?v;x{~-x_$*Kp|DN=y#Na}EizghW z^`&?m$yBx%Bl&;^C$aVAR0HEvQXJ;WL+6w`I9ED2*El#_kZcc!^JzP0lY{f04i4wp zJWLD3?TTYs7xpMls-~xTzv9rA5Cw{Zb8a4{ZR08OhQ*TcLd9V{m*ivzC(pqtcW|zB zaGD&Pn;e`kJ2(%5BZgl{x4ikLfg#6gA$}4trtOv8a_~bXMT}kQWFf`R1Uzn8@=Bo| zlcwp`pv2gvJm9#J*!S>wc;>wOO{uU{AHtV{T}o(^B)^c+v>ji4<#(pk-AalWyA(fl zn09$r|NfR;rc{rTBE~L7`zce(Zf|%@NfBe0I!#FVaprNMFIHv7b)Hg@#Mq^%2~7LY zvwt(z`rASe>M|&IB}I%~YLrdt&GC~iHl;3BQpDJ$I7c$$ntO2O)27s= zN{Se}6m^~{b?L>8kDF3qB}I%~>I*_jZ!^2!7=@9e-eh#^RATH>P|%jR=1#3$XiBxK zxQI#C*5S%wzh?QKkjNej0}Y9gUl<03$d3+#Lc}+RlB(llH-j+KSODmYOH5-;zHWRES zlmD-_z#6(u6Lu;H1oEq}NkzysRZ^qwyeVQJZnsw|^Ou$v7nKzk!nC8cmF8U1Xh!Xf zLLc)}^Co9wa}PBkk-H-Zf7gE9$#^IqHa%tK*y!dX^t1Onry%7QBFN>N0! z6n&oyhw;-8ZKRN-iZYmOei*k4v_Zy`Fjd|T*TGW8j`HPfSaahmT{e~aUdS=q3>}ivHJZL>LN?6bA7=xD? zQ0Y7pS1rlinkcy?FQz|6c9KDdya9yr`7lSoI5Kn z?_o^*V~$>N@J}M#>zEmqVXS&S#}YUOiuYT%_l0v{RfHc8P6S1G39Nv!P>-!gB5M~8 z+bF!mXRb0SB6^>Cu9J6=kqdbm)ww@8GA!q{Xl?(2u@coo`V0##zqiGD;3@?kpOpV> zy1InL%ry8{9$u~2I{iDjXVXIT)rfg1^FW+LcyLNlC;gnoYWm<(4NlX#Mt2bttv%e? zKgRRLS5S>SkFO!?SjIa3p^usEp@Sqn8~b>BOaa_>D38Bz^Nc`qcCOpJ`V@F^EBNA( zsC#2RxVbx4y$=^ju0wu!naK^Mt@^|MMEyk?spa2P3B+Yd;7N zAoTt*$MDey=h#R5+e0GTg;y~?IkLjD@h1rDEfV*at_i<9!%hXv4`-%PAkP_tO6F&U)JoL11^7rv8U)VWr zN91&5)@sqrp6<-iAA6Qrc1xbWlQmVb=%2`sdQ_{F<6Uo3dz zaQ5RTP0S_>su|~n_@xL}6zmdGgg?F}LEVP4A3v{lH_np;^`AH|#4knr3C>dD5m3tn z5ATtb1dDA3eqL=C&Qk^T5zawDC8LG}1Vsyxd_j!{B|D@nP?vz0qRjxcP*BC7WNcwj z?Se-Kvwl!sVNNzz@aQOFo}eB8g$jqehYjlTWS#eGP<+Yi)%F>@3YX4X1xm^uFnFiC zb>3B=vV`nnPzyn&Xw9Hx`r1IX3f?WCE)vx3peBIwYF(h@vpo!|R^0tLs0D(00uXyQXyGC>F0AGwHLT$oG6MezV*!GWm;9<%0(DN|6>YBBYX-*RX=q^XAjW6J? z4)n7bu0x&6k0iCj7hjs{GD8Q^XjO}~x4AS?CY)L<7SuSL{rGuBZI^A1EoC8oDPoQ+ zC2qmBY;$Ws`SJ5=U&dLsxd%Wk#4knrDb7;jXP_98w94{>@@miHEZf}6pk$kS3zTeC zAA(wlUyAk_&N38^2W4C0RuO*iy;`BsS}F|c3WK6EZ&`n(wFrk*8G50dk;p6>PSa`H zVlj?Oip<~`YBI-A6FG*uh-0Yn97Fl^pq@!s%Mgq{f}%G}+GHChQTHXNUyN5qY*_cE zW8^4p7Z&1iQ?xU1K2cD7cfD9pKAipdc|`$mVCfYNZy~4@;oeV5(3(gV8;in^pI2j1 z%3|99Y9W3pLVZe!dvPs`jT2EneqQZCoG%j;6=|NJM6;gtd2Ld=LVJbJd-hNAv16gV zLvGju4_j#ism$4rndaHGvE)L*A!K=F7K*^LpZ7`wuY z8axcw?81fw8~5NY-2HmS+)eM{8GtnKUa-qrnfve@e+IdhK~ zuy!2DeSXyk2q{*x3!Z`l2u?Y8hj;fqtA2s8m$K)?wlOlcW1fu-jIH(vV+oqEL_^QQ z_1ny@$yKqM{@6B*T0Os*4)5?IVp}+ZjZUXXM_+#D77S{IvdiqteP-1k5i-2eCP)CX zB=_Z2_gT_ldEz(mMIBEphiP%o%aj~jo#ooam@%Xrh1tT0F89f}SU(Cv$cy|gH>w?7-( z-nn&tIMZ*$3C~?Ys8Co9yc!?;4jpq95K?qciDdZ(9(- z<-Up;b6DhP2cGM25t6K)6_4#=J!ZcQW4R)^>apDFu{^Gie#u^kPvw$NwfVSD^|K*7RgwLvP_4IOygz1pXdhzJ zTwCy5+}J1dIt%JMcrV$#7gtZ+73(+{+XjcZv8OYiEAc!OMpwHDu7f*zqTyXL!moQa zvRTDyUhjNoOtk%3Y`M_>Vk~V_G`s`e8i%9ZbiX;w)qSA2>uMi1OE}aqEAx%m?%4Bt z-dgvBh*ZHv_YSx_M3q6PHLu4|Y~fv< z+kEi4`y%4ceR|d1NH?n}64>!n?q?nI;Li8WF^E1^+Y@^k4=8pn%6vNZa`&ev#JupM zn7ZfPkG3R5&Wb%}i+hKNTZUv!LGEYR*rVo1VYGc;?uTfMo;%+?YO5ciy~SdlJOwJr zK2OGMAm_Dpn>`z=a7(D50%p}gp>;CQ-n;*j9PM~2b8D>Nwj-{WmDYh&?(-cd;BgN8 z7xE&g=fwxPJ*&1@>ZNS(JydahE`*D@D5qs8FERHH#$Lj96ODIe*7lTjx$A_=5sh7` zoKf720*zg$9MRs9HLm{L=T`lJDhD1cYkFcGRC_(jXS(YHHjq85zGX=SpD*MRw!{ZT1HCR3&1cEtq4~V8 zMLUp$)vJWQ*ex{+k{vh(J(IZuf1x&@U1GDoD0NBJ&~(Y3Ua3W(Lc)E)Sck6v(b`kxN9+iH#Yo|)SD>89NI%8<5 zziZIc*V$8#Dz`I+Etd9CbHu3(T2cy?u>&O{`@X|nlkdRhOx?wzx1IIHoXydW7ts~W z2tjSIyM`BSsFH9`%>6~E8VoGbVxhwv)em#^9k{&fN~(-!Izp(z&=`ByZN6!2X3akI z!%zYxEZsN9KxK7#@1X8qv#0mOWGaI&)Q4M)0=T)$Q&b;NBhdFyA1}s2&vthE{D>3j z$lbbX9d$<-x?=})N3F>J+85bBDZR0SiW{3yby9Ei{xB&reh4XGkd{P1gFMJM+WX<+ zd>@>>-ubFcgLH*@GTd$qO=e{xygZ) z_%B?`G5Wip{P=lc!J=>Nkp^m-;GGU?x}eShHAPSvpyU*c>*VAVjPA)LugKtC3n~PO z6zzIYg@Wos_Zb${$Dk?%bv}|LUo~WbS}1tApzt5Ee*9?_R57TF1T`Df1W;aW38-?x zTMDX7P|HA-3Tg$Y5gS*;1@#0d84Bhz(AH?H=7JX%TY@PY7rdl(e&V{J5JLfY0Z)sDQ{@T?tbzd}44%PA zZs&Ue+d2xYt$_N$ZXr78QpAH5UuPtmt#EEyyEP4fh4{($W~qWoG>7-&j-1-@kr}R6 zYs7h$pjH~ZRiGB)mm)UflHtX0O>ByG7tVhCl>cM+%rG1lU*BH8#B^+&HDS_(>eobvldruw372b zYchQ;(t*~m{q09jVCGNCy0$Toz_9UB`tI7lFLQ>2HW(MqiH>mi z=F*kK7aa`e=9Fu0bcVxLVo%QqM>r=53~d0iK^;tf`G^X~vUmE)0<#7YoeAp1$urhC zF&xXdl753TOL)}l!;d;KqU@9S-Jfw){=e&?%|sqr;yOiy^DUg2`mEi)zex-(GWR@`LAjB`j$c5w0? zoN5QB&cR{#V~?xD!TFMd^DPJGr;2lmra#w{ietLVeOhtS4b01mbCSV%OL0y%IDb_f z&ERl_CJ&mXOATg&MK~Gd71>ju!q=eINZmosH1yr< zEDg>KcHCUHPELvj%nWw53kOYVGm>WEAg-^XeHfhVDX6|r zT4T?ihUnSt660d*lO`eL&(Qb{DVSa1TL4}xSU7mS{3kmH;e_$R#Dan9I|+)#_7G>g_P(vySq@cV_qVWw&ukU!)IDL$6Q#RDdX`i1islfyUS zciTAB&F3S>49rx9^LrbIrBkC~#{=V-g)pcud4R;xCjSW9ZjgK`cmo;pbJZ>nV(e0< zfn&OQeWYW>Y&|ATdq_zUW0&#@DId-}W_)|v$EMV~N{Se})al?1WMDr@R&bF#1MNJ0XPNv6vfMfpueF!){Upm@_^+=RHRy(f)=XZD#ByRK&aEv#@ zf%}I&*WHQWDzqd~sX{Xs%xh`AZbA4aUr|%U7i?M5u%LcYruGHJMRk?IIdugM z%Uc#KgHmc~ZdzQwptWIHLw#Grf>z;au73GH?Y0hDT6TK*VbcaUKPv_CG%t>M1jB7Ew8I|Cugv;fyqXPhh}&B2maIpBg_jopt_MO zwhP5JXG!g+K%{-xFOMOP1H*r*;r$#LXV4c#ns5q3cWzSXfHx7B);)a|2T8`BeW@_# zpl3L?$+`GR_iC)!(iz2-f}$dkZ|OL9$iz>+UX~ISxRw&tpcddK9j!@;c3igzUI)&N zf?ALBh4^{J?q)fH`VX9C$d7`WEO?u7mbhm@$-7C=T9{BlmhS+V9w*Rqn_3QAUz z4WMMI489^J>$ zOtPmzk29!dIs)aSG*bwUkbD-4Pg9Ao-}!vyE+zi`<(@A}mSYV0B~JH|dh5spU*XuL z=4@6jR|g+3oMe24Cj45ryfpOx@y82u|3?N49Qep$JOk7SQH-T@HUk*z48SDXM_kX8>yU)1$94Ohy_JNv#pI7@3XW9MJG*?nWWB)Ua zEY)0)^snyz|J{vjICAClH8Lr|a#|#0ufqA?(NkZBc;LE{M*06&cH)Hw+u7$UJ1Oz+ zFFU_kc3B*&`rsxo4Sw;^(WTGpx&<3BzbJ;bx`RFX%%fwyg93~T+g;DRztT!+A5gtO zE$>_Gi1!3_0x_ojLtr|na3YG%z5&*PgB z29|8WjtdLk!ammySmF`_{ubQAb?C6p2>A%>>|NvP2CE7SQo4K7RcQFDg6e*Ml;@$N zdVrpXI*!OdC1OkW0o;C7#QKH`UEZ;T4lB6s{eV3!qd6>6_Ppzv?p`o0INlZoiZZF8 z5k3Ca(&1?X%X>LYO8a0LcHo3qD1++=dpo<`s4iHf*o#s_KHfQx=2|r1N{@whU$vX+vCR^}?W|+Zf-O*(2Wt6PIG z!p=z*H8=LWsJp!wLc}`or2Dpqd`Ota3j7&fc_O%4n5xHWeINJ4YSK_qcgCJWRgJbE z#@x+w!ERMy_aNXfT*IDHvkREbp81<`<0({KRNo1GV0D8Pd#?MFWbje57oet3=%-m- zvMaRL6+Y-$KM&Ed7FXhLE=-Cy6_N<`cs5-M0%bWGw$LsZ@r~+y#|7i>D9p>%mL1#H{eH5nkX>GXZ2S1l7%O+bl>$rCZK#cF-_nlJSa);N z4sA0;wvX2U=zee1+P`R^TsxY!;jgy#O)MzTM(lRsKBy79kXKRfy@+i8Pg7J(yWiXW ze(WU#xaL+74*xvo+C|Ydx5l=weFqFW4PJBW+P{!=?En^`A}C_CW3G=!>|Xm0(=*~F z6?hc`Z*|9J?w>5|FGt5_-M0UHMb3;}<&I6h4JO0x?q0OqBche!S-R5vd^omB*_0F& zIx@b`qiJ23P?Ez|9XSLC>JjtQo{_eigp5;SDwXe#!lT4A zBO|w3@^S6k%rNHWN?2jb>|`~IoeYKM>Q*_4)f2w`xBZ>Q=Bxp+Q+L0=``y^bu`PI5 zRHgBv%02Juqde-`7Foe$U3*K`HP@%CXUH2=xSBKqQH?)9EoXK6I6C>>{rgv?HKazEnbUTqM#{`QW6+eNm57~vdy(^#3wX;PIIw*5Gv{xjKNc* zv+mu`eW{t5toh7Lrqq3#s{H?3GBfKlnVB6-ezEH0|Pez zWIXC3TP53#Xa%VI?~hUqW4ogn+@jKXR`&r>N14n36riZ4GLbv^rcT^W+IVpQTAxG3GnKhe#prL$E@lk zQEpba_y2?{E(BZjjA+`uut*PLtyPIXTI-93*@fr6>bbMDUqWirVsKc1Ax=#?1_LFo z?Vax?VMu`2|IwOs&$>51HU>I(p}qW52j^}<{N$*p36y;MDo09-a4mU!<5?i?K7j#C zNKj9LDiqXaP(^}z3RJP6xbtp_pq>R)DyUtc$^`WysB%H|fC>xhbx;+8+6$^uQ2Rht z391(qY=e+K`gNEis6J5qw2-1526efh#7NE$4+dfcc3(9IaXnaQnI7BDA>3yi!SzLJ zU+*e9y8CF93)`OUg&;h2%N;b1H~ZkkLk!{jojK+TLhr9|n_g!?+zB#y#a6#_a%W3x{#L zJKywRJ`xT4EQ7h8*j7wXFe!0`cDZU^$4teuz8s~;AstH*R^V9s(Aj+y>tQzKfRP(| z*0bp%-s!;PWV@K0^mB4j@FnP=FJU&)<(|o@$*Q%wGBU;toH0ae`ou&fa}T!!*D`A{ z<9J36`JYDP$BIHVH`z)wIh>qy?q7orT})U)XszH>p>@6|hdRdif)WT#Oi!?A^r1s4 zT+C1q%ZDm>HbN|Kv;?0X7d%(KStciaVsi4F>v=Ib5rW1HNmK?D7M8k+xk(L1&nP*Z z8a8uvPRCw3H%W=r^mcB;kY!(~KML~wBo<;joX70-tSe$;#}bz?mbhR*pN`srN>Sq4 zMpziDZc?KiXvupqoKRC1zSxotkxf!gPgu!iL*#1~$;(GovP@aTM?D|vH0RWuP$#U* zeMmi~U~w~PPNNTFI?b6hC(&iB18Nd|aNb>IlV@PW_A=k#GWX3v(XGdPJS%>DX= z`Qz@RZmbB6c3?&{VOQ+w&bK_>pSUq+K#c3ZkH^9))%D-T->&MTxgUBq-3^j@FXZdo zaulm`Hr+->XtbzXv6@ktfA&1IqbqF#CLXSrx@Juh6X(o!tZ+^0{Lm#9(WZ74C82lje745xsS z<;o9Gk|)&GgyX8MUZu9MU@GxT6V9ZaMeUg<)D|_?Mp?>S#VR!xTfh##p>qWLArXV9+zMH_%nV|Aa+TDK!Uh+-$QSETN`8M){)_h$>*rIl1B) zRe@@%$JO483gKD*0CIzB>YMn>784eA0F@#JMlKd0%gRurDnnRQhAmK4UEVMKt1H7n zQ5hUH0ckogd_zq}tebTK?fNi$DfLkU9LCZ%W=`10{8@KUXnaur9q zU;Kex7A7wLjgJ0lHD*7ouE1TmNsLpr{Gtrf#hjZT5SK@0*Jch6I zkB8xB99I(U(fEY_HEVRPGaOMKNwh^{{$#Fv@?|H6ub^E?v_oS!dFS1OZ$$Cw;deY& z()Yn;xu0KjA|j8+cm#&_XT%hJcNU727#_oQ0yF?PE;Kkk#bGJRL+2DaIP`*K$2iw} zaFL-Mv&zBwqJwj{gYyFi=hqI-vkuOm9h~4oO2Y%+=^h5 z;-nau62%#Aa26^K*NsS$yL8Dz=iH$?72cMaW!*wi@^CQKPYfFgfRvfNck(eIE zNi#U_DUJq?BvT|5^5kH3$7GtDaJnKj1=o9US%LnW(}hho&Ym8;5DmLUS=OOmmNo!!&n5 zv6vX9nLcGr4%3_s#bR=p=9di)F0^xyI_ec3NIH%hBUj0>YHVtqf!2F8Dk);@QnXGq z*I?{_Z{=NjOq%v3B}I%~3aS=TUYvQfU;JBSflQyK{ZdI0W0yJ&99I(0JbJR1KWa+t zS5mwyLmEX@q7HjFjMsGQZ{K)etdb(eE=4WqO44()yZRgq?DaHfD=A{^Qv7IcN-e(O z>pwE3N|h8bb}5cB%@o=<16ZV_h)LF3aW%lYk^JxgD?4;6PGNz091N{7j{}j$n#Tpf zdUHrf)BbZPLDC>p;?xR~y1KT=lBSlr#VyO1w=~zSY+TXW)Et51Zw#w~Vo}NE4a>1* zl3H9c;FbV`tt!E`00|bAaI*lhS_CnHb~yicYzTlPu4rj%0I;g*#)f5b zcO1^2VAaZe;4(Q#w;X=Vj;wP5-Xi1oAqi3FbSzY5IvEx1G;-ZLQoFfcDF z9Q%qyt1iBY8@<5Xu4YK*41gPp9*)i_-#f&PU#@ zLD&2Pc0V{Sz%LPQFVZ({6jq~rLBPy-6RZjuakj+h=R~V6nEcU0z%lt34gtrp(u^VC zSRTuVfV&vDFAV|5dChN!hN)w zvVHV9a8-V&+J9sxf(;0+{9m=&=$~F|WLZswbfE_gEnn2I1WR+p*cCf|k|)Qpft#x9 zF`#Q|zQ)39YOZg+siJ9dgUOrM6j_?TY{k-g%k~5{2wbXXrKE8!4>qu&Z%;t9+@64M zg;RuK)2C+w*RRs2C-#aJi!Wj!;XeNYx_%v}d#p-mnJV#kK|HwO zu}5Dm;+6tk1sUEdoYLhUuFhd9-IzdK7P3u5HjV3}u*rR5$ zOh`f|34{=+#u!Kf!H{4w!(t6!hp6Lo6kA(cYd71kpI=wI*xJRG0A&$H5Q?}|as9AC z8<9#-YW~09z3;u5H!}&Nw%`Bz9=w+`=bdx6bI-Z=-Q`^S&$e>lS9N2J*Vgy!Z}JzW zt=`;o!oFA@SPww7x#}(H$tUbtTW1%iC*ESq8|Z$31Jzsxc#H*j!alY*9n)B0Cr9itdkhL zy-qZONX!lpJk5lF=-mJ^B?$L|cwxE|@1F$JmOdWS7a(Fb{v00Kb$?+Hz?{Ha93>3m zgR?8rv7~G9p+RrD!(LU9?f@d00Q0*oP?4URx8Gj1EpNbHwX1qQqRbLGR^b^sIdDsQ z3JwX-myFx*xeVjMF_w)>L1-@hWByT#(`V)G$t+IKz$~XafS)e>$l{depxS@nBWxEN zVZX1pU_O#LO(b9?4(G*E{guhU6!TuBdeaxy>B6s2cgk4#WxEJ>g2GzMPDg?=5l_xZ zC5ZE*%K$mV#IB^HmPk6%+<-elZ0wPA-S~aK!1dtCTl#Lw0OU}9if5L94&zxNpqKEx z7k7g4Pdv*7E(N_7P9-~(34k6DZ?6L+>6QWdrojCj(B}jlM+;^8?0{tY9Dv#c-9><8 z`Z%tWBRH}FT_GTzQ$IyOobY7}2rpBBIK~6tw3X;Jq!T3G4to(q1#h==(cgd_$9Fzua%tF z>a0@V>h{>D?6zm@j=68KZjD{k7I?$cxW!Mw37oxd56sK)$Sa1LD|^e(1Ih z=LMXHg7=++vpck`CiaciLGHSg+cDMd@yIZ!$3tTsbtrA0wXSc(N{hZvBYDu5D$1qK zINDosA_%#8&%a|lT_z(khq2dFeOX8jE(%GUAN2I&K0aTMg4IOZ-f6_4ZSTAp zh3(74WRyq(^uA{P0nE9MwWU|%~>uauaC;HgXf`fJ|=KX%5NiPObK^7b3NgGbD+)gF(01pkqCgbYBK^1MUQ|i&TcU9lxd3*$YTo9a@+S+z#apJTnEv6BHyJ zXIAb2Er^11 zO909IP6u?gz!d_Lyq^aoZ7@glOU2vo0V)*Gi-0)WhV3^^H5D4d^@r5>}C` z6R_jfzM18(H!?OD4|@-1;kZI4ZvfVBaKu@xpKO(MkLLPG3o9*9M5xR$gvHegZft9H zKy~ZFx3r3#t^>Pl__W)UuPg3~P2d3QNx{n9(Aom^ux-&sjXtSsV!GZuN}Drs<3+Iy zuIQj?r!cS`m1R!3NLjPw$KXy7WqX5wShljx^0$=DDnMzt9iryC1;jQF83FELJSPe0 zmv~+-pg$PUpABfA0lf@Jrr<3=G6nAd>cpL(yoaYufsowCc9)M9X*^q`47Nx{m$WNZ z0m)M(xTjbi4RzA+uaC1JM8CF}{n~sUX)p&i6Ky1pG|1*A?BUx;^9dNJ5FW>HyYoYR zUdgC+gV;&K!i62M`1%PM_IsX0#g5fSlbkiO$?ole&Be9?&B7$GqU$&K(Vn~g6ni%r>}P#fBRB`j>jQC zB~ZH?YbXM~W4VK~yHDEh-VYq2Uv);sRsih0Ku`Kj`?XwDXwSf+ktKhnyIpqQ)f2`R z7*LAsFIzMF*R9X6=m_~R9DBq0xN5sq zy87Oy+O`}#=Ip<4Isy?^}Ah_V%gQPyk7fV=kXo(mg>ie?11p} z>1cf zwB!lg+;qWm+hg^l*zXuiA`kXfaO*kRY5&%b`~#o0-_DhKk?za6rv&M--NCiaiCBLU zOdfZqA{Hni4{sen=CHj-Ct|j2Ujt#l_T{%8mG9IO>Ic}dgk4O7Ho1|Bp}j91G8}Q+em`b^!0~%5g6q2$vC5D~A>=nl z^nPIVzcvaXOV{6fdk2NPZy9z!!sf^o7XS1;L`K^k>b{_DF+8H<9I+O8dYFfcH@TSs zi>(e7mU4OBPMk_`h+f|zoV$9sxW?VD`rzFfKFXiOiCj>f%0TUt5F@^}?wSUIx8B9- zI^8<(*nqd`9>XBgMbBP}CGjvRrTmsS2To;Gu*24k);qHL}sJ2h-9rP-|pBn83AQjMb0X>Fp z!301F$|hJ!kAQ9mR4JhC7}t_1cnXkA!83qlj-CZ1Q_v4+zTh|sXn}wR096Ty?xJc0 z#FZp0%>=~;XrX{avn9q-KHlMkk*yG$pzh;N?_{ID0#D1v$%4CMGyq=}>Ca z&+resHaJ}*-}t0JJ7(WZMU%DDw(;T>q!SN(_#A}U(z_W{1QAy5ARx3T;$w}CM&jC$ z_9@%e%+SM_G(;GB0O+KXnfn;Qj0P>sKDqbX@9!wSS!Pjwdhp;tL|61`|^0ot_%}G$Y@Ra)J2Xwc<-HE6C`1l$i*@gWfAQ{Rp0Lf5(185!Y z1Z4-FPTcb7EE&o>_$@i!2P8Q@1oQ>m2@0D(Cm@HyfgQ<_14wdkBdz3Mqq;$G%mXAj zxMcMj!OIV;3<0eNbftiL08JLqe*kg`=n(_=TR@i!+*5$$K+%hUWD4E}G()^S1L%u@ z5|q)fZubd@gGV#P+baO&35e%g)`_=^4Z52Eap{jkS#P}EV&HxO$R*x#d}EG)b^(&9 z+HXLd6*evV)cuir*RO6?^dH)h^-5WLONSF~%_nuuk?TUUoNbMr%bT5z?aSMm^PF@?GyH9#aemj86RLF6!dm($m-tzmU`bc(!%En%hq_GPOY zSFdhv;#+McYh7b!J4WvHtRa-;f>A7L&2##?`0}!r&c{#7+ldn07BPz^1XX~m)6zp2~c@#;(vfHI?&Bz&DALHUm z+k3Y8uFlQKp;#NGjzdL%hX`-OveEL*C zZFhYH8^c(`;~Fh!IG27Npf`)EUX7+{U2=Qbd73E#=ln?kn*H<$Ek)Sw5Ibgjo6R%y8E7id0G|?W>3!`Xi zqcAr{Vb(-p?uo*DJqklpEiXMizmCFekHY*V3Uf3H(-(!|_?S5^&J>t2=SN{CMq#E# zVK`S{4yQ5-vm^?$DhhLJ6y~c@m>))A{t$(EItuer6efCI?S~poqN2+}Uuhd!`FjbK z7*}X@aJGgCtul6Nm@!5;OEe5^g^WaBHyXmMi=qicVZI%O`B@ZZR}|)D69%h;XYxZP z5!xyAlq-m5(PHsK#K7bdqk@wdv4S|4A3cwlFzhmLkSIjMZo=oZa3t3(U>Zyqb`g3F z41OpB2!pnVmn@$tc&}d)<1%5wZMd+=(i#=Mf0eO#+W^mGB8 zztoO?jaC7aOsawi=m+Xt|Dkb_#>{00#%f`S@>-F6KH5i}YoEqN z8Z#GTkyf2t`~Yrf)Ll5N8bpB zxUSc@NMq(=ZzZ%&{J=}&kA=9}H7?Saxh^$vEq?P_h(*uWZ5kJ8%v?^vr5hUa>hf=C zT%<8`O%PnV{rXPT(yCBgKh?NMW9FJDxO7X>;eT5VaqZN&NHaot8^4BF$v(tF@W?em zLy$!-6B?e(SUEH-nX#BiQvDmxM=(xA;Kx%zQ&VAE~Ym7IqYh+zG5)3m*pR%i=3L%Gz7y`3JEV z$A8>27{XS|V+p*zaQ@?+%&@R|opB_CX>okSqWg;0_GX-@&?WMP*b3U@vU&*?bS`bh z2VduU{dH7fg08Tmv#Ggr0ZMOCqrn`tm>;J{wBFpju*1{nUA965x1jlKEBB3s{JA*D z0fJeeohl)J2shmVjI7sT@52_mg%Cc448bbZ&KVRpC5+Ilee-LL03xEy%BQc`C}> zl@)W#T-sn1~7sTyrbR=T#TDi$YY|SdEFW*o^}+3adRur7jNPU>iWYJTIb) z2S;f80kZR_i?Nsd>0&e|KfSmjf4WOgI}VU=yNim-tLF_9gkX__K-dJZK7V@Gisn!V z$Wvi)Y2iFiNvt5EfdUSC&p6CmteYIEsZGxXoNjk9udrq00jCiyh6;}p)Ehywh2272OlGX`zJeD&1x-8d#C7Q{iv9`uSRy8r*H{a3ejto;|P_J54! zDMkQm0m!dN?OT#>#KoE&|B`%C%O&|vKypd`@mZ=n3rB4nz4UiPX5v_LthTqip9s_* zs#ydyJbC<)ZvyV!nfcAA$pw-QH`Fh&uHud@LjDwNHl9Vy!(6 z=SoPc^$9HowHD=ar&=o$g*jLwQMJddPpGx&c#8tg-7~v>xBc6_eW@Y^$R5%GYCN$> z2&oYz5%3@`XK?MLjp*$?{FYA?nRp{_fWm@1^P@o4WVl-_+fw4y5f*^JI-V5U9-p13XRb zJ-8|hPT(eVXQ`eS(~`z`@GCixq%B`kyECkyg}W|MqnPP;{i~c7-~C95zx$|S-+Yfq ziv8}}@t2FK-lZ?BS4RYD;YT(@?LH#lV`^=G!1p3%`IQZoYJcVvrw+s6oa#9q@Eui8 z1bkWa{o^?k++b5@s23i5Q{9{9JBkE*veNdCIT7g2Vx)8;G%ZOz<@*bwK!B`8ib7alK_r+I!2+u1E?qzmdI|4?`N7rCPPdw+Be^+mCYAL+32Fe zx;e9`CWb_nYEB76h59qlmnh{Vgaa9R;K3L2+MSj(nt!v-F0U^c^1^5)ePZ1mh?EzS z1$pfblh+X;uj)@KuTzJG#KuBm2X%=ZK@5=+JL0=vN{mxmQey98sMIX6EoYS%%Hh~fSv{{qTw&^U#P?MxtQzzHq_D~WnS|x!Qcq!pw2BQC z8y{7%r41Ud>P3{2R_oM?XnbT5>B7?t5ajorDEWDBf<;^vCO4FXFozfTCNQ%!g@IaU zR7#v<4#0sY%wrmxhJi6cP!q;#%Up$>7j0ce&>ys#=PpeOIXBF+?ZT~uZm~;x( zh602&WT%7e7d)26(}dk^DBO@uSWJam0C%iI+Qgw{co>WIXZ;j@ISn2c*jjCUT2u*Fyd@hG;PPBzhcvvuGkah##}ZfxgD6 z1G3u@f1l%CLtJ0i5=AvL_2^@%m;LTVBpXJ>h8CHcgk-)Oh%lB<4X0*zNi{o+;UB4H zPXf}#rW?ymNYTgYf1u}~6&SwjL?}-;XXS~{HgqHZ*UK~Q6Uj3HV=GdgXD|@= zuaT!Hu>Y0vq-s({KcPJDN9|^_%zkGa`nix~pGZH)OvRT(gmykXoOa$VwR0B6hov+p z12Ri9?nY4iETCql;oJRFspXfn665!H*aw0%vzmk9Pd0LbRI;A^Uyx?nCzR$&453SD z-T>&6OH-87ze1Y-o<@^>=1(EUZ);VI$~ml3+ArM<5*F!k3{9O)Ifw3_=6*tPenZ5~ zVKLFZhYyQ6KaO&W^7^FWoWFua5X%XJ)~F7%RgRp)T-W2>65I*OR}F}}$QBFS!v=IE zD)U@{8^qkmQUQ&^b&U_wQU<1CCK>a{4`Hp}m6$gQx{<{CwOX)-Z1;iXo9YM$aAC6RaXYLKu z_viJh{dNz=mQsTygVycA`DcQTUj%Kp!Z=_A-Iv$%{)Vxc`&+iC$s+=Z{$n=Ad{nLP$8gd#k+p+=J9Rkigm}rAe}G`OM8wBtAvjHB?W2+E z{!=eyV&Lpd-u__f&+QzNPdW7*vV*w+-vvF-Y^cwyPgQMsfl>ZlHXNAZd#`WaV^-Zn+w@xLmLLN~Bx^EVG01u@YJ~$66g7+LkPh!9 z*kR4n`+TYD2RO(gUB$_I_0uqC7ExnTM?(<-U)ql#qGC`a$k9 z>dwqw^=a#_%-wL5Ux{JwVzoDOyZW4UTjmjBp2Oru00GqFY0CNY`?V0WrYp)E#<5GKp&2-PQ?z-IV;slq=UfJvKo`y*+*M=%}H%9Hs>J|+8 zu2Odn`m)Dt!_L9^gT84s*t>^g3=H{SKYw|(LFwIXLnoX&Ry=4py4L@G)K=SKq#ErGf)_W5pcts ze~LC4g)<&dS5TmvzrfaYV5EKXQUvcGu-iBP2z+wq=P>pWT^IF8=1WjXgx>Q4PDG~q zp6ts+5}3}OXS^eWYi)g(X!BMw6Fko(F*xlGBpAuI_9EX*!}Z+PZtDRXC(Fo=#3F<- z!5T}@asOMD;xIbQ#lZ$(zHhq>#&O46)A7RJJpj9s>dk>1uf+KhYW*1;RCDT}x?k&9 zsoT>=jlnT4qpTnJ-?I4nVZo@UoIg6Lc&CFc2W;YSoAD}-{S(K6Y_R)x52}0BkDw54 zC$Jc2Jca`hoW9otD;m$uTai?Dgdf9S5p#LP#uuXpkj^w}`(5V9$-VG*yli62~s0UQL+M9;4j{RxwGh=#1vSFRx(vpqS37PDT z;Qs>3RvoaXVBiib>t7jxG0{M`6X%-rys)9x|6yY1RqEbbU%~h3ru8Gs{Cfrp)DJUH zw`{Se*lugFzuXJgIk(wUif>DiKLGf*Cg$zBKHKl5PQ1s9Dg_5_%jpXdRR5{HHBmyL!O>vv*8!~RNWH#&5Fk-vZccmHYr`>xOnaqTZz6{oBQ4P%%ZPWYPLdGdo7$?mR$scQw zsLzSSa(w490U?Pv$9sH@dIY)){aaLr67(jk4pC`gEs#n#RNxF+bMDvuysTJ3kC z@;mdMz2#`$!R~XRCm);w!iL)JdtapLJSeJ~f=|IGIOcX{%oBk`E1X=dO1Aiddg>_I z4U@z2cdoh@_0pWZQ6hU2w45E$c)3DfR;D^YveGpGl9i5CQdYXB02x)ye;nuOq^P@V zVCCzNqZL8d2Muh0?)&f_k~`Q}B>FOFJ2FrI5d{w`DV8&+sbbm~EV>=l77So52#7I> zO?-OLb_YC<&>Z@XiSK~k`yba!L!`r^8dX_{JDYL^CQLKNE*^zlMH91H+(#l#~A=-~)IFLZp zetn6EI|VcH?$?9!EIf$G_BGT5?QB%p26bnR#G;C@rYIRL8sc5K30i_C*Nd ztwD60{M`s2r!@M`c*|gf+&ubjK&^jW-ABXk#QgrwH0zk%fh6Qb>lGsd*8K+Tv>stS zJj{+;H#koUn|4(3)*!elaB(K~l@Xkb#Tk0F$IwP$c>#3bGIXO4X70k$7WYv!EVePh zGFzbF3^nS62nJ>zL#oHDr>!TnwrvkbA?%ya=Yj=k*OLfhC4z7Ksb^KJ@<>v5r6piM z1Svk(oZ@~h#n$~a@Q1aU9m+no{(I*m$)1Q3kjGi8V^B??UnA1?4P6+rBo0NEgncu6 zT(k@PSU_=TrU4~kboF!hu$AH`CoRL$V9{XEc3ZG!5dDk1fwi{0!(F8~wNo~hrT*Om zF7=@LQs#biDeI30=ccf{aPV1*?QVZ>V$g+f*?_wCqXC@--#OyP(Yz;a`71?)bqqK^ zYj5}GFby7b+>?0~;vr?1Kyuo1dJwiVFx~e1OvlsH&P5Hd8%jb32^L_}&o|61kVdVRE+sBqdMisLl zIv3<55J&S4-0~O7iDy?iVeqej-<@Fc{gl(|na^wW(Ut>s84Y#er=cb*Fw|#Q@o_j1 zbQl5?x}ynch9RV9?7EP412QB8e@T~aLM9cI=B_apq@hcY%sHI>feQ?U&#;D-A|-V& zrlhJMsd<{D(4Nwo;LLTAEH1ZzYS%l{a>n@jCrq^-RDF=XG`Bw3eHxV4Lc+l+F!qzU zoT?9Lqb5%;EOmtSAUm=<(Skqir*PhmDV$meXMThlK_#g|xt~^rj%p%e`>Km5 zq(a};LYI%BO6ew5QiT%bd`ujuqFr(5WrS+=gPCdi(yOYxnpVi1g zoK&UVVXCC*(Ex>nZ^M2H34WlZmm~3&d6Zw7A%XFGn+mlihQJzz(xz~MZ9)LhCt>r1 z^>gh|@L0p0QLz%nS@pztJTKiQCdK{GDRXX|m8^v#f5Y>TN1xe2MIjr$Z9lS7x3 z+i}Vbz2aU??}WxFvj5H@87iCJxP|xMBjsiE-($&(-FRsvbtN;&OH;BZq>tmabU4)FsTjaZ>(x5-!k&DLPCfNaHgyk;)TQ?|Kql#JLZ%fg2NL!&?O!fG zws@kwgZh1%7Vk7tN%_6Y)DEF{QtN&U3QEx%L+k3}wwIAzeTp-xyRRY5s+UDM%KrW# zbANwK0mhyT<&z(1XKnH>Glck8t1d)tjSCZ^?60uDf9jc!-QJy5|I)@mh8WoVzbwBO zaO!)M{0wBg@=N=4^7{-YL&TT$I6!9kQUAvMJLE_G%VmG_e_DR_FRq3n#?ZkfXV<|k z(ccF#k8KbVYQjDi38iDCRYKRFuP-ua z0VKzjI{?XX#wp22C9s96*zXHhU}X3V1G9kvI* zkHTWp^C14#1Z_ze8G1f%XC0@Dp9s_^b6_0PtEuoL?m6DK@-Zjk(Iy%(+l&80|g*ot^7CnP+_Fv-dDf!vtW#)RzM znY)9wyD``)27OcVj@W~bBfiWd`ffk>>$}`%fKk$H-`s>h7-(hp4?$rJ9RtN2D+UI` z=Be5kI@guD2Toy?L^^k1_S;K=sC9fjcN>nv!7hm>GIu}50PSU%*FLUbj>Nv%kDA19 z82Ye-TWgH}Vs{A!i87x>8K}u~;ENkma-%RdXvdV5K593>Ugs++CP^{giICmNZ(Ya$ z_Ga!DJ0s6v*C&>6qy}x{m~71ObBVywz81!-jnjKEl6x%JV8f_+Uy1sJRSNssRBc}+HQU8PVi8gwj@C! z(}NMuMC*Z|ZOdCX^0mj2x2^k9%oE@v6P*TpV?L4TNydETC~NoY9EHL(OtKtQ`x=CU z0ilIl|AKGs)Ic}Jg@Y6sGgtdMzKGILKe2G(L(Kmsj|#eMfl_Ut9`jDfeJ%FN9<^?> zK9AuBlm-IuVPhTzghX70#WDDh6@v?@m{P>}74~VmG2Y29OUxQ_dUT)qA*ZsB;+6F| zG2DL?)xrmN`$rUS6Ph2j{zarCU#)eh+fVIRPs1sH(DoH3QWQUiwNo>9q8_Tr*=j=C z-Zb}-F_6#z#+FZT3&ELpSAXL&f%2i+;;;)lopUZ zeQE8o(cDT%td2V6dB#p*tO=W_W?UXJhk-m?FeL#u;@KJ_eFFagUod9v)t%w97y)0#Me4N5tF~8^t2h#QOGbq`S}5qBqnVz0R}a#Pv-_TWY^wP zgsyR{{EkL`we67sSRXy3&>m#gU7b~$njq{wi(DZ}Yq^M=guCUB!v zM9k5O1*NJN?kcbrRM6L zBvGG7vAb>5X(3c4%e;0Lo9F{FYkDnQH;c&H^%dKK* zb6&#mxeu@6Z1t$pZOr`;RlItL+|wS}Q$~yWJwoP`H5zrijP;vp9m4AMe4ni6<3&A3 z{#ny8B&yeSnSZ;e>#$=(*7ljvc~56!kv}pz?>Kx#v)m4hGeW-BkdEEhv-SrrS>ppL6k?hJ>-I5Du<{XL$r58SB_2KMs#8A9qWiu9!8rdu@UwG zy&JT9(2r4Lq=k^x1FhfNx`hy}9|kFgY5yhWMn~vX-QR5_UXLt*vd-?-(1qZ#t+p%YLhZh4Ywvw$9lQIgQ_ zVXGzd8?;yw+JTl^LWj_AkiYhqzGPg-10MvVvtWqTKTFcOz~@qzr;! z5Jqwk1cM+Lyc9PG20?(Ba9eO&agV}n$9*a8eB2vxi=^P(h(RmvQMm26FU6gYdn4|_ zs@2V%jdZ5zoFq@`!0%P9UN6qvSkc_sJRwOjQD{C3P1tofi(^e=TPsexV2I(D>wog} ziZK6sC@}a&Mio|AzOm1bK&1x_h6Du-{y+{R@eDuHfxpjoegtE&TIh8TyOfk~jrlR6 zWUS%gP`XwNJ?`PZ^6FF%;E3HzPU4+2I>MDde{35psN!fSQ$-&K~~TlMS7U#i9dbr zm(esBegzG^>RkdTYj)iek_JB%%7B+uaf;N+b4n#nreBWxhA`phS&THe7Hb5d(+9XB zm{;h`0-r=E=NMc)8YXm#f#{S1%M%KiBlz_fPo5U7V|Hnna}CVP8YbDmaHf_QPu#Hb z9D%8`V3=qFMQIQ-lh$huZeqlV05dtl{Z=@JOv-bXFq&DkWqTl4gKHM8>Z3?(2*Z&7 z3q>2kFy#M)s13|)hWtHL-4KQ$KZ0r%!Z75msFooNL*9c*7{V~*1E_KaCMO#~Kd0qX zyR|qo`;glm6VHhOnBytgkLGW+UV`$C@w*`3K{|F*ykNIxVLn zU(;ryspAGkVI@S~XCj;&2zd`$mJntdLjF2(8p2FR$TuLTAN< zx79L{)__RpsjUzdvlYC6tCtsx1$@;WDr6hGWw>39*HDA}+v6{|Or@&-Rn~^;|J2%H^x^l9! zXUv%4bk4}h*1RLr+i{BUc02(pRK{wDE0(w8`*c;2Bsi`n1$50zeaq8pbkuzSwnxwj zZ^seda2r8aC!0*2RdFfVuJB$EU)+H@{}||8ux`9kamVu3`z7EP!<77u<^&geEV1Zb zMR<#07w5p{^BRvk7M&OPD_|SHg_{>xV$vN$c&~%zNg94!Lxp!U-u(e~bOswfTnsjr zmtfkF2Q(Ve@rvdBmvldhgYHt${UHuI8q^o!pre)jN1Svv5{F%}^1-0S#h^o_ol@*B zDX6VjSW#9uXQHQOQPF~h6V1q~isH%wkGp1~lO4l%ao>)+Op#|8x#wI5n{wlIp7qYT ztzKtQM^p24jjI~lTiaTF*Oks~s47~}P>drLu4{vz|Bm+7WsTQGXc6YruNtdNr1WWX zAH5!F)&6=~mvwe@b+mY$84E6V@_d0+tvB;1!6KZ$*V=~T40vFnasEOW49jVH2g@mb zFXY*SZH+i{16LS*S+)6h2@V@9;{k%4*T;;0V)%)*7p}CdAisDVBZM$le!$JAoke?884wQv3#c?Pj-`4s_RAM+6aVtcr6qJB7XS*&QV zp&cP=k=kav6TMkF{Y694U)!K3ZP1r7=u0>FtA~f`#C}c3pf6?6mu%#s8e2F+KVm^z z@?5!FMRJD-CR8rk>GC{aHx!%}NQM>&ziOu9P7r4qB?^dk3f&^$Cg7Qk+acC(I0Z!O zA~`sBD>?jtX5mgy?!Z%Wd=-!rw?p|po|5CIfF#E+0m=0wj{%Y#=$f#?g5xNj)P9FT zk$zS{{LV-h&=^z*NjDylq?-sx(q#dXbkhM{DL57Yk{tDbB*$_olH+DTS%M=} zKd;m)LhALq+~P37U2b78ce$ArrT#5G^_qY=c$}I%N#{8>9M4K+r2?s^goG1<_)h?Qz8z<{gTs$=4 zwW5$kB(NP0OrUI@41opRiPb@OKkk#&`l-_?@Yg`?(tq2iT{w$4^!pgHsU3;z-{FMJ znz5k6KVb1qX1cR;w^9O9KHO;yxh|?+X)sVE*NT*E_zN=Y+y5Bbfxf-iIdY^Lw75@N zcN)nFkq12k^XDT5-{@U7);R^f$O&x9mj@qXS30a7gXwu6o0*Vmd)dw!`3}cNV|jx{ zht(uI984jOTwa-6gES^EfqhAXzT=Ux8|N#-6kLz<-$lYx5V@=;Y(LqiCy4qW>l4!^ z>q)smx6q(l0_Ymt3Ci_&O1dsUGQ4g;GQ2MWD#o248aGMzTl}7Y+o9~iQ)=aNfEc4g zc@@to0-}J@1jNntvR0NFkQWfs?NGJ=;%JLQc@WSf0qr#Co&iLACTjHjPg0*(Y8C8^ zCe1+~EH}>hPSk6IK%lan(GmU~v$Qg14?&j6ctEro31WmvmND}#%YtkICTUm zW-y_R)XQj&py%Yr*GR2}$BFI6N$`d`4y;TT+E}A$BO$^v%wfi)~jRB1ITz*uwhlxm)YEFQNe#D7D|egZ;*Iy~Vg71`~R7qR}*Z zT6$ZWqVB{yYNFK3^8xXDD?y}PwvlWVb8tHZ4M&6>qRb=*?V;qT0yGzQf^eKAIoPUR zf!o1uu$*Pk&e0;me5ScL{He>?(c%=Z8rz!)G&!4ETUyWw*S@Bm_@?$XJ6mupxPIRG z(zVW2zAmqGX|wYhXST9*h3Tge@v6qAX64^EEpZ>RX}-dTtMJ{6!JtNs;K92VCWL5h z8YpN4%xXoUgfMRWVl@e2mg5(@IUx+I@Kq+v!}wKUV8TDh8K>34PjZHOb?~LHM-ShR z6f|GLlLCIJXaB9yG|Yz8@+!iiNq3HY=)q{3QG$jYWkMN;KZ`m82GcZ2qM+d?IK#32 zF1bINhAL~d+>9ri(?j2Q34^N)hu41j2Tvyk)Ofumo_y#ScA4cx3{St~xq=~#fb;+j zu5+R=mqcMQqA+u!FzzS}mmiyBZ;ZnDG)(B&?=NbYL`BcnmoyBg9Aw@f(lDU|m>^ZLx=V?GLT z{YB#|i&!G@k5|tPiY0O-t4{?3rhVQ)|;+m;(k;crGBDfeDFZ0pG zO&S+zWMX-wwSJ9IIK>!!w5m36Jk&X-+G`AmoP`2IBtuXbgC;|~*9TzAs?S1TjH*aF z>N!vS!{MI`8ryFyYxg#{cZo9~X#j9go^~{9adVfqvqPTt3EH~WCa*lJ6F*9uTbHje z&J-=iAd~T`xOEl7!;zH2qL6d7JP8!wkf)EvI$~7Mpge;!RHCNe9AaXQjM6f_#Q>8y z)Kg22m(kvo4H8_eVN^IY?)3d^cJI22MJou4i` z6#3K9qu`MJvW_+Y;YUzbyQ)3&$_w4q<*ub`^QW_`fnzh9IkQk)l|MZ@g4p9Jt1kD< zEp{zkaW>+!os=0m(Q(SmoLpzvb+$PHOc74Q)BrBd2^5Gqf%Yki@}Z{ZvE~G>qE!vQ zV$2DA4exJ^po=vpFdEH-mG(C5aw*Ys0_;9;-OqWnvbfl~h_Un-Cna*-57+eYBHd6Y zCC&iN=QTPSxL9)n-vhoKG-GL}aWPA==;j~*A83B2*=>FU#G-ow3Azw%)+^^RG|=!) zslFk+%SHStgg3!~P7b;*yf6V9lWsTg*Ib0YwARYdl*bCM81a4yG>7?tfs4tEMb`nk zHuUsfVD}xD=&Z#^AIBW`V({y`TAMgjxqKOPBb|!!HQc;d+_BCO_iAUHK zOKw-;{p2|4s2?lipvwkbAPzd(yWhq^$L8RjIOxs+-AF1)*cB_k6Y>7MIOu36r^P`B z6Rs?egO25QM;vt2qyLP9j`jZ6anP~Z*cAsIKYHGYgO2I@C=NO_smeK1@CdtN$%FOu z@;KM9|jQ zDPI}%E1H+xSb`-5(P0zYrPI}QwtAbvTF~B9L>3dixY65aya>gMWmFX%%NpAlPR^P$iyqxE}oJ3f(IYv z&tT6PZgp6bGPp*HWrYG#ZO&Fu=t9r%Z%9^f-i2T==AsfK^B?Rv&RF!hszm?e{C$pZ zaow(-0YFT=D6BwFKYnV#2~03ZfuQ3X0bf_U}mTyD%t%t&T`n zvj1@rn{S@}A}o)CGeofd9phuXjB!@Lc&+Fu)U6GSJVvH?%Y8w4adeg;T#{1%Yp_#>db zxD%A^cuJ0E07;H_0kzWf03|5nAnH7UyA+VrEiOE16gYmaN?wkAmk1n}o45t! zHy}=3Un6i211b>EuMFrZK#K+LIG_W75|sA<%@(-P=wnLUSU@wx+lv9ow;XrYQa}w& z!O!o4L~1D3Y9t1}Iq=WHL3rDC=~|H%ODnE5Yol0-5rJDY*p(`zI{&Y!=_?pXR6W31 zBs)?t`nViNo$5U4=btl-Xk6k{w%VA3upV zWKTh$uo6{)FF3RS6ZI@jij^g9S~c69>tkih{{;v1{tP1VjuN@*8!7&*;77KuL@AO& z(^=RBkgEfOhXtibvf5uKCn41y7I^Lpi)Jr&*zeme^H-+|lQj6O`Y7MRk_w#Yin`X+0^5(8pQz81Gb>A>?_xD%AM zc*+{I36QKoUjiiS^-loFP<{)Dp(hCax*m{2)Imx2K7Pwo(Gbd1jReGsm!Kp8lBv2F zkPI)|fZTw-FX$=&{ilHH07)I=qOE%19LgF%KNN4j0O&e_+YD%_fW8h$rsX>Zv<;Aq zO|(_X`1xHBhuSK%Q^V^(L^CBSO9T!R+VI3~zhg1#2G;VxNAevWfO*?}v&?Oe{hpnO zJ65&4HX=y2KO2%Q-t(|>C*oB#>WMVJT8%`WWR2v?Ak8p`s$g|M*m+TpP_5W3F40WC zhO?Oyxp7i>7$Tr3m4@EQg;^14t6OP7kLXdhAR=&eAUvv?Pm}UlOnGB?aCKU`^@cX2 z_;F>RA!ZIDGjJq4My)4Mqc_s2{>RxDP<;6{bupVs6FNpI8V#f{i*>pMLt`0PAw55i)%e)3fSZ>6rpScB*VKKkW34Wg-i?gY00$w6p&2I z?*PfP>;oiuUj!u0%Nu}Xs!jrusX7fvrpf}0-!^ptd0Vb()v3f$q`!l zs;{uI-}5l2qiPu1Yb>P^D|o!iZ~#Zo9`ALqRl(ZC1@rZ05iYM16`xB@KsVeGrWX2p zbeWA_a}1qG(W<&w%VVzg8_%{}{2ZiN=KK;s$s)f_JY^l91W4w5E+E9 z2}|4eAS^DFwQpwFEM_+rAYz@JzAO>G%3z6Sd(J#|X;0t$_v|U~n^xt)BD>U6Z~c~| z9lalnQn&RUyVSZZuh(9&TSSq!8xYr``Hv^=Do!Vv@*a+YO2?W;9DA0c8#gD<)%x^e zA?peBgEz4ww}kl(}e!&F;WcZb#*hrNoS^$x9muyek(;d-=T$5^=LZ$&DwtPWEE zjlqqxF7cGrfkKo5Dgz`98!Lu{ZU%G%Zik?L1Ww#Q0{447$>mUVx zcLYyK_XZ$I*9S<_aa!-UxD%97s1uTo73dEF$5m6ZdR=Yc*x!|vk4q`#TlR7zjd6xv zjm~EGp!%K^d)?Oe?ALjcQE%*1de52Bw_X2my z=mUYGVK0W8?1*siWCTh2+U>vhE zeGkG>qUkq08usj2Z&gcE2B&?6A;SVsWFa2rLQ-H3DkKouI73^DP0fm6DZh10eY^qymy0qA04v ziURH(-6>oPAMpGt;C{?Mi0=UZ;0W)+!JNq4K&AEanz+)Uzt#0QxxrjOqEU&!)ePoH z^*w??PYg2*KNN^f6{aHB_k5U;i&k1hkSm=lEwaatLm%9a2{8nGj|8#<*W*Jbh2A+( z?JOt=LC(AkTI`#@0*u=IE9$AD*4fl;caEQPk?-QoFL=+pbFpR45{vI#|5i9o8nO8W z-|M+s`$k@})xX<9N2Aw*Q?kX))AJ?7B2!k9tR=&Sk013jj9$Eex*SB=7=#=a0iV^t|G&TgrSS< z2}E_EL=O5uKLhAU+It>H^Aaf0!`~Qla3?BoL?x;xHo!d9APWz@ijYonpz$W$31X*| z)TRRbmU>zVC{es+k6oIlrGTV{tudf40&2zWQ0~Q3@=~iM?{@%saVIGMfu{`RSAb+F z?Bhx3FM!wwb%^hzs{kbkOo|1f&{t_XC*-!tgFj-7Y!qH47y#WnP(jnRJ#@1tpbCVdA3wx&gfAJLzVYmP-%haraI*`Jmr zI2F)X+zDd9k99dgv`exC=i#?3!BA_o4mc^-+X2ZgQV@{rB0T`egWI9}2v5n&?vadb zCmljCy1r)GPalTTXLKfJ%|b*aaIg|Yq&cD%#I%Z0 zOhz?0Yd1R=S>ZRBw2!hLP@|<}C{ZaH4hBnE@+moJS6{=OAiMxc4q7Y8aUUSoo&<&E zCHpq)l*_)&?*Yl$)C;H(w;XCN7SOABt`N}Q@s#z-LMaQ}d4ObExMNACWdfi#@fN#h z0m-z?03wRWv;Yh3TFH}?E=Vj^4N-u@|= zdGGLf6^&7u;$5|RO4tj&_hP2M0Ys~P-pSr|US;i41uMIo8&^5oJG{=0)rhD`>>u(r zuUg&0*?2u}8O8FBwx;HGMN5TZPO(nPBx{K(XX+6A|Bat~Ki^Ex=7 zOOmU#o7)hDl8glWz85%Epu^ z)PpIKVyaFt#QQ7w{t6{V!X>{Dw<*ne&b3&mf$aoNZwGRj#4T+(PHo@XR8f{oJG?89 z{FYYKxmZDiL#sy7B{CF!mt0zcEez2~N>bXm2*k-1ASQ9^yXRKHbw*eT$+|uT0+!I^ zN!e4ICUr$eodrosNzKs{3=bKoU29vBLuOvQ7ula8_U3_lsVpj7&FSWlcD*6Zz+X4NdHcTxB*dpp0|kwM*`J~P4`E91%W1-}<(Xx|+>c+?CJcKjO(x7S z{Mux~@cV^rS|~2gSUhaPTo24v6Xs4}UNm7I1%~|`8BX}hdgkwJJ|9O48s-_nh|4BC zAclvN0Q}i}KJp96YWW_XNx1LK{O<`e#PD#~!?s$ucYx)*@Yh~6tBf_AX0)K;z5yp7 z-(?vKqiGm})xtdkGXc%{f;&5!W{jZOjpw z&aJJCreUwwYB_@^$AcceW7&1lG<;*VEJPA626V|Q*16F%?1We??5$CY#$S1QpT6x4 zb6ZTjcJVFTPiPpM;uQ3lu9q*wTM0U&Fq2J~a6gp^MmU`I)-MURX_#>a&6+5h%~6;w z21ZZe15ubqqA-7s!W@XgycC7$H(|uivgSsrJ1#x;K@$z%*r}knQVg2UXqeFk=1L87 zu7N4iFd-kEpVu&B44PFMCfUH;u31di6ap`%#C<=2$6s9Z+vm^@B8ilzf3UhB1=6g|?Uqxa56ouIvg?TOtb1VvTItpW@ zK{b`e`B9k5qABF(;xhDQpC^ z%e<-90j$+BS$lWQf4%ZqJrwML(YQ!s<~m<+(Yo^b(c*9Qgt&Yf7ir8~7XSkiRDrow}kupmCAL%yl6!R*RnJ|2Q=Fp%B*}H7?SaxoGcYs|P@7d*ReqLtHOvT%<8` zT_m`4CFx(wyyz)BpN%9g(wMnur>(|@>km4fLo1_mU8!-A#>{nz;9`r(tN8w+6(Oz_ z8W(BIT&ci>%5YJ_i};+@x>Rs&!IM{3-@1QdJM%ryZRt3_Ai zdm4X*K?J=t?$o$QW9FJDxY(xivVCBEA;k5t#zh)4R~j&(&G<>@Kl|+v*M5zQG-j@J z!NoS6*PTDfhg#?vJY9*W8Q;LR{BrT%<8` zT_(6#KY5)=ybA@U$E9jqq%m`40AsaqM48tg7A;2iN9XF*xJYB>x*Qm*#fc}c4+}q=m(maE8uYt#5kDneX;)woDw=AveW?8e^9@4q#~bqTw` zxJYB>;#ZZ`f=;uz{_&h2k{PcX?r*Vp@F~`Mnuv%ytc-^xubwMbupJ-g9F>}oTCM2(4T;=Kuas9W( zMH(~LOu?mFo3hU=JQd=as1*`v%v>lk#KrFgUcpyC470se8W(BIT%66ZTBxnOy8iIH z%urlk(6~rr=9&Xc$fxrI?LYiUi0h9U7ir8~Fty;)^VRh1KTraCjXI`rk;cqL9kE*2 zLh*Wh`9rP{m;GGgq`Mz8*VVvUExJ}dnbQ305Z3~Yi!^4gYXleDYhF)X&Az3c!uvEX z(wMpOfw5Z9H4)eK*^N*OoolbgMH(}g3z!hs4|e<|%x=7?agj!bWE7i$ap(mpFyS@4 z0GLo4w`fNF4SFc>=%{g#2I;{svy&5y-xyoOVmTPm-fLUNhNB4IM0R$%8o8GhtcWEYotiL(uNvf5cnWT7UAm~bGvse3!fVZNu4%CQvAVITu+m%cqxe_Iq@vqMx8tJUL3G-_=mDpW^9Z}b`&!i3d70~uM{ z%rC<0mhmRCCMgYFjh&s1>y2`gKZUOzAAQ>xzh#D$29$hFM<-6jsc!VH;JA8MS$lD7 zXY(>|M<=`m$=Q;jedBP5x~rhGxeRkkUO1+Pgb^Y=<_JI4nlKTsx3Sa9Ntw<{NFTEW zz;vvRKyap`vKfy2QLzD*ceJ+S;Dm;yt?iAS>lbir#`q=5D)dv69VOq^EZm+6s9-gw z!$h)Gz8$Gu%%-ewSjM^l9qYKUwb?aI`GjWzG_Zs{UCV2l*EBO&rJ>Td zN@!51+8gPGLJa*%KV6{8RaG>%u%xPJo=Z*%=I6@81>kikKfR6d2JIxn0E-RpoQtb6xp4m?q87F$Kf`!)8kJrx}b>=Xxqi3JWV;YnPg$ zgX1MnaZzvxE}W}Vn9rGj3o4X+!CVB; zxmqjrA>3%qEBBzV-DNJC4!w%b%%7GE7g^9T{V)pMMHkM@sI06guPiQeaROKiTb}|p zm2qJq4!f9FF}Jw5)TK=g>*0&};mDv1UGqG}W$yBVB9}ICJS_PBNhwhjM1a#W*z&UsBSohE$3QT$S$X(yEGi zm*K(wl&1qm@P2zd8&lG)5WmQR8K@pO?)`UmMRh6alDoZKPSjs0uo;q~Mg)lb- zo_VE(WtGE)fRxP(1v1Z+h+>bcqO^MM+^W*jVai6PB!4;!2P$k74z#_nbZ#MZ!A<9F zIU(0-Q?*LMxovn^lat%#mKoStg52Q>YFClFvb?CG)Dsf2To7Q&EX-?hbx~zi z^}Gsm`nASaiaC^bQ3ze;AkYw%mseF5mcctA))Pb|YC2`bH3iI4aizE;JO~z+y9$fS zi#?tSiW#P>6}}9`q61K)mw|-`2!bmQOc75juYk3!fW4W9^$6xyMRNC5}Zm4nr^=4EfxU#?Yk0gjjSRBD}w0F#HV;9OIgdI~Lt4r0?e#5Buzu zf=rx+5{qs!=xhjNDg}s(gEz70u0TQj5j4j*0E&yj#-jTG`S>9QD8J8vH(bkb$D->5 z{)-sII>~`7TpTuzMYja;F2=Cc&t0UF=Lf{1V>w@TGag}Ata2gU^f>68 zpeu@lj`nU@9CVXFw(M8uQ#yjr|c!XWC%8&ZHF%CNF z+r4qnO$6OTanLcm9dXc6zJG~>&IP*HqUfT_B?WY8x8MLC5aR>rr&k<;-^eif%l@u2|*Fa&g5$$9hl| z2OYa<^-*-u>0>?kP840VS6Zg;kvQlmw?D-}$9~fDanP}UF>(VQVOOm3qrJK^4m!3A zt~ltJ--bBoJ`1|`IOy1)x+@O4&w=hIanQ{G-N88M81Lwfc!XWC%8%u8MI3arYh`iJ zIYD=09CYcRQ{$lf4CsCq2VE-Yo{WQT4Cs!ka2v?LBXC+NI!(6QftUmSEy-`+UrXgA)DgO2(5XB>3w_m967kFYCNxzL`b$3Zt6 zbaUdMWBc0`2b}|So8zFff$nQ@(mfa_-FM=o`+l5s563~5h+)8wc!xP{tWsbYBJ8p*yloP5-px%Im(=kE zO--KGt}eVNYHRH3s?q#13m&`^;em4@_IL6W<}RJDXhmZuW~K|)U{0cODK>s;@zkv7 zSXI4b{y*uaF7uWjTU%M2gdN%>&c0r)p)fu%ka8{d^wNDOP=6HL z+ON?z!*5KJJ_c5h^cWv-uh9^(r5p~sA~0~^V)!q6rA9Ch8^R*Fzg_LG3HXj^(In>W z^cLvJm=x3fb!0;RA8~I3A4PTbkI#~@M2K$GRfD1|7!?H}$h%RqdD*;gvJeO=LJW|Q zgpkDSE{GC9L#o?l(YD&^Q?>D>t+lqrDwS5WAjnIliWV(ZYOzv_CaqDa#+JJO?>Xnr z%uaTLX`j#Y|7|`q`OcYh?!9wg&N=taoqHF>r$k>5AvxqZI^}I_2E3^Q579V8t;k4= zH{x$(<49k~bBtq-29JgN7=?Qyp2I$@qjiKYX-%WU5l;^-gtTh{uYaT#UrAG6-+Ox0 z%C7i8KN>vBQW4KFxf^ajnAfo@Gi%|YHS5EkqxDEew9(!;q|rHB?d@BCc&NTGClV9! z994p}LXa!$IfmtstIb8Oh9Q6txqgs8HG~n3Ad|I}?A&e!jXg#dcJv~^4(7p$E;ih`hV=riBsLS*^ znVx8=2U>n?D}~G}*r_nE8hdbzF81y~VpVDp2dssTb$-IVSPvviU-uyyjp5{*U&pP4 zSNR-0UDl_LvUkuNGxg}tOB6kJil_AITh$Xr?57*CqdI=D0S{yBSg$vhkf)bx`4ntJ zeW>&8wH4v^-n$!zVB=j`j0YQ8hdjq;N4zJnP~ai;fYgxsup~J08mkG?)d{tnptQgO z=$Nce*K9>bVE12R0qEc%TE02OF@N8b&m7}kgUGyIL^=I#TAGlSI8<5$0nY0!z}ee_ z1&}^j(bNApg{g6$~vPaTU6;Gosc=JoP@6giT0dYY6z!4$02 zM-4LKIfAtw^i9{%j61du#R7|A&k+D=u2^g;cr@fWtgDSFQRDy=MyTD1b$&NdLuwqN z7I_YN4(f@A!jPw@{6I2p@L*NOZW07Rh+%3aCTm`{4-oRdC3joYs0nhtpf5fAE^%E3j>Ktc@Ss^ z4kxeLEV9qwT4a9-RLQb00Ez5hfrRg4gOBc1G2g!oK6?2?ipZ%=0D7L$44?-XWdnVe z5xw*hCDa5&sdZ`_fwnX10;0DTcI{=L7nwF~2;5;tB|uvlT@UniM)dKjg!grz7n$}` zpl>qT1Jupv_dujFo!Su~QCqeoSxC&uACC$x9W+5>fG8h$)AEj<8(_rK=Xbsh)rA{S zK<%T@hV6UEPH0&7vvZ%Rx<<~fCn}$~n8m82*|P=3e^fdcBVG#7n@WoV4#k>(-6@|a za-HM)z0j7pK@H|m+o|BE;Xo`Mh)Xo8Ur`!n&BFpapE$~bX)wIypLA}gRdTgZ@JUDU zfzZ6ipq7%6#G%g-6>4cc{nHx9HEOd%3&jMZ)`dKzJ}=bu*KA*W(qR@!Wnr%{Xbq`os4C*1`*#*_I4SFP{ zGP?Ob{Z7QQS&^ugGBY?xx^;~bJ)#Jk*XtY|yWAnq0iC=-CqqqyJo_b#K3%app}(hm z)){qdIsiV_+ecKu@N~8#OBJZmQRmWJwg#vJeXs!c?Tqd)zUOT8FCb3tt4I_aGL_T$SP&$17$Yq-Age zYC+eeby*0kqbHpg&P;P$|DwKv=1%q?`H2R4tPCj|Qi^Qf^yEqH=J2f^>3n-(Pa7G`I&?24#I@qs+UIAzhaDUUX&=5ABIDu^s+V?_VL0z2_4faTV z3?;$47H%Xr930j8Szs(%I7wB=ZaCA1bBrL->~*2!@E)ZL#v{+fEKCJT!C~i>>J~%S z*m)&q@kr<6&Oe#f43q@bYuD}o`kZNR0{sSulh=Zh@IJz|gm)b1Cg%GBNWwc6*S}|p zQ9vSbF_1{mjDYKK*tJZYMS_gsYL;jO5>Gf_(6Bm+qLJdD$*XNZl2VXjHQ9`Og57GSEbVKw?b414J(wom!WH zb^?9Lv{ww;dj{?AKoZL5#$8$mU_VQ6@1m>{-D_uzJ?5&fTk8K)<9v*bGm^u`*>enw zy0RJW++M|I_!)HfQ^*ug`K){B3&`+(ruZ01{-<`hN^g<>jU7fdS*&m$S>ZlP2GoV+ z&T+a!%`nF3Qm_3`D0tWxy-AED8DcEImO5)SZ1AgiKwb_V-4TAWDWB1;;0ed3$8gIr z8eKkESa{T?i6tjG;@M9o4s_Gfl7%F0ji?)t2o4atZSj9)|F43HW$XV87#ySBamF9( z#~ncMdnqWZ@!zFLhVduujSd6b)B`6my8FrKk}V?Ty(=2r4i&3+M<|SK{f(}ncSTF5 zvX-udW)FLMBi^m(za3SJ^ zVS!)dj7m0&UUhZ(3H4r>>w_8Ku^OS_$d&)b2TMmL!B0h(}6_dY#=d0)F%>&SwLbIsDC9!sKG$(Ku;n}tb`6E27;V+QM+#f?dH2Z zK-3PLtkxyGb72-9W7<@p7a0`-Nhq|CtC*QCAW_*r0uuH78z3^qPHl*xEyCVX; z&kqFWlQYYr7{ZiZQx&$=V@f65K?c+lafbV5ErgyU<6DP88Vqa-JLFPS+-a&quy!`I z8rHL9a@gC8$NKu|SEdEe-S9frf1Yi-(nsq*?-)YsKfi8S|2Z%WZsD38-Dxxqk)k&; z$Qum`ZeVg260&hMyN;@@iN|q%l+jZ-Q$I=ej37VI z$<0iv_YqvnNF{~P%XhCts8W3jfTUv5NM#q_{qL$2$~(GJlq$4hxUXZa%O?9ebVP?c zHoSzOD`R@9QnFLtMwI~jtVJ1X$2dk)BgMM(N+IeR3Z6jT-h} zx>41P6vqo%$FWQn!3a)_OlsDj)*K86Pq5Tf(!HozdWFK)E`7G($Vgu1ZqLWsoiHb! z-bR~GAC^zegYbT%YM=&$cdJ1r^$b)g64Z&)kp9GV;%eM^5{FY;h_fi6Wk5YlqcRYs z@k1afrR_je2b|hFIE!MU+VXd%(Q3e=T*d%NC|q*?tDRbYfw1&mcrrGsa&(gW(XqBn z3tX&}h2ySgKuXa5B|pLit(Eijh8{k|`L4<;6#)jP>N;n1jLu2aca9zPrIH}MpqCH! zv_#Urj*Os@Lc_74in4d@G(CpreKF%n38HZFh`1_OeQE!sbz>ezxLT!E7JiMvK z=O<#*Dv{G5CibwQWwNi6=#$p@zTyFOzKc*TIZ8ZWJw?qYq}LKBf{zwVpcg~)F=nmD zilvlQ`t^q%{C+f|Z_Y)8={RIR8qs7KxRzneBA`t;oZ5{zi^K{bksuT4LS>Mx_e3HB zn&_MRfnLP{vxc+CZUz!rGI$rV?DIge z^<(Xv4hiK_TuUf!Adx5nlDo9lyvWW4B3`>zgR@912O=G7Zqet|?gULjp2b2)=%DbG% z9rqb>kvpiTF+do^#$n(cW{4T(bt)Au`4X$dBsC6!O2SoudC`7!pX3D%jPU!jc00;? zF&w<%BV3b%PaZdU;AoV3a|`eOC2nf>kALyCK2ktsJ8)MV86TXLUU?S0Sfzf8IVg4v zN$bS^8~KzZ{86tZ;ytW-E~LPEqR-x`KL>{Y@cM?{LZx|+U|bM=CJg*Fdk!-`y^P;X zc@Gg8J*m`;=(CjD@>r{ys85LS_>!a!!oLzh^tqm;vM>^sLzt5)<~qJMoHCg#Ahs>O zlm{L$WRGrOJ(2j7NIje8I(d=4l?v*d9?(}A5TpMT({bznY|z`?R}VhGcyYLrx=)d; z!g1VH4i7R>!=i0H@Brb3`|)Bjc!1u!QIAIrzE?$8t>Hr9%32kDc0DqO2{HARh7l50 z&aG6DxqfE#I?8sRypm!tp2jTW>L~_e9UG|oHDEoZhRSLB&+DntRHI*2PmPgd!U@D+lee@k+9Ctaehwe$L5A_bj zLQpSc6b|t?vye#Xg@}c48+;`OUj>lZ__;vBcQX(bsZ;wl&RvYCcklwEpW-Zj<}*NI z8@B?J^wzDxtn0_x)Ma)Bg$ULXm%3P@750O%SHc?pn&+yo>c(=ddD zavP9@vJps9dM}WK_b8Br_c##QGQ0K@AgM#Y2a*yz1|%i;DbS;wzSLyB1SbJW3C;qN z5-bCf5^MsJ5~LM%A7R;NfwnW+4J0M_E|8Sqhd@$-p8`n^oiNbQq589(1|-im14v46 zG0-s%nb&LOC;A#_@|0nq5~h6%NOJ7~Aj!4Ifh4x44D>6YE)H)eki_;fkmTe+Aj!!; z14$fz1(KZX0g{{~zYaZ#FKmGuBROAo^d+rQ&RWvC(bg`>S%?d+i_tAfo3dRuj!El2 z9Rx4Ccnfz@IFhmpfYNY?7P*U`o(2o$>8Aq8)8_z*1ZftLAkFekmY5GD5;p>ggzl|o z{Ab>381J-GAY#l?`b#3cNH!HcM0CffIBAF%9l=+wcx{Wvx}a+5ygtv+(+>$b-QEJ_lcE8_mw-z^OKIvhASt|1({>{BVUHhHc}Mbycc3BtgB$S zhOC)DL)X1{(~Zf1>|ntctOrw~m(x!4C5Px^ZOA+2c1n3 zr7l`R;WtY)rim;< zqsg>ag?D4S*lKgn^I?$skhA}CAgPSgfzH8U=Y6H5`nqvV+QzAo7A6nNsnr;$4M?ii z?Ld#=aB_7K^dPRKT2fIy!gt9&3VP8%e+JsZcasqQ5l+CR0lHIpcQ}b0;zh=`wF%uI6!!ogn)z5P2j4(bELw zyWw|f6_J~B#L z!Nou>9CnTTlf}qu%v}MJR!{`=HV&ClE)q4kcHywI`mAM%<+v7!b|6vMcLS});bg@u zEn^R^MPVNR5`|6ep$mtTmElv2&O)f#5Q@VE^nIq$=%j=~JsP3Wi&1HP^a}G4=Gz1$ zAwL52Fw>p``Z*&~!gBWrkodmGfoNpasr?(Mi;*3%3!xLuf=AKXGjMInrGZM){Itxc){j=1UUtW}!j*IQtD108@Y| z>EzcjUDvR9QYj`HobmKJHv9@<4-~$hLvR-n{=i(iZUh(m$cfUb58_g4;VSDBY%y#1 zS~MknpcR*!lj-u9q>={L)azqo28%J0g_=ov5xQAVs9g5ymqzg!DzGtGg^Q+g9B(@7 z>guwMJjeBK_ixPBdk$zBp#0DM_Zt)xzD&IrYlXawQO0Ui4K6#hukKH`a1mdP^Dh`t zO{Y5P)acdqMn;QqZem0ZzzRm>Xf!h-g(tEv8K~Pp6qbZXuXF^Z8z=)v;<(&E(+xx; zaia8SM!cXKfw~Z;Q)@5~+3eL!>i`mkd9Q)!RgKW-h387oH0NDX#{NDHkb6>uVCv$Lc%pN0B!0Q>#vRec zUW0EAPzo~M&fC$8nQsN{E*#R~1H);EN=#H{9sqdOJ4!7|BpXOX2ef2tLp_xtU+YHe?aI2=aczgZBvQ)K1gM z>n>~@SC0r-VaE?d@Gwi-)^T8nt{fFz2@977S9i7~5nUx!gLJRh6`HX~jl`b@8Og15 zpi~@o{vwBZ&~|MsuEhf90R0(0+m<5V&tMLh@dXOL zurjlma}QcVy>Oxe`HE5$&Y0J1VXqUKCw2WSZI6evvlhgpR?27%qh;gJ0Z3hcjTRWj zlXlU2dYxR2;FX=P2WRRneN5Cp!Aw#j|0DLbUif1S86ZY<%M3M=+HH=u!CTO~Ff=n| zZCccix}uX(x<{B7_(TRqPIYjUy3spBjd){+x4*}IqW=s{M{2kaE~s<>jaN53E0o@` zXXsCLbE14!Z}xO244pjqDe5r{JI>!bI4SLJ2`qWt=ooF9D1!_~0(Lz%v*7EB>%{3x z2@Qk$DkW&DOi~{-wkz)IX+hRHB8cJf{ry9%sg z8HMe!HuyEe1k3juOrky z;fQ?|{sUY~8EyuW@U{R+`Tq(?%J5AfDgSqYx^RepD6)OH7Fkk&QvP(uDF2S0QDoO) z(NC@j`VGfa$#>}UqyDR+{+Ut#)Tlp`)D1aW_$=LcIhY>x-w^d*8-FX(K_gKxu1Bfb zVzj$4sZnNV5pNVXdgaCt{ulN;p-qm3)Epz4b;a+yu!6-( z8Z$PEF@3{n3pZ7kU>;L)lh8G^gBV#VU*oK4;9OJuSQrcD3A$)DWh^wI0 z&o~oLm3Ri})s#Vemm1+~sPcC02B3NzPM8TzquClVgH&i=1Fehil8vM$>EsdAZ!x0g zNW%+Gej6d^EnLfZ>W4t2oSpo>;YCJd*J*?ltB)AyYM^euOMb>9jOGG~eZCEdnz&P= zci?jOyFmYB+G9XnjGh3J6#NEAQt%d#q@Wi_QZQ_Yo`SIkx*SMSFcatz4lf@_Qg9QH zq+q>qcO#Ib;9ej}!9zeI0TXgt4^_d3aafnnfz{2`z1NIH+PnXPHTsaPfcHkNTaKt8~lNsF*7Z|8?A&qOBXowCnz6ro6GE3|_z>Tf;9nTK!h(q{RcYpWuiO?0Cw>R-xtBAo%b-a-OQ3Ns5v zl%reZ-qq_7Mtg$v<3+kN%kNzCgo=*Ep`JS0F;8g&)!}-IoyqkyjfP&J>uCxH(aPki_3k?0_?aIGy50E#I}aH{^O|T z*SnD50pq!f-s@t39j`YzeDddpBW?0>a}1DJ$?-s^O&H&oXv~+`ZA<)xI zqYjerkqV!(ih0jC;&tqHmCLtAet9y=clGFk4#z@SqlFa=6eZ9 z-v5&_BY(xIy$wWOFUB%}Uc`Y9s&Q^)8ogrrg3*PBYMNvyq+%eEtpK9X@#+moWN!fy zS^Cya)Y^A|M48dIc2ZhAN^;f1xKuL>yeVN%YRJ0_&Qcl%PcTLiGp8VC($g^#fhCU9 zZSkvuZ8u%6cSV;_-Wa}1{}8IePmzMB7uYoB(LMw(X)z81Ejt?Bxbu`p0?kA(lq@P# zZ*~};IDoH-)5+DTk0Pu_o4&}B2Xk0y`GMJu;%~u?3m(9FJgSw`*Kr5cqtQ!Ve0FTS zTsck!gQ0%8kA;tnRdz78-+dYe)s!HHi*fIOks3V7+IkK8gwoSEqj84*5i-W6us8>O z1dLZtyI7jM7EHrAj8Appip|GVBQ*(PFXx%*OBpjD4x6iUkmIKoV89v>`f?dpb>qeJ zA(b|~cQ?LuMdm?0(xeFFB;O~!F%0=7dgBrxY5SQ#=iv}-A#MLkT+3)_F_6@z1qNyW z5?LDm6WLWj?{hs}10=FxAdw|=EaSv48MIe{#MqN558!a}dp&Uqh9j&;n0A(dXn;cu zdk#<+-z^7{kZG(}TEJ?cZ}VOH1n?C`KL+{$hn=;8w4;5v{s-SBH%esx2(%nDEQkO^ zPvF%0jJw0FZOirF^g7T4W4na!Cvpemjjvv>)!HujGVBkw^y#@bjh0(! z#&_q=RrUNB5(5vZ948TZVkLsl%=trjy!qzWfinLNi9nAFdc+~k6SD=W4dClU>Yd1# zpOIv^DZJQ8Ba(dEPU@aYAUY#-Q1v3bp`D3$fU&(Enw^Ia?@hK*c%@FO3{7ubT2G%f zN!;CP%rj}-1@#Dr&^yYc10A@ylBAIp2J84oVe$Zhda_ly+Fb@ z2grv6%1a$F?c@SHio>b3;Jlg{f13==VKLJE$+o|or`E^EzaVB>GABh{t zhM1%QQ&X14H3~?=a|5-r#1bG0nMNbU?A{IZA>Zu+k}=I^fF!))3`EUVo`ZH? z5+yMTNQ`3!kmSY$Ajyr%K<_~cpYH=nFN?+&skEFLt)$Y$h<1h%bR&?M`vwES#L5&b z;~n2w39R74oix4JY=pY?PzzyQpm#9-kWdz{3|jZNTag-WKHO$mw=Y__GZjR6va^83 z;IQ+nFDd8IxE57B6X<0ePOS)Mk(do65>-I;oEN0zMS>LaejL0M8CL)5=pnWBf3{L0 zG-)b%T38PRi;z`0iv9pykT!oMtwJ^wWLkyHlg5hZ^piN8JiAb8{cc=K{bI*$0?ihJ zV`NV5n_mwO(Iom~@;gKIN)KbV2bz|{xAeIQw$9YgXeceU6W)^EeYdc~+mKZxFb8)0WBvR9`EE$+? z^xJSDLO2pGOu?ATVf8ei94G&A?W}P75e`#yJWW`H;b1Nf^EgAJ8X(MZ9A-OS)+?nO zCbtZI-?eApg?_T}E(=zo`&9BHB?uS=SQz64mp;WM+*^g!Y4kkCppbk=c@U)~->2E& zdiLt+(UXQQEx-3mV-u#E&D3s}d|GxwD0CCwI6i~0R0Qn$iY=$l&ljXt|qzfTqt z<>{j4(>9}#Viu18Ru}11i9l0PBUf;GV}r-yD;P!quXvb7p5@`uv)*xRoD6drGq44} zAz9T7(=?HS9f3m{%PmG@5yj%h9ce7&TMAz}&|>DR1QNdGK%&yAQHVqbkVxDK)Xoy* z{fWd+foO=!$*V#>%;>i`i^=&bkQkazfu7^LU*h}-qhSb3jLH}wk;noP3F;+&%zSfz zL}CGuNVEWT@m-qdMxi@3>VH4X$Q<%|5;S=tnpZAy{2oZ+_%qNqSmHAvF|qV|Ob|^( zlz3^#OU&+UAd$TRNMx4*J;I^T7GHwC21L1O*X{z6G(QH^#e7gU>Mff7n$~d_@g(v~ zVR6KLb?GLnb^x}BHwB;C)B6!aLpU*teT^}^jEbYb$i>%y&U(Z+pp%p)@3gR@3Qyvb zN*ogszTQE~PDKb(O{h!a#9`N5IExm(2uQRw*+SvV1rokOAbBfWX7DWmq9*L*VFAfD z>fDIz9eju4pgSW_WOkkzE}q1LpwS~a`Fp817|{TTgu?ng^S^m_SsA_{#4kFGsS7tH zDgaq>g$Ae`onN4&NhvrmC4X`370}ptJFwokUKg*d~2Fg zQ#SRrfDf-YbXQw~sBrhO_089a9iqTodB)~|=dSoO5 zJi;urHs;eriTH1pr?_qB23#7S6=C|Oig13&&Iopux(Z2C-VPT!!xgO|?*WVw(6>bN zT?pH!N|{50SmarFYS$rhH5{ADz!YO`B3?}DK7p^&duQY0+~}%$c?QaIbfEApy1s5E zEkvB0VSY$YU-Hto?qaB@!-W?v>3W9?d^f8Hqz`MMrcVS%=td%?TeLSCQMeDIA-7=J zVzLPHE2Eh#B-7%0`BSIXrf6%uNUB7+!k#1X=@Lo!NLcifQYIpLx?mv9qzNl}FWr~w ziom6o@~lVRC+g^+`l+e4$bMMhGej=#DWp=;s`V9>OyhJe$QR&{eiNzq*onzjPfqv}d2*cy z;a@mpGTeSf)aFGu{18ZFp9H#&<9G^4^bZYuJdVT3gPvjr{)}rHG z22pl0qSxM}N1WQ3KzkTbuWA>giwwR@@c4M>Gu`wNh0-oFFYbIAV$5`BASl5XrK0&V8I(+zYD z&_1RW8^{NA8`J0uU_sE@5s#C+EuJ*4dr)Dtm*kFpLuRWnxqVoe5EDNfMLQPmJQG3G zaxi0YZopxe{UKbP@HzD@LLG;YucKz<%g@G*>#csN>`n1Eba=lxR%uhT>cu` zEW>rlMgB`%*xK0@puI-GK3uyPAz1?A?WXl$np<47@%@#qimO@Nuz4wXUD!v&?`o-Y)wi@Y+=8ptnl@~vvDCF>;*yD3F8}g|)>e+aU*s+% zjh=F{YjJDqaE)NiQtWMVrIBD)eU0C>xVE<0MO(5r)gn;Ml47+fw4QALaO>@smR97> z;+my+LhK1nX}!kP+*$)LX3TJ{xVf%He|GFKLK)gzyUMkMHd1lb;MtJink$v;)exG% z5xD>nQ>=9HQtX$~P}hKmrW|x(OO@ItIVmj9F2$ zw3e=}Ft4y3yB>{f=)zfqf&*J^lV7`-HzQ$wz4BNx44hIs{Pf`Rq!ed=rn+S+L}IIv ztzWn<1x=Y6JZEiIK%r~-7XZ?Y;merJ*oEB@)s2B|`R99Bi+&pOo!mh7vSXLh( ziXKZq->QbPX6nSrb@5^T2kG^j>7~lQ)RHwI)L03D8dS9)ibZyV_q%8}c*+Vzr{bt_ z)wH$MtX7SJYL}5@>%&sBr0N`BXw)k8giX-fE0x2=Ez7M5LUh)q-&!L{=E`A~Hebf* zfi~Wt$kn2DDAHnXt*BXED`gY&bpD!Vv|*i_9*UmSpQRY7adH%e0GTfTl9skwt`7~W z0ypx1YpX!{3L_Wf6?GF_Z8goy`;h|mZMFV-3vsxpz{S`Z$&wjT&8bFG+N3Cqg!NNS zMv=Hy1W`p7*CNd|C=Jq)b!aO~Rn5zC1!?mnZg>~_t+k=wC8vj)E%Y6ytH#(oDOMNg z9D&uXwFuVAY0aSitkAT<=H<;TtD1*vXhpR(D=g2?`!Km$S#6-fNZ~J$&6=QTTrO-F z<;UJbqQG6Q+=gc8m|LjHHM=CATbfWGsiL`D-kO^mRs>g|Sh155Wx?vp8yl7_Ycj;= zamF;Pz^+eb4d+7FMJO2IGP8SCL!e&ea8pBbt!q`oQX-(j$4ZsAs2fx&6gi&92!n#1 ztF%B2n-rcT9`Z_ad}RPJe3lS`D;C$bQM@q|O4Gt7 zn$`o#gqtQ>+>D7+>V_u{y_$=HV@DgE1YIoITpdI!9tV4L(b7w^T>34^z}S1kHB#OF z)~1HQD%Jie3?|eoMbO+|Z?PsLt4epMn);QJ)yPpnt(-RTiaIUtYBGnpIr6{qYFGeJ zW7`+B0F_0}6707nbqXONIe~g;HQEe}%an2fZ32oyY^iPy5w3rNi^H7)g;b2_;B;X< zy#4#H!M|)xbK_W#gMLS{LC3F0UH4|Y$rG8_uyo6!WLq?f_02VRU2RQZVrC|$0<0Ix z#HA?wz)JG#$T8QFY?BCDeiN70E)Fiss3aoXQ1H+j6zgwd%--X0GQl&CSn+%18{Z>G zSpAaKf97F49%mZ2Fewz#1Pg@*&D<7B7p~@7DAaFhwNQ@Z>P`!VCQ^{UZ^lLM7Pea` z^uqO!h4LUMJr>GNP$;|1aC&h?eHW8LGry_lVp6UGCEr3>49c|@N(huD3+2b4tg%qu z1mzwJ<=>z@ZlR1uv^2C~#$Eup-$H2t<*0>nA1Eg*lwX5F{UH3~1HDqfaTZD%3e{~; zCX!c~v7#9Q8kKgE&5kny)y^1l97O^~P1PvsplU;LB-zq%CLa1FGc7h83L(jsfip?J z{FlEyqr!=aYZ&wFLLg&+F8lox=&w+SvEigJ&t!T6pl#p&Ho9{Cc}`)TGm)$uptlbd ze-zI%oOx(v|A|1|6Ps(|c}6hL3Iu-+&_jQ6TpiDo$~+Una~hEA+#5fM=b@3nBpZD* za5>Pp%Sxxm^N@6s?Vm{V5}+;ryyUm>JPzh*!&JkQz8vmQL7fPQ)2A!KU*^iV0Gu7XS{dvf6+ z40QJANoO8TOaU0ZU#nU@)d2T!pJx!90 zRu`kXy6}{?-^KIL(tLx9M6V0$~WRDkH%4c7Dw3@N1^r7}Ix>!ONgO37j#6cz&{JGr+ty+YxyHgn_il=# zbi`5ajiWpnM|mNR^1C?7pW-Mzag@*EC_~86;Gdp9X>pWMag;0KD0y)dZye?NI7)pS zWn~;?#8DQw6@?0F{r8vr~ag@Vxl=tH(pTtq3ag-5cm@PSWb{r)mjxs5Za&;VK zP8_8rj?x}S`9>V&2XU0=<0!AjQQnQC{7q5D8n%gNQsCLs4a!;Mfa74cNj93#LcedmKM#XBdR&u~6!BQ4#(`qSRo{JehAGvoq=?5Vbty|xFN}UqR-Py_ zr5;dH#AB7Z43s3p;ZA<@oSmlBVI@U8R;lqUrDyT^TOSFSQhiE_c&t(rSjvqv{kEOC z2fau=H%3!89Y5l+N?i_0l8t(E^ecPk#Yar3#Y&2JtWpy}NwQJi((kODy+1akzNe&! z$0{`mlq4JV3hDQozulQREv@#9;=ia6f>?d#UJc4rGBKOh{r0G!%{}={l*tinfh}b zR8quamC9u)H_r6i_tcsjOsOxF6!BQ4peB$)WE}shhm;~(J+7H&36*%PQu&~mIiHa; zrPGwERZ_%bmGZEZZfJ2g)DU*&h-1% zvA|YS>Q73Fc&t(|Jb12&B!b`LzkC4(M9+=0XaEsE;;~9WO+ZSwUlU*YWrHc@Q&PlZ zl`3H=7tZv{nm5&MN`;gZ@mQrwK}oXF^U`nmFQ)v;lscrOh{q~b21=4m-PU@~`}Rks z)aY|4B-ke$Rw*wiNj5#_n?C+^j5V)NQp97GLh(TAG@R*oOZrQXn{lmDQp97GssJU) zMm3Fo51jv_=S``Hloat;rF@{6wYTN(-G4Nt4l60*u}aNmDgC)VJK?$ClsY9HH}NAL ztJEA&FhWi@@w@f0w_$Acx-nTv5sy`>5)_O-lL&s7b$;#VrqnVeMLbrixu7K3(CqnF zaeZXDDfNVsA|9*MJWx!V^6{k)Y%!(&rlg3+Dpkc&y63Rx2cQ4Vlsb1LZsJEgR;l@* zm~~^p=wG-^sVXH!JXWb|S?U6u>G#U!8)9_t1|>y2R;lYiNwSS05&XXYt^H`Ydd}}u zQp97Gx*n7y+r=b;->?2$Hq?|#QjL{(tWpa=NwQ5R5&XJRm+Ua5u2E9NW0iucjY;8C zYyTLd=WkY0#AB6O$WnUFKY#6+-!S8PMoAHmRcaASjm4RMPd}P^mnn5zNfD1#su~p2 zOZnT|@7`fbO;VMbc&t)4vJ{#<|5E24dC-))NlD#^dse9$P?Butvkczw-bwFV^zwRA zNfD1#YB5WVQc`!lzZWV*m-<{u5sy`B2}_MoQgx3Wc-xf9QGpSURca|qU8tl!X}==R zlv=8!h{q~b%TjtheD3bW2TZ9)loat;rRrE}EY9@%_fNiwX01Qh5hX=DR;gv6nA)b} z_haygy3~0pYl+7yRnJl`oaxtg*(9h;U23tCA|9(0%oXCAK_d8hx4gI2l=_~MA|9($ zBPgavRB>4v8m=DK-;@;bSf!xIAf@{oFU@|T+mxEF6a(>CrJ7huRRZnBi;w=yl)6z# z5sy`B1xuykOuz4D&U($1`i_z!9;;L{D5kBvr>G{T9=@cch{r0`!cwzvrr-JPH@;`a zHC#1u;;~A#f@1oIzdk(mh$&U1q=?5VbrVY|mrncJ`EIm&J?H&Oig<+f3q=7zQTACV zvHhkt4mp`vjh`O!@01krSkvPNCCR2soqc%Quk@HO-k_w2$0`-DNL_t--7ie3Pn8t$ zSfzp%shNvM!xhp~nB>Au{D{XYwGtFFg)6uGC1OgQ>B3F?h{r0m3X~*U3f;u-wRh5w znNk ziduK}RA`ZC0phn3LV^S?*c=*mz!ec zF_*7qX@0}9h5&P8IvQph4#->V2RF^AF0ZY{l#OzL7?8~faX=20uadHaML<yr423BGI^r9 zrIqIR`nBrnh83+~sjgYl7N~A$SzKKgY+hoLMF>+ESF|)&uhger7*f{Tel;_r+TW}r z3BInawpOcds-_9i&A}Db%W9h^_q)EL-}RJ!*Hbk}-<&Vs3NS9L4HVY4tf&pNt=8n# zds|yA$`Q|1Ns~D%@nlUL?b7BNFc(+VGzD>uLZ4HMuRGduTW-#2Tg-&HJf|FUo#(dj z9B2u##&dH3oG2Zcb1c!|!;Q9$pW^Nk_&4{(e5-o*=cxx0Zu403V zPn5Tz*+>#*d<*83mbWzDf{6ihf>du*D$$geoB66gJF+;hsij#m+ei(lh&>;3o$ERC z=%QgoZL?o$qTHT~d5e4(&urj4d^XaSLyrq4+yF$$HQ+NPRrYv{+?FanD8v?cc?l50rZF6l~jRaWS3@t5@@^kv+%NVIsD52cdc`Z#r%%#LE=;gJ1w=%e5 zZq4GEF_b)2Erg6@<~236&cUo+=sK!}iZZvQ09A8Y8+{4IM5Dfd!7Mns;He}eM>WUS zfRZ4LOjFfHUB%u3?w6xARkdxzsl(bL*ldvUfYuqYIR2pWCO+ddC&?TbPIps=; z6*o5oq?U3hW-X;lQfk6i3469Az(zp{7N8lU<;`s|LnZ|o!=en>T>4%H2Bl>csw9OP zOP`Mq3ydmMquIFhprwPJs$*4Val4h{;lr zReK0<*3y#)Vsnx&d_s;5!V(7Ob%3%uP$O7iOg`fV6_yIf%yBkg(mcs+lPpL;EN>C( zrd9JzqwVq))je{$is{=p#i7&05hJCI?@K6u*qI8n&21?r9mn!er!)&cCUW%|92E(8 zmeeZ_#UJbMD3aB?QA9kk*lu-g^&oU6BnlsguY%}ruobzV zc~;bZ##kbZBXV?BDpez-EskiWOn1ChObOg920?y#a*oZlF({;qD!Evt9f{|4vD9DF+n1JtTj`}u=9-Q38PQCH=XDg}2A zbZ)AtVsM24*E$38n@oJ|+!j(Z99Jc}A$1K+O|k9(EDt1FmeC8>rp|P^{LDf#$BR_SY^6A~~z8;kz$cj@I3>yrI@TRm-lf5FfHK&_WH1 zyQC-cHN|bMF2kdG{pbs#Jt9~wJG(m1U7eYm=Pu1JF7^>s(#Nqt))#-CTCB>XW0E7 zA+N|??(vm-i@l|8F25T3K${*IsvrHP=4IK_@QpS^@sW1+G;}P?czy2jf})DDisFKV zxu-tewq~KffBar|uCJ)fTT)#|(s^v>^RgzSz5ePmew?vVf?=CIy=9U$qN>bDLsz!~9UFfUG^OYBt zBrG|K#?ONc$Zu-Fob_hDdECCj5?^jsM4GKIry{Q$N->dgl}}x%ZO7JBGdVf#T*}`$>gOl50nc8@u z7j;Mt^;+5*G)*~dgQud*Yn7r7YxXo1V{B2G`BLi6FDWf8_Eh9c?o)+8&Qnc4X-c6R zDssHJKD0VFzVXkVmWlRB<1VNZWFs0#vF4ZS>J@hztrV;6^Ax(v3d#z-1)icrdJio| z1#Sj9HGAq6b=e5GEyiFYm|{;(K|zI2GMa{*PEvY4x3?rer@Y7mYsJ-AbPKl%tNAT1 zEY2;d@Z`m|n7HEevI>C<>dMb zii_RsJEJ_sI+A;%>M}Z~7+8SMW37E?p2a1l75OMXJk2yX`t-f|Kz>?og&VFa)I+g{ z*<+VYfO*u%5(g5`%XPyY^%WGB7qK`-*=St_C@!_ILiV)P*|TJ6g_tmmT*)hR7v_0N ziwk{)EYAxnpx)BD3#N4@-AwI}0yRYQ(LC~fB^9N4v63-$k``ltAgy-+8`#inNFvdm z+=7a-GOuJ&IhqTv)IhDCS7Z?TW`;H0kfoBTD99=ENvv}X{~;y-ijO?-M1C=hP=0Q4 zUVaWN1Qid(Eo%%66uA*Kv{YekuBRxs%*Uc;+_3?iG;%b6(vsX#R|R% zN$u2DDS+cXOtb43kQhr#B`Ydx- zRFry(O1(a};o4g)P@D;wkv(-vT|ZrbDpLwKus8=`!1T+47}-;?9*0G5Ldg~s<`oqe z`|{o7=yN!Ey`T1tn!gIfcb#?mRZ=oDFyqtm9$1uGFu@*vAHv zU*h)WdMXOMzJ&cOvgg#ec-ar7TWkGhj^x5+g2#*w2R*0WQ%YoMb3N{g(!$cBk`kYp zT0iA`Z0b;tKtZ{p#z~=4?;UT}%mEZ0IsvJ!DG>By6_#p@3)M8aGu2POo>IGne#ZSN zb;4lWubavQ^Ll2#>sl3Je>n-5L$`#lB2ZG=@JTbK&2Yv1CQqL-b$aHs%qf#&h=7wb zGpA3V?s84NV#5g4>g2;9pFP)C{5^&IulIKeE-59$P z2GJ>~H^B3k7(RCz;-%3WwWylgoo^#aX9T#{L@%?-l zp5rWRO{eBjT{!?B&3g1=uFMbAd>M!(4DUnGd%*Li3jn{NI1F`rqq#2w z<;zpx*`fGs;7gP*8$o{=JoCo_;CCvHMDe;1z#qW##f8kqpARPDdnrlNmLanzj1#^o z1B7=43iz_iu!3Wz@GTyI?^A@AIaSjxoGER6NBKR^4&WKKGNfF4TA3q@O?N4zLDS?Rf|*1FHyas z@|ZRVzDvP3dk}n3X&T;3S$>J)C4KVPAoxh_y)+2Ei^2ErLGV%gy|50am|vpwQTbL4 zk}og_K1$y=2f;_?bn77arh)H`LGaOY3}1#*%rDXNlHM3M2tG1vvj)LO;nfU+kL*C( zAo=bX1YbVFdmxU_9j8x;@5mtdGQgKnk5kMqQT{>QYejKswA8&n*}7q9QB-0BCx zNBR7A^Gj47<8l9@LGZc2 z=Nkkc>G9S<@LdGH+Xul%dh&;Z;3L1`wL$Pv`5qZ0U+*CJk`Nx&)VKT+Zz%Z62Em6x9x+s{Bacsij(`4-k&y_dKZ)sb8gLk#7up!{eYgt-*L(Phs=7y$* z;0;BE)fIVjs`K$~>INDiY-w&-QgZ`l;bN8VTKvcSp$1y$d}7PuMl29_)#=(;O&i8b z`)yeyOZ?G)Z^M$d7Jo}!z%_2pr7oIQvZCP@4ErIr6|I=z*M{_PV6oH1bXp}=i`VHy z!@1 zoQr41G)M`nADtu-98@i4D_SHf>l^9<*7$vR|EFywc3xlgFo2z|)R`flsB<_><1Gx* ze6)o@s=j{#b}xu#s=W(#rOOtB#O>t8A*ruwC%MWh>|-jsj)ckc!v3(>dxXsu_Q!e? zSH5FHPDx0_mRQlXm#aPQvB^l-jZGXUB;V(Y=f)-=sabzo^H%&FY(mB1T#Q|a{T_-cTJj|L)zb}JAKAKA4#4cgs6KVTZgBz(^U ziR^C-+V6pWgu~7Y0}CJ8%WXX;kjRH|=$kL6Qmvnt8H$u)54Es216v+CLy-)=7>CWE zT%kxlE;^p4vljN!27qay&P-f|w%kDHND7_rO~yHJMtBSH?cwGg=KG!d0`@&f36_VQ zza9Jgbh^RN`8tT?qG+Al9UEQ)yWUQdJNj&n&R>HP?xZBq{f@Z%H-UoPTQ|(0|8F}s zOu~QKw$8EXQ#ckK?W2G`0K(R?of8m>FVg9vf6*pJIy7@%M2e#lRQ{JBSAmz1V(@*H(wlvY> zMEIdPDZ9qM5{mff|L$;vg28p?RQwM`X5viYg`An4uLp-?uPN^+Y|Yty2GFZGUc?3O zI<;tTm@^r*`ZTF3k<<}+JKh}#ZMiy@oK~krj@j@Go#S+lzEbMtPw7k zf^%HIV|LQ+PaLw;ZXKQ<63H3ZWPJ-YW`0E4+PR|}x@{;Z$STgXFlVI7W6n;=c}Zwt z$M$5&@~kf%8z02xV_`16@WQFsU-Z^`%3uyVCYr{fzEEeX9%&`>ggVE85b0clbNzY< ziJodqif%D)2ra_0I;OiirUwz+v1?|yGar}OI&nxSGt346YCa|0Np&h@3wI{VUD`yO z^*ypf3yW1@P1d)aNOC*G}>ZKP(IKfL9=V+K> zqi2EcWkkNk91i6JptVf-xCN+{X|Dl&1Z3CV1bUrm?*iS#=p&&0jQ#;Mm1R?5_-8ZC1@t>c6M*hyG}A!& zKrKwW1E>lmUsvY@l&0K}#u%L>-Vwv;v95EkGi%4v5O#u5ADkiF<%V;t2!6 z>r;C+t38;L*X6QS;1haD{hgQ8>V-Qi!=pRj4vdWYQ{;A~&XuwU0c+X<@X$z)B#J^9 zfkWK!d7LQp(p6O(4}YsnM0j?v|lpNCobshLXbGQQ!tngWB`D1Um_52u=^#*cqgq*7f`f08#GQc}II{ zly+`fQi$ZP9Khk!sv1W%+9cNo>QF&? zc=w{6REE;3X?T*BuW<4P^nxzL^)9AeZrq(=ASy)RD>V>+b{(DgXTt-@=8D|6?_c|Z z^>mw01Ju5%@QlvS0%dAP-2&xSM+#DuEhVZg5ma2LQ7M%4S|K*T|(1q zAk#90MvJ0ww<$C%VG~KkU1=iM_G=>F#T^W$pPfhJarFXn zU#dm*5JaClwevH_2I?N08z57sn6}#JSXZV6FEPBG-5|wuMOB8TE|O3iT~)GOF8aFO zZL%Nmk=fEf^c{YoV1g$?p8YHu^6bUt!`NR~wvC_i*&YvNCc3s0_IOAqY2m$lJckH` zygjpmhh^VkHGW3h4?lY+?r~VgF2!MN{GK*z;StBi?YI~5Z1;ifZk;XS*@clmP{@B_ z!A2YHs!aPr(|*Ccd-14fa91?AJsR8_4epNy`}D-a)$eF`X@SYKh48VC9*krh=gtS5 z?`ZJooT_>RnrPo&1h_5iIbPYZ{Yazoh9!tyY1pE^cjcV0_jtz++K$-Mi;bAW-lHM! z!BFr}_pC-6{-AO>sk{O6R!)KoTiPE<99`J66^w`no7%Hj#H02W#*V{jS;)nWJIJ^9 z_MpOrJniB|GCsd zy#bt;$o49pMKMi4=TB&>xxJXp#cEa0LDEHK9AQKbt60^?fWkPO+BTfUZ`lVV62$W! z4m-P$BJn=1pU2_UzQCEPr&A--_AN%I0o}vse4y(X(GJFsGFk%kbw;-VwKMt_&`%k? z0Q3fIVm|g3^*$bLoBllYTrQxIkn2&Z~5>yE^nk5zhiNsPMkq81UV2QOrcQX1B z&_YK0fHpIF6G-xa_9&J-_z-9;hx`eUg#0fc2{{!CO`h!%pcgrmD}W>p+O1enArMXJ za%w&xF@V<@XgQF?8w8SgZvpxTB<$KcAj$jh8hqb3_?`e7$?5x$i8zO!LDE@F7MbKKP0S7H3A{YmU; zZ<3P9dU{Z>9ns;A4QByFJcki{AHNrp-RNP)JYBesc#c4qij9I(8}aO|^38_c!oG=D z(_5rIdFrrdFLWH978K zFbN8s?_;RSvmF(OM+#JM62Qk}xR>glTViWBi{mEz*Mn;CAu509zR+9zqf zKQ^tT#-%b0oYv)()59;864wPqrBCbYND{dUp=xEfaxl#+LKY+eyqf2i- z_4Ix#+{^z&Z<25L^j4G_r-nR3m8_YI=oJg;#H(>v8@eu`do5~H_3VjzI(Wqbxq;5c zVb?r3)4X82Rstjzs2NE3ZUz#*cAz6T?Aq-(3*Qfb#IK-4ip_r+NM!#2B(m=S4dXc8 z0}|OjgO6Sq3f~AI;;?JfQ4ziifu0A=sZ9V9Ut>DZN~XCDR06b%X^Vg!ViYjY9YEs6 zd>g2W?>+|9#fXOD9%i%)=n+OA0+HY3)V>6|mJ!WAr>Amiw3Fqjpxd=8fW%+O0uq0r z9OzEwqg@u~Gg=R{g;4~ki_uRE+N(gznD!QscrhOV-NLkCun2;jKxCDj+BhIdRT&WF zmtC6+BxzX)BxzX-B;^qXl6<}!=uDQl4@e{)1`>&107(w*0;2AwQ~L{$q>tvLcQNhX zKo2vrL!rx4UIrww%>a_vt|G*-mRKDTO`wr;#68PRGEC z&Tr}>)-&x+tsV0-uKJ}D)T|wjioGGPbB~8wv9`x^g#PIRC+J6+*paL+h=4BB~)8c5s-wlqC^JSh|?--Bj`9mN1B-sO3=BaltsM;Xe*iioEd zed=JJ3Iy;7LwG;v%6GJWSeh( z$Ri_-+(E^#0J|pQZjr-88ZK4>@q|3bBc20n?)5=Rasncr{jjIvnM6DX;ZhyKb&5_3 zdoXH{|M?*rk?A^Q@=@o;oQ8YEm zLGHS$k14vbzJK6mb~V-cp^m%!c=b0RS1x!&HPCqM88|Q>3}-(pHc~>b;&AetsMU<_ z$9XrSU*Wuq5uMjDB1N)@(Gi?)WpoO{TEoZ*M1uuRjm)mdlGzngTnx05@6tG>m?jzk zSje;%ATegQ1BnT{*SPxxkeIM-26`1}3Cnf^iJBh;jUgdl0wm#G2_)fF0R4s~t~dCW z0KLStW}q7xtp>V{(d|GIGHpvPvcCY5ICcPu#C{-=cmqhndk08lX~;lS|EI=X8Zy|+ zahwWmDiUV{RWpsYGhfe$jJK3vCXkfiG$7ix-L72?B&LbBJ6C2BNJ6;-NJ6230!hJR zKoZ+efF$H+fh6Q@Kr1=q9Y9hyUN!jsXz=|RsFnHtYVhf!_T(DtFQS5@;LF<8JSWS$ zr-doj!Ga<6cwDPF;n{3>-GrRd{y*~GJwC3oY8&2Z(jk<>1Q?)Tg#ii{TIeAyv;@fH zFq13KrDM?6^nnTk<4?tS%FbzdTMZ`x`P*hY@5ER4~DlJf<0%AG5(nmpy zty&SGXf@w;t#$7`duLC=@I2q|d;j<*zrAzqwb#1ud*A2dT3Bw9LH${F$@pXIP!iZ) zh*It_K0YL)UD~*p3PS6T8|WHi({c|SZNr>_o^kzgG!eP8`{QG05A=ivdh%+uQgl_e zXm`SBSm!%pc&HfYL7#n$UGZ~0169S?#8Ip&#-=#m>&E`FG4+W6Y88BGf7A&_jx6H4 zNG>^3OMK`kC$(aC5n@u4JOae_S$p;S1f_cQObg}f1X4a`pWh1~3%m9xJ`JRN+8d*L zcZ2o^TmkD|+?DS~K-&9f!TC0>kStq&O3)$P$)Pidn+35_`I;ck`~6r@J`k&{kW~Yu zeIGW`imr9uvM;ZpS_`D1=ltT^kPTP~AT2VV0n#EPJ)^w7gWai~k#q+>!X%hIm30ET zTi&TG_=$Db+`iSLvwDj9R+n2n1;{q`c$sf@tW2iQYk$zdT5Dfq|Z#Z$>Ag zw|fL18BUPhhW&^E?P=Vuj&S}SGvZIXeD5005rnpG!NAHkPMhdfJkBg|8V7GcA6VI( z>Y8A?FUrKu=pFPG>p+P`ccE9dXg^~jxq573(VK}yhtb1`9tv)nkF-ei?3;N-D0u56 zR4M)OgR|!kJa88zCC~_E-@1e78;$`Z{9^Cvf!po3GS9Xb;dq_lz#Doga_DW$do1}p zI~|X_{|a_p&3hfU=-%Y^L>%)5V-s=iL7KON!MLwrXK?HNki0GVw}SVBTR#JcX{24) z`1JSS6}!L^-);9KU&4#0=o#jh@ZEU-MC-`bk(jiiOLyT`H7*BtF0f$k;6Zel?1*7l zUcwX;S5ScCyH}l(jP65M7+b0-Iq{W5bU$6;+j%=;1@EulN}2nT(QV22{SowQ5zt$? z6)4%W&*^rt%Ms0uArcE#hJsrjMUU$3wR_a^B{SUpt;R+Oe64-ec2luxa_PC8Bq;3%zLH%tiMFZ)Jm@eEyIJ-eNh;Ebw? zueMvM zL@rnD%10;T2>$VroW#o9L~UN;icq3_OfsIExREXeH=e86K`OC%b{BaHvb(*GST_g$ zW96|K?AnZ{*|jiEat|3(Wfvv;Z5H$7v6M{q9Paxdd&5kZ%NST;%6vG7Rg@c%=k3Qq zh0BspY4#;XC4e8B5Dtj-G%6=P&qo;uNLm-uX6i8*a1E~ae{;9;fKvg1f1V|-D zq939XrviOL!pwsKPY8+v>6g!T&@v!(c?FQV+zF%;OT9pvzUV&n9UNPSE>NDUyDvTb z;dgcTrk%C#ezsj)-b&jIlIiRPrgl5r-^ZD%+Qhm;_WTg~Q~N=(67mKiIz}foP#_PC z$lr!VwdmoWAaZ1L#=1knTf=y09f5^7oxnkjgxQ##(Ia#Oo8q$PAIRyCADM0X{OmAo z>pt4<)aN9>w2OSN^%UE|K4U>MMdg;J7R+<12v@z4`!>t&K$iwRc?h+h&ia@wT8LXz zMEIC0)Z8UG-0^_EMLy?+Y|H&$Cba1^kZ8MMHh2c!jNI?!g3z1%_EIJ`$_R|545S^~sx z30OA+X~FtDkXF;2#JF4degvfMZ3p^|(4KK<13>o)jXN8(5|R;0Zr{Plt`7f(Q)-*R zrul3?5t9y+Qu*6>$Fe;3y7Y{0WU6Mf^>ER$2sTr0Yr znp5#U${Yn@4P{sxwo>=no_h!ApDW7vedq?$czh zcE5}P@D^+P_Hz6fXS&ZRIL>5(v$pA~C=O}x*l(5(ccvOSD{Lrc64TXtbh;&zlTUGL zKe9y-X{fn>3{W1ffc0_Q_X#=+_vdki#ICdQ#qg|rvw;49D}Y1GHs2S3+Hi$rT+bX5 zlBvIqf_{nnYC#8ZR~pCmia25TMR_~Pp|KRw&5%{+(3*hygvPPGqCN+49Iv!510{s- zJ3!wQ^eoV;f_?+kD`=mC-geMC4*Hjaa!~$M;#dcr?4UCoG~Pi|fOL+6(~eHrMR(S0 zb4(RSS0iDv^5}Xkz4A{d6kG#yPMf$ks@XD&mD@aWF01>vf!;B8KEy#uBX;r%Q9?0wCpE z4y3g%)2|CxNVQ}Y_szVjgK>&Z^itd zy`x0hPg956(m{F-k8yP0852%C|NeGZ`;VeLMsuy zd&9AP8*+*%L3^zRdTt-+ zxlLU(a{;>&(Jhj-T`lt#yM~>30F|Ha$QB+{u2}DUB)DZa`qfUlVv31{0&54@^b@kT z{Iq7ND~afXQqF24QkcGuh(eBhy)|rtk&W3!SBJsbVEmvRh#8oe4B!s|*(ITXFBmUH zH_HPeu0Oh2d9g##78>7bna{uTi(kB4b|FDu%_!FnDOBU8D`Iv}CgTrammwEB@2^ix z=1PV)`#D8<@xOTnSH4DW5)MSo&}R=Prjvl{5X%20#KZ-*okt;Z*v$@D=K=i{SHPNv z`wO^2*0s26b-o6O^{E~x+9#+FcdZ3K3-lVUkPISJ;sJLZF56_LD%`wYUyQL&ddH z4HdU7{R?~nYb%frVD12_5!vqoY4{!nx>9IdHPzwLDd?&!65548R|r}N^d&)EK>YfU zwb?;;0NpLLdw?|b+@iz=7$+KmG<-aGq2YTL=s$Rit>Zu%zSn^?d;>sivQZVF!fg^X z21vj6Ob6uyT`g}b9NINN-x68}&_SSpwF-!v&;!=>4((>3*}``_(2Ih;45Xd3Zvg3c z`~;{)-aZA?D(D5EdO@!NX{i1Kv{Yzpw3Lsax9?UWCyo$9?k5;ZAO%!eXu)6Db*4?17NZ+v{mnu(Ic4q#ujqpUbfr4_rUpK zswxJ#he78vxNsES)^QM=R8zaEMniiq9CSi^2OeppVBD zu+G4}0kIVj9n6~XDnZi>I@jT2rLqrKKsJad-wk+HzFUCQy{$mnTfZGh`JMsVf-7YG z5qFhf@lc6>0yRnqM&Pbh$1y-!b#RVIC89toQ3-Snu7Jfuiz>nMqbk8|B`R@0kVgpwy%)=5r!;X&aYjKF8ODrqQs1 za(;pB#=Zrq?6{xdOVr!Dfrpv_m49UGztE5Rm+IRvb3T~l_pvgI<^D7jdi2c|N%Z(VX}k^*Z!_GV7MCqK(^nKA7+vW>>RYM`HVb|7Z?DtqHrb zpPoH?j{2X4n3-XR#@25`Z6@+MiDkWUnA(N{6RLuM&YxRvgbV%k1Gn{yq8w~|6kR34 zjS57FP~b6=9$`vvo2IKz`Gpc{`^8zib2zTx@9RQJYNotR&&68x+O0-+i=+s&ickZF zahANzH#h>iF~__FC(~9{Tj(caZ=oo>kSCKY26GM7^jSs8j~#+YzeJM#it%G(CZ&y6 zI@qYrU>ghNH!OA~Nhx#Khp(BcKr_{r@1PIbFZoYhk?v=XYJ>51LPxGwS z+=;jXRs-%@|FOgKJg$&zi_?ZYfoDZu08-hzfmD|5%37&uz73?ZKLt{WT|g@FDs5kt;wo`I5dG0De%gIxy~}nWWbtI*cLXt% zPYdGgT!Wx*0No^rHS4v4I49RA=zXA0L7Z#*lAvOst%7QS)a3@C>xH%zXsw{H06hr# zfb}h)O@e+3G+W;O5{NMpvfcoqlCXgFmP6wbVp3?_ey0-LVE0RrC;_@#Pz{iFZ?AR` zyPlinEjyfwZgSAAKv&7zJArxyv71>36tG?bnkTeB0cq@_t>}-2Q1@VmnM=!G5?gC> z`ko#!+jMiDhK3^S+YXj*U-TpstxB9Z3-?-FqVW$63-viTvyEw|o)(*_C;Vq)gNDHw z9j86@R}V(hja&32dOrb7yPKK$i}%B4ZYqf7U@WVPQ@uGt#F%ka?m(|I?H?PB&K)ET zldieJwHTHIQpdG=^F)|*%-p-^A%{N3Lmwk_%xZGS+~66n<0M|j;;w2W&IHn~$7MiT z1j>MvkMVhhWC>;m| zokCm=*wx(BNd1vr9yVj*EZou_KBwyvzG|l0&gC>QI?AF(&`IL9b?(xR)eT`7k_n#+ zM;bhi40bi#(JAkzgkfIPS~lgvd~1+D4Q*{ARAUQ_ZFP#9Vmk{?g*)2AZB5I&M_Cy#cD7v83{ED8riNHVl2}@b#B zE(wcmEcjCp?xJ4OF7XD>=Z#|4o8rzj-b{kGQ-^*F(?vZirpWiUH>~JbflQ-rc|N%T zws@ur)0$=Am>Q;ezVOnf@a5sjo~Z4D!r7HfRgE87OtZgH#7zqN^H*z6`?X8E>P`Ma zn7!q|lY5a}2IpPmD8$7m%dv_TR-;%}dq;TrHDS016RgZAK$FuEr+7ZY9r3WOhXP#S zNdPDEks37XXeY5dm!)$42mm7hjJqv7FQ(2k-=CtB*h08uX7P44dE74Ks{}3 zXO2qu+VxhL-G$eVP`id>q~WWs>117HBF{Qks}grs^2AxM6v^Y|3;s(8P;; zkVvT^a@6JS(04V!s%RKynZXxsQFX^HO^qn}t5I2Wd9&%#2JdtGpyzWMt%(*}gLAq@ zS(kmp9~uqRJ1yk-7LOqR5yO5Nd)WN#E0lkctr7G}iz95QE^KLhXmL&!l(6EIT4Z@sL-&P~Cx1H2 zxz4jUGx7DEz(@ zPYWmydMLMnvdcsHF(|KlC~tuBu7`3A;vo;zl*<=^LiKGa%2H5DJ(PY>IO(lCZaZL% z%j~QG?s#pTFydW!2WH!rSq#wPcs4tW^H}8JFGpx@cj!WP);QcL{p?$R#>a{~E*nip z3C|%o5(au}(~UFLMYlV-!b3}9mjJ!^-K|IbJVy%;=f>#bocI2))X&4*oSpS2+!^|R zeE%H`gBW_ZU&ja!-J!1=qOA`bp2nu7J=ctrZyzl@?r%TF_wC0D&lcQ?K7U4af!{B7 zg0r*22m*a=J@bW6`+0)G^9v+WKG3(fPd(Mo!;oZW(NY*b+UhxaMbgi6yztOU*yTW< z{65dH5B~NOgy-uZj|KY4Rlmj5;9wpOgR-;w;a3!B)=AU*{5&Dy;mPbXf!4M?il7g6 zhZ6zWS(V^92k53lmrwNboGd)!AWH7*?!B$t&vT0K^yAL-YAoCMqMv7s@Z5oHT?Mr7 zp_&W*Jcw3=hgQJO0(xojy{Oj)hxs(&;c4rcKo3SIt@iVLOn8`9aLO8U!3P-C5V`Xh zV>df12hKBfBX8#|R(J4V{gBM~Hn- z`Iy7Q^B?w4d3emt{wamaKl-!7GuKC1;-g&aqxAYHpYl<70@~}>-9F0wKFUvh6fP%u z-FeYR`EMWPuRhAZeU#%_HOkM9jdOgI={`!KkHW<$uR9BUl;u83r;l>8kHYQLUYEb- zqfim5m*;68)nJ#om64W8Tgy8HM>v{=~%hO>+&2A z58u`MC~ZE{UC**?k?ALVi% zWxkKn?xQ4plskNsZ~7=d@=<=~qwMlgUh+}i_EFw5loOm5?O1jL@f+h%K4B<%4kcnJ zL5Fgcp@baD3PU;3p=>aeQyj`?4CPpd@)bil+M#^MP>ypbj~EIj$V_X_&HenH>`-1e zl;a)B-wfq6hcc3#S^3%SoaUoU@=*$Xlqw(PDj%iAM_J{ge9A}pf{${akMf9*@~n^Y zhL3W{N0AP+CpPlfrS?!h=A)eFqfGZv3VoDWhLVf4&<;YQp&a8-RvOA!htg*#Cpnb6 z4CPdZ@AK%AA1`VyC5hf%;AXnjj-I~<&T4!oyA@~f4@1>jxmVJKmogv zB9B+WR#U49N$JK!IabnBSjvs)Hxz$cMQN&_ z9vyi(_hl${Ts?)m^pXXnGu8Y%L4rOp>Aj&1oHfAbZQl++VOiacJa37}vsj5~kt zj{4i4l+-~ZMINuzL{PG`I0ocz^5=UI96N*)I7q{fJYJ~_KuP6|Mr(sBy*i8(dAw2= ziWI+>zb`iZ;)Rr7+l>@?yi$`u$xie;R? z-%R`$BE}BkpN$lGyi%8flJe^hS$}htuM1A3OO{0*uheCrWM^^ihrff*)f`IswZKS` z$18O?C@HD$4$OT!CAHZ|k;f}lC{m@k^S9x_f48KheqyA^V#wt2N}+p!?=l}?wd9R@HzoC`ks^;* zszRjf*5STQSG}2%I$)&8mQa^C$g&Q%WkA6RY@<$17D0N~%}+ z@b;BQr=+4riacJa8j)h}g}-NC>vpwYpEOeB@k-T#l4|wd`rI?F9_)9F6nVT-vqdV1 zJAdyTiGDE^!ao@)@_41@fTAlJl-hk=RBU29spewHTCC%x?}~^zoEbm60NkSE^p5 z?AZ9zO@TX8QeQPvDc^+q|iH~W#0F)mudi?GSk};1-__mN(owHVef1qMDBjWD zW!2ZWtXK(_`i5nl-SsUUOY4{Sv@c7MRS4TPR&=!2ud){k9VzeYF0+nU-_>p-bspX$ z47RJwJDZxU`lTzDmtdDqw?f+{c|Er7IOLAiZgN>ucUcp5s&#j+fi!mbxcKaXqc4gY z8;d(uD~41Fwlj4*PtF^Uyw`ySb)i9p8sG+`%u_kG5VbYctZM3PYgma0L`cj-X-ijk zL;Es*P{-<`##Zc=tHaJA*zFLC7Rl(A`P*&hVJgB z_PHIYfFM*T5!jYz>0(WLJ9iqI2PezaaobZJ5*gOhvCxZE9TVxqPW1AjuBjWjrm0QY z@G&df8rH-cR+p~94#AdXa~j&OffHbygB_erod`%#=TafeZN?^{=8m>T1g`}fL6JUS zD?!jYJ6iAsc!+m&u57Mr`eaX&L{NLr3McxBoq)&-t~=EWYQx4!g-DTVF&D3osbnP| zo?`PG+IkEx9xDbt7Ik(u7)L!GdwpiQ!xyA9U8S?Br>c%?T9A)x5W{>KZ@9L}`R)pA zX~0orJd|RWaO$B2yED7Aw1OAO zG`DHBN%S^sqAhAelHmpOY+J*!Yil|eG-Fe3aYrXo$$2ABWlil(oejz^rJ`0gNNONi zO7yvSO-V;v&kAH$IE&!KWq)Xjx&q%WoOL}b<~A&yA$$$7miER{Z&-y^gs+cr7au-B zILYWE3admyc@sC}&S?O@2CS`R<(#HvC|cLFu`nS_C2o>KncER_b}tHXE_Upa)%U{5 z0&pvp1NeYQ#FvS*sRR@w7EColE<8D0bDCCktYUN&wKvvbAFA>j7UU%Iy9Jbg0d~l` zat)bGiJRNf*3?+hjJrtwNpHy6U<+v60shOJ)1Fd9XVAAdL^2(IZZ3uSbu5Wg)gjN+FIK61G;-U+hrei1)Cb(EGy5o z-AJ`A$u8ARy*6Y!S5a%#^AJJ(ifbENv<_O(i8@KLsmbRi%Q_7ecRbf|i#z;4!r8In z>zkT5twpPbP${qk^&n_#>X$V)ExWdU zSx3jUElrVWR$+aOc9H5(ts_OHuRmN@%JjCX@Y(UMYwDVi5#X#viF{qN0eyTNbG(E2}B4DJzTM^X1TqVYiQ+c=?MXc>_^qP4RsYO2d)5$1xzDf-2pZ;VG`Rh5;q;?-3V_+5q`Q$yi&8$dK;vu339ofR^+`X*lYzn7$HaY25QX837QC1R**3?F%fDDRSext^)9lMC+PDi}B zCK4^Fu8l`)$`RE#hf_Gk9eY#sC{E!_CRJnMG@QrrgdI7oGG1IAEiHG)=+K$0C=x3z zj+d5Hl$a>Q=@i789OLmgTv`$-Evl%js4R{R5h*<7Q#hT+d3$DSG8Vzf_pzN=(bBvxEmU0zaB^FMW=I8s_2 zicYuu;7_F;FOEYcWvD=+Ma9vISrLvQByYnRW(b~FV!bd#q&seumPTr4%_@%1s*a|M z4tMzAnw)_#!E>BI0Vs=?6qTdyV3tHGdvfovr5du;wN=qrNm&(TksUIZ#pf5t%By0f zHDwV!7iE&cIT1D=TX%%OY}C$_VOdDWnI6fT)2`IFJ)-3a3x@7OWV; zTw7ULg{+h&587v{oMh#xDpv-?CzsS#L@O&Qiqh5>=4jPW)kSfnwz#CW7?mL-Y`EIC zqyiN{O+`&jB?=8r`Jo7VnhZ48CW5rhV6BEEPQ_Ajq`0=GxTtnkG~yi8LKWD+o~|cG zP{TxPs-m^{s7O09-*U7=2prCEsh7asD1<<)d{%8dR$V!iz!Z-UQRL3D>R3svq&i)k z56Y(K+-N54Li$y?;vUY#ic4mdmBvf|H_ntqBjqs^|I)JZbk4x<=^7$A3C3cG)U41H zMa@az#PVdc9o5A}tRX!OEgGeoig+wqTRlYW4Ohz8<3bc8nt758lwzmlH#Klgq%>Mm zQdUwFAKsbaT`7)K#^NQYbfXdV(o;%3;Vz1lR@9cFjjtr@pz`eDjG^HxE3c@)7fPma z27ylI@vukH%odeLi?x~5)@L~9DuI~ZSra{$;>u`kaZxP7z7ccZ zP<>)#bo4)F#j0XOtfM)pW$Icz&1Xc_GmcSGK}4HY6q^+-sVPqPm2%Fna5@h9(Fx>U zJ?iI(*G8&}%PNbCYHA`~!&Q>SMUm=?qG+6*b{q#B=2O5~jvQ57J*x(vG92gB(%M;- zMe%5i-2-$!+}U_aMR{>~MH$>cAIkmW;#rlk+M0Mw`V`uyr*zk#+=yOXO>|aSF`7)c zjtu;N@p2-&I#L;}s)<*lUTkA`28SM{(nCGS%;y>-O{Y;gKv9jul@(Q|ZcyZ3sxa-n{rY9w2LNBpPWC%Aqki=dGbXUT@(&aopSLMeYIp%6?Rqq z@s#$4{THd~IxZEuab8P`I4p_~N%M&;S(9=VJ!zdLZ>F^Df>?V!{uvAae%xo6j;|T+{R7*77M&<;*oB{- zZzkw*Y{I!27k^y2P3PXrpnnfM8_gaYdY_K(QiN~Z$(FT*9^%LEPsc|EfxEC;{~xTV z^LI9`bbJpm-LPe9^qImYn%UCvy$QbJvn=aedWauH(z|D|(}y7%tE zCZ6{vDj%aK9p7j1y+6MIyHO@9-+4pumBPJ)Q?Q@aEbuc~(z(aif5Gj{Y3d%FSH8~1 zhVBNX@y_ji(+!VJjpQLe58@k(mt`67A<3*|8StF~zBL)}g}`@P27Jh();$^WJ(K|- zjrl%51HLoCSD67H z^Xau2@UdQ8p8+4;`)US!%zqE2<8z(q0E@H({O|tVkT-eT;Q9sCskI}WdxPpBHqpC$ zd=X!LMZP^5@bNqL`uJ)i=yXgfjmC=RRn4ucD8A&Zc-{PxIdjkQ5^JhT*{7`oxq<5) z?O3qE3{}%5=rgr+HPkn(!h}l0(zd3{1{3PB%FqBM9$|j>-*9cgRc+~Eo9HDA7j$%9 zyD+{cT-MSZE`hqIg$*kj+FROMdKQ+K)z_5FsV~JE=R!_KceG=jXklj))}6bW@E==( z8e1AK>{!|g%?g(u&*LvgiFUe&u)&O}%m49~Wt|;e9m~7JWpLP`R)vbgtgp6x|x2^f^84^EpYqw8cC($xsu%&Ji^zc9^)L zSKEL!dJ{%nt&+f*FktGaV+{%V+|n3bjqM@$D0#-ho%0TO0hU)fdYfcbTuk3sPom`& z^&hNaw1X$W+}Hs+$`U1Xd7^}Fv~36i`sW5F+e&uFEP9ezj@%)Ol|}(B(Kl3*V`*#06%zH@C}enh1Mc&Mb{p>8jT;hG+Hpbm;I8O<4tm5vPXKW^60&wX zw3i*U&q053(7O)$kAtZBQvJ9S=o-+W03Jxg@(|GPKnqyE09qh#QB|fi#tclAe_}YNY5geWxI09L=&Fo@^=3jaS{!d3A&*p<37aD! zEu3z*#^CFwQmdvBGd463oI8ed7y2_{Y8S?yZQo!u;q;X4Gbg$FbE3@6wXI>BH<9i5 z=8uu_?ikr{>X4tcSaS$#S1nNEfJWm|%LbbTU5NX2xI&U`uM*URyGpRBQ;F3;x8e$j z4Mdgrw8QrmhmVDfbf{6qUHP^FU5_gy3Q^VN*YK<^?*qCW7Zj@Et`h$M`XsIpHd@{h0Qv&n2E^*5x>qMd+NF`P{5}iPIibOAvO56;@qzGBJ z11%RsE0gO5eGjNf(8ECL9t*OD;2EGV<88ot9!TAL3rJl#0;H9|@gr>80JJo(?o9;J zZ==a4b-5HsU9JF1ip$kN>N2Vgm>F|hayvO)t7o*cvYvQg2b_RD*O5@vj?%t92PRqH z1F3I)F3>@sI&BsgXcKU1GL|zi?GdyVXk+*vb$TxA^gj-)LOV3D3QZ8Tvf_rOXJ8dt zoq<(oa0XUQ9(Ymnc7JS)DNHeAsk}cn&8Ez-!KF5c*r3z~`3Au&0wvMd#f*x)ES3i(P=o`X(x z&{+;D2GZ}KO;7!f*+7hxfHfaTzk~TIo(t{kPH*a@G@93GACT9~8!3;LV9}GQh&l-* zj%NebX}D`dasJ5hz$g|TXZP?$6L`(-}b0PdJSUEb_&pJH`15odx zr4(y(`yKO7(C(a95IwxsR!JS)dI6Zzxs4{0{e4n5FA=}wF zltYi589%)4GR+X#8_sZLu{4H3@?dGi`BG#N+pj}3ZS-z3k~=$@18d!RxF?P>-m-Hs z2L0z&jE7*%Jv4AJ3@Dj*=pyWI%@xy*FpWx1?Pg2WH5aDgVc}dUj>k?%8~to21a^K- zYeU6^awRl9H~uw-3)M zL2k|E%-brl4d`lIA09qyJ2M*#`cZtw;1F6KX9rQ;a_4jW;>hF6%_d_CJ z{R>FLOw&lpcMg#9oe%U&;hO}cd{RcMOyxNI@OQ8Q9&K)E!67HHZrA_R3Quq|En64V zqYzRTeex*SNRvXiHxYfzlolGj_%YMcN5B~29=9LEa0qg~V|92JqbM3Do4Y)fvemnlXx;)smm(RQ8xodBZ zVyMSg`rhTi_0I*z%QN5c`PG6C){UL8D7Qc7kqOT)51xVMBs(;wKa!KZ@<`v?Sv~LM zzczEx{`Jd}>)uVq_rbpj&rjHyi0^=22}fn`;TPv@PR934$eG!JHabPg422@IPp;RK+j>3*Q)b%*09@XMVA$+{RTDcK+j{WWa+nZ>N^-< z>5o1*(DMk)mntP0eGuU)cyj&G$-T*^5Mc+hlhHk~zQ1Pm+|IC}0XZ#^Gpg?i!~v}S z?kGyc_b2APSrFeH+!99@0Uw);?%Ej%qXwXvJ%e6klss;NRG8;)?PswnN(i!8+l+096P>lLkduCtFDNL%Qe8#`d5bsyz*zy}|s(5!=bs{KnTZ zbSrsCieMrJqaSwRPQ=EdzlPC7{(DIoC(K+qdi@#bg61ulKU>)GE(YKAEjoW||4{D^ z1v)m2PrF2hDu{M-)(Tn$q%LzhLtVZNNL{Aovb(_-usB1hE=$j2 z98K~0rXfG#0KlGKKg6C$&k;;FIHSDl)8RF;E+f~z>roG&I$0N*pX@@Da4^wxI5BVU zf}h`wN&pK4w{oVS??1Vnty-OqSlf_%%H6dMj%WQ~CI2(waB%#uf@f^xlZ8I*Ez5&5 zX6`~a_LjW9?dYb?n7Id2D1RV$#&lSP>gv6MA6?Yv3!Ymydgi6K1gkE+rKsS!weR)~ zjMy-Iaiv8+TFb zO~&6$E;=;fl>|DTi;nc?`~)KuV`Mu2>7CJiNL`5%equ7ZKiRW)0=s$1=;7OvznO6I z>cxHQ_F2gi3@J9F!#Vo4WXX8+j$!GpJSQ1_^Y6hcK#HPs-<}glmW{|QjWY6Jb^mSARkt4xLPpryK zz8oCC2Qta{?lRc6%1eZ@Fk^+_7pyxN+)~KSW%OYG6)5JbgURTj<+sh8c1O?1z5`in z-b=1KGH|iPi>VsXn`X}fY{}7gB;vaZp6dzBdi!i4?VT`ob8s^YRkADx>rL#~PrHM* zn`u$HZnjn+h#P$5bIG3F_h{wlwi}x6By(9o{ zpTgKG*>fa$*s;~MYMTA-NrW>+)>=K;vjtNGT2I8d>!a{ohw!gf;CT?ZWCe)9jbxeQjzPAzGTX14~Ed=5oH*QZ2bjhMbIR2 zLX0_Opm&<~+%Y4B9=l^E7Iw*I_(_-gNfAG(+)pa?kYr8De05#|cDnc5E9g12Q6{Bj zECQ#s>AB2wxB?co+L@YtGLY7$Wk4%&g~WKXO0XtXiDn?J*;fFm#En48$K?m*WAW3P z{c{c<`!}!R(tiH|K{P+DvWtOKb{Wt^@|OE4)sH)X>Oc!w4~($QN`C-!gV5OT*OA8z zAYDMAmi`)fOI`emHaqAxhws}C?Fk3bVqS^J{tl=@&;cNA3ut;-TZ)eZ&6T&49aQ3= z`3`Dv&|08bB5^a2wjQ?wML^Sy4XC|7TEk)TD8 zqaKH!)`8>t4(9|nF-_&UE_vm+WX1Rizn$=0`GWrSIf*!?N3h6$1DR1~g6{By%v_P0?Obz8I1t=P%AtEu~&juJp)eZnc(qP(#5&* z)pvr6pA=V6L~RFVU>2coMQ&ElP4(C$@R7UvY_2qeodT4LDWIRUDeYo!z#Li0}u8>T!D~(&16pci7*0&tws&Dx~ zxgyIh%gcf;15)3l^S$t^psHnGv;XB%JGswFxBidGnfzbUM~ey1EfyYvyBm%^_~o`+ zXV*4UMs6aFzT@ISvWtDL)wN>0DeOB-$01AK5J_NuBWE0uF;j~U?|AL@qWZs2cmeJ) zevHRNj%?8hC1d5u#nafJ$7Y}hos3<2U`#Srn_OI#h+<305_vOM-ds_KcF#C~Ch-3J z_t<5hgm~*m&w75Hc{N%bJ_)rZ>c)pR<& zLx6#vT?0LPLL#6Ee({1YGaV`cU!vVGr(W_-#(Z8G`*Fr;@6^z1O)d(~y9 z)nc1%UhP(ZF~PWkp8JDaeuXxyKYE}2`W_qXQh;2;@pp7b{x7dyTrX}gKOF_He~U|3 z@H7*jjpyTqHXirQf-b=QI$R;yzIBtJD%=&ZPSt|PC2)0xMN3`b2wDpsi-EdAS5@{- z2i*r$gezoi$Gun3OSp5~9ul*gt%6QR#$d4ySu=s=2$}<=tw*Cn>jr9;w;UI!dtU`& zxI-3~`0E8d3N%~Li$JVF1J-LmmkaGLK&u7)2S|N8W`vEnoWEG!P6uK6KDofP zLV)D~d#lcdc>QqF$sg~68>m1g*%ipghvgr_uxqbwd_$*=c3V@OzFw0F#cFGIbToT) zPM5BC?tXp%wwXaBJDTTxd4;^Bi(U(^3x$p{>9!%eM2P4%vdg4qT{SnJ0S}JG6|mTI z+AL@y?piSy0BQc^7*r*g>r|o*>yYg|ItNoTe4*Ii$ zIO^56T)tOyv4fBU{wMZ*XTtfAY_q!zD4?4?!#LF#wrwop2y<5$<`tWu$^+&EJ$7Af zWgjA7tNO6o+n`GXRxHoFEIc(l9%rlZ8tTQHcoG|C|E}duT2Um^WoWQ5X>VdxCJ&Ydm`wi&S( znbu3y$|twv@{Cd#)>peGYAA?dK-1XZG!HyL$`@)+QvUfO!deLvpc1pT5ltFl?dWN1 zZ2tsJL#|xe)PAPLa4Qqoy+$XUS6=eDjZJN9#4PH$y|BV6Un+(u?L1;f;_C3qj;d;^ia6}lr>Ju_i3Qq@1e{CvAPLJnJ_J=&6b#{DXkU zavf{+>@1E;nR+w6{SLSX^Kej*oyDq@U)Z|;Q4EL%^KiJ3oyAUm9L6p`6yTW zC@nt9Y9GaKFY)s}o^SdnKlD)^^HFyBD8KemxIXNSpF=*%2o`wx*>M>3Q8+YC@ld_u z70|nxq7cpW@Q_mBqcr#^y*^69N6ExG;`e+~KlM>|`Y3PsD1Y@){%I(=PT4tXB)^V_ zf$SJN#ZXc<#Ks%SD2Hc;p&a8-qK0z3Ls@7jmP2XxQLgh*KI5Z&(?@yGNAX)neBQ_N zhL7@BLpcs1)U1??R*Ao39ZJ|x@*Ik73o+v64rPI%jCLq14CO?Jve8gd@$(fQ zr?DenFc=kiik5xlmx28_$(@k*U6Qf!m?`@zLLwQpBV6F9+uA9=h| zr+_k)g|0>;MINt|^tZA|=kMtMd<}(6 zQsnVUp;H2>(q&)IGZT^o%QdAw5OPgxIG{EO>dak$M$k;f~=euwM3e()*=!*&S& zXr##Fl?sa#dma2e@q>T8n36hy9WngExV%zlf|3eh^G$!Bk&?R9NRh`Yb(Tm?#GSuC z-1#$CK3r;~$m5kd8V9$5Z|{izUMX{5;GmHLE8nL=xQ{@~7QQ&QhFQsnVU zjTb39&wDN4?KD#4@k*U1QVcnN4|ZNwl=ABxBSjvs)cK%fXR$2sH}|nQjVY|EnV z9bpdnu`Fj1+miQp^=88)COsU50AR&b?nWQsnVUafFvDl`}8=GKz&Q z^@@=qk5}qKkz$_V@5=86Zc0f7I3U1}JYFe|S5kiMKKKt;sVp~AAM z8Y%Keo_!<#CvWA9=h|(?LmDzj^I9&nHq+ zx>W)iLqw_uZltli0d?q}Q{zKgMi_jI-015q)uZu6Z7Z7_rdl}ZE+^&X5lVplmOk`! z`H;T&51bFl>N|rzBxmYW`p_(c4yq5yXrEjklEFF3J|u@xQC-^7I5dlW-hD_8Jpn)5 zYxkje<%3>>{~wsL5VPB2;KI=bPVIP5%U$d;YT;l}tPL&SO%1RofzeR36B-OM5pgGj#M^(;RQ;LM$*CDdPr%pHpTHzz5$48#|DXa9JP_c}G1t-lk%e z4~W%T+kgOEbFkY4z#x_Wj;eo0fqy<~BA2dyqf%lS64od=cM7R_P8CU;U>891%xI-4 z4smL5ooUFnN_`14rj9eymp@qJJt85c;T{ilFq-i{Q7kVZ^;f4RtiHUdE}tg0kpR;xr;Xt63Zg)(L+X{->fz*xEhuJq_~ zERI4Iadla=ytp_b>r>Qt%w;WT_@sdZDBpFdb_7$js-n6w4jsXUo7#xYiq~M)s*>6& zXv3^=vzoOqFKcO}w5F!2ELKzGW_4D{yv)$I{XbPdUlXaVfj;!ovNEQLt>c;tU0yGW zBT(-;3yM{1B4*Les1)_H7DeJkRkcO2vWf^+oQBanieQ&jl@~$LP{b@TQLQo->O5YT zAlsCcl@*mjEo&OJu!9wW8;!SvHLybow4;o&xH3{PYgW9fG+wSDYl)y}Fap;A%kCsh@^ zgK}}EHXBNy`gT@vX>AGY3t)-S#2donXlrIfn1#v083;I*CY^v3S4Ap{t5LLyP418) zh405=K&Wccyr+GXq{&02FgSBo!{is(jm#v12FEUVadT~B~wi45!l%D1Ld1G;+md`a-+n#mwKn~tvx^ve<1TtViK>79;`{%!})1!k&ksCXF*fA0m)_H*f)=CgF} zy^41Ym;@}~hvGL>x^d>`HSmn)Bp!Y_xYD`z4bZ27=T*bUqL+^Eo1m}6)ZQtasKak4 zfAirHEouLW1sT6(xYD`zMbLL)I;eq@JNO-qD;-}g;^k5B9CMMd$+~npKIXrt!Sjua zl@D1qt$RFm(T=(4`)4X2vtc^-cpmnFOR$^1K>0W)FMNY^J#yalrAw8^zNgcvNxru- z;A8y1mjNHk!^q2QAN7Aae_3o#%z%%@_Ph-ExaLxn0Uzh7ugZY$Eb!f!0U!PSdIo%~ z&K}EvkLBa}4EQ8FT@Gf~FI_ydKDgM&7xC%*oCv=4K0d!LV^%BQ&VY~A{Bs%bv0B-e z0UzTpP>7rBm+pI+pHIzzkKcQK27FwjoSy+7ilud}k1x*`&nzEpK0bdu^E#Io_@QnpuGy^`SZ$k!r9|vD&27Kt^SX(pTV}AKY27HX?A7{YFeDHJzd`#cpX28dI z{&NO={EqA*++4qO>BjUpF#|rf%abzTqkAP8@G)NMGvK4Y-5KyPziiHckM-IYGvH(R zevttm)9uv^_@;pG?F{(%9j6uJ=K7^eH|F~Z8SrI;uRH@jrrWFx_*h?ElOf-l4EPu? z$qe{d?>?3RAIs&-8St@uyqy6b>x~aG;5!3+c_p~He(BPU{rO25^5tj9cX5V%1!?#& z#Q!L|$Qk^<;kp%9?f*+E#g{g8wJiHzD-}1Yw%vFfqge%bTPtFEou>6hLlOS-1et1p#L+J2 zSaC>M$11)>FGbr-m#jXSJguk4n4hKbis+=u>CJ1`#Sv zVNM8eGA$rek{y!5XX9B@m@TdHRXKdKfqsVz8g+43zILFExI%K+R3$dySzW#bs8d|t z3ZxQu1FgXovVMyDb%LJ6eWjq6ac3?JS#RJ@*F&Oityj=daO;zTINjGHE|0@~9%xYb z19YXlEdp9Ch(|g)1g!!3yr2Y-hV-*Q8d551Sd9xReQ4vXeHK}C5W7G(1?Tpo8{2$pFo4b7Zxe;MV-250{+`J8Uw%$8qd92^{U94Fh zffH>G(kic+T!~oY&e#!+)7qF({&iDve7vuh4xI&_|L`(BBJgY>jgV>I#EVJZ`xB}MAxNE6T z0;vSsEahXH^$MH1zv`Ojv+^35kI9Cm@X> zZF|v*+IqHvTepHGjqZy@PY(2qg<@tZWbVm>hBv$YfU0IT!>8Nl-shwh_BK9QD$Hho z2b=w{Eqqd1VWv6rvVPI2K*z~29=nPXO*}bhe-xFLtSpPk2rnFG1^==gW1m6qs90RwS=Ixq*_zz<4}!J zDCK?Y4ri^mBYwjx>GHb>LdRb8UANe~mXlr^zBZ(oF&C2D%UWGMO~#>Za5OaJ*jf#O zTbbk2sI9+Rd@gu)-FbG>gzH>v>G~vt@`owhA=SC*baGEklfvqmZT@CH+o<5Jwlf!Nl*#aP%CkTq%^Qz3yDfim3;xvD*GEC)>i?ku~hc2cvij- z9KQbm?G(NMYKnP+f2NC!@`OPhX|3$s(NblNBR)ZNZw|EKP8 z;rm?peiwegg&%Zb<}=&7$6R=q3-5NYR)GuHX`8I(qoDHCJv=@YtjFWhg3KX_%;Y?!+n*Y)wpW{Gr>0qtsnRGg1(45XPH9Q*KlVlqfp?k zvJV5P?2|w$`#g}!z6PYSe*{w5_kdJ_tL2K0bI@r(T2NSg6-{;CavfeJDuL?Zl6Fa$ z&LN9gkqu(V;+g-?2>M?aH`L!o!OZvJU_cHyjuP}S+;!j(1{$U$>Ab<=k-cLF#&MWv zJwgXCd2^KhJ5ByM^}Va%NmHEi*vVk7Py1tEfVorcL1~Dm;yEO=i*aX9FCYrKHM^AK zS+mPrAm-+PDCPT>Aol;hEog~@8iAMr0+OJL5Y4kuHH5rlMp1YrTuw(rhGCD4fVfUv zKvU(;Y&2K{nC-GhLK{k2(?}Y%!kBdEacM9flCeJJ396jN{qT`96EFrwtz+vaaJcBa zph8%v+>IXT&W#oHgx3Dade<8#K@E>bmi-azjXaUP>I3`Ymb zLWyiu(xgFVnrKRl0Xhknn#rS#n#ubzP)L-8DBm21Zvl|zF{Xs_v4v8;>m9xufDYga zh_WK(V{u)EDMuimX`>iV|q1M?Gkc2o`zA7 zRe!a{zPrji1Hm{2msXU26EqQbjj2n37&BTfz5)~yMPVAtj5(FP7D!WrX`r&V0xiN7 zkl4HvNUKMc{W+dh_9>wEg^xA8$|B}5v~Z1THVi$kNJc{L!3DF?3E~`U4-FJQ@}oO! zt52nVZ{&eguf$aknWS(`IGHINNF)!>cV_+ETFBCxI7Ax4fF171oz&Vj8sXJw;@6yt zOSRLnGpF-1TB%OLo3G-6#x>kkq6|nSs(_9biP=CZ!EC<;S4dim`9J~Dq^`28gH`qx zAnIigSX+Tq_M;>UCPdBnGKuKR{fN;wKY7@WJDNxRgpu(S9aqRI!d)Yv5=bR#fHd-0`)dR&2O2u^HafBipsU2UPXlRd!u)?FE~!=e4u(xv zH#PQjO))u{ii1w0EtCUD`Ec#`a`1ULt9$sdr>YrU_wI-k-w)CaHieIaTfYaXVP-d) zqG5y&4l8`|@WO|N75*nJHfdui0rW%Pmlo zqb`Nmd5bmgv^1^-w{l3B&P8La1-3lvmt^YJzfl~9aZA51ku6cfI%HdS`Y=5-ygT+s zp@&1;A(PX5*M^>9!U0|9i89zKvnL~@LW3g(J%_tvX7G|SCz5MN{8^|156d^mElqtD zy4p?waop!rUUH|2);xTnR#2>+*{auK}qa9Nwwy<3K9=B+%)?w+l%9cm?Q8p}hg5 zvVR6r*?$44ET^EkkQ1<|VpwHQ2Kt21xY(nz=L4zi3?P-g42blARgAmJa@mK=K>_PZ z+*S4(AeH6hhRSlnb}}v~L&jZYZv)B~+UIds*?WLg_J=?!`!EovQv%jwxT`FuKB%D; zb{=q7+5ZMo*}np*?7Kjh;tE(F;BLMb9mGDw2u#2Nsl*f@mAD9qgXe%%0HhKXK%B;b zojM@(tsaOC6GnbO>Pjb&y3z~8SVA8FNL~2?P=iQ(8K_CncY)NE9|Nf?JAl-cr-7p4 z%5y;K%I|@6T>UoCm&6rnI#*XlWZSOf0jVn|0hNm@rva%e=K;+U+7uxDq9P!5r4mTP zas`mOvIwYJB$fiHE1f{sO9(arsqC#lDtiZz%6=JWw#a@BNM)&IYmLZ052Uhtfpm=j z-$3fhpMlhscYx-KEB^%2#y>m9Zv0OJ`lh&dHjui4e%0Wa=(Ltvu@gZ0@A!{_*QRar zABQ(q^0{EeuGxv2u+)>(&`c$=iL!B6K*C~o#i8J&kzlhDz2g`6Vw|RW&!N=3td`7U z%xmwfxoP$toCrsB-@)$$or$}4s>^}y#f6Cm+}Fy-uLRm8=tdwGr-0b?y-ARCCG#+D zM1|~3EW@0VRF!g*uR$+|4U~K}!A^?VJ&=y1 z`y9T9f!Nzs{qP!sJ$P1$UjzLGS3p!(Yf<Pmh{uu945W+wj<(B|y1eO9RUj>jRO|`?vBDP3m`Bh)T<=$*@Bc4^3ZMP0!n2Xhq zF9L1Fr8AcEfdb;E`uh_+tL)=IOT>>Sfm9ZWM3cIRyOc>?6azeLV6uZ}U`tUB> z7G;q;G&{jEm7PDh0H9spy2Md-mKlTP2F_8R1FtleX8;|IOQ%$5B_tr$o-~%PaQLou z_&R}>3*TxW~U@tiH`#<018M??QWs5KczVhIcV^x_d`pr?)Li#h0aWn zYNvmoHzcWVKaKG`jded=?0)FYaXt0zC?Dv}brD<;vz@lvOB8rsu2ov!j%lc=QKfL9 zNn`XBpj=$qplUz}A*&OAgXWHLy2h#Lg1*HA+wGM3~koLPd zucLgQ0n+|7`)Nw!1fTYk*_#z*4m4<)oL$qZEI__H`{`u zV5=>*w#8R%!O|9A=v!23Q4#*%@AI6Q*~xCgw!ioH`TZxKnSAG&=lh&9=bSm0nX~6{ zWKRQW@AFrVY&TFV_JFk)$GZiw0nk3(K_Cs|A3%(4fD=}|%XDLThGx&|*)qjdB(g5~ zz?I0;K`g@^1PjZ7r-GA$OFKI)uEm`x#i}6PSgag!QC!iyCWY0^v0gc*8Dmy%w-u9B z-LYW%Mcp%GeeaBmSUMdmej|X9UNuM-T-34%E0XgD#NJ5DUPHW_%df2Ea^QkiI2Tr7 z{rR=QYlD*}TJxK`+7Wut1Zz{%D-hci9jjVq279`B9qW@f_pC~f9E`BK`KEQFnyJ^t#RzGGe54v8)K; zAxd6mtflYGD9vOcv|>Rbtap!WQ6pkcLcp5ynFgHv5aPl<2zXLp#z<=we{g_;k?!hn@1~`_xhdU2Rae#x5i1DS zY7&)JGgFndj;>82o)OY3aGPCN8jH^{QWv41+JNeSP*mvH^E?Qb*ttR<3YXF!#U-7v zu#9VKNzz?9(rRf=dn-+k1-AxerjE4MF3l)mYrERg=~O#&L(7?UahA1-!D)i|5(k$f6w9O1dF$8gr-k?g}6 z8(mlDWW?zXk7NcU4|*hgf%XHBWE~_sJ(ABs!lvJ~%vWOjJ(52`a?~R^X&B}?Lh7<6 zK*HC6u4Eo0(>;=nkR&~lyCGTVk^Br2c3NFKe}shZDOB=*&z*x0cZguDQ->W!9~yyT zffjcGlo7oDf>NV{f9MYKT}@_uig8|8!2Blr7k~cS_lzA@IpbEd-zQ!36X}eEUSYvM zab$Skp3(P8wkv{@MdwF|@OePr{muvo82illa5!67@G_1>-@5Jm-)8Hun~ShOJs;?s z>p$0&tusn={u4){%kO^YyV*K^(czLLd;(cw}f%YYWXT9zZf&K8}|;>dyEy*uU{%(lbV8ifUX8kti6I5esu zTW753u>3HkF8E1hJX_~n(czRPhI-1Hhab<@VF@iP7zQ0`&;G_)sFZkL+}=fr;Z|e? z<*C7dhz~k8pCg%WB$TRpLzaXulkH7)=!DbWhFO`;Hi{j~A0MED9)EkQkWO-RzUI;4 z#YeLwk2@0kE}qSjypSdNOP1ttmZXS9N;cc_X;~7!p7!cY$&$pgB#l{;YzGgkvvk&F zNj7Im?#hz3s~V5Vf!WSpV#GCBZO55h9RnfBtrEXgaj z0`$ELth3+Yx{g?M=Z#;dhHh^d7InO=AS5p9f-}o^xUBQo3}Xvo_p;81q_BWJ0&dAI zE%h#|+OVkOWnBP?>u_T6C*HcmWxe09sN-c_C@l6>xP89#A`C_B`}(wDQOC;~2T5T8 zdnVkLe0juwyR4@Ti#lG`MUc2|DoS2{-)%1IUBjY|mvynQ-isr*6_J~3T-IcEim_40 z%c6c^0q>XFf&X~^8JG1z!=jFtg(S;};h|Uf+}Ww|gke#~%equpEREcLc;iRjby@#3 zEb4e!mqAik!2Th()))6=gmno!^4O^3WsQfVu;5Bw#CAphr+(*#l`<^qcv+W2Qdm$) z3by2|Cy%+T`wWXZUe@~{DJ-Cz+la##Kj*UkWLVVkvaWzc$1-Gn^t@&yvz>HHKfI>-Za1vk4U0Nn7Sr5yQxW_Am^zpBjA2p7%VLe< zKFj02Q}mk4I%-(d@v_QM|7V@i3#%8DdXAFxvUKXoUx8CqNs`<8IQOC<-33OBAL+{Sq;l}W{hD9AOixsu& zrsAQ$UG+aMt8f%9Vxx|ibrmFVX~~P&I$nFPu>mvyzUI0EJN*K5aq#%2B3u&Co@T?2_*&ma3+D^%lW*u(}sQ3Wqro5sN-ef!2oM4j@T(>=!w~u+;4XewrsN-d!0D)yL zTldy}2gz*5@O~qvj+e!{+O4C$c4*idm-So2qK=nUC9KnNs2?bCk=}_URFX_d`rP?_}4%1371u59#-mjS@n>(VZF2GF?3|?{3UdcV!m?BTj(fuIxUAKNMIA3IDJ(mN_kH@;kGZUS42wEm)+}L}+qT}gwe_gW`h{Up z$IF^6EW0JTrg0fck$qop8WwfDtVUtk_tj=yx!Pq-HkA-{ysSCGG7qiQ`fSrdm$lTe zsN-eL71ksixt+D=ypOu9j~fUdc<2+L%Qb=&8E^pwl` ztYJ~d%Ua-JeRj|*1{#TdPZCKRtvQi$_oueMec;b2ui#o%s|G-%eH(s(b zS)+XK9@Gbw=wLasK^0;*;gjkz`uJ%cRA=BaaziP)>&gwP<*pt#o8Q;-&>J##t~sjN zi_x9H>Y$g+l68Y#x0kRRRH4yc({4}=?<#jgsyPea4XTCw#}{I*ZU-MIgKBvf$IGRb zbG^J=it>SZHa>k1dGQ3rlKi1cr4(BY;6x77Jnq!wYe7>-CnwuQ3;RnwNE@ zo7y^-HnsM&FSEt1%T{&3xsg%oO0C806#ER$Ez&J*9auwf_3DoHrZugdNab|vpqKS4 zg)xQs7;y1s>$Y~K5XjQity)e6+Up`Vt!l!Q2>XJZcrRu6H9drH)9QJgmt@YF zteWyhkWodbhcw4L9i(}@emPe#eFApp-~*|+2}5~S41Y!`JYlI-jXkU9G%uZQH93+9 z=7V*0w6&-h2Aq2$&a_MyV#Y-qFX0R()g2k8-?X)^a~-EOS9ixTx5@Y_;{**SPR$uDEP*EkM}_OOBK11D*5NxUd7=jYZ*wq9NG7alLa+#Atf;EOf$h0T zG>F~S``>l?R^HU0wQpm(qpNv&DpWqHyxi;a(o;#BO1=*M5)<9a8&jBB*Op#qffETe zO$@^!Q?jbArY@Weq1X)R?I{coY>{NRrm`Z$hjj?YP{~kbWvsd?9;>F&4)|!p{3tqX z8{ojKAyipcABH2b&`>VADnrrQWHjDT9SeyW)c)}J)CRXtm_u7W74Fe6i`MIisXA0w z8Lg?QtV`ykm>ITSPEDu=POu`0D)@SWColMN%X#s$9F-+uTvTE!c zJK>s8I9wMAN2@d3x1l^>dart{66|$q7LJDMky-KjNQP4_nfWUo%Nmfx6Fo^44ToxL zt7{{%%0$Ra3m$Oaj^{XM7N!%!D3Yu?UQt(3Q*k1)GZ)h#$Ere!L^x7cofwQP^MzT| z%q(Mdy5<;w-@4lRWPN3QLu`=HPh=n#s*6ObHJ~a0h<$kI1;LjR@WvH zm2uCbVdf5ck~vZtO4e0Y#cPuBoMpmEWX|`*v`bDpb_0rrDr*{&DA958v?eoyhj?UB z5hSX@vAQH4MlJ91tmTYX0&WoNqsh8hUCwyvgJQyxIn3oAM}KiV^|h4^^>ty1nZ%wh z>jn*QVgy+huBeJYzoNpq#r!-K;>J*I)g_~Nvgl(DbEAg{DqImt)>qZTWn66t_c4TK zJsz}L)N;sCnNDq25S}Q)3cMu7qR7LLlU*i#q6(HHjPtF%%y=kS9gRjB;11EA zhdo4W5Q}7WMMFH!SYv*+QPoMS9>d8{I2Nl7hZ`zA1rQ`uEE%bbTA`+*6751|*lROa zk$`etbpsL(%H`8$Yn^YVd)u|(G_QI1QF|lC~2O3JMmCF91T~-lhIHkTMa}9O^i%-A1aV!sHP!WQyoY3 zYIFy&52vvW@ye=LT|=gQohLt30C+CL(fVj*9hwhYdypU!p_ z^0NuWAaBr&kA-51WOXu9UlDSr`46g%>b$n9vO0oF*8BiqFjeGPWdbc~Z9OW;X-N*u z^nsCnmic*rw(t0X018A`vr`3!We{kqIvtvp2Dyq$~$jfasYYnKkJn8FS5+Uf+_qD&KO^;Zr0u$czDG9R+y9jV+hw)qwpCOI0i@hv!v%>$f5U^g=m2uktsdFJ|e% z0~-_C{1AY__^|&szH}TiUpp8*@wAxn!vpH^^4mC!G+zR#m&;S?jgSYRv(e}c$9XOf zj}Jrs9q6=}Z%&MAF1?TAyT{wmx!HU`Ib{&N4Tz8rpABv{-(UE#EtkD5q7;e4VG^ogx>5379hvY?PTn^?9D~K&5R;`F;SE0`MLCdg!}kz9QRVIddqEl zY&ldU$6_42kZ2!Z!eL|nhOCKOGk;P=IX@)cW^{PYEtjV!>U}K_J$|=*JP*AR=>0Aa zJwNnb$wQBm_Fl_FkB`qeNgOh^T=)B4T%VYS9-qVcdFV0RmOS+MiFREcdQ9hA^U%8l zdSA*zkKyjjLy!0IVjg<@j(I2#J=*il!XabJl^?WsP9A!+Hz`lOc%FI-^3Y@aI`hy& z6=Z!h554iw`#~Oh4EIlY=mnwoRvvnzp?B7795S|C`GKa$x-1X9^PqQi9(ru2ZpcHA z_SWX1M|*eXp?50uzMF?0!`+^T9-FmS^3bEb5sf%xY`M~zdKcxP$LBnfhaT&V8}ra( zy}L0Fy^EoDTONAsW_&LXJ(j;`^3WRzy_fUQ^=k4u0^f>kJf_XS(Y`N0q99*x@ zLyz6?wmkG$?lbT8&tV|G(j}w7G?^wf~R(mEw)YY`m$j!k+5l z*L`e!A(N_Jjc>tm1i`f~P;@)uTx$d~I=a);Io@!bosyE3$zbr5ksligJIypiMmH{a z&KoOu&dc`y`EBVHRd};!pUY$@yydXZ8|9;e+HvED^HzL!Vi+2mf#(iwfL^$#wKdfR zI^;IDx_eGrYb#|YZoK;+@cao3>8w52ec0`zKsj84;|MO6pZAjO{fXjPW;s4OkSd0+ zwDg6&M~0`*>pkL2pVfP0L^{xWq&V&GJ#tcdWbcuY>EXRcM)z!&mGyLa^t}?1({Vgg z5QlZTj20W1&teaVN3mW(y7U-VgUox;K-|m@xnC?%>3Fw#CD&qsSlG*68xo5P7GWj4 ze__3{9IFh{jhe0%rZ>qO3}Dx_!frrj_^k7Bt~ZIHyR5F|v+5i@mc+NQt7}HpTZZ#{ zM1%RRmOmut)cY_{p;-PXkTR&P$@dkYa_m0lvic=BK|*G%RmwHr91pDaBKrQ@xq@x3 zHP6BHKkBz}d$~ZF(!&Gydc8f~%*b$6P%r9k_aGy7cPF>5{9brHijFOBY>z zrC8(}4Y9cCt>ZnXZrV_=Tf}_fV8mN`ra_$SnYd}gu=<|MHf<=Z>>0OdL(wTc=WW_B zd}Pm3TnLPLQtpoocr-O!bbR4ku$tmI2?xyr_VQY zII!iv`7In3_nh4qFPb?VuTHEUe_yy-ja*Q>CDjD#O~SQh1Z7oMx*y9&?e^Y+}X!juE`` z#e$hmd$IeZ0ysku+q!|zN5s+NAYS#@-O-g7ZvfKLz6R*?*x?xgg@$FpXMGTeHwU+Z z4*GYo;X_etQ2dm-l{8N4iGwzjN^M` zcRscn``CenGpXO$YY(D!E$Ma~!>r6@gv*S3Vl;1M34G42EHG|I;OYlP(oy@aF3QWu zf}Hn-nDxgF!jGPDRN9w-E7TIWQSLd7a*Z{VR9?1qi+}Ueh};7Ir?!?o+qBq8v=O+= zCy^Jr(CuEF`DB?GHVJV4ildeU_V+Z0D}cU=9iEXKv=T_UX&~jU1Jb5s1CVn2ft33h zAX@TS_u_ar_JFMEs8)W6bG7nQphX4Ldjd$U{02y^`~@h4-6!re}92Okyx+TzUGpmXhM zS!dr_VD}HX3JZ%pydoy{&FW9=xBCJKxTY=r@LO!THq`aS_FW?={Mqr3KX;^e|N0d? zl|!;`n=RB(>6@8;a@CIloZ-?fgcOzD?ZE@1?4|o9a=3O>udRSRS(XZG`yUc*$33Bx z_@bUuRu*D~S7WHSaUR?@=o$XQXQ5o^WBOU*6`<_J-eU#nlX{O8`!_!Vp}i2T*AMLP z5e++XCG?Y2e0(ZRh_wueI3OvnT67T6a0tZ*PO`a0{fQ%R4Ll3CZbz}?szpb7jKjym zjpt;vuUG&#Gu+Z2qnN-erAY~T7qRcM_t>!XsNQ2mypN!NGdt-2XZIn|JenEJv2dJe z{X6kQ%HT1EYMy-TuWc$EKASf%qOcMvt18ZX`Js9JuXA{ zfXKMmyvl9{(lodW2%|PI?gP?TF}?|rae%W|tULpxp*;u0hs0<70Y?q(??8ILM;sJD z|8TEx#{wz$d?1cheAX2}%Doy$V^sm9F|BlDbwC=^g+Lms8-dhv8b~d#1JYQ16i6-8 zV}r)(OF+u_8jv#RyWyu2mmdKsVW5D#?8Mdvykn>jt96SSt6R)*#M5hh0ai_Xw)MQ5iKr%4h(37rRdu*VYGQ3C=Z%-Vd}1JN!-KsKd060jZTc zfYi#JKztC@@2rL^UD&Z$xx94Ve0ME(ajK4m-AS(&* z@x_jioiXC}-ySZ4!=D^J9!$+u@x`XGonJWbCH1olww$b zpGNk>tpj5X2)5IlP3iRn2wxzT$F;<1e5GI0(k8CNx zLj%o&TShctSSt;DuEGFME@}69VC^x)T}i=tbu}D@=o85itdliA9h$2Q4%8h6JAgxk zrcTlA3>{F0nUQ zg~Cz0O1A@Pef>osWqcDz8Q%rcmucSzQpPWUda(zr=W*0p`oDo5#qP5X;iye6YiPAc z*S~7-G@z@n`@|WS+M9xN?W|o5v;us176j5J@=hQQas$@4fc8olj{&JYHqd1Gtfz2P zd;bl@mLy=k1GHBdT#;89qkwdA|I>h!Q4Yj5C153il(85{8Owk;JcTb@AZ6SEbdxad z1yaVhft2w*Al8gN>xV$fplc~jmluGP@mC;a90XFAQLh0h;}lfonl5JmX=;Rl`0@vx zKcFuQ`Zkc-`w5WRdmN}%VnClJYVUxf_m-n~45(i83ehsD-nl?(Z#5P1|^>jY1qBz^+J(kCg-=#%j6ncMdWptI4pO_~CK^l`jL$m)I^aoVX; zHc4YLnkUm#9rZRin; zmfedP5Kr`u{Wss0X|Zc)i%wj!3Il8Zp`tQGVTfrz<}fUvA0yovl!jN2zkB@npea1& z)jfLIWLiAOdA+U`+*tr>OF4KZailQE6#gp zJivD#djG3iE3ECs?z1{^WI5NqLo3o-`wm)*v$vpn-*EIE0^-L8pY;fk>hU$p&DaCh zA94IOcAv$U#c`3niKAL60#8GulP~QZu*aZQE(6k5kgj{Q72FDRgIIYUXfKe@dIdk})jSw@Vyt7Ox)R(h&E&??IOCUK&Xf_PN7!+$-O zi(k)o_A?NX(GvZ0aAXg`X9aQm9QJ^9IgWjTA~DJA z@&g?^ijgkjV41fN;_I@w_Z{?E_!{x}IM!m8*v@>Toap z*SH_aE?uQr`oldHoiWj4To!|+Ax>9@%@8`ZEkO4y&Jn+ z&J^+TLcNOH`X_L{==2*0#H**>Ht_O^Bi3Lw?11ya2vP#cN@zWX|QHv!#@Jz(92<96&m8R}~% zgyl@FJPM>%H~{3g9iO!oNJC@eaXt2c#nP>ew}F O!gmuq&esp0lnDSbUcD0{O(J zwlZcyHU_)T3gM`XMxf6KV>!@XVWfeS!EZw6V8?J8M`hd&v`!eTDfSBEAs}Tu0(2gB zpT)Pj%HSj-?QpPO+A9opl9cfp(D~SX)|)sg!;cDSj)cM5aIY}faZ(05POF5$j*~KK zf$kGV6Ob}EMpDLVp!W)czPpw25l4@|s8hY$f!Ou)S^OrXEe^j4X^Zn+AhpadLCTeLxy3cE40F2&8%!0kIqEvo3S==(~H7 zSY8U060{PCl}y0;AP_%)pp^vD4%?@J)bjm6YMJltr-|in0ci{#2VxtH7i~bhfPB_& zpeF^r1oV`kJwW`z;j{Ju?G(h{%qcqPphFI#BNe@R#6d?LWTEr(v{)$udR9;|(9Z>x z0Pz)|&ng9aMo<9gmx9IsJtt_agMvW65}EV>O8(^@00vG2TJ!bvecXE-t@(Fg`1rV= z;OM-?$GdZB%xY{ z=1cC-*nj(9kr;zAr9+0Ug>6Ce(7*X}nHC-x%7V?b3(yjmxv^u=aP3w;v4VLehuqzY zf2mi&Z?^0O4~)|@cv)eG_~HrU^uxgm1);-`{;Re(~-`1q_dfKno3`^gLqNUg8+cr|2NkIx3$D~u&T8X9}uT92;; z($Ls;cZ!uQKzoJpX&_~M9!UEFUjkCbcYr=Aj3F!#DSE-R$Ti6Ng!qLl?ca)Xw`s}aSM<#`hmtF zY@hW>AZ765$i2dN1V|Y_1yaTnK<^dCP9SCc-qHJ`qqh%8`vUw-qAmMBfFfdWc1D_y!-Xva7Twqr^6*?o9yVa6cd=K^c`eS4JI>e&U=3q>NUeP1rGm8pm?% zK5;Or+|4*w?#FqhfLCt^Qm%aJK`$Vmv}2Qnq_A6gOp+w=JUaaiGYUN^ciwJ^G9yU0nTrnlZ#^AdBlHg!FOcM6xzY?d z3uqK}Z8`NF-i0{V44DDM7ErTrwV(w!YF)?H>sFC@+fYAb_yqutZwtB&M}0EB0Hoo5 z6-f0S1bP=cK4aq;!5)wi$0k9~;iyl>AApq0{+V(Q0$By*vM6bsd9Lx}GouXl2=p!k zK>vg;eh~zup-lp6hb&;t08*|LyO1e%mpd7i>#K>R=nufOwCLfJr#o?V_{QbAIGPRp zv6t|<=6URUu=AUnP9Cz$*;sV%%j~e<5v(Uyt)vvh{5n|%NaF3

        QVfdjMpwWa81A~Kw0HfU(w>nkbuK!x!_GQX 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 q3K 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

        ^&hvJev}>7! zXllB;zSf^>6jWD9X`J5L)Qo+Lsz!H~OJ}Lo^~BM|9K~6rswcCX`Bf*MrRk*y;kDQ`? z$4#XURE58yytKG78VdWxM{2XF15#Az50zDh3ag5P8lyIv7Ub187UbnRpcVdLSpY6p z75ft~c@9jaKO7E3qmfXlfBZxS4KXKRN0bHpp^8vZRj{y^qujJvkT=m`Wl_K%rn7-i z!0AH)PjZ68{%C117^sSr_?d6H54OLw3;RRivZ|`m!jNC>2SlPlN=vAnQ4Z^K1HmHv z3kUttf>D9+!h&92E%uj`h9hN#l>s~HbY5s`F33|pc0@#xKU`86s6=wx0w_}28xANE zDip3P2}Yv+#wKJ%RD+UA%Eu09z+YY%Evza*;z}5hdl4q=j({I(7CC~Hhs|@vm4$&q zzuLd+_*NA5R|TTsU|CtzuQRjC+9=Znd1_~`13s~$tSnMiRT=Wj_CLqRBE(Heaamp}%xvIP>j0h?Bn|l}?pNq=b!umFifk|uX%H<9 zBiG1IMyHLX{^Igzs3eL!qBk-Zo2nphewj+PddmindaiEn!s!LYw95-tr^l?3e)l~4qi7mQo%u(hbl zUsV>2hQr0-lmd3(0;LlQ#?jF-hXs{>#&cP)vdC{^t;p=RIw4QW(NfpEAo60Pt@CpyKWM;9+D@(07E6@^9R$Z*_Jj^e~lpfvxE zU>21DT3iyWs)`&nrc%XH$X^jGtEgh@Gv4&4>WlRgO?D)e_{+i(G+xC~e{@1`@xJ28 z63;D1(^pc63WbGlJQCUwwA_lq(okizDxf}3NcvnFEUhRlEm2={lD-Bi!zi%f3iUa! z_h-=p;+r+~6Z@&C39788o1PN=OeJ^yCKNu`4FNp*auozPHLKPvv6~)Dc zk#LCo zJF>^$8R`o3h0udxZ#q>)XxDA3dhO+-Qh#|Q94-w7tE{fQ_)OQu>VSaLJ@i%?%N0RY zQi_irkgBS1QK&eeGJmmZk^32I6#0t+flB0$a+Z~1+xMwz<{)~P;ZbOU%S zpyu?9Bfe)O8E0%6n``g8)i3`dLaB7d|fP!SCx%IHJ%G<4#m@*!H8 za8V!_jTBcUr=%lZCj_JAWrYz`^{jsuI=&$nRz$*)^1@)59|s`{@|x<*HUsIzvk*>r z8S2qcxS~8%=I0p+bGTODqJ4^fwVEk%N`(;hmFVE2NU%3;pP+zSJVN0>V;qD&8*2Kp zUhTJ|M52EcEvu+3EGhQ$$VGn<74Qe6B^b;hDJ754w>Wx%6ybRchvSHk@{+PpB#geT z*efEv;h5^ON8oDgZCo^d{KQE<+l-%>lRI%--ng7`HjmW!apNXVoapmS8b2vlzFal9 z!gZnXms1*Rp23RIjhvT-Nj&bs_lxig4kDFc24?|RJ3qE))O3^kT@Wq3aDF4JC~-?Z zu^#-qSSmURKN=T)zO3j~iANI1=Q6+uU@l6)`LmMk8wK1HVCHIE2HyL!uLGDn(y;Gd zU^b><-+o}I?tzBk=*xctkHPjx{Af5CuKbs<^__f%<5FO1G_JpJbOLji#`Wj!4}jT{ zhJF78rspX3oeTdRgVovb_|Xi+udjGs08ER<_2s{_Am0Ye_cX4*@NNd?jWq1r4UD;) zu|NCH8-hH8A5CBWV|oODS)_6O*>@{2_oiXrkAQh44g3BD%)p__d;R*)3rvp2_2<7i zz+9b%ecWhsR~q(h0OogT*tZjyo;2+H5>~k;>6Nbj(xVWVT8-;3yj{TD)7!pgHtZ6o zd~%8GL5(rF{;YBS#A9mYbJfb+JkuYJi|((aVIOx*>`Vhk|NSiu92e~lr-5UAdaSuK z05nai@Nzltj5Kge*70fJ=)X(Tz+sn|QI!Vn6yR#pz?}`;$~16)_v$UqMeo1}o%97&hs=&1BAm;k7v`%PW*<8D%wx*@_%4Lm< z>YG|xWAiU;n%`htY+Q0YuS*!DHqbwb{RUjg=HE#Dg65`{rn*+&xzo<`ajt%8{dMR% z!m*{xFn`(%oYJ&pY-9mstImend@52s{CEyB%nLqFN_7o|T<@`w4c!d^jgeXVFyRXS;b)D*bY}8YaOp)-|i}>z%aIz!N9V0!3p63p=y^eJ8Me zAq^+YPy~B9;aUuaT&up96mHu|SrTIS);l1{CBY0x1n9)LO4pSe(sG5h5ls}oFXBoQ zI&3U`hjJuGG&5K^vS&R`mrCuNa3iq%ew9BY(!8=x_Ynzwg zl7WRL!d!6Ybc6w)sC8y~!lZ3)frD)VS1hTY&sGKA;!Xl%36__!RNJb9P`_;a#2HPK zo!2^~3eaG>Kq2j8(>?wAe|L2ON3u?nIEH0rKHAZI7AxnGdbb)cCECOBlN^O7dVT9v zuSx}(I1XkuaN094$sT6NquG<0WY3@^dpP_Pdsy|PKH|?x|7dP;c;oc*;3T(LpC8R0 zc4?jV3{A3!-7&X|%?o35=*B4rlH-v5Hm5zuCE3Hiu^h! zkNDdM#JRbehR3EwszDgWnHJ|-&9M*tcWTaX3v;*T46-;s(;WN2`foI6poQ74Irdcn z?`qCz7Uq!V@X)sSkaw5T*hkOL)*Sl?`vlFg53ExIfEd%BX-S;<;IPJ`5x01#+ceHC zs6Mdm10~DfYD1MNGKRX*lv2bvrOpD!J}US4S3Z5qmU>;gMT}Ewq>^HtL-WfY{r)9e z%DkY07^l?P;MfO_e=_;_pV(4g(q1LTDK$z-vCg4so|Ci5mWpU8Vw_T=!Lbjp{@VY; zt+v!PT8bE_)HzCubs){UF&F&Zmby<%5#yBl5;*n->c9Q`xgXe4TeTE1PAS&a_TlEh zXU{a+QdCt;LyS}EJaFuAefMjpUt~+2!Uh?J7^l?v;Mj*0b1xV@!*)u^S2aY~H^$L%_sA}|;BocL{9>K-jcj8p0YaO~q6FP=B^BU@^xmLkR} zb)k}CyGB#H;HEBH%B+%z8DN})3aZ!cSm!Q0dn;P+W=2ZH|MqM}f^1e-Kd zEqA9(U2DY`yN*hWiprzWfSF%Xq(szT9xg8}i}L6a(7x9e6)5O}6YSB|IM^ihIQ zE5p53Wa9XKZxRkGGQCzxna|G0fNvZJeK72>^|catF)(EbxV~0sX8^N8wqf0YJ~ zqu*E4z@Zapyq5-!qw?eF$pn+if1~mJ>@;wUj*>KRjNaL4;27T8G;r*bUYiDvklRw= zzF<9y-sOK~rK)~KD;BgG7yUQtQnbP|lx6yall5*MZi1gJ9!?+yu-&J%7jHVYQiJ8d z!BQu$vI#wc`ejv((HfjNv$5(`p`WH5YSHXs5Yh&kEg?VAa9l9RNOz%$Xjy1tj#Rgv z<7$7XqQT|y*6seMh(hhfKp1=Zz;XjspyaIQ6F1jqQ{PW}kE?AQRF$<^3Or6rwb}yx z>=3Gk3Pk>ePPnZ0!>+aq+uMe@+RV%Ry|H zl7eD^6XF~0`uIq^n^#sE@R7HoJH8AvgZ9;#V81pRX-64Ev-zC$pFf!RUU;rQ0h z$iXSG;j1gAM0~4@8+;8ex#^v1tPZMxcX}A~(D2T1c0AisIhy4|ZsPo1S=P(2z3n3u?BNC*VBDZ9OU;Of)+3Hcl|=2$bZ zcJ-*XAyZMDhx)RjM&ilYplo$1zTl?fU2tqQ3i0zOy;Op`0q=sl)xv!fR8ZmW!c%aM zgW@7Y1H%{Hck5?iW4iE9f%6)W5lP@@zT19gs)pw1YP=maGa)EQHz zaMZsc?jlEP?HO7>RL1Ip#lXlaSW#m!oS@4RJ0gDK*eT_rkxWyCyz!Xvb@<1LK7mode=CvxLs< z9FVhK^i)WsFi8h1N9d8LqBxN-89z~)^Tiz=n&5C&Du;(C=lXEC{XnkLPnDqNYnZ6l zQpvIxvaBeoSzf7aNtN~yopZOL44PGo_tqbxBQf1hM^kE!!c%o@SExHG=?9%Ru&-mi zcMWHy@}X(2D+mI)BCF#g@0uZGLaAUE=f_Y%gmy!APgImMc7;B}+g{Tq=-b;g9A&o* z+GR`P)!EQ4?0sbBUZ~viJ`(yYzIxc07k^3rcSd$WvF;dD4A9rJH@?C9$Y!ndcg#j_ z2~;h92Bov`m-mrvW8U_0C5gV><>%w6u+ z_q)5YFK=%<ZptR9C7a4@Rxc@lf@SI%ot4+$@MgRj#?Z}7KpZ9M#xJ$3f9>84T( zXdvA86hfOHJHQXq;bx|`HhbSa`~ZLDP-^y6r_}ZOA$bcKp=YQTW=j zZ-11Qoj7}H1JWpwKN>0wuT^pk%wtDj?f<0TgH7vW@pFs>h@EA{nlJNe{!tJzhyFsz7@fd%$aHz-sE#*O5 z{9J)CoV6l{2duh9dymwLKD=ACV*7#2_O?vpD7pk$C#hZl2~=j;i7N6^tIV-PR0V~) zXBhJBQB+eZs8%s3)!^Kr9Xq{i?uU=_=Vf}k?gRn-T^;LJEX@yRv@K@s#rn#u`KTvz z)o@qr%s6@+v$E0KiB6mCUO#4QSH=kqL#LvDGiK}5{l~JL%x=KOqR*g#H6G6LKC&?y z52JDlWknI^W*Hf!v>wtUX0|U#wY7>0_!2Ou_k%I@Clb$*h~$@Hp!nu7*oa-JsF8R| zBKbiHjxD|5SW=|_!jd95cBKWk%EGmSl0;u);a&kHrRP+XfJu1EHaJrxvU#Ayjf+7^ z-YoznZd6&g%PrhIP?C2SSU7a^MOT78tzejX5!7i{Ukfy-SS&fTD!fE>4;Yx#iryQo zL`E?*TC~C7>H+MFSf=zTEU9T;RBOzxX>Q~WI<1XnS!=VeX5m8adZ6Bg#@Lc2XJHFN ztJMgG>z_yH~jhfxSfrltNF>U(4n@!?$jngDEKcGS z5q)vA4H^R#hCV|+QYIs5ahUy4S*%7q*~f+mPVKl|oERDg>YdZS`J~=BkT7MHsW8m8 zMDHm$3nNUrn&@YCa@{Tt2I%{{U*2|MGKM`)8}oCwza<&N&Y|1Ii69@STbI7QI2ps{ z!tG)aq+4C*>_iLJ+dr(w-7Zc5u~z@Xr;YCl1~0}j1jE?(?0-pf$Yori!fj7Nu1>t$ER(+F^R*0i5L@eXASEv2W+c{I@d4 z7^dslnqx22pQAZLEX-uhv6tniYL0zxd#&a$Ero1O;@p_TVJCq(jz&JdU}4BfEX%BX z?Zxvy{qs+LQ^qjf)>6bcrMyb&L_BHkUijEdTWTN+F$^(IDOC$t_ia78{*<6CH9<=e zk?^3F;#a2>L*#aG%7x~7&yW{w zsn@j>F;1y$aO~y%TQ;57U`w6A0tQ2jQ%W}PFm7qS{`xgf*-{s4DPo*bEQ|J%d+w-( zM{KDYEk%q|iqnQ}7oRj&4ITeuTk2LV#jj2&)@OF!sJiyM0b6Q=mLg_=aR6`5o4l-< zH<_L5<4P#Zo}u~F6L$S#%n7`sfjFagGz{nL`o%bB{Q8AjlYoNyKUry)JDwKcz+jVo zHC1yhu5y~+WZmxs(wz9@0(RebJvpy;DqOfQQcsO@wF`@ynsM=(TK*0!sb4k?YUgk% z7bZh#pQKd6Wm1l$OMsXOHp25 zd`WQ>cL0?a`4JoDnbVY~V}t&Z!cZ{|gID;iJ3Hjsl|1%D9V@>@I0PFCR+fiwKGg#2 zdsULrfv6vM&O{4KqgAPn2Dc(g%^O~D{M^3HVjK>g)-SOZjEe$(+;>wFE)Ev?b)QzB zN>#mDhX(^;e-Um;DlIOm@ax`guS+S=>BX%k((A=1Mor9eD(VjfaFDyStk}N{*Vy!V zG`z}RRvN^84&~*HUJXn>po{3L3RQ&=y>@IhH{rqw)pf=nhu@1z{DG3+hegp`m@ zwI$Kulqm9-gi9kOC53949EXyVeato02~+gyH~$=Mt$cjWgeijOnyOE&slJIVh2KHd zNt0?#HJiQDM3Z7o^-g>b^uncDQ@s_qok_UVYpMH?lFiGn*?moA-}|s{BYGcC zuvb6~e>`2B&><(k7#=!=K0rQOSs0FnQ{gg!n~OHJmTesjXO&XnE^ z*w<^Vl%M}e#}Z7cwMgQI(6I!Q3P-EHlm_l>;DTx3*d@mKcgd68a75YU^Pp*S?mH&mkJ@qS=;DWs+|M8MEJ6%nUjXd@;1GkyB z)ZzY1c#+dKCchAy<@)+o+PI*(v=Mqf6Y%7rgQo02muWgKO08X3N&U<7o0@0UEQ!@( z{11FZ(}EdIY8#ww`_pt=tw~=2LaJb05%Y^OK0MQ3lO|f$q(_2Mt848C#>(QK_omBG z>(1JX4_I8vXvfkrv(cH&%hTT=H3ixd89S!V~9vqYcOP z#P;;WcK5_~^~83FZ#a9bTN7b4ugX>9(7D{rzq2nVd?(75SS9dX`UcOB{J=`->; z#JmWA7sBLh}+uU5n>Ait5C3oT9#k zr_ABr2Wq_HJ&Gq=;B2M*{bEJ^8P6{(>L8wU8-7AAn4%~zD8HgE1T{-hlR#alD8EHb z1tm6L0cte9LM=Tg2@%(&B}80#nWw(q1WH1LRgCrnqp*7+6BGG2y@?iC))`fv^m#j; z2Zx&?u%K|ZnH>YEX3(qWs7dy=EaNDv2m-8r8eTAz%&d6JsP-cntrxT($!xWEP87i9 zR1VD(3z(nxs{AY-{?MB>Guu0RCzcqz7rpJhc^5h%b>7C%0q>mk-ix+*+g}0$pvW-q zMQ?d;zDs}Jt3Ge_wyyz$8Tv!-*bRIh`TY%ERWG22i14vj`4l zTj*i!ZJ!yjI?2E4+b{>B!KE@Zd=eT4yRrEBq4)UUs0=c)L1v6H%PUHgxn7*bTyB{8 zd^k$IM1t}`ysbMvX;x=!m%|OrChecNV!2Zy!(+pHCQV(8G%-?a zLCBhIx}9OUjol+9?Vk*YjYi$Id_~Xl3{!rpg_V$CRd)Yn?Vq?~=e2haSYFw)JTn2D z!m(ld&u{N`FCX2reCScJ!&Oxy;dz!h3M=1OTgL{ODY4JIw|rZIllyZs%u&R*3cQN? z-8mn1tY4KA@9qi>LsrVRYcLhDsEHg=in_;_|MAM#5aA7|RggZYLM19gS@GDRo=nu< z@u5GD`!l;T)=1#3dJ4kB;H`XkYh8U$PY-KjC2K`(rWLhjK})%urIX&oq+HI@n0X1M z%*3Z$4OH3ME|GS{$f`!Fk;$MqQ!Z5`no(Uv&IXlj@F}<&P=c!ibq#(V<7zww_YF{j zyC0O`{s$DLJjPG(6x{Qmq$)iFshWqkY@-|$tKw{f)m&6jOF>OkR4b@bMco0aTv7Ld zs#4U?KuN{;dr%_rF{o+ks~2T|H7Jj93aGOby~i&|w-9iYVb-v*`Q9+ZxIP%9yexCbS1|0@f}%3p9Vf?`AGF@9^|_FK4rS-4L@ zEmOE23#XcxOzv)(-SJVYNA@hKHEO(Yc?X@IVIAx7LfXI!|xp7qH)Cw;_}9B~=?@@4iE!XLW9FuE|QQ$FqzEUu(E0mW}?3 zDyj{xXs1UP_@U9BiNchgOoOX)kbaN$Oj1<)rg2!ImW_V!pSC)_gPVVL#%y1H9ii^W zm#Di;?{#;cX?c)48%LR?dRjm7@yM`FY{u!HQ{Cy({Y6tOW#yrLJVz=I)$=p)r=@a6 zZ-i9UheFRpc%)y|3QDrvji3hO=P_=^vqn)IkVuwe6(Gg^QBbUEvW?AnN*`()DCtA( z1eK${zK3U}qW0q{1^-{5q__`3x(C$P(?E$2&IKhtxByfGzIqIvwGJ*W9L16OvZp4KHl$seZ!}N z;?Hf^JHq|kfb~b#57_8^YCUeY!NxA-`u-cEZ z=!T40W~V>1b5PD};2rNBVZ^=h;2j4#Gj1=+e`DnbETGy$drWK4=VhLDgwAYirl%Db zCVF&QXt<=>sp@$-ugp=NVSElk24ExXF{<&DrfUT#He}hV*Cx5?TX-LepU1cx&)XGs zAD+?-u<5!Szii`Ic%G{$He%9;dk>WK;krTPsjmZ(;O8l77^pFd;s&p=imC)P3Y5oa z0ad1W>8f4N4^b z21+EbWUVRHI9+8oFh>J&o_{IZVG|J=oj8eva%X zRPr@sGz`R`ZmW9f3~lQQZI!&$fWaC5>y8^=Fezrfw{OC<(?JIWZp&O)PwY@!s%ErD zX8FQI8EOROh}yZlOOcS-p?QZ;m^BHZ^_o1Ok6S32O^S*7rF~OwXXqK!6Sr_|RjfzxOSQJL!byM(rTfNuZ?083Bs9 z+GC6YB`xxKpe|GPVQ#*~hg+s=>*^b87y6o-)y~iHK4{o67GSXeTP*6Yf%YQb(pXEY zZ+@*Wmzc?h(yC!G$Bp$(9*bpWe#@C)oC8}Ij`f|hthJ^Fe;OAoP_|-wh|k;^N`zuk zxezv>*3=}t_1Y|J`YLCF@|FcQ?Xny&8Rq8N6+SpqyTnJeY;t>;XejYr+xr9gEoxis z#lA)^Uw}S$^uqH78-08kdz6o9d>6<$;#^JRLPV7E1+Pn+-_*J|F|Hh&hZ!Fd|Cb;o z5FNgzI`K6YT?DCO6$xw@yPN#jC-xiv0<8L6SikVec^R%AbQ9f%zYc2GE*v-Rc9(Iz za1xjKk@c{%iY>F#=!?ImlZ$Kz49kwwB<|irMg!(n4R~VuZ?@Uk3{5JGqS+1)!_Ve0 zm$HP|oYiYz!1%jxM{?m zt1XV{)`}!fM-qpJ{=}G4_a|{4P2#Li;&8gaX%G8oPR?JFI3Ff)21;NcX!?g^CZ|28 zCviCc>BMj><>UmCI8g_OJK3(lJ~XG)0tbfQT9P;&NgVFh6=R0tz9i1WNu2db93J#> z+Vfr#=Yu2;+cX+`r}C+qWAAv*(Hwh!bBX3;S~1UATbdyjXNBerwK%tFj-6iA{Vv7~ zySX>l#ypmUc{Yi&HHl+iN@3c(I|=iTBo60$ZU0oG@-J(uZ?rk22AUPC6|OUqIJrrj z!X(brBu-5dXC*kS!)PSw9=9;$B(??Yg}7bA6&4#eCVd0-kD1(?v=lK;spA|{7mhsb zEnDhyEk%q|%B!SUhtYg>YS+(fsfh!HON>)03mp4`tjEv(_4~F|tCk|hDRsP(q914` zKk@YhA3m+6h;d4t0FHgF*5k)izi7MlM=eE+Q|d$|#qk5pd%rvr&YE%P@d%d~r&KmL z_CD$7|5Stq$&?CcDPo*b96j1nFJ6Ae!?skTmLkR}b+VE=6;GNoihd7<>DG6(6fsVz zQ^0Y%OsRRDEw|fJuWBh`oKmWPZ)o&of0=WsX$$I3Ek%seKRzX8RwA<|&b`W(nyjUW8DNy)Eoo1`xs%D-XVk~$ zcoXN?@pKfdxdSQ<7&b-qf$C$MR3GRR8>a;M|9&5Tjbrz|-bhA`z_{YS)!cV4Z>5bb zwaw5TEN_;aydna^_028TXS`QJg{ay+Z(4)iizNjbkYGO=pmCF)sR0_u1hvo8v75cV zMl?Coj-#k}hD+iBXe2A8&OPxHuVsmHAPFtrOKYyKRrK`O(it`LCo6;_W@_M&+~mSO z7~g;w80exV1g2?eZ7WqG<2$k;&TO`hpV2gaVlM^;(oTdprX_MF@P29y=(VRWk?Y9c z4!oJ0lbGDlM=RjnlpFf^Ek(YBOlysmfUOCU(pm#6qfFt}#Mn_Unw=;pXe#5zv_L{^ z%3HKmf3fYXDdoA;3T~3DU5MCLDJ5>1dlA8fmyv+*d)h}d{`;z=`@B*yf^Gdpk&0+} zi61`15d~{b25QG}d_nE(nJCYObx57gc`T^@r;UVJ(7eo@7W;HjP^$Lq!#((NbJ%NUJ3(l3+zq9MFKS zL@K3|7<3$rup<#6QTn43gHu%G4@AO&s!FJmOmIZcCpkh6Xjyq-Ww=E2#TMH^Oo=YT zot70)glwM%!Pyb`uNKi^PD?rMhc??1s8}rxRM|36OxmwZxxcI`9Et`DOZ{pNi78

        ?2{<}g1e*;_}7%3PeK>z%8Ma8Rfi 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

        _AHY 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%0AHjvA0W~)9(S>Qes4Mute=?} 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¥fRUl5f(xrp`jn07XB+x}Opkw>G zCIh*?be&@p~bWkARL`*{X*p8(yy4CpQc-3J-aLDXA? zt8q)Z(v>gw5F1w~5do&7`y||N&VY{T{c;9$XMk=~hIDUaNOvd$I?B@%Z^kX@N|#=i z$K(v?azIy|0Uh^N;u+AfyI++79s8eeWI)IC?#h7fT+kiLfNl)vPPqlQq$^$ijmP_F z26ShGt}_EV?q_}}13KV&~dzR zT?TaYuRa4h`gc+*@gtq@bGRj4>C$l=-p5nuQqwU4bh9#` zlW|UlbT?-}$NKVM26W87A7wyy9_Y4bK*w>@pEIDN96xRyZb?_VcI3nRq73LLuZlCE z!!m<4D+4;t7aB64WB;}+13JdBtA(hbA< zdGeL69xz;A26VZg8<9enDkn*IVup05W=MB-hIAKYNH-xvy2~@5WB!Fx=*EYzmGOVB z*?+?SmS%sP$l*aFnum)t;wTf&{oukbD_+DJ>sxuEt$BVu4pHg3nyVTYwJmL&hK;`t z9uxw#x`Uk0(bk4IOv-mS?l`doPY1p7_!X{iNaC{nt5`yw2*O$nJAgB2QWo*ju%>p_ zH!QA4w5q3-+HR%ItqpRJM~+%K2Ou1tFpZYdOF0t8G^$_q@;t4h9_F(o-B&g8XjZJb z;nT^_;l$#7?Z78xb4J`BQ*OiP;MdI#a2Q0fsTji zQurLS>?C6OP_LQW6MF#qEuP@i&E zoz+Boxus}_NyHw2j*(|55PG`u5=)@8cJ0pXk#=%yk1XUrC}QjBe7vW74e;8X9n-|4 zKEBBmnUqk^qN@66$yTK$;tSLV&+J|Hk-GFopK1xIZZxPak3Iz*qmK&}R9PkZ;h<#c zX}Y&T-Q^~jMi7pcVMcQkLWOF{ht$!6K1hYV(M?L&z3l?($9TMD7(&x`O>45Lxe9Dg zC>s=r--EaM1n0ZNnK8P{_GC=aO;`APsZGqz_@I<=lCl(J|E^>eZoSbbl)E?jknK&b zQBoXz9Eo|nyMLH}{d}nVa3~U8D6t$Egjn+yilF4O*a~^B^=DBkUU!0}c?a}HQeN}g}Hixp)_(e(jd)4a!+o9T1Vdgxf+4&Rc9WBvUf=?)Ra$_G|lLV-azoUU^CEBm zlXlcMD)A9W*B^tdpc;GCwDog5`9vEDN4Y++-tnR!ekt)JegP|t`wl@oVW6l5NO>0n zDep3%Vd674pNjGGS?h4;d^%ul#(lWFeGcfS;zl3T?PZ{!h}-M9@50Y#{Tg?rqwG<) z-vcRK9}tx@`m8@YZij$g!_Ox=XP*HISU%A3TWOzl9MI3ijo6 zph`jfGQ2|2?}0RT`6YNU+X193PVuoePoPTmBxS=?>~ zdO*R&UE`nT9YD}nCU*aJN%=w9dTBhK4z0ckzh1f*s8G?3PVtw1MB zI(7j?#Fuw~t`_tWkn)ZgZu9zql$YN`pDMg(0V(eoAmx|{q@i5~q#RcQ?T61ks|rXt zt_7Maq0I-HEocc4RgwCv=zKx906isi_W)@a4+Cj#d=p6X>M0Wo$-ZC5m%7e^3C_I-zD0FZ3 zLv6V+CS%*%fbusXa%{XfI?geAag?CudWw?*j4%!(Dho4- z3iROp&!d7ql%~ieTDHM2xS?E%O0VdOI$Dr1u(fk_)WFg!5cekLirmuVZ6G;sRX6QE zi~{%Kx5r6r4#py?;T1YtQEt=Ig*MS1tdP2IpmQHo3=VYeIb!I+>uypXW;HX~B)IvoJGny788x+V(&NDHx!VJqtf>qj_3d9v< zpJ?mRvC}9#>)5FgNJlO$KtIJVAXZ4!tpm?GnqiNqBbT*6I&$d+dILY7btmrHn|uX` zqcDsmaMu_xB#i+jD@RQ}Ya8w=0~sTgcmD;Xeb+&tdH4maf8qX^pcAt!@iSmiOaC6Y zsg`~XcQo8oGE>*7qL70sfEdSsRSz^%&}V=&w3~o5v~@rl8a4Mb1p(_nfPN>TeH%za z`w@_a@r;9h;h@)nG_<`y+H>>)Jt+RsyoI`PWT`oH5|HK)M@RoDp|Lk87Q_*X=1>jL z&EgBkNzB6lgrx1?5+L=DBPON014w=TBG4bizb^x+&tC^ppQ&L<`{kE_)R#Aal$SdE z`-J!RK*~$4H_F=&q$$eJwpDj??4)$(0jYmufz-c3AnmI|KoLpDOrTkUJ_FPs=tiKw zNVqoxY2I%DdRpF6hmDrPQ$WhG4d`#e@dA)?ya}Wn`+$_=&p;fF`>f$PIBh6s1kg?5 z^GQHD@(Th*#ErUUG?mgXUw}obycx8?^dOR-=*-8wZVheFB%&i{ZU+ZZzy`Sk?K#Xq zG;s8nz0rM`cDI-%3X14t*`&fZ(XaaRq0-f!z+H-tij#c*Z9j!iD&hCUXDB^8I;xq) zJU?GTk`6EUu0KDv54XlX|FwId@RQ~$p|*63|Jq&tYoS5=(<~6^K)q(y0{^(zmR<+a z=w31%ggRIMwL3w9kqPW2`N!>8dL`fP5et|nG>poDO-q`w)adaQj1kZg>n(iRZQk46 zO&+vs``1UQsCjno-0q*Qp}!qx(Vj}4h(FCBJRWu*(M#DK7T3IVTmbQ3^nBNFIPAyb zg8C2B1?Vn6%H`xePy5y+!DuG$m^&Loa$WGt6Sb%er!^HNxkIDs(#PqsC3fU40Td=|y|Rf0~)QacC%tH425191up6J5C9BffAF`-r$TIc`gU zGzMJ`y2C+_0;$lYm{vqFt)howIuAah;{l>b_gOFCUMz0E1ky(SSD>vDgAW~a3}UYS zP0vn~PBI2Qv^<(khbb=)YNm6yU<5rwnHimLB4R=q$Qh4*ftVu=;Sw8rZD zK+3ThNI9MZdO$dS4y2tq1k=q2R)hK9nKN*Jnk^qk+@p4Ne?*fK(Rn@@K>LXI-+mvSwEWP^3l(ylQ z98L`fRxV4-ej@RH;lP3o=zq3DD5DFC!$Obr6nTv90|KE&9N8gI`j4c1AR{Ic(s$Y2 z%VEhT*rDiS1;E?v54-=8)p>tn_MSx7L6n2${XNL>r|{c^Tz^zZ8O&2h%k@o?>+vJx z`ZfPMxvrgqWN4c5NzV0aGS2lrqF%EJ#L;q<>vV&$yCXvBjtIYP^8Io(=`2S z3Lup17LNJ+4q+JR++iE}25%2EwRi2X{I~5w`6XuWKn)opuK%O@vCobxeMb%AsK8VE z{zo~nS9~u+a*96muP>6p4eK8#%}aC4l7(pK?~kioX+mmYM-E#Y8*Mw}O~Gu4uxprQ z#xgn0j3$i}WJSXa1BUk5ZVQ;R+gox?)&SOV2RiTSi9(rtzeH9;W01BByiW-*kMUHw z%E75;TI#+M44}H+R}Be4a`nqZ*-ly(31J~dq+P@S&U7r_$wb_D65T| z8(OlNrS;Ak7(Z@;zW^ISvio%{DPi8hW@J;}fU?1eH)_iZWpW7BOA@X}*ON^6nD~yp zFe9udJY)yPv_+DZ+s`&HpSOqLnji4C;raeEp zMxMp@)#AIvBQ>6yQ5ryY=M%`j?!RVrK5FD@^sYqbJ+f)|kV(gGEk9&bKC*>l{C8l5 zzBl@~x;qPp$hO;M~lr1@~Lli;QtA%`Oh z6cr8{IaH1rK*})}NI5tz*D%_E%7tSYkaDaBQjQ)Vo#Ffv=$jJz_kq43=nM=q3r{ zCLq>$pVbXiEN|BXX-?h^q%r+6khY$$JLqu-{n$aT1L@59_YQgoXn}Q_IZgYU{lef!(w6xX%-5_oofwYW%=(zpTar-0C*M#oRK*~El7a!?~8&#Vs zZ#$4~Y2FB=sk{T|dZD||K@S66CvGnQaV8hAeh)N9P~NdN@5dcU1?HJPO z`qa$Cr}$>58SSsYq8$plNprG7{c34wX~4ku1@X8gXQ0y{+0?==7f(}Z4+`*<3H}P5 z4PYSUdfXc|J(U?uA|ULKsr}3y#d4?#Lp%)zJ>CNtCiEEtR~S;k(o>i9AreZ{)p=0b2y$5SpI?3X~-a+xyJ=694DG0l_bV5|bxU;8g6Vn`f9Rr2UE64Rl zcW{)YAta(0P2?4AUxDLrrHSb7qJt}bw;ypFfZ;0~6M{?O&ccE2%@}L!?ul+l99(|k z5d4@sCi-vu&qQ>?eqT@5?%vWYEWE}Oog zW1cFNu)RS>iif8-9Og)vqf`z{2RgTz zg5vVO{e;7xcFe~(QQ&6kK1?BpDp>49Vr@z5CL&_CxS65CfjJ14u2}&7wK0@Y_x6Fr z`^(SQ@iw*(;JMHtgQPm5J^9B)_beNZ7IEWmIdayvpy6|Q4C8ZspvX9YQbUQUJX$?P zCKfQbD_$nL@D_{cyNtQ`qL2K&>^E#Xmsksf7o3!1Mm`d(C8IC{%a1-G5VN8D=;H!q zmFO{nvP!g3piE^R1$0--Vw)ks$afff7gC3=ld6Rc4pWyvjQAe{SM;z(vU8VA-#_xN zUx?{@QD>jOcP{b?X5Pf3sS*IPNz;VMM;>Ta{QjNGK_s)zbGX4ibUxCksN^FH(#=H( zDU^Gr8M#X`@_?I>>p7A5|49ZOsAZ<0aG8N?-&=l;vD=z1|3Jx#g?5{pm~~yEy>7;| zp3c{$Bv2P3K*V!FGB_2*sxry(fDaBWq~ ziDAPeE~mdbchq?^oMW5J1adP><#7V}ZFCc`!q-!rPuaG;xB~@iNsJtk!bWOb4%saY zcBGB;Qy~Kj!$WVbB<(91YX9xC-%r0CBN8@MZ$bC&(qN=N6p;(@QDGtMmz=N=%9|5pTYA~aeEc_YC&(}UMXlF?z@GT zGf?&K1E30dn}s(zf;}CmRoun^bqnHrvP=+ne5wR}2B=BUXMxHEeG%wQ{Cw8^xa&Oj z5umrkjdRR8q5C1wE+C)v6Cid(K8y3tr{wKUpnc-@67D+g{|%6i(|-@7ao!KqA{;zi zxlj-{+!ZYa>J&GsQPPp_=Yf>t2SCMm>$6@3nvS2(+K;=If|YHT!f>EJA{?JZBli*U z?{uI)i5s`d>%?swkfvxN(4Xb)Wk8xDZk4OgJaDMx%T4oxLbnnqBEEbcNMrgM&=PUu zX1KSkkZXrA1xV*o zi-4||w@V$g%0cTK#JQQ4>Z3qfs^0*5S#s?=Ku?Mo5+TdtIWe4(84G^vr&ukN%+_z{!iAuDv}shQtBqFCGwpjtl!3;!QNS z!;i7HInsenX8&>S14e>R@dFxc!uW6d1H8l;Ml&U}dSj2`38 zONVdvAsy~Z@UeT8AhSDPz`O4KS)KQC@2G1p%@cQGR*ODWv%on}p?2;=Jh8alzy37t zdUWPGdp~ERk~A?h#oKg91H{M?Gf){qEjJ^E7JjFaCwy4*j;&^HnT~hu3It;g%GifK z27XA#fzH*212Mfzplp~Nw!7@r9xsGIhH>w&xZR%pw%`QnLG?vXpz7ezoIu6)$!1Ii zQ%<1jxWzeR>TDu=gWqh&!)$pluP~A3ivHT=Oq5;d%zjyJ$X<2*z|!$Y`BuW&8-xvH ztnOn^O9s5A3W(3@FlZ0hGjr6EKqcR0@(q)P-7FISZ7WcM9R8z3v`#XZ1OAyiu}LDn zBf2~lgbJs7*O=2vOe9o$JA2%YWd%~IT7{%G?Lx6iaN?tEyPy`@TN`Lk95S!L2E7n* zLug05$C&{2uImeb|IufRXg%}F2oZ2!B(+y1srmLFldwXN+r;dKM#d@V5W$$JMcA#u2 zuuYQgG&r51toVKcvrO|rA2_#RjxBWZO&1O(YmT6Pp=I{244P*4{3wkUsL-Slo1SCP zfO~wx+7rFUnLYCSmpbMR zN5Zv1a`gjeJA}Pg0$0y@_Cg))Q{hQ17L#c6jT%Is<{WqX9!GWT={&>+!DUsc%J+yT zC{431*)Pww$UYsJFO!rKeh|s&|2noIPcfs-To>J!UJi?BdUwS(k-&Y@U>-NIHWDq- ziJis#QbdcpZOyF5(Z|tqb*omSj(jjRIYoqKs!?O6^kb`3JcBEi1-3`~Nk=2_pT++T zwqQmlCPxid*1!ZiPN|{2mFA0=G4SA5;zr8b$N}cH3V~&ophDTozaaCdF*O!_8 zSc{xnuNrAn+8lZ4toj8>ij|=_=>b($sxo z=c7X`iA-7m&u_As~&xH-L1S@k0mkAfle5e;H_=@a_S6Owiwe^c?*^ zfsU1!W?>5YGkH4#Xr-W&9CRj-hIWDDRsf`1K$Sq0Q~_%mke1+FpklcBEN--FSvCXZ zNoY%fBEqo>NI5nFDc!e$xFL?E1E7e|aZ^?EikqrhzV86(#O_#5JdqZkbvh6a?f9&V zfizExfHc?QKw8puKw5KJfi(YC0ewb7+W@p!5GTR9Vf+M;ZX&@O5x_SVnABg<^nx0bc=zsU9JMscKLar(LfwU%ayY^|}_$H91{0Bf< zJD+mUa}IjNLB9dg`qB@ixtn{8U0;p|(sq6^kmfVDYqgy>18IF(45Z=GHYN{b_^gM3 z9+Fsn14zU85zr!Wdlg81{s>67SI@|`eZB-peVzq$miSi(r2aJnsekK%G|pcI`nrY& zq&|NDq_Sz`v5wC`>N7R6Yn+>bMoAd0KpMtUApNTHCZLPt?HxcD3;H6^`v?t-dqBFm z{#Bsy^7dOm#q#zEAg#q)fUcAH9RSkwW{0{tntI%CfL)dE5;VxDUcor=ni|Lpj z=Fs7wKDi?``_LRbC>M4NRSrm?hTm)rr}FFgmtzGXk6<`c^p+Wz&c9ay7U;=J=Lb}x7!Nc~!&jY>ZmnNRTY?i*h?4m^em?6{xF07djQba) zikAWDV1yz~JBYD}l60F9Ld0cy9xWpe6XMdx125Tz%L0eGiE4KI_N07lXrRJqx7q zz0Ns1fyb$|ZTQK z_%;W3rYm4whP&3OFwk0Yi{ZXT(0jORojMbFt|i4mFQhZdXDrYH{CslCag%UJNiBRB zSd~4Arl;9B!RlZ0FBGReh1O#@+(4PhVtWY1w$XgTOm$A%@{wET+tT4EpA=&kAzQ81f(PqwzA?rkNGik244x*mt5-6Uc3L?3nZ`Z(ud?L*3_;`oUAOlJ-z z^J@w^k6tZE$zd(NmYkLbn-3{AlX%SGPe+G{#goT1(av#SbWkcZJ$`j}S_gYPNHl}R(^NwCecX+&J5Y}`5aE-?_}B zAy}q1Ii6w$OO;1YO8jE>GV(OHXa{SHGG+BR#@)$re8SF!O$xAjmNsh=TT`;xZm8#^ z9GXHy9aJQu3MyF<6b67sYtC6f+KjIR(q>!(q|I{%P%eHx`PQ~sn&*5x7mFMBVj}nj zWckz^>jSr!~PBZ#Sf)rOi56R@o|pWo!$cXZZZLvp7^xhzEW2g`#z z{XS^ZH6xoiA7?;s0F4}rT2n7*B-|znIvt49m6^^k0_sU*eGI1$`H4b{Wjp2ES?~SG4|JsaEy}bj0Q7#7! zCER>D$g@`JDf)AGfOfxj0O#dmef|<0Xllin8O*W6I9ONoPk#wM0KtY#_CU113=w!H z(RCQA)w<9hii;#-qko67 z2GB2X2!{i6|G1Aa!vx?6rTZ$qvh)b?E>Prz)%4Oq~X2~r19f9 z28tb@l?56NmtPnw9T)qQj*ESpg>IBXCrvAWrZsZL%(ZWJ_;hB9-CAlP;6eXH7sg2b zHKl|)l`R6?j%d*#cRTwFYrBtki~#J$>A#&)*Y1D$QYthmo;m5n_4PbV4!MWjpR|9C zVL$-kpc(ksB=`x@F$7#1=kCIqC*YS;m5pixnZl0L&BmMYo)btJpWB4ey3h*Hz`URA z>54mAjs}GpDPg~~LWwaS59(GW2l4^WKBb=M8|WMhwwHxf2=eg8;Ehd>zo&@e9a;-(7;X;I6grKY?_~i07!j zDQ{Usx&T=Q)Ff`72D(wuJRq%o9Y7ibc1{`tc8Aa7hq)x~TIZxL1yPssaH`&}39F7K zrYR(HAtGkXoM!L;BKysz5DxxgYZH4#*wm0rMhWr=HPHQ#6l-Qq`XrM)8KB#5^Dui<%^s3|rTd?z-(Enn({DbBvlm57`k{yF2zoS*GU;-fP0IjB z$A|5_b=FoAQB30kMyhz_J^LAz_gq=Pw_kYHK?aAR97Or7S|DvJbwFRm4{8E&r{Q=!XthDyzKy%Kq?drS{k#jL^Vb}Nq-ze`G*I48I&S9yX-lHK*Z5rm^aOrB`Sz_C zKKbN3vIvl>8PZr$SB1uEEs*-$3uIyiWMTzmVg+Pkg|wPj0hw4iZs$2@9FWG3gH4Se z*GZm)Pd=*zs9561Z{jq5O+XJzOg{spVTc?UufsL}njqZ0({Xz(6w|$n?Ed}~oy|&% zFby3l-ng1D*T_xmUUCX=YalZ#p}W;<$cICQ4Q;+(cFnKG7Q0djXKWwVXVBa1P3moM zh6(2+uA`!wYlb5gmI!`ZjyT70Wb66e72m~p2V2Av4tg#$LuX->Vnu4F3Kq&VoEZ+{ zf9wE9R`?}rz}d3Yj4*SKcG?Vrq4Thv3IuV;USxV2MS@Z5$fCDaUdzUS8LBpFp1l|p z6?9x98I|1-voZ?%G(Xwcvh1uOeMgE%;>*~taacR2BkU^8lNh|Nd0=;7I}j7B5Zgz8 zoTCuV9&PuwF^+I_KAaVmHMv^GPAy0`q?1};DnS52-GX1h8jHKBsz4*~^I2Em{yC|t ztft!3>w&uQ3rJ_CgS<98>#S)xkam#0KwlQRM{s{s5W6+buvE)fleoQzyH@kPK+DAK zuej@w?IQ=BhIr_Jjyo3`Q_e{>rkoyp9zVnx_hNAQnZ5M_grP~80CXaL(6)m+rJYt9 zGk$^FRrm!&1( zO5vae4sacwsiMVpgyb_W-P>dYE#5kPZBipP^FR!mxHd;QZ5L1aZx@6l>C~;;Q=f{6 zvsvp`36ms;N8wp>cpA_=p{T?CF+t6^KO(5ZLF}I&7dJKtMc)LvQ`~;wpr;)49FR7E zH-NOX_X25L{s2@YarqOFQ`-2tNOuR0^3|xUgKJf0-f-vd=(~M`bsLwkF+tzQoujjWEJLa2`!$~Di`zlm>3e`}sW%#sHkhB(3=`Cp*S&Mt zRMQl94#*m{zkJK=t&CDgn9s(Y(Zz|6#$`d6hYvP1E`SY;25Vtsd&f99E^2F_v5zIz zxQ<2b;weN)o7tbTEOP|S}6)%M8X?6le&76cbGFKoOVg*L)!@2Ic$lz(!B zP$L>xz^O?X;nWj^=ir9Md7am%E82+#Qel$)9zpXcl3&TL@p>e`;PPOkbMaCbURjJ- zE^2H*`7rwzjNwB=<5GDTVWlumxI7qZZXLI%etB@d?Ez>}{$mi*g@f``Vmoe8bHj~G z#h4qlqk8BYtRlGTiZIXZ(eVEiK~Yx;5!Ybt{ce5HjdTf}OCQBwb7p zCBPo1AULnR-IKv~#bZxm#IbfIBdoT9v4z3W!TIMlj4ij`OJ7s~52`B*T~W-Js5nv}Z1y^D51^@|(PIW2@~s-=w!ZwxL$ zHlY(lye3-bp(QK~)}s~^Y1YhZ>u7R%WC{#7_dFTa)(X$i5lJ9L!H%}J;DW|w-dan0 zSZ$^!>}WF`733kLDe0Fis$aNJ`hkTk7$*w$c)*kTly;2zbo6$tM9D3ww0ZH84%37$ z58A0<+n0u16l`s5Y(U$-)SHxP= zu)|_s_5av=6Y#34vu$`EP7D#FC)kLnC`Sy6f{>5|iKsdAJV_W-hHywuB#_BWfC_3O z)#EYZJXC9Kt*xzg(5h8y`vRh1wN`DbsA#d$7L~816%{Qu|NX4B_OQ<03CH(+|Lgj$ z|N7UJv-9j{-}jowz1KkbiPZ;&76Rom(?%J8xsi70DuLI@%r;Ytgu0=sQqg;TO`Yvs zogJt-&?%+bS?#>asf#AOF0WQ#Ds!vO>ykR&#gbBp8j3Tuw()G_Ov=~Pa!hl!r8Tjo zJKe<8XHBn0t0QGZax<^?VJcIHseuYAZ=1fllSW^=kv7!#TAprNb#XU3(9KA_jvjPO z5nZ*@tE_xjZT2+E0>%KQu+&(n7&33PfS7}um!h>@(b?D5>|CC4o_DUZ8a?bxZ!dK^ zQCFe(t7%6yoNO~`5L3LZYqn?}l;&#IRy0*jM-_=SgZ}4N&#dlYgA}bE%}XHW&g9DK zW~)%Bb+29-!P_*%X&z>efNf6^A_B^j8HYQ&G@M8oKA+yZsBA%SZo=9Va7$VVX zpg;@-qd<9V00r}Fcc!j^oF#H@OUqx+!*H}7 z1LOK{-bLmG$Ygej`wztZKJkBoi#>L2WdE&Ghc(G#Wo< z?6}%(^nrrRiqAfu$tAiL36Wu#T#4%h{B#X{YA3C(xf*vNN%IrjEt51fIrVZ$Ga5c1 zpX&C|8`sAq%|*~`mozl9hu)d!te->kPX1# z-&K%4U3?KiX6 zlAh>YX2y(Rn7y!WHKa8QelgjMp{cocTPvXVLweUiTL$L)xs+iR!ao&|t}BoI%8WUZ zVQA6XI5>V)PfP17JWM{63|sFTbXO+y>3kSW$Q_X*9{G!3mV<3^3=7fqTsOq$&$ z&A&{VQB=t>quR_@bdXBbI8B&3lZH-l<3?pQnlzV~G<1@i%(~8`xyz)Xjb3Ed(z!ANAOlgX8lyc(6e8e zG`}@z-ZE+Sm^7c8G)GdC&x{(+6HS^KCXL6WX)tLnHfb(3X|g8GeJ0Hll7?ce0q^%@ zKR+*F=-C@4%^s8HGm~Zvb?lf?W8-*}<_weOY?CG+Y4B3MtGBV8=H$YtHqVtX^dxQ4 zw3{?v7n&ns4{x-;DKw>;=24+3(KNpmnz5SZZ$jhHG^41S3{$3Q#tF?hO>?Ty9HVLK zg+>q8MbN0(jQ5&u(l848QO1$oc(}($9OUv%ws-KwUG12CSFi{pvyNjd>ammA^UHr= zc%ZUg5-h^VESeHvx2X-@-OB8<$U=@oVx>B+eM^1(NC))B%BgppZn{AoLf zaTH}z$MI+DERSFjMrP4yKzHk%A=^Vb>q@~QjLbSoVzut?$1p{Wjb8{BVPw`s#tPv| zrg%*~qFH7AU9bovvz*Y_ZH>5+`S8R`KGRv%G(3WF;wQ6ChQ@BAaUPjdHhhWkh3eKN zf<+jaH3=F$HZHs(v{YyPM6d`Wvrds%FTb6DXH~cM3Kn5xR)xg6^p(2Lb=D*r(!mf$ zW=)31Zllo?ncwbwJgBoS6fDBXtW%+}+i2`Yrn+(a&vn)}1dA{->ojQWHt|@w{^>`M zbZWRB6>7rBtSOA8y7k=q9%N*d^{!wMMrNJPSfnTO@X7!(vdTJ~hHWr}ky&RzW4DQ{ zqn!GF>n@!Y6fDBXtf`EphAX`#@P*D=C0K-!S<@H`fnmmT+#sq#)rU6;7GY!-^Aj9)%L`1vO3Er zScH*Tm5fC-1DOXNY)2qeA8rsV!pN*DXzVts8OQ_{-(tvzzZNXQ$Sm@kUcUCOI&OpR z)&apHjLbrmfkpKRnLF=qy-{b)5E+dyGOGp}oi*-TFVELmD+P-%GOJc%efRdKKGsP%sLkuyNzl*GB0oX+~C6nf<+ja zbsjW!8ZV2EihX%<@2Ew^b1Z=F9uu|3qiqELen*Szc)D zHfo{BELripPj%L-f<+ja<%32~jaB1G7D7_+*0#~d(laM)>)eci!d@P#8~t`kj$-_ord!DgI#zhDtYWy|M(>ngz_ zjLeELmRc&Gf9Om@E&8-z5k_Xk8B49_AG~etZr!cV1&c5;E5TUBxRSZ(`JS~pDB+1?JK3oMDKKUkMgr zWYz`H=wqS_Z>}-)vA+;3!pN)(8H;-CWIjpe484?Nj^kRw$gGQ?vD+N{vC)dic-P zI!ieo4`B!+vk+wlA8xDJfaX*USFKJ=*?foz*E=gppax80#!t$^7!3 z3$N2z4+_>YJds&xXzVtsyU6_Pk9WPHvpy0m!pN-U(C9J0{BLjW(^*qbAe;CkdYRP( ztsbuD(p4BJsIid|EW*gFX2wGCV5aDVd%vZ#?iDP;$gB)BdbrNsZ8!Mv1;HYW%xaNX zWnH=5x?3fpA}5T@x|p$!z?IA=`=0|u4OdXG2qUvrKx4O|NnqxsU))-wvsMZgVPsY- zG1&c5;s{K-k)^V2`7<`A4MRuE`e5W9gcRjzpb-o3l?Ey zRySiEjw_ix>ng9&S>1v~7@5@rjsDKz$tk;+>a3dui!d^)m$8n;mCS~*%O~rs&4NW3 znbil49?jiiH}kh!YQC2qUvDhsJJG!*#>Yeq<=iYn^xqLl~L04jSF9FL&N@ zitg5rop=aC7@4&m8r`i~SN_xx^KU!x5QZ=^>k4S>wpsKL=068_jMm+9h^_%)WY(3? z*lkDRO6G?jEHtE7T(GXh6Pa}tGna3yo^-jiO`S*K6pTEfVz4ba$aC-BEgXW$w` zOSDR`2qUw;!B|y-)wJ$-cy^SydqA)VBePJsz^xeq_lF-pb-T{mBUpryS=TZaiU%__ z`#Mo@RktQ1cab5C%*sNer`O}-(jV)rxq?L)nRT7S+FU(plg_$Hum~fwauTa~*ZL!L z)^@=njLf>8vBu*{=5qHDE}b~npO>a3X}@d+cdZh%IA-}~HC zFQs%=qhJw6W^H6F)ve={na}I2>jaB1GV4akt@r=&zDs94Ay|ZwSvN73n#v1*8$`sY zsr;T`5k_X+%vhqjRB9euh^(rz9B5z25QgibLPJ`vSt@CaUxjV~MjyZb?U-2x|Ev%! z!pQ!)RbpMgVD8kh^$!IjLyPk#A~&U#R=2qUxZgvM@DS+BlJ`@*PhZ4xZP$gI00)+evlpRTiZ2o_;v z);A^Al`p;ZU7fX0um~fw5YYx7{&vDc$YQDwOHRc@7{bV`d!W(7^@q@sr*)Q7um~fw zz9q5Z>z=adtl5G^7@2i1V-?{_X2Gl_%XC&sun03sS%$m%uI|pJM7llWs;{cAr-{1V zUBOK6Jh24R%a_f#Ty?Ix;jr;cx`Wn@wKk>OdWJ{NWy>cTFfX~6CJT>%g!_c>cQmKi zDvsgp46wCZ1%kN;Jn7~FEDraOrCzaya{(>u9Nrh_V{I5Mj%mXBu;Ebwtbq*CLbwK+ z?60kZ8lJ!wUy?WCwA5jET$(*^=*2Qe%SgrSnz>lnlIf1OHeWb0g88q2=wV)?b(e?m z8ikp%MggJKq9+gA*x11s~GT<-SHj>djH4D>BednrEz)Z8gDlyfoGWL%k=bi zcdlh}TDn30_0n=;{>V$qOpuDr;SLWh&>u8p+Aw|Gv$g??7ZjQU)zqHu;ttG(d!6l? zQnOuvm;-H?F~#R?b#!a|3c%Ygb=&he_&n7>tBs;|kzzUb%OsY4Hnx-w&>}~CCYU7E; zixd@4clUB(F)L-1-kp8j@Dp5)cXoHJXvkdBm+5E%4@-;EsxL{_d`UO%=H>)jaL#da zGhJ=zri@XgXDq_wE`XY;PuPpwuzVYEcXy|eK?zJzknTo3k0ovJ8mSgy33q2zS6DET`t$czP8o%Z{GjH065Yd)r#O=5@*_HkV1Y zoo>RYm4v-?>sf11AUJWh)K+ts-}*BBf$q+B^%>Uj(F!pnPo`&HX9_EsS(#wPbRJf% zQ6}N4Hmu}gk{0PmAGorxwV84PzX`F`_v)PwbD6Y9zSeeHXvAtA!R$itx#*(>93*SW zOR~`=O5Ri}LQ4mtidl&yQEtfSsG^di!!&cZ5FHII{QbdfvB zeIh$bcPSQ!pfH)+WXzKu$%ZvFvc+w4WaGWwOpm;=OHQkLi zT2&a^ZG(<_G7OdO>S|ldS%Fr>2)oxvl8QJ?fdmPPT7%-91&NghHI<-2%>tN6LxzxU z)2VbX3Kt5Wq_)V_+7do|)I$OBJcs;gmX&20cZ; z)*(^#7TrGek-3wnKC$T1sgJZY<(Wh3FENkv%3kgrDXzxGo(xveW4&Wz(~3;fs>Y_y z&Q+}$SB+BNnB*OlhTcwEBFQ?}BXwkW@2)Y13MbxkaRZjbk+n*FeWTaaSm|-QBB@9u z7VyPfh_U)wER?IS6)R=yE8K3Eij2EF{&*nl4TW8lWc5{mW7VmIsY!$r9=|UXaUr#O zq(`2pD;`ZnqyBILUdDbc^;MEJRkUSGeGS%YN;F^G75Ah7OrNU)$cQc{z}Bd3~{vFA@(8V~JS4Twg0fjgf@L_9k4> zXxN)fAeF46iz;*)P9c%SUN0IM!A=HZzGTGjqUD@<@vQFr!u*`5udS+|C8ZR_bs!Om zx_!gN*({4V11lQwMkAhBXgJzgRy3b0==FP((Lln*yP);8tczD)%f=0|&pfVhAQ29D zLLN&ujJZ7N3I~P41iZMMx;qiuD-e@2Y z4JW-;aod8y4Av9Z*Gj3QB~08E^!t5@Xe_7~Jq)I$Kqg%YzuW8g2O>I#EfAGZl(T)2 zWFQ<)Sw;m)VNI2}6ncW>gSamcM^u`#M*S=ru&H@kjwD~i6^|r>{$L_$MWxMjC@&$3 zz3O&2bknW{-sg1%BQbA0;f)M$!A#Dy~vU5S7@>WzA>a~wtUOp9nn?n_0yL2trqN*&=K z<+ExqDZ3f-ttW|s?+XOtf%r(&8f$9Y?+t{K;gOiN7EG_-75B&DNe?Qm{OXnRXBA~< zeW7@Ljh-e!S0aU)#v4d#<#z$V^|jhiPzqjk%#-lMliq*}F(*Cord;uu&+SWjgLx%3 zuaVI`r1`=db%j!HcfuXD%$r)NT%m0;gj!Q)hY*HHBI=D<77Es+>$U7!Q9I~#zsnmA zgxxX!u-OuWK5a81L*yYAVyQ&P?+ye^(Jr!yV6qKCs&psOhNnUapEnV*DoP1z`uWyH ztl~pYF@q*bqx;;bV}kBLEFQF?)7C@vwU^+HReddbJ1E0!kfqVRURNmKPQ=}j*zk1P zVyM2B?WCbLG*tB(Vm;`Jd846t)Ve<5p5V4n;ba?h8N=Xlq4J9aQYp(QV4E131EGh( z=Zc3Bf`C;B1bLVs=yrrqY9dij49RCvnM$^3LD1N&nN3ClK6Kdf%N%vbP_>{sHT9!F z3;99`uLoWqj%HCKA*=Z!K6fIPh?;1uK(V5s7jfO2Ay?8H_QjGYpK1dwO2jZFJQ_y- zFctKpgrl`JbUcymqLFAS?DrQ^!kLG3Z^V)3Jn>j6iYA)6q_x@>PxZB(-J(oZ)z@O1 zC&^JS{Gal=qi&C7tD{v7)ce$WVtPN!lW=+532ziVS63&J1FaLXaSSaJ%gyy@WQC$L zU!fz6kx=Uk`IC{bJLt;5y4p&~vq;>CH{ygw+uS;d z>|TXNEuU874M)R>kT`jyTK0(B6?UVao=kdJuT9Dm#whp3(4mc|0a*x}xN@iPusZApFH1*iitnf!&u|(Jt^hS}t z%w1%@QI^q;yqHF)gMo;f2FRwGR`xrE8YM+@8KF*jJt_3Ul80cjP*-b24>Dpb3?5ai z*e`5^@e4x7S}Y&BOa+CG?J1_Y1bR3bK|VsYUJ#vaB&N|(5WTTPEShBg#5jxX877tL zIxhm^b^8M@ZFsyw0$>ynjYoZPUnS&RSYO~!YNPKmyA;CpqLK(Y6e~3aMtj`^ZfbGbI+ zNyI(ASe&(wc=cnfyHM+gW1*zmlSsMniW58KA|x1%)6PkJ*EA}HyycXKo3kUycrX%- z8Aidf%|2HMiReM+#8gptewyyiHBEE$c&!Vz$S1l$xnI1vo`lhL5L*VW`>`$g#&1jso?rjq+?83h0c{I(#O}@YmdFG*!&*O@PL+-FQ7#YTG5dgA>zj9`s zq|9o~apdiAJd#R9&;(oe6?yGP`xL7cu}1cwYZb(MI~w0Gm_D3>XYmr!7*VJhqrMOd z0$%W1w500RdlW@J>zA|5ua5c>**IVde{n303M4IA-!E#2m-Zmwy9(eE>vS!A^5EtSmZ_p|fv zo9YY(U;c!>Eg4P}SA*UFuQT9Dy z2!GF*c~<2tr*5idRoBd_tgW0mTi20<+78j+bXL!tU01~(EgKWFbtt=!?MOco!>n7( zdn04qZ;|e2;O84llEI8A1CAy&@I4pl3C$Sn$-}vnGLLZ{CgI+OJ4dL~P)PyfQYu}> zecwn|jNf0shTZ<~BSYSEmZg>ncLPj`OBsHj0#huen-b1d26yRwgxIT)uw-8uFyjok z;p}q)Q)$3i*+=s#&jvme^&N= zANozev>ZD!?gw~$5SaTh*Od&#la+ldFp1H7oT5B*B7?CV7OilYBCm`-Sy6W5M~0%u z3U?j?`0ymmj~BC^j~@p20C0cDT;N+yCENIpgI4x!2JSdS;#-(+N```Mh5He3o6f-L zGSe7Lp?SnsxJRJB?@UEGe>%sF83u>RqsrsJbW#C;87_U_z_Wh>v%QkR*ddly?ykb) zc~v;q2tP81<7b7NO5vS}GFQ!DBj$s*fVr|}WE|y#akbd-2|qH!XPrqHSDDSu!j4j8s3ddZe$9wQ(wU^^g#6K$>va&MYhhr)6BSZ6*hrmT@d!YavRRix7fTL>pNUasa4UAPhQ}Z{u034O;*#+Pz zUxf<5odDd01>jBwuD1XjRa3VWfTQ$%p#U7E@4E%ysNUXJ0FL7M%K~te56XhL7>rfA zk^d?Rz)?AxRRE5{5ibBo@pn-HI7;8n0&ph*cU=KEYHuGb07v;{TLHKU!0jmjNB%1c z;bJgW=|SaVQUN&12Qv%6QTqA|z)^ZEEC4qdxV8dtl>crj05=o32MWMBfqSC>9J)-( zX9eIW92H?)48|%wYVkZ=0FJtm>kGh9xA{8-;(k#8j_S$Z7J#F2^lkw-bgz`p3&2r- z`CtJ!>R*hD;9@XV@l5G4z5pEM=W`3hB@4h&H#c1Xj>3C$0XS->A1(k#mSld`uJmUsPALFa0o-{7;3(ae7l5PkyS@M%_1EsQz~NQO44*&Xo*$bR z3wzF<6mMAIojY%mtW3sy33uGzFv(d2YyOE}4!^j5kU6*1pA|U}Mrdx6y}%eT!+DaAybRtS-h!_Ds4bvzXrXb$3-w?_9o8Ia@hr ztb&pEXm*(8<4gIWmh?Z~+SJ|I(}~lTrp!IvNwcQgTQ8+kTWCoWrge5J3b$x(CfzKS z7{GtJE}m)E?%C9H@r=nDf#aEu5%_(YEERYr=i!;oi02My?(uaHDoNO>Il}M7QV5Ns zE{9OVpstn3yJw3Bu=ayKrfJ-?Miy>~dmmrlrQ^aKJ@~LF)B@{Y(~Ajbd=baIPPXVw za}%p0Om<+!kXN0X)dQ>5c$(jn@nFh>SPi1<2~V@&y`61+?O2+p;-SYP49q9O;vlSn zQuQqApCo&q#W0qgR#8lM>}?nm#3haYquCkB9Qi#B!|^(HIYZ(&Q*kbEg?ggyIIFYK zmpog&sSzj3?jZ|sO6$M@Tdz}P?6x{b8|Vcqt_6Cfjh~6SFt?AfbMexJ*+5Y?QORy0 zPZ743X9Lr6&o2d&I>`^?7siEQ&snlwaWCM^CP`; z+ZrKLQu8cEspw=rr(Vx{OrmiU&tepJ_u^NsoQErC&;ZDZU$H_>&u%82k1J$5et{k~H5;;XvyrXnq-{E)oFUW)6;kG&D2<`42dudxva6*}#EOy}AX}BU`W=7VH_( zf`9#IL?7&e1v^Ky;E|Cn*vAeTmm)bY2wfvv@DeO|Wkes$7}TUKE?$x{`r)2bG52Il_t^WX0QkGgK>%x3EGS z3%`h}WGZ{PB_*OR&uggn=U&PAcMWVU%|@o=;`_3ZX}S2`Yy>U$o@}Hh7vG)roRjnK z%tmJC;ybb)SI+;3Y@|8sS+U`TzR}w}bWEB;Aj?=^_EHv%-bp$CrmQEH^FNdIq;mczvz~c5|6^It1=~DbWLfs2(nXEAEzH+6jN-K# zHNYkK@do%qCY^#Suhr&2`aewP#&sort zZV@7Y?uwPeA#v_WkmxY5Vs?-n=g!1E=ei(qt{>823>U$ba~tU?(`9hw+#X0Gy!4d0 z_6iw*=C$40j|X&YcA5c&3{IiF0Q`;#?mj?rs>;i3~>v_;GG4Bq!5#LgL(YkT^F7 ziF0p+bPB`W28nYYgLEp>Jq?L-w?pFG*CBE4+mKFYxLuGq_Y+9dnC{<@IQMY7$~_hm z=T3k$gW*nw#JRH|Q7%L05fXPT0f{r{&@)QyV&wuzoUs-XXIu-3Gj4*!8Mi~KWsJKa zamJI7GAyN^gS3iCT31MI-mVz8(zXJRc=vk`NvIZf$JSBgH6*4iIyg+|AZ z!SSE>5k>zKwI20?PFAa|logq}jSKjo3Bw&hkE}-ut8>(HQ*r zkmx-oIdP@VOgY{js1fLc#BpIrui;nB`tTgL9QX8%znDeNw{cg_PDK;pUO2O93j z8t!oo_cWvwvu_KeCj5$(7ja#IU%B#oT*;<#Wf!j8js1|g8~=vXz_>PCxnGWk#B&u@ zg4C@qR!)QTElA}`B_y8H^nv!sB^N_$R)p9Po0asD3muJ*m#U10l|>W|g%{qT{z~a? z#ZZ5(wDK0=H#LN)KGuS@MNg}f}#F-2F1WuC#)zP>Mv1W z=b#&dJ}NY&nnuExYjsXa>WcR_sG8%tA3@^%2Ek6f~_89B(y#qz*RnB6YL<7;f1xV#KgfYwRrF_;GY;!-8BboP&FPhojy; z3F1dp0|!dhP2-hg(G?R`mXP{Dw{0MyDgZJ-02Jtk@QuLhl*31*hSPf0dMfwgqca?BDE}?B6+4 z*gr}(Jaf^%#-)oWS_b_G)c_W$O~eUS@h^=s+VscGg)ukLqH9yZJH$vhJDqx&J#p4(F6)O+pO3_@-y8IkRMUvy*fb=we z#jIz*asR^oDyADmz`G%pE4M@9-1{JL?gNm1#c(v!kNXPQbYO4kSAF@?puTh|%I(N5 z*+0}beyFb;3Ex+yJ+ME^qdkWKW_fnWL39U@7O5jlf9b;Np{&=n%^QM` zmAZBN9XC*4h}%CnVYKFj(yadg3fR?@E%cN=U~}AXCo~O1eFyg7zmnTWZ;Y6Tjwre! zr-2F(s0!z{P=4gLP!;|xe#Oeyapkr=3W;-{fkZJ`uDpWltxWn0uI)_P zhbwRjAw+>fdl%=0kdc z*|G!@FGEyGuV9QzAYH?xb&$AUz6mMIbkyfXuMW9S|1@wro)A~71*v#Qp9av~TbP@( zVW_u#LG`C~XRSXg7c9vY{fzZAdrRq^l*mX$xnQaFgTS1#E`MP#sD3>NimwMlt4nxI zIrRF_>e8Xt7gDuY&O6|&o2j?nl+4tEAL=u~g}_jTPy;a3&>J?bSvDt7bj6~DgXe63JxVTsNEyw$-&)x|^q@+MKJd}}Y%3Z~mZ9r{ z5t~|)uC*$Uc&^6|#msp8c;DtFCY_8c&twZA@ocmV631mAy@p>g8&h)}#S@RQdmwSf z_aSk{Ly&%lU$OEtTsh;v(FM+pMiwkxFlUG321<#+(r@9aY~D5M{M6v;617Sw%@(8G z)?Q#QvW$U6=qL{sF@7pHdT@0qY)Q#Bh_?Q)D~=o1hNX+tzIJxvQdGIHRF2r=;XfX+ ze`Jy#u?@JVs47=z6w4!wG8JcB0%-?+#Y#V}Ji;j3amM!`amG&|amLRfy^UWn`*O+| zh+_U-yb%(HkYiT+W%bi)g4j+_%Jx}qfKLSDR9&p?xgx{A&pv5=S3C#_P=OH>D( zz&t`8JIK;pP0q<8TvW*_BvwX_WPyjnsazG@kxTw-h{EsN43lmec7 z5EkYxtISqkHN?7=BPTps5qwkAm~++_t+!{_7v+xH76`%9%3#sqa}Hd7*kDopM@4f! zzx=2|3N=-G)_Lz-JmHBz0~U^pLE?p4AF%XkxGOZ=)sT44joJmC z&$dCLw0Q{4b-N zk;D@odGjFg$fH*%!$%%vM$Vtb zK5AtD2L1cx*A@kQ8D+$Qb^8zXWmGtD03Wf$cRBU7MgEt;VLomO3+U70Ui|jpw_En@ z_yK&MRo^N)Hl8-JMLS@@PW*PsmXr@1up2D-^Dv(og>U$G%0d4hMzrKxBU>UqFskvv zB3%#0vXRJFtt(+QxDKxx37+#GXu!y1pKGXZ?@-^Kp}yT>s1-ku+n4P-m`xPr;=8g5 ze1hAVP2dyU4$SzWPi=u3`mh$5O&`_*_z<@}8-N`pEE83~oeh-H2;IN6Zb`{{mt&$! zynz$*J$k*`XsE@}5vWAh&9P|H$BwZ@6+?YnnH^q?h2|_NxqMr$@8C-Gvb2r~UZLVM z97f}6gFdl=a`>m){PI8Gaqdz)S;MJ=Wd0>xvxRu+&3W6%d%o+ zC$60PF(i(&jZ$&Nka&B11SF1|3aJb6P_C?iG{~f{L%NJfw?g9M#)lzoWV$Vo_&Dzm zkhmM~K;nM+Gb9=l7Aqe@;+5;ikSObwD?^aFnMAEs9It-$Zy6(hyrQ>NZlBzJq><`L z`0+18y!+_Hz22k!iY^Qs7{W_DH+%Q>QORA^Tc&Qwx~H&Lg6zRGSgvRfrse#o^4J6R zeoT9Sa*qm?Jz%fOvTFRm-_|L82bh@Si+6_t(G-u;Tu##zoQo|37*DFMaYn8nIf) zCr^%}s&(W~o*efb;COENftG4NhQ!PIp3jbKj99qabe=9M;mi4I`vg>${Zm7SAj}-X3F3|M;Q)2^_cw(W2n{ zs^Rmf`r0`*)Q``o+NV|32A6?YJv6Y@S+}la{i)PhTR7BT#_j7n$itK3q~O5T33Jw! zT>h5!VTBrJp1SmwZ7hDp3RSZoGHDX7yxe;raU2a#IqrN&Jh#vrK90*kx)#53HiYL4 z8u)VtrSUgdzM+l+XM7LRjrf%-l+$=u@d-#2x^m^eaOGXQ=QQ2xka(AEr=}zS@~+rE zO-G;9c^7LmByOJr67M=uH;(J*JLFAZm9yD3eN3XSlIxj-T5Hf>mRhM`Xsq_n@jh#) zQk#>of-MN0SaGw~*@f-9dlc;U+mdd=u>#CuFfXf` zHgjFRRXu4OeL~A0i*ykuQD5< zz<+IPDm_fDQx+84%9G;meB}IYBhISkyY>v4W@`p$JtsQv?6ol3>BlS7QS6! z8LrjSoGX+Lo<7r@C_R=|uAxT?ZNezF^HS}ky~K^G{Ag%tOJCfhz%NcJG)`>?Xu+pU zVDTW|7VwGbJe6_{NeXQn>ZHA?ooqu!VIA8NG+&)>8BsauR3{^_8-tDco;27hKeDn} z_>*y%PvvaX&$m3x%Ummjwi%}*N%>zYNXD!`Mp?aFD+{Y}1`5`!QQg5y1m@u7Rhh`u z+GdNq#P*=dJk{jjsXaJkP4WWm%cfRAtFgrK%rraR=4>aqDyqq}vlp9~vZ950xV?+Y znD9zo+2z4wg;$i+^sq%W&C4q42v%@K)=#e)w#*@O(6gx{7q)3mwP@&>5OLGX?(&ng z29+yL149;0uW6*5%FH(F|j> zr`Tjq3B%lh>yh|9_rp$fy2(|eTZc2u6kO@a$KjVTD9Fc*VHg@)IPjZZ`h2+=a|FYD zUtp?!H4(|0Zx6l2vfF5+OaA^Ods3AdLq4_JXj3^F}hFOIxrS2Vne4x&34~52Vqe(~LQ-D*%l~;y z)EkB^9#0tt1GRD^RZcKPij&!ZWz|ActZ7~p8p4q)*p$Si*=N!mG-<|A@(44EPE_q~ z?dWYG#U#zG)AKMrP3aB>QBKh?K?y_r`6f+TXi79zr_da(X|5ESF`8zh(2UhI_X^F? zn&v5?`I@GAL1@Y~&7XwkSWUBEXvS%pVyezzCTN-oLUWR)nJF|UXqt%7oTzEiLUV+s zX&0I!HO&=5Q>tlh5SpVj&D}y%rfGg6G!9MkYoQshX#S%n(LqO@;>T4u7nC z>y>kt>Z~6L7GY%8sfGFKKK@f)4>d%+@%%sLGk-L1PHor#x=Je=qWQZo!g7@0K% z8oQ0!VlrbscnYulRo2;pMHrcNIy83MOrpS?{@2S8M3vPeScH*TXF#K~?(6tIJ`AX= zM+A#7GHWVhQLlr{TUR#zLudU%um~fwra@!3se_!*x~tyTSre%P1Vb2^h2|VA>erCD zX7H1GofQ=6ysfs$1_17GY#o6*P7m^#I9SxZ{;?=&WOp;9A1SEJ|NKQXs@lws)@A zS$@GHjLfQLtg%FadG4u~QaYOcF3~~61U=c=U z&0#D=0W(KD*oluIYHWNdScH*T)Q{H7*G+qpNK%zmDLhUXnRPB>skO}=i$}exvz7=J zVPw{MjHSlL&gn-cbk+?*O&FPlqH9R6g_(=*)mgt3EW*ev7h|dUaN@^D-J-KT5-h^V zEH`7Fge#f0zg+MqomC~O6T-+W4>We$M54e2^L{w7J>oR*N6fW`A^+vI_n|9B88!T}i!d@P%vfq!KK6m> zD4?nj#|w`WMrK7AOKq12izcUaRz$D}BeSB6rIxRSk@OilYf!KVBePBacK@2Ty^V8!6J;zN--AI$z*;yDl|i9{YtP1BeTwj#%?=>C@^=f-+rae8WJqR z$gH{0*lqMKg3Qe~o{P+-`tTf4B@;$wH9(`Yaz8JQw;fLum=&Kj zp3??oL1(oK7GY%8MT{ka zt=w?;)6eUy9|;y=WY!{ybyxr6{W|MS!6J;zTFh8gxRUw76CWFDn-Wo22_v(XK%>Xu zcbmWbQg|gDaUD&*vGPb-!Q{MrJL8 zMz2Lnp1cK>x9Zj#f<+jag^CO;wRKo^Yuz-Rb(ru1VPw{F#yS>PGPj@qpdm-a1dA{- z3l%inI)^AQKl=J5Xz*1ZUL{zBky*{q=;M@s|L*+Tb=GeLi!d?^Q3jS5S2Dqcv72?) zmx4tYnbiV~?pDQl8&Nf?K0Id}*~B+#kXaW)Yq!<2r`YTv)p)ng>JTi#$gCBNrN-g9 z9gl3(Sw9vm!pN*v#u62}vi6^z=XBP)f<+jawUV*KW96TBRR2O}IfNGoBePa9Rt2tP zBFnG%rOt8*7GY#o8#H>3`pYqwqA5`0aD!kGMrO4$)(NQeESDmYF zSPZs(9Uj2;cs<19Lpj3i7}1q9`E__#*yBUF!ayUta)`hfH@O|bGlvci-wAhkE5v5D z!vn-txrYQ8_s$&wd}#Ni?R7`6$++F_2r%;wyd!|MEqO=4NL%!dfRncD9RZiOh40A7 zxW1|H@IXBWWx!>4{4WB!)S#aJ{_FCWYu(iDlh{kjiChD|y zE^ln<>u3Upsau-bI(ste-Nl(+?MZiLHD+R|PjEsTa~a?1+dDfN`_=CY!Wz?K{%Jux zg~#E0)vA{63>@V3iP+y+x|^G6Q6Gyeq~5B#Jqx(FHD*{1na`9mqlPkOJx!_Q9Ze(U z6iqAT3r(As3ygY0nyYF`VWZ3|B%_8l&=%okm4tL7!_`Veg|OO7x{>i}?WRE_2aGkB zj4*hK9d($(^cr@|p$dz)cF;!TS}Lbwm`Ot@WL2K-X&&=PYDR><1ydolM57zMso@Wq z=hOh;#9S>ikgPH3#@*bUU?=J-jdY9j^kRBruXYz+kZ$XP=irF94QK5#NwWc3Fc!8p zVlzw>g-;N2qYzgEo|+WhiO@C!lRlP z=BibxZ=~JiQMoi=vMf@L^#MkzghVZNXqr?zaaLmtQ5x^LxFLhdgsr`6mHPTdudA`r zQ}`*BDV%5N@p$7nej3T3p7V_}S}{{tI{6Z(SOOOa2R$*Dm=0H8+uFeoTxCa}Vty;m zz2-BC@rdl|(@rv_6Mj8Oe=_WIvD3|IZZXcero1gV;|aNZ;bhR~jd@(!d`)p~CU-3q ztE#WWiN&FWMD%%aOs(4&4B$|EYyYY9K*dS+G(TDM9@w5(BAHD1J;SioX>L|*501F? zME$X76i4K;{+@b-H#;4aW+Y2~^>}g8bTHsgq;P&WW&RNk22CQ`V;*-bhSPIlwLqG! z^do{}K94))cJaB*4SVok)IiX!yg(JwBXJ>kTE7@ra9(9-KZph#bdv^NG}w2R&{V z{1%A?aCG@0?EMOdy~c1BcElHRr&2D=yk_ZyTuZaAg~!#2*^*zp9+xi~@wt6;OuI&7 zQ?{+yT0HsuE^jCv2qPqx(adITt7r0x(}bz)uu0XLEy!W1u+QgB#zQW3ZudwL?FHPO z3$ktKV9b*WdSn|dPp8MB#Yul49uMI} z;8{LV9>f%K^?+viXm%8cXe=5_gmFYOD>BGVNOBCE=p^&DywVeL1>%83IOL7Hv?J|R zw3vJ@`99%_;UwM&j*w=#t^>t_AA!uHJI^Ztm)9MM2U73~i-%g8wGMAk_NGh=x^!@F z3^iyth9jzdE=~bLD zfQ%?+$dBX+Wb(MzlZ*sB5wj;WtE;qXSdga+fad- zoM(#zI7IhBz!ix`1F2}lZT5k-WI^=xFqL0XgRmf48~&tk0;?;ycX+??pQDyFf=-=`ML|< zZ4u3uF;`Ui{qcx95RRfzk*q_uPNjmOWF$09*NrNCZM_C>uJzca!`}nRXv~LG?~x-9 z6(8tjCIcRS&>LfLTHrB4^!YrlKr|BZN1_QAE&a&rV$lka`Z~S@q`tbomZAWQKy=SV zT~TyOy@6oLB^H996da;OPr8D>m@k;ZAb=W0;X9T*#^^+kA`x?YLt(#LYo!4mxtaF4 ze6gTEoQ#C?nrSf2?Q|S{i&)ST4<%e;*@>y}qVC`wL1UdFCoe_>D9NF4)N4^5RDOjw zCglmFW;_^)r~HA$S8f!kO4E}dgn@xO>G30)Om$fe^$2J|i{!T7=L)9cXvW;AKn)9B z%zwiDLDP}&3&T{IeYF2g4tjgNTnX`2rNmZ4Vvt|KUS63&V zEE^NURKnfIcBK39dCo6BMi`gAVXMSw75=<}1U2umdJBSSb> z8QjgYk3Jop08G8WkyowG6~AsYwg~{{og)B%IT1fA+y`)Is1(a~j$*K3acyu2(WUf@ zFUp8&OZz@6!9H~OP<)s8{;A>e&MBvF$9>`T)t zzy`9kVMS|8FN!y}tca;sdcY0M z%^0l|y88g3`7Q#K;lxpL(+2kXu!qIS+riSN7i^~t5@>UcZOnb_xPLWG2UjGBDu?1#s{&wtkfqm0*znQvyZPC;%AC1awp5u2q zHhy^+)-uh1CHEU_ux5Nz;n?_RJo?yC<{$4^_}af5Wk-@<95c2!F51*x{4d7^n?EZ0 zmt*nfe>tXM7qv3~1U$l4)_G5{{R05|s^8v2?5uw`wuE3}F8&8R%lda^{X213!KaSo z^Y)js{yo^?ZO(Q_Y;)GXU*PsQei|p*V9~W%Ki|$8=P_X?>)iZZQ(t!c^f!Yw*XH5} zsyAi(_HB5{ZS5wOqjJUf5qV9hsxw!@yjeSpA~FiY~fy#w1OZXP-;yKXO~=_bd9TM_Db+dMc8q+6ojes_mCa_ zz1jKuH*8wJIQM)uzBBjFsqin{-<6H;XmL#RfmU8Q*k5$Yf`hp&oA;DCp4d+ROB_#Z z%9U=kmtI46{Ul4`GGB;DkNC+unCz;6ob)4}PD&zwi1F zcA;Hz+%N&PJ2u#x6W{xk6P|Poo{GXX6_Ld~yVc;?O*#KT#30zYafs>Pe|SpSA^nt_ zzZ2eKrNsUwf;H!r_1*9mj;frBWZseMLz?Uvj0|PtyWQFNF2_VAmpYh(kM{ol&$*X> zzXwTt1d?XQDdo09y2Zl31L5CPG|;}=2J8DCrC9Lq%FX-6L0Ad@!`ApNdmm+zQ_8O` z%*uoIH|_qd1MT}^(=dc3_gv_F&J`wwj&$ggcHyvrbW?cV&iQLKdSf|`Z!HwxvAxm3|$R}p2=O~3z;iUC5-La-~_x2up4kpG`2@9(yW{E3=mN3Q(# z97-L_pgZh+&wP~(ipW6h+mUl9kH(Ql>k#mdMpeI!EiU6_xcJL)`MqP&YdQZk$D$Y5 zj+Ym{_Oau_?H@aqzKY#1%d~xs)V(cFu-djsJ6(d6Xtr^aiZ5)NClzhEt9RbsQw}8D zbo`3hCdr30iTY7A+prib5EbPN{K^%Y^;^Ltnyba70Z5#CBP7nf4bs{86|?=5ICnel zC*xPn*0XczWMq3(yui`^NvE=>D>dn6NT)H~4>V~M8h7qmDJ1UNSV-qGTgE}+uFceN z=V&-Lq_Y?E|Nda->=S*kIKHudI*XQ9o# zx)ULhJ0we>;Tw57uBP~qJ2SKw)WABYq8{mUm}8?8DvQp_qNRMpRO+l;{TRH@IxAQI z2oiNp_M>yMPjpV`o=(aF!%FNQh1vx>v|>lc2{@-C#X1Ez6N&B5y0T=b z52ttRqnn|=3ifQM&q;gps<(rFai%fK!Th}gTWeU!sNTfN2Fk^vrIy9wSZTZ0daEL# zhLF-)IqV9{Vk0n%#NklJEo7~W4Rh9jrm+jpVANeL!H*w#%ZmbKd7i-%kaz*0Nr7Ct z8WQK;1c`HRhs28lW>*UC3y^pLcvF-91Zfg}<;uTtJ)KF%BBi-RU4 z5_gUEY2~i1fy9f#I!N57bjAzE-J#*`fy9f#cQo9uG~6}~_Yx#t6kgSEtSC5zPWc~K5&tf$6+pj(o((pxrJC>V|)0WY1KVa&&{}o=LJ|6n*2lM*vFXGWx?YHmE z>$flXmt(Ad7Yi^Iu7$bn=*IhZtt`#Pr=duqJfei{JzoPXkc;9p5mhm4kv-Hm1z4^b z^iSg@m`Wq{;aO=^%c5mT{Fu#LL^Kkhr`5hQ!My&FSUkvJ4W(9S=!_4H7Sx z6&lW^;UXF?35l1>c^Zz&>j-M&XZ%=3qFWYF+arI>o8Tnj6ysQD_IO=a!p zXm@k-DlR}_^HnU%D{Z&q;a4nezKWW>;sy)il{8SMqEP0z=!K6Rf8F#i$Az1ze3awn z1-jWo;U3tF5%t)sE3Sn6j`%l0ZTd>yxu=4veKFp~s5uKCGhQxM(M2O}U&RIZt+d18c4_Q5j*CF_uAi|5RPE%Pd7I|i>k49B?7s|Yy;*F(x( z4tM!z9g-NXZ${iXCQ{TY1JEk#7hxQLh-1TZcoY`5;eIg=+bR~@`kv3h zhvXxqcdTN~oHy5b&^gZ)-8dC-Wq%eCbG?WB2mgBz{8ScDysm)gqi8@#S$tDKu3t#w zoJWiJ21n|VabV7K+;AmI;v9HcjPBDY@))=J5RV8C`F|X6HHD4k=T*$Z;6)wGBU$FW z;<#ZQB8fc7hxC-Vy(~3*X;dGpXmjJ@;)7PWC`PTZie3y`0WNf04=5klw^g*+5dDk$ z9%k`Jd4mS`lsE_!tcPobjO-EX^D5S`A@`iO9D~ndP!B4$6GswUJC!HF7RUAfg^mGP z>_$FGAtbX0i=Kq&gBOqlzor2r<@y+<0-Zzu!Auae2<~mU@vFtJi+O0^3)^}sHl{dj z<8j)hMrW@Uoo#A#9(n{#<4;3$b{V3RM+(Kq&vAOYRebyu*{RU@z{YGtA4~$Fj&cBk z;~1p=Bp-`kj*0=1N9CH8uwM4I0A&h57xH=+yy8c%naSJ36hA}*t7TYSa{Vj{EOmniQ}n7~9)gD&Cqe1w|(_6&(p)an7?RH%L)o$ zL2tqAZ>rUlWAKiDBd$;z<;T}82wuVQwI79r-cax?r}zIL(R&KKp+GkfFDS%IiZXvC zy{T}_c%^#=8qI;dWoZ3;6(x>~wm>MVn9EP%usE*JNk_6tZz}#i!nv91`-$HafcgFi znBx!^75J4avot9QiFd6QLmGo$v69A>55!s^@h%v32PflK&UWVG61~Lo;a9B8qZ*t& zrBVAdCS3`Mzo)oflb(ij8hiShCao;Nr$y+Bm2OD1KCD=w4%dkcHwZ}#$slq6-2;ht z5x)b8`|lAA_e%}82@>xjKBwXSsNw#k;dVpfUBnMG+^Os<6x$C{-G3J!jjEj3VK~!* zIatk3vHddN#u?9M4)?4#y|X|3(-9RhDJlkVayD-1tJv%Gz7zJiH5E-?4j@0 zlo5|R*oz>NjYj_TGP-gG&1_;W^SQ5T*J^N zmt^!!(&)VjH>%A!lZHlpGKSt!$QnB9M%HXLX?|uPUe{FcATuUa)Lz|nMEHm zbynb<+H#$>Rj>#nvyNgc%JXE}OYQ(tfR!(WKp2@tud?;+HI7}k1U0kDI*ke_3}Ivz zxuP%ee&&0xVQPZPxMftv95oVO~Yuw4pcr8BP zi%2CrK_ z7gHCk>{Dk+uxDtidNZ`vstx~{O?hj~^o3+tL*{F3&vej!^H>XqXs0D;U2Ur9!|Yb! z7c_UN)-{;w!S3g#dwMh7on6vOGPbe|`%f=#Z|v#G%xvtr1PedAx-(6!Sn2uST-Y`2 z5-p$0;|quU@ot=ueE~H!oHa#UlO$=JT?i1}0FVtARy5e71J7zP3`D-iO(l z$%rqN@M7%{>xi(K*nws?hcJ#Az-o^~)1zC0nXiZ=7jm&WWv-De`*T&dWGanD!A!c^ zN~dlPHIuHUx~8(4!D%Ml5;l{r`Z9hT2-PB1GwJT3%FSpjX42h>=P%~rtY*@^jMk%x zsy%~YGwEnDvOz~RR~1!I1_RtCWB-6272{V2T)n_j<22liyD%^p8gN!K?lz!eZ31SG z*#3n2J61F4#^S;8Xg#Jw9N6BJ^qiw}ER4K~NYL25p zk`<0N&b_r3GaKtTj-0o|!9LF%4Cv0|I0}vxE{sm|cI;d-*2i)5&k9F9qNf6i@=}Q7 zD1EGOO~BPekY8dPH(WRl2QHaVlnYWE=N!hqFA&~4&qwchKF19g-m?(TOBZ6htP41f zzByX?F9F3!{RQACogOOyMnekr>w=rV65Vq(xbir9ND*|034OKwFTfPKVMS-j$T0CUI30}RT30;xsOlj0<(S{m z(bJfgP#0*29fNXhYcmjBHAoT^N5AJgd_KiII_(^TiDvW z!qb}WAssddYVKT}!8U*CURJ!I!;VV9bYD+TYq}%RNpF!1xOgUwGZJ+k-8Wp)hZiW^ zFRFbD(%qmpF|Lkb@ukOAce-O0`4#qQac8{m>1&ssQM}S~7XNriF|VZsPX@w!@oKHF zXC7?t!TuK*78vd4UceYcq2H5a9epZRp1_Y@L8wWpqV@-56C2gAw-1`0|^p@1d|M+C8Cb0j^luRT5G+n*1qkv zt&eM~t>IA~K2fP+r4?JOSYjJB)mW+deZPC1XJ!JSz4!j_|Ku|#>#VcZ-uvvm*V=2Z z{dzg-iF@~tahH7UK-}}SqWo9Zyp#xMVXc5~-5Kncg#1Z=H)BhL0$5&>oH;oj8i!-k z-Jx+6m=m6OCSHqmHrZ2NMqIOHWl23EL|iIPGs2h^q1Ww=kJ+D_w-gQYh z(Z|h12ONoJxtxh|(N``^U9XZndH)fKk~yan52!%EzhvpRygnpO=_=J3`G!j6!(K?2`2da#iSV&mD2kdT=t1*Ar2!(#UXs z=EjN;Xv30JX8O~D^OSd3v?KI21HMlS6c$;4+?4pv`9hM0iv?- zb0J-GH=e!`~ucc1mu8#q62!@H+*EeDpud7fuV@g-OZcf|(v zVV7fi!h~(NqXO)R-iMsSiWyGVt;hNke_=7dqkebN^DFWph3*|(yM<5lb)SRzB#HV1 zm=UNxpKDTfAu-FX%=C|SzYI|P!jSrBKJ-o4aJwt^S6B2I zq$Lr?TC!dFo4WE6A13{-T+C8b3)G$|LO=+|5kUP$F!u=a?-L*9zu8rscrEvpM18-z zHXuouB1tHnHG(wcf4oK|A?nA9G9;vk%keyqseFqDT%kTU7SH4$D>x34uXNQbR!!fU6Pag-6$uf5ZP#DVJOihS$LNu z{^G;UKS<2~q5PX=<)6yD*orKy974U*Snp~F649K}{11G|BPfow8Hp__%ff6~+&gkN zAhSM)rF*qmSd`Jdef2D?KuKQfO1wmQl>9mIAo+tuNA|k)0<}pfClL-%$*`)FNma>m zBS1a8gH{$>fT$=hu&yFJ1Qv!ePO3^04!B=+Z;7oKfOs+0zU~rysiF5TAh&gsnnt~fsz|3}`%E3%ci1`>I!0Hn4<3$k9j}z@fTdK=Mu9;;7<$#u zWsd!*>u4SlTXHvueqC}GRV$V;8me^{RBI`;YT_j*2Uh*0=S1K5XGoBE#;X5L<+@3f ztD#t*W92s#!#TQQO{A(+uo>#~EhQu6c6F*xE)>yoiVBptUANn!7g2$z`+f14^xmN~NZV*Y+i9{U85s!yiX67i)JQG^_>f z&)tzgD-J`nws-$%OpaBGwg;Iiik2A~(lfLdqW}Nr{0#M#C;h5{LhW%sgT?hOEIc#R z>?oyX4;X6pXx6`4ltV_+^Hm5CmdK;x`5xY=vM`P}wN$;i$VcSf=U_&Lv*NWmF!j58 zkYmukE1`Yw8cBXZR~mJ1hpKy6K+k|wr3x8}cZZVK5!5F=IMk(=6ZHeIgb|uMyu)4V zXLmr7>FcifcXTb!DE4X;QPHq}hT;>w`d2__Ah*2Qhk!({ehNtRs>i8UE4k3C`=jW1 zV~%I`Jj-I<$4rlH&Roc~c~g4SzeFe#9f~sy@^{m$=~8r&t)V`$t1yz`=denAPBOd$ zzh3+@<`|0=v$^!E^Y}SiJvo|oQvudb>9J<)Khk>ez^G1!HmhA6WFbr<45`V;-4KBl zIwui+4$vH9iA(?+Bp{J_dLn)6+4NYSm98W3Zazp7p>5@CcQAnWv1Jr$DU~_rA z>j?)w(KoLS7P3kyR#_%?#q0ajLrpyNlpVWEf9Q*cdK5V2Wvmc^F2Sn0bz2aTQm2pV zJs)h-5Z;SL)ilW0;pLQ%e0AGrL^E!@I#J(~^xVgkaT|z@iQ1=p4{u7;_aT&#vmX0A`Xk_cucJU@kAOzUzSwTlK|1<>{T-kFGc3d;^qGY&acs!5V~@cE)0kUg;%=_kkDNX z=*#%|wVQCiOF`^!en~;!!+pJieu?`{3fhS~U0{A~FYXct>#3yW?|=$b95e$&V7z#4 z!joUi26PG_tZOr&JV5mPdNqy@3&dvNM#T{Ubc=$nFrg)YZdSN!P3V+SM#z%^Nhp^A zVkPivoZ}}@6QH#Ur~03nTt0@CotE&*gzu#wF_(X-S>986)W1YH6WwY{c;_g}RC3B> z^h`s>H>R7?EtAKw$;!OMG)7mKP!i+2_1kzbq*>NL(i5;55}cvSxL|*QuSab@z}3ka z`R~V7rGt8}+)(o!ypi5BI(7q3l0NaGukzXWseB(1j(vplKZL|5Lm9rx5A#2b z_$oh*t2D(`k`#qmKVzH6?{DHXa4oSV|AV-y)629uzRHcZXw%22Co!A_da2r!?R1um4GCal_qYLNq39+_N(UG|1jTvACM^($xv2=wFZmhGgQeB zuJjD%4XScRan)~P2{fv&Va$v1Q`;NG_722)Go{LF^L*WZ!3(L`Fu4X_wd`BfK8PCw zKAHvUQM?;idf^!frEfg!0}yA5(VGP}KyXW3zRg$HB?=s@$ko7QK=$R5h3Wz*Hz@4p@nW4 z8~4{0D4ZsebBbpn9NB838Bbod!BnHd&BU{G`04-&jO-1;pbc#@sbHj#YXb*mSBl_xewt88y zfsD>`v4YbI<6Faq0T;Ncu!&uDXj=vBtBFSkENs8jXmqZ0WOxq^3iK>?!`Zj)0c4jl zD7NX|vp6=j3hkXT$e!^EyyRl}4|7BP@p^2tv~&L$wRKKtXRNC)BN~Atpbs9aY!%1r z^*d0>LbzQK%9Pr!st6o+J?>pkAa^xi`K~7h@&D#edG}TCN-%)ivlI3E-hB%g!_rHJ z56l^yD#6O9gby4v_-%Ud+a&l;B=~Lc*X!&V{~EjK1Nbi;>@`EbZkXujaDi~R*Rn|i z$l9{lCQm7HGk?H$=OgS1!joCgZX@<^az~#la@TL8sRXZ3eSiK-zB{iaO=#D``Ks19 z8v{-#N#7Vu$D9Aa&#$&~6m?&%p2;y65I3FhYF7XfbjPY&?ejkdI8Wk6>gUau_@|OIEpA$xmSzhPP5Cetux>L(0t3~ z6vDC3#AU*y5!`q{5=srA@2XIg@aFsreUzFhZ*=$6`6}QK&QkTi0{sWsNCn$27)#r0 z_a!~tH9$)!>jMItzhezHQ|lsbMrfd`4KDY4ayPy-kiW}Uxha9r2Fm4mz*o67F>pWV zwAg@W?b%BSsT;Z%FQLH~3qc4rXX+6QxYv%Wvl(d)S_m?Xx#OXxj?q;?Y;#7#e7)O+ z9oj~9jzwIZqoGxz`X?YFXsBXow>*dP)h+W#7byZ`%#bD6=CH!{AES4xuos?3ZPt~6 zSbVp#xT(Kpz`8PQ9*m5cIODd|mnq{!rLVMMNGS~J>fXiG)Q>~Ni z(MkHKQ5B4A(p&S`<{&o3Q-nHIZ!)x7sIch<_ParUOub2fUGITVJ1ZPFzfnMJ^Mw6A zh9YT0!IRwj!o(Im-<=|Q8gfHKlx>;4$8sf}Mc^=HQtvsi>_zl`3`lr?3g}n(dDUI| z6&p>uX8|ozZ(qY*ICcZ-QMh+;7miN>v7h7DPDM=>)o>mliH(9OyzG-uh`m|?APKn~ zkc3hL=m#nkuCn@ug4jyjt)TUQs3`o}*8xe$Y+xj0+FWeKz1l;7M1^bx^q}I{35b0& zzqSXEgz^{j?Z@U@Hw0bY9tB8vPX#2rpEKWH1n4^|ydo1f+l08UhJ>;hknmn>;-sf^ zxGIE|!B7~wWP~zQgYN2_klLzmPbUdVaBG$Y&}3jw7^#%IC~o!rkaKez&6Co&P(+3d z5vr3E)ab4Lyu>aQ7(EYt3YrJ;sKZ7wj7K)5Qk{+oX)AG#DmE75&`w7Qa8ijI07;Rz z01}Q?KyTpZ)!4d7k+XGShr+M;goDK>96to~Tl~C=S~yr~tTsiUSAmn(WseDc0Eoh( z54C0=egXFC1!!!g#nS8Q&9F?d-ws=7Xf&|9km&51I=%hC$orHx;$848p;^(}2#h{R zi=kSP8KDDRQM1L676Q5y?xTKtBXU1JO9SU&wi`7zlQpH?7(~1A2HFiNeOtRBTQq$E zF`6bV^m%lS`GlrGuiyhv{qZgi2Y0huXxE2^#_zPHLDf7|XT6e*unCg57*i+%KDt|t zkWWq{1$xM4QzE>m>$(8c>D8YYkuS9uTK~LAjgo~v`AG9a;Pr}ao|;xD0{Gzc#+M}& zHK36yUJpn(76Ez=Kd;g|QpG=yXX3ru%eV{2n}7lew-^sPMi5NCfmA zK$3czYeM%kKtjj0vh1mOwO<30^ikVOT6O?hinpTeh4)?Hg!iw2m=ADA1Clss^ohWq zU_z$>5_LdBP@qcyJ*+}51tj00^m)nQdcL^bFFi7}2@Dy5I(Y6->OkCPR0sXo)^gsI zk1&YS4L9up*p?Ut@=qCzM|-Ie29lnr8%c#a@Ig5!aGNjrAW+Goe~S3`C9r$%3*FnV z_e}X{|LFWaUl>6gi1qvvVdz#RDPB|*gP<7jg$M3O2+G9FWgeR*rt0xRjKrQn+8~KY zq@v#MRh!)Q#b9opQ)hGNLv5tt!#GMmh5(e|S!3vh4BcUs^jw&`Bk3u~-KI7m&cyfQ z>+!|6-j385)|7`j1wtqL7mIXDHYd>HdE)g?VUTustx{us+CF|HwTgXvibEQcJzVeq@RL?bY}S;ehJ+I?4P{hGxv)e8p5ER zHKhDf{wKa9SCGL8p7h_xZ!h;CN>ear*kY@Qw@$ybHxa{U$g?_-B0)XZGZm(lFydhWmg zLj6umwW8Nc&F0y6I%o3yhKWderj)9QK59Y_cf96)*T#gNJuuJr#Qx@remxQG#TVft z(BDNrxF;A}v4azI;`q#Zj2mz+k4-Z_g=&)4M@kDkz0F;MH)5_hHM4Lm!rP&mnHpF0 z)2D!hPDAO4KF$C{F0XbBAkl5~^a}^)%m~MHKs|~s2uL_800{>@VWOF-XGJrA3((!* z@M}K?B$|0MAkk>-7E2tj0+Kl103@1u4u~$}^K6VdAz zER3br?!|EGjM@R;x;yZhYWQE36Lj64q$h^?I8#3A-hN{twn0y9!sgYvpCu zOuAgm>dQPad6_3Sb4)Vm$(?ne)LnicUg(?THBos=Do<2Zt zDPBsr=!)wAEma&bKqBv70wlcLw^n%X2eeo5eh-lF{tA$E9A5?`ywrKZyBCn~(vB28 zNIOz^xw2O@)3GMR5!9j9<4eHVv{3MHwGb3Z4JkQ+`&_9@kiviHJr^LFlU2Bi$+-ALpXo+@W!#y8&VeIp{Wa+3xbT_BS zZMo;;!TeBf*Tsn~GHwQnUOm~AaX(B^))v!(eHAh!+6jq4w!vzh#`nqMQ8Pl%bxllc zNX{O0&&QwWVPJ;$+EZ*g59-tkfrB=? zh@TX;FuL&>ozr0dcIKHwzW6eUZ1mds2T``Q0pppfQm>;vkf|f{z#*C$MGQM%4G5jcPBeVB zN;e~eVH3am0LsTe@imNB;}K01&sb5^bm{I>kPvOQh<0)sj}XDBD@4kv+hdOoW_L2w zBXon&9fMIEh$2oeq{3{~c#ew-iU+(X07Eix?c!r1{3L0?=a#&XR`~y%AeqN30TsY_;5RL#KQR19>vIKN~jgw1+?(={oyf`2U zkE1j1sPOIuB%%BekZ?Q=NI0GaBpmGI|3z{99*}T+3P_yK8KVpiZj~$?#{=4=IOx({ zq@Z&E3GXC8KLF0J(fAZIxeCzT3dilrM0H02Nm|wdl8|o&v_*v%2lStc;~qd?RnS9# zg!eH(!uvEJ;ib7M4a#;v!rKpszDmD#4m38M^?vPAK-VZ}4xk4Wbd`x)4oKoyWxnk; z-+s}2d$0NSC+6E#A1vSGrQH>b;ZsX{J?}82A`e<{>4cWS{vCr@W zVivtVzy%)*R#S-8E+cpFuCTp@YsF@=cOf(_e_L0l&1C1$oZV=L#s0rMK350rm8pLl znuaV)>%~kfbIbjacsC^j*`1bY9UN+pNE3nih7z_pq{SxO7^Bjg8sGY9P+)1B8%}I+ zs;*O!iHB#W3dbVworn^!`#Wy~?lOg=RVG6CAfRvK=hp^sCzn?{0yH9y#{rV?vH^)I zG9qNNQA!! z(0u&78kHUAN%=L7UwvOeRCXfhe*+}p{S%OcHwud5WITB_?t&uWDbf2khARf_qSrej z(Nn_}m}Y!n=vW0@mG-d;tOH`Fw;m~`1l?dtkO+%ig5q6$=AifeAjfz`|Nr86#T|&z z@I-oOTNx8~eCr>;t8|rIck7#67+>JI3)avZJ)~-QBYKVLcd{8;VViZT%mt9^VH&zh zx6^)L*mfh4YJDVMk_D6GAVU{Ct;HC+7!U?Cp=#)2X4;{P(~%*EC(6P>!5S*cPXkB1 zS9=9_sqT9K3CG)jL|8unB*OYJAfeMxt%NrdkZ{nE)&mNp50G%=0TN-I4M?RAPMESfR?II z-UcKb>|P4Thk!&$3;+@ib~Nu(9NB=R^T|!T1v(GVx76FICR73FX9~xOyplep8V-9l zi&^{F(J<$t{V|;k=q+g`mQr__luryx89|RB%LpF!JqP5>$-y_<`dWrOsPOA}FpJ$t zptTQwkv=;MVm401>_W5l+QjUnbYiB$ZO|u-)JTeKvVz$nDg}vwdC*G=mjJm=xYQuu;$KUFjElbP5Ip%8pl!KZ5uurot%0HdVFu4PM6G0ul(hR6A(f$f6JQZVX$xwWG$A6?J071 z?RMAibzy!TPD||S%YSLjeP$LY0rt#qP@n2-i_b!!=>>Q?-iUyd0+Nav0VEu?fW&8X zB_OG&D^0o^OuDsz0;tMf?N*bHLL@UK*v?7FKLsQqGn39z9QL=G*EoNbzED=_jgoN!^;jH=4& zmJB}yM=6%e^x*d#etWEW=RCy4zHDZv;y_Q8%VvxR56gs^QwK*tBJ^l^BD&47PzL%XF;EAo z-K>&_t~|U8Ita0S$ij+*!y^z6{ZwJ0Mz)4_F?ueCp&e$dddG0366*)2^ysU*r)0D-X+=>)wD{O8gsGNHhM~cy#ZK=pNs?v3yyE+xe!;@lwUC_wo$FI$$xPT z#@hDo??fGm&g>q-#J@GMinAkWf);G%cUp9VojSg0p|A7Ha0q=D1CNu9y zye2Dp^zTKaq*m(#uaG4^vbN{XT%{aBHwqg%{Gb$Hj4#Q@N8foqXOB;OT@A-!T&{oB z7+;;5^O%TcVbb}Bm|2ctyp6HXGNMOwEHCM~n3H)k_MaR3EGwEx6wjp%MzjY{4?L3*UQXTsU7ax2V*NX%V=P~ulo|bYp^+U z%-MRTR|oSpWEGlIb7r7qhS!|pnh1eLG!v)H3ddYP!%vxAXL3;62nQQ~>MpPHk&7;4 zs1ovKlWsep35xCoKtlH?KwrksuN}bsE(IMAnlCAce!2AuDgyL?g4mmqkQV}y6tIuO zSsz~Q8r&Cw&Z~6-5~GT&5?#B;g#H1j z7C*06=7#01pc?`GT&46*K=PJ5ZA%KC0wl4$4v4ww*SM>wK>GpNw0P#fti{mYDyiJ`7dK`Bt)?b@%X`IMg>T!9y$9&7dczOFz^X-vH(Rc9V z*EnfHI8HaA@h0@I`L~QB@ra%!G8&hYmAT@`sAr2C&iook_)DqSY z2i3n=N2U+;3E|{TTYIi5pw+E4=hZotDmD1w)hOXeSEFu0SW;6s1Qx~5uli9^vfnk| zK5D-00VHoZ8CrOMXTJTj`L-XB)RaLJ#|a$5%YLUoG-E}To)1V;IvG$tezIs&>a^6T z!<|-Eqh~2byRrOW-H~ zV!>KVF*)>q(8ZV>8N^~t^!C`r{%={2nYX`1mUeAfrkN`;0|#4?$@P7Hb0Mg?EYmcO z1OL{d%p>t#hpPV(&`7PK_7si=Kw=`WNtRkgJt}mR1fiq5lr_++79tDXw@o_w?}d&N zAEzlgN{7&G1tg8^3xK4N{UabTB?e5$2R?aA_oQ%8kBYv%#Kh5=Ds&a*+pEmCOU$=4 zIo2U`^f^q34p!m)8X$?|UO*DZ<0kGYlWvRo_I2~^AI-P>0g22)7O}%utalvxCg&K= zwiDBInPkBp@3bPAIp{6myjsqCvMKuvUpHq*nHco{j9`81x$+>LREe+SUoal%qZjWT z{Ibxt7!$#Q&hP+YJrS;x@PJ-V;qRAOo1rYa{`;~2&xU0#ebl7=+-3B}WSNtLa27eg zGh!nAf{>3=ORO`{)m!GmutR2@*9v+x5x^c~cVvdX&ej9n_+0f$0Vd`)s zbPkiY??c}LE=t98Lp8p$>L_2`Xy!G#4L$qa=szUFC@w5WozSzjB*(*z9OBl_S2&5x z7OHd*He>N?R%kBdPy5H^@$8bzu$)* zAlAm--IMh2ge`p1GMD)UT+yR%N+6>pDg%w`bkeY8uDhXp2v0;e8_==%d6n0nBI8vX z7l}xg;fPc*)U!lMIUi8J(Q@Jnop)*0l)Q+@F890u0!Sv0z+F)C0#H`~;%wYwJTD?0h565{d06=a z2Hf?1g>FO_?Z=dr{B3L2p|h@gBS$O}ek5F~`XoU2;^)_9;?ACdAG^vL1zrb;LgUpI z@Qo_)MnF>Ftb*SnUb`9hZz_lt?+Xh067Jm!x)ppI0_2X;s zME#^ik6)$*lhv+BWRAI8P4@mH%o=a@HsNxE5rYP23&(45{bv zi~1yrU5(k;U{Vmq5^ag0X<$oCu`Mxu`VbcuS|@g>2{{?i^-Apr3*)tWXsN>Q$o8bS z^E_1G?Ksqu6&?l`+p&iZ z7XQKz_<3Txc3|ZKCKmL44sN~hw&ctw5}p~ko=Lf5++IVvHtai{OF<}5zhO|uW|h&S zxs_VdbF#R?j#F8TVOG^PCTjP@J(DoyzBsnk6Wij+uiv)@`>pNc8hcE75ASt{HoL={ z-L*ZK4v%u-);?hA+U@JEhcgb2wM!V+A@|oay#?mjKWDm`3xkbN{)LX-@rXXXp*sU_ zM9}8|5+R%qNI0$n#QCLOtr>R_!e0WqA3wjw9K2gWFX7HQ;@957T|#*ekc9F9pil7g zYV7`t8ej)bR09Y8M8U8kvYqs6t$-wy8vsctYXJ?aP-u=yC|?02p?n_@eQ93pHQX;( z5GNV2mcx$*=n)n2F9Au&8v#kkTLB$VA-@P{k%D#sqH&Mig8+S9LGPK6<~BkZ3rIro z0s2t!`T^M#)=Z+XqY`l0|{>ybc@n3yP;w98Iqx_M8V#Q`xbDWTo$2_GgTwU}IMq-@vF_vdUEi zDc%6p0g-?f#Bv!tW1m4DlRH$EpjixWrW)Ca62atew7|ZHxt{4cPBQnugkd|jz?dER z#*K?G$vg2$a@+=N@VfyqE?I)1gj>O<#vwe}XmCB#adSg!j6u6g_xWhPHIzhb6BJ5T zcynxPM%?qW(nM%yesu2|%vax+z#h6895Sr$bBCUzQ9kweb-&<#mFfbXa}FWy z^L4i!j;_EqTze#&Ob?=32#m#C>^vB{B5l*=w2utZLz>BcBwSR*JV5v3=hqr>7ZtDq z&`O2t!d*m+R?rFfc~y^cG)mU1cAi+Ia1>k-F$zmJetzv2xQli00w7TfM}be&0#${C z%-*+zO!HUN!VEy77H9~ITDTUFD1+Yt68H6+fPSuGn+7S9@VNX?!lQvp<>b|70a^q) zuf|;}B&A#`!>ZxeS^$Y!_&gv9r5lihat9z$2I~QdGWecJ_fwOO^A^R*p<=QrjSNo4 z9tYi!4a@UlOyCYC>H}Drf!dV=@vhWM&9{C#(z?uL36QFk^!&-%x2@vUI%@AH$v-s6OgE#*XI%J8v?S zZH8nXXRY&NGM>CsTo5s}Ayl@?hQVkKn&TR?pNJ*Fhmu40!5+<$_fUsXpD z%ct>tzrsC_``rq9A9sqTU(LyDRS>5FN!6VKNZytLlDG2!wJEw4CfzM2bhin8$AlgO zBq@Cwkfd}oAQ1poP)R9WK|=Q@lWrfNKE&qL-ZSagPuz>aO@FMnl46imhx$JOwSKZ$ z>yJbIJxD%EUANV3ZVBbP^%syabJm!u+usL<^%3s=)c|cy-hi*0`@+L@Qj+73sGB}f zt0bqA&*gFx7M%M&A+|Y?UzwBV>mJKMOLDUEOLC_Ax)0#HP`xIa6Feb5^Wu4`g3gQM zAbJHMfN`wrB{|t-#YXsZbLPh9<^=Tr*gO*+xpQrS`0atrlt4OjW+IUN8HvuExd>)% z9l{H!S2ciw3L4-JckMUuQf@MB~Jo3z2wi%xX@i$x1B9$wmMSJ;0&) zlAH*@2?ACEoGxHF3G^{+Sm>cmV4TqXGUx-o(1M(CaXe0WW5$Ax?L;3K{MgMM zAuvD%1p(#c0uOA7dn;`7*qWS~8NSCeqGJ<$^gXWa9|NN42~Qq(GSm$O{M#mW0fxI5 zZ0p2e{V_*(zucK^?5YNqAU+Gbrh(uXPad92ipyx)BSCAvio(D_1jzd}Iamk6q9}LG z&B@`nvp5EkLGCp?s zxhm3j9-tHP^J)`ue@{VEaTlp<03`ZjjS2Bt8sCRa=ygE!XZf{1<9@S(D7m*N=rmLm zc}sgw-qNKlZzF)DX};2gngB^7O>18udXgSf;q3q6+#-TH8rp7T&j{WJiv+U;%(#N#fm`!$PcV&yoTS>+I(H0t+jb9Pj%^31S=Yw)HyRv)>Ejx9Z~C_jjy@% zlE8I=HEZ}imtL||@k->ACIsxMbnsap;-nJxMOJLK#HzFm`Ib%`$rHG)r3tyhtna|7 zK+E$3t*a&Xo11_|W~bz_Vq4nWa`nf+O$L<8 zBt^H%{9cK`E_YUx(-HE86Kn!^4J6&J3mn;q_$}EPtAW<3IDoj`!3~BE7B558^Mydv&tPbR2x zev5@E$5X(8S&gTl1H%T8Bfl2cQ+T?{fq4s0oeqo_X}aBk;V=-t#tNqjn4dZ@?4$NL zF!XrubYM8LN=wZOhbHs^2gZxc<3wDGW+E^-4$M4Yrkj`xYzK`q=iIIg+$R| z$fJIDItp-TIL9j*9&KI%=Lh%_&~ zcSdcw9rf7bQa9B$!>q>W}(wwencw{*p zA7@{=7Zm{vj=B+0G|%h#{N10GLW+jcoS|sANRK)7^{Q#mV?$}qR5U!MoUtZeXl@Z2 zJZS#~EU(d8K-YD@)iJ~(SX{jhOv93u?JcdHOZXzLzA%olac87AgCI_7i}^Qevqn3!jE%$X);kB&Lb#PsW! z6HLq~Dnwi-ni!vs$u==(>6nvDOrDMzXJUdn=42BS(J`l(n8i9~tckf+#~f*5ZqYHP znwYzF%+V(1KXr`H#B9F_iOu^irf_WkZ^Fj*d_bHfnQ!t;UV0>%{9XS?A!Ca7nnUR92 zOu;m#VA>p*1{l%BZ7Z*L#{PK+4d30Kg84=Y=DR7FCsHumQZPGHFmI+{`cp7tX=td+ zsAH$5U?!ztic&ChQ!ouFnD!J*ECut`6wLQiFi)mno=w5Lp<^;2aiU`1)iGmC%mE#9 zgu*m5GlQ4Z-qX2A z|V0q z`qSV36tuYhQ|BU$lk0Q9xLvdec-7uK8FFZ(@O7PwG)}JbfN{HEG^^`@Tdw)U;u=Mx z7#C@rT+9czi*_up4_7u_XK@wkT%>Vwv7{`n>5qQtb&G4M&P5t07j0X&D}Xz%&E6~T zv$)plT%>Vw(VBC+XaVw?dD70?EUrK6T%>VwO$5g6Vu|nySN0_=u2VAwOByFv9xztU z|LCc2zGHDU=v<_6a!pcPwBdQ(wz&pHXO!1%Iu~i2Tr4TK>mst?TD1AImo2WJ>0G37 za#5h&uIXgKb<>+K*y?VwU8uO&%iy(b({sHR*F8EHX`Ecl2e*rT3SNQSz6UL?7j-VuIJuY)ZWpa_ zUcdRpmN^!eQK?DepT@*;;4fe=OT@hE2y}P^4dGG>R5~GFFF@# zoLq&9OaE-`j|-~5XK|gWiydj4Tt$jY4^+Ev$0Z9bt_q!tG)^vLG;)J|Kwj7Uxxkhi z?K&4}oLmqmaN%RrRWp6gl~!Dj=v<_6a)p4g+LV(kp8ku)wMXY7jgzZXaT(ur)9SlU zvbeI3!Ao4EadMRbW2LZaMd#fXS5W67jgzZfaj_rFYt=j69TwL$Iu~i2Tou4rHo$p} zzsj|^zN>SQ#>q8HaT#^v@n4mqi8E@{i#iu+oLsXNm;PEyuAI5q;yOw%5YjlgDji&( zesRhb7T0v0i!@HIu;MZ_+t$@**}iMB&P5t0SC!&2zU$SW9QUFX*B5mz(m1)Q6_@^6 zyYSw*KeV`>(b1%FazzvuJrBH|{n1Wa>+q4zMH(m99AK=v@!YZp|7gWEMgLsVIJquU zTt?2%T>XkIHx}t!qyg8Wjt&6os=?jzrs_!jUsC5%Gz#|!Fdje_=65;`Upvz?7Z|sT z)YfIxpS?O4X`EcOz*t+LL!(jmF&H45X+~);#D-Vi=!(l+pbGTgfNN>y0Z4h>uXzEIZC}8!)r~$&=(^}##z(6@(>i4l@%SDV)$Up zgw4gMaN5*xaLh=~Ffo~d@aq^*Iy!qe!>7lHsjj7SX%R-@(uITs)wQ%XwO!ZTRMXkm zIUG%4Q&U-Ew4nkJ2|Ei?a|Ps|P{My1P% z8Y=Y8w@UJyC_|1E)=}3T7}lc{gj7%m+Nh2SIi&I_occIc9_tB3sUC)uir{qZ&ZfhYEeDkZTQBQ|3!rIy&2178#Q*kdUN?3&Y7LxTQLG0-*bIaZ2t;w{aEam| z12U_*y>o6`X{2Sfo)80NV!#}3L0RfihZ}WDd|o)ZoS)v&+1T1C1VpxQMp1K9QCoWx z=6$e&&RyEx+_AK6dDGmsqL$Xic6^&mHZfBvkIF}@ze2Q;#&)!Ioz3kK6d{nbs3ZuY z%4n?&iVF2bQo4F}@Iw_iw;9??WpfIus;#261>e9I%Q0t4L1yZJMa(6ft)*V@!B!~p zTIDeL;b^|Bxub1)lrnD67wgl%jAye9YMMI>m!mYniOiEsD{F3TZf`V^X>wFP2=%yP zMdQ_yS|ke3#h9ys^s_uTZKJKD8OTV>>Slz7LGE@aZXo70F30RA6{#)5F5|?sW=Be) z0HE%TiiI=^!k#mNLF`l(DoDXZ8ZlTVxc27GXnU)gR#U;0*`6bvs3LX^YYX+6im~n^AzM176uK<;&8C6 zvb3TqR9GF(+j4xwHHjAGPz(HrY|~TEGi0?mqkjdi)I%wuMqCAnH33^78O;O zSB0wVln8rhn25b-R#8b|QK)42uV`G1oKSJ;$uje_I#@cZxG+){u4FtYIYq^ZdXAJ= z2P5TGWhKQZPLMSXM^;=IEU%m$nT=8ks`{P2jH;!au47S^ht{Dy%G4@h%$fyCDQc z;iB^L!eUiiR(7XkWJ!6jBwR8(GOKF1O4kX!Q7}!-`qU+%V}+TZ668chWL8CKN!c)^ zE$lM;)8IGRi$cN5P<2@(94-sCLV#rUXTdac`lqANA#Ww2S)t03NVz@R4cS)JTveAe z)v~B07@k#987VET2vRa(oQXUt29&>E2PQjXEDaXTF03pnDh=6VJV+TAg@eV_p;;wG zRV8W57`4@?`l>9P6|1BuSUkHZTv}9^o*Olkvb+@47{aR5lA45TWoS59I=iZUWm8FHn z;aO?9t*^GexM13nHv3nHs;WXIWvKUvX+^=bk*2#kSRF#8m>nurjL6h58;pT^6jYDw|bUURWA5Ci>cAv;=9ABa%q4q^L4n5t>!Od~RH2uMGCjMq(nf3QMaZ zVZ8zlY3*#ychT%%MPX6t?6OMLR2W$_U47_Trbd7!r^+qM~3~q_|{Oq;eKXuRmCtN`lo@ zp-^?Hp#-T4lwhVUuyC-la8|guG_1aLHS@(50p~iWw~kN}D6+!Yl@*~N`xZtdX;WVn zEJv|{C0!#+?t|r0aj<-LsIYW4bO$W2GR~kr*yk4oi>ksUy*7(Y(BQ zai_8*({<`}FGNS-!yysq=##AVH%q6@bbUDD^dxWMv zjUO+5l8Sc--4x(o0gV@V$IGN^x6Km=p5Jk@PD46g!7P055V|qI2Sz}Lkv;9)5zuiE zCO87Rvp_dz1a#+su5$!*B>Bb&=^ji&hq^hjBve{hTRFF~qUho?!!`4YFPnR&6IoqZ zQdJlZ)tnjN*v|X--G$#}noO$+UA&;Kt^Jw>;p+osEuDelwx;F*-<}86V-El$NqGeb_Jo6atYBfex+{Z9p z%nHo^;g-eiZ5?e(Is@Y``&@v%;}tD8aK#wC2jFkl^uS6P*xa^BT$c6(n6*u;qvzwt zx?$WEsBVm4jD~f+H}_6Jt-7DcDZjyDZJyxB9TLXHyZin*IG6|p;@!IeVAXFn7Qg$k zGg6VUI5H>w0!r-CGUa&;OkpA~Ha=+JjCgIK6N#n6=NqB?VI-lbCGM`yi+Ie~WE_Uk zX|jK7BlKc8W7FN>s!H5w-osxdwrzYh9v9VS)ef!JNOvG!1k@t zF)H}|qt!q4eS7d`nM+6`@$P;j3E1`kyKhCa1|PGbJp0c>an=Zqul4YbLE##(5q3tr zdjNqYRr)3TWH)0oV1{eJEValoeL*?aiFfZKLP}FlYfiHJ0FW_N<{5*Jkz(*MR`94_ z&kTrz1h_0?|FJ1J_uylaAO<6JvCV;`N~JtXdfH`pI`0xH9AF?^S@F+R1>j749rRr3!a}i7NtxsSr#bAc=#gV6rjyYB4}(s<&SSBzXn(pA2O| zV$=>DvZdePO3z@PaZ-7<99_l6!mqxG^W?m2Hj*K~;>)tJCNjVr+dgWJ&c1yR=LmH7 z_{ulbZ(_T48^;GzFq7J1_{xCTI#J@}|~vxt6%GDZt>cbbPFKcE`lC zJ1*#KS)xNLTd&ss=ax{?c6DBM>kMUr2@uR7UJoo7Mfub(V`_<_aV)>#n?o(78?9() z!9ohuud@-F48!;e89L}{9ayT zADxW0T8~0&(z!_ERhCekRH`BKmfySshpFUQac>_DBQsY>fmYk zH|9??=yNhKPO7F?bm)4ap`+D+B={xm%@|%xO`!~SrjBhxG)FLqoMyDOSh{c+pq<-R z8C`*)a!l0G8af)=F_ps{bCpL7xS|2#XsY>KgLwsLY#Od^?yPBR$KDo^#?Ga!7((x; zXe}{YF=~z)G=|Nb$uW6#Wrd8+tB*19Q*C(LXssH(?Z6ZujLmm0EyO6e(Ka^Nu%XqR zGGRf5S%<;XW-W-^ZeASaKx)I{rOk`4L4LMf)6yKAs{J>Q&rT}|m4vD)DyxEMx#6I; zyIU^|W3a9?R9eP&un!zBi)IBQg`tvJRbbWa26*cY!vW&~%5reB6a}jzk;3XobtI@; z6uP@GWgM)yBv@QhR9IeCsRp79TLZz;*brAb%niEqRi2t-55;A{*_G9m#nn}_h8Y19 zL!@9je4sQ%RFEe7jM>GZ^5T+;68b(d>I}Cz|4oH~;`o#qB}L^$7*;AALI?9j=rBvk zDnV6t%7Zrpjydx>lm~CpMUyU?rl{$`J6n11X64BqMAQuFJb1flYS^zd9=xyP{gE^` zY*#uD-m7^3ofNwC9=z+(Jgn852sTl}dGO+(xyMGA&Vxt$<~yK~UHU{Prt{3fK+@g- z-CDi*W4n-!?psLE$3_zg8eZw>z6bo*px9@!S;EDC>FADzlKv51KEWmh*E#s5qw_#- zPeoH;Oe(){7`i^BZ!UU2CG7X$Is?CS;cWtb9nAJQ?0?{5E0d1y4W#cK&}?K62p2n6 z>FAP3-yP^pofsgMbW+mM{T|^RgGBxHETJ1Ny!8n0aTH!?ywI`jPZ!>sz!#v0b=rAC zM~gch9n1`EH)y(Zg>Ja=-HO-$1kL6NLdP~cU3i}YA3?i2`+^~KLp-$XV7{i)2&IIWtv=+}N`>1AhGsY-($q^Sn0O<`>=vIvhfo z*+7>hwov3hZi_A_bPnjJt-!@Rg0t!svvDZ1d4y~>T(8)67LKHO>S&1p!>c-ep<o$cQfC7o8>c4}#EQLG;Y)C@Q4sIKQLmoKu?WyQ{N(U-;aG*|xr%~L1+KR7t4&&) z6@e4~NEKM19LZT`nyXC=1$f{w%3p3`%;CANS$;fcMn?*}el z_aA{S&Hv!W*RkbpFtKC9A4ez0#qwY4DvIT6ol~ZKwB#;4js91mjP5 zZbPypl*brKQS7t88blq4ZSv&5w&vFu%qfc3X6M&tb*)N-v2|z?R5%8}kApfN=6=}8 z%$wukaZ`E{ujACq5=J<2%13wQZ|xeN=o**Ufp3-goi_FuH)7Tn1z-L`QWW>69 zwa%<%F8$dfr*#;o_03ym5aJ-D3=E}NM?$7KF2;G%hkSye6u8km_^sXapGP8=G9~Jk zW*95;-5=qto&XHBEYsqJnJSs;#EyQbvOf5-=>-=Txbj+euC7~hS0dVv6Q*nC)!ELx z!LHcY#`qlU!f))r&%+@Y2FZ*N0!ZVA{ZotqzS9n#Li={sIE?jxF_dPWKY^XFp@St~ zj4(&EJ-pOCwsTT{*r3q{!HJ@{OWmskB=x5g(B=5a9@aqxeHC}sPB}aEh`Vq5fD`rslhKIWh(#LAN&He~LWg zbT-@RHcLUW6nQPTcSCqIWp}_XyXrhOC?;KYjYv7-bn64)hcxyLMtdQpFfCNFd0dsB z+m7=!#)*wH%@imk3hdWylgPYz#*x|75A&9J2d~Q#`(2xLLk_j*u6%BA&nh8gn~*+0h(_ zY#5?%)0ycM-hM+nu04d_F#^UO`U95E(YNonoq5Bf*YyH7l92Ws3#o5LW6yR3MyPL?xL~! z0g1*MG@(;bp+qO01xWPD6jjNXz5+lJZwVmLNfDEd<1aykBu6opD~JQrqJMq}Nc7L6 zfUZz)+2RUBZBnOje+DFmX+NL^3inSyqG7mcp@e)spd$75B0z--sxWcYfaWXQ<$xsD zt^y>fZw4efZUrFGajO7{j=LFsFe=qaY3IREK`KKrjgDM}d~@13R57&E zsUs&)M_M+{Q}{fa=qNd5*G8%>ns8m`=?C3W;JW%WUv~zA9IEIzsV0;K&6Q&$zA;_m z^{`WP9&MPJ?6T>J@EDx#fCHA@$qj6$F{$E&7L+@hcy+@(ua z1xR#3DrMcp8+7L6!;{je6TSB$A4}a8`+TMrJ<99>dE&*H>QK$ykXaa7 zN?H^3dlI4Dv&(T_7iPi1B;IcdJsLf z{0&{FA+0!w?_(ab=$~UZ@YqetPG0BQKPyq&zu$`+!hl<4?b-03e7N@XH2#;{7~ zB6^v7sE7uE(M8m9Fr@2qsr;F*pEf+4d_IS2y~C7G9H;pl<#Q**vQLR6fZY!H+(!9) z1gT}!`7!?M^7(C|y83+U?=&of;69y2<8u>>ODM>-$#+xl&JgG4`6aGRD~|`y@x6CJ1vpliKHdN8FP~11NaT#*AHp#Qz~H3 z5EZbO-ykaBQl#TxA8%I)NMq;H8y zx6-7G0$QQyZZPSTo7J=w*hw;_2GiMn-AQ2n7c7N-yQQ#C6%o$HvMdGmDXED#{aM#U ze<6yN!dt`*tBLlRn&=mxLxbedE^NmR%Tnk>AeN=j3pKLWVJYCau0(hrydl1aHzqwd zOFN% zX5#)oZ7V#3>LM0G6oMoWC(sMT_Em(L6X+#X8v%)}uoci^q|whw>akwaR+tOnbqXn` z%l}W?3bf@-TVa<&LY1xX7*b0K{R#f-68Zp9v=#0lZdeK3WlAV#!Tw*c6&_SVZrBR! z+w64M3QEX#;UsjMknf|A_x@`_j%I!*k2zODez6krUI_VwVcSj$J-oq&&_j~Oi_q`3 zgnr+MgdRo#h5jGPQt+++Kr99b{l3E#dS?frcZAkLcsG(xB~StxANF%omBRRU*{%6M zW-T0%My>qMSPLgZP{cC$tqEm92?%Z?Ah8x^0ului0wn311xT!gYCw{{r6wJh5DVRP zfW%r@W763iHb2J4I(dR}rg6}~5R4d| z#!&k3QD@)?)WvrHvj+8v!^EIQxQ{_K}9_$DAJlKTM($D@E|;pf-r>J^SHfP~{&KvFn600{>QM;)_l zE=TpPzY8y|Rx;iAO8us~#A+OwY>i?sJUBxGrVvC#{r9nJ^-<@9#0faT8PiMV)y0oV zgtHR!JosOg;jYSz!?%&0;D5ydFZ4q2v!Rm@$_C`a56(#3nIT@a`c7Q-?BHL5pI;3a z2uB5;g@eAaZ{X)uj#A;ERW2OM0X5?1*Zu?ds}y9`UUT)UZ~a4fbMOylT@7WUdG)(D ztzMfS8n^a_y2OplGSk<;^xz?&TY_xXa{!&u8;>*}_8+wj6Ako5W}7n-+aN%5=5dNh zR=m)Ic;i=O7(@KXJr&YXNU~(cNq~;VPsXAo`_93$WX425k{Rrt2*-Rt!f_QK$v!4t zIIaaG9BTnB!q2bWiMwRvy?`#o&#OI&`&IZU%S2olwk+L)HwVuUW@#;E&tx)J6QlAs z_$s%>$0lkqEhbAnRwEy>fq6DjJATH=zRIxzPXJs!*1ah{c6ApEV)f91SaR@q52GN$ zth?c?NW9zwO*Jomc}Be4@Lr`W1{TVpiXjdfDF&LI!a?_w6a(w26vOucNijSINQz-2 zASs5I07)_Y4bWBi`8n4v%>kKm%;jQC?892ZmQ`2_h2|kFzJo`K4CaI_;3JY>ci>LlRVzJ^#Ntpz>7|J1@@%Pc0TmJ?Wqu z|M`Tmc4sE5)}HMw1z zaA#Bd_1>eONu^;c;&yS2+z+Vw@4J7IN<(h9i|ZrUQhoSI(VkQqRXbf=8^LgHd}Hh@ zsWi09+%B$*U^o?*4$e=dIablUiTiQ*O_)F7hEy89al3wqJ9A;_tHr0L(l8Zn*H+y5 zg=1F#qc4?)HkjM>sZJAr`zXCkfzWm`GjVyefT}r~X00`qx&#B8RZ72{YlFQe*LVjF zi7zxUM#zOJm~aY)2U*Hxa5bf1xZs}`kG&GGOUGCT-x+I7$C@-8R^*jwVjk8p)(Yp% zI_6lDhVD&X*5P=6(lN)FG#~01>$p56=-{#r**hAwfmfEvHBQH93Zr(_O*wvTyn}}P z7p7q7Se47jjoK8ix^6aTt@8oq+q_6g86w0 zM(qou0y4sRK80p?3g(>@%->Tmqp4yYAs?TDF%F;1Kv_rtm*_M+SW+;RI>v8euFx^Z znV4o^s6ly2rTC^!BN+Rt>=S^p4&nLPMPG)>)GLzq6P=4R&K1QcDlT?Jc=g;HSY&bi zS?3~+lZ*7$aUXXdH~K3U*U4;NaFNEzMeQZ~4)FcACRXmSxXN`d(m1(JR$Ne3>iXjq z&mXY3Zr8a;rZ7FoKQN=|XCl}LZ z?f6i8MzqFPEd*8|77~bCJf$l>?016~LX>DN9Gsu(+<)xk%&WIvW_bi=pxI?%&m5 zas5!|BF!l69XvVL%tMXYmM5h<`M^ej1xtsZIK=Czhj>3d?R#sL(=hQ{1Znxrl~HNm zTI-_@@j8MI)*(oSN#BqqR_Ovsv*aornXNF4xUi=Bf9iAytnf$B*gCz<`RK$J?SJ{n5S@tszaWC^DnU>RiSn7uYctdE{D1cJ>G%9~rRUW(ljt>_Q@|^-m>yCblw|V zuhzG@H}euvSUJcC3zW}4*@d`HOjKTJ- zw$e|N>p0c~NwMTiWvumxcczg2ckjhe6b_b`7KJM#vyHuE)9rqoZqwn4Aa;$fo?TrO zLGRx3n&`VLOqIQNr#p5qD8fF&)kVc6#ieSSR~AIty<24)|Kd;(TQ!!JVQ1pBo63S6 z>EaH*fUvc_+5~n*W6;>#zo;r$QC3z~g6;a#?MbT&+vLLL@XHa{qb>_dD)qDt*}}dETYMK*6c?3;B}0^>=O8(P-Or0kW>r=fml&IK zt8k5tZ>`Cc#`MWkC+8`0?y0d;?Wu7*oKokzHFc%iQ)4PkCHpnZo*IjX(52f`gERL( zO`%J_r^e4<0R0z@AY3l|)Sd>i8*iyX;zlpT2GG1@qf57^1~=?`12os3Bb>C>)9sOP zBrNP}&c!N(2|`ys44n(%l}^Owhj>{f(EMPsgh#78 z9o;3Mdu9s!8`Ff2)@nMs$5Eb7g63M-mAsgabaZ)0(CZh&gK&u=Q+}FsboU`%H@w&1 zE)Y8QtkTh)=+U$<1hEToiO^LKLpKR@kCbWJUJkC|D#kBec=T}G0x!)65k;mpT}(%J z48Hf4%QWrFwFjsBIjsM)>NM@Q^+LyPeY)_N&$)}>Yg#OH^e&~NI}-8cHDLhYYN10` zrlp&SdbPF%Wzs5imBY~WBfLkh)wJ(Ng>L3BbeAH1gV$lW;d-GPE`4Vp|3=>c-{Tsg z8?M|=LHaVgus_2sLN{-ic)JmAtQ&p%+k}pN<#hQ%`~YaOZWlVRrKS56@t*wusCyUi zsLHEtc!vpNM0A3Vii$caAU4QBP|=8@Fo;S7L_kHbfdrBW2~B1^5r`+e8{U;pHqoqN_^>p36R zvz`-p4qd2xdn+$I#jNNyoYjKyIzPwZo6X-1NWaoManj$fg-!M@W#c;lN#)yHJ--EfzxW$=IX$I(vwenrI7d|vW z*3&QIs(F0*LH4M>?aq>6xbxPL!~JAC8-yeOLvrAwUE!1*_)Z7k=p6WlgYOm}-w@xa z$oOPS7g|0}%#m+U4tyuWy$f>SWBI)%2R_E*{v7%K znj_zfIq>}i{{B4&KF%EEHR6%+*;_h?bKqlqd*r}JTifY5@Ufj7n*$%)_p5W@WBr($ zBj3F_@Ui?olLOz8;Cm%UzE5-DqrcV$KHN{Xd}F=rl8rCp+GV;>;5uW_JgeWzOgl7R z9FK3mZ0@yd*Ny|tk}@>kPihIq)%jRXOmn z-JP2w-|ac@(ccGi;A6Txn*$%+dn*S%rr-7)_~_m@Ir4RS1Ir0Tx1#`wHTlz6SPRfCgdd}H7@X@_7 zIq*@>nU*8pbvf{{J^e+Fd=KWp$M$}04t$Kq$2ss7g72Fg_~>58*YL>rWXm`59iAiK zNjdPb9V*U&kNV`O9QYXD={fMRU${00KI$8{=D-&L-yd?|gDK2fmjmC4;QKZQKBnK% zuj7&N$(C=dNBwi)WBWWT2fiNQo0tRNK=94Wf$t~aTb2VK^W%dY_!!^aIq=cF&_+Bm zKH1Wb<>llY_^2nIodX}o6_@A0M?JAF2fh&a?#zLYm4t#yVHzfx?=G$#K@G;-+%Yl#acsd6@rpvoI z@G%~Ha^R!hbn;txWPGxvAM4xb9Qas&XXe1idYR0Dk9yN1IqKyo(&Nt-1$MUxz z2R_w^$B?uo*WOL@D@dDoAqtc%rT@Q_@V@tb!6Ib7H> z>$-&t--pQ^^X0sX2p_z=w7f1hyry<6ZjGH$${T%by6wNmOY(D7opEDqtQ0Hi)Q{Sl zS?A8EoL*gCc4^Jf^6FS^O=X$wmPbZHKfSheCSK0K#X&P?)t1-QG0f%-oy5Di9Q>c{ zt%hTCdF@o(oEtBl!4TPg+2Nj08LPMyH{93FD2-LtRO6*BGxp+31fPd^53Q-ig}XKb z-ba51wDpP7ZIJ%-HR&z=DbU0?RfNmO@p)*ToF$`1jUx+HdFLBC`t1GXg z=+K%Ox~~DWjBuTYd!uk$p}KW`d9?&X63R~ZVU@V72^UHs1w6dAzaAQvKx*EU*Sa}G z|Lp7wGEYX;vII()qzIBG={Kx=YGqmZ1=A!z7tAc3UY>Cm0k@-3g>s$(^%SH-o&thwlj`tH@k^*IR#BmP7cHd z@MutTmv7edD{+-Cg5=z{3piG{Z;wyuDIVBXT)a6pP=gr=ExHpiuV5O;Bio*Fx!aYF z;=bPZ=ircUo~Fg4aCmn3?$J1gPq%yPaa-F#NcqMAjTF8sfRwMs@UZ|Z-yEP(!j~|7e>8l5HGC_8E)l-x4Buv; z`S^ydtp%Vu z_tdz8p1XP)d0I>HmdGuC+urycwE57F{0?mAnZ5ku|si0Y{v5 znii^V#CKIw0iGN1UCE9AC6Um?m7$3nz79=pw7E7Kt~baf@887xjbDcfqlKZqt3tQj zjWsZ#zNIdcQBZ6fi`}@m2g$i9D@n!7Eqfyt(X6FgjFN7@N#5TRR>&T&D;^^ zH%mJ-oIZye%JFM`es{`NwBdm(rQP=h-Z$hG*U}AJ0eLMn{$)rYDtGb?&$YW^^;e<7 z1L^Kpp~(_K#4p_atI*~01D863@vG34jiCuEzY1NoYFg-ul}v$Vki`=?CO>f61L*nP zaV@w1RY9n)q}jDdMom4W(HY|_=x@4VHbPf14^W$)4C-i{e$YPjI95C@siWL!NgKt( z*;;)aTJRu3kdo5Q&@r>%t;O@u`yO210&!^*AHWRUIlU|$5>!+|2CeI$hd>SITT_D zZs4ZJLPv!28Q}p;K|~0}$vG_|UpbH>`T}PQR0YOJNtt&}MQ@~ox~Sn79&u8m=>ATu z?VXl#tM1{dapOB~_BMFOBfDAfL-QZRf74t120u{563vC04xuYnN&Llmd1MJN?q_L# z!Mxo|h8ER-&+FG+@$HPX+$!FAz^m=96#u3Jo6Ix7piS#gAg(Y7%Gt!@u*J?@(KkSA@eN!5F{l%G)V+g&)V;%jc*ZAAdIr*_x)+e!RI7X3&CY$XLFr_U z#xGo9ZD`|xx(Tfm&yHx`f>sUC-y{S#8gv^_z0jTqS|{jDgT4Y{XA`zM!zV@EfnFEd znLykd8??>?I$F>uAYQl~w0OeSQ^L2vpeKNq;2X5o;CYR_sHb%3H1leoG|I0^(lepmi?L3qs>=Q^quCjWM*J0?bp^BFg!)S3eod#;nu~wE zYfq}R=}HgVD#c+wL-z#nY|_u>hCXfJve;=<+EdX-QI zK^!~WCP{W9kS6zhAWd%SS^9RXdAq~BMS|vZj~E*Ry+@3`$&K&`TcWuuG$(V*(&1SS znGy|nC7(FProh&ae#{Li6UJ)ehJ&8-2Yj2X-;OJ*4qrT8sc6;*Q|*mMhZpaf{aI?) zs!t0N>u`GIcy0evIG4I0IcX>E92jReo^yw031z#xE+XSIc(OFjVRI-xly#&-l{Gfm zPlAclw5sx)uyq~qKDvU1_aVhn^*a;m5w5Y0+Fxa*OImPDwodoW%p(}!Yuw?epc)lbB?0BFfr41Siq;+>B zkn)WIdR6$w8@`!9Yw-lbePbb3zK;yw zzkoIh-xoky>|24f*oP6y8}KVEeUTy#eYBt8;D%)}Y+VVY?LTi;e?@4EfSwif7|;qq zJX>3l9*|Y&xrYp=vg1;+{lF<||Cjs^C4lt|*R3^d$fzS@q(za32}1H|>Q$^C3!!npsf z;r-aF={eAZ5E+}CpV~a&+t8DpPalJ(YZY2i(O$I#Q;*cLH2WVY;y5hM39%NR#LU9H z_!B7q5)7l9^hbfpc7PniItX#mj64_U5PX9&0)0m^@*@1!3}<_zd~DN{ZywOQ!q)(# zeD?rxJQ}wCXwYAPRtc>UPgNT}1=244KR_&EVR1qIppv3~oD4Ks{5S zi`Wvt1yG}117D}!OE&OG%Oa5)nr^7TkI`dzIf+~lxtxjDwwwuT7raQKexNmHFvk(( zO*POPw3TB5>z$#RJu=JhJ~}0i2i9R6!6@2J6gt8fi!r6I>Efih9V^^`C~+U2Xu{FX z(mHC~C6ptMchFr(^Z?x0k|ApFF&FddTpP|naJbW84+YGCmMu``o` zX@C^4Qc{x9RE64>Uk92QKxtp+u@9K4eiLHm8;3}XHW8zd0k2A$v-5Xav9UjjyGKsk z@JVhyKtNxeXngF1py|-(R-pIs4O_o6=> zgl@$zv{yhnKp6w{sJy)jh{K<-RSvWh-=H-cPgUI)105r8d91N2><<~V4CrBTr4{Hp zprFN5%~jel zKq@f@NF@?LRU&aKkV??#q!NEN2(2U3Ks0uR<0qhh3F>ura=5Y6uGu%Nyb0Gb4nr*n zHLL^$_r>MaI~V4K7QF$|-f|t~h;809u&{UKl{?NolT@d6;~o_`bYF|VqiONf>{cxn zCA-nYCe}tmy*7t>HKNo{Y7O;*QLRf!^MG&hZyfahIWusc_^PcPa1oqbkucy*G@BQv z^AAt71VT?1q*mcLQf73m1?qAeJutb!bcx&%mRCI#GGY%ZtPp0ke}ad>jQ$EqJnu-3*AKw9dk zE}kGIdm^5^{48kw6i7?m%|M^y8@6b5-y-ND>LG(Z08&@B1F0*Y1I-jyz5>$lb--`s>kOoPU4W{D?=U=- zPijhMC<9$HuCRqtw(>{MYREWh-Z`uUhanh_O-vPld{C%+u&Oj7VZ7?Wlc2~Ixp}w= zsz2g)d&6438%!gJSVQ=}bqvI$c=4nMc`YL9+unF=GbD;m>WphhrSg z#1nyz!xxP!p3{+-w1~R=Ga%(-kv>lN<^gE~-T;(Q1Y`H( zy)!Suxd|LIivrV~=9Fagab!g@dUvwqj^wy|l9QG|W$g@IA;{qp+Fe^OojcS~V1Z1l zj|sX{>|_rux-F2sJaM4u(G74&uq!n&S1IjDCS=afg&Mv)#1Uw=+TaU)qWLzbfCG?A z?f^JqOjREKXxYZq9V;XR!q^RAgZ954vY(OVgo(!Q2fGwrPO1*keiD5sU9uQG>w+;f zoIm>FiKja~>|*-(koeekDx;r_E=@QgwlF>(%8xAdneSbS$ zX^TH9|I^V&l^`W{^bp~EfE;k5%66YO=|rEkE&5euRb?uYjy~jor3zqAOVls1Vh1B` zcD|%amN0^OiTZo2*lEnMuIcCsWuM>_9avgc;7YIPinjPYRUMs_cHHb{1d!`&z}l5= zQ=)D{uyZR>S_bF-zo#qHaG|<#IgmCabwv0EMI#-8G87bZyEY_gyirZ?w?=~cv`YLL zh`n*p`YVvz_^HIJplQSTwn00AKEgL_b%dOv6M!@<{fY24Xq^V6&1x}_y3D3gU8Y8; zI{H)~)zNtuO#!}PYYv|K3tEULZ8SLd97z561CjXg2v7=NgdR`T6rKfAP2m%uZ$&nM zI0H6p;G15@?A?yl7|} zfz;oB0dYDfY_$Nb5ZUhx>Wt=^W2vykLqoOG;>`-0&Lu#aR+pQ%R|9Eo@unqBKaMpt z{W#XRUc$m7J~e;u1yYFz$tQ3BLIi(<77t%(5ZW_9D)BOqO1w=zdCN%?mDmP!v(R<` zsl<0cDiO+e5cIWFv{#~e2sE@Gv95*PsNGp&1;Dd#Sg*w9>7!7xJ0jHlU(!|P@p;LV zJvkA&WhQ=Lh(5RxEcK3AJ+z3Y4`*vRL@#@a%{mT;AGIn`AHl^(-7*AA_a(?KKk>wqgeg&vyK@(DFg2L??E5y5tpf6r0Ad zFLGMQaMK}F3wgVqb3+Uqf?g3$M;l?4;BAr{0m5i=rLWkzRha|Q; zEU?4wFC5^+b?dfou(z@tAjjfca0QWbS2?r6yx5G(=xp|i#fY!Nlvq0=)e1hP*(@FG zE72KQ=UP&^_Pp5+UN5+P3iN)voS*akgc8Kqutm3^^ zFT4AO`Mv#gI|e^e0o_|SL&yPbY>ogr0AF2lrE}~j;I}q56M%HEIRi*%xNinh*~LIA z%i->FG_^sw{6J-&F?<^gA4d~9XnqSw`8c{z_gW3#e}Fji9h6R1JEwzC5VUhT4oExC zoF9(Vs?vULXuE;vPuSWI?z3ADTSo&at(Tz<0-}#$D{9b{Ko5vS zC6G#7Z_r|(@8s=ofkGn7nQ=wDk(??<*m~QbZ9s<#AI)is@=!R{l>>oxi$qt01_5;x z37%@LZ$|=YcSh5hqRBwti)@{tan4@fHW;+fpu2$PiNq3vRsb=r!`3Pwb?+r0b>%IC zJ^|7k`~pZz1W&BG46zDY?65SaIp42*U4WGDFrXs%5wwm1Qa&+16pS5@hPSIb=a8Dz z%^APV9h!o#Es} zYaqke@D|==t5NnWWTHNdK^041RlfRHm5-@b=b~ho^qjU84WivrLA^)QnAlTLA7aaD zhFeVsxIgj}^{o)?sw~y?OS6JK<8*EG!>1a16 z@&!icZ${qlE1G)>V#g=;6vmEji+6`n1kKpk3AoX-5RE5VGxf6RsC~SIF*DVYH4LeB zPFmW-iK+Vvh|TkV)6jPz;;w4`bc22lq-FIEpzinvtzYA*D*gWeX<2<5=m6w?SY~Mz zy$PDS$96~&m3VDW_5f+S!Dv6d;VACT6sGYmQxNL{(epo!*fnL)I*XqahR(J<4t zG8^BZsGb_;W%zwNLJ_v!0Q#k%4}sKQnh+KJ8%W*DM@?4u_6NEi^q|GNE7ZMXfRvBz zr}CW)bdB(xV))K8e4OS}K2A*32_Gi`)jd&XyC<6a{Wx_N&4r`R!raLD3sq-1&*)cY zuK?Akv%F^^QQs{uLnEC7Qr2=v6C>wIv0?`r>7GoD)Ltcs1kJXtukiVNyhzmdvT%Dc zd1B!T{*&qo#T3-vz*A08KmkEpM|HDR)J?}S>ZqHJ(Nfe+*k!5CHp`4c7IjvaayuF; z^wU;c$h$ZFv;`Lz{x|w*2jrpXr|i5CcIcjC9WSAKIuLE+ZZzanywfEcp{a_lIbL-$ z#NE-wjgFP7=aquAA1{H!Xn7FXF5p5-?lfYZo3OIQ{Gtys!?F!dZ{Dl(w&s?Ki}T;c zqRf|=YX!@1>M#JaBpCdlh3gKb7|yoEp_p!Ji*FnQV{qs0_D%F$7H?-^uZfdkSIL}3 z%&M+=II^m1!l6@zbj_=-bwfhruCC1iw^q&tKq`A1kg8$70@6zNgyDO}@T~+=HLMXx z)vz~!R1IqaQZG?O*MN7Z&iVM8%UeJHlTY&q5#!Eo1l|` zl#k(6KCXIDzUhXKwN=%ohk@=FSN;n0y&zf(G!0${(lpovqzVdGYG@kJf}nhyvsAus zfr=2ap!L1sLj!eF^GY~Pk6imS??CI0>f6;`h=3_%?F2-&CzcE8g4>ip-kOP7FoHwG)4gH(47rpB?Zy z&ZhRe4267&0xWOP|u{BHX<7LYe}7e`>%R8ISs%_qM^t9m>ws~%8iR|qlP z!1W*axy=443lL!0bwm=+am9xfyD0G-Ijz`viRZ{;#m=xT&{7R`1ti2R7 zxY2od$YOk5goo_H@jSq2o`R`+nTwoSD@3_XJjdlOR;YodKs#bTG+XPM)`>6^uvij} zKORp;7dR=HjNY1-B}JptvOs6FV|s6ks{lHwbORU2_!%5Wz`*q}eui7cmsFbKXQa8l zCM64YLZjqI@oS+`Ut(t6@k-!=q%0K?Ng>>tlr=a)u#Nu>TqD%p{-0Po%pp~ne73h& z2>~80=PDFT1vnj*p>vfF1M;YNW61Q!B`4ORC@M#eGX}6cWt%ZrJX*X-M;AEYRvSp% z9n3&Em?2Tj>xGxIF~WT2A;?T*u2UE}PZ~@umvvugd8pm8rj9UE2kGcC+rjAL3bZ~; zaQ0n2(ThGVRlv+lIKHM?1v04KDvmnSD-NWCiA4s{&aVC5vp@y-2CY?i>R^WpQMG?$pL{&}!m!2RqW1k9 z*l6F+{+Ia^w(`NFh{g{^T%o9lJ}Kg0M-c}$1^9+74r~-%ZBQIY?eqzQIP0LaKL9Zl zVQaZTYYo~Cq;dNmr~rIHIhQzvUqOqShUzt32cde+1wh}5dt57}=sJV$1`5NZffNE# zmp1^Z%dY_~6qnxtQkOpjQkS_p@*8oP^Ad`Ja7)oofOMwiB7#|Tq6=60No+9kAZYXhE`CWk)hE>XJlx!`IGR`RP&g~b_RM}XvY}Z z2|%223R>4c}}aow;cMS|P41H0Uma9x&)J zgJ|YgiFbhhC9=DK-VtP>PgJzOL17>*Ima8+&!CY&--_%MgKjkFw?LZvj{>R7%ME(o zp!EiAH0WJ}J~F7upq&N%mAC^)B_1{idhi(C7VS&{&E5CT3fvKlb(;~# zRQ*|&CFUIOU~huG=s?!(V9|jq^W^9XrW5Be@=$YJ10G&bJ03kQHPEuzu(uPD}zv|&TR!4&MlMYVv*dH!?`gs zj{s{^yPOO9mBR}Y>%#m|kXRK?e3lnq>9@|ogqK>c%ajg;XPWSb0d>X~Hc&iu0y_f4 zCKDTnfs}73kn)WH(rN1w!#5e|ZhXU5HJ&PQEs#pg26|bt^d=y6ncTFydYNk zzX@Vj!2UlhyCU>0UDe9g#~`uRcE^~eTjm|wxeRMjbnKl7E91vIWnydAF$!}SBP%Qw zGdEMu&AMD_q70oUx?^X1&&gP03@v~$)Llz97!7eYA1A9rFw(*xyeE<&alj8qv{Irq zQ{r8u)xP|wFYFLnuoz4*CIkH(2!lw>c*3FYJ7#!Io_#n3yR&ORhVhst=J-jel5i?s zIM&&G18qFHpV?s}D?#kIIw~y{{8lqzhj}{uXpwqioWg{hGu6h;7N}@g39mf*dpmwN z+jVOMrW#=+f%EC;7U;ifzot?QqskUx0ujb+t+<$*giYBdZ*w3H7{L79BM(1(wnM2Z za1i6O*O@zG7&j&*9&jMeXBfhJXH5~OOlDm%YNy)djIvgU>Y^3zNFeH5*kFq1Q^>cV z7(BHty}DAl2y}Hi(s2!}21KhK1V2vl5oq zfz*#3hHsbQ+YR)B@a5sDd`AJPdnW;@du#+&;~TUF;Hi9NK+0DOqz+t#GWGVW>NGfgPt^qlYN%B^0J}*14z?_Rwhjs>Vq$W zFDPr|HC@EEv<&k1W02k$FZ3EN@8K&og57(qw~-#7BsvW?`Id*(4vo^{bXw; z+Aa5556@|;4b7+0)vzHnzaIa`W5ujJj!)}QQf<#wc^plpqf6~QDmoB$W`0ujOH=Dp z@rP)A#zOP)6UM?SAa#tC@e^o1kj*(lOV!WAKsXi0xSUoAOz|CQo0f0}1IE_EBt8H9 zri0c;A7wb#N9Xe&dSvKHNSF7~(MFfy)p^OF4AGLwhdIz&kDux!acT39L6LM(2oV`@pcTyE2*xK5%uRRFgpmi~xy1<3K zuC}(NKsu_q9Y}kPzW_y0s=_k1{x^Pwtq<{3)C%-Bq0!30emN{IbVM^0w9Wx-kI+UN zGzCaU_|*n+-Q#n@_qajpfL;|E*BmHfpT|*2*lIP1eV%RvE&_T*-kxn}rG{1qbThtK z7mMc#K?yuL(-XEhKT0hiEJrKo5fe{?rY^4rI$UD39q1|H<4!M~W9b2;X>|dRE?gOJ z&{QC55EzIUbPdoma49HPq;nT$*y7?7mHi{o^YWIfC9e@#?#}8ed~X7&dtU){6xtp` z>x52Ad*VY3>IU?^xY7$q2P`~JLeZH94K;|zN$A_l3@Qaum#Yj~1Vp<}(0T~yE%Aeg zNURmwa-bK4whCyDpqGHuW!fh+RP3P@@#qLGe|vzm#1^23(-M0iP!ZxAv=&BIVVw-s1lbd+$>>&TM3T|X@*ks@@z5tW$`3T{o$Z|zRryX^p6`rS zWDckW%S*B7vnpQ%&@p1DBAdc@3PD=_7W-Y-7mxxRi9mx8lB`v1#j#E{uZ(^$^XtgU zG_XpiCSk`=zf^p8;)}fav#I*cT-IxajvXTEh$8`AB;Mkzgv3Azmh=he7Fxyq39#bE|+1x40M55#QYwsaVq|0C(4dAr^{YQqVQSp7N%p79vC z?W56WZn*@(cotomL|((g1rTfd@#L^u;S4?9gi}IN_1jYM?J^q$pC^nTTY;DUwGdT# zjF?6v)6LeWn1V$wC+n9zk794FD8S>bPjL*2-8G8xWX6@oK##OX1Q8@NiZi1=Xcyca zovg&cN0{!=6&hJOGbQp+>_RfU1cT!kV-1ZJME$t9la|ZKe$Izmmqf^dSzgTUCf<@a4nt%?) zH)vggr}l6YfV91c11aBJAmy76q+`vb;k(!HJ!tr-dFxn{eWJR@G30D~!`7R4el6%d zJa-EE7oG=73;mTrZ0WS$VB4*TExRI)Cbe}RXwdmUH;Q}X3@SHoIj&R*TC%mb{k=h) z1EAkw8JQ~j5VR+S_N76z{BukjwvI8V28gi_TO8@pZXcB6kZM5-%CSUh$7f&4l@4J! zVrh{`d;;3xLgVfO4c~4c?LpYTDq^pys5j6@;0Rjh18H9}3WzQRtxJK}_Xe%$Kuv-; z8}Pq^eg^cW_{(Ma+L!#!phpZ^26UZ-{tX~42i#wv<$(JO*bD?McYlGH^E$(vSNLPi zdF&c&d*1u;6CB&g&};?RHm7FTP>xV?(13rX_>5KuaX;IZAUhie7uwC<-R<_{a^A z;I>PQ+Sp=abxR@E#nqo^nlLK5*-F40 z<22Qx)(Or&%#v`?*MWG;c=j}#v6`=F)#$N$pbmPT#M(g@7>q3C)1-Xb(M zgo^mog87L-EZPU4*$T=uCcCt-^#t5k#Nw!-;t)zhwHb)EuAub~APv+x>OwQ`LWDbo4aFU*j&Y_+O>Ci9V~F**xG7%BLw=&i zgOz#xuyuoM zay)Tk=q|M9E0FToIvE?~6!QU6%y9^+j%0>)H^(eWvdE)d(Z>$<6;|wmRGOz6VNZK9 zuW7{piF0ObgX)!znl(y}SK8`WUv@@$3-^F2wvs&{06o3F-l) zcE5o@jA_^!2BbE*G9b0~(Xuxe-=M|$s%wOgmOZuhEdpX1hUMtmHG;SiZH1u64B{xp z?p}d{5y(f%2>PG`Cc@@`3EPK2$?@K#X`5OXYS zH2|>+V^6z5j{|W{RM2`Jh~p;Ai2-Rj;1)8?!GqD~X$~F^loGz~K$?SGgQOB8fK-B3 zJe8ORv`{4KfK*~G&}s<_kB6Nj=nf!Ft9yYo^tAS=%TEBQdw&Ds_P?O@ERdG*SAet( z(Z;8!8AxUS4WzPdK+MIUm5)YCWe)*T2^oX&q^g4PY`8fbmP-Xf^UngLZG)B>?o!ne z5Orhc$bRiQ(P$^?cjHvJ?T8Y#k^!-kgUWfvIN9Pca$L(9CEF*2MwV=^${%AZ-TC%R ziF9%DNVUj6#~LQxF`bk-fs9w!s_N|DwU>$8#yo_3yfXq5vkPW9oXv6LVH#6?-kyTN zN?9%oDA1m6EP5w>jrO8Vd^GQjB9C^T3u?rE=(K}_5fp||9uivguU?iT_s)VX9O7DU zxS)-|*#>bqwh7;`m_Tk8bUU62LH8NNL73838pP`SF}`6L>bt|SW}$tKXN#Z?$YP~+ z22$EFhIS&5R@yUwv{-R47=bL#$p+#Ce9$Vv^GJO4+)(A4hTqC}HBc$OL0RIdd?<80 z6Bg;8v5KTnH=q1MLgow#VP^hOCS&Tyu4bD+F}DwWx(-lplc23}qci^{Wt-;CwRZW2 ziH!49(Y2w5!zj)BB%lCy0(Od7%h+VR(a!6F_0i1;Fv>kl0O*)oBJsl#_1hyHo94&o z6t9cVwK?p9=B^D&HNvFX&>u+y4Ygq%97#n{U$$caH~)S*iG@A;C%%h>8YJ5X(;Hs0 zfvW5lxolelU?I3l3u$Y9{3b5yj&fjPjYg1CYeK`;I~r9%qW)Pc)G!5Vgsne>7M+&6 z^LC7!rEgGicW^xeN5|S$AU?E-)^D+5MI2Wwd>5}B)iNK6g@r@A=N|8#4P3BeCBg~T z`gh%NK|#~oj>Vi_{0}%V-EbTn=d~Y)Vm4y5yZy_KIadBnWjNF`*h{_P7=v(V5TWuQ zySRXf;c&vna5WX%;cyrw93GA%sygUzgwIU{=VhxSz%+jNGt+ALo(Hf79@Iwj`6 zbrw<60U6B2P9!{0K+JKd_HJ7@cTQb)COcpfcNTuhdavzLy+BQEPEJ~3|G+x1R}9^r z8bF#xP!f{yt+FNQ0VWNr;*p8^%@)S1jcrd^EZ+5vfzYs3nC9WAZ8J&OITPJSpF z@y2xLdqK8_!0W(waH=@EZT9oVc4sX1oGfG7=tVSkdyhjqLXS13R{c8h(XoNmt6DoI z{&_6M2Fa35@%`6F8|iLS;ZqU(OT5%pRI=%DbaSG96Sf_uIt<8bh&INL1_hBB5{NGg)V~6! z5fR2=#g5aFI{t_t7C*L_$Ozq?WXQgXQkyDgpaAX=qOG0C5kOt>)g6evP-!#o=$VQ) z+G)lOx(nzZ`0A;qir9&MBs6j>Is|U1A6yHresl-oya0~4!&5c7Q-M@_y9($tafNdN zDmw>AWfMSb$%Ar6lFD)wyvqIo=xvdG%%D|3X$_U3wE!J}FV1^HE3BrhgMpORABfFG z*y64Mm8G7pE_2>p`O-it%Pqc2<4#3I%MDrs^uD;qodk-$2P%{haEzmfC#-6Gxobe< z+ZX6e@C8LD*Z2+rP2)QfNEHX~F%e4R9D}0kfz;)jfYjxm1D!4|bIx8}z6(fQegH^i zA2nztkfs6mBPe>$yyY$gm1qLeSbl3z9&}?Wt6}RPgN^{&CN%CnP(-a;U3t-<2B-u| zTWHV{AdS&OKpLYz0nyrxgWZ8NMqItGF?tzg`3nyw*C9MN+O8T5n&?Um3m2;}o(ao60*G%C_Q=AOf*(+z3pUSZ8HrE89{m)qv zAUn`Cc|{uXeU9L2!97x-gYJ<)}HTgs&csPV2w(JaT z*t*dmu3J)n*8!=&F9QvSOF_9FLR%Nkvuf)iqx;zXaL3Fj;Am4=UvZ92vScx~)?(ye zn4ENny;nSvtbfQ|%Y#*U&ixJU#_MH$U$kpEtUaqLkoE8~hZW6) z#y#yW3N?#7ZEJC=9*b-TBE0En`(3ZJgJX*^7vaJo%p=N@A*79Cj!%`~9hZ_Fn~E-G z_BfoVX;;v2NC##2q;vw*bGn+K#OzTW|<;`0=c%2Fp#*;jycCY8o)mHj7> z%6T@o!|xy;wk`&`72lvW9#1t-R|2)l+Zd3l zZ8rnaA1v6!lOugB9tB!1h-x%#S7GaEpe8|UfK&;i2Ei@BVQZT~-vS*fwEfVKDB=+X z8mewUyTz3g4LTpFqext0XiQo4gN?GHnLyu*EREwzqv2Z7AAy$0+m%4?3VI3XJwYD; z(IqT}!SfoSv2mO(wEy6#Daq}+nv%VM-V(n4KGj5Bxl`2sq$~G~cOoU{j6~>cG z2)-+*Kh5+f(2|{fqM=1xFRaZ%79U{YqoHSjW7)~~h;s5_ucGcTYzUwlB%m6ql~I>a zx=Si)b<~BHj$R7A3CkKW_V0^X@`kWV0dLN6OvSkUpx8PUej$Y|pkB`_{D!$Q9@S>o7UU~X|5;MNo@ zEUFbF^md1W^`NPZG~$ICmLLQ)Pi#2@_d_iFJv?>hL{l$^9(yVER_L+6!^E=cBUo8B zCdX}>rk6;xol)OBXEa7AMU!^JW|7VxU|%P(PW~6BRu!!-dILJc1sh?k2-I(d{tJim z7vn4v-T;=rxVXM~c4KN1m251Ig;^yvZd2a4g20-KQnbWRId zp@khlz#UYuhCa4hwDV1b>r?fc@N2-E$>%DjmeS%rpY*5aCWR1d0HKNoNW|Laeq>Q zeQ$tW0AaSt7-31&P^Go-!NMbzx)34KX5_^pQjAwbGk0;GJG0I4R< zm88nYu1&kF8iVcx`UqdO?Wik{;kUZ74Cs60YEX6%s4L8Dm7pa^C1}G@i7$Zmh{R4H zmFS4yYA2!XLlLJzRPX1kts>6aYU9f#Wr|9H)Q=h<^@Cj-m;D4~AHDj)4o!D;JPPzQ z{Kg5?K+g+eH>TqQc4LaZ1k!N?W2h(sS9Ko>wq+TuN(9ckcPAw zNJGjQ&{nt}v}hgCkc!QrYoeJ4q1jg*VDykNKKM~{GqA~<8_hqJ#jo0{l(WJ`>k>88=x#_3Vn<+C zmwcx#WnJ$key>2{TWUkWzDP$vumBaldUt?oNvH+O!C zh&-_2&grDE97Yxx%{vD*d#A@?T`UewT4g$LwYXVx#YqV$)-K8PTWAon3S=d6^`;eg zf7)W64frl@3>vwnxFwXn3DnSpZMZ+Q*OpMPO~qf%?TyB++bvi$tJer!o`1^_P;lP$ zoKHi2ws7&yjr(JT&0DxdxG8`UAkL#|#7Y_ntdrHXxR_e*6duM!HEZ-*Q71%)GR-pL z)@}HXnP?KTzeXWKwuUCWiSDe|zeBygy6JoNtf4gP>H(aM>JQM1=omgD@ONJzVxBi8$clvKDZz z#!Fc5@eYSV2*pl^;rWSmg(Thd?>2Zd`!0m+rtcVx`eQ&oYY~L?*22s47o97N@^Kxr^_JOPH-i6dK8#KY$k7z5@!1VR~TqZ(hn$vFV1Pf z^F4$mD91^t`gp0~n{4=|0&$sSP|CIP%{F{LH+(4|?MD^^Dc@4V$LVkN_pd-z+&{xz9icM!y102S$GZdP&~C0Q9n;wLl-^8?-jy`Kchr z;V<%*=d|w-+820oMk8!}gQpH7{sYvEFYZr6pP>T^9z(rSWP1W>==%UsK4=vizM(*0 z32n5Yy$wXyvB(uj{rJ?p-3g=;Tv?-U*%PV1`{z5padnOQE4>VMl>HZ$ZPa;`(dbUK zaO0-6(EKX+Wv>#y3edJbqs*d3c9)8C4kBB7u9H!Y4I4v&m@C5ztM@LGF?`67X+s+9 zT}IcDx1br{Zf4AJMkoy41+m_o{&zj+hX1`gqZ!>Pd0+hf>{sQS+1>Cyg)u_3Ij|>CvMpH;TX}1;WOwnuXWzGj z>suHOE>Q3ULj1=;v^TN}dfpCO2TiZeE0CC675#Kx}Y5!v>CQ)?xY;F>_$IM&_StKx_zGmCd%L^vvM&1n zftlUI5CEH^B^rTL;%y+6_!vkf7;&zU42r=?B??eFb78^+(PSej5$vv1yrij=OPdYqq9M=N9$MFSEt#$-Q&hh9$=k61JK49s(wUbg{Y)jo4PpkRDC0KUc7XSQ1}JOqbRvk z1R&Ynkwkhl9ptkZ!`!}n{$_dh^Xt+9dE@KJNH8(G80!N`Hy$Qr(nfYi{{WYD)jq=)6`NOgsCE*g3c z5;%tul>1UN^z3|8f`bv2xWq_sFmi}Ua4@10*8;I{g{_1^oG)Z&7`A?G(1SqgGVK#; z5aZG%4f96B$8{XaN9AAnXslAc1K_*5d?e62;>QUFaRY+V1{*XSNaMkQhsJyy&|&xn ztt;@Ek_nYgzE=$C@H*hy(?4ecEuZqo?MHt6NT$0M;m7xZtSuLN~QFQ=XSX+RpP z^9;Jkpi2$9+8{1ix>a0x2#AYzVc0XYHw@!m*KXAk*h8>-`1@|PUnLi?% zr8sl)hnM8q?IPRjR@|Ae+c_otl+Hgb z^~U-r7qeSM8`JscB*#Gu-kEx@2(uip##I%BM!-NG-92C>6#EgIi(V`KGBoP7qQ3_= z6#qLk>hJ0NgGbvNTU&IN1YNE(n>2(CDFRc4)#@;=wO}v7ZhdFEL!Roj?y89rR}TEO z>~;k@9^asKG@cWY(?R*I=GC(e-w4B30;KBUB|yq|HIUAV)&t##Z&>cWIsj!RD97I_ zqET5(Nj`kqBz!Dgp9%EjS~B^FHx3xjzQk8Np0mZ#Or8_;xQ@Zy$uSSjF`N znxH*nAa+hkC#aS@WYbmHo`W;l)FgA+vh+YYmUpFY*|!viEe$K@c6TCm56beG zE{X6AvO=?}99nK{-$UyxH!Y($mvob5DXVG=@Z&%x63aL)*^5SMJ7Yua?%Lpb>N(a# zXCCDs{BVm7MYQO=1}-f++U&8w*v&kU@^SV=?POO1Dc>B!#}!G+cN@@9aqm}#??E6P zak1f4msbO+1l9F7M1qS2)a8#2-{*#pjg?x~Xirl(fq%QXXQkMq+{T<(+ zH3(0YmhupJ2&wkCSq=Vg+3-SJx!??NC=vM4BVbH5*5UmAd2?N z{1L%G>PK7?%94gbrgswPpV_J`CyQ9cI%^dR-SRg22@npY1EIbzg>G330;-zsI%jdi z>n-u|4Gb|rxa1P1WV|cG*$o$) z){X>{?u?eJZuW(lxMnhcf*$=LMX41@c9qjyU6d_++L9uY*F5X+Wt~@&R@QBAb&b6? zz4l0mXJD!pk5(1Ky#eoYkNSH|!efV_G3JRxxrUtS<3X%rE{hw4jJ4vh|qhugV|oBsq7c zAjzEuKD1~U8Xs|WuTJkc4lK?g;4g?LNI(0ktyIf^_mlDMOh~3ZY>Vl9_H0&SWqxwf zMlAh9q_Lm{8%{91To0Cc=Zv-+9RwRD*tSr^PeEo9aDqsa&uNypYNT^w5SooP3=oUK z$2AAYCrvk+Bk@BMD_xhzo%y>$Y3iG@JOY8~pU%IT>s0cO2&@+fyXIz|Z=wT169$f9 z5Y)t3yf6Jv_(Ah0*c^}6@`rlF{6~T#N4r9I!+oQWlZ!`rl$V|T1F`6|rLCW4Npz?Yb2@y)yDLbQ=%?7_8^2oo@R0w3~41(YJOd#u*SEZN@;tF@8f!zH4U z{CU`;vn#Zq5JdnfhqJ>F9NdsQG*Ge(jCu92JvSm-SWL=rf>)xxJ7OP6_6yDDYLTjf z32Ki)MbM!%hSav*8wYCf=!dpBGqDH*=P*bcg#T=&QNbFM^{?0~Uf$$sX@v)+^ACX` zH+@Y$%-iRMdSPnv@|V5}P2y=VjkgvQ|9$p*sgh;s{50hQo70^o{IDMfRwZV>g6oVM z7#~p=-o3Wte}&u^1hy!g5jqvPxSEv;)b28KvWJ9H&Psn8?-dsd%fjFOGtZ z`OJKtZ1)9}Y~u&V@NDJnCN8w-o$vO3MA=D51?~3+03CrZR0=#fsTH&alZH$TTR#O- zzADo24O$%Wb8}5lCaIL~4$yP~#UnrkNN8-m22$B|Kq~t(kglHOViT3+NM8AN8ouv< zbfqL`AZqao({VsCps;l?kotBi5GRd-*116ck+&m(t`!N6-__-5KpKLpfrg00EYk1| zTl4W$zJ;WT?Cn4tUk9zbNy9g6J%{Jt#1A$@iv9((M`$fT{}jaSNFNH~_RxC;O#pgI zP>n%6B7jqdxB(JRj^Tq=8c&VyuYfeZzXQ^7#|uCjx7UF*%5Q3m}C`M-c2_LWWP@S!} zLA=0YwS<(Hb*RL2AkBq1kmdp}>!6J$Xz{WREjiHq(%5**4!tmA7k8?lZB~9_Lx(YT zE#82$n=yI{jaW5l%^~pWXX4%Qc*gO?mhigLndOn{npmW)d|G97d6_k<^1A+!((1AZ zz$x-(N=>Z7yuP4%T1}*~I?|)=Omal(DsL#Siq;$rtiqgo8((BucRo6tO*377>omo1ouD8gRmCuS*)J5XegB{UK=AE zq>MeYr%Ag+(zJ0>Ei>YhUX?RTr!!${s!xnXDoU>@H?i`DglQ-dl%z(&-q^o)N{CekqrGk`9q4=@9L>FGiTKa(||}#ZDgP)8=S2@E}xStX47c0jyuE2|Nz z$}%MD%vrJPXO&yxaYiPQeeVwG8^@7ZGiqYuNM&`bwz9gea;jzu3N6x$j!N0HyhYIo z&>-?#n=Xa_IssE@XyO`HYjVt*k4LRF)x=DyNpt z@Rk{yS+nuXNKHI8D;|q54t0@hD`(7zOev2{FRw1IEsd3zb+Y=#X3pwsycNIU&sEcF zORw)yW>v>$PARWtWfG6;EIJ!O+FGL-kjOBp+U3<#%OfKy>tZz!n`u#Y-|qIARXtr3 zqg|Hp=YUhBNJ#o*d0l?3yxvQ=Yo|{^uxpW&(`(DitF0+B;^lh_i||TNdcre_S%!a3 zc9Nv|3nr~?lBMl~nMtg>PTHZm>!ox^l|MVu-*O6+6sBsnc(KUL(z0@^XIdRgWAHL zr7gT<9GTdZvPw!h{6Q9{MR2o9b3puaauSEum@%dcM1gNZDYMx*jNx^9<3yNlH{W0&nTT$)7f zDH8L{O5v1#bfB|lR8~)qOhb!bQ)~6KYl4$X@KLLVLqMTNV^vurE}}3^?ANDXq)(qd zk^X)9O|t6ZQ`)&`lJ{)nxHX})wwk`#YDsluaHK~W)dD*_#gV%5Sd1L#W|d9Lj9?F>kvN40PxVu`&lRO&sy4$tr)IRn zP8c$EGA-?ul2ypMYbz>a<>EBd$_$t70^{$RncuPU>!2|?Wt_F9ta4^Kl!cmVw^wH` z+^*dusV^Uhpf!RmZk;8qs5dD@GBeCtBYI3j7tmu`F+v~(PC`-}N9eQip4FarTIq~B zFjrqEwW4>V`g$9v^VjyR;O~KbPC?N^2CMD{pv{vfQ!_mro1yog8M#&+gG1ALM=IPO z-avYt*O3D?9(GsdwW5z2HHGD(T{@Cv($SlCnXe>i?MhkJsSN4O2(s?jCX#&y2sj8{kLVRZF#2#gn zI$2Y$kCkWWN$yXl8Y@LSbDMOlXIc3SyY2&N?RO+bmR|$KwMW^RXxPAn>_&qsTne?} z1EvzuK3^UESehblvB0a^+VUClW~e~z>ow6LrLo8i`ivnb2Bx(&@#z&2^diD|RlB^f zP_od!I$8piysUm*#WoR|G(R;5C(eYe`fNa~o0)gcv}u39e}1;w|6BNf2q`d`4UvCV z#Qxu1|8K3)|3enpzxjXOP%CfF`R9%MvZ?n~T~-cZIq6ebwtRAa9_|sh0@jde<)yJc z{rcUOXU$VepR(HWsj+LyEqq|#z>R8s2|b@aW#v=i)4Pu)u>-z=yt_T``J+#5S!t|P z$*|Ob=Si~S^Fp`ZwkDwlSa#GHvjKr_*9tsVM13eUmfPAjhTKu93)}=J# z*E|n}3w0>z@|*+8;~omlfSjFmd1&UNnb)PP1%*okTnZQKL_8EO&>7^RoDT}uKDtun zpm2i1rKCWKc_@#ALIak|!}|vw@=&7fxfztj9?DWsmKaJOcGKNwRwF1gP9h z@w;>T_Oy@C*gd)1OX$*Uy8f!kt+N4-(jV z?SK()`gs`RKwcNbi#%se`15Ig9$G^Kc~2l~*-AXOB|6E^6BZt(A(3@KX_k0#t_k@L zztA{au$g}6cLz}g&siuNC^%Lky7eD^9;RF%ZztS23#h}d&)VhZ=_)*D+u@l$>A*#P z9_CUY?>M9nUEKe{tFy%GNZ~mO;TaD!^Jh~|_PcYG@HD_L`g&1pM%2&KO?dboY}VV| z24+bgme4@n_wbAPUUm5stNiX9BRpIVcpT96FHWE3=Q&n*HXwb@13L7J!|VM#5#c!i z<)<&utra6z_<86-!19!_&yd0G<2r zx7+BwdDZe{Cg@=neLqLD~`;G;Eo)d-V7bwq{ z0WIp&k|jK>4S~D?cp|B-t|xzo4Rl2Oyo#9clW#?AT9Zv7Rk=DK7oATB>#Aw9U@MJH zBV~Uhb)1KX?}pfvUWVsFACE3FB)8*Nnc;E5bDfW}z(@I=kHU!@{W$Kd@=;#(Q8xQ1 z+k6z>;_h`hfYkR=!ahn5ALTS3Ww?(r!AIe(?)-E!smj~k`8nE95;o-+L%GwYU`ou+ z(}M#GY)YY_#B9nDhO*G6z(#84*F!et07F@8Qw}$j4{b_kL;2dK zScVd!q9Gs0<)eI*UOvicKFTFN%2htfOdsV&A7z1$@*5xJAs^)_AEnVp`M^hM@=Qp7V||nXKFWDM%B4Qa3?F5_k8-b%@@F4qm5=h4kMe#jE_>}qYU;@M))XWeUx$^|Rv+a6D$t(v>FJ}K>Z1(vQ7-jSDm)aHx=YGS z?Skm!#kC$D24lXDa=VZ6fRFODkMf$2@}ZCNg^$waql7pFmyZ+XqkNPTeU$z_$`G4U z0DS|)D10urDTf)#&wNq~e3Yf2II4?|LEbk!7Br$v`{7COC6LFF7C&=#+%<$8`f0YM z$m5mz2`GU)jxPCm`J}sUa;3V`*nkgtyi!G=1oAj;<>#51N5AGuU202_$1BwvltA9; z6v1co?Jr&BO5I^gk;f}_GAMz(;S|B=4+rgd!ONbFJYFf7s4}F!Y?#^0m3rBhB9B*!Wy$sH z!%y>WccpgOQsnVU4H7AqYJSouemu&R>Mo`(*r4&oD|H4afjrw$>!OO4>ac}MakK0jG?af9nuA6tq%Ua6s=xKf9=KJv9IRc=d>$162Vq?{0bH{^-guGBrY z6nVT-QISI7lh6Iu=g+%R>uf3VKx#@|oy}&k{S4$eeThTW|9QweeuT%ZA!kHOT&Z8#QsnVU zT_{pc%eMa6Iq$ksf3u~?V`nxAb0q{FpJW)Twp_ zB9B)J(SVeb%X6Q3>QPs!)|MiVSL$Ms+8~Y(Z;CTo(F2dbOMJ+q{$B`6 zK7RSj*d?I4J@wuDb^56zgPBR&9rAd6AM26&{QP0{uGH^sDe`!wE)}Vx@#JUIMRzT6 zr9QHy$m5k72TCB1q337r>(4B7rH-+i3i5cR#)G1>Z+A?pV zD>cKGB9B+9Ql#u=#hUof&;zd2y|xs2yi!#nbrPQZ)Wy;nY50~cMINsdlpDmWCq?k- z9NvDt>(_y{!bKjh)C^EusSmz9c!?`D%9bLJS8Aq6MeyWj)wdTt;z}*GrO4xzss<&H zXDcYyva0F3T&eGDDe`!wYDDS;JoyQ3|MpB*s=uuSk;f}F3zR^fBlXnQ9bdarvur8y zc%^XxZ{F9T*>`s9mtB$*%A3C8@RkualCM)>aQd6A z^}7f6|HhU2yDdc?uT;H9>it(^+gz!@@py?3dAw3{Kylmof)D%s$(8DBOOeMbHCLp% z;>pjSzga)bmHMeIMINuzJWzDi5CG2gy9Ld&lZL;vrO4xzx(O6l6F&a%bJn|3FW6G# z@k-q+Qg#Dj9r~9mqps9vwiJ21QVEfY;K|P)V~u}vrTWDe`!w8bAr;ok$UUe!u>k&s@KrvZcu5mHIg-Zhk$w{VzwlQs3B89A};!j*d2mLiW=Dg{a)?__|KF!KpSgMNbD!^7pYxpMo`r*ydGAd{CTQ_GSOkG& zWYm=mrRm1+8`^$mp!@NJd7X5s46Le$6@VAd_W#P@qUg zMqSNNT5I`>>3{#g@arpqA{iNV4MT~Bpt5e~Yfl-dQ$;0DGBWB~hJqTg>+^#SLnW-G zVN9S%Mn+u+j?s^M^7P)b4AjpAiezNe^$cajovzjIUy7(}e*LFFk&KM`F*wEu)yn3d zonfFXq5zSMjJkoLw3;aAgX`=D$}UhOBcuL zHrtcaO!e}U0!1=13IziwEx(E<&;E_!*JlDnGBWBWhB^{=x*j>?tf>ZyXu3#7M%@ff zX2v1(64#AoSGO9ddVwMt8TC_ej1XS1IO|LUwML*wMn<7H0kuEwbal4h?J-bm1&U;3 z)Ggo`;|UL*UV+L=OZm42iezNe&lyT9l?R?UKEV`;H~CYNT5hYM*WJRP=MJrbfIgqff^7fl95q&fMaOXNuP&C z4Act(MKUt#*9@iUeBKw=K+m-helAcXBctwQC@nR9{?I{>7^pL+;UzATkx_SnlbNBV z{L){)UTC1&1&U;36ch+3Ej7-0`Y4zyErgE?6v@b_-!K%aRd!8%;D;s~^@Tu@jEwp% zIGGumjr!%*7ftpsU#KU^$f$c5Y7*{ry_TKrHbS^mph!kW{SF+%VoyrkGsi&PE>I*R zqwZy>BXFnddy5Zq8mJEiiezNeec%}OaM#oe)*7gzkTP_UjEwp{IL6r5f9&40%s>SN ziezNe{S2k)M%nsbgbh@iK#`1$dVry{l>hxvKYH9i-7QcgBcmQx_mQ&Noo+ z3lz!7s6T*X^a5^L{?Kv*brLKpT_hu;9sWH)O5*NwHsK>xD+5kJ=twvxqzq|rPGBOI83Y2)QJhFMt3InxTut`Qn{fVJ88)bbr zRA!)F5h#+8QBN?`F}Txp@MC{|-#{Id&$%Qcqn-pOGecAZ%HqZ|OAVA$ph!kWJ;hMj zxYPB{P|trDs8s?*GBRo{IGGt%-04a@ayA01rQuBiwH9w=)F3#9_8!$+XR_Gq1d3#2 z)H;UJ%GXUfN8D`q^|?Ti4EI030HnA$$0c#h-VhA5 zV2m|Xoj{R{jCxu^ZC~@=*9NLhph!kWZIn>wp3#f~r}@<@P$VOxHc6=E4}D-Ng98FZ zGBRqjggW80>8KVozitsIl95r*FqEc0TmLd~r-AyNK#`1$dR9VR`uuSNiezNeRtfco zBTjBKP%(ib85#95Lun}=y<+yO2C7$}NJd7zBB56OZR1=6H6TzVBctH7DGle{dCFf5 z)GY!SzpM7bVqRV7If$p={kSwj@&3aO~@F+ zv{@E;=b)Xo#t@2%OpMT07Bgduv6aC-v{HB0h0Rk^xk@{fFrid0jf6Q)!5FK_Gs5wI_rzIGmrT$3}ZOv#!d^^n2a)WT*pM(jVlw03Qdl6?L(in z*JWdbO87=99PS#!xERSxVq-Yujx}Omsmf-S5Nw|WE?8e*kL^yPt@YhKO)VYud~H{K zM<;D()2-Ckx3qOaq(0i%)l=Wn(NN!vl47tq2nDUJqrHB)wlYjd$*;S`!m;}9c8%iB z^L@h&HJ3qW8H$Rr*jKQq=8Z;X+ZK#cIU< zF|k?EhQbv}eM4Kb3(N0&;5bM(ic?p|O3)oEbauxIGaKd67wc$?^>jfD{*aDqqTal_EIW7 zjAODLJee3bN$Z6ytISMtqxH}%Mp|cnM)b^&tSU1z$;#MMa`{7+CD)}K$@!G7qJrn_RP`j4 z3UVj8>Y_JeRcmH%MpaJi)u_rwi0jt22HRW2YL>J#(^gwp5Q?=iqGS=Rmmzwy=Xv3W^U3m4IPu;>Ay z3bB3kxE!J?%09h>@_J{}K56_V9xF|ckTpG#tb=xN;7};!td0n_nj*zO8ZfrO(XtsYU9H$j zR5&H732@owM}|p8TFq%`>fx3e5B^xo;w9Yh- zl9rs0^~{WQceKW->SY{Sa5jnsD329)hSe9${BsASXY!b~SrPt3croOHj#lm|k2EYc zYZ7RpcqTiDM4(JYD$*XFU^12EabWGs%I+}R*HsIDFxtH=)`aF3HlgJ1N1|9OjzUJ; z;?P?rS; z#$cKO)*q3X=Eov#tHtX;M|U@hst7nOr(#8yL1sp~VT?L>+0h;|`J>&zH(wUIRj5fY?2l`3prNX^WySWmpGoo!LHSbhL=)wq;E%`nxtp!(nF0sUmKM^$~f1nh=(c>8h`*rD>FH5bY0h|5{P&(eQ1I zqgGg1-?${!xC}O}V_8c~Ek>KUwWXo0zPmeCh<5y9wBKR-x?_sHKFpi&HQ0#}MSu-c zjMvl`y@3GY7VKVJgB`8NJH>9Vcd7OHPL~?0^t(e)3O3Cx;s3R_zubO@Cmc#lsFg?&MP zsIoeh1MLV=qqa}AJzqG}6w~p}h#Cn6z12adFBRVKx&=NLl-f(MpW&!DxT@6ZaFyR1 ztahYwLTqAfFX>@nVWt!hMhIN0$K`T*s@zT$3Fo72t;fqPryBCPJRw&kBywx)jCHEj z)gEue@A8qTmYb<`z!g%xuIh-lGL$L`JpWtR=Eum$j&^$)vIWBxnhLoBYQzux}0gTZiRm7}UsrM?mLaO{}5)PSS1D&Y0Fne2E`gS&yS zH{|n$RK5kba2M*?(Pb|wmh{n8t$ICvcLa{7iioC4x>93*IK<3|gIjf1hy4M6D8TZP z$&VKgr|S1b++k<6lX3_uHeQs&&Y-W-6{%)U({A76i3ioN%TeX1^tia1aNXAuYMc^X ziEQwDT!AWw(67S~xNH*62h5ml+aNYLvEja_n>DixvVCRvh*iZX!eu$tMeu?u(X!W3ZCVjg$U?{tL5ixjq- zPtL0%ufyR8N1$ZbvtCN75}(uKsj3dTkc!yJUV2v?cKRY-Cv=qdx0ha_NCdrAerM2$ zx?pV0(F217UTmnHS9N+S9g)f^!~~53C^pv%mT;P>lN7|MLQj2&zDF;;Np?Uq4!vr% z*XwdrBk$ob%#pcdr_2?v>WPGqp&_r?stH?=65&_fepkqga@~!}pVcAVD}_(I_OVZK zhtZ~z5-p?#1C^doz*lLQ!6XwHRI7tQ7!8M4ZKuW{HEe13e#s@L7Y)10N)K9gECt2J z-9kKN3VPJ)P{behM_6-7uj9u`MUU!p2fg7SDr9Vo&a;PhiiKXn2J_hEj}B8+&=o+& zYQ-F*BRw!)%nNp2fGkg~%`E*y|4jtEo|&to#fl1FBS*$%xZ|rsS9a zDk2h!n%<#E#1TLX*Ip_{wV3h5aRhji<_6<$??L^8e1C5iExa?GJl{Rj6)IpOl~@mh=by40~}gYKc*Q z`U|;}g|1DtBj9v-ssk#yH^m)dKh~dNxvihWAg8VyO~HuM;|PX@oe*t!po8`jlzy__ zylgXPsM+3W#Ko<8!(mUQpS5ja$-fgC-JW8s!`?gkCHGWdilkP5K>~G8{u_^J-(omwQ#yMtC`Z0pd}Tm^rFQQ zp@i!mU5iO}JETUufl4HE6_eH6Woe0;h&5-KF+sM8Bp-zjI=tw#I9Y>J_bY8YYU|2i zl`H6QlmBP{Y3=>ueW$rg^|{>Ph*ztnaE8TrN$ybnj$ov!IuKFW=@wK%al8fZl}nLw zseZq|GVBYDB(V6HERyiUeA4_cH%Q&(gbQPS{fq z7grTWmGBX&6qPUAINyMxOXPD``KsMC5|LcDb7}fGW>2cGk-ScKrQZ`24H_mpp2Y~G zJs5F>g3i!5icHnuc#4c}SjdgG3tC>Hn2lR_0;;##>-Kmn!%Q0e3}z9jfNJAc;|!lv ztL~5k-4{2jGodxCzS2r5v*s!K|LBfYIV0{s6~;7Dq-hV$E@O?RZp4)JGmAToK6FH_ z#t^KNIxliwLb7|b!Uj?AIWc4D@ukqQ@QzW@1l(1j2>Jk&7L6-R3DYPy?KKA_ zb3&D3z!|ATx~3Q^7BxW&4KniL#!i3H71mj$Myj0wPsGRS-=tt`7T4@0dS2+ZxGN+6 z%2Zy8@=8UUc5NS>P(IZkiBx$U)qcaAqlQGSsC^xjOa}_GD;NlbF$!#q5YP~gB!wWM zhvP)UI7JtgNf)rY$YpbEN?m?;wI_^`cGlaM#}A4*x2Gyl<%YFQkx!yBAtj^+DC@)V2WE%a@i%&=pch+{i)0bc9X1`J#~G;kD41oc9D0m`lMu2>HqMk>(Rgb{>Eqf>9Rwk(d-5#@I5 zf({ex^o5-v>i(rjCid-_RE5sWp-&>b@}S42g%;dPCX%1NOSA5nBX#z39WOfU4w z&^9s?N!sRedc6T(FgfR$^qAU)v~h(a__h*qrUOkf^{C;(Rgo%}kG>4?LQPrQWG`(( zkI|eTFy2MY^le7e21ZWlu|;Y*y>4ffGvFI#;YQa#JW{5r(&bh|C~(f|Fgki;N$W=l zq44OQqR#PG`@G?RKZQ-^{;&|kB%|SGE~!owp+Kd-(h(ffPfCPjAgY0I6+Q-`L2lTb zHh$O;l4Vpo2b?fZtipUF)EM^&hO4|G^lOshYiHRl54pgwhA>VTs;Wv6O%0Hgy(KPh zq&naVvX2p7o`q5pMAT4~*H`86k2k)^h9yyxHOt8tg4uRqPz|m06j7k0A0y#0<`#-L zeJB@vz=RG*GSyOaLQ<-NZ6qGjKkRjSd^8GyI*v-+s2W^~B--y0m(LlhX7*zoNtA{V zh8IzLVW6LmoEz2N<3*!{4-%t3qUIXSq(P%Rpob3CytgWVAt#^8PFoWGB@cbM)XIS0 zT?M6=1XI<@7#r|-Dp9S|5GI}R#D~3j4V&A7oR&_ zFX=m~0+-W=G3Hc}kn|0S770{&Le*Xs@uH96#()L01|_2g97C!v90NSB97_9#`Fa?aRJj7np=C~-86d;(=DQ{YQDI%=b~s?Q9)rT=4$cxMX@p_p+7fs zfbl%~eYBJ=<9$r?Vw5|=A@Np|FHU~u9whN`N}K62@P(Qa?5)8sZ8nF*;FmR<0cL(m z`64;K#WQBa@(XZaoJg<6{DOj#=EBBULvuk%NpYcaR$*Duj6CBiC@m^3%`eF>EHijS z!3`u^US4rYen~ldwdlY=#t)SpN3}D0H6O-8a@mkeOjMNXu@sOlti@FFawCgI%h7_L z^ROav3YM4AWx+3%Tn*y42r>_fm4DVTwCMEgJVp5wKf1>9 z_fWWZ#)(*~$E_c`%a;HM>CCGenGM77K47nR1_k&Y#Y|zy4 zJQ{4yoe% z54g9c7CJqL%Z(LZlADEvf#;n+zFZFSO6Pva6)eT^YRkCXSoUB6(h`s3UYr)LyqG6TpDszk8Vptj`Z@cX~vPO}TT^l=Gx1 z7fe&GHch#@H05Gx%C)5_7f(~JH%+-UY03?xDR)Dfa<`-@cSo9Xze`i@p)}>5NK@|V zH054MQ|`}c%DtVY+y`mOeVnG;-_w-)N1Af`#nZHZY04durrdF9%AK5s9JTAtNRmtL z50YF#nsOy+%9W=fmkWQ-O_GbK7z#ZLlQ7!>*b2Zmh3d zKwn@x+Oa%w0X`dGSU$FZ%|7eyj5fy3>}XhuGpx@!RGF+O`?KNBhcN7LIQ*gi!Is9Z zj_!`;p1i3uPs^h z=#p?An;GD*8TCBsy^zN`R=%n+5{oYD_7fMwKYUjeJh^Du9A6<0KHL|}J=wa^d9~b4 z!NVgDnif`FXcUh5BI2WiAVaei$8jGp;l3=ZJ0bZ?o{aK$?mP?|(e?&W;R_hTMLm6W zPek}w90(};$=EC&GGB*lVbQ%96&63X7)TBaa+lKI97dMmEaXY)UlYZWSGJK3Fe1Fn zKXPW2e{2yrxh>>$XCWu)k;gu^11cH9WrdQb?VdB^WXT~ zI`75LtP9qEW}Ua;Gwa-SpIN65ThAY~PJIE~&DQfb;>GiL@ho1vA-G^YhqoW$|8Bhc zoAvS=5tKx&ZDh&~6euK4e+J~A?w?S!w*PzeERx_IJ?go&w#7o98d1{ol8FMcgfL9GnNp=ZaazU+mOS2uAl!1QdKd@9+gTK z?=?BAwkIk%BVRP~a}}JkD3^e`gi${RMNo_K9H@5~bsFw3;>n`?6x3Ucx&ssq&sdb- zfFdhxQSJjpD4Rlh#pSl@a<75qLohRjkptA9^D39RIlky2rJjtn0du(ggBF5m2 zD%6SKB%`>mS!-SW4J4>ce@_2V#&_XAi!#a;{+HlUL1|#c63-{oGyb!ZjFO@i*DZv} z0mgbh$`oeojSN2c`$FV2mzlrXnK`V2lp3jVEm_LzE;qVOjUS9*{NF} zLZr`z4q6ndhUp`aMM3jGnZYRfrclhNc2Kp9S_4XD)Gt8IWYn{uK4lb{MbdMNauDuc zGU_CqItvuf=yFh$;uht5piackqPTE3GP>4g7;Gv86HR46QhQ|a$v~3XK92ssXDGJ8et_Ze6&JxyAKw*TiXBWijdv6p88&>ztQ0D4mc%T`_$vnR26~PE4f~6l1-d-iDZQ(@3S08_thG z-HxQSDEs4nH=~Zmog33LK)uCy=ivSZqv$I%&+r&18Y8wSOF>atv?v{*^bG$_hVFbA zy4f&vGtD+`B%V7G&l!nlk2Ys%8MBH1gfYW+M&)|^Z0x+5pD=0wcOGSWJ{>;`o6JDT zV^MCyvmRyHm<1;q_A604$X0%T<8L|86KQx{)1*%k+gIg>cx7u84GT`^7bt)PL z+{9R?LM!JnZN(dC&|KIiG#NBgH5ckgZ3i?M=22;cE^E?co2Ze&^og1{^MtaGa$+89 z>%isr$#wkRBPUTyWZ*wc-k}o=tsCDIErS0mSt2b1wVY8GgCc#gDA$6T%cz?`bu#KM zP-__V0I0=`8Uz(()H9&2U=-;s&yp`e(U%m9vKM!5b}}GiWXX4EG%5g6UJS!2vOZ+{ zkQ2R>Cmza^IOPe_M6Xk{oEQQB3+vQPc%>yfOK0oU*O1U!iXyM5HOJoIzgA(9388xX zL&_Ai`ZR&L%yr}da&tN|^(DMwjV)^1@oeQ;v|uY-2$BoW;KiR!FNMzw0G<0PT8wCE zPA7GFftr1?`_#Vs4ox)rdhTVJ(E#dkM#VvK!_o_C3*%h@idt3{g-Q=iBCsg8f}(a8 zZxlSlsI}nn+KSptgN*k!s3#fqH7M@N1U$dMczHTi0*b4H9n_(awJ2^-RBKq2O56=~ zkeVCgmQZTrQ3<7{32DVs_^&k`&O;iqY($wr6|S|o-l(%dqRwVLUoUA$bh99HA)8ec zV>{r1D+|^q3uW-;33Wck1TUyVlP{|XRg4}45yrI3Eg8W8OS(ExFW_fWI&puN@m7H1 z8FdY)Fys9k6qkDl)K12uXKDaglsEOa)N*@;@iKAeS#~g}lfbtqhk-hsy*&zdBg;nj z^rXgfp3!)wOrmBE6HK+)76UN^2{)NjF~=^_^8K~M`BwGmVsqh18{3r4*QiW(Lcxyri`mx0n1mZ=8IdbFBt z{ri(@)I&G88Z5MigSP&I&{ouX7^%DRa<^|DLdora6co3}EugqwTn36832IGIFB<)D zP#-Yrc2G3E&!YSV6vyrXwTtnnBBx1$7A1r`*8yrM91gxksRPAzpaGPw1AV(Ep-Yi{ z*|$_@TQC1B-eI`MHsJcEZ@AlfIfW%ro0C|V2u_?fXuX1(B?DOp@-(@68NKyP>Ko3m zUP(>ezTUh{>y?F|F6+%@*>U-|a26RxRW*&~%o#YxgV)N^ygAnS&&)v+A1$QmYw?!4 z75$z)8mHegyc2RX7Siw8i=sPXz3MtVCp^Q}`#h5nrfKNC>>;`z^iY31yZM?mUkv<^ z;*t2;TDkFDq6V(W9T^#+QvF4LaL0gW2x9=d@!J_e8+p!o%!`ru&`5muNPK6_?2-6h z#zGg`o7p?uw;_KZD@fr@1b0*nt$GS6<;sljf$#9IV%w^#5}v&y@w^BJ4GnnqauT6V zY{VE&;saedtXKEJouz!3X9-A!fgmY~U9xE3BIoW~2!iDjt6k%c#Lhx3E z^&b3e3bi468AUAw8kn#tRiLQXYh%6Q`xvztJg$FnP=|nLQN9m~Dk_XW;r=|6qwy#% zcOxh+cMB*oF&5>QxO2JtL2)^1FLAlGpmOlDC{N?gXpll z=yC^Ogo(=?0_sy1(!)VhE$f zE^~@73D&DA1;$L_nmJ4JM&f%$;#}Di+iLpjHZw13`aMI8NDRZ}{@xwzVQI!}lm^b< zwsgYm{<@uw71d>yRD+s| zp9SBXP+KCeEJ`gXp8u_&?!nKdT!=f>#Wv+q+#hDt0PeqL)Qvht?sFb>#D2xzK92h@ z7)5nBl_s0wgHJzW)I3m6GKw^xhw4sHJXBmid$E9aACm_27{rsiV5XZMqt2p%(%dl;8AatH*D>HNJY3BUJb*cP8Rc+P@&wh%0Gq zGihvmcYR{xLYA&ZGa-e=WfJ(TLK(1cojnmz&g!*4^~dDepS6YeQTtO1A(fqF?W_N( z+MlYg?^OF=kh=C4AIJW?_5XC#|99-W{%`yLs{W^m-T$}ie;Ql+G1Erszw`S4R#4oQ z-VKU}>RwR1{(lgZZcC{W$`+qEmUrkK-2LDp4WWqt^DttWOruLYYV3Po;uxq~xEWPm zF#8QpcHMg1wy^=8Z46kq{vh~TfZ$o!i1JSubrN_#X4F}rniy39>Rd)uf%*ZXW`d%I z5C7QK&8Vf|Q36?%HK0CWR07ltMzKaYby{=Qd=a0f)v3pzk+B3ayk-?mlN?se&`xFl z@ewS$zjp}ZUehbS?U|~#&@15VoMdcbxSp3%Ug~Ejwh33W*Q|}7+4oIe&uO|7U&7;* zPR!?StQm=0XY(df-v(-JCx*4BEc6x*(|V0riA@5r6iv9jXu#w|xS+U;KqTUOsf9EV z9p?Vp;Wb}eymBDt7K(j;5VJjU61}_8V}9o1n#54^HHkyCF7JS6Mw;!6R|rP=hAS*c37^nUybxlTTnr8@#Hn=_e zAkTJoe+&2itOvbtx8l=P4r^PjQ%vrBP^%ba9)5^x_Ue*}vy*KVGgM-@hNm;xj_iomV9D+4 zeJii$OzjaiCw`)4IX6efa1YIs2^_IB8v|n~^4b^W#5Q#F#6SgxFIe{Ce}XFt`hdLW zr}Y36!M%MOrf>4>K&+I+mj2r9)U9(Mo&#A=5D%S9efVK_zh@^bcA|IZHEh8Csu2h@ z3$5CMSn&Y}D8xwdjm+mn?Y6!Rxrz9ziDwhNTPi+Ftg{AQw1zkK2cNIlL=zr1m-jxO z*aSVb20YJC+iYEZC56L7Gt6kzv0^B0o%T8&p2d(PRdu`0uGkVkX49+Y_&g`H-~!i1FsliQ4T0S;x5ghBB|n zrfCz~tXI;oCDIMuN2CP0mzl3+^bWhwu|(=sykWg^`?q*sx0yztSR$bFpI9%(Mhr_# zjffNQv#<{V?=XsLX0ER&sKO4`fZ|qi5h!k9X;7MD+d*+%C!5T%Yd~$l&!*gf`#p@h z4R;z@;`5leU8Os>tA7H;d4%J5f&1Pd9iEUiZFdU~3 z1k+fD<{BI6cn{+)oH0im>(IyQP(kcL+0aJiFi?W=I&J8V#y9u?T_QM4wf7V;7)M0_ zLtdx#W@B8VKR$%94jSOt)E{5VM&mYMU}BSJJEUkNZbjnDY40R@F~&jWloy7P;vyE| z0ncXep2u$sOzc~Hyp6q~2ICftZa}+yXvuj|Ag2=Vd2J*E6BKei)W~CF9(ysa@pA-| z2IDX!hk-d7l3P1^NRAJ1?D^*gIC$M&h*&*O*sM7PZ>qsIj-k4Ty`pW7WNr#BA)P}9e1wh zOt+>ZV=)B$U2HJbe@QlY_rKf*zshnq*#;+uYx;YI6^21&QZOf^cGLT7hZ5V!0#n*0 zJUcN2-0#^Y3^2F8sLC;(b{XDtHQRyMY)4K0NA8ekI~iPj5*bWvg?Y6GFcSAx#pcAY zHT+e@7MR??x@ntxrVIOu{st&a@erSdwQ0aKM~3wyU;>{>^bQYX6~O{}xd|LvwT8@J z?NDa#PG@G_HUt_GqEWR)u#CFdOL$&|!7d6D###WH_Hjjn+3fec#WX~#`C%Eiah0jl zbZ<{$Giu^BZ(baSEh0U;*vngmJE3FLS`<1~w-Y*6j&arCc54{psc%>x-inb{>%;3Y zZ*d^2z)Q7dZbdwM)!IZI6lD)o(Ai(RXP}tO0`z)Y=C?YXo%td>t$1bCRa6HEB_30A zrU3uX)|edo-_abZLAjO~HRjVg?+Z{|bLPle^6&bOjMcyEKj_E!_22c7u(9bSM*TMt zym9KkfA@U<*Y|v_EC=&&=e6C*pm+;L9&h1t3-Iij*iBnYl;|~0luX2@nATo+Fc55A-G#5?dKa8^Hy43J6XlBOKjw{0 z$A64g_kEkuQ`q@- zLnnIoQp5uj19EwCV4?~Q1B&+(k)%0GStepmS5|*!(VOLU6RlT$jaG~{x3qSp)_HG{19eRk70q)m; zM@(G995hnS{h*xjMTlc!^R$;%TBi*UTs8zxkfYg=UAD|k=l&O-E-u^eP;|iHNcK`R zviD5$Owm#z7b$^{8ONveVAuYeJbAz?&?Hv{a{kI3j9{52%wg)a(0FZN(mqb9&}5Ds zM@Cy}N2Tao_{;|!E&#LE~6cr40B-0x<*k3el^Q~?TioKe-FD2z5`KB#q!Y6C?@2lJYA-esV; z+>iCQKiA*>8q`LHSO@A(M!lrJeG?Q9>Bpd`FUS~5~_iVD% zG}DlOU_%jMHvAfJVCttVp%TE#QeueFv-`EVdY)XGo0`813*Dgk!*KM(C8R`}G|`ae zqvIr6Bt+3u&B2t}OAgY#+*N>y(iCB=Hq9m*2TR08j2FT#u{A`nV;Gyunxa8+mgceG zFdwyXMP_e!2Rtzh+lyy>Y{38|l~xuk)Bgmf%yK)B2<{f+LYQuK@hUbPv>j%EhTkt< zkjVOZVhG;}2S1tE*PE+YA0F7|_1y4rLTlii&$}Sw6YC?sOsb46j zQ02oJUf`+ydl!B-g_hp@hEXeY-W59Uc2M`Sx4*}orlwky*Fe!1M4R$4?lhvvzZw3K zQ8Z1Jw=s?a^)TbnBoaQ_vltYa4x4hBPCX2&2Rw`N6ezCtY;2qHXoUMfM$srYSLY8w znMNZ2tP$0VHM_^HGY!u(>zu;ga)Sh${6B1+DQII_=OM#7 z$1$#+!a8HV>}cz}gU0MHM}jg7jgO@GQnZt1zFr)|z7L6<$7yay?%+q++)i(^KK!X+ zkZZ;?)iB~FQ@!1n$hr{&sv|JiFxA5}GaIHFbFwiEkGZWo5H1+&EAWwO_Wwi1x(B(% zjWrp5PSK23ZmeGf#f>!?X5L1jH8(j-yN5t=WBqqfy0J!Asc$zL#MagHrBZ7oa|J#U z9KLX-=k&he2|Xu^_N?{lG^n-P4|Zgv70tg9AB7K1Lk|^dKvqwT7Rq7`)_Y)W6d<)8|!XAZH*8{{}yr zFmTRKKL0Ixd{0rc2hEgegZmM6)0ZQ>FYqWmWqNWFU*GiQR~29P?mzAIfpZ?;b!5d? zy*blf;*Op3_~*Y}^YV(r6WLfA7vYqdS{fn##@*^P%u8W}Bmf*YD9LFtN|9x#-DJ$ytS7`2N{<&W|$UrzAGh^yo_mzd}DL zW1#rz#OC+`eea&|%HIw+au+AQeEGy9)e6tvRrk}U)7tFJx*g8U-tF)oCFXj}py$~) z@)}KldCl|<3!gf2Mm2IKj->=eYe^LjM^KCps9Yme@J_+cqIhusno-pF;Tky)R5#-t zhdlp2D6EJ8#Tzg*AL)0DcOEF}=h)aHbBeM}X#|fqZ)n9Ar{bV^L+4VRnh53PCC2zT zUjZHup9d5VA8pmmOH3Hlze~*jJ0%8F3;%ysVormG|8FiaJbe2sF^8cb$#o2Eqm;Ui z*&lDlGB4&jhAI}+D#KbG)4P-En4H8m>?lJO&5QkYdyG1UEwyGdxsJpxG8Ka~M1u9W zgD}U5b<;c(t(8NWwG%70CI&HcfbBiA8`aRHMBQ$=8X7p~R#X;=x;>x&w&Jr(j-2+| zz&Q_!YKm1S$u$XDQ|Z+tyHnL9L##eBY7)%NWgHmkF=~=a5wTG<39XhBwTY-ob`E}o z>f;$xZNkgOp6^_n+?%>K*=f`!d#E-U(z?vM|7Eqw0f^|n$_9;s@!I4_P`oxd2^6nQ zXv#LPO}+<;*CsTzo7W*!*Kmqv!SmXL#=1B)0cy%?6H;#8{yG^HuT9PZ#lu$&iq|IP zp!C|LZ?}zRd}HeMbZxXS_4;h8Pnm+%6Qxhn#&G*?J`aYfzZyQBhp+V%GFY>Kv1!ai z#JGA6CTS(MBsPCUYY5rWW9#MASSorMjcN9bA)Yh9pf&QW6=!v?L+~)#^Cm{L-;_pu z_9Hor{A|a_^ak+;J6miA$#-AE>_L4OJxu1uc6eJcSdF#o3uu!PtdgIL{Zgi56Fg%( zybXAPMeTEGCzGw%r2!LaX!$!|dXE+F3oyZvBm0K;yRdd-${Gqpf~~mU6~F@US9W<( zbg@Q$`sQ8dfO>9MX<}=F*2%BkH67G?%+A<#l9trAR0Fd`Yl~hkdgi>D5s`piBws~* zxAn?fF%~=@LpLl3$lp{~E|@&;j{$WYeik-CaSx-W;QkzbHsxI0FJx2{cN*%ku{~7y zkPdxH;?r!N0!8_5QFefOhf!|a|BNS#auF!*+Zs^hBlc;sj4ir}?szYzb&!QZIJD=A&9TZnQ6%?P>8V2^0K`85h$MH*MWMR@ooV{1)Fc)@&KdgqsJyjtp{}t#I`R~ z$5E9g@ z=7qlW`#nS2RxsJg%JtgV%5@}CXkW^;7&2VBE&;`ri-!7mc3%yOs~LTH;|lU9D84_; zAgB+JUl#VM;yp%X;m)ztDxLZKNg*#Uo>>%8ohXcp+#L=X*rErt>kcVT} z*-IP^-in>H6%wS4qB~kDOD;Tjq)>pxt@;$>|gv3SCiQUPEW6qCvZ2i(5L{n_Hucl~X!< zqAWtEv`2d&Nz!zqf4gKebq*h%ksJu5q73c*O04tZ4!D0|c(OX9I57wVo;ywB>6 z_Lx}h-O;vAmSnNcGxM6GjXfP*x;!P2a>`2Fk!W%LFJ+>!%u0$f@4fremxB$9?5^PVE_YqpW{3LY z>a?HpxH4slrPF@W<}WXrnA>Upr_dv)@OS-F)Fa_PVyGzkT4M2kfsee(~!cH$Gx7{P5nBcl14JpB_8< zy}3tivVU|+LH0e9p0&Hb{&?5g^5^Ue`<~qM#a~~x-!a`aY1ezN*_+w*pZ3dca3xy* z`i=--hhIbKSRB zWbd&bQgvg?H?Qxpds#q-?HBj_?b*dEzp*d_g6Y;Feows*66@GWpH^IqDxaFMsmZ z!{({XpGgaZe4Y5eNd4rBy3%gvfaju!$euV$#YsjI}DZ*#AG(EI1D`R8? zzgSrUhO2(1z)6H#0(ai~FX zqr{;G7Zz^kP zfiwG0PnOAMGJnLKTr9e7*9XZmG**+DaVXq57}VAuzU@htp~(-K88jAj7^t_e`XgH2 zqr*d?$jqP}L=FLU{F4{olq{3OWNr{L6~*&07CG7-3Pond3L(>b^wk@ZWypuj3_76q zXi$#BU#Lr#p_I$apmr5?L;BwTd5SPIyO2RGGm=@eWW&Z}cMfIlj4wl}l9{nlxO4Kl zL$)WoLmH8pL3V{w>f zGouXYGZEA~mM36dM#~(;ap))h6T}!^6wB+^slVvCeGBcJyhGMwU z^4An;NTW2F8RPqPERz{OUexX1SNc%5B{PE#*)0Th^_>MN^ze8l^A8cP%Mbf3lpL=U zB$>yrjLb}y$zw8fur8&~Z3|DBmn?H4lUXEWuK42jNK|+%<=13MX6NK@{+=vz5|g3t z4dmBB!B-znmYKq2$exl09JH`CMR-nTGX0RDQgr*C{dOd~a|)AL02%Tt``+O{B+F2} znwde%HA#Q+{&>JeTm}zH0U0@QA;7roNt|k(lSf}faLrEQG$e7llQ^rBI6o1bBNWZ$ z-wKXR=R74i`|F%7f|I3l-W8mabPa~=?!Je{*naE{YC+XUwjo%4y{9IJCCQ1yaqlFm6& za1PWtrwY!&I;TunNRbq~KU}&UC@a);Z@2&VD*4BseGwLZ9oCILneaE0Q>? zlQ`EVac)iG+?&MtQxfOZB+h$DoG+6&nbbgFmlm(Xk~n!uocttCMG_~F#F;H|>d~)u zb#$(jeQ%It=v_w==dvWul}VgilQ{P!aUM_NJeS0IGl{b^iSv09CzF~~?9x*8=p@ec zB+j`>oNy8+mc+RriPM|Jxi*ROt0d0aB+iy3&YMY`50W@vC2CXtjH$0c#j5S+tN zzA}|5fly&N5JMTf&&N0g)Q3Ama4aNKPy&ua;*^4Op2V2}PE6vIfkX3Xs6Ef!A-|~3 z)H%iZ;Lw*PR_C(tPizE((uvy|z2s?ES9+b27^ig1K z%tz2q#ap!JNeI{b|Mk8~68x$bD3Xy;r-751!G?T6{o=}I)c6`|xj>POj5?j6sNF}` zaL&}Ifx1tiNJd6Y11B>>Lw&vY;AIBtZGj>g8HH{VP?WZGeU!W5MFVvZbu4g^jEth; zZv(aFzizKKP!WM585wmZLs3tJt{1<5J~UQKjT;1tWMmYLY#1ru{QQ!i8>q(wiezLI z>5-B0_2EyiGf*E06v@b_0*2Dk@XO(c2MyE-BH$z=qew$DGfu>vu7)#eA_l5jph!kW zkrroWP=A50iML(*R|Az0D3Xy;r0JO%S{hziRoG*oo)B!3kx^6{GBc>}M%P`1_PY$! z`vOHWGKxw}W(Kuq>ALfT##ao~L4r*(GKxx-p@+X;{lj(xRUl9#BcsSR82RoqM_OZiezNe_ZUix*AvyB zK4PG57budEQ8cicnQ=7kbiIE}#%Bg&kMtLOEy1k)m48OE$gk)rtS3=oV&HSB#I#g6X zBqO7I45c+OKfI`7fq^+Z;GO9{K zJvVFKO$Mq(ph!kWp;#j2wRn}Ebkv;&>N0^M85tFjP#nWMouOLLFcG z-m3=cet{wx85NRHn}7Ok)IdEWP$VOx!V+p^(`y3;>Ro{%85tFkP%VMs$p-2xfg%|h zb)JN}_O(gBGEj#ehL^ZVMn=s9$4L24A6yGX(9-ZUfg%|hRU@J9tvU@29}VRYD3Xy; zvn14c`OWlX*Wl95r1B-FsGzq-;utrRGdkx?k{Ccn0x z{lQBH>RN#!85z|ep)P&?KYwYU?iMJLkx`8jD)-kfnOZx80!1=1s!2j^TyuuW&c7j0 zBqO6@66(?kpI&W*@Kb>z85z|qq5gcz^$!@R18jJSi)3WfVsMQ7I=yto0S4+sfg%|h zwM0T4_Qa8BxoJ9IE>I*Rqgo`?HIBDT?UwTdiezNeQVDhSeg4Z0zgh%}WMtGb2{l-A zJQ{jh2rm;Tl95rZ5~}gSn@y$iCV?Uu8Pz7CvNpeWy5ZOT0!1=13dY5h@~1woer}+i z5h#+8Q5_QMy>Q=J1NE*zk&KM$lu*|`_sn|+>MMaF85wnfgqn2dKZ*_1p-12)E|QT^ zUEmlR)zxz$ssb(LPZKDTkx|_e>eaX3{DXmV2o%Z4s2&Nmvhzc9Q#8N$%s@V`TSmnt z)TDphr5dOUgkK~hqoAy&c=b0tv(iBI3lz!7s0$_3jMGm<`PD*rn?R9_j9MX~8gjM) zqM;rYD3Xy;2#_g+7hn7SIs>&;ph!kWeP2RVZ_Zz2pgs~Pl95ptNvPkPT5XC~#*ui5 zi)3WfDsT+lcy#|?np$5+3lz!7s9p&*_rv+;8X+tYD3Xy;7fYy(Pn>YCfvOZJl95rD zNGQiu_nu;)q5?%SGU`$Z)pGZ{Ccjn+6v@aabfrwGv3~WzsPMI1zE+?}Mn?UBp|WtN z>(pm|yT5_DTcAirM)iSX^rWtBFAEr`M+J&xWYlU2b$GnXXP}-DD3Xy;Ya~?F`ct1b zP;Uqn$;hZ5GE^?^bUl8}V(6Zh8XpN1$xKjkkHXit&aRHeP_!+k+6(OV#*X&ov96wg z!#S&Crq8LW`CGbsI{Y>Jl-Q>mWBTH4X>Ve_ zL}Jlp-IxfN%CDxDZp?;UiMOtf){ZU~_Ed80s{%^_M1EGsyxNqm8B!1!Go3_Irsoio z8YA$+q4E4eh-k8%;yP`dqWSh!S zk$5Z?WB5BN7PF(RspBD>+DFhNV=|_xFh^jFV3{?D`H9%3iXnn8`uK(><)O zZ)xkSuW!U`+m1#>JT-U4VoH5O#|l>$rZ{ra9qaDt>R74JcS227F8 zm>KIP8I5I*FO-gn37)2dO1(LZOh_;c3E_Pz*GvXOl9y!Th|Z|&HqEbk`vJ+o~So;9Dg=2>{-Ys)c{I;Dtn(4T9`F6PqT7zvN9o&tcFC2WYt_VC95QF zPF55yrQWQrn$3{?W@5r`Lm~+W?UY?(%AW*gV!|~;VpQg)b_<0-4q1|0OagArL2cY| zVXP?_i?;JXX@!DCl9ilmjYYd0t^5HmHInfw+h@iad9V@v zU`tn5M^~)L+0lixVra%)VX$aMcSm>3@FBLMrwgkhz+kDv!+5qH>G?NkxhZhHyVq1a2r0vP)g zheOpxL#oFS3OG}cZ z!;xyQ(^s8B8f$+fX_rU!1}a0|P|&T~r?`Byj>n#FFCm)N$Y?aJbrC^CUC4v3#|(~y z!r|&_S9OFrLhFV!AT1u!Xj(xsrXwLWQXO&z-2t~Mmao`LSZJg)bgI>r{>q>WUQ#NI zpWHs5x7zQm^og9&SLN`8V@X+5XfMHHBq>dtZZ+)jID=uI-w2AaN=cG+IaMT{BV6fp zu&6^J?L0dv1=&(05k^|aq-VLFbWXqOs}6?!)zzkGqk2Z%sV8MGq4iCYk0G_v6R3)~ zBTzWh%6s)!L)wo*!R4JqOY_?-cl%VCHy z^(bI#sAOU2xyKQy^tcRJwzf*>Ypl~=Y%k&Kt0Z7Zb$K1maJARu3DY~X1~6UodL0f& zm?b!^i_-Lq)@5n*xC-m6R((N7z!Rye9!EElN>)IPL@J%GaG*+MRg=ABluBueYYwn8 zpay-Ff$Cr=qM?k1ULyP0vMebr5KUJoQ0eeh`B^k+6_^$^bChX4m~bSyTso_u$ZjXX z>*ij=JQ*P_NEuqc8VR_9j!I9Z4q?m3#tUhc%N=&RLqQf&S~jMIl$MTZ^tgrJ1#iQi zu-D<@xylxwX-KvLO@ByoM@755xwR+W9fO&M5s$X2MU4do1!aw>AjESlzo;y~tjzS> zRMb>fYCM+|H8qtR@0*Jnqa}rf%_U9EGa6!sJI$r}rG>>!O@++`(eh^M5pe&SOPk8_ zi;K!;6vc|0ii-^XjC}JY@k>j~3XAje8ybpC?##$9$S)|H(a=1ju?$njboXcE$4W~I zn#v3Eqcf=Yq4_(bct$isX#BE*=!}MFV{utyS!1b*UtZK$R9a9_RGeQNi4bD=jK7 zM&XW?&S;upxYH0TL(&wML}Rg1s<^dqHqI!RQBoEwEGRE6DKw=+W3-?#+L&KfR8UwN zD>unE6qPsT#~NZy&Cz00IGYM%Gnz}Ai^-o7Q~ETO#tLH%1&zf;g~(CEou+81=`!(~ zV>3z{%NmM{%1g=$41UaUUx ztU159te~_xKfkoB$&?OYm@dQL=KNT+p{R65G{3n#-;_Sh#YnS;Xi;%-QB$!g{hN!M zW;8dHmY0_mNApeT(_Cicda+R+nwuMDl$XwEjK-qSFtdCtzqp{Ryl6&oLt`nL+dLnk z#?octm&f$f%-7v7hL)QzL%zt&*3-E-zo@XdthuDIklpn7f{zlRmq=51iVK@l$`?yP zHT*4s;ukfP7MC!+Gw}<{o6DOT3JaU^Vp7+ZX>^^8Un;pzAom_V+inq` zMNSz*ZvQMr2~5O}Qj^Fve#Rnm&$RTI`0!HcKaMElQge|XqvQ_5>zmV%LsXS}(vYKM zdn^sPJjiWILk>xz{51_Za_^fo<&Hfb!lo-#x)kAkMH+JXkZVsvjfnE!_tr={XH!WISOAm4LS06VH$Fzr|~r8$lty+ zr%+U)Sl(`cpbHYS%FID*^`6#pf_{YWSJQbxI>Phr)F{5K0 z*$d`$bS+yDT$$%<>B)0-G{qJ~+oJ6)tu65deqVjqHM8E0A*cnd7~$z?$Jo$9(X>`6jw)o7BhNa5c$~lKBlNDuuwzl=5g?x=G{SUS@c6D@jH2369oq1YbxU;9F zt>ya|b%I}Qoh_{xUc+z?8{evlEylQI&**1YYrMM$Vx#%9x>oA1=$)gxyJd0vtd0N+Gcfcr`oKJ?*_<^ znb)_qt4<}kkc(mhA2gC3AklNC=JYXR0~S6)sl>22b;vg08o|zc*2}*F7u$nx@@%8m z*sF^li^I>HU7CT7y!lxUeH(D}%v*iEdvNqj2SodNhd|K+qrTqVplBIAwk=vs%lql< zTROvYr`T$l?+&Kzd5ME*hgsm~h!dQ#19abpyae_&>^YX74UbcOv{NS7%k0FKT?b%? zYcR3VF-~~cW}V)JL~!#JF06KEm^d?SKlkzz-LPD%vdO5|LY@Jz%BHJKw>S76u1 z%#Cz}B*IT;9C`aTWmSBJLr1Y&Y47$#e2XswC*H@O&xj8r$eHoY{n*Gko?S6)y)uCF zZ+7W>^c_!A>af#0E*#^-rshBg_+FgYh_h%dj=;oOywYZ!2)Eb-8pl*(C)K{8jQL!N zG_^^2u8okHZ&Dm8AJo#r_HwwR)dPx>jb<-lZ5Zy=_}LUpv}5~>;CvZS95EXdN6?(s zUi@$fDefGx92A$k6cm?R1By`C2@!WLcM~WTKN~w0h9mCBGeQekH?A#ZQ7{>E- z{A`%}f@UqF?4TTs@__O(DyUPmlFi9@3w4Utsd2fBbl$WHSeM7-t^mcuat$aRmK#9* z5N|EYEuc`qV|OXu43vA3Ur;_-kT61%NU(X#ExRA;l- zt;fmi*jSWlqp%No8e&JPjd&pqi!cdAJ$EFYqXDS|!fKtOL63?UswdpenGYy!WmvZ! z=g~}J@7b%RC?(m(BXo{7kyns%TxGG>`Ucu6wOBuTg#vmmVyx_U$;3GfX@=+E$lW@e zH_p6*Q*`E(ZkOnQox_rR%)yy3Hcdzz^n!4tmc^-Ox`VWlKK4f^52VUb3`R5jtGI8ho6PL;fSSpCX|hBX3G(j;T&-Vs0H|0lmXm1 z;&xE=jCU9ALHulN``ZS_`y=k;kBuG3L(j4nY4jHM$JnkF_?m2HZcb3jH*u&E<5zN8Sc}sBy!_ZD-22Qve!Vbd`F2{~O zj_=Wqr|a9Gj>LDMlH*W)b7%cPJ+^c1m%aNTsJpJw&v--j=%=X3HA46nR@$OP z#hL(;fT+Pxj6yXc)nHPMm}0<`{J!U$nc3a!M)vbOeg2>Sz)rq%=bU@beSevI&jAt% zCIE>9nLz9D*1>ud#pi`^yPi4j0UFC_4bXLr9s#1}!Kpk0bTy;D0AXV#-01YRR9jjK z5OfGgB;YEQWQ;~l+l;ZBOj0jx=r}e@s~y(HLe=R=tj>T3h%|sBbMjrq!Z|+?R{TOH zT`&@)uHiDXygnYIYmkBF^!YM+B%?F1!NDbwEc_Wo(y5mvk+M;g&g5y9I~1s5*fdrh zf@}|*c2+J%OOC3wGZ$2>t=CisJG?oZ31%Dpji#v%YC6b7*i|BAp^wXoP%44F0;qV+l0N{-ce#k3Y?_0!7Bz5juIg0S8f3k4$Qoafz1ja8iqN!a0>5ZcoyC#fTV}{C6Mq^6}bXGCtLjX zGHSp*n^6nyMT`a@!yW~4DBl7Sw^X2E{5Bm(Lc0M-LdybL#2f`cmocJw0>#wHN&$p} z<`u$G33M0JRRLYbs0K(l9t4t#L5h`xm#UKR{uZc`IsOPFag(0te>I5AGs7g?(VTcv8gRx2}cQ70zbpXNKo?@AmNw3jvwgV9(I!xdYVZBQovXX+}xgWY5 z77S)x(San@+wX_8iu=o|4=E!=Xn2MmR7Qo|2X%|P5hZ0ljPIc3Ns?!)&$J?C^;Lmg z6Jpdanx@bwuJ37z2XA|KM#4dL>nF^6=FUhs&fFOZ9o00c>)U{&%b=PjHK+xMI!C9{ zhP!k@)GbK|KshcYo14`)s4I3T_gZhMGs@@Co&u6l z-5-FYGoo&31iz&<78x7v1CrYJcOa4KeG8$cZSxE^>{31jRwey4IvijVfXQ`mRrtf#^dNJqX@Ch_6XAxQ=PCBV%+tK6F)oT_?a z&(*5Wov=094!R$q^j6nViPYK8Om~nxt9mt9(}KUn)6uoFC`MrD-PM{qh&)K|-9D!p zB!xG64M`6H>k;1PJw0$zu*$-oXxnQjWNl*&Nuq77A<4)Q*+h=WAaX?3=$tBgkkY`@ zBVN`aew0=kySh11)wPGAdD}=}PFkJwNb*H8K@vX8_7)7-@k_}AjkC@znYq?a-f$*k z5PxX7*UBG#?ei23ef9Gs7wn!D6NIEDgzN;Thoue=&%dnNCFV#Ys*fa3kE9J!DPen% zVxO=vNPbd6QHCbqJwiM7Z%7rWPElYcj(ZB*ipwzOnoFgHZ!yMA$*8Wjx6v9|FnB z6AgBRcO8)MJ`Qvveop0AxMwhW1$PW8;kF0&s~8PIiJ{?@Q@PSY=|EZR=C;s3frhc$ z)P6W~#b}8QA2Au-4y@N+C?5h{#^_U^q0HL@B)nMZj?|C75XEI z%=vYO=l@I*HO&Jeukf$DD2-Su-Cz(@e1FRwAzHfunT9b{gk=0eE>!KQqJ&(Q|3)IjCDex052)joU&K!2toIf#ZXyFzZ^{*Vu% z{08+`dHtXN+G_X{_T_&7(=^lnz*)h;YH-j-~S!RnDO|A$5{BMbOZ@nNco_EEhAZ>L?eQxyfbH z{4&aAOOy+L-(xnD>tGZODc6qlnUrfsx?C9LLdv!23aP-%G+aUoLBD6X3{cF_ml`f- zSuXSefUb~A&R-cWR7wQC66JCr%B3aBg+2wyW%|<{3vFjdIx*<+3}%g-(jxjDu*Aaeps@hTeT1RQDEZv+jF*Ui0iStX5CaGCzx0UByE=#s2^)Z!wS@V1xcb0KAW zk!lV%8(c&a$#pJsorgPJ1wZ;c*9=KfnhY+YiR4n@5>hWWZtG9p4RLYfiT6Yk$;EBG zr2sEw&W7V5t}Cg@#YHrcT!Y|ZOK{;%*9~9Xgl~XmF*a2u6HO!+#mJW6BooX4sj)#NG^Ddutv&jWn5+Fs!&)<4KAXIlNOHQyO#aJDA+D_k7tus=rNAXr zqKfX_m>uFeVsH^nB-e$^H41mSN(Xcx1osTvTT0x;0q6Da5tR;3AqxE-W!1EQ&8(^WItgUWn@#1{cvpa$N!!sMseKTn(cO zuM2Sm}$s;zWw z`Q&d8hq(L(mkVzqxh{iCNWv>>NGZLUUmFcBq7k>(3>P>UF3k}x;Vsg4*k`lB8gkWe zB&zANsc4yK`YFfZN2E#yG|#-V$Ji{?$BE`}5@VB49F(CQMST#*+G5lPX`}?$brc6( z_%0+NpD|+wj#ig1n6a#K_PoV2WEeGLF*Z^0;Z8Y!J!3}stfiGR<}Jp7JpUrv9?!?J zXBbQv@-JMxXvPoBLD)B(+D78?fnDSHsqu&tijynu<_PgoK_bDy#>f-ge2OyiHMWQG zDMax!{6sg+ZE#TXCY%+WU2)G%G{wPr$?sQG7R{=h<)2x>&bdn$F9eb0=S_=^w}mA) zv7;nc$s#)2!qUl^%kY$Ex^M?`#~5|ty z=t}3!uCxx>=2y)7{@hAK(#rqd`CC34jC@9kusk;p8si-)M4@v>kcf`4(<9}onSqcp z8=QQ4{rgMH7e*X1jeY18YZEgT-Z^{TQueeIhfOPTXtOv!hG%rBE-N0?go;^yI+%*V zRK=`2p($YTo%1R@W0Z^;v>_37X&TI#m49EfzI;=iGpgl(;k;`$PKDx-U19M=53R`H zpk;*|R~%Mjcng5y7m&$;ElO9$K-<7-cNtM0k~* z=_#B%DJ!=y52sN_VRa{CR3z~z4j!zdGR9zqCxST(=k6vJdM6hYPQ*%rx$@K3DN6)} z^QyVo1-`5^1T{K3C@>e}d|&aTJntEp)1#Sla_F$+#G=fJxgJ`^$rw9t5ue)4U6zra zG1gdA${0(lO5%<*rFdH>PjfOo6MYkNawg_xdyK`UUY=l$DPt@xGQph|p)yi)3Xu|) z4_P^$f?}^Xf8r#s$5_@8A9%qjW9+ENl*LKu+=;&Y{LIPWSsd%6bWRpd`4&tno|ucn zuF;XRmZ~zwnrl@!Pil!(jAPchMMVXL5l4ihk631*oaE#b^v;xYVh>~$HbxsxLzo}K5(&GJsl&70`;@KRW>WVVuyj{8!- zfdj-i_Zt?U+^npk{K;NUH}iz~xESY_^F5O?i}Q=KvkRijZme`J@)S-&@ynWsbLCi9 z>#LL(d$J1(it-C`io!E4TmW?9q4tMc9(2*Y&t%S#BX9IL3SDP9b2EA@4tX&- zow@lgpSc;DCx)77EEem`&9h-6Gon#qoVnQu=R>{dVx766uY-5f(p1>h*O{A#u{`xN zTB5=Qwm#3?kU@p5VRW(1+^h%x-$3J|>cmci%EyPSdQuERc@i9^o&I}6aqas0r`7_(9vo@EV_lrfPxzp<*y#0qd96Ux*YiD z&qV%a30+_5HxaMT!aQ{s=ZQLdH5PPt=inB0#ftBD@&4I3=&0I$6bBtupMS+ccQxqxd2tK7 zV#!CveRv#nv_eu42OZVxAI3pPYYe}QgN|0BUW|i|{M#D`9j#Hl7Y7~Hul6|T$iJ`S zprd%4lZ#u}6)Qg|e=m)Lj`A%%4mt{VN*r`UK{qoFI*M;i9CVj~?$J2uw#7k5`SETX zbhHZ98V4PFgj-qv)c~Y?6QHN6|(5M|2m*pu>>me{yzh zJ-nOpUpl*Xm%n^b<>>$Q@iqE3JB7TO_rr=(OelC3N)uw4hx6l9w&D%h7go%kSH39Q zUzxdN$pS3-fku{7Wch$*$3Bx}8R&liMS7SfXF{(Mrl;(e=_czhA)4t>l(nz|&tOT% zf(V-fga4L)ETk+{EC3mW9r?}&U0Ji)J=a+8Sr&^RoR8=3;#co@$g6D>5`S!?Fdg({ z+!^wX`W8M+r~48E?Mc{S7&;*`WiFBMt(6cq{mCX|y6c&)Y5Mn^)AhTsefeITF6q=W zv5~k-&rF$*onY23K

        Met8`8((+SuUze7T!&IHxJ;~aVB<*IWmhaLF>@&1{yIzoZ zyOy8G+yAMeF2v8lLpOSIC^R^Do)Ili&cM&9l;Tcf9zNAap&G|gd^ljHdj}(2tsn_I z=d}WCYf07$oVw4c6+ny>Ez70v&A^JRS;v544HgcEeDGtgGx2;J)M;xD#m7Mlk)=p2LP*-zpSNY75zCnae$ z4TxY`ofbTdzti<)DZ%^%?fIj4(1P1=*WWDFf8-1@{f{XqL zMNNC8lin65tLs~BXuWBVyI!BZM+>&n+nRQIyIWoVG4j^jQYTSLKcPQCaY^rS-{R8Q z8+H9NATzx8xYBld0$u&8Ch6X!U=p0kucjj?&bFqe7VK@qqisjfzDf_WJQH1MuTR{6 zEHgNGl5J$rlW4oAJ8&$)|E12NNC@J$`)1dQEBf%2#J26wA7S5y=*w{93tHDaS2nDrV;Hd~#x`jKvcENp9JSCTQ5TI=574Re&$I;Zoo-=qAygOrzQ z4eip>>$O)nZIOEG@lJn&ij+FUqe#kIY5WMMag)0KASWJsDJgpbY1^!>e**4CTKddb zlh5&`<(v(XsmZ|^Y03p5A~k#Y87+4ktCnmz$W^UDoi z(-GS{HZI$?!5j30O-BN|`$^ha?nxW;8uDL~B2bI>t01txAjB&AZg4EMmiG9U9%13YRz^|9xAH(6NhnkzpJi4hl=lx$J2J~$9{T`GJf?F ztkqCwuUC~0W(sD2df)N+NO0tD_Fse&|iketw; zpyELB@RA1-kMKCiYsBI5Gsb~PISx*WLrPkZd5t&_?iGiWP#jVa2j{UJES5pJzbiZr zLhuv_+^?(aA16Xn)}W*}+VT#H%IlC78xjU3{+<(hx4(_xL-MxHLVGNfpJ+-y6-Xo~1^OFHa2t?FumDIT_#u$UOeUCxLj$T~j&(r7@e3f~ z*lM8$Ac;Bc4-oVr5T&qF`P4!^K*D?0S!QS#07+~gp zb#*RMNeU93R_b!8HDlnSdz~-R-kX}*>G~IHQ3vZ)z!(fe_L^GF*ZyKBUh=bxo;zNo z833N2!XHKRb&mHZRU3m+I}QTQC1<{2KYJqrDsCkgrlxaK{v;Z6yWg)iW;XT}7x%>j za{Ybtv}9uOeAN`*Io_YR+&ZHY^HiXvU%@yP7^v=6{Au%z_(Syuj&q5k480?WqnIot z)RgGE4NjbOB-IW$wrd@b!s}kD9WLzikf#wWCG0f(WVih|AO|1mmO?{Sh?ZY)WC-_% z8T}Y{TB>&{I_|>pB#>}y1`>`x06mJILwN~z;n)v!BYsZh1Kfq<7?5y$2J|!h9Lkrt z%bd-L0#Jr0r{V%CV3YN;(D>5GZ*rrz7?$x@XxUs8IH=4*bb2X0NL(od8IeTVD4?euO+(AQG$ z?O<4p0TGV3Rd;G7N7>WR!B;vqZiJJfm0|WdzU;8N?m76U`O`qz%#-Sxgn_7o@kGlOG z)%`VpN83Qmq1~uDZ=yEn{w{Y(JKRg!+Y;Re)uQ8&((P@9i?_9{zk8=z)Qr$`-rwRmX0h!Mwqw z6+Gu|YME~@HWjuY`#ZuX$`{2beg^;TGYp}*1a6}um-bc@9h$@$$oZtOrwc8hG5?l` zp_u8-9Pji!)LwufalEfnU3VXt^^*2r7D^WGC}pjI9Z;u}q?I72yMkjB&3_beQ=dCs z_enpk`tSx6v$vOL>du$-Q2`UW^*~SK=inAk=>CLfDRgx} z!m$@fINk#KHGU4|0Peyu5Jg1_@gN{6#1{ieA+7~7d;v0i0jd&TfW#NHSMw9_uRrTg znNO=NW;+6%Ol3PS06oRk$(pK;)^g)ki6*NC+L(TVk%QTBNPoH#E_#VGn05Mw)8JC? zr;VBD?w}aOANV?<^1Fer`&Et(d~L71Ch&D)rCF!c^>>0UWUVjIf^U4Ol) z#of3(#5nq!8TINE3{D5U+8@%iS=H=82c+^2rmx26_UEHF?+E6kE-B_)DE`TTY8RAG z{S8!lVd{cyLu%Tlj4w=`s}|z+)v*_mib~z70s4-*)*-eXRDlcYf`zG-Q}|Xq-#NDv z6!R@bF<+|552vn$6OtDAw$w^>*p4sN@9k7?X*jMXlZ?t7bwu3{ilpq?R*Y6}*%@e0 zKCTYRNljF5*#Tfr4K+V8PRtD^Egk0AIMGn+K}%D1{mr)P^&Ck5Tu$l&XgsL>QvJC0 zxOzJW%N6>#I=sRCg^qdJZbYVf07npQ_7`g5n^Q=Ef>xM%GgD&BV6;41WomI#3)W(> z0+N$DJN<1O*SwT^j=+SUDp3RpkzfI;1(=lVJO)wl1+ulGax`~R?O~uoR=_Y=oSEkMm>~hweP*-mNdtiBD!tx}@ zk!xqA6N4O}yhmDa^3EenIjMKB_7)tOyvJbh7z|3W6)MszAHAao@_O3rc=EU*dG%Bj z+Csf96S-D+!y2>!>bh&uuS(gnuSlOu@#S0F`KIF;G=NchvScJ8g3IRz5plSlpQt{U zZ!boy>LgN%6%z|Et^WX$XWaY*v++p8I*=8cu!N?%VuU~mofJx$w!LRcWoomA#V~H*zr&o-xB^wFH}|i;41aFxUwsk&+|j@K{Q2k;&?lh|nRL!DZ&zlB zYsg1N5#FwXw_ihm(1egPzOG@79qoI}}+yU_g$NX93m(2L^cRAvFu zSjM4{G8XYg2NGX40IlG+j{(Wd?0nh2OFGSZ zd#m;K4j_rgTp)?ZT|g3#Y9NWn13(gw-vEhJTP(MoKoXC)fo8L$9|2`Dx)P(faz+_I zIgD-w%3`zcjOl)E(f!_{d)}gZ31|t^y=u|%VpgHKn6(V~WVVVj_%4SF zrq*b_s}03e{a2iEfriwk*mmF0gRqvTnaxYgDU&GmyxmyX39Xvx`=_ZzjW5$smzU0H zINeNhK3+d7+eV)=S>IQp<~wYt{KERHjHZ2wYN0PNYAj9P3hIKs1}u2&n*#M-htYtx zNNh21F4-5@H5`A-8u}PN&y$G!&&JP2s_G@l^Ao0Gm8?@n2UsQRG`q;qDp{#99%3D4 znD?6PKGw}lPAsIEOKt4h!TzypD?>xo5td=3Q_#Fe5kKT)`X0UPXg=0yUR{aA-LP%d z%9Sg>`W)Y?st=gc4v%ezZMSCEGgqBd&=^)7;?*0y42vnvq=fbW=L+W19i-F6yA|^{ z&DRQjAgC_T4FV-Cw8|#WLGN}<_;=w~Tii3|FB0vNU9<}6tJQbt)!W^B^$(CS?s~Pb z*}YdS+V6fxEjs0{ZmBxgUAAq-S$ciiPPg}P^)RUNtG91~&q~lfM6a!>z1J3~P1uh` zpH{u(sO?Q?eR;rs-x?^+?aFog6RTE3Y`FSfns!Qvmn3TZG-DCuz5 zRXuHKW3-AnDa`s7C7L{P8X)myB9Qnp8E6H+C4EHF z70m#Wu4q1x3@b=$RRQRn%4(n~jA$S-mCJ~<%Tu{&+AX#`hV4F8X%&^-y{;V@pc&_N)P{zD*JcE3>SsXGQ9TJHd4!H? zRr_iLXZBSKvCv{x5b3LKg$t=rv=+(L_4DD>XMrNUL1DBveiQ99>eGVWZM=TjU322) zM2Mp1lqDCJnzanw$u_8d;~EG3j~ZG&##nFI-U}Es+jUeM=?Y5GK(lLLmq+h1IrI`2 zFQRJRhP1uBl8P3q3CdUPX#FwmuX!A$K=U_`_it0zeFuxvy1$|B<9?cdUvSJT5Ri0* zYyQo;|LBH5_2C5niu6M@&|!5exPo^j+unx4?%-W1fx1MjxMOi$!}2*++ntZo+G!#! z&bx+oVC57GqAj#KkEXVRR!&oB$-W&sAC3nmY*8w)-R-Ep6B@{a&Q<#Bfe(jlL&z(e zTF>f-;L&PlyFaM<&9Ps?5kmA+Yu*6D%8n2El+|?)la$_8$O3ifOYkYHCAcIdPz#CB z*>&h+bbO0`x30@hVH^xjSQYq4rB(jjO`qBh4K0C0F4`T@VTjjm!)J#SlDwhm;}t&s^5}f!|lig!qKB$)IZwzAE6 zHvc|%^)_@Kl$d3mSa4R?{*kt$c((fZ)f$?*7|~i@*LRc*eS=oaY@wJ9Fk*J5 zcn#)w)qT{@idskDi26-Yd+?YGeH`Wf^78*i&O>I~aog+J+~;mVpX=>%mvvXYd~7=< zOj+l#TKYQ{a-vT~rGWN(v|LKhL4LxR!9ZB)ukHdSor#)vi-mSs=&*%q4aAkE=O8Ky zdNk3tcu+6dN}qDPjkLpWD8}3q;nl(DFimLv=V$`>!I;gCYr^dJwx-Zg*txCyO}%g=P9*m zRbUr4B)Yd7!!wL?4`8Sp=>nazwMG-P1;Ie0rKiWg6(WP$h-Mk0IgS;*-KCcu(3^B@ zey#3G+evluEsFC_y$sRaN71cM`v3z7&HJoY*4}ouS-#8K5#NNc_+Hy_fo4%7S%`Xsjr7BzDQ+G<-MQrN5Wfp!qlH{@UO@_OuSo z_ps*QsPDyyB&~rSH|XA7X*)Fkvz#3V0KL!X-dg&L#;cM3KGtT_%hu?&$5G7#M>2wA z`sv>Gy3>xP(`Zn1yX|o}@+TwPj=C;K6PlT|^xdeHzZ)6vjaS?t>Pbk*eKzlA8ZadW zy(=-`U0ocksY0zQo`T-M$bfbf9z95|bsyTqp8*KG?zAoKi@@pG%Ln{zHlp2@95}tP zdcfZ{g09V8bE5JN-S=?N{sXL&&LgeKhHJ>Q(4hj(8R`d5GdGqVE0a|Idj#g+jB0T_N*&6Fk+0yn0 zPC=ZP3~^3DoRLrn2uU@iY z)oGFHdUn%&&)^%bdxu)ILmM-&?J^8PAsf+YN!LTR6Keh!pus!R)Cd`M-zLpI9-rZK z-^x(JQ3lx3>H=L5bekb)7X;mA2wDq4OEw0RJi7le-FZC;y59zmpM})Hq)dEN7$K>( zO$2S!y&DZdo#RAM?_(q=W+i*IF*XQVOX)^*nsXc;ASfdK7~bIlQNaF=XSJkpx^G`# zr(G*slZkQ-yBV5qAIh}5L0x-4wjrT}qkvNXlJi(M6*Mk=hq?3xlc?Ci9k1z?S^VCz zN?)zXgq z`xAxwoVNijIyTy(MM0$25g%3ioirRMX-s=Pt%(eol(pi+tyZ!|KH?|nuUpb5hDrar zu0)BxhGb0C?FJ9Y-eFcO7T>lPvS(=}9S_*KJ4wUwtvgA)rmn@feV#hPf|>cJRl!FUDMKp$S8!r49b0SW^U=a$>HLj8DDR6hEe+4QvPA%!LnHb6Dx;v`=imu-n znW_jxk}?H|X3(*Buh2+Mifp#U;j=hswz>&F2NxUVLf=R3J=jd_u=6~St+xYv>IUDo@TO&vt z;Ic;@R(Bk`0r10z{^7NFOz?K&X_x5&!rckpPSE1R{mrkznHZQj0egN9-P2FIFgH+V zhlI<2jZqSMCPWltZ;r`255_1ccpS@h7vTXXeTJX_Vn__7znG?C?8cxI-8X>V(Ke2z zS9!@ETV9g-+-}~fO>}uqxTJ(!I`zE4aB+!?-m(8QY8Uzd%#LM2&ajb#tzOyYLIA8+ zsq4q`aY9M~H4`&ynp}0#yy%9+0@_~fT2P6fWs({c@izo$}zG4;O z=j0uLlNk}U`0`hvB>Wu8cHC)j?%*w~w*$$}z`wIwHpaIeb}Imq*7GJH@tLbiG8P{a zv4c9)4u$RRG|F|-?a~hMpE#-t)9I6w(lPPwMDydGj8ghKHpkqNsLbW8Hd+ zkUrUkJ*sl@rz{c2CVKQ+2fN>0@gu#?ICYYN+C=-YaEQm-Erpd%@K8ae<2yL5*5}zB zUk6$*cs8_eFF;_!(t@vp&Xr*F)eVu6A}E915EfFdt3bg+i9mK zBMUo{^54aXFSI&m2p1J0mAB`M7YWV2kV}_5bRzhqyx<=nV%p|=^ftkaZ z^D0HD^H>V&Iwf3J@!2j{F%EJraLrj-K8utaLH#j~r9xlw-E*O-20<-#&0J7E>rNMR zAzycG`W!Iu!O{@J;yJF$xlml?LcA&#EDIwv4!Rn;mZ7xi-YDhEbYyiDN665s;&v^Y zyV$>A_M$5*U31HqEU8#@SrpT}MRVpYBIy<^UcAKZT2iqTl*?SC$azl1-G&@sTSP&+ zCb&i`i)N9UBv+bCoRCIi$3`kszRA=A&6H3k4XeFN%PBI@03DuU&?D_ zi=!+6R=p=5Wj&94rC_>BpGnbVwT(W?2 zuhMm+Yosz4%B&aj6YJa#J({|p={Rn9E-3Rz*IIAK2<_7|{d4A^m{1Vp>DheJIKq!B zBy-Cb&2}*y&2MKeMhP~cL}09hVy(e4Wkjb({M24LUW4Y5iZoXQC}3Ip~1;*5iT^hSQ6p#8J<=~ zxTuh6Lxjt4xKM0DKHm(NZ4oZ_!KE?6<$1VtM7Yq74Lg3~Pq?~kit&F>{q}nJhN+Hn z_uoHxSrp!chc$r1qInBMQRdIxelnUSk!ezKN4MUG8t=21hSdL1?o9X2*c0s!CO(MQ zDg;Eims>CmofCx`E)R`cYzd_HheCa7{4ZaPrlD@fmO#hxXhhUL+WAy84fTGu1Q+fU z!k8=1dpMegIxJfPsrsRA%I~`z6G);Cmq%q9QuC7zblLHqBhfU;LWAg08r}KF=26i! zgP3M0yeA)9Vs)p+vEAF&=iLP@k7uv-{muk68Gh9OI$tw*PQc5j>kSz+i zOqZWWxonPdc_GTBHp=CVD3`-gE}ulWkUB|2y#+)v<@qv#hGnI~!Iw#MUX;rvQ7$8+ zTymmZZi;f59p$nl%H_T&mj|OH_w64zOl z%eM`e^DLLKhRgYuOSa*H`H&ITRKtZ-*GuR#3>SyxLMu;lnJHfr;WA@k#ll&vpMO5Ui>i%wVkxO`gO2cvVr%a1^U(pvoF?kf_V}pxmBDucJTo)T$&Q&F7qs&U= z!WtP}L=(wHtA)0N!SoW>>(`%33vtabxQHf_i~H{cYQO1v;i6f;3~_BTxQHf_i|B0$ z)CSVE^!%M@R!s>%Ft~^&lItS4pidzdTsMC=>7@|YxzqvTBAQ4pN(WoQSbB-;t%Ku7 zhPa9hE~1I#qI9r9(V$#gQVtCbaRm)7qKV|9oU$cQ|47%PBeuQ};(F8IBAQ69OW|Tm zpnRn3^JUL`9^(4a;3AqxE}E9v60Rl|T+=6wc|62*wNb!`CX&kq7h3}PM%SbLX=8(# z^79QY7v4m2T?Uts+V!`ect1bH^#_BCXd=13!(23upzHC8<2Hx5J~Oz8CXx#Yjj*UM zrt9i+$D*j35{{(d2`-|EBDqE}mx?=G zvuB({K`_hw`vw=$L~@OWOGr(A=J1ch+WG!Tl~8@UvUgBqKT9T1v-qY?BCRxn6X%Da1l);7q!f`1fwHYo}B3VPl)RQgNtY) zxvq-{YybNxts$y?XsjbG76k@?y|s;5iprM7Vu+ze?HkBgv)VVj7foxi2rSiWv0g%IOUiIv zY;n=DZni!sze!tLA1sz2tfj3FqTXp7Mhl(B{~sGB;6jsYENO<+y)VmMywoUt<+Rwz zZ%FX$kY;>(gb@Sw!Ftc-5Gu?g9Z)bWhj5DpR*9>eTE6H`=%%k&v<&*>nbt~6mLrCf zsdJC@;G2b;iACccxqnk0MtaG)z)m;KU0Q*q)djPQ7LA*^1RD4k%&iDToF6Qs0Q`hR zFo?u}f$&}?nuq9y)HWY)rR%MJl&2=ay_)2Ar`UbUT72~!Yk z2tkZIKpZ#}&Rb-dSy;RX8WJmST0HK|HUzA!45?fUC8<%AA{9AO{%{&u&6a{0OoSpw zBI#XSta1U7jRwfDnPEH`8XIRwt6`K^s|oogy9KCy^JXrbv20nz=o!oIg7J?fODks0 zTUPO3H)t@~lb4q}DL;2&o(D06dUfj~N5)tfDHw~j;*7B|mBJT7FZ$%nY+o+y8<^G; zdnty8+JE|oFCkHC;j?_6TyK7EVfN(79`nmb1b2Sn$c&MrGDeQh7&#_m zSp}X#Z*ERep)W5yd}!$}${0Hu;T2`1W>2)dPR%ZeP)nbcUQ{ISLKF$KE#jW!JaRahS6L5+NDdjnKvph=$-+*k+?ap!w{le3Cp^Pn$o^ZQE1So**swhESnf*(I=k}s=p zVpfrdKV3lD)EpnDQ&=Rka-pg}x7b@yQ0S2_B1D%>RuAZ_3^P&Uj)iL&TlOT+#Oz7l z0$*-+Ob!3|Ok)~Sm_-8vHqlUVj}BO`n+_GI}A$b3eYXD)qcGDzw3OaxsPvNSi>m+dW_6hUYd&`4UcTaiD}mz^D9 zdLkxiuBXVCmzm|8l5lXCKXo&|_P-vuz=Cw=5~qsPpiJ$lZl^6_)X&XwUlc08`~&~wGe z@XK@`Gjh(j>&ioKl(R>S9zSxdD|DU7*2Z-s(?69E3lyY%%;9?*9VKleDghi>Ar3 z=xDj=bI_b`td7!DI2Ii(FkNZT0P+=!?pu(rFb=xm=O{`!)odMx=)BSQuZ$45$98Nfwfqhrw}BA_2(MlbtV#h7?3 zx?f^}`x1EaY7TqXr%etzlKu*E`zDGgE?UZohH#wo)MLYLnM-Nz_bX%FG-9yK($ zXdy6GJYIu)(-VsF*e{4mKIF!tBjp3vK8X*aPYWF_n8u>}0_oiESJ1BW8=Oiv-_Cj#x3DW#zEOT$90%R`pt~v#Itq6}9CSlLH#rVE%D21Xprg;A>*AoJ_V0Ib z(9sa*lHuQ!D7xaP zaWT=A$4PfroOG+=qwW2F0Mm zO4$D|Y_g5|-`ixHb=Rzl1q*IkS^@Lm%PN;H#%!8SSy*3L4O8;`xo%Y!*rUmSPa{Nbe5D+yzkf2IUtx|5Z4@+XH6|A3QM(%C|tco^d2@1Jae9d7g)^QOf{NaTso znQ@rxU&!BWmyx@CMlRvQGlnaN32xA{3r8d5N65|mDo*d<>CB3yMYCr4m&~&gWLb2a zIhiR6dHCQ&X|k9D60a&NG8fG*Uh2m;Ve&J#ciQ4RV@M7b3l{r|c>$j3O`CT{)R|%w z!U&ZmUFfu6 zm{PJmzvtj)Li#hRiBXR9Diq^))v@Jx{2Ubpi5mbPDE?_Eh+0Wg0`FI=u2Xr z;1%86IOAt%6^+Fimlo2qAY?gyFyevxUm4L*z{O|;?uQtS!JSr`oU9N`IG(|?AnLz2 z^IOUm@nr{)3qOZakNdwE?ZaJsIR+#g$AN^S8_0#9LrF+blusEsfP^Fb9Qz1K9lN^z zVNlJ*Pi`@^aod_k}fjS$%3+%A-spYP~Np<-vblw){Epf^mM&>B880k^Lp`ne$jCSxQ z;zzr)<%Ety83uGayHWYR13xD#Je$dG3vd^-#zIJexa<;Au@}39Sg%ExlyYK+kdB9@ zKz;u}031d24QAldlFN2-@+Q#{+Mu%rY)V?=wgLF_)qBB$Z#8`!EI6;JWnc$1`Ru-& zcA(Xr>Zk8r^&zdd4{RVe52j(q`UyrgZk5cgz@KcNYC!TffkS98fZxz z*ckX2Dwf+JKxb_KfntM?yDLZybPbanM_7$pNe!N>{p5YY5e z{RW7q7`i2U-m#QSCR!Luh~L41Y%=1|NIICV0UtDqtiGK7LO0VT_)F#+#vzxqkx*Tr zL4QG4Pbz1OI*gl^;NQA!q)IDzAN_Tce|Ov6yO#|M-p>w=@&a!4%bbQ=$K6@MAM@M# zrQ_00rybPmfzuYW}cgE;!XSM_tkY zrqg?I?tYGXWak|9&@SlRzo12)UxV9QaNDg8@^l0!3o=Q>)U`jrvFKir3qHV!TMNx9MuIhRhlA97bJ>+<3Y$)EA%WL(vVL** z$99#^ zEX9{p#dRA=y8lH)P2oa*rIFs2Q+OG_(<Bb?PJ)_nv;xmbX9fNg}HM zsv|4m=fE!gt-8DlK+^h~m z1v&B${C43HRLA#m$`2|;#tpjJs3CZL*vK<=&@D*)C5`Mi{N>y|WQ5jt5acZdK|vv7 z2PKU}m7);UK`G?BI%qIldexRUL+GIdl!lhQFv`hb||~HS73i>M-PA8)fsGoa2Yi5yIoBMaQWi zz`r(B)3*IaQ%O~p>Lb-=RAaNL#M9r6f&h2`LbOsr;9%8Z|5S$|2s7X}056eXL@ue? z$3IqwH4!tH91`FND*N$wKy3)c!l0dQI|ef;XkpvcVbp4WCL*=9;|+=023ra0pyAO? za1)e~nCYBeE3Gg3is-g?M0DFb*lc^%`yYesX8Wt&_W+(k#fH^!QEM#428E{XLmIC@ z0pN!i2)Gzh+3DKf75F3>Jz~%qq_oiY4t&eD$7mErQVAg~cqjYWY6I|K|G>AN0E*wU|iS{$UpHTu~6E=1U28{ zjU^}xNrG`{hLEPfB%mp5grJZr5nT%U#I`mOnuMcDK;2GTyEMn#ms$ngyqH)+JeO5sT^oXF2F zPzvXS`X@76CG#o2dBD(j2CKu)A!#KyDX$NqNud(iWOZ*;3e3EY%6{WjsG*@o#wd)v zi-TDdxR9d3xtu~qH+2EBy#rh*3a~n3mfNe5e&19y|4$`1+Cfudt3ab>rUMk|2QiZ;M(NYu59!wRgqI&e`eg1RM&r$D1&obtoygKg}o=_a_+r8+UnIgW=O}+3i6f(qaL{;~4VF z+siSe{WZHS2BHl{4u#Hf3*A2~w|`o0*_eeq$8@DY;!6dPaNGqXzN`ZhsSaCopIUVP zw&?x?B>oM>oLD#lnB|Jk4+DvRPXb98zX6gMy#ge>?*Iw!CqR-0=U@Rw=!OFc?+rlW za}JRBJQGNKSpy`#JPahh*an)sX9G!ET?%BRACUMm21s}(1Brj-KqA4TK;qw%KtJR3 z`y-G@^%{`)+zcc>e*h#te+DEzCt~g@K3@zZK2HG>|Goz#Vf-9OR!4pXbT*fl-vOOu z^c>JHft<=7i>}F{YX&;ObpNpEzO?B6W6||PYxE`44FD4VoIqRHEd_{H;2p|fpg%Km z0sVzhD$rI&)TTYph!#molAzOSh*?pJV^tI=wDKiFaVS;{?uPojiCn#!TC{$o>&oQ( zc5F_j6{S~_I`n}S0zgVyMe5JF;sTP`7}otrYXU@G5@2PQJ}|u_j$p|HrRmd(%;kHM6=WMb=xJTuouJrgGJ6F5XSDQGkUZmdtkOU!3z8FT?1{ux(Dj>po@I@ zBHg=5FKfgKZ0+*=IU8U=08)@e6taf$SN2BtZp(#wX;S1_vO!P6^5yn{N%uitwO;Zt z0lVJgNrE>}>Ok=kk)V{sX%fyaz7&-lk6wGicI& zWeFZN-)2(TzZ?A*sSVt^L9bz|32TD((VPOB?=dLb4k{RoJ_3x07@T8VxPsH?XE=_Sx!{H)$j_ar6cCFxmq=+uOQcRbn}G{Bs1 zCx-Coq%fQuhMi$JB@7QHT&LwF9s2<7gw8RCj$;g|CMV&x6W09HTlc_ZqkWL>drTeC zpx&25Nl~`CK9~A>MbA#+2~c&GmYW>(wjehTl_I*7@F&fJv+{HqK6)XQP^HptN*DwlgJBPLn zHY;_g*w1sOa#G`MkUh=G-Gbk~_ zHD^##ujk}m&(2=YDZQQtM?9CUwsLENmKTv*tQdduH{{a*%BMWer#X^O_A}{O3S0RCXT#8ws;SqyiSpfdAMebGuQTy-=sW4=VEmpW5=#2n0UEXS)Mv3IeAbYOs^kgF}fuduC{{ zH&W_hQv-L8e*@{+UfTl`2y39$KB^Hm%l755dW|S*YW-_rI{J-UIUwpKY2@?(%94Y% z=8*A7G4mrmCyfti>zjkEzP-eVMhZ{k=VV>2e_(VM?t*>v5JC(~SJSy3GEtW0SkQ!^^?^F=cKYtuid=*SXms+c|3R>1AAJQR%Zq{P zqli!gqXwYAF=_$Y3Pk2uo@JK~xX_U#*jHHnGyI)eJUwKNCH(|ip7H+f1oQ-2~GM5N_QVR0XYU3zj&q7vmVqfgOOP2BvNkhIFY6#PEHGTuNoH7J(WIS>uppW+z(>)1 zS1a3$F`(w%W*A=4{aayZ1{PNGw494zVaBvIgJ>a^2@*?uF(6wr+sM{TFc%gfXlBTU zSN=)EBZP-x?wc^Mri8JD6S~;-G8Z|LfWa|m>j`4OF9Y9YVaP&HI=f~M4Eoh&)Sbk$ zQ+HwroIKFEMt6kK`BM0^{$M?60}Rhhw0XA}_Ey%SK5W46VKTPzn53~ETO06&doygO zu+5N>uu3t&Fm3|d@8`Ok^qp!^(^t*zMzs)w^~zbWEkkBa?(T+33e(C8*)uV$tc2{D z?6T~c7*S}86^s?O z9-q`O66(r=7JH0@P|8V7c%xqOjJkFy8DxR=lbkKx;pMDFFZ>hsQ1vd5D1K{DwtG{f zoMPHG_yLs4k}aqA1haZE}Jl2W7uIKBP?4m=*4Syhr0Fv##oqCzz`8AvU<{c zpb|W258%u3`0DQEi(&snN1`E4t!eM3)nSTi8dkE843jh|JzUCUt~So-YJ;`UXg1f`%tFwnJBdCW&t70MKmF4b48=SLvXKb{h9>Boiwg2{f1s zTVg%KWQL4TZftwd93I~B4L#xw)E4z$al@HOVlNl7Sh8FkA>oCwJY))9q+;Ym&@x)2 z9h`!4fF8%s$yQiogh6AE^YL@=nCBvNtqx@Yo`1=7G`f&c8?C+lgxy}loyMI`9zB)= zIe0Y@XCC2}f@W7ncSC_>bT=7@P6{}cJ1n%+LTiA8cNa!&GG?N|!%X&h0tOT!X%3J` zIuYm-eoGdJWej!;&>bAcd?4Yd1QL#WfoP=aP-x8aOQs`zj6(OQMYj>?5~h2~qT6E8 zkp*J$k1P;hz;wGTy7w)*R*UXmKu)GRZqdf># zUf1d}0+9$zH|WXnjJ;ZF>A%!uZZh<@ z@KretUwRMIw{bPu`H(sc-}dKVyTEDe`}p7;*>rM5O}^=&)v0r70!ow)55Z5aGjPdE6bX()_l5oj=KDP_dC@o#)r+Uz=R7G zSQAz!@76oq?^Ly}I;|iM%Z=qsZ1KDY6*tV1M~pq5$;ZePNZ_=6`JnXL!0BZ5$y)6B zKvpYl{dt>4F%pf3JD7mL;wbj$u7E)r^c=7-R?%kx$qxgk z2_uzY(n!s>b$OOG)f$+0$XyuIIX*F(WOTq+Xa>#12c0 z`u1swnOLvTe6`s18~8lIk8Y%!Itw<_VvK9I>s_T<^*&=vmN;ET(#9WoKu<%4AdNAv zuQUB^tfXT2NTceTAh&5|dK-f+_^e0^s_MG05G68w7*;aTJNJy)B7u2fq8WlV>eM@9 zqv!$d0x^JYX3!95?N_;gZkd5rd!@0;jci#5Z|CACw-~vS)VAn>q=#UP@b+fbph!-T2r5F00rAgTqCE$wwN)xe6v`Xzzb^uAZZvjcT2Y_<; z?O`D4Pigve2m3O}2Hm2J$e{A~8Id;g^^8c1ImN)K)B-)qs2+&cqnrxqFBkdV0}}a$ zqW+6~-vbg^Du6_m`9OnMmZd-<%a4HWVE6p*Ah+!AS{NKb>!%!e$5cjzIMR7-nu)S0_O> zS_rY@FRk1hY* z?D4l63`y7?h*6MnYT%5v46#UZ>>1>AsjTcGi#mEqA|JG<0Z!phL2Sir*Z7j7>bgHe z0QA}125-mrDF(IZ-TCX5Kk`dRcc>L^;a0eTmYZpWaF|C3&G_WP;DA1O4Ms9Ge<9z? z6154KU|}a(yKdj2*(mtIzzn^4wm^KB<~|1O%_ zk%{Ix)K>a2Qlt#-rzIO-MarD$DfKSQT*so*;xEMElJ{I^A5)1bR`F-kgN+OqRlHn3SX&ooKuK^q*Jj$yXN zCM}IQ8Kz^jwoz}|pO$%&y8cgC*^gD`xyUCYg{Asl2y_;HVg^eZ<)L_%>N^fd8s%Id z;h=?e;V1!;M)?*X;RslCL5q&2ItARQJZjPX14x?Ue*)?FIh8it%kgt4mxEdw5qgMeW4W=JRq^brIsmNf=jrckEgMl<*58?R^4&zrqB!!c=Z%D&RTR$WWYStx; zvry}#VJ!jL$Q+LW&1OW~3gqpZK+=qV1SE}j7m#oav6=E+2_*6j2l62thcX689|PqvuMYGyb4U{_X5rM;=fT~am&hWu0v8;!;LY_IDHSyY zPCAxfWtP1&_TN}~d&!A_z*<^6O@B`;>IF$J3t1_!EL{a&JjLQ~YD64!Jr6B=z6HUl0-n{~A%O^h%4GTuNV&7%sV zxx!fY0Q&*!j$ScoZJj`AmQ!guW>h4g5@_h*wc!`3N6^3i^7rHYhnH8%{G}01a7!_& ztoVkOh!&AcTFB0QyM9tF^tRAi7It&&)2dtDU3zuPigfoW9rlXrX`QdZ?Q5v|P8w_; z`gT=agr$(FrTE6nl3}SE)gK4rFq!Ghb^8xjt))i43n6w>J7I{=MhvCV2dCaKT{BE{ z(?UG#8=9|*K?zI<^!P8t zaj7@!PW2CbIAj}GS2netWq(vJ+0~Z#fIR?9zOV@Iqxg4My@tg(9dYzFU{`C^EYe0PWSPuM?#DFC_X4Q^yv~Y*baNX#&=DBhcR`XCYel~D94Wm{syoN{HE%= zBS)+1`YW-<7pqm|vPH%GVf>tIhF0oc7M_#vb0~SZ%kZWUNa`Nd_XoK?z5sMLeokdK z?!x;PknkP=DrP$RWGK8}0LcQLQ4Tk31_F|WoQHv=t)UIB(mw76 zlD6;wkhDJ^T5jz?(z1PJp&kpJjdn^}y9+Gz9Sf0RpiL~*aiIGcodlZ6QuRZt@*ukn zw2;$6R{%*GP#Y&{Fdm3vyT>rN4PT#4|(~H zs$D0lU6=8d4ApW~br+?2b30v)iz(f>@`Q8e53i zXslMw@;S?5F>I))lFBel$Pwd(pgNa|SS-8fN; z21|G_nv{md0;U80>e8SEcDc~j2CDHDu116C7|PJWC0M^y*X=^VFy`XRv$3v))NaPF zF|<77!-kh+Y&EDmX~Sopl^+g1yWs(EV`|IU4MBT4nv>i$iEe*a)lM4J`7q1fhkZ?n z!7()m2tFUSowjh7?S1TVdKfK-5eswdJ(n7IS{h@3EWyHAm-$qU6>M5YlXqp9=wf8P z%Z2qPG`O@zHV{#u54kq_i}kdx;TetAzrEQnz0PA!W`eQz_WnNqlh2&2v(8%kz1LoQ@3r>X zn{%+^dwc*te6@D8Rp~ApSfnT7-M0LWJNZ865H`zz*xoj=;|_&*|GJ?a-%-%JZD)6E z&~byO1opNK%lZ7euj^#nTPrfUGCo99*votco2&RzZblaca}WF(XE;aiLBY^-k?xF+ z$et0=eDQ3AJL4%wqh*&FUR-Y?0s9VtSohO;7O4U}8h8B5=0A)l8JjL_?}ib{`_E#v z7}J$K7q;(-*6zKqeJ_xI>8MGM9m7x(3wLK6ft_LOh>Q(*x3Ob|7bfRhH09E946AK0 z^4_%(?m9#EK+@~3azMe^F(3YS^qhmwUC|!3$aYK!#orO3bz;#*g@#2m1O;L^iJeq% z8mP&rJ5A=x#`@0Bx-r<8)H5lfxBqal{z6;*_ z4pvvy%7a8MQ?*k+p4*}YSpG%oB zh+fH2>1zBu+MBq`$l^wOmQiF3AQ>IT0g{n`nzM{2(*ZRq-YWq~YzqNNY)b%fd~<27 zfF4kEYXHdzbQ_>M6z&c{qGjI;NMfV8w8ZvjK%z$%qu14|@O}p9KHy#2QnXZV!nm|$ zfF4m$1duGlT z>R$ghko7kT*@ho$-JeED$waLhg47CyY$ALEbRr#TD!8Xo))62aZMz68-+n{GP=g@2 z27g!|(iVB4^I>FA13;{&%3Nlxil5ZS4#If#fTF1~6lf4f+xH4z@E~XVQ=`@0v7KCS zeGr98kquwz!1fO35AetV3z}`_E?BWH&45>7AQj0tieC?8{iS+1dw|9&zxf73LvJ`u z&H0b2sXpFvS3vTPeu+^HT~ns^2;LvroP{ZQ&dz1`;#1F@x?>Zfy4%tIcD@59s@2^{ zGIGL|&Q^4D>_=MjW3_sTg-f+unWhgB<^-ePGNs)!R-mlj%QoZ2&!wG*`?CuAD(=#5 zC^tn{^aGNXHXV>~%mVZq{9M{>+=XK`pl{&kQ7u$B?!~iku&8ID&awRmNH{hDlK#FO z(0cql+HTyXXZ;b7^sIe=q-PxlBt7e2CXPC*;HZI0Z(9k7@p!cLfLN~{?Nvb1i}nGM z^r^8AZ(#%mToryU?O(V{`l@2PBL`9=dohkWt7F$Vql-s5u^;Cj9yxHuteUuaoqPTL z4m9VKg$T;7)+sNZ*dJ$ainXP7@hyg2b2{i=f6W)MiM_2TcgD0gJ<`708#3mU?)6kg zk019aL2f9P4ZT>%vezyn=@ z0}3k=gEm|T^_euLj>EBjJHZr>x1bGJm6>c?WZ!&{nEQ*OTSB!{bI?7E2DUU!F!YpZ zC*%V*Z`4c^+9NebYLL_(f2ooOb7^cY!gw8DbR5F*?=jD}&z0c91@!{pq3GrLc0qka4EVkR#35BCM($J{l0 zGY+baL-t+t)O6<^?hD|v*$6!b4t_iz0K0Cmb|!6pkMP8it=s`FIJ(dw3SHycbYCVsvQ~d&0}fvhZ@zK8h!o z#$|j_uTBMYH8?!l`G7yL6 zuR?}`f+e`ffh^gZ0FK&hD#WC9s8ig=u`UzR;;y2B z_i)fR0`?+p$KPquy*2ekyeh~tefEr44(sc50DF|@l4S%@dsJVl#}MO*s$5Spg^&}q zaeN^Z`(WSiQC?M&PD}$tm;}4AnS!M`nkep}Kv)hUOgxk<+ROdn>b*)9)x~Oe+r`n- zapDMRf;c*C7e_r1M;JPsG53|7AG@zmgGD1?n&rd%;Q%Dm&tt)E%*ham-|;z8kn`TM zZ_!(j4KdYb#xIciOM+@LCT1^!o;iy$_$iasD8~nt)NjO&G zSvvJM0ZGHBrXrnz&0o4BHFXK^NkEbU#xC9QML-f>4@Qwm> z4Sp_dEbh`BvjJVLI0^x+Q&2e|ZsL2i4S=LOz6gkGX)bLDIwtoiJlchTm_Ip4iY7&A zP+$!0e#PmPR!dV&fTgQ8EP1!qUC_bKHDv7{lj)iy$G#Cv#^d^LO=95j+o719q(_bn z3Qfd*U}$XQNNUK~*>|sJc_oWSwl;AhmUw8oZ+QfS5FEoJ$5KL*BF6?9Mh=5lBt1e+ z-%griY>vkDP4xV(z)=K81;XsSrYi3d{ef+={V>;}kJik>s#02?nKxQ3=iXSars|I| ztA`J%u}$`ktQ7;;xTOXy?PEBglkod;CI-SW1ANlDYXC`WTntD;4g(Up8v)g+*0aK- z`>{#K)-7~w-CtL9R_o>tmxT9ElkRgs+|hDry?`X%DR}+{o;;c#5XF;6qaz3_Q5->} zt#Uw;@V)~`;=L2lT>Rj?g1dyLX1Qbk)9b8yyEb&u6=x)C*J_rfyiCy(&>+*<7SSMS zb#p8=WDIKV^;6IzleKKa!c@6K97Gl)?R1CWQUdmw0PR)~-6q}w#BoYmB%~_FokiHO z3Uj^+1AD`5LQOuc=`#fTsA#wwL#)-$eukiu$N)Vt5`nQbA;XM5>WJuujh#NZ<#bz? zprEV84k}?n^%Nu0*l6tm4o5WEz*dPGj@~wRWUy~?*f{cvqm%o#H_;ko9Zse}dyuQW z(3u~XKm$r&#!-0HBh(nRN2$!aW7S>-c(B`!<*rE2pl}vfTwmGP3EFOPc{mLSfHuP`pim?pDxJKzAtU zIzV?Sh)TSS(Nv)Y;!c)~;NLePb}$(=-#~wq6ubvWQt$yFt_i~J4UnWj$(qXl16h+E z=^fPm1!|{F+F+k%7F+F<7gA9MYU<6Y)UoBwrcUW|9$)Cdr*#ee;a>1D1mqb@Qmi-9;(<6Nw59JMy;_F8`&&oOMh`9UaqOx$Dy-m6esSf6?=rzUmbY zowPdr1GH$GkcM|l*!taY&Oca%Nrd9U`ll|CgWD;4hevCbjp;PB<_-`0x-vDTmqw3r zt9sj%y}gvZCxXt9yk`q8L#Xgg9G~B$NzH_?iIir_n!<(h+@2d3Hyp0GhT{)kQ4AMpNjnrC9e0LI081W z-6xLN0O1K=tB$lEFsZ%H6zqJYz)igxv&BvYU@I8> z#XhC1|MQTIf7V6z>v1Ccbxbkig#C#$9(R6Cm)dW`@~S7N$Gt8^N$u_MO>$H};dg`| zLm^UXhn3Xkac9{2&xGh!{wrH(g8W#!XHC;Xp}J!hewzTDU&9LdHW>V_hVZvrHAD*=sHvUm+3k;P8|61vTR zgl;RKNs8`ulaAWF&<({Kq2oRgXH+h=YcJuI;aT+3YC!eia;asWRe(I&AApl_>mPt* z+)6>Wmyo{#NJ2gtkXUHZl=cqA`&B?PGF=R4zQS=&NOr0gn@|*xjB4uv$!K*4pzkY= z`%Q?uNb**LFqRRl5yJf%MaLZ@Nfiy~B~`Zq;wbCVz71#&=v>}V$1Fg?Q45H&)TPbCUCQNFK-8T)s(ysyVLS`R zqkuZ`bE(6K%#w^8xZpp&>V;W(M-fZXeai#~1}npC#8~ITvQE$gBRDz89P*t9f_#%1 z;G5y<=_h!C%zI|!n*GzK1dqDQf=55y_iMBaoFzRZ_R_}gk&c&?b7V(wHwOPb(<>Kw z79PgyMINaq1XT?y*%A0(izVWhRHWDu2oA?>6XLj5KPbepVx0TRO_2lXA7g)fRI2;R zmjF0NEksx{;$l^P2U?P`Hi6UHjh2wAuL{Xf?O1VUzf5VEAY48N$zMJe31OSi(8#b2 zfpbx?q%{Zo6epF9a^jvg$_PDe{|N@@T-AQ`bMVjwyr=zC!`3G487e;*K+3wfj<~aO zk*`LU52y#EV{Z?uBbnS$>{cZX*`!sVbY^dNspV= z%ue`U2GT2QB=tP+J`Kke<(cU)ZOyPup(kj?nN?QV>4{C#6EoX56EoJnvqql<+WtZ5 z;O^;k^i}3gG#+E&mD{^mF)`F2FU)QRx1R(3Y;gN<=yikJPhJF_Oc~4>G#)FomAS_c zZB_fhBZzYO#jDy6C}7m8_HG57wUDZmb&E>_!Z(fW%&NhHjjc5ePQGAcU;m~2la9|x z8Gm1HU=)sI17ieX$q@7{KqAChFZ1y8C|?MP_hPhZ357%9CcJfNxqz-#bTn4JPeGRH z11DC(u>jC3c)ELiuYH5HYkW|6Avlq2q2~mrhXWpBrPWal8{dW z#NipIpaFV7(FIJpph-6a&^AR^2k2@=_YFWlQcwht#IX+0!wUCZKoZ-30g~7r03_4L zhXF}!F9VX{bsL~N6fY+WGBkGs;*yw0`xl@^3Od(e462s^lD9NsmbWxrmLazTkfh~% zfFynNe34W=4oFhP-H=X%?9#X!@_>p%O({eF=>Y)K!!?~%&tU-9+&Igic3p=bJ|!vc zTlSs6>=1)gV6oQre?I(2Y!S75UOMe@XIbw`3l&MMudC0e^3IxfuQur7sl zSpJ8xhWy7wQ~8%3q+Q&jshl77V1D?Jf;fBpJ|NBzzk~nA`Y!%+i&AU`VFZ%76?usU z?u!N=q^00mB!{z^57Z9JJl*R;d`V^b>Q~)NF(wVz@_nAuD4Z%mZ;@`bYy~@z%>=4@ z)UNMd%@7q_1iFeXu2bup^6_h=zl;mHpsKl!fdGKLTsN z+kS^vSXp=9d@pG>+4qFA$r$HS`kLiZx>CJL_h4ff-lWQ_6uzVJUZrYRn7hQvSCkZ{ zSLrMNhF2+0V9VLjewMK*9GN=BaxC4ktQ)V7=OWrmd+NuGlSW`gFEc4lnNer5cz_DT zX*I?q3r`mKn5r61y>aS@g3&(UKT}8ln@=$%&Da7P#o#^B0L(KF;^>vnqJa%D98GdN z=FpL^Y0J;+NXv{lr>MEzlvoP?!#sRL%sEk^CgLa$`j2+QgX)PeCZStUU8ty4?T^s5 z)4l#t+!5bA?z_FgJ^%M%*_ZKB#>b2&@OH+lv38vC$30XHr(DtNcKMjztaEUrLRL<1 zSdxr$K-j7<)l3_nhx1ZkXUem&Hc7PG!&~)egS!zDtCwrCzZ}dac_+-4)UqtHcb@_f z>z)m?hH~F_2&Bf6Kzw_?+i1@!*5{QADm+g+mFFpZt2Zm)F?ydiC2>KezPymhP`6~Z z7W)_7ns!Hr^BltkbvCrN*da{qV@Hh1{l;F0&HvP^lel9?9G`6Lb*klFokE;XUx)K4 zD?qIRIA4JGspkb&MqrO0g^;t;z3wzM``?Wf7f1C5%>HkOJ6g1QCz=u0Y`Zc0-$!S| zMS~U|Mt!J4;Gz^x%IS;-(CK)v1zHV`A4CJdNjCU@JJx_Ru+Y2#ZHUb!f04)d$PkoH zS1kAl^v-Cpvl1Go7E8M{T8yf@J(e~sTAUUO-lKqY%-Z!5$FV%=KC~x9m$PZvFCg2j z4;BTsV_^b*+9L}nx^xa>~6qi+Zn3@4Ysy_gXZ4z0DLli)KaP?r+P=C|x+ zoWIl+c!Wp@-p9J+<9Gm{&`-~)Tr@}$Q)_G&<6!>?=i42R^Pckonm6o&UuyHAG&;UT z+>~mX5N~W7hcn;#802GD+eq}UoR_W}3^VDrQ*t%}_h}mzX5cx0T`=d}){eG5asf>{LvL zekQ!f4*d)}c{&Pif+mD*znkx?7T$EzWDpDiu4{M=Xj6=JY z*FX-$+Mm#uq#{!v)5255Lx^?|*i;Fx)29V=>hqu>;&_+%QR&1q_;_!Zltj}WE6h2x z?APcnz2PThy4bs;H~biHkKj{U*y!j&W->OS$}-->X-xsNRFug*`1V%q?P!;26CAHN zK8Oa^VQFl1%%N7s?uj}auSaV)#A?@3aOOa8V#zEARU38fKYbRC-K?xyGzh0dtdj=E zb3{FG*PjUCXSCw#dx{{7DTfdv_k9NU3`bwMQHnkhu%}m?H0SK4YYYxp(zW zHCkU0tKG>ZT3g9vnd7xC-;xg3f$g`Zt(A?RV_TK2|DI*f@OXk+nu0=_`Vp&X;(w>( z9Y_-MaSu*_fJjjXjJ6-$KVs1ZYU%lT_yy5X9f#BCtGbvt^Nrp~o%%j5|7{eFMK8+cM;`(ya7~!Y}A2kz~b|vnj@N(_!yZCw3 zDu}4aq!Esn0EznlDj=EU>;QB%eje@bxc^i^?AF4|RXyS5s-D%R=KBiw6mYVVX6*&7f-Dh(rWhc4O}ez14r9%)7Lf2R0wlcG1Cr?kEx2VmK_ABX zDvmn<-L0Tfj2N=!*9nLc#iM-!Nb)fVqp;+IN3n39)TOxrNf`_WbhYAm8PIA4fk4mE zBtYL(xH1zrAJ8odw;YhfyAIG?;9MGy4wQ0vVu(REA=P+W322Sty#>%u6!fC`b^`Qu z!SQ%=3Hd%ilB3Z>4cqmJfF!mY6KVz|`Mn;HZHqoT^nfTDJG-yY{k>0kL+t8<~cH zO2@hh4#R?5AoRaATUT6=!&Aq~wx~6?Pxq;9y^Wu{Vy|x8H`4JcjA+ZS6Vej}-?8)+ z@QiAs;G(9V<&awm~X}KeppTe z9*tRhj$t4ueupixv9kuM_EAi=a8|Pls0Jnn3V_U{P1ho)d(BTlsw*gTO@agaHkcs5 zuPfnuiSG4HXpqULgJL+;t9H`7hVm43zJLIWx{xNQ97mSHbZm1+@NKL>!b$dRA^}3( z-AS<6*qlU~pHPW35{v&l=W(-?MKuzMV%S0+&g>khLFjQxEq(?E*(zWU%09C<+WtH> zdpGK1f`oQ-~a&5^LQ!?0i4sa8$hHz)fv7t_Nh8cg&S7A4yd)U9T~6V zB$XY1cm{zUq^i1Y2RJw5s1)a~sjXu8eSZH?WYp0m`&Q2XDndH2j;STu=0OMfFHRlv zQWemhk_T@EVD_fuVXTB{@nP&<$hcL!c#J8k>2k7rR^+0ENd-rk1Z0&9`Y>9gmk zCdLgiQM9mT3jyR_UB&bB!h14z89Swm;@aQ6AoA<&?}KH3!a_%qqpz^UqPM+D)SKvO zP?iv>(afNhJci_=b-^YMTB7^WO{$qa0o@q>Y0y&MTD}aM>S)g0_#K#TojtMFaR}%B zAS`17CP)9MMut;?oOkrsGMslrE1j{lJB;=LK-vcY)jr_W9M}vq^INFcg||2YPdE-? z7KHTV{KLI&Aqp9DAPNG#Ens@xnYpWRLvPl-l1I3^q~_G_fx~B@bN{{?DOYanry08J zcC{Q0pZm<-_)>i?u2&yJuf~D!Fp}NM{o?Jhe{|42yHk(U*|EYY<=^E?WtDgN(&Qi2 z7%f_KlsoNjaHBWSX(-7|gI>+_3`*zGOgI5#+w${pTy)3OU&VIDhIFJ&%178SpEH^k z$*JD9>;S@uwQt6mQ#d;EtiLV?!vN`5ii-RC(e|8E+ zIro~Kh_S;tk|HC0|D~}*hSY(qfz(mLCgb(k5t$uhj~r`MpKgapGNsOE>V(NH{+RPy z{k5nx*!wD36U5L2e}->S+`zMwN14V+9L%vVG$hV8NAMZgMPY}18^ulg^EvOk*B#*w zd;9jdT8izQ1qzjOkw3<$iE#_wEbiN=c`>Rtad0e-IXHyXAjl;4Ss!HJgy=cZAVuT} zhIpE(#1kYByBwvbl1DruUnJCYkB)*9M6*wcsA6nYiPWl`K7-!MMI-e3UhyYrATxu}^c6Xe>>JJ>Go3R=|K4I#sVJ5N?fR?#yN^Ot(woZU* z+Q~}1N>$pDlkKdY&ZRYlvxsj99m`oRSv*(y61Z|JK z7Ww@Uo>-`5d=@)|uUb6|@ZgTWY&_=p^etGwVO7fc*!kPpF1AJXxMR*$G=JL;5MP$X zsPr^*TfNPngOsnE#@Y=WL=(ah?O3CHzGK9b2#!bfIpAiy9m>nP(@9gi4SEX3oHe~6 zetmiCa%ezlkRMNrd{AHUJ+$oaq|0Ui${hqJcp09pl;JS3#YtXDh7Z>>W}m>E2F5Qp zff0^s@NseyKY^jzEGp~`fP`*2pz~3oE~SQx%Fc<-)%ba|ALA|@j{*{oCjgC69M1z1 zj+X&ljh{#RJ?`IC&_}q-gySHf? z!SyOh%OFT?NefNIX^toUAEJPd0Zw=u0LfHg2_Q+!jesOA+*J|9-v{0Bb`{Fqfaa?d z{0NXte$IwkDw75tAiY4nEdn%GrH@~OlGuJ^Lca$j@$w8WiQ`H@6363!R;y4rA^N6* zc$T_^_a{IS-cb|!DyBTQD7ra-)+ne6kkGvVNb>d?Ajz9|h!O82fFxdbs=;w4p!q74 zF@PkOKLaFrdmGR~_4X1>jU-itfTZjz0ZG|c1EQHfS{NWH`@xt73CC$BgbC5A0}mp= z|FrcXKaLzW4<>sysU}WKe{s~MZJ1$dEc-C=r#WCTbe%CC((o8dqn+Wg<_2>m3rLlc zp*|Qst>)K;EVH^tx=D;hCgZ=MfJOr==}4lEFXPeyS1X}`ZCBu;!MZM{xbUSAb^QDq zE-7G{n(ILaIduGx&($kCoa}V)15V`{ay8C9hb!dPD_yo0C zhp6UQMwU--H%z^UYq1VJWA{1yC< z1)o5Pt{wys&Z^i*>p>5Uv_A&uZwlH8XfGfhM6p|8Xv)d6^0}J&D*jKenPDB5qYj7n zsKenKaYh49X$DaZoO%;4GgaYy_ke^a18N&YT7s&+RX&iPd34-Uayfrr`9nL}E{ zV!^kg4WEG79eWkJQ*bjrNClHl9KXMsI$Tf2k&Kt3zu{+BVDEuLGS=SUWW49FF71jq~W`P*XtaW@A^Gt}jcy@bF zhqD-J$c1unyMB^9@M~A~s?+5?6Ls8YJSA)6{xdiga2Jyz>Y0d#UU%_lC|R6_@4~02 zV>tQzK|N}fdq>85?$uNsVu95iX|owGCh~7ORH?E(PmZatSRqNy2_4QWu!KK47F_)t zBbPMcIRBg@hzn_TR~*T~@&22lQ}%n!bgZ`00g~txykK%-9jwBrb7D-DGxjEV(!IvC zSqZzD2~*#@vZakxsHct98ke>UV(J@OUzoh}jpQlv{!*yg3{r^x@Cx=k9>%IiK0XA7 zBkj>@qty?iapF4$>wclmv)>&nc;={TMp=WPcW*rA!hVQ}O9O5vKC^)Da2YtqOC8l4 zW^`0Ph$e)8_n{f#-+>v>S}C%f*m~c7B9Cl-`$Xq2jX64cCj3kemOyelUUhtzQUKyR zruuNS`XJ8$>x7Vkz{u&r8MZi)W)HtBl-G-y$D@Ij(11IftDdVkLS zhu~gp@V+Xdg?qKmA$oT7yvQSSlB(xKDE^&{bT9>&%`zXaAqSY54@csaSj(wBy6k59 zv_Z~?pD`?mm8y*)f@>wXVPH_ow$i)}V`3hS-@Z{xP)65b;!chfCIIaNn7Je?R7I)#W zwDy}!x|M+T;^$J@pwQ7qLNxD(0EtFOHy6X-r%XoJ;#BAg0!% z{lHMc*y6}s~_nxmk109~y(pr`7q_M?o-KdojVUiH!Q)PcB`ms|!XxMS!gXZo0ilBu3^>fmGA z&EU|)@ENx7Nwd&%4NMwe!xKDwdT)4mZ`c$64qxuFjD&~x7dEHE@fO0TAtp{G<>Q^w z483@M06&jbfV&h=IUu29GZg zOMSvrLQ#7nS$gT3T6EHnJg8+%wOybf{iGZ&v^nuj8<>8&#EI4@IP7Kbg|}R2GJJ?a znJCwgz9mAN$0TQ)=%))?G3ajGJcTT7oj(oV!-@0ecduXIz}kM2@N~ymTB6asTrDU;b^rw?&4Jx6V_#8Jy^ejTVw2%%ul9-4~jm|1t;2^T*{jVXP>** zya;mHsKp77`=`WS`8E217TGf-V+(x*9a!^-Id9p~jU|o!XW^||y>-i5r(>)B(gBML z-SFMHVvNB{XqB=2Sf-lr3aBAt|E0pxP$w3nR^_oDY^^u?X4Tjm0}%>6Pk)VU608{}_4Uicxrvxdul4 z^ktxB4OFksI@aeosy;s;OYpE7&eUqyEm#d(K_qObHqj9%Zb=K3i$$!Ctee@355`!_?}vEC=^yiW4EUt|-=_{_1@(W`TICU82i5{8oyxfpg-t%RM1Z1`zL zRBBW=4*T4budjfm)S~sOlkCsJYxtQ zA`<3IK&Rv9QU{xhJR61Q`|XSW5v3?~Qyw`!d(WT zUjVuqTpsP8faU^nX*>s1pi=-zDCYu_P`JoNzfqhR0qB0kn**p`@p6%CzQX+o&>{tK zwzNP&G$OuRK^$P`0&;1enNXV3i0w2$65CmTBsMRg`xUQ}=~KU~`7gcEjboiwA|2ui zfb$a|!Y#YnDBdI+=fq&0lGYIac6;3E$K|Wy0>A;0K^#z0u|J3b#T<{$OtPxe*KI(z zH#&%Q8}-qa?Kr0rqU3E;G~g>B6!SZ$1P-`wV=wOr_F&KJD1L{h>*pkAz6GCBe!CUR z|5$8?p(3>Fdq4{%KK3zYg_tjLZh907HclnM&O%_z1}y)igz>4a33Ncb!I|+U&KTJq z8y4%z*odb$@T9ga+Iukf%ILXaa7LhK|Jkvw{byvPO~9-iQ}aMi#%b#`@LaA?+tc+K&!tKM^L&L%6Yake_uv zSZR4SDCqd%z>TB_Wwrc#IF=~jOq?65fRhklN7{;K(MGi$f8e?T#JMGeU{b9Xp0Mil zKlhK|NG9v@;#z(_o*%%^qfr1!cbx}F=qO&~IEf{Igl;7us!jM-Cho#Pu^}Ay0TPoS zYV*QDp(h=jtA)bx-++YUeL!4QcWEC25)KxNh&CSA(u^mMb}68rDCksl7pBLfU8Fh= zp;{Bi?^lWFpbf-a(7CiNfF$0x07<;>@~w)O-`0?Lmo{DB=51~XdFMAYHZ?cQ*Gxp_ zB=6j%OSO3|i(6XTyi3AuA@AGruw zVsB$>{k%|9OS8ARp((Vmq1Aic!lqCIB5C!`U0gr!8t>)a(U*+NYy^X!fm;kMjo#40 zmbL~j649`@Esk({xV|~mbYoNV0&l3rJDDl-E@-X4VQ4}UT3hBdw6!r&D&^j}H!y4U z;l-h$TBx;w=?Hn3)X#6QaaJv2Vphdu z6pFp57=cktld>V=OH3F`@doZD!k>2UN>EZ)1HE zS`kVFFEtfNd>9Sm7K|I~ojt*eki6L_-MLN8^Bb;Li8C@brY$M%MyY*+s;T+f`o&H2 zy($VlBE9l%${d^3uC+Dk9IXu@)e`!aecQs8@Z$N+Uk!N|G=#ip>kX=%w0XlwlIl-h zWP@SqO++=KgqNy4TMdlOWhuI%QAk-Vh{X+7IjP21->hm{+GJb(k_Io6+c$+v>aUk} z)8?J(ot)!sYY2smUX;+3;)uWIMbovB<9VpoVrvuZg-m1?b2<53%_vazOsRa0K~7d( zRf@SyVJ1$QWW%+DLrcSyK}$mm<3dyd$ks^vwvhT}Z+)wh12!^M%uE?OI+|i)yIP!3 zQlsY^1=ZMs8p`o5X=!bMJVF#I>(USzC>wItSa0@NFI%!MAXR~Bwp6st3#r7hbQG05 zS?LP3v>=7eH|P=fX@W*y(JS9zGfR01+c*kLlO`~k(HN4bufVY$fgj$>C zX>sweYZ|@8mZfG(B0!wh&sCMBO1D0Q7Aq-X`Aiz?MG;MI*A_OlL4cWwZ@aE3G;g7| z6{QNP>TPJAe{SC&+=CTRQ;pWhI zl$#o&?3FdIZ{=VZRo8E~m8m%}CUm))_NX5ND2*-6ABIvICz(Hh>K$N3x_@5Wg@joA)<9{ph9RJ&c=lCBT+4%z%(!Vm76T>9Fw5~&Y{O8;xx$9wgz$PB z=2JYawP8l1dLOi5s(|UVVK~WRSXK(}2j+kcvmF@vQduQVIM$J)a6vT_;474 zBjs!moCIjY$UjsIbvz9h+8inLyI}vi@Uc{^m@>q88oqI)jKZC%cktBBZW=};{ZMEzwxR>nv)exDQH-ZxsMk$CeoauXx>I= z&j9qm2PIgK>6Ie=2DPpM0!;q1nd@*(2-DxhPlr=cPA4Tp>Dj+B5Nj^o_} zzf7b#UC}%a*0TX^e719OBF%6`^Etv{zAB1-m?X_-D4L;q8E*MwN|HJ~Q_;MDJ8N!v z*@Q^AEi){&dqi z6g

        bsji*IW@29p~#nxAr>sSYHXOg#-*)I%^|ce_926dpEocr;aZ)5*ln?%6eeJ56EJNF zn3V~b+Y&H$CSV>)!2B`+^FjjVw+WbC37CBen4Sd85DrD^GFtD+378QHmqsK`4ZR7?+?1e;>y>#NMq+>={ZuU$MV{-WyWtUu4OtG zY3y9oo*XIEk9hrV!GbuhpXpqrv2#(6cBJsm%X?1Rcq^_QIv3yCxj+Oi_AOqg-F5YP zi|eGX2$nQWi& z*W!9s=OT@ri+$RWqQBNk$|wBB;@YF5Nn_{AQe5moycYeg4Pwb?8!o+}k;cxI4UE+* zbM7wsi^UbtxkzK@xj8ao%nBH}VyZ|Nu8A~I6=yv{`$I~VKM zk%EF#*TK}EqB9v>`*kkT*tsZQt+=Lt|Hs!_T$yeOi!^qw%WPZ@?~unWuK79_Y3y7O zNr=nnDR*7_WL#X|)wxJx=bEax^bBaRMU}5vac$PQNMq-^TydR(J1?*A>wb&tFFF@# z>|9?1#!BH$znFljl~INx(-{&*8vN{BoJl)UD9L$^-gDOqi))(BMH)Mo4;ZUO)m8lC z+ZNZYIu~i|TzQI%vpHTb{$|&67T0E-i!^qwd|<5c>z!R|p0&9CrE`(S&V?ca*BQ9; z`gHMH1Zg(eRBM)0#y*d|Z>|8;`#ZjKu?LTXIz~Y*sXO}c~u5w_kwozI+ z2P%nChBxS3q_J~VC@w>aYE#`qEUu?@F4EY!Dizmw+|9qUF1^8Nn|`$5PgYz}or^SfuCLqTYTUN)zbvk2bS~1^ zxvo@P`fKgQuWndsas5$8lg7?9TXE@whxTIErt>YX5qi;*#?Ez>;xby)?8EcoBwN1D zMH)L-t>QWpcV4+4UhtL`S4ig~jhzbxjgmLYaN2EmPO!Kh)451v=c-d&dY8~#!_I*~ zHCoheor^SfuB#Q7Q5q$OAJ4M5JbHFXW9O<@TzZ4ke&ybOw#7A7=OT@rYp&wD2zOp9 zn`gyIn`WJhG0G3-b1hI@=itt3;bpseEv`nL zi!>6_gF1$^f_d78iJ#{#1PxaHNorn3dN%4@q_L-`2^dF;Q|I{T)Js5VaJ{E0G3-bG6vGs{b}}x5f2Mor^SfE{LtT z6z+e&9L?D%`Jd}tq_J~-!^ZW_lRtxj-p8ar2;jq9&V zN@rPI=jjcfGt##6*pU4OLZ>N*txE?alJI;o7Y=h zcj#QCv2$H#3Y@UeLKnW9LH9arITvk-Ed;`jgH@nn7CHS&;fmVWd_LiydF? z#N1pMRy8bMJQJpA1r2SX)|MN5zA3&beTZP=P}p#tU)kbS%nQv6&uvg9ag&k}FR8z# zVMbB@%$5=uh+IEY*$yS6gUym276_YQHkXX3znFtC(VL%)0ahWL0VQlv!8$q zl<^>fR~9Tac>3a06w^iqMpH}r36mBvGh6f|_a8L~j4~|`FOkO5Plz)bmb6^kP~9AE zYnXprLJ3omsABCWyuM_ppN7`@#r;qtb#oh9E9T7$FKsgGwZGP zXGu$Q-L=NnsLmyJa0YQB8jDtka!|Efs9WtS3>%!J$$D(TIzOrTPM1{XbKZPuMJB@N z{qcxkQ*(i`S2IFUL@)q0iDopwJW-{_M1f{Tee*RX&7p?owx*Dk1iUD3sE5gENJ%-9 zVP;Dn4FXY8NNe9_nG~tFRcvM?k(*lGf_N#}a6N?uL{D5us#U}bvA*xj&S<da_3A{DJgu%dyrkY}|Ab9?K7d@( zD|D(AW1y3#Dt*{9-<8a&UmQk1BPU1;RqIqKH6maST-?$uebI~wSdiB=&4+;}n=&4X z8=4j@L_G3j^(DM2Xj;Plp(KRPxpc9_f_{sB)v`ED0b-&`nqhET*wVVB-V9K6JXK%_ zLFEH|(|BeaG~KI153Qv5D{Hw=$o%? zXbsJ5nXDeGAe9>OZ>XwYvUD*lleIcAwpM1R==Qef$`FKw$oN8xuPViUXio;Rui#e^ zB$M4px~X;<^dZS`UKIR*do4wuWGZ?`&UmZ$vUbqz^t#01J zhI!YZEL*N=YVc)gxpfsH?5jd8t#C+CTH^5r1sPlF${<{WZ40VkbFXB+c`c6%>>flvdhEGbiO{!_?bOTJEbX zt|-VWD=L8jDP2TzvuWrL%7)zRrsmx2+);&P@D$0Nkedx(5j>UK0w^i)RhE>MmK7BS zeRLx+nEZupxtZX;1ix(6s&capj}j!k!Az__=<^553j_WV|8W8kcMu6&r876%457kT zQBhJ}T3nXrqvE6&3{A#uDfL(Srui!a{=)J=vWS%H2qK{G2ve?mkHp1NSzKOJ;72*5 z_~-W*OMbu?EGP{GO7n{KYO;zmX$6${f@KB4ips)rvjSAb+R7dpO+v}%`+bFlWkr=G zP@r>1`HLv1kJBhBeHDcPR8+9ghaOU2-(Lp&6~6Lvmgm#GOZxB|elEG$hNFwgj2z{o*#^rhP!@4%OxngPd}W1Y z$W2*U(qxJoOnfF$f^mJM!dF=yEGt8sVNCIK@l@r$KzUhNWiiSEWc^Y31HKC6xHK=& zZ>B@7$gjB8pgd4!<<(ZU%YFG36~SqF6@J7b4i|~Nu()g@`d}9SkdtD2FU&9Ul|p#u z6`?n&)&pC9c3poFjQbH=(h>~#O7s2GO8uxa(J0YF;j)8!3sMV4TY>rWebdVQrNMIa zQf?T7c9+PEcg5LIA zHye&hRP%Uph`udukRq_n)GIIewWsa6J$sD2t~&{r`nFHl%%4rB0@Qc}l| zzI2z$%~mBFUsrw%YK5i6rKN=>{S+nKnR2s@@h*2%K`=LaGX9kzFtbDp@_qRw(~2we zrd19wlnM-y6x0P}W*`+lf1$q=y{z0vpDVo@62_+dJYPZOv@(BQL7|UBwA2>Lhc$P;@blL(}GC?jUM<_CR+ z)5`P9OQ3cn8>RXV(RSevaaouLjlrK^*^lU3oS-{Y1S|d1{Dp=6v<1{rA)2Mprj+lQ zv?wdh$TOtDw0sP~$wY{fo!Jzii2}aD7c9nKDVmnDV6?cnfeqt#5gKhpWhDkL zI;8d)f1!3O7b$65D!uh_Vk8e8HNR|H33RCzD06gcGjkQ+$54b7CHaBkvWlXlnK|BI z1@*KrSe{>u7Ku?t^?xOu61zpduc#ydg`l$1YUhT(oW0@teZ}P^1*Jt8Bn;_*hR)n4 zm3bJB>XTp73H{Aip5! zudG0c#}|eg!IOY_C_RkKno88$8saj_T>)+!hKCiJ-seCGVD zdALlv%*I9=r9qdKS+8E;`T8YGjNm5fv>S^ zoh;$Mjm(H6@xPsHo`g0r;lGV6A%kX)Y-9;3H*;hoOGvqyBO6(Rj!yiqlVvtaNap`} zlQQRDI-x#O|F4rZe!-;;9Y1Nxq$ytOns`ZO)+H0NCrp}b;RvBHFS+CruQ&73$vXMf zL(5j3CZ0o}g_ zNSAI{2I!F|i+3vCoj(A&9MIJzp+l1yUl1tFt1g>aR+4|&dBLh#{uwjRvm-0Y3d-|> zfvWSov^w|)ez)OQsfjy4;IgY~T3WBUDtLpps40YlO6E6QRS%`6X>n8ds^X%$3jd6{ z0&JpPwHRt^OLNn_`m0(S7B|$lHC&}sBOD&Ebm6#`xr?;Rw5ca)=V{syctmO1lQ7dU z{s)`pwYIdiG={tv%(&3YMZYC-#EBovs!fXFLJ=69{_lPaR}J( zWXCJ=gl_$0f8&rR9GB<~nFo9SA?e9b>R@m6QKXd6WszfpLfMgHj?e@i&X{4um-Opl z^5K*@=EnrmtN3}@bv%+QR_loz0Zbq4*jJDdd`CDuK|*t`IDa8A>W1U<-oz1e`njw4 zx;0K1QuH`0DgBd8DPjF+E9Z){kIUreXR%Mq*%>~$W|48Qc&h$cfJOSZs28Q+vrBRe zo%*m`PdAgH4xKt!#jo66fDhi{_(&nC0@Q=A94R6`;1f-U)x-W9P)Y+PE<|7kp9Vyfdc?~}A?Vnj(JfegbX$EOAJlRe0Y|56tt9rbRS4?#NEo&TGJZhUb&MeMuFnY{OHxgt0-AjrIS3 z>^m3uDoXPz$}36=l z%)N4~G551lq(%`e_cvg_OSWc~gw2&Atg@E+D=NzJ3a9nM&Vi&4cbiYmgtI4kt?P?s z!dY39r(`K|&V;|EX2QQ*jP|a#@MJUL=cyXRUrA=dcjEp2K6J@u!o3(sB2+};E}xcs zCVVp#o3&JKaIv%ZHxvFgXzq`rOEwecl;;u9JRV2aUwF@hW?LLxvhX-wy#t!hbvhPb zvY9pMhC#iYL=_WPe{_%GT_I>b(djtiB@6Es;HN^N+C-%a7v*y@x|e}J1?u2Vs)V>G z?~>8&0=^Q;Q-&7+F3R;}bWz}6^J?16a{=J$FWwxydk{1q>U2&#CkyX96vUA8aM%kA z2p9FYWOQCsd>w}P6=M_`w8!LhZv$ThMg6P`gpQ*^vhel;9|cY5LZR!gTqYyl1E3j| zA$0D3!uu)k&w^(D*yD%Sjn}(DvzaO@uKv<@9o|hEhvQrEsL0d-Jjv*0gYLJWxquT4T%3g@qq_q5-Jr?JA{7@5lG9NWxDhn} z%2s4*j*=|Ack%kfOEv8e`0?tmKK={uuAHoCJ^1nJFTc#@Ra0;#Gk(1KYk#DB5;TAQ z0=mC|ZrEjr7e8M8^$!-uooM{q*a2|$7cce2!=Slqsv_&RA4TwbA7~a|etf!S$X z9B?&F=uYS-ybj>+2hI30p-b(DE)Vgp08M95=+5Ye?g8MRE!VW#3Zd&SeLu$QL!i04 zQt0|?e^(;j%cjHec81WMj(^F@??&KntU?>ak5_;Bs781NGto}D0D|ij{E~&&3Vh8h zP1}keul~aOF5aC{16?0KUj5Ore;fnN0~9p4`lI79*oQz0n*6JT zuD|yD23|i4nrN-i^(UX%4n76V>N!H!Uwio-UVi|Z=jw#cgMZ1=_cf$1ay1T(s~5U6 z`=MI|x|ipo{mmD;;r-A-G;1RpG;IccyawT?;_b6S&-T%%(~yo=vK4jGwGV)f{q^<% z(6RmgbO3Z5f1Vux9p%Zk0nm*G-FpL|V>>@K06NOqlNxc0yZS4?^9Df2^i3H6-5Ai# z835gQ(5)T-9qa8^1E6EMY#jjI7|`t=03G|oparjprV0lIYqpkscY9snKF_uB!`as1gc06Lb-X9J+4-1*8v+~Tfe^~Us# z9su3hpqo4ZI)+z006NO6g#)0Yd|5F7I*u#f8UP*3@7@8>G2UMdfR6cic>r{mf^PQ! z=%|*S(u7;wm8{;Vhm;S1j_sg!0Cemh;Q`X!IsiJB-@OB%W4--y0Ca3uFAji?^7*X+ z&@p|V4uI|=(4DXdx40`=eUL75fONG3pkuk*G5|V`Z{HmN-3ZYAXaIE7LtYvH-C3a9 zJODa|_u&BOSRcP1Al;z>&`m^mgRj9Y?n+i~)Z;E003FAz$^p=^K0*VaV}DyS06O;b zy9YpbBItfH06Mm-Ck8+_6m%~QfNn78whe$T3v_P|fR6Hc@M7HJu4MH_ee#R}&|Lz$ zF$17ucvlU8j{T@<0CY~!tr-AaD(IpKbiM>j9ftR<1iD0v9)|bb1iHlVNcV#Q&@tYJ z66li0`;!DZpASpe|Bj{3Iz(Ikzh$XYzx01>r-R)WT9B#(54cmKOm^Co^$zjed9gV$ z>-50ee3)tNqtokn2B!R8&WCpLX zlV&`Zw4oH6=EuJ`xar54z;C+18)-Jmx47YYBTUdBfq7<_^d#2Zx=mbB{gNg1GiUhY zc=WcQSGFF0bsO_($DvN)e%lrzdmMj0zq(b?TEow9nfR)OO^tA!H{9wid_zdlPgR$jkg=HQFV1(y~@my_&IDo~YGMhQc zsx#2o%2R(9w<5GlZtYn27C-x4ETNxNEz@A$ncM`2;XxCA3hP8 zzUGsVt4pOT7Q`o0!=?$~=}Er>TD$2PT^RzFk32;lNBjD&OnM(=#mxbbqGO=Eypr`P2sqbh$3&^9rjJs3*i;0-`qEJ${q>mLJPggU3C7 zv-_62)YBEO)x;=-Kz7A8_qZ*G+$RN7@BL(R!Hq?dG3Saitq5Ul{jO|Q>{N*j25BUA~_b>cB+8z^Pn-g3wAZZ0Ov^|0+d<~lNGY#rYDn2!Cs=dRj7UHd4e$E#8 zss2T7at^XQUjCA-?FrW*|lK ze-iVj!2@JX=kke$JW18R*4UY8sUjKD_L|DHc?$R^712bFnaa zkEhj%ly9*~M`h|3RlXegr7zS2dJ#XD_9*UB((Lgvj!OxCS>K^p5xj;{!^0#GXj!Tk z$!F$!oL1RxPgb^ywn{Hty=-?baxT=6@GieI6>018r}7EK>tONvjp8lRi#LO0FdjX}FE0Mgu*KUD{OdnqK#9 z-vdEpYj0%Jpo}fEI+i-3!J{3{iD$zP_dZ5-r& z%8~44$81LopH=0lk5LEyrlreRLMjl}QH(~2nJb!TPT+9(l$^l9@UY0#RT}2hPO3CoQDIK_z_M4S>%k&Vo1M|g znCFV1rf8PZqM)YOlJ-fpMpQEy;EGH-4x&QGK~x6Y*?@%3k|GZQ$5!akcHrKLpIReg z3BhGDlodHLC^SBD#2LCMawIi0+GvNT_tT(MLyT`#J+arGWd?WrVUcr2w9Xl=Ni}3e zdUS|Bnn@!%8)TBnuL3$idgDV16#=4R-wsXxV%g1+=_tr#%shPbp z+Qz!>`t&ns+|u6|_2%?dUA;(81hff1kH(%L^8QXh!h1g;;r%h7;fnVWK*EdSS#=;CL)#C5(lTF$BPnNs zbgwO_J+G)Cl+_s zbk1@YY>9UC9O~^A-q)jR4&wpsd&fs>c7@!s2xxeLrpMNhG@~c_n}hhD^I?0wd!$d3 zCgXmp#{do*KxgHw*pm#fMrLS!R7B1X$h+)S32VPg2}Udg6OdHe1AwH`UIMfc zKbKl~6zFXe_h*xi!c#ah07-aChf4jjIuv?yTI2}5sL_#+Kgx^#GF$heMkB$JZ`kZa zg~^r+gk{w+s!_`?HX2b<@7*~7hNZ?v{YWz!iR?0!nyKlmB;M$Tep zOgFug1L&t7Xe^E+2!cKJ#aQ5|o+!Hx;01GX9iR|zq&aZp7rJUd^q&>~VQCIGm~=Or zbhiL{OVOqU> zj=pA;V;YtLt70S3@rL(i%G)Y~NMGNbZChJq0O#Q6QqtvIl_u&vG8xMN^elcJ&4+s@ zelCsTSs>L||J|vvvFwCdvRdM3og^*Gxnj(5a%fOvZO47VmRK-7R_)1ob(uLozNg>$ zF;=V8LRC6;HPTjn&c@?j&0Nly&KY;wsBXa6roglyexc62zOWZ-Dk)Z)3_5-8Av1>9 zPE^AG-R#@!U{<5%;4m7${%7Aks&c6~Nb~->$uS4e2kLDjAgTHmKvMPB0TSL0K*Gz} zx5Rc2px-Or9|98f;|)MP_<6JsaTkui0ul~3^u3DXQ$WHo1kc;?)D}`RyoG>STJqP*6YvBDNbu25z{)-*1Dg{8x+O7B`+oFazB;AZH>A( z-C#<80U3fcsXEIL>XforLaYG9LCU33TM(^})hLB{8z7;h-XL@=hGG8zfk{GS1KN=nJp*rk{yaOVgjGaxu!x1!o=7psofa<+BKoaIl$|D~=E#$@d08 zln?s+!?pl-YLW$E(K2JcwD{F}3RY^jB3PxWM&j8lTGmWF?IyaPDtiH4 zso;f_jDRO2nC^bG)BWgH#}@Zf&KEKQ!|^z$&ap8%C~;#1x-W|QEZkdEZF&JoQRf1Z zS}!4lp9{uAM(<(k5V{3?t9ZXb2tSv0E$*!fcM~9?`ySsa+FZ-lT9p1!PsR z+C#UhczWU}qPHEjd)~K}FIHhwuqSCg=$6A#xW}&x2oFPuu%cZEijvM;H~2%ciUw0G zHS?{in%MPeYkHTD#tv^D#oLrXS~wjNZb~3MoC-v5&d$)u`H_vzoOhRfSU1~Io>O|%Ei<)+NTw;qttu?I_U zrSc+lj{w?^pGVt|yKwN0aByy8BW_7OL8GVSD^O`0ohMs<=8Dp83{u z&d&$2jxH~hB@Opeg^;Rg?x%(+!MYW~)Unb1RC#Yk&_f}+QPtn+Qh)iZzv|)3UQKF@ zF%(5KkiIN*$@+4WS;%dGgzkDkQZ4O(q>yh1B-J9iU6m+zPXnzhcdR&Fx%(l(+7WAZ zxmUA_S=tW#*OF>`#!kF@{W_2&lY>~BGt|8csP3JgT-}2tbks#15P2Xsx>ZiU0U8v^ zcMusyo%A|D9Gs*n)&t7I&!w?xOC!Gqkd)HHfQ0UGKtjhN62=UmBEzigyCx$0MgH}B%-(dOeW zCDaT^IN0)Ls+_asNl9|5Ksl+ae(8||BamEIm&RU;Wfl)+)~+sCZuR!Yg2UHr#Y2jE zpw5K{LzSA0h36~`RTH3z9ba?qy8!+FQTHeCQB+wQFkYcU6EV_3qeet&1rZHPAOV3W z=`5YSlU4}e5-~smL?9T_;6hjoC~XD7+dS95aR) zeO>?-MV$}x#!-hdk&`U(5;U)s>z^;1;j$C znvlJ%FH6LWm|&po$~+%Om(-9!Yepp9tHDUgPGFQ=?J)W?-4LhGMMycCUeWmeEopF4VP{A zG<7-y^>`<dKEWy6-W&P^&t=00!~m2yMqab7Rj;g!B0D=$k*SGx zqis>4`A{fQC#arK$K&MB1p{0ssKrU0SYzUJ6L&W#X@x&Eai4zwdxVUcL2vOG< z%9rN4{R!-$R=J7k2h0~tn2_W7j4ATAqm%270rMWkG_1qh>F{>ovlV>Hg0EKa(Sk7# zhZm*^_+a3FF!_dehn#YANjKh}0NesFnl^pqlIXe$U;3C|xa_!GLA_lDVR{c7OzKtM z3|~gs?z<|o{-j$KBZ(*%kn$YP0(BC8GUX@6#84c|bFhqw3KMq~D0#xOOx!9^o%{@& zK}o+v&;NV;@YJ!F=TF+Ti+P`8f1Ig)kUPe*G_U*v^JoTGW-f-A6n)DndG>&kJk!9u z20y1(jJ;WR@Vx?FT;ti{*~s%TKIo9I4Xlq1eZ`L(JY^N>)U@g_A)Qk*V*!YKYcTJ+7annrPm7t`4)9jz%Xps9Qem%dqk(7UqGvuJcsaa<8OW;X6_zu)2 z{P^{vdQQ;?r?!cLkY^PAMK66ZYz|ABRwnidctRf&UX0@t^ievd;tDa7;Blf8KIJm1 z+YP6pqk!<5@8~GdA44Zq(84EmD1~_@s7(CC#J!Gh`8*s;A?2DlpNYEyloTd)C4yTH z>JWZhcToxP0sD^}t>eP6jn@5%={t38-McH#Y1-tdxqJ1*?!YP8cnyM?@vnI(E+c;? z?YB7@myp{eC!ztPHsO*Qo{EM48jQ&J zrb$>%p!#*!hPQgf>Dl;*D6Zim`fO-e6FwUnf^Ui%2APugKr&?Fu6+rXD*(G<+GV71 zR{8WIn$$gG&3Ak_Aae(10_d#_&jc8DMY%s@{wBh^mt@vC))-(&$Q2{NlN3A=m$4f0 z5FAM(rY<405npQJs5uL+9F){MYS>cmEK|4M#8F+mnA2Nf;vNJg*Ch);(t8%vD8?N& z&;H9iOV5csQ8~HOqNeZE$mn<#RI-)~O41|0wvyiYpwjSj^3_FxQVeVGiGudb}Z8%Jlj z@UlTk0Z<(m3992#cvQ!w0B8^_g;xhk3Xf{G$gTw?vO!Q!bK%_sO6uPOpv?M*@f}&y zs1{~lbs}fy#`l6;dBmQ9IRkCtTK6%MhRsW==rmGA14tE}1Xbi(x0O#NG;KP58QFub z+n>jNs=RKOL_*Rt?CA7wV0Y*Tf|YHP0tqW~3@cA8avIGYmfCORVsKMu-vF#|eAo+* z-SiQ!nDem5lQRPeD_%E0V5IMXRh^GF^jmCi^u_#kZTMF&pPKhDOwPh>o{FCs-aq4K zL58Q{`Tw?%?8o1r(sU#VEg|{GTGtrAnlsVni;mVv#lRJV9t6+K!TK`c&-Dr?vx&k3 zq|--CKhpYE)1jD^@FwYR1uHvT&+M*^3#O=V@aRo{KOW(hHP3W3-`L0aqE8I}WNVJZ z^^!LkZu{{N*B9VR6mQr1f^PijT;C60p#}Qh;XS(Ek?;7fX-j-&pku{Go-rl!-)^0s zgZq|_oxYa~?bwTOMjp~sP=cEYY8T@wLCHg+St`L%?;tqp9mD{j-a&AWnYcfhI8u@F z0Sh$`!MzVkZ1*ogy@4N`?Bklmm-#P#ePwnRGo!qi&?{g9-gs)}<%x}_=qK@d$9pg( zY8gXkM-dJ)gy`Nb;rtB4UheN=P?B$}ysk2FRiLC&&ognT)HL?{F=jUn9vX&`hBua~ z${0>QV#Da#7}B|$8k4k!Q5JG_mYnMG{aL6;1oJx;nHBR}Zt^@c^97(<@k`dI4S&GY z4cNCbMg5xaxaHEgnEJ3EH7>RmjLa~)H0of~6pu{XCdte#4L;TT_fV)YF>8J`8?uYj=YPxoP7oIcp-Hbabz( z#Q1VZCc(dsKK*v4L-D0Q@=+o*e$YfJ_8PyC$POzhzGn5rQ zo)f?do*CWmVTXBA{;R7`R?$u9d&mgHr}Pz_!8l|vI9B&12M6Nvr;^m^oWLH8MuMkd zzPln3xzW*lSLR(5=*qq*(3$!k-q?{Dgp5{p@s~yM>3H#uNhA8iD7!ltpN<$PQ^NHL{TCgXsA3is*z3G zI3Ujd#J^6x-NulzEo zZv2c%r62bR2xecT)ON=32}pKgW_H4gLCxM2yuVY+)QykkX*~w~MBv6SLxN$leNyQ{ zu%%ba;#)rt$8zgAprmG$f)X4JiRIR*rxVQ0yB(84`UMUDWXqY+CJ%{)x)8)3uo}nQn68ekl6({C@GG~prqLH zKqcen)TkCovC)Smf}0KMIWF?~p!$MJ)~F~&b`2UUlLucS3$2W=g~$ZKE6{!bKyM{l+7?A>eQz@B>L`|=eDa7l-*|m$ z^y{m>h$?~yPM@%wGZQyrC0LXz$fI?fXab{+ZbH5U9&6NwbEBtxt(kc>R|V~1)DQGW z2{II)8tf+>0F5ZNA;roq7vNG-%G85WO>k;i*vmM<3rb3vbcEop2PL?AP=Dd4aifW& zrz^MzOxz=&q_+IQ#64x=UNmv9g4)FCZ3gucezJ;z__BnkAI{3ETDitioRPd714VB+ zot$6EGrjAQT1CU_jhr6k!+{?{NMSEEjm=nNDkgeYz~e|BGBAarMO8CriC0|}sm;o( zLz?uEx8SmVOP)w9uXaRUK5^r#PVZit*u4}BO|gYd--K{=-w}LBh8Jz#&Pln6D=*h8 zJM^#gind^7Lh4?<^5{jrgkWXYMR+$}nHa1%+?_EFQ{>$fx-(!hbYUMlzk@g9&CBBT zio+hVExetXxrr-whg=JNle{jX7eyVkJ3_lQdS#RXeIqwv@1@8VkzPusW~^R{G>trA z(l3Ie{z_^Q)kS&2q+e+KC=)j#aTkt7;$Bel&gd7QM1pF8O!|;6k(xylIWp<9)8y?2 zC6hk;O&*ziGS%Y-C9;#L7UAdAJSLBZ0-GSE93mxiBt$iu;kKzL20mK3e7oOK&8@`O(l=0fB?;q=!ZCGeqXrExr(8`~r&@nCV_rwP0}rew09c74osPKQ|s} zPF%)T6Rkl_9p|3CWQiMI;6j@2I5$pY&l<;PEv}l!m*io(+PuM zx~?Yk6MunvOFpodm`V!=7^S)@T33_<{2ilIN3R z!1QO#v)I#Bzlm=cFS!rR^T~|49ecX!*N#2idt2tde}!Y{3XV9^ag_UA zukFQah@SUF14BpLKc6_2=3%D;9-g+&0YL^YiC~W6opD7uZv6dvVSWD6pRSIiE2Z*weLwn;v*495a+L zzr&vD{LhzNzbPC;E!`1^iq4q%caOnq^`6(dfH5=!Mm77pk6vvF#|&r8Ke0arzuV3p z8lfIu$e5$pQ$1YY_nkk5r-NpI{5*_3mGfO=wl{`jE@I55$PZoXx89c{)WeGza~&{L zvv0ZK<5$AdNo5Qw4fjBMmXs_E$BbkQxwxUadeH;z5%kz7#=ML@X~zA(pL%_GI%I`8 z;+nCiXYtqXr$(q_V;GZ-Yf%eXckx5r;pwC?=27e^Kb3c{MRSFKO&?MXbj1Aud#XSG z37!i^Ps}*R(2N!`qHSLB`5(hE>5RD=VqCC-uNAol~{AhEqAo#LTc^=;SiR z$ucpk!!UP+aUKZc{NCgk_x=~fInzvem*Sjdaz0U<6qECf;+$@B9Q5F^oo#YXQ=Bm- zXQ<+wY;rObXMoAcQ=C&w&P>HgG&xHYC)4DtRh<4N=U0j|!Q{NCI73X%HpMyLEP!caA&rYkAJ*rmMSIO2>#AH3}|3^)v_ zTa^@H>{2iSAVqdHZL6IpziCPRK}iwDE>!@IBaZAW+WLR~`3Otu?@Ed=cBw*e9C2j1 z(^j)&S4k1ZE>+G_#(nLZbSo;IA$6aUB8*+i&r)P9()O?C z_n&7;?Nd^Ou}fVJj&)yW|CUC)#I#;kF(7U0zI+tLY)DlB+XcBv~_ipF`gIg0=JS4-+eB}Ev!)K!EvOaArJ?~$-^t$!#f!q}y*W~mhHX*pNIgcv*rl!k$I>?Ue&JngNtG)p!q}xMS?V0@Y5Um)X;7I)4p%8D!q}y*1;@Hp z(F7lcJBHL&B}Ev!)GU@VdLrM3UmdfgzE@I&u}fXYQmX1`A71&&E=%eXRnZ7zm#ShZ z)#YgOZ~c0rB~_!O2xFI;%~C2WnBvUPEvY+|6k+UAb6CpAVRm8iSC-VPN{TRcsktm= zlt$LNb5~eWpD8KA*rlpj>Jsc}dn#eUE0)v{r6vhum#P8B5l7=++Oq%o*=Ls2bxMjb zcBy&bIO0@Cr8(<=hS8<*lpj)3gt1G_XDOrhZfd+~ktMZVNfE{_wScA6ZEK%5ZTP~H z>QYjKu}eWsAcuz3^T|8%EveC}XbEGNx}K$s=k@uN!N0JiDwPyr>{1I^%BWHIZkc=B zlDb_<5ymcsn-6IzUtRR87cHr$l@wv@QfRu6GVF~@SN`>GOX{GKB8*+Cj-`zI()Tum z^eMyC10jrEY6(kSj6H2N>5sf`UCXbe2xFJJ0USr1A@$;<-=Nzx>c)LaiZFJmdYjbo zX@j8r45@!8DZ<#Lma>#l@)Pg5Dnw&XQ7V}*cBuxI8i+k@nGdc0sdcTnN{TRcsQ@^R zxWOcXt@2PKnxK)x4N8hIcBy6HIM{<5Nsaw-<#m?S+e(TscB$pyIO5L6p0?-rj{L!r z`br-l@wv@Qa9VA?qBvI zZo(*yxk`#KcBxxfYAp7&{o$przqO?9RZ@hpOF{i1hw8NUo4G%Pl*YS?O&GgWBTEg# zp0?|67?f^ZtDh=b!q}x&f@9g(4>fBcdcIUi5ymdHilt7+p0=Z(OhqvprE#;8B8**X zH8_?QeQ<8Uqn6Z@N{TRcsWmKhGWN73Jos9dCH0hE(s2>#?DaR8O+eiN@tubWqt+bLNj6FYhg5!uwAQ5bn+pi9h+NY!l zW0z_M$GX$NGdY z32hw(W<|S>0;2HOQBH?N#Eybh5wfEoRLtxs2&54nMLP=Kh^ie0Vg@otpzSCy6?;26 z!idHl1!ctNjsoGZ-c|VM84L zuZKP|`KXw-+F+jG78F?A5XvwWMktfjLny;&;ULaosVeAD&}J=eq13_XSG%&VTx zOPnk=RuN6B<9^NLg;XdbBG>Nx={>A7jvocYyru1CJ>u3u2?$+U zS{I}Gs}qaa`X1GHl~yll@GYG;wR#!M*@m06tgKnNo>^%*g&tp_x4gt(Qtsh3lv(4k zawu#3g2h?mvxXIxj?GFNmz9>0l{OJaWm&_rvppfA{!(v_zpN-HqA29D#zQh|d<5A7 zPkv5bacN#jfoE>`C9}py70&kLmgf2L%CpNoYE2oEkQJ)-9Oiloe0lzoJfGJ?{nS!* zCA9>~hAs1y`wGen{RKHznj~Wb<>q^Ga&q&F3UW$4YI%}TRJr*}v(mH1W65jQ_$pcR zic@sOfK_67p0b?mvYg@)Pu8&90<3siVBCD9Eal{QN{R}Le7U)j{V2J|V=OK%Daa`- z^zoe{5B1P{Q6z9H`DJDKr6r|44>yn=H)0kn7s7a{8|mh)|8B_bjf<8c#+`*7!Lze#siIR;}3{ zUQV8;pt#&$lv9?^#m|d9qm@vBC)Zo#%`YqV_wukKUDnE<7Z2NCURGG_lRHeHsT zTjY~kAq%3T65J#PE3R_EGacnZbY1!yiX7HmmI(h}%sy`}zAe|brvCu;&s zRZbZlnliWKk*nT~3JA~5?Cqdd%!h#6C@wC}E{969YMNw|7MI&{m|KDlHZP~#TafF? zl`au!;@=fnlem@1QGx9!hmXwbA&tB;6mofKjwfr<|LtFBqTZaMk|J1T)ME3~QI~B0 z!g;-N%tXsk>vGC-3enU}vxOJ++scH@sl4Ls;+(=_53SFSR%3inW&YfJueUU!ebTdX zOt4*OY*~4JQFd-#j%T@z52F#cUR>z&OY2Y>SS}6(vc@;Sic!@mw6>4+dVR&&`9&x& z`*lzu^2=c_z!nzmcY>SB^^}+A=b%bR_r{e*to=y!7TM1)DK7RFmy~(PS3wW^kX#mI zO%k64WS-Goz-xi|Oma#*C9q9$^9%eQ<+;GTJGp3t_6K{Wq#!>J_ByH@Y#8oQRUc2z z4NQB6ds=Rs5$u^9PbtjoB6Q812pk_od(`bMD(t^_BqM`y1 z+$AU=N^|@0qb!Q#ILe|8V~*)=_IW5!LoB%S=9sBP?o^o$8<PcsA(Gw2TpSumQ~A<#(@J4_cM;v-~LI)LiVY~nO}f7 z&3Ff{m>w-DC-h?jV*eGtC&F-Pp3sHggmdDz`Xnql#g8_8qo%o&{MUsppeKG3es=@& za0t$mgzJVZY$x0>{2m8px5Ckf2b^9H+U)sXUT}Ben~AwD_|QEK0Bo1x z7b(3#xX`pSG;MJT!`P=}BwT-7_b5K*I<7t)p|5Zv;mUwZ#AgIoohRwx8@GtKnYixV z=VN&}-8eS-94S(IuL1Y!1y~p{f?>VpuNn`a>mp67q5{E2#S-D4 z;f4cu2Qbf$793SE#?@1AEj-#&aeSjN2G^5>`qBe85GPL^V<6;jBpl^?Xbd=zjkY1CHv)#u#w)Sl^EUhbo};Ny9E=i&W0^+)`t}(ft<0 zfEx+i;uvuc#DGIn)3(KcO9JlW7;rA&zKj7!?fQ5OII5>-K`)1Hk;<9s)$kZ_^s)M+ z7;(NBaC9G4G2ozrv=uSnsQey`0Y~-fsTgoj&)Uuyac{?fqb_T27|s)>hY0sUjJQu? z#Qh@%9Nq6%VYoC8y81DBm;bq)akibOgrDsEHBL~%l3Jvp6}*lkQ9Br zSEkAGGVkPTX2AZx#&?suU_paBw{C9rHC2nM7B5)1AaG4#!L0J!D`w^4y~s5S@z$Yk z@q#&3*VMytUe(g-YuIqbKw)&<>{@NIcIiO!SlN$#3cPr&_!gkQz6EpY>z3BlG`L4x zagm!|lq_0sGkHbJ#cLnDSgF@AjUaE6eN{`Q)lI9apGO~bU=|Mf#JTE)y`06luou~k z596wI@|6>@DtQ5p`{}1K$#Q3U~UJpx=uIt6m%8S$EB`)kvUG`O=PGb)J=ASP(V3#jT0B%fKKhl3Ms|KG5tvfT*KJ zOr&IlQG~bhfqLL@(AxpGxw^M47)WTpxY@Vo@@C(D{5tUKRKZ7e?|zhFA!3`t`?K!d z1F8c){*ScLZNc9+|J8j6LzWQq9m@0_ac%e=YM93*E1Dv1Yo835So4aJ%_qRBC3X@mkdhM zI}6nHjJv=*JH|Yl0jiPDP68!Yt2A*m8j)0LLEXT(dQhX7x&;)OvdP+=pk^}lYfwI> zc7sZ1svXo7OnnW?&(xV14?PD8PNzZrg{cccZDMLB^wv~R$=U)?g1Z5f;BEpXxNV?{ z7{`vo)074_)ZD5Q#c&g+;jXpkp+7dffKvoX*E$zC6q6Yt+(uFeH^Z;IYeNdo)QVPOVGiU>eD`7rb`1!wEDbP(xea#^T*50g$t%I=VqvGzifNN~1<4V8?>{0I>6 zsUJ}>N63;Pd2H3n8w|xfpVQ`Ddnpw2C`&Q-o`Tt8lvY-;IOA6hvQmRqMl6$f388@U zK*%mQTCdem0!RH46p8h8lJ4uwY-v!D0OD5-zg(P~b4uZ=-G^Wd(A`JLS$ai+UU6hn zMMA@5<8H=Y0q^>@Jn(uTGapd$Bwld@7iC3$G;_xcS7}SodkC>ZG7*1#b5rBt1e^-= zZ==G6WPATwP0-N*dxexuQ|pk_9s0JG&c1s5t^3*@i*v0N z_5X6L>c4>0|0h&!Le>8>-od2&Ee(Gn{a;V|9}AIe`hT$geS{uhvvdsT5GU#A`b&h(-F8}~bWdz!w8!?Q!2c~l|Sy1VJDw?nm#8R}`H zGeDRI?hX)_e5x7Y3(*;*X&Vh?Q17iDAz(NxKoSZ{^zd1rXv`&X52f!IisP&BOV;q< zVg3^}2YZnqEh`esKuIrh3n-D$L0yhtvi1=6(uzf;PogoiJ(r74>YKX;9+f|F9@|M(LHjFG$Iu11C1r4a(+zIU(Nv@)Z%4~3B8^1zK_5F)od zeX3bZWG?Xe0z{U|Y&^PR7y2o?0&;CAfdcFGY0?ao=oA{IN?n=&>J8wpTX3J*cUR@g}tQgM17Q$PX~NAP6KyJ?p|R5w$XjFVyTkgyUBH+Q3U@9vbbdC=4xgvqYPD z`irQ4jrg1Te)`VT?Fg8oe~bY?EKa>8bN8x~FwSke|J&p3 zXQys^m6S$mMceEAH<0LhW;4z>ylse|6O13Ex9EW`CDLjaX;mU!hDdABLGVrmKV*j= zQt(a#j=|@FY+M5IVApUwdDop+BlIGI{WN=bv01#wuVO)Qc}~?krCcj^rSC+fo}l+| z(05?nyDOJr`a!QeLKfmmzaIZ`vu`UVDmK9e#h=%V`3m2TX77H#?%mp*u}1f9!qh}} zMw9M+4TtJ+VM4Thd8}wwbWs&CC<{f2+XpDXf8VeKd0u#UTmQYKuL?S#?hoj z1V=6HPW+r&m5C$GB>HVNC~1q$phV&)pni#;Q~NpglJZlaq@N}GXc~UW8cm1@^)FCq z_&K!^Xe{M?b~LCfn3@1e>;Q7~E)vb4q<^Q_l4Du+Gf-(glm~<_aW+l<7q0@05!pypslH~OLMJ#4Q(GII*R!D z97s|JefWAs?Nr&y6is; zx&PZ^&@~94*?yh`Qf+yK^aYx7>Rb1J`yI~laq5m>;y4P_=|h9ug+$_mQ`%D-6OA;2 z&h~R6$s580bl(oWaw`NerFfJwkfAc5`;HK zg38A)Sv!WkXb%ceE7a+rMDx_51&Zcb0!lQ`ji5yHyb4Mr4uTTRlYmi#2x?`$w?=7JEl z)}&xX2W94`$c5gR(rbPe8LF0SweF1P`BwFcLp*JAKz}oJ$4&96o7?-qLfXCxN^HOW zCJX@^cQBa*o1vppTY!BN*d3Ygta9oonfT}FW^ga}^S!7Wp}V-%x{D-aQR?K`py=pC zt&!@o;K&M>p1u;4v?#Lgr5&vUH5tET?LO?K_x}wjx!Mz;B$a1DZNSf|(NmLD-UcP@ zl8QuH8TI+n%BWrX@k{0qgVM_WZnjWvDH;DoO9}00)nsYkRiE~5{fpJVNA>O#m1*VL zFoqiZeB`eet6$As@fdRt8h})Ky<>VXAQO`?!>RwJ{+26-Y0%5tLNe+NgI@BCI);%a zden8#;Hv50ObR5fysp_Rkuo_jJhZZ^TrxF#s7K`*saG7O%5}h2xz0c*O5FXS+?A8_ zGXse$9+vxcxHiyG&$`{P*4X!Q&jt9ia#?2W;3Er&D2a zc^!cfWXz7ZHqh`jVo9sZNl7e0_w}O+BRyhaoD-=qR`uH+|2*zr<1)Eluf#O*5!I0+ zhG)>bOWs1W3f(17ni@UdsvM&4?ZxgMh;$>j#!Q@%R#pf~S`@WQk)U=-Hnmf;+U3nA z?sgMLZCBdwJ)orJQQs&n?|D#ijn_eCyVKrMFhOOwpSs$<;DY zk}DeDlR|WAO`xQwqjykaSmJR|c})Eol!vJnP}xk;s6GvpQ#%YwQl{BMNtwp?zu>dS zK*@a!MLy zO>kZHro3pK`8Foucl_Hm6R%)Le$aldzAe?80LUhp_}}ch3bXVxx8URfM`Z#MlmrqZ zC-9vlkQgz6PDf*+nLtwH1a`I$P7NeMd|TM{cQ|}WS6r_27y2yBNnVSX$i^5mda&?L7?bJV%a{<)G+Mj#U?$lEzBdM>;(|EFH`gTyTGQ9g|gy?9QF_o`6WHQE>H4F`1 zY)sCeM{e4h21}mi$}t8ynz{ScCgf4E9N%KXq({$b{} zU}dMPbQ@-3%JI4eZ^!pw@+Wies*^FU;0cWH+D}Jd;_a#44*i`}U#sx&4Fo1NU<+mL zBjge09&1ld-ABkH`a8ye$$Pr5&(H^vCTC4%JbWr2 z7j8p}pWdUKgrB@ed4#E<*h}$K4=x&Hu1Vc!QqCsY5gc>8)+2DGVCojmrO>Z#EWf|WJs+WC5zx~vj5wJwh%T&K-k-i3lfbh^ zrc4H{Oj=Ss7a^S~_jD^*`r7kKoXt#k^}?mq?uPk@%#8nZlcVaE^n@Z)y#R5^MZFbT zZ`t99zQ_{-6C-y$?{@hji5ok2K}}6{{Za&6u3O|@&b+Vyx$`4o=PN8OF9C5W;xv`P zWtX`rOHyvQ*-NE(G%78AxDpFFG$bo(zjb#5J=Rh2|frBx+nGE_^{t<1qXq`Eoo znyLj0-4u5hctnBaj~#8br)SAf?o<-CxYZHTLs(fzS6gA9jYTYc0f}zPL5@?$R%&Zj zuZFc0DXJ;ze`}owdv{XOk~e_)e>uA8Uy&8s9&P*iVWDUruSf^}(oam7!Rkmj*WqZQ zjYCErnQ@jB4YNqmTATwoT4CeR{Mp?$&Jd`Ehix1$I4{^Z^uf_qlM}kQgz|o(2#sVs zN#qJ7!&`5W9*5y9Y_wh?H1@+8L>I*ErGm;h{`JuCXi*7_q2(!;fqHVy75GC}4b3xk zSn#2X3tb3mW8lyA;TW2_am3NGl(RwQ|9jkP;TTfEjyPJ9G6dAqzi9!Z=e5W-am3Mb z6tWg?-+a=caLg%;p`|F4AHB|pFARF7L(1O~N6&%KU)+^EFC0VNvLlX`pin7HZ@C%0 zL(g=Q7&9DfD$Nbcg zJbTJ_gmE4TA*0~&@j&EFb;jBVNa(x zjB|AuXHgjEmN3qSFwTQvoTtM$uZMAVgG23*HhJKEc@$}ILYHvSAlLG6{M;q?Lj4$( z!yZQ*X?@z>KQ!Q= zCH16|B8**%M!{D6mJKh>*=b3Ap`-|7m!kg15qA;xw2k=kxW|$jNlF|WVeC?a!Le%8 z?k}gIn2pj{tfUBImqLdDDWeR>x`sY!N&P`d5ymccE=!HXp0?vp?1mOFu4OEqC5&B) zO3x8zNX^-KAxglIx=1w~!q}zUEJbBYn{(x9=UGy9O3IBhb}4{xE$aJd`|13B1(wtk zN{TRcsq?|He9}L8di{J$>O&<(7`xO^mZB#@+l#-fnPN%xA=3jJVeC@Fz_D88w};++ z#gfWWQiQQfUBFV*T4~#U<4_nzMj2KsDZ<#LhJ$1Ii7)0G zU%Jtf+N`7qW0xAiQbuX~>QArMSyEpsDZ<#LE@CMvTiT|ryz4$oDwRw#Y=p5(T?~%( zynZtFls%SIt&$>)T?$18DQXL}ISZETwxsS;QiPEb`cQEQYfp!2vgP0Xxj)YgdG3dm z6k+UAqij-kukc39M#9*oV6@>{stRg$uki6F<0Ll1*rmpRV@cV)!Vgwbgt1Gd*`#Lv z{c2d$Ms3MZQiQQfjkQT>i9^1#q)L?(VeC@lSjy;1?H=goDk;MB(Hd|R=1V^ED!5); z-}bg>t`~UE6?477!ac|K3hc4gt`}U-wRb0io#?zQ&+7$cF4#NKd0N0Hm>#Zx!yE-i z^99_~Wp59EzcMcXUl8Irm>u%yjvIEba z$2*K#pEM|Q-+IZWT0o6o26!+2!`UMfzi<@AgtaF;41UlxU897`&e zb5(zDzEvR(Z^9wf!dG>DH64;u)Y6J+>TZ=&UGbo6x}PO4#UajEBROaNFWsZg>dn!q z&r_J6<16*U4HvQw2Yu#*uek1EZ$e`uI2+6H6y%iU6&B}}d#E)<@eEYv@s$>N%Sz#m z&h$e?)5JEnI63eK<}b=GE-c9Q$P91~*EaB`!@ll99M|O*d2;jf;s33$pcf}O<|H$m zELFpU52l$-?>ISm9{AeKDJv+?iF`$P8-hE((CZa?yztvo;49DnZ?2aEmwx`d@|=nkJOw3qp@|fhkP}z9zKZM= zYJLo<

        }I3Ul+|f2n}(!|)AAQ}2>#&IV_N+g<1b%*lr9zv99&IO$boKuw0)qD?`=KFD@W|YnJD* zaA#6^p7JuUw>;m_ChY2$JSUSgRCePR(w=g>p5mO`61e9o@<xAAX z;9h75UoKP*xj~cn2vHOdZn&r<&ktYB*^%lJyC#d2uUvQsgu~8qa^W1w32@}Rnia?o zzlymzzA|!6hiu~UR^yf;wsW5c?h^ezKc2Yp+9HDQEz{X2l7s7M)5B=Ev#r?^)9`Ps z;S?*qhf}Qdnjhy>DZrwl@qW2@U}H6!))k)}=Iy9lAyEw)HEVzrF{~6T#coRk%*S zq|n4P&7(#3wpBGy)8^qv8)c8ZG0m->9hf&PpPATEQa1pzCIr`;w=Er*XB3WxOOd=l z(U&e;fcb+O!PB2exUK!L>IbuH7pYMy4VWY0@-d}G!OptR2LM|Jevxpr-n$>>1-_?I zJ~o;pjD({}-={IAzd4m*Jmijq%L6VMqtux+4#Y-7&q%nTxQ}5NzZFbk7_StHgeyXU z-HT!7p)A4C#786?t?S9l#y5kxf}?4MNVq+~U6+UNiwXoslK_!$529T57iwC4vEXPz zGZJnEaFa{mC9PC&y*;d!IYsGjeO0XGP^Z)3ngWoQGh!7gNrRL*qWvKVmGzUpJZ(NyHU zG2loazZL_IUWs(XfTKzEzLnU8Y?1Dly2_z3;BtT)7l!kMdHEuJ*ARva_ez)u-0d;o z=zi~w0f+8Qdn`uWQ!(I3AN(l>9JRMMV!+YsrMF|iQTsR?1MX7bx?;ec1Kh-Gu?yKE z)q}Hez9I%3wYSAF;7G5nj}do&3^*#k$78@@?pJGx0Y`Syt{8A<19vnA9N7b|S=fba zk;-`}&JT?NM|w9u1{__tItJW$;BJZmN3VpQjsX`B+`brb@5hKc7z2)8Y`Ta2Lji zyCg!W(ZiC~ufc$wz1s=7)HgM0B*N3+63ePy?5miyO%OBqR9C zR-y9i>MsxA+=82{C@!T+3vvo5Y2&ScuWo6BzivrjVO4|qff^YKE(ns+kWN zgjOp=h?P3bNG^i&VodmhQ$#U?rcrphrI;>Y5WNCmHr)pz3Krsf=Y{w+T%o*Ra_STp z4&_G}KK51N&Kd&vz?QE^?-I%}kIm=&G`EEGfi?Ja_XazZ&v=dm7~)RzH%QY-g`xIL z@@@+DvAfeGw7ApsfMR!=dIh{`H8^R3J-#r6511M2zQG}14NKJ4b>jeoe60P3Yls^# z{Do_^wF~GkTtrmiukK51&OYAM8SlECmU9^N4-n}dwvHs>E>Lf2YE5g}kw9ypu`;r$ zHL>XvN7IfzEuT1BTH~8`x`WR2O+nYJYb&=f`hrbJs%eLNZ=1j;Hht2sX-9m^Cw-AZ z)6S%xaB|>t%4%Gzr7fN%K5<>pL5H8jC;EFr{JwK1p1M{1+5sd zH+?dsX-87aCytgjTqHj1BKY|26#4?JrL8~9Y{FHWKFLBpTR!Q7D>v=zW62mRYN{@u zkBrD-y9n#-k__CWNK2I{!v-LwH^3}j<^m+Chp=rnIKRRVE)r3uk1{n66e$s>wh&Z0 zeon0c`z+>>!;frG$vmwm5_f|q5Q=GVyqRr=26Tj_7+`^)1qw=F%t z`Ok7BXTjUDbU(-ymPzsmX^+Vw3%Q&lg{j> zR!1=Jj4p9^vSRP7YtuJf&C7U3T)>xJndBNlrlYoznl;ve9oQHzMB7Gc+2C~QTT-`? z`=rgO+w=fj(j=yS2zPim)6$$BU*lS`Ludk4I2_|e!)a}6xmgETgwU|a)>TR9y{MBs+_lqlk@u7RZ!TMbVx3*m1e zVBR>RX!nF%o5o~XvsJWI197XZ zMj5wl>?@qeMZ1>7doABBT)qcUrvIk$9TcU2dN1FDC|?%8B#JndZ@=EkSE|olTywis z&E2bNuFkb|Z!@3mQFAZLe5-yEm+w2MxobWl-HTe=8qa0C9o4s>snr!M>*BKQ)=+jU z_J@@1C@P!gGPByM+Ik>DB}I{MZ!Vx3x<}Q}{mn&g*NC^9wxfm~R5fiMN`h+Jdt6z~ z8dn)i|{hlUf2w zB-%i&;xQ9WF;`DxJ;+_TdbH3UOpnky= z>4W>3dJWVAOl<=7OQv`Y_24x}NCUy*chA6D>PhRq31sPw!`5{Nyv9Qw6zL()VlQ~g z@@v(l zyfa|Q@|wn7-MHRLE6I5$N-_}%u0IDT-IoO8aQ&%7RwToaTi*{P?ml7N&OkhdLF2G& z7t5u=v64@Sp1iTDH=YWysqx`Zr+{yxvPHRBQ?&i$+CIiXLahep_;8yHZ%|#^z0{Fv zm;1MSj}WoldzAjP(N3=%jN*VJlhL&aaJysp=71yRqkO(Qa5U&`V>0Lklzck}9qn)y zI2e5155`j)Ws`=-v0&v97MhAB<#Hi-nS<~VINdr4Vz@5O;1TzbBv&Zn_Xl2^WraDs z|Bz%yu%Acltf;fdeS;zyTdc6?>W*cWEn6%Y0vd zN8bi71)00yA2QRsYsFIi!_<#&iq}6*{Sc02b_ab=-qa6EECAVb=^s^1-K|CG<(;ITb5?;YDMtF7P>pI)pBdLiQJmKM(*uW$U%=P(s+!V zMD-Y2FJh;uFjt4@z4P(#Mc@QZat_!;^*WL1=252 zk4V^LZ3p%u@g69VI0))V{G3`V_9Ag1>X6{ZgA&|iP=8`v7AV1$gIW$=vNju(NKh{) z5&=*zvc%1xMB)xmH?YLdLEXXBW>Av94?xv1?^94WG4)SS%b22o19J9!P;xev`e{CU zxp|gcK+D-`^X#oAk6b^B#2-P?jC->7Cs5Zj^`^<&XY$%j-nS<2d51X3PS*B7i_d4- z4@~Mallm8^T%2`kPW1Nmj7tF}WpzF%DXR-XkqzV2MuL*ElHRoG$jHz+3b!>!LDLeX zQD|D?e*8s`n?Q33WK)>ltKdx5wT_Uk+3N?U!&xm?TD`F?{oVAPa92hy z2FcYrdPyi`*IgeWYZQ8f_0xXx8v=`%ov77!dpks}kZ;*gzh$k^t9s=jaz}O`^F#eR zSLv3_7FTI!W@FN-;pD?)A6i`bn|eiOrY~{DnW^vOWcrff2?bYOkqD2bUF}Ys1H%!( zY{(J#GllcAdyq%Oe*w!;xj%?NFyMacy7LCKcJ#87VO=ArNr&s|ccDyiz)@00z?IIm z0-ebx*_hk&pr*CLY1Ky4QMy|djRjWmAMzvx-^I;WP1nLfMg)UzUW!<-_UwjpWv zU3FqBn5I!1@JnXz9nvUf<5;TmB2ZFwUjfy~xH>#qsZ7g3C4lE-6Lt?%Yr&JLw`Ne; zEb$O1ksybgBJnh+w^`zOP*VNgGI8{6lHfiB^(Ny!HgW8c#V?i5v~E_VL<)mJR-Gzu z@s~#~S=!9d5-F%LA>leY9S!Fjx^rhFXW3l1=-sEn&UCFm&4G@uF$vXmeFBk{$(UeU z{{xyV+hN_X!wxo#<(N5Jz%e{nx;D@nYrpl_+i-tyFP5ktwAqp%GqI_0M`*Z@t+7dx z6=o!pKvogr7s0F&6N){(J@U;i@xciidh=b-0P`*nGex|wsf@#z zNkCigY3pn>PE!z!uBqXG7Z?Dun(d(jx_4LmsqD!*L2pdJ+&QG+W?1(f-tOH+MMMS- zDHiC2=48_IaIpy62QfZ2kukD|j1h`MAWo3T$<7fN9j!f$4mY*!iUWEgoRGrH>k<9Z z+sU46?9elA4F-;qxp7p-5zcs1P&)!S&GDD8Q9vfm{+s%K3wK8Qo8!lVrytmR43}XHPdah~V3!S%%%#W>x`H|7= zeN9;%-i-$Ff)JP<7Td#5b_ZPSb_Wh9<3l-~hq(t&{yh}c*^ye1!kAi+2A856&H|N; zpLlB$lVT{2?_+)*_M)Ar0~Lt{e1;_G?b=5CoZ3?CMdDRZf}>%bq)gRFOp3iG?h{aA zQXB;(5^<i=l(8GVhoT&g-4n91Sq-7 zXF-WE@FFO=OV+X@r_y`0kP&euhG~J(hLVgptd>cckU1HOu(TcNq6K%G`r5VOelQ~S zWolMuhEg905OD1Gta`??UfUrW7Dh|6!;SC>_ z`>Lx$nXSlZ7)P~l)ri!35XAe zH!R8iKtJZR_q85VS8X48NYD?^kV5-0>J?)TCLRgbYJq<9kv*-wFaN>dUL^tlWf-C* zB?JoRcjG)9q>0l|<)&Uj^84^=#SYoCiOJ&GUv#A8oi zhB?{uWII#iuougRrWFM@AC%z8_7W{f?N)G9u|!w>1k{!IC2NmiPx8syHta=59s(ul z{T-B~N7wuTKc_|$F_PYB)DzKUi$RrwFE2_vKsa#NVnDT*I%~T~QdWGWD$nA}TDe{^>kI&u)Y9&(?Glz7s zQ+p89Pnq{;P-RTLW#T>pbrR$LX5x;4x|(tQ9EKK5GO4pn>U@(*HK`1fVtrT&bvQCa z9eUxs(R`ij9RZ7Nq@f#QvC~;IB4?x-U28XBD%NbwJdA1t2k(4ec^3%M4#QkCc21>t z(AuQRB$p4$nC2H@rUZSP)@^zvA1C;DaM1S}j%oUzkKIAv4jfZ8!Le%$6vf8nC%ML8 z+$MX+kfi^9G~LqiggC6CTYznv*0geE9P2CBxb%3wmV+?o&UVXxQymUNOrD zKa;SbZ8?RTZ56jpM9}QX7V{m(3;OL|`X)fj+_9oR>`yQ2 z=6x}@g?qsKl&HhnezpCm4=_6F6o3cR#-Zmnrin3)OVg!p*y>08h7L^(htb?Q=Nu(Z zdU}V-9L=vvFNRrVo^E}^$Xp8g9wd}#W)3;Ci$X*?z^ri5NcV+I9#xq%^Hb}P>vab< zqA(vR2EoOQMmfGV4vi3v9wmT%{IKr8uI|7dPL{F{FYV^7sysAp9cE;;)66P0%no$4 zoh*q#6|TYhft7>q8-c%jST{gJnCbyn97rFec+gbPhE+^S`12kE#(Zi3yo>OiQDVE< zI7h~;NRTZWACe|j+M`28$jJ8$p=vc1W1!Ym>jGODJ%}%)DJR25V6vvI9*m;-b`hK_ zp{IC)TmdaC=#@b(!T@h&IMw{EdglzIhI+!%HWP-`+%sd%-WTMlQ=Ak|58YAI)(k{O zlc%9KrcrI`ZaAx{u>(`(_B)|*c0cr9$$WAEp6}K4k(W#wo7N7RSJ+H)L_BTL5UgDAIEDMHxblKK1;(Z zxdsiYNcim37yD321;a~0`&n){0WrgkG|fL;Z++b zN$=mFM3xL6kxc+arj}DX9aJ`7<7`kOkq=5F%0P+4R8VxMPVG8SB5}8gqcM%($U*q0 zjQbrZNsmJAh{P^XxAWBwfC@5o7*sAx40MQF^<-@rC^?%BY7XPFLCs}qs(E%ks5Q*H z+2q{@iVV+W?P*YVG1X$8{fEh;FKOf&r(hf*shj~yWX}cF%(54Qn!{8EsMSp6gA&>4 zphR}Q$)ga4l1igV-2tkJW$!h4zXK(y{0Y=g_$+z66WO;x<;GEoe*tPepX~&7D^qbW zPXu=wC`n})sI`1{HmFBIVS)kFNlYyT^%+yQfRZP(7F0G%Yyc$^zX2r@e*i^o72gbi z5()agN+foHTEepXLEX&MN1#?Q^*JcX)qg(B;8?cx`fU zWi`)x8>3@V_Qo_R{KT76!}2isdt*M|O4VJRp~sc`3mIt4!`yR!W~ zQzNmL3ReY6I;Dp|O~o&n=fp(zFE|$2&7jW3V|HrWL5VDNAT$S=%&K8NQ~$wUWNB0@ zvI(HhW7$)%7uj<_Eno?%T{)nfS`Mfg%)1IyEmJpus$l9KP%D^v9MnvvXizBEeH)Zq z_kB=uUFy)z#?PsJg1ub#2T+1LxsQRPk$ei{s6!LnFi?UUXX0o~|3_Tcsakxp(bz}qj^j;<;3O!`NIA-9OIiB3Lo1TJ)pQbfHU6YB(B;BVQpWlUuJI9 zXC!QI?dST4$d0J*6d!?tJ9S8lAv=}gJSCX#fAHoZt1uQMsGh6swW+#-86*X-- zy}^_ynTHX9>1ED50zo;xhGTykjv@+qB0h*{Jvk9UlMoiIjfn#=<>S|X?V5>Bfo28< z#;-@Rcw6}_1+?}Zbu@N5-on)pmhl(iF&WzsCDV(@jtD<*ds`SWY_Br%Y%eYQu8J5K zm=jaLWaLX)Qx+(xKSiKu9@WXSHuTEh$?fbu@ctj>-UTqK>RKN^A#sd|ChDlzqK%4* zhVlyGVbn}!GLz>df$;DF#*haDA)$FFC;>E3jRR`mPutpBYg=1wtF2bAf>7~+m8#dG z(#maVFA7>zRI1eczi+L5&Y6=l!D(;r{rwM|$vSI)Ywvybd+)RNT0vRoSt=B}pd~_m z3%|33`YC>OP{@Iv`u8d*^=~(*^Tal+^Cv_vpz53|NoE>G@ zua>lwG@tXhfU{1HRi>nVWi_f<>XuM;J$m+~ag2Ewtmy=g0?O$~q=LSW=(;OGxp7#N z*>v?WIhSH1w^_w8)2=M8-)u^6{f4VY2QyaXVBVZ<2bayATh3Ef-#$#!^Dqq$nwfkq z@_^Iw5$10;_>bx|-JanWt6!Ya2Dx=0x=$vs%5|5V7h5oyEOlzp_3#YSvHkKy#3-RK zPsWFPGtFfKF%lD5b;2YM-K5w?q)BRJGQ?a|OnW6O!inx7Om4aA#rf_*HB*BXu(6vU zHF6POLVkQRS>snwyui=wk?sPT*Q?8ahf>2i`pL$yPbUfrvWt5ak3{^jpA9CvM%f9R zwIQ0Pv@`d28bN2=ftPT;nV24Tb;=$(#TSwD5wzBia!|+P4p?#gYM(k2l=dC1pcK~) zN^z`z(-HT8)Of{x4Ll;$HuP+9eGJc+3H1~x_2mzs)R#YjxgBJVQ zTZB3Zl&(n60<}PRi$OIC)eUNmP^&=cTK9TTO~U)KhvBSoDYuw~E|iHm(2 zzeAujei_3MD?9}(Ry2*@@t{h?7p{M6o6`oWQ+PcNwaTGxa41d^uMpgKL1}1rgVNA` z2I?8O2CQF#(lkx(kDZnzja?En@}>raOs^*O1fN4NM4i;vyC<*vbi24bUFVi=gHprP zPS5Yzh=2`2Sp7JN-2(P7RJJ1M%HW)YE=yu??d(Lz=FS0K$HK^ymJLT4%Z4}MWjFnG znDnUFIB=-H=LOju)U5p}cX_}_oztJn&Y;=5VRrfhe8R()AoQj7*LK)6+M53acLbdT z8#}+&+j>E7`%^ROCNgI@5;z{e`fEFFgF9u-jCS9oZ&jm6%sxB z8ZKi?cfy9ODE0;o)YZ+gQz4f_4wF9k=r7$Q+c?d|Q$U@F`{TZQR|2EoemIp=S=KL= zy%Lmur{<(idnbN5(X!7kF-)?c^&R|n2=!z9YG3#ZP})Col&id_99{sWSbNH~pjyBW zTDOAIQY)owjE?&LnNp@EkT@PoS<3eRTT2;t0&D5A4Q6{wnYy_}Oe}fch&Q#1m~7bW z*@;7CQpy&nX(!f{eXiY1e!I;rijG)WSQO1&J%PJ0qQRA8ilQS|pNSz|QFPSGPZmY< zR(p!s4W43#GIocQu>-XFnc2G&hCfljZgL6`w#H&SZ8lMO%h1V)@4s4xRQBIphB!ac za^;qxE4?LWv^`(A9elgK=zQT8aIWheF#u0;Zs1xUJ`HC$hF)`SSp-(99VSw}Wb0w_ zSYQ249GuhNt7CLFMTZjm-MRc|3=Yu5IhNQ?Nzu4@2gCJRsX4&5OOTjf%{I1Rzs?eb zQ^L`m$re~K`d^4;ue}?4aIm_xBH(?ij+E zj(j>OZKTRTorF6eADFiYH3PreNG%4X-6$I_ZG6}fYr$corOg!+Q~l$w`ga#77P5fY z)>Hp}gJ<>SSy1W=2LalIv2#~n*tx4O-vG5qeBt&R_2qt0ihC54;{dtIv0UfC@4M-Olmik%!qI1Ai8rSD*N z_e2ciyAS{US$vbpvruy$!JAkx*E%;R-ZP@!KJ{R?lAOXu_Z7T?ee-#XvvlE1jH~Nn zQvz*~_ejhu@GjL$m?0#ZHggPwTlsE4(AdU*PjsJD5^Rk>bZfzL>o%@hfX`fbpPr*P zWSxvnZ8^WR_FjOOOgz>z3P)NWJQ8yGPvC>-!AzW0Ph{Qj{2m<0++44V2i5V3M{gMB$; za3uJu|HL87EqXNYPdT}>`f~d=;*932PdKi7{|kuCf_N1(fmdE`&Ds0Xh1}b)@`-Gli3V@x`{qy(W;L**WL!cZv zIXQ_caVWWwYt#h}E_Cd08o9RkPOgC=UTx7`ji53&wZ(UE>YuskK}Hbf4bf}%U2v<_ zlN;HZ#UY1v-G@xi)#qfQ$wgl7U-^C6u)ROgvnR86U*=o=J$s7YUU?JbkmCKP)Y&hY zr0?i;@hB9;to=X zaX{qM=jXuF2I^%{+CcpsR2X+aW-jUr8!h#Pd7C4?Iem zDVcWj%DsgVk(GvVRNp?%8vcofQ5!|GMDaU>t#pG4y;_{e3r=z7*{~KM27VYcPXROY@o>cxD6E7eJBHvTTVvEMIYvD zU_Q*@I>72H0sIo25#T)* zdy4n(VH{;0;}FuT+3sg+Q?;d+H%QZ+GhSXS=d)*HvS9>rZefO`5>lDV^~{gRKZ5MT z8?8PE=eJAokq-M2=W1f>2mI;LeJe9yivB|yra!dzRjx8j@GkG0nAovR{Y^#!OA6PC zYW5JT_T0nit);^e)6})J5-#1igR<8whP(;L!O&WvSax{_EY5Y*mwQ1S5FQ8KTJ|@A zD#0DJ-p8-j=JD`ho$xq|S6}#fT79Vj^#NS5ehErzK{F_w)AK-*N^n&{CD;SKB@#D+ zQi)%IS}b9(-(XYQjHoth?E0RL13kdUa_ugelzFTG6$_%{A!-f1JxnCh4@`A z6w%}dB{wz2Zo%`hxUs_#zoU`50qbj^_!P8$fM3P^43y%22})c3hd?Q=y(3QzC*)n# zxCG>9dRn@mz=;Zwye46n!g?t*B;{QsHfg(H5G3#FMQz_~rlqrkwn<61ceL}-1kuvgy{M%##!qhr9-V;R?pj}3Hj;^bIgU?>dL zSV6TtS=zXKN!!x4ZpYqkS7Wy_AgCWdk5?zW{+aF%C69_|z;$6!X6)vgAfUDLiyvT2NmDU;0w;|i?ispFJ1<4=hdi@EN6=-Yjw3PT+r67NlK%@lf)+Ql=)UG zd_m|Jz_2x|oXHA2A^~6(14-tT!}dn#o@-g|G6s2yS1cGixi`tn!SB=2j$G(!geEx} zQO5gd=^1V@3^ppTd9b7FoF zDChO{Y@`gzzr2eb(xAj|HI}&HUn^~4cl30#D5GgxiqICY>UDWbd=q%xVr_bCo-2&V z@Zzz6XSP*ec<6_3Jr`dvp;-Ucq3>9Odt-5{Tz_R>f@?$wJptzz&P^_#(VJSCDefb| zOTIZoPQE#eNxnaY=j3|=o|Erscuu|7}F&X4ePg@^MLo|bty97L`6a85^@ zI7xGTE(7NQ4`(Sj+dLf3MR$5QzXXRl;rjCuI4nFa=Oa7?J)AK}ys;h*&y<%soMgMu zOsD@_Th_Y~j}s8;dDs8`ajgf*@yV9>(D(y$X4GkOz<@vsTh_57)Y!uxF8UqZ2V+=M zGc(=+o1d~8=iD*ck2zW}+mMv!f|~u6jtBi1*1OD%Qeeh`+PdzcGyE9Nm@+eH=%F3d z+w*=j#gE~DFEgV8`GAO6rPptL*NtIb zd%dyktfTyx6UCp45a-iDedl#S%%ChpLU9c?f zXtggT@9}U_+vxtS2SfRtK8|g<+H%5r*TLAK(?YslHs@r+Im(e5V>m}UoFclxm&Z~wKbU1Gq&an=MdVF}D?EK3@6v&_-#YyecJ5r|<9yb~`Ld7mT_5KsKF%f|=Q$r|w~zC- zkCVj#n_P@D-@TS!vOS!V_U0rGN$N(^%YM^QK8|hg+N~+np5~RB>*Fl-ar%6mTYQ}F z`Z&~%<_+t2KF&TLC%|r8F8jSs^>N1eI3XYBQXglrk8_QOGrGEFVnLy0QRf>SGA(c> zO#}4{+~fp=Gab}1XxSZ3!31!YqD^!;6T#tm0GBffoYzoW9L^;Avpqw{>k`&PO10u< zqDWX1DaFMdms5bJ%^uEVJRR_G@Ddik#i$e>thET1A@kBs=^^`3ILTwCls}yJ4M&@c=Jkyi%V4Co|(z zI^r6Ycfxj8YL<~A#w*2R#`hWZZlGOaPdl=4vw44MMp*IU8$``iWsld86sup^0fOt|B@^9mXRXH zD|MzwosC~!AMTyg;7X0;02~)FUa8UGWM=SvdHw0vry*GTz2+JzV!Tpkfs>iR+Q#dl z2Y&aaEA>SqMT}R9adT@*{t_B{vcr1LNDn|tX0RL^NN+U&#SL$4FGBf0pET|)1dgnG*YK@U1#w&H6NZBzw_R$}|?n*sk zq=@lK<%<+^pI3J4ACsgG87X4CQe(l%%wQaNoiuD*QrRey4@#Jk!o@4~X>c+#*z)mO zcIhRzxG}uONDBSnl?imMHo8LW4_{-d+wX;*5mks`(` z#Xcc3gYz<89o2PzbEVEfndC)`SBgDAW=5EfxbEG!vCNgKH&VoSrC4q=GdSnsb?TFI zFLI^6XrzeoO0g%&%rF^aeW~Cz6d$`pZ8TEEc%_);ZW`w0@4v&9`iqew#w*1hDU(Or zI7zDN<*$Fwl`1e&#CWBqij>J1tD&UxMOUiUND0@RJV~L#w#^lq}Uts>e%tMcU-Bj8!2MEQs;x?wi{*7ejOdUo$@=36fs^Y zbRm$s0KdFW`}`BNuGG=F$|c4tMZDWPeD}_SYh9_hks`(`#TFwo;}rbz+IiB;&$?3U zj1)0mDHJBDu zQp9+rN<_-eug_GDyxf(#*hmrMm12F&%s_)H*RSrnvB#DAypbZtD-{7JGlOk1uXDaR z9SLLS@`FZ-7_U?*IPMtWcZId>uG9xciWsj{RHTCVIx%8j8_Ux5~Mz5q!!J39L2I?wmn*f)NDbMh>ON>{l5}eEo_Sd{Foc{8auGAbOMU2M!JBCB7*PkkIGBdL1 z;9T~b{>VrXv5O~w-Am73v^ z>iXcDy{^#t^mhP!+}M!|KLiEGg8EO zrO?nPN&V=vl^L$oY$HX?Fl!~AikEeEG}SaNZ3z`mEH1`UQ-qr$Vx9Q@i;wi7(DcxB zKW4DCu_0hX86X=1E+KafvPm`s*0E7GgnMe6WkZ1L{YK1&Kn^l%mI~!Jbe0M=$n;q% z2=b!bYYlA(l%$)nk9IhSV=`?BkZmhX{Hv2aEgyq)t*U(tP`nf~YYJ>=XjsyLPxuX8 z-OX(s4a+*Q&7rlSV;Rd_m(|dK3<0E}v8l7Wp{-* zx-r0hYVB-ku^JY1EN?8u_Kwbu75WhASh}FCy@eLzmNYIyh)8U{ei%S`NKR9i;iRA= zFxcjt?GgEI>iFSma*k*T$*yk#99+AEIaFN|NAY8D&9TMQQJzxQ3UNwN2W%0KA-@KH z`L-Gcm1YqfRCa~O?Ol;he9lLn;MMt9(yVq19R}hU;f4u^0gvPrgn?vO(9&7k)YP-A zt);oPsk^CX0Za+fw~{Vw^=O~fQPYC`YF+RI?U*>AYP2K6mxaUfSl_XrWl6MoVN0xS zNp}k%?LA8y%Nmz1ZJaeTV&Q9F+j6I@@L|>>c(hCADuu9W9!XGe3=V`NE3S4(|kYZ5Eo(Yb6QTR!4OYcCj@|u|Ocn zE{vFovRLOv`+>J}Fkk1nk(E}T>dBH7cLP$XJi z5w42ILflSUTqyfyB_ap`Efj(=TWURmk#fYQw6v_;=my;4LbI`!?*_SoNyUW=mM!xHToZ~{S43;7%PK-_OIs>dI@%N+ZZGWO%d5aBk`Jz#?U#(u!C~ zMO}4ysCaaw3|QG-iga&>5Lr#m4r1d;bBmK3;kr;|MQufGWmQdbTG{1FGH}S(E{%k0 zt13&YV^txu|FF2Qtz80*brlyB7uKK%AVS!8TwEv{kMYM1x*}9wT^_5fi%P^(#IhBm zpJwmdMne@PvC`7AsEkpy5UxZV%3$=STs@* z;>Kl^3?>lEyVMnVU0*tv)`Y5SYr?V8csy0e_TFX$>}+l>cEgNBL*;d~k-7+o6!A`$ zk>F)}vlHV83Qb+CrmD2O>f@xbZ5XWrHa-_mam6b`(TZ5Sye3+jN}Mf_MBhmW$udX0 zG#aXoSJYIYN~IE)(uVF6Rirh^BS$-=5HYCLh9(}H2KZ(o)FF)Z)ogJ#J|E%jzoYDk71Py#u^>GPZzw zK((Rja7|5hWo?}eLgVK{h0z(*#>+}dYoZ~$nbKCEyn0gcgyO=<{F%ldh>tF>@q~fC zu(GZyT31zB5z<)^s%>N25^ODJn}KS{&E+1E(s-yk8j00LYb%FnccemNXi{9r4dmJa zAZl*L)r88?j8w+UtNnp;^SLx4visZ7Q(0S8TV53pnJwEUEA@qAc;Uk0$?~so zO7ZB}pm(hbMM|TQa7kHNNcXNYYNhew!ilDXk%*)9vbmn#IvlDhk5(bOS%hSN`;g@b z&`3Gjb+oN!=lhV*@=#4_w7fDLuS)q!l7|Jw6DIp|t~yj3t}Cf6tBU$wCOO(@W#f^m zSZ&!*nZ=Fu$S5v31K8TFAQ6l9F-^kld)s_@5K8 zkBM%$q^7(A&51OV=)}+om|U~F!$xbxQwn`(UV{q@4^X#4(pVXekD-(L@GqH*^B^}w7M z8&BP5FHG}dLV@qE7iI!2@cs3`T1;U6zaE(H1)Uf7!c3f6eSf_$ldP@2zt-^a1rsJt z&vUPdQwkL0R;K=?n?#({jgi!K<1L6X> z?;MT|RJeIDdU?5ZSD0}5^;9l?8u=wKk0;?mxd^u#YZ#-K;v=tKYv93lVCu}i41Qw} z{|4dyhA&iS9AjC>nQty!=}(0l4gMRz9A`cq^TSpu95sBM1jNL=>)|w8B^g3z|Wd!SyOTI8Y-QK z!M`eC;*%7|Y!?4Io4Eq!T>K*b8-uZ#piCh5Pt4aK{68VH!9VyV^8x=K$B529BEqHl%@LzW+Q8-08q=P6Nm76T8#EeFC`5 z$@odSQl&GC-KlBdm>)H1;80Ahc|KgOul%w7oA1N<%jwa;HKl>0f9+}D=wEjlIOf~x zG;le<-I@lD<@DQW;27@D(!@QM1`bWV^?VvQc3Hd9z@f>tUP}YV?&S#dyUACo@<-f> zY2a9%&q@Qw{;W6+9N%|#8aQ^lm#2Y4H)AbI1IPA#Ng6oDuRRSM+taIkxKIc~pz)>A zSjp__Sy*2_|BQJ3oXE^sXLy;l)ulBh@o4=Sa_H(Uc(opPjg`StXhqMTH@Bnn%6ah> zd1Y4Z2m5clt*Nu4tE06$Z_Lbd^SHvlwCx%m?&i0f zwk7!LCi9;XERJCvGTzwTvPZY54kbI6l7Tw)kZDeU(BuLK9ik$j?PBodRUq@KbSAKO*tdSW9zVV>jGoIL6Oy zjeG+v-&ZWf$BM4-3R|!npB$?ZEqNt;_UgV^j_6vO*=}yY&34TG6;ggUh&a*`4Jdj4 ztcFV3QadA-3 z;|^Fe@vFE6pjvPTMRyLRf)?i)#X{YM-zK3p;&-7?PvMsvfP&Uv@q4~doY^!AMg9BA zD{y!-9Eyk5rweWwDD_WDR4FZEX3wQ5${(Y7f?|6r*!d1g+Q`gV`z4Tly+Ih#N{|^H z3(ZbOq5Kg!w|oPfD1Q&DtG&iWvvRKE@k3hkCmhYhb?LO^Ga zZOvD$wbIZPHDeFFND6j*VYwB$AZg$MYIP6Ni1#yiCr0}>_*?Kw|NQLf^Y`T3+>fUO zjMVQ>%-)^9y}t)GFSjLT?*uvf2`Hq`-;S5*pS@-8aHHgno=(fiS<6&|EjnoPLkUys zkqCe`oJMcRu2KkoJS42Z}!IUJTj33$C*^jJj_1 z#VE$|c)hi{IsuW{4<|-UNIaIm38r_S+B+T?7Bq=fGyqVfwI2Gvx<86tn5d+Bzm?-pm!4-q$ZNC z2no9W6{xz}JEgC80+MI!R*Ns!eKN8Hb~Q%YwGdvR4(@#zfA{{H9(|xd*qzhtq}knF z{MpGLldiJw3lUwdm{p*%aR;nA{JtpEZ2Vr2J1FLA z7YMZmzs*ARJJjbL>Nbb^9;hj}VUPo9!d^6JO>rpdLbyqIouH-)j&_kWEY;t|#FRuv58iAJsS9jz_EDH>h0H<~{k{!%iP?E*cGvCt$H0K-c;~}zJV5Q| z$o|`QfI{0r&3IuuFGi=zFEj=5Lj})B?WXoC+oZ0C2?e5#^^8BJ;|o;APlZBB7&!cB zShpkky>vup!VawJh^y;gw;!(|QNt_B+o31uU$;}MC*;(a1Go~!Txpo z@T-0e+)rA(fy{A(&%mt4Wlllh z@HzwaBw$s7(sDiv6oenf+L!*;8qK6D#2Q&5*!4r!L2I!R|&-$&Q>F6m4lii6xHZmD%2IA z<_UEzsQE(O0IE}{4WK513RvF*#drs-dqEY5E0tnm=n9|z1d8oUKosh6q#v}XM(;bq zI||vV5~qT?L0qXuZ;4PBg8Gb5RMWpws7pX`A9m1c0mWU?LF+0|`j*lfjK<^baM0EO z4S`gBw>5AZ0M-#U0JMgKMxfMg1kOrT2dR41Q{fwiY6cvu+RAG8D0*bWr19dKlC zPfPaW8iL$@x9X$j{txOt3tAdgpG|EVRsUL5cIm7A%#r`&+W*g0ew2a~wZ8<3qxG>0 z6k7%DnYH$_j$Mx%Wfs3$Qm=I=_RK2#1yCx>VYJqM)*Y4o2`H8Q4Jeg(7L-b`Y1Z2R z5-62;4U|f}4{8nWAok4LhMcKxk!_Xs^jiB%z|-1K#hP0C7lG2+Pa_>#`>z3|wf|O7 zTKj3VN9*#hL22!O4wTmZKY-HOzYo-R5N^QwJ1CW)UIDHBr-0Jh|7lQK`)S%rYkxT? zt^Kn=Y3*+XrEe+I0h&O7H6Le$|FMQP&_EdTbQ^mdgBpKMQsFH5jWVtJ?9o*84P?M} z{lKv9e7nI&!(dbWK+l+g9`wK3oxtvmPWsq5je_rq9Waf6@kuF7z~)9r%5+iHe=Z&- zQNS?Mv1=8FIh_6sVfP2ns};P5*#{;&H&e;6cEqi>qPE+ETDz~y#modPof&OFUG;Ow zi8+h#BWh349eexf*M1Hcyl>CZwhvi*k7GN6e;GC_xFLQ3hJ#?lc^~fmFv|zy@3}B? ze1sx&uFEO1Z3KvlzoUElOD1E^&|fl*qv#%30LZf~-G>%q3JZ%s7--8o(wK-L@@!(T zx%VV{I-_GnJv(yNAHrzgnIB`ejsb{Kw9k>G)}T{B9gSP3!W;(&!x>6)MLGfc#P>jlRS|7CT1g~AF zEuiKK^&+UnLcIz~Yvdk>dJEJQ;`#xo3xuLIR;{nB!&+ZaBNNdvef#F2%>8T1r`;;~ zU#U7oj>b{pN1(zx+WXs50j2Va;R**=au{4NqxbOo`^7)e-><7rw#w!mbNc7MAVoES z@`g!ikfv!+7{8PWEzbvY)^EUHds(2KD*{+Rkd*bbC^kg=bzORje?Caf)(fI{rigD$&6NR}8%yU3-f#Fm5TQC6glii8PO1zwSOTx7Ke}rsS+%)8a-jLNq2y`1u z42B5#pf(9k$Ol&bz%0_Ck&HeeqNKJs)JCDOoB)#wFvT2wxPSh3T0&TZS4m)={}Ijo zMR(=DnE!Zx@4fxA@92--o%5-X)px=9NYf}$(Yq5<7Z0mXWTExK`oewv(FfGi*#~HH z5C%yP^~ZNmEq@l_z0i}tCoz9p{?`0g(FXU=zf1j_2LFDG^h+F>_+$Q#{KwITS8Rrb znw(qiCpUUmqUQmGk-tAb`T&-=DjtUwo19y|47bI@(9mkyp|wTNfcA5avzCa(CD;vZ z;F2ONes7#%x)V(da%sNCUTB0RY>7Mgk9*jfPGE2LupbsQiZ_*1o1~XZ^R)TqmLr5A=+ct`dC+ z?4akN7np&!+K4#9(!2yl`|BJ_SX_ERox#cse^6UwVFu>nXg~eM4bdm;zQWk(-Vohr za~@U#%d`!b4Kk^idO1edP#Z3D>pWLRwee*q!Y)NSkr#zJ6TjEv4vI-%#ns_iacuB8 zPz%U#OK}}|R@@2)$1Y;0;QH{ZI1cj^cRMKcj~&gcxK+ct;vRKyPdd2Yg8Gx-p2x4^ z-T<`-cTiN8Ds>9V>=eQM1XP>2QqO*qP&B)u)bBto5Z>QFT_Myt!)%FZpcEHzs47qk z1lI;iC02sc?(VY=MLTQC`?^DM_lL%%DbuE|0(GPKM>T(qLjBmG9&@Od9O^HiG~DB} zY-%Q`ev!Ql)KpLb>w3pE;ZR?6sM{QhD)ux#9t5TNL9^F?5nncgx?X&i;pr^QHG@f( zC!-@#O#`~f%mv^jfb*k8Gyc*z4HvL!v0IJJpxV$B^4gK$z{J9ZYzJ1k#!-_7tr*Ci z2uIj5a2H*)qwJoKaiQ%UnyEeLnJv{oF5P60qs@XBngeM#67wMFV`7VKN#IY8+W-oE!=z_G2BYC#b7z8=?kd ze1ZuFL_x(8JM6$<@Mnj{Fg}uf$JBxWbX@%z9MN+WCzc@=XP~pxNrNPR{9%k7FyMY* zhMiI}j@~XFneSwE{n4O4XMwy=NVJdmW&tm<76%p|VOzq+a|Tk@{)mx?Ka4IU6XSGr zTn}VM4`}ABDVEGxQ#_+?PJhq6#y^yz{e#@mWy|<|pFq$!+n+@6*#VY?@)A8eIKtnl zsYDXve{J4@*b6%z&WPU_4TgmDIQ#T%orK*Gz0c8jOU|ko6DBj9`!L z`hrbtw~4!L!i;7%M7Jpi_F@@xW4gf}E+NSf^Cz4{c8dqPEEKfen)bsMf3z64{jOSq zP=*wwQ=Gmnvlg)!8B-4|L3SZbdey;iXi61o!R6@2q-xq#Ii(d4t;tCh*+!p|YA`JR zNrxv?F`~!y%b?7>waIJ7^Rc)C(l9?H6lVcCXSoKH&OnG}2N$%yg#7=ZkRU3Z>jLOKCuZ@ z!1^wzEkfM|YMr=p?eeoi{R)(J0FQ#=8w4%RhB)sFS~L*C)>;jCuN59=L%Mpw*^tha zXdpy=;o8PUf;$mZkx+S{LPC{+V!8&cd7$)t*)eKbEd%uwTm#k$P?rmCEvT77v16W83WLcIV=-}ik`oWBOGVd(HQ2GqKHq3}k73JWy})O4Y!Z&&AXl@5;@clC|tIaG^- zYj>!t9csOU%{1EpoM3zU}0<)9uApL;=FFFt?8!QJlQ z?gYiLI)+{j4qg2Wu0!FgG&=VHTrmR}wQiutS>8=qJB?LCcZkWgsUs(D}`-M@M7>v|K7|al~{X#?kAy#D2T8(0LLgTX`p2vxvIum9agCr9*9z($!LfELj+l#a zYdcXU6k7)^3y*`kLU_;NSM!tWCnds@0amacBP=9!&e|MQ#>D(Qj-X@;79Guj)!zX{ z)|hlvE8kneLmI#LapNGr@g_-d*n3V+aJ!kO8Oo@mXxNkQAKrf?v!TC0axp1uOfTuIf;m&OzAck6!O^JO zMJRRY8*CxUUHz&>@{GV8kQHOivrF)-dB%aW=Gj+4EyJzmqc!(7;`u7!J&WI~g?b6U zTr&&GcVJyLdLPf4qx>$fIeHYR9>E(4_aLo35XE>agKZ2$BJ*4I@4etA_cTdQMzK zFFeu^Mb#Xbe6Qb0_Tjv<@@IY*2>F?b`7oQV@u>Z$W03pL#{l0i=5Nl%`)CKviparv z!1@G!wX3cI#mopurYes~|AFwj@TfgH# zZy4m%Kh|6g1DVLt4=Yk`($0WHHueVeJ&6^N6CrN(J&A8lqfoocH_hLC0vHo;2f1m_ znv7d^2_)j#efx6PJ^9b9L(1MW=bONuRP8R?z`ov*7K&QV%`AA>boA&j{ADfOaP`0( zUDAe`x;kf(ja8F#F|F9#0cLD?xg#cj^NK+JQ<+c8u9%(!2^h`XpT9l- zd2k=k+^lx-I%m`ia zX5@o17Ev5W7K*C@wO4TU_*Gmls3zP&*%_h~Yrj(8bExJvXuW~m7}xMrXGceOJ5(`w zn9dQmt~_%t-@-n`W!!z3N1HZd^V(anqtbbRe^7JKxa9QV)>&QS&YCc}*`hoBg;A+4 z8didFEKd+P4c8-TOoU6TL=(rt8qpxbH?WPg5H^Y67ftjq-Z)DJD>i3y%Os*f<680; z$0EfUhY1~XJ#h0FZZcA8hszdN&;i>-=0KhTu2uj;Xl(Mtd9a5xQ#3ITN(}}_+c`8$ zV?Adz7r}Veio69au=>=Ix2SC)>|DXCiQ=~yb+X2HFI_g?8hitsrifQ;nz59uB|b zutjt+x8kYP!}&Fy=6N`58J2rEBhf4~?yf(j;N0iodsbFG4EWpQ8lBLt}@A7`Ayv85_~oH;%YcOd9xOL3p1m$TZ(N%%Nl z^Kobl*z3>FeVmOxj%&5Yj?b$;%$q*WAs;8eiY}M!&+$Ia**?xR!*MP9lo^g|k;k^< zI$6d&ho zA7`?U6ZUat_&5zdPMeR@<>RdOan}1d-|}(p^>McNIKT68UiESI`Zx!DoIt>rhCa@x zeVhw?oGK58%GqXOgz7C(mw7OBTkPYcV`7CjmX+zl^H2wyizBNl${C(S5(~OO5JMM#CWAfiWJ8hyuN(= z6%V*l_Zulf`VJ!j&pFQp9+rxU%VLQ~%C)uf-aMorX6VDPp`*r-~HEMZEs}w?Btmsb`H8F6q)DPp`*p906#NdLhjU7KC0^EoWVMT}P}4;?Z6R8_vATmAcwU5#yCQ#}n3B&rfb}rEF_E#CWB~h?HHTR$je%t}FF`35yu7)VU(X zaXzp6k2@EcW2eTSjTA9nsq?^bYh~Yx-@NQf4d?J37cpL`d~lMiBmF3xR8yuKDPp`* zV?9#4ZaFjIhShAOi1A8&TBJA+;`QNYa+bMLw-_m6yi()9$;>bn$@=-l*?)DV9xzhG zc%{aR6ze#z8+Xn`!(*r6P9sH(S84({u0HdxEoiH9rGh5n#CWAxvs|fgS@u*{>LMdW zj8|%sNU_D^b=OyZ^bJ>Pk&zX%=>|to@kLvDqrA{%;2{B$NBpG68=g>`i z{`P?@HN{8~sS)$*ZG2#mVth+Q&VI$x{RD)8(mM2cIiXg~AXs#R>GoBjv<+(mD1a&_kY5 zPle}-WU5o^sjx$yVowG3A8S|C|Dpo-2BQ=ni;SY*z020`-qmhXsvlmLF`;luw8g8Y zcNz0zHM@m*t2&M&ja^Mp?JA1j9c|S}Fluvdfok4vD(Yqe+A6O}Cj+UUIotsi%5;E~ zQBQ8392bwg*8}4N^jTA=q1JEm}IA++VzaYRKywuaX2MJ;+IwSR)v^X;dZ6Qs{8Eix=yk;|m`U z!x~X*@2G4yC5(>9l*6cZcgh^0USEy3C>!GDmRtL=1|sTM+0ll#M{fR0YTYAC+Lq0P z+W5xyg-cW?yopt;vty~2PI&D`jt_2Z%u}7we@+)y#w(=dpIXYBTTmM*=~e@HfVTn9 zC`F&uG12=t&HGpY_2pfnme|P)eT;O#%&>8Cqp5Cqu7~RO_Jv~dz|jw~h#%LWW~8*O z6Y0=l6#t7(^;sP=Te>=y^r(@5kJE|{3l;EOvqR~bEl?xh)B?5ic(xj-kfmYimH2ch zZ(~ZIzmcY9eCVzpq+dntY|QMq8Y$S;gz6DOTiepqLj~#$(7@7kCB!Dl9h9+Bn_&kjI&2TIfEw8GISAwuVi5?DK8j4oc#Y^MR!ORa+TFa?p6iVOQ z1}V9&2t`X{D2bMek7fKud$@Nl55+6u6%`fX z@{sfO*5FlNZh7^@;t778z|fu=kJnYiYog^t=r)zlywK!|@4QTdNK7@QIx&sJLXmhZ z7KuPxGn~s7pk)@_rF>wWbRO_o*F;Iw%Hq?f<4HJuo%@k+sIImGx{@oB!*f-zyP@#& zv7@lo4XQ2_i&eyGYpP>Te6LPY;m-IsHXSalt3ptw6pmIQYw&(h@+$gg&6ix&E(|5Z zgZ1f`LUDb#w7jykGB!j?J71<%b*!c}lwcEv<`|LaQ-?Mko@rPlNh|NKIW$ z7`k!shDn90u(Y}~S_5s&u{=ZvFONl{wXraqaGKA7L$tZ^zvw3b!lZ8EH6w! zs(Jq<2VGEBTU%XGRUwr-R^V-bC*q}1s4A-HOS06os(kijr`R<%3NmcWU_MFh%Ek_eSA zQKQP))TrWYwvMGjH^B2mJh$)fS>0p%{+``^j_vozq0kKyA!uP(x3T`A+;i|fet* zU4lCxqbkMi#B(0*plsUa2jHOf9)8*H2UQE}Xe4?zjw9J>FjtS9>(3iG^Jfkf+ImYR zOC1dwe@dC`woVS}v>HR5R?f+#NGkm05)QI8d2jwHGyL&U;N>Pp$kSglLy@sL(d{$( zXYY}$w9nMyPz6*X;B?36#5?9lrG;}h(AcWyY@qg`@68OTdWasxPJGR5YV62Ds!U5d zJCkJ>u}`E(q02N%m$`Au#!&^lx2@A+e}B(`y~8zPH~|Ztve{ds`;ZS%*|7)TsDBD- zj?q;iF+Q|4x}VN+Fr|VjBIe-agLr@wvKmdi22Kd=9+>;pua0GaN-@&YvU)~Vi1rHC|XA#V~S0+#IE~_Uu5#0yq zzM?3!XU>Ew2ONnQ)^nlp3ddmW*e~Y!Voln*Idkm8zRrm;=QuCUHzcPnDwn2VE?!y- zH=A*OFVyo1TD|zSUkf+C#A)@4fl>+ns>EziTD>j>r4m;;xHX^@w+@t6ubV(A?mM8= zzaN599P_6Icfk4ueiio$s42LE7Pbn=*YKeAE-1!P^=pk4iu!uS3w16ie*X?yJgcf< z6oJw(LZBAGHDFP%h=#EU)L9}yom(j7ko}Uw;~rUl#|&Cj$uM20XF#1H6wj*iJ8aN; z4b&K+{sHP-p{SeZbfLKWb+k~_s-#I+7}11NnrIejQftZQ(Ht^}3TolU+SGOF&8zt z9c2*7?tNQIH$*=UlK0wK2>E{}$i0bwqrX)8qzWnQ6hV`&3}``ktsyi0w>XSfDH5!2 zOSS4$Fv*U7=(V@d#QYoIEk&rFAV1C>N2On5>u91x#Zsyqq(8dt<77Y19S4Fv5LH_; zD0)UC#cQgf?SG^AzIFlBaQ?qZ^4D&JijM!opbt|#`?gHmyZql6mA(1tdIohKJbKza zTiP4RVJK_K!TJ3&wKdYQC^hFqcP=(3^{I4*&!+KeUfhglkwuB!5H%`J&4P#P<0YwQ(?u;W_mxKewG zj_R5~tr6T($Cb;$7lMbAx1jpO^;S?C2DO}M7(W1|zWfx_X9Y*i66(4c6#Mpo^)x7z zeZ_Ho9n=L9#z9c)1^1DII~uK@`f?JeTg3G=Q0hy*<2oG_(?4L9IIcC0>m{JRB(9B) zYrEsx3rb_a5vIN`4LN9BZUd#E{RouC<$h2am;Z2FpK@GxfYSHf<+#4#xV{HU#}m|* zqT%L(`l`h5Bv2aKnV>YZaiH|wrZ}z<$CdgS_1)%!Qva?5rLq4EDD`g@DD|%&l*ayZ zjw`jMsO#OJz9DhB&vD)4xNZaWEpgoeN<;fAD2?AfP#W6bL8*UP7=~#4Mu1Y+Q$VTf zIiPMA|HeD67dWmlP+G3ypzaVHHL0j<6DX|#p8;j+B`6JJt%JJ-l-5h?R8iME9M^k6 z>3dL-8tZGo+T!4Ns!2n871WQ!bvLMDP(kZ$Q0EJE5Y$h^HGq-eDB%S`g@nojRU*__ zP@{#K21?681*ov_>Otwqc0MRBMh2_}pso~ZAt)W$_JC4}&pOntph^YzMNmMl@~Lfs9jN+_OJsut=#P;sFi097N@zo;zX6A)Hq37-^i zxV^!9l-g`E$!lFWe!;@L?iI^gtR`KBY`Y4(YUGIbWS&i*#??oh+}3m9JQ}a3)xq`p z=rGisYm=UX;&5NIv|G=Bi-Vk6x8u3Cycsi|NvNfLDn#Lot zU3&Q5c?7TftY$fc|Nr*PIr~{&kACMbEav7yC6Wt`hdE(&E~ub+B3Db|7!T(vJcS%i z@+VjN_wPFg&X28(OIcYMl@t%2v)LSBWM=R~D`%R|UiBs#i@}&|!LV071=NJO7mx5` zjuH$%u-*u2&tHyx)Q=f17`7e=F6k^Z9z;Vr|GMX#AK;_8h=(~#^W>hA{V&6D&p973 z9QV9yfUkp#=ik&HYKP|Kp11D^~k3J4H(|a*TXw<>9 zrH=P;I0o`co#*3FC8`%w>f_Ayar`IDm-{g5e4NkwIN$See&OSY_8N(z{iaX)F#qY{ zjIOSk#QvDQozxTy94?VsA>8C(gkN1V6@;v#IvjTU*3n37hr@w|wIZ1Vr6iX1-yY6H zaIQfN9I1(uz!~sxSPw5n7Je%T~e^lmcaJ?u2h+kBE~DlKGT(oZn^1~ zu2hSWBE~DlA!lX=OEs^f_TPhk*-rUBBSnl?io;X)q*m3^MR~5&okofnuN24qnHj7L zyq=2v<26_6H%5vWuhgmFxMAIRQ4|%|j^S%YiWsldX(DBpjR$VYzs{A)4!{u?FQjJE67_ZbB9;s`0 z29ok?wUHvmD|MzvYSO|j*ScZdW~7MmN{#kNbJuDt;v&W?H3po_47UHgaz}ij z*Oi)Pq=@lKoeNH825S(nF&Ew#ai!)NDPlC%UosqGhgo;w$$P30!!hq3l2oVR0P<`g zNe3gFOi}?kvrFD}@=qPC>*{W9>%eJ^A&HSlqUrJKff<-s|)#CRr4^Vm{d(qSNT z6pAo-oa_R+L=>0N^Ts(Xoo%fv+=)n7K8Z!z2^$Z|G~-d< zf)^$z=^T(gIW9c^hKKNq8f-%s@XU^Gq)Kfk6M(X%ZCyww99ojNlQX%giTR+;(~=)1 zH?}uBjHJUtbwi*1!MmFf{%=q7gllTb%fpp&F5&Qd!%IVzksSNmDYx9t7^k_nDNVYE?G!1d-1U)y`!_ZaGF=9EL0IIt%#OIVmu|m zt@8GX06BPqo$-SYXN1!~e^M7JFAIkwaqKXM=k_l6)PBaRD=N#Xv5lSCe3;_{;j&O9 zRuU--S4Qb6)^qIr{X-n^s11e7s>@4Y_S;QES?cj5#MJVtlA35~EXMG;0OWOzg(D^5 z5@eaW;&4#XhWn|}iqh&xxTf5=7IauDhJ2=hDDb$Kx1N}Ri@u87BD754F?BqZ?2WF9V?ysUkp3Z^)EF&rl=3a86S3H|xFlNFPv z6;9Wa7(7|gEhj6A`(Owd(_~($PF76j{3rPu;$%hBAY7`G6>Blt_|S(-eX?RTW;N?L zv%$sa$w`A0Co66N=G#fQR3|GqBKsjQ_axzl^6x=lo=n1}^6wl(=y_m1Ff(FKIZ~ah zcoY1OFk{-s`428mkyGJr0Dn2gY6E7xcGM8K?}C2`0{f5w;^NX_D*x6Xehrw>*t@eC z%~UuppFM=x$TZFpa1Di{a=c(3mQy(D#x)IhD*q+`cQVGkWgJ=J8jm{_j%v40&By1F zu>uoilBsY^mt(O4`z74GhDw)Ql&il1Gr$0Gaaxwjza@+xR)PAsrh|(E`&76US(f!~ zAwI;OFEII}lnQqf!hQS#yhpL(IOI=-TLAvH5b9Tn;yBSug+tV=RlwY1aEL}q-1or$ zJuugVLEz$INh<&NaWFT6Qw}kK4VfPuz;%>c)*q`B$K*-n-^<|tHEvlOYZS+7k_z`Y z_@A$ZQd2Cg^Wt(%D%@ug?m=Ky%@UY=u1$rTfrQvK2OA47Q{40+{JR7EE9WCUuw=vw z-lq(AH29weW`@Bb8&l%;A>09=PFMP@dMKxHE^qy_5lM?N`Cz#d5_BRqkWJ6<>pP7ZYw? zpTM0eeg)w7ue7X(aq}7~{a7Ei1M}Ws+@KRIbA>ZAtaeQFvwmbY*kxMP5u znFfySc0(FCzQ@uua6#bKq=Dmtx8aSrkyJ_Mw zR{@-Kr78#X@3=H@OqWlkf#c%J_%v_~_xv<)ET`pZ;27@GG;n;66H^;Mh;SkOq$L@#i#fjNe;n;J8rtQ5raw`{AqclXRsje@wsA(!lY3 z3(~+b+;AGWQ-Pb429Du&rGaBQU!MjJ>w(s-Y2YRR_mwno=K;4h4IIn;TWR7l)&QJz z4V7=ltw{obOod~*oSg>lG~gzufunyj)4(zPu1EvN{`b~2a2#H5P6Nkw{BLRC_#W1E z{Bf^T>BstUY#KNWudFlEz;ViWP8vA&Z`0Gjv0Tkc1IPDmP7~Le296)k)}(>s`+g-2 z9H*5(OasUK-INB7mZqe0H5$M{GI?a`l6@QG2GwOtTIw3{;lo-8Er~tdq+=bOsWr&W4IRKI%l87HC{ld79Gr zS_CzN`Z-D8*Jyb(VeS{j#fPbZv8mMnorBKgu}($dyDukNlR{id4{H}bVT z-PCZ%FI8Q2-HnY&@vEOxhA8-PfRRuCrwe$Fiqf?J28JNOtr1^R4$1~>PG8lGp-QlXsYENNkHqy#{Hg>8t@q;&TI{oK z5bCS=RoUA?sqCGgGEfTC{<_LO4Bl^W2dyXZs}j$FQVHxCu()|OAokr=f<?x5Jl zQ;AGqR3aPHks@&nepLcnzRihSV_7sS=a%Q;gPX;$TPS4#nNnvGdjv~KV(Pm0a@I25 zeX$V(IqSYj>LRQAC_P~Wc;BilYeOun`zTuuoNREiJ)B%{ay^_NI6)6*Bse2IoKfJ6 z@^JFN$xGrmmW{L20;-+knkrmi=WFRP*MmZxjo)se#^ZN6ZfHBe?=OWyn_=w4uK@M9 z@R+C12z8r7-2;ku(AtDw#W6*d`U5CVK*gk>(TU+GQ8+o3fk3E^;Heu6f00wDVjp9G zkh&%sY>E2BE=s|6b!wG^5p9F(3UQR6gzxD=GrLH!YTP?lsB z$EH?s)u33E0%A={am&E_Z;?RJN<>FMy~3Qii$^}nsqNy7oZ5q?WtpFiZjIA$*S)Un7>X#Frq(}y*O)YYy`xux&5nh?ZTMdAA?Sgp27`LqkMq{?n0uDz*eTD z^6QjY8m<&`hWLX908cCgTAjy%(rP*d)UR->`VF?uK`~>gI9BYNg~x)T>A~#ez&apj zsooXpM*KPzYz9nyBC6vxdZ=K{NV7#i=ufH&#~k z?h)KspcFUNp-Mn$T;@8IXiOMm+Ha>7`8ZW9_2}KN&K|frYYzgm5<74#vw!~nb+5SX z$|))OPp|TXMA?Wr)Jd=d`bpMp%(?lm@Tv7yqmMuok?c%d9PFRJ3*Neg@?M}0U+!Pq z0Em|L0+>7AjXdw~J-BY;sy3=JSv<_t14l0cW1lO!PClLJ-A`=?(8*8-l_$m+GLE4` zF~S}llRyVT9+a89l;}O^=oLxK-&Ll86!q?2`7LNUaZbQO5dd6bc*CNe9Xabig<_VN zzyI>YW=#stjkHLxU~wj=1xp*wGx4kqKnT~iOTKS+J5vmxJ z7Pd=4-6}jOSn~#VPa{*QY+_3V9ZCFya&=Yqz*SnVSgN2uXJe0}k?ExrrAp)yb4CWPk6z#9MohU-w+kkr_fBnRqAvZ6t&p8JIIiokn~#QPD3LRYi&D9*MI12$d&z z9a>RGG9Ac_-nTdatrW-sJnqko-kYQ)#b_;J;~|MpbtxzjMLl=ttp6Ky8ElB&Wy0%W zqmYPiD?w>3irpA{P4Xr zfYLDj;ZQsieyg|^gHqRWP#S}opfm<^LER`ZmfkV$M5U!-HxXHW+pA# zf7`A(l<#Dtc}>Kyl902OIsojJctiYQw6_mH^NvY zw66!Hilg~OBb>M@x4&m2+Pf;JCOYjJ4Xc}`c!V>sUJZ{IA>Z`JH?V$f9^AFJN<4u! zpkQNvd<(Rh@tyt*sl~(U)D`jAC7x4h9EUIit7fqI;TQ%joNDRt@gy;6WE3xtD4rffeYsDSke0{?}1vxRTm}VyA!?J62DLMJdyu={%;eT za_)HyiWPeTiDwg!?>)2cAe!Aoba&$Ey(hET1qqw+BNC4%p3Q%3FJ7SFNkn0W-Tty0 z(s)OAqIXO5Y(!`~i=ta{*5`4A)Vm#xq0;dhg3w|BAG}2b|XTfGy`_o!vLBo^{w}^)Q0}Li-v-R{wMD zt4gG5Upc$b;UHU`^|*u93;5MmknI`ys-jWr_yC@j;*yWHGRJ|^de1?ihIR%hZJW;n z)eWhD#VvW-HeUqlS@D@=db?09ptPmE4wSaEUjn7AAT1;-bt))rbJ><|6xmu(+A>me zhw`oh^`f|54@%>laHubW(%Apn;ca$!+d%0Xy$DL*=oL`f_U!_tE!jJu)Mr{KR{xGb zJEyWapj0*pN?XBGKqa+;qyE_$)*SB)i|P{ldk&)3o@WmUQq8aisi!O(QD5*1DsumP z%TsxXad44AQutUq~*LQ2Y2d<5Q2*q z;hCURg7YGkxB}GB^P)Q)iJv+W^oxyizgqnw6m1qT}5?6xas|BoOpi}}c z$W@YklMyGUIF3veCr;_)9Z4kWWRAA2KYjq~d7PyE8Xo6-%3Am2^4$NAwr_!tqPqT{ zWy2C_+KqKpRFsHl(I^iiDhADFlg)dRg$S`Cq#+Loh6Iyc9+m(aqO3#k(c1d{X{%LR zwX~J`s9IhHRH|5Q#flb{+F;Teg=(sl{J-a%J2N}k32yuU{WhPOoH_S<&V8Tzn0xPJ z7p1j-P51ls3)W&{5lzaa@J<`P%JEcPy{~6j)@Rf!$HAkq=x!9hy*L@q7&qz#>1Z1J zq$Swy>)1A0-xHhjhJ8{>W(ZIaF)*MG!4Y_e-h+qc3f}gv{}~=JSAe3-YM@W11FW-M zeKMd~^8g{~xWr!7^rZ1*!sU8J|c$+t&i{TFL_0HaO z(0gqDxD;Z^L&`XF&LItR4$s8TIhYd;Z+O?uMD4K#Um+aunu3wVq3qDE_N$Oj2kyn} zmXVw}PPtSq(_9ATl%rs(=W=%Pv=~o>QpQqslX64VH5J$3>MG@iN|oTKEYX5cj~2z9 zX01GYdX-pAvQyGVJp$@gTsUPEcd8sdjb`R{F-5v|Gu4l~R84xpCNDfr0`&^JUJ6R8 zE1lW+BJ-%4Z)fTbP*QQJzc1nYEhve{Hc)xEJlc!6OFZ5JCAbej39cKIAD2h_JMMzx z{_n*&T{IO_Smzqady-S~a)Me(+wt8rZIxLEPH^gV^kDYAClxcdx;Eg)Jjp&(M)OeQ zjYIm;v23&!J;p5jvrsmxq`#w=LL=3O&`!)BP-n9gZCzNP3-KNgHXh|1Har&H7gyV; zGl||Zf%SsXs3`lpk*-?D_6#V)!*4nI(Y^c^`=+qO}`r_0)KVAIY4ve7{yCFbqGOMoohOT*wTj4{n50+ z3gdX#=y)Sgm_*=sI)v%K9}$1=`oH6zfDZM)fP~WYnTPewn110ooW1%MOu*1gXy{OE zW?%NZ-u2f5bBiHt#Xm$HeM46N0`oFB@G(2MH#$7KeNSW>y6+vmh*6)UPq#aG$T5A4 z86;>zwDeHF9^6$Ro}(ikYu^KNbG_dFhSImiP`BApo6#poi|g0#ro5k%ihlj>?BGuC zx{c^#oA$z}3IChMC>;qVb&~AL*Km3G>{e;*#^G7&WWdCgff5@u9hBIhS)jxQQR6TA zR)P|J9iVDZmOMNcFZ#$<-Hpq~XMl+vAqyqF?e{^6CHogBu~2EyAeQHNP-3e>pu|Fb z7nE42yGZbT%llZgiHM#ON{; zM{@~+3xT=Zc-& zv?}fmlu&OVVDtvexAKX@C_U6mMVLDTX!l{7Vo?m1-+(n#78fteXm7{@QqDIFxL-%{ z6srf}19fngr>?o9;nI<<>HV?xCnJ`fRHtSx9EM&-^bK@=V{Wl>GzZ&%m7s4ZLDf!dgWY&q zk{?5blW}eSsYdZpa#-LChRVqv)Xq(>j`cG?+#j%ZRtVLxfk1_5m^r z(%QUE878gGBWP_Ni)(Gf+6E72haQ804L%YXNe9`#dEh4y;oOnr#?*!};m*hJJ_t4U zlNw3mg~PfET*$UJI5h{N55|J`3`Fmj7$YVNan$TUbQdOJBy4p2FtgONJnR-nv!B-$ zR7dc31@BR1H@H&>9B1HH>qu)Bp&a8k`Dfd zrt8Nh)o)TR*s)vK-{U}uZ=*qpW;)wkTql5%+^+y7<>d-clB;t-QTltdg`gx?xx0SV z1JEtUxO>MBCmKVjSn$Ce!G3!39vj@F_#p8@D|(sHn;GlW=eD0~%pH6?OAU%2iG`k1 zgW_HUiw)9$IV{#!rdP$HkHy+Ih>71m3g(jrz)w1L#o4qzO#|Rb@HghcWHVlcq8CoN zjG1O>17P69eDTY2d@CWEZrGX>z5f8!rMR9wb?cu5i>w6MDQ+`4Fx=k3PG`TnvJ3`% zC!BYarBup;nC?!?3~uX6@n;5ixr4i5zw$d(uiO|8>%rYZv38R zFS>&2WNAH!(M-DDz5$)kP1!-TD(CS)`7sH(9(oROhcS9CJM>8VwR-Tu1A5#*87mwt zOC$-2qo*-Yc08#1%%srf;Mt~w53okx`1iBf8yZlLK;pf^rSmvYe_$#T)E}9e3QEdz z9;jn*dHCQ~>FS2?EFH8fLG|MDX^TwiC!j=j11PbCWZ}dTJ_|}LAz1*ia1^MY&<2vT#CGgAxlu7EY)igZdfcwt%8g`1tr|slOkAC-rv( zY?FlaSWptn6F?OMfv+Bcl2~Sfl2}dwB@#KHM1l@Bq@Ac9tr(O@(A2R=w3rl49Sct; zw@|T9Gb(mzT$^N+1o{S4nyrGSti>>V&Q?Rnam-H39Oi6IL!2d?$AgkQpu6PX7*LW2 zxhAgE#DzggUd=RdW{Az<|M89?CckwGqdfrBh!wLCKQ(g?JW;GEld&#B@-S`n8}Q#O2ePaF62hXv=XI+3P`x?2VwPOnZ2s zC$h+q>w4*(?*nj@#ssYh%G4!B@i^TfS?s1IYm@zXR#(?P*eA6pggzxgtE#6N3dcGq zoNL!W-6xynsjTYi+ykBAfsLeE&1YOnVb=G|irw1}=D?fOt$sT?S$X8W`F2#5N{5`m z8UdSjZ@SxiY$q+PYtZx38)BVlWPX{kz4Pm!wd-&K)4UpQCyixSFH5<^+es&!c6Ihq zm;}lGNYNVDNPIOAqxkz`8~1~QRJf>;f@v(4@ZL;sZiiSwVhf^Pdctq1=IMFg#JcfV zd1}Y=uF=C1Ml2>Z%t+G zMtWfUS2?hew27yklzEu>zNu_PYR8UayubcL-`??|cXKyZ@ux;gmEP%?b50p2O*aY@ zea2`KoVLTucqd(HOT8&&M4|WBeQ~Oy8#^ASc)4^gE;`4|+j$A{SLamJIg|V`e#qv$ z^{)FFBr1(%xcC4By?eFgj4eY~o#`|Injk|Ouv8`M_j4r)(2$Nql1f858kAJsGeMDI z@bLG3eu(V#@L?8Gb*I6l7ni&j5o#`;-(wy%q@raBDADp=P(NWUt3ipD^`J!de@yCW zP#@xwx$KpoJpA5L^pSBAeH8ddS>NA5iN1e>5`Cp`xtCpOJ0*jrcZt3m zK#4vwg)|rL(Qd(A^xY3i^t}%1W|rLt>Q<)uL3J>74C-TysnMXM@uwlhi_D`hB|OU1 zN>I|2{{oaW@APg}sPS%N-RUKu#NQH75>gsSNJzg8>M{83(dL4ZkT!!7iR(;C8oZ8P zKP>8hF!Q9(OzZe!7{2lNh0FTJ<9kj$H|m2`>Q~U~sySGE(T%rN=n?lILPK@T%|^>% zh6>)AGgNa&(e%`u{m{4OYUop|QKk`Do*E0$B9ApRxI-YL={tglk-Qql9`vtg48QRT z^_R0_UQ1A?dd)44!jq$&CJJ6!>i&s zz398I?}29vhgBN0?&$pYu{un9brrd$i)uE&(OtCm`+dUGM*?NV3H89~br%%K1c{D! zZ`*wCIsJP39(Vg;7?`c`Hf@JIq>K{-n)MlyYijh+N-U@0!GU;=Za+-Cdo+z}HTN|B zH>4)ar*J4SP)N&;9$K-{oRz?u7pTFT=icl&n3q1D+9YFjr5@^r8-@hk*`ZC|t}o#c znr#%D10%_pa>F>>d-IzV-62K?C^#nW=SkwI2l3VVR@Ekf`QMyTH>c~p2%l6{>MD{+ zb)Ii2FmcpN6&&?a%eYEk2}-(^KQM9kgOdL5L!hKz`%_R-^^bwvIz0KblR^E0sWU#J!jwzZ(ml+i@EiW_g&!EJFeFExn<{be=BOH%Losd4J z&H^PkIx?L?hItQAw=hM=pG&&j07~MkgCcVbV+%^+d%uZ$!o>Xw)NIDlY>eP`nmAgF zBKl}CicGxIVidvknYb@Z934DPJr$3Z0y8N%T8tv$I}McRI|Gy~P$8o%xQk6(z{C}T zs$hL(Ce9pZn8xk|ry{A|_@g4=^HI?;MhEpHXRLJ7tic0yYRz>H)173{>mP`wiLHQn zo7K4~GTH1(7`{0!xPTo$SdTFTbJeEiUEh%*ZC|WKd-_?~-LZp z6d?nrG80z?YCWgk98mjl$tXf(sp}xJ)OC%$5L>?< zBgyj&CHtI4k%M&@FWy{Tq1Ca@K7>MzfET*Dc$kI3D{;BG2M-@2j$^1b4dY{7dw{_h z1b155@K;K&F~;Hs>LhjUCnrpUE^?vOr&V#@HS~U#R6Z83QYJ*LO+#}V8c?LyKp_oX z_dyGWu6ya9@oCkK#6)0m#|RDg1%zFoLA%&JjtWV{g&aMXNtoGuocuo&@6g2|RR)tI zM6;ZnS2W0in(R)BtasgM@Q=iM}|4N-diV@=gV{5y>ha^AlRmN zt_MMhCHgn0GjMsdVbCBpZUiXl4bhxyFI;`vIVN>6D3Q$tC9*WzDR!?El*m#~Lu4C3 zy~$dZfud0Ov~?y$154p;1@%34?K63_3F0N@(bfm)Nm0M(_uzXpdizAFE+XYZt`duuHbfq`ZK$}3u+Hj)XR}DYv_RpFAbDvIUbb6oO(28K*FO@kLD!~ z%Xy$A=9hvJEwqF|w9En}vUQ-&VA)1cJ6M(moFcmtl*saY9<5-00AO=IFV;z~OKC%O z?D-9#FdFq6w(Sh3)^pI8E4eQ+h=&H%TqyRJBy=q3Mj(}qWHUxh3<6>*xhn}JXr9=7 zVks|A&lz?Z5e~=heG(eQx_(ofVLHec<_%n={>e-hKg4)a5k?Roe3Cs5y)ea`a5Od0 znll(Knt-H1_5@`6E$XcknWCNG!=UcMzu3m79Nk|fSAhD zjMyoN6sAq7U0s{No!-^8jsB_icoYeG9vnD=+IZHER-R+yJfQi}i?iPD{A}fPv~w`| zB!mectGh^5YR`!6tYs~G2CSK@np_UAt3o zdHCCvGB4@JvvfquL5VS%XHttni7XjjkzEB!%s+KWMD{jNBKspygz)i61tR-fJc}$f zPj?}2vDOuo$Wmh=vLApVP4Xg8<{+t|5~F_tsO#DFR8UVbMGe){Oy!%dSC~{AC~0CI z0JV;Bn@ra?Oo~?4isr*6Mc+NUgC)j+lBt2qKnd;|P|`egn!Gzr>PMicarS969Dj_d zS3$`%0DXJ)dgl2}sshwcnYR>_G(eAmx{i69K~aCwr|khngFBD*7f>si`V5q$pC<*i zhH+j{lJ@kyQ%U>NK;4h{d9*V?N!n+D64_#tLQ_O<27(zd+IlJ%tyt)ATo-g&>UDn` z!S%DE>Es6JdCE;*kvg&1@N(|J)q+CWs^V&GlLz$9bvH%c~uv;r;1>d+942U{Jz8EQ4P zby9)RSOH_$8D30{vq>l{JPBdGzx>FlN2+k?nzep<%aAyAdH|O4?Pu>6Vr5#lSSk#N z)3EnAeoXANN2i+ot5)IDL+P{h+|)ZWx9EL(ZW{i-cEmmTwSIRlwv+F}t^@2fTvox2 zL@0H7c$V?5CLIG!SLEy1DA&>L0%rNX9$xv@KWMoZy~^R2JgUtC9t)XSWLZI1qRQxG zOsWE8Uo>_UEz6%3&DgY#VDP^6t|ByIoF-Tl#+!lCRMuo*vgTwx=tBXTyMqQmm|z`+ zQnW)7#Rwz%_*hnw9qeu|=nAHWs|Lk-B=#p3X7{i7pywO}cE?a*joXnS0__0@ZPD|R z(SiLIY1!@FD_+psd*kBUopgM=5nq@Br}$E2k92;9>_A+xMMM=b^cFaeM|6DbTE4$$ zJmt&bL2)&w&g0?=__88Bic037Et+{$HO8!38u|Hx9^Ge;?!Kg>yARQ&pJVpY@c`L< z?IkLNiMflNr+q8llL9?B$_Ygg+R}h;&vR54J=ZD1gOtc?g8eI=R|T+-#@xJJp!{eh z`9zfD9U7Vrj^-qN$K3d0Y<3k=R-Lwh(t>XZyL}OQB$AO_sv@KVu389CGz}(G?hB=b z!1G^l#V=+kGI1eLG>L(=+9s|6l<1>AgXp7)!o`fE7F_hv;8xo1+dxU%O@mvRN~iaK zqJ=P`ZyXd1SchN^}yy*KQDACsoN@Pz*l@xvSW>R5`7y%Njg6dO44}? zs3k}TkM zt&RCVbzFghCb-hrVANkV3+-b!LTnrvbO`f-(`e~9Gf6uW@$*Q_5b4SVB*Qo5o~Cwd zV-5Gf%K38GigYDVpU@7`Ox|J0@G|Wbgvp%NdW1qHadCo$ERHlO8li)kK%6()OvQk z&E%1#6WoKKBvkZTK|=Kus3VZ@XwQL?P`wIDwCn*Tn%@H@T0R0Lp*jdk^!*!@=o>Z+ zD=P5h(P$B+=sOvd=sN?{77ic1xe$H!rIVs1AFiWW3oV@#Eo^5l7`(grt4<4pT}s1i zJ>#{Z_vY2`-eG-~>|U2Pm|D+%SH#={iSfb$NZE~m2v9?92&Hzk_i2$#qk5b?wA5U@ zV&Ziks?Fa6A7gXKAbrcMtM9=>2dg$){54M0TbN?_jxE8kJkblxN^JH4ux#M_Q05dI zr7ixzCyB-JaTPuVM}~>7m=?nN3d4G_wc7(f(X}-VhcaiD6?LxUO5toHCB*LFO_i+L zpmi9jST`QsH#NG~yM7#sg4o$T-INh*S+NsJjH@0>rBkrb7aOHdPl?SuJoTE?mE&*e z3iV>4im^5{gmaJ3r|oq`3JS8XNo^mFb3%Id(sssRH=d2vk=U?B7QxDHr#{nxHGq)l zc8tGzHtUn!ec1=w&!o2Q3##v%>&&__Lp_+tFGR}9~myI-9_YNkOXyuC%Qw!0}Y}9GLXPQcO zyGcC_v2ix3ez-^l4}lUKb?nA+)vN*~Rg=1SVtT1_AQCGI;tNnmaCx)=+(qJ8X!rr1d~A02GIcI^ zw=gvYlxU$%h@zzk6fK?gXtXI(wA6sw%o5bq6vNjAN*WHDHW7WaY))LsxQb>nsiJu^ zC}~W#gA&bu0VRzIO*2W?myD*)z8w!rnue*Mq&rswN;EG5C7N47WkMdC*g;9>tOJyE z&K?CNvh;R?aspFmpgv-X)^JF(;&vMpz2}g4&^ryvF`qUW)E1_wt17N+j>oBPpE>34 zxWSw|a6Dba6uq^;M1^Ty^PMI$tL4D8U^?uJI@)*ms*{ICsv~3Bs?yZ)k`%Rajq3xA z!)U@B|3kDV&^!A@Iq?AZv~f80k5T4&R+=oIvlr&rnCkJ~{4ApHew zU-8S#f@&k8vEEhL{XT4#>1H8VzCMFcH9v%HCcV7et_#cV2BM<|qCVQ`hDi;h8|=rF zhB}^dIP9#$oUjVs?6~Bib0IN{2U`=}A8W^k&t^4}&*uXm%;Bjq+k-8Vsrp|qB$W;E zRak3>)9hq!MFP(!O^(aPv|jXZ)SEqLRCHu^bU*D2-xoQZ^beXjFulMcy`DQ~V>*h{ z(6UM=BeBoKCEKXK&ZT=Cp5Mjg<2R^M3(8GgB`E0-USZ;zK?#oPg6L}pCD!YD6Za^n z7%m_0I+5YhpYZ%U=25PQmd`+m7P4lSaHwb=NkT<0>|bGtsh~tl4k)SDC7_;W*Gf>& zF?AKF-!Qcj6m<%5$~GwR?RHS&8%>K}ip!(@5ANdI2cX0cvKS&O9i;!JM#}OVa}@TW zQ%N$aF70!*dMS4z)J|xlR-h_!vF5%4^-s)NKW}I;T4GAmgLKT6A?}0hC1z`8^=*>0 z30O;sT~$>u3)oGj2M_NE(&RRl!R+SXfdiFAD65-*M9nP{^FRz^5;MU{NS((LS5ZN$ z1ALG!CN<8d6-bq$lVj+hG^`d;vA4kq`XrP zLvYl?kh)Ag3@Pu6Ox$-(+-gu#mpefT?ha7D#pTl;!Cf@}5|n7Bx_ANCB&vZT@g^w3 z`uNyyY1{hnEV9(E5ZM7xG&I91N3#~vvsjK=P*NXhnoKOmwV=cz(7;Pve+`P75-h|A zC3fItP+|xE4od3s*{IbbG2N`+w2mRJ?fpNWa-m+m(b8a4a7c@o7UFTI!30}~N|B&7 zN*L1MI3sJ3p3@5nIo#72>Z_hXhT&_9>3>SN${6UR_Z(x8aL3CK)p*nK2yN+H7cml$ z2_lS4%=wjs`5otx$>8Y+OvYR!r#;C@V}{>p>hOXbIo2SD-!+)Wywcuu>$?GTe$C){ zCNpHHiLwdBR&7o~AsLIyxnq7YT%^NY07{B#*pzUZ>u7@OW?VjvDv(G}wGlt48!8>{ zn?XtU^gdAZo4+OYpH#H~p|?*yNb_oRoXk`8 zQnEhN_h3?T1`m+M6Pbm?0F7N+jOUCPQspfYfI_`UfA zf50vW$Q z$M2TYu}Iu_y{xC=1#`!X!=|fO%rDZ;ILrhWZJx9BIC#~{-cjLRj*DM4o3E%BV%@7) zH``0<(Q~$b6WBJEJQa7U(jNXyP{!g&YgPHfNmKb_qFV z)YR3r*0;4~G`3}w&nzoDeI$KKNJQo}HrKQ+Cq0&ic`eIotf#g}O=|>d;#f^BwKYw| zisRANN*1cCZ)j|;uQOE|&&~BqB`~e6HOm>!ESY{11D|TIt$|!hIm(kGL zvM7T>s}Y~7yIFUL%THXENs-pJWIn=VL6&OMa+WP>%2YHm@ zsL)C&YWmS#<8X`Mgu@);8e zJaJOi#H#%BAbXx6OUfp~6O(aXn^HERE>brZL4hOgi(8tO&u?i)dM|IPzjQ3()^c_I zc}pAXA`32=oGp)+%xkKty*hiW7=^Y=$7*9UCPJ3ww=2*e?xsuWWuCL*c`N4I1|uf)JB%n zlLFG`c1wKQB6e9L>Xse=Zt|*?;k$t)%d{U2BF3;;-4ems(f~AN?4^)CAl| z**I6=X_AdYZFHH9Lu>P>?_}wD8&9ik9EuRV9kDRf4}QePp-qG|RI@PGfJ6OOi*qwL zdu^O2!0EPeXrOn<#_0oxRxDV0zJV0+**Ns3EW^g3cVaY=ZAmqOGtI_X2M&eX!u%AR zD{P$KgR{WKp|hq}*f?G&SZm|ZflPPUIJArU5gUh=uWzz(?gMAHjk6t`ZX2f;oWnNG zu_y}Z2ooG|O^DPli;P>;j0cU%h}%Ua7y{ZihaEz~0;s8SSO8KRj?3*z$DJ_rOJQET z9@6ktdZ@10^vd$n#h|uS^q})R*e@?*CILfsq3MsS9O6Z};C5v}lsdf&LibHg)N?FjjJVH#|EY%( zG1T!zULdPSgL-1hhwmq1$OpHp3E?>t)WhFA;g&>5?@Yv;$e78vQ>mSM;!MnD4NgP0Zmu80ol+WVkmXpuI;!} z&gEWRFg6iGLl3v>2KaR;sJ^Y=!<50`@SMh&>4-QoT)VjM*UgETF^qYT?zrk7I_+R0 zCWA5Ka7T7%FaP!LPpbMJXA@3mOfUSRvf7mK;Lj8FAQ}kscc6sQ=U~Q<9P;7}#*`v3 zmw-BVOAzV?$BRPZcFlmE3{XFMU}JV7hDx8?MV6Q}F6fzo36sHksARcaZ-Gtd|M|;1 z{fU@wF{S_*%H8V^^leGRjAu+1?(j|6>F--(L18)q|yd?c5r=DmESPj(l)fmxVS>M`X z$DC%vkXvQ~=b{8oUIM2)fpcX7r!IlhoWNO@!0Alj+>*e#CxP>50%v0aXRD1?e;M|wM zc_M-HYy#(%1kO7NoPQ*6_y~4eYJ7tRA2!ZuigPUN5B1;BQ&yZaOpaf1&N4Z(6la{t zS)e#$OisJvSeES$aEuBiw(ivg&Tty~sNXQHdf8&kAlA$q2RMb!tyM1<4y`d&oNI(r zXL90aD$XG(7mX?CSNZUJ=oE_I7+Wd72s2EJm&ydk?K+c0@JoO8K&>T}ucQcLmpT_5 z8EKMK*DrojXGwJ^DZ<#L&SR;slL&qvy?^gLmek`)iZFJm3E;S0-yjkE8gdTbY)QSY zqzGe|nh1`S8totaY_%ozg_0tSU1}0b(U^;VC!PMMPb{hND&T~%OVNnQ?V?d3{hsJL z=Wzaw4xF|2bxUeMNfE{_MPq%dR(^i|4;EWeXL;d> zA7SiLG`h7y_}a7uH(65kN{TRcDNF!Cibl`$J8{Rq0Wr$PS|vpoyHpN1R?07~ubyj3 z{ZdI0#xCV&DH_ew@88!~erQR(rKJ3Du}kHG<94ZHs;w(IKVnH8qXJGCyHtRsM&nMu z8*+W)EUAe~iZFJmJaF7D6%=iK$NAs4q#BhJVeC@*ETys&GYlV%wWMxUQiQQf1zF07 z*T`!ZJYh*arKAXBmnvW>Wx}-Evkr{6q~1|dgt1E%vXo%~j-1f~#YQdCvTz2P=PP6=4tE32Hmnvnc zQ*o!?slUAx#?Oe?Q%Z_3cBwLOtX%%u^Q%6#q&`+sgt1G7Sjx!d=)WKSwk35UP59wQ z7`s$CIBu6QXu1BnGv2hME>lv3u}f93)Fj;L*VVNY1>A_&RZ5C5cBwEpZWp!k^qcjM zohYh?)ZI#oFm|cw;8+&muI8UUZb|hjDZ<#LX4s_u=^y)!C3V7aaKw)=cBx8m+%BU; zO&EA5VoCXx6k+UAm$Q_S@~s=PZnLCXloVm?QZrc!#fX1LvYvU@lKO#?B8**X7C4q= zyZFi5-m;|rq@)OAm#ShZBfkpY+1qDH{aZ;9#x8XQOJ(6szi)kXB06G5eoa$VfiQL{ z6g!0QToS?W`B!`5TB2)}6k+UAm_&n=D%_fP^*>^kU%ysTgt1G_W+@}(4=%1-YDs;d zqzGe|x{9TYT>h1BCk&DiuaSyP7`xOQmP)~$e#5SP`DIILs*)m%T?!2k;-!kI_P5JM z-(gA3Qc{GmOI5SfDY(<`^R8tGjuFDuN{TRcsqcVe)s$^T^8=RDQ%Z_3cBvYcGSV}LL-IBUMNfE{_RR@lh zhHDReKFX46P*Q}kOVzU!p#1xA#7`cwq;6AEgt1FCfMb=zE%z^d)RNk+qzGe|n$J?I zB57%bFP>~keWIiYW0zXMQt7zU?~O+e{mzmaqY{ZQcBw{i+%BUuO#XP~cPy!5B}Ev! z)IydrYUOKp^`37@)hH>#*rl#!DIItEJ#bUSw=AhAloVm?Qcd8<+dz_3mH2z=-d%)VBHkQ~gtqf~>@% zt2|o1GbGYNT;39HT$V>Gw}u280jLcB2SLCxn5OzLRy8>Vc7A;%FB&1&f|k}IEOT=L zQQY$z+ZH#~ED!MNw66eFhLeI7FRGbeKY1u!c~~4289F%iv@~Y<5W-&}D^X$Z&mTfV z{!#VUY)y^A2wx$ZpsD=!Aa2Zxu)#cKvx1r<QxwaqoZKZsahjmW2^X&i z;X<`=LM3P$8bsA4zMxlESM!3s>b6K-V@tKX-K=g|9KpJ@Hf@kAzq5>UY+SS$i0Yc! z)<|_@%e?A_Xmc%OnB7o|wU71Y6RpxSpQ@E_SiH5UrMY^E@lsWZ4t8!+?_8_fnhi?) zNC3)9Riy?Cdl5A=1g-V(pOykP)VE4qGapsO8T_2vTvu7Mq&^=j{7fe*UwCL)W~u<$ z)Y444Tb5ahTByJl*0(IGk6=wQxz)r;)Wid+Vg_243CO5M=2N^2XiFs(4MQc-rb;}- z@#ERb1ZdTSw|p|5YUgS6_GVB`Gk9@@wT+6s1K&_QxW%#at=2>M)^l8IGDsw@?HJ@@ zwiH_R{K4&lKy9snjb+$;8&fQNBI|r%ajlLc#aakM3I`=8QSmN@Er=JKRVX!@6Ed%* zxj7GO8MW$WtP-ne4%1rW;^rAOZ7?=qVhyyBsYIK(N)ISM<578Ov{w=R;$mgWfc(UeD*x7IYbHMFo}<1#5WEhtTGyj0zY zlRTN(B9DlLQ4oc3d5iIkWU8#Mufvk&rhx3OpcJJxq%E+#09@2Qgr;#B(MX}TdRQ__ zdE}g|oDR0OwzL*EBbDNw!x3anYdzcN^7^G(byKx$-iWU@22WME23q$W@6HUVSF-H8 z`r4+(c~pmJgNVjYGqI%Fc&2I@*N@>~Q^FfP3WE`6=fa!~Y!R(?Q>(_Nkh*fzQi&?c z5DK9mZBcz~6s_Fy>e>bMwO3bTKf~3H_5KUAoazc`PAelVt>`^+*ZgSBu4=u%TFllS zi&S+PYEr0eekGM01V+orsm}9PPYUGw1K~hnNg$N(rsHh?@ zw;->`kHTSiBYAA|sN7!|3KSNUl@w8^h6+xFzZ8q!%Ss9={PWO|4h2ITOA87@`U{C%R*&k<#Ca6 zM3(sra!c~da>HRi_7oYZO5JP~M`Qbe-GiV%TvA?`8z?LB^M0e8DJ@ZCV@pHM6xniQ zhX?#ch2i{)KxrU8H=F`g;Sc8K|C5lH&Zlf`ZagQmBH;OZjacSNO}q zxn)IpWrdV&L&A_=;qsFFKtX;u4(AlSGJi#JUT$%IVZMq8EJ)6jNrOBMmxn^7xgjok z3x+ByDB-1LC{uZbp&?3mb4$*Y1+a9;6{_JmQxHM3gqQgP6@lEMyilGB3Gb@11q9K` zt3bidM=?M#L>U_@EEWDDh=-;4dgfjVvxM@l)W8B5sDRxy}}Va({8K ztR$QtMz$ZN8if3)er2JOl3c&BsmqA?JhtUX0NU4usvofF5BtkPfr_GVNg?U4nLl*& zLZubKf)HYdonS+u%KZfu75Sn3q9Q-Ghz*4b`Ab8g{M^#q0-%Nh1%m#vf?z?gs2FwC z*j1*$ysyj_4NBIEf{I{KX$h=G{bB&ApQP}KrJAB$5e%0Vxj; zns9NeQ$bl~q(!l$Ro4mL+mB9YBUE3Jb%*f^b}Ia6}gPL!~eaFmIH> zyctg=suLVWE>u*MUl@cfjMNNS#{(7qyg)E7oL3ecBI;D7X&)aO8dT*AZ7E;j4;Pge z=I5c2MnsVq&bf?q2$z?Zl?3w2hww)B^O;7CbI453{Cs~nFI*bTMQohgePcsloB~ri zFXYe9Eht1Q?JTRx25${S=YeOFj2=fIfW{(RQCxxYIWOk|YRHCeF)I88C3(5w!cZ9{ z2FiqUVxVS+i}UmID$o|tt~}aVc$A#X3KSIO7L-;5{7X^l^U7@LAIO8Q+=_w%)MfNs z7b!im8PSd`^TXe? zU^%4}rZa|$eTBa~FH}+yC=W|8&}l=g3NAv~sjVGUx&lT1KyhJiX+b`8n#Sj7S%CB? z&JE`En8VUr8p@E`>Kn(Wg z!lLp(xC~hJB0+rw*vMlTv|v4MPdzk0XFA3$9lp*An(Qz&T7nK$kmKNoq zs89)?RF^~PPX9UMF+*t$&3I6TIl+deNED-0P|FrA^3&egxL=l{d0#B($#&R<%K0Mo z{{no+ihtU~tVtJLoMHVYUzl~lg_EXCI{zYzN7Up=lPBhFfN`rL|h`WuoC5q|S(gX3YqlkTx3zzY( z%fwCc$8WnKwg(q2qK@FAAH=kb^ze7$w<{8#Ua77GW_=vapALWHwmA`Q9IiWnc~0Tz zg%;}@grj)u2Bv8w2>j@u6Yeqacf)bT*9bK3bCX)m}|In-Uy9QtO1H zB^VolNk5iQviR5uHyLiU1nX9Xqs10ZxF3W63^2x0BLu+__X_x*;?3(O^=2NVBW@@7 z5iA#(rj|R9_fGzPAN&u2xmLZ>r)+k@y$60bFfXc?-9v@%1>majGWS&V0+o`{N#9H0 zKM%}}SXMwkGo4$h9TOhiDSpQpt40*tpN@Jo2uJZdGYK38|H3426z)(GI4Z_-lE6_s z8k4|L_`aJ2jD{sc-W9`g}vi$PgP_S}r2ARW8aCPCT&}6Y(@RF;lT3WBZ zDzrSKurZR6*HTx1Rn4NB=EkPR=v769)fIU&s`Kj?wOrMN3E7tB#@d>zTI-wYYuf6s znzuYs&!e9SE%O#)lkT)*>2$CWytRBI)}&Fbq5q-A+SZn~mWD{i_!(zs&?NGr#%nR- z4$l@XMu)i-I1SU}q)yH7o6p6~jgbO$twZ&T5_p)buQ%ij9A^A6s)^IrvUs_HG2Ry# z&zLo@Y`hjLca-0F=C?A&a~@=wq1OF(P#m&y+6$JZW`oUYK6s~e{ zQzI>TF?1DR5;Ry-yP&fEnkc&3X58e>frX2IS@1N;Z>4?=EnuVmjd5p^Z@IXS(D-1i zBtE)CX!+<;5EP$;rOstDKifKb?v7wO`MD#=9g7`7?t9HS02Y5=Q^S{g`Lj!B8pp67 zIGTuFfb&38{rIp`x_j$XPg|OMlX>J|s$P)h#<8I|%S+BnbInb`S$#O-Qhgm5`G-)B z!JTS}hYtyeF?BBP-^S(B{J0Bl1}MRi%gwkv8ZCqr+;UJgxbQ_x+~+ZcbQ^ryz2kS3 ztJSBa@gEUMi$8L4l+z)rvjLp_G^HX4y&`3nelQkF?V9Df$y2}|M*g%b*X7ZgEG?t$E)JRQ}YJU_5)$#NL7fPDqJV0CFqTU)c5%NiJDjKvKKR$$3VhWBDQxcsLQ(^*3sD*L)v1g)MuXDfYdY|hqLHojG|BQKRo9Udu_sQ`Gi2_}^bsvMV3qg0o8T@H$BxQC0y z0;VYZ5-+QQs1Jdstg0l8oR#Qwaz9GyEd8R+&m!jxl&5yAOx0GMf?AGK5J!fMNT$p( zsU0-R(B|5THzUr$gv_68W zboQPlfmxN|uBGOu=hI@IxyXv6e*oQ9(PLw9%Bn3YR8y&?bgrpExLkz`MFn@s4zgDw zK{o$(Tpq0vcd4^dO?;>(M~@y#I9s1VRVBlyTkks=Er8jso2ci8Ky`(D>MPv?Q8|av zXVk4xF%MTz%0Gz^B>~kjNrDHMIvsb35ap@hs8$J%YL(QlStgFkoZwnb+)_{v;__%K za2I`4f2AIhQJam6>tWJHO`n<8`G@FfMmqJ*unK!Olxb+4V10^GVk31ws5G!7SX5}K zr!Iw7f^QkRDJJeR6PE{yg6rX;YgV`9gX&Ki8~_@k3=V)L)l^ zVQCRn3uZP*mpQj!*B#-u!0bMq=%f(|5}&X-&aq9grKm$@P%6@awXncA)O28}(IThC zmZnG=)0~7=UXS6po{am|Oj+giLKBw*N^tq0ni*G&yQB_nX%T(%K?#o1_!?Xuz6*{T zev-4hQ|S}QsYw@K;}BRQohMmMlwk{w zUWTDymXYG9X|rO5DMn35cPihM6H-;%nX=M83(u6U_&62rl2)alM1qXlYFy~M<1T5{ z2uf0SIjACbrBW@jIw+C71(c-o?Vv>V2~d*GzX2t(Xl15zp+9=tM~BdJD?@}T`~T5b zN^}pp1!L$_1k!xq{C%9)FQ@T}J;5pCD9@xn4WX0xP$S{PB^|aqn99Ii3?125!BJcU z7Xn44O+J|@I7$a;C{}}-fy>8T4e1_9HzFMs&Keh0f7Q4MEkAv}R=PA8BAC|is@X@A zrK5=DbZ9-4rtj8+=_t6_J6k6j1@F|OikriXS(%%=E*Ke}6$_?w1wh*z8-cGg@dG|T zf%DR1c_~Ov`(T0!9+_+zTuCyWi)TqDN<>M{*(Q#PizNF36GyGGBqteBk+=(#Xr@;G zK3pC?XIeCG!ZYjQ$fOF6s&5RJhx_M(qjY|l zd6drI!R6CPm&jfRN@S^r{8L;W{;ZM6K7!{faQXP_+0x|wH`Q7`TXMQl6#wRw9aKH5 ztXhmuOe1CSZE1Ys_qEoe8wCDDn~al53qH7-`4Vix@a)arz)qNgu9Oq;i4t?*kgh)J zW;X_-IPRz5E~YdCl%&F?pd_^lK?$x5l%%vZ6sFQArFWSrK?YPLs6;=GOS%Q3`8hmO z?s>F%HE|~h^D);n?at@us-+kj4nL;(uQodVw-Iw*jW{N1K{(2)7D~A#)Z7 zl>%pQuoBSp#^50+_Gse-a-KqDuJP6#x+mLUXU(fQ-^RdxsKyA^VIZyKgzdBH?CII2 z=Fn_XOXq2EX`xa_X+XN+P<5#MKRk=~9+U?AFaE`f8%}N)y~?Ct-^d^RODMXhD3UQu zpNV@qE{j7QfN?esS=@_l9J1Y1iY=*U@k9emi?bI`O*YOEJgu;CG7!pjHclQm6hBMP z0&q6iICMJiHXG+R;Ow(;{tQm9jq?RKhi#lQhrw!rYxxxfXPn82e@#m%_f;p$4rdId zCRFfms1s@_ec{y*Ctr?$i`zx1K!b&bPftU$MH=J7lggOK6lTKORSzX%j$uq8?i8{W zy}x=r5ko$>U5jxiYTKLdo|A~7E}h%85_byOO%rMn#lhi8W6VN@x#2sb_9tS#&X`Wz zDP(7OO5yEbJv6R#yB@`zsC{2vhGZCwp~0`)MZE+{g%ywAT9t^QTyVQ4<4!sEVL?G{ zBIa1e{1|uA=zL1+HyQH^?nKSn^B4;8;PB8Sircjlchb1@?s3_P80sFnUEjx@QghEO zhqfeQs0ZVAy@xx6=eH#fAQ=YxMeV)Y^#bk`!zcc}``ttgwbgFdOSn@SW?lAEG&Q7$ zepgem!_PVyG^RMj74rTB4t@LD_zC%(jT3(kD9ve#j9VKRC~l`ni%Kj9uzfaIDl=m-TSH zCH01qB8*+?G?pSeKtK1LS9e=d=t%O9Fm@>#pIN8DeRB3a8!f5xl@wv@QW-2omWF;6 z(|3PiNmVPU47k{(P6x+I!>?a|PnjikgOVbQU1}^#orydBR(rk%BWL9D1|>xpyVM!r zxXsh5ra!&6&XW3ANfE{_HIAjo>eKJeB^#GmQYTVFh#z6>QWQ4p47r}ir@=lOAuLc* zgt1GV#ZqL^>9^tUQ~zN}MU)g_>{8zX$11%~&1?SHlDbbx5ymbxo}~=GrvIX}*OJ<; zqzGe|I-8}8`nBv>S_Wjq>kB1C7`qfY69}OprT4e}#*!MZ3<6>7Qkg7egz%D;YvGaM z*9;{^7`xQDEJbZ7{SIX8yV;UjrKAXBmqH~(2$k8@`j$pf9t^*pP*Q}kOHE)Yqionu z)7h@12xFI;$WlgXtT|_2iRD+Hk|NA7?c`&$K_^nEcm1-i!D&Cc0vHPzu+Sk16fJ#7 z0#-TXNd!i)u*Bggden-Eqaf58ilZZF$;43*#yX3mK&+(~UkO5-hd5q9#W`Vl#!*z# za*d-n^9qimxDQ^@aTF*o>i8=6`1~Anra{7q2meQh8aSOsU=$`yCeYsL#1fsrA2kL?l_ex7<$u^KA0*vuBp zD=Su8IoiHzw@tpkB)70E5H1YZx6L@I$Cj92NwB;KdkkrYO$CIe@@&xxU@K0z9NSDw zDKCuO%T5Zhi!^}U8^wiz;VeF<0=LUnp5-a_jyb0uCD`7z(SeREvI~)on zTX-*oBRq(mr-4Fj>BL4+nM^!dn$woCqVj^00PRz3JsJ{a3EN@HN^(Q8T{*sx8gr0? zQ!*UR4d)hw%MioKN7EhfV@n7&k6=F$MG+I1M@JW9Hyn0=p^U02P1>ODu)8xCITXT% zU~F$Cy>&*eJ0@I#KR*yC3zU{%1G$=xlYB69nxJtb2nUz~M;xu-Onp{IqP)1H!D zMlVtzm>WynQ*sB~z8r+}JM1aB4*qXyWh#w7@ zob+8aT+{YvXqunKEBIC7a>Bii@U6s%VLJ862}2j{p&7L2<$etLZ$%G$^7(|4A(s>G zRCL_$#0%|TPZeA_{yE`JLSKK&G<;AXM{tvez|{ixyIf5h9~9ihL*Pmfk1GoC(V$|% z(IkVDzdO;TzXu)uy2}N(bO@Xq@g4bXEK8dsI2uMc>AM)Xx8`EXu~u*t9VgtI2;YtM zSopR;a7c1T98ClEH)`5-O@g~<2;5fS9&X0U!fOPVJp?WjxTo7R?SrV`Xt3lIzUzSd zA%@nYmJ4pu5I7oY_g{+-g?(3W5OdUrBA`tIrgkuH(B2aY&r*dEjVQAYdsL>tF_t9m zg(Pqkzk^BOE(Gq36-LP9zf<_q;PmYzaAXGRlfLcHH8APU%PKoSg&?rcb*jN!uzl_i0j2Hba(z)>^)R1!Ff?>kB0$lqgE;}-XGiZ8_@v^ow1(g{c1hZRZSs2zPI z3Eb(x{V7S@=SkqGof&lS5z)+BJ$FZ_NI zxNiaXR1!GS_ihq6vTLsEaf|yorSoZUKQ##)y{64h0!P!i1xesW0#}s;j=J?VN#JNw zdU+DKOMv@H5;*EN?Mo7OTnE5$Kc{piyHSt?j;8;clEBe~{|}PHZB7D5cB9t`HxH-f z#r@R0d>jWap0r7u;$K;kBb9?uYiuw_dqwu(>?Ckp{*u7ac%vW*9MzBNBygnfyGh`v zoPIwE+&6%GED0Rdk7tv_ZA$`&;gAXKl z+^0$4#z3ETBi*c@Q+|+L8QQzQxD?>#C5dZD61Ol(Tyv7R)+BLDlE9H2x;6pl zPdKZCaMve^yD3TBZAsuLKkiDvP4Z((_rE!_U>($z|1X?b(6Wq9cc1eAePjU+6{`ug z)HOCNuWF1e2;d3Dk4{I&anF%foM>Dr8~=$nqrSGKxfZYNgG=h0E9&ahnbC~D93MLv z#Ad!J6Rv4&l@q6#Pio1JMx623T)UjCh7 z*2Wq-sbAr%a1cVv()v2XCz265?nv#YDRg}D!CfFc^kl4%Vw!FRxcKCQj^0VM?*=<= z%#9$U;x;LF6Bzq8XVVS??3AW|v#MmrO{Lz)&U(8KdloYLb_508o~A|8ItL=yK;~V) z7V=%eL*cGqe|Vv`5cD3UW>9ot4@$HG)&hs0?M$UD9{?T%jP5|80q^;{0hK=jZ+ zw0|JFXCV3pdyZ}J*rVS0SuEJ?&5!nX4#c8q-u(7Mv36gN8;+tN91HGacr3UV%Ca`a zg8Qci_j%WU&4p=Tml?RUSg;qnn7=U)?PfT(5rWedIyAj2)IXh~qqf5Y)Ad&}L;d<+ zGUpu1`iwRUg?4Ab@58ZZUq`fR^2^)y^4MckvY8-xqcObf#$*y3p5%&EZ z+s2~^_>qrDAtXgMl49LIj|>cS1-lIp(kVqHI`sqY#^vGVhtw z;Yz6(zUmaG%|z9+S*%*NwK1LbS?Aj;Cwa$c3y0CZRuv-Taz85Gh#e_UArVk1`z4-7yVMu=%zR<=CXA#NUC(Red>KJ8N6rLY7+Nr9vSCB?8B zl*rbB`Yp>gfs$ev1trCh3T_!Lk9H^SBKu=dB1^?}3(GzZO8k8jloZHMKuPiX1~9^F z0W}+ZpSA+jT&C875*)px41veT%}iIt(K6Leo2125bMDjO3>{y(B9l7492Utm%Nc97(6Mc%Ros%)j>&7 z{2nOL@&G9D?I)mq&05GxN@J&5BFNAsh6%pS8x}&yJ54$ zx_1S);dv*Xr2|3|T&zf(3H?;01Q1Egpf^3ZtD`sFd*!B2y~pN{OC`o`c}f{) zl(pB*az@VEP!DYQokQcX>)Y653nR}VpwQD_EO>~Yv))Dr1Gw0nUKsiT@A|(XfP)Qv z9~!K&IBJKw5K4_ahz^J!coy>VWVj^_*=X{2Lkf{ty2b)-N+9(sfvM;MW=V4qRL zQwp*__pUn$&4*d-jaVUR(I@k++klqe5>8>>J>cn4bSEP-#Adlyjm3Fey_`#Yb7;MN z?7)G5AMp=|tOulwktZ-3ltJ$7uHL_v5GMfqt2LwdW!c?_Hl;Oy_FLQI?o!FdE6=|B_b9&qjlM>>`$ z=v4~5P}BEtxtr6=9O@Sb4@;5T3w57*)7hpXw_ibNkrL<~znL=j>4V-Yf=_ZWzhcX$ z-g7r8{)Sla`{eXkf>Y@JSnv)KeFW~IdkFNP1?u-+x%pEstCEU~0)h@X3i)yRoL(;H z#^55YXOdZT^w1rdZ|TAB=VkU+7FMaF7Dzw~S3+DxE5nFML3Z>O@49p2%NZ&%SNt=K z{HFinmBBGQhPSG}-4)y~c}s0XFHY|qcdR#v4CUr3NDDFc264XlO{l=s= zgA&{ScTlh4@@QY+F0H_+Xb-6M@@VInEyD$%W`c*Vok@j2N$a`@lytGyfRdj6ttRy| zP%K%6dH7IJ|ecB74_A!svCsF6rr@aj71Lo~Ed4C7hz^)_Q26Y@LX@N(Z z6m2m4kY&#YMUzH8Z5pTp%*!=-rJ#D57dClUg8GSu876tO5R|0zGEkDvU7$qb9@F(Dv}#!{XgaKz$3 zbkWnRV2?d=#vTUMmGfuKx} z7={I{nWx7mg=?cTePCk@aFWR^@!Q8SCtgG5%R86nE0DIM*HFv!Ua_D@Iqgx<`i zgWh9P#^DSTj<_B?lo`Y+Nh$G;Jtt4!kur{ofdK=+X0U=xVhFt_2h@zHva17)r2uE>B)?zxP^T zr0A~&MU8@otGNtiXsSlWv_AqR9r_KRMB)WdBC!?JD_p^Mf)a`MLDk~&X&>P(vPVoR z1L*neda+4`O^QarVrG8~s-1C!m@-F6tr9d1LCF-QM+=p^e~aD;0!=!|0@2OxQA74^cIZ1^0Bm z=w0&xQonPPcMa{%?+R{$S)nmmH?E!G=?oWRLx$*ST+gAiDxE-`hF0VC=uSP^^VB_Ng-udCO)V z%6{2f@z&J#es5WO|A7ez22jHoQpS)9hLka+0+6o>#2sC#@63ECs+q1sJ0cLVad`=9`#;FaDGJRdQ_a*JmE~R{ZP0dK6iNFU8xr9#usT?avJL zVMcnnM-TO7;z@;LAB7{@oB2vC^yKp4G{3zMfzhMB>{sBUw|q`_=Znj6RMGykLw!B& zSf~%)x?h?a?L+uD5KqGWBt5k6>`*T`y*d>^M-m|fX$V0qf%_RkgK!Oxepe6q+&i;B z0mNJOO7`YesWALV?y~K0(4*b%mrb{~;5Mf>`=Gb%T_lG7Qf3HK@4fmf*+_`;P;d5Y zD^m5Dz1g37E08w*`m2N8|K(jrRzh#@#Q?G5NKX{`5%P)p3V021_PPQ|(XGE6@Aekl z*z1aSbqdxY_e-YNA@UkQW3S6F=Lz?I_p3Jdf5Dx-EjyC=W#;a}K-CO&aKU10|i)c_!5iO1h~_P3jhtLOXC>FEwBfAb48V@A#Dt3IrCGaQl!gZHm^Bn; zt*dhvT*6(QyXD^=`S%9>s~p%!sUVTNomgmR^ez(6Hxj-aowzOTPtnKgT0Y=@o@Ax7 zx6up~5S_$F)XlEoMl+aj-EMO+0}YoQHW!KjhlHwY_Pvyf-gTE@#z5yR?&5MG^>zV8 zjIlJuGZ4wDVoq1*3cwevhNIvN_F?FXV|Q%J=(&`OpT2XtpGAL68WZG|)&%j<>=5UQ zp3I{Ea6C<%?QR#-Y%w$EKkw9o;D$rlma0t4)UZ4 zp)?Q(QE`wB0y#xzOH@5K=Ast{HY?f1P9g&rimdBM6qG-puzGl|N1C>K z!K236qx}eXd3E_PC>d5zQ+Wq2Iq*}cH}NbDB+ZwJ7HSqn%VALS*$;Z7E?SNSC9-2c zEdj!(WrC6c)kP+iXHpd=MWcQhWbFbaL#vNWDg|wk@T`HCAG|8|BM6G#`*<|kTPX8e zRiJ2w&Z8{=RmwP;LtD(eRVI&i@zpTzHc)L${m|q+V&WbLwS--1=1lZ$2eq7eG;{X< zxO*4)sH&@P_zV+=h|!65RJ5ogMnyqx0R*FFlFUqQGsyq~Dnbm&1cD*KWClbDU?XZA z@zRUh+FEU`+DBV`TW!_a76b*$z}V+~zvunF zli!@Iv(EbOz0ba^eOu=&Zm)Wb?c}N0-UGE-@jeB0jp7;TUAYJ4F^&Z#yc0pKRlIQ) z?_5yar1cmPi#G=pR~38)-?ZdJ+Gnf)#homVaT6#`pMAz1pg8jO84r?DcOLu0t3a{D@L5w!?pv1JdP{C6s5_P1 zN0!`BtZzwpXM>XP`01!`D7gku5^oDA4hcO*FDRKAIWkd?lh&tWhbp~uNU6agvIq})rh5L2=gb&Bq}FXi1k&NC zRHzPzl+{&Wtd35C>1gP6^TW~38Ycsa+&T%am5F+92K5E}#I1#N679Ga^-eV|jf#p! zD0VB-N&Enmgu>25LU{(1bP^jtNhsWS5$sLXCnU9dBe?&3&`IuDd|4HtuwZh)#- zsGC4ZH*hN`=?18pq#Jk;)IIollzSvm+rPl|eTv7GJ>k6ximQN7;5gr}sP`=1eo!L! zDJX{NF}TVtJRhk4QoIvDNjJbn8tDd#LH$78tp+73zYf%6iq~ZE*g1)M?*=96{Z>$- z-np$K>irQ=qTXKxC2H}Xpd?TGE#A>k>cUfNhJK~i_NSR)9>TVV)54y9uJZMBm9PK5 zvC3zzCgyRU;6Gj~or@-8IU@;EdcQC-?z6155{F$iqJqKt4YrjH2o_n<)8~HFj7&LLd)U3U!XH(HV zqc>nFZo}wjOG1U-TOLJfi`Vyb`-UdZE_uQG&GjX(!qzmk!5ewjTmJ$SuIv2My}A2LNPgRrtbf)U$s&mrzMk%#Mq(7YyVy+FZswa-o3y(yZ8=P9k`cSh zxgI2DO=@jYKnFC)mOBxduH{HsA#olQ+LyU$z|5jm?M@cVy68?Agu=pO`}F?g2<>|; zbK4o^IBz?Q2=IT_PVc1~y_dd#&309^Ei~L1mJ03A3sBN8yH}5e7|dW~uH?NGd;FLq z4O$o@tQ~Q)`$X;0A!d05%Y3Xb>#`Te-`SVFs4zrH&IBcL7lX=E%HVQPG7f76C8Hqj zJIYd14=CBz;7CqF`8p^G?)IY}z{ zA$Ld8)t_$;HJ0cyQ~&K%Z4i1&TiRpGLoI{Dv^?}Sc06w3bO@`7!*9cAV*;Dyx=E#a zBU9~dhHYE+;XU1bM)E}NYI?6558UpfHi!1%KYSJT@!#Sh&^Z#LBKN@apo$+$muP($ zV$s-#R!YL=l~^uq15a<>CSgn-;9AU62r(7f&TW|=lEelFv?w+^N}>hcTUcmV>K~e% zSh9E3*+`iyIg+|F1+)FR>lb77?UE2o$Hr`#K6=CAe)sc?ba!LP-tPGB5}dI&3&c68 zSvwWzStn-nhT^U6=e<=MM!(|z-HgRp&jGjy5skvbOGM8*5bI-$`xp0{&w%bGQ=?!U zTv^inw)f_*U_dvQDw2JN${yO3YC|*2sGjSKaBIQ2zH`C701uvB^OWI^)MeILk*fnG zt(|pN+FAoBsnv@?NxNSIstG@zaU;%`D2js-p?(2sjpDszQU3xpSMj)LE)>@UrYl~t zMR7xQhT^%=)?~Sx11q7<1SKtYA}DELB^HG?g!S#7J&WvxX@{8uDsGW?&eqxXsy4Pc z;B?4xDsn=$5s=!Yp0BMmWens>oPqgS;#3$HCr0R|=e@P~aJ?G12yl&6*`&5jaw5m*UUpx)5EKrA*K7_>9MfkEB~aEP9kpkm)E zWY4A|)@POXl6u%y^mgCBlPRTPsWg95GH$@g0^$uB?Qv_QW@%H+e7pjd#?qKJZ?)1vTb{6&)2z z(f*CDp|w#K1*{{|^D z^A2HDfEYK2wlnRULp$W(+wxD9vN|Dydug_`3dV)}Gi_9D+f^*Zn+Z;BgE-zkv1FyU z*a3ZP+USnx=^kMukHYAXgXqw9bZff{v0GJujsW9M7~|kgE!px^nT-IE-$+8SbP;0T zsTwA2M0-Picm$Oqg<&#^R9kG)Du8c8sfS3hlk%tLZBK3P+3vz?Vmpyj!Fg}@bgy@L z*K*v^)BOxO$(upRL(-gpRJOG(I|nzbo~@&C)CH}*y!19u~5 z3x25|^}p$zwQ2OL-nm;A8{j;PzAZXj)$Pkrx5w};u+-jHKO6n>^u>o;QG_-vHqh-Y zMm>;7kz!RjFbdZXkza`+a7p+5-kbAL-n)K)24)#IXO7SztLuUH))Vs5b+$h z>6~|$ZkVE*^EZ|dT$6G)?VrjZ800^E4`uDQ=u)e+_4+!o(7Q zlcG4o-L0s1KyeYzqpXkxdjLGaa;dRi-8~#<8T}puigBmUaL)oyur%=yIW9>`D5aoe z-pzS!m%{R0BcV2f(z8lXGG5*RN|reP0cw^)aE2rl=f8YXpAiKm@y-Gz@p7&!@h%26 z11OKN9F(N_c2KJn_CZjWDeC8-WTEu8pk)002`I+xF~&d@%3WG$b0q@rS6NiEb$1CU z8IyCLNm4~OFOrr!L2+po@702mls*JXQuS+4vR3dusD&zy0~YTjbQZ#^0VR1rTkV}H zysJUYRfrovU8Jb5f?A`f*Fnux)Vb)R8x>V;QI~*{Ct40l@?{MuDG%-`3H4=A@$O>UUYxkfA2_2vAZUqd-aO$Agm8PX;w#rTzj?mB<&55e6lxqI(P}k2^pu zRJnGa#e3G`{S%awhd19WkJCX(c}xT)OYbuj5M1X>TJj_V?f3zbSb2ktP6>E6j+;zL3eq%eL|~ zFx1_fFwFiM+_j{62SeSaR`!&dZOeZmuOxCZIZI9K6isLXJ&-k$Fr zs~%sK-dSb`U%!Z1qE1*pIF=VkmpR5R*gcNxRoaY6r=Q`$st+p(^F!OwY!DmYjZ@L0 zQ1#aVC{@VO-MG+!Ws?*JC)Tqq%L=iy)3DiK<0)RxcEn|W&14FMDMD;haxF`zJF9}&V#)o^l6wmjm)5Xz2}rIl4s-IK*-ctf<(q+DFu3ud@Uo}^25S8Xiergt$RmM|CzKD2W9*!?{T=#R5(O39j zKO&iYiTd(sSPEsVtcaWkKV|K&@WrCw1$7b^Ui%uy;FO1bO)OKv)*w^l`KCR z!fGQE>u+1BuXa#X6r`&5_osctO(70!AaIpv`YdWZSwppG8uz3xmF zFjt1Htxmj$Y_42p=x2b3Qm?0d9Kd55kY?BD+^b*?tGi;Ly)IN>v&>9pce5z~IqvyL z*NlWOV%t+Jsm6m(D-=eMp^(DpovPJzF)Fc(h-#|$mAA*uNe5f}x7)1&|=@fvH zyL`o%Q*iXZppq)&5GcN;?J=Sj?{ZMgSD(>kQCEYyLGk!vaj&9ow4W2}t`2V(roB&m z-N8{*#_K{ps3gJnCw;2vLo=CQkn7{l_Q&4HXP9b*C_7L$9h0O@Lw7CygvJJqiy|LY=AYG;aZ}Un7WG_Ai{i;&KcPuyY#q0&jFtdg#44P3U z05ng*h4d2Gm&Ws8Qv>g#aa!^$<`EmvFRl+`6M!G5*n>KPH^e?(`7;E%+l_e??#diR z4f!#$NpN!yf3#xMai}o)YBICZyk#!ZB09cKo_=euN;XiL8JekStvzh4ms%<}ih`Bu z&n9v_ejc?-(yXd~Bd(?TvyqD2otE4;LCLW9K1*(cCHHGf?sZVlsqo&kZVrJ(a%X-$V5=%%d&D_aH*d%FKqFjQ4xPd{H$hN_BiufFns zzxiU`e{Q}wQ}h%@Q`&kgH4m%s*p1Xy!KyXEl!S#W<5?&Q`vUETBfo-~=FB=@0Td4- zMy#AzcSOA?<~{^}5*oN24wQ&}f%sF&;ZQ6->|WwKml7tgF^K>Rc6w%Dqxh}Lx8^4N zrcI-Y-Z2uxtE>nRZ*QfWu4wIMjhGLj8m!TqHV4QwZ#f!SlZ$za$Z^bbpF#{~-XcqT ztn$)S*?S8%1?ql@0Euy248?4Ljhb_Xa*c+`hZ1p5)L1B??Q^9idJE^^B4$0wvfn zpnj=%96<_?Ul?gtSZ;TSYNBbMPz@Hf$fB;asH-hX)D>4$(ZQR;l-0xKmALfkUZ56o z&;hY-p$|7!=dNzd#n*fd{#?4s3C5tUkl#(5&hI8hdOoGD`jn>DpVHL&)6ZjSZ3R46 zCCj}0oTk<$EMG#IZRsj&DyMXn`38e-`v=ig&>`5VwDbw}ldVheVTFBo8zLvggs(CT zR7_x5iYb*u!jx{>pMz@RSj`-^6r`{yJUTTe0M~;3Hz>jK zdkmuJP6Q>Pa6wK&;R?ocDwJ`cB$TP3Bot1!B$RoeMA5Z@5=D0p_X4<4Y96`v#~s#O5=;Z&5!3wMC_1y(PyHAXmUV#;+_MRi3Cfz7Qf5KeZu>t`L;O zF&xw{74{^HM{8zLbTyz7Dg~EW)M8LFjlIUAZU7}}kXtK4akoXN?^x8s7R3+7$XzPL z9eq7}CZ%9;sOF5pqCD)lq_1}JGe>%E$d$`YcqA_Har0U!Qtx%^NX{$Z3gDMOO6@m4 z%Z;@Yn9AZUXY*@FNv_@Z28$Ts=;tv72^JN=_z2&e26HM5i`V@HPc60?>w-mo%rf*p zy%U71^TWbDAOAEr6)dV69W07q3bO@t4D?0bM`3n@)x%3Tu~`q?<=7k%uOnd^ zv|%Pr5LPLy0+`4k=rQ=bR?qW8dXt4ZzVTpAa>l22XD-H$ z4njvnc+SF-MA205&1Yca0Ru8TH^7l14A}m%RjsbcmnlEMVjkA!B1KbGVo)?6;4T6% z6i7bVIUjkYZ^I~5Zd(&3bC!yaF)l)0%A%ZpGV^OorcCxPIA_jeSz)AcvhoVmVNw4J zl&mprwkW;^AUv*92z5Ist|@tpdvT@$@u_bd3-u;=((KuUj=)`yl0Hr${*JRuhB&nm zIj%~H9LE%l(PJD9O5{|3Kk4&MPtukb-2a_v20o><`agb)iCzCpa|)ow==oeGF-z^l zSZ2ZMcTDEuql#*pB%RN?=pMW`vll=4T)eCza2&5H1V``Y5-aGvFn2WhdtmgaD@_0v zk!ClI6DNx5X0x@M{fwkX2|D~)Izb|sl{8O1^6WRw~#Hg0yH~T{x=hr&U5zArbN#s zt4B7w==2_0?=Pk;-w!mXPg^hEAsNYKef1n^U&bs-W&h00a8;qR_105yN17CSYpL3t zmIz`dDE5~gWm6$NANvUD`Pc}h=UWR(u6~--Z@e9R8S)tf73pE{-JmsaJW+?>w z<28z6FD%qoEQ(4(cjgo9_ zphaVY+k9E)*#`Z7G>mP6KcMq30FIcLu6~nm-KlKrH zS&Bp#lm<=Z0}R87=^DNjuS{b(4eyZ5+xP_lC76+*YE&@vyV2!`e|Eq2GH%Ri>}+ps zU+8ab_n+Q%p1-BBDbdmCUy|%f_!q?e7y8GK9be)X7wQyi>R7sB*g(*d#;f2qrNu^F z;6F4-dlmP0B^R``H7-14B<=Bdv%fLnZ;Lk~ZIk?Xlz3Mrsx7`WF|JFwJu${5mMk5Y z#u&%PkB?o@nEg)2pm*9@21m8E431keIBbbR4aogPjcqNbH^69jPc`YS!1Wg7{=R+2Hv(9!;FDpDhKmA zy#^(6I z#>JaU(wpqS8Zi)Xh=w&#oZ)x*8`~urOZ;8%D%9m?dyaQzL>21ngm%!n0%Z)(Lw=N< zs1(r>@#cXsw0HQSRp1N=<#uHf-jU+X0|U-bDb5Nqg^{$X6lQDl1G3)C0MTV7{;qf; zLEV+;@J|>!ewdM7!SpjMitFlSUU#T#r)(wE=JJltuK0P-o^2B;(E<$#dV->d8D}V( zc}Z%bDzyb2iA9#SWoA#XGCPaF8C{J_;_0QWn~GL@j*KwO2TiP48n-VNb;i3EEgf*Z zWMHA#g_n%`Tf6+omor+Ly}t?^j()K`3=GdF%wyA4)s$YM3GEK=w{i%7vHeE-#1S!ImZy4a`ZSGrlm{23J#8 z$D4(rl)buT>pNbKiz5MJm$ok)n6&gPJY=Obg_~QK#Nn^2qrI`s-_nV?oinlvzPWOQ z=$`oW$#`fM5DIy$zp1UGE8cmqn%qgZTmI$abapbs((5~lVtH#bYGg+;(bkHfkUMDZ zEgi}BW~XFJ>s2gGE#2Y-I7JcYqIm1VMG2?SK|(dfGlFGdIjX;{N6nr`mGM$II_pa7 z#?|#WW^dQn)4L1~Wy(9Qf-(cczpQI4pVJQ~Wbvy812r3i0aT&2bu@`XGdrNRcuPXX zU?e)03el-@fdB*TKG8vS3R=~?_Kt>jG;X8~jkzUp9y?9y4YLP@+K4YR8N(=sU~`aC zapoY01RYAsZZu|oULAL4=hg8;<|ZL#W@d;p_pIh)sLEwXWv~=hvMbI3p`+TK-fU}- zc-I(=1W=fkPKiUG4A4yN{`39CQ2iayrdl#XCb1~q8TU8h*Ofp=oI{{#dJNSHO~~KT zLKvQkX+ZsIZBn&Yb>tXkFVg)^a|h~3hrcDhTx5-SD`SVOKMoIqesroJJDPP+1I9;A zt>4_yerCeIsBu}`UpzWJTbP)5W78t4ia3V*Sk!nndH%3BzI#5%Qp}6+yB9wm+e^Rk zbsoF)^G@0_@ zXLIUtHOj&1##PY4c>q^j!?sbc;EJ92_oDjdF1K?haS3ZB!*VK?kP|oQoYCnnZC$TTo*Y@v9O=OWKhf zm6vY5Vq)O7am_dov!y>d`70sFeURFq{k2H zFB8k2%9P>apWAgWs#6iDYrl2uzcOVCl*~zZJgy)lS}wqn$-wj+sbpwoJOR|>KdZ+Q z!$6s%luQ$3rh?i(rF(Ctj91BU?fwK%b=B1yGG$l_Zr2uM!E#U+KK~Fv1LNZ6uG{6t zbBzV{8ZT??7e1KgyG0D{3-;)*rqw;3i(e5r=ewOXKQ<+ zh4+VBsH51_^daKsXwC_i%()pdG%z#|K~1+fOb>^)688d~KIb?WmQ3mI#49<-i zoNr}tzMsK)B7^hG49-g#oNXDLzhrP|yeNnHT!*1{IyuK>aL&%)oR`7jTYt`QF3sSy zWN_AGaK4HHX?<+6CWsl*8oA%-}R;a5^(Mt1>vL49+()IN#6UJek3HErauq z3{HOr=L_s4)nPu@DH)v68JwvZoL~m0A%k;82Ip!Ar(tR9RWss^&Cc|s95TFjcLwL- z49-t7I2$rJzslgek->RabB;qz5QXtC%^7NOhH?<04l@r&W^hWtF_}`MI?YQUhd9Qf zCxYX4v0vix(+x|}`w9lHrD+spoG7l?yIqqB!7*;~M_;v3k7^WUoTw4t*r+?--SV1^ z`aq*7<3ydLQ0x_Xl)pFa_cm%0QpF? zLZc|-M2%7?))^jO{l>R&HlOQZjiQVbbrv{omx-GErE_X*)O#9587Jy&h2jX1$D;FZ zirc7DbVZ|#6Ezwfw~IB6$0yfchJm%2!s!}C87FECI5z6rD<8(7(nNhrqbTDJhdP8x7f#)%pSj@zY`n(>2KAJ4H-S85bx zoG8ZPcA0s&@PZq++NfJJiZV_V=PNeq3upg5Y@^m|6lI*Ki3-J0J&zAP52v-|4>XE0 zP87%6ZkLG~9$)^D9oK0`F(kZVi=Pw4+HRu`yM8P-Pt82MNTVp@L{aP7sGf!QJ#3@a zY7}LhD7F!|%WPlsj=%h;HtHuDMHwgRTt{5pZ-rL|p)m+hwM3b8*|xZPeu&MHwgRLWLTK zGmlkIeeYHqb+1NI#)&Eg$L(Sp=kf4)A3bfO-q9$^I8gy`+^(@W^EmajYY~814@Vs> z+yMSLQBcr8v4`UE_rUkxvr!!yMHwfm92^@pE50#eqaM{L$~aLK3Uv(5JbG3UqKp#-<$}0$78@%b?M>^y zk{U%BC#uqcif?@H7j|6tXcT3fC^RR;H4{?$zYu zHp;{05FC_oqR`0!#XgkB8P}$6w^3n@qKp$&3yvMv$s7MY%0}IwQIv6_P!)h0fisU4 z&mH+?8}+H{jiQVbb*Vy)!I{Um z-#_guHtOFRMH!$Lbag2qoaW-^cIBIwj{oN$FPBQjG1t3Hq0HL5a`{F)x>*nBY7}Lh zDV(QJ$4H>YJ-@hVv5mT3qbTD<%~vS1eO(@O|IjO%9_MHwfmS)ok5F~8`B4{X#s8bui=D(*l%`oO4bY}63_ zxRi0CS`_MVoO#S0UA5gtou*NgaiSK2V{6eR&lD>OoN!cV6lI*KMc~-8>_0X=0Of7w zMvF#K#))cGsKapP@#C{gx^2`=8bui=3Y8UcnJs1Ie_i^dje0<%DC0z3p-^V8S6>~5 zhA~sPNuwy^M71fDsiR^~RBf|S-V<>X2W6b7CE&PSqj(dCH(K(Hjhd%XlyRck!LdiM z_iuT0jg5LxqbMV({s^2rTxIHn4i%2BOxQAPN^1o^)NLM=amKzB9D8K7_%H8$$BYTz z3ezacI8j$Blo{6@+qS2*?p}?ej1$$VP`dFO`+BM$vg6vIQIv6_s4CqqtHt#njSMzR z@FR_)j1!emC=bp&CboWSi;X%_4@@ZIL?ywoXSFw6Ui2p$HASN+<3ue}s6w21?0w_D zAKR#z8bui=YB@OeSbdytJF1)cTq`w-GEUT03RQ$Nk9XQnfU+@B8#RhDPSgr;?0H=0 zrq!rIChG8$7?L``Y*ejAQO1e7Mxneo^O!Ps-cvT}CXJ$u6SWeY zv{K&X>9tWm(kRL}QQZ#IF+baJij8_xqbTDC*E6UqmI!i$~aNiJ5aCR-U#Jn=Eg{kqKp%DgF@xw%;VKR4&P~`CTbLA zoTwYYv3sJAUM)S#M%8E(Wt=Ef=rq)tmwx{p8?`{ADC0!kZe8bz5Q#&>X4y0o*SsSc)Ifzk=3rP#b}jCR1DcEudn{FLJ=5SSL2 zmPM+fqrEH9+1T1X69$cg3C)N%b+k9Nw#7rR8>(+^u2P0~gGpZmYulUztzcs?&zwUG z!NG!L;+WD_*zvYEt(cIb+{D4;te6>a`HHAADjrNY2D87JwCNj6V5YMCpGiC8_NI7b zW^Qu1L<+0u!2%1zdd!S+Fqueed%UqT+?p6nfPs{?wGDQgxicH4uF42;FrhiHK@eph%_`dbtW2GI~Fvw zB-@*8wt!$ZwxpxIVVP+hVWFJ2yR_{@Lsz>=N$`jsX)r@=>5Rw4_@NWVXF>*1p*uTP zD0XE$Q5lDUU!qg4XAZc=eb$wTw%o)+peLew)NxT`=fb#7+03PFt!A?q*=QVhwIUEs=qjk1rbJm+U2;j|09FidL#Uj< z150JWlSuY8s!T;&5P^ZsEgM%tkULf@kV|KM6`oU93eTY#g=MJ?hk6@u&r)W>AE>&r zawiT5BV8@YElUZdUs_p`t_{w!!n?o?my_wJq zZSk3jMi^wPPzRPO3<|6?fwmG$+Hr%=*owBMZnSoxX{@*iJzaBkdqqcEatYNCUd*u} ziN^Hyf?IeVsbP_sVWUCbM^Ue=RI|~hUB?p05NHyZ=hnrSn`A{Jq-b8=u;hy7R!ATr zDh5RbB}Gzz86B&zwGuZ14GmrKrX*VPiiV~|@un*pnmRhJXpILZLAkZHE?Cmg)fJ!E z&~+u0>C(=4Q)^e;C~c@0WjhmZ;59Ck(Zj)%vh)HC5hOU;wQy#9S)B11rKJrOfrjzr z6@i-anoz8~EF4$>t=3gK83xIvll6;#rA1|B0aG>@4pddth9h-#^#N^2T{^k7y>xPE zQAN0`w77J#yp2#gnQx|*PF@h_tzdoWuo9F`kk<$uIaOX8h?dt?N9(Jj7~SFh!qN#2*$K?*c}2%8I(d zVI7&UXrL}q6R8hZ)C>;8%Zb^5HRTnN7|clz2Fwy;Bv4&lR~L&#YX=7|$r52C5Ur@J ztFNkz90ZpcUoeE4S63a1hJu5XnSLj7@M=>TsHl#G>MN_t2MHmg)TgAEdU;(S77A9@ zmW2*dG)wTJWM(GU1tRsR@zwPQsS7}6K6QCzAXpKOR#jA01u{}M5vk+*1kMT+3)I%v z*4Bk1l>r2~T(!SCX`ttpPAYCG9giH6w=gsBO&J(gb$Ph1B34(%uoh*?TVZ9nHz2HN zpcV}#8mfzBeUfDyY-M|(U|FCd91B(kgH-{(pfo_=K=B08N;^v@%iEvnX>8`Rih$L2 zrv$^5p{g)izPt|VeBjDJO?|k&Dp+N=2K7p4scNo>C8NDo2FlBWk;+h+U9@S4#DYvj zI8YG_mj$EMRaOJg2y{$srIT=WCMp~#udI%SW0e_EKom*J0*IEO0z^^KP1R$^kjM%s z4~J{Rb+K$o!Xpff0gbUb6baQ=q3_7v4e)KO(#d?SwRAFi1yxV2GAIuR>dPxC%4*AM z0xjyzRwdD>J089hK#K_0)>p)0gP{-AT|@(w zwXu5Wp724U$K&F~EO`(lrOS@LG7znbRYt<$NI;D-2Gn4*EW90CIvFhhVW_Sb0}u<2 zysoRSE@$HzB=&Z+33+dpjX=FPYonuqP-S&_D2!&5y`(bK3Y6Y53y;jJ30DW}>tdln z@K)yOo?msfX-^*wL@O)mYlETcY|Ynv_(d{M(27bmT;8(NQ6H!)D=V)EV+2y2sRi)H zZRuq7$}Ptre5E#B54709lm{xyDr&34HL(B`LnU9s)#auy0aQhRm*Ak&^cW}|AFT}-lakkg2MX5K)s|OPMPma6mpB9~DgyPfs%UjA zTr)^DF$)?gPvXH_QPs!W*&0OVpp&Z!LB%0+)O)>Y<)U8f%`6xjUlpiF2U}em8!USD z0MCOyo$ln)NfXRY z*U?MLjRC!6eW1LyJX#jQC`V@k#;&?mOfkD}ogD-3ID?7=ke_9!?PVxB^F?S!p_P{h zsw%_PVT|Agz8~$7n^u7?Ga9Zf*P~rlc85TDb)crYzP>6laAc$;C-9YO^dapF9Uu&F zqrq5NRS?};cFi=P0&@uOP>i*KSU4K4FFW)!z<7Hy`nNuT~!vYfmX|=(9Gtd-qMC@E1lq| zJ61|6kO>v_^=08IgqNuoS!>n1v!#>ud)%rG*l>)-Lv?lG>RR;ZnQ(cv+YSOx!C=zi zb>V2FJ{qdc250Q@&aNYR8;)iZLpD}dMYF-p*sUNWdce5^(%Ou{jjWnm>nwV?Q_pLm z>&xqcRW-qSrK=C7Z7YzAmG#y292TaHT%giXg$InVBd9r5k+RyVpl%OL&4598O(0ww ztf?-K1+5X7nkb6s1Xii8(n+iw1Ax&$RWMi`t_uTbPN~Z~uEKaiK_)LFjEUkP0xzjM znp8QWjYVq9!j<7eMceEIRtG{=!BDIsf~jq;vDF7K84K5yg<}C}BIcX#j-aR2*CW_q zo$4>MC3;$ARk$u#j`qNp-Q__YAxw>7VjC?hs}0~a_bm6(Q-(s3SVdKRK)vCfMI;)i zsl^DoHpH61x9zjYObTIYSWyu!4`k}9b1N#UtEw@t3g~z99SOu(pt2Uj;fk6vU1(S} zz@uO!f@YjP5J{VWsh9Z8dv=S!$^@pUb>-+$r2HrIp>q$3AUm|`Ky7VBH731yC{>## zOAh54o*hzUpuVcMrWVT?W=P1$&!4WW4cFc<(G9mcfayqGWeui^=KRIkdalMCTOKHV zaSCImP*r7FD1y2qck!IMIsgwz3LIYM%tR`zlI-u!PVR~AQZZs4#o6aHQ zst;6#!&NnCII1CAy_2I>O|HgLL$Io{J|GG_{Yj@p>LOL4va-s6){W^mF=DJOs}ENO z!?pIHO@AxF5km#W)U}mm^}!(4ax#@avknmMlkixJ{(YAVZflU6Ik^f28Nnm+c8zCj>e!2 z2Ak(O$8dNY^k!B9fG)2pudPC^sLwO#?jmC{S|6yb3RP6bPV=dMVTg zg5@Z`I&{$ZpaaGaaV*84xCeA5<*`5{QXh+kqBQ~e)C1!!os2bFj*T;40qD_iIdU;GWiQybo}FrCrq5+w~q-^iYHAOKY9Gb zb8Q}}3FF64nKH%ipEza8#PRCZ<-;Pbkn!&E?TzDu;vfuL{zm$DFnB!dXjxK{fgUm#2f5XSgCbtxFv3z@ zhHP?mNZ-0KhVj-pBFAFMCbt{>KaDkv7uZm63|6nML3pdi;~l>VB1bcuY~k@!!Q+Zi z7bb}ut7|qnmfK#)Ts}qQ1}nEd+};G4XU-KlRN1WIEk}4QQw`$}(?pKuaoOVKS4#WO z!xv4@7rBB#hrGCY9rq zb`16$WjV+(|7YYN$9U)EAjkY$oP!+e(KR{9F}xdckYhgIm4logau4Jn$9DL94suY< z#&2_wV|(43qujr8kQ<8d@+xpjJF?XSc2`H_Ajk4OB?me717mWKlAjjwUSq^e6w-%nB_ zRL!6%tBQ-V`q~zMlCf@d;q)keoZXmbMXJ-qI1e?H(}u#H?tCM8rs?irxOObNh;lo5 zf;#~EW)lD1;(l^SVk|wmX$Rzotv(?eDBZD>={basm)Gu3o^8f z@dAS15_uL_G^Roas@=+i}o`^9uXWgeCFo!@`&t!9>dS0KK;)t zkNWJ)r;0)|R<3+}26d;%ML~(&3{ZRU^Qh15KM2aF+~3@zsFgSif-fit;wDi4#LuHV zb_jx1r3pWu@ixx)Dyk4QN2v2Hic@+g;>8L6FQl;H{Q|Bq;FaT`6{kT#;gduCpIy9vS~7oC89aMPXmoHao;c`Z z6BX$IoL;HAl<61>J}}0VB=c83i^82R;j;UbJUsyv2a)3U?sY|-hO^{p7?jAxK#ANe zP*Pf)WQtrXC}x=yf=u-0fZL z(r)fi0dQ}T(T`joBCcel=;tg#BH-HQ?Ztj!;N}qU`pHB5Tl$j{B;3`c_R{N(ihw~Z zLSS$WGNM2ElIVWrZT=N?pT2SwQOQ=_?epGpA>2Z(3vCguRWxi3@b#YGpM0`E`FMZw zG1IZ;7KSE3vr2sm=Efg3ef`U5=GGg=3G!d zV=X9&?G{iH+g+d}wr_!YRw2FvN@DvFD2eSki=x{qrqN^k9p_UOiBq2mn)thl;lPb)VCC`9uzf^&u9cCPp;H< zKD$r2(X?DrosiYp7;E2?NTZ>~P3)pK55<*%mU(a=PF`8Oe{<-7ioM@^%U?h&9-=cHZi?XP z7oLhl$skwZGYn1wN3DzYDbHfedaZy$`;hT{uFwI?S(ftstzBth43h_s@%<1^ zhv7#sdO*X|d8yo@6J&?}zMWuD-3OyCx z;_>f7I3~oupgAr&boJhhpx`NzXn2&=7YM_?$VY&ungMPeti8ZNrBs6Ax8R}<6^hmN zosSMH?%y2hQ^fw>d3&HB7RnrrbG04#?WET^bL>96r+c5VsRHer4x~c++#5EB_8>Qml5O6)ZK=>+_p>E^-nzbUNpkzjucLAm zZ(Y0I8^XBkwY8`>1>VrCK0MfvUJPjYxI=oUrjkB5vpr_?C!>EqXXf-7x~3NPdSonx z=6@2xmr8IZs6zZa#u%JGQ`7{Ur4qD*61l5DiCi}*sa{{QGwW}1nIXvCFI z=GpliP0zu&*R$CTEmp5a~F=mKdsLP6ewHm^s;nNPoe|-AmZ8*F_7b+iD2oTm(6sGweb%Wj$yr*0~P< z&vFk9-n@6NdC!`7Asr~+f|WPVH>Ynb4axZ_ptz>%Q9GX;wRnsGuBC*S!yl*^}@8Jj*D9nL~=%tXA;;N(df?0!(UD&8@OQz(uzr0H7CbS9i$7Q&5d zvK$K=RjFiJVzD(bFhvj;JwjvzF%j;JuL+M|lT$c*6WtVJ)b zMPr*o``A=<(?#oI(3?Yh`A?NZY76qeczthlI}3U1s>b5Cej%-#rMxc6-eBi+48WyD zqY0y*NzFP?@HCIz+>z_>}dwin#cB9hzG{SzFrR=7R27(p{P(G_Vl`~7Rz=j<;>RU!_Q-|W(-yJ zp#+rFhZ{kO9NVPGQN>Dq;J8lYwt!lsB&gJ-#i}yR@7Y6Tdxn{{$7h-Jas;8*!=&A) z(Lita9+bVkD3S%}SQDdT+s|By^LjoTl9=4{nL9DQ=d--TXfxsyvrP}3i(@lQ-mLg>zF9`PWZ{R16It6i~CC8!{ITroPN{&S@a*ua3J!%zwO zJ%^|SdQ@pHbfuERS&z&;Ic7cjV)lBZQemlES&Qin?Ga57!UB!=mTkxs zbXxVj-8<1+nNxtMS*f5E`lKH)D^)5)&Ct_#nD>SnVEc>KB7+SiE;(%4yuOu_cg+Qt zb%&R$&)CIjBr6UtR~^6W0(F_^T}zV^u)H_ZMnTn^U7YnvK;8RR?%73^ECF@zTm6S! zZgt6ky7#SmdDlJ_D+1aL0xa*%e+IEG{O?_V(CP6qJ>SEvmG|y?Uh#$`$ynO znXBfKdFz>E#`x@Ht`4ivk0G;!?Pdy?D<^=tatwpi%bt0wPiBiydJ8iK?YeYRp4oR7 zWVT=#rlaAa4MQXEErG(mdD>_F{m`y@VH4hj2Roc?^@|Yud~H<_hi?#|apw>-ly8HQQ0@oCkUYjCpg7(1 z7*Bwj3(9A_0!sA3K2ZOq?s7{1u%Zrt`k|r>jOB#N1NDgF<%9ZxqD)=FL41xKic^=M z8Ro7_I1r&C_n#FOT z4p&dkYAv0pACxo;j+Gdp&zOd@jEE{gamUlAd^FvnC>hP7mX0)gjbpQnUYO2#8?hS2 zLH$`JeduT|0Ngli_3_#ImGwV?sUOTY4FePBMVPfn4XK4cGI`?1ewK$sHu^tmvm=o^ADMV~uyMo(W} z!kYKrnYGw}!&tvSs^c8iL!YXuT>JK!^>9S$c}BoWC)rp8Y6N~B<1CzIk$WsC$;L8J zl6iHY1i^+U2z7Y0N(epYz=-3(s7L{Mi#sj&mTcq z#l!V}jHS%lzWTUq77OgJ=0fjc{gC6RF&Mcd4sIATAL87f#fE}vAe;cIm6^#o>T7GO zC7(g1k_A}Z+z;hc=&gExZT|}Qx~uw2_O7&g<*w|l8_<%zmE+Agi>hLCsB8zBC}7!; zd(#N{<5h<+;bEfG5)9I|dGzxEv+eUK`;$JMdSy)^V-@tq!x8Mehy#PPfdduJ_&sX; zE&YQZ*V3v=K}qXlCoFPxpnig%M>(z(xfWdW(R{`-oCUE8lpuOQNk5VTCH=@(L9x2| zl#PY-Bb#t7Sn318vf@00pU2pSv&8l{P$KscD3SXYs9)meF@~W1OB_dlk~p|PChp6pd@6@e4D}Z8JB@ttf+;c7Agt@2N*7~8rXf5GSfOlaml)rT4Yj-YxWBN zu56lJZG_Fn`d}Yo)k}dKmtkk54e)9%5cetD|hsE_aS*$ z-YMCbJlReq_nFKECRAya6uFCs)B9E`hEyNom}agiWJY8pj!#>EMh!EUx`s3Qm(^&G z=^ue$CBx4Em5-mt7>%=3u<@XDhJzBhS)fGjQczqF@Tk3Fkz=*G4L_ec->#_jI7`L( zJt!%*Pe93Cu1HG(ax2IxKokHraiDj6vt@Potz=LYDE=jfV-)xwt`0jY1xC>3b^^n+ z){Xzqt`6`2rCJ?+%Ul^&djV#-XRZ!!R;$B(B`SLT`UWZ1B7Ky1((pp*@(Xcth&1|fubKZe}tXRgpT|BGl3}z%!aZ}L(j^wv` zZ={kc+0wn5)AhCcuc|89+Z`-<*`5^4n}4uSQoNt!>&4z4xMkC9zMX47#Nz|x-|h1M;I;h+S;`2j=s z7@QwS$N^C8;K8~B)Rl^A1l6G^RLuY1b_Xkp&F*0F5NnGN`-QzBZX52yk47bXv^5Bf z=3pT(ExIS>jYRiM>)zW7OOQzS-f8ppdF$uxo0i<^txxV`>A-pctBXZuNAaEBjE+L~ z4-Z3-yx7@_+ddq*j4Xs_}K%VUmh zMcv| zSas};!R%ArpoIqwdltKOY$(C*{8W-yAC%ND|f^`!F2v*3a5EExN;7AKfwf zjnOZcmrXa2Z*CXe&=@zZuEjzUnv-D~jVj179-S55SO+4~1hTtUDIj9fe&-6fA-mBOH4tf+_ z*nT`-ax|(yYSv!Xhd$PaJ!$npP4uK2=-D)4cN@)em9dXmE4Jej_CH~l4l^}xCw8(@ z*ztqBc-RzIjKv-YH-+fgs}OpCsadhzz?-;Dk>>xDM1ON)n@zUh37yWAfl@g<>c z-kZnCCV+lmXVqa}B$i?Wt49Bri5#Z_dlZ5#PO4ZZD5+v>$AY*WlpyW^#eTx0 zOmPMAFs@}%@H0??;0#j`TS0Mt|Qn<&Q5}npiQ+l5c74 z>`Dw2ZfopH_%HCE-b}!P_==A9W5#^ju+F087d6_g?_?}1&xR& zJ!L9FKiO8K{H~vMf%oIo7ypg+Mup>dOVk58LSg!?g~c)qlYS{>4UnQ%7feyi=ZLqQ9flKZ)K5oyVJ{a{aEp-c=faLxiPcTbrMlpXciDhrbdd&;nNmW5j;5_2sbb`Y{upQ1< z!FkESc>I}03~3&8O^IG2M%qgWet9XQ+{wK)%gbFqW- zDmY6WoR7e{&cQhu0esWJ34!yN#Yz7r3(L*z^2h@i#|+tr2_phDzbnIj!8i;*@wJK| z)RCun>ESR0w~JqQ;gIl}yT`APZ^fj`3{^7!!kPLtdUZasks+qb37|S z9%!J<;Y#KgI1j^bWZADPGi7+k?Ro=Hj+wsx)02LfDZ{z4+ZBflsqTAD{!OM#fs&!g zO(CeAAJm~r4@?icGPjGR!dM&M`NET#GDj&H#>H@ohHu)IDZ`N+{Pf}3{h)52eOx3{ zhG@5oUu_|E*L`_wGG&fdGHh+k%@aO)XKJPlOUdne0cWOcQ}tV@s_2F zJ>lsD$bm9GB|~G96G5$?a>n;FWsX%cyK!bXKl<>Ie`LyVa_n|pgK$m(b@UNEs4N5H zI$p`p>WMjZ%lFIvlqrMaK{#ev+})j+ohic_;db@m%$&N>{rJR889t5MwH$Gs1nS!J zt~)bR=8H;(2J5UPZy$Er-I+2YluQxMY*jD5_xHzj`%3%X5o2(>m_MwC+s1zd88-0Q zIo@}>eg!sDcHOn#zcy2bIVb*M8Q1W0K6zQ!>>{TD-6vcm-1LAa&Q_< zcRRQD(>3Qft8}Jl&WRSM zN^^V`=Tgn_TAV92=L;66M{|y{IN#8mV=d03np0?TwrbAt7U$2JbF{_zRCA88I7hL2 z!Eu7cIZ1PdTAXp3bF#%L(;Sb*nV~r+S)3-#Il|&}YR)i=)1x_Gv^ZbUoZ%MdJDPK( z#d$(=3M|e>%{koSyrMbz7U$2JV_2LIGdTSjoC0>O>M&c=7c)3#WpJiuaAst1=4EhN zGdPJ1&e{yl*D^TwWpI9&!Ff7^vn7M`dIo1t2Iu1pj+70qh;QTqA zQ#>A=avcudD~!|?PXp&`76%u`b%@9x=gj@!kaoX1Z$EX8n4Fc>>) zlplATs8hjl%lBMB{oyEjd^S;i8bui=YNSH3U*mD*nvYU8Y9xn&I4I*pod%BWrPQC; z^|Xy@(kRL}QAG-MANE~LaZtvI8U>D>!ebYBF|amsKCDrcaiY#r zD2|VK^xf8xmh)F=6lI*Kv%#@FO@FO;7Xmip`kF>j#)%rOP-a|CKj}|v6lI*KF$#4Q z&O8?Wqw`WbuJ<&GGEUSv;J96WoOwKTPg9+ZD$rR=87FEiIBpkPB9AAIJ_}XVe6AT9 zMHwe*95}Yu<~7mbH`%Ba8bui=itW|y(hp!fc*EsbQ8VLuOrt2{L{T@`sQb^Kg8`$7 zdR3z+<3v%%*q)TH|Jph4*{Jt5iZV_Vb&T7^kw1^^=UzR@MjgkYFb>K%Q4j*kY$-R_ zOib9QutrhFiJGiXoa^xTC@>Nx3FdRPX%uCgs43vMT^L5IZXwDV~Cw*0|T!oxZ zQ5;RXTgI9gd=XZoDC0~|1vs{MW6xh#?6*;W(kZ7>o0Q*VPw@MCN0t89Y_IKBoqm=My+fChD6jQjjj z+hFkYFUSohllDcq!9>zOGB=n^`bXymlgao9-C%-dUj_2_*u3bxN>*of5dI_OnlUSw(Z8*ks$4{S$i;M zLrrtg%*%45T6t@&Xlq@1Q3o6eC-Aw&Htkh;W=ChDd<8y37}rjp)2g=kculX!!ZB+a zTbXb&DydVDRnivZmHpjA<#^c)(fmrHVrHvc>ESv*c&Q*+w6q}f4bjOu5K{xoWxAqN zes?W~oq_4!#N@0yT|`1be(TR&nhvE+ttj_x9jFswYCO4g=r=1wrOm7>J2TTYm2%lT zBaU+HM0(3Q7l?0Svx?KHu~qeXk?AN|R~zmAINfb>`UgZ!zwatOGj!}0T7iRx+irMv zR}vu0J35glR9}H`PchbdRh$mCxyzUqhMhv*NcWCx*J|Fu6+#erdLC4_&*)e#PLr)r zo&J*s2$bZ5{9ISgJyY_)KhSx5Y1tUzJz@$3Ry&yeen&vK&bF zE#dTp{6FaMxV$`2Q4c3aWpEg1`6Dx}0~`)N%HjW|4h}zpa5t6RfeE!Be2&odo!ZSW zbvkUThaaQbx>!Ydn(IDg6X1vjp;uPIc}y@en3ogU515XHv=0|XNdpAS*-2d>SW^+K z3f0m9CrlTVd_8=J5S#AC1kWD}!4XfaDiomc!9kp8Mc}%wvbwA~QXY`Uo2&roq2=bC zusjf{tBTdsN7DS)nC1uT%lv}^MP$1}pIQDv;A zuD&c94X^^i5sWD|873HXqfyfNIhI!S1|zPX;AqgTJOuY~;j%C)Q^2&>&@}|E)9AehZko!<(yATY#@57w zvGM?vhnCFnuv1G4z?+%a)WbqpmbHOshT%6Pa28`@}gHl*Qyj`y%0w#V( z#9vWZLzNZ7-H>@WO)i_?p#PPJbyvu==!G_}A!YMpG6V}STd+Ctf=^;NX%IPDG3~(u z;S)3}z;Pme*}^LV|0yhj{Xs8;aeXJ7ToU2E51AGQgoA5z+2poEuIP){hiAfYoQhvI zxgSBU4r{oEA3q#}$^9I1HMlwSG?7yf`e#bBFW{XGkSoT+>^oiL{P>qG-nYP?giQo5 zw*+u-DJh#=9x~!?$b9>3C8oYtnN99*h%;iuVEaq(C{T9#hH^}^w6$%HlF`L{5H!MN0=J&^P zC8pN5v&nr5xwo-|_C}S+ag|xg4e)2f=lc+=x9LYVe-5m6-r962!^kGb-IFtOkYn?i znu8pxaa9g-jCVl}az{X}D+f7LWn)zia@;BSb`El^AHT^#4ywR-CkHu(w?79tu8ikJ za7sG{E4M%na?~f&bCBb{OLGo#tOs}IAO}@yJeY$Vmw}(kL5}fm$w7|lds_~2Oy8ay zE z9ORCJ+z)e*V|i@KL5|P+ryS+p&p{5u2*X{6Q`(WOd?`0HiyVet|MUKAivQdGY%o#| zb~Y|A$DBYf)36hQQtXdQEMVDPn0fa zW)67eZCLiBL>kY`LxaN-gJTZmWddUv9CB8qI+fw9-O5}x6Yp19pV(PbnhN2A#&|zn z$*J!dTNnIRs=UVj|FHKi;8B%V+wdL|hKSLLI%-tZQK_OJrvQS{W^$MuAd>{bNfASU z06|DF$*5R@&_FdEqP6y5ZMC7bty^_-vmEU<;s@Qw7Ed?;s2bGqSMGXV&nJ{{vR+c@gO zJ{Gql;n}EifEYi)#>eZa)Ae&Vf%tv~C*yQ5oUkX*8p<>w&f(rAFp9JEhD1ZVvbRT$ z!w1AWJWP|dn|y03(J{hTS8FEWKdlQuTm;%e+kn-bXm}@#Aw;Kbi*6peWqE3J%TQXG z+1ZvlP>UCB<-4a$Z=Kd9 zLE}LZIFKBtj2yO~_s9v+X%*&o*r9GR?KU4x=to z&;kt^|U8)2q&^5YAOI)50qCAYVTGWqK;4F&9oBR8@+^DwiU;CguF#K&RJ|s zHuHW_2eg{rYd~5D#GE-FpdLz6*tRrc^wzY}VJon0K*K)Oj$fvl;`duhKA49ZNFj}J z$}9pXd^k%EMQ-f}-90@ha%=yN|E*cfm;FSSnWFX?2XB0agRwkJEBVmIHf*In%mDd* zTweLGj{Ov`e7eh$?Ui$(zYm(VTCy!{5p zpNjbXOs&xPak-+&KH*UAlkAX^r#xwF19RR8n+6fr*Dar*}DYVHp zng=vfXbm>H8R+XmYX!Pf(6?;#L!hq-?dLXaBM|pQc#VTV-;lRF7*l;qg}U4-v>`w@ z3M#eH44`ibZ9b4nGy~l(v^#BdAJ82_`-M&01f;V2fxaVeJAu9_=o6q~K?bTWMaKbY znx1Th*(k?GQ-PFkwvE;S-46+`aSxDc#P@+d7ux+msuA+Valkwb z(mAhfKQb)A5rEh7vEi9Y_N1kD1a`(|vyxtqRQ=Yi2T;sk`l@ZHKY z32+o(*0Yr}Ca>MJxF5a%T|5xy`ek(RJ!&TpzTL;+zw!v6Rc>^zwjwTja7Me(Qh|l-7{jBCS%1c7t!<5-?9W$TVIC;N;OaN(`yERJdOGpY(1Gkw zMl(*Y-k%*h)Z9P%I*!FHgrSV*7kli}vDt_mwCbe87KlBBvuc*)l6B}xLJN4pfqIOY z!%?AX3a7<52E*|Yxa*+;7Xh{7@*A8S(%K;pNF~aFRAMR+&l~c}K^5(I^2S=xya9ymi;w(kz%K*0wYU z43?`IE4?kvgN<8GZwn1xjBZ%d#n6&~d2S(EVo)x!4#$jkSzo-v5?N=FC{&=rI>F7q z7@dy6J&}Ma9nLHjfL2|lq?vYZRyiG_`et>ctgfGBy^x(Q?G2#`)wbDcm|;_e&9~)H zPy<4X8!()O1I72DrMvw;B*Nl;P*6RM3uYK_f>MkX29!3dLC-*2Z+(z&HmvA1NF?wn zJ z=CLx4s-J;CABRi7$bUu91-Q54@{8rd7C{Se|E{1q+}8;DGVap_v02h4f;@|bMul1{ z=-0R}6~rdCP0#@weF&s)d0Lwyeo9**d=~>v7IZn#B0>C!HX?|hr4|dC0~8jt97v1F z9X8+HHXnpTwCTx#B9P3i5H8XMUvfXbPMP?^{O`j2H(2jRum_TnE7RW>?y= z*xuCR44aS1uz=Y|Mi%3^qvnhOk<#dn?|kw(JK)c?hG7Y0<7J)gw+dw1e)u6WIHsrqO%+)w}@k1bnGx38%4)>=ekHcYogdj2EZ{Zvh(^tR3Y>%K~v?=Bo)J$}&jI>-l zjM(a4WN7!IGRj8GxbZl%hjD{_^yHaL8Lh2xK>hEbKU!H}Jb~^>f4-!3$qcIk#zB%i z*~C6B^9b_LGs$Rl{byB4h_uGE&f_}b=_sbeEGsfH3^ThAAEPEk_$EZUSFVH#qE^(< zLA|3d>NzPoY~FZMT57*f-i~e`y5*&glr5V(2Gnk1PjBeX+{so&%2vRxizU1~Vl@Mn z2NCa7G%Kk5)3lh_;~&(n{_IHiinVs#%5t~W470mBr~f6$sZN71iz zJ&sF{&};|NgEQH;@X9IG+H+t}U1je8Qd#!spBKLMxEJ8^%jp6qL-V}Gukfr@;tn8{ z{T-0X?g4rlm)Cd$ca=Q|v>KP+=*Inff>;%+tRF~a&j5N6ZxKtNcHv_^c%7hWK#Y~& z_$tu#f_M_ZIzbzNSo-`1M@7Ygb^|RDBqb&NSWAl8Be9N@^WBjG2P+*tH<~6* zc$%$4V|{nL0*@2bJIZWTm+a$@w+?wbij9ZZVj!hp#`LTnGYoL2=`^drrT!Y>G_Evo z_mzHX^)6C*@U#yl|9G3ydA!vz;tB1Cs&F>tk=qIlJgoeQ|5Rf=TZ-11{Sp+*Z5(r* zW=(bQFfi!8%)yvl2z2pn3Qni4w8U`8z53zS{Y=E?Xu40GRK6)ds{1p5+Hv_s4^-c7 z#0`w9tJy5P4$S-ExRJ-}C5)S~W1WO(@90ntB*Ru3mAk}mBvsdHNk^UM%Oq6AU zSYNPfqX$lFDd2%}?ArK^OM%q4%Yf83>i!nI^-6!dUHBG&)+T5Pkh;fN0`;v8s7~Jg z5aS0Y%_GCqS&Zvof&jza zL!z4;+nFX3F>ZvW#Y$?sV2yyYv}wp-(@@j9UBKB{athjkie%aanV)0FpJPmGXdK%D zT)`ILyLJnJQ@9X|giSyiGW2N0fK7n%C29g1@mAHW+2*4XX)$19(2mP5cP$2w;#nm& z0;$VS0ckOK1}G1go^e$GNnv_Omk((1kl zNUQr5Kw91338X#rdw_~XmOby7O5P7ePe(nLba%+Ad02zmr)|HLsOFYBPfi(ax-fgY z!~A%k%;-NGj$w`4`{YB>@uTR#43wTSmvR&{Q0{7Y#&oUtQIDDe_i2$$VMJCzTyy)=yC)Lj`QE~cet^vN?i$k!Ie(g;s;qzOQ^Mrt)S0i7a3@FS^< zeVxbiB)QbZMrS|Hb>l!X3@tftZI$!Eb`eD1Cp9~AaK+uW$L>1+6!@E1*~jCJ)^{Nw zRZh-PsKittDsAjcNrTO|!sc5I^h@FU3hwQ={9?CP-Q!)|dk{!llb->#bzGtC6Xa;DIJg8L*v%w%<}e9?YMVmLyot<+-}aLn(ROX(;}#=4tA!%Yj|%> zLZ`EpmjFst_2G)`sQeSQ%YFnQaa9$>8`UW-w&Y9HF0;*3&1CmfB~;%j!FE{(RUD*g z^>8;(0WQC+%C8pm8{F3j+JU=vJKqFSmp%s4R+i%!?RL`oq52j8(s*z}cnf&F#w9@Q zKz@U>Wa>&7Nd1@x)Fy9l0IC!86`)muI7_B3e+Niiz7L2c%4@KD+Ae(00BPmMqdmSV zwD*9D1^s)SS2-W}$R-e^F?X9>qxr`FU@T^pF7`kDsLgs10cXgT(RrMu!>O=<5M$Fl z(UGoZOI&4*v|=VLQ1x00n!)J{6eJ$|Y1O!C)N$YKEQ!8zgPhW^CXSFxfUQn%+4sb{>SoIEiQcWQWXen6u9~ z-Pc~()n*>H2d~FWF`N%XP_FFt6t)7127IR>K#5CK4&JC6hY&Q@s!b#!WH=vtYbiG9N7<-1EZbw~`^|5KRIP2LRArZmAtu>O?+T4w~ z=+@>vtI1B-4adxS~S%Y4e$DW#{-_GfOQy6XGcRjqt6co6+5X)HY04=q0HuyZFxP}JDV<^09%aZk+ca&I-t_# z?p#U5J=r*qS?ribL)+eYod!Z@r$zq}ZSEfW7p#=#BUy`wegLmMg|G=f9YZB4JCWW<_3WL#bv`+x*-rAEt<$#o&PB26mF^{drMqRqIEnP%8Jqr*vzho; zwB=G|m_SVY(0<>#m55SjiYDLLG07MG{m`ul91_sib~Sm9lSC}z7Om&8J!@-p_Wq&I zIq8_1{d{B$)*IV$JxrWW3bUV|?km_lbZ^S+eU&pb=dj{|6-VDAuctga^!az%`XSo0 z_s1oCiJ9=v`_{ejFPgR7Dd`SVeQE#~NkvWGOHJNwYVt;5+?Nu*ESp> zVR|CBBWJ~=XY1^3qK>|{baL1#iPVfyN#w~rb&4$x1;z59SPRA|d(o+)yUm6{a^T58w6pBv|!D{?o^!c@FwEB5nP zUBz^a(=uZFU9{&a8-v6S;Mz^ou`|fD259y1I4rX}YOwi;@w*kA&51_qYJyec$L1?T zVs$3&|0U>L+}m;a4Nl4z#`)7VhtFWMJaMuwzbz_0h+H4xfE$YXQfYgtNfCeC6 z)Dmbrp3G7DF)#V($iZjMs9{w^G}fx!QMsq0>z?7f*0#CQ>gU@j&ZSA%jPOJ%&>!#d z-TofJg#9h(j$11~m{9A+{Gf*e&d2~MAf5fqa+2omJ%6%dhcoiDdv)miV=#P17L0Kn zrbCl`-`HvnXyA8ePRnO-cViDch86M80>IcV+S7RsC+PaO<$F3Y<(NuzeCNQH&oUx2 zH}Z6KY^j1CKvNe8?(K3SEWi(;5e7Mt7=^iUP8%9#Grz&Qw9HT|YHe6@s zYF3{CM3qWBBnaZoYFvKVsiaC&Wz*P=*0&s5Yjwkpd>Jmkn2xX4adU`<{s%xB`kw&p#9Npi2Wl5S>9`kL9rt_s z_3pUeMvA@Fp^ZI)gP4WgW!criEZ(+EXaX!TW9wV5*;#+*iKdai9ihYU4qNAT_e6G) zwS$j~(M{4i0{ic=7`-F3hvev?)<_4p<98vLn4QkV$YGFevd`+Vb6few3Udd2s=9|| z{R4v7QHLe*kG}>jIWT<&7C-zbIZ$?MGa&|sFhi4yeR!en&R4N#z}%|c7T%9O47ZDj zJG!5KzxB3dTcD+Rr{TMu^B)w#8_PrZeW=&Qb)9@RTe(OF9M$rpJElwz%rznI)|b77 zRtRmyMbB6_J0h8vw1xK~`S-=_z(TsUH1F%TBGl5nw_o$5&MPr`@?h@$U|Pb^*!8Q1 z$6B32%+N82blAS4vf=i8Gm!R1=}l&AxJN8Kh^=DTp+KZi+KZ-%;`60_`K*#mgcwg_ z{nL*y)}DcOylR%c5fTAG?a!ScR{ej}O^;5?J_Px+8kb)Vy>AgT19xp}mjh|b$u|?_ z?H2nj+hnEv9*DetG5WS%P&#z8SKrj7SkG_sq*%EAZ?SmrgWRo)&dm^ z`W6u9O>}ZyX&h;5NIwEnS5i?R)s<6$lzNM)A;sq9)HmAwyW zl}P*yNUIEPu}%lgYdi(?j-V|-?ZPKj#v-fA_zL#mvnEg~7o!!~X{tNgrEMJ$ zHL&&1Xr0|Im}{Jypu4S+U7RvH4?!sK-#rxvQwh{>>`tpu39FaM){RZJ|f4D$06e z_RylCM~|_J3M5rUNqAyv3szAuYG(Hf6IM|V$5&BA6i6%7du;R=kcQAYGNB%&!C@#aR<6tX|4C} z!%(_)?Oxom8gYfCQ0G@Jf}|n04k9%Dvta%(>jimY)68A*E&@h;_GYd(6AT}Fv9~n) zJ(g;%+@rl%1fF|4BVZb1mR+>-Wh%ooGJ!PPj|C)oQ4}bd31<+rv=I~vQ z;eN;ACMN9o4&3f{oy?%FRNtEQ0{Ta0MP*W?Z3A6@g0A)I~F*@WE|#21Vk z_|UrcFi9K8W9E5A%l6ckPETZWR8s4mFVlT-y8kU-NEChU%Xg)?8h&+=vY!1dqqp&= z4?XnICvUv;_qNn2(U*qqj-0S#O&i0@&~~2O@=uS%)K{>*Rq45_Kjpg>+cg)lk9+NY z1Qp8A`cwx1`xM<^z(x{$<+Fi`Ezy7_$({{V@aSH7u4r9*(0a!~!`eM~!srv9KHLiN zXqRk6*@K>0aY<++P)xgL^wJzcdLy5Ogi>ik1MW zYy?PUSslKDOE>qn1NmijRweGmvr4csQi+Fwbl=y{f!cBTWlc;ap2Ks6&=?|>Wi(Xw zU7*)+d1Xee9msEZ5HFQI9*BER{9+bNW%;A-nBq)3m-p-G~EOGfk=GCMlS(< zLumg5(uQ~-s`1G}I}J!1?8||)L5u*k$=h!MF?amN4}gjVJqe`E$8$ieCH=;SKmn}2q;iG??6i|CZZPRigkKz0A{LbHP9Z?9dvN&&P z^|EC!&{w-40Mh(nfu#}HV1#);+fw0NeC{t!nI0OJ$w!=A*~{1?EChlZCIg%5VYjjI zx`9VxSjKY*vQ0CBIQlX`D}c*jB9h?{55;mJ0~lBkS+XRXh6iD8v3fp2tF{wizHnL7 zqTZgUDMKe7fmtJmj~o^lHGJgk>_B5pQxiQy2uBVd8{?T3yBllgH!ZSL;fq%WM)h_- zHkR{ofJCA=^tOqJI90ndKwW`tNf=YCt~T%p9zF@HfwNJCaNd;xLS}*;>v{D{>Knw^ zCPn(t1W33&q!Ya?JXSa2+`pQHnR_GkW|8gX{8}EVhVv*49vc|A0;xjxMg?fWk!ZBI zGPfRSXQkwYb&b_a-L7BA^XPc4T|z%$4>M8|SOAa7(zpZ)MyK7;uv6bOOUYSb1J&TF z|H~#JSs(Ft;L%%VE8;!XgebfQFT=PPmmilyVdr+Ri?S3?<6V?H@l@)fpfQ$yjN{JV zKw0JDVg1T_$>HI?*#}&dt3cW0qVNOGy)MfAps-GN+}R4sVHf2sP*QO@JSU(o9OR;~ zwjJrBu&ynzDX|B(G3EaIj56}*Ja&M_+%*LiFg$b_`5Pd9^+Q*IOS zg@=1R$n%@io(abDoFF_r9`78W2ObN38qag0@N5Q80O+1?Or0Lj;}f1g<4*2j-`KZ3 zo`;k0DIU&wG5(J~75QmA&q>0=PkRGEAG95h1`-dhyf|5Scog0spxd|p;kI}lrd$g8 znHruyjA?j2o=3`;4TYC7d zcpmzY;^DD(YUZF-t)FC5{H(6*9F65=Z%V9OZ#H%7!?~wm8Zk<0yZNqkI}i zISKWY{;U+cB#tsJj*=fov5Yc0aj%Z!X^f++jHBG?qVUvvu_7Tsv_g2Vi-)fsilaOk zN7)re*%wDS7)SXejxvCat^BO;oEk?N7Du@vjuMWeRJkaOdoGM}IDU~bv!0Wv{8_%o z8*W_Va)-R%ilZcBrg2A{)bHacZ^TjFjidBu*F%0*m`{zP4349WiKFDkQOe>d*Tzxm zOv=efF|7#K#__a+ViC38c*S}|xZQ@7GC^@nPyPI|yU_o!nxqa>iac(qGenAX{x*F# zFxQbfkKHc($m5n`Pt7s<_161u1s$nrrWASHQs~%0iv1b>7M;Hn4Zjt_Ri+eq+*0hV zqFi+Q zM;^D-xuB$Y&f`n`D*Z2_S7}L&Fr~=jmI{E9;u(WGf5WDa#e|I|Rc}fK@Ww4gUmP=X z;~)F_pB$;5nNs9&OPw!L?3M9%{hRmQ;7I+!lp>E?>H<(4zm`9-|4WY4ab_Zs$1OEj zq^`i7zY|{k_D)A?gegTHx6~Ivaq_Et`SspgbulQ88M(o^S!*4?E;psf zN|DDcHC&`v#`*I<`Im!E2+!i63P19=rAC0_=*ClboV(kR znqo?k$1OEdq&Vu~@5bw%TH;7Gn^NR)ON|1>F&60kF^vRUrSd^jiac(q(IRE#*C*3& zM6tG{UNNP}NBk?1TTWTyQ zP8~I^W^1VXiAaCEj2-;tXy^*3_jn?5c0UCE_X@Yc+;7cj$dV_6nQic zzhq^sO}X7gi8Z*GEiPM~`ztS9@VMm)#;>LndEDV)ZHX~H?)=@b;je9u)B~mzdHNX} z@#Hpwh|ZUFQmh^x+n1p?>%84W@8O8`IuA30)qU`|j^{lRPuy|6eKE(K-FfVNTYw81YG8t{s&?tJs;UMx_xJDF^|S4lG528i3rTKUT#GTN z2h(G*Z-9$x>X+6uH7r-|BiY|mBkf`rZYsjsh&lD8BISOnrb#}>HOrh_FKrR~WcCTt z97WmrC$AFZyU=Ye&1IqW%2T0PIp}(@WSB-)krxK*0qKEd6NbiB+8s(<**2 zWgiJ19RZ=N=EgW$Yzee^5dg~qoq8z*%QgF;a3-epke6pvEv%`lX@J?vil*vnCbzif zHv9((n@}yL0BuTfb>kvRNtVZmYDDu91-g68wgY3W1tJ>MVAG@|Lys(=nN1r`g<-WN z7AZDOAzC1dhvel$?b4dMMmccZq)5^tl;Rq6-1Q8JQmnpKz-X2A-m*iOzXXj1>;q!G z%zBmR35iwP)KJaRj1Wj7S#0xohoIFILIHh<%_GM^qT1mKH8j*CWs$5g&&UD^e}W_S{|_2S3FZ#*Ttfv1Q9##<*yItUM2PykHD5cJ1D@`!zWnwOWCw5`C>V1Br~yr47`4%&7h>)ol5p9kBCp|Y|(fW#IdX(D($&7 z0dkW;&N$mzUO^~0DTH(>Dk?}$ei`>5*y82EisG`Of_&KDllYI7bd9%hR~QV#>>6yq z6$Y7vm)pFc;q!>0SxRSR#SXekIR8SVmb0ROB7hGHg;b1{Q@ubp{ib;Kh z-?V+_%9gQq1dtoWg(czQ;@q;>7$nq;f?)onif}26V#1@kM4O7qHL@DUp@OkS}{DP|po z22JecL4Gilmk)E8Fb!xc`8;d8hC3{!!HI>F^73HRP=b+cg^?F5FUqYb$*T|pizo+u z7yf*droxGZrQyOLLkhL*n>U0sgjK+NSS_v7Z6QbChT+z5Vd@Wc?zm*y8sj8LJXBQ7;U zHOyy9?6?KRwj=2%UO}*YVrfx%xL9pS%GQ)4#4xWY7(yjGsRDH@Z82K=R*oc68Y~G- zs;DS0j>&u3(t-+tmOZUaEv_gbz7z8%hAQ$DU?vc<@cioOV* ziRQEi*~PtHHU~cd{g2?;iOD7YxWbW$?_x~9Wu63keVn()j}uRc__*l5Fkl!toYBUQ zlVOSYd6D-qvUK;HnK>@0Hi&G&7@dxM-5d zJ#N#QiNt+?b9DG+;!4E#B>3*ejNDYtg5h@_u0(t*kS_OO&g;w|x%$qx!~G2-m-cv|E4J)7rYY1gBx}KIURQ2W-8yweeiL6?ji8ZyIT4Deeea4ze8tXTkLG* zJGBqK)o|}@EWO=VrF>`f!N;YYyXW9EJzV_3d5uRe8R&RoERp+ zzWDx;1fNtF)kk*^Rfds~1Rv|C^OE3WevU|jkMS)@f{*c-nFJrJ@I^`Ru{<;-!FMkB zzLo?Z^Y@V?_*lL+C&9;f>`8*}eDLj0f{*#zZ!T^zzeIY)a&t-&e9X6tlHjAhj7x&= zbnq15;N`jB^txtlF@mQ54-yKQtq4_oLOM;K><4=>|W4dflf{*F^S`vILN1aLX zeU=0t)9?6sxW)Vu=@s+i%p~~OOb$(gkM1o1>kb}$J(_6rZi@dbmii*{g<{$p1Xe6mP~et7JU`HQal|9#t?qyJ;uog6C3 z;sxSIoL5^Xj}|>|xlRgO&!dqP4z}JZ4O8`;UCnJQi!5c0Og@{2Icg?h3@yLD0n_4* zO2a%b=CiNEv}~jB;5l3~zqYzgC^kPu#38isOz+55_IcHtQd|!xJ>!zBz zsiuWd_#ew6GSwze?vmPt_z=kLPI<%png$T9u-DD2Ue*}lRJg^iZiuU#Z5DrRKP+*^ zyILgj#JDJ*r_?vWneqmFc|$j1AH~heMYRi>X4Ez_K?>gb%vhKXen- zC@2o6XgQdUuPiN73b&k|;NwpHij{YqY~XMCJjHkG58(n1^FC3(yThl2ata0Q3Ftv5 zJdQfeI$D4yUHM@h<{F&;1lPV45GheLM{ZB85dDLzt-_$T92{j@0^3@JX` zGfzAGykF$xipf)~Lo`kD|1$;AJ2IPp<@C|tm z=ZkIe4S5eojD6_4DwOHFdeaBKncF__RdwLaCXl1KsVSihzVtgU5AkKxlM+gg7u;zI ze&8GSjEGeLZHFxXZ>H-2RlD)9#Zr`v*;{+(lpar|DZ^35X}G-d(TAo!TM{SrFZ1y2 zWY8`b`5@1qng_^}z6Sedyz3kO%=bUuR`8`U zNI@wF9{|uc&tc^-sd#{8))_r`+hvJ%4kR@VH<+pV9OsB%+z(!a(vWSS)%c+XOj>$1 zJJZVUP`76HHqGrV$S28d&FHNTbrU4Ef{K%^kj-G{il2yp=VY|V%!zJCH zo>B+!2Io1>g31lE1=THTA-$$8!cf2^P4Zp@8L6X5bMvW_r{Lru>tvG*^N3nVKKG&T zZQ6z1j{k7+Dm-f$0PR)ZtUtpOYU>VteGTx{H1qo`#hAn_1B{&to7}M9$Y#2lzDeCEth+A#4NTb>E0idDw@bEoGM0 zbbx2CZ^#RH`#ZSAB>vDh48G3X3DSENz9AI+8!kj^*cQ@#S8uKGUHvR#XeO-&4zHO> zO#BM4?e|>`?rZ*PvH7mvWkrLWc40Kr5Blv}%Wux$M3_oc;|G!wZ)fr>BolN8VcDhO zVDg2#nRzfEiHxG^gfcY$kWvgPs{rQV{~G=AMW4hGm8wjLfHSZCWN0`cj4; z4>f2R?fMImf5EBzHo-?UcQc={symhiC_jts4irke$pwRy2q|AItqil(&LMpXI5(wXdSY;#A>iI3s0R zdI~FBcZoj_CF%oQpW=!y?>x>Srl^AlL6-LISjsw1s}5LV2rL`X|8JId$#$dwi+rD1 zFF8F7ZQjgh*awDMY&YwK_*NGw8A1h!##Sl{tAlnG+I%#$PVY+^)^4e^uKJ(rlp#tO z3z*{uYiN+DQwFYHowD;0lci!x8sJr2FQG@^oAoZbU2JzQ)^?|Nlgqx-%T9ySXV1*l z)S??BD%h)M)^~%Wy|cZDo%Fwu-d9PZiT`YH{)DtXN`r%*n!CZ#9xnPfy&D{44jUXK zkku*E21omK+Tg%7wox%{jm7>Bf)ZvEgeWqNp*vftJA#o`(zjxB@r3lm_s*C68PoZ zoF53Hfh8TjEe6uzThylg&_-_p=|CfT-GNUI+|v(ayDREfD0<(mhjE^h%+e_ylTeg)rys4MGj^m7{(rdh5` z2U1ry0I4hc?6<3rvt0R}jUKj9F4k-{ER%uMmAiq|m0#I!d+fIX%<8Jd6*fx6h*Lv) zu8l_6C>5na-Q#yRiexzLm*I4im#QI0&!!!VO>jNMiAPX{4q;G!nI4XnddpEPYr;-o z2fgD#ew=^eoDr-rH(l1!)30fCOHco%OIv!pO+#9Gj%%_H8C;R@z%7wSOWN|O2mGJ* zbNEa9=C_Iwf{l5W7}LB7X346=2Ux|D|I@QRo)9_YyZu9izTB~*)Pa+E4_4S`O=q_B zr1@_BE_iwdKgEc$oF7Dao@|LXrKD-Wny1-eo5;jG+K&x^)@m05p_rkb8H)Q8 zf=1%L9+zLvh@UHH8ty8=T23YSW*;s+<(@UAS58j93dk>3(yIhLh`Y-E5=dqF{1;p} zO%`|c?N30;_ZE=yQ48M058X9E3IB+dm|FMLyhY6L9= zdQ{#v1FaL<#=(W)0wGj-9j)XGwxuWQYd!$dp|i9i2q zJQCkJ)f(s5T0)tHE$@3GZz2plF)z|(Rx;@=OJUIc30QOI@q`GiyL)hkBoPbEzXY9+ zyJk`zkY;8nkn(Yc_ADrkS4=}F-vZF);_{1uC6#EiCB6=Hj!4`Cq)PNdAXTD=ffnM@ zQ{b`T1ZXer^98+ud$pi0+-n6%vz6X*a1d&Jq&w=J3S{f_Xc%h|k!zxnOe|o`#qsGd z9Iz-lJAme_&dR^D64}Tw6Q$}}v6CSQq>bU)XVEMo;LuOHZ9mWlJfM$&H}nS&=n~+8 zzTpA=5M6W)S%)$f+&2k<;1{2y3ur!QleoTRG-@F zVf75Vs7>ag4%EF+4PA;@j$VT&Rw8}=`vyokfwE$O22Ou&Hx`{G8 zP0MhNmf`EP3}0^*q+=_?a9A9*3NLco?COdqcsRCVeD4v;;*pB+-2aypV~*f_=NieD zVIG60WtjU=(ZU>|3}4JLj5ZkM487oj!KrxOt`Dh$%@Qj`Ivs5<^65er>7($Y->H4a zi=>1n!_5LO+y{=%jq)$7U461z)j>L{17SVfC#zLEq-*W)oxW=a?qy0`JFwfMW&J52 z<=XK@FiBgb4CLHd)Wog>Y31d(0BW95p5kBa#+Yl z@Gv(v=+G+~>Oeb4i*u2#vbN%$6j%U0z*g@ct&wh;Qbz^F_Azo&*2`JXW^HPncDOZs z2u(YUm>uAbiqlvwP;Q`Tb~)P8ISLVvc=@XHG(*PLucwAa2$58o9V@HWmW4VpIQy3F>unL7S zMK(eaf_-5ud2OnIfmLI2%p^Hl^@v}@usH#CG&%6#jummC)q~U;X^J20OFYvSKS;wl zDHxu7!IbGx|DfjdXOPW^>eb)sMayk59&j=0aEAdpK*j;lNFc`1{VrY|K$CaBI2w%% zj^W+s;yr8!V4v_Z)r7<(G{GPX*tVs*EXrX8DF0cT%nY^)M6w;;Imj1PWENiTbJhtf zRecuYc3gfjs?4ucyvC35tcAeoS8N7NWw!%qA$T6B9hcwu1b0>gei>KjR5jNlIkNW~ zxj;%=YSU=sN#8zgqfQ&04jtFGG~=YxKs?-7(G@o0xI$@VHkx6hS|E*iBanvvCZOZs zkJo4hYM1ayYmr8~AICDsZEucz6OLeR;iQ<^Yn@Ng78G3vYwscq#bkz*)mm~PuwD@J= zVXh$RozC_&0;wyjfYg<>KRUd%Wyt_>GrwuNL$V+~)}5 zC|F%ig(j%W)QQcYdyNx;)(andyvoP%jPi{GdO`R&MqV#`qCYg)g^2;XqP`__#v;7! zRYz;jw2J?v`zJL3dXyY2IU7J)Xe(~^p(cCEsw|PO*QzsCo6C7hXu938N;vbcBG+18%Z$;=g|t&* zh62SUX0|9@5({>&QIYx{+1ksdAIx?i1l4YmF#l;yb=o>lJ7SoES#cjmq-KEKx_YkU z>^Zpi)>U?p7T{8?RjuIifJ$5qv>TUKx=N}Qj{Y{=d|w9oz3|S+zAv;pff@vT52#wukASqKNh!#zL^1HAm9?in-Gimd1Z6_I$YwQT zRdi6G4k*xgt#*#O8WmIb>MD^n@VlA=ziAx!RdC=pi5q+ixxqKLb}G zq}W>DugS*%4P=1&BN&lWW=ytM3p30GFRKe+u1Z=<2EIG)LE0y3J=7<*9v!~hv%plQ zV+_u{vj27v*P#l#P02*meYd`XaPTCNepQls#bHU}HA|Kmtkt1}VvZJU z97@K!@lD~vD&)b=y>zQv|8;e~gtf^D;cj1Pm>U{5cVa7&JeQl#KbN)3?#>@#=Gym2 zsH^jPV3T)T?0j}IeEZOMEeAO1==mM{iYCUn9lmvc!2FAQMf0#-e_;0cKUmS6hN<+l z=%KYQH>F3zhp(+_9VnX5cED@~ob^o1wH?ckHI|m@i-6K_sbM3n#YW+IJubhPztK8m zCZ1Jd4v0VwL@4)hmXUNI1)zHu%|`Pil^ zAJ+rk6uwNL^+2dmftCxJ1*9|3*8!>QO+YHk#mm2n?3aPoi^MO17;e9@9q4{}yAMbg zH2-NMj+&H4J9dgV@2q~@52SuP2-G32{2WNr;5R^;2EPaTw)plJAnke51c18I1*ES0 z3#e0E>6c=KbP&+ZB6}r}%2oie|Kc^K0mKo1F81oTru zOMo60v5IVX?zF^y>|nR=sGIHO&$kj) zLfXaI!@-cplFDce?T;0Fs4u}vYm!CGr0!ydpi;F=Bok@Rgs4N_a&Q&enVn zhQ#+&F(EqSuySf{mv5aPQ*&*h{aTB(h4v`0jHjZ;Y7Ol|%HYEx>XoF5#ukA$jlWqD z^1CAx`0tF6Cgl+#gyBlMMCd9+$WGWUng-PkZ59o~VOnIyw54_ejhr2+gAuiyMIBIf zTBF`AiPsuJ-EG#cwt-RPy4r&OAtadA7)u=xc6cvKkn2`4nLPGH93AX}TbB2L6MUP@60Z?s(n4lu?*P#5D|#V9CQr9z7P)0xaZHBUsbYS?g6?}d zLfU5KL$u3Go7T`iaZ8rAq3s*7D&Mcwqi-?L&H7k2NQ{XI>*9V$96N0|R!}Ew@8Q`H zc($u8^d##ru8&vrq~j*Y>7EQ z96x)dtz8e~H@<}XO@i2#sUP0}Qa`=}#IGH_GEz|qwnuYu`HkP;zEIFM+&R&~@^*z((wSEEC#nAeC5Pqw9f~vwmZ>jlKc&U7_6zq^a>^8*K#A{M`hk`THjz z4Z*uW8iG%OH0G(PmLDerY0NJGQkQ9@caiuu9*8Y5zRd;FG`I#x-CGKzI!Plw?8Rd5 z5s-%dP9W-~-?$Hm;}E~`5YQY!zXVd>p0v>}AoXJpkmlQKKpLYDfHamg+M^+$v7Y(j zUI0k*_hKORBNs@+M`Jvi8Vi9`wh>5EV-=8wISQny@jW0-gC7B@d)&gT=vOw{1f=nJ z)XLBSDEcT#{x0)KZq^7fjxtZ<{F+1t(4XKDF>huh3j9u|{?y5_)R+^5W=~}6d z&CbX3dR%@nZ8ld>2zRYd%Yam(66hbeFh0OtB_cq|w-QMCT7cfe<&~O8`8Z;^3zuKU zM=J3%JgdYnfmqLa#VwWCjpwi9@*97~U3L5;Al1pwf!gG)*JG6m8X{DEz8FYLz-XXq z;R^w&W|sk}c0&IqAM2cHr8enesTvBE{Opj`6-d)LM`X?DZXQ0DABZw9-7{2?>$A?Q(l zw=wX^Z>|7lxRy!GK2yvP41zQFm``e05X32CFTh0|USO1RNRxWr*W&LmJ<2&?)S zs~^POnoG*e`uOQpwF_m!XA{E`;^;JHgokEc7wXX@qpG>mUL&c&n;=~Sd+2EUB-<8;Vee!1b1Md7hu6@Tic_|9;9|)Q$`0(s9?m@8dvPDg6mZ z`>JmOQCTqt!hMdQ&u~|lQ{a}moCd^IC9jczyEav40BKXj5nQXtP6SdvDuJ#M+BHCP z1WDE8Ki0`gBxOsN2j5uWTMb)3-%7YRLrt!np}G~_TiH6>-0jDyH*B`UVkXXUc?4lW z9}jc$i~Ch5uick~l0~1--s&senf39|KedJrx6VFT%+lShCt~iz>a3)9p5gkC6Fm#-)u5J6Pvixs=gB$3)Mz9vi0~n_*;t`j zHv^ML(H&+l)ZH|(^Px?XYS9IFUN0%_^gYY*tbA;m^xF>Rn)0zXr`kb%(k6@}D%Fnr zfK)qn0%>#g5>PcRzj4S$+-J(QQ@?RMkiKP4a*og>*YPcf)G+pzY}uvZbQ~%dfw$L$ zwXCaHyAjMUc7{+3?2iWDOsEAShpjxPne(#J&&0Pnt><8GNT(MY>`=v+Lk;A-4m7fQ zkl;|03C;NaZv(<&H(+4Vnt|?MA6{fk1%6UjaEjQfod&^2ezM0+dsYjlLlC&yIZ=9> zxvE7O&?0j>&spAv8nHhspB*H0gLT+eB%)nGAvWmtq-G<;>&mDl_9sAWyR-;j1avAc zT}Vtn36Ob8wD-TpHKT`DYdOGR6_1GA-*S+A%Q zF_Vsa&9&j(_`e4V+99givTaOD^Fd=}QM8#~nOzwT?}=`n5I!88w%b=4Iy_+-W^WHi zw*UiR@%LcL<{hE^$O)_kcV+MNmF;Xxy*ztwYq-l-wikP3*kE>GMpPU}9hjaSIpAA2 zOVyCe$C3S6FQcm;!g_GJboxWhhjl_%KiTNldIt73q0pQ>^wps|Dl44h;_z8gIP=(_= z!fMl+rw~|6Pq7eVZc#&}hW;WtJ6J&JW@o5-Lg;X08P_15P;RI&7ur)N%~-3wtKwt}X0&$Skknw6Glfsj3tMsj5r{Qikv(h}FcX(Kdn;3iar4V@5;K9& zC&gixjR9Dd2$&XBgfd?!v#XYl&_z_u}LSg1feEevPJrh{O_N6R|O1g+pTC zBq;JmDX_G*acOnayhTP`eV{(lv@FsTXsEd!7O8Hk8L<&(x1QymY2`&%7#!O&-eNAKC zMbN<78*1m*1nLGFbE|tRB?*$J`VN6ax;56;Eeur0gdOHbB*N88mIRs>K}BpmxzNcp zE020*wMM4~xu&Tx5anZ44sQ7EH~$~P|5Z;1X}oNB?febbrh0mM@Fk5ATmYMF!$*$9 z?z~k>iM0uWLTaRVMug??_O;;HvyoGT=RrD$-?Bv?AFqh_R1*r1 z-~jIFxEu;2k?Eqa9vkAKtisb67lpMPYe~nQ=kUbQp+k8OPs>~sKSH_2Md6_+-*8bl zwtT=v;hrLPNFA5i;O=r!o&jZ_i_!@S$1{%9@k~xo9m;4>7$%2uH7LVelr^9fxF|mc zh2PgXQZInQ@9Z4Pd!XFpqGaIZZ7#|vQ0}%V!(;5HFyB%4+}kgvN{WZACPQ{=+RBc29-r`h1$Xk? zIbaJK-rnxehZGMjv78Nb$)R5*i2F&xQvp$ywj193;?LsUIazp~1kZUu7e09c5~H_Y zOt}=#3dEgxkv{E~1o`C`9$H?h1zOwv+Gp|Zum_Ohq1Fxpdg6(i1n!(BJRjjsUqc_A z`F6ZJrwdO2?vUrcUp$3`?;U2TUp)MVg*>}{_gze3^yWE3-1!m6?9X(5+Lay8!#63O zJn%53Jg;nTi07e3q<9*^!&G?n*{2h@!x*P{xbu*y&@lF2H^sZdoJ{eohC2+|_}2z4 zisv~;cn0GRr;O+S`tD@z8++i~wSDFbZErzR!SrubNS zr%VpFP2%5gSjiAg!lrZk%rzfEa1DW}>L?rGrf zc$@NwNlCXUn@!3IHsuc{CBvq?ZBl$Tr%A}lWQwmMW zK$~){Njcl5)R~ksY)Z39amvoRILh5|lpn=W9*d*!FgpEN8varo<@Gqq!8po4<0!|m ziI$(`@;PyoVR4i%#!<@RD0AW{kvIwu)N}iOcO2yhag_gxqx>q4vMrACyEw{U;wbOO zQ3kMkB0r|j;L@_OXv&NV)Kk({k}`^YlIJ{1@d|}J9WDynQ!grJN-58HpkXe`1W?Ar zQbvyiCEG>eWNe;`G8&XAE=m?CJZ8)GYxEdU7P}}6Gry0tdB%|EF;JwhC9$A8*C7_9 zXqd^<>Y~t{pSUQD`xY04aevK4VcdIc3LcDekMm0%fH!Wb^FVQ=hBkFJIZ{uUQsi+< zoi9@Cx$*bS^{>3=NWEoBk;g4{0VpXR_T~6{>W*`FJ5nbw6YwLCTWT;UDIWGV`TNn_ z%zz^`-jpJbTj~p-q(xx70-< zWu?YP!Si2pq_&z; z^0=i~=Q%pRAgB8dM{1`jMIN^l>$4OO#}xdX{qWWwIa2SNQsi+r0ua4A>Glyb$Vd=(t zQ;IxpDb~R$9*$)BTQ_lZlOwg$lp>E?ifvSihvOjrHhr{eu_N`KDMcQ))a9T!DL>(( zT^~78qs$`R3D>b5~6nWfISGuHj z-5h-0k=kHNk;g6dMUg@QmS1g3zrQ$Ae=()VWv^iWK9^ z-<55De%g^5ZAu04#x0c#isRR~f3$6Jr0Pv6^0=k)M9M4@M*oir>m8|kOeylXrSe6} zDqpuud3Kf~^^_?^9=8;V6GC_{?)<&}*-1f1>X0c#9=B8oloXFui-vxcS?Wk#YGw#| z+){-i#rB%N+nzovM(1anQshy6x!1~Ap~Ut;ia<&6q~gxs4IBR2X33y8WJ;08?RzmO zDV{Wn;P=w&nH`SQuS_ZOxTQ)!aimu5di4j6)bC6w^0=iYij)EmY4aisocN|C3Z z@d=)CmNnGRE5p=vFlSUw4(Hfu_bnKl5S)2OapzDh(#w6VlSR5;LM_`IETh|wtW5}*A4%?<&UksKVJGFJ!2UpUr znC9*JaHiUJ$Fy+Q7hfpOU|wIG>Lg9*^}&&>m$sd~KHP~hyw?YZV~Vd2hU!?`e98lJ z@k{FGRWGS(Y?@zNU!`+zRrSlbGT8|G@U=^qfu*W?UPDt=ZT;M;1(CXW4q1h;=CicE zuIdJB=1!*P8nEnBBQtdcSg&iSUoIHhSyWTMw5F*+pR4m7zG|7$qi}VsNOkV~`FXHD zC@&zN&!s{835FJH=etR<%)oB{N*W8frYerPJa_wPdRlEVy1k{+!{L~hwwKjYYL+dj zo>vp|IyU&lSgBo7Qx0>GOJI*t9iLcVTc^m@6nS(%#c8ga$1>O`@pAM)n0h_Blt4We z+nFM28Pb%8nEKJ-gDFk><>>jADNP~Sm6%x4bdzWdGL~YQ(G(ie(>9}N5u6%I<-ikD zA1TeLeavUK*-UZDs$R^B!3;!P@irZhL>GIQDlAfV?jj7P)y^s`&f4ljY-=nZkmX2% zxit-j@IlPfP`<=d3A8qX!of$ED{f~@caU(x=yrzgs3$RQn?y^(R7S8_l=zS_lhs(N z6;@LRVu&t9U|8U{nPFBmREx0*!79*z@T>wQ703y?K9rE&P}3A?sFS7e5|-$g=ZYpI zUDcA>xl5}W8*4^a&8u%j)l@UD7KTb==~(5q={Z&9T5DA{)zjLl^bn3zyO|YWY0a{x zaO1+t8kEY~rsYOXPE~%eYGhu1aAMxXP(@yDVQ?-Adt=U6Yz4^~Yc7%J49?9BTD%p( zvVz>)iQ$S#!aCn%V%&li!Mw8Eg0g~w z@}RlnfvLi1<`*{RWaW%CGrks1$_|U1ac&3lgT)i`$_hheg--AqQJ`|hazl-qw;-55 zskk7&07_ytmKK)ru_V1IaDNET3Fae@O$~gFxff_&6$*6 zTvA?A5rQAG1*9*v%?kxf$|_27EAq>Gu_n^9ieO1zs9<8aRFs^#;Ur&d9Ls}~@=8le zCl;1Vq3P4};$VKs#Bg!(q@tj?J1A%DJoW){##;M>+zA~DmWIlUD#GESU|oIASlu|3 zGuGZYFt?AOixt61<&%o@%F2*na94H-iHg)Tx}2;C78K?dPYM-P zI2o;*kX&qK!IDtv#EOE7yqGc&m&tjh!IFyH!orf0a8PzFnE_NaEktP?GZG3rM*hZ* z;?v+lcd5)P4i=Y8EXXe}$&U}X=(|MRoj1jyf})}lluu2R#94@PoL^K?Qd&SgMUrq& zRN@*EoMk1sA(r|eb}$_=l`D$#%PT61^TbKhdlX8F#fA|IoL^p8hI-eP&bq_O#aVzf zEGo~-t0>A3N^{ezl*ewsLfs)duwu(e1u9JhD8!H>etk9rrNN5Qg7VVRJc*-SXSf1g z94srESOkT(Tw}_b`?cV=RynTF=b?2eDleW?GBMB03~c2xLxIg)sA?9ma_ggtD+m@% zEJyo*8Va>qQEWL+RCx3Af)#laONu9*mlGSS0yx(dSz714m?y8b2oB{6>w-8Z&O>*pZ_zb7(}PMvfde zZd@QR=CYBaCdjKf14}&-6{^~0#AJmUoZpy#_W|M-z&J5gQvor*y601xYvts20Z#LcuqZoQhIoBBEFaL?rHGc zX)eAThv!6m)8Jkwc!K6)1}AM2@r}b|)gQr=Zcd^3`{2uldwam+I}Z%_G5(3%`xEGo zfakXJ$)&4*iTLipyEnnJ;sRll)w@J|1K{s2@ce$T^7WN|L-9J7OHMJrMDF#+q}CGf zU4OAMG8q%`&4j;^OK@%{9mcP(`0@+2rNeNN?WM}c^|wUsaozKx;V`L0#m0{+n~1L* zeDg=bC=r(}@T1Bm;^TSx*N;Y8X9=6^qD#d030`N9F^th%F2JuZeYqI!tpm@7amv@1 zzI+>elP*KvadIEOzS8A-@O>Fm`5#_>WWHPR`YudMpUFve{QAn@N8#RW;2F;ear{{9 z62+JP`g5?eEJ!ZhMU{x}m*AU`iz+2w`TBD2UwHjCc-|^dzP{pnDaug`ri>ru#4Ud3 z;Y#E$_mBJ&)3m3T3!9wGkch88!guQwO#Y)TdaIT`ruRdwYZO zoz({)+l5nZ#Gc@rl&`OP=$CjsXt`nh4i|rY#e>!Il{XtkH7@?378<^W`PG zA|{VT3}&GH?ZwA@Z%u-a>Cm18ALF+n2|nigjwJX_0pBZ0@KHbho&+D``&klv=Yj9! zFX0yROO$>W;(b;Ud>4T4swDW>q^?MU4^5!4J_){y!1qEDd`#!VN$@dz16JS`^GlR2 z)PrG3@KMjdm;~Qh;44XjkM-01B>0#g4N34(ufCZCAIry&li*{!_e2tW^!KGC_}G7b zGYP&k!Pk)lAJe&CGj1`zMET2joSg(8(*<91xqgY{F*H!MwpkM-p8 zB>3oWTM~Rs=kF)MNB#SC5`1i@_9el`{OC-AkMZ!V#4YBRC_l(|N)mj`-!CM=M}59L z2|kwJNlEar{kSR#z7xP#n2N${n?y_O{S7>{TYe60VzlLR00M)briM^3sB`+;FJ!eEAyWA8=|Nt};V+&xS6)W=4I(b=QQK2a0N&0{QjxYp$tY zT3uJWq&9L*aZy!y{*Lm>T4P>30~b;a}DO;xE4QZc>UbP#^uHp zCmH9Xdm@AQ4cF>mp8vzO^BU?K>lZWyhD^CQz!kEkwKwzI(0qKTS-S*Fl$>GBoxeEJ z*i>9oyKqs{)cUE_4GU|~!N=z8`kTzf>M1n~u_M5wg|3fOFEMc*zkP;-HUr(W7##V+ zhU$6TQxNNBE+z`)xe|d|Qr#f9y4M=HgwJB2+p^NAVXL+t9DfS%9c^{pJPg~&Te)mW zZByumn!57&^Ud&9)-0=TkPojNR^biTAl7bPrV%DvEBQ4wdGhP)ny^&Th}BDVpKGu+ z;Aljukw`ydX{EJwkW_jh=3Y(aJo!L5&W*g~1+`e@)MTPtTsFn0z{n)!wfyHhESc6c zG=e*Cx%v`IYc%b2THUI5y)UV&sIFyVQ&t_GQ9HkBkzFJ>lH|pqC#!rxQH65+*{~z|= z1w5+iY6CuD!VoYzQAdr6Iw&F@z1b6M|pA@Bg3w`6kaf zS!bQK_I2&G*WP=by}4@*cZK7&_uM~QgOWYewpS$@u?Gz{pP8PRv#To6z0LPpBK9^; z2k`wP5qSeNmA=hIb8-SRo}SXZCorRXPtmSG&65S2!#F}{Ythy~&8C74;adCP_TIPjUuA91kMR3iye+^gAx&n8t*sB5EB)A(5 z^bjBwfM*PJJi=0raey?oa{y^<=L7mDX#EyHZ8ZXb0>RFFqa7JNDqfwpIg$%HYjcDa zfz|jf?}h6dHzf|O$NomSMXz*Uo`~g5xgxu}HBp@7+qh=^s(FdxTwifEpxO3`_gk=o zOCoE{`jx}8igPw2M#vTkR*uLj&fQ$hP9KPz#G$^8*a&ZE!N1}wa}Y>kRyGh%0`Y$Q zirl8e2AtmLr0uw-`I{rO&XKg#6tW35ZX#ZDel#F97=GG_i9vxlrJ^~n2c%_sHz4Ks zB_QQs6KO%3{ni#h%7Mnhy~u)SDrPgX?)>Dljz&V0;P}EJ@xv34yX?K~LKNqKrRgZ+G%b(R??-*syA4ICKF-u|&_pZ{kC8|dXoP!f; zjzQ{=O!#r;x-T(|jVTn*k~7QQ$|%Yhr&C>NH+jUla*dms=Kq`m0q7e1dmL9#cDdGS zxDC&2LVnq=c!^ZQJ$T+BbSxqj{HFokEV$vIQQpG=DQ`X?o;Ro)UMeqVYL#x1p*t7Q zr9w9qccl}($P?Xgl+^+5%!R$xHV;Fhta{exBM4HquM4dH5kT%lrMo0ir8%k&8g-Wy zSltE!?z9zH-6ULjJQ@loRQY*ARSr+68qO1{MkF0JwF-pks=?lEm};99PW9_V>mD@g z>|Kn54iHo9cCjK z04eYNfRy*AfVi81-=aED-roUI>8Dm!=xxv_?|Xoh_X9wCK;gIc08-wZAr2k44O2Rv zR-m22NI*&_(mxuiE)TZN!28mrY}twp-ZqQDMy>W35+GZ@2Ub4_keftlM@_+Wb_;{_ zG+OM<6=lR$;2WLC@z{p;ny*-aE+ikNZ8nNx-Sjyw8J*T0oPjv4rdZj0X z-Bo?n+kKmgHgrLrx1r1TJ&zt`LzjQEA4Op`IeW$rC<6AjnGQ`_5wK~RR0O0bydrP{ zqEiugU!Z|SU>#_*Lce1mR{9ev1YU_y5stJ2fxuz$x7|hVEKGDjXa? zBnd|jGMno$aq?Ufhl7OsLC?nhef$>_CFY(;_%q#Fl))a8u8?9o?sE@T4s zMwf1}8RH32JOS{j4+4MTwf_CUXE@bry^qt*7X>cn(SlnFd9FLpwU0nj(vyK;Sbx(! z?YY^MS3RO#+Het~(&D199FNN{n=7jYNwLx5;y6}CMTRi4_&lKlL)es^CiP76g zx3;{;h*ytA8T-``r)kpb(|Y_I|D#^HZw&3t%lQ8(bGS#~`c*)ruT2hun|Txgz)$8AQMXfgXr4It1*#HTw-ih0s?H>d#+K2d9JcjN5$)7K+9mtNzdw$Gd^ zb_#QL7W|_iwyzwVPkOVotLXi%vn7V2UEOCOV;cUGl_2x6m^BJ5h@^r;sX1lX%iVEz zVSIXQLmjuEwM#ZK7Sj=%Ei_6fvt5tzKL($3?JKp9gA2xM04u^;MZJTmX?1U-9 zV#k*AtQQ%aKCWE2{v7 zaQS7I+Gf!!RO_l&ZUdxr_W=sw@>@T_UA5T5fRyePK&r*|0{Vf3!cLP;Req}-_rCxi zw0Z#1am#Q06L*Sb(7FUBqe9OZXdGIt;-&zi{SvgO5~%xvR=0t8Y}9`V?g<0E0!Y*R zM?fLG^;_I5YQDs~1CY^~y*vLC1}c@bZJ@pYZ~y}}usQ(()lt_7DNRwwP~C0}RSvH> zHO0xQZH}SJ-E3i~?x}>8if#Wlc44#kooJ3w1*gJXO;m5kn{D#uXxOXzCeSoj4OZL2 z;Ugl(5K4L}M{d#%VE!Z4>nKDvcP^%pM&_J}ewLWPrX?RBfQtR~?Kw6)4j8Zxd zcScFPQvj)fasi;Ede8e03{1X?DC~M?iy5HaqZKkRDYj1@!sf-IMWUxTQ_1d5+UQI$ z1l=9?C+#<#|GzleI7G^grr?Pvv1FrnK5#k z8uD)dY0bR^NNeOzhK_S&O2;)gt+@{kof%ScQUwNO>@18w?Bkn;_8gPmyy$0_>9mS# z>*!wBfz=-)7H)taSj`l(E}glKeb~fY&u4<#<}fp``feenrEx1D*h;0&F&^%~(m85` zt=I_wm1_?+H*^i>a=@;5V8^h64Zg_E_%Nht8k;*Ac`k?({~Lng*(Gi;+a;K{(e(2e z%r;DAG{p~*Ce6^^i2LU{YXJi`@qV+?X}b@bW^R&kn~z*;#hwT#h|6!Cf;(r%lE)0} zW>jS8*rU)rfK*U^WuRRK%0>wKmfeTOQ4C1qC>Bwy4o=ckaAEIm18_06$Vb%CJDn>^Z~kLm4g@d zlGVQvqFa%y4rhT0ZGR71{Cyzc;#FYvcK~5!iL*-V#&dAtBv+}4brBwez>Zy4nCz9M zSPt85WZO(GEbh~wbJ)wQ6#79f+?|mT~mr)>zY*b zeAk4ce+6n@nG(wh)WmY8V2Tn4B@{dvE_$^#Fyonmr;BIR&$dM%&$L%hAHRP|@Q@Gf z`FpzU>UAW{87OVc;|w$pkk(&^fqn-_SCZZXr1e5=J{*_dqNR8w3f_GN%_UD7wpY5Q2QoiCB$ z+@KiFkjN{D;_!}K@Ud>hHMq%RGdFNTRKu7wq{ za{`v5VDy{-EuJvm+=MGACjn>$t;6#-1^2jtC_IXjPL}gGd7k+jlmW*5!$2nE{NyDk zrwe7c+J*K4O722~rU$gU&}g`~8;3}pt0u1Wu-e@v=HLX9JelQR^HPsLv7uli&g0-o z5IxxiTjGKL(QeJrfrGOoW+Ic?3NAL#X94{JSI}ZNr}FzCpd)eV(U{tOvFlS!^czFR zF_hB10Z8TikA{wVNy8h4DpoqS7Ov6ytwV87(rnHN9tYITu?_Y14UeAR+czS5PH*2q z(Zb%o+~~N0OGSD}H4U`0lnMWp;~lQF{fT{g#{48cZFU^+P>(vZ^PJJ?8y+jf{CvT4 zi47}zn8+{{U6BFIL6VHRH;5nR>c5~sz zf{kGBY6EM*N98>E!#=vi%Xm<1Bxci+BJ7$h(;$dxPyLP)U=1+PecnKW8seS?9Im9Y zj6gl-dT8|>gQSngrQIdFv*hmbLOd(od_%VoP?uCQm6}%bmkb@%rH02&lLKr$EnDfH z2JRMIL5p3ews4-@q0ko%WK3&J1MbH<5-U?@k7--iiFG7{N~+1-h{hfiy$f(%BxFXl zp4FNVI#AZ44u+XT?MZ1Ac~@=NgF4U?Cn@s)js zW8)^CPoL{dU}0jD2eY2wD1q10v*PScOp4)HJ9sA8N1B;q>~R7QokenyLCqFbUI8w@ z?4!?dg5L_^S+g}65bZJbX;O|^cvg;jK%K%d7m#vv0(uHp(BjyHZ3hRE*#~|lyGHEi zG;8hrqGO6Sxu*lh(wR=89ntakew-aWz4zmxI8pFpzspmckq13xR`;n+QQ|PaRMSSn z#u$+85u=-far_@UbRJ)w*lKhmrY?8l@T2vC>mJ2BG~0Z0nl+|4;}JN)1y+9@uhv!X zvX|UA!@k>Dc8lzSM#I`V=c}2G*x`vS@WdJN(W@{}=M+ALdGj6TAZM||1-rFqbJx__ zP?^xSJH{rFo(A}-mA>8$SucJpdbRMWHS0+jsH8H-aoNsrJGd@lWGWleq&SbT3P*gw z3f&}mrI>47=L5>YrG9RE1>)FLt)OB+N;e&l($xZ5DKas~(8Ua0kD*%)=<`AsH*{=< z8s7H}-MxU;2;Gkj-Lrr=g&MTB;(n(cKlGHmMx zuKjv*78lMi*K@68*eR!81+Jr=5IEs#M32Q7BN(WAoPTT)mUBTvz=z zBw{-*N{EpRoE3)^4X(h!*~Rzb<_L@33RJ#;*>E4KwR>m5(^yU~*zDu7dY%ubEW`Kl zNZ7|+ht|$&(4h;uRhWJ|LXM=To|h#Qbk&5f#y&i7=)A6a8&dLyEu%}ac!u`2zStYK z{EwFNyY|QvO$-5WyjNb)M}f5;f0BG^q1U876&X;IT7~H(JgYFB3rMRn0_av;L8}#a zRX?r>almi}F2D6f+|@8&3rItu;ArLl4UmqK7?X+>KSEXB5rEX;lA~PZ<>*Iw!+?}` zCZIdOAGD~$jR;|k(!2A2R-I*0oeiNn^Zmc1&VG%2XHaJ>2wf>wfu+x`3IRmZqt3EC z>g*y_XGO?a>`0@|N}!~msGy_d)o3>-iz8OtXf7V$P@P9ZyN3$ar)oeQZsV+08Ft&V>$G&Xtuq^oGuS05l?ooYB*gY7PcX^bpY|j#|Z0sOB_6^iCgi zJqC+uuBK&4maTxYZG>05oGul6JnsFqOBguS0abvMjw8)aaQQ9z4X6&d43KJ}s{pB8 zm;j{u=(~WllleKIhj0Zg4h2+0{2q{M2*#uwG5`qK^CIp%O1i?Pm0?d7p?iXx$LrC< zIcZJP9qXKS#`Dm@2#5o0wZsx!e~x$WEL@M19>X}D5sX;G-rl=@=#o$^jB^0mHo>AQ zn;L#`9}-FPG6yY6LZpu0JIL*;HIZzB5bZUXsEShzlS+9YLuWxj$N$WTe z67)KsMSC~I5W>=;KLpkm1IcXJCACY7jv}1nm~wgXSWeO2==mJ=>_xewB`zpyd2a)7ks6pN@gw+v6q*!3zGd|1 z73MQRmA?1ml%+y^jm;# z7u;_EY5KMT()8^H^k;edZ$R33=_RSi0MqQ9U4< zV7KCW9}i>g#8CvfTp)909|_nc2|zQ(z{du6CicX;x5`7|>u_CdWj&RVyWVA$rB=>f|VMVKZKgo(! zLi?HQu$=0l1GQ|tI?$Ad(N<3VKmq3L@Fg0z8-n#5dwFUvM`<(;{)6fQ!9xPxy&Pfp zcIR7jqqco1z2M7>sfXp3wiguV!KV56CS+j#wTXh(^K!wHt($Orpo>PcEVcL=M zn5lfk3okN2djz`5yuHS}{Q@9Pt@y13pdFIZy8x+a@E{;H1J(ml)8J`?`z;{t{9grh zlkon{;D-8~w`T&<95ooI1CZwJ7C@S#y9~4mkml&O2KqN3&D*eSCvUlcG;cvb`u2G9 z_9Q@>x3PdUZ^eK#Z?%9lZ;gO7Z^1b;&e#Qd&h)a- z;~c2|3?1O$2C64XH5`xozynpK`|k`?IVb%?TtVw4-0u*G3QL9eBS5zbPAZAB2y_4& zc!5)917xL2AdFt@1#EY&vu9gcWlePs)0-0y1FwJDGY@Vgb=t>qoj!ThVJu#KEb8am>M3NxHj`20aB&+ETFq^1!XLxHOX4j z`g6uPoQgD4Ir-_zo<%RkNx&WvMRMwCK~vw^o>vUNu0hMXKA~2>j5Ky)I$-^(?j=L& z95Y8}x1%kEA8w9N$HIwgRZ0H}*p0??0%x_2jc808jBNO6Wo#Hm?_HaB3_~a=UW}`3 zV-jsjn(bjoT4_<^&aPhgZm2VO$_irIk6HUIs0I+YR@Tvg#^BPyHP`*swL>d`6{wYP ziGgB(v=Z14D8wq#>UbECR>vy_qNr$W2LaO9s24f!j3F!T8kaDQ;WJRrNSJ4MOMIuzW@*WE%7=Ln7$r-fd_jbQ+Mg6_!J#0mrjZuuHi0q;dRy~1% zqOp%fptf7l&c4X*QaFeqeMODi0&6eB91(mO64m*eS!?!0L0dyS%godm_dkSZe*l3j zKTK-*Y63aZwt@s8C&X(Tf{?%aIhmNUE&B#1%p4PDvK}(8-ES2f^Ea)GOASi17HA|Q zR;i=J<>Kl2Z6B8!=r%xK$6LSk44^lJ?sfBaC!p5^_kp3~)Q{r$fvob5 z2Baw+2S`&|2uNGmIe<(n>)lD;^o;uh?6*hKfku+EE*i>7PTg!zr*W0TUTGY-O&Q-p zsY+2?IvZhTY$0H1JJJRcTQ*1bp>XKLisnNl8TZHO^X!b*ttHt)xdi@q%Cd)_xA1Fo zxCEdpmIJT?nzp6tsHjaz*;z_!#M*u~CS$J6LSbQdn{^+fNYN41 zuX(B`yYRyuxrq;c!B7kS5vY8>63C$t%N-+p&tR8_8C&Aj=-lYW^)fCxM&p|%dzB=T z*ZXuI=V9mUeuPCFug1DtU^Qg}xeTm+L4YCA;mB!V4HwZN_SkCY`c{DWNO1L6L7@KE z^bu3TD0@vuzPmV z-c`d2_7-&S#FrU=C}?~mu@_(O1c$`3*YvG88sA?b0We#NKJGpOUVy(xf{}ILOYOs*4^mbejy_7C@ZI@>{<#bgX=h z_kBb65uiCjM@^;S(H6cFPeE%LpzjJqn?Rv|0iq{I&{~HkqPSlIQru}iCyt4LG;jQ} z@gi{ftqTBY95T2K9;nlgvjRc~FX$+vb++~Q;XyAf<`;*e&^)JJp%i1x=l4 z*YvF{aLCf{KPKVgnI*-F;Tg$+3c#@JbFh$|#9~;+wbv%+6FA2X zg&+TlgZRPl9`x;-cZ^^UpU3Cj(#Ox+5@^7F4;!w`!RNyVGZMUum1y*<|_dy2b~L*qaF~K z8U5m7uN+qyx@!#G7XZ;;2Q!p_l#Wvx8s6Q8?mj^50rg8;rF#arp9$_AKpd$At$*Xb zQK0d7^N75ij{D7my9Cg81QMCbJJ4AzM?rH{1}=qW%zkt_nUY=uJEF*cQ~B#n<-@(~ z^;JENyc``kP!40^G0*5I_2!$8Y21t0&Yvwse^Hg48@7@R|HYF9y!s zcx8@Cz?^;(@IhAsIu}ln+UX!@d*2CQfdeYQh!-y*tOEKmGI2Sc!b6%+Ul^e+Fpv zFWfnc%UG%u;LZ(KEq?rl{r8~Y4l#2t?{d)sog*AP!q}{5S72QZ5HeXxhmXC;OaGZ3 z2wY(GZ}Gxju2rXxME4sI3$6m+!&mk;K}>?PuH`0z0rY|@QN5Ka3c`tvB+dr71>ff3 zgS-uaGb6!{79e!Dg85r0sQFM)9W_910>dmBjo0s(h-Yl|;Bt)vLN_2t;yM~g?q#4{ zW(wiweGeXAC5(#v>| zAbfu4)>VPs$c*BqBMz3_C5(IQTN4QVIVmgCZwSO5!<4a&zaC?=x`(mY-@o4=fZK~U`&xU<#*=__5$`QPf5a8EXojfn;4tYH!O{6sbq5#X^zCN>{aoJC zQ$^`G(ZG;`*13R`<01obF->E;4$zxI_Z>j0i+*gNUjh1=ynPDL_XK(gkcRiVf!+nA zIUnwG!aEL-hIcBUJ2WkTZWm}Spw|SF4(k7wT^yl28ig_zmv%)elqca?g)Iz71&fpV zN;ebGC%8V1f8e9wyBF90ExU*w5uJBn%Pyx$$)A8bXJwN==3)(LUDW|nI?mb;yzHWM zp9h`R=@$X%=-^I3yn+_z^uI08v$(4g_%k4_NvaKPpln**IhMP(@xUMP(47-YRb7su zjEz>K?fBROhTNK`U_k~0RsVo_o?W!3%eQVtU(rXa%<5SB*#z%4or`X8yAccBg)V?$ z3OpYny>0IdiXlYfrh||JEx98A9fr$q(b)QilrYO$OJoWlEs+*L%E4JH<>&--i*T#} zq#QKIzJn_$YDkq5N@NlW7>K~TsHRUeFLs8?t zu9xX%spBpfOCPQ}70yrT`J5sY&bPW=aT%S#TIxp>h{Sw;X%E*N;z5k;SoB)prx+*# zNOeDlJzBWEfV6P$H@IIJ-0uKsW&HurQMml#BJe$_tatIO%5Dgrl`a>M($Qh%J3@CP z?n=iBgz*d0(3wcv&sSS&Sx3((dNMljmsMgYyUxyey?cja57oURu!rj2gRqC{-rT5} zT*oFLi;;A_Iof2dgut(zy9XXYE1|QkB&PX2UvcfSjdd6~kSRDLu3uHKWQdK#M|Ajl z3*XV%i_hk(sS3=O7j^IJ`W>X{Nl6Gt%vz#H0vd-)zo*k~CWL1#(W!uxj!I1FW&)z! zp4`n`ZRoya=&lFUC3LiGG`xEZ-GhdX7E6!NQ8JW{7Qt<}g0f+hN*dFqQgslhpOLpg zKt{!J7vi0HN#iD{sasU=V08>E_UbVmmmn-gd8M7mQUfw+A*IgVlX`1?yirYF z>VmD&NlyC-)z-NJkj8T?n7oGy(sz*2v)E%6tJ7nVHM)pi$C61Jw+P5(Y!NC9mNAUN zLUq!|lQ6^eowF!y?A}Bp)?Us-WJh_19(|LA9vQ&kzDQPc;*qga8bdKZXv=okvg+$O zG3g6{G+DyD=2-4u7Fat2bA>3=;iwE<{5FdbcJTzRe?Z0_iE)wt9B({IfNq#FEkKq?s2>I$s^q`VY9<)!e^g&ST(fYjXnE+93x9|QC%uAr<^ zsCfMi&kE5$?ge>!7$6n2V+}L~(ChM+<5i7!0U(W+YlmOMrTd;~yeo(kj=KOU$4>w$ z2Ujn2CGb%|noFuQXsH1=Vdz7M?6TP3L-nKd-Ay$82r2D)fT#iErBWAf%#&)Ui~Hq2 z`mAB-BBnIv#->hb%nMxiWdx4zHN4+epwD8Dl-+msjv=-vY44TS^?OtAU|&_A#OL^> zV(W3c=0`%NmskwxP<{n`wxDIrZ^yy4NsmD{j{Ks=ysjUZIGm<8xE4%vK?}bE5KRle zH3N4w$Yuf3!fytog0&Qo_H9uEeFKn+$$fzCz!kKfH#qiaqzGCc;;wIpqB0a>@1@YG zfHW}7aJ;O6y^hHx~*@h3skAbf(?f*#B0Ny;S}OvY`DRg za0emdnl)zYa9nD=eOt120-iN%(*Ut!(C;UeqaDx6!2(z7Z6zS(xDn6~aH;inw?Jqq z^tGbcpbu1=vTu2I-+0G^A-{1G2jCRspv>8R6%aPL#ep!frO^-$3J=+bZ1Y5s)=t4J zXpb(=gqAbq<@6DyP2%>1HfAAC-ARd{xj&74K#K>>qfI7+nwPbN2%VLhq^f0$+Cy#2 zLML~g8(J2-d_ikRsC`kW4X4e>sX4%&+%iJb=!VmoCZI8lphamEPD5lLGVVm!91Zb! zqiCpoSt}D5YU{)+DV7mdKUyhB(4bs#1dmHLW)aUC@?<)N(^DCC@M92)w+QW+L+#7^ z$K8Pgbr5A|X#5BZ)x4M|Dn;8vE$!Br#Z8^9%cX$FTqz*Mz*FgvkENdEIq@vi^M*pv zmCIW#)Ulp6yuoPzy8JyHB<3%1%#%ch+8&E`;!vRwPf^k%kDPQYk9I&pmdB!$TtnA(dGn>M zCS410ve0tYBuGf+ZG%ooQWAXK5?b600if_TTdd@^WoIm3+Pu&WkZG|XT~ZMaKarjA z)Z!Uicrn2m)7gA^t0yZ9k_VW^3X>*IzVN&S){C4 zIXXivZHpGQcCf{UuI!X{o7}oV$u~^89jdl#MLD{M2WoXhLl=bFT9>sHk=l{==9U&~ z0ffbq7HR3ND*sGMyS(+(EzwHh5;(CDgVcN$joL0Ss8r{-ZK^`MzO4%Jo^69dBk*|KN8)lZ7vhOn7qc8s z=Xo&fnrc0mpWtbp2g7K|>4x(!JYDU<jn0{YjDtCpnFFr~gMx`Q%r_grzxi>WlZ zLc@V0W1U@p7BbpDJqHWTEx0rFza4(XC#f`t2+c6CGS=Kzp259;ILwVNs{nWY-Z`b` znp7I5)R#3B(!}Y}r|!5HwsQY)Sh~Kfi-0Een$X?jQ)vzp8ajTH`hl-qfduvshi17i zD-JZN?>gee&!^I`bbVQL*&+3vKYXz}m4<@?Ulz3*OX2T3`$|)3I6LLb;=q>WoV#=t z3blWFjuIM>O`RSsG*{R(#}z#}B{dwDt}lyI@vN^U zw=dtAN^`8xJb-YR`Ue)zzABYQ`jsrk#Zq|U*1v>PX^xX{9<;+bBJbc`sWit6&A)MH zzIuMYJ53pKpykV={vHMB^)nCpLuxo7p*apxd=a3?yOTdir6D(D4C!H93%-14IF;r^ zq2Vko3v zQ)$KsO}$SK%~q^I8*UYANUR%kf&Ls`A<&E*qPX-*ZIC5VgE zf4lPo6b2YPI_fl`8MqAD(tTM2m*MF`^K;xOhwq+z|C-de&JY@>oG*Sn4@O4+^o$dl z(}1QN{{81WuSlgiQ)r$74JEs7{0VQR(xB*(X6jz*gl~NB`MXkSP-LKa5O=2ePk-7n zE0yLfp<(T#TCHc^`P)ww!h;oJXM$h06_U4>b%Bi`mh^De^I)15E$?Vs7G1H{u?A+4!<#dEh!o68DVQ@;FyR!;g(;Yp6ijCd=9(1D4JnvgZOlQYRDWn=4mFrx*qBiU^PG)2 z(O~||#++m@`)tf<1`}X6j9-DloMK~+H<+_+%n1fF-Nu9rW|56K!eCa|m|+H!urWb{ zxy{BLW-#~Lm{SdAlZ`ptU|z8?M;Xj}HfDsud}3pA4d!5WmiUb|m{B(76oZ*;V@@`h zY8x}gU>4h$Lk#9h8XuC@m={toe@el;mx9@wf*C>OD?dj|9G8MQJq2@a3Z^0j zGbaUeX$qzz1+yvz6Hme1n1Z=I1#@o-=4UAw@h9-){kasHw^A_g*_Z(83!OWDKA8V@ zqqF;+b2%Wee?zR~Ifp`EeOa`J`RjbTXt8DUSk`o#i!@%YiNN@>Xpit$ST(WUJvo2h>iPcHU9KP5T%_@GoehjHi~Tl#4{unGcBj25JjZM<(s;Qh1EZrq za@}~xEAP2nBRKTIk2GGcbAa(>9nP2d%^4MIb-5#9u+E?0}q zMH(;Hxxlz(cMEw~m2{>~O_wF4B0p zrUK*3I-M-|-F5~HE5r4W%|#k7R~Q&y)+xC2x96_&Vb?iv{nO?O-VDT#nxOYt{IBU9Kl> zF4B0pP^n1ak+}0W;hQ~4()&-Fi!@%Y>A<*c`O?whOWnA}+6gC(mkW&$T#m_Gd}s{O zI;Bx>bCJf&RV`e{;LhLV?{RYzhwCbvi!@%YnZWq6oLbIlSn?g0>p`1~G+wS6;c`mj z`wu^XOgM3UU~`ei%T+5}PRYM@XLpy&HO3Zd(s;RM374ZqBM;{z>rPx3*<7UYa?KVl zr=`61nMa;=xvsU*r15gq30E%e{N3`_S5I`g9=5qi|YmusTUMH(*`x)7w$(Y@myxEBi5DZ?vl zF4B0pE)p)gsaua6_I!uS^-G(JG+wUH2$v%p$FDBk;&T1P<|2)k>tf+@O5>KFzLBI4 zj|}1^ex&ho%>~Bo&HujV+56nMN^CCDc)8{Ymm`PgKl>U~rc)ZrY%bDxxf+Gb7H;cT z*Prl$%k^!Wi!@%Y`NHMs!^NNf03E&)*A|TWl`Uc)1n= zpq){G+wS&U|iYgUHQaoZd@gnJCh`8ip@nDFV|w>D!`q;d;i&TiW}Eu zHWz8UTy4PkvO>7?cilVR_@T@71DlI9Ualp;xTSGyLtuoP5L>~ zGTG)LjhE{RV0>9l+j;S={OwLmmQ`VMk;cmf<(tHH^|P2fvMT%_@Gb$Ym}yC2DN zxvsLgNaN*-3YU|wAH|QK?s8pkbCJf&74vY_pWS$g%XOR0MVcYj{dk(XyrX^LO!yas zr%sqUm5b}eElc1XQrX&e>Eh^x?H7t0LO47nJSCO3=E~NNrOnG{w_e)TzAOVx4=8EEQSmp7}E*8T#kZiV;Bz=4&j zFH#*`F)~C~YWpYEMl%pJSF}cFw!%H86OuMKsu^v|GDX*14$m7qxDtAO?LXF%m1S-8 z`N%9fNMUK~GWfP-2+YZ2hSybO?L-VED+frqp~{rxQaB!6*go5FTFMYvvz?gMma1ha zfDBaq!m5QtT%IZ3ej%39sW3yZ{YW!4wArn2TxyQC)+}qSgP&8Tz}ynaoDo}7F_?_$ z_k=TG@>T62wgJP_!poc{4Q0R}>RO`%iedqCRWzcrp{@*4>@83EXnoaWiB z;^t>)>YA@?O-hU%RkMapC72W$AHk?E9ql5Nt}H8~x3#CkB?apxwxf1KG)eWKlKDjg z8M1y->O}4lU6nd{WlOX6^Mdhq{mDd5U!II(&n?gWdg5dnr%MxDYELKVq&~}jRu9@* zx2BW&BO&qhQPkmz?cdk*r%mcv#U$Gzia}vU zRzy*p=1~P?dE1KF@Ih_uU;`@dSYS25Ki#x_!luRZ0WE%}_^&IS-D;Cjh^Pt;7fS{b z5{f73$rG?07^IXTS2thQiWWzM4QWKO9Q^~(Bmpo2EMB@)C>TI(8}!fes0kRLOC1#o z1{Y0I8TwE~0q$sx#yXaXt1sls^IRM4kfN$=?zEd?)v}A)J3eDgZK_dqUKefefUC2N z0tQn1+F>`%Xk8wy?!2_F6(fMQ=t^tq)TYvK)A*7|cv@9S$@H4ylJL~gr4{;}!_-Oe z37$I1_TZg5y0|!O7%IavXH?9XR$5gRUO=18rlmV@29EM@X;pc3q`W2_$CXt1-WW>5 z(@LgAYDiNm;m}wyHK#U0x;0moG{N zsvt;hS!JZAq#|Q%{e}O^W;Zs-a8*@B)wIeP5*t#}JV0bK!ll(UHDxm*)nVI39!0R+ z+bU*+XI9N9pHWpYGed&p0~X{NnIAv(Y!7oyczR`|w4%1WHf%flPn{HnikZ`APM2KcqnH6QT~Zz{DXpGSSvIZ4 z%{8n~jCfIX{9wkDI8+2eo;I_*v_=A7XpdC~ilHQ2UQ%9MI=xieJVavv>Ph8Qkt(R2 znPF*9Wiwfh9@RHJTppQTRa03zJ*;2nOr3-P+dHOCS~+zRztDlqBI#2{msO|m&Im^; zYHDkzMXNeBX){!Oo$q`G$Pdc5y0ofdTGe!|4f`XYfjH1crq$F| zmCV%glJ8;$qAx{(l+Ub~R-uXF=R*UKSBIygFzxG))NtU zW|mE#QBqZ-x^KkFRiMsDxcXeZ25l5 zOIwaUwzQncZ&`IJWEw(S}_-0R1XNDuC<&mnIk`n4U>0YMDz^)%vS?RRW@)?mCZnT{k zje3YCm(`S(mR2DXuu#&s>6&m2lu>DMWra7KPESD8?bX$h%Hqnfej(-rHo-&2+AA$B ziNKf<$>0}c0}02BaBXdARdGpiB&)pjI0i8??$ zrAU5pN$K>G3Z#$Uq)DN=<^}{49h*dlI?<2QrWP7;FD(v7W>%C&YGE3sF;+yZX}X|N zrNTPx1bMqJl+Co#ni&<9)2E5CJZs{3d3DK%8Tf+Y&qpn5z6T3sJFxn~U-I{U zd_EJ`>CW;Y5&VtF1D*TLA5k~qn%j>qY~__C`{0r8cRp+pnnE`|ocsk5>HN619F48u zaq-9Gh4N}IN&fPQc&hGB@eOxK*2_e6@_`@P{+I-MAp?(w&Va3H?rhI%2@7@H>6(@4LXS8I5hnPFA{1>EkX+*Ma7)F$0IU8n2gPRel#P{)XX77w^@; zpFI}42IAr`6J0Uh?E}sErwUod`nVCV+d-3kn$iu&zjX0F1pIu^9A2PwIT`5S2x2V+ z%@L<7T_$h~JF>jh0V6&!w<>fFBP3{9Sf7zFD0tWEPuoI=Ul(&!2*0(Q)wywzPCx zfu9VTz`3N#T+UD9T_B7k`=BC7bu>X5$DaT>NFyFLAv4EokP|30X${LVd6vG~c*T=`zL3 z^c_71`UMw%ndF7vFwd^Htj{zkU8Z{bK3*4GWLYoa;xCgvxDVlBPTV?SuF{=^f9cAZ z_0~NPeNCg%Ws(E7^BX{O@qDGrl;1b;`VG)L!VVk1OzoHL@|sJa6PkrAW4nADbek4f z))!lp4kks~e2fPESFPCb7Z-m+aHY#H>HZ0tqZg4XiLRriIcleccsj71Vbk!Lzi=Mx z-F|e`6QzTsn>z?P)_dn5=veR94ubAv(A_i$I_jNY4U+DKLC~?i{&|pey9YtXb~E%+ z+>(Cj>VtYVI0(99L3iRH=vdC@4}y;6S3L+imdhoBpksco7zEv6pu2hybd;;F41(@x z(0zXpbc}cXAn4dWUK#`)%jK_wprbtR9R!`|#l;{_`lXW>mh<>Q(6N4}4uUQOy4i!E zqh9P7B;6MVL3bL$yJZk`l!M0yLC5-ibr5tcza4|1WBL7SkaP#PfjH@xuHGmwp+V3w zzY_*YS3U?j=6CKO=q7+}$sp*MzHbhKj(Y8ZLC~>W9vcK5_22V@pkqJ!*Fn%71G=4q zpkw*@m*AH4OIN>?zas`ocgi5>SRYdcLC1V783Y~cWAz~Dn2)avf{yy?u0hbzF8S#o z=n6ph^dRV{hyFPTI!;FozYMpeU%Gmmg!d;8f{yZc@gV3}&apwzjR9S68ahmwo>_)v zlsPjloKaPB?upfP^`)~fJkg7+nNc>gxH?jIVu-_nf8bh+Yo?{&%tp?g*U;W^*}UqN zp^CO>sI<&4$YIp-`rB((SCV3im}svKfAS=qY0b0xuq_OMS#osY`Zok zy{m4$+|G->gU=NFFqO9f?m}7?;)Y57rEt$Md6)Ng;2NLf0Y!e4gz>aY3Qr@%d-zj% z-`mNydA&}epogcX$qH#~|2Nl>RO6i8x=7ZfBoC#FxwWT@BA?@HDrsVvOcBF(3Wu;{ zt&B?vS{BasF6NzGzR5+vcTNEqI=6i35>{f@VJ-Ka(URlZn8uMLhLWD7XGbgrpCp#f zv(%a+n2g&NL(h9g&UbW&tkUHopeQvOzw&tNq^eU}Ao*NTReB?)HopGvOn>51c0NqQX+z;%@EN!c=I|g$qP@c$iw#E*M1k6L}QT0bKXLbd0csx zZ_nmP4j!>Xc+bgZ3w9EuJEoushi=FT3M2i2!8K2<%8geC#g_F&5(4#Au)U zW}ms2-4mAKhuqR^!Jj)HRp-a)2S@i+=Jl?~vwB92S zoX+yIbGKd+TmkOC#}%|HaDPp3(lm2%wieF81;R?q$y@Uh9%y1)b@eIdL24lp$#>7FP)&3|C9|$NXV$vvJX}FsxwC2|<%w#Xm59b49TGnX5$9mf z_e$S}_^`wrMm;2cB#!AtnF60v>Dw63N?UlRNe*Y59J+ubIPd_E#~vy&v~MG;(mX6Cq!`G8^j627%4D!Q9j=j77AWyVvR* zRQ4c~0WFu?(ECYWY)E1Pgtm7N+Ihi~;T^*g#W@8}`m%UbL0@0Ymspvdn3Lc8ufFJ! z1+SFMu5GAyN;rrUN2&Z~<@#o27rc_@mDe;lJ!9IJ;>{m%1+6a{2*nD`mV;w4%>fA` zn>I(JL$iBGyNA`@;OD3otEq7l^97~noR}K8{ujW{ABYpVhhjL6r%&5m=Z=GLhG%TP z_M-_L0-cQzO}Q=|Ftp^8TZ@{qyM{Zbo@OU%a^n+k?i+?)c0Lm7w8`TJ3~s)YFSiF_ zS4L9=XDHxaA>zogRS_)#q@w&8KuUKBAQk0BfRqk{9{b?IHGtm26_hhll=u61R^A^0 zs+Bl?3P^c>3FvRQf^rAZZTfp6pu|aYn zx9uQgzX(Y|J8Rs;j;?p_kl66Pik!sexfGziSP7OP-yj(qTE$ z7B`l>(k%z{U$}zS)wnB19FTHc2dEmN>9@WLNI4z>^mklAiz6d#7;gYl-oF640GD5m zM5!0vU3gaBA$a~Pp3DdV`fF9rHGScdfOX~2UkCAO2~PP{`!KO}Np?fLF-PSt{<-YU zrCimw9P2SJUdsNya9t!vZ4KxlM``TGhHpx2Lc5`&coi4UvoTODAX?8si*l-YS_p_% zzhBOUDw8~2j%Ur2+hC1F+_o5Rg&5~#Imyj-5}Avr8xlpZhQhrSIeoE-Dn-ZI2T(&= z)@47S#Hjsj)c(%Ct8x>Z0kryl-_ZAa9E)W)Mh;utwn)?YY+O1F%xpSe1e!nK3R-Qr zo7Q$<&aC8Ey6FFG{$SC&SojLt;oS#mmCEgLG#(#B*6C90_U9>5d;~ZmN zU#Evx!_yNnKoR2b>Kq)V^!loZEk`_KjRzg`Tq~oM@_W1YSy6v)_Z}-2w2!}@iZhJ$ zTq5Wio?HBcDjPPNa?-}Na^kZr0VkrhK{Ocpi|cpp22NoWdHG;)2jup{}#eb*C?7e+SOve7{y-i zEpAj3nw6QKx;SG9IQ_4#pk@!hmz|He`s*^STdH=|TSzDlZe^hk+?6nu(vuKKRA$p0uih8O zXmiyi?5`SZm5gbSqxw2?`#N*_I-tfXb0Vv^-x@BN8;QHt+bBSqxk~`Ojw@(gfjdRpZ(W1?9|da=4^|y~L!#`* z`{LO@o>}xk&+hs0;LR9@p#OG6{rG{yop1Vix0u-G%5bG0CDII3p=S54bX*11Q6h^@ zi?a)mj_>XUq#Ta|QjSf4TBR901;}U)`!L`GkSSKhW(2|M^8L+M8ewcA1p5KfxH+;9 z$-tEPs$|Mnb}&gugjRv0*A1dWxfiP>eG zD#<OpsU8HC_9F?|nmDx*unxV~3g&LF~3V zXMm8v`SRKE#_c$j*=Vn$(=-F`Y2oO$r*!A6nx-R?-RQP=;o6DoZEtKNd-n{Do!%GQ z(-+&_7sFEBPALUUhiC_n1H(rab?0>bjN^C7*t*De$Nb55G+5e0<(rh=^p|<42CXvM zIb2p!V?bxVy#t%)q#7w8TX6*~iiPr087c34Krad%TbGK;Rfg^wLr0_kR-sE6x^Dq` zS#Wm((l{Oj^k2Aw7L}I9_8cIMjbcYnbiYt*Y$Ndeir{E0XeeC&*5010lYf=)IG^*b zKva(!@+E*YWOi4t;qqg6;N$~s-gA7dtVZP`h>s)~yp~Z((o#|*&+R_bsgUF5&mExC z*BM+6JACNoV8mj9YQ^lLJ>4@A;2}6g-ZAbls!w$0#$!3_vLDk*$ISG)hAhsJywDw3 zH}UINPBmduPMt}2Rf*r#P#-NMaTE{4T;*P$`9>1CY^$8l0gK0 z0L04o)z@OYCHjez@B2`8Q(`%*#x&F$d4<( zmc`v@C-D!`FaDjIF*b@5@2;O5(&L?uEZzpKZGbe6-GDTX zy@0j|Zx-&F=EDG~Y##^cWl;FVf*y^hpfw(Mm3JtcS+;#Uup5ckaoU!3z)C@jjdOal zW76pj+rD(Uu%5DHh%}D+c(BV4 ze_{{X!39`^>ANZiOND)t)lPS;;=UTpRgCQIp>I=zBMaG>ecIP`y)igV49BL+kTFl) zEV+F{KGMdf>9>xGlAH*`@zYRPs3((3O8q?Tvg;Jyn; zht;mi`Xz8WtX>aDJKiS%Y45~tS}jlZJsR@A0KJCGZygGe(DYGYG=1dz3oaEM&BuZE zPC857idpJr$Qiwf&g%UnD|$xnCqtrx?y{B)vHg@VR?UNU(9X-uilSO&MD7UV>U4FN zJXAjtSw2RxP3!S0$zlkQX0Zm476k_mO2>hNt_LhMbe{!8j{x=e(9Zh?;NHa*v~I;+ zL%AD}hQgMw)$$WSra4tC z24XY4cdawanUmO4mpHy?K3qbaMw?B?y7O-8qe;px-9}5iKN&C0F%+vInV6R3csMsk_7s)(tA#}Mp7_XX`}~;Qttjf=*R{F{U7aK{fYQ)1q?*db zrE2O5DQl`JRT8w@m9E;*%?6}p-C*cC0kPi+T2x8e3T^_Vymtc9dS|bv^?olPttYA} zrK56EI*zrp-k&#gZv!&5Xxlmc-4Js7yCFD=9c~A#^H1Y;03U|LrY7}gfK@>ueifJB zI>SI=K>x-Sw5o8|%+vuo2$x?@L0%>W+lXf^SVs`)3t>0D?7;PvppyPjZfPgVAeRk^ zbK>2*;ibL$D9|U^zAP?Y#P&^@9Jr3^CUFFDb%}}`cooIF(GfcH&xnL2?}_9k2&bx0 zSn=3GVuqeX!Q))qu{%<+s-0 zuD%*y0i?X^0V&-UKquq!Tff0w=@_cgS%_WZ7zRk=$TzqN2AXW%a`s0#AUF2Z!@#|z z*Zrb?-Bp->VOm_z3rAhsZWm?&a!Wc5gWwVs@EwU)WQz+Gi&C?C6d)F}4uQ38kHWLI zZ5F3GTu_rM2j^mygZ8sJTr3Bq9G@cLQ>Zy`^Kt^r%QF(;oJ97uP_Kq%N;;M?ec_xz zIQQuo)J)oE_8Wjn8bpEG^C?(Cq2I0<74K&mB*}!$MpvC|qf(37A?v1KnOC`+@((n%@CacgK)~<=bj1P<#Mm`vPk(MK?7c3m?)S(YVnimkK`<|h@AJBQY{MJu#*YF+zq>Ydj zW~xLRoU`~BxSmmDa860g$zAi(it?ho?hYI22 zTRa`&T=#%u2VhF|@zTt5eoWiOX@Inl*dnyhsdtp_5M-J?7LN%(oii` zYft84?H^(rgnPg{^V9iNQU#@#S4xx?SUDi2n+{0js}_)Ej2*rfaVMZ*qVC-e-yQG{ zv=Sl%Uf3h-^8d3wD>?sjJ}Vq$rSBhEI9haU>Pp9A(xRho)}reIq963Rg% zGo81@!6IMm=zc39uf$yo?(=|@_ltnOBC)Lnbl}YzgL!uM#%BVb-ioOZSk3V4QpKuD zHs&I`-R}&t3qQorzi$ps&D zao%B*e1njTa*U{>(#>L^ZHbMaiwtOSu|abHrIpj$uX4`8n~)Us3_!;V#DVT!T)O&l zg5aoCIS(DQyw-(=d=uWr@z!tM4oGce6P=k$rB%%zQsl(j;yTORj1h;qJe%xS$jsl(%L8=?fK1`>Xrj^zW zMnW?#`k!xH-(Nf z-`cLO0;F+V14!w<04SZy%pJnZ89|NXK|rc0IQyreJO@Zap@`lk9HiFRM&SATf^%JF zsCCr8YaAfe6jgx!4X&Uy8<2)f_ht>b8PI*W{MI7eHRP3ml;iV&lw&O*<@hq7AK>y^ zU&mcJ&=ef+g@M=0WY$$o7lAP5&&BFj9BZ{7t|%?~sC#On6hrTQ<{Kh-8?37rCz)5U z?p2+$ZsHA&mkgXr%YMEO8MACJ8CJ8S(bKO}>7=jYBt!Z`z^)n02Sm}(31BszPsFpD z9diKbh#&z-Ic@}`9MlPF6yFBO<}fo<2W-#LA;w*a7|`k1_y)5iQHCdC;CDO*eje8t zI>(D^jC6ob5q(OxV~*I;n{Xv~qb0-AQo4D7)P!3ANK1xuhFX^21f(4I15%Ek0n)O3 z6p$%PHQ|g^_5WMnk5S0HfZc|DB=XLQP^13($r8*d|3#H?TeWTRI3R4@bU9B}L zC#AaskV?z<4c&c)?jb|>3qS|%b)j*v4@>8Dp;ARV^<_|G^tx~js)73vF$Q!9Of}9y z@c#WS)Sz*>>Jx=ad}=DiV{eNYqC*VFddV;BTk~Pyy1ygE9H79pv#_YB`^-dVPGaI? z7$2H>hVzq#CK3*P#&dU!?JLjOagw8OQ$Oofsv%sn+Kz};Uyq1r;mBt}5>9`wj2XkI`uvtHp3|No|sC433iOL{FJM zJ5*z2xn=6wS;rtVoQLv@F|Cdtd{%8y21wEOujcM=oqu0ip=X!u?czNZxr&dux$wRMJ; zVXMMXBdjrU4v&YAo2QW)GzjhT=9X63hs{G{pWhQ&hy#xoEp5J3C>DAclAe~eUZv4< zA44J114VJ-kDQ_V$Vaq6M%pzn(D4d+TfgOU|!y>dncmc|F3yS#-;A>Xs+eW$huH`q~^?#GMsGQZy;yIPo;MfS@CE za?2SIKr&dor38snvau1P#L~XJbr}-If^h?}k_eol8&M)8^*EXy$7Lgm5f<~-98y+^ z%&B9dLOA7>l$M^23)vUS(D}mZ#wX=3fzLg;r7_ehXY`&MS|Nm|hgRDEud@Fymj9Ao zw1>`x9g+(bF^SfQHustL6r{KCld?Mkj=WA?UWL6TaZ2$2!`Yiaz0ThCf%oG}1B9gk z0ts9A2q6uaM3ODba#-%GeX%ynmL;3OMYgqDi)BfcRFrz~wJ<+LoP zG)zlj(xH^5CGDBQoCD_!>13ueL(^$#=+KtZLg$fRzl-nt-TN`4dtP1pr{C|fWM_*mMsrxO(n^Zo6pEP}&op(9<9WQmRcfU6ZT(@5; zoH#or(rX?San?oP`IRTP?j_9WJ4mtZqfl=#OaRg>aMT*)5(+TPu=}h=Z`1O>GM~Ddsmm=Aq@ET(gm^x z-@fJoc{limUm$-8eCz7^J9oOi!~6pI=iuA+0{IjW=&mh$r|N3a_gx@e&HF$&+;ic+K;CtMumE}A1+oRm2QHBB07y5A1pYhy zfe|e5v5S#ASEK>p+f@@E0^feYlv0rJ-_ zkY57G-?~746ChnG-i7qDUJYXG0(l!iK7N5r0P?RdkUc;;NABEtKR{l4f&3gm-g<$2 z3?TRg@+qJC=#g}RyaW*I0-*rnUmy`c-gSZe8GyY10{IDm{LlsR&j9k17s$T@$ltp~ z?jPI-k`36XE|4IjJo?;E`E5|dKm^D9jCiqb;9nu)4A|U?f_2! z&V6@Y{lJ}1J8|A|ddH(jE>iu-^;_@1>(fshi79JkyIWT!DM%&U?P+-N2kb&H1bo#{~B-7C!NXe`xZM z)4k!v7ydlBcQO9MtB-?@Lh{gWt&hNs{4xhKv6+`E|ii1&*i-Jj-k{je8b=qjYnKmY2BpS0* z{(0kx^V{Iw<&rmk;4P0Ia=z@ufx*2?ud9Fc?O@9DX?I>aao!E?T|9sE4etZd^fc$o zPn;vTcVYiw;hX>XL(ZE{oWBn4UATVi3;yc&Jmh@EiSw)A-jxv3`xQ`_o_^PxPn_Qc z_b%)o|L6xk@{seDC(d66_b%+;^uF%`1@~!p-g4r65Zt>G^6$UrjleuS&G{oI&btBJ z#pa*=FYkGow0P@@)8*Js{hdGiMK2SsuR3vl4cxmp4F6?&_3&L^ed7FMaPPwYqi^{S z|I0%TD7qlse+t||fFAwut4$CEPy6}Ql6&D};CWYe-t==E`;Y^QC2;2o+`Byg(hvRK z4?X07>1Dg)E_w12wX_2LVE7u>tF_=T_k z2QOnYJInmy3%?BRU7G&jKN*5-`?Nd#6Q^svbynujzT?l09&!dJ&bNVk7p`IT#lP{8 zgPu6uELoRkpZss$|1$0jPn`FFdsj}s?~DGy_daw7J8{1M%!xks4}o(}`x!V5!u5B+ zy-Tkz|JD!vr-vN;#Q7a?e?9n%e*JfWVSC!0@rm;ZaPKTN`H4?nJ>bHLRuf2@j`1%v)SHZn|*U!EFPyXD)cYVW&^ZYUh zoCf~+)N@*V_(wl~^3a{D6X%2A{_Ju}oH*V5=U0GFpZwwX{Plhb>|5leGxB-22z*9fdy6n<Wuv1TO>Rq zpLUCU+Zp+sTjYDr$Qy2v?>{52zeRrVjC|oO@;A=N=iefK`;2_iE%J}f$QR!tA3q~s zc8mPx8Ts;CHGsZjo<4 zBh)SOzBBUmx5y8l5%L!Kn`Z>RMLv8+9^WFraz?)47WwCAgt$fi?HRecMSky$(6`8^ zcby?{vA4(G@xwpskl$d5lje)a+KPahy3dw~3#2gvU~K)$rAP*2y5#eUlZ&4S?Jj#nza?q6Kq z)H-0l|5?>>KILM}Qv}G1FLZ6p?)v4AtiR??m7P@`=TbER$errn{}}gUcdEZ}R&|_9 zm2^^dZNu*Rk+1m2+MViOo>d*^QY8cAdZeOLeg6;t>Tlku-qD zbl1CH{TcuGPQ{;99p_S|0_4RPx>j&^z2-N5NuAw5M@AhlU~30J^$!l-uT2>)p0IW)=6~} z^Y8jS_DApD_4#MG<6Nphak>|W@Na+ipSV+9omCy@QU!(~fa-I>y}SPY>fK-v;wBEG zv#R4@csrn{> z-1+do{~t5ZdbxSm=bb&?aV}Ngd{W)mjo*xoAP#Tx;ZOXr?|T283Od6b=TZfn2CA39y}M@r-KXBOz3)7$ zI?koa0mzFlysndgYxGyX_ujky(plAUE>&Ic;7)b*-p~8-J0E`Ztm-(ID(|HFYH;ta z$?^~1%TfRNtm-(IDjy(sx%a1D_YwB)UEgr_c*nU^1t--xVIKX)H+;zt+^OQTs^eU$ z!jtMIy*~S|HNSJG`txU1$GKERC)GIskACZ`K5)-QosKC0&pXbgYImX1{?xDCs~!IJ z`CT37QWc+6H+kOrhV|^uhhKUw;vMHwm7G*J7T}M*Zv3rxD&Y)woJ&=Dq5AZH_bWek zr>f7Yj&rHXPO6(Y{GpHj(eJ%e{p4BIaV}N+lL`U%?)r0I@t@yzr~0+Cs^eU$a)8|B zjSqa{ZGYxY^)=_lOUJoX9Zssx2KVlAAODv>eW!ZoS=DhaRRuuq>dLSE!FPTCo$5Q! zs*ZE1Do?7L`s>&Ke%A-Qv1~tnR&|_9RdrI`@Q{D|?cZ{z`oGVrj&rFxo>bi^V0WqV z;w$b{FTVa7?KqdJ8X$MIIsd62dHg z>NuCGZ#$`O^2SHL@%Qhk25$fl!PRjtRo@PfyIL=L|Ih!MyLYY5s*ZE10_G2>Zt9fZ z`uJZ1#o{J5-g{PcoJ-ZaPO5Vzc=WR$_=}))+^Bx~tm-(Is&}7MJ#g=?zxqqR`b~GL ze|uJSoJ-Xo1IV47|7W=j-Kper)1c#As=o82`Vw&OuD|n7|KShZslN5B>NuCG?*hn+ zFAO^gxW4`O-}cLQs-HQlI?ko)j|1ez7jDXz_Tj;g-l=}~tm-(Isy}g3-K6rL`fc@| z-9XM+rsG_y-g8pD1>C#qXFocD@7`sdRUPL#HGbkI>z$Cl1HL`Z@^qts)h}0%k;jj_ zWiH(bq>Jt_+pDYb)%axyH^&P<>-p)p;b%QO9~S%U$6y)XGasH0iGAkt^O?oZe17j> z*gpv8`taCiGH;HPeI5a<20EQC`wATU6`nuy@hhc;eI4YRqm!TM&fO8U&-Tjgv9-^p z+@56nY|3>SJ;x*Wj%9u>>$wlFj|hGS<@&thXFRk|$0dW)hoABM-f7RzVA$7(AV1@2 zH`x5FN8KUO&v9p);IscsO^4x58{qVWj z<>t)oXTAF5xo2mF^Re8|P(O80_cK^$^K?2@{trNTzCnH^dkmhR>b2(@WIzHo`&oXu zapF0Yrw<8#j#I#uS1OU$$A~}6jXSITEXJ+Peiq@@VxP|*zvex8@?@88?A?A|`AmODqVK>p_2 zlk?la+SoWvo>VvUf@kT2$JbMW=cmB4z{fXExw!*gvIdneScP2N|9Hv)*N-}Dd-`;? zo2Snpg>Ta2^!=X6yLoT( z_u4WKfb*&MT?BLo+Fze?>HP96`t?PQOKkKatI;7@rxgde||Ag*qO!WB=jvZfHqRehq#9p&1IbqXM` z?X1HosoQ$?v{oZ|Q52}jRrCK<%U-D}O_HL*Jw=%-^X1+~(pMlR2uhXM&R_P)_0GjE0lGa(7k(qjD~?oXUZmAC`J{8?o7Upz>ADWU&#`!N*c@Eh3sy7-$mGfW588Tqh+cK z-19u3T}@PqA_Pjf$2{!@0_jLzx=LLM499X4o;)RTw_ot=^vk9(dnIv1}7)^#?&mu@eY9W_Q&G>vDjz(%&`IS)#eB*;8H5&qz%N-^$A6>+5q1S6{)*S+aE zk*!@ZvPLir19J28c%a}(BnU2ZZ4hp#x0@m_5`rSG zAoO{j0`qiXu&xcu$y9*q4wxgbS@YVS-9<2ar3o}msWN}ny{D^4pXWge&Lo7;$aP{=@e6bO-2WKlc^_VJrp>Dt9N zv%qoZv~{(sn69hg+xLOW__}hvLGGtEr74_3tJg1oJluABTF@biEI>&*XV?4niFPH)pyWs_aW;IX4Dzs)krXJDtU8fs`DFE9DTEYg zr?4c$QPPRt?bdxxgn+=X6H#QuiE`ELZGEZ;ciVX%kFWRhc1hg@3N(N3Qgm`PQB;)z zb=}o@SMP0LuNxCDQ#RErg_b6YqFsdi6yf(H2n3vGDQ?0jw>fb5{L)5TakMJ43@crf zwrdl1nPl7*Lotd%O+b+@nEb&E@MU(U*(;ji6`m8cmreR^ zck^}bJ?(D>A3=BG@$k;G5~%Yej--G$uI|)re3uFavjb8e`0pq#WmAGPTLg<`zVy-cb$_dMhkzNy(@%C>KRw@H^V*wjieP!e_4NVp z-#5N+^X>Zot4FUT?=M>H&~D+ue|*4$ukLUC>v%r`{$34c>bmWw-SwH^@1@sj-}3g( zVw{lc+p9YKMet)H;IF$nr>`EtfA8t{e%438=72NjMC^F4y}Eju*ZJ>jL44f5u3igY zfhdDIvuH?jNg&_xCV94?^!b}EK~?|7#PEYLgU z<|QsDUZT>i^G-XqlVBH=@8r2BDy2W6LC^P{JJ8EalVD@NGk125eQ@5nPSXPP@;xU( z-=40+NAGy_b)WO-P2KjK&jT;`5LkP4^S>Ny^7N3p#Y=D1zv`u~qZ|iq_p=2Q*k%uE zX|UV^^w6)J1Ks`v?T*j=&VT)x-C^6`ar=Yh4}Y5n{C-dO%R<+OpIo1~@ZO(anBSMZ z@V%dQ^H}|4#20r<(pRfrlQw_jkGN{q+0RzxC||2{k5EN!q3Nw6DJa#l z8=6JDjYo52GKGcN78*g5IopnN7KX5%Ks!5Vp_fN)8WFD2_EzXpM70W9MP9u>q|Ki3 znHfn;nTg*VGHDOti<%;QK|F*IlLj12@CWEP2?DHfRD2F8kfhjj*rR%$W8|sB956M^ zRx0n4Dl|H*ifDt6(-DNkoE{zZ42#yrs@;ru!w+?5WsXRDITFd$5|a<)(hSkPD6Gq6 zZ;d7jPLd4KM<`gKV<8jprm($Q(x#^cv9S?vpSwArCUa~m4jR1fBwPRz=|*4!?PAYE8R;T!FEJ&D<=FGGj1 z})p~D?3~fh6 zX)(1{Yi5ESR+M`*cIM__BwIIcP#Vr@mSklp=0|*jr~S|~OFn>kqpa3~rSb(>iWqv~MJ4VIV8l#P86W72s$harkNrh%1-3ex zP;=#oF0I9=RMt_r5BsoDmP#YK6np4V=%hXf?4{#cDQLzw|9)`PX z#to&R6J!W?)ZyV~6cl56zjjpP=!99w!6wG&E0(taKG*ZvG(9Rvpu2T$tSPrjjD=1J zS#vN0(@~LR6{GqRY3DfK8!w~29(ZC+(TZ0(oS_$*>5OfBVWI>h7EGo%R&M*MnT%%D z9ODx`>QTv1_JRQ+Vv~A`=JrI#@>$-uC2Q;*`&eo>(#BZ#`gzD~_WQ9l;*y2n$}2+N zz^oVblBNe7^PK(6DhTrLMr3t7Dm?1-7x^wPcNTtr4zs0fNmT-4z{zyz*?ZT>ff7WH+FK}y!HSJ; z+8|IeS8Z%r?yK=;rB4fZZV%klgX=x#n4x+=Ic1hcqQbIsCYq2%I@!UcpY7y2lKRt( z8K+q#Et0;51~co3WRVO{GX>EWB$0=S%@%&c6olnj`_UohP`H$2 zGWT<5fT*#m%CMv7yf+*W+l4eW(_n1%^QpQNay(3>dUwP&J}4U#IbW%h)LYlv)tGA& ztvtBq*s|IqOh67&F~*iC(qSVr%rNnDlY~`ivLw)Aw;p@V+!_ubbcRy(IQIytP=+Gr zMcbSwdV%k9nxmv>9eQes9JT4u8OxqujI#yjDRHE(*lcPMHTV8rDRm^#py1yYDwM$55(V?!&M?1=?5Kl;afPMZ70 z+-hf}HW>wNg7l74T4M)8tUssx3?Ue4NaJ#Zf~uaMXw7z|5W6)zU#mqpYg^QxgF==d zRIymmSzX0`D$dc2>GyMStqA*Uh9GlGuDp~!n4{%PU=WbZp@mH5Lu$_N*ap}Sl$~My zoj#Ze%Q05yeQ9rb0uPbcd~)2Cz8=|I!rgKs-77*eZ0B2!Y#d*njC_Sfd(&vV0dv=> zr6TJz7~v?56@$Zi#+n<^?T<~5W1|DRq0r;H#58yAsDm_yw(w%_i7Qptgjvb5Q`oZt zzc6fUZp2n^i#e9T#I`$BwWYh=?WTUE=G1zZ%q9aF-em?ng@=}S5N7fMjkYU)EA{!b zF2I=i*1+OJzn|4jtIt6_ucEzVR2UTPB%0~sMiel!86^iHq?04A+NaY-+Rgh3b^49LO!sh@hVn)p((P3RQWO7O02$Rvz^ps-I71~SoVwb<@vkT~e?kN89%1=#`&P?CAiT0^O}V%Bzs+mKm6=#m&kYup@G<{EET zCQlE!9ar>w(S*SINv2nbwSa^HG!ev#8_D*}TzGli7t4%P2DYr#wcyXAmEa7)tlLE1 z923xi$OSAzKo5fQg{jZbZ5AdAd=6R|uHN4?-VP*$i%(d=7A*;B$Q|K~p@lNR`WC3I zkO>R>Q!YQ0=*TvfNZgEy;W$bxL>N-WXvphyy^=;+mGkZqf+m)>baYDe@`%{3q}lOc zV8c-^4T-}cmi(&6(Y-xvT9HqUG+f`LlDbyZO}+}6zP^f&+W_4w;FQC-(6V#A&aDdeD@4J_SdHf_A03~Lm})TM)|=4yja`wG8K zmKtA<7NdOQdNR}x-3i(R$KlNN+NP4{sAWjgv5QAo4^jh+b1YC8E6Vqk-FiCSC!miw z+aJeP+ANPN>QGrYQ!X*3zxJ3RF_Prtnl_wuc^J-eYTx(TaL zv@M^LXp2MPVl|J2)o!?vsZpR6T!yB28$znX?b&j`ptxO{eSS1vN=INTrxKoqpk58k zp=3{-vYCq+5n52t7h`F!K|v3W)EFXjxq*^xJ?8h4>%w9%b=?rn)ajO8dq+bURR^T9GIO>ZxL%Ks^dqd|nCuN=P;fC&2~4qIK_XB%GKg9p zLK~m#=83bU(6y!RLzuGSRb?Zjr;(#9Abh(Q8q_*P5j&e7iqNGKn164<>B5_xo&1A@n}pA|aoq{iN)9{R(c%{%~kj670-(n$`|X zb;0^@ZBjy6ZHx?CC){S*6gg=7M00gIOd8szz5QP0CdZ*VFSrphl_L)H2S7JqDDiF7 zW8$q;D|lPm+7Oa8LvH#;IoIKE3Cp{J;u91wbzEb|*?ifI`}1BuLZGpnwA$RAEXCI6 zvKgW4(+Diy;sDB}bJy zKo(0Z*Fs(QhZ-IV{&FTRn!`j0u;VC*kBvOwA|(X#Va0@6NIbEDL)G6*1aBPl<&qyR zHMNAzLRrt}ND{dN8dSUyD*O8c!AWt^-$a#P1foWTI%6zJm7njm)`zCFyXe!45#Q{0 z8ZDVx6KzNIYBNJ~!pA~=lOLl^Un*K}9m(MsbgUIsWG3-i^%QPD<%gMz*z=9YZ`koP zu%^7<6#bcHt*69F6{>~-6^?H+24>^P!H5zVUg~Jk4(Zs%xkVz*nw6lUlo_=88Av!DC2!R#Vk}ueB3;F@QNMLDqvxnVT zZ|E*3MP>J$!2-0lcL(jZbSiFvkPA4w~GbpW~!_Cf~&WlC5vD_;^@Yu zk(-<-$D~?s_Yjh;$8#5yFJAFmC|<92T3?!*yH;j(bfFSSX3ZpTq(`?rqL1LUEv>2PK-gfrj}_>F9Q}X({>bR!!SO`*=l(t=;fd_2pQ5V z8z&|W%Jmm5U2Pi6X|~XDz2vl%nHj9zHk3wl5;9h(}DZA014Z7q&^Dm$&0@r<&g_`n~v$|}Ha7n7Qp z*?jIxeJQ|m6Ds3YAsdV>ez=K`{jncGgNzP#7H%B(&s* zbk@Kv)I$|~x4|QMUiZ+#nIzU8T1zNH^NDoujEO@zP6IKkY@{zob1yfK%GlRinO<%v z2aK&*b7d%(Vwi1IMyFMrjni#Xf*}c`-lOxT2OlQck(rm0HIgmWCOkMl?&767?ky&A zHk*#8;NV*)M+ExlAz?U2I0nZQYasL{-Vc07uR=@6Qt0;Ts^LR7-YK#yd`&@#Q%7%Ll+JBPxvy^ukx zp(0NMbUzxg>u60K4$EOYc6*xDi-+Tl61wqG2;1Q<%GSNrFwJJxte(^XD4PTGAd6eO z*@N){B`M`FsVHKSRPq?xEiFq!%x$Z2t>BoZxrEpuSaZpehg!$97*44%ls1Dbb~YiG zy7tPSlVB*eU+fcTTWjV93F`Twg(ve37(1eU-qZO=o2{_5-)ACxeq>v0T&9aU&QyzC zELwj*JMO267P5`42aEOouoYoKtH9vxG)iN1wi=scaoF4BZpi_gRc&QqP0O= zA(8MMG+c{A!=f%#ET2_5qX& z>X4A7+=~@#&5aH%1Tj=(t__{HTZb1QL<{GGq@OoCB{cD#OU2M~Ph$hb&!;3FYMC<^ zxo8l{tLCT0|o|}8^Z%F&OC1l>8Oo-0TcN!pgZm`K=;aiUZjTw z6^#;zQp>z@++kiK2!`^kD}qk=dcCP*FZX$2a#&dl`x3Ojtanit2`lv7tWNs}Ny~VVaHDSa_4pPsIpg$2*y?2yz@RdggG|h}Q z>2MP{OLFFbwV`0(Qd-S`$=N8}v~d*kidY!YNdl9E2dAkLC^2rLb!=8#@cN3G8wj7=E( zbuX)0Xqo7S-vdKOk%?i2xmtpO=Iv|&vWBP61b&rHxRo$t>q3xx!LYDGmPt7t));jd zCNmd-G?N@{#~W3%m`S@- zDaS|q2c$1d)eQXbv> z9FJqA=ZpBN(AK6Y8PwcC$6$70(DXto;SJDgFk3kz`D_&%nZVbCw&eS9S)(H?oHp1X zP8+>aVK_XjwQY@W4`?~XCayJFPxtAul^xI^Da$33t@M>34Y(=68 zLOk`B?lL^6m`WF{H#Ndt!#i7rEQ;fPNAzdZeoKxfgobjC>yF@2Z{-=g?KTWWYc#M_ zSV?+u6UifPG(+GfqT-9 zP&ytQw^PCpIglI!tQv7-XfD=dIaIh1Wc7GEtUMle4~HE#N9&$MaXE9$$GZ)fgOB6U zPPgUMfc63yYKa}xadjfv#$MJy95Fh8Ra1-JWM3W(Za5EcimiqVd$D4u5zZp8wPE!A zFvkQ?2UJBxIpliH!b1dc@TR{nEQ^t}rjOdlY7Qz{xE^JV#_x8+02 zbJWr1`*o$8?&2_%cEtkJ*V7}l zX$vs2oo(R}FJ;l9B)7%Ef}on86O_v-D>%fYn4$aDv`Rl)~3U`HZlJE8Y_HsV4{8qEdH?Ma&rBh_xqeh6_VAz{ilyWsrJoR?>#PeOM|gTm_7|BG_MKT%Cbyn zS7m+54d!cvD+F7~%>H)184x{d4mpR&WM;({&Le;8Dz;Lp!j=sWvCQ?2W!1+JRhZiJ zir{ycKoa(hk^Q4Mh~{!nN8_}V50JN9&PSv{K>l&2NPJ(0{Z-=3WsM($`OMm5fgKWb z7hk*ib_^21loEAXfT2*9m37(^RRQ!EgaK|Gwh*xfWpTQREsnP^h29U$!EBYGk%KK+ zw_NJ_pxwqfjS%|Y*fDm+py9H1fQ7Y38*_{nV2~bcvFN+_2BKkf67M}cSFJ4ILDkoC zJ{X#Bl9q&U(Cg(n(17N=_=uD4U`!j7HyBG5+fUFoQ!GtPs&P5nkeIG{-iSu97;T45 zi=!^*#!8@3p!k>0V4jY5Yb+jv&Jupu`JlnT#sg34quUtX>Zwb0?W?S&b*siTznx>n z0_$^$-S^Y2+s_x(7z}ZYLt$TGVVJH}o~*q|)^EhHnU+4rf@Q1ARNwQZ;E=Kr%*vAFmW?guw;F-C~fz_)BWbf-> zs+k?Odh2_!7SyY{w`>%?$k=9TT4BkrhXk2pGYfN;&DKg z2mEk4+$^TSrs*|fd8hGnXHN9MShQ>F4UVU+1TWLs%1GVTD8Pyl5nA;(h~N@hoyptf z;Fu~6rn0kg61jD+2La2o8*wwnH};{8ufmZRjg%0;BSb$kv%<$3}g0bP&D@u>0u@N%sPdqZ& z4Xh~hqD?y6%#>hB@wn^K_2iW6m2Np;^7`xypzidys!IOF((Oq zdo#&jY&bE2xBW6LS4bpsoG&FSW;rD$UKulbFlijajdvTHY*uJ~u%y00C^4Q=!y+GH zLmr+7~;{+MzkZS3_pFX{8c9yK&b&oR=X%owVO{3VNgv((* ztGOy&A4iTRruiPWOj^RIv^SsHEErauYu0c$CB`Gh0s{>(SIXv2rIvG(rdsc)dd0|` z3RpQYL}dl~tGgJFLaYE27&5$!FiPIX=}McfL)3smrsom5?=x&m=uX6V`N%RXL=jS8 z#0}mcW3&j}mK1YY9`6m%<11X+gjp1qwtHjirhWL>P$dtmYQSlD!^_Fu4x~B=4BF$l zX=&ByVw?C24T=~Hm(C|mdtd{9)ebz+yDoWRrH#gf z#7Ox}%rVdkIhJs(_o5{>?}Nd<<-#}J+Fm#Zc0E#6tui%TUl+-dEZB-L)+$UFV`xr9 z10Sp}%ls59+EGb!%=ExSmS*;Q@{BW_dc}<8d@#}Jimwi8;$UA zs^)$nIx8;oD546d+c7GQ;>hyle7Bzx!pz?s_s(jsOfuZV14~dmR<=n}n=h?pOwIAI zPfgVA3_@4^Xt40&T{}hX#`lQ{k2Hj7EQ@&RG2G#>UuRt0TW{Heuvv1w8VQVHP7DID zz;`(9gQ?gk0c+~=e(O6>I*)_wfPpz_Ne2sDywNbW;2=awvkX1>+Pok!*JAl(Mlyw3vX=Soz>G^SB)>SIkzBO_rlgVKABv&Edk8dv3C1YH?!3O%PEe*m8E5YG4Pw zA(pAI;Vn%yHXw^}W5+p6x7E0wft|8oI(BdF`iRru8*v^LcuzBi$K#F^xP=GCzN%DM ztjdNJ)&f4)`AXh4pp}khU<79d=9kt;88A&Pfsprk738CGDYF3nP+` zwve(d7Qgp*1J;VK(hMatu`?l8uQ1IkX1P zfax)8-t5N8sE$f?%nD$MglZnZ;v~x6`x-u%X7)lKZ3?j7uii=tSX|ae28hz5dpYRQ zLIi#s&ndS&GGeHYCD4iDmZZ3i6-t>n)A4#A@gtQbEE^l{+PsI2_$eQSM_!n-%bmIe z6}GdogG!ax3w@4wIbrD=N38N;k9W$5K?+aR=OcNIGHkf!!j-$?%1~V`#vZK?HdBE* zu#GvFU8Mq(S#*$Mpog+P+Raed9}=n04R$^juLEis(QViqspIGvgq2DJ zIZnq`4x=_`PKG_KWS4e~;80@NJ+QDw8BHom4=2vBp{ooVZ4lGQ1~e!OJ9r#geOFKx ztt+^~0r4uU7W%|~I{>R&A-4a_eg6+a|=Ci5U zaL&Bpg#e;9NJj29!)R7l0&RwEP+D6a6~{g)A4`Wc7J;~l>UNVdt7KcmagrV60y26W zm`_X(Q42+u4H-TUFEG{{F9rpM%n>jtP7p#18vdr{=A>ZFh6#$H4m2?6oqtGV+*-C6 zx@M`UCPFaiS*WTB7WD`Y463lGpzTGWm}CY@$U4}_{Vf4TN(Z9lmLnea7-~}v96<#$ zlzI^&0h$btPELYl0?Jse(ZjCPm^i@3`-*R-IbZH(%^)l()f{mf5+2dpJ}GXt_-Z~$ zS!*YH$u8$e$Y6(gf(a;2xhYX*%7n-z3l(wCM4fhrNYl;ourhow3~*SljVvFB`H1L) zLHg9&+EO}!Nv1y=xZ#%MQ^^G5sfq3b)8qwKgNjSV9Y8f<71MM6`@>@H8J%qw(aB?wlPMj_LB3eW}|2UGBX{dqWfLNR^{VkG` zTZo#wxgCMk8RHeMTfrQ075(T8_`E+DRynOt%zYuFU=?M*rAKb*Z&pxlj`~$JuU&Yw zXT$+r`u#{?vPL#%yL{g=VSIe|!r?A-7}Q(n z4zca+G|;XZV(^^K8GPY_5lt{hQjV&Prg~r$X`ES3W>2Nfsx`fxrIJXEwLK{xQNg%{ ziYy%NXCjzI8m$gK=otlI0&7fEhM4Rb%23p9*t!9=X*dF{@31(LH5eErQ+_tVIP= zU-Jbr1)FX4Ar<>eFiOc8acUl-qTfGaoUSO#8qsSun`Me5FHuO?seMP(*64B%rig~R zv0UuHxM2xp)&Lgs1V2>xlIOsjm?a!{2?d&oVETXHPmQKkggM#$ysb`Hu%DCsv)yx8Q6b-e2lDYEYgeGlsU z$E2#NXeCu?x@+(`(tzq(#*r)&oE{y}z8+3nHHsa{$4uQ9XXUxO{vs)51 z-_1Z96HFF>-b20X`O}`z?)YKJsP%?Ww(&uja(o{$;z9wltZHF{G1lI30Uy-8o69_6 zh9!;Uf@Nzn1y7e%qQapzc8a6zqxyahXM6(svt|^o%Wz2zL<03vru6+qy#pq8HiZ_0 z$p|dPHatI%grfjPh~xEUCxErFD(lCfUkc`$!0%LuBe2L^6dDyWXdLf}9;otd6qE8p zZ;4K_NtM_u;vgR{4W;icCs3w~S94%P_P=~YGZ+_tZ@ z8w@P2f_tIAY?@@A&BscKx2|C+NN+t3S;h;se4Rq>$Q^HwMNNBy#R^NrLO|EqQJ*&= zmI$6>~1O*sPv`5s;Zd_3Ry&xe2Xm>O_weC|SqTCDRnq$|*yrUZ!Tw z^9Ef|;~8NfRmS%;TV5l(DJmcH7_(z~$$;^#h+I!HYUuZPH?jI6SU*}Q8wE8puOE0v zky!5`hWvjyI*+ASttARS5Cd`=3WUfaBf*R;GKj3FKmDJH?OS#2vJvdv-D|C{sgM~~ zBd2=4TKhIUw=V}W0laFOn(W8rgg@u`V)eFtC~JRx%C@V06h>eW>@M6`aK;I_T6g@O z>iLNzl#Ir~Jmgu#FY*$@a7bM8+-?8Y#rklUllrn{Vms&KeCKQci7XWQVRbtq3ps4j zD}q^KN5u&gux*}PSr)GRiPxDA^{gVnMR=#5sPy#3B6v-lUTErv4>Ml$`M#cBW)WPNVT1|y!62ww?yG&m9ge|qc(sO*#Ba4{OBDvYipsOFg8Tu4?b$sJ8 z4t@8!W3A*HQJy8QSTTmn57jBjnjQc-gSb0dp#8f2A{>8`%}xplv2D}*>&7-|ihHJ9 z*!0OGJI~2UCO_OH$+yv)? z@*FYq%5t~HmvG99zZ1mL&Zz5BgL+?%={N|Te)uCxq&y5gzAp9Y$=9ZNHnJ$YU7Koh zTi%bd%pm^XH{c*2Jr zZZ+$EvVCz=A=dP)JU@04Vs(&3d>%C$n=beXv6H<2+TyE`PBA|kO^Lp&w)d5qNNIYA zE>rFDvW`1aQE;eIY3Z_gO0&@=X?e`xa&t8|&XKM6iZORKVtGjMEK1&q^^^Pzn)AE$ zrDm4DlJ0Pi#qzawQq`tTPv$H>St;RpWML2tTfSMbi%I_3(GP1%7wD=pWtrNNwS_(J z(4H$PzNnZYoygE0GM+@c-H~Nh}z%Je<4!L0ag-aNq54aQ#KbbiBO)^+Wb^Ch$06!8^5 zXZ4PzC1^Pq2$xEb^jM<7EMoB}K|u0{Y{}o3^J1xs!*7oPgRBdVLkJY5_4%~JynUl7 zg$o_3A2)2q7S6Qt^`_5I`;?Y#+$=F}h4Sl>z6d8sb`f z><1NoBYM~q1Rk?{>x%e9cKZHR`@#CEF_<2ZO3YEr1S{O@#r!n4he;rv31-U8L98_P zRz8?EDJ-cYba5}U$KCgxyDU9y?|jJp(_<%;SOm4SK%q$7*H|UcE0O1CAi0#Ntbwh# z5m^}7{<5EiYi}mxy{0nr8h2`83h|H$6>6!^pu_a%5&w<>dI{=#C+&D%n@iP?TKz!j zC$z@vxqG^qS3JT<8NyoaGt#7BaZx7#SNEX};9b~>LiWfJer1i26$Htcf~!-ngsX*~ zt6Nm4k=4Bq5ifXEFKglHn>94;xE2b+NikADmkjGd92&eEd0FOIH*fC8UuJz(h0kL) zPmFUh2(HPA+JKp+E){4XRtQ}{*eZ*eLPoc`S$<1x^1QptXrPeXSN81ZyN|M0GIp-w zeeF74-;Isl?7KSiwFPjjNcy&+CWO4Bf>cZBE0%!AQTy8D?e#_*a0pQR9KDB*odX>e z)DSr_xuh2Z4(4?AUj^7oQC?La(pXiwoAM0_XGA zZRSem_ijChnN*}+JyF!77$M-IR=TQI2t7=+t+wKb zlPJ9^Q(+Zec%GR9_@zwqr->y-vTUG=&soRB`;PtkB|@A)h;YgXnbXwp_T7HR@?+G} zr^dg;6hXJUXms4D)F~s4dZxJ}hlF4)8;(o>(@tD15Kl8}_UPmvxsZFReYDLeaMUiN)O7uTeGN^-!1SIkUkB~d0$)oz@zR*D~6`ULM%Eg}Or~^lKiFZy>RM3z6 z0Vxx3+*XrIL!Pex(KjkNN22QQ`UqwC@`9L~-lnQB%ea+7a+94Zv@um)-GiHT+)J2f zntGfE{YO};{C?$_pPh8gY~Eyk8wbgo%C|`-SCr)wJ@lW42%tI>XKDojLiF$p=(6Iy z)A`+st$Oq8@#i%tQU|wt;760lFmJ74JqXw^ zx#2LKDR#*F_9(5A(%woXKoUWsiJ2%o%dQADy5Lw{q*+nCXc(+>2i^KflbL$neYQ7+EPEkJGZTWPoPF94KRw<4 zp{Wf#R@S&FKgbS!?ANRai7T?6WRZ!IOLcQMCGL!WjQ*j2(G%@{bqHbIr#a0+1^*hZ85$HhsmG-5VEn+atILNrM=BR6uI{p{wnc|}=!7o@8khIdcz z!zjz}@FVcD^5DESK{WA7xkbWkIsaiVCt$bGAKIY~uk=;wu^Brf(phR7d^pb}&wKCH z^7mLVRebev`_s9>=*A7q_#T9n%=5;NjsqCEwb+VW+j5v zcHdH$`OileJf*l<>4N@ZFCCPZvmO*mmgq)^ceol(*%wm3 zqR(EsKz}NGOi;}KEgwiH8su$yQ|qRSvy}c659Nk4%QqwcNl}j6ASw36?_Y*fP?ru~ zYEEKcCTOeLplpX{G}q+7@*)umFF<3Z+?CI+yl`*frTS<-aq47YGO(ZgeTNI{@qyS( zlZuflXsvS%*VxA3$RKqdvgw%1={;D(fA5Ctdr0s;6>Ws*by#7w-|rpvywQmq=!h;d z`zUna0FWqD;xq}qYInSk>-&6h*Nin{b>|5HLujH#@#GiiGrWPmZOFi=JiKq7Fd2&7RNDbsBZ9|6_PMn-?*R?Mm@$5 zSGOMAoJz;%sX91!aMi+uyYW`{DczYHG}n1c#mXn_@9p(n#fxDy`mt2m3Mzfz4Xw<*nY+?_?aG6%Ww~*e z1n!8UpE>g*?#mQ8A}!5>26FMorS7%7xW7mPnge;ZVmNJwPwczt=75BFC@=08cD&DO zOr$uk8s21em53i!1+u$#WM?v~?rf(YB;PM+MGV%Ll`B_dM04IUtDinYJ#s^Mizlwae zo=h)KPR^e0%po`CW9g5ItG>}gm~yIO#L`)gM!6CrLSCZeUb{o-4oK+rEi@Gc$@(JF z-}QY~q{h`Q-BX)yqjPuds66OHw(*8~HIbNAHAh+JzxNmT0m6(y1pDsjxVw%9GK4Ss zTRLh4Pcyk{rF(i^9+QThaBgmII8Su+=Y4gqWDuWI=7Cs1k6Icn>82QAG`#BStv_9G z>It7Ac9?OUFE9h);hx0S(;8)jEMJUvC{Ed6m!K21z@5%v89f3~SzBT62dP%yheP$q z-C7*b;`K!l;e9rL=^#Gk2p6pWo8$Rgt%T_GYft%RBPbQQ0^0bCy!!@ObU(Uu=aYi^*(z24_-=@C z`GG8htg-(1t(mQ4YJUcuSc5orN&3M)_Zox9Pe7qq`a;8B@uip|wz=&Hpe|g;b9%%1 z2Fw8J2Ko}vP;SAhvWm7G-?`RXspE)^lzNcd+}9 z!Au_m61-cLnBc83;0y`UfzL1^Jp8}Q3~bZr(REj(g_HG)TBL;cJyu0a>y`(ZARLkR zo>eDB7t-%9)#uA^)tIo@F%$#sK%z<6lIl zPyoKUzLFuRiBiAc;E`D6&KBZWJ^p%3>^N*#aZJ!1L(Cz866=iMHG7pX^aXDU5oWC# zb0zj8r+lVcWp(zYJ-<>iM|bb|7)Le^_;Q0UpNghsz73z|Xeb0~T#DjFR5Jt?`f9`o z3(Es5MX#8wa*RFOUXoQj_ILbSHrocTiJI+`zHJ9R;%6~u2Y!DyNXg3auSl!)OLWzm zxxN`bUd%Py9>2YOW#&I}RGx)QV20El90^J;!dKX}RNsUVwBoP>aIwSVMrB(9!)SFc z_&wB91tu^12N#fom9-tr-4E+pMY57^RInU<*Dd9#mb`rZK)!`)=W9MsIhppf*pD@o zF3c{S z0^hxRa=olhtpYncBSwKiU25_Lx39t{7T@Xa4jF@H@_Z;+*|B<-JZH zw~4LFWP7sr@9-gOuW$oqZ;>ep@X@ckn9{y7H8vC$C^)%i;&KWL3b=!pz@xU4?)&)Rs8?G+WG&TEs>qKrM1L85`=C{6apw8D z!s*S&t7eg^dt&hiiS`tR7>FgAEPuTq`6yIuH$K6A|AZjQ)2We{27V}2iQF!4&&J1E z2CNw=Oj{F6^9q5ted4-k5N;M??{n$ijQsBCL^9l?TB1l2z$N?8SLIL9a3XwqrADda z%$*7(=EZk6B|VrMdV9Az#QKP6+(gIq-N2zvY%4cT(*7I;iL3Z~>%NH8|5Aoms8^%e zhlPR)E>_FabJx>|l}An6xG|+~u)eM_?m*qw-47VAi|)d5mb+lRlyoHM{;zKvyK-%e zD4Kf|vJO`AtxDGHA0crFk`lo^|2ud`XBsjeq5Q_)l^Iun_##asf8yxp<|Efp%#1;D z*o!6>io%08wm$kH>44kS&ddh6giRM%iphx*znLTVMUIsP)AI3VC#nFu?F3MyFR1EL z{dfjK8+8S9N;l7+P|}TokVWGqvfYtL*B(ew;zcPe9m(jl!86|!EuNEtZre!m{>2KI z-Pt%f2DGIw5ga)VWE>lZ{Kb?hoIQ?w&w6QLPQ+o0Tn3vCP$#I+LjJizn)OAE*Dmi0 z96ksEnL3^7pTPVng2}$Wo-kmAi=x-?p9Vn@{e{KQ0OTr>a-%Y1O*Wj?(Ya~bCy#9- zd-z3L?V^L|`~JSfpKZ6}hiR)gR=5l>GK12e#UB#`ZD`!sHHgc0FVg+*j=-ux1)0B6*CGAs(nT4KGpA7`!3sD~@mIlOI zp)0@?i&yJdjqmn#I~8Z8+@s`6DxiwXCvG~Oie-`jm;*VPp?u9hUpI%7%5)9};5kEp z#?=B-oTe3ryEvJQo{A~?z5RF#P&3&o9G~WiNM9J{q$+!UpC|%pFvPO9v}Bi?@U+#9 zyvjaKsQD4iyD2_I^eBzbZCQId)KE6>qjok>N?lA9xC>Fk{-SpQsH3N1V)4eE;e4Ij zKEHIYU%=q}D0$VE&lC;t8M+s+rr-l)XFCdg7-29xHOOo+WX*HUNn$g_Fb@!yrJLe; zvqO^BWw=}8pPmIT5=bZ*V-(}6j15lon z^89vnpKX@?0{3S#^5@c$)PZczimRG`*FNlIg)n|9+}X_=d5u`*0s;1~JS# zOcY{|R0iRzVqhy3gAkB&w(z8}UN1kURkA%Yk?k5eyh?Bbs149Qi|p2{Nc^Dr=Q41H zp`ZnLoia>9l2fb%7Qdrg}F84*(-pr!=R z<@(Iz9x`=ggy8YtV>Y<7C{B_)6W!mx#|1e)fY{v{313pcY@v45<v;G?;#BQi9z z=6kkZmeaBBb%_w`vYuvtA=>55DWDL zd!30M0GA1Ckd0UuVw@_~xF8Jv@dnRu@D7F7%JQF4jg#vn34^)aG#RPor+#l)Li(mf z3gc&(b|WPfcGaM;r@uoY7JWn?MMzt+iLA*U_*sD8!#77_ADwlEJrUuLut{^>NJRYV zs9%Us0O3Rr@C~5Q-6*ql$^L~eaMFdVG+)+JX+AJ60FsE)(x~FjUtQ^3+|6kkx~rx$ z!DN&)%=OwJxmGcJJPos}h??zI6TWzHOHEMs&SbACuY~Z=-s9TNv^CMNnfoQzXYo?wpehamZss)6H24S7ueo6_ENsBIln8*QaPl;%wSO3XwuBX%2|%WDhjvVjBOc+&@3v^@J3$(x zE}f7Hi8Su5nrHlNUqdxEf~#20u!78Q;?BA&TE;Oi(Y@a}BO=vi1t!?55J7I+tQt3n zspt~8?xk*LM-wK*@DjV4xN7ff_f=jN+{PB9?J9P4uJ92;|!nwjhyp`-Hod$Cfe zQlp$`-W|9fsv?IipChja^08z2d(#5Q0ou}KmA|+AxdAEZD*b0IFj%Qryd%C;iFcaJ z(NvmUU*9F*7-M(Q_zej0!>t#7=w5`&m>SpS+wn{ZZ+bviPQMSUh>@a$;{a6V z8z)MZ7yAK)$VrxLS-p+g?dPk%cVJr6?y|80P^4w6K<`OU|71Ogt2hN-q(;}EeUTy( z*yl5BG7;;T6$Z?nHcY<93|oo{Olx+MC=JJg|Fgz(7wy3e&n2(H3FUh!n@b!+{j|-C zT{P#@1Vhs+p3`@2Xd0`wvK=e9sp#=QLSQqQJ=f6o8AK0szf~7Qr|ZY(Z1w`6#4WoU zVpjnH_HMx+s^i#F4*0VN!w`*>S%nDW_|8*8w{KEC{waB%>XO8Xqw*JZX?xI-|iy-V1yytN3~z_g^*t zMR?;a?a6!l$t-=Ze{4LDq<EJ8q+6uLl3Lj>5AFyqShIM@Ku_LqANlP@;8 zd@;eHCmlC^Z)mW-lA{cS#=COly5dL#^!(5hCH5RD{bvu)Re}Ch|s6ONtmPa9Zca;JkS?8#~NOooB?Gi-iig81N%E1b2CJBUVQ{B z9-=|0TT=W{&`cQv&7(XMo{<6+=u0L|d3T;xh5}un*QE-(slZ zySPt&h$)Xk^dU_6<(v||AV&cp1LA{{&;{>BMP|mfm*6me7{8W!uLQ2m8>N0v8zw(C zCxKvbb`a&{Tq)N--1j|k>~|`;w=(h6sO3TRdx_%9xETObffkF2ZlnI*D9a!F&ksEO zn*zUz_6!S`hx00Zsa&1?*!0ubHB7PJMKR*c%`h=TU~V6n6$A-HB$ukXINRY0Z^iK9 zkpZX(bMDn!Vtw0{N0ttO_|*uHc9g#!p6k&UCNn{XnTo^g8ud6*NT6-v`_@c9_V#)X zU=qAZ6J9i}Dj&;duM0CX~lG2cM2UBXZvD&m0+=H3i;FHAZl#G`U>FKF4tIHpL_|IVf z)mYC6`ipzQ0e~=^V_kW7*0Bx#k1s0yNJ@3B0hQoRk1a@9(JKgF96(zU8z?&r+Ab19 zzp$?}NE*zzAsZt@2qN0qCASHUIn-s8-vlzpBFy}^5d|gr@f?#nQrvJF3IPX1fdkK! zo}YqXei$U@K1rqvC1K@)Qv&oe$4e~8L{)}P2|a)bcNcX4KjJGFb#ej!1n(P5mTpEE z-iP}zpr1|`Ksoa&%CKCGcbzm`z4?ylk=dTp%IqBvdEMY@U-%JK)`$1NEbkH3WP{(K z?*e!^1Q1`V4MLW8u)6V@6K-EijzXi|MG{cTFS>BOfC2&FvvUPNTV7xahEYHZF=-j0 zx0grpUudc{3G~?}CU@hf?dIyAJNe9*cSj5@!oDaW+e6jFEv)(eG9;U z#(2Mhc2e=VQn&R4!@U+?D?0GTYUvFIK~rUGZ&Y~z0QMd;a=s_O6fV;-A?m}(*Fh@k zXU9YIG?G04tqpe=J18HM^tn`Uy3K3&2LMT|zA4K`Led*J<|u9BWuL7tuG~Sjg`vc( zfQ#$KaW5q}hL?`v7k>l3q1F<7alOwPV~BEqiZT>Z=J&LU6>}v@w8)Ra%~QLLEHIxj zh`B6@2y70JcDZ7-kW%zpt+aJn9SL*3IES2rC@}^(EfZC$=eLnf(?>98n4fhR)Xk8AH(w zXHb5rQ2*%W+ApxZvQ9jTL$Dzl&l<2YLPMz+&`Bj|AGBt!e+F0G$JVJOx}Ju&4F1Cb zxLGFvv((};D)rO!?q|$OyTwWnznHh_vCY?9*5v?;A=vwXZ9T%3pubM$mX=BdK||dI z-{6fXC>+bnp|iF7$v3(PWy?+oDs)c0AL650+LSFQ_^!9;u&5dCMDBM>HKTIKAY2)2W+=E> zJ~s%5-*cEo)RyZ(XGwQHtks%>>WzYf+NK_Dbb87$3FyjF_9bQr$?X9J@5S}t&awCG z%dRb;MoRgEdu%eF!}$SMbM+%q zp7ORkLslvQrmJ8V0N@0OD?cH`x7jyvBuvFMh|oLabN=P64N*(_C9(`e@o5;kaxO%cdF0Px@TAT z;9=5N@bw>$H~bq`io0c8@PkmJqi(?We(=+3u_&}g`=@dX`|MCV7}jssNJ@{ybNuU5 zp-QkOf2=tbmKIWz_-rGk)^&hCRB4K87N5?br0tQ!n%!+3Ur+dqRO@z!IOeVAy%;SU z;8{i}T|rEEM|ueO-y__c-kCxOCqDztIqk0P{^$`6H+Prv*i*1A@ySyh5A$D@WTuU2 zr#sz5eQCa)+-=83I2t>*)wScZ{cvT{Zvg7X0|zajheXq>GS2E4zKjM7odR3uTOJs0 z%X;2^H?2s@P6GH864&n$QAt^tjlTjMTELb4Ww8+1_qh5vKk*S-4{g0zFQZB2k{Rv> zf}cF4jktYel6Wt?5(6`#I*^(N8YY0IIt5y#&@08QSMUK+8yJr+y?ZooF8apzVIbLH zeuuU^rfnS|aBz@7lqBatc|;i)lBOFIQ;J0Zn}k>J&N#mJGT1$-Q$0%U+DezSHMfU>=b4b$SDAoXNJbG= zerS!7I%gbN5APRx6-U4>v0&A^&H-_uKXiWVr<34MWS9i3?L z_X<%0!D!OKK_q%{v@tDs3%WegH$?iy&<%{ub$u=gnX&Qr4H-=oa=Sk#J`|q?!Yu7W zYlXGZzC0nJiLVGcgWL_AWa`8<0frJ_^2<&&){$7Hg|=~8ui$4gaWyGo@A8bJ_ghYU z^7ePG@4Jm&?gh+_VJax+{h&|}cmT{Tr}J-qY|Ye-vv&vdBi3+fVp`P+X&q|bslb4B z0?!Rs`Nz9%*koYLp1lM2k~p7F>~~m9rqyZ@M&lLhX}j?sTGjejAv-ZfY&QX<={IWK zC&TB^G8~{m0m_a<1dm?BD&K-?{|68Tr9A;0Tq{hxTfq%~KZMKI2`cj*WuL2C;GFlz zB!Xk(8$gG*(2(RkqPE~{UczBW$tyRy4|b1iNMSbqR4~49S&qz-{x{s!X{VR_n%y7xRcOf;p5 z-F^SusR3bBGB%n^_VjQ^=*KF{x4HT%Va91Becn~3F%HjEYrBA`<_ja*TYJbSc(&Py z8seYy9&ng+!!(&g6VrYrL8B)uvrD<><17Kbb{0z zNkrYamM}!w+vW!2joDZC&~_w4J=BWxA{B8eM8z5SzMU=Oda ze8`h_JZS-(p~j~jvL;;;XZw;%f1hxC8o(%2soO>0ZVGIobY3^cjN(Z8yax>kla>8~ z-7QxDXdkC`?!XQ^(mtzDHS$vWPGLvR?JuT6w-@+<_{5QQ&@zH?BSa#ZEhy^O{v~%Y z0v5rBWP2@aPP~=CJ|ho{fJ&XWB0vq;*>G}nASxfg34-HIj{V63 zNo#fvU}g2`v`Wh}CSxUEBRl%;W@l<2X|eJdAkYvKcvF47t4Lxen1o|1B^*07FC`G+}T5B`@0%1f?N{oFbp-;1CFOCPLu3A_;3OTg zkAJ>ye94db6!TlFe07+^dRq0+vv9vs1E#A_ay2(3^9d1$;_x$5=51s>wt$syg4t}) zzu?d?`*l=kjg<1YAQIKb%E8Vx1I3pE`^djgyHn_^gbg*(rDAjiOq?}&C*Ql_(-912 z!8TQ+6#S1|{4)I0=uh?y@dat4?r8raPS~KJ2c!XeB?KrB(>+1~y>rRVl!A;vPv7G) z8I4=@CpJNBge8_5qFr?JW&lYFr-713 z)nxRtY$0SNIn|O_4D(Q^hSdV=nS0kIH{nf$mu5KAF>1?WK*>&ky%sGVXLt+!D6|3A z*3^ZYVQx9?cE83nQAqdwy~ChiHj)s0>?j5R6ieB5g~n3v35#m{UuivmgbO>00HI-O zB1;Y%Fpj#T)*g}4Y`|@VO+BoZ@HPgD%n$=TkU~MD_$-|@q?!|q(i<-W*$Qmy#1iLk zLkI(<-}j5$^B(39jD%d#LS^r6*~cUPmMSVhwGBu_ZR6_tjslQUVYBBzV;!vU0PEco z@?1T!3GDexf}l^apuR9bf^MgQ?eA?Xy6O(3`jAe?Ynro_m)_KY!!DECsWmA>Ae04MU0Cm)Go1 zPfL<&VE;QnSR=f=`8u$ThchOu4nr;2r2+^R90qAdNP8&Fh|1~5KJ~#1J(2E_ zO=J`sXl&m8C|Zuf?^S4ab1lm-3@T_Fo3LQ&x#BfpzR{*2=)oS9ENc{6MXc#JD1%Rr zBnoaVj)ZEOW}j6ao6_{?Xh{8jB^k9Bth>*z50^vy$CC59=Mo(_TlnhRA{uQWz@~Gr zGcDj<`notgpTU5IeIgXhh!f^(KTx~Jy$naI2MQ)owYJPFF0P@RA>~&*sj)jU;8M`C zUMO|zLwfQ}^Y;ShZlCIP8;{U1x2#Mvk2eEFS&26RHnLtylmLnZM632txKSM9gtK?Ive`;dC2eP!&}>iB!%m+;AVe zT|P|fZccZB{RRB-y{Ug+%v+tZ09hw;dpH9SMi|3g-$_pY`0Ou) zOQ~y7L!i>=eDw^w5=fo*(JwC%Vso(VfB@m}w@E!^TIZ6YtQYl);29xG_Z0tOR-gV> zo58pt>`{P4Ij;ieZQI=he3g0ng*WTUUph}zug@+L}2sW zgi@E32pYZm-bu?RiMBa0cuq`X-ys^d_OsuL03d1k1uDxc>C&_=#Y<%(8un^D?xeoj zmZDwt9+zJ;d&)_ps5tJL1Cpi;w4X&}bSklPTt&i4`YeAiMi0rVO8 z;3%-B(Vgylf()g+dqCXZdF1jFdz4?yK!ZqbVbR#5e*j<bLDrAd?_+640HOb|hXXeJcFybd`vza`h^vQNtMW}4=@2L<82d3B zS{yJq0_3A3Y%N#n*G{cGw7Mf4tgIweWDFOi+Fl!}0}u?>9a!WcFlG!S!U>G5l!`$l zWXuGB9SfChb5Cmz1QHq!>9)fqf~e@?H~zS5+3{^xSVyG6IlsOK^A>A%_^2rn(@y12k#u-5|c>odt}7oWgB)+p{hBB+ywrZ_g40zTfR0s=*ML zzPUn$=xX&6gP8|r^K)+QUcvP{l%a%o2gI)fn7d*WO4Wmd;^2&LgEJ?s2|gpDuVi_m z{b27YkC)YbgE1!@^;jrx;6Id>cdCXedhlEAN)Kq-XA4-x6Gz2e=9+|*T!7n)`fQ#O z{Ri;sT((qLzZgI3k46`8^=xlOFJ!$rU=>QqSi$a3H@444TUQQ_fvA8GfOqX{Kl}Xk zIZzeSLE|On%Q*E$YawH`~1R4tZ7XW2tUFv%c%4k|L~bx*4yO7L+L?J zcdfA!9K`Y>hqB}m3$!}GvU9(*<`!Eg$d(fi)a~B*@M1N&*bXMNV``x~2>iks7qXaO z04eJQP)V>^+|xGFVTV)A3~fX>>d)fns|WPJ56Cc&-vno}ckR5$ac z3up9VWsuT&&VJ3~KVVGGe|wTjVBWfCmJ z6M}R7WJbV}kUw)XAUD>VF;weG1Lj}d@W%RTj3qvh&qf$sOmDFF=DjT9x4U*=8gOC&shCyY^0y890q%F#2S1M{ zatzD#O+$WKI&%Q=f!|BOO}+1rb5|A}ZpCKLvT@bd4@~Pf1g2uk#WP3({8)$QDXDtQ zp{G0P;Lg%wJ2imhKu1Umm}eemxQevh7r#5PmT1vTE|!OoBz?C1==1Y~-7PS(w$>+!?3wXpZm z$7mjJ;d>ZJx6^Ohgq17dAjE)(&E^s)He@X3gQZpXK@qv_z4eUm!}=TW_&H|#KqW|S znD4NIHA)voB$q{7YFRCQk=6bEseoC)79k*HaI6S+80XSI7->B5uN%#`hJ1d{>9^+R zkHK+a#bKpvV~|Vo$)BGjA#nz-ud2hl5%$*rA%cT?VEU0jyh8vuf&YNP;QxTM&H&~W zV&mVt<l$h7DAB^g*f z2p&~7VU<>f5w^0lauRDea0nGV#LLxhK2}n$u%}W-=n(uou=1A8AakM++kTe5LIKc! z_Xonok(YEM!JX}I9Jp$n7XX&G&xw8K@D}}qsX}1qTK$A{q+|gtsW6{#ePKF$eERed zwuvsSix=a?Z+FZS8x)ph_*9>wt$h0mE0n}QRAJ0b#^f6&zTzT;2e`Ltn1ScY<8-Mh)K2Y?fU`WDp)9nukG7uuw0$y6c5;M9LL~XC2 z(J-3#wVZFoZ{6D;)}qNWr&D zY`VLN;MY1ZLmMAtK_QRvX`JaI?n5C{RLqKI_3r;3runHcLHH1vaAWvCcwy6k5ze@+b{yAr)9gc8+0&C07C(&8Z9`HA~~xU zbT?&J%JN1{uBaE3Y8Dv>k?lxJ24GjNcOMOgjuHLbUZ1gy^|Ar0xn+CD3eClk1NJZh zA&PQn$i9q&{S}2!GlRCYsOncZun9u`+&yXZ9V%U6zH87fk_ztmBfDViXBH1%cv$XpfyQn_?A^9T?+BeCF|)w6K~| zQM{JD^^Zw)DJ_j5oTFr zDuqz}3UBjzoVZe1e)Kp!2~p+@K<`gcy>0BR9lPaVu>jVBz={z4!X0KgQAi04)7w2b z-z1q6)I@iZ%a{mFNb2Gp`K^yUJ)XCGf)huxL=R?lx=1Zk{a_#zUj()Q(HMmay-)O3 zY*;a3QvwZP3dh<1EFjU$%j+FeB`|baci^9r;Jub3VD<(kh}3}6=YecMdM8PI61~Ea z5&9T6tG$0@y-Td~e4gj^yi+|FdO-BR02>yiRtpVSD#y3PZUOZsj^o&|9mkIC#1#FG zgbG_ax6+}11*ELgLcYS2uN}bIZx| zoO5y<`~Uy_zQ50hu{g98Hj$^inRlRXN}WqpOqt34*2dVZQ(UI!>t@r4A8GiTY`6X` zL3!>5vgJ*=p}ohNJsugE6X<89OmMA4I$LU}2#eKG=@AK7nsd(<+!@Q;4nvc=O-ihs zj@k%pKv>k`r_6(_n#{xA#q}i87AzA7SiDZTXx82#3r3lJJaIq-YLKlVLatiR6j31| zWT}#MaI|sJ&4pg@>0E?%go98fAE_rl=3dCB&25ZsYHIS%Rm54N8pkr*J%q=0f7^6` zU|&eT-q~#r(NB3^>Eh9~J*9Gr{>awY*_XcCf`Kb-sJo)AWyDkU5scuzbT;A+)jS4= z{W>`!s$j*?ZAi|ZJI#K+XD$CwbLvc7u!0HlV2EOoWRR+9T6Z@4Al^Y1W+T!uHBN zd{7jZI)-b!w735Zc6QG?^UKKgnp$RcmWkUEtA7{f9MMX>WyLC3Sck3>8PDeP;K-r~u`=_4(KW7u3P{f7 zZAtpxcQqi__V@0tjoRjBorBVQ1BQ9J9>`ST0|TWWP;-UH%au+0Q<6wBZlichkSESi zUd-HRmj}O>D3Zd}av2sxo8^08w3P8+RCr$q`9&F|9=JlNV(}SLwDu~N$0+VDr0}da zmWP3)V|fnWE|qDn_5N^JQ>hk+B^ihsajNzT{l-$Mhu-4`RArAu>>7)1 z05O!jj+Mq~GS(nh$e$^&$?`yHIb|MAUm0K_%`hS%k1?muh~u@-_ww$7HRkgO?C2Xh z_jkM7aY+5DoSIX8Ce!#x-hxx10@E)cnxrk3Qy8I$0N5%T>w`|qp+G>@wlM+#;P__2 z#+;#;C;&59M_O4Bw*b{{9|ed8JH$a4j`Xw^V4F?3-EEZG$+}dfAHm*gsny|3EL2d_ zFmeTn6I1n(HJZuuWxH;c_<60l4THUG8N%1qQ23R1FB@ZnSgRc_6*cG|>8YF^WR8#o zc<4Lw@Carjlw5nc*Hg|iS8bc_8EW4Ik8LyT5jEc5z?ntOvry!{n2f ztanDOX#Z3*xAFB_WhX^7KYfUe&V;gAdFA2RjRP@G%#w{V)nwf7e{F(hN5} zVieZ(35bUm zVoFw}54(V{f8n9-l@4~@J2lriA-lVK7AbIIdVKFLSdJ#$ZpGWn$4@_x!>8bg*FMm& ziNn0qIgFFnfNrNT$3=Kmed3hp!Jq>OR8O0=-WOFYh_==@34ug10zKJKNKNu=L-o+s z8|ZEc@oCU+4%3|$FwM|~ZZ``9~)eHEcO@A-qVu9B^y zoK%d~zu`vYR+!AoUhxI(I?PqOZlY=CvCnugg-i%O&gIj1-|54KDzDcDSbOrywVGcMFaxEK}r*F|84(>v|U0m{y{Ov5-GJ^J=e!0WSCHC4|m#{FMc63JH_Z@z0(ZE3Cw;iT(gWfSmZl8^468fQtC*2fXRnMWficad87cuf6>pnCZQ88z z28R1`hW9$FCzW%;p~ zl}sOAk+RN5BUU#hK!=tC%vyE<4!s{K>|iQ9&#pjzBv_YpOB48;bd$E;7+#7ez;Oys zrLX0kmv&9lOTk<~3#ZSj5ZeYpK8rAt#C2(OsK7-Th9jTvGhY@I86TyqezxxY zxJy5`<3s>;eoLT~IrSlF1s%O3WX!6*j}I)+u2xi){g54y(zgW+Ydz}MZfjT|1B-J( zmi(Z?6VnSrYUqu^zQAzjj>lPLO8IkYQ;OAjJ!W4rqbyT+iD3fL?#So2qkCIHPvRjM zQtn<+bD&WL?{gE9)vc2IlB#mG!u6-a)r>v|TGj*PI4C~9*mR^3$RMnBtwTsr$e*69 z#Cv0FHLa-2rI4DR(EweI7A8_xuL)|INg~}9FVc3N_(na}NXAmnjK=}JW=YJwAzU9d z&0#@mvX!PWgRL+3J95fIqf>!0>=6Masmn&(AM+!S1NZVlVgf&>Z~5pbRc3xL(#W_V zj!n%+_-JiS(uX64d&bf8ZGt56AIZpLG-9#ak_Ibutg=(pQ*)DV$O zJd8;_$!^y_EfqeiX!Q4u{l?U2N_bn>g3**`oh4(Z;c{DEXTTR6ZU#E@{c?aZc0y(Z z_Vwg(k|Lh2<7Mu(^-{@3$CTu<&p`GVMUKAg8HSzs4+phRarbZ`wQh-X4fjQe4y4aK zx<{*qpYxo`2ZHaD^U*2MY>u`Vuf&#Y_X#lY+6nq$tE7JL0#sF0*Go~zD|Z=Wp1Ua~ z2;H+aiyneHXGN2Esou=v8E4JeJgX_lnIQ~W2Or3!d%LW z~e%_^MKW>8dN=WNF1V4jr?2SX=KMXmf zo#ZwfmAW;WR?lX0q26fsYNtz9GTIHbwI?&08;%x6M)hOXtw-Sgi9`O%rr|0*uM^wCLrJ#Pq7s0th4r3 z`$K-`ye2FT@aw+Tngn~*F2^XBMyCTb*+74^98(BA&ASn+$^3@CFvsNm@uw1l>!4yj zxvMB@Pr;i)@8MnZt+AH@FluR5qZtp1XgnREk(57D-7SX$MZP`Y9O^;%T7la7TvU0= zjyN5O0~;85rTaIV9N<8gx7nqU=K3tT;LxE<>y$N1%h+C;U+J}4cCRa~7muwRJ1#Rh zOL}h!4p~}lTV2Hv(3H2a=|z+iR40NMuET-(at_DN($OB*-Rdx?37kdyHZE89dwmNJ zhxWSVZ_L(7+G!uGPh!cLdULUqNYB{~%|y?J;bI8AS5OS%eh z_Ibtaf}URgfk1k_qT1(W2O9&6qHlE0uo#}*V`p3tT)PZ@g;8Izs;;%aLY!%JI^Kpf z{&<$OzaL(ywpzBq#sW$4;{u746SQzh=cOsZ5>icwwa=3L><{~01Lf^b=PsQ-)|_0( z8*aFKn0;G;GSck^AAbaf2bbc)1kpxmIb6&|;o#BAD}8&1Lf>3kl$Wm_;cq<5YHbiG zFf1pGSrZ2$Pid=-R55;IIR}015ig*R!zI#%OJ!QYBYZ_@^7zAre}kLDTyEa&VL$as zPoD^C)h6iW8qyWwIynIM6C~5>GwROGb8{`;iq37TYI|dTf4m+sywSb1fpK5$jumez zr|`06^zpH%J5N_KKI}}|KH8BQlhMVPZT1S99-3qYVF4*N+3>qO;1)YUhI*%y$83=G zks`ErCp;^a=Kuw2O7SG{Yx0wPGUJt*=l;&vcSXMolsCV|lpH;$fE5|j_DA?<46#xN z6tKz5s(w~Od2cap8YIXZ4f()6V%`}lG%=ePo!Z;k4``~5udesRBwkO#7>V>dVd5XePjuey?w;N&|% z%!+FK*>fBofv=RfA=7uF4-ctJs!oci#k*~6pWaJ)C`#i>Nut!$)_T_+Zitu={l`l4 z1<(`>6phd8r%(tGq|P#C$(W{DY~)NCdbYkMj&B|%DwDPC^&x9lF*`o z-hzmxcXD%2-wlYzTSbI=@o+{lf2wQ$bnClh512{*R@b!ox!-Y#RI_Ik$|uq9snhDI z6~)mdNEW5_BPKk-9lTtUOccw$JfF@&2g34o@V6wtrXy39?}Kf=fVl_WZnK?s%0s?= z-iL0fn%CmfJc(+lqXnP10#miu%VY_8tHfOT*XF4RRg}z{@FQDqzMfVfnryE&5Vo_d zG?JQbQ|w%bR1r#!I@?u!rH0N@D(+0(#AV1Yqb(dJnEfGpTZhoJIicWO_QhD-D#x?3OYcq1tZ4 zST>Pd^;RF`Um;L2953Z!B(!kh&2;x*?MAE!=jO&(K7q$DE>q ze5)F>nfFhRmh@YOHpfbw^v_0ojA}=;>P}?0cWWnWZDgOfgI^N-1V&XI3wDuY>wyo0 zc{>*&jXCX|@xIva=TVxlU-FXawsJ2-&8!P2v+L)f?t~7GEEukLMbzk$)%AV8 zcJ@27?E{K;!SlZJw~~{MxAg{Uh9e$f@ar+ggyH3hny<_!EMZ$|lReXp3bA!&Y6>XN z6(1LGr_}sHV07K$ug^ON^C^fm92FX#E(CL>5JeV@)t$hE*@~N%zH^R@Srx{ePU=9WYwn-?LO!!deoBFuKhRb0UPJym| z4=mRb1ZNvo>vO9LdU7OPZ8=QHCeldYCCs+pVM49BRoC+u#(FVs4?o)BkUhn(Za5kn zP2e04=o`3|rJdDH4lC7$Tv1?qtZnskz1_s<_$7rFsl5+y*r(h~q${@dEUUL0%53R1 zAics>3SFL_*gp}wiX?9gAHhj*1==f&340ALUs<&r^&s`JMdK1Cv!p_s2m{^C2m~ZC zJlewTkY7js_)NG@Oct&D+x^jeU}c}r>^;k0@l7~AI?IYz+UERej;AD?L!WaQ2S;&D zBNVF*H^wftsCb_BUc*H80@zih^yhY56+j$vP{k~;##-t2vM(LC9HmtxZ;}AQ*Q$r) zY&Q2VkZi{-x+B(O7{Y7YGKlr< za#chttp){MVbnESgdQuH)uVrrSI13Mb|hg7M=pBtLw(zvP5Ou@F`FY(OCHx(v*V8B zaYHc7^ZiolXcaA+odpp3f;D0)qF{jO9+W+R;=Lr=`>@>v2R46gTp*m=Cq1k1WvUm! z*l&4BP@UJ6aB5{`Wv%`>Nq3jb^IOi?7=P@k7PSF_?rz~d14$=5t@JTS@1)6TfLj0- zmIROUNNM@KjdY0RHz2Tie8K=ST4`iPdh1KgY`UI15B8m3DXA8}W>|$+1pCfl_sAmc zt?XEg45%LAVoaKw{hg@o0pFO;`*veJR=Yj_FrtKH^`nD0L!k{u^tyZ=@Q1~1$tZ-F zURLCMa?fY`-B&h!?p?&!MB|q1#S|&r+LS;Fy8@CQn4&61@1}Yjp4yRJkk@!qA!Rrq zc023MD3Y)3NFtx(owqY!7^igvAhXQ3;==6Mx*LeeLCsxUs`-An(T@3Aud2fZ#?S@B ziyvkSQ&nbcWl(GD3rAs0rh*z^h~B~$J5*)JbBKc2}Aao z`Sy+>e+^JJ;}WP`n5761-Ub~z)1xv5j-;W{aAN4)_UZynwO}&r9CzACzu7t8IxBc( z9{!U7sjTu(z-Z()b(#?eu*j3gP$|HQ23OLS1cgFVDOA@rM~c(s%=omaQ6GzNPjDmZ zPr^;~PL8Rshs`qt-VVzLQj^-}zLAp1OV7aiO3MnMrU#YwpG5=aEXZ2p5M6+=9%L18 z8bou{ip9XF(Ou-E?v%bV3etCW&SkXbbiSA!BW+a}$}iS=Hv2Tv2I~59KP9CmPsKU0 zE_(nCqL+^+50+MqRX6U2FyS`zkgVF@>dw>8pU)?Lh^ip$F0W3aR?_2WENDtaesfl3 zhfrb%=B)Bziw}E!c+}~!cEX|goQY>0aa%yVwQN^;oZY8{aHxz)m(6L{F?oomB`ef4 zTRp4(a*SO0g^>s`w=e0cx*n3FFKHyrCYKgkx$3peir#u>cYaILgA}|z-Liy?=uVqp z_Zl{x@~DJ$Cs!l61Ndwl^t}Eu6q;yO+}dme7Gu(?C_K6e2ID#nbEp^k;I_iaBrj|6 zbMj^HB?w2c!a4V(?+z~D*SVUd+I<_Y-vVm$XMeiuF@KT~Wbb!T_%sV8mJpgTw!L)D z=7wu9Xx*8Su`bl>aGn#%-$hdqpK=LiT4rK|=ly1#F1O$YPkU3?=Rrj{3H=a$Z^ZKU zu3eS>dMpDB%O?2Aw}z1-3~plm0vx`+2z+G3W#j+_TlTtwB4I&|SEuRQ%w4?Ax8u+;wchKo+|0 zccy~)|1{I5^KnrO!6LPI^$a*++$GbFL;e4mWpQHKH=d~kbQ5BVlULX~FSpfpOEYL( zM}*e1mx|!1t@|0ab}G)5<2&@nTB;AgI=Vos{rhZ`Jbna>fQfDACH{NLEDOPpupA_Z zn0OR^D#>_x14(YT(VV=sqpc{d3lv(udiSYC<`>~3G?>R#RnkH3qr;v`J(tYRBu`j= zSuzlPCAW-9p!1(?6WTB4#)=07+%mgtR?#+y9u4BuK2lp@!Z0R+Ij;-0|G|9VuAMd= zPMVoSfol_Yq4I!0`uO{OwV8XcqjCJ3$#cyNFJTl2nODC%+o%{(u5l4)Az>S zT4G_Y8I|b-#KDFQ=SMjtS0s_!OS^|baW?D&mOkNSj4iY~O26FD;@+srU?UzcrdSWq zy}u4*UHE1a%Lf3#i^=}b{ka`yGew=Z(;P@w0zXu%tI!)q|lz zWpAfy<|}AQ(=4qCElBF+a+0d{@KjETSLjQK`_RbO$x6A~1 z#W(oB#m33wjuaE$id)kpTy4%Kw`SPe;c#%ZM~<3Rox{_30xk}Nk)*ahT5AtcCI@MJ zRAa`s-0raa=w7|stXCl2V~8*2L$9M_!>k=^rIITY8Zkk1&WAN&=vOVOFM;Q@G-V#Q z0srPU=I7Pgg}cSxOSznV`#50qF=s@wST>n4);R?M9lbryym8X%VRx6trt^2tcqL#` zdWepnO>uvEHX*D_{<(u$;2{7smL^=NCcLTxz<;I!3X^jpHbFFze?krkr*L8{Grp9#WBG1QGn0phU+J8DA)_Jc!b z9ZbLLI9KO`|Dt3mo6BOi0wcb8VB(yRHVgA`krod+-Fc7UOG@}Rm`X6bpb6PadT=e( zkK;CK4vIxg6bYY$AIJk9qywh*5w@#()MYu zvlqYq@b4&j4*ABqL%I$XF#!7dj<_i{M6;Z!MP<4 z2cdI07!sG;=Oeb8je;{4HCO2hq^n3pEh?x`~S zH|Kp_m%b>R1ma5Wr|ouYlH?eH^FB{s!=jV#g2IJ%BSE~Q^#QaPi?t5Wt*x%TKl)+) zW)KxnfD%Wy=vIc{G3wgNjn!og1?KTw5I85candgsfMR%ab|gxf4@8|nCQ3C?$JG~5 zGEO`D`4spF$e`EYVAeQE-CZc`C#s8Kgh}exk=C(&)?L+3_VRk9l_)EO68!h(Wv*H3 zgXzv_dcnN#spPUeuh+#CzPZGV!qZ{f8x7K7s8KmJ-!qTno{srvjJZTBHW+Z!Gjh2a z+M2Jg@4Zs+2Y(fb>=_^}XJ^%etknB=whP#m!9Ce#BQ`VFmyf5L!++jzM3%Qqe^^)L z`KS@FwM&t8d=ozO+-g{{1%LjqS7MiYXGA$O4kM6q`LP>Xh_4b1A+d!%$d_BJ}vb){@BJb3yh z4AIc=?$#w2aUyKZZGDa9BYL2`Q902S2m_x)B$w;6ebj0ubC>}!a{aprPKMp(O%tB) z>)MeH{Pja7wY3U4=N*p+8c79h)~uMhTg&F&smzB!h;&CEXur1{ZBn56JS?$hVmY#J z_Q`SHoO_fMH7xsZuCn9yaeY)pv}%1!WQhDE(=r`e7{+_}?+%u%=5;FE@%=Qk0({wH zK@gj6)-F3u-Il|v@vsoxyUBm~mV@UFlqZY%IsC(?4-45G75 zCLy-yy_MwylR?L~0@`!kw!-pn7dywF^J672ja-khBZ*C|{S#nJYUEE~Bs$zOCx6r{mO+dKFG(BpyAL<@swID- zXT@#2HiToMkinn=eeQaN0_`QC%ICL4Oo5ToBWm(mKQ1Ocx*7>ogu2^fyrVnr_WGWE z@WD*g7X3VW8?FuxUDHM@E#^O)?j1`vk=24nEkUPzV~E|MT@M)fNiGC&PQbgkqIs_d z?SbqLhrrpeqg|vv8dM?^m9N)GS&X;6EsKXy0M!SwGTFlW?ZGB)(S==g5lr1ZmPc>CoWk2xL6!m?&<(dV25 zI^#+tiN)y$$+Lp8a5nMj8tqzmlX(l+()Lm9y$^*mF@&}}E|1pzDjvp9I=nt=z1AXa zDrfmA>Q(RxRlPlQ=+cQW*n2~YZvIWhgScvK!CTiH!-{cnl9j1qbH#q%0_-=s>=10Y z^$x+lR~hVXsl4ajYYAOv5jD_Z7wp*Ugie?f^EWl}#L^q$RU_;@QNBekFQHfV`q&y* ztSl(+SJ}E{3+Qx>&se7~j3N8J{bVWb+KA^xx}E_uoGzwg+*0GyTRm8wy8dx^fN0mg z^~B-gC_P5WAflglixJ5aO!RX_vvI_db732b&Slz%NFH_}L`{!_w^^srerLjFj!L}SP zW5k^#s0c_NC7-om!)~BT>^GneV&~ha1ZU4H-}3ezAZGIB&K%?Oq;T+4Zpje z+dXR~eiAErx#r~sA)@0;Aot1MZ;miRq7UP}wq?%&jI1RPu&n1PtHe6n_8L<0?;(`* zH6J%~pf+{z=s?xa52?L0yEn|>oZ|Ukg8)y9XF&9FpU~hc7{<10|EljWs-a8o!6R=r z;-Z+T%)#>1RjYIMLVP>q$Ss*qJM$Q&@}EsOq3IUo-g z^Af-{!k*le2m@=XfD9Z}S5J(on4}V4m&wj<^QV6+juk&1)LxlCDD<8fFf2P^2Wltg zm`Exc@`~Oqe#d|M)z&|C(2vMxcXq+SN-8waonXSHgm13$Jn+c`*{)EbX1i%?>0wa= z_!%VcVCMU*Lyf^bK`|vxg9t=ce3KyxzOtW8U*X4p>MOD3$~uw-(v+mPe02nrlB_c6i4uWn|xrx`FR-ChASM>3@@!ep-gi8k|r%|l0{0j5v zuRt92-N|*DJt#q!wBu=*0s@p%o9b9_>#Z|+c6G0sP7DKd%W@?ZkZo@K2YH>WqP?%G zX-5*`OT)$uc9cMwh~s8D@EV{8m^wPMgOs1qv&R2&>C)o7K<-1TR^95yIM$S-D_IO` z^0kjv@*HZUJt~lUqgyTdNS8tadiD`~Kf`rDzB^oXQ97le0t2fa{fHA3U_0H3E_nd{ zq+dKX=IEyeoOS-NP0QJrjLyNaJs#gK#n+nh;C5Tml>sy^$M`-{yl_q%BUR@sjWI?{ zD+4ya`kKpbKpCb9ZfBl0^Rqo5nY}itwWV`!HEue-K7jF#4W$zvoefg3NNkmM{-kQAX)1*BUSt3iA<*w{EebE7R}^V9OFGQn4G_ zyB*mN>^yF4e#~P!>hi2|MP4 z9*DS|UJbp;6NUa@k(Klrp1GkK4;HfC_Ir$hJjh2`Y6E@WVIi6Zr|a7>0cs1;q1od* zE+6!W*CuGK5hOGtDb{{r`jIrJC%$lXpB8QmwJ zwU;t}?CeLsd%RXHl!Tvb5)P)!Tu5yvT+wOHo0fQ-pbf}eDCdc`s9MCDF;Y~7N}n*< zGy}>CIP1;whn%-QrijWodVbR=yq{?g+NVdzg>{v?Hc_EE*nCCtpNkK zgmf>)fsJPwxluxvfjug^KKQ{y-bw^r8?ngekz$3_NQJZTv8+$DJ05y1sKE^KFe&|1 zUmgmMmA7$qs+FN)_v4gc&6hY_PCiUCC{})=3nUZZ#j?Udf3H@@aVj%sGh;42@|k;N z;iMptlrB5AyEa#E%i6RGfcmGpoy`29^DYqu*wVmXRG7y-0xRL{YUbkW3l?~NKfdSe@M3YYs9x{x9Jh3eA*(xi zci&5ssV6D8q)bxk@409+&QMGu;Ews&Kt?V_Gxat^@9$b*R39x-ZDpY zn(v92Jl0aS=|KE7I|2+b?#=Y~gZ{$GR=4+zr^Z+ROeeQN=r*=6-#gSNpV22ZRAlp- zje^Z#=q&9#UQm`vg~?bHB(_AozZb=Br0`^25A%9<%H6Ql0}~@avdFZLM{p;ZpDMS7wL;?YYF@ zHeAJjvBb^(IKFJ-^QJc^_!N_5v|AudFjcd@t^@nD-Y$Am9Qw-EHYM4NwF>w3EYI5@w~1w6M)3_u23h=EJ*lY!kfi4d)*`E-m} z>#W~zUg&$TGi5%?SM4y$)xYc~jL^{Ylcoy&yr<%KtL-gh_3(s1opmL} zEQh2-R}vidh{EJmWfGOiC+KgU(+k+xz`LVMzxIdFMk*WuL*i7nhDb5>Sg?;YrBT@d zItyHI_5C=V!h2pnyb;er6QGy;u@vOaV*nLjQN{@Kv9m#YJG^MCaj?6q183oKT|v8n z*l|w!C&pR&Vr@gnRA}hJ)OQSBqtb2e#cicxI?jUVNWg+6p6@DVZx1E<{(uKrF8dPt zDp{0yTtkiV(iqlFT%Yw>wfl8BozKV;jyE?FZ?B46IQo!q=L0*%1cy7vKSQ} zFf)XRW`=aL7;pByiU}JS^aRa&b~R}`@O4OLz$9rR5u~EkpKHA4hF$u|_Qc%r107vU z5@FPC9~pPPfcH~WiVx|sLyt6Yj?|RXxsz%mh0}35X1)wS3eS2c~=k1$!Ws5ndYhq$qZ=o)Ejf7Q}FOJKVUiPQ@$0Qu;71WQVd9bI?5(Xo^F5qRx2?o@e3#ty z^?SYU7IT&nWH=2NoS=3e2kg{G>E1hKV)>&uX`Q7q807_3A3X;k@3qhVJsAA)WazD# zIjJFDFPrBcl8}=|FrssS?L(5i%2$RP#UuO&#N&GNQGB_~=vTYbg7ge!P?JNntJMX` zikTcgF{%_gwnXMzQ&Jvp>tx=kqIf@}*gPyxGb1sMcGll_oW{4ewk01YD4LJK7;UH7 zzocvUjNJN;b4@G0Rh508<|V{+{`_3=mx%^M%Bo#2xwV&K2Ooxgi3${&tmljc!b%2P z?s~lw0I}RS%EyF0$3|VgcE?T1u6j4UD1_0rxq0(&<>nt!BVvtOefZaoC^=VyP7pCF)SJ!Z+T zOft)NO}SGFfjV#eHlFya6T=kEX?)6({HkAR_^kTHJ0c^LK{$lb%ry-=!l4JP6d^$r zfxFYh^sIR%L&x13wKf@7nwPgcJ6n$vaT>cWB_YofDbZYw>97ypSoQTseK>?V?Yl_n zbi0{em4-lD+SZ8plY&}oy3L*Aje{3Kb;{B}!qd1<-h$ZyIzR1toxn*ShR^*XwS|)& zR#km{R${mK=G!;~QJt1=k|z{Vl)E&z zL8GKoWabLB&{&6twaRxNrlQtpcAC#UNV8)3+CwFAosh}~;2g!w&vn|d_oa}`o0D{i z4d9Hid5>b4CL_S}m|%rW z<-ydjwA*X#a&-4O1fQ37Zx8S1j)TC-o=w%fcND@fl<~G5=In*6tvP2$70=iBam_Ie ztqaY(*K%iXG`!XBUlwiNVrF+@!guNP1(4xP1GKI2+P)D|ZP);Gy;T=H=M7Dsnw@qF zIyd&I`Gq=Mipk?tTv^_6emq_aG1#+6x{vv>Nc8<<&WoJe`M7T<^lyZAOX`n7O+S}R zuaDjy@L6npFscbwwL8-_W50NQ5455z;K2^V#R_iA8g1JTGmJQA8Pc8ojJzyw!pnY~ z45C~!4}V->QRK;KIu+~ZSQQR8G0|~<@`aRyD6!f}*l0?H);haod--@#ei;%5#r0Tz zAPy;H!E@i;nfmTC+KvxPO1mi^bozzWYd`d_&D#fJ^>f{fT%>k0a~gbibJva(I#9O| zRIQMqE9S`;s~kLsx$53LS2FWHSMA}9Kqn52&WU%t?U@|nD!yd;){bww_lZyfHnFV0|?(rH7&Z@&aVS42)G6dtz`j>o4jrIi|e^34ImXj}MN-h5uDI)4FvO9sd1 z&^&TZJ9g$4X}y|Yw!`*(!(gH$33@0kZ;gmeVm{CYnZ(#NhR*|2{0J??O$m4HfyOVR)*~;YxoVUEOvpw2hUhE z67mFh@+YRnH8HrU@IH1Q3$!Zs3Dh`&;9<9L(imVkLzqJaPx-!j`~C_~v50W#^*UG? z@Y~>2=DawkioWYC+7BWTldGyU_>{wfZR^D&f}?%gauXZzzqp@M1qefl%xKM z8Is$+q@}K|g;Ekvf;tNuG24u8-hxjDBMNMqr}xQ-!UHYj+=%Qm?cO7w^qy~L|3N}R zkhe|lVQRP(z2mNd-z|OgJilBB%n5M-vF-|4K5b79r9=9;JBfQ0u{`CRJ0FlA1b5FL z!6LNXFz;6%OMjJq+&5XaTNLH(A$oLKt=F|2uI#YtYHYLE6`2BYqrox>B*o;;E50~C zB?|N=Lvc@d$g{J@w{#1W2RGiM+>Yq=ie2|GL;zxpT zQ`nj~F1L*#4(fx7?l!0eHz23?&Mu>s7M||bL5KVnbXuVy5Q=M=T4*9 z+nj6?eK2KYn zT+?*I&0@Qc-pJ3L5)LZT`4%dm*^)RL4PeV}utxy^y?MP3%!zjM&8fgNbssMAeLEcbuSE^0v3P!jpyP}(rWX}XaQ*zs zEBojE)!t>gdtpZwkxE5tM94)LPEbVPhcFkPJ_nAca&E-4r3)7RiVo-JWI?Whrn6{sm-c7`de&<~NAxF@Wfb?#!-c z?}}Z0*N?f1O*icAOiBsvt9a_6W5yWM30dElGj5+*Tw#jHHR({htY%-cTgocdg2~QPF19oR zk#2dEMt0;I8E#O`Jiqu}Iv&KRZ%|OM-_bJ%dRfNCYWBPQ9%zqRQHW@5AHJ^v`w>h2z`&=nT1f zZq8q`Iq72P_pzU_za&Pl{nW<#bV>Iu2$0AOFl$pepKodP>HTA)&8_F2Ugt0pvKFOB zN8W`;aYa!KA$(vM-xnq1Hnkj4EWf!|O!^jtG@3$MKAjK8X$%$oCI!8*FhX-JsK<-@ zWI5?dPZz1xQ}iKc`-L+mhBVdL)h$1Z+BodT_#0ln z!|PAJBfmcU3ok#5;>VEwf&F#kU&8B8zWdMq!q>k(`B@tUeekQBe}Z>E`R+8m^ul(e@{{nCSX}tda|3m*rzxs*r$+v&y z>kVFh=i5(z{0Y8&TmR|?y!|J)?0@T)%WvKCN56H;@LRY1`@eO|fBajw{O5mm%hx0F zv)}yc-~KYb@{{krewVLD^Dn;q*T4Ss$NT(+N9?cQD?j<}pZOntb%+1)AO36q*RLMw zuh0M9uWtPIbsv1MKleEQRowEM$N4`b{>8uln}79x|N38j-RCcT`NJ{V43Wpa1*^@%tZE@RS?hi{e37)a~JWfS38<;9ic- za%t-U!qf8>i^q*-ED`u5oA3Y0KQq6_z~jj{s`B^0etP_z`|ZiYXq1FtHbli&G{N}c=kEj)vUhAL!lwPel;m0ri?cdeD`^(?{*MI31{7=TWZ~y$S zAMro`jQYCi>-qG*{Q7Hu_U?Co4@b>!o>gDBe?6!E`v32s`TpDQ?f(38a{zCu!6qu}^ia3~l5g<{J1D^Yfqx{2Jw0_vfRsD;vBcp!hVekvg zwPWZj{>874P8^)f&+13wn|h?|=LDSATq*|1O@$Uyt|Kdp!@^x~r4^r+>@( zSATkLut5UA@|EJ-RSgct_S-k-m;dOO|H9V~^mqQzU;E{MW4qoTH{bmSf9?B!?;j5T z?;q>`nD_@5)B4}PzWmGo`H!VPG5>V<$M%n({^{^1zx)&L#}Dma{vSWS|J7%I=fC?~ zzx)S3{L#Pl%m3}){%^mY%wMOvzw+%5@b;g=>)-sw;O*B*>~DViH}Up&fBfixw}1V| zkMMZ^`XhYs#ULa=mJ1JVs`Z$W!7usHL{)8Q~9>- zk6PX2Yno#U+wNC2OV{^V$Q|W<@X#GCty*SpTu~v5N#@aN^Z$|eF3par>z3XLyXUq$ z?l{VA!hryZi#sk57Xbn!fk3EJ!CeRh5_k9;^>f|vn0ud7RgNgzJ%=66M(!QC){0zf zrY3yf`;PHE6PKUR7IsK(JDoXD+9G;F`qP}#|I)b?4MDt}35WY8A#2Mamt2+Sr$g`}?JA4kR{VAeJ2yD_2 z<}CN{41rbK(fM|Wj6go-F7^BBpF`V8d0|mQZ5&A1G=yGJp^^qoOKybk4&@!v_P9$& z0AgQbr)S&-Umsk(!Ig3|iq2&h_*=B!v1joc$zZPX1e(w}r)hSh~nW zt%dt-c?h42A2W*EHS{4nU{UsH>F1#mOTj5w?i=@4a1%ZV*O!#@SxT^^Y@O{oy^`)D0dppzH-Vkg!x~2CdxPV}M8c z4om+qYoH3e+Svt!)K2=sAvuz-=m9p#!!BWlMARg(caF4PJs+x|{ki(__(K^@WiaMZ z*V+YBVMS`S^G>=L3PvHyY||*aIWi4-@!PsINu^pmcq4E6RmzBuS@ajU!0g9A!ETaY zfBtsKE!U&d``VqE&o}$aj4mw+tejkWWMj1FPrDupP6|IQ`vr}n-v16y-%d8n!$w3P zRXIA;k-)tI-i4*D_gFb21}-8s=#NgEKdj)#)1m?Iv;2(lB?2~+kZSBOM>hJ}!!I4{ zvO5XtxHp|4841Rm8dB*I25WmM7UmQy4bnO(QL>RjGm4*THsVtmt=A*}88VQ{$q0}POdaEc^V}x z(vQ^BF5kZE;Pk_8Y36}yKmO(-x&o0{ucbMp&??MjQ9TB9%u%MY4P@ydW zHt6{HSp7oG6NaOQ05^92+V)Agzl__;q(VuZ25PP&D929RMYCGmgWcolm~AbpeLDxU zfl0WW@Yv8$>O9^*yBnV_{chLm`pW@heoG zF1obufcn@*9>NEQe4|y8C`AA00U1_7I>i;>>g~Zu?d6&he)y z0@upC09s7r!*oh$0$+a`(6LA0&_F1DZ{^EcE9Q_)#j$^=hDpWflDjr$@7;S$lEQd^ zIXv~3=OLBojI)3Zq?-ZN?89AK;Sb$|2u^X(Kia4&xQBK{4 zDc8R`GLOcAes789<7pq~+~ecAWv1FcVSnh|z#(^hC}6*~r$Rp;k*IyfPUen=>P@r3GL=D^(ybn!h(F0-?*c1u)c7hkypM4)orsHM3qGwA~g9u(J#XiTzinX}VqN(e3Wu+OcoFSJ+U(-RC?XN1^~qVJC4H1chR5+gF6i{tHPOCevr5L~~n@2~sR@ro6JeW;*x?)rmr4rTXZ z+@eaQj$e=jUEo>Pqjt3(zuL_JcYKkK0nX^{vM;W&?5yGLq&R)6>@lxHaNf){hG>uG z@r(V1e^dn*BZEgkAQh+9+Y=mTi0o39Gv?_DL)-5x;0}@~#@y|h-4d7bMw`Zoe{Om? zjlq|L-ur~!)#Vm)Jy`QD`}BSme69PRK61nE0Qcw0@XhgX*!-f2(mc0dC0(NMlqmgF z559f)zQq(u<(O%jcLQ#%)mRFD)75b3R8`eNcApU&um z#n+Nch}u59+UFXOdz*YxvM|!sG10`s{MNaao^%RMSH`iJAL9TKe($c`kpB)$L^VBG zy+nJwA+XAH4_n*qB>JZ16GwsRa~i!DeS>=FhaTdOx<1?22QFbrdwI3xpCGO5*y4j{ zy}+&R=fQtXWSBlVSQD~sXp?R+!DtGQ!aY1SAP66DAM5FI@R|lLQ_+L1l8=;&QQ^fd zb|UkF^{pe$kZ}@iQGCiC6<(+Y2~|{oWDK?wkgQnXt2$i{b@sOIU$x_VCIFaz57{>4 zvuEJ!zy2?htPvgnsDHQS&H2u4P^NRp+`mi}kqLXO!>FB_7u1e6v5!v3zTpc zI5Hr2*LhH-kkxbu+On743dllB5>(=DdW2>@y}XuqX5FY#%yD0#sopyab8*G9m0W*w z&Y^C{vpHX^hKLXMCf1-#R&Y3iw#r%azT3Xz!4_S}R8C$E>wMwtk`dFc zv`yRT=e_xT3lMu9J?qGQEIwa>t(1E|O}_|s&EF3^qrP{3JbtGJgw=AJ)KKyT=9KCu z1RpAJt~yl~GM<{I6-Wk)Ek*j%=Q$YAD|VFCV5 zeRdE3V+C?nC&pk{fe9{8_rnB4G?4PFBKY>*`OR6~%GDAW)t8hj7=?wG$BHl4<@E=m zyx%UHXQTMk z(vf}*F=NeDFA&jR1HBVeZaOzR25ZCFMN}{Whig6Avr8vggRsSyXVaa(+kdcJI!0Z#6^WG&>eJmBMYPCVIt zuR*@|iA3HiSNPhKDY5%zuicAOUX0B;V%OF_ow+gX4C1aio}I&YfJAOo-m+>uV6JwY zm%5|czWzQc0tA8HCaTp+46z4DR8f0$qJ?^Y-zCkHa>YV-0bnLbBaF*B=f3Z2o4@_r z=Q(^PbG6+95+vHjjx{@sr$X0ji$u7Z$cWj0cs2<}riy39!DNb&MxaN1z2?cHABbl2 zUoPEfT9d5XPB1Q(;R0fH(4}N~w2S*#*{Hq~>uybpCv4`gmQ0H3RGbt^4T0CQxMvHw zk;e0$cE2J)FxRDQg9FOnipP^scOt55m%`HW4{CC)D^q0pYcdLe^yyz0Ivh>@-DMCY4BYm-p=DZM$PR5D4M#3X7xCKqa6pXkj*r` zn#z`!gF1qw7>g_;+Q-aU=M94rj480w(V-`r@n1 z)g=(cMSxUEr>~%rtWF#HF5%rWBo~D|pPY`G>6!XY=l#{WHPR|RtP8o*w9c-O!LN<4 z>yW*M(SYZveRZY+32@FA$cH!L@+x(r8vNF_)Xz)2KOd(qQs=t>S%KMddmOai?p4l9 z7A+A5;f!?`4u>skPnnsR7RYvuuurIPXeD$|D|I=_`my|aiY(cvvH>Y;S+p!yx7a!t zidkR!(2(%I6jVLp6lhjcPzycAI!$X3J&JcAor^M z4D$FrFfP4w@S;Vmq&RN({7j#VccskDc?!SN6?>WNe0VOGQkg&ZWSWMb{58VxdJ>8z zxs#TTS0;7|TTU${O%$fyaMg}D3B2Sc~sX1NY&*{h(ruO zk%c#egL-;L>h9-k6$k9CFamwVL}BYPi-n~I%pYEOK=+%gso@S>xp>8v{1uu-b!&V}1+EB=VR1-sbcNFA_Yt(XtPq$~|q&MsNI=`384jD@&{}r+u!rj)45&d0d$F z#`D~^SX?rz5_lgM6~BQ?ob9~teZ1n6Z_Mp9?B}mzi%|=23@5%fSrZDq zsW^QN^<)S>Z+>w`?Eu{7uUWSteDOuEd>Ed410LQ6kgGD>7Uue{4}~?+C_=+%iZsbR zRKWx{EH=FI1gMCj=~>ue&-b%-xdrd9YG!jYgzTJwpeCRw z3yBTH=u>cv$eYl&$&QR&_(@zX>-WAIE-r|IiOIi9Gvkg=B)8I3!uD3|C@C^2<}jbd zwyBHqSY5M#np$6e@s++aV{aMj!}Iwxn&Tz{4|-8sBkdkCpUoJTz$gO|1~5Z(d*I{;HNippW*=t z3Zd^hcHeA`?VvFi3duewF}wj=JCN2%q@@J3^-Yu3w4`+~q455ok!!v=o%K-0V3?9G z8U22DamPPCx(6YkS|>~)p{fr!Ak2x?Y2zkX2Cr{BC=ssDlNnu@)fcX>vK-WayMD#w zfPC1tqwea)v{Lgysn2M666_~EHxu7}S{((&CX>1cV7vqP zjb^Lh;?2Pa6)u-Gg`mVr#Ba|R9#pK}%vc!8V5-B7Nu}^wSh{piOJsof=-Zk%j(9Y8 zuVl5H-<XJDLze91I3wN9J(*fraql zV=m0E=oqI=p)t2m7*0Vv^TMs2=(})w{Ccu*e>d>Xno(`~l5w=RJ*(%ey%aC;_BrJT z`N`+FOd8t4pPv;nkvy)L#7}y>&)}|CBI8Ut>@qvX7Fx95gGYgwiE}_r2Uz`2l=x2N z?yFK6>A;Af*g2xv#G~)u;DAUzd0db@jf>MBVu) z&}$#;P3^%>(7vzk19KaJ<}dU*zzayvF`~~1koD2Nd@GbzcMr*rLVU*~VMnN7OxM;n zj=@RTeab3N2;nv|EX&*;e26T)lRzs{XmdGK??21p^}#W@P`|9hJJ=JTeUe`~c+8z6 zb*T4V+3bDU1)O|AX>tgIGyD4d8qpOe>-Mqk*K0>HFyj?Rr%^8xkMp*D1Z3v%$=oXZ zu$=f}WRL+d6}NT|t@@DPLa4RxPgTFv#Y0Hy*WP}y;1W9+Cx+ObjXQ^qQ}haf2+SuS zg9M&*VvuA2Vx&fJftY%WjGI)mFaMVQl;hd7FJwSAXcpV*U*?d8pOJL1 zYe>cmUw>Z^V=N*BZUgyX0VQ#EcYN9E$F9Ri98oT+lZ{ZA>dX<{uCzX#$6wiogbhF< zK3(>#q?B7k#4S$ln;}iBelbI!ss_F@KN9D4kBVisQ+mv-ZENS(<6>*E3#`QkN5Fp6 zw2U8whCn2#i~P^Zvdja?eBX46YDE?LbT zCVMTK+3Ien#AcvkF%1$Q(om7M^B#x-aW}_ z2+NIcv9DKk)}D8w$lrFi?Voq3V*}7edGQU50|D@4qacb;D1pr7)+UDRWW*Rs{i+Lj z++A;-mko`VMVZnk=ZiYu^bUlXa5uNX7~Gc0c0*uKj_0J7bdpSGt9Q-(LKei zD09Mgw?R_eu>?-QuP$M$HXE7zK2nU5-qQ=73e4V0n}xH2qA~WJM6{zh*1u`V&eMUX z`O=$RW_k_&WE{4qCIu!4y5R7=E(IO5S3HAKkxrfuQP`KnlaKWeBQw3|9_gc6Y|V`B z^i0&DEe(Hl-!BStTDS8aj(p1oPi#KG|M7HKWmI8*%c8hvsJ}%cqpS`%{&c)kpPnz9E@+pF-d1Np#21U?O`{TVE}>x8qI~?Nq5YkhJD6ee(R|WS&_5>lK=4v zYFSJw!ETv5rY1QsS+SV=4R+SXJ4CVT*gezBir`JEXxpKENha^hmoC>IDy zANmrw3tX|7omPpj6&#pJ3Qyw5<}rYA0m;30VZto0w`+$+wteoz97>?J zUk=B`5vJ5>(<)-mV<7--p8QmqXDLu>9?-&B#sm0tE7dBGVVj%ZO^*{Pz$eVqx{cHk z@p*(d8p(JxY^L&S-M)QKalp&a*T-OP&o_0&3|su|+Ge}tOGCT)%G|a7}J5&sKIO_y^=6n){yWpC>?~-=; z{l$<6{!~0EmM$8<2Z6FzPIz6qayMjkNPyclIS3ok&z2Om`vXmE!u*PKD(EflL7@kY zu3D;Lkr_1?youC!MU-T&d5*Yh0 z`>O=se|rQob?=UwYTNj;*7y|I0CMGtchI8`^J6n7Je0e3-b;M>=!G|lJ!&|Ku`L`U zCG|epQTkRwdZV2@7vsNg?NF*yv7Ed~Ti&?Q7V{~K_&o+HhtuIWyczQ^O3qEsxOYA7 z9*!;eK1%M4zZ&=cAG?4c~S%Orc& zJ464t#8Z(xj$LxuIG9|nwI-h?#Jo$e3Jr2y3wgTg5uMtYD5GYay@z^BSnlY*Y zS`0NN01g(t5yIdVRjY5F}*UOOVQy*30LDc7T&jRSqxw$B>i$-BT>QGl+X?cTpvC2{@zLA zt7kRV`+@UbTPSK*a?OAiiO$kiBpM9##HGh=Uj#Udg!j3(Q z6}J2?aMOF!qA|CGt$UyCDQZYI_*U$ERa+4vvJLYT0-ONtlzOM9TxL01)a!Hfhv%bl z-I&gRxt9gfdmp&#u^7-;c`569Vj!a&>^L}~4M*w2UoL)1w401W_0G?%njsAFHc;Q-5S$-Jn?>0*8GD7jUgAl<4&zA6og=!xG{scN-hOIFP z7`S11gmHHZ*kzh$I)QnyHs<(EPHFvoe?va#lz7F<@jZM`{53X&;+rt!@E9Pp+Xu{KVF7d-Iq4(2s)fNITucML-jt&`$J6 z2OC-hHAT0_ZLB#8@47=2sM?XTSY_F6-7VS~ajU)l z{}4r5uRx2x>RJfbC+KCe7$0_GeX?l{_k2hJ<8{8Zju9mvda?$*BH{yQA2O5?U*osK z@#WJbCoq4?yO2%uHPJJY{=`Xf4+PvQ6E}cG7emBRz z40@Hd&NEe5{JE;1nl6q%KO=&&={{pI0Ur7$--odXf444(I)53+KB)EKTqOFDt}j^6Oe1j@Z z+vYVn*WUeOU-v9uqH%-m>mx}Qau`raB+qEd$G#l6%9n9;-;f7edSz|brbvhd>ZA6n z)VUBV06AwMpYTm`>4g=?m-C%$QM?X)`Jg+^4c^7$cGy#=&l>^;_3CCBbSp=x+m<)B ztQgy+t09*MxV*#Sh$^iZYb@rX(%I>{5IQ6{*B^2FT_3@HNL$(Ml_%zB$9p zv*Pb8p3j_tt91JEftzNM`Y!E~xVjGL#%b~w-y8LO*s0h)oa{Uv1OLq7vJQaYv$+2_ ziGNH?FDp4L>+2)w(Xs!ML|&_4Ra!pN+q6+)ZHkVv=^9e$%L3=lGE@YM5XetQ)YxEGh{1OdxC7-Z6gU-%JF23(AO0+FwW z$M8FkA`_Wu2y=OP)K153ZYb^r%Hfg!*mikEN-U4KpNygogs-m~dd7NyUFJS6k464? zHp`F^@}oZB5&HGKtHW>`_3g-qo?B=BwsRjHl@azljZXzZ#b4u6e6Os!DU}g8j3q(o(3;a~UpLY?TcY%y}Q+K$Id`4aFd$#-WQgl#^_|@NrHYqr4 zq(0kes{wCW7*1g{G~T*0Q8%Jc^b7}4dbHeV<4|s&E-};u#wp%Xf#24V-fPMEnQOg1 z9oM(>BkYyw67l(ov3bo#YWOG=8`wh|N%>RyLlI_IziE8)uD4+6r}Q4kf_hlk#F7Hn z!?z#i1mi&@4#ES{&!A6P>pj>ps5VvE~{0zRHHftY?WMpl6q6jR-xgt}s2Q zWOjGLe<<*fO7=;j#C>?mfijk_2Jm3Rh;OHNyg6D`V`Pq-BuOdqLjZ`YS6|flFH118 zGmrJ@?mK5T1@`XvvNY>G^r!S3Q+0eQuNprD7=%$`h&Gt*I?3bMTJe2Mt>c#7+~XT) z>$Yot@2x#PqLNwnTmrZQ6~UsdekEpq#q(XM-skO2KPtIfFKig?#_;g){KXUSacKgj zBK3EUoZ-;)``)2+sqD9t(8cVD1CMt5z>Ogw@bTt|58>M_YF0b_Xl*v~p~Q2s<=NOB zSFWq}OlUr?A5(aKf2)(4LVdo>fiTPmsMJHB<&S9e`UKYYW+&iv>KqE7%eXTd#?$w5 z$J{8Xd1-An(9#og=yE9GiH0!k#qa^@ZMyE=?@YD%Op3hPN@^0?mFa$juDkxW|qeIJUw-;dTglAIZ<(NX7)np7~!_7;MNA!Bg3CGL8^%!>KC>Fx}K zfi4!-_iRKAdFn)_aZHZTW(lcwYEhp1p2|EGh)_BNlY9r}ubjy|6`5NG<@E)?t~Qge zADql(d`+Zl?|+UX?S+_1_eTyWf0bsbZft+(HX_Z2hFi}(X72C>amG9dfuPffkpZ6B zwG3IgKo&T_wQp7O3+Sl}MsdFrPNtE-lvHa8p`4@Bd@IG<2`Kx|(h|+Oe^7Yt%%**h zA%V@aZAIYw^Lu4+u+Q)s0&n2>!QI=B($|?un#ZF_&l6R8H-^!1OXdYlUGCb!p(D#a zm0y9nk(p;dGTP@4m$Y4G>KL-2akro4?!*?0mSsgSpOT_DR>T3rQSwj^lsgq%x>96U zmK=icV&Eilz$!2zo}&IVb6PH)bN!<6LQ~BwUh=a691oc?{Iu^%4pHO6oGUvsA5&5! z#Q7Cy`SSBz0%*NoD84wyWkaYFdIumjBG&znx82w~{+GswXZ!3T$PmVHGblI}NFWg0 z=KVajNNzDe-cTLYaFx-6eS6pWZ=||h8p6{)f7<3kY|QCQvD}LlG<=pwRle;w&IxmR z!6jpQ2%~yI-xwai>Ku=NuYRzxN0OB}+6}?)L56tv7Y=|rvY9bHe3Z}YjhE-0DAdgW zY0sUb*8(0Jw$Hc9XW$Z7ixul1NW9RIvK-_$9? zkkKY|YgcCsm=>IunBdiAx}55za~A4WeP)z--wqw~&z<=`N2!PuwpE8FUYphdNyaCN z#xwplKt!cSTsaVRJHr$GYW-t|E`)L)_B(M9*VoD?s+Cvs{49+QSI<{Hpg9VVt-hHz zC3saJ2b<+>pN6g0&dtF3?@zFXuJ3Hqdh&r$q_C1e50%ZrPn3n!Jr185sXjUHa#n|;mZqS~ZL9#(6LyoJz5{(W(&5N{^c)rioURU~vc!0-^kcUy-vA5J_CtCV_wc}2J zkiTn5FXU@4BK;um3Mc_lKh_r(O=@X54VV4in%jG-Dl0A#PbWaDIC$!gwvQ=M>@Fs6 z#Yb+YUn!uk`MJbQhMH(9WzHP4&uVsmO|FHYgY_ZC{VP%2&=S#c#!=0lI}vN5y=aD6 zpC#p_?oOG;^efnnd0Bv^)18I<=s&58U>=Mt1@Jpx2=z-m=(87Dj6?YZ@T?ae5%nLk zIv1i;zQwvHp0>1>?5M3huw(e7k-y(CF(5v!WOf;DNV3febdIfrgYXP=l^vo_Mj4i( zFvlcp&xgA&=ua%JkUVWI&d|S?v$Sf?IZ!{|yd*ad8ejG-0PQTCJb*_HC76PC8YPFm3ytxan zwIO|-u8iKxS(7`Pe47inoz8Wxh$VZ8?@E}ljecapZ1{BLy(IUWnVwl&!gOn0Dg>#X z_IZy5Y<8ev>kP(6a1%EqDo)$(!JGr|Xe-Fa4oBRBLC@??n3`JO&pXQVbQtx^mjzW+ z7HK$!nM=Kmho(+v6Qh+V*Ex?Eep1GGxoh(6ot~b9EVkXg8TCKRSv*7hal} z9(3_>ywO=^lj;9c^rfh(f9!q{~&;Q&bS@*5S5dWwVX_=p8@%V6*!?IEn zsBy83OyDW4{K2k&7pvr5>LW{)KqBV^ru+A`nANdLoN8T0%&Q<7etjHw_}h)PFKNUJ zhw&+{a-K$q# z*x<#lNp8)OSSC1n%e_2TsJ7c{UXDgJzQIYP&|KBI((q`!IRa^urn?ln#B8dv+?$2#KQ@Ec!kour0yo^XjLnD}hu?U473f zp&V(aZ2v%lXrSZm^F#m5{z)(SVSR9y@`exZJrz??6Q^uhSS@2sC#C0cjz752-{PDx zDc6hDjpE4H(;IgdfpS7{@N>P1>l#j*Z%*F9gM_84o1)vDv`;kmUWMyd(F7y<@6EW zFd5e{XRMu|xQz=#%P2X_zD*kM;ccvU=nlSOxkr2OzlUG^Y_|c{!BFyUKyN-c1u?-M zv_S0hy`i5B%%$8*2RPUHDMkp6z;_YSuRHA=SQ;G8w%kR^1;d)~yTA84Rr-GXqw)?- zaaQ$R@mR7%Y-(wrN)4bH#&-~!$;`#}VzqK`PxY4Bs&>Xz=~J?nFOKKWK3>)dv=l(17bB?mKTcMocLxI5tFh}EeL`MQ!|aJn76$A&99R9B6sC|Ju)Fs6i- z@d_eCL)9|9A!4xR%~jY-^WRwy)uq#1qL(g?Z-yEwyZ79Ef4zE^!>`1d1XAvzoUZ{6 z9C>thAl81v&sxUkwISyu5ohnBb1G|OS1l8@v&tjxxHcEymdi?V@tH0~R?0k2T$VFh z>5>_QiW7$4vm{4ex6AA5ZV%4ox{Do7slQ)KZY0MHiUm5Tp_D@j=t4C|>REK;vh}M+ z6&#V&18eZofD!&Rc;A^2**Xm{n$(k%Cef@fMEw5PdE|3z{N-`IJN)QRMXeD-!>K4f zr=R*c;>d#K^Bcm+{G@yd3Sn-FTQ(2!hB6yfq;F$=RFB6&)hLg8VqE!QRmdcED3>rLF9r z#mJA=Q&0D@ce`wFm#kBh<#E;dU{Z7pdl4KiR~E~fJ60vECvFeCXmtRTRWd)BEJfsw1_5cm@zcb1L9uXRP zJKJx9+h5ot&d32Wh;mUy3x^=+@8b6N^EF8X>5T}NJ`Ioa{mgix;-md$%$ik+JpXXYr+t4H^9urm9mR{IxH z9YPG70urPhN5kHPCH5VCO5qi{LPvZ|Q``sVsk}KC_dwR{fMeb>S5I5v=8B8PUW20B z7K2JSfVO{5b9MjPO>rEfv@oKVN8?TwnAkU*t+%r{Br83a={CE#c5o*f<$!=9y8c5i zyX_$0gatybbVyV;-L0k6=*2)-eZ^B#&+@rM+ypWPV0F8`cN+VlXZ5Z`8#2G`8mz(o zxZNhcu+PUWAfM3dzMsyMJr+M{F^cVhOvrovX>$@fL}rr;oi)e){4>VvbS#q?96_1& zu+!UQ^;cLgj3*-CIrQ~`+JGM1~P--}$Uw(il zo`0{mOcd%Dq(#@cHYS(d9+(jc17elC9xnp>GZN6bncK0G*_2Q9xG!3nm|iusc7L~!`UrIPX1%B2cI^SS zT+kGH+{Y1J25w|$js>|0j ztO!7tP?bx9qG%=HbR2n`fAWCfyQLs9uxPg~rrB7QPm%abt%7n2bl*&$1zcaeSJV|C zveT8?;|yqw5dXA0_;icAuKQ9LiN%9ewLCP5xY?h{Q!xW&ctUAzn3jee87a)9ilXy4%8=u~WN8Zt6|@B;mU3eJHmROnZP3P-pNqS*3UV4$@m!yW%C;gqa>6?yx@_pWf z5wV#Q6WMI^-djEXv@V~mhKu=`iNu$D7{dF<@<5@lC?}T|-%Knr_m?}#%JCX9zn9qz z-Dqpfr)I0=USkBgZ6*#SkKgCfpQ+=hKA(0_rM{fbAQdN2q03|xbEo!e;oD$%_u$^6 zJG-wGRXt>4f$r>8)EDCkYRD7DqAEt)D?w;7)(?3U2m<|rrk()H$4aEmy{ym1@X8Lw3c7d?TA74hs7x-pEfMUb2n(#!*KA23w1WL?o=?){)yfA&8(;{76p`A zvM-U%cg^bKIyG2`qmkgmi|Pz6mVi?rLF`4r^P)|jmPLugqT6Nb-{=i`$i)@Nn{>@p z`>pNE#hUNxm;F$E`ElDt|4iQ3tIe}6JWg0UMig+^3Ti3$=L$Vi0feaXekz|j9sm>; zNy1cGiOjgTfih9`zQg6Q`HjolU-8EdTt#Yo^Y{B{r2veAUo|!xH2-uGekZ!S}=dy1z}3hOO2-}W+B8+mf1gki+j5Y0(ZY%T|II>A(kck$-Jjj;Kipo zHm>TyS&bDrfBRQ%@7wcYmT%yAw!pc*muM<>e3qyj1*6Y&0V(5?_P`5(Op+(Em#AVB z-rK&@EJGiUjZ#R0wvA>NKyT(UyF~bOWAda!cRfuQ$#|=EbkB(OChyFPQX>8ByW2Md zZwhli`E{>?DZDhFhJFW-IEz@g-EPy4dloo|WlUzp(^p!lz`jz%;qeWA+#v=6UB$y` z*!u`*$b4jB!I&V~T$@)wG$kyD!xzOV*6#f?Kh;U|?%(3+{;He3Tq@!^Lh$bHr^vLy zIuEg$`(%cF*ZNYp_2k=+UHt$=C!TfUiMny*`!R$&JEHx~6YdToC4*bRlN>kprX>w4 zc0fjj-=ob%;v#-|exfbvub@Bj+Crp%Qz83ID3)j1k&vgv)DbK3Jt%4vfO9_=D8c}o z{$lFf@NooGi~?O#dpX@dAQEjujRt9-1g(-_;*ztkHuisgQ2}VxDMnxz9d|1!yN!Ic zfd}mVz-03Ac8&KzUC(As%uK;<0t@dTeOyEiBxe&Zk4H$hc(3m-AQS*%Y!(4jRTl6z z7a8l&l6>%x!j7+K8n|LhJvZl;2wHmBxjxSSv%JXvg8cYTUgRIw?vG{nzx~Jm0m!_6 z1L6H)<^F#BxBv3*z%l&$@!$XB=f9u+?N@+>`_~`;_A7tPy?_4rw_o{R{_Pk3@lXAi zth~S9;s1=-X#DFx^^d>j|G-}SC+G2xo%i=c`j7wP|NJli`tSEI{}TN37yrS6{BQmN z#QV=U!#~_2^Isz?{wJ8?{{&cP_cCB-|Nr^DPZ>eQ4#+WLhgU1 z{woZ*fB!H49e9V_{vZ6pfBy7;$2+7B6#q{Y;(z8HHp2gRd58ZK_y2C*A^ra&-XR6u z;Qc-}B)JNiWIHgdrFThP%zobO2ArsO=`BdurN7Y#XFVd!phSC6mf@2ch`i$oyxVQh zXdDVm;a$pxEOza0)?`J%J(n-{kW(`JP$@$kczK&@*l>#EM}lmHnvWlm4qt*69JFdzoUuFvuUm3B*p-TSwNN4+wowjh`N7}|=_AL~1BJ;~~e zzSrYi_eppHc&rgK%>?D%xy{FGRHn%5g-E0uMkdhUpB~qDDPwmO%oeP}Z49~Q%%2XB z>wR~DI~E}G^vhOTx#1opHWc41tcWr5O)Ts0Aec!L! zl|rVG*HJyxEho1U4ZwS8ahD9Af!*g9M?uXd!Q?!^v8tN48lSF-1)Kl_YiycQe{Tw5 zWZoRP3djScg%|L`hp=+Ng$Rp%nC5^P!Ry}mGYZTd9oS?bTVI_9ayUh~4@bdvBPN~o zX*_!q$G5cN*%eNDAsiTxLpm`#g{ELQ@O6UA~tg3YQ zf!>a$vkZOQF*yBbM=L9UBwygtU)vP=uuMh^)66~9%`AY{c3lBl_t&r6>}n+8hn)Dx zm)9lx)5By`yq~WUYT>_k1Y_)a{cbQ+yFDXnHD0^dU6|qO#FAiQbqS5y20zETt(tj% zipc6^i!FVPfm`u#3_XWA-yG#okMKtoqMn2?HtjO-Ui7jWHb`rjZ;>Tn5gpdMtKa*xeAO6w%_n@3%CRbLYzRG&$!4HBIlq$m!Q`%wh~a^O3qm(pGvy%@tDtVQgPjq7!7HB%WHZUf9p8n zgtbclBw$Pxxk%jG+1Fwg?p>Kse;<@|rO-!uO2;S?1{6MeZ{!|PuKtS*fF3Ik5Jt3P{ zmUaY~{yq6zDT4IMWsd_lR}hdKdWY&<0gpil{#NmSQj@XA+n7j7NF8KDpi2y&b1rnc6fE7V#ZF)2BFm4jy;S!0{ zzB!XTE2KAS0NCc`%XxiywlxlaES`2~q8&10`;NFVW6Zw^jfmr#N9R6#bY6|UakC!h zcIR10WC_y86Ye(^G~P(0^Yqs{%gp^$>eUL!vpZO*c>b(AU=&978(y7Qvp#LR;6zB0 zT%HY?dw7G~=+Ee&&%Ei9L!U-HsML4C_W^GGUR2ovzs@-#OGgRjOTX_ZIYqnkXa{Xp?)v_4#ZGydoX)%Z`hBGom7nlDiSB+yg4M77eI~0vgwY@PuNV zI_=zJJPQ1V2E6Tl3S@E_yn6$(`k><#L%lX#6u+^`S9%?(A~zttzF3VM8y5adCg9`k&p zz!Yn^PAw?dcN1h9x-c(UQgxrM(bR$G5R}P9b!W zW?I1j2pE_@Lx*g57MT=&Ye5k6ZfWXHzCvK_ z3i7c<*ixgYe~?w8#GNijw`~;f}~4Y78QO# zg%l}ccsr|sqXB=H9Xe+bJ1#^Q*)<50OMs7?I1}U?DkyLG=tR+9LrXa~@vsamK`&)! z=@mKAJ$~O_?vF*^)l%+nhlG{Mr?gi~3w58+SZ+ldAR3o`CuayULyXxHP@{2u&4CKu z(rAGV8XIf3mxW{Q2?gkESRBE3?N)@~5{KQ>&;e`;`+!pE2z+UQbkHYcB7X)uQ6_|P z8JDgPESlxeb;Z+wFPPpqK7&IVGRqBYc9tsbWGPL8uBy$#ku|P;IgA-(&=i^pzUKjU zK;P0xh6V$lZvYKJ$vaEj$n65XtrM2t=ft7Qb-M{PQ5!>0_qURO9#s~E%iSZ}A-mBa zFJ>@`U3QL!iQql_1alv2YX%bWZQ=@u`k)*ruaIRK;LzIU;qLleIRMe(D|}lic|(l+ z15-&=#U3PT9q>6s*IeF0>bU=0_${iv9{?=|JXBegdRW4%UIYMUU?e}Yg-*mP!2pwV z7YRj=DgTI`24BMO7MHIr)r`hDEMtTgWzXuVbk_lF&`v)w1gJCcJ?Y;!KA-S*^PQ%5 z;jS=4teITikl5;^HaJO+^{s>a#ph_`>#dO89^n{Wo#0OGn#1HFDGjRPv4?sP_+9RIpiU%Srr5QEy)!*Uv zB3z4tpl0C9qR@8rNBLQrvM>G*faaKcAE`&fvQ*5qFx%W<&8Q|T;3trJF&2PBV|O{@kIxbUf}lamOB$KKG~p z1ua`IC?otur8NdHUmJ0&?!e)lv0M!%S$bL7!G{-3@B*=lDLX2id}YDRL`_yywdaBT zG(tHKw*1TCjcNCBHmq1bWd&!@Ov3q~Wnj`~!s~1#p*J zV?ks=|NIG<_8B6V=yDRiey@N<#jd?w3id65o_8Cap(jx>h|l&`^&CjV#pA|ki~jVW zNy%;^PrHI}ul8~jUfEL--+)HqRlh=)touM=ZAFdxYuZJn6)9aX5Qp!-YVjhnB#nH%dL3!r3EWgOSS zV;xAO`xzD^4e%Te;I8rRaG$oYcOlTqGZQ=^x;Qs$UdKj(ib*OltEn^_qWy-i`L^2u z&Vs&*X=I_$-X9aw3{)#cZ28u^aR(US3qWl5B&7?c(-@jt8-SeewMT|59#SnS8=ICP zA-YA-dK;A=IOVrO-k%rD#nrS##(sGuL^744v0Ly_+CoI2l_OFTss7*&KG1Zuc?&4xP$e_8zV9oQ@o)%A!h`e!_-Y7W`NFf%gwcxJ zK3<&qQcfsQ#lZQ9qF#8f>7;}_QIY3Coe-Z zz4h3Ge&Io1mK53H1^BvupHtG>-=KapnTuWVJ3!+6$8oSFpCPlR>?9F(wso(TMK9^A_SU4>nH>-k^UBinxn9fxE?vGST%|`!@VbA;?~z5Ie4Y&;=%58)Sf_q&EUefw z)j?SJ&cNP0>VZ@%s+9qA6DQEsallSc_Z4IJO+v8XJuuEp3~gC*#&zz|>4ej59o7wf zyrYmo(!CYdcTCD}MCHy!7-n&Zg9KPpDA)Tn`r1+`5eDBAP4bdcGL#=`e{My1Ar?fY z#?k|Wc~OHWR*yTX6B+*6+pQr0-$;q;p*BvXK4y4e0lOvF*D>TIXQjV>~s}slWH_ zI2&~x&K|?PKGNesF) zPr&6oy})pxt6UeMfD!ccT@U0;ZwVeSqZskEIalT0;>C00a}UO5h51WfjOf!AeEuFs z3b@w+Jn3DSQXD#H>Ve{dhw7%YXGPq--%dL<_M83Qs@|z{yWh9lgpkb=CyWCFh|IC! z`&_l^ye7bsu(TM6SrDqsYX0Sth%Ya8>+-{wpoWj)DX(;t6E= zk-bZ?(lILeUhj?7Nvf#;l4oE%dXr%vdf;aDz9TVX!ga{*xCUBBils*wKv!;Dkq9Q2 zf|KKeb=5mhKvBJ-&<$;uS3sf(BCOABU_^J&@R;c_Yd@|Ncchd*4^>Ta6VoL;K;bu&>=tZotEDb>|+~NYu!# z$lhnAzV&T!`i#Te-!|+;hnon{wUGnrFUml2rG9?bX@#Y? zLknkZ(gWZxb53lZP}^QxxQiS1_Y3xT=rsF^A_Kh_UA?P(`)`rFy~XrR0-1H+VfhN^ zHqGnf(SrmixfNN(Cf@7Cy-(!ho;}n9;2UjwCh|}Z@TjP#D2U6dWFRT6L0c$NbR960 z7puBnA<1>cI{6bIc+Qu9SF)pbKiHu7mL$UegcOn$#3p?$b}mq%#NS8!=EtQJyk$#u zy!w*mYkrjgA8gYbuqVt5SiCDP>!|idll}HEgfP{A)eE|H-__C~lufIcHh6bJl)W=< zm|8OTYYRb5qUL?&N^wG&cyt?UMOzCBnNN_PjBw_iTn>-3v;syqAHrczc7t06N1PZM zXCgcmXZf7Ck-GIj?yw+#aXT%bYyom#6KTR;%;tUvh>eymgVO{HBysyy08DtWWkBZ6Vc(o&x_fP5~P$mKJW5&RUKf&ncJf32Is z7Oqi0??6Roaf+fr+H#|~vuZ5zL+a1F^?I6@lPGQ%I^oW9-_tIO>hs3iq)eha))t_zrEVc&AP?A zTtHul@tA>4{H2Di>i4mjYO>#X_nLYDL*tUQ<{(u=WxqK6GUxr90r&&Y+o=p~*xOry z0q)*TMHEeHa^s*z?-Ikx1Lz(z+~6IqRrS8y#Ie$<@}=nS_Z2`PZ0+u%3IFQ8h^l!9 za1Vb*^t@wxiP}%gfZHHW74E|EuB86f)*68=36np!_OTOl+Hkp6kjZSp2Pz5^aB)UR zvXPV+EC_tU39vZ@)~?|BuXAsK^LI>JlV#I_YXEA(2N>lBBSQryA~=mI@t_5r^5u`= z5ENRkpTmBaH>CZ0g+o$Ug4ov$;3^Myqd1-4;^mqf0q4)#dzaSp9Kc{50LXI14px4v zG-Maa5ReyMOzy&)fGXX}rR=sByqVWf$0fO9;A|^;o-Zq6v|n^RsP7=zZ~chkS($qT zi;8SWC9tjEn+=Zc`w0uD<@YcNt5D%h!s0(eA~{Bb&YT>{tsKCBga=ggxAZCU?P61X zLv3{=A^#5NN~O(!#=Aig14wpP*yKyA-YjIK0?3B;GUb#T#y(Ig2Sa#~5hw zhm=;jSoE9~NC@Qm4 zp{bFvi7&IO1?5Xs{=5ii*M$X40Z63$QNI%Xyp-<7h$kmnn+5Upnp^!%fjd4Jku4QO z-UBfzv?jN!0~5O&H1Ih}5~G@Lx&=5Ujh$VU~n*UPIKRR*W}d zw7QjZFX{C#&r@7{a)O`P?+Z6X6nW&{dy9#nu73chM2d{n>=2#;^UQ)b)q(lc8rh63 z&{}d3IR?JRJ4*N*Siy5-$o7kcq!8>F`is4{iHTfu{(^ixz`CrTmXNtT!Y|+*KZ2<> zTSK6jv;(z=N`RE-2ib-!t1A*(!)HCVp>_5}em+lSBhXCVFd`{SUU_Or%Y0dTr(B4J!E7*hPUHOSx^5q2d&wC>7Z15mYYM8Ca=u`6fmX`f+e zvm`!LQFe!m!p-_V>5mIYH4p!O(x>q5bj5lubxWHUkJ+zOQnCb|-d`EqBne#5$9rf= zrVIuVKtUT$3pA|P>7-!58AW2vc$qwV`ThG_0>g`Gy|XTEs&t8W=xxP0c#-YsmEV6R znAG}wVpW669$t(VID@ZbZog;Xz^XUsra{-?{gyx)uEXVZMoBz~y&_wq1;$)A9QY_W zMO>f5=^0pZT3Wu2j~=T?MtDsx3#@TFBHZCzV*^)zAxAiZusdAaWXMg{ku{A3eb;@E zbz}<_3ebjq0&N=&ijzlR>YBsem34lI{C6SasIvxNP_QdwL*IV%_17=OiAO!r@We?$ z>toNmWPlcA%|l0iKX(#?(job6B*=mzu!gx!@TLPl%pCrX1l z%rZ#g%55|^H9?o)baU|n^ee`YYfai)*{aQWhBTg~TL`{!h*${+z$yzKI?YLe+yf-P=F>+zFB;QKKB3Q zOL8>uLF;$dac-u*5|2bG0Taj@Y$Kf9*=P=IEQ6W)-cGXk`m+VC^c zm>UA+4hslz<@jM9s_^aJ+59f5{0HywCMjogi(l}gocnUFpd%%+M&zlcl@Hnte_Ql= zTg*?bi1bt4f8xCe&S7N22%md~>wiaOk>{QaL_f0K9jc+q4g`UcCl<74O{42UBJ zvGlaoX`ti^UH_7=WF@nbStrQPxwu3QP+&iP)@3#2caqVlj_CbS+=H>WDk|1&j1+1o z!r2?;tUo&z#CO21+a;G?fuJwvc7pNcEB1ZPk`J9L#!(wdu4d-rJj#oCY)Fr%kB#{8 zXc*81n6w`hyn~6=W$!>}tdR3;DwmdhIjNw-#T+c7s5r^o;Tw(t_CPFpE+@={7_G~4EO1nFs7LfViU-kHJ>p0 zhrcoOX*Xr2GGj7J-2j1Sf@<-?D&N#~YVl6V;Y0iQ z4SU|)J=7{|`hm6`J_yK=4g&^|NHuh%0OJn`9A%I83pT$Esx9SF6)YPAA?Y`{W)6#; zZFhkJ7EUWRKc#2hRWbkNi%BD!oHzG<0Fd!55x?g~y7SGhU$9c=L@vH^2nC(AcVb8vk z>S%OfS%N0i8FXjug1kUsy=$d2`lheS{ zr=8dITD>E6vNZ)1k)rj@ks+Def1g`{b7%=HXj&_9oF!lwZt;!#N(F z5#z^63>2%`2GA<@v(9SCC+VKi>DUKVlAyouGBSj}7e#>IeX4x%Hv_Y9n}VRDaqg@tTVQk z15jeviX%2mvzA_U9~TtVUIU#)1yT>AI*i^E0kKj?ynxk`FGKPJh)J*CoaaiQ$9Tw^ z=3qJ(fVa3QncxEeIlP0P^?scJa-+woF>ZzRX5bFU{Yc*9O4u9XH5XXju8z8>j2XV(|I>2bTn?-KfL+&tt6hleB^b--Q2)9zfrSFJTy}_OIX3 z@sDA+pI8NFy~24sw7{PqelbEeF6Rr)hG!piQ0c-^$wMuIQZitNU#g&LO`4Mip79H8 z#8!&z4`TWK`o#xvtzv;2LMeaMc?%7?gvWmXJ_`oj$oqPr)}pk}4W(SVZtnSwAaOyH z%2L2GGrGHB;!1^-@I#8TQI&GyFla;YNjwM)n2EB!fZQy8CiHI?6<;sCYWZzC2Jr?N)yL4U?}OKX zU{9oA9=+D-OscE(U=%077Wv)?;`S%Idsq)>T2rEC=R{cx`sY--Hz}C{nxHM5%Wp*K zR?qRSh}~xa1QE~Vq0uOl0u)#nHPFh=hk|GU zXeRU!6~rouPd1ZM-+!8l$VfOGE)S@9l2Q687FS(?DfM^JXx@JPb09qw=ff2MEZ4*2 z4!?Hd%C-je^mD;ggmhcs2@snAwF_FmbeiUEeY@j zYyl-3Q)x5{oAkZ4EY#0f7zn3k@rIiT&oG%be^F&Lim z#3iR=6{xq7D)F0y52i^QI`EcsOZ3DZU``Ck86+2iTFRTq1sK}g59n9$FNlvphsyey zS4}s^F@P*V>X6s@WT-laPf_32$DM;W#FB%gD#LJa1-)XpS6G6yO?tfIDK4n^t6cmW*a zpp{{2CPT)94={_8kn1=w*DkO(R`f~!OmZ(k6t$<|hf_J&jhec5^z`c^PvBT0`w@U= z?sf$|*^s;?LO5sX^RB6IzT~P|Nlu)mlQ{tO4>V$M_gs+Pg`@nV77d}fM?36cxQ|>> zK&xxs75_25$NpIAae%@d%=}VG9_McXr}7FUOf)>pH-K-x^gjiJaOO zjQXg7ynKEi$POJ~W*(K$IKF2~yx^B(I;_oi;F<+DNuPro7>9cbdxiHCo~*ofZHjyS zKJiBGRzB$?;?{H5d~fF;Wu((QduHl2dYn<4rc~WQp18N3|<_ z1xkS~8#SMjxghtQ?7iesv(P*GJE8+};!Sr^=!|v0h`hml{q_E8^p=g7uM-io2J45@ zkkUL0I8ZfEu{R&K{NlOb*#c(G|5gP0!Fq;Ak7W2BuowwzYBuSI1Aii*5)fK0P*%MR z0Jz22P1~=B^~UZ$wLZ7UJgBuPb3d0xB3}0agJ#_OFkWeQ^>rkemRxW>-BxYw{(XF; zE$I=Dwji(ovBfuX1B#odAfK*-qvMon&DMC)_wE{=uh?~tRb769x5(ySa|o3&eP_J$ z(u|NK)b9dOY42&OP74l2>RwkU>=0%CyTi5o%xr!Jh7pvDxt6ZcJ)naaWmN{K5DO$k zKu?5BE6Jp;TrtGy1CTnxATAh%FJ6C8Vq3(_$I=tvG>tHNFupn1nHZ&6llnK`YX(9^ z+3q@NtMRZ+Gpgcj?^4M@0agd|m|r2y7aG`EwiZm*2TMViwN$^eZ-mZolNh~C*Ml5? z_qk-`x^LWs1fdo$2NJWd?1V(`;|u7(Cft@NN;4H7#F{c75%ulml-lPj#_Q00 zaQ#U?2MtOgIoyOmG*M&J1yRTJ``WmCLv}JViU#r&6-@$wt5%&sT`@_>__ILaIElhl z7-aR+hFiB=8YFHS>!&RS9bnfzj0Cd|$;4o+C0a=40!MY9JAZk!FdB)_W61e0n`zLC zA=L6GLWucLxVMIIg>?cS)BOP}uA<>f+8<@ROTMS!*4;T#2C4>@4$qU7lrE}uaOLn# zA3byi<4xjded&Dn?nqxN_+zs%Hxq2h;^VY1$%U6MjWVbP4DM=Y0N6_R0X)YP^P3g| z9B;q+1;hnc5?;Uirh6VC1JF)q-aWW*k3U8_fiau?{cT5dUt;|E=}DNQ=|t=@k=*2u zBy7hgbmJA+mT%L+L=D|t&5peq-2-tesGq%=99p@3MFb`G6#LUlKNVr%Ba4%+iz1tb zRw#Cs@(RQo2isp6@XcD0OVSLlTSS&-!U1cIfNzptw@YN$dS zo?v?<9m(Kjfb{oqsW>S;uWh>=?o<6J*iiQXv^=-QHry8!_T`yI&POT0k6&QA44Dp4 z@uH&KfJ+JDKUaaCxk~EGG4Ik0HgJ7vmvFGj8{7?duSPJ zJ>^I&FPm>^3{yl?G92XnLHe&Gz3?Ns8Ek^W!;nDg&wu>)KJNeM(f-Rn{cC;Pzi#K> zKi>cOzx>yK>ElNK^l$!e`?$pac^~)n`K;qM5dU1ql{E3Mjw?e-Tl(*H+<$I3{v-a6 z`2V8g_)mRYj{UdvacPSApZmDK|MdTEANL>r!~flVT>Sr|J}x)%MHu4UYhKv8Q+QEy ztMu8KL8FUx1ykLy#_sA_Mff7ZR$aG+)Kz5TGdzIH zrl${se_ekQoc)IuZ=*oT(7S@q>~rk+M$r9@zR8BLcmhaq$7Je3wu46FsAF-5p&wYv zRXs>!$gU^Zst+=8oO}2v3)7@u?V>_?z*Sx`O1hU}*!2R_CmH~GbHM>JuCfsckw!Ls zs25<v{b`C2-Mif=2 zt^7K&L-G{@F~av(neGdY@D0|<5zvc|IK*$@^vbk_?bpZ7<6jB})gK0qHNE*(ftsEDlr`M;4AX}E-JGK^uYXLDEKFcP(< z9WI$p9dc@QAI&w1_c1|2QvcMSf{V?a1aT}87AIsIFcMW8rUZwmsTKC#gV>0jYN9uD zya-tU10BjO@s91pbp_1b5y;jI7)5ne{yx~~bN?Ihnm~!E7qhLWN6*1r5Kl_X`vou7 zPCK`^c7p7?m>f@+8{K^>a|m}!Ff4k&=|V}R_ggsa5xi)1>}}AY&~mFjG%I~6F^Jzj zN+>}2_1(XQ!ZW_i6By2$Q?C8E-N-t9ZunbqhO7}#0I<&4FFC3Y_OM0*ZNoVnLik~* zw0>e(^h7$0u%Nq8frw*ocGkH-z;40^-g$lV@qBFE__Nbv9fMqzqy!GFi zHkBD0Fu}u}<#YG-n&`mn+a?8-%&TBuKd)`BCV6Vq2ckny9b@qP!@C|+*=qH+^>}ON zWL8#e5OmqZl-l!o}4Ln`5o zq%W}vYx%Ep@$;Wp{p>Dp($z9A61bKgY49fQ_W{1U20t&xbst)nh8P({F!d=Zz0d(e zZ@{*$>ZQm+G^HzxTAXzq6DohWG3n7 zeDgNjUNVlJMoSl|aBb)~&c^E;P)`CH+x*)~*e2p%#fCtCD_y@LdUnrPo2KUlm={4U4RZtG2}_Df!~g(EITBWsp9}T5 z;Ii7Hk*W(+m38Lf3iC{p*OGqihct%YPW%|uVG4lV1#Y?N0@jlK=7v00H)NT*AL&4_ zp?F2WXS8l_$YT1}9dfUS$*?|1$A{lX=I6q6OudLQ2ua!tzt8|Kcx$Glza2J+VZ;ya z?N*=+En@w9UO+GW^KE&v6K=fWN%{ifM*gm{qJI&0*i)#I4K*KhRD#^{{fV;6Jvm!0 z1P0vaF}wP9!wmCSPHd0wLt+F;gg)3uN&<&2d;!zm1r%c$>Kx&t$P1kSpG|8ftkt_U zEL!l55O#$ z;kW(;A9g`(0m#}l&c{n`>j%d9DY$umgciKQTIb8*h1NNxX637bN@A7*{K6-IE$=8X z_EwD7oU_5!d#@ZKdVob7xlJxVdt_J~JtsP;SaBB(dQnNwZ_(({YjEn5R1 zaV${{0d{wEbc~Wk(j(=-kqxgaqIYl53Os{vd4np?N>mRARp%g2srpI0)R#!X6BkX5 zb6#Ezvp|7|3ZUXDS$L!p;e>uCE5mWG4kK^th3x&YWI)KhBH&p=;%Rtz6w^X&Et}cd zPwW;xD6Quq@Sa3bgn7bXC(Um#x44k}3KzovjRHtU-g5OuWKPT>Us`@IBS>upOd`^I za+YZN*w^EsOW~wf^?l!e-Q!2T__j?O6;>fX%Ui+BWSL(9=ZGsSeQp4Tn?JC}b(lHP z@Qwm`npO3_IQ%N~=Os&{nZc1H;(O)d7Nk`#w}v{Q3 zzs={o#8H~GRT=|qxdnuX@2PWM4oiI35Hpx^Ra=5FP|ujaNpiZ^H_sV89BBpU7wP>z+$wXJ2WO15OV5mK`~G5 zHX}N!1jYNaZ#6&k%tNQrpX%L0B5>mDXZIo$$BrAK11jX!@aetE;lHkcc;wtq?>PzO zXnA#&Qrm3~+ARk|ADq_+=|lE}4>@TVk0O3wDUX>0Vf;vVJ|p~Y z<)+s2qlgYLsAb>@ytmo(Y5OZ8dV&5K4GLnv8x$}HFnE47Mb{QE=_*a&pFO-Q#Q95v zhje3+nIJ$S_J&&R(cuz>O%NBnCnWtmJCGc$?XXGWTY56t7_zhe<<8xho8f0O0H*MA zAPd6Fdy@AXClV49-jdbNhAoAUx{@H_;fvO-K=?S3ib2Ur@U}f40gO8la`ia>#Lp9% zzSd3uQ|OT2e7Dz*biqi8!sjg(ueS&|P{}{jWJY@o%0Ryzd0!j^z!C*?oVV|$W7%$@ z+mKi!1N}0B3dMp39JofYABlL`o`p~osR;aXsC$pPqk2uh{Pk64iPtUofC zq9okAC1KkC;JQn@!vbdQ8p%U?Vga5gxh0s3J+K;b2|`c6m2nEh3k-a@zi|jq6;&0EFhTx6 z@B6yfCzX7V;C?;?IxlCKzc+~q7V)~TkT@?}BPO0H?T!M7xec2uHaGS9FQ=#vz9iC> zA{O+5VEQk8H?aGB*Ji-+G2mu6RnE1hFnEroKVmV_Jwa%nNa67gu11Y&0sh!Eo~FGF zeIVm%3_f#4q|PuPfiOXbikKB!3{gemTxS;Mw$YmhCs(}-cL9tLCg!%+TSMq#Jc~rW=S7FF|@vhw(m~UhnmC`a(-WzSmR|Z6J-G?H?GjICGbc^^)fr3|8~jqLqODl6qyd*VS;UBT6_me zJwz?3TB!YJxcMfqF6x`Pw;Q-OYtpoq%mOotRB`uD7_#D}NRBWk0jTPi+47%Y1VZHp z3}L`V;tNIN;0Qv-%@zv_6L59`aCxzp{LizTD7TmsZl@D(_xekzx{>06Hgk~>O(o#5 zHH@Rx8(|59o_z)y4dlq$82>1s`+T&&E`_imM_vUfWEb2~rWe#RmZ$rZB9l;6_ZfA! z>JjC0Bjb`fpg3t7&rm5@_LAomc&R}L?Z}veGdZUmu#+vZZrzugz5k9rjfEB*d>vQF`UheoL~T%;vj1R6-6dA)x7cSgT3)i@y} zm$ZQEjO%ZASyHRp{w2e0w~%U@Ew_VfWO&C6Amki_0PK*D12TaI zjJ6y=vL+2^T-oWL;wSeK$vA6c*Nom4x$L26X`L`^$9Io$N8>!M5$w~rL209>_$b$M zN?#`+hADq$cp4Wg5tf1d^Z2eD)vcm9A~0k73{EwRKOp(b@ben;wsrzs03o*Cm}8K? z80M9exyIj6!;o6@SDOv>DDweEe&_4l85%MNtL72lu~QbTf!*|9W-Du(E!PQ0-x;vmTU=TuKuV)-+#Q=0v!ShQPA!)E{f%`&f+@$B$ z-`x5^QtL`SYv}>ui;)L6v;JY8vK#;tLS;&DFCGQeb?ON24&ieSMy=s0eWLsrhNX zc;yBYQf?g%GzT#I!|usE@iT)jSgf^}1eVm`q`8PH428kX)<(B1q5T;)guns2ZGY}r zrd&M#s_l(3_POzIMphV+nuBxM<{Yo;D=0PQ$MOAKEe{j}v)R^9%dv6Eb~+pa&LKCm z>HcP{EEt3ye!)q!6Uze7C54sL3az5V5Dwe6vl z;o1U?5q4>?`7_6X1v)mGHAx^q&31sRL#PEM-nT2qzSy()(68*}Jhm9Ba2ea;>Fu?S z#<-S{w0S|Tm1|4LCmnS;w?YZX8o3+jhnr5rvBOa9F=LLSb`M@(kq3DzV-AkXEfbV4 zj@@2X_S~agxQBRKQ;Z?M!mKz2vhh1Ony1Y7VFSBm>i|NZsL2+uPwC{)yQ_lr2WDtM zy2in#r>&?wn_Yf*5Hs0zIg~Ol7l(YWG2lnS&1TCdad9P57nO}G;IMLky4m*uRhbmD zeuSrzG3&P?xLcAFDGTbZ2yS)|vIO%DB5C ztj^K}Ee(UCE&7?kg>g_ArxDavdZiVl_Ion(-dne;Xs7aZ>`&Tf9`#qT^*T1=NTRQ*QXn zS`@ivRP4GWk=CY-3qjRINF-A zEufugS+CQX&dc*PhyCgG{IWGzWkxkXwQ=D>x!UHjmo?z}0ktmYtaWl)0b9)4QhDCW z)!kVc+o_y9ANQwv+pEc#cj&~@Q4jcHWl0w4zYODw- zdVU!O%(J5|L5wh)^|aN_>$1OvS+^xEand{xTPhENjhDQBF8cu{h5T zQwmn>XR5T}&pM#$@{^rNoQdVlionIOHoi%(SS(HhC1s0`(qJ8uv^A|okg)}-!ojc^ zgE3o@OL;CU+j_5?Lfa)fO+v*6hRFi5@O)9bEjv~|CVFAC$WM#j$rDi#PW z(Ry*_bbz_m81_rX6xcE`XGE#1bv?t>`Rv?MfXN;PTKpnYAFc=>r$YHK z3Bv$}ztpKEN-G&dJnI7b_C>C5cmGrH66PeI+41Vc%SwgRgKwpgyow_B4r_8-tbTAW~Nz10j{zOGiVQ?eWDv?5hDRi=$X;QNaRBL^$ivlp>KK2kQ=QGFUMraKE2dpSy0 z48$eX25a|#m=FWayfs|STS3t62n=JBMI9^F=&Dt2qyKF4h>6v6PR8;wo@My8hO^4AM_8ift$Jdyj0$b+wVDge5An5jw%x-%_`Ew%!b+1D zV&ZBV#-Oq3+j=!CW9g=3*6At@D|$IFtSCiB9A$LLbCF78G0i$odI1)wF`J@kEPoiOCchIO}J`gv8g3xX6-aO71QRFW@tbTSb8VY zNu_|~$7aW-pPMY}SQd^6?}ZTV*0Jw31+gcIX1SH7jZ`=}^PTkQ*s(d0MZHV}1;C$7af$$_EXuEwI&mYst5h8o)NF(u|An*3x0D$&k%YR4;E1%8^Pk(Je)chzg@SHc4RIsMGf4 z8O;o%teN52WCOLl7fgYt#&;TeS6FJa*`qUJu8_%jnuD!b@uIj2+LdUs6-hct8Qmv2 zlbx98RWo8VDPz^0q_;7aQ=ey>gkfRU|dWv7b=Auma%eCIMnSWwk{OPbCH)N zzHhC;n@cBi?j$^5mfd0yWDU20ZKo+EB4p!*awk2>&$xn#V3e_xmHC`j8`c*s*2tyi ztwo}fZ%u$ag8uo$Vi%ZSiKLiPZiYp^(M(J6>rK#1s5xdGr+KwgAH)N&lW>-n@!CP4 z#AaUDiFBtd7xGq7 zN%LecA7C~=tayVUX)TN?lgTC%Okb;d*449x~%xwVr zxKc5*!b-m6=fNuRL94qwHkR&x0-z z%*F|^*69sJZ=6}n%aY@+EsSNL8;8xix|hi~(_&C-%&e}Lz?PlR2;8gAU^;RbP5Y`DN5yhFqOHzDfS!Ng;h8| z@NA1gf(qktt^>#)1skt2OuU~TC;hmRNhNwlHrd3Sbq#Q>E12A>RY(CT(vugM%Xf**qEZ9>^^p{|Jk1>D-Pz#t51ragLqyfEeh2^4VG}AS;Afmg*Mc2MI9*h8nsW6>! z2FzPt!?SD2RzvfemKGCY?SeCoVxa(?$#HILJfv)|G~@#{=gqBj!z{$O_+U7QrnB1G zpRc+`YMmK7^I9vQ2jJ?Z*!nPSg=sre16-W%i$y;otBz&YT|ONaWg&)+Z)G}#6)pE$ z-F9DcGD8{&Tl4vBm1zRSTS|1J;6>%56hJC6Yn>|cHGj=&7*Nvau9-Kxje22{ps=h) z$)Hn~H^Z4ky1yva2IG<3iSyGWxVtk+eO>^ZYL>xDcCpi|mB1zqz<#G3NQ+gzmRXI% zDZi=P>lCmcY@?K++YK9=O`W(gcD#t!pqnT?BA}3(3>yXd$zYbsrsg4%Te#$2%Yx^@Me=lPbRRe5RFtMb)lxge@B zq;wi`7d66sNF{x)1d^|__gv=zveplU}XJ7_Gi6`XeD@u;Dw31D|m#D@H-~*pT{cfwqQnrEmL-2 zdF+D4Oj>d@%BH1h$F5_qb~Q|?bB$Rt4lvs^q&k|v@>0NNGWX#J9yijLbmL7 z=hy{gcUmcI9jEJHA;HY=Py#N51ALZrc-dsR&<@rN4n{G%-2g?Bfvmfm{W{GWVRA3;8!mfW@|@UCE9}~_7zf9X5qRf zKcZ^M2Iike4KSMVd7-aWSj_&c!8UGN#*+0CSzBe+3{~^JIiR-M#$Xur*3Q5RdnvY5 zMB8u%jh31O#>@7hiT1or$$eQZwdQ&$0GhYD`*eo)_=-6T*rlbKNyGm2g zg_ZSkzd9X+M_5jjn@Wvh&CAPzhz|d<)^#{ZPnpuRSX1;tEJrQr@^bVtZa1O^~is7F#% zevGv(0C&o&l*=&N7r_Gt$4Y{c!RD|9rdz20A40)%B*#lnesx&3XC=! z_u^ePHc6#)n$E`}U{hVqBZ(-$5*k)HV^vu@5eW>o9K+H@)|OxD)I_8iPV>YypZ@3&=Ejs$ab9a$fQAT-@)p@=!~bv zek`kXixI)(S~E+~uxG5kO!pEd#?@@UYjnX*ye#QDH=rlc60>fzJ#;9rUdOEJy-Yh? zbyH}}o!J~?US_3QFGh+JU2kb7#i z3L>{k1k9S1kvhv7OW40@t!39rs@}KN5;H1ShP6e>8`y5QDka-&fnf_(;G=Os&mMK_ z0r0djcW*Uoc7H9+5;cJx>9t5^4nX3TwQfx6F$!d?JUf{M*?11dYS3iYj-#Wi)di$w zYT56kl;phb!VpMgX!Mz|E61xcLQor2^DCoTQR8!}+cmM#ah{25HJNQMs?9P$>SFGq zlt9m*#OZ?+rj(_e)mnk(pxW%0`kj_LE_r&dj49=~S#$sc)TviT-82w3 zj?oxlb+Nyqhpfv`{eT5xmbYY6%?3=?+=N-w*iIRk+BT8G0X&yro~HuD{o zt9gYHhi#D&-LWQ>c^OPkm8`iKWV-b!F&H?1a}Xrla$V5m2I*K)PzBksvCo2qPzq zg}tNV+(E1cQwGRiQaHR^d*WhR)*93_hLtZ9X4xD9*#iA%zfJRT%QN`6;?e=byNnvs zlWsHUE&CKUWqVe^odOeq&v=cg80bI_Rm>WeF@f<%0inQZm9}CW_~M(BSW2yD5`ro@ zGoG7@oZtfbptS0HZB|J7ZM%>I94~fVVFB4R$185F+@6Y*2q3n+KQ*UIdt4RJ-Azc@ zIS58uz^-E#*r4yNV^wjrG@FxRTPoGtsBVTuHNZ~148XiF)iGQJRKH#5ffc$R9>>>; z)WEiGQ|H^y*RSg{cW9 zk*tuMW+bLk)`e6tZiBu!pN@n%Yn)qaY_y|C2g&ig#e@rqF_r>$myTbE>gYXkO-w*W zv9LT6nPMcMz+}etB`7DuVGdw}wx7=?e2ir$nM_Tu)YsTM&&+E+*9(TRsZsHI-Dowu ztR#j&Ix(rPv5pTa=~{GLV3x`Bu;WT*uQM7ABjrZNk-Mu|8RWbpYG9HgJbdwRo>T-<97O1QB3AXx~ai0qKR(q5P>U2|&Ykovu zX+Vt!ygNNa{aS9A%F0Sk7`|YSQxf2f*$m&UHVRWO&ljr0RAKBZPRZ@$#4+$l`EoPs zu2Sv(Jk^?&Gj0$TF+J?K;L`N-!ax;L*}w>WKvKmT1+|EzR)kUjWW^4V}bR6k=lYBw0D+8xdEd}jlwiDDP6~G@;W>$3h@N%f9 z8_kN<>#>-}Uf0>as;2~RCTC03IL`Dbo&c;Bl68t>$0NaQ8Gus@t31H*A}wtA%{m00 zrrpiQCItoHP4sd~fpVH-ve=Woiu!hsF7mmwDyHakV778o%qnR{wLtw_TF#cM>DbV+J~pCsfJuq1qTwi~d4u7!9nY~f zhsR8E16ys!nMw~JdFffZF>fWor&a7)Ms8&y`76U{1^YQ&dri%=x~9%7t=n5;QAcdd zNNgVC#gRtB$LN_eTqdWjxS>V;JO+y=OD^4|D-{bUkn$YcXaZ%2 zRS8FAIXmw8aXCCrEGJ8VY@;{jwgL0OCjuW}6xpSi>~%C5$f@Q$#zoTD{ykIThC^dW z#Y{8hTrn2Nlcv*B)$DMx9KozAcXPvDc9}2rQ6ZkWX~1 zNirJ;fLcbJD1MuX3RRO`na-pdtjAn4VF6@r32G}dJ75<@otw0>O>|QgCE2NtyQQTP z!L+@d%4d_BT1<#>U=(4lCt95ILZxn38huPvg-4bC5R3oDqN9ktVy%)BR|@Y$1k_6@ zbc189_K*&i@ubtCfuh%`Hj?bT$4TuZyKbj@G@TRjqjtXz*qunn9;?ox52Gs_EF1ms zTr5eEL88~3#xa0UiZ+KUY25b!j=D69z{Qra-MYL2oI<_bTc=0s{;b4~yYYdaWRpWS z*NMbZpvW-eVu8vog&s%Mt88F1-F_TsEvVjHjO00j9+d<*#v5d@}$Xmkt~f_!<^p-R5#cMdu*hhL%9WxTpbX<6{VAD7qN0LS`R18 zd6!X(e6$TZqeyPj&VX99LSwHNtmygLozy{6P)msy1! zi&AkOo7Mn@&!+2KA6(u2NWM@5&Z06mBF?-$Q57ZKZjK2T!Hz(zfhFc-FrTrM z>6(S%ya}B$bB3mrvXP=9v#b7K(x_pjZZcL%R+PAB#HMxdeQBmwWV&>91YplqW|&*~ zbjffN1#4F6R@i(pw+wUU996Le46S6c#kg1&sfp=WJJyLx!?@ZXcRN;ogbgzBl*yDR$lZDan-#HpF2N@AfMu=Zr)fDaiR<{VreYHtlUkXH1n^W!p^N^or%?cBE^ulGn`YX@LftOdj_D7Rn8rZ%CS$TX z15*x1gIGK*80}8c1B5-Jrq^m&@|y#@)Xr6ch+zy2w+<-Xel;z&D6oN-@>)DGDK@hc zeiAnwLB#aWpiopWN)wg^M#(3gH5FAFD)c$gx|@ny+4?jN6FFjIxkP8?V{vfRTbd(1Hml`r#*10enV)Ph&D?C+^u@k9%{8J< zwVFx*MkvlyMLjFz6|-2gjp&?bOU}GMs@K|66)BmkVb3KyGP6zeNE!(nv_qh)Y4@#h ze-5DcHHId_E@Lu5(KHr-PoF1On%1bLybpDw0~T3Y3|RN*hM+k1md zz(k{e3uJ;=B)-!oOyOrkpZyl>AUd;Ubtf@@pzE2axJ)9GgRr!BH_}a~m)r$C6R@!N zl@DG2DTE(6yx9HS58cJ%VU#GPQ`KB0r|@sQHxJgwQsv&0jzz2kNadySy?cbj{m<|t ziChew`FkWJ>5Xrxk3IJ-`PH86_*YrdrgWJzb>1aHa6my1H_vS<#+Zy~JgjXJUUV7WgP;{WiHv^7eI`y#3O*g+e56 z$Z@;8eZ%?fy`%GO^7cKr`Ox$9NZvlsZTYPukD<^7$X~iekAD0C@1&v(y|3J=xBq}| zF8%w4qr)JH3jg9zD1#q4P)tL6cWM7{SN75yN1X1$uLPa;O?vxx;r*T$-hI#;K<9^c zdS`LH3GaD&KZytb6m*1dgaVGY;&(f}1GxVwis<^~L@N}!6TjQ(?Y}4#`g7<+@7bt@ z2ms3M^sd9*cvUF$%5UB3k$7$No|k?X;r@Z0&Q=qJ^DcV-`RPnv|D&hSBd`DOPoYPi z`}8UGzI+P3*CM?0ug2-7<96|Q3GTn{6nZ4RBB#(J@kpIQ@0*~fokEYKU*{Bh_d_o@ zg&ukC|8xpHqVfx;&?Cj}-=0E`d>?;s3O(|E=TWcReB3VIUIv9%o{IBG*6Mpsp?3*--+u}{l5ZbBg&wJQKYNSb{w?(Z(fh(}^!_W` z=&J}W`*+kv|6R1tH*nyUZcLmdHuiVRzGt?E{BQ!d(9SJy?i_Gk_Z;86S?SPir}Tc} z@57|ck?)dWA3FHY4}X|> zeDmkZBX_d1dk?k$sK3>`RsG`ovS;2O!u!AH;s-x=@x33t_`Y-2xsSe|&xbRzis}G*jcQ@{}u1a6q$@gECKD`sa>#Fp{jfg}& zKse7{`P!LB4wLTU50aMlc5in1t(&C#zOU``7ejA9*1zk8^&h=)@tq%oDR%8$#NV60 z_nqG!y7;d5!{PfL`QrEfllS1_UF6~~xAONuep31!l6jBbSbYOTQh2`npAMe<@}E5V ziMK`G@!~g!-uWNCWq$nlABK+?cwOrt|Fw(1eBHY8+!;TI^I1QQ^Bw*^&KLYQ;(V7M z!}%Wn0i5^z}H$#S4AYhnP=r`8zK@`V`Ey2cNq5=tuGQKzinC^=Z6ixqpYY{mKqLdgX}= zSMyIl`mx}3M4H?!20R4$p}nNKfyce&vZfjvo3ec)=IS)r%wPix(ey{9^O* zKfm}^6hIh<7meNDH$1+34+~n)zJS(^;JMA~^v@hhhkx;fTzTTv%;Q(3XF2Jax%q($ zc!I^{KYcNme`*^^^3gqegWV;Z^fXfL`yP3QFW85eEylMg*%zQc=TibYY!fN z*1Gr_5ot)O*IIe=+%!_*!P%W}`@+G)C^pY(hfhBUJ_qsKt`>yS!Bf_iN4|E?)#?R5 zeem!XugN#A-TBW*q~Y=6d#|7S&{gRIzOx_rF*ucLyOLN%6z)X6ocq$XJO43J4qu1b zl|MZbeEJKsgX(9l-BAjE^4cB$=BucQF1{BLe*EmCH{RYjCtbKIee%&yyghpG(TlGM zSqJB@DR-bEx$y4v*()D8_gLz$F1}CthR0H0!Ji9{rM~)+)L-AY@<(Tae}4d9pL+Y* zb6+~BesT9iJcT^;ljNa4e;7NG&5!&}$bZ>^^qjVRSEL<@;2D&M~zxRJgCXJW|Q9RjZ5PA>y#tA|D=RKoB4=DgMWUR-a(dpD%5-VZ{m;&(pu zqd0H%ehN|wzq>=fi1XIR2O({JJORnT?|kTEIB$LYHKeVNm!SA=rB^`Ohx^^3dym|{ z`$$S2Nm)qSXEY#fpYc{m55e#GPzTcX8Q*iHclAi`2OyEo;rY;y9O?blk=_N=1KaRk z2C28vdpV?Scx6c2=eCaYEJ*#0o_nNs07-z`-Jzd>wDs}JkhUTJDx~4Y$8|{CkpK8d z?<+@oAykC3joynOZS@pL-?4Ff2+}rW8`3u9A*9vjt_NxB)NcTXBLb^K?KDx^s-Q9;2+uT(l z#Wzw361|ZENZ+}U{t=}6Ae|49MmoH4dkPZiaNiyJJxIxo^v$Sk#f|g}khqO>9TKs? z?hbtl(t{i64cqc?&>EAJiOa@%(E;SXQl1OPL)zVTN- zcxD^au8Mp3!!N@_x3ByPNH4|j{Kn>0Hqsu>+gD~Fk*o8YWalB>9m?Un^-C&+t=}dj z;(k7K8RxCv0Mh;V-5q*6&iCPWerrv?35~{+(&yk1f^~5INg{*}@^_*gJO3oUOyV4T z*I^Rf(?4@-8WB_b{X~@rXyspfsQpJ@Pa7$J7gGKWhl;Pfo#I=M!re&aYtl2?H8h;p zU_)%P;K~zsU3ui0vw^w|=Z<%L`|->5&mN}o9Y-w+o^k`PY5y!v{c1n74dquZ;1bsH z)rX(?!Z+6Xp-nCwJp2sWsSn(PTUVv8Uir$Nc2WG@s}KMB=H`vytFSg6KQuNPDD)>y zlB?23PpkOEM)9ij8B!cRjHdZ%7@0qIQa1g_7bVSRJxuD4#E zzww&%)x#Jano#d})$J1Sp-s9yw8@%{2=i@cZr5S`UVP{KNyMMK>*71#3jvYZyb4-u z7;q>H_imp;%K06z97r5tDZ#)zz~9e({(m5zA9?0X@Xb$3U%Y^e52EgbIln1NUvLjT zzBA`PNJ_?U|Cj!mT^Jey*=EhbC$AN6yr1OA)rUX#V@U2V|0VMYSdB1D-f%5@=HSVL zho5>(KLd;8G5xEL>0deb+aF1N?Z%a-&jg?U!b?$XnHyIh`6Ax+Apb>}Mpv%0=YIEU z{;B?%@-FzN4n7X8>z}{SfBn_!b64*=knX&C&tvMjgO6YT{9TW!cO2xOI=FuQ=?jnX zFC~BPdW^sG;QC|Dv)7-#=lU1!v7S83=O1gn=rQ#rkMS?tB+bFY&s`P1@ka3UHqV5Y z-w2-Fi2XBHg;#7O>#FdogNJ{8Yw{iBpSux!(z=>@_0~JN{OHxxy~kHiTut47cvZie z`mUSg2M*;cPtaFWQ6$QD+z7sS@W|(`rP%sm0l0HxT)m`zRMxM2R?o!sR*x7h zWHkJIXpHk#@12mgdOrYZtM?<2$kq8xv%l3NpCX0d-JxH{dFz98qPISN7t#;ocRuv{ zIDh*_`Xik0#qaLWIed-e9q$g^1L=W{6o(YqNGhbQp;3agH8hB6M_Qh{L$jm1#I)Pq zeHWyyQSqygwoU)9LE666Z$jF>73tX%gY|sqcOh-#K}3ryqA-!?q_8g?G`SbES4vnKUq^*zTksEzv2*J?Mcb3NAs=Y(WM$3CN==6uTtKm1b zIvT{U;&)+NC+zH$8a`;!)4i~*86X^+9rrzmkNqg%YhO2D*e#?9CK0X?-*-0{CtCxke)zcvTBm7`&;JnpyA-x{IyF(t%d-$CXeIL%R*+}1y^L-oX z$8p|<_fwFz;r$GxM>ltW0q1Ra)?{xq_V>D`<&4a3h|HXA959&K4Rww#5AU~!*51rn zn|r3`jlB@@N}Q~*H*EQ#PHRM5h~GV60Zlw}HZ!|>d|unLoPjwDEu5}z@4aa+vXih} zdvDP4dS=KO&07PfyJwqD&-RZl5yE&7_|A9~0{@cd1bMH1v%JJlJ^VBcu z5a^Ie?Ub+{M{VR zi*bGK40$R^myiGFKmI>=;oLNVOw!@p88U_ZR!HCZJAZ`sggo`;aK2%qLmEtCk=)3C z;gh%Oykw(82DC|Y{Jwwi`1Mymy6!OtS;kpgy8xLRO$mLZ#mv1=o^@g3x zg(H^-cP=kIaw+UwUUK9@8u0CL7_Z?iE^oiZ5Hn$W9ES6$TU`FjEiPZW#pV1qDG}6RIIp@_FG(j;1-vkxW(lcZ*h6zgv;g2sGPeF8A#d1^fI=|cMh}SDDIzxufsZK z8^A?UsqBuEbqo2b&YiiqyZ8Fgw|#SHS1ys3J6}ZSq%YDYpF2bB19BAgr~c~LS7zsn z=$!OL^v|7nIq`zy8{YlzP+1;EaJ=(HbWZvr?{@r#=RWiRh8quk{n*YI(K+dh)K15~ z?*E;a?CKvlhpz8@5uKC1$h7piGp{8|IDYyIUz;31>+?HbMCYV05~FixNG(K;*VK)V z9s9a>S3wha})15D(bJ7jDC{srUM*L!xph|Wo0WKiljzt->kepI4|DgVUI7tuNC>svOy?#G!Nul$m9 zQ))c3^F?${`a*Sl(;NQW#RqQ6uQ+L3a1fo7zFrBJb7v0MVZ7`!4}I$R4O=^3MCYWh zS8aTe(8zJ&LoqZ~hw=K!oiCzu($}}bW!s_=Uw^%N(f@Jm>$i8lh|Wo0)sQ-zV~`VP39J43!!a(wnrKf8bI z>y0~KMCYWh``~i!%q5)3asA`<&m8+QcfN?uNnd{-F6Yi1mZ+cn%w2zY?CW3dd=Z^( zTz_}x0*B{?bN?os!@B#oe(#>A5B(qpJ6}ZS5?$A}^$Lb1;`LUq)}EHMl(UyUzIX z)?m5}Y7umrW}(ZMo#6y3ms=grzwC_Lm#tvbIdrxbWL3)Hm1i!TQTOob@-9Hq;~9@G z&ks$pU5I!h9($;4c_xB+enK3%?AEvtg_DuoXl$HrQX$K_YU2z~*t3P++BPK+6kO_)!QoA#guWno0s=ddq0+d?{bpGK zFQ=d0c6Euj%}Wi)_2e)ZVSLjyc|KXPN_3@B*J+J-bU(|Bow~B=d~NQQu%38sp70DF zRMIz#R>sMVN_yZ-DtzcNaIFFmsgmxuLek@=Yt8pUmv?=-;)r*8cxZ&Z#fbsA-QaTD z83BChxZH*=T`q3ROxXv1S#MjkU#M(t3+Uw>dg1w5uWaIV9e;JWv|QU43nC9>%GAC! zxfDl_^-_G-$-Q)6Dz$&8SKKd1s#M5iGW(>ryVE2?2q)BdVP8;l*<5aaGbr%_0c!gh zF(ruD8M%+4iA!}2$EEmYkmD$3Tp=wK@+no`-wb0tPN?zXex{IC)nYz(tam(&a#B~=S4COL zNqJ>|H@tEw{&gNN$os&171c~Sy}ucF*=2z8k9fbE&MBDP)d( zZ~Y>SuNOsWU%;+r5v6f|TWU^@_gspT0iR3p%?qP6-yAI=lgo&rnBL!w0bPo3>PM6b zi~^mAS7ARd=F-J1Y$~JfU%F3_H=|H5^mK7QEvOl(AQ!j#+qC<-Up&w6 zXJic@XqG2$J9~kkQP#CgN+40&-wkUa`8Op_NY5@IE2Ed<7`57cdMF*O(WRt+oH5FN zE{iWWEv5Dkb8S<}IC$#wOTp#K*1!)iV2MTzANXLOu}u2rMy@IR z?mp}r5eIVIX6M9@!dZBp-e%{-^H%hCVch(OTlDsCyCdSke}x$W{K!FGZ?i*SyBjCH zam0yq0<+M0=qA0}?TBb2024Y-{;yk~q+4;joe3kjU;k;u`)9U##QwUS-v0*o06MSz z*{vQi_HU>6FW~;aKu7wytsdzh-%jt(;Qm|C`49;h2kCI$PLB+y%wgg`{N9aPh;-m? zr$>xj?q5R>KXMR*@^*S;Hfai-tG~EW3z4qr?eyM;uHS3^cg!-qZ>yL8I(h=a`)41( zVD104)gxWS+lBXO=zZi@LZN>_CdF`&j?L}#o`w5w{NG5I4-zdh`EYx^KZN_cAII{O z>kx1p#bYx%zI7w#41VW76bcpaBL_+6{m`vDcSzUh?1zcQ@o~GA|3vQ_PpS8+Q|OU$ zbpI*!m{aQQpHeS>O1WB}9}3Kk#;X~ z3O!Q(GN;hH1A6sS=wXB?^w2GOu&GbA2-xq{%c3kf3N@CF`Cb<%ps#;}Iqdg^-a|SgZG>{B4w|CnZmw~T(PtS6k}*UPWl=i;F&I2wCd4xn~oshR2vzy#}+^7bg!i?0MA)zjdy z)0cLjSc1^d0cNDAHt(!*Jf8r@oDu8I_1<#Ho5WETfp6AzrA5TmfKu3zG95S0D{4{i za4jXg=t~I^#7f;+K8VW3xM_k0t3|MK9zExjeBbu?Mq^T> zv(2ICxOsKfs0iS0l%lddVZ}<P#J5eMdR`7uyQ9E$p0tC!b%e z^mfse99b9UU1%H@$-mv-uwDb>izK@8qGL~rdTj*26RD6DWE=VFW&je^={08^dz4Y~ znxAzOV?|2@gE?z~sfQH&R)%7F{XR003ZtfJIf`VAdc9H;^%mG`bOZHfw$}^dq8M+4 z^+g=OZngtjbE$!gnhVI8V!Yy}6SG|vhmWMWTrqGRL5eB(G9!)y-p?*75l7Q|C8nY) ziqT{!&~5S~a~(LzM84=~?QEu$nOc6KV9YC(YJWv>sN&N7%B1LWg;{o(24j!pPbLeR zt$`uNwu^Kz2PF7%*ee5zcD@qDuwu8s`iID5DU|iFNX^@*Z4+HCH|yIyB{9k*mAOR? z7JviZls7~?VNuk?nuZ597%Apd!=n71=UFjYDA*Ir(OA}K`N~r2V);pYA&5Zm8x+^QB5mMY3yeSSV zPAV-oHChu~3frR6@Ap}^Q12q`rW!RtRHw;y85M1RCZmc0v$^7&vc_A0A5o8?Sp&jY zO2S{EoC2MFNUo_l~Z4T%}Trqifq=;6%r-XG4-xbPr3T=6BB|AdC(`%qH zQ?i+{Jzm)O%w{orwCEXVMs$0IuSVC6g*~3Ll-@wyI_;IJRX3_DRxKU3_2Dq+O@(|# z;4^)SODFrB8n~nSFyWQk0-x4${y2!D)DHME__HMjh^b+B&RLUAUT+xFF zql)NJ;es<52UZ^sP;($SYj~pH^`fHeQosdg1<`Z6!CH40(FnDOPCS52HamrOKN5EJ zybiuh#!km)_}IdNl+X7Q6R_#HR9plBQ^E4WF4v~nvfmHOMz79J3LMOZSvN-+dXEZ^ z%1gu{O3#<&IX$P!3Po}P!j8Lzp`_V-LIDc6(-ez6dp6W* zMQN*crYhyvTFOrL8%0wIN;9dM&InB@!;5xzyjVoU+>mY;WkX&xJ001`2zjx$&;hK* zr^p{C)?Db_R4)n>qz!6W0KIMgEEat}4j?z8tK`*jp{*CDnV_^xvq}Obx)5f0-V@QL zOQZ&6#*)l|8-SS$XnrF=#MkQs19Tv(B4ESNW*ZA)uta*!m>zQYA7PhV5U}*fFkrFB z3Af-cS#?q6#;{akTr5Uvzm8N*O4TqZN)s?$s3|**`V$dg#4XS-@uKNP3`-T`3d#~a z_bpS<8q7_rGOJlgNoXVn9KUq06(kVXw?Ut zkpX4(JQE&pXa-m#o*ecH6y?#0t_qBBy(BhdS?wpea)>bz`3XPU5B3aAZRX&x}Ux{i{SZz!?=Yu^<3SwZNbcf;F!Ami(dl3&aQ zPgA;E96-$u7Y>amN7>j__EM73E!h6!av=1q@oBo!^Luo+%mYlm;fC!Pt(~^LJn;#m zCznj102M)71hNz<-4bN<)rPa)c-Cuyd4tI)?aZR3w3T_SrZi!+W@=R*Mq?4C3||e4 zy|}3IOH{_CipO#mYFWkzE2y9+EefUvSD^K%F`C&k{O>ER{7UZUZSZL*nN_EmvR7iY zsINf9wOrTrY8@AiPQsO;)?HQHObqTl48yE4S7Q z>0}thOhPXR(%A)-ni$GFpRNc>B5i})aM){9b5v_W`{M;ev6XHiY6#$LpuL(pRWrkk z$nuRg@QX$8$d}uqn6pt6j56h}9z))a^Pnye0fPwkJc?R!sJ%OR$z4qGB~B*jr3S-D zvZF5y1|WP!9WgI(MK^0uoW&ZE2vwPM!TTKyJ+WIVm!m6Q2GfM2Hv@_jDT?$iEGnK9 zG{#VNTjQV z2Vj>E54s6+1#o|I%bFN*FxiL{GixXNVHWRXjv~mMHbr&OgQh@ZM}sWI!F6k5ga54S zqfgY%S*0T43Og}b$jTB}T3glPV(w>|vOy(8ty7f?eS21wGB&?h^pa{I$@rH+Zx5f~ zc;X1zj#A8;YNpans)gXt6r2UX2jAI(Ao1At77AiNERE2hD{Z}NQDFhLLSfQn%b;?q z=ftuH{-3VXbMYC79zKH?Y@=eZ)?gsrY!CAM#-KX3*VzBg_Tc7u$M&Ge^RU~F?Lj`q z!(Ihj!_GbwQsnyY#2(Bk#8`wq*pXi_)i!kkOu+ois`gB=Rn&8RHXo5@=}V z{8TcSGSlT{)vm(C*UJ-GDWszm*HMGl(z z$JPh<)TlYvRdX%$zVSI2#)P;~eKzV2VoDTtLam$Zw2WlcE2D+$&1;EPEnn3l_?RQ$ z+5oIJKa>sLPSAcf8ZqZAJy?RlWhf6?RI(0s)jZc=A`}|Yq6DV3)?|{eQ4v6l+XV|G z3K6LoNExRTPl#>9s-jnDD$7N)SD5!PP@p7QoS}EsG&d_3=V3h;p61qN^wl_}&MsNM z+KWcQdUQI;jLJ;Kit~QOEtDOKW)l&7#}iY`=L6n>@i}F}dedO3GOZ@XOt(5pTH!fU zrqXQ~4=m#)(P8GSC`(~{YSuGg6C0CS7@(q@!7075g`Q@_9I$m=6H3$sEVv0nX;vk9 z$-k~06Dn$%3poOO6ye{jD zp4$Pnn4l<1Z?NPgNv2#`Q@~ulRtl^nhv8+cM_aC#7G%^lqT3aOsuFjlq!W}ZMOz9B zp~+{IhMZ5^c_q5QplMVnrumV8jzdDN>uV4=OP#E~UWgd9k)(o)|FFYKslq}pz&0)U zwmlLX_|scAZCjS(oqkh?xnPJz*b;?C178XO-0#3dg2Tk;VWoD#{;g|zH@&FL!vnSw z(-m2!<%JWg7JE?)J|+^0ZowcTr-KEP?lFmpDN{++q9$FA721h%o5S}JnV>sG&oNS4 zfnf#ZK1)v7X z#kr6|#2T>x??43<3q%Bsr$66tuDw=fo|Y#wTg#TQ=U#IfVHF5t^!`_!^KZHAoq)j# zM!-pzq&U`6>!K#S`jInq&eCMtjlRBV(&PL7eAyTKwEU3eDhUhK*Jsnea6R?a_+q_N z>R66-3EXU#DhaXE+bh4AX<9~cNa}&yG|%beP0?Q@0@C}HKIyd7*EKA;&PF>oQ6XxZLZ9PyX4h5nU=;;g{Lqh!BiHXU+fioeyfJ{B47f&@r8>(d zvY+qyIEF)`7-=sjtf>ZYfI@3^b7sz^M|i&Xm(wZkOFZcluZd z4(9AREQZ6jq)*&+LK#={7f<-A%a6mSbO>AHK;?T)$n^5t;FK$+N~O-n*pj5Nq*s$T zV7jCaT3{a@8K3F4I|<%*Qcffi+1*3Vl`UTLeHb?*40 zR^gd-TDOX4RjRb9SAM&g$R6F7V;Pe!<+dpIHd$;LWs<~ExMiwX7_#25@}y1r8khWX zqaY!V;FV6jlapE2>13vz za3$Gyn$yhcMgOYG|Eg)oyq~&%73xEJYU$yDG#G={y1&bAx^1lotFh62-@VW`x*j0) z|MV-j-U;P;>H&nt?oiE5|6`WBes6D2Kc?}3X<;7@6L*+(-9cw%QnKb#_2XpCeRGs9 z_o308dg*}>>Y?9~tBE$0nc8gT3%0evye_NRkw(|A_5D(m@Tz!&TTT48P=9y%?6&LI ztyu5~*>m`rI9|)THhl9n2hd4Q#(v+np@y>iaAx$+PtiVj`}8&UQR7X9?r3`bnVi6F zr}zDJzU6;jus_wZ)*4y6g|`z>K}d1`+u413pHlf)l$E@H%i&{7-=A=K0zU|^UVL}M zH?_lXk@hZmG}JO6MC%MJS|~wG$X<>n%Hiy#O*Sy!q1 zgR{T=v6k6jC_N{yJH@$J7|8$*ItyKmFKTf6MA5M4HXI6$% zMfFyX!YIfbkm1mpwk|Rgt+@l(zkX~pDQR^~FV^4)uOb5vvqrLV&=gT=SM03HqDVGv z=^cFWVXe)qgc`;pX4F-s1~6xJd4!$W36NNN)gK4eMb(a%dgGp9Jc5Eb)#7LEfaYU6 zrY%3tVp*a#skWbK^8H!&0l2Ka)B}@(BfyIG@(@NVYeHsz-E!(tpS6v}lgqs{&Dflj zE&Dz@Eme*6+3j$k}z5(4G1HN`>nswo(`A~J;;E&JndE5xT}?!wra|c zh_mC*6}wAY?qBr9Z$Ik&xn%eIq)F3n(QJz(ex0QTRvzj!e~@4xQ< z#eMtEKexZo^|J4Q2Mb8}+t~E||M2t8f4IH<`}UvL3;urm_%8Z|sPC=+JfG7aaXbF! zb}DY~|9Tdt0iyfUad{l;DYq zI|Fx=^FwYW&&lJFIpNr{hlP?m3S$)Q=I%w&!`xGo{hHJ1BH)}*D2z@$ef%-gW1cg; zuqcYq8>i>JC~cJR)8iW0R13v+n#ZiVw_2~XGK^|ex2RkWqiQr#{diT3#?AS5pQmYy zVQ$yKBt7{|VS%A$gr;7raX2Yn%tkLJ8?f!5lzmOPHsQS#i_#(SHGL$vYC8CJ9e$j( zrt1s3mk16>?noEaZ`u3cQ3u07eF$pYotg`^>-z;K_3crg)quIUMWRY=e|zy+7;4Rz z;wmm-4CDM(YpwCHH8@`6&FE-5mzCwq>Q=8tF?{s6mY{&Z$r@k)?-2l7S+6^;r>wWsskQtu7z)F@f zOP5k5ul(_jx1wXBg!12lo&FzueTdw6`sHdfWmN82R8M$}2jm`_A})8RbLQz2#JgqKEoq zFam>LbO6?#fmH77oqE$04TkG1tsKy~Q0B@sJD2X_v$M>z0xr~v<~D-&wz;sZ$Xam` zgUm4&>ur31`j75>#nIcxjk;Q`xM^tE-%j8LW9 zu~l=fM;~*S^|<~eHuiRl)`&`@?OSwV?7ypn_dw^s2_fGnU?SACsr=W>UOqINYJ9X{>jOOjN|J&%v3 zna^{LR!W-BAfSRC3W8F)$jD3>3HQo%^U~Q4AIsjc%XvJM*Kksjs@G^M7>#yt25jPa zZ8EYQ1I$gU=|n_tMv0-zZ7x<&j8(LHTz>j`B+XmoZUz3vC#s0Qt7dgp=A&z$a*G6Qd^T=)Li;u-KKko(TERKbZMx=bTlz_ zyOh5T9{qP$P0FVEINN|lERH6<(HOiKCaV%p(+>EZx{h=?(o2FB1mR;m8^DP$KarzC z3pf{V=k;n`s(gkxV7QJ}$J}eaw2R$xi!mqzN3nanyv5T=ZMD4$0vM*g{_@tIU{SoN zQ;kc#{?pd+k)6fLSkVFkr1M=`7Wy^O|CQRxawnnz1cqkKrs1!OfHgu63Q-vDlz?}R-=MxRpum1St~MdbC|~xR9woSMj7ac^r46h zSxIH4T{h+(JP_ODY>fP+lj`TmtzgFr6AY{6;g49(f^a?T|>?gvGBpWG+L zT4^>@7vN+wV?%n}n-<$xdKYw_WrS1aw>h?DUfxKy0O#sUO9@%u=^ew3F^i@_;sy75 z=8QG==21mw%A~vp`(4m(YlapfLjWjC+c8|!jlMFrcDv_{v*I~4bR%Sv7YZ!bW1E0C zypI~@CYI@MIO{CbLKm$g`$oNrwm{n(m1R(mDy3Dg=-#>s>n{ts9?E6Ov|5Elezj6y zPCFe02RCL(kBbA_S3ZWWl5`8&>f3Jma`}+EQm}#5(#Mrz1#f$xv*55KiNe05cD_{S?=wyw%4Ns}70Gi9`|TfqFF z9Bxa*CDgUcLtH#hXVfa?Zjh|L50(_WRhPSV#y7W0j)+h0MqAddt1}2A#Hypw@0P*B z3(C_7jnurQ+@n>v%+}6ry?$@l<`m|(>!Sn`%KOA;U)LTLL~iS`Qdd#5ncRQY{6b#*lREEJKMd%_9v6M#OI5qvG_Mj2 zFYq=0u$2&l3AI-9UhdcBxyydCMiN`Afs7ampotjR^3Pe0?XPPtl9 z^@!7(9xXP8DAZW^v`vwKorUY<@j|!LXF9mg)OBBXSuFGyMQu)joq#q|Zqgys69c*@ zno`eZhYY^L8+As(Q7bmxK$RXoMW3h;5RZj)naXlDc(a7u?Llt~nD#bhwUeR-@mIV( z+SAi1n9n+1R8@4*&iq>KS^w`qu9lz)=c-g?h5P=v%h&uOg6!c%rY-P@65ejSa^vlZB1zK4UK4NP+*vLs!0A!VHD4eA zTKE~{irN8Bq&H9leG*KDiOSe^iYU=`SIbROENnFMb+GK;o)<@Sv$WA|J>sJ(&jI@{ z4M)W88N*1%XS4?`7EJ_f)0RegudXQApdS;}-K9bZ!TCX_y;31%ORC3WM)eQ7IG@*n zMC za!3KRJ3y)T>89tEG~yfJf0JRdwlg?UI$nFxFtRE9o`OSY?xNvt-O%k90{b7f8C5Ef z)cgUa^MxRYT$QT+&zQ>GR2=K4|JxTf3s!z~)OXLDHVQz0ha%Mi8{(zaaQ0^C zdv8c38+xq{44XR{<}(lS$QNDq?}LIrcPBZ`Z1z;$)jE|5L-#E$A9>k%on5J`0L9ks z?$b{{M#}H#O^tp^KkQ|Z%|L1@-D}3HtKP>LJiOqCcHHqUD&;FPoUEc?F;9<0YA!gWGy}t9E0>&M zjn)%Ls6_7n5`VY~Wy-CKA9SNtBwaf6$O){XpwYnoV!Ce){&d6Q;VU;dIQp?MoFsxa zbbAyTkYtB%M~_hOhvCFIE)va$d}puyH^t?n(~lDy0|@m9(F-UO+War>x(tq`KxV;!rBN)4ry z^6RFEmj1H*91cNAZA5FxUx}`5>1aCKxTEs{g~4Z#xYUR6h;(&2 z6)no5w*Pw73P(I`)J@WDxNIp#HI@)jl@%Vxj;4PzQJ)-NEEF3APgLT3JE$eOE@EwE z$Zf6a4tPnlmzMPaeS;{X)ns+9#Ic<8-0{Iv00!Io8eLMI(Gc8mWTdrJ{;TUxq;Jzd z|JMVIV2&s@$;1%&Gfb|iN7rmq`|DF3S!bm-Vx%Ye1smuAe9Bzwrn$*30Z2iF<_-t{Ya0&z99J#h4 z9}iF)*pY+Fb_jCNl1q(UG-&B#!5{N`1Yv0|J3d6OsGu`kVoAlR8o>4f)Um&mMbJxu z1X4bprn$Ndp5GuN0pyljIyrxWLWUUDU-ynizi$Cwj-J~*7np#`Yl%OCJua(_bZ>t# z0e5&a`gQnakCje5m?ZpG;(fK`wthas3Mb`Z`zS!Yl;$3Wo*zdL#50^~Y)dd`Z(K8`&%-7p;Y-KS$N`}O^ExTk>CMh~cK-QrN3YU$bz?Xaq3a3&;9`$KtTrhG8T$^_D-XI&y>)c zj~_Qf(Zz}fQeww*@kh{9Ub0dZQ=iS&lJj5$4oth^!Le$NFk3C7{(0wmldtvlh?~rwp}Q$Z;4qR7A6DK zfl6+WVr9XuH_7OuwiPlrO_o<77%1Xxird3%u`R(s&Q(%%TV-+B_`$CK&QK@^8kVqH zP5^-=9U&fei`GeF^?Qsl9YO$MBlN|G?**cfNYJ^L?d>>5!4czNgi#x&;i8r;NO=KF zbY-ACn7Ozp*$TsW`7*KzO2-*F*OLPd!k=?mqTJqMkQPKE6!y#zL0ZjHr) z3|=m~l=&zfBY)CWebL^t|KdsjAEiSQC0c=+M&Kaz{pA#5y#=>{Q0z+OVO~1rLAS>X zenXlR3Jd_dL$pfRjNcoCym`)(Yrzp!y!es4tyS&GlImO#5Kqcz6@zeuJ9ANphl-Y9 z6$a`{3AWeUhFwK!E^RY*&n&93Wd?3T-zebSXmdwr90#xGZf)D0; z2{%>IPU21bP_*8FDg(_PwSYWYwcN_?P-yN9bl4Smie(5LewMAcaNyd27PEt9BNCty zSlVv$H>N^;lJaq>G^)LH^AKGqU%on|dWd_-z33(tc0J|V*-pv;7R_O7{E)U3=Z<5V z=m@NV=jEMfhA*o6Go{`>avYh!c&zWqlp zK%M{B{l5?DhkxJx{@k#IcKZ9HuL;fg505w2|Ka}sJpTK7#{Tcee@%JD-2emnKA)Td zt{Bh1ZyTw??dIPAf3ZUP#tnOEN~IXI3tA=k{^n{vKGA z*qk08WAAxt=*~VYjZ++zS)!Vpv;I%^NcC+eq87dj+}PZ*yoc^0D4V5fcvo$kU$w&d z1#7vr?18s@rp-As;Q7zT0P%skJSCfaTB$(FfQPnP^o6>>z_P>Ed5G^L!H3_tI@5D| z*?IQj-e{cz(N;+j5)}qmuWw>6K(u8KVScveweNDJQuH4$C<8ACb+ezqmM$T$@&_tE zN_OPHv2}b@%?nW^-Mq@$QcJIg4-zAlZy`CH_)?ubup=F!t~D$r_&*jdN=}%lartB1 zvq+fqc`)o4i0a6vt9p_4 zrrzZ<+P)Sns>uKlW;Ngl+S6!rU=INcD6`q*MziYN>8@JqPP`t;`$-_5tibbd_JxO1 zc{SRy-kFhjs~c6(?B+0TIfHg@_V8{ajIlNqFd|GitsDE9ciy)ECbZls{q$^ETQD>! zvyxNWJR%%w0WbyEyN4k~&MiTpSH6sCR#jh% zlU`PCz0t6Mo|el^;w!WQhr>%Y)=-QXGkN7dH#(6E*$Cpu2v1!1#YtS3_#fE!s+@H-=yJXv)*t~FEcuHvk zUK;f^vFM;_>+FP)(s=Jo3xj)#HxLqRpO)<(BQ}0;!egCYveD*7?H@%8mI2B9Zq|8xV*Y3 zZZdPdY(~wlWB#OrzRL@kO^6)B2E6T>(|2EKyR@!u`ab8*2ruL`tpT***B<$!8Y8U^ zV?^%WbYVQ{#8>@wZ?J+ATPcou?YAaBX}oL(?ask4a58p0pvx2($8J~mQGI;T86aL~ zjZS>)OY(#FbYi(MHoz4T;UP0J2WEVel1E@cAPY(>{}TlvAfp6bGh|$?$`Szh0nBt2 zO(&wk2Nl%<3}(%LF;9Czdgk2 z0_FXF!%_M4%tG=lzlTG)at1B!m<3JIM~a?xt{!JD; zTD0%80FMM3)pE4bdo=e!JEakhd>?cr6Z9e5Op8*Mb!_B&CMLuhtI$NK`7JtzF1;BV zkgspnm(A4-#aP>ipL|Glfv$+sLpWn=^%Gb-X}*vZ%H8RSE(wG&; zhri+j6UY)L6`)Sb;yfT0q(_mVzLSGMm1fROJOg?Yp(f$vjF19fbQ-7NC3+d&quM>n zbvGuH980s&rTvsWa3yj+S_PP^#Qh#mXh5 zC@j9+!)Fdn($$aR?eWZQnxaIG>K9@b$wAx|0%gykCCx3E7;jr3F}hl*m8@X+{~}XE zuo|=|6XfcNk1>>cwZM!MamEK~3&Vn@1Ghq1ot!s_5?y#0h5oh;hm2qeM=ylc3s*zx#D|W`~do!DtQ8d&?MrXAeU^m=Z4h#`Jl(+(jZhB7F-Y@Y! zY#>2CyTnH3o6^<0EG_5ij1fnMJFhu8n{BiAP8Jl4?2SCu>+)-Rj*PTkuE?En0oz}W zFFdGnb?k%_%bv7YNF)^NcW4x(FfJV}JMYH&S|{H2oOVleTvN0#0|no+bO*F@!B|w9 zF*_-_;2^*?B~6sabUM^Fr~%g<=RQt+*G7?VS{r@s&HB1~ob}aFe|XER|A9aTO$?jh zbg-4g&WoJ9H}m^fk93z|_8_=`G?=?J$eowzT!y@>S;w7BL4#&f^Fup@x)d z*9mv5TXf;wRRDUioTh+flT?@=aBd>G6xbBT7f&7AZ7d|C&|43`s#h2WCnKvk z*k|S5BQUD70}pDji@XK&O))_$z8Fy+D9w7HLPE3JZ$ttEP0MtE?W>oDy-ez5=cP}& z3crd@kdPLx$M&AZ1Pto@_+ndg6F>I&N@F!#iEe1^&V0*Im+9Ws3_Li$9oFAl!}o;C zP29Tnm%<6=RcGi{1sENvIuY4f03s_Qz=v;({XN7mA& zRwNuBG$$iedLPottOVIAR@G|s0av8fh^btb>4rP;kIhKM%^}#>3gTWkcpYv{!@U0~sBlSC$)hJmn6R z2XaKnh%Ww&TNg0zsVx@jZ$0I-@ zv7_)Cc&e7P^~L>lWvM=Ef!>xJ6lip=np!srEF1p17)*>qFX`95Dm->n7+ns^Oj`+S zyR4vh{hD8(q3F5Wa9M#;9yTuJjH92z=@j8Eyv}jYz%C?STNDc;=EH&h#=!LvH${|p|@7||c{?l#hV!OrruNA1q z0K%RlatNkV2$c&0&`&_gBLclz0A40`pVnnC-NdU`c^K1z+hYsXdNuI(v;I9@mdLK7 zUvE0Za@#*|p0K}`Q&e22!!@}Eo@3+JALQov9{PvJD!UMLX2Bq8N~mUA z7ZkZrHtI_7dIaM=K9{o9;?{z~}n|BXIr{C})Z z`o7*j`XqB_p_lqMIRT#V4*io8V1(lK|B60o*kAm?%e?7n38uitzo>9e}OV z=e&CGkRyeO=0m_Pw7ok4|W7Yycgu(I-G5;pZF0 zX*K$yYQ|_%7+cVVS|~5w=Md#Z!i`%5S1%!6Z`0c zjwQGnSK_v7vdnG9wRaRUD0t_tzX2YkIUenU1wjN*(}GN&|AYo1~x7Z1WNVVwRoE&}YI+q&{cf`Q~oxw^C~_gtK(&BMLfr&s7Uz`$%P6e$k zyqtWRqWPs!S1K?$=K@R_aN*rp_c3}%m5cIEhJPXJ!Vh}%e)ufd*g4(lf}l&VAy00X%=Z9!bMm6Ed&CID@RZG#$bapZMQ z$4h&|s*U7e!ne~81kvM?+zCl)eJ_&&!w0Y)QmP?T`=zve`We)u9;jZ(r2>BwN92ql zcgY<-lhGW%6HB>akmPwzQ=z(wtUw0?kiG{YnUvv5uHr#r zcA$A6O{TA-dqS)=Vr-1@&<5@rmPYg!g2`bg8syWwZ7&aEH?W0@56Ov4#YfU0CW{yD zxZYNI43BwLxnE;cJ9=~c|2tp3bZYD@6`7{x@o_rv`gzL2Ze&sY?SLFC4Yfeg*$5{XfD?o zr%Su9*bPY#{h2W}9)$FzIH9SpH};ThB*hIMhz$@nVx^vDWHX_p_a@WdKCNOOE8R^9 zirt5^yW3EKdd!*%^oh`z6`(WHi~R)k+x+7wx#6ToVY5d2rP3REA!No8nLQ=35N(mS zhUoMzIonPtk~r7_t^MdTJ`A&&J-e93xxc%Mh((Ob=&NSK{_m^q znwZ4ZUC&j7kJp_JcOA$6ZGcC-xx$xfvi?@W_cg@dD^x(N|B7w>hI?s9h~`>7*rsl$ zhtUjj4c?(=mmW;rkXv+RP1+p*B zAv}T`)Te79|5|1T1X2W2$Y!t?a9^=_i{WGEM1ZN=&#!g zHJR2UrVkxXZx2r9OZY{%P`x}n;F(z%X_M6|5HfN=0`@aRLQz$)t7U&u zIoA1|C!~B9yvD1>0@mdTk7c`f@s_%4aIj$j7@3Mr1(-~%ka9r_@v3NWMOq?2I5l~l zm>gk&Qli1aZ3af-!E)U;XMPrZ!9X~nI7?G;;1OR@apNZNcdD@kyOmd(gxCy3eTpee zE{J*7G!|Bq#$0@M=E_Z-U+GmT0`~l(fhqYPQfKi8GyEeqySm{**Iu_)o7VzeoO~fj z|48^7FZwUcaM&Xuq}vVx^jSh{MitMgYEf9TmPkVp1t>K^H{&hPA3irhnvy_K3S*yq zOOr((`x$s29gN7@Yh}Z(+LbikJGEjli@2%uM%)3=tGiVZ{`OpPEH%Gf>+u)$ zW2?~Pe1Nu1(GhpEN(UeZwY%`i4~8tq22a3+R|7KzmkpT`fZL{ zl^&E_;~dKF(OWNgx}(n1BISqOGhkIJeQJkuZH7mwcMd z)yz1LQMzpwKDNzeDrI&d!bK7_(_9# z7hvwJ0zDUyqpvp2w+az%I<{&4WPjv!Dy~;FZ}uf_{E)xgIcTy|A*qN;#2X+iC1#aZ z*W5hm*Oih>MrFp$3v^$Wl_AE(C01kbSb3X;7CULJyHKi-E5jv z5J^IN1U#wYR!BumizQsc?1tz+UalnoN`1AoKx@=FwBPOyvg`dWEkkgCVKZZs5E{Da z)2pjBdy&C_w!qk!m#tGaI}>=mODK0poBMJA?m4MDfR8k^Cu@G+5mLH#Jli|DFE?vK zoG%2zfOKVPO+}%*OMKRJI%PwHtEw3kTx0&0_ql{EmavtDK61>N=QK`G*k*|E%{Ptw zh3KKuJ>>zgai==mpN3~|IvRS`TXP|w2_Rp-IkEpcUm%b=O_TdXKeBUqEAMx|hh`yt zY`skhFgk608~{F&qd^(mX^#htZ<%k%lqc41npG=v+fdK5v_)6L9q`Z=Rn)I-500i2 z^v9-Jb<2Ry3MlGj?u0gSJIu3 z2oxm>qz5I&xx=PGvKostdSNPNvOstQTOD68%lsF#iZ5XnWPBp!w z4NSN5X{vAXF;QWM5PO~cV0+Izbn%uY6dv*DcEdc6g8$%Pk03HkINM1A>kxSJ%4Q_m zxEtrKFyhgBP$r3Z51Y`**Vk@Js?3Y08)8s=17Nmz9)gk4ikXEbiW&{0+)o^O~`*FEF@1Sr=>61OeHjgAY(mT7(V)?w%oKK|lZq`r9 z9hO&|BEx)o)E9A8ELgBhWr(OxNwrlGOx~SowXjERWR&jcWOwb6a&5yzQFm$7H6TaW zM1*Rvwy~B8!QZ(@q4*bwxp|GPV($(?HWjKLBTd()&udW`F)geBn1#~VCmUt~)_3 zZq@ifLz6sGIzsm5!ykbj+!jiY7|NHum+MX!F=1@S@C29}61HF9&Ex^zC*V@|Pwzx}T+A z^Z6G@9qk{@hkz0euTq+8pn_T_((M8-OR+7#10gdppI#ZNSs7_hhy2wzTGM%XJYiUz zDtS};oGpl>cfaOf8n1KXxwIDR774AF{yb`MB@g19)@-qjUhDo(X%70abFtkS(IN|; zzj&;TYtc&mlrUI5JD}&qlf=P7hA+L%TYeq%)(SSP74%MaCzg;Tibz1Nb0Un$V)95A zB-kz7vTGp^&Ir-lC$Ma26kFJE_TRYGNM`BaGtWjsKk&_39b!h~JJ=Fd@NyE=>;h~n zL-rH!O-;WtA;KZS1hG;t3tsM6n{fLAzqDNl}qQzt!ZI-k0kIWC->EE4T#1 zFcT?j({#OQo=((1n$JP^zqX8u)ADN@{dc%5gDL+#F5CV;#$~^+_YW>h%g_7y2bb+1 zMGDhDxNQF_ZvU^~vUY#@2bcXeKH~8Fr(di+!4VaswP6;j0!58Vl->3t8o07e#(fzS8v5d zUr?+9Q7IZK#*X{jlg1q{)^Vqz#gRy4(xqDwuYyfwu+}%XZP>r9W+Yysu0Wd;`E-(p zO<=MODIsFTyd(vWwGUlEZ>BxkCRQtCa}ySAOi@0}%yXtJ4Xqru=txHsTr&_=P*W%* zkwqeuA)F~tlUj&s9+wq)H3^;TdGLT9kSy!U&${|J88}9BY|ya5x7k>lybqBLu{0cG7giFK5EFQKGp%x zEnNwE#e#Oqwj!*hnDoxq91H`%VEeIOlICYeRb;`^W`g8W#?!CG0nux1xM;q6ErtuB zkdZ)rN6Y}OWTB zRgsa=`LX+XQML_Ki_Ch!d9_+ki9{j`-tAm1iN$DC9E^I|+%~NNY*%K?$^RY@RI6Tb zAFtkqfkXL(>TLO*s3J;gL9+K5b)%P(a0GA!a@E2xm(Otd^fmM?vOmD&28i3#$BQ+M zsRkW@TzA^3g}`#F&mXw&>wEfZUac>5@niV*M9L9$AeW&t#t#JJ$LAvbSK>N2*~qP;_0=rS6Su4wg=7k4L37ABPVnU6`%G!?HIJLbh|eA9&+b#i0*ukRsjB zimVWIb*W@*_#%=;NI&iA*d*F-Z@N`+5W0WChd_a}0Hc7H9+#lrzDO(FgjKPg>!ZV? z`4?o|x(@zZ$@`LLH&J!$q4O*nZ_zIw^lh_h*H_^n*kg-G^l${;w#837XV7A6G))Tx zkP3lW2hUqW2(HIOQN29XELE)~GJRn8 z*sw$T4uLIWD4JXdt8$IK+W&F-Z`bCmB7uvTyc3snC%cb-=JbkqUku(}9KKQL*pW3~ z?wx{_o)xT}^#z#BcF#p7d4aVam5uO3FMy}-gy%U!iLiy->fNFe+}Z*o$;7|p8?^jdIQM@Oa~YD*vbSBO(Qo!$#EF=W2NYs znm%>!rqT8eNJm{tEH`^rnLX9P@2}$Pf$kdT@Ka#Wt%gO$`t5^!>yKLj#kM|R;xsnB z&g}k6I(YUR8EvCZ4hE?4R;ykNPRJ@oRN-%;X4Z%yZSW4Suzrf^539C^7Er|C>l047 zn5qgjXh461(HP-1>Jvan=8)t9My-p5&T2<*^s3o1DM0CIkAEpjncJpoE5PnHU=OI7 zq6>UktWxOrz--a1{vtnbqc7!=Z8-NzEsli5OdP$pT8sIcS4^5)1g}XBwO|i8~L5I(fBG;bR!YNHK77+!! zb)2m9XHy-YBI8C7n0f>le35Cfz!HE~N&xRjM-dx>?i%RD85TErj1eYs;8+(Wj;O>s z$Wo1U0veF~ATU{oLLAOw=LZC5^+vuzyp?>s6=+8SNz9y^3wfhKbUJz*4h@n&2;()Q zS~Te`+)zl5Q}%uR_$T^|ZJv!tAa+HwgI8@=3qQb-&t($)5xrhK2aG;A^Ug)8nGcBJ z->sN~U2hl%^FqxEYChnNG$Otl!b45kH4z!=pMbPd`ss;_ULFVushsPJ z4yUrNX|evg=;9~{lv~0*;x3RuC&ry-kPiph>wN}@uFu}YzJs}fPCs6x6M+XzCCKex zjd1BN(jAiSLtq7)tN`&^%)3Vy3u?l!m>43m7D-%?tGOtI|n2A>1h;(Dn;si(*koV@*LLaxn=%HZM-MFN_NhxCpg3#dx=22qBX(A0mcG zoTWhl;0x8i64`2`DRk8>(ciKvn$L=}Q%;!vBeA(7GZoF$0CV0yx>=6-_tklO#Polg zt#+Ig2Wmtf&gGb>dQ88+I*7=nAZ1So28fIg%8l$10@K<1zv5pmWzH?mur@||9Envn zc9)Aerz=1N`i;|qbLCiRpoRb)t(wpfF39m&Sido6Ui17$3a^+K@WrG#t*XgOIMLBP z6!h~#dpohra7+=1MI4}^Q??n@bEsLY&^DDRt)|~CPPLyf zn}_Zr>U^cQ(oc?du-YxYh@8<7Kwp-%wvp@01I8O&>WLa z$AfD%jP?m44B@`;e#b<#GrdlDU)%`sjBDT*r|SKyQXt3HX+o&-TLg&UhO5`tFf&E` z8>Ra>82cImB7S{=^Tw&46XczWLre!V{?_crHwu#}ppq&J&^$$4%rubACXvP<-WUJrPJniM$hvFr6-^-%1Hg|6ArOm)`6!8aeOF ze0s(f9?gsXHEmfcRI+rByi`4=_j?+N90%a@ag;8M^O9mJt~;LkbVZcSfBoeSu0>yg zn_p*nM#o86h7>kE4#Z?Ua#!+Hj5WhAgMj`hVm3r44aJ$RB%t#1m0y6$o)o$&Bjb>~ zCB)BZ@=a?xaR-syGFYcsm5<^hi8YLb1ps~#ou{kJS((s&nF*0`c-dz&JmW{g_SkR_ zO4{MvXqO4+F3CgzQ5ux{Xbqe@I?B!sjFY|Qp&{}(;zlO3mZTG*5#Auv6tx*xk!S#s zkgyGYb-|)F{c<{DUlhO(d@cXcC)j3M>yJ&aE);;$%O1ZUYqxTrALoUKk36CE51%~a z*f#0u*Nu0G2!8CVw|UqEr9?l2PIkcvc`>NAkUbF9KFSbJdnk9dWOIuceFR*6P<6^$ z;BnqFb!5nvY5VD11;4xr9wupUr*{R|X_aI9%Njs1^t{#b*Ztw0*sK=Ra) zUUP$18FKwo6220E+NWt+{=4n){NI z&{`6Lb?7s9lfj!{u7vhwLnGX*_k+wbIMpdYNtb!v3*(%&&f(zKL+L#G4Y4(9K<5*s zIaBevL(ij1X5$@EOejik1keZwtiv5G!&i)~u1T^c8;9t<7!ixm5yXWU8G#>vRcyUUFIWEp zyBx&p$|Tjv$QW#kp1$r9%>k+?z4@DcROz>2>FUZB$@+MOLl z$x1#x0m`FzuOvbg0pxk}znw7^yuh_Z$RTQjc1=`m z(f@bxtKk zcFhV07d3qy+%&OFn zWfyH(3p@#E+b2Fvfd9<4#I_)*=Z;dI7`aSP5ebG?yv(*AvYl??S-VMOR!71a9rb~> z9*(euE;4V2ekY{W;FoOuNmi_q?&t+}Rgpj}-oewIAZ$Wj4Pz}>@ZjQ#$pwFO(*$l1 zENS`Y6N$WEjrFOVE(TMQ8K3K$wfZ-?jei8v_o=eAua6aKl9w2lalYEOC{In%Dt2kT ztr2weD!b=1lb{lf@Q&MrVF9Kc4oCgj+svjDh6>rdB(|$=J`$QeRu4|KN{;{f5o=S$_65l z(N%-F*#h<_85Ct7=LgEPIWNWMscI-t$!ySQBXT{0Z;F1vBuEQ~vf~WJ%sDw!0`K1+ zHh>oHLEKtV0_F8tR4jE#t>nU!KIb-3-3ANd97!d%qNlT5*jj&=QaBJ|{v3!@S)YCW zzqcpcS|Hq{O4bA0C?8O40Zyc3YbjtSs!P4gA`!frfR_?-y1w^g$n*?LKh1Z&>i?f zvsF-pSgX4?CS@{=6>`$u+1#F7!Sg?b5%vZc2R^MFkA>lzcWky3DRNJ&_c&y0AWpN(fM#rjfM`}yK z`j6uKu8hc^^j1unM*E!!BMn}1F;!t%{9GBWC6W@p{(5B6LVgq-^Gjw#WEFXb-P3%I z_x!r%u^x1o|>5iok9@V-$wj8F(7*6(OH= z6@c#u>dmQ62xSAtuaLR05d;9)!>qi4gJAmsaiH=ufP!Xy5<`;cz8SPcMB@n|Hv+y* z=0u?!;EyS+FLA)kFND@B5?*{l4VVx?P-Eed3C8p+I0ec?g6CfhaLod-OXu5!JAtSa z%MIaXpyPF#MuaL7D?3cD_T+$>rMVnf%o)>0UGZRUQ&Md8>^>U5T0E;rj*s%~3EQI_ zkjt?7v1SGFqPjcj(3D0in@_WYxx>%xH86sf<`<$z6`Jf%09jhHFe;v+U4E`i#!@Yd z*ql*Hz;a2ZlXNjuusIA+%-55{}v zoOup8o5=98+6}LluUedhC=>04`$O@K5if>ivuPs5m7*3vf5S&T0GoFN(rkE1qZ3%)?|LNQ#b zEw_~JSxIaNL&?o|a`IxVP;kDWp*akI#nE1D_c4V+3aNyHeqWR6t z9~g;lB%dyvR`5(AAQg|}bayMOQ)|sLq3MquFuq(ydQ)OT+ptNBM0oMat4#U5FUpp{H<3oBp ziER3a6Oo7$CYnBHLVVtdJC_53kK;wm2vC6niHNB7V>Ac^zOTp!97PeX=+%C~oG_*! zxK#kT29S5b!A$@PeXy63;@p)og5J=U)1TDRkTJeYe^{1CPjn$U9ic>jUHC`>nY2*c zdWY?GOr!%dT9~0H@-?o_pV)~GJzWLSpDOwREY*wFr%#Ia^|i`>ifSxoaeQZW*rSn% z9j}QiWfIwT+;UgsXO;XPBI407TIx%PE3Ae@CkKEEZ}U5Wj3FLw^g5v>OPjLyw{V@V z-3`CO_34L3l(TgDk{->jVL0cVnHABSq$5HZ_}fvaakr}f6}OX|3Ry|=C}&@?VeX9B zs7a_LfpmRfIE=Mbv5*vfuv~UqAh=@!*zSxYn~2f z_uRP9;rz0H61xGp1N(3@K%Xx6WnW1w5>8&QgrdJMxq7d(mrVFGoXPAI|#k=>KKzUEu4g%KY!0 zo)AL`o`44}7vTs+t0`@6y%Dszom`rnG-;Zow=^Wpy={^v=k$VxTN>%{a6m^LamJa! z@iOS(z&OBE2eqY@woQqdpov}a%3Rd#}KI_?gpL3cN;=KR&{k*5$JHNg5 z^Q^V@x<2b!YdvdVQBFU~do!s~WlVYIW(O*^wB;>aLe;Hj#kRdxo{8MXs&3lI=n=Dh z8!<}5a(H&A)Gt_&-G|~gmr)!_VY+^fGt3SwGDniLZFR%^+t_}>b{nx|CKm9S?x2-r z1sDyhOn~0jx-K`&-uwmpr7b)T6$MGyHZ}t;gy~9LXC`^%jl%*N;ab1sbMeG z=Ir%L=MI$00Cxq;cxmf%77@o*Y-@Bebz2qSqopolkfYN!4ZC1PJu?y5i5ObCsiY$- zZ_{QL1qeUW9V@Vk#Ka3`oOQONd=>M>n=t2NJYY!0Y)6iqEK`r%Ue=w%x~Mie>6Ua{ zgd)9hQ6qj~Lv=o9u27LXFsHb(9_2m8^;lZL0)r0Bful;2^IozxZ(_QG7C*!;F;t6E z2#`VW3N<_VCI&(`XQ4gjJ(m5jyUXSvv7|91+E}`2=7l;rS%mw5Oc%6e4Gs=eFVK@- zT2~C_W8a5ge>Gc=8|OAIs;WTp8EVL-iRo}vDK9IQ~ zb0W<8s`d?)C7~>qA#P^%`yi_-Sx_~flWU!I{j%nM+tw}EJq|U=VKi*I;&4>44@-Bw zip30OUW93koVn)Qn7JGh$f5S^oHlF!8<#BE%!-A%w*@g*E~RNM3;XNZL_g40pD!nb zc5#d)DX~R-Vjf_@+=XRX81Y~!MH`xEI)v7yP)A<(=J^|0_q?&VV(z>?mX)xpdoFv@ zS1xBe`HF1pvywX`zOM+v*$HzQ-0C(b`C&FWS6d#exN#CqBes zWjx=;UYkytHo;8O0`%=NvmpgewrZpIu11$+*8XR+g*)YLc`mI}O zH}Sb!4x3@~3HpXb^U?i_(z_O0Cp8>Ek+nIW0W)P!zC(7yR}U=NJScMkjp00u>`_e+ z?wD9vv6&MQ+wh`;^@#S&Nymmw(qf5Xf?2jjgLw;dwWPeR%iT6a)0&$-R9UrI8XQ6) z`;o(#-$9Ds%oi*Sl$0|+n_u5VwE6HYl4Tuv3()CcIfY}qWC};ttCUyu^mH^3gq)~? zPpnm5#-t?^u|H8EY-)lot6 z<}xW?!f7hGoAPo>?U@?#N{`|h%wbnPRV`R1(Soif>s^_>+=t%UPv>GE>2 zHU_%TxL{SWni=J8-KsEGrc0O<6MHR9NF$qBre9ozm0U4>63nfsUO|4e<>YSe$j07% z8@4aHTk}v8vO-n%53HmVh*9>Y64?ME*^lLY&Y#F#P_m+Rd5DRh`ndzx%7S`BmYn>` zHiSU&{H84|k7{dd9}I0FC{AL+t_m8S1s&@#|GuzV&7@Q=uiUai=TkOq+|;pgOFo-k z+R+lR=1EQ+%Ewm9P>xtOS)aSHdv10G2KN|Ki`l;ZAlr~i(C%~vb9%OwZ>8zMDqmHw zYXv(PmN12ns8MuVSKg{kOIW*5w`HaNnU~EPmSs&_+0(vd8=L&*x<}B8$RbvZWI;#y zlFFj3gM2&FE0tRsSfi1@Ql@~~O6wSA z^X3KJY|5x!CmR?V=-~3R^|+zR>Pq$tb`4=O7v&2Q2uEWsDH>XC=4gU}MGdHl#G=?H zbfDdR8|#|3%|&I(>DP4)VWv8;4#BZ~jOlL6w)Z-))vvy*v6CHmOdE8f+^)^0=@_V- z$3aB{sJ6oO9a%la+b~SEDNtH5zafYj#?A(;vUDw3(OJ@8URJZRqI<(ul>V%-YGZf6 z-0l+A2)x^mVNKZ}a%dS-&@0RHM6=P>j@`z57Qrm!SngFtZMk(z7E}hZYubWcx${_R zP_%{4w-&o<)tJCqSV5^TX5~B57^P-z$@irYdzaam$6_F+rlfb49HQ6S(ro4H-2WfRWb21H^hv?^2(}pbaSjpoWFpslI^yv zYrrg`*$06tcz)9YOr|&V({p=C$YQC8B$eA0+oxcj>!R$7zS)Nsw-B-y=wl24d zMd8NV*bq^|tj((B>z84kxR_a+jr|N}=b3~mt6`<5EFr+?KNB?^AAyY%76P)62&GI} zG3GHl*=ByE!8jq`R({ z`n;^D?6$3e^73sc8hh)y`!Vv*EM{=Y!1~f64AIs0ax8Iw7ZzD+%9iCf^#qIO71t2S z;!+BDT`yjSDvBBcUFGceVNbxyL7li+$ob->D;b}6u2@vuv5^`PC}$DS!fKhfK}=a* zFM@RG04mz$D+BCM7+O-4#Y|9F7lOyq^|@vBt(-7e3vch%P(@Eipkv8EargYCrD%|H z=F8L%#*bO8i8#Ar0Q2-n&vkWT(Y%w*610R^PU@41pUqgZtK+ci>Wy8f3b3|yn{K9H zgYBk4EGi?A_0fTCV0kL0x3V~Hg%i@@Td@g|qN`!S=7Du=Q)}-L?Re$V^$YrQJ7ijE zL3lmpjafd#YQ^k@b$v`}G%Z@uU7NLm6J)xVhPIX5bM z(7MP545oVq+F2r#J)fm|%b5h=RJZVkoI&JX47MPFAagU;my_KA)n)T@a@egX(>;TO zxhx656y4x*)F+&x#EOD}twmvk3Kl?ew2IlLf%SVf?JZbGH^j;bR6nQA4P(y3297|4foaFUz8m_vfJh9J3BA2LU75zoN^HhVA; zv@*Ld)W8C$oJIB&Q5J;@`G3WxO^u-*_LMAYW7$gomO*BCYf(*#gs^~m%1)2m-jc0h z5`~oNF2~|xdv|qPiEKh;N*(jk9DP|;yRtrSP)-LReY>kMD~&)RdqK9aS*@$JR#J-f zbnHl6$KP&r0H~`N6wU1^V~rE*TAMh3yL-vX_T2Db@nGvBc97B@Zmh})p#-X8WYB7M zgA8q|e`myK#kW|q3J3tBR-v>5e!UtL9IS72$EtgWaDno3KJU4?4UnqCrQZ`rYo6RVlPQH-44pCoXsn++(rT<%q^9!>{(h}EsG#H)=uV@ zh+}^+ur#ZZC4D`W>r0k*S5}u7v+$t@d8l>iRyF{3XR*nob?(+OjCjsl*jd4Zn`|%H zvYygAKr16N4;X&o$2zG&^wlg&=V4*TX3STVFsc;YU=w?=m)EAt$iy(9Q(r=K5F*|jqnO4p;!joHJ|lFEV@|LQ^KB0%m9^icb04` z4wWu#U%#$27+e=b(Z=C)@A$K)oRaKkFE3ipluO)x_PQ-H1$CbN>!Sbn>}Q+s66|Le zZ{-NF1pC>WyX84DibGj{U&!EkjG3AT`1D;LbtGim$_D#cIlV!Gn)F?LXt1ZR zYvMbbo?w<^V=*2!aS67r?xu#)et>ZA8pQvm7E(no9VshWAMDb zC&fGZAwXkOZ+>se_!UAP9ZnzFn;tzK31^IshcAuQ`08RcnRO@b<6W%GS1S*(#*Ah4 zO=Chnve!4d%RBmnKy%W%=Z^f+R!?_ePA-*@Wl8edAOJ>&8p{K#^tlxxo9&sq#p-b#@2)_@)}y!9aE)v}d7`eOKFno_BEG?@f9x5)|t zY1R}iAlc_MYPyeaNsrFMTWkCm<6CCQZMNL9$A8f@{)>^lGxmAp<=Pe)F9m3siX9msTzMjix6>(R(Wgw+n36c_$X0>ovIw^Nb zC*@A*?g2f`m1f<~T~koXqNX6J<^5qWW8}^0;Z%uHv>|=;`S7*Q*PKfDnlYGY7BV0z zp4Ax5-!by`c=#rV^18Zr{_eb8Yhj#55?|-AoT`npIG#h)JFU^F?HN2?NvQfwQUcz` zm1cc}yMFs@ke1aFkkVCyl&%h>-!7@8-`)n&Zx?FixC5jd+d&7o(yRz~^;uGD9hWa& zwz8aWxcVK6iJjFX>AsY4ek810y#C`I_!_-G3}=kIJw1GpCR*{Vrsyq?j*O3obDUtW zYm6t|WTmXdgzcpGhaI-DmbLE?Zm-pA)ipV3?`wfQgU{9^`k+YwNf>Dk4|1iM4owSQ zsY}=3(yak$CP|Vj-H1zfuS@qikY>`CL7GW_3(`!IMp0w%Q;?4<%{t6oGwGKg_4#Fx zG|DEEMowkWCrZ0D+xhe>dsE^`=9IS8(cd=jF-c`mqqbB{y{X-I;??*sqKD`*zb80S zKWk+Fc=WB;{{DM@9%DtvBB`G#8hP`MPo0TVpLVH-W()P(Hg&WlBa(U_)QfIE^Szs4 zkCtSr!|L15@bdf362hkkXd1lN@zNJb{qy3Hw-Wr8s%$03Cfkn95B>7utyth(ZDYOp ztZ3jIl{Aw2&t)TT-|?xJd;RKM8wsTA`_r*Nx@L0k&F8;6>%J>^qqn)~dbid`hGrPLPH$h}%=e^)^RC|IUA5~~@5+mKuwM19u>a29Rj}Jzy*pBJ zjYQdr9DF4+M)p<^cNilj{+6|`*{sHwICrFECVjGGTPFT$!H_=U8m=_!I__HJq>yUC z_&8{>dHZu0NslQ-)@NN#WJ?UX8noJ=4}+w=@L6-*w+r02#qQgs?%Nga+jZ{SEg%i! zeozWmn)M~_sRlj5UElr$^fsZTSwDB*(kjOSnYF#vcsOG`tob%RkUF02NL@4Z`$You zSyywHuQYw%$SGfAG@L&A`nweUwQkWjC>jt+>w2fQygXTLF@*aFNV?37Cg?M?M4gQc zpFMd|^lT(>w!TS4EVsnuy%-6c$~z!MGI%aFlv42Y?d24m+Su*mP0pvq0;g*morh@P z3}Qi6;Pm$-AaBL)f<3oi9Q|4J2>d5K(crnVg7B$NJsBN7J2IR>L^4-L(!EyB^>7`}mzYL0(6)6c?rh*`)lOFd?L)XMz%hVu9>a5TDGA9F1qE>+vop?Pqv~joxEw}mPf7dN1{*Xjc4tt9SzzhP)@b!we9A88Q)0n`k-(8U zTb$v;BBei|^*v>`zBe#53m@q9txuh?H54UCQKrL75FG;(%YIFoiNqc_DabrjHED~_q?k9qIig5(q(9*YHz=tsl? zk2>IC2OL)r4IeJYbFyS)+~d8s{q6DbMlC;Ds_C9b&bEYHnf0>7oIjBQxfweqXM8mH zP&9Cww6-EC(csrP zI`JyR3*JrOv>JPFQJRF(>yI+VJ+FAW1^T1s#>W#sOT7$=Opy1})%rxue-AnJ7FU|- z>9oyj<5~LBG^>ldwv8J=a`~*=xQ7giy68)wRmSaaxobQ4FldQ!ld-V2hAv*2vlWwhe664 z1u5@mL9ZF!FM{;jz5&v2`v;J=?B55q7+-z{sxjzSptS~_1W7O8v;F|8H0Wa5l6r&Q z50bHm&zc3QHRu+Q`cmbhc98OJbkP>jQp0gKXthBxkfz2%AoXPrNO@ldX{=sx-7fW5 zR;%H?(nYx-m1_!IR0`6x3c9EZR0waHwGq^2eEB3uQ*sofDft=D>xS;HL7IMhLF)|1 zPeEEX{tcwxaU7&E_%F~3L-z-esO~5mv>)pXl1{GIpld2amr(Eo&Zc|sxfAZj@%&NorA{m3 zX%(0nBY{k9tI%FZ3wa=%Ygg(!uE(2q?%XohYIx(}8PL`@)jFPw7->gqM)YZ;W^tQ} zm9(rAnhHDmE>ZqF5Ebzin&?vDXKfaNfUz@i-MlpJ^LEE{L3Ajngyu_eyawi{flTPhY zgZ6VLD{%Wa?p}j_%UuQ=Y1V&om!X5t3?8(cO(XlSG;iMn`kg@;AT4LtfqD$bM?r<= ztrQsLm0_pymV?CiG^-kGP2sqt=xYj!7gR;WJDtIF@Lzsu)S2Dp4iuhsee_4yf)_`mj(l9Xmi-MPacsXTWZl)+uZiZs*y$k(J1N3zx+ntSU$gRbE&B`(eKbN_-t zGr2!t&@Arq)oIpj?tg7iHutX@BR_RpC!XSP2#d)TV%>+Bcz8;5T8 zmv@*MYi6STGJ);y@AS9zgf_Mg_>E8gPG+(FolIj-w*rHM{euo)Su1Ys{!qVvBa_mG zxWFGC>hLq8j%U+NMAXZ^{t!g%9adB8V4nnJ2R#rP^tW<6ZpYA&zh}tb7v8YpL(^r- z-7g&N9i2?Mw zXY!L=j~ypIfq0vM6Cz^1yuD{IDafRx zB;Dhj=1bx+l5etO#Tz@GR(orx)vy@P9e(FQ%zD#3z0KQ2y)N9uvhjzhjFF z*Y$54nA6k#_}WzFnk>s>6?U@xVorAU=TfXY)nyJPU|nc)hj7rVTb`7;0+W7o+B@39 zT{C4EYfa?9ZI;BQHCc@~$7B$xlfWqFc|mjrH4a*;vCK$1%hE_Wum+=k0nl3X6bWoMGh zL0k?dxx9+YG1p~Ih{Y^3H%bp?Itoup8VC~W@@Z$zXs+71TqZOZad}cCXM{$6sm3kQ zAMwGH(guNuhqJ%aaJ^C|(vYptNU(xF^T^}$M&e^4jdWL@l!v)r$`$?nXOL6Qrx79C zlk&IR-^(@d(HGWDq?vALUg3T@*VCukmrta*#L)Z>??rqX``rH^p`Ra?bef(N>Hegw zKl9uFddyCrgfx_xdQxVu7CH{`S92 zqLFuhH^Jq*6I`B};PU(gmtReA`JL_JCB-y3Q>3Zpm+88E&~|yR>oV7Nxzu$jv0W~4 zU7Bo{c)b|JMcQWhX@&TfOCv6G;vK$OC*w(}fKpnS$opGS}5fT;GnIVtT{jI%snVO){6rW$_rUx~%EWIM=H- zm(ZwBGwAYX@-#8uKWO}szF2;~zqy-^%L)BP5fu0dO>*ec`*~6vuF%2a`{G=cHkZ&O zb6uCjb;aOdPMm9_%_TI+TzE&ba;>xY=49%IrNX<;z?N`Ec|?z zv?S#Fk8CcXN#>e`izj7{u<+}w|HdQnu->-0geIBmqquldq{Pbaf1-nL$GJW(LMT6> zN#-KM;F1)O-<@ff{3On`-sTdTWUee+RK^yrv29yV#<{+2a|ul{*KEV(d{^_@_oc+S z4%=KplgxFK;S#w|e*U)qzBA5s`E=uG2~9GWgyKnYxW4#Y*7xIFH``o7lgu^Oa7kM# zzk^R-^7A+sdJOXunq;nQTs$dG@3Hfql0cm60h>!`lDVkNa7iB_zeg_KHWugFYjX)r zGFL7x@p0}A4I7?|bG>eJ2~9Frp5b~gclq5mM0105@lb!FF3U36MVW8!z=BEQ)rU878$O~xXbT9e*YhZajwNSm(V10 z-Hc1TEIjaG|5~a$0c4))EMAPNQg;&- z7A`7WH1Vaqz32jO+2B*#v-QF+%?_jszjihTO-8{e!P%yCq1VpNr3<~c^}Sg5iu$0@9Qf;Uu(6rcdYAg?~rKDr)tQn4gEtM^{t&9#e+TT)>|!o;f?W- zP=VQZm4aSL{AG`Ng-RWGwz20KFG!9Jt8Z&-cx8IlgMSL`Ld)Pg;E;N-%(iD(lXSs zF3fjqYgyObv2K0Ky8iz4JspMl*5a0>T8rvK{ev9kXqv!xs%>_KtnL^H1&6xoJ2rQS zw^mC}-vE}9WuD4fytt*Luq8WKSQ6wsm$K?$p_yn{yeNNhK9h5cXBHI|#)-;{i>rcx z>I#Qw{$xaD)x||sWkHu{;Y6aE!ay;m{7R~;9G`NsC!-4128&Cpi(R7J$%tyIs>*7M zs@$08OcM2)!X*{uHD$$BZme=9iF-|9RSieV6xGD3CXIYWQ4NMiN?fYk#K^bwhePKl zZ*^gLQEe4Rk-IF!aiBFRb*l@Dt4i^;+@&Fg6KJZ+imFP3MdePC5Wn+if`#PblG0#t zi9;i4JAsJvZI+bRR>X-&+X+NfOEErJRTC$g80}zTO`vi~a7lHXXkxsBh2_=NODZaA zO5He37V(;zvYNosco~#*b>h_G%pAI9wj@wk9xTP+Oj&iIGljNzp3J%~p4Zl~cwSH6 z;(3c_R#fLN&R#rkzT6fQeg1*mGF@6h)-0(m#WqNxOw>7SC1pd4^A^vut1zv?;(5~Y zES}fjiSI6Z$~@&kK$T-Np0l8C_ltEuPmGjt5p$SX;?{^_oCQ zAq@}jBoup=GC827g|#(HN~@LxmQ4CpeSD41Q7@k7P6NB))D~7%21}MKEv+onBs1Zd zS=ppeY73W?6jhYeRMr$Oo>@}9q(Rm6a+7Fj zVP$z`@sg$FL_!ix$nfH#!m_17Dk+tV3G8?H+LD^W;-w`^f)yoIljazq*xZ^A6hpl0 zbR$G#Q4uUDD#hezp_4+Us4kvok}a_tSXx+BzNEamv}Q@6i2k;}6Cz(z7%Z(WTUu6C zBj0!-s^a3pit<{{->fPYGAXg|P%4+y28x$f)KD5GR#h{#E;YWiM(!nL?Z9f{Z%?zw zzqPDzN%hj|;)>EGg;a5wZns12awgo9OGiav1=iQgs1SvV<}IG59i+x{a*o=&Lgh-e!M^Ex;IV9}yh_qnqze?eI(~nC_JT$F>elJiDYe#re4wv&%@(Er zQ7y?YafyIDi}L0R_E1=!&2M@pbn#^Z;`RX7p7ZDmt<2)Y;jPduC7jjv@KT=TS7>Dy zCQcHIn`oH7jh^CBTUQ~`^JmuHnmBPSbTVQ3eQ17?Kv$SaxCs-uLf6T47@C`H4VMgc zjeqCS-HLmSO#?K)$>>C}`47-N|1SQ?3gnle`MpGxpQx`U^Y19`|BSBW^R`w@R2h@e z$yS68be8$Hu0zz>lhHi|UGMvuXpy-Geix!ExQGS*S6bFzU8{7Wo|??RTRoQb4L^$o z+@o%J<1=r#czYF>IDEgE~mZ12kSGqR-Oy*xB{^d2XfOU=1 z6rk&DGxcvWx_;96n;Y2T->-BsfioGMMLD=( zfD0v+{3sGim!PT_cPVz`HjO;XuP~E(ISJimgZkdNPe$kGfMY^^r&`Gy3GzB^-e|JrRPSW|a zQ=q#Xx`(GgC-wD*Q=pUlI6OtV|DFP!d`EhiTf%R$e3Pl$nNy(iL02?Ix`rvxU4ef+ zQ=p@3vu>XPoph65ngX4agGZ)7C*l5Z3Urcw|2hRaY1ht7flk`1)Xm%yev{=}F7L0K z0-e;4x+%~}xGhtllX7s|6zHyi?!GC|eF(a*O@U78$KEN>NjkqY1v(Lf{(A~^QqM0( zzE1p2mLG^O*32o;A(mLPCeTgnKg7T633LgCmy#W!CctZyt?w*2~J$EA!(i-Ljr>;3YXuW&`Us;m_0MXbQhYnu88 z*RKg~^OyI8{3Ynu*R*bI?d#dl6JAqM-mjwLW`a47ZS<61^7e(#Hp4((~wk zsc$-WM!1|UP_$v7yLBnb*rsmLR`bKXSi&erMPJ#+o1qSIt7iRu>tLXr(;{W{ew?nP ze?z}`=tK7e(e%gpO4xn? zi%XM;gRMjB6Q3Oq&v!3wUAMk#P&NT9?>|4jCIaezFuWnuGq7PBvDc3xUM7J|f;9B? zpsCnshsT_Od9}RXytH52j^~}xdpfzV|cH5GaE9!O}o5vpW2+khP6e3 zbZ>Pay?Kv!uCywa>$p@LU-f31;iz}jQ?Gj0>=y$z>92WT7Rxo}Ap?6fn4)<~&Cu+B z)jNB4^Bx&Z$sWBlYaVE>L9#opA>*#M?!;wy=1%z&-JkUnJlw5b1TtUq&fcH3+xti$ zefQb-H1CNO-}(JJAcJIA0?DqdLp#TnJDBc$?`yh^YjHO8Y@_A<6oNWWl)Nx$9Rd;Xdi-np7W_k2#cY}!;TI9!UQ zF8eY4e}t$>Uaitl%F4E!a7O1@j-N;>95uYUqsF_;_5*gQL z-OBxLgQQAy8zimQs6oOvY|x)`-)_)@+|})I(4Aa9YZv$13_8HQ$Drq3^c#@I?-WSm zCv97rDPFIGG=3BWJ3n1xV(*_UFJ%KG7QCEL2eB{K%l3EsQ7mNGG$VUwlbvb-P}AW3eD4S3>rHNH9{Jrg$N}|n zVabrYa#VtpqXzUxF16RFsn)`?G<7~>3sE`3JS&IfifsH>dyQp0rJ0R$6^7#r+%?Z1 z1a%p=hq-Sx=n3wd4EizmdV>ye*ZegbFMYBhoQLx+yRIqxEmBA^SR{XR zySZa@@uEAfoXnJupEjXR&nhc1n0Q)|Q+=z4!kkFDA|R)yAvdRNeFG z)?W<1up1PkC9)q>Etrgl&tfMb%FgdI?D>7;NNx0KZYD@$`Ud+k8Ud=dSamXQj773r z*eq(BCVJP6yb0wZb*=M-(n!q6JHR&MidWc*U-56z;Hi-}Q^Fspt26CJePeBtZ9xV5 zK_}-)SsQsXJv^f~brOP^Cw-H+`lU?TTh9|Bkxt>%G!nT*3y(IQq`VJ+zQmPg{S|i&;}MWHN;^Ty`wXa` z%V)jJeU(9HxJy6dGkZW*86yGZGjZ598-G zS~hFdGigC_cbKGL^W^Z3?9Hd5j=s2B+(S3i_VPyJgyp93@G++YwXH9W?45P;QnAJ4 zwAq=iZQX=|KjwTyhL{YI1}R?dWu!+*qLlc#pWk^F;HD+95~L+;IY>EHg0x{qkhV*) zG@?qUovHZz8Qes3sU}OcwErzmq7?NR1G!qBf6nt7<0hSFr$PVCUCa2JAZ@J0?t+vw zpRxX-&9;L+DAsc^OsKy@`5AC*K z7Q*uUccBqu3Pnj=sTJiX)1oGT$o9w2;aypQ#_isA0>H?|GNpG+HKd;;wIo=l`o_)N zeQDYh6XZM()a!c9Q}Z>LavR-67$O#o?v=pCAD4owFCUjzdC!YQz%NQN(p%q`PT0}E zl42f9{Q-$;MPrhFkJvZ1xX~VeX8Wk5`;N2|=Oo@=lz2z??LO;?zA^Ih zd%h=H(%mml%X&7JdUqstR9>2|j*K1=Y`rixa?EQ&+5_c~7@*9s6ta$Ur zA=2Q6luHgpF4GUwoYM>_DKF4Wxi^gAyr{`}&1O$ba<*7YfM#sLFTD3&2bo&@NoqJ~ zMs|`9m;g_-Pd6PGF^H39rUtcxD8WrSqBJ9t>@`S)jvZV+(-GWj&?fGRq?=G)=|q%Q zp7(L3St4F3uXHZT@g2|*mzwub-kmcb`eb!5$HiM>7 z{ni=uVbHAxEd;e1)B_3`B)fNIl;pEUKpL*>*41$T93a641#ic#P+t8Gv@K3>qLsNuwK7{Swly-F^QSmKhuNrb7$*g>E8SN;ziIGeFcSH?3x{PD?82*YC-t0Hzw6#WY}+EkTaUGGn5(Kofnw-EsHMF zyIm@5)MF(0{e0m;u0ytMyjWn2r&C;~k>_1Gy!jebf>*$1c~_wwTyscNf`?Q;x5vB6 zC;{iTo6nMx(eP0c&@;TZ%+tK9kc5vQQ8r_dc}Br2 z-h00ZsSM(6zc>ga)h>)uyS1*%fc6rusSIe9t_JEa7!DDYRZMRK^>O)(wncpwky<&V zJ(dA%ni0K~<7+%C$3KFU<6l6^u?r+mY1WUqE61-uO7}aE(wzc*lPk@g5Aazsv{g-> z6d&c71yT+vT;DPr^FTV>{RF52H=k7rx`8XrTETtPxD9}`9or1jwoO`QZSNv3-B(;X zX^-{oKZ2B_k=F22#=l+{iOo+{Ba8KcPnx%48=%J^(*~B>ZQ#2MpH17u@Y!jjGO6xv zs}!7k;5@M*bO#StzXOL1(haK_&@>+@cqyEh)EYYa<~xcfX?~+eRx3B7?W}^A+~N8i zS4>JA-D8uxAz)cKit%J=wxm+qlBy};jux!xyoT#^Qp0uH&@xh%hD%#9suRuDzQ9q^ zU94>1S4*}zP1lpL)W^l0M$9x_r(?eFGIDSlFKM|hg1jI=n{*C3ZMl9AN@%%^U2Iyf zAK_dOKIDyw`fy};7OmGAxAmHBw_c)+k=6_A$$R-oZNb#CXT0?~=V~KFLv{_iFI$a% zFrifo_|ZN@4@DZz*)R8Fo!NZ9FwK;g`y)XbETe$mi@w3Uj5W}Lj4g{coQpR^bQ;$r zH$<~(YE46QCZQqPMMLzY+Yp_x8=`+T4UwxCJVHZc=WDznx|*-f;8G34=M1`$yH@@Z zkXGdykkU!>qYcptmrh3heOx|M0hQxUo|Qu?v^GSdYfzs>^ivLLaFj!YOyxKL(uU|+ zka9>GDcvhB-RmH2i2mTxi4dqw$VWihgh=zF4T3a3+DJ(AqjYsHooFKTZ6`=MGTnw_ zri;Y9uzZWpTIr(AF4_V5qhVibOYlQOK52Q}1{O?jIrYVsBW^C*iCS{Zh2%PB=U{zMP@9pixxv#jpLIxjiN$C z-Ds;ZtymEI`-f;AGhDguknswe|4}Di3;9Uz=pQMDBg02ILTSIGfcL&%(NRSkW?=U- z>))e674y#7ZKd~-SH&hhrqUaZ#Zn)QhR+eE_qscU6S;1O3}Olz_IhJ?0iq4N#HQ$W zQQVEZ<@b(mz%lRnNW)=iid%%@jo2+aMfj6?Sr9(%jY*Y^rCvL7+A}gd)ABw+((DXf zTo9P$-Tol2qVI_XPw`o&X~y_-#{N2!`*AsMwQV58OT!{a3Ub&u?ujXgEIHj8??`zJ;NS3WjHeDx<-(d_==Fo@YHlpEHR)@`{If zZ0{2(_Ea`A*X~UAKK-=BiR>MivCk+gE_mfrUl7?j%mEbpJui6zPZo~{jukW@Q2HVb z`=brVB+u>*(sZAAg-p=QmmZGHKPI^n)XaAh)TFMF_8)SK!7H3+AjN?3L-XO7kCKoP zX*ip=i=5qY2YwU;DFh-`MFYFUQug-0l90|)2-X6m5bPISl9*VRxc)2>+(}W03_mFz zNc&n4q%@=fVyTz7sYPjc)GiGtFI*a;&1Zfz&g-nXE5q(c`1I5m_Dj!S*H}+)Z7OJV z_(>^GfiX^Ch&CT43n^G(Q?QCiG*XD967|aq32`0X?ysv9cg@3QMr7~v!A;6#A1;-8qS_5 zD8||*EK}uH#QqiFiq}_TusE^BMx?ANK=2r1$pSB?$oAezbDa!F}0~4jJ_VaiMh}?L+QIP zXv-(7r*=oBoFvFa^BuX!FNMIBi%|C4a*;Babvy~u5vrN-?-jz}4Fvs>;MnMatru}_ z+U@R%lF5Qn+&etl7Z?*xXOwr;R!}(#tJAhQ7|aGt9pk=**Yuw8V=6_ci~yCML!Br=@l4lk>Q*NmEmk<*=d=AC6`S!6K0SzMMgWL(jl`galbLWeKr>SI*0Yu?Mt0W zBo}i|5Z?)r@q;`Jd_CGQmV9*D{^;(kr##Qy_2!*$c!P&bs0}-lLv<5CgJteo#X!K5 zhSHWBcbNy1rjKc$3@H1{j$19^FfV#^DZL`AhYd_ zhQ}DC2Z`g8#b^u*NgRnaLB6kz0Ql{R7g#nu6h@!%eaLOr#ReK4#ny&Slaq-K=Z$K5=c9 z^!r)QkZuX7b?$;vmGu8U`hW8=h2`=MyFc|MKJY|^kpj-0D4QS!h`xJrDWHTm+85S< zl26l=tHxl>(N4D)7l?i3&@3SA$d@5Q$rP?*S?Ay`Ue$k!F1vq`dzG z(jIz`i+&DTWqkgfi{1h?8#fQV_G*K!aM86O4ecW!4Q)1Pw+Sr=q+coLBHe9xmxKBY z>Hw*%IzKe?91RrlV6nkLS$_+1zhB$Bv}=1-XUB57?s&3Wn; z6#|^D8g+}~V7hAOLAz>Ihl;x84C)r`Dr6vLnq9<)xVmL>O*F^a#m`eT#{wFygsW^h zWjsPB>!@T#_Aa!Ksva3WNGEzJG*6V>ED>AzUou zQBJMn$V~JJbfN!11uYn6i2V&fG`wr%Z936s!6R?ehsFSTFVa=sC)G`~)o-E=h-KUt z2_6>iYQv4Px&#nQy_p8x`$Tp$1+5WX=rK9tFg_y~4IC$S^EA~nJFfB0dY0##sx zC3?C;-c@vRFF!9GCW;DsmTb*WypPD^5$~)Yiwea%>lgevs55MkX8%YP;spd%E$ z##%gH3(t!EhG+J3__&`}2OMJnZI#LF118!l z#~25TGDW?U*!&c4oY*M;N`wQ6hD2wD*&)CwnX&MZMpxw%JZ!q$YA%|5GLP_#Z14G3&kNpJdq-ZC&e^-_Meh^S zoFwF9w1EC*D7y*S?sjPNmmYx<94YR*q5ppK7nI9Pi$1E8S$h_Vv^j?W;cq z(jG7uq#Uv;^;_n97lX8it^ifw=CkTS+E=%OBnw%&4$?m9c98ZzA_#Yzx6*5CulRSM z9^>|?i+&8!p8Oe*_Gd4Ev_E?Zr2ff>UFqT@_EZ`L<&e?2d_kJ^Ly(TO54djs2GVi* zA=-59HVc#uWJS@chTpr>LjO?3E7q~QpK zYsW$Ix1jkkZ%jmYIj8v0A_Rc@zRMGG3=0;UIWG9DP|9eap!reNzf%R$!}B>>JKZ}f zD#BRmm9c#3@jYQ*9m6gilFf1c zoVGZ)=X!iUW7)H-?D zy#K`g1WhD}&Q~uSiCEz4v;hxsJzUHD`*^+bLvVhUQHykM+*_B#C7Lg<5i%4qswn;x9-X$l3lljAE z#sddS7@d2DpF}huk0a!?%%;p(BvQe2BNZG?EU0c#OxBNkNso8yW0ygrbWI@DkFNnm zxO~DxIuLQ#u(1|GS~P*QI+Hq`miJ zAmw-xq#V0J-!dErK-zmh530b;XZ;GKz4w2D?lx|(f%*)R{#4`qK9Ih>2_({q&sqx7 zetZR}$GG)?lw&LCZsR6rt0>(UKyk6uOEsp%epWFr<1ztr7pO{VbYbO@ugBZ$P00KW3sSp+SN{Irm4}DqhFOz zj}M~l9a5=xTo+Fh7CNx#+g9isdTpl3274484f@%37s?-bb6RNb$eW(f1r+&lZ}4GX zK&q^D-U$4tlLPd$X2FBwU`F81!}$vyjxqvIH=M}}9uCot>oQjDX*GY)>>e}3Y=(-` zdS^Hf%nvwFx)kkoqWeeo&Wy5JYAnUOJ)Kf$fLZb|mJ)JShIsFvo@SS!Zb=ss?F#wp zCLCXU;&&w3$nY7)?!N-b0*Szx-M^m3*fbK{FDqT$sj^cwb_#if~+2J$Ca59(}A;Iv#z%bh1qDBdVS8yi!bdQxqhR0%yFVD|vh3 zI%$;xXCz~M0vl$yxhPpE&3{1yS-1;;5`|4FPe>jxxgKD~ji}^vJJX#SeQk_oYly5GFmarayC`DJbc&f<*?rDF{~~$J%4u?#LNK8OTqPyoDtbn{1Y9m~*pz@_>hWI5;Fn4Cf?-O4 z^!h9a4ewtR&hXxMkS9^-1Ts3k*Of}!=iMRNw}NKMf-Dh^Hk^(=olu>hHpSuYcyR~` zkzE|#o=_a5X?U07kOzsRXA{cJcPI`Gr_7X=DGssJ%gN!Vm_1}rL2jDI1Li%snMHcK zxebvN3P?!gH{nVkiwx5a#3|!t=K$pckLs9KatKToHKHFqJ0>|N4Z!g6c$A}I+T_BM zz2-yMbWv|h(+%fLtO!2KE(R~}q7+EwcS?Y`Kc&UvKi%T-a|z`9;^BBYeB5a2GRjKG z#)8w{d&{JFNZDXQ?X>3=wvw3!g3Ol&;*abpqqUMP!6xo>0Fy}FR}$dmTvJ(DuXHs~ ztJEzzE|t{UKq}=8fK;}VmG#OYGaf2yZwD#I=RwNxRgiN0JxDno1wF`>W@e?7Lu7K5 zGk*TY9yYwv0xPf7!n=(xGH=yqkW^SnC7&fS zdAC6+RBV-|y`UcBCMP8-66w6(xaEPALl)d_Fm9EgjRwiQl}gU7ph4p%a=OO!&p;Ye znXURRZ_}*50qM8NsfQZpk0W6#M_~zrP7rthjeO6Hy1RI6ydOQkkY*c(zv7{#b{hE0cl*`2hzA)1JbzUg4E|S zkj6#Kcxnt@1gX!zcj+!obHe?Yi;6%>ckz3i7+e9;7+eL?7+eq17-WGo21Ou^K?6u* za2%vDI0I6jFG+XkW`p$0D_wLeNa-E~X*pmFf*$X#Q+JYv?ALYI8h@a+8y9Vk#{?k& zsyPq2+v|&*?GWDkQ~C7C#vwv1i&RXcSeSff$j&% zqNGN)Q><6{m&Qoce$G(Idw&}=lZ_bcNqkvVqq-2~kA@#!gbFM8khhvHEx5PdTOHg> zhtC>U`x|{H^PC8!5)G6sFH*qRkL?|O9ze?-4eagpGzpV!7X$@PZz{bJ+BV|}xe*YJLFXKJrW{@7(&w>x09tVx>+=CY+iA?6ns8sza;3f zlOL3IEb5sc+2vrr&NQ3Fj%$1FuEudxI&@A>#L&v2sv~X%`%yAcc`-H;x_IPGQsMJF z!C|jFV#hQyg^}SqO$eG`#vfINvPel3UD`jB7zYiRA$Zh=M{S)UW0R5L(~KxYZxC(p z8CBqRR$}b_-L%N?4g?c>B~2uFZ}b@!O=dBv#+sT#F&QPCW(HE^6;W&y41e7l`x*d= z6)oeRgJSugjlLBP9Lx%&M;lJD9*Jo^A(s_{1;Y<|W3mw{=3C@>%1r-J{=M5p=R($` z)6a?tE3@EeErr{3uqe4MYxqjIIvQj$NCyg@XIQPwDrK2*N?NGQ%#%HtCVjST4l8-B z@`<0}Z8Vr3O^XB`i{^hh7TifCd6H|FTTwnsMfn2P1GbVMk*4`8vG8Nggcn=-8W}8@ zb=(gap=71Ar_Y(da`*Iof%lA8>^*&ao5U>eq#aF{?6XQ{@9BHeCfk`vhA*;_&(Tmv z!>pXiW-V=mB`t@dY-4ITRWkB4GlH!2`=$5ZdyL4zN?xDL1Ty9e?NsdZ7ai#kDr#^+5g`lO3KOnWZ6)->xDkje{x0n*;}VHZ8= zzAd7+(H{5fAdSIyT(rkU2VL}Y7rg|!kGP~+V<63={{p>b++GDmOiZWI)+k*DNa-#E zy3&gd9x>97AJYhAWZ(vb$d_irE(CRsIVn;SAU z&vecy;g8sr#C!ijcqXeT$|Mz4w=W-#o9BvO|&PXeWP;IJR1XM-~MSi|oLj zf^-_ZMZtqS9E=3De~+H6j|^)!-DvMLLPemRHE|APVjIrsKImVf4QE(gK+IQ}?&UZt znERxj#4=>`W7fm4p@Bsd%`8h{ElfJ=U(no02N&HP{r9YW?A|mJPE27X^fZKYh46dl z9@=~n!JJGdOp1kcZ~MWQ1s;_k!<*zzdrQq8cR)gHz{J~@lTUuhh&5N`I?HZ9X#seB~SN9c>B{7*l3I_XIEaiv-Dj--?4J}!o!+?C^QkaFAu zl8z(I7_CsB|Bh$vG@bw{hlH*i2SB2mNVA^ht{ks{v|-Jlj4H=fAmz9Y^n&4-2~rMO z?s*q(OcjANH0frvX}=Am&A3c&shcbkQ8%%lqoGNsp~G+)@M?oD&Am404}jv$y*A^u zv{35y=OB&ggCLFRH$aC>Our4%nCg^`Z0bbuKikR3D<`wev|7eKJBgEJkUN55S%5ot zbL@hQ+C0ie@MBK1BeVILGXD99Xi;51zH&i7*b6s$fNki^ZDh;bMwZNN#M|^+S*&zn z-iFMPw}j=bM3$T0iA8F~3^h|b_@2C7=Bshjsy_FH&GC?BvGxT+h9&4@vqoc+cSKf} zMu!ha_eI0U3f}NmKW$fdsjJ?(N4)pQq?>o{Gn?%Rfs5|AdNO}o)|$w)tc_>K=z;J@ z@$Bim*Qxx*yIJUbXCJ{$7N^U?c7*-lxf7ow1H~xghlM(sHtV(XsZVyI?f1;|x{P&X?w6T9?{*Q@Wb@l0G`jcQPGKjo<}FY@i|VffeRYsR?A zu}JvH?%y!qLkQPxmv{6f84PpC_i!3f-hDEayQEUy>!fLbt@&&0PK_Qbi%{5q;Q3|r z57N(vKM~8wqal|qo=>E}r(>k}+BHuU zmlz$#YZB&0;j}$(B0Bp8)33;AMgma(Wf`P-L)2x21h3Fy_(aLk?7joJbXJBuXu7LO zXx;IWj>%2@P|KRgvTme|J+q>k{jGEp44|-o(vThvA1U%Q?5&aEPy>6WjubrOz4u-y zTId{1dDcCoWSK00W07p^mdE95)z=_1g9t8r$suvEbLc6PLsG)?UQEiNBO+7WEdC51 zG`Uk4%lH7_<$3mhlRwhHN5hBgEb_cTGlof;`4cjUrLpH{Qse)hG6`!Ab|$fFIDDM3 zdPyubCW-99M2%VP`ZJSfXITLgZQd)JpV^{XrAaUQQic;VO#2JZ9oKe?7v?tEM5~*@ z@!tO`=%;g~nRAb%|4p-Ia^Jz_vu@!&WKbn{?Z@gt${`jcq$f_ZnnB931*H9~e2sE^ z38Wlf0eKC_S3%10W0y`cSLu#`E;n?)a_MB-hx(Vs8>PDhbcLbI7;bu23^aQWAvjt^pAj4Uidyp<%O*@Z?g?Ye6aUj z*G<&KDjUo|R#v*jAeAASTsN5tSGq#fx*Dqrkj5$qlBGS^DhHL3B5BrIPzA_m85!b# zWBkUM@IwjuuC`;{Wf_rXEU98X_NCB5TU_zp|7+q_-%Vt+42}sB{q7Olf|$F(ke=gI z^ays5*>&lc?RdJr^htZfhUsfZtnr_`*nwy=F&lfViApcFWyhGT^qC-NO9Nw$5G}1F zdkJN}-083O3V|%7rwxv~9u(JO=es(Z#tcX8DmqEE>@4PEbWH?vykfa=7VWs~rF)Xk zj5Z&27aC&R4I9jM?a#3t4-y-)XZX3P+rn(|FQIt;8sf*(NVb0AyHU zOlsB2i-YIAkZDKrVsF9=RaX&%a@rVlWd&zH^=aZOQ>fuH#h#alv$P*ANLR)<|7R}UH$c5yKI>`jYYh4scbVbyS-<4o zZP5R4*NQd`A3kh+Dd(w8HxZ;t!Kgvp1TF~HAjr4#vrT|rOAjb!& z(!6(CZ+b6FM)ZlDGw2U=V{D0*o1~)zYzxiqPFL5?x2qMEB|v((K)f`_fHIwH@&V;S z-e_r%=1V&l=~6VmB@dOi6(rikG-Iq-%f(jQ?&9(pE#k02QZ7aedVqU}L4V6#-#!YG z!KcsK!~IT!p5-pH!9MF>xohqnbI}PGz3L*)-x$jAa|);5J{nd|0U63oa@p9kRgO04 z;v5lw|Db=JoZR8x(i7_T=lI(O1}yt@T7OTU|Hh%4{cZhQ{q6l7Lwz3!`8oJ}a6{{W zA5W(npL6^@LpEDHAoYfGs^y&T0wE?&-K|3!l$=h2Q@dXd`}MbV_-h)ft0f|a?)=a@ z2V2*LTvDR6I(ts`Y=6$2?B)XhP)8^vpAzc#XU~~8{d`{gEL4A+oX+A8Z5tpm2`tqu z#npkD(w3&mr z(y>tA_mlds?Zk?ChQUo-v7xHzeyQedh zlpyo-r(1ki&qj_Xce2{#a#Hajo7&EI7)mMz`g)-$Or2yO$tKaUGjGnEIl1%Zk$*(l zoaXEAt+o9_ z{+n(hLK=QMX9jgsI5)QSe@GI*)Cl~M7)zm?#I4OzCi}ZSnL9gw_QGKZL;jAw{%}{f zf3UxQqj(?@8ZsZ2;}r7Tq}1v%iKD4S;H`4LkX9N^iNUV6Rt;^)P!4uzePM(O}A z9u!)@N5Gm6QTx`~Yps1-tF=C=)m8#jpjwNMDk`<8Xt7Y6Dp#>m^MBu7`=LU!|W!8E<^E>{h<$DPZO?`UN+)RjL?Wq#*9#yD{!UDz4cFb zxiK6}cs;qe(w`^a{M!RMK1rt;AEhuHZ1_PvmU&B++aG>^c|E&vJs!WtZLeb7FgQM= z6y^_Lp9;$J;{}-F8;r?Tn9Uk9f7^15O$TF+Rv4Z)JO$L)o%bW^gE7Y_%oTVg=YTr- z+b{pjjqxcA)%ecxH7Q7ywF+3gApE8e|?Z%8&7;a1|1J(JnTV8Nuj#U_* zEu0Uk@q)j6)r~n$VR)`E{aOFsUq0)`@C|r9KgVlZ1S)Z1*#JV{!hjImcQYnsT5!#^M~OIX;VXuI7xkIG1S72^ObTbB?n(i!|qGi$nVcbjMqq z>oq6a;(S+g##o#OHD{#7c~WzZvN(U%oRcihe{0T(7KbVc;>RzT@KD?c!{9aenXO>~V4a>fqF4SW(ipVzo1+?>jJjHWGDA zoSBCwx;SUJINa9glnT2zwJy%(E>7IV>2h&4xHw;Sac*~Ue(K^p?&3V>;&5)xnXW@F z4z*pJnB!fX2`4|`v)skG#>KhK#ktGH`IU>a&BfX6;v8^s4r>l4eWdao%?=rE zgvB{aa}29ihQMK;Oec-gY70Y7@(7J{(_RmI7P=qKH+GmZu-~hth;d4>owlXcu5NhH zmU>7_5#y8^tE2+B(vAE1Tj;xW<7vFErHFA#eFhw_hdm5k$8~c z#3^+eI9?BPiSAI*DYw~Df74RLIHlkMU^V-1y~*;pc6sd0L7Xr_^{Q#Zpao&-cEJfu5PJTeTE1 zPN}oO@p{gq2;48P+l0DlNRfPasW<-q zM$neJL`xCllu}5#yBN zmxrAj7i=GQz?OPnOA+IgDo|2v@#t=N{e?NURNm3TCB`W=6&$aJBY(PSC;YbEmbywy z5#yA)032Ite8E^WNM>%_p{0m%N=;Kz{DPp{HT{l_w$vZA6fsUIej9l`9Ou(j?k@bZ zEj8j8;S%GNx)2<%hhGqMGd_4@u`P9xmLkR}RS1qGE(Bre1Q@^Qse8|sx?f8X$cQOT8bE_R0%kCIjp(lXA^9x9GywTIHkf$$}ES0bNjznIvQqh+ zK`7kC=QTZK%3#S!OA+IYPZc;`PZmYscHL6&Gh6C*Ek%q|su~=x#|&%bgKzfQQV(e< zVw_S@C1r;7%&TMe*-}qvDPo*bH4dq3o_hICTk2IUMT}Fb)**H2Tk}x4&3t}eOA+Ig ziYY0xBs_ZalBBnD%&~X~N6avz0Cz*85$pO}wFNOiQUrL%cO%WCBE5#EL>A1dv$TbrBO+LsTJgyO}E6?9gc0t>3X zzP_ccv7x2DqjPa{TfNMl)wiwS`bURRU*EiZ1t9eejqRQF&25Y7o4Q&XZMFzu4Ptp) zYyC=d?u`>9DhR`(m}B-GlkB|HrPgMu1P{8k3Y*Qhik4y}7bF{F6&styLSo+~zgC;; zdWq`MpjV=Jt`{I&XLc)|t2QgHvr-!MSl%va$0|--k>PkpXL}p+3+%FZXIWe?Jn_Dw zwUd>-u@kQfna+hhH8W-2ShD&dih!N5M8m@pl+#X2Trp7dlNlAQi{q;lqpV^1@`hP6 zOVrJ*rS0*KrEM)J(5u%W@;>)q9%*2qz6+A^HM{QPnLu*G2 zpq?WlbDI};E;Vn;aL8|yq<`z7$*!#<4yN`jz6w4x z5;doxr7JG)Qq>46y)zqHuT&3Nk+7C5dD*;TCfyj49Qx?t=)LXDRtvWU{z8rfb z%mkLjTjT8wk{ss~@w1KH2ct5pjXp%1TcZu~?%^>X&1##LjGWb$KUv++Z0JB)Y?FKs zW8t%*wJ~0b)`BgGQ7?bPzqc2PlFdr?6noBE;x?tUpMK#Rk>+x#8-f0-bBvXrt4GD(6T{s5)3)TUlFKQmwLhaZv%c z;2;U{q5^Khkt`8!lCwJ;4Ti(zRn---sv$B#t-B|C$1JjPArc8z)rMmwH6>+3$m=Zu zhzd()Q33YqSkmE8u&SyeR$Nh4F@!V(^lpcuf@v%Yc%%82d`T=As)^J@OJXHM$lIZ- zmKEt}u%waOHRaVMvEtIwAhzzPcf7bwm4WGM`;J+7*uXn-8@W~ztEwyuMT$Q$Tz9HN zRl(BQijvxrvea)`)s1`<6IY3?35H|UvD&KI=qClMb^uA)!5G%6T%llDX{5Hgx;7MS zWlFgnNEhruNeqR8e&RJly?%J8nsYhx89W#wg7jV{1u zCsn0!MOzcXYpOA;cyir@Y%Ch9t|$wYyJgvkvRq%raKZusg9MGM59gA>fOg@X}zoq_nyii3{pzs1(VIF0Y;z+GGtHRj`>xK#wh6*XvBDy-I>ZRy*MP+4;%BTkJ3$q(~grFkI-C@ows0l`DYRhY?q9Mrw^ag^o_l?PGGvA-1 zI28x0!{N$sWz4L6N;XwPgWe>H_|=w_m$0BGH^SU=#!z)`IN}#B36@t@6qiroiR`ks$T>5iI9O3uQd(70Q)0{Ly>kv=NhBDlD6PbxswT)i zbyDO}Ok|8>ZJm>1jm>pM1=w9@$E^g7dqq`kRkXqm#}-lr4Bxf(NK%a<@nzf8(%IF) z5jKXb4K2a^raa~B`wQ|WCH=Gc(+1(0-k*=(d@rdaH!{cElU8SPzYQWW2p2SRLdo-q#LmO-EOVNV47i|?7fjxp zMjobFjq8BBL1R6*59GwI&^r}5<*FQK)@bha&Lmtg2jM2|Q6n%HKkf(Fsd1dSQ~nLY zZ3KTWFe`?Gfa9N`!o3p@f1z=VU#f5m5YS`5{9^=t!;UokQibaW=BT3#<1>2V{p=xd zdlAqteTH$Ho^c#!;@TJU)7f$i=R-ZeXflI2$mc=06Y%hOy#HjE3dd-jn+EP^;HIa6 zWAsbYz;R`3ZW=hQFI|}ij_Ypg)4;J@J)8!Py9TzWz@d(vk3m=Q?CM$76`>1HkJim8 znK|opC$qLXTvHs4)SVt+sr(0iz4+A{vep~9aQ@u3_ABQ{R|m?PI|C(ci{tYfmN&FE zw={RnFE6XFEty###@GG)7JR?9wKg|4%x{mk#2Y%|^A|O@w#OHDHO42lEm~$=Xk0X! zn+HZH(I{sZd3Jzb&&!)X&#l({;BIb-w<9_RdYzfdGnwX@ z?BH=`Lii;O9gW-pZR71{N@jV(mGQc+MI8;85Q@)gSTuQ+IvCQ}!n#v{AM3n%RiwJG zB#)qeUT-7^XA(ol%2dG_SdlT1XPU$vvtSF~8PR^V-|(}bGL1P@Jx2fnOY}q68ahUn zp8oNv6oj_GfHHo{oaUEyerfwPuVr2H`mkZoj(mo6fJ9<@--q5|&*F*D!>)NPgVZx0 zUh~>8!CgD@nH&6h!HXICnunq3vt=Y=6i~5ZX`QMlycXZ@)fxBn4u2c6`9Oeck_AYIzdHB^QrN~|} zgKe6PuA3veQ`^G1tOG^*q(SQyYi%ps(|Yn=6$_|lAt>6t-PAQ);)SCKx~5qwR)P9NvpPSy4)*f(DbqBu@Bew}wXfd=m)P95XT+$T`19ASzI|hS4`t)GxvB59EZ;*J zW12?6rgC@xu<1usp;XxKLHeE;=3ToNaVVtCXt0svYZ6o& z?;2TW7WoX=ozZErv`9;!+MLpY2@PMcK(S--t8EqMD2mI*QWPsdW#N};aPjLRMb+Ud zMX?zaR-GZsMq#3&ZpQUYMcsj``0^7_;>$gt=zFGdKd$1-Q=nM9{l*)(o~Nk&xQfq* zK#9*IQGCx(Pfr5Hs^K?I2PI*g3rfP^=6khzZnTTUB;hrGToE@GE3D&RVjB3u9Pq<{U5262lpZ8&;(n5)!7+}Nt5QNlQ})nLkLWCB&j-!^1BZ$ zE-L3isp-j;GllgkSLKZC@xC&B!C_zZg2OmTWgvG0qX1J3`tVQG5mwT}c$u&?p-dI- zK_k_-2UT^quADqKa^Hqm)-A=km#_%bn|%|EOC~bDILgzTZH(G}?Q5#iKGXO5h*8fZ zRoXmMTG(*b^)`?77Dfq&b#JD1byi)ThTR{;DO>O!J{E3Sa~Ewy-~f)ufnkW4H@e5W zb~kcldgOp_<4R}^zfJX5SLA6s&5S%OC`sg>XRPIEECsoS5I``#Ea>SY`a3gh4VbrXct;DF2BDO0mYr3QJUQv;jR zOwBh3rDmshEv#!vY8Emz*Q2VrQlsq3>sRr-nVOwU%^qdSM5P9{(B(bsg^hZqXHw$n zaob11RP`CNXV3nl7l*SRHR_phJI66q2{S$YX{M)Nr3X2-SKiJZy!aI9dEN_a96CMo znVyGI6|L`*nKC^%U1{BN{bu|(!3Me68DxKP+{i>$DCv8C07@ht03|)d zuR%!XXBrzoNf`Hl%2Pbr8$3->e+DJ8v@IyIv@JMGJ^cWb$Yu(rG0kV+M;Hc8KVH zxZl$5pKDe{f8q%p6>ChIs$ZAbn#pt4zN6H8=LbzhQJ-AEP&nW6aTu;T%Z*0PKyrTYq>luoA1y}K9FDUWlZBSAl-T@_{Q86$V zcYfnDpiTpoX-u+s7lV@eRbxF}Y&~6JJ-ya?`c3QUoz~NzSWh1XC9(P~D2dhYKvk)5 zsazEjr}*gKe@=ClB^E=nAyi&RsId51 zjwac7YsFYpOcX71N|fE8`qpr&>5g!z>9Tx!J)9sM3##DZ55DSFk7RFw4YCO6Y*60} z9$4VUj8Yg*42}b}@b)bUTZQub;LzDBl$(X2u1uqxb*2bhh8f8!lvGa=48P1wC!91+kXIhsSoC-G;Q<`@>I%fV5bUt9`!Y$L>({@m!|+~MN< z)WxA)WT!vRx;U>oIJwm|)7eL}|5oqI04JXlTE75J`g?NNGEo`U=5UKWPhqe*98DdK z!Ymxz81KN3ED~^%KWE4v%}K6t+2GlV2lrj@Rd{29r)q*2=N45?+1d&f?@vAM@3s`< zOGk`T>KJhBZQ|1&_{vMR)SX(27^jp^NzpgD4|YHMh%IHR=@R3VVsAK<+Kj2DON>)$ zw36bS2i^BZ$3L*cI+;xf95GI*W5KbN0nQ$C_i|gRTuTw-lsZmHaePMi&a<1*otinn zR!b4%lw#a$wY1**ez@3{dQ?jhia)aTKH!zx86}g*pX1t@VrAxNa!J|5)AwGy_ z?O06OX2)%H|LF~J(O`LLC|Vt>D%VTV))-2*l3-+$dM{a7u(|@f&MImvgG;gcZ*THy zfPflf6%|Z&tpC;qW92nv;Sy}r;MhwqV{^defMIJvWoczuDVE+bC>shD`V_l@BEj-V zth}_w+-+dTRYqHm;6s(c^6JWHE#eTAA)c8yl@&6|D=L`c5DFuRnowCuNmb|w`wgsN zAa}zxHUzEBP~1IOTT)zFV!i|wRI13ug5||np|7s2mdKfLCl%#k zA4)#AqFDP-?4@w5F;B^x9I)LdtuYr&o2=nnV;-&6n6E>t9@Onnsx{`v%+}IutA5G$-MP@~;D!?j&3)|9E&$FEC>{x`4~YFV$M~YUJ^Hj4J=7`{`3m zoO6lUV3#|Jy>*g9K5t4MlJF5b*;5ANQmjSOzX@sJ7@v#Mz;XC7Hw_#=c;hK>DDnTd zYq;@ME3oPAKeUD$QJ#g=_vp;{iWaOFV^=;L+SlY~v9`~}+b0`!bLK7^mb7$ABh@?e zcRaoc5|8o=toJJK`+c6yjHaF`mGAcr>m1(Hon4vzeqV-AdGGgSb&hB{>Y~ct3_Q;v zJyz&IXU=a7j6?CD>8QNlu%^D>7wpV=oKt6tIZXw#e#h#ZM>+kVcw46myGoLd-SEX!~vBYy|uJz`tN4SeT}`iN_@Z|GNahN2BT zP|*k9zylS1(s=NGUqCQ;z*tijqCP}cll^8KZ`s06JUe<{z+JK%j~hmBS&lhZl$F2Z zW;1dFcxpz@zzuU&LKpyzyp@0lin~9|S@XLs%mF(nHXX^1Uypjxc*3WhITX{YTu45c zyi&C*Y0>MCsb;iHYqyw2^mL7O&HQzLG_3PN%rL?h{zqA`h5u2`C!B8VoFTK9!20(w zr99~YhFTB$?tRjC?{mvMSTLP2Q$113(z~%JWgQKW&IF@gmriu;h8bD0K0i8~n*mGj z8M!j`sIR7ZP!-Gp>@fIfm~X>o#7LsGYg@bKfBx?{V0` z!jbRBYZ?97S-sg`R|%QjPkZh-)O~h;{<9l4t;Vur4>}>eV~6#9Bq_mpqc^gIV;wT=?Xg16Z``9eV9xhXaF$RCr(R{=27ZzdG6eP|&;ffESwr7CetdGQ8`;$l*2L#bIdX46q{=S-uS~ z!oO6h@ZxoNRVs$5_p#uB??%1`o&YwxU)vS$du=!lmC^49%UC_p=T-didR|#~eq!?@ zoD%BZGvZt<5aPw+;9jg~J%`-gm+SLAv?-BsZBNEGLWR$*!EzWXi zeY+%mSfgBfs2EFaDt$NyPo*z+^o)&i8Qo82kN9GnuB zh{-BFNC}(7?ma$9NrrcaN=Ww}Zz4mzQk{+$bUKJmClOd3wGx36rsu10_$@g3S zJ>cm&HmN%>S4Rehb^5voGCD_g4`g)??;gnM8f_h?oTWilo2&ODMGvCkR89ViX!0YD zCVwxQeEZlc9(q0Wx{_`#+0-W%?1gD?wDV}~anEyzRHHBUyycqcufw(m)t=<<;J$}l zI9F(T^q}v?XOZ{Z#q)yNiLe_RB7FDmROfT-;>i&G(`RR`Yv$?AI0oquwiDRLtfS?? zG3#H%A<@t6`?06`Bd+lsenm>h>n zcO3|MKY-`(wQzRUnjaukc86X2uoZ0GIr;>O^4=+hXoAt~%++gWY;!*7UVgyS^*1ds zdv~#C_95>ASeHkYJzR(sZH!=b8EvllmM%sVu&*lR(R>@t5mdiKuHz;7?fRw#phI2_)L@&slw%;qzZF&N_@7f zupbpts#gst@%d6v;xo^?n}!fGjYXiOaloxXldQbbVcaeDa~%suTpiNuI(k!m0Q)Li z;;>0fyTum04fS7QZ8%>Pc9H1+>_`G;*e-7~k$eqAVD(KIQCW{b@k zTpoUG!Gz;p+W8@#;Vl>$v57y@OCXEmi@KKNmV&94R-DT%Ls>=T2!;OKKk7%{bo;}8 z+38QFYuSb`*y}0N{$w6{;2O6->>-@~WV!qqsWAK|XCd>QedhJrpQIh>vb4kRaSrW| zdFNXZ!QjTYj2GS_(wSK(sIK2ioUm(WbW1+dr4-CB@=)@sh3-xc3^n3$Hm$2 z;;<5mqtA5aq7kdJaCmZvIFmC`bGV2lrG=-H&~brEIP7KVX!X;J3EBAaM$<$iIO1~y zFnoJ-!ns9D31?!`{6;od_SAgKJ=1p+BaREsbPD6Jy2lBVp%yA0(o)1YC-gZ_VTa{h z26#EWt$2uMT|2nSxWf~_;la+go8C1k!q13<>Z99PM}u;hA=~M#3}!j5m044`H7wj zQB}a6%ja~v%jUp;Xv$tKB}f!xi@cLD1R@SgDfDD3la#YmCr2Gt_HtBXhl*WPbWEZBnxwCp=E^{*CRklsR#_X1#4HtC zdoF*l`eojvsi~&EG4nlnO2BrXH1j<@Lr?1bRh$P6{Jd=4-dCgD=eEVBm-1G7}) z*Z`!OS?1#U8v4hk6YfO(QsJ(L2LUvcKV$<2cOHJJa8CiZ6b;W5y~=y~5V%7K_lDy! zc4mNZr{R~%zif0SzZ+v1FR;6X8!Ft*z}T@l&`#+FA^5IfqI~E|s+%#1IKdTnFfv{nXjaQV><3l1IMi$ z+tR=t3*5_T;3fihAPpRvNaJKSK1nWBKC@XqD-9gW)uc3VEYHeU1Bd3>csvapyXY-0T+pR;OWc!b;27?6E}UD7m+#|67cLgW$mM^s zg1Hgi)%-`aP}QkG|MmhVJ_70*x>mNeG+^j$*&S0Wm&Ge!Ag`Jx?3{e-j>hv^TdB{g z@U@*CUCJ0?^UAn|L2@~x!e_#(ZMDt6)xe~lJQw3zLm=!pswGw&hBONbw2SGlj=RZE z(t2GCk2w}IuZmQcGjUB{>y>EHdc`0DKB^gCOFQ&>jDBR|6iYietJ=4rGns?4uRn!G zDCQeC4EWZMfDf{F-}Ljp5ptcWa%xT)FY^p^9X2=ALyc6{>gFbP?E@N$Wc}uedx=AH zde)k1W!VYAspm4yiup{Q8abtB_5q$6xen5%uGcaW?7-{QT;CB$3^K`wGST3a(*A-G*yaQQxzu zdo1b^P?hTG7K?h?qPS)uF<1>sVz3U>kATQDxUL5 z>>MlG47TMG%Ml(tlgNp-#BeLG9Jn)-CL`d8L=5^MMI7(J%Ck336Bag z!V_(l?yY%vGsB_U+%v+`Yr)+k22#9d7>zOp_fe1ZykDdwM0qbFE(_aIhg^~wC8$oe&={If%Rimi;E!>DQTrsc98i*?lR!y|J`3s^ z$YvVjKwY7H;p(Q~!WND*kDpUGE~W^MODKX{V&PgqNjq|tg+n`%hy=P1Oh`m?QP(DJ z*wHn`EC6F@{Q*v0Q~~5}2x!7Tj06}Yw(+sCVFwx@vJ5mwS?u3R;lHzgn*t8jP_w%~ z&hc&h5MU_9f%-cr)$Q#=ZQC2u`fQQCkI=hYKlpf=fwP(;`wCyWbs5YGy!64^9B}%3 zO9l%6p*a6YMEx+R&~@OMLxtPt_@di;O9!xw-xKvGqGQOb18;6ml%}oG&}Gf3Gf$>f zC(!oepyc=0HNYIfE9+uvwQ$Z{Q$L$^er#_PTOptzcbGMMnK5ITM=HP6zJadYbLXI& zRi0aQyc9LR@Vzw;VqvkY@Z&XiqOU_N6SK!a$IiFm*{esHRX1b*sF_;9P6dMFo^?aS zQNh|=Y>T>)vBoH1-+;E>fMyF@C`=#xD*lVHWU7)dr|D)p{z?IFSBw!nq#`)bwF|=u zO`>^uK1T2!XXJaqRve@vh*aDQzsqot^LJ1_ux+8olZXc9;f0^XcFmKlmJZdzdX@=G zQ4onp_1r97C#Nc1;>AK$z?5$$`lM87g|M+FAhV>*2S9OlAyX}6E>+YyxYpz6SI0G% zE9z!krDnekifVp-gCjBN?@vG>oUeG(LCscFDJZsUexnwY)ZLY!N)?a&c!8q6Vm-YZ zl=#P(R;i~ifD)ho0!rGEcR@+(!B%0R!exV!FpjsV5>WHh)43L}(c*Q2k~~-kO7fr^ zR4XJhjT=Bo9#F|daCcj{`#@c(a1U8HHO|OE&CQ#ObGkF-z$RVGIWBS5^4pR*j&a8K z@nq;O#~f!&1Iip{u*LoljWfo}P{T3GFe8ppMxJw&@gcHc=uw8z8$CRuH+o1{T(%Mu zP;a5%s`h#$j}0(%KQz#lrz=>V)GKW8!qL^po0E~BC-g=SV$g#zg#uwO68!1Ow8kN5 zI#7$yE-y3dLH&?1GZFt@&z`?Y#tWw-6Qqtz0hOv}&sHUcJ?W8qcEKIFXMY90NY8!% zl$1-p29f<3l=SR4>rnS^V?jyH4TG8pgx`pQlG@S?N@~^TE#8+viO*jJB|hH*>Ke#q z8vh0A3grvytKc58a8!+z9(I$3`-6ph$-=z~N_yBgES&0L$8;a?e5OFs8TiM6yw0yAKUpYkR@v(<6A%n;r2Yqq*N_BlCZH zwBNV!CJ?^4n|$X-a#q?t^?`c?pP)@|befSnL|B1o_3#Ma&8o>cf zG=Q!VpTXJslWc@q%+r4&-fv=~5t_(N zu;NAzXb%bpy2i3)$kC$(v_Cpt03AXIC!;NruDA}npCV(;myxsIn^-UwV;7W<5s64{ zk7s{&ZzNZm2i2h-uxOMSK=5@zh-E~I@gLUn+1^M%fYz`CThQ}24f^PAJW}p*K#aXg zMQLD8IRa*0yVV(KLZxU>)G45tQonH)C>alMyeuu(Op9u^ zs4rO5dW-r7D2ekOpd`*e0L3|qOoQjTO4@#9;kH`19iVPfxTh`Ls}^pbh5H*QY0ciX zaH=&M+kId>EL;T8JmtZ3*i^GwN;ycIXMHg!N?O1Tub?etGhlr(T!1^XPnK!6Gm<%u z!Nf#7Nmb(NRS0aOxbgCk^*Ld-QTDXQ0VHT>AF$)Q*RNWs!r%EeejZr#%!QkM8>!HX zdL7MCZB^e&+r!(A=pn{W{_c-yJ8tb5&(-7V&^)LQ3iUOSjcJfcf`oA++D&{1!JgGm zaG$>eUzF(n!hO@D@M;fcbU?!%5Wjl*RdcM8qCUOwWwZxhbNVY!&F|o)m`!a!rDZI{ z2D%PVT$*mq5$R@q3=$#F_wu>Sx?1x#=#HocqOgc2KCLne(dl(y8zZ7zR`{WBV;FSu z=O4eORB1Nr*2O~?R}+$YRG@s3Hdv8d-I12#G*HLjm#Jn-r42q8_tJ9kDs3>^0BM6c zaV)ZILq+z>prj4{1}Kre7nHQYn?Q-g)1XA+IZ)CD?*b(fqtQ|d?o?2MqX7hIgU<#f zIL^v&Y0q!i<2jBZM1rHZuj6T^@dHq2De4|jXDf*vpd^exf)a_BLEWNouY(ea{h&l* zENZocb^)k}@@1h#T@6aU8Tnnse#~#MZIv%Os@98a7Md&ho*NBH+WGMoZ<58MF#~zp z07|~`IzUOBsR%D|z7CYM-_+BTeEEijyTii$0F<=fcUd@o&+R?beIShX+dpTn-45%y zWBOxGz)CZ`KAGbfE8d7FslVw|LDOp;0iev*4L$~Z8;$|TJ=hB#**CQ6;aq=AT_l2u za4y=CoJ4hQPGYC;-e-DdU*rVRpF&HB2{O}>w}`{woeF5lGTn}Ofuo8E=O(hc2x!=N_@@76q{0t@G6 z@AsKXMYD3N5%BnBSxGZF;oMwg>?vsbI&=N}NzLDdrUuo&XUzVL#QfZ9NyS{m$sDvY zeq+_Bc9c0F%m6l=TMbWg@ld9*<}ew`OA3d@b969hIK#P^5AHnLl1?0g{F>ZqgqJH! zqyWeaSPac$`nepm5as<{Uk)c7jl`_n2>|=KDui%*Gk#4j$Z|wuf^fqir-95L06&PE zY^*v&p38p)88Ly)@ALGiI(JOsT|5k&`#Vg?Rp(v=@U)wIGbZ85SZZNq-|Bm4T4I~; z-fib@zjjUT6!qptL4sXO#tr*V;k$wU0A7Piq8Y_^!H`UP&o^Ov;tBY5L)Lp>GFm0x zCrYUmHU61*eU}Yq+~4)h->DjU^*S%xNv(wUd~e~^&i@@S+u!v~*kO8oLlz=;QQ`dD zY~RM2Y@J!Qy8J3r*5u|PfMA&iuK`3Df5$SXKv#R`=a%C>06Mz|z#j0~s_(@@6|>$- z-qCoG<4t|VjKr4ug^otP=m^!xY~@qy4v0VX3o*p!cIEGVNq!tW52`Qh|^!=^f4?e<5vgGA%wo4aGfrk?1|xxU(6kB?NmF^Em=A>aAY zvF*b#@`;QE84xm1_~bhKbNmlTV(L+diUO4WWT1!iAho__8Ri-rTHgJm?3)a01gBCS z=*q^pQxD1ZkK`I)zs?uTbstV16(MIvs|7<$YMZNUP~h2V-S$FLE^=VTvJA;tYlMbn zXbi$GK8OOdc9PU2ukR*))*NZ{i{9mJej+V1RD6~};Z&y5*@ocvG+HODC-~;=K)!{Q zdMgL>HU{ZS)`oh*)P^$G7|>)FzIXM~p`-s)j00#<*Fu0y#aP=DE1<|zR!AI+A5_t` z5)U;chO-WesuR#J&0ET1VPEtsRWgdpH*g3eW^-E7Vjkp^Jql?4#VSFsy&i!#E^$J1 zdLocT5+X<8O05*G< zZ|+|FU9j6X{&(;B=0~?vb{}3XZZ^N?Tll2!{5^OV(XA`dBS`xX?iLnnn6T}`jo)0VJTL6p zgV`n8h^!AB>n|Tdaz@V zuXAvR%{riD0_H4G5(6&M%vDdhoO_v~W`U9+HK&AUD&8tk?Dzb}7eP%?)Xf&|d!Qs% zKL;hTdJxq8z-1c026dLAxFte968JH3iSp&o7Ue~&QKER954MY&=)J}JWwG;m08p*i{gsVq=dD`ab94&J#Z$rn{_UQaY!K-JB?COw{Vcr%V`0eO=fhg3c%1v zpkuXVMe>r11JDA2Zz&9Aii~>J+z~L(%fgXfsr_*oxm@1d+Q?H!130!P(9+Pp1j>zw za3}W51v;>CPFc8YwaslJq$J~;iziQ-IC+u*OPOt5oh!O<_Nf&UIX=nw+*10IoRrBX z&l#dRNX{6fJ&Ba(4K~ZEqV_qSN2=nClZIMa3InaH#8@W`d3Lr1&R9G$rPxw+a;ZaZ z^9HZy8UK0Lx~VY4_CfZjhwdL#3Bi zRtn3~OYLlE@0@_+5e=Tu6oA_4866h}Dq1_bnwpv$n{fgv3Wq)m6%^k1g({a?yOu9P zS#4_yG&UNY<}tEHGCQ!cV`9L5bbjaZ73a$>&OhrkRTHxZq z85c~HDaQ*mu&Eurd zNE&Er*vR}ZT35XVzB^sAVI_v`_548t_BYn4VT#!#7YZ8O^#2N!dwqeI3D=@`TscD zjX6qTo&x4{P&2YN?{;I@E_*$P;QeW!_O9zfXD~RdQ3^u^BZif==}mMKgE83(!(JyJ z)aULB>~mufMTGSiVEBbx+q2?MH-?jJUeD_p@;;Y5{4r*a7#3ZlCa6q{M8REaJ_0SA zTO6F!7GZzsz|f!Hx;W2R95bxFF3v}qbCh9XxKV^|q{ZRZD>^Fo3OQSIvMo-l=GcnO z*J;i%7Uo-;V^|!HK*X6obGgaMdD6vs-NiAjklH@~%Y_-m3Za}C)>s#3vWpXTabhmc z0vD&n#reF8)8pcN+r{B5f-}w!yErVbPR!FT&MPj?-&~wSF3u>FV5iTgxH$GR=POmVRZIe{;CV}GZ$x*i}Q+$^H&$=LlL)K+lVrqW6A|H#6SliYv#fbn`xQ&^ZdTzWFv zD6`6Bvx|Tu#wo>q!Rz@fAHw~*y$!9XDOIJVh;d4d2FL4R|3`P#c@N;z%9Q$|mLkR} zbu2ixHRaV!-$ui2N^RCs#5kpnQ&N6h>8|=mE>=NIsgJZ2F-|Gsy&m>dba#yS(}T9u z+3d>Th;d3G%OEw058-~Wx%4?(YO$6g#wm3IIJOCZ#|~VKk0&#RcWNnOoKlRNE#$|}Vud$`(X(?iyQe%}A`E(t*_tx4{U)EB@IHf)V4y?IT z1nzU1S#=Ek>fo`Io_ z8P?lciWsNVI3;Da0KVJ8cnPM|i5!T*5#yA~1;^`Q-qKCaIEadCO3l<##5kqS0LRXa z5#L%l#g^KrrHFA#ovEZ)$LY@a>9(1+)Fv%Oj8p0?aJ(KwOSz{{zvX#b>hD^L7^l>D zaJ(Ll?&+TH`0FoisZ(?XBE~6oHaK1nN0M~kyLHm%ZK+GO6fsVzbHMR>bX1Hxp7g6kTuBC`^N=;BwY{}_PUh!;oB( zf-7vPQY}S{Q);S`GE2+hy#-I&QggHvF~f|txN{k!NugUhgejU7+NMJwMN71;WwEV) zIs`JMM(Po;;`3k))gc6qq_R4M$RKT1rNx>aR8Tlp8#eYETI$6t&x-cu*3PE-Hk>Wn z*4km3-mkB3Xl(DSZ*E&u-_+G=S>(rw+?|V?+v+iGw7jjger1zLn^N#KmHGZby1KO1 z<7Ab##9=oF?38(JJxQIj>hY2CQ2|orTB-+%m!fbeehKHuEOlj-4y5iOK} z*2S>Syf_+fXmv5_uIg%N$9V=zI44%3tre*o>+At_SG;&}3zs@Xl+Jh$!KY7mGc^`0Kug(rvLF_3MzIjQ1EV8p@N`iJVu+r zfsQq=inpj6#?-o*i9?rH#zSrGi*Z0Qp-6MIxxKv&Hv5yfkdb1eFwj7US-*G^r=oRb zyj_x32Xox8Db>;0-n>X1^-#Jbv_y$XSS4*qkwgKZ;LNhnthTcDhSkyL)@Xy2Z~bUi z+aw*PLe6TNrfyM{akg_(77HUeH-&?wv)U&K)wISCN&Q5@ES%@9sn#Bl~w9t>Ahl+;9#IiDECLC0K#f;gul8m_5| z4ROqcxeioRfMpq+1A>(xD_d)Wq0;iovZ{&*V~N8m)F~IP^FPuw1~#>t;Jl1NQB zC<{@k->37q6J&2yRY_GvWjJO@S($?4INNEZqXLjLn zT2Kq)rAEV5vC5k05O1avwZEu9EqLjd)3MxoHQ|b2O+~D-qBLA~L~&X8GUY9C7W%TP z(r{&oDu7FLxo0769O^Zrv`1=cBH=Q;2LP9Un$jMtDX)%2YAdwh5lee*ur^X1E3HCy zGMFK1RsQ4@RkL@KIcH7bhkFejx5EsR58!o`&})e_O< zB9;nX5{yL4qoI=WXizWSp`qdGT~QvE?;Pc~q&66-X1%Ma3UXObj*3BhSlU6We95bO zY&O*Lp7m~Pf)!QORVBqWwLy#pu*iqn)C5?gBZ%qYNO@Ihw4^fFX)gXbo})5^N~5vz zXi3RnZwgj+6iq>qN-b9$jFrWzYQojU!Jpzxn}4HVOqGdva~iFLF0m<5Dw@W z6vJud;Yb)!i0bE9VRXocV!`V2%8J_JSY=RF9+kbq8r4yhUQje8zo{q>eFYaK-A@L! zM>B}p+r>qL1gnFwNKJKdS#hOmw^9hJwMwQTUiYd=e#b!|_il++pDUhKFx+o*9mlXsK}2cZ*|w_&x>*$H~H>aDT$g z)Y*Doa46gy5x*~w$A*Hl1!v{+AZw49 zgp3xZLHUpb{1^G*6#&5xXjMR*5e8sqm<+E&3lF0`R6^0 zea=tfhuzPYayN7_H$LO$GHiM#-|wRbmYVe-9=6+C`Xhf%!w-~73x97K z__~A|0L;ZnY*_=(;S{mR13lAvBRipi{k+PNT`GFq%HJD-J_9s;P0l88w#KOZVR9Y@ z=dsu_ugU4&THafh5u3YAD<$@pWygBUvfzs-$n=&$C9n)RKg_%zi~BL~LGGcRkpI5K ztS9^+lnk;;yFboagA-eJqqsz#M>&U9jH00=Haf_XNbY43Xexs}I*1dvc5ma7)HOwk z2y_cXD2QsLZj=;@o+U;7gCHzO?AaE?5Qb8F`4~l-K`9#5QU}F?9@(zgDyY3yQ2R_F z2BmJ4lnTm}0$T;O&kE`QrBKirl%h9TL4kW&WRqg6pbl6;^_xNrO5G?a6_hCjwhF4> z3hE%G9+RLH{je1jxR*s9hN?L^$iRckvgTT$9Wvz@nz~VfDzwKG2eLY}Lpn67i%217 zuMdT(?ELqs#W~RV;O>DJsZY(f3S(f0sREJz`-N7G;K#z(@Dm+pY0C0&&rwUJvene0 zs0(qGrmP%PBYt8hN+_&p>W$>+xwI_$3!@FcOk*9cBD)ckNPG*Fg!X+<653BdeHFh< z;~rc^;xSMnu?-ZL*)om4;98HL-}um?MtMx$XDsSGi{hqHk)RD6p%z#aH}Nxlej^_g zw?bqZmxGdU(RR&1TLa6HU8btn)nk$j3aG3^jw>B6sHL-=k@Km#&N17jlSDsdDZCa{ zDd4p^8ZBW~M{2rt9XHUGV;xSVfy*)k0^Kl6vkTT%*ZSC~njED@X5LVZEKA2O0|!a1 z&GB@d0+FuKj|?ClGoVi+kM{>2;h{l%l%2#KY14=5IPcZ2d|zVi;v1WZ(Fgar?XO16la3*pc60emS%gQkWo3$yjOg~P3yu?VbMX$p?boiP(u{Y*tVbThDK(Ub9L8I9{k z4;B7%E%nUeyWVc5BJzTMB*7bbz67a5f(u{rZJb2@+AQ;ZWXywk)~=FeUSWuuB&x_x zm2)sgxXc@a4dJKME&FFpJY_0_jfaU)mHj*iQwd%x!J<~7}QMs{KkE_#uW7{Tq_i{ z9oN~4dKy>3y$DKhUq`X$9xlH@jl3E~y$R}4MI8hcQj~X?sV|ldN~#R^Q46K2%=k}R zWoU(lr@oq2Xw26HBf433t$8-3!Z)kjzf)_({0M4|)RV+6-$NLkqTayNRKI%dR@IRf zk{zd1orA18Y*rGp52>nyL-?|!(mVvNRGKVZY4#|6P8N1pdfcn3%)Dn~Ecd7@N<)+N zf^wFzd~p zw->8=a}e?OMs}m#z~p5X>&-;+BfI8FVRx2rPRhtBdxJ|jONx~6a!}Iz&H*K5_zF-W z%lq~CWkPG%EbG^R5?l``!QBW-$~uPxi}3RsKgCtb@B^Tv4F4LGl=YpUq^!SS;r?vl zSk|ZGPJN60PdfA**e?4N9XjlXWW)B8Z2{?C1YWlk7f~%%ZwURWwm61QJM{c8m40Yg zXRg_2T%D@)YXP&qV8D=JOGJ+#A!V9lK}eiuhLO@-f(~O|eX7yP35aXVKIJh-gZ~2q z6u&32vukYkKeM`y)k756QPN|S(`Af;XGhPNYqLis-O$)c{}7`T9ZBafB^xgzoneaL zSf*Q)#0*@eM6LiOC712B;I0ED1K%%NI1X|JcaMc*C)?WmqKk zfD)hI1jWy5(f$>Qf8t&wvQWZBf?87|!GX;xB|(FbB2fUU8a%&I0jf|@^FYbaYO(c{ zW?N-w)eTC9RRBU{P-8WSXiFeer zBcFbNa=BoOs%IQUW}#lGuwd++Ll=qY+(f@QPck;~gp%OES>E*tpjfJ9GDceE0Pf{o zv&9o!2$bMB@NU5mru%Re9LF7k;|HAJR)dmqyw1XH1SRj^`2i;qKf%*$@skfY@tGfR zQa*nNO2T*^lt{b;N=o#rphV&TD3M^<7Ksd$B9S->l$2-=-$i0PD2}lF2FrF(QI~*{ zPr3h3mb;`e&i{YQ9mfXglsmzFa=8=Srzv+L!Ez^KihDpEx!j4wrzv+L@yX>bMI4qPPP)T5&aqdLDTDp z6^){#wlB-Ko;6W?%DDRErNpTVrW~KcK*9X-!55nNmH$4d$Qa+;XMN}I#Ftv+@aKm6 z&hJ~PEnH??eZ~-em>yujL*em#N|;lxzKNT^^ZwTG=f|ZH4H;6MZzesKqJ3XD&rCe0 z@e#rOzr)0b(RJkUj+Rj$Ajddu{*7b+eKG(ZjeXVc+FD#4A-k zVB?E+UZRJTpPYV{5f{-&up!WhevG+jc?{Dp%M5D@i5UjVLc5VxDKz+)#>9h6TQAFy zPR*J(;&h419c$jwGXJRTW>_cWHw&-`n+9-X(NuZ9!FZK6G7*FJTqz)8EY<}Yk zTt$}sq{y~{;y5kS=)hIlj&4x5DBhQF%~urfrRTc~l=$)sP~yukK@pp2Y{j(zKfmz@ zT*a4nK#9crphV&$P`&tN8XUKYL=GsCm;_2BXthNo*rVO7B&tA(1jlWH; zZUrSNqWu=Zeapgq2ULsl@B0>RGpM=X`3;(Tyh2f)VJ3AfC>h_42UV_~(rSyuxg69i z#p6lkw}Z+w8bQrgyp^CXSJc-*HL0iHvv7}snxmd>v7Wwc@%Dj|SbYepSmB0y%{hsq zLDeeW37}-ud8$RxkfiWvNKz;ol3bu9N-aueG4ud6?TOy*wb@3OHOKeYR3k!jLO7>; zzym|#1H(FXQ#btT)>L?zPi0-9fhu+d(qt>c_%J2z=`7+$;)VQ*E8t{F9!Ig~nvG%_ zr_$7E4|mPMjEAa+XhUFX=`>gen}Lbq0gvx%ecD_js_55_wQCnyLWPUQyU)Q7OsNp>tr|7=v(F494{~O{kEqDfAg`Bswy9u+9>v?PB zzcPJ6zwgFh1A>W@m(+4@HmK*+l5P%HqAuGab10Z!R4bW5PBbR3)0T53R4_5lKbFI? z)uo(-d=72hPTzR0ng%(cvK>E8KbGsI&#i0=F%f#hLhgOx_hx?<1{*Pp^Cja3&)fe+ z|JP;(x<(~3Ztlsr{q2py7}hlfq5F8V$Jh7I3>~_6NB3L4#7Exu`vx*}3^pMKpC#^f z@BRznRYq4eBu6O85qPbX zqu_Pw*8CDYk@kzNj^Nn3%M8&>P>b;Mt7AL_x5~ot%e)=GOyfFS1;=cZ-eEH+k$4J} z`1}m0b@*kfuW*rI8(x8*EILVlavaJ4N40)~U)R#k6@rphFbs+@lcP{#in`R|HG&e} z8c?_4sT@DT-b&`E@NNui{^)A-woCEIIe8>Y5PCW^=YMyFiUx7JKjIYCM`=z`B@H#x zoT9QuxSxKCit|3&0Cr;S;W}$%;`(@IZe=4Q<)!oUc_ex(r-e)P8S_00_cIIk3s6!#IfxMdwt-rRpI@2fl$dfVQ(~|eR2P1k#@o1x#D}0n zVg!nlNYG}qNSpwQ6#}UQB@!H1Fjanot@%ZYss(j{!eMJqhq4rq--1GsNQfyeng*Lf#$vJ5qeOxnWn;c zzac7_C7GFGV2z?XL1~Si+tA(${Up__cve$8PKZA% z(AnP5+OYx(Z!j{|z%5NK<6CB8m4GQeX<}Yrd{b9T%j#qw&UOh4q-{k5bl$}O!hll0 z2sAddGWtm5q899(kHb{dnS*kPA0K!{aC_wMp0;3+TjeJ^`$UakQ@o*b zVqV^tJ;pV{N#4(l*KBw_=PO^5FWOWR+aRd362qaL({Tgt=AHV&sjm^-c z!YFzou4C}CIc!G9J2;=mUC_a~19xmtZK=(;TkPPxhPxFG4hPli9h?c^Fg3P6Gr_sr z!RZ2r6IM3n4sf2gILYRnm_Dy36IVd~ZF5sUfgkko_`J$9+$NXUJ9|A_aAkPMl$8I- zjmc7&TwM9)Qk$(hN@2JY`!k>-Z_b(O_J=Ko*TVsiAJmRZJAUlOu$x5rK|m*i`uqNV zG+4}q-BK=_3@zI&3GQgZ7}9&h2hTYGeQ0APmkgYVKC+xh2gI2&w`4tDgU_} z!*P$-V`9#JY13tHOpd~Ew>8_kth>h_bYn&<40l>{l=H`9yU{ogj?b|Q!(Gc<~HQUAEIfmj) z3{O3yJJt$|pJQ~REzVCghvs>Nd_;3>qghXA&M_9|70t0tWc^KZd=|!ooTbaQILB&E zj>S1wbB?k&C7MIyK;q>*&B?SlZj)5&HO8x;S^cIBt_vzja|=ba7sHasKAw zxJ^=Ju?bMlOsU_+InBkH;Nk>boY^i;ql@!77boH3{FjUKa~J1v7w1VAXP1jZgL2Na z_q#a8@WB|F(IVH(v2%f8TSzCRWsxOiaylHGO^qtu>O^^QXz1Go2;dXaZ0J)+RBX?*B^y4Y=*T^OA+IgItd)Fhix+5&g<{4 zvZcPHrHFA#u_v+3kmP;qoLg}oKmMKDdsI**LlCmx268BrHFA#v32))_#WwY zOMJEglsnR(A3o;#wm3w zI9|`i6oDK0=#HVw_R|aJ(M&Z*;d^lT~j^jntJQfG19=)4;JyRK?eZ;nkTj zEZ0)R2(QbmTo&gB2Pe5UovwT~tFhC#%U84%G0ymmQ&Og<&%8QjpBc7c+^N~bIHhtO zQkT9p51D7C;#XRVm|@1VxO19maVT3@>J_Q%k~omD&Qy>jtq9AjhV+1+fP#|6Cm=rI zF+5NT9-jb92LrFD1M&$zr2&CQmgYz*-%=}+2=f1BYcQgz1M?H{_7!a{4W02At#*jY z4D3lzjc4#fr6*Irq@k;$V;M|(Xv-?5c8py=1wvGkz^}G$XRiy zKOtL{)c@2VOC2nZD{CO}PLqVik-00x)Cx$IFNl&t;oh>zQqqDKSlnXSWO0(k?TeZ* zFVMc)^j(ax%*4C_jLs+~6KUIRf!DC20?RBbU|B|+HG$O@7jI^q2E}K!MH@OBmnwgT zHp?Q$Ryu8?I4e*MEh9K`qjJ5oVHW2ws8r^#m6FPKN)U#T;*DMH&7G_38<)l#uY`r9 zwkwRkR|w(zH^MGWpfP@@Q2oTn zglmG8CDqYzC>kEZWQb*!LQU7f=mF(BY!9Nrsz_~VtgLJ(lO<}#4vA1xcCaaeIYCQ0 zR2&RNBV{GUwc#Kw`=ow_=&I~Wrm7bV8#J|ac6H!ngFz+|?EAQB-a!2|`BUnfEF{a=xWa!g=N)*lx5s7Q%pI`Z(b^$I_@;23-=|2Xa} zz_|Z1eqzCKT$&2^GWg4ZDdR^K9OuVU;b<^^2QXjfrw!cs_@%;KjSRaIpCo_f2L>_x z<;1Q?o~I-K9pKKv!!f7xPUd7&;b>(1#~6Cwf2QC#3QvW*4E~KCkAtDk7969gaD!|R z@EdE@If5~-sdUu&p1zg_j&pNANdw1xeKZXmzYw>lf#cWgD{0{Pb$Boh9E;uPb8$&> zsq%&CI3o=l=RPN=fn%`?rGev|?B!|T&H!#{8aU3k^rnGhI&Mz`$7*&@8aS4h-==|M zzPy+Qj^X}24IJ|?6YXuXOZ9%)toYNwvAmp<29D+Vk~DBES2I%K7Ik#sk>$)Udy4_$ znw-2%$#VdFM%=faE#wN7cS2gF3ah4E?g`n z?kg#9=$b!`ZHx08TJTBQiZ7>Dn7h0XLyhK+hWdt;4b3eLSVz2gFryxW%Z9F&&H&T% z5Bz%Zt2JbzFLL4hxoz!N&X2ARlr?t-O4=63=Qk{GXoc~KuKDF<^|d84>%*{7Ill$V zwQa4z>9(DH9v#Xx*4&rA!F;K^sIgb`VVrP@I}e#|EGY2Oqd z)eeE>ut_?zp>;{T3RwmNoXLK|JIB5HI0ny(i~eM_?v-iDB*PYS0hU=uJ@-f-m19pR zhAps%>cA9i;k7jzQf%S1cXlMoC)6dz%t@@s?TPMAl;_P&tjZc#F{LNED^WfTs-8V- z_x40Bo!`PIY-OODR9i;$iK^DFEo>A;Tr7(QC#Q&u7O@Ub6TyO6P?7EcG6iaB<{mKoJ&&2y_xiA&*-s^A?@`3g zTR#}UQM!>mJ!=n5UwhDZ<873B`rIdbqR-=a-0@G{>iy`0wR^pP=>EW)=*LDW>^ky2 zbX3BB1GLz%i*+pi9!^B}_%7dqJyVH{8@x~8Y}@TT1@|HDE!&C5IPmt_MEK?m{q(YD z@H7#9UI3faiIUiD#`BIZ-HG2Hu|I6{4I>h350xQOg^1L~c52N<`x9N*^mM@6wKM2l z@Kge?CUT&sYhPiXZ{t*@R+ptSle6QO;+Lsb#MxeCs`W(9%V)}AK%o3;%VdqBmf$K9 zSAh}WO??5dii^zAZbFQ5LWbyEppO3_0r_ zwlO^BUgdo-*P;Fm=Pqffaw@S+%Ap&o51iEdGNXrhG_1eJGw>oxJ+;~*{`~hhY+83_?<#0!?mIW~ zl<(drP@+*WypgARGVUua?DDU9Q?h$M3ho~G%_F|?a(c?g54@O&{y*$}34B$>+5QPP zTmwWCB`PYGC{aBq0z16(K}OAP5P~f~YKNKna&1b=T_WQn%K%iWXa! zu#|u+qO~a2Vx<);Y7~^9l>DFPojK>+$-Tg__51$6-}n0t+{t_1^E|ViIWu$S%)EmQ zP~$=icBXC#wWhtbCs+Heq<900QhdULAAGVd=gd2t}Jm+?AOj?nl zR6M_;6~1JGl=jxbH@IlA`9Ndr%VELIIa{q&(m~cE$h0>XVHHHuXw+0`e_l`!TCiRF zhd&qIj^L|$-i}8F6FV`>6AKIGrl{RZVWH+yOwpXo#R9QQ-AHV{;vaa-GSl8%_%w2! zd9|k{_G$Dy(i=0hMHwk6NHQMTP~o1`?^M<_2AlO>=LvnVuk}Uvsk!g>VJ~x4FcbQ` zpRi$@m2mVubMU;fj(UgXW?!d->l!FvqUQ3eAcWSOhRnU@%FcNW8xI6R`}(#a85``K z(&giw?3O;Exgud$0GY`>wAZ2dCro%1lTuYFaHEqb!Pz^iKi#mQQ`+A7Pw2?1GA7Rw z5|j4zf-KClTp8McLV!S3?KF8!!URlx)mwpw9G`{D9l@E0Pv^kb7L^y0bE<@7B&l0Q zY@%e^rqu5mgX@vl5DPYP3cri75Bwz?v2i$jDvVFqumzcPD>G^SMY7DiS{(@5O!ax`%hAFO#jP~!9oj{3(@)SH5f zr7gNfPp4MT8W#Mo)OEn4O~G3PaR;7MwZ;K;Si}0WTY@NC=p*IeVY}nby$2eD@gm;> z8SOy*eT~5$OWG4wa7sjb{o{HwWYjLIhQMPVYHM8ZqPpedwud%`f=|mN=vATE>l$g@ zhC58JNJgSV_1FNOoiQs^_-G*Eslq*&V!X%K5?as$4M|h{ipB+Kei$U$(JhVR-W@(J zK4HZw;y3KY;`Pz-x#BzWH6D#79-XbI1@ghhMCtgIXjcR912Ue-i{8g?bJ~H0 zkB7#+i-+_bHhXI`5dflaelnXY8>K|=NdQMVX zzsmP2(xgu%627$!U&XNbT(CJ|NrLct%#6dmiI<#2{;n3Gy&kD=~#WbSW5(FUy}79+>s)E<49cA{20#sRv$>Yay1=NKqPKztio6fNyV=l z9!VuNI?}z6?iXJ;&*>$RxP;{QBK3nbPW&4NNnPcfF(s8jQrxAG#tZHy=jvn5)t4cu zaF2|&eLf44@?{Vt6-I@ltA?cfyA{$X@%b@GSt9)wlIo#x%ie6!z2#i(h6gP}bV-mD z?i5H0*Bx&ns)u$tr1J$=2T9?sg`{vlKf=a60x2N4Rgelr+6rm3Na*Kb83;OVdP!Yu z!i_iK!VLVBgT;d^A?$3ao)bD$wAV2J%MWLk=rzqvFdHL9t0`x&658h`sg;WD@3hbD zL8lL$v*`?Ie#U)HYXKGE2vl8gIXs>Eq2tNsL9h)XdJ3TYTY>U~XYXeWAHY6O2 z<=ut#(fZP2t_XL6eOP;@Jq(3)Xk~+l910Kn@wzv`?!y@NA5uV7M3@vy)Xgm{UbU1? zTF0R@mDe29WzPGpQ{dhs(&=zjRZs%yT>O$`8oFX!j&sGB1L;2e{4&8^F+w;WfnSpK zC|vaj@#RB3F6$u;ldH0VD_*U)O;~&j9&S64v1nhHG&lmGarqVbgx72NYlT)ea)q0eim_SI{U zUW|$5vraJ>eMm3#T}d35n9zT1&7oI(scD2kC4RqG@k7q3O1 z4n0%xx`Io2?WJ!CH|7HvEk4>X3^K4jd3=eOsyX^XZL-PE@gxnh%L_6f$gU+u8*EB8 zDR`fgf~Beec@c|K^2`|Jmu6zb;LuDAHrUKgKaRP_Vd6!iy}r$UwKHsqwCUOkV;NFy zHLM>1Qw%DX?E)0tl#0Skv~Pt5C*1f58ro>tDL3=Rq?Mhwc!bh+w>q!={3$L=X&3P~|0KvIlLA}p=THtPM$m{ zNt;h`$6`umAnvL?*X13SiZ~WyFOi4uVy95sqC*?6t~*Ucs6KIg33}=3RVvz}ZCs9g ze#0&|tk1^K$-noU!emO=(s6Y=`Ms`-+#G%wy-uXwaMkS`21z}9bQObrAH`sIUteWy!D63@pR!h{7<~8?qY;vNNZp6;LFg3j2?xgqaw&d(dB~K{f5!PB{E}p?SH4Jl z9i7j49BBViUFBLY#o*XnKp1B^S7{(cUFGsbb(QO2)Z;*#m`YdSNY##n;;Yt2CoKLw zl+HjKTi0KQD_HXEu1La-PvTOvf`<-TsIW)Fz8JQ{ozM>Nb5{u_+&J&xEW0(u(%xvT zsT=a(L;BGfS%XfFZcbg+0jLia-*HJznW`DR11PlUYY)pNSXL0Nkytk z?FBeL3O~QRp|IQLmolVEZ3WI1uFk=6oVrYK3*jo)6u5S-KI?=haRx#(D{EO@ZI`E5K9Kh3ri2^WNJYK#tlyi0Ps#d?w~gehaG{g^k*j{ z-&BaJy@LDut|`Xb-53l=K^kLwdp3s05wAgEhC*VU{?%p# zbiD_%YEI!+L8mtcO9o98_`fOEIpL(9jYK|HSytMO)pvi-UQa(^}`h94g$5pfY?P zAbx3u`{y@>@DZ;5#n1u_joagUNDM=nfOi-f4_5v=_lZW1R8|I8@s)j|ln=XFiuxiZ2yKoq5t*YNt&<^j#ZP@Q zyH2Dt;HpP!2&7E>lBAMS3|>(TzCZHa(l3viV$|bY4Y{z1SB#q=DaP%PR^aEi?uM%v z&qHE3N!AB&(?nu5G+d-3Q8sc#;_&WJk#r(`FtLvTX5BHWk6Cs(^ddqO_Qv0 zNNTudjw4+S33nY=Sq&-aen?M>FB|b-snFhr6cF4FNGjYfA*pb8L;8g<+90WLQPKQp z`HNzhT0m6ou!*cohvp(HfQtQpw`s2gxR zq;8V!94xs`q*LIk8*nb9O#EP=5w2pebx{nStKQ@!NQ!YeB-K{WgQOVrRWWXW#NzC? zmcvzyM<6NObC48{BcLqee(M#u3il2qh5Hzi!u+rT z7Ob$qv8876bZ&iu2_F(yZV~C6*metwGqcq4{o3Sd)dDM@huv1`k+P5=td0f<>S~h9 zrcJ9UudPk4L>yr?;FPXz*tXvi8C2385`DzW|X<>lddr+Bt~1c|W*CSP8zVs3jV zDR#714;pfA^1S4M^q|g7p>5s3_C#{kvbD+!Q|ILS0LuLHTR&E4j~emVrNDjoev5DaHWp9HCT=(swC!HGrd1w35a z0W-CRTIK_cs~Vbc+W}pyWR1Dcz>vikaQjgH@I8b_H;1)RYuq*ed~jIXzq{DJQbm7j?iq0(ELqnXvaZ`yS2veXneY2r7a9~@mRa6b@I7)geDCd z)+;kpbmjLA9% z8ea@u9z(y~fNIkG}|Rg={n8ea_S93EGlxb0Uit4C+0CB|e)+vBWhziwf6mdnc2 zEMiO+Q{;;|L3wIz>ixH0x~#dHMU2ThPFQ^T;xX{9lnj^koMsVYve@hO#V`&$=Cn-1 zS3x^BzSS&ZOjZwQ+}wz38@bPAo#v-c%BqmbVv5`~?TH&wpLJOyHH#RNb)v8sB9HV< zkA3B`_|2RLF(!+3xi5zGKaXLnZhGHkJ*rv6m@Jk+U(9Kw;JC)$?NyicmSz!SvY6+t z9S74s#Zhd2aS&s&eg=)38#7MbnCgZ#T(gKVS!kHS;vL~}!MclDUDj01BF1DTL*thD zPfuP^;B8bO z&f`~q+_J-EJ*`>9n5;9Pai5g3SN?Rh%i5t?#Hd(zWhYA?@F#3#M;~Z?F|qbV`D>^2 zB+Vj5=?0trgstc})9~l~b1I&vkaDLGonbdh%s4xg{2c|nKmOPYZfsk z>uiH{&FddL;Kp#SW)Wku&M{a`k3572&d#3|nnjGs>L)BaSFilnwyiGfVa+1OWU=4s zKDqmM40+9EJ+E2Bn5+Q?>z~J!-Q}|WqFKarvSQJVj+{)wAZpM#JT@e#SQ9pw8^II{G5a9Rz2U&lc+k3IJmT z#bq^ErG#}twYDFCjjpMjURh-;@~h^S*T8rLBalnm8I@&Kdby5ty|KZ(Z6!j)pTuy4 z7ZVY%@K9J;Q&Wwxs4z2cUt+>S*7Lk=pjs-TsFJ3wzhl_6{T}(%BNP=mj7h7A=1-JvjU|9G7AG) zg&Cs?3bJ9_A<_(lm^84h38Z9X1RV1bIf2Yk83maz3K7oJMi8Qz9LUTHjLyi)D$L2x z2{?m_=|lAJmSORsD3Ft#lQAkgBQKx^8`FotdO%_NkOAp~A%#aHJCK`OkR8m2?_r~g z8lRF~ls;rg`rrX3XJjD1s3@x_t6*e6ja6zp2bERi_>f zJSt;!zC(urf>G&1A|o&aW1A7d2Lna9!O=)vR)?I!xM%th4kH@j!OTKoW-v1^Cx8;8 zW6D831C*H&7?qKimzPyADh#GaA5CO_pdfo>PI2Mri~xpEaRd1Dz;ML0YVElUqZ*vi zf#STP-0Uo5Jj#e|)FUDiStt{kSvmQ+nFR;22r;J)7BcksD?+BZih8$5{RoRB8G)>f z{KApBg?1j&uc+lTFOXN1k(Zf|Qs<81>Xb&!pR7P(LGGxmqMRIkdt3t?5%(rDKaf+L zRggU@r_lC2eF#Qk59NPeVAROWQ7C_Ts>Fs9(o^yZFgBb%WF8EObhrgMBeOD!a|;U? zD;N+F%N!B6ATt+bdvp;~;2KrY=}sRa!^MWTnL(7Uyuy*0!JvzmavT+%9Vo;NF3!%* zcG1dH^?=F)XFhF3f&7A;(HXg@Xxxl(o^*A9Mwp7rfB^^l zOY0%Sh9$el;jD)Y9XepJLeqN4Nn$;KwQf61#I=)0d4BX=y8-sJPLJ`G!$n(H#2*X9Q9>VeU z&A`mkZ|8j5h-Uqw4Eh&=Ia$Af@=r9}=g{*#x=6pa@O>{D?t19s(QCg+_uTm>8g4)I zyKr$Q`t&>!@Qa3Phkju<%fj9javTh|8&|ty7|O3-l{vl@&A;!Ue;SyF=@E{D;Zks| z7(;7y`0?O7llT|*&PY8+h?Z&$&v`_%jzItJ_JB(UuGs_bOyIVAz%iL!n8>grTKwo$ z4-Ys(`gp)G+~FQ@9Baz+fFoq82OLMC>O9~$lDX0Yjw5IfM8Tm>`7u@xSW|qBUkJa# zpTKy*W%U&m4M9YN4mES;{od2el_ZFo>4Weq-<`v7@>2pW6R5?**MB2cxxz| zjdW_i@EQT@@EJ9H&$D$CV85*#5aV1ES5v=^^{2Md#LtE`7K8cN4@tA@&u*6o_6R@IhSW!ArR&&F} zOr*xNmMp3IF#qGY3B~QTYGog1SX><&S|`|+EZ$}d8-`3;$FW9^tN3Nvj*^%jj+*#o z3e0&T6~U#yewmY(F49GChvAoGErL5jBxgRWy#_sY(a0INqGr-XTgHUBl@mf2ENQPh zC6tR~*L5v+l0CtZS|n$=uOsSCnH1rdPo}K4{W5%MRCQR2GZ#m=lE`|$y|rd(Y~RwjnK31eJyasOfF=$* zlwqD*$MG{a?E+(ouyhOrqtT!saJQFlELl42A>3gU-lT5wes zbH#h&0!Y>aR88rEF-^rziLYLYh zl!PY7E!l>rvM4^36We!PvE-)xM8>z|NUYAB92+_+w5D%P?8LOTg-55o1?wTB*Eo|@ z<3c&{zMNR>922i5C&ny{#ofXZDx+kw7DDFTucvCJE#=&li!g;+ZU%@YSAZ2Z+o~3QCrCSuW8bGPC%WtSK9(8H5 zJpp!S)aTvV64}}NGY}2O(h9>Is6U+5JUtGE3x9xO`%aEa`)fkx4~@g{DD{whkDH)t z>X?P7qvO+ls6R?SOD#FlF6(ODtaFZ%Z0HGBJsobH!xFDbJsUcOBjytP{IV`wmHKH8 zuFApHLSp^om$^_1x7@+q=HPw_X$pRR>pr*&w;58$C&v5Dk%sgqyg7wQxY_^i%^8lH zb5gOsJML4#`;+ML{_s5_dYfS0ABE%nnJNr+Nuu2!g**KHQMhRL=NmjLfLlG186?CCL@AtX5xBo(%KK zD$uUzbsG~hYirECt*WY%mCtq6$>_^Zvnu8o_^R?Nk})P3mV}z}x_THWn`TWb$F^4( zWJ|WEa5{d~lw$*_+Pd;-$?)|G>HnWzRb6kQaXtsCT6u*q{Q39hRrW{Dn@8llN{-~1 zNB9gJA1?V~Zq|S^&)dz;nm(jffh-u&od!42(B$GQ+0fMCjAhql(f2$Q#AW`V%XR9#q5X6r?c{3A6yWLVeiBj)2=bYe{l(VckJ_p=MNi8 zU(9Z}e6jCwRu)>-ju^HQz8H=c5tGqv**B3Gwh7T@enM@f&_jK2>53Igyu!9;e0j~L$2=P!8vbAvrTI_!%b1I=+^IsfXk}YEMiO+pEGw?n`QUB)Wc={Rsx;YFSPVT|b=9uYRm zcL*?t`VMnh4d@*L6gD(?2$T#K9`1U0Sojt;drm29huPJf{DDaU)#wayy-j5`rUX=0 z)m4;M&*AbMOiEDT($cc2HFc$x)t8l4)K^Wl)fLkJ(U=O=ZE+aNKP>o|U0qc=w?cVr zGga@)K7&7qh&kG7pW1`19nQmUgTrK|8z*|q)TV}Ir~^}Dtu{i=Y?kV_1vy6~+Fl#- zfe=|&RDQ)zK7k?_$j>P*Dh?JG2iVud_igrv5B7mJD;OAEm_2G_26kZ3J!Q^;;KYNh zoZ9r%^dXVo$cx4~-^jDDZv(c>$j{0;*uD+i3qf_K)dzNVsMF6iKKf>j3>0M+=j3GO zj6O&l)GbdRqI=vBs+}kl2eLCpX69y&%nDp~*`Ypk;~RYtU&b?vvjXUs9}1Zn$j!?r zz_u4zfhx>GkS=@rkUEGgv_{+!dQo;}abb2wpaQcc4!*lcK_Dk%WOhLYZVP((cD9Dy z8oQ@&c%PXW7+sK=pD{Woz!!i+1yC3$C>)iIIS4u7k#=4VRQ%;RGegJ}aI^sY3?*m~YAh2M-$T?nrTtd{fRywqzwD zD(R@-lzXy!9DW?+oARg*xM<&$$HSjbB5={aDGx_iC|!4l*maX{m{Gnd=L2(b7%tj3 zkhq!-z_F+FtOp$XTW@;6 zakOWr2iz&Z9n%X=*b%L~@V=#b!12C~@_=L1rhCBgFjB67`-cY{%jp3RIOa>2WH@0*wEMpu@7rBE3apypoE)U%2@IRg;ftiCjl~vO+wSTpU zo&_Dc?U$EdQNT9~Ip<7go|HiA?q{d4;ny;%rq3#`4cmvI1Q@i0jw_-#te|9?gQsC; zqSY`nD-QX#qitg(EWRHa=d*c38_e0@y_5!}g2^=gK&wm*yJ+4pI|cS45`#TO6r+bd z#C`;9ytmgU;v1LkOG>yQjOhopYC-GsuwLWI=7jx8>996cSW%phUy>|GXSEBvBXHF> zvT8_dLj4wpT5k{uBQ)A1EYqEZUy_)G2#WM8xJr5!lJeyxNXnPBkS5^gw_4zi#xKdj z&_7KL?V5sI@KcTKh3)<&-z6+wgJ#OkB$yaMRzC$ziOwNCjbM_p&9NUJNY0vR!Ip=% z<8eVtYzl^TFHj$K@foXFZ(t#&{$b^KCxhaQ2C*hIG|X~`GnwVYXg5Pyt${&2vF@P_ z+lE?Ibi`iW4(u2J8$uF5(`48TN=j{CvTfl|G1wEThf(q!#ku(4tPp+ccOVvGCX_Zp zVQ&>CitNax{V@N{CdX_}J<=Krd%8nsFz$j8NgS3B#dEJBnXq-POc^z-cRU6V7QKZZ z+S(Mn52d!bandRnHBlaL?+&>NGbn}4tEX2~RLr#YezxX&Uuf-`oxOZ(8-p*d?zQCe zG1PT-bjmXKOc*Cp_LVT9D0K_B{TR13v=N4kw!thl<~=OD3I>rvu}?4AQh!2P@WqAY zvM#-;s5f!g9AR_lqtA=dS{BBK+Cm>S<@APq?9VgO>NhVuFDN8fbTw;skb z7&ycom^g!Xz;*PeR^f`4ccZm2_&RJ&sjO_Te_gIN1z%SRfr-kzO9AYkq7b_D*_KK1 zsSo!OfhXVtpf3HvT`1YutwI;)#^6q;95)4b*&(a_T40g}pNE4q@ug$3Qwhi-RbluJ zH^r#bF81zo7EsSwfaZnU>s3gQV`g@O709P0AXv9*3hJKA{3Ja&zBy{osFk$Fg|&5ebtP%>zWYXe|Sg^$8~*n{{zj^Fw* zD9i6kI7l^%Uc!ndpb~mnO~H-D<84nv<1nWwJ`{XB^lE6qqp+U!)|LLgYke)BcM7d( zXggtH*POK7^WQ)@{(LMPBpQW9+5SWI&Mhop&PzYED*jZ#OIX}m?+ZStt|_G2umJ^A z0VUYY0i+-;xGG`!`81(bpV$<9*S;lq&Jz}6P}X8bJRupOY-&!hw-^Ya1jjLL3r98u zSK%36T|8cS-V}_NhNvkgrdVlscV@K17tC*~kC%pIl~{w{uQF*vCm7pATA!ckLvfn{ zpsHS2x}sF7c9BGsfzXA~DS0TUFogDF&3m!&QBBbhNSENJEX@yuq|8Pah=e|Zl_Anq zaMMNNy&WOaZE#hyb04HQ{QTBKa3_iM8@Q_3VN-M-eo5A=a0iLB4en5p{^dx=qi7Bm z-5HQlMLHMK6iA34q+-zpAWaor5K@ImqapQ|s~1A56dkRA@Y}jF@0B4E&3g?KiRQhS z`Xp;5q~Rjn2}yw-korPOvfhC-PjoaUc8=(FLFy;cw~)>j>3c|53$7iKN+m6$WXRRyA*poy z4AMfuoeoLe-{B4}9}?da(KUdi?&@Sms({4Nh$L$+B<0^CNT-R8b}iK1UkORweOk7- zRzkZ665nY3*29oa7RF{seMI^zq%%eO9Fp>Hk0W(O*F0OUra)5ns2?O1mrEg?Ay;AS zP?w=sA?1i}w<8^c{)_VY97vgR^;}4~A{9f*6X`NXx)#y^(cKDZF(kir7bJWdLLR&T zNj()@#h~)}El4WY{su|q#x6)IH@=3Xx?tZyQqKaqU=6#@!<0nKrb}4NFKDW(gnCSR zT|J>epDZ2*(C2qpC;ILogbUFap4gy!6cMZ z_KgdB(1KgPjrV@HKKrU8p*RwHTsXQAed5Hzo>4EM=bTuW9DWHg7FIBM!c0`;ZK&k7 zI^DW9Y|Jt~v=!zWQ3-21=bCV~vr`EAVyHe*wXXOCUhVy>Z_je&^rnF zZ{?+}!-i`K1)CekZSMPa=GgZ7t=JQ4Cj&+!D^}k&${8Yu9)IDx(kf#MsKfO4(J1ZI zwk^p7EjgjTL~rg8bcfKizz(AiMi~=>JH<1$E_w?xJK5|R>iQa+RoVRrHfRzf--7jM z5PXx?H++e%@)>MV>@B9`PIg)_Jgka#I=NBpmv`L!joG~m+1-jPP*Dg4Q;>9Ypt>;5 zt%x%UL?8Qn7tifhHuXEUh;75`+ZOgu=oO#=U2Y799@oVrUKAu64I|v3>Of$lfw;8# zw)uZ*Sa7zLu=sl9{tVs%NhkZm>_Xcykt?nfr7MQgg3d@-=a{{-?br&%?(kw?E?ac^ zzL91tk>2nO#0ChHC(^>-A>XzHk=iVOl8}V+@k^5Tsh1(ao;ciRL}KIgYmu7aUVvYc z#U|+~{QTCZaI;0%8xK`)kp@Bvh;%umLXob5^an_O>wZXzOH)v)Dq>e#RSsMikRpta zAgK!ID@Z}nwLwxKF)Vq%he0sK#jpq`{(l7}6ABJO)WM zl(dkZFISr(vAOnJe}r_WNUuV=TO?YryjP_6AgP9E8>9zB_ZcMB5YejTL!vw2=(?c7 zQjOCwkW}Mz5+v1Jq&U(5NGiRVkW_jLAgT0@fuyQRZUv*#D{reQ4ZD(I+ja3Tp$--H zK^Jr}n;X8iwjkdyEt-zS4jg?mUtvd(G%mj3d)B4jqb~iu)TP*h3)N<4Y_G7e^9x9b zg*nkl4ehK+_bu#9yTPnS$EkXBv(%#;UO1Kk;qN3=p<5j-n>ML-o!XOFsdL#8WRH#` z6a^fiIQmlA#33nV!kDpkO#9$H0K@4i80uze+;M!YGjS^;SY z?m>SO^@c#~ok~D`6IATAb}{xt!=FpIu@ztHki0_J^1O5npxEakxc!QwbMZ?3>(9H= zFI+h~m_jJ3U#G7w?=yVwP!Zywo1$AjK1zWp;oh^A6k9ye!0~qO-dIguD z!Y<>S6(Kxg)vhp2S7X3{3vuQmYXFGI6qwBaY4QZti?M^DWX#4ZI*(q`zUUzgPQZ$< zde71Mha~D8QJsSDG$0>TCWI$M53@|dnWJEdkB*9k9DTvo`!l!NkK=N?nrYWsoL{8NGj#a zA*q!A0#cKNb{iy>@+TeKY6tfcq-BCz>)8rDwU)94sfj4orqI0&D7^A^ip> z_f0Mzh`&}Ya4 zHKV+8`iwfOrVO)cYdF$v6_=M?o{R|_wb6LcTZgzNUe*j`#HS7#APJ~WmA_L5_Di+$ zt17CKVVL%`+7U=hGOe6e!Bk3Za#;mJPp+usuFjQJ)4N6s+D>n+1X72U^0krNiOPRFPujxV7L1ZYt9 z|L?@+@rWLevyxlhR1)1-Euy$v{Mj#?>P%@yLd%|*ivC}@q-%eKeR9<&d?rsCa6V})~+)24d>px!g)c9m$fP7;cKtR7Pm#MramCXzqy6JQAV#ZG?t9CzVMjlg6@XvRiprbK9}BQ%l5VA191uO4y)XXhB-NzBksjnJe;XmTPnV?Rws}}L$GV}~V@<TxbSH=Rer@YN zT$VktnHZDBP+Y^I>l??s>aw=$u!u2P3BqDs%46|?El}7o^vmmzTFhax5`p!_^bijE ze79uX=CV%LEMiR7(ZcGfSuuY;ImKmNqFKb4tYd`5R)fb4Q&RrwvToKaVoX+dXkb8_ z6dVn6k{)(hPiq!2CMyXVUkqCf9^e0Eb%D#;qFKb4EWRzfrcKjV{|cR8I}dkj7BMF4 zIAQ6_*0@t+f9|qQN6W{97?X88H0}iZpFQ*QpSi3I%_7ER@lLtZ*Pnc^=WLgCrDhRh zvQ7}zS#Ws_$ywO!vS^Zq2Qen=L}+|5r|=?e(q|Q zHALThVoVmxlKWKV_aD93WzEnmVocV_!a~N$QQv#YE|>MNW)Wkuh<6uXOt`V@buQ~~ znnjGs>Ln~bWjuZ}{GS)Otax4d5M#2Eq4CAAeDc^_eD{8rHAJ(Lam8dY&wVkBIggb7 zORsfVGc=1BlXWUI?t+Nv*Nj-`vL4keVoX+VVX@5c=(OzES6tS6nnjGs!UK=6?5Fa+ z{Ja0?vTPHw#F(tpgvI)VN5uzOsQl~_b&jsOh*7!;c4a1-@Wn)@L*tsF9lG(Qxi-hL z$~21@GxReI)}M!N`qpLrT(gKVS$zzaX|DEK%_7ERooTR4bG5(FEMiO+pHN?n&UCBw zzjEGpV|c%25o5CY8mx(9e~U`g&eaz*ix`u2wy#Sxz)zwtPqAS#8#tD4Q!h1d}rScNaGOOq1 zmRG~NYK?|Fxuzf`)ikS$7{iQfRTc&utkUUoW>weOp~;C8gq+b1DG(Z12#c(vWks=8 zlwe)Ztnz{4=~x&gDz7QP3w%b+Wuhspu9-8Vgv*qxred*9RsC$o;3;J%B%UCkqWamF zmBVByPu;ZXvm9+TRiEZ}I91k=Y-(YdGM(y#fHcF$36<08X4u)Drv`hN9k`T@Q6%S5 zb|s9~)~dx!l3U2+;>vmDvuZQ199w;b%EDQdbHZu)VN46&6(C zMR85_On@urmY0+<$EFq6mEl62lOGV>$kvHhyj68!8KF+{iyghBnMPm*#f&ejDJaR2 z0L3b-NPHGcFlbY9MS1xgE`b7SDw2A*rAiz-E1iA$v`X9&q(GKAWtU%8KOHNuT$8X! z|9_)N*u0#~!h+&adD;S|Gd!3s_F!ev%|NWvfxXgjW2~bCdHF@fFm9R~z{p|xU_h`M zsUUp_#t(TGjx7!pjxG*n=VccJWL#0NW^oNeYWuXK1EYhPSVL4?7+}Vv541<%4Bv)j z=4Js_loQ}MWcm;cL>kvK^8+-V?&=VTNX1xMv&2RI0t zK7=Ek1_1FXLVo0C=LZiKF>nmZ;9!2y$gEKXd4WjZ3IfFi#X+nG%Q}>A5vj}^g_T$t z#Ut}_vjZ4xwQn^>T*GcW#$BDWsRPpory8-!8Wkui7(IGqW_D(Pqp}?q!f`2>Gdhc9 zbsV0>O0g_&ZD#hpfE(f}&tXLBJWqn7@d_}tRE=}#)cm9 zsmjEXzs%t1?1JJVJ}RhD4)&}R2l6rsa|?3{vH}=4P9MgERKgKX_``<`D;k+wkeiD| zh*FPABJ#NmQI9L*xgBYyzbKHGla-x`rH%nCZp3wgt1^s2%7JGDhmmJ4d_%p^kq_(7 zxkaN3GVqM5G%)`-E{!?`PpoP47&mBic2)tBe9-4LB2ifImpM9^kynr%P=ncsRc(hy zIwO!dIwLQ4bYWpYjdCNw80J>DUUDeX%IwrZsndoIK&zpx%uXFvUQw1h#5vc-WZm(l;KM2l-Zo<5c{jt;IV617B@;hid0L2@b-e;l_7HTF%5e ztbPKMnS#-9oVoYO0DR(0Rk(xs7ecsQhv1c9n8NYZA)0?L!@sN%$dB_6?_cQ!*dHz9 z(Efdg%Xeg9E7fd;<7;BHaBqUXU(m9e@#7JXUo;%D#2S`^7ef4aAi7a;FCzcyff-mJ zFqwQ3%|F}tBknbixGf%W?|Z~;_lWz{BkoI&xNkk;_It$n z_?15Fh*qDnyma-5JK7_zheup5kGRu4;?D7i8|)F6<`I|a5tr`~SL_it!6R<6M_jo_ z+$@i{T93G^JmRkPh+FCrccVw#Z60y=c*H&E5%-u!+%q0=FL=Z?d&ISP#J%Ye_a~3I z4?W^O@re7UN8HyQaP054dBk3V7_EM$fAJo1$9cphd&HgP5jWT)?gEdvJde1s z9&wj?#8r62&GCr4$|G*EN8AdJxH~-J9`J~J+#~LJkGN)!xK};m-t~z4$Rlp2N8C3a zar-^u{1d&^2Z+dblTdc?JQ#IIAKS$e5QZBJmBbGh6fzeTjT-9axl{a?quL@^MK>`#b-U>SPnk&fa7<~ zeI9W56l(Rv_vY{;T0S#h3OwNWeQ<^c9A;5l%cJ1%Dg58r=dcOhjs7WY_|;%<@9Js) zxe-6a=Q7MBgIC$&Vg8`%3VcpBbi-54^VH$yc~EHLXiIc8gz*6~R zIA@vob5ch1@7I?hS*v+Pc5UPbYevs@MHHt$Trp<|O9b~*lln)jx>t7d>d&+7QJgw{ z2Cs>;lM)t|PYxCCPklqqxbm4+>R-5b$t;&t$(VZkn| zWPDw`3I--wc75K}mV>)OuVH0))0mi*%VIJXH`nj$`)X6hw=Xc?@7%jD)Y@3TeaV)( zw1}-G6K)(5LnACRm=bZsOQZ=F`HVD7fZeN>pj>sfN`gU=#^4TEp{ZyIwjsaTD-zxd zw$c#H?eMOt)(_KQshgI?917<_30kC)4JMgcfaQ$kc72*n1eCroz^W zmCKGEkywA?;w^Q@EE^LuqBy4hsD?G28k##T-cr9KwfXbTCp9;0jDdxegsg@iy3YS2 zqKE`ppLYobcU-e>z|x*a`c*zj4+Gb=CG7O=nzA7#j=A;}gQXjZ|PxUP#Kn{g8%=e=*2Pnl8Fe zAgRy}KvJQ_fu}+{64LqN%Q0|OXs19@p`|)fjw6X>rNI60`@i7{J>oxnLY)T`kDT*> z!e-&F(3|Q3MTxeb&rd)fwzm8AqHhEh0GYx}yD`+{PsVFA2q3@ceE4$(u z3%v(Bo_*gAZD<^~zVDibW*-b(@@hkKEX+hIsWS`_D#;JKdrCS2HX124 z&&Q5f8f;B?{)nZ)uS3D@I3Kn&_zjFSDQR~oxK&AeLcw>H^ld1(SxMi8g0CxSFa8W) z8f-gU74jVxu_yFe%ratyVxQw5)+S;s)N_rJ({P~g{55us5+5quvFv*Kv^2I`Xx#d& z5R%r?HEq(ygykoQrNLd}Ro&uLEfYOfEgkPBH;XmzuU)m29=>W}nevPIwg04QQNFNh znTQ9^Z$+zG_z0@1blAu0dbAkm(N-})CM^{~gI)TxJkFeFvA zbOT0JE!`ohs--6+Rkg5EU|IEB3m~l(iFP!d(MNg}VWgs$^b+q{96Gk_wk* z_mo5vdrFc@X7K%p>NZ#ftAM%MrNQrM@(2}6 z0{jk*YYnXpebY2DhP8_ywM*ZxSz)a0yQZ=JL#bO{=ZVxU?^0^Y>)cqlBcazdya~Dz zxnOBqi)8IQo^&g_D z*wN79Pn(2ZNUEwTVB9Fgmp!Zf9o-M9D;VGY4lLtQp-snjUUZtLTcRw;8Vy2d-1gK> zun1Myn)+Q+<^fdP4Q-v~*XA`{vL9WxP;ggM&pV{WXqwoz_sh_mt{LK{*lX5o@6>mr zT+K*$YE-;$A6kXIpP>cY&?yp!?ifIEF@>#Z^*iQ2rc#B9y>Y>g)OI91t#!ef;#cUv z-Y;ExXxuIxQXATXz8i8Ao|=ChD*smB8dbu4ZL23`6g;{2E8m}8d&rkJ_wP%*FSr%$ z&a%LP5jQXs>w2s1dF-MSrCVwDE!n9nmd+S@w9@tL**^FsGNK|vh1*lVOKsOpVoR`< z$fgX~)sozso7Z&lzueqwT)K2Ab5A1Z3%$DLvtGVeLu=M-kL|lA^cFIZ0F{AXH;qOH z`rc;pBXA8Zox<{P!H)S4xp`Q>GxfW)wgqR4U!lFx!z$d>x0QL=l9TXM-L-9@!kvRnVZI~&=WUkqg>6hb7p)&scOu{-=RbgJ$6CnVK&u%%M| zv85^y|2m->Q*FmFkW@R-6OwAPXh>GIS$~40+ALZDRBhI7NRPoMzqCW=;mmK9!&epV zwUAV}AxJ9Rm5@}Mbt@zlE^Tb6aA_J;NwjLAd|3!dh5H*wDvW0!DW882N%{N=q|xB} zt=A!`_W2LzI3iGinYV|1d{Ukb4bc(nqpNxw?P^wTnobhDlT0hsW47} zq{8?aq>BVcdkG3h!<`CO1SuPNC3fr^cKx@s!n=xRb_r{Rcm3#>@m4FmtG~l;gwfUC z5v8k-PX1|l7rf@m&Upgk_3n_mttGe%Sw|cEp*FmkH!eW0_r2hr;gfbItmukj=XCJn%nttM!*%eR^8Ag3 zue+UjrybUvd34fsXMV5KnMYNvJM;Tgi~RjzTV$uVz6XN`Kc=gmIDb9Tjucv-qpRNP zw!-5!qy2rop(QR2d9XZ9+TR_a1+8XpeV0{-?E}I`0sj5A7vlgeXp`SKe8txd(f!XW zKIIE5zA|~J8X&0(!yN~>AG(g6^}j%;s*Zm^QV;VUNXox`kfw=$2Ouf`+|K$r$Z1va z(ddz?_&$cD9_D{SQV%nCWaYq{s`xDNZwg!$F2_bxxU2$IxYt8c6(1`@749z~sVd<~ zM`HIrteWU?KVqpm>&ohK*qB|3v{>RuTg34#^975>WX%rLYZy(_olobDef)%meQ60x zXgpPQQefGANFM}?;iQ?J+lMgmd$%@?I%&*F?d|VT8b$<1|4(WTU~h$1mavq)TXELV z5|glaIecnZ&xeK++A3{*ISzi%c5zeA4-M`9 z`JF-=Qa3dv^;o$qwkt*q_h7^@mLrCVGGchBe!M$kh*~4yz1om5!*%HBp@7Pm;Z7Md z9EM>+Br><*z_5hnrK~XQF+=oEku(f9riJh#7hYW?-1sH@@N{QFlhCV6-IDNfeD{X6 zofeY{_wn;Te}OSccsaIP!-mbsdtYnAzWDiHN&i_!bJ>ONq&Ej?ioM3y z+_yF1<*aUf-^8eE_L~iB2BdBD+^55^!@3TI#vbL4UiWn@Vk~gYrIRt@DNog*dU!`7 zS>7u;m?jZh!+tSoAA=(Aw;G{S(tVEfcSx%G;247nqYYB6FxYcb)yI*@RaI4-2ub-; z=ScG*sj89ILDe|MFCnSwjpNCxdSfY3)!RNus(R~;kd%K@A*o7j5hN8W+D%ijx(Sl1 z)NY5QV)Y0l6)RdVQ;ZWKDMl|ybAj+%XFyWn(zdb+HxrWL7C=&5T2xltiIBLY&TmbD zq(Y;$QN?I*BpKyMxgYuTQ;u@%6iebW{bBv99Y4B%wev^zulCs=J2>XBC29w2jJFO} z$%Lj@?l*yolcQM}=PuUU+sNJ^*wkk`t1lVjz`!nsI$DPZ(YxYkIckm6P43WR!t;Js zWC_pb#Ngc-;x5!_o#*eAx2aRqXQ6}FYl-+05`Pb)fZACNU3#pd)yI&vNC4Bpk0INo zVw)HCZDrSw>0e1jiT;)HudDX&(s?ntX$#P)ienu)X*(<(o1Ll;(W%m3TFz%W{*wU> zbgI^Q>r}B>@m|+V0Xo{p73B*%RRMXD8X&1B>Cm03kAPG4z^9PZlld(q<=^*^Xs1zG zHttwEorT+_Y8`$);U^E+vWKLee%h^6Pyd6Emcu8%#qO1o_}-<$odrpS%lbowOWVb& z{<#K{3YTw~sz&&gBR%g(QaAixr|N%er%HW>J$U64A68ZTFYHux``^&1ikB*&4_q&w zdj7pml?tN`Va!C;5dPuj|7WL4#p=g&suY8rs@al`AJeH)Tz0Ca3-_>{Dm`iBOy{lb zedOQdmS7_Opj$!z@P{?CHR&_D+^w-KrrsHn!X81L>yMi0Y;zGe89So1`6E?vk*Xsi zRb3)gT_aVo^@-fa!tS=kGfdrV_dHbO@wIZ&I(9r&qthD_O|AN6$0=1Z*?_4==K@G+ z_$7%+dwQQ_mBFQ6ZQ+tG636ueBHaZyL!>9*W{R{HZk9-I!d2mJhor(~!`oNx)EAIc zxMzO!*v`bPn11w!gGwXD--bZ%T8J<$C7bA6u%_dXrM^0GR3N^ z!l`g7)s>LO$ki&i%9mP5{UrTYLsFfG#gJ6z0XY#Wj9ZO!ynLhmPm8O=n||#1J)xNY zO=`2=!$D16Q33bBB_&C(AQ9yo8#cQ0mrjVbmq~}6BSOKX7Ji4sD2Kf#slFkH-V#M` z4a)D6mUzi$rFs7ZJPrvr{3RA&&{CGrTX!f%XE?UH-22ziYbUkmhL5H+W&OaBnzO<1 zt!XT5(|vo42+63-lJ>gpoJ~|ZvBl32^^T-^XyarC6l$}Bn!pboZF{%c9-j1F!Jtwgf)tewa%QYOv~-yC z{L3C1nLrpZeX*Bie_$H;9ixLrZMH*LrPx0U!&vcp5DCJc!8^st!Uz+KPq zakEYP_c69S!WKRa8}|7&yc_@@@8PNK;G7%A*?`F7%fp^)4@mq!#+GUJlZY9A9BjP@ zOl|>sD`U{%QM?wqjv2@CSUoSmF0UAst-tuE7zD2C&N$T_i44Mfx~>-7Jz>vBbnxDM zQnVUY?*>{r(XAYbKG?zDhiWuVgv2wy)eEj_a8e+t24?~!g)4)ka1{>jatC)Cq#%BN z>%ZVm7wI9m{Y2X6=-zd7{G^~p+S(mm7nBCYJ;9OsLsIXuRgjhg>$mD5DWCZstaN-2 zRyyv^pnP8M==fMD9KXXVX%8gjGiMP!CO&g?Px&&%(eWKx>G(N9`OLw3rMu0+J?uy? zLQ+2e07=bH>Vz6mF}M?u(hYQUqaZ1txhtB&v0hcU%N^-jNXqBeAgPZj+aM_hztSq* z0Y^F>&562t79@4G0FnxAtaEjebM-1mTJA_sI?@Y}R16Y3+dlVzq((k_JJJY8s)3}+ z(0oX$3~}2{?rrC{u7{+`+I^5l$z6C5QjSQELdq5CaY*?h(Q193NUI=?6lpai#YL~g z(;oDk;;r_eA1FS+`M=};a^Qb72QEZtepwB{de$%FbC-w|4|kGCd|sxAlmvIGNbG~N z7WP~0sLvEB8SZS6QsB-JsSjMf0QhB(M!xj>VNX3qhskupX7r|wF>X&u0cZf6vuJUCXq+g0|23)ome%UbjevugS z2Suub`-n*M;QmG=#y3{#jcXur$4tL$+S^qm`p-$^eyQOTMOq16cad&^beu?x(Fr2m z4T-Z!{nmYudWpo)PZjA=M|vF6X`*`?(v$f4tyOS;E7EGXJo8&G!u_2{&2WD&(t5Zr ziL?=Jvq-PQT_@6JxEn-z7w#sJw!$UCZ+!^&Es?gv-6GNsxPKC9CtPCv)-Jf)L~4cm zkw|;sek@WOT(bPuez>2C#P7NPED{$8&`*>QR~CDJ^&IU>!6n=jHea2X4fKe(esS_*fpNXy}l6KN$}#>a2n z0(YWFcfg%2(%o>&M7j?yW9GLWggafNN8xg5h2MG{?rf2shRZmj{K2giX*JxrBE1Or zN|Bo3GPZteJ={eiZG?NBNUy_PBGP8KjJMx<7j8(Tt#DU}^da0|h_oFpQ{cCDz`b3h zopA3GX&2mkL~4c0wD_$(aDOFI8{CIQ+7I{FB3XEvm@1S%NKc6r2k9A+;vqdJ5}#tG z&u=9``h!T^6N|k(ls`yoL`sIVL8KH&n?z!7mMKN~gY=e210Zb?i3?@^B+@WQOf$+K zq-`PvAhEBA@(1Z-k@6rh^(cRkJ{74L5~sNMtqUQ2Arj}aF&|L=AaTAQ${!?tq4CQ^ z8h$lK`Gbx*g7OEcT_h~sE0-026x7;3N?7s7KUnC8KeDz@*7B*vdjoL{!oPtQesT=5 zsNpdPI<19HX{poK1t-_#Dz)mWT-Uzfy7EQws2w!WqPM`3tbBonNO~=PC=6XfdQq2H~1w4jgO|$1~uRPeekaBTJ;jL!v|EAO=J_P8blbN|uP9 zgyJj}e^dyABrbyxYiOXBxbO^coH0fq;1B*XSUY{Z#!LJ|wS*_W@EpF7i9d{t_?bG; zl86oBA9^NnP&`~i;Nlr$fis+dE=gBB}E9eU%b*gi#VSW$M&_W`#(?RY;vL+GiCA!v#+JERy)_NEG0c3WFyq43Q)ZNIDFy zqeAI)98?(eNBaT~wJ%B{oDu_)=*WFhlFk99S0_kH5Kly>;~-bXAMFdSYhRSaAQVIX z%6-B)wTvJCYMlU8oF%omXk(cF60nXx^m3}1K-#g?Vas(Du6QFnIj4h=z!ypWLXv!; zUf{}KsCiDf`pfvRSW1~D6KZ)r@nj%iDW>|7WPDPkDANc2;9?;#Hdc`>PVGHWxrJ(3 zov37A6YK&~S3b?ysWnqAc}`Z)5!k)8s})A8t)DXoo2-Bo<~_DaWlgC$R&C`~%dSiwIA8>JgPmJ8t8$t`PenCq(NTev*VJH7T-k9IO6&{UA%w~w7lhQ< z$xavp8OYgkK1hXU#-G69sfSL%xo!doPexNPp{%9~QMI?Z4N4l2UCC2tlux}pIjgHB z!qnvRB_j_5AEn`!Yj|W7Q-_B~vG2e`XS2joElIaa0`eDHwp)kuXqb^&Y3a=Pj4RGM zCnMY!iOi7UY0hm{2(TEDgXfiksT`X+qpSuy29(!y?Qr{p8AZthBX3Z6a2j&h@PIo9 zUPS~L;3gRTDyKa+IX0#pooSyHs3o;HkdS2HkO}H_CbQ7?L6vr>jqn|RUUqUUq z6TsYU0&o^?L>)s!z)YfdIC4Ml69$h}O2mcn;c*szN%*-Mj_ITrnmITdY-sMlS%IP9 zo6rR}q>YwB|^M#nA>H36AC*JF1R`^RLul$FML$!?y?%!zl+m zj)FfZ1~@oHoJXRgxlwEUj^+Wa>E>uSvx`TZqiNBaBOJ|Et?A-uzSNp{M-!tWft9s( ze2&!`3z|+=N*&4UHDOh(Sm}aL4zUjJ=fI`(;wkEnp9%;8X96= zM0gHnFfrev>QWkzi0_aapHn7BMEPhp>tus%wQ!x``qI$D^_PVF(#{*!P-3WsaY;7MYD)8S;+=#z^BKfXxn+1ty#pFtWykD zan&to{A|`V%_7ERoocXFUcaKvWi8e$VoX+VgEeQwx%arN2Q`Zrla(SYKU^M9-FRA9 zZmicVVocU)(6}Y@y4shwahoa28oI(Fq9i=c25=J8cfewRNP3F+)ew z7{=Ovb>l5AtG8wmW3up|hOvHe$pBQH_Pt2gEMiO+TWvR`YoEM3>?xS2S;UyEvkcbT zHyj=IykDVN#F#AhXxy;sU#WiEjp5CjMU2Th+hFzhulMG=tfw@K7?X95!K%3JZ|IWR zx$&B25o5CW4b>N;Z?N_0^`{PXS)XbaF(!+>ba%hk^wsaZ;Iiy$o0v{kX_mYST2JFF zva}2kf9!gG%~9X3bp1I=tBEl~A84@32j2Xi%NnLx#F(r>1}kIw;456#IL#u)WU-xh z+my8UH^WLxjb;&Jve;s~tkZTqlj(+aqh=9fvW6I}Wi>tXUDo58MU2Th*I=EU)AWJM z+N4>;m@M4puoxD^O%J)Oe`pplCJU8a7;D!zvw!Wfd~vvlgBX*A$1;rd``Lea*kvVa z7BMDkguyy)@tfbetn)RC7?YJ|uwFQE$^n;kiDnUFvd%MDz50DU+htv$S;UyE^9|O% zmW-J$>t@X&#$;V!u-;93zrZo>xQ@LA9KU%))g0V5M#1N zLF3kJze)Y#CYRMmvxqTS>?^peqq^PvrOOIx7BMEP&|vl6+wIRT>oUzE#$**4tf^<6 zh2mqEs70DZjL8~pu>Sew>wcGYw`LJzvWg8>*5%voa9Ofi57&t?Sz`=V)$LjLyR7$g zSj3pDu?DN($ji_a*y-A>S;UwuR4!pT-}0AiAZ=D+H(bO)jLEtX8uxx}x`fj$Y}PrN zMU2TBXRtnb`GJuxYouloW3t8@tT!`9goQO-vxqTS6Aadhdr$h*4QsJx5o5A0GFZPG zJNOxwb-!j2W3uoNhULb9qi9KVocU02J8Dl^VhqqZJI@l$(m@eo-644n9FL@ zEMiR7r3S0@_Wq~4tYhPG5eG3QYZ5f>UB0qp(^Qu=NVAABS*XauSa(kR#c3|9NVAAB zS)~T+Zx?K9by=5d7BQ-nErn(W8S;}pBnIB+#6;^uP9es57rt-YA0M=R!APO@nHV!Z zWdJgZs6n5@eTR`Z8Bx4L1yqglk5EM#j~46VVJ;vuk~rrnxFjLDj2u$q27 z=^mHW{YYHIL5#^NhsMo~!i-$pKs&5d%_7ERRT!)%{?(37oXslHEMiR7bc6Lq-F&n) zHmg>%h%s3+4Azl%S8Q@wH)|F#Cacn5eUbdp<1Xu2%_7ER%`{lEt>>?IS?_2TF(&JB zgVprnQJ=W1-I_&=$(m)b3NK9R?XtQbg^M_dFjd&1IEn7BMCZ4@Ov6cYNPF ztj4a@EMiR7H3sXVV}^&-*f(nyF(&I;gY~ByhlRC7&uSJiChIzbb?o$0!&;(uG>aIM z)nKr`-FDXiBGj>4vxqTSiw)MTW4ZRhW_3SWv57HROAOYy-}~0MtW?b+#$=&d56k)I z{C{}RWtC_aF(&HmJt;S97BMEP(O?anIUR-0&W&d^ zix`u&%wSa(bVAi)v)<7xVoX-ZV71lW7uHtp)+}O_Pu-8PWag`nEE%tp`3$&-3;c3a z<9<3?EO*NR>sHMo#$^4%U=<(ta;nRERGW)WkuZZ=qVo_N;XF6%4JBF1FhVzAzC>4sZp=SF;YT*N_)$wE~UcE8@= zauJ#)n{}3E5o5AY6v9~VUUk_&T~?lE5o5AY9fz@Qc_a(fsvTB^W)Wku?l4#>7fuOF z*J8~g#$?@Tu%C9VlZB=z zEQTXvLcQFuKG!T_Ocn}R7;E~!x}WZ{{Kw)V4q{B!!_c_7@j%VEkuK{L%_7ERJz}t) zI@$lc%Q{c9h%s4@8m!Q$`;T{76Euq$ll5zZm3{qN6)vkrvxqTSzY$g}Tpn*9KlL$} z)udU(m@I&h8-7x7d^I*UtQYr)W)Wku&{%?{A2w^=n8bWHtaX}2jLCXJSjYl79=f~x z4=$@!vxqTSPeS91Nrubg?W3lkSyoSuWu0=I(h_5`(0qcWJ+*?jXBE4w>6%51$$DB? zC&K0N!C5J2WbCkR(=1|4)^DNl#hgtFjw{wSBRg%@>zYN3$$ADFx7QsU|J%!5))6|B zh%s5u3hNlSJbv}=uTFDW=V%r&CTkTmzL=9p!7+JA^ZPFAV$CAPWIYFsFXkLla2)f` z<56kZ=~}5-#F(t-q4CA&WLrPG>sPy6)@zzYjLG_)uzJGfal*B= zL0EQJeLntW*pu>i%_7ERy(la@tb0Fu>LNFWDJS3}4q{B!OVIdY>^v-5Hfxj18lzdn zn5>tDWtZMp3JXyD?YrElS;UyESA=ykTpp_~_kZlNS~QColhq83FQzYC9v7v&xXfkA z-Z;=U<7cwgK;xF)hVA=WT-F8pVI{_7trb>pxI9k(Zqf@bYp!MyW3tvk+|9u=Z#cF(&Je!b*Y5BmRn)X1lDj^}|Yx$=U#oFJ>Sq zI38Mh(mO6|re+bN?%{8=hS*NlOE^oPQ&T;)sBCt5AbntZx}Lfmw%=GFFg!5)P^jUl zhlQjLKP&`u9{3J*SRDI9hXu)6s6(O5t<4UBbT>OY1Sov>vqQjCrg9O10+p6x2}Efr zCdOAyoju1YEiIi@J+*8W6w@lJOXt*7R@GIMR?n%ctgfoXRRNclmQAgxE3K@)thA!O zYO1SNB+MV5U0qc=w?eV)%kULm+h-Lu<>gkXeW%T=aP&E{P$R###93}pT2o$EUsEM3 z4Dze$tnl;Vx*CfK!AgYxN8P)?M^#<><7b$0Offn^r-~IdDq1X5fe;j<&AiUM&&)s! zpb*j!f&>G>B%^4F1P7||5U^K!Z*6UhwfA0c>#dLL10QV@KnY3}AGKItsOUwZH7eDp zwE2J6Ugw;dGjkG#_WthY{?8|Kvd-GywcmT~$JuA?MAJ1oIjiaFrndHMSlP@pg2~M~ zgPF~!JQjZhXGC2bFo$m-%nZEsFf+8OmB$qWYcr5Pq4S_fni|t>%^la)iyiv)jjgR$ zHaB^uN!9g9E{>Xx*0zQ#xXFxEY+6Cbn^trv?N`)Le!yF)-pExSf11F#Jsh7}r&L{C z@AuSCzAzHLYp0hdg<&;`JkMwD1f34|@|aMF~bl_`(OXye}B?hrMx<*FrG6`{krB6-6#+vCofx zQclHvJ|Fup(qNX4_~bw=kz)S~-7EcmUnJp61vq^s*-BqL;`JvINsc?ai4x!jrB$uU zSV)Qa5?+yoQ>U1{NW|i@KN$0RDEG`+TNy^)cx5Hw5g)CY1>MXv0GfVn{v9KIgASpiPG&{xu z!GvFlBbxN}W?qfo!9+BfQpgeCrIL|R2R^&h&k`$jj$wb_nPy&<*NJze< z5>1AZDQ^gcQkayKH=OhZ{Bd%Gt2xYw;`LJHq~a_HGaf|q3dj892vM`7ABx!m4VUlZ}V=5*`gGd5-=_z=s_4dqm~S%XptJ77h936geU-W^W_GNF<)}!jY1h=a}%u z!eM^^5rSZTm`Mc{$QSp)k=m}=TU6SV&mX2DBWJUt5{*Yf3i?zM%$JmrvGH)&hu9Wo zJSn$8Dk73uAQ<){Kp$lg6`486s9z=>#T9;<=BVv>p54%531_E+i7Tu+lyBzgLp_fRWBAK7#Ga^0|Wm5Eo49N3eMmtD^6z+qB z2c~q+Kr&;Yn4kMn3wK`-onioe7(#|KVqum~1bqQ-Jfih+h3Subp{>Fp_P?+?&4|X7 zKs1c5NrX)ynEg+s!f}6``+AOn**%a7`ILZ2pNL*wInGFhL*8IgcnEMg5`3 z;b-<=Nv0w(zsNswE^tqz{J~%V{UKcF%2T2<;;|?WsHU+Cl}(|07#)H)ER#ID=Y=2l zM?xqgF*+bbzW<22682+cPtxR`C+`dUWhI#;c@aXsyFWyuj|lru-sj~XG-@K2!nj7n z4(@sWBkxfIX}m|FTe!z*q><#oglI$N{7uTqB!;6t?!d_hvwH;Ni zV=@g#gmj*)98E$gh`|a)%j_EU#}i>WE=EX*SYB3zqDm~9B1e+Ua}1=saxj>nNad8I zHmgG}$3k9TipoH^n}bb;5|KbOC~}#c&90aQRD?ZEfDql z!pT5b%va1({!lRF#b_P5QDKhoG#|#9sbGYfT;4!wS~w7iV9Y19sd?fwErM3)3qsM; z7%DHUB#pwUkISDNP77jC7D>iJVkl^ms=#zA5(o!GB{I2G#zO%t{KR?eWX>pGz!OrE z;ZQgk@gR4x6jxojytSjcQZu|_^2itVVC0~n^(Q@SSw#cqm}D^t_`M#?k5RKD0Z(N4 z;@0ZQ=H=B`c=89^t1GH2wMDGzO3gE{*loJW7hlkWsZb=A2>8sw8YW%L@R&#O2g0E^ zqH9VLg)J7o^zd>Q!2F6QOq0WSRQ8Y=7(E+wLon5q3$LxNoHCi>&BkD|YiD5;mx7r$ z%y2AfB7kKo{GND1#>fhNm#`SanX!l#BeDExPD0#+Arz)QK7U~nnukwA!ULrliC{VE zNYmg8c`z&tCSuoV?;uJOLS#g$OibL4K1YRtqh2JnF$X7gOU{ zY=qcO&t~`{BgdhjQ&DfoACQ9{%`#11)e@`CB3Q(pEZS68`VH}fCmdINay%IJ2)9Nm zu|UGQ+$gNDF9@xaC_b!MPFOLNN6?E|st5}a89pow8{!y$di}w?)<{*CvJz{nmRYHI zLg=^?GR8Hc@{ae%ryQ;Z8&UKnJeZbY;($@BRRM}cTgzbM9;|)E!ro};aKT<^6k|5n zxX15D%Sk8}^#+!8s%Lnu6C3cz=q-cEWHPtjRASjV5Z4>$qUuWB3nZzr)d)4<^`t^r zHb|kJAHM47el!~LC?c%K#$uQu733An^FT!mQ`==vDw4udtY6D3RR^VoiR`pm=!j>L%x z)62`JUNB`EyL@|e+;+V5&PmG~dXJLCNfPurFxRjUJ)e)?Uj5B4G3Xjy23*s^^cCZ4 zn85}yPO$4w{NE#$`Erfp5cdrH?#;uMm!-a)k2?#vT}9yNMd>F+;LZe&Okd|-R^g5T zU`7!*3O8B=?l|C<7lFf$4QW*oINJAgXAwB;m69GR0(Sv$FBO410k~sOPjWA-{JR(c zI>I^kvcge5UtR?665y^Z0!O+E5$SP+GXtYsk7z*+lM7$b@&G~9(m6Dx>a%^HAC-CU^f^5j-z3sA z@mbEWx7BAUwPziD%&zW}>TyI7XPsRsxmhmDd}P1LNTlXd=50HU?tahJ_qoIVsqpSJ z#GJkBeQ_A?D9>uky4_lGjc8@wc9CaC;|vn=s_(r~kJA1eirT=$XRUpMuu|Gn8eWWZ zATl3~THK8o{;wK}>u6fpF@D){#F00p+DMbrwW{v6gM|jVs3F;Hq{ZnPf8Xn<>o!oi zdY+oA-8P;8xb|G|^U6Yu6E1ceX>Yo2J#+Do3NciP?A%sC-SFW!D9QY=u+KRstkCZs zMZ?R-d_`bLW79Qt%<1U-@-d^~Vz-?w5HR1IYWsO1<`{t?O-)zV6K&X|mhVp~T|vmFdsu(z3ev9&~&Z8{jDj57>aFn)8*I)@9QhXP_wk#NHf!QaAzfUXyu1h z2A6Ces?XT412rE*+R$zzjZD`&O|wxO@-egt(QYGcOxJrqy%`mOFmzF!po>hA@sL8_ zvPdSxm{Tqg@WbHf+pe+()w~*p%$2d!OpTK@vDTn*vL@f!H4YgkW2qZ7PS(KN_cYE? z2IglPhYX>y)cqQVjIJ@KSL2XDHRimiagH}Q?`a$|pT?LkG!B_+8zoGj*SFMP(bN%W z=xFdYV`mNa0GXZ|(WkUoy3#UARyfeS&?Ig=8y*-OEx4Ix0sYay>kK`1*LGk#Pd0km zqvm?)HLX5yuvy7KFERZy+Ef=HO$=G7I zO3P!bQLQ^~v|u%=-2{1m9!`vEb3W~%AZY9AI|aDOo?LB5xI6H>9V)GoR2D93;Z~!g z_254OjGxpNF49a^xHaJa7?{%tfNLb&N;rOg7+f#>sDX+*fm9eSN|IH$lfajOxk|&? zhQVC~{&#?R=rFkP@Zh(=yhCac7yYvew-mT}$h0doB~5z93U>l;Mc@c>eGxd? zJ^L?3;ApG={YB!QDgsC0zFGv1!u?ATI4Y0P=1Kzi1JMC(Avdqo_Due5$GN#vf-Y{7oq)`RdzPXsZYVVt^~K*Qb_b~50+zkSnZnd zBxIMDy5<~3D9}NN>+(MQPn3P^n!g9caRPJM{!d(&ZE;=x3v1L?Z_ zX%a$wo@DlX!6u$tv~J1^(oaqaGe6Nv-4f|11wXf_!7GJpGw$CJ6bjRv-V&r29*VS6 z-Sd=f_morY>$cLEl6@ae%0p?EOErn@9&}S()!QM~RZU*G^Zdvh7%L7^{)VCWtWLNj z4M_(9Nkpi%rR!cupP>u<_izGOJ%Ro;aK9Z6H%IMs;}p;hD*Ufe`@1{$;ne4D<-p=w z)Gas|6-SHWeBkcRfyK9Mrzl7$<%%8ZE}UA6^Gtgj$9a)pN2X`ougMXmHp>3uCn&9| z=T^O`%7;{iT5{e^K}aAWsD;^#$9FLt_Fo} z5ICw4j6?Z~f-(B96Rq;kI3zmLSt_MZ*URJsYiy>oEC=-Da3FUMXp=QaRmQsR-BGjD zF_W9Ax*K(N-K*LD^CT-d9MLUm5&jRQ$JPv`ONY|jdE#*>?H)>(@!`nEF}UN!x!%;K zIL}BY(16(~K33y0poJaIGtw`N^BOo(om>Vn12^BmEjDmhf?9zeP9ejc{aXWy{iC|c z;obs@%j)|E?iZlARXz%eCANZMiGEO|x}DPRaA%)C0Oi5YElzb~NP2r@`i*|Iq zF&?qZPb{X2{G=1&sr<|J@_*kd_XP?Sz(8#s7Bw~p_2Xessxl5$z^DNze~g6C;PrFe zT^qlR!>)%B9!if(p|nv0_?UYIC5EvpHsLnuED@j!848uo~r;2Cm465fujLB^|4@QOSBA6e5588uR&!?lm@hn3xQ%>92AwH6EBYRl4=6Q zxK>b%>j1R~Kc{pp?ws$WSPzW96VFn`ljsp}jy-Y?mG?Dd-o<(gI&;nvLWr9fU|_aT zuPTQsekY!&XP^$k#6abrsLQ`?G26(4*UZ^24^qD@e8k9k4|}bt(r@Wron_(Gyga`| zZ)J)M3T#Gt&-Ia8dgOzt9(f=&dyepasl7+uD;PuR*93>g3;QzL#-fC@0q_gLr0NNE_GU=ahbf zJNrU9n0Eeg0^3?|W1#D6LxH%6jdB>D*Wpw1QrLfnd1QF8LYjJlHRTQNTBkq1%Ihf*~h z1HkJJiLvGUI*cpJY6m}Y&95zUO?U?Fwr&77<)CZA7W|j-FqZ~Sa|w7^Ekc^x5AYx1 zeVnF#W5$i=>g1>DQCG6+wt4Dyjx)79E{KysjmFO@orXJC1$s-x1u+8@7orao7b3N0 zmc1Ml%hF7U3z1qf%Vt0&@N-MIQ|7~zc*J|)+$%m8#zc#h%5j9-5i{omxFVUC~n=8JZS zoE9OCIn~M!i(oZYg$WKOA2KKsh0Mh@P>owx?(hHITl7r`#(d?j$J^m#w>_)@{9*;YVar6GdH_1l{47GpK4$~KGnpB8! z3d|Y}^IhdFC~yR7+GRik0=sQw47DD+trvF+b=Iq&B17{1p;)j%A9DH8j^CmG&c{&i zV7Fa_JGsbTkH1xjIYwaUjaMnC15=+tSCQ`zx!7&=wreb?+u!`@BZU~sIlTGTFilfS zEig3Xu-oV@7x_5;qsK5E$PddUF!Y9t!kYBv&6R~1QS)r{c8h$h{BqT8g_tqIpQmxB zu+CAx_sv4g@g_`a;TLZ)25f0PMNGR!iT`wzw0<$?-!xA49sX}MPWHVz9a~LTc6Y!B z8YlZUeo*6N-~5l_0MN$t_w#gcJYCs0|8%%CUD^E$U)MNC8B!G*C%Y3Nq;ax45$F(T zy0SY6mT8=041ZQ>ob1jBRpVs$LHtnTNQTrs1spp1k1su4bf}=2^ZNqMn+2Q$1)NU{ zI8IUz;?l!9v4AtBfD zt~HtzVa!s5&zesA(S^tQvr-RhQiL%}onn&moZ5okR}bqwO^PsPDbcGLG5p21=0lU{ zQYVsv#zh#j)T!WPV>ta#b~&Fmj|92$MRhFtgb`FKcP*mibM$i80me4%17y@M-L&zjZn69CcjUn(Al}aW)t} z#Em&3YXli+!pCZ@u!%%5T(l^K?Qft$O&$K$G+CMA2Vx(_{?rI|n_!};dEv79_V%W! zFy_>b6gD+BlVPeHetYxsEI;31llCp8&*zE7BT0Pj7xExp?fR!VJaaL9`jzxVgEGEf z!x!p6;xiWUH6BezOfa9{6Qz$BeK1QyB{!0nzK{o>&IOaO6XY>wWg|qvhYxI&a4P8y zg*`k=8VMZrB*SrhaU2hN#7wTblBaSb$;3RtxRQv(V4{R4dBq3?J*h-0^cw3CVsV5PWwtEI#SM z=iffR?DG;FpIPRWuEpm%_4SKeI@0Z!ao3|JH?(*v7B8Nhdx5`l*)q?C8gID&`0i)= z1x$=b zt#I`S*E<7cd=cYl1ZstQ3ZuC#RajH;GA^p)@^*02EW0JZ82xUwV~}v2MdCITfunZw z(;{#b?!86gdW*nO^Lf4q9L*y36oI4m^<@z_nnk)~+;T3fe5P>EECS~N?vetWr(g%? zCBStS;0ky0ehawAioj914HkhTJy8=qxjVp ziEAtZNA2~hB5Na*2fus8Tei1n8UK|)ddCX;2gkRTm+8h)1CrcVLKvRxJX>8NZi~aaMa$uU4Tm!v~$9(u)tw}_V?`6z8T)d z|EG3p{|{`@ZV=n4BVr0Tmp4>P%o9&F4a-)vG|@Bv6Om-jMry7-Xsx*5}#izGmkEwm=#qPjE1K0u(%>2#1>QAat zqIM3b>4Qt{s;&EI)$8aEIaF^+cc?`5mUcT;Z&`N`40m_1M3o1(d(hIms`dRNNFnxB zIhHzyUQ}J`E>+%>+2-yZttK7aQHPo=QK^5Gx}zoPaouIz(NZ<&==PPV!4mB5^to>t z>Ud~i=nvRl;-I*EMCt9VUr_P8dBR_MnSM0H-^9-;O~JiOP#Cu1Z3FQtf=Uj%Z$Cqu@5ws1zq@uTOD|KI8B5IhkXqzTZ0mTU{2gM1b=+>5C z>u!--N)gj0imuoz5~b*la?RVzF-Amo=0qln{m^~bB7GDBlRkD$>hGqw`>=teEQ$nN zwvFSD6pGYEv6m$eUYHP?=<=rW{Ddrm%X`9=HUcq)#P!H!sijixrqUITp~<{I72BKY zwo*Uf#m_BK_Fz#R{)<)|KGH4FVz;HSvw5FoLqr9htyUrs3HwjVmO8N8YagnPH1slP zY&+Ke9~gRB?ML*mE4f?Qy{^}_Hh^5rbRLjgYcB$|Zij2_RQ#{_bh|u2zICSuyVJX9 z!}KE#%#Ujiy5{@|pSn!!*SEgozX-Ow_BFNkz{FbkyR*9%+tg1FV4OYS_t^7R@j~We zo2?^;ebn-9*a)DVYuGF8n$!D<>+&rs?L05N$#wY-*QGlbyUy=#J4yYhyLJHk-=9b5 z`@fPIw7E8(iqO5-Wc_Qg$$F=c_EgJtsNM0++X#wYwa6|a>b5rXH~169v;Rv;$boiA}@ChnTpd8nuKCP+EP^hBWb4s{2{;3I=E-b0xWZR!6e z;o1RM1|Y=uRLA|@j_<+Malb0RrYim2ZW~%x_hhy70Rr6bI`7G!e!4B-QvZV4I<{tQ zcid0Pvtoy9!n3Y9FMRA;fC9VxdDl}fpiKVgdg@gvGgQ(htL_KX?Po*tbzOT@IMYAq z>FzvqE^Sggq?KQp<7RBwa$VMs{ggK&4{k1lPQcE+o69nNB~|^a-assnw#(J+6Z2BF$59zM z?!y)`N(=IY6w?^TO;p~0!bW+jH|RRbx|Np*fD~W01%*$T2dGFlS3T=my9>2lEvwi8 z#JC5xJ076mToYcT6eFpw8&o_~2`GCI6w0Mr-qz#ToasGOwd+np&rK#Rmfmv zPy2%WT-kfBymvFTXti_O#4T!iFFIeu7ZrD-eLJ#(wAE!#yXN<~#*6|J8gvh7B%S9g z%WNsHdUn-wTAe`6ea_YMSMrZD&b9t=dZaKmF$K6ByM|bUB`>xM+cgwx% zb~W9LeBS5i+c(OC1gL{OrE4ff$`f2(NW5>b$8jQWvWu6{mOJ{~#0R1*UP2$S_)xmo zae3J@8F?=>COeZuDZXwv5&uV#qvik_Vx)|HxEXApBeSK9s_8~#R!)*S&!ZGbNPt$} zld^zzFHT36P>redK(2y$c%E+%d zkoa9y+dIcoy-;?(|NSqAhP3^wu8nxD#v5sufROfI2UXWIX9x{{-3zXpZU774U-V47 zWnzD~vP*SLsd9E)P|@2h?_4)@y@-D46xDr$>ZAzWtU7M!#@(qZyQsF^pvpTD^vA^iD1QT=_tKB(7tEG?nMe}-%$Dh>*}GGhtg2ZL+Rbn z%d{;Pc2{h?v5}^KUHCc0<_%io7U^Yq)*@>M7y+F({v)z61p=iY~9zsSjX8 zmv`}<;OYZc6j>RXPq(s7da2Z$L~nhER}d~ZDyON$6uQ2@s~h`Sv`I?o-rmFr9;XqK81?nIAaiwvG`u< z@TptJfZVz2T~u*&Ci32;&KlHiQoizT5FUp%^w!+>5s&&IcE#smSZbs1yUOI3R2f|( zi&6_QiNcY3LlzaTxuQGKE_KoVTu}`D$?KhlsBqOqX*#fvDifCowWv=qw%@Cd?VYPW zs>in2ynNRy*xALEl5$AYGI;d61ss@ZesB(g@50Y1O~#$}VK^lk1KlVnS`OwWM-7t4 z?(+?5DX1>|oMJ0G%VLHr(Hy}kU5`7HD3<64 zB@5Traqkk;e%x7>${&LR`1cpwS@tMYV3sWhMRRwzG}WL21~t>578z8BL0yWm2hU$F z2Ne`ybb?}^Zv@pPc;5rXartLZ4+`FoKyh4t35q5942mWb%J|FyH(IW-FM6z1VbV;F zXS5(_psmW~-L~v!D(?&@ggS?>%;xlB0P4DdcC3L>JI;0fF4qn8Mg=+xlaoHzJOKJ! z-@OtnJkxv%j4iJ3(mV~*jGEbVhSKBlttK>~n49#{2$wzu>>G0QTw~K+sy=clpH*O7 zHfgu|3`|e;cx_eiEM8lhdB>G$I^Xgq?U{bTfhB1W3qC)OV7+gIXxxL@5W{`b1>eadz3)A*WE?L6SR7lYh;l|g&I zx?OigAWz|0KBzO~L4px$pl@GU-}@yqHQ&ly55u>og@=j`fw64v&(jODlS-5iz3V`Yoyaeuys{!?E!JCUafAeEnd;mNU~rw&s}{KW}H=7-v=MKte-Y0l<>?W{=9}idoz^K$yQ%?n7*dbyJH9DvFQ`= z8KU-u4!SNL=`D3I1Ydx#K?fQJ4wiJfXn8^BlUCUg)x?=OE;!e^1>RGPybouv^L*^ki7Mi_=9FkVof${&c*KE>nl<1gpd3hE5p zSK;TDvIEf&o*5Sh#p@|E4crn?3-DvJ5!6SzC7PVA5Y%nBv+KWsx=QeSXjeAu`DR~cvt|J zxftQio$ZE?mujDE&73uq-m4E^v1|dGB;Ah3Lx>sTTlGcf(eR>a_x>Bzx&cJeF2CeQ z{AsTDifermwHDt|={fG0hsA}of2o}rOQ@EUEtFj%H`MfjrS{ZpOw7b1jixnXCli@% z6JR7mWHhikNy@AXKkiQ4f;tU%uGrL_aK#RQs>jbQzN_y7<&^5gGf@jc-642a;LZ{> zeCZOr@8ZrrQx)f?a0@8L-3@AyK+u4Ud~!?FnO!cZe%#4VxAZLTjH4MFp0B8vqrf_fPgH;;EgEfc&ygPJd>&kRa5iU~*BD3;<|KmO8;%R?_FHxx~_UA*xB zq+RS2MT>U9EkWJwdKfFQXc<@`84zwp<6s>~Q$=nZ2dQy9jvP>H2Sww+U$y*z&+$zL1nA256@hE!=PAu&IZ+mpHoyEmTkiGPX&+WC|p6i zK+(@Bb>q&s4WRy6@F>$5_e)TV@Nf5XGS=crjJW=u z{_4vsQq9p1&Spq zL2>(xfTHxdrFozzEpCZs-0XTasH+4o1BypR8x7a{K`Fwu-=KaEDkgaEfSNC;0|tdo zKpO@d75qf2kqQ|hfLRZE!GtDfyw^L)vdO`qgFtJ|?QEmD-Hp(#n;Qm9```#uX=n*K z1FUO@X$go*7H`jXJdt7Xrj~ZD-qKDU7BAXa-BubF&tX~EjiGS~M|6%lps(=43Kwc} z-PU6f|1SL4+}a6(ItBN&f-1+I%X$W=F8rKg>6CF);#4!8Vie1`EAZSUcpbPi&b(g4 zxb<-5+VMkBUHI{O5lhf|(H(;KE8JP)2~h3$xh0wrb>ZifUc#LvUIE25`VCMlaR3xc zP~Gmr&neNYl_kCc>Q=!!4irmF0F?sIEm7U3c8YldC|(=-KUwc`1~C8st#@A)<#70V z$GF4SJH{PJy<-WgcRZ#ze7$3dBdK>RarkaQ&!oVekAz>83i z`m}~t<%M4rpMsLHe)$4cEHUPk4_$K<7AmivuKRKJFn;JBU>$&jC(zqM`4GKOahAJzgdiyGbX%B=j04T~7i+b3$GDaE1ie0aGH^d_@LLY#c)vqC~Txl><#=607&I1Q`YR0k;t#$|(dOxKRyP2R@PO|2Q@e+oXiD0Ei z%&f~0r7rwT|e1$$)xC@Ms+8 z6VwlI=brBupt=O_0o>V_M?n3n;BCX5!gfpa0+fCEGpH{7oZ@R4miQ9ScMBek+gPFu z6iZA2#S$|>u>|#KGy`%X*noP(Jcm!zKLhtPeJiG;O7Qz z3n0f^tfYplEF2maYcXDyZ*+ zS|eQVGH{QBS|VJx8m@mdc>6$ctUd>&2;5P2eZk>aPz{1dUyIKd)aeE_!Jz2Nady1~ zRGYvB4T_g2j&z+??3pr_=svI-;fYmR8q8*fY#kFaL!&x0Rd>|t%}tVP3OUP zysW;7K2oZx9dPxWN`!pC)#C<%HwSz0ZqL@^xUpLvOe^XZaRv;Iv%#S@IBez|Sp&XSU}+rFiz^fbJ} zzzWUH(oMGae+(J8l&6ouAvWEPpS({4ZZJlrry+C~J?x=_d9={&JLsLtm-bKbB1Vfr zFJf>S;oi3IzX+0!bR3dL3rRY!N0X$}V{lT=mpD77Z^*964nTICkah7fGHUveIOfLj z8=Q0F{*Bss&|ig8S$`Gnkx}+xwbg4MKxv|Mt5BfpL&UG!P4=BcwKpqkda_p5--1h* za1GKi15;&RHhG-aPSn@7ABJ*rV{Qd|NXm{pIT7mkq$Q7uZkz|o8 zP{siE$XB3fC0MgJrgk2xF$Nw5b7RW0Qe?YxOzSUigDXP(P+ah{T}x& z{G4J>I7{rs^DTn+KJF|*m69dMnr4@99RrFbP6TzU;GF`BC1~7`0?#c4K~b}EOH@&f zIdSH|-2aU#sIT9+Hm*nYpHo=LSyPxQQ+CmmMiN#ngN01>DJyi=h(h{11%0s0`=n@B z6vu(T1i-#2ZHJRS8N+CIA94}PMi`;)M916@5oYn6Z5KrN88sBk?c3#Tgcn~;(7yxp zRMolHX!Nd)*P=j%Paf^eP4B6CIY%HovVh{oo^-r^SVwgY9oxEl@gJRbcB+863iVp) z*CsxNSWfKRi!QbI6W4nfoN~_i1=% zlXu$(Z8CPF+T@+~0h=;tQ(m$uui2D?Hl^RD?81~Pg*45anZh<=?BMR!wyt4Dg49u} zzeX>kFF`ocQL7JchmulZq!^|mkqNXfRm^)hPqaKZsHS&Owhc_|-1ABu_QDpGa|bEs z1|}-lbiSN6tdEp)_gLgyiI#KMjWcrXJ=B7nT-%Dr+(g_b5^-NnBJO)#zE32A=9#@q zZG5f)-t@mx_aLThhSL)moMl}HbtiZZ^WtQ`y{wjQ%4Tdlo+uBXv=PWIavo$F#lAok zJNElc#6}=dM|y?Z7!sv=VZ5n=_jpn^bN23{nRM+we9Dnc=wDHUISKtE9w{*R+lxG1 zYQw-!-Yg2r_)4Q!kIlq>Z2rOCzsqEd2vNPW2)N8LlKdc&tQpSFru?8jTc`ZG#|nYz zHosw06*t^Pv%>;QFPVR42eE3fZT}^y)XbS#o*VnAfzp-L>ci~g&6x{pQ)cY#L`ksz zI}Z8Lg&%L;r6=CJyH-$V;?8{mHH9w0Bkj*Pn#XZJN4*5&mVxTR&nb@DVBBgvb3aGE zGLHHh?v3sQ)rFr^B2B{*4}#+U>rqfF(GQ9xvhOwa8WPmcasTyaLxTFbG@f{G1yf%) zco!HHSq)@Y+8f7I7pN}CI;9PuI99iUq9LGD`T;186}`h?99e;5+%{0p3EU0?_c5qC z@L)g}3X1xBx3mTn%l3d`*?$7{dm+0E)KYnDvCkC-F9?dpL2juY)I348gQD@0Tgrgy0_BucP#o?ppxzL? zAAs@+>P}DrP;TizLCqJ`!v=*99nF?R$zqPlN+%h{F){c+_C@8*%NxZvpF*OM>;MT^ z1sf~PWnA58@?a6pVO=6PQzn&9om4(;Qu&4DFh@FNI(^&OUcM~d-ci1=sk~xp`N9<| z%)AS;ELd|XZ(P=}Vnx#;lGf1LG1G`$`PuCkmBYg;L{LJosyqz~LRXZ3eQ{euW5?Ia zg@K+G4Q==WwY-5o@fDn-?*~>Rprgg z8m?$6zoxmRMMMk9T-egId{NV)(b742`Ls|VgmKh{dChg%Cjgtp(<03p>p539uy;CR z5e_Ld7h{7-fW6ky;{0|!$HbYqMp&aIlOyF`x}~A5oQ?I2mad&re#s@}*H)YXY6X)k z&Y&V=bFm`wCLdN#Z70~uDQDz)4F}=D$|)=Io!}iCnkDb@#Nd{-j5`{&yQ>;ETzjL3_(IoeamRmfyK;XXItuH&=0y)JaM*^1VDC-xEQXP=^CnOJo=xgv zPOd#3s4v)rJ0ExRm3sy^6cI2#Faz+EYmp8L2N<%%L)V0xn^rJIcPI~W35=l5#odix zmNOGilT4g8JY8(!+=(ZebZ4bV8`Hci%lR{&x=fs}B2KrNI2VI+w~6y@aGo%6sGp!d zA?x#x!6EIM<Kjoh=Gz2F=&aY~SRw04`toC{95i8BkF3k^=8En6pigtK(~sDlUD zVxLwz)MZOhhsgOd+zCUML-2C_As_6vg#Zw4;PKFUM(1LV78vUHsl1+fxD6RXKIURd z1m;fM$;YertigIoKISU|Gah%UH_yELrw6q-=bZ9Ob=__w`$TR~zVF=DQ0UJw0<#02 zoC9jc4c~va5K}5JWS5B0w|@OQvkEcC3JmR_r%*rn*4-$w{5Vq&WVg{$AH`?K+;&ut ze2hzA$QIGpK%Ktk=wB3KD0l6)$07PvP!r3(s42vZ5tu{3P`Wn$;I9_xI$mJNuFz?q zzV@j7y+VIZFkxnoQxU=ZI8$ouHnKZJEve+52?q-?6jQs6Yz~bBb-(@E^9nI13JlpB zIu+D8i@%LwS$!>Q=a!BQ(R!GthG!Ai@yw}93U%aBN zd3ncTa{r1U^{fd)Zm$(^=#2nfCmK?J)i_@@I4)|AxW*WqQ#HP@Yr$ytq4NgYm9Aj{9*EmjtbC1R;F*sW^&d~`uvUYq& zYsxok)%YZhbCMx7N#jTcCs4pi7H}38a9T{9dh~Ao))h1e#HE+}N)v`$))jF6rGWFZ z0?vOHa5fik`U^NO6>#1v;2bF62z5$PHB#|aQo7>O({)w>=fVO`s(`bofU~lI(_O&% zQ32;y1)N_OaCQ`MUM}G5Dd6lc;Cx=dDRJiK#_myx7rH7UZFE$NazdJN;PRxgfUB1NQthlGf&%}l`5rS94^9`rM>}9w)U?2 zYt{Cw)J2*UVa!q!g%pjr=xUig`mL1LQW~oWwWYcw4e9?xi)NPs+Va!tBG)WCM zAN6ro>TykqFlH$X$PgB_JG$B;<4~k}&cCfm5ymWaJ~(z8wL7~0dc~eUWTno~ijgp8 zsmb8jZJMW2JlOG6R_fcD6k*I#Q-oA0?sWAZU3XDdO4XzYW0slk}}(vpQuR@#w>+`&k3vXnjij0HY~p; zMHsVGl}T#ud-I?O^%_1;lOl{+>S7^PhC5y5$Gtl@E7h(^5ymVn32-^ks_ zFvIR$F|ZLaFn>3q`-qMZ9yWuFG#wrRZ-&b_!>&nnVZ2Kg8V>)tJ`jSVgJ z?H!AnTVXYxro#2DD>|B6m$$==ck{9pfYdiMwsq7uw=S$-oL=6TWwQ_#0++QeufJNK zNRM!ifRQAlzLF7rqXux%=5Ua(oTnU8&;1;h$m^VEEoXB$!fatSxZGTm>aFrfsxN4V zIxEitqy`jRGVnh_iyF?6W0%ufa$=ri0FvTQ3;H-w9$bH!gn9cUN*JO!s_|#29}{j3Z{S< zPobveO>G)vR@1W9tD6{=%SRMv!LB_PsgY`N`hp0<%%e5z*7hbaQ)He~gfgqCz4^MP zOIwwOjz-QE4#Jd5;~a3o(K!(6mMVVG{Mi zo-h#(r2g#*%jLRI5W`a2}k|mNF*H5&cYDy<+P&^DhjZ%V8oY9$XfWrV^f|` zAmR4R2c#rDu~Y)F3Co^_>hZyNGj56Dz^Lbmgg5C|6u%aF zvj(-S>ON1(=Z~iXfh40FT1Gbw>M;k_jB^240OetO? z{g&}ecoM#NI2?$@J>rFDUY!uHRkdJ5{^iy6q{koe#bcp(*iu}7@mgJ}9g|`fpOJ`p zeF>iu^jwQ$T2NgQ;#YYsnz-L*Y9)#%oiY>kR~VzN*1hhquL=;P&XZb->Pn%p}iJvxk`r=%l;18WpbHQTsmH({4hC9GU=S!n;lFih~ z;$#}WO_^RXZTjTO$x|=LVS=18dGhq>)62^%E2d0mJe_3ICQh=keIIYLY?u(@%6)TA z&$NEBS6`+g23^CPWOKst?5y8C5>AxKJAvaCOnQG=fU`cyrV20ay!g>Y(Gw?sSe#@N z17=MZT$@{z7G8L`qS>f7&D=)_zURpTCMeB@KxVwNm8LKT%(2^o9KYmuY1&H6}6D4W$ zHwA21|02MB3x#|mEneY*h^2q8AYUr6=yY7AfJwCGY8CFuh+h|$er~6Q6I`@9VTF4D z;eLb#kGr&`U0QLo!ZiYy@nDyh4**=l#gFpqwtyr(jvrl!uBCriFqNJJX1z=(-a~E` z?!Uu>GlO_j9%397pB3((fcr}r`4?pzRc$NWNywL~7*5AcFmAZ~d+;bp+LpxbwOYmv zSHARp*ojyT8n~Qsv>s>`?u$-I`ty8A>T6`&tYL5$I*^XVIDzO&#v!Vf{{0c@J!Ltt zt&AHt4DMIJ9eWkZqm6OYOswK}HuB}6cAPSGHRHZ93~n=U*RRBBMXMM`E16dQy@Y)E z*7bO&y@qkLYHWoo1MZC*kT+`?H+C2t?P7Ri9pZN*&HL7J;L1uPFjYE2is< zz+DL3Q$^rN{rs&6+;PBNumQK6%PRlQg1cMs2SsQW7xva|V1h`iefur&W7J(yuS6c** zUT|Dh1di%eXAwARmz#>fQT{zr1di&#t3}}Go!p;_z)?Prz6H0O%c?x6pE|V&9OZMW z2ppxOr3f6==j)5Wxq!Q)2;5ZQepv*L#)YpJfg?S6s0bX5AIE$Tx17r=pQ+p~DgsC0 z&M5*%{dY?dIMPGwiolHl?#D&oNWc852wWL(TZ+IP3)~Au;Al_8n?>NLK7UaJZX$5s z{3qOUE~|2*^v*2;hbe{BQUs3L(RYi$QMf-V68CTsII1sC7l9+a_D&HvO79m%;K)Ds zt+?e}R{2cvn^+_+Py~+RS62j%;&)9EIBLHeiolV7zbpcG25?)7z>&UsrwAO4!$#eP zTh3*b&s6^|DgsCCa&{3o8rL-zf%_(KcNBpmy|JSR9QEg~6oGR9_ihom65!r1zP~VW*&+EffMl-HLU2s3%Y;!OgyX$`tZ*2iZ*=6v?$TqwhV91 zylr^#->$T_tym(#{n8~ks(MLl%c2?_P2M0t;^a89T(G5SCDH~w-iu|O=pCqn7m48G z4I5q#ws%k{^sF>5R~lAc+T7CAUMPoXkQm|cnlavbjV?WW7#v}Ck2lj{eV5MillO}( zWY~WrjX`{vgz&YUPXeMcaC%x=7dEtLbp%nRd@=iD)SWzhqP3=h-rZWs z7-4WEHj~Hn>9KYO3_W6{#dI~`NgOIz)G=m+=3~qnL5X9`G?T$ugOOGS1jtB6J)6N+ z9goll;C+x^>R2Knc5FFO#n;8AQ{qmtFq^gjo{)v?x~<*rM__Hky}1kiJW9T(Uwrb* z1?mps1Hf(}@G3jp+aJU&6*!e1c6&eo(} zob=aC)U56n63w7k;&xCE3EpF%?iG}n~I}xy#27}C{!e25FT}IZ^an2nU)L^GF>ReLMJ3}tJ{*sRQB>x200kWRaUY3Ou`TH7DA)gH3Hsn%|@)#8vo9NKUY$BL{kBUD{)J#77mEY$5S zSlScTvYC&}L4NCCOJh~+pEzA73w3RL;IBhNR<<%k=+rVc;pZ0LTm4*66}WRtpq+j+ zD`P9D-$YqDMT_YZxFxu65)@57|5Z@bI({aodvL!~P)``t7Epw63rnUP##?yiFx~_8 zE`CmFKkgjHm!Q~ZhfVi+KB#{KAGS)-D%cmYp~k)_pkyGN5`8(yzFcYG(gu#cy7CF! zY6C~--LQW@H*o&}>Kg+0D+4Fm`&_im610^GdZCQ1p&T(=BAUmhh{V5~_M2lp_id}P z5qQ|`nmq@tVl92NrKVxW$hG!$BDtx*0FrHu=_=t4aB>t6l*G;8=+;+QZLA~@(qqXl zdViDY9EYPNt3eq}nXOtFMhHQ$RWdY2*kBOtQINX?3Fn=Hpz{sn{u~nxu8nlykd^LO zAd<&%A4>PDySwYy^aJ#Od>`qL+L9TyJ6#*-t5S6krzGCnIj&pT+xOq2x;yVyJ9pEw zc(@0awQz_Qo!WM2hP=zQfxZePWi!yD^v;|GCBh1%M}C473JiDX_9c7d%?8IU57%Y-~>4w@&mIR_P#24o2zFBT(--5aF>vY8)&qP(|BM%dmN6R z8=Q!f4a)%()zY!*=W3rgcBiwKPwR0#yi4>|P(x3+9!9d1&3zx1)IcNQK%J_7 zm#;4++@Vc;TQqXe<=f6#g~R-W#f%5NNOfkbBZ#8~tCX>;zNacU+w&zAu}qIe?s$=i z9>=dKhHB@1cH}P3d(j>bk}i9x3Q1glu24kcYzI0f(t|8SzEvR?*Z)?SDch^o!BW{h zK6~BWc4eGRMpi(H?L$FSp>WpUNFcc%$Nx|r*Be2jRdvq8R2PALfkhADu_Evq(HGmEhwjG;g^GA33?T?2|u^=V}rWa zpk4;WTIo$tKf}*0Q62h;pgzL=r-C|U@Q#N6%%ks}SqGMb;<%7z<+w}*^)95G(gmRU zgfAgb9NMLzIJEx+#X68Ia4_|}LA9ab{fChKs$CC*EIV=-<3X{8JQq}-z|AmleghW< zMHVxil49WK3r>#n6$XyJ;UxP?PU$KGCp6@=Bh`@5cu*jQiQe}uln1L0U6q#P!XFzB z&X%djH1MI6E{Q{8_Lg*Hjci?q)?igFMR>5_r1rt86b@j*>DfcDOhto=?#{tWHhtFy zTZQ-GNgP~e(}&H2q{TW1VTWC}SmWBb6DW%)YK;TKUs_Pb(Z1>*9;Xp5M!|1D_2EG1 z(>=mWk!ubtLcND!@#W9JDi7>2im@}>TcXEFy_Zn5TuFJ~O^(stHJ_6&tDeLlWz7~M zGy84nUx-s{525E;S~836;Ho$RytF&L69f0@b98&@4!u2p&BD^W7Gt9sYIZS=apysy zPth~vSg~Z|x1!^CO*n(hRs5N4`IKROLNlkhsejhaD8h<-8`iyKyAV zx}lCJjt9Z8@fjo=maWuJCT^Yh46NzGV`Wc|qr(0yn}`g#9xhX#0^Rp^iM@6(=z3VX z*-?gLJ?M!4Fl6o+P!eM>rRu2oI|uFQ z-O#%)*%hek17h$9y?c;MZLU8GHB~DooOg=8Un>r?G8~6ASS!P7xNs8=gJPTlDuGPL zpb1nTer~A&cT#?Cao`$DT!UwpSOsdPkXQqXC4L0zPW;@`FK}mx&7fF6MjzVSh%pn*Fdqv>7eG|=ak0d-UpmpnhuI5U9`>O2ZHw)sKvq;npU$fJ3+B8 zq!wAFz6`2QNDP3wOHiMJV&ysnij^ywrC{C(pqO`>!6Q>f%zF|P$7LZDAICr_z6nRF z_;ju0K${`cv|lIFw1#=yKMt>$==2kuq-{s|sxmh7IcPGCG+TwP`Ur~vKA<hbuPHK}doUfQ zyv2cC+vS5Gq!esYj>DLCC_Q%0Y|aSG=P;b4p)VEGP35PpON<+=uw&UGYlWQ-2V<4ARCLprm*Z?Vq1h==txupMP&6FOYrj7ZA>(AR?eZY` zOMS<7`H)5qXs54>sKX1KI)QPe5qT)o2^4vn{AM~2VSs&%pawzNK&f?;)XoWNdVI~C z*;>Tr%*NOhGj)z8J>gJF%}`qH0UDUfyVt$YaVCt%uG`UZ3f2%#Lby=l2s$-$mR^6x z?l&yTA1+fMi}Pwlc<8Gr@dF$e>Lmr6&Q;S0!?3tvf7~!Tj;VxUcy9Fx7QKaW;Eg!4 zPUQLsVWDV>E!LdqYo)1mTCR=%dT4~++^i_+?TfXd%#Iopz_41G3yLM`KiK~7kwIE85uD7W+??*A#M*Kwy2rd!%;@IC>>{{0mc`!@;| z=oLIUB^pz5xL#1L;JKv*plCZ3lr|`qy&4pU`yEj1OBbj&g)cpzI4-w?A{FkI?gVv* zpdJQAO5ZK@8Loc=wL7WY_#{!TT8~ zj>~1&DSAO*U@#RMM8)1AvXvb99?2c?-IyKDVjC_%NZEb}Gke*v8t8tvM+l!z}uG?1$} zR?D@13enWD*j($+CcvQGwUN|z=5r9VPNNT$aNZh5KwHJSZa)lZVtCqzrCkhH#{|aH z;cR5%l$U&A`10~C;5)|aNyEy*AT33#K8`gGv^Nf7*gq8umCB)+OJNd_`AZ$>E1(wE5=$D{4ruTs&z2+3F@_izVC-Ka<=Rh&;B~UBzb4st^-Y0PHgJRq# zpcpp@Dvh60`YY~z0(Y#TM@|C8xN)G`1djG^GVUS+N9&P{qxDE$Kg_O2qK&Kaq|5=D z?HWhb9{#*+dZ|N88LG7s28zc0L4I|J? zD4?TQ9aza~2X@LhS^=ZZu?T@oy3z==6f};<#vm9=f`e7NuQvuIhq2nqBhY1o>L2^| zpKkvn#-Fk={ybTv(LpqAp!veZelY$vF{;^&lZz`Ykgx0qvX64bxp z&Jv^wSmIGow7B4uegmQxKev<}wtR_a#u0{xK_#FTg71{ZfLbIZ&I856pbJ6qFsRz# z(ae;?oePTns{_TupoO4%g)eJB@i6FnpjhHZpjcuPDC)4B;w2zUP`hAdM03NtgfDM` zVx{#FDE8$`P+B_BoVm+B3KaWtIw;1S3yN{)f%-y(R$<`K>}OJ=z)OQkBbKrlB#TlO zlxX)DAW*wc8;798Eb9jgh`NYQl;)D>=|Ndmzj`51pA8Hn51RN*H)#X?9fxb_&C$#Mk0d*pFgvKKQg zy#v#C#)3K% zKei{$&5)jZ@pFsQ1QgX+c4E$jeq64bT0vqT0IOWXvCRIF2+kI;)J zw`ek(1odm&S%Ox@Sc2v$+(>^9q8C56^f~U_yB!oaIqKKhmxn;HFSNWvW#yE9 z3yOW=Wfp1}XcBr2T0M5o65z~l;DpA+<^+04VRV-wrUTv zIHE_)wQk*@NI9Ek)1}h^NuDaI!1PP$|F=~2^esG736$Ps2*-rT_+e5RPodjt0BkkfHdKrhWjbO}O@hVxM;#)INhc22GZiFHQ!<;hqJG!<_(%=D|+s zo1prHe=|UF7(RoF85F$@XV*G|T5M2s%o~S6+Yva7wV-&Zq8k*4aVscRnsDqW@nrXa}o%v8y ztVG3ZSgdkj!qNqhzI@&Rx(3JA-}?%Bm-4DFk8t^XzqWjC8u<)ZjC=-iM?N%Swu+^; zpg^jGmF>a2C1?FqNwH#%MdyyCVobFt(>W-0EGS%PR+Y(Ebf&dtp0A)3#q*%?d||gO zXBEWIkJ?HJmP4Rucb3eHxjE;S$O=ZSHrX&;p3v_~Kcu&#~UX>XH-|5P!2 z$Wv|saZu&>Ii;Dn^I&T>s9yZsQVZ^z1a%$mEU^|;Iet!ww4M`H0!Lzi>c!73+TSKY z-H$s<(9%aaeopZ$35gwe?#0h7=2VQM@pCzNPKgFvFAM5;Pzwch3aCY(+~V~=YgR9K ztZnHfJM-wR82i@*s$9q}1;yI76;!YAg=RmzR7-EhSl7L1Q12KN&2(6od|^;_G-c+E zHK;QT>Kg_{^Ba!KC7?Jir2oDGpRjxcisRB~;FcLU+Ni*@scQ_}Mg#X_14j$PG)#3$ z|8C&K5U>=DbR4aQoDIGzmy>q-8j;F)(oQar^e!$}A#FbzStFrCA9*Ilr>5#JR)jJd zc_zgIT%$!-e3+RO^-WfFSL^(9W>Pd5H|djM)d6vVqaotCY;fku18v{07r;H~ZVyvxd6D$f;8{j~PXsH|#X6TUW5z?ZM zjV$$yF_03vLzIe+x70HNk;Mj3QMhW;8=w;WoKg+$tU~63>c!73PHNpGs5I^@u^JRh ztOdm?gp^4yes1wDXp^8G#hoR{SC*iiBCJB52hoe4Tbw4tjeiKwtPsdo=FzK0_T?;4 z?8^jDtPp5_5&Mz?#e*N}=U5?R4C?y^br&dZ{P!3X&B&Pdv_X+FVcu&7^)4um%ZH#i zE(bxeLiijM$K@+%oQ$K_?2IE-v+w`w?OWiZs;<3f7#vefJF$)ym6oxhwSowQAQ)&S z^UCBglYtm$Rg9BlLIQc2%qX-3s)1@80@g<_daa^jwbfRuXsy+nAOb#a!OFE%sin7g zr3KrlRH;St{nuLioHJ+61hC)t`wq;>|E#mt-uvvw+H3E<_BnVyjGuvokIX9J^Xq&x zzbXoW=2wLe3IVhKqjgYl=fbad+39dEIf-ha`?)?~;I`4Fl2C6q) zOEBVD{o>MZBXKLEz5mQxS>E4sctL;95qgBV7~hVaS0i!D`V)=M7ia~k>o#4V;cJKK zty%NGr)EDEyIx&}LNsZnzh$#wM3^4R3hTw=VLAg9zZs8~V@3pKIY;Wo-3|D;ZPRd; zA}#^S$4@@*NgoH1&wCCs-=#QjWV8rpk)Wj=kyr-w34TugD3?f(l|$;#ZF>i2%4@gn zeVj#c{7XlM5723dQ^F&Q=z9E|{8^YmmYt4kiFXc=@cDpN;RlNY=RxNC7Lf4K9I^0G zuS@g9PFpL^gUm-yD13cD!nYRaeEgiYTW}s^KCw8+o>={+YZcjG8Rh}1G>t{6(?^Y= zkItTosi~7yox$9R@=>6@7c^~hSaUlG9&v12oQE$n9(HV%4l>Q1Fx*}=#c)Or#gOe< zL!EHVVyHT}I3K19t)Wc7=9)74D)f;RUNYGcQB7D)_0VpOf?28j6<;PN!{O8+x`||n zYzQ}tQ~Ar^!N-e_EPozPMjK96RDr4RO~=;N11m};z$4+9dQKH!!HRKk%jWQoAUJhX z!Yf$*4g&Byg8A@!dk!^JOK4tto7s|T9DoNw}GS00$ibYEHqh+?Gix=w+T(`&);SS&U3seaKX(2uA> zR6ahKt}FZye)1_e6S;p$CPZ(K+wKYs!dpJLZ`Q(m*V-3ABxm{$XQc{Oe3?pizA89) zzf(O49!h;RRGcbU{^z;dMo$1YN?2|DprlPx%b@??H+FQ{>{Gh6x0SSJOl>P zvUlnGuc)>1w7*6UVe$*rF>l2bbL{X2D<}@`qrQA^Mi>Vin8!te@|N#Rrw*c$=DXH> z1KyF@sY41-jZ-BV%31lh9@8i8iVS<6-2H!#G%iqCN;!uvJP#R$wsmEHaDR;aw#a;; zNxa^k{q|%Yl6PeJz5~AWTWE%}DI+dI35D$FP==_r=D|d;sd-)k1`P}@j_s7pq0&iWuN_Bt!H&a=OX_$;^(#%;w(*S4$vw1iDv@2gNkRu z0BEvaat|Z2ZEt2o7P2%}n#jDBY1EVjQ3H?$>_%9^M^>^RKakudFDj9s228e(8=srk zQbj8mk}9&CzlI-dA)M>M=d}F@sF5XJ021Xy^Y*tf?KCuVQ8klvR1PF}m*})>bwpEt z(q;Y%NK*O|kfiiaK$5->fF#$*>q*i_UQcHsZl{gBo(4DtP(&Cp_a40bv(3-(cp3rF z7#drLPRQ;BFUX`oe;IReMYxk|B&RKM!ct5Y>8j7{h49Mg+_Gxfk<2?x{gM5B!Kda*Pffds zR3mlIO6|`uNXa8O*R!hCLu$m@ljiY&6XLD_zR5fUOA~#A+*JKv44aBL8f>=e4{nku zg#+Jl=R5GdNFQFD*Izp9*mnCz|BUtfhaFpQ|L9-Bi^Y-j*4xt`eDo=d7jy+_@btLh zp)XrR0k(4}Xxwl#)nHn5*>LKWzTi$K_QI;gexgS~QrGa)+QmMuYtKgYO25{hPbN0p zKWg3Sg-7}#8?m8u@P9`2)jo(FkwoQ-htsu(Zz_Bd86ruJ{rxu6U3c%U6#g14~ z>#<2S{XTE2I$Yc{Zux2H=i!Ne`$xk_HfM`JuyJIma+Pu%<}oQStzV{~6+AiX_ZJK%a` z2lf{9=coH3yP9q)4sPseD|~bH@QN5J$HdL)!>KJzXXrWP5l~R06({F2xm#vVIbk7 zP-)=jw4DIOP|xTKK#f2cYy!#5RSA$Wy)FIQe9$DkMj#2V1;~Y;lRcXUIF##fEwXn5 ztz#PXx-_AVFKgrceWv{iNJ1V2q7`a-G__8lmEiQ^t1iQ^|g6362}65g+XBs}kEt?yn9)XlNo1|*@}1+)b;*bzXI2M+3kyMi>oCaE^-xVI)iqrkLca6 zaCa*Xd|G5Y573PYckKjP?TkjM2M5 zcQ85vB(kH>ctuZs9!T^g&H9TbyZ}h}X6T5ttvnkoE6TG~0f|l|2a9^d;j}FTYUJ2@ zfkgkU1CsFW0uud4yG$fJa-5Lxo&yrSwgqT_Lt(u(q4!`jEieAi36m>w9xX54Ot5wm zIX_$v`2XMe0h%)(w$8;F`qF-k38O570`ryb-cK=fS`RIr4vuAK?lr&*(x18>IXtV! z^BIRue}^$HLnlw+FkaVy(TnwTPd`=%p@s5(Gu#_S zv97hWpo0gaq1diI>^x3AszzEgA>>}s*yI|&io!vi-)kOu?NTGJEf{&FYj^YD>+9*@ z&U9qEV{1D9TD%8i|5(RP`cvR~a=;#Z1uwjCJvoS%Q`GXf%)R^}8azdII)a-Vkvn_a z9_2w(WM`^3oqB~fY4>=R`_r2-27^Vue>k;I8$6`9rc?VA8U2i8clvpQB6}+N-WG!KOV@bHRmJe~~KRQVM5+}SfP$EXd(A)~en zXwruW88fFPgRdaXNyxH9d-?AQ9=*ej3q@#T+l@KQM6KQk+7b zG|;FQqq-D^bm)Qg7-T@YnpSzV8xoni@%xM$TD&xbT|Iys=+=8?1s_ZSKp z$-c7zY&tVGmnl2OG=!tXJfqbTbs_O*4DP1Gdjx~Kbn3ix&m@{K!FYeD&xt{Q--$KD zQ@IpthG(e17fGpZLA%j4l)jHx?IPELONPr{>>7zvM7V#EX@gGS<|l|7ODIgpqq&jFFC zg%u#6b&UQSNQRVe0m+c^uRs#p2Rb6x1~F*tFdf98p$(iexSXaVdTo`^>VfX%INE^j zXY_5IwpypHcW6V!pX%s29l1tpX*nB6Qb3=rmlPBMNysHY5*y8?%CzwtI@+(J$>@N^ z2rJXkl{#7lBu3&>Kw>0r1rjssH688M(O-ZhuUxQ_?&GKYl8)%(=R%tfBz$vp6w*;O z&=$x#Z3}>;R4)gj6=J-q52&8+wgEMA9M=Jf#2O%x_&$&fZ+`$ZzW`~=ybj*KHS@O^@{9x?;p0i>lpt0{=ZVEu&- zf3)xnC$ZTXUMj~L?OL{;)nGR8!{n9vj-5TqZxu>=*1}8^?GS2au4hnA3b_K1q3%Lh zYIt``0Vd^mkgMLQpa!JS_XGM|91nSsob$}1Q+YmY2-YUAVLo9=6JdfTDj##p8a_v;gp`oLD#-;3?=C_0W zbZf71D|HRB{34763P}EE3x*3-jOdG1RkY53(4sT5WkgYMoRbfkyFj&0`Pln*{m2#3FA<(FX`(>-fDd&vtfMi|I}#o_3QBnA07-Zk14(!RAPJA=4kf(H zb(GK%ZRV2jRsczOX&?!21CWIG6Cerimp~HUW*xn(qg^_B14w$}cYvfPJ_02DDt*#P z&@>%Ifus+;Oh?T+qF1X)yte|~$GLW=jyCG(mq03gI(k`0yL9viASv^=fuzj;3M9QL z^=S2o!)f~$P$S1yFj|v114tys14%DA0ce2v&`V+lSo4y)8)cU$S5TpL7#G-dO;Bln{UITrEBx~-D7yO7_~O+gWHFx#hWlB8(7hZw~g^S zBi?$O9D^y4y?I!LJup?%D`z#61fQVhPNfUXNQfRnxa8rtna6;*Nbl%Y>h zP&NROSC{M#A7sAAaV>n$0tw${Ao1wh1~kZgT;ub^0L$2nn!`hr_px9Cnl~LZ*TFJBTvf4v(W4uYPvt65=ER(S#N%2p;JR?ob^SX?qU%C7wp`c0fr}b;PsE#) zH{b$uAy{wb>fPHj7Oyf)gV-O*pW7cfjNg&DbQXTc+965xStMe*L@mjo1~_e( z0!cmS)cL-x^Q{DGV7^s4-$tN^nRWo^QT*JtB3wVgv zC|)YAp5miVNqWIlUjsU4-- zCS)uny#l|&-F>M&_+zYsx#8+MrMKr5Pf~xC$?3VOK8H!KiKohs?g6hsSgA%h$D9n| zmv}?7Yt;ijEPJuWs1J~GImjvl@G>pRmSDj!vf(*ohYb_3#oJs}+fc7HcSU}5cIeA* zfv^2hnJ||Nrm;t3!W@&)vuJ&f>SK1QY{ty*zTTc8n`_nAkSJQna;^F@qy0dq0Ff^U z?d73)MzYdq;Q22k4aT%`N8)+yozw@p*5-kuKbViw5eH+;#_i##@LpB8ybMpj7TwA4 z^y}e%J3PHtzY7<>^NLeDmv8wC8KiKrWEuRWDd=4iK<#dNJu0EfMVxh%X+tXdbf@)?l}bS;@aKm6lQ?;;GM$!2IJYQ5e3EJ z_z1};erfqF>7Jbjv@P(*dYPeh=%$YZ(nS<-&G73BhF_p$f^qV0n?dHgP3QZe&PN>_HFzh#JX5+c>H-__ zb91QTLAVRo62~8aB#!?9dK*6{JJ?Gcv@+Qbn%hQ`WrCV@MBU;K_->DmNR0?>ClKX6 zb{zqIkI^Zk;E2!Y>p;>m)5_evOzQxmuG?+v2ci+8o0r2Rr8_{Al#+pbCBk&t_5js` z&uM!bNS^XNpj%k>V;#|}Ers?upeB}JMOGz>%(dz}pvw@JJ5!jLEuf$~&ZF4_>@Cq> z4-(3umvZeZ(Oec+T6S!Zp*Ey#*nkonOD*)jkyv?=I*kP2BM)2j4n}UEn}8ON&iJMV zx1)nlU-|~b%VW)WE-??eVIUe+9rZ0HB$e6(T{{!DtZqSSwp*^(^kyqSvY>ZCIlQ9n zM&_un5GC^@>BBXBJu>>oGMP5J0@uKN=A+l8?cuLT?A3QJ?CISyUGpV?{z;)=VNmqD zpP;9~d{p6!U&l`4+NaXLb3O7}Uu1}V|DM6h6BY*d&Fb0fT6+#e@W$gvJ~WeKhhq@l zb!uv%^Mz5D6l!5~t^cwm7@J3vbNC$W0jqCkxR!Dud12ft9z7NmCF%u)(UE#DEv1%hat;<2u1K+RY{suK|g~ZlF6k4$__y$KQyC zpPP3SiiXJtkI0@1B(i4!y$wEDh!9yHX!o#e80daRbAj$UYU|?H=a) zJCMX?gR+p=P5`38GhU4hR1ZFU%Lb^CB}fNvW@PM+41p%Hl|W?nVYez!J%UCXlbfd)B_#X4WN&bJikcINBR`PS)tcj$a~1Id7iCMhI5*5CAw zOV0wRXy-O3V!^ixCSc*uskUe1`xMKOVlsS^_^VAP%p|N-q->X=1s0ux=>%g>;1t}+ zIZ0h7<0%ZgX&c}m9zt~XFMu$(!Fd0M8wkqYK!?HJiD32KU7ENo zfEvY4Q%MOqVX@z+%qGYs>_HEwye~MxIvESkYLXESLKB#mCo?AKbbSs)ryy$h(PBbX zN$S@kj}?mEEmbtMTY2W{7gyq?!NP~|`ruNDB2%XugL2UPLR0{uwiOe3P2yOky&w+ zg3^>#!*THB+$nC3FZUZM6whViP|OuXi#O-0t2{ymw-*nw0Y5jtLVY8nI-I3_wE@u> z+{wGIMQ2@u>jC`SwwG}xA8t8c3#RcIapi(0$CePe<tRDWKPJn^)Idt6m0F17a9t8Aip*c-%!xvIHTw`+R}K1Bwu$g5K`9?G$5zUHDdw4hIUTBdgvVy6RUF<~bh z!WgX%w%5eB`fB&3U+-IZ5C%wJ?GQ$dZ>}gxe++x(pktd%U#8`6L3(iF=83OjR9U{W zxVE6DF;rIk!EzW8hv^dqwL{o!fk7H9k)h)4%YT7VzRWSSoZJmh+EYWk&#znSKJ@oMjVwX7$AgT>hhESDAPI$B6(p2TfoLC_ z)8;VO|FK&2--5g5@f9uj=oIw1`aDcdS6ZI%;c{lA=1DJ5S zT&ZvRjb3?`5n_&kMg9SPopr_(jYLAT6Kqp(XO1pi?Ew40H3@gJh;SvOO}_gn=`iX; z#UHrVH1pn~Y{w%gDSatauk4*8Rd$-0b0f?R_>KHUxYKagX`{MM)9ji1Fc*O)^{WF& z_^1z?!hFktq?WD*l3Ggh4IA)t^IVF^(vq9VJ`PmKvb3-`fS;S4f*xV?HqIjPE|5sP z4>W@%>^R@Rd}Dxm8PPNwg((SuAyf3iz4pNY?4@Ff-_uuigNI-BEUILj+jFwv`8i@OhR-tL)hOP-B6 zaMje)+i6}WIK2TW2 z)aV5LNk<<5$+LX|BzZ7ul-3YW1RCHt@ZH~TPkTqw)0k+&ca|G%jfu`=GgD@II=VcC z(`@znH>E-DYV$P3={wAg^vPfmRg9kc&Q4qRQct|S(bK)m)0XN^dg>FNZ_M#bw=IZw zwYRh{^0c&j&gs6`)7H}7fR9usJ;{y^PiwquQNq)N$dU-y)7|pz#25;^rOgv>ZKWFt z`J}Zalz1m6v@PD4DE4$ElBuqCPu$bc(Yegi(d0=sBe0HCR|A5}iXWl3wH!@$1Ubqm zN)ySS-{OgPB|N6cySo}VdQN|%9)YbZ(U@wW4^8X2QlCg(lSs6Crg3&nok0)WW(b%Q zXfwrYzA{o_I~P(CsaBXEm`ayQl){?HWyN<}x{=~mlxw`R6U7f2@|}35G7p8>HOWJN z7RjG_zDv1aiKTEF%a~Hj8AQQqb%kn)#KNV!s2JgSj5=m(ylC=N&qPn-)X5iR7h6NT z{cA}CxFo@aizJWXhi*IHlBTQzw@P*^QI^bjlFVyMc6qXLD=QXykVUAl`20FQRbxCE zrz#(BUq+dnYHR0;(d_|)G&f5O-Ja&SQ6jeT_NET4(IC^LWRxt2m04C6W(o>vYFgxh zY@)TB5|wPGc9`t&Gg2+j6PwROeYmvGX+ciEK5Q#_L= zPxefmJY}Ix%dSLsvZZaZv{(<4lS*{kP{JLlWG9}g3l9tqG-HjwsiifUfMQ+NnNX@( zvf9&{=e3LP;%Zil!wV=WDKm zrdre8+>vT+Bt6$m8oB)}Ps^mmo;jX#8YkgDg-*4QuCuBeb<0%8(6m`Yw#2zl6orbIkBdCC-c7kyVK zlN-Ad4aut$6avf*EH7M0&~!|0Ow^|qO{gIv%n$IaH{GX;$z7x}g-jy?hn?0G>G1Bn zl~ym*Fy2p?7`2VP%t!gVNl3&qa|#ELd$o}CdzJHEj3YS=yHRJG69dc!9=0$ zq?=3>8c2{;X~cCGC}f!%l>Y){G=2t!21srbg%+bJK7(ftD6>tJ#h`rCM7b4|P7{T; zc-~~9&=T~+Cdz4uWWYoTf`t5!vF(ea4jqyjq-sDx8lvNYe*W%%9Am4{N{u-^wBKTzNAZbc=gC(KMwKJ(DTF@#qis9-lKN)M~IfZ$);Y=x8+xp?3 ztvqh#c>sZY1!&2F^wn0LQ<;bSxhd8g+6z0ZJT#r*u#-nK<_@j)c|6Qh03OPz<(EHDWaT-Fd5$3XbAddcCZ4wP ze3g0VP2SYzyO#YN!*ogy9akgQ=ooGDunxe>&lH8I5W(?~iBi|p+11jXY@$0(UFszh z58c~sq3lzXQ*^0eMfsvm8A}Qb$4NS6qN2ETieFJauT$z2r9h{AM^V0@Q|?rhlXc3o zit;6$^17m&u2cS|C}VX>KB-R}XXuo#E6Qm) zQ9h?r1{7tCPWio}d|9U)P?T{xWfW>D9beTcXDCX(PMNAGZk^&&l<_)co}zekNGeER>Hdl#{6A;zLW}S1ptaEtEMHN~MJo zw@|)qp{%h`)>|m|TPT|>l;fz3uDI5wR4hbIiFRwYF|W~uW)aoDGl z2#)(VhhV*Hx$%IKA|A8U*FiB-Xx|gtXGp!Rq=?5Xbv{d7j58hER`x<~YjL^BY{x-7 zW~qsw!1kk?INb3=#fH>;B}F`DsY#$X?6XJ&$89&KR~u66l@#%qr7i%)VW-gn9WyuG z{Ch*{4JAc9W+}4o9CoTRbbRN6n_y;Y&!q)MJZ7m2K{4Wb_QpTnYe>yjNgy7x6pb?+ zb{Ecc!N}E8c%zac9<$UmmeOkPq2V2S45>{@ig?UY zWa%3%<>Q_oVUVQ7bwEiGk6DWBXosEbYC4|n>Ui0ZIzv4!@tCDxE#kZ^C7U z)O;mHJZ7mGpvVZCq#V~ow-{2ZloauprD)zo#?&M=^SqaSY)Cz#q=?5XMfKK*>$3iy z4TjVqB}F`DDXO;)`zbinv99h+JcO2qFb7mZAkq< zNfD1(s+6T@QQc+MG_R~oO$F{*sQFNNr zJxYpr%u>~$7`Dy0LmM+R_J1oW;xS9bSV}bs+pU*>f+ncNHAW?zc+66BSxNyzW;FsRkuQJZ7mHmij!-bW~oI&d80mN{V>QQkQ_@u%AgH zIPQGx=?){VO-hP*%u=dUNL@%% zcQ}a0EVTd>qp$3F=Gr<#s!d4|k6G%QEOiFXbUeLdM}{4Bw~`_rv(&dhF|^HZcJ!j? zwCDPhk|G|n)TJy1Rz5bZe+3FjlR6zbgbv~{OI-$v@m&8X{o*5rRGE?@9<$WtETz@? zcdpOdZb+q+6!Dm)Q0)+xx^27m?e!UY<6%W69QQcWy{jN@a&(wm_SG^v}F6!Dm)7J*{)DaGepl@Zq~N{V>Q zQq3$i6K6WkAM?qzMqGI+Yl+7!)dGsqzMk#B?FB=sOi2-sS!yv$X_{@`@-tsEq^?s^ z#AB9P!cwzvrsJ;t#Tm8tK_x{zW~o+C9QF%H1jm1j>wL_J>#s_Rc+665pcvNjRdfII z`-ar{XHrNu8}XQ>+CedF(KFt-3Jq5)uS=8^@d$01qJWSU4pcV68BI5ET>Zq`{hAD% zO_db!m}Bn*#bM7Q5gf0+HFm!tb&HZB9<$U{pcqo$edUdN4XKBe6!Dm)x=d2v{NKyw z7*fwGDdHJrdlOeBon0Lb(Rf?JTQaqz1QS#~-M=jgH>i1KzEXD4h;(#yHhaCZytAw# zmo#@Juu$LHSku{+h&Phl2%P4?L#>IWBQTaFk_K-Xd_*Gg&JkGs9qq}kcz5zB(MDR@ zBk`q|z@M&rgg{L3;h{&4t|pPJ>bORW^mu|($v;{SR>9dY-gU`5Kc%tpcmkC)9xcpJ zOKU40Biu2oFEQ(f#nVh5dV!F8oP+!GlP4iRhVnRme!q?^wf=RlPW%X{WtM6DE55P6C zt7Dm5puGI#0j^*9I+m6tI@%J+E^we%CVxzWDU$$aWu0SQ0xp<-@?T~W>0&?J)%e1P zma(Lvqy1{Ws_Cdtv<4d&B~YwziDcR(*L2jhG$tCe$Yt@iwm7;bTU~pqEpA*P5&qVW zZdP$3ubBatbog4@<0|FQgnAB}ZgADAAs@~52DCW}+z<01sj!|ubfdJfF`8s5L3WrWIb{8U zmd0c=2ZD=mqGeID1c|EvZ4%IK1zOq??cJiwlw@bCM2_WCln^|hN!4lmTwEw!?K(g% ze=5!xc~KE7Pn2GFjA- z!N!_}?Lnczy%%o5twi?4;qR?eyV;oK%PQ)xpzpd8Z73VrTET9r<}p9avz3(8`Mq^hd_HfuEEcHtRr9u<@1GtnMpB%FM@};St9HWl$ZOX5nq+Jdud4#cE^+y zbuTL^qWv)?MfHi2qLK-LYW$)lMbk~90X%oLKN5&m#=OcIy`-q6odo=$?vg@;q4v>~ z6k#JxNfG%V8(9(ZhAJzos>{M5N@@$92*v^)OW#jpj;zufsIK%^`~AU@B8zvb+$67M zB)F=i2sJ^EFi`IGg(HDLRi%G~5RiJSaAl|}5H1@b1TJ`f3Jy3 zU3v)B-dH$V7Vx7=fB`wp0+Qa0YT^%gt1BzQ<%r6w@6E|9616?2q-dHdv5XkXBNbJp zk#f#eWNPjhV&00X@>qqBt4Y>FXC$QB8wdnKsM{g0_0de_<16=;m&SaNN`F-jR?Y=f zCCiig{ND2Npg$N5mV1$1Wf{4Wv;81J!HQs2AQsN7-x@17B2Fl3yrrfGy_Hp^)fJ)A zfRb%NQ_a|1WPYAfZ!}z583|NYXw{Pgo@xykH8Kz>50r)QFzOk)N~Ul#pyyeXf$LRy za226c>*eMv^;QJ}6@iMFNr^xsSRW+d^_5mf$|`)Z99f+slVjeH&sQCe2BVpomMe=Q z-l}L>EL2|3_0wpRi=;WVqY-B)qD;*e@rDCsrJ-`Dk;aQkrX!n>6=;EtQ%j~_WXf4o z?r3FsRkWf!FhVQBZm5!(P(HLz0IH*zD~^#)c zsti{9eIvErW5nzC`pbO5Du1b7Rkh}&)xXRP@kPBAWzp)Yh(AKPu2QFQ9=)apyyaz8 zkzh5K7j)`T>S-Y04Oa$G`9hHqa+3>f5h+$|b~4Jb(a6w7W; z-0n5r9E~yH_g0ifLScV(#mEtHIw@b8kS~Zk(Q0Hy%v)U*s|r_zD@MpqwF`{}+Zs^I zeI@3!`a-B^5udL#6!u=D^mB8j_C_J74i$|gL)-e1M~T!EJG~2--vpvt4q9&sD08&m@<6OS6p2-hQ0T~9Y^k!;pCY~B(c?yZrGc`FvXGaJ;H<`l z&PHwY6QdEkuu2SRm;jZr%Bm=OZ?CrLkN9ZUAKQMBlA@{RysJe0jz-F>!(lIN2~=4k zmS3o9O38HU{HF6ih~jEOC~6KN;w^)X5)4PnjS9zm2O%U~a!C;$8oLF}azSrZ5NawC zDMQbPOyzxrWag=jh1uLNUCRBT@~{yLh87sapjW|`Lo;`UH(DJi50_PhbwgOI`$e?% zk9s0>Ohtuev9LE*8VLug1C>@W+2e=&Ll$JTb6=&mDiSV5lk-Z8hA!by6u}Eq0WF@V_8wmRYwgcq}`8FAEAd(E@ar_c2-WKg_oE4qdp97 zvNeGzk!B5sC-Y$}5r{+~#?#NaA1y0C!roA{)K^yFN7iRaX^%G3oP%hT<)!{022;8X zK=n_mESr(o(wM0MP5B>&G*o4{3}rS#eCFr!`;Z+zUsW{f=PnW*4-b?m-(aD!R-!$d z`lwHDoUqYQ2gBjAu#CuZNs4-6jb(aDj94n8k;+hM#nJk9q#=O>Y7@UscxE#!R$f2)mzv!a|#{Cb%L+8lRl$PoFZQDO1Ase*oTu B&|v@o literal 0 HcmV?d00001 diff --git a/3rdparty/hgOCR/x86/staticlib/release/zlib.lib b/3rdparty/hgOCR/x86/staticlib/release/zlib.lib new file mode 100644 index 0000000000000000000000000000000000000000..f1108802214a8d94d79ffff23e56113630b91e73 GIT binary patch literal 111802 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 zdWjoin(); } - autoroate.reset(); } void GScanO1003399::open(int vid, int pid) @@ -265,12 +264,12 @@ void GScanO1003399::config_params(GScanCap& param) else cfg.g400params.isColor = SupPixelTypes[param.pixtype]; cfg.g400params.enableStable = 0;//gcap.hardwarecaps.en_stapledetect==0?0:1; - cfg.g400params.isCorrect = 1;//1 ����У�� + cfg.g400params.isCorrect = 1;//1 机器校正 PaperStatus ps = { param.papertype,param.paperAlign }; cfg.g400params.pageSize = SupPaperTyps[ps]; CSize size; #ifdef G300 - size = Device::PaperSize().GetPaperSize(TwSS::A4, 200.0f, param.paperAlign);//G300 ���֧��A4���� + size = Device::PaperSize().GetPaperSize(TwSS::A4, 200.0f, param.paperAlign);//G300 最大支持A4幅面 #else size = Device::PaperSize().GetPaperSize(param.papertype, 200.0f, param.paperAlign); #endif// G300 @@ -328,13 +327,13 @@ void GScanO1003399::config_params(GScanCap& param) TCHAR szIniFile[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE); #ifdef LANXUM - _tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata\\osd.traineddata")); #elif defined AUGE - _tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata")); #elif defined HANVON - _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata")); #else - _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata")); #endif // int iLen = WideCharToMultiByte(CP_ACP, 0, szIniFile, -1, NULL, 0, NULL, NULL); char* chRtn = new char[iLen * sizeof(char)]; diff --git a/huagao/Device/GScanO1003399.h b/huagao/Device/GScanO1003399.h index 202168d9..b6cc282a 100644 --- a/huagao/Device/GScanO1003399.h +++ b/huagao/Device/GScanO1003399.h @@ -81,8 +81,6 @@ private: volatile bool b_usbthread; BlockingQueue>> imgs; BlockingQueue m_paths; - std::shared_ptr autoroate; - //std::queue> fu_imgpro; std::shared_ptr m_autotext; std::shared_ptr m_imgprocthread; std::shared_ptr m_usbthread; diff --git a/huagao/Device/GScanO400.cpp b/huagao/Device/GScanO400.cpp index 607b18ab..c74d581c 100644 --- a/huagao/Device/GScanO400.cpp +++ b/huagao/Device/GScanO400.cpp @@ -12,135 +12,135 @@ //u32_CMD typedef enum tagUsbKeyWords : UINT32 { - //������ + //无命令 NO_COMMAND = 0, - //��ȡdsp ״̬ + //获取dsp 状态 GET_DSP_STATUS = 1, - //ȡͼ + //取图 GET_IMAGE = 2, - //����DSP��פ���ͼ + //销毁DSP中驻存的图 POP_IMAGE = 3, - //��ʼɨ������ + //开始扫描命令 START_COMMAND = 4, - //ֹͣɨ������ + //停止扫描命令 STOP = 5, - //��ȡɨ����ɨ��ģʽ + //获取扫描仪扫描模式 GET_SCAN_MODE = 6, - //��ȡ�̼��汾�� + //获取固件版本号 GET_FW_VERSION = 7, - //����PC�˵�״̬ + //返回PC端的状态 SEND_STATUS_PC = 8, - //�·�ɨ�����ò��� + //下发扫描配置参数 CONFIGURED_DATA = 9, - //�·��̼���Ϣ + //下发固件信息 SEND_FW = 10, - //��ȡɨ����� + //获取扫描参数 GET_CONFIG_DATA = 11, - //��ȡɨ�������� + //获取扫描总张数 GET_SCANN_NUM = 12, - //��ȡ����ֽ��״̬ + //获取有无纸的状态 GET_PAPERFEEDER_STATUS = 13, - //DSP��ʼ�� + //DSP初始化 INIT_HARDWARE_SYS = 14, - //��ȡ����ֽ��״̬ + //获取有无纸的状态 GET_PAPER_STATUS = 0x0d, - //�·�Ԫ�������ò������Ҷȣ�LED R�ع�ʱ�䣩 + //下发元器件配置参数(灰度,LED R曝光时间) SEND_COMPONENTS_GR = 15, - //�·�Ԫ�������ò�����LED G/B�ع�ʱ�䣩 + //下发元器件配置参数(LED G/B曝光时间) SEND_COMPONENTS_GB = 16, - //�·�ɨ��ģʽ + //下发扫描模式 SEND_SCAN_MODE = 17, - //��ʼ����ƽ������ + //开始进行平场矫正 START_FLAT = 18, - //ֹͣƽ������ + //停止平场矫正 STOP_FLAT = 19, - //�·�200dpi��ɫƽ���������� + //下发200dpi彩色平场矫正参数 SEND_200_COLOR_FLAT_DATA = 20, - //�·�300dpi��ɫƽ���������� + //下发300dpi彩色平场矫正参数 SEND_300_COLOR_FLAT_DATA = 21, - //��ȡ200dpi��ɫƽ���������� + //获取200dpi彩色平场矫正参数 GET_200_COLOR_FLAT_DATA = 22, - //��ȡ300dpi��ɫƽ���������� + //获取300dpi彩色平场矫正参数 GET_300_COLOR_FLAT_DATA = 23, - //�·�200dpi�Ҷ�ƽ��У������ + //下发200dpi灰度平场校正参数 SEND_200_GRAY_FLAT_DATA = 24, - //�·�300dpi�Ҷ�ƽ��У������ + //下发300dpi灰度平场校正参数 SEND_300_GRAY_FLAT_DATA = 25, - //��ȡ200DPI�Ҷ�ƽ��У������ + //获取200DPI灰度平场校正参数 GET_200_GRAY_FLAT_DATA = 26, - //��ȡ300DPI�Ҷ�ƽ��У������ + //获取300DPI灰度平场校正参数 GET_300_GRAY_FLAT_DATA = 27, - //�·����к����� + //下发序列号命令 SEND_SERIAL = 28, - //��ȡ���к����� + //获取序列号命令 GET_SERIAL = 29, - //��ȡ������ + //获取滚轴数 GET_ROLLER_NUM = 0x1e, - //��������� + //清零滚轴数 CLR_ROLLER_NUM = 0x1f, - //���ɨ�������� + //清除扫描总张数 CLR_SCAN_NUM = 0x20, - //׼�����¹̼� + //准备更新固件 PRE_UPGRADE = 0X21, - //��ʼ���¹̼� + //开始更新固件 START_UPGRADE = 0x22, - //��ɫ��AD���� + //彩色的AD参数 RGB_ADI_PARA = 0x23, - //�Ҷȵ�AD���� + //灰度的AD参数 ADI_PARA = 0x24, - //��ȡCIS�������ع�ʱ�䣬ad����) + //获取CIS参数(曝光时间,ad参数) GET_CIS_PARA = 0x25, - //ɨ������ + //扫描张数 START_COMMAND_COUNT = 0x26, - //�·�����ʱ�� + //下发休眠时间 SET_SLEEP_TIME = 0x27, - //��ȡ����ʱ�� + //获取休眠时间 GET_SLEEP_TIME = 0x28, - //������� + //清除缓存 CLR_CACHE = 0x29, - //�·��ٶ�ģʽ + //下发速度模式 SET_SPEED_MODE = 0x2a, - //��ȡɨ���ٶ�ģʽ + //获取扫描速度模式 GET_SPEED_MODE = 0X2b, - //���ù̼��汾һ��8���ֽ� + //设置固件版本一共8个字节 SET_FW_VERSION = 0X2c, - //��ȡDSP�汾 + //获取DSP版本 GET_DSP_VERSION = 0X2d, - //�ɼ���FPGA�̼��汾 + //采集板FPGA固件版本 GET_SCANFPGA_VERSION = 0x2e, - //�����FPGA�̼��汾 + //电机板FPGA固件版本 GET_MOTORFPGA_VERSION = 0X2f, - //������������Ϣ + //设置制造商信息 SET_USB_INFOR_MANUFACTURE = 0X30, - //��ȡ��������Ϣ + //获取制造商信息 GET_USB_INFOR_MANUFACTURE = 0X31, - //���ò�Ʒ�ͺ���Ϣ + //设置产品型号信息 SET_USB_INFOR_MODEL_NAME = 0X32, - //��ȡ��Ʒ�ͺ���Ϣ + //获取产品型号信息 GET_USB_INFOR_MODEL_NAME = 0X33, - //����USB PID / VID��Ϣ + //设置USB PID / VID信息 SET_USB_INFOR_VIDPID = 0X34, GET_USB_INFOR_VIDPID = 0X35, - //���ÿ�ֽ��ͣ��������� + //设置卡纸急停检测灵敏度 SET_JAM_DETECT_SENSITIVE = 0X36, - //��ȡ��ֽ��ͣ��������� + //获取卡纸急停检测灵敏度 GET_JAM_DETECT_SENSITIVE = 0X37, - //���ú������ϵ�� + //设置横向畸变系数 SET_JUST_COF_H = 0x38, - //��ȡ�������ϵ�� + //读取横向畸变系数 GET_JUST_COF_H = 0x39, - CLEAR_HWERROR = 0x40,//G400 ���Ӳ���쳣 - //�����������ϵ�� + CLEAR_HWERROR = 0x40,//G400 清除硬件异常 + //设置纵向畸变系数 SET_JUST_COF_V = 0x41, - //��ȡ�������ϵ�� + //读取纵向畸变系数 GET_JUST_COF_V = 0x42, - //����ɨ���DZ��� + //设置扫描仪编码 GET_CODE_G400 = 0x59, - //��ȡɨ���DZ��� + //读取扫描仪编码 SET_CODE_G400 = 0x60, - //����ɨ���DZ��� + //设置扫描仪编码 SET_CODE_G200 = 0x63, - //��ȡɨ���DZ��� + //读取扫描仪编码 GET_CODE_G200 = 0x64, } UsbKeyWords, * PUsbKeyWords; @@ -215,7 +215,7 @@ int GScanO400::aquire_bmpdata(std::vector& bmpdata) m_threadUsb.reset(); FileTools::writelog(log_ERROR, "aquire_bmpdata m_threadUsb.reset()"); } - Stop_scan();//ֹͣɨ�� + Stop_scan();//停止扫描 ResetScanner(); set_scannum(abs(roller_num_new - roller_num)); return HARDWARE_ERROR; @@ -452,7 +452,7 @@ int GScanO400::notifyscan() m_usb->read_bulk(¬ify, sizeof(notify)); if ((notify.u32_Data != 0x10 && GetFWVersion().length() < 10) || notify.u32_Data == 0x100) { - ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("ɨ���Ǵ�������״̬,�밴��Դ�����ѣ� ��ʾ "), NULL, SW_HIDE); + ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("扫描仪处于休眠状态,请按电源键唤醒! 提示 "), NULL, SW_HIDE); return -1; } return 1; @@ -657,7 +657,7 @@ void GScanO400::usbmain() UpdateScanInfo(countNReaded(), get_imgTransfered()); #endif Pop_Image(); - FileTools::writelog(log_INFO, "��ɨ���ǽ���" + to_string(get_imgnReaded()) + "���ļ�����ʱ " + to_string(sw.elapsed_ms())); + FileTools::writelog(log_INFO, "从扫描仪接收" + to_string(get_imgnReaded()) + "份文件。耗时 " + to_string(sw.elapsed_ms())); sw.reset(); break; } @@ -734,7 +734,7 @@ std::shared_ptr> GScanO400::Get_Img_Data(int bufferSize) std::this_thread::sleep_for(std::chrono::microseconds(20)); while (startindex < bufferSize) { - startindex += m_usb->read_bulk(imData->data() + startindex, (bufferSize - startindex) < totalength ? (bufferSize - startindex) : totalength); //���ݽ���������С�ڵ��ڹܵ�������������������ʧ�� + startindex += m_usb->read_bulk(imData->data() + startindex, (bufferSize - startindex) < totalength ? (bufferSize - startindex) : totalength); //数据接收量必须小于等于管道内数据量,否则会接收失败 std::this_thread::sleep_for(std::chrono::microseconds(10)); } if (sw.elapsed_ms() > 5000) diff --git a/huagao/Device/ImageMatQueue.cpp b/huagao/Device/ImageMatQueue.cpp index 007380a3..93115811 100644 --- a/huagao/Device/ImageMatQueue.cpp +++ b/huagao/Device/ImageMatQueue.cpp @@ -163,20 +163,20 @@ void ImageMatQueue::setparam(const GScanCap& param) if (scanParam.fillhole.is_fillhole) { float ratio = scanParam.fillhole.fillholeratio / 100.0; m_iaList.push_back(shared_ptr(new CImageApplyOutHole(200, ratio, 50))); - } //ȷ���ܹ���ȡ��������ͼ + } //确保能够获取正反两面图 if (param.is_autodiscradblank_normal || param.is_autodiscradblank_vince) { //m_iaList.push_back(shared_ptr(new CImageApplyDiscardBlank())); CImageApplyDiscardBlank* disBlank = new CImageApplyDiscardBlank(); - //�����հ�ҳ��ֵ + //跳过空白页阈值 int area = 200; int intensity = 15; int maxHeight = 3307;//A3 height - //ҳ�����߶Ȼ�ȡ + //页面最大高度获取 if (param.papertype == TwSS::MaxSize) maxHeight = 6614; - //��ֵ������ֵ + //阈值参数赋值 if (param.discardblank_percent < 10) { area = 70 + (int)((param.discardblank_percent - 1) * 13.33); intensity = 8 + param.discardblank_percent / 2; @@ -201,12 +201,12 @@ void ImageMatQueue::setparam(const GScanCap& param) area = 2100 + (param.discardblank_percent - 80) * (maxHeight - 2100) / 20; intensity = 40; } - //�ж��Ƿ�Ϊ�����հ�ҳ��Ʊ + //判断是否为跳过空白页发票 if (param.is_autodiscradblank_vince) { area *= 1.5; intensity *= 1.5; } - //���ò�����ֵ + //设置参数阈值 disBlank->setMinArea(area); disBlank->setIntensity(intensity); m_iaList.push_back(shared_ptr(disBlank)); @@ -244,26 +244,26 @@ void ImageMatQueue::setparam(const GScanCap& param) double aa = (254 / 2000.0) * param.brightness + 0.5; int bright = ceil(aa);//[-127,128] 0.128=256.0/2000.0 int contrast = 0.0; //= (int)(param.contrast * 0.036);;//[-36,36] 0.036=72.0/2000.0; - if (param.contrast < 0.0) // �ݲ��޸ĶԱȶȣ���ɫ�ĸ�ɫƫ + if (param.contrast < 0.0) // 暂不修改对比度,彩色文稿色偏 contrast = (int)(param.contrast * 0.036); else contrast = (int)(param.contrast * 0.018); m_iaList.push_back(shared_ptr(new CImageApplyAdjustColors(bright, contrast, param.gamma))); } - //���⿨���� + //答题卡除红 if (scanParam.hsvcorrect) { m_iaList.push_back(shared_ptr(new CImageApplyHSVCorrect(CImageApplyHSVCorrect::CorrectOption::Red_Removal))); } - //�� + //锐化 if (param.sharpen) { SharpenBlur sb = (SharpenBlur)param.sharpen; m_iaList.push_back(shared_ptr(new CImageApplySharpen(sb))); } - //�Զ���ɫʶ�� + //自动颜色识别 if (param.automaticcolor) m_iaList.push_back(shared_ptr(new CImageApplyColorRecognition(param.automaticcolortype == 1 ? CImageApplyColorRecognition::ColorRecognitionMode::Color_Gray : CImageApplyColorRecognition::ColorRecognitionMode::Color_Mono))); - //���� + //缩放 if (param.resolution_dst != param.resolution_native) { CImageApplyResize* apply; @@ -280,10 +280,10 @@ void ImageMatQueue::setparam(const GScanCap& param) } m_iaList.push_back(shared_ptr< CImageApply>(apply)); } - //��ֵ�� + //二值化 if (param.pixtype == 0) //threshold m_iaList.push_back(shared_ptr(new CImageApplyBWBinaray(CImageApplyBWBinaray::ThresholdType::THRESH_BINARY))); - //�ڰ׽����Ż� + //黑白降噪优化 if (scanParam.detachnoise.is_detachnoise && scanParam.pixtype == 0) { m_iaList.push_back(shared_ptr(new CImageApplyDetachNoise(scanParam.detachnoise.detachnoise))); @@ -314,11 +314,11 @@ void ImageMatQueue::setparam(const GScanCap& param) TCHAR szIniFile[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_WINDOWS, TRUE); #ifdef LANXUM - _tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\LANXUMSCAN\\tessdata\\osd.traineddata")); #elif defined AUGE - _tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\AuGeScan\\tessdata\\osd.traineddata")); #elif defined HANVON - _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata")); + _tcscat(szIniFile, _T("\\twain_32\\HanvonScan\\tessdata\\osd.traineddata")); #else _tcscat(szIniFile, _T("\\twain_32\\HuaGoScan\\tessdata\\osd.traineddata")); #endif // @@ -413,7 +413,7 @@ void ImageMatQueue::cache_run() { FileTools::writelog(log_ERROR, "error while openning cache file :" + path); } - FileTools::writelog(log_INFO, " ����д��ͼƬ���ݺ�ʱ " + to_string(sw.elapsed_ms()) + " buffer size = " + to_string(buf->size())); + FileTools::writelog(log_INFO, " 磁盘写入图片数据耗时 " + to_string(sw.elapsed_ms()) + " buffer size = " + to_string(buf->size())); buf->clear(); buf.reset(); sw.reset(); @@ -493,10 +493,6 @@ void ImageMatQueue::proc() { mats.push_back(scanParam.is_switchfrontback ? imgback : imgfront); mats.push_back(scanParam.is_switchfrontback ? imgfront : imgback); - //if (!mats[0].empty()) - // cv::imwrite("D:\\testimage\\" + to_string(++indeximg) + "prc.jpg", mats[0]); - //if (!mats[1].empty()) - // cv::imwrite("D:\\testimage\\" + to_string(++indeximg) + "prc.jpg", mats[1]); remove(info.path.c_str()); remove(back.path.c_str()); } @@ -510,7 +506,7 @@ void ImageMatQueue::proc() for (size_t i = 0; i < mats.size(); i++) { if (!mats[i].empty()) - cv::resize(mats[i], mats[i], cv::Size(), fx, fy);//������������ܻ��������С��ƥ������ ��ϵ���������׶� + cv::resize(mats[i], mats[i], cv::Size(), fx, fy);//用于修正与佳能机器幅面大小不匹配问题 此系数请勿轻易动 } if (scanParam.en_fold != 0) { @@ -527,8 +523,8 @@ void ImageMatQueue::proc() // cvtColor(mat, mat, CV_RGB2GRAY); if (!mat.empty()) { - Mat front = mat(Rect(0, 0, mat.cols / 2, mat.rows-10));//����ͼ��β��������Ч���ݶ���10������ - Mat back = mat(Rect(mat.cols / 2, 0, mat.cols / 2, mat.rows-10));//����ͼ��β��������Ч���ݶ���10������ + Mat front = mat(Rect(0, 0, mat.cols / 2, mat.rows-10));//避免图像尾部出现无效数据丢弃10行数据 + Mat back = mat(Rect(mat.cols / 2, 0, mat.cols / 2, mat.rows-10));//避免图像尾部出现无效数据丢弃10行数据 #ifdef UV mats.push_back(scanParam.is_switchfrontback ? front : back); mats.push_back(scanParam.is_switchfrontback ? back : front); @@ -588,7 +584,7 @@ void ImageMatQueue::proc() #ifdef UV if (!uvmats.empty()) { - //ƴ��ԭͼ��UVͼ + //拼接原图和UV图 for (int j = 0; j < mats.size(); j++) { if (!scanParam.is_duplex && j == 1) { @@ -607,7 +603,7 @@ void ImageMatQueue::proc() } #endif - FileTools::writelog(log_INFO, "ͼ������ʱ " + to_string(sw.elapsed_ms())); + FileTools::writelog(log_INFO, "图像处理耗时 " + to_string(sw.elapsed_ms())); sw.reset(); for (int i = 0; i < mats.size(); i++) { if (!scanParam.is_duplex && i == 1) { @@ -638,7 +634,7 @@ void ImageMatQueue::proc() FileTools::writelog(log_ERROR, "enqueue image is empty " + std::to_string(index++)); } } - FileTools::writelog(log_INFO, "ת��BMP ��ʱ�� " + to_string(sw.elapsed_ms())); + FileTools::writelog(log_INFO, "转码BMP 耗时: " + to_string(sw.elapsed_ms())); sw.reset(); if (scanParam.multi_output_red) { @@ -660,7 +656,7 @@ void ImageMatQueue::proc() } } } - FileTools::writelog(log_INFO, "������� ��ʱ�� " + to_string(sw.elapsed_ms())); + FileTools::writelog(log_INFO, "多流输出 耗时: " + to_string(sw.elapsed_ms())); } mats.clear(); diff --git a/huagao/ImageProcess/ImageProcess_Public.cpp b/huagao/ImageProcess/ImageProcess_Public.cpp index 70965709..0c4a904b 100644 --- a/huagao/ImageProcess/ImageProcess_Public.cpp +++ b/huagao/ImageProcess/ImageProcess_Public.cpp @@ -5,9 +5,7 @@ namespace hg void convexHull(const std::vector& src, std::vector& dst, bool clockwise) { CvMemStorage* storage = cvCreateMemStorage(); // - CvSeq* ptseq = cvCreateSeq(CV_SEQ_KIND_GENERIC | CV_32SC2, sizeof(CvContour), sizeof(CvPoint), storage); //ptseqstorage - - // + CvSeq* ptseq = cvCreateSeq(CV_SEQ_KIND_GENERIC | CV_32SC2, sizeof(CvContour), sizeof(CvPoint), storage); for (const cv::Point& item : src) { CvPoint p; @@ -15,10 +13,7 @@ namespace hg p.y = item.y; cvSeqPush(ptseq, &p); } - - //hullstorage CvSeq* hull = cvConvexHull2(ptseq, nullptr, clockwise ? CV_CLOCKWISE : CV_COUNTER_CLOCKWISE, 0); - //dst dst.clear(); for (int i = 0, hullCount = hull->total; i < hullCount; i++) diff --git a/huagao/hg_ocr.cpp b/huagao/hg_ocr.cpp new file mode 100644 index 00000000..089df75a --- /dev/null +++ b/huagao/hg_ocr.cpp @@ -0,0 +1,511 @@ +#include "hg_ocr.h" +#include "allheaders.h" +#include "baseapi.h" +#include "basedir.h" +#include "osdetect.h" +#include "renderer.h" +#include "strngs.h" +#include "tprintf.h" +#include "resultiterator.h" +#include + +static unsigned char string_CIDTOGIDMAP[] = { + 120,156,236,194,1,9,0,0,0,2,160,250,127,186,33,137, + 166,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,128,123,3,0,0,255,255,236,194,1,13,0,0, + 0,194,32,223,191,180,69,24,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,0,0,255, + 255,236,194,1,13,0,0,0,194,32,223,191,180,69,24,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,235,0,0,0,255,255,237,194,1,13,0,0,0,194,32, + 223,191,180,69,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,235,0,255,0,16}; + +static unsigned char string_TTF[] = { + 0,1,0,0,0,10,0,128,0,3,0,32,79,83,47,50,86,221,200,148, + 0,0,1,40,0,0,0,96,99,109,97,112,0,18,0,78,0,0,1,144,0,0, + 0,44,103,108,121,102,0,0,0,0,0,0,1,196,0,0,0,1,104,101, + 97,100,2,80,182,226,0,0,0,172,0,0,0,54,104,104,101,97,0, + 3,0,2,0,0,0,228,0,0,0,36,104,109,116,120,0,0,0,0,0,0,1, + 136,0,0,0,8,108,111,99,97,0,0,0,0,0,0,1,188,0,0,0,6,109, + 97,120,112,0,3,0,1,0,0,1,8,0,0,0,32,110,97,109,101,165, + 232,245,73,0,0,1,200,0,0,0,80,112,111,115,116,0,1,0,1,0, + 0,2,24,0,0,0,32,0,1,0,0,0,1,0,0,167,55,179,76,95,15,60,245, + 4,7,1,0,0,0,0,0,207,154,252,110,0,0,0,0,207,154,252,110,0, + 0,128,0,0,0,0,1,0,0,0,16,0,2,0,0,0,0,0,0,0,1,0,0,0,1,255, + 255,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 2,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,1,144,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,5,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,71,79,79,71,0,64,255,255,0,0,0,1,255,255,0,0,0,1, + 0,1,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,1,0,0,0,0,0,20,0,3,0,0,0,0,0,32,0,6,0,12,0,0,0,0, + 0,1,0,0,0,6,0,12,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,3,0,42,0,0,0,3,0,0,0,5,0,22,0,11,0,1,0,0,0,0,0,5,0,11,0, + 0,0,3,0,1,4,9,0,5,0,22,0,11,86,101,114,115,105,111,110,32, + 49,46,48,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,49, + 0,46,0,48,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0}; + +static const char* endstream = "endstream\nendobj\n"; + +Pix* createPix(const unsigned char * imgData, int width, int height, int bytes_per_pixel, int bytes_per_line); + +void PreloadRenderers(tesseract::TessBaseAPI* api, + tesseract::PointerVector* renderers, const char* outputbase); + +char* GetPDFTextObjectss(tesseract::TessBaseAPI* api, double width, double height, int& len); + +HG_OCR::HG_OCR() + : api(new tesseract::TessBaseAPI()) +{ + +} + +HG_OCR::HG_OCR(PSM_TYPE type) + : api(new tesseract::TessBaseAPI()) +{ + init_orientation("./tessdata/osd.traineddata"); +} + +HG_OCR::~HG_OCR() +{ + if (api != nullptr) + delete reinterpret_cast(api); +} + +void HG_OCR::init(HG_OCR::PSM_TYPE type) +{ + init_orientation("./tessdata/osd.traineddata"); +} + +void HG_OCR::init(const char * filename, PSM_TYPE type) +{ + switch (type) + { + case Orientation: + init_orientation(filename); + break; + } +} + +int HG_OCR::getOrientation(unsigned char *imgData, int width, int height, int channels, int step) +{ + int orientation, direction, lineOrder; + float deskewAngle; + getOrientation(imgData, width, height, channels, step, + orientation, direction, lineOrder, deskewAngle); + + return orientation; +} + +bool HG_OCR::getOrientation(unsigned char* imgData, int width, int height, int channels, int step, + int& orientation, int& direction, int& lineOrder, float& deskewAngle) +{ + if (api == nullptr) return false; + + tesseract::TessBaseAPI* ptr = reinterpret_cast(api); + ptr->SetImage(imgData, width, height, channels, step); + +#if 0 + tesseract::PageIterator* it = ptr->AnalyseLayout(); + + if (it != nullptr) + { + it->Orientation(reinterpret_cast(&orientation), + reinterpret_cast(&direction), + reinterpret_cast(&lineOrder), + &deskewAngle); + delete it; + return true; + } + else + return false; +#endif + orientation = ptr->AnalyseLayout1(); +} + +void HG_OCR::init_orientation(const char *filename) +{ + auto ret= reinterpret_cast(api)->Init(filename, "osd"); + reinterpret_cast(api)->SetPageSegMode(tesseract::PSM_AUTO_OSD); +} + +void PreloadRenderers(tesseract::TessBaseAPI* api, + tesseract::PointerVector* renderers, + const char* outputbase) +{ + bool b; + api->GetBoolVariable("tessedit_create_pdf", &b); + + if (b) + { + bool textonly; + api->GetBoolVariable("textonly_pdf", &textonly); + printf("GetDatapath%s\n", api->GetDatapath()); + renderers->push_back(new tesseract::TessPDFRenderer(outputbase, api->GetDatapath(), textonly)); + } +} + +Pix* createPix(const unsigned char * imagedata, int width, int height, int bytes_per_pixel, int bytes_per_line) +{ + int bpp = bytes_per_pixel * 8; + if (bpp == 0) bpp = 1; + Pix* pix = pixCreate(width, height, bpp == 24 ? 32 : bpp); + l_uint32* data = pixGetData(pix); + int wpl = pixGetWpl(pix); + switch (bpp) { + case 1: + for (int y = 0; y < height; ++y, data += wpl, imagedata += bytes_per_line) + { + for (int x = 0; x < width; ++x) { + if (imagedata[x / 8] & (0x80 >> (x % 8))) + CLEAR_DATA_BIT(data, x); + else + SET_DATA_BIT(data, x); + } + } + break; + + case 8: + // Greyscale just copies the bytes in the right order. + for (int y = 0; y < height; ++y, data += wpl, imagedata += bytes_per_line) + for (int x = 0; x < width; ++x) + SET_DATA_BYTE(data, x, imagedata[x]); + break; + + case 24: + // Put the colors in the correct places in the line buffer. + for (int y = 0; y < height; ++y, imagedata += bytes_per_line) + { + for (int x = 0; x < width; ++x, ++data) { + SET_DATA_BYTE(data, COLOR_RED, imagedata[3 * x]); + SET_DATA_BYTE(data, COLOR_GREEN, imagedata[3 * x + 1]); + SET_DATA_BYTE(data, COLOR_BLUE, imagedata[3 * x + 2]); + } + } + break; + + case 32: + // Maintain byte order consistency across different endianness. + for (int y = 0; y < height; ++y, imagedata += bytes_per_line, data += wpl) + for (int x = 0; x < width; ++x) + data[x] = (imagedata[x * 4] << 24) | (imagedata[x * 4 + 1] << 16) | + (imagedata[x * 4 + 2] << 8) | imagedata[x * 4 + 3]; + break; + + default: + break; + } + + pix->informat = bytes_per_pixel == 1 ? 1 : 2; + if (bytes_per_pixel == 1) + { + PIXCMAP* colormap = pixcmapCreate(8); + LEPT_FREE(colormap->array); + colormap->array = (l_uint8 *)LEPT_CALLOC(256, sizeof(RGBA_QUAD)); + colormap->n = 256; + colormap->nalloc = 256; + colormap->depth = 8; + l_uint8* ptr = reinterpret_cast(colormap->array); + for (int i = 0; i < 256; i++) + ptr[i * 4 + 0] = ptr[i * 4 + 1] = ptr[i * 4 + 2] = ptr[i * 4 + 3] = i; + pixSetColormap(pix, colormap); + } + pixSetXRes(pix, 200); + pixSetYRes(pix, 200); + + //FILE* file = fopenWriteStream("aaa.bmp", "w"); + //pixWriteStreamBmp(file, pix); + //fclose(file); + return pix; +} + +double prec(double x) { + double kPrecision = 1000.0; + double a = round(x * kPrecision) / kPrecision; + if (a == -0) + return 0; + return a; +} + +void ClipBaseline(int ppi, int x1, int y1, int x2, int y2, + int *line_x1, int *line_y1, + int *line_x2, int *line_y2) +{ + *line_x1 = x1; + *line_y1 = y1; + *line_x2 = x2; + *line_y2 = y2; + double rise = abs(y2 - y1) * 72 / ppi; + double run = abs(x2 - x1) * 72 / ppi; + if (rise < 2.0 && 2.0 < run) + *line_y1 = *line_y2 = (y1 + y2) / 2; +} + +long dist2(int x1, int y1, int x2, int y2) +{ + return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); +} + +void GetWordBaseline(int writing_direction, int ppi, int height, + int word_x1, int word_y1, int word_x2, int word_y2, + int line_x1, int line_y1, int line_x2, int line_y2, + double *x0, double *y0, double *length) +{ + if (writing_direction == tesseract::WRITING_DIRECTION_RIGHT_TO_LEFT) + { + Swap(&word_x1, &word_x2); + Swap(&word_y1, &word_y2); + } + double word_length; + double x, y; + { + int px = word_x1; + int py = word_y1; + double l2 = dist2(line_x1, line_y1, line_x2, line_y2); + if (l2 == 0) { + x = line_x1; + y = line_y1; + } + else { + double t = ((px - line_x2) * (line_x2 - line_x1) + + (py - line_y2) * (line_y2 - line_y1)) / l2; + x = line_x2 + t * (line_x2 - line_x1); + y = line_y2 + t * (line_y2 - line_y1); + } + word_length = sqrt(static_cast(dist2(word_x1, word_y1, + word_x2, word_y2))); + word_length = word_length * 72.0 / ppi; + x = x * 72 / ppi; + y = height - (y * 72.0 / ppi); + } + *x0 = x; + *y0 = y; + *length = word_length; +} + +void AffineMatrix(int writing_direction, + int line_x1, int line_y1, int line_x2, int line_y2, + double *a, double *b, double *c, double *d) +{ + double theta = atan2(static_cast(line_y1 - line_y2), + static_cast(line_x2 - line_x1)); + *a = cos(theta); + *b = sin(theta); + *c = -sin(theta); + *d = cos(theta); + switch (writing_direction) { + case tesseract::WRITING_DIRECTION_RIGHT_TO_LEFT: + *a = -*a; + *b = -*b; + break; + case tesseract::WRITING_DIRECTION_TOP_TO_BOTTOM: + // TODO(jbreiden) Consider using the vertical PDF writing mode. + break; + default: + break; + } +} + +bool CodepointToUtf16be(int code, char utf16[20]) +{ + if ((code > 0xD7FF && code < 0xE000) || code > 0x10FFFF) { + tprintf("Dropping invalid codepoint %d\n", code); + return false; + } + if (code < 0x10000) { + snprintf(utf16, 20, "%04X", code); + } + else { + int a = code - 0x010000; + int high_surrogate = (0x03FF & (a >> 10)) + 0xD800; + int low_surrogate = (0x03FF & a) + 0xDC00; + snprintf(utf16, 20, "%04X%04X", high_surrogate, low_surrogate); + } + return true; +} + +char* GetPDFTextObjectss(tesseract::TessBaseAPI* api, double width, double height, int& len) +{ + STRING pdf_str(""); + double ppi = api->GetSourceYResolution(); + + // These initial conditions are all arbitrary and will be overwritten + double old_x = 0.0, old_y = 0.0; + int old_fontsize = 0; + tesseract::WritingDirection old_writing_direction = tesseract::WRITING_DIRECTION_LEFT_TO_RIGHT; + bool new_block = true; + int fontsize = 0; + double a = 1; + double b = 0; + double c = 0; + double d = 1; + + // TODO(jbreiden) This marries the text and image together. + // Slightly cleaner from an abstraction standpoint if this were to + // live inside a separate text object. + pdf_str += "q "; + pdf_str.add_str_double("", prec(width)); + pdf_str += " 0 0 "; + pdf_str.add_str_double("", prec(height)); + pdf_str += " 0 0 cm"; + if (true) { + pdf_str += " /Im1 Do"; + } + pdf_str += " Q\n"; + + int line_x1 = 0; + int line_y1 = 0; + int line_x2 = 0; + int line_y2 = 0; + + tesseract::ResultIterator *res_it = api->GetIterator(); + while (!res_it->Empty(tesseract::RIL_BLOCK)) + { + if (res_it->IsAtBeginningOf(tesseract::RIL_BLOCK)) + { + pdf_str += "BT\n3 Tr"; // Begin text object, use invisible ink + old_fontsize = 0; // Every block will declare its fontsize + new_block = true; // Every block will declare its affine matrix + } + + if (res_it->IsAtBeginningOf(tesseract::RIL_TEXTLINE)) + { + int x1, y1, x2, y2; + res_it->Baseline(tesseract::RIL_TEXTLINE, &x1, &y1, &x2, &y2); + ClipBaseline(ppi, x1, y1, x2, y2, &line_x1, &line_y1, &line_x2, &line_y2); + } + + if (res_it->Empty(tesseract::RIL_WORD)) + { + res_it->Next(tesseract::RIL_WORD); + continue; + } + + // Writing direction changes at a per-word granularity + tesseract::WritingDirection writing_direction; + { + tesseract::Orientation orientation; + tesseract::TextlineOrder textline_order; + float deskew_angle; + res_it->Orientation(&orientation, &writing_direction, + &textline_order, &deskew_angle); + if (writing_direction != tesseract::WRITING_DIRECTION_TOP_TO_BOTTOM) + { + switch (res_it->WordDirection()) { + case DIR_LEFT_TO_RIGHT: + writing_direction = tesseract::WRITING_DIRECTION_LEFT_TO_RIGHT; + break; + case DIR_RIGHT_TO_LEFT: + writing_direction = tesseract::WRITING_DIRECTION_RIGHT_TO_LEFT; + break; + default: + writing_direction = old_writing_direction; + } + } + } + + // Where is word origin and how long is it? + double x, y, word_length; + { + int word_x1, word_y1, word_x2, word_y2; + res_it->Baseline(tesseract::RIL_WORD, &word_x1, &word_y1, &word_x2, &word_y2); + GetWordBaseline(writing_direction, ppi, height, + word_x1, word_y1, word_x2, word_y2, + line_x1, line_y1, line_x2, line_y2, + &x, &y, &word_length); + } + + if (writing_direction != old_writing_direction || new_block) + { + AffineMatrix(writing_direction, + line_x1, line_y1, line_x2, line_y2, &a, &b, &c, &d); + pdf_str.add_str_double(" ", prec(a)); // . This affine matrix + pdf_str.add_str_double(" ", prec(b)); // . sets the coordinate + pdf_str.add_str_double(" ", prec(c)); // . system for all + pdf_str.add_str_double(" ", prec(d)); // . text that follows. + pdf_str.add_str_double(" ", prec(x)); // . + pdf_str.add_str_double(" ", prec(y)); // . + pdf_str += (" Tm "); // Place cursor absolutely + new_block = false; + } + else + { + double dx = x - old_x; + double dy = y - old_y; + pdf_str.add_str_double(" ", prec(dx * a + dy * b)); + pdf_str.add_str_double(" ", prec(dx * c + dy * d)); + pdf_str += (" Td "); // Relative moveto + } + old_x = x; + old_y = y; + old_writing_direction = writing_direction; + + // Adjust font size on a per word granularity. Pay attention to + // fontsize, old_fontsize, and pdf_str. We've found that for + // in Arabic, Tesseract will happily return a fontsize of zero, + // so we make up a default number to protect ourselves. + { + bool bold, italic, underlined, monospace, serif, smallcaps; + int font_id; + res_it->WordFontAttributes(&bold, &italic, &underlined, &monospace, + &serif, &smallcaps, &fontsize, &font_id); + const int kDefaultFontsize = 8; + if (fontsize <= 0) + fontsize = kDefaultFontsize; + if (fontsize != old_fontsize) + { + char textfont[20]; + snprintf(textfont, sizeof(textfont), "/f-0-0 %d Tf ", fontsize); + pdf_str += textfont; + old_fontsize = fontsize; + } + } + + bool last_word_in_line = res_it->IsAtFinalElement(tesseract::RIL_TEXTLINE, tesseract::RIL_WORD); + bool last_word_in_block = res_it->IsAtFinalElement(tesseract::RIL_BLOCK, tesseract::RIL_WORD); + STRING pdf_word(""); + int pdf_word_len = 0; + do { + const char *grapheme = res_it->GetUTF8Text(tesseract::RIL_SYMBOL); + if (grapheme && grapheme[0] != '\0') { + GenericVector unicodes; + UNICHAR::UTF8ToUnicode(grapheme, &unicodes); + char utf16[20]; + for (int i = 0; i < unicodes.length(); i++) + { + int code = unicodes[i]; + if (CodepointToUtf16be(code, utf16)) + { + pdf_word += utf16; + pdf_word_len++; + } + } + } + delete[]grapheme; + res_it->Next(tesseract::RIL_SYMBOL); + } + while (!res_it->Empty(tesseract::RIL_BLOCK) && !res_it->IsAtBeginningOf(tesseract::RIL_WORD)); + if (word_length > 0 && pdf_word_len > 0 && fontsize > 0) + { + double h_stretch = 2 * prec(100.0 * word_length / (fontsize * pdf_word_len)); + pdf_str.add_str_double("", h_stretch); + pdf_str += " Tz"; // horizontal stretch + pdf_str += " [ <"; + pdf_str += pdf_word; // UTF-16BE representation + pdf_str += "> ] TJ"; // show the text + } + if (last_word_in_line) { + pdf_str += " \n"; + } + if (last_word_in_block) { + pdf_str += "ET\n"; // end the text object + } + } + char *ret = new char[pdf_str.length() + 1]; + strcpy(ret, pdf_str.string()); + delete res_it; + len = pdf_str.length(); + return ret; +} diff --git a/huagao/hg_ocr.h b/huagao/hg_ocr.h new file mode 100644 index 00000000..b9660b2e --- /dev/null +++ b/huagao/hg_ocr.h @@ -0,0 +1,43 @@ +#ifndef HG_OCR_H +#define HG_OCR_H + +class HG_OCR +{ +public: + + enum PSM_TYPE + { + Orientation, + OCR + }; + + enum SAVE_MODE + { + PDF = 0x1, + TXT = 0x2 + }; + +public: + HG_OCR(); + + HG_OCR(PSM_TYPE type); + + ~HG_OCR(); + + void init(PSM_TYPE type); + + void init(const char* filename, PSM_TYPE type); + + int getOrientation(unsigned char* imgData, int width, int height, int channels, int step); + + bool getOrientation(unsigned char* imgData, int width, int height, int channels, int step, + int& orientation, int& direction, int& lineOrder, float& deskewAngle); +private: + + void init_orientation(const char *filename); + +private: + void* api; +}; + +#endif // HG_OCR_H diff --git a/huagao/huagaods.cpp b/huagao/huagaods.cpp index 72a81027..fd13664d 100644 --- a/huagao/huagaods.cpp +++ b/huagao/huagaods.cpp @@ -88,7 +88,7 @@ using namespace std::placeholders; TWPP_ENTRY_MFC(HuagaoDs) static constexpr const Identity srcIdent( - Version(3, 3, Language::English, Country::China, "v3.3.5.4"), + Version(3, 3, Language::English, Country::China, "v3.3.5.5"), DataGroup::Image, #ifdef MAKEHUAGAO "HUAGO", @@ -124,7 +124,7 @@ static constexpr const Identity srcIdent( #elif defined HANVON "HW-7000W Series", #else // ISG100 - "G200 Series",//���ݾɼ��� pm changed ��G300 Series + "G200 Series",//ݾɼ pm changed G300 Series #endif #elif defined(G400) // G200 @@ -165,7 +165,7 @@ static constexpr const Identity srcIdent( #ifdef UV "HUAGOSCAN G300UV TWAIN" #else - "HUAGOSCAN G200 TWAIN"// ���ݾɼ��� pm changed "HUAGOSCAN G300 TWAIN" + "HUAGOSCAN G200 TWAIN"// ݾɼ pm changed "HUAGOSCAN G300 TWAIN" #endif #elif defined HANVON @@ -209,7 +209,7 @@ static list resList = { 100.0,150.0,200.0,240.0,300.0,600.0 }; #endif // LANXUM -//����G200 G300��G400ֽ�ŷ��� +//G200 G300G400ֽŷ #ifdef G200 static list paperSizeList = { (UInt16)PaperSize::A3,(UInt16)PaperSize::A4,(UInt16)PaperSize::A5,(UInt16)PaperSize::A6, @@ -380,7 +380,7 @@ HuagaoDs::HuagaoDs() // //guiIndicator.reset(); // if (!m_memoryfalg) // return; - // MessageBox(NULL, L"�ڴ治��", L"��ʾ", MB_OK| MB_SYSTEMMODAL); + // MessageBox(NULL, L"ڴ治", L"ʾ", MB_OK| MB_SYSTEMMODAL); //})); } @@ -400,9 +400,9 @@ void HuagaoDs::showmsg(std::string caption, std::string text, int retcode) } if (!(m_scanparam->is_autodiscradblank_normal || m_scanparam->is_autodiscradblank_vince)) { - text += "\nɨ��ͳ����Ϣ��\n��ֽ���ţ�" + to_string(scanner->get_scannum()) + - "\nɨ�裨�ţ�" + to_string(imgread) + "\nɨ�����ţ�" + to_string(scanner->get_scannum() - imgread) + - "\n�ϴ���ҳ��" + to_string(scanner->get_imgTransfered()) + "\n�ϴ���ҳ��" + to_string(num - scanner->get_imgTransfered()); + text += "\nɨͳϢ\nֽţ" + to_string(scanner->get_scannum()) + + "\nɨ裨ţ" + to_string(imgread) + "\nɨţ" + to_string(scanner->get_scannum() - imgread) + + "\nϴҳ" + to_string(scanner->get_imgTransfered()) + "\nϴҳ" + to_string(num - scanner->get_imgTransfered()); scanner->set_lose_image_num(0); } } @@ -443,7 +443,7 @@ Result HuagaoDs::call(const Identity& origin, DataGroup dg, Dat dat, Msg msg, vo Result HuagaoDs::customDataGet(const Twpp::Identity& origin, Twpp::CustomData& data) { - //�ӱ���Ĭ�����õ��ļ�·����ȡ�ֽ����ϴ� + //ӱĬõļ·ȡֽϴ TCHAR szIniFile[MAX_PATH] = { 0 }; SHGetSpecialFolderPath(NULL, szIniFile, CSIDL_LOCAL_APPDATA, TRUE); @@ -471,7 +471,7 @@ Result HuagaoDs::customDataGet(const Twpp::Identity& origin, Twpp::CustomData& d Result HuagaoDs::customDataSet(const Twpp::Identity& origin, Twpp::CustomData& data) { GScanCap sc; - //���ֽ���תGscanCaps + //ֽתGscanCaps GscanJsonConfig js; std::string str; str.resize(data.size()); @@ -774,28 +774,28 @@ Twpp::Result HuagaoDs::deviceEventGet(const Twpp::Identity& origin, Twpp::Device return seqError(); } -//add------------------����jpgͼ��dpi--------------------------- +//add------------------jpgͼdpi--------------------------- void HuagaoDs::SetResoluton(const char* path, int resolution) { FILE* file = fopen(path, "rb+"); if (!file) return; - //��ȡ�ļ���С + //ȡļС int len = _filelength(_fileno(file)); char* buf = new char[len]; fread(buf, sizeof(char), len, file); char* pResolution = (char*)&resolution; - //����ʹ��ͼƬ�ܶȵ�λ + //ʹͼƬܶȵλ buf[0x0D] = 1; - //ˮƽ�ܶȣ�ˮƽ�ֱ��� + //ˮƽܶȣˮƽֱ buf[0x0E] = pResolution[1]; buf[0x0F] = pResolution[0]; - //��ֱ�ܶȣ���ֱ�ֱ��� + //ֱܶȣֱֱ buf[0x10] = pResolution[1]; buf[0x11] = pResolution[0]; fseek(file, 0, SEEK_SET); - //������д���ļ�������ԭʼ���ݣ����޸���Ч + //дļԭʼݣ޸Ч fwrite(buf, sizeof(char), len, file); fclose(file); delete[]buf; @@ -806,7 +806,7 @@ void HuagaoDs::dogear_callback(int indexpaper) CString text; text.Format(_T("74 %d"), indexpaper); //ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), text, NULL, SW_HIDE); - showmsg("��ʾ","��"+to_string(indexpaper)+"��⵽�۽ǣ�"); + showmsg("ʾ",""+to_string(indexpaper)+"⵽۽ǣ"); scanner->Stop_scan(); //scanner->reset(); scanner->ResetScanner(); @@ -816,11 +816,11 @@ void HuagaoDs::dogear_callback(int indexpaper) Result HuagaoDs::identityOpenDs(const Identity&) { hMutex = CreateMutex(NULL, FALSE, _T("LookitApp")); - if (GetLastError() == ERROR_ALREADY_EXISTS) { //����Ѿ�����ͬ����Mutex��õ��������. + if (GetLastError() == ERROR_ALREADY_EXISTS) { //ѾͬMutexõ. CloseHandle(hMutex); hMutex = NULL; //ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("202"), NULL, SW_HIDE); - showmsg("��ʾ", msgs[(UsbSupported)202]); + showmsg("ʾ", msgs[(UsbSupported)202]); return { ReturnCode::Failure, ConditionCode::CapBadOperation }; } Twain_config().GetOrSetPintfCapability(is_printfcapability, true); @@ -859,8 +859,8 @@ Result HuagaoDs::identityOpenDs(const Identity&) { if (vid == 0 || pid == 0) { //ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE); - //showmsg("��ʾ", msgs[(UsbSupported)201]); - ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("δ�ҵ�ɨ����!�����Դ����USB�������Ƿ��ͨ! ��ʾ"), NULL, SW_HIDE); + //showmsg("ʾ", msgs[(UsbSupported)201]); + ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("δҵɨ!ԴUSBǷͨ! ʾ"), NULL, SW_HIDE); if (hMutex) { CloseHandle(hMutex); hMutex = NULL; @@ -874,12 +874,12 @@ Result HuagaoDs::identityOpenDs(const Identity&) { CloseHandle(hMutex); hMutex = NULL; } - showmsg("��ʾ", msgs[(UsbSupported)81]); + showmsg("ʾ", msgs[(UsbSupported)81]); return seqError(); } if (!scanner->IsConnected()) { //ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), CString("201"), NULL, SW_HIDE); - showmsg("��ʾ", msgs[(UsbSupported)201]); + showmsg("ʾ", msgs[(UsbSupported)201]); if (hMutex) { CloseHandle(hMutex); hMutex = NULL; @@ -892,7 +892,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { auto dgcall = [&](int pagenum) { //ShellExecute(NULL, TEXT("open"), GetHidedlgPath(), text, NULL, SW_HIDE); - showmsg("��ʾ", "��" + to_string(pagenum) + "��⵽�۽ǣ�"); + showmsg("ʾ", "" + to_string(pagenum) + "⵽۽ǣ"); scanner->Stop_scan(); //scanner->reset(); scanner->ResetScanner(); @@ -1028,7 +1028,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { m_scanparam->enhance_color = (BYTE)Enchace_Color::Enhance_None; } else{ - m_scanparam->multi_output_red = 0;//�Dz�ɫģʽ�¶������������ + m_scanparam->multi_output_red = 0;//Dzɫģʽ¶ //if (m_scanparam->pixtype == (int)PixelType::BlackWhite) // m_scanparam->sharpen = SharpenBlur::Sharpen_None; @@ -1084,7 +1084,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllReset(msg, data, { PixelType::BlackWhite, PixelType::Gray }, m_scanparam->automaticcolortype, PixelType::Gray, m_scanparam->automaticcolortype, 1); }; - //add------------------jpeg�����ȼ�--------------------- + //add------------------jpegȼ--------------------- m_query[CapType::IJpegQuality] = msgSupportGetAllSetReset; m_caps[CapType::IJpegQuality] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapType::IJpegQuality), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1254,7 +1254,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { }; #ifndef G200 - scanner->Get_Scanner_PaperOn(); //���G300 G400 USBͨ�ŵ�һ���޷�read_bulk �𵽼���USB������ + scanner->Get_Scanner_PaperOn(); //G300 G400 USBͨŵһ޷read_bulk 𵽼USB #endif // !G200 @@ -1332,7 +1332,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { bool mech = data.currentItem(); m_scanparam->is_duplex = mech; if (!mech){ - m_scanparam->is_backrotate180 = 0;//���汳����ת180�㲻���� + m_scanparam->is_backrotate180 = 0;//汳ת180㲻 m_scanparam->is_switchfrontback = 0; m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = m_scanparam->en_fold = 0; } @@ -1481,7 +1481,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { // m_scanparam->en_fold = (BYTE)autocrop; // if ((UInt16)autocrop != 0){ // m_scanparam->is_duplex = 1; - // m_scanparam->autodescrew = 1;//�ϲ�����ʱ Ĭ���Զ���ƫ + // m_scanparam->autodescrew = 1;//ϲʱ ĬԶƫ // m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0; // } // return success(); @@ -1497,7 +1497,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { m_scanparam->en_fold = (Int32)autocrop; if ((UInt16)autocrop != 0) { m_scanparam->is_duplex = 1; - m_scanparam->autodescrew = 1;//�ϲ�����ʱ Ĭ���Զ���ƫ + m_scanparam->autodescrew = 1;//ϲʱ ĬԶƫ m_scanparam->is_autodiscradblank_normal = m_scanparam->is_autodiscradblank_vince = 0; } return success(); @@ -1537,7 +1537,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { }; /*costom caps*/ - //�����հ�ҳ��Ʊ + //հҳƱ m_query[(CapType)(CapTypeEx::TwEx_IAutoDiscardBlankVince)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IAutoDiscardBlankVince)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IAutoDiscardBlankVince), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1571,7 +1571,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { //return CapSupGetAllResetEx(msg, data, { FALSE,TRUE }, m_scanparam->is_backrotate180, Bool(false), m_scanparam->is_backrotate180 ? 1 : 0, 0); }; - //��ڿ� + //ڿ m_query[(CapType)(CapTypeEx::TwEx_IFillBackground)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IFillBackground)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IFillBackground), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1584,7 +1584,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { //return CapSupGetAllResetEx(msg, data, { FALSE,TRUE }, m_scanparam->fillbackground, Bool(true), m_scanparam->fillbackground ? 1 : 0, 1); }; - //�ü���ƫ������������ + //üƫ m_query[(CapType)(CapTypeEx::TwEx_CroporDesaskewIndent)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_CroporDesaskewIndent)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CroporDesaskewIndent), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1598,7 +1598,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return CapSupGetAllResetEx(msg, data, m_scanparam->indent, 5); }; - //�Զ��ü��������� + //Զü m_query[(CapType)(CapTypeEx::TwEx_CropNoise)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_CropNoise)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CropNoise), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1611,7 +1611,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->noise, 8); }; - //�Զ����к;�ƫ�Ķ�ֵ����ֵ + //Զк;ƫĶֵֵ m_query[(CapType)(CapTypeEx::TwEx_CroporDesaskewThreshold)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_CroporDesaskewThreshold)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_CroporDesaskewThreshold), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1624,7 +1624,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->AutoCrop_threshold, 40); }; - //�ڿ���䷽ʽ + //ڿ䷽ʽ m_query[(CapType)(CapTypeEx::TwEx_FillBackgroundMode)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_FillBackgroundMode)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_FillBackgroundMode), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1635,7 +1635,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->is_convex, Bool(true)); }; - //��� + // m_query[(CapType)(CapTypeEx::TwEx_IFillHole)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IFillHole)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IFillHole), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1661,7 +1661,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->fillhole.fillholeratio, 10); }; - //����Ż� + //Ż m_query[(CapType)(CapTypeEx::TwEx_IDetachNoise)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IDetachNoise)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IDetachNoise), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1689,7 +1689,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->detachnoise.detachnoise, 10); }; - //�������� + // m_query[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IMultiOutputRed)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IMultiOutputRed), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1699,13 +1699,13 @@ Result HuagaoDs::identityOpenDs(const Identity&) { m_scanparam->multi_output_red = mech; else return badValue(); - //m_scanparam->multi_output_red = 0;//�Dz�ɫ ����ʹ�ö������� + //m_scanparam->multi_output_red = 0;//Dzɫ ʹö return success(); } return CapSupGetAllResetEx(msg, data, m_scanparam->multi_output_red, false); //return CapSupGetAllResetEx(msg, data, { FALSE,TRUE }, m_scanparam->multi_output_red, FALSE, m_scanparam->multi_output_red ? 1 : 0, 0); }; - //���⿨���� + //⿨ m_query[(CapType)(CapTypeEx::TwEx_HsvCorrect)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_HsvCorrect)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_HsvCorrect), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1739,7 +1739,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return CapSupGetAllReset(msg, data, { Filter::Red,Filter::Green,Filter::Blue,Filter::None }, m_scanparam->filter, Filter::None, m_scanparam->filter, 3); }; - //��ɫ��ǿ + //ɫǿ m_query[(CapType)(CapTypeEx::TwEx_IEnhanceColor)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_IEnhanceColor)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_IEnhanceColor), msg == Msg::Set ? to_string((int)data.currentItem()) : ""); @@ -1780,7 +1780,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { //return CapSupGetAllResetEx(msg, data, { SharpenBlur::Sharpen_None,SharpenBlur::Sharpen_Normal,SharpenBlur::Sharpen_More,SharpenBlur::Sharpen_Blur,SharpenBlur::Sharpen_Blur_More }, m_scanparam->sharpen, SharpenBlur::Sharpen_None, m_scanparam->sharpen, 0); }; - /*���� �Աȶ� gamma range���� Range ����*/ + /* Աȶ gamma range Range */ m_query[CapType::IBrightness] = msgSupportGetAllSetReset; m_caps[CapType::IBrightness] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapType::IBrightness), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1862,7 +1862,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } }; - /*����ΪӲ��Э��*/ + /*ΪӲЭ*/ m_query[(CapType)(CapTypeEx::TwEx_ScrewDetectEnable)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_ScrewDetectEnable)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_ScrewDetectEnable), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1890,7 +1890,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return CapSupGetAllResetEx(msg, data, m_scanparam->hardwarecaps.skrewdetectlevel, (UInt32)3); //return oneValGetSet(msg,data,m_scanparam->hardwarecaps.skrewdetectlevel,3); }; - //װ����� + //װ m_query[(CapType)(CapTypeEx::TwEx_StableDetectEnable)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_StableDetectEnable)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_StableDetectEnable), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1903,7 +1903,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return CapSupGetAllResetEx(msg, data, m_scanparam->hardwarecaps.en_stapledetect, false); //return CapSupGetAllResetEx(msg, data, { FALSE,TRUE }, m_scanparam->hardwarecaps.en_stapledetect, FALSE, m_scanparam->hardwarecaps.en_stapledetect==0 ? 0 : 1, 0); }; - //�۽Ǽ�� + //۽Ǽ m_query[(CapType)(CapTypeEx::TwEx_DogEarDelection)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_DogEarDelection)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_DogEarDelection), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1914,7 +1914,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { } return CapSupGetAllResetEx(msg, data, m_scanparam->is_dogeardetection, FALSE); }; - //�۽Ǽ�����۶��㵽ʵ����������С���� + //۽Ǽ۶㵽ʵС m_query[(CapType)(CapTypeEx::TwEx_DogEarDistance)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_DogEarDistance)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_DogEarDistance), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1929,7 +1929,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { return CapSupGetAllResetEx(msg, data, m_scanparam->dogeardistance, 50); }; - //˫�ż�� ��ٷ���׼������������ ��Э���޸�Ϊbool�� ����Уʹ��bool���ͣ�����ʹ�ñ�׼twainЭ�� + //˫ż ٷ׼ Э޸Ϊbool Уʹboolͣʹñ׼twainЭ m_query[CapType::DoubleFeedDetection] = msgSupportGetAllSetReset; m_caps[CapType::DoubleFeedDetection] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapType::DoubleFeedDetection), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -1963,7 +1963,7 @@ Result HuagaoDs::identityOpenDs(const Identity&) { }; #ifdef G200 - //�͹���ģʽ + //͹ģʽ m_query[(CapType)(CapTypeEx::TwEx_LowPowerMode)] = msgSupportGetAllSetReset; m_caps[(CapType)(CapTypeEx::TwEx_LowPowerMode)] = [this](Msg msg, Capability& data)->Result { CapabilityPrintf(msg, enum2str(CapTypeEx::TwEx_LowPowerMode), msg == Msg::Set ? to_string((float)data.currentItem()) : ""); @@ -2071,11 +2071,11 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) { if (ret != -1) { int index = scanner->geterrorindex(); if (ret == 82) - showmsg("��ʾ", "�ڵ�" + to_string(index) + "ҳ��⵽�۽ǣ�ֹͣɨ�裡", ret); + showmsg("ʾ", "ڵ" + to_string(index) + "ҳ⵽۽ǣֹͣɨ裡", ret); else if(ret==75) - showmsg("��ʾ", "�ڵ�" + to_string(index) + "ҳ��⵽�ߴ粻����ֹͣɨ�裡", ret); + showmsg("ʾ", "ڵ" + to_string(index) + "ҳ⵽ߴ粻ֹͣɨ裡", ret); else - showmsg("��ʾ", msgs[(UsbSupported)ret], ret); + showmsg("ʾ", msgs[(UsbSupported)ret], ret); FileTools::writelog(log_ERROR, msgs[(UsbSupported)ret]); #ifndef G200 scanner->clear_hwerror(); @@ -2088,7 +2088,7 @@ Result HuagaoDs::pendingXfersEnd(const Identity&, PendingXfers& data) { int num = scanner->get_scannum() * (m_scanparam->is_duplex ? 2 : 1) * (m_scanparam->multi_output_red ? 2 : 1) / (m_scanparam->en_fold ? 2 : 1); if ((num - scanner->get_imgTransfered()) != 0) { - showmsg("��ʾ", msgs[LOSE_IMAGE]); + showmsg("ʾ", msgs[LOSE_IMAGE]); FileTools::writelog(log_ERROR, msgs[LOSE_IMAGE]); } @@ -2152,7 +2152,7 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) { #ifndef G200 while (!scanner->Get_Scanner_PaperOn()) { - if (MessageBox(NULL, L"��⵽��ֽ��������ֽ��", L"��ʾ", MB_YESNO | MB_SYSTEMMODAL) == IDNO) + if (MessageBox(NULL, L"⵽ֽֽ", L"ʾ", MB_YESNO | MB_SYSTEMMODAL) == IDNO) return seqError(); } #endif // !G200 @@ -2161,10 +2161,10 @@ Result HuagaoDs::userInterfaceEnable(const Identity&, UserInterface& ui) { scanner->open(vid, pid); if (!scanner->IsConnected()) { - MessageBox(NULL, L"USB�����쳣,������USB�����´�ɨ������", L"��ʾ", MB_OK | MB_SYSTEMMODAL); + MessageBox(NULL, L"USB쳣,USB´ɨ", L"ʾ", MB_OK | MB_SYSTEMMODAL); return seqError(); } - this_thread::sleep_for(chrono::milliseconds(100)); //ɨ��ǰ�����ӳ� ��ֹusb�����е���Ϣδ��ȡ��� ��ɨ����� + this_thread::sleep_for(chrono::milliseconds(100)); //ɨǰӳ ֹusbеϢδȡ ɨ auto ret = startScan(); //if (ret.status().condition() == Twpp::CC::NoMedia) // return ret; @@ -2337,8 +2337,8 @@ Result HuagaoDs::imageNativeXferGet(const Identity& id, ImageNativeXfer& data) { std::copy(bmpBegin(), bmpEnd(), data.data().data()); bmpData.reset(new std::vector); - //FileTools::write_log("�����ϴ�ͼƬ ===> Twain transfered num of " + to_string(++xtfer) + " images"); - FileTools::writelog(log_INFO, "�����ϴ�ͼƬ ===> Twain transfered num of " + to_string(++xtfer) + " images"); + //FileTools::write_log("ϴͼƬ ===> Twain transfered num of " + to_string(++xtfer) + " images"); + FileTools::writelog(log_INFO, "ϴͼƬ ===> Twain transfered num of " + to_string(++xtfer) + " images"); return { ReturnCode::XferDone, ConditionCode::Success }; } @@ -2474,11 +2474,11 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) while (!scanner->Get_Scanner_PaperOn()) { if (scanner->get_ErrorCode() == SLEEPING) { - showmsg("��ʾ", msgs[(UsbSupported)81]); + showmsg("ʾ", msgs[(UsbSupported)81]); scanner->Set_ErrorCode(0); return seqError(); } - if (MessageBox(NULL, L"��⵽��ֽ��������ֽ��", L"��ʾ", MB_YESNO | MB_SYSTEMMODAL) == IDNO) { + if (MessageBox(NULL, L"⵽ֽֽ", L"ʾ", MB_YESNO | MB_SYSTEMMODAL) == IDNO) { m_pendingXfers = 0; return seqError(); } @@ -2489,7 +2489,7 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) saveGscanCapSetting(); if (!scanner->IsConnected()) { - MessageBox(NULL, L"USB�����쳣,������USB�����´�ɨ������", L"��ʾ", MB_OK | MB_SYSTEMMODAL); + MessageBox(NULL, L"USB쳣,USB´ɨ", L"ʾ", MB_OK | MB_SYSTEMMODAL); return seqError(); } @@ -2523,7 +2523,7 @@ Twpp::Result HuagaoDs::showTwainUI(Twpp::UserInterface& ui, bool bUiOnly) TwGlue glueUiOnly = { confirmFunction, cancelFunction }; std::string serialnum = scanner->GetSerialNum(); std::string hardwareversion = scanner->GetFWVersion(); - guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "ȷ��" : "ɨ��", hardwareversion, serialnum)); + guiTwain.reset(new CTwainUI(bUiOnly ? glueUiOnly : glue, *m_scanparam, bUiOnly ? "ȷ" : "ɨ", hardwareversion, serialnum)); guiTwain->Create(IDD_TWAINUI, parent); CRect newRect; ::GetWindowRect(static_cast(ui.parent().raw()), &newRect); @@ -2645,7 +2645,7 @@ Twpp::Result HuagaoDs::startScan() { Twain_config config; if (config.getrollermsgdate() < chrono::duration_cast>>(chrono::system_clock::now().time_since_epoch()).count()){ - hgmsg(_T("ֽ�ִ�ֽ�����ѳ������ʹ�÷�Χ��ɨ������д�ֽʧ�ܡ���б������ŵ��쳣Ƶ�ο��ܻ��������࣬��ע�⼰ʱ��ࡢ����ϵ�豸��Ӧ�̹����滻ֽ�֣�")); + hgmsg(_T("ִֽֽѳʹ÷Χɨдֽʧܡбŵ쳣Ƶοܻ࣬ע⼰ʱࡢϵ豸Ӧ̹滻ֽ֣")); config.setrollermsgdata(chrono::duration_cast>>(chrono::system_clock::now().time_since_epoch()).count()); } } @@ -2658,7 +2658,7 @@ Twpp::Result HuagaoDs::startScan() auto stopFunc = [this]() { if (scanner.get()) scanner->Stop_scan(); - //guiIndicator.reset();//ȡ��ɨ�� �رս���ָʾ�� + //guiIndicator.reset();//ȡɨ رսָʾ if (guiTwain.get()) { ((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true); } @@ -2695,11 +2695,11 @@ Twpp::Result HuagaoDs::startScan() //ShellExecute(guiTwain ? guiTwain->m_hWnd : NULL, TEXT("open"), GetHidedlgPath(), str, NULL, SW_HIDE); int index = scanner->geterrorindex(); if (retCode == 82) - showmsg("��ʾ", "�ڵ�" + to_string(index) + "ҳ��⵽�۽ǣ�ֹͣɨ�裡", retCode); + showmsg("ʾ", "ڵ" + to_string(index) + "ҳ⵽۽ǣֹͣɨ裡", retCode); else if (retCode == 75) - showmsg("��ʾ", "�ڵ�" + to_string(index) + "ҳ��⵽�ߴ粻����ֹͣɨ�裡", retCode); + showmsg("ʾ", "ڵ" + to_string(index) + "ҳ⵽ߴ粻ֹͣɨ裡", retCode); else - showmsg("��ʾ", msgs[(UsbSupported)retCode], retCode); + showmsg("ʾ", msgs[(UsbSupported)retCode], retCode); FileTools::writelog(log_ERROR, msgs[(UsbSupported)retCode]); #ifndef G200 scanner->clear_hwerror(); @@ -2710,7 +2710,7 @@ Twpp::Result HuagaoDs::startScan() ((CTwainUI*)(guiTwain.get()))->EnableID_OKorID_Cancel(true); } if (retCode == 2) - return { ReturnCode::Failure, ConditionCode::NoMedia };//��ֽ + return { ReturnCode::Failure, ConditionCode::NoMedia };//ֽ return seqError(); } diff --git a/huagao/huagaotwds.rc b/huagao/huagaotwds.rc index f98e80197b89d8f2a3658f9796ab45ac877e3375..bd52a839b05c1d2b84fc1da4344391bf82f7ff9a 100644 GIT binary patch delta 58 zcmV-A0LA~T{sOH20iub^rhX diff --git a/huagao/stdafx.h b/huagao/stdafx.h index 3394b55d232ed4de73cc47e0080e827705885ea6..4a5b8ba013c52029a95e29969528ba4d85e6f537 100644 GIT binary patch delta 60 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

        s+qGxlNp2bnH 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�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

        +&mn%pL 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 >5`$ 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

      2. q;{?6*ru{lu$szhl+h@5t+Gs+ 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%0DB}s$HTYt||ej-|uEI_<2 znLcffxX(#dKPZj&z(M#_usCjP*f5PSM5}+( zocYtM`=6J(b9vE)lq{?5%!Lc*&G+y8D>Tcc^OtHXC?7XPZ{q)`!zA-wKB=IolKh^H zw54g1(Nmb0c`BVulZ=Z_9v_{oH!Zzk8qxHJq&k+Wj~Gp(74jt&!LMZtSI2UjT7cAY z&b0Zrq&kPfr25*Jqo>GpaJMsO8hu4Bfj*Cn(3_A#{9cv{9BJ;=6rttOQT~j7Tv%T5`a7&`=n+L(-&}fh;=BvT^>6rP zk4ewJG!pIq0Oeka&fpEZaO(Jl`r6I15#l*p)^q8=FP%O0N;bmtZ(CG$`RwXNQ~ULu zI(y!Ya~98-3GLIjPrpHZ2lVUHcj{tVXsTFdq^0Igub$Os)_*X+nR9PkaQn1H|H(XW zTU5P}SKpCk_`<1I&R=-T)X42+BWG8a4V%xsO`kh`-t0NE7f&5Ea@x3I6Q>QIId}fl zIjqw2=gq!xIyb8R#eHu4_wR90^^Do`|HC)-AI?#$$VvRXn`TRU{oBLDwS4*HzGdYz zZ&*-v5iol}nS38mR#A4H1`sX*=F1}UWgu5CD)T;X!m{%7`kPYvmYt(H|NB|>>wlij z%TqhEn16D;F~z4Jhff#$M*ekIOM^8BE(kT;EE9Wj07dpG(lBpzyhJbcmoczBcfVfc;tVLM&e zE*I8t6gCVkE$3*%5aT`zd0&GOfzlrJS;(7IXyaY!vyeB(g)MMlQ<3mDYtEZ|mhWx$ zS;!mALP3_~Jj7?*2TW2B&u5sASR`j@E<1dd@9p$i$eW4&L4l;0?X!^gI80LHdq446 z$oqv0d)|fZc42#5*oG20v($0rGsczALf$tSdE5Xwf7@pvuN3`BQsjGOKI1GKb*4&l z8Sk@vZ?exq-jVDTxII!F<+G4C3MMJ?y)ixuc|BN*ZqZz3_$=R><+G5t=p=Thn&LK} zg}hxbNs;gE_F2d)XC<1Wxh(KmzE|zDkT?BgV^_=fX8J7TJqSCKnUU{3@+l^l zeD5@$g}ifISU(pw%7u+_VMS$_bhHLjeU|TC@3WBi;%UZvG2i=@&qCgrr<>I|-#go9 zA@8~~OfLD}4L%Eb^IX_M7q-%ct#VD4_x%lG#BEabJ}ct&?}zwJI_Johvy z^1THSd*$oIzkj9hwSy*0V`j9h#c@_L_R zo=492`uZ&7Rl_7jzPHq8#Os6YS94kFvwZI^pD`=WHI{m2h0j9X$1q8e?`8EhEaV;K zvwW}Eg`MoePIF=BxG)S;noG#L$b}7cVG$QL!G+CoVRKyAsPnK`Ywg$gEZMZQ<>vyiuX zu(9JZHhjj|@L9-9UW83YQ~cFuA+PablOo^S=ChEuV2JS^>h5jvS-#ikGx~femMhIA z&u1ZT#-+vr&YbocQec?L1u5XOkhjH!HM+1JE^Ma@+vCFay08`(*6PAKT$nf9ltx?m zEZ-|~VWlpt%!T!KVSQcLU>7#Tg^h7x<6YQP7k0f1o8!V3xUl6eY^4j^Hj=Fz?bqEa z8f93%SK>2d*l6r*+PX7+7V=KL%*H#zXCZH(3mfdh8ZH-GtmK?C#xPbtpM|{q2$nm| zxzJ}J?{1i+$oKB^84|>WwY#vKu{K_w&sZy5SeXmU8E>9;>F$m98S=nqA@3hB@gdCj zKJ*!*c!Ej6DE3*%TRD+49leiTK4T5=S;)I*lIN9aF10=jd1tT#k`(#gSw3S;c40$Y z*o-KrM4EG*&nVYtA@9#um}l1Wy*GUp@;aC@H!DrMNCMoj089obnJ?C;tskv19jP=rIA@5J~%=2XV-Wxs(dFL)L zDe}GkJ_~u5xUgX^Y@7?51fqiHH)G@AdXs$U9=G4Lj0jA@4XBcA^VA z(}kVw!iKo8;V!Hv;^QMNt=ea_xX(h~&+af!9Orva`z+)gWCBWxd@q|pFO1dHXN+AJ z)|bu=X}keG3wdi{2Q};wpP{KPgsVDFbnW z9Xe;htm)(*3>zjkQ9d_<8qr*jE}FSWE~(j6u9GIydD9ol5+UKkc?rUt>9@;| zC8UM>?zfr37PY2;Ui~OOa08x zea}Bd&~5iN5A~ESHfvnrdK;@UjBQY22u_A zp5YZG^kas{@KbFjZEPQP)ja$@N^_CWvNAsIMY)H3JVdV@((OLb7Ma|GYBt z>%qSw{^jvcK94@~$i=`VzuqzC;%K}j9xfVR<;5cf6XMaliA@rtc3aW4&+m{A*Y9mv zBSAGK-r@@zvY;y(t52`JNa7uF&xuu8tYpR-;Q46_V&VGc?k|SxC2~AmpS+_x7%6#C zzLQZNzx7aCQ$Tj|T)4O5)z8eXPO_^r+0`X0$Sx7?7@vqVPDn)8O^k>0#@lKqBCQh= zYwzMfeqtiLY`ol+y%dkGtBfvNoF5N2R<4j3)fdP++PoDnRi9;UC;OgLQa4l8?ci}* z-)%WI_k#Y7$sgr%FR6CQiG_E>!v!`5UpK!P-lpmJ(WAoUPeW^KI?4)HJfW-=_B~}g zau(AHn{yT)S6j0qM_OcaPW6#5hBrxKx!+BCzmZL`$hO*=ZC>>viMKe9!eh~m&AF5s z3vY}^HpUW5xtYY;YPsq73i)EIlUMtUgnElV&z){NqVt{ZO25;cwKcoE#S?04c6y61 zk4HKxBdyiLQ?7G4z(?+Zj;Ze+~wv@eRh>T;17i%&sfWG_ah zZ19i*B2&b3>tH;xAr@ILU)M|ci{TcM@gAdiw59gBtXPy4p`|k1SeUq%;CN(9;p35( zcyv`F=fPNbZ#=Tnd|$5L_q-V1?Wd0HuHBjyi|md^cUMNY)La^u$a~^N{fp0tuCG2d z5xBcV;MQo;tC4i^=-%4ra$?cF@$jD7Mh4iP<{u`js9y3!xfH*ANhkHprc>*2)w;RR&f>8fv#6{O#UYcy&CoI+hS;xI^FUk4f?Q zZg#EIqGoXFeyd9leY4FAGTdohZB2t$-6tN|8;|aZXZ7!P#tQY^D?Ri$Z0?yHM6rh| zC>||&QM|&u{*Cds{k7a*&ud$j*0MHreKFr7LuHR-M&Be?Gb!VdqSRvE^<{jwWVG94 zv^yy;oib`bSG9^=l75#-zbh#(H0Y$Yw%UJSSUsafb6vvdt=uZ(Q2IV&!aTjHVqdDYURC+VHGs)&#aDk55% zx2y0!J|1aBc)o`o z`cy`@6((X_O@uen2_5Jc?P)!ph-@INgRpk4yH+nsL|37Ou3?m{=lVvjJDFXQh^%Df ztmgVU(n$KfR=k(Q!|N-<>lPQqBWo%nt3~BoRT*7bozuUu`MBf_+*I-sxwCN5i=Mf& z)D%ZwuWcE8c*=UaOsjUui5p06la>xD>s_DUZIV%&$*3(U4|E*f{BD)>ttNeIvQpC* zWmgYDT;)_>XxH}7+IzG}E-faPmgGO=w$k+Vru3nYWN504?5qAfVql#P89M>O9Xf;= z?Wn>{HH#9_?R4)>x_>uay_fFqpsSs7*FywHBD{m^ySTo`zwU-l4~9f#bPvNIyt^{I zi(wGiSsB@(!{BsjlEnq_=ynFDh7=`bOA`;5q>l+54?PdB8`8T`-et(3{yg$Ny+41i z1I#JANF8+Bc25QN&*hr#KvTLN-Bdf!T>b`^(Zf@1CyHP|FC?#hsfnG|5Bq8+N!uon zpNU9|o2I@R%rxBXhdJG=ARcL{jO>+Z*FyVO7uVM8<_$hn$24tox90W1bvbQ?)%Gqs zy!ADG{#~l=T~v5w;|qXU@6#Za%mx#y;h+uI8fLt+`^v-f3Dgpq=`S#eSCZQK;d;; z5$e)7B6D2<(!+kQA}FmywDK@zbI71?U;7wKZi~ely)#Sp_&c(yGZ{`YmTH8TDYYdT)v+MrsfN+mgmx_Z{(Y*3 z@5L^Fwpbb6&9(5JSa=uLBD-UeUGeCySaf?;PCUGwdTz6u2=1w^D#tbvvu~CddsBY` z^NEuK`7f}^(GZOrkF?ty3Dh8BruI>YD_I5IMvjV`ZF{iSJNyE4F>MPhdLw5rZyrzUA`qE)n(|(018AtXsWKuvD>gR&s`+irOgfxv2WG3FkgFk)kns|JzkWS zXVQqRtE=lx`t*HJx-439pitgXiicuhaW}Pi6$fTcPHj6wqO19*i{oD8FO#~uI55;q zh8ae7M&n%iEPqXJxF}1P*=}90R{ApgRX>--CuHpI=HrZX&zsn36qvc>`i8?RSt%1J zO2HW>@&I|i4@Gw`+{l11ja*Dy&~>4Bgw?VmR@_`5hCw^VQ({1EnQs5n_f!2{>Q!TR zDGl@*lDA9(qh*0Wy0TmcO1T{<$Q9(AThpZ@x-PEwiKeoT4rQk8OWuyM@AqsOQ(BN0d@x`7=w0qH}uwty6rS|EbZ?yAQnQZfqDQOX+B)xJvG%r@VndqkSJ zt!VK%@n|`ct&Ay9%7W4ZUIH(I%f7>n@3L5UXLCh7QqF}kE|e0f2fPGc1aF5sIVzEZ zb0d)w;|Ro^Rv;n|?`>Jm0D6pnUjG+p-~Z%f>AFyy{3T_PnCut^jJ z#(56MCtaRI>*OxhnVi=pbJb#!n$TSxYHK7H@y?|U)+8HMETks1HGh28zG}7PvfAXb zIw?OVAWO4V<#I&QApLbg&YKVv^9{|%+C{;iVob+|M5K=K*$N-1t+ zQzEi_f`8;RA+T2Dl*hxHY`mg4kwi_}WbYSkY}I4Ze&e+jtA->ZTWmdxG${2)rgS2_ z#b#E*A(KhOo@te4yV+)o?O?NwhZTFX%`zvhhgq@cGA)#i>bIrvcx2fGTYhwl%>@11 zX)ihDRWqt)1WGSTL^iox#lq1f8P#rM0I)V5D~;nipN=VynU(Ys9UrGAQaz5?G1{J= zfeZ=}WK~DFu1hsEmQdG?qTWY3`u|$fS;6J6@G8G{Q6as}L&`4{hElh~Vx13Bu=(DV zCBCeBm>o4|+Jn&2j0d4B2D2$|4!x+zVDsY2k`Hl&nQ5&jXFI7sD`zn}OU{BOXJJWx zM%gU-SRk>Tbh)BpZSf>@>9 zu+B@Ym1ox}xZciS&Tl25SA9zDGZNjaKCbo|iR4umytqQ%G$U;*?JOMX#S_9}kyW)d zs}QGln08gT`QkL(1HlqQB$pyC?YR zfU&WXfK+t}SS|xD)dR8cvP5Dkbwb8p4@~SV<5${tC`u%z{EK+Y1M$ZHi+IaiyttNI zskz>LbbPJUBDQuif13;9E2OO03i%dK$lq9Gb3D4aa;@ZjH`c1nu@z&WL`_IgEFs_G zYvpe&x>=S9nR_d3QxwEjjFJe^&CHK@*wvQs;S$bLB2#mj9l(SSA^b5Jbf0Sp+cZm( zl4nB7OK>@_W0E9%x9cWtedua$MnY)L$AZE}lkj#e|aqOaV^QBtlL_m#xgO5j9O z;E=#NmtheMtk8+*O4|}>|E{%Ia+lc_%}K14J4;0~H{*+ioJ2zE?;`8!c_LaU^S=SH z;KnFM-trhjzl@=ul$wj4b!{Rw|0vVRkemb=*b?I54P>;@7QxuA!v}`^*V`dRPy zZdZS9eVx5M;<%e2&T4y)#Bps&9H(#+$IbFXYZPi98ZUyd>*u9SqA1Hx$T5$alJdKV zXd9o$ex7b0kbTABnRC<40cBc|)V@TvwyC9-Jy0u#F`R9>ZURa-6qtPlC!Iss#g=v5 z+>mZ4kbOlh4my%cE4f(t{#m<|wC!|qfaX%vP1TleHC?u~?Ub(DX}WG_@^27UL^X}| zIHK!!v_o={_mnXJb|l4*>(i<(XCG~Oi%;*oz4zyC5hEs+m7GRWk-Divkyv=UtWVC| zz;xXvo<8k%8W6y88MGN}w=<_mEi65d3F1ptgdo^vCkdCfq#F+!ZH8QG5UX50TaY@^ zIy*^`)J(*c(*)3xI4CfOEdGsPn%+VpXW+vc+&~g%!^lb7Y6K&Sp9K&Q7i(N3{SLrAc+l5u_17kU3 zdLuv>J}N-O;%mAqZM!7qe8v#jS|#tZvNhtwWV~sga^xejmrXKQXZv+e%UVb?F;IYu_(B4Efz5(^o6VKuyZ; z`Nkt6ZVqwIXR=y5jHBWeJ&X_WvX8FZ%R7nMP$sD_6R~UyfwO zPH7HS<>1Sj9n)%9inZ&44D%*q326&w^I&!XVRq>+-Bft)_Jv0U22fa3iExj?bHn=< z%1H~c&JFKf$Y`RQXr+MDllK1<-PVLS-!Xf9ZX7#Nnhl^w=6RH{n&}JHt7@7&9Q`1D zsrrhhms8#h;vr-C>5J6F!#0hkFHgs4dKm~^?WXNAKekIdbHbQ>Rn-bHPN#e4B0*|v zaIfm}ZEcfm#ruS8w8~gm6)#&)b zdWp1e=Wvh1{hSB65=P<|bFA~M%>TBV3gzY7{PgYn+lJo}qLBSutZP12@*(1Nl7$!x z2*gqluG6%VYb!A##F)CBAR$+Cl+lt$%$#z~*?y5V>rkyyn*1BTzjvssd7rxXNJ%Ur z_a1Fm-?H|5ad4quYx?P$mb&?S12^wC%T>}M?&hC4^v!R|bn~0!<~O;U7pWMyc~m>U z-Nk95)Ni}uZo%0TJON7`oT@!_i;O9CM9Cl`GHNh&GR5ko-%t;echZAq<;yTdGp64x z>BS+B^qZ5Fqz{<**s5?S=L~#&Wxlql1Ny$AjPfR98JnbxO{R=Z$v>zVFEOz4fvN9G~ z9*-`MsdWMeQG1IyzLR*+^Iome0WnP+Fb(}mL)~PPSU^(sZ{39gNvLEMPly3rLw5$fUbDk&utWk@s^zw34&FQ2h>!i* zg->>4`M~Kf8(-A-_*xu`?q&t42=BiAXx4y=$nINS!Irm7WUYi^s^mN;mQY7PeFh3I z0Oq<178Rm#b4{EmigO-pUY6`boswJWqSXC`JG4q{{D6U5i ziGtPYY9yh0f7+-T8o0k`dv>&lf}jjIhd7QtD$wNj0PVyJC37FMFFB{Y^$d+S>Hs~*#=!`h3i z8S=Zv(iK>0vK>)-IF2F8K~}H@G6;Mv=bu>HRtw~|2r_FjApTDAxk-&hxt?-?r?E7H)Kd*)fJw5=ja{Ct6z86O zRx*%dThQ}1_+%D7ES2FMtYm=-$ZBZkK?cnwWBZv^+_c}uWRuzvcd`gfCde4hWS{G7 zMrinZ#fRAV8t|91Nb&S`mXxwoA{R!YJ>v8oOeF5#F4rFr_#-<>+FWSL;vi}kM6 zwlM7_%MdA@J&l#rJbUOYT;fs}Ze;b}Mt&}|NL1wQNI)LPXoRCAi(4(KVKHX5ltm?x z+Oc3l+igq6%(lxltx6Mi*W7ArEDsmFlu5`q1#qpL<-}ZbRme#$kTzA{rV>sM17=R{ zb+35T1{w%cRA6Y71(Uf>CfS}ucvo7oJtTAHQ)ySO<0ebn`y)fzReCLD#*$XmhE7>6 z#d6BFE}&PqhE8qvf(`9L|C0?J^xyIuJyIt7E%kd$xz6cX66Ouro|OB)^PD*f$*Spc?a~b~_mMuK zXN2kYo!Xk!UNui%$yU>@^;tY*HIew~3ub+AMZ7u3E23KvjnDDIfQqm%grq!;Fhy(**e>h?s=0`Nb(4O0BLA--66dWpg+EmahurLH53Vj*hyF-{$lp|!vGayai# z*RI@89R6IT7$6{5BGiHEfMV9Bf95=`lep^hOKI=6s$&YpIZR_NVWp66=Fd%Li zw6B~qraco#FYOl9Q=gpf$d;4E*1#&3vpNykfh-lp+U-4X4Bv6Ex?A&4rOBFXOLh>= zy&VFBf*gO>4!+mpEi=(3H32s@*NT4-eL+;GGxM0rNjFzft?LDY{$pR&mRf?L?rf(aOawQNniG?$@VnWaF`#&{gES625%A4l2$k zbgW>0X%X{_KbTTx8paX*DXSe(r1`>oB*}xOn_0$ai&XHv8i8ZF(j}2#3+fXMsYVt7 zxyLRH^0o}q3+;y-ho#9^7+l2Er?s1s$I7>88677+Q|0(fJtFgw8P!H!Zl}O}#FVx> zwXsx>C)pSHgNPZrEH%f|9u=oIHp#5jS5hpCtD#Nag`pmdDQzRY2Wu9YcEPyD9+`Hz zI_F-y&^b|f4C|l2^cAbouo-zvBS#sd?3^{#YMY9K4BxOQ{#Ztl*jVo`E6^=_i-2`H$kO;z~CH$mS{tos*NiheyWmAsm!&&uCNFxTN&x7IZh-Mo-4iNDD65`c6Z9* zTQ50z>=ogPA1K0YC(=(gGp%R=CMEN=mny)Ta)(KY9^6ajze%}6Qu3!bTrW&q8X9iP zx3qqVy!v7k0*uoXulfXY%Yn&&7;6y|Tb`Y+h%FX;Ii%ji4R1tGXk_w~1rMxCRZDON zf%2f?n74|U2kzww3T-+mQ$0J}aT{gsqs&j+1;sr~o;We@Ln#}dIwa>YHp#{j;*ssTC)>gbRn9HRvqPKVo8TLb8pIK&szLHLmPVUB zx91+KIfQ@Lr=NGjIRuTN)EdWmKE$||NJZ4P!U1o&{9dShJsi&ubEHRqGIlp4cQUip zjDxl<@}{eEaJ?9~<$+3aS)Y7RbJ6Ee1LHuSL+z?&y-qS*XEI!u9Hbd?de`L&t&#NZ z`LYjb7!g>QfHLe)O2nbk?k_UQiyogTFLZx_iQlw;Pw(!Nf@7vWO?c=-HZq7AuYq~O zAl@XVWhW>^BbQjt&7AGSMq@MIXvY#k4YS^nW=}a>6NXcD9YfA}L1G#7pNluc)Oj42 z1f8~Juoph`hUS*?bCxsCfQvHEh>?{%b0<2QKVzu-avO@)mI_@~)y+;StSmC)mQ%0I zE}h)pGMzUzO;vW)c~zaFNDlQ@-k`_2dSM@SwZT5T*~Y=e za+9qCaZ)!c`4~Oe-^j>bUp6x0n%ZEK^r)>_=~ef_HjRE7<513B$w9Kkf=_P{ppTo? zd)2d16EZmU7l}BSB?BkJQiO`UMVE-GY*B$#6Vn>a>a9IcZ>z+^Xzm%7G?#L8h)xft zsXl@KxL6S~Oh>aUYK3f{h?UPEP`y{_Z*^J`M(=lUuqmP*Mdy_LsFJr;25wbB( zod}3g&n*T;GH!n@>%EwVEfsb?{*h;|H$ zcHGTDe}|j~A%|NlWOKZO<6m(}!tU2r5pEw8ZYNHpJr>zcoM>A`w4GOA;GXshZ-3h& z>i-sM>SiKSs3~x8#kk4ivOB2K87$3G#i6q78(L|kdVke%u~@}i!^tt29D5WCx@dHpne-QnAR8FuR6RV*)p zDUv_M@{XT29VM*JZMs!%QwNrvHMg66(hhoDt-jk*`!MT@#om{6${x;f%PJ{pl__ae@_tHU ze5&eDa)_-)$!Dq#CDt@~2;(WM%!Guxhp3k9Dqd9kjChH7pX)7tzoJlP0;{okC9!)1 zhuz6Cop#F)W7@5hW?5;PWo2@{pmqmXW!m7khvL3owGA~6IJteS#;8F55 zs4w{Nh|^F^{d?3ox`Z8gY9^~`Lmo2~Q-cf~^P1t9`nJT4(I7R2H)#$h&60>VH0_J8 zyNRT(S0foGMD>;GJXM%Do?F9y$_g8JDh+{+q?hL(8th#mUpBfehIum)8y>&Bf~q4h zYFLRw)D3iic|4Od4;PE2O`oH*TWg*<)ng4~-gCK&VZ&x@+{yF~`$;AB#&~)^_4Is^ z2FbH0oN22sn5}XV>#)8olpb;_5mu6vN|gSbTT0VOzKUH-3N2hNODM*XQ_@uwqiU|P zcSgVR(2nRzGNNtWwPO0m56LrbZs}R2e~YU@$>z&bpW?=rp?n!v>f&Zg^Q)kb`;@xo zOXyozZJeCMTFK7lj;6TI9^M}j(8YTs)TL^oTFa}>lSj7w8z@Ss*W3hE%Z<4R>$trr z-7DULX+FfqBPdn8iWKK%-RotTHeW)hK1_>9)iiolWa?)2p;n`~p{By=*{hDA|dm+Ga!la-%Vaow|0LePKiZJA0lJtocLuPx`5YjUek_Wu(mHB3VVsZ0zkW7lL|;FSf}=!X+1j#VfX%@2HLE zYL2%ZEdx-#$(1G7s)1y@9S$Sy(7IU0xx}yoO1?{t?Du~?z%Vh%?DY=kk_T-( zgEZuGy(DuvnQP7e#frdv+BvymuN1AtxxpA)u}1@xl{v!i9<>p#Kr&5l+-2&-Uxtw}0f;}cTX5sxj z>45HxNqFm$qaboVu#x!9y}Oc<*a?Zvp}VG%LES3F%lMRH31Dl!R{Ft-47nze%r)%} zcc1negI79q$uSZjOmc1jo6%Zbat)F1az$cDOzqm?elwdfyo}!T-$mg!n!nomPpq@x zYKz9#O553rmL$^pASaR5>^aG{j~QIi@<0taJHkA({87e0mj{fzZrdL&fy$bS*~%u2 z1;zi0mw7$ablomPjc%7VcHN#>D=j?H3{@`f4qlX=mCJUb+n%=HGgPO8=(dx}s=DcE zOClkm6XH5SC`u}2zMNz4Z+1nE&7rig0G@N~EW~ z<c6UBP+U<^h)H&CAfU^tRC2`$?hrI^3n7~0gJFO-H0v;xqGtK*Pcd`{JLwxLG zF>P|vMI!Gc)LGRigS{H>O(6O{JGTi$!=^vePKP$iyxAxn%*)j=_eqSx<;5a~QzcNv zy@8zgy2sh)S;KL93AoJYPT9QDmK~`0fVd|rx#Sz-or4XvT5UslB-58egsuu2;#;^I zb-i%LLfkHlyM?oy67nw$@h)Mhysn6}E2-G_loU?6{GheFdSIA#`LnUwZJV4p&i{uv zuHlK3I+P2ZsY~}+8EalC+>`RlX}2=nUB;v9;ckbFaeTXN3-WiHZSr65>fmfsx?fmM z7wVA1uE+b!<)cq*W9qwleNixmVGnb$~solW5yNN zI2H@L!TYRS(rvAIU+lzk1iTH0pltcIi{;pJv%}lW(Ue+&TjgoNwpg^0!g#2P*Puii z^~|^pKi*h$6M?w#B3>{eRYZ8uq`m@4`!a=v8!EzW9OO}0q`rcO7$S0}r*Fw>%f@|< zw}VDnvm={hk!74gRqzr=+@x@(r6V@cxX$WSgwah7q?T1M?BlBWRWRtyYvb12E+qT>EasFPhkUjj>FZaq}N-TFpe?N-J~NenYc0mddd;IWchP9EhU z{nUdxhiZVr#IxipanqUs+0Se?=N)dE$<8gj>$6OZsrTxT$?i`dU)U$fd&@6M7%xEQ zq$Qq%TlX^6+7pxW@~HoVk)10GikhE0)Dn<92m2NAK7Bx-ZawZBt(VSD%sr z_`!SpqF|;|tc(?Fk&N{RusHBbK0^T_j@>MvQHx@{OExI7{aNm0s;C&Lfs*EF+EjB( zr)Qrz!;;@+(4X7t^pb$yow_lv@W}!;$-TC+3D^66;Z*!nWT@cKC%?a0vue#S=ox{4W}w2u69-B_=1H2 zvM=~$uX_C)6%5)*f8up1ed;GtEm58UbPwYd@GD&Y(2?Ir>*d$rIfZ$l_D<1sZyAr;vFl8>ARZOGO%d~9j+a<@AB(#9sJasSGX!$ zG#TH`J*cO*NkznSI;bX#%PYsgax#^YttL!dj@#WmlXv!FemzmV+(oNwrA@a}JLkBI z56x>Mvx=CVxG&Q{1Os3Q&jsWT~E_==VazTr@ z6rdzd+QpE4D2ifl zt8w+!*GKm?1|S3{hu~Dvtswf_99@2^v%bo}KVXthGY3q`vC_rKe}8|eIo+d37YJLCFg2(1H8LW!3#ez{Fp3;Ras*4ky&<_`bUoH z@pzQ>Y)sGFMA0ud)U>2|Ne8O3d2uZUCVgW9yUq`G8*ggI-n>1TIa`|T|D0~PN46e%a~mau7csBp6xu1i zWwkZj>_yCB%^~HSe|4i>waZ*yWj3$0Lr}GY%PT`LmCI@9l0J-T&5eO=S|QpaTk9Ls zmrCH8nyrWB=9Rt4(@2zj4^ybrrSKtnGn>vZH*eC4!{{vUr>H71@2Lp%i@c~J9vzqKu<8%V8dVK1jP( zde6MR1wS@^fGn%W*aG^?Lx-)^#Jqssz&_}MpqDN`!lowOg);ju?^ zIcqh~mq=Ujm}@&NByG3dwOaCz3@eqp?Y`XQDSl_XvFE*_K0n4kD=$&{x-6FDH76pL z1ZjK(p0MNtdfuCQM?XTK>4uZmn3S=*orWCOO4 zN)-=tXg$DW6>Koi6YrRi%6xd#2|c`c@4uR+cHcq%-8aQjAb@8L2K@< zDUy2C&_+eR5|wiOxwl5o5bo*kj!liPrE@=UN2cO0EN|tvVyF3OynIq_3Y4^(fRwKS z0js2|2UBT^UTtfMW}R3&Q0_#OH=CP?aEWQB=b?Oo0{LJVl2nq_XQfL0P6o}kTstwS z3!%_0r;00W6-#`_m`=fBN>GV-IETO`RL>j&i!A+DDdiAYV#^`0AaWNk6;Xdrl5=1^ zpO8b~ySQdYL7raV&|%{e9&av^C(Mh@f-Z0D)Fi$?O_7hq;f<1K;qp4BWmUFaCa}Lr zXZ0oT@rlF$fc18hEe6RiL6v&_Zr>Y6bQc--qBN=hslNLurmxLsQW`(LpsQ7EMJZ9a zWZvkX{yO`f=8{ICFY0Vx$VP0fTx7V^x#2QPCX%bWszICuNR8sg&&-Z1v)qd0Pj~o9 z^BF6t$}uOg^0s7sj}((_vXtp(gTN^F>nGT$euq9hNd4jjUi@W#4ua%R=I$_|ue7pd z;R+;0+gnASc5Q({-?>+@F>rH{IBt3oXH_aIo^!RWBtMknc&cm3$4QHvT{|BXi)xc9J8b}Sw<4%hwKTs+U@O{L!#IYD%-~;% zcOid8tmS&c`J1n7G=IepAlDlUJHWpZFUDUJPktoN#9If;)_DH~Gx1)6J;}ckZ=YjF z633(!&BUY?<5!NRJ%zuQ5jWR63l`C|7s7s~Y_wy$VcRt90L09Op3={yyqNy!?FF2W#`xw^1@q__B7Z}HNU=& zT?;e!HWOy+}oWnb8m8}E*{k--d7#l1bbJ*xr{{@z( zIsYAIa&Cv2oO4*YP0q508&>LAPsc8TnL8Te*fs9z&5kXCnftxZu`k0!DJbzaIQBS9 z?As;YvyRP2Z!$Hw)3K@DZP+ZwHab@4*b9!m;#l`Q+Zx5N0!qvEj)%#J&-K0lGqYm6 zi+8n)Hw_ljcr#qQ)h^znF5Wj``5JGdi?<#2W4*WkgPD>2H^&N(w6!_`W@=R`OmiuR znLauPX8LFh%*@&)Fw?(x!%W&**io7`4l`-jz)adFU^i)9UV)ij*z4HeVWt;8aqMD- z%`Y^?6^<>0P1CT49QzB*)a5QpTDLFNH1RHknRu7L3N_wvn2EQ* z#k<4By9ZXJ@s_)IPr7)GF5U|;kzTpp%P!u#u7?PA#V%GNse0nFr*bu{{PD@s5C*c&EXBtu;6wwnN!y$8La4 z)U-=s+x6Th6mdi7(NDYtvE7D%}TupU}&F-*>QO1z6;W>!QUTLd#{YhYwV z+WTN9YT5^2Chgm>A89W8VN;bAvFu)}>~zO2aBPfYQ(2JB^J z^)76?3wy(b{S{{J_lw8cI`@T99qN2O>?E!8g|Gvf-&9z;hRuf=8GAp>-0y0bNxK#% z)`nc~QP=@Z+Xyo${s1#6-hi1D@4!kmMKkPxrZ~C8#ybmU;`N4|tnvE6OuTDhFKLQu zn7Q*9%#4F?!b~6i9%ki6i>rUibmL}n&JhRsp$tUUe@t8UM{Rm*?4f?&{@^T?;dHz8PlP zU=Hkbt@Eugb8k<==4cJxg3VR7A7*;y6UR>K;d%0-yt&>bFwG3ChM6*^!i?;k zR(llIH7vo-D4U?%N$7w=UU?+-BfHI!U$kBfKoNjAS8Fq7ZOunLWLI?UvE zF-#ug&Gm-C-q+T>2KJ`11+cf2)xv(I>>Dss({IB}&YNK8XfAayvmQMKi)f0!z;-G- z>I*jQaWIqiBv>C)E0{@J0W)a_!G5D@C&5CnTyHvTqlPVleMi~duroE6<*;*=Jq#PK zSHBMHt6}S5{ggchJ5Sk}6O?!+sBYP}!TXmCBl7rnCc&edJh9spk#Q zTnb^P1}DLcB+|_4b9h%~Gn3(~+ zPqw3T7|irm1cpGP{U*Y`r1iTJX2!w&Ff*S23uaP$4`xzqhFzd3o`9JYEiT^sF5XA5 zff~;{#m1|Inf$^qliy{qK^kwIi&qVkU0SYpJIsv42Vl?Xy{&WX`;PtGv0pj1$FUD! zW)v5kYT0RyeFl}L*c2HY#Kg`_G2e3-5{Xv)+#d&3R6kh~0 z{dTouw>kFTu#m1UJ75PrX@gxblk;n^!J6|MFq8AUFf%{eVP<|Dd75P>Id%ce%$YFE z%$aE}Y_1D?z=f@KVcDnKx%CCd`a3ohc7B%BbR_H|WfNg$v|kOoSi`2lE>SiEHbmL2 zFf-rof(_NM)i5*P*1;~-u+1*49yUzFw!5%hFf%Xr!pyvEf|**iIrgz*N1ow%!!?%@ zn5pThFf%Xv!OXn82xjKxXvd9=6q!zIz5%r|c!ie&^WRu($MTyJPv~ zHmm|>#>*(jW;(VCX2#0~m?>kkV-1dNb8M$$dmL+Wtj#g+Oq*XJ%t)0BU}j7Xg&jwo zbG;F;u(ssoFe49^xp)t{cn`xyXuLHpUZacmvWxc{*hr1H%f)Mh8HtqrMa#-yrY^l; zrY`5gMrqmsFjJSCT)YJ?-eQ>8esaA#T)fRL-jgog)3D1lUZab*-^J^2@v_eHyvsFS zF3glW5N7IkDa_PwBy5bv8{^_FfSKO^GVB!{2j7Q1r|jpB{mQX-T)eEFHbtpp=fj@V zv?F1!DZ3iBM_H9)cR02JwqI-YRoI_2-ea&oD*G|ajH_oId)cwyJNBkye{<}gu-7%0 z+_P;i17UueoCasw7I?E-7l6iZ#a`&_&SVDjS#x!x)luO7BgQ~U;Ia()eFa{e=H zoThjSW^&H%W#@S@Y?G!v9kx!{d9W`l8v$FRY_hvL7iMI{(=a0$UUcjOn5jWl1v^dB zva^Pb*Ba!*%-9$LGx08S@y5X>XuQcT-ZB^OK^N~~*hG!D#>H!Z{a9=Izc7>YZkVaT zpJ07Ke%{r zxOnftuF`nTF5U@!T>W5v{a{y{`oT>7Cc(@In+G#(uoPxe)WELM6!*bQif_TpD5-;) z5%vPijF&&aOfGN0OfK)h{e*Q<13uOH_I%8Fp71}DNyE?6*_hy%(VD$*ok^?qhU8`eq&)qGThXm_k&fR)NU9P0%$Wek9sG6unJ(K0TEwQ0_CU|&|Y47Ntu zL$Gzq{s?v+%Q#=SWDV}uk8eO~>VDmKI%P!vgE}l2Y z=63{azQzl|On$v!X1ok?Y!uA&>I|5v)jXJ~)gsse&1EUfz@g_a!;dtAfLbZh|3U@)nx7fvdz{UHTi}yVj?@5^H zt>+y3y<=}W)&?{8@d@lC?ZNCyq^;gZ9?aawg|LTAU&7`noA1I_yReP0eR}n0u!ohs z40}=89@q|L`(b7-oH*Fl^i0S4Id+j_S2?!WvDL5}G`}ZcbCtd5!kS!I2h7y!sEa)B z9gSB8Gxh5aGxZC@O#QBbnfl!aGcEa$V~;xaUB`ax*#A2Au4C^z*6m`O-&ruz_WfXA zpjNrwmtc#u?JHrX?Qe7O?sf6*hgEC5xQq8V?8ka0Ui%%m6wGbyfu9n?DC2s0^W!EVzOb73aMBQVpFKZ70A6kA~? z#V=t?HN~%BCdCJ^gBmYuh>e#EyIteu!%V#Xup2$u-Hn8ut{TrZuxB-_%CXyF4H~x6 zv8RVxS@)V_eJ-^-xka!uHNWMsQJVJaunG-pf|>g5hm~?Q*ZTl=ht{tHX6n~(n2lEn zGx3JN?$mf;n2C2AEUTO3vJz%;{tC>b_&V$^O|c$kQoIEFNW~4*BDa@?)m&43ze+%sIdbI{->h}=Ll(r6La``XVJsR&@FjLxd zus>+4?Sf6v7WzBPr2PHfU*RXGE{f-)GSHv@5U(>J=u&*n-)rGBa>?z0Ia_j@g1~5qP)U+#M zCYSHSmTRq^fSFqT9A;|u9_&Y&!W(Vp%rP)CQKBwD>&7R=_55HP`zA>@AOuhsAorZ$2M8bWeIqS?&C<`zX;XwX{s1r_(b+7=aC zYO&HvTWqPNN-b4XYEh|T#fpmc|NWgaGk0cgg0Z#l|MR}{A^e{C&2yGH=XsuU=G<9o zk!-YGgk*ER0m-Jg73o@&;%+3{GmjwAgp5qTMzXE34(U3h_h%&AM;{{DHr<8b^0-N{ z7t&@U4Mm!3q!CEpGg2|q3r4C&`lXSYk)ANpLZo+$bdxVVhV+5qp7*7-NVZmgLwea9 z{lu4co8rZ$gOFY~M+=awULle#?KEFH2g&wtter%){kd_(gHKglJ zyS#%$gV1UpBi&%QFOY1T_MYms=>bUgYT`Jg$4rXjk!%gdBiZ_$j;F=+=Q*~l==m&PGkFWZXr z1EcpP(n=%kQRX;5F;WiFKa4aA$=3cdq$dq`Gm@?S-AHk`-p&I^H=9~Liu94uTkq?= z>FfO+=@z56#n(INbT7Xnk!*g)BHe2AGLdY4rAXG+>XDu@Wz0i*)<_GH>{v1G46n{* zNN<~5&O@?wZbq_Y%t5-%9K96D_Ub|;>nS%Q^)lnkqrUVRlKl;B;50A4gOCoP2ECob zkd~PIjzqF`J_G4VQ@1#-znbJN*T4$t#&SJgJNT(v*W~AvzcbT*mNS_$47U^!oH6Z=VaCafCH_|es z-y7)2@P6 zM7q{U*Za~^Br(b#my`PguSed#Eq z*UZtAk!;STNE;1Ti)3@2i}WYMeaDyXM0(h8&mi4xq?di^9VEN<^$F4zQ*PxsUSD2` zbON3y;D2PB)~Wuym9ir0{AioYY-6g|)NW;}Z$VV1Y={zLs3*Yvo zdypP7dQTx)Uw9U&|1PTiuaNBQaI1fGyMI)R7WQZ^(sd@6DZcbD(vNy5m!Be8KYAYN z$A)_yX|YN1K9cR}FMR2YO2$>ASA%5J&OzE@QrwDkgOQ&0rMHouG$}qovMKhj;`b<{ zmy2Y*q7dl`!%abY%A`08$@WJjlI@T4k)Ae3=Oft`zY6IwlXeNxa&z=9q+1O41ky8x zd(!7tAz6F=Ba%JKH+|_tBx}$6Bs_aL1nDsH;};I3pP2lPL9$jn%h$WW*PD&>Q=@mG zuXiVs9mRiyWc%oOBx{o|BH1!tLRw+czJg@S=w0pU^+&RLgOGk^^!7utdR4w&gRj?u z^sLdF>+3!2>pkV`{S@ivM(=qf+xBaaY}>zqw9*`X8_C*zuUX!8zyU~4nHC@6b5nfo zbEKEd(S9}FT=WPe%jNsrM5N6|?<`-Mhjg*wI*@FNrM~oIq(7RYe?hYI(|3KTZ!Om@ z=ICL*l#68NtVOpU+-e_uKPi2;zfailL5A$@MRX-GD|DkNK4lP^7sWNm0Q(&41&?YxNeYtvgVAz9n_ zx3Aatd{6INNWU?9dm>rAu}C(*Nxt4xq~997X};ckq|K&&9lmrw(mcaG>r3m9tZlsO zOaDT$=dnwjC+&%3{bQ&vjqs&OzBIm`U;9iM^}ciylCASyNJC8<+>f-z)cFylZ6?J= zU+-OC?*pV4jovn2Z(xHrevCr8)1)m&vSlQ|9{2U0@%5fX`jgRn-q-uU*Zb7h`!~|dMz3d!SMI?`r<Wmkmp=24_G|T0Oh8(1^v?06 zR-`qCTj)y3yTO4v8Q~ z4Er4ELnHN{?bYu9q$dn_q%URr(s-oxri{~(Y_zRKdd#G_0O`->=xn4{jkLhm`ySF? z40k=!1|!{q^r%UDAJU(U^rA2Q*_Yl%n!?fE&PTqaWhcw+hh%58(~+JuxwIfzPrexG zD3kVbq`#VSzk~FV(R&KXrg#y_rg#O(rr3b=no02nl1*{ITu*N(lGQr~>2;%*j%4-D zM_ORYxD?4+-3Ws2<%XMzq%WfI92(M>VOM*Zp_r>G^B@2&SxT78=8q^ZDm_J#6%r`+Cp$dT%2=VvfG=AN|BXddfv!Z&e}L7H>crLj8I>ElAIqv~!VcOa9E) zd%@RRgY*ld_Xl4u#suUkbC$!AJ~Pr(q;*ERz?T*y*=V)`=?ru9Z%Edj54^UZy zfb@H#ceXFxj&zgZp7f<(B0XTZmwoAdq`M5)^HNXR8_A9fxkz?gDDt^FpSu|8d2^PR zBds#h_mLKx{2oMl$Vfj$viUua^exkuzeTdM*N^?9U-(CNZTF5Ik93{MWdYJ3jdVAX zZOOkQePFmHt)i7xyaI01iym6(a!h*fWIk?bo%m_*59K?m6z8w zR#w!Nx3pH(HkLOv*EY0Pmp3-G);2b@@LSfNzNVMLV*K(wIofZ)VLn|x*(RFW+Spvd z#nmp(bYH{X>wFFSs)u(zXYqrd_NRlY+c{uAa3X(wO#4YnGfz}WikY<*wN0Aw z6iG4joUqkf&A!#6HSLQY^wu+dFwA|qQOAT{r*-uA->)?IoaYC+X$G1#mQ&g5yxouH zh&HcLqU|mp$%wSO(&+p&4?5UO==3O`UF|k@-B&d8o=%#cHFXA%xO{4BbE2Z2$8pjI zsF6mB8`s!eU(sqf<-eP_B6VtlM>x_3=;WHPjPg;1$yV+}8*;pGLvE?cmQ1KZuV74pUxy)SToH}ODY_E8tf;;33pf7;Yly+O}K?nXW~ z(p5?$o#XgBR848N9&SgOZt}A84qB8qbhn$-B|CU>Khz~kyd9ExoKrp}(b87e8t9e@ zfznjR8T_f9C-A4Ou&2|m{Rv<{kZ$?~KnXN}l zgLR{B_Re@Y$LO}|>O?d5%UUOjC%G|=Z4F6J3VPSq>Ndr_V5h0>Gx!U3+IRZcPWvvX zcIW_geYY4K4qgT7T(5SImmu3tlVm$hQp}7UmU9?^EN44S;SWzTuYC*#z`hH9y-P<) zuPOeU5$?E1 z$105)Mq&2|FQL<8_W#MAO^K0mNO`Hkfaj2ko9ZEL=Y& zyJJ_|*>{5S;Cn!w@4cWpUukUTO0u0RDQ1R#%YEwV#mwXDmK#WiTfL^1iuy#np|Ley zm8h<5NK~QSR692#UeQn$N60kCW;V9gBo!t$R5!+J8{&tzjF3varFMRzC0KJ!mezP9&unT^5uq{~q*JHStf^&~DX1#Z)LPRLZ)-?g&{k15%$$rW(O4aCtx43! zYg^(|#*dEH)vG2)GjiRMhIZ9H;U;tZrb;$rsE(!uYwMZe&{B;JN3_OkDrP7AdZ(O| z+SQzeX@45~!i-_@%wh5DVe$Nn(eA8Xl{7#`q%XzUK1^1up|Y{Qsl_N}#T%RB*^&12 z8q@9A3cA5|Zla-86&-36!Ua)Zn`5#VXK2&xin_3x+9_JaPTNj;rY}1&K$AzvJ~Px? zlvmwcQP~)wa#lw$o4wRb7%Q^$2!Z)s7+dCK9@;FG&E7O$a89 z2aZ?AU>kT`u-v2$u$67kw9%&C^?W{T~*`qt(~#2edM zo7!6ADybztr?##xJ~I)Ym1sybSF|RoNPS#uebaG%;id+ZRX(e^V&373XAN!jGZW2n zep7r4l%ve!bgkqPRVqH##IHm{Wg24#*>v>#&Or*2ZGKM!b%tD9UL$>X;cvhw{ zPaO~Sk#{^X#~%0E^#8JUZk{#MH1mJe&dr$GtmZ_bfp(l(*Jk{zi#9jqxlNAG*UmM4 znHrBneW5;#w!b*nM*`jz=ttu!Uhf6cNBEYxW`Jp#XPneT`jg_!!My(T{5onMUDc^U zV`OW*zM?8YoUg5~t*fv>D-c_|n-_X+7*C#JeQkqjvU-ip_|i%7bn6c-trfVK6swug z%5|KfCZwje@K8ptR5s9d;kt(GUio%bhv0cPR5T*rdjW`HAL6#ez1*W=7fu%_QoW(^SR%>_;e{c(L1Xac#+lF}rSiD44~M{pwA6 zhv!t8r26mhyy4l^-k#ZsbvvK#+Co+Q#1j?y)xj-oO-+r>#82vB(%Z?#33iHQ>{)7> zKA2GeolJK^vNIiT#7Y_)`CA(@#rjrJg;8s9wWix!xFRxlE>e zQO-0-FqC-lf+=THU2Vgxcr~*be(f6SI)>MHlxrh|M^Fa-#Bf;KXfnl!&rTnn9v?n@ zcsyfxI!j|tOWVvywtmZ>gi$zWR5UlJNOxM_5I-?~c$MbKZl#WowZJd2{+In1JRj^U#h!-F zG2St>#u$_t(}L#`n(LbhrJcfj<8~ITXQbU*YwHqKCPKFiKfG#qlkSEI_UYlW48?(P zG(;(p0#5SiB~=6K;=i z{&qzsdg1Q-k~}Bam+pSJe?+GCW!E~km)$sC6|182)yfLB!`!&*?yAkZjJ>8(*h zU3|%}>7`D}jVN`hV@HVL4HYW0lRQ+*79H-a&;Hw(?fF!F#ax{UqmMsAGUjHcr&Fh| ziYs4tT=x5zy#JGP@_aVjR>lsrsvK!U%X|K9`Z`tTEBfg;^?0bCzN+27s?CPZY;*@( zNu7C{+6E_!3=Gj>Ff{jIVqw=2>@`ALeZ|>_SDjM|_1k)1=z$=+1nG&pMr!UC5 zCQ0!aE&|(6dgS4U zPkM39nv;-EuCBiSWP5a@i(7>wE$3lhcR%jp5Q`fdEsp%2yDz+S4Egdmf2`BvlJUqt zA6@q0d&9~Hti1g2L90*gIpCd*m!EON@XEdqJagDt$M#MC?F&73+dMFL;l;DYZ5}cB z*aMF$x@-BZOK*B((wG}}{H-i|)$M)nJ#5h6f8BTOoQBSoTemwNbSEt=#4@y6L!H`{6 z|8dTsqyFZ&+v_J++}!J-}T&uoP0rS<-)&YO8atJpM}|%J^9@DaqpJ> z>4zU*`q~@6T9|(KlwM2kyyo2J8(t}2d53o%BNdj0*H%qy>(%4SFZFx%$m&Ez>+tmS z@Av4@Zkgd#&56oZ-QCSyF8uZEA@d1u!>bZA+hz@!Ds~tCdiH2tWS?D6>bW|lVtN`K zbFG_HKpNg$RncmODf<&p&mJ3;9oqwACpB8BymaEEGp*?K0+pB5)?Si1ioL-hrkFkb zsFc(>k3IeTlw_`EuPDUmzJ#g}^BQ{>g_vDvm}^4JQ84$0m{Vbvg_t^+RUt-CVXg}? zx}$z;hq1N>%zB?0u8WT$^}5b* zIDqeDEa1r-#MqZ-{Z1@?5zx`ky*+zq%%wq{swqn^us#>`!9GT38~;nv*4yMA%tt>p z_v~>r|5FubOmPXVEh(7KZbs)w3i9&lo05-e(zAztm{on+dY${P)O^y6&M*{ohT38& z`RJ$Io;@@UDxX(Ryrw-hpKlqRv4MR0rR1}_(a{gPI-A$hZ=f}!=e38?nLs|?dF^iU z;eM`J9CEj~Nyl3p-Aea%Jf_?`4K$TEZ}v!GZg82tCRMq2BMiDMYPzZJPD%Bg%k1v! ztZ|usKJ#))s!b`(R-f_8>LtT5o5u`JVf3Y>u+HcdrZ|N;Gli*2VVY8y_7vuODa_Io z=7%ZFFH)G7Qkb_=n18y=u70cTfQfVRNoEg>V=I42<`DMQV$4Zq7|ce@GRd3-Q-Xmd znNsQW4>IS$aDQ1q=OUP`1B1->Vfr(GCG)upX6*q%M&DbAA0A|$6T{G#O!XI-jktM| z`A`f4VUp=fFoKG?~x& z(wP%vE`_n1=R3EhFb||K%TkzMq%g0gFz=->pQbQ<6m-qz)n{-DGc<)^#X6FzFoh{i zVa`io=AzEm_Mg5n^TzWDa>vfg3RW%*xo73kQ62}g&CE? zl%_BN#uVm}6z1nC%YY*cH*d~WXDViz9ySY| z`?{1=XYuoKSm%w9j*fkp!t~T+&1_z)?w7(Gm%@xqVWy=p=cO>SQTj_yAV=W|vHbAAeQVG7fc!rYd^ zJdnctIEDFH3bO`g?R+}};j)bFZ!jZSbkHotGWsr$-Mlj$Jb-rvoFW~2Q!vkoz-XGJ z%|_a@VZ3b@uJ!!o7IWKi&mITvV~_sm<;FX$G-T@dtekYchm=_ne?1+`xLA>ty7l$HO`qIhol}CR^8Yff{Dy38)Rx?66d0Nc~GFe&KQ6^_XgvrgC9%XX0ni0$=H;*SrLQFxy z&0!`hJ#$%v$;#5YL?EB6tlW)Jra-0?)XC0>N0|KV>?o6`m4aZZ{DQg&Q;^vnW%950 znc*{ATIgW2$sBw3@NCp2U8r+y)#zBO%g)JO=I3MVFgquAb(AUC5MgpNwLlc8b9Qd_ zkSLRvA7%2jx)e;6mpLuU%&Z5M%L0Ole0X^FWh@Re8F|_FMw#4YQKn#Zgvrm`9A$F)axE7)i;VpI{0LK!J|oIx z>8drDsvvt|l*wHhW-`+=S4Wwg9Z@FtNUnkcIcKKlWk;C2OkDv6b@Fm*qD=n62$P@w zV3f&P9c6O1hncMG++JK`1j@?FE*KnPm}^Cu?2;&x-xOhT)0ak>+()BK-r6veou08V z%4BVeFxdtDxLOF*IXfrg$S9LNA{gqfVo^uY_|udz8t4G{WTNZHO@W8NHZ2K)Un!+?@QZVPPgW zJEt_tXVzBeq@x%Oph{IB~d1OZj{M+Fv{ev zi86Ux!c1OPfu55Mv`=1k<^fSA=Y%MeH$BP}v`3hn%%xE#du^D>&&t^lW%9R1nCy)H zTz~~?n4g_FILhRtN15EBD3f0rWeW7|&_K=w>DkvuncQVjreIx!$tl<#VRAG24GQO+ zn{_~x$r&4B^3v0@OQTF~Qalrs2IKZYt@7Q(>Gb*KuB|m)%s-38%t50%curdEvv}It6c7 za#KksoQm!Uq}q7po1Z09{o73?op36eD3EIY9{v83OtrgCh)p`-R9X&6w#MEYR{SKH z>L53jbi%3l*)EW3_LG0RDw%4yn@T$2RQrZf9ek9&rs=ieNp33Xgj4NjQZWHG+aF#V zyg8X_lAB68;Z%A7MDn`3ea)+PCsS3ssiYH5MTG+AbVRhn@T$2RELIAt($O8z@mD~McAYhPIVYevJICFI=nJj)4Z}aF{wOX-m9&7d@@z8n@T$2RELLBRV+MxT{6`;HY{glH7%K{+D#>$aH=CisZP&5XGSvBY&Vs3!l{ljsXR|P^MRqSB~yLdO(h*t zRo0x}lADdp*N6G**`tK@zVLPjDNb%`ZmgWd%L7K9oN@BWELs=pQTsD$TWdz?q5hF0 z3q}^~L}?5UmUX71r?pH@ogJiOs*iG7Kr2+sV24y}oPZl0&N^6)hh3=iN?5w(~4waQ109a}iIeDvfgWBDRQ zc~SWk_NGpl$R`)r89$}4a8h!2bWvGha&J^o$%IkKT_rrDaN_t0ft1O8lhoVY>Fd+V z%WLbK%GoL^n_J6k8)ueR(<+Wn+jp+fsP&Bv{`^39Xc;D8g|?Xtn=&A|y5?c1fSzmgawjv`1l2?a_c^`bt{FChgnB9&*v*lYA;GY; zT~f~s0I9U^+}@#ZaQ9h4xsi7gxXp3*L_3M=ZdSpdY^Y8`u+7N}xMnXkywYWnuTVaz;Y&xl3T?q+B7w{tii9m!T@TurXKSYN>`Y>6O>MQF=I3Txf}-nL zl6@c24o^v!=w&BX%{8~;in(LwHB{8sR$>dhfw6p+p5XNIFgt!GW)D9r(bJ$-u^8{3 zY+ljg5=Jk~DJ)!``Pf0XXC7MS!&K=b}(-33z7J!6rvZdyU^2Ry_l%Tb{UFVeZ z09J)pFUfwjv_q{XnHRlSJxJlKQmP7Lg#8`zWXC_Vdab@ilTVyqtW z2<*G>Q#3USRViF2w^9{0rD_qVlXj^wKA@M!*{od3?y*DP`0~`Y`pFFwHM!tj6_!=o zk72UYTH)oO4D1^%+|Jb5kEyF|Ds2oWHKQd@OpJ<(uXlbl#(@QE0qg(eP6gk_ove}sN!i0aDL1bgkIVIK&t>UOU zTc|y0BDR_Fd8+Iy4$=tfWLi-#xq>t%YtO-4a!qWRY~HHo)xWr+<@`hy6IWi8Wb-en z;MGz%nI5~-QKLE0w7gB!Hq&Hoc8pn?YEp)Va3f=cjNthJ#+&I{niJwo<Q1H-b9H%N_&xc8pX@5T;j+)t$9CJ-tUO_Xt*+d0SY)YaYKMa|f>qwYKX``}1 z-_!PejL=MCf0xb-?q=Co?H(>_Y-zz&-HPkRG~>D^$&`u~f>ERO9dBo1i8*E(sI*aD zn%vj9woY~5Zer-dxlO!$Y)XP&tu&KCYC@~at9S#7rkTx&*0$yb^C&KfL;EGIOyu;y zb2%2>P*vU9SnKZBpI=q$AFDSq8JkG1fw-FJiFi`st<~b)vUTkcZNp?2vcdtf@IG^H{ zSyOpRRz)}`Q@zAoZ;{2Vkb2g=#_8-Zz3=80tgERd^ZM$#*0vT+6=>Uvx{>Mb7Tu5X zSrz$N8JW2RY@04Ck#AIz`xV+4*uCSG+Wc~|sw4W<6}j4c{py5QWH{gI>Q4D=m-W(n z`<`-uw*{x@^8|iiOX_EavP$x~p&BOn{OVwWARjy<^t_Dx04Y8_o%WB% z^YSzEa?GI_v7#PD&JPZ#uUOophxss<7XE^d!D>I9zir%X5ZYq>LyymyV@=$K$xQ%5 zxOr2X9s?ce^dId$W>;!i`-thDi@ZIHMlbNwj95JoJ3B=$ePr;_KIvUOnU51JcASm; z%%SZ^q>DQxGlI8#iZ9{jr*;35l-x!-=_`Xj3F(Lyk%xSd)R8o@KjlX1C%q%PsW+^f zdg~1G=dxfx~Z4lO}!JksW-NpdPUvT zEA6J<^ls`^byKgdn|iI?)VrvgdRKH)Z*e#EuJ5Mal5XnV+fBVkyQ#OVn|dp{skf?| zdTY9=x2~Id8@j2tshfIRx~aFV8+sbgcckd0j_1-dUycgJzs~h~@rsz>*46y4Z#VQb zkLZ`8*LmC>*bP11>~uhiUdhPdPx-3*4CcYZB6_@$!C~ru+}Of#qsod(izbd9acJ?> z)5lCH9eZe)om@0_(x~FXsfWhZZXfc;6x*5P^f0#_6^@vGMq~5&(~IZD$Je&T$23+Y zrdQNgG}PABwoRWfzI^hSDdl5Xu9&Xt^~MIS_NSW{=S;8E5BV)k6_ttMjWf@4MmQ%7 zV6yJ?;T-`7I@8+pt^kY0wUy0{EsfQ!@gt`k71vjT>TBogg`~PB=7PRC<#R^|aK00$ zquN_r8~aT8&3s<n-7O5_fEFU_jLB) zLl7!=7M(-lDnoEBM6Jm~AFF7kTIU(%RqmcyVOD+CLA24|=3zMzD_o5hug05P z4K3H0Jl41xGo`URN!Gi>9F|sBV5YD+Cyc4_u`~i3)$X!PI#9I5u;4R?i;H_Xk`hN+yKX^NM2zUp0 zEJz;hIp95@u3PT~&jRlQYr*@$?|=`0H-Qg=`cU*kpg!}--F)pIfRBK?V@r>M{lUk; zLEz({Z0re8^%}yTw`IW>u_OD@7PZ?O$v0}ZN+Y{H4!pH9yTxQn8!=vEx5~Yft=o3% z8CBPI>)B=%w_>IZ*eWBTKsoF&(&9JLD}*jK-uz3U>W#F zP`3OhP`3OsC|iC7lr66ZWizjWvSpSzj4l5alr6so%9dXTWy>2u+43e(w){6xw){3I zTmCyJTiy)Hmfrzo%kP5vKD)OC)W=i*0d4}{2YYdTAApB~TfrkhVr%;_@FP(6 zxD8Z&gEpQ6KMYQ{f@+J}_=)776N$}Aqjt*xZ%f*ErTy(F6quEDCtJY4)sMb$s24=| z_T1kkOxMeTRa`5^(PSdC7}eY`#(=~qUKz%>P({~~u-2~aNXc$8LMxf)D)kj}n`fDb z>Dd`Cg*NW9&9yt;(a0}Iim8gBsxWDc#%6Dy*MQG5L6w95g&_9SekphucpEqbd>T9)#9p1DAa>v!0VbKna*&q2s{of1=GO>Faw+oW`avW9(itG4PwXb`jl!exCP7ucj3J9 z!2w_axGy*YlVxHOa zoMXN}mw1qV^EUO9Y(A5}B`#lvEvOIA24(X+D&H=fKL?b}p9{+7%R$+E1$ZSm6Xb4o zrxLsYtO9Qb6X4xoHTXkt7D&u=YQSwEG1kQC^T0vW;e1fGUk76EPCa-Eh~2lhfQ{gN zU=yfU9$o-`0k(p>az1UKKF*4Nn7PCpa6k6vfr`WP!K1+o!A$TXP!Hr^0-gX~3XTQa z!6NW7a1yuxJRQ6OJQutYtOmag)_@B^J)*w|oC|&zYzI5Q%fYL_?}Ar@*Mi>zZw0Rb zmw?xT_khe_+V2Bz0;4|pd)iBV(ThKA(Q%U24Re!NC&PnE z=wu5F5B>yIUb4kCIDdHXEZ6vvzWL@EAvZ7Ta>iKwkK{{c3r)!78nWKdAR(gGxTqJ& z{jtfr0`OhbGk@c3-u$`AmSp}{d&uU~_^UFE`5d#c`5(~ca{9-?aUkQonREOIY-In( zU^rad{J!%V_&@18uj#w!JI^fq zzVi&n?>n#azgFM-vy*3K8*BlzAmWts7burs&#*Wo)3VRjeU6XWq z6{14CF13S}XH53;*_)O5L*+6ze>=5P9jaA(>^Eo83Is zS~gF)lE0o2_=+XtoWIE?6npgOh+aXX?H|~i?Bo+r_PZUF{eA|X3w{nN0PX;Fox@ny z{&SE4y?q_P=f~SOX&2<0!s!X>wZpx@0U%>yJM&bhH^@9sAE9rb1oB#%cE)mNH;^&V ziGhq^P8z5=Wj}BQ$XMErZ#Z11w{HXY0Cla-pP5Ty`|bO)zbB~ibuUoYIRin>F$aMY z!M(xLzxj4`yB%A22xi0AaDpM zA3Ge3`t3!eQ`>drx176ka%8+z8uf?9@TFb)?bHfxyfHVJ8uwKpoorpXujh-t`+5dx z+*gj|xv#Zp;}_(g^i~Ccu(z&rZM3sBgNsuKTNNTJSIw=rdj4s>b(?$4_g3Er%!Qcz z%JYGww<@YALtUE5Tjh%(Z&i?yg7H>qJmC`lW#V#|NV=~=fVc8sUCoO!zWXk76L}YW zYrK8mUlk_2_Oh8MICbW)@)d8BEy!OF;cuYJ^9pU_ucJZv>lje}S_sNt$ALP<@u2*b zS34PhJr!KXK66Uruf?GJmAR$y*U6y#wFFch@D<~)Q$YFaR8am}3d�K=~_kQsb{@ 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

        )tY@B7IIB@GC%{dSd${ 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

        MUXtVMEds-qn| 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

        )Pt)s)PsAQS`V7g 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Πx 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

        !t8|FX ztvy|B$qTW={OZ;s^69-hU#HlSp307oMLoS3l5i`SQK07IG$yCUviCKp!EDaV zDX|(zkKtH4H??_^<6+t(KGbceA5P#4Ha?}w%=MyX(fhcjS#tEiMOZx>yt%)2x+45ubtl^foa1z8+Ng#AGA9S0@lPnhd5)}slN448p& zhtny3rBBbmKP(F-gpGH(DZoxCG*dD1CSnEMHp!e^G?~k$GC01dBh?X^CJAQ8Sr3@x zu_2+QZHX^hW)jo#;43^)cA5o=(s-Sd6K|{_NhaOD1m~A6L^4#EDq}}_F!q5rzEPT^ zaBNQ9fQ$5p3lfcv4@`}W7pGD4Jyyn9S`QNsIchA&lko1VlSuZ17?P=(Q-*@gxDCs5qI=zbTfQAuFD(zdL6e z7bu;N4C&EO#1m#y19<&K(od`8Ux|28-{XC!&75hW$Kahz&Qv?nR9+;qdv*S?P%$B zvC&tHi{8GsyR*%0!O=l&Emjju+njnmxI)aCXj*I27su=L6@vFuFsfTF3cPqwu- zyQ|xhYkH<JW0*e4L{TPT&LrY zZ@hsb?WsMKx*0W1W{iB`+qY>{#cyS1ngv^ZQfFaU9r1_EA)fv>n$c0-c6OD~L7qm3 zM;GUT7rzww3CU1o2RPYMBmu%&Z@kOL>coDI`erJm* zhV8jOMP<>?)>Prwj_7LOPsY4sWD$0NFM*C8+iJ%3^Gh^spfe8B_Vl77PI7GNuJ3H? zYj2V16lM|VkHgVccXl_mxP2Y1y>7CpsimjKO}4dRk%1~*g}>9CJ}M^XdpcM5x=qP0 z?DH6CiRiGB)5MFs;iRG0>Q#W=oAC-M%vkV^xj6I<4KU_fC&_O%;{j^$5>Kw(=h0x% zV_yB2JRK5#^P&bCq9k^hVO~6HkD*x6;PIMX*hsivi~aA!y1gBSSfhl*s^PYDa*Q0>Ly%>8$co`pKHpBe|3{&YI_;3Q~~4ZOEGLsf=h& zM;;PQE&1`OYgQXsDVnsR1)o_*#pgfY_nBY$>d3=<#oi8O`a7mZH^Uh=DbM$NRhkaI z1HU~_j^O>Xj8)`~r?0yTm04A+Dx!quJwm(^24m?8o3{k<$`Kbu*W2F<_;rMZ^1nbg zBgA-)T8)a-g<3@&30r(k7-RBHRrDluh-cxPbp6Bbs=q3#bJ3F(jVMo{I*VF*vmHj| zBNHC%XjrFsX2+Kh>^=c+H;#~bT&R+>mB;fzVg@rqROFtiLA(zYn!69@b6#8V9*m5d zOy_(w$041KhbjutBu6)Ah9-T_PsQ`+j`d6hp|XXL?W-?#Q+WIT|{rMx2JqdwyU1zxAq>4rF(2rXl|YzDOK z4hoqQHhk6T{?&SXG3uiZ)zBIa!xyhb%o?3|Pa_ghGn6)4+1@yZqd+Ves?K0BV;sA} z(r%5WU*OrH6|Oh=RJ+s-%Agrfm|GgBipqI8xCc=G|*bPx}c0{}=(!}%5 zm$~MenaeeAIf7}9Vj&~;nb;{yQGIm^Fv;co;?l*Q#(TYBTuVgCfHpAoH?LxYrO=Wi zuPl6Z3)P>88Q2-@D*ZYln9wK`AT(?$+K5@m8<9J=tbUr2T|YiN?S^DG?JYk58zzLuM(hYQ_6|s#EtggmX14|7&9h zE{a+=FkiZn6zhU@UL4pptxa~jt<83car}Z^e?n*_nyj8$v@_;Ms(Q$4Gq%tz0$K+F%LWVEgsAlD_mfhmfbn6;Z z8Q*@^=!F{cC=_r5Rt%IoUE|x+**>hlL;3ll+>UDE<&bM00-dMnJ>msXlk2jY!9;vn z1GEq}u9osKF<^1TtYpUVrVU0Cjt17Zrn2}r#qYvzoi2W96Ig4vb$u)L&UeMBkZ_1P&RXNG#=9Xp`YhbbJMC>TDFL&ffm}Hx^K24p?Ej=(AeI32_ z<>hQg4AbiF zEW{I(&Fxv+y1G|v46*ZpmC|Xvu?ZExvwR_PE{{^lt7OcaWPIP_xtX3HWCl^%j|+8~ zUJNb3?Dy34-Un~IaiyxkhL+YfYkRG<89&%a8{JwZ!Cczp%?+B0>gY$?hu?p=4Jk`) z^)oXQdT6Y(7A_n zXDE9@?)y%|yjU}yb*t}7J66COZCs-Bjs5UV56~0~7|(qBW=3vd<`}&F0xo1^LLz4S zNv|0_>7-XcwMfJ^d`wg=rpt7^!)6u_k~80_sN@V61|pdG#*J>dqVl{hV46}n)F0C+ zy&NVU12jh^ZrtbwgOQ5LBe6$X!8MTnujQ~}qN4KXGw`v!%cL<;-k;4(;G@QByfeqE zwZ@(3#oW5Z*Z`oS@`o2;1M<#|Nvy%Cs5}9YTz6YP_A%U+!e@=xq7ux@rU%nm9=@Yi z;q>#{K1?hKTnPhIQF%Cu7Vs0K-d&j4a+^2^#&-`=sQ-WoD_*E&*x5mG45OB%s)$Ei zg8g7xQN)Ar=sIxIbw_LKmf`!Jib{Md>SVd*z|Fx^uBbdh*T7BXFhjB#yRu>tKk~hQU=n}(}aQF+h|qLK%Qwi40i#zh-WkKkLnK$*AI zVi|9a5xo+xM*P`(A0JCJR5@7l@)FaT;`rPvLL;KS0`HMh5-4v>6@pP48ss zIW7%;>W=kbV?$nk=YaOFrO~2#CO$HuFuV{KF*P)lO%Gwx4VvfW!xnwEWOB>Nvk~p- zxM)h`aO!V5vn`$V@?m{`J%b1~r&AE|iMWXJHp^EN7U{<&5ZaV!EndE0I>p557tmdX zZ``~3Hegl(yK+=iuE1y8U3hJ9D#Bd-Rctk!TJ?1ZC@;aBGA29lD!jJ^)29`cU#+rZ zp?18JJ^`plQ3E|Z0;-|G3u7vyxkYrJ-z>FscXQYRho_?QyR3CDMBKA@Vs&2WoThU1 zi!no7QOPNByqRC)cAk^ZNDmYV_vEF6E zrz`QE1x&&ce=+P=+n)^$3hl0KNpdtsYd1lr(tOIVquB|p>BCgeS$OvCVn#o>@EzYr zR8)Rhw|pTB?z%MYBjd7XgnZ7L&Q4-%C4Is1sKW+~65&khK5EhpbyG*<$pNnkcSO?v zOPid9-nFYqNeBgND;C`swfMEmrH#&>j;^j&xbsbH8o}-=i4|fMvNXddbCIPFve58Q z5cXit5eRD2_z2z|VJD~Kfa83N+lPh!SW?m3x}KAWI2paCr2}JeHp`)G7Ph_=@YB<3 zNR2Rnjj8)iu|b!ktFLy$d`!|;3wFmf(gYNv#tWerrW=Gvp&R5csXDgrNQs0gMvErW zc70~V_+>pAyl6vr2tAnee@`DC=QtN3+NVu4`@YDyW1*Lk@)O;--5Me6rpaO(4xaeE zDvqS6sQjo&+tnjCcg!?T4X#;P8jL1ewBK9==aI0GOkHoX0dAPR^p2~uzjn}+_I=BS9c&vtBGQ2E>U&e z!3;@%+7=3P*f;eMZcC0E@TE*e<$u_m3%?>MnvOG!RIalvx0k6jG-T8GXlbA*r&^KI zJ55fOxdr5}c%l1{)Dv5bkQ6TT45j!QB>QGl!XmF&XO^sG&P<|VkKBsNW8nKrB;Pa& zCtRhEIo=f1vQlqIf>j_DmHEii0*p3#j6=C9DwmsBMJjJ2(7VmeAcEzCN&z#96_uxB zj~J;TJ~YJV76FCErXdxT51Ll?YB?h|GLv=a3=|s!c1U$%hk>BY@)>Wdw&G*e!-3>T zL&a*|ESu=$q+fU*-L*nDW^&szllYDZZyi=}sAs;m#fMAEmr!&`>}rfnWBU0yGn{^v zdL=%iQja_IM^ZRaxT10w_E-`$ni+BQ78)yzX_H5BgJ_t8Nkso`!lcTDLHH(Xl3T^4 zGFfel3Tuimqe|~ZV9tJdZ&97l0G6JM<}WEHTcB8qViAJrb-D6eFGyyE3y4j zMdjst&5=ch8v#z}9|gHU7yocL#i|uzTTr~Gn_CP`VNqqXLf#vYWVJCLMeLO#x5kG* z#U13A9#R~UJNqZG`C*e9c(E1n4%P`Y*LjrsqV9M!~zn#vS-7 za{*$05aUAO0KVhL*I)R6lrF;Gv9+Y)OL1lKc?dCYW~4SBA2vx9=ApE{a$?!v^jlRe zC5mlGlL}_BD=Ob~ipdtA4`N%SEciH>h1WXB@6M?Tml)X#O=jxt8l(gHuHlaBVi|** z&E+!g_~tEe$whpRvEml!)I_{lh{ud=bp!pBHnQ|C`b;503+N>T}Pe8KJ!PwD)|saEz^Q{UK-uN zA`{FU8X9J6l!;+^Lnp(Q-Bx+_ruUU}X3zs0di25^@t%XvD@1M7SRdO)R#dJD;u;zT zv0DL;Ux0TLe#DhC7)i>+$}cg|;!6u_^|--GMP-@cfg6xH(-13hS}eMj1|1o)?GB}L zGKs8Y1M|z=5e)l`Sx3+JG|X7oBv>WN@+n4AL+T<+yz#Q8q7u75X`?Yy)+>dud@pWu zEHRi)Kc&)U8(>H=(}ZmTD=L>^mPcDYx_Mv=Y^~{`6|el3&n zKU#ihPek5Wd8S6OQa>x;rI0uF)vQ>`w)0FOu^s0Mw|z45M5xiM@5W0LHMvl2CIGG97^Q z3Ro6{Re=?ipIxbQQG-)$&5K)b9M)M;d6F&OOhwFRNjV3`y;Q&>EpEkab%Cf5z2zv< z*H#7UGHE)dX=+oAsEGniV;fP--1k=N3}E^~d!))Ib|?oq{Yzs%-CnGog_V|mkop#8FH8B0#a<)rh*%tX^m(6)~u|al$B`PxWRDYO}HZz>o z6R2Wy4-ZaZ7%9=(ubPg`zI14DSJuHHZtRaz;NMvIO4_4vR9l_U01)U3>~ z5A$X-n+6F9jou7`D~k3~>_RD^)%iB`Ni#6Y~98a!mUt%|kD zGI7t07ioJYj(ot0R|C^aZ7)^0`}9dt7YcBd?G8$bGF^wu!QrmGOVN}|`n(s-xGXwt z$PQ%-oF)-^WnDr$M7xO&Tt*J)TS0$z~M-qUcyDtCbI zE{jc8P2)*%Ucbjo2f0l?%ggMjxQnbck=X-|9Pc((*!9oV;S_W%OByuoIK8joYk}|_ zO_9b5lPWfF)Oxuomgy441~P0j>2a;MUZBUVSt*0!4Mq+*>y+NnpT;sDq(E`F&U7s9 zMcD2ver&>51BF+^`;>^&q(`tU1#LelPrGqvA4F|0WWhWy?6z zzE>1PE4kDlEFz{_rTc(0OcK2_r+O|bV9r$jG6HH8x( zoENy;ybuh|LFu-k?fS4$aI4(zL@q0nrrwN%eko^7Mb7ykqPE(^r?+i0kgc#F&mgL@ zeKhfZI!7BF^ePjWNVYxrN_^sh_XVaALw&F@@+)OVV@ue84yYN824lLs4$fz#A_iGr zw$(@YEJI>z93vi#^fgj<7RpGOEnt{S_5nI;`nSKa?~m|OQJric62Z+#m8e=g{Lr3s zdMo;LQD|+m&5MddXnMrNGdY`=`~ z>#%xGS~jCUmlI3W9>zjs^^$%W=Xw!RMxYjw9sn{q#z%%$?LE08Rm0`R<$o^ zR#u;j%&Ww|WZDjULJns!udH04L(OYZt0zUYhi*O_dqsf~X#u2z{SG@BlH_S7GG9k& z!5KD^#7U-U)fRY`8#;+Ak;Gl5^U(dAGv(3A--PHd8#iDtN01Ij>i=fs!OT$Xg(E6rDPCv`QtUSUS&@YS#X2}JbqkU?)HLZ{ zCu6<1V!4SnjTjTmafwK`C~K3MAmpaO{x>WaqkOM7W3i}f74EacB37(Cs6AH%qgcvv zVR4o_KImfYB{sw5fWNDNLfJ{_BSG{zI~ghKPn6wY><+KF{cBfAApM>AGqa45;MMOd5EiWOjg#@!n$OBN(B_s>1$7To)OT%5tF_eXS5zw0VnxN4T2xwT3qosDR8-X8=W}N6-Fr8?NtAy7 z`Tc%Z!<;>H=FH5QGiS~`?p))r#hG%6d#Kk*d3Nv-Ybfn?ZOR%#t>r26+g_ovMp6;j z8J#cE4QVviq|8>Kz%VzB*m&^KaBc}4dwQFgIL zJR0=Q_;19J!%kEg*$%>v9c!pHH2N>7Y^*b5CYvzXE_l>_q0HE3Sqv;YIbl-n8U?n3vi%-m`lYuhQuOjhP9EW2|ydp@Y`P04Q4n>dn*Zc0mB zT3?OLq4-M>4r}3Do#Ik#`ZpU6 z9m!)2gLX77PfX4jVDWa^h-lgASw6Ist97}SKF9PT^+-ax$vx6(f1d{v&WTHB8+pEi z;*X<|t`opqoH_M;(*|}!SynZwb88b8)n)0|aig+js^Oyb4SmrvSl#u_DkqZCPF!GH zWDeZM9&;xBODlq|1_x)H?>QOxC#+R1yTsDvwTO6bt={s!T{An{EA8BKc7d#oQO?Di zN3__uqbq<(G$U`d?1MW8{Q^n(L|0X{jSweXBt$K@B*8Q*XvtLtgxMPGrV3JB~uwCQ8d@23WqHZRHfd z|HajYp^LE$>4Nx_{A1+@oeL>z4T2ta$f{K#C2YW=+ochjp~#8}FKG z$?Nv8ELj{!%#gz8;Dp&e2erZs2<%{I$C0P=R!MQUp0QT8@kS8tm@o>?+1yM^&Ji`U zMMX7SVGWd#_~rG%>gny)EI|vrBcI<)I+G7s8 zpFXoq1sQA|HnB$+eO|6leV&8amsam{F3Yk5cUzj}n&Q1y#hiUh*NWP9p`|fqy9G;O z{Dh~hfS+brOIw6i-xLM5v9ja>gCvt|Yxs%8T0Wmlx6ZLviY*~gMA7&&~H0mGyzT7#Mx_{%I%eFSN`aX4ECq4S`N>pHr)u`V%bF1z9c%a8Yj;tpj z>p$7`F6;5Mx}(XaA=%Y^T=Iw{vsOGfsy<+wU~!{$-{mUPE_={%ow&C4vNJ(qFA!o< zOLJ8vU8&hN2F3xkM-EwC>eh2Phu&j#O@Hi@Ix^nbN7u9$$j?c$8=hnhY~9adi2i>y z$LbpHiGtgwhyHU<^602TVen6=B;EC1%nB0CMxx6tb7>obIL5=#g`*cV=pb>G;xAT5 zHWp7e2-l{boowpyE!W1yWqy824@`QlDQ6`wS!?0F)zs0m zTX!L<;7|g6->l3VFLB4@Lg`E_NBE0Qa;LLCE-vfiw_!cP!E`1*^@p|b9KKn}QE{0& znw-sTaIzHqlV@G2%gvpxzREh>oY5$2A8OU>k1vc2SWK^xTn(y~jUptW1)wahIDHcgsb`(jh*na;4KQF)rB@!9xKtO2CcgR|4^NwZ}z8>CbDViy}tj#FJdHTHEvr zEWa|JoH5%i*huG;`=q6o*T?K5B_WZ{PuxH5*@$JZ3m(UKw-b@OjpsQ%$ft8+$tNh7z$HtuKFG7U zqGGvmNri-WT^*(L1utT$Zi9Q~x@^l^G`FA>-$t1`P8Oi&Zeu+=5+1s z=IJs-Kl)8lMDu8xE|+{<0B^FUs=jWyOf-)^3uW||mX{ZBFcM?sxZ8%qBddhHn8g?# z2jJ&v_$fEm;LZ?6V?9xo6)vR5 z@fBa<$@NMW8A*sO%g1*zWuu?v#2r88L-uwdc)Jh8%8P-XXG>deeux(H>b96Sw~;&< z3rg0VJKBxmSEgY+Yw=-Uet8sqp#~O!{jh>fj_YDvjV{;4h#`D%Nc7!1kh)f#A7gOB z9XGfihKDr%;E5)5^gf4?q~FK3N<#%|s)NgoB2_>S{kh9SSben>OT=z2qXBo^!&6*1 zNsR0djCjimd?khW0HTqy$SMnzHTvsLu#jwa(dy_bM)Z2DuzVYrHo5N}(n6q?Tbbhy zCK3K>lf9KMZr+!!EctU_#oAtVP&!EllK&Ruc*m|1SEL6~Bx)5f3e7uaqI8ogwn2$6 zPkzYla}cX$hLuuTp~1)b>Lq0&b!Todu5032RjH%(q`T(BwWw^YTDme)KanR(g$bYZ z4Hn=s{GKOwK+#SYnl5K`wlVskN(!Pry%2)0Z;`j-H_F9U(UOdLx6nW&Wi9swgZMskWl7e#l8L38Nn`uJ>2t-ZU{D#})QsJjR|YH-t%Xi|5P9 z7cX@Rr7h?A4PLG*y^V#iE<%PBsf*mL;KfTu*VrG$s7bM;gT(3{oV^^)p60ybiUr2; zcHG!eC3D$N;SR*TMA32%*e7URX7*ai3F2u(c?TVD3-ewk+d9_j*WyqjD%y0`yu>%N zNa9%}7D%tSv&7Va8h`yVDe-rqrnJ>1FfU>f#S}nqa-A1uYHPs6yf97fOXHg~S5wDx zE6U1?eg3iw%F4a?498qtTptGNt|x}j61%=6=PROmM zxGPO8#<{R;+K@#~0E;2BvcZlN$35y#8(XRm`a>(tLA<#RpH0S#BG{<5MscbHO|8?? z;-}IM24e?t%rFLyzd82$ja_D$*n$1Qdc2)1J$|UiwvhN(gSguTE|h&eqQ9)LxLi!q z>No@?rNt%q)IC2-!`aBKnCKYe3)WMnV(8o?mF(|$Icv3x(C}2yC-1R9y$j6KyTTd zZ;W63$@l);S$D#af8C(e?SfyHkl3|${_AbOJ>{;7XRqyd0eA`i{_HVZj`;eGcdoyw zs4!>4<*(uvb!3p9@Vl#WcAoS1*N&Ka#C30U+|l+YrIrYOXyBe@CzrfD?5CG(dhN&u z|9YNMzZHDr%!_Z|y6(-@{ZDxD^Dn+T@=K+T=tn-4w|xHjgGc^y&i=dyE=zmtKfh6` zNbvV3t-kGwohSU4v{^6xvx z{d&)DtA0J^iAl9%j{bpC;}Xf=``1y~8z#K<>JP4X^7Ze(khNKiu^^?JJJme&6h>K|__= zF8G3XFFYyji3_G(KD&0u$al9xo<|=>{x8ja;_bPk9{FMGv?JI2GWz6U(5>`@KRkZez|Kh*|8V#@C)ehjIu`Ys zE%=#5RmZ3^ zDN2KM6G}dKb=;04?)d8iYTf7Guet{ms#x&P-TTGH>8;+b_h$cN@>{Qb0lm6S@XwZlrQ^Dcx(D$8}D18)O&(| z^Odz%yje2)i`43mrwkqOCfYqGjr_}>e0J=_BY(2u!Y9_PI`ZK)>!JUGKlA-le)RhX zpP%#lzm9uv!Ed*HN2yJMzxS!)^BZb97ryj#^48mD-rc3tfFsFg##Liq{LR@54qS2U zFJFHD@DGlK{tG@kaN-f+v9F!^=EjS>=Uw{Cxk^1C_+hJlIq0#}1vRJqVbep~mYz8g z{Z#NDd~wUg-+TSMpBE%_z7hQEwfmGBKY;vyJbUHh8y|07+OhodE%&~8>w`*NF8EEW zGrpd6WX5F)w|x1+ckdduR;i~1zh>pYl;MR3iU+KG@!Z7cD(_e73&B@hbDl|BB7Ox^MJT&prQG=Pd<0FTdd5N_7hUq+6?B_|E=0*L*o`)}udt zF!eLoJ;A@!+J8y^dvAO1g4@?!^XR%i&R6PeSl;x6rU8F^aa{XpPrc~*-m4=&+6a7$ z;3qBU>U`v!#=}d7^FAF~W)i2(7>Zp-#jK2Em|GYD&5a-PYV^~U0xb=+t z4?g$LgBQM-_)_Z!B?;)ewSw=O`_aj{A1~kUP57wmw;w+YIXo`-lG{gqck{5Hoq5l^ zc|V_=x$`Zh4hsI)pZ{opr(gPOcQy|@{`sv**W&J8^wso)6DtbzE1;2iN z;pdB#x?b=DPicMc^Ou@$TYTwjGj2%x=yRoB6a3}LABWy}Xy5OKKl9*^%TE9JNu^G} z(4U@g(T97JAHM7_PhK|n=D8PNu;X!*Q}9DZJkWW`b=x*v^4z%mz0a)whf=(EC_Q0E z$#=f`_nH5mleX~dbLO6L0*;p+6#Ttky}apPkEC2X>#oZ6g+KZPdNL!E^!;wGUw&En zMR(08tljm)`K7vk7YCQU@cUVq=RYX; zrUOmKWEP(nO#X6gOY!^9Hsgz_g5Pz^_%ZWV4*Sbf$EE%0xq;u!Rch)ng$FIMrzfvm&KYCipLr;IdaNDq_?n}GsnBzt& z^_<`t+$CoPg5ys`MgYi$*lm&Plc1dGpt!FXTJDWViTP96B za{;z>s_R!Yd2qvG(}FRh7X<67YMQG907s1;HD>bY@nc4fUeJvDiWlJg>;g{MM=g!V z3pXk@);HBJ4tbUbo0=R`QR%y{rvUS;!kox}}HS+JtMaoK{}m7XO*u45td z%G%1hU`?=j!O|uE`l?2_hPCwuUQmVQSf;3!uiVQ4ff^L)8?&iu#+vSehDr#e>D#AY z62NCvf>ru_+@VVbxBi=hx?JGkY(GBFKDAsEwlD(KY-Kqv5}#XN+pem%GIYoa5UD1P zqQx&$pK2(&Syhi0#c{HYg#*8DsSI44t1?Tghgzyy_O>c8)c4^xRW<~_O~I(_)Ofs! zgNvD(0!#SbaiDQjRYSu!uca{Ko)$i8!0$?Y+X5Xza^35A$^!lT+vYF(a!uH={I(1h z)i(GiA@L#E#M%Y5FiVXq52a=8oliL+@olSvi63sV{r2K8d(BoE4oNB;DXiYOf@=le zwo*0NVYRLMAr+~X=CAHsYr9nte*oKuhp05h9OEEiAkMIxQG3b@KL$!(!Kr=p_dFb`B7YgH*sIOI%%_5$o2sIrl zs}_iM&Lv3ma{Hh3*&@rvqit~a)udPq8>zlFuA zT^wojt*?sn!0|dhqrNszWepDM2SZD153NKl4@>KF{Id0_lEy1p(j2611G8`3)uqYs zPxLe;uJHRRv&c-*9u2-t`7mn@*6E29CW`emYCPHbEm-yB@!*y+ctY_Tqpy|j*+})N zNo8n|t?U0var6r>@$|N@^)g4k50#BxZ29I&s^^}ZgeMp%e`&pYDy%t*;HS9LJIuAHo7PN>aCk>4%n&_6!XyYVe$gAlTsH@9~}yo=XG) zJQ4awlm0OYvFCZdbwbb3vEzj4xf4BS3+F>;HGZ_k>H}%d>l%h7d!Xr zuQo0Td&-)QyVQhI)DwX27S1^4B~YqLGEj=T$Hv`nLx%x7S1~jl&W?aC`DyrSCO%)YOsM))KnWc z!^S;g<9=%6UbS&=*f`!wqWKLs5cI{yW!bpLuzPsFl0+6LoB=`n7>l)Y~@h?=~*uB#Z8713@k}F3ZNX*|=+L z+(I1JqP00(J!YU(wa!4`;?c3GD$77ADg@{eNwL8|scNHvQq-1HbZn~HYM>PLk&XM* z#@%qLMfZIJrKl%u+*3Agw~gCp8 z21-$f57V)!D%C(K>Kq$4&cg8}}z0_oj{e%Et9OL+6&FCK)JIO|x+e zZCtgD+df>WpGfJ4o~a>N6$7QHk8Rv%HqLXFMK{zyDQcFDJKx4Fw{e%-xO;8f12*pW zHtuB`_koT3*v1VVVdXpAKq=~)kxD%#rQd3xRJF}O7^BYCv8if{fl^e~D5ZWXDXuqA zs#G21-%q+qhyI*JR^X*tk1v+}$>AhmG55ay4ZXk@<21-$><8^GR8fc&tHQvTevT?i5Q|i~? zf^pSADe8kPrT#3qj}4TfrWBEef71<=q8*DWCt`raQOyG zQLg|RD7e=Rl%gh-;FO2pCL1V4H3P~J+)4wbsCNKiSV11|8Yo5O%)x0E!Ob*KirNb( zQ*iGa2>D*1@X{mGzHT7c7eFxYz&p;fO79#~TPe z9*{?H(+rfN76F2R1l?i-!BYSP!w1|B1Et`2kHT9o#3dOhMGXZsRB*!$gpm#qOdIG{ z87M{F1qcQRxO)whqVg|Rcr}i=LIb5JxOKP^_UNN$-FC;MJ-hEa|CiSsG5PM`?DE5a z_fA=WxAB%O@U8UB!XX!)8jl=u$)Dvf&Mo!l@sNv#7gPrpH7_wgMm1C~QXhTzK{h@d z+8FZi($GLPctRRkY-|4Ag1`L<3O5(%-~ABsFS7U!U-x!CM`Trv89jQ`>D5Xv?AtW> z1XvJP=JI8f5bnuqPz{S0*UBfHfUCn7yK$Z&R1cW<9G_iXxnc=mp2M+VOsN+I8uhQm zje*N7{Ni8>-qF)H#0d_Wa0l~jN8#kRgBhk#4FQumiiIss&8-qibv2&)0{sUL?nMdRZzSD?i+ z{XEZT&#+-0{cD;>PVi$-u38gIibMOSe(WgZ$o&4_kZ)h)`i&RO^?GFV2{N?m|9$!y zQ%}C>!N32fRYe2ARi+y9WE?Q0iv7LUzGr&bJbsQv578Ke_3og zUZ4fQogmOcKtlwo21Hk>zgh~24pM(r1Bh->f7JlUBTxv?DFU?sI#r-mfavb@S8agk zScO-`^0H$^1B!ztkH)SV-L;+}n)v?cS6v zy0*!?orT(aM7Uym`|}AM72Ct!?NhxQ26i?I-S%+Bj&Ra-9p0xe?HBevjZ$v2@8NatNcVZB0yJd`WsZ2l)cK z79G&HGdxESzFpzWHDUI|t%=#_7(2tWMYV{(4n1`550Tgw+`uO{Q+duo8Q9r?7iP=II7l_oxUx0B|0nCTXjv+48n7gA>?q{)zakYi3!qx>3ddw z_4U`(CZiomooGQDb~L}_c~97Tk0W-Yo!>gJJ2>uTNl4X}P9gd|q{Fw%)@obR(2NJr ztI#F~P{9Kh&oqnDcfeu|$}UaS1p#&0=uV`x%8B+BeU8L-cz3tA?uPD-+py{~K(`n~W4AJ`U+WZhr*OqSw!5$>y|lmBi8NFWRwNmvJ{X>pglZlPv%+0gv4`%d{~EGK z$*p>H`gU9OL#uVsz9cD^eQDp9CKf*J!+~dIA;W_o4!k7W0}Jil|CV=ultB{tr+4@c zz=WX`$lP~8vU=;{t`7&Mb0(`64?M@)wfu-p-h(u3g=81;SO z%&R-(7Y&6FMe^-0!E;aDR4d~Nh9~H2x)G8x7Tzl&Q70Qgx>j31`-nv~4ykRFG z=0I}`^+R1PLk_W9{l~Yz{ken=XnFJ2dczWt21#0SH+U#h=<&&BLfE+N@! zhCC1K9pJ3}xDDd6-t?!q1oi3P2d;hY)4!y; z$6@aVv7hPB{jDE*lS33~o!;$eH#U7TntrRvcYk~9ei`fzU`*wRYFQkZ$JwaCCT|z= zk^#9(%wrdu($_ULd0^*BGNkU8#^@3gxs3w}dqkHEuj|9UZRj}Rf}|1XEF65(ZXfad zs|OM{clfr1ed+Cc62jgs1Ap#K4>zaX{^^xzQ#W6g8m>rhe-9)7=DpAs9qB{lN_sNk zip?G9kvyhgXHASitVMH-u^{hP}>vR46xnv2X-}Yy2TIXaOaEOuM>=! zf?@LQkp8j*8Q|-UBA75?)2_L@ixMySdAtlSg3$qI+P2a z0{XNYBsv;C!s_3LMzZmDBVwmj09NQ2V8wFow4}hQoW%h#1O?e`(IyG&v`)}k`hc>l zy@&0Y$!-)!paY-uevM29(WSDI8FP$sT*5AurUxzQPsuX=B%AT-0LC4zuB#6RUQjR` zgU{y1cw4_x&C#u$lrbBD7W7z{ydSXT9 zWF>qK|z z^zEC|DdQkCAjv9o`rb8g>PH|B-FbxcJkFzRuPq&RumhGRt$mXAh@KY>-Ad;hdP!Z) zfO)h4TdSdfGIVo>nr1aCMwmTUGkrxm1|2Hn0U2Z9K%^)7GACo0se+leW+E_anCoxi|J_^$2Yr#a5mZxBsBNiyNO+e)2A+x>2|0mnngy--7;FjA>Ixx;Ar`ZG}v}D zG7vIa!cBq^!myKw-r(EHU$hGN30>R3o(x-+J~d;NIHMrhf>iUcN@Uxz^Q#8lsoR&?wqIxzkAcA=Z?IUds8vk_yQ z&|D5H&Y^1;tayQk)_eI9_M1(;MukW{7vB&4M5NXF>)Kn_=`|5drI3Qo zV<&uS+d9zTiThZwt|N2Jo_~DFxzb~nVkS9 z^JK~csbQgps}V3_kj6nar|3tdkJ0F(4!VaOgf?Kf*1nyrC=FaqH_Bm!GzrtACKw*5 zT$V2gZ-X-&yIjc_qgkYWRCbhv-qFGK)_tn^usw@J)h!aaBpzPrC0sMcsQTgc(Ji6Tu73yzyzVC~FXV-iu*z6GN$i8i4mTt^f?a%8gYD8Frt=*3V%I}y3})=gf{ zT-XbJ2c%nL;)gzZfZh5Bh>&K|Is{iMB6-uT>!6C-AVmfZ+Dzi4xnd=nOs9cX%+#H2 z# z)$YZgSu*UL55AX{U`22B0zfvWO{??qlXRO_mm6sBz;GvFN=tz7%}gE68LaVC_=k`p zg4PS5!T_TA&dN0IOk+*NP8Us(%x&u{`|Z6Y9!dCSmTT&qv{eJbQpAqclYrQJN?2+V zo-;U{BlhBEmK3@I!_v`7lJL#^w?oqJ83(Za8L8q`REgz@(3kE~&`Z{Jt1* zflv&DMGOQYWfeTduqT!ngtjL!*aY##U`Uo_r)A#$sZ^k2bruWr4F4T;)qwEL1UhaW zkAL^3Y+B8b%OYWcG;z3-G~t^%+2k-;VPVm6lc+#9K}wcM-xCk~!-4Zf8dx!saL)&v zzgVINNk5qOPRa`t-_4*Bc+=`>z!=#HOar8WXBd^)dQ`ZRK=@|<+fm;6*xo;FT3zT! zMOab^@C^S&M_t33bqb0~nFlPI=Vpd9#Ts~qKQmh|3=6|>;p)dUML6%~$HLc(5T;%) zb#EOXzM0Gz)3JIuAz>b&@5t+XEG+qiZ)Us{^@cqQ0IuhJd)a0cEXPNp^FMm$Hlfm8dn4xqD4PoWFz z5PRS0X)wAI)wRYbPFyPN6=)2QT!CIGLryxKHgHV4j+065e(W-qD<}RtL7)QuT1V2I){96lCTt>96F6dnJjTzqoP@Bl#x6M0|F{7NwE~L zw2jhmtliO%5g!;nELJBXF<718vNDYOb4a2+oJazfV*sx8et21CO5!`% zk&Vr={g&!*R=~|l*^H~{#5$s3nS@0Fx_^VAhf#Cued2_1T%PLKM&sh8q}6MZj2;p} zVR1&XpilW?PFjKt=W*D0U-(Q@e6Aprw;sO%JE+=+GeUP_*X;!0YtAUQw>9dQDrmL!+?G!(60fl z2h?A^2nc6f0lfz3T8ZVD-!9Ox@Lh4*6|o*b&4QZ>XthA|0Id>eF(9tbXR0tD9&pW6 zZv(nfpw9sDXj-NkieX)Io&iYXHUfH7rvP-bK>O|3B$#4d%XC0jNbGb#x|XwTh!;5O z*rk9p=MW&BwjIzfB<-DmMgr=u9ss24`!t~IB=$u>XG`oWcI-dx*bf0|en}WH+9ky! zfNmA&DL}eZF9OnKIlaGrxgt}I2J{EvTnC74m#KaMNT+=Z&|`vYK3uPD+i?cy$$Fd;rt<>?+KK4gvEIpx^ks(X#sSP zKo0}DSD^KPbekWB;{!Je?nFSX0+j<=D^LR<&H1;0bXnd6)F!c~9&MFs9-v1AR|80M zz6Q{D1jozxt`g|CfNm1#JwV#h9EL+TT60oy=te_xan$Bn(DhfB0@^0fS{rx2je8!@ z?Co26sX*Wt^o84;4;;%fOH8S287}uw_gBime>~nT`SPv0cnl+ z2#}Wez!NMk*?{VV?&=}>KyRk{8K7$fw;7O5@h+g-1oyR#8-RmCKN8%DfHd7i8!7^% z^IZZ+w`wDxpGb<;fbJ6LUx0KQeF3OmaEIgIkxnrPkdDQyQr0`txd_#YMJPBT$>9v1 zc7danN$i!tX3C0TNBYGtz^bW_@i!EI)-%Qc&`fy}1}l{ah_oNzZyo-os96~Z?1yPc za}NIAKf^*NR5ajy?f|}JvLwJO`bXlAU(Y_uVr>zc(9?Dl&f%wKz*?!lL(N<8RR}?( z*@&e<9N{ahw{d8i*y276 zB+e&V+_XxUM2VYeSXBOfY&S$g=JZA4 zp0jk=Q$ECnVhDqggbLMH{!I6jmb3M04=5YjGAjFKADkOrEiIx_H&JPF>? z(%j-a@02M95CygPT2wl;6!aim?WM43p{2nlyb+=`b}E$8+z%0v*k}g>=Fk00N@%FT z`yeTnsR$vJt{5SeYX$za}McDSoKm@SolMN9!7fWT^NN`1jWW zVepc)nIflXnX>aZpJ+{NLS(U;X-kf@OvCz6rq|gq2@9+FIo)6t4!Q?JLA-E%d7#m= zxW3VIMs`^lE?D=^%*GcO^3FJ;2Ww!f9yQN{KkH$hlq3F^{E06$a%%ysTK~X*3-2pi|Qn!i{fNEJ`9w?X z8bszqDG$@IA5qFmlDERNhPIUAB{9Pggm4J^ZnL? zsuiaU4!{6^jV&;&31HTYZ8%Jd;iU;{Oojk8;xBgd%s~vRl8HY)Y##an?CT%kZx{Z? zMl}!9kj96C##0XbkgZ#$$~dpB%yE!j%aLF>orE z5i{BSHI79dNF2W>gG*c34^Vp5Ks%A$xTFyG_()<7P<(ySufIx$Hy$TvoM{U7Ch(R| zG|Au?u#Owh)|A6YBJk87rrKEV280t3h7eK)%?Q~6IV5N`Af(lRP>M=}RnoY01L3_s z8#mm>iOZUac29>6q?KNZB`kZZD)ZtOFvtp<*dx}-h~8 z=O1|Cn&kFlXv&G8<|ZaABD{t{NjuyLh}lKd0dzT)MBU$b1pE$U6@*6M!GP!0yEl$ zc@CH?7v>XSs8!6J62XI_mmr8>P6CEn6TwUaX1)tE7nr3k%;mr|xG;ADv&x0}4KQn5 zm^XmA$%Xj{n0s893>5S+7v^kW*1IrsfZ5{0Gy${2g}E7+eJ;%7z#MR4UIm654UxLj zC&_eS1|l-wg*gtG?Jmq|q(Mz0e0%^o1Vu3O0FHEFDuEf|O0^7_>s^>;U>Ih0br�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�l^ z9A;|1ef_)(y76I%rbV9ghp~FkG~{DA5G;nPaotSUGw_+VU%+QEgthEqVrq&`-YZ2+AUF9BxymD?Rh})Ot zFR|Ur)jiv+>GUblk$M`tij?-%P22qQyf^1yfQgY&9#f;Eyl48#^SFs(Y;+EIoW%r> z08$QB%5XG!bU4rmj@f3jBRaa{4R*9GWf-=lr{gF&57#EZ8SJj%k{TpQ3SBDVxcd*)jm$6~EqveL8;XNTg*#z7Y?O^d)qOVc`V%)Pg8 zyz5tN?QTM)iJIdsX=$>1Q+8tT)1eRIqTSCrsEU@PGEKA)5%)+sGXL|T%F zbp4QWPe5KdSK%>|-;R5~A-q4p{ov&66Q<a3zsJEWN1r?+Cw=b|a^ie*^>M+>a$XG!th4=B2*V7NOw8b}vlv$@&_ zsY{+0H8{(nZe4U#(T)?*k6kegM-`{w_-^VVy&bs`F3W6mCgZS<@v$f~&T>P3gi!_m z{un;T+<$|Qv7Yw{{Nvz5zMHbp)y;JN9X^XTOQq%=k>(wd=AClPJLQmf;WzS^Y|Om_ zXTvY$=Wif|cj%W@Y%uTSFR#{aY+1!74n3H9ti0N^tYW?05W9N)vg(ccpS>Ef%;2sGG8we#HxO?Am(IruyP4FH0YkqW#;f<_>0qeyz%4tvB8(# z18>jIX_6P`I~E6Do1a>O_vVWdlS}cFIL%80!$w}1Pa{0G)z)-;N750V0btsgt1N|o zW6>Aq*LqZWn?e~n@j9)u*NePFz2|%8>&$!RcGPqTRCA{=&I)k9(Sz}K`@*i)mbNCm zws6)!HjQjR4+8JsEhL21AEuA3#4hlQ4WEhb4*|GoX!qIhcY)suKMOvuV^{briMJrf z^lf$Kaevqmzd-#ssp<_7?jnQwdFy}}qQAG^pnhI1V%D%+Orl|HfK-kj$0foi-5iI< z-G<{gvNzamj`59byPIkJE61#5y7LCDdp|Vhd4~Y;qpMl6`Rk8`vmH1lDYmc!$DnE} zqLZQbR`?it^HT=DNLEH!snlSDw;4}U!;WJNxiQaIoOy`UJVe^~D#ylGIVn&B+-la8eWRHXPIF!1Asj6Zd>*l~Mc(>+ zg89Z9^5;uva_^(DoLQEog?0rYAKIE_f%`~kjyWgxUB<;n&z0t8e1z}rZgmR)v1}sy zgwi}2fZFoE#l&&dv@J`g$ihLacB!s%jpVz zKaKNa+Rax19fj*l-r=(<$|b|6i&nL3z(uFB8HUB3m+}2bRSP`I4VI!{6bNNpa0KT1 z{Qc1UZbmiaLO`QJM#639npRf^XOCJP@R=S~NtUnsaL}EJu`AQq2%kxu1)mK#W&^v~ z#WcYm55EQesqk?p+s*O%eE4i|+u)-bbJDl_Cir+0wfj!^SZUtBmUO2Z-TtBe z0F1TSI>yDngN3Ks6dv3*NTI1Ue!a5}ky?jHpBgB)61tS5b>a&FhM+LHCp4k807rk? zoMJ7&LC~qQKSw&0%+?8<4ca=o7GN&UM+ZR+!+zrg9BX}B>palBCii?MsMp8AS{r^o z!%8|4hjj@6&inAD;Y35ugIyVS3w%~ml!fk5@Xv*hM`fY?i&+-X0-MrFr1mG$!I5(J z8M%~|_XGskvC7*7)zPIC!NJk1QS-GnHK#iw3L8&fvkMke#uJ@3D~Fj_O)B8$z(?mK z#T6ZxF%yxRiAc?)9L=PhUx|C3G?P`=dvF}Xu?v=3=V8>s;mbgNs{XmeAZY?hfpei*g=P3Odj$tN-Ze4?*yMIc zyoSpS@j07S=84CWXR#MMmrQN5v)lqt?;a))Mg@aJCJ<5wGoRzS6mdpt zHPd-Gjs_fmh}LSiE}mCnoxLJ|t|0pTk#z;;9??!7a9i>7oAe7#P{Xn|+Ny)kG_b}~ z^D&0M1vUIw;BUj{?9Hw4C&RxDKFiQNSYBrYm{&R@K-5p>KOPot0py7Eb9W5UUq0PP z)K5~OVLykQh8>NumCBuHP(MC>`49pL?C`JbZ1#kO9J*D3- zt~g=S#fRGQSB}r)>COqCUXpC3j;y2G1KQcV<;ha#S%M@(1r_1!*@BqHXoJLx&0fj6 zU7-wLaKXRS>l_%S9}bKZykAEPOxwcN)&@RYi%!c^qq<-V)LU1;xT0ObaVP+c|9JRJ zLm_+?2(Bg6;VzLjDnvSBQEsJ?lSTzkLp3LK-H2M;j#rQwUp)&C^6lTz{J5yZt~UvX z%X#{h6F&PYUk^wU5=t*h_V|qXh=zwbsa-azi$Sao%5k)y2%Vo9BhfxOT55LaJcp9y z_>DNr9Jl!q&2e@?(S@oELyPln_cttB;>^=nG*z9gjUC&Y;kIQ6K8%gt>@ePF?(^Lj zriJgmFg<+Ng}LAAa-T?ZpGdnD<(@Ed{&)%N;GRz8rkZHm6Y|zhfU%oHHe1mdB!*!Z z$-MmjA@~vJ-{FiM+tJuHueGUdZr8jtyJ>feXuD~Yc;^^j^oH;X)Ci{GO8892*WlAe zS2!CHsf~#Ajz_r%jht^Ie+*AM`DHX&>EcXGPZnb-jV@ec7^aq2@>(8##F^6NFPaLf zwL-Y`z*DM7WAYiKf|g=D(b6=@SgHy>7|I7-a zYMeV`&EIoQTm4zij9sY9E>Pdbjs}lWwC%#zNbq16ilmdl&X6km?#NQ3zn1Ery&RkA3I&p9kpRhfN+wo*cw?&F?@H zF=k+wQSk3vHW_0Eej4~&Z{lT`k}xzqrZu`{KFYex=b?X>dAZNw;}MGY1${x~mSGh+{%0?r%ooa+WiOkI?_=vJ?Gb4zrYg_NcW49<<}blb2Et4vP_lAx z8qUJ1at>Z>?)Cz3(HR1UVL7PBan~XE5og;XzZ6h!+}TpVOkP(I83Nl zc-c0wiWeLHN#q&R@)Uel_NU=PskaI~(}x_BJjEQX$x|ZDQzGs8lw;4QoaEJjshCff zPpTnKtWun~WX;yZtLu;*kAuMc{+8F?TRLr9&QoV%Q;aRIy^opIZHKO9fWT_U&G<4X zS36=o^R_QuJ#=;dh`_YX%TLK$IymEWW@YjZ%P&S`Y;Nrkv~zbR+aG@Z9OuSF?uQwM z1AtB(ALZdkT(E;(fH^bnsx9@E>aDXag5Pa$Cf)5ipJ&!Pv(PcTu6*S4PAcgzENA1m zK9W_vi`={x%zSY67R0uEFyYzT1Q_d>c6QdmY=(|*Ue7}Kyiq{I*nJFq6whv6B*Ppw+LWtXKD+n8NbavqVl@V3Y)%^#Rv zCiC)Sc@?!JuU5k#$NaK+7HwYd$GK>pF${|`uWQfa@FOl|o>|paP<>mwX!tbqjGuL3 zPBPE-GC9P2l$Eh015Ir3ew68DKC!?s&2$$dA9xL4g}*=iOX2g}68OxY%U%8uY5oxD zCsLK$Y~<|i2b#>@wgF+kZeIJB6~?)C^9{|q>aEL4_`r?t?{w|1(^bm{V)46M!%41s zi|zyRe5q6zJBQ`=1Hr@=XS8q&!iKF8Z9tYh-IybY9l36_aR`t;HY)=H}=KtLdyct(}GPo*tKgx z_zY(kX~go&G;PAc{B0Em4-0X_A!Qjp=fIAIKNNlu{6hG{;B&rWID8Bzy<+&BhZq4L zWr*Kj=)N5ODEQ0aW5%JI*E|M3<2lBaBO)zFM7jsRa%+v8KS;0Gim?|y31r4zH2gns z6yUH9S1lP5%oL8h`S+(dc;V4IKZc9i_A!yoez4Kd3H_2hxSzIV*|g1Ue%RV!9g94oPiEc< zoMr}E7i}fZ#fg!T-k)Ju`*3OAttZvM?^z zel&uvA}xgp8UHf)Ov6>iq+CLv18X8RDUnV-DYp{x%K3$G$tv!DlysR7uP#_fqNT4L z=c9`a8HPE|&in_5;744jqwQ+!>}u#}*VXeu{Z=|`qR`}n+=~S3DdS^D88i_ZGbwf7 zfX{T?XiT)!nTSYDM5MD1$~_2q<=gP=Rl@4TB z6P7`5p3J*`4N1!qJ4S2wSje$E;6WEHeiwm@KCNXKW`8k`jd}PH7q+h%cv`hqNPS!S zIEZnk<#3V}p$muqx=plAWZY3(Uklsjg8w>vrs+Ck>#sRm6RE9<^wGa^t01qOD~P~2f7Iy9U}UC=b)V_F+8F&xXLKSpI+1=fO}S?wubeZwOhGPLmFe3) zMT5Xc~NA1TjOe;sMd8zF;zbV}p?wtMn5mP>NTgUilFZ@RZR5!?sY;JS* zAyWGgX#=3#g9xIWwNGFQ!Aw8ugmI)d!tstP{xJ%pEj3;XBvteAela25h|14wdIk-aYwu#i(L^{u_+!4;h9*1#$D7dteL>5dB+niEC{kKk zAKFfYPU{i?v~w1GHvDuLlXNrg4)`op=fOt-=VVRy82Gpm>SnsS;IptdJNpx<{fX56 z%F+JH*(RZ4>zg~g25SzqMVkPY3|2*^=mFniE7Wq4mMMMY#O6Y0ON>` z&tHWV81HY5HC{7*rLzi=T7^iP0OjsMIOTk+G%rtS77o<>T#i4=N@f;@Ve&YL`>t;m zJ1L&7S$f=?hH*sAQf$mJ0zTtrOUbNZHPOmSq-G&fvnWTiDCe8y%>*}C+o3UbZ)REP zo5hxvbnotZEG@~*^13n08^$cZGiEu(nT1HrLZoI^K=O+824+iE*+N7xrjcT!_>zL~0l1Xcy&vf-_tK zf_+@Lhl}@f9IJ7>h~pg`@8ejH;{zOj#qlwYPjUPM#}_#MgJT!8hS@mya>?#E_^Cq- z4YnZ?Z^$m+*pGvvRF3Cp@du$tUvA$Ap|iF-JeRv@`28h3<4qMO`CV|>G+H@^ftr-g zru8w2i&gV+LA>+AreA?nTg}$DDtGqZ*0NE(HokPMpUzdME5q`b$}z3fL(8XfR>ode zGC3;)gQs-cBhy=sr+e+`=;4?lm9uHyE0q9vE0djuOmB9MmKo}%v)5tmyR+m}yWhU1 z(reRUecK*eKUKJBx~;smgY|bbyv@7+E1&7zLs}8GET7|YvgB5BH{meG^7;uX0Ll_{ z4A8EEFm&)fk`Nq`ZWL4wv_Vi6(1(KRf&MJ$44}UVngjHipjM#23+e*eEa)PjzX`e= z=o3L#18owt0*KG#v%DvON(HS0N(jQsjo!(Eh60@^s0wJTpbntXf^GyFDdR*OJfBe4ZXmh@=<6toJz{}QwYzyB8W z3Vyc=T8rN&1g*pGlY(fwrv&j@pB6-|)Pz(argsIg=VK`JK0tpGGzjQDLHUjw>NsA_ zmvWZZzfBM=Mx9w=&kRA6@!Lnx4E$yaIvc-z1w2ndQ(t7&|89r0{uZyA<)}`Mg#p( z5L;6)#C|)TY&q1-gUaMn@@kqBnCb0pn4(fwIN@w-uik1P8#PSL1dQ9 zMeHw#Ievg3-VF~H#2bYJ1#$Fvkf6ap2Mfvv$`@1sbcmp#Ktlu_19YgMLLjz^Su!)< zE(rGpvMF7b%ubvqTmoFDpmLzQm7Co@zvH-;IS-w+O9sd4nO>r~sj=(0!ouq@ajDF4 zb2^)5cVUlsIF{nfjL!)}?zlNkvlh-Rm`W0gA=7aw?jb1doRMMogLo)&Hetve*C}OP zI9f3?<4`l}Vn$7lGNZZ7ASg3(*wQF7oGoEcX4HtYqs+*A zqRgl#BFvbgbx~$m2bx5X$PcmMn8M;mqs#~ttgy_;ydYCtJZwzS=rA*U*qDhCX84HK z2vb~id6XHoGRTZ78Z&0}OHpRbx)3w0u&{7*kSQ)6K4Lg;#sk+?SU7S}lo@qQkYT7X zi6Aoynn!m;n4;nL1Q~=HIpT>RgHT1qZ%3ICn}Q5NjVfZ(;8I9tR6&FpJ-jN)j5#C1 zj2Y1tWDxt9VJoA|@Moh;@!BXeI&Zf?dZ=g2&@fX}Sa@QT8D1Y{iswa{5f=rS5hKSG z4tq4pjD9=96culcFvAM-u~N)g4E2A^u!&J-_!&{AxFgDpygkZ{dN9h2UK3`9k0{y@ zWrl5yGQ)GxR%r^4!xz1}3g+{vl*}?@W;|A`?fMTsSyDq5TYHPlBEcxYXzLC{;0~ar zSC!l=w2@IgC_<27YfrcC?E!CUTN`Y9k*$#7NSk9Fx?KeY(*wgoW*<3=FVqywMIba? zUQiD%4Ki=z*Xr3VriTr)>OpkguJ?SH6W7CDFEitnfS&#_J)Gvu%(#I%aJ;*9I_5s3 z>EXOuX2#Wsh|+Ys2lS{75j|vz@XItW%dD&k%BT%+RZk4~)3Z0uWM=R_%BCkTriZzinL#Vj zJ@xeZ>bM?0lgP|?9luu3J~2ImM23=dog;sSA`s0B4zV*c*t1$agJOF4$Tc&gXFFqM zIApQ|*R_944>e?F^qigpMP@yIZF&aB^zhMaW(Kd0?&>W)yx|4*&A>D2%UC2$!D2V|s>)%zXT^9UMOYd&kE0 z(0Z8}So()~X>~&bdbBPdB{H-C^_+H4+v!0Wt%FC43?dNAT{Pu(RJf=OIZ6(f)uRJ( zsUB*`%wTP0UfgxZ${BGz$BE26{KY|cY)lWI8fRvF9lvbHUU>J@_P8Fl-g@n9h3SqD z=+SFu3znH7wFBttJ?@_ql+iSE@SB;zrIwPO?srh=qSub137G<1l#OdxEUsdav2k5_ zLH(kjjK+oL70AG8`N*^p;I@ z**3N!uBQ}dGBb_|=qZWmDH9ocT_fIjV_jTNxyS^st1PAm(IYPA8n5g3yZ$c8b&VI9 zV18A^^h^*LmTI~~i~sX#JUtU}CNpC*eyx2b#Pn2(4D%hAk6D<=`lSs($F(gWY*%>Ue}D6p3~CM z!koY@i6)0u{z1tJqHKb-+Ri&=DJ)v?|e zupMhY>0=D>qHXU&(GzTYy8?Q2Y;(TIa70Qs@2vyTnMd_pfHPtHoFCJ(NM!b<61YDe zb=QM&J&SQBJPuzJ({rK7;Po3BV;_9OK}+I#z9KTO1jYat#`IhyGDD1>zumI*S8+WT zi_EHko{M67E)ki5Mo-IkKEg0CYM-x)44?klcJ-2&o^Fw0p6-ET-m~YF#PwV%GK&Iw zx?_4S6PW~lA?7ulcGOSedSJ3heq9#RbGgXK2oNYSFLPB~&lMuG3BUHbE|2NCQe>!& zGH-wK#Lwe;z9ur8jSM{OaX{(d*mx=a&di_%`r>%`jIBxRyi8<*dX~oYTqQDt@k{s0 zPpCCft8r71P7fNM=R_e{p!7zf3Ylx<+Jz_5JFYo@+&BFZ?pUlHa3!U1Wmo z&$Tf<*NF`84(QhW;NL%rU)S|G6COie7t?ct$PB_SOYytM4S}hm<@p;T6KsEOi0Qde zWE%0y{JN=d_%U%kH;GJeoN!}I53&boUWeao94F^(JtMB?TOzXozqTBHGp1*S$jrkp z({teX_1oflZWfs>__cag#Pr-EGCk+lw?!sspIc&jZWS4hezS12-t$3oJUzFG3=4)$ z&#f^%-w_$MLX^3$=w@_!(fsX`y#Uyzq{i2?#;D-i>K!Y zBC|AL!|%uR+$}N(;um7xD}Q+TA8|eRh)l4o-W}8PLy_tEy6zR3;C1~lrUz9QHq6B@ z-Rf^$Fgl)|`*0@QSNS<79ZmCNBC`R%R?nj`J&%jbp7^C3S(FRKQ9bBlab4^1YxO)H(}T-^%s%*K zng7|+Nq>p!c~WG8dHO_5&r_-gO8Nm!Ib_^|xSpp)hI2B!@1}byre_t{%#73U%e<&B z{1Q!3^tx7y%ohCG>sl4l^Nh%FBuV%E`!4=tT+c6XCNqOu!C5`e#PmEXGQ;r8RQ%++ z!;|!1zZ99F0X@&g^gJgrEAY#>zFqq73*+f|USz5QdY+5vStBxb{Cw)AcSCX1J}-z& zu>7ov>3LCP2H}_PPyhK6kw^9X3TML4iC&E9c}Zj{s042O?e{0?cV5Psa2xefOwX@H zW+0Wo)&21EB;&E);7qtY|2n4U6_FW>UtUeu4SC1Muj^Hj3AW*{#Ps}DWGeBC?C_4- zcR8wT)IP6?Ot8)TZA{PWB7;GyxX-_R|B$$zH$;Xhx8?Bln4aH>OwaZ7_aeg>t)Ab- z^spBD+P7HcSOdPpQ=$AN!rzSV|w0+=~)-j^V7sP#>La~rkujz`#57Ty_^dtH(Mf*!W8=EbFb6q?{W@J87?v*F z=gBXglQ{-MGjTHPZH_tKFtZ$k?{kSe$1&JxP+YTP&NIv$$6RHYd5*c=Fs+Vx z*f3`}=4Hc7cgzQd>2QoO3N|#b*5C##bmu!}j9~^jhVS~Qv!O0F%pFeV8-{twG2FM5 zZhyycEi2t~j^Qd@x{DmcRm^l3I;P7ompJAD!`$kaw+!RwGS|P-ec#E9G|W#NbB1BA zbj&4&S?ZYY8fJxKo;6IjV?H;`;f~2R4OxL>1{-FCV~#V-JB~>h<~_&M8D@=RS`71| zW4aAGLsWqha=Op}sUso?`~?s#oFb;W{? zS!kF_$6RNaA326=+35N^=1IdG>zLmfW;e&IH_TOz`KMw0H1CnEntf)7VHUYi!woak zF=eq(XBy^VC$rEnzjMsj40EkxZZ*sUj(NZ^PdG-triw&f?U?mOX02oTnt}NJj@i#J zZ#m{z!(8r|gkgT>m@^Es$}wCMNB2#~+-8^?9rL(h9(By`4C7n%GsBE>GJSZ10ap)3 zo0$U)bGBnf80IX;)ETDJF)fDK1&lU(*BfR}$Nb1JH#p`6!whrG`(P4CkFRHlxz)^d zGS!B;#W4#F^FznnZkW3q^DD#b?wEC8R)*r*V*vg{^8MIHgULs&^O@7ZtjrBEH!&34 z@lNx-hPm4@Zy4qo$Nb$e&pKwm-Br)yju~Z`-#X?j!@S~{OAYgD$J}F>>m2hum|P5> z{Hu5uO!rtLxM~Pm~}&g%nC4AY!is<2{4J{g3JcW6b6|rQ2K{JLczx@$2B481uUr^L~u^Ta5WvjM>!=*j?;-hB?|X zMTV&bqxF5ZVY(c16PRv{K6&jbvkJ_0!-LF6UmW(9qc0 zI)7oShO_O)tdI=PwSi${dz7T-xCM*cqW|?^Gc#sT2yRsQ=v4yb=PIK|Ly@}A=y}Lp z*Xu^cXZoN9&=otGp%s6|#b;gxb9jguh&p;xh?xMUD#R=SQy*fU2GbB?{tf1w5HkuFzA(fr0CRDOc>v56 zA?716*MyiOFvZfE5xk1&U{;1?mV^0uh*<^Zxe)UYFt3J~qcG{hJ8a)R4PgEhVr~TU zVTgGF%%>sdOECWoF~iZ$WrWh)0%o@m^Ib4`A?6J*2Zxyc`=jKBm=ZA9;xLfr3&12o z%>7^{g_!rjOb;>ppVWz$ub+j@asu_sQobsR32jL zz*L2ptH69M#H<9PZ#-GeZ-coYB$JJP>8l~87>vHPZ$q66=FX7JJz(w)F@Fa0(-1Qx z-@bWh_0)pVcN;Bp8JI)S==xXsBpAL!>N8)0VZ-b*;|@Vf5@Nc+>=j~GgE=6?^cjMC z(-1QfOi76808<%a?gcX?#HG{q=F z-V~>2JR9c_a}^j4bbXm$gF!QHnB$~FD_F!(f5w58miX<1W8iG-UupWI1L+NUxM`TEN=NmoB1oeD?vse`@Qh4Y4uQz^w7{&$aZa1Ms z#tVkpAfbx+i(^~&2Z!jp6%6-0La~n%84})yMvpQ7e3{R{BtkMnj?_};%S;8scQAeC7BE{K6HN18k(RK< zbUikc_#Q&hiHxAWN1=9S1T`NCW-`wCan*u(JtT7>m_$hC2Vho)WZnc*7?RojXxzVs zWQxJC*!gjt0cKuE=0-4Qhh$y`Qy!A}H<;{@%uy)9`5~ERF!wo&LD;(s%+^q-wP213 z<<1@$%dZW|j02M&V$K8eV2HUF49l2aS1@-z0voOu`a~YIw;rK*6(U2z+XwdzbUsrF z<~lIG#g-YFcw8GHhti8*6kzY`Cmb_OSH|KG??r^dki!!h65ejdi)WbQW-VBtf6J%H zp@*ZlxT{2{e9#}`U|qwiG%)Cz1I+bcXboTHr(js8edbj#147IOFm%35CW=#eh#3rq zSK-Ty2E(iMnJHk{*7?jiU?zr`%fVEIm^;8sc1-X+-@k#)%)n4p+=P{xbHCLQy6hYLkSbHR-;0*i+N|PzP~%4@a4BD2^=s7T|_| zt$xxERc}I3CLHQB2}MiM4es-G^bz*DmYYzN35WVS7=7B#P;Y{7~1MP?QOW+5*N;;rf3c+vm=;&_$S9c8+VGg+%2GzTMlft!{914^n4ux&7BI(zn8(2+Ld@%6 zSX`+`HUA5Yb;|5sZ2yj?`QJE!cg@V{SKk@5!D>Oym{63#m6p}j7tAO_dDk{NGh-sq zp8PZ9jyIvUg4OnC8W^?!KC=uA>7DHxV?Kh(WohK87z!O-%)%-_M#&OS3}r0!+xGbe!=9g>+1=EM+lHJC(*c>qkg zV>aNgapM}Q6Ei2wm|QZWvU2jsiW!B8)A0GiapQ(1W|okYKZfHE5s|+drUlP6OgATS zuA!l2en$hJM9LQl&7aM!?d_f3xTem|_Rd5_U0qpic?G_hSPGS;<);?cH!WCD!E;sZ zbIaQ2G$j&+r!fVEzGz8B0-_puLq*BdsTFng4dY8Ht18M9jC}^>8yYIgYisHo%4%z- z*4Irdt8b{PoLb*dIup#~nQ=L&shm(FLQ_L$p}n#MVJmR1W>WZEO|1k7$#ZX$hT76o zD$45Pe0fQINt`X4R##V1lSI6xVnz~na$Uvrkdlh($@MeiDJd-}ZYnfPR>kHhiF=t+BOX zc5723GMSdwk77<9$&wS&pe3wnen;10Cs|t2P(#gbYxvk1ln2SrN?ck=eJw6;3X6qN zok*~B1U8h>@NQ=slbDdSzg3LeVy4GXVm^(?4{CRr*`AP*&1cdL%Bja>vepJBeKe!_ zHg}rRX0w|#r9)fbBnuE%%n)Uy1HzVWC%d7sazA#q>U?aUz05< zon9!Vd)&k%C(vHwl4jyeNgzlGg81Q*Db#SM^%$-kXD339y>1DkA6fHLjf;VZZmX)5 zV_c#Ai#4>mT2dI|oJO8nlyKt40*hk|_Cdnl@z~p^rM)e9vVsPi)za43xwt{B+0fCt za6v;yixZk!Qcp?~{y)a0HFRD0j3Z^bhXov}pF0Cl{O+GO|BQJxw zG1HwYsSrgjl=+H$!U;g7l!(Hzx{@-q+!NSu!lptNB_j(;wY7Wh0b}aXUMb7K@Q4P3XK$RTCeB*XN;12>t*f!6ZGo?{p(a$|k_n)s6iHKHzUCSX?9SQ7 zK%)+quyI8$L7IISG-1$CT2)&%38MfMufS-ks&;C9@-rAqR7@zTYM4-0QeGJy$DCSM zTQi~IRP4#^w3Ri~POGQ>h6@`zI+{A=M5No&O6p6xA%rAU#}!G=>e#O+$r%YZrwN~( znBCs7IFUpG<4@QVBNQaXolan=Iei$c98FNAj%YaKaKdH?Mp5aV{S!tyD4dWK*{(Sa zQQI%4Av&(m3HfzDMlv;iOXBKlk!k!QD%^PlvrSTRNeC1sLZx?n3%god+M0aJ zClXUjSP!%e22B&N<2XMr{VQp1ZJZm_GX*W#sl_h64dbgyCSah>d|+S8kI99^+2hLn zL&~%63aP{Y_HRf_X@yjKYG-#8IfsVDT1lG9SRzU*0&R~GF<<$KsDh1bpUZYezJrHS zjC&(@$*>KQBU+?oikx6DRJ4})O&FL*L-Az$LY!zw6?As{!Zv((t+TOhK@0ob1tAqB zCgO3`;aDq>ZXK#zfbZkrBTo%&3+K;@#XsI%9BtjTu(K`Dxra4MYuwp{Z&xn}Upq3? zwZOq3;6vIg7gROPMR&KjrV05mCv+LMN2+ULLq2sr#Oj)6FYH{+;NB*t>mpa2U>xO$fRq6T3b5m+v_l(Zc0p~LfiyQEaa#z(a^Af zRiveBal`C+O|#FXAKqQPxvRZ(Si^z^O~6g_ z=IMz7TDi1#hHKv&8Wy&($!K2KhK{}~dcL4A9J+^bS4>lC*{Ie)$78x9Gt`cxJX|2z zr^h0Vb-Xi9lh|Tc8Pioz6u#7$CbmPVy71o9(L?C864+CCro6Wc>?!=P|1vy_+kX>3 zi*TrjMl#1$JzRwC=s6tfJ=PQ<)3SJ~u<2MkRoHYaohocPR!$X`7Va&FQiUDyUxXd? zUxXcvusxLu6o&B7xA#ko21%@9SKy#&TG4)D%zp!E!v^{E!v?BF500SF500iF500yE=s4~$1=HShjMvX zWQelE_rI~SvZI=kwJJNTD@nQ9VO>c|+YalB_Ss414noa$iu>J|(UZ$1GieG*R^LFk z(c|5AEcTwHlck|Y`AACAy0ed^D4kHrQkGV@ND5QVD#TKiN-|kWQpzT4Xj9B<6tEfu zay9)~j#$#u4w~#*(hr>E;?fTsxmvlC3Xh3Hb1kuJ>?MF)S-_gxH<=QPZM%Xev+DLK zNMhOTQ;?)d-980L+R^P(5NSM3;NE7ZQW?INa6MSOw~(n#-CM}iHtsECYUB16GRd$g zJQp2lL`ZWYlqZ1)srED77IAz5B+w~i!j#CGe@{*H5yEp5&1(Md=YW4(*( zYMj;Dl;mvFJU?jaS;wfF9wmb+dz_y1V~$N22IePS%EP_5PGN@Piat%mT~e>Jj;XZw z9Ja@3Q%nX$Z5X@e)Zu!JE_yH6YdlE;1S8nd+nQ*+|An4lasnkNF!LUiNPaUDO-@Rw zpsJqkNummSkqxR%=Y}GxKFu(}Xj0uRL{;}77gU$_m^-R}djbX{>}BX3jiz_;pz`e+ zWk#dg-oQyB?qvj)BF5fB1*7VHU=xidtq}1j(ix8=k1EZO!6?%hlSJc6FGw(w?H+Pb%N z8ucV6+%okf=X9ldk`uaEJ$xd#UOjv!vSdAcGQ4U%d~RGrS)!q^bbR8JQzn&GPAV^t ztp6Q1eB5xZ$r@KsQj*}Kdl9cpluxXxDKD$7N<_X=I&MVEf^j3bmOmV#I#D*MymV4c zRaueiKxs;nYWR#{nDHLJNrbt>@ zdE%7v>Pcl2ODlSeM3<<$NRYPLs>xO3C)7+x5iGbq-32SHOw`m&sHhoVlg!d)sanVg zrL~E&s!6p~mE&uYL=;*^9u9X3tT3@;{N(YIlZ3Mi%fmsCuO+4B)wShS$%AmEc{oIM zqPDEGrgVH|vJio#=iyLQiR#j-veHQ<$x4I27Tp92FRcuh-^l99@X7cB%kcT&8q4sR zbXKRJ!3!+okOdr|np?XTE@+wqgq5zXiQ&yn_+F*&yl^X5(9(vLVU4XV7dCYkBof2< zp2v*SN_uSWdJYq8_fkqm8o-otrX@^$-ft3nmSNl2vxI3Rdlq7A*|P+j&6E;;`3bv>zg@VO4rBJB+rj&{nr}Z%E|gdIO&v zC7+MuMacZs$feTvAk=&bnV&wHDP0rPB8VP7H#~>reNr?=Yk&xQrXE|#ahXZe4>x6IDWPD%Xv`TzgF z(cxxizH{!m=bn4+x#!-wGZbXvz@7GlKfV1y>&D;DAhYe0-HaYj`_sdl z+QuYc)>?3G^d=#re*)9zc}cG)p3CTSrX3Bz^&^3~RN?qavY_YCd+OEWz$Q%RQr!V=_+Zq&h<(^KK!;PK+$PnO$aHkL)UhRAU z?$rZxn8Fe5MsHW#NCR``tN!%(e*8nge5Y`J^nL|q=hyt{-3EFUz;t_E;#j|K{9T5M zN&wUM%?!>>52&X{0dt+gQ7(d>Lk|Yy`dh&KqHtb%un)4!f2*4@`E8jm>nD?M#y*qY z(ZF1$aDMdG1M}89{`B?*y*=LTX3WOP!;9V&+>QWq;l^Nk?*X&zd%^T}2WG+h{`9z8 z$YsDhuW(-cJqR)%0Q2_`B|R@a9SnM}0`qT$BidCDcw-af{E>y^m1k6_o=S7e8 z`x7vOH~Z5o1HCXX=PR6PUmX1}RK?f;%*CHddURhh`jW9%+(_aFV7B{A;!Jz$&{J-t zFiK(Yr#Rf?vKeq66R$(MHcR6pw%>}>}ei2NsSz&_crGcyCj&V4=^nm=G zpfCc6f85IZHLjly+@HP*rgxLV_|Yo>nLB}d{cC@ET4DU? zv3~yy+zRd|h{H>M`{DMrz`XK<#PtT&t-Rb)dG3$hjF-C6QepcOoNnzhjO%yiw_$f!+>V;gbS5d3ezq2YM-BuI?dm zUi}d_srv$$o?H9VWB)M-n1k~q&Wk^m_cUPcP&hySo(AT(ZT#u6yrZ|xF;?N^;YDv0 z_&W`l`+7>8UwLzTWUogEZ6~>Pq%XgX8W~J)qQdy`SAghht!vn{Nih)3UiDwP97#bhhNNm zR|E696XzHw&mx%va*SD1B|X1o+E1Vy_dw}_NhCjU+=;asX7|U_;Fw5bP%X-|t1ejXxc8s~p2|V>B>_lu4YITna#AH82+{oEN>7xN#*gyNQbSw!1B$R}IX)3TKwX zA(sz9??YgoI51c)6K3Za^KtSp={e-WeAfW;r4#4KcO&v0h(_}7%HVt(t8$D#{)ChxpUObffWt!YFdC^|2W@ z-vREiMZxrbRG1)oJtAmFIC*&K3;8QJRAK~>zg^}pn^E2oz+Djar`L|>p8=+5vBc4T zbEC&_-dVt`X_Pp>c)h(W5#BuVVoZZS>gWDGZ^VzcCeCIdk7)Rpd;gxR%?yUvpYbVZOubzRNcWlWq zK5Uir{Ny|>0sD-ThnJjL-W9;St8iZBMVDaYw}D<#(({w^bL6`jx2FTM_p0E0*8p>o!kP3O z{otX<_ikWzK0?w%v0U|v{rON}E?O;dUhRBGJpY`+;7@V5=_$t*9|8BzBmLlB5N}I zxs4Y{?<|E0qIW597arqJkMW3S6~>R=cewc>aIYWhPj4`A+a4z|LG<QxJ&qe=z&v|e zFul)!`BmY(=)vR~d8g+XE6)t3_g7%9RX8tt~+4s{7A19n0X54MUQ@V6qr>P_|xM&)8Bx(P2q@kvy+=~{YhYMzA%{H z^T2$eaDMcsMsxxs{_FdHoxh>3{bx2mO+zz>K^yxEv<|vsU4}%E5de0;cCx z{`o$Le8&Rw?bX5gR$h~1G~wjol`re<1Yn+4IInv99Av%)=G}F{`A)tb<3XH$`M!Xg zNnna^kT|b=J5b)kfcf+vZuw^7gdEqF-k4)7z{vxTxwem2aJ>tw~aS-}1GarYa{iMX%$1@pyc@H#B1E%#UiSw%8 z%RsNs)6li`~OSQOzf>-ddC8Dv%-1NV}JfAFz3JRPj3`(cPI@06o*@Rzs8-9fqU&8NzdNi z8sq9w@d>SM-o?BNP9CP59pfYNcK|SbHwM!y0;XQ!{OF~CnfYEYy;Z=Rrf`1r)&X<$ z`@!^X2If(P^P=}U%KHH@_k0jc?+akMeJF8W^w^&d0;cDtV0u%5nWJ!C^j-kH1TfP- z3Z{2BFvlyL7d@8u@4&47IGElIz-&-BFM8CMcY(Qeb1=P4!2G0eUi4Vr9X`Q)JWd{d z`n=Ppum?DKc+n$&vw<1(Sunjhz{C{Jiyrwq7MSqo!Ss#?=6r?oqjv`|fBqtv-d(^v zt8iZQSl-WodEm=ndRu_m>MM!!qQ~+M0p?qU^Q(_NzlPn#$-|2t^=}?9Bew+e7X_wW z;k@X*1$t)#llUf>-sQmDrf^>LSl*X``TMtS^fLWNKj2&74H%>w4mpZw{K$Me4eGxk3c zhsRv$^}~&+z*PQM;_Uj8kss+D4a|Cl^P*?q#{IzD|Fb{6O3?dSVeqFo+{#P;bm}jd z7y8wo-XoxJ3NY2bNgT&>ZuFW^QI`U-b&)kb>@zK`cRbPaA02SA#q-MKzciDook$klZO|*g`oF2FtfG^rgu6p zzbTv-y|+NGVcT3|dM|%^%=dU;-s>%KjElI*c_pghzCO8F|15F#@nA-;ZpZWA0(0$l z632GxMvrmj^8UHT&D%?ym!6WJ4}kee;qaI%J&wC`2jm*N3=F1M2~2~+`O#|u=J*}_ z>2dsf2QY6c9JST0ypxd8SHSGOQ!u^xz#OG;Ui9eSp9RdLJNwfc4Ss$AW}jUo&a1p9 z;>H+Y?%p++-siyVwwph_<3Mk3VAk#KPw!0d_ckysgCx#t+)X?A6EN|?66ZDUW}N>u zVAc(hIL2+<>f?Icet2lEk=RG#1_0+~H#jaU+Ber&h?58Z74#f-gZUl-Ox1o8=aug@ zxV;45R_`-P;{5X62+V&K&MV&t6lAB-xyH(|lHNqkpTl0A2izs&bBzgnaTkZ(PG;IK z=V6;C=Nf;($-_(k)}p*u0dwF166e)^r-R0kz}%y7M7z}oY20ZhEjpI!-gx)7Lm6pm=O^3uNi z49twAKRxcJkObyVh4Z2}1N8n0%)qoiJ?={~3z#Dm&YT}~_@|_I1u*Zo`_toiaQo%C z#xR^b@R)0PsW0Pzd0|B`y_}V~#*R3H=HBZBGm1LpeG!Svn%<~xP+ zEAOwsTyRt{y=Q=VU*Y`deGbftNBh&G{kt2OXBEziUIA{r2Fwo~!SwcBlWR=D=~o}L zr)9t_J|>vnIlx@4a9;dTUv37b@;HBbJAY;~qTJ=(vC zz*H)n7d`6VJYZ611=G6{n0pk?kKUuey!V%2di~GFcm^jAKYC+RjWW*Z9-B7W8(#7I9#lJSZ2p@{+%q*X0`Du9G;g zc-;~_zvuP2#wj>?;4xQv9B-Wq%pw2qr$>8r1~6ADoLBws1A2D>^WKe;o|pVcZ||GX z&*0?YMQkzU=3sjF0P~{4dC?<(n}F$kYcRbqFmZ+RqDTIY0_O7d{`6Q+A1jO~ zF#d6?U(P#!4%~ycNqS!O%j@4Lj2}IYkA48|gWLV-aoyK|J93Q?IC-F0uKe}FjY+_i z-Wg19IWT7^oENm`w?vLGM6dmOmnKUhQK&Xj}u#!bc^p z7k<07x64596=2ej`_r3(=dS|heTDNH|FV9!eInN=eA1uZXQ0;%%)F;0&Z|E<2lPGw zX2mo9^!kF{wF-kj#o<=o?x1%kaQ8mzPwzZX_!5{Co|8DQc*%*Nw-K187yRi_eis1q zPlfZ7-><-oc*&pMb)a`BFx$TD&tEh6YXs(nSN!Q+2zoiM<{B5{3W<;eJJnROnVubs0o*J#GcgZ~P8j`>=? z4{uJNX1~F9LJ^W{LCivy;edmru|S;^g5)Zye}d4$P~cN}QM7 ztpSa#KZ9Mv$)g8OH$9-8JR6vYKli7{IOg}j9Pow2;W1ZwGjJmW%<*6P(;J27?*Qgw zh4Z4fJ#K6PW~;CL>9L=l2uz*AdC{YvxCoeIwgl5#56p`S=SS~NV1D~1nBM4bv7P}Z z4=;MG--CcT^}Aqt_XG2$!gghG9@j6d2Ic~V^P<-eH`W5P{)b?C9|5z~ zkN)K)y}rN<`YD*+9AMfM&WpbS+&BW53;q*K?-^h|Q#dbrHMsFTFrlCQ>9PH;0Ok{g z^Rm02gWkwru&(MiNzXn`w%gryV9r!HqTTH7-njk`g~6ZVaBJsOxL1LDRlHH;T!)+) zpYH<-TX*YjjKs;q%MNk<`8C<46vh#No zFjp#^7k_L=cLDQ74}bnn2Y-XM?rz+GlZO|7cY@xxz^vOQgLC6AA2hZoj39`A-0I_X zT+i9IyYVlaJiO#L3-@~U>~7TICsLu0w&qZpB~potp(;Th4Z4fBW^ql%$vP~ z>Gkf@-Pi*s4=;M;Z#XbB`ufw`A2gD{T&i$h^f;cr7MOGU`O{j?ch(3{!b||a}>_2ycF!gz#P0|Ful`&xj^Ck z=&c22?N0vmxW4Y6zzo<~;{5E(zQ7!^OEA4NfO$^gyy%Srg^a3#76-autlV0|(aInMxA`UnGqy3u=+>kx| z`J+9p2WE-FdGYrhaBaXe4hg3BS75GII4^qLapPuSZX4=PZzC$;V_+WNTjIDMj9Ym- zfV+6#?#6Dz{pp>Ke5-+Zdw+?ey>_F=j`_wB-HjW$fgTR8{$o7oy$8&|F%rl5WjA`K z<{|z9%%KNl^3Bw5#xI$T=f_OxZXAV^hdDlXjE@e+z1M&lGd07XTfS-V*9gq((po_g~=lo-JvTKQ|od9iTAyQygx% zakvu!?repnfA5B4zBdE&w!(SkOWYP$=XBV?W^LDXdpHnvw4^U|v%= z_IGY_W_b^&?`|x`$-|2t%duKv1Q7oSdW%zB5@8;2o3f6Mels2%;rO2BnLu5dMGxQ8 zbl|wYbL3nXxj1n2U!tABaeY{OCvYssx=!F&j$5;E+2!DVX(jW5%dr=5(N5rm|I!KE z9-wztCvc1x-`WY>EZ|2bd2@hlwdpF{sjfqOp-mral3%e@vj^UbE$2HdK|duNIh93J0}dzpC0%2FQ9l7MQc`IAw=2 zIL19L2Ih(Y+^)b~56lw^XYwcPT819W@fI*&J8_P3i~z2CBjOu4dH9uM3NRIRTvj>Q z{^tS{Q8+LDSdJ7hXSm|Xi9E>F-xWq*6aI_CjuUsa8?L0bZs%)DTu@LjvaG1QqP(oKJX~2+S2C+`k4R;>Br-QtJ9YHr zQKR;7xnEuvsx7Lku8ow2itA@aDnfHZ6;sE!AZy!O)A5#AMSO8Gnp`!tva~T$x~etW z5^pGtEpA_mCrU$QMfDYR73IZ+d$gpMH?$?wjV^>DD0U=VS6W^jDGygi=9QO*BH@}) zNqJd$s5U&6Tv{nrhUemeQpeTmiqfj0%20TZ0?J?u&cEQSGrCb|MyPP%yhL)@!pc_fi*5ERZu|x*RX#`XRxE-SEXuqmEGX?y190Xt_L)^{L- zNGg^#@^O(xI3G7*TW-BZX(u;gsi1xXzwMAC%`d_@U+bcl^D`Ax}O- z%=I`gWjI+Josj3BT;(hTYUM#wMCvBcKE~vHc3wQ@Kv<@H+T=CyFL|VVdLnI9*TE|2 z8OA82^dd(iJrL;_q;*KgBRvEuMkF27J?yN|aU{}0q{kyY0OQ#mF;x~*jyfM&gfi_Y^s!OYLsl|xX5M!i1x!t9pOQpp&Yf& zT!X)>9J1jv#87Xq>Y{95>4Z?2r_15i=Cn|zqrC~GfuV;`Cg*ds$U`?o>dP!~MgBuR zsV_Z{>PGvblEq6%x5IVV?2aO&uOOve`zKPC>oufKJ^BgPVb2V!toFe#(%*s;G>n+B zRX!3Pkw~nmDcahI&SdCxW!hKGa5Y0S%>H1;jQXNbP0?I-2Sv^4ig+qLW6TV7A&l07 zUo#dM%dFY7x2}k{HZEyzZD@|A|LClSjuK^?3>U7(p$C-5J~%hyys|5LpoJkcffCh+ zmMnA~JnEwL0vw^tHuI+Pc*XC|Ys4E)*TM1o>Hm4)akRNu#?3w=|E~Y`Jfn98* zp*3v`FmiQG8P&M+SIGoh+t&)5Xt%>)q>X<_82Ncc(@Y=}Y?3O@KE|T_T7lWhm;NY^7}8E!-BluIM7QwF_o@^H%KC0wg;=s%yK zT;Nt3*K|cL<*o59%VZ}gTplvIwm+N-j2a_L;H5^|qUk2lHpn+`HAh>Q3b(HxF5Ce9 z+>|EE(3~ypFULdC~$V;pi?>{m2R9d1F&dw zbD|-dP9$*+23K4j1-pBOl@*8G{lCwSvdtH}*k;O=mURizYrCSGx)h?#vS#$5YY4V^ zjkL`)lLMhgw9_5pZ)vC3<8N~a(iOe!4IN*LheJ@_C2hiPUxS}^yG;{+p1LZ=Dm3Oh zDsz0z_8A{Rv=E{8Yg8G|gf*b!0D~ZoU$I_|zkgQ0tC25%&xAmEoQ?Lw--oE*`u?-F z-;46MhmbiOnt^|5|EE}fTkQWv+|~!{hwTg;2)}{X$Dn<%&c-68{hxqz3DSv3Q%DPu zo`w{w>pRXyIt3}aqiIOdcNj%T*$)&W{Tyit(mr4{gcNPiC`Vd}^gyHuq!ma{Mv7Iu z9p@pPgY+t-VWhVstwZ`Q(s@XKKzcAzRJXAZDS3xjI%<#}ij;a5Me1zdgJD!(057yp zJZM)(!_sP>i7y;nYHd`G_Fa}}ZbVasSKWzb9{NL?Ih?Hu7|lwA9-5`Mb)}U-msbD( z1Cv9?8~-cV9QVJ2&9VPG*c|h}gH1Vx7z!IP&*4MSKG1jQf%NLG_EVO2C%P*d8hwDC zI^4Re;pjm0u;Nhs{kys=_C)A0>~0qOuo_TQeHgnxjuY51ErBhQZkrg_Gwd-6w=PT~ zXq`?*md6@IKX#E7j(}Z??uu==@)C^kFF0|KhlO~6eWakz2%mLmL+4=+vmTo@G$t?;$}p80i(XhRcBz8u;xWp{X~02zkvPTy6(Wp}zL|60M?Rz@0i z!0vFP{tXOde8he!mUUT*zTtq^t$-(y<0w}FqQ5q_0~PE5COPcg4s}?uz}-^ zw)O|F&4@}Y!|^m4Y^d#RZLwrzNg~;T_DXAVuOcFE$b3PHjr%g(I%)^E#@!0Sr%K{% z+>dBRWaGA$4Pm%@hV5GLUqh2 zAQkmTb=4eAQb9N{@(6%h~bj zo@I>qpn8l6nEd5D9cljZif_l)v+Ja(~*ur3ftZ>11b8xjw+<*Af1Qw zT%@RPMmamKMtT9#XOLcqbQ98xk$!^oGNkN(FGso^^1lM2O=L0Ykj< z)+LF8Vbcl=mzBnrMBAIw5*>~o5i^Q{DV4XT#gvN|iQPcr%N@uJf;okS5yatB?JcoL zQ!Ltu+1}mNZG01)8_pd!5ma!z*y20Z*Fui!zfVr6BwX*1_Q0g93nx4x&@)9 zDJx_g3XjI&@5Pt4#u_naD&^NN;EBfgQjjo4nk@QfAmO7&8GGV^XY(PF4#Su+-BK&d z*mUDri8fPZwm$Jxj0*Xs2oYJ7t zssLNNO3VI~s*bVh5oKQ-t>5ht$a!D&5H|kFtQT2U8C@A}K^ww4na29oIJrw<-G!{c z9!_XwtTEo+V#Cf&@2lT>lLTlp@5E*Hm_a!nHafXaAlMXYscx~T*m zNqH+4M8us<`~x1$lBl5nw|5Z&`M~0I@Va1 zSQcw7NnqKWF+vH6RJH7}CsobeZOh_A>4H{J_p0!C3U#s#K?LYJt1OO`pNc3T=W9ob{gx&5Xr#k ze&s3%RXHAPU$n~Z!m{M1#6&MzT5(~49hIDghk$4<%7xaHmWOL9isqM8SCy5|jD$;y zsw&E>LXqm)(ok)A)yznF6;{+%6qTS3$rcTL_YR0F&mz^5XhT!1u?%zXFf!tY7@&9! z5A5wS-kOF(=&n(vX2I;wSn`%Vr*8*kiU)jmvzj_u>S!}Y(_nkvQmi&@Z(Sxh=M%D| zFRc6ZS4(czC-7VtW0GjPJsHE2AE|M<$m8n`mM5rjrLh!N9Hfg{m%`|3WOpKqY{=+J z8n-@lwjp`QC)dSq@)6^S1h^4ceUjG zZsLAXX;DpGsMHORBMD%w_Uwv~6_BqebQgfKqS+xVIh6)L$u|;S5p9b!L|a=E=}5XM znOGq_9*!S|v%RT-1Xd=t#}Mk$&C{;M_FooF5Zas)i%BuyoVBVgk#35m;wiWb(A4Zm zz#hneih>2s7MEDqIgY=J<5B4gOO^iW{u|!0;EG$?CV^^YbZNW+-RWYC`{{LA93qE3 zG0m=1tMquOpOpTBz87Ne#65m9Oxi6xVX zBy>C-Tbf9U-U$VdG{;&o=OlB%?36{{pga}vG#2nTGpnJ%ythC75(}oZXx>cWbkhqj zhG>T9!LqbrADi1$T3uBaL2n$ctF14o6C=$?@qApVnQuDz z0ZqoH6qvBsI{%c}G!7-z6>th`(UW(gUoB0vW9a7FuWqj>cT<#S)`mh=n0%G_(II7i z#TE4-VNs};?pka%TpQ<5=kYfG%tthKZ*51#0=@|qDXOTMRTL?iRa8|Ks=!Q|>e!{x z>0$#A@RnF>IwG6>?%6fRUT9{OsJ1ZX1Y|qe5qv=Gk?^eYvN~g+y4nv{g~-%(ZGG}^ zokCNW_sf=nH4}TuceQZ@2fVxpv5FA*shS-&bH(HbsbH|=D zjgG~lqdSXXklY**F+KR4Q_Qx7Tf;Lw*1+tHON;7?jL$&N%hrm)MI<;DB5>9=NE7TT&(UwY4F1Ou?hVv11&g!UG{+ z*+F}Hf3r(#qVZ&TYr_;)866Z4w{Nd(_7!LL66oQid$++FQEV!g!$mi$LI>4}R^@HP zv*^Hny9k(+?CiN@S5q6BD?A8hr(N!fL<8falnVOXhD38STobn}__RHX9c*@S;m&DdGQ+ zJbifdKcLY;xeApS*HcPou5RISB$~ai|mKd%phqYwK28TwM({Sak6?KFO_`sIu zIqq^Db=jMrl^uI=*%^5c4l=5d86W5fq>{B`{FQk^wO2jIxt;4s$_Yoa?8MA*xFL~5 zNCy!rD6PwoQ|IXn56Z^r@__b*w3^K=F0Ts<*M6nboxq#aZr%h(rNr9&1}7HbfU44> zifV+g=2lnKSB4D6;rN)%b#OjbR$W^Xiquz?*F}m-Nje*HL%(pj0 zlZ`1eQm@)YcJ`bf9X`s;R)?Gz#wyrg%{m-!DTyT+uS~C!vj2YK<&qW_- zE*Z1%LJ60Y5J#8Mp%!X?8@Te61Ro+x&dDBg_elk}>x=0qZiw`Favl>6AA9B*zV zW6>6$(J{jf*;QAXXi&9N8*3{;pPMqLUuL+rTbEL)_O54%`giR)G<$V zs8k|Rmb$AVagLX?;a5F+cJ^kOacg*n4Q*^}1NFLOoZ;qhv^9pv1L8{!$rz#>Lb6mY zR>6+064Fx`N}Sr-_UHr{GGssE)z3=@VO|okL9w1guKN&w^1Uf@K?^-m(-+V)E$(Au z&1?%|FOp&Kpdab*Wtoq}R<@z@Lp+92Q5qs;3CtjtS=V|7aj#C(1S1S2ScV_&3KCwG zO2_f_Q7DJe+lA6?aT4iB#8PmyW6sv;oGix;@>DNfkLsYR)?u z9dCA)G>XMJNZ&e+CsJZ14=NEBA(~7^SBW_c<=)L!V)1P^USjcTHJ&!y)@m}gTt^Pa zyH;qUi0`2GRV&bg1ot^w2O1*Mb(Zf>-KMts8Kb*fU6^^;^j3#_$H~^yea`9fC5uP8e z3spu$s9i`}7vHPJI0RsAHhW;0I&f!J8;@mtPY~VllK4{22#4F3EQzlap-1MtjZs=% zV##&~#nHBs+YCR9)cVWRyPFl2Z0lpm;;mdVERJP*g;*?YVNtWv(HNXAdZYBNh=N>np(nqrH#k}Q_AV!=(K6%4poXHMy`trbXjgIld(aSMH%;DmDw0;Mf;0H7pLgE@2YO9ag(~)mW+wJ z^z3_P9!+A2USlMkSb+dQ1dEpvV!;Ff>TwOg-f&Tnz^flykZtc1_)eJ=vc1I6cCNdV z7OEKLJeCxTWH@(gVL1Y^D4)0~nu|CA4tOv2h5oEWA5SgdP^N3h=H1qmrJW*h=mt z#{je^Bpz!RKYp@*USbf9H5#Fy0y2crDh-9s5MZ1eEj^RZ<8HXl4e2~wLUU`+6t`o}a zE-=h0wWS1Gmeyd=N~!m$^eQaE;%xq9a9Q-+0tRu5)x<(-S-fpUN{p9jaI|}!VO+V! ztXz`NQwJ6j?aZ0<9wm$dYxf`t}Z z#|loKh>!GhZ4RnXQgFjxa+D9vI09A4D(h({`K|7TT`-5KC9g#?E?tP==ALY8P!htUZ;+ z_PBUAUOOS4^klEC&709Ds|>WVl2#yZy6fg-u+XvWN)R<5$=PQ=F}+$`QH_PGh4Sz28M`wVqOb+|6WJ2jAs zqq|Xi4NB9--kSXA%q(UrmRLe|G{>5X1+gR=ZzjaP*5Ag2z4W_5N}1OfFv%R6S;Qqh zMWy9j^r4w?>9H3_g=~h|#Ox$s&&<9uVP0)DmfX)n|0{Zn=iJMTEoM39=UtcbazlbY zFd)UHAx`_kA&giu!WfHX5W|Mc5rM8J)}_$k>~Vp8X+x&mcIi0gtAsP>PEd{^v{+o~ zhHFLiZ5IbA+ScZ()6U$?aR|ps&Nk-+XNDH+-C18Q{!luJFp5}P6GSe11VWN7eo3S% zfypqIm;t|ec+Vr(s7b7dCF`-jHq0kiFAFQ{m!rja(m*jQ7vBU~C1VIlHN>!cifqYF z*U~mS96CI7xNx+oHZEf|Z8Wv%ajFowk|vnVkUSM++o;8HL~&M`Lr*Vl1SvJZqTW&z zKACD;O%-|-*=nf8&@7HE6&l9dI#0{(hW4a6z&5%$dP%jbt(?JPSBDE`0d!t2vQUOy zbLCL0DKAmGcDw3a|bJU#opH2zENK8ECai zS6OD#&o#v77SKoQd`d8m4P&^{sh0=%>Y19h)e%4USJ)K;YWPo!PKoz0#0ajewrFN0 z+yk~?@rJJ1)>WHyFO4LI!J#HMB%54xCF0t`ab|v7xdFr*H7WD`0H+1^U5K-tk(VE? z#D;4T*gYmMza16V9BGHLVUMLgxWGMPn(1BRcR&2*oC1~s;-xm6*pDSI ze`*b`ltj~z6yn)+Ts*leE;FhVaSQ4|MtS)=48jKWUR$A9Up^OE+z&Gy;_LSj{iP3h zzj^sPW4o835$1?jn>ZOSOyuRifynoqdMu?Z zsScHug|Sp8FMki@5s55sNOJkV*hD)5WlZWf;p7WoGOjyJ?x`?Muw1n(_PZ*n=DS1{ z@`Vm8jL*v-fO6YZ2X9W~<&Q@s+g#9qG73r8VEQ3a!o{e|F-m87-@pqUzU3G*3A>BR zI>LB;!Z-vs^YSCuXUJ33nVnj&p;TV}nW)}Kq-8V+vGS=6$rLPTgx|`LghQn>LwG;5 zG;|Pl!OqKn5lZAqy-TkX8nqy|WF9tKMSQR}mcqU_B?zD|jy5bCGexXeGbgx}YO6gg z_8RVWV;ZbWUj9H;g%P~nlZ-EJhh`KOLZ}!qrV{PRhFFoljwNS#`F%SLFDy*RucgEy zF}$^sm*2Y!kFsL%*fc!W)9taQSTnafv+}%rG!_`8`Cx|QGCbeo_dj1)sQ6&Xb2~|= zor{ArEEMC>-(Zs2Ol`K`>yMd|0EObsBC;awHzx?Dm*cxn!&%7GEAqX7XWq-tEEzW=?zK z!MEHV6b_=LBxLF3P5@2Hv^GD_4zf05g`LVn{H>%G(*U##q9P~kD;u$HzN4quErf7o zhRMdce1X$`*szw7gRu*k%1354z!W(JB&^rr-O-`d&%;Y}qN>-7aAGY^pKbCH`*!E$ zPZ=({L-@_;_0W0wz3L=iA7Y1j2qtwA%jFBnAz>r$DKK51N-PE51DF>edgZ0yQek1{ zZxMVKynliIqO`nLTV94DLbbK@X|ReSFaIglUY)I{6J5e@)d7_>R(6432X%oHMvMNR zQ`uNYJu`xRQ$+3VfeZEK754WNz{upgaPM(H7s9?lfDqM$MM0wCny$S359d0y*JYYSQ2Yhk9s2jj(yv%NRJku>#G4DE z%jdF~npm<0y-||&DhSRBs-K@3{|?oby_}Lrg#L=0NQsDPmsm1|85MkoDKCF8 zszU^ucEFFr(NqzZE7p}sCrebP@aj?#hhw)h9@%;qXR{JMvZ&l$pf31mTW$G4LTlG% z3T`@X^eaZdrL8HEEtRHb85X(u3Uc&hA)k>!xG|#<@yin{|1HfoYw^B#`EPds86}B` z6;nkeb>(w8g^Blw!l5dRSa!nwk5C~tcMYCTS+!8c?Wme;7=p8PfyQzarUUZwXZra! zcEe^dR-Uh@m>$sYe{`DQe`=8CO&%vaLisr+`7s%Gr$@l~9~yD$NfDRE+CA}6LicD2 zis!>pYBv>T0d8t$I9ikIH8I~_*Kl6pR7q9hr{ zyT$64sd(zxDeAIZFsa_>(y!)7%S67ls4^=fjT9b#e}<;Y{cNy)E`<$L+7Mn=Hqg5% z31JjWQwCWDe?2-5jU7GBn1oC(oTW1@Z)w5qdRT{sm3=Bl%rUsWl7>KQUjA!ZmO_L| zbr{XM){mt7t0|(+F5F46A_$_fO~cmNdHL_vnjChaA7e4a1S1=<{$aLc#|6)>Y(DZ& znk@;P5W7ha!3u@wyqTouH_)a>;8f}o9pEo_RHc@iUTRe_lDK!o@0N%#X)L@=5 zsgXDqKOwfI>p^I-T40LLfN(t@M}fCY3N9F>%92$Azegu{QTU*uO#!(I(*%0U)k#kL z7Qy9LurIlgn`wl#{jp!wc8Z0d3y0}nUE^|BSr5HeHA-VL!BhZ$8>DMBQoIuDZnwvi z7a+nR*ug>vYz&2^!*q0hSgKj@Z+aF#$7P;Pl;%q8_Aj-^TZW?c(RV=r?7bSyhToY- z%!<@hFn^qvzh-ZpEw+Wkc34R)@?DaI@69c}ML&9o);-5Gj(T58bVpBV=|m#fa3GRQ zr{fWPZyV-FsPC?(y4ku&q26TT6>X^_wq8$}Y(~85H4~0`M-eW6rcswc)q+qYcgI{6 z-sy#FnFyDgoyU6JX*VaZIh=guSy=n)!#XqVTXn`;qqd9pn^0z9?fJuI<180Etv&7B z_U^JY?eAb<`f3cb)s2aNipnuwV!q3bd@BZ3Sw z?biwmmtbKowv9H2gbu9y7D$+gce$uC2hpAy}bNxS_ToD&gqJnX3PQTh(h%+ zbUU&%mKGCPvQ+p`EMIoVT4vL=wA^(H7EKb3lDfRN)>KDx;oQwMEY`})|4w%+mTgu= zEI}*|!2+hde5_Yh#-OXUBioGWYWbTb6O4MHW0Y@ZYm=Fu^}oV0r9L*Eq{C5 z%lO>&XvO2;YVV1wGtGunO)tJF)(Za%8&fyJYDAMuQ-Dz|nl%${f)HvkWTvk3%67ST zcwD)YjC){@{k;4|lNCg{y`5K1(NuCv)#FQ|&FV`Gc$YaZf4*4+?|y`At5z&p&c97F z*r{jC&PUW9Kel0akQn9I@;gbItl>j9dHHLLv>3bEbTaDKDZ6HYqxo=9#^o`he4<@N ztSe#`;`aARb=&lFWEUj|V=yZF?Y{E{_F7(ztkm#1M$_gv_^YZ^OP30o1 zS9K?T^$T)m;lVvk_PVOT7CX%VCO6_o%_wE|?+H8}gjsmJslfji8T-4g8_(lbPLiESP#7vy8AzFR;qg6)?GrR4ts{7;}KnD zZ{0bWO-uV(B6IVq<&!p8WSf^?Z4R69@!!truApn7B!{M|J)z<1keb;|f>u%fY1VlMn+n^^SdpN!w6r>B%x?r12M2Idrj zHxi9m1jL7HuXu61F^*M3d`%vEylRaVuJLg2aGBP=OnVh#%XT$6?whO~X)S7@;GS~M z+~r@|Eb?#Z`8-RK&b~=7;vR$$8T}9YC#NX?2$~$kLheBk#{gfK(?MY!(~FciBt|=w zS*j@9QAV0?)tySj8otFRE3ry;iB`*Cf6by$&On<}U_MYO2Kuu{Xts0@*V-s{Y7kzF zIiB+HT1HJ1k&St}Suu1NTiFo9a>+!i(C#yJKN(qo-3r`CkDM(UH<Bee4)`Ul=H0 zgT}o4U34cE;15}fYH5 zp#>h+S>`Xs=pUMz;@wr!AgSS)7^4p`#oeiAg8EmE(fj^Rk|t|Ht=`n-bxh3)={YSn z=W4kkZ8zOLHYm@TG=(!_b(`teoU7x(?)_2cKTu{ca&xPmBen+;Ro&2bU920p*|;NZ z_(D6)XeMT)=4nk+k;W%iv8Kc%9&FpXpj%Ew?!u$e_R++DIZ+uMbdqiSz^8Udrs36a z4E1#-I$R1?i*)qq@*d_ipp7x1&xP7_W%_H2m2%o{`8L7WEIEs?f@vJHdQ{QZh_aI@ zYricRbV|wO9DN{pf6ts!G~ZkM1$trdD)2Swpc3`C36c7 zEZlU3a6+3eFVZUTz36NrWi9C?&C#XYr3jPbu8`99mX=i!emzq}A|B9vu_n%MU+aL~B_BOTte-tuKM_x`n{5#Bs4-ZYDrz>acIp(CsM2{A zDyz2q5<~Vfm;2C0u_u@aCZ45rO_MDwEXQUqg3b2qdwlntUk77lf1G_=yas?5aq-%Z zhaE9%jY5(Jzzh@N#bLP?QZ%Jm9u&B0W}2A8d|C@XYsw`<{B~V;_^uVdYK6c(U7+ps z+_u?Hd|D5^XIAzU4~|qUfIY)$W^AX3pCS_L2B|IhP=z3|r>0+@w1X z)z67a@0>s5G<{uolx5^((SN!Sw9sD3R6IAU3qcF@oDN!);PIce8}K^^#0CQow`qOQ z0hiz5hziXSUT6puYjuC-v%15tgM&~H1DWk~mHuurrWfazn^?}&tW7Y-B|^JJV=d9~ zPHyC7ode?>#!-4KmhDx%K|OZJ>K9xc?IDcAv^8_i%X*IkSLQHE2hGWug(mra$Bt`8lg?%L{c#}&6_YT|9V zZA`^c9-v3;Pxza1?FZMzUaR|N9SQM_-RVAAhws#HGlHkPW-)eqRa>2uW#ek&a%8y5 zi^Z+DcO&L@%+AjwE5rHL*dUmYj$ovG*RRwFTQ! z@cSTYA8&S#pnIBEIs)ofX%rhC!_&eeYv0?}~Q&(`r?iX6VyA4aig16;mF+nr6s5reU!b)^HbxH2u2Pzgix5>sQU&*uy3-zmKMEwGmF) z$*=*ml&ifZn7^<4j{M|Wuzz0H1d2gEaIV&wpHeg_UtiR)q!bhv{iLf zpZMtv+|W^+3@R%RP*kM8p)G2Im91}@PdrLHG2gVv?6{RZ=Ft2WeS^LWJ7=u=8iecX zb(qZLSTuPlA}*gxXm{Q=RHVIfHgpf+p*;bnz1GVvfty!O^<=^nN!>4CfB?P%hKlNjXmk$(M_CPTpUG=+!=>CT`o}RQSiNAaLhh+v?&_?a=p+<58 zoC49vgvWZHo^8MjgZM&|vJq^0Ua=FQ9%WkhGEL7^A3nT7J0h9;%Mo{kJJ`@fi>=|Z?0HRFEpbIJcRe*VW2747OY?Vn|;R}YFr zfMcYdo6#dafm0nTOpH);_m^lpKW~G&<#_H(t?4k~VzE_3MBlj#Yb&jrt|JL;2|#BW zz&AM7OKHcvGcAsbQa;hQg%f8kxRt{s zZthL*W_RtaWiRFu%MgE^qkAL!NZLN=h5j=HKESb*6%IU=B)g{({Q@4M6Mcm4?@UAB zVf`(mHD?HsBM64^-p~zMby>1P7!7`4vMR^#oQ*QlAaa4Wxk0S{QBIC=D000>=W3r< z{$uhmZbS|j>T!%3kp2;*Wu=>fl7{<#+;yOyIW_Q5p-*l4s~qDePw8nulRXcWvzR#X zB3c)u}C-7@d}CX9~?Mmc$Dp&GD9aIwdCwX(ozwOA8n`=!VAO zb)z2gcJ3K%=eXO*V8mEfU<`sG9-G;rD1xOm%1`fz2-hO}of5Qub(gN{vaz=3_^nUr z!>_PiM?`OVRV>YiOPZsp6t<7Y$2%B6n~J$dOU9WG@QRtR@yFZl*5SQ#erKyP(HLq( zG@pahPlnqd_MKviF_D4yWa-sEi(LRM8FBlol4wJdym|2Mwwvbui(-cJJOqF(PnKbe zVa#q8BQz`Q?Oh0iS#FCD#)R?35bg^_H+q@}NIgdG91LAQ#+Ey^s|as^iK1SG zoy{yoH7iGsss;1>l9L5er<9-$!#_cO`9#}&>QFd}nxn_E0P_fzXGM`kz6*m|&FSEBW)fxn+gTT$9o-H=kEG$j8y=>%4N~oSf&F{=^ zC>CQu*QUZ=BJ1|X!kGLQu8l<$qJ1~A$YM>;o^~M?x3o5(~*;!XM3MHmUrVp_ZQS~oBEG0zp?*HQ#FQ|g zukUXIm>Z`GT|3ZTGgMI7ONej03Go+n5M+f(cU_H z&1&;1VlQ^C?aDiART~z3#8UATD^ytP3cHX>#rI;xQ=%cZ+a+DjJ+@(DL__?*{%D<0 zJibu!yk8fU;X&j-XOK-wa^xfPprSD{Y*9#5FRUE3m3`^w%WXGxM+G~+2^*ymM6{jV#)jkJB4|PWFxEtKRcHaIjpjGveH)K6=8g#hfVffyVc?2 z-0dCS5iAegg4ca4kA;oVb{Vkjx{(RR{tly2OG)auU4*Feu$=*#CGp0Gm<=ein*{S_ zVd1l(dpjnNqR(OV^E03p{=#A>Y?MHloqI;vZr0($gEHin@wgEKf_OVl|28c*81VF35i~*Jn%S?5#1)9c#RA$t7*W_Qc+b5%m>sY>bJG zC%HZ4c81)6RE+U|8wiYj<8MwEYz5{^i>hW~hg7*CBje^&bkA)NDKIXlW;c2sLK(K5 z$wO6h%kd4C$lS4FHuDPa`-O#5+FLoD(zt&b-Ov8*ayydiy7GjRMrxX|5?l?N=OboI z^@_His$;(fimoAe~5UU0pd{eBps)c2^gRHBUiM z4@#D3Zk`*Dtq@)K(Y8y4gp1SQtAdEtYDX4GwDM zhgMQ0iR7%tWR)B~m*Q(vSaKnVh_cG<-ut4c{k!u++W4d&cOUMB3#3{qHhiT^R}PY; z<>8u&qWLA&Rb}NfBjJ*wDt=HZ!oBLnzP$Os9f{V-L1s0+7Yu{XOB1a^3=0v>Q?;Af z>Di3#naj!8HJ=H&ip_!b7bDB7uwycJS><3nA1v2|XW`qf!t6hQeC!R`q(wGZ9_%wb zH&h!gudXshz#WEB+pPVedt)De6p>%aBK;TfyS92BN2J^@;APlL%Lc~6>a>BV*rJ&F z^boi;-$xdfo*y%C{gwgYdHn!ao9(8>t{`8Y;G+?i_9?BBsUMzqWJ4GNF^S#xi)w3& z=8Ja6?|Q+5#Wx2r{e%tkINVQ)-K=A>%tD~`Y|_}H)z+xR*jNkzI6$+@8!9+Wj02x8 zaNe@=m~jqiT7~jKjDp45P?=DWnaJ9=4UHcol=P|{)E3F2!g@j6&5iNpXcydTYEqV# z+1a)5cVzTkwcTj*d zMvoQJfYgoR>gtL~!s$L6(qQ8Wmsi$Qgv_t53d6QLuXMjYr{0&(X%ShA48Mymz^N~pPGF4S>K*JnZr>eRY81;kEvVKf$d8NYa$?7D(aerlB{e@R zt9oW(bWj3yhJR%I$hRPknXD8(=W@bW677#ppe zV&O^X2CJCufWpMYwdi^%i^K7Ip4e!8G=8mDJzB=BTX@Yx_}JZ&AP0F271)bs|3#BR zEC&@8S>%Pm*&nwafmVtAq_b_6b3bW{{aWEeib9IMpEii~8fjMMV*xH41dXUeNXhk^ zB5quoP2BIM^qnY2=nyoDb-Zhqp|Z%$(=?fuQ+6rrKLaDgl56Mxj!y(7j;-jVd}G5iM^1P@_EV= zre6C!;>!iXw1_^?tp_Bh&t=pI=7KGNLr2e?vs(a%VY}2i9}zPka=qh>G0vOWjuOYT z1L#XwckgEvVM_$;l-nStFMoinJsB%k@fbEV4vF4Xeu!&3)eX|kyrkqDQgPvDkgT3eQ2rWZdsRy+{W zDl4y$UfwaVK;k1&V+1q_?JE->U=kXBcwh-92t(cn)73NN<@wtEnuj5#8dw;rZdZ zP-P@E7auN*zy+9zVKl$;jIn^A%i*!r*R_m}Su3sDQ%!=2>4}`Giemdz2>cq12P!h|4TbU!gd)cO!r3_tzgRbTM-VaS#8R$p z5xxjN2*)`me5GE6mw8JLk8&_LEQzp-5GH!xu4$swNNGU}*vB^~7MC<7;tg_SEGP2z z2d58W!Ek3fE{K5Bop&K1=-G@N!AIR^AESr4uu;Q7qXb3iOqSyW`jbvFI7u{@9}s%; z_1nje7A>$`@gz277!n{`n_$s?c$`f=`;Mp<%bNX5>h83lq`J%3d+^2D|7Lb>3LC%wY(fjZsi@HL|XqjStjt zHPsVyrAoS5*vznCngEZ1BjQ=R`j^L^CGyj4jY#fWpz| z;z+T*HMSD1gfD97p(1@jI!xMMqQvmikfU+hkzSB^U2*k6!YN^JL45Q?iIW4hh;p?^ zY6c!HtEeubm(qmao0O;L>UvrFa%YcfdSIQv$Q=mrKD@NsSOLLL#*Ln01`QbV+YD(s zePM(Ugk(9Cs6|vkez*pvkY8e^2-&?v;tA|EDf*+K1*Z3cPt1!Dbh+)4`DLd_xT3mF zbeP9`0BUNhYeKbk<)N?$(*F(99?CHS>B7QNz2T1;oDjY_MSK*PQcw}iJR|eFun{_Sa7J#xhg!`K}e^y~K2-1YCw9dYdiM@{K{;<_`wY=t{5u0Oi? z@Y`3GZU5X~uL_-9aR0qw!?;0Qzb*dF+F{?XPmbt5di3IJM|@xypNs3yU6S+9HP?kZ z4r{#g(4S6h+{Q3Q9_Bm}#VfENMAKNkf z@RKv)EZiZk_x#(=pFYw4r_G;_J0iFHkp~=T7~ABM&O3i?`f1&icNSfF^2pkXfxDJr zt$69 zJAZJ{cf+@7+jZm7LzuitCa1xS^Xb zJ!#p4J5HV4c+JU>&pL5^ZTI8PTfK3Y8zb}PUQqO}J0}{(f5i1wA1}M@@Zsld7cyU)N)UtV|e*)Qi`J-P)u%?#>6I)B@H?av!N`gy@)xlbLnrKTIOX>on} z;0Jy)KA68@$-yVLtoe7%8pGHiu8-KJ_XE2Y{8TjT`#s7}Z2R;>!`NRf!_0)LYFJo3#fAs*mi(z@B|ICgneyF|jU!Q(`{Gn6keUuA3 z)grDxm@Yiv=^;D`5%U;kcasAGDrwwx)lr7 z-*jZ}Yfiiq-IKV!?^lB_dGe}<<~;f4*iRSU^9tm7ytw|;yt}Xa;iu%LJ6||;pZfLZ zLZ6=(*WX?7;SO6aT0U;~7s~cIYr&{thOtLa(x0^O>(j0sncTW&uO3HkoPHd1e1*84 zbJs~FC&za!?=||Ar+2^ZUeMSeu8&(iwb#wVPhVYf(~UC+Jo@1r!^rDJItPFAS>82= zzj6EFbI+Z7$o#i%HH-z~`oEq(bM?P!4*YM=#_tPsymw)l)F1PJ@ z9NPPl;(Fgu_@Y%TOO-12DT=5ywM@%7|OKNvXPFnaYN zofB8}-FBafAFKPUdTe6uhUi+Db#cA^=!0Lsen|h%FW;}n=bHz;iR*tA*H2mc(q4lX z&%1Zg#RJbhujJul4C8fi{i&mREbVdmd7sWd|EA-vyXiRu?)L0U`s;@OANIZlFpA>- ze}WOi1|?{;s8~;p1Qn2%Rsl5uPCyBSNAOWJgd{)^63hd^7DXe~a8e&tTdTIdYSn7B zN)=xf0Rey2im%pMZSm0-gtn+?siyM(e7@h=y}ixd<#HF>+WuFM`Q*E^v$NmVd}nrM zcEqY7S6+DW^drVzzoz2&b;eW(eSX)!oqyBcSC9Jc#81b(ee2`>jroz#e=uU?dxx$+ zBN`@_EG3H_}Rg`>v5)BF8*$DB9pjVCAm!kC{5{g)5#*<-~C=X}5Kv4_qddHCQ0 zV?GjkUF7)v{&3LTGlu;1rtt5-arynmoCF)l%i6H4=k76k_dGxAhJUWT{FXjf8?!{{ z6*qkP>0Nt2G->DPAD!R*zP~J3w`cCcf-qj-}O7_`2p}{d0BN= z9`o>@r@Xsv&B1$qZPmMHz*c4neb@K<|LN{aZ`?il`0rnJ*~A?1^G>0E{fGCq9Q?tn zKYXoZ(d^Ubz5;puMd%;BKfTxO!<@k@?_55A&e7Ah8p9nt^Rgb>zUKEi-}`Le&ud-^ zy|ntm3S%x3dhVF&TR&U!_G<^czy6Tp*8LuJd`9RyrhRnisE-%!3}=0`$LyWi!A1`+FYwL1@ickFJ^V=}d%hLhpUdk5-(!{MFUxJ~L$Owx?G8(U|LneqqkX zjj#Q9`?GzYy6cW9M}GW>F~1l3ZJ)oe;m`Lt-x_mE#j5c?_yl%+*#0bk@A0p^vEXk- zOOEXQz1CCKUi~ukLFjjFdg&)O5Bu=hpY^z6%o0-$e|xvkAN}+P`-HmWy?k?1pM%zH z%Knxy9|(Ql&;IYen@4SU>iy8uzr20!Z*bp12eAA%OE3BSFGu}lQui6VkDXR{Fc#J? z7J8TK>lU6r_3O8sGJgJh-_PlKlrgJ?-ngJ{>UWlWGWL$HtrK28bQkok8#-)xS+_kt z@$?1rR?PUnCv!I4czUg=TX*u3@Q(LS`{Rjkz4#gOen;r%W$m%!>N8(i z`ov+kls)~eE@v6@hR{oI?05ObK0iI`)-%p{;KcmRZy9q0%F4^io_@sIAKrOH>5apW zzGvDUe?K4oR_OPfeBw=gKWTWRN7k>p3>&}ZWMiHd`klptp6|B%wLe^W-GuQYS6>Le z?H2l1zgxBTlAV(-`{#%;_uhY3?mzGb3o%Mw*0UFn+ZTV|0H!c0OF*gdm za>;j>j%dB2_};!<77bmu-#}yD5&C;K3>|dF;y%B9{J`$Nex}Feqm1c)2+Jwk`19Kb zKK{&_`&QgAZu5m_{l%DtLa#sdoEtYi_{OrX2e1G1v&;Ma)0lNaKjq@V>mTbseb+a> z^3V%^+v@}9LU+uV%FFuXFE!t5}PKyT`7)^v%7-%s#ej>x+*ZT=PBn zL&U^+S$iCI%Yld9cho+Uw_-uomg7!AJ%v7SMCp&8ymtJneICEP`^5(w*w2_>2z|$> z3kDu}-4C`Mx$*v&A|Jms5AAG-<($xR$lk-haq=gpExC8=4ZpmvFS-LlpS$0^ul@L@ z;|}e!W9mI$yY;76!hhnDlaIhZ)x)M=P*;E6^!bZJvupSkx2k%2#r%rent3%%)91`C zudA#_?{I#d#nUS*n=s+WCIjZAdp&nE!mUt1<*@140f6&iLbEX0s3FvM(Fw;NH68Po ztLiRj2;qZT4buk=oL*B~Ij;$I8#HjhzyX6!95{5)fPvGS@CDH6^JO}CXOvV~haE_< zj2G)Ot7_^pEph(z`QTgq;)(?|>F^0ttES5|MSKl=9%inkQ3k$I&^W!Jv2Fprv7N@{ zm6e!!)`TMF%WIZ&O5j68>z}cxbt)Vxl5t6{s8vMiJetcKZd#kh^$Rhpq`H23gG@2u zADKSYe40!xtC9(G8ZfD|x@tOBd{j3!R3$D9-=wRrYp9#m7+P4<&{Q!m)X>-jn+XjX z3bR~T>6t6W#yND{aW7+4Zx*H~^8I5c)TGkg_64i-QCx?sL|wMi$7O+1x@9yraZVFH ztj8&U=@!D7OxSLqvAoh-YLS>lsrypbEH2<+V;Xg6Ycwqx3WitrS-n z=YcC1EaEM)FAFQff=T1Ig1)+!|%>XgJ0tI`A_1fNxc&FgDUIr zVaD1HGumrCX3ncT56yiV4`O4Diup5ZW~XB*!U)U|NJo?Hy{qS?)$-b_aj`ym0$oVM zFeNTY%Xe{FW{@b{YdO#|Wga^-u6Ik6 zU>qO7t({dfI};J3CxiJMnUrvTQ^Nv&%r~<#Dyr}?^vcXd7qf+5hdqKDzQRK-n2Gnj zX+4v41?N=HL;r&QIU_G8O()~dv}$6_7@tXQoR?`UZe!rtO*J%)G^(QwFec-tajn;E zR@PUXm$s9(?5L5~VCgiS5_7qYMfJQ)9t7H6n^yDfu>$SYpus1kQwK(l?o*`Qkcw$@RcE(ymmKJ zR_SW~OiPg|wOp~;*wFEqnyTpaLFX@kNo2?zI0|$|Gc5(fQ~YFHrp4HecRJ1%9g}2$ z%V{kby{y2p`plVwtqjwsi}k%2-RXq!lSNo^fhn(HGgP%sDhBp5>w>EEG$UpN zAkCnTn=npibXbmo?>ctNxR*y_$B>fdOApe0>5`VxV=%9(T&7SWSd>RgAg85QZkQYOXb)699EYf#i13T_hqG1=> zVwsSdzWh1RIyfP!KykOIc27UFKK*>|qfLZ)VQ6l%BTE#e?h4C7^ zjIBuGD^sn}LhQ#eE3IC=JL;46xPUjbQC`W7wbGY&-ORaoHRzR6Fm+(4pnB$l&`C&Y z7KHfs(9kiVbAql+=;w8zSC+os54jv{iDvg59sN~P*YiA za?SG=Ii?6_csAFJw#YGOdbH^t?QWpw@!QM1j(_jK{N`NqrbUi91%Gocbgmg?kz+Oi z@rqpYszr`D08H0w53 zlNLE<1ZETSY_2J?$T61z{YtLbWD)9Ykz?vH_n2pM%|eSDbEQYS+M~4sy(p#h>y8<= z!i|9zK_h_f6510MIc6Sa3-gLxv%n(9JOrfIK4Ot$YB1|p^Ub%&F^fIg5|7s6(N=i0 z8$H@B9_=2FcE3k^%%eT!(Vp{YFL<=ydbGDZ+D?zQ%cH%CnZ%of8{PAa`LR5Co<)wi zALu@z{mdfAOznyF1428~BFB6Nbg$5MTjZGAF*o-fq1|PXW5!{g?cG8vvB)v`m>bI) zr!ozV@|>xSIt*!5jgJA=6kejJ=zT(ZIwrR(xYwkXwQ4J*FD;s9&L+9 z+wReJd9+rKmV>#oTEFfVIVR-M_{|=kb!5)$OTzJ`m;rgeaN{zI9P=#DPlfiJMUEMY zS*^Sx*PLLHV-^DGwHI3Cn8&<)PkH(Nd~(BXjgl*J3ZRn9_>ENa(!7ixyzzl z(`u1pZo%ADp3OD4SpCv(<>yd93wy&-m$u%1+a!k`vSR(@;m}?eWkz@8Bf+?wz??8(j zvl58@IM=MQ$T0^F#T;|VcZfxfITh#;$#lv&b>rLh1?0ca=qsc@2nbYjVwREdu|5o|Jr_TjZD%PBf;kyN(mVE0ia?BCKF+W@K6{a%@o@IS>%}afvSY|SBo68&*@mJA+&uha?C)W*+Ls?5o8H8 zM`*WLOOo7?`|TN^pnB_ogB;U6! za?CG*21vdaEpp7?f!0dC&n$Ax-yq0iCErIDIR?QYa~bvyBg zHK$EQ2x!8?rk}xS; zAAV46hGDy+3-F$N5TJ zSuVNetU>?H8c_Azu z?}LB+=SJY~22d_U8RfVGUK-&#YBS2Hm09hfBOCgKICUg+WEx|)@khu|HeOzYPCh9# zFx00{NdFoUl0i^RL9CJrlun&oJZ?hy=y7APGeNm7c>ZtXbL?}Lghzw-|NYM?>;M0o zpL0SPw(^iY^B_+vW70&xzQ2VLt`1Bb)#jSfp!u)i-!a#W8#UFt$SsF7UgZBb}^IabJ*%er^>J`=`FE-p!Q4$nTacyxJb*@RJE zeoGrwJSFVX&Kw&aH)iZq?szf<`&Wf0jDlzXPqPP~{P;{{LiyCQO2hPs{8z%rB9tz z&VQjFS3OjQH?(zKK%{QCCQY5a-&3>_$7dh32nps;`H-gWgcnSc7l+p+FXg z^Aj*p#8rn7&fu#IYADexrnJ6#VNG3ALwot8&bW@sx7fY6Ol!clb@d^6HO@L&{lpwc zdEzQmzSb-I0=$d|Lu&PL&^wEWs9n+!fn`$d&&a39#Ic*8s|A*{6&jyFjF@RHU2F$9Phej&RaxmL zxRoy7@b05ay6{|>TR{h6pRblfB8GKZFl*NQMsfsy*Vfg~$9w(8I^YFOwUzy=Ftr{y z1wOErRzO%907a(y&jS%1a(RBv8_Kji``FbXEPHgz#hlHV)%99($Lgt{jf589D@vih zM^+sLjjamFGS3)dJ?@8xsXia8ZyhtMzWRLkIcC)?f|Tb~*UoO7BQ!Vws!xBPkmYaR z!(&#-f@;ffthU3_R4ol^$<=pm(MD$u^_NLj5P>-hbpi`zYig%X>HC5HD0T)nUX>#>~ z!;l99R8^s>y6Oft)#A~(@TGzI8s}8NC1S!5Yx>_9=f;g|JEKncy%?|Kyw7;0M!WU4m4L#9uQwHbT#=v z^91z*;){f?rYy33QcFo|B%D_oDd|2bQkFA0QqsBw=S(Erx`C+yVMB39P+9ASkp+Tq zvZ${`kw2cZrn`Bb2g+;S-b+f1UfsMnWExM5l(j}ihFZcqBPBaqN_I6b*<~8{o0}CW z+ZE{&DcKdt+x>D&c*nNAHiUP0cL)h8X>DFyU>XmV5(-+v+ao30CrKTf*JXnktyA-& zzRZUQn$)+YY)d4(rPRyEr_dU^5BSG(*4pPEyqeFDV_1Lk!~b{l_B?%_=0)-tEIiaw zwlfmm*%FRE2A-fNAEV3eO)-z*XI>^#DBCw}&MjoLU@)mA{5taP#t|uby`^L`M399Gw{?q@?Py+;)l#-265cU9 z{N9q|q@2F^>!TiLXJ6X9J?Fz7J+lk!J#$*Zug-x+A5J($HCTE*Af#gpeeD^F;}G`~z&t|)m`803jb@4BLF)nv=i?k(Y4BjH<1 z-JB~*R>_$;WP?kL`J;6A{yf*b4zjqjdC8ro>EQL@hqJ77-Ak5-AKtnO5{{JIImx{s zyLo%>$n!1LSFR{~Rqx*tzQWd{cT4!@NO)zWG?JybesC3pL7K0JJPV{xS9ZU`GWG=IVe%3B|Pu+BrqUtL zMZ(_`wf*}$J+6M{@4wC6=y|G^@O8X#$#pGb3z+Zjg!!(Pd{?)O?YlnwKwIHG;IpQ4 zBPBbAydZL-Ho}F)9Bur|CEM45IZ>7LY2=C-bO6iv?}nmYR3lfyu7=tcV#Ts5}7?zAF)!jS{drMZK;DLJrv0pD-9@#6A@RyB6!77Ew z3gVWrd8u4B+IJao%h>!4%ccWRklT7ht|z857vSE2#NlIm^;mH`ZBkB6_Ej8iFi##P zB1M(@PDM7#iRN8d7fgz*U^$cK@K*8sfcwz-nsGz+70l^U^J1u5C!;9W(Se`Y^oI#= z?INQ4O$dwp(Azgh>8!EgBWy_I*_+y>jcY z&v)-$zw9g&oCSK8PZanwu}bp-pTCH87qN{OJVzUU(Y$?X)LF!|Uz;M~O=wgPS@v9y zW%H>$Wt*Zd_RbCAjl!vJk?_Xm)mbg!jggX#!%Ob$v7%V=ZbU1)DKgd#TyBk&-0Jxb z>uxrL>8d0OStn7*I@gJu7+%*fF%n(}wrUePE0WXW(U+p`VA<-%{>jewcoY#$^zxR0 z+ir4;g351-jC1StWb=|IcQ-DHlx-Yd_GDv|)VVL8bR_=W7-@PEK}q&CJ&w(Ouzr8{ zIB)n>P_BBh!@J^HRB4LzpX{2mb1eGR*@mcnzJ&p~pTzI(Nj5p!QRgwHFg7?|> z!wuop_7Tcf%biyH?z9?r>al`uf_zx{QIE4E^ozaqYVXz%z@_#1Fj`cv`U+6Bly@kQme&_Z%i}iu zT3$8KF8uP%3J*Qto#g_OdEj`y`4bQ)(qps)NO^xa?y0;#2}pTQ&MNO`0NHy0O_jRL z2U6bG6AA4?Amza&K+5}jfb?2!+^@Xnk`cYzTR@NFmv27BznZTb>Za&WpuMEdeev%! zxyL}DiE_nQpeF>K0i;*V1mgAiW;y;FU7r=Vwm za-@DQ0O=FG>7l;^sRR$eixf`u?`n<&QVC85QXRS!h?2-R*8tri=pi7j%UU3<0T;|< z;cQp)u1DJe)J14ra@~CU0R2QtIS6Qxpa+1o&OhmH%z>y`SMzHR6=VEDYg!33NjP~P zkaDsSNIA)I4z+;q0%`4^1X5nT=b=NeG-a}sawL$JG5|MH6PLnmzXMm!7h?@x-a#k-%WgE{WT?@; zc`ke0ht)K+bYFZkF1KeZ)c58he4+(&7tDSjKv?E#5X#H(f)Kldn=WQzPxB$DnCRpk zA)p1wiq_bZNv|xkl)U{4QU)>yB849@LqOb1UJVfCN`p`2m@6P5rCn)};|BTen#2TM~_4x2SC-ALy)DQm`$!e6Ln^!GG_NHv29 zYe69$rBO$emWto_z|)K@l#?&Mp`(7|bOgCsT@w3^+QJMqL;MByajL1r$5y$6n0NO1k?Oqx`@5o6~xwt1yXJ_kkQqM9@r*1T9(f+7*WR zi+}^=H7F1tzQYT=VDp-|AywgGmRKY9N2;zb$9$zli=p6XDm#8rs?Bz&Ppa+X!^Kv{ zJ#G8=5(1O*$u+a*G-~VErg{jbA{8-_idbnBvC`aju3alGLlG+CX@b%bF@xmYNkqJ$@IO?Y)vb;FZu(s0a#&k-I7-e77)je2$`dze$(uF4d*)HmLF?K2b_FRwC zM9OI*Tn7FsE!!fWzs-QtPofs}NjTkF$a?ZnH`*Q_Q{XfmV7iRnPT%KeH1)cpTxO%A z`b?x;CUQ(GN>dv7tu#-cyT=J!Vgr~Qd;0G?5(qcmziZ zEfvd{?-nkpWVDjtzz)|@D)k9eN%wG76GMg=WyF>$J-1+#@c^9W zh~swPb!f|F#Bm?nqY_t8YzG_L_yO{4BW%O(2WrurlaKR|jze09bQ019wwXT$`S&s- zK%vcHpD~NDn-$P{p>bXdkz?M2qQ)=gO)*%x4b6inj@uP~vlwkiv@4!T2tEi8 zt}O?Vwj4y*hX*>Lw0w&?CoudRoL(7_fIkGkybu}W=(NDFbGl6_N~=u_e=>Va{?IbL z5T4y#l@yUmiU|8CLOx0xZIMXo!K`!E(hP!QT)0LKn4ugr5suj~FB{Wu<5v_A5U*jL zJ()5BkwXPkhj01t)zC>Nsh1X=7iPKnVpG0_abLQ`^lwOHG!sLVH!*DnB3Pf`Sku86 zTVfr1BV|1gv13i+ky#l>q>LlNHj&7sv{x+>#<{b?w}8kA*5|Bct(Yu)2W4|Q$x2xLmB;j5&0Qs&;Ac@0HitE9XNrJa*drb0=C-!X7Tk^Jaf?{Q)MX>4o7<%^NX!bd&8%c=^LQzCJ}@DjviCm3Sn7=K}qB zJ2z((&@2fQ*tt-2CeR$ARRK*Ew7^5(1S%EUbwD~{;C`TaxJP`2`#H`I#E%T;an@nj zTo3ApLd2K$gAQNgkL+VRCSymVf8cxj<#t8_y$f^@q>pk|@hQbP<$sG-lv)Xci;4yo z6_1=YXdu$F&3FA(YTMcPH&x4aAbtzp%?`Lr^7$zIZo+R~A^wpgw*5KA*Gcg4RJ#eu zOqBw357%=*te0pQzeB?KF0h+nJvZ8r-tEla6XQ(tP>4{}nKJHw6&Ku%ZbEr+ZG*qV zU+UfuDW8pjKK?hOExlVevy|0xkaD_9F4E~pyCa>0bZ?}MNcTZXp7cOU9pub6?Eug& zv;#oom=|&O=R$kMBD_w6cJhi`bG1d-wh&0K{fkA|-W6Q|%{SE|r|lf0SCh=~p?^|y zVq2o-#Mfnt3V@2i_^u*iuT#*xB*!!z;4WC?QyX^`NcVHr?u$R)lZ)6P=!vJm`beOU z@neDRahL_Jg$ARY2XOw>fVS}(HqNZ#8G$ANdlF(F!g9Nbg(w#mwAW%k4DA!*k~oJu z^8^((!=WeTrH%E{5U^SUNH`VS2?+&%U`IeU(s(Us_Aw{+WG9lx1ZbN#F$H}B?_hm{ zLq<2*2Kr{C-EjUEqhc0MTM5N6Fkz;;i&*qxnS%i%`J=#u>h9=`*Bch+; zmf<8KnwDHd7#8lJgqC0?Pi7Ko)0qO>T2o0rCUECX4q6kZhN(4$fD&61eJ~FyDUYBvtpjabKvcYj)>Me!HzG~LB3eZ96|9~v}1WO4swP^&<0OM z1zrybk=M`$`!jzb{*l8IVnbtn-Qx0k?2%GEDA?2KoWT=~zxPsHx3a{lY zm^FTf&=@P&xQFe;nKyh#UPTpd9Ws*v8$QUx4Pkdz9aNQF=2m<5o8(i$z&@enI~-J-(^zB>ia zh<6e$jW2lKloiOqk4I4O>}7mCAb9th197gdkXP}rf-kMZ*Me2xzISIq4X^{;?Y<;+ zy}isLiy40M%`0P%2_2^0zdV%{a4P1#C1bVb7#`#|D56g6Lgr1JGvVna>f_y@R1^e74?5`Fw|1-J`W?Z=Bkoy>TL) z55lup_5tH3a!d)3=9^@ZWA3wO@u4LzpZChG?OL9_adYicQ}ND)FX$@EE4@B7qLKJ7 z1zfk`axxfHutyqvDZp#k@KH5e3h|E|R-|RMvnpyU7k4C{r}?u?FM8Lp|286Eo*lR` z?_D7GH0E8r0p;KCA!U93h?E*q0oJPd6RG(VIcAkTi!U@;WC#D#w@DHjq#xf=&o#7Hq)fpn?43Tn1Y2=L3&}5`-RTra_(~@vT<`2k|2dqkh za?Hqzojl&oDI7OtKB67@X)LLolEXquW9zZDwFLDKZ0)kQk*S%>eTpVb9vZ%e=0sEfZADP6k*Kd)v=q%0!Bq&Isu*KD*XGv%v8DZ>I>qM49G zxS^>JC|^ZY6_-@j>1b9m4)|Tz+i0^nGca|t#K#<^(RcEsn z2d1=49N76NWkeFrEDE^xSkAQHpLbo>pV*)Gc+>V3bv&n)h&w|)?hq+=i14{FJdM&A z94IXl?kqql!;^65gFq94m;1y%(@SH=f@aqb|b^9upw(4aoUu?MVs zlrKWrH!*gdi`!(!QV~M91YZy#opP*_;eRqh#7M?H813lcj+|d@=eV(V!BOJXzD|7@Dfzb24x0BxJ{>e?9H@il zMEGJda;+2E*DS&pdND$%|b@u1HLZGc6NDa0tlYM~utkz)!F zD?Tl>z82vtyZHMTLOaqT$BfQ_#DzB2BFB6Pq;>wpBFBvH=H@H4h*RhCx02@wizUT= zsWx40>DSr6b=xh3)%v%)nt6v8to{@eO9^=+sxld#iEW?)RSP z707UEJ}ich&cTWi<;C^08_EZsYzMg73`p}ig71;u!OS5(+q+2le1EhviB14fN4ki# zw@Kv4Tp^`(he;?6azd}Ir39OW=9JFO-hzU3oA}n|C9S6MV1E9=68TMqh-u;0_xMl) z=i0MxWK@cIK-toDIuc0b8BdC1ah8wmmtr?wiys~48vLdOq{wTSXC!|6x&wUn#YkYe zL%Sm5z1tq{$l6Z0u;nLM7nY*P_A%%7>>)+&Y52w^zEk5f1SPl`BXE4Kw~_MM-mxQc zRh|TiRDwkK6ghG!?XMQ;WFn<;GLhz!(Uv^zy6em#%n-2s>T}kT_bMTFQF%rDx6AH4 zHIwHJiBVoJJPOZ1!U#-jvp5ygBgb=SBI4Tyva zuASw8pE0hHLzO|-7#y+eh-W+v+*275sf>u!hLlDdQrZ{e8C90?BuEdD%ricX^HTy6 z^m|5$DSZ-*+7$)Xj<{SCm+QTM{BH5<9Tb<}E%JS9+}DR4@rpH`^oUe?M2`70Dy%e4 zwp1EtN+^xPc1mmCE2?zp6?sK^UU5CHJ})3AzgPUc5Ex# z*wpV5^C!o;#29O%OH9SuI^q%OtJK82*}Cr5f4USrboLTG5%|YSRWZTk4|)r|7xDk)b?;qvK5hvx9ghgLA`hNZgANP zM%$Slv>4o0nG&f?i5xQ&l2qCW7D+4Ti!F6jUp_&kvE^Ygv1MMQh}+G#^lT|+pxIKE zJi=5Bh$r_6U|KRi`Zt_!4#=I?FcPCbnjVmQ)Q`p$VT@;un^8lC0IoJeI(%9#r>%QG~6OIE> znN6h3Cc^$I$fdL`7DbsY%w@HMV)Bp!Iz9d+?m}zl zSjIQ{;{NWzI+2B4kh)d+GkU|U<5t@%uEZb8IwEBqkz-y(E~UM0k+9D06+m{HbJlXt zbY_b0TzWDSjvP(eER(q#^vZy9;Wg|Evh)9kfNpw?Mgr$zXTlE~7LUOwFV5k25()da z@${4R4C-e&^pSO+ft2;Hu=+{sRVEWDlZhNdHY#nqMN$2fuTaKw1``u9ygg@dJ8m*P zz;M4a_^=Qej-!%Jx6dC$_Q@H;&%j}7V<7UI@Y_3!(1&U_^;m$B<$10*UgSNf{Eae>L!sg znMfUh(&z}3=IUlbM{ou%jnDA*9Kkx=o**?Xi|fSxe-Yo#2Afc3G4ls$i!0x=n-Qk)uhQsA41N!LF#^nS313 zZO(T>VbyZ005u zNPEtv05|!45@&N|q063jqYjZphOhH=yUG~ZWn5y4&g}F0z_3HiYK2Uqo;i??3Y$oU zP2`v=a9?S2Eb>B3em`6XkhG^scf?Pz#kV{9r)1rto+$p80WtF$)B+2Cv9nhp{*fcl zh^vFkSOx)m%(%Q1W%_UY#j zILF`j`ZKBRl21V)C+Z&3v#OAZRLDe*p~Wg~o<&y3X)cgFAGJ!hR^**PhZ~>bx}c)I z$`16nZy{q@`e8+Mr2XgsN zUAaS~+#%AnB1&6j^JT`J1t=xiT9JPiB7+>N?=E+w>zg`rWUYwHoS<{)2xrPY&JZbQ zh;*%p(pI9rN|P>IntF3BN;xOs30PCgi?Z65KyNg3O8nB>-MYYj5(g#4IsA$xYsg*R zWu{l>c-$jW?h)z8m(n=$rL;`AcMVDjj=K1{_gSI))UkTi9`|$zCUwP=kIO`v*QR0W zi0<(-KWddk$~_|Gp3=xYrDejsS5V3ilIY&I(&S!eg_5cBUpKpPy<#SoU*>V2NV!ks zn0&MoO6z4&W5ox<6p zJkAm+XNhzfzS20Vq_j*p%c1OQhYeH@8jRt)f6aYT97Z^MvK<<7_eh%tLV0=PoC^12k23$}Krl@` zGLg!Z=-(;73;w_ScJFQ@zsk7s>*dLhNaaTqm0!$f$K(b30SPUS)udq7dun{@tZ6Lk&j~1aTig`zxua`v`eY5IKR3q@ssxQ_O zZ;%`AkLT9yBWa2KK~qb-CZSXQS6JfMn9oy;joF+6oyVdge*CVJEHTA zC9W?-201!ni45_iTO94|+3_z%aw!>ek|NTu!WBbpz}8t-c$H^`)I7C9BDKQr3XN7s zq*ll))C!3l^A>DRucbZewRx~T%}0CGd?|i8?lw_z8i1}ym4U zjLc~%&WY(kFiwr%gP?Pw!{U!eFpl{rXg?3A6t6*nvZHBZA%GmQDkVJtufJgXYF1a; zTd5t@s!U2rG5WtG82vAa8$BL|2iCZRNaGTsX!NMB@3)W_m`NO84vaUy7&$Z*subKe zg05X=!oh#994?P5hY&cZav)MU5XFfPC*4Mt#D3NlUue>;o9u_RB4JQ+TE^zcX5-Ow z8YSXf%oknt(?(C=c3tJ$W!gG%k<9_1<>ON-*abmMm*y0l+*}PBC%nUs<)Eqcf#Kl- zSt`r{x*>|)JzP(Vo$9c{mmgN*_fgq5S>A8(-QewJeh`!h4`)7>M752#5Gdf@p&Es zw`c=?H;BwaBfs~ADg}8S0-bpn2UQf}A345^JaDHkH|4&!C|G1wx^58idvL(+auENj8_FJU`(O$^@20AGkhZou)Cz5Nh#b>`vx|kc z!Xm7yg3|JeT>0)0kz?vW(`y?nLf_5Hceh0;w>tSKG}!9Aj%oy2o!C*3l;X_{Eap0? z02+QfD#ExkYB9^D%JJgPFVtdU20%K)V&W8NEoK#-_kuuU?6;Ut3XwsM*oGm2CFmGN zy9T4#(y*65pW?HZ&a{@xA!)T1YJ^$~ky^|3LZh`1skQJ5wH6}B%!fVbwdY&pm|KA~ zAMHl-r5K~dvzFYpFg`{Kv96s3hi!avq~_@CRx@v)LsqF=T$2}Z|CIlt1Kj4g95gF~ox z0%njb1FadBskpx-KQ zXbwX<8h;;-l(ET2p0}lkQEyA+7*6whRA{{|atun7D{@VNMUHtE(YjvyoJIKj77$C$ zHLVt<{D!70ZW)YC!fm~+^oXN9vkgVUJM`5y6eBbG-DRyCM)CpeToZZUt>FZ71_!Sg z(n$%t0tdrxRK)AGai5IO0*y1TVIKBi78T+jIbzK#LF3$6W)L-kFZf0&_Pt*Ys%Meq z3KQ~+>gf-mw;)9393Z^hlP|md3F#5|`_D-GBgGf1MNPB7XzlG0X>X56KeeYc4%a9R zbG6(NlPxI3evLDx8=q~c9Gt3@FFU^9jkg3sP-2Pl^KZw#INL|18E3TDgA1Tst~#CMUA)!38D{VZQ-B&(Dx@faqbn|3E+S z9%q6=q+%h`kDw`y{TZdXVu_k9R)>jU9-ffthSuK2-n0PxN48nccS#VfS&s~ z{r5s-ki)vb#5(NtP1?(nqLzERKDe!7x?FDdxJ;y6Ceke)ltz!Dw8Z-Sx3sz37uNDo z5-u-Joy(or$Rw6iXWb-4Nqg&DGnMoQo}`IX(nPv6PH9{kr!-g6?yx)Cf?x>2;ihEm z#Pv8I+}wxP(66E&Yd+@auN-PW(dh^hOJlEacjrN!jGiLLyv=?1ZiS&yE8nfe`4DDb zdv_+R7d;b#JlsZ)rx7u-uFu%W@d%HDM9M)T2Op@$0Ibm7v?%J4goA72@oyjGCEY!O z?d(#V2=b5Dxcs|6;OPVG%9wwy#`*cg`v>{-gyqvymQQTk)N>OlpNMn%YHWT?-aGn+czfK(sh(iY?+i#M9L>3<&)CLC#7Z1r!KJW z7XqHv&!=xD?0)uP*fshUkoN;)opkR`G?g?LJ)+rXd zk^Us0(yU`2sfW=n7O*=AQH@#eE3T+R}6jJkABK6~iI#cL4pkgp3A6o&yfCPns)V$bBRP*Bd zzk71{Y<$0Qw&aUvURUBQr0Ycmj0pTQ&wqt;Gru_VDjvyislmAB`0o*C4B2l5X_&El zA8#x-o*9!DY*D{~-?G4rbN~JSZDveCxkpkQn`2R zt5;62&o?KrK7z&pO&1i;ROjGqvX*co&X@bmsB>FF%=UwwR{L+z`F1Kdu`g>mZ#dY} zk_Ub8I|IK<{}W9#&6d_(daKj)+)s<^9vMY=R`=lZ2TgP|OprVog_O-h7-=!mQ<0V+ z9fOo6IuV+sCQ4mY6D4xYEjW9L&~CHHF&re}6}hILMUHt6NUwdtBFAuwy5{2)bt0N* zN)z+qndtjsCh3}JtZfG7-mXR6%*9fEJTp8VXVnbj8Q*xE^~;v+q(2O0dpq548=Y%> zSPi1#=XRt)qhQ_o;73Pt*?*ByxT66WPWKKzD-D1$>Sw73LBaX_2O=GS^kAgJkoLBU zKLLVQ#i#UD@rkt8%d@%i$#WvdR6w;gU$sS!xeiG4eb1r}gqVL8mE&d+|N2(v`*QDC zb-xOasjbe>1+mrnv7mU0->I$6*s@a!e6O{O>`a}Q846>)Ne1kHm5vP`5?uC}g)oJwXKEV6Im=6psfm+H3 zhGd)~7!YRC+S~z+Qlp~|s?iZ?Yjcy(ZUY~Qw6)Ny(snS#Os`NzK((tUdG(?X1I@DV8m0RSPtAR8h+Z@f8@?gdR zqR#2IG;K!s)}of?u{bKsX(#bta2DZ;WQzMF&Oe?cOj;;2;r;_ByxFO4TwTCXriQ>Y zFg|x5{08B7YQQM;nf{}vdJP-)C8%T??OjfNU;^zx$j3d30OmlJm_20*EO9MfC{d1U zkTR59hqOD=yVY$C^S;ug>5nvg|~S%$Vr^R-yym{mZU?@5a~5JHY`YuGyZ zrgeiOp+zLCEZ)bcISsl!+9+u`2nd7#bS~&U8@)KV_~ni(xP>Jac|D#T0ioT zEW6;hyWt~0DEExlI?cdY(wU0~`$FJ=&}bmf;x{o6Ld^h;dDxG+_*ncSM^+=Y1gfsD zsB9cIY!s$Dj+)1hHP5Q4t`Gj5;(M2ytF6G@H?flt@kqqkP~C`)jP=`>5#(A>QC~5? z0bkL{?Md$34$`dZipKKlMfehDrMGPlL!t#*S^0Mc{@o?w=4%H%j?`W;9l%nSRfv?` zu)atSM|u>}V~}FDy>!rlm!5*Z`yplUjY(KCwg!b;dItUmdqnA;hMUzlKt%cmh)DMU zS6X){ozi@7>#!U(x_CRD1gQn2^T#77LB8KSJ|IC}LkaGSUrSH?BS%(v^5jtyM~8)(NIgv?KEu~fMj1WG6 zC-Dc1Pz%$5O6QwVK%ehPbS6-f(Bg@;8E2`0ezE!oDQ?EOaS2=BQn84s^%XU>SQ0vR z@q)U>In@m{4Mm=j>dq9!Bg=HmexkpqHe-PuEzb789zh+0pB3VB^}!F`+!P&xf8_8x zk3=^cHZ0MZG+L82Fj&!9cLm-$5Xhu@OyZablc35LY31Z!)*F+}VrFC3LPbviy$&&B1hodzYtORC zF*n<@xw2S8^QpFOMOn#So8gA05#{PsP90OHD27TiK{w}(ZrG-Y6A$BQ=|0HoYA9eE z=W`us zX{U1#K@K|$b5vbzBfMsHz1^M=oC=asRJiUa-&-LWYynw^1u!>w6fa;cg}Y$A*z(c! zPeMxf!D;xactpxPB1c9#mA295^UoZ!%wy0fEK0)0!*F>rHeQPJB>_9;HLNZ@$7zY# zxS+mn5luD9MWLj~L<-4cV%vSjS%)ASM_V?ILV6I+LwSXb`+967QZ^DP8jDy@wU zM%h@FgQy@dJDyIn7Yd8tl|B|{$zGSm!5Hm&oC~s-*O0wO;WshJ-oPH3U~hnuB6|;a z+3U`CF95;+URhbrM$SE0FS4A^f;Ll*3&3L5bs7j>Z-KP&l3jGkzdD8BdU%4VH}ucx)t6HWH}@D~%egG-z-K-iXJ} zSdrnPhfoK95Q{#Kc^|inuj71UMX%)^)Ny~ndL~Xx^GBKfw`zkEvEhu)2<|9dah7pgn!Z$lg73BQm!2-*{taa zDV_VID54+5#Me3)cbg|7A{7x)LJ@U=;-_ax$FbMbC3Y>e-;&BQ6;bC**Y-?Nn~3r+ zcnN2kw)|y%))ZAW53z`^ff8@RCCD1x5vi&YB~;Y|)AlCE!kc`W#G9NRR8==D{(^U~ zzsQTfzt9_{C?szSbO|{n0QW@19n@4rL?WUNMTvG%g)j3?@7UI z52O2gUW;eQ=WdCHP4d4_uT$I+TJ{sAZaMClI%Yd)JWnP%&3Q(u)6@dhX(H8Wo>iSDa!f6>R`XH2H6M3R(tOlz&6n~Vko{8Y zL(!4P*FkD+vOd%{oPQ*s6TAimN+0U9LI62pbs~17*I4C95SGPrc9|5DVpHgCp6WG) zhvMNhS|QS=kSJla!jtK-_YYv*y-C+Zoc=v*g>1M0I5oT!5c@d=(&>8b5&Z7Y6vuYfuH*BeZ{T zC?NTp6052{ekRxH6!{jrVS3XwsMSo2T7 z4(%bg&o<4MBG+Q}%|l(tH;zUq--wiNM4cGTu7d6aquEb{bKeA%Bt%&}v=hnUUPAoqBYR&Y|@0NZ;w*7hC-+TO!XG3gN~g_ft07Lg<0 zw&7XOpjSkWc?Tm_n(t2*VSOPwDVh&!MQpy5Bdu|%MOyjd0pc}L?L}JcjaE-fU=s;k zZD;8&owe26FZfO=y8D<@2Rc ztq7dmes)abyZmuD>o=U>i?4HWKH+jQxO~4`OJg~-H^KiexX*oo)|_?ggWoXxE)EP_ z`0wi*pP;u)Wvfc4PKG6<;c~on(E2j9jmzQl1_vy#x#Cjt;2%iYcz=qNYBdEC)y^Fy zuP%qkF{|xao#4-Wj+qJPqxoi83Keb~!sm-8wp8k)kf&97mURi3)X@ z-Ozu5E@!Y<<6U15u-WX0 z4&Mn$st!})s>4L8!#t}xOyrp9&{xej!y;XzqWQQ;Mf0Vs!-uqOHalm~?QuMV-xqW0 zL3hw}(2dP}eEn@N{N@Yqglksdix++g)~x&-a%xNxUWW_SGTb++`b_`PAvD^OFF`HS zu=JQkD-cW2)~T<-5cx&hUTs3k8000}Ugbdl)z)bpYU@P0ZiQ!c-3pOoFb%|LzU3A< zhO1RH-)f6GFu*>st*tk254GUiW>|qD8iz@7&5QF)<5?TRyGYp9EmF3tc}-SJ*)C2! zEZH@DY_BDUa5c-wJp2{OzoMmV2PV~f8&qw3k&9m@<+YS;$2VC$a?G-q$jJPb@Rmr) z7I&h4wycGb?NoS|vDqyp??uYqYbo2=ykw_o+z+u|cxMDR+!^Vzds9nz^R~ShJ4lBkU4s<;!lmRB=08d3wpyA! z&R-$Y9sv=yweV;!SmYQ6#+r|^(0n;?qDtec8>P8ZKB2~TafquIjR_kZ4#0^DA?0yJ zh(;Qf{Efg>0m<_k<{^hhMrWm^Fb@rWGSR#^(FT7_P`Ew(+Tg8wu+pT|{_Js+NV!QA z9fnLWgB>drl0N+PI6ous@Vtf(&)Jy@@es1zI{SgFVU z7@S}|53qw29IMujD3LOXNT;zX?M>uYnyXG}GVeMR6kIytXWsLLT1mH=ci$i<=*PRU zZaTb+ng5>-<2YEYj3ZLU5$W`QrM-^FQCh|mSL-0OVDz{@ZWljhn4v+JvWPJM4hV9=Ef zmg$W;>*r+tDYSTj0UNt~{M>`hgMUjtmUCQU-EwCy*|jJ!swIKNGq`?2z{B#M^lYQ? zn-tWoK#5eX07*2of0c^Wn<9af9eCl`pl`-AK55 z{N;5Bx#e(Es?Q#vP$YCM-@tEhK>WA+M;MA;@i$vmou%&mdH~#rzKxL#?QSspfu*B^T#6?q1_7FnE@X51`T2| zjMSDF;vYGzdv15e_^@FvvriIEyLWcW(bON6wfETx^4V`5tRMH$X371uII{-bMAmsN zQW%z5hm`fl_h!Up_xJcsr2Hmw%x2_L+Itqo8Ch@M-u*V5ZSw);@Q&f(oF13mgH!&o z$;Y4tX4!L%gYiA(ExZn!sp`~0w_BIf`ZkbWL3UM2zQ=)P3Svj6uax%!knX4aTcF8umZA=-HeEn3{9Fa2YWrK4 z^Kh;vQR^}^(>D*rvYE1fQ)SlYIsBRe=0tj5{5In^wh;fw5ohF<1GXJ|sT;I4vco-G zwjj)bSL3IZ-$UC(n{Yp^?7dEKm%p*GZoB+#fmth$QNbpXs4z60JjP(;fWpHO%P?-eG>A9_iXC2 zZ8R*f`2^FrFKjc?Gt$NL1KW=FMPqgs2G?%w?h4V^jNfJVhiCBmcxF>CHDn{F0orLm z2jN7%Y$~du+APpCR9gs?I8>u?GVF1+CTL8{ajqz#F$JS2FH|co<_-(qJ`1P%O9<|> zFf_$du)TsR;@^>;8Zb6K2bFONex+oM9JcKW#Ck#NNi*zot;e@`)IZpCG-^<))o2?a zx+6_xn!yVa8|~i=5*aiygy7)?jcgO=2uc6pb2DUgkkU2t_@+_A1TU5zkH6uRai*$25y_Q?C>b0CLs`)qRrRQ90Y%}5{&2g3~W^R+-^MgCUlO^g@$1% z%^00%(P2y~6c?}*+cF7-oAb=ck!iNsO_;us-ub-1*pzgi7bvJo#LS4!y&YC4Y zN(>By3Gi9Ij%|_DSO4L&P|~zDh6+5ei{w&1-!({Sc@T;WwtNpMHRDF43Wy|p1bjDalX^0^Jt5_eBbnF+~ia9asGss2WQ*7J#QLY zNNZ^=;a$y3cA3V#@!oR_>S9{LJJ~qyB*y#6mhcWaeGeVglr7W>-Qw#Q;LwY+38BAiC-m6O|( z$2RY_-5}Lpk#pWz16YCX94{ zq^BZ14(Vw~8N4Ik(iWs8NPmr#<9_7h*OAg34@P-vjznsXMEDE=B%w6EBv4w&qZN3x zfgWwBN8^C3UOV2S1!Et(rvbCY_xNx^Cd&S{9{(PkZwz>RUV{Q<+0@cP06Ah+rKVBG zU^}{C$_-OgN&Gc)?-Q#eE78a$Th__CQk;7rbxmYSmU`2vNPB>e9p^+$1<0pjB2qCC zY4=8H?A|ENWwm@1DbO)EW@L^w_$)qgAAk)$AJKixD?-Xx{!KewgI~~2c@63$yMJF) z2p~r+^E;;x&_BgM(X-P;T>yFgc7j_~q`%y!LW$n}_1-*2=TXAOS7s?E#jctSW3fgE^i4nj&H z9Bc!-soTC`yH*d{$rv+lughvbP=P zjwy3L-*>Va_wg0dypFlzjx0Y6Me|P~ITp3z4p?1HG0+El(pk;``czPZJ)3X71@wu~ z;#o2ulrbL9@nGBL-y>~0XlMIJi2Zw{m50;cB(1dg%yC6$OZ)jK?h#Z})~gSGSL3(o z5d0%YTKlBU(C%%hs(M~^BlaE!XlSf&s>G}3!Xz=S`-X}1u9nMz5`+yXwTW>N;KnM4kjW$D>m?7*SOG2Nh#ns0B5e6Qx()65gvYG%yt zdUT%jbr>>e^?AhB=!hFvE9IN7qB@D))c~AL7WqAe^H&4}#B1=(@(SweLI62Bsm+_w zP+2jrqCT;6aUH9BUrqfTXfG7;O@OTz!Lh?jr0o|`G+1zl&0W5R67qF*C-C)J)a0Bb ze0}N&_xX}d7w-gSd2`2=Syb|8JYEqguZR-!s$W80ZR`YI-H18`Cs_M+@D{e*a>Vee zu6E&s>c-d!^}~jB0?Q7@n3uorO`g5t@r+1$Mx;FBw>`K#BCmOCRtx@J(rOlRR?O}) zjPvE}QP#bsEN9yrwA?(g#$fk=eHZFI0}CDuDqO3j8)bt(Dxgj7HAmyzCs8-*dPwOj zYoi@3H zZ~V=JG*LNnZwJCD4eyDRdqj@;gFTyT-nB?LItPE4$N0|{{-aath5&Vy7lrqW@7xD} zFBJXbBL#WNiun)nbPo`impo;_H_@Eh6Nz{58s^y-zvbSUtQl2{Yb)m0REF>=hQ^wT zd6-XEADV@Uc!kANri3R?EkCt*-1zY5LglYlS}ec_pzwoHddPQ*_w0oqS`c`1JtiCN zn_l2)9g*^l$ienz#wcx-MTz-VhaAec)t$h%dXzRH3E$pvAHpQz+sNY4Bgao1b^7>m z6T+#nO}dvM+}k~P8-B&d&o^{ArBDBk$2TJ78?ZxfM2`Sy!W;9Gn8 zc0(%q2ELV-7EdlN2~Q1APK|MK^$kky=NlS%;oD}9Z$!#BBITRX$Ty`W;@hbn-+tZ+ ze1kJKQe&g|uNO?!3n>8zqBMeGQ z#JjM^yOo{5yGu~oIZ1eTWy-u8HF3g}sguh_O%?W)k36e<)Wp)WQsZLVl{&OtZuSB5 zMTb%kjBqWb?`6t1LH+HrjlNecuG+P#b=#6Zp9RrHxO*&+Aj+XSk$v z>RH0Zl-QSw{r0gu`-8_bBIOy8Bb^qdvE@)&A{{*6)w>Yx?;i2m4A*|&^LR(3ydzTkRT}MAX^D784N-l2rW1JA zUYqf5D!dy%amv&VHn#C}F4)$(cKWWzHzMU5k+vC1W1FG0M0^|T@$J!0;2YT5 zZAv^V8$Z5$RN3Uonb~NNZ%0_Zz3K6dNcl#jx~4Shn$i;S4X?K?-yZ7(zA?H!J&CSe zlQQ2%7f&rt&9SATYlmB&{m$bVk@Ad4bxmp1HKiru*?5m?4E(k5*JX%n(^L6ATI8)Df(_C*n8 z5s@85EsKDPQV|squ^^vcG5xe?`6&J){r`UF%*?y@zW0*%l2ly2X>ZPX=g!QXIp@ro zeI|ZFhLu4kJS#Fh`>o>{G36OC<(bmRGo_{D83$Cgd_L9(JUa`qm3E} zv)3KZh$+vAsjexFx~8;rJe%uy_DCP_i~~GNy3n;tGvOIVM&_5GvlT}*y703Z_P8?B zH}n~#kMN4)9Wmt{F>SLcjcqoirQ_XV$Gh+M0q?r2N57O2@0O#*D}2jzSV`I+Basv9 zqCmoZtWn?_`&fkRW4+<{M@;!gOv|g%SYDNuj(^Ot+PSCufPdZfvHpu06W7J~((y|d zEu33^{Gz3q4a%je8^Y~ft8@S5ct%WlMoi1A(pX-V2AQGekjGSpn0S&Fg}irc+0AIlQVB|o>kY3)rG^n{R;hGvf(_>KfiM9 z#NhaMm^=LTR*c^ITeh&WqEVl7+##miA*NHiO51|)N&|PW@zZQW+0N9oK9h@ewLIyk zth4o;OLD#Dyw>OUynQoXC5|M*O582|upU>vwa0f)n|(>{xf{>GaX`DCd}APjZoV+G z9a9K;L=krxZyNdO9Iw6L3i(KT;k2^6W^8NQ_2jmJnA+HUbwBZq7z-}o!rTkg_a;pe z*2ND^6?5*Uj=Z<)FvE=$>Z}|`q|ZfeqcXb8rTbCucF^t>ES2oH;w@!pr9#;cGQZye z`~jYlkn9P!AIAJii(@^Ra}N}xx~+f2ZrfU^Km zQ$qi}7JeZP$T6KcfOiAV1AGb)ZTgny0MRFEAzu~%GQ%6ed7XJ6rus-sPqa|lo5r7B z1(w5}vVpMa}Gd)489( zbPU!xcdKV-ASs99flIGvG*^B#V?M%ab`;cud7A`CHJc1bHJbv+4@?DQ_j(%O*?`jl zuLL|A@M=J;*lrrARLzt|HB*14qG&xg&pRhVi&dI8 zE$^J%BerzNRspq0*neA~MoI0>XheArK9hRY=aG0zW$@b;f4y=U-o-<>)#5V2m@@UarWT;a>zpnWjqtKL!ZJkFUz4uQ0Q|a1O>_;+L>DZ5CC$XPlkYbD;q6}onetsj_k^Nx2-Sgutv; z{q^KLUxZ8(%K*~_LnQ7(u$;dy0^A4i3xHI{O@J_3UK=3ua0wvOM|QNbWSlO!!X& zVS&^m1!e;q1}{->IWRp^fTQjD_5%0zo9->O=v_QTc&vK{2>Jyc-_dP~1yAo7fb1+u zv!t%Pq_VEQsW|O<0Vgb;S(bEWSn-5ntN}gVA7$tSf}TfPG=6VIJdV712hSJ4kMKGc z@^B=c2k|VWbrEOw86+KcpxG0vN5)%c1&}x=WLszzsypC{yRK+3b72F^v8b^M{UU!` zmZb-T&je4QkIv4%qr&iZ5`-g3Pr-5+2sJlARf#?I4Bg0b7f z6pm0&?l6U==C?ge;jGa6Z-m~nn@?x``+vK2C@|p8Q4ZX;HyH3jL%jypgR;36kUY5_ zuow{S{g!!vHvygih$dDG*>Ef13cxP|GM9G%ejf0vfENSa3CL#D*8pz>{5s%Q0Pg~% z{88G(T73#7Q5Kv>l)k)4iXJCEu%s&Jl}vw*%Ao zzG^V+fHH4!z=QMm$^IH5-}|(|BHpo%w$Rb)91R!hnQxruXswQRnWJ6hXtz4rR~+q| zz%(BZ8Z6>{ADHI%X@lXUN?@9|*9;ax!(_W24nbpjFxZedC1OX?88N6!jLF;AVFv=! z^CF6Xy$mJ}lzZ#lvT5B8i$1sReqFq|bkBD9#KjC2vxhw8wqrrQ*&{n{vpqA)lG;5N z)RCNjv;oGu?Wx6(TGV3;Zw`_Zm7@x#3pN6@V!=J<-Pui#7U;7NJ4WO+$# zZQV*^O*n?*Pa$)m&UWS5{dU(vvZ;;VdwyO5b5~NU7HMDav>`DGG{D=lpFQc|FQBkg zTgQBH7Zup%+8sEPx`lb&1jsgb8{kwxoKW3z9AG;j`S3-+0>J4AtnChB+U_70@jftb z^S%Bkc}g2D!*Do^(~ZP`#I!G;!Ieo;z?Op?P}FEbm0>f#SKl8#7kCy`gqEhr_5HF;zQax}8aB z9KTc=_b4lk3aGRXMeW`fHKD~jrc1SZPy7YdPH924`--&hDN{c#< z#zQtqEXJs{zk7EF;#-0T?&Ao~NfQY^6YaM%HT)+*=e9_pBYZi}{ivu}Th)N^AHA|+ zq{iTV24CjcA1gw?*>$3`XMcQGf6Cb(^nWOrM`zzJFu(2DAb7<}cMBft$afw`OO{ic z=)jy7%3?eqM^?}!l}+1dbBi^a1jwXv@SMHFDS*Ibkeo~?!S9m*X96+{vjD3B#2FN22mILBU3!dNFLj5=%kV1_ik!tmbsnsJE z@$%tIX@d5mGM|;B2U~QM^ z8AEy7krA(Ta$)1482OhU?H*=1u_ao60nx)aY%i;zV{+Pe+(~VY?s#6~GO;|zuV8@9 zd;$F~<89xzycE=rw-w@`A?Kexv!`;UJkJGxqjJtdTrf5QW(&q5rPxux1`7?6H#ErB zU~H*O{0L(?4Op@Gs{%GzXtawO%jbaUH!gD66~HtFEDDO<158i)rG26P6ydS%5g?@V zp}S)^hvpMU2YnB;@Rn+Z$-_fCoAW9B5!XliAj?Y{8)0(F8`g<6v+3d|61eTr@e&xf z>(QDwa4v8np_J)rO{Dx~`q_VD3*r<*e=-MU3HVchEbBaK8k1Ub#Pkfn=kU7*@Oi-X zfIkA<4ESR}j?}yWNPheTkY#Tv7?_nhVrJ3^;M0&%M=s+ zBKFdciQykQMl&}gi4ET}&M!9C5$B*AtuD)lbxddYoRS}+EyuL~2$1Rjv1!|}G$^Nu zDW{3)_?Oalz`xScb6UHiJ>m47i2bZkeeLJ;izDDcT;Fv-Gv>4Fcgo$hYXt>m^TE#1+GFv{h26jod&)P#uq@}|HHr=>0TM5=N{VW5_ z^B6;XJx|NP?*OS`+W?urHvnmM>cK%R3&d1H#MJ62jaEl#nM&wJkqcS)m|#p%*cvgl zr1PN*OXvyE!u1HlSPA`h1VhoKs7Ksb3@welz?Gvh>2AI3iFh77vMce>LiJWUkAizD z9bzgSVmkPuG}aDEgLLF5VmG|k?v0M;wQ&VR!L-uO^&i328d&p^!!;2oOnI2owuOm8 z2nz^}RjIUD$I7opmUHTC6<&8t?`Y|t(M%aKhV zKIwC|=HL)+`f|jXBNhWGSaQ3^0idvvAe7RI4dqpLX96AqI16wj;A}whD-OuC)HtCNQ=t=!c#|P&rA;@OOfY9J zbS!JaCPx|d^-K#ux@4@!IfQ5YlMd>h0YTiWp5jh$*&|I))}LaW0H5xMhBX~P_i$C)aPWkAD1 z^Mh+?mbC7OE<5h{+Yx(kJx$flHmq{NqNnEv%l)W3w$sbB`1VHj&D%=1cbw54-;RY( zIUr-<6N->}X)pZQAE*6tegBSQ9cA3l{^ao8qd&0tl*#M&w|KkHPtLfu=ItH%_7y&F zSMtQS>nMczk`5=d#kaMWZo@6D9p!CRSfrEJR<`}wcxQhkFQxC-+Dl)f@BQ_DA&rY8 z3z9=ADE`zoVlo1fUxMVtLtHq9# z1Jf~yvmAD=drK|Ux7Rp~x}dcCoxdLf(@~MFzz&m`IU1%k=(nML3|!N3j{|_ML8_wO zXMkNP>6-%VD#18-K`v^qa^6>k2L6*)#KAfNHZM8k}H6(Sn8Jr-TWUywejt z%F9<)G_9;In$d@B!XmJ}{e^K-LGYA7H>73P12=;O#?D#QDWmds(NT&IS1sqy5U7(@c^$LkiVraKuy8liN-K(y>-+B)+WP1*kOnl zqj5{!_yXW$z)gS{z4qDwO93wdTm$$;z$*YZ1KtgI8Q{HumjgZucopFH0Ivr89pE*9 zZvtKmNQ3kxKz{Q&KprJ`10ZiQybcZ{awFP_A$l z{SBx}6t^;?PzlB=S}|79`j%C+(ynpX?GC%&`C}D*jl{AQ*oA_zidGt{Xr-}=epucH ztLWP$eXOFtEEub3y?2LI^f=I>9;@iVg0YI$SXf1K@KLMi!{jZiX#Fm$=wpS(Dq8cw zD*6El0VBEhtLS-UGm3m;SjF@7F16!k6uHrK(6E-dv8l4S7^j9Ns^}aP=e41ZjlYWi z-3VkrT;B|!eQ5P_&v=wg{oKPZBjkIOgI-%Mb%E&1LYgGD@C6XDVF}-28(#l z0=rdcKQdUv`vOX*ez)CV5${XD)ZdK;!&YeLj}^71&z;%aUG@B#laW!@w_+fgQ*NM3+dOgO=F=lSRE)RjxGAji_@#*KKL zt#2OK)WsJo(|%Fkr2Jwh4mLL%orkoQ={~bFv5mNF*ZI>UT$9w*7uTl!qP|J_#og25 zoeia2AC&q!p@y`P>YG%NmUfOV-QD_rUSk)_x7MYNSKp+Hx2$t?+3wcAjp$0ypHCaF zzDX5td^h%#L9TAC7pI>wUFBVn$Ckoy@`*p}mMAtb@B6y2s6znqwBq6IxF)Rtiw`Z*c!#E$_HXC};NSDE%vcT3#t)M}2c zQ@JRF$&ik5V$B;rE833KNZrux@#Z&&b~zOMwa|OEtm*7~c82NfiZ))4OlRM(4ZY{k zmH#~@L1)8n54}GC((u18HoxuAvo4ssTs_HO%8?7^2IJR-hJFeLohjSX08a-*FGKF4 z1ulzeRsgb>u@dklz$(Ds0Iml7Jzy>1Y@`em2QAkFLUJwd03uAwe0;A3{}%z`do9$T zivTI~;rOTyW)suFY+@1bZSywY`yYcvJPsVFKei6k9|sYXw$#y1bF>wXMn0>*21jGR zL}|1H8sDXk#`3SUTO94nj&`4;(I%+B?>X92j`mYWd&$vWceFPh?N5&O7e~tjr!;*9 z29x;A5V*z7;7$}!Akq@Gl31V6%h()|6#Gted1~c=~ zIEaQP&unMRSknG%d=IvzV_8C8+q~%JvOSn_*e&mJaPN>Hyuw4)_i%VgcbAOeiLCVZDER7vh6ddAx>5br+;+R%(^zZH{hQnk?8ai4eyi+$O=8 zjUmva)V3gww`5^D!9Is~YeIr$7-pPI`S}R^5!WZ<8<|O!b$ZvGeM*(p`*$Y#q{<0d zzfhTvOoYmOTA^}ON`*>Hg-T3MNl_ZbtF)xWLdkncO(FGdGd-i9ExGM^OWbBvi`aJ* z3{(Rh0+!}t5jCe|bnhwW4`vAM5Ma9FbUbOI2-6&G4zOuLTLkQA!PwZ*5LAk=C8z=| z507=5VnIvr1H1^YU11n1Oa-3ikR`A){k>b?I;Wwk%D3UvpFn)mIBOKT-*Bq-TvlZ+ zwxI!;4=N1)y9G$tEiG2y3P5JTR_bX1XusUi_m zMN%3SNooHuMba@@Dw6Ibr6OI8WJSG0faz|~pdu-44&J6xr1bkoyHlj65o37qs9%wO zHUb{Rnchf7TbJFMMK`iL-M4=+c=e$2PIP4 zKTL_V5lSUGMl1@IXg89jO7xy!K_yb!9QaG6MEbTT)@T+o|9+_Y@+;A4VI}%E*bSPs z5_i2BG_4Y|Y3sLy$HKDF$}a$Va(;+PnAnG?-piO#Yt6cfnrf;d_A02ae_tcC+EH>?Wq{CKmB_!k5z6 z>{J?ThQH@&+5OqQ#_mtkY>3OotaJ7*yz1P)|0PRyKLv*RuGC_~u{(A@W!U|+VfQnJ z-Lo9Ki7C5@DZ7q7?6uiX=Sq}^TDqFFNA)uFUBnXo#YX0zv` znoUeuO-wHiR~mI(X=zw}+g@Y!5g$IQFF|+6>2)ToPN&t^IaU)>RufZJD~+sHS{hd8 z!aViNW{*L2@Lm^Meewu=TbwZ>{|421mZi#7>gh^Vcw}mWF<={w0Xy3mFdoXGrHYt} znpi}Rs!|$fSCp1U)C2aKs89MoQ6JFIO{orx`dlOG&l^#nXGHz~oT!PZsEMhll}1r3 z&5Bx2i%8Wv=W$)6TgR~iD1vKx{T%o$p<>K1^nwP)+8RULb7v46N=m4jQH42Y==h^Y*e zMj0rr_cGvVDY1TYhoCq(=dTY|_f`g2zd3bkFL#;qLrq)OZ0x(T zn1hN+n}Ebr4~Rv)>mV_uaY3)rdanmBL;AONVGn=&q1H)_RoInSnc=`qpkWa1aiy|{ zQ%#+OB_l0t7fd&G5(l_c2El?l>sr8fzl`grS)D0FG2n{cTo-=>}@&dMY|v?34|I3naChrIp9#3 z%7B>4fSAfaX_SG|_Pz`r_*aoZs9}(a4APYYj*+Phh^Y*SsSK1x87QsyGT;ua;a#)~ zR{e*!3$iMUp@u;wdXTOxasW^DfSBq5F>MzpjqL)Z?R`C{`aeC$yk#;x*g(ug57OBK zj_#=*5K}!Mrh1?>>VeX%9@vFUW(JQ#8$BBhz6aH0_z)xi9LMiI2@m4>cuEP^ie)xD z6r8>bvzloQ&)(rk{T6VL8%JgK?qM@TSL{qLF=aI|9e7t72i}#IhSeOm*gLF#{X=JU zaOy4-R%1u5u=;Vs>TerXmpE1vQ&tmGRx6FHR$3ZXb9ka>tiB6TH-#F1ey!d*0v^O= zqt)Hc+-0oOfoVIWBNJAq(`v3dQUgLvSxrn?tu(S)X=zx^QHZ_6>i_h6xEgCB_(V8`fG9BNC`eIAo>p_c};*7ep@S7IE2$cL}bqb>|eWMyB-8&pN@ld`l0_ z;c`7a*0>nh8S?f7N2_z#1;F%Ro~wbKDgIKa3s~)uwN{Q{b@>V2g%59K7^=&+@LUn< zcK32nms5TXb?Zg7n5<;ySFNsh6xi({;}8iBYp+>j_7q4BS?`OP`C+>+AF$HU?>CzY zz6Hn;wg&*YeDXoSv49T&&H;QFa5>;3fSUjx1H2UQalq>UzYRz}eFu;ks)Z!f77$Yv zCKmCy1wmd5>(+EgjNiUo4lhQRaj|M zVa2Gz56fGs@B@PNM1{F0CVVu6Uxi-{RdoRscI`9{lV)_bY8Lw2_1=ke`pX91ho!y` zLJF$B#8iEW>0TP8QIVC#RtryWq{VAG#M-|p@w|qFy~SyCY8G?GO>53uKXAg9j@*v^ z_xCdgF7AiSP7=`{=&(`1)CQ(fhgo<_Iv=|55s0Wvk`Df67+OFc#&&t1TeSIW8*3_c zYpzWczT*-YtS+5RvwL-?6~cV+d@5N0tQF`yhBuCBr}YAp+;v;ugSBCPwg659d=hXn zAdbP6i(sAxWL}>Eq*Ypjz$#W^Dpq28^sdr8h*fC;v5vCxqgaR8A3S7G#oF#|F1UDF zX==%C#y6rKC94=EtA#(6War>*SCV}M@57tl7>1nS-l1RjZ9&gUtgfhAvGVe2pIBL_ z{ZeJRyOQc8yr)#Tg@{r;8jwAsP}2aHv!rh^+p1lF0@p#oPf7}S+d=MU_yHba0{OB_9cd) zpD}orhGc0M74>fWQfVDdK9(r59Z<4Y_Wlg5U0i=Ag_SZb#$z4RPniw?WT~X%k}u|| z#q=4@2Q0$x3jmqVRzQ}}Y2c*Fl9xskDiyw3S9_D=odW|6h;Gc6ZV){g0P+U~O;G7;7qN zCZ^IRrqWg#rLDA(v~9uWhQHKJG)_Bp)kOOS-iJ^3_fJ** zB-FL-qek;ay&XEUvK5?yO&$+sdf7aOOyUkR72KG+#wniaEybA#bFN;a&%%CVZ5vYMDqS1D~L_@T5k ztWMt??M|~(HBkJTT^(lizeVRGn{pMbvr>sV-1#`sl&X_Vslw4R7r7C6&Lj%l)*PDA~tpf@g#@u>h)55%GTEiBt z#PEJ5AoDQG@P3lxJu&4yF)e0FV=+@&*SzOW=BRYdj}VMJ4xb{^Ti$<^i5Hj6;s=hU zceP7A8{T)l&LkD@dHXeWhqqrd`ST3#Cxc7c=_aPUC#Jkt8hNj@u6h3@;W+hvlVCmJ z{apwhUU=fy`zL#(_ijQXu{%#!AItre*>FBsxg^)*sd%4G?>YRdyeFo-C#Jkt8hNj@ zu6ci*aGbnv6Krqre#?i<`|ehvq~d)#y}uM(Qr;6&-V;;aD~-HY8hD>rp0HtPVM7$7 z#O+IR?Fnc&o_Kf1Ag*25Le#8OV0!fKm{ig@3U4_`Zykpo2jK_(axj<^swajztPDdx z6Y#8L^x}e6D9wf-v*Q7C%?Wk)f8ItGoS6CKFV0ywhjt3b2N{mz=uT9iNb$j;l@2QpNupvq!$AI!RsOY;>IU zo^qU+a-5iQTxsOE(*7AaKK>uT@tr;3csdwwI|?~Fy^ zaxCRGG37Qftu>X#T2pE1xvee5o^bmv#2#)R`nmnn5%3@`XrsI4c6aT=%z52i`!E}B z-{iPWOu0==xveyETWLw$j`m)+??vq41DyQaeyv9>!tQ%Qa;I4jl>0A8?>LdZ{z=8{ zpBvqN+35B!jBayrjp{Zrd)eoQBfsSV;+cF!%z-H5$8)b{Y}_V;_l?d~i|7MdM0C7EzLoo;h^ zk#d`ua+{cPTWRFB($aHVdzn4a?e4h!-4C1Fq0VI{+)k(4H#%+;Q*IMeZYz!4R$7SL z?dir6KZY23HkNolz7<|p#6}5gcxwC$d!>c4sG+{PVl5XI^`w~+=0B4dZl&C1Y|Gt% z%*Q>(w#;z+C#L)-rZXf;+Xeqh>zexjr>rd07GjcYU?$Qg#u&bnf zNb6I%ZDpOS*E~!;@-~r9c+98A#cQiJ@a~X-^6*|Enozpwc+KA@=}&J4e*2bTpKizm z%sclnG5^a+fcurFqfx&GWGa3G$OQZra1`L{fEeTQeh2tjz-@rX1HJ)xI^gdC$rP4% zZL<(lEg}~2o-%Lqy=M&;@j4vs&yF?(I;LTHsi=k>?q~-)8cw+}{)!z9o%LveA-$#G$I zP2Toqv~`WHp@VKBxOAf9*sh#(Lw6lQWM=mr*CWoR2wP*(@u56`d=x? zq&*3BVSb(lXNq{>pms9|F$8ZwRI3WWXN-t^#}kki2*ikZLy!+*Y+C zrfNql;%zZ+^Sx&b7V+M6v_Cjnr=xL|vWB(l)QO#Sc^7SI9`N>s@MV{pw@xl>SZ{x{ zi`In}q360~>85?ydTxQY?x6Ovf~C+QyHq{l%Tfvwv9>^p=rMK9PABm zd*R(qW)p+#%%kDwa86VwZ)9>Y@j#DkIYKF_e-|#NHmycnnGY{c;H`MV6Y=laT zR1mW}p=2s0%~UQ7{PLPgz39m%319I!TUuy|-M$xl(bG71ET7q2Q`_Y6QU@wzGfDQI zcfVy{j~Ac8181uWcdfhH^+hNUEJO9;N&hhKY)Iz=(tOiBk3AIR#}5Hn3;Y<6G5-XR zDf%hk62KP$X{xsZZUlS@@CLw_0lyCT3qbPpmw-(AT1ZmM5-}}H#3J5)C>cuoxWOVk zY|PMThSgtpV=$O`^#o@cw$iSZ)-X3QX^!o&)R}dCPKhxGOh0slsxj zAy{toZflksjhW>}!?N65B(bpE=v$VX2ZWZY?w}rYRc_wH`|t)rhOy=5Ic7_o4zvc! zjT;5=7aPvbgi8%+G6$bUp>ey4`l!&jyOv#{`7q1O!;qMk8Dd&yh()}?C>2WMoux{f z>}V`KN<*2E4T#o`qftHh!gh$t5*+jrwjMjct=YG5r=xs)bYc5b*FVl`^}Y8KVG7gN zB~%O>{5k#z{o+Q)r)eTOMM1fNioJoTcQCLI1f${6x7_ZNOr4duC z4j7LUh+=^v44+`1cW=K4Ok<|W(pXXzjJxoXbnC)fDS375FG7tfhGAj41J9CB!B|(d zvZ>CT79A)g*;g*%($iOmeEKUbf7TPYztVEI6Kbb`h2?ZS){z(NDbi3ZH^fR@G)Vqb z0kXbb4LBUI8jzd!Y5>m$L^UrP%CQl=g(htcAbE-d0i;4Hfb6w!5YxgzEaEM|7nQcy zVD>BonC5BmD9=FPp7M@??PXDPC(#JkE2YsUf*vPsDJ;PHjn;E_drbq-u!$5hx6?mTNs(I1_Guu#6)6`hL5=WU=G-#WisY`YgI6Ib<+A&A5V_CJTNv_4E zf4S3^lyVu*rXgkq#pBYN)zwWHSIi$0wLXQUUU~JcyDGP|X01|f`-N;OFIn5D{mrl$ zCSSr$m&4H1Ag>MwJP2?c;1s|KfYhub0A~Xp3Ah08C_px4CIg-bI0f)@z-fTw_jEw! z@IFMUnnp}DjabAx0TMGbgSoAT)d=XBkqc-BdG|X0@LFHbI{=|mcjG>ew~3;bd`ZwF zcpq-UG7OYXW|%Mg6cBNP`obc>8k|sDwKl_1+cl7~bokhXv$}N4C+v^`Wk^eI9n&2i z$Ne>U&b+(|xF6tej0|`Th{}MN%79peV+gbfps@p{wB3%z4w%wd6{67ZCAmC^?}VF3 ze!09p0v^PrkW2PuHw&RWcw|>X>5WWyu7%2kn977$gyTGN>P0?Bb_9#yuq8{QbktvZ znY`i3%7KV+@069d`@XC+RQvmv8*VK(oq^@lKQ|aj9`ni)drgt z?1$QBMHBF8p++jh&<~&KiDpH4dDWWwrj6yRYwK22)RtFP)mAlW%K-jTIJOKpHo@90 z2j43%Usczz24{@fyMAK6K>X&&{<2*k4J36d&4JeM;-#7rV#*$35gnHi+G7Z!v~F3! z^w5P_(FR&qtT=ivup%&aTmRxmvCC=2T6_u5| zN+-iM#!Zt=b!N{Ic>~Ra^5c9u=Wk*#ZFv|Xrk)q!p}RRpn;5qMGR?OFvaxcgE26}d z!NeloYvygfx6NSPFnAvL(K7~r10Pu31%oHCQ6a8d221;|JTdDeo2g`kB|DDaSrX!S z69|suNK3d4kqy&%%c^QMF=aY2ogY>jt)bFPz2rZdMYVb`yc`T!^^ED?MCjwYVEVrM z!-KePnJ(kO9K|xbOOj7LvQeSr!+KJSIr@9MRckwtB}2Wl>Y8!P;J)5zL)dHJ!726l zD}C)unEs;C^sPqIe`YlOFsJFnl18ca)s(kKY^ z*QFq)q9FB55L@tp>Mlyecl*Q))z;RntZ2%#h&*WRP&cC4g9^d6KYA*d>EN82C1NTV zVi9jUIHR;321E7I&(e4Tk@_=&Iinv=!t{+Osktgd&{*11!V%E!D&g57;V=x+=b^Lh zjSQJ9Qv@*ZDAp-!+jL1cwu#2qZ=1rViD?U0!d!97^m4^5)BH<7R>Cym%6MYRcw!On z8S^&Zd){DLF{{6Aj+S72ZeKJ0Mto#e7mV*10T1HTJS7-UYm_zLPwvJRS-v}4)Emar zXe;B1DdUMnIGZlxYWbW$7fczi{G}a61&j{mo5WK}ade=9pBmDq&k?z8u zfnqX_hon>26vN@KD`WI+yl)7JhGCFek9O$uYz>OjGSSOv4@j=QKJzolk|x#fLW{p# zhow_j-%NXWP;z9h8mm!&%+sNOG*-vCGDA$oL`+YOR2u6Br9mXvILhNdb%r>PRS6_h zh-n8b-6+-HZSg`oS=PP}J&ewqR$90|`Pk;doU%fkz1(_kp|@@!B#fmWHsIh#p1feV}Zp5I|7*M z&`e+)W{rBsy0@!<@f6=E7QE`F@u+tZut`F@%=!BguziJgC$RLZJ08MYYArcWcOjA# zfo@VeIeo%*YFHB)2KBQ?1LC>izP{H)rpr2}N1eZc-<2lXgKnkGzqD@EDy)#wSrlI{ zz|M=ve9OXSJ4200ZH5{tVygYbBHlRYywWBb%=MS6mx4Xj2n~hJ^Q}zETVfOu z>y~`Sk85*@<=_>tcp#>dusjc@MUPY72VaZI2Ivz6Bj?}6Q-sI5=|D*5L&qT@+9v*{ z)^JoQtThZnKS$v?_n*Ul+0l-`VYrk&+Gfr%-IPA_HpWnwKw8WT_};>X*fK!oYq^o) ziQt?{k(f%6n4XcUv`+X}n%J-c*f7|g0`pb20hOkhD<*)CcCHisr~7fhi2 z4o%>AT@=TITuo4zKE?c|uXI-;G4b7E`trOOGObF-rGt~e!>D&OFw8>(TTGf@D}Yhi zqh2jAHH;0w)G(e8ObsK)9`)^4fvI790+`0~tb6-YU}_G33oN}kMNA!TLf{J(&TQ|J7xY~I|jn^qLl zbQ?6&KkoXn=e6)R7}~$c=!q5L?Im(EzZ(pJIsTqM$O*p9kbv|9OCi z0Gvwi_!DPSug4f#cYt$<$uWDB(okY(-?K=S$|$V+vVnCdFA2(F9PxA|U?!JMvE z-wc*WO8d0Ub27f0y3aNpDWw#wB*NP97~X}ogJH-iwhcP}IkY3GYOtevlaWU2nC@_! z=O##tc>&+0&2tMN^L49{;wesw#8isJw9TWmPWV@v_S;f5c`o(KwUr07u` zzZro);!+F|WW7qu*T`a`lAYB@)`>|g**|)uYhz_xC;kQBkc!59i+SsdD)C~(!zz(g zA*)34%2tVAg@ja9iK(g*(>AcuSUD=qsA?ZniBSkmhXM8#Yy#4BC%)UWD)C{24r>NY zCpCjr$MgRLnqlk1(9J0_(%joB@oP?s#8isJv`SQ3C-|VWzNr#FVTg?nHRZwCPFAv5=X$1!Jb+s=UvZ;q%?alajc$SsjTHDorl+%{tw65UX zYG7Ajmc49Q$0RH3Ew{Jr=V}0HfF#c;F+JgK_C(C2GL1(9?gMxfAnU_I$3SArKw^42 zn$p1Jmsew*nI4uI^cY-7s26LokOiSWLNVmT0d3NXBjk}yz)FZCSwX`oGjmnfuxksQH3 z3ye#%qSEmC48o?i`nB*E#bc}AO)<=l;}^fkCMp%|tKNVi0CZUXSdDW^Dr>76ie{{+ zT3xfYct(+b!m4<7*^DBepo?c0V}h}`__!HGZpsm~3B^iYQWBq0f_L_q`I@Gxh6-!| zqJK-n5uL?|w0v33n)=$R@}`aTRgE@UjRn!2aFV9?StK&N`k#3miRWZI%SYgkxD@Rd zrdxLn`EsC30>Yb#=s{MB2@_;x9@%J}WhdqmFiaHjrViPT7R<--nwDdSe|T>{5O#v_ z_Y$zTbYo>jQ-zog)n$LJ#e9T2a#OL_hk2U@$jPSZfXwI7fYj*~5adVX(l_c)zE=zy zF*OQ&oA1#m5Q}(qz|>!(!6F{F@2I~goWJ(vMR}WN7PKF`>xkz?n;%28-rM{`wXMYm z^ca%=2TbQr*9tAE&@8!~fr3S5r!6DFa_}^g=v^uia-c#>!J)u(h=?qI7f%r$>o^)+ zXnz1wyASbccO_^m(rEX}^2VlyUTXKu_~Mzfp_(j758w%FCewEa9uBk=P&>r+k!DH; zL^J&?NY+ehqt#3*qT8dQCiO2!(>Rkd0;ZW-NDFFt{ZnWg^YJ1e^Rm@wUnNAQ+DEym z_7T&yDtxPJRft7Ap5U+k4mViDI~|z%t29`|bK1AN8|~|t*T>p-a|-R#o*3D>*R^k6 z$hOW)VO!@VY%8^Ip3%NxNu!@TE6HAQ)C}-H1uT z1@`{#K{#@v^{IYXw4leHOv^iW+?i#&tMMymabD|=>h>4fsewS#9dy~N3mwFY*#xD7TVQbxaXy|_-l-m zg9n%|Kn$#UG<$^}msuc&!nXJ;?WM1@mF{dkcc+PACu7*DF}%ze*u2sh#Ac!O^EA63 ze}I&t-o?PS3zn+1O@ovsGPrTH^@D)ZFYWLD;3*G{Y%mP{Oagr2(?G=an_Go5h-y~q z!B*3ou=F0Sl9f$Ur!KB&s94ju9NR+I)~sDUZ)1I3Q*~8iO(W)uR@PQk=w%T8MA#?+ z(GFnU&ykENW6cs;{{a;X;D;kXa0T$k5x6GcHE0ZQOXQRxtK}W$doU8j-@i4#KV^O& zh)mFp#BX0~m|X_znBU8hVKVoNhBymLp2>sRfUE}MfK106K(;LB0-gyt5Aa&R`GB_p z9t(IE;Aa6J1S|!70&pQ<2jC(=TEr!Q9{?@|9ENWthLO@f>1bSZp)@YKAf^)#9s6UBt95%nSy-e86XE2n z0y#;mKvoaM?I^P}c3PjwlfmcaF)7JSxVW8C-b01%#FwbhxUu*K-2qLDwjV5!PI-M) zuvGfo0Dq)QQ3Bi))8AH~$@^nN`fS6j#k+B##XRM+eBCeKM5ljuGviKn9E4*lm6k$A zR_4?+G&YSF8dH~`O-QvY$ES<)e33J)?3qCf?o#5*QB0VID*#6TUJ1wrI9CC(D||H| z^L7m&zs#NFsyoC~cZliPkxJWX{3RxvD)7~6P$8F07T6@teXs+$g{crJTv;X4)^VPw<*F$e9k{O z>uT<#kz(%+Y1y2E{$)3G~~d4YUnQfdVt^Mzx+MB4X*b1H3ODs5sq0;jZ2_*WXo zQ6b-CVN^n$PjRL*C~u7GmzoCZsRF4TkW z77h6e(&aC&On11ve%aIVim{HC2;ScTh`J3U26~>roq){e*8s^Q4iBmXiKzsMsRWfq z2`Y^er1@>;YH7+5XULhQpuU2O7i=s+R;;x?7?4g@2BJGeh>&h8cr*4|PA9 zwX!Z_G0E9eAu-9yHKBE9N0~0`h*K{9{@4(VXfdz*0W$4TK=OazftLTol>fvc-dpBv zzHHx68u_1Ciz4UbAmE;9{?qu#86h*{XZ}%agNy5y`KfnqaBF4O z;&401tT;Z2@?GAQI9NUS%}_Qa;b?GAs{vvv3}RTTj^?t`IA@`>ZiTV4$0gyf$ixj@ z2;=w>DhljhQ)Z_x3G&`Q5-#J$*^MU0dRCS`Xb5dTz654xuL+MQg{km}sqlzJJoc)T z#)HGxLnK(8xED%XUH*9 zoKq6*cAk7QRHrBN36i>Jo zw_!emcZY=s?O@>EF!xxMz+BOmh5!9F^1_0k7vB<>3GI(0GUqA2grB^$I;au z5mS3aOjqnE?Pd5^nyEU#TNn{@YP)~ew{BFyafu?Ae5(T!x-oZ?_#()KbL>sYjEmChZpTovQ7j_GE(!tk1# zWt%=go2^F!ayaN1KsHon05X5YfE;z=1|O9YF_jWA9raThNBxurDaj2d7}fL3$;c~j zbSZXw7p&jczX!JCSlQq>+e$Tu!-c!;uXb;A9MhM(FjtAd*h;<|n;H%wNt^AGf=*P9drH~#s}*@&0(iEupdjk^^^9 z1IEb<>S8`%CF6se1zjV5W&?fMpT}w=blmG#<~dG@h%hG@h%hv}~-7?gQ8#-+e&zD3$h%#9Pw& z&~1vTMd5GS_=oU>S9&mvwK~5iTg2&@M!@Q1z0v~{;~ATrq}8(llhcT?WN0(bKc5m6{DTH{V-ucd7D$QZ--<93rkXu-D7>4DFW$w+rq&eLio%EX1 zjnU!sVJ1e$4K7%tLv5_bV;%X>8=JEL;c0VD0i?~@2uPcA5g=_2`D<+s_xq^!5>xFZ z7V%g!D2>+}C~cmj(fTOO*__VyVwuKFr4Fp%tPug4WJuP77M>7e7#fm&@U&1X#r5+o zky%*P+)z=wunMbXa9;UJtb@<&X4*+rrXTB;e#K1e1pIDc|KQ1} zVd<)Qo9{hgFj)kEh1zISgW`1zLL)=wfkB}`z(r`gQAG1>5ye6eoW{_ck5Y;ofiM}? z@l!L|NR!HDW$Iagd3c+L$MTm(8cCAh?*LwfC%j9YVd!Tzo+nuL#hHQUG>bQI^7!he zYGE-ym+V+|vyAX%e!W^9DdpkKYJb0(cW3 z(|$7`<+3lhqiRe{AgIm{8!p7`~Z0)h7*qy6`#U{0*t#GF#dk|8xq|Nqgg;)%_j%t4#YgKo*EMO#ihC z98yLTQ$`chqxh7z1OAm}ZG)|M9HVuy3KRY=o+3Qfb;syC;4wUy;AeDkNSk}tH3v@OP;ng}q}42+!nj~p2JR;bIBZeRpA zk#$|&_3^;SHcuJ*1|SDU-UK9LxvWr40x@MQF&!9D8V5#{W=%r8)2?vy9fdt2t!A=R zTTKL-WPfi5Ej*FIFtlMDFW8429dX^xu2N}ba&%3_2E7EOYc|_a4tEx|J%jzx$(R~V zamKh`gPF$g6y2ZAqK=(_O#3@#QO7u^!Nio&#MCS(jb=e%B?WIrLum7G>Z(rs+?{q#ojUMND}`OiilNw!pvA46hzTQ*cH)ZWY3JSKQiw_u(^N8HTB&E!r^x zf5fTwCAg(i!&x$GnN_t^H9EiB6{naU%c=7nr-&)1h-tq;Y3w&B4VUBBrQ$n+h3`0L`@fM|1FI#O(Yc;{f)W#7JrEqM4?rZu3oiJqO zC5fvj#`*j+Jz+*x!saoJRe((ADq{m#Luh3~Oc_Z`D;uS;vQb(RBgx;MG4e7*dU6+x z{9`)JOT);N#t+{};rx8uF)_i%q(y4kFp@QZGLo1wl9)15X=J3*z{u7eh1gGnTXOec z97*>To9)DUFI&I$Xe8~zumF3yIFXQRpm$-^iA8-sP)mgMG{vl+QVW42PApc|QJV+h zht=k918)imfnn%p8lH|&(<#vSr|M?6Mk-`n{VBu8jI;f$z;;GEz#KRpG4y=Sq~HktbF%UbN#l|Qe$fZm8Nq&5!yGvITac)6&f*}mQor= ziIfJRne7DVe@rXwY&;bw{$LFX#&oCP*CP4ViC{+NpqIJ*0jSfqtAot)c>8up#ShD$>51T=c z;R)|vuwlN2cW;FhBweRyP2IZgW+nH^?uBZk(K@D^y;3%nPBFyqdD?mUJ|O8^0Aqkp z0?r3~3UCeJ(|~n=&j4Nt_yfQ@0G|aUAD#mw4><;}3Pns6ikK>t(x^~Mqe2CCHw^Xf zZqR!Xaq4uN8zzV$=pGEjrM~KIJl;}p>4f<$ybF)!+Aw4B?&0o-39^u554JaOOXC4Z z2;HGD5NX=NOmld60e5D#Fz=%PnU~R~EzHSS6$mjE2(gIwYxq*yZw;nXLrUB2XcUrc zfxtjIm#n7jP7Hx}e%?BkBZysS?*OK1ATtd8uz7HPVjME{KzdzsQ%^_IX((fOtmAjX z1L+ey)!%0wyND^fh-rgZX>1TH4Xoh|Jv+Bv>od7}f#+Q0DRnb~AEvX6B9r`$Voti2 zhMEx!LqCJ@RF1$OaoUThuR|476&T5i9g2mfj$S7tF*Z;T+V%kqf)}_QD|v?p(-3Y5 z;~H9N2oD8h+OWk`3_u*YSA8R<3?!zT&Xx8&{3|Ub1Lwng<!lh10rV;NsA-QO78` zwWB@bXz=zcYT!6L)@8%cd5)pPl%d3Q3PEYFAY!F~p;$Sh*9Z8QjzqDzqfqoT zaoDv^x=JlP6cavC9M-2^+Tuf7f4XOMGpw#xa)^=;#}LP-^2nITd)e={xcemc!4_( znwD|)*yqWAX92?GAUabXF}IvS)K^Q?L$RQy5m68IMV&e={womVdtCkOlI;Kd+fyX! z=(N(j^;xId#+W)0Z@&(Sqc5H#mrbufAzPjpv6e=2N{2#%IZyiY;P}_^IZ+muyVPmP zoFVP(-M#cSBWuZN*A$#oHDpKVfTgG%_%-WJlf8uMy+W z6T>&-DPK5F=Aqdc3>|OHe2W)%)yGgv(aCDNf=v7JRqN$qbw7V32of0a;Df0UiWc4|pWtS%C8Z8vx4z8v$1XHUpjwxDIeL;CjHD z05<^M4R|)-1AylM{s!>2}Pk^ae<>C{a0MvhyF=5BE-=Og^NSyJr}~H*{dh8sG@0f zdns#Xb3$`jp}XRuKvrPbH*ZJrVYW0a0sZfQ2UOxxV@I8bM2&4Cw;ype_AXTUsDT>~ z_1}o$YBUWcKcfko>>|l2jiTO=gKVPS`hl_%tPT}?+0IZ7PeM|sl}7OuvFE;MS#SD& z`o1Eq0G`M1UMEuE`v58)sTB&n7`UCuEgWaSA0-);8Dp(I+CkIWgIcR~#y5b~iNA*( zjf0MAIjOyh{TZ0rP}T(+mPgQNJu(%T`kU{tGGH2lTBUEfhF?L&1mc zPs6F5xnh9c!Edg{3|mBoVX6KC;Q4#gBHBbTVaXPeCMk1^NE^!d+%-0wcX#$stsnhx zXw!{k(()x1)cP&o{Y;Z_`IJ_7hHz()a}0el?r1;B3u{x9Hn0eKqF_W{`kcoJ{|;8TD+S?d|V4S+uYyb$m? zK+5TPKw6~Jp@C|Vh^a*)7V)^UR%y!(CKf5Y(`el7h$VcmAeMcxKe;(RX7T3Im^793 zN{jiMvF2-YX;er!zH=+e=T7;7BeZaIR$J-zXXBl@?Pc5HOV88(DatFVS*hG+6s7%%7RFx zafX!3oAti3L&P6Dpa%;^V^Sm-RYgNQ0!(9Jb5d#Sx>1x-IetQ8q4FFkVf#b8im`C( z+fO@;((|l zmG}5y({a9&P%OHLogh*r5AjD_~UwuXhYprWw}M~LJPi6Qh48muQhJ!_1m(boi-PWlT-i}6^; z{Ifxf|K4mv#6k$!*f1V&CTJ4?+W?OMWOr#IAlqU`0g`X%#z=#;0&NRD>X>aR-9$_* z;_)l(LX$C3q2UO6?-HR+Hdw?v0!`C4p-nPagg1|Rn}l|h!6M#x^s&Dnv?C3M`$X~e zi-m^t2^R5|<2O^4@10<%}E2J2Id*K)xc*2 zy3NinBpu02d28d1?Rv%7pV6k>FozYnx0IavI~tfCCQebjha?ZgjI?i~G`4bZdd>~i z<4U{rN4uZcDVo=GnET1gfc36&e;9}Gp4NPgr0Ml;n z5@6{&ttaCxSnB$On_|JGGh|)3Oft+MJY{&!9)UmN`m9XiBwI5X&x9qrl*4#-cD@<@ z%duZ`Wko$MBFGtHgL4qtB$efp9bWOetmf=06uf~__~3`-Z=MYV$h@-rfxYes(0(7$ zr8fNm8D}owM8E-n^8p6}k~evPRH$kM){Y`E?I;pMrxxW-X}JcAcw-!GoTJIKk<8-Y zg6GYNTUj~cl(>??9al6Gk?RQjcqBdbTpd+~{Ixs|3;ug}7hW^PFckd3cwXVk9&sx8 z^7Q9Uxy65tRkc+so6763>8fsR6HX|`?We zlglZVO;eb*qs15`&)_;c*euI*mt%z>^K=Cu^L3?JF*wQzjhG6Jm{jxIT7}v(o_&LMS&whATe+qxZDgWJC z%QOoIdmse+fgq$1>=?O!c_w^?`OWl(C#KH;f0>6f0hy0l!*A-W77}90Z(@4Hj?#9) zztX^OS@htnDi=QF$FKDw4+=!a(HZy|;6^@N2?2xPWL zAh;1LnbAxqt(0G}-$Jd=wEq_%)Bgw43RvYBO-vb0Ot)ewZ3p}-jf|G*YRl=Jwqk1E zcXVF+lh;4a+ULFZInw(yi{Ty-0NYA`7c7C&fmX(os zW{6v*c#hu`SwQU>|Yi#Ixu|0Xg@oB%fZ^Ttg zn2MWN#9M$El*aK&r9s?}A&{r5h$;|a>ZM#9kM+B-^|}x* z!%MjshACz$C%B5aq`bVgZe>L+t}>~tsVlErYj?fD~@5`(P!X6zbFNNJw$i%cV>#B@$Kbl%Uv z-@K233dj2xC{5nSFdmTiF)&XH0L4bZv$0XYjEw@OJJbdVZ9DuE!wpbic>|s%Jk5AE z;5i%5Ie5;+a~_@+JQv_;#d9GZb|`sk6i>yv6whUNuEujMp6l>jkLLzFH{rP%&n$2Y8;tbI^dRT(bcgNOI^M zdtmb(zMx+i;jml9Q3ZE*5MYFb@9=6br_|p@Cj8Xl;Vc1IB@+filp=VW)u^m6J?!i0IQg zmbc>2+wgD80She$EMz)Z4(Tjc^q2mnKhpV-OEw%(aef+0*5$$hn)fRle+Gc9%AbLP z(GGt^uuZ`71heU5dcxm;C+GN%>Agl`X9+CmQTQ*p@P!h-ujG+!K5lgB_*9>!qZpj= zyJG(j;5MBWTAo|j*LrcQct^~Z2~qzFq^(G%tTM|S7Bmk;+)=3TD%nNq(8e`y~|1*OBr?hQp7vj(qMbKiQ`B zVVBmKlGbd)KkCBI`KQn86E3aGTv|Eem(FFPo3{3&-05tYu{w-Tio*xJ z!rJlsg0bzqMX+LEPYN~<*i(YBl(Ty=5I139HIiVbySLSjmaXibm6)ifCripQ(ZN~X zRP0GxjI)aByw&(y;jQsv-W**0R_j$^f*^+8*uN3r^;FtXw6&dFdugY z$GxRq3E(2Yn706jRV~A>7-Ar0DW)eDi?7+zr{-k?iDBp1@S|hnaKdRh{4^n@<@jD5 zzS@NJ@#|Hf#Srdj{H4E`cL@Fw=jeAWa>4@zK3txxK`PfE)eYbX)76O7S0YVQk(&~v zu@>)EB0o*=2TLRQS||Lkfxj5A2FS7*aa2jp4}vdpDa@O6e9&8GV$+X~jpW!?dDEzo zW5xYz&n+)muwc=wlI8OkEd)A$?!wae!sW5CvGJou#g10F zkHp8U@@E%Fu`D&H@Jp2zW*IyV*%Gs3JKolf5Udgx>mb}(rk@N3k`W5=J$M27RR3|W}JFunlnX+UbJqm*j{ zhOGI!3F)G&$*$>Oy1uW+FX}eS-=W?yk~f=ceK!gdTol2nF5TVbewoSheB?Y1?gYgZ zDrM7SPB@|w_T#Av+jJx$St!BiC&UhoQP=8Lja*k(QyDvS6xGjt12PUK03V$od5<~8 zqdgkwt%GW6DL7PQrs|ped6jH}o}BPt0@Ei&61or?S+*>`w0zn8li~r6B$SY<)YS)V zSt^GBR3XbyZfFcye&%~80S_k1RuCxP-MaUsN?^726ncsSWytC;sNDv7YSZ1HeA#{d1;P0Bp9sdU|4=Y~{YQfF>pvBYU;mk4F<@H- z`*02QIuy^9D1tQ9*oNWzMWt-U<=%~W-vD)Fk&KDWRJaPiSkAa()nL6rStP!948D zfLw^70>FgFhu)Z>jIAc9M%iDKe>SBA3kh)XajdDXE>>H&cC}Ztc3nj+>Iy@zuWPK4 zWd_tbe{*OpzQVRe3>;$RU@O>gYN&I54pO`6n^nUage7NL&e$+cTW05*L}5mxc}*2g zpv|`2&JU%&1l$WY=F+vImiahso4w?Ixs)b<&eD}&)-wrdl^ZTjPg`o~zeadNp0Mn0 z6fF#vT)&o`nqP@S+Z}#$fH3{wh@Q3MrKeCky7%Hjslk&}#jkjSIy{@W2e;ItR43VW<4A>qvW_*IKyaGZAD{a&8nKJhGKVwLvgYAx;qe{p9#rG`%8sv z2UR8f-yzE z5sZzU*940J`>kL_z+M+@B(UEJHU`)>!Nvi5L$Ha!-V|&yu-^+d9T=94pb1tC3=2n0 zV~jJ)C*nEY+h+(jbgAo$r4du7u7yEne9YfnU_rje{1JY`<&Qb}_9z16>;_i-zH z@ofAo=MRqVKS6n9Bl0n~3=aP+|ef9iWU0Q0@bzI6!#}l;r`+Q=n7^C@+A* zWAX9d%t!qa*rotw8z|QWD1QXy-T-A6C|d%Q4?x)(pyYu!Zv`m(fx>}55Y5+zfif&W z;V$@b0Se_gJ3!$+)YAi$*`VwUP!@v1a|;sRIsue|0A&Rzyk;@srxuiR0+e;2d_6#E z0cA2q1QVey0fjRT3Ch)=j6;c3O3|{plP67>G^NQ=zyR+S__;1X`8p^gVRIAlJOIk& z0SZq@xH^!YXF=giej?OXP+kdydKHxFh~Lj!pll0J{sc-rRs<&EVJX=bp!A0>Ul>Sp z0VuVBZ+#q;kub=Kcw(TO6Yz5=DE9`w&c*Zffl$YQ!Zq88c;AV7Hpl%WC2&p{a%p!^n;q5$Q6P?`di zPv9dh0m^VtUI{0m?{F?g&tDqmlPYfPzyhyoUmm&w(;*KYyAp0%dxDg0m&O(*u<2LD>|bdoTWoLl$3s733{+NFU%Ju-|ZBSkdg!(He&jkGZ z9h7lcsS8#b>2RIjmH=f4C_~YvNch>G)-gai7?jf;<*=rz4NXOB)*@1wh05u714`P3 z_;tXy>JKIrcjk$o4T2*u+AY7r-%sE<;p|~%9l1Xqm|ysb;V+7px6kj#8_eI1g4u+h z$6!;DEpZEem3~hvrkeyFbmzrgMt}~XK+$HCQ2tOlz`TA&5JX}WJT|7`c_$l(m^Rc9Os98Dv#_}(oKhzJ}KRG>Y|K{}T^u_au zq5E5o9-oJw&)_f1)q8g~j`I7_vctYq zce?Ru@l)(e^Dy7HG@b**PuH?IQ2ekRZ*}#6qWFo|cnFFj+E;yGOW zbREyQq<9WbiidVRrypZudhRRu@}0@)p~Q3gZ9#ghZj4Wg=LqpbKEs>$*o)u6qHD(J z*RhG>=QdwFMjA9gw$4VsAJvVi;)k^%UDM)cZ%zKz|7Y(z;G?L%?`KIA z1PgXlM9`?Hpea;acGClCCZSrEKo*FE1e1WEV#f+%@4a_Xu@|s66uVeZ{E7udMaAC! z=ic|`&6|BQvzubU-~WBsVRPo(bMNbK%FgVAJt?8ju(iu@Z_Ss`p>r=Op{2q;MjgfezwOX zvz+spvl?5QmuKiut4LJNh0Ix@=@b|`MM>xsGiRlyQ)K82OG0Njb5>|N!wj90By>ud zqt{o7p;N}3Jx~`L;oHa}c z`2(0kBQT8?(;u0=-1Jq+oFQ7dO06x=p4+P;CvmzoLVhk2OBz3=1@zca=vHLwOCxxH+{Yshre+SR?An^(5Ycg zaK6SfM_+5z7&;S}vpu$OXZ`R4o$rc|rc@%Xzw?b2xKoY^L_}^d$%VYPKI5rBgyDYC4A-Is?UI>$06Rm;~ghR$(G=p1k8 z9B1g@ump7xTs|i~Et(DK|hR(bsbk1N7bsW3>%rkW6Gp8rEpjo3bo?C17uQQo*6bLE!MrppGa~4n> zcVp|Xb2f8yowE#`bC^SCW=N;=jjJ{><2jc(G!NSGoMY&m$DD()O~q$u|Gh9p$ImNNZ z&Q~#KCu~V)Y_Em`b&iPnYUTvDv1^#qPs{t&nlGVqEpvKfOJ(@!1Gfz|W4?|#GeNNX z&b5Zl^~|A_0L7g8%rH#m@p-?2IV+)K*ZcLFj>!9s%+d3%b41KHF(=s9&CFS$`MSyQ zb&KIk=Llc7GAFn_-^Lue@@?nqR>RlrE?;!6Qs)R?cQ9uFwp15;E%I(IWCc>Gz&oF1Ca-GR&oX_&&5h3hZ|Hn&ImW=IFk3j_~y+bH-tdu&t5z?!1p#UvDu- zp9kO6dOR$`A^=OaVsW9ICIEwzoq zo{fED>U_eS?jYFld~E1^%ADYMK4XrauTKq~Rm|Csw)j}bz7NUxe0|QGD-n;~FIH(f zqHTP^9KB!Y98ssMnX@^zkg~41YQbpJ*O$zpIfdiFU#m4=Lgy>y1nYdw9Q|14D?^8R zO-d+O2h{@(-9Kf=v&PW*HVK{YjCj5^bf~6MLiyNI|LS)2TPK<2^F4ExX?3wy(-C#? z19SAc&^e+Ee`HRuub-Iny5{Rg!`IJ-FP$TN{lc8!a{iS$X7kelv9bU`{V=siptfrPD&Qod0AF_aJaEfoZz}xpE-ITTu<{QbUHJq80A83bJ`a_O+4WYZJql&Jn(7gii_4Du~K()eh0~%`)7SImcpa`|7Uw5;}C3aY|?_XyA+W zK)=HMO`Xk|^E&q1{bDmihmM$1LiYTB@x`52nL1lChaA~+(-wvf-8G*`2QQxlM_&VM zW$17(4h7Fm^jMpe5S{b1%cqB?Bih)u%+bd~og>O{JLXiOd?;U6+){LinRhzFk87IP zZUhdc?F?V^Y7eJ9&)xX8TAd?&^Z0YB^GbIbS>J=U~zM|?_%?vJK%iqg)8uU(mwhJDm`uJ8BFBAp|A^<~b! z*pDw(^Fvp?X69=*!NJxppT3$ep+j%}NeSgZgE+k(dk!ZL;>($?hNpx|u?r)Y*$US86(Y8anCB37!iw zm_se!E}wKmCzCllBNlwIzL{51WX6-loP9N&Ohab?bGDH>-xg1K#MGh3(5Hl`B<*+x z7&`PWx|C3`&S2(H3D`P=44olK=+MLP-SG@Dbm-R`DWR*7FKQb-Q@*;(%-255sm9iB zKYMFBqJL58Ib#dW?>a}c)%}=rmGt%TnoT^~*#69+(zbo=XZXryjy`7U9N{a>oIT-- zdc(KZe)+VSuLyH~!hU<+32VNDPL4}w+H;d27vH~fnZsu=phYRi(4ko%C1l4l?Wj4Q znmYN+(dWTDL#Kc_>B5b5N8!->O`SsKtO3VvKLwgjZ5Wqr7jl`V1V1$LFh9 z#bfIf89Kv~&>3#%3^R0SbV>;Y$5U$Plo&enOQS?O<;+=zeB1ddGjuAF&^drP`aD=+ z=u{@5Q^lN@wRkEG9qN6F@->1vdcLX+osmiCjA9P8L%V!N8akts&>6!VJzt{@ov}&i z&^v5XLV7%74V{CM&^g$M=O9DpkR)`XhRz{|&bTCWYM7(vYn-7&zluv#?-Pu8#v3}d zN$A9wqqm=0LuX5i@4Pp26=O)j17PCD`uQ>U3ZI8#DTLW7PmWt#;cu&d@o5 zITQ=NSQpI9?rO$!B6E6ZIwu%9bCS?G$&!EB<}>F^ z#6!n=Yxb+oHOuEr=Fli)AM4FGbk1VV>)6t9e%{?j4KQ`iX3nkX%Ugm&=`2l0^yPDy zW3T7$UAo!MI!E-ub6vi6S^WN5)7N>-xl!|VuHox^!xpN+($Cbnm^s&CYuDFBhR!9-$%Y29W?g)H{Q^_x zQs(4oI+qwamoX<_>U8_`4~k~er_^!Zb?GtRzv3&L+7?6bZ%!3wMILh+YFsMlF(UT=-grG+{qjo!zg** zmvR?#^nP)tp>uZ3}xq4Qi4I?o$A&lx%|B%!m!(0Reoc`*r{mkga34V|S) z=)BAveH>eA=)A(5J;d;1-Fj~6aC07fl{xx3qE`%^*O-G7_dK6wzjxP9rVh7dIL+5Sg6iA&r zZ}=Fumc*~4-eFD{TRUHG8#?bYClfk22)25j@zPhO&U=Q=yN1qk=Gez6BeTl)Hg(=- zj$ZG}4V@2MI^M@SD-4|v44n^?(D|RC^P!>hkxS?N^OkxX53V$HJ~DJZPD1AsL+4{d z=Tqhck3XL=r#H5Cy?<)xtV%-XbLRBabXFNUUnHTknmKyCe_`l+$((J`2B{T){L4lS zX8ZYyIeI)_8aiJmp|i%&`P$I=CJCKy4V`Zco$r#+S!?KgXXt#-oIxlXe6jlX-ZjT8 zpC6b*1iRk9H*|hXLgyz#=SM^5XP3_VH#~_$-uUt77enV~L+95dbbd2*el>J{XO2Do zY|&}2JIr|gV2<8?em8XfOhSh;>Ym^KG;~7DvE$kD>kke!K5;W`POD_J})Y+Cf`faq0`^c*((X1bmpXM?QkzcCxbcL z%l=h0dhJxRUt}_e%Gu6WhM|+?(pmM!(N(4n-SL$Y(si;7oq;Z$GoHHdZc}Fvb7-8m z;~8k^3}#Lr+2607cqN)PAlLXaggO17W4HUkhR#st;6f%pu6qB+Mqnt4*V&sn`g}3e z(AkGMbgvp6e_7Qf2benhGKcERj%Oc3XFukA0SOxCH`r#64@@0;&S*;LTuo;`LnoU# zn@}uBXUFz<+tdj&CsotQHgqD)xeyvOH?6nrMIP6!a+q_9rV}xAa+zb7&%l??E;HlF zV~$=vxrRru}1%Q*aY2|D(=rCiey*R2j&>72|ChQ}foJ)`QXsZV@X8?5UIvs219K@UoXsnM5MaU#xuvB z;~seIl{Kc$1m@71%`TtuhE8n~Ix$11*3hBnH#^UG@s5Y?k;FaHT09dCoyke))G?=4 z)0u4O9LgNJ1`C>%e|8pzJwUEn1p;K?@G`Mu`+vjHw zokr&L*5YX}bof_YAv<4_d(t`C_;?OuoeE87nxWIg9O_>**6sfI5ja$f*J)w#BLtzjboX!4EybJKE}{FjybsLhx^Xi zXYB8>?meD4`WSVbp>qOr=>86bjhDI={b1(nMCSC+>gxnUXHF72CmHd~F?3F5PJbEC z9czwx%Z%p~=IF<9CmTAaGG|xlP@1{C^iNagH0J2-`BX#abmrK{gO@INv(D6+%N)I& zPd9YtC82W$bM&!po}n|JIkX0+w8`8#9%JU2%+bqdzM*rL@FirdP?yvDnE5)JIiG=J zx5KjxopYE&YXoXPm+mp}M^ooq=IG^oj-hj25<2G_I_DWW7ceIqvEYmK;$}bHW5#nK zbM*dxfuVCz5;_+%M_-d%WawPNoLgi(Bf7;r?tQwHIpehcb%~*K8FTFW&}J5#(9g`* z<;>B~|6FG1T)`ZB{Q2^`n;tTCu4Ilr{#;?`T%~lV-k&_|y2nkOtC@ogtM+r1p>s_V zI@dBsKOVfs(7BE|E3n-Q{!UzZ+|y<}*E5GkSGzr5XXxC(9J&*a#>6|`9r?Mbb0c%8 zf!R7Y7&HjX5od$DW&R)qDw^+nKWmH1NebIb3s%sdEQ&^frIHp|gNFTR?-_ z##NiX^RTINCv$p(V3*+nL+38$1kX)(Ge@7B?lN>1GKc0Ae6hAZaxjJm`ldhg^B(3L zrNy(*(7Bg6IMKlQs;#{8FjMC~=1`lr%lTeI=YHnw4i3Ipxuq2z>$(S+qn{JL-_UuG zIYXq*h4XsiP=gfpd_BY*{an+7tOJ_07aeXP6@+@T9ge3ZVp%p4HIPFMgx)45l5KUO zM0VZ<}nHNXUaK z!tRoj$2Azmn7mp+agU(j#O?I7cFzDCGqb`BYiGERl~D@`FTnRyuvCvm$L5vXvtenW2!` z5_v@-4@zWH<^3axKuVUF`Z>EocJ4-dMG|>0mdG(7+j~qR7bxU-i9DooK~LnP^ngMh zm&l5MD$;Wy8@XK~*C`~ECQPIoLN@1KiJYL2z3GA^Qb_qaM=4l_EE?ji9{6gzC`jBlC^`d%2mk85;X?uOXT#B zT^ILBQAoK&UQ@{B5_wA@UrS_j>-h}6jCmc^AvK0MD9__uSlf7;%v0LP_9)- ziA3fpWS&HBQaVpaz2n z1?LupESAU|h2&)j&U(t%WfJMEkRK%Sr?M)`6jt{riM*(g^#=(~SEW-bkwO*o^%5DbkY6QItdR1-Lgz?@Tq%*+3i(zd zyDMM&(g7CI2*o*7B6Ae-hD0t>$WB9r)iw&5Es=R4d#rm)A_pnXu6qlsa}}pWB9|#- zkwo55$j18!tG5*rmB^M#`8J7cuaKW4a;mZ_*;nZFQJf1T;*52V8c61T!ph<7vwu8t zy@9-8Afaqw^`@%#5fbShvP*21L~;~zl|;yUUFfm(ExA6oBcT7E(>R@YM@E?cvyM?Y z9U+k`6mo<_)>HAk0i*(k4q`>{XGlk~frvA>cFact>Fwe?2;^87(lrMNLUWXd0a@Wf zo&!Q>3LMUUx!|m)BhLWo-c?7w2U4+-jttC0%t(15JHlFtAWoFwYo29zj^tFp3PB(} zB#|CMD|n2V-i`V ztU48vEnRK5tqLWwcgRNON`&f5D6dzJlKkb5MuNFkdP3#)0$*8+*$r#L$d z6P(G4^M*ujRh)~53r?qy?LAr|kl6~^t5hJ@DC7@`e4&sJ%LHd5RY5b-6?`74nNj z`YL49Bw;mQArDC87p1((WWl*iAyXuBi9()}NSZ==)(NX?6>^e9(v`1e5*eV7mP3Wr zZ_4UPiCnFaZKnuMnL>V%$mt3>r(SU8DI_#iAloS9CW&-Y$l?aU*+3x&Hwt8!LXMY6 zokE_H$o>lXNFqHI5}77+1}fwxiF8&-!C`_^q>w2RnV^u{C9M0QiisAgfcmqH$v$V7#twFu6p%GbWr1=6UH2PG0#Na_s1IancQ zN+e4m9~>??n($23adE^IZ7g1D`d)1f-_YiPf6rdg>;=QID-{3Um}wfvPvRHDrDoM zh1Cd!v`FLxg&cg0;Pg^RpJN5mtdJ!VIawiFA16393VB%~84B6|1i?8@A-73nONIO> zkz*7x@kC*@xk465WVS-ykjQ}w*=LTh+FKz9OJs^dPM1hbArDBTN+I7#OCbdpex zD&#eZyXnC3LG4?U$Z0TzIY>Ka zN)EEwe1R-coEQ*_=Q)KuBsmVU^_jxz3B_rWNLt9w#j6t8Kp{Jyh4<0J@Rm+CXY;d# zj)QbQM|gLTUx9RYS$%yjo_Fd(K01$Dg|7V8`Ign!g}iV9{zN)Jd7pHlKw1x)tf-uCLF6d} zSl0ldeyIgBoce#*pKyG#+ zR|4q<;fskTwa~obP~8i@Hj28gC(nj(h`T2#^ZJS$->1G-T;* zLdW4ecDv~B4s!P$qQ5)Hbqhp)caRJ26#d;nPDRzwXyYJ9-YtA>r{dXbp@_#pR!L+i zbN1xvB5fwI9^v^SO&D0;etzzC;z6XnE?h(HLRy3|MhX8B7 z)Dej8{V^jK;@xLt^){?17tA5R>UkgkClOueaYIMEr;qsKU`0C2VSz`bjzDysCyde% z@1!8J?eAw}i#e{+c+&7L-o!-wBVk3}nZp8aNF9Ob-k&nOi#H#US^5KPY%#~>{b|Fy zcsCRAPlOeDXATRzD|G~-dw<68F5X>5W?2uivBeyh_h$_&@icYf&zDxraalcQSanvd zZjH2Jj?3zKwyK75XM9fk?(@Oo?ltn2_YiF@i#hx)>tV~HUL_Dcr!N@Z#jkb9Y^O)q z*kX>$`x3)S-1koW#nOs7E~^&}t4ejp)Pau*U(9h?y~I|uTw5QX-@Bamg?J7g@$Z3E z82>Ye0Be&)V$^bwLxI$~IL`o~Ug>c9EXJQm0@2H7DSOw)7V(xqVjsC!v?%5fU_A#alecs`nGLwJheiyuV>siQiih zyG2?t$7S^E^|1*aGtM8MdwK&KLKx$o_6+o!9IGnwoB3m2LbNUv0 ze;NBW#Aox-2heg$rgLF+BEB<+v2TEovV)XAjk>9lPa;zUKCc$apmFz!%Do*j`%C36?0rx zD-5fRl&|w&626$@vii`-sdyJH@r#yMlsk;cw}$h}lXYy3R*NJliOpUayLHn8P}+0ih%iU1z0H8iSS2sjmqu=2&}KS4FMC!ZS@&jZ6U4JO#G(AvARQA5yx${ime7otF^C9#A*Q$r;nr+aokp)vz1*M zHMj1Lm85NT;hVymIBu&i*vc-A(Ao!nb*!F}R>W~zt!66}0jCGM9P+JWHRmmX631=z zC0p$xt@_Nm`xnP*m9!#`+v+Q}qIODY&{>}z?pRG)CQ#zIt-fZf9mQ^IOxl*HSwNiT zODp2It=6#B_LA4~=JBUER-3&oVB)x~zG15(X|<^Ogx?&isI(%E+v;1k+EH4qe3}XX z5T}9fi2sS>w)&2(vLvtD;?r>?Vq0A+t%&2cTFX`~((3E_48aa(=QR(8Hl z-00>#9jhDO6=KA3Tm8URmrGx<;x$)0R;#2HaokovvekCd>Z+ByVHpjG)9vqx|B2(a z`iZUbByZgRM)!2AK9N?$aa;Y&RvFT2&zvmG>3}%hzFhoI9JkdkY&A{tO3u4)fMfNm zv?7k%>Q}bvFRdzmd3K0n_5Aw+CXUb?j1gSoCd|6=H?P9M`z|CtJ~aV*?^`!qCbocZGN= z2XWjn(?NPl$lEF=t%w6dq%(k^iY?)tkOzQtcOmZpAw7rlGms5kNcRu%rwiEw2r5*w z$^+8Fg^UA|>Oy7#*}{dK4FpxJ>D&rrUl;NmkgyB+7)Tcv68fJwx8vlZ7m$7~&i+8s z6{62^AuiRq*hgth*IVbvsI6e1WFvYRSH{CiBtNd z|8eLdox~s3^U{hqZmU$b8Yy`vKX<}>$Exc}0TahS`o)>wIN&C`RcUo4Wk{a{Lh3KaokoLu~lE`Yy6ojhdWl^ODp2Itu|(>L!{LQ zJ7FNW86)jhVk+nHn?TX#hfd4n` zeXD1wt*tLEZsEBbU-V2JWDMEMw^d<;=OhA1CHgpaJOtaKIg5Ib*K=_>jm%I{Fc8!Gm~7T2k{ z?6a~m?Xt?sQYxw>vj!=PL9#xwvQ*h;$ufYRECYO#(bG4(X0nE=n1|Xv24u=w%^Hwt z*X4jr+hV`~wReEpJ3#FnY>!wbNV%spIroOH= zI*n=>-kao}?CkVtN#lembuHoMmfCRmfJlD0NZDm)XBc}&D^WZGVQS-y7?h&*jVJ>= zDWJBlF)AJ@5N({+QrFnfY)4Sne0WX$w8=I0-z|-YPoFkT#Q}|)2~920y2kO*iRjc? zaf(8e8JRetzOk8Ha<(QmPQ#N4>^w^U6B-d#Lv)7yY=fx!8l_rF!{6j-Mh*Bi^d;6* zH*r?9rfJgjsj-HZXv?f=u`t>)SCEt2Xl_$W-uOwCv1yG>Eu*Y#JQD%EJ)E6JBWJXw zsiv-_Ih-d-u_{tr0RdF~gvM#J{5TbnJo=ZD$8}0YnH;mGxw&pqgCBQvB$5|l=b~J) zqj|CM(p6nQx5x*P>>_cJY{ki(ZX2E1Qe~GbxyvIF*}xpHZ|sF9?7R7v#WXZ_?lWO z;l>H7j`h8wy+&hAO^r>8AX=$XXq?^>ZJZcw!eT*hDBO~x5t7C%ZyVE4R~#*);zko= z$J$;ogmPV^XQ#=%@GN@>jWd+VY`>k6oRP9FYaMNGA-ED`p$?!%h?m`aR-y?-nhg8Dstg6mCP5+Joq7G&azmc)-f^2{c&h0VU%s zJ7V~P`>fV^jE-umnI_v!oE*;xB4-EW#J)B(mP zyICY@rnQyiEz;5s;GQmqgQP=@de!XJ!k{ znXPgy29u2T*tW%^kyUOgqL4+I(;Q}(w14+frSDgS?bFpt*U4r3B<((#(ZPbzQmljI zaMW?qSQJsiPc+oYSvx{Aom>fZU<}+ha1NwS8YoBYVW1Z*ZW2uRpByM`P^C%r=cWCA@?j$vs%8Eq+bZiV%2Ca-C zXJ&_%Ky|Ao23ZcJv*aq#F1+@Rn2`vtEiq|ys4x|;EsXV8hZdaBr4})3!ahoWu$ z*pW?3lE1l;s$*F!_v$9lBQvqy4(DOu_c%L*!sn5M&T-&)7>f>d>diUorFDBd#i;5! zKt`U)>HsA=rm~Ofvj?;{e-YNwHKP$eGZt-{flk%F!W+%HINs&MN3^K+$%*zcroA#E z%UUDpAVpclH8>&515*1kizrcWh*B2cUm#n|CoVfw7-jI6h*ASmXKXvJU}Xu|r-C~| zSd~Bri&6>TjBYcXaO;RTxtcmukQJL^xQIES!-AwUf#?9Do;q6FuBwjJ)m8<3S~6NE z&%}qdJ&8{uVMa^W4B9M`K@DeoY*HPa7;Rs};WMT7GQQ0L(S+I&17ycV!%K~JmX10( zq^@YSr>y1qb9sQ%0ZQ5#&<;?;flI83FSNBs3>RK_$cX0F*WmJMGv7{OUsGt0FiKAh z7+Apag~RrUQIsOg{6;z|Y_Aq|$7o?wuTFS=0?lp5++(*S4$_4 z+nHAc$hjSjKG9CK9KJ}G9nGB_n=l1e*CygFoAyh}@NlKB{aSpS5G`zPp{ZLR(yOW~ zi^~ed%>*o-VITuEgjTh*Tuc{>?ezT0%G~n2d|@x^757l&N2;pwE32agk>Zkkb#*=) zU9h>iI4_)w%kWhwTJ4?`T(l~x$f4UA60sbPxZdHT1~G@3+c+Ipc75DZwu@?-CwuMB zjo48IFxU?rb2*2KMb2>|$-AyBd9iR2sfgQ&-08mH>8RN>ZKO5jT6!L;S z5+dc$_uQyU!@gpyWhQAuJBO|!OWInMqgFsk8n^ahoM(=Wi%gzNuy|ACnOaF(jA=!{ z#z|g`i+A0ci*Y`-3C>u1S{Yg8rs8ukuE=#3#-*panO_mMPgg5lCztJ$Y~{tcWb!Vq z@kCmEB`g_jagnFhSHhB)ZrzozWOO_BN?0-;TYn`i8P(vk>2^18E(9fg87{H&L}$oN z=dHO4mDoSs*`Xbl1`eW50d#B($(+rOD~F`7ge6x3$z2JHi=kB)tdfhvzF^ggD`AO+ zsd#PSc55t(TF9e^e5#Qv$75qJX^50yk$g?=?^E{8=c2PQx_B`$0MoA8`Lj_qeJJQ~|j>zL?&$Fwo%&c1Nd!Jox zwHi-D+JR_$TD3f;k5==K7jP@`RQx=|I2qTv5UV0Z2cZ3lUlt@jKiWERoY0ZyM>`}| z?fj7E`PNnj7kIw44O+hETU)J_=zMD%1m(c$dA_yPa-)OJx3*F(ne(l!m*kNpI@;rW zYwNXWCc$qT$7kj?;*Ki*Szt?Dz3bO>=tca)ipp3`E&bxIy3sx_Nk1Yq+0inbKaCsq zT6gzJMPy{w06qa*HLbp`MYtQ$Ot-Q4L^!&=F4N&NJ8cGj7lHd=+84cRA<;f5Ix#5< zVnlVpkm^Qk@rw$-GQjC+&P6+hVe01D>2w}BQr}WihbEz)!p5nciky-5S>_D>ab7mA zn#7vKxo2;iXjxH_{PCfX=CkB=6YFA4hI&L(M_#I@H=xqRuR+5ZVIT#unil-ZF^8_; z%b!gJ*uJ( zKheQ?eNQhmVNma--$^ATq2L=EW*|=g?9n-G#7zXcbit*aWceqOwyS~W_J(l6NI=Im zG#Lu6X`&bK6$pe?602!y;P#NTOkOE9YS>aOCG?F_z$x~TPKk@Vu4MC?l~@45%h2uK zkg1AQ5vep$jE0wV|^_K1XN}cuK%*!Qxu7F4)=W8v~qewD~igjYFy?{Skc_*QlMzV6@7{HvSGsr|XGfb&I1z6-sB zT(qaMaI2)9b>EBY9TBFwy31!OUFGrj`0c1d5~G3qsU-cx3;;heLH^vdeT4<<4r?B0 z-rNY?MbBra*Y!+@ry@8%=v;^MBQ7|*ugb6U+0pITTN@uBG0I$;xtsTb`>UZJm zeo0X4!H+T9dSs5}PR`>wuXwagBmKbkUz^claW_HRk8Jn~jD26*zdD;VeK|Km;uprw zgQ$y!iRBS)B*UG0;%-cJ2dWPf&#dNqKIAj2eOUNW9Q~8`7|W+tC&g8FPy4X(kjA2j z2qAVDnwSrbZm%ffN~#ynBlFC*!-9}_0`|1Vx&~Zt45y{#!V8as{2Xj#COS%7eDb2o zCl)gmPwTd+^utyAN!01M^JoO_4XkaPipQ8wz~xN!=!|Gf%_QL~4}R#$+#{5k{eWxx z%#QsNSDr2ZD($~0Zta5jU*ti5A}=3biF*{q6O>hXxAIXXYBr=B`Me(FEpK?sLv44Q zKU#f>r`_UL_Z_N>4y2y2HKc>J`MxIkP;P#}S`GKVjw}|sr&K;QiaSBaY1?-tQseAU zRjt4~Tw8y*8SY0IidC_5QC5yiT-|aoqZ&%)VWZk@26kbz@u4_Q|DiV-=+BD9LW5ou zVD_JOc|y+-51G!^dQLkPsn2v!tFUj6b>!L=n@6KQ*9%YVo7M{Qly+jX(m7OLnJ3TFJB(M8g@r2oqs9RCI z)bK|B^;aPEU-X7YM90RO8l$+!5HGB$X{xKK#nVIaCYt6b-3=~oU29XZbi^+?lL=0~ z0-|vuZn#!!>I$4dFQT*P;vqI^weqNufPnVkidozgt|X!(8Yb2>Oqhkc(&b!-U21PO zJ#WsK8H0Sex)-gxW$)HS>`m;WpWQ zK0B#as8_U~5^rP)RF^^HN2?K&hiAG*M##6zXo35V@1}y54^=$go;Wwj-JF@68`Pyq zwC_1Z*9)GFJ8qTm0UsH5LSF(J*8Z z($V9cC6F@?m`o0cUTxI=s_|@O8Db%nsd6PxqRQ87xn{18sJwPvyjF8pJ5(^C{S8gj zUP~wHx~^44`>QxX@3XyWl}#_-lcyf-2}>`B{nSyt zL@VLQ<(kv}^6cB*?Cd+M2Dyhis~x<`pl5DPA`k5JtuM?nWsva&(pcr!)lFb9})-6 zAa*6X3MtuxIXcjF3a%B0o^3exa|MbbZQI(nya7kG-UndGX4-D<_H;=HCRzn}zRSNE*&Bbx$e@w*V5XODl;jcfCL9?Q3EO-rZy*MvlLodH9qhnrs zymrcn*5c}T%d?DJ88pi%PnMB9IIzn|EZDjAj*0LeY6*|`ad;gObW9YQ7bldUj)ux? z_jxHX9@^9P-!kvIJ9s-Yp*4ZvaT)_DJtSD?x6^feul1WIG?$*O)Xz>EKh3u5XGG5c zF!$M^+U?3@XwJk)U{c&ev(phwCX2}>ad6-8vDI5;`}5AjaF$&L_Du+4{mdtfRgB?w zHVMvnJC?rom0Y@5Oyhamy7%9;fc71&@jGyPxVBqd@W|qt%#s_7Y!i2@%uaXBoUI-b zXxbE~ijoW5HNzwqxNQ<2xNACVb>K9Y#RpEaKetFRjp?UUo!+aKmWhTbyTDn|?38N3 zLDQH#ajOo%>6QtZZ>*Q;Qn_))&s}fQnOgmNogZ|1t(3OeQd`fXI(g@Bq)or}8pCgN z(uyi!Mfn`liwrp-`nZZ8MBD0)hd}2Pf_*l;%|i?~0=sdwYp8;;I!?07y`5nN99y+h zSm?P-TgcP+cg1B^S>Y%W#< zxKyw1`HDuTHymEqP&;vY1D-b00zb)`rlrUE%<%PT#21a!HcrFgWwCrqm3=#%9pq@w z8&a@DqkP5%+;%O_LC2|O#FdA3Pf_3{Jv-B)l;YyiZpHwvZw(#ELKeo3*q z{42_VmH&c5;8Snn*2uUaw7pe_(}K|T)sKI!b<)opQtd9j{{Hi?6g1k^e?7!;9aXl! z5Il#MR?6D%OG!Muv{E>^;iYY&35S<9%Ek>Z9sEReqp5YQetd)b2OeN<=9*70LQ z8y-Jz_;0<25k<6>kEnM|)%3INwmxazxWbbiZU0l}-O>GX4|O+d>K}{6sByZqBY*nn zTp9tejy$l>{{Us(&XiG4bWpTzXURMeoAEDyMwWa0Kn<*00aMrR(C1y??2qSlb-o|N z9OV91|3-)TZ$IL|Ebaevez|tz4h(Rwfq2U;?mDpB`G4mj7HJ+=vHs&Z_Bg=$kLTFq zuNu|9Fn+5cB`m$TcW#rH3D?2K^Mub)VQj_Y@kBT3Q$4HrGA>{7?O8-Awm` z)-_CQOzy^0jh*c6qpDlA)Qqo>wc@^0Zk?LL#J8O~L^{;<+fH|9j9ME+P4@Q z#nN%o9UQd0Q^4sx#`VnB7lix%P_1#avlMLI4laVYn>V$h7|`A};dytc<^WB)on>Ow z-+%qi!T2%y|3H5A_Wm!tvC3)B|GGP?oX|Y)eQ4#-rr%oSD0kp(Q1NZMW2IY~W{t0J zoG?WW$Q>)rH*Yo1n%c3qh0&4dU!yE8Dmt}D)1G~T%5#P0aZ^`(b+u7L@7}sZ&=M;7 z`>Kqkh@H!hk#_~3DVEAgAZdwupV;hy@2gZ)Q=`4Q8 z>~M9xyU-mhWwDm#Fn&`z17GL`9MWMO-ZP=S$UZ{vmglF}xJHB4tqief?70qDMc5{ad`dI?R9ih7)r#`7hsIgWS5Sc3rsEYgW-Z61BUi|M?5l+0k-- zZc=kqOJh^bB)o$mBRe}9#TiUIycUngsB4T)Yr@lPCr0sOg*zlsVlF}SJ$u<(nrA>AgZ!>9IL7OJpG}300`m=_OvV z4bRW1DCFFL$ALtZ=N9_L<-!;j6PHT^?clv!FBQ!q%D$YIqUu}oo<6j&WLR#bu%v=pt$$n1%?%e0A68O= zs&_@{)mBx5>d=;#o>LYsD$N~MUOK!ijI*878(PRw9!3%BTF6~7y>>Z@Vx~a`lM#+KEsv}&bo?jd;Eh*25)|(*aGxbii#jcQ_zO zQAybf8N6b3XCghPBwU_5yflAUIr^qC{lW1-r)@yUw#&%R4_D+B zMT+t;vkMPeKdc}mE-KDhBkgbsgfr^o$SEJYhsgfwbS5ul&o(881zRXrw5>Gx|3Et* z>F95TB?ZGu%5w9=ncVJ&XAh*|s1Yle+~OIHb+r-|Ba#}noMKU88AXwBS)`({v`DUU zpulZ1lS{~5Bm9@wn8Rhn%O|_Gcp71t%SxL;z>xJzBPZ%v`tTa(xNRg;eyVJ8%fdM& zMVMtuMAMK1#8BBLTni=gNTYeQ%r?&`EDq-t4J)iDC@W5`iFj6|$PtgWB6q&|Xip2H z*j4#Ok%fk7jm?O<9hXoti*so8JGf=mv{;nxObv$z_x}iFxH^)zRGYva0IJ5xLdTlH#iBXwDcQ6=UMPG8J(Z z7nU)vDxQFdiz86T$L_M>#_qCmHjB3^8&OgcEzcR2pIhy@D=$)wr@y-kfNgR|R95Df zc^j4GkM`bCQJFt7UM;`0qI!&HY&ns>?!+U@ zx^xJL_=^g2i*j?snw&>99`d>4@^rz29M5E;uk-lG!@_v#p8O}XnZu)@GXn|}mS7WY z9@NHE9#7buXCI!7c=^qtkQaLZOUIN@UQk+G7%43cSGC}|#x+ft3{dX5Sa{$wu%vE$ z6W*j6Yt9~6J{=1M%ozhKYi#?Bg2HfdPDOD+f&2KNikxt8P6Rxr^Pe1=HpGi+W|zFw zq2<&+L*ii=H{l#}m7rBkVLfWxTL{ECXAa&gp-Tyr?>En}ggmvu%? zX@0mYx45FHC{L6Y2hF7<3L}f?qPZt%IdYZH?WCTpxLjFJD~SMoE=|XXOPJMo>TwL4 zR5=xwhl?vpOY#cW-M(2^T7hA$VmMFLS{|tYxdfb^@^9#y7(|9)VNqTZ8IA`&Tx9-fy!9FrK$6?uMPIJYdfs3cMzAGud#qB$q+oM&4OpW7B!rI6ra zaauorK&|yVo zmOn!fG7}LpuntR)g!3ceM9cxn9dRHk4n5J~iONADqMecCcv^lE8{qX7&igL-O&7S> zHL<=0$GEll))cF$4`)prkWR_@dx-ekeGG@!5MmC&ymCaWDGi4N6@wz9M~{tI*#Spj z!8ZD#m@hN#n9P?a56=AeJ4b2396DSJX2|2VU=kg`1vBVK&X?gF()m(c$9BFf{UFbm zq#y11l3a&weaAwzmQDPvI9fPn+k2M!(TVDv2`J$=xiLA`qq z7&s&=J(G}eT}wi%I~C?mtvRJ-J*%p##c9vlCOjHvMoj!=S!p55TH9j(CI9c*-P*G@ zhF1)yRoQzMKN+%m%&@Fwdv{`}bBbk!t?oIJS8emg;Y+VEf@5RMYpShjsj(5udU7|* zIvTv369jiF>O1-;7FD}1*Q7$#$ow}Fct_NPYJMtSBUpDZEB!{#p zdFibM{tI|tr6<ks>t;A}cr@M!Cm-=5Ih3!LFYg7v6=XG;#ga`Mu% zp!YC%4-ZYO_m$)X>GgwN|GiVJG5ZATQGQPc=YGla%Wnzv-UMgI{etxt(4uLft6BEiFOD)i#UH5!ixgHtMbkoWXUz+kJ^D(e%E3;-RXc7YwK#k+Xg(Z_A(3j zrXy0U)9|6B^y1n}AME=HoNY!59?jNXeqRUPADqxA!Sib`RL)u8luMppxvT(h3^+qa z2kV^;-V|_tm%PsS+bh1gaFjbH#acR6=xqd^SGi;WKj6R=>v()9Q9f8Nu3V^o7lQM= zi2bUZav7+bNo8%7t(tloVAkYr$_Di4{+W&I9P9M@HRX|aPXCrSGiDpJAwDB zI9p5+JeYa5KdO&j;A~tUtak!++1 zlvIA>#-Rb&HxHc0B+qYrrgrcKILoI6=c70DHaSdi@RgHSKB(RA1>WXO!Fp8A`QRKV zd4A8*g?B5}90R@Gj!Us_#D|jK zx?~mhZFPK#^(Q`*sGPn0reXJSC!|={os`(`6(^@yy-o@C`#${41?SLHgZ92?@92wfwNTd zi0##`s)2tAPUI}1r}|M`zodmj9XNGo2getN-X-9?D|vqL(fZ|Ma2`1)SZ_b@z6Ph? zxq?SqulBMp91R2Kr1J!C1Mr;u&ct6LZHNC>fb*;5DZRLHgZyrDeu^~`A4-ZBS1uLs z+XBv$7bN!E>q3l^__*{u{Eh|N#I-?&x`YWF8n?Y&d6&L`&|Ie3zA1{?jIicT?NiA z*T%&c=l4qZ%>!rUb&37%e?88J;gcx8hl8^)o)_nL8vMQrPR@;q{ay;reUe9Pzx=)d z&Sp2o#TV!Ib@)vOC-s)Zeh&d>mgEKby#Soo<9Ts@sULj{&fd2r_IoZkcSv54-xtB@ zdb`k5yg0vM`0WeMa7`^Qzg$&kK#KAoJkJ`>m3N* z9B@`ho?m;Wdh7BK)+G-My`c5RN#I;1dBparw_d;(fwNrl{Ei2&1n(Pg&Uz#`AJqQt z0B5zv^QyPL$Vb;lQ>@HIiSscRoEs$1FCVnteF~g+CC{%us9$~z&P9uZ^RXv*_kr`V zd{49BXdemMvdNRezcq&*g z5AjU^=LX61YkzcJU@16nJsqrf2=q312JIdnN-*>6zqI2pa1MJmSdWfBt^wye$@9~D z61?BRdF(l%M_aG{8v*_SIK7{DcwX(4>SKR!Dqj#hI$!LkcOf`$OCGVk^r*f32+k%i zCe|AP&iRt(r$^T>7lQNhONsTiTAE^w!iSQd9`(!V;9T}{V!e;RNqZ$&uQ&8^z#0E) zV!a!|StWUX@lk#|zlQ7kuP4^41LtPR^V3U*-m~ER^hRR6{olm=fls3Hy9}JC-U`;E z>x12vrC7u83DTqfI~kn0ZwKo|Ao40Wo4*sRN9`{IoZ@$b_4bF}d~jZrJYsvbXX+nc zfb-{j!Ft1CpT8XECt+q9K1dLmssy$$qCY<_!_{g{3uwD)*B~+^MT|M z+pGNOeu3Y?DgIdK`Hg>cer`TEH%cDNJoPN>xC@-SJ_(L*3hY;cQ~s&o`OQbQ&^sKQ zcRve`kM#PiLO;TXl3)Alhl%u2a6bP+@MsN}|MZx)Vjo=04W9m2Pm-tZf%f~_3 zcRx5=d@Fdg^=dDak4$im_)hTr^06)K7lZST!GT7~x6f63x z!}Ib>=LxR^XR+iFoAVLZuE_8E;2iUtqvw_10r2}2I6wdH@cjH{|B+&i#fOrg-)pgN zCOAF+bo9LZ{s!K7a1P-XCCbIm@3r78k~}}Zl;7px937&X@GobYkDdf)Stp0*=eJi% zsx=fJN`8K6-98GOIg;nM&b}YKi@-S`)zNeOI>-BTzd$26S4y6r-oxN61ZUcM!FuW7 zogq2+%E_xf=(^;i;N8By&~x{rS{hb3ZGr6yaMntmDwnwNijHeH>zrzRf)Ax2y&hds zt$z4W3ep<}POl9T>s5eLD|tbB$AdGnYht}qz`0cN{PdO~_6NZ^yIW$tC&5`Jd476y z{p|;E{i$xrWP>?;6gtBn)u6@hb*upKI6p{UP0k?=Rpy zzjb20-@xhKL-73csQv8;&idOV)*Av&iRAg|(K`E3a0<3ftTz*!xsvCnNBO-OoFlgL z(sPgZw@MC7IC+iFG+!Y&>+J!( zeI*B9IeEoL`JDt__HMy?bl>J-;CwE5#P-so`rT~zRO_TYgq~mhX2O1nieIhxeMafH#=KU|gdn+?oZ&T!VgRE3*+W~?{$8TPG z_k(u|IN?FTdMCoZ37j7^o|oQQ@cIr;wR#Q-);kWoGH{kk9p}~6ju-|^~ zRBJpwlvKUNtve~cbHO=fABX2vA3ec)P;y9*l2?3GA8&&9_`bnFfmDp1bURF4< zUQBYNoM(JAug(CkGLl&DM9B%#qxjAPZ&psQULWvok(@+&OTb%@8?3iED&T+Me4i(H ze)Vx9cKiv>4F!Vd9*3NHhV*tT#5%DkSnpQw3c&fcII&*KuvF{h;lX+fpm!EHkp&W@vk_2|6! zwctEFI#};X@SXCt+l9Gsn|1;@7nyb<6GJWTNX)=hLAFbABeO~HCY!Mj3o@RgI-{E>?KSO(sE z&B1z;p|EjFsx<>2O0@OT`w95v;G91_SdZq*XTf<_^8DJ%67W6-=gt|4^*#dU2g&o( zqx!WD$N30+DEZZI8TNIWnQB$wL&@)cZ<^@mf-`qkupZ_2QE*<7yrB5r1?QF{g7xTp z`*Lu8lsrE@YA>N9Q>|6_Q1Z)f4Ewe_D%Cm`A4-0DU9jUcaL%3`toIQ#o&@KHqXmzC zrtZ~VhM?ngJ0{i2Jx=ia&fn8Ny}09mqrn>l&cb+J+`98ZdV-F|Um zy%mxZq({e%T`s|T5+6!_{VfaoHoFx42p>wc^~>*6a1OpKSdZqd`QThFc_?;IJ(^c< z1?Q;CgY{^=b~`vXUmQmu4+C54NlkV zgX5#$x$X;2mE`&9tpM*}aQ3?)SdZds1m}3k^V6es@mz4m-59J_0^Zr+ysz=R>Vw9Y z?l)n)x;a>n?rSLnXOiUk#YY8u7&wRB60Ar0y+(5Im6KO|v<|x$yvuJ*toO3yNIB2` zLFdgr0`INcg7wCNx54eH)&zVg`K@EA{H_4!mOFy==y$2h!AV&lcz)wO&F5Q#v+JF~ zdKBLnaPF48p!mK9=hwS}^(emnccVSyLn$b}N#Gp5Fj$YqgPSCW1+np}UpjC0Ab98B z6RZ~o?^$rV+$(r~*B59$+6A1g?hDqV_=+S4UpaZjM|xwxE51KiZy0z-g7cK*`SlN4 zzbpmky9W~M?fhV>)rb!zKRx>0-7IkKc_^{or{H8f9IV$Hdi#KL;3L6$2Y@#ZocA9U zJiqy933zFXux?r`c<$o`=R6@DH#R+n>mT?8<+lWS&x5no6OLc6^U9=m5I8qW9?U%3 zUj=q71Sj>W#CpTPxlr=_^eDco!TIXxU_Cl68}N+aP<|pGR&f31w=KY{ zlN{2brwxGPjZBscYZ0pFTs0iNwD5#;Qc5$L3&hv8@!0?8u(E1s}G8A>z4$FiP(7McLngi z;B{FVthW#qus1kgy)1Y=eDtcpd;gVGEAzErJz6)_f-~TC!SlPW){ojVI4`{stVjLL zdNb83!-taJ_)Nz~_28WNRs7;k2sm>k&rgr~$3k$<{2*A5>i2QU!BWp6RtD?k!F~}qDIW`- z-};Z*OEx%Le-f-$30^Tcmq?yp`=j;7b>MvXX=1(2KTEY@_)zlG3u8wkICrc{toI=} zS)V7?+Yg-CUnJJM1Dw$6U_HujH*gBS4AvWiJkA2=RmtK68xPJO z8qce}9EF8?`WjpZ`&Q`DIPR>6X5ufAcEW$#euv{wd??YD_2SM0liwIPp|wtYUViEK z0a@Tge@N{2MR3+go}b^#;kU<+IRA$aCF)0BepjRXJ_G0VpA-Ad`33C{pZ~|*nZU_W zRr|lP2NFUigdH?OSPhV!5CTlkOwUY{S(@pdENsnWrjrbrOb@e=1W;Q6K}AJnRZs*M z9-{ITktc`&K|}#j5phH04~WY{L{wCS|Mz#RZgo|4bhDSDehJMtOv_f5lb?s~ z6=*&?PCcOVI#hP9uR^nOf=d@Z|66Jg@%uP5YbI9bcM1IZpm}-H==?e+PjV(rsm||G z`0WkNe@q>n--MkeIk)jwt-Rv*4QNiDHafpsq1iBfbbjYTGi^q7es_?mJT!B5t843{@?MjiRr`#d?ysR)yl?e%Pa)k?q50x|)zg(cowENVXVL3NPxk?6 zYUWf=_gd=V7-$~z=wKgP&l*R+gl6ynmtUoEv^(!V2+hwtI$n$A_cYK42IeYS_rxHKuFK>Y6Paa(*ep>&&@gSF%`00u3SF-1v0NqgsyR?<~Nsf1U zG~%Tvj-T|?LFn2J8J%CzqcO}X@Y8zXebBw>(CYlIg6^}>G#yr=i_4$v5!;}-@9+{` zTzlvo?jNC9`bL+o()#UC_+_CvZ=Oq6X+Ko$dyhxMf6Wt@Kb7}!=>_7RD0}rQ+c0+=F#J;^OJm;e8MDWKmPPo;`biN^Xu&X^9ms@;!r;_orp?h=P==^T+XsYp3fBqJ9->n~=-=v1o%PW3! zp*u8Lou3Y3o(#=bJ-SNzO9TAA56!+!F273ik(tjunrh`${~LsERdeF~-bbL>-d>%b+V@3|hX0x; zE`OTOC!{AiKjlx4{*4>In$K%aa%n`TCyt-w!5g6ay+>P#pYnG|$JqESgKm1prLD&A zc#lST(-W6JmA4(bH)coYcbZ3Im{s8SIN|-!HFj3#r~R$1(A?nBRT{s_-xs0zz^dx} zPKEA1Xx^~erSsQ$5&uN#8!2d(tf|gV?Xkh5;lJjIt3S2xR_I#RR_CYvqc?jrF1Psh z5Wh>I>p3~XZ)j`igFv$xM^|_>mY*|zzH_7@o4eJ9&E-Ego#OJcVYM^o*GB2)5&1B5 zfA(nA9&vQyH{;Z?@mmPp=^kx0euHD+r*y9vBi)zAK&SFP0o~50xn-%8KheDoniI!B zcRDoh9EDEh_^?OAf6Y^=p6?k0-C{UA3*A1ayXBCajN_+rEQ6-UqpMclt)I{K`@Q&G z>d{o=r~11Ux+gu_YW4RLG;_K}?^lbVIb#$$RIBGdcr=EPf8yFr<=CgkMvN6!9{%#%voz}l!9|N8G%g@W`_>N+v{?s0C92~u#=RkMD80gf`b7P>>I;^XV zZf05jE`V-b8C`if=0Nvs86EN}Qr?NsO&%J(ysE#Q%jn9}oeo`F8C`t3Cy$Zt^fAzB zzi3?Nbmip`zq8Be;?sTe80eJl+so+6)73ikon>_C+9T^bvUAte zcM@$Lwc7`wd%~mD`bP5>A3i;*A=#MdY{|By>XsicGSb^~WMA*P11bhLCQ>b_#@1A( zHIc1vUVcEXHB+BkmFzff!7=ma^IBPaDx2&`WZOG(4avIBrd&&MRkG!{g)x*JBmKj@ zoAWKb>jt|9w;k8o(35M}*59?cx4S_fSB+$8^U&Gd1B1goF^qB)K9|Whq}p?-OnYv1 zsv()nq?7fj##FK+bDVM+EOTpS6)!YILfcy!+7hkF%mH)M7Qf~1?ff-6<5YD{a`~yN z3xk_ZZQVAfsdsozeW53RYS-qj{@%XckyD$Sa_#k$H@~^y{r^<63_Z2G&_6s_=sU8o z?o4O7v!Z6)9No|+Tjdu{$Bye^Yj5{pVW_Zvc+R06hs|jppi+9z>FwV@Dw_v-`|^X( z{hq(M{MqLv{-Zvq{-EdWIBZK7vw1%P!P4q9nYSn%u}4@?CMObdF8d&UfYWjHtt)JG_90NBLV?4Eb-RK1i zR9|PXfYDn18U^s2?Knl%;TBNs$HKcv)jQij<>MSM0iFxWMsXf^7WgJmXDazCUJjlQ zUI|_R-T+<*ZU-+09|GSAeha(=d=7j!_-pXJpxWB>^1~woiM~Fy^iY~wZmab>L#^LKYHLqQB-b>j z>sDp!+Sk<9rt2EgiB;)DQ!>|)%V&yX`TqQ1Z}%#`qg)uQ?G(obzHJ=jQd?Vl zGDQhwWu$*gZ-3AFk^b(!{O~^`J9FooIy#;@YKx2;)$2U!?@i#fqm7&LiZla9?P4E| z3ip}Gz}eYZUeiFgl_sh|^ki@l)es=^VgA(jbN&7hnsLzBhmgjidPO~5bf9ZPp0BzO zAv&hjNG+>l#A>_^IU0d2B!6mvEY~|68gOUu#{N_U&veLt4Y@M6#SAoeAic=%B7gQ# z{b?M@*I%@H==;S*;MHIq_(8B8{1B+KEc(3}WZV`11bzgRukc4fCC`{C$`|irU?=!- z@Lcc{pxWt^V03&uic+>1Ubg-vGY@s}btO#W<0k&n!A=<+AL`1Zj*UdA$1hYjUlrsS z*UkSYTl^2T=)Q^@8*e=ifhnO4+0n+Y2j)byc=W;P+Ei6*GQt)nChh~)`S zC_$p-5M^B=$rQ;QU#7gCfZq|IYTMkkDWB`lZyk2k%Jn1XoU<(?bT&bBr^{#t?>)$S z)0s%6n@VN`(zX=!|oU9|FgL9|6aMUjiqB-vE)b z#V0`alZ%t6tDQi7nsyg(5S#(N9o!Xs56C@%#Seh9K#djJs7#i&GVvp09raB;(g)t? zl=OjBl%p>wxdO6uP_i`F)z@b_+E7JhIoB3dkV8T>ph!2PD+~rxi^$0xlH%Nj|AaKH ze0zfWT^Z3`)Fv7SE5PeUlW&nKF~Us^YM*lDWj^EG3bz;dzc1YEYBi)G$B8$sU?tuv zso&~M(G{$iOVb|aucshA9`#$w_F}RSRkrseT)NOB$GE!sP<}&hGv=$bKoMd04@bpXmqS1>tlzt znvr!UfH&|v0e%jw16AfE_)`$MR(uU?0{5ZMrNHIjiC_lAC$_i-MD7(gfNAip;7Q;I zzz*;uAnT0cEg(8+@yj6Z6dwTBg5LvA27d@QvfGJh1W0M~=6JLGWjHgFU8O|Squ)Ztm+d~g_C0*-(U;1=*C@ElOhc^>#- zkabb<)8L!I`#}`&qCTHf1fK!l2J$Hj=K^pZW9LHfSnwTS8_1c6;u`S1;3q)NAQZQQ z)KT$g;AP-=dc>9BKH#;WTy#GS;k8H6MW=rp&_m(Iww3y*ruSA4$TQ?V)N)N^yl0mUU5=bGuAnQDdDVOVr5gpKR!Xv z4srL|;k`_PZt2oFQQ<$vc==y$r$4 zXbz6Vy~MZT*7X(ES$-xVt!)vaj`WP~ja`F&q*a1_i8~iIk6Y^Q?)<=TzQ?F1q1X0; zO8UJLQ$#o$TG=b6Ff!cN+n>+n2M327z499(<`6NEAKW}LoFB{$ZyU&$gnU$=RX>r8 zS6@M|2J@iOTo1k(+yGtzZUip}dqHeM&Y9r#Aac^k_RZke_+0?M z4Gw^hfrH@F;Mw3t(%uFRf#-l*!8e2FgKq(mR|qVph#Yd>21=Hn4?YQA0KNcT2u`6T zF9r_>-w8H=?*co)cY~zuycg7bMynS;0lpu+6}$}mK6p9!42WDW{tmnnd=*5#7bj3x z9|ZRU(SeJ{Gc^7aTu(iI5j+>X9lQ|yFHqy}4lpXa?%o-D7(DFAT7_*OX#YKBiW9a* z1!UK{-VK9Yn{(ZTL6jW zi~{M%w5y#w^D8$nm_M6M?`bus{?%2BUG+D-5164atKCdUy}gdNuRR}q>}<5g-k$uB z(QX$QHZP%FFFhO`4ZgAmOXHSid)_|K5B6@zZCQ{T8Xh#^cM@I;+jaS&;oM-?Fm4cL zmq)s-QIQqi+q2aW%S=*Yvd}P*7r<2{_+6~0@gfczM~fUwIAC~X$F{*Kp!RfrYGuocV;1Wx`u*Bd}KP-*` z>aOE`d2<(X@Cd}SRHF;bmht0W1#eO9sx2R<;Zygl|5ZqYk z#RbNB9nrFGiCMQBmZO7rQ?*i*LuJH-;;brhoylu5C2VT#+FI|vnk}RUd;5pYx=#x( zadi_M%JucqRfCya47)*>UD$dTB*G-_T?e*_nSFM}N*`x?bO z_zHLq_*d|4;A`NOAQfEv2si=Mp3X$@GvFlftKei%_BGa%MSUi8DyX424LlT_4sHWy zfbRi!1@8oBg5LmZKn;GW=Ca4+xzaBuJf;6C89;C|pCj2HHpi%UT2 zpqK*R0G%%j0s;4$D4;Bs&gcq~{89tS2thGg+n@C0xpSPQE6C%|*TI`9JT_ea2bet!;R zJzo48m;`?UHiGZj341Si8Q2Vd6g(091h^9XJlFz$1;iFxd=P8{9|zmPAA)J{SKvwD z%U~8<$hcSo9uKYsSAi#kn%hqSqib^68ZM)2&|Kz`J#o7CTl&JG#5YCs1-&C0?6uAf zqv{KNU7NAU$l_>}1SJ;p6kQL!7mxdKuPc9`7roY=%n1n@7U#C6Cf>Rk$(=9}E9cJxNB*Cgf%>^vkq?>h3O( zs&>8tE&;cLb>Q7#tM^+)xQE|og7{k)S#>XXH^1)#zXpB{RQ8bz#b1G62lpi1Z-RS+ z4}xmLhd^ciVQ@A0E%03M5m4>;9WdHAQpg(Z%~t9g*u%^A$MlZMN8fioHd^0s=cwF3 zVW`wUlwi!`^$*RZqxTQZDb@PNt7N>^O+@BHwYh#8HF9fiW4?F8#$n%K)Hh-72kC>5 zCLkT!Y)qbA1G%jpx%SYW^BDO&qDGhg=qMz0=iFO8#$-OR5wdwVC?q{`~(X6T+NFe^5I<2JQ=f zA3PL%9K=n){MOL<0l%~055bM#kH8`D$KVL~1o%Gir{G7yC&3?pPl5Z9ho6J&uQ|_w zN${88yTShkF9V+kRjl8D+rbyWXTaZrvVXn^GS4{JEQ_xLUjpZVzXzEYoIilbdFN#i z`R)7(RNwqF813&G2aCyDaBn5(f2VO2ataODCp+@PgWFd34sUG1^J@eb#)_uN=0si4 z124U7!NOXcR_CV^?7FN@b~FTBRnrAjvHYOtsv3x`U5M)*FP`jNUd00Q&&rgyN7F=o zMSZ+g$LdFY;3r3u4`ul`Gl-hVK2|i*Xh;aTs!C_I%S??UUs`AgP366l>8@s^oAb-k z#MRF`I<@tI&qROkIgBhVG}H|?L2P$IL^_+W%tCMZCoZm=s&(%%UiD_MN>J3m(?9YRTii&KE#EKjVlPmjdeoSm!T-u8ncf6=WXShwRAz{RzxH zddDZRbjK&LWXC75c*iHPXvZh9aK|UHV8{ve2zIU>Z_?SJCC?;fd4VNERK#L zBaAiX?IY>xK2{hX8W6^^sQJQJYPraV`7=uc*?J^9N?w_Ao196=d}MsA+oY^J^If8X=)+T(PzQkNaG9O0pM-m0`QAqEqFU9edNDD757WvFn9;}9`H`^ zO7P1d{yolJ;3MEyz+Zyf!HJaqZg39}dr5I$@LmvmfpZ_oI@`f-sfZ7O^L0?Q^#FJg z$QUc$0Dco>4d^@wvi5Tx0>2GD45I5g-v;-k&K?EjRQwoN2mTP$IQi-4HgP;GuTZ!DWY8oG>M{Gyx ztB2ANu~9iUjW*|u-k4?%Qs1`^lZE%#Ip{hBm0b`>DEf1db*XJ&xcH(|6O-m4i8eDa zY1yD@C@gk0UCk!6G+oIqB_G<=DE(%65tv~#Fcn^s=A{`%{#A2`UqgIoD$o+-W90YY zgII3J@ygqok_kjpo(c033Cih@A+4^1A&*L^8OWR<5DOh6kQu{Dd9$0Kh*0?@+CSi> z8nQ9S0qRGFvzY>{L85%FSOpPQZ$0Jf8`rdt^R4`{w7#&9`iACCoKGHJ22TM0 z1ZsZxGblURDccS0_E5l)I2dA#BS~E z0?H1tE4U1t1P@ZY5%3;taSGGFpo>*;fl-K!$HjpVl0HqU^c z`rCCIE8&bzvmHM6DPLDFV}`amjW!+rmvtKHEYfMpbQUQ=(zmMVC%S}eqg%A_f-|VZ z=;qc7T_P!9_j(#hUw-|tyD*n_R7+@3JCcD`3v%f$xb1B8NTu)u*WpHS@)aKGNW;7& z9m!>nj-&$0kgUMr!Z3^NLZ4Bdf_co6zf(|Gc!CS!Go9!bqX=~##Uqp{GRo^&U5&`Z4Veb6nmSFxoG`Ip>2Fjsmxqee7{LPE1=o7$mz*_L#U;?}btOIp! zr~$+d;534_g3aJX)O!o4`fmmA134>H)Thh z;xLDAA#Zn&KvZ6wb3nco9V}ugXL0VXqsO>(kFLbELT3T~>0m}9n%n=i%wo6ym&)$a zf355;`Pa(s;(x8|F8bHX?!teq>@N7%%C4__CYak+M|4lkFFMb55qR@xx@Q#`ZIn+< zRQ6#$^d4(aI~BFWDxWeW`O0V6rjB-3WK65&uRA|D+=Vy8w%qVWZg<*P=<6|uxMvbq zvZ9H_Y(jkVlhiZWK|)44tA9$1GCM2YY-pUW=MZR&ZJSC~E$OAQR@D;c8QGK{v!^0! zm%@!lw+U66(m0LltNgj;{4M3uYLSN2J#H!gp{>vwjaRh3Vkr$(I;6PBSx8JoeWORs zrDXx?pknzfxoPH)N6N2^fVKSJW_)3pg86x3FGaE9(WcmCydcfBg3fxqODPT0ZeLj+ zwyokWH``qFY@eU0AXmB9&OBRbxtrt>qVg1yTxtbJ3+PGyFl$b zT>^dyd^h+2i2rU8A1~*;^vt$`|=&5T4Gb!F#~ZfKP#+1)m0Q0jJTfp9kfO`~^@lk`n@D zI{L%ZZXYn&4`j8YA*G!R_H*8oC!jQ;9m^USc-QXo?BV$Y z%y3Sx(Wwc2i{^c>DA^;PGokK3YAeZ7rUKplWS%cG=G1<7fl_9^0%}iZJ9r$(_%$;1 ztDrK#TD^E4_%%?z0bd6%2Oj|CJ@*ap1@J*odr1$0JCW`q;0*9P;1S?=LHRyE3LXbO z2A&RnAACEAEx_#k{}8;I-#-R#0e=GC4n6^Lw}%b~nR``!2L7J(=JIEs4aiVUX=+wI zk{!YIz3QeA9E}xZM`CC-?kN@b+*@PZ-~2^=VC<(8t*p~Wf(cd`{{P5CJ>SnB>MQDR zq&m`Ex(fWv-!gvP{F#xfI<`;w$erhnTxlN9@qb@6m5QNpt6`{ZT?S#f$C2Ke2|-Bt zRD)^&8l6vCjZO(@plWtvH0kGjl9InU14%rjCThD_+rTEkj!2^fNlTIrQwt9c5E>Ov z!#TXcEVde?XJ+BkV|H?-e_3aA?;^?aGY6_;jXP!gX8!bG<1#wTbKo)j{skzzADRqTnN4j%2(z!P<;RaQZ|nEpjOuqB~hv;ItQ z^Bz0%YN=zFmYR3|w()CSHP&g&$jQ%mcxyxkhmP^f(*V>xt!7lam$h=4IP+cU3bLV* zb;b?+UPxz=Pjluor>W9i!^ykbyso5NH*ig}A}w@t1&txp$d9;|2dCOwAm%ih9<5R& z28Q{+yBw1r_$eli<-rA-jE|}L5JOv!e)~Rm1GJfa)K(h*lCzS*deDE(ygMCi;PXfOEi;!2`f<@IX-h z;`;qza4vWq$mfTPoXvC&1s?&9GVq^a*HE*4$Wc4mFlZKVzbdZqPZ5l8T zn!^^D0i{G^o}zo6?j?GZKZrCwGzo@JK*&y^TnCRj*pZ~84ydy39g=3oR2Tg-or_Jh z?oDQLdzlbBE%^iJ3S3qO3tK{Z%6WtpiWvH=lSi=aG8At^DR5w_*|82wnm9 zg4@9}!S8{az=@={8JrFlz}X<5!ZCiOgW!?;9s)OjoNFz<3&baD5zD`$<);HXHCI^P{BRvK8)-HVu!FEMB1Rt+wsM-9Uq4rSj zLbprGSS22p%%iww3rbhV$%RbH$t%3C^$R+W1d-ZIdA5)KuQr!$5mXVIz@=a_sB-gHR+pWO@2iN@xY85Vvp-E6vjSA2iWEjz-|EEmnF4{3{7w#Cg3w8|K`D#Py9p9zhnj`X2ZLN8%0la;*F%WDA zBN)|7>|=XN>6lm#-PdXwTJQTqL8f921!I%;K1HAvvRzVKc$lZyYe{hdZ(e(W{PESR z49%Sc8Rb8Z@-NxCk$|9=f)bEbwDnL=e{kh@6Dnmzp&K}E z>V|5(NnBm+rfjtcYyQ2cY?ADybDZ$mw@v5 zd^f0qz6bmO_+Ic{@KW&4;QK)Nc)lOp3H$&!1H2s68PqGlCE%4{)J|~iWXez8tZ=@N zUJ$$=|9SX_mhA!g)z#h2y@_4x`tt4yht()f`V}SF35nH<6ZQ4UbT(1flFXT-rP;OV zq_Ht}wx#Nu6CIgk7T5f`h6PBubE`yr#sAF27yUC6Ur1k&{98}ENAG1)UqRZa ze>z_pP5#BVkdcIEz{5TgZSG^&Tvst}B?)Jjn!mp=oa=HG35h+8Y+pWFRpIuTC|A1j zb0|M-1c!RGE|wlLQjh@2%4f+|IfwCSA2TMA zNeKdGd*L5s?9S)+hd|jVuK|w-KMbO`I3EF9!0SM*rLG5iz#G6m@RQ(Qz#Bo?QvL(f zeGE5)jo_z2*&sgyN{{?3sI9bHK<-a={u4YK{5*Ir_yzDr@HTKe_(kv@@OJQr;D3SK zJLB91N;Z83lx*4#z5%=&)Y|GE@D%V~a0t8)909)u7Qy?$3&C%I7l99f-vA#5p8~%H z{u%rZ=ul_h1*d?If;)lV180Ii0OgbQBapLE&QC!0nw+14?CCf^18)VN0`CBy1@8l& z1F`2izW}k@I==*2r#im^_X3{>`@r9T7l1E-*MPqTbtm)hz^B2Nz+ZuX1W#c6ybP`e z{{$AmKZDFO&MP4Eh4WYNVi1M3sPQ%qjLL4=hBa@gZ|hkek=@@Rtfw@JLg%bDcMUTk zn=bC!A1jJ&W0DHp1JKdF+MJ)lb*p}*+1EKUm`X$;{fDOH@5ek!*`jL{)raKMMc@}k zlTT&YGNMVygFRwXhzidxDpMeUKD((2W&TQ0RZ097XGC%f|h z3%qdd=q{?9hk+}=!$FPxd7y4iI|4i#JQCCqnWMlDfb+o*feXPegNwie;Ljc3#-4f{ zD7#55xCX2PRhRW(wD0{t!soz4Mbr~rL;jJlsC_~2>_qraz*|RapRnCdeRQE|p*b*! zdE!=){|Nhnnz__MYSdQ<2{o#08n#h=8`zV9JgVGk!@UVpzt!_=*5#^;-+*ev-+~G7 zMKBBg4qOZV9$W|h0o(-QS8MDCFN4?f`!C?l;49#lK<;%fejR)jd<=XId>(XY!`Fau zploL2!2`ib;8EZduoIjLeiEDp-T}@4?*sP(zXk3Os{LLEM*GCggiCw3@<@FmcaAkp%Ym+N!NhC>GtakD1-^m;M_m1T5o=tp~ zdW-H)sXh_u<{F*<9BsUm7t#zDwTFF}zP!ikTCycufhJ?IuT|-yAj!Y^{JEMOUkT#6 zK5wy*`g?_8D7r_g`^T7{- z%(3QMV)#rHr}5s!;D^9>gVFxDk#J?9l8jnGd~^=cI~tekz|W0V=h;C#$nrgF+$)#p zxu(jMWX$79D2Wfhnk7$E&3>)fO~8`K(b85GYbA{C(|;Kr!-VNF(B6Jd18nXcTHiZ7 zWVR9{v1*B2*M*Tx*U}Gd>|O7E`c0BbQGTlhm(yKDe2PCFUGONwYAyd4ZG@FIjLOD# zJAd|3-KiZ_0g_32K0v#uJ}(3J0xt(&2VMal1YQXq0pjaatOc(ISAib_-v?d`UIl&_ z{3Q4h@YCS+;CAo^@Con};B?aGF8$&x@MciwC_fEKue}941N=`=ZTopJ+F!EdJx!eQ zsYmiFxM!}okfsxmUwr&?xGle>tuV+G ztJ(qSA?NqDJE_-n#MY*^kgcsA{QRinFsAa&P*jWAr(F8o%vG#b`l-A7!%|~R z!?NNSv*Ir@FeLLdR%`k5$C$>rMnq_gtBZxlxHL~Y#wC626;1)^YXq&V;J1+R4GT(X zxN0cw8u zCa7-(Jq+r+@}uBA;19s>fjyMjLj4+nn+sxLhSM#ue3_%@Ii+e4yy z%jby82FGGx+`C&H=2kSm2;F;j<$KnW(Vcxp_{l-8k#*DG#o1pc?Md09bDYYnxmEh$ z2S*!QW!W$TOVwo`TWuv{wyYp_V95gP4=hb@8dxO>@W1*21MNy^DVBg#RuJfty-|}}XvLgB& zV6}&28h%2~mq!~H;mR_DLTzau+oq*K(L+Cs9Ta6spr#+~(tLtBLCuRdrH*_K@v)h_ zaZZ;VLUWS|Szvm(9TJAVw`U>3x^zB3fxZ3f3%MaK6Ex&@aCzhl4BJP7Y{Pev-$`mx zt9WD#l?7HA2=Cmyhmd1kA`NscC>Ahwl*W)rK+6qnGkH5q!9m-{yQh^Bu$wvSLt8^D zA<|_RJet)W^m5@BkNqWAH?_BmhJEl~;=Ny%(vYI8LaaA01v4`jqOTzcc(k>A9fX_r zh0q>L@MMSVpY~DTk?fHD{2DKuyPwS*xeYvq@N+=PoAbbPz&C*xf^P<|1m6PQ2)-56 zobxtN6@LNvZSX=+jc_rjdVU9ZBKS^Fvf^E!>hKa!)%0#qcbC2g)Eeo%;QiqHzz4wh zgAaq3fj2UR~;fKwSCSAyJC?OX-s!4HAwg4cj=1+N9)0e%>~7W@eKN${hf?v%P7 z)Ll|HfZWUKd>rKdRp%364R!TNumQXY0=Npi4IBi&1mc(P+yUYv>)Z+c68th4mA%i957jNv=84MQTL}$qvj=3a88l{I z$;gXJSn12tGtqJkAioNCfj0jVMLs&%s#g2 zN+Pb7fnr6Rgo!`zYaX7;dm(=g4dDi;qBkQ;9%^jbN!v{M+X+}b4|{f@JE!ao88Ig1 zLW+P5HQPE8g?A(8`3NXdQ^aOntdFv3rna=+u1s*;n+`z*@o2Ng3L$sT$haF>$?I-= z+l4UnS_^A^X&=?M;2Xgwz@^^rB=}Q)XTT>x zzLDwt4AkP`Dex`e)8Mt>GvI%K&w}#Hd=9(?`~~;}@Ymq8;D3XBBf$KgNIg8y?^)n) zzyrbGg7d)_!7TVY@C@+x;F;hbz{|lug4@AAf%k!b2BYJ61?fm;+RmtPtks!*Yo1rR zqW+_LM>MK~uZ%VpdV0<0-MR+1(P2U#dou${h)ItuSX8g$KLf@2er{3rhixJ-ZqWiWKa@m*k zc2^&lJ@FFKHx5+)9}j9i)Nkc^ z0*D^%Oa#%N9ln83Tn|nG&j+W1nkRP#H4dhM*MZYP)xUl#_q%}ifHT0Kf-^z&0Ys1K z|9gOklg~ZDdEnll?qu8tRA1N^jP|cQ9jO5xl3seEYeS`9$-k?6W4?P6pFUYP!bWgq zd$tyaB^_O#wGK@@ks0ED%G8@19;2L5y;o&ClyV5~7;QX+)BhV5gS$A>C93Tc`MGOp zoin$kZQ&w%@gz&GfQ8WjeaR<8F+UQp;FxH@vS`53(SW7VfF;p@#nFIhP8URTy1@PB zkY*)c6qKp_njke)q>tjsYRrd5)3%CwuethFMxi;7a9kNf4(?Yyc@8n_(-8I!mKSJW z`=~uNCXXfHX)k;NV^VEB5u6830TbXJL)L5JbZUlD$e+|w6HOK7={t283?gY;o zaBpxHcrdsd*aYqlYTnxe%z=A?J>cG;=9qoJv%&p9*?aZ}F9u%^%I-4<{2+J$sQst| zLCrk}fwzGNgI@v<0q+D41Etd*4t^7y2kPv{5up4LjskxU&If-1E(HGoE&^W$mw=O) zW0rzbz-6F(FOC8C0FMPVcdY;q0Z#yR-nAAy8BBl$uns&AtOqX!8^BM2N$^Rq5u8Sw zG=Xmfo53T%mEcie3#dD0+Q3aK*mN_|JblR*nV>ZA7P< z$v#u%z%e@wQKkqk<-`kV3pDi}&&LL`8Jk3W)#B#0|(x2ZtoYNImp*4C7l~4}_ zkFq2UNUDUljOWbBHwCvW`XYmcLT2k zXM@sz_W+|~Z5CB?2|QJUdZPNly@Z9n^&416y4PORp`vND4TXnWb6Z=k4b9+$xz&c8 zw!T9{IWo%rF-ds3Ll5m!8|m{Zzvhz(;3s1Hd?X8|+pEUx!;9WyyZwOI?RBk&21SBD zw@aHZ92QWB-M+2}zhg5W4ze3+I<4v7M3%mPq4v?~5$%9T&vrck=Xjxkb5k;JX|C2x z+;0|{x7c6YsqX93!vsFWa4elh2|5Y7C$(-3yhysCVRA5asU&zbx-a!e`LthdoeB9l zA;=ns6AlbgmH0(3WL+*YOr<=?*j5YqI{Ohwz42S0N6Z^C#_5fI`-YYxml3FJxrfW# z%CtLCT-QrZl-o-@D&{e zAsmld*V+Th?-%ZXVoQne#~yEMFAQ@%9^y~Z{5;|+%Z4&yiQTg+LEECnm}Dc}*S9Sm zh%C~$qaPVt!l7U@zYhaff$Vt|#dRK71djwS1?Pj;feXPK!Ns8D@KR8lbYTnFwAc7yK$&jc?6(YcJi)dzlr-~FH(s{lR#4uH>qXMq!Fmq9Q( zCv;J7l4|-8y&7uo zU3I}%ye_!K3C+*yPxev%)CVVnE4;ufD7(1uEyv=4;8h^|V9wRxDIj{QIrGNZ#j-lO zig-!ssr>0t9f`O2sg7j7YKqJ?dPg*u@poHn9W|m0X+CY0cPlDTz4?ZysVXHF^H5ci z5Xy#zi`h|R8^Nx}tgXdt97=4+G!i{26Rg<_V6uywPOxUfcNFCykZk9Xj`WhpGo&NQ z))KQvsX9w3 zBvU(#n}E9n*-C`RA=_Fb;ndschg6~q!~!DSC3Mx z=~24(-s=Lf-A_gXX(m#qrNV@!s?WkjZO)^9_X2e4&*6UeRzfr|d8~cA!gid@aBnk& zW)-2y@?1>WZuVq7bOnWL5DfPJG%x+keNp+4`NGYIUXZ)V)h2S1v*)4K-Ne|=i|#w- zU)8(%xcahQ)^jp_Q*ChysB)ePswk&{=Ycs;89oEN66^vse|3Y(PabsOyB^#J+yKh& zbt9yc5pz}`glqp?;*T0n?UVr^nquCn?co20hFw-d0sw)Q)-$o#wP5f zGo87HWMiVUCF>kSC{r2F&~VT4<+(Pg;P^EzU#=60`K<$m{yf_|hm47A!F)bVJ*8&$ zMM~wQ&Sb~hTyjl1)se`i+S_ssiEI+upg0nhT*WSV$I;G}`xu)K-xyF|E)g+Y5Cf8&cY%b+QD3eg`;iW#wOT8o6*pbXM z`y9qQ>1?h!nNU_;4&tran(V((-`-lsmvsDhCg`1XXG;sWfw}KgX^KEGXbM{yQ*31< zSnnoQrJB?ZHgc*L*_laZa&5`%>h_M6CQ?P7q{LHg`m|3jc~YloMw2t;c_;79R3=xS zsBca-ICH$x>|BaTwPmu2mX>4#&D62h^p5!6HppqNt;kHbt|u#DbBGZ=!L8(-sN{}h zT3w;T?<~_wDY<#bwRhxN6X`U$+1ukaMZ8ueJF=X-IY;rra8wZW3(oI60@*^MiL$uqwk1-UsSyDJ~jHevq#~ zB?boidOh2?IDHd&!HS}%FQ3^sGTc+x(r+Zeo3#h!35?WGZoQ7+u}i-KC%xm5A*=Jf z%$*6|S6feXn)3bm!QO87o2Dy#ljri~ss7<~*I?J?IfwJwriT3bE>0!5WEuI_Yzfo zduLnLPj6a~mFhZ^)*0xMC{-;?uR>(nB}bBReYs-KHr;y2oL*p&)Vyt=FuXB8)H`(i zocNx;vO)rZda$1vZY}UN>C7-Y2$hD-;V^4O`8_;XtcI>F8#Ks()~*e`-AwfB=)3Au zu0#$b<u`G}gYwdrLc$+ITwJS|<&C@CsZ>RALn)d) z{P}uuKicL<>?&{LO&;2k@RtnDNU2G#LHuTXk_m>yh~g-TEy+ZeO9J%<{iU%bRi8ET zYqZ)rYor&C)V8iRXMvZWNrqFlqZ18@{G=M0;mlNq5|M6ilV;SK%4kHJW>ygrI87>iR>pm1x+d!YK9RVBA#N1JKHi$OF1M|qOQFo%d&d(mesd?kwYBMR(_@B zh~HGV2~`g`JwD z%LW@2QdhD|aXXU%GTw2Ebm-`5^ya&lEIG#HrbiwY!J%~`4N$85&bF0p?W^1Tj91A` zZ~_t6(8Lht+LCO{ni)xSA(qs>TM>|%3>~9B zn`>`tS!-HKbfGMYuD-JlJzXR=(co+ysebhf=BA^(L_=~uoTy>zDZ>rU5u-OyaPHGu zB4@f)=U{Ix-O-*#<5^4p%`mNHlex~0)TjcA{k?7d?9O6rUoWp<%}wfum8x`juxnt* zIRUCTkrWWFjkwFDa21Z92=>8;V@QSz^CZ*;=#+^RDl}HXc;+MhZoSUQ<>*mM7sqqf ztT3&L@E(*d#hvBb`sBborRHW+f!UR*wgwhhovlWPRNy$r4eUtPw|6v{icyh+Izq77 zT`fV{q+TBHz1-T~(AnZHa}+$m3r?}1>u5~WC)weQFKlSaO`erJ%V?byrd6#r#eSm4 zo_Qsm$ksPwk(^Sqo(L4*wV51Cx&=$k6eQwF9&vqpJ&VtbPdm=iE?Q_7)1sa1(W0s) zGSq_0b-bZ$P1O5zQ#?Afx%M`*j#dAh;e`4pYp@PhXszx-R|LC;37XrH^kyxq$wUOR z!UQKH_05{&qr_p-r}vw8tV~iXC~90Os-Z1oO0MAXrQlS0)nY${h zkWMwUW>Ps8dD%|ZkL?|;33tv`G?s>NbaJ)-Dr@0TT)HFKl4>=QA#VK8uj6~Q)Lf;- zIyuCzp(BC7)Xc5eiILb;8$zLp#d*fG#Vk`>jY$g8fiSB(F^SmIs!vmAME3CY0WD^7 zeZ8AG54u8{5jkUO@noA8)=HAKb0|Z}hLi;O^qLD~*fCFNbkCKp;VSQgbNyV6b8N2E zw7FzUa+SLZw@tuGIh0ICa#f0Iw$;MoHxx~=+Z)X?TxA~bb8nTk1tUuXdU%r`KOr2S zX-hRWDqf;Qtu)157Q|Oc4<~1FB9`1#S`&RQZcVhY;%-IjF-oK8Ci`@C$!07c?Hw6^spyHT zYI(LpwkBU)W= zzappkc`&PHmCc&EnC(jyKHaDD^V+DnmC9~uPq>PP@-VS#9vU+BY0OhiW$WWe!OYc0 z(wD_@N>!HbV!yE^(c~^BRI$7GnN2h_u+|9laA`OqncVX zYmK!7PxMy$;gW2|3e3kywwdvuba(aBZO&%XIn7*}xN>P^8YaXBt>8?TvKgJ}zhG7q z*f<-q?QVDUyT{bnw7n5(R`g1`#^==8R-elxRwWzMgjgW!SNi#zZytXj-pp>6a7uPBpKeWSi<;iAK-}x-OSEmN2wb5TSlC06}y7;PC)w*+Y zN`JH#MUUFpP6j!C)?Mhwm#%+!g^D(BzTdNw6`DFvjm!!3mrVCy@4#@nFvOcNdk~vp z6I}NPXHj>{G-EF1%ppz--77*tQgU)q0^D`NJQHc?x`qpb?%H7vCSk2!y?OY!3b_ts zSk~D}f@QIn+xW)!%mig?78w*JO5*kT@LOKbS>(MEuSUnc5@{jPeg`uv&!LDtlX1vO@LMgt3`DT-{`mlxb6q3jgioWO7h=!{wF}_CPU!qQ= zzfVQXVgfar+{WI*^xK*=n;qH_o#RU3`docOvcARGVHAWpx<1#6Dw@c!b}*B@7$L7q zj2c)mW?2*&UNU<4FM4ljp{TcDR(gv&Vx`TwbEaZ3YlmVR+UpTDZLIpGX2_}_zEF{& zgw2qQND9W_jh>cmAd@X-Ygrr#EOBf~wqa^)F_UlHRGO`8UlTt%HQ6f-OyTvp#&jdj z0wx)`At)KbOUZa!YTEvmW~6xR;iY)@zn-zp<{k=izgAV;V$3;84$C+tO|K3&2=;9g z>Q$|(WhTV9JxNntmFmcLQb=tHE10Fdg438BY?KV;ieg=^sJ8Yt8zbip#jqkbTCZxp z9=EZ0)gvG*T;Wtzk&w-@>L`m!EF*CPGRsQl3PNWi*Ur&;C5=fHqh_At(9fkuvtVF# zZ?~d$b+y&VsN+DEVdIT9tNp~QGht#znUZ`3s|>Ds?F~tEKC|BPgU7kS3>ITQ(3n&P zu}U&Ex36YmNDdAb2HDu=8{@`@Ma;&#ZzZzWG3u}@8%v=gCb$vCqd@i`g-vwB>hXd} zu=!%_9>&n3$Vp!MZESq3#WK>E>|lYCG#)1Vm=3WDM~sF3?+K26FE;&A?@tcCZ`M-^ zo#KX~+G^Jf!wu!e=F;h=ZL4Iem$CL%Q+ACgy}XkfY)86T0Zb+?av0Rj;$E4w zCEPjuhHI#lNmM16svOsmy0I;b(Ky3MmP2~7JbRStv?A%cA4+Ci z@fvSOkLW)O&{b8CxQ-dLJ!7tknG?6^>@ zX;DcAaoa`QtYy`58y})ab2hn;tSWLrCBmN>TpOo1b#;oGR@zt7ofN6GGYa8(AA;D%wmHEw#Wjy2vMn$+Hb+3@Bz&C?=iqyXb7g zVi{MPk0M=iW7eM*EX@ta=}-zcT2w$L9UV?KB24@`w}PT1oHR4Mp0RI@5v^TYdpD14 zUa`#AN;HkClIE&}-X@6jE;W~DMi?zQPl&Db-YQ!9qXlrFfSsleF$4wR94fImueUrg41&^alwvygj%6vEz)>FCCdy-aa zi}6JcWvDeUL}3szTjXwKg!!3~60b_AS>Lr%@&F4hZe$&>ki zwhZ|6d-d*C&1sOUS-E4(3@cU}Z2q|4VOZg1(rsMVG{k+S>QluIM$gNmdSPq*X6iM+rop1iGO zJ!0Nuzd(wiE6ywR9Zlm(FJ9>^OAq0yhEezN-uN4(f+1Ji>pUXHGP^DfIbpQ4vIB){ z*>JwUdz%~!v^Av*X|v|5>tBI_rEh&Zr4!d)Q|k z^8JV{LucC9e3bW)!%G}-+sI}FpV8;9WIEua&Du;l$%?rpgWsCm02GYpf*Y)j0C{k0 z!KDbi65I&wgPIL?8^aQy^orS=m!!};_!PJ?=+{joqK>a{+y}hyMEy#3B+W~*`vp38 zNC8y8F+I*x{bYC*ZTxb|)e=kkiu|KgMX!%tHM!JY_aDP@v7s=+$7ZT77ws}_r%@B6 z|7#t76P1E5LPv|)!ZsV7vJz;g(=3J+k3)hNj|WIcf=vO_Hj2V2!HY7UZp_M(Pl~}U zq4W|PP`tFevrA2q+HfEDVwm*goTK%w)w_k|^Uulagx45?>p_4CXKyA9$j^b2D9yC z{GBzMUbl}w(q+S3=V|;yn|cSf46#2KbQlS~9QGH{Hl{dPC#(P`G|=I7BkOUB2zr*a z;7U}=h+L}mx}Da8udDgH=|pC;TSRtc6d=-VIkLk>99%+)gfqNDz&U6_U6{Tfkc1)#v(9dxBRoUy1s{ zNQpMDY-u%{oGQB4>q8Ai(WS{99%`v*fx?BaC84;!6ke-n%vb7EdxolSbw@kK9qqdt zNvE9Fy5lpLQ*)7sB%R`mEKRwJ@=)77E?N zMkA}#_g!tn?7({6UZyJ@7ntO1s_VnCXRxlYHCyQ8TB82$yxE^H6+X2rsg3!qW`+DV z4r6disG|ehQwJKf>(8!wiI>HpvLJ)i@+OIyWl0Qm_oDvxuJ7$O`hZfJXi`d}S#dUS zt^Cz(pLXVyz0Wry@i+E+>-;hT%3y2)Ms*bXoelf8_8i&<4n~p*3ZCu;ceb)bNMz)) zW~Go*TgFs7kzIWQ8@sp|d<^=3<&G9z0N8@a+)f0LW!NPDMz*3rTK$cWeP|L)*t2lHn|D5T3)7KFZ1 z8cG_8D3Sbde2?J%CH1T&2m4v$t2p@{S4&mu!Tz9mLVRKxL1)@W!fjiwBaPiQzi45+ zZC>F~+q`=7a{r9Oruva}`PiW?y3M5#E4tVoU`rX(1LRj4ks_ImT?6hg4RkaujYm}o z+{CM>12!Wu8gkdbK(tHMnbWC}4s#%7o>ywy&i*c)UX2iG!c()xD8R!S+X(j%7uTi9 zEDHl=Rwq;6oZ!e+4S9(Hh;E+Y2r%MH)0@(WQ6zJ11w5WrwG#CriqR$^8q6c=P$4uz zMdgjZpnO}$$CYp^l}+U+F5N)gcfV4rW14I&%5bA_Yye(3K9?&o!AmLy+6%QR&r#oi zGmt;Dh?-a0yU~uzsP?!@?HrwrReI%)3S?oQV*O%s$#n!tj>VgksA?=#vvD=($k`oD z)pu_{!`5h6-=lh*a+Q2teuJ5}>UrONHq~`?Z|WQYCA6bOfaI=#-4vcYK^f~n0~lV@Y&N_bbwMTD7<6E_D8{QI%Bz0kNdKlGKRYoZhs(^O z%d*IHBIVRbjNrmR=gMwE64wOn0Xm*$w$kx|$9-KE+zcy@={4Uw$yQZB3Ez}uTc8K0 z(Ng!v@7B(iUcaoI7f>AhmUM}!!mMz8AfDN$@V>4TA`f6HMp-yfc^=$WMt^Ly5rGCgO zTZb}OOzN%zj<_0++`#l-K1IZA*>uYzFR&M@@vj6hf|U|*zf;WtRrwj&;p|E9QHFDA zvq1t^oF@c1W7zFT7_WaxI7MUfDka>)RU)0bo59w0w23?y$r#Pn@|zUoXMNwzq^;B@ z2V<>6yjdt|99ki`sxF1Qu`R%q;5(g(TspNT*^=>DPK`vHeMciTmEcan*!GOE0VsUu zV7NJ4CUbPwNNvSW3&wlxVXsoj7(a?_EgDQMEWYd8(`$_^(TmfAFQ#=U4X1;ZsiYAQ zBG{#jz>HNjwvp+gnGvMH%Hv1u8jMI`S-0L3@rH!bTBKx4(4s(T%nY*9;fkC(g3dAr zjvk1xCP>!HuyznDprj&h8%GlAeTQD(uKt-n)9POgH$-Sx-d;g|DVw!D~)!D(fIrNpq$HR;X zODfKFgikMkzZ2P0I!) zyjPGZoi^ElC5Xe}-bRZ^_70NR;??rL>Lxm<1Cv1;7bw(k?CtA`x5HRjX6eACT3N z%Jwy)QjaSQ7!_L8RvX(+F|T@^b(#0xZhzZ*G_>@~KhuhK)-eZ2IbEpBk#OT^@8lSY zDY4s{f%e-aG6GBSc78DN_&ua#r4oUTJ&C~15Qd&CU;on`K0DhL~(F{GXHK6GzrG82i!i}=|Y$Pi_y1jstLX^NwvW|k6-oooz^yK~l%SjCBWbH21|SXW$G@mS)kb{d^; zJ64*!tT=9|?F45So6eS5%ME7uRJ#7uYESDz@%6e$W_$a(2Dy}^v9C}Vtmx)s-P&Sw z7|DN?&Q6Uc6V!Y-3$_*QyjaR=XIcj(O;5I_x6t?fPz1`IjTuBk$M3K@QFKlfQ?M!J>WQsE< zbiICNW_D%E&X!)byzAz~LOBYF1#*<4HQO?}Sp{uNp2}ijr&7bhy{;wMP~KDRV79ZW zA$PNbcPrZ>+CVpM_tHki*iMy(k`n^%Rd}|u*;&%Ws_Ce4rHb1-r?)!HUV*sm=$Hf zd^hS7ZLXs+`UxJ^cDU~!BusfuxTRrf=Y`h=$y})~1<;=tULTC_NUZjAZ{5o$k0JL= zW>%if3Gy@QQUk{?+^I%-oyz!zAdRbacjENKU-y+@f7see^U3v^nf5! zR~cvJNAI%}$$?=4zKzTk2kCZhACkX$eUjta4Swy;4HHYX&t*E(=3FUcwu>GVM}}_& z7p!=9;MjIOxFV%n0e;boRqIdVS5!ayqmk zCz_Jep}qh=tRi6xn?ue1403oyI!*T4>`wZIf`i9ga{8NX_BRF-@LH3LliV8~)Gy|R z2o|Nib-mv$jtItc1*Eyt%IiOVw~(Dg%#I8aGh2BQ&RhJIx{>t};kz?tDfOaU&4-y;oLMt{dG%%(eWqCn}qD-pU3Ei>IBTn&0W6d(n zVAZ09!BmV4!3L3TNu=7ie+##K1g90pi-M%-&N`f;o0<20eP$2p`c*Q{ozTfly*UiV zF`%SB<`xIvmwaXqR4cX;2dxgpVO)uW&J2m2uTw1vaxrJsbzOq-2l4!?#9@4i1BWII z1No+@UYCX#7!#8*<;Zuglod;TbckBFi1^-B0aeasd_pN%v6F6TT3lJ0Sc*%vrjcH$ zEVq5KnD<5SvS3rI|>{n+&8^4RzV{`<$q z#xL~aSH#9I^5c(-jbH4?A0HdP#E(BAHh!reUmF{Lv>%^{jbG-+*Tu#k#wYyv zhS>Nze}Ppz-uI_+Hze9ehPg-1I$_y)JsHcU-cP16Hs1A)Q8PBh#=GlH#W%;sH~Mln z6&oKA%qPYZEbuw3j3-#=6STw=Eb?uo-gGv~8m@F6+KRZSWuzW2?8+u-4PogdOJb*| z9^)>`MC$2r3vs{HUV{4s)b#p#PWg;<57VgLrb2z!fY$K^-#6TDJH(+K2HAAgXGeSCs;N~@_}4I$lZIf=>~V>f0hT#0bFy%d4}_$o=nlv8eY z&tV(V=ce+5xq-pLR&$2Ly?57U)p31;B9pIQHz8fh_Kn4^&&XKbp;ql%2W_9SyM$G1g*{t@D<7>TPbVs*hx^+_n3{^e)SeTZ$?h-Z7?KY)!pGlD9PYoJ90h0O*sysFk z4u^7l*e(*{2c#Sc=J@sQjY_*06+c?yUZJ|Pw&ZaKU$m+&KlNhP+R-B~CeT0cV!deN z$5A*dp}}O`+(Rb;v}0|Yt~GeA3xV&c8$STb)9_amc7Jbju=bTkYrdyVT7AE1}I@xfvteOz596PJsB$u`p;gTT`MPCt4}(_y%&fs~^tItMK5S zb}w8T{i2_saJw79&FoYh2ZI+Y(QH-+;@zvvMLN;2##_IxjuZ68e^0@a3}-)BMN!r` zA#HAtcC)8h?WVOdodm`i+dgRQx@9_NFWr;=nKAn<;xWZBn`rF8VD4yhIqmK7pQtBdI3{8FR<8L>t0H)8rBO%xsUdHv%Bd+qQ(>swY3K*GYZA_tqkgJQ~!{>c+?sm zb@(4j>GRB{+7#QNys?znV+;gO@P3&$uG;a>D=IV6C7JH#fpe$YGScNj|I4v*4NCG;A($r?S zyO)jDxb>Ey$7fci(#C?A*w%OBOYg&7Q5hQh4?jJIuq?^2}+f`8u+t;0$?;fu2;-k#L zFBixm3uO&2nf##KKI^$Wx5B30VWEOX@*Xbc>`*b0r8+WghLUp5pi#~-G3mApO;*(= zprD7h+&oKt)#DpZdarQOT)l3$$Tj>vV0^If?$($!Hlo(ViTbsWrP8Q%Xl~>h=;}rZ z()q+n-Y*A*b6LtlIHz{YG1_PiGNR&xo@#4sk5}UNC@-V8BNwV3C9Lppvf*PqZ6f01 zA6(NRvtZf#UR0PxO!{p)g{X}UU90bDw(br3xvq6XxW1bmh`^ouUgW@F-o&o(Y9G&o zplsOKJ6Pz*Z`#;pocTD9f#B=xH&_@zo>`T7wK3I{vO+=!N zZ)$Y7%UF`-YH1T}JjQU$$)M$7V@~j;Et%=!3+~>Muk8!vobNBWNov#5u<#gYYf}V# zQOOXPOIsV+gz??_6w61IOf1f0xYZJAyrZ@ymj|(UMXhS_fqU&T4uX?f!s@r>SmnZl=Mt5 z*x%)~Rs(DHh^E4FP1UV;Yiv6DES1j8dAx0sv%Gk(k|nU>^B-Dy&vvHP?DG!10MnE{ z(W-5L|Igl=fJaqiVZ#+bj5lZ!1y|HoR*@wMdxU66nh;G$$igPthNP1;B!GaQdxmciQj)x=3rYf%?!~oS1B~39b z`b&)cT}GZRD@@MGNgl`V(q~=hDxD9+{2a~gpoIZ?%I!D_C4x{&5D&DImM`%5dUd4WtNWQZG zjwZK=zBX4@t(Rxc1gd8iYF4T2>2o;lPTmVREHd_De1!Z2`62aydPa8{&_}ppYR-vh zU%I;j#{pDF=935>bR2-7d|LkokIOHeN}g8*eG(M;(UTh>Weqd-)(I zzw-+yh)<{BRz-eic^|MCC31&vohwZi>OZj%iWx5I2pk<)^)z%|l_~c52#^$}3;B7_ zNBrdsG?0A*8mjDWAVX>za`Pgw067da70<=Bw3-XlIQInlv~#ie(b#ot!)z&sxstyl zdW~xtu)i0Q3!9T5{kx))GcQE)D-V$&)f?dKss5_YSeS=!A2tJKs3)NxL?}2BB)|eC z?meKlwuASYd~4uf9*q-m52qv?UL=xz)D@Rk=ff&X$#M@Lp38;ExtC0gA?t-gt5JI% zHu5XVeGd$K4AIW8w8@{jBYw&zT2?hF|?fEyPX+X3Wv9K&F)?T^C^ zX4wm*W;V^n0Vz*P5JaAebIoVq<(FZc(BuspR^sW~H1lzWJ!(MORUlBBdn#Or5lCl% z)4WVelAX+@N_-N1Y3>tC>gj(maMMRM!6%_3&AgN!o_LN&`y=GAYI3v_2Jy79O>5>E znw{w6fPO3odSP=F%D`9}iebhPXqOrZ2!@04mf7hHgg(CCOZ^Tb#@q5jiy7Tn{= zSP%HGQDzVA0>*Cj$k@gBu*Xv#ubM?uyDET-^q@gV`cSiIj=}azh4#w?YI9~2wI5N~ zK;)ph;xUqebG!juf~eUzL1r}$-+(Jw5(`I-JxJow{%p8S2tc$FtB^`bBxfg zVyMN#@qXKuzn_?>+Ce>U-OPHb>1KdX6Ncf{Lzw;~vK;MgpbO4d6BGG2$UrmVU_*5v zJv;W7!w(F7Zy?J4)V#9jo_-%6A!hiop%)8EN~*jiSYL$#4Sk13bWgL38%p-UYr7hH zO|o2-x6tdO+e{79QGY%^f)~t}y5Ys`4ZX;YrL8B_r1zRp(A4b03)S_MmMz~Qi_wFZ z9Zrn)~56+^FU$!g2SenIx5{?2xAMCE9Q@Z zl3q(+gv{e)SMEEUT{$408@xtR5gVkrw|~b^c#+w}3q*Bt0&tB2*6x5HMR^dbFf#o! znPfD`bm$15CvOjLArizdj)}t{Q#KOV`3P7<#;#95v2uRnVm#ARTC&Al6zB$y&V#Lb zxT)E+oh7Z)u03sh*{m0mxMlMsHLz(iBR!j=;MzFIH&h^AqC9Kpv&zE6lnbI$NQ%w< zB~x<%hT68qM${rhtriTQO)#!0MvfSCKae;TQxF&{_{RBBo||(o=BEE1j-}C@b^C#l=Y` zn0Y37usn9ul3MdKF;SxR23e}RlB5Nj^z`dPsP1gcz{{9^v`ftJ0_~Y+9(x|HN?tau zGR@=0oe2_n((>V=^hO1*HRXH3j)ex+iT8NUPRb4^gky<=rwOI2qL>(^)J7N7-{3fvR^ZW2%G^2oGjryHx^tFOo(LKhfBB5viPEz3DVjp=RPi#ktwN+a#f`Wr;&(hU zFK8+b&ya5S#Lmk3PvB(-_Ec#jLAJN590qwmI3}_4Na>(G{ z_v-Tb>Ea^1|2(Oi#ClSwuPpXY+OPEKstaMI2wdQ9Bc&3kT#lXP%>_&`&n>7Wv+UDm#mu<%8JN# z!y_TCGchO9Oub{Ep0jc8ookGA z-Xv?p59V@x4p%NAp3B{SI0o(Cm*pc}lw>ph>Rpq>*Zxr~CKo{kSd1zDGNfWEpv0w- zv6QxfPhHEz4iwm@lQ>v+aWlDZpfDRUxbW0|#BPWx#lUObjOAlZW+h;>4YJ zE3K*MNTYVT%zKlEoZJ;qt|Mkt`h%rjq)JXQBB130rh$TBx^XpC62BfMqmHO+zD*F(< z;X`C=A0ij~)^NI&vH-xUCjaN^Y~q=4`H@UFEIC8Ham<6%_F>~N!HJ2hyUAb~1*Elv zpa2@oG>Bf3TC|;ISebuf9)iZh%ly+=mk_haNzH1WYWg8$gR@{G3OtV)ovy-u*WmX> zxq4|V9a@Pl){2WykoRyQgJF@s+*43k2*v90smJ6(^qfXA4=JnQlxkQpMUSxGUFD8e zkFK3BoQh9KVsEn}`Xx6XrS+#s1*Q__AQF2f_{QG2E2mGiDGzfVolV?;1#HWQ?? z>W)eray>^N5_NfqMN+B*v8u~$m#zt$erZlzVq!58_XSzSRfj*q;&~wm!{+*@r#k9F z+BV888yOp+Y2b0tP!Cd)7==PtC#sjhgPsy^kXK!$pvQtNt?MCgxzU=or{RR!e)p<{5wLHG$ zut`YKUpZJ6Q7XRqL%DX z@-WBmHGNjr6Njfl^GcHI@Rk){ze5)Vu~^6$svCmr_d`6H6A@_*;@V{~2F-{&PZLO0 z%Q{P&Y}_=qG;EjSvh3!j82!dGKJ?X|s5nP=KWu)Rd8U(FvFbZfOD7gtSW&{+u*le_ zlT_oRDXTNkenEPS*Oi6%|T}wjZ zQ!PL|dAOgRwuf8@Y?d+D5cn>f8q{_GTZlbv14J~aZOV>SPH}jmTaMlLJw=afn3cv} zLIIPxJfU8#M3PfE18)=-IRtdC9%uYPshhwJ0ro(E;!0U6hGSm`T&K6%q zxaX+G(*qtE(2svOtehmA5QP*s5~^|084@lc8?VeaVxl>(98TB{Lya{pt5LU$<=p{o zWY%|PNzhD!!el;?a~VSksb}OyeTFmhO+IomkrFjxJSzT5y9#8RU*xiz9Jt&*_5~!iIFu| zQSgJ8*&fgw5~4x)=alP0rrKa_6=-r0AtenPqDAPbeHIcdO*IN@Hs!1xM$`4d>$%z; z@}x9iW`{OLVVWediTj)uE*`rB$-3-n{YXojiXy&4k&Q27(KI5I<7D+?^mvh*<(*#W z#l9t^Or{}OtYwyGJkG^5Y`;-pr(b6^Bqy`T-KurEuL7dTS41Ws-w4Q@@Qr?2 z#`hE{TQV2bU1O%75=br3`7`EI+(UL>z%_% zA2Ri#TUe!O8cu{n#(tvvs~tVN&uyEUJXa{>O?y4g*21GusbZ?Lo*pI-xlKPk%W;%Y zM&e`$hN3g~YnC$XY(`C|>qVx=M3r})Bze#}izg8Usynl5FQ z!9%0wdcBh&`Pdbwtn>9tWL0`Auz!mZ(_>Y>!6FnLggMKVJkVf?;pM?%-0((8KM`qc zut;ikdHD>F7c^$ObFG$GM&jz=05{QKS$*mLlP-GDE_}&PcBq<$TxCZA8dUuy$9yIR z{Er?>XM8)3cPt!drqFN-2Y~scQBseopxDUjn5=tPPbRZp&FTKwWKO zVmj`9V_8sL{~6uDf~)OV`TeW@W8Ox|%S-(m5fo-9iE>FS6^!$OL_cyRgXhGV$)g#)fhk3vE2*#{ zjkHMl1|(h=8TTle?r~-}l~@QjNpKZi^w7%SxS@usf>sKCI|4UCYeI4(MjU|~q2AMO zL<(L%s8vrxW?3`D0=oi#)gz)^pcYsT%oxUOIN9hqT)%=G*rdojfl6d7K@f5>^G}(U zL}WnmcrtsYXlJ*&0y(g4;WFCffEVR#!U~(mU+lqxA8vXgiHw`*<&!WCXW|1S{7e+r zlTCL9g6&io_cT0w#`x2;fl2WqRXs999eaG3I?Pg=HEbI_tLU~94itpB(;^>LJ+39Y zHqRS%`t;DL_J^%enl($gL+E|Yo&mlvN!f&??Ye94px9r@IQNwAdra}b+vrM^|toX4@zxR35s*kn~`=_+KQ)xVr_ zMAgzrG-OlA3TbRRYjNTkS5Q@<#+JOUNb{wz6&$wf(#*&^^`R{-6l4r7J$847iXfGl z2lz`3TS6qAC_3C$Phg{DLn79AyVdanP$32QsL`+JajC$uddw|jE^?!XH!>59&;sWt zv4IlfY;^P5Oi{T6GgWN%F3p8{Ht%I9ZDN%5?8HVW)5ut|(Yad(0JNxTn&b2&ZKz6R za$y|E83Q9oR+b}&i`LkeOVKRQpt6$lpM1W-O_r0k28I0kG+Iv20^UI6X=D%`tNY~j zoR1AP&gs;MMwHVujLV4$2cwqh7pYq05P^N2HYbr$*Q?u!S7~aEGxCFEv63F-O+2d~ zkbEbRilw4+fnTZJMWe%cmPitjlt#5msH9*&9Z8%bZFD2ZIZ z1*7xOwvJF0R#cajks^|4+Iu3Yk~*;%mk1D9v!9{^@#6!$>9-;8)G5FQ0Tf z!Tcl$|In;zcl?Qy>j^@Na6PCSYM)NBl{A#&^>C=D6#UT=KQ2onElt;eXg=U*zlR-K zS_e2zOB7E-O3K#YBozL0SioM({N{9+LcF^*^|c)#b$tUHo_f-dh5ePpi{X9r@FSdZ zjZ4J?O7D}g3L_PRXQQu?Cp{m72pt@+E-@PZG^O0&!- z)gaw;O;h$9EfnjoPw-;Ye@1EkbTXmSsKKluFRnw_f*iCB&4T)~jpqhlB60GOo&jpA zNg}4;$=bo{+bxWY@JiOpiA_|}bn6D94R7j5h!I&@UGl6oSnjA|N!Es`S|)_~Ei8m7 zx;jh~s~Nnm)p?OtvCVr&vnsLMKXK|s9|1uMJnSf@ZJOu7IGTngK}C`@>IGuiww=V6U(Ik^5`uI$v8`tv9V1r@kXh#)!`alsksTx~kZS~_KY&x{SX25ReBj?uQVQ@}y za||h~x3L@BRs|guOesM2I1a^Z0&ChHW*3xrbG;>*6pN&HFF(ie*yLm2Fv(}wk!yQ5 zBQqOXl>OEKZ=a=U`2wtATN%FNIJeSUNaIFZn;vt1pE@_j7c50T_AthPX#EfC4 zBeRcE$=bd$*(n@U8fb1X*>#ih9HsTKDDHL<#I3C+stEVmR+e6hd)s}*zCy~FUcve= zqN}51N(wPIPxAK8X$Aq4i;R1PrP;WDl|lw&dM<;04*O1dfaFjayPGo`eVmw>T@VOR zVjw1C4wfu!_2gFbR(pR{26S&g@g51Dc23?KhCoG1soz)VRg#k?H!|1Q>&nxTSu#1T zt1WR3nu94uf==ahYMe#Q#hn~=sp%l^eCGmxhm~w=xT7i#;89LfTY+3}kVh2`Gb|xU z-XO<$K6Og0M(30kWl~;J&}KV0+*UtbOgjb_dqGsv_+&K7cHH{2or*&8nf`k(cQuqGq-S(@yq#58<*q2fF$C6Pw99&?^V`nJ5ITfI zEF$~rq(my;DZp>B?3=&9@jaR@Io?8lNd>JFupFs&4i#(+`8Ju_Upgz#BRcbr&3Bv9 z=b=_|3rC&nXoB<<-V16T^%sHUo&!hB{4Ly9VMH51irXTwV?i%dzsm&PgAK zYNXHe^rOyy;S}`r%vfcVu-!J2xtt~r4QB=PQk>&q9&SwMktwZ@hpC*Gk%I;4s(?4! zU*;>E!FI>*;K(MAwBnRn1Ow{=jN8|U8a0v5YYc!aRqy8Cub5^PG zM>6=_1Lm?hJS};Ok_MhEWS$X@t{g%jh;#PA+*AqnqETixn#g$-Gkg>Itn*JdfMApo zffJcW#!{*?{5A;>NbG#jP4**nbX#V$kS7U`18ME)Be+^RsLj>ltTuhOBtDd`gjs<^ zS))f}X}oF26EWM8SR7Qfr!aJn9G#wnO!1@p;`;8$*oPW_-aw{^VR++-BY7jdj)2V8 zw;yEl7wk0MVh%lx7`*%9?JTk`=YbR)^v zfpZ(=wj)wDhsAH7&1QfuC8=}DA5xK}b?UDJ4_L|t8u9uF8 zP)0vgYm)krP5W#Ui$}32OX%)mC-Ef zSu(2P%oAkk(lrLSl(-C=*#as4su4w1BjxGGR4=l#djtF}9zU6al4Rm3ZG@l{SsqHI zMRf0`M_gv?qM1hR<(!I4E=nSPm=xl?73@doFr-Er$GNXL%@8fJ)niWbVj9fbOAk6? zRx4IU3NY}3&h-1?2+pI4>`S;+Lq8y^_+9mYQp#o^C5L%Pp3E0`Xv;OL-=jy3Q0650~kXF{F2i%RsR zFoYUtpG`8?!WboJLQ2pqgqWQ_q%0SM;W;@K@<_&!Fh#4vU98Fjj$V)MFI^6@3FPL$lsQYK& zcUU_!kRzdRGTT(tEaFVcbp^pfhD_&f$csz)b#W;Y)&4XD2GXt!W4V;NK$#G1tr4p< z$PqMr56oqOV9%UF)louY&Sp%X-i&Wi&M!^pk>pI&3uW!b z9Zoz~m*F=XIJumdjz+5!#(*=qa_%HT*J^M5;xLs^k;D#S5yWA_0V7M<~j^$)Sc zY3MY43-=Qi#kpMcPS5U?? zmL@Rk3Cv&`oxhDe%;?1TWrKy(qne($;~+Jjov8cgLD@U=kg;F6zdjyO3KT?Ks7l&J zq_eameL zDNc)!i_tw;xRmzYJ=KR~5`|ti=z?ezW%#=oW&YC?2@V&eAvdR5HK0Kj)mO6`t_(-W zErXxIVRz>FlJbUFEa`9pU_b&(j&H%Y$g1PVdV`lmCne^F=+v$c&G_YdUZ%5@VACoK zS6I7Qgt$PKd^Tf}Q1o0_NRILP!+ zvUg>VUIP_Lfl;!qheykx8~yH& zrGnhiZpuu~bfBEKlFK>mEsbvw`xGgT4SxiSNu-Yg-5o>8+};{yME2+`u+(6bpd}Ay zD{PXmQFX_aPk^_j)5nr|MXS?$>PbiwNTQCB(Y68&H^Bgz0g~+6xoAjwMWMfnPJT)j zLZm-{HAC8~mqP=hL?Zk2BYeo1RaICzBP17D%I?Cj4}*b&$XsRt_C-w}VrOMC0jM2h zar8wy((@}OSNNw@FvV%YU|SOVa>No-@Ouo4g?Rj02~swyGD6!G>|e<3FR4$dm3ifc z)*PM0cK#xRike40NJhQyvAIQ$4j??M?QhDTjM+iX6HU@z;F)1h1Sdk<0O87s(CQm> z;fc`5vx%Dn5;vSyjacb%4hk|cjU!(TR-$X_RgyfKbxS2%!klKBl4Z|kER1_1I?Xdr znX=Hv12Gn}fXLdQ&}fJ{MtC&!Fo}slNo>=>=QNlr5qwX9kC!3(;MX!NemdW`alJj> zOrt?!c&IYiS?t~l`a_L+hL5F8!uhx+LyZ8@>H6W?L1Y2RA1BU&aDliY?c5$Tq3{SU zM$Q?Rm2J{Nzkj&M@Sr%RVLO{q%LsDLGH|UaCzzx`co&Q(6F~DE?^w^kwe_~~IZmOR zl6qE#R^)Qe^n=tFm9{v)%17yn6L{dS)E*85gSPKE7@_U^REW{0?fW>ch@xA#NQlVH z(zqJG$&~~#X(T^I-<%^!rxsnd4w?Xd62CAjzlnJqKJ+xD$aY9cPUn%I)q%Q;jc~jT zoaL;C_6o6=)fE%So|iCvWOlwx-g!pGVfvadko&e#(-$BxfFk zm&|Fq_i!WDPX-nfjK0JTGR*%)Xb(w&ajdy$HmEG_lzWmG_7tEfvnIR?_Q>ifC1;y# zquVI^!XqOBovJ>K%+~37!{{PsvMmQ4&bI6~kQ+|c7e_>S^w~jf$UP?I`%Xwcg5^nL zlK}!Fl){zV$?k(e+vIE-T~a8tiq>ei>MInILPR+Z9Fx3$T)BuT*peyl4dO(?B(W$W zaaK-v_3EJe5Ip=V+_${Oq%M~;V%G61i7lYikzhJ{eK?)Z#(tVa(G5oa-Jx{uSH5KIVq{`(6QCx6i|k=hbYUp z%_ytmsuXsn#U-@On3T*Q!w)NQ`?JiZ32w7_)a4Ac9g{6ip6rd zWfc1%kwD6fyj=g9bfG;9Jm?^i*GsK7cmtYCfvs%1s)__Y2TP#qQ|#CI$#@BI;v|TW)mIpXO;HdtIec9D@idiE=XHLioq z%uR>SL6>)UMkis-qxF-b>SiYV?$E0|oeTIp~yG1xGI|;w2p>8^#o#8K``%btAYqP@% zY9oEaVc8SV4l*xcThgSVwBzPVjtn4HD55l|Sb4bQ^#kDnn{cdD+GAiI^EIM^_6EE- zTK1#Cx|K0zG+x+m8RqH%8^i80$eWO8p!+~R()kBul~7xNiAr*vw^dj4mz;uO?A~2) zWJ*M~Nb={>;c}LkwM;f0T@*D!j&r%sS?zvAyoCqP+fP0mNf)u>*6gZOWUL{#wgz?a zT54!zl*16~E^A&G0!&5B=fMbud6e;dQ0xV4r)+v&Ru&XumpFMrWMq*5p9@OyAj2dl zTj6Cm7Q@PLcCUhD<}xN~!PJ(lc-*ZY%{$x9jGVFf~E zA|dOr8NWQ6b|I5^zXIcwPTQHQirDX@LQkS1T5B~cZKP7wU6d5K8WhIv%629x6lC`a z2-ApGm}}s1tZv{Uo8qf{XO|JYaAYCcH=*{Da_B+|tArE&ZljiB!ay zBW#VV@{_vUEW>C8JRJtYYLiaCNlzf1eiDh)L!9cS1xKPv97Ma?bCGiyt{A!yxYw1K z2svstsTNwmlb+3ehtpDh2Qw$18z)JP$cUs55wVRLq*2x0YA>%?bqB?DP_J<(hPPxz zDtkWEOnqq@bt0i&w7QW_knoBH|BwJt0*p@8@hFhha1QteDiMP=EI9+wFOPeK)M2?y zK=SN(9azN_$zHjR^h`7C6&jE8Fdh^hf;1ta^o3)kQ>q~1L|PHAuJBHWgr&R_dP$tv zghG@$LP<=8pF%Dp5NEUlpHfJK_0_laH1%OME`5PE=I})#icx9N+M{BkH2tpQ(0_7u z&<|U9GV}5!XaswUFsZ3g;JRxQ=lJYt5>f|*&uw-%l6m!B!l15`Qaho~}UK5oeU&rI~BUv;X5JYIRd4mR{ zv&%%Q=#FoSDx^D5=1M|OZbnufFJ#YeqyX7d?wq`IxD&MGaTg9}s6ZI1PE3R*m02&@ z*`Vu(aJvxQJw%LGiH7lF1aS~;xIpA2BNy>A>M?P>&9RqpW`RN!XU0Yo%w&1(An{Hy zR0#^_Wie;XLjP4Gc=O)Pq2Gy#*n>&;OJnZ{yJSR<7bqwxcR10a4^>DvyU6PZX~gMH zdwi9yJvJ9IoUF;yF(isM`BMw}o-<>6$dQoHLA(%KHyk)}#CZ{O3ARhzR@} z6EWnO)9>#1++QxPn!NDV#cu>6vAu}#f0Xw5;UAvA+&=ExeS?>Nc`DfD4#wA&Z0UO5 z#4&5Gy#LfYmZZD_pY21&m$&_X%Dum=OSvoSx3n)FcoEjZS@=Lq#HT~LrDXiG<2PTX zO-}rHP1fIqxPtL#&v@~at+&khmv8fFw~qbl@-u|^6XV+)n)m9Wn+EKgG4sqx=R7?< zO^6+g&s()NVZez`P8+{+#mp0zFIWxZp%vBN`n>zkIQOXwPRiMh)C#-$Bb!Yn@*> z)t#;zJ8Z#*k1>5(Q~h835OHSz@gMa%>x3JJZo9VUzlE5~_(2o)Eqc69)$!R~+s@o^ z@jTS=A>&WXc<uW&mLd(C)dm4o`3nO-zEyNlkpude00&3 zH*Q^b<@&xO_WW)2S3+EP9M#|NnxXCf((|TkQdT^Z*5MyJF^E-+fABwVzxJ=kt?Se7 zFIb)Nr=Ouv|H}Afn>IgrU*eDd_)GMHv{}M)l@JFR|NL)%I?2^4X3KrmUC(@ZQycJ- z8?=jwc;`>8KA7`F?sb!jR$uk+1w|(aaRcMGXV3Z1w-Zuxj#oe1$d_2GHS+D-~`wcz+KvakEt?uwoosxI? z{TFAH@4P3nEp+A+jNi~EcwScTGYfj8e)G&#Z>Pfy{EqRDCk?*0`_F+@(Gl;oO3Zi} z2jmBUcVi;HEP1d0MKd3MEBU3{c1@Tww?v2;jKAvQr|#;uz3)5crCeC&oB5a9g;>w{ zRxi}1-016=-Y&lGt#h7OV+j$3zQsg%eEmA_T3S1K-RVOI7cIZB0$05=e$|$h_e}6@ zx&NLER$lyl-0(MrxS8?mf{7Qs)#>J0r3=qk`Fp{wT|o!NpYdVaRqnrR9QoOU(I5WQ z<6+R|WPBqgBC5yJXDrS8dfKMgH|A{oE^#*k-i&vD(mQ!w|4%pHcFn5yZhhsF*M)eT z@vELl|HVJXyP;!D+Vl@gxBMo=9>)Lt>TlmZGyI2zcR%>_l{*r6vqIkkI_oA%ycH1UC93w{J0 z81G+r;dB4W{c^+0XB{_i^_OEn-F95v&+~+DaDJ~FXM5HN(f=f>|K+^TBNlJIZ}^ATRi}J)`XUIi zsf-U+`txp^_49~_+a4Ub<=kIug;>k@2Vcy(tg>v;Rd23|+;sQwrTc_v8%_1}=sj@N zmVxa{_IHfBXT#mQ;)S@3@!u>BtbFy|Q~o$;S(k6=HTYy9Ze{$&D?4wSl=|4RxGz&r zp8M7nsQ&}TCwtF6p)O&|1s`v?+&y&Cv!Fv4NcfnDXO~TGH+1qx-+fYAbJ^P$4tPU| z62{M2z2^9HX8$#%$BrKsY)-oAMIn|k{!c@O?L7C@v(F!LLw=y*+ecCVZpL5OdG8DJ zIxTwWz|M-lKbM+bB}4*jq?m}|BMZ;`a_oVgCscOaF}we-IJiHX@q=p5KJlV!l77B) z))Tw$eCw(1m=}!CzPslQuXla=f(OQod1i3?9iIwep>Ht}8z1}F{mP}6EGvC_z%85K z9K8!hJL4yv^2Ga(-P`}%uKV&HANau23x&9y@jrToUb!^p!PGDErhZjWwQi;m+ZccO zk9#7QPx)xol+kyLzGB?==Y;417bGU)#ELg2o%Q^y;=ymfJL|7q=H&`e!T75qe+s_; z*xrA1|J$;MbG!TmIr%)}KcBYqv>)!9+V7lA!@J)yKCTDa*`Dg@I`i36o{E}KcHUdB zJ+`&Ynjy)=4v79oTw(!6QOE#Q5twq|Bc>^Ffa*e$mx8eY_kxb0_2f)9GK2T-I~ngBSku z!~KErpXUj2{;5>|_a}_`WZl;@51i8OkDvZI=hLA=Ol15ycNM)d=fJ3We+)@`;?K*X zppX8__<}os`)%2Y&yG5f`skE)Pkr}-5Wg`#`-jbax1VtDCy$C1zuj7RCF)5*P%tLq z;@JtWzR+vJuh*RR?AzZT{{wJ!jDPg&CtX{6i_1T1^NCnK{OYHLc!%+q&ke++Js;d~ z@`^`q-u}>p142-2Iwm6LmK%>h@!f47@92EdcfH^303DLe_=-OMKOacgUv}}Gy()ej z{1RmLV#e?PX2R(YC0Yq9AGxu-w8!Y(m=}y+v-F}>FIEPIE?xR{*RQ`j6*A*A*aR^V z6}eYT|EcwPYoAHJXlu8Oo_&QF$N2mc7Y>|LIkqPM;(rgAlUFwndXw?%AN+ko(k%DB zZ!Z06@Tc$o4&2v_UzUT(=XV3 z{SDCJvl;*KyNj>+IQ!Dyql$h??0n(JUqin${?~hYeZ73{-G@>K+;j81tjM|0YlyDI zMEpAG+`OqmX43va>YB9LVU&eomto2+Gcj(+>ODij<4Kz9p+bWEE~i`JpH#D28@{>`{}|n z@7%Sq>)q!;PBQ+d4KrVVv!Yer)7`xLa%hP}u5jK2H-_~^+;&)xcE@|Ew5U5oxMV*Hamhpg_q z@aowUI*qvF<$?hlgm{DTQFopB&Fj_I?%Lb$>eg*$UUVt!J)BREiHLUR-uHgL;-7E% za8bos9shL`6Cr89K^Odh{IdR!1Lt$z&-q-cM9fd=7UH;3?t&@o!OWHoT(ZVj0?o$-^Se>?g7^WUB|zAEaBl~=9An6F`cL8r>EA6xMA)1N-Dt>+ov zoS6fAiShgX((mp3bNXI>-l`v$XH27%yh#|Fm<2c#8$s<-Mtv}WPImaUp(p5ufBWY#@pVDeJs9wvJhvUPxbtJ%!^O_ z^6#pzR&QF^J%8mLkn=^1UpoDyMG1*neOJGFdhRQ4q+!gTX8b>958Kh_pIc72=!6^J zuf6xW4}|!M@!qR$=}^6QYS!*kAAV)V_-EcjJ3CSRJxgEcx~|(rvwMBiYv;7T{u%AO zf$@_*JoDdOKD+OoFFyIX_~eHN?Lj*kA2%fXu{F15Z0-8uL+xgtdPYwnVmnhk&vhz$ zChN+#7k)7H%kH0AD`id(-?eCv*G*WU8_sGSc2|2yLky?@U; z4;8w0ym8aaOXkh|brbCTu2lbHXPFpaB<5 zK)S3V|FnP$w|E97#K%qWRTP$0gL~rRddKyS9~{>&zIWV&>cT1v?Ti41x8P{&3ZO;a zBGgocl-eaN8D?BBMvUgKtn^m3h&YN@edPruUfMI#f=Z_1aH+RyLSQNpx^e2_9@8p+ zz+W76P4xw;3(8!9V0Dqt?~3mSs!lC5)Sg;s(i-b4I$F>uGYiqQqN8sV$V7R0j#RcN z=9>tHiXU+Ftw6>P-T~1F|2CJxDuZNW)1bN4Ovm=XB5(20R)fs7M_a{o>@=ZtM@LB) zNnHw%9{D({c~s6@v5$VFr-LfUaOyqUE=@1yOClQ~OtS=@5>hA&G43ZR(@1U2<{OMw z0T$O$EGQKhTv%0Qi)TfXv&dSK{<9|e&C|zs)E8`Atm2A23RT0k*BJn}*!ph1PRH4W~8Xh9I5Y1?W z<(oBus>{jRAcGS3Vj!neprF#%f}X*srJPk{+|s{CQ3Lo)<|b@G9Y(K`WjoP7{b;JF z@=huYmKRi_jz;L)T#;hdtB~Lb1N!`2URtrWt_}LD-5cZI0T0ODvPuZIC2r8=65BI?@ufvHFBg? zXt!kI#1f>=YJ6Cl%fGOsBnvmjFU_q8HW?eLN6EX>=_<#@+R|JWLAeU@kdBnN%4iPY zJannIOgc7=^rv}Eu}`CEzLse<#WFBGaQ>v_o${6if(b2pT{XbR3(8H{3C$x(`2>HN zw*VV28t2_+RiunVGF5{Cng~Za*enZ*urnU_-eV)|Q8tI2bKXndf~FYJGNn3zQxX*| z6HjdZ_$N-n1_#rnBP9x(g2=-NpEwB9;iyN6$)Xj>G}uN*HwmUx7ZlN%`xeod=|e^@ zMH>*7L)_u0A{S(Rmt#M_%HriI_7*^x7B|jF%@(E9QXj7VZAA7ox1M8E4IIMaX+=jo zzYJ5;j++(@m{FEs#+F&+JmgZ8x2OV@m6WXLpua^m$QU3A-xiU8JAjwr05{H8&61bS znJATY<5f17#R|zdY>ZEv*RFDkepbU1J^I#6m$qSC%Xzhugo3waBdypqfGxZ&8f*1F zxyc%Y5bJiyW~AF^dqC`}SxEF_CwXx1a_c7Ul$m^rLakY95Pn z;5~?t@v*4LXhWFZE!2iA6=+=nN&?#tCzc%(>qR$=+lA|fD~f$BTZQ806}C|1X^{(= z57|N|lv=<6%8-{D`e+A@1(eTU7$oQQNT-92os{9Ccm&-%#)v-Bid2_MyaNz=}Kvnwh`;xqF9jzycQ;tT!d<;Y5Mq$H9SJ=UdKFiyrBXuJo_mlb*@ zNp;kCjm;&mC{q-dZO$ugp^5GALRf$&1}`Cqh?~Ld)fj!K((m)tgh#1Z=?I0olA;AIQi>JvwPUmnHnjj#yCp7!ri}_LVDF3f zC@DkhNKJ^W=IWo2WX1)nEhn+s3DfclD0qVfT+YRUT8?@$@KvWRYL1o}Sc+=NNE<0G z^Q4fzJF03b{8i9%KB}X0UYx75cVeY$DE{$Py6AU5*M+Vt838;Y# zS)<~Q9oYvQJ5n7(#u|9+m|?)N7(mD)h@8-j{sCKMvF%s16&bNzvW2)0@Z;F`f4smZ zc7~z^j$1Hfi4_qVw^Bitc;DbYGPth{ZnwdSR{GsG3POE==)~CZVh5n9Xh@XUsUS;C zZjHN38Ru7!C0uRf8&RUOf-F%4NWNRDAWNKgoG#ZzL6#U{a2W=-3DA?=0+2vV=dZO< zkR@^e(Mhx@FE*aV2)h!R^BWQiF3mhZM#5LypNmh&sf5{nJ)c7uD%;NCU3od&nd z;BH4dp2Dx=#RfoEbE{rgkR?W+AjC|@jaQH*z5{d(<9<|-C7#0hGpZ#@tWc08_5qUh z9Z-dB?J&5V1{Z~MAoAU41z94_;QATdB?gyjaM=czXK2x{GRw5{ngNiMIjC z`Zg=b5|72`a!)D6dMd~glK{zgD->i2O3Nk7jZ}~&2H|{=#0^mpW+V2` zKf^890cb9NZKs0p22SMM!MGs`0!IKMz63`o$PzyTx{YzaDaaD}IAL)shEy*E8-l z1wkU=WXpWUby1KdW&@hXxEcjn;!{91jQc`Cmbl6#MCAbtAZ@yzED1m66p%E#0LiVvBA-a z9I7QsoUI^eD}&20xa?j+Jj-9Z4$z&>x&agjBBSL=wCqhFwUu6BJ~L`vA#)JfI+O$pBq0UqP0*+TgA=xCadG5rc~yB*aRl z&>%n$atnqi$P#S^3-K`HA{7KK0rU{#K2{LMGEvrou~ZQ3p^J2VofTw>^M~kiT@_@B zSq3-9;FcNO69%`*;IpDKVe2t&iGnO~ z#U(;4XIz1TEYUSth{qV$LqV4K9?&wz?N^W`Ru2>6QO2!N5aeHqY*mzaNgO2$ohFPU$n% zwgY;STfaj=mY6>R+{CzA1zDnBI%X8(1}O-05YS&3_b&xm;?_$cn;3Vef-I4I8RQ@1 z+zNtS2k2?W9Z--ZmS(^%Vcf$Cvc$+t*lUc#tz8URqVq`E`Y6#|L6(>TNcN*zL6+E= zrOWM75HwD<#+{)cOI&PlDF#<&aFqski^1JtaBmpg+XlDa;C?Z$V!2?~OI$(L_LiFOKtZvaTXJ6b`OC>*WJl_r(aF2EZTE{Ker6AaKrGmZ9DB)3%CAI;2h0ASM5bS%O5HB-s zoPyALKvXkYuOLfYGD&|URY8^*4~Vk5M2RaE1lwn_em6rwmZ&TTCAp;!0Qv{N@rZ&f z(Y8W}R~ct1$P!Bc(Hl|XJ_T9g6F~Ca&lO~eJijhCRza573urBWZBV6zqQnpdS>p65 z8rM-l7E-mKZ~R6apx3x9{S;)01%TdQ+(HFmMgbxZK1zI}AWM`6WGzvmOhM2jfMk6u z6a;T9sLKse5TXl!)^iKCD=13rP>?0wtd>us#5)Q?o2P1A8wFWn9iW%FmVJQUKe6JjIdu2K+YH=wr|w?#pS$xN5EM2S)bS>g#mvc9Jk1P^kCE_bhjEb(`Pd)eT& z8QgY*TYWV+kz2Y8(A(UCy$Z5K(ly9}!MI@xLf-(<8&P6|f-KQ`rhfN$1zF-YK(gFj z3c|Yvx541zW?_DC3$6n6E`O~^LGY&mZDHI>1%Xem6=E~vECqq4fHpDiDg|Md0iv2A z*AxV(&CHmF~v6XQH6$JYV5WNv4Rx8L7zXOu*9#RluGV^q~%?d&< z=WASyf-Did9#Vi?uuef3X$8THzCk{P7p)-7OM_czaIYHNn+A8#;KTx13v?);*N!Ls z(WX|2_qlJ83W7`o^flwgDF`tmK=cM;hYCXM@J9V^dj-J;0rUaCo1h>|3$+(5Z(av9pe@%2=nb` zSxc1Ys31g&0Ll8Y6a>F}u`bs^L6#U|aF-a|0YH1XRh@4UVjq94yMioH1Lz0F-Jl@w z_^tAdC=sI|_{4zZyTcU(ZE%||H$*`g^V>D9LP3Zv8Qd2J*Y*xw&QcKOs=*C3xUmK| z!QdkA0yVftc?yaWV-;kHRR;H>!EHCV9R}BPi4Z5E=f{ib3W^dl6@>Y5w|p8U+AGKs z{S9ug!4(-?sljapbQ0Ix<{so!Vd_RI2=V~X&x|Wl5bQ)i^afTv6a-)BUj1%&1%Y1x z$#M%7WQji;++PgtLxcOo;9~C6@3vPE?0bWYH@Fc7mtk<50G-7>>Uh6|qJ&F9ur>{D zlfnJ?B(&}c)T5sjgn9W4GN@QAhZJN9|Fg*EB?uQ#kR{^ZMP@55*Iz-F*svL1660Q1 zkR>9vAk!Y>j#H2&G5|#}E?YsC_zR$H#{E@6miQP@JH~ycAWJ;?9x@y;j&j}*ggDYx z@B!n_R*)qEfN~f&O+m2mwjmzN{rFr#mN*1x0pnVKBq6j95QH%Lo2?*AtO0Z*ifH0|0 z-@^*B#Hrg6&12k|3PMx}5GDr7eXJl${0GoIjBE9&gb;TGbT8x56$C2{(0z>Cq9Dj! zKua0-vw|Q?K11Y*aYGb@2-OZms2CTiAWQW50j$mDO_%;f-JEG&_*uzfr2o;ts+D!m-}2n7^Bt^;%zS1PC?*P zKyEJgx`Gf}0`v}-+pi!?q_v3krG0j70^g7=T{K;1$;4Hbm)+_JsSbqGNlmE=2-o9%vs|_X}J@hq?&z;5-T1K%i@SDW&ue4((FX(}mNV@?Y$P^A5cn zs4gW}U>=D?Tu(ek_~G1529zmg2$x6`J`u#fDZt|>7Vrh49RF1SUxxpxff<2P9+8DI zIrujfrOHv-iJu?}@xN-+Mej`zNGyXoy!e(6_^E&j@r=IRTa=>JxKt0%>5J3x^&~MA zf5+j!uK1tJ@oWfw2Y|U6Wj*);PLAL`kF28sIvwelIQPGs{f8pCj4~U{a24U69&T?1 z4m7)xhPvWhUAwxFR|&s{xHv;T4jC13gR)JQEo9XU@F=;a`GTdcGK>XA(^U{mq`I0r z<~+=Fs<2lQfxVKjm(;@pe%?^m$ove1Jw=7zHPIUg^2Y+_k;LL}cgMa%SJ3aD?CR1x zq1YAh7G8ik?w#fuJ0j1ONe3Vj(Vn5yC}d;ql|+F0rSGC~r&3+HdFdG$u2fvPnOk> zP~t1OuaRDGPcOi^0s2Tm8SN}o2#X&&7X`+Pj)t?7RT)z$(hLik3U&u zMXqvRpcv(&CNJ z_G%(ZV)YiHrwe?6HoJQF#xINkPRwA0=r5dcouR3k=(+}b44lseQq+~>DkmQf5UF|t zTt|+#vJBaKiu5o@is~Wdnc^5rFcA+_b{6h_9iBecGb%p|w_Uh~C#Pq)ayc(RBHlj# zBKlG0t-x4Z7GDWnZE=W%&q@2JwoyTL+#KRE!8K) zZvSolI~IC!qBn?>zL>*RGe{`12C1fGkXkYIbossIl8*n2{YQt9cnmU>)G*AZ>aw7~ zEQa(}DhEsy#6==Bwf&I!M4&*Tt18jerNlLr{wfTCQ?Vhs$VKP6fGeWM#D4#id^4Pt zHp~c^qZLK20KZxne{{ar>o1JxAg-~4#aBu6s84^|5{_H-;0iSS zEF0$H*wWztD7_l)vwI{tPQ||IxX!eYeaFm97cr}%6mB?Dzp3On7|T#Mz6zYEf?G*u zWZ`5N3`cT`a7kZ9Q9vX!+hwDii>yYR&W9Ewu7qJm<5FFLpB}a#)pMR90W&yFm*EDd z6jXGBn?`b;601N{!gwb^PX;XB|37Jmj;X>uMM^OTm{jWSIrgljZAw1F`7Vl{!so0i zDDru6KlQXKKa@|vSHvzPC547O@K&COGE|((_P`&!TX?>UAWKwKmz7D6S=#zkCNBr~ zaN^JK? z!s|*U|F*cSpoE|Q|7*{OQbhmv>8oR*A7m~G;(s5xR5HaT#sw~Q&|6+9DvOKDIgJHy z|84q_j@EJdAGEC!m$CPvlws8NV-Oc>$nPba)_kLZxEViBnut(ReJ2>M??i8ve7m^H zJ4M$MinCCD)c}bvo&%75-lAS`$V-ByTo!@K!s?0MUN(lL>v-9S4ElqVI-7DEPy~vM zX)bGPFiy8udeuP60D*47f8V$si}93*GRwZ6%v0!9t`fq0W|telSj@iPN1%*S%dME|F(H`Ea=}*tc2)tw10RA zJv4+a6JfI8I&mKVi(Kq?dQ2P%YMwky;O$`~i82u+Q%J>+aOb=-0jMBGHx-U5%!Gm} zgzWrPq}nN(QzavD0lOx2b?Xx7CPQ)r;oWHy|2OAXL*x6u$;XFZv-scacm4IVV`abo zZ_?}k@rhn%Jyv{@k3~U9VCZ9)AB$CG1-Q^eBP#qAy%Z9-B40rv93WpI9E=Lq0klZ? ze=VOKqxBBZy~6LK^+mY`1LDeIU|&wI#5QCn|8LU00eSdewvKZw?6%4(TzD+k%CS$v zm{=kk!Iv)Vpt~;b62N8%nqS9=&l<8N=nq%NlqW>Nli~n&&&15TgtN?xJ+Jv z|3BGI=lA6O%tz4nk@=ab;h?9gi*Vd<+i$K|e=94c-aDzl+25hxj(5^i^2|%R9>UQ} z_TT!3X@wh};~o|M9^-89@$azrc!3@FkLTujaOXE~L-^m6$BIrP({hqC!}~k3x|}5? zE)#?3)G|~$==wd3^|0hrPj>#u6g>_!{)9_OMkGzf6brGSjPPCoB8k|ig8dp4#4o8R zM*uIxH)BV*)6+)ep%p6HpEAzDQ(PzZgUH+8L+|PDoI)eiJ0X!(x=*Rp!OT zT;xpQ=1y}k5Frr{Vp+dDcY9uZ~)J-MZiuM>W6NZZX*NyA37(cAKO!fJz1BdH7j{|6d za1XM=3xUYcNVb`1+PKu}25qv!R-rD~Qd82sOUVUl6C1zFfg>-iiSbQZG$zRiuQy#u zPZ#pf1q)D}-VdkvjTVxLON#Kp3e$Gp76gk~vH)=(qF*6q!q!M3O}Yl!8~T)PHpvHk z2YvNU6Ik|_HX`;bO{5hVVjuK@>zv{9mK9+amENO;Z2&#N=DdB&g+<2_@HCcax|CRA zdTZPgiuc-znSgpRbRD2R49x?C%{6#Bqyx@$Gqn6PxwE^icnT2h=WZ)j0IFqZC7>G_ zS`CPHY_}C_0MS0}wqhM1+MV52Yyd=ivfGN+0ntwEwqhe7+JD_vYyxx_Lt6pSUhB4E z8z9HqMg%iMSk7hn!S;=nFniT#fa#6Yk;hC zx67`}jNAoKM6Y^%{u{w5b@>NtUR>P+i0Z;R_rbao=~?Xp!ti!aJg=Kezp@X32FMDs zA+px}YhC6+t^~FHI*K9S>+*li(S_QW5|bk8+%egzOuIb;@Sx@e{$Q|&y^#5iE{cb* z&EbOh?4Gl0X0?yF_O!bEb~&LQted~Cx=q5mJ*`$m)O~fu%Q0f3?GO4t=};-Px#&Uq zJA2OF<@jeb|LFUV>_zSaMGw=1+RPoVx%sPg?)KS>7G)edbclc2z&%m6A2x9Qy6AZ; zP)E(Ib|N?$ea(y+MQvQpr^LH-D-;Wp3yhC;FT{Sx*g6(R&yZ*B%^L6!J=6($6 zxixz`*KMrzZe4T-^(04qcvD^G=?v~p0QNQaUatIvI``h1brH4hz54NB_ug5_b(wod zX+(Biek5ov+g3AcuejDlFYSszgJq3%`|RawE8FdPye{)VQ7!Y*xGQOB+KY|##-nC$ z_XfsdSIw-*h+uoLYF%XXs#`usGv{xKo9|$DHU@ z?jN!z$ybXo2l$id`z{0Eon3QYUX7OIaI^Wrp5bV2tLjVYGTYU~MvqyyKRR|U&Li+= zBKJqf%sGG`(Y=qu-(u;{8&a=6mA-tb5+CD!y;%^K|95qTK6W+rVD`ypVFUU-Kl@%j3meey_}O>$2Xr3|==U_B-|>Lj zTVfy3ofy!adO%fYcHj6P%(@U)6H`YvEpNcz4GEi_kP&Jy>(9aV`~-6_deOzuK5|}3 zWG$vV&AtwG`Fm@=i2!LO9%EXY+>QiL^t|yj^!e>x9d=xVoGgn$+sV~?hnvE$*S&i8 zFaJiF;@V-YFkUs&A-E;kW9okg0p}pb|U20D<+H+1=durAV4{Op{lfe1(KX6d=+EJ}|W{qffXftXAN;YZL zrukc{FXUcCir`hcQjBH0x=}Iml}LI8k_1JANtiexd1q)n>s)3(n!srI-VkM_rrh&Z z!n)nh5oO)GSSD>pLDZHXnvL!qEJSx;Ec8^xRGfuw?f_j4t}Z5e)m(miU9i=jH*8N( z`r6}m@Bf2%Ob)~Rb-^<lLh%dMvxn9hqH99pYj&8)6I#ZDow^J;`V&Jn(}dS)_({ zKL$Msvmi8MSr6GvgnIgD&fazS=7aQMr+KiC8nkFpKj=;M{e5%RN1kbDL57rzbU)A? zHCp{%(Mfk>*6AW>)yz5_D(oLnX3qM!Udf~w=6(Eg4}_(JqF0fngTBe1%31+46Kh4( zg5LCLBi9GJcg>o?gXlolNp|MSf@k4f@PYj`^?c9ZreCcFTQ>6Q?#UpLp6FVBtie)mDhX4?Rgb!fQ529kC7CYn3x1RGMzS80I9F1mx>gv?Qc{#Sd^1!fYVJvF~t z)g7quw-6Pe{?YB)#RS`4saZ|_f(VYX;p!F;PSRXXvH9z+jcd5TC^8*aW^>_M_XobcXY@R>6Buh|1$R1n{!8)!*UMZV zJ#RTswk9pgT+L6F%vj`J4bC9ztUZgSNv$-&xPB)WWv(X9=GQUMM5Vbr*1&6O!x0Kq zAq{Sf^>?AMmS4Zo{oU>ubj`4UMC;mB)1x8PCY{9JgVn?hvUQlIZZ0E#4T(<@8A*)X zrUitQsTYLmrWenYo!(bBm!<$n&@R+9BKHz4e5LGYCuf@KI~AB0DnQ?CCyjYk0PYUt zC3Akg7i~6LtLk=AYiOF1KcK6inXSJ^nnl8sPSfN7i-=%b{N1X$HyJ6+!gJPFp0D^s zHvAM)O>+269jI&0`iu^$T&;Ttx1Ft6JRrZFzhPsV#^+&hu&o&ETxhPE7ie;c;K?xd zY}yJ$x6kH1e`eRN-D*TDz{@b3lF8c)sTJkjY^?9!%-KuEbVK??84gmd?1f>;9Wiz_ zdS~Mw3|sX4hgf5nq9j;u25M3VP3A?5%tIK8b@^M_J=n^PKNl9#tCt)XG1R?5@Iup9Is9rM>(RLJ7f+0O=YTav;?1%YN^9J-2MsAH^87W!e-fjYQ*uC9EpT043(}K*e)kGur=AZ1|?tpu{ zoWBjT{c9)*M+-NBcD5FysdLto(BT(q-5Z<;7^}6JtL^2p+d!J^G91hWHbQ1ZuboSp zrL}t_=%v(*(u!R5l3MrccoMz#7E(H`^Is2XphcP6MlFKpWB<%0ZSaW@6{FXZtAw`~ zkeX`!W=Lg`g&C6h3*6ts#QDDF-;u$S$#bdsEh=~d$nZUB0t8YvT$s69HkMRe>-Dm& z1mg>E=;#Zi@bni5o&@VE)M30aXZ`AqW-5}1=vXsrqo{^A`uaur8)ly5B;lm-_SbEF z-0f!D71ixN^NpWaF z7RV~*PlseswOmKF&|ixPN$sf`B`Z>+(qLOwsER60MfaBiL^bmXg=*&0@BfdxbAgYl zy7vF!X&lf58!cMYs8p$1#TWAM!D|%JC?G*ZD4>9VC>DcS1q=q1FpN*I)MAU)TI$tX zYEes8N-fp@cdd2yo-=1AAw=)(|8oZ>=QnG=*Is+=z1M!6 zY1nn%)#?1Z!TjXA^OA3CHnO$j^n)hvrNeOW$mT_dB*>X8P?^S zvTrm^JrWVughK0CI_)V{$@(WmouRAe$kAuyrmCzi;sMQdME1}9B0mcstKhDM08cGz ze-ok88MUctNqi9+Nmb6Q56X+h8ceIhh-~Q!oYOaQBlbIOQrOq-_k_{`0 zp(X3Hhn}>HjkBK>Gqx6r#P^y=5$qSdtT~dn(xpqoBJUKpbh;R#Qr0q?lawLVZM);k4C-Y9(17+#d}&+;x2fXq}$hg{bkkg!U1QHf0Ve9MX$AQ3tf*x=7qr z$;GMC#Z{#XiKR`dY++8sX$hpMD-Ze)PNx?~Qf`|ryA6Zw0uh*0l^=1Zpr)Xv(_0wx ziYAB@wJJF;m7G_VoI{#>q)O-HM5%!^&GaHk455_LS{g4oE{8K-t)s#@^C9Qd$-$0u zp1WC!qrI{&t30i;8QaoDfX^0@8j9AXAKzMK*K}279+i&D9W7_=Dl6G}$F?`CCxSTp z*@dpS*7Y-wt+U#Y-Y4Qn?~|G2n#oj#5}OE4gQ}bTocN`7x4X)VKpFbwqid3dbEoL| z$$P-E>4k8U6At)OkWN-m;WH3KhM^lQmt_@0Qgelb%Muj@XAM<7m|7%?uWC^_e~Dtx z)LcRM&5l@uW)~Zw*_0`Yhf);(BLYoI=B7~;5o#4<6lvKa)g4`It~@Bcv5)8a!`aXDJE8^pBqIt4blv& zNmFJ9b7YY*x8d!osgmc`*;?=`&>ElZfU{+rFcXKhTcCMGajjNBqD)X@C39ZZI4^sl zqhOQ;QJ$24T|@a;X_}@$(q&so%t9)s%b733k=(MRlO6y$%&D0x z$VE{~$sw~Bb;S!^-b#WV4IG?GOI+$2c1cxpdqYVrlD}1pPT?=HbV#KIslTeZ-Nl3c zt(tqHdDthVb}(|eUOh>ebXrn#KZ`6y_p{L1d8FXevx{5vM;h0}D9h7j>#1+EU1vFv z4z*`#)*h5fuCP8buU|(*EKPE}d;+#=#sD^u$?9q`qwhpGEqQQz7Xi4f6Ik$9->~le z7*1zQ4r%!GRxyl`p7m&CPK#sRZkw755Gyg{q|>7O)hPm{+sQ{~ zTsS%6qD#fZ-qFQwtFK?^DE$lRr)7cd3$LbRC|c$1kAq0R^4VfdTkRCpsg^VaB)h6b z%?xriQR-Wr8G)`#?vS6d+_^*T89ORx?r1;rm{f8{G$K`xJ8YqwP+67MzV>-dvWv#a z?6WME!uBwQV(gH`tenD_tg*h2&0pxC$w-{FY4| zk>T#(%{an@Gk;v3b-MabsUY7@NesNx8jw z)JAdIM1PtDeMi^2HECw}$?6XaFI0+5ZRymNGBWwnhoMIyuaSHV?60v|S32jfWM8J7 z_#2sAL$J~v%of)d-uRrBYeaGfuBEsRFI{5}KgVHRvYx*@>g?fay>z=Splr`BuT=b) zRB}5)7G)7TA+mE*-j0T*5!BZnlPcRzrygaE20zQ?UKSuT%a65lWD+;4NG5U9S@PMr zcJ@}XMoX}rH8pR`5IibXIrG*0`zP4Q!H|0nU7K=^86-fhUcDMg)I)XZ*LZWSQ3_N8^D$E`5deNl#jv?UYYix<&U9g)SLb>vcZA|*dU z$@Iu{k8WAZd6fmN1GL475zbNFdesKqw!;cGlYiDYrLfBwZ)x!{0ln6Vi7qtR*A<}| zT+<1=vY-7}ZrLaiQMOVCYBI>-|LnRo16w5-IVfVdJjK3 zaa6JT9~Ps^2AeIEs$*D!UiGu~U`_f&N;FY881v2)T2pfMA~Wi65R@)mu1<7QEh0*t zpG*_yIj2_XvUzUeKnMn(?7B+UBMDSr*%Ekc-D7swPQT|h84w4F%1Wi~(#STc+oq`7eAeEd8x+a0 zIa-++CPp&P(3}x~@lXUdQx56foXa}ld{83;qR9cXd!9ru92lIo0hVWaavt$D%*J&| znJ%H6bi-Hft^!v)*;3G5wiGymFYh)j?>2L@j8}FK;6&Lr?Kij8KB5v7U8^6M($!Yk z?6Q&C-IUd~i_@hQUTDPFUADfeYz@_jv15%B69zpMigocu%rhc3$>qpNz0z%olli{2 zgUXqkg6V~oGq(kzfz;|RyNPriV1C(#d1bY^ViOZ8W+~CpWK?Kl^2`|Agu=IOfpU8M1^o-g{mu{qrwrW@y*CLW^CXZo%r@fzyqv};2>Rq0DBu;;Vo&==TTk#4X!%#W>2r3ytTy4qIaj6e0?OJ}ieKxhJoLwSpAgCKWQCO>i znajG=q&FvCMIDQoGM5SqKiXCyd;9?qLQtoL&Ms#nnow}Gren33P*FJV{7jE zK^A~r#WMO}4YAIzY1aNY({$1@KUJ^k47B;qQ0q_zPew6#Uv74rT#_nVQdPE??24tj zay_$g8pUFbs_>b5H<@Hbu-6ASpsiNZ_H?mwHBa{9uAW!+F4Z7Z3C~{K!piaWpGP_| zMpN%HnktHwKe8Amt%S1qd-`djkjuO4ta|P^+-ORh)V(UXFjcy+s`NJa!&+8-JMi?{93Ez`Tx7aXw@ucy9O*(&lAW-QQ21B@5tgVf z3H6(5udNixlo>^j$S7jf9nO!m%>5QXs4E zl`q<0a86ht(Mto;$)%)+I+v~1x)q$wQZZImY))1vD|HLJW2GbuE9F(lDxRW3SW90q zuk>xlN~-V8*2>C%v5b@vf#lnS-8Cz>NQ|=AY>T$TEsk?Nl3QSOFEV8LLNjgy_;UUu#gbHHXbyyuso@?A=S4Ke8THfXQ6 z!R53^a>LASspN*36dZy_-^-~KZ17TGqrKV{qTkY)dgmv~f4$aa%@03|D1TFM5#_H# zjgC(H=iM)|5Wd_i?9Lu?)Hy>_sP|=3-CpL=ECd!Kk6Q_mPTo&x!ba$~dDdyhHjk=D zi)JgGOJu@*zgr=fANB5sOD$_a*fCsANQJwOtCCAo$)#1vCBhJv<}@MYhAuGZPswNf zM@-Yn?1ZO1^8Gi;_XREz zrUXvsB)90q2IG?PRCEq?DC+|*SIh{}Ims<~_`bmN-PDu|5@d0}KbGjmye2cAR{q|dMc1Kd`SDqWR5 zCJ$$&GHG~8)#po*toKO1H1klIKt^bErP(pmz94e#^-7kIPb4FOW|9s4Ym>E7dWJRE zBA8ANqHP=@v)V%iitsue#cZzj)V0a?g60N)FQTEdhUdBa`6}xM+$*`xR?ZvKr4MP2 z!*RCmckJW@mgZxw?uq$49L$SasaNr?&kUIB3)50XGPiO>Q!Up?ywgWbE(m$X;hZgD zcVN@E_Ua&}@X$Ded0l4LM%E)fA@9&;RY}Cknv~C>ZZ{`%7!ekcFzYo#h2g4DJE2fJ zhLbM#jfS%x%)`#Fnlry6GuZ56o3$(9$hEJhk{xvsenS;IF|i1g7s|$Po2;>r(-p;T24&FnIvk201WM%*a&c&BP7f}LvUoEKk5vh| zdOuZ&9~E9Go$Pm#EKRT&q1y-*A-&>(6^RZ^`=a@!8j7vF8J@bD3FGXb$Kg!-7{fNp zHWGi(QPcd%vOC_J_+?NYtpcq0tEl>Ise!GP zLDFoK8)&1bT$=1lN(7^#S1G0$`-7Y1CtC8-p)=!TuQmJex25Ju+pf}dy+XH=*8GNP zmKMSvXVG;+c0WiidnN13&&XJD+(JQi0I}sTmgf+YFvG{guaqA8=vBlvyXVu%WmLNC z$}P&2T}?_w(Afzl=~;ouw5E>ErABhXLf^?+&e3-3z`08yRs}p~`mnGm3?CKPFXKbKa4)=3F?} zHXO?$d>E>9$Gq9Rsm-$D&j7Jtx&zrUKiT^P<|n_Hm;5(2vVUWKxrh{8>O;ix7{;31 z;f^!0PDUAHdk#L=JqMq&fLQuD8fr(lK}xcl*>Ru&2RQ4ntwbK;(lbjTN^^&C*k@LB zd9<=@e??_odtsd2qTtj36~+|{I|J5D%XSh$SdwrZmlffv}S=5zE|AP;8Wpz&qPpDz*dj`ubjCdm_7pCFZ}{5KC2Og`c$~m9bGL#tkzf-CsH)m zsmq>Kl)-A3XG_!)tofFTX#Ls>>9JabQ$dM-aOzO-&qR2+efts=i4g+{`;kFA#Zr50)FVghVbET`qlmRFTM zga<~3HbPj;0?kpJItfE9R-dR$trnJv8HsPK8D^RkW^QnsSPEQ?31=f`T6}M5+(N3x zh1V>IP-X2v$&s(hx}o_N7dVz1t~=IA9fh51$aq%gq;~v)C4ZAg>&hL)R~KMOtvR@@ zH2e0gN~;T>?!aUmVQJrr{cOwz;U$9+XVF7Ut@32xQnse5Y;`EFNS7Mmx1~av@HXv@ z2!oD^bgVMJY-98WjBVi!7~41^WD%nXWCKG-`iE9!b%js2Bp)(*$Sfh$Rh6v_^Y^qE ze*1Z^Fj~q$o(r^+Oj8`j(q=18<3C-1n;f+DEy|fDYL{2e+|puJdsrm98EO`Z{6^T( z)5k#lwr{1Q5|@G)Z`rX})T)#eI^d=^frLGO?Gvf#bw^EKsZ89&c?r!{ulkv7YPRSY zDGXNm87GRxB<;&p`Oj|`&YdHaGRn(nt)U`lJt-e9u)M)Cvc#_KFz&D};f>2O>jq@G z0sfL@F}1epQC3GTyOGPE{AFU>3cFl@B482@HVxwB>4zulBeW`=N_ z*?4{-@N})^c~Xo>#;=#@_N?iyI{M1m(oyR})_Ec9^;}My>=Y@XX|k&1vQ*i!sx3+ zgUDr)=tU5|(=9hD=_5UBTgVu;)O#n(VJ0g7dCYW{K^jsx`RO&+pj2yK&dNJQDsCa$ zTV!=am&PtzPi84n>x3w$Y|T_SN2b*jiAjEzOw90kkwCc`ZKP{u16oLnEcM>el?0GX zRDLE!YEWzB*Ctw|sBpT<%-&9w*>I7ke=5q?KQZKK&ji+HkeqNjo7$!hspSGnXfr6u z_+z)L7w!uB2P~2EPTc3yIwQM<^%{DPpF9ged5s(q?zDWNsC zUiIao$5Qh>Wsszm34q#=T{ZZSftrSqL4C50zKE6rjcimaeb7Ytr7(KW#WtmoER`OX zu&n(&J?B^WxR#sQqpkynt}5}K7nM(laLClCFP*a{p?~sCjUqz`ts8edPV8lsbtN+1 zE!`2BUeIdT6C0&)G>DlBlb8Z`q`FPb5~-w^uNItTo1>M-GzZnf1g0Q0xIh+`ZA!9} z=}zT!I`5Gw5%(t9h#uyN7T4hkkxH+2yUcqgJI1x1%%1O^NP{1HdjrJui*T{CL=`*W z3HvKC=j2?z)B!da&&zghzI(fP)ctPTVe`%*a#esuJ-JIPAu1?Lv}|W&;v~Iq?q=QT zSK^xkw>WBI)@w)fDHCggYvJK>5d5hX1wS%O3*vTz1&d-UlYqVt1 z7>z}o64yfoR-)S0wJncdooxij>91zj^@qbMKiNw{b$Sh5vY75?a5}x5Wjd`Jr~1o^ zE1z6UfrIiv6TK?n+yX+))R8H(n@?^P+1V;S=|h=z%ghr=uhOGD?3hU1DA5dx9PN?% zDH2Qf{epClz(b)3EMpdwb7x+yT2N|<6}Q+GYwxMsd*&9qVy#BqYH;gFEp?Iwj#`#F zO5c+`*fnaxA;PRJth{W;8!F4hB5nEy#MK*r*UnQ zdUF&0uu1V#CB}wLX}N3!Pa;EZAjJ;R?0YH7zvt$(vXd4YXGSsWG(BiM|v+~OhLFRdKZ=Vr3X~_l%?nIe!A{!ohB{$AIS}dOt z4#>4PDi;=@@bTWQv1GMkYwPN&mbLfPl&S?yW+ya@4f3d5|HTAGwUsaOD0RDgWv7MP zo}H{Gp~AGySh9I3qr(AWl#S$oO}n$mUHza4O|}B)o@|02T@b3dRQBGN_KYy2B}o$W1k}ycEqNn^vXclhKF_CNTL{&66<_UaRN6DnYcVW(Qd*L8Ma=DHOx)?Na;e zlDFNUj|HL*Db^33_~MHo`1GIL-{5Y2;M|L|%**Xq^KO(u-MZu)3s}Jq0&egDbwgsh zYz_*;UlpK&R=LK4|D6D0fhxSEGl{C|$S$9(zATju(`EN_;cQjuvecmVW;PaumDO&< zKsbp46+V5tL_7D@S*OF1!l&oSuff8Q81JZG^Dc!z3ogxSO~tiTj6{~#m4)7=S`u%5 z&Fm_r#yHwdP~}eHFT@^JFmJXr`%Ea=%1YO>TzDD~6^i(6qXm%z>~ugiyX=6Pl=Z?n&k}pYtJDLlLYezobQVfwsDz@T z*ay|CbZg<9IfTQY*lN~3mthh9LFJpRT0Qsdj+U~OaEcU!B?2usv8|mga!OBBtp&9u zfULokNp$`E(oOT`iSXxm&8%2>uN&vh6N#@m1d0=NCmr!l-0>qwT=Ew(#Z; zptDGU4MTi<(Rr>sV!nMwYo3og*8DPu^5YyzI!>vbm6d`Fj%zQ=BGrz}{#ly+^R(=r z$7cU5$^O|P>!&0}k5u{O0&+#0*}-2Kab!%nVPnXWy#jkl0t3W?$QVB>V%ha4ru?5a zEy5FC)Uj0i379q~urxe@CHrvT5FIXunJIi)_B@w1>LL3)k@k^;3Lm#)UXe_PG1lG` z+aM!d{bOowHcQr4%AsAl0vR1gi_3URyuXeg^R7c(838De{n}aHvDTP(L$_6?n9#M+uMGdDK2zU&rUKU31qnQpu8aa$$Ex zs*gA=1+x*Nq$)G*HQQ@ydi%h7(dNbPZ?;>X_T= zLc1KBn=$Ng)kXN+5I)&n`4OY!clmzE=J*dNLWveEH)h$5Wfq?brcEMKVgeC6eY*5R zj=g*Yma|UlnGiDBN|p@Lh$`2Vup3llk(rZ*k_(b$a?cAd(xvZ$xt&Y9Coz0Lc@oGVJ5P^>-|&Zz*4Q4r(Wh*C}!U07NmmxEk=nGi9?jVRr~aih{AF+N{Cj7tQ0 zwMLe4U~8|^>KjhBX})Edsa8ZZ%wk|J>qtzR@d_=?irSUrzeVkEv8vI85bPyYrCVgS z@3#SAA*>^IJvnE!tTz()ZvuLLaX1+H1MMQ?lM%i89-jh;?0euYhKt3mD}g!)Hm}Oi-(=o z?1D9nk&Hz>MuVk0CsY++<&kZr=49)8H_R-ca;Rk~*>*8h(eKYM+di)YV*&Q6eY#m} zLzz&ug%})R@PsOcyG7C|(gl8lU_W7dKyh%gAiiybzWjYy(GdQY;@UPC1G<(;d@(a2 z-dd(1t^u8+t}<0H*IPihsq4=??Fmnl24JbRrN_CtKw{n>bXY>rX`o9qjk7@G6v=Ch zCMy~Xx=hhLk8T6))YKjY{ajuD4qB$PJ(&hoDXkc^RnZBczbWbudR@_A(0?hK;A!O^ z-37WY?fzduwo zmcKtzbUAgtM`!#5`qIIA- ziv9$;QPC$LljpsVd6VK|kcIuWr=1A0SO$37c_52#qNhy-S24p$C9%N;^9b|QMKj>%b?@5rA zgA)rOU)};4Up@d?*cN*^z8nrRZuACO8W(sp8e}nl7c@k3btA~q{k}&JdGr+M0nN)6 z(94S6^RE8}tyNmPyzN0#*7GpP zTF-MJ%fTj)$AVdm3c2Te6SK%P}A;$6(MI>Tk4noeZ+P z%=G^5`x-ryYNVfmOe1XseP1Q#8^sQd_2@y5wt_6Re}IfvZT1a<-)p*ugKkug_W&8k zF8~?GCxML5^FfxYA9&g_k5+rM(W6%TxiX(xWRt zrk}3?S^KT>v^zX)87QG)UjXf^=xxw`idwKtet@DPP&-A3f-J--APaFJ$U;m9SqOQ% zkA+wYnx$cX2AZiz-ZyI{l6T8mpYlhK{tD`%rIh!`S}8vSS$r)zIH>O8 z(>U3qfgnrm0+6LP#-j=@Ar#$U-(822Z9;i}7 zddR!1#6xms=KQ3ud*TC4kk ztX8{#EZvhm>IX6zI?to;fJ}xi_h=T#ay1uZZR-}0wXJ)->oV{9OYizDXq49eM(^)+ zp=sG_y=#jDT^j8{=6V3gN_ixxOk?Q=GEVmMXej7-E$>LschuihkcF)PS=ePD3%eF{ zf`)h*BqQD8;4dI6FhFJgNX)th8G}#^)b- z^q@zNf=<#jehsp`tOIpZ+V4SDqQ8PHzOA5>)wLRAA-01ojW0mm)pd`9(aM^G_Mje0 zD+XDJP9W0<-}LAhk52Zew?}7ydTK0ZgG{bQfGph!9!>LTHpryzHjkEg*JU0(4l=1* z>rvYh*9#p2vfkxrkc||2fF`R9^#@(1=zNdHfvg9s03E5Ww}ZZ^=pN8h%9qDM{Q?<# zuL4<#-tn#N?BQ=7WBzv?oE|QGb5| z-KC?4w?Q^~XxZ7d)nbqOdo&1STpI=&qFlQOWL%p7x?5wu8Fag%B_Nx3uLIev@)gke z8um4i%{jM$hHHox-*n@leLX4x)v4=ApdTt423oASp9Hep-vqLnSqS<}%lkvn)ruYj z{Y%j=J#Dr3w+?izy8ant`s!WKC(zmk?|XlrfWD{xJ_r3n^U~pPR)dwcKj;&sb@Av# zP#bbu9E=97P}j-c^?TlR9?0T*9Q3*R`#nhJ&&9#}9<@8d(K>+wjkyabp{N_Eoua-V znU5C-gFxFAjr6peK!MU806nVcWss%&I>^%f7sz7Szl-C`@t{>&gC~Qm_Rj#>82uv9 z18pVUOF=e9zX4>a-2$4VsXYUFU(w5;wgnR6HPB~DtMRlQp4OTHlDU2jWMR93?j>y7 zAPF)#7zwgkxE%DM#& zkd1i$0{XksYCs<;`V?e22#$0)I0R(0<3YyV9-tZx(HHbnMP(qXg^3Rp$D ztQ^1aw8uaeVm0Vz%H7vNR=>3%tKUyRH>qofZ_^qTbp%;mb_1F9t&c}DK*pC_K_(IR zfvjeJ0eVMkW(CM<<~fi_$wrXH{1(X44UX~Yg6`KGbO)KgVV-sa$m((t$m((f$nx?I z$a3&L=kV)O;Aj?68N4J732Ty@4jX#4djXIFU{4wZbjrlW>#r$=K+ZJ;d zkj31~qk$lcc`V3yb-72gL7`-W{!1l$CCDWE_aGa+wq=OBQd`g0L6(n z8UV6fjQ|<{rh=?p&H`Bu?gLpV{{;F}V}284seSBe`!i5}+*&OtnxWaan~=%32T2SFC|6QJSBNx7%UXkU1Ldoc;HavTb3qiGxklGU2F z!HFPwDN);?2gq`DAt;n_ki~a3NM3r|Hn`sV`!Q%wrQPpoPl8Mm*MclpuX@@Wp7u{q zYr{0e{B;0X*b+}W1GGZrxeR3TJO%WYmUlMjLq+pJGZftc+NS6iAS=fjkd<|5 zpIL)OD-TWsnWgs(&{PdO8g#Fsn?Ng-&x=6D=U;-J#Ip^#Gh}S>^iMeg? z50I53IK`p;LHlT)4+Rw~Iss(u{8Z4sO6v=<5)B2}2y_z2TKsg7wfILsHgk9ZWa}=U zc(m84ZUyF8(4CsUGeD0hx(M`lMO7dRyU6={!2A2H_xG;%_c>^@hCS#s7jqAg(Rza{ zjbWZv4zk(P%^;gI-378-J?znwpphE$8qghz{tUWQ(fgqNltbG=Usv=mP)9{#kTzLs z12S1F1nsY`#USJ9fgr1+V?Z{KKNHkLTiz(p{+il2kk!m&&;c6DRFK6o8)UrS4zijq z>`e|d?D3$d6%7ViYn%wGP}&V33$Xz7JEbiLjaKwD=mtfbK$gE&eS+X9rF8%qtps#| z(t3dYpy*=IcNJX+dS20uAd~SsL48#29{@dNV*yY&766$(cn4%FA@73<@mCxa^>wtv zKsGBs8dRjNeLx))4Hj2L<)B|^YE>ZPAmijuK*QDFBcKB`>}Jrvl=e2r z#2ARKJARD0!0@)~c49Hr~6z@74^dk*>mv?;}w72Hv zIgoMV6;N;G=~j^Cv~B+&SdG87!G0j)Ad}ORL1UGc1Q{pGKo4svFZJkZ z?^*@ws3GnJndJNogi0j`4}lhI*r!2Oj^BX(s3EFBFDcp%TB9g&P9RE{u!SI$m(&&r z)dBhj$n-`D$n?hfAmjabk5V4J4LVn|=OD{V!MP6Y53@d)8v}PuPtY*@nb2a7%K{gg$1?sG{deFBN9WcbTt!^F-@#tod z$?k2SpIUsNGDXjWOeX&ZvfRH9vJl@qKM0OiZX5|RZgdCPsOl_`jjBd@+IKx|2Iv?K zI~!zSzwiA$;?ZwG7Rx&xbsFk&&>yr~b9xcT#sc334N}?yj~)a4PWkr&$oRJvWFyOu zK{m47qs)yg_XU|o>I|};?qtvujrmN_D~d*eUR89dcfAI*L1{OG`YK9;{!7by2gu61 z3}j=+wV>Z?{x*Ruf9-}b_R$bUpgRh6oW2Yiu3`THGOgU|0(xgnV?R(EOBd8uQGd`L ziY9=b(y-G#?NyNFpxV3c^r*vd?1>t7f6xy!F9(4vFI_;G$>qM0@*yOKgcBUe2;Dfm1~Iq_Gk_08>CSj{0(%K zx_%6@_*#y1@$Ch&_&RyC0JKcYc01_jiWY+&RCEu>r0zbDN!@ag#r$iK<#avBV*aZ~ zbs&?R(?&U7O#&IOmVzv&e+JpC@=cJ%@*&7#-s?MVAHa#ASz5MUpc#sWfDTqP0%UgT zaiBw#HU)IE*249m5~bY+vRJ+kvRHl&G7a}A$oivIAZs5lc-l*z_A2Nh<iP)C=6SyX-KVrIARDQ+ z8RO#H7i94r0OCLW*18DD87kE1-x|m9`hiO8IrrRZ8pRX?;Le`vX8$`{#nDtH1NTzmXstgIor( zG02smtJU9h@9z$f#rFe{#rI>-wd(JF@9$;r?~kC7%KP^{?GsP?0`xr%+nQ>zaS7xS@LKP6u-#97lx=W$GG`ph%ZmEjLpth-kMkvCb!(4=_x*$(s?0C-uV(j zxx6HVayf*-(h7aLWagiUOPX>VEqpIw=;j1l3YRA{Va4cc<}`$pD%UjZEmEP=!tm)zyFhmF0Wj@;njFiDlUFesNaN`B&ykNG@&8v^TvM zT|+&u4%CHd5xsso;y^`&4svUA=n&Sz!29#$(b|M#;=t-WUN&hoPP2Hgc{GY%9;d$b zHbi;-Opel;zcRm`i1BkxZbtM40AXI7ELag;p7OJj`+GE$_jOJ_hI1E3mal<%a^RI~ z%-SrN{kkuTZF1M&;#>YONxX`?pq_!g)W9b&N>X0F~-y2cZr9jLTEAX^T= z0ucIRP8nRQ{>FgJ-$anbcO_`Jc78HMw3u%KU8f;ZAPXS|jlXKA_Ct?;0kRM)Kr=MN z6Cexm3dquU$NQ@V%~F5$-ro+;TN<-0m>X&bvRr-5qk};0)StXt!qABxo$k>|(nB*@Yj2eJ^; zK^EdV&`lcR29Slg8Dt@D1zCs(J$lTeS3LT=M=e{qnD+q9)0o?XEaqa6)xyCbi}?tU zrFN`$?dfTKy}yCpb%>`;09iRM1I^det^`?Xa){H~$8FxZ=~*mfQr46;}{gYM8+ zz6G*a`hYC#2#>DvXfDXY&Ic{ju(yIN?DxIDW!~Szpu5!HBi`SW-XAX{2~(3Js21}k z&|(eo8pvX<1`Sf#{RCuu-n)$p@ioxh8loe}LX?1v&&PRx-9Ss!UoY=ZUJbQUwbZ#F zEBP>x8SW;7ELT%OKhm(}AWLHg=qk8P|^U{KaTLr z^+w!gU(~C^%su4V^`N#RXUjPio@&vn<*Yq8N1kd?+lC8$QY}Y4Pi5!^w9Y);r)vmg z#2}xW4riLfQ~Z9wcQM~?!I>R+_>Y7UKe8lHu#Y3R=r?83l|!cv8GFU0<4>7%1^WUz z1^W~^*X(CW#Xf8!X(#K-!JEWzEsOu{ z@*#%jJ%ZsOY8PM+Razq0R4N(3)a0;6pR(SL;5x0CqDMwtC- z!^}RfZ0I>>otwL|RrVC008!4^PM4=e%KOo^ZllYKE zn10m3c+gKw!p~3kDb2(0klaL8PdhHk>MtYR13jY!8KVUy0#P7F6FE29e}K`8NPJ8q zjDDdZ>AoO2r2puC1I|0EUq1QHc5Ncthkk_;{-$TVAY;5B>nM#T9i`D6b9s(kU|7q!$T|$TIK!0g)C5C7=b0q^pW|n%{;dbot6B-f7+oZA7dRBn%M- zNAT@)EPwP9lXhkEkmUJ!BtGKQMD|}bG?eu3$VEu&9#OmtEt~HYAxm;JB<{TfL>H2O?G$H)E@}5AXZUPHT9%qw3V%EsFg)3;)1Eu#`Pat zKDM#S@_w3FIqko~PX8}n)d{jn5M+Ie(WGBDnrlt}i+#%*B>qq%l`x^97L+|Nj#Np5 z?I~CNH7AZHR^t2g{$JJXdyQ{Nf~*n+C4$bhAER{%(SM{R-ApAmHaGcD><{{hsloGy z4ms=GGjkeGNNysl#~dDI^_LkK9PL|+AY-&3o0}L-<|amSt)a`HInGzG5_28UKr_3ohhTK(zmmW7GDDN&Qz>0bhD3{E26>AY-y1Gwc~{J%unD zOwPV)eX#VQu@_b9OEcU}=HY$1?iy95j`h;rFl&+9f(?gP1k0;gGB>x{#1bVJe3!P; zHuxIIb`uF#Whzvxr$}t?(izZf+BpPtkGke-Q{Tl^?78A5ADMO@&M!&l1HSk1Jtt`6 z)Ya(G<0noWd&RgZdo;_Alk5NWmDsCuXL|K68vV zqa`@S6##Y6fP<<8VVV0l)?rM>*qjJ@cBsSHES7pPJlBI?85$d0{vJX`J;cYBlIQr8 z`KcB`MGxq!cn;*rqHTpNkUz~+rp!yI;XU*`kw{0opf@x@iC{ixn$m6wQ9@5{ONe%Q zMp{rJxQPDJ!j2A6B3KGCfA@zdfuPpc5K-XvBMjV;v(_&hvDKn|LAF|S0O+zkMQ~+q zY^z01MP*q}o)_DROgW2HDB}|l;cJHDxptDfaE}Xtgdsvb=DJam*H4QtD+JMOxJZK_ zy5is~-c}r>qDwM9_1LIXG`yv>_IV_%(7Va7DSJVthXk3jH<~DWqcu?vW%P?AW|pfa zshm$^D(6Uo%Y4&RPO&0kN4&O1LTgODu$Pe~n217%sh7-jy!QapBLh$&-J&7#sF1v& zyqZ`-nrFn+gyd7y#MykG%k)y2h$7a5h&iDdx}b7Ss0+RpTF}Z#@~TPKjh~1jRU=w_ zye4@Y&iZRBo}Ky1hh?&glX#xOvk%Wxd5Rj4W3i?Nq{d7Q2ukSY^c_l@hCe~JdLkj( zshLMmLKT9AZI4)5*g+ukH#9^|Rs&xnQtpo<$&4C!KEE0`VKtUJxfs0RmBn2({z;^B zVytSTjsF?f%7PYs&l-CEaou|Mv}Y5?d0%7h)z}RTZXrFTR+g7QPKI!wCCgx^NWC1Hy4ki7K9A8hqX zvL@uA?1(lV3NjuFGSN2L2ErN5@i4c$xvoL(?MmXNOYUOai%Oi_Z)hLkUca+PV~KaX z^S_$Nxd$1)#HFvqMbA^xm6PvLPNBD4|=mjkb#LMr&eslB{1V1K0Y> zXIocGKK$4gN@u0mYoz%(!2RSEVD;ts0;&8ry64^M6Kl*7AtvM8Lr0P|9M5V|n`iAEt70%cl*$6YpCB;+nu#}d8;QHN2 zwAc#C7pF-pu;j_Eq6)sjMLZ{jzt`{_#c#0)eTS!vNIDaVjYy=e*@#3?LXXuARN7Sh z31Y$lI!kHNmIWn(KY|7*ZF7hcL4uZXrqcEfQ6iB2vu7x+Ux*SxIVh>LYeSR>Wan#t zr9B*?MDRCIKc&4HqD0WWrRBa|a7u_6MS-jw(?XO8?)Uzdd4HbU z88|KjuXND#UFMgt#D2Lg@wrnksj>%E_3YyjgO=b}RYF}r!_`$3ouSh}E0uPRM^tjK zPHC5cY~*$&sP~?tE~U@QKY=UV>AHe&5Xa;u_^w7Iozv@zL_R;}+nKNX90Cx!`@{z+ zlW>R+>?Dj7SBke}U;gN)g>6&n+0&j)>{|c$&D^e4nB_i_maJ4$!8#xjI&`JuUpO9BN9x-+So5-=} z9LL-+?s*7)7#E-EO8UaT7JS_p9GYqfxk$(OCdl|EC=sm2x6#&wNR9bTvAB7wTHe8l zy}8K`PWGuLdK->(GMKDi*IV;RLtfWMaxQ}#OgUfV80B;vaa=+6I6~&fCif?Sen4qB zng^PvXc$O_^~G2!8fz7I;2PEJ@$tcJxE~qq@UzAT{YHoT$NbfVJ4-)hOikuT6ZUn-u@dkwoBSw`HF^-zDqvT zM#XrZ19(dRa~4l_&;|o}O21W2{aC*xb!+{WphPec*AtXBB}9qfZqV^c`%#DzK|M%f zX%}n{Q6eaz0a$#pP-XGSoZ9>i50TEU(WIvAWgOhzVB>m!nTpgtBsO1>j2=vPcL9BK zPZ3dB56Q2)ZPqOc`+sgWbbZFO;%ht9K4INAT>%}PRpq(!Mp1QA>G0I6oc>|uzNM8r z92Y^Ras=6I$Y`rV*Ub81?!2*F`7B};@6aT5p}SAKLlaSp&$=ayC~2v|ck(om(dV3X zKC|u&=j3-2)wSI5y{oxnL)?;X+Z41QE)MNK&~j1tF<{6Y{-=LUsW)L#}d{KH);g{oCT&Nb|78fcBBm5HK zx;Mrz8e4KmpP}as>Df~m=YKbmgAY3n9uS&x?t~y?fYIesM^9o|Xl(g-hD>=k+e^OU z{OybFTk^{Iy+Z1@KTqMW7`KeSf{ed{%oc96Eup_mbM*_K%@@FYtyBcV3E+?Zrx@A* z)A9-B2IFJ!3QrNrS9uE4M2j2K1R2u=S*tbL>d;?9Ona_%AhH%$Zu>)POb&0t{gha{ zl`xKN|CGwtkF{GA+qq{u85G<^`5Wcr&)L#1fiQaXgsIamA3G%!ym-5od{mH;XuBS3 zq~Kzn!oo{<3Ja%s778*J3bNe~Mtdpr*ANTyo{*7xbd4C8W0UJWoTg5T=aN~47ag*V9W8#Jy z&N=8MVT4=KmsUl%HDpM?^ZF-|H3Ll)w25d>?J7Eiimn$Wzp8v1+Y=iQGfDqizELqN z4LNr%Pf_&e@f0x|^A+0&j)WaLO%eikEp6X~^AkDW4o zd?36Pb_nTvM#?*ym;7`mLsE{T`O0T4tdu;i=P5nMi#$ts{)VT-DHmFqa0)UO3$hK) zM%x(ri?WzE-xl!ZTaLm_koVwL^=;WGdl_T}jj^{1_c(hcjAUKbrSHkG_pFe;_G}`1 z-*G40_73G#B>&n;R|N7~_#nT($L~mc?+(d*BrkE+GL==(latS7GRcsv=`+US%na5vICNTxKWX5NE1{5vIbAV98g- z)CkkM60iG6TEetwQ|}xy4TkCohr@Xa|L1vT2{L90G8>W6mWTc_awulCF4dAAExq#D z{uyYiC&E0{qFFN(I`6#+A}cz@df)T_MPw~FOVNoSyHQWr8&?&5pb1^R@`4Rq%%orViu`DzRQEkTR2p9orMjOI#*e;o?4{#JPaAIsI;ErU zZ3*gM$&0Lpwc#lxmCxNRO_t@^h2KBqDOI_Ir?i86cuF;0LLp3D2(oGtWHN0uk!hp3 zzATITx{XD4qUImU?`nQ{8?j#$<8E|*xa1%_=qGC%OV-YLTN;Y*r#EU7S^p?7=D{1x$yHk#;mx+S=s)u6?$p^e(Pd+Ew-FWq_3sB+A6yBi%lWIiB&kMX@E zCVEn?!}(6*+gl9o`e|77GKV(e;+Jtz5fo;*k7HWH3s=uMadi7^*FeZ@q%$K>Zx`Bg3#X}3wvRR62X$twViIRGk+$nHN@4}t~&HjxMb52WQIMdine=-)UpbZ zW7x|yft`gHtY&oBd)(wPlcf{Mv=^HkOGjanemLk%a-Uyqi6YHZQ*NiQ827mBNEpd` zSH7ozm9i7f2yus>=>9t|FVc03`jR}jkK{{aqZQB2A@MTmUa~lar?mddLs@tlf2Pg^ znK~0>76_wl!N1X5hu|y_C%h;F$f|+i*gWqjr-aba0>!)Ae4`u*Bb=4t*sn4j!jR;^ z(msQF_OxdcHT@qL&v{Kxe8MehCGJxKsE1XOM;e`eUWGf7{vUWsLq?%j$o%?`Jf#Jl zhNE#!ka10rjdqN-JoFbG?Nmc^cEc}ckfv?tOr)dT=(7>7op*sBqYUx5iQGE`!HRRQ zL`o5UB+dBNoZ~|-$*|10B*?fV$R^H4TS<7MHLa_h_{9y}c`JX=Ey~WY$DG)r;)^fz zk1Czk&aL64twT_6(N0mCjf~}a+o4Ay6!GyRO-H*z9{Lf1j&_AZp?)*ke`PIR4efj0 zaKCPKRMcBeHy8C9c41QOU1MFCfCEJLuW0k)^ByV62=R4F_~ zDY6{Pg@+k=%`21PP_36{NT&LB27*~?xZrvk$htC-PeW4Y#neOoPHiTxMSPw5jZ5nD zxb=#PV3wrni2=Lhzyx+s-(h9vp4D$apCRWbhjI{NM9?Q1I7fbW9RUlmUpfjDlnn0f z;v1i}N%^H^(CG!U=?3i6B9gD3JtIGw(N1poR@hGV4QFugmT;fZ6_YNRICk1q}A@oexJyE(r9e8Xl`Cn(B;~QG&Fs|whL`km8IJ;awG)5VdM9n}26NyO6++B7Mc|XYY?tYzwfAgq)wY>Stqw;&=Vh z-!%0&-GqYd0gi~htnC!*>*IUCqhdW5GEk9hjkEo}lRT3BF2c9sAnj>C2Fa<|;^3Dc z8S54YzXlCa^djhdMIvMIp_7!au?}e~3h0<qQ7xO`SgN5?jWXIbmxo)dO6i!H*#z=@g6FwBpXGTT&)@On zERha-&qMmH!x8phVD{@rdNUUC=*7wlCPq zA^U=@94oxPmENCfy&@YWhypw(10$P(%N^BJV&<2q!^|&Hg_&QX2JKhl!;hY-c4YW* zwxR<;w*R+_N8LaNscU~v8v?Rj#A86GtEq2ko6+css=0j zp9NWelCKvLVQ8!uX^m7KAMF(y=|u+h(WBiuo9P}6vx}Z25{}-axgonXJLE~t4tZj; zL!Qv=kjFPW}Tb@Q=!}URd4R58l z8NkLlcw;4x(?kSZRlb$fl5El_pb2L5biF&={rN z6(Z&}G&& zyBpx7-3@T!?gltvcLN;1y8({d-2h$9V)#8OHQqHyeM{Hyd%o%asjeYnR(VIxD?lsN@EF7Q9>_}zes6I zpb1LI#)ptLa|N(5=pFs0odqJ-S( z5|kR+!~&$ac*mgnZ# z`q&YWV>B0A8?~StOkX$%pdYjKF*?eaN$rQu#$}YA`-v`C_o2~c7L;TJR1ygwX~tI( zPYRcjWJ{M>Lm_0-$A%a*RPWYReX(A8*VLfaRfC0*nRh7U@K08`FC+G1Jta9s(YK&ouINmV-1C#4yJWsm z?%sxboVyZ+2=&E@cV-lL;r{U+6=;R_g56O`fj8}Fl96t#1^7P%49)AKqB0#ElenecO8j+ya z8kV3i&iq1@acqVh{j4%N`pkJh((dS?_q9WjE>7yeBuNnaD4>Ze`zS(`2tM`x{uQD` za5VB`{3 zc_e6mXw4fB4W^V?Cy*M|M`fpXmg{uo-8;;|?1x>YD^s%g_-HM0&uyf4+uo3V%6nyR z)(d~)-QF(V5Y!C$`{|soY#jA9YR7s+sXLQEL1xwySKA3LC=rOQ+5DXlA{Guo=5Jz% zc0-4)`>G|d3;B$X$Tu+CY@P%TM@oh@S%;N1IlzKF26l7*1ac!q}0tre4y^uHaCs#9?zbirJ zuRKJ%A&o^}wKTq)M;hN~c8@v$NjRhF(&#L#(bJt-()ZuQcX=by_m75jU__8yB8^I$ z_tXsOioKiZ%Z%6l>U&$M7n3eQc8!v_+BHgo5sIqdXBnf<&1f*Q)!#<=^BU1%Z#LA6hA*Xx$xG(7V7n(R{uNe+ z48`H4T|w|fMknOh6K2IIT2ax&2p@i;JA3?lf24AR#|Mym+r}WsmfQtpwk$+$Q>Vmx z6Xp%Z4f#tfTZ5vRh;Ol(jQdHk5=XZ%{eE9O=*M56KFgLQn^?Zs4eC_{S zke2YvEem&rQE@ZE)&`j)Ccnm1#BsQ1Z6VF-VzTesjdw3M5jGiPtfY51Uy-6}x78xZ z+;ttE0)@fu)?07%nrSXQa)qq73F7LF<~k*4+onl?L)p18T%1`ob!@)M>aD>Io~(r{2!F_V!9G! z%|ehJPdD1?&^4nBn#q`a?LNwwA33=QTDThrXEpE2!HjjO3z>HxNlRu7>^p+B_CX{o zq*7>h+S|yt0!$ zk#$$C&B{k^qD*DowML#qg|73g5oD|pl#vVRB*s+ZHIU6!(n$<&kQ2M=Bz{2XaWPIr zJBhvrN;>k1?!(M3a^`+7T2(_%P2@<{^-ZKI99iu-BFH!*sL7p5vc9r=P=3%vDF!>E z3!fR>`q?*I4v}+y1(|EHa>u7bP>#_qNA{#1z~HAX>Yshs4Kn>AT%%fDdgkaoIN!qk zhz9LCc862E)47^3@!nk0A!^>%8U&AKMAlsfH7jx(R5Uvot=dp06T2BoR9$zz?jz~O zFNS)JmMwYt8&By3U*{?L+8VZaIX!Bfk8ssGA3=#=0lvhwU2t2762apj^Y>JU5<#8! zSMU8bc@A@a1D#J~z!lLh(xyc96zd)8hVu1M!t)F_bNi?XxE~j5T@prA;Q@UAmQlra zDbXx{D^WCBe1@Os@N#SCtPZI?UY3z(8-5A0mLjOhEv4c8n|)$!;YgA@kaFZ#z%mSp zid?(}oPhgr4Yq*DjshJwW!l0AgqzRztQb=zy~Fv6Bo3r(P+qR+u{N)JFQzfW5|Y(T=>dXbd?}8FklYUJN06 zZKjIt0Md3J$&VNd+VT{$t$dDbWy7|kc*-RCXrBA?{5H>T@;sKO0u%%ZP)hk) z%QsC?lC*&qnl^0{C`C!rCT-HDNlk8`MGAowwjmS&QBhGrK~YfI1zFa`C6xZ5AY%DY zi-JZi8cdWR6{;KI|2*@~%$Ym6_x9c-RrlwfUryflzGr66ocC+KXSxyFZ#THI_$7a+ z%j-_oor9T5!uA3hNt_ce2^OwnEr&l_IS>;$5R*X(p>4-|g=VVP>D$DY6!$5Ik|@o`Ds?HbC0P(}1*( zX8>s*Sm~|o;|GAWk1ryy*atC@3o)$W)=zVSUX6wJ5!O-i9`3oWr#(k4$I9+Qz@UNu z;Ja{i6gEFX!$8P(mDYZEd>Kr-Fen1nt1#xQAK1j;OklrKv_xKQ7M`Z^YFFd=nO;H6 zIQSq;GlOmn?_kPQO16v1Y)`WbnRm9Q8Ro_K{z4I#6Dbjk20i*|POw#DN=lsrkqf&jcI!>B`u73%JA1Oa@PEV5q_#rH zrMr4JMbaMW&c41Y`-c8kmB^MtWV>x!jzJ>bv+KIfuj?+~eJR>@Te9J)uucu{PVDP0 z#nTAxY}~wt(6Wf)7k{(dc?x%xCn3g(;=Ty?gNNgvy4yLvIA{k;L8Dddo zHA35oh(fb|ja%i9(TYb}Yhqbc;=Sa8;e=lYxDn6%a))tfE$1^{LVsr}Lq6}#TM*H? z4DZRnJuP{prhf%57k&~GeiF03r*lIjxH3xBt%%HsTsf(MI~*yWqyD|8ES!6=BgAZ+ znGxBXeTyhAHH)ey+f>&mY%2cGgSaLtCi#`9Qanw?z|Z5k&p^f@18K$+_QyYUc?Gwu z+cK`_l8>fYh5GsXy(&};i8nUa)vtq+PA{0EUp5aNM|SkZZ6z~rtWfcrsNlRF94D>_ zZ0w-CzXQm;KMY8L{1><*0wE>>Ar=ju&`)!eQ45WQhJ@?Y*cb`!0VF4a`!|J+PH=Z3 z4Zp$W3hs3l`|9!pXBS9?+Ml-c&e@oe^!zT4kq9puF~TDz!XqYUM+xm&e5cTQHI@_X zv^4FpMrU>RAUP4(!RS_7i^}S`?Au$mk zv1sspa6xE4)R=4wB(y$D8xsLufaFAga}_o^0e%Z<_zM?Z0nRT%0CjoR=Zu7 zOxpIm6xR61WY*|(dyPznbs5^DG@wRnk$qN(#6*b1qQMWq386i&v1mX$6xx8LjfoIv zAvqD^xe6Pd5V;WRf)qj=NGU{FA~OPyy0Pl-V1=Kw0wg8^Bo^g4ZGq69)0ntap;43) zZsY=dKCFqdu_FS!SYe|R;C~>Er6~mXb}|8a^GJ$|Nr+pilCf`nFtd8jn7G!1Bc`H5 zOoU1-%2A&{XusB2G}vuvLzXrsLj3}g6QO=lVWSi3H<8ALDTI1^*jA43qjk#3Max@S z>+3kN08^VY7UdoIfVe)}Jv2DR#>KwRS|~9QCb1~bbP0s^vc}|ubD{0Bv#3tn?cn%xgL=$LR=XT8_W4Vk9PFBqpOsLi-8A3ytNY&{**iT83gw+~h}1PYZIf z!bWG4v}=FTo?CbQv+Y6h>aN4aP10^Rwol2>2z}v=q~&;;6&^7W9zGny0&lO78Cro!ct4_!w8eg1nLk* zTW){O%;tQlF>mRZ94oZOJF}e#jXJ0EKJPZ#Gk5Yt30voTeslbX9b`r2>)Zp(a zz~)a()``icXDYE?jpzQ(kc>mImgBx56swtql2$S3c3l1fX~Y$SG;-;8OW4oG_xrO^ zej7+X8~D{hFZntk^Y=TzT)TtGC4Ib}?l3cL+39`uVzGN;* zH<#c4`>%Mg(5qiC4&EB6emE3_VbkI+K)boPwc;5H&Te-)6+o-LCRKwYlEEmB9k`y7(`MA4Kq*)-#b z4B7OIX49uFn}`XUh=~>njano$un9wt7$ByNIhlBGB|D{L-kpHf&N|91(VMsOP+NdE_yqJF;# z_+PmFUJu4$m}=ZJ!||{9_Lb_o@_Ri_kclvSVS>vUg0vfhm~sA(Rhfw}?g-==NQFfx zu3S9=83W!Jjz3b{*_mf9=AAVL`tMnqcqHb*@OzE|WNJqP&H$VY$hgM8lhP`znPtq%pi44qIr}Vj|qERmoWdnTNo)A*sZJmWSXe1?CD3 zfvwPP0`3cqaTtaZrq3IR(9Fva-@TmKOIB!<1!epnsKB^q#!Yh~GCvf=c)-b;ei#_b zJRT0ne11SPn(8ZzCMJv~CKHr|_7cJiP1#reNbKv_)fGbxG|2NKodXTsTf6FaE$H5+ z#L~r+5yeLPpNO-!@59i=-hQC41;_|b3ogW5b!@z?F!Ii?d8`I4AGhJFZ+ZM6e~vff zP*dx1znMnQhH{8)Rjsv+&5g|~!x`UB^H`fCbCTe4Ow#U7VNCLPNLS{jxh8ooQb}o& zzD4qzGO@^|2v3V#21tt}FN{S#4Q`8~5EDfq77gA&D51TjF>KWhI}{q1EAp7X{8*uZY8cl^#F?Bj{I-8Ft zo3nfI2sa;CP+Gn?y?qLn1lPDP_sz3wIMkPU}oR>i>X_!W`Ykx;mU=-{d1 zHyXg}7Nj6w))$kH-&(F;cCpv8q&!bn^P zU5spqdaz^SbY#2`oz|(=ay8;9-GOlfzJtCQ&t|$l(p}R!%s<9&wy`+;xdfASCKMno zUNtp)bhKei?wIT*q#fp`k&dsx{FbS>7vsJ?Qw7eog`KCyXI842VU8li&a)?#UX%sZ_uuTuftWJ4IOr z$T~pi6zA`gz$uQX%{a+A#k_}e$Ayi?7vd_h|DzQ76y)Jug;fB{0xJ^NIp`VjFixeB zVfCAJj_=_1yO9}(VOX2#4f`A88;xE!a@x(s6tneR&vz!?eHd zDa#M~zD0nnp7MK5^_0sW#P<;s-$zW^F+yXtUue5EmJqG7Gq+Gnb#nudpT`ID=}l<(-1K6krT{EBI9P> zSmR;-jB!(Eg~P;z!^EW9Q)uk=6k39kr0_00^(y-V-Q@#eN6kPVLp)VJNWhMoK{aa} z%|p{sGq_<<16SIsfSp^jyUKU!=7O=sLFvEQsX}y>_w~Q;sd9yPSNC;Q_v)5IcX=}AGpJ68A7Q1ed5~?i{UqVsIr4NXzD1AUnft{l&HSDCF56%?^UjvrBi{WuREy8Ui z>6cpfQyeB|Q81WFCHek(*?KGHhhY>JqINdG-gG`JGd7 zKY;syP|2Mk<+xXd+rESyvD!-&Aq8_8uA%C#tNgDxRsI3sDHgK09;+28vMUM~4TX(` z7;x#}+Ap}Yphi8L5ZsH#ILBGoT&Pqu`N!|`-PdDS*TQe^0c7Hj11yNA%D zD_2+>Fg`5|t_LPeppN=|Qg?xtkK5=kt=?S%&%$ttYoe~z*OZUEH=(k0@f?^xD-Ucq zUFMCrF<;1vT57(1bPe^Tm(?%Fip-+A`lk9AI>msr#ai1*I~J9L{qy<#<}!Q;?U=TE z5FQU}x~oA>TFDFGvsejbBvwL9#!UD$C+N}PqQO+?vV`L?3KGuh@a|zcye}e#hqxS} zH1}Z8MyD@xRP9R`E<0JI|ocUFS+I>>nL@%d_^-!t0~f= zrrwKtWeQFGVW_EYdBS151bwo_#bd0Rb{Q8{lbX2&d=$;33`8@D$@VRLnxo1=V$on9 z=%a+&S7RCM8WbIkX3lCrX01=fDR=Qc^>Fyq?y{lHx!2J=7vNXt@3I&6F^;HRyj!K8 zrd!2HZ-cJ$P3TrX0CxCpmF+WEIhW%_;#MyMCat$FV9DL;-FTYHt)lD>PDrktGK{IV zQ;1idKNd#$3maLFL?zETf8oK2~r`l#IL-B_kG9&YMqj z)QKp>q}?Oo*zS>VX}iB6C9E-Vf0KPB(*^hBOx$0XNDBAYo{ zXx-m*q4KvdwQ@Xp`k%qq{m;BF3H_zu*+FyM@swuLVRQf*Jhno8tfwu?y4nv;>QRIIrM&;9jpj6>F(fO|m^ z{;A6z1PcWnJ#!wN=K4d~2x}Q$D(oR9>>(!X=`PRj;zHg0&eyZL@PETla9IIb5ARhM zawNJsx2rnR|5GYXzWQRn%8nN*dcOW1Dv99?m4wx4|6ofK=XgAOJFKLb`p5E?W>Y0D zYK+MaCQ>&}t{q$e4qFSxBM6p?s|DdK4%%_o)U>JJ%%c2mR=?SCa|4`4P0b3mHdlAe zDVkNTv#oLw6Ydd{RSQDBVP(c#v|Z{TrXHBF9B#_j zLElTrLZ{yHlbG<6n9Ro%+BO|dmBI>(z zi+$Ubhwu$TOQwUgIN@3D7?c-mUoT9-vz_Ub7jx#$EkCbx zZq0cMOJ~g~pI4O@=S1&{@P2b8Dl?4zzG8VtOn663>{n>CU!f)A9W_LFmoo;u+f$kG z>vVWGcmATP3=7*tI_Hs zJDoQ_eIv#D67kG0XN$C*Hdvk!6P^(hI~5x3RA|X~_CE+Ay7v4S@T?W7rK;E6nikKh z=gzH}S-o)K=xo&I+tHeDt1aJ%3Ezl`t_h90CbVRH+im%_eGK^4g48ZZp=-CK&9_;l zRi)`UwsdsuD9y7~mS@C-XT(I;ghpKxS~8vuS)RS{H{jVP)8^T{^2KQu2I=r@vgTQn zxhq6P^(hT@xC0O=!t@ zw#)MD2V=l9cJM4np=&p#!!z`Z%qhiD8|5fQ=UtFyiz_{SLno7JBdoN%BPP5fCUrKU zvCby6WV{<^+xb5p1K#ba9Q{mMysJWuSMe>~ZY5R!*i#$pIPi^aEJC)i)>{4%6aEns zdlee(RcOihw*euf9IdDm2=w(7>~Bo#3Y22qqmoydZMj3+?-0ei*x8IBSfBYj6WPkdv%$J{gY@ z(_Yt4k!hHwE3*qv{5esK18ojCEO|2r6x8J|x18Bj+t${&VtsLOXii%xD7l8olD&_zrWjb6OabM~?*g7%-vgp@>!2;h2xa{CxnB zc{~D;D!CEe0@CG4OxR0I_D>etb{$SN`z?DrABpAT!Bv@X_C!Q*zt89FCOr3dN@g79 zd@AlwjDWM}wl_76gt5MoG9TnBwaC~64kT1u?6h1YCR`*YQz(V@EaC}GDd}Mex6w80 z<+yV73=V`DLU;a*>PY*MSZ$6uQL?5E!>nE9yD%i*U4S8v?($t-`TfWDKZJ3Ru8M(f z4uT9~{v#$*Vi3Qpq7Ty~aSq5%8=b==k$}^>4uVJul?ENGu$iC<#+i?k6pgy?52M@& z8qCy6)R*S-cvkEUwKEQ-c|GpOLun4%E~>PyP6>_a55HV%uxF2%6&x{yzpS>Yy&m%i za?~UaQkJ*0W9|0=pl~|UTN}|UQ-68QS{&GpwKd`XywwQG{NYMD-Fc}BBLDbJizi6D zDorni%V#>^rJ6T53y|{$u>wNP8-xjWd<4H|16~R^2XGbO`GDlj1%SDL`QX0TCo$11 zVsc1`&<1rlS)C^|uFjKip-ZgTea+)_2bwvyyR%~14`lT((Ec!P`7{DPdb$osRXkp+ zqC@VEBuFf~|GTI3(5)VTEOCK*q1u{y2TY+5hAmqV76wc0(?n|3j;HuSd--a051#mo zEEtFE{uu60g=*zYA*wPPJHr1qujjA1waqKjbPNYpYme)y%6z=52sf^js5qc07ALrV%A680q#XF>_Hec#)#L3AhfoKW@r6 z48yWw%8~e|F1KKGBvXcYg_Vu#lvLaonP_1-$bFx!R5;M*yKBCeoQ54(cl}dsRQDi5 zVpPP0W5lE$E3`)uPiV$~FyM?`=O_0uGw{PtmCRC@9;eTHc-wVPw@16Hhn^~Vvqy8E$V<)>ONuzSSHx zHnXX|wsm2BTYFQiEe#u`Hn3U~POFlJ%_h9VTzv1H$n1WAS8C$7p%Bc=1AtVRe**!rIml6`&$=L&2te?3*vMtHSdScp}1V)Du9NtuzBc70i2h z`*knGa@1D)AA#zy>bo0>2hdS0Wa=vW2&(|uY8R#Zl!#BoLmpjHsOHa$$|Mr|N`wO^ z13u&Bi+v+#AM(V`IAnD#?r$X(d&}DORjuu@hD>E{%Kq!21mW2)^a-d&x~?)W{BW+@)A{J@p0YD0BsP$A?WzlD`xlq6~s4^k_&IxGNWati@J2)GE41yB_riyzz_ zmjGS}*bKNBa4q1)faJ{*Kz=r7ONkm06Ez|x=f(@|bsbI?(+DjeS|s7ZvK&X2toukb zwm%)``j2GC(2P~iQF%#(M+X5n2uf&{r{FPOYcJm{nfDotH@wHDBrJg|Ebfuf(K}MQA7jRV70CG=IB~6ED1r z?{)Y4V6lUS=pY)Rbay*9S8Rio4)!rz7nbE!4|G-cY0K`e=u`CW!Oi8{VYfSVsNU|1 z-mZ#QoMV`AEVLVd-K(B{)?$gQ{{cKb3pZY)u75j@b9^JJq+!jN+&d%5 zTwG0M&)IG~Z++h$;!Zw!RI#V2nS0+v-hFN6 z_tIP5iTmo%b4li9vuFEBsw^jS%w?Dqt`O>h1Sy<-wZod4k0$)d>L=}9{X9iA=ee5i zGbo>zHMJ}|Sy8w#h@tQho%t;DXbmN}&Bgpq!VL!%oTiB^toRMu^<&_q=;u#2A(dpPom z7n9^g4@XbJ-_&P*xvvw9!!W$hJ_P^Nl~q$y&%Vu?m5^9%Q;k|fRSWaxHSg^PNlaLa+9A%=&Y?(y+7+0PD7CV!5wCYG#0b4*Jh91t@xvCWt z=_&3(pqhcA=#;l=txL{Og{Mu}$AS4$-?*0_EzRs^vtD>r*C08Oux>7VY!F z!a{Wt(rfDJsW#kMz+`sohio|1j&v#)0+TT@)`lb%a`G~jUZQfR0E$n#Yo{ovU=!NeN9`ec74s-_H?(-{HAF) z9Hh;-1_buDV)^Krdi27Ilcu8f%FES%=Boo4BQIal^dF&*i+TMCU>+crF{{?u%Yba? z{1k8&;46T00bd1N2G|S8n&U44KMwdS!0P~i4fq+roq%5id=2nkz~2IX1F#Pejr`zs z!2bsP9pKY|{eV9K902SE`~%>x0N()oJ>VeVZooGIIllQ8Ao=?zKpN@>NKk56#Kh2u zMS~ssX^uJ=QD||s)a0f{RozEh3!3`vA68bP2zWHTG!i=zs@r)54DwKIK+yl}8CmLF zMGTDPqkkY-z4svGYnRgA_X88%E&?W6iJGU@O4g*$$kN*Hy7VuHP4#39% zDckF;Y>A0%iAgylG?p_$8=-7xgaVAr$bw+mY*B(0=LDyfJtH52HExR|p43P+;<+2D zXc{yW>^o@)HXGsognKe>b6o=@l{j1R-0%2d9I}za)?ZI4P7IKy+cgm{&0*C&zS9@y z(-0T)@qIvM<5@t8b2}jO_97s~dA$`UF%c&*5vR~7PNBt>iB})p@ZE8`S=@jiiOM+a zEyNxm7EqDRvu;s?&<7%D3GRvNsPs~W9f|*C3Y&uevZFaYp4eX^;gsVk>E@!XL8TS# zO+eIZhwWFxI1Iyg_J{TO_#KAgwxwNGyL`2(y}7SKY;&RZW=>|d$MA&y{wxy=kniR; z8%*d#P5(~_f%yR&J5B-oFF@vvHb>#yiihGyiHUHC>CKfDtw)Dbbviw+k@p{{QB*`; z+>Le3($|xSgNGp|>E_cCanL{Ho^kM6)wbMXs-Qtu*_^6HC!bMVysRv!FQvCS9Py*0I5lLSWO}(Y$7I|xk9^NhjTRv0~aIJ zq(tS4t4Vj$TdE7IcJ*P5R z`j}?Z>y}N#giXYx91$AJ5uq7v;(5x2BW2TSBzJ~an{wF{3E4!SUR=DK-6%Cpjk?@* zwG&C{%hjUyO>z0-YZ2d7>G`8N&7OMAo)wxs{{vQtu@MvY5R;8Hg!TZ^6I#fgmrJIO zls%9Py2H+6F74&AXHMvkoI?b`rTW$wc7xXQv-ZrSYmRf7BrS4Zi%LA7G#d>CY7shv zlop*2NMp+bQP@OG*hEaUNNCg|p@nSfo;|m_vJ&mtu1HrUMvC?EH_W_WsiRVmZa&N} z^%B+58Hd?r+u)s0tJJy|FicN%t7&bC)y5iIn$z@AKb`C{&etx!=1x?vT;sbL+QfX^ z0?54F3P`q{4Wh7(n6QnQuuW)Wo6x|v&Vk8YsF-n7AUn8fy{ca42C)yDO7uP$c<IF}Ctx_KyKobxR-s0xIwi8Y&(H0y%zp2M{_jgQPff=fh#R)2_+`vK zOCjvLQ2bXpz>BA|nuvag>b~ysK1}oK+^`G7SF6x@dn*#TCSNCErSm%a8NddcK<)bHFQh0?aykb+xR~U-2l|Yh@`yYT@Lss_k zn{_|H6MwLaaajM(13YGb6V=bkU{X2%=PM7lSnoPj&VfB?PyHV3;j+ZvZ zEI@u@IUw_KF5sDf=K)>}I2*7Ta1P))!1DpG0lWaP8?XZKHo$p+PXNvbBu^Ir{upo} z-~_yX5g_?l4M^cXYMm-EQF~%Czd&e@>Tq)EozPykwAVD2qc;1HxO5m2?$0(Hht!0| z9pNS1|Ctfk1G{~ybd1dC1*GSn1MiyA;U7c*b$Mpw94DTMEuFk^G`94S>*H;yUjH_> z)P~<-OYk4vlsI=>N)TdVO2neU_rP(XJ+856@Ka0sxuyNi(*9s+f3dW8EsX{w>2Y*O z-tm8?1on)jDg6lP`IAOnQ#vTQDY=KcXJSoX>l}?W9qn1uiJmphu-2qnDgWr^^e0;( zBPQlVOeU!cZ7XCXv{yBj6a3QBes5`STH0SNEeob2acM-79%koj+W(mo7&VsWv>oY{ zc}*$ToURO;Qt^F>i^@wY)UoWDSW@fBqp_r+#qs6RMAX1o=QHKff%wgG>5urPe{?gN zYt4w5m=Uq4I&@5EkKsFnwnJkwwj{JZOB=A^c3awzrLlr1>9Ks0xc_HHV9!{Z(NB<` zKRoN2(b36DC8vKPV{57!Rk`#TuUxv*E0?}y%BBAe=JY#jPQ=8Vh(&`fkc`lt)R=6Z zCbVB$+8Z|9TbA~orHzN_NO~-lBrZ!Oq5YpZfl*^=PA?(7b5oQ`6-5Z3F0Z{5H^P-k z$z+f38&U7WDqRwp-iJ1?WV+^mQOWcfYf8k#l!!$+qdpKCyE25v9w(voS{lnEp$%FZ z%Ojz2ikHM?c_cI%mC%Nn(pAu_&h_X>o0*~q@7S;huWDQN!tU&Cn0(4^H+G%v&+fdk z?Dw|!KdFe3u4*1?QON=nnp5JH8~dxw5WAY2uctuX!e>FN!+IIaS7T-7Xe z-Hlg`9z1sA<-hkrTsIz5U{4P1qI13K#^aSOWQ(#F)y;}q1w~nNX?@}boEwQ9FQ%Pv-#1k5uN z1f*ep9guzR4+7FK9|fdg_5;!|DI*#tJMCzgJk5-K@8q{J%Oky&{PiQRm zgvJzw_Ge3@ISOqbjYR{RqtFhqG@7H(PP4Sp876jN7sH&)ga7^s4fD&Wsfc0Tt+0_8 zCiU1qh21sGBa@Yuj$xXe-!nAC+(b>fv<>l!>*EcvQ~x%Gcq@MYFEYemLV{w5#KaJZ z$z~ivdls@18V9_D#@de1Xq-Z$aSDybDKr|V(26W=vZamA5OEli7-Hc+sUdEI#}q^4 zsXvJ)QthdP{40dklA?rsE?Ef~-&N_DWzzC8zAC%t67!7{6ZB-JZKx-CCFU7kiCO-? ztHgW~5*9-xCWcB(HmMNW0AwjN8lccs$*_=I zI%PDr_r$UBh2)F+w<#od;&-A^gnz`U>RBia#qfxU;SrNj1fj9lMrdqJ3XRoQq4ilB z4OD0xMUZf8S__S%2ts2UR%pub+}T!FnD*m2DcX-mTcgW+xG<7%y45qr&bYexf7f)Y z25>BSKMi^3HWB?M;d6-XZ?nQUY!XrehbF6e>XT?Q>5LgjRMk8OFG|@Nb0GroDuKh` z*xSSMGnk`)Q+Ie>gx^xt^oI}lJ*k>}bQOuFTd^C6O}-XDHu=^AvdMQXAe($Q0w=IpcMTEw;63bEjZbE|{#T}sJO+>#P23?4iw9-YIxF$uJ(Q%uLiiK#3 z#;&7{xcw##<1oy@xCeAY9}e2BEw!MRufFv{b!en}`fI3X?n{x5zTBC{_OMsuRL?S@ z0GS6W1Cu#X(|2ddRM0;I=7IJXK<4p(09p3kiA;;Ih>5U>$;K^0+or?WY3mIjuzRad zLClMU41%9eVBlp*|m7?uNr0?a<&lnZ~0GM;f!{*Kf2p>>b}4P z$2@+ghvvXzbeU(kSQLg+3*x8YH*`zAlaFQv!mVC>nQ)7kaEq9%g%H|92ro3PiV3;( zetgnsxz&m{`RmGDZXFWV=$(<#5%6pL@eaR+uchWYSvzw%);3N!b~wIMI7Uo3Mogw0 z3+)la7n&*rr=lZuv)--g<&W;dzF^$X5&MG`l*>jLx4)Hld=JPKgLxm^mUr!E5Iqb( z!0-bsJ0H(x6xl-~@3C!&^f)8+<$dt+))irdos59pAk_L64dVeP>ttubGchk{lXNgY=K<1FeHr`^O(G_mL`-J! z3hhxHPI)TXlNBrP-^1a_*tVu3GGlgRLmrpnUkMQn84LblC9hmdpb;Z_;5OI zveS4LpQX3pnSbUzxp8?zZEH=V?CxnK zXCetSJm$3RZj>;3dbex|5knX!6{#!?Td2c4-HY30HwrYxZqzI~nAcr^WcLG>-Nc05 z#AHN8XghScklkvnK>BO5k7C^vV~drM84C){GTlkoF)-CK-M@gX6IEfCeEl^gI1i3-5!IbvccLZhJw&95)%1$$Q^LgF%< zbthv8K!>ewTm{wO;=5QPxup?2 zkYdg6Eo+DgYlzA6Dxp1qxI!Cq)~rF&{?bpEHGg8Mpf0C+!?m9oaOcE$?kFEnq*Eo} z`;t{}c3Soj6ZR03>W$DILVTea_F#2TN{jDYj}`eTwl*o_Dy%08k?zaNvJU~~?;3Kd zeR>u!IWdI=XYzI5^YAp4nzH5NZ^O(uRMYcue<``OXCRGuGiU3q61TbdK3X~7IZG2U zxJFWd0Zmn5{{tXI8oUAcFMxx93`>8_e7*%ptEa(A@kmT$M@(cVG|EnBMs`je9t{We zaAa1Wh@Gx#U(dX&OO8pMIeY$`ndO<9{?xdNDA`#giK_p6U$S~=kz(^=gdisDAtvk* z8rdT>&7Qo6%Ojlo(#PbXq+7C8`{rt}H8GbCMK~&*QM~J?h;aEE1#NIWZhvDB#-YGz z02@Ls$zm1DpqkeDCM+7fO!kN}=_87Bx#f#>k_CF*{8|KTS+Sz6-rZ=X$cfE-B=ehp zz!!^h5fknalffgQJ&X841NS-yu*6Ol4i*OO`?9{gep1k$eM(P%*{Wc3^`Pm9il`dE z;EdUYS0BN?tn$GbWvmGxa`mnm3npEitR^r8ubYD`Bo;(Hp625=7X`tx(+FY{aDPu` z#$lLR+_6v)IOKA1Rn4sOMKj@t>uc+p8k_5D>enr=udl0@`kMP9#MPH8jU(W{RDF$y z+j6tE4};L$a=Gf&p&FN%Sb)sOB$)IBz|%DSi?DL$?Mr~{UAPPIB)~5NGQW2N(hFPw zj);s{7_GEQo z1ts^>ADpq^unkya+lS75{OZoWrE+t{js@6gzx(`b6`!-V*h6o&FkD~~mK_YGN!7r# z&4d0sHlyznHFy;t`}KEj!~1sHT@EE*YM-iIbzN*_1s99G;@g7{M_6Gz5SVOp2;K+P zcu=Ue82z@wZUk+a!fpq)SYclPwojCC?*Ue;Xb%FDPX6!Pa8xS4viWP!rs6i1N(G#X zUr0oGf*%2vx?335H#F2XW2?i~$>-G7FKb_k?WJ0=O25QuxtEkIC@Vjw>_X}1FDY5P z1dDejm~yHH&4|kzo9kAzH={Bd%On|Wh&Vvmp_wBMu7q2=yrs2{?2J3ofOWACOTwIx zL!*r0r!0mIJ6l;|n2Y&m`GP;YP5nD)oqiC%+0Vx0*w1zeAp61mmv$7}l&#SBsHY|Lh;@G|UHQJx2WCv*bXA62a=#~_GyQ<#?OYW^wo74&O#3Q4MS~*Fw2yI2dmWyg>DpzSY1gmC&cbWg zJ3E?ImR@*rNo5)SVO!G=xe|YVLqtA_-`qe0BN~?$Q1UFvZUNDBww5TG{A0c*;huoo zlyx5qq{iC{xD@m@z$QSLry8$l2c*9J2@;YWNGVe>9b!?n0pyvAwjSY#$#gTukX1j# zq5%ibB`ycgC2k2Y3CBTk3AfnNK4NLBP;==s)1D(wSSuMAW+klLl`3r_W5qU(1a^|L zjVZt~v5lfWMBq&8yD& zU_%)@eOU(`>OA|FAa=6-i7Kh8tm6D9neUvZb`a^qw{jD1mM;Uu`|o3+Q4MSvY&da4 zV>O;yT>VnAqZumtclz)Jw@0Y3^z z<>Q#EG)jm`ql8#Acuqgf2~?d>(RNwdZjIS-N3<2W5lwsUDy}n8^6JO7FWlwv`Cp;j zw+;0tSSNfRbh(hH3~DTqzd9LD!y;~YXC|v&^E~k}4sxmvwL6S;KXrNHbM~63YiVEB zR9_Qoz?QL%SEOpd8@W*)cGn427o|96>o*ZF4-^NC&z{+FJNkc_ug?PJ1AY#WjruzP zS@L`VkZr~<0a7dx@JGZ#OvFM=hJJ;%O@|wy2nLZK5rJSM5yADy!h#ecI54>g+&v0L zCI!1&LD(Xgjr^EvEX438cqC#VCSo8awSA#Iix&#bblhcR2|KMA1RIGMHX#fCA%w0a z9F??DAYwiyUh)yk^BfOvFG;#2_?^L1-fq!%bEUf{jEB*C7j)DXig$ zlw!bMlB1A;ElR`~)X>6Mi{TSi48%kX#6%22qZouXA~6(3j8hV9Bx3j+vQVEw43m?I zVb5y-M`j=QY}6eed(TlF2)>D&rzn}_IO1{E1C2}^c4g4s6UVF8kr5Md5Q_%e z!2zMYq_Gj!uBKUW2sRRNT!SpkO(BlYhjSU@*MZo{<|C7Uop!z#%aW6=2#ARYh)D%k zXxs4pLK~4q{EroZU?UO1)yTs6DMWBcGKn5(rB!8#y*K9K``LmU56C?5szS@1c|w;%2Wb}qvZeN0%SmFw zNn*lDp>5US!ns(x(c!_F8Dq)GkK--=ULr0hx25EyseWd{#`x{>si!05;w_eo#Dt5) zWUqIj^&owr?M;1LiMRNBn!8;5d;tQe%N$Ud3CC{1{O(Zk5^<~pU+wDMMy+>fTqwP} zUh5rC*pVs)G2s|7+0$HT_amP|a~x>O`9S(~7WS>(!X5gOSeG-b^=Jay0WQ};Am%{_?gNcKGzIJ?|XZd@4gRHI>~xM#cpq{+!v=#M#P%he+H6^Ny;ghqG>db4?oE6>)_ zNvL_b&8yY$Bcf8r9x-VEGCwp?>ev06{!#RhGLN-@%;GY@V*!@~QXlI9&joA*ya;eL zAZHJ+0bB>z40t`@TEI^Mehd&Zb%IvFuLH&a?*nWH{CB|hfG-1H0r)Gxj|27tUJ3Xo zzzu-p*HwUI2CZ8BGBMG8V$!w{+Dkf|bq!`RTj%4V!ZJUGCdOk<5<3Ytm8r?bQTR@R zA3e>hx-t%(1SAmL_yPP=mzw2KT)d*GcBQI6nH0@)fv!vspQ4K~&h4N+9}B{o+BPFe z-&ydzl`s<5S#)S;@mGAIFpQWmjF?P`7TTkTFEpnh>rr!4nOVwVGH!EGFWistS;P4y z{#;+iA#3)o{F19>~f2n2}k1H z>T+j|;~c)rYg=U&-k#ZI=R`Vf&LW*E0pB+Xx2r*iY4*HfHHet7hnTQOXk?Gj#+*Hg zDl;y7-aZQNR+m>AXU3rsm&UJI_7D^H5EJ$YjqDMcW)Dugj9W#>YQ+__4baj5JR*W~DfT!Z8L{BxCfq8jt?13-%GIqk$(fhYz? zOjt%tSSB>GOlV`SQLRYYFPmMB`q!`}=d^-V4KFi}#n0JR2~!X!wK z4Q?{augUNQq?^mv(#!F{-;acG@Ltstyf3WeIeeR`Pdid-IjeDbD%EuBH1p3*gHG@Ou8mUWlUkx$@w;{yD<^tE=ErSg}4NejJpJoT6Udf95G=WG3hrK+BO}| zY8l+_dun~hOxK9>9^Qu4oJTi21NWZV2d}PGG4gdn#Q)Kmdoqq zbSBr9OoSkCWtGA5-I6ecfO)wWx7(YvP0R3UKxPk&?l=$d`+&^zvw)Q8zk!e9If#i& ziOHGfLffvxS($d1=fWLF7NEDG56^-)-yBgM^jk_ks3og6B=*u%@RUr6;O6B!7>?Nb zd}kc;y$JVZq0P9?3eeK%6 zhduoe_Cmee4#@0*(aN4)0Hi&=2uOSScPmq3B2!{wPeP+T3C$KR8Q2qJ?j3u&Je56- zi0^yHp8llm>1}OK?`V7aj^#Zu;XN_2C!x`vgl2g^)Lk;--kjA)F4Y;LKR*Eh)RncU zswaL{8@n&tO7C#I_RP!-p~*SPM6qk~jc)a6xA&SF5S=H(!YyCEj*AtsC5 zh4z3BC+_A#c8qHupZ9Rjbv^Az;U_jwQC>gqF)Zwp0sz~nobcv~?kD@R`^TNyb15rH zeBavhbgn@Sm8BnhEWGgcq8to*zk8>!kR@&lz5VcHsF1UPF>`@Fl9VaW*BQuB@`A z+BNm9WjF)4slK?lv3Yq*Yb&;-!usO2_9lYbwzN+sz40VRXZ^kqzW+|}%~e^lig_Zd z_62O#EIS57VHq)D88I2)7TQ*X7h1@&r$BQDT+oDns*JLdUB;=KG8}_)9#}OOhuKNu zTe5=^P?OKaJReWVb;EhT-qMX{{H@6>C%!cc(i3sR4+wBBQ z(MNA|`Ov*i>vD_2d*h(t-oWMOv>TcxdQqMkIN$p~PkGecbIc>D0yWP@? z(iWke2$)cWw4uE%!RM`eA|?_f7FCOVgw}_A2yJX7n0%7do+OB#kYVeIT?zgstkc9# z;n9<%G7yoS8I@2($j9G8O4%@4u`^;KC1NrUT4>KAFG7Qq)N&{eZ==E1HG2|!LGy0< zGD4jCG#cdJ%?9?)ukvnw{GFF`wk@E1Wep)F2_eSruGx{);dZHTySirQrVcl#!VPxK z&QBc7Ys06jA|FwnDq&NTJ{|k8u^k*>kGIkyq>y(JwuCDvvS|qVWXWkv?8(y8xuNirWoPJZK2Ao;Ghq~kn5$~AYb^G4i@gKv z_$ccO`=dp6w!(M}f?#C2U;9~rr~Dc|B9vr$Vr(fRj zLAG{;2;t>cfv!evKn)vmkvw#YD{BLk|MjhxVMhxt+nuH&PEZf{TYS=l;PZ&d-yPob zd-d-UKxc4mnrz`Fql0q+3}@cyp?<^X;T@cn@I0!{(^I^Y?A z-vIm&;C+Cz0PhDR&%X)C!mrR4e#FEmiOJ5ULi?T$7Y&})SWfT*OMBVUUbVE>E$#P~ zmW{VcdYBHRFjZ4GGbGtdzPk^hp}f0Mt?4Sz%jCHk$B^2LgBAK26_E`EIHDc%P4KI` zI=8EEQ~%G|84yup8vm&@oSNrr={(RNEOi46)6yqE^XCCF4y8F8_xZ`D4a-sH^u}l% zh3nz?t^}8^`*1p?J<)uaSLO;vN{3n;i`(OYjWTU6DV8}hzvkjMu*w9+*!urhQ1#(= z-3@pk;5~p$^{aqv2Yd~XY1|9Qe0&#?#dQ-CEg=>Sey*S91i#W)G@zs<93?H`lsm`H z=y1+sBxzX-ITA^4Lr(psg)8a4e?b6sc~vK81>^|CZI?eL6*u=8$WYuYxW`)B`$UYi ziHWp{MT1}CZ9@C4#-g0ur)jww8@*lMP@TJ}Fyh*E@@f_(hs-6l>#ca^9|-MA``5{& z?NqZeH0UaNC_JZKV+J@;g=ni;*3u-iY25c9s=iDuf)07f`yrKv z#x^PNX<9`l7$Dy}2~B@|yQ=Q+Q7f90bdW!?4w9HKl9&w435~_P(83l-cS&|*4N{~EUyj7IFO(k>R-QS?lhu1uW@;r9eVNnkyb+y-eoSn+vm{7G>2ZY z93mzhA|_MSh1P@kLNgo+yEdLc5vI2nPUQ1B7?_Gx^?2@2>vIP&pJ(3HrF-C->Q|)d z!!T;Yb?x!}Z^H*x_?{xj1iBMUmX|2y(ZuKq&Bgb!uHtfP zzUEY==FkESPelf$PC`sLMNCXiXf!#YIh-1Kmw7vq^N(LB0FA6--``5gJ(|w2(D0loI zp!rhPkHX8rKHSNN27& zE{;c38P~e_z7mvzE{o8zS1kG$K&tQub-OUvvWS?lh?q>}6WT)vFEp?Soi!M9!S-a4 zxIvZy^Xv8*gI8l?6Z>>USNXgBdFU@O0Z7Putm0jqw~1hVNIOu&G_nyQ_OGAu$1C?U zPY`&hKi6!F#$S1lvG-;0gl&vpJvhF45T_lP;7&r!hnvh_;*$9ba`2bw6@wezcS_Ie zFCq(0jwKP3U6mpKi+1~8v>Vylt#;-~@I~8ZyczdJZ^vcj?YzgT-^PA$Cv1_Oea2T{ zbDu46)FM-LJ+8Y+*Nwq>_pOaw6SZtcb&aqg9#hQU}+^H~F zZ?R1l`?SSqoqnIdLwL%9-&pSRQ>o$MxZSOI=36b}pi_)JD8ai$K-8sc4QpywwY1i> zTvp%ORJ&Hys%*Ui!OUw=9njqX+&0TrAI$c1_f5w7jFxo)_ti3+IGQA-D~gugq24S1 zn5QCGCoMRp=__H$%x422%Fv(@@DqTm0B;9e4M+{go>uBmf;E6gA|3FvqZY6Q5MhJ0 zfaqNcJ_d+hq@Wd$-`)nu`oUMgdvT`3#8VKHS&>59p~LBxVJPMGD{ybrX2`dRRPt@TE;9MaEw?fC5&rbrfm-RNle*ydyU?m`X zTN?n`+j;{ads+ES>}6$^?*X4hH;IXE5)<7N8g)}>VL`v=-QQ#Tp>rJ_lRWP4{6Z{o zV^@1Ymg;|>r0U{@NcYWs*za}-Fn=LvB1z6exRANShs4+6xnEOf957Ao@BTHiSY5-G zf3B%*U0tJ&bg03(CF#}Fhb;qLs#7Q6dpq!Ad|*J0=5;4}3z?TM1Lgs;mk~W$s#lRx zW3OT{AbSRAlQ`Fs1i z)w53KUtRIlvo*ErYSz^xnXO@>goZ*ph^wU02&RSMRH5uw(J;)Q*t!sq4t|kV?gH>y zl$)5aiI^-U5ZWUMFEp1;C+;maU7L(ejm>+VP1w0nv1z_$6Bf=XZOXT7A|`AiCTtQK z*(9`(O`Sb;BW2SSNY0-{;cC;SkWKM(SJpJP)z;OnjWxD3*Qjly(=^q%Su4ZaMtt|3 z@T+dcAALuPUC67_DpceYyNp^-#GwkyEX|9E}CZ6cWzK~Qt?lL_0 zPpn}a>bulrCS&Rin^2N4FE;=(E8T#{0^S73@vTn) zLXyGFfU5v+0c5^!1!M_C{T0_rOr%Rpq$@N^S7;*LxEY7x{6f}7kA_tG5L_Cx21WDl zDz1X(10_hQS?*SI5cdO7>X58GNR1Fe2tJQo6so;4?@$;e;@1ePKy#TobR2UYwrU#j z-0!Mk9M-hhQh2Tq|J0>xgw5?uP3T8or@WDyGT$zjY0#w8AIf(XL1L~uf?0R){T~Em z9$R zV(fYxo|NULZ9>ND^N%>r7dOs;&$SoxHwm}Po)WNwF0d4kb$~L>o=9bXo(X96CG9cZlaG!eLBF!(`sm}1M*wxX-JmmPR>vBfii_8(jp))W*j{rv#mZ8V zB&_}`{|qkCZj8#FqZzXf+!DPZCX68_rM}P}K|G;_jJcuYw2_wjYmuDa(4s6UH_GgS zup>RLiw}ze*0kdo)iha>as3fny(`_}+9>9OYoqAo_O~n|CM+T*U3@}&NQaY2)w0HO>yWP_00?pd3LWOL){ z$O*E|2jblVes4*9Na0evoz`S5ip3DQ$=`3{z6!TLv1lo146_9HpF>O4Q`pxwV%y^7 zE$z+eRuSwRc6V9nWwlN1^)g7P`sFL}E^{pf!fEZy!z@jl2c_h1I5t%rA$-SV{9XWf z3gAM(Ie?1*nQu5qC85g@NtBqFNQjusAr{(Jgcq7oVqMnUjtMoksIlvv&{=3F4BuYa zfXIO=nL4)?Qtvs)CPmDFz@*qY5||V=tTafWbQ-X~qJ*8O4wAeb9w%{ij~vLxZ7yGe zEARj(wa`rL#W>_v3GP>oT?e`-T8k58(v_Xq3Sjc^P52L z%F=Z^nE_R}iTk@N>!1v{eRX0kLw{6(Z#eB&*S?JBvpp^|4g{#GOuq{&)$ub;oe3{% z+uIsymenp_J**OdM9igoHCYL;vt7(-U7Xy~vTPM5=3{I+r+|G%F~kd(XiEj$t=ch< z{%r4eQAK0E-vi9&d$A)s$4;^U+1W4-u$W{(+Eg|mtA!H)>Gg8JMUf;ikt8vhD=f4= z9WI>6GBl==d=pwXGD+TpocU9iTuE}2Os-*5m)xDhGZm)YGu#MM9rch}n8W52?+t10 z0w+b9#6+6JqROiYZ2$}r+TO9t*G4SOuOVmt%4%1dZzYqaQ-4sKUuP;$yY;w{=l-a& zr8dq#BCmVfHeUxPMViD!n#4q!LZdW=ws)k-UARYPn|C8;{-&p{G=HB`nr0)(OhsuI z&=^tv2TJLbqWoJ(@-{0;Vj@Xm;$?+KFDtaMlH@kd2d>(dt&7b_z+#hocPAF;#dwN` zwyo?JoBxStHD0mFI4pipRSVupCeS_ah@PpG@7btZj7G|Dfsj(l$e%B0=6y89DXY0G zPWkPoIGqFripdfaK@*FrUFd|y2Aa?yX#cFV+`Euk+*xTD<+jH$(%P}`4a44pw)!;K zXNc$m8{m12Qhgfi%G!+OaH}f@8W3arY#G|)iVPn2$U4b;=Foeb-4lO~+Li`2Kl%jZ z+&wMoJiO^yRPzeeDPxZ-42%zY6qXIl?|ZoeG&bHFaPy*0xrZd?gBP9diBHaHQC2BR z&Y2un4=browoykn>SmKo6}ygdzGE%$7Vyqt==8}~io z{Fpe_xck~9V-ofevR|ZXuN08EC`7sPQG1OB#RWT|DC|7tG;I#Q+x2b6_I`L`ob7Q8 z->=CIvps%GBHKfMm#WI1!92jWW&*G(djTM;vP($@Yy+h2kr&4Ho`V+330TzI9MxbV z7F8>5xaCVu@c$5=Sd`=V0b}F@F^yq82QZ2I1C2$4$>U78sTzyo;Ka!5NGPyJ!VL~P z5{`TnvtY|nj)XfD*un6Y6V()xq({Q-4Htk#Q<=Je$;c-Tf&;UB7w{@dE^z^0Q5apo zT?$L(0wyCAFW&`h2W`1)ed)OXb3#A@lTY|)308L}KS|XZ#Bg7eFg5Wl2_G%dCd}f} zKTgLr;lX6ZrS)OO#pVU0G}+uvuee-Q^^ak)z0evlS?ZaXEU{>C7r582Xl&yViw4tR zl#G!RoTjm;n&c#LH-IK_U$WtL*l=l@tf+Ck$$s^1_rkrd?e3p~^R#Q%%ZjFw5B1T6nib@bVWfhI#iD3*1Cd3#yY8@M~ zs5*vN$Hh~Li@8WT9A+OWEbVeqjunnKx(kLI-Dvv|Z>Wx76;)gxA`hlW+!$g@72h9c z0LYU1&AxUD#$Ri~I1Dov_iM?#yIw{WuU33hg3IYYv}>qLt&3f^jw=1V`VYw@Y48w} z1`jdWsYhr#`Du!V2G0T+HF>$DXru#6%}C9kg~}dt$Wjd~og3P8+`h}Lwb*kn-My)g zpQ=qaac4Q-SAtJ+JIgto!91W{s0Nl60OsO%Hi*I^V!|R~GO#4Hhjci1VCm(O$$N`M z2ZhZCr|+z|I3pHab6mzOD%ax)=K}7FPd-nNC+ufgL`+yjOjsl|vPfv57IpSa8Yzof zket7nu&YJop%#%v;7$Fin&mw9I+LO8_n8tvsS&+9?bcj;ALeDnX;F>VqNQ4kYPA;q z1*NuV5iwyAF=3I=$ReSUMQR2HR|2fHXQ`Uqoz$F)0}y&9n4H)Fvbt_cf1rWChf^Z{ zF%FDEHE(VV9iUm@0uFK?qQv8k;k(?q6E7l_+stt){?LJFGP0(&v}R;VsriFHMOm+wd>>7{-27Z zSmfg3I$~P_VkCN^+QXt$J(E2yLN~rvQRN@Mi`6Uq1$COv$x-~)8v!|0Y%^dHASX+m z1jxx!d@UzSu_)qXsp|kaS?Y6up9K60;BA29*QWqk3~(z3F<@e%fW)G~FZI)$;5Cg! zgLf@$T$aR*29q?F6C7q~|HO*=GqA|7+q;VTes(6Q%TrWm7&kL*wS&0Bwk$B(y7=@_ zYbytaZE5lMQdaIJA<9Zjl$BUC_zgHJwBKng8sLn2O?#ilqDn<2T#=>y6D#Y_!7TrP zI#*fCk}In_Qk|K;+HvZn`g+8%qt;iBegFNv>!2;(iHX7ziw3WQ^FsT*#-hPQsHD)M z8jA*0Q=v_^w0~lS?FF;^sTHomo|{Zzod$&(jL%GE?NEGDm7R|o^e8I?9NwqOqOPds zX9K9~Z&@AKX%&{3C@isP(2u+b?G25|t};U7t}+si3M(`!tkC|674}sy%b(TdD(nYR zDy*4rkeRmH*#=3qb#>LKwUsj%#KEdzw7*xC;3liE#6)3<$!rv%4L}A$n*fy*+CCZ+ z4=Xe(tb|LYu(u(#1Pv`zLlSOuxaWq}5n)3scT0EG7Bw@XeOFiRlU-F$X7@iQkGra| zb>To|A6}yxTxgtC@9JXvj0T4S^8n=oPeY-xLOqD5tGqx>wwpiySpe9uPR*iNd=FC#=^-#Y^tO{+0>3zA4& zUEnv5MPqC;(qUul%YbZ*-3Q3V7u=BeONWpIHd1?>#T*$k% z=barnk6R^`u_3;xb3V49uX_JCt>CGY43gGZW1m+z8LwASMK}(fS%{$K)^7#;s5?gG40vfP8$NWLYzD@#G3&*%OP0hBf_qa? z#^x1zWSTsw^&AerAN{!jdT4_`hP}h_4#ydpPWEY@(;-XE1qtfQOfA`p{+)zVOAAUm`MXCu8qt?J=~;PDfaIUw>Nkpm)M*c-%o)a(s92avr% za{<{K#MiPnh}AXr25~z$I-pYl>444#qyr*vjRWFN*D~@=&6YtpV$tC9Nac7%`;x{m z2?a43BPW=uv1ssdU=sIgjYWf(ZMau$xVJ6sFP4^%sVtISp~j-YsXv2@_|FEs^POMj z-TcHmKg-zxSM!8+HBVGxl9+KfktgiTm+ix5zMwf6lq)+UzhveMId;H4w9#3>lFob? z6K6RYZx|D2IeDy|rJ95z&T{fzb(VclpXAPxa~#B3Zc@4be4DHY2vYgJvqy} zA%cobou!%UlGr&ea+6EfIi^ffJ44pK7Nl^7<;j{2jx#jx8I|+1lXQ|gzhzaUc79bz zB602OZ|VGAfo6&Gqo#`UBNkP28(&wnPe3ljWdB^o$WeQ%5{s&RvL!C|HwYx|*MUhm z?#CnHp0u=QEUnklc3PS^Kjk|1iu3#W*f~G;SS76~W{;KgLp5ydYKn(*Rx)>}9@t#C zX(1X{-4#1F=U&r?%m)42*pfeEh2O#2%^bkba+evtP;)>mL@pqQORB5{{d>5yKowOS{L?9<{U{OB3g&T*F>*Zs!emZsA!Kvz=z{ zxc-m(p39DFb63AT4U`{b`fqlP$4bzO-8U3QH|6*LB+YShX-u*+MH-G*0ZZO%^94LD z#7(yG;tWW9r~3US;7@S-TQM^Z!+Zw!q-6C5Jps%$CcY=Z<&2Zt>0b#Ah~wnbkkP~j zbPAIGuq2;&oE&W`TocsP6lFlH6S>`t{H{di!*6B72!^K`Mu!2iVRRfI8%BI98%9e2 z-91IF!*80;O@K5X^2?YHcQ%)v8Di2iLoBLx)EC-s5MF5SX)H&LK?;q-|cT7TgbG2s+3S>Z0U`w?DfTD{F{83`YVVHc}w}oB7PV=Lxz6~e4)Gm*q!*S?C33fG7U*NDju4MN+B@Ini@)?K2uTS&w*sxRs0 z@>#YT4^nMUb5U5Wi8sTR%henuH*NC{sEOlyFF3{Jk8gg=pKpG@*5gO8n>n5#{E_r17XZCZc{>denVK(cEQAidSY)&_|QyNJo&YeMVM;hen* zP{jz^4{5-IVAVJU)W1FwI=ANQVH`DoZX7EV`D{jTYcUl9lrHQTRz1{th1y*V4=~rR zpsU*1U5o=kI8ZAWp~8c!o-Dyempo`HUk;iopcmMZt?c#}C@Cif2O|T&QWy)$A1Ule zU~-=IOkl~kAY*Op0QvVGOI&DDuGBlR$Qp}X)~@WP2oe14I64xUo1hVQ!xqLlbu9UKAHouIA|LMmh7tXb)mJ zmn&L(a@c`dv@ry9QsG`DkV}(0-=FMOE`jXuB-U@t_rvO|aLbTPvAr zi(!y2gBy{izlEi#wy*#^E3E7}1#?+TOOqNX5n;$aN$Kr2I|~V_iO*)Er6Rl~+-QmX zCB|~{TIUZAl=JLIMqRJ2B(3_Ux zzQgnSU@DftG}XuS0l;qB<{j~spIhMBlTX0syJ*91X}$?0zP}5QdALEd^m5BmV!~2l zQuz_u0|+m)&~!(Bl*`AFnm<99#)=Fpu09_+&iHXoyOpY%z^0DhP0wn-)0v7}d^elX zF1Kb215xW2#XDcaKO&Rj{D=v+h)LZ?Xgx?zXk)>x>yes25aM#{v9KZ?&n?H{*_KGA zjJxDQmvO_|AenG(hvghG;T$nJS5;`w;#-9_7Mx=p#GiTQa&BufJ#&idOc_=er)jde z$u#7{T$ym}Hgk!{{)h4v9NLXlN!LcilnqQo{9D6z?$IM*43=DH))tKqm&6Zol zgj>YKGKJQI?-SZsaEn7>OS~aUms>9-$O_0v_3a>31jV-z6AluK z2HTOU&|cD5T!kcQzY4iws%}7s^{c>Gutk6TzKSjf_fOVY>-aWviXH}eGvL}EFB&VZ z{n(bD#Dr_aq5*AFXxlV4HeCB8QuEJLce&Qj7LK~S5hI6dDdq`fz{PV<8Y?dTz;cn8 zaFLj_1%<}8pwPy`dfC}snL_v0r@_TV%UfFO>!^X5Y2O`FUA~R3l$dD!9x>q@F)3Gt z#&T6?W5KySS?!a_{GOwK&eV(y^zG2N(seYx?&p?k#Dr_a#A<~`s}Tk6pc`F$;^tgI?&rNm-Cyi|76pos5GV zsPia(7P73mxp8@8Y<*SjvZi`>Te9@aQI5!Pypwy?tvfHylld%U9@y#~4=|ZHuFKJs zV!qY^vRe^d;i_$aJ&02MASNs%CMGE~nxxP|7Mi2(*jV2W&*fY;Ry+J2J@zc5s*cp* z`3JosfpM7I{c-=W5dYMr2f<=3a(bGZs0k9^UXL3B^SQ)#6yYTDm<9c6^i2 z_5xGUF*wZ3U8WW!YmDh)H$#>tpE~0VQI1wq$3={$5)-Bp6Q&A{OcffKswPP7=D-n7 zZpEG;LuyYDtTY2{2z!E@iV;S&C&*BD?zM7;EBcH(H|*j{8f=cgtB-2eRX)IOtIlts^4z{K8|~#S70#?!z{=BOz2>o zx_4y@mZjCVUWiR!T3XLGz6LFrI0@Ra4(WuK8I$6!9?w_lvVYj*rvroWwl+Htk(nP{ zoaV$zLkxJMS^(mRx`ZM0#c!ZfngDp3rtN@NXF6C*(J>kDr+{e02R{Skx4r_H3-~2# zN5n+r#G=6~`e{zkt1+3xEa4&;3y^S*ZIz7pc%D|g;zOQj+(PrFaFiu(H!NpNFFk)h zf*rBu!jFR^YElggOo&LaZaj$M*NF-1h)E?@XpbPg&>S|Qz*GaW#o%EB0wfubjo4#U zCLv5_qp@cr2F<`V1%3m6(-dyQ?em*)7zTBz;J~ms?{x1L7iY}xYmU=eZ$HaFMR zufygx!-rg1fpNVU^W=}XazLE<1pCy8>kL5V84Hw@T=vC7kqa@A3o+^16j~3$3+*M1 z z{lD+4qpP}llHqXI?H@BKUcc|vS9f)Fbq|Dtd!qw!R%Jhe&T8IC!2DOZWCOv_e)x>? zM&-aFXieZ(Q&N2qoGu2@h4{0X;`L|q_So)2zU+X%R2z20U-Ao2U2!)54ktx6Q%Gbp zg~WVOV2^<>Fqx&;y2#zT{IwLmlTGdX6c`3)L( zm($rdneNHH$#FeQA^1;yqkFr z`S*&fwX*?=?4*#$P6~;IDS@p7UtpA-J3d(2?X30P62o_V5Wm3w({_m?cYJVMx3m7) zJuyg}+BVT&oZ2R_pE%Vcu?J4|ID2`byEwCT0{3+{kZUvoZ$O8H8@U^(a#NoBuL!3B zBOFr#K4=E7%7%KCEAjFFSc0-S9_L0Nx5Q!ohM2!Bq8stsS>#DNK4gO87P~sA2%6d& zr^Q-YqwyISIY*(2QI$8#hWzrE&2uOVO3(B7Oa9_%8?Ndn>$0JcC>siG%YBBxR)a4v zDjVx}10P&|_VPCTcs06_t~{;bU%u8q<8;XX)n4%YS6#pAlCzxOXh*~HwYc!=6{0~; zY*M9+OTJw-g0tkeI{a_BtHlZbcGUfoXGwW*-b|Msz0D zj!b{`q`3SWGS|o+`9u7riO5H?C!PVPMD|cfWDkYJo& zru=)6t~3-9xk4ea^dqn(uoIYR2B+}Y@v|I7J*T=2+Yft3nKkCwJn_hxj`LF?$7hCyD+&g zJ{px}<9>bny$mCB+^(LoXHgfs)-=iNp{|Ishq@xFxrd`FiR__}$Q}xbwj?lWO9Jz< z=iN=;`&|dQoDQ<*rF0PZ2#*;xVWTtWr~{463932saNTG&s3T<794WJ=KxR!?XAOl! z)=)_F!UCgSSYVVj)+oroo~uT{tJ9vp=8&gf7e9+j`A*fXSBM_L5h3a*{L_y^fSDbL zf0(PsdH+w~l1(>!4#4LvulZFLjhaX~*;rpw)8MWZda;;YlW(MRrW6!cIx@t}%wv#w z6#p3fB_GDh%)All74?ilA~Pu@>Y2c(o(T+@iT8$!>=YZk#S}tk=izHl$9BDL>i_lx z8`j8Q+bY_SLS|y9im}5d5KKHSxTMCuML=|m_JHPJ7oMVpKLHE z4voX-HOdk`ujNr$QBBT@k3xsz!#X8EwvX!=-xo! zb;Zu$d*$m+#)9&NY{);VzKgtkQR8Z=`O@LIN^$tdRjf{MzF?j@hvGg=<_q0N6AhX| zB3~#Z@eb+s=(`{9#;&jI)xh)+L!=yfQE;4=W9L-EPPCkvlkeDd(g$LDZ- zj>M-BpCWvY#)lrZrC%`^jn5c-#^O_n&vE$F;uFWG8J`pJX~m}vpOf%u#|KY|gz&%# z_f==&@0Ivmjn7T^EXLtpx|~*2k{-0YiR+DDh(KJrSWR}&IjT|n zLU(I^c!gF~xBgY)*k8x7P0DeklGao>8=D{WN*<9Pz1Y`{wePR(dvB8cKyBY=i{_O| zhpG>hcbM@dJyiY3W`Ae`lEWcdX+2<*QZ`7Z?BGqZAFS;MTJ|alsitU%PSIgHMcJFB zI8-Yhp%wEsOR+#JMzrE#te8rjCl1V#9#ppe`k?v>RVQeQMu!@8sBfVI9X21NU&tQy zL#UX&%tWY!L$pF&%Ap8C!#Gri&~OfoMyQNK6A>!s&{Twu;!r9nRNfO;c@6>RP_>v| z#~@mDnN=>S+K}%a-bXn^-cRLF1fePpl_4~ZL*#umhsgUH z4oyWU#-aa|_tUiZ(>Y%9zK%oWeLaUF2%W&8GK6Muh`ev$5P9Fop{WQpafrOff07=m zb|od?#HP$QS~&Keux{XVZEQ1BnA=ghwv<1q_>3l(^iXB0 z<^@4S#Yx5IRN_j-XWl6qTgNoMb#BW|p{KYrzhsuSujEk@Cy&ePQi9kdEV2dz5Lv7`7Su5J;gRUA4f zo*y8#HQ$Q)KMv6X$=^6ci+rm%l!4GI9HQmE=Q)&%&_f&=iqHcbDnaNf4vj$Q3=UNy zG>b#Dq&Aa7H3)snp$3G$<4^*jmpL>Wp_Lq(i_nW4nvc*54lO|FVGb=s=n)PrM(Ab^ z-G$IC9J(K&(>U}PLZ@@+S%gmE&`N}6b7&PpuW@KKLa%e^6NKL2(ANk(&7pM&J;R|5 z2tCW8uBZr)afn`&_Be-nA@l@?=xt0-a;P6d%XyR@fzSgSYDVZj4$&`3-ol|}2;IaX zY`O~F$RVsxhOXxj{W9})94bTT8V)rebQOp2-l@@pk zLJpN6bODFz5IT=T^AS3iLrW1ln?tJ*I*UW=5julIeYzq~ITS(YR1Vc3bP9*&AvB9a zcOf*BLn{%wm2+biLbq{fHA27V&?g8j;n3Fz-OizP2;IS<4G7)Ep{{6JcXOx*Licc} z7easFP#=Vrawr3#KXRx)Lichg7oqz&G!&t0I8=hrwHz9O&~+TDL}($0rXX}ZhiVYI zfkO=l-N>N?LW?*w8=mW$Bp0%28tuJFKQEQ5EuovBu`aEdRS`((7B(E5?l&;jqnD-_XnRVhypzSW_Y? zzpADtIxSX{i2F12ew^C+7QAT3?{{NW%ZzCCtm=kX zwAnpdl}KWS6Ae`Xa;#J%-sw{mZ)>W-hPQOw-8rJ){x$vguQ_PIkutDtsPwQYct~!> zl##R2hu0_4i{mx1DOHVCP4x}+ZBxpIM@JQpiI&6~<1##@y1Fe<-!Mh)XG9JTtizjN z(rfD*V(I(0_D^r9Z$h9ZRE?(q6iUbSGVTFP!E-us>|dFIP$Qnv zNe@lOp4|lgRs*jAX9`|c--u5W@CJO^fYgB%#rbMjMw!)!|JnEyoUO)=m;^X&2qkd7 z1v&{RO$R;@DzrbiiS64F<4}AW5F?#W;A|A<@#B@D*kMz!J7va{##!mpkww*37S&CU z#;aSRHIzjnj4Z+y!?xVcaIBV-5X{ zPzXmvd|w>-<(Jb>M|h6!!>2d*>lpNT;+;e>4xv$oYB|&cq3Il=KBtaDy%4JBP;Z1z z;7}igW^gDSp#~0RAk@gAeh4*js6Rq+4rL=mp$M(!Pz0gBh){LB zv3X#9%>&186{dR_X`x7MtST`uGxJj1a1_YEnilLbKPd(yp2eqy>6Q8RF|Z~!t!;V+ z?jzGnil7r-{%kn34aRWqkeo_F=tNq0Dg~`$U<>y=j8Wg77Jl|1JhqO|QBO{)_o#G^ z4(4!(=AV>{9zr=ux#S`H;(rkfp}eD->T$3mCA8i`BKRNulB~x$3dm3kp+sG6A+%F( ziG@%+*k@_zv;e`DcmtUYWSxba1Ed?W)QkNRAbl+4S|AY%Sq!AoLhb=VGdNFY8IZXa z@-z^wqk?ke`7pw-DOA|DuKL4CFNn zp?U5a3poJDS_{bpl7R~5c}QE@D=nl1NV|nJ0-0waGl49$kTZb1V<8s+`PxFR0MZ*# zd$HdLq@RV*+tl+d8UFby% z`3VTkl<|*SCccrQG&}YXY`hL-U~cCjy91eGA$@@~TgV|m=32-gAd4)d07yD|BTu;; z2=$8|G8PEEOwL1&144JLJ!CqNr517`kO*$adz@2%lv&8xKo(k7c)M~S6<4rX8;@)QtS(e{v+39&eD0cp38zXEyDLcRbp5f|j1&fkI1 zy0eG;n-I&2dgIqDtDS&M-OjYy6UZ_P*&j$5hAdC{P$2JE$PnUSA;9Al16gRrH4?~T zOL+p2`Ic1`kUkbN1IRK9X#-M*&fbgbbRc(G%I5*;Z&_UqWWHr}J&=VK=l7&zasCM8 zMGJWp$mbUF9FTS_dU*c43gj^hc^Ak#7Vaqvgx&u0jZu#o=)QfDFm0=32;^K!#e%3xO=KIJW^=ZXrv7jK;$WUhIzmSz;ld0J+Pu z`WDCni?bfc*A~(RqX)fU)l=>PWU7Vi24tay&=|PLLJkI!iMyPhPA-sn7IGwz-q=;^ zams+utL{By43M7KUhW}u|GLgXYJnsy9 zGg=;p)_gCq5LzXC$3kcyTBQ}&av*ap<(Gi;#v?SIGOc?rv5*gd^xVhfd=6x`71#Gb zzP7A30GVi6ZH@8&5)0`GBt6|!-UCRxg=7Hf*4O0F-k;f)PCk$t%c=;-2+N9gZM0j+ zc(SsPsX&%n$O%AJSx5rNdJ8!XNcz5}hx35+u#n4u)LF+8j zK-w*&ACM&$k_}|Og$xCfpJ94949IK?84cuW3z-b$ehaAq@}h+_0aqKn2a<0gR{|MrA&Y?2SjZhf+AZXMAeUIk6F`<&$csSo4>0|C1ITC#Sq)@?h5QZ3 zatm1tp%(jrD zfXug$N+8QDNox-p0DuTiXYY{MZ_r#n!@#b>epw|m7rR|gdWoOSqC zI^7)|B)C%@T!MkK!O+>x(ZK~yr#iTt0f+7{Du1?jbZ}wPsSYk5z@Y+AIy*W#m_m1| zgQ+h#v>K#zc5-wui3Mi>edF_fL1Wa-XG{pep%o*gvx}ocRiU%;!c+>JkfF1yql2kb zr#hG>fz#j6+1=5>WCom$(}n2`ICOVcrR#T&4kjU;`h#f+ICKwL>Fnv~V9L>{4kjVs zR2n*aIXaj;bgGli9JBuHSe}UMypcz7c%<|bpFtxbzW-KbnI{Fh&~G4I5^}Ly0OsYy_=3TIijyahYSwYMo5LW zS@H!Mr9UoolHizm*w2Vd=p4+PDfp(i?%wH^lU$ucm@~)l`Cvmw_}rg4rq3ov#Kk4W zK7$;(G=p|i`h6bAI;-)m>frz*E}?TMbEw8r+9zbKK(Y9BsP|3_e~oXYbEu<}#hi}w zFq=8=7&=*wP7ZTE#W$7d-*3C)Lf4;M=B$I8)T-&oF?2*84g#7Mo`rAHdEWI)%)k-ky$@y!$}+r@aVg(BAQ_$^t)EiT|1Ngkt7&ToxtFF~`ATN2ioI z9s4tkIcB>kb##U^N7d8DfA95>o31kEtjD)X7k)z%|1;B7&YX_@If^--7&_&S&e6>2 zjc+=h{Ny@RH-A2lz?ro0T6`;ij&^iLGKYFaI%>Z>01el#Q-L$~d;`C)49rZ|DCX>s zZ#uSl>1=e^ex1=cW6z^TIXcHMheks>R{wogK)*2tXVSuEJv_$I8Ot21jns#?J(c%` z>rW+fdY}!e{J{@B12fY#jyWB-ukp+=^Ld=3Gl4m0;hSRkZ1R^Exc*FJ&T9BWeH|SW z44rmHCgD3ROd}?x>y?w&W|+ zpBtESI=-ns-_iG~Dw898rqWCcqj7Rv|G4%1i`=-Hm_v80b^q(c6=#kaSEIoZaWymN z0~uHIiR;i%{AEfr)wD3(iC1wo8#*FgElyk}N5s|2oQ}&P!5p*Bw;FK?oi^rB&xvXl z`t<0GXI-C9Vh&Eo`z+}19G#iWsl+$6or(`eJm%_9>g?;dnT`&+5^y5;CVzgI`7WA> zKMzl4&O7*4b!?WSa|&~K_JUAo&If&6o!QKxeI(t9gX0uKN0bG%(6lgL%^`Ho%*u9? zBl7Sx=5!nv)tt02?P5`Jo#wv%(R;v;q&dxQS<9-uifSg*XKK!vl`!O{JPzUOX%F0g3evc zF~|2i9i6+G({Wkc!XpUA{f8gvrfVs4$RDNi2S?|R%sCd{G*8&= zxg*i>`|IJo%rVR2kA{vYi~E>kmW9a?dC0XZyf>H>!!O;s0Px540P8HGZ+z&u--t`- zJP5S2`tuNT`Wf}-K|@FQyo@=f&n8F2^)PePysq!m zo9fTU4_$)^wZBZCW{!F7`IMvc40DdhH=+x@+_XnPJAIZpL{R=bZeX9dvCbY5Z(mAlee;pn`af)4i> ze1AvjyzJ=wDFvNZm_uzx>HNvjc{K%{*O-%T=)CIayq<#28_c2mR?45(9i2BVor1S- z`_L^f?g_)R8(QhS>FB(bg3h0rW9H9Wj?UZ6DWGqBuAcbsuUvoLVGgw~<HQoAPk%e55zwyB?>jnwVb0O`rZzZr$yR8xew`1P zvtDxWC-fIb=daA!iB95}wEly=T%9#IlNSCQ->SX;)zLvQgQIjl9`{&)KOZsY6GP`i zN9SWp=bOLZjt<+OE>f`9AwPC>KDBhl-2MY5%YGe9o1kO*^Qoir8FP-MZ+sTL+cwG7 zp_~!-Jyrer%+WzN3eNBFjcOM9zI+A-5WhcPGRN#!zi@O=eW5c0-(B&UwCB61;C`L2 znNwrb=dT={Z?q1TX*@lBmaFqEbNWMmJA~-?#?TRC_jf?O`-AJsyR0)gV$5C39Od(} zE8e`_jqCrIQ)c+Q)`&~!e9xSEe3Q?^?przB)%iPf7C}e({Jo(gd|t<#{qRkBNIsh! z5!XMMGljnK$=G}Kvu<2JFvs-yA4Xh4=SSx3fp04J(TDvLRlr|f)I#lhqdz)2KQZSi zd{Z5}X31V?+elm1K+W!Sq+{dT1_iNw&ZIdH>-oTuj@J(^`N&6NP zPk&thW=&P?=}#Bd;Sd+)fJ#@FFx573Z$ji@S0^r$BjVbMIX6k2Gji)O zG55!{HFL~)%T`WY+c=GIr8+r zckUnQ>TJiH$8cWhZ0qRIogHt_(jSHoLA3s~Z_ga+87Oz@=way8P$LiRz?@zPQC!=9 zeGvv&zs`=#p&5nJ*}>7F9Tyl+JJi|9(dp^v&{JQX>Fna@?Cj`JiFc;6D|6m4($&k+ z*)0W~-I+rpg36!W937gmbmq_Rm_sv3rPJHd*&_v=J(**sYY#_7Rnm0OqVV>T`cbXJ86Chcd^kKLZUN(XY~# zj<^?z=t7U)+J3m(k7Y53#vRqZG98_4=JY2K93MQhzR}gmVU9Uh&vtZZBuxv?hX&07 zK6vq?>s*~d%t_!|jf1(4P9AgGq|W#UZadP|8O)rBp_Aw690@g|l59{Q40%;=#aN!FBX;8);ENnbae`uW0qIM(J5k1HhY6N z*Q|Ks8ds;7IcvaC`BUWRlrU#0IF!#j&2KJrbxN7@HNLk8hmI0M2N{ZE7;`9pD6Ru< zKXt0f5p8EUbCfURKR*P;;?F~xf!li+h8uASo$?fPj$)2ER+c+DM>B_J3v_)^f5TUM zyZ($|&N6%}zmIlwMlxrvO#ABZ9(&Z)sbJ1J$-$q{NJnQBbI!mysvCcrvLV2q(T>h2 zN9P#kltP1iKI6r80e#dMN9PzvXDoC2K!c9g{&-2ib$2Cm%zPf}=!|2IT2J`H(3Z zSW9Q8wpuKL`gQ0IwY|P^tfO^SI&nwmL`$dSt{2fg`0HT{bEscc{+#IOv|2g^=S+Uk z)uB;R?0Z)_t&UEcrE}T8ZVTvFPhyT)?rn|^y{iLrV|?RZXwE-p|Jn7Y-O-up=*(iy zp3tCN$=&0~B3I{R=9qKHS&q&r%;_z4{yK19bk+WRp3NL{PJ4=@b7~4Yr!mL8b~x41 zIh{Fc;1A6uj_kEzitEoD=6sIxs-HjI(K&-TL%^Zq<-IPdaCOdPPFH*@oiiMrvzSu{ z4H{4P8ukemsQmdempSWkUg@0W=$y@*j>nyIn6uK*Ior`WHwB$}%rVRBTu0|T<{(pe zUuDCR&uZOtozEPqs489OIXV|Gr{i?ZXO8L51&+>z%;|Vt^djb%<$j@~b1`#bNEZU3 zE`K}qLN{HPFsB>7Rk|*AbS`Di$I#dopNs#t<1MbvWz5M(bx`Z8ml`_lu)`Y$nWN^k z-@iTUTazQ^q6?UF8rbAd_vnGc+_Ys-MA>0w6NKaUFF1ejTKkM5vvX}IU=rWnKJ{vAP~A{^}v~KT-Pxt7vJi-@>(M< zp|g-VY8~>5^#d{O^0&e3nbQN`s!SI;Iya=Cb0c$l8ag*PI*U@!xyjL4l;)`!R2*3b9x&(OB|g$QqZ}R zIcB-v;pouJr!#-+~w%p!<>Fd6CFQvc_`-A!#^-*EzYZazQ@s_8C_bqW1T-T z2a_JHv((YKHwB&hnDdUIbFZUwKXY)CfcuS;?|uAwH(d`f$4uA#j?RP3>3A%7h&kq1 z@Svl!j5#!Kp+4cpYes$R`tvYz=HXlA^D;;05$50qHupboMBWV;yB}qanLm#>I*&0& zUF%)8<4M)7KaVqK4dPP%Jm%;;!JLls=Sk+6`SXOMvpfZzryQN-j?UA}* zZ+!)Gh@i^rMMvi)=1_Ujapc6Yb6tO4W{x>0dCAdPY3XF_GxUB}=TFQr*LGGqI@?>(A@VF~`Bz9Gy2Te^!6pYadtV zO~;=%9Gz7u`16+I&nidf&&*NnbilZS0_Oa0GiNo@t;+q+j?O#GiGV}vz1#IWX{ej7 zcbQ}MhwnH#?^*sFF!YhLT%GqFo%bA_)yz2xz90}<{f~zNu08+49CLhM?dW`vg3e!= zGZfz{e?D+@)})~GA#>6Voi&cmN6a|}-_*~)vdanOZvK4C9BM&o-uscG^9gh4S_T1Z zkp5%3tMe&yM&Mh`Ge2>3{+5EyXUrLG=={ym`P|a^X<-bPHU9bP7tAsJ`P|X@k~wtk zK*u}#b`Mye|B5;0`1Pfu^EGpN37OEbA0+0u{(Qq6vt4}c=zPnZj>oU>9Dlxbbk;Jb zr}U?$ z4G~x8U(D%m=={^s*}xoXU(_GQ{vA5q)%iDb%=!EVN9SkesPbBOd^Ro({ptFJIp&)A z&yEfmd3y_IX6*Zls}p99sT1l#Ib}Xm+{M!Q;EMYTTpfD9to^QrE{;xD=5*XHwqlOi zPP;lfTQesCFX{UI@~vh)@A|V1bIfshYe$FP!i;CKq|U1Y`ab6BbZ3rPpSw9a+cHO$ zSMWWK?HrwL9i1M`QS+!ht{&3O^@rZtYu~f$;ppsO`Lp+S7teQfc4W>Pq+PX(9UPsW z%$W)f9ocI}f(pob7s^h|G4r{nqq8$}N?=LzvC^&Xx!Kj(g*j%q@9gOGV$K+7pz?Nzk4@Fr*{fE^z)#$PH#tNj}&zFWR97xJscf+ zhj?0elFXm)-yT=$=FeWtG5fXfed z;45p~xb|lb%>-1sGMu;$aN;sKBCZ3Oqw4D2m+urXHuYmpKH?&O=s3`bOXwWL9M!j+ zwBil81<1;ugPF4isM0ye(V_QtdtT2M`wVg)AQ;pG1LLF{2A!z z3~+P~WljbxsVy(<(q&gyC)3e6)X~Xe&VA58AT;^mHQ%~A+03CeknZ5nk>%**q@a__ zocV@Mj-x|wLr)8L>`xwZE-`clIXZ(=(4iIew6Li&*wGo1g3e)%&JaiEaOOOUyh9)~ zXK``B{kWmbS!|^1a7X6|=1c$wgIj2q!lp0X@;Z_^bMUS17aU>eh`xp1F`pJLg9i02 z3;*=)$0kR#oro3Jwcm|;+KsD_IivBd;)*zN6){J}mA37ewI)ZzRm_}YWx5JpzwsD1 zt`g=@D^qb5J8_j-aea5@A*Yxe5!W#0VDXX5;?#a4R=IHvXO3CthZ%7RoigU2;c*+h z{nkl;bal#^^9eYrZz*$hj$+PkQYZMi+M}6cj_*e~IwP2)uD@<=JEP9^XC!mh8vcxM zbSjvm`pkO{9rBf{Gm1IpyspC0p<3bfnM3Ojt#);eVGcTXoj;=;oiWV0T5_%{`d7es zO23C-zXNcLqf^NoOuqU0;=26@*Sh|UV@^NRLv{UL>FA7S4wV-jD;~W2LRV)3bIf#& zcXTFNI-h>qidX?zW5FaxXQHDsnK`BG4R*IJx;tRK?pWrSISC(fMD z4V@-Or#S_k6PaW7&&`fb3v)WY?rvp{nXVQ`C&8SK`}sEJU_jFKC*kOv#2nQ>PdV&6 z+=2jP^&2ypW9H9Ej!rvsu$azAc2ij&S7#P;x*7GS-O)KY1s(dG8T(yuCp$WHHIx?a z*q>7!o!O4gY0RNVc@PLqI;(HM-1v0nlptNIpFhpfnZq2F&;6IZdx4ujXE4XCKXV+N zGnq3KzRS z`Hs$f=BV;&I`83t`xh57#~cUeJ31FJrzd=&}mzdXb}ZiRI6T!L+p> zkd@DuIy#p)I+s~G2c7)+#jeif%rVn-nWMA7(#d?gHR|eI!JK#Cr5e8$I67A{=MZoZ z2%Y!+iYcznRm?H{xzf?OnmI7$YmjfgSrjmjx`sLCxO}yvb1idJx!)VP98)|%Rz6?H z9J9Qxb#xXoN3G9q_3E-LSLb?1XCdn#I{uv~`r9L%&hg_Hjj`Gw4uyQ-ApG;sOj4Zf zdkCB1VTBBoNGPO`p%N+AoZ}r%gM*xGA<@QIV|DW^5g98Jf*;v55&XEM_bZYr_VX+q zqCcdOkWBlt61h06tiEzMKRL+O+snxDhsqG|q|u1dDV504Iya7$$PVFj?nCfKJjd!X z2f5cl{^THkb&ww%WV;>MQG6*6_i~WI4pQMD(;Z~CgIw+)^b1|$P_e(@ARjr%zZ_&Y zby2NTktdNZVWm7mBD(>hz8Y_`kw`C%Tqco&HFA$c_SVSL5;;I4?@44|jjWYOx<c7v%K-LL38pYa=%6EcmIfW9rRwH92;+68<4zf-nA8X~EX`u+m zM6EMKB7fDKi4qyFIddfPspi}%kq3Bg~?TGy+bX0{^?3ohTMsr3=WU@w1k;nv%{6Qjr(8ymT@{C4yqstc@zi6aP zBI7jDB9Xl`^1MW@)W{xvgidQ%`P?FryESK_M1H4{k0kPyM*7qCPaKzMq){SA=sbKt zBDaNATwQU6LPwqElu2Z7jXWrkZ?tkBd5IhkE1fEde4vrrB(gzUeI=3GHPSsDQRDbJ ztaLKd>Hqjmps+&5rPKfMrg-hodFc#JlU;Y#7 z6IRFoiR__~qa-p=BUKXd+Shp!DF`WlZjs0-uo5HnQxdsNbKaMTr?bbtAwG`KoNS4l zt92$zWVuGpmdJw|St^mPI>$bg$YEOf2Z>D5R(tOkl85qns6?*PoGOXrYn^i>a<=Bs zZ<^6@VOZ&`lE@Pp`AH&qT4%cqvY|s+9U_r!yC`J5!#PDFPidcnL?iD? zWU;pTN+R7fC%ivg;X~;Rk;nk;PfQ}mh85>R$7-oW9?_iF9nPl?a^L|XZZ9{MNMwPI z{RxNjoX`xx>h;J1_#N+o(DQE4Xbobk;q&xE{S-`cR0u@iPY&lTq}`NwQ^5d_Q3I==Jc0H ztwxTO$OU2L&$$wLRwEBe#PjES2g&PCG10H&D4hz4ycbr;l@ck^$O97TqSOAFL=MxO zZ3jRW$I!6SIaDH^Kh+L$qeS-6{yZy@wHonC9+m?evrt!TKRxOMO+!$YKla@*PQbuae zB3U}FR*4+1k@F#^ zbdbv(2iYpuuQSL&W;n zZPg?ZuWnrGAj=%&8wWWg-=B&j9b}Y))Hq1HM0#qUFPF%lwa<4+q=)AG)zKL^MEEmL zbB>dUm(t55a*pOa=WsSiH$TJc-O?$XOBD2D(Z^ z8YPi7jkHSSIgKoo$W~hC35n!ub-7ZW)LNb^=E5-x#ecN3Wiq`)4nLd&nvvi!hJ$kU7JFVBGbPoy$U@2>Lq@xgAJP^a~!6Rt|sA4n1Tt zkVU959>!IIa=dPXZ%gD)x;5=TMyTwm zk?|6_TqEa7B%*bml*p2>%K4uq(x5rnV}@y@XMRTr}$je&i4TUfFt)yNqV`G-c9NaS&iyeg4}8u>;d!@SrhiP-Pbu^%as&oy#_ zM4GkL1rm8*E8i`V12yL@iTtQJ|B%RR&Dj(E3LP`UDi4p4$Qq4AC9<8?IY%O=Y2gX5$3s?2up6%x5x zTOCv-IG1VUBp?F-79hujKQBp+hh$6>KBsHW4M6DdkiDw~=R2)@2@pCwq+5+Ze%72x z5?P{=(}C;;+E9%wk{l0t0myb1=UX5<0=XuvQn3$uM>;%YJP_hs8CIORlH(!Efb;}s znC5&cIUdrxR;1KJjs`+L$F$F<0-?i09soiUMFJrkU}8jvxm$8($_++0Mg$=o&+-3LcRb}WFfnt7oo|6 zr+fquI+B{)jwnW4}I3t0eU8_Vi5AUj&fVeO&N?iO+(kbNy= z4UhpAk~1q5q9;MUw4Vc{*h1a~Qeh$ePsUhkA#;G#SjZ|MaSQ2p3eED&xMl-6-9lai za;}AB%tp>zNIQ_LEMz5+n=K^$RJ=LILT&@{vV~-yhIWD3hnM!bKs=EF?S+b>2dr z1TsF&)H&`vjNKLzJ|FMSu#j7U>}Mh67vNcY3;6~}j)h!0AMbs#kUK4Ky70;#Z& zQ!hepSV%gWcEUnd0J+UV4!tB4y1_!O1G36Oeg^Wag-pLR6k2H^uL0SytC>H$U50s| z#hC`=M+>Rmxh1xCTULcR6qu+{q6MTi90y4njuDnA z(?Wy{0&>5JWMu&vK2?VV z$QRie?ZmkeeRNtlgMv7||8l{tUHH8{^uNMI^es6d(`pf0(QFcd(AOXS`1`5cmk_&V zk?@B(1cc52LWe+1otvE4#jnp3`^H7|9SSkWiv4CM_6a)n6^lgd%whX&Z{j~8fta!1 z;>0d~YmE3Kq!n|l*cUri;#aoG>H=xS9Lwrf$4dO>I9Yuyt(aq3-R7iJyj6g#4!c>T zlsN>1E(St}K+Kf>-q8_nJ|Xs}QinMNgr?rYe?kH=b(T0f;#UHRzZzCl51GRPqZacY ziI_UKvrdLM&9zSaq8tIwNGs-8xp9YMC4QfptaiPXzC$7ASXOtk74?p3`1~^Gv%ZJv z+A6>d;IMzsd)e%AabTKQ~Jq=CICNQb!=B z&QeE5yfK^1y8mAI!yMKr0z!vCOr1Znj#)RvuSgSnwzOi7Rm%6WRSh`Z@oD^i^kF$V z6}L(&=8#P2B_I@oK+M?hb7H?n>#UVJ%&}s>pRLUPP`o9B;@WqKs2j{7AapDcIs{_I z{(z$+-sD5KDP^hm_tBl0uVX`V(L8PJCwY0x^B2>yWgtsne)+4ulmQ z%;C^6Qb!=B&ZCab30h~i)L{bW)Ep$Oi;cK!4Rp-@TAUw%^s+dUKq#{~j{{i?XFU(M`=hv0@Q}$s=z7pY zJ_Hi6bn5TL=xT8u1Cqa$Y1Q+-P-w2jc>~BIOXrIFF~(b*iU&fW7p+uudk}XIEY9zN zthYGB9}-vVp3h$aq3Z_^xnvnuu~1eX@*|K;ixYhqy9g}KGe9n}IQ0Ab+#^QVnq@Tq(`Z46Z#kmH^9E z=2&_7f@8H%TaA)d%(1LqbgWL(Rwqj<=5Vz407}Vrj*k(73uGO$&N`mgo(D_EriVGf_^_8eNAh2#LC z8t!o_fn-=nE07)*ay}3`JgZxQ(EQg!o&eI@Lf!+?)k6Lbq?d*CcwY2=p3VV4hFY9r zAQ6oWY|*#7Ln}EqcEve5hA*9bpt!oG|3zU%2XVTDOshY!)o$W+sB&&0Ry6_fagnql zj&1b{TTu$>$ld0w8J^V>(uz2?)vIhpWkAQ`{ht`;S*?{;#IdcYXBWRJOICflTzr6M zb-)XRiQeC~dY!GPEa}*==e?(SR+Z9)5TzjB9NTJ@WwraPajQJ5e@H9h*j8_`)$e3nhu#xe?pY0ZQNYBpt!O1ZEv(Y@ z$-f3Pcve%T6>)5 z@vx$UI09>v2%&Z=K46`>bOOhTz4yb+P3c@Ft%ze={gtiK*#=k9&zwKov#NMmz{Ihw z*02@zdURZP=renHR*y<6;@DOnvX!a{ryr9z*Ry&{S`o*#`iQN1h^Rt|w~H_j0mR2n zE5%>p2yBQ%2p34TgUoi2i!H<~osS`cw`qxJ_9NXtlEUS|q_|)ioZ*`+%$jg558^}4hoj&1cBTd8ziQn>mg&*}?l zMI77eb1N>}>L+PM9NX#(%W75GahQz*;$x>jiND0Lt-fR{<>9=;=OAO0)j`sVIJVVS zY(--~9bfKNb**PLL|PFCR>fl~GbR>eq{2EYTT#v2iT-OHQ>7Ji_{=##$S)6h1PGOz zhkOF0hlTWbMa)S&PJbZO!+FSPAk>$8NDC0^r#<8`r5!>Lr>`difc8<2l(H1${ z0(a&_in4Qrf3U^9IfbdTW#=egvU9XAIm*-QToFfR&LDMmP_|6@V1%R!LiwSB5hF)e z)i;ff*Ec0vD`z#wDykY|kwmPuHP%v9orpwojww2(sH8}^ke!vUT^%f=1E!tMmx%)= z-A72eKPY>Ubaha6o;-_?he^Fb*@I=qAS7c$NXCJXwjHdM2dj+9$x_*tljUJ5vvRUj zY&luNHlOMar;S3wfQ4Ixnq`8k7SX;Da8&FK>{x#nYEkWsoQt;>i-s$(JRVkB}@k*a~IBRBovJ zgZFttIV&?OQ^%q59%p5_A*A(Wd62D8CR^>jmurKy_o}w%<;mI(Uu2D-koI2Hh@AX9 z(H3wPz7)(DQPniPINnrSKYdtzLu_nYZEbx!w_CK@f*IqQ>Z|LjTJZk2ptFUI)9R|iwEf*E6HwI*VX9rIKL9gKYfh`z0HTC645qF~0bme`5G=VYwdH2_w9 zd#q+etZ90pj>rKCE|^i=HZ9gsmMgu%&?9a~DM32xs+wb!Rnr<`Zmt!~D5{^{Qq@5& zXL!b{;)icI5d(}@>JWglsU^(s~ ze&irw6rxI7i4lfY9X!ogYtmsSZ?JB3gLR`r6BCU+cQ6!XzN(Qqcd+cf5TEX}hREiZ zpPQK}y+KIW<`2nMoe@H!u>+IJ6q3UPLb6HbW~mMyA=%|3ak3jmNMnQ4;5Ed+bi8uz zf;g0aL$YP}089?J6p}t8B-1-+h#VGiR?b~0Bx-(st{RvrBrS4P9t_5`M|MF7DNl1` zI_RuQZ;sB5oGjr%CIodHvU>%FcE%-)lcFmnOezBtogiT%cPXUxWIhun;-!$tX9{_G zo{I1QXXT8FLLxQ_={V$!3L>(!=&a0pV4j8Q%rj*=h^IY}Lw+VqJqzuN9QSpF;Uyp z!l*T-6l&wmu_pDO=*%jbvnN6Yv6hy2OQdwnnBq|-r6hqIC@PtdOI>a$of{Fye4z%; zWKO0$&-AE;r4dj$v!c<`!m(pZ$5cj#6_$@EE#aJmCk2>Es60jrqSdT~TrMLs<78{w zH1~XMODq<}%V*o@(n1tXnTj!UY~`5pisA4WZct1G7E)L=K9jP~2P^9=zjbxIDS<1S z)`&h)RElIk0B^p<5N_gSoUlYoebaOkhBo_AXh;+mmT*c7h8SR}=UlFa3rhP^Ju9ds+telPie`hipps5 zs0y4OS6mq#Q9iaZS~LmB=t;WxH4n9;e0T+u##(1lY03*>TZ(fPN89HrMzMj#uNXIC zM08ZqQKiL|E?!btS?Hq0&ZXywnHq@)^h+1r&EWxGAO)Gj4DFF4NvS=ev7*wE z!p@J3!Eh`tdFaX{!a)q>4c5iU*urQ9deaHHV`B+s;Q9wWE=HR~B%8*2p)fvHort%z z0;1SQV{{Sh)}*qi_~WAW@o878I4lF(HV#)S^aQ0C#464Q3RY$Z_ilh=!vT<5hj5>}#w#A>I;2D{pD2G8~Uq zV8F=YI@8|aSz+HXhjZ0)Y$BJ%Buu?9HxYjEBt;KV1zFNtJqIg_w@-+pi!;`Qb#u+? z=wxp2Ns2FvXE-8_B|K3tY-j)-YXHGU?6(}Jf*7*;w~56r>NV?YBI7E`i^~efj4h=B z6AY|lbM3E*O>3J@QzSnFb1zkAnW#!Is&rk^XazHI0T8WkZHUi|IieP$t+_cV1GN{G zn(Aw`tu!Q=JlI?UpA63weg^CslGK@pQvi6uZ{$=)cg>%Y4L`dj!D54Do9t% zDyR}-xOKBBsR=slpmSo3%PcCd9GjKrb&u0f1RBEkzko7f%&3at(FuG(Ce@0gqsCQ|e)Qxjp1FuM zJKvfEjh!A-FHmr=A*x}(S=pTioMF3~SgaXqi_Nnl0SqijBOwTZXbxUDu~TRTuRsQ0*)F6by`f_0ljcj^P;-6utt|B3v0UZiwkS zSA|^jq+CAKBTGOAMN0GDY`h(&}O)AoP$T`J`C}zrQnWrXC(;}iUt)&%P(x6%^ zDoI(KH0hU@DauoUu&AuMVj(ErmJq8ELYHYKOD+bIxG#SxU7WeNIAa#aOM z%!))SGL2lOB5R4A5Us}Y{4|j#CSAm0WJjtzE8CoeSS7Sy^;Ht!nPX(DI6)i3sRbEW@Y0P<_ zalvVm~$~$Q)Efn++ZYlUb4Q3ByBu&;+%H(17O*JE{64iCcnBuy4eKl@y(cQuE20aqNojDUQ z>FX6DkYSf07Hc8n^UlU2&FU%cmRb zo1(gQ1qw7)wRgh6ibP`@7Tuf}^je@%8|^q~ipNRdiK2Usa*W$=)7UmdBNiOSHdi${ zaiJ}j@nv{xT~!0tQN-A9D{^m=6%jFF`G&^8swS*5^Zh*0F?h|Xi2Db%p2OOD;fLCe zqg|vIf2c%NnngSg8_h{c^ME9}GNba?S6@bCold1pZqQ^Z@VuN(1)k$E*s9)UYjRDf z)Ob)gPsv#nnva2su0lP!X^c*M7l&@-*RX|C zTf6YtQ2GMLQIjV}2|0pvlsw6F$5>kqIi^y{eRJ~F4b9`6F7y5izui>|?=-Iuc>e_( zJ35-Gu}##u3ieoR#0~{7P578xH!@2~D@KhOY1Ec1KcYuJ4D-cw8(!v8HEvM0*4NI8 zV$UfiOVo}v0W*1ZABLjAQhP&GOg+bx9>tNFH{y8M&%~LLg`-VR{0NPK^;m>xjYW)8 z6U9x;LJiThXFUEFiSQX&?#5}p%T!fe9mCpuHLmp%rX1f{!t@;&j1g0}$R-hOhKQZ`W zir~`)VxFK(?9PpBhsDv;Ct7BWiB-p^Q-wmswH!ouE^iK^Yi?_1eiAB=q2>e@38zh9 z;>iwUb)W87)1Gnc?~s?c(Tdz$u=#ogplmwS5=5+3Gh(h=W>h>_xAOM#ws@N_r^GlxcZtQlkHz;1+6MCC zfUW3CyR9)scS6-jY&c9qAYExws>j5zVID)QcG{OwAhM;JE6PkA%Qxdj$6L9~Ex%-w z^b{-O#bOpziNzlyH)hb+el5V%QpICxP32bhrhol?L1$D;!>GHGCvQ zVWKHvBu!McB%;k#xVxrKsop~+o2x#>lqy%uCCZy<+=eM+QzB4-%CR6rwqSX;QqB491E?Bi%4~2n`Gq0gQrsP zoJmkjNv;Hu(d<^SoadRTK$c=;<v1P8nxM=H=5q-YWQ@ax9853y5vEAsT`z03F%`O+;KLJKZKP;{Yv2xUxl#F+ z&`wdKB~U*><$`sSBxlhARABFEMxJAdMr*;V(U`Oc@jU?Cc^tfK53e9+rvHqF=O`9tEeX zm(B`6j`?)i+Zor}3xFk|lqOfY`C$oX;|w+?25Mk(Zx%`=)p)3-nL8M1QEF3djdD#@ zLbOA5MVzt~*Z8btof)6)psUk+*m9F71nfdf!c>XIi3<%p=!}ci z*2=0Dj8a5PD$KJRF-^_H9EAH9zQp#tYHh7ZYCh4sWEV3SH6qbtXB*=&$4Q=!#%!g- z_zJyri;eBPRFRsy*b57{%m>`?U*$3nq8sNmN-vIkKv=$;NhO#xn|P9@;^C~Zd{C<% zssP0L8ZFQ_(?fO1b*Z0DNtQZ(F~!Ao1K+?<>PdaJwON3d{@JIEu#&rco8zq;Ysm{y z6Y3Ln)RfxjqCU8(V)Gm3SGqOeq8qPsh@jD6%>WtX4P;!n$vZ5nPB27P(cPWa`sqz2 z^;K9FNz_*-F9K1eR3XSZBrZk@eHxYVQDU!sGj2T5no)Aqp!N>$jSV&8Rx+iH>yys` zr|H3?NDimp-bu}(v`B@HLu^)XoUVw?{4Y40imzf<#qfB%Mi-RcV3DkTPx$fmM%tDlS6+~n(Wd0?QQ24>rdWdKg>1UL6~uE7ExrV>>xvo>R5QC%0So*_0P&|{;?ytkK^#Z)su?k+_ zEh7b9o|ZRe8|iVrz-tsV5i4%|hwC-p3Km^BZMEQawPXr*F$|~3sq3qyn+nm^X54$~ zU|xd=&8e?B6o}46-Vnyk;nr9UY9`%jrkjw-yqW0F72coDNx_YUY5E3pGW%hH`9XVkxl+G-!vg19zsjZJUF z?Ix~VsdxR_+&4HSb->qml6^7l9>DgU+WG|UvnEfsJ?IF_Mzn`malEk^{VN7W*?A|8 z-QUOZ&xz@GdJ%-v)*a%t7g+T;dU(V2i6?_U`2WC=9TMl6K}pF&F1T9$oj6inw8 zPO)0$FDBKK=oaX$wmTcal5>-lW}roC1sQCbvfXQ^<&}+l~x+5 zDqBzT;@RJd3hp#JTD{GR@D!G<3wci#kIj~2yoT4Y2>If6M92keMZsM3w%bB7W(Sqk zubgsKbqqVIs5UuiFXQ+x@2nW+o!2;ntnaOuSVy(Zr!yGud1`Ch{^8D zNebN}FrMOdcC7}}oL)*rNF|W0s3j-0;#Fi4q#HL$AG}w@G6cX49BY`9w8-VzLNv!t zidM!YqjEQ%%JaCmBv*_(CUzT9G>$EJNKq7(eCNIu5v-e4b`)HV)oPutCr+^i(vp>* zpPX7jI#w!4NlVnRpzc~NyK(;%bURcN^vzI(bW*6MI5jDMY{3QOx8glf^kffp;l8JP ztUefqR4)4Q4?Px%ZCj`}a?2c6Gw7N^?I*NEXbx|w;Q#h@BJ~*b^j=x4fnMYx--E$f zfv3z+ot%?$8_~$BcAky96f_`=R>1?rI3b8PbW>b@b)&0ts$i;?$!cW^_Ni6WRD`JR z2KF$W8Yk_2Qn1AQw!`f0q=I*BEN8qOMnGjA+ze9C=9WRbJe(TG+d68|W}?`;h8M@t z5|g>Jg@Vc4G) zE5q|v4Y8ISV6i$pN<#n1z-v1L-Y94@GQ~Qr>@%Zyqs~ltSc|6y@J>1?Sm!e`efm!I z_Fh2aizdZ4pI~g3ceDds*;oz7-Hm+#i=751vCiF&6yM^Y`-e{SQ?jw~v zWdFDqaSCC}==uvL`No~pvmoX7d^lc zuN~wA0YMER=uHi7et56RP;HalcRE8Iqo!rqJz^?vZ*Zbd!N{MRriqyM`rc*GVI)Bo z{unxY7lIQ(Ck8K`AryQf3YY z(-_9x-NN4X1+^Yx86+E@ZL^IV+g)2OOvBCOBdBd_J;~~1^QNfyJ#j}i+k=VTe}k&7 zvjy0r^Wv2E-^otQS;nK9qG1?0o_JofME-%k8vqBr%nOQPdO)MNv~I5JgR)FcdX~f>6{H3PDj* zC;&zEXTEc7D@%$VEJd{s9BZggOMchKSilROmv4kIdCiXl1XPAika4>1O@GF~b!d~d z9Iv9KLAQC4nR27PHD3G|_NF^&|Ihp2&$CV6Egzg1Du9jMc<=XV3~eI&uWZA2()3?* zh4aKWtN!mfL*2hIH{)G?Tl`@KC-Z-mXo52K*NKP*LMzkc1~lG2)yd8_wL7oFCp?0# z-SsxNEf|ZxeQxgKA5KAUreIK!Zmwj&glBUl113hBD;Y3>+FZ$iiPq*y2298{S2AGY zwz-lt!Si*vn=6^Wnh<{4dCU9xD>Nef z-1L_BlbVq+kp9;m=5tc^-}1yiAa9X}3#3`S?>der2n0I6Le?zf5`iQ;q`yW`+!0Gf5>~9Dj3uA-`uMdoF4JF=3!93_nY%E zpm+Pt`4}*H|IPUr&{O^9d<^K1esewsT%i2sdek7ZIE2&byC&Ausv$1bN%4muwqE-ANjf_D7S@P>fA9S_$ zE5{fxZ~2vDq*;hjpj-CUQ%>93qVoQJb8}xj<#@Z9f#%;OJP#pOoa!VI?svw2;C#X!PR}j#T znRM_L1A}6{rT`W{O#1)p?SOeGh&IayqZn6dGvvSZJOOCOCB3`H*JGdf(0c66%_;p z*UQz4)r;5i5Q?G}L@#2w76dG`Xu%@oT5kW}b7p?O{r!IXNSaiy_y6(NZsz>X zoH;Xd=FFMrZ)Q}xo0f+$8Hx7O95m_Y>M8AD+OVc*lYOfmFOQ_%+$0~X8$wvVt~Q(t zp`|t%g(*!I0>h`miE3#6+S^Q;j;Z?mbu@-?G840e-jg=EO#DdJAR2@^)~{p@p~rP= zRzm;x7?NQ4*4C8yaevpEAnb{7G9_s&AIQc<*-Y0mkL^3m<8^zJr5yfOQec!ACty6^ zv|7t>B8-d)YWiRQHddLZ|ILIL1tMpUuS22f#%xUR zn>lN}nK(OR;{LZj*s!TtlL&nQ0Q_Pc+a8}uxO;U6`TsRVgEcNbdq z$ta8C9FH+Of0Ipr*1Y_!A~9xUyj$h0X`KKcV{-ns+rg}f{+q{U%-V6?9A?eQ@n&vJ z_yjj~S(7?(cE-g04YpNT6a2S{!k7s;G@R(hEq#1Ow}+0OnK5C}abDzTX`sf>#+aCi zZDz8T>V&x&lQ!P{Ox8qAfR8abiBrkRHwqow!a!;s$FfK;Di>o$QZE>!W;5!hC{<66 zGjC(E6XmbXSts2Q6`w6Vo|}rSx^3~RY5R&x`BS#~SM z%P^4?g`af0QasFY*ji+j-tl2+65Xhql~m12xm5{iG%-wA+8N_crE*tuv!|)WU*)Q; z_u$6)!quLpCU;{c?wqa=<&}*MEq-@n1Fjrzb+_Z+L+ zqN#P&*EW0L-LNvjyP;9-BQS?*XsxgJH&)bn+$~my>{aP%aV7O|w>C9-8j=TU@T^Vl z;cN1&wsP}$eJ$&frmezN>G!#sTwYv!+hh&a+)|5_Q&tnjTJCo{{f>$%XImn5Rz@TMT;W@9K~%}%4!UB9xizP73%S-AE{ zx4&Z$cMIV@Yjb>c5JL?vJ*x603D+J=78Od!RZ;0}tW1_f1nFtFCeG_@bXPP~RMjR6 z!RZPlDIuTJ*HBeaS6f@{tia8^0epE?Uc4c^r97{)p*+uBi(gfMObt1C?z-|N@M%oy zQ)0@r$K$N@R99D2);c{<+5#-ib(a@-2g{4AL(l+sI1nr^Xzy+B3-yEs$_r|$4JGPv zRza658$DiUsIRstg4k!|A?{PZR zqrDeyEM-jmeZvyN(;mkMwV)>YA`3t5T_e`Q7dc8d8vQi<;*E6U3 zE6kmaJi0G5)ZP=i3Rk|7I7(c&gU*$<_mMt~u^W<-($XJENvAp{sr}*sPmGZf_gD2DdOFklq9BpO-d?b2PY+w(YmH2GMU+wR91VNk}z&~Q;}R!xWrLn zk3ab(g+;~1j^ZVyaU4PU4o67|2#XglE-qxR^|tzq)uPJX+y1ZL72@g)!Ox-qrk!G& zg7Qs>zW}&yy7s1ATaH-7l|HXo^SP--h^tN#BCA7Uw!m?UoC-w;U-_(u^GK(9Q4Z5Z zsFxVW@17~dtS%wmxLV?J;W&lUxhRGnQeJPLM!6s9zIm$-syBzq3K=Y=e%hc#B`M4YLPPtx)uYUprcuvGGS-fWgpYcf{ z=HN$<&d(C>Eclgy#;54OUZ&3y?+d_R3YtYX0Kh~1;_=4I?H=IkLG!kvn}YXb@@qjv zg~LL8@ECY9?fkT)GV5O;q=iNG5buH}>oXFg$D5=)@<4M~(WT?J;ASCK z;73n7er=#}d{)w>vN;?`x0orrRY-edl77&16f}K`E)_q@?@gcy+%`JD zFM#GjMVE>n)!$v9x%2kX`TZO;uPVA!{3yTTi_mHO=t(EPNne7^$B&*={3v}zpvk_2 z$TWFbm{or4VwNhkIwI2&^)5(Qt_kwz5tpBzA`$$ zmq7DJMVE>n<#*a$LhQkho^<7L(%nML#gCp;{7C%r0aeF-#&6kR%gj&GuVJTyALKG5t^bm{m_{ud!~zBM|(3eeoC=+g0f5j3y;YkGdU z@SgRsq|yE+liyx=UI4l&|0bzYmB%u8F9FSfqD!TJR34uP&0XJ?{HVXd`V!q@>hR_O z|GJ`)l=wTzAr>)N-WCnF5Wst&JNG*hLwf4WaX77XdB7Jd8cCU&ZrvE^wkD(75RGd5 z$*nZLD0oOXb}q8??}_f71b*n>Tj*wj?)3yZu%Meq5M7ux)Z)DF}ZM@!r{bF>=IhAz&uWEv)9$)t|^=A zM_7MzOJ!}NzqYy2zoxd*<8StP+_hD;o~GvIj=4#Kc$?jRtamKWU*bsWug%B%D?Jsh z)&6?VYES+0f+U=p2Kr*5-e7%bL!>=2xZGPA@K+A@wfBZPDuWvaIuWAMQ{`%{Z>g`X zD4W|G-PF+^i3KcZZ}V#8q0)kFtgmdq3PbZ;J4x*w{62wSjmRKj2v1oX&AGOD2kn?~ zwbO)an>OFthUwNucay&|*c(=G8+UZuXyOzj!bRZ?SBNsPEH}eWefm?t@4J@^-Svh# zBH?IwW6VCk=|X#BKXMql3bT`lrMDlmwGq(2hhH9k+H(?W?o7O7E5v$K(Gvk{Y2OEU zg{bDVD-uCrh$b8EjTdX!jF@&bSXo(Rs3TTZ*3ljf`orB~jyO4o;z;rgoh)XEsksM^ z9zFWq0wH2up(rCLIoDq(1m^kz;#5#f17Zi#rsj&VwjrhgeHZ~_@Y*7B@ODJKVJRXO zM6gUf+1~?AA%1v>@Q@ zh!k0pM-}3}@f6}|hC=Kc=*6XI{ax(_|5C z3SSKwQr>Ieo&~oSF0rkH3ptCGaBqR@g-ZjH2Dl_AAKZ7~UW!7k5L0qVAtsCJU|%p2 z>R645q;O=JLHR4f;U4}3-@af)Sy^{waAW&GPfXG^W6o6gQ}9U1G1UkCE9}W5aHWXA zkjUl^tl0&sU{{i}aHe2kP9t_&tw@#2JaG5|Dqx0a@%i1Z`uYl&d!^skRNL58i}l%t z#wM?;UYw_>GLuu)Hmt@HbS0CK*oRi=`xPKsZ~K%0u5*)5l$eC+{oI{eoxprMQ} zyg3+YjRqqSQ>YhJieybfoFt4v$yS46O{gc((H;pz#R8E13Rb4Pnm5N0j8zz6!Gq0YWw!0xBrcqK*2^K#LcVrtyDk<9&kMLZeF+ErmmR;Z^v z5{eC0^@PI_ae<-~d78Z95cS|G` zMBba*`+^Mvz3y;dMKIWKb zB{HC8I596Vc*61=Y+pj`YK2ampBO&b;+;qmKds*-i$7sqFIiw(+DjHVVaZRNW=ec~ z)ek)%qvYZqX2F@&-LxWTQFoJ{nTc6|#sx!*0F7ShSQwWREi8;)W)|kGm=+r?Suy#U znVe-3r*$n7jhs=aR&O&abIHV4D=j4x_b>-1oBMgR$dh1;n`rpjT-(^-_qyuntpFo| z^VUgno!`U zTT!|PVqx^Y40O~680Z?pkzQXU919yr>}C=lj@6?+fPsRtW?<4h7>xyclhAzUJUv0^ zd29$qEHsvwsv^NFEfgex;`4PbRiQ1xfE+6jp)q45fHJ+i(Cr@B5KJm^qU()|oaj=g zKVE#zUG4qBmUeVnEOId9v4VBok^^e^7RGbXib*Qeh4e&nbmB#=?=i$i9q0!k(OhHS zuf@~cObw|Y-B&+0#lh$_i;EHGuU2VNGt`al7R>R`jBcE5P!1TV6KJlw7*n9ov;dwy zjJrTfwkBDJG3_{kdb5|nKnbB4jAkE<5SmPhpQPg}ni^Mn8eo{EN2cHzMQr-h0@66Co)lk=r9-QW5n)};v3~6UAP9jakiALyKtSW_h^kf=UtY}RdWujrFZw59Tpt6egvz2CHgpa(k$1wfJ3bH!O)C(>$2MltHtN3O0IBlumPF6~10@ z`7l(Gk~S48P4_hS;-nf(pa(SD%(E3#C|SnxCsJ=P5E|$;(NZ7d!F4ogYA7;aOA~aL z?O&D0)zaGJ@wcq=!3xq$i+w(+eTCbNl?qo&t=sRer{NbZQLuF&{|xqbRl0mFp2}nd zlOzMIZLF+EjgNE4RWVFvf-2Wa4-0P;9jon&r5*Tcnr$=Yl1!RQ&FNOlDP0ncnm41` zM^iqNhmhNHgK&}rbEz5HD(v9r@$oL2-{!{M_lcnG(5h^w+M@++D$R(*J8-)<3k_`aWBQM(g1tua?VVdfJ<8AK@b;zCv zn{g@_lMy5$(E8eA_)eow=_ER{<)deosyfy2#UND1Ur@w!dr&je(k)&hP6of-_#L_`8T!m2NnKM6nn3g5SCHb*^X7TXw1Gqx+^%z4Rf#z;BKS=PQCnG z3aeq+xu+uEral4I*s^nr(RtFRpYiPvR-m$Tsn3k2ucQcCl%4CpB#pr0!!U6YXa^87 z62*dmKZZV;P5D@Sic!FLimMPl zYy9EM%2YZi=b2;VGZ4jcTRaIB2znHKU(#+^iS8dWxh}~|5NuzvU{d9;kApb zw5ZWoM8fBKSl376qR-`{@z3UwO}e3q96`(g!lrwNOW{)6k%%@>d9l`Y1vNDPG*LYl*aO0r;R65iY@!J`Q!e8Br9>yYsd^%n0 zY+mQ&vU+W`Rl}0ZF|x2e#8P_Nrno>h#T&4E&Mkfce>lsnB&}`vf{|Xd1Q99+W>_5BT@7e@x?)Q?zs>%eZGfz0jM>q6CDfg zmtW;^mr|Sok11zb6`ZFmxoFNrVPktzQ|(&TrTgO9({>iI&MiVe(C3zQhI%-cV243^ zaphy;I-AFAhRTvKCgRcd*&w6^Tt6=zy4)?bt7*L)3kJ=e226UK4*xeGPE-E`eTJ$= zR*{oQVMtxY7eH8@uEjT-1Vc4Xxw@_Q3C16E1?$7|(ezB_n})55q6M# zITZ`)dt;$3JNHf~zabKBU=naeBJG2%u~1Kx4ak3+bCIq?$z7?v=#CoLrlYrxK)C8X zRA35EQgcN*qnz*iVb%@2^(4!EGb}oqyfl!sDABNyp(=kVnmL0%7ak8|Xv}Z$z<3R7 z3elDbHZq{^Qx$BF4Mc*>hU|C-#uo-^x0?jU+R+4iVDM=k=;%Ni!jXD>VjoorJqH}h z=b7kKUgYdN<|eawHqFQ=C`a^INWe9lw7r5=bq}=NKt*$|Yp}}!T0oJUW!5s8Cz*&S ztKo|<#D?Jd=z~q09nHMKlZt{M{rYvBid=kPOw~d2>-UUpWwp zb_D}mlw?V0ENaNKUjB*&mCK;HLQ7TmqUGMgX5_^*dTdBYzBwV308MAO2oIfZN=Qpn zdtZRX_KI1JC?MBD5)AE9F{EB!m1FJwcZbQ7cBpUouw|Sm~rWZ~?;wxP^G@}U% zqSTyImw{9uWn)VMqs|YtE4NeE&^VFfX;@v06Ak>U3o+%NoqKO;|FW`W1ASOm3I;BY zp~H6ZzzS@0%+7uASVCBNL|0%>Zg%d1bo~!Q@uspMy4;U}b_F+*r*coSsimd10^5-J zXw3NZ6OTVeO3@F;j_IDB)uG^K?!sSVLY0-d!#&tf=0rwLN|zC}c%>)S^1gzj`-)!b zbjA!1EiOk(!vhJ{6Pgo3g_DB~bZV$c+nn5*WNDI2*>+XF3J zj4jIOfnvV81#MPRwMV<7XTbokz+`GR?_j{jxt?}3c{pFGCJ@2IC~bhn{#IS*X0<{H|DMh5anh{s(0w1rAe8RZ9c zPVMQ?ML=Uc6d)C7-UXPf#HI>tqhRmn@ZQw8hQ^FEm-$OrIm1wr`?&pJ%7aBRgS3Oz zSgW=Dv#dYaIjHk$FeK*?=OOt#hv;f*a;+0Ka0tp6IXkUXDWZPAsakNSkcSo22Q%ju zYOsR4ia)hmy$m(d(4Lby;-W_;I3Z1*DlVSt(KNKUfK}xF)6|fX#WfAt?+Ju9VT!aC zc_~dOV{>v1X-Z{Lu-!tmfz_|mH2?-a@d1KfH`4m9;9{qWz={qvAXWe2Xanl}Le4#; zEGils>r1(P{Jc`t=31|hR*sa$vSm0M@-%3U9N*H63{?%YRICPs%805on@FoR#EoPD zr+md|Wt9%r7!8l?EnrsI6P<6;J z;mXm0KQH0Mj>6?68?Z&bU9mZlWy6WDXzCnNO@ z?$dCpxuK%^O~vBxQC0I&Al9PvT2i$v$)eS(Q##KTEC><|RG_ec3vEt<5ikfMb)jii zNo}dCVv$q7tOheH_|l6tiq>SvdLyb!kg1mul{tB-cZ;zO*Tq$^24zm)T+tk2fv%`n zX5yBEvZU=vfihClLn}!%aRZaVwk|<8%_$j6reW)}W|yZhxn^=BkgN%yl>R(k)~J7^ zcQgn{8FQlEQKNNclQoFkRlx?uiAex6zr=Q$#S zS(_OdL{b}HBGyldj0BK1$sbt z)EJ{_B^FJ{GVD@)yQEEJyhFEwi3`whr8FZ(VrmM>cyYIOHO@C}Y~ogSh!k@S)r9hk z%E|2ubeb|lt*F+BlIG%7$iWBMi)oNXOGV>aCZ(|y&+Ds!1@(;ms{JKaP6Vy0Z*)=9 z)rI%hRePRvq-W4Fs|DAaccsqpO-6zn7GJJEK@!in7_bqsDdt}k%{QM2ySoC`#oQ!{V_U8ASzV^~v z2d`hhY|R_=iSstb-?inWPZg9k7VdazcJmX@RHHrl8RMtkcE($~20pg$K+#p1ldoP{ zC&W33ASYvT+q@_4x^JHEi%S=LWA#_xzY-OZ@l_2SXZ(Kcp@k>*&)IuT@nI}S>}32~ zcSW~9^@~$JJYutb{h0X1d(x9{(sw!Hf{ zfBbFNwv|7-sN@+TKF9cHzy6Zvi8|-~UEeDC>~lX^y-$c=Gk$vCGgqAXy{E)IZ~yVk z@1A#Evk+%w68{goE_vt2{(rk=-P;G3-1Yle#W-Ds@gtqjpMUO#HIH8Y8fkm=GEN#czel{*j9$J%*mMl;I+OprcSwL@RBz^ z`j?!!Q-tVdeA8!doHG3vFTS)lZ|NTw{o+*M{)O>}zjW~%4}AQKM=MLd^qK1#vyrd; zjQ?QG4<3B~gUIVUcHcC=b^EPIe{mM^Kj_}_2bUzdSec-pf7sXrA%E+x*&T z@7%em=AhF{=Og$on(_C!@}E8N=&ycv(=8446+5qb4&VGU{>Rr;?7igG=TBUE;*Gx= zzGLXuLOjR#zr1~C;rHJB_m1!7Z!hi5KlSrMoR&@e+voMa@%0=2@~xNeesSUHZ=KPE zu?^!}uldM}56wH}z&#gb9oToyZ|_4nGX5u9vpTcxx&5tmUwrtw2Os`92GDOa{)WLB zw)ypk8&4X1YH{Xc?Vw+DBJpo|I(*jjr5|1Km%6PFzWIfp zJ~SV@7Hq`-ic=o^)z|MRKIi;{E#Fvt_qT4sX>E*uUZrk5pau#oZ6TbbZ#DPyP2_Ke_NjA!}DKC6>@DHKqPW#;2*FS=}{ks@nU-;(_fAh_+o%6!)U6=oS?T?WD-!lH}+X7Eq zduY{lA1!#DU|F!*d=i?MG#`{A>dHe1f?%p|j z`I5i`H};|4G5*3oo%@w%?tgsMGrui-tL@)kxK@ZiGyZ?({o%fq3lH9N(X0RY=jf%s zYY`%U2JwIFp1(f1VyoxiTXnB5dHENAMLMryyyv%zTsw;qa8A{6&to0c@o}YUp$LK7gElq?+M;K>9^i7CEq`f$@s&|42?g0r~I^G6CdF- zel|2x?ogZQ$Ik^VvDDOw*LG^+kdTQmQjKNjKqxR?72zV5yVNI80SEN&p2siRAS!Xe z@ev402?yVIj;DFi4Whq;whE3vJ7NCvXQEs>I;eogp9<1?nv%z5A??_iI6?7pXH@G# zZiclCg^wpkX6Q$Yf)Dk_m1WiQ#$A(G!J7yNnq3-4_)XZN5{$Ir`zh>Kp_k(+9ptKO zg8Y=dK%W=`lkj-@8d4wIP*vs7W}Iyb0@FBb93qzW6GOBKio&YOYJfG){Iv7Y7vso| z-bQakKPrUXh~whHMqJt8@iQO;d_1IjT~Zs?OBh6p9YC z_t>Mc0oW#cei25{n>zH7^(O2E-8j(^Dh8Eu^emH<*W$3}1vm8Dm%|D5+v&Z?ev$oh zMgUI;`4W{crSM&D$IOIy2R}^l;IruZ+;e<5VHofN%;QcG`xG=)98i!=d@a31L|d*PeC>@2&kHITNPvz zw*l&7+#L$CiN^ueFzzV@*~E*0!i?LaAe;CrpjyTqRgg`bin+Od#+|Mpn^*>@j&V)} z*+dJVD;c*|K}a8$R=LKykI@*$W-x)f^4D+^L}2& z(GnFwHgN@@2FCR%$R=(C)X2C`E666c1M)GBPO>G)CiVbY#kjo+vWcUBFg=cVX?2Gn zn>ZH`mPCL%PeC@}0fgyJ;A$0Q6CpsYjO$g9O^g7-iYVwlqad63E+DMi0r!0cA-{ky z%?{iv3bKh4P8MPv<4#nNOe1=(=ED#dZ?snxgNQTpb-dslw@x)Yb&6{>5&Qph;ZP?m=)FX|6$5PyF6 zoghx=Z4;YCSVTlOpk6U3?4nbIL=0{R@BtA7z8ya8q7V2U{04yO0+k>B9SG@Xs$RUA z@on(!0CkMRwIM_hJc0-j0)7*q4){^ri@=Yb5d0~|Er@*uP6@VS)3zNuSI);@qu(;T zM}fHtw0^`8g^O#(m#|TpKq6M%j~=@iY}34FtK_K&w;z;SjAL~tHZ47}x0%ytNg zM1(jRa2AiIKK5`Q1Q?W+BTgcGk>I9Kcpy3&9mj=me7!Yz|1IlHyoT6U*d0m-cufF1 zVyN0sbG&5SG7-!uK|u!8_+a)tWHKEY66 zA+)30j@3+ic%yv->2_4vCwy@gfa-L_aQbLZ5PBbBV}iU^M{u4CmGkCE82OEc0znE* ztC^U(2=<>#0>ShDW4lEMn%M*4V3f=}*DhL0j#B<(UF|RzbQ%SoWH$K!M|p5LAGdaE z^fv0Ba+UX{tL;9ftv{*z1OJq(Y5e+6ef`_a3;Z4BDwo+Xf2c3r>abkRU>nRGTG798 zW3N0Q67#S)Od3=3u`vAmaccC%w0i_F_Sgk9xR1|)mTwzz-m`|svD^53y@#)XVH`T` z9XOl$VnZVM-M|cMR{cR0InGqZCOXM&K%TLzu@-Wh!Nu5)6YL?Is!j~8tgXh^DSo+M zpYRiX%zV8#WZfDUe+8k%PbW6(ksD4i<$#8F4y5tMy&~2ybk~S6485De)Vgs|8-EgQ zNDpunNaIU1GIcr)UrAyK$2dbcez$~cu5sZUPj_Q84j877jOg$yEuMzzCYLvrALPMz z8?-jKb$W$!yP7>3Zf%XHwz>uf%{DeP<6}u2s)PwngS?0bMasv(Qkh!(=vYxF+M zrcz%%OSAx@dFd=cC&Sacbe3oXM6=OZVm%-qLjgdm80rGl#83|)nq|%s{eWn08OQ1Z zq8a5Zu>}y#BWH=L0nzMnmKXv=bH-VM?o*+e;w*6kAetY}5;p;&S>Y^kGa#A^&JwL7 z2euuUIqW^~wC4yA;%U!ea`vA%;yJu+XU4GS@Q62?7OBJ%&*2%LdKAEj_wXtWIqW$! z(t4eM!ZKJdu8$uNHUMTDn_ou{Iw9no+JCO9Pu7PSdDo1_0Pvn zAMqS{Z13dn6Y+DejNFpVw5><>dqzBmd~w=c*FOWstw$bvb@C3P?cS9+atjuEz!=1{ z4P3gPLzI}b=P0*rJ#utla^cSXXTP}s1%%fVVkbWBIY_0ye+mGi8}S?*dHu4-v&FN| zvOH!Fd-rKM+;-TubxOg`H+O(e2}g;FWORgObVMUw;yJRl8M)WxW5@t9J8&LC03`)# z@I&SXkg7wJ7)sS4O5RB8;mp=U!>xz+-}dJj3%DTuJR{e0fF%vg&Ogt{@gDf|jLUZc zAPp2VE_rNILgsGNGKW3gVlEiZq-*fRJcjB3&0%OGAe#2i!Zf@PXEN?{I_|50&SD(C zKv8tR(IN7YoM~ZALbOCA;|Ksc1HYNP*^$g04wFMwcV?-+F`Knr{@H?okj04_oTvv9TmlEKi$fMx-jNjE5p6Bt?xXf{J6 zVr#K(0}f*3VuZuRdOqHWI~D7l_|=LNw8HcIgI&0(kUsIwD=&BWOh<~vkDqetpV2v; zt6UzZtD@DB?{r=YX&YD#^wEy}jp*~>qu%kb%X4rVA3+*BEUHKOIv>9Xe$KP-ho1~R zU1epd(w^D}pSPWyL&DM?5~zF}&{LZz<10O(rmV9EQE-nhR60xdZ<5YF2?U)J7BQ%- zQ}W=ylx`=QH?lKD3XhL3hDrgWhd4xrr={6;1`& z#3upeGj2pdHgN?{t^VW#$OqBoq}xQPUSmQ+^rz2t+KYh2@YbUB`^C^71KuQ z4j1lXo!&uM_M&Qb8p6!PDMLamWQdAlF`z7*d@97nj2m-hV*Y5_3>D!CQq)3b7_SBk zfSb>(lc_wu>0yU7##>K_%T(UvK@e0l zwO*1HmD)%R(+ZGh;hTAbHgcorJ)+re*xM&gg1^+|WGY2fK5h&W8^Sjrno}gkl4|0$VAVIPLBxuZyohN(S-bpbRStK$L zBdd-yT`?0amrqsO>}{`PP}lNccg2yJ+jdT-W^mh^leLx*-H(IY_D$Y@F3>UrTE$DQx*5OSapgJos$W*NUVaE*$1p#L z9h02^)<} z4kV3?78xjds3Sw~^wSK7+fp1_80sSZC0-nwr1?At`q~z2Yuc#}(h3mM#D^M{lT_C> z6C{2d;zjQy-2wdk{wTjw66Jdzzt6<`jWE%E|3KsF3gT9Zo1X6j!`pquWlvC|DXJ{K{k@XQfLih?fMzC@DN!3Ak|}j!G?`Mv z(I~2NjWiU7Xs9=FqwbTjJ}`(W)ldf(HE|6vb}d|m`-L`Ddk3xlp8_ViwP=;qpp?2q4%9sZUvx_ za-%(}StzE7$Ss1<4Qb@|sxJ66a>E=Y&Q!sDQaD#~Y+~an0XyQ>9*TxWBgm32x6_r} z&IVG-jUXvEf~4Fej^rkBspLjua49$1H9S$djizsOQl@;;%T3-|=fOp$V-s95eH*gq z+XYH)r|5DcNXm^MDL08Dxk+3qx#2R9Qk8%8np8_>nm3CP`c>*+GMq>^#RocGrU2WocwbXOhV$jn1XH3w&%+l+$_h zwW#1y-6b8wxDp*x`9N!i$o7&;Z3Z>cvJMj@Khfr;v3 zKe*MWk>{;rk!Sn{>@kUNEcF)y2$tE&y37cYG9$>wogay#mP6uF>0psAGx{1~qB7eA zZcS-q_8KVzKWTK(dcpOWBq#OGuDFv!QCZszt^V3|*%2gVN06+)5=Zq{;!?@35EN41 zXgYtQvKy_<`2AR9XS!s3Y=TRsb5^-&^^{KIlJ%4zDK~;-n;~)3W=LErxt*)atp;Hy zDz{#6t4*VG^c{(O(&$`6BcEyg zk{L}KNL{0^t|lt8(fW0t8W+ilFqbb@rqQ*}j#+MWkM-DuHWry-R-W60lXRI8BxOdB)HR7CU6Z&} zGD8nh>015YL1uJtxO~#pPtvsp&)P96+E`=;&0v}3=rSWn%8Vc>Gl?UaNn9$K(YlDN zpS8z9W>M2UOc@cJ^c5Sr!dCQpPhAYfgk4V1J~23y6gy&vLi_L*(8qoY!a7B zcC>^g_04x2WETOqbn_#(jY)Pb=<%}L#yYLU^CP2;u`n9qF&4Qr#+s?ik02>Of@FP_ zII6D_mr8z%b@^R(9OO6J80+o8$c5V%B4yyLkO)XbLRpn zZ5%;TW(3LlDsfa_B@Qy%cA!XZ&DpkPvY7GdFT)QTp0?o|^jLj-^H}TQZI5SQ>k@C_ zIlMG`tE0R1FjgIoWcsqV9q1Z)b~w1ZX&=I3TiCM*KeB2Xk)AwKGi{_|^3mPwL$x~uWT zEy3Qgk&0=yU!$Ha61>*36&VeSF1ufJz!llg&a(#qm_>)ic(u8~w1yT=9 z^qvTqGV>08Z{z2;OrBF1qM;28&&DUu$Fu5&EidhKUh>H~#zcU(_F&>y+xVm}sh!H7 z#!HHNIOj-k8YbKiW3x#NuOZBiP}{d8w^MqG+%@Q>;r(UxeujFdkrh4j@vfGENuh6N zr2Iqqy&L6B!o5l1-I-#DWKap0masi=DIHaCX}?=F+-|rvaK8Yz7Vh0}>)?I^?n=1d zfs11^hRDb^z}*kG5iTuo;1G?W|AE^C_hQ7~4435H3YXMmK44jq2$B_vARJbqe5VRh zEQuqIlI{Z?cLJy-j;4bo-Kje6bRFl=aYZ_gD`xhv_wcr@*+;RM&ASDc)?{y;0fe|3 zn*xu3miHDOfh%rIx20|g2&g)7{ef#$!OsHcv8W)0A@S3U!OnP_U_8s4P7uUxic!DX z1nv(7SkbuVBAEHnwgr#^ji4ZTQ^%=lNryDbz{Q{@4g(iTlLM1*G!K`j@TfwpCQzv% zO6wuGRD2{}S$qV^;v)!Wc_?3;<)I*+pQF7PBqbsMS->SXCzryP%F$Ssw7Y}e$(#)1x7<>e6ozP8@OvtGS#}0-x_Y#|r@yP6%TQyF z5Qax9L)t5N3}xsvu%NV185;MUJ(eN2N|f@GNz zWE0OS->G7^g2q^;FCuun97ikDdHI?lspKU%k(#J zsZ3vjOJz!%hGm%&B+HZ_S*8+4Wh!wni=)@mpBz(}p8Jnkrcb9U)1EL+tNZ(x=`NHR zmFY8ZDR~eym+4R8Qkgyrm&)`^y-W#`WlE4NQ;DN8mAEmL>2t?argQ%>%XC+|G992} z%m4mm`U{j9mFaG{lspKU%k+7;RHna#OJzzQ707x@kStSzWSL4Fm8rz3GNrcAIR}OD z1hpsBN6N!bdnh_%J44+PN($lL!LJX$C6=a)!VnE@t(+O}85^$ZD=U+qsf|&T*It-* ze<{Vc7uhs+InY}iqBJamOX;{oiHN>>kRl>TiijXN^pd#kpqDsVu z@y6)rsh}0Kb01Qy$;M8dk;$KxicN#R^&rl|4Kdh~&d@wS)Vs`L`B`PX489~+P2N^n z-vU2tw}HY?KB<#(Y6@8!I&EY7xI&k=woyF>?tCZ*4<63N8$AuD$iV`Q6iOK*|4^E! zJSZOv6@G~-4~TDwI$2BMQks{ka+wEuSuO<0av@0W3zWE>pqIE86ePQc5{HuJ9a)8N zsgI8C&ry(xxhH&{`jjaj@}rdI1IXghO({bZE@dEiQ0M4)(Twwmh4_b^IK461r{_s} z|MTP8a3Ka1bOhKM{@k`3ke81DtH!`FChYiZB=r$sHKH0L;zrOk!L7t$3i1drBVHc8 z6a}vc_IuHBUu}Te;r3x?U{oFaWjx+v8Di}LFY=F}n)zh`l&33)WAV%8lBLq7(Owo0 zxM(v)mLT&lV921_mtWeGbVn!L{vd4OnYHA~C~L<{3t ztoO9VC5yj7qRFo;o?)QvLRnl}Xvm$#A86Paaw05E_+$xZ2d=hT6bgLz@)I&hhcktf z&M9ByaC{cEMPe2O=O|r|(*gX?D2K0{em)A*rUUPLx@nQ#!?zlE(3WX`U*@7u4r6C>j zQ8Xn>x{w7UX33I=&6rY$!-*^yXiD>!++e{JIA)^>Fwzv3uD4>A95iBz3JVJyMF?UH zRlK;yiYa~3f+=;_VE~MwO7kB!V!*k$^pFKpQZzfu9BN6S!-^@|V#O5SWW<2;V#mWq zOiA$)N8w&8rl=ncgPuYPRkGcJDJ|G-#DGtJ$vz_np-M})WE=Pp&Ef})7|<*!I$*{W zIULh4Ghv9m$Wh|3VDbyr8ZqEpRM2I`6h3Ul6g_Fg6crZbm%d=Z6cimWV!*kiV7|?e z9>Ns%TQNn~88O96N(&0-vS3Oahb@@J1y1bgG=^GS*kYwA zy1_zITDsGUS>l^v;*;;lzuk%{c*qZ0TadvOuq?36C%{}j`N`}TyHR8?goYy0^>A41mTW#`F{w%(P+(^Q@Sn zQY)so#)>IvvtkzaTQQ|WR?L!HESO@)!&XfGvsO&OUMr^XkQGyugO=8q)8gWVR!m8y z6|;D)j)8iK;F0%VCM;Tf0}YxL(9mdxo*%t- z$LC~k!q~e&lL4B8_)8q=$zsUJ2Mq*hw&5?){Nd8KMiTkJXoF@C(gUN$Pqu-N?76_$ zg64euCAs|ks)PAP8ksK&otd$m{^BQw{_EVtxTwdMnQ=GbqFCvfnh+NZAZW0?kNJFJ zbITSZjf@MX3^cRw7p%nh7gn!Gj0?sMG%wI!{OCE!5SQcw!v&gq@Ry`HC-aZrPUJ(S zl$p_jh=_)s90MOIA5<357}IQ|k#RxI3~{}FaK@F1aY11~Q)Gzil!Ulw^lOgGNF(DS z$z*0Y@Ry!{tzNPtF|O0#W7eNphPVPD3P~E6nZc<7H2uJ*UrOXd12!pVO%G=$@Ht}) zd{}y1UK*b>68O+aV6^nmfZUv(ISG7d+r?;n&S9Dt@mEXF*$I5?W8iZx(;P7Hu_y4M z_HeZH%ww9}20n8W_~ea&&v{H^%vW9lAFAo2rRM^sq57rC=lldd^T)vFLZ&h1YkmTs z1!LfI5z`pcvmk-b!ZGllxEp7Gbl!SetOoY8xr|&3z#t(e6)NmOW=d% z3Vf)COD%oJ&;X_-(P0qA_MIkRGBapaMB}p}fsd1EG(KPb&7Gf2sR24==yY!)pIW9NIcx2Ejn1)?5|3w=uya1ptx*`EV{S{pe9eTRn@MqxsAQyv z+HRsD&)+Ky&2mZb1BICljO@dlqPjA69kWzn&ek#O6sAbW3@FTe9W$&j4jprk!YtG= z-&2?cI%c=REYdM=C`^HlIifIgbqw7gPtP13bFspd=$I;nAv&4q)jCF#Mppvnsszlf z3PW?6lFyG6W`&MwIwZfbMjLhPCg*jixT%|C1I_5ToDb+FG zQkW`WWD0+xFf}@cF5admTgRM3W&+PiI>xIor|6h#6lSW9*{LvPI_3nW;yF5oF59N( z1RXOB49&5|G0$riL#KH=0h58D28{r0pve@AqFeOo%Q|2)Gjb>rJfHq(ARr<7D>t)g zp$PLy8nWOymH80#V}+TnV@_6shm&Po997;HqFsq!W(KwLB-;b8y#IAMPQi=lKqz9x zG=vcMDLxXj$iSx_zL^<$OogqjZ{6}W*~cct8!8mj2xBN17fUEPa-mS?(GUs`)0je` z39*EdV+W#+s!&WL7Hx<|2}@5Sewi7S3|s&F7@_PyG7Wpa3Jmp~`wLjEf*{q#feP;}`KJw#&;)dWmt zh8=(DS-CbeJs#>I6^dwN{BHq6S{Khn7U<`jF!O*}Xu`OGap)LhPMd+v%(xDJ>FIj; zS&(Tty$qq~AsTa^hN_&7&dURoPZSozSk>-4O~Pg>d+fuR`Um}xVlRO6Tu zU`Y6J%;mu3m@pp$hO{nDb1yKYt8vVez)($zW8MVDZo*6j+dLEIVqmCDm&~VPAk-79?Q6lI`aL)sKAMKcJrE0T+?bT20mtk5=y=^^ z!F@P;t`f)XCi80^#L4l!seBvwMBY@sRXC$Jr5~NyThB-K5=qiTyK#nZda)5j`V=

        FvjK24;G=+J0Kv)Dae$8lGVK$9EaBUbSYjn6u@Xy|{q05bAXd@R#CotVKZ&yUYDY?TPpD3%N68AKWL4cqNtPZ~HpxDK>){CRyoa1%fb8G&ZPi|o zSY74ri*@ZDX=0`Qo{rN$nD1;-rH!Ig87G@kJr0mk<#+m0oe1tqs>CE!VzS$!(Qb=o zs%M1Wbq%BrZ*~{1dTmdXK(@{MIf=TBQA*H;TFvf4sD^2~Y-9SXOkbg`mmBcDN^CZS znm0l0KwygvjefIeQL>(ktCX8xU^JpOs%l@RFAvR->Bzt%m_HiFfq=s-eFExO=J_~4=KFYC=aMMd5tHnQCA^JDCE6y7 z**dq+Wp^juC)p*O>~1$S%1*RmWVZo#ha(;bW%u`J*+o~ag;c-=N!QiCzI2zOLUxAu zO?*SKvi%S6P_iW^*%AYjp&gYt}_DT;n#>UeTOmi5{xx?|#94dEyoRHqd&aYW< zLA`>K6gtO>yDYFIzkqJ1+DS`IB}&;9~fEJ!a z!F!ndU2y*VDEu>rl}PS^wX7`~ z8^I-Uo0zywOe6cEZ9#g`;<>G{7;-h-1J+w^@5+kV9NUT8IYwWixQ&fk4YzNy+`idz zdx_&VF>#xixGfsFEm}OcZ^J#s>GrdDdUz^DP`9@oBVNOBnt|K*DXe)R+MjhQMU*t+ zbpPv48pI?GV(M%Wjh!u`#Y;ouV8!TuE@|vkxbF9|PA}LNWgYp7l15zFxXVd{n502W z(h!Z(5G`IBf5Sb+m5rzg6~VG`+VFzQMqf;R2>WAw@k}?NqL6}@YeGeowByR&Rwr#@ zk~T3-s1S`4Dn!eWwi%wIS5|y2|4rN-4m%x`_J;ncY_POInh;WjpFH{8C`a=YDfd$Hp- zF>#xixGfsFEm}Oci?8K>fv0~Z)RqtGcGodTV2<~>mM=v6)9U%m>05>9|JR&Eh)E*E zG%6?>M+HTTmq_t7eJ+Xo=Z8TeX?1;m5{WA#?DbH)gP0^jOcD`|5)mz4BE{GCi2CFG zBTE^X^*^$8zd(l|iixw~KzvG_be7juIuK8at?X)nx z8MCgUtZiJ`e#1$dn50ci(iV-<7A-^C+^@EmJviS$-43CZW9x?iOJg#joyZ6@!T%nx68%thqpVoKVLAn zxw9v=g*$svW4>Uy&CwUtTg1d|V&b-F+%Dd?2%i2{mNIhs|H#_DfC8BA+T|tfxbpX=lQuC)o0w{Q(OBDy7BB7MeY;%Jp83CB z+Uc%cUeb;$+yCXHO-#}zCTWXCX^R$;w(r<+-@a%!epgg(*@ou6h3naN)%tm8s!<;e zmabXZwBo`wdAfG#(I_&T$^1qRjs_!j`Hl7eR@XB=F8!d)dxWmY6@a@dYFW;A6*Em_i>s{Ospm*&rURYcA~|w zdSTJ5j_M!{vU=lDc(*z7?y}2g(76!BzM?VEW{F~Tc+mNDtJP;%tv=IgbuG9gttKW` z6BDaNBdbM=VRgI*O}1q-B2j&DK~@jhUZZY>2qWY|_eLDtBwOMjCUFpxza|>}HPK?k z5$~+!5=T_mOi&yRVIz}!xTV}$ViGkmRo|kq`W7uL>h$HG zs>OFfVS6~XK4*2DttduSFuaEq3_EOI-3$NBVXahkGCf*a1)f0_YPqgg3=T^L0`izOmF_n97dA}<& zZ;tK7`|QD{qIf^e^8N(N`{|bVn8<5+PfWZgCfn^jl#K* zk2goU6^hvvDYecO?Feh+gRl1=h8dFR*X2ZHE_B`N_<(1dsqM^9*vjt!%fdVk0AxM~ zSxdvZP#h;FjuT6G&m)y+FIg-&%^XbqfN*^87`xx696zFPj+a`Ff5dXU+;W^Xpg2xU z9497@i$;!%7Si#O{B`^jMeF!Fygj_MBBqV&b@H2gdg}%_T7>@RGnZg?Er`ji;I`bN~;lGCkVgCOB$ZzR?|93_?Yr^xuzwij_AiDbfjQD^#q8Y9s1DBbeovCO-$StjocP3 zgWHw8*X^jjw;;D)Das?v-3o1PyeM-KtCcH2&_hXUhQ5i5BU9;2OF69DzqGpjlGW{B zS>5I`U+Fe6ahsU9EgHEkT0FPa0*&(ca_M$1ZvS@sb33i!nGd&Lw%q=W<@Rqaw_kAF zCMIqZ6SqYpw?&KRcJY=Z*J7q07sc&dmZSj94w;gCxE-h42RchaOxz|WZi_~4ix$sq zwK9v*?Ofb`czbg@)VR!t+i|*mkmEKnahsU9EgHEkT8P^naeaxmpmY@1r*bde6<$b5 zr^N45dA46Xl#`lPHq_lWA1U3+#`qu3*d^zU^_HQ|HGq*i>&_FTm4^b^?!lmKQZy2 znD{Rm`7c^_{@;fC)UQ}P|6jnnZVF903iAK8W5oUUd1+%}z$d zBqL(lDo-?Sl_y$u8EJ&EcV*-gc-K2wWOR1eM&&LeANaAxf)yZrxUpCA-|Xa1O!6m| z@HomST8qVkfv&2zwTUCq|_80!Sl9kpxLFUB?o(F0c$f@l&7}{SIf=A^sh6S-f#U5 z$TLEk#Cz~@-U6Jbnp^|%7g9%rMh!_O_&VOG!*2yLlvz2(#Z4#PZr(sdM$vH+fc?Rc zc3Y8dCeqc;T(R(c#ED5IJOT;#);$b`#*XhYCY)`8jSc`yc<$_t9ZENY#{^vF?=$q% zn~2|mph*iXnSkG30dDg9=aGQp|9R>o{|z8>_&Y#m;P-$B1O5RJ{lMNI0Y3@25%5&N zPQV3#e*z>^Xp_}uB_=H*mcaJ&x?1M_)M5#*+tL2+XhWf6x_38=C9vh0Pdm`jxUHJf zRXG~0k{K1@cn7ueoPa7Sz<0|Y948q%e*QLSAyu>O(Gmn0>F$I|wvF>v?b+}&a?*fP z|D@4vPn0t;^mmk;)40o&PNWa?M&(SyAxb#2B~Ty#fgGF@GN zh$|XV_PXk=i*6^ey=F6QUzarH$!b0bCUA3?xmdlWZS5AXWmX3eDCD$`nk|Sb zKe-gaqnZ#amp`h@$4@S89>O0V@o(z>SjYS=9SQRjw|0~YLz0U2q22f4EwBjhxwm%I zY+cm86JK~bbP}@?1_ONw3?FQwPyNJbzMrTsD?DN4iqNZg1eS}!BrYe)CE$i!eQ|}+`iVY zK8#9(#_EID2iohQ>f}O8CLnL~6Z5y^}E+5$KZ@D0Ffz&8O|eQX6h8SpK@ zWq|(xya@1Zz)u6d19%1CKLNiC_}_qE0sI#r-*W}DcSjTPk6K=4A{r4(c-P_TuMF*a zi)n5g?~n_p;kHG8 z#y7;M46T=E+q}x zEy0}SXVBsv*Y~-DRYdv4IUYQ0&0-hd4K37i zyj@`3bnosKOL$maY}0jEEWzkymWC)o21|H%0nD@M z%-TDM=*+WMti(1T3(v1zZd?=QAoK8B4D>zkYYe#~tB~GC>ZZ%WCa`fwvIOsCzUes7 zS)E{C_x2z)47LI81KNKB9u4>|;7q{x0QsG`$v6U^#)r%CCnm?An8Lh@Mvq)HzkQer z^V;Xiz_qK|r9v2$fn`X_AR3k7Aw#1wh*pd;{6E}%aTaBGBU%}vZEYbIxnOm<9VXW_ zFnt>wp)SS-J9VM8B%l1FFO=m6;JK8An3RQB!ehs#XnR}CbaAD({^p?hck(Hxu4k6g zT7dOi&u}RhJvqNU>)m^SV*ahQaFT$w!D9w(j-3SrR4OhBS7v(B0@s@a9e5LUj zAGb}v?j0@S-``%n$w%4HOg$y_iVi&Af3Xj@I7-E#yFdER0g?CF0YLwr8uaINts8xn ze{1{54!#_uO9CW6_53dMn55dLwdb5E%gIvzf^iG?0;VSFvB2s~!C({hRD-cIMRt`c zP;Y2UfK9=@l^z=lx}y!)Y3AzHz^*Y@*%@WT!Ve z+Uvj=RI}3ir=tymn&`dd!1P`=E*6+{?4{BjV}R)$lY!~IkwqO>_r}wGyT8XU&pQGQ zJ93H67Y)U%pqm(UVCUA`MsuD`=}Fb6&4Am<=T5?VGwKu2*jeyNz(Ev=IW!WLXJa>& zBU7L7%lxClM?Al&`x5Gk-9gbDG|3Dw>ZTRUQwcs7=wxJ+=(Gn-2&LUqY z1F|tZ6_9mWHQ-9X697L8I34g>z!`vF0{q+G-);Rm;3x6>yMQwR9|4>N_zK`jfE9Sx z$$&Iu^8mS0Yd+xdfTsXbmZt);@q7t%R8AnvpPWEq3Daf6t7YEzY`TOu0Cy_gV2f$L z1D2~Y^Nqw3-eI`P?z+TjeZp}9qgss=v$1HqmBNe!Dyr9#?VH8&Cr$rn}mC1qjd*u^!4Uy zx{cms-f<7Ee$QN`jn-3WqxEFkXwhh+5`@+B%q956;sL_vb8^15K<6&@B+Cfa(K`h~MCkoL@Ef!eR zhrLZpFW<0g&})~0w|+5i8&lD=+W*mkEoNMQp}+Y^Nvdy9jpVkq<=zGRcg!z09fwpy zF2;1J{QJsNPi=d22Q>S)q2X=!jPhIC`uU`Z-hx45_Y95jeiTpUqLxatkN9&28x5K; z>f9(8+DdG2>+gb61MDb6TL5gd!IlEk9ZkT#WS+7Xn4bJOV9yvDn<3c06VJQFUA-4r z{BEj0#8up2PJoP#%zuIw-c6PFKvbsj@fHh}In?m%{cfuB8W$-p5VMte1TCA}hs^J; z8j19^lUFq^ZSi(RlaOY}Gzn+buQv1NgL8LQ<09<<4!^ER%9w{Yb>c%UgaPYwrSj)-#O)`D=slfMZu*Qka& ze@Qcu2nr}PZkM+{Dl{z_g=Tw}nJO??Wrmo_46%ea1f@c>T`iXI*rXJVrAO()o(Q^W zhg^0UMCB~MUjwkq)>a1WvbCrWw>Zk~hgPV|)}{#D_f!{kz)$(4QHX56=+Qn-+n_GW zj{{qPuhX7&>cFJM(N*rdr%uu-z|_&nQlhJ8JFEd%oq5U%VCp2LbyT{`f$7N@YPC;^ zDiL49Rnq+<>1246x4<3G(Y(66dtTDoFnYKng#Za1k4M4 zUNFK-D|CJs!@MeP@2u$5G)IeRO2C55)8mMj@YM`!C1BFoo)dfTi zR2L96P*x@_}BjO#|zL==ZpthW($yS|L9LGeFSopmJ*Ye z64UYz(Y7KZqD5*c3%PH<91PgITz0bKv9CPDQHZzSN!eD8!&%E&w7Fy$d?_nu$je+Z zd}^gx^{cB?R(vaHRMxHLDwS1N7deb7`d4%H0$_hJ82c2J?rLCqGF>}8B}!TE#?_RW z%IrEwz!d!|WG;CR&Cwk==Y$*xJL2;}UORya3gQn+k^@EUX~7U1*`@}d}XeG%@X zxxNyR=9;b_%{6)Io9i8*1u6){R1kYn!Mtr%BD+mVx0N?pqm(SF+2Zu43OVdhHrKDcXqO=a_-wx{0f9*Sn^`1zF=?D!yF z;dKuKa>`YZtCqwz95C{Z!0d=E3Tj9kbNx<6(YlXVx!n!DMK)-S)-j7)q^az0qOi2bzR) z8_#QK!8-l2p_L$+l!m0F+=ZUYHVnO{ak;2|JCAItowU4JZM?9%O1^}fc%ML%jJ!Gm zaDTv&fMWqi0n!mT3UDgm(SS1nj{#(pZw%n+fMWp{0FDPFzb62aBV%Dbq-n&YX~Ys9 zduT1qVn)+~+pNy+sIGvSEQfBD`T?b|>H(b=rRz#AVgExp9_jmbtf>!)RUkTFR2E-M zok?a)G%C~(_cniVW8TYro%=>HQemo)VbffvVld;Ttv_YO zs^yw%O)mnhod)BlggbF^as5Hu)0Tzn1Eaa#`wsm1Majj@pr%|{CW@5`hf5?C zVv-6m&DIpH2hSJH8n^}!JiD?K{t7ko8i<(7AF&_@Kckn~Q9>y-ljjnwcpkv@a0fK+ zVVYfVe(t0AXO55bh3^X=^|Yn+nqC{smj4o{c3^028GH}pqjC)n^_j;ld-y}iVHq&r z;aC*EfhWLk`7I#7=XcgK_$N3f84!~Uh$Xnj(-ZAgi%Bk`Q7%f?zjC=B?+JHs2IcaH z;YeVP2)PvQQ5GPS`;X2hl-|f>k}DU)Bokr@uEX_2`=iAY9-GRdZF97EnRN6)S@|m7 z6YgRQ%H)^MNs~%}S3yKdM}u9#I)nMoS3Vn@ ze27Ut#1h`0@f6Wsvltv&_y?kKxL4`o<#U}Y8~5~EJ@Q)L*CSXpYbIE|FZIalwjSxW z^~h#hkMy{DgqY+)O!bIptVcwnr4o(xh-m#Qmt6HoS0C3S`3t4@^+=pdrns^~Ofn&+ zdPFqVBcib$5slIj4Kg|V@hF#e5R&llb*?ihN1VUej&H#^KIGE!9y;qhC!{)puo8UP z%9b^?=Pg}vZr#$_MfF&@t-c(ji#X^Qanv2kva#a0eqcq~tb`zcke5PO zwAQhRm{>$i14^Pjk7tTzOK_n3k-NQPSsY!~>9O4l{C?_9P?vVJzo|<%;S9SQyoYIa z#d)qPx@wfxp4wEml5yQuESz9`br(Zmf(tTUw`dV!rsf-<_NFn`)${ufI^iaw$i|NlTRhR2hPcS5tCquCCsvD z(KdreqOk)&G9suj5P8?lu-2RC!Ms#8P4;XQO!(Ov6}2vzDK z&ve|l0&9+|a@62-QGzvi*lS|m!mcXg&NIJ^JI_4-8j!9kT^%u=m>5qi;XPrmmU&NE zOzx}FZFIC0<4gLQ@$8bEl7;czp-Mc(c-Gkk^Zm>mHMY-pS7Y~v@pNs(cw%BaF?C6b z_9VVvG}aiRZFIDLWc#LA4IZGLBg+jER?u?jE zOw1>iV30yjw4Yf_tKmf32Liyr-Hjfi zT1`BQZtgMf;Q`(enCigqIT(=Nbcmh$&mV3J(1OJULQk;ea7>BGYy%XJ4PQrWJ(AEIsY=TPfa$pFW3hZ+(-IsxBJ>1uU#jkVw9%+!c!# zo2a66mjk^<{>(=+A9B{JWzO4QY2QY`@6DL_2yG<~jsT>c90_;ZoeXIN`^56k;8IM;qK?3dp=J|0?O*Eec{5LzkjV7@7Re%oP|ItS9?w}9`h z^j}T}!-m1`lzT0Me_H+C4&5dA?=@86tqn+M z1Uuw`n)iH(R&Z`BV*YjU;*bY6T)v?tX{Nkd5-uP5yp8^+MBShElXp<`#srqr1nRPb zFoEUm^S7Fnz|&{~w_+}>{~nsaBeguZ)R8&eObLRfk8`{IXIF1CrmxgX;>A+BPXIgG zDBW?uwt+d7CQ8&}20IrtDtn~~$t%Oy1ey%vCBS4D+kxrooxo%me*{cV`Ki153t%#b zzXuj?4!d!c#SpJH$Fm`G_zI|D#pXRU1)Ffb*N=+LeEA2JQHO618L`lr!wkiam@>*V zZYp@t^ua@R2fvNV&v!4i)QM1XelK*>#5SA+I32$y12zCo1zZbQ4alnL1i=t1>6hPGEkkNwJzObN9! znLgn8dAu~d!2<8$co>VyuZH8FIcz`fl=S7Nhb>*P{5-bFo0}WY)6@q4hIB|-`Lp^z zi;7dT`hD5F3cnz$7sWhPff2!Rx|ck!mA}EzR_68BfMnueNJva1CMFU~c(}t{Ei+R| zMYE2rmK(>rP}MyMKC)_GFnb^!EZ=#8qeW*}E>!nq+6>OW*KfH^hsU{1Zrw-l9&T2E zI;z~n4v?p`FLEtUX)LfVaG?^r3?K-#!A=FH!oLLAXHqp5X{^;a^&njMc@N5mM;&^%&kKJ_p;84NFLH-p_!-jF6@I@@GvJlypW~wsYlBrm*sF^a#_e9xhy9Ela;9hMh&gRv~1rRUFoh~157sPW?=C)=pJ0fL!1NB znbgW_Y8`FRGdROq#(U7IWR^evs~@$D`N}+e8&t3Z;_S_Wz(e^h)I5IAJWF2(4dZWU zM(b$6&jFqQcrD<0fL{RoG~o4sbTqyMxE}BZz&ilH0!TZZm$#WUx+zny#z7(lyaiDjBFs)2hYE;7FxW&T$4~wRn`l$ePgxW3_m^!Il8q z%V2AO?P;*j08{7>DrbC14-QpO{o<;{S8#1bsI!XqK#Cs4@w?&pXO4(2f`Vtf2b?Ts zD)aF5k#%B5OpjfUc0N|#bz-v$RmW2w0L}30!?k+^`T&qOO1-yL;wUFYVv-^;Rf(eY;60-CO_g{+u);IF04BzY z>Bv;g*4_8D;t57sDB6ieSy(H|$SeXzC9O0wY-Nn-h3o2dz+{4M0~T+BzJ;r-eR%Td zOs3b0Pk|OzG~R<3dw1b{slOD>&k)`bID8YtD$$vs3`O(XeXDS%-Fm?H#TEn}#_uSk zMqGmQtPyG6StHVeXN`CVAZtYO!>#aQukHZ-dXbS8u`Y zX=qAs>0&A%n+;;)^W(Q|tFr?nZ3{JRWA-f+%iy*}hv6XzzJ|g$9@xVMn+gnp*+Baw zFizmDG>+HarbyG0hpqln&?<5A8jsFo`o?KgusefMa079K&#gbNaXBKN2M4UGrp})@ zEFkErsoH)hZ7-myRio@qYI7!4Pn?8nwI{bUH7-A|wy~wYsjg*36L&W9X;=VVg@@Lj z+_-Gz()!w#H7o0z{m0t9jYd_Sc7|#x_7a9yQt}%|;5-xOyllpU`BwC?z!zxRb~q@R z(O*U-GfXgJZDgZ=`0RweL^l!lP-B?h-Eo8-2~BBD(dyGO6^PM%tVaFwfM&phf)!w2j~K z93a2td8>VYciKm}N&ARt))ud7))ujZ$9)2n?g)z|yam9NZjr?T+P5u-_RZ~U?Rz9b z`_vM9U$k#}$hJ<8u&vWmww2m9-D=-=AeHb+=AiaX&eqjXaJ#Np)pM)STz5jTnsjg%pqfw-y-RS{T@PN7x=WyF1xRud<%OqI1m|u261kHM!G`{PkK}^yhrioUfZN>9MGfm;qj3ZOs({^ErH{_a| zaScOCZEG+|Hvhmv>AqdGGn|hYhi`eSTL*bys`!=C-w)y_O+M2Kufx_NC%p zRh#$-Bz`zV z)(&hSzqO;{y%*c7U*SVvaZjMW>hmf*PBFq0D%z`G?x=aWy+%7Qn5{7h%);w?-|m0QQQ(qG}p$hdG)z*`qU=-lYC3=(V9G){ddC7j`*9%V z*x`hFtek6Hc#7Esc|t(>X4f^7=hn`mLQwU{=x5^4(%p$ueQV~SRO_mOa-J1R1L^{Oao-A>IA^^0db#+p*I8Y zHvB#j@NU3Q0^Sc;1NbArS%BSuCjqjhH3#rrz`1~j(|?rDA#^&z}J97Kb8 zX3KOT&R34XKXatj&4Hp=+}^dRQX1rrF@ff7Q7u)r2VCs3K*6d~2F-uwoi)cGK)?JC zL<4}|Qv!Gd;2^*nz`=n0#vK7!03L*7)jXwE$W0@r0>G)3gf|UuQMwZ?mhe6e zOzB!J7HA;kYM%Zu!cD_=_th0`T|1a*rloCC)0RzCiR;%D)rqs zPYhXj|DNTzHZnA|vvx}Kw3lEsOFldEV1Fq4ET}l9pWW>Hex#u>cPZMas7aauC7K?1 zIP=PWIu=rT?L4kU#lbvW2S{c5JRl9j7XX(4ei4x0c0C~9%*dg#ro?1Ti6y+v_G+28 z#bT-HmUVb*1E`Qo>Fh2doa-Aq-7*#D*H2ubwOi~-)X*|(lAZA0@Yu^iP~u9{epZ`t z3et@=G=62cXKprVr2A6nO!DjWn-YHj=gN@8c@NW^h;w4!w&(&;PW>F=C4s~5Cub$^ z+Ho2Ebk4-0O zL%{7QdmqDu^0wD@Xs^Mv%N|p#;hC1VZ76BSf0plE%&5!!9{HLm-`ziFS2_GKT4qkN zif)um!&UNzx#Q89Oi7Rudl2UdA&L3-OvbfmhU1?(WccID=*r9}hW@Rv#eo89_AMx^ zfO066GBmf&s=u(sI8>C_^wc}dRxaW4`Zbh8e*f)&U=pV=n2@5F&1vGtejSkCc^4pg z#K9s-keDP$OcE505)_S%I*Ml%*UnImd$@%Gfr5(*Y(79%^y4l^*^ZXgNIn;5oUGR4 z+T@U|{Cf_=weRhLf98;^GCGXm6|cx!OlD7(keJLoW<$$mN0~4GAWpdq1RQ3GLovR= zZ^d@$t;~C+9q-^27V)2$_)komSBchz^rDgfrV+>8f6~{=l$uB=-@&cX%x3F?89)Ma zbS7n{NMpgc4`;Zyg7>ialh2Le$}5i;D~sGdw0SOsaq%d8o8>mj@kg6hAuEBgz0AQT z=6M55P>}h*g{#l+_#Gg>%m`_a17mdspEhqEm7R~(o z@scw_W+uq|XO2PwbJ!{&p82V$69u#1#hvikUxktx7j)Xx;H(aUW~UI%Kg}_pn3zvY z%omN!7cD3AKUXyKpTJAb&%*q-Lk+RwB25%54Hs*|mqxZ&(UeASgu!h{R1%0u7{nA+ zLNrbv5G|)Ljz#rdoEdr?!dQ|;7{}17Hb>5q5WS+6gS7?A!o`;GWwF<;{a7-_JBNsv zgh5Qg5RJkREvGOx6z_qHSUq3l0;0xBbM;k<0cxn;u6gYk3m4>PjykZ+43~=ly||8Z^9dhE=zQ6v-wlE z;`+3Z_;?Tf5Vi`phWx42VsJC9p@?$gLV@_K&gndbjTZA4_MM)Cqslx#56FDKU>#R_ znqoCEv6`4dAc(dJ=|%Hdjj$hm&uT9J3`d{{vig-!NlCF%Y8U*&=X7pYsW+^q zUny1-6RU}d)uNHrqV+4QZ^LWC&F3JiUk&+6DOUTzJ_=^G3-{qOJC|eB8&=bc6sw7e z)x^YV(a37i`jypDZGs@HcR3dMFo!DR6sx0qsf($4U2qSd_qp64;jb^n@SxU`cI-U9bQK0iwjs60@oyF`?<%b>e|%@)Z{WF=-k!kz%V2bQ z!oB37#H1VY=j(vv(Oq^D&byF;WKT@8C#D_aMB|QeqCxh3IX@cX%mXJ?vg@&n zAIT2+s9DnAM#hVoC4B~-89z%JJcK67=?3sRlj*ah(Zh{i??FQWcp#{FLqpy2MN8|O zhD}5$o?gx(?aMjR>TrDmnG7$n;5UxIS%>rFkd^CY`)%AfKOPa8=pQM4jT(8*YmPK6 z*%<$Mfc%E=IMOr>HS@bp0HlXF9gyER1CYJ{e?uA45Hxj1L(s%DLz-7LLz-B^TL%4B zx=&dQ0o#Eo9p_3botr6`YY6(Jh#_dB+~pk=5f_TZt$KyoYu2GWdfMA*ttN8aEfNP)lDE^tlcCo~a5!ZhzN0+)E7QqBTNL#RxGb{r06CS_# zt*7ye-vKh8uK-eV95Y<87bb4A#V4+j5XCYYwH3(OL$A*2-XU2 z^?~nPo3V|P5Ld}{?^XqFWxiRif>S&u3{vC#I6!oYdB+3NNu3DD@2di&lo;MYQX(cP z5z{E2Xw+=cjK{#uMbqVEPvMXhX=R$zdF1_t1*F( z+mqsE1QOeZkT@omP8VLPv3>@(v2TzTlw#b$*8+AtC@KvnvPd5$0@FfqPHNHBrNF+7 z@2bR9P(K|75%yTF1dV(_Qgd`B)931yp}2?jhWDVN^)AKvmHyKkW-If^Pj4ayYJxNT zrsBEd^=xhr!B{m$fv%B1Qvr7a ztOgtoI1TVa7m2_clUe9D%FUDxN$#lj&CHd!U8q`STty%vha2 zkuBzsjZd>W1<&)xVy(PQPR80vBY)rIuqLlk#>{`_xmb(CmGhDsF-eV>TJoZ?u_0P9 z7H77xI43%*fxT!eujI^S-;9Kf4kjvZTUUN9&5u8;1SAIIim*G<1KOPfk?Ts2c1IdP zyR)aE&30Gm^9(|*SLt2i(os9!!Z{45f3Wt?W_LKS5Y`;tgV%Xi;(WEAG$*&wiPxMQ zM(0FiJ0GLtx=?+iLv0M&9P*(zHfJX8r_DJFkTz!xAZ^a&fV4T}uWxf0?Lpd0OxjB< z;jv~AZHUDZ-gHOfuH8!KY)(%{m6^5_r4Fp%d?Nxh!;q{7Ej$5+_t21Vs+*bC35eZ| zqWb*Cjl+J_3$aJ>-rg=1!S|S3%)em0a%{cr!*C`)nM!CX<0}WG@1t}ivOv|D?bt<3 z>>`GRi}q@n_aloLClDPH@TvK9EIFtyHS@kep+WH0)oeo%b^A|G z#(KJcVJ8hnfIFkDHn#EkQx({T!<-VnP@NDbSdZDH-{c)aIuDe0k4ntzjwn`pTR&g6!5D9BZ-Tut%qQ(luvdl~ zbu;f90h#|!+kV{w4vEpk#AssLl0dZ0NH3ai8!{Mu5Xww(jJ^X84|gU68C@09=H9s+ z1##KUL#2B6hRMe|D??07CZ?%!qIH1}qLIlkEkhnDz5HjU1&=FU_mF^P!CX^+p5orP z_65i*n)!$0Dz(YisLo{SH%-aE;S9%M@b5Vo*Y3xVw+?AJ6}z?ti+Ea^wXi);z4fg~ zYF1*(I}d6u-yLqhCkCkfUIxfK?F2{@aXr3TnoCSfC6+J-TeJ-}otwdnxw-5ZS^Iu= zjC?oL?F?ra2iZZj3y?tAX*pFiSPUmsW3chsoSLXvAe#?Znv2c7)8^A1qlt;p#H7ul zQJY1}%IMD*&FK5_f^6G=m4&7r6gMfeK+e}*n3MCp(eN)h#uF3ciK)Xvv~A#vXqNG9 zPrXMcndbH_oWpSX$Id`V_m9q`%r0p(&1-Omod(`R(~N4uJ1k_HQ}YXqB_21fK=xe% zv)j_p*esVJQ%U*mu*uyFCxQ9-D>JZ4pOx>;#wq5<=Ty1VDq`XkF|~|E zW6M~yzTnhFcv^UXDafh6gp6d0Q~nIC0(rHIZxK!NHKQsogj@3*w}^>b#H3fEZNT@5 z))(CBz|+F@c92^i3t74px1u^+l80cDRe|gq?3*>$`X7lr`9~q#yUuZsn7BtwTQ!UJ zJRU3>xaW`KpZz$C5esXy^TVzt9)1DsOsZAvo3d+h?X1vz9p1y1Gy4yQ#hEg{5oBuX z6lkGYcbMkF#dX`EWxQUr3}&*_7spJx-QhurVDa87&PK*CGsbdqZAhB!%+1~PtApI_O_8UsEanmu zbBW3A7Oe{z5)I64+gyQ2GD9Ayeh=eETX@N{K_oHm-L`hy4y(~QvK7Mt?BPaGcCK~a ziqR%IK)ZnYEbK|8SqQ*(X|!NC(!>hDKRT1?qtrjdg_e+(^B&~e47qfNx=hkK{b*zh z?Ojb1PcUbAp*{Qog|r}c{=jnDrcf#k@JijmytBuZ^~zzE`Wkvz`8}@#CIPzv#{+J* zJ+E(qdlDQm367XHHxtc+7)0v>!R?3KNN__9#>|F&|6GFm0qzM;F9-^*Gi2w}1Xu6? zae-2E{k73jV=3#c(8hps5*jfHjhLpRh{n+&(TvczvwgNtMH zy?A9fQd^MC148wQWpi}3Q9z`&0tJyZQd=Qn_&zu#F%Xj&h-qfMXj{P((I5tnTeM?r zqNaR&O;7XL*wp~D>@jm;EPkD2e)ZrN=V$p>+H1-gyRD+_b;NF~Fab1%;hz7`-j@LA zRK9PY*OVBPGD@YqG|Ju##uA#bOiZ@1hSC@eCSzvIj4dt7lC@-MqaR9}HbqGhqM}XO z&>~7j2uV`Pcis21yw90?j8nhg|NDR6_x}#(eV)0_bzk?ho#%PZK7J3qPlK+U?!_B) zK&P9o>=|afQe$7jzw;)Jfk?D^6URIoE2=wu8e0jc17lith1K7L(W#JEuoix($k;rA zZMzF~ho?IAKP+eD>F&KVFU{e*4GO*NA#!oH$d^5w`kfp@kVdmmy6M^roi4dSgRgt) z62TgTgs(*yMz{`P3c@!K4nw#eVGhC#2xlRD6X9ZnZy}^|cpD*=A>C=B8WhD;gQA$~ zJ{3mYr^2W~`QF)4$$e+XNxDi%ci>Tj;~SyYhXG7N7D{?lL50V*cwmH|sxn`|w!-%; z7@NA-_RM?S8tjKyi+iQC6r8)_G`7 zMR~7@kn&PnpAVy34poIvOjQWQqP^{4DeNm9Q|A*E_M62}NpySK9ssC}Gy2l&l)YFO9<9`8^Z)}rfkN3RP)>L|PtLP{Inm&dKVoo(e5Q-w+~_4ZhWZ3JIo zMHXO(e_VjGA$(&o1(;gs=`UMQ>Z)#$kAVHN5-n(nV;ozeg{K35r$F1=0;QNLP>QJo zNQG@fz7>W79lxKxp;_oI;27MeTb|o#<`Ir2&@$n!27^c?jQK?yvvLk9v zORj`tG37WanI2P7+i@?l*|Ey*Js85AvEvDRthk^X-3aKA+>Z~#CJJ(#FaGRs0O>g_ zT?zL_=R>-ZBVBY_+;1VXKYEDKCfRkrw<$}wI- zVCg#=|0kzW@-lL>(g&!is+mSn!pvxnBRrhdHg~C=`Y{nY?@jh2u%>m2<68>ptW2Tr zR8qc~V!zp4$sp>!L-R0zIz6Kw1|V@d9#x?Fj<*`nF;Lru%85?dgn`g^ZD<*Wn`x=+ zvJuiSnS-zz!d!$22!|tVhcFLe8p3>pgAtBEcr(J02xlN1g>XK?(Fm6yycyw(2ya37 z1;X1Aev9x9gyrCSJi+jc+=YbiP&n9ParX0zo`zSw6MUha1bIOH(I8)VHc@PwPk{vpzS{ zqrClAH9pqpeAs$#3>?!;(^Bbcjt+s|zepo?j3v-*^lHS`;>L*`v46pkj}bV(miuXI zJEAEo{xc?Z4`qkn?Wx5u@Wf!;;J0$ec%w@4P5n6-;Cmb@l*2xJJRAcr+@CwLG;TV7 zI$n4dKp)n%nM%)vKXCmQGGYHUKKltnCe4mEKs)eKJ8=d<0`}yFU7`sAf_y+RjIA?IHVdM#vyj< z9`SB$rH+DDTIlV}c)t;MK!@=+Jy=t?MO)D- zevh7Rp|t&>>ivjAXRGbWY3lhR&qldD-%?7GUZ^~%=fgEeZ?VRnMGrt_gdLZAy5|wL z!{190<|AB&@OFgD5za#R62hktzKrk%gewqkK)4d&dk9}e_$$KI2(Bx z2;V?RpUBvNa5Ta<5l%q(HbSbWjR>hn+J{!8dL)Xe9*JVn9z7(buJyPL^#^V-2 zrSLn+aR)yg$IVEtlRBegcn>kux2aQRphKC_F@~Yk8Oa}F|2)Kh;Clf04#1R-d)`Vu zamKVBd%#kUl3NBgM9t{ig^ z764X}@*7wXUCfjoUxHe~&=3z9VZ`w$g36YDd$dW(wB#=fJ@+1mlO=doA9e3O_fF?A z&j%L6?*gvKvFm`*mz-kw*%pP-tw8joT8uXlu`0}?1JFx3MxDte9HXY9EM7)TsnB#% zVRYz5RT<;$Mog(t=|F*{SMiHob3F9fBuECIOmgQ|M)X!@kxEWKi!Ov$R3rMJ#f&7 zY`opQAU5&;^~}d6{LjvQ!~faYZ}2}m`}O~4XFvXbcJ?tC(gfMV*jRXiOygw@Y>GuV z_P=t1OoOsnXy8_hd4J1VOl9e)+e~ZiWZ67D^b*c!rST;b%>UJFn4u2o`2{#DR_5F= ztl!KtBy|m?j=_jk-!r$xrUEt#<)0?R`0usRU>xq!xDxSrgsl+PM>qvx1B7(A)DYnw zgpCkVxiv;e6W0Bh$Ef$g(40!W4~AmV9(j3&F*+woF}&Lo2j5RK)k?LDb-l&*VjE-m2)UL9P z#oDb@bBfmju^Gr#46e`NvPl`5thPn$9>(~5KTf~nva>#?i*xOzMzyei;-w#@3hLQE z%i~dddUI;zO)hHkU)DW?jJuuQID;QmR)@5dz>iQSF@nf4u>bB2D!Rh^B-xb4+5_v&SKx;ib>ZA!(k0 zupz=T5vCw4iIB>s6hdlHN01M7phz)wphz*a5bSLVJ445!y*d_)vlyC@|KPC;?v(4+ z^SVV)_a8uJ9GVjOFmu!7Qu!B}PsG*cMzwzrne43yX|n+h@|^MHANMw-@@8Bsoszs~ zTE{&&$D<7RJ3s|EBvgOmLs^ChR_%@Jj+dCyai`tdqZFMeGh7q8Haq#P5_|TYA7PcM zz0tbUkFnFSY|(^ibf!+Fg}#=dVmEm=d7P|QD39y)@g=>0kDg0DX=wOXo{8cTP3?`- zdhDK7Vn*4?2&Y6lhoEUUUQc_P`n=W$sH~EFXQBGER|9w$gPkD8OR}*Jh~2_iZ;K5@ ztPFPrw<1P26vgm2+A=sc2UuC&y2M&g;_u|GYY|htjfg28U070n_amlwCoM)NYzMO~ zolc&>v1*8o=NNs3_HOn@E$c(XN_uqaOIgsV3Z+cl;ZdyA-I?V!Yz^a&QW|))nuoV{ zl;{0|#_mp7JGh5$&U@nW@G-rcGa}y}>*)Jrc1QiCYh2w;N}{icrL=6-5eI{6PC#F4 zF8r(|rG>^nx*+pSBSd&n{ZFvF$5e{=>U&t5Q&8T<&A9)e9rx`k@M1f3im#7z4;DyE z8<1WwU%MGr@puHEj9cHcoN^~9r3 za&IFZeQ3hv(bQscgtrqs%5_@Gz|p!Fbly$0R1x`?>mN?s6LYuYjyS4^aR{kzyaOTi zdv_wF#7sa)S(t>7oK8XbIKrt2S0S8+kj}5nK=?VryAd8jI1}M9g!dx66h3Doq{~Tj z5YqRP=OUyT%TEXY8kdalKKxB>;Q@qHLZi{z)jWsxS~bt1ShPnuqOE1T278o_0SZH_EsRK^j_1kXzy!_eQU9@m_aFCc^z{;<@TkR zkCa1_)STix#AflFf^P7!bBg~z7`UUw|MtOP2P(htV6dFK*d)}FiqT-Of-xEl6h?zV zY1qbiG#I?bTc;!T2*+qJh~}+J5K|U37_8>4YY|gC8VnSV1_Q<0kC@`oV4yG>3>LF3 z4F+pCMuWlY9P%DFVS#|hK?>Rd)kjkCfU1N zlagpep@Hgi(cIk@^#SzidDMmDk~qZ^*8R5{r88Qd)yK|#gOyAuQZ);%YH`F zJS1P_xRpIB*tnHNynj4y@g0Z%w+>v(uxF})i+UI}a8XR%-AG%@c)y_yQ!LsWfR?Oy zgLN$0yA?6om&iDN7zz|^L18p^R2bjx$uIriL!NLNLcOZ$Iam~3{xQVE0s=3)!v0%k z=}LX!-j;0W5+}`V24939UR3$p$5l`9l-ob31mnOT(n$n!r;q!DD_Digo6=jjyl+DJ zQXYmPqJD@;42K}%^x1L=Z5GxHtaP2#=F5DgLUC=r&a`p zQyBbiu-^+c_<#F+4Ii5XdufgT&0w;iDV=n#g$mXjd+x@$OG^892ysB;eXq}D9<~Kd zF;&nMQ||^-7)^>4Mg`3`-I|g`c&4&qo*6QCN{ zO1N3pSEXGba;wKwZ0J#Fl0h~|pm!P8m2~=mm%nq=T4Yg2lHr~gJI(V>l$J1dd$*+L z;pmCdHyMPI`Q*RYJb(^2I?!lFG-uT#Y+whOT zOf~$&94o3i>cS+_;&76!P{XJDX+9}b9b`idi?Z5=&X@AyYxsO;|G(K46`qU#Cp6XP z+5Sdd7y2fJ7)z)uirew1jLeSrCu%`eH^o$SQ%t>%Sz&aik;1U!(ZQmp-kVbjJz3FD z8e!!3ExW@05qko*7Jkx*Y^bZCTC7jKFfT3B(z0>}q-Uj}q%(8Ua`W)C%b>KJT$=vm zpXSMy%3j%XsgqGlT4!a{tso~aeK4Jmm+v&BG>k*jbGs}Y(v73PZ$Lx+=O@X7c? zl^n%X$x$rYdjwmlY|40aB8p<_!578bsBL-YnPzTtq5Rdr+SZnPC~f2*UD#QtDQ0t3 zq#eAbbt}lrNFT-*BdL&D6Lw8b-mr9afszt-4q+XrQZsO-PhH03hrwFr4epSME1C3| zR}~Oxc>rYfm{;K$6Qz40O2VzH33#fD{+@`C@-qn`C1WOds;(%e>WX5~9-ZA#*f%<+ z9>r7G35%iSEK%<)_dio+rA{y{`0JrhP~S8-6pF74QyyOtffPF$u=Q0@)FYZcAA5OptVLdL{~O^ zHAKdAWKjT*Xh}Q$hjdi)x9|*_;3@$(YB|-|Y}mgG)h3wRtVVc!cc{ zQl2^>q}sa|_Nw+MrfQF3>J1MH+oO5W-ppv6%*8qv>wQ=s#5xb_!&v`?bs^S8SRci@ z80%wL=~D2sSf9iCJl3UHU&6Wq>q@MzVtozkYOJqgU4wN4*0->}jddf|cd)*Xl}_$% z!TJf-&#-RAx*h8mSii*j6;?W;-i7rWtlwe%0qY^GzheCj>+e`kVEq&8Usz9K4Pnk6 zh4l=qXJRdhwG`I!SkJ>+5o;x^)y|x4r{5?PvEW*{hpMAfc+5rTe#(WmQ45>{|0TIs zsR9or|CSHe7Y^@FxfoyfvoEUm2RK#F0{WT71~<(Z&Ly$G$mj{ zN(b$Sw3t#+f2m*M5l$jf?W8ZutA<&-Ef zK1xqvA0XL~TO*S2q zI2}pIk-M0Dnb2&b@^|aN?2`sFJPHY;eePZM6^Gb#_C>RysT^yA*tEdqkOa27n6#PD zZ2Ko^qzlffFP&@CINPRi4#$#=105Q_CN!J>iT{tR|9RH`gVz5;95a4`wzW@f9WU_N z8yyn{(F@9@e z+4zNHF^C=ISY^caa4Z(Fy&R+4D1PKvL&WxRtT|%)Io1ZT103ss*iRgztI`KKW=bST ztyAtlXDb@*p5z>m9sW4wLM8W~;v^OFV$yCxvl*HD+dUUu*HgX13eFexTrY8qdajoP z=QRmzcQI)*q1pCN()g`S<64`>*KHctaLo7#TA$zB`rPo3?EkR#AF};_s;-0R{N23b zuo`ttZTG8xl-Cm0e%Jr;c|FUf^(UKFobo*7LhaF%ry&tWi|IX0uSop>Ev8pAJUS0V z3-$Uxv)3AkmF5`D38FbhXG_X(ED5o)9BYSIIgX_wb~eX)A$AVO`q{12n<~ttHE26O zmzAjQf8|&bV(wz}OlY?Kll`;;d!QVj;28BKzjKWGl0W{-{hx3Bm%uPpQk|3H82Jxz zEXe-V+Pey8gj4Z}q#SQBe$%~SUf8<^@7~YyGH^3{80S+*<5;wjR};LBzy~llAN)bM zTOf>gS7(AZ0+w0$s~fNp-aueE_$wag^y=Z5_6D$8<2Ms;aUB32F*5M?Xv7MDW??Ph z_tB?#-SO`5u3k%ooe_p{qihOPyCc?`k*>H{n98g+d={B*e~H{&5U$!H9EVRFrh!v{ zl%~O74!jm1edIj@SQvIK@Jqa~cRBu1obGYRLQd!{@Bh7JG7PC4hE(UFL?~VPNc}*h z=_=%=CDNFMZ3B>>0`M^Ma=u1#`DcO`Ml26?IRY9Pobzg6Q7IKJn^ToT8b6gDZr&nX zgRbVJ71XRzH@;^0%5Yk@o4IIPBLO2=I*f)#MOg!h%=B)C!!#tTCjPFA%CCtnS7J>= z1(Ky(*lwoUz>b=aKVvnxW=G%&hw$a$8fmRk+NQPa(4lkdmfcf2cS1C!ZKsaOow|qX zhU07247X7AUIWfd&5uB$RDDwo)0S3fOKlOhM62q6*3=rY?!Y?ZmTZO6_D*Q$$@rx< zR~IW~gtF42$X1h=!7nb$&C4jjz0LUr%}3zxT(rpoylqS60e{uJzHWS9N@U@DbVC+W zIwf~N@#G=3)JCaZ^KfGV{at``QC(AUHAkVV?Ya1i+BWTfwY;l2Zzk7jTTQ&ho2sC% zP50??-%aN^1vyVf>G-Rw&|cO&Y%7ObgmGTf&ej}Bkd@+>uOF@zrnZ(dsK&^g%z@!r zHL3YoAE;x00^qbh=RIs29`#2xypd>{YA>k8b*7r9bgybQg3E;a6L{*Ra6&twMfT{H z+%>IRN}pt3i9{M9HKpPlntdq^6`&eq59~M88Pfif;`Kq?pQyqE8TRv2E>H20K*M@R z%n?fR06rR{cu78}S1}qoRg4aJRE$nrt5{_l3)>hXftFXS_l?&3bdF(zH-ls3eG13O z`&5pR_cu63-rwX{7_ki;`|s_jM`HIJfL)L}YMfMZ{-Q=X!t0M;8Z0xhE7OijeWnTr z;V&9$v(Zgc7v8NPJ$qn!-oS9{+O@+SGW+MH=VfN(hdYlb22wo;v#0UTyrNAuTUYDN--4>0GF3EaMEYnqcg>NjEa>IqUl?g3 zf2yNR=klO|suR!=oT4m_tB$IU&oZL!@B67d|GAH=k*2G8u*^ZZQ%6bzC25AyCE}tt z(rSiNf361c_(SZ!lg^0MKlkjGXC!s~xr}MTmBwkNx}_FFWitfZ@{mqq=b@yj9a5_^ zIWr6zBB%stdX?{3Uj4W7Xw*~=|4!-r-<30JIj3tq|Gj*%My zx?deG$jJ$3OhE1qwg@-(#}U+86A6^vRh2iiNb9bBZg(*+rodhYfLGW`j*&5{PX2g zO;o$_?nEgbjGa==8EB_V;~mV+nZE;z?3gr^(=KT=R4F#s)hc&n;%9Q%P?^x~Jche9 z|IX|-+%yaek?8P@;IQiA7!l%97uh6%0rF2^VX?{SO@>3xpTyz&E%QHnNmjOLXe zax9G47LLUt_7TTwAoelG>LB(B$KnwClw%DM`;22v5ZlTzIuW#uV@Zf@=NP4rZhq>G z^*XQIx%8elwfraUyS(bEY;??|NBK)d#>;q=KZ-?rNdt0*<<`p__|lDMhUjLQC@*PH zMtVWLxH!C!a-2fy4a~zs8hDQY7OKst(61ErE%gRw^dB)ewi|)eNTNbsg%Ce~AE9YZ zcS7hyVpOOfMSV-Xyn*Qj=?bE9i3+`eWYg_aJsZEZE<&Ykv@nNbXXBT07(pnPR6`Mj zX022M5rpb3)rZhc&i#By68_5dA=l!s2|k1}HOGhCh`$#5kRkZ%6(2%J1{;0IE%@t8 zA2JDl9r7VF@fTG@Bo_|>i18uhnVw9KaGnD~mwzG%rKO(_c>_p+4|xyBOds+YkY{|z zP9Ph6$d5p_`H)|L9P%N50f|9ViKM3#w%73?=K<;EL+IjHfe)dlnWy^@y4*F#hx7-s z(1&CJ`Ot?<0m7a#H&kQg-PNG^^53Hy+9U{S}1)CJPShcpIqgAeHe zWQY$L4y3?`%mp&phb#cH)Q7ACvet)u3*zNSqHD3uLqpc?`%}AM!kq)H7Y>l|Zt5ob^Cf`H=U4;8nR!dbR?=%W@rL z7m)ovWFL?dKIAA6ocM68P6CQ6ym)D-UeTK z@MZzNSun3@L3H8@`?|^tE#$3Ag|<8nlK_>kdIcGy3u1?5(|!gj<`VV6rpH*X_+(5h zp`NEWqd5*^aBe{VT^+H4`fF*Z!{X}D1j2i>zF(LL30J?73h#xTF&B_ ztAkzjv^r?O;4F7^N(&t{>C@_<0fV#3(J3Qzu+yDZ2h9~6%DBl_IiZ6Fd|DkeU`mgp zbB@qK!vlxvfy(*$CoA_?F}Ix26u}woyQs%@uI+qBYDgkuD%yH9GMd(xwpi_-GO`P;p6*`wOhaNSf@%sDR(kL)$k#0Mr zt|TgS!qK@*=uk_J3T5G!_MPXh|Lt?Bb2)QpUPya2E!7H&=k(VhsJcdX$_bhL%*;!5VwQG(H_Cv@VNQ(x=6KBU|UsYCsGRLIqd6FQ_2 z6?zH3R9`t2kF}OM4VbeK$uxCZ-_cQZ+K@R^0+i-E2Q^J~IjSxan3IHG%KMNj4%{w% z(UEIZXdwuutP>nxN~bY%lJI+KohHnoBRZqgSm-omPF4I;4ZOVN(0G}itC&OksnKaF zbeaXwX)bh{37rO5t*K=nbX`!PYa<#r=Frh#p@&qokXG2k~yXg_S{o@ zuuM-Yt7CXAg$|k&(qpz4t%EKboEwlY!)q;cl9@w$2bIrrWgmH5rso>wtaWsfg-%=M zRK+i7-Yc75+aYz@F~{xa+X|hO06Nz)hmPh=zEXrv`v5u}m_z%8(P=MqIx>ewG0NAg z?RRvR`Rc?RciibHbYOAs(F(8@CYO z)pR&&U+&5rnr+fjkowjF>8l&IM1{_9^4?YGbZ1WSIz5=<=DoYn>B$^3UbH&c;~ANr z>y$4iJw1g^uK+r9uGBv#=_PdfFo#AlYV%79wqtTZF?Z~~o;lPfn6}YJ=-j}Z;&tfC zaa1VR(YZnB+{m2b%Q=lXyYXw%bEDAd7eFVSIlnkM{e({c06GJhv&YftFLVY5(8*xV zPDf{;&>0j!2i+*j+0_{&bcO`b$rL(6gw9O?bcQnL5PnU4-6V8q))y5jzTSrkoh+e4 z2ePNr$ze{|X@}WDCzm;|;g`nc34QAq(T5LbPWdPt<03{&uA`&+s63#NK59G)DQlsk27 zb!we4%%QW$MrX9pxtTdMViKqHd%vSl3->=`nd6ReHw&Fx0_fbz96EPz(sPT@xs5p& z;+OK(;OI@4$@JXLoLd~7+l0I^%@Soy?9%2ri-=Kb;mIsB-JfKmbOYuwA zN2_%GQ|ioTPLi|l%o92fGpG1`{fjy7`Id);&I0BXpRa|?Y3Sr@fzVmRoZ|EK2y@(W zUL z=+MkCDpY*FRx!uT*K0y&HFJv3*Xzu2$CTAVXAN_T&(~V!xcOQmbk;Ga_U+bY?dNTwvxzx0mV)NJ zHSdN$WczuCIqsZolhApWImPGeJ?1>%q~~3s^FDJ*;g^=8&!v2TEm0wNj`Y6J+02~c zbv|UyPW+nk*(`Ln1km}2IcGTe+9Gs54xsai(D_*Cd>TOKGokaT(AgS5XB%_e{e7#@ z*&aaWbLO;h%4fUK`67VMm(1CNUsGRS2%WD2=Q85m6ym=UbukT>zc$nG<&E>pP+ILjWDBDO{&^bbb&zdzn)izo2>7 z#c%pW_CG%|hmM7#5Tj+U(AftR*NO0ZY8^USj0(9r`-IK`=A5r}&U$k1IWj#zF^A>} zCOrp)&Ozq%#qSwdo7TM&Q<%czGSyU6r~}|Kh|zM;(HYIiVf^~9GrAmg4DvH`iuZMd zIqe)@KMP+d`a-^3j`DSsIW_Q0<-GBd8*l(rIA6aqhsG~cK1Us2O6OPr9oj>qLaxp+ zp>v!$8Th4gzBZFyx>7hjzcXjKllS9}jw)vidrsc_T$+8o%TZ}Q!JOjT*q_X) z<4fsass~?T{8AbIu=3faGR-Hk#eYx5UqXk>qe8>Lq`aT;_O&@uC&ZlH_%&_J~?&W7QV^|UoJ=aDjUETec&W2M0aYM`YJ1Y(RZ2seS*tT zzRqDzL)0lEUcKdWYsgZGuI`ok@bxxS}@}loYI-fbT51M>c6gu=Zq^MBw{d^_n(67*W*Cj%yN&uZOa~^PXstBE`%qfq$qNV8j znyN8}8mdW8RiSekbIw*W-s@|2ca-fpmO1YH@G_xOJ%A3~$sQGQb*c-UD+1`yRobW! z%{olJt`Isk1L)LZ4)q>Jr>4-Mv!+p@;>(9eB|iUSbZQHox~zkfnEd4VQ|(%nmE~NI zIfw9z)3ChMb#&BtO5Ze#T$7qKs{3e{qxzOO=1kYVI<;QjRr-o&4n2Ed`olQkt3Gqg z_(lD^%Tc}>FlPvSQQl`gcu{NVt08kz9bXNEFZxDXr0=D%(&Z>$jhNE`erQ}CysN@0 z>8mkw-ovjc!$!ha6XskDjVP>ChAv0>qHo(qg^JJDRm^eceock1X3Q~VNcnO($`|z* zn6DO_uNKVNh+mVh=EB$2%yIMOa+I$`=48Sb)mPichZQk@PGZh4_%&@KQTS@f95-Js zNBL^SoFw?6a_;d|g(Akv*321=Uz4v^!dDySxcPE9$`^gxFDg{LuWOjI$MKace6+B?3KPDkcc zf(9*XcF&t7bviM}JCuwcXxW!C@7FPhj`&P^ zdJ3Ih%&E#M_%i9_=g~xH*5%%}(_85D5;}dDb0sVh@rG~Az(H+co$HxX9=|3%eT2>p z%&A&zdipZQ&DRY==SJqVfDY~N-nbo*ES#P+<}Ado*)MK%bX42u#~gQmcR8v~)0tBN zZV>SvU9_~9^hHm_sp~SF9`Mo~UrJ{{0G)x%8A89%pk;v2$q1k`h&j2APKMB-&$C5^ ziq99PgrA!*=@~3^G6U$`q|$>bGCG+;XJ`POEatf7GgRmdV@@*4j`sI5k8GVJ>noc% z+wg1J#xO@mwT&F+xNXDbs5<2m4i)cfIO}}k_{tT&@`Nv!qkQEvr}+9RU=GissqtXR zcYG6*?OR=5yypyF$ESKd>BZZoW8=X-?XG{Q{n}yC8p)-~_ z#n;6x%yH{ttfQmq{Z{6<_3m<18QvDa*X_)q^Bbm(-6njE6TV!I@^wc5Uw1Nxo+35A z?hwAl3tuir`I^9-;@j9n=IlqEn>wA~_)}PHxR^QJkRQs|f~VWvDD(apbEqdTM;XVmSonI}=WF`e&kl4s%GVRj zDWxR5Cx6@gfb{hwbEvN~<@|)>OX)ntoXX%J;_Yel;QLZ%33F&XH9AiTou`>YSBvOe z+bH(NX36EOSgbPu+fIj>}PLevUbJ!%s=9Pxqft#4+0Q%xQ@I zi^c<5o)f;7GA9<>s9$}&&fzsKNBMezInA*h5ikF>MIXz2y{I_&HRbby<4fr*V@@k* z5GTBD(+a7xoH-rvYwnL)CUjn6&Rl5F@!s~9S3V|nUSi?Rx_vgIl$}8 zsf=G!U#o@A8s=0-S`hIL&q!@2)3cU2%^jUJLT4RwF4Q_drwm;!b>3i39Y<%K&{-cq zX9IKM9G&$-=gj~*Z!yPB&znN$ZRRXOzNoEMj{50EnJ=1+sOvJOJ-_YfsQrBtbIkru z=NMg%+IQaZ`TFkAIYqRwcbU@=zsA=)!qIv+D9 z4jfvZZ`<@0sY6E={`)sRc60`2lI5q&i9w9=UT**0xVffqdOl+g%@fT2^{LR=8bF77 zjHr;SvsLJ951{k8(Ah3@z6hZ6C3Chp`T9cWd=)@v2XowU`75FGbpV~6%%QoTDd(?+ z&aMDD-!R9`*Dj&+Z2+C!%yH}MTcPt^0G;odr^R4$Z`(LT))96gr0k=={taxBVOzI!6NN{K6dS z$4q-ZB6N-h(D{`)ZoZB>I;wv@#+>r-Ma#f8wU5Yt>^G5~V?yV+^+o;R@lQWlE_Hrq zPA-1U*mPXz{K1@up+UWA&t<=13RAdWJt1`d5ITP{CjlCWcu5<#VQO1g=P%}z$FC{p zKZVXopU%aT#?F&EBpl_tzwV^a2{8v3%X!J^eRdJoSW7U+osWe|P|Do*LN}aw%&c?-7ZJ9jgrj4B!i#d`KeO&PU-6` z=JZ1;nK~`$_)J^wX1inn0 zKTqhyFy~oll*O7-<68Uz^3B;QGH0}tuNa|oK65Bfpn3O?PK=g17ci%ilb-X1PNe`k z7Ydz9Lgymp&~Yvz-Y<~==p>rv7;&u6)pIEVo zzPAczzSE@#dQ(4g}qC))nGN9tU`9P(HW99k}SbW~qggE{8dik{1M zIjWDU$sC&b(>b6v%Wi2Xebr*lGw4?R#@>+-cbev!WD zjhIoPCmmmPgs*zSm&;MUu4GOcej6jrt1iq#apMnPoyIZe0sNZr;!4Mt(urpdU4JL* zK{L11kvjF66YI3Gc%joEfDWCliVC%JbQ%bqgaA5?n6uc?Nf0{pp3$gKBJzZy_8xjJ zYpKjv6XvvWbQ%ktrp!s!I%R(NE=}rO#hfHZr>W3s#+(f3P@A8BK?1s9K)(8F&YWJ3 zPBWp?B7n}-%<1mvv=BOp0d$gtPNL9h89=8Mb7)L4eP&Cc(>j0-U9H3Mj-%6B=p-|T z#!}EuaX-K{%n3U>$wH@X03EvHD=Osbv=urj0d%fqjype05jyPy=+Ki6{&#t`7djmS z=yYO^o3D;Sr*i-uy3@~JKAnY5mjF6lnUmzyR~MnvEr3pUq0>$1(A$Vlci%-%=FE4} z(?jT77eJ?%(78_N^kxo?x3m;}Uv3}fxcyjfp>urzog0MC^+Km_0G%6!PG6xzBiHHf zr|lp)(+W&Oo6vK6%Wcdnixbm)BQ>B?t_&>1XrG6U$` z#GH*zd(IR(Lj&k!F~@C(Lxs+;06N)1XPD5*380fJbaI3ay=(k*<(wyUh6|ni06GQC zaob_O&>0axXQa>>A#_Fs&>77fw;hfWI%5Lp+$?m)2%WJ3bZ%je+YZMHom&Iw+$MBx z6*{*wr}%loIOe$H^6f(BjsQA$3Y|NI&iDX26NJuqp))an&Lp8TQRv(iKxeYhxl8Cw z37|7o=u8nh(*o#BXHIjcADbq0W(3f=Tjt+j`xdC+UV~#r?n=5qgXATY~dC9D~ ztcZIU=*ZN6J??&?^B{B1)jG4kne@2K*F(&4%jZF%GmkmADS?l_62E-$H>oq9Ipdu6 zGf(I|?9dZ#nE|K=qzAPZ=?qi@Al&>c1xXw%yGwy1wv<00G&seljWpm zkTS+V08ocb)R^CWZJ^ZZW;ou>lmEMZQZQ$9}#ou`>oU#F+?-5>lU)AI~-+&{-*TUJIbJiaBokc}?i74xsb8&{-{X z)&$U5%N)0y*9e_;0d(FFI_readY{gHb2k@ptz-jp-1=HCblwc0^On$gQ|P=MKxZR! z-1>T3=xhq0^N!HjBy`>lpz|Jc-1>S~=)505=L4bhzR=msoZ{!tA2KKG^sAeN&Xxc= zA2G+R_bo!_;{ZCJ2%V3G&Zhx%K4Xqs@1F{ttpRklF~_a1twLuzbBdqWea;-We6|an zF9PU%DRjONI$s6Q*&%ek5;|W8(Ag<;z7{&Wn9~U3GMbrJH+)4aIi7yQ93q(W&%1=q zw*ho^3!QI;&UZeY9Zzh)TonM5` z5utOGImPeqzcR<|SC0yvV*zx26FSF)&hY>`zYCq?Lg$YFIwzRp9$)++bp8yW^A~d# zI{W*dLgyrNaFD}$XXzKW7jYa%heA;y>YvRu=#xT+z9<+K%7+deH=TFO=PPAZ`QlOX<*e z8lytR>y%|qKS!sG&?%>Mz@dBA_cTe_B-3*?b8bO7p92mpPL3eUMhVAF2K~spvuqw;%d`XH>|&@4bTK zOX*Y$pmRQRIymKAQRrO29BR*W?dpyyfBY=dQ;9jxK*!ueb%D^i(5JIy&avrI=OX4j z>F8W2bS`GjBS;JF%XKceV4>8h%pA9TE*3hM1kkyZIjK(hTq1O;Fy|?qo>xEGR>b*@ zFmtGU%)F(F(5cFtLC^usTQcvVgEC*$nB$&TuPSsdV@?BTP^&pUtUS7*!tE!PInAB) zTqbm?2hh2kIX5^u)rHO#%&DQ%)8K*XnKC^!m{ZEpxkBjB*Ie=alwx&iDUPF4Q|Q!Y z4$Y&eRJzq2k5~87rY0tHVPTc@H^_UZj^cbDGLg&f=I&sV?>*!o5bm9Z( z)MpNzA2aER7dj0B=rm+b4M(Se&`AiO(}+24`6LLP#>_GMP0`;tpwZ2L|9oSi(=>q2 zRm^eEKQ|RR&6q=D4zln4`p7LsJb&7pIaFUJ-OYqfivT)TGbilmv=BOpKAobU+e)%J zrrr~UPRjr~t%OcXq0>5mP8*@qTIeJP(7A>=bPuP=SF+G)8$hQWbKL!+t2|i22X8%yIYA6rt1Jr?dCd+q%jAr-RUGFLXKv(CNgS@=p156gr&)=%g}-+My}u z&O)b)Pv`D8S1gnH>MC@)2%T=ssfu!@UU~7Lh1i7(_s`v#QwQlW`&T!i(}Ov9$bs*X zzIt5`46TKAdNOCBqtip^T*sW|(4l#_*S$j*snd%&)P78Qt`j=FnX?ZPG>I`Jg z1V?9p(8*v<@%b9W95-JXLT4~@p4I8unjd;!re_FqhB)aNEOauNW9q%@mUmH9h1>H@ z%%OqFw8KoHGn6@5NDuAH?IzY}DRr`#a|k-rHfR~@=&0kSVazedP4w))%TdQ5+01DH zdqljV-yfC3oSBZVY~d@{=Zl`bbveq{@BqH@m^0n+HC*`07rtDM@>Rf`;^(3xnB&$( zf#XZ*j0~VNiaFHxnmQdRbVf6$893A;KDcG`E3!_o8$gC9zBtNC{pv7g??92(zE-fwk$DV^Jy zlM0QJSg*M&)Lo`|9CO_L^md_h2Xp9pH{5x5UY+=$)VY&6Nltq15IWAm=ojZj2Ai+nPcV~E7xr~By}b+hvv_wd?pH=y8`G;7CLtcohboyrV5=YLT6e4 zo$1VR>wTKgnGrzeZlNS5NBvi#fMAIu8q-16rw45`2Vi9B0I_9|b zwN~i7!5p06<|R~WT2)zJ>zT6$4ATzZ5IP$I=)5V?vq9**6+q{0=A3ZS^On%r$Q+s% z)BZKTcET~4uT9Kx+u=r`^G*PrcZJS7Lg&2zI`1>*3}=6TPw0FQKxZ>^-2LJMq4Obg z5>YlZvb}%aZ!gL6*}@#RfBsPDd=x+2Jt z^H~6$t;`8K<@}k@*~Xlwb$WV~$tdD^;qA=n=jdz`I-fHq9y*|TqpulXN9OAb=Ft9b z#?#M*&X>%g@r!ge41eqmsq+!XD1rZmGC!V_Z@G^ z^z35JIB-nAu~X=L!yJ06Cyj;Af6?R(-snrr>Qoa@1%^ei}V*#zlp4|58fI{m@%rF8Z( z=QeOELFY)79#f^xkIY$xyqmepUPnizc^`AkJacKKSL?YPt!#2mLzIOzCNI)|AP0}T|Bx9Hr@S4o|pnG*)Vw2i|; z=LmC(pKJZX9CxmDMCcr4P7R%}qOW`Y${crWIx2LI1YQK>^)054`a|ga$(&l?P%2t?OvT@Y z)AJW|-0O^g3Z0Y8X`*!=m{A$0ObYAJseAwZ5+_*)M&7w}+6c?Xp)lLw7)~ReXONZx z=^&8a0vV){#!*J+F2R|rk*1cjLU7&`$j1Wt#v&^BcpHa6E;5yY+)@eQjT1g3ZCJ*z z0l8y%OC;~D1t&kFpb)34=KNuEk?XS}`Z$5i6vz`Ac_L&=Y=z*wDUgo@a#$mOa(dDR z<>qB(7Yw3QoU|$YOLHc1EvMxd8e zl())1YUE0boK==IJ@2xR$ycmKs#>J2M((xg8Lp8Oi#(u_wH8^Wk&PB9t52*Sw#aQ7 zIcSkx8fj*cOZ8#d1vWjY8mVZJsTz68BAYalXm!rimxd-V;ivB*So`N-{U*GRh*~YGk|BX{IL%UsztS;Tk#5df%jxsg_foE@EI=A2L?` zHS(rKUeHK4+g3|mN;de)ltt1t(%T|0YvekMMAHd)EPX99KqKiEc|{{>7AYHMBX6-q z`fB8Hi#)H9ofaumRat#wkpUXnZIR?^iZj$ApK4@*MFw1^IN26is*$A@IiZmw7P%%? zS$$}cIU4!FBHw7_(h{cRn^#v>H7znlBaJQciALsG9u`kv}YFx<-y$ zWT{5}w8-ZgIc5>BrpHUj=Bt`UPFhYYja0Wtnnq^Zyid_cdy6d9$Qu^XN*39qk;4|LR$pWJ9$TW@2u*gRm8DLvW?Z(P#utmmcB*P+~ zXyi$YRHwr-EK4jhN+ZicCWY%XGTd^`Zpud9ix%mlk&i6$q(-V*q{LOqDr`&R294Zq zInQXMj^!NJNK=cnX{K}@w#aOaJZ6#I8oAIa*Ke+@>RRMhja0T)TQrhjIh9)|t4Pn* zS|BR~vi9o2R<#ogBYgxiNh9q;rsO}@$b%O7OCy^ta(R-cm#~)^>QLI#^K*kz*eS{U zWt3mm$TK#lpKIibkl`HD$Xv^*+S22tqea?jWP?SrH1eKBR%zs7tNfEjT3b%7R!Vt_ zMKU$A$|6fNQqt=DrjfB0xu&(!iMDmRKqHA3Ii``>7RhL%tUk8L7L6RYNX=x$xyvGt zYGjH+5}ul(w9bos~|E zO<_}w#9Jg!BMU6@q(+{w$WD!vv&t8yD&-0m>8z29EpmrOF0;sLja+GwgBpplNZl?< z`ApB$`%EDH07j7YKxT$qB)Y5TE%YIsfGqVPbAhb&AqNO4;p!xGQ{HQajQ329+;3C3 zP9vQya(;JZ^_E4tXygNnY}UvnR=H9SWtD6>cWPvsMGk7@b&Is^sjNy{o%I^I%_51{ zDNb2igKuf1rA0dQQk=OK*`tw9EplgX#reY`rTQpjnnm8$$P9~2x?XX*Sfs-Z3h8E% z^ZF{}HH$3O$ZCspx>0f7w#Yt>Y_iDYG{t$rBC-7xvdkiDHF9pq)M>eN#hGN0J{rle zR_*#L&R~l)8laF-7O6Qx1xd0Zn;S>&>z zic{X|Ow~w5i~OXKODxhUOIcO7$aamyTcqhQ#VKi#RY1Z~?w;E^8-0QgSp#HYX_wO_ z$MZfc=OT9jp-W7WzGX8ZShj>r4VKJh06#QKc^ir)3}C|+n)6l291mt_5TMkr1d%h{xndo1Vnk&08+a@vei$Q>3b zJz61W+kI!dMp|3s$uWwv)gsewR>+?g=`&U#_gG}|Eeh#jk=3^<n##JQz<`UkvNUKY>}QCnQ2?^lN!0nBF8l{ z*&>ziRmwvwa+OA!StLUvO)WB0BL^(9Un4_9rY_peQp)=*XNgAkTIB56igVl|w`t@x ztMi#g)>x$e9A))_Mefl^tgW5H8p*euwsV!$G3)D5jU2T|=sv}Xvq*Q1{AH2XHL}_& zm%m?Gt+U888W~}c6B;>Tb-F&Ftmasx{(}nn&LZz>(4h z$X1PXv`FG2rE``=zSPKci-aCgoR=)pMk50)(qAJjEHX?akcqDA7LQb-?*4A)3oi+rS!_7i@dIp%PjKj^U5mUA`dK8NNbDa zzo3v@i~OmPH5R$pjV!ZB{}qa})gmV~Qq>}(UQwJ|ERwQPA)i|06^&G}NQqY!=Vps! zYow(`4rnCVBG<1{Rv%mB9gSRKk(kwrv&ACgHFB{<-q*-xi~OvSCoIzIb*0naA~$Q~ zDT|a}qd50lWXp!j}xzi$Nu2)t)EfTMhY>RBt$lDfKwLw`uW|3bt@|8u}y{S0QTBPh-3i-k! zwKX!&B2zTd-6AF5R#xLIa@j_ObhXGZjofCD*iDM_u0@8vqmZX9vR@+)TIAAq6{oR9 z#%UzMB1<%~$s&{AQ&x0jSAwID3S^}~-q*;ZAv)Hpmp^)7dOY@exzJXD#xuMy6Zj5Rf>~zK=3iJ3dxc5#*y!l=leo)~D(lX%Xbr&(xi- z5#+h8)GA!%N49xh4IgsfcI9iB^k4}_IO6az(ya5P%ITRQQySSoXo(;%YtApoovQZ=Unx!m8L5%H zkl}o+k*h6o`3~i)nMG~^LQ4eMrjdI>Mu*-@Kuf+YjR_j5XY>9Q5CZ8sno42AovJhx z;+9685`{}cA>?BktY|MN6*4;C0ih*=B=1tlts%o%ppiBf*$#wsT3Y0SZ}2CU2y(qf zYS=U{1~L*Hx;hX=_0@zd?qftfP3(F5wAHMT@m~E~Vqr^^L52XiG=%%e8KJz_$M&lk zF*;9at8=W?Pe5|Pqcipq?+X|)R`I)azhSM$0-@zhi@d9mlAcLV^mn+26`Tl?4dh}U zvJD88SecNq>i0eV#1cV%(#W`w;f(x&7}TZ>vO^OAhVoU{I7 zih~>nLVH|~5#%vEjzhk#u<7Z2 zW(a?~NQIIL8DTlmXN9;wq$4ukzv4;t5v-~Oll@6>Xvwoyb4w{JI!5zb<$_m|*)>Zm zt1ir`$J4Rc(X^?=86M_ivCP6(?0=l|*dqQiF9EM=E9Q8vRTNv*A$zR*cO84;Icv2C zR+M+h2%c|Vh_8j=sJl`m}GH;UgTO1>t+syssG5a4ar zItp>UmlV11toIAcs9Z3Ib#4Gci$YwTvxLq;TrE+{LaoCbhW^qz3UPHxiP9Km)6spW+Mzg>~wY z9~-M@%_w6Nv=ws*@bb%tyjX+^adTQ;cvtW3A*%uBD(}qkc|TWJskal5m3N-9Vvf)1 zJYl8Y+e1e4v=wuFRu$N4IylsO{8?)5zM6LbItr^Kpv*ytr{OE89x{R~0W#3XIST_E z?UfNuIt_Uiamy!$y}Nx&l&ziDU_~v8Ic)!z)=`M7Q&H&rZ1>7m6_pNiSZ5&+S`^~y zoXc$x5}-Xl%yi*fivrNJBmymTPsD}p=;BD(?OF(Twk&5 z%WZX0_Ibv}Ra6Z!hwbkKLW@FNo$4yh*jy3Y8*V!DPA2lt2e5h%G3GFGb~xlc=|l2? zP%ae5RlZ!Lu(YkO?XaT#f;p_*zp6^1LR_6ISSOZQs`tCi>g?B6%<3T5RR+1?m}RN^;xFRJ}8Y^Y9@MDzOOCCsx&a1o<8aEedf< zqqaz)daoL>bE+#V=J--rN2E}_b)2legcY?+<`CeeUanFYLEZ!s#+C@u{0ikuA#Mum zvM;w~syE4#@={n)y)%aZFR6yoi6C2mOu&{%tLsw}$3&n-kljG~`8eZig}g&P%{U_)t=w6 zI@`1rb9^-zC#-I?Ru|M&zL?{)iWgRITdNFh#T=hieYSFIu)dwQtbi4jA#*qnN%fR> zg}6CwAau%F@9)5hbeO|B^RHAo3UPHBid@`bb#mgA6?1&KNDx--tW`@oNsEO!KC4E; z>OO0AL|ZY(XVqBb^tdgt$Lgz`GKalZYoNR<#La0F*2w}Z8tc1f&00Li>MYb&%we4w z4b==^A+AnSk)G;SXKaE>4|7;2u8~TQLR_7zSjX+z@~zJIu%dp0IjpmzvFbM>$kryR z--sX|(J3Qq<@#zSeC1kS?_8yPF^BEbn<-xr6*|9m?2!AlFaqE;JO=SpBN4 zh~u|PWGgz0Ov}M)GcS!;y?nJwA#waxNo*CPjJ!jG4tI!Hr6wvX;`psvvQ;B(^~=YD zRz<8PXe;9Qty-~_DUI}JYORP^HBC~!h~u|v%~qx~LcgrU*)~%egR~WK{8nw)3Pr%n ztEFzlc}`<>c}wMsIDV^Swz^zfRUNYo=lYD*RBc5ZztuHtMf)Eujqd$nRK%)OE9Hwg zeyg@@RZSUry<;nW60wTYR>bjJwPUMGv{k`pcTSF2Ez?%S@mr;^RXc69ru%rDjWqf4 zTB{Ti$8U8lTbUH@erqf2jn!w`ia36&_H5Na`zo_`+RG8Es=-?ktIlneFXH&E zy0TTSw(2l<1v*=k!ui^YIDV^cY*klVrT)ILNyKVsJLQWweyi?mHAGvLDmAi7#A=DQ zB97mx2V3EXmv6(b?TAuZuoxMQNqwhcoVRMyqw& zia36&>)9$+8F}B=y#u?5*)Q@tDqqC$Tiw7`J+;+co5tT0v0A3Bh~u~F%T{LGS=?y( zk%-lZPRbW?{8l%z)o0q*Qy4_~wpzBT#KRF^^E)eF#PM78W2+5n zv-kAA1M4GJeNq)n9KTgMTivaFH6D9y_lQ-cF3O5Heyjd$W$LTkob&IGSZ&i*#PM4V zV59et4y}KQ5kt(SDuYdz_j^k+KM=StDD$rt+u-5jrM~hRvmjNU&QfS4P~oq zwAK6TAE_3xI;*F$B97lGi>)xQ@v?ew#gP%KHQI_e#ws?Ch{M>5dNh-pNNmh?$`^59 zMH6aebl9%3&*NQDpTmZ^?TRt99CnIDV^KwxVlkDm94M zw0@(lh~u{!&Q_H*x9!O7S4FI%dMPF1_^tBTs_4?FtF4FwE2lK_*{YFF;cXYjqe+_5 zOw(4x@%t)ZD^nV`o>je7#A>#-B97l`1Y6N~Ydl0^>$Mee{8l5`%9KXG3MXERSRK(; z#8H}cdKWI~L?7agJEK?`KfE;QUj@z9q%1{S5yzxQ@kaZsM!xjjjEGflZABbdweH$I zwpVNP2c9>Et=b@Vu99(nGqn|S7{3Py43rfk>w(ai8{r%PQr3r5?4xEE5l#XSY7r5n zHxTOKBFI=ERJsvlA&{^Sc>_qS57`Zb`k{!`S=Xx(KZ4W+66fP|1=7%mi~>S4kcid8 zK+p&s!XqN(a8E}WPLPJKH?k1 zHBcDElnP=Em0!ekN-5UJOB~uEJ$rELoa{lFgRjZV%IG#?(4frGNl6X5v})4|TYF?@ z4j7W2hu8JVtyH>DK?)Lwwj9s7f z!+2@}Pn~k|hNb4^6yy};EOkWofHvu)ip)y4G5G}?pOIHIFLCHK zc^Sh`xh->a#=s64*@Fv)5arYvX%YuNtw;3FD6V)FqqtNj4(&E1JvXC!djG5pSsFS| zO{kJvWe(0uKSkcDlGCaBPL-|HblB#1%o&)GbxJQyZIf$CmDD{WKc7aJ2tOk~36-Cp zk(WN8fSVULFiK;ChD~rYpNZ)mr9pyj&h-(~y9{D_S7?yXSnmK08pY`y1u?Z1dX3d? zL@~QH-l#OfO}5Hg(|EPDLBpoF%~oT2mjTwmVtTi1&?K&b+6A#y@1TUKv>?_{rJiES z8^zRa4vWTWH>a3RL6bPWbAzXMZftF;{Wghftji@KE>8OeW__Twa+(w3O!*{Le%Y?WFN;$q! zqd1d-cvIp{;!TM+LC2v|fSC26JFW%^ak_(}m`$H<5x|;g3&iZ!CMqo`fjE#UX=$0ma?|je zJu*Ejb6{F7?Wgdbr?(^~#-(-0889@nASu6KU{X?-mdQ!&tX*Payx7{yil(C{HV*Jg z*I_v$Gw^3xRu0Mo?>QZqnUkhoh?Xaa)+dwzYB6kjmXWlX@W-j zfV_gV%$)vdgV0$!MXL%_XKK)Ztekvu$ypqflZ*GNn*3`219Fh8?6i^Q&8%rQnnpDi zi@(X!$aL`2DUy+wIcQ8;dfwm>!!oi9(hA1pW+b5(;>wETJgs$JL7V=AyJqC(d2Ks{Z%$x}k$MPqAb#MqW2$x}jD zhF+FXcK2uLA^Z^PviuO1Pq}86!-1eRhpx5tIj&C2QbcCAx3t&R;$*W0z!D4GS%gVUEOWh;F0S5%K~Oc z2{ar?RhhJL%FfUrg7djy?XA%AJi^1{L-H+JmV!&FkUBXY^fDUTCOKrzh3yXrO$o_% zaPTjuiY=55+V#q9qy(DriX~HomtPsBd$#%16GVYJ0^a6p!C!TlrCAVn(I)m08h}(5 zeZ{HO%d@1zb%eq+HXdzi3(c?YtVMf!t+XWh#siK8QS|J_SaLi%1J0bWGnM&>XreSX zSA((x+M$7944^g@TZF8p@k;m_Lqj*R{t!wgG>XxrP&;~cjjuwtub9o?-q5ujme%+% zWMwe0K1L*9cA>RK)9*xua3`EnzhJ3Yf^N0K*^aE8zrO;s_B{f|KIag(Y(P z%9QY^)Y#ayQ>^SshG&7H;bF%jhSl7T_#7KVyO8sG8P5M44cAd8Y51XV$a;*h?Ob<^ zlS^`xDeAWz3i7%t*n4j;i$y@3<_v9nh&qRSeS^a-LI z;u7-2tdM%^EU*OOfTbkg5dfRwd}?0-g9b+gC^3+eNbVnDB?VN5x*vcY3iKH$Q2@E- zIwjotfhP}BUjZ`2S{d`>vwcI7GJy~PF;4x4t%j<Y&JjekH|>*1uxP_t zg|2~&5aaAB@2OB?v^U1#OsR6?yGDo%YCjZY|FB_KqetpE$suQ=truF${J9Kp`T$AG zfc60z0+(`)=l^;Eh8Zwc8JIOHVFtL)Yj)I}LN9~@)6GVa5A5d zXA?83Jy1Y9}fWSqC@PA205>Vhj;%{=ukCb19u`Q^fX-i#@l7cn;Y+B7OH*ww6a4BOIs>YmjM06Axt*gLx<2aVc{qc zZYIowLq`)<;qXusRvpZQwFgY(Re;0KgtdoDtkdI6n4)N?nJ`s&G!lL$%&o&_zw0SG z1*dC7yO8tl=9YTKv`dX}jIixocXT`x)(49E&xB2RX2N7c9v@7f2_q(MnsVwKj12#X z5=Kg(b4Y}ce;&VMSo#D>t2};}fYE0W_W9=Vy9Y{fv~SwIOOT9YUjZ`2@o2AO9hGsj zZ+5lA&N|+{e|EKFXl#bGK(rUGmNC6u(h$wf)M*(@0ERnyZE_fGjt}j}z6h*?=?#0sk?0K+B_;(S zW{MN*i&gx_j*1`}AU(~!=s^vWn2!%r9yvPSNLRoTdI}qGmGS9z#*V79HgEeOn=e zp&V10hX(6TI|)N}evKrvUn%61r-g&2c2wzEeixc5rdj)DaGmDmCHSDc{B)SSyaA(= zyu7!f>Y+ihz|^|8wnImaKp`vp<>j}rB9dDVXvsDn@a9OlePh~CG6pgx18~^YH)!4* zY(D_|C1Cpp7pVui2UQS}HkrEl?T)Dm54zQcRV~-sk1lkO=

    C87f*^(o?6 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 z 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

    VV33^%@-ZW2Dn0l=-wc^Q%mb$g@ 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
    Go{wB|?hnX$PiRp8MIx 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

  • hP~2WIr_k*j%2YLdbv+!q>(8lFthvEg^*a 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